quodlibet-3.0.2/0000755000175000017500000000000012173213432013730 5ustar lazkalazka00000000000000quodlibet-3.0.2/docs/0000755000175000017500000000000012173213432014660 5ustar lazkalazka00000000000000quodlibet-3.0.2/docs/features.rst0000644000175000017500000000551212161032160017225 0ustar lazkalazka00000000000000.. _Features: Features ======== Audio Playback ^^^^^^^^^^^^^^ * Multiple audio back-ends (GStreamer, xine-lib) * Replay Gain support * Auto-selects between 'track' and 'album' mode based on current view and play order * Applies clipping prevention whenever available * Configurable default (fallback) and pre-amp values to suit any audio setup * Multimedia key support * Real shuffle mode, that plays the whole playlist before repeating * Weighted (by rating) random playback * Proper 'Previous' support in shuffle mode * A play queue * Bookmarks within files (or playlists, with a plugin) Editing Tags ^^^^^^^^^^^^ * Full Unicode support * Make changes to many files at once * Make changes across all supported file formats * Tag files based on their filenames with configurable formats * Rename files based on their tags * No ugly ``%a``, ``%t`` patterns - more readable ````, ```` instead * Fast track renumbering * See full instructions at :ref:`EditingTags` Audio Library ^^^^^^^^^^^^^ * Watch directories and automatically add/remove new music * Hide songs on removable devices that may not always be there * Save song ratings and play counts * Lyrics downloading and saving * Internet Radio ("Shoutcast") support * Audio Feeds ("Podcast") support User Interface ^^^^^^^^^^^^^^ * Simple user interface to Just Play Music if you want * Useful as a small window or maximized, no feeling cramped or wasted space * Album cover display * Full player control from a tray icon * Recognize and display many uncommon tags, as well as any others you want. Especially useful for classical music. Library Browsing ^^^^^^^^^^^^^^^^ * Simple or regular-expression based search * Constructed playlists * iTunes/Rhythmbox-like paned browser, but with any tags you want (Genre, Date, etc) * Album list with cover art * By directory, including songs not in your library Python-based plugins ^^^^^^^^^^^^^^^^^^^^ * Automatic tagging via `MusicBrainz <http://musicbrainz.org/>`_ and CDDB * On-screen display popups * Last.fm/AudioScrobbler submission * Tag character encoding conversion * Intelligent title-casing of tags * Find (and examine / remove) near-duplicate songs across your entire collection * Audio fingerprinting of music * Control Logitech Squeezebox devices. * Scan and save Replay Gain values across multiple albums at once (using gstreamer) File Format Support ^^^^^^^^^^^^^^^^^^^ * MP3, Ogg Vorbis / Speex / Opus, FLAC, Musepack, MOD/XM/IT, Wavpack, MPEG-4 AAC, WMA, MIDI, Monkey's Audio UNIX-like integration ^^^^^^^^^^^^^^^^^^^^^ * Player control, status information, and querying of library from the command line * Can used named pipes to control running instance. * Now-playing is available as a fixed file ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/requirements.rst���������������������������������������������������������������0000644�0001750�0001750�00000003374�12173212464�020150� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _Requirements: Requirements ============ Core Dependencies ----------------- Quod Libet depends on the Python runtime and associated libraries. * `Python <http://www.python.org>`__ (>= 2.6) * `PyGObject <https://live.gnome.org/PyGObject>`__ (>= 3.2) * `GStreamer <http://gstreamer.freedesktop.org/>`__ (>= 1.0) or `xine-lib <http://www.xine-project.org/>`__ (>= 1.1): * `Mutagen <https://mutagen.readthedocs.org/>`__ (>= 1.14): Particular audio formats depend on various *GStreamer* decoding elements, as well as other Python modules. GStreamer splits their downlads into *''good''*, *''bad''*, *''ugly''*, and *''ffmpeg''* packages, each of which contains elements; you probably want them all. Additional Features ------------------- *Audio Feed support* depends on HTTP support and `Universal Feed Parser <http://www.feedparser.org>`_. Many parts of Quod Libet benefit from *D-Bus* and its `Python bindings <http://dbus.freedesktop.org>`_. *iPod support* depends on `libgpod <http://www.gtkpod.org/>`_. *Device support* depends on `UDisks 1 <http://www.freedesktop.org/wiki/Software/udisks>`_. Plugins ------- Part of Quod Libet's strength is in its rich array of plugins to extend the base functionality and interface with other systems. Some of these depend on libraries of their own. If you don't have these, the plugin manager will catch these errors and disable the plugin to avoid errors in QL itself, and present them in the plugins error section. Once you've installed the libraries, the plugins should work as expected. Some notable examples: * The auto library update plugin depends on `pynotify <https://github.com/seb-m/pyinotify>`_ * Zeitgeist plugin depends on the `python zeitgeist bindings <http://zeitgeist-project.com/news/python/>`_ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�015755� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/config_files.rst���������������������������������������������������������0000644�0001750�0001750�00000004027�12161032160�021133� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _ConfigFiles: Configuration Files =================== QL stores some of its configuration as plain text files, and in some cases it may be convenient to edit these files directly, or to synchronize them across different computers/ home directories. Like many Linux applications, QL stores user configuration in a hidden directory, in this case ``~/.quodlibet``. Feel free to explore; but maybe make a backup of the directory first. Saved values for search, tagging and renaming patterns ------------------------------------------------------ For :ref:`searching your library <Searching>`, :ref:`editing tags from a filename pattern <EditingTags>`, and :ref:`renaming files based on tags <RenamingFiles>`, you can save the (search or pattern) values you enter for later use. See the relevant section for how to do it using the GUI. The patterns you create using "saved values" are in fact stored in simple text files: * ``~/.quodlibet/lists/queries.saved``: Search patterns * ``~/.quodlibet/lists/tagpatterns.saved``: Patterns to tag files based on filename * ``~/.quodlibet/lists/renamepatterns.saved``: Patterns to rename files based on tags You'll see that the format is very easy: Each saved pattern consists of two lines, the first line contains the QL pattern, the second line its name. The name may be identical to the pattern. The next saved "pattern -- name" pair follows immediately on the next two lines. Here's an example of what ``~/.quodlibet/lists/queries.saved`` might look like:: artist = schubert All by Schubert artist = radiohead All by Radiohead &(genre = classical, #(lastplayed > 3 days)) &(genre = classical, #(lastplayed > 3 days)) ~format = ogg All ogg files Or an example of a ``~/.quodlibet/lists/renamepatterns.saved``:: ~/music/<artist>/<album>/<tracknumber|<tracknumber>. ><title~version> Music from an album ~/music/misc/<artist> - <title> Stray song Just edit these files or synchronize them across computers or home directories (for different users) as needed. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/renaming_files.rst�������������������������������������������������������0000644�0001750�0001750�00000012007�12161032160�021463� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _RenamingFiles: Renaming files ============== Basic Syntax ------------ Quod Libet allows you to rename files based on their tags. In some cases you may wish to alter the filename depending on whether some tags are present or missing, in addition to their values. A common pattern might be:: <tracknumber>. <title~version> You can use a ``|`` to only insert text when a tag is present:: <tracknumber|<tracknumber>. ><title~version> You can also specify literal text to use if the tag is missing by adding another `|`:: <album|<album>|No Album> - <title> A reasonable use of albumartist would be:: <albumartist|<albumartist>|<artist|<artist>|No artist>> ..which uses the first of the following: Albumartist, Artist or "No artist". You can of course also move files across your filesystem to another directory by mixing path elements and ``<tag>`` syntax:: /home/*username*/Music/<artist>/<album>/... Simple Renames -------------- Like tagging by filename, renaming by tags uses tag names enclosed by ``<...>`` to substitute values. To rename songs as their artist followed by their title, use ``<artist> - <title>`` (The file extension, .ogg, .mpc, and so on, is automatically added). Other common patterns include * ``<tracknumber>. <title>`` * ``<tracknumber>. <artist> - <title>`` * ``~/music/<artist> - <album>/<tracknumber>. <title>`` * ``~/music/<artist>/<album>/<tracknumber>. <title>`` You can also use tied tags to rename, e.g. ``<artist~title>``. Creating Directories -------------------- Note that if you use ``/`` (a directory separator) in your filename, you ''must'' start the pattern with a ``/`` (or a ``~/``, which expands to your home directory). To see why, consider what would happen if you tried to rename the same file twice with ``<artist>/<title>``. The first time it would go under ``Artist/Title.ogg``, the second time, ``Artist/Artist/Title.ogg``. When you specify the full path, this can't happen. If you don't use a `/` in the pattern, the file gets put in the same directory. Conditional Renaming -------------------- Consider the ``<tracknumber>. <title>`` pattern. When the file is missing a track number, you get a filename that starts with ., which isn't good. So Quod Libet lets you use ''conditional renaming'' to avoid that. To use conditional text, after the tag name (but inside the ``<...>``) put a ``|`` (a pipe). Then after the pipe, place all the text you want, including other tag names inside ``<...>``. That text will only be added when that tag isn't empty. To avoid the original problem, only display the track number, period, and space when the track number tag exists: ``<tracknumber|<tracknumber>. ><title>``. Quod Libet also lets you change the text if a tag ''doesn't'' exist: Use a second pipe. ``<tracknumber|<tracknumber>|00>. <title>`` will use the track number at the start of the filename if it exists, or *00* if it doesn't. Go crazy with conditions / More examples ---------------------------------------- So you basically want to remember that it goes ``<condition|<conditional tag>|<else tag>>`` You can however even put conditions inside each other. Here's an example that I just created, and so far it seems to work: I first had:: /mnt/musik/<genre|<genre>/><artist|<artist>|Unknown>/<album|<album>/><tracknumber|<tracknumber> - ><title> Let's dissect this: * ``/mnt/musik``: My basic music partition * ``<genre|<genre>/>``: If there is a tag "genre", put the song into that folder (creating the folder if necessary). If there is no tag genre, skip this level in the folder hierarchy (note that the trailing slash of ``<genre>/`` is inside the < > that delineate the conditional "block". * ``<artist>|<artist>|Unknown>/``: If there's a tag artist, put everything into that folder, else put into a folder called "Unknown". Not that the trailing slash is outside the < > that delineate the conditional block, since we always want that folder level. * ``<album|<album>/>``: Album folder as needed, else skip * ``<tracknumber|<tracknumber - >``: Prepend tracknumber if it exists * ``<title>``: Duh. However, for songs that don't have a genre tag, I wanted to use a tag I use called "language" and sort into that folder instead. But I have some songs that have a genre tag and also a language tag, and those songs should only go into the genre folder; the language folder should be ignored. Turns out QL can do this just fine, by expanding the ``<genre>`` conditional block in the expression above to ``<genre|<genre>/|<language|<language>/>>``. Basically, the pipe after the second ``<genre>/`` introduces what should be done if the first condition isn't met (i.e. no genre tag), but here instead of putting straightforward text or another label we then introduce a second conditional block, ``<language|<language/>>``, which puts in a language tag folder, if the song has a tag "language". The full expression now looks like this:: /mnt/musik/<genre|<genre>/|<language|<language>/>><artist|<artist>|Unknown>/<album|<album>/><tracknumber|<tracknumber> - ><title> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/tags/��������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�016713� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/tags/index.rst�����������������������������������������������������������0000644�0001750�0001750�00000000141�12161032160�020542� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Tags ==== .. toctree:: :titlesonly: tags internal_tags tied_tags patterns �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/tags/internal_tags.rst���������������������������������������������������0000644�0001750�0001750�00000010314�12161032160�022270� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _InternalTags: Internal Tags ============= Quod Libet stores a number of tags internally, that are either not stored in files themselves, or are derived from the values in the files. String Tags ----------- * ``~basename``: The last component of the full path name * ``~errors``: A list of errors that have occured trying to play this file * ``~dirname``: Everything but the last component of the file path name * ``~filename``: The full path name * ``~format``: The file format * ``~length``: The length of the file in H:MM:SS format * ``~mountpoint``: The component of the full path name that corresponds to the file's immediate parent mount * ``~performers``: A list of performers, including :ref:`roles <PerformerRoles>` * ``~people``: A list of all people involved in the song * ``~rating``: A string representation of the song's rating (e.g. ★★★☆) * ``~uri``: The full URI of the song * ``~year``: The release year, derived from the ``date`` tag * ``~originalyear``: The original year, derived from the ``originaldate`` tag * ``~playlist``: Playlist names of which the song is part of * ``~filesize``: Human formatted size (e.g. *4.5 MB*) The ``~people`` Internal Tag ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The internal ``~people`` tag combines the following tags to one: ``albumartist``, ``artist``, ``author``, ``composer``, ``~performers``, ``originalartist``, ``lyricist``, ``arranger``, ``conductor`` in this exact order. In case of sorting this means that all album artists come first followed by all artists and so on. In case of song collections and albums the values of each included tag are sorted by frequency. Song Collections / Albums ^^^^^^^^^^^^^^^^^^^^^^^^^ * ``~length``: The length of all songs in H:MM:SS format * ``~long-length``: The length of all songs in "H hours, M minutes, S seconds" format * ``~tracks``: The real number of songs in the collection in "# track(s)" format * ``~discs``: The number of different discs in "# disc(s)" format * ``~rating``: The average rating in music notes * ``~filesize``: Total Human formatted size (e.g. *4.5 MB*) All other tags return a list of values retrieved from all songs, without duplicates, sorted by their number of appearance. Numeric Tags ------------ * ``~#added``: The date the song was added to the library * ``~#bitrate``: The bitrate of the song, in kilo bits per second * ``~#disc``: The disc number of the song (the first half of the ``discnumber`` tag) * ``~#discs``: The total number of discs in this song's collection * ``~#filesize``: The size in bytes of this song * ``~#lastplayed``: The time this song was last played through * ``~#laststarted``: The time this song was last started * ``~#length``: The length of the song, in seconds * ``~#mtime``: The time this file was last modified * ``~#playcount``: The total number of times you've played the song through * ``~#rating``: The rating of the song, as a number between 0 and 1. * ``~#skipcount``: The total number of times you've skipped through the song * ``~#track``: The track number of the song (the first half of the ``tracknumber`` tag) * ``~#tracks``: The total number of tracks in the album * ``~#year``: The release year, derived from the ``date`` tag * ``~#originalyear``: The original year, derived from the ``originaldate`` tag Note some numeric tags have string tag equivalents (see above) for human-readable format. Song Collections / Albums ^^^^^^^^^^^^^^^^^^^^^^^^^ * ``~#tracks``: The real number of songs in the collection * ``~#discs``: The number of different discs in the collection * ``~#filesize``: The total filesize of all songs in the collection For all other numeric tags it is possible to define numeric functions by appending ``:numeric_func`` to the tag name (``~#playcount:avg`` for example). All internal numeric tags use a default function in case no function is given. For user defined numeric tags the average value is returned by default. * ``avg``: Returns the average value (``~#rating``) * ``sum``: Returns the summation of all values (``~#length``, ``~#playcount``, ``~#skipcount``) * ``min``: Returns the smallest value (``~#year``) * ``max``: Returns the largest value (``~#added``, ``~#lastplayed``, ``~#laststarted``, ``~#mtime``) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/tags/patterns.rst��������������������������������������������������������0000644�0001750�0001750�00000004475�12161032160�021311� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Tag Patterns ============ Tag patterns allow more complex string representation of tags, with a notion of if-null defaulting; whilst this sounds complex (and it can be!) it's very useful where libraries have wildly varying tags. Tag patterns can include strings (e.g. tag names) enclosed in angled brackets like this ``<artist> - <title> (<album>)`` Which might produce: ``The Beatles - Drive My Car (Rubber Soul)`` Usage ----- Tag patterns in QL can be used to change the information displayed in various places, like the playing song area, columns in the song list and the album list in the album browser. They can be used to group songs in the paned and the album collection browser in more complex ways. And, of course, tag renaming based on tags uses tag patterns to create the file names and folder structure. Conditional Tags ---------------- A simple if-then-else concept can be used in tag patterns, testing if a tag is non-empty. The syntax uses the pipe (``|``) character as a delimiter, in either of these formats: * ``<tag-expression|non-empty-value>`` or * ``<tag-expression|non-empty-value|empty-value>`` So using the full (second) form, a Pattern of: ``<album|Has An Album|No Album>`` produces *Has An album* for any song with at least one ``album`` tag value, else *No Album*. Note that these can be recursive, i.e. both `non-empty-value` and `empty-value` are themselves tag patterns, which could contain a conditional. A more useful example now: ``<albumartist|<albumartist>|<artist>>`` This will look for the ``albumartist`` tag and display that if available, else use ``artist`` (nearly always available). Examples: * ``<~year|<~year>. <album>|<album>>``: *2011. This is an album title* * ``<title>, by <albumartist|<albumartist>|<composer|<composer>|<artist>>>``: *Liebstraum no. 3, (by Franz Liszt)* In some situations (e.g. the Info area pattern), the result is actually GTK markup which uses its own HTML-like patterns with tags like ``<big>...</big>`` and ``<b>...</b>``, so you have to escape these carefully: :: \<span weight='bold' size='large'\><title>\</span\><~length| (<~length>)> : \<b\><~rating>\</b\><version| \<small\>\<b\><version>\</b\>\</small\>><~people| by <~people>><album| <album><tracknumber| : track <tracknumber>>> Note also the literal newlines. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/tags/tags.rst������������������������������������������������������������0000644�0001750�0001750�00000005173�12161032160�020403� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _AudioTags: An Introduction to Tags ======================= Overview -------- Quod Libet supports free-form tags for most of the common audio formats. This means you can name your tags in any way you want, but using common tag names for common purposes is advised because it helps QL to write the tags in a way that other media players can understand them and also helps QL understand certain tag values and make use of them. Quod Libet also supports expressions using "tied tags" in several contexts - see :ref:`TiedTags` Sort Tags --------- Tags ``artistsort``, ``albumsort``, ``albumartistsort``, ``performersort`` (including roles) will be used for sorting if they are present. Lets say you have a song with an ``artist`` tag *The Beatles* and want it to be sorted as if it was named *Beatles, The*, you can add an ``artistsort`` tag containing *Beatles, The*. * QL includes a basic plugin for creating such sort tags automatically. * The musicbrainz plugin includes an option to write sort tags if found. Internal Tags ------------- Internal tags are tags that start with a ``~`` like ``~people``, ``~length`` or ``~year``. They are either not stored in files themselves, or are derived from the values in the files. See :ref:`InternalTags` for a complete list. Album Identification -------------------- Quod Libet uses various tags to define what songs are in the same album. First of all ``album`` (or ``albumsort`` if present) will be used. In case two albums have the same name the following tags will be used (ascending priority): ``musicbrainz_albumid``, ``labelid``, ``album_grouping_key``. Common scenarios ^^^^^^^^^^^^^^^^ ''I have a two disc album and each disc is shown separately.'' Make sure the album tags (and ``albumsort`` if present) are the same (remove 'CD1/2' etc.). In case you used the musicbrainz plugin and each disc got a different ``musicbrainz_albumid``, add a nonempty ``labelid`` to all songs. ''Two albums have the same name and are merged.'' Add a nonempty labelid to one of the albums, or use the musicbrainz plugin to get a `musicbrainz_albumid` for at least one of them. Common Questions ^^^^^^^^^^^^^^^^ ''Why doesn't QL know that my albums are different ones by seeing that they don't have the same artist?'' There are many songs that have multiple artist, so this can't be decided on the basis of artist tags. Replay Gain Tags ---------------- The following (fairly standard) tags are used for volume adjustment: * ``replaygain_track_gain`` * ``replaygain_track_peak`` * ``replaygain_album_gain`` * ``replaygain_album_peak`` See ReplayGain section for further details. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/tags/tied_tags.rst�������������������������������������������������������0000644�0001750�0001750�00000002362�12161032160�021405� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _TiedTags: Tied Tags ========= Tied tags are expressions to produce a readable formatted output of more than one tag. Tag values are outputted left to right, with the default output separator as ``-``. To combine multiple tags start the expression with ``~`` and separate each tag by ``~`` again. Examples: ============================== ================================ ========================================================= Included Tags Tied Tag Result ============================== ================================ ========================================================= artist, title ``~artist~title`` *Bob Marley - Jammin'* ~#track, ~dirname ``~~#track~~dirname`` *5 - /home/user/music/Reggae* date, artist, album, ~filesize ``~date~artist~album~~filesize`` *2000 - Bob Marley - Songs of Freedom (Various) - 6.9 MB* ============================== ================================ ========================================================= Usage in Quod Libet ------------------- Tied tags can be used in tag patterns and searches as if they were normal tags: :: ~artist~title=/AC.?DC/ :: <tracknumber|<tracknumber>. ><title~version> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/overview.rst�������������������������������������������������������������0000644�0001750�0001750�00000011402�12161032160�020345� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Overview ======== The Fundamentals ---------------- Explanation of the GUI elements ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ When you start up Quod Libet for the first time, and have configured your library, it should look something a little like the screenshot here, which is show with annotations. These are all explained below. .. figure:: images/main_overview.png :align: right :width: 400px :figwidth: 400px A basic view of Quod Libet, and its GUI elements 1. Player Controls ^^^^^^^^^^^^^^^^^^ Provides buttons for seeking, changing volume and changing the currently played song. By right-clicking, they also provide context menus with advanced options: * The volume button lets you choose the active replaygain mode (album, track, automatic). * The seek button can display the remaining instead of the elapsed time and provides the option to add a bookmark for the current song position. * The context menu of the play button has an option to pause playback after the current song. 2. Current Song Information ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Displays information about the currently playing song. Again, the context menu contains more options, like rating and tag editing for the current song. There is also an entry called *Edit Display...* which lets you change everything that is shown in that area, like the file format, bitrate, font size etc. The syntax is the same as for :ref:`renaming files <RenamingFiles>`. 3. The Song List & Browser ^^^^^^^^^^^^^^^^^^^^^^^^^^ As the name suggests, the song list is a list of matching songs presented by the current browser. The browser consists of a way to filter your library (songs), e.g. a simple search or by a list of albums. In the image above, no browser is active so only the current song list is shown. You can change the active browser by selecting one in the *View* menu. 4. Playback Order ^^^^^^^^^^^^^^^^^ The active playback order affects the selection of the next song or what happens if you manually switch to a new song. Note that Play Order Plugins add to this list allowing QL new ways of ordering songs, like following your selection or adding songs to the queue instead of playing them immediately. The *Repeat* checkbox can be used in conjunction with the playback orders, to repeat the currently selected view of songs after all song have been played or skipped. It's important to note that the playback order will not affect the queue, which has its own playback settings. 5. Song Information ^^^^^^^^^^^^^^^^^^^ The area in the bottom-right corner shows information about all songs in the song list *or* about your song selection if more than one song is selected. It also shows progress information of background operations like importing music. The Queue --------- .. image:: images/queue.png :width: 350px :align: right The play queue and the song list determine what's played next. The queue takes precedence whenever it has songs, but after it's empty, playback will continue in the main song list where it left off. To add songs to the queue, right-click and *Add to Queue*, use the shortcut ``CTRL+Return`` or select songs in a different browser window. More Browsers ------------- .. image:: images/browser_window.png :width: 350px :align: right Besides the active browser in the main window, you can open as many different browser windows as you want by selecting one under *Music* > *Browse Library* or in the tray icon plugin context menu. In an separate browser, double-clicking a song will result in it being added to the queue rather than played immediately (as per the main browser). See the :ref:`Browsers Guide <Browse>` for full details on browsers and the various implementations. Example usage: * Manage playlists by dragging songs across browsers (eg Search browser to Playlist browser) * Edit the tags of some songs while the ones in the main song list get played etc. * Check out other songs by the artist currently playing without disturbing that list. The Library ----------- If all your music lives in one folder on your computer, adding your entire music collection in Quod Libet is easy. From the main menu bar, select *Music* > *Add a Folder* and browse to the top-most folder containing your music. By default Quod Libet will scan your selected folder recursively, adding all the songs found to your library automatically. Add more folders if you wish. You may also check the *watch this folder for new songs*. If you want to change folder settings later, you can in the preferences window. Depending on the size of your music collection, it may take a few minutes to perform the initial scan. Plugins ------- .. image:: images/plugins.png :width: 450px The image above shows the plugin manager, from where you can enable / disable / configure all available plugins. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/searching.rst������������������������������������������������������������0000644�0001750�0001750�00000013752�12161032160�020454� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _Searching: Searching Your Library ====================== Pretty much every view in Quod Libet contains a search entry where you can enter search terms and save them. Quod Libet will search in artist, album, title, version, and any other visible columns for what you enter. If that's enough for you, you can stop reading now. But what if you want something more powerful? Combining Searches and Negation ------------------------------- You can combine search terms using ``&`` ("and") and ``|`` ("or"): If you want to listen to Electronic music but no Ambient: :: &(electro, !ambient) Or you want to get all songs by `Neutral Milk Hotel <http://en.wikipedia.org/wiki/Neutral_Milk_Hotel>`_ including the solo performances of `Jeff Mangum <http://en.wikipedia.org/wiki/Jeff_Mangum>`_: :: |(mangum, neutral milk) You can get all songs that don't match the search term using ``!``:: !electro Lets say you want to listen to you whole library but are not in the mood for classical music or songs by `The Smiths <http://en.wikipedia.org/wiki/The_Smiths>`_:: !|(classical, smiths) While these searches are easy to type in, they depend on the visible colums and the active browser, also the last one might exclude some songs wich happen to contain "smiths" in their album title. Searching a Specific Tag ------------------------ To search a specific tag, use a search like:: artist = delerium album = bargainville The search terms can't use quotes (``"``), slashes (``/``), hashes (``#``), pipes (``|``), ampersands (``&``), or bangs (``!``); these characters have special meanings for advanced searches. If you want an exact match, use quotes:: artist = "a girl called eddy" If you need to put a ``"`` inside the quotes, you can put a ``\`` before it:: version = "12\" mix" .. ''That's great, until I want to hear all my songs by `BoA <http://www.avexnet.or.jp/boa/>`__, and not the ones by `Boa <http://www.boaweb.co.uk/>`__. ``artist = "boa"`` gives me both!'' You can put a ``c`` after the last " to make the search case-sensitive:: artist = "BoA"c artist = "Boa"c You can also search :ref:`internal tags <InternalTags>`, e.g. * ``~format = Ogg Vorbis`` * ``~dirname=Greatest Hits`` - search for all songs in Greatest Hits folders. It's also possible to search in multiple tags at once: * ``*artist, performer = "Boa"c`` Combining Searches ------------------ ''That's cool, but I want something cooler.'' Like before you can combine searches using ``&`` ("and") and ``|`` ("or"); either grouping entire searches, or just the tag values. Although the examples below use simple keywords, you can also use exact matches or regular expressions. :: artist = |(Townshend, Who) &(artist = Lindsay Smith, album = Vat) The first one will find anything by `The Who <http://www.thewho.net/>`_ or guitarist `Pete Townshend <http://www.petetownshend.co.uk/>`_'s later work. The second one will only give you the songs that match both, so you'll find songs `Lindsay Smith <http://www.lindsay-smith.com/>`_'s `Tales From The Fruitbat Vat <http://www.cdbaby.com/cd/lindsaysmith>`_, but not her other albums. You can also pick out all the songs that ''don't'' match the terms you give, using ``!``. :: genre = !Audiobook is probably a good idea when playing your whole library on shuffle. Numeric Searches ---------------- ''That's pretty cool, but ``year = |("2001", "2002", "2003", "2004", "2005", "2006")`` is pretty unwieldy. And what about everything before 2001?'' Using ``#``, you can search your library for numeric values. Quod Libet keeps some internal numeric values - ``track``, ``disc``, ``rating``, ``length``, ``playcount``, ``skipcount``, ``added`` (time added to the library), ``mtime`` (time last modified), ``lastplayed``, and ``laststarted``. * ``#(skipcount > 100)`` could find really unpopular songs, or * ``#(track > 50)`` to figure out who makes really insane albums Times like `added` are stored in seconds, which is pretty cumbersome to search on. Instead, you can search with semi-English, like * ``#(added < 1 day)`` to find songs added in the last day (if you think that that's backwards, mentally add 'ago' when you read it). Quod Libet knows about seconds, minutes, hours, days, months (30 days), and years (365 days), kB (Kilobyte), MB (Megabyte), GB (Gigabyte). You can also use ''HH:MM'' notation, like * ``#(2:00 < length < 3:00)`` to find songs between two and three minutes. Besides the values QL provides, any tag value that's a number in your files can be searched like this. So the solution to the original problem is * ``#(year > 2000)`` and * ``#(year <= 2000)`` Of course, you can combine these with other kinds of searches. * ``&(genre = classical, #(lastplayed > 3 days))`` * ``&(artist = "Rush", #(year <= 1996))`` Playlists --------- You can use the ``~playlists`` internal tag to search by playlists. It is populated with a list of all the playlists that song appears in. This is surprisingly powerful if you're a playlist user. * ``~playlists=chilled`` will return all songs included in any playlist with "chilled" in its name. * ``~playlists=|("Chilled", "Jazzy")`` for all songs in either (or both) of those playlists. * ``&(#(rating>=0.75), ~playlists="")`` will return all high-rated songs *not* in any playlist Real Ultimate Power: Regular Expressions ---------------------------------------- Quod Libet also supports searching your library using ''regular expressions'', a common way of finding text for Unix applications. Regular expressions look like regular searches, except they use / instead of ", and some punctuation has special meaning. For more information about regular expressions, there are many good tutorials on the web, such as `Kars Meyboom's <http://analyser.oli.tudelft.nl/regex/index.html.en>`_. Some examples: * ``artist = !/\sRice/`` or using the default tags * ``/^portis/`` like with exact matches append a `c` to make the search case-sensitive * ``/Boa/c`` Now you can search anything! ����������������������quodlibet-3.0.2/docs/guide/index.rst����������������������������������������������������������������0000644�0001750�0001750�00000000321�12161032160�017604� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������User Guide ========== .. toctree:: :titlesonly: overview tags/index searching browse/index editing_tags renaming_files playback/index interacting config_files faq ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/interacting.rst����������������������������������������������������������0000644�0001750�0001750�00000007510�12161032160�021013� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Interacting with Quod Libet =========================== In Python --------- Quod Libet supports :ref:`plugins written in Python <PluginDev>`. These plugins can interact with songs more directly than the other interfaces, changing or reading metadata using dict-like !AudioFile objects. The plugin interface has not yet stabilized, although we do not expect it to change drastically in the future. The Unix Way ------------ Querying the player ^^^^^^^^^^^^^^^^^^^ Quod Libet writes information about the current song to ``~/.quodlibet/current``. The file is in key=value form. Key values are in UTF-8, except for the ``~filename`` key, which has unknown encoding (but will point to the file being played when interpreted as a sequence of bytes). There is a ``--print-playing`` option which can use the same syntax as the RenamingFiles interface to print information about the current song: ``quodlibet --print-playing '<artist> - <tracknumber~title>'`` ``quodlibet --status`` provides player state information. The first word will be either *playing*, *paused*, or *not-running*, followed by * the selected View, * volume setting (0.0 - 1.0) * Playback order & repeat settings If the View is SearchBar, then the text currently in the search bar will be displayed on a second status line. Controlling the player ^^^^^^^^^^^^^^^^^^^^^^ Quod Libet understands a number of command line arguments to control a running player. For a full list, see the man page. * ``--next``, ``--previous``, ``--play``, and ``--pause`` should be self-explanatory; ``--play-pause`` toggles pause on and off. * ``--volume n`` sets the volume to anywhere between 0 (muted) or 100 (full volume) * ``--seek <time>`` seeks within the current song. * ``--query <search text>`` searches in your library (if the current browser supports it). * ``--play-file <filename>`` plays that file or directory. Quod Libet can also be controlled via a `FIFO <http://en.wikipedia.org/wiki/Named_pipe>`_ , ``~/.quodlibet/control``. To see how the command-line arguments map to FIFO commands, refer to ``process_arguments()`` in http://code.google.com/p/quodlibet/source/browse/quodlibet/quodlibet.py quodlibet.py; as a simple example:: # Sets volume to 50% echo volume 50 > ~/.quodlibet/control Integration with third party tools ---------------------------------- Quod Libet in Conky ^^^^^^^^^^^^^^^^^^^ `Conky <http://conky.sourceforge.net/>`_ is a lightweight system monitor for X. It includes builtin objects for many popular music players, but not quodlibet (yet). That doesn't mean you can't use conky with quodlibet. After installing conky, add the following to your```~/.conkyrc`` file:: ${if_existing /<path to your home directory>/.quodlibet/current} ${exec quodlibet --print-playing "<artist>"} ${scroll 50 ${exec quodlibet --print-playing "<title~album>"} } ${endif} will display the current artist on one line with a scrolling display of song title and album on the next line. Conky will only attempt to display this information if quodlibet is playing. eSpeak: Speech Synthesizer ^^^^^^^^^^^^^^^^^^^^^^^^^^ You can use `eSpeak <http://espeak.sourceforge.net/>`_ to hear the current playing title. :: quodlibet --print-playing "<~~people~title>" | espeak -s 120 -v $(quodlibet --print-playing "<language|<language>|en>") In this example Quod Libet will use the value of the language tag to tell eSpeak which language/voice to use for the specific title (Use ``espeak --voices``` to get a list of all available languages). You can also lower the volume during speaking:: VOL=$(echo $(quodlibet --status | head -n1 | cut -d\ -f3)*100 | bc) quodlibet --volume=$(echo $VOL/3 | bc) quodlibet --print-playing "<~~people~title>" | espeak -s 120 -v $(quodlibet --print-playing "<language|<language>|en>") quodlibet --volume=$(echo $VOL/1 | bc) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/images/������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017222� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/images/main_overview.png�������������������������������������������������0000644�0001750�0001750�00000130766�12161032160�022611� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������H���sRGB���� pHYs�� �� ����tIME�(]#���bKGD�����vIDATx}uxG﻾{NPۖB)R\SwBABB'D!݅o΄MlKH0{]wݝٙ3g7s93{?Mlb&6Mlb&6Mlb&6Mlb[LX70c3)% $|n• a* Xe缴oe3Jz@`yo:I[P~9Ed\'\[Z ,?Q_?oy 4 A8ҺKZm)^.g'Mׂ}0m-\{CWSz}:/i}Uyԥ)^MyyːEzѹP2I,&mu m0Ô70b9X}m2Uy`wNT%!M,‚Sn\%W 4�V>W`WTx;R׵Awbϛ)}UײHϓWMbtj64L=} 5 6ڋ^ RKv^+DYyrΉ9TnXIePAdHʒX*e)Aߋ/=iϏexeL 3\ℛ:!<m._:Fϫ+^/?a!+AVFk6^=w0Y7HR.tH:nƘ"UUeK ̬ OmFbl43.ZA]_wݫsus8tŖD&aܟUy?hYU5ϼ/G}]uSQ;K_gYsZsހk`,OSSyԤKmhg=mq֐ȍWUݿ<ڔ(8sмC<<BS,Pgҥ^~AϬ,#Lc:}_{s5FGC*;7y N8".%%e7 o8qk7cfCq֍|Qzԥ-)ڨ*&8zI(bƧfᄱ#? UkdQ0v'm3%/.H[dB:V /ݫ ^ݶW{4ɩ~FH]OMpt~f ?EfN]0ies[E%%q+4yDhz)?mS\b]}RT=;ʞGM&촳$#ڌKF׫*Kն,`:"^u&_`ufMzY<ұDR@W9`71uF։gJHeף)]Àju\4uìwfaqpғ++zV,K Lgn\er.˴6<.Yc"@"UmЦ'}/9b 0s~\k95/\t#0+<ߌp% Kcj]6{&K�zc9~5\z\]f\{iy<yqeU;Lެުl貶ϛ)Ŋ UVDnt$UVk[BjD]EYuMeY:.(POrmXu+͢;ut۶!TT<v w>X@VD9`VgFONI9JHeף)]V#1-0˚ϑDP'G[lrRG?:]{[OdY0йRLtP %yi?)1=R 0Oǎ(VNuPJʱ ppDI䆦&@;v8+ÙuWk;66UۜCzv:F}TOg?$ruR$W/?,¤70e%%#+_hΤKӠyeV/9/9ZeRt)O u|%eUgU! <JHeף)]X^7qw6zɠtM*_U~yY=x=KeiT&ɣMWȩ~ e~0{CK ?* hԺK猭}/M�1/Uj[>3[\)|Qfkeݞ7mAaE*r[~KO˟zueIJ)k~KUX^2UE3* .P?͘h;xSvR]wVujL7? RGBfI+v#2Jˮznt\-]<R9rtX7Or^6ciWYQť/OFD<ڴ,]3HMKW95ݯeg=9ٓ|!nսωo̺ހT{*՘M10`ΛUKgƽJu{޴}ꆵ~UTCqX'],uemfLWUY:.u /pƬ xܤz&u{lw?s[N SwV<teTF$TWS㒙;.E ?.7֦Jor&6{U&rԵai7nh_.kWzTA1ݛv~\6rjY{+ɓ,_7\V'Y=z?fh\{iU=" JauYcfV#],u#0nVώ\~mtMm4)ۢZ.ȍQe%WYwݩ"˪"ԙtۯY4%Yz>eƭGnt^e;i;j G34iиx]gd<3bTe)OuQ'Ju Tױui((*f9lXGyO~uiҵѥ2k6hj?@^FNm'* M}Ƙ!~?bl#TJކiVp&G9[uU03{9`S@LrOj(ӻ&]jG)ņUफVe']"R,oa;~<U3 QYΤ= ǝx0|9MfN3QƟ!YmSvqP[CuQ MyʑCC+OWꚰ[[`& dq>h]>Y(DuimX]*+S~N]4daϮ̴Wmt?nD<3-yyձ{A 9='z6,<J. g.&6S@߰JwR'E3C/ìڅ{y9 ݼvՀ)]3"j,39e>;Clf1>Or@}*rnKq'Yt}S/Pg]xUz'CĴq)OrQRVl>&?+Xƒτon)7\9g僬Ii�mAgmͤ:. ':b5(*;#Z֤pBf hH{KKP3 +HW@@@@@@ ݖvzh\ҥaVQ4tC!W~S} K4]zaȨu[Ί5ԤťW}R%Gm+ H30u:ӫ9w^(' wM͐@lss#CqPPtҒ%HW@@nHwϾadlen-wh$*s67y*CCHGb�>{t֯"&<y:'N` 62KLLv4l:]cnE*SRRs_7x9E9z<cCڦM=#ǎc_{kz(M^31aa aa׏7.20vFjj^}8;:7qtYՆt:}.CBiVtNV4Yp1J;ކ$]U0ҙ=ɵv&޻55N;$$Te:Y!ǡ:\b%'6k(o6<O;9UeDD&Cپ{\d_6=-`Dϗ6Ϗ>^X^ҥWp1oyhET zb>:$˫);Z"DDFrkQjרks]c^,J9>>UǤKU3<"8)) ?1tmӦm;qJW꘬?:u^_{¥˫Ǝ-{ y~֧n^}`m]LՃZ;zĈ7*GVH}ՇKC䞤<UFhtCU\U RՔ.o[]-91sƇ蜲:ݟ$&k,fr y7m/m}ux Hm}<ɒ:1阬)e]KcA,ڐbg(aoNцdyt%h]-]u+kk^KXrs h_\ygN> ,d6Ϗҥ}a .i| i܊ъ֭M!0tr<t?n1][- z|lS<r:uk^{f^ި0{#Zg[GjMڮ욺S<tr}Uri?Sab)ݳ/Cr Ҿx ]nLXi.MPQL7yS:u6vvJ!7CLYrҬM4fNgRMcs4:f$N|PN]护CҬbWtUj"]emWvM]+̜šiv{xzUбg/kTh[8H% S ҭ 骛lfSu-xC[Ct+ HW ]Att-RhdMr̉XV2MHM@tr@ o lbKuXU-ȗDOaH7"ak(Z7.<~xCEH[pC (HέXT@@CM F&ݲjV.ubM˃4ANj q0KXMtb[&JtoR@e@h k .YCQ Z;8==y+.o-x%6M6a/&AիWqҥF۷.iF炂pi4 M^oHW L(Zڐk0w\<~/FmtiO"_8 KKK.lp燀�0nBnnnכ ]e*J.˾Y/tXPTT(fr HpBeozSE:^ARl?Нss\K1xHls3^ 9q#ƌŏ={Ͻ8mzacXjuտdJ9v!]r2tѨKJ"T7 ']S%?w3!<<d(((hzD56Vk_͉t_N:` a߁>}HJNFLl,a-J1=pWSg̙[#q2 lJ!\ظti\SF/.npp~7O#O6*RF#]$Dwii)'�M2',IKner�###_8nSԛ&;x~փ썏鼲N5͞zO6k?S}.̜;^aѲUhL:b΂ѧz폩3g㾅eg =[Mu[[JHH[ UDغ &Ln޾So'a<OLLVHҍ6iomisAy3yYu!F׹lEҊ(l޾ .g㟛qKIeeFFfrF޻;`H9L"2*ő3BԄ T<UMCsdՒtҍxh){9eN �3 uAL!!|)tIܣtns5Z\vܽ'TenU"峱$yϬZ'Vejy-df^zٶs7O342NjvS*e ˋ:~�f\R;CBB#]j6_%]�|5^O_[`E/%ZZ㞅l`?�fV=yNL׏Y9ψhR)yӸNiBgJj }~%_%&1$&}Kx ]+<CeZe:!NB\<Rbs&kk{~cbbҸec@6ErSԛ&%w%YedP)yy,u=ttȊwN $$5eY%t5sί wxXgӕ@zROΟ!kObNjaCs, ZUseNOHWͧڨ>sů'✞^>AC)ݳZ=33̜;ڹHyIW: g7ܥ+{(`x.7 60fDƐ~mqr0{f/<\</rD&ec\0WLؾ .]t%%%kPݚHCCC9h#ݦ7M:v䖥c@-:GiNpǻ"]`U|Db䩋ZdmʭpŚEqKy{??wrG,<͓un4N]KאUY;ZV&mm>mdES;Օ@kJ%'4A]}n2j4X_"F/G/# yy36m3 wMa^h-lìCS KbdM\5+W-,m"'7Y/pɕY&#}8OSrEfa^cȍNTDYLc@"i_9e"]MLī"GYn4Y^PFMQoڐ.Ya4 ]Mt5n %ku[r9 $ _KD’u}NZ<a/Tw!:%]i"]M6_KVih~TkO{\pf<etµgVɭZ_ıg)Y4刍G>9+sccF%k"7gʗL' ,7M%= 5O{Ӻ'q�vpgo4\ #ݦ7mHp^bi$i/5uE(G>:]^Vtcj^V"BcS:Gを=<^;Rn]Jl|VeLL ^V+ůl"hvq?5WsmrMi/󘮦iM (zơ8#oqFJQPdG8;OQ^Z?jt%DCE-:;;c߻cǎ0T䫌t޴%]m:OiBX0CDU4GVG#*T|"M!Y4M$gnbO&Ϙ߸-A%Lf[ʵ4v4^+'i ;UCVy;霵6iomՕti2E[wT='4s|m'Zi d` A2*Źx,yѮ(d(ɌB^0EiNDNɐ.}E"h4T:!YO(TSԉөnuK@i2"(*nn^d!t|n \juLoFj+.O'Tk{t}z,4YZ=Cn~*>M; T@c4GM98(ddٲW k1j+6a#dx|DT&MN%{;d4 0jxV%#'Je .D3UmM.YT2DFS^>K^ 骲%<M2([Ar*GEi>ʊߊBn ?(b�\nmI+:{"4 tNl"wnyjy4KІtTT"9ɖx"-=N|e}u d1˯HWިf>ڦk{ez{@UD۸&+g5h S>|wVj)"U]H%nMt)Q ʣұ"!fkg'rty=T:ҥPDb&UÇydMGqǰv8׀5tE$./Gԑ:QE³~u^Z:R@]4( ;A2dtLydegVu! +#]9hJWEIWՂd$Qd;{J5k|,HWQt)tLI>0ewR$"] eB{zr ҭْ.Ya 'uipO!$4YYɜ22yMT VOxDRDF!>!"_rO{zz]HN: ]NH7#MtIoHW,l- HEB8HLZ\kmt%:n"&PZ?ZXcpvqB\| 'ʥ<ҩLy=T7ɠ8iBtҸ."h?*Y.U fobb`em#˫FeިRݤ t)t{mtE$ H \4KKJc)FS.;QMؠ"pÏsfq21!>>Vc:Ae롺IE钵Kī;;Jrb8_+TEs^5+/tYtDҔ{mФR$&aJA"賘 XO!),Y]r+)>$:xA *XFDd[ |Q‚|yXV+6+I侹t| �yr hJ2h"]@%Ɔ @0fY{`{:4*Q.H'ґtҵ[C.}g<ogyȉG@z2odSƜ* HnDeehɚ(r%o^N.E#1f^oJ㦰*ptkF8vt˵mSzndQF4JKcrX[[?CL`jvE 0*eu(#]mFmH Hn'KW{MzSGZpR)QsA߂* F/EbR ;Hm;kՏkZy _MY(}S+?st }J9CPi<oM)UkxYD:xʿŭr A. |n.)*q93<.r+sAK\f2.2QMaS"HKU W#tϟaI881 GSdHȓ.)AtC‚޾xݛ8td?'[sJqa |2Fofj;tA:!hJ'+ӽ&#]C�OH5wƱ9 E< KOaB4g7.^Ƃ[wK]6_1͂R@xEaiǖm*IFt;OMt#*$6;3LΜLnҹq2F)A!SS,b!-9().Q;dH JJJΕt,ѧ-dx!1Pǥ.]^խti1VVV NPpt?}=q1ޏ ̌_GdnWYPGFmHҍtmtJoH~UtR)0?EUњ&7o)}ɭLGOfARt"9նӠhRCrkyq\E9T&HIB [vtKV*ҥmaM )ҭqR}D)Rdqͬ-GAV$OEQa'`^K'%˸Y =[WbT$:VL0(uk8{ZMndQFGY"^9,--+?UbV#7GWw'xs-}{߸w<-_(AUr(#]MzRzBtmtLoHWhQ,_7or7.EwJ"Wr?)_,]ADieXZM]H@Upuj:umfIr3,*,-o~^.'Z-XTT]9H uFR|RE˯-,(lYY͇t󦎛 %"r1/(0EhڦS$Q骂'%/o78?r#7'_d{^,h۪+O:Qfj{mӵս\oZ/YҺx�M`fir*$TNRi_uDF/\cE"ҧXҪ>t6 qb%+@I},ْ9IFeާ @7L/qQ D䄤Zh2o Ko PH[)v2ܿrNjt gqNCUtԑ.-_&:C jmka^L2M4w UZi"$Z&x6&w--x z|ʦ `%DqŞ%]hELvz+ HI k)<Ydf<y'QFƉ?78da gk{ܺveD񄻧[S"Z1 Glt `!dK ܾ]E B6Ei5{@lٱF{ff|S=Jx(,-8f k")9&.YʹxI&Z~v1&qyti]W)$oK p.2+-D(c)`bcɬD<t…gpx{-ZeνpwD˂,ފMtɕF7uld&(#]�i,V4V"u?1[r#H)y@g0{ *U2DyQP(-DJ#LOc~YbX;m$ꍥbzNs`<<>W~9(+JAEy9.钛:n$<<Q@u 2$U$["SE840H)꭮KcV[T@@e ݊gߊBX-*TÐn #|冡8? eũ(AyI:ӽlwġ8| -k0iؽx"άcøuN#2<A4VF5eTD* u۔VҕfSD(щ \[QQfq堤 OvjotPVV'SSX$$�_o8BY^ nV0o/,;ڏXv]pήHO3i|\N46(ͪm H!SIWp)>2mz ҭ 閕#73 ORe,$'15Cphߵ >c p#!я  o{D ;N|50Q ]XC5eԑDB~PGMIoMt[b@'ݧ(Bfj"ғƈIr2q~T5/fY p}Y3z< 0뗭0Nu/0<q�^HEAV \,<!'+y9YJ-݌$x6D*K.JZ>1@ߠp/#%¥pEEi?M^oWD!Ӌjkmʳⳳ) I!ðiVvϪOtus_uౠ)6S@yIIJ<"Ԅ%2EVj#TE.f"ǔx BO<6و#Ga/p 3^Uc n݂{z!q J/S@8;6{UNl֒} YO(ӧy$)8if򋄮.nJߏ5uitY5d[kS6dniH^ߚb8zOZLE!  xn-eS')H`DĆ#.Vt#(N9,OiQA[TX2^018\cڴg?ņ31\,967_ź`bG+;Ą#'#&ᖔ %.nplԁ `"rWHqP(h@ј%}cddɗܼ/dREV[߿^Ǩ9=j*#B9UV< Η6ShG ai@mEV"Ҵ<rK+T-GMA<ɋ0io{Tm'"^ ^"HFyI7/;YDc_x!$ G #0$tr7<ICY|bUj.ggVZ*|]aezNv0u&`cn ;ww=p>L2]~ [7lŠ~(#rtcܼju 3)~pd}K\  R%W<X Oƒ{U_$Nדns[mIHw4i!:&nֆtBS*&7tԯ[P|gZ^OkHKWJDV9q3C@` _h_{kmfn(K*Ʊ&R U x^ҥ1M { ow'x92sB+}[QoVJQZ)$<:e%Hb#nΌx\0ٲ|-+G.]OнkLm,k7c߶=g|vVcmet"և?IG@8=056j|h-eK!8$$yErQ tC]>EeQE@/tթnu῎QV.wA_#WerswǐQ-342NH656r%jNϸsnzr878X2³aAeb # G 5oZw5Yfr&梬qiQ>KP^Foj fS^lMo߆k}:޶Ɨ 1yd|WCgL7[�1`<+/b8~8DLNA,.; 3F&qACc"w>.D .st0o^k-QRB4)YŊK,ز7xrU;?zTc"^IzD$WCzZ<KIPl]HsY4HwYLUߊC(:(3@aSQṅS<e(qa Y.(qGya�ʋ,e(e̚>z p#$EFz;;`Y蓎$a;j6^y |Wҹ >&\c?~3~Ǔdd3Lww8 Μ0x^@.͖dJKIEQJrّ ,]yՅH?,]Yçtu5rmnoy iu8+.!ϸs&";uh\!!oCȎ4Anr,Ð(LB_e?/fivGQJ$'9(͍BiA<#4f ?f?# NeyHAFb|alX.w}֌l۽._oa?`i|;vfBd%"61BaEFO+8K408!&Yѹoq_+D%Ȣ_J> J?/t5.DWJS5KcĴXSUA AW#Ɩ/x\Doxt"opw#GKZ܂6 '[ x8NvCC >9><Ekq|F #{`p�W/ĵKgq�Vo]ば ?D2r@q^#}` G~J̜:?w_':U7? [m0qh?ZG�:`2n<m° 7>dƘ+wU5ekʐ뭶KYD|j&nXZcw)|U%]Z͇H̴h]d'%5&iX]q^rn_N?Qo""ruW^V1s##P/c&H <#uA~&tk |b?φ!"b!6.b!ڟF|½o_cnطvK`~8}v-KfZ= O/ۭ}t8�C ,dGx^ĩ]j~ t?o_Fo>`oƖUsѭkڶiӇ2 ..k-ƥt%RRB+5lM&@6? UENx�nfs_w.�fW|nsAbC⍤`z9 n#1p; B? :}5 g6~,/+am8k Do?;A|CN6>eWͷŻoF>`Vx7[ouFM'W'ٹ AH"w؋v.}YVVn gA$2mlٚ2z+ HWz㱯;ƒ}`}N, ~s@)^+ 8zh?؇C[n4`N=[6ahCz5^eVkZ+Yo>:|>>l۞hqG|̎W{^7v3%sǣg㧟㣏:o:#Ɏ?W_|ESڵA6we=Ň #= 9NMDth0 +_dkt%W%YO[Z֔!כ ]AHW>fy.?䡽<nAiiqpز[6ĜӰ~ ,Y:?vƸFaŘ5s2-'74VF 3kͷ-}vmH6mЉYG%m0z_~%ƍ'2~uZo>o~}+ V7qŝ"/ '݁_?xVK4k:|BM2#R5ٚ2z+ HW:[CjJ7SЯs||]|X53f ~ûᗞп7FAC#?�my [wZ1k7Vx筷&#fom?ݾB;` "6 F[akL dվÿ orj6W5qw?x^[kQb%(+՝LNxdxC1 6lMtֆt˟܀\98;Bg]w|=FFoW_A/}7am =#|ܱ->~>i?iNtGᅨ m}}my5#h;h>Gcpbb817VtDo?F>{5&#{o˜NpxFx^is+GFcbof%x4e7.Rqgpu~d YZ UG9x`u۷oF{wzOq@A(^yyZ|ofV[o[mֻh׶~!Z3K?g3SNpAX߾H ~ ǸB/5#pB7{|Vowgx@pqwǰ}pdn 4o: .66~"s4 -..FNNNӺ:5G&02Ҫ[Er hyLhu5ZP~ԕtKrGkL2_?׫_0(_a<}C|70p�&N9sbĨQ٫z/C~3'cذl6Z]pn0^F{xx-a(ȈAQf#GwǮuS1Ѿ][fkt >}?w]#ct ׬Eġ`|70q~n{aa(eJ!] -BBuXfaq4z= 'peiCe ]AV0|p|t#| _ D᷺Y 6Wfa矺]ѿ@L2k׬07{ksx:ÝV榰4avGsc=</?2׎DNX!1 RcQDf"3^&{G`ճ'#OѦ͇ܚ0v`WlY<f0 1u4ؽM?7cs2p;t):u #9%pҕG%G-0fndy^%<(V.SߊݜǞPu_VJW nPWoaLv! K:Rez+ @>+[@8 F`h{ <\:"ǃG `V7}hx 0ۄyn,욊 +Fc!X;aV͘�H&Y?+NGI~*J R@{?�3qh  Cw_2>n~v޹ql#q?`irիطc;Κmk7msc7̟6.u;7/+)~!0OycԖ j#2\|L ڿnŠ%%!2rKG[W8sefnQuڟo ^!G;;; h?aq6iz㮎ぎ8z(|}}k_O "3Y5ǵ0snNrE/BUꏄ`O< Cmepћqu0xm#ɎƢmZ\eVc¼<*De(/-EYi!U2Q,�WܺzGmÂ31yL7}'mc|I#5#&U p@5\AF|4"`qmڀ⡥{ןЃ;o߸KuݧXn 6 NN6* Qsbux=eS$<Ô`niYuLfi U|H+C7*bժUr h~ #}AWW.\d1gX1ct 6"7_;716AvwA;"Ę&"axnAg(Y4 Ʋ#u87]5B|ψ/35E9(/Ei# gGI#|>߹;Vª1g0_u~%:_}Ŗ9qND#.#')I^p{p7ûp6ANߣO?7[7%ׅ*,] �x)ܶl5G}[plڲ!]u׫CYuL+ciU3W㼦CG%'Qx VСCq j+ *a Ř}hh(_=ޖZMOE|tRU$% 1aCعp$F"-!)DDՖ>myccXbۃF> GLxYYi)̺EEEt(Ȉq@>]a{ma[ 5:})Fu{gĘ_cpbr}Q'ȉqFb<Lࠏ^}=6*[uln*9w+~⢡w `lE:|?6!+Ϻ}r3o䥶ld]l@R919Sյ.;pttaÆ*4h8\ot/39+ﭬt/舱cݻMe%(D^v'L>ƐZ')qs~a98{RNoJ\29q&0kyVz2 rPZRč2 سfe&!*1ܝ`iz /_Eݓ8uo ^=Fo>z}3g/+3DҒ@磘 ~Px8=Dc$3bڼA.+7\N@k vnFZz*ϞӃ}~D<6]aqGmT7 wh+"':1Y(}t5Ɔ/F쨪G[jt:0>ֶtNf,כ ]AκViOXx1׽i*K81栤d(7ia̬X}=]8ZeAj8ZUgʷbd?IBlX�]%ϟ<][7b)'tv㝷A:`.�7.Q&#-.AlG^ԱOMt)YLУwo:t<r’e q~ l)u}'l7pS[6խt5ɦg=3cڟ2ck1`082UH2#G9үsKHz+ 2|ry1f8q5>uDr>ZQQ*2G)#bf fg0 8YqHO$\ˆuEy17헗+frRP݀>,^ڹ3'+}Ѿ=|o>-rDǏ?m!:Зɛ_W[#;9iHgDGyu/KԱKF*< z}͛F{Z'0;fse 좶l<HȦ.`}|8h_Q<8}[j˕_8pH%_y"r h[?ԩ"Kz`ԨQؽ{7_Ƴ>>R;FeU$ȗ\dr+PZ Ou&E<V^^"f椇#1 ~𳿂Gatz=lÇNMx6x7moW^iʀ-lwf&%"6б㧘;u*:].PMh_=f<֭4Z?.CtLbb1q-<Q[&M2+j+2ЃJ ן霔^xBceUU6 J\=..q~N7A͗p6ےn9r$vVQi*a+RKع:F2+( HBj |l `kN,-1H|}Ĭܷ}ІBB~uȽ G)N:8d&2nINFx/\0s4L`/1_vqI:n @Lm!#G矫·ET\ďr}w5Gu $aUeHe``g8&HW@y[o".`X~=ݻ ?,dnl4[^bffF!> &p7[c;b̯xW|>hÈ#tڼ.vuCJx <q!;#"0� E'bټyүW.uqS@a=.gqH8/<KG_e L>dki Fz+ @3UFz7y?1he%]J3Re@<~ Kíؼa N_۶k>~@x7yF$FD 9& 7\sz8s ~AHLBZlPer"Ι4Hj3ss̞7y ^pU9T:ҭl-B&r$߿?x"A4'C.]5ukPY)xQ1v孫8{ٍ+a6d>৮7ߢ]ONJ}'o ]uƓVf6srQ@k<r%]ޓybZ秺Iek.Pt)5(ha sիWc#~a|$áTkX?^OєBrl4"OG'ؘ݆n<zރ[aۦMXl9Ms:gPRTҒb�_TW. 'ѬF%]r_J+ՐeV"Yl&Ze&Z ];^iE366:G/^n.,-.Dan33MD"<^znBaW(|[r4.Ҭ8)h>uލiah|MAB@@�nݺ%K߾}W^OH 4o%,YeH||췢 e̺1xt5)ƀcYr6% dR4*ٳ@De |xyH~Fw/S m"8Z,1@$CndkLP2ڵkUzSEO!!5AtR-?MڒMxoEZV"K1@knn^c"US)C7e(W@ lܹ/=H:p333Np} ⰰ+-[S2IwFJ UrhgHexvҁz#ݘ'.$MY'% , !LndZMA UFo-mmnGU|@mVg;*ZʈWcSʕIJAZXbfיt uX5k%h,\E+EpE HCFpҖQU$_U&],mí]e@B5OBxKݐ?"-7! &H' CrMÓ.AqM=9F^-z |t TU* |+ r*#z']bx9Fߘ. p=9e*d}@l%]E+WgYQN ۫<EX>!ήFYn+ʭ\ڧfx@@@@@@QA+) -B<r}[wo!(8xZӄ¢B#mj2kHWby{/ PETZKZ8@yլJtL ks%%% V.x3Ҡtnq [Qq/\ՍN999 7XIvk6zx9L5O^3]ϳQMtPTWS]u*2 4_h3Cgϖx{UE&?fo͚t7sκ~6gm#؆6cD̨Q1bEAhkw+bpgy:ũt:[ߪztuC>=u&쑤7߸E۷n;Rpczh}C\K3B>"$9%ŭz::t)uC>gI@6C_[DVm_>rn*wF}{m>dg9sCԶsW>{[^^}p/"nRinKӈ}Zl9mI[%W)ѭ+׮#Wt(&VW/YZNi(3?xHthʼ{϶ӧtJaGM#w}zT3N9!A}<t?syFw 6Ӑskt.Xԙȶlа/A-[L Y^ί~ԑ7ٗrrsE! )xZ#}/(i,c#ڻ8uZ'/?. ݗeѽ6=oڬٔGUUUq3ζ>,|#M:M$d?SOjJ2%Dx=t={}xh "I8Wo~͜ 7V9 ۾K3׫<4˲^Kӈ>;~N͏azl[w+׌޲,2FId*σ$Hީ<�/{m>#)ۧwLX!lp,G"cCCRSS{Wf]GU =nrɓ'v듒gdjߵ-'m^年ί sC!~uXFi1cI^t]=6ҭTk5Ξ;/K){md{ a<_YYeE+{3t1#1y,"III]>l&bʹpM˂[UWW_vfˠz1R5KR"w;g>K23#ݒygΊ޾,-GtŒ1mg拉Y}FBwc^ C%ﲶ>@ 7Ѵ,]z'D#SjLۙ^GW.Խ'ݾsGs=6s;?miDOnAs[pXgFԫO޾,-Glcdք)~#d)lAZ+Cn$񲳻DGӲ`p m$ھsg^+m޶uyM=GvhtFi'=}2]Po{0M=3ҭÇ,ՠa R#=Fai).^B%=ԣp`S2YZsܺuKea}bajJ(b51>-3R(ea}bajlYlDHD>w t=PAa. hGnII[͛egw_/  TcKĖԭwrF@Z>7vg.ޡrܸqC]o:Dt ⅷ01fbA1<t XXXXXX\H#H7//ɥUnNN KITx\1a,,,,,,M-Z <u7EA{Sz׌0 AFs+`0y: =ɤˤ`0 #En8..`x2"?+@222 n2..`0222 .ns#]e+gHW?JZC5Bzu0\i ߸ɾx+>;">_W}G3a"]vctvF@lݺSn=(b6;LNMIS ާ/-^-%1OҕeS4ZMy 0eLڰ)K}GtJR^ёcgRdr3\:n5;~=`SvB߼$jZ002"]kjӡ .*o@0e2ƈ^gwڳ =Ġ͛7=+Ȑ+aDAVO;uȌa Ӂm!w(&VH}ͧe^ <oГ^R{+*hn +.y3J<tA203q[xtty/_BxfГOLJwmp z '""`L M6]_Ңe~c9Ou.5m ~3fڭz mBk6У vٛ?⼳\.ĩX [o>Ƕ(-#SS{nEp& kMt9OtitҴpf"M2II\N" \_AԶ-z?'O;אaTV^aG=+aDؿ6c)[V6v*۟wN #:x"HWCl'GCIkz41k"]e}ax[ZVKн6i,sB5HDEtt =]ʪ*K׮S;LcM D|>. #RVWÈtp4Wz s@ _?xV!ՆM}-zyb B2᫏oVMتsngM̤Rvn汘ttBnÔILJy 5 6uTMؼ˰ZVys\r> K=3F C$0"Z&]r$3QNԣO?=.1`e{}.U#?*#pA`I^$H'#/7X_\RB-d^͐?CNo�aYv^+Cˈ&Cشe*VEbrS"l4KUEڍ"bRUU-:LН&C7zc *;L-tw*ܾ# bQØVy/\,< xŌ&2 ߋ\rc (xҶ+Cֈ Ψ=aN_+C|\#䄨H!<gDRjdO:v! Uҽ"tz#s16O|xOwt"Bgma.<ŀh,02*o^`ū%a7`0LLL�r~x啫C^1 ...`0222 III`0ttt III`0LLL ˤˤ`0 &]&]&]`˗b<.`0t@ ܨ=;T^Q.> 228>"Hٳgf]0gіm/*47ҽx2+*¥AT^^aJ i=HU@v"֨5O-PUwo% 5">_k׹pbN>95Ud>}iyjzt^7|EwRRo]]iҝ0ŏ.\DՏ,_ASϰD#Lm+wK4yLI6Eگ `3afc2J5fI~ Q z;J֬5tU7q4T/)%5)2 -ި҅L8 5Q׮I+ ᶚ2qPlC}[ԹuԻݵg/-j\% +ωԽ8-]*BQZܳߋz_9hW|uTOSy/ +$4L^wtFmd^ᄌzY#`b:v8+^S2:o$&RԾ?23 Gۜ^c љ3"_})5`jjVMڼuD'lZjDg؉,.z?g6v -r'NAO>2o*m߹8ca"wGɺʎ(C-#liw15y{ IeCFLzH7 [O+C:L޻϶m;=ZֆmGׁ~*/;vvxFmd44w@ׯ30{^#岐u}ia,qyeDO7nc9 6/HsH??mJLQB&]<¢<;)*ΧGeTYYA7n^[$=#Jqs ݴt#{mtYsD[4uz {=,-ͣs㠓"t褫^Cޣ $( [&#O y^d|UUբm/\p?ٷ?]^yl7/ 3*);VK[D=pD !VYO aUrr(yTQY&5`9/{Mٯ?޶4zYViiŨ1jCLi0 :RF!RUl_s*®8kһx,&ٖ!Ġ'ey 5d8~ǥ<k-h}q'{CyV jæy#0uh器y" Z=e_>gfNyvnZ5閖{ivr/+]zr$ɥsl}'g}4˯ ){Bd[Σ{CuÆt@O`_g_>7A Z=]Lk{md @K=?tIyi)1s4ԣO?=W&݂<ɳKBJ5KzNlO Tiw(f{z@nHGլ~='qL,@h9r3gY&#Ow/iݸ)ka 9`xniAvbͦ-[ESyO9]Lfh}cwFSXT,6EdJ;JF<xCG+A0{-qU[5"|+߽M{L<mڼ6Z=1BԐ # G cZgʉ0zdnl\!6xH1AyΕ!kDHFwgm{פk| [)c9 ׇ\n`7O@#y2굡Fm#M�FݑDЩ׌A0OC޼n06\rU z3Gh&]d?Wl|$Hո(*.xd佹6 FC&ݣ)|SdˤxB<+!a75ٵ@G*BL I׀tcڻw=o/{.C8ؕCD>) VWX Iœ.ޱr!`0r=]&]`eee0 ...`0222 II`0LLL ˤˤ`0 &]&]&]`eeҵ`026kEQuZ]QigŢ>Yŧ0/[.J*$JrXjOZ!]& #}rԮK7}GW]<3 2-$Vй} Wd Խ'uٛvͤIgd:}6UVRUu_:niҝ2}&m!ꔢj¸0|3a6{(Ŗ%, K@g @۶ez"J}%Uk֊2V5zԙL-tՂ:ktQQG0m5k1,QjמgCrѹvFCO`Dnc8ߡXQ<6ږax<o$&RԾk e޽gۿB:x ||]KQ^C=~(hzs׶yM2qzdlH|#9=Lt?~L[wDJIwQ#lIfГOLJwr+jGtG-#ؒxOKT-t=/@xe!B=q0k懏mi;Q,ۭ]AgdV = {efD8e~|щcm+{+dJv۟wN ރDXz?%V39]gHk0*+vx ρ>9C(#35K[DG=#3f-En[Q"hz6BLB5HD=d`¢B|ڎIxUUUY w0϶ 145 ,\pO *eW65][}|h: j<2eFH̤Rvnrt@ v'RLteEW9 g<]3@ʂ 弛;0,}5rѱuH7<tL9ad?ƯQF39݋/S>(/?fmpeI7mQXX([b$Fƒ~F^NFt> .r\u!<ܬvݔ},@ _-HW#B*,*Oactng.k7n3^1AGI#adOwvv}Xxe2"ue1�O`m ۶y43VQQatŻ_ ˜< 'c`<zp apxȫۭc@zrl\z)60<F辚!$S@^3<3L놫{+9Exx`q.&懊Ghbd,G"?yxy_-02`0<LL `eee0 &]&]&]`0222 ...`0222 III`0ttt ˤˤ`0LLL ˤˤ`0 &]&ݖI|^P4?`0tt=BP dt\9fIJl.eE)<TAš[I.@AaMOtW]͝GSVWdqVQ9 #n$P&FHq-tˊp?PlæQgQ[d<,tQ gDiItr3\:nYǎ/F5!>~nK']Ԉٯ?ݗnbCnyEک{OCQr~G㏋Z<P5rexȺP?;xHWaC7b6 Իky fp1twK}z #h*zPLHQS2/Dڷ_,g޽gy0l0<|SG%]D\RRl8I. ص[L7122ݻw+ZV0?-rwz| S7UWEc[y;wqaZUV6XKBp0&&O.(haw\a]]8uZt1>3N:gzΒH#(H@LZF'Inrj+tՀ!;o߾6:yNKKm 9[8nkQϾ}piP= Rv12+r55t˗Hz9i+σg9^niY){}v1eL-tGl EPISPlh?2ՔzXƤ|s6'U ő #Fk`l0Ϝ3~55O<Yt[!:]EVH^晄sp ~0>Խ~-¶2| {XW߼ A!By+{YR_s<t[{ b` ލEXZ>+9Z3EN|ٲ=>+y[wD2jF 9b2"�6m*JlHOFaQ#\{;-nGW\RB-i0ҵ<0z6;c'L2e/�t Ø0ǣt-QSa{@dX`C8pdeLxLĤdn. XBr20 7#]R#;'Gt5cP Bi>܃7t<L tw.]*AsK=[NCt[g  ˤ`0 &]&]&]`eee0 ...`0222 ...`0ttt III`0LLL ˤˤ`0LLL `eee0 &]&]#]t3BCWR|ƻtLx9-^\CeTJ=*(,EwuL\1uy@;Zem늧ې7s]|IcaS{򎨭 t<,!/=ղ$??Veu{t#632Z' Q SzwixlLF A)7|(0m5w1պ&Yݵg/-j\Eo޼a&ka(p1>|bbW^Om˰3HQ  e޽gypU-t{*n ']6:a{>stQ9-#޽{G^5aiEp2SE" {eas[N6<}*dTھs5hiө^Ңe~c[7׆mG ҳ#=gw�)+ ::q0@c|z>qIOtL#qæF+N:{Z`m!+SR=U!k< C/ e}Vt HaIx zXZjsk2+l7x:ٷ?ڝ. GtV'mEHّl>c55t˗(z9igh|PhFC^喖1ҕw2B&M&BuBV^޺Q.GNi|1ezLJuˢ +ImNs<}Ƽڰ9j< =Ȑ><WOJIsˤBI2ƒ<pNNr[9/E]x&V<]G5dah>Խ~-¶zȥFlF捞& 0>1DLt;€EtS[ek7nJUU0|m}C) E@… "4\e{}NW<ԽG>XZ%%46n 9b2hiVf DiivgWIy`m\Dt֡# h' ͤBH> N Fno'OX"]GJo%ög0KC:(!r$v%CG/cZnvtMJp!G7xH~3,E[`ANə-dNf jA:-=}vt&KWAqD/БW=N¤BE*<022 III`0ttt ˤˤ`0LLL ˤˤ`0 &]&]&]`eee0 ...`0222 ...`0ttte .GnzF&M2UT_Y>|4>/[.J*$JjTR3ˤY0'gWAaMOtwK\ΝCeTߌbU>3&Vй} t[ >Φ}xxH2N4g~iҝ2}&m!ꔢV(j¸ybcּ`OϒcgZd%=g0z(ue',YI))J֬5ͮgm ݻe0!R~6emk^Q߷cr9ѹxDQik$vuSw zCOE2 `b:9S,> Fb"E/9=;cXo78cN_qg3ҫ,@"$c3_2P*+M. 0<qtg  *<m:UUW䢠e~cӤ0?F4rwLy-znIfk Ĥ۰pFХgoqO`sBօR]]8uZ5amضE!LzzJl"8)=d4`'E`t,_AL'#z&BҖ-XHB.^b>+?wN 3LFnאaTV^aw%] e}ty-z$]Wm^L gqyfuΑbً/mQ<rҚDCFBʠLg~a!$άgm!۶sW*-+̓xуsf2_?KV(,ΒnP-,r&]>9*esT}-zyb B2᫏oUV%2Bzf&0ssZϤۂHwԸ h. =u! א ]tj}V\jta{ksftKot&?Ưzh:LD˗(|30As,`t1#La`Ȧ-[E^Φ'rSȗ͚`h`!i3YEKtlWtgbc0'x +W<0z9)a$ fιJhuM)&h*R;`u+t[ B0 m)`"KŻ_ ˜` Kxȑxqq"φ>R 0hj Y#B0;Їm۳%j@F 75srDx^3GG:-=ôιJS7 }Źt'%[S7J}L-t3ΡX |`0 wIIU"4|Kc$+^1 ۸`022UW$`0LLL ˤˤ`0 &]&]&]`eee0 &]&]&]`0222 ...`0ttt III`0ttt= xˤq ۛ%]~zP¯ݤ;!BаwQPo%ܖE4}(BWc&L+׮s'a>:TQ :׽O_Z^x{<&V^dȺPK+CB-t$eG 8lPS&QgQ[dJ[<,>r,^AFFC [xf]}NJIPw՚f3̤BIcD:gH5Kepnn4)?\EowQQ/P (:jRwK}z(:FQNZ:}1jStj=ĊT?X=gktQ-Q+Ft :Fw#QWyA}_x7N@{Hw/TGϑ3,OO%1ׯ#n+'ݳӂ%K-tz'ۖmIfГOL*@+OՏ #;n3Jcnq(|~(|2|{EAhz}cEg�A]?Vw"f rքShmzTY`Q.={ ҃hWt<q0k懏m;d(JȤwѫWv+C4IW`xB̊~^HL۾tL#qȤJH^nt-+g̙KUU}R<z?y<(צC'KFSCey.EȀWGO<1<ץ+WDHҕv׋ZFs&]G=]¥A#I[RvfuD뾾xS#'H Yt xeeI7z QGܼ|ѹBn&V@.]",^62) Lo2s(k{ g ._Q?�sV os[<]+:bàb@ B2᫏o`4=Μ3陙{@Q/+t[CII Nf<]c3+.{1C Ë�71)Y紼>mW/eX9[;903rѱuHG<tL9 #|_-e|`=ԣO?7)+Kam{53Ωt9]uGi/EQyc3EN)}X`UqI _Ķ>pAX-]e ?=gkh<F�y^4¢b1z9)9BvZ%qtѩv#VUU�ntgI!l<ܲrAI6A0P"y25cBin; :)vȳ >R hqe L 0 #GkG9[O XBnzmisrD^3 daZG\%[)~ض08n:J0G"x!pRI3 `ee0 ...`0222 III`0ttt III`0LLL ˤˤ`0 &]&]&]`eee0 &]&]&]`02265 IIє3}nB0e Ue Dvu]vݭD.rԫx+>b8}ԮEeƏx9-^\CTB{zܭ[Ik=@HE*<y}h,Q&L(^UV .56<9O_>{&[eIJ??E.Xy B|Qq1[3 SϤ "D[lDD+1t:P^QA em(;`T#I%n6_UU%JPNBԽ(.1#N\XfTսIe�jڳ 5zV7(@.TW\r_#G+~(&z@U5x5Z~nsG˰3HQ =aμ{֗^+=~(thz`+1g<=xI9gQ{OwMb(;z [O+C4^Ǻ-r'NAO>2o*m߹˴'kEӦzIy];vׅE.vQ2dwM׆mP3et,Cg N\>SAgdf<�:հC%WPm+C4贡&Bk.{...i2 ?i+~zރaim~ޟ78z Fey:uhנ.vAR<<5=iF mv۟wN #:0[F=/_zSe}VDM:d_Ix X /I.< i9],stsii"T'8(UoDy|xbZMV A0pVYuۜOWy,{螨EoypFOV%r5""z`m!F" wtI8'zȗWO={|#OHނrGQG˼ 5 Gy_.rEޑ kջ_F0[F =L>|*#" AMO"P&V@< (.\qS٪S<"<oe{}NW遘8Y俐CGb�7E>"΃$U\Rb7I x r_ ΉQbrRr6D3ˈ`Ѧ-[EE~2箒<׃-UW^.0Z{$y[q &FA^@&ON9HѨ[){m{=` ';bZz]l˘Vub'<^Ή2ij y>Io&j^7 )¸G/ m_>Gws X^л_fHk<06`&[<x\o }TJ=bD'N:N{tI&]"`0HNA99TVDr`~)c$=SLL 0 ݬ,JMv;Q_ӃS#|صD 8LL 0 L]ZWth:y$ ~jaee0 馧S}Q5+օzDҁ ^K5ѹsI322  Ƞ'NR ` 0Z`ൌaÆQtt i&]&]`8Aݣ$:{,>}.^HW/%)q$eoiРAtJKKcee0 3+/<Xu>7m1 ՃfϞ-tt $NMGGwEaEi]<zI`0IW~Oz;-[F#;ŕDOC0�ˤ`0 + ȑ#%lakRAAXE*&]`$]^ gq%*l~eiĉlWo/32 $"G0އJRc>= }*ܨ?3f %&&#] Pm mob0Cb~*34_; _RamA9 Sn=S4>ssm2[*2'Oޠ%fJ8^>".rR܂RxC(@E%-TB+׮q@V={nRjo)'WtӵYҤIرcc>Ǥ۔zEvys)ҍڷ_ד ;G( ʨX8(Wv m(;͒B,3iæQ%Q[d(yX*J.9O_>{&zh+ plkVn +}$=zd*飏?]: Μ9Ceeet9ڻ?~ǤTұ{*V7VK&ԵE(@t }$y'y `9PpG㏋Z6P5peWTۃQD!sG=B-p};b:%Dxn|Β~zQ]7yԳoQl] +CОDgh՚k}CBF1Qcn_yc*`  ^صg/-5(LFq8ߡXo�S2UAۣ}{HwmzhZ5+L顕$<x  /nݺE7$ qJN6t5]v^F!|fTQ t!|_-~1ֺUngT7t7,_QH]Lt0jR:|<ULOF ~׋3ymOt3>xFkACFR 2Ңiv4w#b~uX nݩ2n Z>FfΥTcvcc>y-Y_Si,S m$<!bmڨl(K, ۥgoA:HCTUW #(haw^t)+ ::q0 #cvȈQ)ލRl"8Dt}5ØF"<?PT:{Z"]&:prődCVP¹3]B\tXޭ;wxmˣEkТٴpE;Ls_λNUKnj=$0Lp[Go-={Jm-b~4UZ/owDhoy~ihuX}撷Qʹhczиx9~zQmov2SZf.IS1ec鵁Q5=|f]P׾zDgn#o!yx"ܲddi*y\SSx)P#'3f-En[h<�Ha!L,`ˆtW{eeN#"^,ẝtGh@C|YXX<Pdp||U rVm r>7/_ CZ&|k�y`�^Yybv9g!] v2&nV{n힮Z|no׬ w s WHSOV<M_LP| Ͷqb\tzDp7uCD'RL Q>vt89*Xrs eۦt9!c;ڦgU75Vk|A|=^=C{@*kM-ci|}p$nzX*9{iM枦i"dp# *wg9{tEhY:;mp5'=Q3it|.$3<r.rsTT5ɥҵ[&fVߪh|J GTUoҔ١.tiMON$s(4v.Ro%hN>i.9[6R_Ѽ2zQ<ᾇV,>WK^Υ{ЗS@z,eߓ0 zS6~xا$emsg]H_O~W@%#kM-ciz13cߛ(WW%̦&,v &S]7eћ⹂_|<\p1*~u}0uMGi?Ѧv:/h4bf[)5d(}ضg]0Rbj<2Fb(F"eeVˆi~A;%gf[m]o2굡vJ(=.? CBΝBx{Aޕ rWVKRa3?,zh 5W&]ɖ=.V Z)TpZ?&8U>_8<^I^.ˤLd.r)ۑ-qVN7Qum&7DH޽̔9'ͻwԖ}Mʤ o4&]&]F"]i,3-EP-#EY@,b_v}1J&]xIr #V322<te <H:N9G&^**RlN2۵\/( K k{x^yאׂ/湭XZtAwte|}[UxJoWxA,,,+xmˋ/a~1mܧ>/<>u*ɗqC5x^y0F�baq]Լ>`-U_ K >T/ ҕ~1/ȯ3V,, #/+faaaONt9] 2ҨҴ:( %`ۊ=¤¤ˤ¤YRZZJt7ɓ'P&]&HD}1,n7oPRR]xQ;?L,,Lt=J=} LL,,Lt={&ž}~͂vF{!eeaamŤ[WWfi(ҭy+m<ceeaa5'n?HoZxY3Y=ɿO{c-%1iO6JwlK1&m:ϤI7<b3MƟ3mlڸyn5d(}ض=wǓw˗vS/"G_7..Ωz$hgWH7^AՏt%1#:/=OQWkCu^rYhcYzAapM EO*QEԡ[Խ `,ʩcTTTlg?Ԣܧ#ECڮư鵛DBߠCMNiԩG/:{<UVV |d=Qٞ>}j#] Q zY(ݿۿÇv�c>99\OtܯGwRǺYXN}$˹_D#ܥAL[qq1͝;>G[?`><|(d�9|˝hQ2K#pfMAx] $ڷIwe{}{m>_U٥goھs]`k֭Ի@еպǴBY.@c^~=?3ٟ}@8BCC햭[LH =yƏO?hvׁvXp!˿ _1tВpvkG;BO_=R)V!{5&GޡЯ&GSʃRKVQQAn+|#7((Htpp"ퟖF_G؊yFktgLE Qkk4xH}Go�\"WLL;xHL(_|i[-&҅K,Px*Vǃ jߥuM8G[ߣo?~s딗iyFJ۹tooD=C- FcԆN+((wť5ԙBAB3q]DJ+77%8oB ^Vf7 $wH 1?3w0k_{SmY@@�uؑrrr(;;ڵkgw+W:P2C !???c#w6d(ZC;O/Ͽ+R̸LeStz)M?T@6^_NCY%ɒ3g{\gLϟ?=կ~ENƦ&L@Fr `}@:0fZڻ<}ZܯZ4ȶ,Wݰ)C+7/O7FDjaN,L[-) T>?m:t"!h޽v@Vǃ(&>ؙ 1JtAtC+mzftDlFc'NlU!kL8Ǩ I,uG:3GoAy[ (`)?އ1.z]JSNI7OǃOH,e<&H\Ϳۿ Zuu;ݾ}6/gxztl$z𫵟{1{.gUϧ 4mW*M%k%4`Eݥ;f~h:uh;w(:͕4@ ?mhH;Hw{,@ d4 .jzig=x_qOYYm8;Z>RO\XR[pocaHS!]#{hlvJzb?zyy Zö]%eێHd {eJqKU aZySXVX #;:WOj u79[& *r+ǍSnR 1<菄X_cKЫ*A;kݷfv5ˤm>_D!qw/;7S'M$t(33ڴi#˴\/HÍ(Uj߾=ˤmA5W mET똷 o^a_At%gc dm/3wnG. ^[Qz L+mh@tTC+mg$vJzb?:fVOo?j#Ge!sxsEW1:{ aN@¸zJ�9[& rtk֬[Bnbbm͛vjΫwMxdŴhg[@.8IwhR&lML=@eO),,ߧ]=n:WbZmm&x0 BeU7g^³ 16䰔d{N<]s;鞻ppi"]�L#{ȟunVmk1 iW<]kv9cM/_nWMNZ | G?:vvee O.CFԃQ 0�!Ec*E`zd|28v<?{lMRnb d B4`�S. (̶hgrI}d{GĒT(y6ܤos+ AիW{*! S۹sg[Nͳ7~A^6:l�-[(CȵkzfIwۦˆUcOП2a3gg}~J\S7Wi>.7n޹^^dik!mZ"]oo3ԙ~C3Fft nNnns~G6~ߊ۷@IGQ}.~n5m$cew4z9�N~Ag\&] |7>Gz˔g?cw^1h/REm{B??)**55hwgHv-Rf!_CS8F"biwt;FG!_Er8z!q?^+?'z0Ch6@/tҽ!L;ii27o #9JFG1GbZIlxr3iV޹,ohа/W#Ö] Zy "Ex׊=k;#hnFZ!<}pV ?G~"_/]Ne6V8z}CG?iQ@ BcqWfȃܻ;|VKRomj_Cfs(*UhS6HxKs"WpTJچtKw%(zeddN4#HdG#ۀ^A;b:_SME9 ﮮeml ]ܶϧM4s,v]TkRv^#"\&<@^vu$]|WMq։w˞ AE�?B,D*,Ӝ]pϧe+WdիW ]:Dx_rv KC"GUYs)`Hѽ#I=Mw@A&]\-`Y+Y2\r7erK ]OyN]IWЬY%Z11Pzh{Ejf~7GΣkŋtYX(.! cHY/^4tP:{L&=ݓ'O#Žodb+. #1gˤ۳gO1I&]ן=txʿg<k'4߾`5Ɗ ,Y' ;=x+6VOЖr؞I5}]JrNRNv&dSU z[2Z<? >Ju5q2@C|dqp/\ B6f… +ϤZgWkT_"EA|[s. <^|;OyC-vZ"Bɨ_lQm۶L,, e>H9GSm9'dTo߉Ǝ+R:  :>L~!-],, N<ʯˁ_|!>׊(#tYXZ &X&]|Hp!t#mQd{9RFVptYXZ` /Jg̤¢O8P$ b̌Cip]-Vaai"mp!rX2WS|C}W^| Wx<.pnd ;CrHW24,:z֜&ᾧm A4 KӋ*\,;}/ "?c5ieaaQ? z> {,,, 'Kr"ݑENWpx,xVqhXXXNg ϛ:E}Pna-- ˠYXX<P|<I 2Cg p)faaqsM Z"]l N]⁂S~Vd ax7/c0 `0 `0 `0 `0 `0&NZ-h ����IENDB`����������quodlibet-3.0.2/docs/guide/images/queue.png���������������������������������������������������������0000644�0001750�0001750�00000027425�12161032160�021060� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����������� pHYs�� �� ����bKGD�����.IDATxyTW'$Ϝdf~3g33s&D,F QAw]K4qCAeѠ ddi}7TĨjM]U]m|=}nݺu]~~0mڴ'Ot<:Aa8-,,@MvgK(P@*%)etPG8 (P0<@Q9]h\_C  L|[t%lxZV (Pw+*4%m*j~j>]aL  lUh, e6_& {=ټXٹAFQ^"gj,S~$z񿷏 5 ^^%?qgm SjKE0Pfݚ0qԎ*+n0߷,vFC~m<+`~wyA!:RVQ~0$B3G*-b6OIHvCsӧOkmZ/yϘ9zLb+/<mɳqoi;ge:{'gN6k GD)(= @.Rĩ6xTQP(:p4B>r5d0FGG? yԎ~'"/pmll"j5wMᰦ=<45ilcOm3sOxUI7o D"|e+6S6|m.|Eľk}dOk{D9!_%l .x!$$znXXm QUUUG54jc/hnEQ޿#mvvvعels^*OKffxu݆])./\5nB?[!ãcbubà. /�r" YkWv.x'Vo7ΊMgg*LLJ:m<5pttǵ+ok|X1>k^Zooo_v{opųÐgCBwXg7TR.* *̀tU jXYd Ѱy´p/Qh(Qft(cW (z%\g*9\rC&Oۺ}ks)q åo7cJU�!c,Kjjj9 Ϭ] 949koZ/_z8E~cKuD8|XBp6G~:BJJKk+1p+WK7 BbJtdw1)^t$Oe^R.&C)2:QA_~ ݖ w ^Ve)Z';UQ3&L)-!0y"oZ`p¢". ck<---XC+W8d,{ٴwh] [E]yZa[t奯`3<}{w$Bkdܓy ή wksÏiBX XdWTBXn*hc/ȱv0%-cwD|WWo*7vܪ ̬+n`'Mfj(&9y읜<G&}GV.H]q fVk|GYUXp_mv)}0@O٧Ϟ]nS=z$¹M+[p#,-+9y [fZAb''[YY a~f@:" @|a#G ̽V_A[IńiOe:j ?ڗs BUF Y&&վkkumTzYOqJKOW˦GIKYȑ]vo@pׅ>tPOM_vX$$²[QQamkoͻȣy|M IOd\B<+;ۅ͠f|Ɯl퍌фN<i^.(p~^[)Т4UgN''Ev#`bLT\qmAlV*߯N '<b銕ZM휵i6ωsAhp.* &yk' r.H̼K:9>t|SgPPb*[ㆡTpq$$/Q^^amhI HrLBǨ1x:HBc*82}702cƞNH/~\-tm,�[G7"\eb/'`zGp!%=B/aϭb* 32ٷd eg.KJK}ϴ�}f}ǟXL<g-kNSoÜt!W٩=w~ Oh(`afZe#&#ٵZٍ]NvkbABvUfSϮQ;ܮ^aJl{EMJm^@'Wj%]7EŊlY[[+!G$5hf_aVU(8 |rhk<[?ʬm~U柚[B|`+7\mXU]]^QΨoY-BP*El[SSsqe Ohe };J*rQ[U_ VܾQQήx]j5N ޓ]B>-9ue+2~ Ehk:OB$$A$A$A.A.AAKAKAKKa!I7`WRRRlnAcY{ є]|fdǟ;w! 'Nbzm#v4e 1-(}w~wEeƑݻA֎΅BU�ِ9Lqd`._.b u ,Mٍ;;l!Ƒs߇&DCXkə{=~ 88{`ܥ AI+Xr 4n)p Q!݉Žwkm=f\a00KA~"B vZQ*IqgddBFfQuqI[[+_vUJ]F]-ZuOx?zZ钒 ?0k^w;::m6vjd: u%\5]عeW47-"w;$t5cCH_8jΥttL`&,6s_k\sˎ΃ #1s: --+9uBIi^npM/"3UTOǞxaVw5ioIii]] IL<ԙu`g׬`:ϿL,Y~㗝V{GJD)8:S8bيU }Y9s<)(8ddo.} 3SM#\AT^nܻwO:څEyNn\cD^~f!Q]\323u;feӇUXT߸v&C?7c=~Bpu"ὑr@tkBNRs=ar3Wp>ZeW(4{WͲ~ndgg߽{W:څE`IS}mG~1֮Q7mֵ욕Lǣ j=ⳍ0b};}fla.s(VČ̬sLvq&!Q03aҹb3K|&5֙+Ze75-')Jhm1;wHACE8p7}Od{afhRRZ+T:mG,rlxDfou"Gssӧ vLt.<sr\j?0"Cdddܾ}[:B-pW_<c\wyOAbEe媵yܶ}:mpkwlp쪭̜00};K) . ݭٛb8;`AVv6zDI }Yb3tWOǔG:s ,zIOOut4Zx|<4;PWAjG|i6uP;)ܱs Gͺա23`c1j̑ !w$$&S=Gٛbx &COǞILLt2/1fhuuC8|PHw&enݼy֬XB;;q)5u0qpn8`RSSoܸQcV,Y:0'73)+]8uRY)}W8W8*tRKA}G}gtC]\8 ^diiY#f+ ٌ7A֎e9)#v,Kv A˕K &O Mم<sR/5dfKKӗA}PvK >(FADߔ]'~R -),kHvVv_:Xƍ/U(~kCnMF9jdBXQ3[c'-\3}Ѳe,8Ds5A$"y+/)-C ee[6T1n1z\ݚ[ZD"vZ$L+}y_Lٶ#dRdQvNC.A[8 2̣HXLKGG!lcbG [[,Yq_ X͛siڤȑcLJgkϔ }_G ^`"ܴuB@,!LQǏh#`Zی_ #6m ⧠(vS\*#.^<DDBvŮX|0D`%*kMp䘑]].=j%<^};:Hv,w8y`rq'kizf"PU "^y zzzܹr֬ sE!3q;w͜qs=3g#Ng/<o"&_+YMWÌ_ qSͮ;C"Q@c?ϥqD]]+ڽ7} 8;ƒZ6cFmrjրy0pC]˒[osy~qG-|"ήmmm݆!xOvÂ/\pqSuu\U14p sqK#>a[Z[u5y~eW~&\ 6%w([^l9ƃC]+B'8;ƒf6c.J`]<|Sjm-ɮeɮ8DXT#9awReĉwL<1eW0)ݧXD,^9e+J;S !R=z!Q)q W2b � F6"{|{~Gm^jRKلF8e*[t9 Hj.5(d'A!Nip:!/>5UUmEUʴv5%]1jGYʬa% IɈHJ^b%ga&/[Jt0l(UUT<F"[]sU땪#a9fZՑQ.*.&}eS2)gϝv9ux)6ESS%K5G.[{DYWfܹ;̸{PǵLzRptQrָ+JIXz}䜼<H$[;D쉈z¢'QhW؞wt tZTM1bobUKGgM+V ɮqn m====ܮ,xZkÚ#;:&IM*aNݰp2=j]шFc.y\O؍7!%5dWN 56d%cZz@`SCt(l^<sod`x*7dX̦uB?MIv -s$AcXl7s %]´<7}8 ~ %] ]] ] ]] HvIv Hv HvIv Hv HvIv Hv <`d1[/nݺug׸Gf}dZg#y+ggfOgc<+׬~Kojj="$5fʺ}ƍu0Zm>.bH9w)ܽw/,<2ͥO25$4 BIk4 `p*QXk9u5#~X"RĬ}{Yvsu{iC?!Ϗ{Դf*W= k ǽf}͌}{Yvsu{m5.]ѹ|l s$l@]R%J{֚AZ]AVP63:e%V9Xl 6 +R[ZKGZHvC~ApRB19n_Z3q^Yef3s_3`+go?nf{PM]q9gW xU?ٕV>bjRlF羖 9:<:l7$Z5 11 q^CZ^eεV%9Xl@\>Y6nv'NsnHnJNkII~e/&Vǫɮu9X\]l&8ߜ0z6vCy%- oh1gn9MM$ALKDo@Iv Us0.A..A$$A$A$$A$A$$A$A$A$$y&Hv{1 _`F^sp_]LsK.!7ɮ9 :X7h:{jYlmޒ3 ]wa]w*gB9GUb3ẎU.yny;wa]4T-ya^}EMЇU.yn0`8D߫k'5i%B)!j>\_^vs{.-+4tNkBԜJwlcSd_)EMkY~}jm<[S.LkrU[֑mC޻*iM%9XM$ 12'¥ˎ?1y_XxDwwwSsVI,o.yb}͏K'5>bNCeNڬܱM]3)(y1CT 웲Ksٕ.,m&K`] zLKDBIv HvIv %% % %% % %% % % %%us0Ak6$JVc _VǛZ r#3d8H;%b)v :nܱt>鋲cQ.kվ׼Ks0kO{GIeĩJoEeE(E]X\eo]lݞ9.ᦢN{I)X 2>'bEu]"|VAgS}ٛye<[`d"lܱCGId@6}Kv;[:x`rڗX.y2YYs/o[W՛>$2ʑ]XZ$f]luUT\L LH]eWViת$ 9j<'M? ]|fd_dbzM*Zdd<[`i'9XkBsO:!+5dүy]z cB.\ cB.8 d wBKa4MMK)-+ G<$AF]%W8#e<!&%0>y/%" E .S^A%%0Ap.AeW] dwIv zIv'q0AA:B:=+3W8A.Ǐy;qw?A*:9}o ]s:! MvR_' Z E"%%0Ps+ ME2yq� (P/pvsS#[R>y2 ^&(P@AWThlGGK ~j𾜕 (4V]vTaL  ܂" 20 (P0<dbzjll [[[bx%xdxFwwwFFٳg24 d${ȑ'^p- .A욄k׮oG�6AЀ&]]nkk``ZI ╕Ј5<x~e5&{8*64`Hf ݕ]T8z{tM3mG͜;/(8h9z31)\s.yaGz^** . \qskK ~_8;;@za.q&vmmJUm&󍷯?[{e+Waoo@h}~`c+Z k!}kT*#n^C$&566BϿ\}-d[o:tWE<33S΁:7d-# imo :iƇ\,UUU ,xCvM'1z'<bls455\]lQ<3ЦƦ&؆d0]Av.XkX%0J]'֮st4%tV;w spB*߿El?7x74شiꫯ<==ׯ~ka?~@v\Ųe?Ǐojj<4k5tC:_ChlkR4qqlEڋ/VWOY%W*`}}O~nٝ5˸qpWcWZZ^1˟?O]]]U*߾Wb G�s.Ce0&+j_Dq'+pdW3ztC50d虄Đ8{JjڥUL&&{:G6 R\"'mKvٽ7\.4KNLJ:mdSYސT `u1g{ ڶ#R{bXxBQf]t_ .1:nA@dСEEEK,ׯf %%;ӟ... \h}YYYii ;ڵkj555G>}. D|eFkMظʱ[owް_˱R\)Wg WwkFŋɓ'1gjkkLeQ.OBkWTVaKĬƀh;XQ3Sr`yM7m1 Sxa+X Ҁ &n=3KSv+&(bYq: ͷa·+'Վ\eeH_a~]&ib\]S3pd;FZ^/# 8n?;ˑN,R^^1`uj믷Ma!lןg\<==w079MoS3{ѻ U3f/ٟ:!b;qWni>7MѳF澸%WYX欬,.|X~>uuuxz(مo=UU|A+Wg|#vsDh1n㘹2*X1+6Gz:Kʚ0ɛ{]/O$V+7hջ4Maɭ]c,"~nȖ�Ab޽R-"Ɂ `eXlaA3~"Z) 6䋧z6$ՆÅ+7*dh cSYXf _6Ѫ\\, lmm|MN֑d7'7֐Ȥ~T m?AԬ]o.\rfv֚ dTt,8Z-ns$'w4JN j%ڝ```yI~Ν6jMww7 6 6L0?ݴ4.,YtG!Ns˃@0iʅG|aiOvY9eW{3my)9Q\\_R23kfG]vUWWcⓝ^pILJv2T$Xkˉg_Z:85#)d>DlVK/HVD]4K6n^~> IOd@xsHRR!Oc{FFaX ͐=ŏnr;w% Q*D)͛goo_ _l5k !4>| g  h \A+i98 kkkwZ\}:܇ ۲e_|Ά-28[Ed…\X~xtt4aJ[oeXy)ca�c @n b ޾Kl~mw 3 Xb%9LWe\?PϘ3ccڲbYqsJssf+x"Z 4շLeb&Xo2X $$zz.>_N5d@U2cƞNHUv 17ol䁙dDFF;?я%g?&^-믿-""Bt6AȔt:ց:xw{ļN]dѣ׿` 1Mo8pڛ o7MB? o2&]jcd=~VQ&\HIaOG]FWrd{NE*!h655]va8^~/m9jȂ#֒Ot,}En%Z HVPM[9q3ӯ4M&5T8kv27n/@kM XZ)QɔZׁfםŊ#vYɾ_.`ߑh2k^~@WjfxZm  UYIy`P"ɮnUuuyE:}WOvaqRC{z'C+(<u%Hv@]]*T.Ak(x~[I4@ɮr0x9B.Aڍ(#^�MJJA$:IHH JrC$6oUU}A$A$$A$A$A.A.AEv AKa>-$ Ls% zݰ]α����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/images/plugins.png�������������������������������������������������������0000644�0001750�0001750�00000115306�12161032160�021411� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����P���>>��� pHYs�� �� ����tIME� )ݫ.���bKGD�����SIDATxXK'vfݙٙvv̳3wn6ksFPQ1`Ί(Y((DE1(s1[>}�<twuWUWy뭪w1:E,bX,):]J=n%jbX,ˤ`GP)jObX,iEr ,/)R \P"*bX,4+>-P?SԃK{<z>_V77_w, p83Y�55}c?p,먳n-ݕbڠ.5ϼ1k%;]xyeSS%=Kʦ% y?Y}Xhgs|UubX! M@a+ӛC K"sX,VӬ4j'Mϧӳ1i}}vW!57^m[~/^5޼GqiZdmY,˘\@H~.36+ҎUb@xezMr+, inhʛw{iɖ4hA:#~LFyᶅ&{ ¨�&*Y#Ƭ;@A2h"/䉼y%ҀۥR?m5rs)*X?',AS}\bpS`0fFDP/ q,E7gjct^+;#-'Qo3 B )6M^K'%W,cXmG#WII4ZaYwpl^0±ƶX69M7Mڲ7 /Ӑt )DANG)c7 " 4ti(sC޻NQYuz(&Eۍ5@8ZUr*euܟ>{N%Ս4;JN^)=|L<*Zx%sb!n!Kuٟ[KL X:K/2v{nݸ}_�)؎_#\uO,h21nGh˾\ �hk<0a QW&g`:p&y%ߨdxF rȄb@xcC愞 D9ä"ĝ"Ҍ?,q^ҹnO}XeJunm+Sy/.\K~.XYt`l{z0WuKh9q I`5KbڎL JN4[zI`;~ Yd`yu>M%hRTMI4fyWPsSjjoGNǰ+ב2D&VƊ� ‡kfS*gM㭗"q+whQ˶Tq]_B싗nNAt##4v3bA`)5rv*#BqxwL<8ô%X#�;t 2}K>}Y } �Ѭ*CcyԠY|=fagF1,a>ju<P[gF҈WXV^tl9U4ZJX6VY42psbٖ˙4~cIeO@{Z'%W,3j;"Z4"<A#Ќ >$x!�R*,lWo鬑O[,>B,}t hFjKe(_Qw ;h\p1@.MZX"neKs9L4;5_yW h^%X<`5K#fXmG~gh _˅~qҋ$X+tnQl|N?2Z'|u!_XK1iXq}t h dT=>C*g(z*-FsB˥Wi=QvXٌeiX;yI%>g]tb,_C\XmGaKxG,#e^^OKL XBY,V$S4vNM% Mhxa-#zc2hȒC4;u3fxh&kaLжg4d"oYEaǨ*X\n%-yq >>n3ol9hN{ei#VI�]T#z_%Ն`G,n>+$K&x\Ʊt0_l+kӤj{MkN0$: 8N#]>L_0Rr:[i AX`T}# JPoj]r[ G߂XBTNpOŏ^/,Zg Zn rosXq̝ǻvk2`b-aIdT͒g%^b,mkI_[toH4Аt2F/^ 7(X,vIg6&Q8^^?bX.ekdd7GIv?}FWo Kvi\G,قrZqaZM/*bX,Vvi7!XX,bXK&Y,bX,-S ^*tubX,KU2?^pbX,`bX,bdX,b1XX,bX ,bX,KbX,%bX,bX,bdX,b1XX,b,Y,bX ,bX7 eeeI۷ogP111T__7.bX׮]PY[[KϞ=cH<JHHu7/o~,RzkR#XFGGӧOÇ,֭[neQQ8qŲ𧦢Y/uNzаcZXZ_ii)v8bÎ]Nǘ,HY :566f[%l, uEtYweJuuuVl\G0,|JK{0&L"<9 Pi/į` [Y ր'O޽{, u,a]u[*ȰeӵWo,//L^M=F A :I ԹGO}G=a"]xh~jZoP <tX?hC=o|8}I8(ʈ~Ԯ?Ql yڳ/t*)Y|塥@cbciݾsWrpI99zF+_.cy&%Sy'5n7c_L77އҰ<]#bH|1[zl,ԩV8XʲPĢPj8c޲eӡKW?d(lt񇨪(L�´B>yy_ ` ێ<dfSYYf8g~]Zj ?x\hb= R Px#$X\2)Rkݍ4Ybp޻Ld1j)rq^m8'y?\3Iz'N?NLW+uhБEw4,=OSuX-,q waP2X]4Y2Xr4&m`cnS7_{ڗ;Աk7= |-;SII?  2ldKbL`ݱXΜ3W .NYs'g\|ɴdP;ӧ6X1-;Z )m`SRSu۪kt _ԗTG6kgf^6曖n<އҰ<M]#-חjq`#}zw.n:e*)?(gPZ87Ź)XsUX.X;g̴,m|nm(V,KJvK/~JFӶp09 AS8K0*oC\bR~[[,Lr`M՗/އҰ<Mաbă %Lwve-X*_6 lRR̠c% U圲9Xͬ\N|>\%W˶急9-Mঢ&`\pR߫,C%`iK,Kڜij?-חjq` 7nՑ#GeT&-n:e`P=nERд]#t;Ƃ-#>x|&S~&-MK�N;=w(:sD^H>5uJXZwJSc&Tm,peSqb ܇=O-b88;v,-]ThܸqzqIc˭E l2u`VŋT#*=s"=9X5Bn ŰE555&>xh3{P=;IG2t3ӄDZ)iv %$M|^zD~._z ;au2c,uh=pIMaZZRN,+Sw h8[QDZ܇=OSHeZ X Gn(я~DelƖ[<7ѐ%x<d2ƎRmZGKZղB*H9KW "AjH˼6K;hCX;p*V͈IbXL}|=&a�7-2bn1l9M wt�DϥKpCyB-ѹpdp2v_K_'X*B]pS|PΞ&!QvzLJ {b%s}Ce`رnC[L[nM�6:uUYKT? HPIy*L͡ڜtȞNUpu cm ̃X- ,a}�lЬ`Ν;͛u~~~ԥK:`rkKT :Eݢ,9X=Ne>+=D*8GuSKV,-<Y.) - ,V K˚Rh-Q)lCr5[XVu`*?uٍ,VPaY,Y-E7)3�,w*X- ,XVj4x&ۇ F+VˀIyrKH˾S-,9X]q3|FGЍ^_Y+gҵ %bsM1́Rӟ(**h,v2J)4x ̅~T}e~Gn^ԏnc[$XbZ9X�?weCNQcK3ҵ.Н*.^DGQC^{zz}姼K/^<9XrSbh先^:YkY,RX6u[2%v?ԟ eեPQQNv2�K]ͦc-Xb蓽caLK;o,YJk׻glKZbXo,aY:Q"gNSmʜ '*bd?QՅtj8%vkn,;cVVK[0lѱ :\#|D m3(oƹ4l1E1c2r<Ę)(bۛb Xb6-**bPS-G\03Xr0ϣ\V 0y MQL[gдA#"R1'1, f8l04 p:#"+N Cc=*\`bXVveCe⦄[8ضPUeffZt qXqJ")M޻F/f٤wDN%,rҷS bbXo)XDz2277ӧLCl`5D3ڬOj%S(o4Xj |Gb-|HK4KC 1ccbXo)<&&F�e;eeeԚ!4gddPRR�ZKoaj�毖a~gAOƆzK:KX¢bDI/ WZWw8bedd]reC*>+bX, M0tj�G|]gbXV bZaDslaa!*..MbX,VKbX,%%bX,bX,`bX,bdX,b,Y,bXo+XX7(xet/Ob6|աSXxyo n.BXƶ''x%b,- ѱ 5,jj| ayJ8zb%𼒓ͤ+<~bbhݴk.M¾cc,Y,ր%va /&&?~  c3ٹgBNJkÏ_Kگ2,T U=xı ,z;PYWWgLNNDՏN<GAq)ݢ Wsg"fS3ڻ?Jݻ^vXI{?kORfß% w!KK!�hi1.0XX,�˨(] J4}ۻz*oMՍw)ƹ:辞bPՒt/O"#ͦk?c&yx5<?yBJ1۩K %A@!Ä.]f`3D6,ֆ4,Y,VVK-mp['r҆#t|])TK'/VX ܳf)EsgQڵtKKsᓎ_Hfqpԭu%lt'?*e.vYOa)d[Yj,A[}.:{*9Y䉴G.22$%bZXzxm8A]&Ae)>GA1T\R@^WRH/e]Hk(y>NjOnTYUe,Nw^ ,o IS8,v!,?6Zax ޽{@�nc3BbX,cFť%. [FMNPUu߆Ev+S4zkR*Z e>ԮSZl9]mlRzqI)0&`y41Q4x4n:K9-L;{RR`ɲVbbğek>ZڲZ,Xig BɧOJ TZZDA~)vPzzj减 mZ~{Фz@쵎u X—3z#4dzZˡ<jZ7X?qL-n\GLg 8wN4>gGO1>`.Gg3ZtZR7y~o*k`L B!Ksy 8QN*EA~1mY?={fGؔZ,UK|f4,>>:k,, #b\6,ikv*,,D$?U S;>g>Kۂ%ƨT Zz0hSeuUUR{_*Ywz$C@rxOE&=ay&y K%p986b?0H,>ee& eV7پbZi4ms?uB<5w>%eX<y*?9%ێHls!|?A>~~ԽO?jߩ -\j{X+@8Szf-9>Pz6-a%R]%U_)$?AGeDY:gs/iw/.:_t֫zZEc ,cVr:o岹rgLZ)gU~p-Ʈ9!A+VcyZrOX{,)5 Z^TkY`!"۵Wo:9zל5cYQQaTr4|Pa)(sU'ϒ @ߥK˧3bJ&`!tcsh 9ef6:jѴ͕L$n}S޽ M@1,|X*}NLPiM>v9f"<99T./-\Dk׻ܧϚ-<xm'ZtT6pp:~>JZ)[lُZ>MH mS笖f7y e_"Z^<O%L (ʩvr5un q͠z[sͱ VPX(eOMh-䞰ukn5R'u]z UUU #>χ>TvZk`f9tw`Tjyw5\ӛ&j =*ew$)**˄SX. ,_|5ax9s79,Y򶾃S֥˺a!PST\[?Pghja)![Q~~d,?Jㅋg\9Վ5W.K59fe}}|-g 9&fe6Vwnͭ[CZİNܿ:9~ל)>~׮_sN^Kx_FY?�t)Ee~UK /j�((RZ>ZGөgi”U]O<AGX7:t*}ᄣ&E-<(\)8,Sn3WNc͕RTG<<{ͱMތ-'luݚ[j%e6V޿ֵ<ǯ3X ߹]OBCeeeO h|,90XZ 5r3pr5j+*ZXBůr?%hGwbjZ,eE^X+Z.[U{FYoXҫo,'slYM-Z,-3K-՞7y,[�X ޟ~P8ڴj -H:Ӛu+E7H%%L4Xb:X-t8w^8·͕pK<rƌP}%gfy5ܭ9؃rsES �VK+S|gB>{4Y/jo/g x >aA6s^i켵˖`stf{-MU7Vw͹n[Cԙk X=Go3X e`?vηjG1q12%5U|<Q4vdJ<qB1jn$?>m'zx!jI>{i޻T`NohJ=<sUٜr:]Z,+`BU0:)6WNc筵\Kϒ+Ec:PWͽgt=t1*%՝%Ds-P殹5uvZjћ 8ZLH`@Qkx8" yu|p|;Ǚd1Xr:qV%/E(&W.ZN![K%m,m)~y^GW4c.^Bc CU ,K,,Y,`Ɂ k@SXx& ȫ*KKE PS[Mq),<7y ,c[TW_˔c䔔6ej=t[b�_y12XZchkXTI^m!p0Jy%'I%M?<pכ.e9OKW:Wyeh+<dkz {cdv: <(Qy80X%,}hl'*-+ l !|O9^z8cZmԍg'bZVsэey;rj! 1֡<&bxDEc+0@CEO&%5IXӰ|ƎW7@Y'1\dܚsRsv-kDykW횛{SKY1V&\Oml*]?yj6 J |j*�()11Q㉹a =x.Sn5*EDͦ=gw4ՕҋwUŋvы>z!tU`ijqāCkˁÆk@ee%\/[Aǘ|<HxOMb̚Y:O,t ,#m9ll jS+>yhr\]! QUUE;""8y}њ͕S\a�k1 fpU cɹh)}Ԝgo'ʕ&3Xz6N9[ G:Fo {ɶ QQQŻihw?FyTpRVI#s9$=u}=%_B7EFM~LqS_'t^Sl@dV%Bxz:=] ,џ3Mm$?1'lI2\L8Z\9\afKuV9kEKy<+zxkޜ{SKY11oj`R~ ?_DWJ%ɋd`gRD'gϢk'>Lf]$nDPsVJK-}Ot"ϾLN ͛_[y׺n_rH8GGMx8`2Y1#!὏?} ւa:*�X>x<M aХ$pQҒ:u|͕ZK6@&B*UKEKjQsô-WsXzoj)?3jy,5ᵑ 3FfPjvŤJD kJ ^$5<n~tawuJߡ):ݑz ߖ6!#GSL1iZ]ߖ�DWgߥg/J<qR�h]]KX"vEE +PtגxZC.bX,M׃#⏱#?KZTr@e)Xbi4kCKXycTG�|Z,ծVޛXWb`J>^nT\ZBҰiXڴUUWmXD^iZr9E;NDZ},(-)T^\RJ ze`iݻ'nk@*^8r@ٔwӏ"Ŀ; o, �O,`YLSt=8w_t�(tSD"'fβˎ]Ŭ,4 3̠p8Iͷ X+}Ԝgefc8CK|ծVjaZX:LcdlXig BɧOJ TZZDA~)vPzzj减 mZ~ФzЧ쵎e{U`GSM5y?V4ţ<x^} T&/7$?>m'}n^RZVnҴS:<MÞ}E~x_/:(-D=-�i֕`4ͬf2vZ%% Nq6KcQ44\=v]zW7 gM>l<}D=11XZ [($4rssa={n 7W 'J]I@>T2</-ѳg,H߻_]XbYր%Ҏ?Dnߦϟ_eR/^3;Kґb;Ih`1*Ղ^&$`'{2.<T4Iʁ."?M`4GdOfz%QIJ`*X ,'N% duuȣ7IC ,F�K``bZPRkF8f?Oq,KGVں*:r2WuP,iʺt]*O)u$|Q|&A:(OuM%m߹ŽOIC 3?_R�^-=`( *Ñh@pt``bZ/ C /_f9tw`Tjywϩj՜L5QSy֗Pܟ.;K%ITQYF< _OM`ٜ5oC(,*90X2XX, |<%T{xɋ{ (ǔ@._" ,^O[)XnN阡n ѣ%%b,5P *)+-$Oq!J999TVV&$^mm6m˝v}h <>dbddX,PV^J۶RJ({mZ5wKiͺbG7H%%L,,Y,`ɁKb1XrbX 80X2XX,KKb1XrbX 80XX,KKb1|ݾ}[u]΁Kb!DyeĨ ظ*(2`o,Y,`i1X*L~ɔhH7sٻ `>2Xb%uы>=MJɧS,h1X2XX,-˨(Տ"Pm?,ݻK7o^4y=�~Lky<~K2ce;KKb`Rm?,oݺIUzltO$`rٰ:v:wIw聛1SnCYBR~C箴|z\<14߶ԩ[Qnn<tbiy8ˏ,{.3XTwܡϿ. SBv QGa4f$**.HL oy&b1X,]JeB%T[WMuu5t:%6yI_הĩAUUF K}CMqfXGDT]S#k9^Uk42CXyІm8D\~A! 6B �oTQYiqݭwstgu9wZ!4~n[i4Ӌ鱕et otOXN|;TVV&!`W j4p@,׿2XX u5TP¢< |ʨN%M`ƾ; J_뺁ՇuB-R~r=`aY,&p^~iGt9[/VEc%<k&礌J#"6ZUw5@E~Gӕ/G; gz2((HPppp;x`vZm61!!!bۚ5k:}ٳ8fΝ?ĉb8Y,Vr2l*<cg(%ʹMۆZeu,[�>T'Wk<@ VCXu2<̝2dR2 :\aYyu7o":p^x!Pz葦:3, _~�Xۭ[&�ӿ~3^puu?}?n %$$,wK9EGGti1rwwݻwÇw}WhȐ!b3ßggO6l ' 2e(oNN}uJnelaaѺ2ub1XeiY]Y(/:t ymrqTUUbiݿ/|MY,a3 Xܔ=-CE`.JX*/JuXb%p߁;JoZ[wW (K_ X4-m�,T@iiio}K,Y~  �xCܺuDl:R 87̂kQ,G]v)|Fc,qވ~@ zԨQBh"۸qD9sIʳdզy=l0|},,7P_h}ZbZ!XbJ[ /̥)BRR ^(.W@+Rģ%a!Cgo_?;Gtp篨 Gy5w^]1h⥚c{oRf4X}(|},M'-:�WtQcDԝ)Sf;, K4eK777=+eNm�0aD\vvJB ,},-9Ļ>2,`Y8Xi:IPey~ߚ,?O,OD[l*\ݶx+-FܵRJDZ3�:%OsR Kޛ<�%“S aD R]]}^ֆaYCfX.wo^~cQYK^T G׹ngMt# Dz <v^p;Y[zD ,EדCˏ>H�, ,-o[lmr<'7'h,hNch)XGϱGb'bwfeeHLeSa^ƚ gXԛСC_Jܪ E? Viucxk ,μwPO'%`lڻ? P6wtKl=`X!/_?K=!=4Ql3gMbo~Sl.\bz�]Ǐŋ_bkNMUV# G%KCۿUynwtt/~gΜis^KX,V+K[,"Oo7 \~u<` -]Tcۗ-[f._Ai~v!|/ L ͥ3;vL%~ Kn4 OFˣ�Zc� _Qy;ʥ<F/E}Vݻwz2c,ϢELO>=W{Ϫ OOOas^KX,�aMM`S}\ M?I7r;ֱ}m� 3KlGgXhE`X>L_Dڻv>LX0;*r^�':h.<9ܴs5<.00z:wL{13dWtfByPgN0JJJX|U2X,K>wK&KbZ8XrbX 8p`dX,%% ,z`k6zbdX,V^, bX ,bX o,Go8D /h<rΥЂ94ZFg`1X2XX,Ҹ.㧎Qn^6ReU954`>FR**ΧSIi΂ ,KKbtAwƸ'v<iuv Y;*7?fΞJ? 7,Kb1XbTސN#C+jx`1?z= rO\6yBZⳛ`_Cg:( *y RV~#`L˒tkn>z[@X٭'c*3%j0|dd$m߾FC- ,?M#B*M~;]ν伧&M: `YPKӧ(_O{3oЈ껩+)]IU7 9lu�aKju5bdV׃(%%o1`aED?vY/y1%TeӦ_eQO6'i_71@FyynR PSѽGυUtel m;(z)͏l1 )ξE[SE.ҋSHD>?8.s(76wދVQG j͖]l\Z0m (O^C/;xnP8W\/= 5gt46 PIWSzFj1 ,N8bR***4ett4=}>|j#u떸-,A{ǹRTϠjΤ,Zv'uGhK-ߚ֤[B ,'M0vv`ҶRb}\"i^I6ױzO^/jxhuS8 P3F²Rr}S̅8*{I/5}SZ{F76|rY wi|h�psj#ӯӹ{4*D(S:oA^/GyNݦ}7O++;KgϞ/wXL0ޓi` Km׿Ež"ܒ*ڭJlk7vm"NX!3Χ X$9II47,95iFxiY1%%I̦&pX}i=;G f2ݺ}xz?tK i-X׊|ypN=˝RuR]ޤF TX e%H5[D;)a_+[y<'`T?.IԮc,Y"RUUU ,<yBczH8 e_(zo<)3칗h{fIӷd4i?q 0&N+j@,,~_[ ,[ xX(?PM)8rnsVBXIqhYLc͕ZZ~JK.֋ zʴ\nZ;5{N X>~جlz^B#K(5 [rzH8?t.�%;\ ,QjiUKk#-ZSO<>7j%Enbes?`BB`U{E!N-nRT Qse׷X>b\bZj%ם% M ^g=2X޹sǤVZ#e ͦz{c`1*o.N{8W@}</>S@^8JYSNehƍlfG7}k9,0o+'z4,]~r<|=ْM&SkesZփgd�C/01vuDx/#үXfUZ;)tXX\|,͔U.C{z|vSKߒVfuKo~`ɁR=۷oܑ=\JHk.-6=nq`q,;8)"Tgaf?WӦѤ)idhMꚾ;:Hpy>|@ߣ3~ٴE�3Ғ^rg &{G1:],4HFҮg2&tNDrp,+v{ZaC<z/PXٕ* z>gu(ATbkTӷ3X6O2:tJf΢\M`Ɂt` _Yh^{4{u0ٯ`)wU~I3fҕ}FZ=`4>mlה%[*,q[;N 69,J̼cOs7Т hmoC C >:oYz\ -Zl`B} :r$;0+7niMsQOHrGZeZx 6JYns»I~OI5FYyWIК5nq`i+M]G^@>ڶ=X4ujmfM~詍i~g|rɊ翅|%-],>,өK^U7uӏwB ,*]G*uڍJJJ,9h46}ؐ`UGZju5}ԮMYP]/`^zƞs6#FчRyKMZD2m\6 hF6Ct aْoV(k4+;&1X`ĝ_P edF--X>,^q񺸀`7U4%=o"ZUĭ\6mp,ple%),+1'Рy;C(uf5iASHL χ#<hb}KPx4^^^Ns|aݜhg/hB?N/=岱mjwޓ}Ѣͦm(A^ 2KotQ'hC;x{*`Zfݾ Gzi`ii[X9r)q7tl]`/&&MuЭc}1Xš+W4ehXuѓRš9+ezqId`//{�/[`ɡł% q}1,y iSjg͏>v5iVv1s^ZֿN{Е+9"tbn¢"=tΟi(VeM-={SpV1%<x7%ۻ?=?/gkq![Qg ~SRS̝l񞪓KWuW@U%j`9u ڳW;zx)kT}w&qh{O'b_3̥}Ŀ~k-x13Xrxs0p_YT<43]8}2u'}dޛ֤[H;m=I8!:%O`/I6Sϛ|,uXSm,?-IM`iD'AXͥm)ӦSdTn=rwM9 s/S0Nw&<ןbzO>kb6,Ѵ֫�᳥,<5F':-X;ph` a%!ci8mO7:,v_tNz�x0=#C~6=C/۵Mznn^ZPqEm�5s|O!ع\< ӳ�v^itIpqx\,pfXo@,xI .@)`"pYYL=o}>vdJMZ*X˲fϙi~}h^Zx>YNu ɳTQQ!,NsuwhޅdK9~g.^xve\Ll ]:]ߖ�V7qW$H^>4qECGV%Lh`9pp&OJAG ,b;hyz[¯ |֞ ׹:|/% 0n޼)Ke:O[5q\breeh5[CiϾ}`\$lEgсϩ2= 3lP:~㩌WK?b.!]:}&kP!$h;d1乫Ս8@uDk9/I} ugC˷]wn<% �6KѬmC`l-�׫L-?ֹugJPPX`ɡŃ%g�1-ihwu#|3333zI"Eؖt$%+c[ö;ZXz,lcHc_屯Zx_g~-M{j�zI<O^!TS5!,oB GSWr-UZZ%0m_JJ{R4yKQQNA4t*euo1`;vxS~B� A(8Kuu@etTm>nk CS{͢~6"y*2ԏo=X*1V�LNNDՇ]X'C˔[qn+3rs)znzMueB*`8R tѣmT]So< mPNO>囗+ ]j3`1"mHʳEeTTꍏ&!-M(#nSu]*iq. )6�U-YL(2R3L1T)Sǁ P$>,8,ZCچ(::e5kԲu,'m8BѕjItbm<,e�=kR<':9{խ]K$ʥb`T_@� u 1f0޽{I/4cwDD?ላq+Œs13zaz׈ͥǁj*22R+WXmDÇ^KU\\@'52R$,%((&K kJ Ku 9ϧ|`1X92gңGEu;Z뢋h1jcL`XNӔŌG]z'ʵtqd7}hj}-^ܽ|̦ǁj�/�ͣ-@#G(??_LIк4l~&6:AUUF~zڽ;V\NюqllaaO r:RKe/q\՚1~?0` 5i.= ,V拆nVb|ƎM;#vP@J>}66QF]=Ah*v[GiVAєiES }.Mа*gIS2/^'p,:aT]G;eiI%%b XnCa={n 7W 'J]I@>T2</-ѳgϬK̨nݾ-|񫌷bi*eX�brܣb9jjkH'% ,b|e`^fjAKpLrDS( ؟*˨Rɚ$*RûT|*}KډSI*Y]]#:(} |,gβ,2v%K>Xv[sn:ݑJD|Qq19/^```bX C Oq,KGVں*:r2WuP,iʺt]*O),y$|jX>*,uҟQ.Eun=(0$Tk Xe#Gc$4kgiQt2)bX-,w!R 2fo S:9jܭ/2?]vxJ"L iX6'Qp80XX,%),׮_sN^Kx_FY?�tI`y_" r=17Kb1X ߹]OB#J8W6PWZ2bX 4^B>d`bX,˖�e奴m{(_bѦUSh|GZԙ֬[)}tXOTRZbX 8p`dX,%,Y,``Ɂ%%b,9p`ddX,%,Y,``Ɂ%b,[X߰V',,Y,`iU<ƍk80X2Xzw.X,`YPQOyc\Ljs!Rx?:Aw@_77ÏZn,_Xp}ߠ4qDP0ֿo}rtt,Y,` !FVb~lE= piM7,oߦ}|nYpdJo;<a%+VR|:j8\,,m W4sL>j(%1ݫ+}{ߣ7TXX`bX-,{!ë#+h Gt.3jJ4R9y؆_cVKc6ÓCפ .N``ik*--?m /_.7jkll?Qrqq-GOVV .4YS(?!M2CbZ'X{\X~zP9}g9y͠;v~7ÎK-`w۟>lׁLDE_As *:wЃG|]eTr2l ]n}Q態2 t3p0WzOQC(+/s6fExm}sؾ3¦u#"+ǁԯ,3?ӟj\n <ydpd9+WЯk U=@9O4I/%Kb^?^Ef,!R\Pf-v6\KS`4ߙjjkv>kj;x r;eFw?+`pn}2 ړUVU5=娽{[)<xVl?E6zzٴnfϛ^e!lwc5Xl]]c-G]vmr|[tH_o[бX O rHsvUNP>Y( 2l :PW8ֱ` _F9<|>jQ0eP=Ju [oe4W7RkZM|,^}].hr¥YNGsЙ4M` ˦ i뺩c*dY~YyGiѳb|~"^nnaے}|'?IOK0:jreAP ri Ɔ@^x*+؎x[X*S_SǛ[WK\~ㆰN =zD Mhsh~iǚNyWQ7<$Zmկ,˥K6@5k}|vEߧ]<z#^D9[,Y,�ǀ*&gv7&MIvS6;[fwcX;#*:bu.*iJQAAAAz"#<{{r:s}_s@'.H:RaYpJ(1%(nײ.raj(<Me޻ڵ6mL?�[>̚_<GCMX6oC3g8ƍCnnB͚5"a`ev+Wte^em_gO>:!) $|jMαԿB^Ma9 ak^5q9 (AlXoHA[@ɓ'`rw`V^hly?~X#r`Q qZ .=UUUظew5O_5D]pr{x=zkWcWͱ,))qeC64 ˚o(\VO뿫.NO~z ci,X@ ʐ˲e˪$a>q~m5ؽ?U"SB^},.@oqdBD lcYainK!驔aoϟx.RV>P2_rȈQ8Y'ai./C:" gϝiP*tEE*99ʝ}9G__o}?[P+eH]Vq7oC{%^ Zyg2t\wdY/4w%FaIaIaI!-XX65K’’’B^#a)*\LUx^Qڮ (,), !f>kWL9j64 K KB!4’B%F$BaIaIQXRXB(,), !PXh4 KB!4%! ˗JXlw>jch4 K KB!FӧJ4q:qkMj?’FaIaI!Gm<#ΠSXx!ACy.JIiڠߺ U ² )+/EdL8ܱs(// B^ea)h(222aaafCa…:|NDvC&,o/8t4{)±&Y_ay|4V:8DD4¥8;Q<s OzlBbJ|=p�~_4w-~mk77/Rg)�yمFΝ;f=P1bۿ:Zџӎ56bX͉ĆٗsйG/>sGqI *FaYIU#"CYX /(zѳ Qq.JHW‰'^EuK~[u4wԩNiѳgf qA Fν4p@�Ka#'m0f(7m:vR c1nq+לKX}~ϥaoaDǮݱel8o4S:w\TUU/]cѺ}GXY#ueK gNashq<9~'3x=, 5~G̹EŅ7ׯ/9sѱWee%~Q޾Nig̘''' �B(,[VXb<L.0y$[ )0En߹3֭_ ',- ?)v(ѼXoݾ`&WQQa4|шOÇU*uzJ]x}v:?Fyy._Q{QXday:*GCcO4~e,nP]{m,<vM=FDHXQxGlٲ?epY{|*nZZ Cg[}я~֭[#""B]'?.??Wօ-RG^%/C=zT|w6m̙3?CԽI2|c/tŋk}/<]׉ӧXf _VV y/## �~b͟?_ݫ\GzTl_رc0<Yő}t2mܸq^ /f'4vlt[tM Ǝ-M3l0cO4;tּRX95$:(Qhݽ{=Z=oⴶBlRz<s1oω@UXp[9Uؠa*=rmWf]E9XjpO<ۿٳQPP�777%w߾}޽{ǏLJ~sOQVV6tR\|Ycǎե())Qp^YFj̚5 ׯG^^z+o.r."E]\\'^^^Մr/;w 50V{cbb秄 JKAD<WFFٺ ػwzvQL֡ &ظq'NԹTk 3VVVHLLDqq1Νv "), ߧ2ʕ4DV5C'|ئ J<N ekU8 ࡈ(,[,(G oO/&cb S[k"(m*UK*MEeE}z0oF[ċbʹyUKuV 2D疞5SCr (bgggt__U+**RI{?O_K~zV8F!9sދgv.\P'\_"XWZY2QꃶЭ-\TaԹ Gplli(, e9'Ҳ2's,*cq-5gR5w}ȨjէBlRap?S0*1r_E5&{]UawSSU2Oz+#GaG[z>Su޶m[>|Zz?OKQĨV5I?S[ҪUV;.Kh8/~"Djgچ*HjvtnQ]-IV{12D,"W{dh8>�7o6pǰeZg?ïkXƔk 3WgDԊmӥi(,+!,eJsfɪzFd=={~l-%]C KY-=zAy1r4/Q^OVwg#_E(ʊq./))U y7w"k޻oFab¿d϶>띅5nj 'Lk竉 <xֺ.\[[[{%"zd8Wv55?GQ˩St=Zr }2&r^O@'MB>ZdxT҉rJ4Ϫ\2T&=A^=R2_Spt-Czq@;5L,s'ZXZrj#,cI^}, M62eai}g u\SIWiRⲡ,еU2Q7!#F)h7hW Ǐ۶G/)r U:\^h-uNr%$ck|` Ujn弣2G4O8{iDX0xHHH$2P떞0퐰 :)ȑ#o(M+yIv#Y#"HQBB'N^ĕy|Hz+s"qUbKo,<BĆi U֭߯J3Z$Nx.be?P{=%@%kkkU/B -,M]TXmϱܹ3%yu#/"c_ߑET VJ,.}NEGe`{K.,eeL|$*b0 tG6�# 啥?/ ",E,/>;9Yq^3~"wNE8iݹZ!" t|BY#=t"T!CԲF^{LY\#Sĕ7ߨ!{~g><Õ߲"^e&us. -+EKDžd[,-1,)*/Bk 2O2WQ�~+\ggz*n/h4 ˗|$^DU Ah\s~JwHđ|=oA(, =?6ҤFaJ}ұ(./ĽcŽPR</f@Iccc $%%CB(,i4 rd#;7C#a|+VN2>f h$BaI(, !PXRXhB(,i4 K KB!4’B%F$Ba˂*{]m\֠um5h=z+xED"~eʃFaIaI!²=}V>?\qˎbE΀,? '-OěPX(,), ! RŒ}'\K``o}`<�mv% +_y&΁q< 7}Wi!,o݆FaI!²>RDeyyQ|4,,l;ٸa*칈;c9|,f`t,>G  }M3Fs K{Խ'gE d KB!لFΝ;f]qoހE{b`9 [c%Xrݎw?߈nv{1cJ4M X=)j+,vMl۹ c'NQXBys/[?}fz`(|$EIn0aJAx\.> bLZ9;IXʹz||Pa!fϝNz]pt>}D`/е1L},ow':gϞu;z]c7pji?.=}\Ǐͥ7٣K$Bad²W(,=[x MRlom< YɫC,,g~9W] 9q xe]_/>o7wwL: %%u6npy!sQܣ"FZcy؉&(OOLGIiƂKeS6vԔ ;\tқ{F J KB!`5'�V;6"(2S.ue&憪ĻwU <y:"-=9B}PZV W uqk~{+ܹy;pm.g$B^za;5(�]fx{ Ior,C׳LLf6muw4]8m>9n NGQ~2$.bxֿ9Қ枑’²)+/EdL8ܱs(// B(,t6XF' XpǻaxYx7#9:ʿ[oaihw,rԏg=xˊJիGȔWU5raKci{,zQ;ߔFa\JM :!89&$7ȵ޳ &,eʆXhI|:a7:v3'�| =lpT B|L]M.ȹ\e"N9GT-rяWͱ0cs,eΦ{jZ#&\Qrrrs`Qus,|.W]QJZ!,u> 'N@ȩ 4,,xqVh 2>){<jDd(b/F!9= 9'!0HAaI!/>&E/o Xө<Ws~ݩ柇;`=v.ᘿ3 p*#uG+Qqj巗F { lߡ$P*)ׯcص{2:B"uedv0dĨj W=XVDUқ{FY#+9$r3g4(Pw sVhnaYX\=^p&R㑝^#I 8s$z@Qq|#`=x\y KBysq_ߑJ|ygP|0r+US[/5C`Ħyc#ࣰ–.,OGha'"JIRӓT܈f]d)j?-Fag@$%˗t˗s;))Yy7wpë;~3Ul%wɹ6ʫyy ?GFBa );oD[% ?T|<D[0S#@`Ь(,i>'O@z%䉘J8DE9򭨨@nݑs3K\FD�8sb:pGD$tr,j<4pOw0;.z#Qu̬,j1)BeSKGbmUxxZM܇ۣvO6kVcPRc-,57R3PTr%e&8i*?0mlu 6S5~G^'BOb\u>e=VuT=cgXm/&iS)~Ly>}}/8B(,ZXj-:V9ΓwᏃwk|L򹰬0xK"_-5IiE1.e4&=|ܲϬQ_XJ|Ju EEj G&\bdG.m~g!+C%]8͘zLeY6R &4׿d夡Z}{$'+'QFG{c'aw&ک/`MSz:-=8">}�׮]SG<1bj܅j?~"D-c#E(,KHLǷ7 HĴHNd4n` }]0Ca)km׹<e /q6£Aj }BÕO؉vq.%&R ˮVHB(,),i4 ƜgsI+KN#ʍ' mkVgb/˔Tq;%5MxH▭d>NCay,8XͻI̵t(HV 6R K K²)(GRETUko#q[W%B(,),i4 f~q/{xރ{(xV_|2Ud#D(,[K_QUff(ry$%peH\6Vw߷ !e,AQXz’Be4vq:ַA(,), ! a]XϦG1+2rnܾ�Yٗvu.];۪!i4 K KB!QwST#wb,6qYo顼u0i:[M nOc?H$BaYai5}+F.Kv8xbs@>n <Ri򓣸M%(,iB(, ,e}X)o\MT,8'ΩsWKcO=<гZ)VPXsSNsQUU[oԹ֞<yoo0yOb]evGc ګBO?C~6W3a"rr(,), !r{x1F/|ԊO4_fz7ci(,g~9W] 9q x!ܹUŭ}.nt882{TܤP\R .06vTL>%| W7i U%%!WWX9DP#]\)zoUBC?!U[.n񯫰,+/7ݻGST:JOkrȧ܌28y:ē OiC', K KB!(R+.)Q)(WgմK(**&:-^ai gdb4;t]6mu_Λ'UCMsב!G0L\Mߤ$J K;Oĥ鵴?XV[*,k^%>}z(nPX >nٳg/5- ODQ_2c=xhz,),iB^a9 ak^5q9 (AlXoHA[@Gث臕W4jϜU hd[7mlw1ޢȼLc)αܲ}g9uN K%!wˮK"[# E\n8YQ)~BgVXRHz*e[;<.,nX sm۫^/ċ8]J%eFe%jUr?4NaI$}yg2t\wdY/4weCle+’BeKVxcαD C(, !PXpa)*\LUx^Qڮ iWʡQX6"e奈 W;xnSx#2:e|Be>kWT},۰h-CX^JM :!89&$%O!41}R-Ǐa=[5"2d_xdtl~20|HB%Fai ,PPXP^KIĿمeaqxmÙSHJGvnz$&̹EŅf$i $ KfNX;aRp=8?,((Pi%Bq40R{%$I*nDI2A3`*++kM[WХ-\RO�W.'M]nѽw_|ɧl!4ZIIIFЉ  >R+$*"<s1R ǂ<HH5Ҝ%KȫIXb ϶._Z 9 auqOcfi1mL\BaIaI²iUyE9Nx#53 E%WPRVhTTVyyEE/KCskw޾}1{.l/otkddf1"PXRXhM0deWKMRZQy*MRؼm;VY';m0еѶuA+WZqj*BaIaIxa)ǘ Zm WDFW2uG +' *p۫&8Y9鈈 h(ޘj"4F4wjإ9gq:."PXRXh/Qp4�YxW$q܋w/!1-޸7L"q."9R=ġwLĤ$'>!3Sm^e߁-ͥ$PXQXJ 7F``E{t8u8{5{.MK" ݐKlna),c#Qqw6Iye)bϡB6Re_KU9uaq,8Z WJGaIQY^^nA0Mq=<|@۷w1[wlV?f2!#F"5=] ;v'O$|ȈQ*6MVv֚MVF|̈́ ipJ/6H/(GRETUPT7n~DM=!luع q]ǭ[Uw7޽*)۽wV;׹SRӔJMKr^L<5D>ScM)G)h|>X\ZS\^{?2?yJ*%O!t%ۭz,7ysN:_bo|KеWo<}TTCW<=[%Ϟ=Sszz5Ls^� ʵΪTk.bhݾHȑњkڧ:k^fϝ]ptj饶Pծj]evS~C~L<*B Zs5_QUff(ry$/xB(\l*ٸ_LsչרIbQ0)v()-ŭ۷`sTM<9R rMޭwP="T._aPk,آ7th'Eң,_/_Ye1UMC57wwL: %%*ϵ\w㤄X@zܤ)T ,]4҄%! G;:𗕫Ԑw;qc;tļ`=쇹 sZEEzN :0s\)(~湥N_<ܹyjz/__mX s,5"9w_-&kݻwU=̝-VBj{�tDE ldRRyZz 3OaI!AtNvqww}HXi{PM pofv6FFJݼuKnz,Xx_.2 ,kש{OXhkooPml-/=#٩ar yVckz&λlaG 9%IK '%!WRXv5qr$ %`X:±/@XB!c 9pM l HRi͙ G%\lUn[{/z\S T{,\RwHevM"K;gzky'},2SįeS=-gXjť ".9N!E K٣!Vw9n5F$l*,D:cb[zz.Ao5oR>&rrrsPPuc)UpMI+RkY{R7s64Yj% JF`y'j>hIIZcNXUs,%~Ms,),[4%*), !}, M6">cq;D`3,6GcM0Atka2]I-G++eO!eoˈ5 +VULk!'OB28&% kdUpS64#+BU,4?Y$qj5',e-wj²e |9Ka*%!ǏT4vŪY} քUt%-FaY7$beCYq;0tI, Β:UZuϾ{FaI!RZيV5\;4i$-: K|֒>H!’F5 <̬: KIHaI!’F{݅eLl  #3C\ʰvJSp_JIMaI!’F{݅E\Jϥ i|IKZQ͋’B% ˆ/OB!M&, !%!WFXB! K KB!BaI!B(, !B%!B!B!’B!ʕ+KN`` ***\XX!)aӼׯ_WZVVO#** \YXZ!)`F“'OsMUu Ҕ’N\X^vMuJ%/7RRR u i} Ǐݻ%Gʱ’uuBRXi} GΝ;F^"Y ÍzGjc}eCԅڐ[o\O gp*z_Yd97A] M}߈Rh "{i\im}֪ڣ\],-,?\qˎbE΀,? xcf5JX.BHSmuSvVURf@̙pMp$,>|[nՙ�Gx,iɧ땧~6uBʱ²unjD%ll|噬;:f`,^] gl{ >q{m\u>uBRXֵݹy.M0h:j'H ᯊ&oߠ²RWNh\.nLs8h&Af_ ѥZ뀱&Dh.\ UG5QKʵYꂅ8=NS\?s\p֜o>G3H:L?ξJX+z`t[t/V|tt֧.BHSPvҴi6H0U9? 8WҘ3) >ڶG{o4a)ohT|](ۍBnxh)N<:<yߴAiɴbŚWq,ltRul(+,S,!J)<h=퉁(o=0bI ZنwmDi{1cJ4M Xʬ7n/Yt?|zW>է.BHS ˺;66+Vt\Z^ќ_y(_Rŕ4Ϻı` x}P} KY^=V"coq{0<rwŧ])Ȝ#}uIt %%Få@Ͼhݾ#FkeoVDr}πHJNQٗ/+qrr'%%pc4m>ՊLݛ4a1d(<=kURu lg(mQ|Iv6 A`x":߆_^{b&田̊KJ7iVt<KTNcb*sf7 Ҕ²Dшe_}3Qx1.衐GGvKw_a]0צ4B-kP-菧 [0kfͰ poo/!ی3a.[åfDzzFe7^e#&L̬,ŸISIRA]R<w|kzf 6}Lݛ4]zF(//GFf&/Z\V|کuR:M܁_Őa^3c+J+U}g{nin0L^͕|y ;\0~˳�UwMb.Sf7 4DsMG̈s%NNBF? 8T^=Y#33doio]0צ4<̽{2pmw3z##ρ R)󸜓EKF7>h׹ f9EVv.\ 񲦁׺Ku[Y@|%b|<zΏ'u>yVY {喿JNxOXKe0Lcgތ^2=ֶ<)G)O)צ j1X 'PxE<’2 ii~ 11ZӚ+Ksy*7suO] ڝ|h+qМIsZp\o]0צ4r3tֆ\_[>Әex\&'><=lzDI7+Wā:?)Dx~ Y\\s˹=?/V_PX]!??vCQQ*@t7.3uoҜQevGtDDQSʵ)Bmj Y.3a`=dW23)9YQ~">lV!CWʻr1r3WBi ݩ(-El9&!g„hO$|Dgdmk,iM ڔ|7}DZJY^&R WudzMx g<Wx} ~I?Af'.n qq:w JLjݲ8hmZ,ISi.&?sf:R.Gs^*) օɨ-N>ZwCj~BD_FJy2B~;O}VbҴ5<LO] iwʊqf�2G9R6h0#qM8 {0ƛj,mS}R&>Hrn);&ʗ?33,axY<'dž޼ Ǹ:|&کW Լc0z]a}Ukռ'c:]]hYlپ]7oۮ2سtMs5L51PXXGڔg]&׵.ԖYk7tugN�]&oۡHxEc`LX~+JåZ GT9z]HF֔<LO] N{_?z-$$++u đX~Q<'$y?L ڔ|7^r3UUUj <Ǹ=xm<f?yG~vn:l?ܚ$1 3%Õ5tCu_JLԅK!^_O)ZkME詐sӆ_\TrGR>9ޓVSOooeZ{ |'jiRRRMQBt|:=f§S=y0>̷m?8`SXqQTd aj]_RF֔<LO] N8H }ݕ;wo w[ҘS 9>n^@;Q'a]0צ4ܐ܌$2Q`TO䓀~x6O'I(9<Jhd~gؽ-=RRRMQʌ~xt姶^jeGM9F<>!,& Է 0�Ab۶UkOB\b۵ӅKQXjs٦Rbm:H+CjkSԅv0POǓ=jAՈ<5t3z۹!r.˸!4nwrsҭ 9?oxa)JWnFAqoҨԎq?DbCjkSԅ>MUxg&? &QM+!=3ۄuBiw._FBk\XƜ䐗)G)O)ח.G]:?b 0polg?9 uBj7.TgKXڮqօBi 4фlI^rǪd]`] lw}(C၁222KNRR:TpBiʡp;oK///DEE!--H:qDV..BHSXi}l`UҕJ^Nb ++K}uuuBjt;opaV[0'/_&/)\Z续 Ҕ g|FB!’B!PXB! KB!BaI!B%!B$B!B!’?!B$B!B!’B!PX(, !B B!qxB!Rt’B!Et&e����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/images/PlaylistBrowser.png�����������������������������������������������0000644�0001750�0001750�00000335273�12161032160�023104� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��`��������sBITO���tEXtSoftware�gnome-screenshot>�NIDATxX߀SiЛ{oҕjD VD6 { * ({' )T۩wMϻ<egw~SBיY۶&N-у@ BLu?GB @�$ Tʍ{}{AEc @ zZό uP"ei1T1@ ?f*?mޅ;Gĸ�i'S[A K?xܣo/Ԟt9@ =t?a>~D�yA6T> .˼J_X֟}]UC\~g?a�8 f@jgFղr}Dΐg7:ChiW}֢_>_H>߀o7G8>bU՟w4? ooh>?@^ U{t.3 o9hWw4?^m5sr&�\ @G>_=^pv@rpA笻mYv t^AZ6*:t38\=No8QAjE觏w-3ֺ>4s! f? !GU^_pxl�yA~BB 3陋N`)"m5)7W6ǽ0 l7ۊRw^=j{@^7,!,=V_eyg+YX~ًK2ӃqaŒƼ/$boasV䲣+ZCF$ Ds 5&Ŝu3S͵V85*@-]۲~N;zH9j$ofw^N o 6$n}eIԣQӛ[Yy[njb9}#},,.}F^*Y59#h_]l—:gh|>gBMQ_>̚oĺ~e>?3 v؃kjY@TxWO3@̝|#,:S_>!{w>A ǚ#/)k?@^_(Oտ3g@Ap1O26]c[831oEj\:F ՞zCY.D;4q7",]=, d5&ֻIOL wOc r/K6*.7F fm8gv[�Mm*~vۇX_^gRpȲk"uyy/OwjF#S*n?/+z*+f[=^34bLmnZz'iA*KֲXV[e k2/\9ZǾoi-i7Oc[SIIvB2_ߟx+?1&(VGUqur?5^hݵy'o]q]޳9I?~YHyf ~ d|޹O~{ ِ-5WsRuZң\SrA ~Sp%?0+.޵%u$en _w .; zիz*%5jѫ(lo69/y+jMq g[:NkMkهXXŲų_<:\o]s= ;ѓG[.dO1;ؙڛпmy;Fn̿d,ַ꩷g͆YQ'@A+6[QTՙv|}JXcl弪(K|8ZeYdlnbol֤v3]"2QǓStn?+ sU۶e#]믒ό*D=lo:))Z\mD[O-~ E.ʌB�'>+TF>[+/-ˎɾ�efޕQz\\byϯi \\t?;_~SGFbTib_e2aپLn9S%[9*CWgqVc+SSc:NTMg1CƱI&A3Lbw翃֚ND O0o9zף:aο^ܽHGeu "訍u$a=rv%4W|t !wTsߜW/6;NSKg/::#\:Mg\~~Fce0C\?#d1\dj+>`<0ESg(fGMxOi̻cCbB ><Q6=qpB-w W3ogR71t0lQ,g\<{6yhbB"k<iAoA:qtc%QvjzBfQ>qwT=MoKo]i=jDLjD?ݛ"] ›ҏMrYk(C-5װ5ɋg;9K{u{{?<:K{mՓv}G>vL1Owaw'61#_OEҘfLěGPy J7;} :ĢXzс:w>|՗7Ǭ]Vj)Vj }j9'{Ǣ\ q՜f932uCٺﮩ>%Qo[s7Rjhz{{|!Nw,;\ PsjWCq| 3P-  J٠͓s ~>X iѻBwy}a%K{]]|YGM'׏?FG DwϬ)5f΋Ρ.eI}'~b޴T!g6NnAOWDz1 ki8QvJWc7Ab_ Nݸ|f]{yPyeX G+B&jNR6`K :ztM5+=es&Kg㬤kH%}ktR -Lۜ^nSڵșqtFLuݚ1xV.A|cIihnZ]n2nhXOޱRmOM7Aޱgy= 3Hk94t޳;wOj7]Vmz`VѦn 5,rN>rN9�D%rP^=pZ-EgDhj Es&> �N@Rjx[=Uic.Bqqvw%~kjb_-T&NyHfMCR_f"eڏ95gkv<ECt{{iF[\U̪/ur/l0`-xC=PY26:»_s3k\׻}5΅!=x׎agzh&̢ĨeE4m|_k9r�$?L|3{[ .ޱ Zٱ.0^)_w-|ϻ.K}n*d>?5\:|ݤ\v~n',8 BO.\CK-NۨŏsKUvRM�xAb/Y wTr.},!66zuV{ںE9C'n^1ą4[4㗦mǪh,#l郼&<W# j=@ԄzXwpfZO:�EbR/ߓ\ԧN*.uIṛv*ʙAw▖Tf߈ג~9{3ǛE/ԹU3vt#U/7 &bO6L<vqM;K?4k32j*[N\T)utнcm oΫic{o/g2U7|#~ݵ‹̧C_T|`#مzCvpE@ɒqR.R�?2Tgƞ)<C_IJEi½u*�oaC :3lLd .EĢȖ7ۃӣkObla1Ns>2<Aw uث3*6<܎>=[B9i 8:kep!Bk.v\`SYqh5F)TI'S/~VF AlM&k-{!\"*!:#Qa:{}tocKFgviֱV3uOG3s7aQaPShu_ض:nkW[0SzX=:6rsU[ {L ۿZY/ݵojXh ND!·2,/вKt;Y, W@^:Kg.V 8KA8+Z T< 9Ho^}Tgwz͌InG/f~:mVfzggz.�vΕ4_kަ\kerU J</^6Ia'E,~u_/[oZ n,wD ;H;% ωtE27j_ B_rԻo,׍Uur]3[QJ\MH>L<^|{#t#2 m^^vݱZɫtEx"=JYɿKtt|g4 ·_1O@T*?s':bMI|葃MOլ\Xbni6Co g bTʡeWCt "̡";6ʾ @~Z^Ek `.ʆ}mNzֹ|/+'JL9 *cc _,آ @ 2/ȚZ=N3 B\<TfT oՀ@ yֹ9Y6@ z@ �1֖۶7L@  U/BA@ D@ ? /Ala@ @- @ H@ g%^+)̖Y?E}!44q"͙m5}F4Gu Άy/5co4r½ldF鏛FA][_0^42ߖܷ\9,=j{͏8IH&V39k,U'Ϧ FG} DJN):vsPz�@ �/Al A4R^8,Jl=6JFEbJ]oyhG)ݢgo=J/k[} EDgMT>rZzWtt>^LJ@Y|s �AJN "~@ )|aqWp_5UEoZ$Q4Idb@jRW]9RyAru;vjȨL<oF/n#gYb$\"nt*VL22̙P_VZ}o(/bA=r1#XrS $Hb V/*M u<F.3 ݲYK$j{D[ٙrbv{^tz+#sb,Z3&4Qιk" Tq%\G?3kܙ "+ Ą jtoMW,qQR[veS{@ ȏ?89j:KiM-E Σwf5AlyZBmEEn=xL0J]=|v+}mOKv+Sm=Iھ3N&}NfI $oyYwMAT fuŚLIѾCۛ*nVR@c%9It*5_C2hrzѫGÝGM:VHna-m�%&#*H{HCbuO5z";-Mg$M7/@ 0AlcR(>(-{u mS NAiHF\9;K-"菃udd"Y\o'>bIk/TH:j{jn#^Ί2BTiArU5}1Ium*—}F)͹UFBqkf+ler8ZԏS7eց-&HO9YQe3:ؘk"mw ZWfBba+AI*qW1&RVۋh}qx+g&yqT1@ x DO 3.m 6"k9\p)%ԻJbvD9bv':7 RیHfvzRu٩y D!h'm Vi>f0e%=T�f!w6++O:_YZ7$ ; iQTV[%Fo~5O/@ FAdf7i<V]qrJswA\!5ˣXNi}$8+SŭѾҵh L-]:6Li}~W=ZѢ-&K8 r$e} &/STu(="+,y  D3gS*CA@ ' _E)f*Ȍ4#=)My; .{X\C~a 5@n36+Qw+94(,hm|D\N1_(n_|uTVgz]mI#wbrV"EP1Jb~;XEBYkcn ћ1Y/kEk3+zabQb2S{edFHϙf`T&kMwӐv8VП 7 ]w|PAg Fttm-x{>b@ LX1nȨ7_U6Y.:1u˚eR3zVM&hEWUH.=Op)M"SDIFƟŽ^]6t'>4i4xMF= 2J.O((h⺌_Ƭx1$uъS#:=~''7;'ܾK<A+{ +NaH/)D!$I-7rҮE8ɒ6V/@ 8A$KwbqbR#5mqWNw) IZ!S*ژD:R~2x4rMNoK5Rmq#t3H Yhx݉ ׳/* QT4/{E}1013+,9کhXs]"Ex;2ƜDRYpڿ|CWb9*{iYUoZ3^Hv @ /A MF۳`W@ ρ AW/�?m4LO@: B } "@ A5@ @fZ=@ ? /Al@ g)u@ ,<17@ ? A@ ǁ@ @ @ @ @ 1ƠɃƤ" mojdRjRZ @ #b/oZԚ Il E?qeʹڲ'  l _޶-@  o?+a5Ƥ^9s4/?~p>}OiAǂIt7UŔҁ\U᭫pR@ ? b~ ຃>K[}q_~/}u0}B\$PFC垭eb W8*P{[&# 1:#IKJx#)em[^sE jE?ܽTE$m>7|A@ ("dH'A-,^_+6VWXJ ?~;þ$^[Yll)#nֿU&KP'~s)C DކNw!)/_>}<@=\ULolۚނc[iTԻAZ2'o'\m9@"ɥ]t\Al);5u( Go?Lyڅ+<ID1^x׽^,8/K~k^@mT@ D, ۗϟ> <V_LkheR[ʡm>{,YWV{K;4W٧z, U_!m&EL7Se ݮ:%К:re4̧F$Wn_j,îEoDFF>b~(9+iZŲkϾlx] 1/v`Sl㌐oW=gv^ y*SҞ<CH}YTG7 >Vב$U^S*LXͅ@ (܃ 8 �ޠlMi_?2xDtA x mi'ڳe8%ߖp# V$Y(kJZm=FNq\W4:zͅ:=.ڝF~IRT<pM\tԁIa-/{VCD*YI9);qMi,Z(tdWD4VT"ɺ]WɈtZTgH[mx@e7@ "cȋH X@ @' ~x?xĊƺƺ:y0+?4]M.q)3@(CYҺaϩ:%n@o+;5K=u:U:Jlw_{6J-κ{6ZS3ZZYVa;QAdoR|憫5;lS:IlO.nQKChLB>:/lɺtn9sZqndF!ȐUEZ$9dJӛŤ]5ؐ7/RDI47@낈xp8<bq!,A� VĮ)M<x b=r&0Ҿ bzWDmG4-M:S3ٜeuGj7ٹd*ΈeӦMuźV;4W1Zi)'[mjzDd1vU>8b[3T5O\}REg* 9ğEfSI'>~|5J$1W Q8eК򶘋;ܻ y~$'^s!?-vx  8p"^DdG�4d/jqO!_>G @"ZL x niћX7nH 1؋b,X}qCYTI{\ e"snW-! [5YNo7g:N!M>PLzZvLtMM9;6uW<iB9 boy+'U1\ )D i�CY;<^ZSʠT75qQQ23ecCUϳoA-)g5[^t_҄,RX`'ZDn*~V_WifGY-n�xuT\[ʙX`kRl҅jt]9r7j¬;g7mͺ]RtCL ß:ǵn|{K5CNf7@낈:G0oh+#1fZJC8\"kD, ~m{'\<x\_]YZP3gXWO)Z.962Ƀ҂Zk oARPaPmPyt4_^^119۩ڵާ67oj/ SFmm r܃(9vU M䢬˻)ޚ?T @gi.:9o#e]7Ɵvi[GB٫]פ!Rn/`cJz#m̻--?ZX˲ң,Zd4ZnUDUdTt_r׼xKI& @ 0Arڞk_k,؎U[@ XZܻy,4lMF JD,?Aڵ=㒁ϟ>`?3�;ߵkssvy_z'|Pɤpy8gO*r@{\ <gKAAڠ !9<[5j7&g01Q7qb>ߵȗsskII98y]Y%ܜJuޭ8,Z;(Y-Y0m1'YL:zHM]v'O'+Ds߃~dI_6yIo^W_6Rc}& @ (AbpjVXtB<9(خ磀B 2 Hb0! ņt:}n=HHIb+d5X,]ka4۽hX{t8 7`2O{H-.={&gƙ3?S9x biGe?q@ G7ܩO*&~"wKAAڠ !9QyvN/-s!.p<ˌ$9Q{mmY؄nxp k6$IVncn@ K̊8Mo 6Vۺ{{aTf,WOf(>JuNhoiQcFbwGuyݍwީko8:h#fGzƎ+J㱊(7Ck7曷Mee\#'"Aaa;/c } `<'% Ex3M.٘~Xݳ4F荒' ap8Hdf Q�0_t '+9 3 ܻhӦ: 8/3 ֖摫*.2QA$Sy:[b,qUe= l)D6DFK]9_0kۻ΁m8Rk.{cx@ ?A8NSRFv58ET !b0d] k'터.8#47T?TN@Z_PqIWM5V FUFC /&b)xQAH$}@NXrgiKJJJJK߸_:M�|1ĺrzC%ϟ>d ç&]yje֯yNguE=3rG[*(QЊʊ˗Dff<e?q+szoi_ {L_ dh/?rnzsՕsbǨ@ ?N;98doa,^`,:DA? pC Udxj2M[Z~4%#3J\J($'#G]懸#@ j#Cj޳@?}xϙX̢ǎ?nZꚪ;woݾ{ѓ7o^s[Kr* A:'AF܅W_|+у/M̂‚ 2+Gv<gKAA4Z㕫ݿ �rѢH\HwMoC:;- V~j@ mx,K ; 5`1@B0(:H b,DpD#0$H!/8gL4uI:hu21 @,QHO 8D: 8J;b,F p` @^1UT@?Iz_~@vh�XU8b Iq*'gf}Y\RD߾}9ϜJ(Ϋ,S{4IΫe iM9٥%靝ՖB "2 bq�PC�(x2<!WbDX?>fqaTW*v׿譟8Q$ɤbd J,m!`qx HDD!v(ػ Zy txL:y|yYٙ&ʪrJ~_:XdނXU}EACe!鏒AgSf/V[WJ}hi/5T�)=[ JJiT>7k͛EPSIՖB rrr .X}kD�'@ DB q7RD]Oa<ą(L&XP#G'7)Smؑĉxa!"T>YX�'@@]Dkjp|u"qN0/+eŊ` [ A~ g4V$<8bw2{Z=OyXK@4zٙ -qb hWGPy М۷!?L[ @A@  3,::#dԏ!Å0ÈXYAuNM_?EMtifK,dtIm#&RJ D�R/ BD"*fbGBߴ:a6;onlhs_f,Z N1xsF욒|.^>UZV\]S*Cm�5 ZtjmScgvGKYAo :szoi̬XcIy*y0b 5Oyŀ{?o(/Dd/ :LHD #`ep:$i:ݍ,Ut=D@v$#}3q^ۻk(ꏒTN! Zj8o0BA ň"Xd%Qp)ߴq>v:Pfڻ׭ݟ3Xs[ sj�yLihkoi7lRSQDԔ OARP6<hhhN/:_K]86zi>zj<W|wZKiqEU6ShI[_+R|ALnƾ-~B|{f@P!2H#8tk2+'e!6HV q̣-6W3 `PSPe:~:NnVv^zN*沣te$$x%̜a�QG' `Ⱥd< n5<xcC ;Q6ӒNuKDtJpbkmmimm0aUʹjMi,=#\-mjʃ&Kl� n5W>{, |UdF*zYՐ}(*>~o̗R6C_$?%e 6klamMy/,#;!+^bG_mhe2 B D+T5"8ddf84ZXf/3|aaR5Ԭo cfn"p"eN6d%d䆑W&*072skfh YapBXd[!?RQk;iojD s47ֿnko:/S+򳪊^ԔE}U)?77n^_pɈ֖gKۛAA%ӻ wՒ T헟kmﲒ^1^XwkHU67RbI;|L'+[/Nerέh>E+Ae;/Al֚$g*'QrvqG -2& >ޑuXw}id'۠x7 rJlc5\}%@Db^697$FAC:n8-YIH=X $I55mh\U5'i,#ްoIt( "լ^ bX0VpV@bj*q? C^ x!$A1QkFUQ00w2dkg:si֒SBrARzmO# t]b&-M_GËp8!vD#]*""Qw-}zq_+,3pD. "`JrlSc}cm9pWOA-.$άEɉF>wV_~29E <y "4xή/_q=SxRugeiW7)XJ 5l IM\''EKj-GGĮ8MNpɧJ-p)zNIdyk7'+c6^\Te*OľtzI˵7 [Z茺 4I@^$c}vx<Mfp B>aEwWJ.< @~~A$vߘaC0ÅDCܰMYokP_Sn0!a Aʼn&OtR*.F$I gٴ̆]2NYIRZZLBl#KՀYcvh 鹫]n%a6?cYcu[ Kq"F]ˌc-gFYÇ,;a{V@߶7ADeMI,A<?ZWI-yW)?\(5%5ڜRL=!dYyh)99AFmQ28*=4]^1 젓À-2ķԛH;xm ZS[n[qutQ=;ޘm,`,Z7%s$e7~C9>tz4~XA<_g@~M=f=U4j=(7f)(ҡ B ȿ@B,G<><jD% HB&\2m =% y9o5S 0T>ZwX#'NfFcFȈi3ncT%<=mK�7*J"x�-"Fa 5XYYU]8"ԚҦ:<(n9ýȩUֶ0Wf((nhj/ *(a;fenWk~)Xb嫂H Hc5+;.]ĸ uםsb 򾞫 ̔ 9Mne{mmܞ(6&Ʒ|ľtz=E67rȬOr ͤ7m,:l+`t(/D"y> FH `]Q%zMzp %*2c5dIVN&ݘzvߋAI'o۸g{ް^.Klgڛͳ1-6aE[ehFZ+|fm_tD%fvJCˆ p,쇻` X� ""mA|^Q "V m7b[͹*f^*+e)/ȱ&1Wk)M,g|u s~IJrv.U[(O~ī^rA܅֝&#隔v~eۚ3B 5}@T?"ʯ|Hu}x)-U5 :!@VOP!   "F<Ԩ-O4^w/?[iqW^ؚthkVc':p0\cnѫgrn|/ L4(Y;zʭt7#IG #ס�?aVHI A|ʤU 1:ˌ܉8RS̯v[=`tcI,| $؋˸*{'Ad-RzќBKL k d%Iq]6s-3{,:.<8FLqjWe-94֘ar qŀjߜR|˶uHoe B ȿUxxaC 1W:M 4 ' owoy[3Vޚy@p3Ƭ Y;kbW|Ͷ9<l+;k`E1}IA5M1C+i G *80H Kt #XV@`�G65֕< ":\Y=ҞT|&gގ/G2xFa гT|ķ-Ud'=,(O|`]p *mnr?~xq_(I~*M{١qJg ژj ,KȊNNWpۛ|C>2] "빛@}4T kCĖғNT&~5,tVYYC]}[_;_ȷ2P!_*cqa#-uumTLϴ00e%H;??S}ڮo2=ݛ&+jzѝjd4Vwzx3V9r킇^Ιv*LVr_-c;T�+(H#裙YOg "!GEc- jmOYYOA-fþu5ā)]@f&GQ.AyXwi Qss ybZ6A{tnM)8`()e}H''-i5I 빠ߛtr%ogu|G+xל_|&=-]Ws>tHoe B ȿUX^BIv֌'O;iP)k8]~uCs!+nyp';nm qZ3r0/.֋t}t'h,\8zS􄤤Ykƞ?[DD[Zǖ|替qzjȄ+ bCpXaT ;S$b} ԔR <!.ơM=[K_e!̃Aea6(?-Vɋe&%P!_ 8ARX@mƓ{:'8~J=\Y[XuM-ϗwmC'{0wamg;[7<<T9v<"spõsG)c)7HVi5}U"ðX+b; bz%A�MK}qz}ejVjGܼP "8YO߸v. G--:4zMavg9kLE@ O1"ȒaAV4D5-4eo櫓%>:nLCKLm{a{vqF>ܲ@pplns}MZ4oy]fNukj5"+Z_Ytc31)}l8q0aD9)P쐡X*(%X)~77- rU"lp@؋ז1(7ӘK+6la/>嗷moK嚧 $az0 "@AdDGÇIZw27٪ .lkZxwDءK`>-Zyu):6FfFj &Z& vM]|gnbq?acǝ8rɷ'\}''+I$ bI8) #3+5 +1 '> '6 G&$bDd5` AD y0V[8ЀV~޶/g3v(}ru2LjcDpQk2yʎ^~ stv=XYe繀IsN.3FFL[TLABLNjx;9-;F}6C-^is79eV{$ ) Rb&h3WR4W2)/7DSBpP FDn`@ ,_, c1"0 bCX!@ X"a(v۳<Rpu÷8}>}']Y5XDOaߌq"'.n j<٬hqd68<ZaurR#&"ṠLZ8l[aM\nJ\'.2^^lQA�;B�#,DB >@ qA1XA F�#ie!,f3 Ŋ`BZKܶ_R(y/>4]"Nй5Gn}sr,ݕ3l'*o䢧=NKsD<Nl[j?2A;JBI.ǝ7Ҍ)DUB셗9 0,e7XqFl3lY$ FK^(`I*Ȏ*-f[^[K&E]7 d q3 cgzV H ↈ`G xA<^'25/imNrtcƶwxvu;Os͏{uݨrU\:V>fi2//~va$ٳs/)e8uy<?m {! N৲wOHg aG-EjX1"2GvjDF="dCAiIEBM8wЏK ].4~0 .lw2TG e}֎׵vY<Wб#{szձrv8U=ΛN$/4` "5y"WqnWjgsX+N>S\~nL#eka#֑!#JK%0o_j5  t6YD<%`0 kY,H&&)"!`.ci$7@{˹{1;6o*8?+3\mqS[NW(?bskp[aeƽ7mL=cy/P4F>^=oyϹku|Ŗ-R=WqN櫚4[,$ݞZFz IԆ`%- x` ıj3BҡX yāP+ogKZ4z%IOg1)֟VkbihG'{SYPt6&'J3|C$1kq杵dAj揧ٓgi2$7RÌ*JV&c"+-SJv)S,v0v72R8ni$܂  pADGX#q BFU%4]93?y 1&^=Zh具UteAɟYrޢen1U *cYTVUrZ=')}MV:ग़4ࢧ!KF%* ˆ Q8POGZc1D@x'|}O_>}V [R`ACF&/.v0Tf[ɔUYȒHZqyL7Ng |x=cdl4fŵ^TxidMeC"=\TxowpQ<m;� ΣCD .W;PPHDDzwP<s;;3;fvfQKœOk  ?6h\)zh)/)I:O $?RrrKJ�D�"ϳՕu2:' 6ۑȋXW-cTA޾r^Qx[>GuG)d6g2Jً8~bz yVKw.ۇ eyԾ nFJh8MC/jx*"{dξBEEV Z#^[񨳴+d79:R̀ȢWˍ V7Q FĐ!bG $$ {B){A2*tz?}%O }cx Ϟz{y ڳZ?Ծ_V 53DS:3uAGm?[v>K'saXI'[_5g{V$"x ND,mQ1z~ڟ_5?*0-'<VqTL fBқMRWS6srmk7YKy F+)P"B{U`(@,E} &U!|ĞAR$hlD)v ړf9tp_s5)隘Wl g\IMgBbR/^N > 8Ν2VRaT@2 >Hoad^]sTu' ('U6o0cА>$ڱEa019[o}[[/a]~+\[c>xxd#0v&AsexWLԭcGoƶ�"%3qgc[~toj[^7W@,ˎ Yh!;q6A( +Kc`D0b>!"^LIXJ5ƻ)͚t|2;pk<zoYds`ݡnP^j+5֬;^wH2B%z#=721ܣ5j¤ +F2FkI,G[֗ )aD18qvbAyVX$, w,f먿~s`~IL[,K2rʋsǾys.ڻDj~B~CS%vڣߜ\D Fa팖d_v?)AfKP"; 1҈1H w)=+²ل޲ȜÑd=ɠ e%r̋;RL~)/}9zsooEQ<JKƔӂG�JcϜpNzr rS/=~@ _<0|=\<&7{e^+h *2r:e .2cCRr1q|]mLО"ok~[Ch^5XI YKU'hRljkc%-p FBʺbZzbz$amEtN20X_ 2VDC~%vVQ$YB,ʗM e- 7=_i3KWa2tWp==q ^Wq XC"B0L_?$8'Ov"%)t >#u=)`"ޒ0 Vd];̀2y2 11ͻK uJBKfȪs~"'T}Mtr) =bt\nͽlS ^7@sIi\裷Il59�véxV_ \jK+|^gifyҙhUD1E^T$@\ȑɺ\�F$Ѝ~YOduɅ T jc.&[i." t<?'"? |y"C5I M{".2P+ AX-A}JČŬڐ6d36ši`]Z<\䞁2[ZZw U;e2J^q٪R%eJI׫G-_pC}$UscIz`:]jH`: 1"x ]yC!)T: jkNu@ vM@qNi֎g]< u3UԠ%G.g&71\Jw6 1 n& hLr$O1&;)|f_YKHZZybal TiA~bbI W?ܒʸ;@e9" ʹ9 x\΄?"ZD~'%( 2 rzQ�WÛw޾*(+O=Cw^}CjvYI5EtxUm [cǠ#K[Ė+|dGw">=QF+I(H1Wҷds)~h*⦋oa,4}ږCma[[䞷>uBޏœƭ~<#SVN:IvPuo8\wQH#H`!a!FX̫B0# !JYPX }tfx,�N'O: 2?$G++!fUݛbJޥOept` ׍q%h}={W>N01XF)-ȼ26`z2>Q/?v^3ns( QK)7鋃}yu²wyn‹C>c6iu@sq} 22c|~<r)[XgQ6bVp, ?: P(?LFq ٪IEC??1E*w'42-v!}7ļ/թ2ZN,bI1J{] rʹ 19g?@ހ(:E B‰bı"HXOH\ PHB~Β %fJ nM3ijRjpZk/=mةҶ[t]pk7+֙32uZMGA3A n{xI@:xHL>  60bD1eBM`.Ī6<u4�<vN3|[L^iVNqQH9Qh݂R&>g){^3i(˕ e՛֞L" ׅAcPD>20e^ R�߉Ii-Kϡރi;c8fPѨl1}1*7zl'<¨vƃ}lMRA6;'K.dD޵PQݑxT2IEZP$N/ eI/6B,oϿz:ɷ&kT\ } I*ώՑ1q%φCz;<k!Wk֔eD?4F`s *rl]?zpIeB!g& Q]FY+ljA0 b!H $W#qo; e=줝,{[230qAϙdmFκo2q}N}l#ķ pւ &S*'d-QIAx=|Xt/A"2"Nވv+"@y"27A!歾/S,^$++((x]Hm�Ċg[#�d/:ں5@,*Y>4?2 "ki ct@ИxSsKiy} qw`<MX!ZGAU|}{simE9MsqO|̇:V_ )U3%b~%V;ђw&"e˹ @J,1x@U[( S1O-pVw.j7h,-s2a+27^T(pŵ a4NUVAECv̖]#Օ5 Qx;'uҜ#e-iL싆&w- 9頣JbsXGI2+ȯw-CR6<XDX(bfE+H İqګJ \/.lj aoٺU= Im#a mHXNɵ0/FZ?9RƋD4BeP.K)ħyHORcQ KA^G@ caL-a"ߒҜI!ЍX: kkT~mU'HWOW}+||ܙS%Eg!^Sp=+ hO@$*pb3}<v迤S}?� "?a a/B=$+!!5 <I_d,l(PDYU]%f[)KMk8{#da^R95C-1X,ic@2#�R0m;[[]331^QozY]]2\RRy8w@l-ѮEY.{_ ?\޾+3,}@D c8(/ I09 ц5zkq:X1ju2560RP"u6ۑT]j}qd ̈B6TCIq-Ə !WM--.̇fQP||,g o QR//f6Z퍥 \9x$224r&4LT6uPH] Ah!N< %Ha{D`FHaT1f# k5UⴵtDI8}=Ҷa${O֞oF[u4 +%$1dN2!D}}@n߸.//r| >~H͋Fb^KHHٹyzw7WÔɓ`qF$ʤSKul0e՞"!))'X{^@7lӡO> 4B@[\*@,ڴa=,@f>(" aB8tAj00N\ *@Lh>4@x ^OU*;a}{jN\oéoǐ@1k\F#946QVI@8y'4E ~Z,k+KCC9f9qBݺvтܸ~E\\<=W¼ ttt` @HX+@y!$ᗆ€8Py/E'J ¦  �(!kƈɉTT՗1wP쩳da'iWX#6\ zBJX_1" SL6Z4Ǵ^s.]:w({I{-M|^B8zP o̲2~锭DяB޸r;yLX}g~X;! "Bd W@L(/@ ~8A.pN1!0 CQƹACgROYׯ&VC@v`%1$#!?Hb2^bfNljJifO'Y6C#d"c "l#*->nύ=tgF3 hci8dD @VFa9'9࿇v̟;6m$W/EGf @ KbɌ-)'{~I?}Ol[uqkR2kՊe#_?�D LT#"$0I$+ D59!iiDHO(A/z` )E!EaHCo,$$6Tn.wze^8C!ix/dCHE:/10"k4!JfFuwq4lڿ{]ia@8?l>Ç,-ϝ9`"g*\3Q>󶃒-Κ~@;b*s[,(duu5# � B:d)DQu|V X^PX/ I@Xq+D KczcD@b81u1PH/m뭍tw8`p/Oa;Wa<I\J^HL1DU8dmD6A@V^Z,3iclMݜnXj9w- yy -_h0SAo{d W@LԖ6sW9w N% Rijq(/S] ukV �#DX^5VDHE]xLO!'VPOpOp//`*g[Dz CX)%!y^/-SAH^Hho%$$ e@^QVR,G 26$Y[̛5MX,vmp#}͙PUUq5٣{rrlQ Qcdp*J ܤ nEM(*)xg_O/]@f0"#ˆ aD1,$0L$ $ i#a:2XB'D8HU!ai$/ljAXZ?Dr6 e }eGzd"%/0'CMUjqBB#.?Kbw@ɩ䗑O>>:R?|苧O2Kșƹ ^"5|JPYgY< J^CD^|$Q6\VC@~V<;<}1C"$`$zb! A}p p8;VDJ`D&DCLX, ,VE靗 "^g1kU;mxXZ(ARVRHN<_EY9/#ֵK> E[7,ȑ(Wqc{_IiY#擄O�83%+TAe̅kW$0�D <":Đ? =^ )JxdG�'a` !"QV!/Wk)%?>ǽwsuճ0/wf@}='pq~'<\`.g$\OJkW-%``�@@@@@@�!( a *xHŊ v@,)%rv% {H9�QQX*I >wJRR&܌/Rs%E��mDӓ6NTbԀX^\_]pFANbDbaNqo?_J~f QD� @dD) FDee�"+=ʊakUDZZki(+d[r?&}?$|PSSݱu#v-@(IBX T2|,pA30 6XaK'S 3 b¸NeQvjMμKq똛Q\QD� gQ %Dd3VY 8H+À#Kp B¸kZ}_R 9+Epg&3]0wֺ+2 3.!�@@@@@@�%p$ xB8d/%,d"2|L<�&O��8 X(WA�� À-,,:9 ~-)UiI٩K IM>Ӷ+ I �"�DP, Aǩ )bI*V'%zaV hD�� Ben NIHḏšx<Lxd.KOt. byqAnzҟW@Ӊ@"tXzLHBPA28<O u aZ8!42@>D!,+E@,>s}NZbỳ'<S ͣ b2^ 38#iDXx, XHb Dr$n .b�|';5!6O3ZD\?`끎#8\o�˧\`sғ>D)P'n"kdJ~&9K~zR^G \R7'u@@@@@@@Y0Euc;��"�D �@@@@@@@@@:�Խ; r2B. ܹC A� .z;y̛g5?TZjmMmMu?Wœߺ|�"0`?u 1PUYYOgMuϪUˋeEy%9YE_b�=@%|; ܹW-@,NC@7{P�D`  Eh_$Γ"3@Ǻ3O@}i)6#N=d鼺 VUG毝t:ON�r?*+fΘN M �"5 ԍ]Ƭ򥪱AC_$JVv ޜ P9A鯪:9Zx_W3-|_l`X~mȪ.#z׾H:D''@]Egu9Y3f\xڔɔ? :fVtL4^�D6v=J�ĦF` ԝ{ULU'16]o( 5uDd!v3Q PW c]N�qYNNl"3>;M'qEj9_X}D7cHօPcM΃S!Iv#wV÷rʃv4PVO� dJWƪ -5у\G{Lk%-N[" Fc}w?p>;c7 -{N҆zvR1lkצ2#0{j忨x,#Z͗Ns%)|HK4?j/=Ɵ=Qb^ѫ-Dq|�eFn!85a7ا8p.l|J6Vb&i5Xtim=kck5X1?mcv`NJYxvsuu5{_�8EE/NB[�^x3za~n$s4 6RÖ7f+`_o]%ס&hdhkgs0X?o`序̀xkD-Uƍt2P$:M7gqn -7&NNN?@ "_^{ -S(Y:!;j"5`zRzzJ cD,'sikNxlsp Zw7e:SjсtH&zlgg&]ߢ`hE|�bL,7 (e,< >T52|~Cl`+Gs;.}זn5;[ށ9nښ[J>I,o)L|::$8ki~凜*c1O`e^ڒm? 'C *me&-;Fl<RoQw>ЃIJsk|,դU\F{I+bX\t/CAw;Y "6&lBv+7F3jsbmM ڸwSjaDjV~mh(J~t9T!z^/fQyC[lKJ먙A]s?Q>iN #3xbM:wMb.roW@RCC| 9ZɵM %|VǮ3CqعljS}i" ,WAz"*""ߢ+'D o*i|j"+hU[PN]S-݅G]ɧ65V]ʨ; gd0^!Ut~X^ћ?q^DEzxK`N8봂b4�B(OIwn*n'4%낗3_Zݟ.eS:{+INVW`QTf-;DS R2#c^{ɕ#އߕvH/ךd<7mbbo_lW]m躧<ː{/|WSD3++ #G <l풢+DbВcTX2+ R}:xM^s:M>(k-7% Qv> QGɂG J>m@�j�bN#_v@|lkȧ` 6f-ڌBz~֕aZ SL2jge 10, [j[AvpF+@h՟jgD; 5A ~+/nh�ُKQeC2"7#%Bi< wKL=:}g'T(I]l5Ǽ6愶$6!gڻ7FmӜ]hH8?֣w>N-QAJZ6Vd^Eq>[ؒ{BqgǦ8kp,GTĜm$¯OSC(y-HƈzM&* Ҫ},m_EwKl3if5^zIk̿ )gyr21I=S[}`6#,=/rrh_ `,5-O.d,qʘ=v A%a6{f{Q:>[Aq\~mD3MZ·3~1nɦWgg*ybU|LmnZviD�Q6Č ~{4Z*o]<a c\t |oI* TqnDmc3w! W9: +X6"ª"hĺ-n>%y4r3 ay�"Ku 5ڄM m!7x"Tv@lb=7<dѱVs^dv\IIAa^z'n 3Y9 CJRh<7] }譸2XYˊn1Sw669m)h'gm]箒i$SbCW/äKSC|Ԭ)cٞqx -LJ/Q 8Y(?j}o}NHz}+IElNHW]^EaRYiNa*}</L^Z/5&&suwcE) QN*~1 }ݳcSHҼ'E9Z) 3mDNn4Lq"WST,W*f S, >WV/clMe֛}< {lSČkk7sa_H-Ox&>wd_bj=Fÿ#"pL%hҖڦuB*@ׇ^.U|29ƛJiJhƝvpu9ny˰)2ĬKȯ`yG=v-:Ĭ778֟[ 17L ?y"O)F#lފcy^C_(E[̻᫢7?2,!EFylHW�ȱv_j`0)8!]9m|<oJ&zWL)Ǯ}Eҏ*zBX|9[75MVeKt-y3C'򊓵( ܂,q24vꤻi*FJ},ZQkxP@;$XI3YO|&!J$Q6h9 9QL}ڳu5U #^j1AJ2Z};d-|* W*Iv1jʽ=HSʔI^*cQUy{j\ՆclM%DvbDg5w~ÅQMukoH>c`<CXGnldgoI"*ܯh~T;cӶECt Pi,06OfȀ cטM\uv4/*GޥixӘѲbSCI|�y ɘc 7@/+X>RzUGLw cПaYG!Vi6I*, Vk{35[Ѝ~-!}Fˁ2.g + *OPs5ÀX(@cڗ 8EWND>{hUDq)99]V·8dtFxfln!G&e(sƕ<m=#ghH: B}1 ;R%˹� )ˇzyG _At3㡢0󬛜(2GNW@̹"?s&yCe9îٽ"H !<+?@VmD^>ͽ"9˔M&[߼|H{'3Aj}v3RNx8툝䁆wqUUˑtk85Uq*fCW=9Fw"f*9m]ZG43|hLh�W~g>.s}5F"G2ç`FK-|)Y=9OM@$3H[f3m Ϲc[mHAj Gw{c%Fle 80|ߕ1IܻT}nޛ&|*1%Xi]_*$3'-oYl~Y|c-g=cW NA|!<}I7sJZeD }l>qm7U@Нr;9#o.*,Mildݟ0vuo|_ PdY)gMt)L}:]ShrrvWQ}|c/g%: vENoAd`UMJ~l6aX2͋_e|h!AaxpVSV<v_tخ_ţ` X[C9/FLW~ 柿I>6%pݕt٤l4X]r>wQ_W2Z~Ao ړږ7h;Y|~ ciS)|!jS1ג-h%9*iKZD̢$$w KvVt3=7ԦKf'YO|JC_?Ely2Y)g|D֚q77ZcG;))Ra7Qh٩'@̵q@ղ%]׹,Lr"W8D f95nEjE׍}SܛN�&lV"{7ۑ6 >\L'�Drv{Dox`ބM]EW;HuAa쒼 U~x*z`-Ǧǝ-?6然%5n(D_/ϟwݜEݘw1/Z:@d*sQU='^ "+N"{u٦cã>||`4l;3T`^ǰ+ f"3ً$#vu/I>5oH2Ƭ'+ dD2?R[߿`y l47L*N?M M ~ tKTD #2r|ey {WJ$6w/z1_:g!W V%H~UԸ+}]w1wAq\͌J˚ـmwҪAt@,&gGw$fg؈zQ])1G۪*(ڌܸGMiTd%3~Ș̳0 2s[MlAȧ6愶%7z?Ά _3n֗C yWVqVԥeC,A ecәbNk~s3H&7o'k9@Y† 2hXN>[CVE`wHlE:[[rB;sgٴ|)/G3?ZV+..48KZ&\^_[VZNI~έ.7GUFLA1<3K ʏ=24)H[2os"WSGk$MP][mԸ+=]TgA\ /?InJN ;A!�uQ| H@@/"%/=5팤Cr7?uB� \  _Ģ܌3Q PW c]N�k1Γ"3@Ǻ1 ֗Ew5%ikijYB[S~/W`?#ϝ 5MO:^6X{#]I[So3J g-:&:4F^q\3~\0-baNZ{DkI . B&´S_v@0N٭47ʈ~!zd 7ۛrĆoFtB񝩆F_W pFDK:Nz�ya=/+.٩k_$Γ"3@Ǻ:sub3՟jZǩOG&X;:9KByRsgP[skks 'b+T>Cr\fdQNΧ1d\eC7p9c ٯ/;Ikso:qm;т6c1W@]  R: R٭> fhg4z u*^[WWc5;hǂS-WFQpw4  i<B6Bmh(!匐~D5s;AIr7h0ߜJ$y߯0gH<n1M5 .e/ֺ BCƚꆦ_cY_G<kl`J'y\4yn_ ]Yf3y>>wiUp u & SȻZ6\:jvmŢW0q?#bceL#/zo8rЅ�13K�b}IZWpƲZΓ١{λ.15 MC 7@_A{j\3(=9"dM̑ͱ ff;J%񊶡8=̑4_X[�uk@+~tTP6TdUVẇd4~d~_ckS :<jtyJ3; Q2bb挐5]άO/rÈ *2ա7gL}VZ hsw&v_ƺV"0`og�k6YDu/:$%0ՑCf8_4L=IqO;+[;KaCx͹r봠I*Uڥn&Vn#Z-Bl&mwvۛBO.#i#:V1pi:&$mM-ci_#O@r=#gE]zs㯔g� 0`u@HA9\G?u_�=quK~k UVm%rp^�ިT^n{^ H]j,IО/*s2lťAObuNN6ffӂ 6W֝73:A]Mw2�ĎTJ+ Zgǧv͌o`״HtD£/k5J6k0EIݥrN] 9ף-ʰ$xZ_xm9urPjam*1--j( .|m2h> /񊧃߿y5e@dwib)_}:G* >;o2Ŷlg �"0`�WZçw蘆cq_xuVz&s»wOss\̶Su�QHQuˀHƪ @W! AڄM6zwQDQ{jjk:3 _]M 9]ZBljjrRl ')u.d>W֞v�"�D`�;[t]Q!EӞsjbdGڮl ZcITtxz;xsUŭS./0UA;O9&wl]ood]w^BTҍmuSCe9 c<"S5*3ے4w:We&;t(;-$b=iG~(NjQU:rGfsUqce4] PVubcҤgߺ (؋UO&-G+.J~~Ze6 cՈ�ѢbxUe.R\MM<\ (}c?7NG>?.XfQ}pt'M=/s>Ɯ.mQOvkl9eO{8sZ !Ca,÷':&U�bz*w^en:qwXG^'mmNF7jQp78D95@tE>ͣ2%9>wS? ;% |HXuux= oӳ ݕTåכ|S+ttE7TD,6۴'{}Ic2C} 18* 5S$IO*Xr[լ3�mElw;hy_*mh4 rjn<|Wnٯ j W/R/>FSuܼ͝=`XC�\)o̙~7| [`B(>;?;1?c-ykȭ-j nHWp0ˆ1MWICvS|J??0{u�@ �bcIljЋ!T{)۟m6nk/UMֵ\74^akmi ED?2zgQSHx֦.@%yS).п.yluy<t^9M}˂SԌ@g OSJc7"֨vڌ4MHg[IGȇ] Eo&E~OT,7ӛO"-uy�"ԩygDBMFK. ?^M&"Lz{?hk>֜7mQOvwo8XmM;lc4tn5ڀu<v�uWu@l(I$jDr&Eoc'Tkt?/:4q*8=Ո*Cw)2<(z FSJSqϿbvGbMmCn6\&ʃ/7pz~z#oS- }u""̇h-| R4H Xd45 #O%*Lg=�MEEn> J& EWyj<�Wo諎hEQOA0z9 ,~@yȍƿcyh7x8|3Ǖ<Kewk �q;PwUb>Y.ITm3A1U?C-V7+,g}cӏu"h|K ~S"rYDEsȭZsJ%<@6pm葅IN^73"'UL< Ůbu*j!utlj5)a]J(\=kȏĚO{$^x>WO<Ru9AnD*> 6O[voMRio Ӱu*gžכ񲪉Gut@]e�|CI }Hb&jAJQLRinj7X6H.T?;#H3^8@;OXV3v T2x&32oq؅Hԙt#07蘲w[�TVźk͌lB ~Q0x@" ⟬Q83%dDU*}$> =3)D庼y^{2s<cC\Z+ )bf'H3]6j!Gw(Sm~=6`ưlir; n:4=GsMjFܽMU]~iJՉ=U$g$~I|vettav YN`ƽB*|H)D&8$z< %řJ}R; =3.8GIe|~sI*E?*+kїe25T/6%j vcf~^Fl؅Υb2\Ӧwtݍa7[RvyMnTMU4?'oO'L�~꧉ 2s*cfuVTYfՍ!̈DC{roW/=I{uFkf$궻4Lʗ׏/,%3 Sf_ _|CI~! n2vb "Wx]V5 {ɯxW[.g0X:RP:zuqo7uWu'7�}Eng<Xc�S5ҾEpk3-觧kdo$q~n- Yn9lM?[1-s~hj66?̧ `xe}Wޣui;ch#}Du^ 7\zVy,ah.( 1XEk^YJוF5SUR# ^|3S}\sʲv<&geU_jX5tgO2^g]ZIrUK"0e5,sy{t~5S27ԴDڄƲ[hED"Sƣ-j nJ3`hGc5ʘԜ W"h$瀸  j#o[YPG"o(g eFM~2s4bldS9f9x)7w+9Bur@iI'TJV^_RpoיyПti`i@|Y7FM$94r֐FkS�"0`:? ~Zilw>/]: kGi@1~y@NZxc]ģOY >sjSfּ^[7=%t]wT8yjj樃$2`X@ 0`�k늇&~Z˼3hTG[ʐf?mfE!tCZ/6;}qI=WVqIM 0`� 42 ]L\yȖ4f|MӋt#9 In 5buV覭W [qF7䳫%*k5 |N50e = 0`� V7% 'Yl UFϐ-43 ^C?jUV"7kōl5e˲T,G� �Ķf<6l:1qE j J:祳�+?}f 8{~ 箥Q-D6e.W /@ 0`ujegORbR޳M,Fߡftes&@dU{%zȂËh#%)]Q=g�"S@@�D`�mY5W6*� Im>*b5Othn9!ظ{bd 2 >@ 0`�/ޤ V h`G9˚MfP *!fܛeݏ Qtb$ @ 0`�K�  0�m%@@U�;Ҋ?Wu=XL]@+M:Sɟp}mOtt�@d@@U] ߞ^moK{CDAb+iR3 {Cs=e5t<וf+ã"Y"S6t < l_3nNZi4ᐳxpIIω䑲 [eF4}ufƻ)hDf鱵*n~-K==Ps键g�fuWu!@,0MU.? xzĥm5!OD9yYV\;`Sv`Ug|:,dt%1bin(ԞU'o>%C�QQxc_Mԙr?WP^f+(ֵQQ(|)(kWĢ7gH8lB*B/""( SrvXQp RX(R^TTPCvJB�Ay ݙ73<;3;L_P7!fך _bkA+"qz蹻O%qbg{Ҋޝ/ Ac\%�qLxg)jSk|ts?l+",H f[Me_؝Ot8^w g_!S :[/`k %hQK? terU JZ 36TՍ�<NQFLBB˨rϽyz}uyϔ-nZL? 닚 喀TAE\.Qnr38 Zo3vcC'O8M A^Ug=!'!g%8FpK3MxŇV`Ƅz 7ſh a#% 66b d 9Q}UvIjNĩ!?6e�1#Eں7ؖK'QUMoKhG;l^j?ރ dMI-|^cCmα1I9ʞdD/7&sCџș$bn`ZdRW6+%y/NX"JqY7nA2E)ȨlkozʤK0, ˝_̥>${³<|7^ #hd \y% ]P?U&TG0'Xgea%9V\ +?dbNii nLˎ$"J y\UOGRi[JR6lp\·76r̷홆h!"A3;(Ut߿n↍%�73 wmEpbN^5fJGcZmoD)u.9guvfMꟙMX>֧KM٫ݿ<:؜}݌?TH0< Ϋn+h7L6RI2 (VwjÔtAI~T谘'cDY4$A4UO3a㦇EnEpkI}1X/eA5N( ٰsI~~Cx)Môӑ^{sٍ0q !l5@4WgˬՙS�1pо]qb4TWb%C#=)=$*IzVUjxR?:' W[ gShOGt4OL=_pcN&NRMl`F4TYKÝ;2{SwhɥTD6Bu+rо`lGDX{\mh:摂6Mm(g)ڇ7އjҝF ՚IaX@{`+- Zd >Ҕ^|% J#nҀ8*{ҘC\=XįA}Z.s3k#upQ^T Vcn vG[\9 KD7bD:]k6.ɍ^Db_𐻞heD)]ZplzE6yΞ3�1#@ e2lt1_`N=Ivβ*ߛvѽ#=�'IMf68-v%soO?::3^ޖtx~auy {[ѤҼFoSznu*o=ӓy|{ٿwt~vAQ6eܩbL&&֍}xoy~eքUMw lds;0)fO&$W_GiڢZ9Ili,R) rY$ڜ}iCZ :#N#nü2xġ8\,'ObH([lCn X"$\><| l |[ݫ-6~z9`g"&{LO)/n;"-tДĢC(9yG-1y-#v = e-if%)A߷ۍii::QQX*=umm]:}^oֳP uY.%(f鞉64=8wR6}y[(*"%zwŹj4wa8tDtT_KIou=e;j2s0kո)7 ۔Dދtr6}{IŒ@_ N%9gyWiP�q\\OanPߵDZ3=Y<ʏDS6Ds\%4S_͸%0, f� ] 6J֏xRpD^ |n\@,=bN1=ld@:c s^$rwArY^I$7zA?]7RFTdP$x3GJFFB�'O>3af'>z?_ʙtѧz?G멨ntU7Ujioq&»6ƒ_7F}$ƻ;ݷnaA_O\gg7VZ73-lXIޤA#p._MP[ 9xcӘy |^oTAHK{yě*tsUbG˶#G_,2] !(ك:9.G h+x:^hI&L15Kzmnkwrf%lns#:gR9>KD{" w!(_5ⴝ[Ļ]Ha9 2!"%,&�񫓂5J$vq;)QLʌzq3U�Wq~ 䓦h73�34%ҲEo4i ө7U 49ogՑm^R[r:$K*rTK hA%bCIY񇗠e n\sɉJ#[)!?}-#k>EǓ&6&ϓ|{R|H !Y!C ;hoDEsXdr<bޫ|۶2Lӄ'ܚ7*ׯ &_Ǝ胞2myc2 > [5۹tpFcW=>ЍEY/>-<ƽJh)5pd#w<ܙGAl=ltH z\a[3Hܻelbl*mͯ98S<n(fy:Ƨq35)eLy"k]sљ,2e'AIぶz l=gYV op6Un"A׵[z0u۰7@FJ#\Mu{\Km db_G׳)<_#�"^�"8`㬧LUpͼwOYޱH"fűtYM?!g.Evpwk=hM&@hYٽHs>T=eW\G/~ l#|[I CWC-&"f.(y)!?|Lpvʞh/G7k Lf+:P]6t]EaF_Iq9edխ[2o7:說^ݶM1mVc[0@9[E燨N]dͰmyn Wep2"vP_hiKe;o^⿞emLOL[G>$]_;ud]�MZ wfD%7DoIaWxK.;wөT N]i]-􈓞'w]u}kF _cmY=,r nyܜ-DU Lh՛i+^ J['é-LNt26ۦ6zgaPp?PGĮJqM[p(fRU9掞 Ueб({ʔ9D�"~jD'U)˹q K (3[Q}__.瀻c6Mild'֤kՔ$=m0GJi8 = JƊ =|pt2RQ%/Aq,WX؅p5{:LZ;|v ;x{qtiܟII΄Tؚ Wį|͋B#=L@KNΦp̥3\gZqLM @?jRm4*Q6rVK o^u%x|lء7Eȗ|`okT<w/ @ �qLx3G,miT-= ]o3/NXxuue/oj� @ R<~W@@ �� w5�D ~W M@\ �"�P?䎂@ �"�"@ �D�D�@�� �O|yG}teL]7h]֊bvJ�EH3�DĞ>LA?/){luC4rXun׾ %'P? SrK5Z{FZoe;eK->m "z4sU9U۸+ x_q;� П ݍW=̝8Q{ ˜.v~;q{,LVKn�'ǬQMyXg/߹|x ݓQ6'TsT&O|n…_~ 秮RTgP.2 NV; (=/mw�QPmK$XEKtfm{4c{_t0@qi̊Fؘ%ar]szIw{dfGxv:J^@3tٞ 0r"!DuZk]a#*zmxy/q@ߋ0i_zQ묈[m% 8f~g|ïSq@X&5Q;D[?瀻(`Οs~M,w֌7!+ߌ?~5ΏTzSNc4EI^,�qG4v⫝̸\ާ17="yx_x}Hwgh=Rdy68]Ϗ�A? gj?U%@bw+'8 AV۳vw~(9{RvqkL Ѿ)n'pw_d zcUVCCL}Ha MeOkBcwWpiB0^S[rsIJGDy bwk4ejaEӨ&z</rF�N{yI>fމX\(s{+1ە.56`iB'oJ(+Kێ)'`Fy!l#h+^{ΞhG,o{)_lLM}Ï G4v\PfQOT~|"Ȇ[KGϮ'*nu{-7\y,}Bզwg� ПDsDbWZu` yC †ܙĎ,쁸햫Og4͵> g:AmuA(YOYs{d(/k4 qֈ( F=ڈf2p,8B6Ұ}P|�}lXHs_KM""iU՟uef4?[\(~ 1d:HO%})gH \OA@[io'qsZ݀0o#Ð.1݂fYg뻿4_\l)xiF\�D�mi8[ $󨚁^󯿥pF(} ɰYegIvPtD~磕y]Oi*^lBӵ(]Enw('/kѼTI \!Չ2<m=METo51gS\.ޯ7l I;Cϣ #Õ*;9w)++GWoBH}7(iK;XMukq-O}D^b((")N悂gώhk ̊s\S7hKb*ho� @�CS'dWܩ76z*T=YVpDǜuOz[i+J{نWE9/!s-eRFWFbV1"CE-Asv}p#>4DhY- 6�s}yIPt EOeoڥ?fw}.BqU`9[SZp[672E1Iv7!|Μj[fe,㰃|pޝ @ |-9gY'|x h}B_6|_#t[hK6w=ݠp<1loYUCINs-66H߿o<3 ǫAay8YG 3aG/Γ+vVk肭6JIlxS{b/l>Q_8P!>×{:o6ڝC c xZ$I\V_Sr'lժm~ {/Vj�"�t5ηuMFϤ,-̺7P}dÇHFU JjSCPC۩R- 7XXU"m\%#4Ǹy]r}M7  7rIkZaY. f{Rvjћyu--Տ[A4=J0| %1>9dG7rgj +t_J_lϣsFtc_y՚L_r D;?bM]L,Vۋ$U�Q~QERKqHbO\DF?<R^E𴪾ͳ؝Ͻ6 �@#V&ť l�z~7MV]Yi&X:AUb5zo΅Fގ,9XTm69 ڞ܃*TEÎʜ" ^d, Jqw@܊9Lu篻rH#b�<n(ZĨ;;x.{,lg)k) |,9bp]Mo1O#ޔ0ARW[`sd@+qH8E)%ERUPe ;܈nݞf,Q|h)�"⯣΂0.Z+hIPq`inpug#7�D�' >7E9(3AyDv<UVƫ/IfG%9S#�A' tt }|Kg;}|xo}k  8}KCqp|tRXrRy*wi{_v~ԁF~s}[cMK]USMeۊr�D�@�� �"�A �D  @�  �x@|@ �"@ �"@ �"@ �"@ č �@~aʎYPL⾵>mL6?Rʃ*@D�D�⯧G1:Eױ8Ԛ]mE.eـpRv-u:ŋKsGju^ɿfC_XgT(qfMR|TdgIU%o [v\iib~m#^T\4l �  @ >?>N6 :w;ޝċ.>i{jMQU99Y ۼ͌3$ʇ 9?Q2 9x0nB̮5.2[J'5=y*9Tڼ k=D[�'{Y^P'R㈄O+G)^1+ gEwCN\0 ^ä;!}T[q`@lC[ /p6 !=hjAsƺ!WE1ș$&~F% h7<n0 Ț֫.A\(/lIEք A]2ޟ.4d쥙bXl$dx- BPYiW|!%D8hw~w>* כQ=c5CTL˨ra[ǯ`!C[)Eȁ$7Zwi1*kX?PѸuw6'Z{0 N3X${mtUt񶄊1/@H /WA7DKMI-|^cCmα1I9ʞdD/7&sC0F෵4P8m^ylfhvc%'ev@J-tx eG bQ%{k:v'>yܤ'5 }~t_W'sd>)-ɻÞ,#o.aD# :yEEiAƥRa*uo,d[xRpSnx !wp\ 7WSK@U\pUAtOf>}aKEmk6R͈nw%6_U5vxCǘxv~A /UDu,CIgp{Mp9�A �I+bϪ\É9y֘)!&q )k*%_3dɻ;S;ظcK{:>R̯s.KNGU_�o'u$OX#&[{yF08PHE*bh1T�Q|;guvL0Ovk3󚪯9s,ګkq\CqTq/ &y,ZQ- Wi&d6g.QDxg%q}K=<Ghmȇ<}? L1@�"6Bu5`hAJDX{\mhR?uw7MSR74d&վ㽈hAЯ:\_}=`}"d#!sh{RqF*; ]Sn mt9t7D0#p4ulnWvܒ(m}zhu%Ui@D,*+KD75۔JhuHS/Y+(DM]Ƣ7^gw>i.8 4:@"8)Kr1]X[X7)f)+.T Ox2*"@佺⯦4m:dRT+GZ#@o'lCn �7lD'9Jma�0)fO&h$W\^sݙJvwږi #5n2dOZЂ4 =H,EprN$n:s`+%S812mO l�Dy({� � ݼ89Hw?rcA^R$-JuC/ 9ȳ/$4�(Ҟ60,٫*w3& > uAU3Ō6:6UM9UefSL>~Z| ̊˓VDfU="~OQ3Z6^ш煮5_^_[=ISe-%%G Kt\ӣ:^ :H @�!W]a!Z'3=ђLј2swېݚ>J#Fݬ83Tކ^$CAhhp4"3UV^?!4m--ɸhr9ogՑm&,QC؋v])~Q|fa3 W'k"9/f=H8%c ]T^śj}2 J+*ߍU#NXZ Dc]9|2eᕷxsۋ ~Jz˯@GDo鬢k/7q4g{r-[)x({� �$!b]α…ZtE7ǷTi\LMFS^l\tf9Lej>a'6Hos3pIlЅFjo(wcEmVq{Sхz )֫` W(Ƕ r;Riyz<V?P:D~y A,1kW"7p\٩ɺ*#te^9[Xzˆ1']K?՜A`^1@q@@�AbjAt  (S[}{Loa{l@�AT!/@ �@@ �@@ �@@ ��@ D � Bɀ@ hvge*?,}<A �D  @� @@�A  @ ��@/"OF%]֊bvJ0{k/*h<s%<<lI& GߠB!�A[}暨)!b~Z01mʞ�[:i}cI]|DBa~a@ij{y; ٕ3?|n ((9p}eʿ !K) yT@ApG2nd@;Ug1&Y0!:DڷPud2cMϾ"&6�A �mvGF3%=aY};EI᝸&;%zD~7vbN *#͕52גlw}ӭ2%֝ԡ]WD�Vni(𤅱^*/{{;vaƾkؤHD %}=4 2�"�"� /6q r@h)4ږH,h�> ۵ۣrХ#MFtz~Loitw'xB:1H{|g{N4h.=j{m�{;R%_ ]6s8x AG>tG/1F�4z.;":6lUӍP-x{œB�*?{gj w[PcN:Y /,wИgΑ\*,Jz`JA9N10nTrg4v@)~wC}v}@َ}^ g:+VqFy#D>4ǭӰRC\1q߾Y1׈)]԰ 9W #Mh{0޶lu͕QnRa<>Ս-ʰ5~Ł!ݝT�"#BrIn7px:[mn2֞]D-T8;@t:ߗK|ؖZ[rÕGj/d\mr]` ecaOMO<QeuY94tOٗ\<|Q輿>nITviœ+!ڈ֦"ą{?ʒy|pǟNG =?AxZ5{ |4e/ql#S�9ӗ.}<y%֋T<)r7- tՅN2ߔPR[WPlxl{qgkgqO[.g `jqu}uiػM!߾w=r)m}5&dxB@ddp6>V9\ϲʍ5U`q,ax/E ?:[> X@*\|!oFخ1=o{n*$z]H\賜f]b ɡt$?=xJ3H3K-Jk?",#F9+t`AI j%mvѳ3IO}+gdFImXc2phsn0481%L[h \)H@d.;^ ϸJųbwn�"}qfI믁/ "a 298B6$Q4^Mby7i16Y>,-'1qV(ҜcͻXWs^ qG`_K&mdE:[PuԌ2l}�@�'Ib16Pt6kK+۾I# TV&HC)|4:oWzNSbs0YSGOYdNEnQGd́KFlȆ=Of26'|/5j$1@SA 0\3�_g.NN, EQnw>z+}_(t7- +9dǡ獎 WPl OP;%߻^MAHsxsRU{oblз=-5r~?/1 9Cwd/*hD|G;تs;j5|3+.QsMpa�@(#N1KIo>mE6bͺT:쫭ңH+U)N;FD{َW2Y Mgr#܃~:gK֍(z`'wjThY j0,gKJ 4mď <@O +tz0wn"}!)[&zdvH/P})rK\.{;8[/?Cj's ާ ~VDŽ9}#%{o497\/t5 Xa=:�A � 5mD4dGt6Ptٿ"6QDw'J [~cs9kj4)Q***=hvdwoxOgAf O�0u/倊7PΡ]cI1?VfT)vgѫB@LvR&^M11VJbSS בB&Ju// zy|ZCݵіxb] a`Ï TD3+5.wZμmC_/-x�DĞW9ԢmHck;K&#Lg J_f](ܘC^GClLTM0, ~}('iU}ݛgY;7{M4˛8o6"\,y{K*tE{UHvh>b%q,Ln \P]+; Iє?dx(3.5ѥ5Tc/::/B5 qn /n_R{wg:[u/Rҩ@p+m%X3_N8z3K4^ TB4%5 5f5 P8l⃥_DPwEde o&Tՠ$4q~jB�1 _{[@W*2`94p'."LW�"Gdɩ6h? cg]~}COoOGs.4(<4< bPӌ%Zӣm7= mpణ67EYrNn L*hyÙi?&7̻V|Fr=Cr>CmoŇQPנ=0I3]rTkߺlqVcmnd\JhߵPL0lW>"b.ùvmn ( S֞^k) Ys6s[s ]Eڄ |рpa^2A^X?.e"W FcҾ}Zue%LcXWeOBRb "^R9�SK-;AM�D_Qa\|sBmaU 41TFyxЯ؝ @�=n$X3HOK搣%aG.qadzqYemmvT35_#A� �⟨O|iB21g⇜-Tᬤ4wv @�  @�  @�  @�  @S߁@ 4u @  @  @  @  +j,&!;5&*�D�D7ĶW61=\1Ut5Ǖ4Bc5/gWz[iфa`lbYsuɿfC# y�ī?;D)͑LI5ndz5MX5<LUޜe+ycD],[„3tU5}VL��%ƵNqfH�"<*d']@7o{6MQU99Y ۼ͌3K\!@�'cY^P'R㈄O+T PFbWV>D^[2^יN#"ܥ0F- "Y^'6y'h5,  OG(q|�D�DhjL17_I!6CYDOJX)#=,m5 {5(  ;Z6&Ot8^&^\x$V}$Yϭo7a GE81IerUq)퍅JJlE-_ i~ eTp,_{?2Pn_xǥ�$8U,{cj\a&C؈>2ޟ1ңD}bs78:)@OEKc '@6CKJWe7I=^!xܬF+Yf^uўHq9m-" [ Z[ BؔT5Al=7&)YYٓdnhV@DmMb\tNj|ES$ y%3I+*J 2.ܐQ�WqU <y^|-5 ȀSR>fR>U&sd>)-ɻÞl9 KD!N^s7 ewzE20ÒҜ PNgIb[ўiF�+bDjң3;(U7Mܰĩz� @" =?hJP[9J2ʒZ1I榬ޖ|yx9, 2-]X{˝I d\7("Yݜ^:; D^1K";0} DXDahOZX*xL^Ep #&T<;K/gRGtk<\su9Ue3Vi L)aZHN Ffܰb -[ 2 Vh ,@$ 4 ޤ2W# v4z9S3"KyiҝB6DI3t Dl?6MXN:]Qs'3(1ieK;^Kޘ3$}h̑y5p{b@DkC\=xJ% !w=vB5uhA8,߻)z� @0CɎWO1ĺ$75GNUW\[V55dUܓP  %*BYH-c& Djh'b8#M1VT+8La.6g_AD)2lysscRazWDelsV%ZoQTy3y<[�D~I%T%qbI Z/׿H`!z`WzĂG) hg_oyu,8cMd#sqK"gwRS8ߍQ4@T(1l4J H+a2/K"L~ģS̒W~ցhIf-4<Z�D7D^󼜜g}؈^X زҨyT5<}ϑg6da;rbhXN?A BWq:W񦪺\*RyhU S$ k߅Ҋw|Ոv>T~$ tVQI5Td<* *L~uR&BbvQYiу[Ž?1w,q|vNLw67T'47E9ZrqؤKt2j4'BnPM�抽Ҧ?.3DuUǽQvӸl1K&R\ȅrߵ7w֥ nsStf9Lej>a qL,nyz<VuP: V!X@y݋7:Ls_6͍"n } a&CKi| SNk-5~l*ak`y^U?zT{tٍJ}L<w%j{K.{#x� 1 @ �"@ �"@ �"@ �"@ �"@ �"@ �";]``````S�AIĂ @M@&󷂁M@&#)iMUwE~  �@,eWgY[ZZqudOCaYc%]؃uv؛h E/z_q �@$e,C155>/6ʞ6Qv%-2l<iv]s㠡C&tXl7a}hY0dƮ#{F{ვXGB շ]s9Ii.'mL~EM@DnTw)C% !_.Vv;sUՕ,TZ6=2VȏMœ3>(V\*pv[/r0J/+QT8OSR]R8d(YJ*sfDg%,6TW%͟ h=crB (]kM l y`sml=ðKű" ZAȺR֏9s<oHǽ&n[Dv# Hڭ f (8ra˄u'10hIc02%O c=}omZ-'2!!lYd:vuo{0zse2WWTqBUr)8a, ×Ske t2Y׶<`A}&FF\>HV8OSAX|cm]-mG=*rK/\s]#qZWDMVxq SDri~0gB�"4)pU\^bm]M^Լ]:d_Uw~~O_FK&-5%0滽0EƳ˳ď}HޠFR,8ޗL=/{7_ˎRB*jaBglRe:ӰQ oEõLrAOҌ_!~u_@(!Qk不&m$d;=؃5[MDJTOlD{ h©_aXbLԐc4[Plld|(Ϙ#; 4f#5QQZt( _:-}܍}�mxZ0qKuu&SW^3R^/pµ9 0S=|7_nk=ViM10'7_!YvDʺ#2`[H&848-β 4O}NH ǭ==hy 9ژfi1~(<9 m0+j�@|&eDV̬O [Z=^{+jc׳^5&:ۂ@ 9j)t_B.Bd0L_*WWa|?-ݠúB<prXT߳5& r! o,)=0HAh&KGX:aQ3zb֗JF̖ygKvnF3 et\ [}]JZw?ImC\_ԯ^Hۏ35(ʐhnIuUf-^J`sc BpܽB"2#WL CK e3Y45k KcFV%Cq)p/HP8zou;A46dk3]ۧ +E9x噽xe-uڏP! .h7p'ZUDJܟ[8K c#ښ0_ `nE|mze8sŊ@�AIk[[[*(/-+y[]֊&}yKWM*f cOtuDeg*9 eCRw,RI3wVaDݳStZ[2u.9kD4[(g+Ϻ_}5J-mL oB칹{azJ.q9s=楛Md2*n۽hG+)\[za:}/SD}pq=ۮ^4 Zk]ѦʎR"y&:{c@s0@] fxិ3ho]bFV;:c2Ʉf;Bt ) 3?pxYe2@Ƚ ~C)foM=_Lu9@`x6Q5K_]|~]ifTe=i㰕 Nה=p'ZAt@b.u+RE!q<*Aͼ8sMg̲ivTKQg4;v"ܢ)�Dhr�qM܀b{;Iu5v~qɳCn٫~ezoQC |G"]L�Qη٩{ϛCVrf%v<kgGTi^8$+ЖK؟ΨiDkR HC\?m>=98i\\STeXaS"<w遈طxLBMuv$9缋ͷ!=~b_w=Gkm1vdS,dt/!Ь?X4!T ↁ jDut#3HW㳃Kr7\qT&9 7M2m''2/!2bg\Ǎ(Y&.ĕ7,\NQ2�GpEYXԹ%(u0NQH5k8C*V4>Kc.=D`eG\+j@&JY]&;::*߼yuu7lߓ}}!L}<f0/h<X!D~rOH^I6Mx&< ƬIuQr=ߗuB=㟏ծݐH'ahuB`sh:)K/T4KOs ;ÿHQ7ʾ3^"`#[3꜅YկTdxb=ZO}!8̴T(ԅ4Ja} ՙDve @&fĿLS%빵o=" 3cěKF,.J4Ӓ$9, qvrr)UJIX,"mө@Q-Ow[N8l3GU, 0nQHeBtgES=YK15R55Ð\5N� @wHY˝'n >P߽U'OeݙG"[פ/tز"Ux=O<h[tf!Dߦ $OmgIחuƐh=}b+ח:$7EjYE;;yd&b>l?>=R'9&vNύ$Rпr9|CqtC3Ƅ@0H"OO>ߗOh[T}VJ|hkdD % fE`0fvV:P?/"Xڥ@q)t/HPD,򮳁_ϛ#Ge@q;KP y2t_b䗧Te-Y?1@4mWvL|/:B&\ix%[RfxN#:3 I^RYRR1OYE@�A�@){ܜ>^h5Mu_BS0>E&! 3=g3iۮ­ۢ._czIM@3Un EDE^緗݋ٝ?uv>'z§6Lk%.3�+}ˏv-^x}&!]?{cR( UBU RTDE,(^ bWb4 *])"(Eo6 "4&3g<;3w{v"T#K[ budۂ[Y hg_mǿr_1!͵J'ފk_vI|eD)x/[C,=N)!. \JΜnj^Imv _# %'V ; cFVE/$u?;S|t2PoC+.XM2.(p[ؚnc]2ח kTxE{}X5Q!R][+v}4V^e4a]�=/6}Spyt_lkޡhS=Lrƭn79J@Hn{Wt "85}S*ܠ*x>yFVEwlUS! �[1~֙w/w:>^}gOD֍x⥐cA!\e^õu;f[׾Z' % MI<{_̳:MG=:ז0T#*R ۡN[OzvH:hknRX9¥9f qg٪tKڻ߶ŭw2h:k_v_ Ag< '7o-8dKك0G]OP&4MX(S]\+W~ٯE8' pcF2>ܞfB *km3. x:d`7q-\8錍E_ܙJ9(]QAfn(bZf5D0UO=O8"#zy[LBKc 6Sa<tۚ8sal߃4%qG-jXvj�~ ĭz?-ޓoOl[N %]La[wu+QwF| `zA"L'oRU{dԭ&bcAmې"�A~zn<)YKǔ` mA#` 6`o@bll-"�Aq 6` eA"a 6`o@wb3����= �"���� �"���� �"���� �"���� �"��Sxɂ2T[qS&G1�Hy! G1퍕j+=etwmӑ <�x'PWDՌ{.8oF1;VH@ NF !nl2e9Wa-=?3g"�LQAlʻH<k`~oSvDv[Px|jFjRDf>cpNnSz8 qѐo(^|:"ν?q&D�ȫ8.QHdY ']UVWr" /7d_5'j[V?Q_!d7AZ`iJ Ysk"\HQ1^q4C 9DNy3ʐ܆!Ҝ]L$n{4(Nx}&|GֵoPD�X^du褏-CD՚pDɨCBZcnlRǼJ87ufVڥ!Q7ۓD\-G7r9ulbyi낓JJYB3P{ /:SYA|~Ôu4Tl]@| q8/J FDyyiQF�SQyewl]ƪ;͔YG2F7V-@Fi̹ਢ3K/޲DSDhHc@]R, <){ ǫ y3ck@H|`P%S6 A^M Rx5$StFQ9iA`* "-W+u>$D^3xΗ'Vk*{ 1 ` "N`2P%}ەn 8�ApjOCq2&"J<ԩg]y<7HfCWeYDd'l$)Ts �0%kܩ](K-BqН`F;;rJyi+FGTCY^s]{tm3,₈hUeGi ѕᦘ <1B]Q IjNð!PAT^Q �Q9'x*iHo8D�KTƜ Ge=zE7dPAAC_Dy9e\HwI587 L^-FJ<C FA`"n:jwY F}4 $1-3-)"'V7f5V2D44qxTMl?{h!2TD% dc+g1KJ^_[My=Oz檢zzɗ:|Y{ NNn<MHN{Y!^,`{ku6?Aț[AXzij[W_C* �W "?դ^)xMǘx=R%9STϼ``&Fsu2gyJMD@/ Əmh;T}m>Ё^]iC knp/@'_er6 m֝‘3 חkg)ʙ0}Mν]�Ez#x "����� ������ ������ ������ ������ ������ ������ �0ij���K3D��A����D��A����D��A����D��A����D��ABWYleHMD(Lw-+.Idk*eW~M?鬧 &&s( ĶڈiY_s䢁])э=5N>sD01ͯ>0G) 14mZs;F-ޝy,gR].}1'Ciۥ׵?~ $*ƵsOã|2=U9WA쮺nA1Vեk-}~d =]Kc:؊d/[6 >jMH'=lcYʹDDH&v^SyRETUeIhU~{鑜Vᦞq7U6cizGOXCՏt "}/6 ��(D|!ŵOやKZ[ZZ\zӄB+:߭pKE\2C]ǒrc6vW-&DN#>-֊>^J4q2^tёwf*N ;b֎qޮbw-[<A v`OF4<z[T{u%D+6*9{eX5_O;Q-SԮ%*K 㭯%mY-s6t7Kuه{$DiQ8!)t N)(oS`݂ �b '}WHР%?#<M~?KB8l|o3WsNB~ϫ2L 2nWt/3kٌ3X"H6wYmɽcE@fyYןJxQWЂHoBR_B.svg$v~WK)k:۳~cFoHfko~wUlK$XKYW7vk(js~ B}:9bĮKVWsVnىsZs;i`$Iskf~IXBM;"aŒn͍BtvUK`Iΰ8T0;xy"c-52Ea_d:\ꪺXYa]wfg|S5օ-M'CƿʣT٧L1cq1[K~s{IA` 6D{%8cp ̅p o|b޺ 9sFYd=٭ 43쮾+U"ؽz"ng_WV2fu~M١jQ皪¸KjY=ä+i̲—앑9' ;Dt#Y}Ȓ,,%o|/hvt"uki$O؇ʆƚh)1oRknZ!$hHks~VGY-EWW0Y|rM:}щ Vˌ JxWd e\<lhrq7,~#C&ttn7 =US1h7 bv,=\Q*C*Vz %3c9rcVU^)jH8dlSq/mDg݆k̒|9*=T"�LMA|~Ƴ䬏ٯuBJG=Zy!תdsK\qw5O<,㭷֞{ Htįi/X*'u} 2S^w]s˚mKjAޑ& 7$~ܒO1~v TV)/| c~:ڳAs#.g[aXbW`IJ#ߘu]zk'~x2 b8 犓:uBE,x; bÚbIj^[s2cvDYGY:ctXw]d CUWutLpoz 6?>k%BGsny~0U}:kȊoLVlgqDeի>QD Gޫ_ Dd.8LAv_zr7?D nT+*L+enRrx–mY۵VRs[VM%y$({œ$"Ah?8c˖K6u /?. $C=gݘ3q5EP(̊Ek70.=MҘ<+N{-/Ź'2ux!�rXt5$p.&Jt~[P܏7^jM쥯铭Uv2/8i.8Of 1"n ׂ:ea;|rOq#R_pW;}MX � CD)k#F;Tm՚E&xA̳hw<[>]iAtS+œ$,l{G GR;rI 4 u$AЁ 1K;Q03KvÝbA]W,vb/v)-~$s{1ĉ (8+Sw2Scb2 / b{? (NjA@*k$7gkFb|̮h "D_)OA� 'w:Z Ub_KƿF v|Q]l)zNw=PI<smkxȧq7lIWח s-S+vr")Z'󯮪6$Rq[i聊}#}_a7jw[f'҅~xSC sM%J3qD37Rّhq$]+!*uwhmzd _zG,= }ѩ'q4.A3F /BAa"}[n1k]A榤(/k,}Uk}W_簵2 K}! ꪘ)CЇTw0EX^[%7)WMzHeO;!Q A+g(M ֌TKھoCm v^< ӈsΕv>2~k|,bf'=8aks`W,z-wZ_VCFн$U$2?H1[[*mŽkkTWA3Ўh-wE_^5SB| lffegT' Ǜev7v\6X]O}:2%%̴g'4%U]--Cv:MɎg{uԽ>RtK̮Dx � aʚy eD M4f8copj?jAVV1\xK> /(~yxnayy|pړIMæޖ,5嘾pl^sݛ[)AR=2B׳qㆫ`tĆv?.} VXyl|E~Ww1?vyxI+G~4$`,}9W9AkͿnLy qD~?9n-XצjjZx!hb*  Y<ns enفeN' peAz^daDM(hg.t%"kpxֻ (Di/D I[fknɮ �0Qb��LVqw b`���� ���Ge�/0 ���L �yE3�����W=�����0 ��� �5x����@`n$r ����3����)fb���@A����DD�)e֩T*j}y]7Yp@++MP}Joa"s4("�L)fvѣ}ZDA'jv3D-3E!*~4Kם^4)<屇7G|k~rTژU$g⛋4 8b+jwmP`aXM~88Yy3ٹ|Eݷ~XS\Q鎛NG6& F&xy sN?'?oX# 0D�)?w MRk_nwlhdBr܃uǦ1uJW߼&.wc|5q݈ p}oY# 281G63bw}F˟T& *c(s({SYYMM\ɿ2OQ5mAIWO AeCHDhjd�M <܍F&  s] Jg'.Tz1Ga=:�.5d_5 -_N9IQI4~D YzdCN�#*gVW./STT%R?'uQHGV]T8_P7[}:B0Rc=M TIc.sz6,0.b5S27a`b5]-\ &hV<883A3ٔmIBp! )ilLH(ojiZ>B#؃X "j@?G}e`=pw",NdI-qDqFKjFq JnLk_081q_ xBww4.egnCDDDZ2|Cx@n|-TCS5,9R"�L)fy+y `K'CRs ?o6%3'ՉHQ /cX!ntefnŋ:S Ңn],f "9ŷ(+~*p|~ VD)Gg;keQEVF0TwL,HHS]r)G.89 SfW#at/$CQ̫XIS[ߠ8~1̸ѝ$YMTnqckF7-X<B3 J{>sU!8~l?˩c=/Z %yXs mC,|A;:ޕ"O׾Dac 6/)D v&-SbO |4o@q##0~ϣ ~Mj:J6ڗ?%V6]U4@`O1/ʘDjx b=U~_wӻ+{'];StF!̋~)"a۫бqC|mEZ e&yEwv3/c眘E )a1.bȶ1 9M锰5ͼ4*n3uȋë& $">u!9߅6'ne{<x "mMT0#iWZbOgh!F21-1ΚD7\)rխ<K+汯qaXO^^ockyy>} f A=8�kHo^CFhY^`r9fQ]*`7"�DBK?먪b:D\p9_^Xe=0eS+e$^UuUE'l$)5%X?ߨA^4;ϜxXOg瑴}bk$QEODdA`e J+܈ɫa,'=_SЁ'K[U>]A@\dmDQQ?I[b)d5- _A$+y0BJ+>V1Db%o!Zݐ^ GU\)rխ<K +汯qaX?CH{m3C?7}D/# 0.V]U53Ry [-:REæ D�S̼N4\O!TGTCY^s]{teרu)/S1~82AlUn&;!DUУ*Ū^NUvTȉ]]ɕYujuVd='螑JS�PDsxD궑 N] AZ'SZgSdGŜ D. Jnk_vA䠘8|^K ƬC4S[] < wD `w^uֲ )aeKCS`ç D�S̼ '@|%WX%ېGྨ0P%3,gCM1׋l)* QEE@TvLtr+HwUUwqʡS͜OWz~w]UDWO�UKG~FO]=s\3Ť>3GĜ2lΨR3h4(!"C<$-Oe7>TxْAr)f]))q=R{Y4L/M9'g#ռfIA=LD1Ϥvҝ^FT; D�S̜׷<5#ԬOuƜKimɩ7B>5!$3?1-N}UA1/=Dy(jVDlF4{)?-R!覓_X0>kz|AlnM / QEVF"*O)d漍zFVO݋b佾F8{MvP6_+/a H–:CWIc]6?sn}GQ3œi+FF3)ꙫڲ%_+8:~uz>Z~Lf?SڡZ«O;nCFhv;/>ILLK9)x͍! 7r 2 '2q}`<ė[^KJ]6cE6lu3nyi'^u u \[yÕWיɑ@`O1W=rjC xwd}:{<5y;^!Fsu2gyJMڐօ"ޮEp ]m0^sCNylR#5[.-VޜJ=ABX_TTMnF KƏmh2R "D3MIװwR/JpCT_Vҍ0 ,|ߟyy\H~LRq{*=*ՐW.եv1fPs/d'(hǕOn`v?{ӥ_s6nuJ p½R"Sڗ( ^c\AM"uq!-aսZKCLQFzMj "qe"sl,|}!-y,xE;}E7 D�SS�ܠ_{[ w&׏ι?A+eWʸF&0Q�AI><U H/,R`|*b,@~NG?tc)<RF~cd ��S̀»ltUD �\)�"�3���� �L1����"�3���� �L1����"�L)f���/�Ab���@A ���DD�)f�����0(b���@A�㊂%ݵ(f˻dGWYleHM7T0n5 kR~<ȏ54-ƅp4ٰP`s dĿdGу=NFʂnXNۨGnd/$aR2ޝy,g[wu .ˉKOã|2=U)Ohi]y<~-*>?BKmƢmآtW[ %U󾵴w!Mp9g? uuZ6 vz WĜXgk"8KӶKk )Ϊd3ˑ>dc,H - ---.M =iB@hnAdtܲh3Ķ*)̎ ZzAۋ.ؓͥuu%D+6z 겸!KXZ̊:7bwKEaPWed\ߘ}ϓOۋ.:R،Oىa'Yڑ�a-[]uYxCB6{k.@%![L!i6?γ|}MXKڇ?M=>ߏߝ+Z[F]6IyuׯIͭm.՜Uzۆ΢3|a,6~Mٞ$lC$M7t‰޽0bz>Zδj1Bi ;+d%ze7gz}Wv"P1BkпhZꨌ_fK=#D=`fUlK$XK{t}cULaCPQf/^dF:심F@A)"s[ą$I w=d޺ 9sFYd=d [He&ꌣVii_zB2QP]S}Ў|5A7HfE$)E{aqY|rM:}:zZg#%Y=8]< PXS0"D;6iY$W<lhn\͠.o&{۪_N`eFo4hshfYecȜC}]`WU]|(ڇV=+X5eGk N/>ZqFrCOߴBH< «(&.Hy=c*)-#Lz ĉ?Gm/ gAB8A[ V%3cՒnx {/Tu+{—(3[3?'.;hka?В9qӑoLw{Z[.= GRdV!ʎ'ޠqgB)hn]8P,x; Jj%[ފUyՂoC|4 0mٻhR& *'׈v} 2S^wJ!D FrCў2N,wĩ(&,Լ^zdS'=DD`ަ >QWͷ-}AS x/I=e9m`We4A,WO]{8ؖU?ƻQoI {+ Npڲwi呜^"9~_)/-ߖJ *+?. $C=glV(LkKr2h ̭JO9bOW~wϵHK2#xGW1j-k }HX B2A8 GFpD܊n2b*\@=HgwI ""0E/b,;8O'U,GBK/7Cjw"5}&M奄:t8v +"aiF#QuPY8v4(-~$2ҡ]H7tɫiAD$AЁ 1Kڋ!ޱFHK_L1pYh^A `#yV-C1-+D+$'#�Sx{ m#8L1ݰq+J:`C sΗK{?AqAA O1ԅUWlj~2+t%_#Dgya(KwW[JI^}9d7\b$1Ŝ/9Ō)5!+ ktEbN-Lhh ϕ(>eJ{(7Ak\j/'™B_UA<@ ̿X:!iDhZ]{ۚ+^f90yYrT)f [;ZA^fɹIW Z_‡T*JfM f1Sd*֮+D$G@A)"Cr_@ |B3JE&DѻH_=}rkn7QG~}[ *YUC*\TH`~9,zH J[q ўPljtS{%I W秣3H日p 2̀4TKھoCm v^< ӈsΕv%~1Hֲ=~_\5_3%DW9sS2'"]ҵL]^qT0>o_NSw%l" m kkk&vi0s&1t;*YNzp[j2bR!YYY'UdB'=DD�q" nm/XjXklO1Li=?VK k^Zt3?wTC)wps+x괝_k%wc f `O8R~4$ȬnlU!D7ǖ葉7\S̝eϠ1\1s% /~r\[pLqմ.񨏼N_a`knrnlmñv}oLuW ۬==AnfpIJck3(eodf1e~nѶS#Lz �" K[CɈߧUrf&iލ*�72pI�@}]?x9לTսySl_KðZ6 l@�'=D��AHY $S4[ `HmC��AqA�D�����A�D�����A�A����D)D{����+jp7���"� ����"� ����"� ����"� ����"� P_51^:V`C} ,�L�@flw4u*)SE=f`«qΔ%72HVB29tm#Jk$Vp r ΛQ1-=?33VCaFtda*t M�@%iʻH<k`'(9^}}V܍ qLKV͹zý,Ed?rSZE>+-AB[]͛2OQ5mAIW+Pܦ&B7^ ��("<*NK8 +j>3@K'͆ ޶4ih+Gp;^sY%Wc=MIp1bsNQ-Φ<XNglK'Ms^w1=p[.մz2Ag1QYIgrٲ] M: MFK ~2*+/l 8fO'Tpk"\Hc6%1Zba)b$<`%dE$XȒdWqeylYz˳9+#ӀjcB=f)E*"�LIA_N:tǖBjY~8@A6#gUܓvdHTjnaͦd$~N/nOM=X.Z\'畔0<cb6f6QQĩDQ /cX!ntefNI*aw{;P}xA�A6daoB$䞛b}5c^z-y(5 -OneC|̈́̂4%9Ì rd3̊o-QVT&340~.BZcB/~Z[bԼ¼[W#/-G7r95eQ^)i)"�LEAݱE#Sn4SBflP 6z"f27/,YEkS\-K,lA3`Cꂐ!6Y{ ia\/ھOw\yɒ%VIۦ!tyq|b "" ?+b켳f-!?jh})8ܿrsb&;BA ~)+ֻ mI[S0e(<#*\SeWL9+ܯ)i+"�LEA~e T ȷ]C < ژ|:_*s큉eZ|,]cMTu35[6DIv1yuI[b)ސ4 W<27)2V]e5 5I+ſ w58g#UVٙomCX~#NhE\{m:D%5c7>}4YGF&XaQ(63F' 7l$)/#Dθ ^@`JN1DS%r'K-BqQs~_AWsRE|,gqxuj›ؚhO,9Srb.FWʬVIgDzJAf4 FT{nM;bU)q< Dڮ{MGlh7 eistPsP1 qM1aL1eqqrwupG�SR9'x*2iHoD.ae܆=zEY 2Gb⧴ EGwg8xEgT˫|N'gI}gDq2#:'n3bϳ�AZ 47Aj%QsxT2x -Ϣ6De`Ns6 s*L1QAl3C*M8۲S_3pciH �0%[S[w5}λ,Ʉc[(|䚿tTuTMf^`-QW@e~,){}m6qMRL[Q-Yc#%39l/ĝjtX<+'x:#,@%'ѲF_6Lۊ hÍ'`}D"*O)d漍z{~#W=sUQ[v=KyeGr"餬d,xZJ= 6dfĴ̴Þ^r+"6h#K=M}bl#g\~MqWH N@`j "?դ^'X{2}=,1۫?uGWL7hNҵ=[IPM"/{7 T}mLvoj$ { 3ddF#bJUd8HeeY�Ud jʾ#%\CPFN _s9vC˼榑6.\Kʰ8Qo9^]iCu$Cѣ,5BnRbI,h?=R/9SԈ?-7{ `Pt=-q5]M#OXEA*Diʋr,ESv inP< �⟺gזsTzV�&ALW H/,R`|*bO,�""� hw*fdY�B^LC"&.cy<� �"���� �"����  ����� ��� �"=���03D��A����D��A����D��A����D��A����D��At&[t!~inIoݵ(f˻d,?HkC(\X'CW$&T {" ��8>,m%A̯TJn깕3U{Vt }͑~FBF([P̯UuM>b~噞* uBN>QkF:aS_w'wKjyoΈv"-+i} ;t.#G]񮮩|q)+bN5PTiۥ׵?@A�*BR]{o Ulϟ^_p#&r҇HKBsKK sbCz[hEއuܲh3P zd((oIoWW ˉt7J׏jTuER|uITL{EG B ;1:Y;2@A` v0voeP;%7"R2גB]!He&h%aRfY.f{c=ɝ40`5ڇYF]6{^=(cJ{}: !J9#Ä;+pRW%se9Qve)L%VÎ!8kڛ_:ݕ B}"d10+|1l25~]hm$oPWw骸bN2(VIi+_68n=+#GmɽcEIy둗u]y ..E VAR#]حx !OC N݋]}5]r[wՍ$N_�A Ǎp"RZDYt܄`rxe0PBqk}U˽2?TƝ^BWs}b[$W~9'{A7HfE$)Eepv%-L:JuUo{L X}Xgə[R6il~}*x>8=a|M d#ɬʛn Xj5G =RUu͒d|)4ľo^t8?iq\A ?x8DO4hshfYecȜZ. ܴBH< kyZx$c<EU݀<TOy⭇Ahýܨj>oZ`�A0UyŜ0mWB6 ߌQN2cL;o5ZUgCGӓ%LyF^%S@nvFߐ"L-hӆؕģ?zk]sZi??ef }XG1aeX ՗W  |#X=CV>f%Mow=x>`c_ȜpSV^.\(U.)oYCIև⸂(+yD-oEUyՂ#LkťAlG~S';4< -8q5"_od[/ζ4tMKul3D��AT x߇]jڮ5H{8, Lz}##k"Q'ٕ`2hލjos ~ۖU$^.` re[X3PWe)O (kϙo*[~ +fOP-$6 im [e!2xQa2 Sknڐ kj:+Iة8 }<[M%qMܭd{G5gAmyZX+%9>%O|%Swמbq� P5 " z4F;Tm՚E&p~Heyb\m[V-ʲ}$P܇2] DZADw$AЁ 1K;"ȜtdžYᣩ 6V:O y?jؑ4q&koے ۛ_{ mp[G|E«.y!h^;"S)f3nCBAsL\~:28T0|Oա{Ʊ+oXM{DD�q !=(!eޞ{ T_Ȯlo@^! _o=|Yrt,HL~өv,(D;cN3]XR3c DS}L.ԎlgjRZnqA 9_vZb픞b[5aC Z_,)7vk^C)fx&$Qwvy^}9dAA@;=-{k"{_P\>]sw UieE ż榤(/k7q,kkk&vi':GZ9l6sxUڊ{ n90]!|9M=s{__ǗlDϔ]tt }Bz5nFsk,W# u<,C*ov;.NXM6Ҕ6D CoAd5SIGH?xQY$g#.긃C*C l}md,f3;IoknB?QdffegT' o? 73AA@�ߢgrɺ)X'{Q6f8copĻ|;k^_i.\odR?3,Rc`>]CZ/S$1t+v}oL8OR]' )eϠ@v?GjHAīN>}O2q9"x=AdvHFES{Ur#?kqAr 'x:DoK΍MJplmFk%[_[Y䱵񋲷_yS߉4>'8ݞU#|$߫k3D����(]-ˏwb("� ���/}]?x9לTս& �"���0#e2L}k&� ������ ������ ������ ������U����@�����@�����@�����@�����@'M/092s /YPfaCAx < l�D��A^mfvG*G?~{G! ,]w^xU4]pތbv. 8DIb͙ ΈQTl˽RkcVUboGf eeg`M"8<fϜsN'?oX �DyɻH<k`%y>+M\Djn#"0\̼JK|आFW& r2Fz}oYcڗ]9r8 C~ȼdEќG1ܛNDhjd�hTm2""�8O:{ꊨO ++/l ڱ> )jȾmkL:j[V˷Ƅ*�̎=89K =fTO)G4J[%bY }&i YzNNxE rDjd~霽?Q_!d7I[ωF]R$;F*P9mF8`9->AB =|:WRSA#P?\"y s鰡LxZ P97/8a/(ޜ]L$x �☨_N:tǖBjY~8b [Q8P\U5s+}*;n&|`? p.K'CRs ?o6%3'a "+(*GITe\)^@ݞ\/=zLUc]L5t rO& [Vبh8/<50/-b6^xEpJ!W>楇RY#[*nr<^}}tDƎZiAۡ|CeF4f6QQĩD~pee8͹ " 7 gOO3ؙB#%Ğn*hހ ℽxjvel+7č"pA�qLs[F*025=N3%d֑ bs]*bXb<pvΉYTLV Dښ(cur5 :- sV; :[LdAD$X'Vcto)nD(E}%Q;FSvY3Obh^15VR_[Vb{ɑDʣ1 $Ԁ*VCsM[υ3H B7F?ې<]9Qly8l^ocq`\D|((x6Ɠ&@A�q,p?߲Ak0 ^}-k AYՉ>,//O2QVD?ٜ*"j Ye;& &Pz *<`Ab?<N+68 *lHGiIP( ߦA!@@f2ggfWT$!`4g{SDnJZvj+;06joH Fx0N,l6hCJE N],["PHDEt3FU b&8`a$vTWs2 zԕ-4-1eIh)G ;twZn$c޲0VDU`o̓ꈄS֚ B?/%OeotX �Ⱘt%#&SDKC'U쥗sZ 5g] =9)Ng2XU=M*~PuICnt(Jm>u08%f *«ODu҂8rn|F.F]Ӊ(+A%L=:7Pn7CSJsfFt,SL#0#MvԥiIrWe "fb� Â0p6iRg78px+xUP1{ o r[#d [ v#-Oyh| +0eVIl]ͻd^/ږ&< IZ. gi )$`KP\&}DŒ4<>A4V>fp?A�Q^d.ﮉ |ϖ;=Է}pcn8ڜ?ne3"z_ʨ=V؀tD!6V>tQp' 6&a›#9%洄SޖFGE}u-&Yu2nR1Y%637M*"j1hy)T'ƦÚyR)e^ZBA(NDIVŕ.VP&*V2/:f4T1j9 "f؃ �U=Ϩ-yT8q4 l.:zTck3n$:~gVhSȭI<lL̍"XS�~8>Q|Oq[pZ _ʼk $[ 2N17kSi ϫ1+)G`#3z&b'5- { V" *\$'kJc^111æw!G|"F؃ �"0\1^zo|:���D��A騆겂3j ���"� Qd!Ay����@�����@�����@�����@�����~\A���p� ������ ������ ������ ������ 㑎SUJ?BYwj_WQ7'7a4 `u3"� jSYi4>B5/8v(݈ b7Gc뻆S^w v bOkckGX%v@udždX!Ӵ/MвpXs2=x74z?Dd:y}x@ nGFD]  c7;L,ܰGXCa^Vҳ#84|5mwt(&UI:ӍHr!ZpPzz|)-Jeo-o2ByUXsC5 RSN<lUU8#N[l|t6 H qQEFPT<xV(~Arn-�Aab8/0+Q H^?Lz~≏:Z[zFXK'Qxij;Ň.N69'ۜa{Yk#m+ <ׂʟԛuGGw_!)'htꫥܶ좵]@f[QIߗoݍ)g,h:Bn,/Axt|jh38\Iy߸.J J}SE2s+oD{nIm"j@DKւ{wSO;_k:dAsix5u*"AlK#-ygԉZHr\~W6Pqn$<Uv60Z I7;7`wj*uUǞWVj96M0882"� G+-2OY:j(]S5ӷ mM-{yrUڳv7nG~SQ]A+NQ5x_uc )?dGiKP]р*i+{қe"*vűڻ; 4wuUɑwd\˷xQw⦷8JnZ~g:?]u\5pٕG{maGKJ;!(!Y<]{.jCTQRT۵|nYg1*2he5Pp)\)G+(ɦԒG"S}!Z^/h&޷ל4c@A\ ) X$CV6ZIXȴ=:ݜڞo~^Y<4 @� C4Б zFF5@l+k8YݳQo:;yk6#9]!-TͶ<a .̓&M1S7%IOJ5źkiC?AnL-Du^K~9>ԥyВ@kuhFKΪk3Uv|ܒhJ bkΉّ|YScF-o_KJJ~.*+XjUkIZSw Kag7'"=E &7d22ؖuy*o (C~{')a*P\2gH/U5Tw6h2yiJ7)} �fK.:-Z&FH$Eʦm:6u[(UGeojx\j<~{hc\tϭ[NS[KA$􍔭gg5{N~S,c"%}H 2.{I+ Q6P5e%uaQG?=w"i M[Rh?뭢dART۵`TA\A|e ]_^]>B!:ҜE[e(UovĔ6d]Z򠾣f`Ad IDzIC{/212,`Jl`VzͷsHFs\ yiJ3Ŭ� SB9U%@?ξW/}=TZ=R6byN,Av8[i֜Y*^ Jn*Tp\{MZR.\0ZɩWQ5,WL\: b~S,aU%fw \V592}[ ~k/<6:eM)K\fq+)QF |$,%Ydd ɸIsDˆ+vD WVf96M|̍"� *:sQX "<<2# oyDqC7oQOEԖ.9hZ|ӌ@[c;#XETD$꺷&1zr^aFv& ޺ؐ^tҲpGY8 EmJݤS[b.1c~S,aU$~|@e5: ȂUguzw[bݟQz~P6|$;At.1Q;12<AT" $(^C3>SVJ~ĻZΣ#Jo_ ��8,xMQAv~yY&xMǸ4D}˪JbCqC;v/=D{ٗ5{!b7|yF0׷pdG_{wYg]$[OKqj]Q@{QraU]]Ezg>tHtOQĊ;C{s2l| _Ft )nZR q~v6:"^@O ;:F>^U&o*%*)MV^-SWw TV]0:{2^TDOzxl62je3e/ʹIE�ܦ6ޘ.!ߚSv.o0@]M* " +D| I8yv ? *V#.Ji_ ��8voO17(QAUVXi 6Z}<o}=_\l{Ds-om~!Z$<z[-ZDU͉Fѡ %71TヌJ"FP_Rrީ-1DL&v5 St m֞:X][J]=F=x7oҏy{rׂHoDv4\t5%k#w PV LsaAw3*^lKIl~v2l'otY܈Q$[ED<j`Jcn$+JD4@Wż-msCJ/D/D��A~F:NM"Lc�NK7Mmn( ��@qEOS֝ؼvuna2qJuU.33p(��@q6J<8F/}iLr=͗UB x@�����@�����@�����@�����@`b#����@�����@�����@�����@�����@�ǣ:UC#fefXg]!M>0E7S&ߗ~DߩFmTp* �~RAdڠHBpzbj9} )F.;ο(9A}"<gsh,:_?[NٳÛ|"l54S3n(}u.AJ{-LNYL[2%\Vֽ?WCb䓼ZDn\Jб/ĩ'ʟxNA_5�A�D,8̂D  š% *o22Ғ߼ 8jC4dՍAa^fTtn6qI1v$i$㽉,zJ=@B4G'$F^ie?Gq~ Eh+(ᖅ/u �[bfk=*o2gZjWnuNy)}UnKe'eySᥢ5Bfa_kCO6Y?<Gz(قJ@^r-FC)D9llN[HrXIXΗ?bxR?qe"]Vda˨p&)imx(Kz}+ϘThil -蚲*MjlIDCeI +V"FY˞:K}Ml-޸3N'[l+5?s"ŘDïM?aoJ.ڮT*ԥtL'Z9iT| \t;8�V;ip}6OPYck&"� 6di{^wV6r*<ijۯzGM~HQ_t:(Ygum.=v+Ӕ#\AqEEd]tkb}vr=g2K0#otIv 3X:)ҏdUcȭXAX�vy-@ 0+1nqhe"N]a 5+lFgUCA-LY<B\>kYn',㰙5 ܾy 6aѝ25sٱ%M"U;o'wΠb[qeFv;?0Zwxbv^vR䵀' #c}ykd%]<.:h%-fDu3ǫ9T۳/ U`qtlUQ+x2d_"Xq[՝+w � b]ڟf8gٜ`Uý2M& .jx~9Z8QU=FeqZO!o�YK8Xԝ񲆍mdet,^1 FJ>6k)? L.q1Em)!IA#bhi2Vf`J5sٱ!l&va ;^Yob[ԸbNRGTpG-z&y.+pWkx'%<_A}{YL1?w@AD&7Qw[d"tvCɤ t � "+a 1wEEyqӕhG|.㩍HcWZ6hTҩ _H7JEBT Wl4;ڠ) ĞR/NmAEA_): ir oȖS(GŊݤ"LT&0cдDRJkLYZYA$X8+nh/+r.-yMLi-j\N6jopG/z.}~wkݾ\U < 2ѐ3]pZsAHq} b|8�]jj{`mu]_Y|#Y8;:` �? VG{ WzG9k]1ڬk8F;YGo&-ke'�7+#rGC H ̯#MdepO"2 "tndF*C)UO=4FMܫmbX\K-𗘉XbƌU,AnbQI۸7Dk/yuQ'3}mp^ "oeƒbirDM*wGsȦ\\J;<3-MՍt �S "2b%o{>X9[E«:GuDST�Tk.wYS,=DqV3]kmQ\b#ce[j艫Fv~L.ꚫrW$w7h82]ЕBq Kۄ<ZlykY "oE4SDt-rnJmmOJߤRXK̘M ^l9QĬk\XT^b[mBgPxbXy| h|6 "JE0$$Sx3z=u<FMD�SD& mbHO}}? h,<NS驏v\f=3!":yO֠:cq̠嚈\Ad%;pVt(u*]#Ȟ`+)%oR#cf[h?\jһӝ9{,]+9v]=Q\_Ekm49ŭ|8GeDʤ7CRVH̭֥4Q:\EMҲYb07M$8rWdR 6Z=LED(;.܏IJM> Vbߤ .TUM7Sp s豍ٸ2#r#"ZK>HIkkHӭ=cmwyKdЏ2 Hx |MEAL?W*2`s^{"p喅. M. m O,pkְ{< .=t2Ufv8[;5iV+}{MK&ރ?ᜭP\8x5M ϫs.H,\H.If@$'W؅\Zld:F)޸:Tm^Cos&1 17t]g'Qhv4#D:keqO=(ӂ:X&w ne ?Xf)zxk|w̭wwG,ڗF-5/VSK?6 k3n$:~gVhSzqH'-b!)s"sxƟHLBӐs E/%&"�7�#s8L~Y;l6fO LFm`�� ^"q$FQvWs!2"JJ /6@���b]˺ODE ������ ������ ������ ������ �0^J���"� ����"� ����"� ����"� ����"� G:ّ.u@Q�ÌG-bįhoNnjg] T"�}d]A/Wt i|2Ej2m_pRP=hl}HHOGHeU|NG[KT~O ; T,l,/UAaDn7vWcC ǕIɉpi+E,x^;ή~uZRh#j]A!�Ʀ VJDׇ,8¢ 󲒞q!!cZ !"K|&d? <U1K YVdiJm8 iC^gg9PDMH ˆ"4lW"aq, bGYʴ=y˵3.onaɊ>nAA1.Bfd CDʸ}4aEǯO|,yZk/6F֞4=Ajv^x՜c}rAQrv QI5+A 3`\uf\(j}Lܑ3Y)E@UNMg&*>MxT]z^Sk^i˦!:q[Z  Z^2䩭(x\ *Nou:O?Ǻ&h`K '%' 41嬛 bwX7@iA&+XqUxZOBfPVƬ ϊA�D4 BrcvCu۽wS*^\Dp Ay*L]!9vG29Ҡ%D8JnZ~g҈n UscBpz‘k6A`$O+R_{|\@G+(ɦԒG"S}A(dQKIa+{қOaB{L +»| EwXJUUg]}F]j+Rq*B^huwDj N+v#ݭV> 㴢A�qD[[ &JuvX]k<e:^ La51+zBࡩ)Mfn>b&򧧋p{mNG?sys{:koNhc Nw;* dIZSބw Ka_ou4>U0{to2Su<VN4Tv|%}7]jw \qeaP~i>0 ?x)BU:'m㳢A�qdKZTlJۦHcy5lB0fϩo*y -)[}ꕅD+ Oԗ|&3 de jU'lg߭b Q9/w/.lfiN<VoXm/VׂTD̤E8ap{2޿MZ`!,YϝHmT�F]*NMفfxA/v!F>_:ӃҟʸhD��A%@Ph,kv秢0;ch\%frjbd'(#7f"%rŖ19i7&K k>qA(g09bĉr ;-v|kNެMY_j('>1"*đ@vwICroM1U8&�(C~{Wd񹾚lM:WїÊA�đI yk'Iuo%v*bK9K\_}{e=7‡~ַnR vV_z+}K',Iw+Uv8D }"1d *ؖd}\.T bIɉxO-dʙ6E- E'-K̃j89ɺDF Ok=3kU4"�TqC1yfNnaMsׇ,‡d'鷚etNC񾬺4+6?£ªSy@μF>^U&,$-D{os 2zY ^^ IunR1^Vo&o);[zzZJ7 .b_X2:{2^TDOzxl62je[duo=-šuD/>ESʫes?6wbbV,)@mt_3D;M*(!ŭ==_KCWj!T�HIfq1?ӫ}U f8N+�~pAPrz}ؗb<moP؃۫l)3xl}g{s̩ dsܼ=̌{4ׂ̝-ar/Z:n H|5)F[rfNU wED<j`XbЃfT.5ٞؼo+V9v5:T 4\t5%=FVP)&%%2XniWs 2EfEOKQ �J 4ީXʼn b:+H6kup]w˞e_cӊA\:NM"LR E���� ?S֝ؼvuna2qJX���A�ğY?%M#u4&Ԃ�� �"���� �"���� �"���� �"���� H ̂����D��A����D��A����D��A����D��A����D��A.ڐ&l9r򈮁LSϒh}!33vet�~JAdڠHBpzbj9} )F.;ο(S&?gA{3P=q'y[NsKM[N)б *6NŔQ O)fAZCS0:bc7/Yuc[c!?$D~xtbJblDV[QQiu,iI1a 5(wܔ"�K케Yx GauU}0eKIaefd!d$;Swϳ2�a_kC_&,_}-iu.'Gi"v[.;a㘙Dʞ:R|I29SO?g5B&hLr8ci,W+Kj8`8v}Z})/xd־:iv螅j4V|şؑYwYdH}PQh nEmޗ|>Ȫ|15KzPfN� "vӖN YT$Jrd canAj7�? 6di{^̎sY!$燕+ĬwA,m51A(<.<KI{uwDgUg"㮮!n]tkb}vr=g2Kv .++x)UmMBq^7omBŔQ".HUeۉtz3(ٹ zkⲋiaV-~!,Sƕ=iȤwYڔ<2j_v5r*<ijۯzGM~HQ_t-/Dge<9⨎Wj-V`>lu: T<h/ VV}up"L9`cQicSCYk$!r+#VP4?Aw,&6׫~l"�X=䎸晻:bu6ؕj+AdxAR}LeА}ڊ8$~6-^pg Sv]Xp;Ue |Ղ["؛ZODf ;^Xj{ )&1"1~::U]*RX茈eZhmY/EDݐyl2yVpKf'- +`眳m ڤ&nrk]c{n<14b[>p >FL%p_(ͬ[ȕBq}Tɕ8E;]$;c�? v?zWTW?]vr%]ֺ^Si`&N.z_N<N0-=ĿZ):WvWuibjNU;,U/$)4؛y'VEo"^.&Sf"!*+^y]ÅazH hoצUuČF1+NfW|*7r1B秚/t[]GWu++HJ5̜@| KXěݶ% [`9{+NE1=Md$e7  D�:S|};bvY+!ީqg6D{hiFUK ο<4X  C#u'OTD0PE&-|{s6#‰(XX%7WGn ^Q0L\|kYFm*</[yu:Yҿ PlߘC6=b"VIhiC30sicՎh'U~ QԱԼ"01< � "2b%o{>XܙwgXVǀ8 tk<AD;n[gϑ\bEFO.\%fc}"~/|(\OSz{> ([DuM*kS}u.g^YM}u'Ĝ{?qk\V(slyB)K.$J@N0É$x?颮JEry(K5O$ղI +0'2aNp[`1%=m@73D8 }3W璵 wAn::An6Y%637M*2= s; Z`ؙDvՅ*VޡI{f n`8q+:^T:p.~ґ KEv0fÎ cRb#zM)<b/9ڜ?ne3"z_ʨ]w7\yt:bgr-f`2KA- ]@D$@fN 8(XM3T=Q\_EkSIޤ2%#=-!*pT<qq"�. K / -(#{ tE|M ֚D2U m`xx5|M ϫ(K&d mJ_j=([*XK9,//P˪{ބm8g5t߇M'yiAvm*</s>pg4[زN?̧ymrF#3 !,ǿɪ!>CJ79P i$`44=nlUqXDq[ppWD�oRA}a. PG��� Pf' Ay%yafrׅ:�DD��AYdꎺOD� �"����� ����""� ��� ����� H " ���0N3D��A����D��A����D��A����D��A����D��A#tV_#Y](SI?1/6PADuU:JN!Wu-kAC7%eTR\~껕OR ��84؉N$ %rWd>ҋ d۾Za/}{|.D�#fKilHց NFx_,SNjJ0ڻ Ffy}`oN-'QιZ G^YnN54/cEX6~_+l&I b^gA p:"21yG)�@4RL1p-43 ȔS u؃=($Ǽg!G-peiHyr C 0f>"O:Q^ Ef^6 =IgPQ, ̜˩5qA쬏3YE&Z .8ʜARrscB=s߻ Yy6OUA h ~l*⢊L9VD��A _s|p ;stp+M) eh.ީG\n DS r[SK{GrzfCv7 {RѿZB7-eb**(t?#AжZ}s X̴E]*T~u% [!nʺi%CjL"hK?\F^2C^좵]@fEㇷͣ4 7!omEZPSzӿHĀ-B ιZS+jNcѥ~V:*8;B ɸ͸PWchOd⎤>6PqnzkVD��AܔÀlTJʒC/_ ԩ/LF88zѻ^Glqډ6?o7T{72ET {ʠg車ں;U08b<ؚ3Uh1ZRUd<M#;E+6딍W%.ha ORwlߨ;qRO%7t|-BSZʷVaq9);& 7K-B b\N ,䆧!NsYPaKpBp1 !8=H~*TğZA�qEA˵Em|poo=4~#oMJY jhiyOXZ8wޙK~*eR+au9>&X]c^%x YlA쬺69Aj Nw{Z`>NDSMIX9?OoJ]uo-i VӛhK!Ib5f}0[DA9vt^koJ;'"fGenۭI"\})#'?~ �Pn6%n]Nu LA "@ N>#\D#Eof-Zol# oK%mN=gg5{N~Sa9fgي n&idb bKmآ�@P_vm/\/C 2לCeOdӯ0DɢKZ f5z}Kj|\ED̜cךO$W{uDgUXEğZA�q(3BW!=9¯`Xd/1 dWMn調14տT?rp N=W"[3'J "o9:?Ņ\7 !2Ǧ Ls&MWѱ vNf jb小 lCe]OBKDiŖpZz5'o֦#[W~DcךO9dau`B\*sLs,1:8~c\bw]+" #Ğ&c[pD/[wXbfޚ�ɎXL{ >6 O5L}mΪ`[rKguzw),ƐH{>FRBy:L-Lj8/Bh_ [1nw"$Q^αkMOMNOk;y7\&+8܌ ݤ}oRu "pX8(<Xl I*,͊<2WN2¢7VsL𘛡 "B4Y{5Ȕcy7m!x_V]Urڿ{QraU]]Ezg>]*c|0+.k<Bەe5)MV^-Y6+M*f^*_U&԰|J OQĊF{sq|duo=-šuDM$n(7rjMIU1 ]=-qizzlqcn?9),xex)17ZAqȌ>:UScG_l<xޠDу(Dc7}݅ÞGҮ뚫|5Yw\<ǜ|.1*tf)mD4\t5%a<&F[Xd3Q2OC>F +^~\=9d<QEi&YvwQUskt&1pD9oî5.NxOuĒ'GWϠDv S ^=_ rS7uT/9*?X (_X�3#R(CD8�AA�`cŸ3LKED^p p �� "����X_fV6TYf1⅒k��� z&8?ڥ3G sBS���_AQ Y{!1ھvuvģۘgwoWAɏA���Ƶ vwwuwvvvttu}mcsS珜ύ&n'NYq`[kKG[[V8{|i;X]V%? mf����0~/<KSs/NmUQʪ( T9r8.ɃS��� * mm-pāoA��� ,m_6c$%] ���1A=V5WK跮+SQc$h ���1s)S&0*PA,+Οdif'8F/PߥvAd]!M>0Vϒh}Ά`\3:8^E UGjhyD@c1 K[4mXFyخv{]uG8FHGmXePcV٥Ϗg vbq<t bdz_9eo(sY(8zqn: 21ؓAOHƌAxTȫGnMƭKtP7v㘉vs_gs5^(f }^Vr+.X!/% L=ٗ؝ k5ӆW% uĆV8-qzꮁ SNf KSt1Sكq: &]Y=m_[C N/q^TZV%DN%d⋴7l oZ0{c7/YrSԳ7$Yɉ|^,"#> ߒ2z˩ Aĩ9K:.REv=R&&;aGhG"Z<u5q(V\iLE"]G(ľ~[B%IAW0 O }MM:^{MtȪnjM o\\ W[4}Ƚ|][TZ|~cY꾿-)$|R俳ﱾoƆ} RA}X]ՎZ)qΘjv2hXDVw _#^aD{!%9C'ԅǵc {{(ׇj 6-&71鼇)kRR0.+;tb _3)b첨=V+j ϙz*SU&]Ȭk.1#6]fɋ *y:v}2z5mnyͦ_G 4|&eU#+~iF߰Maσh5= MV+O*督HU/$l|RqaS|RbJF_նpI Pp1ݟʜ[ 5'm L,lW;MY&Wh.E:,a@P]e~<O^xrTϪ{ڑιbE|]_[yGciPC-K"C aqtJ^\ TYTD \{ le<D#[zQ\eW\[c<{5*Br~XOQ;YXa3g.dمAu0'uOuRi0/L{ɒH[oh-;<1;/;)Z†!]h%` WO' .*E?׃Ӎ dVb?2)}%ve[DeRQ6q!J ɃhiTDyԬ_}בZ![([NQ}:UŅO,Ag#(Ygum.=v+24e 溇-xPmϾ> 2M be[3h,:̯UKDoYceT.Ҳ#ssZt^`\(%-mͳ4^xNVz!.^Eȸ㈣nzBO+ '弓+7b|/?(yqAT.PA|DO5P"&LEgꄓn&x"v?+mf&[m2˯^78>VƜYaAo켗=dױ3o$$Q(1z +IKj2rgv?AyZ%sSXMgK޵1Íy䉛_4*$}iJ]~?vJ`5 Bq g^zM64byvp!<DjE r].#bV։ج]G2Zq ɃhAUApcɳXGNKB;m GVşQĖ[\Y#|b"V>m񺛣ޱ[ׅ@Gj@a/͠ξBϽ<xA bh*}VH ΆwG-q]W4?Ym/ܲDBr.1 D\ (eYMyp>HtcV]Xl z <2;8==&'2Mܲȥĝu1){euKqTJ^B ?ץNbLDJ . gN]vQ\F TcYQ#0l/>IUM n^伽o0Eb*+ڊSfV=^$ߦ%G3C0`=NJ<O }[UjU#;?ОdпD4n۷[7jop*CpdD=T| g"!*+^y]=i5 rEMX}q՜",%ᐙE('2V"Vlv}Mqu%|GM:`nW^q%/bCYj6NEo/$ib "DwuD)k!CDl ʈzT|J(䵗.n.3wD2;֒4vU9W1 D\^K{E *K^=}v}XS=v- F2K︑~9) b5iL\risw6zGfN=T'dm|AXXX1kָ{XZV]נ?&&z~[|#ךc&f OùW RϹbƗ5٧&~Q=^Tu{X#<?4O9Uh38ubW.@~3( |i; oM ":VED:ZU HgF.#WD0OV[ 5yvutvHtđ(˝K&&IOx@E5QV]^Jf'?qOOv8&ͯ:;kIe Tϴ+Iv%Lꅧ\?&<.ٯ}|p|(*_>q,<97lC!hpo-~wVH9\A~o(m'ؓ7J$,{P𝿑/#Q Fʟ@~'=_(.aό? ~1?RST?8hگZ[TNx0/גcu11Zqӂ”#7{FdI‡8āGɊɾ ޯe'JκQƬ}߿9Ffn?,ho$: HǺj䔤dʲ%.˜x޴NV]Z\3ɵ?վ;1\pڄ_ )0[}M\ _2+Hk" mJ>eok 88@ĚyTq7Rxu *uqZzRڋvn8U޽4Ԕ@jEwFc`A<,sux}j*џ+b~, Ti%, W| ~t9 #67/~unXo2djr8nΩ7?Bvo\u8{$ )|1  6sw;PA$_)|$&{R+eF^fs~Y7eo<ؚP)W, }a_׶kYwu]u*6TlXEDC IQw& @&u_\ə3ϙδa?ѢA4J 3 Y.XYydiΓɥo_Ex0L]]zDF]'v|bA)B c0΁6[òn5M !F+{7xW?h���0&hzb O4OJ J @W_y$KJ.^%N&?U {m~M&���`4о4/ &(su V%n޾Hh7 %ߋy~De>BS/$h|ۆA5EU���٦Gn yDD bNnvAaeHy&B6wo^kS67-Q..$6ݷuo����aREƺׯd(2u ]A'cǶ+~X|ɆR>A66Կ~L]mMNj"QdCCvy�Гٽm�|A je6yϛWc Xe@W_!|kh#y]N}P_LTS�_H&� ¤Q;!p>wĈ|VWG! )"'67kHY/o^>n.$A5QJ&/T�aZHv؎aW.G *X. j&IRaNzRRL\"l.$!jR)%B�"@:H5�_&%./>l躟($6;Q.T]A7i(R*j;C�iRM�i V>,-4qºQCe"GAwGuj % mvRP���#cR®^YS+"_^y!P`}:"}'6H߰Q(���#cZعT3 *kAܲYA!e$D߽qg@{T?I���Fä3?rIE%qK ï =ux/A!ub+W!A{TCSc9Eybn~ol2���aRHқ̔ćܺjTAT .qvZx i*#o\>{t2��ȝS@gBU1؂������ �������"������������� ������ ������J+D<9t *|"X����0ATD lgy� Vh�����LBbiI}hCݛԤGׂdB6����� E3u6{*W7�����FAĹ} @ +4�����&$66ԽZ~wB$�A����M׊F h�����SׯVHA4D�����LN6VhH +2K#TIa#���� ^ Ɔ7T><6LAMg*0EE˫a/K(IdHAz>V޽-kس'6w ���|鈒5lSRA76di 1e{y?3P_$;)b<#dw lxt4Bj\AJ 85ax_HOWLDˁ?/ąx5TcV;xߓtODo\ D𱂈K666|x56ԣ 5]^Gx+f)`w�@]뀵~Yz)ά׾'"|V֒"Sm1Кl3hNY,G/yo͈ݷEF { ~]8u٘c9$m]$=kwG*8} 8T8{)om XErȀZPZق4uHbυ/Rm-HV+R bJ>g[Y͹)8>|X]qgtHAl_~9i=-| wz_ Y|siFZZ0o.2 ��|8)$5vso4&8kиY1fA̶Yu(,:w+vVցq6A_dȥqqq-ar=Ay~Ǒ~Uu]5^pD(>nn6/ o&;b[A`MV<jq�Ja67,qJM=Rk_T1bkxڅChat/&mRE[]s5ՄQ'ݜQFΩH^1RD"ξadM(Wh M NO4Q U DB_=C0uzGyo6yrzlh+ Upv[W+*,[ad2��)5% fӎ' 򲨥sJUs.bާ9Yt"WDWV:/hvq3w!4a*5L4WƵ̽<<6?OG[Za/ETs矘`9p[J*o-[Qo:$ogO=L-LAo8NgܣaFu$8|,>wƖmO1S (h)R*(pr[pɂp,^+jakbEEwŔp'7l(xe<fobu帴—?g Akd\ѱX^[AS[S%k|:6X\]^#84 G<y/=+WKy7$5c"j{D|x5U<}˫ϹӇxIHhZQ턟C⟳O#}{H DX0mGZʓ4JPM;h3JlaR!(f�mo*rPpN Jbf?:368A�(7sXSє7x noki<?#/M8&+0=fPx} |\:3%l56tD5uCBey{DT-e̵”;V{Ⱉt"]*BgѬGT[qTNsVn1Gs|[8)N'"2÷O"Q=*ʫu GtuԪǞ]9{~xԓoID]COmr"EJqETZMO*bvZݚiMXc<J퓓-}Uj٣J:i3tfvF[{\̯})sτmͫjT ^ŃCp_%Faj =j:jAV+OԂ(P+κ!Aq!A?hff_PժK)`tA>j^Tm7]qi*ec<NU .=p+J �`<a.42%W-WPO%v{e8 LX))Aӂ[#ҥêrRM9Ǜ9or>>5>NjXybE_5ym:l?HVUy-Bmtjuch⛼} n /fS<`D-\tGtu]_Yau\!,mKAl?D,r{ڬە](ŭraasQv'qM[ͮ&ׯte'>wlךC1I_hov񊬠d#p&jAhH,E?ӞH# HJe<{͊v t0ʇ3F#8UTʘK][|�>?6d'CoJsA/zoaRYI;b~y,nJB,L[q{LLMS3nb(yYLh#mfK.gϷRxK6&T|Ʊ~fJT;g{K9e&s`Aԑ)O-;&T ]UL8Iڅ:>x{s R`QǯuҎGb Y̹s)+FDnƹeM "<"'\pJ Ḅh0q�s&Xhb }vKS<|A/% qiO_Y8r)3>l_jZ 0-8@ !-t5 )OKFb$gB_Uv?VSvGqr pc1 ��!Je] uź{`qeBkl.x:w)iYVԹ~Y2NS&-r`md9 jGK2 96{9:ϠJ;gŸYl6y•6tWr QGp)LتV{\..*&GY$~)헮j) "E Fq>&ɋSnff^Ie}M*C ݓ9){g8y *SZ&(dagPq`h,!1PI;~T].:<amL/yլled0gf AA9'[# QD.xMTIE^767QhsT5*8pBe�mrrS Nb֤ v; �@"/Zbg>x~ (ٙO3HNN7&f)/Ϲ.sp#_K̦-f+&;\KP0O>Мbx-va̱OkTrdS^|Ir8þ}A &qz>%HsC3 "++TK:'R({<Fs#$:)3Qѕc,Տi<ģ{:-σ5XV fy9vm $kkU ӌ8;pe{O>|NȮDZ~Bd͊], YkXM--Y4Zd$3V$iS8YϻF|}1/Egee]?}㩧]2R<iTBBw "Rgۇ`e \Oo-6ro jP.̰r\vPEĥ *mtSɆ�@QUem9=(OӻZmo-qEVifQrt_!9EYIg1u0CbAa{jߤs-m,zwM*ݍ쒧 yB$1#pf7HTi>*67N;gu"H18z2׷ %bI;!d38b'<}VuF)`'c/V_YÜt "e(j R-E뜨Hkwv6<+ D);Ǩ ~D!@e^Clz9wl܈r"ӛjۢ?v (b~RHf$ 6y3'0y;E\LYMbX>9ÅfNsȡ9D" VrAQ֣HUMU?ڞ~-!ؾ�:>iMiPA{ VK_v3RgvGANC_hNv\+&8Ь{;p]wt ?tx ��] ^ii5/TWUZ9Q}渔,+`1',wUg5doH}{@>ͱqR5w/ϵA޾*Bm*SIHy蛐yd fS`){f?"yO1Svj? "RΉcntT5DŎX4p[20AN4X%+VHAֹ3'---_-|OEB HS{G~sH���ݛa9>e'oL0p8QzvHAU5+b_sՈʮϤ>hڱ bz_FL+Z!̔[XA"{Qo^t~�A��2ĂA V 4ww+lj|IggW]߶/~P.˙m{/[ѭxc&.u5m+*U AVJEܲR icѨ ��,.V#vc {JxwYc/~D~hH =Z�����AA$Z- ����`r_+ "�����'2�����SD/P+A����DQ!G\ bv0޸K`����$Q%qK ï =ux/[W/Vr"�����  8XX�A19%rf�����LH������D�������������Q������h0{4wpD������ÇA������ j1i W�����0A5D !~i<MMd23�������MA$q ������ZOZ~����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/images/browser_window.png������������������������������������������������0000644�0001750�0001750�00000111372�12161032160�023001� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� ��e���a{D���bKGD������ pHYs�� �� ����tIME68_B��IDATxetɖ.zfΝ?3wf sg{3oOvYff&m2 KF`Ѳݶ[6~RRk}2#"#"#bcG/ 7Yi`0 }D^VCQǙi`�%M& zALp*|?)M=׊D k  tL;o/Y =@dJu3@u}Mg< PCJt$Sf|Cz\=/L^餸B6-:qs! ^y:H9Gl( YpF/Ny[M1x" \q:< ڸsqxY]= {cb}Y ׻{^™ +IBT´}4lIA?>~$~oHå\ZiQzg9@CQh|6x>|D?zKOQw{R1q_PgV4 (o\򒟑oxq>yqu:qX3/IëI)Ax.).({P/-za$|=JsykH!/RUmm롦PDޤIuGu*Wl34'扼3ӔM(*PęQYegϱj7~N>+={#4Eܷ(GW9݌" mIU`82^v&4deB䔿+2]Ng<fs}b3QFɏ4z)ͼ�& & <0b�pK wt^ǵja]gSѣgss./;#O>d|lEG r粠IwCսP~VkqsyWC|3z'ǠǤ8M]KN<:i(yFgW+)BW=k`-yB3Ҕ=\}KIŽNE#Wp-'_e>32ke$K&D\//IëItFcl!#q"8@0:\ϱq<rc9&$Nd�0R䇭 WcTѶx{VeM_Q|!b2לC-N!^-_G۹ˬCK,4 f4`QI]i 醮L#h3u>*\LVZSHz>R$>.=A 6[w82UwtJw!,>E>o>!k.{uڡel4qV^2IPf1H/~a! `jS�2| }tϊpv:byD)w>LkV t ,2. Yry.>LeO~TM#c[Gr[YFD]0,q J)k[%ll E{RiGnaNkt:4i@B@L)C\J>f).SҀc®>ȣz.ZuwIe~*i^*(AOrQWY:ȎZy)ɀs 7 QViAΓ*Ж[bj<x?|cQDI{,ےU,c8|:LCi|lh[Qܶ ԯF媕~m0<Ja?yJXti{r@2E YgU|%!H|86ݝ\}w}37_8bܓ# e<@)gé?Zp^^2 p3y pMӒgșV^y3I`x3IP}eȦi@/F$O1Cٌ&HS"1"ޱ$H)- 4r>umG2P.!qjQj1 xFJ#+[;qbɾB}@w\%aP7Zkmwg<;z#6ݠ5GnX=TGWYG-xXS~H'+c\otټ$h0I`x5IS0~g8 _'7aˢW7`9eYI˦p8 ~ã)Z}Y-[ p> A.щX4r>uTS62e yIEM=-BIy?aF@Tn:K GM4G+]y{C,<@fm ʶlCW$ YzBzV>|.Ze9e ɀY*zYOc$ q}mVn XyBҋV7h0I`x5I�C$FtC0g.[ `^* ^D}CiovGyЏJD#CAB8^tJ4f/5V7Ok]K9GYPL(u@}uGoPfcz'ش"Z$ͷ$zU8@ z-i$#y^!ȯЀ'h(Su{[̱<LaTQP!^V5kXVFྻoy< sO$[]QNVƸ6R7bK8; ۯdh0I`x5I(u>;„4XG9h"HuQ|r>DU]feYHwY1ZmVzw9Q2ߡCܪo�t?X}ˎrz3BtqߥgiH4rm;t5KI5u\ʬ}x]@>ȡ^i)! ;a q0I`x5I@JCF1{}1'b"1b-G-ޫm@:y=/IëIQX0WaܮHQ>擷}O˛#ҋeWtL *`8 4ޣbf0vg$`0Wb< X^G_? ar& & ```0 & & L I$`0$0L I$@eeenk&  :m g0jAAAt1… TQQAϞ=}ߥuDңG$0$gp+/| (?o޼0~:UVVjO>VW!ߵkD1I`0I$aBzk,:! >|oߺ/^3gЫWtIҸ $0$sR$VW�yׯ_kYpu=<ru0I`0Ir`nHH@fI+ᩐۏIII~B}8P$OK�y% z;o ݶY 8Wտ!& ,5_@G_э)+`0? I ]3${z&(::Jk StL]J{K72I`0IpS׷߹IdeY3IHROy}¶˛ꒄwя? o$Ait>*//,.L -ߎqHp6w~LLL=olׁ~ۨ 9$8YY֕ePs8.-Qd *_RqC�/zW Iwca%� MͧB:Q@ˎR3)l4;vm}Z=h΂Բ}GsremڈIII5n^rrsFBܥq&3I`PIBQrOz^O'2O I7ׂ49.b>v o$nߠa-h*kJkz TtN H7n^SwJdT^ݪUm_I²eˈDCkڜJJJu[o۹wFMZy QiII4g&5iՆ6oIP^~w ؙjw+ԅhE{J j׹+}۸) :?jMHBBD?#1>}"ZOhpWeMJأa8޽AdY' ψ/֯}nL7C;SI͸+*OJgwkkɐ$`ֻyj]͒zIF 5[^Ie??⧯(GSH34H{vQZӾc5wLCn?I:ÇzR0thZj5%%#Ǝ4*(,YӪ,=[TV^NEEEl*Zxw锕m ۶s =SRD+׬J?itJMK4xH- "yD_]uiQ˖DҀHi DS]Q;#{G$[7"]ꪨa/KjERNT\LԼfص+IΖYE3ͣTތ9= a$@Iag`\ՌïfHj OPt~e?ŠT>~I%/|Dm,w&z`zaJɪP;RRSfέ;ۡ⫐R?T;/^b;QfV%Lƈ2 P}Wa l?O3kE 'i˖Sg̙gлM IVԵ+R[Խu�'!i jJv yD Gȿ QFƗ8 hVQ;#YD?Ǘ_9 QwtϟRYʊg*|r(+"R/~Oi&C�%vZؼu V ï޵ۈ$K/Z=$J$b_#啿GSSVlZdw̥LK|; Dw`(tփbTG,P ;mdI :%Ó<m ß ?l"hĘqœ8�iJ0jAH#~ $s?I$.U@UwJ9VY:#xLA}x3uTN7!|G~BЇ>`7ąSfx:gn!Iz|ɷ(0됷I@?V~ˆWi(PBYAV9ESXR!]˧YnD'  ˤw…EѶqA%u@z3ar" L '&K %Fٟ҃:}FTj SWHD6T%*h7(yXd`kIHI>I%ќޔϦ x"~K?0 Aw 5,I!Fb23tz]̡yZH)t)<s.ߥW.+Fy(!1Q3}鄟0/rXF=(*:Z5?jarE`EIWΨ<�Y4?oiS$a)bE<pZq Äiٖx,t%H0~hD-FbR'A$8: ?WA[[5/q!DԷt4_*NO_�?oKH¢EDmT$�2ޞO$S <*@:}"L$L~_鑷I@:ze%/BbX~,n;i?O<IWII Z&M@I1fD ~] Ӆr{cRTBxDRq?c[mddfftӫWtI0Zߐ*uԻwYfĉ]QHJ/+ugwVj1gg\\%$jp ڴ +僇ѷ?] r}5amacqFJ1mؼE. 0óPm[՜+KGV,�_ohIxhܸ YHBqr7*I Ϧ ݍe7eC& ϟ?wYH Z p+:F &O Z{KȨڶc 8y;LF p|^Æo~m-pd޽o(ֻD [/\$|߈t,-+e`% a=CMpS R4c ;wPvv@\]Y:_G-/g+cǎ"sYwt?RHBf_Ӭﯨ ʼnIe-ǂATބ>02R"M@F$P1ѴcVIߗb@QQ4O7CцMkB9:t�Lu=&CM,h/Z0\Vr4a`x%pB2eB&??8@ӧO\^9F]t/^,`pfz囁ZeNK,sҤIohhfڼy%?& L$7?FJQV_ kBq7T%)M+CQbSAD o#Q= :v0n$p)2eegсC]N4wڸi= 6eTmd7IBO9shkNezilΞ=+Ρ333Gr'O[x|Ve[Ҁ #p9~8 4]=0{OHq<o<-Je$I}]=)\O1D#MPeqJ()=-h$`.77%@F$gӑz3]vO Fv0 t 9sO0*sqFŹ.SK[YʶkLL8If˵fHJJ2]F&kL$8&^SyT(o0 $;LߺMz$WS!nQe}d +q.eYq'OsQc {sz6�Rd\tz{qF3c$D䯫mz$fuWS!_ЦIBFFF¶mD ?se 9e%_#[ Xq>|K̭Qc {s,(W8Zm:ރ=ut$ -bmRg$K_'͐WS!C$5Vtt0ScyuJLLQݻwE:<g F޽{E>{i9F-썗ϑ ON#+-[@5kX`z�ϊIb'X,uB@ܫWtczx*sh>6ۅl1�Az%ͭ[J�هA 9 K=zTaڇO|A+&M-Ԧe,tR:uڵkQ,DA~f`͞ULp+/eR'$�AgI`W vlu: eV%T0IBt#:q6�*ŋbǔ}1Xse< h? 1EMe >$;`��_ 4&Emrrr46Ѻ$̋t0I`0 ǡI.t0I`0 3& dr 7I`*$`0$0L I|p!pK(*8dIIIx`$0nB޾}`0n-ȨH HS.]+$ov$p (H}Zz~>~gCy3-D$~ƒ]w"pBA-Wq5?iؘ:vA~nkϴufѱ'E|`0 Z$({(~{+CRmaxL==$Q6ҕ *))pב;RjZZp!nK˗/=qqqO?yL} 9H `ApT޾{+zz 8sH68/[nXa7oݦѷR]鸟j:iVj۩ 5nъ?2V5Sڶs'ҍlM$\ZZjuMU ,:rf<6Xz h^� >P#ǎQ0t?нw{+W)M95O;h嚵Q2! x=¡y<09" /CMy IHMM} E~PBB]$K"IȠ۶sR`\PX(\I䈱D[^ͧUkY]3qt6uώ$%##S3k񔑙)0|XڼuU='M.F 9P4|NlrSCzt\ C#$[κjY2O)KYZ֩A(ѹG/ϣ>7ϡ1=TCBI@]Lc&L2Xam:u*8eN{PnеWoJHLѸtkQ`gÇs%-Va0z֡q95W},a2! r@jGLLziYjΨ_}g! }#"\nBm$!++C@/M7o yv1mںDz GtPX|! z}]CܑF6Ȗ3\#KB6m?X}NZfKVPٰI)=x,(Ix&C?/uR;x2Md:c&5iՆ6oIϠ<ўllI52h Fy.{Ҏ{hѲ՞ٛy7o[OO} @4;?a~8t4yh@L6O[8BS Iɉj$TX0l;_>ϖFj§e.$C_FU(E{O<kbIЫڽ]S`t:}m! xZؼuDӕW5 *̬,KX~2(+Et*1 #::޼ycWYZSh)T sЌʭ0z PFp0go<0=y%,w-ѽSٳ;.O"DL>q/8Y<G` cbJ75͒'tn/I BbRQuF@c`?2gT̠0[u訚]Oxu䓀?tX#Og-CkrЗ R+}F'̒*v͆;V> ߭N' W&$+t� AWz�uR=K_(㭥Ѧ2,**J,A|>L30zg_3|]}FVR?`Ys0nweI_>RX>]9}31<Ui {HBjj E�A@XDlӻIHrS<S!P|`Vްy<& pR /oR=Z {vwplj˪:Ըe+)lu9ig.#8lZ! kF[E @kIyvRƇ 'һ-)1L)OSVzZShf՛a LDO[ĈS=H1UU]ϡ°}5xǍ /9=13p^$(q" I`0 1f�Lpl:�ڱ L0׌ nM!OSZ:Cxx'H=W_ ҥooTmNaz6FCm/]B-ڵ׽?vz{F!2YΣcb$'t-$J,0Es @X._󣰾a6]xx8UVVUZXm)*:Z3NXj =03{F=̹Ϟ@82j=ȨgdQл?7ݰF(uL13K  o! .:cpL)NLam0,04<moP|X0֭w_:{|C1WCB_F=|6F)n|+=?&ks}mpw?'hgkag&I&$wOGV<~p=s<>ˌ͚ <iT 'uDȊπ | CF_$`nj bˁLL̒|ip]O7?[wV; YsQjjS7*VXV ]ܹsGSgϡE �k� _`Hk@优$0$  V" `0n& p+hRXx_!r3ݼfzy0I`0I0I`0 Z$ν;tm)w?O?|YQ?k'l`aa~" g/G-5*LL$xIJ?8O o% bp2瓿?;vNh1׭uc$3H[SmǏko޼{\vMԅV1I`$i$̙3zm�{jfl!u,|ncrZl*pC8cPgymύIILPvP6ꠦn׭HӐwBb%k>" ۸aG{%A#$teԪC'0S6\janԶ$̶:w!f_?{LZi<GFҘMuNlj12##Ǎv/FPyg# O<:FP[f/IϏ]{OWC]Ħ' 4#F҃u˚`T8ȴ`eqNPyDW :Ђ%Kc- tO?I9NcO$a[)OVOgkݡJʪ! qH$9ki[vMaxݥ+A4lԘjdJp |/_a;I¤iӅ3@K3(Ξ` R/c'DKISVn!HyyC+V;}#sTq̹aԄosr-xw֬ F@ G碼fΝ'hE>s抭|#&V ){A ;A!{ajz@6l"a|N ;)0uփjCKV?5{ m[-m8P̬lԣ1²uPx+IWR?oߵVfmY nj^ի:Eu3_7# ;M%`Sg=LHkH%֎nt))&Ҵԥޑ6mLEsh�DMEMBR[>1G}x˗/iM|XFDEkƐgIi)0>BOeyA]޷*fcpK^4Y; ,b|bvVaICQ^rF10tK޽'Zzk'UA)3CV$.Voԑ";խ.Q|O öחAQci CG<!MƴDx<7 F H[4C ]1e$ Cr# Fz=H)+T`A!o*i3gۡt}8uzbk[QOD^iA}'F ^AXsd9r3\3g0p]y'IV3{  tm<`9�?$ NVvì ζFu:px?<G)TTT$Pl7GI#az~ p^EV s:l~Qǖ2IP :F`IЋ\9׍ce|jZpiZ~2k| v]tn=QmCh7"2T}̧}a h/g+Aicy3HlE2K.pX01CO+i+X=MbE':jzi Iǂk,lp6J?9P"֪[vv6]JthY8C))T(1CnunuMdZUΎIU+6o)~-#F1IИ;22ȱ=$֒W-rU b_e<FXGyˌ3, wZqQ挨' 86y 8P^f0ѥgoߠB`ГڍŠnkpQXn$dYa)H]@VvJӶeee PGz OvUd@b[][]/HFiPaZ!윰a\_I#j )d71yf! 0eI�hy -<#9Gq;vI8vk6:MpTLaCs,- ֖~cy)˅JP'S Va).%K\R[QoFbCS'j uf5U$tFJkPęi�b0zNoZȣTlQ"Vz$x\(ɓ zߓ:'$᷀0#u=^qϸwxJ+lkխI{ 2߁5pn4lXxz*IP}C�0JH3(=$0Yخn!F0%S?}Zps]IҁO# h| {$H`b\(`�((O8A@@+&0E)$A2ZÞw!ea+%^Al;/y.x\?4ix<8*Q 3XsI³g !yueQݻ,;-=D1:\=#u=^qϸw1oƟe/.ֆ` b,O`KOO r\IIPҷCoю[~]KmAzXnUy>yZAyV((̥*-+;wo pV" #Ff#u {G-&hx3moT7& L\-X]6*XXX$`dm잿xfQTPDӡ% Q.]Ek); $ *);'CyYT\R(p+mݾBPOYq{&6@[MPQ<X֍IWl//caa'$R ¡*_'&%nLFbODxa[El{rDkAFf.ө0 ƭkP1V#u {G-&hQZۛ& ,,,LB0jg~lPTQ8~CӮ)<" H]V@xi[Fl�Ȋe%BzF eSnn]Lwl˗/ZMn7ܳ|h m62G[+ޞvSsLtwuLXXX$IsV"99Y(*'-[7JJɦ&Z0y OrP6ꀺ"/ȥHYBejݺ.](ZMn7ܳm;mFh+xenPz9$;qR,c$HJ&;J] !v4"O01N�sHc<m1mLK9ZHL~ i\(AS'3ZMn76A۠ʶ\=WYe*Ҳ}GnLXXX$!I~(|F&Ƌ_IJTmKwnJ(3emxa[FPu 3#+DAB,%K#t#y1B8O111z5{j;Z7pϸw@mF6jmonj |מԼM;p f96(P U% XkuXC#K/m;wR.ݨI4o"zc'H+0I`aaaP$P4HN[ YQEFX>LwX}wp/;R4RۖQ@)뗒$DL\%$Ä8-_R  "Z5\/3m@mjmonj |񔉏3ImEҕhݖnܤ8dIVӰ�nP􃇏8Pjj 'TǗ!LXXX$1Ig~L8C +=dI]/޶ BRb(acif Dz1`䬖ng;�eM6zfިnj Çs쥀/8%%vb+ |U9ӠqSy^)!gsrsA c}LXXX$%Ig~ +a>66N9E{Jc/efT)<uGF?!aO!G{Ľqx3mW75\&c|X>:czj 0y:yhj"H]$IB((tV0+/~qn"G٨ҼlT7 .jn?:& ڴe=AxDǃnjכ#u=^ebboٶת%Dz%[ 9qQ:#at:}D2I`aaZܧ^]BpX&G98w$EpyB]խ.MMY?Ⓚ[YF[C]B v1&NڈYuiF4d";SʛեuZI¹sTPX5מxu$fnYa. +;Şasv:qݻOC u]l7 XYdJ*J堫b73|$S ѷTfaY 4p 1fX] |AAi`{@JV`g?YRfR2CSV(RjxB ͞P3~"I<x*IŨᑑbr[wDV`z$~}vӻޙ?(Z2BhЉCP6ꀺS7X 0ǻSe^qI5~\Ne-Z\+pQ,@))0<{ΣXt YʧZgdf`\$,Fuab+ʵh ]$@wJt.pHP4H�Fd:׭fuܣ`=kJp&ZSν{�4kݖu&V ,?~N q??qpėW}?cy"F-ZϜIֶ>Z#(c8v]ƆE9_jzQYSFfFlEӧO9G6 ZQ,ްŷZ[DQ^KfV( %zymWo! ?VVRݤ{u5}߬SI2ybltT]R\7f1:;toB`:g157ЫWKÂ@>G#yƜy^XO޽_DWqh>7|XK={i4z)SRTuA kɂB)-X6nS  m-KeKjٮ3Kcb-Q11l�k'Unt/w7o^ �0pZ2" 0^uY|XxH"1b䒔B_ˣpo5వ܅1Om.|΂E'YQi1Y޾}K 41/(KB{~b*S݄AKV X* ,*3\?R7AlN0,+r{HB40ԽU6{i(Y$WZf_ݼIzXUDd]vtrb� 4|edfQ㖭-d` X% z0գU{ I a ض i8T"L^r>9?fOz W=$ 5ڊ}b3Q: 0U$Nodu89sٜXި$AY>DR:0'$ޏV:RTtK ]A 0�)lO1˒)i Zϵ&$- zaUuFLPPp86y S:XQc6h+ _nz I[%n45Gb, X-P X$K+9$;pPX)jG*�4X6H|�#RĨp$m0u]$*pT�4E Fd9tK;JZi\!@iJ<Ԟ;xH ~q~Z}$rr,PwpXEUD^A( `M@хHsknQ C8cF?'o�'*=*͖WV^.a'߰# Z#,K\ZxٳV,pn:Hӧ5?:QWV7͊5kEEg� �'f((/eXр rQjV0 (o$ Zcs-6Wkɪǒy3 &G6լn8:O!k>4%b"[ Ln*Ώ?a<(Sψ#G[}(_ 0o& # '&dǦ/8a⤤q=XeWJ$xD҄ez ,,L$0܌$a6kIeq,i~k"_X$x`K,1ݰbIG+쓀L9 sfe$IMI];J$c=8;h]bh& ,,,L$.<e{Zxu]7w^9$�gΟ˳6o)0vdvi|K=^ $IB]ᩏ, |vZtu]7w^g$0IpI{P]�sj$j7& LXXX$8$t Ei]�ej$j7& LXXX$8$k}P4ׯ(ur;͝nL$0Ip:Iu3$`$IKIhJ A6<utz:u&h& ,,,LJ ۃ$ڳo[rn 7# ԭ>@ݘ$0I`qFEix˛EfV-\:oS,~S),>0/3$0Ip_Ba7?|vYr I>]={B͎p!7((q}iU;]MI$w;i)vNv]ML6;SE =sA(*)$A/*Kwc3yHx`FPM:u7Q㖭A7oa7?{p5$DڍIBݓcҥ+ATT\L%UhFgH0Ժc'*-+ qZ[h鬺;y3Ip;2Lx_PXHt ѼE$hɊy@?}KfY_D&\0|KZ`o'}IwZZ�O;mE~A!v]$sJK˨Af8(vF 1EܧO;v!F7KVKbs~'cQkZERCŵC)]gTnMm9aS|owE9yc4۩GOQ.0;$9k9!8sֻY_(0z3{]CaG}:U<sdHէw]|@/?e6[75`A|s>g/dpjkڍI{|1t瞽4~S$V"LQ|VYR쒈~~bKel0zYd)mfb/ D@(;6#%ۡbdlj$A\gf}uvIлWg (dI0t'KB黦ͩpZ({ dy&cA<]{Y붴hr켖$<Z<}􂕈7o_SRr` [NܡWlZr$\?H/Y"t6CW�|K.e'Q3yLJ$I<:Cǔbqq t cE{~_Ph{yNeGCX`0a>?}ZW(r! eVY$A^7#ZΞ+o' iL b5Sƃp ђ+$`^(|-=ilcW4nWBDž%hhqiyuF٨H�3da82ؓ(Y�I�.]5LnL˒PRR",E0I% e@'}:1aKmA(Y 1Jn֦uZ|iIuήIP=#W<o`/F8G3o(4l~1:)-bdI@3E<^E` sZտH#!+'4d@]Dީ:)GbqRV1-7FPG-YYbhz{s2I)(V1IxD&N{@̙+ૂ/Ծnf1*?[<Sj$O/O3u `\1G~Iax<d=ҳoֻǒGR?)G}'B$RxfkaӦyfF,ݿr6M|EߋϢٻ㰇9xn([$M  FAsï6nfk'0&HX533S̑I%ADmq,S4n#`iNs蘮a2Ų$ FSΞ:I0zFzC FydCb<8?pf׶=)�6Yqf,nXe ҍˊF } jԬԨkiIuÔlq<{u:p!ZyHkOD-+;őH&cx1iGzb* Fݘ$=Ip7@bv" F2Rhw3ۨ 0B3IbC^ p97PZ1qJv=u `\aI @9%caF{^QE_7o~mйG/ڱ{S$l!Rf۩ V,\aAZ!5-U" gtzie+"ZO<LETPXL\{yl5Ŵb1gZNxIo_l\EkuZ$^$EEEGt&߭[AƖ̬\v6:&^ .懲QԥuD`=4`uZ$I ((tVq=jԼPǤԌlj9 ]`XTu/j7& LXXX$8$8//.ӈ1c'dPq{i֋Az$h& ,,,LBLE# %;.NQu&h& ,,,LB`ww�n͝nL$0Ip IϷluy#'j7& LXXX$8$`n[zzz@ޣAgw3ڍI& Nn &55N�w̙j#bw;Cݘ$0I`aaa4K?Qrrr�.88;͝nL$0IppB6EBbgCw;Cݘ$0I`aaa o5<泲j999bZV7wQ1I`$)$`$7$q$IIꇎ^p?<Bc+WN^UNbg=l|~W�-8S1H/ԌǖHj`&4JRFoXw 䎝bHm.] m & p4|$!3+ZmOܥoPqI -YHSimTj޿8<RئuNTZVV-aSne$9rJ 5ưg_CQIi�_P0I`0$XvBRg`/I̹NAa!͜;n+.3W p}MiQk/)57[HGXYI%rÇR$zKu=uuMӧOaح.YhijqFy. zaYٺyYJ$kߵV9$`Ps,Z? % ᔪ%}xz|nDW|fQ((ez4*|TQAc&Ltt#Q4gvTT\lw=Pa(/DVv;׾hb `RM5%5,/e"(/~\C7UdIXv=qR J"L:IB)P'GH ʫW]Vdy-5hrܼ<9FrGWRR*FZCV[O!o$HP㖭i%S+]n.Qk׾#Ue;%mY;.%/Y+XΞ+o' ))b3$ZOڅ0& aᔐd9wȒ $5-L$LDzXyͣDƱ2~ּ|0YwWX7t=I#fmQ^}Lꓠ a}ʰo[%JǏB<ra}Ga'R οicH L7[ & .g=> z^\J/8FEUvTFJ֒g(Aq|S0[Or@D@xԜA!!",wޢ”:fҳouֻG9jXaV4 & uJ]݀yлnXEBib$`s=$a}4aT�?c @Llfh%#;v ?*gE` Цcg" 'O6Cs,-D ΚfR ?(m@`F'K\A(s_ݦ&T^`0Ip;�Q~'8,RatS/LӘ$@i��pW7(@CQ$�fU|pE8I${/�ڦA>͘,LUʕFyft=eix.Ŋ Lx+IIؾC �#IW}(|H[aaKa`0Ix0Yc*aaa$$IL|yz9,,L$0$0I`aaa$t uӭ3$0I`aaa$c`ث;_ҍ)+`0GL$0Ip=I7w^CO}/] 3cGw_Pɾ4?Rt~m& LXXX$$&JKK o ˗/(~%UaFqZ $>:.-Oz22VN/j5V[@s,@2I`RIMpeeHf= aFqjuWvLI0<&6ސ]$�K<5ʃ'[W7|t /c"nje$>L##HoGNNP-7/K�3SӴc֊Q)R*aحmΝԾK7jҲ5[HXLu+3o,k.=:s F+ n YH=׈8VNS?\뱵m+_l9& @2p08:A1gddZx5;>FbUk9zW(=2âqy4*қQڝ?5RS2c?yf;RKBc>l,#m*埑)Q6ofΓMԴ4Qo;q2& @)J 1Œ:Hf|^ŶkGn:zi$ +)7:N:Nԋ4{<S*\:"oަحO+]N#V|W^YFŠTVVF 7>!!I w" |k IxTQNIp$ ZqX)Y%#-Q_g]l<ȡT܀>0>=O}En* t*H^COVʒ-۶Ӑ4DEk@mS|%Ss Fm L̋+7q zJܩ0I(KBffPE !V�3'aL+EeC* v+9[kzS}RNoQF3zS>>>*HaȌ<ίo_|״)!VΌ%A$x%Amw8{H:8PbbQM܆ZИv5gW=W+^8^. 5g_ Ҹ$C+'{/bRjݱ-^JR;]^`KK$葄*L1ŒW7ĊNpeI9lecN~NR4aBUTTP\|<M5i;s!76W%Y^V4$dKI|.{sYrO9 =OlI1f30Kp'$$Aϟ-jKmW$AW_ӁÇ3i}R*rr(Rib+C0Iwl̄t;UV8v]QPHXY)Ih1=.~rjED1Œu%)~<d+1:EG&{9v̙÷� =AANY{Б+B~i?dwgYMZ! /R~Ľԅ-[NϞ`cnZM/,[ڲ# .$A(WHEfΝGZF-ZϜH]'Araiڪ -Y޼yc}-sU7R5-[tͥwGy>|ӡu.srw(  8Pf;);# ّu}$ 9[E4c~x�fgo{oBfدiVk[Y[Ėc HoB~LHo$JKG{'ȏY#KO޽[-ݸZz-4YLU@.X6n3mI8tPm6%"*̨SK,hCB{mվx_חbqFy?dEZ£bb,V yK'}/ Pf{k>a*<;% |={V2~ JgZ2џ].FeF&%|CO[қє<ŷWa嚵븈)h1r:|}ʌVj+,`j]>(r9[%`Y#$e+G%%b3,USuJ@d^@6k&%#Zm$2= b#�VT\l u -`EdJ% oAm({mπ08ޟAz(ceGeE4~<)gWm3n?FnP :7̋l,w^ԮWuʴzRq" 5)[M+30쨟;$ޡx?~(O><cyTk6=轤\s|.S>MZ6d|9)@`Z `o� kTEQA8ʊG0 -<$dfeQvB:E S)~7SYr\<FЖѩ4vfٶou 1Uk.${pA!l^r1G~IaG%F#7z_SQE20+J ~10I`0$&H\XjSHBd 3<HS4n>,`iK?xj<L\7i:l-A tѺ6HA[<DKY.Qp3jwEŹWϢ�8 phu7kNH,Q$`6 +V2I`0$K"(RNt2 X- Ӛ$cNk$=S~ `7:[xâ�SsV=;{] ((/e(W:i% DA^Ʉ_LbSH/�Z-1c,u\v)ez? v\d0$gYwNn& & .,Bz,,L$0LX,f`xKXX$0I`0$0I``0I`aaa$`$IEGDQ@ 8@Ξ251Ѯ% 8`$J>=#޾{k:?|\rъ($0Ý$I…K(#3HKI>|wD]o$ 6x<\J^~`5$x#IVYKI6`0LXXX$It w]}o}B~*q@j$ ++\=겾fghI;I]oTuaqI8z0ݺ}j#3z;T($x%^�gL~z52}? Hbi]ԪCG:y]@hج8p+ߺR,TRu�ά׹ 4{B4n#3yhTۍ){uNljw$޹M7k׃Q@Dح7w9IpU'#<ͦsU]mFyŻ<$$%'SN]̹sTXTD4c\~58| #v7M(ҲjqCr+c& ΑKWhب1u?y*ED7o鿊0_XdpF8QPKrયEGGsf)8Hm:v|/F3jC }J|ιqVgռ#zIH}yنَ:Ԯy)m۹wFMZy Qii)YыBp1l;/tBȂߎz}여X)]yV[OZV;ґcǭ=ve 9sr7֨^zyw# zi|W6lag꒙MzR 8FXVvnf[HԾk7/( 7kP#2QXa&A� Jlz<0ĩӤ?ֳ_y`؅Et*x%~]bWPP@+֬ԬM;$Zu׋y1vzΜ;VI Ui$Ey6Aj_HE[Icq~~4vd*%:KJy%~瞽4i=~D`”$g4|Xͦ5'Y(=VزTV:82cb-Q11<%'N^BS;!2*""tӸ$i(lz< qJJnz(XsXͼ>"a5Zu׋ҳ7=xr"ԮsW=olk<k|BpC> _BzF%{~b$$S1#|!KT=�"& 4ifWٴF$wFVV@G‚03y 8sʿ fv"C=$!=3:uI{Gbx@raa4ljܲDg,۸i  k\_e=$ `*qusxIts$#Q&X w i_9Gʷ'(Q<'Af|lǏÇBra}hԢ><cٓF^ 8ac! CG"f߯xLSS7" T5I(++s """ lz<0cȻD*7!:vNwQ} ׋,&$ݽF%|[�IzWQKBm{- /y"I0z>j3g.PPp86y S:5v J/D}=VkŊ\qCƥ;oDIo^;|OYbau0KXF텳:ظ8᳠L9!R8fca"ujuSADDFiڳWXD&_mbz�O# X_t:pG- 'OPC-a87iV`4Cs,m3R$^O#& R߄goql6/eC Fy;xHR ~qiܺz6~V99^oo$;@:2kOW\SaaKp}flz< c V1�&`1P ٹG/=H} %L}Z_ 6j"gΞssxw@ZA:.ʀNq)OsJPӔҌ]x,\W$^jpVupG`|RR *T:Fy` L+&0E$AZcem�y4aQkFP.*YW޽{b~U'k&0`kXX-Z$/06ӸVe$!77%{n|O```=<򷍾[ݢtzIp&\B\;w2\}o}=$`0K222 Y`0 '4í$`0$0n & QG$K w#$`0$0I`0 & ,,L I ְev3ianGiw& ,L$0A4b8@Ůi5شuʶR2<$\ &iپYrrs-)4~Toc9lg6#3S<¢"& ,!ąI^7]RͣE˖ӸS8MAZdi;69xP%%b<|XKai_ߴY}m-\DeP 1'QE뎝h٪bG{={v';廦ͭ m.dy߼u[있>]bD9ѣGb2c)Ñ'u~/uK$I6]{YGl[`fXQjJktzed~{gIi!U>1y[ūgΝI\J;v;މ;w56znuiߥ5JT?jp?IB!3ZvMQFLނAA4l0XvoJb"% 32w+7^~zURI`85-Mt>MN,�tmfm IMI^}տ_#0qt){:AWXΘ)Pْ6E=.YR~@.]rg`ͺ뵍{+&4A\g͛O$ecڥD֘$8Q^~M7kQcŇ}ڱ:oKF8C<joաݹwOnK$Ci5[3e4Ϝbl5냙kl˲L@tL ڍ,a4`83 MtȬסkwz#KJŐc9/++ҨPy}B—y>ze775& F5_#Eh.KxfVe8#!HSPP`<ytm&ukGHB^5KQϿiؘI3%=O1Ice 57ЫWKݸrS#i5[嘸xz|R|z2I`8C)L9*1_TF 4*:F $֩{O \^^n9v(Uq2^l5KҡY> FNE)3>Vp 9K> 3{zFJ _P�/H1zlIpgfƈs|~f^HVIkT> $`L]co=$0sU9"՚'1%Al5p%I0_s#DAcEkO+HV_ݻF#$8Yb195)x e ~;'Qf럚.:1 wz{$,`W8%*oM}f]t -V> Xz9q[$LhWy$}\=1>q4f[@T 'An [6lb+P[$AyXi{>cJOUPϚmyc:IB ڍ›sarާ/Ju" F嚭rUa�~iz&dpR35(QRg_#>i~+4܎S?Fi.]&<a6޺c^ٶ<;Ҙkq+LG1I8xz/t*�I4f$'t)}j$އ ڽbE(y&} G[3q& 5̍Âʙ^'OиIS(/?޿/LKs,r9I0*l y]1pHTE2칦&d`@qU}qqǑ:~ϙ�Mzn?}Z̽g�,N& F嚭1;G<mBftMM$Q_rZAa_J8n`aa4C1݀U@J7I `$`0$0I`0 & ,,L I `$`0$x I`0 `$`0LXI `0 $+I`0& ,,,,,5HJJD:u5y /$`LXXX6ժug$I v.9n؉uNx z*ݿ=fmTXTFg*si/i\d䡕3I"nj#<2LD6n*eVӋ/T]& L$H2fDz*+_ҫׯiOH'?ۮh.5ySYj,O?Z4L_.] aS),"^yC?<{&�ve$^is;)MR8>s<u]0!#GQvNn+>cԴUZb%K5ݰŷZ[DQ^KfV6uӪc1²uP8Jfjֺ-jߑ?au{=O:w|_E<W[%c=xXYIvBZ0I`0I0#P=ʬMvݹg/ >Ҵ2=GP6:ֻ#Ik~~4vd*)- `wjϟ?˗0XZ 0GЀMYvٳ�4*~QE*7Sf'O,ax'Ma)S=$pIv6лhLLtb�:עb4QO>}2ZOeG>BY#ѵ^Aehafp欕Ξ+gvܣYaeP^oeVZ_P`9GDSR4(LԽ'2I`0I0ez{JVFg'|*S{ZV}$ zaP_WK@j ?~H>|g% C#̞<77J7 nLA(},plOVy<~BJc=INM1I`P}@*GԪC'1ׇ!F%9Cq{[YLfDWQO|̥ fR;obaUb%K¿A)ֻv$nj{%Ao\qtLiv[~$0Iw$ae/F`=79 ˬy b>_<鴙,& a'OwmgМtI:RCıټJP'Ѣm{':(vn�|�ɞvSnte{}=Fc-& $\y LmԄu&W%-0g ma>}7$y>- 33geFy)Eǎ7Iֺ$D7JLmy%V.wHmu{UN/X֒'7$AZc1I`@,,,,I0%g>ca$,,,^/jK(7nFa$I K/>X90I`$II & & ,,,,,LLXXXXX$0I`$I& L$0I`$I& ,,,fŝ6aL$0I9nݝVzWw^9҂3ݹ 4{B4~I}cZ2ޑx& L-It%1$sGz7q뎝Z4LܼJ[mq1I`$A!?VVR(%$?t:v!_b%dW)i-Ԫ}G#L-9w:tN6nJCF\1ݘ$=/E){ ęy2SV;P8?1jfjֺO9~)Uq& _g`DYv=qҡ︟؂TK&mViϚM<ڻMB**LH\}fGtPGe $Ay/JyPn/_UV;"̻?dEZ£bbh_gOe?%('j?۹g/M#€ Sz,Is Fΰ0I`$$iB% zϐ} +,OhIW Fqyys:ٹ>}rn4iڍI2z_le bT- F3AΜo?Csv .xmXΑX$0$8SmI’Z8*`nU'aZ#r# 5y_lX(Ï?҇̾{o><cٓFb@)8acpLQ/<=E""hY5$0$8$tWչL/{- L$/j3g.PPp8vݛhvUb%K¿A)ֻv$9  vJ IIBt5% 'OT1zɡ9 c^k)' F$HtC!ؑw~Pڀ?(mW3sʾhqBc_8|tO>I�P'gϬ|NoׅaIIB;>-LmԄzDw恎t͖ 8VZ$x/I0z_FRyбce�`Vu9L(�?~S$fE^ pT[lŚ<QG)w$ V_==VU& LgaaW)N{rC& L_L`UV>` F߭(L$0I`aaae0ݰbI& ,,,,,LLXXXXX$0$0I`0I`aaaaa$I & LXXXXX$0I`$I& L$0I`$I& ,,,,,,L$0I`aaaaq$ 7o8woEL$xIpedf8lMHHˁL$xIW. eYy"& LXXXXX$D�L ( & ,,,,,^F & LXXXXX$0I`$QO7DDE0I`$+u\ĵJ$I ^$ILI yef$Ip& LXXXXX I{/Sq,l3I`ROHBD.]@I ARrK!L$#�%A& �AxI K=' JG$0I`aaaa$!IzH& ,,,,,^J>I& ?k23I`aaaaR͙I#SFlt7xbu$A*:-=MX0 Af$ (`�fI/" 7& `hIB=& `+$0I`0 I`0$0I`0 I`0$0I`0 I`0$0I@呿?;vbRyy9wX IӧOA(++?2\7oPXX]vM;wZ I' gΜ>۷o6bEM{ho& IǓ'OkvF{ݹb0L$x IxpI(//Ӆ2mQ9$H}]4PZ?UVV%~_m{HwӁ;!]r:w^-۶d.] 6;J4m:n$SHBPp0uӗiX^ q{;qJ@9ۆك�WӧO;OMN@;ׄ$?L㨸H`:x+on6ggԦMuur qVԤekZiWPm(++۪?dSkkKSN^X<W[FfxEELܝ$Q6`*..R$BT:g0__ЩSD;0<<<jRwL<gQyE.3 {tF*-9Ew<BL+l9s&}7^G?A}4xAZdictBKI;߻vp<rIi3gǬ=JgͶza9 /XIMZm}^,v]^R<! 9+7mDK@o·FFnhÆ Vaׯݻ[j*k#9r$)/hџɟD7Og#(8D@+~h皐SGOUPDjL-+n4vo4M9D>$E$٥ -~+60` ~k,Y"H [FPΝŵGD;vFY,  k-8<|fnSM]Vk1”#)u~/u/[nk+#Ǝ׫)&ש{OMY=槄Z~8F?KMvJUڱ{6:S蝻4=E׶j4lO{^hLװyK<݇M[M%�'0Ipw>##$O:4đS9t4|Xh#@g͛O֮ {ŋ}z:t~ܹj $qa8{<۷o/S%lԴiSJIIdjԨU=VXAM4/ynn.Ӈ&L+~ ,EZqUꈍp.ȏ^*>#Sni",4,FBh {u! OȱkC3f̠t 9sL?/ /uFĒ\A hoپ#^$WzF_w*g7of\qjZ7+ F',^+V*ՅK /݃fsc>℟?}״9-[r>ͨgK_ŽןnRDDnK+KI6jRMOҭ:vA$,%*_zSBb V$^ t4GHCa8B'H2?? |~}z?EEEYӥ{uC/OW`V(\_jJ._;K^ isP6MIsFQAtvM=A>sM˿KюCGGG+Hohss<]oa rI(’fz>R޶Y/ E?-K+})r_!W+0GHܷ؞+f4rֶfZw/U܋-?*aj.Va1IK|HDcKqi<-+J YX/L�2 0(NjL?|ce9 &{'"zy ` J L3O3ܾD~zGwK\[h{p9@ G3hX1@K-eEw(>>4h 06W^NKف9Fߺu7n,"d`I#88lP~lÐVImzeYdھk7YAzIKoOfO9FfmiϽDJcƉiyZAI>ͼ 5yؒQ> T}ૠ[G]z&g;ƠC2x谔@v&sk׮ [f uEzXݻg9{U*WN�̄2AQz3[TGzHcRmIF9AvEo&GNuIe51~_ CŻvҒc%zݵk Y$^9|17mhgI+['j5Ͳ`h&5%(I0ӜIjΑשg9*cY+X=V5`r2 �StaH9N:C:B05P\J#Dc07nܠ??ygff_#\ӧ9m�Ft˗/a P`vT\[|̤E;-p/;j6ß펤n[hT:⍈CO:FD'.:8^Z<H1P6oⓀYfY⍮9~SY8DZg#vn=GtܪC/>3W#c$ ?I\o0aU^j-Z?}͘3ZAb>$Os&I2:÷0HIMNxvsF1=$�/n_[7ntnZV7<zOjL2�J(ZX/LC=|pl `t  __T@;(O곛=M% KCv8NΞ=K!FF bĉ0e0bĈj2Y<ߧimU>8c5�۸Iw b /V9Mi^j#6O"- ;VDU!j>:݃-lv[`Vi$ 5}VFYEܗ^մ~xxp�eev*< Z% )X܊(?7SOʗ?Rbj|CTK}qqe=;qIK:1\ 3ڻh>$奔BIit,2Ipo\VxW�~+u�2wZFC03\ yCB'I<a_Ltԡ`$%\�rp-2 $Io oL0>rp-`+3 & nkI s"õ5̙3lI`0L$x%_(sg ;.2 & ׇ dpk�"~ `0$0ISlv.t!aL38`0I``0 & `0I``0 & `0I``0 & L $a@ T0I``0 $ hX`0<LL &wml����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/browse/������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017256� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/browse/iradio.rst��������������������������������������������������������0000644�0001750�0001750�00000001356�12161032160�021256� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Internet Radio Browser ---------------------- This browser lets you listen to Internet radio stations (a.k.a. streaming audio or Shoutcast). It supports MP3 and Ogg Vorbis streaming, and may support other formats (AAC or RealMedia) if you have appropriate GStreamer plugins installed. *New Station* accepts either a direct URL to a stream, or a URL to a ``.pls`` file with a list of streams. Radio stations cannot be added to playlists or the play queue. You can edit the ``title``, ``artist``, and ``grouping`` tags, but the rest are filled in by the station when you listen. If you don't know any good stations, the *Stations...* button will let you select some. If you do know some good stations, you can add them to the Stations list. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/browse/paned.rst���������������������������������������������������������0000644�0001750�0001750�00000007054�12161032160�021077� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Paned Browser ============= Overview -------- .. image:: ../../images/paned.png :scale: 50% :align: right ThePaned Browser offers a convenient way to quickly drill down into a large music collection, by narrowing selections in several stages. Some users mayh find this reminiscent of `RhythmBox <http://www.rhythmbox.org>`_ or, to some extent, `iTunes <http://www.apple.com/uk/itunes/what-is/player.html>`_. In Quod Libet though, you can have as many panes as you want, grouped by any tags you want, for example the popular ''genre/artist/album'' and ''artist/album'', or ''artist/album/part'', or ''artist/album/artist'' in case you have a lot of multi-artist albums. The songlist is presented at the bottom, and the panes, which run from left to right, are above. Clicking on an item (or items) in a pane will restrict it to just songs matching those (e.g those artists, or dates, genres etc). This will update the counts and choices on the next pane, and the filtered results will be updated automatically in the song list. Pane Configuration ------------------ To change the panes, click the *Preferences* button all the way to the right of the search bar. There you can choose between some popular setups or set up custom ones using the add and remove buttons. You can change the order of the panes by dragging them to the desired place. Besides normal tags, each pane also supports tied tags, tag patterns, and a per-entry display pattern. Example ------- ==================================== ================================ Pattern Result ==================================== ================================ ``~~year~album`` 2011 - This is an album title ``<~year|<~year>. <album>|<album>>`` 2011\. This is an album title ==================================== ================================ Unlike when using patterns for renaming files, songs with multiple values per tag will be split up in multiple entries. For a song with two performers, the pattern ================================================= ====================== Pattern Result ================================================= ====================== ``<~year|<~performers> - <~year>|<~performers>>`` Performer 1 - 2011 .. Performer 2 - 2011 ================================================= ====================== Using Markup ^^^^^^^^^^^^ Also it's possible to change text emphasis using the `Pango markup language <http://library.gnome.org/devel/pango/unstable/PangoMarkupFormat.html>`_ =========================================================== ================================= Pattern Result =========================================================== ================================= ``<~year|\<b\>\<i\><~year>\</i\>\</b\> - <album>|<album>>`` **2011** - This is an album title =========================================================== ================================= Aggregation ^^^^^^^^^^^ On the right side of each pane you can see the number of songs of each entry. This can be configured as well by adding a pattern/tag separated by ``:`` (In case you want to use ``:`` in your pattern it has to be escaped using ``\:``) ============================ =========================== Pattern Result ============================ =========================== ``~~year~album:(<~rating>)`` 2011 - Album title (♪♪) ============================ =========================== ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/browse/overview.rst������������������������������������������������������0000644�0001750�0001750�00000003443�12161032160�021654� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Overview ======== Quod Libet has different ways to browse your library, called *Browsers*, which are selectable from the *View* menu. There is always one (primary) browser active. Depending on which browser you're using, different options will be available in the *Filters* menu and context menus. For example, the Search Bar can filter by anything, but there's no way to get a "top 40" in the Album List. Secondary Browsers ------------------ .. figure:: ../../images/queue_2browsers.png :align: right :scale: 30% Multiple Browsers - Search & secondary Album List You can also browse your library in a separate window (without disturbing your current playlist) by selecting one of the options from *Music* → *Browse Library*. You can have multiple of these open at once, and they will all react to changes to your library underneath. No Browser ---------- If you select *Disable Browser*, whatever browser you were using just disappears. You can still browse your library with the *Filters* menu, but you can't search manually. The Song List ------------- The *Song List*, as the name implies, presents a list of all the songs that the current browser has found, or filtered for you. The columns are configurable, and can be any tag, or even combinations of tags from your library. For more information on tags, see :ref:`AudioTags`. Sorting: * List columns sorted by "disc" and "track" are actually sorted by "album" * All songs are sorted by the column header tag and with a special sort key. If there is something wrong with the sort order check the tags used in the sort key: *"albumsort or album, album_grouping_key or labelid or musicbrainz_albumid, ~#disc, ~#track, artistsort or artist, musicbrainz_artistid, title, ~filename"* (see :ref:`AudioTags`) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/browse/playlists.rst�����������������������������������������������������0000644�0001750�0001750�00000012221�12161032160�022024� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Playlists ========= The Playlist Browser -------------------- .. image:: ../images/PlaylistBrowser.png :scale: 50% :align: right Choose the *Playlists* browser by clicking on *View* -> *Playlists*. The usage is fairly simple - a list of songs in the right pane, and a list of playlists (with summary information) in the right. Playlists are stored as plain text files on disk typically under ``~/.quodlibet/playlists``. The names are URL-encoded. Whilst these can be edited, it's recommended to leave it to Quod Libet, but it's good to back them up (using ``svn`` / ``hg`` / ``git`` works well here too). Any file in your library can belong to any playlist or many playlists - it's up to you how you want to organize them... Creating playlists ------------------ There are several ways to create playlists in Quod Libet. Choose whichever suits you best: * To create a blank playlist, select the Playlist Browser and click *New*. * To create a new playlist with songs in it, select the songs in any other browser, right click, and select *Add to Playlist* → *New Playlist*. * To add songs to an existing playlist, either use *Add to Playlist* in the right click menu, or drag them to the playlist name on the sidebar. * To import playlists from `pls` or `m3u` files, use the *Import* button. In addition to creating the playlist, any files in it will be added to your library. Context menu support -------------------- The "songs menu", a context menu presented when you right-click on a song (or songs), has in-built support for playlists. Just right-click on a song, and select *Add to Playlist*. This is a convenient way of adding a song to a playlist from almost *any* browser, and even better, seeing *every* playlist that song features in (they will be ticked). Library Changes --------------- The Playlists Browser, like many other browsers, listens to changes in your library. This means that any changes in tags will be reflected in the song list for each. Playlist entries are indexed by file path though, so *any changes of name or directory will remove a song from its playlists* (There are, however, discussions to changes this: Issue 708). Please be careful with mounted media (e.g. USB / network disks) as when the library is rescanned, these files not existing is taken as deletion, which will provoke a removal from their playlists. Please keep backups if playlists are important. Drag and Drop ------------- Quod Libet has extensive drag-and-drop support in the playlists browser. You can drag and drop songs from other browsers (eg the search browser) onto an existing playlist, or songs from one playlist to another. When you drop a song into the left-hand pane in the playlist browser, but not onto a playlist, a new playlist is created, named after that song. Importing and Exporting Playlists --------------------------------- As outlined above, you can import playlists from `pls` or `m3u` files using the _Import_ button. In addition to creating the playlist, any files in it will be added to your library. You can also drag and drop an `m3u` playlist file from an external browser onto the left-hand pane in the playlist browser to import a playlist. To export playlists to `m3u`, you first need to install the Export playlist export plugin. Once installed, you can export playlists to M3U or PLS format by right clicking on the playlist, then *Plugins* -> *Export Playlist*. Dynamic Playlists ----------------- You may wonder whether Quod Libet doesn't have so-called "dynamic" or "smart" playlists as you may know them from other music players, that is, playlists that automatically update themselves for example to always contain all songs from a certain artist that you have in your library. In fact, QL does have this functionality, but it is implemented via the search functionality and hence located in the search browser, not in the playlists browser. Creating a dynamic playlist: * Go to the search browser, (either using *View* or *Music* -> *Browse Library*). * Enter what you want to search for (see :ref:`the section about searching<Searching>` for QL's powerful search options), for example `artist = radiohead`. Optionally, click on search to test your search and modify it until you're happy. * Click the arrow next to the search box on the right, to open the drop-down menu. You will see a history of some recent searches (if you have searched before), followed by *Edit saved values...* ." Clicking on this, you will be presented with a dialogue box. The *Value* field has been pre-filled with your current search. If you wish, enter a name in the *Name* field (if you leave it blank, QL will name it for you). Click *Add*. You have now created a dynamic playlist, via a saved search. To play, just go to the search browser, click on the arrow to the right of the field and select your saved search from the list. If you want to create several of such saved searches at once, you may find it more convenient to edit a text file instead of clicking through the GUI. To do so, you can :ref:`edit the configuration text file <ConfigFiles>` ``~/.quodlibet/lists/queries.saved``. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/browse/search.rst��������������������������������������������������������0000644�0001750�0001750�00000001242�12161032160�021246� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Search Browser -------------- The *Search Library* browser (which is the default one) lets you enter search terms and play all matching songs. It also supports :ref:`complex searches <Searching>`. Finally, it lets you limit the number of results; right-click on the text bar and select *Limit Results*. To display your whole library, don't enter any search terms. The browser remembers the last eight searches you made automatically. If you want to save more, you can right-click on the text entry and select *Edit Saved Values...*, which will let you name and save searches permanently. Saved searches will appear above automatically remembered ones in the menu. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/browse/index.rst���������������������������������������������������������0000644�0001750�0001750�00000000274�12161032160�021114� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _Browse: Browsing Your Library ===================== .. toctree:: :titlesonly: overview playlists search album paned filesystem iradio audiofeeds ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/browse/filesystem.rst����������������������������������������������������0000644�0001750�0001750�00000001077�12161032160�022173� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������File System Browser ------------------- This browser lets you view songs based on the folder they're in. It can play and edit songs inside and outside of your song library, and adds an item to the context menu to add the selected songs to your library. If you try to add songs to a playlist or the play queue that aren't in your library, they will be added automatically to it. .. note:: Since ratings and play counts are usually stored in the library rather than the song, play counts and ratings will only be saved if you add the song to your library! �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/browse/audiofeeds.rst����������������������������������������������������0000644�0001750�0001750�00000001005�12161032160�022106� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Audio Feeds Browser ------------------- The *Audio Feeds* browser allows you to subscribe to syndicated feeds with attached audio files; these are often called "podcasts" or "blogcasts." Feeds are automatically checked for updates every two hours, and bolded if new entries are found. You can right-click on a file in an audio feed, and select *Download*, to download it to your hard drive. Currently this has no effect on the feed itself (so changes to the local song will not be reflected in the feed list). ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/browse/album.rst���������������������������������������������������������0000644�0001750�0001750�00000005412�12161032160�021104� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Album Browser ============= Identifying albums ------------------ Throughout Quod Libet, albums are grouped by examining the ``album`` tag on individual songs. To support distinct albums with the same name, groups of songs with the same 'album' tag are further inspected for the presence of one of three tags: ``album_grouping_key``, ``labelid``, and ``musicbrainz_albumid``, in that order. If a song has any of these, it will be used to identify the album it belongs to along with the ``album`` tag. In short, if more than one album in your library has the same name, use one of the secondary tags to separate them. The MusicBrainz plugin will add ``musicbrainz_albumid`` tags automatically, and may be the easiest solution for adding identically-named albums to your library. Album List Browser ------------------ .. image:: ../../images/album.png :scale: 35% :align: right The *Album List* browser makes it easy to treat your music collection as a set of albums, presented on the left, rather than as a set of songs, via album-centric enhancements to viewing, sorting, and searching. You can (configurably) display the album art next to each album to allow faster identifcation of your albums (plus *it's just prettier*...). Extra features related to searching, sorting and presenting albums are detailed below. Searching --------- After creating the list of albums using the heuristic described above, the Album List browser then computes information across all the songs in an album. While the browser uses sensible defaults as to exactly how this information is compiled, it also exposes the choice while searching. This is most useful with numeric searches. For example, to find the albums with an *average* rating of 0.6 or greater, you can search for ``#(rating >= .6)`` This works because the Album List averages the values of numeric tags by default. To find the albums with *any song* with a rating of .6 or greater, though, you have to add something to your search: ``#(rating:max >= .6)`` These tag suffixes work for any numeric search. The options are ``min``, ``max``, ``sum``, and ``avg`` (the default). For string tags, the values which get searched are created by joining all of the underlying songs' values together. The albums in an Album List also have a few tags which are computed in a particular manner. A few of the interesting ones: * ``~#length`` is computed as the the sum of the length of the underlying songs. * ``~#tracks`` and ``~#discs`` are the total number of songs and discs in an album. Also useful, though not strictly album-only: * ``~#filesize`` is the size on disk of a file in bytes (but can be formatted for humans) * ``~people`` is computed from all underlying tracks, with duplicate entries removed. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/editing_tags.rst���������������������������������������������������������0000644�0001750�0001750�00000007701�12161032160�021147� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _EditingTags: Editing Tags ============ .. image:: ../images/tagedit.png :scale: 45% :align: right You can edit a song's tags by right clicking on it and selecting *Edit Tags*. In addition to manually entering the tags, if the song's filename contains information about all or some of the tags, you can use the *Edit tags from path* tab to populate these tags automatically. Please see :ref:`editing tags from path <tags-from-path>` below describing the process for several songs (the process is the same). Editing tags for several songs at once -------------------------------------- To edit tags for several songs at once, select those songs (using Ctrl or Shift), then right click and "Edit Tags". Note that in the tag-editing window that opens, you have several tabs available. The default *Edit tags* tab will apply the same tags to all marked songs, so it only makes sense for tags that are common to all songs, e.g. album or genre. However, the tabs *Tags from Path* and *Track Numbers* let you edit tags that differ across songs: .. _tags-from-path: Editing tags from path ^^^^^^^^^^^^^^^^^^^^^^ The tab *Tags from Path* lets you batch edit tags that differ across songs, such as title, by using the filename as input. Note that you can customize the pattern that the tag editor uses to extract the tags from the filename: just imitate the pattern you see for your files, putting the relevant tag name in angular brackets. Example: * Your file names have a pattern like this: ``01 - The Beatles - Yellow Submarine.ogg`` * Edit the pattern to show: ``<tracknumber> - <artist> - <title>`` * Note that you can omit the file extension in your pattern. * Click on *Preview* to see how your pattern would be interpreted for each song. The preview is shown to the right of the current value; you may have to scroll right to see it. You can even include information from the entire path in this pattern matching: * You have files like this ``~/home/username/music/favourites/the_beatles/yellow_submarine/01 - Yellow Submarine.ogg`` * Use pattern: ``<artist>/<album>/<tracknumber> - <title>`` * In that case, you probably want to check the boxes for *Replace underscores with spaces* and *Title-case tags*. * Note that QL automatically digs as far upwards in the folder hierarchy as it needs to given the pattern you put in, so you don't need to enter any (potentially complex) folder structure that is above the needed info. You can see recent patterns you used by clicking on the drop down arrow to the right of the pattern input field. Additionally, clicking on *Edit saved values* in the drop-down that opens will let you save patterns and optionally name them. Use this for patterns that you apply frequently. If you leave the *Name* field blank for your pattern, the name will be identical to the pattern. Batch edit track numbers ^^^^^^^^^^^^^^^^^^^^^^^^ The *Track Numbers* tab in the tag editing window lets you batch edit track numbers ascending across the files. If your files are in the correct order, you simply check that you like the *Start from* and *Total tracks* values. If you put in any value greater than one for *Total tracks*, QL will use a tracknumber pattern `tracknumber/totaltracks`, e.g. ``2/12`` for *Total tracks* = ``12``. If you only want a single number for the track number, set *Total tracks* to zero. If your files are not in the correct order, for example because they are sorted alphabetically, you can drag and drop them into the desired order in the *File* field inside the *Track numbers* tab of the tag editing window before (optionally) clicking preview and then save. Rename Files Based on Tags -------------------------- QL also lets you rename the files of songs based on tags, either for one song or for several songs. Edit patterns the same way you would for *Edit tags from path* (see above). This feature even lets you move them to a different directory; for more info see the :ref:`renaming files guide <RenamingFiles>`. ���������������������������������������������������������������quodlibet-3.0.2/docs/guide/faq.rst������������������������������������������������������������������0000644�0001750�0001750�00000023472�12161032160�017260� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Frequently Asked Questions ========================== Installation ------------ **Does Quod Libet require GNOME?** No, but we recommend you install the GNOME libraries and Python bindings when using Quod Libet. If they are installed, Quod Libet will use your default GNOME audio options. **I'm running Gentoo, and...** We are not the first line of support for `Gentoo Linux <http://gentoo.org/>`_. If you are running Gentoo and experience problems, file a bug on the Gentoo bug tracking system at http://bugs.gentoo.org. General ------- **Why don't all my songs appear in the song list when I select their artist / album / genre or search for them?** Do you have a global filter in use? Check the *Browsers* tab in *Music* → *Preferences*. **Why can't I double-click a song in GNOME to play in Quod Libet?** You can! File association is more to do with the file manager you're using. If you're using GNOME, right-click on the audio file in Nautilus and select 'Properties'. Go to the 'Open with' tab, then select the 'Add' button. In the 'Use custom command' text field add the following: ``quodlibet --play-file %F`` and then click 'add'. Now you can select 'quodlibet' from the list of programs to open that file. Double-click the file and Quod Libet will start to play it. Note this will *only work is Quod Libet is currently running*, though a workaround is to make a script that starts ``quodlibet`` first (only one instance is ever loaded unless in dev mode). **My filenames with special characters (ú, ç, はあ, etc.) don't appear properly** Unless told otherwise Quod Libet assumes your filesystem is using UTF-8 filenames (this is a standard assumption for GTK+ applications). To tell it otherwise, ``export G_FILENAME_ENCODING="iso-8859-1"` (or whatever value you need) in your ``~/.bashrc`` or other appropriate place. You can also use the magic value `@locale` to use the default character encoding for your locale. **Why do my MP3 files have the wrong length?** The ID3 standard defines the ``TLEN`` frame. If an MP3 has an ID3 tag which contains a ``TLEN`` frame, Quod Libet will use it. You can remove incorrect ``TLEN`` frames from your MP3 files by running: :: $ mid3v2 --delete-frames=TLEN filename.mp3 If there are variable bit-rate (VBR) files, there may be errors in the frames themselves leading to an incorrectly computed length separate from any tags. You can fix this problem with various tools, e.g. `mp3val <http://mp3val.sourceforge.net/>`_: :: $ mp3val -f filename.mp3 **I want keyboard shortcuts to change browsers (or anything else)** Put ``gtk-can-change-accels = 1`` in ``~/.gtkrc-2.0`` (and restart Quod Libet). Then hover the mouse over the menu item you want to set an accelerator for, and press that key. When using GNOME this setting can be toggled in *Menus and Toolbars* in the GNOME settings. **Whenever I type a space, Quod Libet pauses** Users of some keyboard layouts, including the popular French Alternative, may hit this bug. In these layouts, the spacebar sends a non-breaking space character, which GTK+ interprets as ``<control>space``. This is a `known bug in GTK <https://bugzilla.gnome.org/show_bug.cgi?id=541466>`__. You can work around it by changing your keyboard layout to send a regular space, or by changing the keybinding for play/pause using the method above. Player ------ **How do I add the play count or skip count to the columns in the song list?** Add the ``~#playcount`` and/or ``~#skipcount`` tags to the song header list (in the "Others" field). **How do I use a different soundcard with Quod Libet?** See the chapter on configuring the AudioBackends in the user's guide. **Why does Quod Libet sort my songs out of order?** Music metadata, like music, comes in many languages, and sorting multi-language text is hard to do. It depends on your language as well as the text being sorted, and often is still not well-defined. `Unicode Technical Standard #10 <http://www.unicode.org/reports/tr10/>`_ outlines an algorithm to sort multi-language text, but even then it needs ordinal data for each character for each language. We don't know of any Python implementations of it, and any implementation we use would have to be fast since we compare thousands of strings when sorting. **I have two albums with the same name, and they sort out of order/get merged in the Album List** Tag them with different ``labelid`` tags (it's best if you use the actual label catalog ID, but if you can't find it you can also just use any different values). You can also use ``musicbrainz_albumid`` tags, which several other taggers can write. **I have two discs of the same album, and they don't get merged in the Album List.** Make sure they have the same name (i.e. without "(disc x)" on the end). If they are still not merged, they have different `labelid` or ``musicbrainz_albumid`` tags. If they have different label ID tags, delete the incorrect one. If they have different MusicBrainz album ID tags, add a ``labelid`` tag that is the same for both albums. **Can I show more than 0 to 4 notes when rating songs?** Close Quod Libet; in ``~/.quodlibet/config`` find the ``ratings = 4`` line. Change it to ``ratings = however many ratings you want``. It's best if the value divides 100 evenly; multiples of 2 and 5 are good. You will need to use the ratings right-click menu to set ratings above 4. **How can I hide incomplete albums from the Album View?** One way is to enter ``#(tracks > 5)`` into the search box above the album list - this will only show albums with greater than than 5 tracks. **How can I list my tracks based on their ratings?** Right-click somewhere on the headers bar (below the search bar), select "Track Headers" from the menu and add "Ratings". Now if you click "Ratings" on the headers bar your tracks will be sorted based on their ratings. **How is album art handled?** There are many ways users like to keep their album art, and Quod Libet supports graphics (primarily `.jpg` but `.gif` and `.png` also) in these ways: * Files in the *album* directory with fixed names eg ``folder.jpg``, ``cover.jpg``, ``front.png`` * A file containing the ``labelid`` (eg *COCX-32760 cover.jpg*) * Files of certain other names linked to a given album in a shared directory: ``<musicbrainz_albumid>.ext`` or ``<artist> - <title>.ext`` * Sub-folders of certain names (``covers/`` or ``<labelid>/``) with compatible images in them. * Embedded cover art in the file itself (incomplete support in some formats). There are fuzzy-matching algorithms to try to determine the most specific match if multiple of the above exist. If you're adding new album art, the *Album Art downloader* plugin allows you to do so easily and is compatible with the above. **Why do songs disappear from my playlists?** This is due to the way the library works, and that playlists entries are based on filename. One of several things might have happened, before a re-scan of the library (on start-up or otherwise) * The songs have been renamed, moved, or their directory moved. Note this includes using *Rename Files* from the tag editor. * A removable (mounted) media device - USB disk, network share, internet folder or whatever is/was no longer available (at the time of refresh). Note if you're using the Auto Library Update this will happen immediately (There are ideas to improve this: Issue 961). Tag Editing ----------- **I have a lot of ID3 tags in euc-kr/cp1251/windows-1252/latin-1024/insert favorite encoding here; can QL read them?** You can define a custom list of encodings to check. UTF-8 is always tried first, and Latin-1 is always tried last. To make your own list, close QL, open up ``~/.quodlibet/config``, and find the ``id3encoding`` option. You can enter any valid encodings here, separated by spaces, and they will be tried in order. If you have files already imported into your library with incorrect tags, you'll need to reload them. Quod Libet saves ID3 tags in UTF-8 or UTF-16. Other stuff ----------- **What does the name mean?** *Quodlibet* or *Quod libet* is Latin for "whatever you please" or "whatever you want", which is the kind of attitude we want to convey with QL: you control how you fiddle with your music. A *quodlibet* is also a type of musical composition, an improvisation by several players or vocalists at once, which is a pretty accurate description of QL's development. *Ex falso quodlibet*, or "from a falsehood, whatever you please" is one of the properties of material implication (*if/then*) in classical logics; in standard notation it can be written as ``∀A (⊥ → A)``. Finally, the initial directory imported into Subversion was named `ql`, because I was experimenting with a syntax for a _q_uery _l_anguage. **Where do the release names come from?** `Daily Dinosaur Comics <http://www.qwantz.com/>`_ at the time of the release. **I like <my favorite player>, so I won't use Quod Libet!** Okay. We think Quod Libet beats other players in the areas where it counts (where exactly it does count is undecided; 'tag editing', 'massive libraries', and 'regexp searching' have all been cited); we didn't like the other players. If you do, continue using them. You still might want to check out Ex Falso, since while there's an awful lot of media players out there, there are far fewer choices for tag editors. You could also :ref:`help us make Quod Libet better <Contribute>`. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/playback/����������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017543� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/playback/index.rst�������������������������������������������������������0000644�0001750�0001750�00000000116�12161032160�021374� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Playback ======== .. toctree:: :titlesonly: backends replaygain ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/playback/replaygain.rst��������������������������������������������������0000644�0001750�0001750�00000007117�12161032160�022430� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Replay Gain =========== `Replay Gain <http://en.wikipedia.org/wiki/Replay_Gain>`_ is a common standard for adjusting the loudness of songs/albums to the same level. Quod Libet provides tools for analyzing songs, saving the calculated values in the song's metadata and adjusting the volume. Audio Analysis -------------- .. image:: images/replaygain_plugin.png :align: right :scale: 85% For calculating replay gain values QL provides a replaygain plugin. Simply select some songs, or some albums and activate the replaygain plugin in the plugin submenu. The replaygain plugin has to go through every bit of song data so this can take some time. After the the analyzing part is finished you can save the calculated values. They will be written into the song's metadata. The replay gain plugin calculates a peak and a gain value for each song and for each album. The *gain value* specifies how much the volume of the song has to be adjusted so it equals the replay gain standard loudness level. The *peak value* holds the value of the loudest (or highest amplitude in fact) part in the song/album. This is needed because the range where the song volume can be increased is limited and pushing the volume over it would lead to sound distortion, so called "clipping". The calculated gain adjustments are relative to 89 dB. To find out more about how the calculation is done, read the `detailed summary <http://wiki.hydrogenaudio.org/index.php?title=Replay_Gain_specification>`_ over at the hydrogenaudio's knowledgebase. QL uses GStreamer for this operation, so check out `rganalysis docs <http://www.gstreamer.net/data/doc/gstreamer/head/gst-plugins-good-plugins/ht ml/gst-plugins-good-plugins-rganalysis.html>`_ for more info. Setting it up ------------- .. image:: images/replaygain_pref.png :align: right Under *Music* > *Preferences* > *Player* you can activate replay gain adjustment. There are two configuration options available: *Fall-back gain* is the volume adjustment that gets used for songs with no replay gain tags (which have not been analyzed). Most audio files are rather high volume these days and the difference between a 89db song and an unadjusted song can be quite high (e.g. >9dB). So to avoid a sudden volume jump, try setting this value to the average gain adjustment in your library. *Pre-amp gain* simply gets added to each song's gain value, i.e. it adjusts the default loudness level (89 db). The problem is though, that if it is too high, Quod Libet can't increase the volume for some songs because they would exceed the volume limit and cause clipping. Applying volume adjustment -------------------------- .. image:: images/replaygain_force.png :align: right In Quod Libet the gain type is tied to the active browser and play order. The "Media Devices" and "Playlist" browsers will only use track gain. In all other browsers the "In Order" play order will switch on the album gain adjustment (it will fall back to track gain if there is no album gain). In "Shuffle" mode only the track gain gets applied. It is possible to set the active gain type manually by right clicking on the volume slider button and choosing the type in the menu. The chosen gain type will then be active until Quod Libet is closed. Querying existing Replay Gain values ------------------------------------ You can perform simple or complex searches (see SearchingGuide) using RG data. Here are a few useful ones: Find *all files without track Replay Gain*: ``replaygain_track_gain=""`` Find *really loud albums* (best in AlbumListBrowser): ``#(tracks>5, replaygain_album_gain<=-11)`` �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/playback/backends.rst����������������������������������������������������0000644�0001750�0001750�00000004360�12161032160�022044� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Audio Backends ============== Quod Libet currently supports GStreamer and Xine as an audio backend. The default backend can be changed in ``~/.quodlibet/config`` by setting the ``backend`` option (gstbe=GStreamer, xinebe=Xine, nullbe=no backend) There is also a experimental `Mac OS X NSSound backend (macbe) <http://code.google.com/p/quodlibet/issues/detail?id=509>`_ available in the issue tracker. GStreamer --------- Quod Libet tries to read your GConf GStreamer configuration, but if that fails it falls back to autoaudiosink (which uses pulsesink, alsasink or directaudiosink on Windows) You can change the default pipeline under `Preferences > Player`. It will automatically add the default sink in case it is missing. Output Device ^^^^^^^^^^^^^ If you want QL to output to a different device you have to pass the device option to the sink. In case of alsa you can get a list of available devices by executing:: python -c 'import gst; sink = gst.element_factory_make("alsasink");sink.probe_property_name("device"); print "\n".join(sink.probe_get_values_name("device"))' which should give you something like:: hw:0,0 hw:0,1 hw:2,0 and a pipeline using hw:2,0 looks like:: alsasink device=hw:2,0 And similar for pulseaudio:: python -c 'import gst; sink = gst.element_factory_make("pulsesink");sink.probe_property_name("device"); print "\n".join(sink.probe_get_values_name("device"))' which outputs something like:: alsa_output.pci-0000_00_1b.0.analog-stereo and the pipeline should look like:: pulsesink device=alsa_output.pci-0000_00_1b.0.analog-stereo To see the created GStreamer pipeline start quodlibet with the ``--debug`` parameter, go to *Preferences* > *Player* and press the *Print pipeline* button. All used elements/data formats will be printed to stdout. RTP Streaming ^^^^^^^^^^^^^ Set the pipeline to:: audioconvert ! rtpL16pay! udpsink host=224.1.1.1 auto-multicast=true port=5000 And somewhere else:: gst-launch-0.10 udpsrc multicast-group=224.1.1.1 auto-multicast=true \ port=5000 do-timestamp=true \ caps="application/x-rtp,media=audio,clock-rate=44100,payload=96,encoding-name=L16,encoding-params=2" ! \ rtpL16depay ! decodebin2 ! autoaudiosink ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/playback/images/���������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�021010� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/playback/images/replaygain_plugin.png������������������������������������0000644�0001750�0001750�00000043130�12161032160�025222� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����$���ܬ���sRGB���� pHYs�� �� ����tIME���bKGD�����EIDATx|Uׂe-kǾw-X]mkyWWW}u(JH $$%P?Ý{-In|3̜9s2s~=O~rNqp!v6ZahI!==C\y^B#GHXX<z[9g)TaCT~r9,P6&@x%55+.T8!,g:Z-br "0ŗBie#_ cnz`҉(.RtThhB2fIG;7˟Q1EBi>gˇty 8t:UQrr!&Dk%n?{$V6m.B6hvAn-sp.0⃘@brZA:0V2)BF{ddt^YrŽȪݖ<}#m/oӢ.+`0sV=t7r|Ǡ 1Sd̄ y[wr/w= ;z!3ϕ,~AaXfCɿ_)/~)4\/DHb|2~۞Cp.0i?(qJgG%A&E^\W-Kjv\y9s ;qB`ٔ[%~3ZXVdɫ,+bg=v\l̩ו0dH +SɎ: ֱ~CL9N<..;ⵘt0仨B{e{SsZ>c^omߧkƱY#/^ OWFn?#oKTr;vzE?9.S-LgKiƱgkpD7JvJ2tZyyw|5ilߡ[Yޮz g|9-׳2b2zqI0>k 0i'(~:u07ީ]L/N9p-Gs=G_  \"7Bcf*]1Бc@^HD7΃@EmtNȞ{hyXgK/3ۃcwׂad|o ֐v~"WzM(_WOz"wM{y׸{j:!▾YN11ǙUH 1A8Mbϊ?*Vg//d{!>h^rei!F-- ]d%n(ZMoOZIW-s< a OȐwGlt-\ۈD>'ϩqBGN Bw% 3y3h]WH"f9WkDJL_{͓S6D4>Cd;d"'Eϙ1q[L/R]S׿!?.s<} C,Mmtims@G�eޮ}@7 ɪUw3zoTX=&iA@  !y\|l3]I^ɨr;vއsޓk=<K1y]Ku71dK+Z{q�}~ 1G՞z{>C( Yz{TyoTr]kwb>&=.Rw.^n/bE^_'j`בmnε3D1(")&߄giusb8q-&x}WHDї//eeJ! ± e| UVW @uP5L>U�,2ht-|3y51Y+gi `cP}?/E~[S\˛/>C3Ĥy3�c 1A8p/~%w\|JHI^EJ@k}􍑵[ӒU'3ANI=ob܎,XyrdNb=tYkkiomlL<Yffh!2`}&ƭiEPiz9뵼"ĕ!_,E\?>O 1A8|c _sKZFIݭ8Hõp>BUK^*J~*E5Ղ/Ҳ++UP^9[ &Jt8kAzOX?A>H _ }<q6%>@?~B&x){m`kyOE+Ӷjgao1rFOAG0a,߲sIx@WQ}F& #"pzg1_Wy<^ c\ĵ|ɧtI%6{|J>\6 Χky3ã өqOө s~ ^@_8 J\BULg6鱗B"`q˴(0I(30"OXuX|<q-p,bK5w|>GH0p`s90lw!o|&JY}bBH-Q%>1T]|~?n&B4>ɿBB!Ob۽k'!ْbB!bB!bB!bB!bB1!B1!B1!B1ʏBif\ 2akK𢡊!'&4Fk>s )2r0&r9|RuR߷OIK=yƴÇBi\dȠry;vL:9xCDe{uTUVHeyC !4b2׺ErQ~ȖBOLTSBH*& 9~޲+&E)W-o_aWL0NUvln=bRw@l"}B#&jkeuJ 1U֮NUCL <aogvir-e}%c{9ӟT̘1Um{&&uʚUpo 1Q dm*(}19PHw)$Fҹsvq1K.J<Pݵs$&,|f.:vP..lMN }1ݿH.SN9~p饗ʜ{յx,*,;S&N s{mB(tk~ses~V;t wulۺy<~8vM7g%|w&?/Wӟ3ΐ뮻N9<iއ\y2}'gy7OS;<袋@*s+obRTBW1�_Z%Eb4HIؘԩs#<"q8333nys^``:k< 5X|A?#yᇝazg: x{g|d1p;~X^fثb+}uOu!k'ܽӮiS+ U{(\Ғ3g*o>P2[6kFƎrHb:AootҞs<>KBabx{g>w|[nv-@(YٽoQ>lNjX U{(ڴ@]AF[7/~!?h~ 8gL]KH00 NQ1:i<0qw碛7H~}w˳>k;}<VlN[ݛU*߽sSWmZLXW _0r֛ y衇[*91lnڄQX=vЕ'gL>e=1ޙy yIߴI{Yg6nLFl"ݵe'}ccӧMӅ&JNJjNwެ4Vn瞃]^i1ASdu!C?_3CcSO w&$PB깶~Z㷿wqw%%_pfW9C˸2-<ƍu :D.2rʄmٽo0kL[Pp}Lwڪ<PZ{fyNL%GH[(tZ[%:y*&!d2oZfVT%S2 [Z*eb[$8/Ĥ6Q4uAkFwA'1J&/2~i+х2la| _EJ97<;t}q%B 5ڴKB!MO|B!ibDB!MOLqL!yhb B!Dӷ-I2w[.'#ce?ʔq} u}ڬ6앥23Z.8~\l/Y!?%AS/\Q;JG1U סO.['mEqq_$o^^MBL}ڬI@+kr )qPf,/u.SXMa ۹]s}ln7n S.'U<|'NHuMJ·霖dƪ*Xad\W(o!_[&1]|ޣ)ꫮ1^թva /P:v(cF!_.APڬ|:9]^4L:d<p<%HzOGoɓm%{mG"VA2lM. ymmu{ɒJz6qIsa7˂e:*a(9-Pn #s4(1->$'ҿ>iaٳ ̚5SB} ZTÇeOC6i^>Aοq-wq9@-~JB1ߨB:b;~Bv;$UzޜTǹ~qZWSrv}6wբcRZ[Z]f m-25vbN?�-D;<%v8y\PU6}`:jVXb{2XU +e^Hek0.@ՠHOgnl|MZLbr-X ScZ`IS .mVL>ɋǻIqqU[N<fkq^nM21._ת0ɐՃZ!60gR!SqU۶KS_6UkKbzn -Ua=[.}[3F?I.]u1sa;ybwQˤFx/A@q.]sX"~??./# dHDV˛ ?3UP%Z0޷#FpȑrmI؄ A3Ylb xqrIP6 :Q8f3a,l'La܁qviuKޮKt(/ׅ- **qM;aN͇w)rw|=s]eλZT\#|<}7<ޫ�%^8/ZiZ~ K F.**M>*W)&ܹd;#tU <Hw 0@o{{&M[0R1xY=GrmVLڈg>dzmwybs(dPǹ#UդcUacn),S`tsAxmZ6?SKa% jUg'3HDr_mm;=2cYQ}V6kd @'V~7Ō*t˷96\ĤI1߯\{AyLuʙjCu]\?<ڬkt[ysޅzo^[ 'lM~%3I/#wʧ[za(L1ˋࡣ2}Yޞ8mNyݕm52"2K>T5dRUdg]lK%*$d0kZs{V�AzL5VɗeLd7[}Vi"K%zǥ~7ŕҕAu#?EʿVH 7ܠݿBPBW_Vq@Ť6+&#o2u5UPŎu hxߥ ΰJg7~sUm,a}{%H3> >t[x]UJi\io;7Xv{̓O`b{ML˳q >{7kaizKlvcː .2[^Ғb|eܒ9|O6GÁI+izڬt~P/yNgꖗ7ϒה- }ڬZB<?ZJm14B7GL}ڬ5y_T(׳2Ͷvnfn.C6+&oXCHgDd x73JɩmpT5Ч͊[W3e _{?z9it;O k5L}ڬ]2!f͊ Fњ(&4Z+6_2ceLI,=c">{H 9E;6ńbB5 li^ßkIŅ]6h^]6ńbB5wB| *\8{b)&j^zi_#UAýpqQQx)&8wi&hXؼy䪫 J y衇$--b^}q p%$ +U/W أ-ڰSU>{a_d֭JNo߿wpĉrwe]si>|+RW A+'VSS#_u9޽{4bJj1|.α'|R%-0y(&!l5Y1*:W/ j+̲QZȔPACJdM7 ¾?Ez٧Osʒ'N ^-^Xn&y/z)}e^4bJLn߾][***tM,Xiˈ9lrwꚚq_|QKRRRPۅ& Wkf?Mv 3oxwIaӖ+<Ju{Ȃu5X_S{T&,uo}<(`X~eҥi <M!&{9 iBҔaco}Iɖ-[wcp>쳲aIlӟ#G4j O?]v92gDﳘ2d9t 4AU4m/u [c.-gC 8ݵVlZw;,K7o}'OB2e]/Ϊ6wS8KMMm1=zTcicˤɀ4ގts0<f48/9N⋘eݷo^f?Mv۫1}=JɩY &XGQ1:N,fu]Cvh1٩un ý>ӨX5..? I&9>x2gؼ^__/ƍ@ ŤY/Z'ގuuo�Cᅲ+&Vo0}5˘\>vQ&8׾GeJb^]W FDAYZq:%(d^߯Mܣ;]fWLc>a7$a@}]{ァͻx|_C6{饗t9*~/5wl-deZ~3}^O8 kiT@db\bb.wÀyvv@W<hFB#<|gصe2aW?`92-w- <α--&wR@ &22-[oUwÍ1AXAAKi^wf}] xA[Kv0,a|U ʌ%:ިuenk˼6|yso31C.=k00Ww'Ǟv4gϞ=4cz2bZ >Ѽn{@8!Xu~\4Zk?zqK0Ӂ: bFĄ--D_@+|Nu 梘PLh&5ۤߜ@LǷ䛙{aL1hMhu w+aI\ H& FQL(&4Fhm趗F1h(&-p1^ńbBjtFf5L|!'h4Os$a{>`III>VXR#͕0ml111zTQVf嚗n{鶷U[o]b61c4rn{+1͛Yжc[Ohl3\ ƆDH 3ܹc\m0IZmml-ΰp\4<8jVXxL>@Ex1%xܹ &͵;C=!XF 5 BLrK(&!h};r۫ atd5)ܒ8POmuyW+Ҡ;ɛ & ;~YF$Vݔ~jmdhI‚۞5/z ̙Z_K~G$>S`v Q@a.\(/m1qu-MǣB}.wSCn{?<n8¶U5/RLZeUer:VK^}/w嵊=Rn6t+zJgSC0n{ ;ѭjQk^e7Wxt'$-S<fhƛw<u|d6O>t_Virw<Zmނc::itԩS'<k^F1 sע@LKj&bӏ<u 07ڵk~x<ݗU?m4e7)`#6- hcipW+׼t=bVht6etK h趗F1h(&-`^ńbBltKPLh4bB1h4ńFkF4 ńF 趗F1h (&hi(=PL<òjժװ)1&( %{|(|+`'66̡yY7\3RL{=)++37 /SN[NOՎ &/[{Mή+`'66T >}x<5/x趗bҤ 3n{1-hx̸ U9گjg]t3f4yc9|p=߮Ebf%KtM;t5+WV\at6!=kחx趗b]+�{іr Wc!OEk Sw= U9(h1<G}`Тm\fskuMob>];נSmo#;0yd-�g3{rK<tK1 C_,jO?s_K#&xa`֝\u>cңGYr}^VxML<]լ\[y mog+]Sx _Oy}n{)&!c(̃-\V{;c04SOInlm5s[\7m{ [<tYL)퐹k쳒dʲr#T&%2F OXt -䰖tۋ.$\P AAO0Ĥ{ċf/15!&\[s m{`:ư0=7׼v^b/m֬YV7Tn{aG- s L>]<Z^Fא%<�oWL<v`7Wܹs+ftnɻK,5U<FS͛$s۸C1 ڊ^ZB(&4ZkQL(&4ZF4 ńF 趗F1h(&FPLh4F1ڀm/bB16QL(&4ZbB4 ńF7򹦘PLnK50ٿC(t8̆x[拻]+j}&ګ^I3ݖpkďO1<b! Kl!66_ZV11=4ysn{e4wu 5>i TBc:<fRŌ1#^*~w|G,˳t<O7FwBޝloam/Ť̛ݖrkGS-7xCOGk&&&.�JkzZosfpq~wΤ$>*299 Ν /՝ C@n{/v͕WF3ov[my5-C|ٕ-\Ч9N:0;{֛olr}鮞΃Ba` mo`n{ s:NatK1i1nZ=E<FѮ;_+1:ζZ26ov:n/bbtZm]vՃ ϼ h2\z沊n:W)Æ iB7{lsN[!&t:[m/$$Ť%Z{n=Z=j+OsQs1~d:�g?bb7''G M_|E.r[ ?;u uu0W^IHZ[sʟ+kرP6QLhVL,Ƨ6n:ńn{i m/bB16QL(&4ZF4 ńF(&FQLh6`CG)a3ߖQL(&4Zg#c$7;L1hMl _^t bB1 ]t&~_?:; l(&YL͵Rn{ ;=]4[%4γWSMi}pS A :-,#=Q˅^(;v1bcbe Ť%Zm/ S`զ,ۂnCML0aRQ^&´X; .Ą4^ }2bpL(&PtO'QXMK.2cƌĎ]oq&oRX Yn..L,7|�ɜp=[ Ť-^y)++s@kVk]}]V{p+//>v'qpnA5M73$6b7 Z%I3r-(#ue]d3PLZl ]Z2%KL<5_c=&=z+Wen1'MVRLIqQ3Oc'M(rR1\b ^l G1 6t n{‘=Sҭ[7cn׮:_d>IdPL|UYQ.gq1Bz֬2a˄bpuk!&ݻw{"—cV-+oױrӋ>[q- [-Eeq'u=]܎PL(&h !&ӧO[wM5u_ | 4MVl׽pi,18\|rgj)-)pTF(tbB15AhF1Gkb2 bBPLh@[&ќF1hٻp`ńbBfCLh FQL(&4FhCg ńFkb;jd|L1h`?F1QL(&m誗bB1PLZ&Nt鮅qKU$חsz衇$--]k0$?/WɅق,ϣ^Ť5Ŵ㶴"&08 Ω(&ѵkWKyY^fWQLZ<YKzSNzFݔa_~z|9#_"O<ݩ<' Ə/wyQȍ7(wvnIygw_9ŤS+eCj^njW^ŤW?hiIVݿ2g}DnOb2dmZ^~eK/spCo!ka~ڵkwĈۺg;[tA*:gxpE4Ijѓ&M5joX(uqxru8a +&\sܽ{z=3A9 <?##C;C,uU'nKbB]JKC7V]]^2ۇ)&YgHY`^Ak\tKKH $X>#zu.1FZvsk@V\.ue.;\vìҿh"=F=^PtM4I+0ԾQPb`]4[nCm}F!ýޫk<�_PP.u c@>Xbb~tou]tYzϮ۾ bǃн%>^Ť[[p06G4 ŤMńbB1PLh4 ńF1Gk/Yi џ bB1h4 ńFh\QL(&4i 4 Ť]Ӟ{PLڋPL(t̸N*n{ ˓W^yEy-{CLf m @H1^Zz;{CCR__'}d[Gj=vQL58c#'^P9R;Œk֬11+<0,M1 m/)"?uur앝;*R2)/-"I r>==Pqkf5<]spዙf&&>u%!fDnz1?bb+>>~wy 4ȓ.]Ȍ3BVL趗F1iի塇j%z,~AEWe˖5rkM.}IRRnerr;Y6sL֭nEO݆x Tn|'VYvN{yyvbB4I+l Jn{ͶsNYxBQ1C(F;]`7|27ƒͅtVyǤGrʐдULfϚ%ee $';K&MPtYjjj% N̂єbt(-w5섄Z~7Aܟz)E4^7RZR$WUnV_ղ&O,? 5K.`;v <5k>]G Λ#Mv[?bVₐ۶XOݥL͕ؒbBtqnޑZ^VNI ˮ090> oPx[5  !716mn%:tm1ӧw߭D NvtKkMc&BTz%3iBk n{P]`EZkN+cnjуZxxx (&m1D㏾Ia~>bB5q`ZɐA$!>'1ϣhlgB U1Iې*#m}BߘZbB!yq-!(ƍZp狐4BiPL!PL!PL!PL! ! ! ! !B1!B1!B1!B1aBBBB0!PL!PL!PL!PL(&B(&B(&B(&B(&B!B!KLW-'J 19v!V !p̄BńBńbB!bB!bBHfjr#ȷUIqa[? !!HuUlܐ"S'OÆ~0qR[[^˶tI,N| 2bηm[6KM !"٘" y9rQ9qÇ%';K&-׮i"F/b;?Dl>)*̗E DP2 :e+!8OnNn١)E4.V I.!& >RTX uRL P[FW [$P|,*GW'EZx !$&Gxq�\K1ACbBH*>r ܯ#)&ŤV(&!1P|?jʞ=o/b[LꕘtWU$I]F_ńj3d 37YgUyvŤ^ L ={vKyy8Y Ta$X.zy#;w|PbBHB2{=\)*yuR٩^zlBs9:ܮL6Mn&93k'Q1DyY^Ai8BBlenUz{v*KK%;+c|x-p5]/MgSA1! B hy@H.L k+K._B60-(1)ιsW_-+V:ɑmVLER /``T HNI^׫*u륬T*++dӦ4-Z8_7nPt@Q{5MkS@1!$AWV/-+2%,Ew(')gp<g.]$&&(e ,hO>r/Uz LFX~~riefV_/+Wlݼ0c[Lʾ5Q\DJ*P$/[&UٶE.+dl )7{xj؇V lS5 #H^NڹCϙ%;wlwuC)!nn,⢂ۀbBH@8)U\|<?UgV%&8Λ?{6~q(W]uU¿gϞv^#fjc'|a/FCM<::Znf:%EŅrV/-S5+KֶtYDcߦubn]c|Tqٲ<!N֭I]\ÇE󵘭^B2n<7p܊xتb"`zbBH<)Pn-{lUTL"##uo0N9mm^?tP:Kv(s-w񅺘i1YDc]JY:I2lTbY6]-7d _ǫ[m |ay9YZ@̜l/Ο_gn`֎q9F1!- ^~Y$g?YJ@v* !ISYL<y]wITB]tDDcUf^w>쳥Bݣk|؏ݵ\㳋]1HBF6Ux@U_(ghlLYױaB,[5^tOgn->G%/7[9,G�CXER\T([7K\l |]-{願b, 1XHgVUߦrj&Ղؠ dg†xsirWIBR-[nW^3<%TK,5wyGFyuG?HJk>橧_~YPggg /1>4lV N o1JHk\+P/,&U%)j<gVDLVfV-!dlݬq@p_ "qiPbBH(?nPKSOMJ0 :Z#p&Gw„_Z:t \s;6r=QG][0vƶrw˩*]I?䓺SN2y$Ŷۧ-$>Ek"IYIW\2U>hQQQVRC8T D%ej FWcZ.RY !|| !!*&|s`w&8g®X~Zݕt! GjiQí!&0vb'< w9�: 0!!Ahw@1!$D{EM 󝂂 _ }I!y %iN1Yf[6KaA‚%>j2}F-4uܕ`bBH J1V yNA47qqFl!9)IW׮F`\`c^.7 4bBHɁ+y9z,ݬ[A?FSLWIjJdefƴ4vINNՊu)1OĄ7 1Q_#1?î`�_L<;XLlc1~uC !*&WASL;BBPLnmر MLn_YU?Am/!!~P0ٲicPolټIM,E󺴸HJvV. Y(&a`0vlV/WUeyH~  oaUaW1=mf]𤠔P|A O5K1!$Z'ܚdBjO6eLnW'%ŅA? !9T_sO1!)Z(۫IEyߟ][V-WPF o mPL! ! ! ! !B1!B1!B1!B1!B(&B(&B(&B(&<B!B!B!^Lp"!b೘B!P:w(:+T\8(~\qVE:"zBHI :trnlŅKMo8"x!Ҿxġ8tC'.qن8KqVq. !;~Ё8tZN\Ѝ: M;.Bw8tCpDGniɩ3M}`r(UΎ{B!ʡ ry8á#u9q@GGW:""Ҿҡ8tC'q醘htph\#_Biw\Ё pC'tiNu8d91rC}u0BH\Ѕ3:qC7N5CT a1tBinLZahO?@ U'#����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/playback/images/replaygain_pref.png��������������������������������������0000644�0001750�0001750�00000011172�12161032160�024661� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�����q���B4���sRGB���� pHYs�� �� ����tIME)cw���bKGD�����IDATx] TU6eRTP| -'rUb\.R2M+54DPI+S@4 r|cY3ַgsϹBЍ\@ m @!6ц@ m hӭm3A Y2+Ҧ۝fч4mg̘aooߣG'')S X'NNJJdHhUhcYi H :Ԅ:|蠵Ï;ZS]uYO=e@wa[o-` !2̜͡9Ӫm{Gg A7EΎ嗕̛\>}3mڴ ?Fpء1c 6n8lچ޸8|L0?H/Sr f۽޻52RPZq]wC8κXTXYwmHPyvqvTyyCΓ|c>}:N@,\YȯB{bb ҽ{w.7}t2pCݜ9spxGڱ# ̙4n۹sҏ=O_|ݟ 8gϞWUV*/S|ysr $>徾QzZjZi$pLP(J.(WiDgR>'ذa=>a7|TarT4Dݒ˹k6l߿NN6Ǹ#|lUez+!~-,X&Ftd^4hB fFhS]PdmLcUV}A ~vNT&IWϑ8 H02fm$ Ch‹hrZA~spEh#ZY_{  ڗMZ..Ғ6lPi2@ΓБ;Y=m$ 0PƷTp8w\_υ ۷/ҩO_)?2#F`xx�=�c-&=M:|,{m\DM锔M"e'7*fϞnTL:Uc&gSv8x [>m[4FbJ_yeF$sr/lrV9{F6>IWWWe@^9JmSOq+r~![>QyRp[Q(r3ΞABRe0 2z-%riA�w+|||@ګ5LMg` ˧ >t=gC&@ DhC 6ц@ DháH#z5h@%,wFzefމ~I 01mB/|[ر9ru?=iý"/z?'Mz!m wO @L)b;;;'''~in{{ÆÇ//))qwUVZR'hҴsqqٲe Kdӧ_~{vLk.'x={z{{e=#(˗lll%'LUeNSJ"mF vO|.,j__ݫ< Z ?"ѷo_d?cmm=v {~fxx%;::ҷ`9p�IKbbQՠA6o$Pt6UvE=Mcc#GEaټy3;T{ ˗-(/۵k/ܙ+BB0Z/{ݩS <{kd$zxcfԃ*\\ض wu>߼{)CϞvb9[96 [+WҋH<#0ƿtiӴ j(ekkjDGo%[qnԒ6{?^κIn&66...=;yf6̄gm$oF!=0AMf$i1r/K^\64�H=}J6QC ᐜ|{3$RRY]BrjQo%[97jI =_)<SS%4m@k2tм<nс64&}`f(/+;Z7#RnX UIچ2w܁䓁1V˵T9|!\^HttZd+i#i sڵ7ik4OrEGms<==: P NL1c'yC_ R]\m${1qOA?L4TK >۶q4f<B#q6p@*rVў6}+ Q\%rLÇqL/eb;�ci#7)"3,e]R<{&]p Ĉk1"�Ϗ׭eW)W$ig̘!:AQȵTKڠ tqȭn \=r4a-=m4Vp(wK@ҒM"@'{XcfKdΦJ/C更9<ƚm, VN3u:88tǝͼǝ*ϙ&ǝݤ6ˠ {D eچuE$~PqMҁ:lC Zl--kц@  @!6ц@  @!6цTe%ڨϙeŕWkihChT8~ut MO֭ODoKK=ތ b9q?}2C{I�z)fGnل}sSц`z 6&@[n!dD違bBsMzSƼh$換7o2~ɓr�C1fj:fhkuOϚ%Z]' Xrt)wĉVi mF�&dr6z76 C .((b5}hsƍ /HLhcgIͼy%&ЦU={8M\kMFFF``… %? inn><<\/ڴ475*hcH(k~K $,'b8*+>>>ۣ%%Ժ3] 8;;hd2mT*̙3ʞyPmZZZ@1p-YX\ӧTW%L"Vh*9`gg mz!p>Mkk>t@@dw7oD{N/\ޠW�`FoARh+˨n j=jm8Xwa}TQ3VUVYz=i|g g#F06mvEo՚jh71mTŴA0'Ъ6z\LV686i jm F5A@\iK,i#*V2yrh Je}RR"K+cYv-v rKd~hh(wK�i}hVcU�`^[|K/I.Y ƍ޽m_ns?aH=}%?JTai9pYYY3X>nF|K@6tmm9s M}l ̝;7-4#2%7?1NUvǝXU}ai m,mm~ww_~\.ڀ% OŞ6c06u% P5_@OLBګ5%Er(*ȧ_@S5mN;jzlzΘ?}yY|b.ME<1 IKeow655mGslvDG37o -[n )PO%6ц@ DhC 6yIV:atJ'ty$餕N?xtJ't:^:҉6im *NZJңG޿SguK'%%M24\:iw4m׭xgutoo$tJ7mmZVVV\Gkָ8;3=/_ qww?|¬%3wrrڽ肎{$59XtzCCj7'i65Uj~vHt Æ SX6̗/[6eHO\g07.XHϤn u =;I|rN=]NΜS1T42x!ti ^Q Q3KF(5i$Je!t͓Ob5\\T$>_Y\6bu>,C:=""B3K'tMA~7BDW3WXsːN9Gcc1I+<a IV:Ѧ}!tJ'oH+hCtKV:Ѧӿo餕NowF:҉6N'tMIV:ц@ DhC mц@ DhC X  B&����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/guide/playback/images/replaygain_force.png�������������������������������������0000644�0001750�0001750�00000027423�12161032160�025031� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ƒ��� pHYs�� �� ����tIME 7ܗT���bKGD�����.IDATxP37dҝ82$_2i-;zCޭ^Po$˪$B&;.^.H:Yo{)>sgOsw"+ߓEF\YdeEF\YdeEF\YdeEF\qYdy uwwwAHYLeb[ZZBBB ųgϞ Y$Fa |0v64ya`` Q){ƌF $,|d5#d6J2/<_Ysh w1>4ioom4d*=wLJj60ui3>۰)4<_(Ie+=q򜅋}|:7Ν562!)vݸʃȸ6HGL34F*-#ѝPTdν GwTDhV@vc>?qjѯRE* a7:6N׬h@Í!@.^n#̌Zhkj߰-ۤՁAL)R#@Yd/r$Dvƭۤ*<h�Nv""c>n"!](FfF))؉yrQA===1 fФKoWUUiZycjMuPRU | \H[((̾2S666w [�(n}}= HI3 .8̌{Z(?MMM gBVVV:8/,,F@ZSqJz .~qC;c^qȶI8 dÃD2".tT ·&~~~\ڸ]|.%5E|F5A8%[w꙱y;cyn`]ŏ;*RqVY )�uT N=hzF`-šAG$}}}LKKKo<hNJInu?j2HjMau}70l,6p�&%cwt~ts4-<n2 nB$?_^Q!AG T@[II ~nqE!?q8G⼴2 G VSmnnljnHJNnu+_l&3EQQ`gQ5Ton@byzr $5-}??`֜/</(I.]fzDR/<i>۰)"2:\f-مü]8X ! aG|EEEwl!!= o4V\*شZucc]CC]Bb@T*"GFQD׋4oȨ~Gt<H"LaBF[Y[$&œC0rzfjH6V p8njME]}Mm6.>P䕗ÂVb(6 *"*ūiLećqXD- Ba>Hwtih8$gxL)X e*VQY`4yy]K(<:HVH`5x2Ʀzҋ ⶟MUIqcc=,8$xz/S'0تBޭXT+#<^ufJjb*R82c^̐B_uaַ,SjXSctfjHO e ! "V*,( ny58.(g%%1SRSA&GYSF:: 8zSF+zn]0-*APA7V#)8RPPӫʂ\HQZE fav^ VR3%5E@P5TPHOGgM}9~ʴیsZ?pѤvs]t9q:o`R{?4,յbU"?7W 1 q:35$K[wUBRn"UAp]s+;; gaJJb(sQT UңAh NZZ[;no؊ΝT@KsOLpqrj₈ËEǓ�<_"gegyxw⢕yi>zL f�PxҢt֖_@.AaGo{fdd >wFS(<GEPT UczVg[6 29KBL54|\�3ߌhhZ~CVv{69:ƖƇCu 'Ϙ7 4軷D(�srySYgL--fMI�#՟'T!̔ͭLJJuO!Ԑ8/mL!"%[FVZ2;7/+k^>=p#&Z]+ 3%5EQxTAuP)!=8♲Rl\n ,oG';V7oG߽̎@aQ pҊ>D$;UIƭh|{M [.^ڷlF_AA_MYgIL^3޵mݱYܽW$Yq\OZ_=ɖ#9T]]ͫgF^eoBDliIٹ~>׮xy{!\vX>H̔FQ$RzʔpOI<+((t|r/ P'xz;,:7>ƟdYBI04!;}̅EDlز 8B+ oaXJf:K?O=qdR$9*̹!5!Lp `;333߲A 鉐'̿fJIONLMOܞ^))8 ;ZQQQ-A$f(6 *"z͔~"`~<Wc9CH3nX l0ky<$,|up�ᯎs⦬$=p.Z|ќqx Cp},"ŽU())'Og$'%y]垜 =Sj$LQT RTȊ#@HNIYnCBRҗNϱpR#qǠKaWCX ;P* 7;p8ItZq"=T n4bCeՠ Pq37@p{&%%ACLgI|q-CacbEȃst4K"f,hvpʩ`77/#:?v4800g/^ V[+TB\1g⽯N<xY@!JGU e&Laoܴ ÈtPk{GFԙBB }ќ:?Y'%rdQ# ?xɋWB:qyLP{ór DCQB%* =~kRr OĽ~0O /q@ۦ靦g ML+YY,|0<e&P]]]j(TH/;!MEMۅ"'A gL<+3n5Ssriu#B:^5hB:nd*пi.G `ѓ~o^N*4|ݽbfڇ~?7'rh~F\ACBB߿T*<=%,(t"> [1¢cXǮ K@@A|f*ԯLIVOI烣W7e%K\\pn|98 t٘i{5͔nnnvtvYt'_əCvGB{D! #{'{<z}bd*ᯎi4շ@B ͡_alz.n_;A7 lfN9:!lr$E|׾=dغzya4#ar/A所^wV0#d›2S`qy ˍ0yMER! f//Eʈ;ĥ8K0iO))wL54"o_WL ^!y\O^XnNę.mڶ}2# QK  25wq+Loj8G}<| 55a[w☟!DK-)M''Hn`a4npQ(ᐈE %"^|V]7a lƻaxl\U??{)3dim [e;*f7G`T6%%r]&ː!V8$"#>[O_J!F-[<mHDF|8"Esnx'ÕDėe(S~uBS?nwXY솬\8d[WWGW[[7ߴ]Ȫi~!C4_n݈csRӇjʪtV~-6Ťݑ P}}=~5MkA }Sv ( ˉ4/%^f^Yq5j FSʫ=7 u(Z]UU�.))o!lkkK.$Q9c \a㇟l0# s1ק#nb\̚T W ړOX'˔뱜KS&Gy_<?v@boWkЫO&d4cWRǥ leeC9jzOOmD+|쒑ٕ+S +yXXZ錉0k!).G#ߖЉ'##΃8] +Ϗ>r`rZFW^xC-g-̓念{'b#dÈ---SSS3_ 477ǡL=Ę >1)?oMf__hי5!e4& KXBS)cDwΚ>xW|#Л~nf O)6;.=y( |/-- ('&&ʕ+ߏ{-_p!)))NO?SCu_;t8sLΞjOHH@ʸrѰ`]T1`Rʉ2 *ew߂ouu'BZ,AUYծ1({-"^\ DD`Fa//^xE=$Ғ0(Lʉ!Aw"KW-;&'mZ}a>|,u ,JtRց!"җz-u./zXeBj^a XĐˈ#N\0e f&޻t٪%ЛDrIXB`x۾!q{JB|sV'7,Y|sU$>3l3[r/LMFF(}(J�c*W瘏'Lzұ_Y8saE"]RlfX"PWb)8,INNF/'*2uh95Ѐ<AGMl:k{+=E~ %IJeEG\^+{yHyxɖƒa`w\F;"& K`-f͟w'&a.2]C0Ϳxw{Im~ ȢE QMM|kE(|)mu}@ii)|,qAԺ$>!a[1265;;~lUn:?[,]M|I䃱x uBT/vů@Rl3A$,,,..&FP;d4EаMی#f1ɓ֜vݻwtD$O\|%<GA!Yz M_j[\YSm1 111UT*c8d }bAAANNľ`N`=<<ęT52 jFdirᢃ35%эpy`l`03 fύGSg~j4afV69#_B9q=KOϞ=`!tqyEd))gJPPPdd$|tDqq1]d#޷`30I}tt4 gggc.Ȧ ,t=tvuM54jhlG�&LԘV(߸eckŶuNPH?Ç:G Z~#9wiO<Ayflߩnkol~{oσ&]tDaa@ADx)7OGڱg|Si)@, xIYy9c|IiټK!Dkmk#fC?;q2#=T@ѼD(%q/YE^{˜" xxyy8dTvZZ;HVMV#;xhȞae!Nf:0TNSF�\Ri/(ܺsC2p%utt2;yh Q.2{}vHH 33ną;zۇ1NIIt'44#Nc:Fvo2}qf7/ݦfBU?ϴeWjř( 3^0,=lx$K+.v/eĥ"އ˓ 1DK{Ӎ7H&@&Lκyx"q-;ǏWk>?DoMtL ַaUy[ ☆ޏTc =9>+jmÇY"O7y侮ZOF\˴}pN,--MMMϞ={17 >Ü/#+8vW|̵6Ö^Ϗ>`&q;:.^1#wTB_'Ḅą˖<aҬ =)4} t:;;-oeoA iE*}J-'Jpp0\;XB&\-V.4%5T$N7n(=$!CvDkMѲh_2-.Rq$v/%PL"2e]�\tw.I 1ećq =uUB4L/482qV"5,0SŚ*y![ [!C\cDY((Lyr?WIoTȜsuN=2qG^$8B�˂riZq^g]ď')aT8*oUKptT�YEĔk@>UtN:;*/>|qvtBFkAc~7'#䢰,%w \-[GS"CBy{z$">P}3 ^ly{(x񢅅+?(((,,,222f 8eVmkk�yyy%%%Ս cG'&&斖<y5,3P*ɈˈSjY% v > 5gF*M3x!µp SsܷLeܼpϯ>XyOO֜V|@xIYsFy$#7)w(i>kolۃxq͏l+H,i{yri۲ mƇ]t>a%ۥg7ke4\ "'ʃsYsMs[?Æ�v~iν&zrsBmC{7#- sG]OcLql/ 'qzWӍf8y-!a7dayfe7)l�o)XbL_y弹_ԨwB55JlyGuDԣGƷ!A!FTd/f^E<!|Oz[_i o�n___oپ 1qqwg<Xwm4v(&bU ǵX$ԲvS噕Y׵unRHzcݷVJ )+;|݄g�C:I[ݮ_xşt_EMVS[777_a=k3f~yD8 r̀߸u[LL AOq#~K1,%<j/^$0Dwjx._z7<)kx2f4.y]J $w ?Dʇ⨪*2nL٘3B?} t=|=_eg65x2.^&%+WGDݯT*ٱ{@WZ(0G/=Z#`KcEҁJ)V|탎uPYo$r#x:)>7U$5x>mxjQ/,@%w5k]u*?~,8yd|Ҳ2dYBI[uTL: #Ƽu4>Z7C3:K}H"bc>jXWܪcƌD겝_Sm*M&lEzViJa]aPKَğT !BYn8J [ݱ7l9D?+`? #~ܷvx O:s%+9|h-\x0.uz!'Nv�uNp6#'ݬ;*(<g_V5= dԩp4O^~*V!GU9j u?`wvMuVrIrq}˗BûhgW7`a16\݄bOo!ښ毭¢"n9 {xyeS_ j#;կ̙;xe8!ʇUekTM{Zy> v~ywM\"+P;nl."PYOOOسFKfDoxGn^eeg8tTYUi�"__?˗gqƾr;C8 pխs{ME8pkEE<q= _y؉=yqQqpvGCWJs-2UD{ޏ~{ƍ;::6u<!D\Fo]=([Ziz)co9?~_gϞΕ{!D$ҙ%ɿ~T |kSxxr=^|&8hMEF|#/ˇ~xPg!O~S`ȵR~_;i֊}PMCߢ"#>?1~xP>g $JN7uV7k.Wd]۲?is&?Ү*NiCєjSqAgEe/\f͠OG}4mڴ+W`i|ᕂSã'eR*] qc[ .}EpO\O|5o\>^%RP <z"yw~ߔtJWR0QQQƒ~ !O}XfV E=t.Dp_?ɓ'kkk윜<<<RRR`G4‧߂D/"]'B߼}ky5رMB?{?hZ[[04)hċ-uuuCਈDEo!Dhќf޳x?R%n =JѰp7O8_LRjJ6xG$!p؆#:m˧HyN sÇa1gh$~*OOO5H|}}Z1OIuc}H@"e._i$2Bw^pp0R໲رcnzz:h@|C51Hߓ7泝!"/X e]duW ΋<+19^T⶜:7!!(O~FDD~␵uss[eھy\MRhJl e>q^+.2 Gk6l_[wϑ;0阑0KOѪ7oބ'JAF|( װ\r%Bm Sg~z)cfY:8N6i0{nl|3N40;'[D6F΍OL:w2ͺU]Y#p$ ;pzwpS&g-?UA׍zDniiWcFS !]}Ʀ&D@=3[p'hMHxV\[SlR6nRiR6ȱ۶nڑPR$Vx:mvz7񑇸Py=HDޏN7+*+Ir⥔NTގ�dzgc'N蘸]0Sx &ҲrdM0jUY&f/XgeG"S8N!a{~εBMWISX].f)22V]j݆4yuUP쒳DWDLNoMF| wݺu… O>zs |ϏO t.,ĩGRp28dUX xyEQWZq , +NMh|t:݁NA8VD/R>{F^(--MLL `n'Ϙ05Ϟsbiv!~Vc{PQauI6<aۮ7nP%EBvA?ȱ:n kfde15+>[ŝ]f͞b`xҕ 'ISӊF.;*i:w2ʃR;*=Tmx,6>a@L"M-++KNN=EdϏ6Q_d8. *Ckd V,f9 "55522'\r?/I48.@G;dE\za=V%¢h|t:BF| )][[[CCCUUUQQQVVV||@?0o~AtɪYFRap@N)J1d_x1hv4>N`ěZ-|A o qi^ȁB fG 2xgg'E]]✜WAAt"#>0x񢫫 " b4(,,,((Q>  fDcyhj48,@wS#Ϟ=#+|C^RRqMz@tmY$]hF4& E#ĄOʣ;)28y=YPӂn", 09aIthL4)͋F&|_t6#Nq + : `cIOCјhR4,L&G##.#>CN)9 iJ***B(\Y$h:4 &Eâyhj48囘QS6 j����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/contact.rst��������������������������������������������������������������������0000644�0001750�0001750�00000003130�12161032160�017034� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Contact ======= It's easy to find the email addresses of Quod Libet's authors and maintainers, but please don't email us directly unless asked to, or if it concerns us specifically. If you contact just us, it means no one else can help you, and we can be really bad about replying to email. Reporting Bugs -------------- The best way to report bugs is using the Google issue tracker. * `Add a new bug <http://code.google.com/p/quodlibet/issues/entry>`_ * `Show current bugs <http://code.google.com/p/quodlibet/issues/list>`_ For tips on how to report bugs see :ref:`the Contributing Guide <BugReports>` Mailing List ------------ If you're not sure if the behavior is a bug, or if you have other questions, the best way to contact us is through the `quod-libet-devel Google group <http://groups.google.com/group/quod-libet-development>`_ , which replaces the old Quod Libet mailing list. IRC --- Quod Libet has an IRC channel on `OFTC <http://www.oftc.net/>`_ , *#quodlibet*. IRC is not a good place to report bugs; we'll just refer you to the mailing list if you try. It is a good place to ask for help with installation and configuration, or discuss development (assuming people there are paying attention). Issue tracking via email and RSS -------------------------------- Google Code provides RSS feeds for project updates with varying levels of granularity. For those that prefer to use their feed readers for news and their inboxes for to-do lists, there's a Google Group available `here <http://groups.google.com/group/quod-libet-issues>`_ which gets a copy of every change to an issue. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/index.rst����������������������������������������������������������������������0000644�0001750�0001750�00000002650�12161032160�016516� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������A Music Library/Editor/Player ============================= .. image:: images/front.png :align: right **Quod Libet** is a `GTK+ <http://www.gtk.org/>`__-based **audio player** written in `Python <http://www.python.org/>`__, using the `Mutagen <http://code.google.com/p/mutagen/>`__ tagging library. It's designed around the idea that you know how to organize your music better than we do. It lets you make playlists based on :ref:`regular expressions <Searching>` (don't worry, regular searches work too). It lets you display and edit any tags you want in the file, for all the file formats it supports. Unlike some, Quod Libet will scale to libraries with tens of thousands of songs. It also supports most of the :ref:`features <Features>` you'd expect from a modern media player: Unicode support, advanced tag editing, Replay Gain, podcasts & internet radio, album art support and all major audio formats - see the :ref:`screenshots <Screenshots>`. **Ex Falso** is a program that uses the same **tag editing** back-end as Quod Libet, but isn't connected to an audio player. If you're perfectly happy with your favorite player and just want something that can handle tagging, Ex Falso is for you. Table of Contents ----------------- .. toctree:: :titlesonly: :maxdepth: 1 screenshots downloads requirements features changelog guide/index development/index commands/index license contact ����������������������������������������������������������������������������������������quodlibet-3.0.2/docs/Makefile�����������������������������������������������������������������������0000644�0001750�0001750�00000000105�12161032160�016306� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������all: sphinx-build -n . _build clean: rm -rf _build .PHONY: clean �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/license.rst��������������������������������������������������������������������0000644�0001750�0001750�00000005263�12161032160�017034� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������License & Contributors ====================== License ------- Quod Libet and all associated modules are free software distributed entirely under the terms of the GNU GPL version 2. Alternate licensing terms (such as GNU GPL "version 2 or later", or the GNU LGPL) may be available for certain files or modules; see the files for details. Contributors ------------ Email addresses of contributors have been removed; when available they can be found in the source archive. All copyright notices in the archive supercede any here. Authors ^^^^^^^ Alexandre Passos, Alexey Bobyakov, Alex Geoffrey Smith, Anders Carlsson, Andreas Bombe, Anton Shestakov, Ari Pollak, Aymeric Mansoux, Bastian Kleineidam, Bastien Gorissen, Ben Zeigler, Carlo Teubner, Christine Spang, Christoph Reiter, David Kågedal, David Schneider, Decklin Foster, Eduardo Gonzalez, Erich Schubert, Federico Pelloni, Felix Krull, Florian Demmer, Guillaume Chazarain, Iñigo Serna, Jacob Lee, Jan Arne Petersen, Javier Kohen, Joe Higton, Joe Wreschnig, Johan Hovold, Johannes Marbach, Johannes Rohrer, Joschka Fischer, Josh Lee, Joshua Kwan, Lalo Martins, Lee Willis, Lukáš Lalinský, Markus Koller, Martijn Pieters, Martin Bergström, Michaël Ball, Michael Urman, Mickael Royer, Nicholas J. Michalek, Nick Boultbee, Niklas Janlert, Nikolai Prokoschenko, Philipp Müller, Philipp Weis, Remi Vanicat, Robert Muth, Steven Robertson, Tomasz Miasko, Tomasz Torcz, Tshepang Lekhonkhobe, Türerkan İnce, Vasiliy Faronov, Zack Weinberg Translators ^^^^^^^^^^^ Alexandre Passos (pt), Andreas Bertheussen (nb), Anton Shestakov (ru), Bastian Kleineidam (de), Bastien Gorissen (fr), Byung-Hee HWANG (ko), ChangBom Yoon (ko), Daniel Nyberg (sv), Dimitris Papageorgiou (el), Djavan Fagundes (pt), Einārs Sprūģis (lv), Eirik Haatveit (nb), Emfox Zhou (zh_CN), Erik Christiansson (sv), Fabien Devaux (fr), Filippo Pappalardo (it), Guillaume Ayoub (fr), Hans van Dok (nl), Honza Hejzl (cs_CZ), Hsin-lin Cheng (zh_TW), Jari Rahkonen (fi), Javier Kohen (es), Joe Wreschnig (en_CA), Johám-Luís Miguéns Vila (es, gl, pt), Jonas Slivka (lt), Joshua Kwan (fr), Luca Baraldi (it), Lukáš Lalinský (sk), Mathieu Morey (fr), Michal Nowikowski (pl), Mugurel Tudor (ro), Mykola Lynnyk (uk), Naglis Jonaitis (lt), Nick Boultbee (fr, en_GB), Olivier Gambier (fr), Piarres Beobide (eu), Roee Haimovich (he), Rüdiger Arp (de), SZERVÁC Attila (hu), Tomasz Torcz (pl), Türerkan İnce (tr), Witold Kieraś (pl), Yasushi Iwata (ja), Δημήτρης Παπαγεωργίου (el), Андрей Федосеев (ru), Микола 'Cthulhu' Линник (uk), Николай Прокошенко (ru), Ростислав "zbrox" Райков (bg), Сергей Федосеев (ru) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/changelog.rst������������������������������������������������������������������0000644�0001750�0001750�00000000052�12161032160�017330� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Changelog ========= .. include:: ../NEWS ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/commands/����������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�016461� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/commands/exfalso.rst�����������������������������������������������������������0000644�0001750�0001750�00000003470�12161032160�020652� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������========= exfalso ========= ---------------- audio tag editor ---------------- :Manual section: 1 SYNOPSIS ======== **exfalso** [ *directory* ] DESCRIPTION =========== Ex Falso displays and edits audio metadata tags. Supported formats include MP3, Ogg Vorbis, FLAC, Musepack (MPC), WavPack, and MOD/XM/IT. This manual page is only a short reference for Ex Falso. Complete documentation is available at http://code.google.com/p/quodlibet/wiki/Guide. OPTIONS ======= Ex Falso may be given a directory to open on the command line. TIED TAGS ========= Many places in Ex Falso allow you to use "tied tags". Tied tags are two tag names joined together with a "~" like "title~version" or "album~part". Tied tags result in "nice" displays even when one of the tags is missing; for example, "title~version" will result in Title - Version when a version tag is present, but only Title when one isn't. You can tie any number of tags together. RENAMING FILES ============== Ex Falso allows you to rename files based on their tags. In some cases you may wish to alter the filename depending on whether some tags are present or missing, in addition to their values. A common pattern might be ``<tracknumber>. <title~version>`` You can use a '|' to only text when a tag is present: ``<tracknumber|<tracknumber>. ><title~version>`` You can also specify literal text to use if the tag is missing by adding another '|': ``<album|<album>|No Album> - <title>`` See http://code.google.com/p/quodlibet/wiki/Guide_Renaming. BUGS ==== See http://code.google.com/p/quodlibet/issues/list for a list of all currently open bugs and feature requests. AUTHORS ======= Joe Wreschnig and Michael Urman are the primary authors of Ex Falso. SEE ALSO ======== | http://code.google.com/p/quodlibet/wiki/Guide, | http://code.google.com/p/quodlibet/wiki/FAQ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/commands/index.rst�������������������������������������������������������������0000644�0001750�0001750�00000000145�12161032160�020314� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Command Manuals =============== .. toctree:: :titlesonly: quodlibet exfalso operon ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/commands/Makefile��������������������������������������������������������������0000644�0001750�0001750�00000000161�12161032160�020111� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������all: exfalso.1 quodlibet.1 operon.1 setup: mkdir -p _man %.1:%.rst setup rst2man $< > _man/$@ .PHONY: setup ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/commands/operon.rst������������������������������������������������������������0000644�0001750�0001750�00000011215�12161032160�020507� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������======== operon ======== ------------------------- command line music tagger ------------------------- :Manual section: 1 SYNOPSIS ======== | **operon** [--version] [--help] [-v | --verbose] <*command*> [<*argument*>...] | **operon help** <*command*> OPTIONS ======= -h | --help Display help and exit --version Print the program version -v, --verbose Verbose mode COMMAND-OVERVIEW ================ Edit Tags --------- | *add* Add a tag value | *remove* Remove a tag value | *set* Set a tag and remove existing values | *clear* Remove tags | *copy* Copy tags from one file to another | *dump* Print all tags to stdout Show file metadata ------------------ | *list* List tags | *info* List file information | *print* Print tags based on the given pattern Miscellaneous ------------- | *tags* List all common tags | *help* Display help information EDIT TAGS ========= add --- Add a new tag ``<tag>`` with the value ``<value>`` to all files. operon add [-h] <tag> <value> <file>... -h | --help Display help and exit Example: operon add artist 'The Beatles' song1.ogg song2.ogg remove ------ Remove all values from the tag ``<tag>`` that match either ``<value>`` or the regular expression ``<pattern>`` from all files. operon remove [-h] [--dry-run] <tag> (-e <pattern> | <value>) <file>... -h | --help Display help and exit --dry-run Print the results without changing any files -e | --regexp <regexp> Remove all tag values that match the given regular expression Example: operon remove artist 'The Beatles' song.ogg set --- Replace all values of the tag ``<tag>`` by ``<value>`` in all files. operon set [-h] [--dry-run] <tag> <value> <file>... -h | --help Display help and exit --dry-run Print the results without changing any files Example: operon set artist 'The Beatles' song.ogg clear ----- Remove all tags that match ``<tag>`` or the regular expression ``<pattern>`` from all files. If `--all` is specified, all known tags will be removed. operon clear [-h] [--dry-run] (-a | -e <pattern> | <tag>) <file>... -h | --help Display help and exit --dry-run Print the results without changing any files -a | --all Remove all tags -e | --regexp <regexp> Remove all tags that match the given regular expression Example: operon clear -a song.ogg operon clear -e 'musicbrainz\_.*' song.ogg operon clear date song.ogg copy ---- Copy all tags from the file *<source>* to *<dest>*. All tags in ``<dest>`` will be preserved. In case the destination format doesn't support setting a tag from source, no tags will be copied. To ignore tags that aren't supported by the destination format pass *--ignore-errors*. operon copy [-h] [--dry-run] [--ignore-errors] <source> <dest> -h | --help Display help and exit --dry-run Print the results without changing any files --ignore-errors Skip tags which the target file does not support Example: operon copy song.flac song.ogg dump ---- Print all tags to stdout. The format is not specified. The data can be loaded again using *operon load*, given the same version was used to create the data. operon dump [-h] <src-file> -h | --help Display help and exit Example: operon dump song.flac > backup.tags SHOW FILE METADATA ================== list ---- Lists all tags, values and a description of each tag in a table. operon list [-h] [-a] [-t] [-c <c1>,<c2>...] <file> -h | --help Display help and exit -a | --all Also list programmatic tags -t | --terse Output is terse and suitable for script processing -c | --columns <name>,... Defines which columns should be printed and in which order Example: operon list -a song.flac operon list -t -c tag,value song.ogg info ---- Lists non-tag metadata like length, size and format. operon info [-h] [-t] [-c <c1>,<c2>...] <file> -h | --help Display help and exit -t | --terse Output is terse and suitable for script processing -c | --columns <name>,... Defines which columns should be printed and in which order Example: operon info a.ogg print ----- Prints information per file built from tag values. The pattern can be customized by passing a pattern string (See ``quodlibet``\(1) for the pattern format) operon print [-h] [-p <pattern>] <file>... -h | --help Display help and exit -p | --pattern <pattern> Use a custom pattern Example: operon print -p "<album> - <artist>" a.ogg COMMANDS ======== help ---- operon help [<command>] Example: operon help list SEE ALSO ======== | ``regex``\(7) | ``exfalso``\(1) | ``quodlibet``\(1) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/commands/quodlibet.rst���������������������������������������������������������0000644�0001750�0001750�00000013711�12173213426�021211� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������=========== quodlibet =========== -------------------------------- audio library manager and player -------------------------------- :Manual section: 1 SYNOPSIS ======== | **quodlibet** [ **--print-playing** | *control* ] | **exfalso** [ *directory* ] DESCRIPTION =========== Quod Libet is a music management program. It provides several different ways to view your audio library, as well as support for Internet radio and audio feeds. It has extremely flexible metadata tag editing and searching capabilities. This manual page is only a short reference for Quod Libet. Complete documentation is available at http://code.google.com/p/quodlibet/wiki/Guide. OPTIONS ======= --enqueue filename|query Enqueue a filename or query results --filter tag=value Filter on a tag value --focus Focus the running player --hide-window Hide main window --next Jump to next song --open-browser=BrowserName Open a new browser --order=inorder|shuffle|weighted|onesong|toggle Set or toggle the playback order --pause Pause playback --play Start playback --play-file=filename Play a file --play-pause Toggle play/pause mode --previous Jump to previous song or restart if near the beginning --force-previous Jump to previous song --print-playlist Print the current playlist --print-queue Print the contents of the queue --print-playing Print out information about the currently playing song. You may provide in a string like the kind described in the RENAMING FILES section below. --query=search-string Search your audio library --quit Exit Quod Libet --random=tag Filter on a random value --repeat=off|on|t Turn repeat off, on, or toggle --seek=[+|-][HH:]MM:SS Seek within the playing song --set-browser=BrowserName Set the current browser --set-rating=0.0..1.0 Rate the playing song --show-window Hide main window --start-playing Begin playing immediately --status Print playing status --toggle-window Toggle main window visibility --unfilter Remove active browser filters --unqueue=filename|query Unqueue a file or query --volume=(+\|-\|)0..100 Set the volume ALBUM COVERS ============ Album covers should be put in the same directory as the songs they apply to, and have "folder", "front", or "cover" in their filenames. If you want to store multiple albums in the same directory but keep distinct cover images, the name of the appropriate image file must contain the labelid tag value, e.g. COCX-32760 cover.jpg. TIED TAGS ========= Many places in Quod Libet allow you to use "tied tags". Tied tags are two tag names joined together with a "~" like "title~version" or "album~part". Tied tags result in "nice" displays even when one of the tags is missing; for example, "title~version" will result in Title - Version when a version tag is present, but only Title when one isn't. You can tie any number of tags together. SEARCH SYNTAX ============= All of Quod Libet's search boxes support advanced searches of the following forms: \ | tag = value | tag = !value | tag = "value" | tag = /value/ | tag = &(value1, value2) | tag = \|(value1, value2) | !tag = value | \|(tag1 = value1, tag2 = value2) | &(tag1 = value1, tag2 = value2) | #(numerictag < value) | #(numerictag = value) | #(numerictag > value) \ The 'c' postfix on strings or regular expressions makes the search case-sensitive. Numeric values may be given as integers, floating-point numbers, MM:SS format, or simple English, e.g. "3 days", "2 hours". See http://code.google.com/p/quodlibet/wiki/Guide_Searching. All internal tags begin with a ~ character. Non-numeric internal tags are ~base‐ name, ~dirname, ~filename, ~format, ~length, ~people, and ~rating. Numeric internal tags are ~#added, ~#bitrate, ~#disc, ~#lastplayed, ~#laststarted, ~#length, ~#mtime, ~#playcount, ~#skipcount, and ~#track. See http://code.google.com/p/quodlibet/wiki/Guide_InternalTags. RENAMING FILES ============== Quod Libet allows you to rename files based on their tags. In some cases you may wish to alter the filename depending on whether some tags are present or missing, in addition to their values. A common pattern might be ``<tracknumber>. <title~version>`` You can use a '|' to only text when a tag is present: ``<tracknumber|<tracknumber>. ><title~version>`` You can also specify literal text to use if the tag is missing by adding another '|': ``<album|<album>|No Album> - <title>`` See http://code.google.com/p/quodlibet/wiki/Guide_Renaming. AUDIO BACKENDS ============== Quod Libet uses GStreamer for audio playback. It tries to read your GConf GStreamer configuration, but if that fails it falls back to osssink. You can change the pipeline option in ~/.quodlibet/config to use a different sink, or pass options to the sink. For example, you might use esdsink or alsasink device=hw:1. See http://code.google.com/p/quodlibet/wiki/Guide_AudioBackends. FILES ===== ~/.quodlibet/songs A pickled Python dict of cached metadata. Deleting this file will remove all songs from your library. ~/.quodlibet/config Quod Libet's configuration file. This file is overwritten when Quod Libet exits. ~/.quodlibet/current A "key=value" file containing information about the currently playing song. ~/.quodlibet/control A FIFO connected to the most-recently-started instance of the program. --next, --previous, etc., use this to control the player. ~/.quodlibet/plugins/ Put plugins (from http://code.google.com/p/quodlibet/wiki/Guide_Plugins) here. ~/.quodlibet/browsers/ Put custom library browsers here. See http://code.google.com/p/quodlibet/wiki/Guide_Extending. BUGS ==== See http://code.google.com/p/quodlibet/issues/list for a list of all currently open bugs and feature requests. AUTHORS ======= Joe Wreschnig and Michael Urman are the primary authors of Quod Libet. SEE ALSO ======== | http://code.google.com/p/quodlibet/wiki/Guide, | http://code.google.com/p/quodlibet/wiki/FAQ, | ``regex``\(7), ``gst-launch``\(1) �������������������������������������������������������quodlibet-3.0.2/docs/images/������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�016125� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/images/queue_2browsers.png�����������������������������������������������������0000644�0001750�0001750�00000677062�12161032160�022003� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����5���._���sRGB���� pHYs�� �� ����tIME Zc9�}IDATx tU?e73ofF*0BUAAEP H{H!t:WwuUV1A~?v[U*9[U)X����x9��qq����@FwHU΂Q2��m+!I6����@ C;aG{B*aX��ւwT0bfh0����@ C;2#<2B ��[ VZ*BbZ<|jZZT*����p#:2#<2#=!a!?!^A��pk;U&TN#_{I*J$zX\����-2#:2#<2#=2#?2fSW���B➫BJf^'߯ |Dꊊ����oԑa!` ��YnR$Immm4����<+**Ȑ ���Np8l6bRL&RRRp����TdS\\\UUEd(d+dXHp���u=XXVѨVjttЈ���[$U}SٽVVTTA  Z2,$Ca ��΂t٬D"!_ڞ 7|o\����hIT]@|[T*d+d(HdXHI+7�� OW466\pT[ڐ4[n[)j����@ "7#HҌ4&mR)egg  V'n ��΂av;Bt˵^bn^_~S^I9)+Um����pP:t2#0Ҙlro%I+yyyd@HH2D$;@���7 V4MSSH$Sꥲ[v|;׽軀eY����iL6ۺb2 $B28B��Y"<`|jZUU%+ƎY,V5DQSp}{CCw;u*)]k2BxV C*b.ֵZ;OiZ.;r/5-m%u[3�ܿTdv @׷myN%CA!X((( B z1+V���: V(2 JR"TTT_Ɇ.x~/07�}(%$y(>XS2NB-Kw!m齻IELv!"٭j^l-m%s]=bgZo;w #c*4&mpniv?h4 JZZZnn.aPKV���: V'ZV)<`LV]k!c'9N  "KZUI !kdZh]TRL5͢3q{BJ]߳RR?$(@L|~y~A!m;p*,DԶZ Uj]N,8y("$8dq(R   :|)~ la˷ze\!R].%+W]:y@ސ`rTwWcI-lP E:VلIR4&-/F-WvвKBMcVzx1��MP(bqII`K1 ?V|cL �pjn8jҽRK:Vݲ! eFL>>x<)@R>Pj?8z=A|]Am;pb_yzao堠'Μ;SHTiBq2.] %I&iCǰgΟ?!V̑QV]"&8_Ptbʥ˗S]W銴Mvŗ^ki:#$}JREFFv}@FMݖm+;ح㒡Nfee!!Y`��򺺺b!XQ*73b$A 2YzC3�ܷ$G]*?,T4 +&R(:Gʻ=IB䣸81Q T׸v[s%E@` "5+ZOkt3IY!J W'i *Œ{ {/Ruۃ6֥DpBUWPp <2U"kdk&ojd){LWj\0Q2,=w8kyՍr~!_**""2Ҙl m۷\ɶnHAV\BdXH‹���t5XD{T;f=p~9f)�%=r}{eեH? ˄ҚӤ+kD#VW%ҦhWU썣$tmBvZ  jPu"`FЁVÂKUmPndIW&6?hDJE. {w<DkCi]RCR\dg3; pRT ) H3Ҙl?m7q|[e+WV`%))IVȰ ��m+ݹ8f==<ʕ8rf^}I&cǎ=q2YCUl?Yr0Chߑ\@>TfD΀},.;N~;DMBG@L..%oہA&liBH僗>):3`o~s = $+nDary]Ϸp)2sEOjy"m/Dvueřw>Vhv4#&mKm[ ��455oТ"!X97p?x 24#f}*]{GGG:d?YxXr鐝|[a|Ec]TN*<=; ⯹jșͶG\{ Grݮww <zD@դwhaSR޿;*Osnt:}շzY\}O.ui%&Г9=Sܶq˲&u{"bNKJII9m Bܧ4;}hB-iFMҶ:VVJff&a! "X��`|l>}<<==f3�2{_С]+.;vJ<Ll-TIDE'Gv9pI"uou%jo~q>v=]~T@%>xߗӕbwxnFLxȎE^.ށG~?}1ɗ+꬈=A/kɟ{KkZv'oٱq Imةⶍ[ }e7pV�)Fw^24#&p[2V���XrARp3}􉈈�P߶mX�uZ6,,fY@Vd{444 X�� mh�D\pH(Kp5��HPݻw:Ef1,{-d2+���w8XH;ϚLz����hA.+. H{-566"X��D"���mQT. d'L@F��pgHRW___����:a ��;8qȑ#QQQ����@#>2;w��;9cfQe���_}}="X��@����V���Gb������+����`��+f����x!X��@����V���_b������+����`��+oԩSC˚kD$kME"՞[JnNo^z3|dwl`^o `ޢ.\c+L!N0嚷M k~���~m���ܛ`ezν&t?w{J嚟ZC=`ŠnouCfx >"jl֪EY{~tUJ=A2ݏdo\7ܩ���+���`Ёf}5gNJK>g({ҷ?H,~L]>s6 /zg̙32a%pL(kC[,3g-^YkpOV+[]bLi]pdUUٲ٤_s?vwZ'lq>pwO7MfHIUҜퟭ&G5ݯwC5W,~3$v{ުub,vY>wkڻn [f%4H[i\(;;'OVDN۪ol:O>^tG_g5���=V���MD/;SE>,[ /`Yt%bO\M8',#ku%Y`Bl}wKeYȊ+TZn8|RFIoY7uJw \W7}hr+C[ڨ3Vo-{n)X!Y!5Ӧ%6UyOQ5㋹>vxɜ w$X*XO꺀%gyK#g���+���)XFCW9#I}`E՘=c%U gMzҪK>pfلAșp o̖\oAoJ^sԩͺvW6#ct\`SAhF=c+v[ VԲ Ӧyg4װ8bլ:n?㻽g7E|xLk7;M&AtrVI7zޱbLZ��@��+{_A _9pًI9 LoMU>s6 弳ϊ3|W~͹|rp UBrof jOܪ6m{-̚5T!U&!M)L:\ݶjgmrE0Vnm[5do-Ͻs{ :ͺo}Z^uÒۮդ_m&|yO1mھZymyBw-���!X��JّL钨Uu PtjYjfk4oZ{{ʇ%VvlkO4KNyO'UnoJS~;#?W~h)?dIC VutV26Ϙ4{z%IK|ޚ tZ>|wş|Fq[+&V_i_H���@�� +フrRШjɷoZK9`Ehpy!qy>s6r4bNo-8ˤv9KŊjR_Vjt]C:{I֜*Jl*8QdCMFrP-dBwEgK T+M*r6]tFѪe/lGFC+|^Ҭ<.Ҫj__vxo[Ӽ}뭊f*vɜw}ʬ4`<M+o/nia�����`.-Yz͚%n8UKf͜9k֬ū??a4۵ouP83b9K_(پ_bkhB{F'6]5gƴ>-8(\Cӝ=Kh!$Xi+6"cˢS^3ڹ]7"dLBGP|tG*Xْ~{}}_eZf���+���t?}1'�����ԛݤzwv!X��@��p 9>R\��B��`�������t`E ����4+���V����� ��@ VT����@C��p����x!X�� ����<��� X����+���V����� �������@��`������������@��`�������ܗ M!Z:>..L��B��pD!;'hu8Uc.-dL��;+ˏ%I㻁u:8_Nݩ9vNkevB;43:;krvol3V���Kbۍw yJS}}U~]Z V~34SZbD/a/a ��pg. t G;vie9(VOG3rМbL6r8mdY+���V X��+?W8:Q[i-T59OUL 42Nl4���+`%35˩C˅0ew*uV5KĚK+��ܑ` wBEaƩ)FgcL4gsF5Xi:XB��`j N?eǪK?+ 1`I|l`ƊR􂩓ؗ><5ãa'O]-  io:6gB|'O 3xE_ +C|�� YK&3P[hbs*;UJ1ҌY)@QZ53v`wXhFeF+���V~+ Gߧ +JK CG8}=J: V<<zڣOO1 ZRk1^'4?qH5mft/ϓ2;4yuKj7Xi4sۀcBO]MSAϬ`��[’ɌNF6e,z Zh+YmN`6ZaɌ¨ʹƒf05[F ���JH;~B>-vn̩Wfjjŗԫf]#$X!PTM׷ZmCqORhP~-@fI.:~SDC+I[:on쐩E^w{n-o(��+0NZoqMs:;W5HmQwʹbzBg)P*l 42SVgu0d?z ���6J.Lei8uYn*X48yĢM OV._x<]P+Vlb ;^hT_氌x}w8tXnNNmy-Ac'5Ӿ<a1%W6c=9}Q|ڽ%_Xu|��fM^4P̔iࠅTEkcNWlIRUrBo)ә 45Y[5י(9EkiHf3Yݩ8+���VZ+R]P΢[*r J_?N+dgxN>E_-4Ƕ=<Zg",1\cmܱRҩWj3jQA1dzŨǫ>;t6�~ VZ5nI;Z;}xֿIomNաjkl:SZZlKlh65ꬌbQܵU3V���T(U(ת>%强}eI踄?6]o6iAD֜~m̓V+KK8qB^U^oҩ95yY_E?LJǃR!#W`��^"<Ž\_r?cEfc3j>+)VEq|BMfИ9VE M\sAIU BW+#1FH)(F7#X��ʖmߺvȨvjkkꖂ+XYt#^Y/f|क!N%`E!gQS[nUG+fDkOAo;X1D~?VPEU \T(kuzzv~v-x u VjN:n3F��s z",vԚRz||YAce¿_58Qofsr;[i j3]iTfmPҊ-6h+A��}FMJ:udpH`*Zu̩ +bM _\/8|{^JsՐР3gOηMOimshTc.]4yϾ45bX7ޡGNu㉳ݞZBSf_~|xmm |_VبU69|VՓ&w|��V ׅ*+,b /vi9SӔb G9M 2j Ʃm:Xkg*V56Z:쐚deLcS._eB��}I,o ؞(khU+?%%Ysͅ .E Vթ ?Z̆}S.ݑ`t8|R`P@~A^*r Iv$'f+ys>< u`b}f/<=سOAO?3}E#:aZt |5l2l싫6ן^~xm'm(1⫥czz<sEjݏ}8j\F��pv'RγTnĽCsj(ƪ(g!8oeiJPZYk2qzkH)WGbwE-[VmD&`5eZjLj0RZcΊ`��+FID 8x@ľIeT*^YUFe?'X)m̩ђ+~qm|k, ̌?3X!&ݮ,`t$9 9Yr#hhj.u%X,&鋃x9m`��%X(EHS/YjhVicVd3uER]ebdw*)aNCdBok)NM1MW6i2QzkVcWlEsV(+���7XԉkIA՞OIZ+,+-+QR/LtA\/*'U V$T|Z3HiyC]+ɷnΓSHK@N95E*Drȥ D.%{N.E̼qOb��0Xa܍揭$RiᚨB )FKsjUS,Tam8MeNWVSJ -#:x*ajbfJ͎RAF9̎Ljm)Mb uY`��+U5Hܡ₢U{B--+*(qWV`%Wqz[]Y2*f׭-iN[6}n/X!zNN9rR!I9Mw9}rHU2J^BYxNC}|��w вp-°NY23;8eh9n|FrIvA+F;'ӏ-%N4 vVG1zSowmG-ٕUZ\d1c��+%%eEp1RϾz-ӽUqǏ_kYE`jԒi]Y.d|TP}E?'X!nr:d 95""?yL.���<Jp7OU~Y8;g"Rb6Nks*Rm]3<פּr]J9(K;ڜ^֋O-T*4[ m`Yǐ̷dihLs8Ӝ@��}k9{jNfvΕ̴̋dBvȺvmm+%O|I*QZSu+sr D ֶ\蘃.)���t``xZˮ`iqprClfb4`T)G/W̵zΧ*,ٜe|cbdܗ-HZ~liJQ-Ň)Z+cs&3N#X��JֵWs2g$O XVvFzFjjZP%<c{ɸ̬RE`%9vy-#.}%&&'pQr:g$UI@.R%\+���W>Ng{a8~ƊmfKMfQR#!޿NbZ24GuhHϬZ]W{y)d?YgYsOS.>`-3X* b8a,X��JzFj - ?2<tOpb[VIȃB$HDjN7x-:;B3\;ea3NhV r29- DZ^+���cr'׶ !8nL`3N uXhuԘ_A]N3TٸlyUWLc%c}1=\ĖO\]rE4+Jm6j+1E��ЍsɩZ9~#'iU3`G ?'X9yHƤVK|֔sL_:Ib:Tn5X!w ?/ U9͈;woU<XY0sC6Ƃ}ţISEfHуfS>��`^WֺdgTdgwYVRulfh;u윊*uB}WUiuOnipqˆLPO+*Ş{~EKG/Hl{>^lVa ��No*ĩx?mj'v+G3^8ѽJ9ʌ}^gnjSOη:RENlU^L 7:$z㔾d&K ΌGc"?s'6UՙF��nr> s%4ksd1Ҭ(Nj5&rV%mlvFgs6Z#2ӛ)DfOGmS̬8+3TȒgjf*$=dY ʕs2>kJR[uV���s^h&V.x8DLM{uw¿Vyq y]LUD<P+mDFEִ[i21bC<={sar5;wYzm"yꩧte~4wCpCluhѠ=qэ:3G H0ev2^oD+WVmCsf̘d+{x_};A'7*6=kȐ!}}]7w8h?]?��@GţU[`0dr&1gj5h1,2dN'Y,6Neg\sp~}8\.5V\o)69UdџcK~vbte56&> X��ʝuKJxҳ{Oxj 9"/-+wUZǿ8rJuO뛠>${͹Ԑ9 fR^>vkE+Vxs^Z{}_\`;VF yD'sk11˄N VFUͥSF.8y+kJufIыcDv=Xi��tp/?yOR׌8sZiVgWgVo82JoUk|תCOшϣʚl-LR=9~lB$*ǑQ>[?9Kg?.jF��`uzv#>5o'.;H;+5BjVT&Yc'oq(#IoC2|ԨQÇ<+J4c`rc˚~_thAD(cxxI2/E|0fN V4 e8`Щ3GɁo#FU `w[?��@Jܘr 䟫bu@&;s*;'1 4Ch2r: cr0jSj50.ÏW?3)B4XFBb-]a]8x*ygՇsWhDW9^铮x.ba ���m >Iɵ+t`eMel/ Rh.6`t¶vcWIR\^7ҨzJk Za.ʪ-u%Xib}$ǀg[*ҙp��t%XrMZiv8v'dY5Ӝ4[(,q ?x8-V2L[J+\}lG,1`Tg/-pNiNTX ϋ{}2]=g?=>Q$;#ZxYY ���_슂t`e)Ո~ ey{75c/N4Dxx gdƊ;f 7qtJe{F'Oɛ+ZiG]B6Xq��Yn΂ivUUXၵFkf8NV)-vJ(.0h#rz{C{xS{~y3pe|^lENӒ+/ӓ-&V؞߅>Ȏݘ{|G`?z'G�� X}15(#6H ʢƵv2/3xCj /֤)(ʺŧ_\"V(".Jn ڈgғMoh 5/AGY'vw ӆnX?WTrm+��6XifYVkh2OWs);-i9cUXq6J._k.̀M>nZؒJ7wȑOʓNro+O)]pov\y˴߬8 lH{xsF.0X)���+`eeٓ'x 8qʻ jwQ=E]!tK>t!^c]@-lR|w$n Sk`B[0oIL17ҖĈٓm.+Y[c#8yqt��{nhig8;˿8 vLs6I;ԚDs[ ]3'g{O£k{^3;.~G)qL\鈓.׼f\xᓛ/<mV͗&uzNzhŹG6g.{ϱD��`WtjL"Rqg��A V~t돪u-vIR4X> کV;pNIpZY[IQy=7e~?z=Ư9/zOɉǿTH?>RMӇ*=*_v%'{΋wWۙsm:dPD%lw3V��� X]2ẋa܉`��~`s 8bUf`q* ФAZ,g(bcv7"/K#ⷽȜ^t^\y9_? I;{Zأz/M{'3oN{2.5ƉuV���Kb V^",+ޔ^ /#X��{ ۅ`mBic{|v VYirp69윚b)7OAY?|q̴ygK{O?97|dSCAb9z=kgGe U 6#{?}^#[.?jp慺<-`��[+{7.#huCt3��n;c4XaTq};\7rM;l,czuQeeվX=%{_VGn<s}1x#{oQeoJr K7](֚Öl_Hǟؖo׿]jxIߔ)K,V���G��� V\on6co<" 9>d9>XVzu@AE[=>>*Rd*S ۔WZ [.ށ>!Z{`$Wh bYpE/{YuG$eGER ������_:X'a wcԚTi*+FnwlLپZkgz^~GF=ΖBKEۨMgzy/xj~!Oօ5%څE^O|J\mu[JeT",+k/4a=fs7W̕:&K*1��� XY<bSO=kmOL {'z%+OE E4uO?լ|=^no˶ +^{}z~:EyԦ=gO�A#?��p?+ 뚷-sҀv=TD;MbY 4f̲R[o<!75?]Ȏ==4nˣc+"R80O͟& /dkmRCܓ54|vJݫ*Nv#h D$W>̆91WcMi\V*uv ���+7gTe# XGǛ $s }PL-+V/v+5ʫ'_ۯ]6dPs8i? V:��y§*!$,7TX ׳T;TS\IRʵޙ\hUMi=>걿r8sp,gb'ĺ^y?:R9\;Dڝ3D钬_9U:.h7FoWdދgjڕN<>OV<)t{fG<1Q_c3V���!Y}|)y?%cEoFσvV+[+]4~ƿ:7H!x/c &ODМʹc 9e퇮[.}0rP۹$-3|'Iٗr{hSZ#K͝/n]v䉣 z5~L5tC_2;_cjE+&1q3WOb׼rfPY?ٶ��![qp ˯q/Y3{Fqն}bӷՅ)YMW=u=:hwd̜p~k]%Oz-񙤺i*UR]WݕǐkW^ٗ'}wTɹǧ=9;M/`Ftѵƙ76dur+���"X'zOtVvc6|mkIy_;ឤ{oiԔQ삳OaWy۵~^*V~oUh>%8oM׆'OO:ґm|}WoܸE'X`u =BkUw$Xyŵ HVx\TK S{ݘ'֯VF`E[̐D)??=3Q׵`��̓~;,0NY5l;- gspe4S4N$\?|K^4豝Wz.?Ы!O_>Tn03}aٞXo/={te^_47S2/]WS<ᏛRG?8sՉ'' KxGy㍚##X��Jbb"~אC'=΃)ޓ/DcHۭT5HU>}.( iKf,-w⽿-FE ͕Ha%N])V"z>_(#!|fϬi:Ɗߟd64m,VKmy /}E >BvY|Cm>VAO|=tT'ղA'Jm�;+\5WrL,9.594 ǿ�ҜʬJt勩2,s5>MkmJ;XP1lYW\>>G|"(gEӢgbǟ)&}&Q4Odvd ̛~vQ¿/~bC￾' v`KeCrL_bH{UV ��nv]CvnrWzO{+_ wٴ*a~]Ʌث+:Ik 7nZ=^fh7/~2K_KĚ9]$X! \?]d)sonb׃-{h)/;g=�jmovԤ#^Niqr!.(PkC|a+m�\ d,6Skw2}Zct]sUEzSF1 2Ø?Ӿv̇>={bM kgVJ$<?#1a{Eݝ5|3I'6 :V?,]ٽB Ɵ8pQrժ $U38GT ̱Fertecn[6B`���ʯ=X>>`b PZ1m-w25՘rDi,<>[l׌B_Ls7Ҟ`J]|9L m3_~6Xq?֠ЯSyu³{MaƊΌue_ynaBM֣_HmjqC7W4,Xi[�� pcSkb%7_PFFFqzd+͙l)חMRTawg?yնzΰ˚iXg\?۳{sG=Ǡܙ_h(".yhw\]`袙'ʾTޠj4dVh_cwVK/P^Sj6ʖ]XzU,R"X��@``E|~1ǀ7,x םAzNx\fSFj fx$w6n>0(hɮ}Y>w$ߍ?0o׋LynfM4gظq׉ڟ+\ʠŞJ8 d<?#e>PuO:DgqQzgX͛{-ي%j!z+1ixNx}b$U'|\jcd[�� rF-PMFi1ʩ9-v@WB 3VG3s$ 6|*3͐2:zeQŏ].z<olxtɿom0Α+KzS吘l+1VzqY#.z(<`Jk6״zW A5oJUV��� X,X>irOT^l_ݒɚC LзɳA87FѧOA^]zzB|q{5 ;ܴK>/ۇuY-[ճy9l\7 `ۼt„gY'V(e#<d SkV Ycg}d $I@c:nVq'wN ^h[��r6&[E)OO8i;-b'tk sb3#:W6*V]i,6So${`ߑ6#{a~ߏVm;ɂ͹sM&ח:Kl5t|y-˜(gMnT+žxnoT2WgS{l%YX@@-`���ʯ(X/2$��dBNZXhiV;sziRh*v8)iv8MpjnXVErȬ␙+y)!S/ZVN#3Nn4"|NacZffgf% oћ+)rGɩ+6iꯩLV���`eÇ'_Vw�6XYk`\^e l矫bq71ѬΚ윉_b_ Ȇ|N`uvL6h9EL\=Ca(5GU5t3d27Ӝv_g9iqzCkmrhNVQMVFme$GΞhGB^~R5Cm^wRSh@-hE��p+==x ^YYYGE+��@7 V'oVf#md9OOX+ +Qy+AƒWX'YIƭ)m\qAqSHYLN4HO;Vr+956Rv)\G tdD&Dp/~77v~[ KSJw '$rs��oʞ={{(*k䄇T*R2e… ` �� dXJQvX4vNmgu6DsV:iS=>a)f,kppj+Slt 5ʋrCRg`e&8% +ʈ Ml`MLɑl-_]\SW7Qi@E\unkk(3ق8pjq{ (A62d2I|/"AE}?ޜ$ %(s [-qV#'}99. ?2l# ���7 ttt=jxP7+/^Xuuu���@{ VZNJ ꚧ5lD$+ȸrqMm"S<?#u6\B&QHUVqdebك^h !SQQ$DT=Wed~uP_^ȫ T%3t)vAҺo}mM]ZCj~O֙CVEAbnۢt?OB��~+O<:t, j&I\Kmٳr>}N:`���[R){*W)(6E!kke?E]R%2OkB^PTMXT^HU ^,K(y̗<`T*sIZyU f|`VL? ŧh"8ldNWeu^gvO'f~ ){+B=վ.OuqW�� Xr_||邛n\v)ԠA]tٲe κu&OL,y_l3قW 6-wc{1~޺lA/좇g t˅wYV���>`E&)g,rA\T7JuW*"څjYD"RY-kdl"MXΩQ" bx*v]%SZbdxS,;?ݠ 3:h-Lr0=_uCt'@-N2xQ>N:,hErmNI 9ev>_tc���`eĈ<zpg赋7.\8~'ӛX߿sιL&s߾}cǎ}ʝ&/n9Xr~+*`F1Ѷx5[~ :1".`�� VrN+(L[!0 T.)J~يiM\'҃ <i@X_,*ߞYHȟ*,+Jk2+/VڄN~;m8ZbuvuA'6;ԙ=jVOk̵/ԙǭN;uvz 3ɟv$idH~slhvQGWC4z-B��~? xf[o|?wG/F~ƃCFfgliݸZN2ryA_"rqʂ>_-Xzƍ[#+���ER]4O*]]=Gx<Ox"SU$2auo�UjrBIdմrQPv'o?qc?% }{0E?Bc{M)⛝;\vZ0X=ZcܴcFOKtvr ZvS;L'H]q]&8@ή^g8֙|@SgGM ͎ښji~`��+? MFL޿-vm&!ݹYGG{…jNNNB~._ٽ{7c+*8X0`f=h~L>qDK5+V"X��x/G(""j6 {.>ST aHeYiĿ\S ֯)UrN<U(笿5mG耥>9х|Xw!:O.;T#Xr@׭6hziП9|pgM}s~f?{v&\smDgϻ]=C{Pgﰮ{rw4MQ;3ڽ'?:^7a���`e&Oeown]ckFԩSռ̈ÇwԥK7D{vJ :x+YοKOWʸ3Jnn5k}- ��@ V*kE<JDoh6XƩBaeVEufE RQ.}*TOUORR+JE2P$N .EmOX硝Me^o:(/R>75 fO;vDFo{Rܫ|M㎶ǝ.7ql?,FH\B;IdbKߝMQmqv,(N9mֶ`��+C 8QF<i/<j]]KSs̙j+V HrǏw +삠a>a2;N. ֝-d i=A��+|Y完%A9̳dHs% \ CHS][_V׎gaV>eJlHT/ϩ*1ʃY9<IeVEeqENŕ$Sa6wj/hjv}]6w;5#UK85JG*,qC)Og?[w]vF{ ,fs?E��ЮAn8ev:رXbѢE?/ +7-z Q\@>)i ŗTE{!%lEnY8q1��| R̞y '}= 8QO{C*{cƕbBV*)5 !V2ne KZDX^P^M+NWE1SDli..,WǰU) ~M62a!'o%z\[Z̮`+*WɒkdŢ=b )o_Ț~1ǃH^@%E҃\4��q~}MOk7_ ?iiiuҥ`)igϞ9| N,`MLQï˜2E:O z/ 0y-��GdW9Ɩ nRO|k9lR4v:_R̖f𫋤ri-VʙY2GX.&q|Q^E͵RVG>)KC'JZE C*KjBBP(dO2BRdBL\W˥ f"S?:Qp&>S\%y|x{ 1}NTK39`��+6lضm[TTСC?n3H2otb]׵Q￿[nU |VRg#k~gZ /-��|ʍ2JdBgt&}s>}XBd,"Afp6=}¯dJŒ"T\ÒʙR9*S(Se/2%iu%arq2+UƏa+*+j5OE5r:]P.U(?TRIeĿU5LqiŲX}qWOS3w0O_*˓J厺VhL|Jс!X��hJ~~)S}hJFFYll̞=ήg\l[ V?+���6XY?4$wർ//u!SJIxC #tG&wO**#Z\=IRy2D\˗Jj *3eI2Oz@\aO_2&$mK'W*`g,bRx"J q55OJSӧro&(+q"AM@#7BZ'y{7 3mN=zN >`��=Vj]uL?R|7BK8˗uuulvo߾`���[2f79_KjAk17rWfNemOc 0*25'iRn&/KdʂʒJy2*J1R]{fXaɽ$Fc@keΞt'篇%aE*cԊtN Y#|*zZC ,QPyN)k{TgZ}|+w``ڷ3uO$u6s__D?`��V\/2wUuV]]]???bĉ?#C���-XlWz X06ĸK@͙cٌx~u &Dz."#KU͐SQ;-MX˭ ߣ~?^RI١'_u:Ǒ{b>=ݙ'Bcye{%e |Y.OʖJQJ%ӂ@q~_L3oϥ<<zQ!gp1bGïfhixَ_��xBzzȑ#z~+CӉ={n߾q���xWs?=A!?ȟÚv7wn,c67^ÑDEgq+2l-UKeyB7g2>}{'wޟ=V{C:u!V�kZok #C)gL$$9t''oCħ׵h__Zߓ:60)}O`|)Kٓo6[??^ZU ��-X![ݻq!qq'On>\ ���`廀;H CIaqSgKb,ޒ$O*Z$O(cJ iM WgR^9Oݝvu $׶<I:5}]vtEmZ09I9괶NNt[+o}얖Y{nDgӴ |j']w}y(IT%t̯.~4qp`Et)1.8{O6Ehi"X��x%p& ���`E/0'SOJƗιYRTrbm*4hw3L,C(;~qWk:OܪsVgm%7c{Ձ?gfs`eO_7};~&ld6!:Z<5zh_?_7Z_:oV/ O54?bΰUKov߭.<v={n{E3m-Jd|2Ckm{V���`+���.y=ٽrP8+=;v6͓WEN '"1#JmJ|S*JDDg餿XiGk|1^ΤW\*KU"y RFfL^[o 4FKGOKߎ{itOu:h|uDW}7);ym{gE<esm\NpG>NGky$ ��{^KB!/qG,/++K���@ V~R~!i#Ch3Ndq Yљζ4,޶ tr;lQ?5J'{V?ОPӷ:mbV\.SkdEL^U#)ʫާh|AKO:heF1&i|gF6A㓟gcݖ}c䥴ouy}iN&xZk;_<jg4i0o+���`���E2"h@W@以Mexė-glNg^-,/ؙuO,9#*Gr=n~嶇ݷtsֵ=3e旓uƧC} D"BʪBRsu?뫡ٵiȎC=,5E`Nәy׽N. љЉrGY|gjv3���+V���]+7V9>KP:1sVx7s%7rV0/#i[ՓCh:õ-w1?ۖN=;}cF}oeWOO+O+O%5 qMmR)SWTNC5?W{Xj\Me?xhu]ӓtA}掮'.6:_{^;iv;֗hCG+���V���VKuxu =ev7oC9lIB<RY ہ.W4Gn2pg#7tٵFu!LQȕJퟴieB p?Q4;iuKiO[4Gv59֙tJz`E7>Y+uskyVsĖ4yf:vA��^8���`EpˆECBf-d>*c.+YȲ.3tݲYpւ8uq%jceZStNo訣}5u#V?qBR \-n#;j?k}㬡˳Ӹ]:'5gӱ]X_Q]]\{GBak:v;tAC4Q?`��+ͷw���CB��+����!A��`������� X����+���V����� �������@���V����� �������@��`������� XiN��@;F|CM)6D��`Em ��nDߣ!6|olW?A+���V��� q_ڈ4A6ەO ���+���V X��@`��� +���V���@{V<έ6g  ���+V���DƉW6N3V(6###W^m^X ."X��@`���>` )fnzqWgԡP(d2Y|!+���V^:Xa$]q&aؿ^LJl{f��� Xy`y |rp%26###g̘aaa_S'66HFEErHS'M[ۋNf_FG��ރk>d L~@'@`���ʛV|6i1q;X碟+l{ƌTEUZ/ܿiٜN|� ��ʂ{.o~aCr"enS4`ȉ;&ΗZϜ:3% 8pu;Oߧ/X*+o[7��� Xi}qw~{V{rXM3332\ QH"5*kzXma&];`7,}lmiЈ K^i8ma4I?xDoOD`tj,\gF^Sg���`E"摆OpXuƒxObH\8xh˓򨣗ӋyB `eE_O'U.(sbarԢæU���|JaaիW V3LL\fz-iv Y"0͇ol`hJscI~ے,W|mh1ey Lb!/x^1`e$|n}| J;u NB~M;`��=+>=nzM4^Wx~ACJR~7-4}.R+a,9G\5ȥ۰2;[AF*��p\0EbHNff>>qF;'ScT_|B+(66qWjCAVFk#UpӐpˆ^S_䶷LvW+)YU\j[?Yoo?���`wW!ﱄi0_ğF1eD>TʆS89VxG ��rssWX[G:_s1TT؅Lsuq̎WfTTrZUk=vN'tΡy_4hP6(>KQB4nS89Vy`��+u ki&W|Z0f!*Bֽ> W9kB刕< ��(xQ ]y`E(3VKKV2Fy!O,hi&զig,״854¡&zM1+9k1XQX���J7a֣1iBD* =(v.[!Vk'޹z+Bz}G*#Lط`Ƀ'qia9VZ V0y-��vyk"\8E[YEt׊Rwn=+ƹ3 &22ۛTXعs2[Ynk>{QR6/d.mm^;pC\v0V̛k7TxAw|؅ط`Ǥ쩻 ;nF+V���ރ`E$y/rm숾zz}M19z'*^ƅV h0bԅ.+/;ŌL]zu`EZyf.y փ&ΰ|̫h%X���d­:J} zWFh$̥f%7F~iHرclˋ4'kݔ1u~YU3y|ˑ^篹,nΘ1s&X)%v& 7 n]@L��&Xi���rz_Ғf&Y&ʋQA26-TBطo2[YbEl@��^j X��pܘ0WG&gWlIjsLFY,Vx啃PV݉-#X��@+���+ q#/]3޽LTvVqaB+lVf+AAAV��� X��5Xy#;NYYiVZD\;;ϲlu:2ٰaC3B��` ���gʿM+���V����+V�������+V��� X��x74A6+���V^���@E|CM)6D��`����+���V����� �������@��`������� X����+���`������� X����+���_r����U0m5��� v���qJtj^XX �� F���+m���+����4XyMu��� X����+���wNҙH�5P�p TB묭��� XA P�5P�%gddԳgO_b ���t�5P�p D" e ���t�5P�p ^\+���Eҳ%cwbG>bSjrKgn'T 9lۍWX~xdžt#wO \v+[xd}xkBc6 hn|l?\Wn-třaz}2yۆۯ2y-XZ?h^q @{]79jmiL0y-���6yeq `Gv-M} Fn\R[L, [اHͩ?6lgZ,*j氱7ZM 9|>Fޮ"Hgg:Oti$"Ư}/0 ~vRao$Xy-rdѼ XA��`Mo|i̩>S¿m긟 79}Gj 8p%ySPϽfJ׿?{@=~3fL&"~Ɔy# Z#3v=}.w T%{~:yYx+lpCF߰ƏOjƠ<"b;mH&ַL+n;Rz}G[On>4?(5I2 ˩V>WYk>G deyUvn8>SK2g7ܿqΧhh8"#lhT3]V7Ң~#b1V%EM+;ʣvk1SNv7xjM ���VO^^T^S:z9_8h~o_O'EtI=e+KiBqԡ.'<+iUZەBVX^.}8nTIq2i"u?Wa$zxߖSmgش6(NJ%"A媫ꃺ?$XӬhW"l4?ܶ\�b$x[$(c0ɞgbIM#66~6 |y!V]v7`j_jcq+YuoMvǰ[! 7nH,7»D4b+<_0z2Xiqʰ Q9 }jߔ��� Xy`65ۏuYT(s GvCS Oy#]闈Sp]~7<|eUwһͬ=6mИozyV ]ꤞ^ }OV9q%emWAF8;z:_mEyNQkAAԄ& JN}!b 룷.h%{X_6;b^ۍ=VFudx}^&Ja~x`-4>-!6ٙl]AA+ (HUyE'z2 V۰r`{ ��Gl5ۨ3=z̘1# s /;pzMiҠa6o Ֆ�7CCd~ӓ}Mt{?6#C}ַdĜm2ՠ$ fmY+>ݳgOX"}ܼ#}i�4Soݠɞo匱Ń`僩 MLVuG�Bݱj<]7q ml78bڨlOgq&y%ly^!XicqXi Hv EDDFz;7W%ޅ>yg+ ߔ+#mbM+���c[Y6JW~4NُT~'laʊ5Qs[u}^a}A>vghV⣚ʡm8XcoHiN (VXy܈+M S4q:WW&[+ H >z{FjeWP7uFJ3ih+mOuѫWuI+ϫ5[ԏ&Xyvdս!6ٙl :owgջ*^oCf7Xix`ɓ'mC`��Vt#Ci6#%'춏VbZrX9V$"c7u}^'X9쓖xN2mvH~ilXPĢұO41DՙVOY4aV%Uݵs88<G$.h]+jBIAXfnATՏ45 VuքsK(K%[ìfK{`vC1N0lLr~ ˷I$Va^AQusٶZjQ?`E͑Udg~;-u^/hP6;?{W'm &^zS9V��� Xy[ ᲏رSdKۥ\}@Wyf.y MaܯID-FS׽`ގ_G dh8nD F$͈qSdy7lFΟгg}lUm>*:A6p 볱'YNOVa6U +M 9l2qE5ꃺd}xkB_qbXͰ[?Wpc_&MajfՂV YGS]F[6~>k|4EWO)6GyZi6_EV7&;c؁o@49a[ߝrn(Go,lQC��`:. 6lnx!KgPxAl~#X��@Q+Gv EPn�@;ҢmO=`��� @gP�Pp $ׄC 14QkL+`��� Y &�@ X��@����V��� X���@`��� ����+���2X�����8Xcͧ9dOYB5[s'[Um6y]jry<+mi ]|y+Ֆ$Ӷ6XN !Y{VNⲋ-sf-̃=t2R73!)b*F+#n;L&ũhK^;2 :Q]"TZDsSU+U)9!Xf+]*lM^/-ˋ[eM5XMMmb*.-ypIq!^/SSdYr8ao5kˮh&vl#v(Ov<$nf)NO\VKݞ/)uN**9AfVvKj\}wzsG��`-Sy0_+`Ԟ?KlQblLʫ?1&dYyVa!٘;%ʽ#kcf8hF MVjk\vĩiWG+hWMH4V}?0q)Yri)eePW7ᠰb&Gu-۫ +kkk+))q}z*Ⱥ`-M,ͪoQ8%VMJ+ʚJyciFfg\ှwJ7WRv.|h"2 u϶b*0ɻ VN/sR?(tR&'���+TA.3<6nSFZ_!NI}#T*5Ql(Vmmƴbe̒_2%,=@K"y_JڱnsmlmC?b.RuN(d0#/TmHԥ2.W]ehR_;tŌ<c)-[ ?hI5Yn^`-MM+MJ+v>:Tݖ<+YrevôG$?bbfLg+{+دN#X��@N]rvv͌MV ˎ&g;IbN ]$fٍ̆-MO7XA+7;Y8PajB<+ώ2-؄lJ#VWV*U;W[,a!Pdbb~.QwȈCobf:ʏZ<XicS-+ng74)Y&&eLP+?ހ`C Vr/m_B_ݨ,ARʣ&fi'Yٯ]+ P$qbaKzq=eTǵɥA��`aƙ9CAcJdƳ^lܕuNvZ.K1>>j*qTs XyNO%qjjG8m=ʌ&f뾃,'N[ Vj'ڰ! &*(u +*νشZ}|}Bx7[r;.g5y㵔Œ.P&fMbѤ[jR..d2ݿp.X=뻀l2,%=^[[]>Qi;[|,w͌N=NGh.HʹFFFYy(6'+)މE:or,bzrƺr6���+oWI7͎΅ׄ>?"`n%lSvoO 2L0}!V̳ .m\t+dK[-s!|/[r +<-w*QE,lV mPWZTee  JPMRV(ځܰ渺-]xJۛ&šIRw<{ynn XHQl6YI;qcþ 擭7#1ysHkrG7.oތ X��@jrj ��#V V+���V��� XA`��� X��+V��� XA��` +���V����+���V����+���V���� +���VNc��qډ X��@���V X��@���V X��@`��� +V������ X+V������ X+V�������+V���`J{R+2DZ/_jQDF-p>Buq@UE- K9KI}Ϣ8VPC:O=6E^qPV�ccs܎'8jeIqKݵI]-_eսԋ ޷`{dצNLL6`pWp觶yYV[s^Pnab͌�ɻ Vgl[lkfjjaͪp27䪒諫ܜM)6A��`-0a?J.d|7z',_jn`%y\W-+ꈙ)P#@\S%$߶4ET`K.Ҽ+Wؒ6weU 42N Ub&v|KV|隥Nb g[ fKN$+=Vbdp#rF3\,F":yGХTZhlEZC=JHhϚFB=9`���[N5D*+JLIsȩRg Y%6T*uc*y+SL)vK7?Qop!;M0JkK ~にby#/7sS3 [bS;RT%[8džB!YغBNQItV7-Ww&wg9=B~V ē[0#'R+J iw>|\XRN&VzewsP(V6s_.hvM*122 I9=\ב+ǾU&f`e{MTsTY>lz[,*=@ZZ/%g)iҪ;ǷYVs+|o:[:-rC%@Y^ܞmVI@~s\*9/5$XgGlmG��`Mٽa?O*U7;O,`5~L!jzy+. L|kfw(jOYtX9[,ؗ*;aFHX B2='lLkZz~jN!lCY~:BPTrs7[)Oecf9w8;|>q)%O+}yǴvw->*z~IKʿeJé,S]NO+(R֚Fr_[RBZkc.X9bh6[faTXجb/Ji L+ܭ9lz;U EI 3 #`ہv,6G bV}VRO\ /a+oLJSAn/+Cs,S^=F?J~r ljc ���HVY͚肘rJ1SFnlB[ V6 f7hCMȼy{Lɮ+%8'Ic-pƦ ^56ªhӋ^)P%֦&1uYCO[cE9/~XcJw_,a_n}wU Mm$dUT=ԶXo&Rg̲03%<2z*`<j1X*!Z{/[8U`ԟkDċJ]JZ_ =[U53 Kq@߻`%tRvF EJ)c'.\bPC]y-_ V]n1gs+"lԈS#HߜÑ(j*np3ZV���9 9' +g=)v^ztc#2uO[cEʽnJ<1,n|ܮDfS;t=q6T9R'G;bNwuKcDvޒ"fr 3ϫVn ~k_RJ"m^'1}E\uҺ f7[,TNԶɾs,܏$eP:j,yv`eOdֺ`EU؏ϽM {:b:0UG$21S3G'[ԧI"*%W@6Yeq(���+oL H?!dFԺM ~6/H7M(g>bZdjJc)odr`Zrw"RX6bEHKrlui71<Woy.sKg"uS )뮉yT]n٨]nO|yZj@4\xE5XMMFS͔ A/1X6ݨD2y6ʓs+opicBw(&y,X0Q+V���E ttpL_eJr.y?VoxucT)d>~jKs,V)l{R;)e{h弽+U‡&fʙ2Y)f̓ڎZaSSc!ќ*A{rjGZ)d>ɞgfiX}|,scsszU퓽:ʁdi ~k $ᔤErٖ\ӗ]UQu+r*Hn"k&+dl([-Z5?@&ԔR&Af)ywjXW=UD$YUN}mKuwQq|5.X\LqN,*ea8_%Ţg>@- `336+Chn~ӆrIUl E qUɣU[֩`/{RDޑŤY*���H}o+Ŝ@NJɤ%'wP(T9 w kta\虜+O+~ދ- YW} @a'|\~w9-+FҭW-"{(NʊY:Lt\jjSG@3R_v9V)Vvf5&n'nz.kAe;uiM">056{T77,e'ltwYtUnok-vyX 4^`e{ ,)9K}&rֺ9u[|ŚpXЂ#yT# cV'y"V/p[/'$t#@b0,(j<y-ފ<k.57[I7m/^+���V=p�x |x?!X��@0'_Qކu�� +x�� X6areeeI{$Z]�` +���V����+���V����+���V���� +���V���� +���V��AT+���V���� +���V���� +���V��� XA` ������+` ������+` ������@` ���0#^J2'Yڮs} f<X>J23#[.X>8Y7k-e_]u1|ѹlx^fץ W[ve ~SZ;{1# &fd+.Ey=k u׶؆4~{9ÇݲĄ2aәWܴ܊lfFذI ʩ&F]`{dצNLL6`p[ܾv1j{[$*ιVv=F��`r&])fsOv.9:˾̔zJXaIϿ{q7Ʉt<<XrM<Y9^+AaLtTa116>[jb~h5A];̶G`E]`J^n7DܻJ6uVԘss6h<###>'PD'(X| OH+)+ˈlDr"cs CUbٜSD/+K!X��@ֆŕ;^fE bQ%5.>0dybyq,n\cS+/pqZ6,򈃾dumoxrnvٓ}Id2uۊ2|n[D25W[6ϝN~ yE緾=!E nrO7 XڮuVxj ] #}-(Ͼl&̣NT2l9qV mf] )|!+ _xɜl"6u6I~ysRvÅdz)~$srj}Ȑ5I+f0XA7XHh?#Vsgs )[Lls[)&+Ť D'Wb|-sOo27:ڭgKY|wIlaQ-Ls_32,m^ۻymf[f;L|" uk}^z ϛy?pb���Xbb%V2&hKؼݵ7!&3{.sV->$qTNgvͩϴ{lG͆A-Ay6&W9j^N:@2uA o+Մt]Hqz!4`v(=gK\ty{i{$twWЉYtu/, ;Pg:=n,cwvN+/Vk$ʄ/e8ޕ!mX]z#W'ۍ�b%$~β0y:V|&kvXgcO>cCOF{iev?+JUu,vl\Q2%AQ4Z<6���@l%+>zkl1zl!̘ngB~"l>kY{,_&A7z.L?:=/*8eXxwVP%{ܓh:;A{@vk8;OqAxY ̪n|VK$mp Cz]&#]t,tTiAqyc$Hf› 3l_$X8JD^M*W=V|�mXI}0jfe"g@t8p~:ȽP3QXu4 챏?)HcN2-|3Eq,q%"VT%s|fb1&_4婸f{{\A6,<o]+yb���XJgEM˔U"c 5bMhF^o۳AׯĦlxƽfD\48U(EXR eEɕufG)fƫ8qCDk!7N0<SFg |;ugGz֎p[}B$&APJ8볏zY_RLLJ~}spBMG`i-Pq ']UlUԵ>J6Kl7wt韥s&!V~1RW„=t=^;"VV`Y=s?/')M,5f1 ^/F!V����bLhblc:֝8Mq E̅}Nlq=aDkrld9DGl+ֱX!ib%A/bbDu)[w >b爕d4&E!33ibIꦅ`"CFWeB DGF +i\\t' ,U6�bw+GXeFИGN%& Ri;K_12e]H+|\Dnb0kO"c9ҚbePh" V����c}dbdyt3['UDܙo2<a{+uOv%H}{g.MDG[8yF_xp&e~ceCiI:,Lrb:|yT[rEo1+Ju]0y|6bE}5[K?RD{%+q7siz^ Cu,;n*3 PeWə>lV!s(r^O 톹~w{r=.$Ҟۉ8&@sШ?c`llšH[|<=4->Ȫ_O/1'yc{I8R9k{La&2Wb/-KO����mlBJR` ^2fvr4G(۟ݻu-.D`JL>7q#-F)ahU|ׄsNTQ*V@Y?Yj{9 i OxӮ VFY{pf\@r$ qPB[bU58?쏋X*μ=X1N% }nUf[GߜOޟzb%p@i1*v8$#Fo_{+X Yv5fetQ($O\.r:ØXq 3Su䵼`>!R.}|0LBi&&` ���@xeכ���0떷����bb���XXX��� V� �������bb���XXXX��� V��������@����+�bb���X���� ����R���l9PK_%` V��������@@@����+����XXX��� V V��������b���X++���� ���� V V��������@@@����+XlVJLLG<˭kn ebV}ڇU<eT%Eb&v{d:'f"~9.EH!Q&?'@R61ne [#Za/|,<`;e=Ÿ8H Uey,se^lR.!=PLɎ) ϛ_' YquaV U%fdI9}K_ V����-!KDϾYɞsŮHrv~7MuMm'p V~t::A-~vBiIM )_{׈E9r+`W1i51T^_+c8u<;rT+:dy4p;Naw'Bḇ<Or-VkiemmCjiy����beX\/Vִ[LJ"qķi+8* INӺѪƥ/5{5 %a:ܫ-[^hi1˼bM $Aޱ޽cPENe%2e?YݫnOOMFvq>\2w,K!8.$iًm\,+Shܜ P;Vw OM,`UsI*hʑFpb:r_QyQÈiY{d -c3+W5^8.c|,j+,Fޱ/Z-tOVbPl+I&+W7[^ޮ_kbE4s,-Q+����voȫ_? {>~//l>[�"zٽnh]6xwJ}.Y- /N[׾NM؎++<+لO֕wS呒js&g_j]P~`ɥBZg aqh蝿Bbw'WDk޺F[KZiܹ /+EպRʄ8 L�":[t1^.O>8bξHRI+K?c#sυ͘des/rʓ&;,VXeTBݛr6O_)/8֕r䯉=Jge*7˫_nZ V����++ZE㥟壱Z#t}o~綽ꘓ#AԖ (yz {0o\ލ1˟o%)/ۧA[\ۧ!!>YG?yB} B E1ڧ:WeA�+; hzkkOJ"+&gQ."B-X)p%v6",-B9*SO.Ɵ -Rqi\zIr%rTcNgi4Q)yze4^.$Ab&7<X��� VLl[tp}WX91߁jfrlx2""B4II$C֜XEi87y!tݙ�BPlZz$ֲgXU!@"L~Ѧy{9O/~2}m>[;9[;bUd 0r&ݔ-/= 7xS*K*><!XqGlwؤ򋉕XeVϜk(ώX p[LbY`})ϭza$w_V?ΆxM���@lX:ZZTsͱ2U/XIĊ;iG$͎k $pwB_\8jԻ1YO+'<Gl+KH<;_?tK> E²1I;_X_XIB\ Ub%5be\De ou%+XN"r{=,j>Js..nE͐&X1K3 /lo}_X>~ ���@<V뷕ٶ &?gڊ߾}2V۷;ωEs֬>ʻg$昮rh"K9lA{iҾ:ZMoZf e=.k%lM׬_OJcN V`9+K_-j}Njᙯ,ݪZ%`gpUnS* X=A\ȃL>ñ+K+gq%7p!QۉDVzz~lqG)1Fʣ׽g}�KEƍ&;*V+4w/,}P[zi=ywF`vž={LVr+Jm(,~j!#߯׸+����0הwb]t2WΊLHvzv!I\]Tyo/ձiw]O~ ڣ2使h:``eʼck+<, g'JXVGlќp)+l=z7$'Hɹ_,;#V"jύʂi$# ֥`ߖ4bѱ7ʑY{R$v-8G,[r#Rrn`&V,=g]cVj2CeJ.L[5(u =1T) >zܓ׺cXS~Jе٨}y#oևX��� V����[@[ ������������b����+++���� �������@����+�bb���X��� V� ������������b].���`_%` V��������@@@����+����XXX��� V V��������b���X++���� ���� V V��������@@@����+Xv"-)FJ8CKa?yOϕ0#?*=vB$WŞފ{? $ŨnX57Z%kKZ9²P&o`?oR*V'JsrI!c#zꃩ2hiJ~&I@DCX$'2," 'gLmxܟerF,fdf,< ����߬|3ɫqOofA3Ce+[NcXO.qY?Ƽe-"4gN$�bLdzL{v u6E3S-<<e}cNS|/p*5.z�ucbesH?i4&ugRBeQ۴WpiyvVub���X2(X>ޘp~Yljelf1; Z;#M;qedgiza8iXnŕ9(CWpt +$jBhbCCCl}:]Q'˭%1*9\#OVp)=)!&2gAiP ˲ªcFQg_Bݑ0xϞ= STq%/QC[O}sX:3tB'̼?Rց%+ :MSI{CNB-wN)4-UU6+h,u*Iʿ3:pܳz0M"3uX4{aX��� V~+W5mpq>>dMO"Ul喀+[˜B0_m?6Y45b ɼb?+beib{v"ǟ^l4*e瑚&OrW4`�5x"F]v`37K#RtC 1;;+|۵ pXYeB2 U F oʐsY$daI8Op.iy# 4EY&OB/$Ccm+lg#ualrϽ<bÎXϖE*S_Wձlة�}s͘_ [f+����&V]R\(NZ}s ƕܘ i 2!Uv,ʙ=S Ӎ,q x|l' {V }֚rWtVsTKYǝRFUw$3gMS|Nhʾ E Dմkę*W=ΠF+ ӏ ~yQ)·ޖYdjgOwJu#*+Ƴ='#7uxi\FW{{h42n7ab1 /T\|Es}=Ν;&����bw+7D].dqgL}<;rb1n &#o۬4RS|Q}nT}in< |h`z)o8I|Z|",LT"U^j&@rpg%/k2cXIɯvNY)bh3 #=*.D}W]VGStv7YF߶_yViqLMY:׸_BU0aiG>-%)EׯhAm0b���XJKՎ;,|UX)>P^0z̩qeA2G4qh=*\KC$o!Ć5AGbbDum:G͵GxU~mRnxLcmXi!ؾH0n@UPB䞽x#gXySC$'s!dMڣ}Gc+s!""4AbEHh(өdS\*ms+wq1F̹ iߊB$ o[4}J̱���@l <o^XXzJˋy1pq! 5/읜S{C+Bruz2|~V([x@F=dX<dp%RN9B\:mbXQlu&P4 S/اX P~jƕ4=pӍM/iGb'@ E)/Vj+h(A殺45oo1XQ伞4͍ӲLGrL+8&@sШ?c`llšH[|<=4Iu&qH)s|L^^#є͘s#x+����E o\_edL}W)VlUXZմQr cV)|]2c uuΙ!Vv8vMB0Ұ?t4NTQ*VG_5h1VJWHaPU̡qrϼ=X1N% }Uf[GߜOޟzҵe΃ *1Y[bTV<iXuŊn}zذ1+Re4E%)U}:}rӱdG𦃙R HIkax\MYfCQ@Ʌ V����/{@��o1bn?r V����KrxR;񑚰R'��� V V��������b@@����+����XXX��� V V��������@����+�bb���X��� V� ���8���`ˁZ%*���@�����bbb���X���� �������@@@@����+���� XX��� V��������@�����bbb���Xٍbe柳Y)21Ɇ{!c Dnq[<~r>=qk/XXΙ>E``'yi D$Hت/7TuDzcW٤$VԡIrӷL<eϲL9#3 3MMqnaNvN?^:]FD+Vkn ebV}ڇU+ ����44uw7lXI9*uyNDu⸨O|$XnC bGGWyuŊF-+oғR=!2!VvXͅkZgᮇq tN]28m6ώJ*-yLty"0(K: ucbe[ə=ُm ,3_}?#=���@l; [%V2?syr #/;?Οe򁖃)ZF$~QeBYBq\Hzyӊ[SW`YZ=~}˖)ZZ̪2↓(VZ.G*$,#7'_{y 5&khY9p4ft_$Em)yZ7ZոePENe%2e?YݫnOOM>iJ; _ 탿j 6s3F/mRm[!z:K"w-tOVb[n~ S׼Q>ޞI P';S۵׻69T%~l_\Ңcco ~7+ ����W)~Ŋ\[2b`]V(?7$xҗUꇆheGpCmxУ:;ѻ* cf]*$,hYoKEtb{лiZلHu߆~NcåE-~Z[Y/FnXZg_^$)aFHw"z\;d?ZWMGJz߽sACWj DB0b7w'WDk_"in?}61%PyF&VbTq{%͌?qKcˬ_CsLc{ߊ}M<aŵ3IqaۧA^}÷ϣǞ_!V����_FqA?X)sΕ|U,I۷O 834DBu{ @Xe2w-"qXc臕�%B Eb㮴46^Z󡽱%voFt_$Emw{1o\Oߍ1|^80|VS0uv 6+A~="FT4e6X(8Gf&6*SO.ƥ qg\t^xg o ޚ6[ރ*&\\Wb'mR%b�F^IH4q(||b���XeĊO+]c߰ H$/ΓjfrlxR(Tp">'ŒT}4ޘ6KQl|z1#Vk~Ӧ<�*[᩟,X np[NnPq>Y 40|VӦv 6+7t~D#w۵ߛ LyFM =baVr#VeYQj,G2elյ?Xub&ȟAsXTX��� V~bcVs,㨿,I+J~N)ok7;_qo=$?P/ ~WϿz]T XY nѺ_O'<7@/ajxecw[ m IzX .nR-VE2&ϥ_c_zτB2b}z.])2|PU--йX+����b~[YYm`B _$oفZ[朧>A|cp!QsbEt,'y~yͶwH*1h"K9uA{iҾ:ZS/g[VӒŊ X n@I4}^~}?}L+9gg5Q`#K}]3UM7VEˢ^ebE+ܦM b},Ue_c6[ohJf湑uoY>>21c2μlASխP';&VO<&>:© ^%LK}d[����mf)m2Ipϧ@+Su?^tGD'n)Y˳5Gs¥,r ޣKش;X^.ڧKNM?qQ.%8DMm{X񷡿+"-zDPª~(0|VS0v <�esho &6mRn+pʳ1+s5e! EѲ%-| )MTxtJ>x+'kWxU$Sʬ}Q+gb&$ # V��������+w)6���@�����bbb���X���� �������@@@@����+���� XX��� V��������@�����bbb���XE ���rW ����b����+++���� ���� V V V��������bbbb���X��� V� �������@�����b����+++����.+يqP$Pu[&YfS͒#?")ZTv܈b9sppf;k]W_RO_J�!bO\oEIH( e$Ũn\j77Z%wXџ(͍VE$ɆՎ? 2EKS N6)~0?%Sb.4d oɖ|DP$AsvɵܟerF,fdf,< ����}^\x{phzPI{zgF ]#V1񋦑緮BbEx"MΙMCZOLh5y r?{,ˢ% .烯 mĊHB8iP_HRa@"beXv{O;:Q_ֲʂѱb )\#]ӏ+ONvXګ-'V;FiR{&%TuQ^éKّZi����be,Fٚ<vɒ%ԴRf6)YLCJXV-Xv0(t:MQT8b꿚`>[32$(•JeB^{+Q9a{ƛ*jwvfWKnL%#4} .'%Dߞ4m<b0mW1Q'˭%1*9\# pdgiza8iXnŕ9Fa׳RF%7g!H+! -F&Qh*Js_94%jh1vIʮƂ}Q :ZKI*lL|N8+scw9 be?.>7.Ϩw|5{ w'b���Xn,*.|6klՕjBtE]7,ȰuJX[Y24}ˢ${OHdq[Vv%RzX=+us5NDGv۞gSG'Bo6+r޷ݓNs߳4N/8fàv=4y (-$ S%j.սZH\մ}HB`#!L{48|۵ pX1Tsum$PyFfA(P` 9Ŋp8{46Fz"|70)V]b~mX{3bM%*gz^wSeNWϖE*S}sag3|/-NJB����+ƒdN%C}vgkNwχw+BO ?6Mv_8QLThQ^*gL-L7Ҳ%\-!"izߞS|>Ii~9?2;rT-v#}G { }֚xFCAƩe":ҽZ9GÑX 2ԅCXY8JD^MoE#{ ~ r#q VvXu4 챏K)aSFW{ui2qdqmߨnuKn8_v"T/P4c0LhSqF~}$m^xg���@l/ʬ9VRŊ{ OA)=87׵& QSgiأ4uaYy`)G&39MG\+<xo@xL}c|Z|",L8PVr~gGR^MQ'XYe> G¦b%PG`i-Pq 'r &Eq*n+u)LX3א",lIbbiXBy(FX1M6pC{`f���@' 'sېJ+BBBf~dϛ(Yޣ!A^j?bҚ9K<Ȧ'ƛgkĒԍzmk;RY<'_xz'Nx^.:"}Z8O=H >|%* Pv&ĊϯCyIs6buf+ᖐ*V7$ʌV )hUbk.9VrRu3bE, 9V ath&X!DR{nQ9V+1 ����VDVzz~lT_2,"JW~C?g9rz._rPHى59BO} ŬdXxu%RN97۳#֨}wݷjƦn;Z:YzJj̩!>Ŋ#n~vE:mQbSPlu&Pǯ0^1ObBğg›J5푖%7_=/T{58Rn#ڒ+zM *˓3E}J+ŊrI~ohԉNU1066P@>{<|?<4NR,dgĊ<`={=y-MLƑ" qL^k{+DS:4c6ύG@����vb1 Y<b8X}(]!a Ujеҟ(͍VR$!sQIY7 c1r۳ Z-V3n폋XVXMymmO!QI'k8$#Fo_{>Ŋ#nzvC:V`a4.TO=Uv(Xyc2t+(rkg<^|,*H+WcKC| 6_?Yj{1+[9͹ )nXمbE7_v5fetQ($O\DHxV+οn͆}7ܧ2AJB񖹚hف FA����+����7bVbe;X��� V��������@�����bbb���XX��� V V V V��������b@@����+���� XX��� V��������@���[.W ����b����+++���� ���� V V V��������bbbb���X��� V� �������@�����b����+++����n+-' r$Ihj/fo"$/Oܦ]PY{(T^DW$W$jXv>Ή'VԡIrӷL<eϲL9#3 3MMqnaNvZXW?2|㏗N%DQ"D=rdb���XJfW5L X[&_<U'"}u [(VX&/nO�mL]*VxsYqaC%]u2S Nͳ#GҨ-yK^(]^7/LwCX黐s,ϷX~+9sG7qyy~-_7ٷX��� V'e~i<Q>*[SW`YZ=~cXY<Y/<Xn~Pr^z޴X⫃"i1q$?;N{V8w40Je$V5.}Yy;T$eYLYtOkVjSo ˲2�`#S0ciZZb}5$*VTH!IY˫mgd.[^hEye%ږ(VY)c_hhQi|+ͼr!͎LM:IX(\4]+kwm\y<J8Ⱦ ����7( Hzzf8 ͳKLҢ<ʲ'#+qw~˪uCCE2AbbZۺ,tx}RJk_'_ݦDlMC]曣vX&T7~Z*UW'{gԁIĆ�PDG,!_?, Wv>+?2Xh7a.\gd?]^.[Fsmn+JGX2=g3NQb)|l5+ws.Җ)|7Y`OvFX+j_?{}M<a3I 6+����ai<$*Io:;K)m'V"y6()Ag> $~\`6\~sI?:R$?;NqA>W ~XɼwEL{C%śbIJHXy"5v~|$l*VoD\AH(}{}X(8G&NLmh[vXyP̩'mRLS83.:Y/|3iWdGoM-FCAg..[J<lk׋Kh=o���@l離H*tĊjfrlx2""B4Y"J"OI8_E$MŊ ?ΟKRf<gi 7y!tݙMk)6#}$zѳ11ChF^^bӋ9Sn`#aS|_gk'zK4}g7k<+L-XyX}Ufa٨{VѴL[u|l#VvBKVV+m5\Dm Z}����be !mIcHĵbg\53.#<ڲ᳐Ð"~Q1b{KXiGRMݦݘ,'Hv6MCC_Y^aL$x}9[]CD˰l~Lw+6X!iW+ܛ$p'x@!g~."w~ѣ̢sW:XW3P';#V_e"IV a܇sMm V����-j]ٌpZID-IV=#0`w,?[W?"rkceUw?:F_-ju0I*P9Vt.oفZ[L`vV&y14�b_$x1<Ֆ[OKap$xyawÅDk`[Ows?#\pskU,E[&f]tͱL wPn/~F۲; X"~==`l#є͘s# |}dbdyt3['NvF}}gq1;vaϞ=EÓzL^k}t*SٷX��� VЬ奆X mI?y-;V/ձiw`]|@yݪuuyhNeYN{|ϝIv._&kVXt5ʔyj6 _ʳ%BJ r;#V|GQH$F~|OlʍOJM˹R@ be*"_ly\iF-$ڤl[ 9iSd\{T Ŋ4g=k\MYfCQ@Ʌi lBJRd_~ 䞼vˌWEK".ٷX��� Vv/ vV ْZD-��/𛉕�b���XٍX}]=Iϻ|:lGLf4�� V� ����KJKKkZv_цdR.$lW+�� V� ������������b����+++���� ���� V V��������b@@����V���l9`w ������������b����+++���� �������@����+�bb���X��� V� ������������be2-ٳ>(HIȽ%rO,^³{|jfI銑]SG/ӓJ֍-XT'\{z+MDV}܇ )FvuR*$ ĊDinR."I6DwvDwA7X}0UP-M)8կۤ|hVL̲#z+يqP$Pu[&GȰ$hN]n09;24>]���@l#mjK3X-3ZZz~|/FzߺھMbE:{b%bMo b,\" ~>HZ'>b_$lXq4gN$ KŊ~,CCMuь(T/kYeAG@g TeБ. G{lɧP';$VxsYqaC%]ݸ`{~h2MzϤʢ.;/DIój'Mԕ|D]���@lCױ;؅)V=tΙ[32$(•JeBMLXLCJXVJ+Ҫu,)]q//IM(elfQUkuIJ04)mzE^#^~KӪruF瓷s%j9044ϾMow7M`Nqqu%% )j0; |>Sp)=)!&2M,M0 ' ˭2gݫ=7ZUo5b'<DZZtcEY? ӏl&Qh*Js_M94%jh1vIʮƂ}Q :ZKI*lL|N8@%;κ~z友O= o]QRyefDDGB����+ۈ)Qq=v oLչ-CZE]7,ȰuB]c3eT͆A-yy6<OG/G8=N]xsg7FC=7;;2wSb1 KEd̂ИWAyUdׂp9rّZ˜Br0_[ݫUM^WsX`ۮet{Ċ͏it6gzFm%PyFfA(P` 9Ŋp8{46Fz"|70)V]b~mX{bR8>eN6R-9TMój Fd<xb���XFk/V|/(IQ BI}4&wf)osɌ+ݜ<%nܪ5G=X")LK$z  p\F ED!-,T] $tf!nܿ{ }Y d;2 uI̼kLymOcy^gyW` ŊHT"V&dV2Wӛ55wr/Cn}d2ma.+Ƴ=q)#78lvhjϰq.M&, n g= 1*S4c0LhSq12BhtB0b���X2LM!\ɲUbţ36_^Zg^F`v (,N'1NZciQ0a硬HSx]~r+~4~51,Ĥw5bee8M=/<2=x ס;w`ayξ19溜ّ#-}Mo5؆yG¦b60ZN4oxFW0!.2}[U@fRW„=s 9+ˆ(V,E=_)wbʎXeVz1_NRr{cc)NOXwVl���@lg9,H C3[s70%F@XHQ̆ʷJg[E$qwJ_ܺW>q2#%4$u%A� |ϔOOQ0wxϋեr >|jw5 VE:߂Wl!Iq}F5b%327ȁX٭bEHhu͐☌V%& Ri;c_z:.'!P';(V`֞/'DRv?YyK" ����X`)1͢u/__C SNT%+O9=Ak+{$02) <N/6NJ<`z/<8D2l4bОּi5<pzߥitI]Cb1)/9([x@F=WsV_P¡O qͱt0{�RnGJ%Wl2/Og+RϮ+%qL澡Q':8UaCϷ,yu;5Jk{c*?)K'yc{I8R91%qov-sϧzz}b���XO,fhU(E"1u\V!8.-W+$ ðCU =)ߪ5.TO=UvX ֽ/G8'bV<w< ɱp;~u.qnڞ4L\^R΅`voA0Ұ?ՂۣMqpH"v-_ϻ̭[(VE8$#Fo_{ \0{�Ɖ$A=dzO^ 1pV Bζ}sn&:>yJg=Z}?{{ܻkt$'9QD ŜsDQTTP$sdn% U9ip̮YUfUrT|E(Vf(oLsVFЩT;`:;X4u?0 tV ryco.A"{nai߃AE07<mT�����aX(i ݅N] -�Ҝ|n[w@X����V�V>"q{܃L�� ����23X,# ��V�V@X����V������V����������@Xa�����a�����V@Xa����@Xa����@X@Xa����PX���yER0 �����+����� +����� �����  ���� ���� + �����+����� � +����� ���� ���������+ ���� ,Fa%/k-Ǎ΁K;ݏà /+sb~ӅO>F"M[>NE"Q.>)Q a|*7YVRv.Me;6gd QCT1` Bׅc>.vĩkҩT:gہ|4mui|4* %fmʈ B%Y3l^V|b-dMgm * b9[ާ^@1T188p/^ֶD>Z{xH��/w VnT ~|h7ap;VXaeSt(bd>771]q(R/q͉ndpx[MnH9fGo̙kNL˛)\`xjƽ)`)OGkoJ3i䍗3) eXwﴥyuF816^6\PSJDo\7oZksvW?CT^*;[XX(RSL˗/?{,999?? ^ !���K|VKVo3++Tb:Ŏsv:Qh.#Z? H$8kd8E}406N,krxbl^afC?4,8ow~;B_e2lw3exi<4oȋY+xW#XŠ|lcvmI1;6or~NZ Wފt粙L Ht#A 0IET"A rőwrp�y{~+v|ԖVӉScZ㮆츯ܾmL:qP.ۙbaaC [FclV'IQp8xO`w(/yqtdP4gPl23hXt8Q#2VdnS+nxcM,Ni MXx ͧ d=~rxKK7سN/ 2tlR^^rzpBlllbbbNNNyyyCCC{{P(���_ Yr0EAa#!ѹX yD{U"업5IvȦ cO!'sFLJHw"ba[O{ލrRr_K&;8BV%H.S.֋ ӎp`n446>$eBXg 4<RomLjUx ݳV(,3UQ! 横$l�Dc#r$޾}{s4嶕%%EM?Ȧ*o]ɖxq[U$pgZw |<9%E2YD=ɏ2oԵ QAwoo[As>G4,r0p9(P|O=h bӬ"vTSi訮ꕙ:D]U/!:H/z~f44WO;&i[N g<e1lgѣhaO:۰N_9suL٢(f*:;;KKKϜ9Cl*> )���%  `"|>JgrJY]@QǢܨӤڻ"H$;-X1.3A<6n1cvrᡞ$2{r E M" _*Hd&6k{h;ާdrZi٘jSGzBaplۭF;"`lkY4AXĬ:QRxbXJ9ʯq@` & bzD m)&o"{ cG+U|측%u+:h15li[xfּv ٜDc047& KTK3W15nȼ6{vj5J.uMD'`PÝ$ּ*t\ 7%ة,Z^)^xuU&C襂ʒ` ?.,m%&gV6;jAܮ"f[s}uuU~`;,䬂g\I^'R<y?IRRRz|U455EEEݹsɓ'UknnF/���=��_09R[< ԑB=/Y ?؏|ݢ⸧GdyG%7m<tޡѩST,POrŇuRXo;M"\`ٍF1lL!3 [`uwB68::\mo]WNʆ,wH~>+xW#,w<k L6AnNEe{S319Ee 0;URA'#FU40"w8Lr- 3^n$m e7" ;37TPeYK֯7eaiiZU0HEEEYqlKNM,2Q,nddTY_dɢZHnj�, Uq-ӂ,35݌ɟY罌<ptw{ 33k}X>_3_ ZWja.*VTI4-l E9<灏BѣG+'yEzJMM=|իW⒒иT^^^SSSWW)���y^|> �Af`SWSXqϟD"EIfN2$mF Jn9Ȗ/Hdfχ 'g LSfiZaeBae ĥ܈d*W,|K(wG5Rvă3&-+&zH_ ͧ2P_XUlۋFOɟ[ZШFEN;/++ܒ- 31xƄ,hjv7:8o`h]\B짚rĎR., HqA`}Ja|`^}șσ Yر9YLfkdV ,I;є 1E.,`ӽدmF4<>hl) dV2v\JOO\FA}Cs{}&R3O/_8{<xČB)���y^+++  �A@nr0mE6oVƇ$w{7TlKCoU7 FFLJEIvt/۱DvZ%y8)‰}L.$m:>YHYϺ$Yw) STl[aq?J,k|t/y(Qzf X%-L|hl-pM@P'8W ̩ln<^t�k>U.4+W}VRRRYY  xg" g3H$+qsHc\*D} XL31)f2Ydp 4r.Gm8z9YMa|OPaQ"9ʏ90x gy->=VH$) ȘM@P'x-W udXl6cWU?*Y+߿G1U]FOS 4 n >}K���V*o߾ hTl0ufl(64h6=2UVV"79 e@rI+ ��#ߏ@r|LUqb2MӜn-Nל`g2bn^5 Ei$TUU!g q@l +��|뀰U*--- GCT:k^vkXY+3L63[fJ E@PdӦeHA.))ArI+N+j V�� c`gggcc+]9 8(\ѱ7u 1׮YcCWi BPO e@r\ l5+��| H$a &8*l?h^[fkenNCWKИEccui(2@ [+k,TcRfWfLH[Y: l 8 =P(8,C"Ä̒2 j V��҅l>P\]] +\:<x2h411^%B舸)u/KCkkoG16^ c4Ojj$S w [5ֵ 4#]cKE"iklC*"mLI3-3IGT]/B;#|lN-`�0ƒW޷EFIj[WYV)5b1Cr'B2 ȉYa�/]XAcX,|>rBXѦOBxp$17d~?&xAKUNV^{t]6+C:riTud1͎du4k ==| =-sc3ɜH:Z:hOV>E20\XRQ^~b"_H2ѣZSd4ӗ@C_[l"ud*ubO20r։WV FTizi&f07 tu54ttHdSKBTcC-MɅ4 tt̥ؓ:bJXXQ?-6E +IIIyyye@r\9 +���KPى=42VWW/33V0w|t`oN000OfTy;:БzL_SXOvtWEhkbB>ЌP" t4(V&frn{rqz]#;͖djޞU62*=7Z&DN200/N)k~?QfgJ8ލFaΆFCyY]-5epN|ȚDQ`dJX'tcDNm`ezBaqG%yP'J\Sg{?\W~c#`n�`!1C Y0%QN!ʋ@ⴲʊO +_.//ǶYG@X�KVX]]]TT +vT?^?/;N*000Ob6$#S=>joM@}DV0ԔiGP)zof<|*uo1043ԱA?s% +P d*aq'5uugK Ж++QF\Y')*|~޽6[[z#LefZeG9*E)=P_\TLXy?-=oM`m;Z2H 9uҍW9l 000Eb2C YdrZ"_> |dyU0a%!!!33utt��+aUUUiiii۲&>I+W''1s:&8k3d,䒁i4VS4 k}/]GDO 9ga =56rXiX&xd`) W_XtIňdKk`]3ig9(44Ԑ-շXo.˜mފ~7M[ɝ56Vס&JndDHf-~}V*Qj,F^XMu$jɜ#;8ۚjiHnaUi(gGV +%%% ؇@X��JAALXڿoMkFa~:> &gз&@z+3V$LX%zu4&F{F:݅ osu4tULdŠ|HpCz3+kMY*eXв ([NkK} v,~3}&i}ɦ$:Qllff+탰Prd^OKKbGdkx3\/~3Kz�[<fKbL&[7�V:D9-cT^ UH V^| + ���L#xY|x22RT````H:4%νddaA]u~bdiwÌxl MGXOX1Ұv̴4 i2aE�򒁎2#}3=9@gdKWGOW\0"ii/-  y/RK#E*(DJfjZ_i/{G7Z!/hY0mJ L /V͇$Š.U&I3%S%VD"000EbvD"ހE/-+ۼV9-���uʂ aDϿׯ*TF7ƌKT�qSEvVnto:SƣS{viFڦҽHz>|2$V}}C]AI>MoDFn1!]]& eksrS_ w~(+�CW W9+/S'/^[ZI_׌5S:F}޹ SikaG#-HjJ fYҕAcƺjҦ+ŠjɌv,KgNP']DGSv�fGaښXXA&7}>FZ,rBZJzzzqqq}}}[[+���D D__/tu}Z#}gI$S=K +taabeZ(iΊڕ(Vfщywc .G1dT6;sjߏv5 &V/~R2GJXy'udtDP`fin%)YccC} ,sK9e{OiF1nV妷(~W^Mzzt5t $Sx:W0JUOXQ-[dUĒ$LHֳ0006IaeEEG5,9v +nz;S$c9VpoJep|Þd/]ЏWoX~7Ch$҅nв{B"Q}NK=Vۿ?[D[$F736g%Ǟw0662̍ 4iiZWL -TOP1s2OκuzZ: KPx2Fzc3 +ٱz,CmksI3457<e"-6Lͪ0גdc,he$ACs FPi>@5Җz)+ ֖V3%zm!t44 tHVs0004. Kff(2JiJ/GXe_RZۛ+Rysɭ&!JaI :[^ߋW2y p# ,6azonI[um& ;E _,IaHl_PZ'u"-:45g\xK&T+0000nT*6yȈjnN`(6m%i_]2?y:-òzmvauɡ]4w4vЄQqfo=dwc _PQ{&|ɕN:$:fJEl,_EemIk B :T!=OePD7x5og;βw;|%a +rUd5&=q77mvw|ј}0؏ژVťv,ww "?-ϖ}iq:1Y"XBm-P(V}RD"nd䚶Y{`mm*hE͂n0Ԟv`G&:|!u5GtwC~̃fBj m=5"akA7 ѳ\MaEQɡ;Ǜ`Űu(kv6qqVHT,j%{IzyOVԜr^;:h(JpO?aE$ܡ:oU ='a7qP/=LESY{*CKz.;,6 i E[<iaEКemmt+o qf 8ʭE8%}W{! ]{H"'־ Ƅ8^?N"e NǢp &ޙ1Kke*+d:Ft/@qAg"K9LN,2'fT=JfO%H', lU]Gs?=V۬w{2mjّ0)Őt@49!0.\{ A&5u+ꬽKVU zU3 |$u}JKQ*k +-U$IU!$26pBEz9r{4_Dw%ꮈ d]T.F]J0,7:V};^QO/yrPyЌb)WbCy6QIokvcԋE64:Zfo&4br@`.ʆ  _+,jPLX)GklnQ+|RX2cEi f"x+dz@2_ pv\7GaEВF!3 k2e|.Šse;$)"-3VXQV5DcNZXA��������/EX)t /n [@ Yj(GWxK t9CU p=+,w>":_*ك&eqx;6.+ΨcE4f>#aFW(m2aLˠ.yaEU PP_.76~I;M(4tc{I%VUbNT<3LU � �������� rۇt7}U޹ًEP,߭aH7 W`t~'xOk/??f0L{gûJOJ>dm}Hf>#aEЖG%ި83ӥ@qgÝ=l ݈ܶ%?cerrlm*|0y`]7"BaEunug1,*!|@���������@XYJ$nc9]Xw!ɷk[AV@X��������KS~B)C2e.w=^R= AV@X��������Nmb f89--aX ;&V@X�����������V�������Ԑ/&Ja��`!G�U,g<\ ����JYY@qPLV���BXA6yU)XÁό.)����,Jt8 ���,<o~<_�Wa���XʻwVPO T-i+)MNNIݻ ,NafKq1+����� +``` 23rssAX@Xaev _o BŠ@ HMME +�+=3ܛ[xv4/J^^+n߹P!?lAeo@X�V�h/JXDIII))) dV�VT4QnLpMwʑȃ^76N= 1PuGkoy ��+�4ߗ#twwN +KFX9*�e+^2L;m09X),*x~WWו+*˅®^?!xzIw`u~:V���V]N0000VS :�a�aEWϙӹkUa._0&ʵ'OXK~a֖SC\WRVikՂ $[Z֎ETeGgw9>YY5ڞ Qz˿KmK=̦l"!_~x I<;(=VbO𧮉׶9=4uŸ3LVnw+I8F0:7qog#B$'?RP(:`):V; 'Vƒ|t*Jw;x.mFb;vvqQOQQ{FXe슊'I@X@XB=]ދt'Oollx,v@ ܷ?\,G6?'ru+nlUZl5_wO;Šh?W͒/IjokO~oW ~ ,Eae]k76k4]B?wG ,(?~qOWeޛ/oWl홗i`ŷw;{zjRMae~G'ba~@XQ)W1d-><nwDYOċez.B%YǏ?}1σM)TW#'m|GenTy*ݛ}lt2juv8>98^]vsh? dQH5xK6\CgŠ$iS.?ol{uee+l{DO$tiyV$Pxl :@?7[a2DV+׷GĦ"`JQQᱨ",O,~I#gxi5D3v\vζ5W7@uI7[zDkWh,Ztו+~q@'*',6^y{o2䍽˖ KOoU?/t~oѷ8>%x( 9aT<A?_W㏫jLf._t c8LJ6(tzu&vM=CVx W1;*,7O>AT}x1ܑ*xO˗k[97p^wO(#W;%G;Zj-v!kSU[{~yŊZw*|U=`?T.MX$W_}V0\CмN+rV.ŘB0Ty .V˗als=aU,.$~7B2{+.3e9fXH%xXJ~^yKuk/L?xFfjfENV=2rXXɾsFf<u-=9<7;UܭBNlqNslm}>)kal+7%v?68Fwop$\Ggggleae`'&Ɠ]5O]/ⴖ$̼pŞnG'gHpi+ Wڣ39oKGPT |AX@X$ͷm>a+xyrn^#mE=uk "҂$JfNК fe:~`ۉK߃_X6uO 2PLcJwko?z=v5'4e =}\S[3w; h韂򔯟.mJv3ZǏo {[KW&YcOXc~ #Y~W`?yO>1>;RVVj t? i5z^yޖp5k7S{+^/nmk߀Ϡ_uJr,O髗8ouE@MaEe=n)L)7D+IbBX!*U qk93&F=cF]#$+`{;5{d 2 )6VRLm{NO% dQCdw#5ޑNNg8:>GTf'ݾіIgYQ,@U~'Tbgws9tiysZar{9ҨtƫwwVs|P1N?p*AIU-ʴ6{I$wC>Cc{;ؔǫ +MA(8%;o (_lPOT-qV-7ՍKz:2}O>Z+e DZ^uC * vuk8rԒ[}.+$̏yY,Ye/MtOsiK5JtƼY/- (YL`3D`1[="hok3"'17"8$UF{i5S2 ˖+9oruyykWui 8J_.<=Ѳ7~e bt\pln<맧7v+>cjUȹז-[49A5˷+euۂ yǿ_i J"Vz۟-;R}-3*>c|*aFL ocDm<`X%]kVT~[}Oujo,zܣ;˗}F[1f!9:TXCB/LhRynUnC 8$O%j8rTVz)~<LUpd{RA 8sa%3Rq^~yڋP[X̣f9IŚҔ k$򌤗Ӱ8\YeU_dAҥg_fjQύD%zF,\.?Ćji~~iRl�,Gx7M>\=?o utg옓WM<c^y}#q%NXMB?H!_}}_A$bl -+–mqHnojIdzSxr^Q Cn櫹JPBڝ[ Tx\:V1T;=si"lM SO Esc�zD zξ=gnq,?E</&+%pDXaQ )nKa}<ӫ(+V9̲0?444K Gs{rޞY 5XjUqUrJ/&{ \Iq }'Ҟlw?]*m|Eu7K6 TAt,a%slLgʎ;RVTuRW-@a+QS"5A5gUH%=N}ly@L|_*aŠ\f~1f:DC_E&@XvT=PLVd(r}muKm-鴗=.xJ 4&Œ^6]<M9<Ү)67=)Rz՚D͙L[eU<uWZ;LLu %V.'z~Dx捍JpT8ݰ Iĕ ziy)!&*i,~s"Y"xִ,߾ i*v\t+6^['>Wz-n'OPXabah͇Sl^i򟚧Al Knu,۱gR\&W_Z~)Pa܍[|T=ϋ` �̏"$Zt|}vmvAoB]X~jyE鞐m- M~36ϛ"{ ϋɮZ[;Wz+AUk;ǟC]_]X鶛 sexe'߯6˶ S喊''W1vuٲe3V Xae +ض;˾Y$_}rI1ܑŠZҙV?}HJZX{p`ǨSxc6R݄TAsqt~h"_j!ʲoVɶjxaƊBTXpdʓ')O[ի(&+tb'fm.tNȤo|CwrTzsd&R*BqQ zܞ mqePho?I &Qed0X9M0c%M.v2tև - J^CQ5c򌕤(OLX! AZ=VJRhĕ0ۥ@y Ago_n\lW'x`sbD"iXa4fN"n'V%OiK!jĶU2RuwdR%<{\K+HV04mQa�PGX)J6lok"wm-ZP +55ߩ8}D“'!G_..6,魭`wa{[~n}0Pg}<gSx{ waO=a*RU W]uI6i{(Q!kbSEo\JM8낗i<\,u0Cc-v62,d,[SrU]$XE)+x}c(_ w-=Cob,_c' k,eJU=kf'<޼V$5vK958z,p]Q~K ^aӲoVfJ%/?itRKX!ZHc!:2wXPaw 'J{[]XQ+RdZa]8ߛ붵KG$?%4fFK$1*MjUnT~"ByhbM$B)dz7~+ˡ[ S8WscTM}RX!+we3Vpӆ!T\Xyݑ=A dŞ q ؂ +=cWc x=bQ?n%˶7;'wUrc{MWnpa<cYVj vǤP?;LulQ.ALKWZ 70xŠ¥?,j{_%E8mڢW�`Za% &Moݼy*BMoYͣ*5U/+)T= rq?ˊ( =45 aYds?RׂS=@ƒZBQX'5畫Vq^+ﮈ`QijoVȹ9wW_}uê<7]eUVZQ޼v9ŏc&U;*+PX9kFmo65)?x}c(_ wUWƚ~Xenb6Gws[uz͙VA%ew6<Q1VUEd1oFg#͵-[$Wޗz 2:#P$51˾YP)7ĉ_8Zha QY`V>UdRIW:%6DǽJCBs)QZwCJ-ke<e#u}e,֣R"?Jl{.,ϰٙyOnD*ͽ2ȹ[99Uy9 -KF`=Ssh;/~#)3SWnLͬ+Lzy> + 6m[Ӟoc/i.KbafUʼܜ,h gju6Be?<` -v7>lO%(4&會X &}V{Xϼl U_zf]6Ni5nA!Drٓ{y>+ 0(xב{qg(\M7Ql;N."(*R:),Xa"o+rh (KۊWXJzwJױO5j%J針Rw/~0ԩbTX$Z|lL僔�,e<K uq:9+sctйsѝpcꌀG*9Q̾ ΠL۠(4 NL:`8{n92;>2d:Ar]w↑BY4 Lx:~L=́o]Vp/Wtoߩ\쇗w{q4Wr윶:jJU7w<4ʝ*sqHW[Ta gh@x0=V,;gON?_aFZ@*Be?<`v)Ђ!w:.&TSl +)D)wxp yV9/e٩wy<^kk@ PWf$?'L"ykPmZic R:wa�;gD[nlIdƍ օ2VfiY@XL kJk/\Xmll,,H>(x͹yь3TWSMK<s3Vnݹ =!L,:��a[$ehx/Wu;/g+`_<,nqiRl K0VaYL{ϘҶ"keBobscƭkii֍aнָ9'��a+`_e߉pa!?{V].+K2�#�WY0a����@Xax � +����� +```  � ���� +```` ,}a� ����KV:ǀo%<Ǿ ���.t��,qBagggkk+ǫ,((HMMVXill||Pł|fpA,U@X���@Xa��`ބ��/p:��� ��� ���+����+ ������ ������� ���+����� ���+��� �����+ ��� +���sV\gC#3 {|D9@:5xpt#-}a6m)k)Й[5=K t\qBH(Fiyt<+YzȃDb? Qǹ|UQ"S; g̥H B1~T 8rĉLiݾi߉Jg3h }/ p($k9̍:ڷǞ64 ̞Φ!9t/@cV&=ܵśER'Sg[gE'ߍb~pf3B˚4vLKWܖ"GOcs^ ���B@Ǜ%*q,w)~ttt@k]C~GxV>RE~R$cxB<9dwec?#=7%~5`UQGix͵�2ͱgt|v\i/mjNȤn79K#[ގo;ms(||t/{:ot|ԍv܁p+ɺ},T^X?VfOUsfKn5 QT \L2]^Lɛ"v>[a%#arsg/]/BxM2tMJ,ua��A6vbRVEnp2tlj3V{+a26Ng I^C4 r$(|RLX,K\vwbkrxbl^y75~ك#8 Әξ!/@XYa%V;d2mnG;Q:$OӘGʰ\fpr^kļ4vqދI1;6or~NЩCOÂ}=[Qv_pBeǖoN"_$*<8|*"=m^KP΢!8n8[{,\Xڲ/Hoz&Nƽ\9 7㮼24 ̞Ljh\qBw}^?&u"t] Š {~SEi Vvc0,{Wd0vH2W'ɹ<nt+s-%aEXԐi+\; aۭBq؋K\X cz A QQo?rW+|C5+?ϟleI~^׵+X_;G/?5VCk_; _ǚ֮UߚuWڟ}7^f"/��E⦅\ZJe\rK:g"V917{50:>,G}OOQ`ߵ:ufy?a_`{iϻѾ^N;_sSmh9ICcC\6+ S螵AOUQ",6^{EUʃIzvL"%KgQxC<R?{t1R(_Kg4(2o E8L'z'gy/l)Д{zt~ںoiV1ar`RX)ٍ~ߍ.dk].~]c9]PƇ#] @$rq.vn9}1yPe ;c%"h$06IoxBQWsAwm12g*UeWkG E tB0$|e? јSǞt\P^ݎ57a77;ZrŠH((IC%3^5uN[r/p`F=n:\Y^iy1{~d.;,w_��5W,NaʁT.*w>U2DftxIן0f*)a@p<&Ht~Dfbsa޺=d9nVz#L3ّ+T U~uIΆaіFnSۑ͠627>eqw$>BJ^+ ;;%2% G wBar\[6HU-`MmeE] J@>l{hD8t{k|4̎{xdlwMmMi՚˃`Cɒ ae|poD&8K"38jU](v}ƎIDК# yGFNm@bRA3] h́oĎSYO2o울 <a%ˍ+mV;νRe/:O0qòT*:/Vlr^ܔ +���KBXy 8lM +uwB68::pY%j +mL9%G?$Q}aEʐ-4Dsf7*gJ q*opς� :~hMR*#,6Rex4ܖ+Yo䀛4⧬2n0Yދ3r{)+%:d|Q"qc\̗"_$[VYO._r kr2+{f\.@ (֞МUn3ܛm6Tae #\X>KXiz~1ᰳc3V&H$*b><G|j9 #<up@  |0 )t鵎RY[$<a%ˍR "+Ć~.k}I06uǨD[cyOlfRaO'& @X��@#E +^isS_XyA"3{>X99팕HPOb7{\qڑFu S2gCT+-7җ` Ll Dmo/>`ؙI x);nsB޴͞V++yceHLeJ/ya!/R0-7(J9^; +xSifr/=<d~@婮$ hc#*:8GDК!U=&hrOْY챲9:gT1b۬jϬ V-i23KB,?{Tsﻻumk#ꮫR:HH&+bCD[BH$#$Tog;ܹÝOy.QZx+m}1V^hF%Wap{+0-aU]D-`q`z#пvwvvV>;Qs6ƵV$Yl3"GV(Cgv5DqeCzc۵Zw4֤<KY)L;۪2N Ht b+{{|)o%P�g�+M/^Ttq' ' hFH& ݎ8$%5u}AJSlClE[?Zf'5ե]%.X}e\b, >Uyo<Z4dBlneV ՜W44|ա-ۅ3ku5 |+C4l> �+cvXa`&gTr8!pf8|\u[JFr diU" j.-O=Xa tZSF@M@8Ǥ6+}*㊱"45J2(뱢y}1U3hxġcſN}+De44X@T^^`*9:xszVGl}nFV d1ũP?+] kۦ1i<iGQBh!EV8p$e|*qmMv6XX>�VZkq8?M-wW(s+1Gm4BJy?nG?w`Ʉh[ǾD9 oMha}Wϣ G\޵F(F+p_|ɕB`Hu>J"Mkw <9ƘABhYx]:sEٚ$oxy#+ `jbV8@Nڦm<"Xn>7Y86޷)M\+0 Bv;S�e$ %/\Iv^+ $l1FUs}-7 ZL.  `E]]]_6)},$5@4?��}u`7!q` `kSczI{m# cS �V<Xlk#֫ :Y@Pjv&` �V�XS �V�X` �V�X` �V�Xr`E@@@J �+��}nnbnfjf'5վn׾jaqSS-ܜfh^7>6ּjyLnyTf%54CȂMjy\l%&�+h:[rrK]�+@@@ׯLБ">H HJf ``@@@ߺD~c+uiwUZWySښ;wnTvs]Mۛ eJ<S{y/Ҟ͹Ƚ-³ )G+]V;ug6/ P \rqкk�X�V222F&H�V@ $@` VZ9iOrͩǼ!Ÿ.Ɋ%YsC:Z-U~U:#\>“Y~gՓk#=o(_=nu7rZwmӫ_/N\4+pq܀!rR2rr偲v9$[(S )Ґ �+ H  7VR9Oݟ͎[sK$̛W/ ^|=hյ5Nm;V c2+PZd1rCꊮV._,YV¼gȖʔH˗˕˕@-- R �+ H  зVRO?ÎW{GyKu[ug|Fr,zzX?My<is~]$}A>#,3%/NIಌ3sBfU -+ -;oQiŧʼOȗ> �V@ $@` o qu2oKVHUJ]{e1g\Է=mYS/<C Sʬi^Akhia9[V+o)\\":X!-H|~\\E'/(8-[#[)W!W%>ghªL<(FGKhh!dӹGQ,TɆfW_�}!1JAe`LJ!?w9 : DH?y\6g >YM%*3]uÚA0+ 0x8L' 1}3s#Gm[ �V@ $@ �V�Xyڻeo[yծ+KvE*44ᅰv.e ,0s뭭/^8qI'NYNr<?KN;*/K Y6Tl 32e2Uҕ~'*e+<enoiTdϢXby\i%klsǾP 0ndnmme@@;7KG/|>Js@N] L4-X.巪&YReaC/cMw:u>19y}_<t.s]kV9UIWL:xޒQ;�V@ $@` OV1Vpͫ+yC~R!9@F (#.U=~p3L1>y̖X0g3N<{R˧͚tB]U.~{vAY3rEe}e*O ,llNȎ<VJ`M~]rXçQT1=v^0NbkC!hc[ 8#\S*A/}5^d} HơX5qX[ҎMToxT8Zjx$`s) :r�RbeD8] s .oa"rTz i$B�Ĝu$k:[z)/~qGyA\Tn pA*O󆣨,MO0XL)S'Lv�qyNb)?g) -zjʒE٩m|Cg:뫉zm[c6hh|z:& 2%w6 }+1m:=e]*9j(=uw0k7ZocȧLb[UjD\Jc{WWGcƣpz|ӴⶎfgdR\L>T+]og[C81fgoe敶thxGV'AaTޱUyK fa0DUgy7>kGxS$KyleEX=WD=a}ÑXT#G:Wk F3 x�+qOr+#jS џfmeqp^½ J޳AzŔ_'Oy„I3*1yʬ ~XzɳgI,2]bҴ$,xe NVVɖUV:%X[btUMн%qو FM\p'z k .6Z57'԰Y5֞= mN.sNw4Qxpj!oDRsq=DL,q˹s+6+b>A pǛxO<cu 9.TOo;}nC ; x6]M}68-P}S5"w|q!\8R~Ī~&V y~Tv%�YI}\_SEҽ x u 9aN"c:|u3}nCG?5$ �=TmEw_4vԴ=1%w?yh25Z.962 X?:.me$$N|Es}7hh$bZay]NC5"🭕 Bᵵof5W{u `c w̓7/sauw'ufg<q'b4q'Y^tC#J)&7w~`PTQOOOgkfpk+|k{ڋ^_&ux:�wVRY[ݑn?TMvZl'ј;n\jU_Y?+͗\!7g)&L~0aʴˮ2yƴ3.ᇉa|0ץ ҃fɗ˗-9-[ _/[uZ+cإ@мBpm}"I4 as mZ 7տW^^^{Q=p-L~% ց@S'˚\um$y$gKȷ:#*pŸJntKdU1_t|r,<�;QT"L WӹUd?zTQ3|htH)|{~&8uZI2n}}ąUބ"&_8s�R�2fS9` ۺsΊʾmL>&.IqdP59kPSe73q̱wZ襍ȉGy[wWA^/&1) Tz+3Zp vw[.�1+Xܗx=<JH41ץM;L2O>#Wk;::[әIHѷVM:WP^UD 7 Ԭܒ2]L}Sj-M=s4N@@]2z%}]<H:*]~HqicgKB- SZwzX$| j7;C& oڜYw <`U$>)gGVg31ΰGLǃiho sU'2zV^4Ɠ"^]&\531Q)=V/yiX,@*4.ft4 o}�dt6d{RbswɅWc'ֳ u0-$rCY>]>ch{ >; yJPlU5vAƢ ޢwDu !p8U+XX 0eq;BdYd ce?Ɗ[@女Fo;w]KxF>߆x;׉տ]XЊ?"3?Nӄ&2e/Ϛ!=uʬ&LW ?Is%eAAriO/?O4@2@OJyvcLOOf}ÔG[NbFT9QPl7\ ;L@a)\]J_/ĕ-ZX hЮWF_Гk&FVV S/+<НSֹ}pj \#53"Eթ/IYɾnʋܷ(חA԰zg9c6U(cX)M#)|:#PI5x @ �V܌WZa2_ԹGU1C&s;*(X_M4L6zh0KA6޺y$+wj)k UjU4wPn}53�#K"/ &R@qCusYC͟qж}o+ϥE oǥ/SqRܭU[bP)..Iy(껋yT$n<XA:dj{4: oxTMV`EwŘŖlI#аyҐ.t�ئ@xg0D|9;.a$[_-ig^9;I�|*Vҹk:z\Cc5lh>ǍdU;aǍ\/Ǖ7&w?�G \_l޹! zy$|?xNƵv6yiR j[u֟3$-t2;{{+ߜ#I =+#l#ˇƱC#UߴGi B+Dk.I:؞jxgA2<_0ºꟊi֡3X}Urhq:BDYd+>R8 sjg\]YQq _᯽ilAM7LAo?7Cqi埴딤;Sn_d'N3{3'<??L0irSf̟2}/ߵuc-O \4wqa@�Y,_O6H=V*~HT~f*/8CmS!=JLPlۯsO5YoqJEUcA9sIฑ=G >>@\Q 7CKȵi4ݏ <I X]"”<vTI/-& t8qiյn5T2|bW!Qy`X(�R�2fm5/G?Q_Qi+&L0I틪Ani{ub#q=B)=]uG-htַuPz{;$t: So:9oiM `w V%\_[:t2>vT}B@Vut[:OKTUM}KvhQC o {րnշ6"c@wP=- ΩJO[4nn`6$E`6ophL΍Ӈ"\e~ `Ex4HZ"P Htjcg:EU?U|Ҥ}Y%A4C't]Դ9 '_ HDmz^WA㺎msy VXzv$�\S5#ISt`(D,s^ 5d1uݽ.mN}10DwAid$Ӏ:/oFfC3U p$ID` ¾GB.ؚjZN8  [ '\ݭِyXep<r$#�C_m(f@d&З�+ I<]z_Lm}+6nw-w/ۅ ��q]@?-ueϘ|T3l^㗟ϓJ2CBVnY3%JJaZ&xI饙(U1O2djdF걒vD8</7j Ŋ;Ӯ]0!{gtC+kC:j('䍹(*#tkCqc.,e@ޒ$7)CÃ>)10wp;z!b&w1լkc/Z%υ29awYx;L[TַB 8DË['o˫kxbzeWXU^:Hd>a [8&S�)�X˃v+f|1 y1?(B0XXx8~w{BBgm/斵wwg3JqyN]?%e SŸ#rԐSՑD|KD%ɹDff8tJSi Gÿ9>ϣhzGdVqPWoha%uw6Q&ow5[5N(�".nbwā([*![g"XaUY_ lG…DZ/2K::X%!Pg�H f[5o:Yy3t\-�Xjg1cD ó7/BOq6y[xeg*:F#X#>ݕF6?0B c K#, pHˣ|.h>[ laA PkbRb׌A\c+CQPN;6;=Qtn+NsMb!5WTY/ >Xd]Z`0x|(k*TGoWZXw�q@)PM >x(Fw߻܍<'o7fû|^Ϲ_k}e9u3J9uĉ?O藙rRdN!5yeiصO~2=hIΙA rr~� [FVzȵ73~L_25DF!:ho1kbGCT"}sG)<#@eFn1ӎ AD1HN;]cp@ծp pD©0 #h }-*RcCMP(3!=褆E+T 9|z˝P8֪$M8Zo|.k;o!y>s2 @ �VFӷ2ۘ, v&Gۺs =Vt+&}+cռ.wdbI >ӑ2J=&uۈ( >x퀾4a__Bwu(xg׼Kjp14?uzPUN'\gdy}k 3=,X {:dŻIřMU]OY V82/:},؞Znqiz:Izv{z,]OP2Zz{Xo%y�pKOB`Տӎ1/j+/ZR" H0SO[z_Dy݅Q9N+wapl{/ _a/Q�3DԒvC8sh۞ -k`'׎.bsϸyB6ٵx߆,`%1~v}C{ gp6ܷv|_}qk<^wN.mdze6Ζ\Pr,?O:li93WIgYvkn{y*=dIN�jj\f؎ֆ&tHM;VmSYWx68UZa\0Uc& oYѽn9n~{͛#$i||ifL!h-5CnN{q: I"<ns8Or8lH O>LԴ2f"D/lq@6䃊{g x ~^4f,hVw)~)t*߇ŷoK!{/�%DF]ꍞv&boтKnȹ !lz+t6Nlp^xsY*xYĵ_eq`e1Rq-?D IUaهock{H]B=X}N3دRɏ>FU#2{:ZaSViFP*&/[k_yDz@U6ulxʫ;jNsG{sޫXy>3Hx]$>5`IOH2)1V ⨡c8K^ʩN{ \мw!Ǘ6[u+3mzOUt}ߎ X{BwP++jJwADBHL]z~k[5)R�V ̴ͮWE=RGFt-*+f@t�`%d[jHTޑ| xa}?`}{AYmkrq{1 t_B",TӔ&N1[fu+ni´ ?:[.(>&3KJTs߸\ -l Mȁ}Ɏ{]|Xxh&/XE,)㊕c#׸|@(�XXQ ljǻ"yj~S[4l7VyxY0<B~V=ɶpR]NU)jmkF~FaJ` =*N3Hrچ _՜W|ZPSa ݽ�C|kk,/ BN<מTeffyx)SB6 �oQšΎcS+T=޼5MVl07';3tȥ@+!ƐOD`R|єpY˷|^.ώp|o{ͯl`YRE➧5kg$^2*rH`壩+}ף0@O'}0m47[Gb=VAc;uw8/hMv6XX>C05c8_t(`I 8{�+ j(F!qui<iGQB-Ax<Xa TY]FFr-++f@\�`ΊVG}Sdmɚq%6۰re&+9E)K6tnRr\a[Ȃ]=+({5$͟4'O. ϥۦ2w¤i?O9S%YɺkVe=P _ W 5lWsV8h#_ =ꙗ-[?ef~oH3))**�u*J'L�$>V2tIk��+ߡ,qo˻vq k+uim%oIݚϹ%3D=껲OέRO_nµW&ze&N?s̼+i)>YinFܶy~4o2E9E?M>ugOe<eJ}֥YSxN$xAYvW+@@@�|sy;h@;4˷YM@`hHpRNv�: ζsnH4\h>|yXkS#Xott˶NX<y~㤙?Nu4)YKRJK'OuLɅr'L9u)sgI/Z,##>] g勃)ji`/Z[+B@Sx�ͬkjnnioMDB6  cIM)JZswGMk$n̯9.F}]|ŵE.32IJ_U%ꗹ 0 S2o/&2gs;qsM2KRbͿ̜?qڌKg_^q,o~b͓U9KBs.LҐ54XeX"CR#Yb]([{RGeW[-2w] 3biBVԄ"V c0kmTD/$Ԟd稬4VGkGN H H d@@@�JK]Z17 %o1<V #R,jIn{߸s?M<SvڲS/?ϔ:S S~Of8a<aI˯R^&L)'|\7_Bi٪H +R-> 3dAz2Rcgyo 6"] ́9oS?MR`Ry`aW"09 d12ZS Or_̩ʩm5kX`<H  �+@@@@l)ގ2dk$I_NDYWELV^i [<e[Γ\:WjY d'\4&͚8eք&[4uԲEN6Kbāe+,!Pvr}lZ‚ Wvԏb)P9C-#5(FF½xYVZ:zږ Zzzz2D Ԛz(Q>V69FQ;+*k3CC&�+lV Z;HroסSlߔ[kQTsZ_oWGk]Bɪz&8˩.8us@ݼ&zVghk}@y{_Wil[bN5 H H ]zW\b_DKGKEK_,_" v!vJťoG6+>{ٮKvR-rlk6I.R@i:_v%`+6$)p_֢|4Baۇ] $<&/fVgT$`p93皣�RN.ɪ|ГJ<R^ 8`l`屷ףrh~耨~ Xꞩemフ4'j XҤRh^kW !Gu -Uha vEOaZ$ VT- Vbr&t#lj+gUT#9԰y>aVghk^AnҚG^Fu-h?Yjl]@ $@`XIgDϯ.ɉDJ#%9Q %W+صc-lw\@O@Y]n۔vyۆ?V:Waj2d,P\ϊ 0FV+޸_]y]rEg,Ƚ23؊lt@~##\`Yv_]E?4QR {0"%90RM1=χÂ8ZS ަƇ͍pm$[ ϋfmnn)=UUCF<-xa\[ܔffԆj^>cϤ5d$`5ZU߼Of4a3/7iaq?!N5  +y[ͮ*))IIIILLX`_`EIj#$FJ1#e"W 7?$G$#kXe]ҋvTk亝$YH-O{^rMw(6va> E;m(-,VȉX.: ?뛇 ^[[] ?WS5329hRP54XɈ <Q| 7 fJU^ ^ӟ_HyCËi" 4w*rNԹU]$ELsu2a"8YsKNF@DXIR;to$/XqYѝj8k�X` XidTdGK"kHEHEUdί4/Fu+^c4dQCMؽd#j%n%WĬ:K6QzNZvԽ MM&p&aGy ,Ƚ[1V8mC"j*T<B_wJq-BthϪz[fB 8` + E[$lB2ezQqw<VFe-US^3*YC9?ߍZ(d`faȥGI|"\}njqU3}^4:o/Z7iME<[] Ld]Dvu �V�XJ]Zٍ]p)V 4teh4|?RwsPs9dM];:\Oy-r͕>KJ}_.xH]XPWcq{T1k l[x&%pq^Bq|߆X.pA 8uI}3cNc<Уof@99q獴4utttM2 {f: =$2Y4fxRWaNz 9 o+}K{'gG Ŵ?VNǎZVe! YK",hZt՝V DxЍ,;CM::t-q%bK& a(pr᧣NR7;^+.;h �+@@@@@@��}`.֮j.XbEIA2eE(huO=};Km17s?aϖ֯XvyEy ku,IԢ5{0t gh:^$kp?.֫"Os6^wM\8BqBXwM!c �+@@@@@�� [.K2#HU\."W)wY%{F{蕻Y_S\WCw-YbE3%6̑l葆mαg?48~+ {ޖCVXqS~p+}]\$dAA,�V�X` opҊoV.].S!WpY \0B>תF>kE<oε)')bƕJ,mi*4tccEG3iv+1mN-K O Xfm7匳.,ύR<V�X` orRcvUK/H_yLI{ڱYioh{.R^pe6/߾rَwU UcZYt<.Uq*p,;ҝ^2p`|™/I}5ߥ%7.K,í}\1%hI%% v�eJ60x5;p7.A`kZ<R$ p 5Ge`בn`G 4@HXo:,�n;CTuw}w+r'8K7 0aEF"xĹ}k:堆EDۓ=wp2<m@u ȆV 13$XT@="|T ]~Q(+ !sU<#B+؜%ߥBTT!| eڨs+?[CU)!'᪝.DbT-o(R]>EO�`Vڸ+.VD. S[sBw}cM˷[^i]K[sגmۗlGPV"סnZx93M5m*eR}bsk1o=Ú6ClVąȗH0n ;Ԡ%AK., / V*ӳj;;X%Ȫz׾vTCs*�V/͝Ju`Hfg<q'b4q'Y^tC@sP9UZE 0ZP^493 Z^M]-վөC#a7v6yRgɱf8;EYƺ'ރu`eʋqԡ`幏.N5Ūh{&s:mx!wղoaK3Xk>$Q|\e VMU+>h8:Eɰ_T+z*]VNzrr/pd?8e|+Z]}mWUY}%;/M_A.wxScF.UvL5ZꎥT5=6"9B,JtylԀo]\Pzm�+@@@_s?t`%ŢdtY>]>kŌFa V:`x9z;3kC ē544<3c,C&.S{e&3c(StTzؐTp8[`6;ʊ4"tKbDTH>:XDuFpIJO{ _؊~" kZ]VyJEX›u}p@G=Cޭ)LU~)wlJ&ޏ; &j`Jnl/mC;貞o7@CQwgPuH駰&C"ܸxzH 92#<V+`MC#ܒK;ip59-w:{a'_f8`i:Ah22-84Z2jACmu1]Kߛl^c̅æid՘$7+C<}wx3? 0YPnjFjƱ(Fa(:Wy`R79װhl!#]-ʍR`bm2@MEqu}q&Y?.ahW/�VVD| pXwϺjq FEMB@ԥ\NF6buq:H*pVsN2OmE58mE"" v}oWvEդÕ$JS%ٮLh*)B庡Q#qgET\aK3.Ȗ˽ X dqŹ%ѻFVꏨԛ:dE2*@g]3c\& },ba} `:(D£V~ =k*;5>o68E/gۡl#ԙcdiHBvv=d;w*(0K #j‘x鮹ޞ'_ޞXoQVVahv\<V>Xɹ6=4VɆ6sH&  oOG{).i/-]r(AyCs uL1D߭=.$ŧBg*a8қ~ 1A@ؤQ,_.7 /[<wi]J烕~nu|j"h!;4Mm+b %O*X}oJ6+e$W^3*ᢐh2~I XXAd� Yon+D 5DQZID[+a;1>7IxMY&N)פa\^i /=\K|[G0F~ 6Q'+%L6"M|*Z^%,3J|^A2Kor10|Q\} G_WpUhQC7ڇe˗+{+"RS+]!y%נfrYUQT&. NE+_#[ZT47u7TPU6HF$$ZU#euMt  ԁ0r:xgE# LTJu4Ǯq2PmQ~vyEe0 2Ud B/-]T~nqQo- c+vbᰐL7Dv1J`H1tVE۩co4a ܼR ol$$s* z:&ISt`sV›`p`|f=x;SwLc)Fg`hz_Ve;`04Vݚ Y"p9Ie٘@?t`哂q.;kSumId@X] >k;]kfQ̽߻X,s~ %n Cn^ۉ+*DR#zBh%0{A@\av{vOs/4n@o4vw_o#{]{]m?t`E= J1ŀ <G =ڽ)1~`p8G~G}jN|И"6;28ݻS !yIaĆEBÊ 3 .w){͟nD{jYMyѥtZ/} g4[a4~mKe7T2B|#!k/,KUAg<D (S\]XF\їcU]x>..v v J;Iߩ[j=ICKQ֫6lĩ7iHFH("tnF zj`KߥuleWaZctXᘦ}얮)$8I.-ώP`ސ,Ÿ(]}A܂ܐšC]~t`eV'3 %KC8lM4DZ9oTIEbtci./1汹FѺw}5oj*Ts*_+Jaek= A!hAvmFh>[Jna A B� 8r"~0JCHx<toCTv#, pHˣ|lvɹ6PIyէOs|G ּpQ}/{h�Xw\LNc\ixWC+lҨ/~=;op,w9 .#axE( =Vf&"ʀU{@md`biM"TG%eBs|S!صģ**s=K`܀pEs}RyU~fXU~g;'C�G0CRҙ}N%'EANJCWcQ@ӇhAeXFZ1Rd qĜ6"1f1}?`nsazI:$M [/io;4 6MT֪\Qݢst+]m%꟥t߁3M2\=JюSu1'9p@c4$E,΍f^dEI0/IU_<'WEm- ٣+qNiZ΂u=tSmr"2Kc9b˘ݻ6C>RTp =i GL'Q+wapl{a=VHÃpyUQCTv滚_Dj4*VD6`|}5"ғX}~ߪ~tv<͕}Q3]F\ibz~> `"Xyc7lvC8|IC F;|ۭ7\&Diys c.*[aIޟց1VF`Om- ܷA'Ocd|+/]4a )}5׃.`9mAҴel~'*pEU!͡<x5î"U#[&WHF@y8BUkƗ0 0bUlqmbE=aw)EZw63u3[7SRD*!W!+QuH46I7LGqfՏԧ+]7rkP5?Owvz}�o7;g^ͻ.!Ry٪srpi%ɒ[�V`5@1T-p4 UppoνmQsz9[p@LgԖ& 1A{T]c}Y~֓ V(Ju5}"$Yl3"^~_l +{L|ۻޮt]߷CH2lh0@`w;hIy:ʊ3ū.l0UPV}@bR 1|J4#uI$>8$%5u}qy)Jl?-XnQ'5ե]%.X}Pfqr`b[3ѢN= Cwesww+O̯OXǟ]޵uw{]QW-*BBz(vQ "Ez)B& I@t]{~Μ̜yO=g ]=]eh|[6T21z9䵃0q(M@)-;V^BIh 6@[*@*)yVZ‘l9Z  s͐mr9V<Q`!-%(cŃa,=C+P08>gL.iURaƍ/,63b0Ȅ l:巓V$_B pG.I Ts#RU5vTUJ{5Oe+E=aQޔJ"z7Vk}r"I^(+g\m0 fiZI.뵚fN6XMlX:0ݷ,Uz;`]6٭3.Vw[1}=#{ ]kP|iAm܂KsQ.l<̢mg4/2�+yYCXV8--)_~ݑľ8ڀ+0UBD'Hlƛk=hI +��ʈQ_-Ns{bǟ9ymI_##3;{p/{s,+[C�Zo@g(Ѳʄa^)MTz^  eL=UhXϣDA0\ verZ%f8A{+Cڢ 6PvGgkeqJ%X .c2=[2]2I.&/9zt_O;# & v%aQ(s`ēዘ곾"zRչ2{'}(;V^֯4̰3)4 p hoXͬ QYD~!O*) eB{sO[Z8:~WTPH(E;SC<Me,&מ%�Ov a5b˅- # iLu3V6\۰X_j):GcCV JnF9[1qhcٸ O2zG)y*+˻VqDYS*RsцeQ8r%޽%,>Eq:mehi@Yahbge^Cq1q1eC/PhƘƈYgfVf>2J`xG0]<].6W#'za ڢGk0"~Ă3 Doxu X_Α}bvNzbW)qaJw(<hq +cw�@Xy��E⌧ 5� ��!+%'ȎvX?Aq9bon/1Jq2\,\K3^e`Y ٙA5Lw9] Qݵ?Owwx+nkS7is-LKڦu[oPo["WWFjwwOXXy�W_#Z` 3G\WW-q }Ep K,cR}»���V��߀Ί:7bzzP'� ��}AI10=+*<fظKsS3]JQKKK q'N'"B=*Bx 3oo{Pp38Ӿ;%Fkb^sȯ(qCң9nGU+mE.ê.lxQkXo;eKPM̘,ۣѷb-0M P0F#8KV�� ��# ="ӣK*�a��,3lz bE[H(ʺfZw!~C]-F٩N';G,J)~p3kOcEvMm'Y 9 VME%7\g<>鬎l*1nkigX��@X �������x_'p=HGcQfŘW˳;^t79=>:Z\ܔQxO//u;6g/AFmC彣!25U?ce5/KmKɿ[~}cCa'-,7]}\s?owUܯ%a���a����@X ���|PJq8阮;0QcP}ikfD%笇@9EkI;g.dTېh?]f~n\N^Dk$X;oliKv|Y1A5&KAn_(Z ��� �����+@X��HX)= BvBwǡ!;vޥ{}kΝn:;ڲyVMm9C__wF WM06eoG#R}]=~L s_#M{ڈu\X0%bAoc@ ��� �������C k''3?X[N[[L66qt(v֛F:&*WhXG ER Hk1XoL-t&„lφ͎^S^yY5iesҪUű5 "4K4k/iĨG.Q ��օP����@oﵰ40��7aqaeSPDP-<Vt +C)B_O(IPDt W<?VH% ˻Utuv=.~QawGt)>$BB鏋eݝu@X��@X���� a���>a=M��V�����n@X��@X��� ������ ��� �a���a+����� V����+�������� V����+������������@X��9aE(hp&uuuۄ/EQ$[2ŭj]?m,s*0@9fӕ�GbXviU{SY( o&0E xd翃nn�~~ yp8NVpt:A0D_X`,&\hҔcH>{CihA@C<ߌV 6 9qDg<鯋h੮"FЯD\Ptk-#Pd:74T+Gy!dOHO34`}:|P' 7��A +~o(\mCΝڅ{P']K'oE�ٜw1AkSMaiP.&&a+oۼa_Bgȩ;9E--%YXɡΙl3-K2&{J 1va[mnDλ)AY|T(170)U h;Nai!(K�9eC+o(gD#Gb4 >jN9;+ɉ9]})sbŠeT�DOUV i6~O+���?'4]*PX=-yH 8sW/ cP -504Nv]k%QYN!H/|$h->mbDg̫t"=,-L)򯯡]pZ3 S_TYQCSޥ�oUHB g[uǍC0. PF]پ MMs4a2-#oEXI<kDa0>t6R8F=_cqdQ@G#rj&2 'A̗We8"v#[玞bEWC/m vQ,}NUt"o.@خ9Mz;78!ykTh"<[!s@s:E ! 4&K.ZdZG(;PO{1冠ttǣ\a[1k.5qq% ]ne}Ia+L�a���BaE(l+NQdZIHh> Z 0ԉPT-T]W-h8N㐷pKfdA M̀ 5a{C}e",'=VhMx y5Ѥչ?azMQWh6T2}EhB@R@)tT򶅕ȑ˩j Սh#eor~ 8<qk ]xo7 5 9ZZJYTX4,C [{ kpP %şIq iZkιS +$oikh> M?f  t%1 Fd( VHbyKY% =Ђ*Fq 6C'ڋ;U7BXQp рk# + @XDH6I0T7ZNuYy[\a_Rʺ�+��� +96F^ [VJp1nT۫c6,hiAbXNs2fIIabOC `WZ[k`0tհwoc$ @.SF9 ܇_6WF8C(x$7y?H"8$mxِC$sˮٍ9| .%‘q m6R8WR.-WkU 5¯Vj[? ̽|oxښ;_""h-4%`08 F`4 +r7< W[ED0Hx] ce RӁSl[9.?k<|O#B_ 9VFQ" A6Yͳ!OUi5^8ӑ]=Ϊ!%-����Z3V+ГsQN?7'ygצ{-^oƟc p4~}4 :~y@<Igci 4H\}Z#h$Hl eҼ4*b˷VIʊT CO9ZbS{|N6R8׵XCaeu#VeekCfG6 (^4:+Wq1# &1^A`LŢIs( Ɂk%sy$^XVF,`R;ZQ(Pd] M/Kt5!lNՙV� o+'ʨ> zX䦇Ҡi>8\P"ݠ: zD %-0.%q�_%T8AhM\)qaJK44">\4!*fd^PDG#Δ75ŗHWzȻLqoF]抷Td efC‘$U2SQde/V޶2 vS> lp4v49/R) cEY_2VPMвla~s\^Xe8$ P ]}-ai˨K.˼\2d"ȄiĊ, "V{zy;aplˈ+K#Z\E" +�c<I%�� +~}0E9ݲ*jc,a"10,EZwԗ_mfaT#xᘢ)A&V`dei/61R\Hhd3iw{1m˪ Hbc00SQde)*:(#om(P}r"S*̽⡠lί`$aebT|@ k32JZ[ShhwT�!28M?$&UvC ZѫrӵpQ7 H1-N tCfDNnA{;rFƿw h}=(x^cZX GH/,`RI~- р>w6ʳ̱" 4\US4/F~iЗ<lP~`W �XXrx!|`^Z.6IDϟ?IOB׬ qpp@.A@og=#<0|$sV��sok(}u;(C1Y6H8IX;Dxh_'Rtx7`0X}Є :~77]T4oȴJٍ"tZak1nLu3V6\۰XoC0db|c;@ysa BUJg;匞V!@/Ak ɂN8aH47L8(K;A&a0$ Ozw_*l-o-'UvCωw0 c جaelR^iagRY;V^ 4B!`'nD S$<GLݪsN=kddfspv yq8<ϰrM~@e~%X .+0 K4tT49xg(ѲhK [\Y7�Š(-3ˀN4vA8id^3P2'z9눩MKuڊֆY݌At݂vߌwۂuIB}H߉{ |k:pޛuv=X{l;~W"�a��/)8ã��p~x/h猧V�aeʠh04%ſ.Z_l¥;l4c:o5 43a0%v-1w9f ʌ՜p?ְdӴ mrXzjP+g-f~ Vr\e9k{2̿Ycx)38$D��� KsִJށg9v:�� VȬedc|=�V)DRw÷?lZo?n]xǼ:/pܭֳs|]Y}+?ǫ-jLWgP30i딝{Y}iK?_x55_hoZnt\?$X��@XyT <h?/U� � oÿaG$pz4c "P%� _Xz-Z_tV/X Amys t==<gW鿸}mOV[~){`{xoՔ-nukf2ǫmgrg6ӵi;~fR}!"zށtuu*&g(KShbM D2#Q}n\5^C`MhMCsOZtP{N&.7}, %9S%ˏN omV>�V������ V���V䅕kaߩ.G,XE3O9_sjl]~ \N֚d|*/?z:Uس9?NӴj{V8cukOqhÜE?ҏ]!s^G #^'Z4VD?&Y` fV1-ݶ\1Oް{l>{$2iOOsYisFY68IMfTgsY2؋X� \�����V��RX<k͢;[_觝sf̝1c(훃x U/4̿F:M|Nь r[y|Jӏl'mv~s6)?{Lմ 5KE8yC CXiNES<79~S DG<Y%FXs- B 1Dǁ~{I犦8+h=O?mŊE<b%iVTq yCYhľ�'5(D+Q.V8f멇o' �+������a���2Bpo}*B 7| =S2{ -a>#|?A}k6o| 7Yz`N&]w, qQ[C 2[_|9Vt\&m}&׏y|s5Xq +y]]]=FZ)Jv8<yG=t'E,먄XkX#:Ɉ4L($2>VC Qfu*E\< 2/ًQz}Fېnk`qF2x:'yw$gHy Z{گ,]*` M(d2Ü{$:}@N)3���������@X* ѵ,7#.\xLM5U9+f1tXXuv繚E:VF'[W]Rwhs]a؈N|iR~\VXL]m=Eq&[ܦmrjyVIg.Fq"Tk/${DRGψ,GJѷ>? zeǾldPOtykggѓH-1 WQf: a{yeOچ!8IJsͤ}:$H_=C=Zѫ,ZnKo}!e[n|X O����|7ZX��mmmMMM555%%%wܙvFw E{%Пt߮ju Ps59kMjm2 EWb͛͢<5?!VIFq;"u~f6e w-.S~v㵶_bPZL.4n<Šh`hX "$NdpJ8A OQ5;< J_)Ql(`0ԳWYbi#lِơ2!<Umrlxr\$[9BXsO9hϥX5Et>*v'�V������ ����aPilUZZ О=_K:髵Ou3_p y Q'xD_v6ubˑx&n09),SyH\Na$3]nFI[\nvi3C5δ܏,\j2'#q+BCdy�-cwdbEp@Ot*I?YcExr8OreܓL@{]2,HlhLmVa`8i[ͽ;Yij.ڧF^p:ӽj ȋ@ 4"h#JOͥ,U.(K%O= x�@X�����+����JL ;]u_Ը,YiMh5 d/nɜn<{566'Ӽ%Aw=EL6{y[*۵& U<EiM.;L[cd-)k?[z1sbc}# \K{y8 Dh8ѣuOKv\MUwN6xlŨ,ʩo dxڎ ^X~LmVa5/<"*&:!."h)}Y1<<?4|jz%W.ut>/NYy#y'�V������ ����a奰r,"n|^v*os0dt]ϐt#-9{bޞkN׫5<ܼo}t<;$Vepov,g[&ok+e7YUbeL^CXrxel)o߼8BA-w>^ꌅG_ݱ4  !PC'pT ǰ%C@!nDf_͢SH8 08"o(1)]m1O;3d`wd+ Ba# 0]$q N0%GO<� ����������Ka+}U7XLm< -lu6l>?<dgbeRY\d\RQo!wݯ߬6-A_(z.mZvS4m'MֲjgͿXfzh| t0wsG7P>x�V������ ����aENXq F>ULhoEAp:_MÙ϶dPǖ:"2̹I Vcx/V]Pj{t v6L,Shr?VJXL^�aeB;gc%R3@�����V��朮ZU[}:n7ZfYcU`=5q <:+ haxRMיFM8Iv:IxSi;N_kZڎ|V&@@D�J6,?.M U&`p$ MG1K9$[-g`;݉CO(w;h?34ܴ\ !c}gyy&ZDz# ӕ<kzEp|s-:s(�@Ɍ='D/)GcQ(,y_D½<!gq}nVD !Zt~OCm=BQZv E,M H8#,<2G8}#C[791C=$ icq{X?zى*m|TI`C˚Y(vx_v>$wQÇ{O'�'>~>N.nn3԰v| ܼV ~6F<w7ki35sfeY=eӹᅰSvqe]n4Yq^^Suz8I[=&3y?t&ovI{P��+]4eA8) <L-xoG0o'a<ptۢ@eʋBXQQ-zY{a 91Gѽ7Pz[eT@_wS\81U^Xy-z{$2iOOsYisasa?ڼXV赮Q㺽t͹wS3"=op3v14`נ,>*Zjj+ŠrNNQcKKI5iy2 i<j<yl=A[ ڄ@_Xuu5G~9'un`7MgkQ1X19~o4Y VIEgӓx:B1bɅb۔;AgM>iۤ SLִ7i?zNC,��as|[|Dz a)TfS(qq% ]1ڝOwrX 5сަ�'2N| Bcd%_pBaYM<ƞX^j8St20B"2G +jDc7a ǬF�{+ƙkeΤ&wBS&+3}t~ʝd<%{jQ 7xxxG0~ye9sۣ+JIӞmmFailk!2DY=^EeKe9&f+XQq8ЄȔ?5'5(DVי[鳡냠~76[5CB^Wc m2dCvlUԛOTYv >7^Xy{7u4.xZ rci4y@9ִ9u%[ghy@vהJ`8}z@u -Uw8t4 Ca]0ZXI<kDa0>t8ebACC}οwЋL@ "EvI|49aCCC IXQTTG1%`pנsMZRQ wFae` oyzߨO8ծY-lf=h-\]81nbO01 6YE%ïq<kXM[4]v u돡WXLӰe7eNgY]W2aie2I`DzꋈL苓$3@OWCYH2cԇ@_ /<3rw"#�+PXPd9HtDzxDͻO"7ZNue8!xĈ-Isᘹ+$w@4Е4tN-Cs .:JVz`H:8 )~^!&US�#s0NeCd>z+<TcuFCbwX= WoU]ŝ#seoLBw7 th[< H{aEAo i=?-2$% \h+b�k}VϠGPJ+VTk<B[+ϻܮy ZZJYTX)^j];0^0g`#$4g&۬9ŃL N>VpGyYv uaELűOwZ(>c&,<?y4})pU lo36ߏJ(_w NZ(}EhB@R@Ʉ98JLownŠÉ3ʭl2#Y1b E7BE ly-+':q` _* 0& LS]K kUaFXx䰏x؏Vj׍\tof5q6m:Uعk_A^E /f#֛u2r%7}M,qz:SwsǩlrM.`|4MtNqn畿nu.N˫ﮞ"0 v/zca*nP2�}BØ֎iQYykS\ע<$'Q. �~J[퇕|~6 /{Gm(Fg4dz:`p̣AGU! S.?kBGǷ`0`{] cG<<ͷxXr0Mw_Ddm@G$b4@TfxuҔqک,1QE1B~ #xzwV: P9e]ɜseoIMs"~>75BX[Ô$ ,e yzx$øUѩXsޚ8+#Nc}à=@8:C7:zCO?$4kbg`ϣ�xښ]k~l `DSZEQubS::u%xC9*,$ZRg֐Lw:,iŠsFHZhM;UC#~=n-exNBe͒B] +RZH� NjKPhFUl3}$<EE}sj͕EXTTSPI]jlѵVxnBx0c!+c]~ B5ww} U+4%e*޹h1iN--.˵笶a1W)ɨɿN:i]JTG'mtVY$-ae "4Fn+x<q|;ʒ2e޼2&l16u2az 5 M,],,h3hk.XiGXFTG`g.JEH rP.GW!z6_ $(y~-ͱ`s})hÕf)VTkt#:0s2z*, DٕCt*HlTXp�2a3Z3QD׷Bqzn.)}I.<m> /t\ūHӧ͡0&vGX<зO~@YG/&melyG+3 :.{|6 9-Ӳi ǬFCZ i~7:P]w]/^sDٚX6fyh\oc;JDwe #zaEIz�m2a^ vc}xc9 ʛ$};v)gͽzXx݈qYl<MDžC@ ܓ7;{>R<T{R >*)\;l5tk⿽ š⻎Dsdф+-Ց4Cc 4vlEP%fK"q2V O9ZbS{|x#Vnٕy8)yilU"(,2'}7xXR"Nc(l1XyxPx`c8C'/F/9XɖLԺE^nD,/ ~U39o)qJ4L?״b'lnvg6:|n5m˔mӶx|Ziڎui~3eͮ7P|fu>ܒl`"drסP?iWu?'`ŒŢ'݃"1ƏE;$~*47h‰?rDwm P ,<ݮz\`chwI*V=PΊz'yh6g\#}וű랉Se1 +j?Ί|Raeb-�ʛ+\=z,$08e8~юPOu85 qbX_=%ݴ=}w/ ,z<QŗZCB;P"z$/c ǬFIZnSthq.W. teF;z{hr .uo6#zԘŠ4b,b%e9Vz7pTd2lH{>vOcn^5v K+_KzwBK ?+V>S-DUe[V lp4>]#<t 6cb `z BTi8 4Rs$fBt- !9pVAa +qVp08eJw JX 9og1z[[;h -5D}" eo\ ߛ9KT7Dzof$m)ڼO6rg`?|%W[,OY^4=ЯP\a:mͮ{HWX9FT-@;Cv\ge \)#d8dwy8ַ3݈U<ΏJ@g\ #e-dcYEsN2j&v~<ŠM a`yYMW|F+5"]yΆÞ5,y ]i +h�V^[X]Ni}V_C+d TK(k Dzx\�t]r,×<lP~`JGHtȌ -~"lMW`81;\2ޔL5tVv$# vO0uކ# o:8XM4uʅJs N?ZX]+B~MrU +}O24H+h\!y sm oSXn~5>cϱ"&сBuMQe 8)қa&QAۍu7[t gQYȻPxM`5v=z@ ; ]=]eh|Ự~E؆y:  tw;H4"Qϩ˷{{{ZxMek !_8M|"R7IoNK#q FCSc\`Y/tᠹĄh +0Ilk}4ptҶl9 n$W|d1A9>9~^P( u*m>pVAr+E=aU'a,=w&1x '`Oxz)0#8-l&l܅6.^mn&lYsT|z):vyZOX~nQttȧ[!+o n~v_fݽz}3q3yGg2NJ_g b!޻[OaG5CBa󒿩ԗO9'mɶ^ I6p=B)Ͱ?6^k,|RCq 5+zH^I>CQ 乐#-QXuq$4 74rsA!*, ߕ5 vZ6NJ"�ŠH10Ha Kxs62"#0 ouOj΋0xs|c834Z\#4xj H}qbNP&hv'}xq ^SOtc S-Nt2gV۳._#Vz%8&x* 5yP eLNJLATqqJ%X .c +=[2]2I=9^ -!zh1Oc6辊@LJ¢P='+eg})D袍:SܹL kb\:MrZQ_-n(2E\**נ|%JIAkш{+3k`0 hŰRRuؔmm;ws#AK<2`C <Tk[{q-t&ʆk=‹nh2A0vS2H`pÍCXQZeEN cH>fl烛cetOOՉ叚L_{#<%0A@ w<xgJЁ0/? ןa xZ?*$@9K{m]e]fO#b. `?iK4ְKz?b>6px2bNfM Z"r"#fצUT7I3L>ְ\},5063XEXY*wݑB%1Dt`cP h?T[I{RX=fEM`k(8#V/. -*.Nٰ^EEXQ^U4빯>g!-($@a$oh0sz-� {0+�1m4p!L&���0ݽ{/s?qhDm3u[\վtx EKvRcFBaJQ/n7! Hw;s 6S}|`~æ֋(ϭ]]ۚW񠸚{/VZ|ջVDxUaohLs+h됋nӇҷC͙V&t3ŶE_$۔f[c>k2dz`LkDX5M}E +r˾dgF7e&L $c>Q-(-y8zɹ~Eg1G*,`ٕ{w�SRaZ� � Ȭi/s'cA����9VX 6hg{eG:?fg]t֝EX`̓j hPc<Qv<mˌ<}Wb2K-;Zy-15, =:s̥q/^sˀ7a2�+� ��GzD"G=�a���ʠHT|p=e7_uv脳םhy^w`I<G3SOg"Ȟ"SZhb&+ͧ=W}bKگ6VFdԸ]-9Ysؔ/A^B:{+���+������a���>vo 6:Zfukiꘙw\ZZy?J,ryYp6ٰbє_<nwԽ Y͂Җ7K3JVT7V%ħwg�a���a����� ���8HTb3[uhM#6/[tv&mp9eyԊ-f\YLs/Y}[7a>u*!ݪ_XV\wa`ww߳+o+l*.o\J^£ox-�� �a����@X ���ʋB3s|* 2 6#!p Nсrb{,2s5s.7XAAVmjle>m7*HfOJmZamAiùuGI\D@x ��� ��������uOVΌK֒p:]c;ܶ4:%ZE[-5l-S6p?SgKL-ȻZ;VaMնmy$/ZeLVUdZ-.Q{ϦG>L˭,nje ��?IX ����|@|0 x^��: ~ ';iZ]0sU厳!;M%=lEm3mtrZ:N|n^+eg>| nv6P|yޮJu)?#+ϛKR&O+m_rfO~r"q^Nu)!BQL;nӘd3`0DS߀t:axB?k{HwqQOy}9zX62;q1Ws.P� �a����@X ���ŠHT`̽ >Z?}Egjٟf9n&L죷!BeJ̼U9 kNֶ b49mәZlyjC b~Hx ṼCݯ_6'y&~z6:卄@ߛ}pϮh,j}pG0oPOxU 0E }KqA sOay y߳�>>�+@X����V���2Btjy9nm\_iLY?[ztJDfbzw&]kv,S>dMұ~Dhz3 Mxco؝V'ip bQWf]]5gɬs48"&uŠ;{+ƙkeΤ&w=.r$`xסK݃"f<[Ac<U$4a1U��_#VRzPXVS*@2<BPvަ�'2NyOX,oȔ+˳G@?{F{ݻwgvfz이z{ݹ{gTA@BB�&`c l6N4`0`d%ƀ~rY ԣTթ*{ Kl8燰Z;=9v^9Glj{Oߟ)Xzfq7GE �+��H+[g]>wko ~m/_=_?.wS&0ߋ5߿7o7G 2~QK?Eǝ5^}7r"ʾ_ޯB[du`_$41[2dd7R O.;2.OFq/6len(|^)"F~&Q19o V^=g%TqB}Zw+&fCObY\c0 :P>8qmʬው7,Mѓl6`p|OQu:u3Ad�+@@@@@��€(o^z? ]`ўwد/|xno{~k~++ƛү*ɿkw_K^6/ߑ7Ͽد}ϒm/{o_^ 91VP| &.3ag' VPm pm-L8Uɕ'՞�[D4&6Wj00ovis3ڐWW`@z32-δ1srw8@-#^+#7n8crTr])!Gy'NqRd@@�� ЋV2}7e˾~to'_F6o~֯>;j{#_Jk~{goVv/Y^5\/?^⻯Wo|ėUi Z*N1YX5\`J83GUf3{fQ[+ dk�CK nP=N0c9EReVl>=`p<ir}s2ݥGz{xD(K4n#ٳRG{7lbv"t-2 �V�X`E+Y4O_(Q}?%Jچ?_ǽnj/w[-o _ _ʯ7eQMO?oeS\Wo!jUvz&.1#]t`e~`,^xD i{&}Vjs- !O) mmJ5.ىL`jDXndyPK9XdA| w:81y7/:gӇXaB+ElJkPd|52|B6 {Nk HA<1q*j")#7ӅpܝY,Zק`J!vȘ=h<jw1G#űM+I>4.F z&eRՉR٦Փi,Kd.^E㘘lXvgEwdsaI>k{<5<p4a{@O<4�^_E&Wu)!ԗ 9?rkSNQݯqHdy r zB^w& koո4ў�tƭU9O|?&V5{agdžW|"|+3bs~!S/':32}}C};_Uk~W/>->򿥅绯*f?I_#x J<4.!)wv`Wΐqs/Zl``W)}X&J؈??"XǛ}alwmh{1d`JI+#\@X,yҼVrh{p̂ђ@rѨ COVg`1+ um-:zv`X3VU^CAuH[wf47k4u@j.m^i%,A~| T}M<}]s|婑tloYEnOBsdЏƁ\+kQO_i9j'nPIOnH T� ze^"zvX}>eiD 8!838fk:)j逜Vmreh�XYeť닃eW'gg ,؝YZZ(+fr<&+'d}%o %y,tż]ZV@?aޠx w]WI7v| [6蟿῏ftnQN\S?y{7]`1?LO>IC(n;ߊoۿsw>+~WW~黯<zu`47q'#ڟ (#!XX1-OH*s[Wn{fGcbsilXn]KCc<xfH@*Ha㳊ҖX>ᛏ]M Vplχ dǎm8•.mOYf!^<\y@49+"z`%?$kSx^E$=A>2|) v]ǫDFzD+ǣYҤb Cr}=Ea+U0<b_\53r;'dSKSa3lMR\, c;i`ť^eA^hԌ9*7E)0 eWH R|8"OqOJB^*b7C51^ 1.]cF6h+% wvG5lWii'ǪjfU\4q~Rg+)DF~驌az(NXqrSؚj4x&rh?\;p˷S='*&q\v=G,s[5u�+�lU[Μv\U;2kd~$?̓|ف!+Ry$KD<Dm'7bFŤyPhxPsΦe+9$yeV(a,yOdtXXBX\)cx\%+Fc8Ֆد7l|އfelͷdEYw ~}OOwg'"[p3V&ϭ}>Mgww|w~xc7ߎ׻V�Xyr`Ša0NIz&Vtӻ>K4o?AsK@7r ۬6ODC2.!Xq >wPtVlQRZald{# 8z vMX$SdiQ<I6E6t T%^9vU8͓ŭj<Wf.!< NzB^(CX+3AW; I'KB 5dL1Tݻ,RsRɥ[pwY LȓXqP[_vFomvSuZQ8 Vn[uEE7FŻmz#9N �+Xק<&J)<ޜ)klA@SrghusRt^+|8;qm?B&6E,HFj�ID4,qVit+}x6-<t= '`뵓,ޒTX9auV;_VSrirVyAپq~o.}/F^}cp?F;/|9ɹf@=쟾_dc4?ϒ'}Ȼ';_AcAW.6� 7t29uHr9;ē&m?֬1Jucl+`aQQ'`%]twh h 2ޠd *n :lh CŸ14b ="8ꬪ|{!Qս#OKVeU^k 𢏓^l*bc> ޸rWH.q_뤚ѫ+Mɥ*pVX_ Q6 7$2[>D+aˎbuS}J<sàrOuSrP44/= �+Xjq,~vd5gXFf^6'+Y)>,M$q,X^5n +2VV Y_BB-sjrT+؆1 Z0@m}睵+ v*}1<-0|Io?pƟo~׃=:޾"j?7&_}qoK7{?Œ #~#7 6|c|cg_lR г+v})2lZ+8MuE+J,:p%+֝!sg,H:Xj`0bPm&>:_Dذ28|~D_M#:^N,l8 LI җː q%!/[W BQ/Di.0V> V-€f5D}3 Yg:fVi[o}; n=G`{uZXEx`l'MrrS}J<[Cu-1 ;>,)L&8lvcvM9MCku#(=ꋲUDrY}Ua3^M)2nP^`*uZ?p>jK Vȼ?C+nQpVvLQE8iCSwXl7҂~7 /s;zA*F}ꖳ Vwӏ>~^M?w9W?2wLާ\n&^1Xz`S0+w[3k+!gl}blG[Bc &#k`aP`%֔Ҩ1Ynvg&|,) pCmwx{ڬd"LOgVR\K-pdnD"wT{mC [> {iB,XAց=㫶p꤆2usxFL;FNzʐ +*yW)!/92P 51`śHyf`e%GמmgC`aL @X }m^+*lwK.,Xx0L՜;"<{L;7~O1 K3`!VWvk }pEt+V"4.MYS<VV7Bm~<++xq/N7&L?0όOMLOOMNOLM&hǵɱ~hĽ{Iv|d01٣ihkFtc=gg߿7yԃs&=| �V#Ω>-:G+D}{`dˠ:Kɕ t `E몪"{++} no9nX)AE-x>'v*bf+ 04\b2G $uu=`m~Wn8"-$Nvې& Cuzqrb ~slؗ`:!*9L&j~5[XXu:T3 8xXʒ씝k7)Q>UWj5JOzBܪާH8 ^eh�XY 1bMaa\{J1+x텽0 v]9X_sޤ5v, V0]!-59jt~ɯY53]iݪb:'<q'Xvϙ@{cnYWxVKV<x`@""K ӭO4$`qtv;@24k*wHPq = f!~xJXk`ESY)R"^LJoU+kZsF0 #Brkv1y< E0*Ȧ?HWi(Lwr1vۜv-T'A"~,GBɱΫaX#X1/Fbcع3V,F%`Xzt+l%^`2W>MtWsIvtSLz<(1o1lEp:US m u[k4^͑Fno bO=v]9XΈ\.W[9lSyPb5`R(idٴ�؆WvkŬ.VIs1m.EzXP7jn׼.KVC&%г+@.댏[^@@ПpT` ^\ Ъu S�d-j-cR%Žy �+��䒺JB>E-N K�X` �V�XM �V�X` �V�X` �V�Xz`Qp�� �+@@@@ H/ X+@@@/zZ{nCCCee%�+@@@�� �+@@@@�� �+�� �+@@@@_IRp�X` v7t;؂~ 6 }Ģ&^?>ޏAl1LJ !"[~˂ Ac0hE3nЎFƱ CY񁞞F�V�X`  jIo4ql1t&(KlNMbz|1 _LS&ӌ"VlYiXiCwk`` �V�XzqJ,d%$1&p AF L,< ,E`lH;ka| g Vx,F؈^K+=C{FE|q!mg9H,qy<YuWҾ5jIZ6CRJ<x6[ kx~ܜbOQX.4Wt:V]IVUixxO;^7;Μ'D8D2s\{/U|n{,qi`e2e&Hl&J H?d `{xPfbdT3K uڕ. خl7TMskԘlK ӷaUb5{ p2azT(, Lv͙QjY0>,U!S.iLiiV5��=[B}\Wd5u@?aޘ[r V<xV`i禌ۮ} \똱[%`J ^/1l )gl͐ J� zeV"'{g& N X1.=54=;;qa7WΖ*W]JFgƥ$}ej8rk}-Ֆ^/+\i`e\EuH[wflZudr=P:vl`Eukˍ43##-�<?`,5p]*&G?3G cJJkrZ) Vwc$AO>Y:F u0yq-�+@@@GW&Q61$|(NeRfq<UsTxJ@_dbnin8?=JCQ-"�Ն<%"ɶs̘�p=ggmʬvr K\T8,6sen _A |aiGiMku]<+e _,O0_vtk0\`rU6:<Cb bK%9ڥIloC!#qJѓaR ^4qVQ wv!) <UWvڽ%2vƍsN[nҊn+*LԖX}{d}yht>?y˷d%= Gk#+4o+<^i`eU*ZFl"\ B,;B5дm9IaB9_6`yױ%^9?iz*eP.K_XզF0c3MjՐC/\?E*@a =5Xd@ ):@ȶSzyӎiZC((S5jƜd2vnCAAZ[ѥqJ^V`G|%zʤL[p 5ɬ _f,,swyhY,dB#ǐW7:+ʍ; aqwj-;G #Ohrרl%#<OR!k N*-Lףӯ%u7ґbv828J8�+uH<@Ү2.\!S|E9ܒqi8S!?'M]8kkt41[2dd7ڴ#Agg"Fx6{ ]LUW M`{롥$dZ%fC#ǿ)klA@Srghu#6]]698I*-xPՆLM+%KsLbrQ9.ͪa&qz<go;ζX;k\J!UF㜡;Q_bYcAsxMZm=x+gZ)s,>6rN3mӝ Xqd]BΏv�Vֿ%AUXKugRen']J"Z7 Lr?$6^|s6.]d.5Tabޠ,@WVOֹaa%E*2‚{p`wmm }p׍7f Vd< CΓ%atN *M#(D>  vWo:XMf-CL;�+sT`HIY2 u+`e#ߟ-ߢ!~I4t՞]X S+6Ow\  m̄l&+ מ#]d&FFEDlʜkU/9zZ6p3hW^`Ÿ$XlOaF9LǷ̝3Җ[ic0Xq/lLxtg' VشcEitJ @= Rv갭]dZ%2V675 f^&lsV_698I*-x4R$J v*avD66gtZNJzv킎bTN;lX-\G qVXH$rYkVuԳoy�+red7(aX!Ĝpq)^�4pv\.oO-<i :rv *[^ vJtu}u C(zlԷ>[BrVoKm!r,~*W&ӄ]+D v: rVlaQŭA | .9@Ȣ{-YTesZ7Xf&`ֲUbEea VhۏZVL�+S% ʴk+ ᖲ@R*Fa1zWC*avi&FTU#pPRUM%ǣ(ņxJy8;Ȯ}gg=Q #L&Bۉa7brxlxL冱t/! cN_ aGzW<}Vnɍkύ_#4q$ڿ{5繭 DeƎ8"#-yQR! Oyv>b6ۮ$ fގ҂=s/6^>�{]{XɊ;X)XC5\`J*<>=`p<ir}ė؎q(vD$uN:szd7X͟%JZb1n(u̴fm#I<++9`K? c,YRp�'FZ]XC4}T]%:ub#v Izϛ_JpRazDs=yG{qV ؽQ6ަ7($ZI+-X^zZ\NV걂EאYŅ!jQ!}@u׏J;�++8qX.++,HN3 &EzDZm7"Pem#⽷&c9ƟꨆQ@%†]OW�xﻎ5iy0"a)2,臹VRq9U-Xl7jYXwLz<j}L[ʷ74co [ˏB.$pYt5ZnX+|GvEHȖi5^]MnϞC;^YўR ^)}W^ѕJ5 ,:} ( \nm䤵~w-/TO cSD0Ay(w]5ckύ<Ng!ؿS!p/ʞes;Y9IEb{r_ʌ$"řҨ`򰘚^3"]%r'}il}t ߄_�H^i OA,Xy>qL9;ƅSQTnLd.;+㗰p'NJxV V(#Y,GGFڒ,[h74FZ,Xqb[ȑNJKWNݜz:9ga6ײ2Ge[Rptͨ:f|8Ӟ)E8ϲ`X<Vn,;ʬK&SCt_rd[2iU~W?+KT?X:'2.Iy\GkJ"|cbcuxw428+Xr\Ul7\U4-�Ĭ+ ?rhF9\!} [6ŋb0 u=_b3^d YGr?c2 y:+"tW hZMq }|P:LYkVHӟ1:Xa6>6["\\+(&T|X�VN}F,QX100~`]G:KG#q@#8AO ?d4}x^QlV(G$Inv*8qr]z}n>n9~m]U18"65dI5H*OY$dL DD be0mv1>/�X[%+؛o{nr:>fwscwys+}иp`uۺqHLVGN*0UkL;my~a;o:J8}GF8턌VowW<G9+CUJ(2QFށ(]b!!9q�+؍ #,࣫cץRgf;UiݸVv[VFU-=Z䎖*<shjqqFج@v'G SsS7eɰΆ1oiK ^i`eʹ$(!n>Vgnd_.Wُ_F+ҤUU'7.Yr*X"UtwRe\J>n~7Ɇ}+@IV#.l\ΥT% ||(COr}j[L&Eq?+˂|5zPinPgHfhNL/sG5ZXsS3 KssS2=83ޒqnn~zah&,.lnmmMP;I4)wNv`pFඞg`B806p,;YgFm~;;I8d@sL e81 vXµ"Mk ØyW�k[6~<Mi򍎋7)XTƉLaܱjm .yXdTTTl|bV#�^�HǮ')X1-l!dT_#7qQcKv"w2X<SfO Fo>v5n#Q<+*Ha㳊Җ(tR6C1aStU6r8ICi;1�nXnȲug;W|{J'v?fٻcPb}VʶJ?- Zp=SD'bEgoI['j4n'ut*sǧVܭ". ÈPܚ]l767G|VVX?B.i5kR}P\(&rFmV,מB$TE+ VfՄc#-B,Yf2ynr0 CULYUp V,+cQ+ P(T_!hcSǏV_R|/{>VP|ԗWM5㚱iȄ0=>O4jȄvpl_7`a+`[&8j<r4dE*0 [Q뢬**뭢qQO" 1Tnv+jko(`i*r'QS!zu><.걗bimxAxi{m1u\JsdIlq aOnEFRyB*&[u�a?57֦;-~|B`h]{Ds=h`�za<V{k>ɑ!oL7023٧nWuM5׿QVW[QwVeKeen߮n}vmC斆wzzںꎡaHذV;0??M"Xi*$G F( -HW]yJRv[E[$d0b*"22@!$9c {rJn7RmӶwrXc29C y$ُ\]Jdˌ!]<m!&Kk׮~qc#0a;fi&_]<1 r:O[QAmL(* DbJ�`hev#^G�y �+_aOtw5E)dbD$bD<\wMxغ  7b,Wȃ\atw yD/|n[#9].x#ow#&5Oݹ�;`!w2>uWt0G\&!|ewbPL/ȹ8bdNkM<1 'b0 c2pqZIMESx7 j FY(5r-aǘG`es>n84"׍^FRb2bZiB]b#"<7�Xz:+wwygJ^d �+@@@�|u0g  y0ă9n(G .F9,l$`q!D$񅈄Ńhc.,DnXU&tw>x-sˑdC +�X`+ V rKݸ6b&KlF @'L�E&A^ lu  v.!K**%.G߹Sg$p1�⫦}il g^` P+ׯ 0k `o $IB`:!W,lEƀ K߱-1" r�XyѥY SUւ�` <X"X*}R%b+(, PH0[6,B.'P%z%B/0.u�� �+@@@@/X0Lu7R})tGfE, B0Vg٢&/]K"\!s|qdl7\`h O O+[@&xKn\%k l&^,A`Ub:a.E &fa6;LyYŃ"wR_=0_pru` oLӔ$EPc|ݸqJG129;Jn躻E.+} TM$x` �V�Xz>ʐtd2ܪ+q@ s!lly(p 6>,J]0!la3SQpZaSג=p?a8ulo2i w]+Z};ձfX\ݢml%oUִiVV Wv1 #h* �+@@@@�^{d^$GcӋ.zđM|&LLbУk- tMyyW,QғΖ 4LQxZJIR$ DD6,XQ%&*"c8=2XUȥ%G[ɡ�[ТS`Et8}KPz+7t+bW93V!xxGkJpK(x 9]`?g ϫ*fGiaG ծ(9IkP6}ꢶ>ʕ .n1՝v ʪK@@@@@��a oi*pP1.rVI_ pctB>C9<A ĺˏ+ɡmq wQ!W裮aξm&d3\+^^R,.p`1ZAw7n<yg֑Eq*.,%1 $XiJPaIL)y nx"P 8TӃWe+PϠAݸat>3B+aۇqn8+oE]?WIh/YiEmyt F[FpKVm70jAL++ �V�X` ' VLqI_lam,l^R??u!oCj rfчV! >ݲ7g"q=d1G{X"„Ԯ+2CBPc-=UC˭h?VKhHx^sjG]c0h"ܣE7 (qlNJ٤+`z$bVLbr%aohEm2=G‚T No$w`e% �+@@@@@�� +oW:[>/.ط[iQ1.L y\OtKs3+{�!@C;/_؛σs6^-䰸iI1Xюu>+m XLJsHTR6+Xh<xw186Uq\vJ0�v&NJ@װ))g_5qW wCq~:X<C8s쀕a%vJW zuM v$9{1VO�+�� +tS+ <%16,/g{uΚ.QGɅyMnv!XfSF8D mKÇ9ޛ$C|d"Dνxz&FiĻi cm^}w`'=Rz#lES(&p51wQ@ilEBΌ3i^~PXX&sv)!G% =x!aI0y=)ylZ%IQzUۦ*Nۋ`)4=@&pt uW(++* �VV VFj#x&*"z Z¢Lj:Q`0,D7 /b66xPfS+e/audv1,{g?O3?҅pܝ) zeUlXvgEwdsak7)Y�'>4e&Hl&J`x#0#R˄k{<}>%GC6=\O%E�~�^6xp[v6O̭1B}kPa8"OJvaan]L&D҇:ɵ?|'!_7U"L6)0򝉧os۸4m+=82-س}wfrdՔӨ.}n:9q3DG8n(D"lX8B\tl|I=1n)…[b#Q iwVtC*]$%v_ΧJ:7KNV-)ܤP(whl+xwz\{8g>Iefb`o :^`Sñt_XBBBfAВw $+r/ybNmrR)f$`OjlSmEm\B"%I^k7u'vG%&%&XYI�jUاGKUB>`;->'A1$Wݍ@u~[י7c. uOh>/jc:LHȓˢT}QϦ^c2a\&d`e-&=b%,oh]͕:KJSZtrަ 8!838fk:)P٢Wk5=mUjHz<5uPs=P6Vwk=W9l?07>[zf3 y:c6>|[Xi.T?5=KKK3�G:dtf̯SKnS5@BcsKOL3rj)n\tv}&XnibbĘp? 092.EnSBυG9<˰,X!;2<C42nXAW H?.T@�ؑŽk2lKBZ]L 1iٰ8D|ܙ"C)̫rS CPVzb꿝Fl[XK>b\bޑ,|K�qOMPqaf|C:Ԟ 8?)āʈTVvi;•bhFu|0!A~pB6պƌIr<*8W!oMvn8ʘ%;1TBX"dF͘qKSa3P+vBzxrf#XzErT/JdtK]o>QT˰h=azVEL,~qϪ0kS,_2Zg)L&GLx\n`:=3vn9M#:x˜|�Vƹ4$l Q/Ԏ3M%)[OPuH=@4dDq;՘&xzz&6OY_wqi'l[#Zz2:,,_!J͒;giZ #W3dk6}(eH=gg\J~>>"G7T[lɾP%2vߖߛsMc(aG@x\JmGНz/#X1`gL3-M5;RcsR f=Wv:kM; V0^wW}jr�+$nhHc¸{ 9 a !ൡ13tL +i BFתK.%!E>4|r_<,H&-LlD<YJ6^Oz]Yj}.Pmp k>[: 327ߓT8+Cm'>Y>z-)RTQ ] ކXwؽ =c&ɬ2.;qo]J"Z7 Lr?CMWs@e* z]Ld`^/'W!ɒwrGc7 U߃{kkXqtqDXGZEW +b28_ܼ63!OcAo~ASY++Ϩ+c{$@81!`6h.-l+)G$X9l+q\h0]'rBC+:͎o ވ{4sHƁ�FJD".}oig/asgf X+m<_76qi8S!L-Ɔ/6g[K]F;,9Εx@413^;ɔ-Fg(:<]Fl[ʹ41[2dd7R$Ow<@_K�[_kk|qƳ lT<wVXU' Xq2K2Lziݹо /9X婖[W:kM^Yp]O{Mu[35&2Ps aƒYrG XD[b7G uK쯾 g Vڻ J>ƌ5xf~!ៅ$۱i9n֌'a[|{^̩'LjEr~vJtylԟ L|LH3X<b)`vRtE˭(sWF.q_+f0K+W7\`¤ fLH!P[ì0rKYGe{m_f8%AU]!UU]j?Q3QkVZ V'U@ l$-np^KǕeXY>`rv *'ӥݘ̈́Q:fQQA)5$ ~wWꞴ$AzF s^4b/ &#dISI2nU3Ŋgڂf TVR`m>w{-ř6(5%H]+,f,U)!Gyʌ؆1͂yF=s_bᶎNqb3ԟ=ɂ/#<;,{I} &ܸlh~T7b[`6W]ʲyE`e�+ӭ-7 eyhnmYܹmy0n\6.ild,?[_}h~FxCq!H%6,!6<)~`wuY n\Xȅ4& g V DO4`~|y{ZB]Z} *&>+Hw}'5VaM"wwX,DX7`k ۊBe[<553>Ծވh5v ~<D˭(أـuD! [LZm7"PV,rR4vYEOp[ "Vǟ"+Bo?93QkVZ +_UxﻮVHP]랓h&>sr%7G5ZJ=Vt]K F!/> |@P?ڎ](B`gWҨ+uCɁXyߟd ూ=Vԧ`%gd0f084q>b#=<Xeɒ]+Lf9t߻`0<Л;G M9 g#TSzd7=ىX5{,4kzG鉸P_":_�Ua3vwLޟyޜ^7b[`6WTBWʲyEcLm=VE.Qvέ+]-Cݵ#uc MX딡ma״1a[i~q~ֹK'w۝tn\hs_ZRl\dh@BZ] GP(gֺQ>JO `  3+j?R7RmRDV%P% Vow{WmCnD"V{J s`qrZu+/#m.15l{ 9XYe,N1ep>)7]0YnzyHr%mOwR4v{0!Q$ T읇[S׀JE !B"MEbm-ZX{o Hw ,$4qw>3;d^Μ6VȠӿXѸQߣ3?_Ӿ&#Vh"-oϐɴ lf#Ւ<U'ݝbem_+-YOv$5ʳ9V;U-fgZƢf\Vȗ) bE1V_"Y\ )j] +),ju㈕Kd ӘG+))³Q*IQŸP wK<7F?=2<iFģ mA'ti Lj+Idf؍H@Ƨ;'rhYcEͤLꨵTmX{A'#V]I o)o^=<v`뙣÷<g.T=xқWjhyf;ERَ[A(_>ܨ{˿ܽaiNjNfYs3ғqQ’K0/-J;w|[ғO)&#0+��bE.kePRv].I'#d4=ɡ,Q(/|t5WT5`"'v)*g4Y!|Y&6<_zWqHhܚʱǣ@R?Y++qڃpcEdXV2b8u|C G\r 6~?5/Ј>ΥѲyI4GTtAɫ~6NChm|]?}m{:{6cfɈq>/|xOgk\(<+(hvSo;R'1sjhnÐHQҦW%H۷_klmi|xx�*1OZ/s,y%|2iC/m%kF=+NX۳F-5kD숂+RnC VFj+ηsJoFV%6:zĤ$ű(vFENo}j}e)ܸ-HǫF{JE߭~ Kc%A+G}7fmVϱR$`&eHaq@;_6Z4K$Z9?K9'eIXpA'+/87)׶bkzGn>ux]?\8}cU|'^wQs0VEfS*)U_ܼtġ;6mX|}e9ĸKݻ~.Jݰz wl)޽eMX+5!zp55rybe"y;TT Ava$DɦV_Bi � V+ $TFtbux,o.e F#NUo+I]S|P=b wHˮLJGk흢L1`y%T?[j,FIRSQuVW$t[~*'kJbe=h>{yITkd-/qJ˧$VF;Ua&NKm/϶s0YQLլ@7x-'YL&Ԑ}wJ^y/jkc3fo|MレXyw2zӤ-b%)N8he"l؅C<a wg ̢2ֶrr>N"Qi.3Xɥ'K tpUqMCfڬ/Mpn_Td7w4A&x᱅>mU߷.Oa"<Q \_[$w3kF+ l6;&rlwsCogQ=*WE sOX|NBɈJ)xe ~߽z :-Jg՘IY$7 #((=k[q>+)b!UR+tN2v{d%17NBhS+oIF"˃Wvl\ypƣe[ttߖ- xw<A>5JߠTv ?SU*: Ҋ /N eKV-}#;'_8orKݒ0c䵭riM(V0`U5ʷ0\=nQOr.gN^kl��?#VSe-tMLp'ܨ��{ X&`T Kb=sٻm]%id9sÅ3nT{׷[~l{6R!UW zxQ*&ƺEKSc"|Nan?/I["Z=ݷa<ffj-fyG͔J`Vrb\t]kkݽY6o84 d‹rG 㳯նpAgF]RǯXE1'k}ʈ*_.bziܗj늌Pl79�� |9?ҘGaZ>�X/r򹝛֮)M[%JlXl~uē{*yy~gΪ޿CoՊP :+B:4|#)0^RBLQA-kb#r2wo_nU^"fůoW*ryT 'v8[Vo<$?+dŖ|".m2# I8>_`)U^7hyly(#E&oy8v^:@/%$R9nXq_k[e㫣2O� VX,':^_-P.fr7>�� V�pAA| s٢eKsRrbғ ,|['ܿٵw^]ozy7}_(mJTlW(ϟ^]&ٶiufr|fdgW޺؈¼tiӳW ˔ʮyTJe-Hd%*V(ll$|s~*+i] {0{}1T$__(V^]V4-ѩO[2Gj+'5#M]7�b姈X���@X��ϋy6Or22RHXPaͲ#{K/9xTգ?߽Z͓^\l%SU7 VEN$ǒt6<@Yizr|ɪ[nTgtq4m=)::*V֏a{jڬ4Hl;&=~XP( eRzW4ֺI$VY^;[ Ċ}HT,i+@X���@X��OV,b˙3Rӓ㢄QP("kdUV8nO,JkmyO~kT JChRS*?">?_:{hS=vt)U*><@_WQ{Df|X\2XI!3/eGETr2<A)'o\ZIJ˹̊7+-ɔFQ@X���@X��Ojsv`^fr^VX$3So(.8ߏu|t5=k9՗5?kV*d \P* tT*?( 4tETŝǧܽuy[ׯ|RQNOMXy?m=3$6҆竣آ7&)VZ SCm seKysO"Gr(KK4@".7MR {nBlmxsMX���X�� ԣT~>o[frBfZb\T$.:35!/+m͊V^rs]8ҹݗK‘3N<t3;}#:|'<y�y<kCQiƒ[֯^,㢄qQ2voܷgڢϟZOw V:ZkeY +9Ш6+ЄCʷǤ.N)>Z8A Z+IY^vz6RH ۟h:JVm0 !ky}U@,4<nUi9�@LIW���05b~��0ۑdmmmMMM/_|72,Vtf릵vnٵtuׯ.YrիZzeκE䔬߰`ƕ۷ޱq߾S'=}ys7n}+]9w.?|xIzoll|%we g[Q?X�� ���� ��Xwk{G{ڍ-Cχ*/`@bY1ۃU I@@At%rE-OXN,'l ހ~yG+��@���� V@���ѮTb&+UW(0Q9ԤxTT+J{[@CAܞ e\|ɮ"c s(Gt .V="wX�� ����b ��+V/X HAV**'Jeb)ף VQ@تT)[G,wsDG � �� V����+ V���fXyф- -m:w;:%kyP@X幬\Z%oh!}!{Q#xюS)}ىu?Gtȑ] }K\B.{!��@���� V@���..�� V����+ V���fX������� V~("5D"MM$ey-rL8y{R;C1(T *pGߵ%߉<ƊNUgLeDK[_#=Q} V@���b ����bWnmMΞARs3GOpJ&vbECJ[^GG]v+Ϝbe;;{MNoi퓻䲶gf]J({0{4 ��������2+Jӛ3м7e3%V?ǤP /)Ͼ6!kں"#d2iod&Vnn/ 1tVhTq٥ RsciRfRUD(vX-9(b0Ј+[Xt%ɨlAuVgI*NXM#I[;zfvLbB0qT *k ,/?-8]תcZ߿@޻$(21ۖhgraTz'X������� V~"T64;#b%pF-z".mb쑄$oZ*7_yj/jKtݯly(#E&oyǚXxy6JՒSzf,mwoxE6IsɭhZVo<$?+dŖLi2|d7g(jg]R+s Vdqv*yR239 V���@�����D<:8)̔XG北ʲGuxz?/H@wLn(ͼpѺ췥RaȔ3&)V璩Qb<zF`ֺ3! OKb =zvNi(V(L.㲨 ~ U9{㋕%׫GLO%<(239I) V���@�����A]aWfPH?:X b34J{^ Q"o\B"QjX2m+ɐC1/ZJUO6b\26v})qL*#.mٹGQ *D4r̾96vXy x74M 9Rm2X)~�3شBxGɟION |Q�0~SX���@XY$2ᠳ!U$VΧ\zde,n}8Z_M4ĊM y鯷n/_Ԟ$Sy*N$sle\@>sAX9I"3kTUטXv~4_ 43@X( =\],U5rȤ"V&&')VV8; ��������#f5ˎӹZā|C G\r K,VZ SC#m biRS~3@mͯ*oZ@Gf:+?}HUhpu3r'ɖgeriQl+7M;J= V&yȯ}q{5!o9VxKɰmv$ӹsLLNMLN���b����@P-PO٩u'ƻVm@b,>`0CV^Pm13sN'FJR^M1TzXd\AɮZδԞ\,f1,+J}pg[ ɂYjeul~^ɁF9q"V;}wL ͋μoImRseI0:NuuɌ8!A]y<nꙜX b��� ����X �RF9� ����������Y? |��b���/A+��bbs q _6/('3_8/ |O'm;ĝw%x. X\GdYq@bGgŃ,4{dA \t^r]F������A���urZ38g.XLx!6fHWl`J14v6r;LH&HّhL6E Tsg#ędlDp p2 0E#1V@WAV֡,+��X���K ��+<'BWB3vz!Yi2w-0cbB1u$:FȣC!Rp$ŕbdldfhՂ?73B>S0v1 �������A���&/t']"" a,WO Wų[ĵqP T1 G'H4`# c@SRQw+x ]1cU5&vAAfAvD&��@����%b��`ֈR"GB5kƃecp{-h&t3/VLřխ"]VP]obhU|ʭ.u+H!6&4D�������gXK�lG_iNJ AD]fGs vYbͷ04ϴr[\*T3'3ƪ �S;s�3lAŊ!.Vpp. dKSIE(:7;9àݧn (KPB'˞&q뭵.?81:J{)#}|P&?ipZ9ZV � ���@X��b麐c<Cm1M= t g ̙lD2v: m);M탌탌6~#KE,>[} -}̸#VKBD"NJ$bĭOPwzʝ}ظ'MՅm(q==ͯo%27{CŽ.ys8nk$3X� ���@X��b% b҇]bjm,Hٝn0uIj&v~RA* ]cױ?6~ƸR̰SN<}Br6_H$iOz5wšD܏i~|aUvrF"^deݳl-ƽ' xl Dg/{�I�7q.(>P{R0UȟcGi<n%)|FE`a8k ~'� V����b ��+41+t ]5w-@U,=ئ4cWC>H4p22Ԣ* kl0bo|-mL,} -} ,}} jzאO_~J"Dݭexʞn -keɶ)W_^Z*NޣǷ.@ʜNrek=~pYXU[vn;zT/Soiۣzo%xwDS/ t@*|<{FV~׶^[=8OD^�?����+ V���X u\1,C=Xly 3WytRM](&6zǪ 78R 5" �+G+?#v<u|b:BVA]+gl j^>l_U(>=c:ě֮.Y |{` `?r^ yk{ODK/'ׅKig5qTW+?=[Q+;cB[U5];^mՃr=q>&����X��} %;хbL6Q㽐Dy E\kw;{؍n,n4SfU 1ok<b`V E5GMyA+h߈5Qʛ]b<P;+4+TVBg>xG] i1H/C `יk!x d_5nHvlLM7]dFBҮ8 y[rYލ ;vʨzp:2BcX~����+���W C} w+̋B1uL )N$c}!Xߙ4@J}-F#*=W<e8V 7i㋕802M4̉Ԅ<9I9e J`{* VA^z깘u]K+}5"wJGq<sY/jEtʆ#TRѶ^[={cX~����H<L+@[v0C1E5[o3W6|zֆ22,.ҷ5QN휥20_g&ؑ@|X`:cXR}.V!d@ 9V 4]mC}C0Zp"9F@d#??+ {\bEV, "Vy&9LL&+p~{ VӧxIɮCN/۾1],؇%dG<tOxwk,+ иǣ^ҸQ;Iqik+ry/}³hO- izX.ȂJ]X���XĊKU#mL;|fppɾ5 Colo;zZqѧ5[T;gXnyŮd -kprq T}줣~lbC'ӭYtLlkw#bllM L1t85D#l& t U|ӱ3e :VѰ"Y8ꄳ t7\(s($O-:oidΉKų8'HC(ܰK|[bLRьXXvvXӬ-c_ҸGusDpq"88|uۘchܒG>׏Sz>sku.@X���@\b%H v{Da (z*7-%!6ɾ(>Ig6oz S /Rh/ө44zR[e'EGY{HӘ܋78٣diLb #""RV>ë*y~cERަ>bd74I2vN+VT]uz}6%sL6WX7,g{c~l>l(JΩq in?7os޻܌XQj#ik燼3%VH1=ȱ}4tȏ؃m'tp"[ y KtX68șlbd,K|@w+V<XQŪ*zfxڄbe6e2u3{F� ���� >S#E i;N戕Qr&XƖv -__{Mr!#Svՠ#-X3M[B?-C9ͽ:KڍB<?K*{+7{^yu;V(5EDEZ?)/ WTJo:t7 s/LOhh*be\ێZ#d&nTu՗Dťq\QI)S!}q ;zX]^%+VϔX!c<%+jhؓgafB5txl1fhF?=' >_!>�˴g[F"S,TnEU@WC?XA??;m�b����skןW7HKXԴgV|^N˞5IAdܖWxy=]Wǻtʚ)C_x}c{˫'~NCvIjJT郼IOex[zU.<tWLUŔvN+V(>¦27=HdFxMFoș1X>_@#}K0V|mz~K<c+糌x6xO?<W|<؉oD2;X8YXdpjdbR j drb2?46C&h� ����O=+Pl7f nUcR}HvJ@ (Q+6ĈJ^Ή^ Wt툪QeUbFޢ}ڲmbESU$-B 6];8 2gXx|:>~M\*3IH&4Q73d&9%+VϔX JE 9Vdc[dǰXĵa%F8t6.`C`-Dc}|2 l> ] d3|e+jnXLpGX詹T'c��+ V����+ V&@8Y2bE7+̹9sBaݮ|2J%Vj73C^M嗼sMRX+U+5G'+HϟL}h|$+be9<O"3;FlVXQ"4bLXIeQO`(<'z ~RH'4E|%+VVϔXY`YgZ3$'r̋gJ5q6p!. ^5L1t"3.: l@:x|e`cEAQz^=g/Ȃ,}t}FF, �� V����2u}g=jVV]bi|./5MRH/uL Ç{uNbRUbe_J#i>p锂'I o]:t_\RKcQ쌊 R׶xnRhKzߪ|j* rm䝗 )?6q65!g4[[(GrK{ۓ$rv"~r/8bE{=?%)A]J"g,g:S mtz c#Q߉dH4t֛4vZα @gVӵ з D#VHO\kgoc],8EkKVpbcc,>JUθبCt)+N!ZtH$~cq(X,>O[Sz(~[M ������=oyVR(A"ue_-g$S脢҃Zk{"#3.xf׈BS/ןNE*BN>,Hb09hܼMWplvLn8U ߷.Oa2,~Tº=9j3vNK({;& JO9F_w^n%K"b$yo-be9 &#*Aۗ*x MC B-64#7<ȉl`kh`嫃hN$?CCۀalQli+_] o]3/d1k7ׂ0k33G[[K_uݠ1%S-NdjϪoowz]ŊieOͻ}[i9��b����@�ߝ{8?20[ =;Εfh4gQ'Ϛj(&0͝nJ5E�X|> T9aSa.Z #k_#Ko} o]stcckgc?39^:V>֞^a/V>֯~˟KM-'YYYv+:)LErwvoLINlj7ƽGӝiq1*1/-M=߾9/1Vl$8bޢX~Yj*DqtZ.i@Koܘ 2[z~+v"%_ݘK]} mH JVX*1gyzDD(IH[Y)�+�����bJ;hLOe|F8' VX2}-YIo':X䎥\r81MFvAzx[k?teleC,PE.do`E@YKVť.^iߊ {߰;!}|ڝ٬X_8(1/,q`ۑD|GgļS*nУS(:Dbyp 'pbE暮O8ت^]RZq6:VȂR=}(VH$ұ V7 YwcS6~ YʢpEI=dSRѷUD'R+f[Pkb=<͍Q;/k'C'w�� ����X"CrX!EaO+O # YtsPrwM4iJ3GჃ<XDc`#l|:J!aӳ 075 0DXꡓ({ٖfGN/;pQ?nڼ9)baL6SFK >|fۄ9Vj.\ NJNr*F]nߖ8+++%v^V/Xp 9#xu݊n.;zAUߤ|i+z ^pq)W k΋Lz+GQ }C"*~0z#6eu]"VFwoބbE4K&S$.�+�����b��`j!;ԁ(MJ5Yĵq; 8^6dc`�Ǒh'u"s*ck̬ʼnYEێ:tfg#<=!?l ZžOuY_=Y:_5pXQ5nᾣXrʉZb&.s<_nU)IV|aE4aiŊ1#j+%_y+,=+#;TmV 銨ڿuRO9 �X����+���?XfH1|~Bg_Bލf:iH`3H؟+ } # '1>[!Mgkolhm|-}t)Z !1?<2 iT;ߐɴd.ݴ.cIaeAWZA lm_)) XܭY{&ub}&+tg8fSP)hFPί{kpQ{cĊƨaw{y*�+�����b��`V/=aޝnJyF!e_ ؋g'tt8ȕf Ե׵MVVV:ȫzHْNZ,<u)#آG'+SǾzecVDlBJfuY-/1hͪK59/% jkE[xW'Hű?'"73цD1>bq(>62`MVƸի[Qt̔D/\9+~r2ؘ5ez�� ����X��bPk'trlF^<;JE\%1. S }9Tc|(Zb XenU,|~A^E o]K}ܪ`>/5Yѷ6gƒ'?'d9,� ����ʿ/V:���f92˗?q4JD t Ml8 pv.Xb<fHh?]:ok� = ]W]C,tE�(#*abgI0`X�� ����_ V���fXY3GN\4-" ,#"\C=C H~:$}g Ԋok77]'2b; iѷѳ"Xx5c7âz4eƐ@���b���/A+���Fq]iq^s+xy0GW<?!.)v?>:H10׆gCбյ&XX̵GY@VS`CKs_̼y`VzA͵E^5`L" �� V@���� V@���WĊ;,P8/l1 p`%xv6 96d3`EE{g} Oghg=);8E H zg{YW̽Â<̼~1/Ât`+��X���K ��+xO3yeDp(L j`_ ԉdL6vZ; msumslzS`C�=;?=k?4D.�ϱɔ_fsͽͼ~Qm1�ߔ/^ܵyddK+����+���X'H1t/;1ȇJ8-`,`[y](Av~@Y4[Ķt0׳u 4tԳw% +F [?]_kdѱյc3M=̼g3tÌ8b`/Y̕ +�~ߔg"?+_���X��JD6#(-(j>75&t fxlɾ/7<+飏<S =;?] 7V !=l<g.t|Yy _,~cǘ O} � ����b+/*DžS$W*5 ߇áox~z5$LšƮoz]JcgL1+y/k=�d*#Z nA|X!,"ŠS)#$CM YIE\E!VXw"қgB2r0t!9εw `9YW.D-6(!4h{R@˾W̽ѡ@g^EOf(Xq$f2\~uJ���b����@b.*ҽ7naP`Ik%Vn9y ʿ%V$+xkӻӛ%dZx}|2M>3mv]= JHr#~QP 5փ-E2 =Cl](n)HOϝjN5r!;8]2s FG�Q v~ < nU@xdQEfgŒ'/Vz:/R1oe_rQbE��X����+?X) c&~:꿫K#0>Zmpj늌Pߺiod׆SxלHz[Xt%ɨliRsciRfR+qG7d/ Ko==PA$sZwou\'NXM2//?-8]תcZ߿@޻$(21ۖ+܁Q V JQY6-n|9!ևgˆXBuP3LN馾|[;؝jF1гus%#O@�<zE)Od``닔uA@ lfXٖV]vJ_ -O}CĊ ������� V~4"֐HǶ'FtV|z7Ip#?x(5Zp_9mLx|utX J}Gg&)rLozu_ղ塌K%V5@ێ beLS-E.0!xI&oVɊ-:Zl :XaEaL+k+/d@mbE|?X$= YVȝ`҃i,VthhЅ?nF1.`:S|uQL1,aY|+zv+,\K4S)ח-MO`QWތXѶ�� V�����ʏ&VMwD"3lfx'5h+kGCe%a $fk*mG"3T! ʲGuxzH=gz-FqqG VtP\eQ=F.V:|!*УUW6;킎#V\VB>|yXtL&V)haJO`2f,T1P˷G3O7v&;SAvNv=Tu б%̵&ӱճ!łVd+VsT >DHGwbGΉ'{XѸ�� V�����ʏ&VdmDbFśa ϑն|ʱ.%$Uz*_hH UuTVj='8 и#+SwB: Mjg~j=o-a~k㈕_/JV]Qbew6`LP ]xQTÅdJ[F6d[//`XQ=ȫŶr# :vܪڻ lѩ1AhZ][|cReXi|uq) x~jN+6��� ����XsUb=O_M4N @rL"q8 &V@L/RV=bEuµ]D&@P?^ 9dM+ӾjgJbNH|rCd%~?[)\GO3Y@7w]IJX4E4@[S-,bEyDXzvCG1ϵNzܰ 6|VR b٢1Cm��������iLaV:7; )b8cMhjֆ7/ܜXA)戊W7#ȫ~3*NJ\(<+(X�mbe_8+3&+h>ClL.mx:-Z{c vA$ۓ !˱[򨶵CvaG21ʴ ŊzPO(VP;b%zdy)ڍ˷r&xxq}x^l+ C@} y0�=[|s 0%uA6#̵#xzYm}GG5w+#0)��7%����AhB.=YZƦ茸7޶|N6O!ky}U`0qJ˧%V:ڛm)H籐jXQL U_O,NK/;@ZmGnyJGk흢L1zjOȭ\Y'f@]r2#Nf%yWF0OBLXZ JP[)"MͣI!)^˅,+7 86adloF:#ͧu%8 + G4V[Ў`ghgm`gKUT &Vt9d+��X���K �rl+9 O;bݽd# y3))ʙkha=bhd`N6F x;\[]<k[__<Je8NJW b��+����| X�++`>ċmIa `{湓M ^Ss/Q)!;]?yds`#d[/th`c< \+��X���K �XfX<qC$,+O'ӂ=ϓajf4^H3G4^@58#{-݉FDc'?=G_�a/h;_}" A-̱F4:z_++��X���K ��+ /RGÒ(Q̈4 %(r19"*LFgDKBcdfx*-v ]I')drP^B0/!' K"RK$ GqB|/>8TLD| eL+��X���K ��+A��+����| X��b��� ����X��+��oJ+����| b.��@���)O����_ V���& �� ����_ V��� ��7%����A���LM�� ����b ������+�����b��� ��������߯��X�� V�����ʏ)V8Q *3qU'(k_ť<MbR jTO_"m~oUm3W6|PfO_:V(]oeGGTfLJU ~&jy ��@X���@XAQoXnƧӮj^¤n'ş^. O|S}T$}.}oӊFN?)V u+v%Sh]]9i .JhO%V��X���@X>PH+R> #mϠϾU9L&+,[p74A]ރ?7ose\zSi) o8byך[e'EGV]>+J-|${ʊszOkɾ(>Ig6C%|6c {4I&1)+)'j׌Syk)Qt =>{cs@EF~쑪Mzjv3']2];0^g3 E94 3%v{hkgb?Ç@��A=���X2voZI ?mw 2Wt*K 7c@Ct|KڍE<?K*WƎ[b5#t9ޕ"t+?o^׿,m授NU"VQګx2JWy̚C}{%<^z춊} {T>~`_3B?QXI޻~a^Lt BM "¡zrvϳP PyY1`;=g<.$̬pݽ7x;ɝ݉xzݓnO)j}a>B %Vw]zmĊ|ѾP *ߟB�X9~,m$'����G/VڟDQ;GVIO%HQ ȇ R}`$^b%De{ymFJKR';MaԉZݏ<,I!#?6鴇;{2kLX Ѽ;kyuU}:Ę+$usLAeʳGBkQ<7Փl>Sf!WDsF%VwʋՔӭAX�}+ׯ_HN+����]4[7A[~$h46mveU-*Kx{1 HiW`{-/_VҪbkTgZ-UxWT*D:F- ,K1͝RbB(da|ƉG]fui+yNkUxݕDIU%$V+6b*&и†k_GӃVYA#WD>6bE%Vw4\zmĊ|*V V@���b����@|bp+oQ-k>l8'^tRȒuRx,Lvr5b%IY"{Z zh+񧪱gt3 {YI*=i+agtFGiOEKМY]` } e+$ӽ֔>bg_{bEa4AD+b 7K*Z)[X�������򡊕moQ<E_yye4~UlþPFĶ[XcxMCR;y^ͳfQ3O7^?>>H~8G`zX_uhWGMW΢<n:EdbR7 #{b:nK i/;+2kl[ 5h6mx- X_H ˿M7U 7=G-]׆\9V40]]buWAXQ_N7A1BI$H~tif+zB$b<{8O Y sV[挴 u?Vʙu{(oƟؕYxI P|wH$P%0H^^$z5.;'2SLXv ����X')AfeF èd2J!8'Y$ MsZ+H楂�G4, CX{pFH�L H˩mSV V[Ģ}C~K?6d܎~"ƇQ)*ʍH>9Hef IYtļ.6Xyv }7fPJWϙriaꮂKMqLm(aQ!XlT#m𰰰#e5SNս5X1 3cx/HP%bORfK7[a(e~7E"x.'mӗoVTW9, yDz[§3oDpiA NkN8,;'A^TH%y?Jyyyqq1����GT+4GODݢV�.әH[Γ~n5rt1W9B:+5VH'{ laHÓH K\p#sM/B d+;6ݿE|/IN"HOpDmgR+v_3,;c?aa L-~8/vAqD!e\ z܃K_,pG3C$0:Vv U]W]9e2J.>4hԘ?R''%kDMfu% Cݍ2}0vNs;PKsl2b&ًJh,,1OK]ԡKI*F^ $щ+ ʡ ����X);Z�ҥX) ‹wahwx H9U YhN,bgd\~dOdMsCSd͍wW61B;Ѩ' FR|$kwcx�2C٨ xi(,Τ(،f#\J!=ڣHaO<kN.L H}gol3-߃˒W]E-y0e^(p oX�4?Duf5% Cݍ2ɞ}TEe,X$Ebtށ]Ñ>UWUvZO*/ eTQ\ tdS6U[ V } ����XNRd_ V+7wE`3wOP?kp-UЦw;FCHjjO >&WI`$ѴG+at]l]Rm #\|aIX'U8to|_O?::wh ySv-,J[.dqbenAH z^(}rLNZ]x3BP[;Zb pޮ`ٗ3k.Y! 7rf֔j8v=NOAK[NR~(;Z"TS5iQD؟tdhv~/Er@4o ����+��� VSr9ͮ"߈<NIE{#{>M <ޫJ,ԕm2VW\ IІC+XlS G�Yɋ^%!畓:+-)#sJ [@kCuA+eJ/h&O)O˥]Lg$ UCoG͈p}e.^&G@R~1I&)rf5I1^'ﴎ>Y8:DKS=hsiI n)9"7#s[w{ԔԈU D,���� V���@bXKreGn\)m^)@^])3'ԉ%D3r8vR8=l:y X{v>ڴUƎuCچ{4-g&Gz׵2t=Qh7MI}ز�  sЁQ~G)]A Dcs Gע{U?v`!:D7>#$T 5!h2˔uU]RVI'-),B8RVYCah3˟|;M|jyi|y"k4% 9N~[6b.K:RQ^x*OХhh$deN1{$Zb����@���XyOŊDTKnOKb?G.كɌ뫱oxҒ%g */;Sf֪/[2/\! \v :8'14/C* CIBŰO*lRyDmg<%`vO:DC؝cRP& g孃^<r�c|C)sVYqÚi\O NY6[;(5D+9YYYkZ) `։5oN*SGUgV_rn$'Xqk#(6cT G:,HC=4 0^tٳ(xVs E y/=H9],*+etz;Ey39Ig`(����X���ȅ$}HsH Ky"ǝ^eyRqX=¹LOJdsK'(>YG#ء36IAg%rr&&=9~ >p[y#jÉ<hhxzԼ–@\S%ҹci&#x,?zW;3|욟 %"'F Y�|.6mBiyzK T6eb\ߌswo_@#zP9a3(gPrn$ ۿ&2f/ #*y7+]KuLRsSaXl2rݼo',u a])+����Qz��X\[[[YYY\\|֭+W>}c+?Ζ0@ٚSE~8G6UǀC"vvyTJLi V����+ V���@XR]Xv·| $%^=nw:+7U���� ���+ VI] Ģ?Kj>/}7*.*@���� V@���X����������b �� V����� ��@Y~ˈD'V3™>sUՎ<.DcoG$/q d&riӦUȅe2}}2s_4TRfW;DT)<*\*+DC0]UDkT;�b����@X��+m箋]ʈ~kR/ɽ6.AK@AQv~3μW?WFn݇h߬XQy"*+DC0]Dwj@�����X-8/!FD 3z7iCΠ߮xb73whщEӼ2R)FkrsWwt6O(coKz9N57wPToU~ x8.x@] b+wAb(,,,))A"A="OZ!gEĜmXlah zE ?;?>ï׈3hj; ;"vtV@DTA⭛;3iF|y QBa˞>3VBl2]\3 F>LJ~KgaYDbQ%"=Tuo-WD,MqY%s8,дuwԔ>7YeՎs|CD0_ SN߯yj@�����Q fl(AזnN_NV(!kr:ԽX\&y.>~{o7fm7(Vwwk;LJ71ɟ<j.d2PwBId~{!-{HN߇%7t^o<`++/^D}ΝB$w#VvuFKoE(] b8'?x?Q*{Qj%uebBWV|A,Iu@GvJldoR0QW[u@t^Su#&1J+| +;=NȟJU`֟/BCf(y"".%m,+H}QS|a]Ty7CF:oëU#�b����@b%왒a 2=7Өސ/2F< %M N8%R\SlVL&ӣҲeBgW Q]+:̃˫Ӱ:RSrqNJ"QhśseP1 ^~w[B}+D|iEUyx3.`3r?fDE\]t:%,Ebbw'+ՙlD"|2_S= fx<)>~~~N_{(Ҍ/}Ψxꚹc|x(SRSW}=;=A!"E=Ab"ml}"#\vh{7ˡVX]9ڗbb:,-V$Uk(7t͙ VjJ8 b̌ӗ3W[g:Al٦GGEGr(a[+džd2[ъe:5%(~#+㙱';nc:""U 2d]KVcE!.J @^U#�b����@b\kƆjxs?g$V9w%]sC:y(Kʷ0v,p&'yd,Ҽ"NgK l o"F{ޖu#) t"MC;rW!g.R#t?}5-yoAv߅,C _-TLgP:ʫDX] UNEU‹K*E8 ~o[+ӛBXC<Hu8 Ea8ktɽw5APJU7HC;PXX]9ڗbb!UWWu"mH >t=<ym]սdgFD,/2 v~RKU![HL bE6IT2uBW)V<Hܨ_h僩)O[Jd.)1[%+ZϢ\!]Sv#s[R~XQYubtO!m.:�b����@|xbE\s+O<MV)zKb%\Q=)aWR<X4U^H*!xvɾ˪QX.ޅ'e]KΓ,9AWZ[vN|u t5ۃpLqH>s_/ScF=Uו\$ $H^.p=vHH%bʫEXSzdn~}bŃLg0t'ɗ 5C{x^*w V*+RT)VV]N]RQQ҂n+~bE"ޚ$\G-?AN^s=V_Ǯ{]5-<G#w J[ D\s*3$ X'y1A~o4fW#D1í~JmqY}C朕}HL?5!*ʉU,hT!o\Pъ%-B]=WjX����+X(sXEb&ּvOXͱR}%B<O rFevT)V*n/]]V]-~ ̼pH,;\U4ʻ{R"U 'ܬ'щب}!Y%gg~Thɫ:W^W0wߺ>ٓďJwYNJb߁X ^yixUjR]: * Vz1B,+fv@UӭAtW 1#S #AY 9 fJ\8ʹ\^p ^:rPN@Gܨ+g̡(/N$8>]7*5mo^@ Hi)-bwBl/n׏VXA'KZzO&l MKK[.]XdvWު-XQ|#wOl x\7}YNw����� VS"<|M)A-{>+H]ejQMxEGe H+%q%}ne03J 'y;Aazf&wbɐ >kE(EQ걢w8Hx B ) Cɞ]QJ̔+h"ߠ TSN]RXXX[dm� ����XG:TH+TIFcDvk+ VS֔=uveQ+3}I¬?Qٍ9Ti&Ţ{^x {vfE$$)RÁp ׇǓeㆺl#5 &]X¥XykʎtS)$WCjU'Vٸrݩΰ.[J֯>;;DŊx^~nd!\>DR;t%̞, ~i5C *XywbjF VY@���b����b)oF@&)y4k7W̎H$?v~-TڧόPTߤ;d3$E-ӦMfGb1#(8DOJ2Ndrh OfϬO~; LP {/+O^Xub%g!Wֳ4? Ob˞bEm< 䮫kZ #2rjqЩ.:1 ##7H+'v$0*/+߁ +GAX�� ����X �|(8� ��@�������@X�������b�@X�������b��c+f!?�� V@���� VފX��Y~ڵkW^bŊKΟ??== ¹;eO�� ����ʛ+���{H+B"\tc+WgVh>)XQ��+�����b �� V>vR]˃ȹ\>[T^xbXQ��+�����b �� V>vRSzdnyX+2���b����@X�� ݷ.!O$R].U 2�� V����� ��@X@"*?!֋,VTf��� ����X��~(Pn$9L/jP 5������� V@���b&-Pd (L{YyZ������� V@���b#+��X���X���b �� V����� ���+��X����+��� V@���b����@X��J7JSSӣF+��X���@X��`{4)�����X�����+�����b+Z榣+XG_HV.�X������� V+Z.brd9kwݮtiVmm}+���+�����b坊Ʀڪ.$ۿUU=8LC]tV{HccZ-@A]X������� VީXK+J\lb5,W~9p˩Qw|WnKPx73mL b<V=<{-[+xן21^`_6'CÑc)Wm%,esݍiڵh H6gZ,p[7oFK62���b����>lrԩځT+5Uu JބaC<h+ke!*s-h3r| ioж $L9 };ўʆɲu=+?dl['U_ KG;ڪYdS'V_iiii+ߚ6'V+ V���@�����neܸq.\Py2H:U٪`b݂.$Kb}0eWK;j4;c ѝx1LlL>uQR5Z7B j1c/:+ASo1ڏqجsfȑ#L^%6T #6t`1YK$Lq8\g}_lFZ5U.O驐3 (XQӖؽв hWC%.V5h#VljҎik;҉t#M"K!unBYs0BVvTkFN 6<|-T^G��wJ+����z(:`b.$X/i4bxI(Itfumf.s=aJ\ y>;n0$XϽZ_~}NR[|\%g6rH9測q>-J<qSVcNGxdomk(7k)%xLμY>(1USm& =;R(RFj-V+$.Lشi#Vl]ֿ{1r~r+hHJMuc2◔m ;Ŋkg-kiH4n!~ֶi&V6L V���b����̱V4[Lܽwj^rEՂd+,1^CrI.% ~44*yѭAYCuB5i/:~N:ǻSȿOǷdhk򨓆ʝC~2tb\utd9tqS4zm5b\YEX#_e [Y<F(3vnA͆IFcj<\ wwF[dv2+ʹ=t &=lpmU*r>k4RfCt,M׎uTvd3fcb��+ V����+nK]9r=V6%;1?d)q~C+j/u~԰i n<͋l[qOm%j[/nYCp5l+Rd"Y6 Y/iu: KQ.\I#E߮,GZ Pvɺ]F+*+w,V&ѿ$~1l<rwM5:Lh_Z^tcr*���@X���@GO… *Xz'_Z\UceH9V&Xe԰%#G*s9(ACժr>ok[K |k]֣UEL:?-4?_E{ϥT#cd(zRF~}!ƲNC&R/\X#v^erheLXQ[ GuB?mĊ9V$7)cIt|Q{/*$ZXA{ SzcEkb �� V@���� V>-c Ҫ`bbt<r1S>tG*4֕ }*мSO]9yE3Μ2sΔx1nvCU_-+sO\6NLK%*RRĮ}h/o!n(+jq&.6 8 mͷ1鞸ET}#1F>RS~XcEM/mҶ>@,M>' C\]LeWR%qX:'UJ8+;O5$Ss鰩L+/Y u0aoKtU4n];+oU|��X���CC+l}.$XA}p5<hYo9Sb4DoW {WwOO/H1rDkאո7nʉ]&mWȵʯ:?fGy>$7{Q:G4F#jlʊ]Z+d|*d[alL^} g)ilk|/\Lۃ\3FF#]c%ʓתWs%N[٭Z}6bɦX/c0iӸVVN$E΋bN ylx*+?PS>%gHHH6HO46`Z3'Lo6 ]7p5. &!1k@؁ȊKk,291|cc@ΡB: 9z X�� ����Xђ'y`ebEnvF cz=oݾ|`WyQ7κQG]rtF?Цi~h m۱#+Ln/ldLif5X>)?ifoϙi^zgNKƹ' ˔8Du&%&Mq! `+88tqXcp8G5 .:ȊS4hهqa8Pd]y ʜb��+����|~,be߁;vorAi+̛vC~CN>۬2sDzEstp'Z|Ѫ(.0' W7y ,^ȟZ-@);X=`4ebe >Q='>e�!gJ/T}d=|d_u$@ pqCȫ8@h{9R)R]zGG꠯:a::vVcc#.][3/ �� V����X]\4VYYy+L. ;}i&HA &cnj15ւ[Q=()|1B>X1vKq;9Yt&MǹMן놮 ou&&OG{HJ:8VE>=*Vz#K`2.mq0)=B;a[!&ump_`;v:��@����!n- :455Չ\z~ӅnM\�ʔ8:nRuqù&š#}\tcў).ȂKi_h[głTHJ_mBBېւ!=l=l{XpAF^y V������G!V���=CbpM1)7 홂sE'OEJ4&Vp8m9 1yJGl]mxpb+b2X*%}am7p ŸXiOËq "{kwКRc5qPÃ˝*z޺}iˋH\Y[5!!?L鳦� V����� ���=V&\{!t )1:L.1R5KSd/C$>gsDgE{8H؅H'ձJtȏu0Sx:AEߚk*1 E&ڊ)) E{?ڟzU-bP?xa lc0e-^EÇUwΆ=(Ʋ]MH,xiKUktkkRJkN2s^;|@��������+jX]8XtKL'0h=(](](HS)R (:}uuq?v:8Ȏ>g++VҾ*X ұʖ><]SVOs_gDmJ8 5OcEQñĘPA)YZb{Inx|KE$&Sޞ%{<IEutt/ZŸ+3XT7cad ^f&Dﴎ8MXܰ 4Hsx2$7P֨At1s.cF,Arҥ7fXAH&nh7���������bEP)hOsĊs.StPsDMJOaRb ӵڇCv=Btmq!80]k58>Ί Wǒcf%i#V.ųƿwAdqKݶ$?Tg0ҥeFt [oۼ&≤$b{a$b+bQqmstHQ_yKH6β`-OuMY e VJ)z ;oYdQ3.^@TÁ4'f"U@jft֛ȾW`A<Q?^ȦMX]p� V����� ���bs>>%[r4%kd/Q\#{:S}P]{!GCq芮}#9g#б:V<gu _6I tNa ΆcYrugĞX ){wHy AlbNb{DCO9J5؎>n:!U K~/bH;Аu^VY= a- ;DԟOZS=P6XԅpYurvu 50A:gȾ%Ҫ@K{R=H]:~oG<g.ZQbT<5`|@��������+ϸoq?ʹ}=pJ n=]F>NXѱ mZkg׵Οba ҳY,8 =dB9Gy,q>6A]g3g$g]n6馦rS b=+Zw:@j}^7 Y'127vԌc" {Ee/:[@Թo/bUuKXl\|6<=Rsv]"% ~砧XyxAV>~R|� ����X���Z0-r jR"MjJgnQM3{Sv :~2)5L!Sh/P=}ԳSSttmz,88 5vK ę \y%G:P{pFr`BVbk#m{)oAN,:{9D7!a{=B9} eWΕ^68!#/){( Ȋ'%Bg5HCx &fHHfs^O L/g\{sKEMzݕD[ BVUv蛚s T����� V���@+䄟H_ASt-I'}>9M89`R P)c@6Xώg/е pVA{Zpu9\]+:Gׄơ8@I[? (k1s-9Dy67fMN?~TŵVFؓ:LwxYoEp1?{XTxi\&`œdl?/Ԥ- "+p梕+W>z&MYQi+~[[UiOa>;eȲ( {fуREl߄4O[/=H9&q'w ˞\0o�+�����bE��Cgk׮]z+.]:W+?⍈Ӈx~-PQ9WIO' p :9Ss�ގގ}ž<=kno[~O THg.I3 357g6aw)Vr38{75@'xxq#Rw=9T^:JМƢ oOUcoNn {Q}ҳr+:DoN<>E~6C)A{ޮp^ƏHf6Qw #8݆?{T0 5`cqy޺mI2EN\A%Q.Cy("_&~X����+ � ^A%Od3y1Du ;IYI)dIi0)%?,ik׵ ii׷[ru=,-8l}�= ? ^33e1uRcX'Vkg#}eSվ'?kI[=?EKxm���������C{3J)=a%a 1n(!_,Uי?9x)8 8YsXScճ࠳Y Գbp&:Y,݉ķdv{%V2iӦͺ^}ЖK Znu4ZrX����+ V���V~ y濾uAN~΂NN bgei6555 tv@}@]5gk[Ztt&L`Md陰&Md5s`GbY#G?K؜zz� V����� ��@h+ ?)N=)\B9 }*nJ! 2I`lߩavϜxz];NO>=@}[v6>ց}-ٽ-z雳zZ"~z&}pcu{ <%(�������JNN{bgޟH�J8p�jbpJW3%+o'}[7n߸G;5{wdk�N' 85aA6l8Ol9}}ؽ-z-zYB^YzfLn ]w gLL"ǀX�� ���� VQ =�|Hbe1ICE}j$-<eKh?^_{s 5pj_8 n2jXv F},0pg_ׄ;o YzzY1̙,Yz tx:ntFSu={`:R<iėIxisXOr|҉_gsxyZwg`Mcnë>ƞ3XiӦ<g�=s)� ���� VQ =�|0bń73z?hwAϝFS#~&F %|{w.!a#CǙ75 5{-=]�ߒߚ&POϜӜ2@ה3aL1KÍ댡~茡~FWQ{MSD&~Z<H|<捈G^:ni/ MZ[*jN_{\Q �b����@X@� V+;~%I_ r|"qJȰ_MæE֧ij(Bgr dk:O? oe)5,>Lި^OÍE莡O3e=wObJK"¼d<iYmIfZj֥qa>79k& *o QK=OD1~<R z4 [o&.UV9GK™w$FsvXN 3f"O[orDЃ*>Ҏ0,T'y+ʻ+\HJ5!\PJ_%z\幠BdX@����!Q0Z:b1#zDNQe/%I]ѰKfYlgik .{zx>zi1Can77RyC)^ vE|3)+'>=z&52e撅Aqg&$L%x԰!s M_7ܯ8_:r?cmg̯_ˀf^L}fO3_ ݉ oŢ2a45D&ڋ꓉̘ ]66i5coEO䣳YEMOZid^A#^ZcY[AsHzÝ4vEl+A<N?wV&x"t1rxDXoj`'kE%n+HխzE Ċ?md=~7-ء+ +\sȔ;V xK<͹djD*beX@����!QI'i棧,74;w!V4DrrõoJf2!Rq!jeUˋ,=2t׏|؀b}񕖖['yCl�bE^þs~& 94}kbfg.^ّ3p d3r~3t ֑KwN܁6~}̙̞,~&_OS>~XX|j_oSo>f|zy1mJ9ѻ $ʪ�&bE^dݾ<6*:>>>"T̚9^~^`)β鼬5[Oh3y}aGz`yGCanA)QT4)X6=j<A آX_K&2B; ҵ?bEaw򕫴.//Ji8L]\WĖ V�+����|P|y9ٖEOuu0Xp"]j=a#c{eٚ%דy 9ΝzE,/V|1ͯ=93eSsKK˩ bL>uQR5,lokm<rh,eXTs6G9fupg5T #9Fl-T6H9=+}).@|[Sͨ;7*CB;pp2=|$Tn<Q3;4KΉޅ o3w[s~K{gv|ߧ֬Om>d7g1`Ԋ§c@K-wS31Dӿa06jTMvbE6gJk:w & G(V)V2wǭ>)K|&| c|c6+H,jU^sUM!"j#"|P L+~IȲ=j+mwmT!V|(Ġt+ +XY\Ɂ:Υv=� ���� VTbtHϯ^P^v帲hHJ,=g;"t?oc$Q_f$Jtfumc6W(3v7N^ʔCsJ辵gU*39yFQK[c5sqY9ܒN/湏Ċտ]�|b穂Aqࠣ{9߻~p}_)udaԚ;6|e'V~}Y2a}m?+A-} /lX|bߌ?/?d7aOoJƎ-k >>N^{o亊 ^OES|Vii�jĎ'>6nFP d]sx[y$)ŞaI>RWՄi VrA uEћ+`k&VO=A iRtM|:Ȟ^ԥXQ]|*}|L -:RsyܜKez(-ښ+�����>A+̓*sr>¨rw�dߠ]9GXi܆Siԝ54Q4r1E 4<Rۄ_62YsPsO&_y*d՗34^cPȡduS4z_46^}pWhy'�XgU_Sަ>='&&t'0Ї"M0c7`߄5S+O|;m|fԊ-k/ KgV/l`d= =+'iNheLQHxbI|�/$"6K yyR̹g_Q$V,1erLԭ__+ POX栞E'-=yoLHޕx!VP~DB9˷+r   5wOg/@Kx&vڴikpqMʻ+\HJ`;*7lZreaqse.\7 �b���A+J<)[QܝL,--'j݉6r9V&؏6;+H0?d)q~OllPs sqBa#\쭗*b om{|4wNJPN�>hϬك3'荧MzMDJOxX8Z?g>}'1>;7֬muda+[?szA>|Y0+tSO̼ym֖;sXqeux����� V>"k72j؏'XRԤJI$SU=^G'+ cB[*7dY~-pIw2UNTR1Y)#e=VcĊƫߖfuPN�>hb_ٟY1&&^hwjZ_si}&{zcI}' 4' 4 &R>ʆ5 >_X~nΟW6ϭ-韘RzO$11#6%5G9`׷f4X�� ����+V*w34V^t9A0}tqkqI9VZj斌 Ru"kcMUmjw@ %7_ *Ree4dhV2_?لږG6H~H-▶vƎ@OS4\9)2t-T ]�|b[KTS:1zO59γ>L 3!7O3{"i) ;ֳxb ^MzO ~n֌/c}msr/3RO/1 Jzc4!oADX�� ���� V+ӸVVN$@zRi#Gs]@m-9Lk3J+8<؞vLaSK}Azx$Dkא %5ڡ<8N̗HZQvM'}ٻU{/*]Mw4;iM&ݓB[ C! q! AQD6znsR+e*'ONHz>}|}F =O$vi۲˽ U~z@&)PT>]qwӃxu0zrt/r<lhd`ߗ/p/tRhA >^a 0L!4s8Üı&rLkDzGl[4!0!bcLL`* &St)�� X���_.*Z3pq=�`%adVrMa$`\?H8`~^f+x`1j Q P #Cq.4WC3aTCFC9ig#F.fb"(`n0YF7\ �����%G/p+4=M"ȶ0\sHi0Gd#u8]N jCA{{{Ⱥ{)~0Y7 !Brt<:ׄuṚ(6"(:VEcaXe(^ð/\4+��V��� +pQ =�+T}{(%i g8#00>:[h 5a9\`: rtT=DսD}d`z0IB"krTU^F҄q0:ecX>¨ņ V69Kϲbܳd� X`���+E5�[PxsÚs!Z P1" ֆb4!8MTvP><XUFQFcՑU$Y3(GBPQ "B*ꢨX1i8.h(zЛ!P'%G_= �+���`V�� VN:uر[d3Ɛ1Tc՘uij1tG(3at`TjUمQYtEL"*SΔGѦ(DMA9 Q*BP*4'51$u20mIB},O3I7be+v]\-V�� ���� +��V`%E5G3 l{>LbXB p&2[Qf*c3TDIPfyJVa$V-"?F)TxUx2,PEH<%FS4ùD! +Ø*o*XMAcǾ*Xo��+����+�� Xk$1lY$3d5k4QYH U(.VTDL":CUD`yd,+*ӤqdiAE CqLi8F#Ӄp,$G!j*Lsn*X]&K~㯽g V�� ����ʟ V�n޽ޮ]v+ O<ĭ+dc˰'DSH6 JQEgJ2"[QU!ΔGf+1Li^ecGɢ3q0,,GN(#$Qp4' JYD4#ɖ4I K<դOٮ@xf8a[]b������-V��-+$c4ϰt Ax}x`h±lelFatfatgl`Dp"14il,<K[E%qi,`4X#ȖDe"$IF.Ǧb2QheD,om~g'[\ V�� ���� +��V`b kCH ¡J-QYʘ¨Q@sy860Z V+ )GJӐ"%ʒƥF"4Qd(/ UDAYlID Y2yDDqL!R3jP8o.X_}ɹ~Cߞwm ��V����V X�@+Q$CF ǨCp*4V%6W,%RD၆*ahy(ڵG!IČ$'+1hQT("[Dxq8^cQtQ(a| :C!IDg EƲW'4U;Y5vk7������V��5 USq'i7c!h#pʈlE(2g#p0|0^ 022KFfJGb|vH#0P$+Q 2 ~ v :C.EBGݍ+��V X��� +��p+)L}$Ő̴g\),KÚ.%QY EL,)xE8VWjbqhlaT*:W ɑॡIH4Xʔd6)¨,aD02SXQD0 #ƦdaXA(NC( X�@���!X�;)XI )2 #&%"sqd} V%KŤˢXN@钘 e8'°p<2GIP)ť3>>h7 a8VbY R- C1aH%Fr5@�`���| B��wRDV #h2 (CȊ\eT**"g\%RaXIL0n$:mD6zlqT(QD`h"DSشQY°lA(F]% CqtM2]+WC�`���| BrνfrKb{kva^=J_=zKUny8m]u߷|P�j\Ͼ/9ߵ?z.䷍,1L{~~6/[,vϔ7}u:hJf}soAw+9hOP<"KS h:X"Ȗ"!d6iD8.M0\?Bg(*S<)Fۧ\E?hM\ZAlZAd <SQΏUQQH%- e2]+wB�`���| BrڶܡeՋ? Vl>/w>?~AV [ ~3N_vs#4:+O?ZwC9o?̢ g'. VtjJbT*JJj[%*JfH1" ?+BmB[.!?+ !Xʐ"וMeRSBW&%2/eztB!t}Fc䖹+ X�@���!XS._V_PQl[%U6wSʏ<dtfz_ Nj,ΒEG=md7~~#`e]sZl&KY_.[8p8&_7pPr&x mZI_z׵Xc5o/ƫ?g_V!Ͽ[79Xyd twYrW�� ���`vV>ٶ#]'C.ל憃_/͙ŕN,m\{rmOռw?Xi_PTl?/n[Rڍ-ց:޼O;`G*c<Lz??"'] V><</aw+��� ���� +}+&zϮ@g>t~`}s0ߜ\fl2wOY-+Ϸ kmL~h8X3f`baDߝt+>:Y1.pdןDoX뗿O~թ07^_�+��� ����]4>~-V>ԤubbG7Cf{S 27}&[m`+ KY/N5"i2n5yȁ>K`Se3f[/S6->;jV�������*X+O>d2982ƃ~`{m_a4yznCscnWtu7+gSQKմĕT<=Jt %I ��@���@r]?x݉6d⧟0+?~\lt767CǬ__gr.p` g3+ѯs7xУ=A xz5{,q:0kwX(y_1�|#%.].v}~ y.`�� X��� X\ѦO^<x敗׵M8e- *n&X>xJnwJgxHJסMnY=PȊ+AOl-lb]?<;<0~ 'nzc]996v'.~ib+xӿļR`0?iӃ��N� ���V X��V���������`�� X��� XW��+p�`���`��`�� +��� X`�� X��V����V�����`���`�� X��V����V V�.\8u'|r]vl2/.�����@��wFbS]<LŽq21srEGJy9SaXS!cfd9]-s5r=N^jiT édn<&VJgds|B-(|&M,2s*F+P@`�� ���V X�;&Xp[kG }<2kK <fQAe E 9xS!Kͦ"]( 9 ȶi9U/"M*UC3R]KϪpZ~!fZT4qɡfJx9V V�����`��cE[`hQ4B0JƉ2jz GV5ȒJܪ"q<ZCǨ)9y̖Jj Y! rYB*rK2gserg~\-TZ#i_7X8e2zoꌭ9>qOTԟy!:/LpAl9dԱ9 W=w1|\䗂%s˽f-<60ݹ#>ZhK8}?ڳ}!X`���+��6VcХy9i<Z8J'%7Uk LJ$Գ41,bQ-j0:rX*Qc`9 rp jd#0JAv<zO0+i"I)+O ^<wYjŧOόf?B+L}_hxmWYiӦ-;O_t]S@C3xMWvu/JWf3mZ~ׁ_ɾm1ζgi|g;:_T^kS{טOKgO۽;Lp|; >t X��� X`��ʵJ\)qL(yAߞoU9`Rdbi%$(`c+=R;+s jh0!,jzwEZkdḄcjFUJZ#m#k4dS}rW~>"WH$+FkyB"-[>PU2ms_u |W5{̅+ qU> d,:p//Fc}hQ7ze[wYv/tu>whb0֩݁hktۑ gnm{||clDf=q/!g_} F>Ï7h 5 .㯴"5r#w÷;U%_jK_G�_-.7=Q궮>v>v X��� X`��ps8ZIZ 'dcD41)2|*EǯYQ|&V Ttj14bb>#9BO)9լUz-ղq51^24'6(<&,?P@i^ V sh-Ae?x*xY>zƢ ϝ{sG7ϟ.e,8t#OF#[6{}gUp\>wUtS=7Ow&`_{pG0mg@[[x~϶b žє⛻hz4ڻOm]<}ENG~ &O ݿ HMٌ=hǢG5bѸ2q}dwI#w课$r?r7{g?Q3*>v X��� X~߲o;ii3-ͬū}${˺?ۜqCwK;goͨow:Ş;dƲe낕b Ȅ9ԩ4EBEG*Du224 DZΨa bYɨ.40$YV4^)p|&F/ q~Md2}|Zjd4c?"t *Б$x)5,B/{țϽe FpӳgϞ<JWgHN8 2l Wd“Ԯ8кܽ/5v;̎ {FtUo}o>r.;hf4 rZ8Дÿ_ hǕϊoqms&޻qS/U۝N?`.8%3Qt/>Kf<y܋K,D_iu+����+q[[&ҧ^9ziO/+NnX.yow :9kY/.>rcpv`Ԟ1sIJhzS ĥbT"Re;%K&cG*D >MY !Ǧd"3[-&Ydbxf%MQ䊸x6urP gRJחW\UfE{, tӸt` |l;�Ϣ ܳc`\z]K*uz[V*_ s\+GCϣ8@ n<9E!Ԅ6Q)՝_v>֋LL]нIlmgI49{dDZy/U}r&p)MX| v"_;;����1]zuˣMF3]y2}LdMy%K'4:m6dڒ'{~}yfsy>?=]V\FOgrkvG-9m^nwZeoǶ9̇K͎_BwnnЁ8 .v_3l . V<fFJv-o,6I}RǢfYt MTI.=Ӫei$$hYn[O`2D\B>#`aZfppE\Ŧd)$#C4)>{KI)fC/4:!}`ǂo.{nOs<l8d]p킕VԂ_^:\P 9քE]WG'8qX{ֿ$ڝ@37ζw>vW^߈)n9v8W%ieg UO׮gZM}ܱ%:|%KϞt`͉@cgq7r)ngzm{Q6/{u[Yq_}Nێ`ލe>{ct|@���@r+w5N=:w}./}Bg3G;jy@ڠ{+K|§Oj%m?q;űڇ/;f V>^:$N8wSR)2EPz-w$ . fD"NIIU)Q4 lˈSu:šgzLZ+4L20[jEfN#31Bz1sV>,"9470xjKSQ9J'6oM_|9>{cO;Yl(1o_tasMß]cScx̾Ɔ/C/G۳.zꉵ-^4hXͯ.k>7nX783!p;a;hpCc.]dƥC@ÝO6o6wh#b[PחǵȵcOƻl{h NW-w/U{z:"y&ʇg/^iZgc琏k@C}nG.o't;?u7|@���@rg+ߚǗ"ue=ʔ=pb PO]Åg^5[v?w+V@ef0X{zw\k0ڂbԮ< h|n nu|9Z蹳N=a׹8wSbzJL犹.5ˡg[%<EA'#[L 0d(a$ehUӊ2'ߩe%dY[R0L\lJx9jS!].uXt¨BQ-&y,^_"tY2>ka7I>pָ?\{MmZ_9ǂ( 5\fLU %3/{nf ` [84U䣳[S>:`zMYlDSѰd+==]cJΪ{Q¶u>dY2mw/Wz.ߓ庢{u~Sm&[->Sͅޜ,_߻iIo=tu^XpRl[wאR}܊Y%Nj7g׉Cۃ+����+w@rU[m-VohrgL֪@NGݿuve7bgUيr~bp|hp5fG3rl8g7n N8qu[ =g]y|VJ *x.=G]q[Pȷh|jeTf,D; 8> _Fo4\\k$!2zc,|&F'T\W"ٸb.NbUM7)V JuυR{l+����+mW[\S{G7\:hʡzs7Y]wڮX=i&5FSѹ5eYyŶ;?&w:۱Zmpf`Ũz-RAkD`Ql:f0jK.]ǠGjĹu2!EJٮM]&vB6V'#:"#G'4)ȥd|&б)vR@&V񋌬 wz6mSp#<=r[mmX:ʠ�����vu5'\a6zOO_<'V˴Ŷ/]8{t~y;>8pug[p~G#+g[{Лwv-v/~ _V;_]5Ӎ0nANss߱j~xpr`E)" rb^ 5+ncj/RX(`ay"ڋcT_*RqOViUX8!1rjcYܢ"˪i$D1/`cԱMJZ_4yt!+>:N~_sIf`���`vV"~>Ҝ MEhvVN[j +_zozfwO]!غҩZ+vhJW/v*v!wEWӮ/;/}6d ^+,qq`x ~Q7;53]V\ZӲᵏ}Jm/i􉪋Vᳰr~IIsYt[RHtX ~QmЮetfnK^=5wNĩL3w?`nSީg iZ)EGgd[ST~KD*D]W Ir~EpZ Ţa@�`���+c2T�_VX9MjY+ߦa HlrspRA#&kd>M%$d^长ns6kp {dȰGF=Բkݺ>JD+)v-CQ+CJVd9f%]#%iBIɨ+��V���@ ioi+;�_VJm1eQ3,;[7ҜzV($_W",2D\\2}-<<r.w}Z=2ݏ.I4 ]jUU"M$ `|JT!ZюE|Iʼnw*yUeYG/\5lSu7bq�޷yS*Ko)G6}|h"|`���`]SY8�#K(ȵ>;zLQ.H'4Jl\`b9a/瞥!e?cyhc]cfK<R@y, z- çg .^_QVϼj ɼcE赇pyo2|{O_[́us`嫮a� X��� X�QAJIOSr7D0F:^>Q1AQW*(254Pƿͅ1K{m(ݷtUI[EGn-u\AF1))=SO೰Ȇ$<5)ʓ?mrhe[̕?prtW3ۼ {?}$:aC]L fN<aŧNjill*TU֍9ٓ}tvX<ds;;>_4m7 jVCm|_ ښiOttv\|\[>>Ž/OOkv_\6_Z7e &4U>0"yw&6-7cڪ30֎uKg �V����V��V8C!ݦe\y2ZsX1QQ@4)T(9C)f*cyDġ5k_^w]m/|/|`Uʐ'( 7B0YI Rf#`e+(W#%YX?W3prVk_uu@Z_{Sz~Ÿ2ݿЙ󻝶 ]ˋgּq ?os``0'N-iݎ˹l`k*/X} ڹv['c3XA{'+je͇u|ubƓ{+l[z~pޙ^g'.wltl3�+����+��p'XQR<fUMWILJDZ.#K/:,%HXd`1lJ& ;chպl{O_^o߻dGY7>8cdv-]'egb%<MZjjeDvK!$c×֌ohݣ&k�JǗ47iim]ht%޾*0KJܛtS~W墕붽 n`gWOou"PҶJ 3`Ǟ-m^<>9<}ݓ}>:{Uvw'Y[TL3�+����+��p+2~`RќzzJ4)TH+1((6V'%oҲз[Z^0zxoTV=ս5aΉGE=2t;mϬm՗ v]C׈G! "#ƵVJ襶|yw:÷z`gX >,_;olp`dyrvUC ˋ'vyޱk{*=?<`m_72+o~M2{z>X 0>ˑM%Rd?G;٣Kƽ3?ʵVvMy� ���p+R�t}~B"[4c(Jx9VZBj$|&Ơ )EF,w4B!=->zTVgf=CX[ŭNK[<<b#EVYgd\53qhh =[31b.A)햏}r6О~'`t,k2s_ Զ/97e q+YJGwG7>b+? QBVrKt VZ}-+}L3Cw -}䭝1� X��� X�;8X), j%d kẍh\%(".M6R^Nal:!cŔۊJ O[,$I&㉼Idʪإܻ*)qX\jIyȪ2ZVUUϑ/UIv-COJ(eNu5m5%%ŕ7}[jG7/tu[2mڬ3?qaGWUԎ=k@RжS{VUTխrׁԔzd^7XA|qE4uىM F͚5k}+<gO]/+}L3L֓ʪ+�������9[ 9<zRJ$t'-Vإv[*sp'5Yp!aBB C. ]>8delܳÏ?1s|ϑS,VJb~g`t2r5g(u^f΍wqo#f@���V�� V6V!3qlJ8/kԕ VI"3[ 8B!̑7ul)*>6oMZ塡 Yvds:WΛ)9ng3((\*>ݤdj1٦eTd"f$2CoQ3 X�@���V�� V]"ALsLJj+0\Z& 3PH4R*^NVr-*FDsR>ab^]$$<#SRZW( s&-*$]osXJ()`4Rr}p8mK̦C�`���+��ڵ hY<:J_6U"2k*0Z ٩gT{[e^ق 7M^/3$ dNU[x,!=jEOA]sX&E-!jd �����@��wLRȫt]zRLв 8Xi~s Zv5[ƲəlJUCk͙o4LdVQMJZLr|V-ŤBaVNEV<un#ۢ#;t,|R F%U/z} X�@���V�� VLl#/_+6FV#S)m, ,9? D\)Ë91MN*|#ï+T{VEI1# XXVb6K}"BĎ<za*d8ukVB6*Q̂`�� ���V X�;&Xn=kB[9|<5gU sKlABe$znѳh4q^^NkJ͕CTˣg0:ŦY>'ݮe X2v$3"sf+[9KBmѳp] �+���V X�=XqV-ݪ4,*ze_%BG-sJD"NNQ+, XZd䐱#)4#$<<ɥfh"EAFBJ:Y'(D!Wbʥȳ"3XPG*|gs;]R� X_���@ ��J]H-&+$c!\T!.2qT"FB~GSTrؔLf_2:9e`Zb3DX@"Jqktl/[%S!p嗻xeμkr^ MtEuic7rfes+}��`���`��+൶akNw:ϑgV,RHp~w_4 31#ؑ"nQɰ>{^Wl9nˮe4R;DP*lMjT5E#-)t.5KIx"ƃK7Y+Lw|3W+��`���`��+M"by<Ze,ڸU^̲Ĕ1qr"fq#L!g0<qR#;KyJ! YO>#ˢMZ#,9>[T٪+<VJk幌̛ Vϼj4{rgc7������V��5QEiDήLlPjVVj1I%"R#CٔlaC1mZ^FpYÄ]&;t23c+.,/`*=e./rN^3rJ1sTdrW~M঺ߺ~ZV2c3vs��+����+�� Xk /ǩg\<c,Ֆ<&NHԖj)R,jVBJDq|&Q w>"^Fslb0j]tX^3ǨEDEe`z-Sb5K*%0xmWǹ,q+}��`���`��+M+XHɧgeN] +w2ZW0VZ;lFB2R4MJrY5c^BRgKJP&ZFUcU1M EE+<f2OkR:B:Bz]n]hrrg]�� ���� +��V`ï).(4C2*B.ԙr7T走rj>=MNhTm5RZJYbe{L\ԣ}9 Akd)/N!S)m5jd%|lӲ\ 73xspT4Nrk�� ���� +��V`Ŭ9Jc*UE|*y,hS3]|UYo)9MJ 2Ne]}ebȥfyuZ!+ȱi(^aOX-pEf.p Ive n�`���@��KsjKvUͬ.*h6Ş@"e` r"2-rj]'**B62dd|XXbMl)"ǡGV.sr[kd3UOϟ7I7E5mYPP-i�� X��� +��p+zE#! w~_bV{ 4<a,d˜Ev]qAoQBakflJwA!?KjfQQMT0GQ V59%6NSI* _7i%6n]cir& �����@��wLrKJ��+��� X`��`�� X��� X`�� +��V X��� +��� ��@���V�����`���`�� X��V����V�� +��V����V X��V��@���V�����`���`��`Ӄ@/���`��` (P X��� X��V@����~�@WkP@`���`��` (@���V��5Xq[KJ(P@���V��V:,QWP(#F&' KJ?*c!)C㒆&D'$G!?Sc2*398j2p9C%[ LFVZFIÐ2"q$dÆ'5|TzJzfrf稌V@ ���V X�;&XIHEJԡIÆ'9$XR% 1lxlBRLBriCFJI]RfaR1ԴlP nEE_]Zq"e!%#3uȤŇ@8"-9=#FfrFFHBJzf2+P@`���+��$ h2bԄؔD.'ԤOi3S%$$&D%F!%1%&iHLbJ8|//~othXL OrW=T9\ZzbZzRzV+P@`���+�� IHN>"(4dC$' ?GB`H:< m؂S-V%2>):uX2R$=PiX6jȈ@sLJN5ًF`ӓFG +P@`���+��$'IM6d!HM\B4: 9(%)9!1).!)6>)CbўAL[<QR9ÆO?" m2"-9\e3`ò8\,� (P X��� +��p+hW! Ih24)3+-mСÒJ [A~ǻOIBCPBRY)T̬Ԙa#Sc G~LK!Q(险a)YC֎HJ$^7XRW_>ܱ y7}t{k3q:ANY7#e>!khx>}o流KgN.qFtڼG[9mj6[S:Gw>7f1[잉W=нU5E/+���`��!I0%'(> m֤ħ t:СICc<L $,qho! QCJLIL XdiCխl^` i鉁[%R׿+JⱛWUS08,:ŇLKW}}lw?+iXͮ-g@}Uh3oX}g?u-_~fWK&zw߱=g7T`rC|i%E'ˬ!t`���@��O22mhz!CS&]2$a\"V&NCAXIMJB4%D% M2PRcScⓢ+VS2xX܈ݗS'ddHKN+o,CUL6oɾ^`eh6Uz6`:Z>[yLt`:+,ۺy+fbo}ЊO-Z;RĢiEv8qIwp`ߓLl&uƪeNdΪ/_u\ﮭGRKDt7XIĦn;ُlG[7=k[^C;xBM۶>{~;ϗ>%lҮ`2[tdC߽o<7dYmü=:@ ���V X�%XY >:DƦKB[!C%Tuk bR$ e>[\ VRGr 4$:!9*&>"!mre(ԡ C%h:<a舄# iI) V q!iC5HK{)4~| Unhd D'c6WRx$ehxV ӯ/XCK6{iovpק]l1Mp[]gڶ {g/36<&OmX́>S^}qЀ"<}@BWb~OPԽ oUpXC;赇g6{!Ԃ9sysz}LjmCc^:p}w+WB<|v:}Mt#(Ƙ3;DR$TDAAQ:C. {Asf>>]w> =z5A:X���X��o+O sܶm=u*4'B#D&< +AHml$l FFzÈfܙ3YIsY9qDZx*VXj)z<H$aYqx& խPΎıs~xmmCϠSg# [9)ZO&:6QS\YuY$n ՐE电WIKZKIѬJn]IIUNB'*dڶTc䗹V9H=oUcXQeKI$XXF)! ݔ/!u{Y<h04d{Vwy]<չ8QN? ;9)ǸU&gPci.*Wשּׂ9''t(ݑvmKYt�b����b��"V8X8YX8;D]_nD" 54T-*۽{; 77;À18 '%y ,FX}<̬Ċy++;03uf=K8""L$ Hu.LFb"y&+ʋK(WVś#=W]%n(V<HGMI2[4'S5nZHC#,71&jZ5Z %A2О˹eKm,B_~bR%A'6^ ,T8gkoiVI.^ڽR/-oXčvje׌\Gƪ| PA_O_g+-q)9fdeŔ/X^C~6YJR^YʭH?SF$E@X���X��+Xb@L8&fL37dcgN cp8j1 _;`@bp*B$''2kCYq,l8&HVcQW Hlxnfu,<B b&قVDM65.:GQc:,ՎZVN!~\fb\H_SnGݪ)'.&!WMs1T")ȦֲXTF,eX,U,oSFQJ+8R URuaV4+AZo Lڴ 9MOK.M ./,tA#G#Iy1tşm9MndUo%/.RXZ( 2Vp4o Y+����+���"3ЊPg�qp2o"B]b 6^t;L@D"b0 tz -Bbs9 Z'IXV]ˈcePDfu~l3u=g,d8z4 9NIeU˧(z$޻{ݞFZgAȼ#gzN\rq4RF[.*b$ɆKc^A,U֥/1v5UGRԬ?^6M<X6 i{It@[ܯpDRſwU9G.fpҥw #opc)6>Y2kEj˪9PTrݴd bm||YaiKEYvtĵ5qUbA:X���X��o+h%ZFZjKO$XXxj0p,B<"Th& ZLۑm'N3aLTBϸ~ iw^aLIΦXHhB{ LlIST׳dE8h.fݹb$!&*.!mp MfCh/\VOEijذ\kyEi ) WB,ei5KYdr YqpH,ԽԆX)HKH_5VU}%&.R[jd7|eqU[g$$d_xUk%)11 M#gtr/+����X��  sN@@իW]]]B`tJ؅~4adG @H01D&f<u6O.D bؙXZen8"=Ek1kk1O+DӐG3R?)ҔJ_Zo`IZ V@���� Vb���ELMMUUU}X1  =##KOOv)!eD>Q| po @ b8H3eQ Od HfRt,lD<ݺĊ1 …aZ[ ص?Xɺgp禯:-434Wr�b ����b ��HPU hf Q0X@bѯttkhUhdccff32r13bbpTc$< ZvzI녹L88"#:Ɵ6c\󃉕4gKUySSX ���� ��XQ2}P1Xll$fv={v޽*VU+(J_KXa\sN^^v G[lO0BB\%~ʺ:lb+kI.t ??+ V����� ��,VD uFCRVL8q qwl"TiB BbFttkp8 3aX,#=:MȾ\,$V"OU! I*ʻu&Fz,3=$PB�b ����b ��#VIxff<3ȄYXIē'E__'ć0ѭAT׮~ 3Ⱦ&Զ VF  20jv_Wuw?y3uBl" Ă!0cx x"'JٽwT:EҺho(#**PSmz mM_Y� V����� ��.V99H$7۾;yx8:ttk֮ 5kmx6v1e):yAZa-x;]Oeful<<L8n77iprY|\WKs˨ДEU}wTF+1 eXYFR.+agB VTX����� V@���-bF<l\t<4Pòfѭ`xHGOB Z)CS#-(f拟W3dGH\tԖiH;YUw(eHir0[r@WWGCv(nmPTY>ګ/*Ni.p5Bh;&}GJy}-uEU؂ӑwCGMCWSREum[y5)[N¾nd5 J+JJ{eLMu*r*acp.ÇᥢWbokuVWh鎲/){tF=F+����+``` �DL<c+$I\˱e0 HG+ ( t4D"ptrLj־eec"2Tvֶ'f#݆C}c&æO?y|MOR?g"O?9*Q~Ej+țhp\jZ6J5,NVZ#Wicm->*5oDfSנIRQTb鿕XHuVQH4ZZZv 45W+oHvѺt/%Ҙ%%w\OGK&1<QQѦzu>r7>|8^*zUQ4SxGz%TSvN+_! @���� V@| __�D45$p02/b͚b1 m= 쩓֭# UX_^NTN  e[KFWkGf݆Qևl~s=(-,_QTI^NVL̦gZ+~DK.mbo`jllN6Yklr=!.xVI6(paMIǵ{Iuߚ"p`e/5S6hV+ohP1F}X}vq;޽Rr:fƴ0д|xhwTgbpaPu ����bʧ˗/_@�_%VٳLcezzjO??:5 Þ=;7m"ec'۷5+KMIK .-uKOGV_g@Pa_AMFkN{`p^n݆ GzF{MR>!VJv[eGRY\OY5w\5XҺmaVq窽RgI*>_4hQCd+*R-ɑ?^薉2JȩFQeMkY8y"gY~_ȣP47'b~;3W[I]^c����� V@XAۿK bpx ';wn奖.HFb1bd{9'$$'ܹ O3!w>yt~K1K@O-f)Hcfz)b,NRR9:8܁@5Ғmﻌt[%pt 7e.KS:k/ 58++iBKZqRJ3(VGWTilyZg%;i%T)%gNʻE} q$ ?|8+\wtOFΪv4wz V����+ V@| V�+V6oZʆ' P꯲1&p ekqx,ĴuFVVff_~z~#CՇB@X Ywbg6Joan%~=ѱtu~(ri-d_y䮣7RwsV]4 nY Ut uSКx] M]mm mOi*+**)*jRP+kiYVjr3?fE$/ZiҜJW]SC]]Y>{&*Z>/u;gd`{f>F+����+ V@�$VyyyxXD&Z Ȅ;yPUEy#<05oe&!{[  D<tQ%E'1x<GbqXU`qfϞg4]/Zˋ a߹k};yy?I_E @X���@X 2E/+?x]sbEF`bX=;i~^^N,e`V]ǹa-l8Ȅbd%qx<cܾ}#D&,rF,a&uu:2'FR/-׳I,V"/'+����+ VUx tg u&Vd'7m^Dbcq8ψ :'`p7 +)nܸ32`08>~.\& G|g3 c#Zd>~V" Ƅ'0"ÐOn+ V����+ V@|X),,t4*233__d�2 ^ׁX|vf$898IlLLX<Ȅe", lX٘8X\xTjb+qC7 X: : ۑ,lDT0FF#s5]Yjܬw,&ۭ[N࢕wGNb ����b+!jGE o<!]49o2 "X V5j"1UxPNZRRF%js;+====4_"Vfgg?G V \4x ^~2h�}be&uB<$$8`\FL±s0[ZhsJK=ә5TC[HeM{nd`gc3pL8V6&Xg!2awvvE+Kͭ[xhly�f-2G`b����d;~>𬑩Z4sϾA|_+V|%%KF( |ťê7dj}byEtqqYJTA|X [M^l}21|EG`g VCpq.'7:|'qr3XBܧN߸Q$Q@W<ЛՖ*d'AD g`\Q\޽ ĈH,~.P넸Nꁾ<E%QV6&Xb ����b_/V=9_¯~y_Qjh[uNwE>|x WKt#!gܓrD֯_YZϩ{zn2ܽҿT8K_ʍs01V7/wLHZշ .,%#Z`ĢKbdW%ީwg`bb+b#Vaƅr-bG|@;艃hdM}||=[EJ^T>)#cׯzZTwNfZ ' c~ݽ^ae#pp؉LX.nVo;D{]˾#tnn6fús֦xK 6Ȁ#2Df K[Č;xp@bowbX햟xz5 'O+7zɫmf)B@X���X`ŸN5'xsCO79Bgb?P*$Vn>b8d;Öި{;B(<T($7xb(ATTrTd1zy]Ǩ(vQ!gPg&-C'3OF$-]?G2_WpbG~ DZƗ߉mI4XOסv2VFs96ۿEBbiQ1^>VnV uf$I8$yH.ٻ{SJqq018AN++577h'a׭eL8OdD-v*4֯&1OYvvvrYB@X���X ˆ2NnT-70.X0᥷$YT<X'O'Jyx&h\WX&4 m@uR|DEEǞ3K ?HAX11$&.pqpOyTL>X'k3b |7oݺu~ubj-(/&>dUb 'A@UR|-R_fJjm9p`3 Gdpz6:ߎaPTaca# rihww&݋23)12:xpGmi>6&fG'^H,G b ,X qZ5k}X^],---x=Ì@@@X����+{NʂX.ePB<#2DDD̽c Zd0NBZ+2V0-)g\ʠbX\v 9be_6s/ٳC~ ,:Ɨ '"65WdOޱs'ҹm=B+?TcI@E|=hv*>2SAYyǎgbL"ÑDŽedOi ['Ĺgӧv}wTiNn;<jm;Dc�BfU5t_ V%$s *vkYAfR{be V�����ʷX9)acT&q,C<[jbpߖJr,++X 4w\CIK5h.beb8E\Bq i'b﫱beT]Zm\m %w}rmPkϒX1 bkp6n▔*/z:{ Ǟ8Lx"ct{uH`;]]N}gks ݣn, Lأj}=%f@`<qFR@ϰSOKb!p/VZJ%"WծXce V�����ʷ ԝl'r)<{鉡Avx`Finҏn5)7.Xynsx O$(Vx'ӧrA%#ƇUB+V0#3Oni是bƩY*#}9C 9bIBޱK)*V=t%q-J3Wd$;Zvz0X#"  '֭Rd J..F\<LGZŠcaع^NΝ"'Nfٵ{=qgsWPQ;_v&7urI9L`ee:)*AV``cҳsX@ʝ;c/ meE5>w7é@+����� VU tdQm qRN4?rJ,E0sUm ;Dos)vݿx' BWQ$Y˃ʁRN(%Nf第S\h3VEN,#i?+/===4_2+'ђV>k`*wWu{NL~&EwÒdY?3VظAD|.+빥)(KJ>rt{4tL؉DfƓg$xxYvPW`{8/Ƕ[uL"/xQF.:8|d/No˖uG>zt??ųgĥ6c㩅oYO30Pեq7L%eLV[ V�����_ V(VXcЁRʷ$3@U?ϙ�r*N*D mXؘpDz:'Fsre%7S\*J=qFF jZQi$ƹ& g_:~Dy_vw0??'?gte5w2~˾w6uu)YYGE_04*1) 1}** @�����o+\\ x ׾l ߊoi:]X&Nʁ#ҋJ˳q0m۱Zn]m¼kRk/-ln&wExHl޲Љ#'9wmcIy+YMUcķCd"XE6,$,xMg{Y ٙ/)^{LG]FZZL;aڕ@@@X����+򃋕)r0 VEU@G[RI]k/yX7^d#O/ź}/DhkK9kTUWST<^DO`f`b=|pR\i)>w"pR\C`:V'''ڃ|ecg޸e!' *}R@@@X���Xb^n�@&V8*I78}}C"FIC'23>r-ڼe]4l($G3IGO >#rJ\A@HPhz4;'ǎ];~%wMd~M?o=t́ϩ夤Oۿ ���� +/ V�/+7i=qZ]S1H]KMnρ,f{SDs]S1^˞X tuⲚ'De7l(,?zJUGW).XI]'lݲmޣ'YIȀ lؼ ���� + V�+"DU<)W\pY]KYA1Q>n }<rJ\/IXd#)qnCE%wه%qpQ;y yΟn8rZGUUdee9u۸y~b ����b +�݈rĉb2Ϊ'E%eyFYU{k=yJB) E~q^OPഴcbr'Ȓ7mܽ%tM;-*m;<* O^9.sA+ V����+ V>K@�_'V~=tS^U7=-|a ]{>&!~GuZJeMGȞ;r؎l/$tLLnzR*zjj2ަde[~eo6o߳oQ1}~9~㢇OH\dp#e5w"#/b ����bʧ�{5�b/+B ����b ��w V @�����+��Xb ����b ���+����+��� V @����w&VFGGMMM V���b ����Ѿ>T+��XY1�������?-V?>==] X�� ��@X���@|XP( V���b��+ V����++_F"NLL #���qy,&뵷WWWX�� ����ʗׯ_# /** ��o]OOO{{{SSSUUUQQQFF��@X���@|Xy%0P j���~DBCC_~e/+lJ��+����Ty-:99hjj)+++**��!xArrr\\ݻwCBBBzm])> V������X Zfŋsss eddٹ��077b[7jao>t1 V������X/_ȸ>---M���? uuuUUUܴدXA~~,s$TgxyϿ ɮϧ޾}l°Ab��+����V/o޼AVP2===999>>��Qlii////((x׊jA7/_>}-9=57PKBK7o^̶fMMy?lj)d}_>y b��+����+H !"㦦&&&((��PQQhW>}Ly\^ڪ-:_{;9>?t~nWϿAXz5y{ЋOZK{S^Uxct��@���� V7beɭsd,��) M訯/))?޼GS(#{g*JFÂܸ6=5AXḅ{:_t׼odտO>;5ڝ=T:\37Vbh.狕yiQcwCd -TSk{T_냍bbױq11~ȷ_[W} zA/i)K*kǏMM-=+vJd))g'LJ*ؙK#țx/<S%~x@����K|V/^ GyN��:-)qlii Z/zQS$1u3rk嚘kqj9tD^h˩c8&j(w$ikgOf'fFKznD=,z07Vv՗Nj]ıoUBJ&rjuT^%ыO-y_/&G-dq +m}8:^eD4m\ZC/]y=ɫG MNu֐ZԑH)x@����M,Ted��x] mppʲ(o"MfKrF?-qթmV헖Pr?38VW╞W  l˼l}.Mft%4D5t^J<V%٣'HL<U=NF>6U8"=v*i=R69״dկƟ7RҷꧩbakYJL\\VAqP}]91u'mrN l.J9 $ۜ5RQQ4wZ;BA';GhY$SMevbz˪*=tuiImi 񺸔:e#s95m:KuTl{� ����{zed��@+vNMM=|[3VUf_~|Q~싦aM Z$xT$x/Kl-,k/nH+-NYߵlPXg˂�+>éWS/$8w_Hqλ5e3jng QQQp!}iSU]ڔ %#+W<܃{$UMmdB΋#MT)"fbbRDz{8i:2C#ݕR"=EÔʑ;*Tks{`?:Q-@D?ے6YՍɲP6 _1LА5 n@Z ʣkCjH;ﲾ}DX]g K&\v{� ����G ��ԒDt6WO*_>,|P8%o"6t$/&C%M\koWCDG{lGWnO_`y@EGoQKwaKWvKihyt?<gH;(=oXՇXv%\lqο:Z9Yr>St=b:F/J|Ӡ%;Kzb'd&gTdvYWwKLQG[RN̘ȾrQ́H2#݊VeYK,cZMPFGG JH? TH5D6=Sԋ |Dќ>[ge5h6cȾMQHAKϬOm(PoTLL^BeȍȪ=�b����@���Xb죁̉IJCbO_3ʾ5۝ۛ30PaG=y=E)Ewm7Td^4Mu?y2ۡߴ5|[uWՉ[o_l2u][NTTT>mMu4sp5-G{SES$5S^쇵oX6Q X#[eTM%'{l[שI1*ݔIY&rUUX: a@z䫖[Eg1 DdI'dQoX!_25)k:H2dIVu[GvJ����� V���@|Mo^PgrDŽ^XlUPyݼ*zS[PaykqE[imk^CWIkoy}OI]OicWEC{a{gF[MhY_uԌ;{$(cA{KWϩWϦx9b;Ct%nuRߡ<,~׳@I3AѽF2L^{7er*Dv5'y( cT, ?j{@(V0iVZQV\)AS{fTVV%MƇQ;s^^JLL2o9(H;7.7;Si7d5/4>X^VKZZ*7jO)C[8<(\9C _ɪË=�b����@���X2ՋW/}bz,ou:o0Zs5uZS}c zsk 3*ssK23Ssb3Jz ;˓K}/\*pz.64X>FM|{{PΝ2JcyXXw,\AUEb2`c"kb9ZN \OibA/ܓiibOb FLL<gkG`Y-B,e,-'喽])D4.=$o3 G4(Ǵ=ۆ)k a(? >'.5sc  V����� ���/+o^ÞW3sS1'B=;ҭ*L-:},K*rk2[Sk[ӛZ6'7fWvw7'U$ζRa#ksvR^9JT�c%95>ԙNT=GM*M`buyX:'f=;jwN*Ғb*'WZ|a/*DR`<ĖFRZQIԔ iI1RD5N 0EhrTb(S#aWɒ =B,jCfH$Y.2.JdAx@��������+_&VO>o}P454|}7K.uDu66շe'566$4&76fVf$Vdŕ4TT$DWF'F6h`tVeDâ?dUL;uauL됥''KYO{=�b����@���Xb26"gɀK=1UvaDVUknLooh*okKlOliIjmhIJo.(hH+K+Lɹ_teVve{>MԢ/Me[QJCOJyr|xeI11LF}U%۪yt[=�b����@���XRzȑ޹ ;a5ަ 6E^ϕeʻ[s';>41q7A{[JcS\{CXOk$/5!A\Y̘ʼnW+|JmتR=lTyѸUi.&Vbb&c:EB �b����@���Xb JֽA/^G.5j.6ݶ))_RTY2n;%!*:!NkCXKHOJNM|zE\zyj^uF=ϴpX?ǘV^fJ͑WK-+?i{93r*�� V����� ��-V߼ƫg2'#| S3$]5j|2JT$F%Duܽ{30;,VBYhImDc}X[CXWBVqxb>%u4>mjkwJ{qq!rjZ+��X���@X��ӓOdžOTRh_`G{kMCwa{IN׃̘]mc}m= %59e!a7o$747ׅ5F t'eK NIS{\IMʭ<ׇZ7ZTܚm|XpQ}Xdb\AYrJCbn/I6/<jP.$')%<..0�X����+���߽Xf}峙bJеNۭю5TZDo)nkHhn)*.(z/Fpڍ|J榈ά̢F%Iա>i6w/ܱl 4mw{t3JMqyb!ypel;o[el+^_.V>~#I6_Ijj̫� ����X��gO(o޼~\91dwj72oݾ|;y5 66$.𪬾 nMP]ۜ2[-MQmm%1w/4V/LJԟ_`pBJ|IUBcgKvbVVV67(dmnu\411ղz=X[Nyt_;z-feco`hg}3_?"V(kgI~ZZf|)*igtӣPydt7y'd%:'?8Q}] 5C6f:j.aS2VSܻdgk^ފ #_;";}�+����+���ߓXy۷ogG}<|J TZ绪&7k?Uo՜0,7=/^`mst=C<XUׇ7$4wWɈɼ}-^xefDki7lzc'*n=o+S~;鈖)ȎG(hwW aYF>&5e!Վy\SW+&&Vч3Urp>YưUX\.[M,HQ>y{v-}YMaqordbA6|1˞0eBYŵrk##����� ��H~6HGOJ xYg+Z:iwV&ږw%ߓͽ~W.-t%Y^8P2(-M ̍*-Kǐ~ë$÷=Z~keG}h Ok^=bejj,F>#U(ZK¯[[ZYȚk-U=WTVUWַ0f0KC^/$-r%^MHH,v UV=iۨZ.jDjbewG;xA,mث_hz/cX-V4ZR[=1�����X��݈Hss+)>W5ˍNXwjWfX ˾-Ӝ֞"W[Vi)^ۼ(8vƝꘄ̐ƪ)ёeW;7&$9%[ͶǼ*V(ږ2?^dyY�9-? a&&+ ]W]˛iK 3nyX( ^lKpҢ=ESEzJbŃVZiᚻ'볌 e#?68+BeNʇ,+6V|b��b����@��� b?hk{ˁذK9ƢŗsBfxT$Yek Q⋽j_ ARA"&q)uUѝm9IEy%I ɅY9] ?yp۷ԳXg4JmUebA.kH)Y 4IX VU&F>b狕<Qmu*g2Yu`{eb%?/eY6~:>^Kʊ SrNzޯ{b��b����b��;+o޾z>=6Y9<Гמ~L,Rm {ɸZ}d'3 %wL+n_<npfsmJ~OIYrsK^MuYmeVoyPN]fKhlŝWӏTdZꫪYR#_6r,}o+V^eu# .NoD4Rk䄙hmYVVt,o%7ëXAKaM+wEzbC?Nkʊ #z:~_�� ����b ��w&Vxﯦǧ[Jf*f)A#wN\(7!c#~Yi=c/֕47W_77ݧtfuκ򰪂¦ʜ\Vc/[_?{; %+&�+ V����+ V���Wb˹'_6>Ί{R89zM-k&myiaQ>wo q{W.x uK.-m{禁ԍ;qWZn ihLomNiO/ r黪94S���b����b��_"VEcˎ%{UQ[mo-m-̻Z[zM/Nbnc=j23/ZV?S]u ;A%Q.---"ݞޟ.}[+��X����+���߳Xyͯ^>~Y;[$7i<6xgGwa{sO}^@MxX[/?%YS޷Z;߾{.(9iy 1M{ wOʬk7ZC==(pTR7/߀X�� ����X��^ܛ7/^z1]*YQʣk#.46fxVe^?qG%+ľ힧 3:䋞 qv%ay7Źt8|a6'ahǏ -C �� V����� ��,VP1?gE)>)w<Z<+lR2SݻI]wi~miZ~&}Mw*:5M7%&1aVQ764ݱ콬jlݩG9_<X������ ��R,7o_z63[6^tz|mc}uMT�%̳nj:*8)w5u%[8s�/DǡH ![}5uO?P \VhkP [XgXGAQV!Á 0 ~p1E6*>o9W^ss\쳡:Xu6m);ZJ_ܗ;2\Wul ̷�a�� �VVq芦QٔQwz}dKf8993qobז%"9[a)Kfmsm6-:s=#2 w.]xTq)1!RSUm<J'a�a�@Xy-\"�[+? K۪m4Ֆg<JjJ}ҁgxZ4lˍ}ڶ{ǩ8t\4b8٧|l8Fx[?n4)zmiz[{m,ͭl NVܻ@ݝl2ejwg7+/ϋ۱l˿Ѕ^�a�4dff>%a�ZXgX+/VYVKzӊ's}n>qhͶW,r4]q5~v-i~[r.wy࡬}>q%LTi_W霵'\15sM+Źz73 ŅwL>ʒNJjSK<.v\]ckufyuMy^&K)@�+��a%##C4Dl#$�;VSh49qCj.V+ 4`Czx炈dῖDmkEV8Tb}Ddc|vDkAVQgkQ>ŠfaBvdm|6'C)3P\rPM ;jA +}=� ��tXinnV DlCXw1*EȞ5?Wr@o{O~"kґⳇ+~YOyѯz/=hNQ?M47Pq5>65-/_3"#VFiG.~Q fnBɋC -aGz} ���+�@X/GYW47/o_ ;U ;! 8T䷿6̯>".z˃[RZZ[&h[[z)7;ym8̆Ew +&wH$\X)/lЦmN^�V�� ��aePa=|٢n(hI W\;}eg:TvDK藏4OZkJrMZK)(C +E1əR.J,dmvw*e+VjkwؘHXrͪ@}<� ��� V^saBUldcæwjn;^v̔J,_ۨ8FZPJyu+\--,,--]<7Q'v99-[n-BwpJ{۽\=W[>ON^ ��𯅕׉k+�0Jg^E-/m.mSju-jeBQ*� �`cRR$''kZ_ +�0J۫Jǡ67IMXUV{Zݓjʄ���8555qqqF�3t֮ߚ,v皗ͭߦLX@X�o*11E(J � ZaѼT74~+�+�� xZR)]U!�p +J'mTVj4e� �`Xij;zB-㟴m/jtsulm_֦!� ��+R +b �b@X�V ��#!��0OGlIX� � ��#a�+�+��+�@X� ��� �VRRRnزO& |=&*Qb`effV�^7�Bװ"~{ցmĖ=w}Ņܼ#bbX,֐###C4KRm~ �V�MJkk뀿5m +aErbX,֐###yoMV��b+�@XѰ"v[n%X,-Z �V�`tvv#X,-V�`{'lܸQu!rccc鶄bݰ"VUUV�`S^!y/z^<%ԺE'Vma,Z͝mૈl̻Vu"<%*-"XUmzhj_uK~UүJ2nwdnEW 8fI;jNXXQTNNN".kVlllt7'X,뭇!11QTV�`e<3BVwt9ςw85o>I?[_6;<Mo;h\7ol1uH:fY[~{]v֦3N8tMU~*4fC>ݮ3K:nsȒKcr{)a@aE]`S\G8bbXTXkiiV�`_vݱwU1MNVk"q+kval7=fvvٕvAkJo) | }  'MO|:q-9+;*ڊmʹO:;63 Ê vz666OαbXaVRRR4?#V�`[-.n3IOO-={ƽ EWVd=<b}m7[vywy[m7%2S'|<i'}w_mxY,«mw?GI姼M~2:ǂ[{- +�VV bo|+V a�eXyyQx/;s-9PmNX9sv8O/zh˹~7amo,_5s}W/o4=صƪ+yE.}x=]5_MfgwIE�NXbkaE(|2� c&iYgw tt=ms>7Ц Ю8ԭ(=?1;άGvgXr25K/&d쀵N]귬$SvQ0vWY_s]H p|"=ۓ@_ VwZ V^/l`3qyϳڿj_ۿcBS%k6\7weCoUajl,Df6+7M(i/>D"*ZCفV#abX+DXV6.J||6O~{v.]n}N}nma]qs{>vGmXoym %t%7;_} .^q-9KI�‹W^]Q|k`7Y䚼+9=eq~JcE+WXIa+U/Z*L:7;]{vp_u+ۯOj_B]?ң;|΋L.!Ň$~v`X|lbX7[!�;V�`d2[ )))O(bXo233\.'�;V����4� ���� ��a����a�+����+�@X���@X� a����a�+����+�@X���@X� ���� �V���0(Voh``8~b;$s8>Dyrb9G鏞'xg'VUO6S6u峈cs?fg;RߵVȲ |OI(&��a���;Մ쎔(T*eq/xמZUcjdp\ 0WÊZ5f{v +{GxxByUmY "F �V���Ыc?\L\=sGFcƌ?TƯ+7~1JL~˩Duڂ;KO70;kt|wޕ,cTnWް?x^Zj>le)!`~\/67gggK;* rv +]pI?Jg⏍Ǝ;lَJvw`k(`x#>2yVIX� ���zqsן)Uǝr j?0RX-.U'J1m:+xeitIo/kh N!ZѦ{6T)y;5Oۛ6԰2KĜ *kFs9VZ_T5T7*<0}T^HV {oy?20M[Lf_BPrg7O^/>eoDw\Qk |d4qu � ���*ŋes&{\ԃ K8oXTylFiښ gyruQo_Q嫃)"y;eҡ{ϡOX'5L9b>b%SS +xk0aq+J/oPW돮R%9PC~#ڷSй}5߈K%��a���=U -m?Jfc+zQA϶&s~8zshriG}XgjMߤVliQF޺OnC +>s?ae@jQޜds[XQ)eˈW+C5vG}ޅJ\zQok8y9a�+���N~OQJՉ^7nȢc];PkJk7ҝ#usvd!s9oatJS]O[m&oV qy{ 23eySV2{ +g?;篂qJ^]#VFYÀoDNŸvV���ԪG`璼Q%v}YQ_L̬kթapcn V3f^sy^<dC}(K8:Jw'=׹TՍJUsB]] J?I~Ix>?L+v씝KUWVʳd==ŠaS=.QUU![0h@j&|ܴeWӦ?XA=+C}#~4=IEY3p!��a���(K_0k(agR[dLcf̵9C"XOǍ3S ]Twa4Fma0޺;*ї<d^C_Ϲ0rɜ35]h}[_aobv(PGŨ6`wkڪjhxOt}Cm'�f̵zX&oDA51_d~ΓFx}4zcj)a�+���xW޴7u 7nl(5?mI2N70T66V���,%<X~DG~S?뙫n-znV���\~/?8a؉S]ԩrcu}WTX8EX� ���7DX� ���� �V����V�] +bNX���3DEE%$$A b| �_aET=c~~ӧO +����z褤$12Ab � Z-����=JLLLrr 1DQVrL&{9a���@ϰ&F18A �V*..����JBBǏe18A @AX0riZlnnnhh)++ϗJ6����"ƄL12Ab(XAX0JKK@EEE����Czzzvv }%%+�FzXh4iV뫫 ^x!v 111QQQ����1A@b(Ę 12A V@AX0ÊtfJT*ryii]fgggff>~8---999))IO����1A@b(Ę 12A@AX@Xi4ZnhhP(UUUeeeEEEbsH���0b@ bC Ā 1,A b|>DX@[i4tЊVJeuuueeod'���0b@ bC Ā 1,HUE:\E++�FA+ҙVVT*U}}BbZQQQ���`#8 1A bXUή"BX0ÊH ]illlhhκ:R����0ˆA@b(UO� a�A:zE4���0, 1AU �t)Hkd���0bbStIEWU+�=t,����mX6J?W];����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/images/album.png���������������������������������������������������������������0000644�0001750�0001750�00000522057�12161032160�017740� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����#������sRGB���� pHYs�� �� ����tIME  I�IDATxX&&7ވ {G j5+vNQT^XRl>>39gX3s4B<����������Zcv?;'"EE���������PHb|qN6JB\.���������=H)ODHh L>uNJ8RD"DBP���������� =DT #% ?ǠyRډ\rN.p8, ���������xAbI"RE$"ԠO&<NTPt:F����������%H "=DT #F$H!YPj >Oݜ'*+[]]]QQQZZZ\\\TTT��������� %DbI"RE$H<"D"tO34hl6),r٪&&@ IAAPHB"?ɧZV(R2OAƎekap4@ @ #FH!HR gIM{d2HpRI5738@ @ [B|| *vΟ2c^^^ii)IH*Z"&?ɧnS":<g{(c}&۸Od @ @^.~Hʺ * HG),++C:%L')=ӞԴgCCCee%u6 0 ~̙Y9z/@ @ :_77r;@PaTE2==�$Jjz{nJT*En\[[;dVh 1- ojp)~@ @ kI7R0??$e]ETE B"]ZZ%LH6;o[䓺666VWWS9- `vlpP A1ʪyfgckanmfnci75?̼!W stɻ~;sT׿vkej9ho.Q67r2رͫ}7|!J}e+Rؾn^IuuϥM]J>SSS T"DIyL>>b1á|N (7lv->.NJB -&Pa*!>~ήȵp%OCȑrtL䟺Hi6Ҷn"!FJ!C~ou]P+;xX;~P/ZFfw"o;i}~Y7%BQu( :ͺT{ԝ*?ER &Lg)˅B!Ū+--mωWF9qܩSS@ OB$ eiYM25)]^ȑ&S/=qv>Њ>V;fki6>֖ffvVɧٟOGgmls J˧=٠vdlZq03ꛍK7/Kwn~ˤm vR{{9Y6N"Y;w8 g{)-m<}nrn5T=֒mavO¡+Q v*Y@T}uy]J>T"D4f|R d2z೸O?2̗L| ; ûS@ G5=kgalkco)R=.V6:rp Ns+3"9yUotq<q$Wi*\XyU|wEO>GEtZTdW/?g3XB)Y“"@{nOxZw~-,m&xwdrWMs8xF&{9;M:sI#Wט5ɛ.#h[Xq/(P;6Nݫo3bzU%~]NVڠok>]>"[Pw-l_@ o7vQJQu)cl-ygBBBzz:JO Wx>O@D )eOg2f#GS @ o:a>/S rX-N>wɧKawZڣ\Bŵw% |w|ORs;B@usi>U)!xkSQyb#77Q~t5g/]V%߼q#1TD9;/.﹎YZ=i~pG?"W#HGo_g+'2ςw<Q'<'֓}+g`x~䌱RwЁc'=x=ѹ<d>Kyc޶`[냳7@ ۍNNy~y/o罹"Djif[e2555|6ӾӯݝZy B ;@__jOl-u94G:Z`mbk>Z{Me'kIuSߠ|jcmccVK==m` zu9裌mmLwco'8y>w88>17o+ ks3[k[g{SL _vhj \l<uus(+=0nNܶn™\--lɁt2(UJn6VB5NvV/P<Sh//O"DjZְ|VWWYl֒<zݩ@ 7`/֙ϝv>hgU'&џ$-N>6JX[؆x8zlJ.p%.eZ۠ɧ~O~y=SV~ :LdeniL=G}x= vIlC>nE?jz^P-;+#LEoi٠(8:yXw2 w[b\Nman.8{zC6{y" W%�>v3IMdd!X?QIyu)cDۺ줮dnm%g\\%H-_@>Q>ߢŗ {t@x|=e ;l-,mg>36.fxst[᳙ϙDkKg[Ķ4fino5qiN>;V(vnzgݺ]5ʝ"?>=#^ۙ/^ښV,usGzAg's^ .CgG]u07N#owXwoQ2u)\`lYExψf>9Z;ۻ:8y"y89t2`/' s;3n>@N)&}utU7t ym\gۗ@ V | T@T=ٝ-8Ծnȋ'2>w ԴgwjA wH]hBS%iMg5UҪ~^ޮ7h8˔Q|:Zf ȇ9)ׯisq񬔑?g-wvgCO'f&_G'*%/R>Ձ@kԁL;;GD?u!)bE&ywy#B=\=sA3&1 ^=1%5[V/߸[pݜS9d# ~W=QP~|LWێFamp^zCWWiomma:訯iL*�;v3yDJ;OTEkվT{EgJJ JUݕO]o~߲ݛ}3 @ޝ:,VI)ђwBG=\6r1L,Oۿ>Q'A^n&fq M5wOnvvBܝ=eT08Ʈ;N>OdDaf+Cy'|R S27Mst";6b\Z@\-M9!3omEyuml;{\6]"pI?K_>ld jL!̉=qQrۭ{ӔM)-j6?K%OռyQ8;{W?\XSwXA^.NKlܴ;;~q fJ"[T@TUiS7UۻѣWΟNa psv17 N#m(2IK 䍶V6.|ZR<\mɊڷYZ88hEÙռՏ3ڏ4m!nvquvvl퀻 Q-H{[hM[ѦK6Nqu\{f1 K'6u!7B(\K.G[utUQRuWW>@ -fj@�OgusCQ["jׯ֝ytu <vS'fy{5Syί閵\f?5 IPjUyu^Q>'X;) @ Ow7?Ok%M qG-ew\k_sq@ @ kϔuTݩٝ;}!@ yI\xq+#A @ $/#;Ĵ����������(s����������y���������@|�������������������@|������������������@|���������uއu{ף==8Z(z5.Xp0M'n+g~GSooZ0sᏇ/q—hzBWʢI<#4 -u\rXD5Ϳ �������{ԟfO]qO%K'|߹}u] ?jiS _o5򠺡aUٶ4:sN?k.}_|@~X ��������| ;ČeWSy#!?hi%S]cQ̊;fM  bj' % j\rh˪)AAW4+Emv귬N9<'p3g.5<)SBPVl>\SUօlvْs߮g|EA?^.l_/sm8:sp /2ݩ<ng,q`C7; M{2 ]ASSL8ESžONۦol-;{5B��������^7|.Q~;cy f׹|oɥmef5w}Bgo=_" )LykOĶɁ[u.[j='5^9w: ]\w;k E<xǬ{N=im'_7sv '";r~6nߔcWjp˃ TK^KsB$TF>gk/`s�������ɬ K `- Ojt)x_w4>:g` po@HX+OI}|褴r2}|sH`֥׵]¬؃䳙o@}ԵZQCn:wژ[ߢ(eɧa$>n$a3au|~50\,'&18/DkHg'm#?&oܩh0 �������| :�ѥhcCX[Bf@Y{|&Q|^m!A Wz/NE:C^łui᱔V8ZnM*\){{}|g\CH`7Na]T{SPc6j*ͩkk6:iMݽCB&Oaut2~3{{Fճ62+O>Ϭ:Uϫ?Ltev?PC&nѻn��������~?,GmsiTM]I'|#!jĐUm|U7{9\UfgG]OᐤMbpl#;%|>kQm'OXi95c줵ϚǛ+:?oI;n݁,=cNz|_9U>;9o\[rP_�������wN>peW8<OED<Nœ|fl,/FoTa Mޞ9s_frvu =P£ k/UZo^W9d'+ǧPjǠ;|w|ZB mAm˞6850<cӋwqS7H4uҚػ S?s37$vpI;n[1wĉ sBRiYyI>9ymc]g�������O}峩&is/_b&J>h+  ӭaؼrrp`vۼ&ΛOZySCQ7~B趵SCY|`ۡChݤɍ+̘,ܽf)C͵iW/&2u(J;6=^>;l%x,oo -gvtNKm]ZJxLkF>&E^0#$0IL��������|�H:�������ʧwW~Go'������� �L|-u�������7 '���������ǑO����������t�'���������ǑO6����������tkL����������&����������9 ����������'���������� ���������� ����������'���������� ���������Y[[AhsҪWh)ޅ�������-HPE5NH 78:Ż0R���������5϶M'F5 L$ J#Vj @IdHIHU (1q%F+#HDo ԸAl-yCA:'}JZ;_*ӕ9dib64MK>OܝaS̗-������O+݀x3ZRB."TbHA +0Z@Q |<"T0 �������ەO$j4O/82OIEJB$SL|R5!4" +U| / jYG-~}=xz�������'nuM0}R59ɓcl'WAp_UXIPh%UHt J ~]á=D{ PfX  t3b�#CMlYҢ)cM ;˰y?l'aTQ{*z2:`А ސs}~hmFu\=_;nX&9hQ5–YPn1pȥX{*o,4vQL4M{ť,pnЀcm:G 22b2wdzrGx�����g$:Ng%.f2,*) c+qo+Y*LxJ5C&g*r9OK0Rj c+T5{-[`Urd�99l2]6 p<h2z0maԣ-_? _o'd8ugm_[=@[qƚRG!=L̰1H6e4b`mj%S31Tͺԡ)ѕTuNs +ޔrkL35lFw%S ˧L4= %,.,A#%OKi <>Q%໑-Ÿa������n'Bt1Ik*q_s8.UR5)2!Sh P5BE9OФP5 #8DbB&ha R.czŒ3;_+au$Uע k[%E#g2&ij$,zٕ۴S %d-nd78ksv03k9^՗d\8(rzDa:c'Na>>*kCݣ&f+/;VK_>kmӾzJ mTʏo9a%ݞ#4b������|Y43m*\Vid|SIDOHWJ&Q8M /KKtfX,Q U[" C|633uS76g?ڑ|ʤWODž͞=OjTuۥEcd4tRuȮAU%hpfQnam:|ӂ:]/N>iQ{2(j{E;M\g{ciD.S[_>6 kڒ,M=~}.8m̘1&V1d;y'������C)`0%m5B9`<YD-T()p(KŊ8:;_*%\q@+Ijr\S".QB%.Rjr}O:?c=oO~mgYg>տl,n2 2JQ}%1 gRہ+:On>+,M8ICϥU|cӛ+douKE*g!g1t3Z' m 7~5ՠ'~^Wz{K5~m?������ /$m]ZSlŒ%Bаejȉz/rTEt4I V0$ 0TZ25ҦYM+vv͆_.8͉{5&,'OPmbm>NJ'z[ {5o'jK%|l6Z;:pj&}OwU&)ƉCM Dj8q(r"6<;˰A+Zn32u)>Pڥ|:|Z.[d(`ѠѺ)S^������@>_|RυҲ'jr擡U*ʦ8[N%&+!xHMertN:[T*UIU"e c*ZA$oc4䝐ϭ7bв*++Μ;mPUU|vksV#R+Z}vA[qG_|QTUWEeUC]Zp^E&'ߧϦE-+Tb^A:Jl[y+.M;"Vvmflޣxr_a $gnU4%-iuƟ+'-Kk+|:fWSJ_'Dm=J6xV^i!eķjhcIig5eWX;1 WKXy+d&C �����3W@>[ ^\>(1 O/Ufyw\B[EI4+jVWI0xDǓTHTe"y>[e <TQ-T4Uei{W場O6}#pط:p(;J֑|8;g>+XxI%+Xv>>OՃ"ܽ:00` 2x}^AÜJZL_>%1ȻL9w(QtI~!jixwǏ:~/PۦƚcԲe!jF90UueN<d/1}.؟OmKBIFTVۤ]'Io!-e39-BrG2)ok5 >[0|ƳRm-f$b������O,e4x'dzW'G% jifB J 8 uX]0D2*q\Q5U|)MKzQbHb4#O]ϦƦffܳogl|L͡윬{<ojn|lޔW?}맗2Wհ-]x5=&]}-:?."r_NnvCh1q߃ޮy!40xx멋=yvhjp?h "nz՗ODuŅ}Ƙod:,t|==؈aQ[ta$߱C 1#pڦ T*f_>adCoZgS779?'#{i^тC~q<)/7n0#tmZY,1CW=Y ������?ipxٷwKͪ W`+LjejT]+PZHbIj obB ;_^Иŗ 0\PQWTbePQ%T2*P^+Ez'7f]}鳧N>^RRXWO?DE9yDYy1d2^E>K2k:JmJQ 枛DT@ۯ(èۥe'?u G_>`ѐϜ=U__w.[s{ft|K#If \yMO������O%_v\J81\/2O\#V\R TU5be2S*.VKdM$+5,9v)^YITG5ʉ ^2)˄|H((JwE>kh5*?;1)8:Β`_ĞGtګg~ݪA'rR~݊]ϞĖsSӟƿ|nΣ!$%'Ai/By R B. Qzv@4o,lIoWO�����OdzNy(R&c<2I#W6n Wђؒ&rfBKR<:AHXU*5GncM5_%"!W7JEDUS<hpO|UWȃ/_XPWTRB:t+UV|fU/K.؝<. ɩYYX7*i^ЎN|S=GC@AA:x�:;.:}. A;[96ԡLT[�����པOOBN רq '8 `<J,䪶˲ skMlPIդ|U`<q JHBEje|9&PhJ@A~䡦8KgEUbE蝙,,+,G7n]CY9i)P^,;'C*V0Ч;yX^4vǙY"GA{ȋP]'5u@>������=6O7yBIH*8OA&Xd|"{bL~ GIj\F+4jRqm=Q&0"!K* p*`0*|ffe_8qJ㔇(ԡ#Ϟ?Gųbs<:O\9?|6c閳t-0s444QB!وC)��������bt[>uK axKtZHSTt-9*^:R}=|FB-$ Pj4 %#_o,>p1{Zl[Vߦke*^\'''ÄJB,ǔ.SD\z3~};o]KM8!!):D={WSR?@PWSngt;'?.Yv:1#ם nΣ!\q G'&:ܸu ]t)g>!"|������#D>5ȧ.A|1R>!RxHI+UK,akrjԉd25.Q㘊i*,_-HbZ/Xmz$1!{/[ksbL(( rcT|"J~3'9wa}Ct:S"Hx|d_Ou0ǻYsO%=0z1a;n8̹ݢahhΜ_ҿ �������g ]{]խJL#UBX)U7ԕJܚRX{-55!V`l ҹ4~k{g:jvV^3zyW{.'L:%5:YSe85"ϸ{ ڿsޝgΝ}p{>u1ѯ"7|/?mT{YSN<h̒C;O㧎ݷ{>0O;g7t}:i#ה^⻾̤ՠzL:-;tVUZIXij������h|W\dH­'Sɵj8CG"82S)1B + (KvI5t<$͒Ĕ}aϥmIx&XTѨ%3; tA\!Sa{W)Y{D?o޾kώW+ݢZr1!xυGΏ4wK|Qܵ[oη:kc_D"y 0`tsXu2f+6mei6/~������wW>[EI* *  gɉF9A+2R)W2GejDEH_i.3^s&ך~+laWKpH}!+ϙ‘wR|}pꙏ?BSjf7qdwG>u̹UUU9{\ݩP<r81w}5&,'}<}TUu=wࡎO0tpcc+5\|]FOM|ŲvOm w+ >3Ryfk$2݉\ ts 4d*h%e~u<<|i/ vnOTfcS|ݝ\&~!cM>2`ކJ3nQwN������7!G=|-4< *uxJ *W`PFE JVDd3d~ΫL6\:P¤ U2U@`kw5i_Յ¯UYѝ1精Ok\Aǖzy!<g~,vx[GGMmrk 0R}23)ƕIy7=M$CBU1M-Qc7eujFGЄȻ$s]S(2u\;ѷv+E-n[,\.K4ZNͬ枟Gu|rzK磝OP9tZ~ΗHM'ڍ=}pGt}�������xSIRKumO  #)Ra"WL9Q#d*9y;.&4 L#SRLuYǁ^/~tOQGk8_N4H|GA7Gݫ\.]Z縊\GMwk7y=7F-9b:i琓76gv]Im$Q"k9hjx獙Y0kWG3fɠa~.E;y3FFCE-w2b;Ѵ:jpqINsZK!pNٙ 6o 3ն bd4-uS>uv^}�������xs\m '!DJ)m+V%Vu"PpJQhbb5QaL9$Sf Yw=l~k?q7wL(cI:W$7³^j/H0"¾ 8YzY@rU\ي%}C&4>pŒ/|./k} 15_҄6K6LmT5mIt:dvW ȣoxRuխW|d=ʫ;>p=uF055K)6 �������oZ>;oo5P(2O|K _@KTH>f\T' 'a稉ǍEϧ[y=a>Ie{,Il,Q]>[/)\k|3%ؙw_·;zDf|~ qz擺Y]>w_X*.g-'{@\.<qfӺTV<md4ynS'gy zv9#k|^hdӷZ:٥|"58{SYB������w<󩯝jB#Qy OZdH%O@ INNNR{{fݽ?7ѣ_a=49) qӺ|+WG)hQ޻.M{UOd.{o}yG7=/nh<jդ#F80xel ʧ\.3nǺL,Zbcj<!\i]AG,L݂{uTa6ot/&c&eR-Nv)5#VUn$|v �������W>ۯX'At(m0B5A>$ *TϖiO\#4 La|w>UB<5r͒!ǟ#y`ӏ'}bzIh{h|lkE f\s*tK1U!'}QYQ5|P7Æ*Yo[w9&˙xHyLr6u;tm|.=lަݐOWyq8aLc-oRa;o�������ެ|Bt!$4JP亵2L#s+TlS!1\"rB -U Ž~vG>ߦ^=|ҿHqWF, '>۔wsjMO>G{}^o$QEV2?|vLµ4p^e�������s!:{ 6JB#ך'RM'Ui \ĩ~0#x*FrI<Ye{۬?=ٔ>{x-O9ղZ^,3T\W̹s҅Oۓse.YdߢUlv|z }+s[.^|������g/$#RAhxr-Qc<br ?y2N:W' |X1Zߎf5˟>GEЃ6=QZ۹c󟮉~}q'=~G>;RG Wi#7A|sIŠ|#SSacO2A>������ݔOEѶ'_ש7vJTQO5b5 0c_Ip8M>22ϲg97nQm}qQ1ȬY}6<z{7!RҢس/glkș>[>8p/c}IߝivfX^PbM6O䳶6 NUHh)ޅ�������GOΉw*8e(ڛo.5JR8dV,ȖK-}=V}G?i^w=[6Ty<W^tDs7&T$2u ?gnVmks߁^}ۆQE.14[e oC>��������ȧv[O S")*O?q\c5^*RErr$5 ׅ/dZzusgŲ_Rhǥ<uL0dNOK?߈WKJ1ٹ\!M|ȒO}t>a6ըWk[ WyE)'��������+焓hͳG=FBF"=m@7K1RV` ^{h>kb=픭& *l(/_fjco|Rgo}tKn|s̟ j1TsҜWP'4 +5'J2Q4++A>5oqZu:FǾ޹bi<�?yHk?L{_.^->.FCG/j{Lʷ6wPF}W `:zѦ| ������|bxK>߹JX91B U.^`WIFޮIW?_-ZPT˛ <|icԚ>Djn:Oq6XőT5.&'Wܯ1:oy"6z̹O~~XOؒ4A||ENdԟR2d| E_֣uWoʦ &Өm_okK'.ތ?^>Yۇ22ܟ$dܲ΃7����� yRU,u:Tb%&Sg;JÑb,] L0~`LJ?ntƤ.|h?.>Rj'Ęe諉=\w_ecU,̤LIpEsR뗦:*p!ȯLu<mw/KE] J <'׏M20h}Rò :zFhcO|tef.aW(Cm5q򰎪"leaÌwy1Mkhs޻sVQd|yrhGD@ιl7!ps嘡CMY[1&C 3S_<"x3V n/)g yV8vz�����'I'2OvzOܣ}W N)0zc+'qxs)?<Ni\1.lǛ~~g7)8Vk0 T@i1' $RYݟ OgIz#oʝR)Gg!g>ߧs26k0kjI vkP>[y\בhCd3FNJyAEc×O62pSP®ަ&c_L8\)ٖyX$-'-߷w vu]}c`ql`u6Jh#,ܰ7"bӪFIU_|~k^Ԣ'yh.疵u jjomDTDr&/R '6!::A<B{) �����>':éҮ[a  |#j@qUr1lkm?lty8vu=O{ο/웩 Vb %MZ-SKw_wã\.:*wOkgg6MJ}i6o?O1_l|Ծs.sOV*xJE1 u|UT1P~OV08ls=i}FbWG%Isb,BR}`rjtVJ}s*1lœkd$-Y֕ ɽHnU]OX"s&M}i\g+RB#cJ8AuEu0ZA'gl/|Uc./&R �����Ojy*4-1B\Q'Qj4OF ۪52!T ̲K`ެl >˶]f92W,Sq5fcxH및~='߮|ٝ"$w~O~+L*;}}5qox^{q)wkY}|:CP(`_D$zc =[H;ϟrk#;Z׊ihz[Țqǐ'eRަY޺'E]s`le:OtU3G>wknG[iZOg}\fŝƏ777;|ɤ$4̽}S[Qn[a{,8e;ysSpil9�����gCRZSj*4 #99OAPŞ!ǒ$늅⫾:c_ߝ)ב/a86)GJ\-ÐbN|V?sV?Z/.:~赲AGsOu0vͲǕwX;֥oɥ/+;|5BZ+Q|Aw~ga)3̶+lo_;W-L~};6e\4DN|.$ob %w٥#V|z*h/׶p\3nK/^>u Y ]C<˒OjZh`sUqqV3wQݔ_'l*mJ>eWXo1����� vu+X*SW0q NTX7ʰ|ru<fk1,#>>ެ~N`t-Wp9KTD_s oՒ#sL3BQNEdVϹ9M ?]O?txǣzvDJDʓ wi}?SQTlE6Oin�Mp =Fg2m.\fƣ/_9cVmuvDDF[ଽv9)fh~{ۆ١VA ]v).t׭9LP b.0M'qhwF۰A|"\i]ARZ~32I 擷L*%76BR#żW,rnpiL@P(������r5rr!B\FQkV`\FHڶj * 2u&[~F4#1I_Rٽ/e\}er:[&¢PX_0 z~cURzX5}硬9EÙ'3.OOčruX\V%SK驼fqHSMOkZNJZ|NoqIdJ?5K<,49RԳةǎnԿ#*i83sâIF3o4t{=+fxWICF`<"hH ]>W7͵p )s m2tps$,oh<wn@󬎙:nHm&M̶_d�����?|*5+0r\-! *5b%M(9|b%AOi5Xy邀"*iV:""R{5HO n@9|re3ݙٝ1yTc)4Ŧ`z­&t>_'l`pg+=BT182>!ZBc=kQFapIM$D�ZVՉc ⚉ ~(m]R=):XdW ůï'0*?������#\*@Xha>#:yOvBc :Tw:X661xX Dyq1 O-#3ۘOHu .<.ulܶsT.|Hich\l;ޙcv&4K^@ >z0/ o~1k&6Q |.YdѢEi||~Z������`�3D r TB># 9Col"PB*O@YVK椴UuN#Aq4ngO ;OH ٜv6⑘M A‰knDwϕ:0~qte2Bd:UWDU+$R i\4C򙕕5[Ff۶m4ggeew}W[[ 7'�������|fEOU6jڹ!WdW扖u=[ODY]Ag"/O.#ijFwuܺuj2osN*GԷ).Kv"je Nle ):ka :O׹;qVVh>N+ٵWG{@OlG[OOϙ3xϜ___lo߾]OOnN�������'D䳞!8@(=#$r6+d,#D+z~F O_A 44|b+ƨ < R$�%$:IL-z|4]Cai|L$ A:V5[H'Z<QkK](!Րtmo4*k6Pp˗- ^B>ݻ7eʔД755|�������9'K zJiicqy<?SL02x" ;]/dCOD_9N$'d D#iloe57q䶎F43 a%SBS^[C׷ $"1eT`D-6<vĢ#⿫Hmuɫ\#3P~X7)ckwY +YRRhѢ=(%D;WLd||"F|`&OlϘ1 ��������|NwRKEhP扞-8|h'vy&G |A'qN.W( ܮDYa2$*3|L%*̲vNj`zV;VRnԶ40nV9Y#"҆1飏'HZJhIrj O:lVhݟ1ͫʂGsp?{{~g%cF|ǎ@3.&q7nܥK0vvv6l@6txyr3g[,ui=_c]2sK֚(-.5ϝ5k"A& �������חO>/jm%*O@ N]$sL&h<>%,RGXjY!�KRYTVt^#ӥb3#5ˣ7a>|_03k?L89F/BBw̖=@j8|KW?iYspV ־v޸f0o* ]n6)dɒyϝ;{"Âo͘1 :vp877իW[,z\R\{% 7s\F45߹3w9v`iڃEDȆ{3lll$H �������e'G r[ *!r">O~'+јب\&UMccht^csѼ�Jߗ^%MΦ2XnH [+aELwJ]\$]s$\2%.猽lEx16ZK.3)ĂRۮ)u9k_}szOҘYwKh$'&!)5ZjM;4Rs ^DnʣȠnyz ɓG-[#򙚚%--ҨxkVhvYsSt`I/+kNfts=>}JMΝp-_O�������cd6;hAL"dz4hm[._iPgvzduUb铒5a} ~3osw3s7%bVO-p>iyXZ%B%DI:3<luUfSM,6U]b1aR6I)c%,|bGԕiw)!>~hq1ђ'IIj4RO7.Wܵu6owgܮ\@^7$h`ƬYBBB'M֟9o %K ̳-bz6ldlԩHiȟqXu~&%%?~y������/M>9<a:m+!גqt 9X\]TOg Ҙ3U[]9֭q*wxI{K;^xȯlPQR\ 1SŦR e~[!>QvJ.R4 {:E6u VhX d4|kPsΒ:1,b̬]&j kt%;3RSn&֭ˎv.lN;_<͛`ֻwF6/^_XX8nܸw.BS}}]~Jyێ 2F~j}t!#?XƿӧO6�������>Kd󄡍dT? hl~6hIr ]vV'-sN6�iZY:�K^wZC♨u4\k>8W?Wlw⣿=+Rbc~6nuIh)xIq Az>}\SCw!yO7WX>B.sgZFfZWWͅLI" e.[௵+zYO[9*!.c$ǕE. ϟ0a[1BzAڼ{sZI/:e''�������|IᳯT."-V:N#j5-J$1H6z8'$!Ҹ~QXF:^,%,۳|Jb1e7upJXIpZIm3'OUl'?@9IiN2<6-$͌NI*P+ ]Xg.ϹW&GIm\A򩬰yܙK˚5j  B:t?"""(38!4Ҽ5:^(keebo6������,$6ߺ#SpD_CDU5ۗΖ巅7&Ƕژ6&3$6 !sB '~JD%j,fib «&C B7g:lX .+N<S79ת5J?Rߗ[||g[yS°(,3YK.#.=eI|=T)m嗟T*L2eJXXXccrϙ3';\Xʲ_!c;jl%tA$RzV]gVL"YW�������Kv~vo&,WSPY^uPJ39EVB$Ո!K(BD54v9GfPu|F+ig5(%6tL&RB BP t>gp%ıDA^ƿTqRpX2pV 帑"gϞurrXh77qǖ {^+x|tt?tŋ6mz=T҅sI.Ykp ߂C|ԗ|s>͙5kB9�������Q+u˳f˿ [KP\ zgREH!c[h, GK52- %N%Ly7R5qLO4Ѯ9QΨKIVJV[;v<n'' ҹT1ѣ\:$;V2ء-عn9NEmL5j\A0Y'KIˢE *Q<iH7n8 m-w+w^dcǎo�������>K<S(vntݏ PHiYT8YDփ6zYJf2 ^-a:"" *pPiX\in󪘲K5<2Lq8<L19TtJ(tvsDdE|KHad1~~am|X̼ʕw`gU/zX35yvX(8WG|)++ vi|/4h$J ?~|NN@4iғ'O@>�������sq,К�33Q Rs>ΧфRWGaaz*nf (Ȧ&F]aGR̠iw GgO Z]n*jͨƫUOl[7p<S-PپhMqӜ3*yH̱!iEb˦qs#Ġ Rg'_Mxx\RNI~S|:::"lߺukʔ)d2�������I> ,^մḦՏEn.TnVR^L3n}G_Hbflt BE[mJzSbiK'H^ƫxl+N/}rZ@d ײ.N_q̄fң< L`,%&5ϼS1Rʘk\%&7-X!fkJAܫXiWZIb R#W>˗.]*=[>D"E6N<L%�������SϟBj/)r~Lӟd>ݟ^Mgz`#ͮ{Mzr %lbqt:n;_;gLrFX"qlɳIN&C^'I8PlYı')]r*TQf̖UJf~6%u$vy/icND C/_]Ӧͩm/~8vdRyz&q!}D'@ptt~zȟsٰaCnOO��������>u-nM)nz&SŸ&fRX!||p,o_Jna8"<(]pxl]v^88B\OR_\6w Wֹ^~Il&71wFkHc6vCw"+8 @m%W_{Xj[%-v]\r~*ҲaOʿ-XQ(g^tbƑGt|,eZXXp+'��������|JG~_:9QϚ('65S04uؖ)6OlHnVz!UIW7'o<vTS9jՍ[zoKI|<+Vs-f1n(Oc_'&1MLk1o$~KJ sLIȺo&zigBKCmWH~&ii+'��������|Nο컠鑵5 FR2̚vN&svݓOmhKju(@4Lng&eJ#c.VI~kB*!S(` L.:<-y3RI&./Rf;Ml%_9ZJz؏L1xuYs}N w!Z9!y[cW\̔z2p̈O*J#p �������g#v~Z$fCg <Ѥ-L|G&~Ct*Ý";U\)71Mѵ餶Wg⧇W}uP3ɿ&ȊUꛕ7^jsP <!/+ '(qľ%>y9bVOKľ%>iub_^Cj7'ZMy~ٯ7s?IïlExPIÐrm_Nr6 �������Ȓ%DUnxڲ-pjz0B9ACzrтjd =MuُNɓ.eM<5^?nAR;þ!)d ;|!/|!ω)L1 O\fOj&k./Fӌ%،MjssgkL:a]C1Rƨeg$\n*kǯ��������`daTRgVy-&=)-Z6G5J'qTƍknAKKDݑ 'ϥ1Su(1IϜH`N-d :<!'RP6_BGL߈)69%&yr&l?$ri"8c#iK7]lh7Jߨ ��������,xhY\gX,"uۓTZ543|ivnFs%Ld60a'z6 _8nX@ɥg-8*>aبSvɧ[>E/RQg/>FZbQ?jIf"6?//upsm)zՁOԽ;x@%&ȞEb1Iƌ%.6Js�������>?$qaLݎM8VܑfzfғZO[UUQ<ns/<Xr3,%6^tQ߉D@*[dE/W'- ''.-6YLlPLBl՘5Wޕҹqa4C~^|5cCqxI1rGO\QF5Jl(Q7ZľgC|~�������O]>?W>|����������'���������� ���������||��������� ����������'���������� ���������|���������z�x<dx !?|b0X=d,}S֊C(P'�����_�峴_ i _�$KF<�|Zqz[>@���೧|tʫ@|D/;!0*��FxwU+]||���)l6R� �����'G ''�@>XDb#L�(#(#�. ȜOK>x|JJ  �*21]圇.D>sss|ݩaCGѥ6JA>hPF�\9ÑOٳd2 I' O�փsm|`F|:^<X}[WA>hPF�\9O6{|AVV').]|+XǍn;;owf[|懆'~|+ʈD=cNM V|P�$ s^)H*"_Ϥ$. O�23$sKV$|^~-l ߇_qyq)^KWsԁ]}mPƪ 9,cR elbG-rk?I%3,mMi=5][-a^G.Wާ~wYsVĥ&;k U=Sz}f;>%1t! EۯCzC Ey?AZnʺFf<S_K4U.Viu5mo }t٫r=~xm �E'B@W,xtz=Wݷ_pQM >aK <w=FC?rmztig}! WٽMt0*Cgx+G}W>|üziδ._:ΘHg:iN 5utr '}Jꕹg{y+J>NQ7Ϙ1N&3T18 R]r#续>| |niʊo>´ibmiNĽB}̊Hm%}x5q{:< ?A>3Ϝ]|YXXp LA=VRH7^SbAL?콬ren"kؼaŝfJ9k3GFv.=:H%ƪΟ=wQ޿" le#mw\i9VZjARfRqDv޼yPƟvt+/dP̝isE,SO]2[ܹs.Yc"FklGB_\ Bkx#mZ_͸FoȪU8H\1ݶa]KxeG>Mcoo^9OFfNzR~D|JfvOxkdflT;\Ii<kl ^gح] V9=P[NNh2C> QռZ#y>`?7iE>';]Y2jVJ՗_7{ƬOX>I-vÑ͹N'Pj:vWۨ :yH碙y19TWUI.-jUG@_߭vB[cC|$ZXyj/rƪ=HԷφރ/D>+ ؃.{C];yJNn%NK%6Ruuq#Q+sck3|CʛDu2mO`ɵ:<c>mO2yf7}#`l6/tԻBgtoX?` e68ς 4|iBwnϐ+C}NK;7[NA-6[+ϱxڶt i6ߑPsX't6IW?K'vkf,QL4 SX I8MSS`u'`K\` ^W)͚0d:?$ʬ;|o6vǖϗ|O2?n>|QPo3K(^'3\ sOu5mL:Vr'`Ĵ*L^Jyף(4rFR]n$S3Vmu>QedH^dFk]Nݺj6)4JkU<j�7O2Kt 巫tEQs>Z[N~oӊsV W̴-2Aj/I L]e74i|w CI#`8> >r2NHC7n ia-=M l;mv8{6}W3_Zzv(l7վm"ʬFxCPzڴ.3ϰ؝Q^3ʨ|<w6:^n.Btoul9hΔo"^csg.u2Xqs\l6&^jd+s|xf-4wXIGOڇϡ6tY܋<{1|j'=hCw#1R| op<bj$/gߑUVWSr#EQ٨G)Og5 s'/QTˆ:?1,ꫬTUPHi%|c1/˕WPQi ��|RHج'գY'%f{wpW3SΝ)(̳<d=G&9m߸lUV-7c~RW̹G|Ͽm=OaFp}LEb͒,|.Tщ:>Was6+gce"7L:`^Cn1P8Ϝ^$63m Q<ZJVƸ+k{Y2+70ak::>5`>|i=V}ѓsdzj| $䈐:ej.V5)j׮]3sht#+U7VGGNBNX^~^/P(T �'FN \g=-:'K>:峪v'v--66G|: 3ϋ̫$5ݭ^:�=*O,[LF>l0g 9ܫ%̊?B?1%ؾgqbu %#nIKiɱ/z"6ݓc`%5Xv 2#j==~׺zvΛٽ?f9ؽg`9*|8`u` 1mڴ#]n9Ḋ!.෬F|U}ѓsOMn.3>>ʧQQC"oBB,jr坫[z>Uzz>K^-%'LQTtA;Y⢥j>q>BXAqO+O��-jDl:Fw%` k n峺r7kOZ`² kvm,۾ZS'XP7*6kܙ/Z'cl0sC@%ɤ5VҼ6yy>bZm\ ZR OY2àm1=M|)ZeD2s48z4\6wMΤZ/ѧ|6gZHKKż _gY>9XI ]}\La1ۣUd4 En.Ý&f9Ľֳj;Xp`ی:︤cYe4:osE<<k!5`> ^ռU-s<z̏!haLʗ뇊-25&喯|/ /D)4R[Ó�[yZf7bTqjKڀtΧmqFNuLyϩ2^v\ntOshW^ DDl}Z|v �gn" [md⎠Uq 6? <k*}nz&gX}4jו)o.ٴ\ZI'Bwk0;%,?g뷫_ZI'^^\gC̗Kis5EfɚB\HkRYшRֿd͓]]30C,JSVQ>.9~ kOH>=ȭy𒱷7~(53XI ]}vyk<}+H<ڳy_+p5z3^yLk7sl9]'9ݰ4!V/)-=CfFy-Wk|yZcy>X'7i@>{?bZzp^6.VgsdWs3O*hgwsA/YTSQUEi^ T# kPVvT6G&،go# J99��|< ](MPj)_(K@R^>FF=G׈̳E*N*ύ*ն=Bs4[4|ZW )kpI|S>7', o\kI 83))ɦ.PO�D"e%$?X^N>wgctì`4bx|}-,**,*.3zg7űI^7m~-;A>?.4:4  e\9&Q2 l5RGecc\�KO*1LA~RkSq4D%}YuURˏBy- @*܇BbbEnO�Z��ħ9-]pE+ m|io<B^' O�P-Ue9).s"U,.) OKO: 83e%sA>hPF�\9 ��|39(D>�����р|�''����� ��|����� '��#O>s�����\}0D�;}d����_�. &x  x�y8 '����|,���>c ���� ����'����� ���g'/q Ni��������ޣ|Jҹ<����@>A>��(Mk5mηAA�������x_Hv™I58DMQ>,4T:}lwQWܻ'kZ 3-9+罪NCpmInGlR>9ЃO5(G E xcgw+0~鐡nEEXP#^U%%UMϗ{Uۇ#|On_Ws jﱳ׊)lO���`g-|a*n2n;]u}ym1 iyy1J>pEyps˧ypUbb=ea}+*a68(wc:8oIO*D6}ȗO!}#?|b*]šf:RvHuGеˣ\70Q8)37l7|iXaSV{L?I ����F=UtCC၄|aOgթrѺ%OewJɶ_>]RUUFi] g5:ZkTTUQFOձ[|&L�fcNit2%P 9#: %icQnIRBCmTĆӞQE`ϡ_9}Xz sa8< 8rX/LTX-gz{1!q sc1-1Ffy+'<H<Ï`Bu6Pa6'ι6Ք {`y29soO~ ]#ehE%l`|0ڞjhڂ{'17"^ΐOx}z|_~Öx6y` <&0w֏wljAfvZZa7x2m㽷Mn}x*cuW.&zʈ J >n`?esm؈eTY]iYs=|S"InJF%)f"iݐ͊Fi#_ ޭrv4GέgOy]sw &R_'2Rn^k}eN+ֺ@u2�|@j|b $ r򙏶HPJ,@/8%8H_ 3S(b#v+fsFELR3E&e $:Z~w #0<DGw}E,<}9p-1 !#抱co+%NQy Q ӆ_> E}8Ǵk^| +jH> uUy3BuG<4<e4| QzV/=#ݽA5c(ag,s#՝B%J>;7PZUPJ?]]`0İqxC[leH/YYHxNe!�Z-fj~Cd~7- gPJ Vn~CH>ij*l(8~c/uҾ QD/D>CNjW8evߛNpuMG~瓽"RCbsBSoݼaq%&LwtKNn޲2iYrzx64DxR>3Z^A D&UϞ>eVu03;hldpno6241551=\FO"kX._budqWc{|flOwD\5619Z9d/:ANAI;+gM>mEvOrw<-5 #$*!Ɂ&&Rۆ0|A3 z 8`r_10;t]n|,a;|̬>_+T5<ON>{f+aڛ"{T^^eOnæ>CB_Q. ֔Wr$C˧н?Z̯/IMQ!򩨶i0AV9p7ۥЏT/:Ghuא'ϔ<O]BBxϋ52 !J(!x kӞ%//Ճ]a'S^ ͥk*`v<9ޞ4c}(]#RbXχ ϧ`K&1Ita,yPH Y{}FY,D继>x䉣A#}b<ie/F7J;D-ⴱ^UzcRhsQNg|S\3ƅĆGܿ媣/-㛙'Lg4D>o?Vϔ3H #<<\w.A„6uYws)l7Tm]Ո%Rdoُ9w:y[WȡIbXC`bn|'OQl-l#yYKN]KoDEWbEyI2~0|<6sֹ3qp3`444gHx) }kJTQ5-i!lc 5=SQ3+*)^|n�HOJD _>?WH*5|Vb~%ZAuoOvح\fGæ ڄ #::ZjwInUq" _(M=$~/P(k_U}cvY]HVϧBb_h=oniPLhLCo;Y' K\<_Lk-)u%Ǯ#=Y*&Cp k@ˢ!eL ]/!dsB>ǁ5O53qo'/5Ke#CgZ{|6{4a <Snw1ztN9JD<~pF?0= ͐!Ǎl׮[Wjv'Շ.gΦxGˎ zt/蠴'-,7}%m,Onl8B=iY)(=j޻|*(|wQ ̃KROj{GvkN>X!NO/&1 :Gϡ'}|b#**>Zdtm|>?%Lg]ϱgl Jױ `k|>q?h|M>B h^0uO<?Z%�_|櫇elD^Yyj_ ߲eSr4H}_x)^^/a*USPstkj=cx.ff/vdRRUva~]Gb ) e z>P󕥨5*E[|@=敹=| V#\>B!򊨞|1`|/z> MEs'C;86CZC3_ZRHYJ͋ vxT6=7h[d2cXO>5>l*qo*BxE9 ֺky8ag # <zLe SRC{f^xnpTәȻw3>v^o֒]fmfI3v0[m"eU'ҟ@Ozy` ^[>{pb<QO9#1=; -5I#=riv]ܬ, >ۅrnJ^Z0,R;cvzzgO6LH>[5잧g�L{q09OBSq?0a"_ԳM{j9C'�>]DvMMMA½ MSޠ2kPp8i'U:"\.-Wͥ{ 4L9dC79*s/B7c cOD]Otzj=$0Dg˦ fdW4qEm,a3u<a_EOvTE%3y^|vv tT{'0Bn{e#uc2>y~Eak4S˶rn[*kr9 ۯ+pT]WP+nW>VT1e1ұp:VE0E;h v}aO- ֵ3)�*2S71Z@D5~Gmk3M(dG%7l6ogc{h!D>D]<q`كNY2 ;w0AAWxhSVKW%.-Y=D35<0-"0%vK֢~ì՟H/B}?sنSf*}YkW"^Bw.~(ivn}I.h檫'|8(v|sl/vZ<|zw u?cDlݫw[>{'_@GON{IV4vb7tH8>TTw 6`qMj{Z"Ow7yF%�#_>봩Svzo&wm|:pl`~L[S|ʫj]%I L[9s5^>ɽ(UU5a> toB>崎*TkAI;,r~ 2:bb,0DGٹߦp{jJ.~~jɦژ^]-ϳ:,#1LcOG{꠾ʾ#93 ۯ/3G|FԷO{Tx}Jϋ )E0E;X v}g7}Wm5UTظzgC Р&8PWP2r |N !)tk( z<‘<kw㐁kw:s U*뭻OoT{Sw}DeYD>R$N籿i@9j=g)9y摅rg?emytwcOC{>[kkk#ţh;{v529tԥҐMW?w"ΊxCMZp? D{062u,y7X#穵Wҗ;F>򃝌|J>]x~=#cc#Cs9㠩n}ět :~޳RYtnzꙟֽЀ ̹ũs<=F%�#\>t Ȟ78!ixE_OYYƼׇL��d>e,h(@#yDcWE8[9߱19礷'L�3mk\vmithn/+>{8ź<v~z݉S$߿gU']ʨ_(8Gɳ53EV\zdBix5w'> *@>�G'NL}d'h爥陃eO��/K>K|Kb=yZ?~⁳Eك7:߲Aٮ_w]}>" WP; .ps=l)˴@D>J#5M)r{~]<k:Ogy'<t y'��0F,(JU$��˒Ol/"Oo:wɨ+B.;n褣~~74Qcw.wUXGSLcR|c}\vtܣ5mԅ:S.r3\ fO` Jn|�� ����g(-%ͥ>ͥ7oy<U󑠳9Qqh~w>z;4{))y(o#>w&miɡ{>j%]K,?se,5bnuN q{)j*F&'�� �����|R.|md̍Q\4}YuG|UnPg>wշ u8S5ۧNG? #[ ۧOz~f'-Οt)ӈ8pR������S>[F>t;u2E3>\QF{W3VDm϶{܉/ӓyɾf77f)wSԽW@!:n1666Ƙj nfci`z5*D5tj!6.󁣣s̙9e93qN%ɛݚŲIwNd ͻt,>$wFxHu̴iOg]- ݨ0+N <AQRK7bjs >NkKkM��8f �����gdϡ{ܳϸdr9g<`{3*Z!G]aGe6>ڂmeqoVdhnԩD||3.?AzuroV^{!'*"Bx[�[9~p晑DwOLb[4K ,3{&H8rste;D"! _3��峡4К����xoZorkK%W"+ a)ͅyՑϥE)Bf1`c{', \hat+!eע 4gɧ̆ 47n+ˮϻQR}* oWZJn=^~uTg")ikYrC:3JfG iУ;d<9fx @ �~K����(?5Imqc>1BSTB/?Nჳcm,i`.h0{^Ŋ'7cEWgOk*|.ZJs>i~T\t&6.^{ԪiMuդɻmCS)rMft$hHu>ge|5B!,)Vt͉oq+)Ndžyhd zL*WyxՖL j,u]9mARLؾryAr-FP6imh9Q8 ۊ86-WH Wg;{#"- D[-ڇ_@fDgX ��'����� s#i rDgH_~wɂpɒAqf!xi 9[I E-0<}$<"ɽ 4^�M%ʲ;rzjԡ955Y]YO4\o):֞$lM0E>ݲ;K8^]cÕY9<fZmU3Ďʫj ͝2/S7'[zVfچ4K%9gc;"tv<pz8@kB:u* n.jX,9,33jyĞ#E ف+�������S[>:':ozRP?FY#hSB8%_X&{8^Ni(DzZy::_A{U^[-:jOcѻ9ws*VL;7ۮN;M2Q>'{(RX:>-TZ7h)iD9?5F(]#k*ZvdUhAt'pxʤD*--rwlX*_=3'$N?E o Nlxdb$: ��'����� s+Y.1P6 뚷07TYz|C񝶊{mU9:j(] :P@>t?>誹UY}nW4tVetVevUgԠ)&dΫ&' bmм|6]ڳ--9`h): ("I/X+pD4M1/́J8x504-CeRD?X ��'����� s=a-~5!&̓{+ȭ(Lc~jgUvWMnW]^W:4˧zpv˧žBLa_SqӒF|ݵ=u>tUg;+2;+һ2z3nK3g{+ .זOD%O-~گ.1. C<_,1٦ >v$cO ȉg#᯿NF��O�����@>\>[+Jo6miDS^OS>�M}ͅhBMEhk*DK˧|5y ~\>"BN[=&/g.qeeҠ4)}'Z([Ό6 (D<+ʎ505ZԯJ\=C10)G4R1SRZ)GD DVnjMsmmvHWM *{~!j @vK/v�pStւ,lEv-Lfjbcpʽlá!D7vp>z~7N+F-LE($s&ESi\-o /=,`M(Lo|v$N]hKk5O[ ?}>򰿵@=*"4  *6ńfZ [5?mz So}4뮹Y^~v㛭R;\;?)H7]>nvjmmu?2=f/j%J Oh:5d3NAk[X;͗0)Q4 /WZu2fv'*83O#38zd_�˧Tz)sbzH@!^k=p`jhN) Ymc02Sunv rG!6i-D49t/F'YΚV�}qcw>ɧT2fM83O*Ko4ۈ1x<azk1^s3Kp]ȾU\769=6UY1ȧ3Qԕ8ݙ4ؒ>ܞ;v=P{o[`[�^8Q4.PGP{P[4^&43V(Z p|hGSS^~dr]Y)DRR7՝*IJS>��@>fuv ^t6q'jǚ;3c%fff!D#ug|t ư xkR]bʘa<2!chZDEwONxAӦ5xc=߰1=WGX@y5ޕ'Z iᏳO8p$v 8a޴x;K&Qw9zO(2kK)ڢ|V׉j3lOLwtWH{xWDñB4vt uu wbhT>Gc]%]%##E##mG [ >}065 4h/((nid{TG2'�� o|JiBC˧)?[XcMIŭ8c@50K rΙ[?`3̈|l#GؒJf(K{g=߰1=W.Gw[:rӜTJ#i00-NĻ)�R228iv cZ<Ykffd\x}c-I77]>)v, [K 5@W#pxg[Ls +z{Sڗ*6ӓ$ʓNI'%ivlvxM2' DdtjnJ:Y97Y%iB2U!@ԓ-|N</=KFώKC3=wMw|��ga:xdSԗS#oa57wT&b҈6jaRqxrdi$3̈|>P$ ;?9n~>:̌=B<E vE{'V;5 {U9 `Y`R2>8'nԢч*ۦUM%1wD%h6wg:R &4|epT<~#͖ԹɇK 3i^D:D*L+Ryql풤nIR$]-KjѴ$FӲb|\|B|r]VHkS3Ių3o- Kn|��gQ *ǿeR‹s&#$_78qL{mDyrմT:gژaF3xIa W37 +}ൠM%>λ(gd|9q0"0ܨ\boo{&#Ane uw^`t3I岤bI\$BLH{FL͂vqVnr=GT\2W6_а QN ukukUs…;H> ��|U)ͿI j}E92E>U1=pQK6Oy^rNs1Ü냪&g#!GkqwP3| g_)"OcA`Z},4'59s)8v"0x;TbK?=Zn'sk/󱢽]Nt59ۗ&.H[.Tg%N4T N+*SQsQ^Ysay\8.:WLY\8)8W+wι*4"X}L\8Y0s��Ϸj{\OǦf/Lj iO!k 8|S"?%:psy5fsj08z4,&~4}o#\>GA5 9,te䪧2 0.%ӎ0ol1ގF]@'{z5t DSuL]aӒA儶ɼ'2iv��@>TXkDNK9L 3<"sN4\qB  >cM>u9}n= Ֆ:l- |ÔZn{acz| 9JakbWuXkg֥dʀsqM;[aQ#I3d扈1q>RQF KW2 p:Jˎ Idשi#7I>���O�xyL��)O�����@>��@>���O����������������������Ө|~���6|����� ���|����� ��� wx����8O���������O���������ϣo��''�����o| O��@>A>���������������������OOO��#1-B.ͯ&6ta𱥗"`pݪm9333;g8LrԳpJ<2S'R݂ ;>?%d Ax;H:gK=YP#'J?nE:Y :wZLbg%I *De\H_63㞾!tl\pSH&'<!O[OO���O]&ں&g6i>9/VRдbc<%XA>5sp{{{cEZJ .nV�mo 9%4WV5%Wa}eDO(^ۍ"2Z'MV9SwTG{n5l*Ɓxrp9m).Nbɧ᧤l*-Bb0zKS5OP_0/B_p?+~*, 3'%m4l2ˑN&%LCo_}?Qt"j%s6G[EJ< ϣ.KrBv}* . pÚk7t*dse臼u1ЕAҙ+;;FM"666;t6m 1'o≖R;}EuTQ$aPӜɔH6F*11ol,բ'B:V +S&,'͉o]26|֏MykrsHUYl* 6:٪`/ϔӍ0F8j+}L< lh$^WVCI*GFW[xNF9qT*nɻ^HW=H1#. Kq|XkVDYQ|J]`)XYRD|2\+U` _!Hl"rU/95K=F[Rѷ)%:߾}MZ c"O(GL5/:jqh~~[ΦZFBC�Ș* at'vaP)IPE*UpsykQ/s|ʶlcq4ʎ.Ua}#cmܓN �gp_(b,^DhYRtrW.Or2\C #^ο Mϝ8svsH acTϥ+L^dxd6O?%X.׎ۮSDԎ0V8`r;&Uz+FvOO ` Ex vt[hnkSQT~ڋ><ZqF&ۈg -h@I1TgZ>ۂQ G)S'xd;uvy%{6H5M(BZ4)%D #rRv5Pz;I R#3P+3u^87\lXO~-|^si?Ws 'Y\Jx9[<Lcy+N&RSʣ(nAZg׌pZQʯ(w$ْaJ8yV4ߒɰcd僥6Ҏt-Ԝ|]y� /,<?/;ť5l jUߝ6HbdYԻQ6_SKi\>7p8\N;ΑnZ/u{mͬ/pdZcVpxʎlI9Hܪ4(eۥyA _IhD>[8ݯj:i<Mg_rOv澕"uqyI8gkxyTȚJxv6gGX˱9g؝-ػs理l;E,n Gr$.E||U8T2\he[% |-=J|+of1|/[[˿̑ U`pm[2۽j}qlbwlUJZ&((OxT\7jTgRhƺ6AheB+ R9w9.\!~X7Vxn< SxXilK4Qg �y,/[>/M=/3HgҌ^E?ӭ$y6uHurbt'YSl'A@U7PndQHྴ_[> PE -tm~Sx LVLIa2W)D{5S`vJySS;W\>+H`|ssp4T<M^ylԵ .zslXcх{ʧ䚸N!lɹ*@>N>ϲF {T@dRK6 -..J*ԕ~R`}H{HU RXe=*W?=vsNZW@qHP\[ Aqh;r2Ŋߖ_?vY7JMM"NmN('>t@>^>-e˧ϓiu=2RTl.d~:!r1k>eug*GAw]ޗ5r0<]9\>H kOo>&iDM>.Gh˧S>Ly<@pk.v_̳"౮8#i(a|B Ъʰù FVC RG&\Tw4j\+lsa2r4sar�Oɉ"*KOٶE B/4OeG)]%+ZVvdcpUyL@75]Ve.}t<iT+'M5^h^MawGx17(cd_SXO(j,i~6>5szuX]R緹H- /8#[Kd\6=rG }|BkF7 :;n#FU')hc{|S~ Er+kb)Am.]1btk)#PX(^.fWř*&D O#)TY,ɏ;+/f|92Χ^v"X)_gilWeUG[>F84C]2/D'Z*ύ^*+4ېUUP{82+݆Ov65WDzF4+QpSrmJ[%S[ F>ֈFEoCNzH4MDU'| -}̔){j OWE]bPDhHst-k9/o\jjP偟^s_ׄڱzzUO>ߟJ:KBËGڏn} 6�/lDbRq8<͋Ϟ?tCr0M\c Jẅ6n[+qht:Tb|GT J1Bc433יekO<D9/D@+u:i:cul&񵐯G({]4 m셮^ށ*v|gii8/k.FvU4,5J8H[(l-ak{j>x67TyĢH% p)9t3ŠIւYU# /Q>ս q93uQY~F\j.-RF%LX*:]:U%W>r$BbbʲEbE.T^lV qn S&lƺ;+lgS9xžFF'Mp_/Nh$VLY`Cs(~~늲 m[!�q| �O|Nz8;llrP *D ɫ%}p ]$(0brp4[NOh潑ƴ,EXɴWV7pێUt 6L<s )>{Vs8F,Or!p$:DXLĊ_7'Xn|僥/(~^nO����M~3o+V{{~_>:2d|*}ehv6ۀ>O����MOa~ȺVY\XQT7+OtFf_%AQ53�'����� o|"s#;_b^Fz}yiSey{C-OŨ >mIGvN"ZO������7@>v~_  n(I(^'O*;|��|�����oDym|xhfb Mk+6FzKmkiiڒΊ==A>��@>�����ܷ|eKgg'7Tj eUʥtU/\]m ϮD[;>ysegw JFzFP5OT(䙙i>z 8+6Kճ>udwpW$Tί+.8rynI`Ir|� {�����ǀ" fw<m{ ε9nfO IgDRPNFӦ+$ptU>t}.~?>|+b_:/P[>'%ʎd)N6R޾'K>׷w/ b3{\m �@>�����<wn6UKDS2l{kq ׮Ɯ;4;=9' hkiy4=P?/i[S|||Ldʥn.^P=edMPF>w6ű^؂ޝ٘@g�mxN-j˧滚dkꀾ$ l! |k Vͧ@E:)t]C V)pVw%:>과BgGxtݔїR3@5?_BfS0uvh`I/y%7w  Aךp/V)������� I 及Kg&e;r2Ү]>wS\۞͍ٙy=E|.Ց)=HbVR$cʏ-S1ZT~ܺbRWlnVO󽡶uʷ= MqNb<doA#0[2p4ߚ,s7s^HVV:-o<yʧK>kxcG^۟m.2p|lyb<un{G8S{}0w T6Qn3xˍTۄ\Ve\|7G�������7 c/߿;߻u#-=%֊X'd]]޿uv|ž9XzIv9&7"jZfOY6 d1.U7ecRllW25!/Ag/=T߶ۄ,|!mn" 2G ̔ÙWH|V {O S<kV |}JZlv:Q)�������͖kW &WWg޾ĦSφv4)sb|wy%v;{ns݈|j\2x)UynY)ݳ'5 WMU%W^4 ' O)%^,eY(Fn&GeGae4nRS]Ym}nsC.}+%Qb S1t ES[fȬSFߩ e�|rT8yC��O�����@>l<Z񸴱2溚+?+׌ mommll÷56Ԣo<~Nj%V6nVsV6t$+mL9悦-, _Qeok#w]>>TFEu@ŋOYPtWR>_~dv̈́rmiVF"gQm0>y' q]NycJsQI_l3xˍt֩5Em)NJ<X��'����� o|>HoCED4<9J?檊ލg˿ϫ+?񉏿X'P iq ;F[idqagOJ#D j2칎@5ε_:Bg_h�儐+,ıuODh73g2ΪSѼ#A ϦNpnM[7<V~U-H [{kpV٩~:%W\##4A}pDȈԳJ<X��+G*`ѽqFz& ANE3{&xka#L;+//&{cIt}ĭ ׂF[;i/OбǶi%,ۃ2n<b'ͩ>-҂rcpgMz~E)po'(:_`X{S[ "O I a2-ҏE!(L3)19k Xj}IT_b'42̰ tG$=~w⼴izl>37Uw?m\q>Ɣk�|UWxg#i5V4aJL#EYQOkmG>+8vזq_2 gk"´D"#ēGg&f *Vf2# /Rɘ5 ̴>Yd+`(wšR+:'5Q@'z+-c 1^sD^r҂Ό^m:~uimD4U>ͻ/Y֍a!Eg&ƭXO| ���V>'r})O#EgTyxՖL rʇEQוSt*훑53VbU7)ߋhNAoMG14HfkVt͉o.\2b~iP> ˑEiC.w*dFH~D"չ<O##9km!Tn^`͢P4 ndJWNr`xJ;IO>vVFDa^,zLO༴.sPy~Vyn`o: _|b!$xWh1$jF*,BaX؄Oqsq:OVd+I ;]2Ǹd™֋xGX˱9|JX#-B~Ô4XnW>-{P7:{-!q &C[WKgEÑIx|��[JEִ-cS^|2mCƥɜ3\sL&?ΰH"<cgy"G/z mPt^IEנv$̒"if=–ƏS>cZBu$!itzE3$zel0ܲ;K8^]BÕ=S+ՏctKZm˂qb#uG` %Fa5,Vy{F�ikUO96rD-dV#esÈ|jG+i0}t7/73ǕF ,N ˷a`]Jn,! 񁺺Qi#nNZHiB 'kMɸScńk9V8ǺR HO%BeK|֫W$T>?OR8_ws:ӟ(D3{{��ϷF>{چ壙-Ճi.|<dOTi:6D:ؒp8&z\P'} {g*`j ME8u"o}4/9ٛFD~ t|t|EI dFe5|B ;*b1iD pD{RE.2JB#id@tMP|狉|jEp8 ˧~5x5iX*U1$ȳ@4Z'Z7ke4|j!)uY+oYч6jj.#"XgLy?m)t]9>{L,n=e-oR1.>^s/}S}s§w~?w>O~_gg|~S|_��8V))59v)~}ylz(@),% #rhm"֏H`T>D8i=iEFDPipid_1WIhD|ܤҸ9覆ОmiȂJ>Y9")HI;Uãc#u,^~.'tRUt熾|jG`8=^|ꧏ V:{8*2y~nT"#8ixc|ba(?Ao r'`_7᫺y9d&16=m/ܾu|_>EwHί9߾;v5w5_7H~_'/5 ���G>4C95~4 O0OuT*p0==SԵ9SkYPMO})8<._G>"9֒I'kx?W:F[>:/{mRMNF9Ft|b]I3{n <C<@pp. B杯l]ܧ΂Is^S$4C|9iͿI jե-hջX˱9 _^tI8Ͽ|_|Kg׾>/|-A3g+_ڗ;_>}+_◾}S諯#Dm6Izv"TcAB$Q.~K;$?gAX> {[Pa6Ħ-`x�͕OxlPMgt<|DDŠ AT${RXӨw3CxF¦cOIⱎ3\:;sz\q27. Y6eh;XS>%Jej˧HΌU)+w6?OP>3ڈ4C[>}8~R=qww(;/ր*hVFHXMâ9La+gσ'v85ϑ8<Os-7xS4v⒫,w*B D}c VRiif.PM(�vs.œ=Q]ZyCRQz~yH4QW$kއM7fڐCN>//woo[woCw/O7Bj>5ǒjMwIU}PyI EMk[+Һ 1zʧk6gI+d-q m%M ��y}[3NPc 1gD<@ٻg>Qh&℀kyzAsaʃ|WʽS{מm|dgGԢGQ|Ϗ w:f# J3?:F:f/zIҸnyloB>oys4 _sLs wxؚ?YY0=)Q4DܦQi;QX'-pGugIfFSD2DDʘ8ˍ`u8$<X42gXڝ9N䖤6-'Z=y:z٘9[ְ$Q<xF4\>鯸}*ѫQp i/&$BXM>nT*?z҅Qmll: ]]h &',ʎLӥ.|{XxM܁Bx U?#37؊ns#|cIla]�yO%XѮJS��O�xA&��^g@>_ d"zD˲핢 <KryRl{9"P[:'ﶫ}eS{|te+L^dxe yxM)ikwr%+۲(; E+ݥEPEȖ S>d~*\Z4z;-wprGL~֎h'Vʘp��|�'���1ϐ6Ջ+$!p8DdmtTM5g>xu{m-'Y[BЯ/ՖB2 aq*yV]źiE(Ҡ|n,VH%MճZNls:j%U9Qpth+eL9^��@>����X˧5Au8F :>xGĚObgSY/FۮdX]zl YVXn{K3Nz9шTO>5m(VtG#X)c�� �����'.Dޅ'e’mPL*P^'7uk58<uyMcvͧϓi~\ӝFT #4"]'1L9p|b) ��'����� y\#%슼s}qE?4Qu<@O+jVv;W B nWv+3QwgWQY;\wɨ:+kblsiT+:;n)nU'н<g[FHS\XfK5deO#z+eL9^��@>�����%mMbPTtj�Ct2H;~|3t�0&5iKN(* ;\0Bc45(V lT -aFU۹&i ]Uj> |\4 TҷxPČϮn1RƔ�������c!o }eֳͦ�''����'k*;\2`~ X�������*ɦPsr�O�����@>A>6����������������OO���OO�����| ��OO�����*���@>_l3-Ϭ2@Igٹ /6'\AD=9 j~aC7ۍhc0ОfELb槴&5D[Pa+MGtیඃ5`qZP } ^ug+u߈t$t6ܵ jpxJ楓T 4c9f8}!R+%qTs ����)ޭ" z½IPiNQ}uJ 7,.yq.XkGMOiI+dmZz?LTk]~~S%X_|l VDBFKij*g*hO&6M80/[αe]pGI"YݫZZY[L>���@>Oۃ/N#,͠rpDYNߺd~55ʉ˦RtKޥ:E> 8@{ZOP8[xd|AL,cm>fh4s3W5uX5k<2j-+hg(;6J2s#l,՚-ȫ7.2T:wweGf0׶F"pM.{jgSqdffӥ.|{XxM?:g}\<aPӜ+#T5ccz6Gwt-O-Z!58Hd;,0x~b8\:j^]QL#Lз\4G (2k9V8GZ 8y%iwNdވO����SXrlGBV!j tlO&?vnKU/54(/ Sgu| a7ޘb/0߸0\p)9l{9"PhT>w",Wvdk 6])kE}dU^YZ|-fn�D9sCu/Yٖm,F-s-L<ܦ#I8JP,B%`d$+k_;n\˱2Ԏ0V8`nc>m{I3کAgήdk^,:?+FNvKB[+ۼ[n扵+�џ&$k> i#OIٖ%=Huc)tUO����sfʟt Ţ|!qA=GEgjEoP6]jpP[=| !yhS$*7>2gG"qߨ +n8ֆ e8Y.4(kh!XA Y4.NiSffDV@(sʑK _?ѯ$4"AͳdV$|BxttLC#0E>G#}S?}tXCRE vwvm[)R3AO#iԾCRE+9( vdM|gs}|4+�ݝ<褰:Oɭ4NxdU\'$1u19���6nE5~$fЁ7_{Ɲk>ܴg8666l{J|w4 q˵:E%~ MEyaZDtkgS8F :>xР|>B8MҌ^N4"U^oC%ťf!R]g|15L'Phf|^zS YEȧ5xF"6ξ>:$yW,?? V' <Sh6C{k>u$kST\٘Bne>>ͯ|��� "n$1|`Ĉ|jZZXoj=rݎxJ\pH$.XQO7)'F6D҅' A |lͯҎPd5YU/DScm�?Ѯ䚼Oo|ӈYUu1.B[>}Lݖ\O}1�1W|dT"@B0rfsb9? VtDM^˒}ܰ]]j[~w;csyjawyOI:ɯN# ����޺xif~y}}uǜyZL"0E +;ٱp[OT6Xu-<:֕ .ݻdW#LA8d`,5C 憲8GK~gZ'*bSϖ(4fK5 ee|_^&6.1Os N,ɏ;+/f|92';niUidVЦw> fFK>G|𴶩M~O⸪n1K HUsG'f`AJd86dpiUyT�Ԟ d.N,omL vvkh9f8ǙW ;~Jel ϯ˶WJ\����4ZmX)8i?zfK#<Xt ObYâMʯE:zGU7:kff(2X(mIwbtM2Tz7buFTjpV *Jcs_-7&>yM/TU"i4I[PI.;\VY0\^M>k!_s Pv&i ]U<XdàRn 9LǑا|bcz|:lBv][\B* Pjg&Xqй eڮlmnhj3XTb5Χr#g3ܨV1: 5{Jʶ #8 LE> ���|;k\2x6L2 ��:7_K< ��'xYQn|��~>h5Ʃ(?5 O1MŸn=g4O'ޏvc*'4 -Eu���NSCKG!� ��'rwv8/q_iGd?)ٿ`r~Zk[_s]?~O<~&Q{HM &ǟPڡ <Z'�� �����5%8Cp{729iyەjN%Np=qGI1^r_G<x9{?.K ׿8hO?e~tBO Hw������7w#opƽ_|HgR#Ef1N~�ЗHq X%o{7lqW NQ,LL㞽'@;7˝/g!RDA>������mOE'^>MߑHv:v:ԥTxtϰ{ǓB6'~@=0˩E>O)==ŋr~O?������R>w�Mow 3ƿH?/_3q=Kן[olןqcanvͿ=;֮tz(S/b:Nd iጦ1{ʧT<LBFKd1fHg>H1_=xr~C+ WF3)Y؆eRU%i~, DaI챼B{ФľIUՙun�� i���-?a=E-=Փ,j ?r5DR~EbxZM+(-}Y_xTxa[~v/^z?Ą ޷8yz[߯ \wdBfu>cϩϠ>ED]]Q2u!Hīa7s{=}g}A\X{BB;" +₢$Dqf2HeAEwu;]Tuͬ0,.E6V6\;%{n6kAAu+OdS\r<uItU vp�@>|����� 5k-\8rS˧)T_5t<oޘx+V<?>_0sMsB!XiU-7x^8zdkn5O"[gU-w/C26ծ"c*X/X} F8%L1Ȇt>D nmָ7Ršh,Qcv{0ْp h4{|) bΘ+<"3hbQ)}:}[C>%e3&k$aK�� ����� _3Cǹ a-Œ޷mǾ&"'(ǻ0,0tnb[ՊGyR/z_UNU/ +բΈUQK,}GJ~vCaWƜO>ł릅la,LvBʵzw̽·)wFt9$,嫉F iٿRڻ'+9FSJLY S #4/ Y]^W[]*Gȭ<9!qlnep�@>|����� ;IΑ5 נ+~>U>B[8<X1dC-3l7> hgOO7> ]:ZhЧvdEX4҄9_8_o_ϾvoߧB*̷x9Lauq űwcJa0CwsK>-(ñ3?[<S[;6Bn6xs᮱$l' !Vl-MpwVjW[GMo~xNG+JSj�|����� K̎6y ֣U~bw/@G׼E^5zvhڮWÈ4mPк Ni"Av]ܓZ{{?^COl}tnyƕxJi:ېBëIl,u 9j8@bGl5rGW'Je0gOz>MpgU71` SőxcdK{>=yԬܫ}WtXJ�� @>����� ef?td"П!Y1(wؿ٣s{V󉕝! cNnwmOwlFÕ?+]1|psk3% -6vWm.ۥP8=5ph{�9g7wVX=VWv[㨩pfi-p;c/ۘcGO7էHCsif aco{J1?bGqȿ3lw>.E�|����� +e뺮֮4W/||$Ð9s풮#?F 뾈[};Ba#) Aj,Ice=Dv8`WÈ_{-7ތ"{ҵm }*Cj:Zo|m{鎮H\ؔ@G# aڌ,\Tf$f:6hJs^'e수Uzc,P5H(nˬϒY[cNV9"7:ҕ)|g햚,{WNF6$X6p�@>|vTE,4#1b n~|:qlj{<ξojHEay%5�COb ~/eBp>G1M.\^OH4':|x%ا6:+ځȣ2[Z9p TOͅv;H:>c^yDG'`!J!;kϥ:fq2ì]y3W]SU.\v4i|\jq{;/f>ؿb൐;ӳG;׷V^;R2o~%Qd߅'݄flz!d u&z-][>ϪߙmV^% 맄o;¢S09t<Zh,W pb *:\ķ^clqò+l3]Mݧ mfzǚ|8b+td%E&z\vAFpۅH%֍z;˺9�.l��眕Ͼ+h4y~[ǫ~46!dO5x9K62gCz}zCυȒ˧硿DlyR$50>6Zo8+f@a&V,G|m, R+#bS.ILo7lW-ۻTT`A>̓`ƼP<GH�/ki5luܰ&kCqXu|QPIe&.6jj8xn\=PjhQ燈Cm'_B mFF?ތ"-+Ȫ kBu {'xmgg; 7J��9,tgu<~ab4Nx181w2Uf_x<Ie*p˪5Fbp 4dz>^&0ź@{8Lnj[S䳭8YĢpXM+ovdpD*;qyJ{` aYh"ңG&H6Jx~˸nAa RMs>>l,Q7aoR)9ם佪6%ҙ}ly+)CKhc1gxz+Ц !8dbڧTk|{d٩8>͈je,߅0Pwww(Ȫ8b|9]f [%qHEa5iM>*IQl'b#ulR 2ܸ@jWFElp/B{ 7j\wd}gCEZr-M'Z^̱F1[oI��眕O@8,?= zsUEhoQڻHqfi,6P] yՊdf{-MC :{.Iau.%'ph:ћ|w@gޕϫuΗ~=h:owF4Fay7zhre{u$Eq<ub$9s M@GH%2&L Uݎqݷ/>t8i;zJ>=3-٧3uA>pT%Z|O۹Lǰ[oΘ7;b1^޲@P 4*-<x^PA NJypxuzz5$q!D$H>ءL 'nm77 ƍ|n4MFenea&CtVdNV|"$/?]]Pg(='7`_o/�|etQ؛vP}C]U)bXjv>}<#kwR #WH,<pkoOi\-~N?ڳ ɟ# j}ȧ6&`Rv?2g\!H4Csmϋ“ Bh²'792p+ w–pM$!Qz_Y֝dq^>S< =W4'NԀmrT窏2Y>y�>O|;|h ={L l<Z0-#,a+ "XCVlF񶈢L8H̄^ltdF*%~Xx7"5maQ(v^bD[<lG _�']}|���/E>mc]&Il{>G'h?@ ;-6# FI1MUtI&fz�Am+ )Eo`q- tt$1jfCF*p>x9a*t"<'R6ܘ=⒋}}}#p B0'#kll63 tY,3^ηH3kBgi >[|ȧk)|NI#w3h,`\L|w[/7" +0_i#]MGe|!f;I�x *&:56Pfrna1\}Z:/8xF��@>g>UZs}uv2Fᄮ4رmq$l[ Ed;߹?9?d9~6]ϧ3d:>%6|۵{,9Q֡Jk|NYVz>;={>eDbS%MGWN W)!"Q9SLu7y2K+A?nHph"M5͏&`BkjʹL!ً|v�8S:0z%"2 %AdL]X`.FفL9Qa! `iLHxBԤ#"3,ztǔϏ/ )l:5$<1D$3IcwHc;bѰa;d;eqQhhh(؇Ulr#r4s|;QPi ׀#=.򊺏}3 ;{'xt| O?FFӨdqdE>İ>>� _|vUᙦaڐ%i?q&S)I]HęA4lQY3hX]8jEPp wg!0F Vnu ܎t(uɧe \2rjgy<ncYt<[KI{)\?uz-G'W8Z9 !* 03}srKLb<@?Zowk5(`tr,D3ꇫR/2 <zw|v�<o7;{!\|b1wus!GW"Hxa,s,yr6D4"F*9XODEf$2 >j憥+3vGd%s8u ^S'cUH%$(w:\4f$:HEs]Ye%E{+ᕦ !H!W>;ڜ?(No? 82ЧK]U>g 3~~PЍ~Ƈ=5�7%7ݡ`q"uBk{Ԭԓ](4r̝IZ,QR{G˸BixJ]^l^g!0OgRG` uQZXnL,@ԧĿw(BƒxRs¡woU}#%\+1rc[wu7{6J䉤J)giDL˒NN1v||zMgqƓSZ/, 2*`yVs[xr>'‹lRޮG#og5ݒS҈8Irr&uJ<߹V@ dvnD_j1X*a#U%t1Ê&ghsha, ]*UFӥQ)$lD&"HAB,2F*%L*X<)х v{{r彑- :ߘ("5Ψ<Iө0!^Uy"X$Vܵ~hvg3]Y{2P$ 4iWgUy&Q9枉3V} 9n:rKui{k)䃎>R ߜI}nb oj<Yfpv9:nMvrlNW<c=^}x2\,HD"ELc#��˓oGg"!f ($K&��Ki?|a&]E Q)Y џ%jH$ '7bcc1dƝvt0!O#O-mȯ-L ftӘΎ`S>fHTJT2QWpP~xFECJ#.܈S02,  [yo]pMn=0h +c:F8_0e]~8>z$d6;fd'ްl:'4 #= wc[voAfDGq}メɕzp[b+;sfp=1]Cw.<s=:rJvQEV~\1�@>|)o4u~{)X́{L|���O_򹖮X_Vnd)\V-Z(,0n'WYnBL/v #2ʼn9S,:^a02L)K#Nʓ ,13xpSuYL1jdlnjFNO$өJB!A򚻽mQt)JD5tR{^S,"/?M>3.X fi5'M>=?ȇ6ڐ+$T_;Sz>{Q%K"&PqW��O s39*H$I̸:+6 ���@>}˧=̟W(ELp!H )$2RU*7$psmvlљ2cA,T\]X)I4*J!IȒ$Jr)]]F+ 'UiYzZ]<CȈJ||ڭ\UG$,G8.7]!VޞQ>aתzZc|d%5yp IYӝKkd4Lb&]</:[3ᔽef^ ]}naox<ϜCOlպނɌ�� �����૕HLHƋxYNCJEWI*c<MNd@22dorޤbXDK5مʴB&)]E屻*p1+2\ Ӱ9ߤW"j2:C/&jҌz{#=P\?HXiXK{H;?1fww2M)v~B^r916f猯(gK [|fc؉B C{s9,vGb-]Gjb�|�����gIR ''ˣ(z(\%w<!==>)aS($lLSQw_ުYeɥ] e麜˜]qŻK$5J K!q)8N>d҇G):VDiBo >x[' iLHt'm([+Dccv]3=hP( 1?yBX" =f�I=.P6W>anY\%7^wv&/ӘL3;:ܪZbOsYpj <~|-F��'O������_|"YBH Rˊ1^DT\nQbMKf$/b+F(LVԖ[Z[@ڽ𿻪UTmܼiժ”ҒݩY)1:Jƕ>JDD9?)V+')M0bR#2sg?-m*N��'������ܖO,OD#p WGEh~T @\,L*Ea<:f4*Լ}IAC eu -__RR O/H*)._\XU+C%&JƑ !"DG"u8?ިLI5%��@>?N> ����� OH(f+#ZHD`I4cPH".^!E~yܱĩ3rLc K9ܘ_X(p IO#jO.<1\GLI1f��@>|�����哮PuzEt2&62.ZoPh5jSR f-Xf UJEdLKW]`TZ{[s޳7`ccNW/Yfͺ6U G@H*caFȹ<&!Z+MK5 ��|�����5'/R4II(5"!6"+jb"aXN�=#x+deV_&_oKz)C)"QwE}{PP`zBTRZ-q&Ǡ`LbgHH१D66 ��|�����gX\\TzjLN-]qCBoߴ52Q~h\ Gh!@v<u +V5d"E)4a;`ju~m g$EED"& /RNZqd"A-ISS@>��O ������BHO+M)+6,_qk6"*7 XmA(ǓJ#|0]h+Vwk6|`Ď@,n%+֮FȻ$mܸMRL$V)US! 0t !tqj1FL^XrlyDΥBKv*7EoyH:@{���������s|"Cuqyyd&h鲅 ,Xhъ56 Pd$AGE%$?]j+`܂&1 hlc(Em ^b-6_~5떭Z]§DGT"X>K Q Prvi (uiC>n}vm6 =t~h>����������sf,Z#Fbv,\deV[)` >1ƒ)[ ꭈ HU,]eCXyt�7lܰ)rݦE6Zv6mfQHIR QxItRݕTnD1%$96ze:O>6]XT)$2̤}=m"BTnZy;=^&0ź}YMC"p4|,YCGm *ǓTGc68Ľ\4$gG~NNP Gx��;QPx٧V&A~tRYvc:W8O}J>c}4^)o:NQG>tt>\G~%aFNŧ ?۪4F4~޾ßP bȪywtYh_ ^>.ZL& ˽, % ~Xt?_xV[e"XI)L6>Z ȸ3fW@d|P S~;"-@  Yv5뗭ٰb5+W89* /,^-?8] u;WnV1蜆O j+)W;?h`yܲG 2)9ny'" Yl=09nE"['&̽mco1Fay7zGuʕЈ�|[K9w>Ѭ}ͫ- )jvOrW@>?ؼ ߫R u>o+XyÉo }|.e pSY0SNU=/]R/s?^: 7S⽧-˧Lw?}־Z:Y|x/Yj%K/\bъ \ov?~' EaRmRX0nXѴk7o @<N23�#Id$~k!0h)z㖅K۸y_m!/3(4 >I1tGt*F+[vk&$|Zo%+D A**|iid3e/F+<ڳ gO7"^Du 9.VvQg̏eM=zd)���9z@M34_r944/]-s "/_|?ۨ 3oN_n%X %ѝ3c J [j8u3׽0. ܚK@>?Uʔ{b`wFP/\:Z%źM:SghTr!_bzۤ^lժ>[}HyF M)s65^ҙ}ly+)L#hݣ ~! a<*hݗɣ9rѸud<܎<fNVo#ӹ) O;MG?+Ba-oZ>{ۮW6G/[R>+嫐+ގ7A,) Tmٶ;-ނ-Yn4rDz Vmܺ1t!0#V3xDV q_0nS06^t5mڼ6`-ۖ.^R+l:Ipl\Š8bPF$Ml6KXڜ*74RNg2T<쮉LZ?<xpW&fz�ޱ8\j*=,l{ ]ƉT 7@'��sNg^)58b@HjO^ڲ2޼}l G~3W{4 M" l{=L{營:K#o2]("Y{ WO|'gqK jOO|~E/ #Kr`y|yci89{̰tf?.3]DGA.ypb^V]U)Vm.oy1d%W;|o7«-[:߸|S:x= B 1ݛ{-y"3,[֮܌1UFR(aIZo g+*M]g܉ތc._i]Ɵ..PnQ` @#q[1DVmeKWZ~ʍk.Zdׄ LNrLpT>.G>U+v@=p tC[>m($V8d4#Q!}]l#\,H ix{c[Z*54� sxX*&( ߤ4!nq7^c'.D qO&֛ 'n|xr"k^3䶉#9:V)Svz'9>aLϤNT|>mR _v>7ܝϿ2%J3W\9g=Ğ"GY&jͯ ^=kEa-7>Je-|z|"w ħ@a11?O_zη zV˽KR|8z}.AQtG|%mZV!)Nq"e2H�U )TH?BΪ %KV]b 0`2#�E @@8Z0L.]r%Kn^vW駟o#CHX>c" 9nYVwj ?>QaD ιHȲN* #O@MuM36p]C^>}䡂)ua(ɬwqхmDZ8tm!|o<c~,-gvZjy<CЀF<��sހ.BaX;]/Sg=)||4^Ӌp۷p<vj..>9_.f0l6 w|ξUʴ+l6;艘TLOC/Q8@@|ӧ|zfxt>(\>vIɺ;݅g|W310j>z̽|zd1ߟ9%/tRm~(G|%\":KX?R.9%7ݺs;뇥n(u̒&f1jV ˜Xrڝȍc P M;сxN<Is%KW[fe+^?heJ!@JNUsv`ܰ[>m֞h!F"PH]޳Q"&O$U*Mm,2Xe:RV=>𸭜|xYp8%4U_zxEHx+n� sX>+ԛ<E>j>=@ɖ7MscgDvPP{\ TG*eJ9z>XS{>KCF|j/'ݞP3|N~(2]>=N|}RG#P$pEϽd矿QPHwM9{_:w]D>[2i3˧ѣS}3|sxNon(7J{"C>o^ͨJ*H6lXzÊu7ɛ lP^l* V%vo-_.ڈglAp�qsv+"lډ\jEK.]rڅ/Zy?D|ȢA;1XRIj*_?hۂ>h퇒JŃp�� A^ޅA N^gl'(9oe0Or5h3BҌ|8Kg}|zvzPG:R)Sm$<2hl|AF }2r9g>iO^{#?fzs&y[$& hս|6vbGȧt> 9.O!Н1$]'u(}}Z몂W\`Yo{%O^h^[jMtq=>< U'_9cD~ׯ3Hޙvx|cO|Z2{¡o_T0dގT>m:;3(`D Y ћ/^~P)T#P 2?͟?k6, \ve+/XX/?qw=O?|?{c4\ʁAe8Ij|,fac̠ ��| 3NOe<"2Lݝ-/o+p629mnM\Ȗf`HFW=X2M=\G*eJݽ}`wJ0f}a-e XNg06㆛>R͛F (;Q5٧?6]|E)|2Q*xV''r?<3e-'"0tLVo##xrhlUڜh  5xsztQ|*N+pf7>_}f6D?Y,uA,&۲v1썰.Ձ!`*XW@;fw޹8b;F)K|C>̀VRlos )5 ��|f Jud���2_|/?y66q~Xd˖/Z ,\s-󾛧KE ~S23)&ݽ:���||Ҁsci8] ( ����|Ͽ5W.[fW.~=;QepJ ���cO'HDN.m-( ����G��O ������*����O������@>|���O ������|����'������ @>��ۑOP�����|k ����� ������'����|������'! ���s ������|����'������ @>���'O�����|����O������@>����oalJNF>JDG',D 7}ƔB) uDxҨ×yHb ~J vpL@?tD\ՏF<#DlvߔD .s3V+^ PH$D$4Hڔ!x|SP=@J޽||{R(���ugW[lXSRlrlwޥ@rfy\'EbXkmc~OL<I1 +6b;2<ndaZs柒Rjjʭh9l6?vJC+L9"9hweV_S\reb@w/X>/4?T /*ޗu&lJ;y5=V|dGOXWPCEMu'>ZzXɅ{4i9RR_RpqSw8Tp :peʴ{RMTޗwp_}@>��ϯF>extΊ(,7x6#!، 6;:-WRR#](5Vi2Qo7-WS ,!W0;dE>6}cF*r #>mEo^&0ź=6 I*S1,UmJ3:V>S9!"`xij"EL<Y'v's(#Rى{.Ц !8dbڧTk[qEV ȕdwUc\,*F+~v6tVxo|)){dYu߯A>ԝ:Y<z^Iԫ{b"19uM9 њc dit@ڜk9ZqxogE)EiࣤƅA _J4X|'���T!C_g,}ձ,^‰ϘxWB@h$S?n9&6HcOIrámn 2'rGOػo_| q\UqԄ\-)I :T&%չD$aځ>>>T£G|zf[:Og.0M-<KD]1*0Fay7zG C=W .oy1j]cgx"n K3aaARXG.^`[{KOGP9"EnImfO/Q>*䳹A csR !7 ۲aŘI;6h`'s/Eō2@ csR9=SNQ$9+NLV30rRL iiAX߁~7, \$l@u4b ���W#6@ }gY{|}4ؠ$ B8}8792p++l?@`wϨ =k44)<S3vfg/;wR #WH3q^>S< _ YY'j6LB92p=}ȣ*}<6#q \z+e ;扡6kz-[:2.߼RsV\ef/X>/6WDҕ,'bW/Ρ|M*15;^&ecDɲtGBB< )8d ]UpIQKEIQ8%<?>,1<ֆAR(B3BCkEj '���ȧφE g>JU87Ff"p#b#.70]h\{WV Ț|hp+sgڃDC;]e|J4?Ea!hݱf)1J3kB%qu4`]*t"<'R6]C>o6iCţXqOTq${>f 5Ÿ;_|LO4h:Vg "y%#9V`G)Ұ;jbUbJ#8!s1 V<GPTt zaZdeQLa:'QZ]PWpXq�'9TtHCmDzLʑswIp\Cm!O���OH;(qb ~)C`Dq36!z>;={>DbS%MGW:4aoygDSCD$rb/E]Wt+A/|Ps\>vF !$Uϸ]h F(C- AL!ً|ZPH|nWZl Kac~Ď=ΔZ,g;L<-[:�'絮kaV?}`MS%qj_̙9 ZNAaiX1}V*s KNFUCSRkKba$9 #e%*+Ni:^)_xv뾳'JVg5\>Qz,rcţK5dX5rW{(Kc"cU=L-[lhΎ=UEi2Bh='^};QVCc0x!Ŀzv?'&bq$1ӗJj@�� ,ġKpT ~BsYNg\|b1wus!L84w[ ';6j[p Wl&Oq4=]CpHȲ., #'%F}.ϙƞ- J2k{F= '>B>q쿖@<a +1 ь*E2rj.7ae-,Hyt 4!T׹16pvc U]%dz GǜX'�j)֑L;5o\-5 Y, aϺ{L8м5gI^Sw;~8N :RH(͎N6huf^@Go%nٕQs0*C؎ m)g$$v'V+IIUw.8_|$^[<huzC)fj.:/}Pix|nqW꟯,H?{F!pjK|ljoH8?e>/Eקx:yWmG/^>(ã#6KJe_GD$q~1{?|>C䕹3��|~> z9dkY "91'4"@*pܖ'Kɑh!n=1>z7ߤv̓Hl޳Q"&O$U*M&OL<{H#bpXxK!66sgqFGDI%^ә}s\>k$d;-jk Lqu XU`;!Ax<;zcwxr>'‹lRE&KPGjA'atN}-ݛ]#XRdr{>HuOŠ @X>E F' =ᐷB w/KUAGү5VyT)U[j(0; ԩ91 c*=٪̨8So <2Er FY$K JS.n>Rظ/ѕX>o6^oJr<jSN$Jc353pݠTXŰ|7luVak"2*;MpC2^>XB8vAƠ0}SgWk3,䱋<B5i |zڠ1(]qyݿvdlrwXZB8*.?^]>ǿ) O;򱨬Gݿ[VB脾gÙ(~L��� �|)/��,.4YT|@[g+.7Wf(2t6 q;QBPt =@̈K*PNlWz8C+e+Yk2gʈ8XyqM$xhwܽenɹ՜uL]<-|U-9"ku^^ 407kp f 0a* ZcX,E&&]v]єa+| #b+kjÜGaG_w`cv,!xIo':$(SSWvVkg˪zg«z[w]_^opJ{ɋ7o^>OZI3: ��@>� ����o{ʩ D/5<Zrq$Nٲb!6p !;V5Tul%#"tL])ZI2Qr1]/踰̑[^lyvϝ .l}fsզƪ>z<T^L`?tSshx8jo^tO !4U͟$Y_ոOܛ ìSN>}Lsp ?yW\JxusTGgϞF[]^93&Qp =? nc3Σ;r8zKo񎬾MR\< |AK`&����|���ϿK>/4K=7u4PQ,J(t p TyL_[bx^j͑)JtJ5(/H5$EI>+]?z*.W?yzm΋Uw/}nש&|{, |ի^Ws'ٽ{6ڻ뜓rDBB1 98`r"�'lc0漑 ,֩KygZ3==ݭg(;Mӆ"£XCOpf7~H0qh5AZh&W.kjTm{̅Ǻ4Եesap̓[[of0-`sEڴUЪKMy=@l,2i~ �m̎1sk3wً: }+;G7yc L��� ������ O%PspR<TyZ3~�A'|ؠК*oFԕF7fwZ;D{.m([\{`INiy̐)N!OO8P+k'9`/4-OUZg<mHץ9MeՆSnn8c#oIYLVTmAL٦2-c 2/Z&usG&'YX̫d`4+]8w  tN$ZanB%O7EF<,m{n'cѹ;R: <KIㇷL��� ������{v[δAm͜-q+EQ ~;Ϳht©ڼ+3%sc?66-Զ4J2\93Tm c$.mԗq˫_ }"`9$vB@w嶗qG{MӆhGDhu޵O̤pW23ImgbԳ.puKlͼw-30rg`_i@O[hM+ʵ ٳUY4.<'-E5 gK 2Sq+GO5lllKgϟ,$^yk{w>|]@=y d=5L��� ������{Pq'kt䦄W#,1܋:}xWvcr;E"pD[Q2ܜ*֥s23Ҋ3B;j*;nHhʆe' -Ye1ʜs 4s,w-CUE VfpLNQfZ p~MQFv6_HUhx-@] U3NgsN7303Wxʼn ^]|6kv'%(" {> ?3` kvikdl!0��'������ M>{Jrb|"\ZIN`s=<8ц8pDW${ r&:s$ >d R2@yp?e=eumy 2OHdb`%v~ڼbƞl>[׌"}�|����Kk?|b9Wv#7‰<ޞ)ݒܞ)d;.ZO:wb\ JK$"AO AF +FjdÕiNtO.szdkCE`c@SUoCEYɢbq[.R&2ϡ$~ȧ�XMA6qE��O������@>ߣ|NrJrE8S*aYx2ţ|:7R37R-IKf ,Q*fyUП|R6\5;R-ᖋDŚe ךJnsUgmIu~BeNH)W<WĹlLs+8{ˠ�� ������YBᵤՂJPeM,/G~6bbv\-S2P -@B ٱJ SjʏK Ņ8vk4g&ԦA)n͚-hJ ��|�����$8rX{tF̭ $z8Ƿ_&vvL- }3E<5P|J-SƅбܴH'@H 9!+-ʻ4s4뺿TYh|2*އV��@>|����� ?PUv͓:љ%HW*x>~nS.scyԄ {^KADꑴ'wF|#dnLo[&*o^X)V@3\BhgM{ ҥK7Ln^RVf-oI[4Jn5ăEI쀸<Uhkd6-߮*"\e�@>|�����s&'"ڕ2Ԑ0í^ pȈ|*B) zCe>TLr@czSYxi/5ȅCϟ?_ v;'Kw BqJzjS d\ݕ_"(kwսV> vym|0c]߉|>Уsn6G}$_0?4rg�'�����A>UrkcejA_7/=w=}ǯ;r4Y),QO.sl2'83.uo~Щ_?}?{�u{lhɎ@̀zp22֝q'[k4sحA4c||| D`Ye !Y'׃]]YLzPbv9N;ӞClS'/6TɞuKN _”w?c~|>d\rE{u)=ŤڰH6$2uwz>'r+5.e6ӫgi |d C TUJouЪ“vvb;Vs:&sߛP)Ǒ`C3U/ ;4MV>��γ�g<!Z~W:mm>d<L{JƉT#-(8Muʮl׾-F+V&[kD?/>4fmX{נaGo^/F=_}}޾X{Aj17ַ^7eK, %\+Y4n4/AwhwgQpe&}󢢜k3܊μ񖤒Dg9ҥ#d{vϧVAGԏv97['> ԁp5O}sׯŞnHKE -Ľ|Nu4'x;t߹!nxyM|Zz\t(~xeL{ѓ[Z|*dA!Ԑ>k_NncJ{{hoCYoO V> -d4 9S(ت mֲ&Q|zɧ?2aER +-XtkgЯ&W<|5{w7Y:űeOڛb$<A,Uխ0V>��ݤټJƲY, Q$|tgkw.oh~zDou+<ytNˉv}D@-{ʧKxsssJS E}fƌ6qWa i(D+zC;)V}^*󻝰H1)m<<$:$LKOvb|klmrk?C쭨͏s ގ1t}-<ՓMHp ^hvh<L_ZpGp̙G~:qk_'K' ~{ı.O_!os}E~S"N')vw׿oDtuz{oʖyA]*GQ-nhCvSĜuݵ,;a/0%dOGmCw|j?zo[l|.IN>xY‚w+BmY7}o{t`7}k߀%_3x.#AAٸ}e>��}gKۗ $}4pxUw:eqmN|6O&p8 l槱W.[Ϡw [;FU:2l?3Hn#ŢV%X8 Ku Sƃ@'ZV?yOCG1_> 0ΎbD2-\7fQ/T<37dYQ~d<ڐ/^S=(|*7<ݙAw 媶"̢n+3kX4?X@V H4{`]-+XLo~:3gOd4k_шkGT)|cӹX7|y&tdo8nA:g><:%+ځ?m ?|ZˮjSP +f%⺒ب`W.-IpsXcߝ= S?8R.4FKz gz Ŝ?E><}O}= %9Ozv{I t!6(UG1uOU8Og.PQNCoҲ$(md_][vQG0ﶧ^H^Ofm T&m|]du>q#o|<H>i粘i~j� |N=y ZrIGL+W64\!A\gXjmɝHئjm1je_j͋(kSZӓͭ8;<+g(˧BU^ZX]4hc ~bW�C6^)L"=R3.iK% ]4Eb,h[䜥}/v1nOsjp4?wXYIG._ZZJh,OİZl^EbMtyy.|hxXxpZSd{zEQDlu峧86iњj/Rs#)iqq軿dEBɫTg"`LILk]E3B`4#_Îpoqg~r calGSϼ(p ,s!Լh0-ƓӐ/mz ]+(9%1NMzBdcjLjxv V5|6+ zgM@绒ϭkPކ'KD9 7ģ{Og0G/6k"r'f7]ocqNRMS5x.뫃x5M9Z|�|~06IhVbÍk$4l}=l2[1 ﮽`Ixd:vL& Jڋ-c3Ŝ FB̤M08NCu =S`YC/jWjO΂L&[X kv佝&3hhimPP*pӧK Z?|͟ݿ"=Sώ`O:ms÷Kk"0X M䉱49/,O<-쾦% #tmjg%1.TqN-t盙|N5LJ2lS#04byxt|fzCs G;˸0_; oǜP-Cow492T0ՑAmW  9">$.oB*:W@ > GWD}\M t ^9e4=pfl',{xf-!S3v|Bo%0]""#SˢSe`b1Q9G޽KZW:\+moif {HCυ';8*:".7J+o��Țj(ʗǠI쬛ЕOij;'`([=xt|Dk"6QKb qѽMgrvQ-[[Lye={>RvIJ}ZzĆ? L>z/>0oB>Ͽ*J |mW\>.Y:.DK |u5�m{>wТAffg.抄PE5�_~1cG<$x{8}cZ3]1`󆇣r\[rՏNk+mJjvq4ݛ3̛@j {9ל=9:3{>y+ ��KMg hpҪɟ޵s>}nIvHlyG~0Fӵ=u08ˮDTilحn*E3?\llӬW|ѻ~p!+4]ӱAU|aB>_[+G. ~g$v|xBBu%ci_$[mY>xZ+ԢР D|[>'9%m5I RJ|u>ϕh3ml0Tqرވ+I 5$p۳c|\Q3T$Ug%Dx] qŽy@)A橞W'7ѕ͌we ��@>??::lm_KC#sGV~7D;KOwgyn=>wyu}ks])ˋu}G Ƕv?;cvp դ"uhybkL~4vG ͻDm{DU9+M97 w~Tdgg6߬ts[ "#zIZڙyۉZ65g+s>A{ޝ&mui<}}~" _uO!0OwF)!z)Jh4Oob5Qof)86v~�Kgϟ,$^yڭp|~xٳn nfshU틱҄o~>9)llG<w(՚]K4쉣mGΦFnܽ7$4?ӕi|p:}0Mߝkq!C|1'Wcyi 8#-iaWjA ���#3"Cڰ+l񺹦ȍ X,Lsn7L a{Fy۳Zh,To@pͨ0+& gJHr q8q8tנ&Cn%x:PC}uuP7OsO,+R5޵ =+Ϙ:G[Cs X|R޾nN>c~|t"نtҢ~~B\]PPX%4'Ұ_0 |6};ׁOHX cWH={MgK<t)؜ڧ;u2is-^{I[y'%Ab1mJ2cC|*4+Ka өSG#H}7CB:# < /;19E#]=E A.^mYN<st @ؓ)SjSBl< !0���<�I���TڜϾ ;Bc pdNn{x_ptD]fz2 ,n]|ZGJcI"ZD[T00t={3OQw9Yu;of 7$ފN $ĸk[ ��� ����P>J3i^עl(ēl %Q1|$"2*7䲛=4ߢ0; :26~-c5c-m1u%YБ ;Y<AgdkpݵޚpNMhgEpQ}1̙ʩϚ��� ����Q>~okcqUToxn= r^8t,tŻ8h^vwʒkZ.gŰʯ_a8bӼ |iwFǏ7O4& ޺]X`Y\IveO||Ob',Pic��� ������|מL?cXѩD 9܁8zgY:0ٷJk#n'Fy@/{ks0O7ͭ, 4{.1l  )O`] pBNX"H][>G긫�� ������|9)]ㄻtQ;3/+tq-йC8vyفh}Ѩ+1!K ;}18&)6(; { ?A b49:9u#,{KK"~d~ꕱ\[}(NG=7<NG6,=#q42[ѯp@=��@>������|oɯ cN:~ȆB!<} KƝtc?](<K`BxxGC@mkݖ@Z0G:1-KtiMB^<‘G]8?fP <"viy$g>OD w:3<\bVX춵[k 2ޠ|Nն+A +b?U���������;"2v衃lϡYd{K*=u_Y1gO]:\Za=.VWNy ΂9st%~ցfY|{AKw:o$;ggq8|BYsԼ-ݯvG{ϑ*3iTe��=������_�|&N8lOBbt#˖LGg_?3}̶ur.9zqS%06d<'mh [ Eϰa&Qsx<ԉ_@gk ЁٶRcF+@>WڡsM~z!x> mx!ՠ|Z\(k[[[2^R ��|������䳻 ̏L%p4ED…"xХ?髟C?|&[bdSGAy$ `qKX(ܬ҂khÇ9~/;rQaG<u78ړ|$%/Gd~HW=ph+ʑ=J`ùKWG׷;>2W>7\Xj,���������}hGލO-c.$̹sǿ[:ԷqoN Y";1-(gNŠ/0vY&{5Q0ZӜՐTtfD]c;vo߿Ӊc2薾><̑v*qt)�e(t#([WبfqW>vVe3 ���������}PKv~7 {G~sk_𗎡Bt≟3ގD{ 衟ȳXy 9إSq.ƴޖNWEkSќkZ&hj+(?{|oC3O7=u\}y< A?`0Zؠn%n[mpm*7 8f��@>������|o9ؔF]ҥ3t; O<?H#ӄKG0~#XN/J&^jkcPqV(+K왓߹s=\ItK"<+=B4vg?<>X32p+<gCiNvTı_)#5yůOlXժ'- ��|������1@SfIFID%xX\8#2I,G0h6DΠ#dK~]:a/yۓ-x9kK}hNPpK=WaW}D{^f2)L'>1Ҏ͆x,[4ؚf9\ Y���������ϏT>{ӓ#G:J?`}Ξ9C@at O'!mN8̚pDa'(.tͲBb/2p[Y"#m0Ɉ3sT" 9~@W,;<O̳δ =o x<Kf< Y���0Q$ R~\^ Ba>9+osLk;D?e)0W'f{ğV sy\nKjobH۷WƷϷe%Clr?6Ձ0*E~^[W}|�ED8KjXjreHx] >m.wOX>;n&RǩB<^.tKGc{X.3ɁLru5fƶhlnE&x|^xoAES#\l(t5ʝ`/N?jgu>ċ{gCbÓ#8o$���gKCCfb9Ж|onho/wuI`rJ1K'v~ >BY>';IdQ6KNma4 1g`{E>ʲq"\nP>�MBvr' S , ƈ p|t8#ɧ'$ j3J (L , UYu,niIu創e˯ו'@U IwKkՕ7V$6V$4W%5U&W$@Uכ+7V'5$5V%6VAA1kmLMoTq'ڠN@[ O��eʧqt0g1 4{z\\vE>GYVeY_>)W,X,,X\ֆwE0mH gIio7_-qqbQ8 CX[[;]1WfVMkia,9ԓCc08ۋp_$x%\6ރmPȠZ;K{o܉Qj*}>l<t.R* f(YnGuvssfѩNAXmymJx̏ʧ9 B~̄#-gaLk, _uYT,mFM4r9UfEnua׋fNp`(˧(FɻZ>Y<1ڣ�� Ϸy|nAhSzO$2K%啥H;+*mxyD&5RaK vtϧ 9W#|M[+ NOKlD>]eJkz9l ;"o RrP9l,cu,eB>qh&Ox7CФ�m ؜|3V[̑O?|^wI{+.8d`@?7p$B]$UW<ϊdXL 5ވ[<.]_Ew*(#lp<|9`R^++;+%r=~����$J]v;=RqY%VoJohD=t3aZ -Q\ 3Ŵ+І;kHc{?VRzJ޾/(!8B11쒨yQl:;'K$HDCfdOJ`pdsD6 R0Q&ӷC:HF 4|3Og_p|mZ7`ۚon=:Y?7<;CsD:8f^Qci0sΧx]q6t]͹%֪+iƸ{ڻCB!XEd �����߻!SrS1!pJuKwv۞leZb6!|&5jZ2-҆8=($;4"%Qu 3e4};˧CFD"_UL ++JXF詗Gjf# 6Ͼz5p^/H+S.۹~L,t͕sci0!Tu~iHZT/௽E)m9Lj*+6z@>����se4|B>GX}JхczmSY)z-]{E 6g/u-TJ$Sr uK>M g08e'/FSw^2 tiBH˧靺6K |7cL|xG.++J c{u{5 v`ו7z) 4'aD>ͬ}M/nn(/QC v -DNξ| }# �����m'=ѤPhAny$04nRM1nW 2ќJK;r Ԏ\ Bhcks=^JQ$R7VD#=95P2ܗ|H<ZARN 2r;v"=N9[Xz2ta'ޚ_^Q#ixzLR0Q, ~a8Z2˕(,֧~|7õei<}˧t L t h8r*US MY ݹ{ci]U`3&`X>sYX6}7n4/e\@?psEYR.*}Dn<O�����7yMd;MugHnD#r= i>d<Z0Ókᵩ!66n%F{>grd4׮ki~,)SO,ە�+]aƎ+K ǫUq) [mվ|SJ8,uɁqzO/ neZ1nn>EwC3ҋiǠm؁yXm٧|?r,aYXֿb** yN҃ebw+3'Ұ˥_Tu>۝ p�L<pseEH¡a08.<|~'����\�~K&��c擑OPT���Y<����@'����|�@>���'����|������ ���'������ ����� ������ȧɦQ���7 ������>7OHgf%3Sr!_>3!Ifb٨dvB:/U.(䋒i=ʣybT)-?T//ΩWDs⽇sldfA8`aF 3/TplD"J'dr@O6>��Ǜ'xu �����Um|NJ8 #}ɁQThl`T8%gS|`R(Z]z(UBBJ½y٢xhZ.S( |Ԝ|N,H&3S1I;ozdJ0<%LOvMvqS3™l '��� �����g*fiA ʛɶqbvA029ŝ  Ecywc%<ٱmǩbD8=.*zEQp`B ?7"ϏD#q+jrx"IT瀸sf'��� �����(꡶zQ琼B?v LsM!ol|trtlB̛t-H3alL \piD9(uAf 3}6TgW<(m K&N,^6)��@>|�����,S6!&iumIL7"u uO&g-#A~ce?<NHCƅֺ;E}E稬K>8)os%QcHQoi6 DŽ9T破E:%n��O ������>OMQE 7?1ƛUw R(oR01:=V7&W4KJ[G:[R{;J[s8Qef\_:WwOtKp<a,A1<1<˛7;YЄt\ xЊJ.]•M ":Ķ<Pɶãp$9AIwk4 ìoiED8KjXjree|H C̙]~M8> H kDJ�Q� �����O@1:.JƦj&owkFų{{``b@'邖>eVutg4L08Pӿ45 So gx҂=Ω=Q~T 52 (O$dyaLgwr$7ggFc[^`8gwGn6cVWpR빝 @ t1ݬ'FLU*t,`i:\l:.G>7]L�'�����@>?]N xRЌjb@,OŁґ~G8Wy0mul.59_R1ై(?!gTД7:#k{W4SQTtsL2EV5'%I|B>3=+(ϩ[eTB(OS~Eˇݕ,k$,7TJoDCc-\bs*ΊpH /&CiC@yΎ p$jNFJ8&8r I`7-XІ4. u)OVV)O8f^w';nI0' yiu?+7K>j~�alg Bdf 'gb"v7MC#"w:#pXKT.8 v[ұY*� |wgQpe9oƪ+—MP_0 縜!mx%6ZjldlG[0:&x> x폡p$5~ϮǗ }mV\+$݋nT/>|o~зSc 5 @u[[xR~%’n7 >ڻ',RM/tB/L &-㐂 ZZo']U]V/[K,JOӟtɬPnJҌ޺Ǝ۷RCS"nwޔU綉xH8XS .g&_V8mv?FoH+'*N}C 893j=Ԉo6xGm*8" Ԏ_"'95!cܴ˕ wZ<]VJ41>:'HƓ,V}(вmvw[1i"H,L<:hOPaNW4K;&QG]XRft%f D%+s`n f\~gj~ZT2Nz\{�|~lmrkw&21߂x]kn럣Mu_>M$OrLpsZG-At߬\s {H/[h(D+zC;)V}^*󻝰H1)m<<$:$L=Ad${~"D<%.)˖g'–QAݶ‚3?O?~xY$?}wQ{⒐_`g ̑C:zу8dieelS̭(WVeKB\<)HfEP $LFvF-${ZPۛ+eBNdԪPUN&kmU3WsnW@+nV%YXmEk2˗ڏĪedOTjotk7⋶@^-BhyiaXGCsY'nI"ݕ7"4V>>m5cU r- f tlh~i}+&Xmw:T" UC5 c끳�1]3x4/qkG.;c0,5lL h pwud4onG-^^ [(WfNlqWʖĽL泹h2YDf+_`G&]X,hZŶ@zge;ISOQ>ubHScۃg&NyWamɲx !_i"[̢?l˟], E~sp-܈ pšvzEYgGcX"S.5'Ӱ_#q42[ѯp?C&쉌f :qM@H ]5o,X<n<_˃5&3wO=xX_KC]~7꘸Sv90㷣qrǤ;D^f0\ ..hkkpwumXR _I19y ]_56PT¹A:%<pheiӆVlph5ZQ9Z-keE%kfeI^F"jhNV;ФPmDM/^ rf炸H3u=2^wd _~E lO6^xH)W0픈,UEfX\}JէfmlxP]J9ILhT4\ 0ة݃`Ҽo)ÑIW�|~򹵵CDCZ{ˏMU0"x4}q3M+{L{c##[OIεLG ې}lm3N(kSZӓͭ8;<+9 ^u� A\xawV HT}K% 4XJ䜥}/v1Lȧ~c~\> ]V[xTH~nA5wzj`~m/\~ns.MN>4'`bTm⾺J9eyGH]'PlhuC|hxXx�<66K*esLd/1ɜhaq~E!S zG䬉hﲚ۲켼?oW7#&jw66JN ?%% Oo/utj Sus/+J3 !ТyD2QƠTN*OӍV"7*V\n-]}} Z Qp&K#ZY T4Q#W./C <ee*S!'tݕrA6NiLjgj7j+5#im S-4']F2uL֮wi ehzT<�":xDI8۠y,Ss;v ߡMFO% �+3aIF= c<b }4cJD6-WFOT(z0Ճ6 c ϟLX]oݯ1v: x$*3}~3{; Mȧ-ܞwt|_gL>_&H<ӇZ4=Smhhw.v l>&!EjWDKs>GB̤i7,O<-�6tm{%h3c@W'w<*Oe~ j^8'(~NmiNTWkbbO?o z#?'ƵҜ@?k 8#nG=sb⽼|[{bݲ[eE O<ɝ)Ω-/gs:ZU´~G]n@mw74I֍YtKimm=]GA'gv%2Nۅue@u%G-Hc^Ј̂h7Uf+*ΦiajV'n˧[tbl0{AzGw3';Uˊm߯WX\Tt88T36-٣ oh<,;Dwr5ל6E a= L<-rrVc[ᚎ+ ag\�Kϗ?ڲڟb<]*r}TԞɢ&|A`JPzx@ ~<:>Z]x4<䓝? L>zd_XPof|,]%ŷW>l0V+{g,w~zuEo)Cb>aXLȧՁB!ylgvf qx�i7iiryU.]H H{gF3 ;eNl5^ ' (%%%##F~>I"Xcs2o6U4&ۏÞ3-Ve;8d w/*s3<!gxnvq^P fsJlɴ|z򴡡tM٪IijC GlrX8Eu/Jy'-D)a}j}\" zܝ֮dЭjC[Q3f3cx K'}? u xK講n8@M7鮣̓W~īqFa(=(m=xZ~Z<as�=iS9+ə+s~$Mȑ`8H.C{Hڐ 3[? ?%o= o#vONG*i"6]'8u ^_cLuBW~]z#>9ziW G6v|cZWϗ G+Pu"agL$v|xBBP[ tKîoX7\Xk,/mY>xZ+Ԃs.jhy˧Z$*Ѵ\XU<1$9B<?7mwqϮʪ*_2+<"$ZjFbǵJwRr +FR nD F$ r~yN0+w /BhU\P>x-Kg'J2G nhjAN]D>|44d&&muE/2 Z4ljͭ+e!PxJ;q $3S> gZ@64MĦ2Ju :'Yz>gyf'E#5:8ɵlJR9ΤF>M򫅵 2⪗ԍ9ƲXiV>)>sx<#D]4:ttg,"ϭ"m?OjbKOywpQI)cz3Ӎ%J;QQTEPPDE齗;;;{ DM|;;3{;0J8Z,\Mk}l@>;fCx5#oq47IqƍKԠ;f)}|qkmn^crAhw|S͔*JJ."b)Ü:\% ED˚})B4鴰\bEYyE;y[XMM}KK[CCsy~]tg/=#{jH!P<. N.~YҿY>|HK2> unlަX[y- @ɧ1|pQ߯w;beanimSIFO psU>t^K<@c6E(7[[[;O_૽uȞnAWt`OMQ%|Z!'e=[ FfYF;ϻ?|8yb0֖X=JOu:?{;;"]]MF+Ð+qiE \F>WCg=0dkmm&21|O#eym IphFC,"D)Tݔfrwݥk:BWe |DԵbt6wwN}2&6^RRRVVvdC%&H5zGg%Xw8![TXX7ks'52C:Hw';CcPXTN G?B+ a�7_ZB�&��<R"D)[leQWP^u-;b1$wKWk ~9gjOMؿO$W+W9@e5cJ_^eAڳ*el ݼw~@)aHe"Z'v ��� ���[]ȵ|\ԩ$ZK#Ba)9>{Rc{<yk* %j}RZ򉬌6,!SyT׆߱koѧn Z̤3\,[V]T 0xWfxS!vuA>��]l��<)i|<TP[R[fvz}u֭GrrJJOZe"jϦUֆN'|(釥.uimS JO:RX^Slknф̎N6SJmiogۙs2O#g#}\W^=Ejkk+KLM}WFfl>ȝ62Ɣ(gVyx{DtK<p &*wz!'eW O;x僺� �����ȧ+)t2Ig𫫛)6MhomqZai NL;DpJa <H"2t?y_v$lVm lqnXd3햓)<Mhj0 mL;#!hʕz^'"I2tx q g!_: )Lmq@e$R}A=$zo9J ^;@>������=)(Ud,O<<o%ֶ$C"v.jhk1hMuf\[CӨ4:ɪmlQ*,'lΡcY5M5uelZz<A"KYLM+6`Lp|PU3v|v2gapJέ7FlKAd?smʄak}1eƮ   eht׻&uZ �}FRnr)q0 *9IFq[4iHnR|{D(S>*I!GV;O  *Ҍ:#ʧ[= y9vFR:Jx{>F )/+8$`NI>��'����� |vT<UL*Oo Xm4 C;0QP{"pl7V7VӘ8b;Qt6\T{0]?}ב&bi4WTI;22B'G("luDbGC6@v̿5RƗ JM٭c#bRGTcX3rwޞxJfs<N{ZaHͳpBd-sUEMP5X>ʹJC{\7֏&U]]:eTgxIM|$9$]&@zC>{#VKlc6Ȫ($zF�������h!\ITrAnijL6'w )<j#>tJф**JJsЕ8 Wq4O$77I3y5%N?u2xiYaZv8Шvt{'+TC[>zͱmmcĝ"JcUmV҆ua7حe۶njVᮎXQXg&B8w\CxN#>D|Z|Zi_ٶ=.290j~b<)lE Ox3 vۆLSsH:Ylg ";oi5%*Lyg�a���L>j5Y& 4\A6Namd9[u2(*4ƞQuKkjˋJN=. 榆ʦ3gg NeI+)L9Q - F.i;5xS>S1a5÷"p*;2e(T$v蚒 O ${9WX`9gGQv_Bs2vGM:X>6H*܏S>llpD#Vg*0r79qCNθy?83~ ";zDc+;:�� �����|cwR\4Cn&36ejϞlh<R_U[]܊okn(.+R*$2ڎ2^\]\UV+#Q Gr ˲ + %5VUr|'&1T.3s/ߏ|u<X;iԎeC1UnȧVui%anٱ1LvwGpd]"(<}ⱦD8XgKCI?K>:i\BZ|(ztpxu<U$#|ޙo.ymm݃]&5̱G>��'����� \-C%UX%ۅ%-2WAA\T$$貪l2\_S' 0Dtus G*/)[k\ZZߊo)*:[\[XYPykW $5Smɩ'=vZ-Qkw wuuEoC9d!oq ٥<ao@ȆF'EGl?'ȩ X4?}c.e]T5)K4xPN/ 5j%xAVg'%77$<666)3_>UY5l;L^x'UC>9PTo?uQMXARށmq;c3� �����|c)?/]7!CZiFwXBLܢ3ygϜŶbZЭ2lMc9H=XvlsS}F'v4cj4+).JO;Xp"4;ьۥ -%f"2AtiOM#5d8G>]9_������ϿB>Nm{v'JN S ²@9PS(p8":=psCSIv^[Y5ETjs!r8ƆҼՅj kKPZ[ḍ1%-4Y*29#\D.������GP>5r+ShJޥḯƲzlwb߁,2 Al/;yFٜBaₒJ\ ePft'Kx Mi%pғ%gr$9PfUj��OO�����A䚮^BO%1TB#(<\TtdcX ErIJ&A+Fin u)$@bX<HdsIڪ좜ƪjFj&v9jN;Ojgv%JFV2 ��|>t=`eakPX /g+ ;g]G 5}!dǦ6VV( ٕcl)f'돷Oos@%q1xcTp4F;萲) \m'xK^Df4i?Hwu9<x>Zŵ\QuʬN66{2亱a9ypS{7C,<\,hter)&hJe-i(ζB,CatV>՜[TVndDچPl&Ahnj E[,0X:ZWYъf)Nt K J!)7ZD)��Z4:?kcfj5Tdcz G=[Ó(vxgF_Oli!Z,N(E%-=w5M6invk3H+~d!)SN+0&yųdZoXvhg`:q3ǽ8aw 92Pեҫx Ci+eP%dK;Ҳ*AX OVojv0p$ts ݥ%*g0چ:@Kd%ENRjo<HJEj2��χ4~}fᾟ$;CnW#!spNQ hٖdcsNȨ|3SyÆuA^!h~㽜lll=weM: pg{[[[ǰT^nHڶ0qqswwَ5ꅲr܊kƙU8F>/{@D1:>|R:ltW^]i|}h')ێА�[HdB6 狲7 m5Mmjn [^|fR|>CwXoYX9A#j*nke2 |Ae]bJђ,ݍ'?d3ux9'dܵ1g>:5W"88LR5<NfiUzeLD4[4 L"%wr5&Hm8C" ;& Bg3XSj-lb*R]NH*@.3U$jy"ԁMV6nށq !%XA��@>G..n_cE:OrqN]MPrRFbI̯d_+%y,uHL/LƢ"*.T!Z@PYFq\4dG>vxrNY{gu;lHQ#.D: W|RךA`xGר')O{:xβOtd ~皠Tq܉{jspGg9b ?YE�Щ2Z?:jt-.W"# hnȧW@S5Q @[cos|SUhzR%&c( R͑+څ Nmn,n#4T@ҥ֐ /IM--X@d<[#U.-bcۥ8͸N*KSevR4d\)VzCH簘x$FɦXo)�ϿB>kRyH?NQݏu#[^,H@}ǖEy' oiõ.VBFZma\&_i$(m * 6a.Xa?aenY-jqCY9|Z::999Yٸa}mÊn7i) ǐ'k|Q GA9{3.Yyqg:56t޾Q8Z2Zx@wi:�Y-hFKs;G^e;quVf|S̒y.y+WymdT)U> [&f1dbD2APQ$R+^.6bmMh!kmR)zz]ZBU�MXTG*=uLC)*Z&S7N%_Q")?1�]+}` ң!}an_獲q/l#i|Yx}kxuxleT'іsq@<RYQ��|)Y}U}բF>/Y;EK ja4squuwwww ?w㌷̭llbۥƃ&[ΎU>S,Qjl44݆Am4X>tX,ʔ9AH.7|x}7h9#sO9gc0׵Z\4Sq~>sG>Ѻpk-˧"RPJRU *b'(iXR 1M~me.%0h46Fh1"ɡZILLHe ,vB!z*FLۚ|AaR ^EudN) *Ś.NŖ|is�n5 ea1p=T49?t;mBR+:ZHd7u>F>cr.<,.tx:FH8@ t\7ߥ׳XX9.2Vt=U��O}eF;h33whc`oO¶o9X>7Vqs,OSSLeaF~q8ȧboڰA8 .abk5p$sēuWg&d8J>\>Mםmݏ=w(XZ2x_:jNFraƽ]!O["TD.XRہ(jURDkˊPt ]#ah,AlRN!BjpV:A‘ZxΟs:f\uXہ;JJ.P[x-ӈDNYR1Ka0:0I|K*^?B6ݝ᦯ɹk%H +7I< ן9j#jMfVEbM �� bڮ.v&S՚,%zDvT]FKͯ5z]=;knM2N1xkC>5* +gSJ[O;-]5GCQ[T#o$ݪRv'OsJ( x-5m˜aqqeeɤtFg*x=R.)-g>GR6~]vzfJ9fZiXT&G9]>7>G` hX9:&$h2k簓5gU>G˧ oC* DnعDuHS?q~>sQcZl#߮J4O,hTLBFGha~%KQBj^W Ŵ9rDƵ`1v<Ц(\$RO$ D\:܊i$ \6Nar*0gʈ,N)(u֮ʫPJ4VCu]xCDhb^[ �yl]z=c@90#|Y٭~4FH@!-9拲<-T4 ��9~eԍ 25@E1PV(wCYiĸAv66.QwH߆6oKȍcsWSax #82v|lm~;xki{(NJbo#`wj2|]}6q=3ana?Rj~STS~nko;p(S{y+!V1Rb7IEzx¦->6DT'k|9|gn;bk=7>r9:ef56VV(AWt{5akP>n7Cm3|Q㹊!QEJKq_HE zashyEMuM覦9M5"_)K$SH$ r$*MћrlAuse ,*Yӟ%*rrXMD)}፲)ӽ9=VNpQqs8 ;$llgt]+�� { Nxd��<|J;X+b)],f"R#KY*0$g∭ y%3e:)OȢ1T2\YXGpXLm}m^[\q",?HM~-QYEB-,#E3h�֝^-,lXc^&n\T$:S�7vۥRvDy v;ΐsM �� :q&9 ~ ' ���%v"sR\̕;eRT>F吨)yM-ue9 f{KC}}N1aԕV$2⚚ 3UbI$ Dni.DUap5Ź4A1d.  TdK ,SEqGc` { P !7m(lg[X\bD#s縢SA��@>A>"^Ύ;kp���@>m# !Nbj)Ĉ]*[х Uu-h\-Nf(8bˑ 2/rLJY^A[cc}})9vLqñG,*?[Xs('M) %==bS&fJ$L ��� ����pvˑr)K*uI[T^M&K.8q8޴ *8'U5 e-ՙii9rK2b(q.\l2ODqNӫ;+2@>������QO9W(U<P]rB_1]l'U5)O/=P:JjN5db!BmPȤ⒊599El9.Ψ?SY{PԈy*; TSt+(O��@>A>����x-t)yrh%FА•U'Bd\i4 AK<mg`CdI0D,s(T&ʓlBrHkl_Ha��q˧\. �����p'~ +edLqR;:3 uJKZT4.nk%4T6`0F'e8ä,.D1DzMϹ+X*r ðgAwLceKL ��|����apȨ%P$Gi4".˙KܭҟtKօZi![>Ѱ @mXڅ(%q"GI&pNqeO��@>A>����x_܏��yae ���� ^���`�����OO���OO�����@>��N>!����@>A>�����������������O8U���/O�����@>���O�����@>A>��@>����OO���������O���������ϿR>W'��@>A>����xL{U?;`6a¤ LD~ncr <6q|ٟ႗>=ɢ?Z8O~8ʇ &8MhOM)s2<e<-ȏٗ?l)-3{O��@>A>����xdQ ? A ^i1gy_z3`@s7f=o~yKfK_g/~=wO4/|f.E+6L[Ʌ˞XL?#":_e|�� ����#( cߪ I!s?Χzstf&L4_|7f7hOdя6z{Y߬zkoⵯVh+Wū[K[ߙ?ߘO[z׿=Պ,{|-Q>��OO�����A|)f&<5iO߉J uv%漅=z|ONW_1{sƓ| >j׿8l+*pMOY_ O{|esVx<?\όsھlۀY3ߴ}aE=od9y ��||����Lzl^:ݧ0_5jެwg~okΚg'_|.]:bmt׾cqg$&W$WW%V.)UVdLݵхIآRI -.fÚm9n oPM'J~6mԯW?0 ��''�����|>>=ߘ/>k};w|0wg}yHU=m{s'e]O:zd}RnhcvN[Y*N)J:\y4t~qIV;|{ 3'7[;VO}m||Wu|{7˧lSb9ߺy.kGڔrb >O*_n GY!)UC`y4j}$!wkK;Z[:EȽp.Wmmw-v 68g{@>A>����aϩoK^꫟Y䫅?~uÍY \B&)Y.8(>I31j;1Ŭ3jE5لmщ5Y?9Gm/IrR74±̸_bw=S_z˩>|^6Bp<ǿ_Xwmlt@6;tO 6 {߸[sAVmbn>xoݸUNvE2JKK(;&{ken݈?G+.^ĄZm<+6m8l8Eա�Xnt JE\9~o9|ԅ @>A>����!ߝko~g;s-_ҟ͗n>]wZ7;궬fR! ii/jͯl*<eϡЈ=){C#݂7;m]S~r\lJwuVVx,pjڼ/z8SոQ K=Xd1 _lgyRWGxZ[ZmK5s3ns~d+֞W{"79[Z68ĿtðMשwOԇe;6[["yH_>[?PucQ]Hd3; jMdu@}mIwut:{Qm}D@h򕾶2@]y=3F<_D?GS}QxGo5Z9 Smea 5S � �����sf>;xoλ/_,m7N.0_cn"7;WUA>nQa){w>Rs8hԓGRNL=5*/ nSX-C]|YyZ{.s[n6-7]9gw=6O~_BpCȴ9o!sk xW 51&S2s3zNI]gp9ԚQiɆmw*7?/'c! 3_U&Ÿ1݈Mn.:?iȞv<ȸ c遬zbv_o,IZ:x0q)~5R N轫_G/@6&TFVc6d GG~u8^o7.w"ԋGK7'mAz]� ���� |x >jo" e_}٢,/skĄOq<.hBƻ{lwZs˼^2/_[ϗ?pܾns7S_yWk|2(ӴZm0I>nai c23ͮa- TJ wuWuΆ!7HrNF)Ѓe)ٴze\-itVS+BGKs4f YdC6ִWLv8[7\,q[w-*+7"gF<)lv Fxs|.Ө>C+ndhH8U]J8Xێn< ]� ���� |~蓗g4?t/6988حY_-r*gZ߀} +JK/: Lȴ͛7nmkiV1\ajϿY╶6{E箶ڐyM9xنfny BCthQ3=hИm&- CldbDå~a߭}17h"8S`ګY VeaxQ0(Viu"�:BHm7KqD}r@K}w-@e&Wdy`[ XLfg彎|>Z-6('㥆f͵~iaoqN�����χF>_5ř5?]p-7l}ђcE|JnE 4N@tN* zDrW'Kgr%;#n֘;wx  [cpˬB?ttwm܄~<˟.sX2|^֞5 (/RMBYsa. ,_昂Wf1L[dӱ:NVwи" ~C�cL;f4oϴqdY3 JDR=}Fy;F֛nH1ht]bBk݁P'Wn)cop=hnrXuL|<;N|,nQ|^hwuIX`{�����χ'v3}</lmۍ#7F=Lc|!>z=Kv;UW$ה]WXuUV1gmO8wkxw +<~\gE?XzW<4#;q8̚g3ly{!oWhVHNà!8ωovQUdݶ/5yaʥz^v0`h2HdٔM&C_2 BG#wHOO^yAj[ c 3Ғ7e28SnE˦14 Rv7-pw@m#v8_Tc|5&17ʷnYQ{eĒ7s^_ ̺av^;/_3rzp%hoԩAwv;bz/_zB'eI%7D?X*t=�''����|>4ۯO{띗`P՘6FtDN];bv$ffm(.Uט'2#=/w:?)-xm7-NaW򛷓_sOhoW咎ssX9?>kJc'i [5LzVj%%g3!:wSCdE% CvYhai>n`WNƱPsKiaYZ۸J:1rm/g)dG+xy{7ZZ:'n0p\_vy,yu]w$eop芍j{eha-aoiU8^SKvY{~{>GLws17\ >Â>z�OO�����|hsyy{+?;o%uP;sڽU+~4_h!(01nԦ3ry;|YLzAv*=TG2NFnKݗp`gbJ̦-.!Qζ.^|n;)؊|3XYwprf pWz^} �����S<?Wx3fǟ}_]pw|W.fٯݜ}`Wɴܢ2 Ac.JUضܬ22N=ؤ}׸y[z]x:ٸ8r5nOϚo|>H#ϱ=q]�''����|>T_|a+Όo|g·s|s?bgݻ!1OJijVcNRZQTZRW_[S^NnhP_a:޿'#>6-|Cro̭߼[:5-h;sW-urs &sk| o`�����xssS&>ً/xwg4ss䣏~FqVSJE.1krUH#jJ+ "MB=^/-&DسnCoVV-Yhϫ_?:/wYZ"O^4uS_������GQ>zn'&=37_7|oY?~- #8M ;ߡ"]S٭&R)EՅye8tIccq~a~IUAYc񙂬SSkDx{zLŚv.vV!.(o{+OvS ��||����g&O|'?|?}/M}ysoڬg~03`ZA.gk]nhnEbPWd9Utt~3yg2N7!kӚֶ./n?ZiVO?Np_<kwϒ~nW8hJ @o?_zoyZn^[7zMy@|VjVW77W{)5Kk{WD#ŭޫuEW[ � ����-O<gfϞS?=WsO‹oɺ2jOS8?w']+8Y|p~]#np ogƕAK|}N󿵛|Oi=6c_<峳r|<,r-m3R& h fP]'=G=ɧ@>A>����xif/dI͘'LϽK3_>PMq]Bi^{otwSS)r+(:rvS YDErXr Ymrs ]b۽HLHݛ_jՔ ,W5Z;F/֣v mnasIKؘ۠K7]}Ĕl`6u{ju׻E!nMz=7 ͫ+KQ^i:bѸ�/ɑaNv=iHّ];c 7.qlv=W?ȪX)8x]Hڰ]TTg 7)"XwL{b+Co^�@>�����7=9~lIϜ9y,[}MjguŌsMKD;]cXe% NH<S~,"jy8%5&;0-,:1v瑄Vڻyy8OVs Y )ry|ւO_l}A{:tMmnx1xciU{)~!a4[vU^/~ˤ7/y*XXi+=Z#kSZ yI{u!kC%i.Oss|Y]8a7"l֨,EGտqW{wd_&`<AwgjAߝ!Cv&vdk,lP|z2}ĺ\@_0ꭚ]&�O�����@>]Kfon6Ix}-8Wz~k D3獮 7{AMϩk+9nPM9~&1@~Ǝ6kh!l]0SZu?2w~|OK0G6FDD+n[CTm2ޔr(#Mb5pcS 3YΡie9.eߐ#Zq.a$2-3N7d=όG>uhSHD?}SذqAGo7i75}+_ {km]X-3&�O�����@>]9iIO|f[Ock<3%^Y͑-cxM^x*칮:hzD>26LwUuEPְ9<a_R"Gۼ$fwG,PvN-EIuZ%'~a1eZhm@9C>ἤt0e" ]_ Q>/*8z em;D&M9>Fr[<x F^y"v#=jp vm4NX9s9FwF i3"T}xȧw.]Y|�� �����K>'?>٧'>9mSϙI3{y Y?҈a^'"I}Eg m|i/*1F]w벞ʞr5D>y O/yZY=L}ÎUnV 5ܬǰ4_>9㓧^{>HGB^HL :ikbzrSz#y.#sanE{MyU/E tE2||"p+JgU[_qu?glv:|(¨Ƿ !<׻U}׌_H\!x^@ qA~Iric&�O�����@>9l¤2ɧҤǞ8qDf 4yԞ ~5ya\tw^W\Wt_hBYS[&8kA䳣~{eW[Vjg 9'Ii5/&U>6!.hJ ist\>Mkׇ9n^8-.~Yi|"*\z?MA!Wo -a:??V?K>es$oo|>!z^D۪+~g .݇?IA݉ o@أ FKguc&'f55>�|����� &M0eSϘ=̤MǦM{i7YW:gUsXeO{E}K洴TIeU|)QwU$V].% TA7tuUC?_Ҫ9uh:`m]]ts&M8G>T�� �����_ f~͞{vҳOM8a >ًo?\1P9$+&iZ$h<KqA쓩ΫTT2Y)i\s\Q/_`1&MV&+:rԯ+-(d_k{o<'fM|O��@>A>����xsMyb̦<aT |>a|q%a&YYW>\\)zk /tub؜"-O{US\f/3;14}}Gw5^]37۟-u-#[רּvj>_ysoN,'�� �����<i6a:'&ONdwio<X\_KiSګu%=,!SD+⮫BeSz&@t mA]S~`Llbj=Q7fO:ɧA>������Qω&M04ѠO &g!/$n+aG˲bE2w`Q?4coleAt(E Xh%X"UBKɽٙ}w}ޙ///tȧm:Kߟѳj;>ܼL8 R [s;eΆƍG;G<M׀_�@|B|��� OWm|_z5g1kޫxt[/8xuͱ]gNwxϗ=]{]zׅ?~~.~ܷGS_[tl9peÞkY޸~Mb*Oa}Eq#+O="'������Oh|>ϧɈ DEGd0D=z7>²][O}}w\LǏ~-Sorӗ8u{o>8վ7v~t}v5,k0,岲 Kޙ4sk5eyƬ`88r ynYc/o/U3<>!aĘvtzׯ~7�����cU+Hy"}v�SH[+*&_c?l~zKwm?=~S_|wqaY=^_i_9vcǡM/~|γmoXز '‘ vNTQV?%ː`}/k>Gnc2s[>oY3&9k҇|Ovm?�@|B|���3~)"Vh'覶'jg 0yM#vvdS ^XskwO|>?}z=v8t_ |[pd洍xJYfŤ5%%s''M| K/ەc6\]mӪ'%ULYow7^5<:2*>533/̚ o7=ϭOtN=0'sT/ vG*#*[VEB￾o.,/EϽ6��@|����SO=*SZfϵL7nX޺2emƼ-moy@km;+xl=ұ35s\t|Yˊ]D;MX«[O,|>+NmZ_ÕTE5FOK w>KC^PY->L*嫟~[gW︻͑i?wmjzlт]zohɎ/l=Ks\/؝{I(\r7-nxB#w,SV��O����@|>< |!UƆ&˄ ź+"'-MlZм:c\;mWڽ7:TCHV~eW|͎S˷_HC|Ҿoʒ=ZwMm\ŢCXB?&)Y]֜Z' QYC8䙗c+?}֤/ߟ;b=mvmzǯv1_ޞ.Ș|+n/vnkf%m-N)^sޕJ;��O����@|>Ir_a}T![()-* 뗙f/ -m +j_X8ͯO^~`C E:GhbʨL"L>y{/9iuN__1u1c۔3L!,XC+01xys|(<B|~wn#>>|66ݵQŽ/W;#""~y}wk}ϛ1pzaalx ShW>߳~��� ����">}bY(|/_P\t8&o8qZD' r*̱ _rsX ?""rdi#,eDsb[DDNbGTfMH+99hjXӬ1`YT@,[AE5X!3O==`O %|D*f٦v#g>||uOEQې̛G>Wd'Tv~��� ����">HPP d=gC~>T7(&/!ƊM%gГ܌ajNHzHٹQ WH* ~ KЌm䨘Y91)!4w%D7֐9ZVHΖe"HG  tŭo57׏8zWs|6Ŏ^n럗f$7}#k׻o;22=::-'-22ޱ7��@|����ρg|Yx_*t" I\^v`|dbt^7R;ޜ0BLW>y^?9tz,OES5#j‚؆uճG6N)RTokK)Pfm1\m(Mb To0y#^+5i qGl^66}?}iKuq<EBZCIGχXEə ћ|5":rƉ/=?1 �� >����XO{Ag(" HڃP(Rl231W4|$HQ,.USO0(L2-N* TiXaT lJXF[ٔбJ#򫭹Y%BeT8<gf(-.A0>}!�� >!>���ʀ|}OyJ{H~Q%AD[d-ır#ӅyHEhm8SV528:$646$6$Ɩ=ޒZjH+3fF3e5fSKtQꄑ<3K" u0U'(4sK4'������O`|>S0i YE T#SHX 48h5ma$qily|2P8R\M.$䫐;ʸ<Yl,6W=B)qdJ"3$ᩢ$-A`vr&4Pf!x8�:z)O��''����nO xx=C <KyqVd$ȭD!+ɲ *fqBSIt=C&udH#dQ#d}H 8X1;hNWS$fDL9 z ܀!z)d$��OO����<_nH x_0�3h@2oSQcx@b3Yd"-u8CkgLC4;Xh-oakt$25tu(ENUpX)b+Eh" D Cxΰa~f[剌�� ���'9>= yz(98*eHQl%.CETq�W :&RBfJI`FQ"Djt9&Qs_"ǗP‹?;�� ���'3>C������OT|������''��@|B|�������'���� >O������''�����_��xl@|�������'���� >!>�������� ����O�������Oc �@|B|���IOEaP: WY 6ȨQZBUX-ѨYT]lQRB"I(XoO�E}AC }%o� K@фި!^a>x/_/E9e ə >�����x3awÃ&'iuΨgXn tZfT*fZZIo0hFTkl N/8b Ƒ_7ps ~aX@ (h x|(RА@A��OO����<j‚ѡZ&f⌏ Y-:[f5m,(ʳYtjB $ J҈T:G(|d@!C/EZBePLj C|(B�/AC >�����xS"[X9$Ě ȕBNf3MFV66l1EUJBc2pD O} Acl Ɛ : ő8?%2HH4<""{G:�� ���'/>ZUx1.*,%%Dž;#X,4*bs"`P JHh6)FP'QD*KGA 7 G{y2@x`SiLJ K`T@Da(B��OO����<5$D$ĄF8",qѡvKMcT|ѨHp0ͦ Ĥ\<)!C hᕗ}^|aؠ!C^z{P$> E$Rd)4!�#� u!nh8|D'Uf5wvLQ^7u!یyģ?;zHgv4WygN*Jr8Rss辺|ZerLttLbŔX*QM/tý(y `�''����a6}rlpr\DR-.eNNM$T"6f Ecڤ%R!Ob"_q\*ABtPW||}1 y_4H"SQh@20"G~xH1$ζE|ĞNJF...y>[v_?pG0/+ʣ<t#1<0a_$./:=0}W::Nz0&jcʏj:q朄}_ߖVbgw/Vggz_=2&eR ��� > 7GB Q!c#vCRlhLTPx.$`im!Zf,jATr1dl.j5rN*R%hL}0h/X"Ҡ}԰a8Ca7Jvr8<qd1:b׊ɱ΄?>wqQyc/pmxZfkԧ9bS-v.ɋr&W7e;*\:-'%!>c٭55ȣ7W)p؝Iu;Z]Nw=6ۗD$d;rbWcEQbLK>zϗW,ƣ_ ں|ܨ1QdE#"~z}஢mY:=gx#*dRwq}Д#SnO\_:6zˢبc</ltfa^t24 ��� > j0sZ|dR5iMM kfIPL),F&U*F#ѩbg3 QN!rX$46-(DAc4=00'xH 2ҟ�'KA༼|eHg,~8=}kTjQEYRGdbB\VUM<9صy͞c_ruΡmgTv=;L.6i⣞5EoJrUږ/OW]QE/yOwq\=uf4fֻS\{ɛv=<0]c=1w?;zEsxv7VIJ 7jQ^{},umj^ZՊ ݝVgdO޻߃2GL~@|B|���{|PaQ%%ڒblqAL AYrOG郃4upjR,jVЙ,HSʄR1_&I%&$T&B!dp,GFzpx"@$X,ţx$>}0ωIf}tO Wp&uO=!lg Yv:+=}Y \o=|;DWҥKNodչ>;_u{ϳxqWNuphd}bVfo&9x<xu}wu:+4~n:>lvE`R꼴3ҵ}q˻=t/0J9ƻ>Ywsqw˨螅!\{Y|^];O5'>=!3̈C�OO����qOXWHC x[rlpljR(d& FZ% ijJ%ԨEB;Ăͦ8 :=P,xl#sL&H4:C$KB.X,&Ja>h/ O QH"d>Ϟw\m':qǮO?YoHO9Yzɋqݺ̭c\x:ksJύKkZsR]EĂG<ەĹwػ?v!;.䬆}}w<iZIb3Vɓ5V~q+wN{w>>̮fp8s;-j>uAo-^uv1ϞqoumKcR;o*ɓa�''����ǧ3fpڍI1%*Lo5hOƒ QU-FL&Rb_*Y5J@|y-rU2DT(p$(_aFx :3l?@ IT<őP8y2OPו}ţ鲭ƜC).uRdR)]{6[cg;/u>k{޹5vv:W3oʎ?}ONvxgLP΋uD&|λ]9MSF^׳l9S?ՓGǟ2Aʼn}чxfWy-Nt=[evϺ,s;Ϻun=w]=R]!.Z<<.m>4 ��� >L%9)qhsDbR遁2 Ħ2 Oo5+&9lf2HuT* 9J2,@\. CqD"Jd(װ�4 O&I�d u'㋾|Pg닣ўGG#\ٞ:/16uY'gxǍI/6>}ב3w:34gʕ͚V=Az{%~{Mia)%ٽ9ݵybF;x1/uLZ;QYV7eQ+ڪ'Vf)s9}JƖ%opI>n/*eM܊w&Zű_vݭʏ1宮[pۻtw m?fѶ+7zz̺t{쌚0����|3nHr ֘L O&bNi7\ oBT!VEMkцkBmZ^*9P xt#1h $%D!~Xo/aC}}QCpd2 &"wX"iT%c|t?\mBݧ>L=Kd5:6upĜ׷T&8#㒳,{MGFx35+~ʜު#:Mu8s<}}~`GL\bV^9muܽ2;Ș9}[{'gYxϥnm+MGK.m~ջw;y]JE˶t['mvxޓ3lVLv|-U9ꨨM~?tJř#_@�OO����qτ(KJLPU *µf͢yl<N-ȅx ^&B!0ʨڬ BD%E|At:%QA 2') Q$5ф#x(sy!KsBv7t\?:|'��� >LG,Q#!pJ x\dJj8>jTX*Fj Zդ6+! 2R,Cs8l"qMo>^hEX@%DV: @~x||Ѿؿ#>]טs nVdO?Zǧ5:9��� >ӢU%m A#08,Q[Hmʅ|Z& @4RSzY pA&R!h$9x90F1(°!(o/=J!tJC;x $f<>{n\\c eo?uqΝYO� ���@|g'Oš>XJl3+ jJ.sS[U+^l5*TF% :LDVrXg3D#LL|08 0dO?Z Fw`??ʋ;f>������ L 0jUV2̦ (C-ʰ`#LcQLJN ,Er#=!~\Ⱥ ʊF"B" B%(Tj b1YL:@'ID*B0y 3 =?+��OO����<Ux,&8<n GkBIP]d.ԪTfI#Q&M7q~S㬉uƗ{f>rPcH^Xd0tOBC#15ǏЫ 43_vqrt*"ex<ܫ YG^wDg=_86%L' wM˟:;5>""]uRAğ7>v� >����g6ۃtȬTܬWXTaAjg>:tEj`dfFK} '6-**ke24*bsX<Ǡ1 :r8R'Lm8}j]S3Db=G<NEɥw$_eG5V6jVײ\?q"J7g(}۲&m3]0)gq����~|NW\1<n3)b"\5 79#1sTjT˥2Ϥe$ϞT?{bӪ*bR)|.d\D,s2/($*KcelQMUɄSMo^;vbDX43_rl٨)ܱкiYfjc泻ܱ>D֜ܵ|tNv~AA~wopݝDE_?vM;eeeUsދk:*KG5~*O1>:2&嵏z'>ߜ02?;%ko}Ǜge9uCgbkg%do<n\L}Rwen]VPcS+Ӓ{<ffS}]e~Ngǎ,~{Řuw>�'���� >tEC-`aU"SHuJ ҟ@~:9V4):l &-6ejDGh~zA'>fɤiTJ'84''d__;dc"Bl?C'$^wbFt͌nϸ#>/ɨ}k^Bgו19\tҥ=wlp\=ԙXi<6N=g>"ݵP̞uG{>qXC^'3>v{פrn{bb _9yS+>흙߲,vf+f{[2K^B~_3Ǭ<wo|"m9 Oػ2|וy+c�����M|:&UIm15RFf1-zJ* 3k­0#AZY396IJNn?erS&aH{24z H + qLr EdbcfܼU#2*ˊ&V6$ϞUmXn<sG|v~VFBv󼶭{>8?J Z,rΖħÙ[g.-++ʎ+^saJG3ҙ}kĥ/E|"uUzL{g7r+'7{{og|q6ַJ3wy@3y1� ����Ͽ&>ÌZMa7F zԪS"BdB-JGc##"Ԏ`]ÚhnPW[Rl*%BnBɠ@ BRTJ&R XSbFg^66'kܚr*ZQ?uݏ !Q{VYxn\;wǦ֦1K﮾;6]yrc]ҳkuew;5]ǔ= =g yXQ+HkS:w# ar[M];z37>s5剩niK#sߕҧuz˨9E{o|Ha~�@|����">Cp3܈tfUk)zI-qش:G!Ȥi MId[ܠh@  r\&1O$ 㲐f0LIg$`~D*جusb a8 ӽ1wT~'_T.<su u`B]."ݱj%W\B㌉N:8d{mgKzw=]+n؟w~>u=)1oA~syo\W$=f>9>aߏ:Svy{�O����@|5n09 Qz;A !:{EشVN%낌*RgYd QfUJR.hJXJe<?bfhq]3h@*#~h(D`U {}i[ kܱu3 K&NjhZ0s>/+(()]Eٙyyyc>{8rdvNNvVAŶw eZYzN~QIsv<plmr{ol?v!A OM-DԚ1"7;f.5r644lo|6%lǎ?gUInFN^^Nvy�'���� >ti#j-Hcֆ#:{>zE+3iefJJ|BbRK jV!k$FLj5bVQK"T>KcY O|r9l&HId<A}1> ;^C(_/~:e �����gQfVY4VmQeJEYb ̌-*L:CakbRUJ*iNH**e>u!&ΠtE1(4(Ҟ@*B!H�<^O= ����f]Ei3FiC *Na*ZM 6ʑͤ4jjD\H`PI THRˤ !fxD:N"D%SW%S)ȍB8?q~>}!- >�����x3̬G3̢ jB*Qeѩ:eAfUVZ)JD, d"B,DS)D<'e"DXB>[, >ɤ“NѨH~Rp<Mn o~^C| ? �@|B|��� Og9*lVmZ{OQm5-QdRu Z|\,E Ȩ"UI2R!P*_.E\6䰘L[D&R)t׷HX :O_/ ����APƢU i)-E1iUz\jRVi#JT,r^+S+JX%\LRJLHy2h4@bHc@ X4H $d}qE#:�� ���'.>CLp>Ԭ5zԨJV% RR&Cj 5 "QJ*\&VI.YrT 9l&A0$*9JD_G~>#x,Q�_ $h/]WdN\S饇yȨg,9|n�@|����j%Xj5&ҤUX cYk( 93f jT.Kx/ j8,[g"Gr9,H@dT1D<O‘F{phOc Ozߚ}849f?ͯ|OG:<Hw?{��O����@|VCIg5hMZY4:lPLIdҘ*Vmѫ L$<.Gpy\6ÓIJH*p9l.+bE,F&RH2&�$?B]GX41ħO/COwF,ջIcScccKZ\FV|,>kQ6͎+gUs[kJnjJ/ߔfVOeOw]bg3rCWNt&TntpkMQ3ҙ;vή&Op:2Zxm������afmIܬFŨ 2zͬUZZ,FNԪHy|>'D|>x"!_"FVr8,Q>d2L6a@<H#ىaHDDduC}0^h!^&>3&L'M[{SSmDV8t8]lfه8齤K7\S-4rC痧(ݻ ]ݞgR#_~q~AbҘ޿sb|GTE�f��''����ͤ1B`f!7.ȢFb[-:[jjRK"GnT)<O,.GiT:=A&?ĢI<H$dD, "9lAΔ8$NJDŭvs}<#ێF&Dڷ#>_ܿ⇉ϋGQɽ{:xg{6;̙4))Q:r��''����aAPѬu&ZV Ud٬Z AeT$\Mј<.rbp,a0L:IJHSIx*Ҝ8 @yB!?qhL%^C<alȉ>ۍbGIE/|8?$C쪊My~uΜR7w3nB[)xm������^|Â6ͬ L:V0F`jAgu:d@ָg>j\&F dsY<dp>pL&FcpT,Cnh"0d$>I%~|a>9_tns&츰tKt_\yꢬ[NE3?;!u쎻(Zq ��O����@|bBQd5lF<Ig5mfɠRȑ4uƠWMZVRrB!Sjؐ&f\' LItC=B <P,# E_ӽnJ3E?{f& QμcSMJpĜ~\G.n0C�/ �����'&bM1fFuYAfNckL&rGRj5jVѪjZhJPbB!iY᱘@*ҠB:E0GA\_q} j`ahws E~E$>SGE';qb111)[>k"""7y|ϧ#ʙв/{G|v3>?=;TIIŪm ��O����@|b d2-fٌ5j1TQopR&TH|U*R*U"Ԡ1@ 0 ɤsdE"?XR/{+>}px CS #��OO����?/>&`itZ`&+7:7Jux\.W*T*B k2P$En"2:E d!I! Jb(HG>ah%ma|q�'rzx C!7O��''����4J jVGӤA2TQ 2)RL*V&W$2@,K9+flhlz s"BID:Kt� An_P.὇}1Æ'������O`|*Ar JZg e3鈒+R\,B-kJ$JR xb>N!#9BX*<:ˠD\2I"1q@<ޮcn(�ks`0,'������O`| &]d2LJ"X*ʐT )*drTHBT(qyb&Sf<)3LR(@n ҟ,1#STDfa0$(>^8?Ws77ۛC B|� >!>���c�@|B|���O���������OO����@|������''��@|������ >!>���� ��������y@|�������'���� >!>����� >!>��@|�������'���� ><'��''����4dik)x tYYy3LKMcY y g7^2r5Kr͘wlxsw^ߝiwC״杪McjZX<oYN)E ˗D׶k&9~}yumze��OO����<)L&L_"<f(}.?s3PSXW\f)[]<yܥk YhTޘc׶ߴmod^}ߴu;׽y-ss۳פU.Ok[T6?hˆEQ ckWIY["b|'������O`|+j J[5E9s91"V j՗,_6keeys/|:}qM{V:hyxV9kș+g=ҭ]Vδ515u3lsbj;/.[h�� ���'0>͹#&/ k ]&Ο˙%ΜV1adv][8yi樖iS_rn_eµS_v|hwnx{֚]7_!gśwؼ䌵K*r g0}RyEs$3!>�����xZP99w "+iM( fZF2^-[f;3=u-knrg-Es^/vRk[];dG>|k7&6c͎ VWZZڲyݮ[>lXvŮڑ=Gϋ5zыť0 ����悪qf'5)hY7=|ftyvxU]D?-jvҔl1̅o/zs̢]%߶mRۆ^۰7[vj m-4iͭ/xp֖'/+g.k ^ش1q:gUϛ|iGDDL9=Dgۮ~fW>XQ;"ƌw (dyvHߎGdtqhCk }vY3eFEFϙl7o~ngץFG&WXX_۫7 ������'32:f}LC%ѵB+h-S]^;iY7gײ!wގҥJe|}Ίkv-zPmٓWlZZgnl;kn[K2',v7/|hnXْq"*m`|еiGmכy*Ëv#8?YxޥkVj,im7o~HC팯Lt sݥoo?G/M ={فب<_8*>?w'=zϨw:&�'����ƧrxY ʜ3jfM^d8muU⹬VYRK1O}-y֬c-i[eo/4~km~W*nT۾sw\<kt .xu҂'.n^SpkꤶԆuK+J燌l5fΖ<0>vd30='\X{Ȩر7p&5ʕv噮J,Y='yt䒓k<ɧz(-9>aw%Ms_??{oL(/I,0ۉ N}R\ho~[;9cr褸h#:-30is|f[ɖļwqF8sk#C}{>7\7>]q['�O����O~L.k8y>qnk&^,i.V +beh[G.Y@/2eIެXec^֞͝?}E-xpڷ'L״$cuצN]2mnYx ,#ksYMoEw" 附=yjm之fe?Gɾ8y(i ǸLv=Z~o}B~5׭j:6#wimEQ-ZԶ|;F~Y?>5܅z;Iݍu5Ȣ3y"ŦwzF⚩GW4o1&3<(O-Zy᷅#Ǭr='̷>C~{G߼sKVkIӈO�����? {,HX^R15vvDbI7Y'lm \cX)Z5aUӖc6?퍚MMߝvFL]Q<gCAˊGX[ڶmMޞfeoX5}UƴU,QQ]Z2V<+t4u$RV:py #Ō>N;3>}0k} &*^e^'ad1~aZ1 y4p[ː՞ş>bvÙoھv0q}b;)w}^_tв:=;D_}rr̤9u_o>@{GP=5݊W � >���.>#r ҴĒѵɪ)𖭶MoFOڬ(X Y(1?fuW,]muvVo5g}̵ (xֺY^664-R=CWGL_ռ.uʚVVe5BJFo(_ O= >oz<Mg=׭9,.pc^cooI@Jpv.Oݺ/ݷccu�-fI>gS9K[K#bG~N~Um}}Ʃ ןhs祯=sq>#FFͽvAګ2>|kɺiO�����w\YdznW(*X R%B(Joҋ Jv"(wBHF@Ez̙s&u3gs)m'o%cu P ]k*Y;j9$)lE!Ĝ_̾lx>ǾpzvN8ju!]~ׄÁ!z%%4:䚸1Y7'w&?W!rm=m>.bA(_mK/6E~߯ ^s$3I.2v;J4SW$ .M:$}򼼼A_$quAoHE'fqi出S|Vr#9,5pX!F ˰uu߭-Lmxlʻh`bEHhy{Was ������?'Kt68f{msR5fPuiK4=Zo[&|-S|N3zL9v#{Y#6Q9vynD昄6?w`[=kd+9'H噢q|ڐش({kÊ?- M x:!WH;uyHLvnAA&Z)E3Z{^ُKO F#| Lʻ龴#1çOHr0o8Ɣ4x#4#s_T[f+mWG(v1v;Y7p{XP~t2Nlx4V^.R\{-,6W�|����ϥ( f~k~zN*Nj>7;dsHE?)cY (MDLQE^t8v})S^IN#I<{'%UdihI|pQ1u-v~УȣY[]Ԉ>Y\>Pu^ӏEY2M ]⭶ WJD=RcC--]#bąǍeg Xm[%j4MQ":h=3k,O8rwiMsW?~iQ3Gkk",K<#t> 1.oMCF1V*`$h=cA|n+�@>����ɧyuvxcVv +,"\R$Q+*nr\^loy:+^9WB3Ͼq+}a\|ޑ'#2 }3ұ'm &fG 3 ? oy5]|'B|KЏ/�O�����lZ7ovuvQkdb헿xdKg6.�t$Ӿ^9W/zg] -)mAtL[C>aGb2/tK8 …eݏUvKQB)%[nv:`w7P`T\(<~s������?)ڎ+585n+uKnJy;}sT|9ly=|>ENg<xs+z-L}lx$^J/t{yQ<MN1,ZF kX`3Q%AbEgSrߍMtwè'�|����E0^2|Vjق^3eu*HyԭNYy .=~%9DlFy)`|u"M|#[%6:bO{(OuY6( b"!2e>qmNO��@>A>����S^JURml<dbMWWDK;f)d%\Ⱦto~OΟ^ٗ2Ng6iجUޤcaimc}006AhW}NhhМCcTݒ$ 1������oP>%Q+0ڮRmg)i9%e 8r^Uئ_rϾ'MWSvL<jNٶN AN.헉~HN\<tpe9*ɆY'|\8{3ĵBCuޟϳ!6Ako-m-BC\r\U#_vcuo)&?O4>|y?҅,lm-`.-4"||����;ݢWa<eb=BC}r Znn ċ vΙs\2 wRD* ZAM*뗅 %FBfcp0qoo1jW}P}[%|Dϊgemd)ꞨEd;d~Ot=fտD>>O.p(N LQnGk@>������Ob-r>ƾu<%j:_kZ4.NsM_pͼlp,4g[՗U^JIn|4!Y G4}Ҍb!GPl ~U3.?/_yimR+qQG9v|{؀"]\#iiĀL;$Ehg$8YWr6@>4/nWJr_ҧq}+e9Y;T%xؚܣ D |7)}{uB.R\8֦hHG'\="JItgx X mzk>>=V琋HIMQGXV'W0bEÅ}֮ng�|�����\%J+ܖ\Vh9.Tf4w~Z+էo-.+Q l~!ei#ecUUm(ȩxfEH,LuN mΚ%X=xaWyT =.&c,5N=4( rFx[P= P|f]\jP|:3"[7呵Nu#8`,ki\9MOw3'rXqy`J|!}㕉iL'GlSN9MwwC}gAjbk5!u̡=7x;`mҋ;ȡcܚE*3R,��'����� |.T!,T6_a9O|ikSעʡg3"2y vTE+YmA9"r c]>rI)?son|K߳O>y.hSד/͸3UQӦ!̣{hRUhix%AaBLK9ؔI$l0KL}K6KCkM>vqh&[E>Fpz4g+ަԅ=)CF>{cGG#/tqķX;;ûPSz@GE/:>w=}++;<L\Ho/F�������h[5Eʄh)e´uz7ob2wRUmRar;1 M0M[g8m#؄Z9-0%fwL9n~*9* 39`x$b{N(5dس_2<x"5]\GsNF{uWu#'@gb|(3;-::2PgU?G:#6֚(tkaV^[ֽ'{o`"dVLet x;C6bw>ޅ+0CsEG!#vO˰o;ؑ7�� �����|ZqXbj fl5`5cM;tZ'mRFZVa#7U[E UsyfX9l6Dm\U Te]iI:AAP{B%)T|({'H/vHuI �,T%|a_yCՎRv)'Ax5Op{"' ^ܕϪB>nW+E4T(`\~| ,Yom)?"uP_ܚûSr8{`IvU~%sp93H6/F V+(F�������L>SXabM36fl3tfsUtY{ٲ *Rdvn+ȣvb2j>zm[.}N)JqT5R==4S5wũkdnq~QA@}rnH'󎏃)"O{bq!587t$";e}aQ1y|" l,-8ީ(qsprrvuʾrn+JMbs;Ok|_Tt9v{o{K;[ۘ݉_a} ~^M;]2r)z#4SЈ#F�������L>g+Q ,mk6ekS혵pRr&aJsޤc1~Ym-̃l9;238:%&*&lRlO)L;(EkO21~^E8Y9vj uL;ʑO>$�������O-gl6d5}I˶NZnL%y <$uhZ$3cYjN1[ A+ (9)M5 Mܯឮ陪4T!dj3yy! nkmdUL'ğ=� ��''�����ߠ|i={4yyrIRKHPz묝 4dMbVGsZ-f.08S&|iv$u}>2ԽSCl6 ]j`+~FBEz.(ekW![!N?W70'�� �����|Ikfu%(OYc*+'7b&9*,B홫N\h'Qw 6 ߯`'k2Z-Mn ʄMƁK]=[NgfW}ߕ+^K2@c)O1M#��OO�����A.4yeK,0yuƓMZ7Mh yսhxf$o&c˞"d%o:9LY&h۽1;,^+խl@]>{ʜuR2ho#rqj wX+:īyd*9f|�� ����7(L;~ ωS%Nј*o:EpJɫ o3Oc.[ lG/؊Zj""|Dz.R^Z ։nir^ KwZ.b8gUfid0gR=զDicύVюm#=9ow�������oP>O<^b%fJN]>MVgzըrSpfpJhPLr+z唗)oxo4ڳRSRFRnNץZ!2V-SuXR0w\9Q6.P/Pr\1Uqb`6A*vE)5GcQ|Jot5Rۙd~D#U8JhMW<CCK'�@>�����ȧĴgxisgEK,WxF382G.UeJ*[ aWjyI]4EJc"E;,o߈[0] w/R_r2BٌVUn&mUG>kq9VvE_iB>膳|>!??�� �����K>gI+Nx<ىRe&ILYkrr[fmy\+\U"m+XF+YǮBATF}F1Z>ah?],o!,R]VRaN 4m1հifd{hn{be=t'=lq9ݒ74000"FlFiЏrXeB ?${K.8 кVaO:Yr;= }5P7K]]{V(;<X<JP;Zu1& 9:( @+?�� �����frSoXMbKM\6Yz5z7XPpivl=Kz-t7 f'3dB}L]U՘9|ZXYܞ;v_ \.XUR}R]_u޻-bT2OۆYGi + 8,G#B2/.&ښ9rֆ*|O :ALJb ۹^z!bK|lb9 WT KrQ^p4x,(澵NV E\)L�'����� .\aUjS&-4QREB5 NIГ֚HaS6j;G^_ր2Q0lnUWxm@H5K^\e @Z{Y.]$}R5I5n4\Wai:z4$nn5ڌ y-ftEc< v --nB\K[!j}C--^`}ɧvOhf~\>CHD=\@&(?ɬOvjja�@>�����U;f욺RKbҨɲkBMZ7q٤[<'mkV{ i;,֛Ů \`-JZzrM#Va8.TtXGT W R \cUF.J:N1@y,=~LB`̛L}o%_ԼE(ɭ 1ʹ@FrWs755C :/@>������|NZ}ԕ+IH5"/! ;qaf =gO5mVWX[0|je˕+J[(f^Y\6%ʶlo^h@NJXP@}ޞ5M(;v[nB܈kE :OԲO}�%@譊 CKut t?xa � p?����_-k0V(N8aڄeǯ@MF_a0afeͦ5|;oqnIe{m&+ 4eP BdqQXn6 :Oyv sHgn.RF[5U5T(:w#$Ǻ]bF ٔwKTEH6x73g}4!₸Ws+x-t-~?~6DRᢏ�O�����?[MZ{,G!/c4Az%JO^c0Gin߹jEjvbc"WŬE`!+wZp]bw >v.F4bEsv:,e\mqB5OI-h%(hO%noEl_-}|Vsn\1!UsB{%GD$.{_w0׳t }v8ȉ`xW|~G3'ޛt.F>�����@>)gs֍_HBwNeSe oG-D3I`U蕘Y}i5ǵ.r(Oi5;mU2H9>zii,a]d-T53BysG[`-\0N֊jJ&O���OO�����I>',.1Gf⬥gHN>AZwKwL\hPogj>qoʒ1I^!Q}>q m/ij62 8ult!Ă5{$6#6XuR'US?PDY~��OO�����AVbR歗X9ctY ;$mDQb. 53vM^^a$G/g0l.xFaR=e #WaW75Z]9[-XbdyqlVcp?+�oE4 tj ��''�����ߠ|NNb 6L^[b9z. FKm&-QX ?i)imB~h!;gWpĝQk1 11ZX}+>l!zLE<e*L[,XZm#.B4P3pl ��''�����ߠ|J,V4wy$N#TwU"r,{-M\yf[lhzWtj.EZ![\Ick1[J/D*mcnC#*۳PgN?)Uھ3ZKNf*a_LRXzKn= ��||���� / '.2[Fs4z6;mpD)%)2(%;'-$pd9*,bu$U<W%U3{ J #['r<trMj*^KT<mL?vLY6*3Q@ͼBgFpioRܤ ��''�����ߠ| �������O���������OO���OO�����@>���O�����@>W���O�����@>A>��? �����|с@ ȿ$ �����|B �����OO����OO|����� @ O�����@>.~@ �����|k93{}aGe {9}dcp#29O ����E> yB|D;)l!ӇyO'rx ����o_>gD5>0{D;{&GHei<ad=l'����OG ?#鐳}BA),Me XhcV&͹d@ �����sD|}4%cL~Gb +j*54vcp |B OO�����9vrx?ukNu,ayYIc='3vR[N6vy],ï<M?<#KG SPE叉׿kb"Lw()�+q]Կ:sv}[gN7E:{))/x9Z[H4I@@>�����[S8m oBOXIG_xLbv#V1ym >^ZIvQ7L/e3tN+@[sˣG?<b^@3qւ~ :?/(^r. `EEEuee<` mX&{xpwL=WuU|XzF >g[Dkcam�|�����ʧX#GR:tS}*4lbުnc lQZZ*[~YKc8U ~Mrt>)nI"s:dҞ+j!<VMINGg&HqcOWby |&T[,Ȭ\>M.N\?$!`1ri7u=&_ 0)U%EFz;bwufěF %z78lrģ>RzDyJ圱ǁ'@ �����|)|_>>,C' E)7O*t0- 4d)hu)l~=]ˮqj(F:ʩ5e~R>cHHcݠfqj_\v`9fi:h ' zkG^D:_?B\uoS,J ?Ss|^Wx$II->$Knj[OEn\X[#U%?~l#w? ޑ=#cn6닜·X/d7#Nؽ '����� _+'~y"p],AY7RKg;/2l5X$6%hq *®_Ϻ6Ҟ^c =MϞ6l|Zf"rllU?/EJHٸhYO#=s9|y[= ib韦{+M *RMj]Wg9f1YfL:ё# }]Ͻav<D$ a3|CW*�O@@>�����z~| >@<a7Ca {8=tuY[i.7^C\!#Af zG4:ZJ5O#ݷ =|;q#W'rDM-ШOD]m#_enMwj*܁JIߚ@ʅ^/cv{ #"!\tݏ5H |g?tVK7U8m6 Fl`NM<YB‘!cG| �|�����Uϡ|:D"1&*Hx$N+=6Qqs޴5TYT3DDI,[@=w=59%&9)ƈ_xcxV4䈆; xh$e[5䘞l>. $6MjeT# :8f AkWyj2XSϗ1ycul>N|n/] O�����@>V>OSmEAjs[6z'# <!NM~veI2g^(0ki\6O Oȧ[xvj@֮]\icSݥ!C^R$u;w]EH}$]=s5Y4R$QRU?r6áN3/8_xZE霵ѧD6Yrra!"Ͽ}}&6,kqŒFX}7ˀyf^du&HvUbwZݎPzu= O@@>�����#r9Or,AzSn?T߽loya'fwnSrD} r! lH<]u{ 7΃l*hK*5眺Sm ŃYEI@(\͏3~0l`JAUS7O(s٤PlR~(mrh>ԇ"f7x"Jmo84B\{JesylGsxGAr.r7O@@>�����>/o'[G(a/GЊx&`1|}>ek$og~U/ ~r~ދכXyI R3 Fflvs93d. < �����_!i[mH  Pna ![ dX\!'lapv6tun8j*I~ԴBI_mܤPTdpe;hUV\+Yם(k'����� |{sCO>r hS$.1O.R.Py6IzMZtw㔉{N>,a4x55 NWdܾg伔8JFr稂ҳ7Fp!O�����@>‘AZY>͓2G@ \> X('lb}n(x5<q܂c7}\ݓYCΩ{ڬsa׿SBɏqk*6^x @@>A>����6sR#μ\1xB*Ҹp"q")#qI'^3E?Ls9$?_}\Jm'෴gc)Xӳ_Jzp||���� ʧp| GOGS},~#!W )xָ^k`Oqrq1~[^<T*p)18k?_rWUR>(i#ёVY[riD!^@ޟp.gc|oZVe]hhii+Mq}΄^}>3�@@>A>����/VXLS8gH9aouɞxsXdcc:wAw~~9A7cE؟Y5Wk?z]KǾ󏼉yI bj|8_"rMkڿ\>wo3pp][s>BTg;@ �����|~L>s`[4c>WH )<!KJ^_j&\-T< Of7s؍uOſlv7YSv7pw6j?%So6SG9vDCs8$Sey>)hctiymMMSSۋl <ݢZ*<1~ӷZuťu Mˏg{u -m rߔ3m͍mՏ;X#s#d;2f4Ĉ;q̰f^x]W`zR}7hȧyn<~\ܼ3#.yuu"1_v OO�����M ρ #D;Y>.'[Ї4EK}ӥrRdٯ{ :qEW󟖙]c?+7{cY6] nOH*6֋_iɯ])Oy~kH9}YBN~wx/aG `51'Qb?4ƺ<h:mz?z־ R>Bq_s}Slu^X]6|H>wdx샎yN*TN4~c~d;\G:b,aXт10K&qG#֞yC_v OO�����Q=8y<G>$ʩpntwsG 6X%4(ń1S[8-ޔڎOVf>yQWwmwȸ(_u1jh/O#LiwL q>J̿TQY񺬬Q}!YOYOpIe<s\Mbh-gMP:_)|NjMD>TJz".43KepsPGI}3׵vy[}O:KCF>4iCCni}@@>A>����f>޾e )a9wfisiW~X4oiMK_Gr2 cURe=E߬ͯ^x=;e Ëe,?T6ܯy^4V[}BD\ǟHiFq%>5y.#'ݐ2:&׽o ?hkCrYn]<`$zr(%g]'߭k,X㩫`޼3;V Fc����| 'W4V(c'=[W'K(lcX<uɺs~ޫ(&M;_s?/6#i5/V:?鰸[?5Ѥ{>L&d?Kxqa_iŖ޼/Onޭ+)F#Ūer|o:|&[Żi,OSsgBjԍ~˧q8Y/lh+0BmOsfD)83p9xтCYW*1rHU/c''�����ߜ|'O [@@ [nV+*}Bbk|ID傣SJƸ\^.lJBa._@[\Y=U"laڂWzv^tdK|;ϟs.%u=̼O?TC"!D~6'Gv{I?rJڵ憚򫃅Hji]٣{?<wOC5- Mo/8${-nhjlkj+Lvo[q-z'\kzݫ(^QQ,W爍|m簜Ɩg?A �����| G dWdv;S'{MҺ$U:5Ÿ'c/9X Q^ӌj7G{ݩ k?å7j7^]9^_<\ݚW٘VD]71؛_9Ʌ-47ݣoR-c ���� j϶Oz8-L-7RыUټG,GןZ}Fbﭝ>.z"{?mǠ; rGLG|~'3_<U7oegg\|3Yy+u''����OvT8t.+>)ۓRFɩ -r{ؔx fT?V۳Rclu"O.EFbT2*{l3jz}:z}uuciaHz7Ԑs ����oqS d:#r H>\!+ +Ltqx=6ɫq_YwZ)OHtD2Yl O 0|W+ZGeI,Ai7oN7VswF'=wWQ;$fU/'����[O_m%s~dDm\!#S4 *^P#z9y1z-4^7[:.r"#r>Gw*[C?%V&I3ղt =UJv:'����kbs3+:X1y-=)' .=SD{EvLA _K tⷕTNI7i;~fYړIcٍua&Jg߬>[ @@>A>����>#O5uqVڶun"^)P]LA䷰y$qľLϪE+)ٵ4Gm{m/Xc~Xhz}V6=n,]8 uǟc?)g.۪e/ ;⿦#]܈&1:q����oP>YC% ,~vO@d?'.6λ̭}Ֆ_SBb715tιfwiε-k~=13r^uwߜOIAe1 /]rJ"N숢6f+~'C|gs;uQ=kk~_ KNe%憆boat/ @@>�����G>:ky5Gvr}<('U)e7^[^~TSO-VsEqݚe8~p<?8ܾY:6ʘ?=9tBNُgݸc~wS F%y.m|$TS mjJUZ`K9Fy+clt^&9P${-l~9F|%dG/˫k۫E[DUM]C[wwc o3YLgѣ @=|�����'+}ԤsYgtEWIb >:OxTWM~=8ga iYNNǧ[alf7ade,A}鉱W/0𛳎VJ_>.Ḡ 7YUv':"繐Osy~7b.NJЀ[u&Z<'#=5>""Ub]No 5|RkωG_CPk2MEY]#]@@>�����峒pz.srzmZiŭvf!!s=AK59o(.6}:>j.~UT?MNYwEO\2QcGYjnųה'Srw\9{zEMtk<|^2H bB3tmvڽnpgmSd3|#"$Xv|>4};2ǬP<r!wШQ\g@@>�����v']FÄܲ?r^.>]ayGjkvwx$ΫrYH[M/w^rjv`S&G%堮7h -']o^{C_՛VIz5l8`kffZ^jvR`B]7avM ܮ΁ ߔ9?*<b=U?�����̚ uG_W>Bs_mKm t>b"0ozک-?[{7)z:j[ϳ.z K <a;f Do%4}Hf>rUַ=B3G|ݲ/h\mg>٦hv`9| 8NF>oU`|gn}Zc:_xtدOJH~Ϫ|�����y'8YBngmY=EmG=Mks({][.ݛ굯׬TQuJxPLU<dZM~$UTN7~RޱIJ$Ytjᙺ9Yn|buI$s4 wJo)3:k-9X]3.)u|P k(I~oOVp(OG|s|"_mB:xȘ/C O�����@>y~ͬS5\lo+<^O*%/ [:ʮr]wՎ.-ocVB" 4G/w2zy/)oz%grl_pYpʜP,yjrW|sl/OS3;kEIO|tNQ̶f]m5{^`;ZcG\v$18YCg!Whs6~ �����?/SWM-[vNvƸפKmu!:Sj(<K}.{=7~8.Ƹ_tGc,OCcO||ǀ|vWS<5Ơqr3Wvlgq̒kcR> @����� s։__N=^J󓶂V&ꞲN[;5vs޻㬏Y7fXYIrzi mKY+vb~ 6{ـ|X˱տ'cskO;Ykڃmun5nq*iP2*'����Ϫi5+.jluzT(eolynͶm*ό4c`xI{0EPa{මڪk[kmVP�"Զurw\B|z#=xɓ k=[U`t"Ît1{+ri*VJA*S->uF 8~8<K0`@|">�� O.zSp?+&zg}E+,_g΢}5\y_+RHT2t'khmxRɉ[LMS6Sk+Dtb&o`$}YΒJ>j{i.3iztaU|b���O|@a҉;{v.U3\K?}xa[*+>d8^EOfQ_᯺Ǎ$A+?qNPPT3itd$t:հӝ;yJGLߵcz4]GZ=0`@|">�� O~$sɸ_o>u{C/>T4d!+.<蹄DEa ʆхU@_U>zzE#N|`R&OiUSLi8Ҥ/GlPIV詨Г޳'Go O'���Q 0 >���F' 0`@|��� O'��� >1`���O 0`@|��� O'���� ���O��@|��� �ox���'�������'��� >4z-�O'���iPais4mUzjk @ۡ6~Fn&#)*=zASAE4<#;c"wz-@jZZ(?*$)G|7@C9;O>x Y>$j)�O���xS]OiOӴkc[8x&Z?u8 }GMCmSOUf&=* Sn类*(ЩFUPP͜.LJ4fŒ'6j1njo*dvMr!>���70> kV7u0 p?ZzېIfx< #]mGЩgOZϞ<i,UUY$1,M)WÊeѲbr HxRxM?"koX_#oJ\;vOjZft2kld�'���=$հ2wJ2jj?\̫ȢAnF[:r<5cK+)*8LuS ={*e0lm!GX]ב֥z*(*1HpF2j9_D'=yҞp< |]~&O�@|">�� Ot+[L&Rg8cOq~=y 7AЉJR%VURy*,Ub9$hIy0x'oDʖȜ3L.*{[)$k=}Bgc8D/�O���x36{.iim]Lhy 5=|1N3=:zs5IvJ/($,9=e'yJ/2DWTRf*)IOUӴjX _:x_;Gdmsi*vN Zxp<#NDJeB򥈐Qdiݪ}U'3cD<lyW~tzmn<w貔Mx1aBaTBƲe9pq̕odz}ՅsDD1f8wMrA&D|�� gyF*<.@MFMǎeձ7uٸ'YF ]5|Y%&;)dks5- ,Z 5v3xZ[99x{L4߰~Gwu%RK-^zeB2Ubܬeg>*cU<Gb!?~ڒNjqʭn_::F6lV5fŌ~L?<wɓ= Sߧ\N���72>csEz[C۔FST+l&[eQ7'gϡOs$>ɚN=dGh٪?{<ZJ~6C\}s,ENy^qS'nX=|,awIM(J*|>3YI10;Y*LK<:1܌-;gEČl郧b#CBÓ2R;*Pc⢄=^{qrbX(ـ)buKj/}t)O~ڝ#ydz-obͱۯ L}$E#l:؅+W-m> +Fd~GrHr?n`_"ߨ߿B(%_m~[ O���x3(n|1dNEKOK͌aj96s¦RIYEY!HTTTN=^AN>9VQvn.^i>N~S/1u@kd }{Et'HSE}Asm&Kpw6BxRa׭[bьCE5Խ>M%߲w6䏕(v:uXVH-Xa)uۜxЌIs}lɉ #+I}͇Â4rolG7v6p*3kd2=mﻪ_Z?:x;[wm[Kɉc>#x^ZOw==rK晚GM'?NACCɞ(_Ei >���g\b*SYYUYbYiy9zehاBfٴ# SEAӣp>Vnfn{E[ŘY:98z:vj\i|. n]iQfɎYɃ6j)u;YUDŽPϭ J>=J(mRilos"A:<~Kf>:T][ymlا]:6^6]nQ?7}ut錓% Fm={ңxڦ� YDj "_mӣ'G-h~~$GN|x{qn�<d+hΑmO'���)J̡ӕLUII`jh:qyl)ONפRIM!ͩL ,O+d(xfچZNᆶÌFC-솚Z׵q8lmSFw MYt2McHz滲c5 }RenJW^zeމd<"n5s}*Nޯ/n uLo˵9jeY#cC/kD~pG!Cڄyҽ%96%*\~_l 6>J-vu;Խb3ὦ*eonux[mk8ۭ=Ȕכ{>EM}'O꫏l']㪸0'"~)~� ���]}Hv<.i#ed25U\hrIy3YZJLEygv̠ RRR%Ua騪Fl5SjaYZd`1Iy5tu%QtZVJjP7Jd\.ȒrH+^ٚrާn.!>C+?$͉g@/g/\ 7ZmIɉmy4./<{|<s!y<"̑Cv]&[e;;CUwx[y;V漨y7ZqHՅ6GoKs>HnnyO'���t2竏O]0éO­[ȾC\*G+SVgKݪ2 qdt Vjpl]-}'u];ISE$.lN}UחIwBFM=*=wm."\n;kW)?]"�N/3[p4zppI}oâY߻}͉ѿ :gLf8WL+6>L?%ͨL|Њֶ: [({DSVozgxj<띋-/^/{a┼+]w?V|]?12ku25]r3Vݺqu\O<kjn&W7 ˅R >���ЕGCCΐyȜ>>XӤdO@аwqs"ǎfg/<I_izz3LJѤe@Ul%&aꑁҤʳ<5홫 ]PvjeuտK$7is%g.XYrG C£[{^8Ĭ(:kL'J=&%&T1~oyU}0Vʓ?ݕ#"݌Epǒb0:1sCv/T|ج_!O_oK%?oxx6D|TOjw'ˇN$ţ&9x+V >���$m) 絈όRG挊M 0>0>ɩo#rBc6oLfRIgڙgGik(**𵵴x\5]YҨ+ryl2d N/8]qtBuyYIc$S{ɢ* ^'���>pTX\b!FvsƍfѻCGϞly!+^>'OOvrɢ=Iy*+)0 23YFS6p2pReմ,jz*LbAK\Og'8~?;@|">��͌HaLBxBk@qԠ^7{n햍;Li 4j+u`-`g``hemfsN5zYy3XyÇ WQZ:1r2yL W*zSeqee O'���ɷs<<¾O_G3kRTڪf1{Qd.HW$w1!CN˛|񉓇N4sY@_o00ZO>@؅3dqdkR#>���S>Lys'$4qގZ9Y:6)ax &;~O)HYhh4tI43S#O wHt!~bW 4px0h(TL'F}n�O���n|VTT8qB^'Olll}]ӌmb6,,)iTJ8qRo`0`a„8q)샏vĤ1j;l:--m m=[Ɔ:Z]\ʚ42!#kt)Ro~=0,ln5uc O_Y%=GO[ҌS?ՋKnٳQIdj1 Ӻ ?���.>#GH0^{> ~iicٶdys.]yܕ iAȄ[>l7F1H0px;<9#-B&=ӆ>.,v` SA&dUScX|;g6KyK+-\]:]:TQI+Yuӌ< 5ˆT_/Ƀ4>| |N׻@;0� >��'QZZzzW|:0T^_Y.{;ۼ{M! Qb\rbBJTxt8a٪͋vfǷ30З#Jvu>гO�a8JFF|&t5uC&KC~\5uN㳱A2;eU牥CB#fLzO(ޱzQܙ֮=uYΉYr&>lG%&\ғGkg&3.:.>Xj[r22s'T?#RwՕ|3 l{Rs߾Tyc̉qڼ6X0Nnjܘ0yɹcL\p!~� >��'A<_ lKȜe;EN0o??nVpa|Ȅq#CG0$wl^RlbLtlJrrd> z{xp{8<\5߁k`lbԳE6>ٺԵsi4E}N 9N46t᫢͒S^zTs6Zyl'T5XX1.3ϐNđu Ҩۘ\{G?9;*mHsOQV2>lH˶JjޘIKJꟐ+f/�'���|}voc&skًgh1*mf?bP`P@!~.}$FE"qlL(,ٙFQbfjo ڙ`2Td6ryd],WN>)>Z5Cs㳦; 4>t]Gwn2qR^^QQ4tN O12vԔ1k|zԅ.^ E񇕇R33GN)n% +tFdRU7%L<E2՞ڼNlQܘ&S3����4><E|iڸ r|"#GM:#FgNb#£$>Ä;{9w.3hXNffba>fmb NQǴf#E^";H+ s;pﴸd[ 6,k~j;ƍu${I͇J~9z&"x2v=򇨔ۊ.4ms~IӚݹi77igf%L ��� S5E|0Y: 3@d.=ݘ31:46\'   <^a+qqxAK//>}a)LݍNZԇʏ˥n2 xz5]ik޽Dfujm$S WՍeIS~M_EQ,'*ݒžXIB2] ~g1くo\ ⑕/|:<m!!>ܘϰ9%%+GΕO���())kȜ>>ՙM&WWU͑gac4yڻzڻ[[8:9={y zr؜hJJJں*lFWѕT9lMKOAeK_}:/%3g-Ycf[d$I&>cٹZ\p狤Yܬ1ٙ[+t~D|=PI\촌љ+y$=yʾY/ZxÎ%m^v7>ܘ0{ziYٙ2l�x ���bd3Yj,OKGەg/(XLʑNBfCѝdS/G㷬ڶqSvsTQQ)Pَi=4GӼP;qD|��`|2e\=6i344շ62p5΅ojkf n/Ԕ q׊kkkBiM)<J,:]E^dewd�D|��,U&ix,׈coaifkd`nn%=ɚlEP;[i{ 38fh`zًٻ9s& KCC"QsҨ"%,&׀WVUST >���70>8\bk0 -6e9Ltʟ٫_π^C#a¨p{UA l|'諢*=gi(pH4lmҢO�@|">�� O U&b4Uxjl5[WĂol7655RgkX<KMiineo['ܽoG?)p_xhHP<h-t_(rV7\mm̈>u4:u-mC|� ���o`|rsK*71j똘Y;Zkk$>L:WiйwK>6V6^^BÄ! 6<.T9i3f|1LB|� ���o`|lu&DYŐ^V '[WDmljaglbm``9n}CJʪL+kKKoHpPXHpx4DBƒF$罽eG_|ODkOZvax)f$Lۻ5 Ex �O���W,hpY 6b0[SrTj 6KԜofiobfΖTukc`bbLPSSWPPCQ* ^;0$xDhBCD!#D!ݶ{aX|'Ftg흃ba:2^vfPq_O�@|>ȑ#ó`Ѽn S ��^|zarHp$ɨ0٤H5jFLSMWVKC up#C},;{4z4&UTV}G !8P4<,8 "aY?زwp) QȔeko\"x ёy߿[<Xx �oj|u?IO��@|v;>G̱l4>9,n,5frxL GӞmYZ:F:F- ZrTgq/$mN9BUṰl읜|}G @3t0at3SN7ٵll|*=*.#2%7f?ÆƆ_9ϯߒ< #׎gU/�$=YY%{v ��v|fɏq5H|rX<2d19LLO6MX\-#KS#KCscum}Sk}3-@ѓ4BTVV159�!# ߿ɒ]uY[?MLJ?7|\{!$T\nfsouSN}5d.'ޟ'Ko*t =ْ$m읆Ӷ)r���3=gT\^HsJe0X** eeUJJ*J &[#\W]K9LQV&Ks5 \uوG]Tfrl g^y W HOh]w2M_tBBSZ*x*>>}褤dHasx �C|ΐyȜ]O-ޟ'޻}ƕN2[w`އ˫+K 8o_v��O3m,ҟSx<-%%e={>-xZ:]NWVPhJ*JdgO`suͩW2js5 tL4 4,tmMlikZX:999xًl|\13N4_ sbs;MM 6Tw Q0صj!>OҖy t+>ޟ'o]|ӁL|Jkm]A|Mxɥ<[DjFYQ.QsTּ���)Y3SGJ=_QA:][-x'$WÐa0T׵4зIm5mcu]smcSkW-C+5S5-cM]s#[5M# m=c=cm]#m=-3]SNՙ>걾ׄ=7Fnj]eitoê{=*>뫎%R"4V7>>؟'o\N2[(z|%U-&L^U19oƛw7A���#GMOɜ5+.y"FlYJ,GXCd@Q^AAAˈo`ni7;`Q!CZ<]3)OXMˈjv ۄ)kɧ<@;S"g%EȄnᭋRSGOɛ6sK�IXL >/_3Z5Zg<撚k_ 0-n{Y]z®T���񙘞Ggj,ރY [z dki[itH75 $# ɸ-IP-c;mcCa>!}[ Yf:f$VmMF|mc.^p��<繟Ot¹.^e{1YriMYI ���6mdƌQ3bdzJJJ*,ECzB@*()3J*J*L*[RiiY[1m40t1v5vw�ԩS͞Ep|v ~x~V|�9Ak ʨTLV^[.;?���gԩӒ3;8z>1gn|Ճg˳A{<?ũ 4%e (Wۄkgooehkg.3w4pB|�⳦&99Y^dLyn>}#v2SZ]iVV~[\Q]YZ&nIݻq눕H]ͽ6Y7yؔM7JK޾zp���736iB\ԩ!a|pXS4 #U SMS6VTf>SQAA4my.luOT]ל|%k!=jB̩?�諨&I<Q[Ӂ|ߜ:֊|_K[?=ϊc bxzڊ rb<vs|��#>c'č7rrBj^LܘtCu]頦m4!ogi`m0d1ʪjQ]Qz.iг6^Wה ffv!>�I!ז]/O*>~_=|t8xh)'u(:[��|&>_Cx? �t+>^T|׻w@f >{.]~W��@|�*O*>w~I���O�7>sv7>54�� >�� ���&>�"]XXMא9g���^������@|������������O������@|������������O������@|vIAA~x ?�����@|vzx!#O y������$U /<uO�����@|">�����D|6N:�����' �����O2c|Vt���� >\.7gee. _�����Çϔ!#W|VUUCd2���� >͖$omc4LHAW6l[A?|gO% GLdAW{u}x3>^:eʔ2J|\|݀aQk.���NwfT[vɵUR[nݣw@lw_ۼǏpcrߔz&KοxMnw`އ˫+K 8o_v|u5/-CkÄQT\RQ~]kENJR^\|wxr?_ >kjjd3pկ^IO-lzߺ_���x89fΘSJ/3:tmjʅ=Œ? lsշ$55 yorx^Lyc\ryGV+ZIpo-o$AX2߷Ƿ$ߥܲ<>k$K"5JeM|~E5s҄ܬ3~**{ ra>{o(f| O?vtF,+-<:w\(\5ue]~wa^|X,4õ6w⳰p-dg]]]Wn|9_}|iffWC/‚J>pngg+|ov};"0����tꗑ4܁ξ<?ŹνGjz')>:6&LutꝜNN/sQp^qV6%? 1~;Am#9^ow끐m=+%d�ʦ6̓V .Yr)9xi9XM߽ke;M:3iq%tl@rg{OcWl'.pߎϊI<.y>ɭmdgwrQ55vAsvUu_C3]&l)wXȟ?8=/؜>Ǔ[scsh5si?߭h9?ݩTV:=>JFd-uLR%Ҍ= hQ+]m?l.n@5oF:nJw__?���� >U3[ցpCRS xսGQj2{1sC&s6ޑ7Kդ.NRx:{Ct~ݺ4mCA||5nHE55S MyFiM�WP߼?ºƸU|4gpOOv|\#)o�忐 ʩg!pa  {yi\I$;-l HեGIrt%>ܤK >ykHgޕ<sDYa Y?73,'$T|yMQAsaV;qOV..V;NnK bhZbmAY~&G|���{vwOI?v绕5-�i_&X}Քv5^vcct{o}m4W~g ^_ڴ osiHVrqӠ䳥mnRґU]w͔amlGK|ib|glע;>sj%&-Õz \lnaӷ@pVRjW6c.h aQZ+dzHHXr QQQ$Ç]O2[{7o^toǠ_ &\|[?J`yn޾42pgdb/+ÈO���1>G;Mj"~޾">_b*퇷hяH/T6foYQɊ?phs[Ox6g&1$b9wv-NvI7E;|}u{vx[ֿj%?3P]~mᑤYXޫug|nEjc E{B *<9қBw$m\P?wǧXX bw,-7U!+K\8-\w'���KgݎYgwlm}klb;v7{}fTQR ?VW*mo]lSt{g69X*~:iOUa U'7N?mj7oپW'_O7fe%ՕE_nη]z@]M]ђiNͯælQ*}Kn_=P?P'Y]}BaԦ?V+v6J27>bWewfD7Y:3:gծ{ҽe׏< -Y+If4>-}w2pt=U$yP[{~k\U]KwYX{P'IW<Z+a~_���NVWVV^w$#UUTj~45ء_/w*eZ)wk?Ko~_i8s{YM]՝?Mj-GSY|6vVWtlơ#Vm潷m^|U]%kkkJ,67n>;C >7'q HpAQ~@r_`hDx򏲞^¼OC/o9;[S9G5!3R$ ʞ,)iش1&OᾅOv[zii Q8>e ߼>ϊ,-kaw2k_;0elvg78,"":q̧{> -( Q����:05fzĿ O`ܶc5%7Fs$ISkq6@oslb:XyK׾L XZ|_{ Ŭߕ^|~oƑ}mA/x^&>Vo|_=nWV9)#I^$[w���կtq7}JJzԼy?OHWvAH|uX.7^pQu����ۧ)=8ƉDw~?cۏ-Oσ=,{?j_���.꺳p]uAa1HQAA? 4>�����@|�����O'����� >O������g|O�����@|v`?����� >������ ������������'������WΝ;ds!>�����ycǎ$iI$]~G|�����@w'N QIҒ&YWWG޽{O������n|:tɓ$*IZ$Ibu|VUU矈O������n|9r_~!QIҒ&gdқ7oR >�����[yر3gΐq$0IfHrJ㳱=|o߾~:������ӧϟ?O% L$6Irlzꂷ+**������sΑ %QIҒ-ͧ@Y]]]VVF ƍ/^$l=vؑ#G:t|������y$I$T$H#IH$'IT$II)>>>|XSSSYYYRRR\\L z3g/'O<qYQ������#yH"" F$IB$9I% L[g}}=K$REEEׯ_'dE9�������$I0l$H$I$-I`R6_EyKDjYYٽ{Ȓ7o,,,$Ju ������@D"IE$I<$!Ir*Oj'u- Ϧ$%JI&Z^^Nݻw�������dH$T$H#IH$'}ٞnϧ)O[jhmm- VpUUW ������@ $I0l$HIm+/ϧ|^P؃dj������Zjd#՜$$lUOSޟTR2D������$N9)/gU Q������Vñ%\B����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/images/paned.png���������������������������������������������������������������0000644�0001750�0001750�00000241061�12161032160�017720� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��B�����<���sRGB���� pHYs�� �� ����tIME %�AIDATxX>_nbO{ors˛{#,`(Kk5ƚhرŎ H, ,.{فu5<'93gG&������[ziӶ%t0������-@]M,kboiZZ������HhBE[]kKg8ZݔJBdRT������h!B҅ԋV:SknrӢ7TH$< ������Qb!B sHhkѓp /Qqܺ:U]]]UUd2+�����7+XHn!B i1zfkbr58"C#7E2‚|������ )-[Hz!Cd )3sr5EHVTT x| 0$cHZ34Rf3a;Ο2R/$`HJKK!%MIR5sT*L&Hh a~~J;i a999Hɐ!=CT{qƩ8B!\nuu5pBBg`&:zb'<=޴(JEbG\II 3gHҐ'(WT詸rz-ujpp <##5ӡ3 < H=<M l{A%@Pb͋4Xjjj^^3g}?VU*뫪ZYoq  Gt<q\п?y~? E4> �MAEピ,334jHؐ G º:Akܔcۖmak n-%KOgG'[Q6vn.`\Ge 2ַyg~`c5Io/&{:9rvik5ͬ޽C@@4Zn uy^|kv^cvӺL4ɋָ似<gHҐ51N. UZZJk䠠buQ׮~;ȆU]FJ3#)p<T㘔_t\o_7R�WSM%$L 5Tyi:&yuZ4n13+ǖ\E#34fX{ͬ꨻O) 5횃 uS.ݴ5g'!Pby^\-df^:e3MNnԸ'Odgg#=CT }{sSRUWW7hܸq7P7nɓ<=]B#'%i)\4+}\_qS&A6tI^ WNvKgU53gcbv^Qa�7SMh`lh'g6 e86G;73Ĝ&<<\5)e5J}ڸy،1jV܉ܽ{˪�O =fF4&9:X hZd8ί4#mGXN0S(Kmky5.!!!##4jHؐ5h|JBg iC_g׽ơ1sGivPOv;ڹ:9.Ӣ3Nn1vqNILnb+25ADu8fqܽVa$iカF3m3c<l>.`iu<~>nS/Ŧ*'~CT,V6}29s䥚voF9G?o 'Kt+N-gU]oZEkmgs0mv1~yCDKjah_�t-9wu\6S̬_CZ6J5/Ns#S(K{5_NOטXFKMMEzFv)sH$\.d710k>HAx@Б'6'i>2m ; !nvR5j&GZ,7vpq*Ub裼*xVc84q&I&DN-rtjh@]ÇN+o9Q}sGv21tr0Ծ=W♍MwҜ=~ܴ]}MomܜW;TlT5{�?捵}*`gb!I˝<QZr4BB9sŵtwcFG Ns#Q5izӓm5MlpՋָ$''#=CT [SSp8yyyơڍ/Ϣڰ_VF9 L#wzmiӜ~?<ONp3j6/g4wZ e{:I]G\nk3pP:Nؒk8L-:S^|J;>:5/owikG ٘qQk0߱>A' xtdXWkR@clk4:IQT㷬Y9w;[ў/fy}h4o{zcS1}KkU[^vlbMїxhnG ZOb^^mrM5zi}3$iHU[8a8_MU%C aiN.qhNoqyiԸ)9Hl|xmSk65#KwqD7ji^p&/zX_g1 4rmk v {`L_swh7$gs {pnƸy5δUt;٭x\*yW8ezx{:\IkݽƸP_`k ]ِۄiQ yiB0=F^c拪&yo*$%4δg[TTeo/:.>~߮]䂀x!|E=v6'[1ԽqRjMa-tGۉ?K*ssu K*yN1cB;['5δ`kb394mutpras}S…e =<5h li!ƯNdKܤIN!jG[ggoܟHrU#]nul}_Ըf?,Oz& r 1>c[ڴ^c]}#�VxبS~~m?jx)aoky[7Μ=<oji\nnnƙn_|ѹۧ_xz*Μ\M"9|]nxG(5%k SV,vnks^Έ L+}o{L}ZҤԪEen.*Gw:TdMALj7:Z0r/sՂ3aZQIbGIww䅄bvgGGeԲ /ˇׄ{{3 /$LFrI^AGYW?oߕ5&U>n/hiÂ=-~dFt<K)5?:zR 9T:2ft8nS!mkJРSLF^:e3MR_8:\Cbnto[fff̽{ @@@Z8-X') ϩ ?;y{^n>V q㔦]oԸWW3r 2 c\BP.OWk8:WpרqUmt&S5;1UoC5cŘz \Xtt]wg&6TڊjO9B)5ZZsimߋgD ]gor!KNMV:ƣиV՜@@@u Qۋ(S3o41;}LqF]9rysC@@A66NΡrLA\l y9/x{;Q[l?46ƞ7˕^Ĵi^Xih;!l<vswKh�O'Gz6z{3$ ͦWN=vd*Fv/4)}== 66 ]hm-6ϜI1BFxQ`x;�crP@wAڼK}3~mGnlI anxq>zةgx/mZL '<nj l#PzJ ec󆼦ƙN{暓E7F27 D1> ~ݠv4l}IM i7''y_]YDžxp¶ŀxہU4ڮɀ ������xVVV�����Aj������x�����|�������!q�����������wh�����qV81-`a #~-:3qc˳sRou׃nyrlzubRHaE@:t!F B9+ &T{z͛a\t8? ����XޅMyegN]x«i\ꝛO9q&׈@$mRkiT,z*!^$&޲8+zf _oXYMgW5 h.O"}S?,8����x'mB\M^ũfO\H'pGscOl1)4$$$|['ElXT_tpӊIA!!3#VՋq_i_"B'O>}RJ75~C1eMxІV/Y4o5. AHO7J߾:>uދXW,[1o??&-l4q02g?{WZ ?ƭ&kstUSMZQxy%_IiFMچFfs~i3{RY/���?B(_;}ŝR1}Ϝy3i[x57fe3?:fzFm{|"O6~21xsI1فyZIDu׶ϞQgh|W_M [(45dAmH"-6#tgƪ',<X+ (TĄ-ܴmR77|)XI_o^T&~pKCtKWUkDBgd0Ơkf����@5Sq.x7?$0NЮkc'yUknM6gq|}T)Bn00T`MjuCV.]H-HRC?F4dRvM2.iM-l8;I5yN?q}RZTHЄr/XtP"OƐָ6mq?'%Ɂ0!���|H'iWǨbtn|fG% ]J 3y!v/EA5PJ&?Tو@BM)*f76o_4BCC xBt :c-6]Uq/Օ2o}-T]_u5 hN7IFi}7w<g?# W[Wa<ojm~5skZÕ36&sʏ<ϩ8@?c5&jeظM&����-N /1- <Wɥk75F,`ǝ[9.lE3bDq79ٚm5!;Bq2h\o 8pmSUGW fQgWmq[[׸6J{|!0#CƸwOx31hBSW>zFk&~YP ~_H���� 4N (+BB~*V B\Y0aљtt Z8i:g=|^ȧҊG&D'F} ]go1#YO(6ԤsyMNB*hL%3'|:Ț'I$oWI?|d˒gu|4~'Gm3xҼj.ҸZB6J35/:}]|+C긡ߊq~SǍ+.]>5פJkoӤ4zMI7qu^,Y4g����wޝƙbqʄ͚t7eF-[8+4$$44tfϷ2kp o\>148jW64tjpԌY+RrlY=9,:y[FR-7LʞX|axP_@д9KW/*eʅTw&}64I_ԸVK{C<<B<0ɻKeeJ[߈ƵZoۜr޴"&s{���4N�N~A[R ����xI3^vߞ?o 4���5N�N.f8����:@������>l�������8�����[������;i\:������yc������{@������@�������8�������4������44������4������x4[UѤҊWj*އ����^޵!@o T8IHpTS�����kx~DH6 z-z-I0\h-)R2- hq-N%k?F㐂54+-*E{=5?qwvV _=hg.3[\9fpOv[K0pt]���gq8 '1ə !UTK V!#%j\:FƁƽSHU=,8;;{_h-eMn;W$���4HNq  1pLK*ɩ8RԸ^b-&`qƕ'>}!Uŏ[vsC)0!~ 4���x{gƚKUTuqzN!j\)ג25!r:%JtPٸ>VƝӫ;ӌ9Yb¢G\}ok3CYr[JtÀ^mcF%(dUzP7eOj~i6c 8zN~{,6ܜp}{3w KQS.Q)SAK-tӈ,,X 4%ϋ{X3`Č_F Y_���oI֣d;k$FPp2-|-!T\2 iul֨"PӡjuJ kJָ}i~vj"h F_ NzZfºy@=  .bݛ*-[|qEMtm2BeUϢL{:И}4@>=/vqFD'(=,fM'=KTX[dMO&hRkWY+ٌMArOðcW+%켅vye}o_��Cd;qmzk QHF/, /WJ5" WqL-P(Õ8)ב*V5I;,?hblj~ֲg\QTszG)Jp2yJW?,}|s*W)1Me\I9>%@`%7$tv{}3nd2,zŒֻ!>k tBQM/ 6YTbnTssFND u >P'cL9u喢z��xf^Up=26m$FROq SiI,IY]\W.1OM0%bH~ L|Z#U:#QW+>X޼NXW oOg+dzmk6:yY^u[\d'!^Q#a3mr9ߩRfGQl=t_w2<7XݴC 5<f d }P=LS3*wj\F#~3&+8eСV-F4ߨq 1?&βs\��ޙƽ#yqTTMrxHUIup" !Pm\։%B"[(ϖREE"E\Qc"a#ZBK䇮q,rO5]5\{[33>LaioLdZ7:V+#3v6J4,(o}nLjPņ;yVOY"OJi=MN0jbi * c`/@kjb.U|;+UQLl9SuR&gq ,l5j+|��?$^EZ"YVNH4zJ'5Y"UXRbLV Q)\i\VhjByJ [q U:и=ܙe8rݯΊv5:$+CӸ{Kκ65ΫU&D8~pϢ#KG0'%l>cӤk IgO�sz֯ײN1`kb@q}7oE!pnU6nڌ 5I ߿���3FI88Ɣ 4#:B'T\5Q"ra<K%Hˊ% %V*VpkejgJm޺-Jyy鳧ZTQQ~K/q5(s+YWqV̑7q;zQ^QLt %h8Ugܸ}oByVY]̄%t_xM*5׳kLnD:H'~S,-qh=mk8L=V܀;=2rFNlEATEۺ¢V ��4uq~F/qthqN8.QQ9wR GA0%5$CR<5)Ԓ-QPe DKE|i_TjRM+(J}8P[o?@}Mkl+bP[Y-L(ZãcϿ)CM=ppߝQ㛻&lZ35 ?|o\AOwv\հ0:xبC-3Nʓ?wݵqQ 䛞0E͕ݞ5;~R{ߏ1oCoՉE!^{sEi4fRȵJX,,ˊhm361+֧F"l/��;8exkA!zz72)8nʓr).Ґb-!АR)2PG*_jU бxSbl%^(Tf 5*Gŗ/q9M4%##}מck5M.efeݷXn}h\y#fj1gE%OL_uQ7qb"lr u3:ޞPǛ47qc}ޭ~N}{l\jv\_W,w;)s[m*953kPK;xa8s4nC y21HnO`$\?u_  ! j=eܝbF$>ϛ0|`?fm쭳cakq{o䚖hhߕ&w���oDZ<#_u78S4B i^c+uUoyTWE2<5.CRk;L)r-CjJ%UW)RF.*ĪEXզV]S}ɓW0M/XN8upدqE5[ 椂e]77דAIOnơf8}̹Ө;::~ɚjK]m{)/Rr@Ts:T��e{mD,"#r!V!TʵՊ+U2L!yjG(tWՊ+dHUX\]"Q52mT+TH4%MXh\%YD"у{"w'U0JJ sK{"w%>gV1JJ%=q+)rd7,5555u!!1uu u0ԥBuޝh(ЀЗA�{?:iW ##nW8��q3K/jQ8 a%j\!'#jm2WvF<W$rgJ9q\ӡ"LwVϜ_*ꤘNիqB',@$euu ]BS Du<Y}ѸbtW/efd夣/<|ҕ Ht +J_G2KƙOò*>0'd[5ǃ^MP閣.N8]B4^BG.3.у�UUϚ* 2��8ŇW8s^G1 :ֈ4\'Ro dygI4j|TKtɴUdȅ1ZL2-z˪^K4G*JKD_V!Tޛٸ\tp5td Wdf^Bg^GR RgWm;?u45ش; 5 3Q7їAxK����5e#XN5a$%)cI5jB!E=W)iVds-g-hYjZG`:$|Fi5Kx)[KJI BN(TJ a_I `T{_4.3;-+'Ds™gO$=BA_:phߙӞ6p,#&I᬴_N<?m3Luuu̹Sk/A8wL%3{ ����Kil3>Ā a<6h^#9JS:`d;\r={*@K9A=5Z@_r(bsn~ƸW0jU)upq-Nqf>ٹg{ԭkɩO%З{vujRrb“J:0wtN܉OAkN{GPQQQ߸c7u]B]Finܺ }oDh����5_Qm[-j1pipRk*%c8O͗᫲vVVT*8F r ϕRڛ_VZNtuKtK|!v̪,P,%Z '8Խ7q]ƛ>zߏ(%u}#D߈{Eg^Ovi)ϝ}2.d!+z GPQܻgO>.<}IUtt@����5e_`|$,P89JRGU圝ٕRazkpZאBED |FձF̱XynfFSi&_2z9W;.}_Hq-W/iu*uzh\Lܽظ{۹{'?|߸]{v?yvthODT׽I=8tA7/jGv|8SgOڽq-O7eR+oeEofѫׄOXa}gp^yֶ ���4LťUc Spr-A=g%jT>RRY S)8ILG'ג|5Y"V戵{K*ؙFt()+SE|QmJy:߹׋r#$Q,IZp\޼Ms!pVp]yq1.&D= <=Fq{kj@DmR4kOBϭaikܼ]uzS%?[/yBli3>o���q+H(9D!S,Vkj"F+0R} ̖<dtrUQ\ ]uPL.[1:ߧݩSwӟ~,'Uάƽ;UO9w6䃑(N?v(zL3jtdIVgƝ:sSi]G[Iܽ|&cvϽf. w}wMcTNZ<˺_?#:Sͺosb0׹!C^aYBJFyZD畮8Řw=၁l2̽ytrXQnck^x6̺k`{Լc~���E&/\㈆H9Kԓ" dj N kZUk*L{Z-2U7Zwi%ŪTXD-ϩ~=cB*bXOR8Ky?Kc+ {9zX[vGOiu 4TVNHa UJ}L #0u놌֥Gw ܢ@b~!{",7V4yyrV8/AJKY@Ogm>?ndsk!^=׸(KPʹ;?mƙ6r/���3i\xTs7#H$Iԫpj70B%9jR05JH׫t(%FpRԉ c+?‹]<sG *5XM*<z[aՈA7Uy6ߗKޮp5lu01nՒ]E'lsƺŒԗYィc7ž*::u}a?hСz>btR:maѧFl[ڳ) os^na| ِH%޻M4nfz-},`mk*jT1?¢/_2S7r^|���ϥq6NȽz~8$gRZ\KJ$_KV4R 6&ILr.p窴R|cv}\#lvŜbpK*0XUEd^\.qdFc]O}uD}Lɲ<%C׸C}&lg&p--yN0k˹E\tP_U\.>bEqےb؜o.Q:w߉*7J&3GZld3'>FjUݢ ֹbgy��?5S^�n~r8+DEZBvhzZ1=A$NP7̩pRGt:޼S-yv΄}%{<}*NU?S#9XeyEv؞uOS:K`_}]5c]v^:>k\-lpOHDZ8<f2ەFo;eaїeza6ΨYlCTw|j]ΘeqУjH͛kq l*���3i܋ƙ +tpjkNJi5]G*0}<_%{!;;iաC|;iy!g~gB2{^zݬgkVWPov;2;H˚6<-CdWZ:)0^T}7|jfX=rDiF ;G->ڢƩՊYy(PE֣5"$c˝8G` Q޻ VsY ^#V+%76ٮơV XqɧU< z9/Q>���k\2Gj\3Npꭩ]qZRAz%Fj*Kp}(+_Guy_:mNq!fQhca&+,ϱ]v?ps?쓵 ͻΫ>\*qfȵиf}2ֺo;% Ew͑#bp["IUӝMsP³D'rr lSTMFqjhíٹ.\w4r/���i1v4-q^ZzT륆UT`Ծ tUrTI b*$ ;tӪO>cwǮˣ:Euؕ厧_H:2Z0fь?ė<ņ;lxoO>Y1"y:#;WZik^,ո6P)v=0W����^G^FpëPhIpHڤZQb r*\'IFV*d&A)̎tTg>Gè]6}6؎?td|ƿV}[쀋%-fgjY7;Nn:. |/o ~pҩI,иQ 7| 4���5M(E z+0j85.Ґ|%.@RDRGo 'R l,Qِky;᷸ӟ._tWvZk]fwqؒO~p*ۊ]t{Ӵ?ctǥw>ِőoN=1'{˴qohQ}Oڪdz9ÿ+8���ha5:[Z-UQaӷĉHH kZR&R-4a,ty1t;O>ޗ52˺GOv{Ds9ӭ65tM_}S.KuN~4'$2SWUUu-hRiEYҬ�����9Gqp Kz-FbNCHG|`NrݓaO<\57;ݡ}~:/KϳOb}0{}|QHQqq"_%5f']|6vW_zv-9V y?B������(3<J7G%^àӫQ`#)L .2,JX0)]pFW<{q_5ϝɿݺzor׳1qeSk{i=){D)Rc?[(e*xOٽ.wY{;[wfpثUMy+ QD ����q$/oSzpz-FMũ ﶗz%X=QƷiWb?{˪讳9aDP3tNft&w=0fj.GG1^t_b^M95rs{o)?C079ALl摎aaxTQ"V=SfUr-h-3ƮI{\gk ;Y@'-wFUZvM~חNs1E!S&ϯ)k\;dIVUգ0N)1��ki񝪦;ZJncz9W'`E [yDxJv#[tf^x#~YCSsu۵~/m?کU]\ aHsŷdsEa+LL,{Piq$zmTS4c~:v˧߯0tm =>+RxZ-?EwZn,NQ7#~F6ܙBrSד(߰%>+f֊b6#wS\/ʶ :(t~/hJ6]qE<${^;s��4r8: k:a`zӑr-Q{3ZL/Pr<Y$ g'LcOHez>uS.|l?^XGHLq7oup?=}/ W6?u\2)7 f%,N{`>=yL;MrOg\m9l/(/M+޸Fh~te^G_+nY;r}*5Ѹs{\5.mY<bPO }]}7=jx>G griMJkޤC6'353F Dqt٫ Qmg]7yZvCq[drasCZ+,K(78 w5Z{J)>7nK3IKMg=+8IN/7��+kmr0ÔeruưcDG4hdD@s)X,x%CJ;SG4z{KiuqhX0+˥qTWZ {uݛՁ4?8FΤ;ţv'uާ^;w*;05#6Q{lI4[z<*ChI5΢Uvl~mQ3 DWlm"^gF,h(g߱ bmOmM7laV~0&,ݳ{U/t6&]޺>Ⱥ78,8b͚5w5Ѹvat+^e+7yyA_-bAu-k28΋ddj2'~qGkҋSjbT נMhyVl)~= ��^MY7 ZDFOEZB&jW%Njt !!"61)AGunft[/<oATt:N~^;{ߞvp곪u㓪'$2wOӺOsW~'묨 nu\x㳕1ex=eŲh:[vZ2j滩JZipHM⭥ɢ\x*a6F ?Q2ֈt݌YzS4gg,D{X:ײoH`*+mR SHBpU{^Y$V4˨wŠk/twNVBe`g*>)f_5MֆnF\ ���/qƗRϟ8U㤜 Yв:r8 'RuzFJ[E*&7=SձO#3%-KٸPtq\F&UΧ}OGy;=⎸|Ѩ;~ 3q|G̀^w=|{"U1_{ѼN+c;Ix){sIMl:[/S._Q~(oqxە!5 j^<Wt[t Ĵaj\fJʹ/T)Efa9lJ6vԆơ"WLk[�7Vggƭ4-P/#F DJ7Kټ(w`Mb3ܢ8ccs46S2:��xk1DEZ}KaKrrN`n IzO*JV|s<Þ䯏t;'}'>?=o Yr:7>dgnuKgDPcVHV׽d]Iz-o{NɚM٬1%x_ny0,*@R_o*䉷 @>,kͪߢ)lzS[M 4̟Sg<Ama9I#X q>^bM:lOiWC.<D{rk1)/g2+'<gG1-ƭ(,Y<~z-_as }H i`+9|��Qgx$Q.Ǔ94LդDM$uaNr-Qs%ڕ| b*??;0Cɟ6ᤕǯ[DU ZP#Ě_D}/.S/t+_y%[8+aq.O?!rCnn{\XïUh*H=Q.yew*v dSc<883U2Ӱj[/1rܥ˧z 6 B?i͆mjX9]J3~ )?ܷs˺^!q6)&|$UȈ_֬{7h\1nE_>81ES ;գ_/ZQ-wqIhzoJQaHy/5[yZa%[,euF= e5n R$Iэ>C6ٕmdrR��^ZzDPNV5PhJ-\y@RVKWʦ%=t{ Hu=iV^p*ŗ먽H0爱9y+:N?f,ϪP#Hg=`9s)kojH"Sj vR6.G's.2E;Y%]W.NAgMDbM=9XҸSz55RnV q޽W߁o5nYtk=3xʮ6IXy3eD*ɦU Έ={X Ymakٶ.S~<4׮QrA9Co%zIUBm݈uu UxޤA0ku$}#zq׌/M36��^Vz$48|5GSPFJzy29~w*a6hIgty)uk Jcի1VQ8XGV+Ess(ϦC_s{"xم[.!^$_NH %bT"jX"KrGz [+)ќKZw{!.OMa<f)Pjsc'0���@0g$$2NSiKzp /N oP^ X`ȱbh13Q`|5UlR P+̭II E*JבR^#N| CH kTh(Ma25bJ1 *IʃE>lIõa8"׸)kEX4OqÆ 4hjhhܟvV )��;8)Nd%| ,\S!r-)ޣ Am NJtXK(Pv5Qc &C}•>b)Ζ0V'Wcu ':R*^!%ZHi0Z'TYJ"S^劵Ly~}h'ReVsSIre]RSSXZzzzJRɒŋ�����Юzﳄ2LFj4RR#x sr2+}n.RG= ђ< Y)]-]T^D^(4ܰt+(GE5z9jH1XJW!r,[-x\/ϺL箍h:'[U?i IFG%zU>ܫWgX[[~q>O8���]zq*h9@ՒIM㴤@K5#U8Ʃ]1+ze~'(AHu@tGiTY)%rXiH@ jR UPCO3r)ūx\X}.3 f<c*߈[.(&1=M 8AĂ ر`A@" "zp zfQ8V"2UFPG=WDz+=.h2L5@ XYY}bitdЃЅO5Ν;~s.==}84����5'ju/h EOD$-nt=A,Ī]'vɞIuR*_@;86jB1Ndr$#nH2&.Jh:)*S<7 6ݸV$̉k]UY>]4!gGsP&f_G+++[xF8$qѷ̗ivȻ͓'O AO~M8�����8 ]"LjɆI%|>#Ll!] $X*Ȟ%BdG*J®!ndQyq"sMd% (*:)%snp/0}i-Ml|–\Sɭ.~wɪ.T oVboG'y̌h.mubEh+9مq&7Y9'JSuvwO>d6Dbâ#nΟ?`ܸqǏG<xpݺuȂEWΝ9sbv޷Ɔ3,ڳԚhiYf/`F"h���� 3+5:l. e[%pGJDOBqKk 9C$& Q:FOsė<[XNy8V2u񗤖F}Ӻ>~.~ts 9c,褐Ը;GOVoWW?l]yhi:p9}qxɼ \4.Zw~hܲe͛goo?wܫN%މ rӐ:cǎ?~<@pի_%nf{I+pZľu*C.G]qY_F#^`́V ����K Y(q+nM`׳UtQ'G!&Je&x*q'"DFcZ9T^-d8wZ'jȎxLFMV&jU|j.fGg+TW9⛧v*챔1.ƛ<MucotUnWX1'sN|p1oN .ky|Y%J*j+MP`ԝEN˖Gu5^<dOj+V'eddĨV5}{VsN6s%kl]ܹ#=VG{iy3, Z˸mgruȑ���8I-Dzv3+,h劉<1C(*dN,'JbXdG\9<,sN5}_^*t"~ և=n|ܲ*rU섣c74L2Be[5qcΩڡJ7*M1P~1*Ns"KtKU.ʞ:5zO<ZUy%5u/톋}dSG5K_8<*Y0s𬬬I&FtL2ALe"^2s=ָ0k$hsV~{ {E���kI(l&\΃e$zc#*H$ER@BK܈F5LqzWoyE 8FxwOOns]f9(/uP[j<KW'.oK]ԴE=1ׄ?u:lᬨ/oUjG7fƄI3v-T=pѸ%sٺnʍt'8v@Ѹ7"tttKbqƽF#A@#"/?ĭшO>uuWV__??.��� 5/FRͿ&7摭e7[e ~ KXR& /e %, '| %hg:x6Oj8Qt6nt Y3'ZΟE/L&.QUF~_yҘ/U|N6V%I%i˃/1Rj:[X<9q^|'̛{.gwtkR͚;uz娚[`9zŲ?Y.ܝU7oތTۻw/ _(((h„ Cbc~q0HZCt0%A����kM?]ձ}tݜ :2ɼB!ɕ]7{?ݡ19d}uWB[قJ-K\ R |-9o"FDZed],f|nПteʓ&ĝd|5d6[%t̓kLMhiA5&Hw*kΝM{ ZmA7ơ6Ο;cv&2jԨ'O"0Ν;o޽{iii~Ǡ5mGӱqE`FɈŵ*`:^+ .���[8 _VBډW_FΉ5l;\A,')꼋c7\Q;Wg:N—09b _DH )H&Kdw2i0ī ~GKdT24~MTKgE_H L,N,jkgX>ԵM"WqlZμ58ǍNDB;^*pK:.ϋs.S*E㦩;gִI~0iG|t:J~***Ⱦ̙g.XBi"L՞St D*@^Y ]ع~twT:ፚ6kM+S����k\5S`ױ~AN^ꥱuVŤn$:R9[xU4a+5^+Y<4$F |%m]#ٹ2&&th&'=YU$aHt/IJǂIe" #&OJK |⿋M`x!y9QCs-mqvW,ū0\47;;{ͿڨW_~㭬k"2;v؆ ^}N8-3sEۏ+< )=�{l׺380n8����A;迧߭_hG!5b]$o -O?hg)xRWsDD4 ^R-ȾJJJ#p/5XLN_Na'vr;ML~_IE'lV[Jd74=3Q;OXGv^ȟwzSUK v#*o9eEl˼nθW666_~4\S㪪ttt:&&&|l޼{nx�����kS~ ީ,z*\ d5l9)"%pNv&[Nvp%mQ=5Lq [B43:1xCA۪uB*Ke_n&\h$R*yb2O|}<K)\1'i".%c|W iMU_Y~ݔ{m#W4:k8> ٚ~^\q_|t:=<<|$iҤI>����``[oU|<#iU|*r bɪ&RL;!j\q#%%4A4yG k mNmqdj0ئ鑕F[iZұaIuaR[0y^9KX'" DD6#.6QK7%N==Vʜz}CfsΉkv%~v/}qrM+jnPhp~~~7[* ����iHgwjF7ϸ8^6MNjµEqm[\K6wlcf*41%4څz^rӆǍN +Pz&˥c穝:vr vvXԠ gs?RUp Vy{6J|&HTtjی l'}C/oUN )~+>]͝pQUSܒN _=rSG&x 8ܔ)SN81H���wY> p7xT%ӿg撹$vH+`|>UM8OW/>8=D (SLU=Xm8$wҖH*{zO<YٷULؕfӾNlǞ8WTѸtg|/vndӬʥ5>m:uML4j55Nv?^ܹs= sYn]߮88�����jW wbB@j$4RqBpmH)G=UC݅%)$.ĶsbORxG/ .x&Ou[F?Ό`OYﺪA2ʟN+=9J?luM<0Hȱ["'}NT1QJswͱSq >8FO/coWܯNGWޫ4;]|JѪ ]g2uÇ 4����eSW ?]3'icJm6ڣvnQީM :w ^5C\_-V49vm؟|T8LU]k~tά7ɕ?L/>;_x*/rU2U`NJT٪|ajkT*)}'?-ٯ`W|yX&ᣳg._%Wrǫ;;R9иW8����x5nʽVv )-F$zZ[7{JYxLfFYvejw) 1d*;mǘ|!G(`,GOP'Gj<K"J%<+%" _@ddնm496qW*(<nSRLFRTe² v?3@setL]5+kŦ_]*#rQq}8fWܰ8m~`0Ȏs˩Hey h�����h7u_5Nn^tiy\ֿ;/5Q9DVL VNVҮ5S7Pb_Ŵ!N[9)?MX4KWN\# $T"K")_,$)ŌStҸQJR<z 'Jj(OKyZPPm&N<kc'sb~ V%fqm-Qc ?;g_%����#_%ΉnYQ[<Ik. :* Q-̰FJsq[H=K1J7m܉1n?:5OTO7.qD=rOb)G,e,'ĕ׏pJGA3QGO6PT ;* zAm17^)y`51f9}s̺3WRY4A(44����F}Q8ayb^:P ݵ}k(m1m컭#&fAX& 5IWGӽ1S,|2 UϘaCĒ' _"{<G$9Xcg`hPOT&|no\Tx[9|-$co魱.?MkkI/{{OQA@����`kk%+qSƹ$ΣMiz [8 DfC^EvZh '̋hj'^,mwWyϸMWꆨ.YyTQcG˞\K$r'zI3?V2iOMUڪ+/um,ꦚ~m1wƿNw'Zܚh5 Dy +O]e%Iƌ4J]{~\cD@����`07J6?Yd2;\ NmD݇V?=YN'n'f,Ц_+Auw?;n1i֣T4ZMu}A|QWoO, G(Y%'.4YIi򅭒T1?V T6fq֑? ]z&{Ic=q{&:jҨQ*F)7ZF5knn~Av1;}+N����q#8������������������������q������qq������q�������h������hh����ƛpwf~qA����n#?!" 2Lovོ����Uzjb pd#k0ahف����qqqq���������MhTri9Ojo +n766`KŒ?x#?���׬q Ltë :hܿfOOztƞo54'>t㿀Ɓ���Ը>3.lN8Ρ7o[F" I!76=mx+&EW}޵m3f\χoNr!���Ӹ[ /^vimwɯqpkF*<>]Xb[_B.c_B)Sow}w3N]y7ߎ ϝ?p-9}w-+k;5et=fâbo\L}UY8����jH U'~;4ܺQGCHt*ފigN3شxE8DښcG;~Y  ^3x?\%qV*v)jH̾oiU[1̛7o1j::[^Ȏ?~7gάr>Sljn޸6Rans SDaH\;{̕'Һd<h����'%(dVgw-q(D:(ϙHAD]H@ץC,vn I}h\u9Xr&t"[\+RB:sJ Y FV.䬿ۮh=&oߒLU.Z4kGo\ :: P^}5GEZΚ^Whu{Zݶ?m=@DӈM[ RgZN.tsOK*\py���ָ*-?62jšD^!5 f1r/s;nb#F.{k}]:{-\kCzmARe wt͂_b2hfݫ~'S<}ˊ#e9꼽KʮlF7Oڸf%?i* >1I^>XlƙtogYjH3kEU����xu#t&}_5 kIjqۮaLjE"۲s={TD:h._bSREURkԩͲ=[4NAgG]W3,(` Ʊi6ȏ5 왪>sU,XPBiYm_MW|=RlR7dsxl%`_@����5F>\ϧ]/t'k#.qQx2Q=?~!ӥϘǿ[˄SL m!QCIK=r[{yWim{_.6uTj>} O<}ڼF?8{l8����x`58s|EN9m?jySă t" m*Lq诎7ܻ7nw8d͝>mޢ ոښA7**<]޼ ~_zKp8p܊FK'DYO-u]菽M$Z{}RTrWK?x!Ypݎ MdduNSIbls58����i6Îz_g;SS6vx_֒i !9S=,}ZD<Rapݶ]ڂG 'V׾Y2=*{J54bFvųcb>!jʢukJ4WlZKf4ug_iz5-j+̝3w޲7n?./?lzz==3?q<ɠ@`����<k>ڴKpj*BWבwŇZ4Fun~U*̜C#x:, B3S:ԎmQK!]3U 2kxny/dY3749m{J8U\TZZe~<f_V6mZg}����5=>& Ri/ߐ@JnD)M~(:&Npe%_CLnj~YF){7@����`kBMuO,ric_y ZYMMMx<H$M׫q%%ؒR,Î{)}zUSW{_����/q577_ZzۢG3AB|D"1G͆BT~|o\~AƁ���Kj2^St}ָҲ̬6tз?][W�����qot;56M4����@@@����2qq�����ADufY 7 ����@477?xM  `/q������U@������@�������8�������4������44������4������F�`(AҒ08j�[-"X68Cq:��쉐H+4VAjB�[ob1E uoA㠫�7J/ZhH�V 36M{H8��FƉD�`h!u@�����44�M~~~߱q4iq�� Vt+h��QT )S _e8��Q(贴4�86mii9)2R�8~Jnn.h��۷oʳ %q�� [Cލ~,;\4{|yK>cϛqGluy��h WWa-p]'-ZC��^Q&swm:]$9 %}ӴY,h��Y8gM3ܼdU<h��oZLUƝ-/;bOax̦Uyn,[0o޼Ũ-݃WhLGM Ν{K D6Wb>mǺY&6Rm��иqMmg-@wVyXqnl\9o֬5=_fOhWAqLQGjgM^W5ibً~<xY�4nk鋚2r߸xau^u\As_c͂_$+Zk=y![f/5cr{l��иqkl8㲵4OgDrG�g&v%Kֹ9g,{)���{m7}nsWl[œuMU-c2\*.P]}vϾB)Z@r+fk&lU&�q\w0G︯>uٮOuIlݍ�gF^b8*;q5c)8Hab͞3W`%46f*QqASLrйx `}egVmo�)IHZ:g鶧MRFi�SkJ2\b]dwժ(Hͷqq=L}B2*78ڧ|;NS?lo\�`7HKH́[-./~ qv?Wq%ӻ͐/[8��ZWΝKI87n 5!E h"(8특o\FGΟH(УjZb=6m��7XkqQWZ]@ד>"¼2c|ҕߗl>v?�|벴fxjM<płs[4\?# V=K1S U qy|= ��h 5KVG|8kΌ־quFoq7iG؁�ָܢ �!8���88��@���@@�����4q���q��Ɓ�4�n��4q��Ɓ�����e>��j<�Vk��Q^{o��Zq��@��hh��q���q ����������hh��qq��+ htPN5E{2_qR칝CE) ~�`(<au(Y eD:G8\��4nWxX,p(IubkԸҤ,h� On&q\rfaaK/]믜6 n,La^Z��0'3iR^WFaΆf+M5ŠhCSͲZhsK+++''Ɖ;; I8z hőQLOrTg4\K�^JI^\^6@a#TPOnCq"N\Pq��'Fkj^UFZl;v@C Z6jK, YJ /f~wI|,;/%qR킬Xn{/i:&sWѸRoCqw?Cjd.�;qFF[Փ[WzںfI5,3}jka`Zs 4"^zT7e& *��/1cWѸ4WUj ݱL+\8��QTl|_ɷݜ-LmkٮvPq[0Ǝ7\UhQQΣ=DbT-X~!f`y�*@ogQ+q:#ASSKfhў��Ҹ*P藐j 2/u.#5p3H.گ7=ʓH{wNPz 9X! ~�U4By51^E:07RX#ro~YI]U q��/# uTqD5NΫ e%OVh\ foRKw-XZyq\ϱq]Wz`bEHgm^ںt��FI@* z&>ȂP(oaiTL7胢o4��иg+^Dt\`1GӋlVsCp;I?3Un5Ƴ&;f2VA _`)jjx�"\O0K|ޞnx_9)S=c4Tt늪xz8vhm�;qÊ3}_XM*٠4"ze˭Σ>Bh7q"ff t3E wՃ��6%"!.E⾰2.m~ ~�Km'yXen)��ƍpi1?š m5 s�>E)[J&K_ ��N\T�`5q��Ɓ����������������hh��qj���8Cmmy���@ qq��ƁA 88��@ 4���4Ɓ��@@^Zキ0]h頷8y$nϚZy�0<au(Y,`T9dB:WJ#MW@ h[Ӹ] bX$ֵfq�#`t3PCC4D"`;fm`{M^DJVH\^B>)w Ҏ[oKS3n g>dO|jLyM3[(z9Af$R^[t#/]GuQB}+OeFc -\H4-1.b\D~W�?$⥳&|槍ڢx*5dBb Dg4R㎜?n)215O?w<}^dcnb]AentSӍFIQچ$Y@4K?[̶ ^'5iicByy5�=f;/sl<A|=/-銷JmNV tQsM)=!iqM/<.*NhdJ+ 8[ފ-׶ <rK#g7GW-!$SkuZ^q,AO�TtܲCgA]eR3g  T.)W^`.gtO+J(㑣qFF[xM-=#pV[ϾE8GF� ښ �+�☱z⥬k#⭎4WU[8m3"n|9K ǠP&דy%?*NޝqYWn._RWzo)#-NTإ5\!)2@2olC ˞ ̆KrT>_kcn\@fA %a΃Ѹ] 4W(!W$l MH?r4nGP)(dA;*^h544xRi/UABJ ه-."��!vuη?T*`\n<f%3-m)xgM<gv5nsDDGR68SCWok GĽ3 h}JF233=&`ojHא)0EոeK`VeKmt;`A ג<|0goboagW(w<Y%q=끦OڹI%;v$dk}�iz:N)C>;f,7卷w9Q/RD$*{1(-ӡ8*ҹbbS8xlLwynmie*VhC 4W|[@ (y/"ݙ('V"=}$kܓ'os+\Tl=eg\q_Cڙ_FW�?DeJx{bTɼ_e|:oagQJ}zK T7Sc{F>pN\,,%"bMB"gu s#]Cq$R5H(v荃@^S]fNv$HŬ&/l{§;bh}"Xbs5KF>$pE��Cs= /ɇ\Ѻ-6w_jTEr;*Ax:SU!՜pelDDOw035PU@g)2Nlg1V(B'}|TY .<`=HC\HW6Ac Fzcc zfhO,Qi 1']l1NR?SIy��F,R1W\G}k&amh' -aN횝-:Ke<.ВqO^~n)//+x5ͳW_]UY~>lő<ku V-)'lRkBNȫgW# O~VQœJ%ZGnMi4~h��#X-g aM[Oqs)" ơ,F/yF ˳)R�0R{Dd c*T2&@dv{ʼnb"`;!ג؎#/bRFm@���hlZT&1I1Mu 9Xܺ[F3U��@ ;8���8��hh��4@@���@ hh��qq44��8��xmp`@ qq�� 511H8pkA hh��oO^A@ qj\F -'r˵'Lоm,˳hV2D]lg �''%˗ 55z)/p6^I@ qoMv7bK[ך!ƕ&=(d @�?Tۃdt{4# ϔ9h3_j\s_Cl?_N:☥R1p@V %xho<JD�7Wiɤ󳶙 @bv (^QLI<&)v=bDiSD|YA>gez hőQT^>\8nQHU.9D[ZYY9y+ ncF0fvgCj-N�0<X][.dhkj>%PA=> 5ki` +5:(=h#9`'$P,kndy9A,$ءt@ #2F5i3}K{0|cgp&n45Nr6$ Xw^J∥F-f½{o2v{Eժ6OvbhȶCi40zjow 'N�>d1з՞%6v'+Xo:*48Ħ\Yyo'Z۽"SZ 4>_)@~e5uxesLMa8<E.a+eMtXġ 7g] pa~˾7f`+Z:ME-14pgV3"q53=Ӝf_eQ-jI| 4 J8rIQ(;[)r09odjjjAoNKң{ gu{( qWcJ[o=_a`Z 5`XqXh=ϥV FH.gYG+*k\| `AL')%rK~.2pp'nfyqQ:ff;3:8D[)-}O l{H3Eո-H m`6\qTn QFTe]~y9]Em 5ҳJW":h><PQHVgGq;J-0E!QG{J{ hQkm}'vsr072׶9Z8-cǛ)4`xsRzEm]KڳgL|X|6ɔ1O*l{dR J֣y|^mL`aᏬZ;$1?Ibc/hv˗-mEZEyo@srgb.N"r~Ԡq<7Mf)7kC#=MBVbr.)lm4дz{!,qB6V[[?(VMOkH(O*�O#WW]&>E ;07XZ"<Y[cmm( ID"HøB*Q)dsQeȦDVwv,ttиvOVXF5*YX^qr:l0wl\Ka�?j8M O7-cvOGEEzHָ'O$]Wz`5.7 iZ:fIr#Z!Y,<8`r�0lHv42պȼ^5+Xƾ݋lI T7Sc{F>pNsoo7qbcL{ =ھ5BȻmո~H2hq" ?C8 g4.<^%O+swĠ/Dҁ5 jn`c{]TMmmu3>64NvA 1wr:�C4 Y6?׷)S=myc5'\n(27;#(fnvR"i^qں^cĊLMIиv(=mn%LAgG/8e%" 5?j$w;@& o+Ơ~]+x}#LU\T='yS��H4{^G8p5[ocT,tBK=?yY$QPF 4N-ؔ.~'۟Υy}s0GWfNF'{ƽNQ;xSX\2Uq/!Y6_(ൖ1PF'�%}˙$yXeS P7e6B\]nq��9 L~H82H>2pK$GA���49X \gHz*���hy���@@@���@ qĚ"y@ qq44ƁA 8@ 8@@@ hh@ 8@ qWΘitkeWݴoO|-Tdi<i8B ';h5fϿ m<Q6ښ(^78y/ 4ƽ5?WUPPtNKǴpPaAE9])ɑX/en8`dĤ0gNxF`ynO%@d]t'^W,pj\x߶^iHlgس%xho t~6?),!WN4r՘fP§AZG]s[豮#J㶞/Wd oZ(]v(x繒nۣv-A鹕9 ; tv;ȴZWZj>6SWuvڶm9}{:A{;[8Euo*;(=}Dzu͞Qo;>2MĻoyEVƭܞ9v8${uN?z myg2% ťu RѷqG7F yp/O_<~˽{^f.[7tq5s)t7Fm9|"A3=C +ҷ8Tm9^hgsUr#3ơ< z_ݧkRY3Ɵ3$/ַ/-.ȼnaxe;n߷Wj\^3K4.911ܹo5l�lEuSK%v,!!L":Ը#e-$P@;nc /?{'@ {g:3w M0t6eVeۉ5$R>D"rw42@j{-o81C [*իpW鳽q` ?xYD9@^Pk6J�͇ iW45uStC[BaE{"S_q5ƹ<ęoy)%ƹŦ˗KSNwS〟}d$ z?ϐmzn=en391ƕ1R%4mghs6.f+,:fS㸴6F:z�򫩱AW3y&.)2B\OSJ>.z\sٞw@lfd9]Ems7@4:5ّ�{CqviiEيBlAm?444ʺ"6;'{bf_;NYEm]K44LLA6<n_mICiM}I0SK۸0j\Aqy˖6"nmFK*˴#%FԸJ-O/3Œ[ֆf'B%=6OېImz%R JWgcظy|^87C L_l>x;]%أw<Y% qjq=3qq)4K߻w@i_Lyz>S=[yyq}5H-- vps/j?g;jH^} X[C-jbp1׷?pUѾ[XGZsOG lJ9[%^C-<"n4RD$*{1a�s;ZQRv\11 e&o5Ɲ[#,Z$d)*t3BVZXXpm׊jG-V˕l(̍_`jz> '0=5N`ףܚ¼0獍qƏYo9t17[CVv![^-@eNƍԜg'We5pE*Nlw8#L3O$sYL<H OtS^mtܴ!S,mTV#R!L1æΓy kX=l#d}84|]f81μ]qIwG=hC=tFSfSTu|u!,ݎmqB/;Y΄,me{sfz陞5{B  "(bK#(" "KBCwP$UE}TNgy}NUE7NdWQjt"^/I(q>}`[Oۋ+a|ɼW|zؗߓccl 8I?YxlHzyY'aR mi/dR+lD3@@ScՖ!qhGΩ i Gxy3hyB#Y&hl9hjL<0lZP!z!,>I?P%ꗱDVs3*`n\3~Ytȸv4b9jjYjFm䤪4rz'&Pto8j1~bhn*}bjGQ*UvU~n)b!"6ERx%Уo X]xo{ux446ى`kK;Rh<lmߍzMN&-W=iH<,88`[[y¥[߰ lvq?/qi|.L/qۆ@` ؼ�m_&s[T 6@@` f 6` 6@@` 688` 4. ��Xa@` 688��@ j�>E-8�� B��4"��q���q���q��@��"h��qq����l4$÷a1؜ZݢXJϨmK9>Nsmя+p`i(/2RxY,\,?x>`4{szh��qLBnNOOƵCXiSq`׸Qh�/g8hmo^35m;~hۏz_-#ŸVv !i][l"~3玶&G)<6͓v�K|zWBabi{16:z8[@4غuӡI#C =3mA*혰 ?`?$RLTc .q Äb7:l X"|pҲz\.E?4XWey1{Ӯ۲׼J s940:(h�, m!\vT_O Op^$8лҸkDӣ<Vԥ'Q f߭v�K|"{WT^fq5+pԞ7c}+Wm4nN %TO!9m;;>m4 w镶 %K|3ClL{6k&Qu}t<A9jtX. β?@79b\?ϘY=:ii-sY[-${`>X1�K(cۥVOfC.:[~nM{iL"HU{调e1A2>=\G뱾 0THϵa)F7%N>J@у@9q �01P=_f3ni@q&q,X,v٘$JaYrLޠ/nMcl%FK53p[8j]W_5bU^L=e0g01/ aCReQ4h�,}"ޖ!;{'np,]^CgNc F㤶%SH8ij.mT<xK,tRHϝ[H0#y'/^hƜ8Q.WCl�|Riܛ:4_};шVMs5Nq0<2n9wu߯7Ԍ %G 1Edғ8Gu GF�iQK�Y{-s�gE1|Y\Ê=<qlK`FUqHR*TZżmƑ;oAnک !|޳kgB}Öm�' tgOՙ|{ޖ`bոc8T5NE 4:*Y,V僚$oơ0d Fjh�,x7nR0>={'OL?j[h\z~h44j\Amw 8̟:q2c*Z h44��ϥƭk3 r*ob85uX.?T{0Ruɴ-O ƌ�apq19<PQTigLqpc0ƶhc:,ݓ~B8�Xy`||":2a0355CD}WBZ[ƕ^P즣b̸żi^Qgߴ. 5'SiT yLJ4�h'$@eiyxoJO>ׂƽզHoږ4N[y_"q7.F|>HK{Q1<["ͷ?wށ8ӹȝQP gdK4-c'ZWYB70vq hinOoio$ ooDrED_a\8smL[ӯd5v1m mNM>h�PO>\ =EQ<0{Š{@~g͛'UWa ��qZjƧv~'$IgWZN` \J*KaY`tCnz6-%xޡ +dzMiB }r5\3SӇl&*T�ћA iqfXbRnZ'h��GߣeK;77VZ</%1 �s&q��fP|/A}!@G$j 7wIӫļ]P��O'ˌZq��"b(XYt :%QK{P(ɒOgMB��&|.3j�4;Bc\q���0j����q����������h��. ܹgA{@��XOQ 4�ƤR-hh��)j�>"bppp֭(k �:Zq��ۀ@J$8��_�`=Dx�u@��Q ��и% gtRzF:C[nfH|CoQ( 3W5aۃV^h�4EeqyO S9L =b_lnnw?W[0 4�5qˉZq!7Z !,m8m0MxLղ. R(Uf 0qNlR>+*/ ӸOjԛc€㕖0jh{arBc3<_p깊%O#PMǕg8hҠd8T8pr�ɧRF66g7\Y��Xla39Б��xߣ j������Ҁ�����������q�������h������hh�����z8x�����GT*Us#W[g�����~vzzzr!1wq �����@$ƍ�����4nrrrACǀ�����ƭƕ\;9n�Z3ƩT/htE�uA97j>}z޽gϞ AWn�Z{qېݳRRR]h]Pơ|*++ס-9/F swx[ 'JYďe\Ԍvd}L<dbL* SKƋ? Utz&Vnb.=\C@$sK[¾?濊K4}m]µwiU+vL@^ȜuqZ+ ^X^FF34G *T?.➞alolj&N|ن@>~C⵫ Uݫq`vd:R1666S.{ӫsI_Sy:t㣺ʂ.8Zhņո]Š~LoӥݓDŷ_O6oݳ6~ǟ~Qbj?2-=q率6}?}otm~<4F~o;2/q|<ö'_fGMvsk⯿駟w_X'M[,/(LWYw۟-zԥP-u~92N M;c#xui\@ylQֲiYk+jiЍ\/?W_Zd ;{GcI;;i$1g?scfh.r .QWXb릔H>qzvJhJ1ny_~+x-|J1ug7e}/H8J7]#5Q|F})tVbg~?~Z ʧh`O8򛈓b~[76><~J}S(_~szX~<JX>>܁yu Po[gKg)}3j\Oۖ~b/$ZUS<L߯Ӹ];1>x+o<F&Н/W֮I_0T04>Q;NU/>g:H#!a8I=CƑ.:בͫ>ˮM)2<<XXXhy^h4f$&Ƽ~ +L_Z4t57+'}M:DQjG~'O<Ŧ+?ߴqʂ??Uj4gB:LuQ!W;\ް5~MW/c$G%EA6}e]~-ʻZ~o8P~f].Iu<hUvǻ<k?c/>tL4#y6Tn>ϖ?ڔ=dp ;e>3M*C1 ݼ_|8z~A#-%hqiH/[ODEGGGDDD ‚c7u~[PHqTvs q; ˮ/w},t?IsϿ^ݸk3 e~%-[Tku}xFTe(db[6KЧiW>%WSݙ~'rubA v_~f!;O?6θ^_&Z&PܴbW4CiɃƽ_mqlg[6Fwl==WH|< rCdpr5QEBRtwҼјHa dl\ǫq]Rp۲KhqCc/NoѸH8:rkUy~ٽ69{}e9h0j\D]n*=%,GvqӇ_ ,4y H?j-ۍ;4iw9>oނ9<tV*mL܏mҩJx`WV_|)ͼ }dya^hYQE�3_LTj4h2cҸJl==f\h Ώ1nܦo˞[kƋոSǎ=ك۽ёHt7X. ӏ`"_~Ho7=?^O7nbl A/EI*]j r G"NM7Zr٥<:X,92>"˲4OuæT'~5Gq>m_o6۴+ř|vGUT%ow<ƫ޸?H{txWfK8`{qdHX?[z!E#s߫-?pmxlbHy+mbz8Jl=fk eCV̩95V΍qc>jCU^{R4li nK7?<#4on63|_'ĘfWqu~-d`}b[>EWarC87iGҜ׶-}e˖]~^L!A6@xRucj\|<j USn'Uÿ˖O>;Öٕn~b Oܔ/Mh"6}Vw㨚i$ #1ۤ>ڴ͟!>ۺEZ4p9qhMQ_v%nJiٮg-Ύ1Nۚ-?忰36RHZ)qDV|[ n�"�.`sK?'-tи Ϥj. ؘ �ZFʹ^жSqq�D^�0o~_'2-@uP�., q������ 8������88������8\������ާ8���� @�����4�����8888���������8�44����@@@@�����444nzWBab% rV_e(M%u,!8!7ol9:莥g؆0vdc9Òە V2pPvz}gU¼30N|_~ V^㴧 rg3|w[JvMh #L4UGyS$^Hfplqc "6Ӫuq.C$+<+Uru1o-b0n'ָ_k$V0=x Otunvaj?SJh+ qokwkwq.i!jVYP^Q r|.\{n?u:q\=g|1hl詮U!UH۠q.f$UG ;qNlQ2S=i׊mO;< !ZĈ?=ёFi=K,nږ .q Äb7:Lߵ'c20T&&832Flo[O 8F^t42 "@(L̸3>c OoDŽIsuc[ l˻'ߞX;+t́qr"|pvGUq 6` S|릺uE2G={о1 `YvLj+Q/i3x׫q(I3xsY;,09*-~t@\ø'8AF8M݋?:\+􌓹O@ֺg:*YXq}ߣ3nmk::l_(OPW[E(~Jˑ8=u3&TG,oƴ75vf5Q }Bu.Vd6/K7Tމa)Te3<m'sǧT<06 T7>iCվ<xi(eEj(88q S|IH L[bX8Q7ڤJTKTXK9*+VW^Y򁪯 -QQJ4%T/fȄƵd*j{ߗ/qS>p4n i"4J?ހ^L~b0+(X/ 3uZL=EGjzAPx7O^X<we~\y%bDX|73p6& Rk7h]znMclUW3:KU4[) y<iܾ&78xMkqR2L΢_OXvFJ FyuF�.;C,بBleNX$J4K'E`Mi\Nz(_ס6);_=e^j?U:q.fρ|Swq ǽt]1t%{rи`O7nݎ%jthD)|jƂDZ싋/ :8a1 >SD&=irj5NqRcC;{h%˅hthb5#s7'֣^uxqv=a#i4.ow 8ujq;Y<sF&MgQ's,j;Eid@_]x@qX;NsWeumqv-PWѸ,tt&4nkڃrm`:5Vb񟷪,m&LM3Ljd5.L'< GfdF7ND[ަwQՒFssW^—ns,=.tsqLjqq75 5'5.YufTb$[s8zK"Eq4h܆,ܶԍZոqitDSTy F`mh6,OMا29:{~t@㖍"֝Bӓ^ǁL$>A9E` A\`0ESS ONƺq)v0\M3 7clk05 RMoTϿ7ܙ؋)ƌ�apqSn'**q_2icdQ]#r;)3|@6\t. Lbq֫ qo$KSy3ƩrW.Uu?& jE6N5.b#+nG"8k<`l+ 9,^z(.Ih_&EW,^<w'"5N{p0&y7`F؞HŽwT ~T%Oh2垦sRk,+#'^#t<Q7u&', h͋ V2-q LEr q?wށ9DQ8qyHݓƙޒi}O{:k`̎ |塱k!SIag-o&9 wRE}ָԘ`S5 $ 7mK)v?3AZzMiB }`j]A2M( !qq8Ѹ{Dy37:oplm"&UW*^<wg"n5N|Ӷ߇Lv\s]ߍsOh zaz7e̝ߐ'\" @,O>yK8�N9ơ(+Kc��8�8t?M$@���{qg��hhhh����ƁƁ����h�����qqqq�����.5����@�����4�����888KJN\����@֊ƍ:���q�hҸaro ���qkH4ZuwO: 4����@֐)ڛa+qGzLWR-VĄ4=[K3L!ŝ {iOl"ƩnŪŞU JS/q.HC 3I[ Ҹcc<E,&s9|e溓{Å<6+?QL2и4ĝ!O S{%_f2xBɞuq=]M n谕8*!-u@;|ՒrR:W:F&Ԗޭnٸ~R({S09Ns�ږ(\ltAKaFnJ+h\KSLJçŵ%yx,ʼn'1Ʀڒ$owCƹDNEKvǴfWtwkhZpCEՒd={.ElPLx<.;cI3:%B<ەgD|'p%]Pv\40Քd#Wz5ZҖIO @oEDeI\~= G]s\ع}{pk[l~sF?70L4YZӥJMuS-<4F'v{b.6I;8U0:b=ZUj<reUf)ʲp?B*8h\J|z'Ǥz`WU㚚_,%nd:lU4NsTWU5Nڮ /odյv[c/.ثN-0˼S|Vtôd~)oCU-%% ̸)jY <z@gM/% ^jU j3R:M^Wc ☿/vf}<v^ZӥJדƑ)^A&ޝD,X(_>jMNUTyJ|q$XgUSc䰶ASam#~t@\q<Hۥ cVqm^".ԷN4uuIUиP4CumD]H,-*%ո뾖 l~i3uՎq\gaBH$yb9f0֥W)hlvl ʎ{ qF㢞Xթl%xpB_jU1Uo ɳ-:tYTIڎP~`^}yėN,Y$4K'#`hܭC L]i^[kuӬ5W+_SJ4%4e=|QQXF�9U10>� 6U^U۞?u^U=:UiZqqDÄ`*P=<<==1|q<:vŕ[^=Ȍ<0~zήX{yAwQjZBOC*0g4.sC}$󫕚6]tz8J4͏'J6;N%}m:vpQ`h#a<gu~8t@\N c4 "e-z{=h\I'/?.)}:/SDB{"d8ZLwpo`V*WljZcrU c_l]o行'j܎ nql5α dܺ[iT,*qZ2f0B+(pZn,:8MR!Bh43^-R3QJ44G.8 #lWqϟ>)k r?8rp0&y7`FҸ6ޝlw˥28eWn:h+~ נơN/)hU]qjE#'_i1-U-@m/-v"m޽qvv 08q]{WzWmnEMr tYDG:J1sCi׷z=/զ*KmRtpC^]k\@dg~u},Ͷ'R҄ڦ|p⓪d)[,(e7w+}%9;\Ms8PSy! LPiۃcA\a:$[ܖBgyyzE5 nsWʵE0>רּUר *ۋwy< NMxR}5M&bBwZTo}ؾ=%=R';dYם)yܥҳtq>q<w_Dor?.hM)6:8UR塭\,@,k!TxHy>\Fbfsj9I4nUƄ\)wF5q9[ 8-hK}ոܼsu Y_�8w'78�44�@�и5qڠqP��ƭ ����8�44����@�88���������8иqo���`":/4����@�88���������888�����@@�����4444����@@@Vc "6ӪuI n3M%uPGŸ@ZiA֭[ /N7uս V?o]鱭d^ס BWtRzFW'�.8#{L&+)R@{!%Zpx5)sxw"bR[s(&L㹠qKW&T"=n<WfV(U2Wmě*4nӆqmkxd$0].['͔gLND7QԸ?k4NJH,(](9_eQWr]JpH.=T@:8WQ}.*#7 ^1hth< z'+1a~*_N ot8l?;Da31E+dj۫"#d{h̵8BK-&82Elbz\.E?486F^th,vLXh4W79<s ZЁ]z6X?jg[X_WGrZׁqrg*qlatOT7UQ;˲cd|g8@Uy1DbBhR] L c]+Z3q(I3xsY;,09*-~t@\ø'8AF8M݋?a0fX6;h+ˋ8)L6*Sif<xG,ofU;$<sv2wpg^i"Jl!ό\x v.߅2&'7(GEY8=u3&& q3wb,zjP! '[qԷjLq-DZuXVkWG0U:Χ4郳)mTF}Af8}*^<\T}ߣ3.mk:ݺA{8Q)_qR&ϺUT}emAj?U:q.Z1z7F&T?5%S<Gc{=nոXx4nFu:m뒽xHFJk\l($m̈́a-oXrLޠu6?ܚka`^g3) e,Z3;P]aSoLl|Ƹ`7ƱnǺlLxP!h-'u?u\8ǖC<{ބ}%:qsHgQ's,j'BleNXqxqU ^@֚备qjښ!ճ^jAou(SoF7uQDcS3oMկF@\Hg:7aw 81 >SD&=i"gc{h\A i6<{ wokdߛ`pdp0!3q4Nquqg*  k!%ƑֵJtF&MgQ's,jqx@q-yWC$O[ :4ɝ^2RW[>5L/qFWUR<H8s":n2c+qQ!qӼb]d-#vXFSp18qrfp7+w"0YQ T8X4E,dj_gۚPs2QH[΂`%k\,*q}]l]Tqx*&׸JUeI&4n-i6,OMا29:{~t@㖍"֝Bӓ%EϣHL|n'h1єfhrRZy@,3Ї\o6XAE8ɷFCх\Qa)Sp5<M&d r*ob85uX.?FtL~u߀JCN4N.! NQ=nLTU-፫q45Dc/zQm76QW;,woCqF*qG"8GgkSЪ35)I(*׽NG3 ?c=,0A֌iƤ1̨Tn!oޓd)[&3SötδXWGhBW]ݧԏ63q8Cʞpc0<-ݲq %phe 0whBi ̎ |塱d('u189&%97un껨i}OYtlGYYv?31=yf8\cyRU)U|![sl9iy%.^(q>q4}p6KQmz9*k!J7ҮO ;z�ƭ(~yp)n<6+ܙ|qis!8PEd`;oݿL~{7ϳr��˝8Pi\ޣGsfCG` @��44nh\MM͈s#A`0�������qqq�����Ɓ����hhhh����Ɓm@&����8�����@@�����4444����@@@�����4�����8888�����{7h51"֭[KNg+|i&t{gi)wWć\6 J>rۘ#;|n{Dړ.۞ǻQv9,&(nh_<v-5]X݊U= 敦UkI"޺n`5X?Oܤ{_lhip! O4L4nuli;1v|e};\WR jNG/GVNJAJg(ˉڨȹZZŭ׎x$xQ^=M4NqR({S09Nz]NK#ޭe&Bt] qZMÌ&{WƵ4Ťd<|Z\[__wۏR(|/nl-I{'=OhҸS/mU {y~ځ}2~r8K=s8pvr=!^\3 :]iٯQ֟c& KHo%5ЕrUҫreGHGjfz[uO`-~ECk`o.'$TH+'<@a/DP)M3m{~Hn8L6{X,Lx<.;cDZPW_qݍ떚PT p|֥Ȑm>JuMzbEz+"*ۃ^bZxfFt2L*j;Z9xxwi&۽M%lғ[;=1XgD|'p%]/^<F Xz=ZUWj<reUf)ʲp?B*и֧WNbӸhW:ovo}D8-jRʮ+qBҦn~o~)?+5Zu>;o;d?L= 8}$zE0YK-\PӻEg<hyҳ5(L(YG U~-9,?Q^12=W,FV]^\WDC%_.x㺦NKТʰ']5;  ^j69<<T+\}iY/h4atO=iiQ۟/G9ޝD,X(u쓡oT-%%KT] XK|@^5=6Mk-4?Ao6RJ4nEmd�q¦q<Hƽ.Ǵj8P~qWbz|=6ek6Y :FzKLm冰V~Xrz\|l#Lnu~* � j\\yu_K:E8jwk\o{ y5Iv<KCRC(!_Úw50H$<ٜex6kCpES}QZD%f3/{;sb'2L΢_OXK?1ڗG|Ă iYz,Sm*;l{e݄VASTyp8bW֎:$ѕ浵hT*|4eT[5[hz�rwqRi۫JMך Uq.@ّ7KJkV,<H2lO|>ZIyAJȹbzaD0(hjOdy8ow88"V=(:^;qu?,m+'\Gxp6B+@E䎱{"_RSE]ak'ƥ#pNyӸe63G#f46uqEmGiOdmwL%J,{ꏱyaq;髏*4GՕ5q<"ْW{'8#\3 )t4n<d0B3b}h,Ŭ[hJ4G@-4)[<h[ن/iaEVl5Ըk! &#iQe="UO!=~lq2ƥֽ>.=.Hy).bVfTߎ nql5nQHg x#hꪁ<- Pxza;=q6{XL[[s/FppC2t%` h\!gTa=ZfS=pEfOhܻHK/~qKDUv] T1-8 SmWv5=)KJ*썲:4kzڲ3wdĮi޸a?m|iOk /AQ8ZP4BK54]x?5ϛu>d-2445E(S!E|6G O҇j_R7T_Uޮ|FfQ7ub0,oz(_UMUTv潬3WxkO,^<dJ8jMW޵Ƶ\NIvW7l{"/M(mj{'>J2иGkYMJe_mI!vct m2.dahY_wr_x_zC1ԝd8|ߐ]7Z8yg w^g(OW&,quK~6o?E莰sw?J] jܼkL#dݭPA<de$Hwܕr-Qfqf;#HZ] u_pӃ[*M%=R'M}̖̜8tOhܵ@79TRsnkmJ~kG|w/U BՕwqͯj#qpB.ӫ 縟&и#Z2&,H2LϾ7tX%~asu;<��Vl54�@���@@��4��8888���������8�44����@@@@�����44n]k[����ȮK{�����8�44����@@@@�����444����@�88���������88иզ,LŁe&{z06\,,;09bvrLcI]#ݱQϽ$÷GiYN+p' |CcsjupV2p0UwŞUyP 'fP>[=}do;{%eRjhz/DxO\~?e:qGb#$۶(yq'Ja207if8Wjk[&<W;bk˻}fNǑӰ/.5,Yク5b %q0 ffk\ȍiø6t5<\.80adJ Merz%248=ay}4%-XYӪ2 z_> CWY>y~ԟ\ץR4 |N4nLЫ~B2#~d\?z5J ꚴ|v}@bw1aA~\dUfjø<Z?p< 5EU ƐK2,4770w|+:>%H'{ϥ |[u;8UReGmWp9Gc&{ѱu 4z:dZy5 "0\虘qg|H�gDq:PUo&GrX_Wg;w_ލ`?rޱ.1Eee`:]T3L鯛*jy]E2l-aN?X$s>$5TK`BHcVQ#g~wXwUar<UZTƹ*D75ew/PJo~]q4nYyJbyP7Fy¯{tm-sY[M![c*Ǧ,<~괡ObζsŊfgVN<� Ѭ#~197m?T?ckcŸEG,ofG}\` SrgxbNO Ý>x`z%i8/RQ^mi4I27ж<xi(eEj(8˲N8bq>qEm\xqzIx1@,X\ۨpKmREUҘ1g++Uir[e@WSZ/(pۖLQh 3C}\:P102նtT,vqID}ijj1Ba7FKznU`km&5R Ya[{=ͳn>Yp ?,͊;ɡ Wcߌ3e1TtOVE[40\x7Ӆ廉b7IZ˄7h]znMc'TԎ W4[NI8N5ޟ7L_D]h\)YTIH yĸN*TVeM^CSTyp8b֎备qjښ!Aճ^jAou(SJSa8'DQELB4 pm*qAY.c5ԵƵ %j 1-yWC$OL&泼^h׽>oTq| XlG{.YF IŅJ 0Չc} GF�=R7w@ EƼ{ƒlLiݮ).V.0<2w+*6<*tQv �50g4.ow 8mNlw\?xu3L΢_OXv4|6Ga}m:Q`hܣ;1]e٥B3XΉ+w61 OOvtz8ףD-C |v4g Sc,yjm!83.n _D?sũbGBιΑcl_zDLh f3b۬B[`qjiu &[;F\5�j_gLXE2Q"[oF,M8qNѸ)YTGmm(p]wit^CSTyBs5qڬ;ت>5aƋ˜=pTs?XQDuƹpup?|@7:99U_ƵƴD,9a <x1Nn'yjaafn ĐZ"ĜcnqG{va`" {כ '3?M;9<PQTIqH(ykC'UG_2%ily4t 971c:,{�Pɤ R'PQ{l^mqsyƉc'Q-+"7l\Eiu:Hhɯ-7Dx롸$Ugxk|S|%Rx`l->�TwcҘW]}fT*T{}Jې7IUƹ7 #[3q6|vݤqz<t0-.⌆`w`0C&}O&/%&LLHx|u8٠6|W@DdTL{͌'.i+K8TZV#j[IeTÏOY$=qZߓyhDa_tl>ơV'nG8ev a0;2Q&塱MyLjScqTIBMR]<?t.<ה*dw ,$`<ЄRNhe.R(q>qd E7unp6KQmzkP/UjFYgmc縟&8~=i{ā(o${ x.Ny%1轹;U;XeV��xq�/qɘj��,1VȪ������q�hh����qq���������qqA���V`Ux_h����qq���������qqq�����Ɓ����hhhh����ƁƁƽrKLO(ٓ^tnGlo'z1z�q.tA?ŝkiO>>۞[^o9ծ*fl"_J_ c]u+.V-$/TWz;w GzV(I"޺n`5X?Oܤ{_lhip! O4L4nul!n7t�/ IyޮKN+{?j>>ϰO͞0e ( (N{oQ C=Y6bNrI$!@ɹ''gs \!h*y:X!E"Qz&U-Յgz)^>K ۘ-W}Hcɉr :m?=8Zw=$ ^ԣO yTNP.D+Ө|96VTgX@%d}?"8{'3"͇Z8q:qc eMBBtnd=4d3C/'-ڛNSs^E ߔ'f:%MGvDL&72%˨}B}4F]# Rm  /2BX-{(â)_:KƕK :'̣WrO{X vz�[XWJqŮX`qܓ_5jJιqWUgFXtG]ibt讖tV I*jW ܌batlOn6AXLcGɚN* `ߊ dڴ؃bJd3d[I !RM ً}EΧQbu%T6pt@:\>qhwS<7WRuHC׏xtV`TjQ[|i^HR|Kd)Ggp3jM._XQ58ˠ\DKPTT~Z|my p:_$s4.Vcõhnt{~#Q;y aeѢ)D)t]dŠ q꧗cHPP:p[>ݛYb&oH59 .Wj-mOV4!WqMv Ỳ٤q c{Y,jSQO cQ U QT j/Q\T%rҸ設aC+F[caC+Q8Q:q j /2ݏcOx,*32S>C7/Tg3ݷ֨dw8x [w?a z?:N+N24uaU {4cնGcEn>ocTVhv̖Z8ZŦzGpQ$ﷷҊ)%dkvQ]Xt&L.p?d2Ȱ"yfc5m-Ďlh\\8Q̀٨q [NgVKg^&H@}YYk5,wq)ڴ؃/QlѸ[{LZK 44MzYk5zy((иŴR&u?/g 7/=-b H1$QNұky;ĥ^ay9Dz`XuJuW^*+˜1" 7[m)t?k wv٭5тn(L _EժTF@j\RH$q弗6TTh&}jB-hٴTTmC3l8| ,4μM<-zDi6{%ʃ#2Ѹ#ō~68t@d*pиɢF+UyhiAac|?k{I2~4).2 Ww'V,2cq]a̘ƩJ(d棗e۽f8RB4>]TV$2cj5f~5XM82]e;!Lꅎɵzdmѭb%I,Yj7 aӝEi4 Dfq nGmڔPJ7AV(gG@1=Jp%l)O {JwO# 'J4n)l±14nԜdzԊh0(΍y\Y~l}&HRf1͜Bn?RVWxuE~}lD6D=T2Iv{&:8!]T9ɺ)y g׭֨ |~{W*L__ea7j amVׂ\B=\H˴qjOӓw<΍7ҼNfq"Gĕ{IdfYTZy;BmrK|)F*8MDXDy8gEdכk , /1<bZ'i7ޑ⧔75>ߩj)0и-صbRR4ՇxJ8hШne4:# jv<k{4(ʰp&u_: vƺ ӕ3kR¢AȨ3wwLݩJnݧh(lOk5N2ks4%*fkV[[|YL&gWW8LC)*O b f%f^T?fpJD&*NUE�O�ADD)xK{|+:͠ kmiDMnG?w531oH#Ȼ4&_D=xYrύyjBz4\fF!ᎦFqT*U{nyt@nq(wGq$|vp8`v~Y<7eA4�W@�KH&Vnѣ5@��7+a3ɇn4P$q��ƁƁƁ����hhh����qq�����Ɓ����hhh_����"8]h����qq���������qqq�����Ɓ����hhhh����ƁƁ-6 wTf|R!SÓsNjDyƉǎ1ӤsKg>Vsf;fwKCTwMlϪ N>p;~{xǕ5#J4'v,Wﴣ?Qg4Lm=0иS!/LOlQ$5*`6^<NPn~{OLٍW^@v͛7#a 9s|bWW[=4 Xll32a١W['_z~4n͠|4.-XXӨR{ZإP4W1agkw*UW^?Og\h6ZڱW*Xwkڻƺ[KC-Dqp-Dz<v!a ӟN h_7O 0lg;#o'ØeZV7bG/%Hq\fIgZ:פf~a[;t<Ќa񇻏ҹۍ,Z3_gwQA~^LV7ruZ9FS10A:T7QQ"!%2]{rX4/6^uc3LϞbk1BdӃVoBF `WQ}]b,\ZLTig a{ZOW}I7eng ^7п@p{_\Vߟv'3XțI/;( OwgF~2vbLݚƶqoܘQJPS=89E]Zd(SNv -⼎n5i eRU%æg+=د_,pMƬDx+a,dKH& Lȳ]&J%XԦqNnMKyփ/X[Rk/cOEa9ͧ7Gu*z/Q\T%%q|t :Ru?e* UwzKENh4/8R91Zwa^Yϼ=go&^Gi B6tDnpk&Ӵy$2| ogk]Yoqc}$ gGUh6;p h"MT&npeE^|[?ߛhy7hH?A6؟#MgԸ 3%3/j+H$R~h W":=D9Yoy]m< [pJƽqQX>o֔^b%Q8Q:qvA(U 95BhoLJZb;hɻ>i777P h>b 3} 55}z Ui(c⨹Y#,Ƣ[yݼ׬d٢qnTmqWcF�A$ Y8|-3%3/jZ1]And`zm^̢2iWQh(,?Z#7,u5$8,qd\k{ _qvAM4njک՚Cq}dq#!h5nظW5zBau7|@y^y5i82]t5.E_fHk\l°~3ĥnZZ3בG)!~kZNgV?71*I%Q.Dxz|a5B6V~uVk[)^<dY8+ 4Nsx +GNhQ@o܌GpɩXOhO\иyh DU-y0Nx=( 8w1w,ƥ2b/k|@f7>PLcWZCTи85mY\;^=kw?~s3i{ܒ^51^z~ 8K@nhփjEi48Yh̪Qhɋ0G C)&,`fZ'O ݟxp݇] 18+/Ox)ѣRw}v5T*yK;U-7_&Uh^6ƺЍ8LLW,Sz5JyH$;cpt\kqBt=qh!u 6d&L#%Xouj_PxTlLGTUU0{iD,lw`tl\ٻa5n 5~MQɩ]qxlN1uek ,*:iq{r{q ʞQ%ߌuۛaOr {hNG?J)6 Q5Mf%Mo|mƆnfXl6/<mzASs5ٜPcBF `i5Nl4yj#p2]T*~F{nyt@kqɱlDz=3j<uxƶ(.zJfTNq{>i �%]8ƽ7 Kmƈ/2��4�z~݅\O漞"��4�����8888���������8�44����@@@fqФ����X.4����@�88���������888�����@@�����4444����@@@iEF|bDJ{'݅J&Y ; ,Nz~C2|q?m Qwn TIu .iި0/[9-] 4cG̎-XxڕɣL}Z72T:'2H}pt@ϓ0WybzFӓwyRdw[JsAΙJGry;e*bR)n=| Fwp^?_Vλd_ҫQz4CY"Y<Q8 >S9Bٻ~4Ni.[Ri]Z'lK8IyCSSEmEp)Nn?gry]k[CE'pt@q'GKQ<KhbPx.h aRNT5SvFy7#>\#-@rĺ5WbW`8I/䝜s16,$X٫J( F&?:zղj<w1A~!IE '5`o"ZtdG+dr#Sz6Iұ=waQ2%k:IvFntz[1L_ҽy,qJ;_gx-$>A&1<<==Cc|Agdy]x٬M ً}EΧQbu%T6pt@qAk,T'>6Hf[?4zAP;rxǢ=#3Žy]r NugGR,1λLjrq]B^[ڪh;kE5)t^f&%)?-p  g\)՚^ٍ]1m8|ұ=wI,)l}uXІ/X/Rh±Tn(J&X/^<XFNH׺:kyɇ^J/?k <\~6bo5=F/6g/c\^3N/2ݏEWu#:4)\D&8~Iu9ՎDPu/ݛ)L.2u.p?ׄdL"E /wubJq6D7_qqBҽ|Q?ߛhj1v-<Oe?(}PAT a\ Qpά4μM7<:Y..EWJI.]T%õ +Kƕ$VB/^nwk__[kmZ+5DDم^4?Ȥ}Y+u+}noH{r& i}&ʃݛOD"tjjW^*#R!FXfrgՒfe4OlZ~68+Eu  ꉃb)6j>әUƙ 4C3[/(fsL*# rj#ʃ{qt`;JǕI믺GnGsPtq㤟y5$8(Ɖ#z7X sk sAJ^Zq,;08#;<̘Zك_3λ82]e;!L2B"q[~}8dKq:H2EfM%Hά4NQ1$2k�-~{O~fM ltbB4exNq e;Vv/иq{˜q%M8i'=p'goڋbj8sx +wVy1NϠxիAi(2[: WصbRR4Շ8קNvcVkT҆]>l=O]F2}9~闅ޮ֖aX{ڑ`i{xq"e'xoqoy]3'(PVҶ⼒9hq:H8q^Y<5Vގ7w_Qm NojS)-(|ިV͋4v%9>+"\㔒d+z$U2A㖍 /1<bZ'i7ޑ⧔75>ߩj)0иyjNQHTv7Tmҍq8h e^J{cP? [)OjxX툏p0H$2;EѸ><=&`0nd;U?1`w*:x""b/?Lk\[l/H|m2I[Պc;c IY9s8tlOѸA.yfO#?\P||m*DL j%Cg?7J7I 9o5j*-ko.3yj#pGSt*ƎLΪ=7<J:q82!2Ǣ9ȍnnAl4}I‚>i �%]8�h��q�hh�������qqq�����Ɓ����hhhh����Ɓƽ����.�����q�hh����ƁƁƁ����hhh����qq���������qqq+MބP6z?>1t& n uv.h3y¤tӷ^MLqeft '^"|D3>)T)oG!!x< T7n4|Rt+j¼3Ss@U ^4'v,Wﴣjx]gdj͟H7iix4#םJ7Բ{'F 42uh]xÍ?fb_ׇr3~s|vsVRX*Gל~mE 8OYZsO)4B-ƅxd=fbn%9g r癈k W7fЇFI yxTg,iT)=nR(+԰;eXRegާ‰ .4G?͇ĉ?ӏ_in- aR\1s Ks"A@)r?$*+b!{4jg6<ǠмI}7g2qX,K񷦭bj 1w;M ɦ?/о"J\fIgZ>-I&1=^^^ioڟa2\ԣwFNeSl8xz)׍d2n>{n DWAvWSTwgK"vg-=e{If~a[;t_$AywsYx#!::2/"Z5fւ.=6*4oV͌Bml`hQQ"Ɖ_"S5Q*7!؋Ejb *^y0j4*}9CZKki*pt@qW:Uw/\|Д>"4nA4yĠquIa?(&ތ`']Gě y${(KMgzj9E]Z<(SNv Xv'3XțI/;(خq?wLOonWCMMe䣣r%{uH@𙶖�ْ*m͝%y$qK h`~`5ㅞV̬h- %XԦqN5f _lޱ碰$DK+US�8>Kp2 |ڥ" 'J4^yfҋy,>q ě<zС܁oD>N/^/%ש;B"Ն9ϑ&i\1LQNiz vlKj)[̇1m3, t0?R;>w|)^P:dۚ >7t;B|hq$2\\TG%J/++n_{ȷlܟ7{ffEfl`J]868XA" G^W4 B<6-v +K-P�qyY,vqnmM)yF:E珞eXINh])*nJU*eCyEj%r(Ov6иaLbw͠/0KB5θfLOY$ O_ q5!Y+ ćzxx@7gGp| \#>NL|7Q}nkmQ,*Sz�щR]WJws.cْ+ZpuyRlѸSsVmL4nn̊fqEmB =- [Max`ES�Ѹc1Lϭ5r2\WL;x7%wMܠq NW~,m}{+>ސM޸{"pd R{=\C:Ti>Ʊ; ~k֐אkEU+kXQ*Ɖ=5ND&R5D^Ѷn5LW6/![0 q)V̬h܌ lV?\_?`<=ܰvG!+ݤkX)^<5,N�q[X^Iݽ07<8pt@E"gq~r**S4nAuk^ >SjMP} f=5*>L=4>f\)?7n䵙`YNm|LuǖZCT}݇] 16݃vpA>?N8,,{I&O5J-jתl3jDT/\a3g/aoƻN>g0$'wzu}װ7~/z3jgByƹ%kb:/鵥qsnf3jq:H8m!Uc\nɋ0G C)&,&A ,^<LS-ƞ,i e^J{Tjl]M2Jޒ?NUK͗{E=ڡWFM.tg-D;G6P*cև= Y*^EX׹&r {mMθP.{F"^R+:@\69F>ԐF's<Rn�qD;֗b O*tQ(5ne,EUDPɥ2Q ™ǡ*㭦8[KͨԮ8W]<_Xfc$fAXTtݧVTn 0>)=f8tlOѸWJYOo6+Qmzkk/QL5ҳ8䩍,ϓÝˈwaPtnL)qVM'dž-{v�oqxJfM\#/Ƈ_;΂>i �%]8�h��q�hh�������qqq�����Ɓ����hhhh����ƁƽM ����:E@�����4�����8888���������8�44����@@@@�����444nhz(:,C%3xipZ~>#Ǡ]gdj|>'KpB#NxF,ltY oMݳmǬLe n?-~Þh][?s[4oT DMBtR'<+ߓG!.m.o7ePtNdv ZNݣi< sŏV�73o/*fReXRegާQ4jbƕe*'8_Vλd_ҫB]@a+L eBd8ZʧcCmKq I;k-!' MM;um i>,‰Gvii <8Ҫ47W^j:eW{!Oy4V6f2Ȕ5^r,=c0,W3c}rذ�_`?p VFtVI|0>K+իJ G]O6u;8чKA(rjޞE"y}Y^Ǎq$/PYȣPNߊ d!IE +5H P뾵R\+VFEqOYnXW]b);XtV 3~)X&&J#E4v$ډY,6QDto`p\Y/^y0bKb5n^l+v> +E gmDau<|cӸ5VRƩPeT/˧]ҸC\k"Z+=6FNH7w<ioH#,qDg.G]^[ڪ*0St<re_Ni.AYR0O3jf\hXip/Rh4EӼ~z9DuNugGR,X܊Ʊ3NU@l8|ұ=wIflS405 _MT!MVwt"Bbx`墪-Xjk <\~6bo5=F/6g4e:uF~q/2ݏ̨q w_ww@ yg/SJʨSL^<ReX9Lgsq+9$0#$2Cn$ﷷ8Lo-(,/RQQPRmfq=Cl7kv SY Y]ŸpZtL2PNZ WEh1<u ,*t^6L^$/3l^DenE⊅DFR3V Hpά4n#D"׏'ofyf ּ*%dkvQ */QlGո[{LZK 44MzYk5zy((8P}awjM8<|э@&5D̳ Vx|^a5%Dz`XuJhf7wwʤBaznLtuxluPx,nq%A{5qvEu <>Qg8e'˦);sҘ橯ͦKby'JE"D:e/0Q)4 %*s+gKXV-ϰtfq3ʃF![/(fsL*# rj#ʃKqG2ܣ'lΫq&Ѕؤzsиi>qhr/Xb{4jo:yjo\s2NXUW |{l^qҧ⶜["UV2Gy'QXZ_Yɳ2z&C;R/^$4$Q.•qvDfLCTCn/aK8dKqU@lԸ ҙUi4 Df>b 4v%C:%8=aLϸ&{ 4rݓ{‰7Xcwptw]M9h\{Q,ֻh@q/hT===MyQt^*:P&/`P- zffNPu\Ji[q^ vaLu.HOqz`l>KK,Fykp{4?a~lVg%ϦexEJeĺ!mdwN[K͇йF57lwS'1u5*i.ߞ*r_ r 9s#.EK3~)rÛ3W%eSSih }szyUJ 7UA2mx`2[X ^Jbx5Nn#O)ohkk|ӗSR8a:qDl>4U؁`44ʫ9Em"RPK7nM"Om1 2]tOƤ.sԊc;c ؙM7Glٚq5p5䌟b<rI4?IĘܩQwJGgl/}IkDf[?Q]E%#�>A u[�קʒ햘yAS_\8.7@{a ^_KRD oG?w531o/IO#?\bUnm e1Ⳬ%֋(&]Blk\{sSχ;ťS4vdrVqV#Vnqh2!2ǢHd#7L4xѨ^tv#/+ax��,j�4x_iIfZȠq��Ɓ-|0;X,FA���[ZFC(4����@@㖻!л;r8?:�����8,q�����w8����@@@q���{wi&7fq�����g������&eI"������,4q������q�������h������������������������������[㊋�����~iD~\ * �����`)5n29qg <�����XJ{٬LiL{]c\KFg^ JxYVReӺЎ,ǖ~'[+qpb"<zJ#dZt%I} wG94 pϒd3���`i?+C'l iR{{a WpN=/ JwiOt}gh_^r5a \kԸ5G'55ZyGzS$$5Nvp՗#5���`YiܬLigG )O[s"XF֬y+Iv/'%};v<mN`f͚O雷-h(Wb/Ek~3vk;^/6<W^݄B׮)Op˗NWott\FG,+6i//i߈o\N~#;>X~/<D{qgStN����X^g!k'VtpD ]S [kQgS%g%l'd!П朳qDmո^=ᡗi';JJ:qtOTQ=SM=wa/VQnj%UaG4R_z5^V}ןFփwFb^q~-=Z>4bU?zuC' u^+Cp tN����XvD!}}}5(f򯴕R]+}Ћ-l\T,H˴:8']jaU>Ɵa<=0' Gt//W(q|}sNIߑWGpɨq>Fxz=s!WYLN^USz'qiUCGG{q׬$=35Ud k7%hq˰Ƶd6:'����,;}5Y[PA&70+C+'kո~"-SF}w8k+do ks47kW2]׬\}\[Vgut*<2i\lj2\rrӿ;Skj ?^el:pE]l8<g38ig9���`yiܬ=zP_ rQnkZ!7u޸{~[z"B^iR"{,-6li:XE(ѻ#{َLupX%3ƽgq}39&;sF3OOkðq+>QD\~u;UAHskI ����Hf{j έw+qsvscܯڞb}'uwfO>߾1ݵ͞__Oztׄw Z%J +SKL"h7lꚯA}Z)zxt@"q(Ǟ9wCk {ƕ_>thn eJVPz{FGRlk[FG0>Ghz[ÓZ*9���`hw|_w~YJOo*g%;?kWqÕlǍ(T~Sw5sr^j/6l vcnmeWV~ځ;n퓞e5?l]2\ʊ_֢t#`NU zi*<0qJx:;aZw9;}'_|J}6'>tp{߸]nqhB?s/|*J����8\~\K8MLvfRiagi6Fd'T����G7UϮw@3?ƥj%+YA#zD֟yz&����,a7O:姟|o}N ꖌAd lJQ9����X>h|`o�����@㖩�����Ɓ�����������q�������h������h������������������Ɓ�����-b8�{�����hD|PB�����и8#@E����qqq�����Ɓ͒J8����������44nI5Nǎg3�����44nW5 h�����44nWTTKeE^����]ZxP6:;x_>Wmz=љ@wړrqVNRD N29)9Ŷc h.744dơhOOvzV{pg0��`/nExNk?#GɴXx6i㺏V}l3~'[+ֿOc[UKg. wuNN6qo _nP,sϒdKq+S5'>rS,57:?23;ݾYxJa.4='7sϥyh q&%%ŸKMrsиa[4E#ҸM_w);|uh��GʚE]}ZvO}xҐr7?ij谆xWEVgvB$(=]~8srTtl~wgQ\eh܈vӚ#/a%)?0ֺC\m雋]>޿5nXۜy͚57okx8νgq?n&lxm-J-`R#Otn1+qᡁ~e^I0:sxQc;c]L&eMG$ɝ;w!% ƍڢq(x0#Vϕ*_~7~~zǩ>_"fOaW|w]��E ߸\eEnsիWņV^݄B׮5wOɿoK'>#f6r?0Ϊ#)^m_ĘAM/N+>(rZqR2y5w3Y~dVYUۍ++qYa-K_srdö+MqDen{O1D3qgSbk\4TvAi.G=X))J:~Um?s6~߈2ȐTO_s wXUk>s >"nD+}@> ,Qa)pI0-OqcU_Ļ {Sh2<b3;]x-Gt.NFuqܰg83fG/?uIc;~P-8��+ڏG˧_[q}H5*jt<#*-ÆaW/"2~y*4I֧_i,/VQnj%Ua*AӸK6~<|[ޮ=dlE3-YEriVv?ܲD])?_O)Ѧ_`_D,92b,PVoK[Tm،1FG܋$V{aqea N+jh{iO'Ka*E*+lAdlJZU &Qa)$VLc.Cd1ƩrI$j}=U$2t8q+|O׮\n9k@d8j+<ǿ�@ k2<kM6jV~룏_ƹ%:bOFŽբ]r#økU-$nz'*_Ę̽y γ3dֶl޸>pݿQ<m7No}ǿƙG4CY(KkM_q1K-;S 58UkԇٹV;lr|4@rR$7)sX3lGeG8N"Q8lvZkr;q^EP4"yL%f2vvoRZ_u%_}5 b͊ ^Eq��,4(٨q+kVH\͒+W h25kܗ'9_VfU[Zzl"F<[8>cVgָa kI)W庽q_kG_Tu>[(kO&g}m8+3:}76u޸5U wύ% + Zo4 qƝs- KT<O4WvLqQh-°$p{qƽq{76CoUXM@U5՝E'4�ӸhخqA3S? upX%3lg}39/urMn'n:~]#Xq[.עؒ5n@Uxk _ #^)ʌF}۳kIYt}p܊;? Jw1HjF>_Vi_Ozuv Z90 vqBa.iz؝g+<l@ݕӨ?T )ѭ坥Kq w*:Cf8W ~R)ՎAv\%tX%_^F۷z&��H_񛍝rVjxk3t00`�&Fl(k }Z)zxt@"Þ9wCk {ƕ_>tv/2Y}l$ޢeVxg rMȰn#*GH㈾)`"R,\Cr'g㊕\$&ZNӈMdBԝ}MܯWZ ݰxoqQtύ+ϢS vPTʃ 1rJ\-' $"jK{;Tm=f2LWyKq 8j\G+ޭ4ܳ9rڰPmH?Me08GV${պ?r�2 p|j7IW0>Y/?:Y&%5Xe-Ԝ>؃SբRh:r=6mpZ;ZIOwEl8<lǍ(T~D,fn-6Qv?O?F7׋r}/) ejB>_S%_[Z8,_q@Ė?ƅ٫3'��9olU!OL/74jߟ^FJj)z qX4mfV 4��`tWfbFs'։ϭ?1,p9p=8jF}8Ȁ��Xa_~'k>7lNKPX<cՁƽύ����`1@�����444�����888�����Sq�����4\`����q�������h�������������������,WS((F]]h�����rи2gHҐYָ~^ggg}}=h�����rиgϞ!=CT ƍPR)A������>4jHؐjJH$͠q������A㊋!ICm(`ooL&�����Xr+++AHҐ!aCo!yi:zАF4 ������X:UUU566"=CT 6$oH&5n||YG*������ˀ:sHϐa"mҸ7o`j5r=H҂NCXVVV\\\XXXPP������,�Hn!B i1dH̐!ICmC6qW^ T*\N@XSSS]]gϞK������-$]H! C2 3$iHհ+Hަi8򻡡!VۋO*vvv󛛛QB u������t IR/$`HÐ!%Cb IR5_uUlA39{j)$ 2AV������` B҅ 0$cHɐa-aWTMjr:l&7<<<88O TT(R������� [Hz!Cd )3l-Mi䰫زR?t�@-������ B i1ljt)3792N3������,0w! )f&7qFd9������Q0{3 i������X|LD?lRI ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/images/tagedit.png�������������������������������������������������������������0000644�0001750�0001750�00000146726�12161032160�020266� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����,������sRGB���� pHYs�� �� ����tIME -f��hIDATxyT龿{w9{Zm;л{(d!D 'šڙvjEq�TF!̄0BMR! g}Rzzx͟~M�����^2^z'LeD������Jq)%vs/itY׷tm������ RK^m˞iu2VV�����p-\x)t'Ly3qJI *JT�����C̖-\x)&L9US/ufrF!ɑt+** EYYYii+������>f%~K,.1^~S t/~m39H7or>QJnII˗/ r�����!NK̖-\x%LL0%k{}X@ bFNNh~fJsUUUiiw$G^^@ p b{C&&L 4qcbL <577T*bܔ:SD@ @CY~~ $A7++0abč!SϯxjVPP# GW?JcI]yc@ xWWb9%>M /+&nL ~635mL <WVVQ6^!g>ztQS@ ăX){,"R. r�9LNy{&ѣĊgj35yOԴ ^J亮c[m/G,lAٖSN9@  qS Cߠ|~%!;'O 7&L<25yǞijg/>jl޴Y<(i_0rH1b?8eɞs82x6׶v4t^':Sgf65Ύ:f͑ ]czr?Ru<g%E#a "=g%lKn^璠9===''X1qcbLMzniiQT=Lzsn\}3Bq$ANKZfR. 'KDmKZELMu&eORhj}1ڇDwYwW$DzeggL5mhf9yt(Sʙ>{Ę~H@KEݥ+?9yʬ><y๽G )D9D)r!9\byyVeԑ}:Wf{={X1qcbēϯY555)JBQPPc<^ߣigy Lf)c7y\]oiϳdG'Yssű“6{II\45LjgJrJS];vlqLQ1i#':OadN?4љg΋2g$c.B i:u煵zJX+<f"L@B27y:'JT3]YԠYAz'!#ehOꊐ\g3i׭-?9Yl6FRS&Zid'sظbBb)}ϵmK 9>ew$VLܘ2db=L}e&=Sl _ĞA9@|1ž'Nuvhaf8N}Z;;kKso 6c'=fq3fIΨo֑/\;y j gp,u :wH,.-* .3o<V6uw镥אmWvĈmQYƝʔF`͜-^Ń!gi{%<GK6 zʿEnz;eZ\+3j]EHgj,*nobƋ6))TuGI#uZ*/̙]@ pg)g4e䔾Rw}jf{u֣GSS'Ss~mύ=K~}g_, |*L+_ٕ5c%7=SB w_K6vs86Ϟ4ژ~SQڅWLǔ\tqrYv}g~%~5Dδ돜j 犯]%8lv8p˺Zl9֜r0eG\^޿Hx⥥Y,%:y\)3c([exyc"̍4xdKYoI)vڞ-MurbL"n^yyQvuwe^ݘ9nVsh+y3)dSWwv>Yt2izR3gN1뛲M8pʹDZ3p!,hg4m}ϥEx˝6ε<R%Asrrrzz:bĐ'gjW^PL7QP֣fi{B ]Lsҭ%Ğsس'::qӤ'1+2}.=Es&\7l;M1i'$4elK^6e'̝ò,qJz$g\^w"K.o%K7kFkΞ5gLeꂓ58_m5F"L0yʤ^ vyL0cS6mtbis'1mKݥIjɩN'͘h='Xu<uKy{q|ɓ&glyrq*`ܮKl &C ePkVϥE^;ε<ҞmK7҈7&L-aݞKJJh{&oOyY?{B ]Ls zYsfL{nzgO<E%.$YoNn3@<iDGڞ]&U9^;ܔs:i3gOᶛJ4ҋ.}*KOp1gF"L<Qq9ihܓ=''&7=߿{ %gz`̹nsE̚F>~\7 mۨZ,l<6r4ĝ|zG^}~d֌9aՔRlf(0=R^MNGA\$=_~gg"2… #6?;.ΞGiΜT Kƒm,b{\p j4a 7Y޴^#_irx̹͜=m.ڞ|n  7G,W:9Ntv`˥-2%6͉\ݼL5PN @۳e9.^}TM4s47֤7[v{muwv4Mawͱ>\8-o#)iΎ]O0w1BjXe"/fSot.Ӽg{e`sgj{oJ9 @|t==oTgn(%6,\sL̯'S'|h X+:\+]\f߰g^c;;.Ψ3Pf1ogNiN33L2,}p姄QPt,5M~QK~xxTD&:17)sڌso4cǞ{ ԻUm'}pGGc_ )8;ڧO SRN.*;w3Ŧ]p!,<eB77LXӊ\Ⱦ{zK+|מ'O\OJC 2YWћ<ulWf4wv7=vhOu } {Ν5lJ`n}ӜY,֛ܫ`93]9˳JW1Nleۺ ݺuV\g̱ZYxmgFY&WTQ'bgKbL bt՗e[mσtLӪ6ړ>Jڴeq:Ys\h+YlYgZOjtًҳ MCӔh Eg@ #<K| r�e䔡=>׹g7~?ә'9@|1ʹr_{:c\W'2e7D-0<{nmΙ5sIxS oLi2yՂ ̘2<aV,sRov5əZZlh-Sepvi#S"A:cDzϓ&8͞NԞ2TNnsmkYnyI Μ4*&t1 BS_ϙoPmzY6Loێ?UUU>=#ǛA; .v:j#�09+|K{f[nv=G"C7u@p8w ܞ@ ~۳=E@ aP_oD @ e=:�����S˗g������`�����������=������{�����������g3������g������`�����������=������{f8�` / ���hϿ�ê=ݼ/)H���{ehn�_>{>ޚT4QUU2�g�>b{f@&B�{�Is+x;(A;] � a�j&=�{�M{� {� {`�a�aPC4�{Ղi1FPXn�{MD(j:FYj=Qk{ܦU;`PC4�uCM^M=F3NT*O&{ʞ-o"B[c,j:uzxڳbCG|DYywA +.?}f ~R~jhi@XԅGYq2ڗ=`=$zZWԔb'=$ oـ {`]ٽv2=k5k93}�`9t˗d*{{n99_DGE{:zĈQksSWׇMQ#9Gn:dI^K%Gy6[ѣG wf;L[AQl7 c7~noҾ񶶹Q;y-8ܬLڻiܓ6׫Yskt)Mٮ6>`= Ұc=QG3�=LfZ PGqǂR#_MK{5wǷܰx+Ȇ%<1YQZ4Lj8Ie!iUڳg._>>u@ߡ7] }CQ[?o  B?ԋ~ӧ-dr$ y-zIEf-}֌|?(j{)F/w>_ZR0ݨ0UqLx.ڈ�>VӞ-2K2M9YS| 6Jfj%5x%a15=Wׂi)AW\<sW�SݛՅ7.I\nfIޫ-}Zx9=9F׿͗1/-#I3m۸Жu�ϿrLɞ5Ug>1gm~cW^=Tly}?dGG]3WhHْ>*yu曱䪄KSu;yQ-i~M.2Eeb{k2÷ZMeowʞp C4*˟>ߞUMdl&$7kk чIsU-B<v'=ij`se}Ǖ-jyxf9#)7yJY{XUVmV]( u}|nOl|Ip*Mmr_+lc 茘iO;05h{`W|@l+=06QQDqRPpL嗇VT|g{o#cD+ZmíC|*Rl\hv6�|p<cí23Mmc%x 5>&._Ln)Cbϖ7Qt,˨![E|nRmt'{/GM'>س%W2∕f)T܏YSsÕ%eY3)XY3]uWgtɠcW7de\+y %W|VJYU=UǸ;Δ3ةb+vؤzb T-=>gbC*g`#~U{fJ+> {�S5WI1oI&2EYRTzN{c*t{p؉jMG7�=9s/Qf1Cn+WX~}pHMdFs>V9s2\z S'PP~dJꚄΫMwG:my׎Eyyyʄ&/!AȾv"&r+YzC+P?U25&. {=E7": Zmiі_5#KJ^GWUUԩ,[y 8 ;D bq}-/462b*g`#~U{+> {e1[ s="Cm {6~һncv6rL\%m,}-hO j:][ԔZzMu_Spc0h/^QAM._['sgMչ_Xh/){&+Mmdy޳|(eKGv~9$)ƞc߉jK=/k}$c;,Ǟj}ba3*K5{&7fd7s왮Sݍcls˒}KShmsyp/i{^(6;e=-Тrاm6on:<xYmx>TQ|7az곸x�w3U_]zwlOxU{Vlc&מ gpw}A=cƼJyϞ(SZB fMr3y`gnhj\5aBniWKK~NmԒ5u4 ajvskkz/ႽW5ֽ(p홱R'ċ О z\4iw$,B8 -KOyd##崣g {gum9Sn b޳Yy07p9*=lTäi{>* ?ԩ¤gjM)RG \h;e�>,{�=h'q9s#?K._ßj~|7xٯܣaarP(crjeϭ-D0ސسJU>:.=7T^簸M ED{f2['trLy ~ k {g6ެ.ܷq9D 71EۢyWTW03ڞ*,X8 |6ڪtx,�{�<Tg\ʩz}@[ (\)r?&zM2�g�`C̫N|c`̡&\{д,<{'?K!@=�{yм=KI$P~﯍Z!@=I{PC4�3�3j&=�{=�{=C Dg�`Cn��t���@Y {g���Ё=#g����3����` ���a���=Þ3����{=#g����ٳ#&]GG{SS|.ѡyeڎƻЎ_^ a0*>뎦=#Tw۞M(ִjʢ-4x/蓃s)RMtuKӯ#KwCcRm���=="P& Jh[n_Le͝}=:ĒȕuWo;{ ���߻=j]w{S/ïvu(emy:M{ΩٳwݬVEygq|gnicGWgkCRy?}>-ud=ߋޖYHݡ*}WL)^NM\!ώJq֪sN>~3^V;t*EΡsJY6SaIsIԔDag����<d,,'o //ߝ=Ǩ#bk]W#g^JW۟Zp<X)O8issMJ_rvus~jUEs̓AbHJ:{=Vh;5_q}hZ=[VʲAfEKͽcab c­}@��� k9}gR* /yĞڵ-tR;g=X39[yj4Ə Hl{iώ3!SDŏמEfvw6ڟ]YSEt̳÷ Ȟa ���?5YYgŹU!ttZ=GL/hPƶ.;?FBH|3=@W{A CigC;^Njei-3c=���硞Z{^Q=ˤvDxP_[|Xk=ScAsDc53&z+ŽRբj#xz~t̔q[ƞ���0gj͍H@tKz K(ܒoO6dBPٳjג2]l.ֽdwU7W۶_Z wٶg-eJ7mYek daĊ_tטܰceLM{ƦKoTpá6왹Zl*74<8޻=���| 7{y9@iDsj[w_H(ͼu~@}?qU cp/=_uJZٞ9KY Z]Nqb; 5G7ά}=G),(~Q<l=66=s)MOIyMujJXs3��'pg{���`ϰg ���a>222���{=#gx@��a+��g3{'3�� {F `Go9}-/rI!Qy5v?G?}O5w)8/6r/3`-��} =7و/{ 9_y;Yzy?OTV]ɟo5=ͬXM 럲=W>\Vz"5􋯦mg�� {gbN#?̮&- O6jZYs=ͰoG  <[š3_'*5t=bĨ5~9dVS6XØ1c[M{ Oq]æOvԨ#_7&͝8r%ǒ#G:`s[f/7=~aiϓ⠢VFmO�a�Y;5. FEoTg쳳UʞvYRެ)ƞc3-@FR{(CgWHQjDM( mE_Þ=;_l{a=?�g3�g[\ w F:]䯾nh|<3&'앪:giϚ3Yf#F_vڳ%}'/NיܡΜfU ysc͕Hk"O;~a=?�g3�g[F<hy4w*NǾ3Be,\و![=g*=~ |7 ~,́C|{lN36dڴBޗmt { �=Þ=۲gu/ŨiW^$&Wf_!`a߾熊#G]ys2\zJ+%I GF|4gƞ=&́[nėͭ6:Fn9w̗TvUf evO�� �ٶ=αsݷsFWrg}Tد==k~-jg-=XZo\1CS]|הٳ&K]UfGڴ>rSٟyڞ[Վ#?wuOx[9;Mn?��jjUձR'Dm>RRSeEUj%6FGH6' Zw U- woi6 V:# ;Mm++[fU5<S$.S:Z {=]5MzNƲlس"e0̆C%;5zw>;8{&]'wtܽ"bT\=Q ] �=nw"sOq}ò[6]9\skn?�՞EJeryYn{O+kj 2n vO_}NY["=kN\SrJ=ޣaϰO�=��N{V9Q/ʳwy>>(6=�C]@](Ğcӯ^p}GIז=&D^v2;CR@ px,hѡ6K Y:ͪ=W]rWnX) ES/-DxEԛR+$mzXjiJ3`d:=HE|RY5PIr*nT>+с<=�nʪnnnw+=/3{^+ ;esԔ'<RڰgڌjUՅg{ B/iSR>)6#=cϾw[yhw$h/*u}́^.NYwx7ﱴgKkƫd>{퐻l8Qd(AWW};CM��`ϵDss̃*e1yy{"Dk0E<I<rt|7"ߣ=ǤPUEpʒYl~y[l+fS!R3+PqE X|-Kb%J#[@ o'- dB6٤m;VʷgrDry c=� ��gƞo_&Yemnlos}ǞY3=_nr\AE"I"W2r\ybsر''eUc>DZ{H% RcW/ '"Iy 9 $$Z�3���`Ǟ*>xy꤄"U r=הgǞQcϯSUV<'^B[jA|⇊ZJ TGo ֤c0Y\?ʞcl~cϰg3���0ٴ8` E\y͍Bߘgu&[{_ ˪TjUyqվAV&}ZVm˷ S[~3qIO[/N<+k{ $28Es{HܙzS/^Osb{j6כ6Vqfh)2C\ߞ//屧:i{���`Ǟժ[=\._,HihVU&"5=D|6+\u_ڋ*P[,D$ŲqǩqCEBH$ d̝ \vўMR~a{=ޫZUMMQ2iOI,ՙ\wm4I΋\dيP_nq!)2)s���ɃU5~|*4ڱg���<<OZ+mF;�3����{=H$Hg#� ���a�|\RXv ��� �Y_]|Z-���`ϰg�`V {bb⺅+ š脊5,���{=�{MMMͱc"##4G,,..>|yLY ���3.!�os\[[0nܸd"Ѕ }C r6O.pcyso ?qĹR=<x]?3-{@{KKōEr= ⁍FWt+-{O臤Zkܣm�=�>,{ܹsG|_bbbIܼE{=o^ܳ~[³%]]]UGq̦!h3�g�gwɓ_5yRMW ,/񈍹c-BW{Ց+L?pӱq2/JL=\](K|@v>8\llObqy6, 8<UO}*e8,wYqv Lթm\$!2a��=S<f̘Tg8늦Ւ3':ǧcIP%Mvs7[ &E\8dO<]vIY*}QbjC. OCTu2x*%<|GmЩ Wİg�`�Şiu><Q'NP\XX8$=7aΞ,Dƞ9w ܬ^N{i؂ΞT#=QQۭ<";d_{n,^zڟ]YSE]=>=�{�|R/RgmgX,.kBNv,Kesq>D 9vڳ:+ d":a@L{֩ cKl`"ԉ={� �xԤ&hu;v,Q炂!Tў"H[0<iF6(˟1~{iB=Vw$>+HklLo>\ 'mφֳV{ y<4fG"4{<)=ݕig[2/;1" Ue{"X aXsss[+ZRgKo*3[}%{~o5ε7=}س.E}NT.o…Rں ;ٶ^Ъ=!57:m%'[a=6Ȅ[RLA3�=&lVOyU<cQ^/|ǬسeE`Ҟ/_XO#: ; E[[AWJ-bz%ou*n_. ES=>{&?i5 ĞońIq^=@dϽ:!=!\w`h@L)0UVWd}<$bIԲ[a�|-svl*uYC-n᳘iI ʚ%!rʼnY*CZZ-ɸ@"-Z*^CԘ]:š-2,_DY=UeN<|h_ŋ޽KɝRWVWVV���{~ٚO>?myVH^fi{^Vdb/jO�<n#DᇚLy^h^Ȟ>u,*k`: ^@-ϟ7Y-%g,o=l$9XsέX>OTP(n\&��=?{7#\f'/o8wlц�}OjσX(" VZȞHLe*iy–7vl15Ha=/vK'T__1B���=c4͊=?qxVy1,NRA}]$(XaʙKBE\aX/?̰|o����cl9;{ő ʼnX*[uem t[AרWg4==Þ���P.YZ'g Aw ec{$k\PٳڮH6=[-9qAEy wb*US.Vذg4 ZFJnǼg3����{į y<GL\b35jo]["d2y! Ӓ@LٳT]FeLp-*|X$"GiѫT <=dذgզ8y1c|a ܀=���g �g���� {� ���a����==�{~[IaIZZy+C���� �Y_]|Z-���3�سnJBq(:bMr\���g3�;v,22Hsdw���d ��x\[[0nܸd"Ѕ }C r׏[.1n����Rs΍=~~~ُCХ7᜛מaϟ=��� �x\__{nZO<I%Y'[>²ƅȄBK+1޿Fs!fQDh !%%1㽓q2P(-3:׷���g�gJ{ZnjL(HJȆ$],iYX2-O: ^lw?ބdL׷���g�gZϟ?Oĉ:,{p ڞ鷘YtEmyx3����YR%$$U/^ #8tt|oo???!~PrfPWK=+{fv���=�h{njRiq:;sAAP=:Y(Di0`i,9NϚs+xV=[v���Y:5Z*G*T7߭p NezVETdmUFwz V畿}:}Dn&\3KtzUxiT![xb7sss[+Zrq:}]6׫p!ɞTg}sり}x3��'di"rv,}7T9z\Sz⾬1ˇҰ+Co:j)dڥuCbaDzT*UmUD8Ճ) {{oh?3kϗ/OƑ[kDssWuuu kЏԟc/Z&ƱguVbD,ϋɲ']õyb&Gi^ǃԞo���>{V9Q/ʳwy>J%V呁3Y>{[kI6>ތ '0`_@yl=LbtJٻpR$UzVIZn+kND-\}#[o¸/N]G|<ڮ+EZ Isb-:<$VǞεZѡ6K Y:Ͳxח̗\'ykR{ݳ~TDaKj!=UeN<|h_ŋ޽KɝN>őZ$g1���{geCw+=/3{ƗjumxVyu熆K!-FuIeWҍF[eX>>_ZC6^e%mT- %A[)U+nZvNR<Bƌy~ RWOWyg|?zjIz IQkJ2KEV\{kgCDQiXuQ:sέX>OTP(n\Oa���fϵČsÐ*e1yy̨O/_D6g/~[$b ] blr>dTd#W7+}3#YsXWeI,ĬʪG,4Ex犴WV=֘իqE=Jbzzw(&{%RT"rIOϋ]Sz6KlYeE=[͢i0؞;zhz%r]njjĘ���{ǞkR<D1sݨ|jGmo,;VRO2P̲k<^yzҰy2//O!<9 ˛+^oVc>DSwxQd;oռ:MIm"+_dyuhT-Ŷelgq:����a{6MP~=97L̘IL W hs.GDwE~k|i40Yn?Z%ժ�>˪W L#^N{{c왞\St46a*6I͕ҟ1^k6dϱg,cl~cϰg����kn+U/zP)K?K칰ĪBOS <}+eX)uԤ6דKP p}-woW^6[߳Νz<3UI&/^?8{&nR_t&P^g#ȼ/*ZZ*X%ǴY/wk6dG}Er_/x69 u\<Tq5i@uqvfq��� {>5C%bQ{&L^JN4MzVpE xɲ[Ysuq"9W~ 57E@iO 8|{e/_ Zr6e=_{yŽaTU "/Zr37e*G2wHvTr ,s-H–a 3����{o \S|����=ÞS$9״rMq )/yh�{���`ϰg{JBgj4 =���g3�ȞK K[Ax��=Þ=3{OVų��� � ~OLL\pB8PQQ&`9���`ϰg�`Ͻ9vXdd$Ȑ" <�� {%m?ҞkkkƍLpohzzzANWvL^#OK藹[,JElzu-{pOfW魵xo_m­-Q�~칮Rs΍=~~~ُ޵?)t X,nǐHE;Jqrυ)CKo='-!gKGyޚ.m{� �fwɓ_5yReƅȄBK+1ɞe^ (u`7u϶z_>>.'u]D�ß_ydD NDG1tݥF]ҕ!UQmyԛq2aTj5Sϩ7/4^ud /zDm>L9*w., i<&jIx/lՓ!2x^q7?rssKmjugI!2㭎=3k٫Ålۗ|ʍؘn��=S<f̘WgBARjhtLC<F,[UX3t.x4cy[[ä%An ̟\Y@F{VgPs),ޘ"fvJm3.]vP܉l uEejIs*= V{4P^( O~L}}$ٳ!*?u ;Ky۠S3b{� �x/L:8qR!`:V=fZVa_Pٶuyjj^@‹˾ѡ/}T߉Fֆjept]۸=')3<QH;^W9-l6P]eMNWTċ~fp[*XdL&s9&^NDv~=[VjQa��U*UBBB_u~PU8tt|oo???!Ǫ~-+y[LN`ÞyOcgs)T+]<wR=jrb߷s4'K_#g{X,b*{-3ͶשMI%K59x�q';d-TeE=�{�Ԥ&hu;v,Q炂Q6(1܍Ln{nrLcϑ".Ah,=# BGa7o/ ؔ+Ĥ9uݣogH4lڌ^_Hמg-=y:-6nmTl,+ӛ [מmTɞdg�> {&V{ y<4fG"\$sx~~0wy}4hoZ;]`l4iKōEr= P->sss[+Zrq:}]6׋ 0\egwCg(tUpe4Q ]-G¥ĽE2qLqzٮXGz=UsVSONþ=շ_7=}58{&]m d:ҍ{6rm[6tm 6$}FLxM�ߞs U6wtjwK'dv>s _!Yɟ'nZ.}Mi޵9=jMΞm4=' DfB z8rk0sndg{{{]]]ccBhkktR4jy̚K[Ǟe\[.D˨o֩2V [dʋ0<M[fL=s~7DΕ-AUݾ](dҞcə"BwyڳN}>0MAa*HyHĒeZt.SQYX</& = alr>gƞ}%ĞO r|9<Iv6> \<`~V;EL " KjMѮa胷(mFk5(W[R,](<Hn Ӄ0{5سSNqhKL, DpE룻ߑ=UeN<|h_ŋ޽KɝRWVWVVƳ|=a!�jϝϞ,6VH^Rk{䡋~:`@KN ( O~*UZQ->ovM@qȞgu= U%^g*k(BdJОfs5(Wfz1t˽Îa`|y#AYcsŧiΝ[|R<WPNJKsiiiKK ;;; >-vhq J9�g}=ez9Uz7\KO qjYƢqy,T\Ze_3$h0O i*w=  1ٳ,,y՚HQ7߿<_,9zgdJf5(rzwx>}01ٳڵkn?pc~_ѣG.rSSS}}^'ƌ.Q>I!<b&u#�vْhdUOc/rx6ګ[<N #udУq֖.b\ɞmda۬D*'YNmFW =3r���64wgy޳b?=OWܗ vo8}tk,Pz`xسWA,zqЫ5>;p}4kO9m$o3ڿyu|[$9U۹ U{fqWv`���=knwVtv 1a_N}Riioo+ ʃou0]= +]V}:G\`ۛ tz Hi6t4~fSWA,z1՚7=oqi{ՠ[.jh'u:2LOXaÞkg$ dmǼg����1|&~T <bMC~mTXb%Aۏ$u`YwGCe\6_&驒zׂ>횼pP(r^= ʤqL YbgjMtQ m'xGn2SN?یve\w,ڊP^se2xz.Ȱa6jզ8yz c����{o wK.{���`� `����aϰg3����{=sIaIZZy+C���� �Y_]|Z���3�س5nJBq(:bMr\���g3�;v,22Hsdw���d ��x\[[0nܸd"Ѕ }C rqZ{m .r8b|u ݭgwxBi̎Dz|1bO m �=�{칮Rs΍=~~~ُq{&LVQV.|@]K)NOaNm`27tm C 2oTl/>U�=\__{nZO<I%Y'[>tg<oHxڞƅȄBK+1g3mkjx<CfLBKalņEd"(hĕ*Z\(+PP"BC$!cHf9̜ssfpr,:{FJq;f*X9^: T&HnzTBީdT-OpNkGW]di/΄���?=7P3(,CMcr':m'{]Ҏ=_LH9spn[Ę_sAg\D[ad}51ۿƔNȊϞ Ю6���?=S|mW^%ylll/W[Rw(K gcGhrm7VޠV<0CW]6,xiz֌h7)#. SζY<SJl���yd2UWW<xZʞ':of$GG( <6ls5@0Q|o8ܱ<G2s{���{�eVIB<22[/6._N`~]Lr?'4*UR\)dvK;'X�A4djV y}7=3oFPOC�girEL$ 3&3I|.G$>Zu/>rőqfQ\<xf==RoχJec3_ƽ̦||!kb ]a;iH1z{މ=/--ݸZ\S<<<0RҞ֧\~9L贎a|ʞo*ZdiZʺc9 }]Vs,q\Ҫ z鐿Nl.|Mʦ57h-sfnU)7q�swU8l=$|FO˯x?;~gShLaˇ)"~92'NuJI){{޷se&Psܽ,N}e `1evy'|N *ѭۇyhh} p8Z۽vcoI*%#[}NS{5sɥÚªƞMIR m5<-0L,Wo;nZYYU ʦ%i]+8~l]ж��#٤N;Ns1lUFaiwEA^K`i?= %zkء*ڱ<OyYq1ɹOdJȻn֍J17U111v{m͹c#qҬ⚷ &򔶺8X$I"oJ"Lmu'7N>;%Y|YRL$# T&YZj%GL5;Y&őY~}ʿy7ՔdBHT&+ {6ѭtjii6ӧh& = ȟfY!g1����سawvOg s3lp8go?' %Om@LUbu}?Kqq{#?&u>J:ў#Rj%^zŞǞ&I+~қƙ[㣾zȆ/ae+/QbֲxYzMw$K=jZ]{{O-,))pfG% n^O$cWgQ]c>{޶=777$ ZQ/4OMMl6t\.9����_gz/H}&ڽ;'=*웜3fZN' $C�̯5i2GkϳcEf|9bυܹ|qZnp W4k2m\~'f+W+i]=w˻t1?:{=g_U|I5K^;_/o=毟j=ill龋npVh4:Nd���سiamx뛌<5S 9C+ebg 3( q6=ՑnY7ZcŃ"7f$a|QRVƞӝ7|7L6_X B/;lSf %&{Շ/Jyϟ?u����ޛl6 fUQ3qÝ=yg=o9y;``Jq<Ԕr oÞa+M({../vLǕ<;,B+8\ԋD8f&황sksEwߞO3Sc\ƞ���fU p%R;av2*i4{lP g憹T/i1Gk&Ik מJ8lܹʞcřwzNTޜ]W|O}cEpx '} C<61IFJXO/\~$9bA*Eħgpofg͕UF扁0����%丱"7B ߗ58͆5QP %e{639V8ٳ?䣜$uf/Ŕ={ޠKbqj>FD",26釚VXRSsj_37B Ξ؄ﲿϫh*{f QjRL熪חPÚ`����og�����������02.2``����� �`{ž'&C�����33�=3DOOOcythY ���==�3 ~ojj*N?jrgff 9,����9˗/gff"iLI1 zL����{B ]�;ۿ=#KM;tF_b9P*[|n;N8Ul+:$WYr,lxjmš(>U'.9 <~ż,T"ON뛪RP(8BoF³rHL dlnxgP(RIV&[6maJK$ʌ.I{ 12>##P3{sq.-=�'yaaT}ݻwOP455 S4ksȞ 7[l?-`[!ڳu麶R= Wمe}nρZ;z{[Bdila8-?ICoˡ j<RZ;$Mߎ=3B6%:Laee )*dknq-vc0uY|-=+x˛kAtK4;�3��=ƳgR|5; B 'Lέs:ʣ"TYߩ#I\PZ1t2^c&+OܚVO][W+E&nSb0>`jRN~VFjbl1XcRiaRB]}GSqjqic2I(T HKĸ,:}F( UpMc9n4K%`)mBnlCE߳FhyS MmNƔlʺ1 X.xTBީT-O Շh{=T^l7h%m:SLC,]jǣЕpgjRA=Tp$GG2Q!^iLDZC#�g��=7P3 qiɲk;^; B/_햇8nZEk67`<$UU605H*a֘-,"mKk>6iβ^y I+J.Kk yTW38QE֖ŞlOrZi&S3Ean+3-R.4wQ.Foq tbL[%q}iQ[v;,-q X.0\+lkchyh{=?sVV ?k%S:mL,}9 g:7D{faű]sEr9J*45~SzXWp.>ḧ E:oa5+�{�`3ηoF|URv%( ů3HVN*ի> :zl67G,4Ĝz.x;^DCfA⸤QZaBno M x)[Xi ERmmYyd*7lmW<Cߕ=/<yzӪ󳮬_lǨCM>wAٮxƕ}4,s2d6\GT2?Mt=kF[Фۀ^qX(ƛ5O/KS&A i{fzsCg[q,v1%^ۻezW(qL)hJlj4 m+�{�`سdV /I :oN1>F[♹O'{o:y#7#9::FP<AZ*o7?ux[V'ڲTn@ | 噎_CMM/ni{rC9ǧfP|]P_8 c\g]zdux<Υ4Xtr 9.@> =NK@q2\=th%S:mL, SW\W撶ˏ %=+xsŒߣ݇Axp��bVIB<22Ab{b~omq2ō5[Os4hƞs{|c{{j㉻' P2,{^ltlߋ2ɖRn*[L?qrj8,{6Hr#\l5+:>ʒU#L !ZE/9.Mnwz7Y{ = E*]_m1ӆtpͲi왡Y e왩╉,Ónƕr侠y֞7_�سaA_ A:ȗ>{yd]' b}aZ3rZۈ Myiir_Rw0C#K֐&ۘx\l(&QXqD=GOZ WuPVFi}G;ci?t{v. `C/mJ{캩who1g:U+&J[<' ñM&BRCSA&KjWօa]g?\8hrieͧBQd7͒?ᱧ`+ϖ^麑//�.%:˵2_{/8c,x֬& i7k)6^L7Y ,knqL{Og }~\+oJc:-Xq|@켘&_{+�{{.;۫Co#X<ilc㵫=. ذ[G/{wJcƵJtk!uZ_K%:EVv?=M/ Ԋuz#-6Y4i X*-Wܫں98qUz57^I02{9wKeqqɇ59Uw{ֵes8h?bmۓ܀07%EKQ&%Ӷ<{K2U)ٚs+؟l,ҤE"+N<кxXƓG%Q2dɡMd>?͎0o; 1K<1r ݬ*EM#BpӔt=35߷�zG<8-%ޘ֛̐,F"1unşWX�y3>~q8Yh xsW~v,K%B%v2F f1\|sH:z,ҘڟW|W:HЖ8\T)؀rX,ӆCLM’UK{6ѭtjii6ӧh& = ȟfY!g1����3,(/qE֞eQp<< Xv#e`w U[Sy s]'|?bϡ,E S1U2ܝŲ<Kl5=3Uc%ܜ`0jGP<55eЍr@����Ξ^܇X%[M( ˞MML1-Dwe@u OhĒO\ r1y"JյXb,e}1v{F(KVMOcccO]t#]ZFt"cnV(Y���{cϋ<A,:L+liϴ__e$eh\_niGU{Z׉%p9Źڇ6pU*PNVbYtŶgj0g�����{;{fX܇Azd|y߶+,{2I6iqӀYVa'\{eq.v o왱_KZcVzXT{����ϺF>$Qfa{fZƈi&<=eXbm)$l!Ę϶9|gedR7B+ݿgZ_oagjd3����=iALk1-Ĕ2?m}] ItqM35NLl۞?էqt+Tp홥n,cR׼<y%=T#%���� �쉻������{����gx�3����==͞'&C�����{{�gfui,82���� �`48V˭)T@����``��˗3334gOLLs=&w����/d��ܞz}uuۑ@Ǧ g*ݴ,:n;mX!hטkn[Qfw1/K-pG2۪'\.:3hqUa s>vh{[gFb&?pi[) tp9XDli8mA4\$IcJ/ܧ{% jmš(>U'.9 5=>eCi}Su4C* E#my2kB9g��@sss}ݻP(^g`G[͹#{&,/-ŞҒN ή֬�bJUuofӱhHV~Dib+uKk平Io(S5 ҊjrL<D.\ԞT]Y}e ĵ!ɮ 7uvX!OSlJ) MfqZ[~׳<PHkB9g��=ƳgR|5;|!|RɹUsNWGCyT$*;u1I"^J 7̮Uq är[kspUz Q'^*a|fINդc2U)0!:ä] 5i)*殏7!A[[6 =7SӟY*�Mm{UGmȓKbqxߤb)'^Up:S2'W$؂G[֓7eqSo_-M SzM8e=" 1"wMC|q&ei7&OS M-t>e}8dǦ6{MW&0ܕ x|<JP|mPa/~�ػL7|CvΤǍ+Z&Nx$ݫK\|MZS[w۸iu]2l7ojx.ImXAv05H *a֘-,"a(]X!@#OtB͓=wqJ:oZnUĕ ڲ闿, ˬlvX#|15"}Mmc靳2o~jiL۪L=,QqEܙe5=޵2Bm쮎5:gl%(h \|И/puNy*=y�j=c1 r*5Bs4%q}2t>Y}8J-l`wҸg,D'ػ&cj�ػL۷:_zT籱]y!)~m&iDrWQ|^5EO;f<G# D%<vY*8J/2%UҪr{xKgR4RmmYy[~p1ʢ]{QǙ|c\+oP%W<oė?Yo3m2Ⱥ9mY;Oe'Ì,\P°@{<Qcx֌h7,Sk5:WS>.[{Z ͣ8](my*l Oxo0_+Ol\Yj AYJfvWːps9iRɴStM(0=�Gd2UWWn=gԯ 1YLqT1SkJ ]ci%QyAF ;y#7#9::FP<AIv(L<oL-=oٞ~M*M<_u#P\|!ճN3m2?K.?JkyX)d/.xˀl(=9tn >|vZ }9j\$)uw_'W -ؤȍbEỠ$ 1Jf@˕x֥GV\zzMEcz3S؏�3��{˞V3o=@W_}yddda^\/L7BgiΣo3WhX{;zVd<no왪r?'4/ReX4*VXZmm$,{h[x/سɂ@pxxt}qjֶ={nU KORO&GƗrN%M՞e+D/(!=FC &?n;"P4dj5�L!=3_ɴQ>Vo/ԺVGKN' e,]1Lb?`M+re"@$o1/*rIZS=9d䧩8Fo"w<ai[6c6!mD͓O꾘ZmYkq1FL6Ó&_>23s2R㱇VD~祥Wˑ+~JwyqPl!Y ֐&ۘ̚w`{F5ʟ/c?9xHzk5"&NS.?<iK۳si(40ohE֖MµgrirDޘL&KjW-a]j{۰>i4J.өE5o(}:m2A=1,:r(~ROZ 86= E$:˵2_BS+1Ew4b)pt^LFZ66GRoN".Xl7]aJ Y[\8hriemJ҃gu)ÁS0^g˨+]7r;qi|2cbg{JǕ 7t'UItޕiɴ^ՄS9ۅ 3,Ŏ%w/S-4>GS^n!ٴ`rvYa{܏ Fr9ksvݞėm\H{wn\DoR硡7p8Zl7,P+ه<ghӤ%bWetʝ{U[w<'01J˶8 &Rf}(`'kr 1kp~9'"hkK&a3[J|^WܰO`ԓO[la * tVYq4;Zq8\\Uv65bzRLφx0OxVnV0@_ٴKmj%(C-b$"SVix~w,Z*B/ؔ},ҤE(+N<кN+ԧW2C¬Dyct`3fPaL)LJ!x4~4Wc!t`NfޔOa  '7)K'Y&}:.C˒be"Phh'a*8hfp+V8!7^ҋZj%GL/kԸH$D>nW y7͓ۺBIކO<9z(N($i~~R!n;q?R981ߜ;v8һhXVq 2%[_+2A-%hPMIL,DA(Շ,z"H(<P_e._ST[ZY{6ѭtjii6ӧhz@?fNC b����/g+LYwejdO]/?vMŗ@Sd^sr8uVԺoGy;(kҏHxΙ2Ȥ}#A,+zvls\zJWNHK3DRZ.hĉl:)yY JoϴŅ1\/g^IĊ&qPHyS bfa >W~軆S*YT[@טWڇ6;ZXaf mpfG%.{f-m=777$ ZQ/4OMMl6t\.����g˃19aޝ֓[$%ב g ai,Qd_F|Tto)_<HKrpTҹ^o1.ϤCIr{v/NfSpSolV\>HoϴŅ,*Km˸EOr8If_p"rU7˴={>sw7D,]C[~. 7m6.?W3̎dϴe՞?=w tjFӉZgZ���=M% qz}\E7;S a\Alv ?֛H^*;jH+yLyTTLLL$Ƌ=rE8hn667Ȟn**/]7z/J܂B7yxq&u<JgjLQꀶvaQWr8?bbeZ<\0ppt m)V!wK7f$a|QRV0ƞikT3����=yމ=U } s/.W>'xݿDuR>/ x99NPA):7W"87\TdbWSXXo jƿ2-"gºe;lU yW?B5A ;K^^ >khKY PFԆ+xvT[Z=����N knM"^Əfp볹¸b%=Rj¶Ekz/\~$Ϟ? ^=$I<GOͻk>"{s&J\ubcR"5 \j5LUׁvA;PysE;X\+X|:ARysbv}ۧ>ϞknLc4t C)xybp8} {?DQ<|0=3זV`�����+r#D|P}Y{祩P2/?r:\x۾̍w y|q:u@kmqllBwU4=!s8Xm;A?S}X$p+8䣜$uf/ştD+1ٷ:H4aT&t,ΧER"txdl5aٳo3G$=#54DL]Tqn8{} LTOA{0mSKcXrȽ뛹(E&Ky>s{����4BٽVߋc~/����<Z$#y>]x~eLxנ``�����W"V=RΪHDcҘ fJgg�����{�`dwwwQBz����{{�gfui,82<���gg��{MMMGZm]nL2����33�=2??L$͙)?A x���`_Ȟ `'wg^_]]}v$ccc鱩===#{ȱK,Js˟/9UlmPLU] $[ʭ3G#1�j |f]RK\,Ķ yd~.1;"ܶH7UG3"P$M?R9hqu:S5-N]tƗ-qP|ڜ肫PG s>v(60K%%e#;~t)m\0``�O煅Rw=B4O`G[͹#",-{f@A1UgCx|ni͵<w6I\5ۚpc)5;'wCҒNשdila8-?I87FX4L]DE$*p\lύu4肣/YߓF4j0aꣁ"EBaDD{.Ll �{{=ƳgR|5;'J!O[5tu4GKE"SG$=0ZpcZe0L*W5<kspUzޤMxU[~B,gTMHM8+Sr Q3M=B]uh 9ވ37ͻh`ѱCHFP` |aW+܋y6Wn4K%`)m= yrX,;=TG%zH4U(\[>_sX Sv `tE LoRyQSb)ư'L`jYɄ GG2Qpo*S[<p1fKG]jǣ-vh1\ ) )ڈ/]��=7P3%W<N%LXIW|Ol<D1nZ]ڌoX\TUq۰aj|qyNg٢"ҴP4k-5DgY/<ك⤕֞eiuVo%_H<+m9 0nωW, ˬlvX|15"}Mmc(\+H;lk11ۿƒ=u0uP_r�jF8Ҫ'zQ[v;,-q NgbH.GWY⹠3OS[7~Y+eꣾhu{DL. Seh3a`O3ηoF|URv%()~m&iDrWQ|޷=;x1QJ8a *12WQzᐙqIգø^5Yg-M2 -+qiSmpS-rvwe{v,>F1|"\+oPW<Sߡ+iǴo$ϳfDY,s  P&L9f]?LU(mn͚'Wfr;掫eHJ}h3TcŜ6ŬyqLdU+K-1sLQlQ J^ l֞Y"G\ )0eBі.� �{מM&Suuu:VPs}xMWH1yhv5 /4}r<ܫ(lʼn1 B.) 3UyOD{\-32(=oY ,5L6<_~8>p33K>CA&(7. C_y e u+WH\|!ճNw+Kǹ.B (tjD#7fcXQwK5؋[ b) =:> 瀈Xt\ )fі.� �{ԞV3o=@W_}yddd Ş3fhxeϾ*[OsƞBPbnodȳ"q}cTM֖y<q|;*òVPHa` ff.':4˗Sa~]nidfV y}y,0=|\!,j0i-^EƩYڦZE/9C< IqWL*mT!Vcsq<H/cʟ%[z=Dҏƞ. Xh+C SD[^�33�Q{^ZZq_yxx Şed37zY[˂$J+6, 4I#깮 ֈ8O(xu, nΥLgJp)+:OXE򏼟]sڻ|>Q=ҴƕuqX& jrפPkn0C.өE5w epplsmc*3K<kVۆ\ Yᱧ`+ϖѶ{FOdWL3U d W?"~.KW42FXGf3],1]~LK?|aPL#btgg�|N zܸVn>CCKCDñjWWWI1{^ GZm=?ipqUFA[oWus"q OK(lK`"eF˅ \*K>/[س-D1osSR?!? 0EKxV)snbӚޒLUJF]xHCAʕ'P NwgfU DMV23yua5º`:(wʢ"}s1RLN,JD! XBюE6 8hvpmrք1sp3jXW8X}D0KDL?nMsa0Tګ)-/��=gf4W---զ<}m;d2l6t:$;����33�{9/'`04j:yjjfr���_o{j5N3tDV(Y���{{=����33�=����O�n7�����{������u�`����� �`����� �`����� �`drl(!=k����gg��{fVщƂ/,//C����``��LߛӏhںꙙBe���� �`ρ_|933IsfJď9gcz����{{�M#KM+}+?BvnM}b  N뛪RP(8!<+L&әX $U~ ËT/�==�s,,,ܼo߾{)v{W;zm=n;)Y[lqz<Nkqc.JҚkyl4==D{N5F'_q8w �gg��{xYJ]~ѓbA!w,{|'?+#51p;f*X9^wz~輕pVZ*`ЁTÄxLS8ۑ+/SY'/l7n;/` uþ30f] 5i)*)s;-?U!BK7jB'J!O[5tu4GKE"ST/g"S?6e%mJ0!J;vY .%}s,RƉMm{UoSaもa3<���CRoRWUU\I3&|pmXԈ3En[Ę_3?8.,"_FZ,iAtqrݷ9)o#[nHKXvp'Jb0fl:2oZ 17\^0fDu?k̦BcgYBq\Rdى{u˗/LR~&^T6KKi\Bų\+쳭m쮎5�.2=4V ǃMyXϒD�� �`!۷:_zT籱] Yxc1#4LڵV<yXAkGqIգuI;f<+ÓPS` /PĔIM0n!WxV(\eo#4{.~b4"Y9UD\_.vW8Ñ&LpZ!-7tx͈v875WtQ:]ɩυS�� T]]Σ2sYs5@7yؙ9uVDPHD܌t\S$mlَ\ꚷjB<_K S&L3<QSt!F=SԹ;&{b ((RXy%\g]zdux<Υ4XtQ=4 nh <���ZH�_}R瑑] jYڹ<0yrpۤ<N~O=i O*UR"( Kgzɱej,X,K&۰s={Vd<.ZOn vb_&R^+Q{ ­N7koofJ8\qbyϯO$; �gg��{giir_R]^nDm4qe}a] g֧\~-Cu, ۙҔR v8Rփ2qZJ}Y2نM]<iq~$\=5Th2nd;/gS0^g J׍0~ۏ3-ׯl ]PKTu6ke&eӚsLwN{7'JipLBUE?<���wt޸Vn>CCCt:EVbۮk<y$ZaXL=Y:īT)3_.KޓKeqqɇ59UwǞd/p>8^g(EDI{&۳s;@HPg>lGc_,τmgaV"&@` G;F7ƒ_<'+7 d QD~eӒzϴ[J|^A3=uŰ�==nl6M[zR]mjKKӧO6M&z@?fNCcȄǮ~6vE>=m��=�}칹9/'`04j:fC7"ľC{y\EOhk/؍crQ/���3��_Ԟ466tE78ej4N'2$3<ݦ \PEEHqb>V(Y Tݍ����Nw����``�������g�����{9�37������`����� ��3����=������m<96]5����33�=3DOOOcythw����gg��{MMMGZm]nL2z����{{�@/_93%}bbǜ31���==�&z}uuۑ@Ǧ UmrF_[TX;ej;sb^Z*b'!<+L&v7��gg��{@sss}ݻP(^Nx|1{h9LmZ;z{[Xy-&Iw7��gg��{f4Ϟ=KkOT4zRHM8܎ن<D,Gh:o>,5؃5t2U)0!:C&vTq <M|e B@˒Iw/dBīTX -I{`^J +g(<arn՜P-NK;6 S3՜gtZ{7g^2۳G%zH,M ��==�vo7RJ_UUsu&mLX`S#RGMmc,z(T i}Ky)I9<alq#.cW a(RLIʼ.Kke.py1 Şe rI-e'vv%._0=M9Q;wŞ]+쳭m쮎J �==�6o7Jo߾ի:JP c1#4LڵV<yXAqb-ZcZ<sc8.z~n_7inj}es?qxjʞ2 -� %Rr7"s/xsʩ"_-vvn@g9{ɸs_,>C;mw5#حtx��33�=ov3L<::[A!;G<W~8>pQgI:[NtHA'<A2ݦJ֘ȕy F)Tn=3e4Sn~%1Ebn3U/INcbRX(y.K`��gg�;ٳjF(uꫯ:bPLh=@iΓۄ&q7=-xIyP>tFTР]:л>J=/Scϯ6ƞY2ن=[noٳ"q2|r8^s{n@g9ʧff.':6pw+��gg��{v[ZZq_yxxۼQ,My`\YtXpyGu;`mg)E~iK~qv4'ݘL#Ek=(u7%msœGs]Cv,) i3]78KQ* |&u"̊[f jrפlZCcW��{{�n{wJܸVn>CCC:t:EVvwɞ?ƓG%ԓONjKUH02j>T|X_Xuy/GYJ^g(EDI{&ۛbn'^B^ GZ3m258Sͩ "etn3,<yԼ"#0lͪ&"+oޕt���9lFvԖOmtL& fNsǾe ])lX‹|\V���{{=777$ ZQ/4OMMl6t\.Bu;eX)xֻ8V( ��� �`ۼ466tE78ej4N'2濝8ɓZmZUTT*G(.Sku,>/PL5{���{�ۿ����gg��{����x=�3n����� �p=����3��`����� s��{����gg��{����gg��{ɱ<����YG'zzz Σ{ F ����{{�g:T~DV*sw����gg��{d~~˙H3S'&&~9;����33�=oBWWW8p XzljOO_&gX=[ЉHBgە Js N뛪RP(8w1/K-p%ܶHe\r?E* S��9THunnn޷o߽{ ESS poi6 vڜfy{q}a㴶'h5֞ҒN݆=ߚt#/8;Ux�33�=oh<{,׮]C?QIà=aq yrX,;=a?t?|8+-QYk@ceRaB<JuLŕ⬓xh7ˌ 0:aJh3 (U~&;-EP~pІ6p4 rX1#t(8Xvm]yaJϛٽ:]^CW˓)6]w_M By{Ϋ{.gάfλ֬uΜBB("_ "RjXLV((,kn$l6DBQ|??bޛmTD vz^U1fg}[A[.zޔ|_U&ND�L=>… >,z>p Xxݑ\QђϖeiW/S< QKv{א_iT2)Rq5[>wZ32Z5nCfM$L-{4JWflIP{7fyΆkI/AIV+iIY}bگYv廲>|iߊUoL%}h*ա߿Tu_rTY{]ZPVZݜ�z) D:={VN禦i)Ql\"#q? W{ G_4:C߹qϊ5Gǥ6n#Z^es; 16pI SOcՖspgCme*Bp}nj֪ԙePe>W aaaaa5{+ZWf(D=;W_[:g]8 3 Pϓ1G΍ӵSؾwXXXD(*5|‘#&"cJG_KMk㗉:wkt$QLpm=ǃj%c*3x ӔZ3zzԽnKE T*UlIܝQ{ir*",2U[fqnkٹݡ˜zvߎUmr&Iڨ;7GDP3@=Ob1h;tnhhƝzE阗m/K>ZܳgFh K X"]qZk*^iu`[V NCqc9`m# 枏utL_78gmf^'7OF[!S"Cgn_tEq6=%$^DP3@=Oj?!Zӹ~?ُU'3.^yMe>נ.?tϳ=-eዖ7<-MEyf}?|{Dm?W)Vⶴ?xXeVpgCoK:Z8;̝ҿOг_I;)[!H>{EJ?\ $,OZ!x<B~8iQϽطg8eFIÁoV' }qdND�L=4 9|wH纺G'].NjC4ٙRS}VUc}B2*qӞ:+nkmOIu8'c錣jϦ(eLº;GwNLSM֚xJZV3~gCmО<D%*icژܐsSOY&eG%VFU?.n엟%K|W~UQ_ : {7'۴u_SNyaJ~�P3@=e] [֓_tL<#h4d=v, Tw;M^�+W;RV,jJ.fz%I}z_g,͕ڡihK�P3JoMfffeE"-`pݢ}zVTʸ5`;o.Vc'?yw^Gq2*u3w@Bmqz �g�zJ=3 ��� ���gz�z��zg��ggr6VTT^C��gCscKeeef7b/>00w�@=S�<1޳lܩjOؕw�@=S�<VOOϙ3g6o,y---rD&��g{HtSS+++jcr$NgK;mRG;dfyscH~OG>^PƦ}eI_2}R/m[e;4'vl٠W.lz}4:gct:9,Xh߮bWk miyUunP<ixZ^{f$NXcwD_~h|k%[+qg_z *ΝM3WӶlZzysu>#.&::zz>-)m۶-ɫ6;CHҤ#Y]ũ3YZPmINýO6P&lH+w$"&uِb2swmߚ.)aCzuk]q2<L\شnΆږϩ=R*UIw:}sh?Az?@:)nnf"_<cm;HnKG}ʿ5֥/<euSsVN/�Smy…~t+MXwN_Hhgr+V)QKvI4:jK;́X4V:j ğ[P6.!yPSnS\zp%96eyp~clr~3<fgCm5꤃vV.]9gƚч.Lr<'<Pla ^{({6oM5`t[NXeo63@=S�2-.\|Y9eD3ɏ]"#q? W{e$O|DEc0XsQ~\l}hEx+SP+Sϟ6O-SΆږ|UeԬU3˴jj>4.=۫g'%߮u_X<~g_Dx/6ϯ.;ueZ*7D/}zh<ztnll"FQTt?1CU::j[JΧnZL,HV~yV[85&Іgk9P+S{<EԚףn&p[ ,R&OxVbL~jj0H٠Mp2{GLPsg_dY,&~~0y ӸSϔ(\;,m/K>ZܳgFh K X"]qZk*^iu`^V{=W =OCqc9`m# 枏utL_7&9T;Nqs3B%E*lwY,ܮr*N^{o^P3@=pZfV~et{k ˢW^|*.5(%26}nKY nKSrѨzlYn"b|Ch=K+q[<J^LTm+N%[^}gC}"3w.OHhC$;͐o7$}iz==܌K?pC~l6\N[ӝEM/+I^Y$C<xܚjr9<,߾8rݱN5�L= 7Ž"2Ο;$] ҹ.I˥Z|Tσ>gg;cJet\O_YU 1ʨM{㣶+Vݶ=%mᜌsρG% >WٔIXWblZVTjlmړR1P%mLqnwb|)KI Tkfx8=V8Pudwdɟʏ [|_uٮm?Y~$Iۓz??zn&cY?Z'tRYYx,Fh'W)z%?~X;#?'0tT ɹf�g`svvUz7˵Zhnkklb{^IŽ_~\(iW\Tj�g_pdffVV.rb -yEJRƭ|tZ8a|˽ :VQj3�P�~z�z��3@=3��P��P\��zg��g�gz~AMW'5��zRYY˶ s��g'"{VV֞;ZԣS��g9s͛E4o^S��L=3z{{=njjڸ|}eeeCm %ʃi9>ԑǻgYмա9cuDrgcLr'E.z-I޸Pq@=xY霝`Fuvˬ6d=K>{-:zV<Z^+ݖKYyzԳ`ꫯ|9ش8S8Y_.B|Ӿ:9L_eˋͮ')IG* ړq(RqG7:j}ԩ'(ݵ}k򺤄 }3ky&xxzWՖٔ\z->R'* 泪 +7:}pG\LttN׏)&O M?}fuRD,|L >|%Y6fYz>pw6vmjjLThר^۽VTƚч.W| L>8169W9vUFwunI.|Q\zkTqM$9odnZ;4|buGr.zYڕ w /SꈫC@n^|Wvs/[ �o_tpHg4-;5wՙ&|=+m\aaYRgiG?iY~0sc{TlFpUK_Jy񚔛o V~p__q$aJ_|\첔FĤʏ}bkJ� 7gx8];5uKqKMk%$$E+?cW%[M>3(;My5ZV\Xqt?wDdtW0Jjw^?oN:@~ג5w[mWr�3߲-?|?H熆iܩCqc9"U/GQݾDszs:OįܛKEFysjܳr64aRϧ m>j[~heus�P�~zZfV~etޝ1QX;ah-eዖwh-MEr=d=ZO<6<{߳e\} 9ϱ~ ?jvJGƦ{U'3.^y b$v;SdO+б;)[1$|"r3�oWϚ{E?wH ?@s]]c1ē.KkZ^xL5Yk*jUZ,nkmOIu8'#q})KTJe*icژܐsSOY|RzvoHXam;/xX"Fi]ٙ~z~1]%>EYgW_@ˣ][V+#7s�P�~z6j=y|Kc1ҍF8AȿLN|w0Ӯ$x?@=S+Y;RV,jJ.fz%c�gx%7&33"G p`0nQ|#��3 P��P3@=3��F; �� z�zrP��P3@=�@=S� ��L=3��\Ogzf�@=�3��3 P��P3@=�@=S� ��L=3 ��`S��P�g��g.� ��L=3��3 P��P3@=�zg��3���9@=�@=S� ��L=3��3 P��p=�� 0کg��g�3��3sz�z��zg��gn��P�p�z@=�@=s9g��g�gz�z��3@=3��F; �� z�zrP��P3@=�@=S� ��L=3 ��`S��P�g��g.� ��L=3��3 P��P3@=�zg��3���9@=�@=s9g��g�gz�z�� 0کg��g�3��3sz�z��zg��g�zJ=3 ��� ���gz�z��zg��gn��P�z�z@=�@=s9g��g�gz�z��3@=3��P��P\��zg��g�gz�z�� 0کg��g�3��3sz�z��zg��g�zJ=3 ��� ���gz�z��zg��R�p�z/U��zg��0gz��3@=��� ��L=3��3 P��P3@=�@=S� ��gz��3@=S��P�g��g�gz�z׹ ס^^sEĐ<9z{=#={ꀈӨWDk* C@ Ĺ:].W|"z|g<zgzzP3 P3L=3L=3L=S�L=S�L=S3@=S3@=S3 PӮp?G{Ba*V5Wrh4yE%et30y�.6έz6v5W]h4WJn{L=S�R?2k\כ̒$e~zO=g]c̙z6s5eV Xm-:kzyb.xݨ}oZMu-Wo/RKVr_z~s>ckNNNcܻUVw^ {Q\Mnqٝ>sʂ{Mk 7J_)z`Z4&iCWun5s QlwEţ7_ZtVIq&'ZE>C8&Fo 8zn‚;-g,G=3?Vo/8yv5[t73Rɡ+ln-r%%pzSݏ)),o\ VQFc^e͕WJ=>r8䗮\Frț~TZpnP b=O X..ܷ^WU<?`=Jsީknm=sɓ/9W4u;Q�F={]// >mxZ7<0[)Wr_z\)(}P[3.rrr=~!fӓMerx\WP%nG`2 Wr46вٗ;%M"}vjC30 gtQ8]-#=ϱ;7ލkŹ99׵t[iWnz `nfOYZxUwƒ/&Wr_zPr:meu= 8~:,?? \Vum7 %#8WZ{E._+Iߘj?{imwZN!z~3Gqtz؜.j+·kl_vyz6Cg9gK_-#D=kC%}߿g ґ牟wn,ЬvZrj4i?$I*_Qw>gw(.0.wο;b \HfYS_Cmzf΍9L}9] f=?ÜS3ක4ǽf/;w ~@̜g�snnz뭅W46qJ˿-Vy{Xu:殿+9s_ eWn=]ڪ/7~vg@׳_YWZ,]_|kPhiUTXY/.<&kN!zxQ<kEPj-sͦλvtg3<G0wvn:Jg g�s|z?ǽ"Ef|:XɡCl? L>mC?+(z^}`jlk*J>sO򻇯+&]}NNΕAI r=O \xL=j^/*kܧ]QRThrl괈YrZiiY;EOg,G==ϟk嗂 ~buy1 ~e_㕤: ֳCd x>yI9zbuMH>& h=FEUΡ9QIĩ-@10vW ixf,G=fhS=<G�YsP�=Oݡ~y.fy?>3@=Sϳ}\G=zfs@gzgg�L=S�L=S3ֳuc`?bC^_;0?19 {^��zg��@=�gz�z��zg��g�� P��zg��� ��L=3��3 P��P3@=���kQ�n ��f+W���kz���g���z���g���z���g���3 ���P���lsOOxEmm- ��y[υEBş=~z��[n*m, Ytzv8z���KJJܹ#X(dɢֳbZz��粲jQŢE!N~^xj5 23���g=WTTԈǢE!N$9Pϒ$G.fLǏ���gD WUU׋*m, Yte̢v<y���jkkEF*m,[Vh(]QQQVVVRRR\\\XXx���x]+ZW^QE U,X|ӳhzo}v\zK, Ν;nk,���^oE+Wԯh`Q¢E6,߶!zv"m6l6 <yc|CCXуj��׋\ѺxE ,JXbƢ6yppPyC~ZThtbɎV+\���x+Wt_E,O<˷mrg jm2Dwz���"*W(^ѽ~E=,:w<O9-$n-X,���H(^ѽ~ES t~ZZbN1���+G(a9ǤzrF.i���,f9LgyLC.i���`cj�CSK����IENDB`������������������������������������������quodlibet-3.0.2/docs/images/tagrename.png�����������������������������������������������������������0000644�0001750�0001750�00000175121�12161032160�020577� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��5��,���m���sRGB���� pHYs�� �� ����tIME  H��IDATxyT{{9]ܵvwo{g}Z2W 1 #"b;3 2C( 2}"eLRI@[zzR|TU7 �������0/ d^K�������AK-bh -$}}}Zzzz������:A*AQ1'0fB;IWWWggg{{{[[[+�������X1&SЮo)ƊO&6;t_~ի�������`  G NA RL*? =mBϙ[ZZHr$gϞ>yǏ�������b A 6A b\ =b(o9!!~C'sÇݻWSSSUUUYYY�������k @ x ,_ AVf孟Fb9Dw<xC @ ۷ ~A,7ovuurRWW~ڴ@@ ] fA,ݻ2kЊB8s[?'O_~M:9/@ @|j!$  ~Q^^^SSC\bA)~Ltvv|O2iN~9 ":@ ⃆99q mЊrb;}aP4~B_EyBO<e] $|O"UIc>1x@ Ad盿@V#+M~m())}61 } }?wuuu}yՓ'Ow>RɆ~ɃCk7SG @ 3(2xdn1h ے9;P555;}!&B|kO苻>|HPh26o, \_8}?im-ۚbǼiS.~"K,Yaf\k+Ý4VӧqLf>ԩvlf9pǮ1ysO{-q9pfu1a݂y ~|@ &lО@ :A{y0-~^K %AIQQ۷w B_OO:::^~ٳw~BNl)*҅ _>5&A9=ۣ^DQZ9\Z^'bf[2h k̲{MqdurU?{eb(9ӧ ˫cedhYUVsWw n\:nX4o<M}d={-qwY~3)(Ǯ zRu&v錙";5r�@Lk v+o'+M%.QSYi2ȿܖ^xrݼyx D[PIOOO[[[CCCmmmMMͰ߾/v3*rk6A $YΚ%.v6lum;;:۲ ;e {{w6Nsݵzl i篿n 1󧟘av6`~v3l4~@e {M.B i=Ml δn6F wͤ@=4oQ,&wvt T1RJM9^GYd| ;Sll9 wSTt fE[oܺ@(<'̗iŦ:],w,fN3xroޮΛ$ş3svN6yG!y5wӞ@61ּX-=mb~[T*>!>2'd)}IUU'_N!~B^td&b\=?6}t=?=`{ޗ+Nl=w;xs_-kl!7?H<nݬ6S:j#ފY3{YJk7o||#1󜹊 m݃} +⢉n7_YiCIYşĖFp̛/Y]|MښfL_yzYy6lfzujwn,ᮕ%/Ujgp_..s+jҍ^4a-omngӴk]qf[*[/H3_6l{Ԩp`Ji|b<}JpOdzU'y pqA &xH\YT_E/4-ؘ]'׮]+))!A߂BL~0q~ǏWTT~[ǯRwl@ &B՟Rc@hs8qLϯyݻO]yf.f'\]ٶsK4/t1N+KlV:ߢ׃q7͞~<TߓCtDr<,}|qf9%\;rSaJdePx,g7>oԟ5tih k"i;nf͎'e)Y}B8xx\V^V&΄hMGdmmf7=fκ7TL<9m:.1s>Sԁܴk8[2Yt̶̝SșrG60F "X,[ãzCla\܋lO;qg:yfifʏ}[ds @L`<UO0ޖQVe}9aWsBիWw BLOwxѣGoߦ$g1V,JmVb"Ĝwׇ,');4۩?ϙ1 ͤǝn38 N\`gfUhk3ކyӦ͟6uŽf%_ 8#V2{;%ˮha]i!f3jy<#nݯ/NiZ?Y@m-j\\pL"l0cݮ6mn(~4cFtG^V&>\{a:y99۞$?n;u|W5蝾d]f+Ӂiylgacsg;;\f7͚;̘e?iubf nfϘHfOj\L# VMn˨ mɗB>Џ2'>dOh,~T @Lt0wr\0aK_;Ԍ6ghlfHZ`;^2wβ]0}'3la9 &Ϛ벋NJsb@Sm*KO̝W'fakțolډgbB/k5zYpgzLNfo'ΜwO33<f-4|]8y.5%W>MV9=KdsߚAvF tDGBda㑾m&)''s+.n9] 1U"d.r?@{vx[Z*k&ٖY.jZ?IOODlt?O^kVb",ѿ?~l;ޢ\u2^Pͬl7n{̡;xe_x lm3/m'#ϵ9g7o9.;qg"t"[emMf%an|D\f۲6FMFN3 B `9[ٌ"q]̘>af\Gg} Ɉס+m3ݽٿֵ<9wvl{y3g6ΊUnۺЕL!g&)liSfWx)X @Lpy1;Y ۶lX-JF'ܺukO8ڵ,zĚDwĉ,yOfG?ZnAfeV?!gMn5zŤAvӖ\0Pm�fg+O ])de7y2<Q_7a["maL57!<>Z{°B9[ٌ&q:s1xԾ~Of ]fol@d7ˊf%^.KQXdgKb+Q:[RU?~x]>^h;b@@{bO Þ}ևؖ^x3O w?bÿ뿪7zCNwdּNmvxO}?aҧ8g:z[_>J[?v&pQ 9V?no'ز&G3ůZ{:,8%vde_hi[^ppf}.D5i|YRO$3 hP/פ?^ݡy`@ihֻf:?q?me+[~D= Y*[Rкše1 Df;#iI͙4YQݦ{7s9z11] do. dݖٜ~m`[?Ο:eblOIh AYsk:;9ؒte̜oi8w6xy$͆vӦϝ9n& F-;f G,Vvr 2g/OW#["A4wtOΟC_4(kkѠ^%Ig3ϚN̼_ÿ@.3Vz\v˦o6nb!MeaNr7v:]0۩Sgs> b\(o=.X`1deͯ+j>'PWW)Y2@ ]{3@|"SNfY R'4l1u˚5Aħ2[bh~0Jl}'@  w@AQOd5!@ 1J?Yx@ bA\c4~y?�������݃�������'��������?������O��������~���������������������?������� �������~��������������d~r�I 8` t��7�'X |g;0U��347�&"774x?'V ��i?!cqVWfJ�'�O t~2)��~ O'�� ��~?O'���?�~? ��?�O' ��>!?wRp_TW �O>)?aᓾQr('?~?�?qVܤ]s=u4U+QkdOC^%c'G<.`0u\+f7Ѧ Vlot1q-{Í𘼸|2dM;eLQ(d-ƸL;>Y?}?@="=<mbL/=o~f1_ �` }Rn)~_Q[;�0É[,+? :qINA$6!ěϟ||@Z;2U-S/;?/?#/ NmtxAslדn& ~Pnb/&/~j]?buØn.n)|_~ ~˼XFOtS+?�|~1篳|pÏcy�^YYI^5Y2V~rx`x]P@y. Kf<RDq9"O//u*~⥇zDB/Dۼ[KZTuV_w EQ2Ϧwhd>lxhH3l_%<"*wodVZv5*Gm{ҖrpT(yOo>WdH񢅭R;E*s]\QX2B?6u#6#뵫]:{a.:_`;O꺷7v>\y]i1Κnb}̈́d۫u'twUb!~aUMtg"Y\(P yG^ILjJ]BZ;YgS~@OJ ]]ioyppS\9Xa?3jPGk>8�>?WS#Rw&?i`Ҥ;�0֒G1!c\dFSGg[k%_e&񛗯ޯӌWުeqך;;[WF+t^uI<f׌H;a\xwJc{g닻[|% w0)7T<}ZpR])|܈^^WsxڑJ?q]_Ug뤭~nA/~_ٞWo=~߹'9m"OkOWD_}/'{lO7-u翟(y>{o}3@lmcOkJkw('ϊWʩ-M4abg#z|R[$=7P0b]K{g˿(hGo�'sDG[7Z wWqҟ1eʔ[- �$&&O^c'<DgvؑRXqvؘ>Q˵y%px]^t^-/[mƍVJ֪hPXEU,1û(j2W 62ĺfyQ2wwwOy,<v큙JȲgOšV܍9Ϟ={3; z#6񍰻sz͵jZufx#YoeYqlʴ_g|'MVtSr&֝;/#9[^'L`G-./kIJCWEqD5~buV^{Z}"N^pE;: hn�'VN7?;1_a�+ ֤$O.~v/YGO*ӎxx({]nXHEVĤkhUdܶSw&q*dud(ipӢp(ܳ&y){r2IK<aH?iztzҤɉOMI[C6A z?0;%P';`x;Jk.3~q[ҰNkbg#>l`I"p^zH$;-uCC7�3󓞞q\yqcyR rv�fLjKݙ_LIkc GeW=SU5zQ7T7.WgU1]oM$͟?2R?1΋R;pDv;cmOZ.Lmu%|iXyvxMˋԢ*K)f+55}+=|7ut j{,gt=EIXΓ>ڍ%IL=?8,�>;?l^X)|ͷ?Yztf6ݡ//5'%SZ'-/rr(𐺳=Mh.ɸEM>Wy7ѥL_o ɘkhnf{[$Vh4מӤ/hP؎lw(MlF'Vt~ʷN2n۩im}ԹC)rΧ5eO?lo8' #񓋋BNvꆃAn#GTU}KWg[B fΤ哢uC2��g'?@?ia!KW._y"yI?y^r"C*H]=w+WvaۯjB"U $_HD{\5Z']-u-"GԎ3Wc'f*eSF'>jooJ7Mj~]MG#=|wBOG2~,"Oeg<R?ٔ- C|p EJ)ܲyBk>?�� �\_-귺{w?y?���0eE:zZwa{OF/~'�� �`<ӼݾrL&d^OF/~'�� �`d|wt! ~?�O'�O' ��'�� ~?��'Ae�O ~)pO���y7'l~&���� �����~?A '�����?����~@O�����'~���� �����+?.*҈؛*5<oϡ }<P>wKYE淊 V&3-R(RSH`mtV3 G7$r ߈ud^/kTJA����ORRk ʪ 3{QQ#N8'ܽ֜7^>~=F*)*H(~8?ѯ~����0DF'oop+~y\*)"&2%JP(VuK9+sy"{oJ!#tu#HIԥca .Op^P$XTR_{q)U"�/=O * liVo y* '�����T]vqqI,,Ӎn$'iŠ,'%9j?QG cRӢ<D>A̟H+3 G(->bȽUA\{Ak*U/Zh>ʪeG+ꊜeRJ7[nV,."{P]ze!'����|~RIn5e9ɼ1LM^ߕ\`T\?Teɑ<Hd᫪E9.~.Ym$zfƼqyRS`*PۧDdyq p ����'3Rr>Y˗Ҝ&O-v^v**_O3xB"j~R'&0ADY? 4ʒZ̈%hAO�����>3?Vyt}O y\a|rI̟X?OprzRo-ʒpy*]S]ZfIϟa~����]bED~aYuѵ >b]weU'0L5V~R˓ї!U' y Waqꪂhy޼쑋Fo"Y'<0pLZY*L*K4pIm;wgTIyU-^]zzM?9���/<y6F?644 o~rG]gmT ġkIA"=L~?nZ!Zt0ɍ뗢BDr]`XWJ$yijɍ%n*xpy|w5[澽W-V[ Yj/Ie~g_Ŗ]wd]O~���+!?@g)*)x?���>A?!$2R?mL E  ����?O ���~?A ����~?  ��� ~@ '����~?A 'c'C}J!^HS[wIRlt<,ӯwʩ O-o3e`�~.2dos-`ecoSXdL#*gZa~1ϟ''hILLWS^Q\X? O^+9}Ong;,o2e`�sh~3Ɇ wźO&NSlyO?>r-Y|ƶ~#Oڶ&''9w[{j+svhBKsȼɝ6 (~R3 41yZ})EId]ba#V\\^Cފ J )IܘP_!OM- H$zN<[wdT,m{78<hx}s2P@y- OS09rXb_9E %ʝgLVǚ2,zםhuީX?('=%\.R.Yg w3ÿ^UZbo@ky3Ŷlm7\X8뗐�_*1 c7G #󓑴G.>¸ HfK/[MIm~5H~ڠvᖂ!AoVe;8TʚXl[cY'/__BޒOhÄgD,S Ud_~ōi)ɩE7^jNnJF9Tc:)9E;RFˍ %^OOLJo־N˾?A DZȩnp'?k`6OhO9sNlʣ"uZl~c`_ 72+rr:C]LjHMcp4.gpHĤԤ>oќ)CFW k͸�{ʔ[/6t!ӆǷ7;Mrb#2lU0Iw{z`Z̈b%44A[X?M2ފI mO/j0'h\f+|A:<~|8[6m+,q I'[UYΆ]MMM111[% ?<=8F$5VGGkJkzͬdWtRrӮxEII[/=f01!$9I{ʫ)yIo[.-�=-Oo{' `I7u'~{I;18g0IћT6ѯ_䅉ܶ0y-=9<åhA ~eAOn,}ge`;:0(@o5R =/WZ B c/u*v[̈b%FW4Y5?MpgEaƮ a2$lî;oư>r-y}Ƥ~GL֑HBݜ(^p|eb lUJY'iێ\+1%-=--5919ZœVB>"͍Zڈ]<MHLhIuVZNeJb£OlX|aRjaSMNħ=IJm7z;WrťghaTE{08g0I\L_jlzuOgGେD"y;@!`V|Ϥ<:Px bϷGQ3YV,󩠰 %o+-p?nr[&.?gd˛X2[d۽zWl3~2B)g-˔Jư>r-Y|ƶ~GL֑HBKB߸_dhE?&[l\) )xۑ͍L|8?ɮn'С. 7ڋ^(#q )))mm+JRz:^>ONWjkĕ%W3on}Q*%^osERr.I~@ >3?9%9Zס4jy;K$ EsAes5F?\[ѩ9˗3gc?,ą*62X*u!ĜusEE@'Wo~+ZTYW]" WL dEo7x\lŶXe3)ksc5K)iV©P?r3f][}2[\,m-P�lud;m<?Zl}&}ZdMOoXɈvڦcuM >5ZM w~chhMsդ=)y[w~bfƺ4ܴ]dԤ ?A  <}zOԒY݃COUJ߆ /Ek8+YYk*)kNCe!{+QPN rjK2c=k{E ~e-)-| ]GB܆j/*yЃM&pb/7j::Ԩj w}Ze]96[ m3S+b6t&mMk0߹4>Kvl[g|ӘG.>¸ ^GGf[Rck#O0ViVe98u3dXӶ&-Oz ڥ'UfjG Mۛ_>YqՌ7ڹO6li~x5)ojN8;ꢽ2!/,Rkw[!qL@Z=!W壑2Jer5[3rK7f.R*XQ`_;E wү Vy|vT tgZQ?#N/x)ICibU7a!K1{.0ߟxY[J|Cc^ WT~vB&H# 8ض )Ĉ律z*[խ&='pe [Ez^Ey-Yr핼{B%b1242󞉻uko^i,rIÞMI_&`Ee} Zd2[# ,cgNhYbtUI[}2_s,m- `H`u𸶁!6?y`kUA,L~b4W24JN˸Vr~gW'WU hn\ik53HONɸMvI]$~|z_cM^AYuaz/7*^\]fII 'ſhUrf+ڼXAnAUY*3 >TKQ>e^kӯ'OOC6W6Y<OX|+eZC sa||~?wpOoä,@ozsb̒¾!ɚ$Сq'j/>7:1~{35w6ʧxƍ`. * K*\74JeuKbPDZn/k<"P(yݮPy/\qѤVrY^Sru`WJ(Wm,*դ_p8¬s#y=_4 _HFI5~rPdؓL [Âd"28X7cI-eX-çs>gh($Oq'E]\\ tD6Iqrm)* beFVUT(MsJ]!צvSX+'J5'>/fe[|~{U%;Oi)s JG2$\O2ӚUYIO>wKp6xQ^wk.I@[dL� �̟~A2ܒ/krۓy%(PF0.C)mٗ~%ʋ[�C8LLj <<NK@߼d"h5=ת;'nFh)7%i'X2D\w[.JGr >}?`t̽Qv@[0Sf"Οo/65Rr>._n4x$g0T 4V*9Doj@O\tU'd <3څpwgh7+J_Up8H 56?Ɋ۶M{X~E���ODs%?IӿD}fbQ>.](KT\?IG\̧QW HJMOw˱O y\a|r1+<h?O0����ɨ%VDU]#~~ u"RMp]|zKm{(F~`ܼL]?V ңOY._ɨX:J>LoG. :njU\@GE[Hl,+D<I� .ύ-o3Ie1.OF_U/~Brٓ^Duԋ ?���F'cHb|ɞR/ wo鐫bڐ�HnnJ,2'7*_  "uez?OJ(D"/Гc}\2WH?!p,ʟ/H-! _F ]>=t+qQ8K'1}M<AB=V1 .O���ē'OԆ۟w >@v9 �����d\EѕB~���� wJ$J����O'~���� �����~?A ����O'���� @~g��� ?3 ���LX'SY��� �����~?A '����OO2| �� ��?��ɘuPHFT"{Ix@$],2zɈ[;E w/s\gHֵ |*3-R(RSH`mFv1ptE"12 '�'��0$u/&0sO/ϻx 'Db{g'ܽ֜hW~?��?�q'j/>7:1~{35wVL/92CkRO1'%!|rݤME _( >zvI?̻nR,(UvRk&\Hy۱~R]+.YG]:P!)mu+% 6GZYPS* i&KńAE1ӷD28X ~Cd|A'?N:5|6Iv4q��~R]t%L7M$oto ɤR#_VO2 @YIO>wKr>'R 7ynSJi 7P+rIED&9|KOFO%*7'[3"U**:e}c/rDuGUrp5]y|k9uUaN|'EyY\D$IBW?qVܤ,=u4U+L(?n[?|�`BIe1"$%߬ה吷'tS빹WNE1F'\% ))y'*ɜ9�z(A*:l'uun$G#s/!Fg]wԅ/%KtLXSYUd'%|WF'&2/N2ad[͟tԬ[(aʷ~WN_}I]o&oF*Ojּxc?aK<{}})[-/r l&1yxɝS_}3<�'V͟0q3-˓,,9⢅˗Ҝ&O-v^**_4 "wOॹ/<3/ |{c?!J=]9D V T.)$H55Sq.+N'~dc狀IĜ^zYKgW!?J(ƍpVW|Ӓwdh5iҗJIy? -4/jo$NST;[{Cɼ֮괘I_Pх#��~ ʓ]fhW<VwU; +<IĎt*Ɂw)R,ϟDY'D'\IkTLo)+#O,E?akLz 'OՔjhc󓖺4Iw&}ٍ=7~ 298f}߾^rE}-}_LJyjO7X-sڌE(/>Y_N:G��Ċ²k|KbΫ,).LP<Ǹ<}QU~gODIq; 7yQ&? ww[*HVP>(py?!nG+)RiKx"~,XeW2ҥ:Avo۹;Ì7gO{ͮmԋkBܟ=A_bO?Ocʔ)ZpI ?~B^<LY<?%;i0 B'H6;lw<'KTgǏ? \O6ЯgʦLImW_~҄#��~O x|8tOԥkCB G,SnZ!Zt0 '9V(C>_  "uef҃Oc}\)Ho&뚒%n*xt2UB<I^'uw겟Tw]ly~*]!%x~2g'&}+|A Ƶtwpf}e_ע Ruw6s7QbO okO&ѩX'<�'tC;țpOzz6| kl{8yҤ<F;k?{<wo0˿֕8~~#��~@ '=1囯9qO4o~]>o*}dv~bx|rڴ|H/f$~#��~@ �S?�� @O����~@O02| �� ��?�� O�����?A ����O'~����  ���� O����01  ����'~?����@O�����?~rG]72T&7Uw*X)TG0;(taަ)\\*퍔<g͇ ?"-\RVm~>E f޶<"(5~����'})5yeՅ(ߨxlRDO*pJU'B"X)F'o(dʸU)$lOQ*幪57}dO{9?V�����~ڋύṆLݫu*r++N"[V;R?!OIuI _SptW%QRAL{?T(S2ELI=2IHjJn[J EBq𪍌Ï\D^H+|rЄ%s.,Cz?Ɉ,ܑJ*8MZl&I6�IV|Z'lۚ,jrR]<_A2>'E^nM[Âd"P(Rg`����O>-?.LFމe!l"y}{G]%K)ƍ~RW ՕU2yqBi8y[SՌ5 ie)'lI}&U&tfb/rDuGUrً=Uejc mHݦ*Z&rBM^FYuʞ%\3bdp pQlEN2ȤlRT'AgZ4$#xq'C];)rlY5˂d.('%/p8'^uj5t<XKR忸S[w0oe};Js2hSZl@nR#m0bBng')kz=a`sj1wCS˺J)1*(9^]p?LOs )eȚ0O*}[2UzMYy{2O3cgQbt~RxdPHZ.9v}<:q5OwjruR-O9_Zwԅ/I*GpKG+.暼D34<5t;g;_@_{R:(>OxBL*x<LR鋬tŮ~2St"'U6Y,L?8$}~BYrz씬:er6?3{?{pؖ Hjpg#JO>4]/Nd7꤬!3}:�Lz8˾a&~[t_uo6Ւ}lWh #8#L3„?;-wIrVeN^jF+<ҵy)+=\Ɋ۶M{X>| Zx)qSKEn4gFpxd5&(*2ߐY'uxie~-O[/_/L.|bIVHlU6Y KyB%4`ɠR^+1QoNJ?ֱžrJ<;lZ})EId] <H.%*ͣB(.Rx*Qle˔"RՠHus/@oݑkRX9PR&| ly}s2P@y- OS0>TJA=%\.Q.Yg7`5;B1l̊XrYHrzuC>΍ ;d٢D2߸{[' Eug>,~w*O.(J&%qغbj&Wx�9^zܦZT^'VNֳ0ۣ_2rck|hr.E, ]ҫ_H-Ia+B)!=7~^GwPDƍ&Ǘ^ڷwt kɢ8#L3D{:77ӆ?!$b&(ȋ諅#r5O>lIE%SY: y\a|r6`ȋݟU݃Zr$S;;q˕C]do̟]b8.A{M[I\KˌL$j~–=R\ 'ogFGmyg>դ>o !7VxR3jc$ wc"k-sSnch+W[H bE;Zz:RxF[SUr)Tvp4.gpHhFR ր{ʔ[/6t!gʆǷMS2^3}tVޏ27C7ouIi]}-GVˬz:Xzk' &%'h69erĻbjl+v-=`G5yRYۚEzkNkm2X10Ţw|lI44=Ciۭ̒c9D~PoӃ2K~2t;!'m͟@aM70]T39#weE6wՔБt墜n-Q^2Q݌aPITPJ_Z+<f*l=d#+L[H6+D(* S%SW[DG\q抭VIqiڇ2nLd\t8탛wo۹;Ìgٓ^Ds[$"~זG>hOtߩ 78F<U[1> w߱lӒኚu_=l5] geEok#|p)[s3g|wS`* M^ld2ޖk pۖK3}tJ%`ڠ1IћT6ѯ_䅉ܶ0y-=l=LFZ6?!#S}N|j,ƶ~j9a|yQd7,/L:dMRBC>d<N^[-i&_kЯc3[l-ĮrU牔9L_dٚn`fz,0dPCK?܃q2l g7{- ]PCdԔdĆ/qWOƣ|ٕr:r&O-'G^B5bW[ YjwmVԲXWJ$yh|첟Tw]lYhߵy~WHv ߅4ވkltߖ=:Pxz{{<ߟo[y6ͧBNNWIzFt6b6iJjH$OzlLVTp^/lĒ#Rel>F:}iTE۵ A#yf5^3=bOi\u7|Ԋb>!l]N?wOVOM;>qjY![<| ";UQs-iz%cUh́mѭM̿Fz,39#UoA; '빷]m\#\mY 6TllӒR-o-e۲X9qynnT5sM*Ӝt7UX6bKSmWЏpKr|#' GC\Ο1&)k܀!{H@^,h\QGх5`r Rc[A?5ou}*ߍ6"^o.r넟4<i~Bϟt2'?i פ@aM7`38#O>t2WފRh{~TyǛ7]/,z7}}} V-'/lv'P|FtԒY݃COUJiltW2وTw_,dOrc׀jW7 MV~Z˛' {ZX+;4ڒDs۫՟]9}33g#wIdm_0 ("j%.VKxԴm6 1d##�jZ>af99y<\$eRōY'eݳ$lx6[찫y0?vPm۬'l!!-!r25LQkop򵷎?;K+Tn7`dd1uϨ̷(D"Xtw/UaGy ^ b5i܇w., ăM\A:0:A~"bvG�~ç+brZNruM,]iICeq2RQyӞ^_ݐ]u{9[eH G+,F M�7O(iN8lcByFA]jymo|"$4 .=[qsc~ Cb2˩PZ6$>/˫sst |+L iYC2T"u_m, pYHHK؄ Cm!=+;u}lL|6Y&PPgi~ozO#D6%=гLfk6b~t$Ц6cz "(DX#�? <�qϨ:<>p*!̬vBu~w>7Z{g2~' A~�t47ԿcN8$̬vBu~w>WO]9f1d~&�?~ $'�VjcfFT*ҳͫnP � H�?������$HO�������?~ '������@ ������'O A������H ?������ $H�������~$'������h~w$d2ΰT<7Q~8QǤ Kg(֞EZ=Dt1wz׬ | ~<K.;"8tlFIQ&bϹd ������''w記<kDoہ8JW}ͱ~6M#zq޻/cÚ( 7N,4EMiKF}'"j 'BM긼 ������OOq2imoX*ST[Oz.GEE eMzB"!U1jur'؟I?n~Y{5t�{}r~yNZ4E<m!TlP>V&=pCH&ex|O]j\uBnk|8/QRj+.|<`drdR"z@Ue$'&Ī.Z<M))) qI{ou|<X*RAI1R~*ПnAIAi6 'O�������?}7P|w;FwXB|bd'4,voo;{GX|05r"dػn^?^/' ؞zj-j/Ovs2nZK(rq|4*{zKϔ&XX~2hT'×S(p(?F[dTLݫƎspE&ێ"]d!Z)xDv%qT\NUt^enOOkˍUj )X^T}$-!Fa4?Zt#?<<Z((ϚC]J驋OV؟D-Gԑ%ޟ.ii՗ ȫbuk JYs?7ߝqF2pK�_/ska4ܵ2DqWpJLZ>]/>^*Ƽ "X#Tdzǰ':%'쯻tKgRv+xkzT]L$W_=E"`z�c7vI<$A\ǃC,?O%^x q ~;#O}e oqzZG+.BTHHk]s; i!&9/x7Oxk*8Oj tB'{NxҚSg=il/#fi}3\]8Ws>5Uro7L@,$l)n:pѶU'$+=$? ?7DιATdq؋I^XW.˹<q!Sk#6aZ,xv껔&.4}H59hmFQ);Vz} gQnc@1Uq$XZ%$9rODXmr/=W߶6gD'^[Uy9ERkPƒqSr eR"#aJ6àbS%?ڡw'kz;'d%jJנ{"Q q |[Ё!oT1n='QyQ4秉 o,b\E)ƿ=HI%&N՚JxSa_㮻Vޜ?(ryp-i˥ur,,{1TCQ+\Y.C׿UIƗ"vP{%;;Ә8`q"GM:#VN;/(IRm1Ko,$SOT\Jnw\#!ĚjBY$ d\$dn7lvo/p*MYt]B:j5+6z5D}J;[2MIqm+Bz)z1;|0#`iKh ߹8]Xoʭ aWxkw~ߐ'Peaו ܨfr@ }}8 4oΖOd_ͥqvVFLJ46u͊'%mG ѱ{+X"THѩw:h}\*q~R!?;?'ߗ|]~Lexiu3t:y5ho/[P>_EJ_ݒ۵zL26Rigږ]n«:g1ߊ?|L/NL,3Z+x'ϦFTݙ_q]KǓb-<9İAHd[cŸ1dsԼ'{чY8dȵO3/GQ̯!ktB'oWaR ݂Mї˞.9 *UVRu۸ힲIe Y"1JcNǚYCBF D@ڹ7C&tn t0?y1u|jG+Dҵ҉b\i֤<VGiʤSW٣OƯw_nW Ce]v+sU'[|rKf/łG%'~\c{P/_~}l{޸hmgv<ٟv~lDJzybHù{+ȍ&֎Ozi@~H+O,y߾#UEߓTRXQ9z]dI1%0ID'HԧފtU̻P*"F Hp�5hCY2N q~J'˫NRڼm`'+2ݿ}9k蔍8ˢu%-B ?/T:FG^/\L׹onEF&BbxLҷݺ7"#>+:%/<!R\WnsoZIm߮F'|)e*8.6Cn g}C«\z$"H{j&Uem12yYzŠ]OnȍF*?z8ݿt." Mw)XߢfH&e㨌Js٨6fĺҊ悅\F{>m\>H0oƿ3CBG3 M0R|O-" axON8&妼?yjN+I<*JBGGGNuYWH0KΨm`jH3zb $NTtvQ%7/(OV䦫(!/8T\zEaC7~LF&s7ԗaT)#9&x_ɨ )a8j?טr$fhqFBpE|}P<}1�?̟\ȵE{[XẠѲozyƎ&LFE'eq#(v ¬T2K:k,k(婯vOI$4MKS7m ܄џWrM{4X#tGRkQFb\VMo\/Z`)rY:zeW?8l/« Ly0RDwz�B_&܄nSJh'nn7<-d%j}Ej>)ߎ�~} W@d8z\3ڹ-" axxH?L i?>ܷsfZw&v2sy#|DJoƭ}K}W8\ zh ɘxW} &TK~%~ u>7Z<a3lvc%:yFˤ*̟`8G׽YCdo}Β\Ο"U8@,[2<7^ a2 §?}?v҃ &tnT ;<:Q)l;=.U:q- ܎i>!`vH~ΟpS3O3R; E3' awx'@ߥZuZu?)bӋיs8<wݧ5kq%ȳZCeͽ1")ž׫^gg)ttv+1ouMU<rH=J㩦ewIe(SJ0<]Jo|-⍜ v޹H|1T2ƬNjgaɏ�fk"Q~;df \AVϯ{ U,1o u~> L0r25LQK y=]r! 7k&C'3s}FeMF%S`^c9a6"'Hqj|\xYz-9v1`"Db#�H?4T('-޾ص:[KcG,*JqU\ҁʺeq2?^a1%WhO]eG[DZ.iZo*hύ'kbeD4Xw҄+3GV\ J`t]Kݾ<%]=JSӆgJds,E6,]_^;T֧[];3E}֍|vQ[K^VA:S/U8@,Sy_N#F  DCzVvMЫ=r! 7wyGn>Y r7=гLf5W~3b+6HJMm,Ǖ!cz Մ޴*bvG�~ $5n,*v!UBο4NQN&~Bk/LgH ?1𺳔=N47ԿcJ8$̬vBu~w>WO]9f1d~&� $Hib?l�v-fk1JB-=ۼG�~$'O�������? ������O@ ������' A~������ H ?������$HO�������?~ $'�������? ������';<.0) 3,lv'F#H*НH-{%&RJMAi͸8.Uɨ#w{+}2eX\ X[{'[#ɟ؇ì~M*ftrHk۾#gS4J4^HO�������??{@GY{&zQFQ˥;75< ޲8vNHϭzxq$:]JQI4OTo1՟hء:9rKbm\")Sװu ������'['8趕=}tX*SOxْh"d˶^bZI*e_1"naI\fx:+uORљn=`ڮ㑶<DBDbk^>p<'-"HBPGb$A2&f𸽖VfW񓰪?t0> 6pmǀMDΦy eRS\q%*#91!Vu: ^N)bC ?٠$q i6O�������?*?軁۽C6:;tKUV}89F`޿~!˛E '52{C["dػPn^?#OO mZK 8LS'nvG>XȐ=8~fQϋU&$Ҳ;EDLKɆ/ʤeMݜZE!{չmn VP%qT\NU>p*Ǘ ~^[n*TS8N,\nDqbJ&:kJD%-m .\|u9\K[3 PL=׏#SKi9R UJY/p;/mhfه-vl:&JS]+K$zȤc!mDy!Qzc^ȇnZ,x~*~2}Q]6nNtz:0w,>XY&JL''Oz3(OrHvIqk]D68dؚD?ǻbK~ٰAej#? z3ԕBbq9he oqjɺk'[k<Iv2?1 S_?OHV99^x3;p|y9&z=ޯMxȿ"O^kj6U8f?b_r~D8p'"99H,{>Ыۿku9<"r.w\ȔyNfłG aW̟LMF(j<l$}CtO.;q, CmXW5DžOFڊ$XZ%$Yp=$S~ɸ7.N ʻ!l-OOԪ+֢ f5N-%>S!~›?#@*v0?YCؓŗ~]+mem_H1E1>PsȜeLk CtJ2Nť*ytE7<508&cZmǍHI%&]7EW[fZysHõ\l~eyG^H`hh߼Rq7R\Y.Cd}z _(&L/E ɡFKvv1Iq>j5.+]vtFɭv~m;_QRW>%ncBfNG*C259ՄHJ23t#dn7lvo/p*MYt]B:j5+6z58:!#v^dRWff$,Uݔ6ȅ܊*jvGm2~ãi$OZIe]WJRɘ;'O%GIr;6OXu4l񓱇gRz&8tje2Dk"&\I]~o'Br>mĤDcSSv}V??9OBVΟ'_ ^Z]? |^?n0 KS" AO6wM{}"2[5~%]elfITi QXs;><+@xX*L۲\xU@Z.hJ_ݒ۵zL+߳)UwW\nRX˽+/c#Wf'&BW )tRWQ̼�(U+Nb߅ljvX|vy9_gPƝnN*cجlLiHe'BV/qsoG܄nQT9'3ΕO7j|%HB:q9^R:͚g"/8R2ǯkUܮʺ@ܟb{VF踮U)d=łG%'~\c{P/(q<T<]>Hw/O"'e'CwُFO%oz?[9~r! qr؍/z|f2*-Xsr{Mۥ#dkN]gv"XOWl'Rڼi{ z(~\"7乶:N9^MHF*r~\|yl#Ngz;{)Źw={7з #"FGׂ/\a^)|1 $ 7NeC6oi&2W Ɂ.֮Dl IoyUK{㉀Vb)cZͤ-F&71 O@Kb tb*A]-jdRz?"IQm(1u)# )M}l` nP?(ʏe|t'̀WTK<O'M rS?r؇.SSLF 9;"ηT Q?O򓱮+:uNoHI> 5VGS$IYQ+rUWb5t_\Mǝ¬>?ӳt_ 5Lg'BչT*K(q2v ~NIeꀋp72:e_5hbZ-#tG:02-,.oGF}$}J"~iWY{CaV\F%l~WHrr!Fb\ɐTMoN/6V@qYze6D p٘هlHeYk�Bf_XxnB7 SNWq47Q0?Z-JT/Ԑ/8Ridsz_qqTGg݈^-" axxH 'ǟV:ژFL]G0Lb-gD'[2jnoE"7N-`B{#<j)Jʊ_껚(@HH2)1 '|]fIɐ:KJLr;j\Vp!1 C.cy)Ox>3/=MЏvxt�RZOwz\"-}u^[Fݵ/x?͟C?q<J>4!hBDb#�$H?SK_.=q3VVo_imt.<b؉f3#% Mݮ U$ޅk*/k'{J(f]U{F"]m+sopLJ,j 뛿v7VT2ƬY" fk"%ǕΞ_o ~jf71a4a]獪]VY@B{C@nLNfS|2J$ExYvD0 )?A+V}H~˒O<h3'" a7x'=Mߊ HKH;O* TіEvd<RQRTK\ݐ]u{9[eGSy_N#e~b)J q ydDˈH.ԅ|B3ڮH++c٘0MMm�!|!e:w8G)֧[]",쳆%d$Gm-yZELCZ@Vp!2  DCzVvM~ 3 (}c|xoͳߠ7/**ʻd=M$0 Fx0B2~Ԕ_|ؤ#)6%yW+sD]&$@DT<H �;s!o /j'T(}'sx?`&L�~ $'�NGsC0Oj'T(}'3L,<{ԕcYCg2~�' A~�8l/?=fk1JB-=ۼ��? ������O A������' ?~������ $H�������~$HO�������? ������O@ ������'O A~������Ɏ'O} LJB& K#.J aFZOmQ|,P[vYs_DFH(Mp)X x~kOH5nە'������O~T~rɳ Mt񁁱~6+TdRŭ[X\n{b1IS:.!o 'jnno-�?�����=N&-meO-FOzJ~l"TɕwD d .zn]UFrbBu`r~yNZ4E<mߡYߏ*H heL<ǭ7AR}O<ۃ౮$ .#|^~›OAI1RV\l:(\F)5o\<')^_ Tـr=VKeKfrhm:aɤ'$"ZKκFyåZ){G%i6'O������~𓉾QQQ{|mtzwʦe:R](4٭=Om}Z4 <6ז NlOm=Xx &}eMnvism'-11sCucvXLOmn l=SgC͗beҲ&$ {W-׳u�B?orZ{n֗J1[lJN@W??$˩CVj{O^[n*T#I,\o~u-Wew#eQjtL/`o.tJLZ>nC|.iivɥTFyM#"z|9\u#SK?-n3B3lWw;N=!kiYmEm eѫdr[rka{u,<OOƻ/>DJC)$﷎m'׺Su$z.J"ԈDI$c}WC_oCR<QL vߖiD$H WN{[w֧F;u8'ztu}B*N1Ʌ لx 1nEspOj tB'{N:zޘ|0Ro"9=N,{>ЫۿCpBBؗ_\.|DžL)w7獶"7z_Xh{}.KrMͶ4ӦFv60JO :ױpa7x5b_? 4}p{Eƺ1<^>V%bj.Q$ɒ'1\n<G 1BG3"QǼ뎸 ##ll~POD򉔟mi-OOԪ˥ f5qV@DȀrG-q?xhd'V'~+ 5={i^uLHr (/=xS)o e*Ru Eto}լHre Ng"\+ocr<|suEJ%Ӕ6/z)zqeYH pJkWqn#qAsq3:8؞l?<*ԣlRr[leBHI%&N՚J508&cO)xu,Iy/b*it秉 )ekn7Z3IP3qYG*FM:#VN;/(IRmZoފEE*C259Մ=^H`hhW276ru,+<ϵnIF?+bͿo:ꊈl\xV*GlcOzV(Hcko?b nL|"'Oz1)DAVLH~[qA!>V(8V!1!?'_~vxiu3t:sv;+-~=bo t0?y1u|jG+Dҵ=lDs/:^/I)ʀi֤<CgSS̯ܮI{\?L:Zp׏~R-xGƯͬ,a{eP=z�#t|eb#^Cev:܎  <+ hpp86h( yRigږ]n«:LtBk &-|Yy[6sΠRe%U;)[TưY ,*Rxc#Wf'&+tU A:VvG %X{&˹wySn$Qu]1?y6l?'Uټo_H5sV/渄@h"`^/HfVq|6Oƻ/H1%HID'B"$dDDS i8wwI87dyV~",`,;1o{ y}Ck蔍_5'uyN3T[ԧ'2TGYg8>S٨6gFI ΕO r.OH;9ƞF\_i)E3CBG3 M0R|J'cXzrC62FE?@ N".ɼMI~ /$ g}C«\zL4H}IUw[Lzo!d[d'6o-@ȮK t,ߣc4 axON8&妼?AX"]kdxr"7]EL|:vޘQ$h$>^hL q* o$MBcw i~R}FkH52ϚC̟U_�!!#'" 5VG#8cc(ݿin$( Ww ~>]Ǝ~W'O*_FÖ<u<ўHhǽG͏bv~%״GjeOVH[ NI$4MbӟQ'\F&{:YV y#QORq+H" UWy#N(#g_WЧjz9xu*e+C7p!JpCȶhQ Y{CaV\F%xٕ cs?7XGi<. AO˂?6~u]m<P*=_kA,E8`T Ȧ;=.UG0LbuDue$յl(TK|p;Z-\my }Bbl2sHBި 30"qt-)51rYRbf -*"A\R抖 dWMܠcˆ#�$H?SK_.=Յ>Lqyw\[3:aLgm2(Hޅvesᙑq]g rè+JwT˻prj|oՍ}Yz-9v1ݮ U$e77jm81^EpSIʤͺgaɷ%Iq K5?60?vP۬\朗L ,:oTZ|R>FcWo  ADzK#�$H?4TxyT/ͭ6Cz/fN$0UW'ۜc)UF_fogVrByFAQѥvmyFl&I))̓2?7rubYwY؎Y })˼/agDO(iNxPZ6$>/T˫ss4O13XgX2?^a1zTaZR ԙ nBiڄ Cm!=+;u}lLrT5oEV]?>Tn7˶w,<H hZn=\BdCsw,?' A~4gE {.GsC06Oj'T(}'X~ C?~ 35hR!֖m^uJ�a!~:h8'O A~������H ?������ $HO�������~ $'�������? ������O  ������'O A������' ?������'O} LJB& K#f)QpJJk~8~ee]̝5k=6t9c'7=Fb_CmYL劉ͥJ5/TN_'4z6E(JxX~�����OQ1y֞޶q~B+g2*_y̡5QopXh<!Ӗ<R_HnM*2-n{b慎͓6@*iTTMgSѶLu\^{  �����dҢVbL= Oz$~& ޲be'ex|O]j\uBnk󄛇(kϹ4*j逌3a珶+ą/5ct[9t=*#91!Vu:0n?]/'R}?ڮGFu9)1:㯿Ȩ4"<gS1G6p! ar~yNZ4E<m! a,OgI 4{WEM#RD#fQ%i6Uy Z%@N)b2F.ПI+������Ov.?uwFwLFm69,&.׈K mMt`OX7n%شEU=[Y1P%Ǘy'&R鍞mRl@0?Qh[{~h3uylmX|05-G~ǻ(~[\zgb..5͕h݁[,^PpS[O%VmeCaz^a8=u5ĤUUӈRGT!iwCH?U{ 9Oz;!Z)xDHZ^v ?q-7V)TcK.7{ݖ/~9oewiAAʤ2Rd8?^?L-}מ7"eQjtL/`o.tJLZ~HITONuR .n3B3T1T??v;/mfs"=W-~IKܖo~* G(1iw7-<n??タ,k`}\yr^x<٩%7Q{>P棃;{(@1TvF$< ^/קw2RM_ ?ɾ>!\F&q׳|Q,\ >T"daDJ_I'EyjfotRֺ݃(lw3Yv3rg}l80OiT$4 ҅ y#T_ !~+T脊կO$+ἑ$Ww$ak)r.u|Xr]η/[nXo"9=N,{>Ыx#5_~mbţ_X~{Il:pѶU'$+=$? ?-~ѫ'/\.syB̻ "X#COM%3ǿ]d5` 0ָ<6A[\vKx.1S1ZU*F&|۠kz䚣") a%#m"rUat?fcb~[\Dzv3ɀ8L R{sQCE]A{oӘv^[U$4 "U_{lxYݎ`WZ!v?Yر?>'/AxQb2Ή寁lJ(MV5y4q<?]AQ2@57ŗ)2gSZC {ݵ<F!ˣ͇k9";n/=xS)o e|"UPAG ܳS$Ðj%Ӕ6N7Z3IGǃR=dt |??\Y.CAy/w &L/2XBTvtFɭv~m;_QRW>%J2Nť*yE("P4n e{l\E)ƿjPt~276r«:jV$l~ /kp:uaJB N Kp^ӆsq3컰"ޔ[1h_{G 7"e}ɓkH_z}:&0! 4oΖOd_ͥqvFLJ46u͊`, &r~qa7{ڷ_~'wd>="~R"<ɤgPX"Ҝ0]Dc-99SHTI Z& a!i /~yNG>ވM0>5j+2ìt?Yx(k,J;Ӷr;^U$)F^Ue<-uJ^?Rug~v-5O 5Z&X?I`~0c\Nz;WRk3H955 ^!u7z#LJy05 叄Q&u9 Uj0φ"]d�r8Gcgp$TJk3y9_(PW͒WeUib5|AJnwS:ah*ӱv|xVмE$/?q̷bD_B�B ʕE!s?M.KRBYR,W)&nW Ce]v+sU'[[rKfj<.?KwD߃x9~.M-ȧrTY{S*|3 0Bފ^3}A)7Oo'?J㳤.\ " DQIϽ" _Is tW4dO;z mws? y<r4j!l^߾?a5ilH`l"M#P`,;1ـn{{3o{.߸t|6d򪓭"DXZ~v?q.X\[El̼k6eE6`y/{ Dg^ v{)ѷP`EF&m T?g6t&:X)|]  Lw)X"GLʐZ8 ,?.O>p=W00EG ۪^E`one*zGq+ ]l'n HzIUw[Lzo!^1(.x}דrみE$?AǴٟ-}d�B _:Mܶ6݌XJ$5, n|!~ɣe| !l |9 G%'S&p)oOof%&Cqe-k!Wߥ4x7]l|+LF&s7ԗaT)#ijL&dՋ-wSdxBc$]Tɍu]ԩtzCJ/m|>;q*Fk8%WFGOBAHSYe/ܕɁ֊tE D3"'Bk920dUPR>KY%gU{XcLE(K4]ﺑP&\_%$-T|rqeAa k!gלzB'<}RF71G9%&LJ"~i7)�ӿKhG͏bv~%״GE2rLwpDZe[BTHH~KiF˦V oPͱFb<Y3X?\V*E ݆(@btwռE$g Yre0t8!ԠhMܶOVz|W$U^�~; W�?1\f=.g 70x]ޯIk:v`Iu9ĻsjWg9^H$njHe)Z "dLã:ݱOwq6<a3c%:otMzw*9E2 FfS÷J%&KG3* 3.%fVw8RH g~B"1\37^XQD2 §?-] @AK/ mUu- ܎iW5U O-?.{fa#�?/.a\~vVO?}iH;] 񩥯_ߞJ}e?埉s4HW.NjS5?{=r;?Y%=נ^qc@*/k'UwT˻&pTa�k&C'3s}lMFQ?.{x(ŰX ό, @8mEzh9E2 C{#)xq5hϯ{ U0fU鿯o"DvSIʤ޺gw.X"7*f|F?f7h C=|&I 9r25LQkop5k3v1  (}c}Wxom+grèJ! R\4_C;^AK&]L-Aot#�'$ EW*崜"܃ }?i,PQ8NF[*c0ns٨ID$ovȵٳ32=E3#%MӉo?^a1%WhO]Fܪ1u<_.+0\Л]j^Dɾ4>~O9RTygҽ~&vGN QP設%/UHxW{J!]Bs}yup>ݲC53XgX!lO@VppdSLY}9N8y28> 1Q6Y PPV^U'|V/W)4?̇؊M:RhSrqe~H~$ "!7ma<H o3Qux|n[fV;:?D;A 3?gO A�d}bgY}}r>+b;L�~$HO�O@ 35hR!֖m^uJ�O@ ������Q�!'���������'�������?�[~������ ���~������ ������������������'��� ������'��O�������?~���������~q ��������'��OkˍUj )X4#K%Tt\IHt_>#0kq!pIKGEE{]yWӆ**gqs <L-7v-WHr0#?V{.w:cVGۧK[3 PL=[Q SOlVBX~wWFf-^g՗ے[ 殍%s Ubd1z) A*Ƽ "X#�?��;脊կO$+aO\qމe‡7}ZZ0|1'xq(@]9B FZKΝF{w2P^{u.}ĊGpX~{ItVa˰aacD"{\ e*8^~{BNoA%ztn/\.syB̻ "X#�?��; ؓŗ:Oi7'*Iċ FkwdԹ`3N&);E,c^k(\a'XӜ=<]M(<QxJ(MV5y{71 \m>\˅> MQm܌=P2ųQX՟#1*%" ::F_UeRyݒiJMk_NO1R>_BΕ24IQ>=GDU69?MOW)cTX^ssZ=h4&3gFzbؤ#0bOnk2$)_߸J2Nť*y΅(Rx_�!KJ'!s2.x-N2돎T0kZH'SfEF3'7(>1;|0#`i+s\@CŠxSn xEX#;z8jQ2뛟OaeDpCEs753Ӳ4\ESr WR@@v03^O0 w={|[{\yn돶\]jFׯR!:CҬ+lMqn,λ713K٧'}yچJQD;ȼS"<-<iuZ- >N~q4Ԇ˯v݆+W޼:ְV{Wo ٫n~~Z}%&j]E'nw9?+:髿WOLJ'zOkeEWD>l'im7V&nu!~]sgL@LxVs<zٴ5)"bz̼f Tƽ4JFTiuNjҞ^=t׈TvTWi#^q|u1hS]>r5sFmnVj]uMʑ~tα,1{Tע1Žڐ' vӣK�:4baWVTx:f8#5ژ>ޙ 2DAiq|޸noLnhV>7ImU S}j4!mC{+@Geawَ*F>3W3<6z==>uaaOeVnwulMâ>OG&qi2gK#FMkLuZ]U3Wm?:,CWQGni٢6zv<p:TEiqU@iOp_kDniJ3vh8-f/a.HS+m/92y-W77YG/ǽg0g*mh8%͗麪QiGxFz ';?*[n?[u>]zS}3|]$FŢ!O,KVV6ޱHk~Ylhc &Goq=kBIiKطeu" IcYW)Lj7ڸ]i[:JD|Q }SvdIMX\O׮tHlF{uݝ9a˝hU)CNlbQijfm*�"*'/}OV/MiҜ#斅C9FrYɑ+..z%6dE1Տ,#s8ݺ4ΐW #JG='�u>8ע\grF޽Q{G FE{i5DohAo$ڈSwrvϑgFkk-ŚW߻7R]KVzfKKd%l>Q*y`Hݧɗc [K_7=~Iڱ}!\1ʽ(_mdt}E]{`t*Nj=}+4{i◓eOisdfGFs*~**ć>rG q{ΑX\OmÁ9{ҔQqGx6z O?$,㒆{e&>!v,+05[YCFwjЧSCcܬ5;m(-N7277W: w7erDΫ8Wo30#Uύ“7ZeutM'i9}c.hotMɍ/EoT^U-//7SX`PtwMz>H7RZ⟾b|\}Cbx=UuHlc<4Z?,}kƯժcF~m_O pC;E 7q˳ /-%{L6P (9n̞wW  ǧ ƔWTLAdFsYrW$DꋛZTNp #uirDKaYj~@#< =@w'֝k3"wԻۿe0]p>i?+;U;C̷,N7rިLFR̸)gojrw7 s}sWFPcܤU_dKY%3R22o;ܯz [N6+}ڽ7UX3#]MtR--fEDu SҟUyz~Lyӓ+pnUW?gRL^L#;GQdXunQjĔi3g8BDd=硿'x,&;GiB9r>|: 6Ls͠:ǪƩ=:OC.Lb&wzUpvƚZM jJnRU=Y'�{>p 9bY^M5׹<K  1<M;?�FQ4D,;9E?Xu}Q7O �geyN-%UyzSB1K7kI'|q ��'�'��|B>8O������O'�'��||��'���@>aO���||��'c� �� O�tR\\\PP@>���(~ߺkݼH}p>"}͎~V3M~5XF1kۤe3ܮ~Z%8l4`4ťeݻw% 6㣬EWI愐GlG)Jk+uu:ۖm!ewA'Eޥ uͷjuϮU{h OHknc :#< =@w'6%W߽g~|Or>=1<qE+Wc ;Saoi?х1Vwz;T.lX1v-|b-64zS:]/S[СMZzkk4Aͭdynal蚛f˫"d=8pjo1e͖fWSM-ǺttGxz ǕO !57 6jc=|kh:{ MDϱ: :sM1}jʤı/W1N[kDr|xAׇV*T/s16޷{F.;qke{#rNN2k Q111j]wIqF>nGlO2?mzu^q (rmu1{aJ\6dwe~<:\ "ۅy@>zX\ʒKͨtqX 2hFN,-aʜ]v}ʺĔ]Q֮3&'&.:W(2EJ{K+uu_kז;CqP&;Ã-|\`촄y<;JmRr0-,\)0Uq^Xu~qj^1Iϯ=FsQFe7UUc|[_?g,: w[]?Zϓu!fK,"^+oXIHz?<qC^g"z%{KþǤpL!m>jO,bo67Lܐ_Oh}{c A7R,褯q=Vc8Xs3G 6t[-fWyۧH뢴nPr[_elښ1=qcf^^rvk`ι\)ߥtތj|:><a{m,<ÎQIt+s.r4t6(\voW9}iA6(xPvKSɑkˌ)G+(P67+IKc.P:Mr{8Df,1{Tע1Žڐ' vPiGxFz nOESU_N5/:Uمт\[+ޟFzTwT n;q߳^y68*e6hum_oCbk|P~bwoRNG{# z0v'|Co^۪vI뢴 TcDžy?OE,w**(QnJD}ޫc>F704:\Ftp!G˸vVhҎ窀p_@h4Ks4Mo\+^.uLl q3XlWm}ɑ;n9OtZqsR{8{v{ s=QyfR>ц6 AZ]|9wPiGxFz ǕOv-ߨ +{ttQ?mp\z#ם5ju]&8ƍ`(tް{=kBIiK0iI>٭S9$hFb`t<޽J9>u%S&DGkg ->+J%=^؂iՍ*uS'K]_l5ľᾬ.T'5au^΃ -*ʗWUvv[u[.mo)^sXܲpt:Ǹ9+9ruťqQ~WoյbĆș:f''vO&Rk$}s16uai!u9s#JK�t?mw}qS"㗟tm;=xt(PѠبnC9_{hگ ԛ|^۲AF׳5y -S,w-ZmɛRĵɮ۷exTݡJVj8 OkZ+k;tµ'-*ʗWUvv[u/RCuqAtRiJ3&~9I]vV?QZ;Gf}tai.=BMtCGj<vt~rvnϟ4V qޓTG @='�w>qKݳm௵8<nF⬻qBx_oȚO8j\sj])ѥ꽑NhϳlwoID[˳ /-%2XN{f(鮘fd}zow+UDn; 32Fl>-}sw?j7$'S.zuHMۛO|=-$"ùQj%*;g:䈔WerD] ;ۦKpW{Qp|0hL9zEŔOh4.!wEBtZ()4~hm9%?V،,j?nr�B@>uڌ}pntnQLGv7]fWFPcܤU_dK_n%3 Lի΁Kd(",zݮk-U&LL6s֎C+dJt7.0#mV{mҊW@'*u1>:\a\zG3tMsfrd3*D--fE:fH%buV?gRL^Lͻe<evVDd$ŌK2}ܟ^?Q]^co4<JO5jmaZߎ;T?t&8]ӇLkj5A'7)UӻJUUXzgG �ey5U:OһC{vBũtC7OΏ~ A>@>};wTL/Ǣ<K#s~NO]5V]oӴ|B>@>_j<S*OoJ::f}w4 '|q ��'�'��|B>8O������O'�'��||��'���@>aO���||��'c� �� O�O���q @>~ߺkݼH}p>"}͎~y)Ẑ]/|dɁ荮/-Oh-ҏ[kZ}{eCN!Xgۢ=voc RsjD%m?>P|pjrbQv}ޜtϭԯ(i蒢X˷͖^]]*жtץ.ҲSTWoc00H<ǾtpGxz O.mJ2į.{rg J>vnS> J6hʛ[ϴ#t cC4K?^^9%-Zw\oŧlF:76fp͏UD]>8 f?vM]2tQ L/f?V]Tv3}?#_M 6n=Y'�y>]sN`68|PZ2C=(v-7KVI\mԧeq 7Z=)Ψׇȑ~[9$M=Gt/qң?OM86\wSzCEX﷖>^Qzm1$|~kRu~qj|H>&)u:)9`c D;LsaӖ}Dee~ j5M$iTXelA'V"aʜ-* Ƿ7z}1nBʟd bbbVպJŕu) FeJ1cjrbBs¼d}F=VT,e%p1{aJ\6dwe~<:\ "DA\25Axc'vJ:(ŽJZ^niJ@kipb~DWR(P:Q(FmnRߔVUuGx&z nOY/|mŏǏN;wmcKK%VP='G&"^.3mGtŊ5lkKLqNV{{Ƥ򕾉"^+oXIHz?<qC=}2-fsx jeQ? wdvOKc.P+m hZMŋ͓FO\Ұ1T&yom"[W-<SVS,DFe)OXC(G**4O~z݆+W??+:髿gJÎVFuuտL@yV-ϯo6mM13n/950(M/ҧ~q񾽱z ;0UZAvW(Pjd]{]:b~Dx@Dpֲ_ܛ kk+lG X='�u>i6OaWVq@KӝeIF4/*t?:4qx8n2qR  2Xׅ?&Ξ=&|gCga\lZ=0K M4{oiu*㊼6uv噹:*ٗsTk5MuG51=M^v~IzVK2{ߥGP{ӹHe.tX{/>J vEmpT )B)VVJҖU"b2W}z7:8G`c*J¼ֆ-;X-*(QAл'fPv~⪀R#/u[ =ʉO1 m4GfwӂK�O{8ԭGM7ۖ^qnti 9Λ%- GstoYɑ+..4_YgLc -(Pt4svX6\6Սwi;]i4hW Y/*Rѽ7]\A>kEīc6:gޠǸ1 ^wZ+UڒF,ػT6RDWA}sO '-9rOdkT+%E{RVoF< ^y\Ey48dv]Dekw;Zoe( (5ݏSҔfp/QN,=܏|"c+n/c0雋٭ K ϩt(XzgG �D>6k$Ή/ٮгIzR/v̸.,ХTZrГ7+^Zg3ƒ,_\UF7MZv*54hwuuKݿ--;;CQR}:?TX}Wj#n`>q[U6R_T޽KTVDC9c;|T[Z)rakikvijfў(_R/0-lAiW(]?kd{J)^ڣX:}@OTNJ`cMJ~@鴠#<=@'οqIý{ֲ [Z~Dv7Yb=}6$cTaјr{#Sf>YќrjcAQҝ! R'.S^hz#)g^6~}럄erDΫ #uirE= <|Q;R!wEBtZI¾qBx_Ov({%yCV|\e(,ž!1<q*ǟW=";*4眾Z|ױ]j⟾b|\[Zr<+}IEϟ3k7zZHD3,+ʗlM-YΗýJ:Jm.KpW{Q#X:w@OTN*gfdUvӂK,�=[w͈Fr7OMoǥ˼VѪ3j(-makKcc'H>ߖ9+h▜U)V'аv|j>3.is:+ʳ St^>CQT 5N=6.j07i'mhcͷG)m؊,XC”tYnk%3 ̶{{L|F%VV*OϏy-"hs&ńuq) T~Zc|t\|J۴ܢԄ)fqhuDdw~jd?x>dg(O,;|'' VcQ&>jwz7PK,�=tOq!=VS΍Ojڝ͗cQauw|OOD #�v]^M*c)rƪٿf?|۹‡'U|'>VXzwhϧDD0=|OaAoV}7OM QBG,ݼﮝK>3=|O'��|8 ��� ���O���@>!� ���  ������@>!�k��@>@>�� @>�����@>!�k��@>@>�� i|��'�'��|B>@>�����@>!� ��� |��'���@>aO���||��'c� ��` A>@>�� @>����O'���O�O���|O8�����O'� �� � ��� B>�����@>!� ��� � �� O�O���q @>�� � �� 0'��|B>@>��1���0 � ���  p\�@||��'|q ��'�'��|B>'��||��' ��O�O���|pZ!��� $��g@7'������@>!���� O*++/˛ׯgbbbbbzB/=3Μ9s7EEE�(嵴X,&Ub1v_Ita__@�1|{?L9}֭LLLLLLO$g-H D||D>!O�ٳ&&&&&SOE �xIMMɓ'>|D=zƊ>|I'G$ '01111O|"h42 '&?~|o )'BDDtرc&&&&& O'�'O&01111Ox|'q 01111O]�"H|D>O�t|?abbbb"O'�1'ӓ;=kǑ�@'|s311111=SgΜ9" nO���'�'��|B>'������@>!���� � �� O� ��O�O���|O'��||��'�]Oj}�� 'uuu[} f ��|, b6ُ/}}@'}z߰9ԗxėRUԋi+ߢ+3B��  444OlJd-xQ~ϿZ`%<m[V=fv⻼@��OD%ɺ 뺲_{豫Zq,uÂF?UO,J1tP߾ K]A4O~4iPY%9(_~/<tk%K]KI {fō<j{k_ 2俱RѼէ;mӧG*Zğ>7~[-<;j r+l51oKL++\#Ŭ^xulچJMε*�|'6͗|"fk/Xnhiz/bP%ya_FoJm\m$gˮ+ŎuoL?W*?_w^,VQiت {}Z6W8Y^G_D ~~o8Kx>_:ѧo7_nT}=yt( |?sYK+}?b-c�W>Qو/ ~ޢreI|f}+bI]Ť7ozwnU��O_gE>_ ׀޽}S ۆU'V9,#љm<y]GƼδG%߉2=.,mz>ʶRM}JKt7yP)֕?0G'lꁽյO[󩺵:OΔH >>[[_?W)T'1*Hye˹>[Tz.Wn+U � �xɿ?:Z\\|#C|~mL<9燸 `H#k #/54&[*w<* w ѿw!;N?~"[.YݝH~{X{ oˮ_[aC+k6Ng+O{>@`nID}#t{{ekѣj(QZ�@>d瓦&_M)?Oӯ ]ab$}~~bճsgMW f5WI.c\;?tfz`G~հ;$ p>umׂJƫ[zr=^t,Z'}Uh~~}]O?tAU��)Zvi\P|*_{<i0`3Mֺ=F~Tۯ+ҭAu[J_Zi-GqA.˹\+dk%KWZ;kWW6k=)'kmԡ|wM3wU,`z>3 ꛸e/UXm#QXY72}{f.˛<,r � �xIss/DK>-_P,WM Яo/1i.HtC:2G&ƻA:]XTġm q" vAeAju{62b]5y+-Cƫ )=znU ~a@@a}'#Fj?ݝN>il)88a V}3RވQXY2K {^*~GiU��O:q'&��O'�A@F>yRP@ � �x'��O'�o>�� � ���  ���O�O���|O���'�'��|B>'������@>!�Zqv�|B>xI]]V8;�@>!�xl6![f酘A&kGϜdƎb#tKoV)-tQ0e>׏k4[fcŵUZ8kj6 Gxl,:g/yLT`��4444;!!Ǐ6KUN;sjb.vg,ƳS]c ~hҏEW^~sE|E哎֪;:w|܋o>"�|B>']O,w>iCR>yبQrk=˙]ԘcNYxN.>)ƍEϞ6-%i\9&b|vJGm&ʜttS'O;)=洺S SCc&|r++rW͙lCâUcuL..Gf81;Z<V=Ř)^d}2.R|Hn]FOje1o(-2T'?yUEJR!+fΛ IL[U`nmGQa:]x7՛+'Ft!co6Gy8ڼt3lr%ɇv3ut RuqD{l^G:{,—M � '6;|h민ub1gf/p5*_Wa_ظe VQ!nMQߖ"5x-jRĸUpaICut˝Mfٻ̈M239b^FݔMLV[]9|b(Z?io5[}ōqkOTN 1:ߕ6;WmHB^WVOjո>1,~5"يuZHGKj':l7On 2JͨԤftf;WEv J9KLb[g}1U<'OXbTj\_An_|fueA)&,uT"|�@>!�|"HBn8E??ddY•O>kvԉq7Iƹ;J#9%K=VX:*ؙ |ueAI62KkK8hҨ](:&TTqeV7Nz2RZE} |9i6km6zsE6[Υ*Jk*SM5*Bom3tK]2Ҥg$K>y:VhmkQy*e\QZCSv[lik#5J=="ٔ徎*uv_�'�]Ojkky-)-x{Ғ_\qd"1;]S/Oܟ4)vj!#f˼C!K/]kL="[kquwhuEM`4W5HD 5y(wUB?g-9[S5,bZȥNM`?fr^+MJbs͖t^Qj+IKN;vQ]p֗|"[kQU&x Q^$;ҲQ�@>!�xI~C~WĴb2lei4K"7UaZ͎Rb.9{\ }3_ppz3Gfc+90(ڮŊ.VT^XД+WNB"~9)zլ؎YJڷ_b'U1x7i}iV}X*ܢX׸ccy9-'egeQAT>lJr_G:>|B>XQ|rԗ|b1]YK[l5whC/8.0|Ih䜼:1 <Ejtٿt8hH4FN96-H?Yġ߫}Lb@ Rp0.(jb 2ސTE`M`JqK؉ 9jrhqqaV*\o}DJ>&5W 2J7>W\JsDͻRnn5zkc[nu8r;^ʭ|}~:*E|B>ЕxQ=$fyZ_q1Ơ@6841uO^8mbTX0tdɟgMkb睸-ꋲg5jfeԎ$FSI΂)Θ>}K]#κ+f'9!j޺߬oֻ׍S\I  !>9<6%3#Zc>mKbb͘9;c=.ᱱ< QTGQ_,eЋc',ߔ)eQA)&,uTCUm�|1|%A�'�|"[} fӣ|@A>�O�<%G '�� '������@>!���� � �� O� ������O'���||��'||R3��O'�o>1gg��'�7f?$f~<xݿ$-8$?㯔+-4徱ye;EVg>z9JyUuSJzM��ӓO|'b6,[dm0=ucv;f6fozdɣTwz78M>�O�<mbOlޟ+G'=?A??_2dcoww׾-1ů4o}85߿k~?EɑEI#?a>`52o5 *"dRZR>Nߡ rTmAyqWţڮ|P}aCӿeIo ׯߋ/T��Ol6/D&YkmȋoW "*I0|z]*xq}^\%Yc1zPl>ٲJ!{~Tz;/ fQ[G,QK(䓁o'-ԕ,Ӿ=^g]ٿЯR;(Qm){'A^o)'Nҧ�'�|"O>k*=*=)pě~ YR>._,hK<w\<)ϯ4p m#cxgZz%=/ T|TrIEح30Wz}U\RGŏ~ض9~+*W'���Og>ypTg]gUeL'%<I ׯ ?Ry}?H'gW_2d{ v~vz~Ȇ(dO\dwFLj=`Mھ:2pD}G8��O|'bvYM=\3l$ 'iDFk z~r{_AumCc\իgnIeEfJHG=xG'*ezT[8򵹺o]Ycy8u�=}*�|Y' 5/r-VWY1~=8_34 h%ɀA65Z,axf7qY_'~_n+=~mcz/ OPP ]ϟ(ǣn)Jy'*ezR0!K*-6SϿ\v6�|';1g-c{Ƹ%fUU ~a@@a'o5зБѿUc?@]n7eڵ07 ¢R6&>P}i8K?`Ȱ CK(>]Jegl^5y7 нv@FFl.��O��  燭>Sz ��'�|*��� xV ������O'���||��'|��@>@>�� @>�� � ���  t63�� ǛO@�� 'fYl/1^>zy}I IO|+J M}ol^Y79V=6Uz Y?Wz1"h޺]&M#]qݮӮWoVV}��@>瓆_6K;}z(0YL7roݘ8f6foz[\Zʆ 7b~en޻g9/7U_=`V|lǛO:��|O:O,/Dٺ{q#;!C76[\}[br~"~㰠QñoȎ{oM#«c6TZl{+8/ԯ+EVYM;x㟞!+(哆KA*i8_ 6[}z=^#F Է+RWuo T{Yb`+dܼ:"~X ^|y脏/O�|qK>|ZgJxo׷=I Ay)&Oq9ϱ#~EVϬoE,+fMR_ҷޛ{f |/WM&[NxFw^6~JQVQ)8jV|N~Ralug }˿gRTMvY%}ĿKd6oIjWދ-g ksE�@>!�x\D%(}TzfUzR78Lv|]#,hK<w=Iܙuu7vEs W_ϯ~=q"'C2׫4Oj,SwQ<8[+dk{dLˑmLٔ]L;<m9ꄟ_*ڹ/TC_vTy�'�:XL{ʼnna |2 |z+COhm)-koDxڔ/ h땇9mZjwIej>{'קWX}턳W|w2d6lJr.b& ⽈SWG߻~� ǖO|'bvYM=\3l$ 'iDFk z~=-׷uCOdGO~=çWY/#!y?i4[|Y;seV%]ɎO\+ͦ,"_rdٷ^gO�|;擆sӗo9ub,a1q^^X34 h%ɀA65Z,ax?,owROJ?_mr ]Qz7Wy[~)0,uً'i}]_A .d?񮭩t_WJO߯l>QM~Yo[ڻ/?csA1}ӝ2d,r.;7�@>!�x\ٗ|"f\>yro?^dޔ~U/ x;pdC:2տwcIaۯ*~Wd='~[e_Ooդq50ldZtaQ)察&,bhR~b4oLު{]�@>!�K/;!�� �D@�� �򉏞|��'�]>�� � ���  ���O�O���|O���'�'��|B>'������@>!� �� � ��� ���O�O��x&� ��07?K&� ��?KO�O�� O'���O'�'��O'|��'���' @>!��MI]!#絷ߟ|O��?O̦}z,ޖ_RUW[u-&O� ��I==z8VVC &Ơ}֔?Jo^28Eyn|kK/WL @>�|'u/>fm?_pBy7{>U$^V`i4w;wb{/ߔ*Muś~5  ��@>%œ'z[VpQZJǥכg S{}_TUY9?k&5e~~}Lf  ��@>$SU5"ir^ۥye𫯿{1[')ǵ=_.)<9_w3`s&  ��@>y۽*{伒Cz "HVPW>1Eow*nm5.O�O��xImK??{d*se_jv~Yz̽v`⛃ ={mHb΋ٍZCkw"O� ��U}cwϯiuW; 68$42yCP|RvcC=}r*.,J@{ O� ��<��'3P@>!��� � ��  O�� O�O�� O'�|�#g��pG5���<y'�'��|B>'������@>!���� � �� O� ������O'���||��'|��@>@>�� @>!��� � �� nH ��е]>���� ���� ����O����O����|���|B��� ���� O����t|RVV&x"���c'<y"} "Onݺu% ���ǔO233;DD$|bĻ充/_&����xL$++"w!2H""x\YYYTTtU ���ǔO;v9;DD$ɽ{ĬUUUg'����G>9ydnnx-҇ "_T'v]jjjjhhsέ[|r����gϞ|"} "#"lҚO?UQQqI����x\xQ;Dx#IKKJ}}}uu1׮]ɓǎ<x����H"G4!2H"_!H"w!2H%DzbUVVLssΝ>}?%�����߈!rH"Sd!H"k!rH"H7wTP>innd2UUU4s[n_zUw����:B&DB 2DC>Dnj'tt E("TWWWTTO#ʺ ����!rH"Sd!H"k!ts&D)*bF$JQJyyy����t"ML!"e!tDzDx "tt!jL#>l6E1���@lj4!2H"_!]6nr;ҵF����:N "YHDd )txQ"����•IXJ&pP>H)Y����G#J-R1����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/images/plugins.png�������������������������������������������������������������0000644�0001750�0001750�00000143112�12161032160�020310� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��o�����lϣ���sBIT|d���tEXtSoftware�gnome-screenshot>��IDATxgxɚ쇝ͺgyg9@cklxA4w[Vap�F t?o:Y,#T*\e4qOD|ɿڵk !B[e????㿼g)#B!bpnB!H!CB!!BH>p|ΟgEWq߂z !)7oޔ˗/˅ FҐr)ɇ*TH*T }WxۻwhB+&ŋWSflFGH$++Knݺ%r5%~'4A^ "6ZC[N۶mi|# -[7o r:nfޓ`SBH1k)HC>N˧x#$7c.YiCox|wʊ[nU/"EEtʆ2#T\V'''ʕSW9*kqK.2d]vU]*fכ";w7Ky}oP|Fk… Us9ҵ0Tfnݺ}Tfa4]R%wz믿8*E7)S-ۈo'PmEϸ}KwN4h;qℤ-H?5I2ܸqC\"?~tbSś p5KVamS`Upjd̘1;ɹ؉7'DЬN6Qg<!4Al/L2h]cBB_~q}xw!$1Za>}$߿W]t}~l9!"}i0^f ڞ~#mڴQGq:tmrz@ҟ'NҴlOKG= }/cBB$y{ȋ}OFH>oN+W'Oe˖HP 6ڵk7oaX>| *J*^-aa6ľYf*.&&y6L៧'Al/#tX(w4  $lqKݽ{hBi:fa Q[yNðvԩɓ'reӺPaaӧO',�8- uv͎h]9뮥<NqnWXѵ!A۷@^|7B?ϟ?W]Z:[oOΝSf͚^sF2 @?ʜ>}ի=؝'y߽{݅m]gޮt|Ey&Gttvu"}@Oׯgg9BHC*UJڷoj]={&7VG E0 (2|Y<ȋ}OFHGgѝu',z !Ja4A^xNB!$p &hVy})B!$P`a;Z!`qHC_u7L!BB7B!(J!BB7B!(08!B m(!BxS/!BH>�B!$?ubB!۾W/!BH>�B!$?bB!۾oy1!BmoB!I5hЀB!$�FF![Æ }֭[r5r\|\TumpB! 趯5jW^3gΝ;I5ruB /KۅuOKKK.ʕ+eʔ)2bBr <c֭7nHFFFȿ?++N#u9$!&7nxۺuo8>}tp-qMr ,7ӧO u6o,[lG_1E8T͛7eRfM)Z+VL*T + x ux#3 }դIwLNNM6) Ŗ?~4%%ŲzرQ駟",YD=zfƌo_C=z*g…6lVZQu"3m~7X 8~W7=y)~Ǡ޸vmo$+84GҥKo^*TH}o5ryk⣣UE:uYЬY3)^aq<+WVAl؝ۉ'GʢeժU9fiڴ(Q£NN꣕sD\WXP>}ܾ}uJ\,YR;eq5۹qzw_oѢERZ5 | PbEuqO<xIII?HJT˗={޽{}s\o+]tQ,kw.pp p-VG၂TKl?;NM8+ǖKtU$}K[YrAcx۱czC cl q<4x lۉ74(<m?l#Np)SFWn]5j2sg8tjP!Rp.pk^zFĨGG+C˗>]vO ޽[ ͛ٳg؊p %'bz~;wVmĦ׵kWu~ZYގ0<7}s퇥pq 8ua>}+(>6*b… ҦM{{bEٳmǵG+|a#p 876#E-v _o$~DvI\5G9;m|l"޺u +\m#ޢE >p;nMkWoq҄1([Gc-XT.^ΧP4vV#GHsZ }>|[lw>�9~;8993^GĊ1%X˼O,Šmĵ<>~ta.:z:tPoosU"6$oҷo_V?G`}^xjW(ޠoP(aD~;/ 5oӦMx#AawpI^ur;h|x.oUJZ"xqt!L۰o2Ҍ]O̺oG+,[3au.V]xvWY�K 6LΝ;SCm? л +Wݎ@h׮]-,q>|XY!neMHD cǎ)y;BDi V>M@z7h鲅]ܩ[W Z4f ؍Sn-;K޾}X�qMY3gRȼX[+{mn-EAĜY~XPo& -px3έ Eo֪ xõ7<F�:`utz=?q0ea|4m<7_DKݐ_ iFеl2݋^k壻\+-X ݔ\WIt֬aހTq:oF>r4n[Cp@xEȑ#(FA U0 TyF9/ǏjZډ(7 SI2bK̬cb5W{}x>0{!x|%kVm*}#kn`tjٽa]C>X ݦZcqZ6պ׮]=ͮ+酧<>7 (KWCF %,*U (MAC@Kw#=7ZTZcJ8[ޔx;V"ޠ!8"$;;[=<ŋn o_իWn`2/, 蛇uMOݸv _3o_޺.igiFx<QYgytk+ .hGsDKk9|2`AOsx7:k͏u7o* ]bZ>"Rj ]Qq:ޚct5  BFc҉Hutz=?O<h f`A2>N+>oy0JU?)?{l\[jՋ3cQa2:Uߐx"8Z7}ޠ۾b%`U0ha\<6.&vy˗W1ǤIԜG<x4?I\S; dvIO{rL78E7:CfМ1Ӧ5ȬB}*c۶my0J~B4a| 4QTB]}2p8WùG0;%f{7}o X Qwtc$<>7X^4ZWq۷o?x8ǩSz9zpHOěU'01ۅx|hS6ՋV5=]tQhaЎ&RpaͶ9xVE_hËE5oʠx#CɸXV\+#^ȫŒy!Nn3\[t^BȗKyޔx;bLϟ?wk*qHCU_t?+޽{^Zډ7tRSɸPZܬ"uO/*6 K=Z(!$4nJx={_~̱>#6-Ϟ=bڐ&LP!cz|v ]oiW(J^dխ<OkoRBB61ɓ'nd>p}@FZbMo+pԅΝ;p-qM)ވ^i SJ*v?ɧٷɋX)!$ě?Ca$FjNvyp-qM&;x#,o<?ț{͔p˺RD^&3ȓcvyɇol7B oIY!8>|H�%los8ճS.a%=*[֕oV+ɇ]vLnYx#o`o߿O�%xÐo7┷oɣۓǤ?[ $Y*ʛrqT20(!m_a 1WZVV v snQ,oFHzu x~XɀBB6۸qĵw%A�Na7% KI!!"ڶmxÊ$ZZ7l0E`~ǏF!!tWڵyG,]�; XuǤp’c6X6 K#T^\. u 4=\'|xy~~._⸡~]P=O6 OÇ'An/91)Yx eSfME_ U:) k[>ܼ:Bnc^{oȆx´ `#VtIX=$V0,oN-T3H趯:tk 0@M&SNU„�+]/_^f̘�_aÆ|�ۈa*0Ŋ*Uŋ=>HǏK*%f8Cw/'>krT݇ ŗtm%Z۷o_>aU?n ,Pe6mTN8N㭱4qr]N>-]vURdIҥs_\?\ *ƍo�ǯ\ٳ'7gxqnzX=[]67BHc2e$))Imccl M8Qiea c^Lq$8~BBϝ ٳg^ctYXGm/6&匋Su#FXψrx`M4I5ku;Woǭ_Ē))))w|s.C\XK,%Jcja,lfL=svϗݻg|ߦcǎld!š5kD?^s*ުW.'OtMlǘkaXΝ+9YF /jc}И}}M׶|)Xp©:qr]iW,"Nś Ah -Z4kgw9en0ssZ`6+Vpۉ7(eMlտh9a ̙m_c}~>v>Upa^1:8v9 + 1_K8kgwsG߀oΗ:[uԉ !$+H"9I4凯Y4Deyl޼YuG:LkyövZTM &qqN||+tP˕e,ϹxsL9ǹyv#PY{lW`6+|i!9K'^l~$'^JF?6txBާ__KٳzysŊipO'鱰6إkQQQX4G>5N/ʖ-E 8 1S<\8Z=fJT9}ov{7ursm~7< 8$޽;G<F!M.mFvG4Hu`hStYMm}7ɪUԗ2Qp֏;v4qlw,?hTt%XQzTK=qF!ZϘ:ofl٢?,xpnshO)q0ś{ fm-0<ƥɟ Ν;jM]L{}y<|Pa5AŋK!$|.$tW0URR0۷S$,[L!&m!#0}1'/䠔Gx�C옋gݻ=!x֭[Z޺^-m?)GϦ%$H hlW\Q3c";vL֯_OF!!tWݻwxٮt-C4+GݑS]D5wW_}%FQ&Ĺxzi:&(!$tn xsx8W$F'dHd7BN |mԩ0G`K^_YaT&H&%4-2Зc #{0]m}~X[ڶmСC#{ύxZe}x#o9IR}JJS )upȿ)<7X0U@M<zH ?\2* 텥#;;[ ѣG`x߷oߪ 2fGz( !pOBB!#l6Af;+ʺוx+mwBF0~t 7 ԨQJ� +фw|󍭨ºlÇ8l#i:rY{ZGl#߻woXh8F(!(0tS6JŲM&%oӎH1]mLLu[V"lwltbm�2ae'Nh�1Y^u}͙3G@2+എ :ĝfA 7B!|BmجmR\9!=g7˿!nݺꯓc۷Ouia!ęY\.Dk*_2-/1X,Ox 3Bka,)o^R>p,5F(!t[Ȉ73q vI~ߎk ]XD ܹ?*bX^Bcq<h.8bqXްپ.Ʋs#oBoy E˛ef]O[Wr:*Jf-38LKj8mTe 8P/_=O $B ݢ^7!n w(7՛qk#7nj?Ifߩ8rÇˊ+"}plX0ksEL/�a$h9w)ͩ2d:&|333eV`x#mBͱc%IQ8}7n&c|\\Js*ެy(5j(3퇑ބ&060a{)}m .bϚq(|p-*ժUS#qHyύPB @'$VXu-RDiÆ!޸)!on@}?M}IE:^GumJx# t[o  7Bx#PB)x->jy#B(hy#-`jp~{ !mnx#\oX%e^ |Zh-׷aiӦ{Dc4m"MJJEx+e KP|yUCSB(!a+ްʕSۨ [n$2f۴ cǪɨ0 32D <XvZR9I:O=,~آ2DkyPxCzk[UZ 8;ViWH9! qg& ϫpZZZGFM W|%>`X(_]d%nUIRy0[=4Vy`C5oRAl!sE7_BHo,DuzXM9*Oݑ3d4ڗuWZtX Ún|`7X`2C<a^;˛v|57BHoNk`(]l}lLܞ*_ [Ͽ-UoH;ReLi5iVvmE 8B7jH-_V-ٸq# ;O=F9sLPۦ͞= pƮU z@!C%j֬lX!K}VYtঌژ"V%@7WejW1EӤ[>pV>ogΜz)Pp ڷo<zH5hP(Hf͚)m6x{L'UVU#Jm]:k,eCWi&MdM񡄑ZوQ'mҥnG !ZfmLnNȤ)sQZrN"Xv^"$Kǵ "ޮۮI'վvՋ|2bիWJ*޽/n4 r͝;WJ.-+V 䋍Z>}իgϞɸq1�ggg̙3 ˒%KLˁb 7@!o~vɀ%g%q<t']K %ɠ%qj_!pज^MÆ ĉz6lGޞ={k5j<x@YJ(V5j:9ofpΣ]vҠC@mV5YYY;Xݖ>77Bx[ZFJv3NJi'fz<}x<zAΈUqbesj_w);vt!vK 3}^4Fu=P4|酤xC7 h|#CrV\)+WV5 !PVJ|?4wD?*߹M./j -&(kyڵlݺ޲erx6H  .aQم+VL>}cqҍ@M6bB(CZ? zI7?j +Gj_ofddH"EBLqH3 $X6oެ,g/^PfB,7u%,oȃ{4ooBxY;(wIA]gVcnF<h1q} },scT ׯ )0T;6u3wƌ>o"NK7oyC^bTPPQBśZ=)z4G.#H>[ɋOTp!t^V. #@1Q a*Z4)ތ2i&}%9Ѧw>\O|Sc98֯__ͫEaCFF!\a FTeRg)k^S>\۔7Bxs(ނwKr R)eZQZkT^ /7%B(Hinކ xeRJY,j%6p#@U#]#1BB>կͽͻ2qiLEkdҲ* 2!o%0%!$tܰoQ!o|o߾]/wcy#P 'BH'~o7"jJ~M>~H A4%%%oś![7_~)!(n:8τONNY}N&BFwCHb Vs :ibDK^x"̆oϟWk WPA-͛sXU\R~Wy8'c\8)VZY ɯiH7_ VyF_0^7"ڴi##F .ȍ7dϞ=Ҿ}{Ztaeռ}<sƸ@qRf…͛7A?6!>;6$śӅmxE Kׯe2$r0ͺPͨS"T`kWNLL4h@Y1@w}2dTTI+&m۶ /-@"EJ*ү_?ʋ{C%JV<y+]#?ٳYP!V Fܱc<,oiii2~xL*UJf͚y!p8@09� fٲe[ݻN?q4iDW.ׯwǬl<;o<up/8 ,P?}iY"ҰaCSZh!?α~xsqRXGTq05fU^RRԯ__+2V\GϕBs2uTyqqqҽ{|g ×Qzz,^Xʔ)DZ^5o\"##fUZR; N/3k;vPqn)S06lOmɒ%)8- b6] ɓ'l̘1tݻw˳gϔ:tmVExԨQ=!QcjMr~ӧOw5}wJ[�7DHѣGh`2QlٲJ5kG4x9rD}Mǻk}?z~r`?\_xN;vJXjhJ[vo$;;kwdΜ9iJ`*}=%,,hhP6y{.]6n8u<1-_Є%D6&]:h *Y-@ڵU]a- )/X-]7furr/-.\-gA 7Fϩ?e |]a8'!,}O4Iif͚Y~>;--P7rʩ6 ,RE! boݺW+!dp#0nqz�Y9r˳cǎrmը<XYsJNTwΥC RffG5kt|FM:ae2K %<8<ci5N.]/,OʕU;w(>v?�!ʱzh"K= hӋ/ k *�\c )}7)" L ^~ݴv̋nS<)=1ò]vJhhxz>. V<h[q} @{@�XON x3IM=F"xۧ.F8}P-x^& a_V"ݺh`0=K J>zjVO7:_gD/WcAdrvzAP,,W!|a{T<7K%,nQS|^]nZ!D|A Q2sL1c7˛1BC#=8'cmذA`_ؿ&kqfeZ0!Ca}C5hf6DZr%Ev#V>oPɻvrj5F-U#,FZC}bLZؽRJ02NbwvvwjyC7YL�,8|aN8ק^zJPDk2+D1ꈮ -**JYVccc=[7z7}^qMkso1=1@EiZ>|({UZH:NaB yXay3u̿XQ_oe}Ë 4ol߾]YpW|AmL1Zxŏ}9ۥC *D|Qfyö7˛k,^P,�s' Bk׮>lD<(Y )+'wG+et9fn7X_H]@_�Gj- #5RZ\!pM_{pʇ'~a-ޜ Jlk׭Vb ޽{L2k2ksS8a7`ժU[p|G~ptJq :MSc*~`qu'{tENK6/ϛ<sKWᇅFYpk p|m#9` @FABȗN<}wt "պR;k0!> H _gߔ>Rs֏D>yi_薃?Ѧ�_~bڐ@,W0k '|GJbj|ݣHV9ۥ#޴.K F8u~t>uAFrc y�8/\73 wI =ZaA 6%}Ly/5mJ朂5u!~x 6y#$7[]7MiYYYON xѦZW6tGW@7qp &0!4F$kWBB >;-0jӧ(7yy#Px*h0!$ӰoQ!oL+90!$tay#PB0.<".nSB&=uTx# !ooByߟ\HN<B((!-\,cC)nl>t 3!oBxey,_2r`7GKRr9s1=OCLJQ@(!Ktaz ͝;.6DoYh9rM>] ڵk+-rR-ZTjժ%7n oBBOݿ%c'O2b`IޫK!n^t㞭ۙ3g^z 4TbyL˗}ɣGT:d BF,ׯ_'0n o3e`d 9POEo*}ކS~"V6K6^,o2|1bǡ.FeJŊeѢE^-oȋ̐`qէOYztpsJҥU9UVX . *t,a,kҥjB /^kԨ!eʔHy{4M4bŊIڜNҜ.udټyMϘ1BwcJ a+%W?^R.#F~wOːy &^m_I C,ˆ((WR6 +6{lСRؿ]v^̙3U^X;k,u(B>ov<K%d̘1pӦM=jsӧSo-nɒ%*ߍ7$++K('NtWTIvޭ'C:Jsr^ƺ7C|mݺ{&}ݻW>|miei{Ȫ;Igd=?OI_=z.^,Sthصkc?4,oyo5k̑{ܬ,svsTc—,4㣛9%%hZhSj伌u!o3W^9sK;yr5p;a<}Dujyz׼S=k>Or3|k׮Jk-[Hn7t=}ƶ7fqZ3*mh/^.\ ௖ƿW^ʚ v伌u!o o6vMOJT'zʏӥY~7Askweσ_ϒ {-"E(1qHӄޏ V7Xeyڵk"ea۪,Pn]ej'<xP9Iox#$_jXmJHUdi2bpILJzEedx|k<xpx8!-[(% TzÏSNb\۷WqVM!jMQ7*m~˗/WLJB7,۷;_~4ʕ+;Joxϗ!?\k:Nٶm[x7oҼMK9@*5{'ߒlyBZ-Z^Æ MQ[M4o=*rժU9F9RHMѦ;v{%݃v{qӦMUiMq.`7pM7BSK߾}ad'z^7{x2>N>m[F87.}ofj#opQㆪ)K={NӐoG L݆ d()ZϤtEx0 6�7zjduAo+W )>DYZ|g 0-z!RMuleJ9)M3$fS?ZX08 ZK-NdzH7?4lW"`[r#s¹iVVo7a�dž6\dZj,o <zG=q1}׎gw,$]_cǎLeU?=V<plDUoYKSěZՠt#ރ'R7"Z&,=ʆQ/$W [ƍ}*#7t 7GÊ  qp{탙@cخ<4t `9EsdX09o�"Ů }b7ȹ@ ?/꩷Lrrg-}0fssrblZb۳hJy#-"2!>7j%Bo=?q(Lү� ?Mlco`AL-lWa]0kX^yoq_c} ݧ@I89=7'YJ!za3n|ΰoQ!^xh&Рɓ<o5670ԽYf5'>ovݚ}h4&F9))'ŊNY]@Ÿ};uw?khUW_Zg/7BΝ;O...CK ,sa W>. M`})( L)ެ,!F_&"g b]7k ꇿFaBsfu.sV7,VYYչ99'k9BF Lݽ{Wῂϟx<y|/aExԩ5p J), 7tcj/| -Nߨ#,2<.Ooׇ~fڵC:|شߏS7bfv H_SSϛ<7g/Fxs2!$Ћ7}{}yZ0SsxC  F/zˈiIAp* C8(Do(D4zK1<lRmhK1,7O?[.n>LN OѦhGѦ6"ݱGu\+Pw ީ:7'D={y /!$q&0J1F2�99S?ѰoP엔rGlZyPQ7+C(pЖ�Vgyv]F/([ʶ_(;]aL[o肢x#$אo,Kcq綌7D ju$]̓3`:)ވ 42)!?NȱCLK)b$\PoIa[[NEEC BP]\9իܾ};(^v2D*U۶mFPQ//<NFH7cJ={TN.)odĘGoJޫK!~>vFկ__BE4ˁ:1ci&(W#:wk@k5j{oo ^xO -ĺamyh #J\iՐU-qڞl=~Mm<"]=QdŊѣG �}ܛ7odرRlYXf8q87|#8큖;3gT^]ʔ)mʅ-[uj޼Z+, ζ<KƵ7nvZe>H6l Nx+(~L�G =`(»6333|[KeHpk ]pTm]'%$rEeODTvmܹҩS'a:xoRȫ yu֎M1)iU I&y䏈 ê/;gw%�߾}kn &wv�͛N@;vT¨eʔ)x+HdeeӧO}#}}{ȊK ݻ#F˻GDVO^J-Bٯɀ]Ȉuɖe۷Ouia�9okV3kaXZjȋԳgO%Ĝ7y!?i-x^Yk)ƌ#UTҥKˠAԃ?1Se /V6vPBH8>oߵ^5{8怌0J>{":}{Bz;yKѧ^ĭ)>or(ZKñxCRmo,/ٲolA%U]ve[;c… ?:MB(޾\J2{l7>DS~.Z6U鋷%ȐG2lyھ|LtRd)R$␦4VQV7Xiys* *U.S8oF<c[S]ʳKB(޾xkٶ.\EϚ&#F ĤרJZJ2KN#W?[Nɬ ?C>|XBm `ho:~l]t& @>oኊ xPxQ9-R>oGf>oNA -Z p„Kσlu¶ H0�q} oB=tmZrdTY#B]g~N޾{/-+鏼׸qc9{lxi1^n]r:NhSl2*B1},ff͒UiWkU!hS ՟;FbaFÇBF!o‚75tm@̍.{Zʴ[ {N|q"sm ˗/s577B w[\vM*TRilO_I͈r!g.UE( .%X䫅Ν}~+gL>ΆP8ҥKrJ5{ĈK`ݸqC&( 5'(BV HkFqF5(!$ؼylٲEgJG>oP1  oBB%Kڦ7) q0!(6qD7BB˗x{!$B~ F!:"$`U7BH؋7_ x6m!!Fx"g3dA+7&fΜIFHr,^6/GJ ]`LHo;w eԪT"/vaRɓ'%J.-}UKĕ*UB 0BM6'Nڿ]vU,YRye☥JRKa S+W={8S5ûɡ^1vB\o!)|Y˗&-;X ,RjT\\Lϓ/pj|Hx7$m̄ׯ; kjJ_% 20iΝ;˹sr+!~5kNzvR3Hddc4L PD G 7lЧ9osεoX̙3btȑ#s4.jСcc\cN# 6xs0ӆΝ p"gz̬R9u .Mnq\nڵ;kת-O>*ϗU8x x5 %111G>O:_pAY@>$y#D,w!İ Ai -Zԧ9om{ k>m۶kx>/^|GdӦM'|ϒKJe'1fGפzUr%n7q\q _S={6-Ux1 qHChyPx "EF>r䈲)SFj֬)[nuAt.\XnQ<Z& &},PSfD iE,=;v쨺9u{תUKvB~2lm202B(qUCwnV6;e|_Ŷ>|R?R5J*V^,U;n8`qfu iƲ?.M4Q/իn#瀗=g4^zfcWY~_^Z#εy+Fr18!Ҍy!rDO_,{vqx1_iX龈79o莵om߾]߫Z:,mriH:udٲeiVBeX>{?)ȱ2da}*9CƮWWȐ˲(+WNtbJCڵ*LŊڱ>.fK _-UCCZqwVu0T|n.1f6lnː!C|.˟k@BX@ȶlْ"78"�Z={ ;nZbccU:>zzxo+x&᫆ 7g& &RBM{kxw|63^ qR!|x[DY޽;jm{NzDtRYOӃ<|-'{VL_ C8ة20@Ƽ[`у%O /\Př h%x3CÍ7t3fA*˟k0E) xÇ ,p/ˆ`$c)~zk`)DJ Kx躅?WS?3(믿VCXJFoUo]ys?߫Q^{8怌0J>{":<=kީ5 Dold.0^ݺus,6@ϰMEFavvj8Uʆs1,R?+!xýGW-qWX cڠ,-o*URݓpV"~)?Nf-Ƞvҵ2tAgɄ 罖 _Ӭ;hXYޒfydض-hX<н3z;m9,n�N˂u777b-JFHhwo-ڴſYdĨᒘ W3V? [t\HV[ʌ编 ^̿dLK.U 1թS'e}v&|f̘ ,Wp#X( zBa- ۧ؉7avhc}*_8QQ{V7BBydfJ6-e`�9~2FԬ|KjFϲy i1vvkyp7;65j`D64ё݄p\mرc#)dʏ-Z(D ֭ Gnh}ᯂYى7oMʂ`֦TQQ{( m8~+,xQCCSa37JJĒ3)vl?rQ7$?:ȵM x+p o d)_J_vS{'ƙ5u.l Mf gΞ#r{DFD˄G0BVC I!̂%޼L]FKVV6}#}}{H`7B 7Fx#77B((!$5 !7B)ms|!PPRP;r״kqd؈!2 ,` ..sWo- !P`cr<6F߸j`Jv3yܽ!~)]! cmaBH肉z\ܟI;fsrMr  .][rUۿ21s(‹4|Y-gBB.l/oIFFFފs�Qv-K˃'%]rꨛ4r09oXʹT˴L#P8kDٶ%kyd>x*Nv̍t_ Y`[P2iY|rS|o\ 'ݔq{Jz .wYF tHxKK."z(ȮSls mX.ܸ#'ɊuQ񷞁v} o0}h@p IBB>EM99il9v^vNqҥ:?*@ins"nݐ=z-WJ]rKqٵO 0E䴻e1:{9#ݘL`qZ7oeKx'kiKyqK+1펇|g/RiMZ<}RMu\gv_W=GgkerD۷ڟpQ/yO^@Yw>/>-[( q6cծoKvۀ1X3ll8$[OǤCf-W-cf1`P_p)I FIɇÔ#2fUBnRM̥[,^xZNT`qZ:U>kHJPzO7c!/O;hi]!42?Vq8efY㪇aw]`;>O4U 3,g^r J,^rO {̴/> =<\bI/^];\/%Ϊzy o'\CFH?ّxfOދ;O�W80p ޮI*%"Ns֙kڹ JuqR~X']Nɠ2`iBnRtfQN>!="zY}x;)0nG?GϹÛ\tsZxxe-z5�Zs Xt; 4]~4[J gU?#vow/w8/I~ipCY4_=֝=gK\Z]`A: 68j=!!.ޢ{pGl ޺jp骫T G-Z.SlT2ν kZ84IG_+/JĒs9I;vn':zȄ+r'-Jvme>pQO>8tq-uƶ>./%*ΥVo{)Pcƻw{V/ 7ǜUѳl}:Q/r$R(StI( m܍oxaދsQ`!is[iۼC~5]Mm?^%>錭ϛM:{ >rL@l;[ i=haXONtOʻHVO=-HYMxXw_ӵmX`9v.fxv—څwϩdU$͗{ov<?7m_tIF-͚5x3 67o… N:RX1a3/2op:o7{6ۉ@EYkIPIik,v}GeJ5"FȞ};܅x|傤^OQB ]"w]N$vny ʨISiws'eʉ 6|\N;c]$NYYpZ޸+~k[ߎwEJW>.Z쯥i u]9- )IK?}@7߹kMxG_wl]-]>q:ֺC pgt{3bwv—څWosST4_qr͂A~o %%EJ(O>-]vҥKKɒ%K.Jiyw) 4P/*UŋmjԨ!NRIIIRP!9w ƪtl߸qC &˗W`qzϞ=[*U@U}ό3&F-ږCqiݺRƇyyT-|8ܭs�QtYŌU{qRE'a- ?)]u]AۻI#~p s58O}6^zL?#qH68ϓ/h5ըjyap=Cua#>ݘ]�l#NK{Q+UֵYJhXw%̎xG8PFy8_ӵyێ˱sj>?3%fg/ ,~>{z<3Vi{pկ__vڥf.WPA֭[DUBB6 e ,PnѢEСClR&LQΝ;8qb}篐xtG5:8Oe^ <SdѼos6ˁ/+,6h{;jsLP*=zuSݢƿ&Ť߷N5oh޲ ?=Gy_}`С={4/,]Zr2w\ILL̑[֭[gϞj]v2j(uLwұ]Z5kr ^G! e#ݸOۄr7tX5<Hg^e:o˶xk<C/'{kUM:r\ !F~6saiժu˴p#G(:ԬY-`ŃȺv*ʕ+/V1ZJG>Xmm?m\l`uNZ7x3/2oy;xhOt+]?/ lIs." /_./_V Y~͛7R'iM>]ڴi0<N,of"ަO2o[V>m#ƠqT Aܬ !F7 6(5L Dqh+Vt6g5�b֬Y*<sLF7gܸqk�ΪHm:cA1/꽱y/f?T:.x۲eԪUK)FB\ZJk#K1IFcǎ0"|.O nFb[%jVoAnrmxFkǣꘗyNg^M_{ <֜1@?GfY1/2yx !$B~m\a_aao^"C(Oak7BB[m>HFx#]) a~mŊ>4Q!ooQE=KFHG;@[Р`y/a&⭠ 7wzLrhZ@jիʛoWfzׁWRocd͡$BHEz )ޜo" ww!C"#ެ Ռڵk+1;u~k׮euVPQ%O>Uzm0~!%ޜAU"xMY6ի"]Rw}h}|۶mx#oBhysdy>|do2bǖ- Z::,%v�cfu߿_lٲjXw^8GDDRJI^T#ku|vvvZk/xK,V'NT3kq#GziU'pqiҤ7[δnX3c=JcW^G9͛7K.y\c u5IJ$oB[>oh4 6 -+Y:RebkgԨQ\~(QBƌ7mԝaÆjj4hToذaYjjJzV K`y mGfʕ+eթRJ{nudС9QeB>QQQҲeKw:ҥԩ!Px3ߩMF]y;w;]X0VfM|; MFRpѢE*sN?>If=:ptٶX'lGGG+jv+WJʕ%!!fddŋZכB(Bl:KF'C!x[uUn˰[n7tQ cq '&&JL2… ;.NF'8ru:w c@xM6j</HFF!o!fy3uLӧϓR/ˆSHcӬ> hEBB9ooͪQEÉvׯкO}^l{>ic"z-ZoF!oN%`һ5kW)޽C&L爏KmY Х 5K+o> Cyu5Py)7I]t7tsSn]5PfyC.[x[n h!|BH~1n:.R+Ḹ+-٨Q# #V ũCرcݣME:tHZ/hpOͩ@ě]o߮q f ޜ9s|o%sP* _QΘ~ .VXƵMÛ/J5x-Xk3|ڦy#tzn &𺄹x"?}D!>+ GytMw)I q) ?0/m.T~-99Y6m$&k,%%`7y&Oyy#/qF/\lt~T*EuQYC!ga'ނF7BxRkx-?$HeĪDYJ'],9p$UoUST^^3B1 Rpۚ5kTÇHytvDO2gDKSXu+-CL>b/YGrFy'Ygoo_.@NJ}([)ʰWdk)&nKRdTY:SZM<ї߷o_ٰaѶ198+(D gy.ޜF =xÜS/wޑ X*ܔQSddbx Zw1Ƶ`TEɸ1ᨱ|! N |o߾-0*$p RBZ-[L9yٛ۬2ik\$.5qm祷+}kcIV&t=167V||\+AHkiq_=XYϪ/K6r`eJRwy5kpc"s'iܴر8뢏60;&4d|;oPŋ{:woǰ^$8==j_яD FyPxÊ"p$8W,9+?,IsHg˼8:/^H,I-SjفaS 1y36p@8q;/DϞ=qfcƌQKiᘘ֭a<XÆ sD @AuQYAvTY}O^o UV={|͎a x}V-op�0fBK-\Pu Lj$i'մzIi3=VI^E mg*ڸ@zY2r9#GʢEa/a^z `uX?Z_̶ax.bz'J*pڵ -fyj֬00/Ϭ@ ?zH/nX}Hp{ o,hdfBKڂ:$8R,>#O8*MwfcKzGzI1Z}eax2</@`!i&[Ӏp_m_ /qf�]{`-e󋏏W)tj]Ϲپaqkw>NҝAݹn,dśӅmx{ꤜ:u(|=>lx͎oʕ=zHzzzԅPUaܹʪb6i54wX 'F#ȷ.p?m}3lkxŸ[=𮰊3cQf͚Ill 4ka+҃_}Y?t_4{w![xZ1~vXl˰;wcCcxxsqRXGTq05fU^RRԯ__qܹ|/ނQm`l2\  >>f0e =`4wP )vI٫*xb!˃jܸ¶++޻}qa,KgS֭ѣ^~xvR3e,ڴi TƎ(mԩ|7m4wz-\VV>yv磏� \+{7}tGf˰;wcCcxmԨQj$h-dž#6 Is`eT9rD{�7--Mm :~CBW@/tG#Xuh3|ŋ/qus6r oz6sLLN$8\v[^$MFjK-RVy<<}A?}+\q>`4W}8<Kp,Z|wNw:~rqfXsj޽{믿V#YQ}Yx'O;~HN v`@6Du {^XjOU &@ 0B͎a x}V`[>o "DmZV",bSN2e8>Ccyfo0s-�-/`=ah@ιN'0 ̤I7䍊R׃UlC "�jq<|B@.]PQy7X0>HZwRJu\&u6In9AZ!;U^ PC{ #̦׏6+o߾}ҹsgw q7�] ú >h5h K[}рki4?_}�&ք V] a!=\70!śwL^z ]Rb{AJuY+;VV* z<{/H^RWѵ{Hx}l:KF'C!x[u]kax[̸U#0#X'>kx1 .UXoxC&DIp%3VȟE׭JˤL lOfLW˺�g{tޑcxxs5 ݻj»O>|0⭬oh)8iBh/-?7 a"4pp"MF<.v⍖77;M ";$\.oX!l2S=z>kDH=YX7'>~(k׭Vb ޽{L2kXWlС9.+VPɂo-LQU/�F}`?? /v쎯ODŽyþih J.v MֵkW776n8s!$?ga/ޜL.R+Ḹ+-ٳ9Tf5èHX0JrݺuPPE6լcǎ1#FW^m{|61\iDS{w.v #Ѧ8ś&0/LBɷ=YȊ7WXƵMpDƄo�bt3BH~3ڦy#u!`.oT!PB}@?T*F޳S_hS?XjE5 $pBH~V7,V ě<oSOQ>nfF?BH`7Bx!B!ooR,!?(!BF!7>(77Bx%РC 3!oBxey@ 0% ;!8taz':)vڊ:M~׃B(ނ"ޜAU"xMYwWٳ^FFF!oamy ,ˈ#[Wnܸqj}Nm;w.]Z߿_lٲj]XwޫWJDDJ+UK5Voggg̙3ZjxK,pBPѣsҥKU *d[o}ʕ+P|y%*|6ۣFRi-ߟkQ{ZF )SDFF*CF!->oh 8,Q89K:tpٮ];5k>h ׯ_/%J1cƸM6umذ8qB5hToذaAѶm[IMM,?~_ s-gϞ޳gO,Ro>H7o;ѣҭ[7m-]?(ƍ:8P&NHF!l:mazhSmazv);vt�ڵ+ VfM|;|%U>h$5h -Zk}ѨZ~yӟOrrr�*۬}_9Rox/Ǫ+5G{JJ;!իWx#R}̦HKNjt2=ˆG[׮]e֭-[<,>bŊӧOal#>VDi߾Ӻ .~ƺ+85zӧl[ 7ݟ@yU >oB ͬkֵw3O>a[Y`)RH?&!MkK7ޚ7 m޼Y5h8myö8>߫$C ZO{bW_ @9&L9`!\fnԑBRɠ?ʚX_w!&ysnٲDEEF s=<r8�1c8G~߾}D"펯O|ްo >o:urag,ˮ޺)[j%mڴǏ{=/|W^˗r.^(}x|d 0@}c5!Sf7A֕p\Y˕nvllԨjּyseӪU<r@ǡnرѦw"::_ =~ ӕ M;e`ݠz{oM+Dzb>uHChS9|}"- śsm{7)&&FQBH>YaA 6^ZL xP:O5`Èᴴ4y*U[%wǎ^qaeiE/d1i<X/^F#? d-0B(ނ&ނM}HhPN`Q<V~}؂#>ljωx~ 01[>ij 멷c Mks5jS8I7K1° gȳvZcF[Ȋ7m~=;%1)A56%Fg Li{]. 0щxKJJRaEq9\rE>H4Fct\ҍA!|9:녙f%LB(BNY6y$հ6ϛ!$Fb�t]Buj ݑv8 /[L*W쎇m۶mӍn֙}oQ!k1-V&i`Bby7 , Hfi<ͩ,ooX uڴi&ѽa8>oQo{UO5Ctcy3y/!W^{J*j$%,U~hZKG_z 39gFb@tk2mXٜCw)%iҤ,Xt)!$h|nЃcB!BHAok֬ xKB(!oBNMZ1X yk`v.gN`YsjP& $PB 3v-KNdm1jĉ60j>͛7DYxJ7wnGEdɒj,g7BF!o~I7eo\)GΥI Z :Gm񒅮X_ߪx#߿>>ozqUj֬YXY(!P9ooHbj9{UvNqs0$]%4T ݦV ̪5g 6Df_:Xfϙ^gWX1tPjU)T{VXQm! 16B샿߸qCcjQ qcBR߿Ws<!36̲kJ`Yո7o$8&b}]̮y7B!!(߼'3nʎSWd˲7$KoJR$zqf ʚ6%͚=CݴyO mҦM޽{3GMtA!m„ jwl[N7Z0=<pRh8G.?::Zu޾}[5)S%ެjwܹ*/U˫Oٵ:OBF!$Dz6 ו.J ,YJ;#s760wM@G?|x߾}#o޼Ri֯Vq{_ ~oԪU/ڵkRvm}q8p֭L>]zXĉj^Z233s 3k;V+|ެjo7էZY'x#tn  *!'eZ~հKePuj^J Rrz5`3=AZ>N}ްTKڵH>u Xе`E!ʕS]}Zyŋ… A˛U]էZY'x#t钬\RYa='~G艃+ !)޶L3o StYwxIo>' \e.ˆc-싿%12Żr 1CvQ%Ceޮj__|8AX #;kV׮]eɒ%ҥKܹ g, bkb=C-^z9,X*򖚚nW/z'x#u>F !yfٲezφx[/^6=/.\w $.嶬>[^d32xY Z/CeS6piʋ}S٪U ={:UFҥe*P3`�%0H�qGZիW~&/'pv2y7wLv!ΣGBS-}V9IJ͔ 7奔kivbsI=7Vz;%Of4s}*v_ ֭[KJJ Aw"&h#8n_ٳgdb̙3:!cFÇmjUW3fhSz< moKxs[.˥ԣ#w~˵M x#7x#$W.$[(a|?w<P!!/`MFHpa-J] ߴY % k_>$xYI^t;so ~_JM6⍐ a-!oW#&MFY͜9⍐ woQ!!0S #1% h3N^m&v) 4Pj0hy5Z3fPsbT!C5ұDB&Ljn̛ގ ='OCY}USx;w-|༴AC(WoF!$&,S$%%)8Νsl٪P{̄/0(uN؆ٻvRS`yddbW۬YUV'/_V_cOsG\||z&Mf͚t~oX:⍐4)!a/`AZB qz1K$߅8ILLyի{똯 ħNr/\,jv~y waUzGFHpٴiSދ7LpK'־}{5BK cCbĸ^8:r䈲NA[nYH 3tuj]XVW2.a{swmh"7B VYx#xH"9|4oD/p ^Fm ۘ ]7;YCgo ⍐Űoj-n:tJ<B(B_58{&X1$66֫ٳ:\7.bBWmdo |ெ ,MxңGěnSO7B ^XB/F|wy 3!#{X iVJ*Z%1 m:h AX|B5,A ߷Ee xÇ2!#CR!)N[ttrNO ^(/544hX>'~ y EBiNܚ kS\1 8o+3--Mu;vLxCqyJar3|rOʗn@勅E7#12#(<ۗoJ⍐woz54,F}̙3A׋jT޽{4@^|ūmB&'˗//S71ѧh<1WU k(>7|8S\ZLX[`-33S.^e\Mg|/] %nԘMƅtc.]f=1- e7oաO>*:̻GkBFr[a>*7B zZA ߹j`S2;j$tЃO|ߜ74VE렏ի?kٲ:ԨQC)>m) ( ذoX NǏԋ-\b) `8lc_>of}oh0]xquG_TQ|7U.eKHp@!  HAvvWm̩"T]LQpN}Ha2Jx3j'X7Q|7CQ!V^aky hDy61snN*+W.+G~XΞ='h%0,jFDlY7]'A 蚥 o$Rx!޷}'5 ȇT)Fqz5EN>f1rR X@#ě4i⎃|p t`F`7 Ѧ9in]߽K!<BVa3g|QF_w$#oCW)V]SL#[-eĔr1Z8�`7<oAuĂԕ*UR7 n)<!P F'NѣGxC)mLߡkBF!o_pmS4za@5F]X݈ˢERZ\7Bxaj m(XmUW)'B(B@}#{!�F<xǍBF!o ނF7B(ވ`JB&-P7B2hѻ1e1b!$�;Znpc)!o$`nIqF5(!$p6oެ`=k?x#v ӏ; dgmA O6~x7B ;LadMmiG.&NHFHr5MO:%3gT Nht++̝;WA^>Pi`91) .#$ś/c9n8QX0/dIIIQmРay8p@Y(rׁG_؈Q oV_z7( .vy`M۰a+ǎ%P48h\޾}+pQVƍ݋o۶C"EH*U_~rʕiPdIر_ZdQp 7vP|oz54$XjR3gΨF Ç\/'Qyjh�ᅣyyPZ!;;[YC@bŋK2eT?y�pBi֬x 2|RjU)]W-gu3fHrT!C릥cy]4|uE[ꅼgϖJ*IBqŊMe)ޢ( 2--o�k1x\pu[&u]3yꥫQy֍*V$v zP8h}YpŊFt}h\oacPnٲeeܸq)BΒeVZI\\\|Y"""Vkݺ$%%)ߖ^~}ٵk022Rͮ^اs#_I&`Y KLFHpAobX7X0  ,[wd,9}̎8w>I!y!7kԨ" ˗/w76m,̙#:uRtA9MʅÖ47`{޼yR;Uha|Cxsez^C:x{L`7X( .6m o6}tp!A#"hxb) 8mkU6^rz˔YkĥVZr i:]vj`Ŵ;QF#/P}…~D xx0 ASl_ś]6to-x#$`y�Zׯ_y3vSuBXQ()+7Xhjy<vҮ];śQlb[jr!FfU6x f& їz1g:a_˩P xLo[ "4"~z61snN*+W.+XΞ=yÚ}%<h/'74uԑe˖h0q+iyx ELzK>֐qѣa{„ t|.WnSS7B§O4 ]e5 /OLb ypG6tذa9DF" /]|YGATbT #>mr/|Zhիꪥј?j1W^9Fi>oPop/UhS8S�tAPұ4>P]}W QQ\v DǏhD$3ddVm*Ū p4"rYyEl7T\YY psd-U/~m4)]Vz1FoUMҵlRYНaVMX x  oEFHpٽ{w`QE V47tQ(Q|BO] p؆O˵M9GxxOC⍐w_]C5F]G FFa)-.EF((o躥x#$߿,L |E|a8 S7<( .XƳ@7PiD��ԉ!8oҀ⍐[ +l5BF|=S0~Fx#_<pKdxBFfB)BHm0~7�%?(!$BF!Pigkq;d]du.77Bx%.^,{WYEҷgB(!ͩxey@gdi*˰(gW]\.&eO((!7 �\7DZ#i[ڻ8СCҨQ#0}Zdƍy&$oBB^9QHn(nemn-EȆW9']pAʗ/&dy2dȐ<o⍄j iBHDF; SI2bK̬m|W GeG-xDL;wԨQCʔ)#qұLDD-[VJ*%zR KJժUPB~72؎7N*V6lM4bŊIeݺu7oo}%YrL2EFA �оbՒ'޲n^4m|x<Pܨ,cdݘJ 1|U:oK,: I+('Nt7lPN8;4cƌaÆyճgOua7sLUWh׮̚5rJ*ݻUCСC)n(( 8X`r'ĢټylٲEg x{D^m+ "w' *S[=ƙ('9* ~nzW֥a/@Xe ͬ 5k˗a|9ßj5::R70رc0=!A<_Kx~Gn_(#?o/Ubɼ'iq7޵i湣|/^\ .i'&&JU& ͬ 8t}e8}Ν;z˕+'kVkQPQQ?⍐ ץo>n/*Qoo: =Ⱦڵku.Soyaق) 95Z`nfKxA+GqCFF7B x{D2.UGV"_n}yZcx>76Hя6@3 ?2"4f/^}ӵr$Wmƌ>o"j~ r7oa/[ȫ׬Y8h)`MFHpA`؋;%7J9OE?EF";_8 7mu)|�/ֹZU#|ޜ7h᧢6|Vپ}?W1/(n(BIy}Wđ#GLmڴioY F&kL +Ej:<QQ>fgqyR x -N7:)7FS\`yIL=<f]ݻ\Bn |xUn'A;A&�6mȶmaL{m28WREis$}tjro"1ɓm[ŵk"j펅gVS�a.@[TT!AsxR%+mJ8V?I֥&8z%> 2!PH:uP 4ӧO4lhBΞ=:1? [$E˖-=! [j%qqq8{ŤNǗnScaΝ;QX 099!eÆ CyM)(7%Ӈ"A@4j(w<?ݓ8?wOSa /7ěݱOBBB]o⍐oQ!/YXw<`xX<DUe XcDEQd0XB(ތ4o\/^,sQ>`Z<=tby tAZ>Y0b||M @ckfx#$lݺR(@`^Cկ__?ҦN|40o>o͚5I&)ԩG:=``7}:+ߣG[+XsAaK7B sAH$\|`uj)z1׶m[hSu 83AKZӦM]ҧcA2hS8sAbNHt*LJQ+ QQ\vIF FfիWSdv "R{MJy7b/0!e޽}ji;|H9z677c) .MXv'yZi8V#]?܉kJoV9 c@Fx|Toxs0]zȨ%1?!CZ? &\r |pL;vL7n^KW!͡;L!GFxÔowlX7ڡSRty*]6!%\nz#%RǾ9yKII *ȡC$;;[:tho7,0mʾ}H[^ '-o%MCu%Jv }睐o;L_ݻ+ᦁݱ'ׯkaŊF^`,!^vsÇF޿!~ NaԗU!6{KXV_-ݻwjSLFZL5k5˖-jy3fKz5+)PuBx#~ٵk!$>|Xo333WQD,'nʶ4)}tvDڌn#db[%v ac!:Ѱ:8za?8i}Z^CI@-;v۷oqjl}{V777 JWs 騳n%ެ Hu]tؿrʪ1ȃbo$wRݦx!޷}۰YۤVr81Cz:&͇o7B]#LuU,eXP ~qzN a+^Ƅ|rmFSKCc !/&>oVur-mLoV4ZZjj)+M(!$ Y7q vI~ߎk SqmY *-CH!Ķ -* wfg%fYxƲCpwBB(B1u~x}Ӳՠ?Am#ΉƍY*1aYzrXD|r[ov7aLLZBB(BP.WorA3Z'w8yPmZ:@yO-JWqmժU\8c8~-ŨX8 h"jyo槦-xñ>o]vH0`AaJ 17Bx Qf,n7ǎKȳ&M$_EY| '<o讛0a{%MD,CnP6|EبQ#% �mjfU_ "ZGڍ65j, h{QK\;:=s !P E j7 J?xڦXHk֬kAF!$?mjHgK(MI.[ vɼ.oBE,> X }nӑ#G*BF!$L!B(PG>oxÈpL#NA~=!⍖7B(޾0cm ^|y5*a{á!<1ckIΝ3E!$Du-[J'Vn޼YLj)ia}:/9c6}XF>cLgtܹ/&uϯ&%%gʕ+by!^zEɇG}oo%0#ܴi aky|~cژ@;\EPn[۷̝;B D"ސJu]M7oݘYa%"` 6'<|0 ,{KV jlk%M:U[reե兯VAw/6t}>c ZVZ֭[=aWG맿Nw) 4Peŋ;2F2gȐ!7+;e,YRfs%te!ϛ5wKCzջM6b 0>|tٳolݾQmd_@1[#_V $11#atzkحm+f͚ӱ DO\\jh#""T7xpɒ%RD ק6l;~xiݺ-[TBVfL׺A\x11hw|AT[N/M_Wl7Z Ϯ]'CXRuB^۷o:X5m׮Jic^pA b 0޻C^y,{ ~j8~m̙o%ް4ڣY `Ix;;Qnڵ V +!ƹ ի6k݊):8c*`CQ;ovuuzoTX09[]s_oX`<&Axv(BD<]a'y8Kޕ3ރ;~S~79 A d/./WdMH9s$ސ?/-oV� @BT:Q lXj#u Yz u OVu'ˉ X$%ݼNě/u 1aEͩ{nݔ`CWxZ|?oNk`m\-nb;}\NȱGJ9Y6  'G&K+СCjax|ᡆBn6xp-KF 8P>z|\Eۗo .I!?>omwu0 jyn[l ͩHf ݨzˑEm:}FY|䥧<gh4iѷfxsby[7+e>mYrmɸ{K~L[7Y5uX@._I&JBy7>oPpܷoz 'PoXqhX3뗪[^K$ސJ(hSxR_ ^?~=P"P6n8-+ h}F}Ȝî73P0gϞ>XK|໅N:帗s?ϟgI!27lؠX<g5o\ ڰ:v0m۶93Ѧajy[6Z̬-a9z9(ݓʲ2wTחF;nlt8ӧ|Jŏn|  5j(;Aiqc/~uԫW/0Y}4GX4FG6⼝4}ꂵI  ՋK8STQY7|"ސn7Xԩ|oӆ+|i`oe׫WO5o»Dɉm}~$ FR7Xqz :"0 nHt¢ FbђHTm2qRoX4Qo< ~rF̎L{cѸz6m77x[fo?fK.Kڏr3D5[$cumd2wd9tmK0A[|<8HhT%`Z:F%F !w+]F7vXhmsٝ/^v֮=/׬ݻ@CСC)(,V7E!x#-F:`D/)mŪ۝49sPsqt$&Vݶxw5u,6Dmפ"e&Rи,F@C HLÚ/0|hCƵt8KF c|YWM狺`l-jha䍎фM/`%E!?΅/zRPAw*<15 Ň{RP|ޖXtqS~̸!fԗ'4T.1v,]CyysbyCc+^{Fh־}{e ֏ >veZ_iq0?}6_fw8^ .V=QUUoހ_*t EO "(a㠜/|'Âw<PBH[ޖ._rQ9?ܞXL>Pъ&r['VQ.pdyT|0aCtoz.8¢!Dcr49_ʴ |0bwv7 _EśZ󀵚/zBo-P s݋/v߮,ܢ˕^ 7[oʇdyFB,GaJ`6 B0hZyH&)W/is`XhtLay 1YY75a%}:Fi I4)(!shɼ=/ oS+d-'6_]HW`x{n;29h?5}}y}1y`p6Ѣ2@`x=BtA0_5 hSlQ 0ˉx;_>VpwLZ:j^ŨS ~x#VX0-X4W~wGʢT<Ki&7Αqr;/2oAxڦ5䵠x#k[|Z5('qڽ@bO+WL~\^z!"˜yC}0&| Н-y](!x[&%ƞIJr~J>~U{D\†9OA)P& &oB@]K*+WG93̊SeYI†7BxR->jy#B(޾BF!77B)͗u !!PB(!4fKJ#K<B((!- NuY G|֣l)~8v 3!oBxjcm56wn˨qCߠ=Q?]K|ՈbPLduAsY6x#[Nɐbq2qDۆ2rw?C=zR# W2T[tVGױc靊`SV-IJJcP7Bxon޸TSKRf:tڳgOeᒒzY>IF~$TJ'k[%`Ζ[n˗p7BF!$ہ){^SL.InI xCe202B(qUCwnV鋶Igj{Ӳ5`>tͲׯ_R`utg*THŽ~ZY +V6}N>-M6bŊI5dӦMi8Ľ^,X-[V O,7oرcUl27BF!o{һ�9s8uE,{IbJ,UJwl\%W?^[ȱ*}xڎzOƯKT72ID˲!|233-[޽U͙3G:u;СCW\Y8#F8J3 hرܾ}[5)S8N;w'ՓPBśx`mp]Y⯤pɒd32wse4z{wdhy?y)Vٯɀsjq.ٲlXV33񖑑7kהV^TZUUWJl:MGx#oBf)eZ~%X%wxUr(g5/w-WFgO]*ޣkީۏ_ʈ?>}B&nMyAe%ތ~hFmidrI:uҌªxN4ݬoB(,rM`=a.3ozU$gVJ=ҬeSx[ Dm_J{(Öǩ˷ˤMm}6n蓃M/&&F*$xznR7Bxo+ƣԅn#ĥܖUxkٶ.\EϚ&#F ĤרJZJ2>xl<rUm<&^,MahS8[7I΢ P  ЪT(xUVh^*w?.] /x#7KtYźC$)5S.ܼ"ى7I6-e`�9~%|jVHzWjY#߼Kq{J#yCW~73 &Gb[=geC%F9sQXM 8!Ft:3M !Pkn2gnPⵔi@5&EEڦPBśS[\vM*TRilO_I͈r!gB(!-H:wNz!G篤^298fB(!͛x#,$|,!B!Bx#Bx#B!oB!B! 7/_L 3q^0355կg~]VD?{ڵp<XuΝ$}K !-ޠo.~p_3>$޶n*| 7H3A Ow}޾[oɲyfU?05%%ůgbӦM|&} |5 ae_kr=$mT1yG_/_qF@yxLYyBu_&l:SNmH{%-wu/;φCp?q_)!5@n:~ ɳ ɢoz"cx ~bߚ̒ʔMeɁM:"ߴ^ mGn5{?73y&!)ނ{6`۾wk@m͚5S~'G<O2V_vvw[Jgr o _=_<~nK+dή MnJ}])mvD.U-Xu8tTZ5מ~y&!)}xN.w.4KMmy!Nm}z~yֻ5 j*e{RĀ-}oZl&"//׵cK[4y=<xTTI+&mڴ#G4m)pL3t=8ȋx?_uJ Yy^.MeT!Y,ORQ;Sdd%޼ݷrIw׋͛PV-IHHg*/@ BHx@ ȓ(y2g\hP.u"޼Q`qHC>feHƍhѢRvmٲeKȼ?sxtDGGsa'UQ;|JY#.-_wӤ]^ԩL<Y/_Ru>nӺ84/'+&D d*nZ 柕> dKj)ni>Wj^-Mەg2nMoۃdҲeKG(\}6l@ BHw^Kh=rGS:u䂫]F܃aє)*/1!Y|y9p<{L$222`[o˖-<paW_ɍA,o6_ gb\BZHGTq)oF<yMIz2׼ys5YKΖKŊFҠ14o߾-  ư^{;hnfCm'NH&MԹׯ_M'Wiτ5c~wYi1 [(FKeݾsUyzSeD*I>)CQ=~X/_z%͓5jH2eԋA{Voƪ {9my&!)}׿~Bεk'Iѣ~p%�Ubc9/x?ZN|;K[oK,Qg_V8&-w5O2_|J-?'KMnұcǪى:MRE3gjʝ>k,رZs=CիWvZwxܸq^iOٳVqVu#ϟ?tv_p=~H)_f|&r*]J{ٸkI-OP$(1:.=fnxo-++KfΜ) /]T:t蠞eĉ^ٽ+۽s6<ox׿r ֭%2Ds]uC4A^2 FZNU;K[o .t|r'r7*/[[?n)c˴[[䗍Mռ2<K޼|ÚnR4#G*UHRK !~葲h5k*x_6맶t颺g%0ÇOqF}qVu,=0l7 4 _}hvmLx'uӎJChVX7[^=u=xU~ڕ9ysO BHx`_<{&-ZH{նq 8k;re<ӧOv{߭<*۵qg0;Oӂ)avs3D͋tmOgFO󾖌,Y&/^�r„ `MC6Ⰽ7O0¯lٲCuy+[:̴vqVuObb=x_w`0+޴gi8M%mHfQ9)aڽ{P_⯷{nvov<ǹM !$<[.uY39jgou*:wkqHCo=ز{;iWv/n[AΝ;736Zf!~\ԔRoIek{veJ /iD0.1>*… Uƀq̊0Lwv=XfvLt8YNW}ұyp_ygJA(fY*E#:EK+ɓnf<33Y qLթSG?:ؕ>#Xg.tiS9^\oR5i"7ZV\s#iȃfeDDDNv{;K[oW BΌw;A>L1vqiۅI۹q[-~|RJnG{kcǎ)4i$e1AMӶN*۷ׯ+ڶm+ӦMsݱ0k"`F\cڥlG<۷Ou!x{p?q_oQQQ k,+e;GḰۥbf?dj>Ww_"wɶdԢe~.^6,Z=Gw޲rJ哀{]ۤ$ӧ}ʲ+۽-Ԕ,JF ֻ]ۨrrݺ…8A^c,ֲ *|l=)iv/n HGUɏ)r7F~^TH~;/J[�L_)r/2o-Dp܆c!s@7 é]^HiڶYGn<6tsx!ˆ7/ urZ7}&)`nz1_^LxþIv}+ofJۤlύRVv)~K͓?}%.;#2pq1Av& =A0["Ν;kV]/Ln3A OˡgX\RE.֬]F`)ZUAw^iذ| [_x>}:8NJês>NY>j uO;˧]6.ںGW;ꪼk!ckpݭ>/'M-Z-j*W&W6gt[!b4G &;_s<oO|?G˕Spms G+؇�LSLQ#@aB􆱲a|WJ_ɵ =_G,gK۽UR)ci{lT|mAʹ]h+,>>3A ?pUK6✦wk@ >f9O \jO$w1-@Acw7L29dXiXtn>O]Hю+Pe5MM%}5!RB|۾wk@ Ss3vQ(8|X|Nb$/ j~iΜOsHN_̒n0]*uY$svKT> ~3A Oz[oXe�#?q`ƓO/_gKQPLBSi \?߭ѣGKff%f_K_cWEcLrO BHx1c]w+oKSaƝ;wb:Ly&!yn c>|8 3p_q{k~F>4ޭ~7%N |LGkDzz:.B!n[B!/!B!Bx#Bxx#Bx#B!oB!ooB!oB!n���0 *��̛�� �b��0}UEX����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/images/front.png���������������������������������������������������������������0000644�0001750�0001750�00000215501�12161032160�017761� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������`��� pHYs�� �� ����tIME  ֘c���bKGD����IDATxdGu]uOU! 0I""`[6|lm>68 0$lDB H H9Lկ=wj_wbޞzUn[Vmu[Vʖu|ugK n/3_{ky-q+~궺nG άV//*nK</׃�~ڽR9w1{aڝUYVU XR@q|%߻BCSKKӏԉ6+0bV 0궺YX{g UE7* =+,_ѥn ^~5y a[V]+X Y�(ݮ:he,ޕ7{t^ 쵸%@⺨Ce/ \~>6T`ef]Ωb:+{o)LxZBߊL4={ͽ ҋ<=q߬Eǂ{#A Y𨙽nv "U�2t4~ɹjv҄j @((=j7r�B6{MQ�+edze]J3fX)=^܂@n$OVt9ʱ*zܯX-T)*O<__O~h< ]{^>e=^X'{�t>2zڇ�c39 "9 ZPKG+ Җ2UY-b:ˢz}vwn]{3`+ pLE^>yxY0T'OGVG`_m9࿏4+:AeM9 弔Q7K@aSt0CrP_sBC{*,/878]"f4Ueen+w'|ٕW,.*õZmS?Z)5auBV`s=O'sgoٵkWqbttԍ580o߾C{9~?ǧ~pjj$3>t TE)�~~~AFTXk>eq0sbIU73PP}h� �u`)8%By:ס]H;,[?44׬Y~xxx߆7l0uu[l?76mY~Ȉٶm۲K.dWՋ.wæQ ҜZǰG~ꩧk;87==]ƇGvO( qrtNG{0"LxpNy9�>ƛfÂ[trh@ s/S]: Pfp_)Jnm4Yk}8 Aj5E8p~zG=s' ".R|U@=>+^&fA�z=͛7 Xx۸q<pk:֠-|~>#fr{37|'@?]~FG�: xT7_՞޳*zV<|fff��6T�F?sP{ϔn܃M�߁AӀߊ7fh Rh<4]*`usõ}U|+r$KY\<^zWAj*0yHӬ-vgOϺg#~A яx>Z�o4�P9@'@�O-FEi}׻uMoz"Xr9<C0 Ԩx*A}ֈy�xطuz0Y"~1}4A){ok}6g t%�ԯoYw/s_Qz2,pk˖ <E?Ic j�y WI(v_kgg_^�h{42zc5(�;T#�Qf,Pڙ6: z^pI7akŬ#r@-Nbyu&SH $D2o#îA6ᯙƴ�?96o/;FZר2{+Aq]>*%{ J^|>^&*ZCXGڹhȏ#^҇>g�Byy!:}3!zހIm?�_ `Ƥ!;|*'e\?9=�Tچsݻw{:sxi`YwED, S@Iv<+yg֭n۶m֓{?7DPjD[�7�:cm_38ϛLM^hAh=㶱3=LYMzϪKU3_NkOA'AXi*@t*Td:Ʋ><ëcag 0k� As-Q8�LC-?oXnVO/3W8@`u]q·7a"'>Fd|=Ɋn*]Uۍ8Rwv51<AoaC'=F@qc7Iy"$`SV805�B4TI0Ox\EY�p(;nNbB'?KUG~':9r үH@0dwO8wkd?!ϸp؆Zq@? ִZO,A~~d0�>|1xcm ;wn#MaV/�»Z-D@7}CDHd "+@|';>8oaT[vC8D톈 %pЀ6 z<jB3<L۷o"PbtG�iR, \I:lݴb$u 'rQBv =N͛7ٴiAC?g8 3z 8o��� ^DQ3)k>/<fж"dRpNj ��03wu/ޖKHL`";"<!?%Vb'+S#K $^Z=w~{0I;O oٲeO\LC=S[ ѧL4h,34<1MٳgKVIn�UfBRN@ҭf7H,nyEGs7mVPsѓk sЀ!Nr`?a0 4 l +MJDE[sM4 Mcblq.d0,uvTߗ *`J)IViN5)NoAz σ9 h3,Z80Vm`Y[ihW]u/~򔧴}*� hwghRYzw7N;͝|m-vxYKM=y-|*OIO6ǧ ~�>>9,:pIF8&8 tƌ3md]ù]@Jct1hȃ�Z>[H&Q PGq;gPb$R|ȯ31}? h~<nD028Ic,W,:ޅk׮ oOs|s%m櫀.k3:tOXs#O{zlZ G?r__;;D y/"|;qq=S6W>ٽկ&FQrɢ4 y^US[8˟MH)6aЍp3?I 8� mT5`&Mh°3xlZV(N?OwՂ|V#0�E`4 |@ >O߯0}|i~P<Q[XQwrjs#j(ɳZA%/fcE_>; $A@z E�#E,:9syK?2&Z@ЦhN^vuUvu*>cJHi?K(R{#n p BN8}uۓx'AAAcٱcGR~s)¹5\n&?<"9c6)SVciz0| reHЌ2Mc÷_3zb 9OGftIfAgB~>h@S\ˇ"g�.9�6_f<inji81T}R P <I D3yN>b">p,&բ6~]Z%v̚33Y Ͻ5:{[ߚw;:+?餓 (O| E\` <̵Ef,]%#�45Ma"pdYrl5-&IJp_ҋi g?=n='?q_Woo-m~B(^G{`} .pwg?�;e]w]''!&~k2A)%pDY>/¿_r"3 +2^, "3xN=Gh lr8y}1wdG3CrZ;sY �0� Jr|pN[?udnڧ>܃Y.^@wɽ`[0O< %9ci(;E:ڀa~0Lđs>EI2 g_WsY/QvMH}GPc "7rncm.�m #eŒé++A![*16S cB{f� ([*X=ww#Eˆ}cc`*[ŀ`<3+7d<)נh2hT׾5#Vy哟dߣ߭4sCR%)jx 5&ϨXd~+LHM3ҷj;ZE%.`n6k�E zȤ-~�k{, vi�+m۶_{}_;�뢋.>l'ԣ_xᅡ7<]d^ʍ_B;] M@ڵ?JRHafń_TN<^Uɱk|xe}!/DLLI&簨koWD�}хtb BD,ʵI}[Pg Κ5_qP8vI'N=TG1-~|zf~~y #8& &$.,@"HĖ-[ Wa0s\oo/~7bΝg/~` f�TigMn>pgAKk<%j�26I qȔS7["o_`s M\vЮ0yѸ|;FZe6sN'>u߇5׿^җ_|q3}oWO|"~Ԟ'�8� }'qIs1�>}e/369Slh3Q}B EB߅Cʬm^TWaߩJP�elxv @Lӧ}H�О]ez)}w]<Vv�Jzl`ʤiodóg?<cZ�3�4Cs/U`1'Rs3"w9d᣹wL}/ZlHK={4<up.xVx"L4^{<{_M0@2c3ژ m0B//}%b޽OӜQOo< |Lye]׽47 }ϤMkjt<Y,qEǶ54 <=(}C'� ':~+瞛{a2~.8}sL^wLmk<AܔAy(g)j.j\[ַh#N栥~UDVسƔGaq�t_W% 1N6 DL]jtZQg/@l ,:l[c5MA(Uz b:WY?$Ei$4zJF 'Px>gr@*8|}vL[AZܷm,S<;_iC@�8a0X\h"^siׄa~oy�c>3o{Ѹ<�p7ܽ{7N�N,wkJyF!�x?b �ȞP8|K^~:mh5qh+&4>׿gvQyWfVY)nA(zL鼊KC)e`;/,/�R+*Wʜ`"^GyZ%RCkXi3W0qbJ�8Mq0�ߐFw{5iO{Z{ r�ٶQ ]< x4 { �:iXLZ@PVd(N<M2dsQ9kbʼnDdP<v A0W'{_ >K4h+.7p& P\}5'F`L2x^)Vg@cXHkp.${" 6LayCODm{<S/b~3L&^qfb4;zYg8ڎ1HX^9`ΙEa5waR^G0f*T՗E*d?&A]�`w*ckqW/e^%v@�4^,� PO|bU|Am@x^9D~'Nc1s:I54.,M/ӂ,MMJ@(eLpa˪id2HIcIۖ38 ;|c�B҇H*0T}0z)<k#HM|',X534pa ,|=0OI#E; �_{ch^BB!|z!d� +0U@Ύ|C_!|ykM"lh ӷ-EfT7YȁY, V;UNin9,$VxJ~ز]G +Ӽ %!�AT�g.*Qp-<v~|{svŶ$�BÑv\ =xg>h 8gIx) +dD&ⷾHV.cUMRlJ *#Nazk[+ IN|V6!i22BH&HH[g皫}XPst \ FR;/#FbLi_|,0z@D > އ{OOZvh"836mTDz幅&Qky3i0UX(QKq2UnZ_TciS,kNV 'WòZ`MC2JHKoE` KB[ W`R%J1x_̺j|͟韆k1mr Zv*T2(șz7݆,348䦣ͺ�B'"D+2/ipx*"u#L;#zl'Wx4T&JWϦw VH"~(ZDk@"x%0j t,&;wjV˰@ttNXj?II~)9T>8jciq&#keqRDrpXe<c}&ZM 15Tc󵚅kC:.K;si"v _?s$5 ǰOz`to8XFmiWL?ȏB hJ|B9ovSn b})X.@o|d׿ t+Rb~~g3 ?̭Y3xQϟ,EcYE:cRœC� tA03:L^ N@h7gԜӭ=eαNRE7Gu'EDRU\Df@ a*ꂱժ0t<UdsI,.\vv@FeH@F3iKN}Z8{eJQF45es 9H"2 �C:~Z0R̭'`6G! (jF8ڥ"yYYհFE\8 tia ƚy.`gNw-mkIF܉'ܖDá"JeU\I#s>#L6KSiXb}h9ǃpF>`y/|Ppo~YzVNOoZߟz{7<4<ϙS~Y5QNiQ^S;8aX,P�>9 }N-"GvM*nB42 2wMc;8FsM<k5"&!ˮFrf +ZWߨ5ȤQ("F!\�Mh!Ay<.L*|Es4lʴc}fƇ"\d)]ĴBRa𙹏@!0LcnL)Ac1k?>OG)ww>;{Iq3A"Wg5@=h/,A}`nqnx۴8w͎n;ݴ?N \r%(m�J9DQ h(:Ih$G]^dxqq@9yN�1hY� 7ڤTBx{Jv�Ė28vM2 "bl3~zDVC:n͖ MZN�JEJb)i>�˗9(=_`"v)P}dT)6& j �%0&YЃBc)Be =#&f3\+;W2\dfi`"u֓fbLl"Ҵc1ԝ B-E=2Zs֬ !3=$ m?a*wGИHD143�Pg:W ў@_IsAֻ}Mzi1=2/nZ'tKLX<CEc{v;v'w'w<nt[6o�ow`kl'f"Oh~g.�8?pvɴ;pAC Dk8'Ox1O8^Fsh%= 0)oE1w}x0.8PT]v': H- 1嵈2s) *z<LM<xw¶f?t52H  Wy//)KTLumkr~uǤbđXoN>E=OmWe s&R� D &A<Iclʴbyd&U!.CSA",. QBQ8ֺOSl?SPZ@kYmȔ뱬V[o[gy4r}FȍcAhC5,*3I͉R])"y}}&_ݖ촳Zfjhz<5i<ZZ�µpԍ7ب۳у{yuObJ.ro; B#| mB+'v@гim t5\>LP Sh-͛ W dHMX~㞜\/kV==Y,xMƳnd�%h"~?:Tq(q.ҀD`y^xa,ЛX0|] uUJ1Q|*I@RBY) Km-9j<462Ys+@<7g*�O?RaE+3XEm~$qj:E5ɥ]4"8ϩ60bĭWHᐿ[&XTfYЈf�Dx~dHV}߱Vf"@9�cxZsj4՘,Dhk25L<7y`8o:KW频 H6'g~hy*<�kӼ1:17<X rʺQwpT'Db'v@@m8)`ޜ|gX~1!)]i#Zm8ϐyv~9ID{;/@ՙޟYH�HvZL=qu7߱MLNi7:; [Bs9 h A( -' B&0ƒh`.얒ىz"y%^1Iv`J_VN1߯PFY5]Y DCސ]Z{38&)j �k,)-082^ki0$]Eݥ$J "H4#/yDHmYk}fb=X63ԛQhX 8|2ZWDfcD @"Fo~-D'疝y "0c~PJ$<K˴g.wMpX^!r;I))Xf&�<?vx̭)xRc6dg^ퟟR'<)ڥj$�͏!:'c"*em lv6[do4s3މ�HY^OpkMGRdڒ~= -]90z1FAc ; e4pT%cX*u �THqO2" HrO$mlH2aʡm2p-*3"~Nej iU@e�+VU{FDG-Y/),plA-Ef% DhRW=1A* X<z<4^4g]e0v%^Z/R柗�4s̹>3X` p䝀"QDlpfT#kCneEc5ky~0:&ХJU3EkuG 1ϽC ~m۶ҫ$JY4xKhMXŽ0,)ce=iI8#bªҨù%e<8gTM[n=�`(F>ej|$ m� 7L QRMy Z%8FLgeQV6!UCm!2I['lҖ<JmDWٰjH7 =@r&{ieR�UwÜ}h̜x\jslMce8u*}*)>Tzr% e] a,mù w kL3#A kv˕ gW$}9ǷjU {̣sʷuG T| m,J$E(*g]Afp+-TP*9R�MW)\1�ҩl$TB嵎JrtkKZCfiB+ZXI6KJZxf )ʤn{7gwIUƺL\>XRҠ-QJkxtl)l7 B LYm4u[dӸ8:6*i[b�DMT|ND fxȫZ#N = SLKzU&/MdK% LL8IAXݖy+QK&3%0l${ɕ馲ڐnhDhjܢgm_%T :eV'U+2vDi:ZRV{Z+]ڢLJwѱM\'ztw|$-S 6]nf`;p3ӓ?hpoظ=𾧻F/?IYD0 H]r>�VG%7}G- _銈̏iU=N(%*rr3>,lDa><<H•t'!21c &ݻp-&T葺D܃$D:Ua#ǧF~*-ТvըK vUʄ DZ81-̔2sm"g([ɵ[ȲcJ5e)eRSU(Ujx6np'ٗc7Pσekrvz{ȖZ:0dPt݀ ikd n p627& }{_~W$7 >4Eƚ$1"<� 0sٟY� Rvhص xM ~i Se8�}C5!;n6, z8Wf+-I#mV Ur*<p?M Qn"ؚv ,,ȵ><vʙt xpEz zF GNVOZ Ni`& QM~3@$ >O~ 3>0 >UQ5^gc1vh7Șm'QB|+awelS] fͤtaPp:l}o@��(? X_|q/zыд"g`[hw'@lxޑ(44x*9%#tڬmhFL҈ -ehI"ʳJ+cϮQ? oI<tooM699&s1!N5/NmH H41 2Zu$?!:IJ _D`6�-,Z9mg\``*"0 \LDT]lLPrwbbb/})0rJQ Ir$Ai3UMy2Sπ`J CcRI<dH0&#7WQ�,>E/CٵFռ^ ĕI/[/8 s!ӣ9<qVH<L[S!I �|G v$Q AC0~NxLď$D 1rFPcSYD}:h Y%4B0k@~d8B@`YK<n�0@@vА$]#0l-mi4_D!?'-8y…w+8JP/OKY"�h Du[Oh>AܯLb,3=?4ir'oFM#HLP[XJi\îBp>Qe*̡e(W`|0r$>94�ϓ^WbS M9ff2΢?C(hB ZVk+1$F@Phq2n*,fY (Tr2RUi<-kE�bFTU(�t cb2.j!A-l%6 `szv8D@΄f3ɵw%fWoTkl2Va`4^1,;ߝ&ZLlH[;b#B@%}6psw~)6I3K[ΓIl\$edtJL?J#(vN5 W$8f=W=kfuZ|u[:t=^ni*~۶-l+rUB4~WINy$*s/{9*/)eW:9x@XS=>_4Wdu[VweKEȬ%-;ekiyY5U~H5sU< &Yjܱnw!|&d28RlV!ʶ6k?OQ5E W/Զ/Xݎ6G ˆUK&5=?IXL~Ί:կ~u"0JE~痯s{nÎnxֆiw7s9qVw I{٢˳ƌ}21r0xz*~wa*Kc|~R@Y{(3X/F=Κ.2U,ŽUdJlq/:J *ENclĄF qo|IvwߡlAZ*qFp`E((j'z ',ARQaBwᢊB.e+#&�2cKUqy�ÅBa@B&'4aD<RZ:&e>/ƕڢMNm" ޫ ^`bwg�ѢOvŘ#XaнːƖvl=b)cBlʌmh`HYzN[O.sj*)IM0I[ -!\$B`s_FZw4Ph6 wϿƔ;\Z wbJ?R@�[>/A%qH+%*SXa0 &QR$B~hZo–b+ER75ve9eXA|М8}PH2해- lKIg Y5wF۫xڟ+& {B. ;jY,{B%)�1Or�Z6h*<tԍDQv[2ŏ̘'+?:wN|oD9J^EB~sf}8yIO%!ԧYg �guRMI־FKdHDAT ڕVp43 p08#Au{Lhhl0KN6c\,k`9|uXV? T&@<P"a\~[[Z&>vӰ3 ]`=p1I1@Yg΢Z&#`s2?0_q- 0aFlFHH0$$&&- !IAAl 8 XA%gAҹw~)w= dWvq+) .[]a͖-'>Gg9g- {$??o/䃖J Eaųg׽LTj"!+גTۅwykMB »(�qOzғ¼s~,ЕfqT�"ꀐ@*3)yD0י?0v3j ˰5M'/x;46&&gԌ4 p'l[͖DTubzT Hgtp%/(PjVdu4  2J/U>jX/*3wr͙v�+ #tv767 1۶>v71ǃ5J&D`Q %6 нBE E2E�pTHD=̐6L�ƈd{n0(3 DfѠXF<[ @@D �ꧡޙ>sM,& 4#nA׎EF|QDlT.#%.15ؐDI߀ DZCGjs%&ylɃ_t3m9476z96Lr1xGSzeHHxwn`9ȏ]^'ZhaaW( __b#h 4HT8GfУ )p 0Hy 4/>|263ZL֏F37njhs|ʽaW7=Ni D֖N[$TM촶zIde׫�q�(0"&1!Bh,H7LFtsLfitѨw;mz?towEPW,öٶLZ b^Tmjjf=oy\;i KP rZBRʹ/ת0#Kj`V$I`c@w &>�FZhWIN# _Q!|}R|>@KaeHzU=Z4n^{c�y mIbWH#q] APb@r̊cc_ R m0N>jU.Z75ntn`h[sLKhb2)Z�f1'<nc&@Gk4۾TTQ7i#D?VTnjmbB3uW2PGۧ|"˖m Lwy\ת0.^Q;G� 7vstw嶻qW7s[`d Q"KMl*MHi@-D DGVms?njfvo)}8@VkwPS/m ?Jz5is1яܫSJUhcv9Z=_˚;ы|r%XI j ^*^nw1а+7|)wn`p W[HHwt/=w{iW01`<b0/n"a7Mu6mW.FC1sa=:~Rf'D׿9D~Ԥ-_QD=٠Zuf0g"M*3{USLki&ҼN@#()U!URvut/WKeS~הS _s-Zߦҡr R$ A^p0D~k_@݉8SBe5nD+7tgD5:&mB ,1h"_C89H&p")ͅςN>8Y3 \ "QٟJ0AuK6ᾀ;4EԖ,N+A &½ ɄdF8Z2džlFCe NLe0ċ.(]iD)c'J 3R!9ߠ_E@Haکih7YzAi;fO}SO}jwJ 5cy~ ILέ(,]A<ʕgWm<| i6&ڙY 5759ZֵB4|8�(Z axL~&fB+R�SQg.%AX/{_]k!YMfi:+f}P!1;˅^hD;|3Mf C9Y^=o68Ѻ�4|'<{s9a-o ȠkIc5Lhq å} s!bw}#_bC ?3)2(ID  L5TNZ6ތc"k&!/o 0U#%$2#Jc1nl-_ZVԴ{`<h"xuF'¢Rxk!v&$Y3DLJ^cP! | LT&]>aHOZX؝￸r#\+@+m4VF2B tz@+0 6K_[Tʲ{�U&׾Lh1yBHEA s Q|H÷9 ZF8 "@ dw -FĻP7�0k`�da܏wB[c Ki iW'̗w�HVbeNeH7M@>׍~:PQG@c/yM3h( lurco| 79`>\HoEUA̲QL:9o:[ZTt")I$8.<-mݫ_W"-s;|`yh@ RZ/) idEH;̈́0< >;*zL"p+HH_x< I܋c\ 3xk~i Pg}!")3VSUfh>\wA:_x/=} Ag Ba+9h.MnT[9_¼7s#�IDvsq%m@cx7hDI'CH49kp.CP#cs$ƴ*=ƌyA*ؑ4û@ .ơ! zF\ y_=+ -em:@4]N.(gb*7@ #dbÁ_I .{588`ϰ,bwMAxLڃ 80a:wL*¨D7ba  x̔<im OxB`0OA<ʱU̒k!>dL" ٘̌ E.dB0\)&1Ɵw]I C 7h9�>670f sQ-6 Xհ!hmAeux31/~q`�x*N2l2K''ڇa+01ހ*m 3h3@b.dh{7y.cP,o8&(-Ԗ0.Z2|@f\hZ t}Νʳ̛]&z)׍׾'!_;-2_:FH؁!$:L& #E� \75y]tx$c=lђUf1MMpu<S9'ʰEnlkLlQ&�/ ٲYM&n#$ԟ<ώ)�CA�F4:g"k'8OEGjSYV*=ħwq0E1/Hyv%Z`b;"Uc@_/-+ȡ0Xo^hlE]4Ww~ߋBC~'Q {L%9˾PE+ڤjY-9ҋH?^$nR 1Ӌܚn8ebqJ-MmK.fV[Z<}vz~Yv1~XIIL{@m$&Iu-N~󑂑ӈ-ƯYlKf]vll^cՋSz&Y#ǭ@=ϳn4^|Lm>5Pe (O9@O wN67_JwwX;%ĬqCm u\Y",*=󘧻K.61w^=ۺN\YZTH+Rd|Kcc@p4E ftLMz nCnQ# /Oz~6e.:<[7[7u qw5Z c;Xoi`l7Me{DշpMON Lщ֭w{inuƛn \Ɗz Jd3P4wn ,-:?eySNzt h4*MUai6=a&2ԑRGDBkFKYBJ`Iϳю1&^[㛮kCe>pkFunȃpQ<,Zf )",5k֪,:7h7n6#+𙨜[7 nVm}fK izM+[-š[]浌kE7v'8o8p2B0pR"m�$8A,gs !c  UwDH3?e*(y,1s.i8�*/(=E k.Z,w898UjZ1=لC'fŌvܧ66BOr*6Ȝ;X摖ŕ_ીtL� *N(5H!@uN ` [B/ RXTjX,m0w=>YWysYm%$�Cw; M[vzyp|xe�rx,JMypn'oDK<=Vqij ,@ثq�4; . &1"6`v eʑYlu^>T$8.9M `@0BZf`n <ZH'�"IDvq>CD= A ڃ96Tch$8@8Ä e&KɖD]Ϫ�;o+ " /5Qsy5[%7l@:@sWkT,Mqm D\zl6=iE@1u qm jɠCħb HÎD �!dwi;q[oW -a>֮iOhEnsR0=-rN 'O-f&1`r= ,>*A(14O;;gnu(p]�k- GZ3HZ_y>q%' @BJP6FǵtC_t^�=xPY< m3U]%8׏ z{2h,w–nǮ}ײi'l 9Z�ɩp",ԗo۽砻ᮝ0P= 0Q$2HH: "Fځa<L~BZ`2p>L@{Ad`j ]z7?s[8R6ׅ8z1yu<mݸ]q@\KU )(1I!i*O [>66H%Ta0ey.{V� epm3twf.nʙ";Y+3P� 6[h1Zѐ>o`GeUN/{@b\/2 $Ap_+47~3Q2N+ҿ~E>=8tf3nwݾIk;06ᮾuÈAwkrB#2h�ns;41^`j% m'fܯnQa{[5 )ZR@}Lz<A>8<70WR1-^$E澻:w~ak,*{ W[`T$[^z}^Aqh@`\iu[M xǴ )+zxk~GbbS\<ũg�<* 66 ڧy73vs`J%#I4h^RP÷xwU Bw�Nү6sڹټݭ׭ e.srWVsp<\40P GpEރ^hGD ':i9"iӌk/CSdЕ4?f"lCbծQ7rg <  0kM#$څ]:1۴vc5x` ҵ셱Oph' 4<gT߸Eۅ`-jt! UVU*Aа;Pylί KiQ.v�nlr)=Fq-};;i Y EղE;16RkI3V]57Wݵo֩ô Ao\Ib} )cnAޗ:g,NRS\޶5E[Q$K^AFepU BakMp\*$L0xcX(9<56~!TS!DV)"-Al<vs?L 81C]� fXj?)�&-zGGBJWnh/K0Uu>4Rf_ 7/bF ^YizYpd 7+&mfgULme+/ l>{LF*U,Ii/,&&ȼ�쮘 4Pw  6-le QLJ5oqx̻v͛H&ꈺG�'w}{C(Gpc+xu�#vj�@R[]uBKLwVb[ɛ~7RmU+b_5-Č$sW{אI~6C]똶X\/yZ`̓)Z{ Dfuz3Xijg\ι󮝁+ @ᘋݷ}r7mn +ݲyK` S ]U7I&2,_⊶=J9Ju JgN2*aFS!!�-Br6j1!A P}J1#`K;l8Zm"@ 5+*y!FlY3LSfXui,R9`.|%R3Ѳ12ZzPkBFkU#WOپٝr{x&H֎m8 �6[$kk$2:{VHHWav]Koɠes]{4VQTDJ_� ekWn;:9sazǴ Ww۵PlW,nMZ)dUm1kQ&4|Vq;p10&LG'tG-O`h �R<@A_�"$IW| ,JĎIddM 2 &T�Cch`zblXSh?ϡ|h!hQ%^j&ll�Y9a4N46Jސ&1h%>3V- CerKZUfST3sAY缓aQi9`-̦qH]ث9#wm^gT$6q'l۲m߼mݴm _Kbt,#w+hMLMvs7,3aoվRo4ι'?qW^yU[8bqab컭8Go|@ouWݰm;fP Z!'}g ݼS[/N%g`%5h:o0M6|N7>kB[]7LbMzuux]1=ܘt\pA`PO�Fͱe$ Ln9tsPeUER4gDJZq}Y^^o=`mj5> ! ĿiwtL:F9s$t" P2s~S֋0Fcǜ$0< 3G*AOB Sshk#t ULQkO�Ǝw}X|g{!/E_U4N5=-Ѽe^deI<EBQ`b4107L5yM;hw[:nnǮCnρqנsa%vu&/De'1QTPsi"p$l];P>6 %rJxo :u$6 a$-ހ)`j8ךr! f}\YHkh7fV-6 fE/sh/L̡x0W�<� AL'0ߙ%Sy=;31+2V*1.>vKߡ@;0h3b7r)d<R[޺Jm4h; UR|l�[)�2Ӽ4<�3^^_}+^ĤO(b,fg.ࡉ b2b&aPaHwHHtLkcp!<[8-,߽H6N1] 9$&\':V �'w;Eџika"aH0D@1GLoi)F0s01)i0$S\VYC0WރV/ĒIRD;�6ޟ~<F%lLL#̅aƋ�! {7 ;c a1^h" %xAWKygΣVz *ڋ!j7N/XB/9]WOHB^onLIV쒶RՔxcM*'o[SX8(R@6* bt~y1EjF&0 Ä4%A`zD`G=Eg8�p:doVbL0m F~7,'7 `X p$Ew\y B:&4@C40&ĦF29&&؆_ƌ5SkŹH7: PLD)9<vsOħj`U€�JA*'L nOc�7ρ֐Wñs==CVT~?60g10kH1OU BV6:mB + ϰh+HxLjUYD�L]%-$MxkAtұc/ E`ovC1D+@ԁ$!f[WzĚ><6n@_!`9nZ9Ü0Xe2Qib>` DEf   <$m~1q $o �f9*&n*E={2AeNXJӘ)/BF3KdUo헶҄'@҆AJ+;VS̄ߘs2GB\yA ']if"wѻ3T\eCALrǎ&$ A1f>34"MXe8nӜpWBd ק+hT(OKZpm"M$Zlfknyݨ+ns5+vT4Yq3x `$6Mz}|A3ѵ|ǬpU~$79)"{Ӟ.'ʹ0G=/q1 @N BmY6шT.[g&PM<EY- Şlx>tWICڗ8m퓴lUVJ =уG`J@h�]Y |Q5|t0Y:>3D²:i*ԲIds=8M5nf9Z܊ Qx5!ecc1'ɤ}`9 hx L� *Ϡ^Ck@Ñ{rczށBbqvG|~&Y8-R3J|,G˦`�(NJHEOU˲!?U֭8@ d'ҼPN'_G R5ݣƉQwIMusBǁTgpsڏNRJ 9 ,0(Z$G5U:NN"Ts Lp78Ƚ@ɉ܃g|#B0Uɵ\¸r@l锉ͯgϷ5`1}fE+ V]5Ү^^3�GΓEkeLONŞ銄ȒVީ5TGhd5zm/U  ֨_0x[ eVF$> ⸑I}vS�ݾ]2я~bX&)g-i,'x8q`rŀ3Q`t^zi&rY/,NuI>]r39 lƍvOLӋMH-Fa^ yӟ~c0C$L^Q¡)g0v@� �O / C(5NqK6�o@I~$ gy @M<[ 0A-#_}o3qih;I+AT 0r>48 N='$rgַ7ᢘ-a~UDZ! O ,/Eߡh}ɹ |0^[*m~^qB[ sdYj%`̧?+t{(ЮAHY&,: a>R5_?u#wCn(,T޽&mpgq|`ZL>I ÂHgFg=Yd&'A"#I&Z {"aYPtWt oq#FcCw 9qߵ]Xhi]D0h/!8)xW-)Jߝ{Ac!QJ*=mJJ� ;69e&r '#ikqS®t Uq6|SODTa@|s*"tx/ʦ'JY DQ^! .c=)i#m3-% Ah;|0whD1hT5A4UcL!]oJ WFxWN9f`|,yޏw@xC`ISRe'E}kx.@B."L,X_ 7nQs3٠ NTV̜foo׉B"3Lp,Ĥ織dsɹ�L 4"rC̝| ^xmmFZn.#ŀ2ANr$'R .短 fȉx~UWw`(V$!r/ #{89BP/0@�縍j/R>F"S2ZJaM JY UՐ*%@gHG_P9OI�:B4 h `FJG_?b#S-�7Z5}FDeR5&O4t?@bN1y'GˇVF�+=#.ƭ^ B�Bz@œe@"!1 `qOAU  T5{Ix#[fЬX@TIg3S38Â'v< Ccm bI Bh&HB|F=췜7i{ ‰%'a*n;}$3:f3}!ށ*<{oߙȩ�.@I X߄s#:J%�h?-LU%10a>ZCə.dg?;H-tr@ldtH "0bj2/ʤhKׁi}2c =@AQT?V O?$@M c&M7,Ek�<W0VЋ~: �I1�I14lV|"!ȩ3`7oΩZIb,DfIc!3L~>|ܘt"ig�eu<�)NdO-WE=U60^-J.FtG2Pm*ٕ<MeN2Ǚ}^ e9;],rnjc Y0٠(@ cΘL> Rb^DS=BcyL^7rVÌ0K"8x&aAK(:o5�><_ -PFGûN3! J'!ѣVd<" iaBjS˜cF vhNЃ7C[tS*IV_TaA %C+ډ6dEm#nꎃqz=]z3FxmwG%`zիe`D8! i`SȊb[+nܦfAVqdNAfL3Ӯqύn䤭n&tr)Euӫ9H@"mI Zi 3 lq\E�6` JȔPs@ Zֳ۟dSEmHj 2.<C?@z hg*OjkN�[uƈHh!_0.< y �F-ŀ) 7Lً ˲&#k8foP,=qLl~J0_k|gJ#.Ľmך4VB鳟U8Z6'hMMwͮ4I^u/0lU@�ƩU@v'EyM2uIoa8_yPm.搖fC^}pmioQѪ+vMYz6bcv;t,$>"/) m~QZ҂JZ;L~*IO{O>]g/7m0 -ө[A\ hm@,5ҖJSdZ6Bj-$ L2w]NjwJ4,t^,=%5j NbIHTu]+Sbr--$'sd飓ODiĔU*1 %*NsIT~ք,QSTU#©[ \*DB5Vhl_3o*`QۦȺڥJ:z]VD@,U6&&J)>JD>!;ypìcZ1&g*28@[дJco^WĝL2_jN95v*'6P;dBQ <i&\xO$j|GB8vqHfE,`ժ H-낹w 1ix3GFwFlъh\1�A%D -"sW~3"ZD\ Swxp{䙧c2!Xed"zǧ} eO#t3es'-&P>[Q6Zam ?I gb {62mKUbu ؠah bq@K7LY!\OЌ`DWTHk7C.φpcǡ)!\cWKHE=r> 2sM2MsI;NBqy'%m /F@O(&xa/jbx?vPKNH$w%L3]f<6ڍAW $TT}՗Hc"!ukv5ǺD 0k p7]ӝvIw1-ɍ K^g@w�IO3pPNEɂMx`HjoyޛGIO/W,6 uAE@aiZ@Q83rG<* {T`z,4MwUWwUYkyz3*232+2_Ȉ|<v"XkIR&snb0Tvyp!1d:w/y/+@3\۹{%W+}mAXG$�^QN0NY_B<Y#E.wWyAyQI<* ֞UD*!.`#Z 0m0JI �RX�q!s܊AT.d�W@6p?` /ފT6V;73g^`pI%<vz LN%Xi@`L Ex3IpԢ_X,Z2/k ֎0dJQҖ%zVi@N88!UNcCA(Vm & ؠt,w_O2؛񙅆POƺ~9~jnsؿɄ:sr N/WKzn&{`#*\49A,,exXK%Qb!BhAQeT!Rz+IX_o'$γFT\ ǭTxҰֈ-"2Wj0'*2T"eVlV>k,傪ҙ�!i䰶㙪:T&'@�aSiƆ𻴛T}Alc92N.1ƚc$5oJ*^:C&ܮTyyYyƴ~6Ӎ#6o(G}f}E]/,;|ɵAa ccAP 6<C#Jg?ökϦ65Wh4/M%ÞnY`=wI=}c'DF{Wo} r59[%$ Rw<d#AplhaEw]_sKd+HzQH?TC~9{}.4:qfmD)H*)% L_!\ϵ>�:($_AW5pΥ2%ߔBl\#I1o}[U P Ie]+/7y&d,'@C @Tʗ눫963[E@eYb bm+sԳ]De]eυGQa.i,/ڙ܂}4 BVVXO- "FRK@0,r$Z<gq; RW^L⵸ͤlʁbp]VL,$,\>~I{aϹ)v3gml*Gؘ$D]>VC3j Ůᡆ�`#2D o:vJ�Sb*CP׽n$QeAX[81$8Q~dlI@"vγS3Q 4�ma%E4ތҍ76$eP%6s\a\RT4t؎HbEUٜ,p-b_j_s8Ӏѕ~*mPv a IZ2`HwB``IC0Q-i$iJ}]61֢){U aH?ИM!jxX`m@Ct]ukǫ ýiGtVV,ٓnb61Sc?/sn(c,^LHLEJ^3р_u\pirF}MB_=6*>U;B�~o~|>'(UqX?A9kAjG5 ;\+}F;kѩ{qc+qA@,R[ڜ\/aY0dXQ<vN.[v-|,vj:Ah69bu=#-Kvv|ʆ{|sN*il'0;&l e;}av=61sb|;(֓) d}%2h@D C�fq 1`BTgB CX$́t BC1\.j1 ِ؝HO}SޤgEQpǨQ/`ٮ)(|HdZqT�N˾I^-?p9U3$-I!۹ 8zmzq6#ůsPq:{3;b [c}vۏ؝ϤSM,Xa wQ~_9]4#) ^H!]mU7~7\u3!� 8�3y`~Ը7]~b(h#V$k=@8g8HEzK!Jeڝ8 UC[awB/<+͐0B>{d<Zp5Vݒmju6وGuc W..p D"n'M ԌvF'n9'U6;9md)n??vIw c&g|^/WҹїmG:W܈<pd|&phi#(T.F02^@iKAe,V l(2<+] *Y\9Fzj7@\s >")1"|( r?ĚQ LdWR0"~3^LgckC#ʳ>(=R)5(mS7撾0̷Vےj}!}D:n#2!pJ:yH[u;Lbyþ7mNqv.L\9w# =ybH9g @]Õ#c$tJ"n{ol"t}1^W5؎>4f/zOXoKvg;cTI zeȸ*cNr6%6Bd� P1|V bT_QCqs= )"=1O@ AF|T`T{yhu"J)〺<hB8O]G\Z 5exo=rep@le�ZqT{8-p]'(50h#E;8o;^sHY>'Tw 'sN/hnJkqf 煹ĞLAؼ,:JbB~;NJ?tf ϥϹc24!r=EøaRĺ5\j9pJ'T)[%_ޤ emo^+ϖǎY2z`ɣگ=vMN N"-R4t 7¢̘H� %�fRۀ k7x&D yTK \G[9GTk8>E5.&Pq|NP4'~&YG x1Zڨ]>{Νya,l j%VIm!kCcT "Y[Dʥ ɺÙCy>JSÂuxjJU JBԎ xn P26uy$Og�fmt�Q=8xJe|x%Qڈr%lҎR{Q63Jl@5wjOYUA^6]:pQEKEGXqZ7j ,qÍ~j8CnAx-C K} �$5WϦ@>@`hFn.Ğ�ROu,vc\ "l9-6"^�8-xBP6{M%.H!JSm} vOj"铒r7GPbG!5 nجw�` 1!\.JAjqD"o1ٟZ4}T)' I[y(u-[I &u=6?Wq0C]s愊ͪݵ^ϹվS]Fd( ~Ay5&HU²'~C:zB|^XQe %CĆ), J; n[cl:#u{0$|V\B6n/v g3>ɉa3Sn!l-䩅TA&Z G,S3>]b3$ȆA0!vK_xB![�[r- 36=SKwL*I;ELR|~!!Lp$t@kM~'Μ54"ݾrcI5H,\6!4³/eYV7ƈgp=رU/ (u2 KQƺ7~q�?� \V1 mw^jY� CZ\={l̘+MckGao Z/jN֗cK/sEْZc|I|C!p#n+*NWL~h'sF6@+V".K6i'zJ"?SҒ=r3^h{G S1{کSmߞ~;7e>"˱BX,bNH*xqQV1)XF 0D$CсEJgߦuV n�98J`$x*u) DVQڭcRwpql**0�8_si<:6 Cb5| {zҼmҒ2%{�ĽT9P g[7jϊh @�jVZS>g-UH!KN'5f=] Mtbg7Fb 7`ed0a @HQ!Ge-,?WcGlpWֺ]V/ٿvS68gY?9Gc37Ra=A@T,lIZ6 /r8JZ Imt8Czh pl �qdLQ1N� `y+8G5EPkWֳ/C|k7Kt?8$H\a?)cfLI "b<mmaB"^en*l-!y~ZάVVT>C� 1vI)6K"al�=cgը<l-۾ϱB%8t}-J߉+Nɤ/Lb w!Rz턻N' ˵KpmS9KgI8ǜOVmb,a'M[궃TeqэEDcxߐ06+Qڱ�8WGb 8 E_FQ Km�;@E䓺;@ � xq umN TDU7M57iFƇn1V9NjHK~9#]涝5ӮY֗S.3iVHCm_1A vaq6jx\w'A%s>78 kzte(}}40ڲR 욻]$U)[8nɄO^^!tstвO3ߝXn`gt؜&6FwËV(90/Y1{ T(Ss]&m"F h@!wq�(KFDH|'$.$,ExIW}Hm\}C:tR!m `L{!@`[ n,OH6 -m~GԧPMjC[Z:50x#e])5sUjLD-M*RPR[ t=R9̪_dVN+ HmSʺG3p$V-z=?_pa=Aw.f CIC:śүjk[z\GKnliqm ~1ʤSnL ف36ߓ3CVIڎ޽U/u=;362X|0aݕM̂!ƀID@\*&cUc!iZR*%}4pgs 䜓4#O(U\<pXU[�[:p+ȶ iԜR�(c#c<~_o �ٔ'.̀0HeȢ:E!G+M`òrTfځQAж&@ԩS*} b D$)3{{J7^;!3}CM&\tT+HղV`\f(3]@3{.[!ZuY>kp(rD4XXUS:kX"44#$npPF'QU9*.M�]>;no<cn65=g3 ŋޝ67W}pW c-Nvﲓc(. #%&㬌x�SB$DsX@V��3F//}T؈xҒ뚟i e1;�'*9u rX!+vZS Έ߁ 2}Bd6%GŐ4g�* ,JlK DQa.vqd&P6ǚm{+^o+k0QFTG 5,LT< t!.Iԭjz^G nR0e%`L C  ݚ!Cݪ}�QԪj%iVBk8o7ؼی?8H5P[oݼw8?cSEˤq .D.t7 ns9Wz4zQ!q7_'Hu9svfrܢkW8yL2n9w96QyFug=ہ”ѡ]/7<EFBոPsVjj綳^> g6�K$4t !1q"S Qe[�׭T �{ } I`Rܷ9| @ t� c9gZ;)I`g/ҟhW04,l@8X E9Bʥ7�$ 4{pW}wg75ȍĮ dPV6 E{L8hÇ~̎<n~ {S ۝r`Nۮ^;;9kFlFWM;7c4v 8ŞUbUQ@csSHZ<{q׎d]k|MHj)PLq @'*vllDW怋éArF2:Bh�6u(R( > "N'VqmH aWCj6)I80΃@ 6D-G)WP v(iZ*ˋ}XFa, �pe# joڈ[hP"4k 2BMYd贓eK H눭)a%L7b6 LﰓFDFY\8=lPt"2>.'gSr@ g(r]bjK׎uz6j9E6 v  0@Nf#S]SH Q;8U8?3D@d�$ ڃcǡo8o`bc>4+^_z/@'T~=tƜ h/s@?dyT:*)h*hjV7WH;Z:�I)XYHӬo>KzFNРod6+r[0�(R'[ܹ]ý680)9۷ h*b/xdwKʠnPwNrwl6;c=/ (3| ~TcjH9TvkXVFYSݤG@ZxI9U #ǸnuEB-殝rgU`=ZBU(a rJ`]!l4pgl1))�5*RL/*^˗@<a\qמ %W|Iِ$spRI| R䢺0c/륌ł0m1(%.;4Gv#6prMܨζ9DI8+:jvhXN3sx5O[f/go!=Up|ڭJ% DZ$ǑA* f5/:�4a}׳'mK z%+|u\!0WvK>]|?D椋z^Mi"prQ.*?R6\\E6fCD׎儮ħy'6flzW$q$Ԏ*r"r Vwx~#ͩJ€XPIAvjoE�04T{Y<�!Im+ǚT^ B_o>g7#Vv $Y�IVGD} 1\o3^2IFPբ c '7-v (nz#qŅicm\MkYoR'$`ʮ+7<fNcQkZBf1KEװ)PÝ\XsM;0T5A'u,D !Wˀ$.AWXϣTUH ЕZϳUjsAp}~6e`EWo ŝBX)=GV_"TisHx.omոo QS1FKQbfM_^t6j'x7Tf4:c[K`A!HlF[U4:I؄P__z^ _dPQ�8U 5uJ7O*,՘.*F*J;%Y^ t;+/~pPZ]}UϤt5X4u�$VZ"@XbaɖRq8$wH]k-�zދn$ĸ$TN6jf^z|U ެ<JXmh&$,:·\fє+rjwc`m:>Qc`@jHbO#a,!K^`;�ZWb𲂀Ճ*0b%y%Pe@ѷJUd+f߷R YO:w9/xn6p&vMq%&Hn:| -\O8Fva-3|;2y%1$*96@kmpWK.Trf>jD[,Oٙ:qYw&A&_(y܁.o_,*G<5+,HܚOMM7Taq'lϱ[oN=*^J!;N?S?kꮐR$-r2UA=9S* xπx*X7NYDj+-a;UxV eu*p*qb.o+\_րp`]'6RaGp@Tj�"JTm1aM��/bna\䵴*jDXW~SweI",(m H~Y拽[ޙ'Hq6e LiqXs ;|ڷ\|ǎ??m|*�n!&8JnA$I'Nۜ{fh(һoϸ&'^dZ. w[?oCw�?l߶3c-zdJwۿ4+[dp�<4y>xff1QAEl FχDJ N"Gv"oo@*/-ڭL}|V|O pn0�. +GHP}b&A!@$hkB3Ց̟r{Jf?QX H1H#Gcf_Jjg#IP. mdeOeYs #!oK&xa9a�|,*vn.nnOּEHI^cl/mbf 6e%7QYtvvۣ'-k*ॏv„Ҫ\}iCvI&I la~tGv.s1F/,S'(9"Hf~U5GQ3{fP C(<UI!�2r/.M[uU0p�AX(]$ V䁂aSp%TH Ҡͩ\%m '.I6IngCdEoƏ^謷Pabm+*'0PEV0*=9ΑERVXXHe?*ϩfǻ.?nۉ6ÄG%H?0q0x�:󌪑؛̳(~[G^~�%iܫZ2- HJFv%7J{aA>;s!Ӝ0ť?7ew:vVĒe>P4'r|taxnǭV,A:U_eR%m&զEL8+:؀_Cpx$OcCM�ge/IBH@y6 �EF"9DPs Iɂ=g\BhPopuD*^<Bҡ=prc(]&鼛]vJeZjS~q#L&)=Kcޢ-0G2 !G'ی F?Ua7OOzv"I*8@;.ŞC <]RӇۍml0%+: cI3)+.|o;=N',T ]R;dн;;Вlcz%}ݽlj67;cY[1>a_ip|:sfI{baG_)E'pm%&l.:x#=y'D�,@$VE]7A@�:|,db<dQ.�Z\ǽ$ DPt�nV,4�8"qs+2m,)D�ꭶ0͵}͒@>[aZJN_ٜ@B|70R'}Pb9֊dH_w1dqxDPw9cgRt-Ln>b�Cq'u`̔U,Z#аZtK3K$&Z D!7g!@t5k|HU�HSBq<>�UR58TKJѡ#LZyR&[toDl"a~7ti!`RQם8:@+ m{sҕ>6!m :RZYۚ/w;z8)Oby@D>OH)P@pjALHA-B;ufύS~7r6uCCiRb 0N0J; 鶕"A洈0^BBn#vs/F<U,�jI=yeeݨV;r_^^gs{# n@AE U9TUv܅6qmfqa8J}NjFÉ;ު*zd+fDaĹR%ZB\߮߿<a gj­p.F; G۪4?[RXBOJ=^)x]cue{칎-G?O\^X q;vW vO~>4 $ ܊�6+*aA_ { <v<1ڢ<XQl)<t� �j/3DPawWਸx&FE[i}I! qVXDΡW<zeqc�ڮne@jI($�X{:e?m99y'掗 ,;@%BOMۍe$qwkdC8?0Vx*ֳ L@Ezir4iW*&*+ A9Ku,e@:ۄ^|\͈% gkKo8P2zʊbd '<$݆0UW;7c''mavڦ'v7Z6^6aKbf 8s @Iq% 7<H _B#.B8|�+ .xq�(x6Fs\z1cGJ IBt_l'pbZ1 �>O"6괋/8fs(Hi?@ )g0t;6IUI N_A)\Dk kL^yHƄ> Bq]�zx Bx. NK[v녳ƙ?>cSdV0ރ pRjEB[J8 ][%xeOPgOWv'SoBP2Q4F8 S%rœd렢T}==^O}uyH!e_`Kd@Vjhh EhGݦWO<6\@?0JV<{^f??}+v%0,+J@\P:@Mz$ q.�B69`uBQ�88Byp}e*p<? < \,Ap(\6uoaiNFun $ǡ+7Х/SAwy\�L�k'�$� w2s.pWma^ C݉HS挵\b?8ؕQaIkA)!Dݖ8)j .0+{&OAN^/.{fQޖ*VҢ*@_w](|>]}.odj#}Y"%GKqDw,$l!Vw嚕T];5i`:㥕ͺH˾f;`w^#xrs e`M$+XhEP baE�$F~^5|N(r tq< S$H8ϡo\ Ä{\ wP49c*&FV$86`~ "jA<0g  8/ U&Hj̣T6BE�*RTZ,i3sZBτq@`Bդ2I|4`[~ڽ^GLϋ@b.;&jJIbX@{2ݪNM62`&m!7i;9m{A-BH%mP.=LzR(%|b*Ȥ6䮛'/�œu!`.GprIO_rot͒gs@$*NE  'Ȃ-C`9>A �4rypKlt\mT͇8E-&i +]s mVo�p =561W>! hQIϚZ\ C.rl!^Sܦⴍq 8m�Z@+cH_�$Cs_� Q0##mC*bO6p+=Zqj $J7H/LN᳧4Zxթ\lIn2O8t{_!L/ZI#Do<vs7';l檕zJe8zrpx #~&ЍOOY@ZbX,jqxNb9#Lʩ�eQa7H0\f P88wuE*yzSCgSml8%VqMVx`AR>Web\1s .+ STcgJw`NhcAeߒyAdUB˽\2Rbm*#V?4Jת"AU ~ V*씄IC?kO0qzU`�}Q:,pHXUH*@$9BMjʁP1b x y~p%2iFdKoW qN 'VT?ʍ/-^7ؾ7:IhKvc.˺[8rc14jn8Pخܐ6  GL�ec[ B>O{ag|,v.bVrYUTA*J*%yӄ4+#%&k:a '0lWs+}Cݶ{sUN|8 | @�y�YK[hI\ʑ'@{l%8EX,}Zkn[(8+R%6#ɜjM->ѳpDnk$Yc鞬ϣDZMLN7eS1[/z8 )z}ҔS+ !8"(^. dE{EOJEl�E9c#ӮCf TdJ [1fzǫm]kjE$m6C$fHjS )MĕR1^6 ra77;o'/LY6lZ]*[(8rZQTȅĹFznغZT' $oι(Dvkv D%:Iﷳg|M(}9A[ #׊Sz}  ŞZI DQk0ͽ<tB}`5ó EAhR!qu>tD@emJHsEB%Qmڮ8}=%{e셗:g% ZB둜Zїr%$MF$hW2awV8xz4wM^ (KQ]a8�Wj.i[v?k{{| _Xt1uZpMHdl8t*muN)MxV*,_%fW:A�iƒx@�eE"{�D0C|�إXKD`SPGp% !NdaAQqA0#mHJ1n;#Wحȫn{^ϔ}Ew{bGlJ^vk5>k\v3+ucodZ˳p*GRh]:fzAx@zek Xk߉[ U$@#zJȆ֧~K8kjtKM-pşXlԕNyc}Q*ra)R YFo%vUllAM60h+%;$E9 � xsO^ 8<p�߅ mXܗQUC/+D ˊ Uo?:Y.Mb Ȯ @:ܑ*d8 4qI#leM9J^X x`~-X ^l^ڿĤ箤blW\Ӵ�xȎDXN&jEXOW( Οw#&>bI zjsBz-J.K-XZFگy;2S^.c{6uE' rLa/\i8: D18ַs銫x eLH+ .Vt\d`??R lN~HBb䞴 :�Mv/㎴wlv�$n20^sZpdVww=Ȓf<8h]׉]R!_gBWp_fM{W$`zUSb!#A Vz)潿jAx Fvr,Z@E:~xXɮfZ/3 Bh7"֫;ρ'qu#.ͦVQܫхºj 9VTRkVY Rԕrᾒ\MY=c8_j@3DHDKhHrlۑ 0&(sC, AUo lcHg.7d:/yE?v:er[w1^'[{ V&uО~m&#7lR/}W BąX\[ìDe7oI8fk ʧYZfjp !� {NzGͩ\9D@QH�sYw 9JӕsMxJ04$b�BlC\AX1�9A~G<Sy!%v~Я@~q t(P'}T}DDYM'4A:Y5BƁvseE-.7/#ld>KNJ|X| .,6. eq $gJ? &*=t1Y W芲RpRX*&},vYi_‡9pH}aHrF-kxF']FZ ܔE !=48ϗϕjPaL0؀CXBj;S< 5^;T[ul_]Z3WVݵ{  <@00H8A,аPϓ@ BHdKZ28*W}6@fP6[l?FP!@Df111p b7jB騣]%REsg]G3uEz\"^0mAk�lN')8LCUjXyP`Ȑ6Ѕ*أ𾐠v!qo>tjOs5fs(.*P+qVz_i :Ghz�I 52״5 <@[KM9iC_לYh9P? ``D]� }H9CpOaq*ȭ$SG3Mռs1/XW9B-^x&ᤎM,Yy78m6Sy : olx,}}~Fa} 5jHB &skUk9֍+|Vs:՞6mb=}eNM+'S3K yHA_Z3nW�r~R|a`cr۝6wuF^zѷ8n2}1 mp Jmh'WXX8:MLZmqjf}a;-[8|FouG̺}gpZiWd݋ruWbs-^tEQ*eox0?WBor>{.㌄&el٬ 刡Ue9p.$!w٬08L/9?E[O aYZe B)TR < k- rkSx_VN%CcltNZ6K3aLH;Gs:VCAEϮDYׯL:a7j(]7p-:o|b&1=%& \ȥFZporsV]*X.C߶)hx V[*Z.n9')&vڠ{V#[Pw!tm'cT{ugR6�OB=}WMun[O$9< VŲbg,^*U5|gιShkouX 68Pf5=OLDT{u)a=C}Y_[Sג'= 1ٸ+q@#�MxW)qx\z1*TbD# L<!Nxʠ[#@<:kԮbi硦\7E[ڬJj�~`FO;g0FH2С|}Hz2aOwھ %\ǜ>xgnd$H3bM` keaR=K~-p3�@B.G@_չff&>%5UsՍݎTzCzDQW]EVe"gs9o/OhM"e0e+1{ℕ,un歖IG RqI_=?[O\ޮN&syG˶otzi;1@@[n;�(aE[mߎwͻ{} ~n;ua֎M~Fm܁]wSzb~;,m'f>s}!خ^sE`OnԒ9㤶@k>ͪώT~jX;j6iYpҪ̦C\%D�!(X"8G{1J!:f;֕^ @0Z>r?Uu< {ﴕ߃3!:<6!Khők,{OԾ:v̗6Bh  to:y01ox.~gO\ԱQ՞m_r& ZQs^m4`&8_TWJU;{jz]P>#?bΝqǐkn.{Ȁ#T=t55ue$*- 6܂<(ߺK!w[Iʄ\a8rK G|}scShG �2 (LjHKwLHC&c$8�n[r7N {]]3^qE@d8�.sXp_=xԿjl.jF[n]8q�xECAb�,k%.pp⅔C)!"\HXii+R ;]6� 2v68c=HJ}$x>�\! A �-@HL nuMJ.5c}:6F�`Z٩.gvv褂ʊY*gցEGr+'?%=tסʡy uʡY+? v5qObu�UP$dʾ?p|QKrV9nr=uݖwӭY_<H017r1t,;.{CHO~cAؑ(�(5>g9"Nz@=d1IAٺ$G.[/x,#[G�LT]^Ρ;pb#{2-j缪r@v 9jXi86q-a$f*f CH)Rl8k֎RI{ /ýV 8(!@x^2pHpJH y6@وh'?I|)CK<ϠrDAe:α?xL�9jD�G"lrK*D)}%Ns|3wdf|#y� 7SĘ+pz>Y!R*8׼5� ԬߎitTxΔ"#ȟ9[q| SdҶ{G2PU_e יEc!  d0pKlT&=6OKY8;nOb y?R8whm֛u?-7̊y#Ow;☰ljb~~vi_CU%?”} L` P{R\>rf{ύSkߕ\!*4My}ɢ gy {s',ԥ,qFa~C.DmpsIF&\[G]#7P[qnΉ =NJ:p@ӲTll឴uh!�¥CtGQ'Z :LSU@. $OLʛy}M).ϗ2RKE%#)g4}UC^\/pm^e8Wge�p1^s28+lp7@2MkE3^OK0A~3<ƚ�eh�\9Z댟YjͪMՃ$["Bd~"xjf$HuF>IA(郜T>-/Ϲ4Kٽ@ 5KJ :NZ>ז=vO~%bF#BɵwY ,(WK@‹f'jղՖmGQ'Οڔ6{z-L; WwR>߿X;eYǩޟT*8HGD߀3Ƅ}8jBdGMy!BJf.~xã^T=WQj٘'pvw'/6$F;C�ߟ]9V7[#d3t:).̹6WS*P6gCoCX%ńY͇wa~ЇnDx~ObA.^>1h5Wl34K9�.`A'ߣE¢I�3W"[fGrٜ,bQpۥJ½jvL̞ugnї%xhxi1dEJa˹>tQf*ʃeQ˝>g_;~Ğu8.2oTY]쮷Ҭ-8p윝?rʎ?vʫ"ݼ2NW#L|&|*rZn<n7bO*?0^&rm#ɀ8rK؉%jCP-:*&yղX5Q;| Ou]^%iiɍ){9Dpki4 4 >l $T+o}D@)  Wzk A>WSQ6Gi<cPdPj_E)ĥc.멷-wWmalJ(Y'~vݻ@R1eE.;۞c_ܗ-_3XfH\baҙ1\\~#H\nn=8}$ARt{瘳ig9bd3 yiO>s(`{|T_8/d{a=}vԸXap m=yXgz`ԾyW[q#j.X<B2Il+QMlR`vʆؙ+Qu;q4{m*] Dt,,xޑu1ګWV/�j86׽rؗen>mA"6FII'}™� VJG#29k|N[Z99?irUR#NА%]15'Ѥwq^8sޫ"#at$&CKEow@pw|z%"`<ǀ=: 2Ŀ~ /N-%@;=X vyg:`޽}bHu]^nk{[Գot0¯~_(yiJż߸g/g޼-wx1<ju(%.l  :39n-ӊUyYmKIؑp+՞ 3Y 띛N"5DX@(HuQs.BgLkBWav^hZ{P Ko0|+$@w|pZa15'*ĸ ]jGhr9"rnAPŀ2޷Q@ ?n#l\_ܡa>fXyf5l$^VTv$_}#{vœ[ӳVvq\3+o w`_Wݰ{ms1~Á# ,/uxT-~ὅ+-i�g~<Nx#50h$!}LN=y=vN8vnK*ģTpty˰*]SDV-`܁.}8>6a^AB6$)~ojXAss\MyǓB@⾒!B\`%s5#/-Tpx,(__yoI # 4Llt0/)ن尪"LtȕT}$3lx!LdlUERu dk 9=iF"Mwl0hCYCp둖CY)]ѪfJ[M]*ZW&+U~sgؔ2++L#p5ҧ[sų64VCG-lpxq|xUN?dŇ lavz^˞vuv⛇lœK.X�z7X~Jq:8BRv@EkX<pEn^MȉLxSт{2(]Q({.xiqۉ3u#T`>h kjrDZNnD6>ɀ�=@; "qC!poF<�b#�6;`B x.kQ6ʏ>3=S7oQ/>X c?RɕȷfNiZeg)AQa@ T;7`\|5;ze:LCl WMmHdη-\~)ܾYͰT@ƺ8{zRа9wrDVd~K>z#9,N8NjO6VpRAq)*Jjdd͕Οx @NDc8Eh_q|ՉJc(ͪJNK&Å_>GRlzUX$6+IzBe3yWՠgm@ C60BnrQ{Oá M!2ps&]{A;p3>Ptңf<#Q}, r~@bM0Ox a|3 [ 1<H^=̻9ts.7~z#o!xIhJm=񤳁DWPfV|RU.ٹ] K'=c|l̞_n[v#-NMۑ7v);%2ѵ6Q,48C(T<CYO5^xhq;|s@7qvy}]uIb_msmQjs Jj3cG7p^�:nE!0 B`ȱ0k+J[iI BX#"9�SQ<k=Œ팉R�0ޭG|OF66\wt,:}aTzDzRU04U+0`ht醔R>`k[M?Zq \6g=Gϫfrv]wĿ:9dQ*6~fΕpg 3GA=*% $�l 7�u]2/6tސWwD@+iV60/]9b +'W5\76\7AVJ:8R  p;J]='O4z Μ/O\Q"Ah(!aJm>ߤ!f,X30 'o`ҮU# R&0<R\2tUkU[jDg#lvj1U6>vAosu7b),8#+U +VO) &kbń} ﲝ{Flrzyw=!؁ۮlh/ݿ]v3nSVG %ea `X=AT7E�N'.8 vdǪһRq1>KqUG=Mfn< q TyAX ƒX+JQa&�*,L.*s6솨t;\بN=c8"^�#}R6^ؙSvonh.Y8=Uꖨso'SOIn藿3aO\];˾fw,UԜ啣6җ[P?刞pkDcf5@8Fbt?яzc ̇UjvQ%ַXќ;88fS >8^8پ^9wJž;m.Yu;ynP-%\fǁL8ҕA=>\�En\ǵt]G4>N1nk 9Q\~W/;d8u~;_CL֪? {c0&ZV;E-jR?;ٷ0k@;1jUIFF&�!.PT&yGf+v>d٫rb/i[w d<WReȅR ayp*+%$tnؽdaO#Lۚ??i7=K�Nxk^uz $xaE%|KϾ{ OT4)'jn%:dZ0 kD Tp3-S RnJRPj@� ~{*[@TYH8!hZHNe]uUZbm#{ V%t_S _107h"eȬDQuo,k©}X&S_4f7B0HYX(&lOeRV9tIK!,,4$e՗e-֚xH'j 571EOVN<{=~G4gI~g#I 1G:[]BM,mqA[D<]r=pT1:\Jex+_zₕɴM 87i'Ul5Y#_*i\uyd:c߸v*H+Vn!׎͖7��ZSieԠy6qJ[+=6f=)k H|Zq ,~@|Q.5T@ťJݽ\Mޛj|Avw6ku_x~qb (iRсc)@@A*�ٚZF+[K;6[1B7^ތkcgy"EeGHkD,W끄̓ @K"WLF`t1;W\Bj*|DvUI۰&z *LI_Ҷ'^ղj{BJ2> `S9z{ BD=Lgq=e׎(.{5/Vd]=Hҕ>S0ӓ@ pY|fL!QA-daa~:jT !P]c%^zdڱ1ex 2F\ NhP�"#O(REA^%#dX3N>9KeasD$wu|*pv FtUTN"Y)</f5 Hxv<'j�tijQ MÝ&TQq" ڗ%^]v$!t0" ;v=d=?B֞$n? D*ix.S�x Ċ(OL?؛}]TDjqSx\JS?Qq%'Dzl7qwۏsFPoeqG)6ublx:4)^ Ƶ26wUtG#׈]S];%Рʝ]9ˠ)dD&|HX_`=򗿼㪗@ ^{+ [k(G,ѹۑ"+ѮxN=nD]C]Dg Ai!_җ|=~| H w}vw{^m13zBT1V!J:2>Q;vM]w6bw>Y62.5<( ҙkyJ AlZpA&Q\5i7bkHI"6و$IH}�U59w\C v0**PzcNT=3yiEX�r ];W܁u&~F }Ȟ"�#0DD4E*r/Ԅva!fDT( \|z"}ddpX@"`RsZ5"pU*-3azH=}ΜnGv߲/|Q#5D 8BJ  s�>9{}$N_@x<F,.>.Uz뿶W^:x!IJb,X~+}9Pb>jM[X I-R5kǵ H,h{~B;!tdS$R)l=;i�6Sিf痬8*Vxb-*RH#}0OG``! jCKrCj1R7Yh<~ұ]w'J,vc4nEiNd/<  ~փ'> n�Nlb|}_E9ğB|EҾ� 9qȤ Xp� R%W�(u|;=�ԫ_j&~`H@6P@0B2];TYa= >d_BC偪}QA90{O;S9+ t}'x^_WP4zBH`C4((OF#8nB 2Pc~8:M�j#YI4l'Պ |٘]STc)VT,)62}E`y`}#:K eY/Oq@X( � ;R1,(?҈ 'rEZP>,dh h Yazt V}kGMwb z=IY7w:+kPk|T6ca�(7ҩ]ff7F>9 րp!pe`@k'�bj"#"@M#B]lL<e#vpn5u uAۨFN8}{.?*:H#<Pc�L>#b,p{ӛ9* 2M_�xa7qp'B<R,2P�+:XZ^pP;qICKXƖw b¬+={PJUm(S3a?_U6y y3tǟw]zJ]q 4%ߡ恳gP%;)^۸Oje= mjz|SmG'<F>g~Wի~7W~ R 3�o~_ ��<8y^W~Xdm!<[ŔRZ��"5�/֒g0cc, m!-(CxH<!!EBH@$,EyQ0B(8.٬uÌ{9+Sߞߩ}3sS3}twu~y&Ko.5 ?Ueڠ+ND(+of8*Fd{ъD=p66 7҅˿I8|y?K^qq)֍j>,*@*JuMX }8e!pFxD: :ʺ$qX89[m]e]N*AVQ|#%>Z v(mX7u@<&+1a#ѻT| Y'poؽ3n㮼|)w<KVxmOǣ B6~6N|v  @ *BeЃ!�_bToaSḨ[B90ph͐` �>% gdCs\PUq8g _mWR<Iq. kv6@|?a/[A<n <P[}|ssa6Kݳ>ԩOj�st $Tl٥# ct.ֶ;( vGOM܍_|sra"D괳9WPPa5cӊ"#rE�z=0r�[-mP#9z7x\n'q!5@Fq׾{H&sp|g @V"u˺!J2hxbA t8QmL !L`3` mO~@=27Kngy?_/ݣI='z€*7Ѹܼo}[\6@p\eig;ol1w;71c^N<T8&<犱fts7"| FWv@eDY iIφ6h{F¦l1\Ģ Y H?TP da!Dg#668?ת[.r%:}]۩F!|t\1�/vM7O}S!F4 ^o/^q>/^r:zc77,\sW.{_}b29c;`aB'�T$xF�=-C}$srH y0E@$[[P&iЩ<f$= C5+͜`F5Ӌ27҄\ (ޥ5J>FD>f(n�|g1$>G!&8H>>䩂R˺!J  vKLHg3VdB#H-{;q@z{sÝ=s*qysY@^vn7 SĀ*7V�WZD7 ipj/y`m휎68F͜FzNboQ|m9(;115Pֵ 2ImG1SRRxQɣˎf? ocBAr�K Craq|x7B3Ɓt:P} +d{\܈SwpSkÔ_m"ѷ2G!VX$<T/�#+OHt3qɍu3w;Zi8$?ØrxAR樞g E"vҵ+e3u8,s\bwU(?uY[YdUdF;u5#K-s 轭%=ɝNPsL?J7H- DP0WO_~]x!bOJe3\{kF<<qvN*Sf]9sk/yc:11{X&$/o㳌\yW0 D /mm!I6kG.qEGk, "THy CkK;m4h^7NwǙM= m;?:w3n> c$P*CB*,3kn{JNIw4 u'3aWI_uw&a~T.+Ҹ(" cB. xJ.ۨ)m'YqoOa<K1e]XtH;pPrرu|D́gJMV޶Cڞ ?׽~ MhTxX@7D HdT TExb#4vy* [˳fW{_6QjP>"1PHiK`r-"e u�[Z#@8I졫&|LQp]FHltd>*)۰'W͇NINh(Ad&fFu\mq`]pd2Cw=]w7j 6 m-2Wݹ`hptzX&=ؗK~0̑F+>sj^Ol]8*[6U2 ^ Q[a%`#6 u76X ?Z 080<9o~ Lрΰ4gY͓ K"b!؁@P~癸daբRFKlD_]IltY vRhG},IZ+Pv1tt>ۃ9 sͥ=YXd vBcHŋ&$`RW߯|+1 q�6Msrw‹o/= jDvه~8+C-7 :=FC9G%A*Mel**:+@Xn?q#A&~g;8%+eæS)wKQ<0nʏk:lQV]�<*ovQ{}53N41 6*SǍ( W'?/{/.oE&g߾LbۨH7&wO|ZE'Bqn Yۑdqa�qz|ԗʅuLlpw ~~�:=6�S;A.hN]|ӟ4 n!FՃ|Q:{18' ! v ٟkӰ\32qY>fT=\'˴ard]dK\$<_w.= n* 5qqY8ʽ71f{7:tMFA㦣wܕItŘ "�13H䅐\\=u] BJx쑉*>@T3+`90F3 KRx8DAĢl 4~_ XCT7@A8ʹG ^( GjFAٟkbv3*)&$^{}{G}ν5+9(8wb,KY3W!Iɽt!wq92/}e/H!wyodۨwe?aˋ//L̈́PxA`hn*ȅ�J[Jo]u%@*,z�2I�ois4�H-Y�t lq;CN0..怲8|ߎyר -zRsxKҳԩϱh}~9tɃ>`w3 Y|X!@H'0 sRh><"B?@X d> 0aeP/ @vdB$7ѕ8 RL܅KWR$Wo<b7>OcBMˈ񈞂<+P>`kY\d@Z�P_8�&|v�+V^&%Ц-ӟtlWC !- �4noy3Q�iTLH3' Μ&EBB"E9b?et�|Ȁ@c z�jȂ : BǎX*\ATTwM:țP$b=8aJi9kTZ4)�aeԣ/| _yNˣ3eޥ߽}=HcSHeWXObD3(/)N]O۹<x&^PN@&q^5I&�<y5*乨Xũ:|QFĝ  $+RoWZj_d�Q l9&O[HU|.DHuǧ-• s ŹS3Zt/97ToH7$3$ OۖXrBqِ) 2ܹ?Z:W>۰М{<tI⓿Fo?u_tۛ㔑wmy)Ć_%@% //^+ZЭVw&u9Ŧ4l `(ļ<]�x!<6Fyao,WG=dJ:={qQPEpN+I,Rk/Բ,;ICYցcߺǞsx3F7FO<F7m#ҒjPy=^!Z|]( }Q{gë:ʭdcJ@+qy fٷk ߨmAOҚ@:rӇ瓪CjJd9([Qz(=)8M$TomuR#W:zLq0Q  <9p B<w_']'=O3AcώK͎[:\2u>[m+hٱumSreIe* *rg[mT-`SU ōU(||"+u R,;ō9pÑ[+qsfui; y5\f9"P`w$xM㒅W ylTN6pc<6zQ}k..&G5J =2s&=#b! 5 %+kx!>kZmχ>?^(˞O&Pۈ){wZn BγNe~gͨmmNpuf,h^_;u_l N9Jˣj^Fi}5by֛qJFs5ӾZv{Ugi(-v٥4lsU4%GTȾp2du1ֆ  D K(4Noa j8^!=<~ h{HQ7(#_r9}z7fu$&h؟LrW8198Xzg"2oD]@ş x�8Pa{]6"BR8 ȋ6�g <XI*}rѮfFKb]$-͒49ݯ4M>G!BhW^ù4" \gᾰL<43x$up'CP?.-5 ; ~-ºH&w<ΏsQ\2`U *٘|7 >ĆTlwHҴgx ܨn-0]g$0dzިkDMGÐȮ3wUah=5@kl}";‡^c1ܞ1㉇=|51TZN2> ϸvp>Q\Ͽk +NoDI͓g7PF276 n:�ff;ui:hT2@b!fK='<3՜(I#'$&!w`|@)m� 2 w@5K^dU3'r�FxURx>%t|hL³qzU %$3 mN>wo$I8'a֝?~&H4ԙ{chXWއ1RCN& зĠ߉괮.L `#{2 Oh,{MH6$QW`mb mQÐV-e%b%Ul}:AM KZJ^jzmtFvpPp($|`-6!O^Wa{ 7.~+gWx:zdN,}8C@'u @�D@\v]<2PɬM $c@9$,QBC^PA|=X|&W\ ~׽u~D%HO?_C[uOO3>Hb@$pix"AAq:p>HgMĪY'!@R(RWD.؍ԣ K""mXVZ½f'\T~"欯EKfeDQeDEU_%URL]ftuaE(V}_*, !]UI[@d,7.waˁ +ƹW΍1$mB'f]7:Gc; ѷ6=Їp^PMѲ5+ תWF ]q!Y$=T(h }2Ģ!=A"gA,irxVD׼³�MDڍJqP+MfH#y&XpcazIȥ l&U|0Nu"D 4,N+nt#nyvR$!Tiŋ`*I@qYYp$h QdTX DR9XG}%ScJ6AVJ3`m N� �P"rd<*:@xp3Z4J }K0M �X+"kǗ洩4<S=z?Tx߿F]Q^t`X':|@N ROu#a` C$<y2R]Qhd8ck0bIħQ"rͱU! f4YR )@FTTU"gj[FUne-)ޙX(@Ziԃ_֫_TKw󲝺ĕw&Y<e2rhF Aҗ=zeH ]v>$+/9_in%w\}tFT$I=m87Zc-9,x[Nך~[�dl'{=D7'R@*@"I`,i$T*!$�Gz\FWJ܊HVD0KgDҒ^I)|FޞKf m *Xӽ E$^c'W|Xzޟ\2=J]z۾vzD6Ht۰ WbC%[@쐊C QY -*Ժ"a赽6p/M9q Ye}X65Drum2o{ʈ!t}miaξ "Yllis@5IڈS<. F=ΒkLFI2DQ@RE$ ),f֙crM uK*J $8[UzͿ.)##)IE%y1dc$.Aljc\dv{nC{m/KRFN�鐟Xpui|П}K4זdFTl 0uHDot̸ND$:N-W\mCUS $!J6I=FPí{ÐeYpYcRHmOQ1iL"IVHSUAP"C@$_/ûzԫ8V6B<̎RKH"TvsRʱ#`V"ZT\60bUX}.y\Jj.n>XHY Tv!6)ODUrՕL=x �}�v"K>jdhEY7͈L${"I^ˆ?;kK'TZߵ%t#nA- RI͒[mJ%Vri!VeHȺZ)u$Q,,[, c3?aT6_QAl&Vml;CRKd+=uY fse F:5-u=gl( Q >*a2.SwŔ)yŋ#% i˔Ro\QĴJgYܭVJUz~{S,HJ̓͢.c4F"1QH"AVRe먍EKYzjt HKr11Z: @dP)j-'LjYۊ 56wƪÝغ5`A2s^x"1N oxK/TCq˃RAqɑCv׾pw%VߑQ4W>YysrQvS=yOm찿%mkA >oUp?ʞA-^$PXFt:ȵS3o�զ8Qq&)\jJi^S:He gzB:hJ όˮ`2a(}o$kw-,'<IZ<ϤkH=DxC*f )܀ydP_ |lVثzГ{1OGQո|s=q'[VQ@$x3ǦIqFh:$RO#^qPym)`, Ҫqs2Q\1"e꺒Գ J IoƍVVkIuQIa||o3jcHn*"D0>>cngHF1>�%5W*6Ҍp(k< Tp|KH53$)ef@.sUUkA(=Ȭ !pgޓrH@.\W=>GC$g�|0W>,q�<Mٳhtbɏu T >b\ ޤ-1$~AR/acP@*N"~΍렿ľ2苹WWLqsQ y䱊 D?gz%A6gQR,5<R� *12GR_)U䶫+gD\Y)$ƊK:�B1} @1!Ez76 R$)E|1X0Q0Ԕrc3J+U[UT-QYȟl9YcK۬q;iL5gu  ɂu7H'_'9`N*PE)�կ~VJH!#T` "@$"P/�'`iC2,F-U~<H6=S1SDBtl5@dà U/-)b$AhK8&sRVTSd"XM/RYGy.>gZU;I䤓_2% M']<xi(oj L%R}1;sI.}J%QNA*؄5)ND""gV"3 z$A0L6!ȇ|V I|i+M;i /%Xq'1/H{Qؗ^}"+ 8uj>#'$@IkVWu@1xӛޤ \Q5dgJ'N5~20@<E�DEO@'sFg4!ȫIҘ2m�$g(8WRsDžhK#9SL `O$9FQ=Qa61CTTr!7CQvxG3G2YHp~=ځX ){c|_[ɔ5F3êdiޗX3m|2/#MRAJ_fg~5,)Rd7b>RSIY(cp11r1Uʨ8nRnj:UDzo ` �p[q w "H(|Nq\\dz'm6!;It%uނg^|Ò邔*Yʜ_S6M]~xV @,R�:6=C!k 9~gTSڡ@U9hWIX0ڀ/1T#�Uh'l_��?*2d&93n=U�,JKv !.�rM?c= bA"9/G"d\yzCd�(ϗņp+�mn-z ZGURUW:`tڀx^+s5ջ2uvIk%[L*jbBc6Tw~1 TJJQ2C0rdک X\MP�/XF̑zQmCR<l'b:~NdmI*muve5N[=o37Vr5B GtwT5zVbWv;T<Iԅ !$PvP�.# (FPF{K"6"?�+ D!|CeCEpNMMl3jpTp8jwm@u�R @_\/WAih_ЫN@߈�ϒD0I[g/-̷;Jz4G\ij3jDL"Onm̳ \srͲ/;Tq%$E,C*9i]F U$)4ZNNDcMsK˖Tc�` ل6oXTv!0dv qsLȎ'[xJ[zl~hXIҾB~˜+G,CLޖm$!!}@l8#`ouR wH3wA`³Gǡ "%AVp#oc\ MH/mߣ۫/M6ז@-7 xλ,'SOI"4>ex�ȶ̵6vb+u]gQ"cwFGRsUX\AXF.˶!f9I3Zr,(Xk а1!&P9A,ijH >a~K$ ߭ r׸Z&8�䠼q_j ; ddBm#l�De n-|?%6zqA)Go{lj~{\!KiǞ|jA$u,5Z_;yc@E#멻BnϻnSAC ķGXMp-}N&wH(]dOhDqK՗+D.ḁdUHZ"IN X+uѬ%' 7J@H\Τ AM$0n&VmURyiL8m$c[k]sm)^da)+>67Mz̳s,^wُ /'(U>3ؗ[O*z 4#')�%ȁS3 g]ۦ4croZ(i^i{=P|O=�H=Ce @h�j9FZR-1ػD:l;̈́7<Z$Ѳ5oatIg86|`lDL(g$IS2$=v(<\E]i ~~֢^{"}~Y+ [ɍ`n+] %Q>MSJbfpgM~.�{o}n9 ߷'xc+It~=ȽJ2j!UuRU aխ ۫muHBUG.[N $e8 ⺔߬ :Gk16$tt&)'PlEIL$H 5uR b9[5UK^;g{"4vɶNW5.|%z.{ߛ$K�tI!u{JņKU ]T=n )ż9 m@`Er=e_ʫ/d,TzY%62i#׃[R$8MYq.dwVRʎ%JBL@2aiV9kAZ;x$!ق*ICɱe/uoÒ VZ:vҴ<_ RoD$?<\ r' >@u'9%ku}~uFcOc}bLzA@>R:=w5}uCΝvOty裏$4%-/`Lۃhi'7LQ{�y_Y~bc-r n Xw]PxŭH7`뻾p Li^O>26!}Hhꯄ M~soO[$ָMjq:FQK|m.lav6עR]UuHV]:Hm~hYzC˾aҶmh*/#eaI<*R"&u1y-Ѧ#^YFRxVѿm饯*rZhŶT#S 1"U+0F}Lw>2"飮ЇJ1~6\ú +I.H V(,ޥb CAsW=y[;zrcȦ җ$ bu[_BB*)VW-X2)u7vT QE !:U7v=i'ds#uW+:D}nVܞkAt:,ȒX5Z$ZR?n?\*8^u{.rOe 8$W r='׀TjqGك=nнՀu &i߷>s_V4TՖ{Q;(X07f�5د˺aj{ȱWV<1(5ȯ˺N@} ފ#I~]e]$tWuav\uYukPӈ{ca����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/images/exfalso.png�������������������������������������������������������������0000644�0001750�0001750�00000247671�12161032160�020307� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��-�����Vn���sRGB���� pHYs����ȥ���tIME wh���tEXtComment�Created with GIMPW�O&IDATx콇_{={su-g= H)$!J,*b[].vaTĂ^C( {!CH#Xv_ayyf晙+��������~MثGA7���������PLjMwWWWv���������(!L)3qgJՄ\N8RT"4��������@ 1eĚ;SNj*Z%2p~vj��������P[K2ebĝ)!'6MٸV5 1pR_,Heee/_,--}��������!vL2ebĝA&6MSj*>H8)Jx<O侲[RRٳ‚��������bđ)_&Lܙ4hbĩYS*NxV ohh 6O_O    !'M<4qj]*>===R𪪪~kab    w&Ml4qjJʼneצNpj0;%Ts   Gb!CuCIG?z851kIJkSCNK$X\[[[VVFIGśćrs3$   rt$~:dH1R7K̜RO&~M,6=$.ptpj0ݗ˥Z8sLrfHWG ;.    C-hpR#I߶.pbw#fMnM.TJ4˗_O,:b0ٝFwg~0b&N˸\3AAAy\] X,C2gR巭Kuq!N}BIJk&MݚM"pG5BSm>lϩV3=X|c׉S2FS/=VA971Ť-]\襖Lk&uœfBg T]Gx{jH`kgnf=3Sk_gk׫OBAd$a"|!Lf]KWW]$ggg&M\5}é+**(*[5>bw}k7lo Sy7+k&omA6tI\j7Yp^2 1a&u˜f4d](?B$mvΞWbԾ.⪋<l}W\-ZCB|{E8noLazo$DAFHZ95un0Y8sa~֐E֥JjQ+Tz7>|HX6qmb#R___VVVXXnnj1v_};ïMf5?[eܿ|n ֬ zZr\J5wd2ك4r4451SZNx]]--M&2]-Y{ݼYVMy;*03623wqf?@{ZwCT򤠀ʵ_|\,L壦6 -& 6EOWPͦ`l1܍y1LI-Ki<\eYԥ'e[B XL+ssccsS3rH'8YYX(ƙ-LՂc:4Vq/97nl{SMw5áv:zAi+}ؐ7Q>Lhץ%<<###''5lĸw{8v2z8p.->o׉S}}g/I3a7֬ LW͋f&f,3짻T5|O惪zqWO__OgmӝI#^l;[nVd}ꌃvDv\ -.xXM=zn}K{_oW}=mH;L{/55twU</Hɲ214h TR]fllqoud~`#pV5ȝ3368;3U;RgW=vyʮl˓ağwiֲZY/xH˶! oT nqH/qm8PR[-bLw?zFS]KlmT|܊jzd+,mtki-0^minkjV#%?GT|rZi=zA&aC&|TѬKɳLuuJz;w_S㦾8777֖>~p/6[3A>Ӛ<|7|an޹g#/^1:Zk-Ad$֛gNN+历G+Kw֠pKi7KNe˖C)mf۸2vlnֵb]/:q>֋Y8mO/',s33;"oؾXMeسC]-n۲swRڭܻ+|&/&zxcw:9iH!={B٘1LV6p6mwi:b/} YfNER^;!pw0WmQ=#fVbZRR G==/MٚM脖[NRlvə8+k'z/zze^:g=P]akcfFe3M093 gKɢ[b*NV7pXǑu> >lk֥[L=uU JPMX6qmbN,ŋyyy4qeN75>\> nfm3EkAdNcy[[s44 3 ;+526/+k Wߋrk3u?J=4\:+xN~ ȏ퍧L9rOɧW$iojbaH68}_㐻p΅A*^R(i?iN-=}N_i `1v ׏W-̧9p(zFJ>]|.Siajkf"p$V.B{fir'>71 'O==3Tmr/JM Ku5^ gMm] 9Lfkapb&l '#lD P>lxauiV]6SW]ªg_r֭[įeצ^KJJh'BG'Sd೉޶ ǘ?|ɟA;}/$]fi8tmv!R|`\);[͌[veu)0llͨjvN36u>Q'S\!pl:vw+Yĵ7w_x,j*X(cASs52,wH fj)$~\Z^rwg=\ȷ\E \Ddti{+כ̷?jYf&|6N?Qlh?õwq;[:SU_fida"ٛsb3%, > lN . #-o&rg2.)֬K3:SO]}Ro_|pbpM2\J tmO?~, Ь 4 kVo]nXen:BEcX[Krv,].Q#3ll--mYd}f8ڐWFFF+;;bknblil|u]mrk%R=.vd|)̵Aֱ!Nv-^cq-tvj;ڹn=~u4, ܄mӭl\Dp w)jiwBY¯PdTsc)ބGH㉤&>I \]]~~áȚ. #/^Jvg0k|XT7ié/pC-cx%d{'Y[GL-mfEFjVDAFB?~1=O&0,cm3HcؑǸ%w)m.QH.(~8K=m/Q b={Je󮽇3V=4t>~`͛>Wbfb47}O~s{{ǎHpw'϶'KqCx [ao:p$~6nm\.ڑ?Q<*Gׂ=/\|()zOg>ft+k=T[V:=jf3EY'Owȹٖ<ٕ{i&{S]#'gyBZ4͜:ϯq8ܴY  <WWN m.URsZ]ó_S_!nW ϕ'q/:/>?ϟ?-6UDAFHl?v+n)rh OatX[x[Kv:zxY*_&sҭMbwfMn˷I6Qìfe?*H w<{>}:ٕlȚW7,uEK2s*NKU3-,3솹 *h+x8IxxoGۗ=\(V۝R3iz`n89Hud}͵/YfkfvǦ;ޙ6pLR0iR΅3,5SNEvMG? 2abK'(&Un]:59GzjmɸY9,)f֬H2_xZX}{*" #'McnjJ.<Rꛨ\]]-͈MK>(sqt4qp]W}cG⛜*5fnL72`(9O65Q{aG-bYCv|s3ənp۠}]<gj{E\6najdGmyDo펙鐋Tc6mnj+_Dru6ŒYӭwW=g}ضƂ(`&?ЖӵVyC٥A!C<d0֕&NSḸ[N9rc#"TEDls6[m) ض|L&=kfb>AA:l654hcvtRToU:rtL7ߋU5,VLxAQu|3AAX,iC37<AAAA~xxC9u_ AAAA:ᑑ_(    ~���������óg���������<����������������x8�����������������$��yרˆAJj^ .<~C����_�HB%\z!%5/qD\;6B�����ѹ�XN@#p��x8<�~{xOOϐUH]>:o"Kt���<��y)Ep��x8<�0<\ܼȿp�D���zxSS'|B%p�D���]yD"D &s�.���;9p�D��I&ճAqhί/Nk�xayڅP,sSEk|ؓZOad3<.��n[%R\�:BX}Wx8njoS6jp^?wUm{w&CD/H_*/:Dž ÕLՕEşS1bMOX/.y oљ6"{`0/9d*ް\/<��oNrʈNF&L{vMozy5| u{)U".\Ɵl4qo83уN>_ >YpJUQӾ#kd 8�ߩk^\k5o cƌocccL[eQvߍ?hyܺ*M pFel'8Gkȋx8ܣr.܏n_WɠŒf\ fjZ%X&ۧU2b=\XܻpV};pδx8/u`x��xpI$\5fNKwYt\$iozy;#wolvV%Ҷі{=+9r-o8X{/tK]i֭*l�Ὼ뼎 y_ƳwxR!{كfc?KK'g-?$m.C.K'}5\./ ^Ao*$&z7~<55A|'<tiYv 3I+7ohK]aqBו[.\v\*ֿL^WjĺvnBG/_]Nڒ pJl:YijMV+ㅊ|6z_;pN\TXtu!k]C ];tߗvs@׾v,۝CΎVUn=]!vMc]1Y!־Z5h!ox#Xhx'2+os,osUѐe��}$b1ʕ7Wݏ|力2q~Wtؗc YcƌoP ,拫N~CWj< �XkXzj:5?uQޢ5s苡tjqR* 2n+F\mHĕ}=(o:<Hs}5{GƪJWږ"\hh4mC YzgW܌7K$7w2Bͱnu>>+HNi Zeܚ`p,N aaOV[%u׆Kدb9f+ҵukmp#>,W9tPGZH-UPÛ*nVu]qgk3ÇdR{AnH"i;Hޡ@h`2��a{TQ_4 tO>Iڮ)).S,hΧc4V(W,<Ǣzʝ#뽙vo <z�we % p ˲j=ױ7#kܝ~=�Ni@u y14U( t#BeJ,9pqU[xVnW}/Pr9#U) &JyzMz+,R{6㵂nVfT5iYO-pg|_}gzxc pz,NЕ+ B-Lnc[-{\vamg]C !<>t" ͱ} WO vZpI[\ۚz')3j)'yB@h`2��7/bߘ1+;uke}X&[zG*N!mMk�NV % p!k]15nRgA]3M)o*;3#]/. mbh_:/S6] }_z q<67by#v߮PB=%Kd9[y㼨ejH-Ϟr/bS*DZֵnUUUM]|;S,NNœcRF*nճ"]9d?YאBiPoRyZljQP[,pߌvI !O6Rf}I==?ﶼNVGCq��ÃNpJ8(ioɟindwUwvIwC*&Y~=kJ/ W?O;⚔-Hs;�s_ӬTullj>@W%b ~;<_8Ru*7P|!CC<ŻVPNM@Jxxr<|-TuG?~_ƙ\UÇҵSo镊/2nÛ3Y^٦uEzs~г׻/}uay8S]>id\Dm=.;̩ylX#z;_{w.���K0iFS}ntQs['&׍.)l}MOE M 'E.:MF';y}�߱}*굮,}ԯ&Yx\ 'X\u\u27؆bد^ pqM*-nnɍUPҺȋ3g_f/\|>\\y3Ű$2597åҶe>.j{&:wJ*=}-z8\pmDm<U(׾NgEzӀ~й}>\{Cp.1cr$^<.i5?aO;=\.{H~2+CI]3kZ,dLm`2��y8��zi<16ԝ?Ξ;wudEe7Ep|OX1ʞ|~pt…p*g(w.ig#[p=;Uy')ÝwmyxSe}M1$T{|>0 |T¯k; ]zkkp#zg[EEۗ34 _&ڗ;NI{xS~!3g͞<zʛg\N@/EzJCq���Gy mƹC ^^Z{#�]Vq���Njͦ|F!8awKkg)ZTЛ$�����xa^~cKP yeN7K �]����$]�����x8<.����<Dx8��ߑ�<\����o0��#x8�����:��x8<������������p��<�����7G4B�������px;pe2YAAc4}�<�����ou������O.>2pT⃑IϒŠAtOHs1ժ *`y3b/]$-/o}dWm p������k۟ )É~KkSve vizx̉.(mW -Wfvξ]~~Ѣ:{������Q~l?Ó¥S@e<O)X,O/xEcKۮ͝'xx|߲} XYq*aVldlB> YP!0.뼨*/,H?0wАe;4IYω JIڻf3~՞ڮ>]ݨGZ6XG;�<�����GpËIKO,CEotonnv&KMoo4il}0?b#Zk[z5u[ dziϫW<J_x8?xSbE*M@hYoۅ ~ p Վ������QCJ8;%GnNjn(ʞ՘x3FxƌkWSy7дVP(yoV2mo)Z_e08Cz<<A.n_7vM_Qz{ 7,3Ȋ.#}`!!=|`u3�����xT)ᴇlk֐ҐXŷ6]sƹ]Id+jZkTR9 -Rzz =8յC&v[DYlj1C<|Su]l6M߮lCt V`_>U7Xk;j�x8�����Nb6ђsCUIUI&9hJ'#U)ޗLx`<|x8p&[}<<Ν&4T5m#YxwS,6^  hgX{x�����uGs )Fy*vLɕLgJvMMo//fgz{5PA dA|^ )5pabqS+YWցnmχkz8ii{ z|A֣p }�F����Fo~Ҝ FgJ6}M'C<U8}B4s]5+zv-/Iޗx/1*`FT̜ 46҂�7(v齺1s<UoGu }=xdM u{2_ucx�MY�����x{YQ5Ė;Ud<)1�px8�����N {FG?t^si?zJ4߿\ '<�x8�����߈Fz!Hv;�>:<޽{C�Y�����8+����x8<��x8�������q����<�ßgNO/ 5 Ǫ1h7y|`~ 5aOjĸ>ц@={voHU-.yԍr]-����<��#Û}:~vęoFH`jvdwmyHOr\wnᕷg}6ָZ"eF~>κQ�����>ߗ.1Y\n5lkzx\¨sO ,`8Y`kގƌ?΁dD\$?hĉpf, _qѬaӦ\kˢL?~ugM.Ǝ`l'87ۥb _lr ='[|WY5]_?kjڐ����w|aY"3s>.:2_ c'Ĕe9U)<j vKm-ē J=8k6j]8y<k&i,',R-)F'an �����xccDz)7YGjMmwÿ`OL<'U?3R[ƌߠq#5?|fTl�>Z=ܘOǤֵk&'91 pO���� ## ={c~:X# Sl:yC?Es> FFFbyxΑ5NS3yU҈E.?%̌.My0 <?���x8<|z2رc~`{xGn32>ޖz)ӣnAׂ4:<<oHuC 0-6T[n5Qr/.a<|4{xijF슼cR*sb. <���Err2 ɌFVs>N(<O?BM=_;U ۹ypqU2Q/5ZUw&|ѯ[Jii's|pdgL. qb >-ws|[pO����#3G,>Y,)hXѾ$O |;8wS�?$jCovin7$-/ošpBY'|x8Bb1/'1z<,}ԯ&Yx\lz,R0h 'E.:zN84Ězn\u27؆bدNnFNέ<1TO˦=~sbےCޗn ���#É~KkSve vizx̉NiXܐ{x^ڥmxGq/xLa9>zG����{xRTsy ,"Whzxlr ٞ7z;Y pww_}d}B6ͦ+w4>\>+)g#<T ~,n|LpVxbguֹs#B7u৸`r@T• 4|�ԸͫONTzq; ���ߋ?X؟<t?lX(; LW?gSӻ"=#6wz.lKL/Y) kWIbvJ^ܞ>YGcQOroK&]p9|E3gfk5=+zwKxE_Pqw7'fL)zO�`\/.7_M-x<���?^_R|vYY17o7^il_ի>w#!=&ۛLt6g0ƞ1'퓩40lS_&{ fͧmg!o㋖%I3cO{wZ4=|Eno8Ɵ%oѦlBx8ø� ����-=``_հ+u)35OZW'[dӰ9dBRp P%Gf YA?)o*RHjӶdÌʓ yjI,n�����x8<7u 5'VJ2J2AS:}3~ n*ƷS,/z[rURO-x<KLKY\<qͲ>7+/)o=9p������~+n꼊er<S٩]S>p}=]%Vy_l{ z| A#2rRcSJ:bR#t)z7ͭKkinN[͍?-#k,]<�����῱~xiN _ɳQ%Sds|#Wn=X$ꤗvT_׃ "ɤg[>7~^gWˏxeq!sw4u-snđ5>d>gil1un8`tx=�����0<<+곆زcj@V'; �B`����Q[%<|4{8!3] Zzi> G*i|r-ng Eq<����� 8 }K@rׅn;�����x8<��<֭[Kf, dP�����x8<��Òϳ' DxDc ������bHG]l-������xۿ8p ..w\DwD.8�����px8��/[l2eJjj*Q񢢢¼ns7oMe&!oyy됋ƜY%ŗn7hsPL?X;;CejS'M#m];'*d|LxsҰ�/8ՒdA>�����x�uuu'''O0!%%% ѣwIjv~[<u7$ ݏ5k.1xθtT)s}"vޕiLg'd1Z.f bO_T%4г|Y+jϻ`KGAᖦP���p��jhhؼy3-"UCh'JlYDڻf3~՞ڮ>TkCV^|+{Ys|¶>%37) b0^U觜xڱ ;+8̣$u9RvuZt=kՅ<O�?-@Arc`n۾:1׋:Ӂ?%u*!6 |o}u3_I x\W[]E\љ :S_4 Fi/ruu=ء6_WZ7Ok/Q;=W{&n97JOq¸3e8����~ :u*-'NܸqJ8ݗ+3b9qg/q B.MtXOåV<ǽ} dz&hy9(e0 }jer0{uٝ$[@vRt?SIUUL&'LwK[v}*d 7R7s2+I={Oy<fcgr:}uԮi.tɴ@,+Scum^*==Q%Il p��<sD. �i ?y$R^TTV5<94#}`}2W!?^}ݘWەH":=knZ5_R GXm=Q>pEXnGU,HY ְܑ3n^NP݌ޮJyC9pHVn n?*u&,r윆e<8pkʑQ ŭ+<易Dx8��Á6.;vLW�ollܲe?}mukxz+}K0ًj԰X)_DMx-Ikat<-^JMPn)]v<<gI*twSӿ ia6/>N֍|~liO X:Rª\뵊^`5$~*!VFi 35ɞ+…6j(]q=7P9p{<CYq��< HNNF_{xKO%|ҤID bWp]:ĩLW[/G)^yqԺ;^$!`)oiΊƝ.S=[H*ela䶲Clj4`A^b3 *S 9ZPu*?yqT_Fj)Z!LPw6kt͡^z;���x8<_,>U|(`dqRaEf<R3uL*Dzlv[ŕY!BGP찿f+%W0 v2ټoR]:x8Y㑃uDZ nWM+J"pA R-up/h&q'iA#[~+c2nDRO63LwZyu+&uuީZ,g_ԁ-f1<ZV"[m?I"XmjnFG%&|Oeq=/V啌6/ݘkZ?vuuuJkɦ^o#Ӕs7]'t)|\k6OW/Ik9O:YэC+Y!q��<pҚj&]~n}>4]=o6%2%3?|m9QK(wBspj]RQڮ[`bx<<2;Ce+ D_;;ꚛɉ]!zt4Wg(ϤzYQB_. \''h"Q0p9Enl߀Iı7Os+ͽ|74!/egT (:g+KTl ׶.x䤞TxzN_xl¢ſ$_uc0?-׃B\=5˝3+ABSb)@LU*pn!Yqc/-ոK:7k_^ݨ{;Cn*%8��t{xRTsy ,"WhelrL]?}d}B6V5ؕfF}hW co|߲6e͏|uM~ѱ =#-@zvuֹs#B7uyxo5Q^oWmRFsTkWk~;%=w3g\~Lncc#XSDJ8-.Yn/xiY��@?X؟<t?lX(; L p]?Tx!R|$;UBK tkSyj?i^YWK`~|?]кͲΰYlݒJgkwS?}A;q_^{t:P&+k`ތ;ʮ_\{zzd2< ށ5{Ĺ^"L#*YymCcx��^_R|vYY17o7^il_ի>w# Mdq=<<tCKö<%scu/3&-%XPkj۬r_k"]mNgWL _>#+wOPg|#߬zÕjx8<\??ߟ},niiihh"� k}<@h4��M=``_հ+u)35OZW'[dS-<jT-Cӏ̏ НES+mڞToQFĜ;u<\*ԶY9.-k,XYrBSl-x<u;dp+G}GV^�����<>=<w%gC #Շ,LLsДNF?t;-kn#VI= 9K &O<0YxU!AԔUջ/;ڡc&+UOj������Y~+n꼊er<S٩]S>6-PWu&ۇzXWKQ4=zշҗ3OZsGz<\*Զ}=5ԔUp2_۶@bCzWԾ �����<><<Ks7oJ*5t qK]?oe``y 7]dO擆<|nM~uݗkj۬|8-9^W[ ZMq_%A}̐+j������YYCJlʱY5n IƓhz8�������`xN {FG?t^si?zJ4߿\ 'z �x8�����7P_2��������� ܺukɌ䂌 ������bXyvv:/HpL����p��<\ ɵѣKcힿbq<S�����x8<��Úyy%�����>WϢAFNSݲe˔)SRSSGfggϘ޼5m􏛄孆 lތ_<džD+q?81���x8 <|h( ONN0aBJJJ@@ѣGs<z/.W]sK*Jr l~< ߷ߟ}w���pAQ 7o%СC_jr~#<h6=2T¬Pѡ<&O?vW*oZ,x<0h퉗6E&R]]]]3;O6,eOKdgKlB> YP!0.뼨*/,H?0wАe˨csDGD%ovV]@jOmW!{eucx���pAQᔄO:'nܸ%Px!R,7QIvA֦~u_z 3Lw5<yҢ<xo=KM΄~;Ҥ-!kNK{^՗Q/VqȴxWnjL>HWjHψMGz.lKlnv o���<>sDK?A hpZO<I$ܥa[Ң^ûZn| *r |67*\.3ܦ1M,n)`p4xx⃆Bn_7)şu<|Eq3 '+j +jTt ɣ ΰ���rW=2,??ѣ~BQፍ[lєOGdžYA?ѢZ2ҏ/E/ ã}K)E?vS]]];d2ERU!zTYZqyve,n"-@>RoZV���ߑĉ+y=ED>i$"ᅅo듣[rURO=^U<|p˺۲yZwjJ`UE>wǹ݄╪,m5=Cdy9MhPG;j���<>=/Gf*>Y|08)YRX}3H )X+(wSFonƋ]ygΜ^vf+YKn.g#7'k<rp5ロHKxALu qWKQ4Ï禕izxWkŠnȞg=\<UJ_^>Ywk!aj;[d[CO7fz/d{oנÅMd]Yfs=ᤥ1ΖY^u3��É~KkSve?e3g>[yݿuGyxʩe]]]G'ٯ& ' W߮κ沲׿W6so<Zx0_ϟHՑ:.G໻E!iʃQ:<ҭX^{<oy9~HL{Q3b]xƠ9DxAKյGܿnInOkyv o���<;piũ%PY*E  vD͉  Ş~GE=L]d ݻ eBgvl?. |nD,nLOqlsRm<B'] N dz%=w3g\~Lncc#XSDJ)jJ ���#ËIKO,CEotonnv&=#x_\C7򂗧ωJWpGLj[1dfȝV37«݃y';zms_n(tޅ~l7qV ỚQ__wYYٵ~pOOLW<���߽m/({VcVLͨC3_O]\?wj 0 ^Y^*]dȸ�%8x,݁\ʱ'٧ lχ- \tg2*=g:K.D[ZZ{���x8<¶} WBR]צk8ל>i]lE=~qv, x/s}ћwKU机\[H)Gi],oo:<.7Nm{Rܵa>�����s1Zr6Ԝp>b[}Ȣ*ɴ*ɤ?M\ M<;38,+"LW`2g{/+yL6/x&(چE:< sx8�����߹ߊ/:bdy~\)yvdԫ~?\HKAΙ,<-\Y?{D٭ݪݪuS9$Mc m&((^P88((bBDBH=O"AqSOQN_~<OOw?W7i'键7;۪<uLoh:q޳Bcʮ}*aB)?+"u1< �����)1֧?;N%>i矼/uiO]ϵ aޗߗ^7%R*+cҾlޛNI$TRUwq}g d"2Ccv8r ن4"k ?YPi5)g? �����m_R n1{= �����Hpy[fO"~|Nu4*~ >4*t.1$$x8�����#P|/9~<@" ŐWHHp������GBBB�}K.m& 2����HHH}=u:]EgLMM �����<)N YyQ/�����#!!WGFF>J;5!2w&����x5�h1_#---]jUCCQq^;V<v*tLR6["TtkoS^˱^XR+϶!+g���p��<Eñ1VµZ[WWRjkko_iY/k5%mHGnV'���<�@ch0vj운/+%שw<|DUXƸ'}c.wO$Y%ƃEJT*:4zy8)͢2ғ*M*zPe}T- Yge|=VG+hdm3]Gf+BCCdl90 O(RFT;K*-_������V?{%%%/.n52> ӊ\0֊tڍgpyLQ64eN~Hp1˓-RI'^EP~ _pc7IbzdZ?qMί㲞s&p K����<,?ZZZN܆^ ?q*VzgȸNϼ8N3)HxcP<<NfHE] 1Q_/NO4坓WAӄ,VzqZZEu7օocE g m CχVl����}?2 uQ?G^xh,--M5Y)JeJR6wpzEy'{ 6̡#y%4_3H|jegW^} \yM>MO 4,*[ |i �W���x8xQC"�x=b1U^ wwwT>LD;DyxnKs& v0[;=a^�g~ΌUeyA([[X*6����={֬=NJ쭌W!瀺k_dOy�V'.{풾w/d_,ԄIC!RUlR pǚ"b{^ Z!ʜ u۰}2|dH3z<�LN7w czd Wj1[ Y'el>pef[{E7O P���x8xN'mʝFSB3˫DgV5N?*&{xMN4ûDI�np:z8022̜x÷]N Q)3kU&9 ZzWYsXycc\C4Nm75}beEQ^/|���xɉ΍Ŧ|wI]y\sg }O\솛S%bJ9{sBgijH`̘nH^իWߵgKTn_A7fH oyYS.\@Ik4Ic5LCCCDQ�����pxKp}Et˓nf=G)+[3^y0M2_ {Fvs5ߘ1(2zӞ˷SAzx0�x+Z6;3f||ooZI#<;;0 �����޽/b OL4c[o6D#V,0;rƯmFv6^7fr7 f`$_?D:M{iv�ZWÿ]4D-`p:ĽQ|�����px?û֮CsqF!rr4=Z2r#'wk\O t2_f̘nH9'ڴ ' 7@�����.\1r53\*oey8>d̘nH|0C x=������9=RM2՝uȝV>&տ{x^(<|xZiF=Ã3f30o2nkۂ< ������S~cOwѝJ|?ySSO=|Q_ORaWe 1c;Q0#y1|SB"D(7o������V46ԥ v1mb*"${CPv������ ?oYsOU?i9׽ӨAljTӨQݾW7`vm7Ҭ"<�����o5]a~_ݫ^F& ]*z#x8<�������ާtƘl @����p��<%6}=u:]EgLMML����p��<4O000PU:882�����o GFF>J;5!2w&e ������+Z^OHt]+-rqXVeYQhׅDBPi'3g;ӵXLs>�����ᯁj}ݺ:JU[[{JJe <xypޡ)}X߶ h?͝:xhrfvjxW,=|����px8��{`صkW«_kj`V؍ 1U+%שwg~D 2BR!s\Gf+BCCdl90Czø[#=癜SKDߛ`OĪY&|����px8��j{8+|W{rpbP-9n*hw>?d SX> ;I5 ;6;\zzGlxԮ7Qtʑ>25kZzM 촞|lϷ����ͨ񣥥t"g�xS=+'N ^UUJ^|SmYΏ+pD@ 1 C[y:U`k^g 9o>v����x8<pߏ tuu=zϑW�n4KKK%gEajTL/~)zx2\R)BEQ;=|jx@ V@  PUwم,d;����<z{8ZyJO${^p.tR:YjB/)zxbHnE'RAGm¸юޅ?7o;����<:zx޵5{hz{{+U+bH9S}{p0i0DM*>x/@ީ N{r^A$"Ԛ/qk=/챦X_W»V2#fU39'Vf uKל}cQǍeI1ܖ尌lkGz$ዴȍ}N^Mzǐuv6;s����~N6;Ե'mkTYl:sTNJxxGc sY|r8l߮(҈!8b;KMu1ifw�bt:ikznlJU'g|Y۰=022̜MqJM19nrه*oPQJ~<j1ihU|<g;V+b障I����^o<9ѹѝؔNw=+ܙk̾U:'u4z]dg.<䳦9Ntc|~p1xxW³[{)l9hv9zq(HU2m<XIMCBupifk%:u… dF4_444DTe �����DWonO<f}db1]7uƞ!7i|k8Ւ�NGd_]ڍ>;R@2ȻY o`oP%<`siزN' ]?$ QLAVxVΌ?'b``[~[V2 4�����<={_To˟tiƶdE5xAml44G7PXsv_Gh@ Wi/ -so~F)4Nzxc {޽1A;Y=s~ Ȼغ[EEW%mX $����Uv234 gcѺS9'{X_$%vmψC;yzx1{?<ݻ/;*ߠJd 7scu�����x8<;FcQUm>UݛZ`S %5?n:[FWwYe"vI8HpP,<H`P%x8Xnt]IdIx8�����~)s{N{:NiOA}uv9q1)S|遈|^rIW>v<am?sg<3KuNݩږt_)Jps߮].|uաCdIx8�����c}xTvɛ"~܌a"!BHLǧ坾9~d "ZFINxé֧÷]NTQҨkc}O/g %Ύa# ( wWMO{8H|*xG������zx׆.-[LE$%,1d�p�����U|'W%g͑?mV)?l\N ﳩQNG_�����x8x!12⻆x8<������m>}ߥK6d ������/1빯*rv87<cj 7�������xi I[[[a``<tpp0/*e ������+>|855wjBe$M6������W1---]jUCCQq^;P`Rѫ=C3W3Ν :)|)^e ��8�ccckw}NR޾je.r2b's\NqHiq1+Y+TI:oX+w4Xiv=Opp��Y%<��(7 vJxuu5KvMZ hRir)bnVr`9畍2ғ*M–9i)fum?;휼z );'ؐFQ,|Sٗ9&p VG+hdm:i̓`{y|;@}(KAK7>]jdYϡ��<��x%+))yq ¸ TzE;8L7˼ʴ?qMί+1.9g*%O*g{G;kIe^n>e@$3\Q8~O8-t*Jb7Ibzdzj{7]~P>5oP&Y}*W$9'O͒U;Xg=nl\Z|��7?ZZZN'r7ý~ "UUUz(̺p 29&ZqfmwB $Yӆb:ͫXywLt5 b B)\|_vPxvX-};E�*Jⴴo>}ל3<|餵I߹yf\&ZAC߃I-0#Z'Gb]<-0*��px:z#�x<h4KxOOϊpN_8R*n@nu7oD8|0?upMeGo-QMR. V^mgJ|%74=14d4ߛbΙn.4B˂ރvaƳp|Qx?��ojW�n~*D»W*خ)oKB�8uxi7 yxoZn%af:mw]Ιщ1[etXVp`B ppd|?|py2zSw���<yx޵5{hz{{+U+bH9S}{p5 :ؓ{+3o6Z+xYQOᓓ5UEĺյC1Ҍj i/X|)%`sw:,c7ڃ�7ß<+TR瘙ɇv X$I2[ u9giߪVNᒃTF6:'XYliYZ!B[1���<m+wOu kOjn4y8x3p�g;tTfxH;wNt:io_ORaWe.P 0BQ_ 0w$ѤÔޞgJL%?HCCiV6znAӆV^H;z` ~xtMo\V',y_:37]1Ju[B���<26xrs;u)ߝzRW3ܙ}<"gŝRw 7/Ov㭂4DLE$d_/ynD 2BRAmH3[{drr,ԩS.\ Ӥ5fL!+-cWrhZlR��WonO<f}db1]=\.2.ށ9 FCx\:*@} GNB8xc<\fgƌ100WV+igggE;,JݠSH~P����x8X"zk_0]ĤK3%/j jcK9b|jGNk؁4ឱaZe=IpxoK_Ɩb1 Nfսukd5gp#-@���û֮CsqF!rr4=Z2r#'wk  ~_/^_p������B~{r} p>ʿͧ{SK/^ßc ^jp������pz_J\޿*wФo;C,>θ6+ɩ=?rұ(������pc}xTvɛ"~b_x5SK7ؔNHI$aҗ9r6N)i:&x8�����6ͯ u)]L[~H=I|������x8 ?oYsOU?i9׽ӨAljTӨQ1�������^v ᮀ #�ꈊNp�������h1ΞݿkW0,xxҥKcI�����MyΝ K"s_U!pnx������_JcH YyQ(S�����x8<��_pddéDS߿/s'iQ�����px8��hiiUDNNUp2y2I F"l[KmA.o-e`4L,n[/35bZQp0ٞDKRYxޯ̳qY7^:LUBD"Zv/-4E&H f|]OSr̶.'L$ #ZZm{ݲ~#|os;?]KŔ<Z 8"Ui����<+Zw߭STRyX|!g\<ܓKxh馶7N-%jXyIb|tc6 *aY<ΉQGG-3>=;4eS!gEiι9ga87>Me9<Yfwhijbe%˪u| ውDWCGMN ŗ_4����N0 vJxuu5KvMZ r]q>?%J"g ;g)eR,@LTNO Idytkuq(JvĺEY ZJQ:9bz}N*T,NtcdNZJblDq81JAQzzgOھHOJP47;<y@EAt8=]pF˗''~}s`[R,%PJRpgIT9Ӥ�ۍ 1U>JYڭ M;`bNKYNnHhj )s2Ear8F{N oaC"I !-F//]Gf+BCCdl904C ?^fnffZd|WJ$E@c+SKDߛ`/Uu[8t��U�pV?{%%%/.9<`siزN' ]?$ QLxtN,95N-j{/_[Oۈ0,# coHȞ(ݏgwO2wjӑs}NI'[<Av$˓N?ulاM_u hx3oKr>s/}pz>؍\|o*R),96nۂgv䒏kaőǹs{#v$!"Or9̧ "crbBNL۫m[wkv~mv3<�V*9k]G|D_ 9K3gm]$Λvi=>57"U�%Η��U\|9khiiq:�9%ĉD«X +:NfHEޯօx89ii5[%9!cS'=JI1qy;?2S?5ӆb:3Cb &3�j3!5mYᳶNb5ifP˲Ƹ䒄]9Q{nYg*@6#輻|oa/mtTy(\-9(@ `r vNkBC*wL، GfmwI~8叏ϤMWƟ \q8 \q_Γ�B܌|<gvH|U:C��*J~_D}?2 uQ?GpXZZ/==+vlfyQ͓F{�74=14d4[ڙ<5;JE]y)M5Y)JeJR6wpJ7x4λPKNǣgg<ɷ%9k9Ϸ0Ɋt90c V|<빲`YJSU%O8'i#kՖyw U}-MUEj8朓3(F[D�-aT%X&U>4Z;Co�e"qg[.g ;qF@_#_?wW �Y%<_T [բrvzb"ᇫ ^SCC q^wNUÅ,BٜM.jýLDYS,;&Q4zr/O}WŊg|I-o\/ Qx ԙχg+^iz/Cg3( @D xo&?r-tԦglwȊ޷N'Pb772,o77Ern;4M袛FutKvqF_po<RKD;z38|W �Y%<_DƒTq{Y{D[[[2N_?CRu׾ȞۅKVRja{ӼP;xcp0mpǚ"b{^ Z!ʂSu{~OvθOH-Nip2Õ}ffVw$C"ϝaF\cwZITH@I3O�]?noroy}EM<S{bel{fteJyuxFjKlM$krX7wt Ut$ⶉX ;6=Y[/B#7MN;=x'P)C"iI'w1YwƘpL?ۖF=fxYo 6w>8,c78)?4Z@Po/Urֺ*^O?S"r^Mzǐuv6;sHU{~��Ux0*z8oW4RמpO>r6Sd82g o8x8=&rXS]L?]"$�p8&&&ISR=nQh?pu>#) iZx%g-ki 9KVFIR-iI;sPadd9y%_-?|>] +}vrO3OO.S{mRF7&ۜ9Ϸ{ÍMꄔO2k>}`΋3aRdmf 2@mӜ˒f'}UU–{Myi@Ť~3y 1scFZ,)c<=/f]a N,RUrֺ`.@U<_[yfv$WN)?~W<�2R=26xrs;u)ߝzRW3ܙ}=<E?߫3ySip9qwdžd򏃖o*Z]usZ*{z=o�B7fH oyYS.\@Ik4Ic5LCCCDQ����� ccq-OFkjLdڿdMVsE=6 G wvp8xԅ=Ve;;82xαs�x =\fgƌ100WV+igggAi����1[r'&]-xQcl7^P["  T?=\FPC(e‘N#}NKN4+/2Y}cװ-w`;ÿ]4D-`p:ĽQ|evZGn 9����xz>La:d8ghT"*Nӣu!#1rOH:KTvRL.xjwavf5*/2C-p������}_#1\?*6M-ѿp>]/R]/2/w`;�x8�����ù=|_J\޿*wФ`<�J4=L>\/w8Az9������@/zxow?SO'ojipa,Ir߭vVp8<=;v�p������{=MkC]@oӖ-"~O�������SeP-?ki'M?>aw?hMw?jV9�<�����/;pW@႑W������<�<Owҥ1٤AF������xKl zt= ϘB������xKi I[[[a``<tpp0/*e ������+>|855wjBe$M6������W1---]jUCCQq^;^ݩ NX O&)zy_CxhurqX֫czbc&e&R,Pk" fHໝj}flw~)yVηMS+谰e\ u!q¸J�8-wK>MI%,yCqܑE9|$Z* ~ u u42Z- L/}*-SUu}Vw2%���m1VµZ[WWRjkko_i򶣱Bθ>skno](&jXyIb|tt.jbe%s^ ]<493;5+N_:_ooTZܐK`R[m,"Okv9-> >ܑE9|ƵYA%>K91=EMm7nN[|6_'|ٸXi½{a}z*䣣W���� î]^]]M]V%wO$Y%ƃEJT*:4.'}cSeY;Z]))/.@yQRN=n^ KS7{#)l9hvܮ(NRP^Y䢶2ғ*M)MΤ.v-_۷o%b*"!z+|QO_~24ԃsm@мK̓sj{2e"jyҖQE!:JsnVr`98eyLoАv:T,Đ%S ɒ9;-m$Y+ܐ@dq|^V8dI6S[#=%���pV?{%%%/.Y<`siزN' ]?$ QLxntN,^j{/_[OI?3=Ҋ\0֊tڍ7/xvl!{>9egdyRdgM<SƸ}%߉t6?3?}?WJ=bcF}~5<7*TxRP'ն3F@hDJk2nMa/5ܷ6M 촞|lrT<kv~mv3C]VH08~79=~Wޮ$Di].TAdVvo䜡rTG$rw<#|P,+)p6&>Oinor/p%��_]._5~8NTe�~ "UUU ribGZ3"WBg<'֜鴴oOwy%a>'H;3/.\$<y2?3q=Y6ik]?.-: hx3ӻ}@HM,D8ږ*xx_p||SwZV鮄N+ifP˲7u&o2nF>s3񜧛-#158\W]t]7cxFN_(6=X`o|rTE9|ƕ'$쪷or0r:W-Sΰo6Sj+O ̞ed;_Q��<WU*N uQ?GpXZZ/===+OonБǼ_<ipN}ӱOCC(MFA󽥝SûC$=z?f/|#TTT*E(js${I㼫{ I6?3?}]`jU eenr]ɺ<`dz+|92[&G}.pv0$zQl*h~puY!-ٝs⊜<r*5[ss r#7rP"@U䋜o}fQJ*MWdow\+)g|O6>ҶU䄪[h(��{ U<Hj�n~*D»W0+BDo9/#XulYSB Gxnl& HfEK}9𝂨eyd0yg|y,?('W?<on\Axv�9M袛ϮK-]xx`YbpA([n u!= )h^A&sdL|:cC䛝!/O:<Ցj?ϟ\u6R =<@Y/L9kL1PeZ3MӮg?M��<Up"A8={֬=NJ쭌W!瀺k_dOy%Whҵ0I=i^VR[}/ 5V$Db2&wHq|\v"pǚ"b{^ Z!ʂƯSqY&K]q2[ =+->e χ+'̬HD;,i Y.蓨=9y'Aigy\g_^]39'VJ<;clu8mX#I=gִ?I&QfT,Kj#gn٫ SFv',[p,^ͭ^Ͷ@>GHX ;a61sJ^:E]L$z~>S勄3r掎aaꯞT~afNP[tmq[<as7&SbH 7903/W �x0*z8oW4RמpM>r6Sd8r3yAw9BAd!�I5O|Nn"g5Ť%Np:clllbbb```zz4/kU&9 Z~3bP)8^r(ߒPZkىa4*%‹otPadd9y%_-?|>] +}vrO3Od;R )d6l}Uޗ87f$P~1ff0<L*P^͗Äc)rmmfv$WN59ŵ eؾAFʧJ~|PKnfkK%TL꧍=t$P)#>[3r˔/l79+-{˃/*l}��xkAWONtnt.6]O3w;oߦhieeoa9nD 2BRYQcuػ#K^1]!@E8SJE N(ȡ\�x#=d|@#%deNp&h$5d2 G����j'NYWonO<f}db1]7~k2G fooX�.L$؍ ME虙QtXl#^?PUsGP.�j3chn֫V4³ �����x8<|9"zk_0]ĤK3%/j jcK9b|jߊB(5tL8r;w�r/|V۽]P_wsq*_{`.φ]RE%3<2ğ_pH7ÿ]4D-`p:ĽQ|evZGn 9����xz>La:d8ghT"*Nӣu!#1rOH:KTvRL>B`߁x[{5fh{~-ffGukx8],˞c=s<�6x8�����Ã/v|TGOU_%"POO02]J%:-P ΓS_= OWqxhApH�x8�����cgzߛe;;r}>iM0ʱ(ZK>H%&GI{ΰwL{S3<KoH|8x$�<����� tOpa9LqJM19x Q9}W^h2+ް;R޷pBFtH�x8�����K46ԥ v1mb*"${ˆGID_px8����� x8yKϚ#ڬISď)ظFgSF叚տ'7RH)?G1x8<�����рOiJwI�����<��O}.]Md(�����<�ưNC))�����<�ƐʳJ2Q�����px8��ÇSSS~&$߿_NdL����p��<|UV544:۝ a<$eS/om-uȺ"<(PmⰬWgb7^_H볻7.=]wonL [63ͼܻãkR w~_q~J.{Bb����+Zw߭STRyX|!g\N0/f c FZ3ȣtKQox]¾3a\ˎY#Y+x38mŞĹ7 >o?5;nB:m3Bg���x8�� ]vy%%& f)Q$>d9xH)JeQe⤢oLvvzjL"c[4EQ2EԶؙ.@yQRNf{V]IT%ѩn۽IKI 2p81JAQzzg*Em_e'%U9W^=pO(RFT;wPlȲ{:TVAZ""ꯗ~q:c{5aye߶CfZŬq&ܝ Ӫ{Ӯ{G34QtTr}~$Ndͦ)Ic5ߐ9Y-nHW5y_&UuZVSb26۞K .ICIUn 5)wixBֹ^ sR_9}-MSRixLys亢1.xvvZO)}|sǙK,N)e&wƄ57= q]"�A���<��x%+))yq gRSk9͇4ryzlYca(&<7sz|V$(Ќpߓ9uα{zaҵgHdαv>?dvԧSKD,.O*xI'~TK^%AwPu'B+\Gh1v>WA0_B)>;j#YzpT(r}/wI 'afnmyƕ^=pR$V+>ou=&w5!z^0wo / emcs1 TF)JvIdi;vgmׯør3U1DJ7PISILlc8y8E*u}˹qrz~l )1[F��_3._5~8NTe�~ "UUU "&vz5C*/~.Dx#oΧ+9@2cS'=2O1qy;?2?8yp\LuP, =8-iYŅB$mYwlS+?iffƕbEoZzu>DǍ*^鹙1񇋙H<[Ҿ $3]쎋OeأPE'>9$ [:fdw=G&9j~QyΙ է\2`ڎH]7x8sSp慞vEޱ9J ��xƯ~USѣ~ [F_{zzV*+|l6̡#y"}}ӱOCC(MFASûC$=FG/|TTT*E+]K<H(?-b:-�"'}'+H0S#eټpu_,xVx9WS%Ӗm޻YdaadX:->02 o柌 ˾2]]AV*]p ]l_7B|@dܭa۴%'E&M?_g8ghK@M,^Ox8ssg>w["Vi_??��~?9HRZ-*7�o[,&~+>5gzxjh\"^7N=?\(:-"v?THzo;QɾaE-+z3pP3ћj=>q0DUtSg+K~yؕ,:b5ں-Qs.Ǡ@ [ȊEK.gQu -,6,VKD_9!z~Jj}mc:rS 5վLt3},^g &;ߍǗK{+V rD;���x+DƒTq{Y{D[[[2N_?CRu׾ȞۅKVR_>DP1)g:͜{ f�x z8cMU=wuex)Ǻ=f=$/}Rw{pB'wb4LC` χ+'̬HD;,i Y.O% Ýw(AR_E7pf�E%S!B[ibk*jz+{=|V(\N6Z%&-Pݫ_.zW_#){d]2=m8% Y03oYg˻>Ůgkg.:'I;`z9^Xo]}D$>R5ٖqTM"bK:f.G鰍Piֹ'iX{ݹc /lGUѷVH y6-L]���-=)`Tp߶i?M/=|r9m"q_M{?p~g=3}ѪsUxdHB"A�BIPQQDDTP!2fBfM62)k}kg)۽+{H{wy<MJOV\A$TbQ* d2C[p-K.Y-_qspbiIyaa<OM<.7'[ym7%irN]µ#y113 xT%\jX@l +QԶ9S89&/x^YBrjwUwg ^pNX=*k"]p6ٹI-nsׄ L; .O J3^,g2E݂d"nnvt%5SnOE'g~ 6wfoOe}VAmi0Nnr0[*p"ls'U}RJ5j!^/-ɎɊUq)_)t$3s噌:7b��難~,8\3ݳq#W<̞ɚt??=<zZ&'is?o""�Z9V($喗%ֶerh4`MjGFF;KHn}9�;B';jOh��x{ᄂ11}k:6}WtdLKl۠+ގ{\LS@wd{wyx�_fޔZRP(6]{ppPדfs86k ^Dӛ doD)G7��w~<hC4ﴭ57in55-2MsjPu{]kogDp^(Wp(-۞ ?ED�×?WΒ-oNVV+qo|}E~=>`wE @_\ ��x4?aHuL}9F V&Bk}ciI\o"߂nfw' /ED������x8<<fcF豿CGsE^=^D�<�����oV{%}x_:c_8kg4Io""�p������=<H lϗQ{:p7{�px8�����s/ᴇߔ.YO$=�������p\z']\?ͱ՘|U6EW[cj (߯=�<�����o6^������p��<[nmY������x[<>immGYQi)�����<�!9VUU۬P(3JN����p�qlkk$/GMII!ɓ'ҋ!)�����<�x?GlAҐOLL|ח/_&*׷.:q_'Dg3]Ae ec܍ֱ`vLqXATsV49㩢#,WC>d 6pYƉr?Z>.Q[1`����ÉfIT*) ^bE]]D"zpsi:aW.v5^~<}cP@:-m8{[023k3ė'q]N 恶&Q6����×juqq1-ᕕ_R49jaW k\8e[F$⇅84amo:q8Y{*>(H\6/RVTJmIxvsc[J,ŕ3:h򙉷9< ȳMZ.v_LرM[a/؂l:}A׵d)Ɏ(@zi_MoUzM6꣦;+4,+՜i`%-Yg)7k算ΉNȸ^ՃtxZ�����x[pJ¿ZW\YXXN9 t6w{2/xEӮ6Dl,S_rvXY[L]ncH^aqS0;퓭QZ|f¤r2=' .x>5zE*ݴ�.\߯6YȅԸ1~$$T4my2ycûGf|HVvg?NìgrW syܔC9Yӗ%y{cnv6m���_۷O|ҋfW�}Kӧ?~𾾾% xcfq;59dYjUΊY!5s?ȉYSK-_ˈvl 1CVEOO!Vm_&t{lRb�ߘpAȜoZ�ia>]Ddhȥ)wѿH{ =[N(3O:l.tdy^fϡozkΙDv3é)q���/O? ^ʼnx/q8>|?z9vn�ÿOBhJJJ%w8^hX)x\#$Yјj?_ONf$NjQdCQSm~&~8u/hc_V*s3/3L 27M tL^Od_. Q2YBUr-#',yxt=f�q_cr-q���/?Ax]]]epMK8Y&k~)DkZ¿ "?^®XxSCB/Y"ZƩe]/`2:̰[*j\)d,bX~9N�[F{<|(dPMK \&<]FҸ=:26sO{~bߢEw̐tNH~F']2/���pxb'S޻?>bMߑ$z-};;9<N(+HԣyH?ܰ^&;9)\t9ʑ%YۣslժUgFG'LNNow&_uJZ>\W-($Wcf''ꟴ<wXof.nյFRäV]_7ßN$2Y;9VU7/ ssitέ&pM<|y-f}z);mõ'NPwe{F6q4ҟ;{Y E=|yMCEþ8mplg'_���5K<<q3&䎇mlU4әmVι&g[$ {_*':8U[{.v-;3Rss0f]S'P($jZ֓0/W v jXJB0LDSß#7\.7L$M}lWM>#MiSuڑiمg=Ý7*k̪d)˗$dlyij#MY4-K.Y-_qs7_%V#4:Ck~sƟ \YP5qWO\qq{[Sd ɩiߥW] fp��� U|Ïk{8!9x䊇S=YS=B۳ M}9;<9rWĊx:] :5:=ב+y jk9O73"3)Hv{d$n+&sr zo[/0YrgZ#s}᳆Ңy R?Z)+, ijaDLyYbmmmKK Y&G]FCԿZvdd7|ɶc,e3Ϩ|'ɓ|Do ���ᄂ11}k:6}WtdLKl۠+ގ=5O^ m\ZT#DTT5mrV~Hո(}FêSJ$H+xxP;w؍ ?k}9Mmw~k@/-⸌Ps}s[鮖W-=zSjJux_BtA^O¤Jcyz =|9+sUzYݗ-d{ar[{���x8<|=< UӴӶ\!\״41Ѫ+Beu=56,|<%ҧ{#Q7y,ǪdE6u3 19q[槻U'rtՁ X!5]DlrEa0MKer(l2xxGO>UEEE뭳`K[өjJ7pfe?,\w~v|/֋Vw,m{����/WLxD}eQj+yu>^DZ4V$?ޮpo$ "~>51,+O˽pXI(7C/]v{w9DtwxoRtn.w $jG������F��1JP\ ������x8�����<��p��������x8�����/TxbQESCC&3�����n0,!iH.;@ > ,EQI3�����pS/!)u#GGz8eځ!i>�u֖՛@�����x8<@ߢ>immGYQigA�����xK<|rr@ߪgff[UUnB((Ζ,�����Z֭[gϞ\G K~iLL 9|0>>>~є) <yr q����pJuճ.VpV=`0~�>11QRR__|x__ߺ]sOl+3ll콹yj3*>bq?T4m$D?gu,z3V{���x_~Y7p N ﻇ+JJ«WXQWW'H\",w5^×؂Yax {o&&6EN+vKyN/zryz4c44ON���_2G Z]\\LKxee%Mouy5,v᝛D&stM27n\'KzOeREʊZ<Q8~/xnVwlKeyfCG osοy.;-5)A&gݛk]j( cc=<_6tk9R6Q8f5 8PH~ف:_iv-Ŝi`%-ƪjժ^ KYRqڡE5 ���d~ݻwÃo+WS^'+sv}Kt2^lѴ䧍;8[(1Fzh%"wp@E똀ɼnL+;"nfâ}5J@{LYTsU:aROէ&u1_HÅ9PWcu8FڏuSntGt !qGSiFwe };lq|Er;�*���<< <KRO>M$㔄-Ƀx]vZL73lmGqA%PoBj4KZ%?cɋ &ujL{L)j٤>rK112AȜoZ�ia>]Ddhȥ)~�$7y[2ܬ|2=[N(3OHDݗhC¢r5&MLlrΛ����x^:hJJJ%wNJ 7l$ɊV"}t2#9^,"˜m]zq^ UP YCf/=_&ft癜5Zdn>m&5]JWsh5Ot=,pgϫ:<[(=FP7/9Yȸʲ[ 8���Ãp?i~״D?~'N;u9)pl,e=0 g LfحqwVGEuX1S,n xxxxL^Ã-=>g2CR 7pjN)+On2Ͻwel~p>iH,4+ô����wzTpc <OVlejsH֢Sv줓DYͣ¬مíHjdҪKzx)\&+z~ÞIl%Xu2y >78g`ak=F7ZaO)m>$|sՁ;<@ͩI*6GKߎwe{F6q4҇kOƴzYw^x]OOIv NYvc$vx&u ����<|*;8bQESCCv)8 Żu5[Vrݗ+6:jX,Jrzz4d2EG*vo\nH5:ٮ%|.GӦ4y #y113 {;mf1vzY՞,pÝ3y҃mWiZ̢5mYrjԍk/xjN3Un3K9OYB. ,qѶ6"bmۼ'W#4:/lT;l+yy���x8��|$%jaDLyYbmmmKK Y&G]FCԿZvdd>Ǽksf)yFeWL؇}~R����x8��|t^]])}J:/ZP\m@^'ap89ܜFߪp=۬q2=�����_?WΒ-oNVV+qN#y<WכE pI7=f"U&p�����w�����<��p��������x8�����/�w P(mgp�����xz��ȑ2H�����ͫ�wEVp�������%pMHx8������G}nڲz9 ������Qڞ{_& ɿ﬇>immG*f0p�����磊ONNZO?%wɱ*gfBQQ2<<-MY������n0?uCɚwǏ=B;%aݓ'OC6΂�����px8�Ӆ5OLL|ח/_&*׷.:q_S$>yg 9_ d ec_}hپxԥp.Gm{<ELulI^#ˎS=gя&Kwe4^i7?9PF"d01k^xj4��|>Y_ן7U2��ܗ_ÕJ%%+VH$UUUt.ia0-Fv5^.zcߒ^Yu(짾i?_OH-7_tzȄw^AzW]gÙ!7uKuShthաW'jN641e.d0B{—g5NYpI �� ?U );)1��Vi $Q OD/k2''EKpeM"~XXXxڎC9:S7Ol2{{De"eEU (]n`?jw<7;IJY\<ɢHeoNKMJIY&}Ã! 8Z"$v{7_Yv<?Cp<ٺMԀ0vN 9_.CdҼcgp0"5dY1WT@gL`0Ύ^%r/K~6c\ ck;5Td[vֺyIktû3R%&4(3,jiNbB.%K⧄[5q0.W .Yc2Mq2 3}eR#x<.:}*omUVj̋g|E[M *oL4 QJ��zxݧ~zK=ljf߾\}V2< MQ'/Ko?|Ͽ ֟!ۯH6+~�{8%| -+W,,,|s OW:iʃ E爏yNƋ-v݋q'bͱX#_rvUfpJ:&`2ﺇ|SE~J"nfâ}5J@L}UTsU:aR}믬kUFq:`cfMgzdXAMi2d=2ΏI?0>^UIv FzvnѲ.0SW+c${QU#$td׆F6j򬡗=maQ>+o7_k;ȗpzp'b`ͨjoxWI64k|#PnuDe <G>)PM):|q4#̲xg篗nv)gyHNcJc?*%5��|I?sW <R]'==%/9?K֘H[vX2sk&)E{<|rmCS޼5 ��NKӧ?~𾾾%9yt3ָ5f|d/nůY!5AH?ȉYSK-_ˈw e8Ү'/2|}=Tmi_"_??'٤>+2ut}#;n-~ ]o]2wW\u7LnEoZjUyuSpc(0-^<7$۞z+H2/~ vrBxby;M[F 1kjYT+$,fb$jح#fuMC{j&>+S \T??8ne 7<@|c^uu];wmJ��!zkܻmw<gg}>ͳ#f^ʟ.m5{Uώ|g_*cOĴ�ÃܖN9<<<88 hJJJ%wN=J{})x<ސe1$S#4HȆ0&IԽ裍|Y0^FL*=U۬= zYPnώ XlzېlB7Xݝ+cSkSD/Z ZG |j.4ٶ�RyCEU'详FtGCuɒ(gWG8 "vs{Vc?#Afe0׍Svd& Xaə;Q>WzӺ!!m;'Ol3d=);�Kշ{|q_+%��>L1>5zH}ޤҩ6zſ>駟NM͏O*o,%N9/ɂ?oȎp�K<$rtZ~5-_|Ǐ/qp!L!=(YZ˸[!&zx 56Εz W:Êb1w=5=nlǍǍdzZ ZrU>Kű[\7_v]vs>8N/c[wHSw70 n&R(-+og%PێYc'SddcM .R260^Q]7F} wr$k;Fl%xI5,H3Ҙ)plD37;}8>WzM|H۞ X_Tk{ɓ<3W=J ㄉMjn<c��pmSܫ>g;{{ßٗSuuEϿ:��={&8HpRĺj%-.+>Q/H*=6:-:eN:O?iy<-̚]8?ܪk n& mxt !Ɋ&ˉUL\<�$mlTlq3jzp]_9ZuӠ]om! {8ou1\ aȏ=qYF9Qe6$4w™cvI}{Lz[x&kψ},h# uԐrvIuóz;0O^ a ۜ-u ; 0lPCJ2UOq]V.Gj1N^P2L]Iq ۭn_qIܣ}+IW$U`z��az^{/5ç:iZ8]ٟ}|l!yRc0{r%M:<= =?|jBCSM?.s��X_jk0/W 'pXJB0Lv}<<R{rD݇v_ܔ(s96[#ɋߘ]x6s<Ph!m<d)˗$dMM jXV>ʲ;#xxu3Un3|8<zd ^pNX=*k"]pVٹI-nsׄ L; .O J3^,g2E݂d"nnp䛥f{CW_!{{5{|R@,+>7jKcad_~/zCaT$Ee5s傑U0,NU zi}V/@/]O)VdKBN' -dֹ�pn0sm?_/!*o45"]oKfv73Bɏp\/Vt�9 lՉBRnyYbmmmKK Y&G]FCԿZvdd>Ǽ۳sf)yC<QI}x']]eMe ~ek̆ < ��>\K<W �՛WT զ ~zrlcy1oy\kt LT/[Pa:}MjW4HlrꞘ-?}��<<v ;%o@0��}|򫊊[gjj%cy<WכE pI7s�/֋V%.m�xwE @_\ ��xB}_~/W,י�g<������������p�; <������������p��<�����;o�w x8�����=\dRQh(H2z:Y?]阱,3'c١G1k6@Q Ez*ˢ<eiKQ5ᾞ+nLdR# 7{t&dxcqBWە]2vh/I$V*nQ{?5LKǟtIeubT'kd0MGI$H9[įTi{)o;p�����xxaA@^#Y|~<V@ >xu֖՛@�����x_/سs H2xk[fU{@֊}8f0p���� x«h2O ^'BW coUUUκ <dxx8[ �����<ܷ#<M?zhJJ uO<9^D8 ����>11QRR__|x__ߺ]sOl-hWw~I*-`-\"sSEGpY,0*Ƣޝ8笎%^O}&] apãs4=����#xRzR$zŊuuu%r/k(ͲyxW{zy7r^l̬0VF_݁D܄in)oÉ\ԣJK\{ьѬӌ>?8=����#xRzZ...%K&G7ɉqэSeM"~XXXxڎC9:S7Ol2{{De"eEU (]n`?jw<7;IJY\<ɢHeoNKMJIY&->$n+H$ɹލWݬ(8\.OnӀ)vN 9?鳣u:YaNf4afɒla\jUF}tg,zB8l}ТH���dNI7|CKʕ+ \)ĕN-`bxB9~O\T%:/hu-yk#SN;8sjut]PvcH^aqS0;퓭Q}f¤r2=' nx+kliȞC5E93%fMgzdXAMgQ:_,m`3>$ۡh#; >,Qa/zM`0H9<yz~\\��<|<ӧO ?~8%}}}Kr ݭ- [T#ksPɲ:8fŬĬ)饖eDƄØ!zy"ɧg6/EZ6OxpʲL]!@W{nF]<OPѢܟc7Vu"CyUWtg usRIs{BXTn/YMΩ���p_h4%%%ۻT'{{ c Kߕ]4Bh7Y.'M'3(()E׏Em*]5tn2efy&gMcҵϲH'r|vh5Ot4rc7;{^Ց.qB1bIYBm%U|lp8/����ï ?_<i~״D?~'N;u9)pl,e=0 g LfحqwVJEuX1S,n+ xxxxL^ D=_YjxxXy8vky?;_hoŽv=?\{~"FҸ=K>ʸC{0���x+W sNCC<6@ ēuJZ>\W-|.,^Tz^mtZtʎt2(ayt[5p~UILZu}IP>t:EdESDp*[I&V`{~xL^66*|6Y8A\tCp~8QђcF?n짣|wlY[{/3ٌ />\{D0<5[RvhҮz*-Lcp&3[���~=ǎu8dظ&:@ >rjZOV\A$T)lVbQ* d2EDzG*vo\nH5:ٮ%|.Gzh"=v$/&&~cZzfv|p,CN1s._Qw7K9p&Ϊ5b[XeM<<ٺEKw̙*Ht~nQ:_,-3T%X̂wmk#"ֶ{reXa0BKv</aO��� :_;\LNN޽{ix=\"٪ږLZQ}yY;R6;<ɱd˾����p~/(++=|ɓ'ΜngW5v̳]Rvk} ׇ'mvqjf^qhhlϮ4*C-Q> M,y26e4TK!�<zSjJux_BtA^O6X17<5Vfu_q<����5gNk$n9?do^/⊄qM,PΝbCf[u_GTԩM'6RQ<4Po-ڻC}C֮o~ @|�'h품NSV{<+ZStTw"~X$``3zߪ|{Dx8����<ԩ5A@y]7ƭ bclJe7G^hz٨zt3b5N59N6i?wP1ͣج2~OM<vQ{g6Z홡B#&lJTp������#?YuB$٢f =,8_<x,uIi|Z$nmXaQrzu|rބ~!%ҧ<=+s-j`f`Y*[G7uJO.z{Vq:;C6ǯsuI\ �����xo?^yt"HE];ƅ\)X&-[>kRގc.*G6hqg}[Rmٟ,T,.r8k<�����Ã#Ƃ${=5̪4;1{ŧYe'?fzdxRQT&NO$*2L-gUmgonxp5(�����Ayx#A@-neOx_[oU燇&nLioZ$̲M?Héݞx%6;7h׬;HWs<|*x8�����`<|߁ς$!GwE~^:3tşt %!z-G sIV!-xv~ 4[.*CU%p^Տ6It{7𦆆I �����- 1cYfOƺGuIz8[jp_OOwc7^a<<*z㧣F}wN/_=:l2<Hyy►s#GHJx8�����x< b<ܥ/wnݺe&r@)�����  @ ~%IkkkE>rΊJ3 8 ����}{yA<@}BUUU96+li:΂�����p@ 7a||ѣ)))DS=y@z9d,�����#x{DII_}e}}}[[[w=|<wEpw<-`-VGYӾV~l_~RKlw8ˣ¶=[:$fe۩GxX+U.0yJɁ5!3)Y{PUX v{��#<J+VI$w:$[[_џF}ͪDa?M{iz:/Gjb[ԛ7F&ZkW9 .a_/vFL+CM6NԜ8mhbj5u]`g߅/=j`��x8@ÝbZ+++ɿhr~3ǃ! 8(}rn7y5De"eEUz d6QCMC;傌W\+oNKMJIY&pf@\[M;vA׵d)Ɏ(@ziNbf$ŎMzO52zx&?,,,<mǡ ޳QbdҼcgp0"5dY1WT@gL`0])z(ʽ,dir)/#MPm[%''k|& p;LK³ʚ\ߠ$`$.5:/ϊ ,8.Bnd&¸\8g5%>ωJȸү6mKNk./㲟f[jUƼh}Vg/QՔ ƄM2oM*��<@ 7r7pEDYqy}\mdiځVyp`liFG5E/fMgzdXAM'0\纉:aRK=\:_mN qe=VcHHhڕIezE*'b5z01<ܔNL~O\T%/2d=2ΏI?0ǽ}t'gOfܢeť]laڝNV9dI/l ;>ۊd׆F6j򬡗=maQ>+o7_k;˭빢BjhS1[ZfTifO52CvPnuEe <G>)PM) ϿvM,^[x}Jn/ 3;��<@ >v%D?NIx__ߒ<=<[{<'fMIKҮ0lzs7yMS,zxN|ƯqtV!\? 47&܃!3FcL7Ziܲm3>bps>%wBT&7Z༏)Qq%DzynVI=e^v}d۸Nw~]NO,s'S{KHu!fM-KjŬQ,Y uD iHq\-gex}jTy+'lvoޙ^r}q̫v뿭wmJ���G 5MII.zL~t2#9^,H$0&e>PnwVd[j0lϹfy&gK=NDgE6{xјXGV<obnx)Ƕ /Fw'*/1:2hצ]_ܵK\hmK ,:4>_QujMwT>+?Z,rQ"Nx|Ğ՘wz uԣVXrϕ޴n|HE }OJ<@|f_a?#p+%a�ï ?_<yۯi /?~x ONk𬡓 5;WJys<<1^:<V.Z5z`gBf<u9)>Wvs>$;n!vΣ[ ҽLQ,ZVIKΏO Fƚ]elYad2oHw>\JZQjYf1S L?7;}8>WzM|H۞ X_Tk{ɓ<3W=JN8Nv3vy���orwihhB<|ff|b_}.')oc§Zu-!;q3jww%Y{}zO8I LY;l'¬YgQxARy)$f'<<`ܞQ3V5s}0^d儳FMڐЈ^&ؓY~L֞%?UY&GRiY!34,Buóz;0O^ a ۜ-u ; 0lPCJ2UOq]V.Gj1N^P2}Wy܂vi>3W=d8Aҷ;|GJIj>X/+��74\ر,DGGu5[5r`ݗ+ww;nu^[,JrzzZPL&'mgv=i^;1-=3lk7)wG0l];L[C:ß5mYrjԍkxc\49M9?n7T,sID݇_, ˾BŒcMı N}vn}DR5!gy.%B63rL6<KLQ Y[08\.o/CW_a1Iܰj<-huJv RIPrH* upt{_>.'>+RzWť|!g2��u(--v{n1{V3DU' gffkkk[ZZ29j4rj###DqKHn}9�;BW\Oh�֝EQee:yę35yv֢zB5lsiƭQW?6==he-Q@Xdlh02N:L|뭗oboxKޔZRP(6]{ppPד#fs88׶<[57&u =R\G;o��=imd9燌E\0iX?ҐE_,GV&}8>h!- vx>f]:m#Ῥɯ***Zo9$jj%� p0: ��:&H2fָ޲AL}M`UBJl(o =K;Ntݏ=y:2w??crHy|wbqZK�Iak/a9tNmIJu#c4-f lPzϲHŮgj#3=#@/ily|v-LU̳n~Xɱy&|yi4q|+φ!Kp������#?YuB$٢f =F-OOMf4/f.lӊnZۉGEڭbw"8h՘cءko{)+3n ef;˨"Y:63ZA13x0gGn> gd+X?>9oj2m~Qy8G M\~����+~Ddǖ#w"6G\\)X&EEE~ۮ4=e=+[:P܉}vrߖT똳qiR)u8{]ʺ0lR,RL ,VL? k"TC }ix{*G6 *"{#p�����xG*IJtĮmM/;{YyxӰ{ d!sOegl<{xt嘸yCKHBCx,-#è>}nu8f*ˢ~\�I6mdz7����:0$PYK~s?G-`wٻׯ&>YgoY3uy65 $i.@AmضiUFZ xAA@@I o 1ж<Kޛ[U}yB\Rqev><#0= a'8ti;cV.9a&5v8RW& HNjiy&=|~>|Ν|8��r?qKoIU&d4,>/]禪T;V_rQŅpnMBWr=%]Gyl=O;_]Q#S*mc=QzxƎ9ǾSRG⑶cnZ*U __InEuM6JW%ן''ovz=\\Ou†d<Q'pz8���=eߚf]kBW^3ʌ?-8[ho`w ZS՘~D˼U]m_?M6u20G1>|ω'Ī ?4K\wdsH[mq. ~]}}&z$Efݾ:;y^:��X! anB=���ËK% !p���WËH =B���=|=B��� !pz8���B���=N��@'z8���pB=��@Bp���|=V---:PKC ��@_l d2755eQ!p���נ75]s\צ6j4B=���ƆpʎL55B=���:s8%b/;s…+W.7'$TfkfU\οʓ,.q7eROa}voy]ScmWqu":g=60nl_1:ސ U)23o G5xZͮZ%��@~Jʹ 8ebF˨MS~28vkE=\fꍎyҘKx[ [vtzNuOb7?қxxr#ݣz8���/:%8,9FnoSMn<R*j~MB_Uf/kwv/n35uH=)~;=}v6+.f٪nQyJvtX:Ϧ,N鋽S2>/<Ј>x_ybqNVI#x&жK 殟B7v'SkMӋ1Ϩ.|rMU=<Iuo41h^p¤ mK|4LB���=mP]e@YqKn=ml}ۤ&jm{޷I rũ㳃'gGfGu2 3-cӏ˗χY= eܟr7M˒ѥ)(=|U]{!-);zp=<M=/74<)$~׵۾>Lkq6aŹLƜNjrݍ VTf&*ɴ[C>!��t?K峻?8ۙ*~{\5_vl+|{xWW^NjIbϽ96f〝9W1m{|CV.o]\cK�hRaa=ίn. Q|}enNſvzloZ0wL5E8 "+TJGݛ��@\1.8L|Ju`>uRH=\] jI5?|>`D<OB^URy_e|L%L3C{xmEKmvo{xq^]izJ<D`h #˘c%UK"+\6 ��8Fqf|"cT;OpXggc^Mk2ځB;'̤6Ykݘ蟣Qo};G=^HQ:^֔ý6zi><÷U|ߧ.v2m \)&8F=Yoz&F&GZ|;pB���=<R?qKoIU&d4,>/=1N9%şmWNMYQO^QW_?U,<L~pMIrOiSrYrȟ+iv?Jqۘn? ԮD _HzoOK۟?=<N&+w<{9xra7H\C}u܊ my1XمL5���z;=tXqXؿ[s׬u^H )k~x.)~sݭnr:,#m˯EKm1:iM?|XSU]m_?6u2y}=F`?g>||9>:Ӿ^zm'>#ӧBq=h__og󹶉e=|᧩4ԦeECV"]iIƻ}3t8wtB���=<xȐ0z!���zj{xqIѠ0z!���zj{x'B���B=���pz8!N���=B��� !pz8���B���=N��pB=��/ߊE*cciz8���kÛm֚L̴4J!���zpΝ|t:F@��0NYQq@��^W_gDegT\Pu愘j]׌qެJ7+銕oGݮsNX&Gگ_VVVuose~Yq1ف௃u#qcffxYi���O_R3-8,kv}k2N2j}Ӕ#lRqn~⇭er\ƌ-8|L5+-?=|jGMIX;=|Aߺ'z'N��B=_$7m*iٍb㲸HY?|=fIrMU19Eҷ\:^hs>״h0 >ؽ>qq$r^EZ0)~;=}v60si>\՞/H}́^k.Ȭ扻Q;d^I|m4+ {X$mlh8\NC?سsG���~ 8lIRqft{kjd6O_,LZɬZs\\ބ(=6ִ1v(U_ik[hIo9Ҿ=#uI7(iqOͯ/·H 6̎NeIgZƦG1&@m&FNc{Z]&v_կLLݳ39h ]y"F7jߩ̜?2햼_ZO=���UTNH [vҬJAĎ ĸTY|xo63'FޗvH?Ohדt!ѴOG?}X Z,XU&~ўW-txS;:;iAUbϽyboU,RW}sίrvaGXNݞ-GaJU*Xݛ���?b\qdx] ɐ)ޙQ9uURd`4=e4,О=3aݺ̂NT{Ӗ7Yl^oa9%şMeS2|>??a{8kIDc_8Om[|x2! }���?8FqXc&j<Giv{l}+?|+ɬ(=RW& HNi?-T+mOJ666[=ײ7{S.VfO՚99̹M.{N[B\Rqe+G:,sL =��@{%^xKNb2!ydy{3IxŶfݣKQu^xPJ(jy0yM ;.VK_'֑u =M $!₲' .w]K?zH'6.^,(Fцlב{r[Q]S#YuŽɴy\N��^V^:,8,kf{[/-'3v7gkrB#[v_:\⛛5u6_ޗg_gl>65A( ;)jl{}>Ã}~1U|76ٜ.29V[yԽ/G?{w؝iʟ;}N,]^4dH%Ixo!C?xg<K'p���?n! a_| H0Χ)>ڂz8���r=hPq_r9o~ !p���zx;pGlQ~ !p���{8!��@Bp��� !���z8=B��N!p���z8=��N'���{ZZZt:]qa26@��6=NmmdjooojjLK$B���Aojn ܹJ'~!Mmh z8��� 3ᔕ-0Lkj z8���uupJKK?^vLŅ UW\=oNIu8=LͪT,O>Ƈs˟;~ߦoӷDiJczP\}bt|s?*&>"^nj 6eZ?!p���?R|fZqXy׆\e21e)z߼v)S6߳k՚rϛkq;'w3%J%ƭIwg_UK^QiзY��zŋNI  9oѻToӲA)[x۴cLnf|Lul-6Yq?mzbs8z=_=Ω};=}TC#CK-Z^\8}r.l{]rMU/ulLVcI#x&жK` %mlh8\NC?سsGp���z/TW$-;iV*!nҌR]@b\BW>d͠v9F +:?2޲s~^*Ur{{g|G׋_7̎NeIgZƦ?h7j512uʎ}3Gz}y}Upu]2J9e_ovilI|(Uik[h\2=;e)SL鑚ЕDڐnԪSX'n^̂z8=��'TNH [vҬJAĎĸTxe®MO=ؕHMqcIt|ˑ'.so28vJ7*ܛcc>s}%vluomم=ޱ4I=uXN^n}'$<ynKt]ɱQzxTrvC*UxބN��"=$·'e_<9xQtTHu =W|s]c-ݛ0yC }~##q6k4=|hbdizJOC0E.=#NeV0vCz8=��'H  {#ó3Ɂwz)uJe]ƒk$aᕭ%O'>-H_>6'?=990iKjq`KYږ6|ܙr{21_GrRoϢK*z%Hsg2Np���z'O,-8,[rc #o7~=۽Uo-/fȏz>]vc:|V1UJ~0߁;ͮ%6K'6Y;z?-g(e뒓F?|m$.s^NoR}]8CȽr+k*Qzx ɚǬcgL5N��=tXqXؿ[s׬u^H LPbOݛ<n;S7<P 7}6nulNai-^{oсϞ]<v'c#..k`_c̿-]~=h__oġ5^:t]zѐefh_#m(Ixo!*~xNp���z<zdHq=a%!p���? J փmoפxdv=92B���={xkY5Q��=B��� !pz8���B���=N��@'z8���pB=��@Bp���|=V---:PKC ��@_l d2755eQ!p���נ75]s\צ6j4B=���ƆpʎL55B=���:s8%b/;s…+W.7'$TfkfU\.9+F9K?.٧|]n5jH˦j 6ejO��/_@za5WLhilϥ7񖼕W&Og2}/F&O+-?=|Aߺg=B��__Ⱀ[M6-QceⷂW_q<(c kxdu'UJvtX:Ϧ,vuW{w{S#=5W|Oi}=ivvxkUA^;d^h0 mKk` r!p���z*e'J?M\aV*xwyץ!~A=<>pX?ݟr7M˒vkX#S1pH-49SŹοik[hI>}oz&'tLF; u2햼!p���z_*'$-;iV% nbGnb\oY܀y zV)ܢMhcrߜkcxzNp-z:ž֔[n}݁1\s19ִzxT>;M=���~q a+z[1f,{!HL#2t"u2oh:Vצ_?{{xFch2fWIQ`8C{އYτz8���=t7Ö7g5;𳃖ɶp:|~c3[5s^s)nv= 7~'R> .͇+q$'5#g~>|Ν|8!p���{%^xKNb2!ywx}_mz}WWȔJqۘnӁN~IU'6?׳_ uW%׍''ovz܊ my=1XYB>xvרB��_K  kuy iAˀsƇKT]m_?z6u2pfYϟ=xNku L]63oy׏^gl>~>h23/u֓l7#á|3B��_xȐ/?c-z8��� J ӷl_b̮' B���^t@b3~kY5x9B=���?B=���pz8!N���=B��� !pz8���B���=N��pB=��/ߊE*cciz8���kÛm֚L̴4J!���zpΝ|t:F@��0NYQq@��^W_gDegT\Pu愘j]׌qެJ'+wvnUw>uNKuԅ]<U{l`l / [ͮZ%5z8=��Wj%7mخoU)3ZFo_N\ĸ'ܚR:-:z6tNukz8!pz8���>~SBΛcn6۴FcPpx;qV=a &,{wv`hۥ kZ_O].4ZUX$iCfC[r:Bp���z/TW$-;iV*!n`bҷo,|C/OW0JȷtZfgn.w鑚Ź ױoZ0sF; u2햼j!pz8���=O@YˉqU8)~7F;v(V'e5ۿ99xոWzɱ*YtoBp���z\1.8L|L~rIz|LboOӝ*;j#3<-ikwT?5MO C0/d4yBp���zOW|#8lyL>|xV1*e MzwV}ةyZu`Õ8܃ sg2N=��@{%^xKNb2!ydy 1F]‹K?e >O wwg՟:RoޚnX|N[nEuM6JW%ן''ovz=\N<fk=UuBp���zK%5wͺ<^lo@NV/~ڡZlg&盳 K- ~]}}&z$Efݾpy���?xȐ0z!���zj{xqIѠ0z!���zj{x'B���B=���pz8!N���=B��� !pz8���B���=N��pB=��/ߊE*cciz8���kÛm֚L̴4J!���zpΝ|t:F@��0NYQq@��^W_gDegT\Pu愘j]׌qެJ4r<nkT2' İ>y^GV>?;huznk*luosjpxU绒GܴxxoRAоv(V�ߛTqf3,l5j^z8=��Wj%7mخoU)3ZFo_;ͮeb-OVeM_Vo~.ٰzcjku|=<+8.R)[sy/1a2y/![s{+ǫ3/w{_p���z/^uJqXys-ަ(x J:Pŧou\YbCgYP!MMWXlcڬayŖ/nj?#mMI嶛[ _t\F0`�N:x6%F=<vŔ:i㴚' S>#,l5?P% ozҷz("CqwͲ"mQ\|ӧL8AOwv]i[I2z-c $��@_~ 8lIRq=<?oפ} W9>;xbq wdvTw*#^ O:26|攸{�ZXؘk?QϛLƜp1 GS6}@VU1=;CWimEÝ'o>v۷G=|E[_6H.;˖Rv{vu[:2I?}1GjrB#mK7jߩLieP���Y?Ke'ͪMX*؉qU {=z<=.Fro\WûUjbaso^*uJNߜ뫘wnNhA#^|ϣvL5ju8~c J;\6l ކ.=] ӉSU)_wd񯝞(Gr١r]znK|tA{3Wÿ;U,7=���?b\q 9\YPC%eF] jI5>h0"Nk4-|niQֶizJ| y5R\ Y>&nW--J;9%%o|x|u~l[H pY67/;CGڢTƷK<7'IGaH���q?]qЇlM xʐs[.v9a&a_?H]m)q$'տ&ͼ|><#0{xңlw-%Wxlw8lVu|WwEğ˲CT-K=;\$໐ӏ#mk~>|Ν|8=���?8YZqX祏$*2Gn]F^MjCbno?+nZ*4L?Xy釮 ډ'㲶쮻տ/!._*ON.@?u_?}ꏚR=nYM]§]Gyl=!w D=<1.m~zJsYv(Rݚx,R{˿[Q]S#oK<fk=N6;k���e/+/@5x]Җ%wvdu|ީO jG76ٜ.29V[ve}l.OpO~jZimG/3Nv6k{;O)jlzNw:m]+S#mW)j7ktw]zÃ|]PD:Ų"}}#exXt|"mhxK$Efݾpyp���׮xȐ0zOp���z'ËK%=��@_m/:\ 1B'p���W !���z8=B��N!p���z8=���pB��N'���pz8!N��oEҢ 4B=���ͶpjkkM&S{{{SSSfZ%B���=| zxSuk8U|> qm:nFCO ��@_mohl od\SCO ��@_m3SZZ"3g*.\rrysagezBLBkfzoVe+:bt~]IWɹ]椕T<od$Fjv=*׶҄5I7m6?}z8=���}|fZqXysvO{_ÿ6l׷*㔉-7MDɓebWZ~(1; = N��g/^uJqX=[M6-Q5IN쳻Yq1 rMU}njw8|i`|;R-6ʶ6d6Z.ӡٹA\hYOK#χ~|hD?5uHF{{x'.Ƥ\:'|q(uCoKz,k7m&}z8=���_rP]e@&+7}piW.~{`%{xTF<AtelqŹֺik[hI4[Xؘ3ۑ>i)ݨU23!VNݒSmg_.}Up%#m=<I7(is˹=q}!A_ZmT"`HMNZ#pz8���~ a{*q;'6RoW:;W}>RT͹Y~ɱfhFKI.=JU*[VHwAѩ7k.X@zxyEץ/xgm hܡ-Ӣo' sU)HWt=��/b\q·k#3C\ߜwi><% @7J -Оh5HKEa {e1JNJܕ֜\#{{xS7u<KZk-'>;=|EG���{銓o$I?\&?<Ap؜0�veb 8&`"?oQGY*xĥgwܙÛ';.hbdQ91s-Kysٱ75'O җ.(" Wz=��/8YZqXys,69..miP>/}%'1V<K_?UoKL?Xp19sra7Ru_t }ĥI^J<fk=o2mv^V nRJH_Qˏ/e\\wT<<Ư>㘿?|?T>LWÔes+k*QzJ��%a a[|=kf{[/O\wdsH[mMΗ'Gz;ϵEߔ_56muQZ6LRIƻ}3q;y^zBsSYu鑶h|-Jvgx/x}#v0(-\4d1B��K?=2$8'!fä[8X��@ J '|-眾G &���z;=py&���zN!p���z8=���pB��N'���B=���pz8!N�� !pz8���~+NW\X!B���MonnS[[k2ۛ2( z8���kÛ[9w_kt5z!���zj{xCcL8eeG} L&SGGz!���zj{x]}91Ǐ9SqBՕ+CϛsO<s.m)KLꖢ!;uM ]uosRZͮZ,[#FFH;Dz cffxYҷI=��@z+5BϛK~*/{Du)I'lN\ _e銼p<Yn_iĸãZ}z8=��i@9@OؾIV{G!s>״h0 >o?|=fI\P(97/;n;~׻P!MdRwz,61nmV\R=hw:֩Ƴ)12bo?F3J.x$j.M5'.no*,!p[ z8=�� U a'Y= e$F5m -?wg]S){|޷I rũ㳃'7̎NeIgZƦKSᆣ)rYrrV>ڔ=\鑚1'sٴ`-4$_׍Zw*3bd-y!B��~ a/L#ox͎W9?ڭ {QO=ߥ.]gU(ûUjbaO}>楪T͹Z֎ju8xc[ Xӎ)9Mp���z\1.8l {n1<Q׫J*rߡYtG޺?<Cn,rZsRp.&c4x:V߯Z&[izJ1C09x���O8FqG_vշ6s'-gf|Bã-<'̤e|ַo`νa=\/#9 `ܙ̇z8=��i'_K  9cr ܖ6 e<R!D6U)%'jJ :i/͔G5 Y\ɥ~LWQu'R,̗1WWȔJqۘn? f3ī3a{xnEuM6JW%ן''ovz=\1Xم}iF���OK  =o7D]JRovNs>x3ߥiS~شa翷W7b\E EY[P_Vt9ɑb;Rj{j땁yuWz?^4d'Gz;ϵM,uIƻ}3</���OxȐ8!���zËK% !p���WËH =B���=|=B��� !pz8���B���=N��@'z8���pB=��@Bp���|=V---:PKC ��@_l d2755eQ!p���נ75]s\צ6j4B=���ƆpʎL55B=���:s8%b/;s…+W.7瞮y\Aˮ4֛`7^.Wd+=#?;huznkWjv=*Chkqۜ}##VuxU FJ.۷nKQ²1d3U{l`l / �=���p=i a%?=t.mˁmS6lغp}YeE^qtaJ\ؚ}qP# IL,Ӡo'@־׋U<z֤�� @6yw>iJ?Oŋy/r*݃val<#״4\ni u}t՛R7_/u,i5O=1)~;=}v6tjwנs6 뿳~[L uK\puΗzi>WTFC-Ҷ~|hDeH?)>ʏnjwH<Y<niۥ@҆̆^%` rj'ß<y+8r5=���YfP]e@A=<UV)q(Sᆣ)rYrrV>ڔ(U׶M[ &BcNrrg]S)[V ) EebꞝGfGu2 3-cӏ˥̇} W9>;xBefW"LtNY{x؍J_U]1[=a?)=<ʏ6ִ16fE38GjrTf&ɴ[Wr<=Ocđp���|f=/>=wL>Ȑ&q5fYrߜkc?טwL5TR3yRAL*ܛ*RS܇Bv/:v}jUEjMO.}=<t+Tx .uvă8֬`JaR?,Śm~q =���_?sŸⰕˏΝfu<!#͇ đEJ !ծu[l /#Neے<⁈zG\jI5*}U{A? :&=<t+]<ʏ`jG.oNIg?]Rv��Q{銓o$ˎ9&:v(V|ۭgCOf&cg>\/#9{˿0\X\<&.,\J\Rqe믚sL﯎W>a}[i^<ʏo!#IlRisL���)=u丸>MBoݲ~R! O桫`v -nKSiv&FTjot{pU9qrv?nMBWr=ӥS) ъ_oaב{KVvc:|v32`a;f:JZ|%^ܲiq=@.۷w#$åu5(=<ecֱֳ ?6;k���^V^:,8,yOP&k7񷕞gu>=5#Rj{j)׶땁Hץ|89| ػF v0(]٫1!L@׉mK9\wdsH[mqoʯKGRVo۲7I50vٌ{vGm=|~~1U|Gpx0,3C_iIƻ}3p8wO?|]+p���|=ǣG$}IgޟT2<v/QM&Ӄ%��ϲ J "IV}oqiRw<2Rȗ}]۷~Ac>���q/:\ 1O$&LV9klivBÍFn- =���q'9mb.P���BK���=N {f{o��@'5fiVÇub0zzw͹�|Y?&F4avE=\,J+HD&_ꀈW|ל_aN=�`+k7zw\ N�pz8�pz8�pz8�p��=N�z8=��z8=N�z8=�W=�e2HƟ_㤿_r$=�9ASW{yvsowW1�zX̯wU=kM =�9l2ngS{g963540q+ItqQ-o�=|E^4_cG{-'k/-Ե@ߎ_XU45XWWY<w={õkoO:5\m~qfzy^mh1G/png¢o54u6mk7͑7D�zm_^i|ݵkM7n45ݼ7Ypq@<&S9`js8{߯]?3gqf�"fg{r)^0LlSioGzs'wp3l)rztw`vDNԌxw|L<z}&.kZ?_=5<uzj}[7wMO!z8�h+$klyl: u~Vong2>}jsGwa!k'͖?6=uݿw~ ~}gIW/aش8=RoGz _k)|s3󟚿j nxc~]WM,Focѿ}N0vadxVW]XvZ-귈Ulh{e6D�zmE_g̮K?ovݹZWxw`<OV}v3{M-&%omz8=�=<;?q{V=b{=ۑ^{ͧi_SwxG`qC* jZZێڹ:gt{ej*nEB� B @ʒ$$'$a INla|?#sNH {J$u;CBw>ЎHMgjP Mn 5QeSx}3Ӕ=.`<P_nn=2~!t8��:|>G%粳֠p5l%zJfxwF]]===Y :Lj�tX+>fAhXl(KM~>tAqlݣS/,Z|~N3?v. #2`};鲛hhr(sD4ޣ 9Bp��tlKɈ҄Tg?<Lݒ]cU|~Roq y,#dAunF._H)ع1\}[gw�>7*QZNe7 }hy\4 ZwZW@ɘ-#VB5wxZ[ZЊ]QU*iBACypMBp��th3&tx- ;4 Ĵ֖gӻv ;ͭ֎aGǨ+s4j/+f=W zZy#LŗiIu'׎G�:szeoY""%=ַjMڦ-~ hyuiL 8zvWB jn^ag{M{z{x7 qȈ{ Bp��th3&t8- B*8: \ѝ,^r_*we‡s0jϷt55Jqq3@Ռۮ~9[y,t�Dl{Ƽas<~]'>_}5ĭ987vKcMBp��th3geùA`pjzg.wsG'M]KhԞoR[Zɼ~_TU~=?]ېY:# ko'K�td!ͧ<�� ўf|n2|m6Vbq:j<[n]HɈ.>pWX38ץ^i蔴*Qr?N[㬋S|wtu #B8fmH^ ,,':9 ��A:=g ó7[ښeG19Y8\|@O%_)dI#|vvJF?#ia5>NK]</0Skug/j`& 1 6A`�@! HptdʼvE"\ZV;sؚRUFI&G,;jQ{;$$䪚᫣¿k7MPd.x[~%92"f}쿚uwG۷lڸ&y7J|=@rB\LLL|p@rW_%'x-ttZ0iӌ7;>ry}sUֿ%Z=w~|΋#yۦ8:�� a@eEQqcǾŋ/jsЕ.<CK~9e?^[l o1YYo,.ݓ0P/pTc/9hYzLhCGKXUۏyoȗ&zTNb62巵dޚC_XW(gӾ/1q8-I qt8:��9ƿ\ӝS4EWyu]'$$.Yč-=eCx͛sv}*qw˩_y&5"/ uF Kugr_Dzt XRoBC6ߓ;ãV;ݪIW=^atμ=o'Sn;ít8�p a@=ZܼTwo,˔/"Rvڔީ8N':w[5Cw=.|MkcDΏ̸̇o|}mʵ*}u[Lgʚi゘1Y~)$${7͌o\xT*k3-ǥOcvZл0 Sw;�@dc2YҒOfٕ*V>U%OWb|tt|0^|xKu8je}-0w^ָ{z_l :|q;G=}+w;|���u\^-(oikp歌&%R9Oÿ](dc߳8jKF5>?|rY'Y}�jaZ Y[,UҧƮ-6qG- )hgFK1GN)ԃEtx׿v`p����Jڔ-W2/VHiIc4PĂ+不0YO m9;.MY{]͹VDErY w<blH[E0ƫ+^E2^ܲV^غe^l,KIC-:G;6E^71K{Ww|7\s��� ;pJJYyNFhиĂ 6/}R.=.# �?6e?_�����P~ccCpF9ZW<I=)]gu~0tUe<7G���|Zޒ;);B8wkJe 2?ϋ_kC'ʼ#콣Y ����t8.viJUsSV͉ҟ t8 ����tluHxE\RXv)掎o>S_? 燣�����A  MMMjd2MVUTM\ �p����E�:����pt8�:����ӈG�:����YEN`@����:wZΟ٧O-��:����p�y+����B�������������p�������txww7=������0 *Z{ZwJ������0DR*Z{b;NZjB@������̺Ëe25U667ugYaF؈������ub\N}MMM=].=fFNǭ������]K$zLMMMEpM{{{fsWWR:�������fZPP_SeSkSqSwS}S:|``d`j�������`jkk)ȩSw?!qf2(U*USSF/HbqqqH$ �������0Jzڙ :jʚ*Z;9)vj2 I+P+\.ɤR)m�������FQ)S/S5S;SASGSMSSSYS_SeSksS} ^b4ڵZRiC�������02U334u445555U66wPGFFCӹ)q.ũM&`5u:Fm������xTTTT\sA(fvfp7T Vz}7�������GLLLMM5MMMë́sgs;ܟĸvY�������Tippt?)NqZ�������pL755"aSq.69�������L\~ :|Bmr�������xDzBw?]����IENDB`�����������������������������������������������������������������������quodlibet-3.0.2/docs/screenshots.rst����������������������������������������������������������������0000644�0001750�0001750�00000001747�12161032160�017755� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _Screenshots: Screenshots =========== .. figure:: images/paned.png :scale: 50% The paned browser, providing a customizable hierarchy of filters for finding your music .. figure:: images/album.png :scale: 50% The album browser, giving a visual anchor for a large library .. figure:: images/queue_2browsers.png :scale: 50% Quod Libet's queue in action, and its handling of multiple browser windows .. figure:: images/tagedit.png :scale: 50% The powerful and feature-rich tag editor interface, shared by Quod Libet and Ex Falso, that gives you the freedom to tag your music how you see fit .. figure:: images/tagrename.png :scale: 50% Quod Libet and Ex Falso also share a powerful file-renaming system .. figure:: images/exfalso.png :scale: 50% Ex Falso, the standalone tagging application .. figure:: images/plugins.png :scale: 50% Quod Libet and Ex Falso are highly extensible through many included plugins �������������������������quodlibet-3.0.2/docs/downloads.rst������������������������������������������������������������������0000644�0001750�0001750�00000016363�12173201727�017421� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _Downloads: .. |ubuntu-logo| image:: http://f.666kb.com/i/c9p32f4lepzuqhs0u.png .. |debian-logo| image:: http://f.666kb.com/i/c904azd0y1bh5mkwc.png .. |fedora-logo| image:: http://f.666kb.com/i/c9mlwgf9lyihgbkc4.png .. |opensuse-logo| image:: http://f.666kb.com/i/c9n4w5fb5l14jwaes.png .. |windows-logo| image:: http://f.666kb.com/i/c904cja4hkg41b1ak.png .. |source-logo| image:: http://f.666kb.com/i/c904lpl958tadrlu4.png .. |hg-logo| image:: http://f.666kb.com/i/cdmhj87a6v5xcdugp.png .. |arch-logo| image:: http://f.666kb.com/i/cdmhrzqnwlwvg3f5l.png Downloads ========= |hg-logo| Source ---------------- Quod Libet uses `Mercurial <http://mercurial.selenic.com/>`_ for source control and is hosted on `Google Code <https://code.google.com/>`_ as well as `Bitbucket <https://bitbucket.org/>`__: * https://code.google.com/p/quodlibet * https://bitbucket.org/lazka/quodlibet To clone the repository:: hg clone https://code.google.com/p/quodlibet hg clone https://bitbucket.org/lazka/quodlibet |source-logo| Release Tarballs ------------------------------ ========================== =============================== Release Filename ========================== =============================== Quod Libet 3.0.1 quodlibet-3.0.1.tar.gz_ Quod Libet Plugins 3.0.1 quodlibet-plugins-3.0.1.tar.gz_ Quod Libet 2.6.0 quodlibet-2.6.0.tar.gz_ Quod Libet Plugins 2.6.0 quodlibet-plugins-2.6.0.tar.gz_ Quod Libet 2.5.1 quodlibet-2.5.1.tar.gz_ Quod Libet Plugins 2.5.1 quodlibet-plugins-2.5.1.tar.gz_ ========================== =============================== .. _quodlibet-3.0.1.tar.gz: https://bitbucket.org/lazka/quodlibet-files/raw/default/releases/quodlibet-3.0.1.tar.gz .. _quodlibet-plugins-3.0.1.tar.gz: https://bitbucket.org/lazka/quodlibet-files/raw/default/releases/quodlibet-plugins-3.0.1.tar.gz .. _quodlibet-2.6.0.tar.gz: https://bitbucket.org/lazka/quodlibet-files/raw/default/releases/quodlibet-2.6.0.tar.gz .. _quodlibet-plugins-2.6.0.tar.gz: https://bitbucket.org/lazka/quodlibet-files/raw/default/releases/quodlibet-plugins-2.6.0.tar.gz .. _quodlibet-2.5.1.tar.gz: https://bitbucket.org/lazka/quodlibet-files/raw/default/releases/quodlibet-2.5.1.tar.gz .. _quodlibet-plugins-2.5.1.tar.gz: https://bitbucket.org/lazka/quodlibet-files/raw/default/releases/quodlibet-plugins-2.5.1.tar.gz For old releases see the `full file listing <https://bitbucket.org/lazka/quodlibet-files/src/default/releases>`__. |ubuntu-logo| Ubuntu -------------------- Stable PPA:: $ sudo add-apt-repository ppa:lazka/ppa Unstable PPA:: $ sudo add-apt-repository ppa:lazka/dumpingplace |debian-logo| Debian -------------------- Unstable Repo:: deb http://www.student.tugraz.at/christoph.reiter/debian/ quodlibet-unstable/ Repo key:: $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0C693B8F |fedora-logo| Fedora -------------------- Stable Repos: * `Fedora 17 <http://download.opensuse.org/repositories/home:/lazka0:/ql-stable/Fedora_17/>`__ * `Fedora 18 <http://download.opensuse.org/repositories/home:/lazka0:/ql-stable/Fedora_18/>`__ Unstable Repo: * `Fedora 17 <http://download.opensuse.org/repositories/home:/lazka0:/ql-unstable/Fedora_17/>`__ * `Fedora 18 <http://download.opensuse.org/repositories/home:/lazka0:/ql-unstable/Fedora_18/>`__ |opensuse-logo| openSUSE ------------------------ Stable Repos: * `openSUSE 12.1 <http://download.opensuse.org/repositories/home:/lazka0:/ql-stable/openSUSE_12.1/>`__ * `openSUSE 12.2 <http://download.opensuse.org/repositories/home:/lazka0:/ql-stable/openSUSE_12.2/>`__ * `openSUSE 12.3 <http://download.opensuse.org/repositories/home:/lazka0:/ql-stable/openSUSE_12.3/>`__ * `openSUSE Tumbleweed <http://download.opensuse.org/repositories/home:/lazka0:/ql-stable/openSUSE_Tumbleweed>`__ Unstable Repo: * `openSUSE 12.1 <http://download.opensuse.org/repositories/home:/lazka0:/ql-unstable/openSUSE_12.1/>`__ * `openSUSE 12.2 <http://download.opensuse.org/repositories/home:/lazka0:/ql-unstable/openSUSE_12.2/>`__ * `openSUSE 12.3 <http://download.opensuse.org/repositories/home:/lazka0:/ql-unstable/openSUSE_12.3/>`__ * `openSUSE Tumbleweed <http://download.opensuse.org/repositories/home:/lazka0:/ql-unstable/openSUSE_Tumbleweed>`__ |windows-logo| Windows ---------------------- ========================== ============================== Release Filename ========================== ============================== Quod Libet 2.5.1 quodlibet-2.5.1-installer.exe_ Quod Libet 2.4.1 quodlibet-2.4.1-installer.exe_ Quod Libet 2.3.1 quodlibet-2.3.1-installer.exe_ ========================== ============================== .. _quodlibet-2.5.1-installer.exe: https://bitbucket.org/lazka/quodlibet-files/raw/default/releases/quodlibet-2.5.1-installer.exe .. _quodlibet-2.4.1-installer.exe: https://bitbucket.org/lazka/quodlibet-files/raw/default/releases/quodlibet-2.4.1-installer.exe .. _quodlibet-2.3.1-installer.exe: https://bitbucket.org/lazka/quodlibet-files/raw/default/releases/quodlibet-2.3.1-installer.exe For old releases see the `full file listing <https://bitbucket.org/lazka/quodlibet-files/src/default/releases>`__. |arch-logo| Arch Linux ---------------------- :: $ pacman -S quodlibet .. _RunFromSource: |source-logo| Running from Source --------------------------------- Install mercurial and check out the source:: $ hg clone https://code.google.com/p/quodlibet/ $ cd quodlibet QL/EF expects the plugins to be in "~/.quodlibet/plugins" so create a symlink:: $ mkdir ~/.quodlibet $ ln -s $(readlink -f plugins) ~/.quodlibet/plugins Now switch to the real QL folder:: $ cd quodlibet If you want translations, you have to create the gettext translation files:: $ ./setup.py build_mo Run Quod Libet or Ex Falso:: $ ./quodlibet.py $ ./exfalso.py To update to the latest version, switch to the QL dir and run:: $ hg pull --update $ ./setup.py build_mo # (only if you need translations) Mac OS X -------- Simple way (using macports) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ :: sudo port install quodlibet Hard way (using jhbuild) ^^^^^^^^^^^^^^^^^^^^^^^^ There is no real Mac port available at the moment but it is possible to get Quod Libet running under Mac OS X using jhbuild. The following steps show roughly what is needed. * Get OS X running. It is possible to run it in VirtualBox. * If you're using VBox install the `sound driver <http://forums.virtualbox.org/viewtopic.php?f=4&t=30843>`_. * Install XCode (check the OS X requirements.. you might need an older version) * Install git. * Get `jhbuild <http://sourceforge.net/apps/trac/gtk-osx/wiki/WikiStart>`_ running. * Add ``~/.local/bin`` to ``PATH`` * ``jhbuild bootstrap`` * ``jhbuild build meta-gtk-osx-bootstrap`` * ``jhbuild build meta-gtk-osx-core`` * ``jhbuild build pygtk`` * Build/install mutagen. * There is currently no pygst available in jhbuild, but you can patch in the experimental `NSSound backend <http://code.google.com/p/quodlibet/issues/detail?id=509>`_. * Change QL config to macbe backend. * ``jhbuild shell`` * ``python quodlibet.py`` * The quartz theme is not really usable, so you might want to: * ``jhbuild build meta-gtk-osx-themes`` * copy clealooks gtkrc to .gtkrc-2.0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/conf.py������������������������������������������������������������������������0000644�0001750�0001750�00000000753�12161032160�016156� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- import os import sys sys.path.insert(0, os.path.abspath('../')) from quodlibet import const extensions = ['sphinx.ext.autodoc'] source_suffix = '.rst' master_doc = 'index' project = 'Ex Falso / Quod Libet' copyright = 'The Quod Libet Devs' version = ".".join(const.VERSION.rsplit(".")[:2]) release = const.VERSION if release.endswith(".-1"): release = release[:-3] exclude_patterns = ['_build'] html_theme = "haiku" html_title = "%s (%s)" % (project, version) ���������������������quodlibet-3.0.2/docs/_build/������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�016116� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/����������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017522� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/queue_2browsers.png���������������������������������������������0000644�0001750�0001750�00000677062�12161032160�023400� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����5���._���sRGB���� pHYs�� �� ����tIME Zc9�}IDATx tU?e73ofF*0BUAAEP H{H!t:WwuUV1A~?v[U*9[U)X����x9��qq����@FwHU΂Q2��m+!I6����@ C;aG{B*aX��ւwT0bfh0����@ C;2#<2B ��[ VZ*BbZ<|jZZT*����p#:2#<2#=!a!?!^A��pk;U&TN#_{I*J$zX\����-2#:2#<2#=2#?2fSW���B➫BJf^'߯ |Dꊊ����oԑa!` ��YnR$Immm4����<+**Ȑ ���Np8l6bRL&RRRp����TdS\\\UUEd(d+dXHp���u=XXVѨVjttЈ���[$U}SٽVVTTA  Z2,$Ca ��΂t٬D"!_ڞ 7|o\����hIT]@|[T*d+d(HdXHI+7�� OW466\pT[ڐ4[n[)j����@ "7#HҌ4&mR)egg  V'n ��΂av;Bt˵^bn^_~S^I9)+Um����pP:t2#0Ҙlro%I+yyyd@HH2D$;@���7 V4MSSH$Sꥲ[v|;׽軀eY����iL6ۺb2 $B28B��Y"<`|jZUU%+ƎY,V5DQSp}{CCw;u*)]k2BxV C*b.ֵZ;OiZ.;r/5-m%u[3�ܿTdv @׷myN%CA!X((( B z1+V���: V(2 JR"TTT_Ɇ.x~/07�}(%$y(>XS2NB-Kw!m齻IELv!"٭j^l-m%s]=bgZo;w #c*4&mpniv?h4 JZZZnn.aPKV���: V'ZV)<`LV]k!c'9N  "KZUI !kdZh]TRL5͢3q{BJ]߳RR?$(@L|~y~A!m;p*,DԶZ Uj]N,8y("$8dq(R   :|)~ la˷ze\!R].%+W]:y@ސ`rTwWcI-lP E:VلIR4&-/F-WvвKBMcVzx1��MP(bqII`K1 ?V|cL �pjn8jҽRK:Vݲ! eFL>>x<)@R>Pj?8z=A|]Am;pb_yzao堠'Μ;SHTiBq2.] %I&iCǰgΟ?!V̑QV]"&8_Ptbʥ˗S]W銴Mvŗ^ki:#$}JREFFv}@FMݖm+;ح㒡Nfee!!Y`��򺺺b!XQ*73b$A 2YzC3�ܷ$G]*?,T4 +&R(:Gʻ=IB䣸81Q T׸v[s%E@` "5+ZOkt3IY!J W'i *Œ{ {/Ruۃ6֥DpBUWPp <2U"kdk&ojd){LWj\0Q2,=w8kyՍr~!_**""2Ҙl m۷\ɶnHAV\BdXH‹���t5XD{T;f=p~9f)�%=r}{eեH? ˄ҚӤ+kD#VW%ҦhWU썣$tmBvZ  jPu"`FЁVÂKUmPndIW&6?hDJE. {w<DkCi]RCR\dg3; pRT ) H3Ҙl?m7q|[e+WV`%))IVȰ ��m+ݹ8f==<ʕ8rf^}I&cǎ=q2YCUl?Yr0Chߑ\@>TfD΀},.;N~;DMBG@L..%oہA&liBH僗>):3`o~s = $+nDary]Ϸp)2sEOjy"m/Dvueřw>Vhv4#&mKm[ ��455oТ"!X97p?x 24#f}*]{GGG:d?YxXr鐝|[a|Ec]TN*<=; ⯹jșͶG\{ Grݮww <zD@դwhaSR޿;*Osnt:}շzY\}O.ui%&Г9=Sܶq˲&u{"bNKJII9m Bܧ4;}hB-iFMҶ:VVJff&a! "X��`|l>}<<==f3�2{_С]+.;vJ<Ll-TIDE'Gv9pI"uou%jo~q>v=]~T@%>xߗӕbwxnFLxȎE^.ށG~?}1ɗ+꬈=A/kɟ{KkZv'oٱq Imةⶍ[ }e7pV�)Fw^24#&p[2V���XrARp3}􉈈�P߶mX�uZ6,,fY@Vd{444 X�� mh�D\pH(Kp5��HPݻw:Ef1,{-d2+���w8XH;ϚLz����hA.+. H{-566"X��D"���mQT. d'L@F��pgHRW___����:a ��;8qȑ#QQQ����@#>2;w��;9cfQe���_}}="X��@����V���Gb������+����`��+f����x!X��@����V���_b������+����`��+oԩSC˚kD$kME"՞[JnNo^z3|dwl`^o `ޢ.\c+L!N0嚷M k~���~m���ܛ`ezν&t?w{J嚟ZC=`ŠnouCfx >"jl֪EY{~tUJ=A2ݏdo\7ܩ���+���`Ёf}5gNJK>g({ҷ?H,~L]>s6 /zg̙32a%pL(kC[,3g-^YkpOV+[]bLi]pdUUٲ٤_s?vwZ'lq>pwO7MfHIUҜퟭ&G5ݯwC5W,~3$v{ުub,vY>wkڻn [f%4H[i\(;;'OVDN۪ol:O>^tG_g5���=V���MD/;SE>,[ /`Yt%bO\M8',#ku%Y`Bl}wKeYȊ+TZn8|RFIoY7uJw \W7}hr+C[ڨ3Vo-{n)X!Y!5Ӧ%6UyOQ5㋹>vxɜ w$X*XO꺀%gyK#g���+���)XFCW9#I}`E՘=c%U gMzҪK>pfلAșp o̖\oAoJ^sԩͺvW6#ct\`SAhF=c+v[ VԲ Ӧyg4װ8bլ:n?㻽g7E|xLk7;M&AtrVI7zޱbLZ��@��+{_A _9pًI9 LoMU>s6 弳ϊ3|W~͹|rp UBrof jOܪ6m{-̚5T!U&!M)L:\ݶjgmrE0Vnm[5do-Ͻs{ :ͺo}Z^uÒۮդ_m&|yO1mھZymyBw-���!X��JّL钨Uu PtjYjfk4oZ{{ʇ%VvlkO4KNyO'UnoJS~;#?W~h)?dIC VutV26Ϙ4{z%IK|ޚ tZ>|wş|Fq[+&V_i_H���@�� +フrRШjɷoZK9`Ehpy!qy>s6r4bNo-8ˤv9KŊjR_Vjt]C:{I֜*Jl*8QdCMFrP-dBwEgK T+M*r6]tFѪe/lGFC+|^Ҭ<.Ҫj__vxo[Ӽ}뭊f*vɜw}ʬ4`<M+o/nia�����`.-Yz͚%n8UKf͜9k֬ū??a4۵ouP83b9K_(پ_bkhB{F'6]5gƴ>-8(\Cӝ=Kh!$Xi+6"cˢS^3ڹ]7"dLBGP|tG*Xْ~{}}_eZf���+���t?}1'�����ԛݤzwv!X��@��p 9>R\��B��`�������t`E ����4+���V����� ��@ VT����@C��p����x!X�� ����<��� X����+���V����� �������@��`������������@��`�������ܗ M!Z:>..L��B��pD!;'hu8Uc.-dL��;+ˏ%I㻁u:8_Nݩ9vNkevB;43:;krvol3V���Kbۍw yJS}}U~]Z V~34SZbD/a/a ��pg. t G;vie9(VOG3rМbL6r8mdY+���V X��+?W8:Q[i-T59OUL 42Nl4���+`%35˩C˅0ew*uV5KĚK+��ܑ` wBEaƩ)FgcL4gsF5Xi:XB��`j N?eǪK?+ 1`I|l`ƊR􂩓ؗ><5ãa'O]-  io:6gB|'O 3xE_ +C|�� YK&3P[hbs*;UJ1ҌY)@QZ53v`wXhFeF+���V~+ Gߧ +JK CG8}=J: V<<zڣOO1 ZRk1^'4?qH5mft/ϓ2;4yuKj7Xi4sۀcBO]MSAϬ`��[’ɌNF6e,z Zh+YmN`6ZaɌ¨ʹƒf05[F ���JH;~B>-vn̩Wfjjŗԫf]#$X!PTM׷ZmCqORhP~-@fI.:~SDC+I[:on쐩E^w{n-o(��+0NZoqMs:;W5HmQwʹbzBg)P*l 42SVgu0d?z ���6J.Lei8uYn*X48yĢM OV._x<]P+Vlb ;^hT_氌x}w8tXnNNmy-Ac'5Ӿ<a1%W6c=9}Q|ڽ%_Xu|��fM^4P̔iࠅTEkcNWlIRUrBo)ә 45Y[5י(9EkiHf3Yݩ8+���VZ+R]P΢[*r J_?N+dgxN>E_-4Ƕ=<Zg",1\cmܱRҩWj3jQA1dzŨǫ>;t6�~ VZ5nI;Z;}xֿIomNաjkl:SZZlKlh65ꬌbQܵU3V���T(U(ת>%强}eI踄?6]o6iAD֜~m̓V+KK8qB^U^oҩ95yY_E?LJǃR!#W`��^"<Ž\_r?cEfc3j>+)VEq|BMfИ9VE M\sAIU BW+#1FH)(F7#X��ʖmߺvȨvjkkꖂ+XYt#^Y/f|क!N%`E!gQS[nUG+fDkOAo;X1D~?VPEU \T(kuzzv~v-x u VjN:n3F��s z",vԚRz||YAce¿_58Qofsr;[i j3]iTfmPҊ-6h+A��}FMJ:udpH`*Zu̩ +bM _\/8|{^JsՐР3gOηMOimshTc.]4yϾ45bX7ޡGNu㉳ݞZBSf_~|xmm |_VبU69|VՓ&w|��V ׅ*+,b /vi9SӔb G9M 2j Ʃm:Xkg*V56Z:쐚deLcS._eB��}I,o ؞(khU+?%%Ysͅ .E Vթ ?Z̆}S.ݑ`t8|R`P@~A^*r Iv$'f+ys>< u`b}f/<=سOAO?3}E#:aZt |5l2l싫6ן^~xm'm(1⫥czz<sEjݏ}8j\F��pv'RγTnĽCsj(ƪ(g!8oeiJPZYk2qzkH)WGbwE-[VmD&`5eZjLj0RZcΊ`��+FID 8x@ľIeT*^YUFe?'X)m̩ђ+~qm|k, ̌?3X!&ݮ,`t$9 9Yr#hhj.u%X,&鋃x9m`��%X(EHS/YjhVicVd3uER]ebdw*)aNCdBok)NM1MW6i2QzkVcWlEsV(+���7XԉkIA՞OIZ+,+-+QR/LtA\/*'U V$T|Z3HiyC]+ɷnΓSHK@N95E*Drȥ D.%{N.E̼qOb��0Xa܍揭$RiᚨB )FKsjUS,Tam8MeNWVSJ -#:x*ajbfJ͎RAF9̎Ljm)Mb uY`��+U5Hܡ₢U{B--+*(qWV`%Wqz[]Y2*f׭-iN[6}n/X!zNN9rR!I9Mw9}rHU2J^BYxNC}|��w вp-°NY23;8eh9n|FrIvA+F;'ӏ-%N4 vVG1zSowmG-ٕUZ\d1c��+%%eEp1RϾz-ӽUqǏ_kYE`jԒi]Y.d|TP}E?'X!nr:d 95""?yL.���<Jp7OU~Y8;g"Rb6Nks*Rm]3<פּr]J9(K;ڜ^֋O-T*4[ m`Yǐ̷dihLs8Ӝ@��}k9{jNfvΕ̴̋dBvȺvmm+%O|I*QZSu+sr D ֶ\蘃.)���t``xZˮ`iqprClfb4`T)G/W̵zΧ*,ٜe|cbdܗ-HZ~liJQ-Ň)Z+cs&3N#X��JֵWs2g$O XVvFzFjjZP%<c{ɸ̬RE`%9vy-#.}%&&'pQr:g$UI@.R%\+���W>Ng{a8~ƊmfKMfQR#!޿NbZ24GuhHϬZ]W{y)d?YgYsOS.>`-3X* b8a,X��JzFj - ?2<tOpb[VIȃB$HDjN7x-:;B3\;ea3NhV r29- DZ^+���cr'׶ !8nL`3N uXhuԘ_A]N3TٸlyUWLc%c}1=\ĖO\]rE4+Jm6j+1E��ЍsɩZ9~#'iU3`G ?'X9yHƤVK|֔sL_:Ib:Tn5X!w ?/ U9͈;woU<XY0sC6Ƃ}ţISEfHуfS>��`^WֺdgTdgwYVRulfh;u윊*uB}WUiuOnipqˆLPO+*Ş{~EKG/Hl{>^lVa ��No*ĩx?mj'v+G3^8ѽJ9ʌ}^gnjSOη:RENlU^L 7:$z㔾d&K ΌGc"?s'6UՙF��nr> s%4ksd1Ҭ(Nj5&rV%mlvFgs6Z#2ӛ)DfOGmS̬8+3TȒgjf*$=dY ʕs2>kJR[uV���s^h&V.x8DLM{uw¿Vyq y]LUD<P+mDFEִ[i21bC<={sar5;wYzm"yꩧte~4wCpCluhѠ=qэ:3G H0ev2^oD+WVmCsf̘d+{x_};A'7*6=kȐ!}}]7w8h?]?��@GţU[`0dr&1gj5h1,2dN'Y,6Neg\sp~}8\.5V\o)69UdџcK~vbte56&> X��ʝuKJxҳ{Oxj 9"/-+wUZǿ8rJuO뛠>${͹Ԑ9 fR^>vkE+Vxs^Z{}_\`;VF yD'sk11˄N VFUͥSF.8y+kJufIыcDv=Xi��tp/?yOR׌8sZiVgWgVo82JoUk|תCOшϣʚl-LR=9~lB$*ǑQ>[?9Kg?.jF��`uzv#>5o'.;H;+5BjVT&Yc'oq(#IoC2|ԨQÇ<+J4c`rc˚~_thAD(cxxI2/E|0fN V4 e8`Щ3GɁo#FU `w[?��@Jܘr 䟫bu@&;s*;'1 4Ch2r: cr0jSj50.ÏW?3)B4XFBb-]a]8x*ygՇsWhDW9^铮x.ba ���m >Iɵ+t`eMel/ Rh.6`t¶vcWIR\^7ҨzJk Za.ʪ-u%Xib}$ǀg[*ҙp��t%XrMZiv8v'dY5Ӝ4[(,q ?x8-V2L[J+\}lG,1`Tg/-pNiNTX ϋ{}2]=g?=>Q$;#ZxYY ���_슂t`e)Ո~ ey{75c/N4Dxx gdƊ;f 7qtJe{F'Oɛ+ZiG]B6Xq��Yn΂ivUUXၵFkf8NV)-vJ(.0h#rz{C{xS{~y3pe|^lENӒ+/ӓ-&V؞߅>Ȏݘ{|G`?z'G�� X}15(#6H ʢƵv2/3xCj /֤)(ʺŧ_\"V(".Jn ڈgғMoh 5/AGY'vw ӆnX?WTrm+��6XifYVkh2OWs);-i9cUXq6J._k.̀M>nZؒJ7wȑOʓNro+O)]pov\y˴߬8 lH{xsF.0X)���+`eeٓ'x 8qʻ jwQ=E]!tK>t!^c]@-lR|w$n Sk`B[0oIL17ҖĈٓm.+Y[c#8yqt��{nhig8;˿8 vLs6I;ԚDs[ ]3'g{O£k{^3;.~G)qL\鈓.׼f\xᓛ/<mV͗&uzNzhŹG6g.{ϱD��`WtjL"Rqg��A V~t돪u-vIR4X> کV;pNIpZY[IQy=7e~?z=Ư9/zOɉǿTH?>RMӇ*=*_v%'{΋wWۙsm:dPD%lw3V��� X]2ẋa܉`��~`s 8bUf`q* ФAZ,g(bcv7"/K#ⷽȜ^t^\y9_? I;{Zأz/M{'3oN{2.5ƉuV���Kb V^",+ޔ^ /#X��{ ۅ`mBic{|v VYirp69윚b)7OAY?|q̴ygK{O?97|dSCAb9z=kgGe U 6#{?}^#[.?jp慺<-`��[+{7.#huCt3��n;c4XaTq};\7rM;l,czuQeeվX=%{_VGn<s}1x#{oQeoJr K7](֚Öl_Hǟؖo׿]jxIߔ)K,V���G��� V\on6co<" 9>d9>XVzu@AE[=>>*Rd*S ۔WZ [.ށ>!Z{`$Wh bYpE/{YuG$eGER ������_:X'a wcԚTi*+FnwlLپZkgz^~GF=ΖBKEۨMgzy/xj~!Oօ5%څE^O|J\mu[JeT",+k/4a=fs7W̕:&K*1��� XY<bSO=kmOL {'z%+OE E4uO?լ|=^no˶ +^{}z~:EyԦ=gO�A#?��p?+ 뚷-sҀv=TD;MbY 4f̲R[o<!75?]Ȏ==4nˣc+"R80O͟& /dkmRCܓ54|vJݫ*Nv#h D$W>̆91WcMi\V*uv ���+7gTe# XGǛ $s }PL-+V/v+5ʫ'_ۯ]6dPs8i? V:��y§*!$,7TX ׳T;TS\IRʵޙ\hUMi=>걿r8sp,gb'ĺ^y?:R9\;Dڝ3D钬_9U:.h7FoWdދgjڕN<>OV<)t{fG<1Q_c3V���!Y}|)y?%cEoFσvV+[+]4~ƿ:7H!x/c &ODМʹc 9e퇮[.}0rP۹$-3|'Iٗr{hSZ#K͝/n]v䉣 z5~L5tC_2;_cjE+&1q3WOb׼rfPY?ٶ��![qp ˯q/Y3{Fqն}bӷՅ)YMW=u=:hwd̜p~k]%Oz-񙤺i*UR]WݕǐkW^ٗ'}wTɹǧ=9;M/`Ftѵƙ76dur+���"X'zOtVvc6|mkIy_;ឤ{oiԔQ삳OaWy۵~^*V~oUh>%8oM׆'OO:ґm|}WoܸE'X`u =BkUw$Xyŵ HVx\TK S{ݘ'֯VF`E[̐D)??=3Q׵`��̓~;,0NY5l;- gspe4S4N$\?|K^4豝Wz.?Ы!O_>Tn03}aٞXo/={te^_47S2/]WS<ᏛRG?8sՉ'' KxGy㍚##X��Jbb"~אC'=΃)ޓ/DcHۭT5HU>}.( iKf,-w⽿-FE ͕Ha%N])V"z>_(#!|fϬi:Ɗߟd64m,VKmy /}E >BvY|Cm>VAO|=tT'ղA'Jm�;+\5WrL,9.594 ǿ�ҜʬJt勩2,s5>MkmJ;XP1lYW\>>G|"(gEӢgbǟ)&}&Q4Odvd ̛~vQ¿/~bC￾' v`KeCrL_bH{UV ��nv]CvnrWzO{+_ wٴ*a~]Ʌث+:Ik 7nZ=^fh7/~2K_KĚ9]$X! \?]d)sonb׃-{h)/;g=�jmovԤ#^Niqr!.(PkC|a+m�\ d,6Skw2}Zct]sUEzSF1 2Ø?Ӿv̇>={bM kgVJ$<?#1a{Eݝ5|3I'6 :V?,]ٽB Ɵ8pQrժ $U38GT ̱Fertecn[6B`���ʯ=X>>`b PZ1m-w25՘rDi,<>[l׌B_Ls7Ҟ`J]|9L m3_~6Xq?֠ЯSyu³{MaƊΌue_ynaBM֣_HmjqC7W4,Xi[�� pcSkb%7_PFFFqzd+͙l)חMRTawg?yնzΰ˚iXg\?۳{sG=Ǡܙ_h(".yhw\]`袙'ʾTޠj4dVh_cwVK/P^Sj6ʖ]XzU,R"X��@``E|~1ǀ7,x םAzNx\fSFj fx$w6n>0(hɮ}Y>w$ߍ?0o׋LynfM4gظq׉ڟ+\ʠŞJ8 d<?#e>PuO:DgqQzgX͛{-ي%j!z+1ixNx}b$U'|\jcd[�� rF-PMFi1ʩ9-v@WB 3VG3s$ 6|*3͐2:zeQŏ].z<olxtɿom0Α+KzS吘l+1VzqY#.z(<`Jk6״zW A5oJUV��� X,X>irOT^l_ݒɚC LзɳA87FѧOA^]zzB|q{5 ;ܴK>/ۇuY-[ճy9l\7 `ۼt„gY'V(e#<d SkV Ycg}d $I@c:nVq'wN ^h[��r6&[E)OO8i;-b'tk sb3#:W6*V]i,6So${`ߑ6#{a~ߏVm;ɂ͹sM&ח:Kl5t|y-˜(gMnT+žxnoT2WgS{l%YX@@-`���ʯ(X/2$��dBNZXhiV;sziRh*v8)iv8MpjnXVErȬ␙+y)!S/ZVN#3Nn4"|NacZffgf% oћ+)rGɩ+6iꯩLV���`eÇ'_Vw�6XYk`\^e l矫bq71ѬΚ윉_b_ Ȇ|N`uvL6h9EL\=Ca(5GU5t3d27Ӝv_g9iqzCkmrhNVQMVFme$GΞhGB^~R5Cm^wRSh@-hE��p+==x ^YYYGE+��@7 V'oVf#md9OOX+ +Qy+AƒWX'YIƭ)m\qAqSHYLN4HO;Vr+956Rv)\G tdD&Dp/~77v~[ KSJw '$rs��oʞ={{(*k䄇T*R2e… ` �� dXJQvX4vNmgu6DsV:iS=>a)f,kppj+Slt 5ʋrCRg`e&8% +ʈ Ml`MLɑl-_]\SW7Qi@E\unkk(3ق8pjq{ (A62d2I|/"AE}?ޜ$ %(s [-qV#'}99. ?2l# ���7 ttt=jxP7+/^Xuuu���@{ VZNJ ꚧ5lD$+ȸrqMm"S<?#u6\B&QHUVqdebك^h !SQQ$DT=Wed~uP_^ȫ T%3t)vAҺo}mM]ZCj~O֙CVEAbnۢt?OB��~+O<:t, j&I\Kmٳr>}N:`���[R){*W)(6E!kke?E]R%2OkB^PTMXT^HU ^,K(y̗<`T*sIZyU f|`VL? ŧh"8ldNWeu^gvO'f~ ){+B=վ.OuqW�� Xr_||邛n\v)ԠA]tٲe κu&OL,y_l3قW 6-wc{1~޺lA/좇g t˅wYV���>`E&)g,rA\T7JuW*"څjYD"RY-kdl"MXΩQ" bx*v]%SZbdxS,;?ݠ 3:h-Lr0=_uCt'@-N2xQ>N:,hErmNI 9ev>_tc���`eĈ<zpg赋7.\8~'ӛX߿sιL&s߾}cǎ}ʝ&/n9Xr~+*`F1Ѷx5[~ :1".`�� VrN+(L[!0 T.)J~يiM\'҃ <i@X_,*ߞYHȟ*,+Jk2+/VڄN~;m8ZbuvuA'6;ԙ=jVOk̵/ԙǭN;uvz 3ɟv$idH~slhvQGWC4z-B��~? xf[o|?wG/F~ƃCFfgliݸZN2ryA_"rqʂ>_-Xzƍ[#+���ER]4O*]]=Gx<Ox"SU$2auo�UjrBIdմrQPv'o?qc?% }{0E?Bc{M)⛝;\vZ0X=ZcܴcFOKtvr ZvS;L'H]q]&8@ή^g8֙|@SgGM ͎ښji~`��+? MFL޿-vm&!ݹYGG{…jNNNB~._ٽ{7c+*8X0`f=h~L>qDK5+V"X��x/G(""j6 {.>ST aHeYiĿ\S ֯)UrN<U(笿5mG耥>9х|Xw!:O.;T#Xr@׭6hziП9|pgM}s~f?{v&\smDgϻ]=C{Pgﰮ{rw4MQ;3ڽ'?:^7a���`e&Oeown]ckFԩSռ̈ÇwԥK7D{vJ :x+YοKOWʸ3Jnn5k}- ��@ V*kE<JDoh6XƩBaeVEufE RQ.}*TOUORR+JE2P$N .EmOX硝Me^o:(/R>75 fO;vDFo{Rܫ|M㎶ǝ.7ql?,FH\B;IdbKߝMQmqv,(N9mֶ`��+C 8QF<i/<j]]KSs̙j+V HrǏw +삠a>a2;N. ֝-d i=A��+|Y完%A9̳dHs% \ CHS][_V׎gaV>eJlHT/ϩ*1ʃY9<IeVEeqENŕ$Sa6wj/hjv}]6w;5#UK85JG*,qC)Og?[w]vF{ ,fs?E��ЮAn8ev:رXbѢE?/ +7-z Q\@>)i ŗTE{!%lEnY8q1��| R̞y '}= 8QO{C*{cƕbBV*)5 !V2ne KZDX^P^M+NWE1SDli..,WǰU) ~M62a!'o%z\[Z̮`+*WɒkdŢ=b )o_Ț~1ǃH^@%E҃\4��q~}MOk7_ ?iiiuҥ`)igϞ9| N,`MLQï˜2E:O z/ 0y-��GdW9Ɩ nRO|k9lR4v:_R̖f𫋤ri-VʙY2GX.&q|Q^E͵RVG>)KC'JZE C*KjBBP(dO2BRdBL\W˥ f"S?:Qp&>S\%y|x{ 1}NTK39`��+6lضm[TTСC?n3H2otb]׵Q￿[nU |VRg#k~gZ /-��|ʍ2JdBgt&}s>}XBd,"Afp6=}¯dJŒ"T\ÒʙR9*S(Se/2%iu%arq2+UƏa+*+j5OE5r:]P.U(?TRIeĿU5LqiŲX}qWOS3w0O_*˓J厺VhL|Jс!X��hJ~~)S}hJFFYll̞=ήg\l[ V?+���6XY?4$wർ//u!SJIxC #tG&wO**#Z\=IRy2D\˗Jj *3eI2Oz@\aO_2&$mK'W*`g,bRx"J q55OJSӧro&(+q"AM@#7BZ'y{7 3mN=zN >`��=Vj]uL?R|7BK8˗uuulvo߾`���[2f79_KjAk17rWfNemOc 0*25'iRn&/KdʂʒJy2*J1R]{fXaɽ$Fc@keΞt'篇%aE*cԊtN Y#|*zZC ,QPyN)k{TgZ}|+w``ڷ3uO$u6s__D?`��V\/2wUuV]]]???bĉ?#C���-XlWz X06ĸK@͙cٌx~u &Dz."#KU͐SQ;-MX˭ ߣ~?^RI١'_u:Ǒ{b>=ݙ'Bcye{%e |Y.OʖJQJ%ӂ@q~_L3oϥ<<zQ!gp1bGïfhixَ_��xBzzȑ#z~+CӉ={n߾q���xWs?=A!?ȟÚv7wn,c67^ÑDEgq+2l-UKeyB7g2>}{'wޟ=V{C:u!V�kZok #C)gL$$9t''oCħ׵h__Zߓ:60)}O`|)Kٓo6[??^ZU ��-X![ݻq!qq'On>\ ���`廀;H CIaqSgKb,ޒ$O*Z$O(cJ iM WgR^9Oݝvu $׶<I:5}]vtEmZ09I9괶NNt[+o}얖Y{nDgӴ |j']w}y(IT%t̯.~4qp`Et)1.8{O6Ehi"X��x%p& ���`E/0'SOJƗιYRTrbm*4hw3L,C(;~qWk:OܪsVgm%7c{Ձ?gfs`eO_7};~&ld6!:Z<5zh_?_7Z_:oV/ O54?bΰUKov߭.<v={n{E3m-Jd|2Ckm{V���`+���.y=ٽrP8+=;v6͓WEN '"1#JmJ|S*JDDg餿XiGk|1^ΤW\*KU"y RFfL^[o 4FKGOKߎ{itOu:h|uDW}7);ym{gE<esm\NpG>NGky$ ��{^KB!/qG,/++K���@ V~R~!i#Ch3Ndq Yљζ4,޶ tr;lQ?5J'{V?ОPӷ:mbV\.SkdEL^U#)ʫާh|AKO:heF1&i|gF6A㓟gcݖ}c䥴ouy}iN&xZk;_<jg4i0o+���`���E2"h@W@以Mexė-glNg^-,/ؙuO,9#*Gr=n~嶇ݷtsֵ=3e旓uƧC} D"BʪBRsu?뫡ٵiȎC=,5E`Nәy׽N. љЉrGY|gjv3���+V���]+7V9>KP:1sVx7s%7rV0/#i[ՓCh:õ-w1?ۖN=;}cF}oeWOO+O+O%5 qMmR)SWTNC5?W{Xj\Me?xhu]ӓtA}掮'.6:_{^;iv;֗hCG+���V���VKuxu =ev7oC9lIB<RY ہ.W4Gn2pg#7tٵFu!LQȕJퟴieB p?Q4;iuKiO[4Gv59֙tJz`E7>Y+uskyVsĖ4yf:vA��^8���`EpˆECBf-d>*c.+YȲ.3tݲYpւ8uq%jceZStNo訣}5u#V?qBR \-n#;j?k}㬡˳Ӹ]:'5gӱ]X_Q]]\{GBak:v;tAC4Q?`��+ͷw���CB��+����!A��`������� X����+���V����� �������@���V����� �������@��`������� XiN��@;F|CM)6D��`Em ��nDߣ!6|olW?A+���V��� q_ڈ4A6ەO ���+���V X��@`��� +���V���@{V<έ6g  ���+V���DƉW6N3V(6###W^m^X ."X��@`���>` )fnzqWgԡP(d2Y|!+���V^:Xa$]q&aؿ^LJl{f��� Xy`y |rp%26###g̘aaa_S'66HFEErHS'M[ۋNf_FG��ރk>d L~@'@`���ʛV|6i1q;X碟+l{ƌTEUZ/ܿiٜN|� ��ʂ{.o~aCr"enS4`ȉ;&ΗZϜ:3% 8pu;Oߧ/X*+o[7��� Xi}qw~{V{rXM3332\ QH"5*kzXma&];`7,}lmiЈ K^i8ma4I?xDoOD`tj,\gF^Sg���`E"摆OpXuƒxObH\8xh˓򨣗ӋyB `eE_O'U.(sbarԢæU���|JaaիW V3LL\fz-iv Y"0͇ol`hJscI~ے,W|mh1ey Lb!/x^1`e$|n}| J;u NB~M;`��=+>=nzM4^Wx~ACJR~7-4}.R+a,9G\5ȥ۰2;[AF*��p\0EbHNff>>qF;'ScT_|B+(66qWjCAVFk#UpӐpˆ^S_䶷LvW+)YU\j[?Yoo?���`wW!ﱄi0_ğF1eD>TʆS89VxG ��rssWX[G:_s1TT؅Lsuq̎WfTTrZUk=vN'tΡy_4hP6(>KQB4nS89Vy`��+u ki&W|Z0f!*Bֽ> W9kB刕< ��(xQ ]y`E(3VKKV2Fy!O,hi&զig,״854¡&zM1+9k1XQX���J7a֣1iBD* =(v.[!Vk'޹z+Bz}G*#Lط`Ƀ'qia9VZ V0y-��vyk"\8E[YEt׊Rwn=+ƹ3 &22ۛTXعs2[Ynk>{QR6/d.mm^;pC\v0V̛k7TxAw|؅ط`Ǥ쩻 ;nF+V���ރ`E$y/rm숾zz}M19z'*^ƅV h0bԅ.+/;ŌL]zu`EZyf.y փ&ΰ|̫h%X���d­:J} zWFh$̥f%7F~iHرclˋ4'kݔ1u~YU3y|ˑ^篹,nΘ1s&X)%v& 7 n]@L��&Xi���rz_Ғf&Y&ʋQA26-TBطo2[YbEl@��^j X��pܘ0WG&gWlIjsLFY,Vx啃PV݉-#X��@+���+ q#/]3޽LTvVqaB+lVf+AAAV��� X��5Xy#;NYYiVZD\;;ϲlu:2ٰaC3B��` ���gʿM+���V����+V�������+V��� X��x74A6+���V^���@E|CM)6D��`����+���V����� �������@��`������� X����+���`������� X����+���_r����U0m5��� v���qJtj^XX �� F���+m���+����4XyMu��� X����+���wNҙH�5P�p TB묭��� XA P�5P�%gddԳgO_b ���t�5P�p D" e ���t�5P�p ^\+���Eҳ%cwbG>bSjrKgn'T 9lۍWX~xdžt#wO \v+[xd}xkBc6 hn|l?\Wn-třaz}2yۆۯ2y-XZ?h^q @{]79jmiL0y-���6yeq `Gv-M} Fn\R[L, [اHͩ?6lgZ,*j氱7ZM 9|>Fޮ"Hgg:Oti$"Ư}/0 ~vRao$Xy-rdѼ XA��`Mo|i̩>S¿m긟 79}Gj 8p%ySPϽfJ׿?{@=~3fL&"~Ɔy# Z#3v=}.w T%{~:yYx+lpCF߰ƏOjƠ<"b;mH&ַL+n;Rz}G[On>4?(5I2 ˩V>WYk>G deyUvn8>SK2g7ܿqΧhh8"#lhT3]V7Ң~#b1V%EM+;ʣvk1SNv7xjM ���VO^^T^S:z9_8h~o_O'EtI=e+KiBqԡ.'<+iUZەBVX^.}8nTIq2i"u?Wa$zxߖSmgش6(NJ%"A媫ꃺ?$XӬhW"l4?ܶ\�b$x[$(c0ɞgbIM#66~6 |y!V]v7`j_jcq+YuoMvǰ[! 7nH,7»D4b+<_0z2Xiqʰ Q9 }jߔ��� Xy`65ۏuYT(s GvCS Oy#]闈Sp]~7<|eUwһͬ=6mИozyV ]ꤞ^ }OV9q%emWAF8;z:_mEyNQkAAԄ& JN}!b 룷.h%{X_6;b^ۍ=VFudx}^&Ja~x`-4>-!6ٙl]AA+ (HUyE'z2 V۰r`{ ��Gl5ۨ3=z̘1# s /;pzMiҠa6o Ֆ�7CCd~ӓ}Mt{?6#C}ַdĜm2ՠ$ fmY+>ݳgOX"}ܼ#}i�4Soݠɞo匱Ń`僩 MLVuG�Bݱj<]7q ml78bڨlOgq&y%ly^!XicqXi Hv EDDFz;7W%ޅ>yg+ ߔ+#mbM+���c[Y6JW~4NُT~'laʊ5Qs[u}^a}A>vghV⣚ʡm8XcoHiN (VXy܈+M S4q:WW&[+ H >z{FjeWP7uFJ3ih+mOuѫWuI+ϫ5[ԏ&Xyvdս!6ٙl :owgջ*^oCf7Xix`ɓ'mC`��Vt#Ci6#%'춏VbZrX9V$"c7u}^'X9쓖xN2mvH~ilXPĢұO41DՙVOY4aV%Uݵs88<G$.h]+jBIAXfnATՏ45 VuքsK(K%[ìfK{`vC1N0lLr~ ˷I$Va^AQusٶZjQ?`E͑Udg~;-u^/hP6;?{W'm &^zS9V��� Xy[ ᲏رSdKۥ\}@Wyf.y MaܯID-FS׽`ގ_G dh8nD F$͈qSdy7lFΟгg}lUm>*:A6p 볱'YNOVa6U +M 9l2qE5ꃺd}xkB_qbXͰ[?Wpc_&MajfՂV YGS]F[6~>k|4EWO)6GyZi6_EV7&;c؁o@49a[ߝrn(Go,lQC��`:. 6lnx!KgPxAl~#X��@Q+Gv EPn�@;ҢmO=`��� @gP�Pp $ׄC 14QkL+`��� Y &�@ X��@����V��� X���@`��� ����+���2X�����8Xcͧ9dOYB5[s'[Um6y]jry<+mi ]|y+Ֆ$Ӷ6XN !Y{VNⲋ-sf-̃=t2R73!)b*F+#n;L&ũhK^;2 :Q]"TZDsSU+U)9!Xf+]*lM^/-ˋ[eM5XMMmb*.-ypIq!^/SSdYr8ao5kˮh&vl#v(Ov<$nf)NO\VKݞ/)uN**9AfVvKj\}wzsG��`-Sy0_+`Ԟ?KlQblLʫ?1&dYyVa!٘;%ʽ#kcf8hF MVjk\vĩiWG+hWMH4V}?0q)Yri)eePW7ᠰb&Gu-۫ +kkk+))q}z*Ⱥ`-M,ͪoQ8%VMJ+ʚJyciFfg\ှwJ7WRv.|h"2 u϶b*0ɻ VN/sR?(tR&'���+TA.3<6nSFZ_!NI}#T*5Ql(Vmmƴbe̒_2%,=@K"y_JڱnsmlmC?b.RuN(d0#/TmHԥ2.W]ehR_;tŌ<c)-[ ?hI5Yn^`-MM+MJ+v>:Tݖ<+YrevôG$?bbfLg+{+دN#X��@N]rvv͌MV ˎ&g;IbN ]$fٍ̆-MO7XA+7;Y8PajB<+ώ2-؄lJ#VWV*U;W[,a!Pdbb~.QwȈCobf:ʏZ<XicS-+ng74)Y&&eLP+?ހ`C Vr/m_B_ݨ,ARʣ&fi'Yٯ]+ P$qbaKzq=eTǵɥA��`aƙ9CAcJdƳ^lܕuNvZ.K1>>j*qTs XyNO%qjjG8m=ʌ&f뾃,'N[ Vj'ڰ! &*(u +*νشZ}|}Bx7[r;.g5y㵔Œ.P&fMbѤ[jR..d2ݿp.X=뻀l2,%=^[[]>Qi;[|,w͌N=NGh.HʹFFFYy(6'+)މE:or,bzrƺr6���+oWI7͎΅ׄ>?"`n%lSvoO 2L0}!V̳ .m\t+dK[-s!|/[r +<-w*QE,lV mPWZTee  JPMRV(ځܰ渺-]xJۛ&šIRw<{ynn XHQl6YI;qcþ 擭7#1ysHkrG7.oތ X��@jrj ��#V V+���V��� XA`��� X��+V��� XA��` +���V����+���V����+���V���� +���VNc��qډ X��@���V X��@���V X��@`��� +V������ X+V������ X+V�������+V���`J{R+2DZ/_jQDF-p>Buq@UE- K9KI}Ϣ8VPC:O=6E^qPV�ccs܎'8jeIqKݵI]-_eսԋ ޷`{dצNLL6`pWp觶yYV[s^Pnab͌�ɻ Vgl[lkfjjaͪp27䪒諫ܜM)6A��`-0a?J.d|7z',_jn`%y\W-+ꈙ)P#@\S%$߶4ET`K.Ҽ+Wؒ6weU 42N Ub&v|KV|隥Nb g[ fKN$+=Vbdp#rF3\,F":yGХTZhlEZC=JHhϚFB=9`���[N5D*+JLIsȩRg Y%6T*uc*y+SL)vK7?Qop!;M0JkK ~にby#/7sS3 [bS;RT%[8džB!YغBNQItV7-Ww&wg9=B~V ē[0#'R+J iw>|\XRN&VzewsP(V6s_.hvM*122 I9=\ב+ǾU&f`e{MTsTY>lz[,*=@ZZ/%g)iҪ;ǷYVs+|o:[:-rC%@Y^ܞmVI@~s\*9/5$XgGlmG��`Mٽa?O*U7;O,`5~L!jzy+. L|kfw(jOYtX9[,ؗ*;aFHX B2='lLkZz~jN!lCY~:BPTrs7[)Oecf9w8;|>q)%O+}yǴvw->*z~IKʿeJé,S]NO+(R֚Fr_[RBZkc.X9bh6[faTXجb/Ji L+ܭ9lz;U EI 3 #`ہv,6G bV}VRO\ /a+oLJSAn/+Cs,S^=F?J~r ljc ���HVY͚肘rJ1SFnlB[ V6 f7hCMȼy{Lɮ+%8'Ic-pƦ ^56ªhӋ^)P%֦&1uYCO[cE9/~XcJw_,a_n}wU Mm$dUT=ԶXo&Rg̲03%<2z*`<j1X*!Z{/[8U`ԟkDċJ]JZ_ =[U53 Kq@߻`%tRvF EJ)c'.\bPC]y-_ V]n1gs+"lԈS#HߜÑ(j*np3ZV���9 9' +g=)v^ztc#2uO[cEʽnJ<1,n|ܮDfS;t=q6T9R'G;bNwuKcDvޒ"fr 3ϫVn ~k_RJ"m^'1}E\uҺ f7[,TNԶɾs,܏$eP:j,yv`eOdֺ`EU؏ϽM {:b:0UG$21S3G'[ԧI"*%W@6Yeq(���+oL H?!dFԺM ~6/H7M(g>bZdjJc)odr`Zrw"RX6bEHKrlui71<Woy.sKg"uS )뮉yT]n٨]nO|yZj@4\xE5XMMFS͔ A/1X6ݨD2y6ʓs+opicBw(&y,X0Q+V���E ttpL_eJr.y?VoxucT)d>~jKs,V)l{R;)e{h弽+U‡&fʙ2Y)f̓ڎZaSSc!ќ*A{rjGZ)d>ɞgfiX}|,scsszU퓽:ʁdi ~k $ᔤErٖ\ӗ]UQu+r*Hn"k&+dl([-Z5?@&ԔR&Af)ywjXW=UD$YUN}mKuwQq|5.X\LqN,*ea8_%Ţg>@- `336+Chn~ӆrIUl E qUɣU[֩`/{RDޑŤY*���H}o+Ŝ@NJɤ%'wP(T9 w kta\虜+O+~ދ- YW} @a'|\~w9-+FҭW-"{(NʊY:Lt\jjSG@3R_v9V)Vvf5&n'nz.kAe;uiM">056{T77,e'ltwYtUnok-vyX 4^`e{ ,)9K}&rֺ9u[|ŚpXЂ#yT# cV'y"V/p[/'$t#@b0,(j<y-ފ<k.57[I7m/^+���V=p�x |x?!X��@0'_Qކu�� +x�� X6areeeI{$Z]�` +���V����+���V����+���V���� +���V���� +���V��AT+���V���� +���V���� +���V��� XA` ������+` ������+` ������@` ���0#^J2'Yڮs} f<X>J23#[.X>8Y7k-e_]u1|ѹlx^fץ W[ve ~SZ;{1# &fd+.Ey=k u׶؆4~{9ÇݲĄ2aәWܴ܊lfFذI ʩ&F]`{dצNLL6`p[ܾv1j{[$*ιVv=F��`r&])fsOv.9:˾̔zJXaIϿ{q7Ʉt<<XrM<Y9^+AaLtTa116>[jb~h5A];̶G`E]`J^n7DܻJ6uVԘss6h<###>'PD'(X| OH+)+ˈlDr"cs CUbٜSD/+K!X��@ֆŕ;^fE bQ%5.>0dybyq,n\cS+/pqZ6,򈃾dumoxrnvٓ}Id2uۊ2|n[D25W[6ϝN~ yE緾=!E nrO7 XڮuVxj ] #}-(Ͼl&̣NT2l9qV mf] )|!+ _xɜl"6u6I~ysRvÅdz)~$srj}Ȑ5I+f0XA7XHh?#Vsgs )[Lls[)&+Ť D'Wb|-sOo27:ڭgKY|wIlaQ-Ls_32,m^ۻymf[f;L|" uk}^z ϛy?pb���Xbb%V2&hKؼݵ7!&3{.sV->$qTNgvͩϴ{lG͆A-Ay6&W9j^N:@2uA o+Մt]Hqz!4`v(=gK\ty{i{$twWЉYtu/, ;Pg:=n,cwvN+/Vk$ʄ/e8ޕ!mX]z#W'ۍ�b%$~β0y:V|&kvXgcO>cCOF{iev?+JUu,vl\Q2%AQ4Z<6���@l%+>zkl1zl!̘ngB~"l>kY{,_&A7z.L?:=/*8eXxwVP%{ܓh:;A{@vk8;OqAxY ̪n|VK$mp Cz]&#]t,tTiAqyc$Hf› 3l_$X8JD^M*W=V|�mXI}0jfe"g@t8p~:ȽP3QXu4 챏?)HcN2-|3Eq,q%"VT%s|fb1&_4婸f{{\A6,<o]+yb���XJgEM˔U"c 5bMhF^o۳AׯĦlxƽfD\48U(EXR eEɕufG)fƫ8qCDk!7N0<SFg |;ugGz֎p[}B$&APJ8볏zY_RLLJ~}spBMG`i-Pq ']UlUԵ>J6Kl7wt韥s&!V~1RW„=t=^;"VV`Y=s?/')M,5f1 ^/F!V����bLhblc:֝8Mq E̅}Nlq=aDkrld9DGl+ֱX!ib%A/bbDu)[w >b爕d4&E!33ibIꦅ`"CFWeB DGF +i\\t' ,U6�bw+GXeFИGN%& Ri;K_12e]H+|\Dnb0kO"c9ҚbePh" V����c}dbdyt3['UDܙo2<a{+uOv%H}{g.MDG[8yF_xp&e~ceCiI:,Lrb:|yT[rEo1+Ju]0y|6bE}5[K?RD{%+q7siz^ Cu,;n*3 PeWə>lV!s(r^O 톹~w{r=.$Ҟۉ8&@sШ?c`llšH[|<=4->Ȫ_O/1'yc{I8R9k{La&2Wb/-KO����mlBJR` ^2fvr4G(۟ݻu-.D`JL>7q#-F)ahU|ׄsNTQ*V@Y?Yj{9 i OxӮ VFY{pf\@r$ qPB[bU58?쏋X*μ=X1N% }nUf[GߜOޟzb%p@i1*v8$#Fo_{+X Yv5fetQ($O\.r:ØXq 3Su䵼`>!R.}|0LBi&&` ���@xeכ���0떷����bb���XXX��� V� �������bb���XXXX��� V��������@����+�bb���X���� ����R���l9PK_%` V��������@@@����+����XXX��� V V��������b���X++���� ���� V V��������@@@����+XlVJLLG<˭kn ebV}ڇU<eT%Eb&v{d:'f"~9.EH!Q&?'@R61ne [#Za/|,<`;e=Ÿ8H Uey,se^lR.!=PLɎ) ϛ_' YquaV U%fdI9}K_ V����-!KDϾYɞsŮHrv~7MuMm'p V~t::A-~vBiIM )_{׈E9r+`W1i51T^_+c8u<;rT+:dy4p;Naw'Bḇ<Or-VkiemmCjiy����beX\/Vִ[LJ"qķi+8* INӺѪƥ/5{5 %a:ܫ-[^hi1˼bM $Aޱ޽cPENe%2e?YݫnOOMFvq>\2w,K!8.$iًm\,+Shܜ P;Vw OM,`UsI*hʑFpb:r_QyQÈiY{d -c3+W5^8.c|,j+,Fޱ/Z-tOVbPl+I&+W7[^ޮ_kbE4s,-Q+����voȫ_? {>~//l>[�"zٽnh]6xwJ}.Y- /N[׾NM؎++<+لO֕wS呒js&g_j]P~`ɥBZg aqh蝿Bbw'WDk޺F[KZiܹ /+EպRʄ8 L�":[t1^.O>8bξHRI+K?c#sυ͘des/rʓ&;,VXeTBݛr6O_)/8֕r䯉=Jge*7˫_nZ V����++ZE㥟壱Z#t}o~綽ꘓ#AԖ (yz {0o\ލ1˟o%)/ۧA[\ۧ!!>YG?yB} B E1ڧ:WeA�+; hzkkOJ"+&gQ."B-X)p%v6",-B9*SO.Ɵ -Rqi\zIr%rTcNgi4Q)yze4^.$Ab&7<X��� VLl[tp}WX91߁jfrlx2""B4II$C֜XEi87y!tݙ�BPlZz$ֲgXU!@"L~Ѧy{9O/~2}m>[;9[;bUd 0r&ݔ-/= 7xS*K*><!XqGlwؤ򋉕XeVϜk(ώX p[LbY`})ϭza$w_V?ΆxM���@lX:ZZTsͱ2U/XIĊ;iG$͎k $pwB_\8jԻ1YO+'<Gl+KH<;_?tK> E²1I;_X_XIB\ Ub%5be\De ou%+XN"r{=,j>Js..nE͐&X1K3 /lo}_X>~ ���@<V뷕ٶ &?gڊ߾}2V۷;ωEs֬>ʻg$昮rh"K9lA{iҾ:ZMoZf e=.k%lM׬_OJcN V`9+K_-j}Njᙯ,ݪZ%`gpUnS* X=A\ȃL>ñ+K+gq%7p!QۉDVzz~lqG)1Fʣ׽g}�KEƍ&;*V+4w/,}P[zi=ywF`vž={LVr+Jm(,~j!#߯׸+����0הwb]t2WΊLHvzv!I\]Tyo/ձiw]O~ ڣ2使h:``eʼck+<, g'JXVGlќp)+l=z7$'Hɹ_,;#V"jύʂi$# ֥`ߖ4bѱ7ʑY{R$v-8G,[r#Rrn`&V,=g]cVj2CeJ.L[5(u =1T) >zܓ׺cXS~Jе٨}y#oևX��� V����[@[ ������������b����+++���� �������@����+�bb���X��� V� ������������b].���`_%` V��������@@@����+����XXX��� V V��������b���X++���� ���� V V��������@@@����+Xv"-)FJ8CKa?yOϕ0#?*=vB$WŞފ{? $ŨnX57Z%kKZ9²P&o`?oR*V'JsrI!c#zꃩ2hiJ~&I@DCX$'2," 'gLmxܟerF,fdf,< ����߬|3ɫqOofA3Ce+[NcXO.qY?Ƽe-"4gN$�bLdzL{v u6E3S-<<e}cNS|/p*5.z�ucbesH?i4&ugRBeQ۴WpiyvVub���X2(X>ޘp~Yljelf1; Z;#M;qedgiza8iXnŕ9(CWpt +$jBhbCCCl}:]Q'˭%1*9\#OVp)=)!&2gAiP ˲ªcFQg_Bݑ0xϞ= STq%/QC[O}sX:3tB'̼?Rց%+ :MSI{CNB-wN)4-UU6+h,u*Iʿ3:pܳz0M"3uX4{aX��� V~+W5mpq>>dMO"Ul喀+[˜B0_m?6Y45b ɼb?+beib{v"ǟ^l4*e瑚&OrW4`�5x"F]v`37K#RtC 1;;+|۵ pXYeB2 U F oʐsY$daI8Op.iy# 4EY&OB/$Ccm+lg#ualrϽ<bÎXϖE*S_Wձlة�}s͘_ [f+����&V]R\(NZ}s ƕܘ i 2!Uv,ʙ=S Ӎ,q x|l' {V }֚rWtVsTKYǝRFUw$3gMS|Nhʾ E Dմkę*W=ΠF+ ӏ ~yQ)·ޖYdjgOwJu#*+Ƴ='#7uxi\FW{{h42n7ab1 /T\|Es}=Ν;&����bw+7D].dqgL}<;rb1n &#o۬4RS|Q}nT}in< |h`z)o8I|Z|",LT"U^j&@rpg%/k2cXIɯvNY)bh3 #=*.D}W]VGStv7YF߶_yViqLMY:׸_BU0aiG>-%)EׯhAm0b���XJKՎ;,|UX)>P^0z̩qeA2G4qh=*\KC$o!Ć5AGbbDum:G͵GxU~mRnxLcmXi!ؾH0n@UPB䞽x#gXySC$'s!dMڣ}Gc+s!""4AbEHh(өdS\*ms+wq1F̹ iߊB$ o[4}J̱���@l <o^XXzJˋy1pq! 5/읜S{C+Bruz2|~V([x@F=dX<dp%RN9B\:mbXQlu&P4 S/اX P~jƕ4=pӍM/iGb'@ E)/Vj+h(A殺45oo1XQ伞4͍ӲLGrL+8&@sШ?c`llšH[|<=4Iu&qH)s|L^^#є͘s#x+����E o\_edL}W)VlUXZմQr cV)|]2c uuΙ!Vv8vMB0Ұ?t4NTQ*VG_5h1VJWHaPU̡qrϼ=X1N% }Uf[GߜOޟzҵe΃ *1Y[bTV<iXuŊn}zذ1+Re4E%)U}:}rӱdG𦃙R HIkax\MYfCQ@Ʌ V����/{@��o1bn?r V����KrxR;񑚰R'��� V V��������b@@����+����XXX��� V V��������@����+�bb���X��� V� ���8���`ˁZ%*���@�����bbb���X���� �������@@@@����+���� XX��� V��������@�����bbb���Xٍbe柳Y)21Ɇ{!c Dnq[<~r>=qk/XXΙ>E``'yi D$Hت/7TuDzcW٤$VԡIrӷL<eϲL9#3 3MMqnaNvN?^:]FD+Vkn ebV}ڇU+ ����44uw7lXI9*uyNDu⸨O|$XnC bGGWyuŊF-+oғR=!2!VvXͅkZgᮇq tN]28m6ώJ*-yLty"0(K: ucbe[ə=ُm ,3_}?#=���@l; [%V2?syr #/;?Οe򁖃)ZF$~QeBYBq\Hzyӊ[SW`YZ=~}˖)ZZ̪2↓(VZ.G*$,#7'_{y 5&khY9p4ft_$Em)yZ7ZոePENe%2e?YݫnOOM>iJ; _ 탿j 6s3F/mRm[!z:K"w-tOVb[n~ S׼Q>ޞI P';S۵׻69T%~l_\Ңcco ~7+ ����W)~Ŋ\[2b`]V(?7$xҗUꇆheGpCmxУ:;ѻ* cf]*$,hYoKEtb{лiZلHu߆~NcåE-~Z[Y/FnXZg_^$)aFHw"z\;d?ZWMGJz߽sACWj DB0b7w'WDk_"in?}61%PyF&VbTq{%͌?qKcˬ_CsLc{ߊ}M<aŵ3IqaۧA^}÷ϣǞ_!V����_FqA?X)sΕ|U,I۷O 834DBu{ @Xe2w-"qXc臕�%B Eb㮴46^Z󡽱%voFt_$Emw{1o\Oߍ1|^80|VS0uv 6+A~="FT4e6X(8Gf&6*SO.ƥ qg\t^xg o ޚ6[ރ*&\\Wb'mR%b�F^IH4q(||b���XeĊO+]c߰ H$/ΓjfrlxR(Tp">'ŒT}4ޘ6KQl|z1#Vk~Ӧ<�*[᩟,X np[NnPq>Y 40|VӦv 6+7t~D#w۵ߛ LyFM =baVr#VeYQj,G2elյ?Xub&ȟAsXTX��� V~bcVs,㨿,I+J~N)ok7;_qo=$?P/ ~WϿz]T XY nѺ_O'<7@/ajxecw[ m IzX .nR-VE2&ϥ_c_zτB2b}z.])2|PU--йX+����b~[YYm`B _$oفZ[朧>A|cp!QsbEt,'y~yͶwH*1h"K9uA{iҾ:ZS/g[VӒŊ X n@I4}^~}?}L+9gg5Q`#K}]3UM7VEˢ^ebE+ܦM b},Ue_c6[ohJf湑uoY>>21c2μlASխP';&VO<&>:© ^%LK}d[����mf)m2Ipϧ@+Su?^tGD'n)Y˳5Gs¥,r ޣKش;X^.ڧKNM?qQ.%8DMm{X񷡿+"-zDPª~(0|VS0v <�esho &6mRn+pʳ1+s5e! EѲ%-| )MTxtJ>x+'kWxU$Sʬ}Q+gb&$ # V��������+w)6���@�����bbb���X���� �������@@@@����+���� XX��� V��������@�����bbb���XE ���rW ����b����+++���� ���� V V V��������bbbb���X��� V� �������@�����b����+++����.+يqP$Pu[&YfS͒#?")ZTv܈b9sppf;k]W_RO_J�!bO\oEIH( e$Ũn\j77Z%wXџ(͍VE$ɆՎ? 2EKS N6)~0?%Sb.4d oɖ|DP$AsvɵܟerF,fdf,< ����}^\x{phzPI{zgF ]#V1񋦑緮BbEx"MΙMCZOLh5y r?{,ˢ% .烯 mĊHB8iP_HRa@"beXv{O;:Q_ֲʂѱb )\#]ӏ+ONvXګ-'V;FiR{&%TuQ^éKّZi����be,Fٚ<vɒ%ԴRf6)YLCJXV-Xv0(t:MQT8b꿚`>[32$(•JeB^{+Q9a{ƛ*jwvfWKnL%#4} .'%Dߞ4m<b0mW1Q'˭%1*9\# pdgiza8iXnŕ9Fa׳RF%7g!H+! -F&Qh*Js_94%jh1vIʮƂ}Q :ZKI*lL|N8+scw9 be?.>7.Ϩw|5{ w'b���Xn,*.|6klՕjBtE]7,ȰuJX[Y24}ˢ${OHdq[Vv%RzX=+us5NDGv۞gSG'Bo6+r޷ݓNs߳4N/8fàv=4y (-$ S%j.սZH\մ}HB`#!L{48|۵ pX1Tsum$PyFfA(P` 9Ŋp8{46Fz"|70)V]b~mX{3bM%*gz^wSeNWϖE*S}sag3|/-NJB����+ƒdN%C}vgkNwχw+BO ?6Mv_8QLThQ^*gL-L7Ҳ%\-!"izߞS|>Ii~9?2;rT-v#}G { }֚xFCAƩe":ҽZ9GÑX 2ԅCXY8JD^MoE#{ ~ r#q VvXu4 챏K)aSFW{ui2qdqmߨnuKn8_v"T/P4c0LhSqF~}$m^xg���@l/ʬ9VRŊ{ OA)=87׵& QSgiأ4uaYy`)G&39MG\+<xo@xL}c|Z|",L8PVr~gGR^MQ'XYe> G¦b%PG`i-Pq 'r &Eq*n+u)LX3א",lIbbiXBy(FX1M6pC{`f���@' 'sېJ+BBBf~dϛ(Yޣ!A^j?bҚ9K<Ȧ'ƛgkĒԍzmk;RY<'_xz'Nx^.:"}Z8O=H >|%* Pv&ĊϯCyIs6buf+ᖐ*V7$ʌV )hUbk.9VrRu3bE, 9V ath&X!DR{nQ9V+1 ����VDVzz~lT_2,"JW~C?g9rz._rPHى59BO} ŬdXxu%RN97۳#֨}wݷjƦn;Z:YzJj̩!>Ŋ#n~vE:mQbSPlu&Pǯ0^1ObBğg›J5푖%7_=/T{58Rn#ڒ+zM *˓3E}J+ŊrI~ohԉNU1066P@>{<|?<4NR,dgĊ<`={=y-MLƑ" qL^k{+DS:4c6ύG@����vb1 Y<b8X}(]!a Ujеҟ(͍VR$!sQIY7 c1r۳ Z-V3n폋XVXMymmO!QI'k8$#Fo_{>Ŋ#nzvC:V`a4.TO=Uv(Xyc2t+(rkg<^|,*H+WcKC| 6_?Yj{1+[9͹ )nXمbE7_v5fetQ($O\DHxV+οn͆}7ܧ2AJB񖹚hف FA����+����7bVbe;X��� V��������@�����bbb���XX��� V V V V��������b@@����+���� XX��� V��������@���[.W ����b����+++���� ���� V V V��������bbbb���X��� V� �������@�����b����+++����n+-' r$Ihj/fo"$/Oܦ]PY{(T^DW$W$jXv>Ή'VԡIrӷL<eϲL9#3 3MMqnaNvZXW?2|㏗N%DQ"D=rdb���XJfW5L X[&_<U'"}u [(VX&/nO�mL]*VxsYqaC%]u2S Nͳ#GҨ-yK^(]^7/LwCX黐s,ϷX~+9sG7qyy~-_7ٷX��� V'e~i<Q>*[SW`YZ=~cXY<Y/<Xn~Pr^z޴X⫃"i1q$?;N{V8w40Je$V5.}Yy;T$eYLYtOkVjSo ˲2�`#S0ciZZb}5$*VTH!IY˫mgd.[^hEye%ږ(VY)c_hhQi|+ͼr!͎LM:IX(\4]+kwm\y<J8Ⱦ ����7( Hzzf8 ͳKLҢ<ʲ'#+qw~˪uCCE2AbbZۺ,tx}RJk_'_ݦDlMC]曣vX&T7~Z*UW'{gԁIĆ�PDG,!_?, Wv>+?2Xh7a.\gd?]^.[Fsmn+JGX2=g3NQb)|l5+ws.Җ)|7Y`OvFX+j_?{}M<a3I 6+����ai<$*Io:;K)m'V"y6()Ag> $~\`6\~sI?:R$?;NqA>W ~XɼwEL{C%śbIJHXy"5v~|$l*VoD\AH(}{}X(8G&NLmh[vXyP̩'mRLS83.:Y/|3iWdGoM-FCAg..[J<lk׋Kh=o���@l離H*tĊjfrlx2""B4Y"J"OI8_E$MŊ ?ΟKRf<gi 7y!tݙMk)6#}$zѳ11ChF^^bӋ9Sn`#aS|_gk'zK4}g7k<+L-XyX}Ufa٨{VѴL[u|l#VvBKVV+m5\Dm Z}����be !mIcHĵbg\53.#<ڲ᳐Ð"~Q1b{KXiGRMݦݘ,'Hv6MCC_Y^aL$x}9[]CD˰l~Lw+6X!iW+ܛ$p'x@!g~."w~ѣ̢sW:XW3P';#V_e"IV a܇sMm V����-j]ٌpZID-IV=#0`w,?[W?"rkceUw?:F_-ju0I*P9Vt.oفZ[L`vV&y14�b_$x1<Ֆ[OKap$xyawÅDk`[Ows?#\pskU,E[&f]tͱL wPn/~F۲; X"~==`l#є͘s# |}dbdyt3['NvF}}gq1;vaϞ=EÓzL^k}t*SٷX��� VЬ奆X mI?y-;V/ձiw`]|@yݪuuyhNeYN{|ϝIv._&kVXt5ʔyj6 _ʳ%BJ r;#V|GQH$F~|OlʍOJM˹R@ be*"_ly\iF-$ڤl[ 9iSd\{T Ŋ4g=k\MYfCQ@Ʌi lBJRd_~ 䞼vˌWEK".ٷX��� Vv/ vV ْZD-��/𛉕�b���XٍX}]=Iϻ|:lGLf4�� V� ����KJKKkZv_цdR.$lW+�� V� ������������b����+++���� ���� V V��������b@@����V���l9`w ������������b����+++���� �������@����+�bb���X��� V� ������������be2-ٳ>(HIȽ%rO,^³{|jfI銑]SG/ӓJ֍-XT'\{z+MDV}܇ )FvuR*$ ĊDinR."I6DwvDwA7X}0UP-M)8կۤ|hVL̲#z+يqP$Pu[&GȰ$hN]n09;24>]���@l#mjK3X-3ZZz~|/FzߺھMbE:{b%bMo b,\" ~>HZ'>b_$lXq4gN$ KŊ~,CCMuь(T/kYeAG@g TeБ. G{lɧP';$VxsYqaC%]ݸ`{~h2MzϤʢ.;/DIój'Mԕ|D]���@lCױ;؅)V=tΙ[32$(•JeBMLXLCJXVJ+Ҫu,)]q//IM(elfQUkuIJ04)mzE^#^~KӪruF瓷s%j9044ϾMow7M`Nqqu%% )j0; |>Sp)=)!&2M,M0 ' ˭2gݫ=7ZUo5b'<DZZtcEY? ӏl&Qh*Js_M94%jh1vIʮƂ}Q :ZKI*lL|N8@%;κ~z友O= o]QRyefDDGB����+ۈ)Qq=v oLչ-CZE]7,ȰuB]c3eT͆A-yy6<OG/G8=N]xsg7FC=7;;2wSb1 KEd̂ИWAyUdׂp9rّZ˜Br0_[ݫUM^WsX`ۮet{Ċ͏it6gzFm%PyFfA(P` 9Ŋp8{46Fz"|70)V]b~mX{bR8>eN6R-9TMój Fd<xb���XFk/V|/(IQ BI}4&wf)osɌ+ݜ<%nܪ5G=X")LK$z  p\F ED!-,T] $tf!nܿ{ }Y d;2 uI̼kLymOcy^gyW` ŊHT"V&dV2Wӛ55wr/Cn}d2ma.+Ƴ=q)#78lvhjϰq.M&, n g= 1*S4c0LhSq12BhtB0b���X2LM!\ɲUbţ36_^Zg^F`v (,N'1NZciQ0a硬HSx]~r+~4~51,Ĥw5bee8M=/<2=x ס;w`ayξ19溜ّ#-}Mo5؆yG¦b60ZN4oxFW0!.2}[U@fRW„=s 9+ˆ(V,E=_)wbʎXeVz1_NRr{cc)NOXwVl���@lg9,H C3[s70%F@XHQ̆ʷJg[E$qwJ_ܺW>q2#%4$u%A� |ϔOOQ0wxϋեr >|jw5 VE:߂Wl!Iq}F5b%327ȁX٭bEHhu͐☌V%& Ri;c_z:.'!P';(V`֞/'DRv?YyK" ����X`)1͢u/__C SNT%+O9=Ak+{$02) <N/6NJ<`z/<8D2l4bОּi5<pzߥitI]Cb1)/9([x@F=WsV_P¡O qͱt0{�RnGJ%Wl2/Og+RϮ+%qL澡Q':8UaCϷ,yu;5Jk{c*?)K'yc{I8R91%qov-sϧzz}b���XO,fhU(E"1u\V!8.-W+$ ðCU =)ߪ5.TO=UvX ֽ/G8'bV<w< ɱp;~u.qnڞ4L\^R΅`voA0Ұ?ՂۣMqpH"v-_ϻ̭[(VE8$#Fo_{ \0{�Ɖ$A=dzO^ 1pV Bζ}sn&:>yJg=Z}?{{ܻkt$'9QD ŜsDQTTP$sdn% U9ip̮YUfUrT|E(Vf(oLsVFЩT;`:;X4u?0 tV ryco.A"{nai߃AE07<mT�����aX(i ݅N] -�Ҝ|n[w@X����V�V>"q{܃L�� ����23X,# ��V�V@X����V������V����������@Xa�����a�����V@Xa����@Xa����@X@Xa����PX���yER0 �����+����� +����� �����  ���� ���� + �����+����� � +����� ���� ���������+ ���� ,Fa%/k-Ǎ΁K;ݏà /+sb~ӅO>F"M[>NE"Q.>)Q a|*7YVRv.Me;6gd QCT1` Bׅc>.vĩkҩT:gہ|4mui|4* %fmʈ B%Y3l^V|b-dMgm * b9[ާ^@1T188p/^ֶD>Z{xH��/w VnT ~|h7ap;VXaeSt(bd>771]q(R/q͉ndpx[MnH9fGo̙kNL˛)\`xjƽ)`)OGkoJ3i䍗3) eXwﴥyuF816^6\PSJDo\7oZksvW?CT^*;[XX(RSL˗/?{,999?? ^ !���K|VKVo3++Tb:Ŏsv:Qh.#Z? H$8kd8E}406N,krxbl^afC?4,8ow~;B_e2lw3exi<4oȋY+xW#XŠ|lcvmI1;6or~NZ Wފt粙L Ht#A 0IET"A rőwrp�y{~+v|ԖVӉScZ㮆츯ܾmL:qP.ۙbaaC [FclV'IQp8xO`w(/yqtdP4gPl23hXt8Q#2VdnS+nxcM,Ni MXx ͧ d=~rxKK7سN/ 2tlR^^rzpBlllbbbNNNyyyCCC{{P(���_ Yr0EAa#!ѹX yD{U"업5IvȦ cO!'sFLJHw"ba[O{ލrRr_K&;8BV%H.S.֋ ӎp`n446>$eBXg 4<RomLjUx ݳV(,3UQ! 横$l�Dc#r$޾}{s4嶕%%EM?Ȧ*o]ɖxq[U$pgZw |<9%E2YD=ɏ2oԵ QAwoo[As>G4,r0p9(P|O=h bӬ"vTSi訮ꕙ:D]U/!:H/z~f44WO;&i[N g<e1lgѣhaO:۰N_9suL٢(f*:;;KKKϜ9Cl*> )���%  `"|>JgrJY]@QǢܨӤڻ"H$;-X1.3A<6n1cvrᡞ$2{r E M" _*Hd&6k{h;ާdrZi٘jSGzBaplۭF;"`lkY4AXĬ:QRxbXJ9ʯq@` & bzD m)&o"{ cG+U|측%u+:h15li[xfּv ٜDc047& KTK3W15nȼ6{vj5J.uMD'`PÝ$ּ*t\ 7%ة,Z^)^xuU&C襂ʒ` ?.,m%&gV6;jAܮ"f[s}uuU~`;,䬂g\I^'R<y?IRRRz|U455EEEݹsɓ'UknnF/���=��_09R[< ԑB=/Y ?؏|ݢ⸧GdyG%7m<tޡѩST,POrŇuRXo;M"\`ٍF1lL!3 [`uwB68::\mo]WNʆ,wH~>+xW#,w<k L6AnNEe{S319Ee 0;URA'#FU40"w8Lr- 3^n$m e7" ;37TPeYK֯7eaiiZU0HEEEYqlKNM,2Q,nddTY_dɢZHnj�, Uq-ӂ,35݌ɟY罌<ptw{ 33k}X>_3_ ZWja.*VTI4-l E9<灏BѣG+'yEzJMM=|իW⒒иT^^^SSSWW)���y^|> �Af`SWSXqϟD"EIfN2$mF Jn9Ȗ/Hdfχ 'g LSfiZaeBae ĥ܈d*W,|K(wG5Rvă3&-+&zH_ ͧ2P_XUlۋFOɟ[ZШFEN;/++ܒ- 31xƄ,hjv7:8o`h]\B짚rĎR., HqA`}Ja|`^}șσ Yر9YLfkdV ,I;є 1E.,`ӽدmF4<>hl) dV2v\JOO\FA}Cs{}&R3O/_8{<xČB)���y^+++  �A@nr0mE6oVƇ$w{7TlKCoU7 FFLJEIvt/۱DvZ%y8)‰}L.$m:>YHYϺ$Yw) STl[aq?J,k|t/y(Qzf X%-L|hl-pM@P'8W ̩ln<^t�k>U.4+W}VRRRYY  xg" g3H$+qsHc\*D} XL31)f2Ydp 4r.Gm8z9YMa|OPaQ"9ʏ90x gy->=VH$) ȘM@P'x-W udXl6cWU?*Y+߿G1U]FOS 4 n >}K���V*o߾ hTl0ufl(64h6=2UVV"79 e@rI+ ��#ߏ@r|LUqb2MӜn-Nל`g2bn^5 Ei$TUU!g q@l +��|뀰U*--- GCT:k^vkXY+3L63[fJ E@PdӦeHA.))ArI+N+j V�� c`gggcc+]9 8(\ѱ7u 1׮YcCWi BPO e@r\ l5+��| H$a &8*l?h^[fkenNCWKИEccui(2@ [+k,TcRfWfLH[Y: l 8 =P(8,C"Ä̒2 j V��҅l>P\]] +\:<x2h411^%B舸)u/KCkkoG16^ c4Ojj$S w [5ֵ 4#]cKE"iklC*"mLI3-3IGT]/B;#|lN-`�0ƒW޷EFIj[WYV)5b1Cr'B2 ȉYa�/]XAcX,|>rBXѦOBxp$17d~?&xAKUNV^{t]6+C:riTud1͎du4k ==| =-sc3ɜH:Z:hOV>E20\XRQ^~b"_H2ѣZSd4ӗ@C_[l"ud*ubO20r։WV FTizi&f07 tu54ttHdSKBTcC-MɅ4 tt̥ؓ:bJXXQ?-6E +IIIyyye@r\9 +���KPى=42VWW/33V0w|t`oN000OfTy;:БzL_SXOvtWEhkbB>ЌP" t4(V&frn{rqz]#;͖djޞU62*=7Z&DN200/N)k~?QfgJ8ލFaΆFCyY]-5epN|ȚDQ`dJX'tcDNm`ezBaqG%yP'J\Sg{?\W~c#`n�`!1C Y0%QN!ʋ@ⴲʊO +_.//ǶYG@X�KVX]]]TT +vT?^?/;N*000Ob6$#S=>joM@}DV0ԔiGP)zof<|*uo1043ԱA?s% +P d*aq'5uugK Ж++QF\Y')*|~޽6[[z#LefZeG9*E)=P_\TLXy?-=oM`m;Z2H 9uҍW9l 000Eb2C YdrZ"_> |dyU0a%!!!33utt��+aUUUiiii۲&>I+W''1s:&8k3d,䒁i4VS4 k}/]GDO 9ga =56rXiX&xd`) W_XtIňdKk`]3ig9(44Ԑ-շXo.˜mފ~7M[ɝ56Vס&JndDHf-~}V*Qj,F^XMu$jɜ#;8ۚjiHnaUi(gGV +%%% ؇@X��JAALXڿoMkFa~:> &gз&@z+3V$LX%zu4&F{F:݅ osu4tULdŠ|HpCz3+kMY*eXв ([NkK} v,~3}&i}ɦ$:Qllff+탰Prd^OKKbGdkx3\/~3Kz�[<fKbL&[7�V:D9-cT^ UH V^| + ���L#xY|x22RT````H:4%νddaA]u~bdiwÌxl MGXOX1Ұv̴4 i2aE�򒁎2#}3=9@gdKWGOW\0"ii/-  y/RK#E*(DJfjZ_i/{G7Z!/hY0mJ L /V͇$Š.U&I3%S%VD"000EbvD"ހE/-+ۼV9-���uʂ aDϿׯ*TF7ƌKT�qSEvVnto:SƣS{viFڦҽHz>|2$V}}C]AI>MoDFn1!]]& eksrS_ w~(+�CW W9+/S'/^[ZI_׌5S:F}޹ SikaG#-HjJ fYҕAcƺjҦ+ŠjɌv,KgNP']DGSv�fGaښXXA&7}>FZ,rBZJzzzqqq}}}[[+���D D__/tu}Z#}gI$S=K +taabeZ(iΊڕ(Vfщywc .G1dT6;sjߏv5 &V/~R2GJXy'udtDP`fin%)YccC} ,sK9e{OiF1nV妷(~W^Mzzt5t $Sx:W0JUOXQ-[dUĒ$LHֳ0006IaeEEG5,9v +nz;S$c9VpoJep|Þd/]ЏWoX~7Ch$҅nв{B"Q}NK=Vۿ?[D[$F736g%Ǟw0662̍ 4iiZWL -TOP1s2OκuzZ: KPx2Fzc3 +ٱz,CmksI3457<e"-6Lͪ0גdc,he$ACs FPi>@5Җz)+ ֖V3%zm!t44 tHVs0004. Kff(2JiJ/GXe_RZۛ+Rysɭ&!JaI :[^ߋW2y p# ,6azonI[um& ;E _,IaHl_PZ'u"-:45g\xK&T+0000nT*6yȈjnN`(6m%i_]2?y:-òzmvauɡ]4w4vЄQqfo=dwc _PQ{&|ɕN:$:fJEl,_EemIk B :T!=OePD7x5og;βw;|%a +rUd5&=q77mvw|ј}0؏ژVťv,ww "?-ϖ}iq:1Y"XBm-P(V}RD"nd䚶Y{`mm*hE͂n0Ԟv`G&:|!u5GtwC~̃fBj m=5"akA7 ѳ\MaEQɡ;Ǜ`Űu(kv6qqVHT,j%{IzyOVԜr^;:h(JpO?aE$ܡ:oU ='a7qP/=LESY{*CKz.;,6 i E[<iaEКemmt+o qf 8ʭE8%}W{! ]{H"'־ Ƅ8^?N"e NǢp &ޙ1Kke*+d:Ft/@qAg"K9LN,2'fT=JfO%H', lU]Gs?=V۬w{2mjّ0)Őt@49!0.\{ A&5u+ꬽKVU zU3 |$u}JKQ*k +-U$IU!$26pBEz9r{4_Dw%ꮈ d]T.F]J0,7:V};^QO/yrPyЌb)WbCy6QIokvcԋE64:Zfo&4br@`.ʆ  _+,jPLX)GklnQ+|RX2cEi f"x+dz@2_ pv\7GaEВF!3 k2e|.Šse;$)"-3VXQV5DcNZXA��������/EX)t /n [@ Yj(GWxK t9CU p=+,w>":_*ك&eqx;6.+ΨcE4f>#aFW(m2aLˠ.yaEU PP_.76~I;M(4tc{I%VUbNT<3LU � �������� rۇt7}U޹ًEP,߭aH7 W`t~'xOk/??f0L{gûJOJ>dm}Hf>#aEЖG%ި83ӥ@qgÝ=l ݈ܶ%?cerrlm*|0y`]7"BaEunug1,*!|@���������@XYJ$nc9]Xw!ɷk[AV@X��������KS~B)C2e.w=^R= AV@X��������Nmb f89--aX ;&V@X�����������V�������Ԑ/&Ja��`!G�U,g<\ ����JYY@qPLV���BXA6yU)XÁό.)����,Jt8 ���,<o~<_�Wa���XʻwVPO T-i+)MNNIݻ ,NafKq1+����� +``` 23rssAX@Xaev _o BŠ@ HMME +�+=3ܛ[xv4/J^^+n߹P!?lAeo@X�V�h/JXDIII))) dV�VT4QnLpMwʑȃ^76N= 1PuGkoy ��+�4ߗ#twwN +KFX9*�e+^2L;m09X),*x~WWו+*˅®^?!xzIw`u~:V���V]N0000VS :�a�aEWϙӹkUa._0&ʵ'OXK~a֖SC\WRVikՂ $[Z֎ETeGgw9>YY5ڞ Qz˿KmK=̦l"!_~x I<;(=VbO𧮉׶9=4uŸ3LVnw+I8F0:7qog#B$'?RP(:`):V; 'Vƒ|t*Jw;x.mFb;vvqQOQQ{FXe슊'I@X@XB=]ދt'Oollx,v@ ܷ?\,G6?'ru+nlUZl5_wO;Šh?W͒/IjokO~oW ~ ,Eae]k76k4]B?wG ,(?~qOWeޛ/oWl홗i`ŷw;{zjRMae~G'ba~@XQ)W1d-><nwDYOċez.B%YǏ?}1σM)TW#'m|GenTy*ݛ}lt2juv8>98^]vsh? dQH5xK6\CgŠ$iS.?ol{uee+l{DO$tiyV$Pxl :@?7[a2DV+׷GĦ"`JQQᱨ",O,~I#gxi5D3v\vζ5W7@uI7[zDkWh,Ztו+~q@'*',6^y{o2䍽˖ KOoU?/t~oѷ8>%x( 9aT<A?_W㏫jLf._t c8LJ6(tzu&vM=CVx W1;*,7O>AT}x1ܑ*xO˗k[97p^wO(#W;%G;Zj-v!kSU[{~yŊZw*|U=`?T.MX$W_}V0\CмN+rV.ŘB0Ty .V˗als=aU,.$~7B2{+.3e9fXH%xXJ~^yKuk/L?xFfjfENV=2rXXɾsFf<u-=9<7;UܭBNlqNslm}>)kal+7%v?68Fwop$\Ggggleae`'&Ɠ]5O]/ⴖ$̼pŞnG'gHpi+ Wڣ39oKGPT |AX@X$ͷm>a+xyrn^#mE=uk "҂$JfNК fe:~`ۉK߃_X6uO 2PLcJwko?z=v5'4e =}\S[3w; h韂򔯟.mJv3ZǏo {[KW&YcOXc~ #Y~W`?yO>1>;RVVj t? i5z^yޖp5k7S{+^/nmk߀Ϡ_uJr,O髗8ouE@MaEe=n)L)7D+IbBX!*U qk93&F=cF]#$+`{;5{d 2 )6VRLm{NO% dQCdw#5ޑNNg8:>GTf'ݾіIgYQ,@U~'Tbgws9tiysZar{9ҨtƫwwVs|P1N?p*AIU-ʴ6{I$wC>Cc{;ؔǫ +MA(8%;o (_lPOT-qV-7ՍKz:2}O>Z+e DZ^uC * vuk8rԒ[}.+$̏yY,Ye/MtOsiK5JtƼY/- (YL`3D`1[="hok3"'17"8$UF{i5S2 ˖+9oruyykWui 8J_.<=Ѳ7~e bt\pln<맧7v+>cjUȹז-[49A5˷+euۂ yǿ_i J"Vz۟-;R}-3*>c|*aFL ocDm<`X%]kVT~[}Oujo,zܣ;˗}F[1f!9:TXCB/LhRynUnC 8$O%j8rTVz)~<LUpd{RA 8sa%3Rq^~yڋP[X̣f9IŚҔ k$򌤗Ӱ8\YeU_dAҥg_fjQύD%zF,\.?Ćji~~iRl�,Gx7M>\=?o utg옓WM<c^y}#q%NXMB?H!_}}_A$bl -+–mqHnojIdzSxr^Q Cn櫹JPBڝ[ Tx\:V1T;=si"lM SO Esc�zD zξ=gnq,?E</&+%pDXaQ )nKa}<ӫ(+V9̲0?444K Gs{rޞY 5XjUqUrJ/&{ \Iq }'Ҟlw?]*m|Eu7K6 TAt,a%slLgʎ;RVTuRW-@a+QS"5A5gUH%=N}ly@L|_*aŠ\f~1f:DC_E&@XvT=PLVd(r}muKm-鴗=.xJ 4&Œ^6]<M9<Ү)67=)Rz՚D͙L[eU<uWZ;LLu %V.'z~Dx捍JpT8ݰ Iĕ ziy)!&*i,~s"Y"xִ,߾ i*v\t+6^['>Wz-n'OPXabah͇Sl^i򟚧Al Knu,۱gR\&W_Z~)Pa܍[|T=ϋ` �̏"$Zt|}vmvAoB]X~jyE鞐m- M~36ϛ"{ ϋɮZ[;Wz+AUk;ǟC]_]X鶛 sexe'߯6˶ S喊''W1vuٲe3V Xae +ض;˾Y$_}rI1ܑŠZҙV?}HJZX{p`ǨSxc6R݄TAsqt~h"_j!ʲoVɶjxaƊBTXpdʓ')O[ի(&+tb'fm.tNȤo|CwrTzsd&R*BqQ zܞ mqePho?I &Qed0X9M0c%M.v2tև - J^CQ5c򌕤(OLX! AZ=VJRhĕ0ۥ@y Ago_n\lW'x`sbD"iXa4fN"n'V%OiK!jĶU2RuwdR%<{\K+HV04mQa�PGX)J6lok"wm-ZP +55ߩ8}D“'!G_..6,魭`wa{[~n}0Pg}<gSx{ waO=a*RU W]uI6i{(Q!kbSEo\JM8낗i<\,u0Cc-v62,d,[SrU]$XE)+x}c(_ w-=Cob,_c' k,eJU=kf'<޼V$5vK958z,p]Q~K ^aӲoVfJ%/?itRKX!ZHc!:2wXPaw 'J{[]XQ+RdZa]8ߛ붵KG$?%4fFK$1*MjUnT~"ByhbM$B)dz7~+ˡ[ S8WscTM}RX!+we3Vpӆ!T\Xyݑ=A dŞ q ؂ +=cWc x=bQ?n%˶7;'wUrc{MWnpa<cYVj vǤP?;LulQ.ALKWZ 70xŠ¥?,j{_%E8mڢW�`Za% &Moݼy*BMoYͣ*5U/+)T= rq?ˊ( =45 aYds?RׂS=@ƒZBQX'5畫Vq^+ﮈ`QijoVȹ9wW_}uê<7]eUVZQ޼v9ŏc&U;*+PX9kFmo65)?x}c(_ wUWƚ~Xenb6Gws[uz͙VA%ew6<Q1VUEd1oFg#͵-[$Wޗz 2:#P$51˾YP)7ĉ_8Zha QY`V>UdRIW:%6DǽJCBs)QZwCJ-ke<e#u}e,֣R"?Jl{.,ϰٙyOnD*ͽ2ȹ[99Uy9 -KF`=Ssh;/~#)3SWnLͬ+Lzy> + 6m[Ӟoc/i.KbafUʼܜ,h gju6Be?<` -v7>lO%(4&會X &}V{Xϼl U_zf]6Ni5nA!Drٓ{y>+ 0(xב{qg(\M7Ql;N."(*R:),Xa"o+rh (KۊWXJzwJױO5j%J針Rw/~0ԩbTX$Z|lL僔�,e<K uq:9+sctйsѝpcꌀG*9Q̾ ΠL۠(4 NL:`8{n92;>2d:Ar]w↑BY4 Lx:~L=́o]Vp/Wtoߩ\쇗w{q4Wr윶:jJU7w<4ʝ*sqHW[Ta gh@x0=V,;gON?_aFZ@*Be?<`v)Ђ!w:.&TSl +)D)wxp yV9/e٩wy<^kk@ PWf$?'L"ykPmZic R:wa�;gD[nlIdƍ օ2VfiY@XL kJk/\Xmll,,H>(x͹yь3TWSMK<s3Vnݹ =!L,:��a[$ehx/Wu;/g+`_<,nqiRl K0VaYL{ϘҶ"keBobscƭkii֍aнָ9'��a+`_e߉pa!?{V].+K2�#�WY0a����@Xax � +����� +```  � ���� +```` ,}a� ����KV:ǀo%<Ǿ ���.t��,qBagggkk+ǫ,((HMMVXill||Pł|fpA,U@X���@Xa��`ބ��/p:��� ��� ���+����+ ������ ������� ���+����� ���+��� �����+ ��� +���sV\gC#3 {|D9@:5xpt#-}a6m)k)Й[5=K t\qBH(Fiyt<+YzȃDb? Qǹ|UQ"S; g̥H B1~T 8rĉLiݾi߉Jg3h }/ p($k9̍:ڷǞ64 ̞Φ!9t/@cV&=ܵśER'Sg[gE'ߍb~pf3B˚4vLKWܖ"GOcs^ ���B@Ǜ%*q,w)~ttt@k]C~GxV>RE~R$cxB<9dwec?#=7%~5`UQGix͵�2ͱgt|v\i/mjNȤn79K#[ގo;ms(||t/{:ot|ԍv܁p+ɺ},T^X?VfOUsfKn5 QT \L2]^Lɛ"v>[a%#arsg/]/BxM2tMJ,ua��A6vbRVEnp2tlj3V{+a26Ng I^C4 r$(|RLX,K\vwbkrxbl^y75~ك#8 Әξ!/@XYa%V;d2mnG;Q:$OӘGʰ\fpr^kļ4vqދI1;6or~NЩCOÂ}=[Qv_pBeǖoN"_$*<8|*"=m^KP΢!8n8[{,\Xڲ/Hoz&Nƽ\9 7㮼24 ̞Ljh\qBw}^?&u"t] Š {~SEi Vvc0,{Wd0vH2W'ɹ<nt+s-%aEXԐi+\; aۭBq؋K\X cz A QQo?rW+|C5+?ϟleI~^׵+X_;G/?5VCk_; _ǚ֮UߚuWڟ}7^f"/��E⦅\ZJe\rK:g"V917{50:>,G}OOQ`ߵ:ufy?a_`{iϻѾ^N;_sSmh9ICcC\6+ S螵AOUQ",6^{EUʃIzvL"%KgQxC<R?{t1R(_Kg4(2o E8L'z'gy/l)Д{zt~ںoiV1ar`RX)ٍ~ߍ.dk].~]c9]PƇ#] @$rq.vn9}1yPe ;c%"h$06IoxBQWsAwm12g*UeWkG E tB0$|e? јSǞt\P^ݎ57a77;ZrŠH((IC%3^5uN[r/p`F=n:\Y^iy1{~d.;,w_��5W,NaʁT.*w>U2DftxIן0f*)a@p<&Ht~Dfbsa޺=d9nVz#L3ّ+T U~uIΆaіFnSۑ͠627>eqw$>BJ^+ ;;%2% G wBar\[6HU-`MmeE] J@>l{hD8t{k|4̎{xdlwMmMi՚˃`Cɒ ae|poD&8K"38jU](v}ƎIDК# yGFNm@bRA3] h́oĎSYO2o울 <a%ˍ+mV;νRe/:O0qòT*:/Vlr^ܔ +���KBXy 8lM +uwB68::pY%j +mL9%G?$Q}aEʐ-4Dsf7*gJ q*opς� :~hMR*#,6Rex4ܖ+Yo䀛4⧬2n0Yދ3r{)+%:d|Q"qc\̗"_$[VYO._r kr2+{f\.@ (֞МUn3ܛm6Tae #\X>KXiz~1ᰳc3V&H$*b><G|j9 #<up@  |0 )t鵎RY[$<a%ˍR "+Ć~.k}I06uǨD[cyOlfRaO'& @X��@#E +^isS_XyA"3{>X99팕HPOb7{\qڑFu S2gCT+-7җ` Ll Dmo/>`ؙI x);nsB޴͞V++yceHLeJ/ya!/R0-7(J9^; +xSifr/=<d~@婮$ hc#*:8GDК!U=&hrOْY챲9:gT1b۬jϬ V-i23KB,?{Tsﻻumk#ꮫR:HH&+bCD[BH$#$Tog;ܹÝOy.QZx+m}1V^hF%Wap{+0-aU]D-`q`z#пvwvvV>;Qs6ƵV$Yl3"GV(Cgv5DqeCzc۵Zw4֤<KY)L;۪2N Ht b+{{|)o%P�g�+M/^Ttq' ' hFH& ݎ8$%5u}AJSlClE[?Zf'5ե]%.X}e\b, >Uyo<Z4dBlneV ՜W44|ա-ۅ3ku5 |+C4l> �+cvXa`&gTr8!pf8|\u[JFr diU" j.-O=Xa tZSF@M@8Ǥ6+}*㊱"45J2(뱢y}1U3hxġcſN}+De44X@T^^`*9:xszVGl}nFV d1ũP?+] kۦ1i<iGQBh!EV8p$e|*qmMv6XX>�VZkq8?M-wW(s+1Gm4BJy?nG?w`Ʉh[ǾD9 oMha}Wϣ G\޵F(F+p_|ɕB`Hu>J"Mkw <9ƘABhYx]:sEٚ$oxy#+ `jbV8@Nڦm<"Xn>7Y86޷)M\+0 Bv;S�e$ %/\Iv^+ $l1FUs}-7 ZL.  `E]]]_6)},$5@4?��}u`7!q` `kSczI{m# cS �V<Xlk#֫ :Y@Pjv&` �V�XS �V�X` �V�X` �V�Xr`E@@@J �+��}nnbnfjf'5վn׾jaqSS-ܜfh^7>6ּjyLnyTf%54CȂMjy\l%&�+h:[rrK]�+@@@ׯLБ">H HJf ``@@@ߺD~c+uiwUZWySښ;wnTvs]Mۛ eJ<S{y/Ҟ͹Ƚ-³ )G+]V;ug6/ P \rqкk�X�V222F&H�V@ $@` VZ9iOrͩǼ!Ÿ.Ɋ%YsC:Z-U~U:#\>“Y~gՓk#=o(_=nu7rZwmӫ_/N\4+pq܀!rR2rr偲v9$[(S )Ґ �+ H  7VR9Oݟ͎[sK$̛W/ ^|=hյ5Nm;V c2+PZd1rCꊮV._,YV¼gȖʔH˗˕˕@-- R �+ H  зVRO?ÎW{GyKu[ug|Fr,zzX?My<is~]$}A>#,3%/NIಌ3sBfU -+ -;oQiŧʼOȗ> �V@ $@` o qu2oKVHUJ]{e1g\Է=mYS/<C Sʬi^Akhia9[V+o)\\":X!-H|~\\E'/(8-[#[)W!W%>ghªL<(FGKhh!dӹGQ,TɆfW_�}!1JAe`LJ!?w9 : DH?y\6g >YM%*3]uÚA0+ 0x8L' 1}3s#Gm[ �V@ $@ �V�Xyڻeo[yծ+KvE*44ᅰv.e ,0s뭭/^8qI'NYNr<?KN;*/K Y6Tl 32e2Uҕ~'*e+<enoiTdϢXby\i%klsǾP 0ndnmme@@;7KG/|>Js@N] L4-X.巪&YReaC/cMw:u>19y}_<t.s]kV9UIWL:xޒQ;�V@ $@` OV1Vpͫ+yC~R!9@F (#.U=~p3L1>y̖X0g3N<{R˧͚tB]U.~{vAY3rEe}e*O ,llNȎ<VJ`M~]rXçQT1=v^0NbkC!hc[ 8#\S*A/}5^d} HơX5qX[ҎMToxT8Zjx$`s) :r�RbeD8] s .oa"rTz i$B�Ĝu$k:[z)/~qGyA\Tn pA*O󆣨,MO0XL)S'Lv�qyNb)?g) -zjʒE٩m|Cg:뫉zm[c6hh|z:& 2%w6 }+1m:=e]*9j(=uw0k7ZocȧLb[UjD\Jc{WWGcƣpz|ӴⶎfgdR\L>T+]og[C81fgoe敶thxGV'AaTޱUyK fa0DUgy7>kGxS$KyleEX=WD=a}ÑXT#G:Wk F3 x�+qOr+#jS џfmeqp^½ J޳AzŔ_'Oy„I3*1yʬ ~XzɳgI,2]bҴ$,xe NVVɖUV:%X[btUMн%qو FM\p'z k .6Z57'԰Y5֞= mN.sNw4Qxpj!oDRsq=DL,q˹s+6+b>A pǛxO<cu 9.TOo;}nC ; x6]M}68-P}S5"w|q!\8R~Ī~&V y~Tv%�YI}\_SEҽ x u 9aN"c:|u3}nCG?5$ �=TmEw_4vԴ=1%w?yh25Z.962 X?:.me$$N|Es}7hh$bZay]NC5"🭕 Bᵵof5W{u `c w̓7/sauw'ufg<q'b4q'Y^tC#J)&7w~`PTQOOOgkfpk+|k{ڋ^_&ux:�wVRY[ݑn?TMvZl'ј;n\jU_Y?+͗\!7g)&L~0aʴˮ2yƴ3.ᇉa|0ץ ҃fɗ˗-9-[ _/[uZ+cإ@мBpm}"I4 as mZ 7տW^^^{Q=p-L~% ց@S'˚\um$y$gKȷ:#*pŸJntKdU1_t|r,<�;QT"L WӹUd?zTQ3|htH)|{~&8uZI2n}}ąUބ"&_8s�R�2fS9` ۺsΊʾmL>&.IqdP59kPSe73q̱wZ襍ȉGy[wWA^/&1) Tz+3Zp vw[.�1+Xܗx=<JH41ץM;L2O>#Wk;::[әIHѷVM:WP^UD 7 Ԭܒ2]L}Sj-M=s4N@@]2z%}]<H:*]~HqicgKB- SZwzX$| j7;C& oڜYw <`U$>)gGVg31ΰGLǃiho sU'2zV^4Ɠ"^]&\531Q)=V/yiX,@*4.ft4 o}�dt6d{RbswɅWc'ֳ u0-$rCY>]>ch{ >; yJPlU5vAƢ ޢwDu !p8U+XX 0eq;BdYd ce?Ɗ[@女Fo;w]KxF>߆x;׉տ]XЊ?"3?Nӄ&2e/Ϛ!=uʬ&LW ?Is%eAAriO/?O4@2@OJyvcLOOf}ÔG[NbFT9QPl7\ ;L@a)\]J_/ĕ-ZX hЮWF_Гk&FVV S/+<НSֹ}pj \#53"Eթ/IYɾnʋܷ(חA԰zg9c6U(cX)M#)|:#PI5x @ �V܌WZa2_ԹGU1C&s;*(X_M4L6zh0KA6޺y$+wj)k UjU4wPn}53�#K"/ &R@qCusYC͟qж}o+ϥE oǥ/SqRܭU[bP)..Iy(껋yT$n<XA:dj{4: oxTMV`EwŘŖlI#аyҐ.t�ئ@xg0D|9;.a$[_-ig^9;I�|*Vҹk:z\Cc5lh>ǍdU;aǍ\/Ǖ7&w?�G \_l޹! zy$|?xNƵv6yiR j[u֟3$-t2;{{+ߜ#I =+#l#ˇƱC#UߴGi B+Dk.I:؞jxgA2<_0ºꟊi֡3X}Urhq:BDYd+>R8 sjg\]YQq _᯽ilAM7LAo?7Cqi埴딤;Sn_d'N3{3'<??L0irSf̟2}/ߵuc-O \4wqa@�Y,_O6H=V*~HT~f*/8CmS!=JLPlۯsO5YoqJEUcA9sIฑ=G >>@\Q 7CKȵi4ݏ <I X]"”<vTI/-& t8qiյn5T2|bW!Qy`X(�R�2fm5/G?Q_Qi+&L0I틪Ani{ub#q=B)=]uG-htַuPz{;$t: So:9oiM `w V%\_[:t2>vT}B@Vut[:OKTUM}KvhQC o {րnշ6"c@wP=- ΩJO[4nn`6$E`6ophL΍Ӈ"\e~ `Ex4HZ"P Htjcg:EU?U|Ҥ}Y%A4C't]Դ9 '_ HDmz^WA㺎msy VXzv$�\S5#ISt`(D,s^ 5d1uݽ.mN}10DwAid$Ӏ:/oFfC3U p$ID` ¾GB.ؚjZN8  [ '\ݭِyXep<r$#�C_m(f@d&З�+ I<]z_Lm}+6nw-w/ۅ ��q]@?-ueϘ|T3l^㗟ϓJ2CBVnY3%JJaZ&xI饙(U1O2djdF걒vD8</7j Ŋ;Ӯ]0!{gtC+kC:j('䍹(*#tkCqc.,e@ޒ$7)CÃ>)10wp;z!b&w1լkc/Z%υ29awYx;L[TַB 8DË['o˫kxbzeWXU^:Hd>a [8&S�)�X˃v+f|1 y1?(B0XXx8~w{BBgm/斵wwg3JqyN]?%e SŸ#rԐSՑD|KD%ɹDff8tJSi Gÿ9>ϣhzGdVqPWoha%uw6Q&ow5[5N(�".nbwā([*![g"XaUY_ lG…DZ/2K::X%!Pg�H f[5o:Yy3t\-�Xjg1cD ó7/BOq6y[xeg*:F#X#>ݕF6?0B c K#, pHˣ|.h>[ laA PkbRb׌A\c+CQPN;6;=Qtn+NsMb!5WTY/ >Xd]Z`0x|(k*TGoWZXw�q@)PM >x(Fw߻܍<'o7fû|^Ϲ_k}e9u3J9uĉ?O藙rRdN!5yeiصO~2=hIΙA rr~� [FVzȵ73~L_25DF!:ho1kbGCT"}sG)<#@eFn1ӎ AD1HN;]cp@ծp pD©0 #h }-*RcCMP(3!=褆E+T 9|z˝P8֪$M8Zo|.k;o!y>s2 @ �VFӷ2ۘ, v&Gۺs =Vt+&}+cռ.wdbI >ӑ2J=&uۈ( >x퀾4a__Bwu(xg׼Kjp14?uzPUN'\gdy}k 3=,X {:dŻIřMU]OY V82/:},؞Znqiz:Izv{z,]OP2Zz{Xo%y�pKOB`Տӎ1/j+/ZR" H0SO[z_Dy݅Q9N+wapl{/ _a/Q�3DԒvC8sh۞ -k`'׎.bsϸyB6ٵx߆,`%1~v}C{ gp6ܷv|_}qk<^wN.mdze6Ζ\Pr,?O:li93WIgYvkn{y*=dIN�jj\f؎ֆ&tHM;VmSYWx68UZa\0Uc& oYѽn9n~{͛#$i||ifL!h-5CnN{q: I"<ns8Or8lH O>LԴ2f"D/lq@6䃊{g x ~^4f,hVw)~)t*߇ŷoK!{/�%DF]ꍞv&boтKnȹ !lz+t6Nlp^xsY*xYĵ_eq`e1Rq-?D IUaهock{H]B=X}N3دRɏ>FU#2{:ZaSViFP*&/[k_yDz@U6ulxʫ;jNsG{sޫXy>3Hx]$>5`IOH2)1V ⨡c8K^ʩN{ \мw!Ǘ6[u+3mzOUt}ߎ X{BwP++jJwADBHL]z~k[5)R�V ̴ͮWE=RGFt-*+f@t�`%d[jHTޑ| xa}?`}{AYmkrq{1 t_B",TӔ&N1[fu+ni´ ?:[.(>&3KJTs߸\ -l Mȁ}Ɏ{]|Xxh&/XE,)㊕c#׸|@(�XXQ ljǻ"yj~S[4l7VyxY0<B~V=ɶpR]NU)jmkF~FaJ` =*N3Hrچ _՜W|ZPSa ݽ�C|kk,/ BN<מTeffyx)SB6 �oQšΎcS+T=޼5MVl07';3tȥ@+!ƐOD`R|єpY˷|^.ώp|o{ͯl`YRE➧5kg$^2*rH`壩+}ף0@O'}0m47[Gb=VAc;uw8/hMv6XX>C05c8_t(`I 8{�+ j(F!qui<iGQB-Ax<Xa TY]FFr-++f@\�`ΊVG}Sdmɚq%6۰re&+9E)K6tnRr\a[Ȃ]=+({5$͟4'O. ϥۦ2w¤i?O9S%YɺkVe=P _ W 5lWsV8h#_ =ꙗ-[?ef~oH3))**�u*J'L�$>V2tIk��+ߡ,qo˻vq k+uim%oIݚϹ%3D=껲OέRO_nµW&ze&N?s̼+i)>YinFܶy~4o2E9E?M>ugOe<eJ}֥YSxN$xAYvW+@@@�|sy;h@;4˷YM@`hHpRNv�: ζsnH4\h>|yXkS#Xott˶NX<y~㤙?Nu4)YKRJK'OuLɅr'L9u)sgI/Z,##>] g勃)ji`/Z[+B@Sx�ͬkjnnioMDB6  cIM)JZswGMk$n̯9.F}]|ŵE.32IJ_U%ꗹ 0 S2o/&2gs;qsM2KRbͿ̜?qڌKg_^q,o~b͓U9KBs.LҐ54XeX"CR#Yb]([{RGeW[-2w] 3biBVԄ"V c0kmTD/$Ԟd稬4VGkGN H H d@@@�JK]Z17 %o1<V #R,jIn{߸s?M<SvڲS/?ϔ:S S~Of8a<aI˯R^&L)'|\7_Bi٪H +R-> 3dAz2Rcgyo 6"] ́9oS?MR`Ry`aW"09 d12ZS Or_̩ʩm5kX`<H  �+@@@@l)ގ2dk$I_NDYWELV^i [<e[Γ\:WjY d'\4&͚8eք&[4uԲEN6Kbāe+,!Pvr}lZ‚ Wvԏb)P9C-#5(FF½xYVZ:zږ Zzzz2D Ԛz(Q>V69FQ;+*k3CC&�+lV Z;HroסSlߔ[kQTsZ_oWGk]Bɪz&8˩.8us@ݼ&zVghk}@y{_Wil[bN5 H H ]zW\b_DKGKEK_,_" v!vJťoG6+>{ٮKvR-rlk6I.R@i:_v%`+6$)p_֢|4Baۇ] $<&/fVgT$`p93皣�RN.ɪ|ГJ<R^ 8`l`屷ףrh~耨~ Xꞩemフ4'j XҤRh^kW !Gu -Uha vEOaZ$ VT- Vbr&t#lj+gUT#9԰y>aVghk^AnҚG^Fu-h?Yjl]@ $@`XIgDϯ.ɉDJ#%9Q %W+صc-lw\@O@Y]n۔vyۆ?V:Waj2d,P\ϊ 0FV+޸_]y]rEg,Ƚ23؊lt@~##\`Yv_]E?4QR {0"%90RM1=χÂ8ZS ަƇ͍pm$[ ϋfmnn)=UUCF<-xa\[ܔffԆj^>cϤ5d$`5ZU߼Of4a3/7iaq?!N5  +y[ͮ*))IIIILLX`_`EIj#$FJ1#e"W 7?$G$#kXe]ҋvTk亝$YH-O{^rMw(6va> E;m(-,VȉX.: ?뛇 ^[[] ?WS5329hRP54XɈ <Q| 7 fJU^ ^ӟ_HyCËi" 4w*rNԹU]$ELsu2a"8YsKNF@DXIR;to$/XqYѝj8k�X` XidTdGK"kHEHEUdί4/Fu+^c4dQCMؽd#j%n%WĬ:K6QzNZvԽ MM&p&aGy ,Ƚ[1V8mC"j*T<B_wJq-BthϪz[fB 8` + E[$lB2ezQqw<VFe-US^3*YC9?ߍZ(d`faȥGI|"\}njqU3}^4:o/Z7iME<[] Ld]Dvu �V�XJ]Zٍ]p)V 4teh4|?RwsPs9dM];:\Oy-r͕>KJ}_.xH]XPWcq{T1k l[x&%pq^Bq|߆X.pA 8uI}3cNc<Уof@99q獴4utttM2 {f: =$2Y4fxRWaNz 9 o+}K{'gG Ŵ?VNǎZVe! YK",hZt՝V DxЍ,;CM::t-q%bK& a(pr᧣NR7;^+.;h �+@@@@@@��}`.֮j.XbEIA2eE(huO=};Km17s?aϖ֯XvyEy ku,IԢ5{0t gh:^$kp?.֫"Os6^wM\8BqBXwM!c �+@@@@@�� [.K2#HU\."W)wY%{F{蕻Y_S\WCw-YbE3%6̑l葆mαg?48~+ {ޖCVXqS~p+}]\$dAA,�V�X` opҊoV.].S!WpY \0B>תF>kE<oε)')bƕJ,mi*4tccEG3iv+1mN-K O Xfm7匳.,ύR<V�X` orRcvUK/H_yLI{ڱYioh{.R^pe6/߾rَwU UcZYt<.Uq*p,;ҝ^2p`|™/I}5ߥ%7.K,í}\1%hI%% v�eJ60x5;p7.A`kZ<R$ p 5Ge`בn`G 4@HXo:,�n;CTuw}w+r'8K7 0aEF"xĹ}k:堆EDۓ=wp2<m@u ȆV 13$XT@="|T ]~Q(+ !sU<#B+؜%ߥBTT!| eڨs+?[CU)!'᪝.DbT-o(R]>EO�`Vڸ+.VD. S[sBw}cM˷[^i]K[sגmۗlGPV"סnZx93M5m*eR}bsk1o=Ú6ClVąȗH0n ;Ԡ%AK., / V*ӳj;;X%Ȫz׾vTCs*�V/͝Ju`Hfg<q'b4q'Y^tC@sP9UZE 0ZP^493 Z^M]-վөC#a7v6yRgɱf8;EYƺ'ރu`eʋqԡ`幏.N5Ūh{&s:mx!wղoaK3Xk>$Q|\e VMU+>h8:Eɰ_T+z*]VNzrr/pd?8e|+Z]}mWUY}%;/M_A.wxScF.UvL5ZꎥT5=6"9B,JtylԀo]\Pzm�+@@@_s?t`%ŢdtY>]>kŌFa V:`x9z;3kC ē544<3c,C&.S{e&3c(StTzؐTp8[`6;ʊ4"tKbDTH>:XDuFpIJO{ _؊~" kZ]VyJEX›u}p@G=Cޭ)LU~)wlJ&ޏ; &j`Jnl/mC;貞o7@CQwgPuH駰&C"ܸxzH 92#<V+`MC#ܒK;ip59-w:{a'_f8`i:Ah22-84Z2jACmu1]Kߛl^c̅æid՘$7+C<}wx3? 0YPnjFjƱ(Fa(:Wy`R79װhl!#]-ʍR`bm2@MEqu}q&Y?.ahW/�VVD| pXwϺjq FEMB@ԥ\NF6buq:H*pVsN2OmE58mE"" v}oWvEդÕ$JS%ٮLh*)B庡Q#qgET\aK3.Ȗ˽ X dqŹ%ѻFVꏨԛ:dE2*@g]3c\& },ba} `:(D£V~ =k*;5>o68E/gۡl#ԙcdiHBvv=d;w*(0K #j‘x鮹ޞ'_ޞXoQVVahv\<V>Xɹ6=4VɆ6sH&  oOG{).i/-]r(AyCs uL1D߭=.$ŧBg*a8қ~ 1A@ؤQ,_.7 /[<wi]J烕~nu|j"h!;4Mm+b %O*X}oJ6+e$W^3*ᢐh2~I XXAd� Yon+D 5DQZID[+a;1>7IxMY&N)פa\^i /=\K|[G0F~ 6Q'+%L6"M|*Z^%,3J|^A2Kor10|Q\} G_WpUhQC7ڇe˗+{+"RS+]!y%נfrYUQT&. NE+_#[ZT47u7TPU6HF$$ZU#euMt  ԁ0r:xgE# LTJu4Ǯq2PmQ~vyEe0 2Ud B/-]T~nqQo- c+vbᰐL7Dv1J`H1tVE۩co4a ܼR ol$$s* z:&ISt`sV›`p`|f=x;SwLc)Fg`hz_Ve;`04Vݚ Y"p9Ie٘@?t`哂q.;kSumId@X] >k;]kfQ̽߻X,s~ %n Cn^ۉ+*DR#zBh%0{A@\av{vOs/4n@o4vw_o#{]{]m?t`E= J1ŀ <G =ڽ)1~`p8G~G}jN|И"6;28ݻS !yIaĆEBÊ 3 .w){͟nD{jYMyѥtZ/} g4[a4~mKe7T2B|#!k/,KUAg<D (S\]XF\їcU]x>..v v J;Iߩ[j=ICKQ֫6lĩ7iHFH("tnF zj`KߥuleWaZctXᘦ}얮)$8I.-ώP`ސ,Ÿ(]}A܂ܐšC]~t`eV'3 %KC8lM4DZ9oTIEbtci./1汹FѺw}5oj*Ts*_+Jaek= A!hAvmFh>[Jna A B� 8r"~0JCHx<toCTv#, pHˣ|lvɹ6PIyէOs|G ּpQ}/{h�Xw\LNc\ixWC+lҨ/~=;op,w9 .#axE( =Vf&"ʀU{@md`biM"TG%eBs|S!صģ**s=K`܀pEs}RyU~fXU~g;'C�G0CRҙ}N%'EANJCWcQ@ӇhAeXFZ1Rd qĜ6"1f1}?`nsazI:$M [/io;4 6MT֪\Qݢst+]m%꟥t߁3M2\=JюSu1'9p@c4$E,΍f^dEI0/IU_<'WEm- ٣+qNiZ΂u=tSmr"2Kc9b˘ݻ6C>RTp =i GL'Q+wapl{a=VHÃpyUQCTv滚_Dj4*VD6`|}5"ғX}~ߪ~tv<͕}Q3]F\ibz~> `"Xyc7lvC8|IC F;|ۭ7\&Diys c.*[aIޟց1VF`Om- ܷA'Ocd|+/]4a )}5׃.`9mAҴel~'*pEU!͡<x5î"U#[&WHF@y8BUkƗ0 0bUlqmbE=aw)EZw63u3[7SRD*!W!+QuH46I7LGqfՏԧ+]7rkP5?Owvz}�o7;g^ͻ.!Ry٪srpi%ɒ[�V`5@1T-p4 UppoνmQsz9[p@LgԖ& 1A{T]c}Y~֓ V(Ju5}"$Yl3"^~_l +{L|ۻޮt]߷CH2lh0@`w;hIy:ʊ3ū.l0UPV}@bR 1|J4#uI$>8$%5u}qy)Jl?-XnQ'5ե]%.X}Pfqr`b[3ѢN= Cwesww+O̯OXǟ]޵uw{]QW-*BBz(vQ "Ez)B& I@t]{~Μ̜yO=g ]=]eh|[6T21z9䵃0q(M@)-;V^BIh 6@[*@*)yVZ‘l9Z  s͐mr9V<Q`!-%(cŃa,=C+P08>gL.iURaƍ/,63b0Ȅ l:巓V$_B pG.I Ts#RU5vTUJ{5Oe+E=aQޔJ"z7Vk}r"I^(+g\m0 fiZI.뵚fN6XMlX:0ݷ,Uz;`]6٭3.Vw[1}=#{ ]kP|iAm܂KsQ.l<̢mg4/2�+yYCXV8--)_~ݑľ8ڀ+0UBD'Hlƛk=hI +��ʈQ_-Ns{bǟ9ymI_##3;{p/{s,+[C�Zo@g(Ѳʄa^)MTz^  eL=UhXϣDA0\ verZ%f8A{+Cڢ 6PvGgkeqJ%X .c2=[2]2I.&/9zt_O;# & v%aQ(s`ēዘ곾"zRչ2{'}(;V^֯4̰3)4 p hoXͬ QYD~!O*) eB{sO[Z8:~WTPH(E;SC<Me,&מ%�Ov a5b˅- # iLu3V6\۰X_j):GcCV JnF9[1qhcٸ O2zG)y*+˻VqDYS*RsцeQ8r%޽%,>Eq:mehi@Yahbge^Cq1q1eC/PhƘƈYgfVf>2J`xG0]<].6W#'za ڢGk0"~Ă3 Doxu X_Α}bvNzbW)qaJw(<hq +cw�@Xy��E⌧ 5� ��!+%'ȎvX?Aq9bon/1Jq2\,\K3^e`Y ٙA5Lw9] Qݵ?Owwx+nkS7is-LKڦu[oPo["WWFjwwOXXy�W_#Z` 3G\WW-q }Ep K,cR}»���V��߀Ί:7bzzP'� ��}AI10=+*<fظKsS3]JQKKK q'N'"B=*Bx 3oo{Pp38Ӿ;%Fkb^sȯ(qCң9nGU+mE.ê.lxQkXo;eKPM̘,ۣѷb-0M P0F#8KV�� ��# ="ӣK*�a��,3lz bE[H(ʺfZw!~C]-F٩N';G,J)~p3kOcEvMm'Y 9 VME%7\g<>鬎l*1nkigX��@X �������x_'p=HGcQfŘW˳;^t79=>:Z\ܔQxO//u;6g/AFmC彣!25U?ce5/KmKɿ[~}cCa'-,7]}\s?owUܯ%a���a����@X ���|PJq8阮;0QcP}ikfD%笇@9EkI;g.dTېh?]f~n\N^Dk$X;oliKv|Y1A5&KAn_(Z ��� �����+@X��HX)= BvBwǡ!;vޥ{}kΝn:;ڲyVMm9C__wF WM06eoG#R}]=~L s_#M{ڈu\X0%bAoc@ ��� �������C k''3?X[N[[L66qt(v֛F:&*WhXG ER Hk1XoL-t&„lφ͎^S^yY5iesҪUű5 "4K4k/iĨG.Q ��օP����@oﵰ40��7aqaeSPDP-<Vt +C)B_O(IPDt W<?VH% ˻Utuv=.~QawGt)>$BB鏋eݝu@X��@X���� a���>a=M��V�����n@X��@X��� ������ ��� �a���a+����� V����+�������� V����+������������@X��9aE(hp&uuuۄ/EQ$[2ŭj]?m,s*0@9fӕ�GbXviU{SY( o&0E xd翃nn�~~ yp8NVpt:A0D_X`,&\hҔcH>{CihA@C<ߌV 6 9qDg<鯋h੮"FЯD\Ptk-#Pd:74T+Gy!dOHO34`}:|P' 7��A +~o(\mCΝڅ{P']K'oE�ٜw1AkSMaiP.&&a+oۼa_Bgȩ;9E--%YXɡΙl3-K2&{J 1va[mnDλ)AY|T(170)U h;Nai!(K�9eC+o(gD#Gb4 >jN9;+ɉ9]})sbŠeT�DOUV i6~O+���?'4]*PX=-yH 8sW/ cP -504Nv]k%QYN!H/|$h->mbDg̫t"=,-L)򯯡]pZ3 S_TYQCSޥ�oUHB g[uǍC0. PF]پ MMs4a2-#oEXI<kDa0>t6R8F=_cqdQ@G#rj&2 'A̗We8"v#[玞bEWC/m vQ,}NUt"o.@خ9Mz;78!ykTh"<[!s@s:E ! 4&K.ZdZG(;PO{1冠ttǣ\a[1k.5qq% ]ne}Ia+L�a���BaE(l+NQdZIHh> Z 0ԉPT-T]W-h8N㐷pKfdA M̀ 5a{C}e",'=VhMx y5Ѥչ?azMQWh6T2}EhB@R@)tT򶅕ȑ˩j Սh#eor~ 8<qk ]xo7 5 9ZZJYTX4,C [{ kpP %şIq iZkιS +$oikh> M?f  t%1 Fd( VHbyKY% =Ђ*Fq 6C'ڋ;U7BXQp рk# + @XDH6I0T7ZNuYy[\a_Rʺ�+��� +96F^ [VJp1nT۫c6,hiAbXNs2fIIabOC `WZ[k`0tհwoc$ @.SF9 ܇_6WF8C(x$7y?H"8$mxِC$sˮٍ9| .%‘q m6R8WR.-WkU 5¯Vj[? ̽|oxښ;_""h-4%`08 F`4 +r7< W[ED0Hx] ce RӁSl[9.?k<|O#B_ 9VFQ" A6Yͳ!OUi5^8ӑ]=Ϊ!%-����Z3V+ГsQN?7'ygצ{-^oƟc p4~}4 :~y@<Igci 4H\}Z#h$Hl eҼ4*b˷VIʊT CO9ZbS{|N6R8׵XCaeu#VeekCfG6 (^4:+Wq1# &1^A`LŢIs( Ɂk%sy$^XVF,`R;ZQ(Pd] M/Kt5!lNՙV� o+'ʨ> zX䦇Ҡi>8\P"ݠ: zD %-0.%q�_%T8AhM\)qaJK44">\4!*fd^PDG#Δ75ŗHWzȻLqoF]抷Td efC‘$U2SQde/V޶2 vS> lp4v49/R) cEY_2VPMвla~s\^Xe8$ P ]}-ai˨K.˼\2d"ȄiĊ, "V{zy;aplˈ+K#Z\E" +�c<I%�� +~}0E9ݲ*jc,a"10,EZwԗ_mfaT#xᘢ)A&V`dei/61R\Hhd3iw{1m˪ Hbc00SQde)*:(#om(P}r"S*̽⡠lί`$aebT|@ k32JZ[ShhwT�!28M?$&UvC ZѫrӵpQ7 H1-N tCfDNnA{;rFƿw h}=(x^cZX GH/,`RI~- р>w6ʳ̱" 4\US4/F~iЗ<lP~`W �XXrx!|`^Z.6IDϟ?IOB׬ qpp@.A@og=#<0|$sV��sok(}u;(C1Y6H8IX;Dxh_'Rtx7`0X}Є :~77]T4oȴJٍ"tZak1nLu3V6\۰XoC0db|c;@ysa BUJg;匞V!@/Ak ɂN8aH47L8(K;A&a0$ Ozw_*l-o-'UvCωw0 c جaelR^iagRY;V^ 4B!`'nD S$<GLݪsN=kddfspv yq8<ϰrM~@e~%X .+0 K4tT49xg(ѲhK [\Y7�Š(-3ˀN4vA8id^3P2'z9눩MKuڊֆY݌At݂vߌwۂuIB}H߉{ |k:pޛuv=X{l;~W"�a��/)8ã��p~x/h猧V�aeʠh04%ſ.Z_l¥;l4c:o5 43a0%v-1w9f ʌ՜p?ְdӴ mrXzjP+g-f~ Vr\e9k{2̿Ycx)38$D��� KsִJށg9v:�� VȬedc|=�V)DRw÷?lZo?n]xǼ:/pܭֳs|]Y}+?ǫ-jLWgP30i딝{Y}iK?_x55_hoZnt\?$X��@XyT <h?/U� � oÿaG$pz4c "P%� _Xz-Z_tV/X Amys t==<gW鿸}mOV[~){`{xoՔ-nukf2ǫmgrg6ӵi;~fR}!"zށtuu*&g(KShbM D2#Q}n\5^C`MhMCsOZtP{N&.7}, %9S%ˏN omV>�V������ V���V䅕kaߩ.G,XE3O9_sjl]~ \N֚d|*/?z:Uس9?NӴj{V8cukOqhÜE?ҏ]!s^G #^'Z4VD?&Y` fV1-ݶ\1Oް{l>{$2iOOsYisFY68IMfTgsY2؋X� \�����V��RX<k͢;[_觝sf̝1c(훃x U/4̿F:M|Nь r[y|Jӏl'mv~s6)?{Lմ 5KE8yC CXiNES<79~S DG<Y%FXs- B 1Dǁ~{I犦8+h=O?mŊE<b%iVTq yCYhľ�'5(D+Q.V8f멇o' �+������a���2Bpo}*B 7| =S2{ -a>#|?A}k6o| 7Yz`N&]w, qQ[C 2[_|9Vt\&m}&׏y|s5Xq +y]]]=FZ)Jv8<yG=t'E,먄XkX#:Ɉ4L($2>VC Qfu*E\< 2/ًQz}Fېnk`qF2x:'yw$gHy Z{گ,]*` M(d2Ü{$:}@N)3���������@X* ѵ,7#.\xLM5U9+f1tXXuv繚E:VF'[W]Rwhs]a؈N|iR~\VXL]m=Eq&[ܦmrjyVIg.Fq"Tk/${DRGψ,GJѷ>? zeǾldPOtykggѓH-1 WQf: a{yeOچ!8IJsͤ}:$H_=C=Zѫ,ZnKo}!e[n|X O����|7ZX��mmmMMM555%%%wܙvFw E{%Пt߮ju Ps59kMjm2 EWb͛͢<5?!VIFq;"u~f6e w-.S~v㵶_bPZL.4n<Šh`hX "$NdpJ8A OQ5;< J_)Ql(`0ԳWYbi#lِơ2!<Umrlxr\$[9BXsO9hϥX5Et>*v'�V������ ����aPilUZZ О=_K:髵Ou3_p y Q'xD_v6ubˑx&n09),SyH\Na$3]nFI[\nvi3C5δ܏,\j2'#q+BCdy�-cwdbEp@Ot*I?YcExr8OreܓL@{]2,HlhLmVa`8i[ͽ;Yij.ڧF^p:ӽj ȋ@ 4"h#JOͥ,U.(K%O= x�@X�����+����JL ;]u_Ը,YiMh5 d/nɜn<{566'Ӽ%Aw=EL6{y[*۵& U<EiM.;L[cd-)k?[z1sbc}# \K{y8 Dh8ѣuOKv\MUwN6xlŨ,ʩo dxڎ ^X~LmVa5/<"*&:!."h)}Y1<<?4|jz%W.ut>/NYy#y'�V������ ����a奰r,"n|^v*os0dt]ϐt#-9{bޞkN׫5<ܼo}t<;$Vepov,g[&ok+e7YUbeL^CXrxel)o߼8BA-w>^ꌅG_ݱ4  !PC'pT ǰ%C@!nDf_͢SH8 08"o(1)]m1O;3d`wd+ Ba# 0]$q N0%GO<� ����������Ka+}U7XLm< -lu6l>?<dgbeRY\d\RQo!wݯ߬6-A_(z.mZvS4m'MֲjgͿXfzh| t0wsG7P>x�V������ ����aENXq F>ULhoEAp:_MÙ϶dPǖ:"2̹I Vcx/V]Pj{t v6L,Shr?VJXL^�aeB;gc%R3@�����V��朮ZU[}:n7ZfYcU`=5q <:+ haxRMיFM8Iv:IxSi;N_kZڎ|V&@@D�J6,?.M U&`p$ MG1K9$[-g`;݉CO(w;h?34ܴ\ !c}gyy&ZDz# ӕ<kzEp|s-:s(�@Ɍ='D/)GcQ(,y_D½<!gq}nVD !Zt~OCm=BQZv E,M H8#,<2G8}#C[791C=$ icq{X?zى*m|TI`C˚Y(vx_v>$wQÇ{O'�'>~>N.nn3԰v| ܼV ~6F<w7ki35sfeY=eӹᅰSvqe]n4Yq^^Suz8I[=&3y?t&ovI{P��+]4eA8) <L-xoG0o'a<ptۢ@eʋBXQQ-zY{a 91Gѽ7Pz[eT@_wS\81U^Xy-z{$2iOOsYisasa?ڼXV赮Q㺽t͹wS3"=op3v14`נ,>*Zjj+ŠrNNQcKKI5iy2 i<j<yl=A[ ڄ@_Xuu5G~9'un`7MgkQ1X19~o4Y VIEgӓx:B1bɅb۔;AgM>iۤ SLִ7i?zNC,��as|[|Dz a)TfS(qq% ]1ڝOwrX 5сަ�'2N| Bcd%_pBaYM<ƞX^j8St20B"2G +jDc7a ǬF�{+ƙkeΤ&wBS&+3}t~ʝd<%{jQ 7xxxG0~ye9sۣ+JIӞmmFailk!2DY=^EeKe9&f+XQq8ЄȔ?5'5(DVי[鳡냠~76[5CB^Wc m2dCvlUԛOTYv >7^Xy{7u4.xZ rci4y@9ִ9u%[ghy@vהJ`8}z@u -Uw8t4 Ca]0ZXI<kDa0>t8ebACC}οwЋL@ "EvI|49aCCC IXQTTG1%`pנsMZRQ wFae` oyzߨO8ծY-lf=h-\]81nbO01 6YE%ïq<kXM[4]v u돡WXLӰe7eNgY]W2aie2I`DzꋈL苓$3@OWCYH2cԇ@_ /<3rw"#�+PXPd9HtDzxDͻO"7ZNue8!xĈ-Isᘹ+$w@4Е4tN-Cs .:JVz`H:8 )~^!&US�#s0NeCd>z+<TcuFCbwX= WoU]ŝ#seoLBw7 th[< H{aEAo i=?-2$% \h+b�k}VϠGPJ+VTk<B[+ϻܮy ZZJYTX)^j];0^0g`#$4g&۬9ŃL N>VpGyYv uaELűOwZ(>c&,<?y4})pU lo36ߏJ(_w NZ(}EhB@R@Ʉ98JLownŠÉ3ʭl2#Y1b E7BE ly-+':q` _* 0& LS]K kUaFXx䰏x؏Vj׍\tof5q6m:Uعk_A^E /f#֛u2r%7}M,qz:SwsǩlrM.`|4MtNqn畿nu.N˫ﮞ"0 v/zca*nP2�}BØ֎iQYykS\ע<$'Q. �~J[퇕|~6 /{Gm(Fg4dz:`p̣AGU! S.?kBGǷ`0`{] cG<<ͷxXr0Mw_Ddm@G$b4@TfxuҔqک,1QE1B~ #xzwV: P9e]ɜseoIMs"~>75BX[Ô$ ,e yzx$øUѩXsޚ8+#Nc}à=@8:C7:zCO?$4kbg`ϣ�xښ]k~l `DSZEQubS::u%xC9*,$ZRg֐Lw:,iŠsFHZhM;UC#~=n-exNBe͒B] +RZH� NjKPhFUl3}$<EE}sj͕EXTTSPI]jlѵVxnBx0c!+c]~ B5ww} U+4%e*޹h1iN--.˵笶a1W)ɨɿN:i]JTG'mtVY$-ae "4Fn+x<q|;ʒ2e޼2&l16u2az 5 M,],,h3hk.XiGXFTG`g.JEH rP.GW!z6_ $(y~-ͱ`s})hÕf)VTkt#:0s2z*, DٕCt*HlTXp�2a3Z3QD׷Bqzn.)}I.<m> /t\ūHӧ͡0&vGX<зO~@YG/&melyG+3 :.{|6 9-Ӳi ǬFCZ i~7:P]w]/^sDٚX6fyh\oc;JDwe #zaEIz�m2a^ vc}xc9 ʛ$};v)gͽzXx݈qYl<MDžC@ ܓ7;{>R<T{R >*)\;l5tk⿽ š⻎Dsdф+-Ց4Cc 4vlEP%fK"q2V O9ZbS{|x#Vnٕy8)yilU"(,2'}7xXR"Nc(l1XyxPx`c8C'/F/9XɖLԺE^nD,/ ~U39o)qJ4L?״b'lnvg6:|n5m˔mӶx|Ziڎui~3eͮ7P|fu>ܒl`"drסP?iWu?'`ŒŢ'݃"1ƏE;$~*47h‰?rDwm P ,<ݮz\`chwI*V=PΊz'yh6g\#}וű랉Se1 +j?Ί|Raeb-�ʛ+\=z,$08e8~юPOu85 qbX_=%ݴ=}w/ ,z<QŗZCB;P"z$/c ǬFIZnSthq.W. teF;z{hr .uo6#zԘŠ4b,b%e9Vz7pTd2lH{>vOcn^5v K+_KzwBK ?+V>S-DUe[V lp4>]#<t 6cb `z BTi8 4Rs$fBt- !9pVAa +qVp08eJw JX 9og1z[[;h -5D}" eo\ ߛ9KT7Dzof$m)ڼO6rg`?|%W[,OY^4=ЯP\a:mͮ{HWX9FT-@;Cv\ge \)#d8dwy8ַ3݈U<ΏJ@g\ #e-dcYEsN2j&v~<ŠM a`yYMW|F+5"]yΆÞ5,y ]i +h�V^[X]Ni}V_C+d TK(k Dzx\�t]r,×<lP~`JGHtȌ -~"lMW`81;\2ޔL5tVv$# vO0uކ# o:8XM4uʅJs N?ZX]+B~MrU +}O24H+h\!y sm oSXn~5>cϱ"&сBuMQe 8)қa&QAۍu7[t gQYȻPxM`5v=z@ ; ]=]eh|Ự~E؆y:  tw;H4"Qϩ˷{{{ZxMek !_8M|"R7IoNK#q FCSc\`Y/tᠹĄh +0Ilk}4ptҶl9 n$W|d1A9>9~^P( u*m>pVAr+E=aU'a,=w&1x '`Oxz)0#8-l&l܅6.^mn&lYsT|z):vyZOX~nQttȧ[!+o n~v_fݽz}3q3yGg2NJ_g b!޻[OaG5CBa󒿩ԗO9'mɶ^ I6p=B)Ͱ?6^k,|RCq 5+zH^I>CQ 乐#-QXuq$4 74rsA!*, ߕ5 vZ6NJ"�ŠH10Ha Kxs62"#0 ouOj΋0xs|c834Z\#4xj H}qbNP&hv'}xq ^SOtc S-Nt2gV۳._#Vz%8&x* 5yP eLNJLATqqJ%X .c +=[2]2I=9^ -!zh1Oc6辊@LJ¢P='+eg})D袍:SܹL kb\:MrZQ_-n(2E\**נ|%JIAkш{+3k`0 hŰRRuؔmm;ws#AK<2`C <Tk[{q-t&ʆk=‹nh2A0vS2H`pÍCXQZeEN cH>fl烛cetOOՉ叚L_{#<%0A@ w<xgJЁ0/? ןa xZ?*$@9K{m]e]fO#b. `?iK4ְKz?b>6px2bNfM Z"r"#fצUT7I3L>ְ\},5063XEXY*wݑB%1Dt`cP h?T[I{RX=fEM`k(8#V/. -*.Nٰ^EEXQ^U4빯>g!-($@a$oh0sz-� {0+�1m4p!L&���0ݽ{/s?qhDm3u[\վtx EKvRcFBaJQ/n7! Hw;s 6S}|`~æ֋(ϭ]]ۚW񠸚{/VZ|ջVDxUaohLs+h됋nӇҷC͙V&t3ŶE_$۔f[c>k2dz`LkDX5M}E +r˾dgF7e&L $c>Q-(-y8zɹ~Eg1G*,`ٕ{w�SRaZ� � Ȭi/s'cA����9VX 6hg{eG:?fg]t֝EX`̓j hPc<Qv<mˌ<}Wb2K-;Zy-15, =:s̥q/^sˀ7a2�+� ��GzD"G=�a���ʠHT|p=e7_uv脳םhy^w`I<G3SOg"Ȟ"SZhb&+ͧ=W}bKگ6VFdԸ]-9Ysؔ/A^B:{+���+������a���>vo 6:Zfukiꘙw\ZZy?J,ryYp6ٰbє_<nwԽ Y͂Җ7K3JVT7V%ħwg�a���a����� ���8HTb3[uhM#6/[tv&mp9eyԊ-f\YLs/Y}[7a>u*!ݪ_XV\wa`ww߳+o+l*.o\J^£ox-�� �a����@X ���ʋB3s|* 2 6#!p Nсrb{,2s5s.7XAAVmjle>m7*HfOJmZamAiùuGI\D@x ��� ��������uOVΌK֒p:]c;ܶ4:%ZE[-5l-S6p?SgKL-ȻZ;VaMնmy$/ZeLVUdZ-.Q{ϦG>L˭,nje ��?IX ����|@|0 x^��: ~ ';iZ]0sU厳!;M%=lEm3mtrZ:N|n^+eg>| nv6P|yޮJu)?#+ϛKR&O+m_rfO~r"q^Nu)!BQL;nӘd3`0DS߀t:axB?k{HwqQOy}9zX62;q1Ws.P� �a����@X ���ŠHT`̽ >Z?}Egjٟf9n&L죷!BeJ̼U9 kNֶ b49mәZlyjC b~Hx ṼCݯ_6'y&~z6:卄@ߛ}pϮh,j}pG0oPOxU 0E }KqA sOay y߳�>>�+@X����V���2Btjy9nm\_iLY?[ztJDfbzw&]kv,S>dMұ~Dhz3 Mxco؝V'ip bQWf]]5gɬs48"&uŠ;{+ƙkeΤ&w=.r$`xסK݃"f<[Ac<U$4a1U��_#VRzPXVS*@2<BPvަ�'2NyOX,oȔ+˳G@?{F{ݻwgvfz이z{ݹ{gTA@BB�&`c l6N4`0`d%ƀ~rY ԣTթ*{ Kl8燰Z;=9v^9Glj{Oߟ)Xzfq7GE �+��H+[g]>wko ~m/_=_?.wS&0ߋ5߿7o7G 2~QK?Eǝ5^}7r"ʾ_ޯB[du`_$41[2dd7R O.;2.OFq/6len(|^)"F~&Q19o V^=g%TqB}Zw+&fCObY\c0 :P>8qmʬው7,Mѓl6`p|OQu:u3Ad�+@@@@@��€(o^z? ]`ўwد/|xno{~k~++ƛү*ɿkw_K^6/ߑ7Ͽد}ϒm/{o_^ 91VP| &.3ag' VPm pm-L8Uɕ'՞�[D4&6Wj00ovis3ڐWW`@z32-δ1srw8@-#^+#7n8crTr])!Gy'NqRd@@�� ЋV2}7e˾~to'_F6o~֯>;j{#_Jk~{goVv/Y^5\/?^⻯Wo|ėUi Z*N1YX5\`J83GUf3{fQ[+ dk�CK nP=N0c9EReVl>=`p<ir}s2ݥGz{xD(K4n#ٳRG{7lbv"t-2 �V�X`E+Y4O_(Q}?%Jچ?_ǽnj/w[-o _ _ʯ7eQMO?oeS\Wo!jUvz&.1#]t`e~`,^xD i{&}Vjs- !O) mmJ5.ىL`jDXndyPK9XdA| w:81y7/:gӇXaB+ElJkPd|52|B6 {Nk HA<1q*j")#7ӅpܝY,Zק`J!vȘ=h<jw1G#űM+I>4.F z&eRՉR٦Փi,Kd.^E㘘lXvgEwdsaI>k{<5<p4a{@O<4�^_E&Wu)!ԗ 9?rkSNQݯqHdy r zB^w& koո4ў�tƭU9O|?&V5{agdžW|"|+3bs~!S/':32}}C};_Uk~W/>->򿥅绯*f?I_#x J<4.!)wv`Wΐqs/Zl``W)}X&J؈??"XǛ}alwmh{1d`JI+#\@X,yҼVrh{p̂ђ@rѨ COVg`1+ um-:zv`X3VU^CAuH[wf47k4u@j.m^i%,A~| T}M<}]s|婑tloYEnOBsdЏƁ\+kQO_i9j'nPIOnH T� ze^"zvX}>eiD 8!838fk:)j逜Vmreh�XYeť닃eW'gg ,؝YZZ(+fr<&+'d}%o %y,tż]ZV@?aޠx w]WI7v| [6蟿῏ftnQN\S?y{7]`1?LO>IC(n;ߊoۿsw>+~WW~黯<zu`47q'#ڟ (#!XX1-OH*s[Wn{fGcbsilXn]KCc<xfH@*Ha㳊ҖX>ᛏ]M Vplχ dǎm8•.mOYf!^<\y@49+"z`%?$kSx^E$=A>2|) v]ǫDFzD+ǣYҤb Cr}=Ea+U0<b_\53r;'dSKSa3lMR\, c;i`ť^eA^hԌ9*7E)0 eWH R|8"OqOJB^*b7C51^ 1.]cF6h+% wvG5lWii'ǪjfU\4q~Rg+)DF~驌az(NXqrSؚj4x&rh?\;p˷S='*&q\v=G,s[5u�+�lU[Μv\U;2kd~$?̓|ف!+Ry$KD<Dm'7bFŤyPhxPsΦe+9$yeV(a,yOdtXXBX\)cx\%+Fc8Ֆد7l|އfelͷdEYw ~}OOwg'"[p3V&ϭ}>Mgww|w~xc7ߎ׻V�Xyr`Ša0NIz&Vtӻ>K4o?AsK@7r ۬6ODC2.!Xq >wPtVlQRZald{# 8z vMX$SdiQ<I6E6t T%^9vU8͓ŭj<Wf.!< NzB^(CX+3AW; I'KB 5dL1Tݻ,RsRɥ[pwY LȓXqP[_vFomvSuZQ8 Vn[uEE7FŻmz#9N �+Xק<&J)<ޜ)klA@SrghusRt^+|8;qm?B&6E,HFj�ID4,qVit+}x6-<t= '`뵓,ޒTX9auV;_VSrirVyAپq~o.}/F^}cp?F;/|9ɹf@=쟾_dc4?ϒ'}Ȼ';_AcAW.6� 7t29uHr9;ē&m?֬1Jucl+`aQQ'`%]twh h 2ޠd *n :lh CŸ14b ="8ꬪ|{!Qս#OKVeU^k 𢏓^l*bc> ޸rWH.q_뤚ѫ+Mɥ*pVX_ Q6 7$2[>D+aˎbuS}J<sàrOuSrP44/= �+Xjq,~vd5gXFf^6'+Y)>,M$q,X^5n +2VV Y_BB-sjrT+؆1 Z0@m}睵+ v*}1<-0|Io?pƟo~׃=:޾"j?7&_}qoK7{?Œ #~#7 6|c|cg_lR г+v})2lZ+8MuE+J,:p%+֝!sg,H:Xj`0bPm&>:_Dذ28|~D_M#:^N,l8 LI җː q%!/[W BQ/Di.0V> V-€f5D}3 Yg:fVi[o}; n=G`{uZXEx`l'MrrS}J<[Cu-1 ;>,)L&8lvcvM9MCku#(=ꋲUDrY}Ua3^M)2nP^`*uZ?p>jK Vȼ?C+nQpVvLQE8iCSwXl7҂~7 /s;zA*F}ꖳ Vwӏ>~^M?w9W?2wLާ\n&^1Xz`S0+w[3k+!gl}blG[Bc &#k`aP`%֔Ҩ1Ynvg&|,) pCmwx{ڬd"LOgVR\K-pdnD"wT{mC [> {iB,XAց=㫶p꤆2usxFL;FNzʐ +*yW)!/92P 51`śHyf`e%GמmgC`aL @X }m^+*lwK.,Xx0L՜;"<{L;7~O1 K3`!VWvk }pEt+V"4.MYS<VV7Bm~<++xq/N7&L?0όOMLOOMNOLM&hǵɱ~hĽ{Iv|d01٣ihkFtc=gg߿7yԃs&=| �V#Ω>-:G+D}{`dˠ:Kɕ t `E몪"{++} no9nX)AE-x>'v*bf+ 04\b2G $uu=`m~Wn8"-$Nvې& Cuzqrb ~slؗ`:!*9L&j~5[XXu:T3 8xXʒ씝k7)Q>UWj5JOzBܪާH8 ^eh�XY 1bMaa\{J1+x텽0 v]9X_sޤ5v, V0]!-59jt~ɯY53]iݪb:'<q'Xvϙ@{cnYWxVKV<x`@""K ӭO4$`qtv;@24k*wHPq = f!~xJXk`ESY)R"^LJoU+kZsF0 #Brkv1y< E0*Ȧ?HWi(Lwr1vۜv-T'A"~,GBɱΫaX#X1/Fbcع3V,F%`Xzt+l%^`2W>MtWsIvtSLz<(1o1lEp:US m u[k4^͑Fno bO=v]9XΈ\.W[9lSyPb5`R(idٴ�؆WvkŬ.VIs1m.EzXP7jn׼.KVC&%г+@.댏[^@@ПpT` ^\ Ъu S�d-j-cR%Žy �+��䒺JB>E-N K�X` �V�XM �V�X` �V�X` �V�Xz`Qp�� �+@@@@ H/ X+@@@/zZ{nCCCee%�+@@@�� �+@@@@�� �+�� �+@@@@_IRp�X` v7t;؂~ 6 }Ģ&^?>ޏAl1LJ !"[~˂ Ac0hE3nЎFƱ CY񁞞F�V�X`  jIo4ql1t&(KlNMbz|1 _LS&ӌ"VlYiXiCwk`` �V�XzqJ,d%$1&p AF L,< ,E`lH;ka| g Vx,F؈^K+=C{FE|q!mg9H,qy<YuWҾ5jIZ6CRJ<x6[ kx~ܜbOQX.4Wt:V]IVUixxO;^7;Μ'D8D2s\{/U|n{,qi`e2e&Hl&J H?d `{xPfbdT3K uڕ. خl7TMskԘlK ӷaUb5{ p2azT(, Lv͙QjY0>,U!S.iLiiV5��=[B}\Wd5u@?aޘ[r V<xV`i禌ۮ} \똱[%`J ^/1l )gl͐ J� zeV"'{g& N X1.=54=;;qa7WΖ*W]JFgƥ$}ej8rk}-Ֆ^/+\i`e\EuH[wflZudr=P:vl`Eukˍ43##-�<?`,5p]*&G?3G cJJkrZ) Vwc$AO>Y:F u0yq-�+@@@GW&Q61$|(NeRfq<UsTxJ@_dbnin8?=JCQ-"�Ն<%"ɶs̘�p=ggmʬvr K\T8,6sen _A |aiGiMku]<+e _,O0_vtk0\`rU6:<Cb bK%9ڥIloC!#qJѓaR ^4qVQ wv!) <UWvڽ%2vƍsN[nҊn+*LԖX}{d}yht>?y˷d%= Gk#+4o+<^i`eU*ZFl"\ B,;B5дm9IaB9_6`yױ%^9?iz*eP.K_XզF0c3MjՐC/\?E*@a =5Xd@ ):@ȶSzyӎiZC((S5jƜd2vnCAAZ[ѥqJ^V`G|%zʤL[p 5ɬ _f,,swyhY,dB#ǐW7:+ʍ; aqwj-;G #Ohrרl%#<OR!k N*-Lףӯ%u7ґbv828J8�+uH<@Ү2.\!S|E9ܒqi8S!?'M]8kkt41[2dd7ڴ#Agg"Fx6{ ]LUW M`{롥$dZ%fC#ǿ)klA@Srghu#6]]698I*-xPՆLM+%KsLbrQ9.ͪa&qz<go;ζX;k\J!UF㜡;Q_bYcAsxMZm=x+gZ)s,>6rN3mӝ Xqd]BΏv�Vֿ%AUXKugRen']J"Z7 Lr?$6^|s6.]d.5Tabޠ,@WVOֹaa%E*2‚{p`wmm }p׍7f Vd< CΓ%atN *M#(D>  vWo:XMf-CL;�+sT`HIY2 u+`e#ߟ-ߢ!~I4t՞]X S+6Ow\  m̄l&+ מ#]d&FFEDlʜkU/9zZ6p3hW^`Ÿ$XlOaF9LǷ̝3Җ[ic0Xq/lLxtg' VشcEitJ @= Rv갭]dZ%2V675 f^&lsV_698I*-x4R$J v*avD66gtZNJzv킎bTN;lX-\G qVXH$rYkVuԳoy�+red7(aX!Ĝpq)^�4pv\.oO-<i :rv *[^ vJtu}u C(zlԷ>[BrVoKm!r,~*W&ӄ]+D v: rVlaQŭA | .9@Ȣ{-YTesZ7Xf&`ֲUbEea VhۏZVL�+S% ʴk+ ᖲ@R*Fa1zWC*avi&FTU#pPRUM%ǣ(ņxJy8;Ȯ}gg=Q #L&Bۉa7brxlxL冱t/! cN_ aGzW<}Vnɍkύ_#4q$ڿ{5繭 DeƎ8"#-yQR! Oyv>b6ۮ$ fގ҂=s/6^>�{]{XɊ;X)XC5\`J*<>=`p<ir}ė؎q(vD$uN:szd7X͟%JZb1n(u̴fm#I<++9`K? c,YRp�'FZ]XC4}T]%:ub#v Izϛ_JpRazDs=yG{qV ؽQ6ަ7($ZI+-X^zZ\NV걂EאYŅ!jQ!}@u׏J;�++8qX.++,HN3 &EzDZm7"Pem#⽷&c9ƟꨆQ@%†]OW�xﻎ5iy0"a)2,臹VRq9U-Xl7jYXwLz<j}L[ʷ74co [ˏB.$pYt5ZnX+|GvEHȖi5^]MnϞC;^YўR ^)}W^ѕJ5 ,:} ( \nm䤵~w-/TO cSD0Ay(w]5ckύ<Ng!ؿS!p/ʞes;Y9IEb{r_ʌ$"řҨ`򰘚^3"]%r'}il}t ߄_�H^i OA,Xy>qL9;ƅSQTnLd.;+㗰p'NJxV V(#Y,GGFڒ,[h74FZ,Xqb[ȑNJKWNݜz:9ga6ײ2Ge[Rptͨ:f|8Ӟ)E8ϲ`X<Vn,;ʬK&SCt_rd[2iU~W?+KT?X:'2.Iy\GkJ"|cbcuxw428+Xr\Ul7\U4-�Ĭ+ ?rhF9\!} [6ŋb0 u=_b3^d YGr?c2 y:+"tW hZMq }|P:LYkVHӟ1:Xa6>6["\\+(&T|X�VN}F,QX100~`]G:KG#q@#8AO ?d4}x^QlV(G$Inv*8qr]z}n>n9~m]U18"65dI5H*OY$dL DD be0mv1>/�X[%+؛o{nr:>fwscwys+}иp`uۺqHLVGN*0UkL;my~a;o:J8}GF8턌VowW<G9+CUJ(2QFށ(]b!!9q�+؍ #,࣫cץRgf;UiݸVv[VFU-=Z䎖*<shjqqFج@v'G SsS7eɰΆ1oiK ^i`eʹ$(!n>Vgnd_.Wُ_F+ҤUU'7.Yr*X"UtwRe\J>n~7Ɇ}+@IV#.l\ΥT% ||(COr}j[L&Eq?+˂|5zPinPgHfhNL/sG5ZXsS3 KssS2=83ޒqnn~zah&,.lnmmMP;I4)wNv`pFඞg`B806p,;YgFm~;;I8d@sL e81 vXµ"Mk ØyW�k[6~<Mi򍎋7)XTƉLaܱjm .yXdTTTl|bV#�^�HǮ')X1-l!dT_#7qQcKv"w2X<SfO Fo>v5n#Q<+*Ha㳊Җ(tR6C1aStU6r8ICi;1�nXnȲug;W|{J'v?fٻcPb}VʶJ?- Zp=SD'bEgoI['j4n'ut*sǧVܭ". ÈPܚ]l767G|VVX?B.i5kR}P\(&rFmV,מB$TE+ VfՄc#-B,Yf2ynr0 CULYUp V,+cQ+ P(T_!hcSǏV_R|/{>VP|ԗWM5㚱iȄ0=>O4jȄvpl_7`a+`[&8j<r4dE*0 [Q뢬**뭢qQO" 1Tnv+jko(`i*r'QS!zu><.걗bimxAxi{m1u\JsdIlq aOnEFRyB*&[u�a?57֦;-~|B`h]{Ds=h`�za<V{k>ɑ!oL7023٧nWuM5׿QVW[QwVeKeen߮n}vmC斆wzzںꎡaHذV;0??M"Xi*$G F( -HW]yJRv[E[$d0b*"22@!$9c {rJn7RmӶwrXc29C y$ُ\]Jdˌ!]<m!&Kk׮~qc#0a;fi&_]<1 r:O[QAmL(* DbJ�`hev#^G�y �+_aOtw5E)dbD$bD<\wMxغ  7b,Wȃ\atw yD/|n[#9].x#ow#&5Oݹ�;`!w2>uWt0G\&!|ewbPL/ȹ8bdNkM<1 'b0 c2pqZIMESx7 j FY(5r-aǘG`es>n84"׍^FRb2bZiB]b#"<7�Xz:+wwygJ^d �+@@@�|u0g  y0ă9n(G .F9,l$`q!D$񅈄Ńhc.,DnXU&tw>x-sˑdC +�X`+ V rKݸ6b&KlF @'L�E&A^ lu  v.!K**%.G߹Sg$p1�⫦}il g^` P+ׯ 0k `o $IB`:!W,lEƀ K߱-1" r�XyѥY SUւ�` <X"X*}R%b+(, PH0[6,B.'P%z%B/0.u�� �+@@@@/X0Lu7R})tGfE, B0Vg٢&/]K"\!s|qdl7\`h O O+[@&xKn\%k l&^,A`Ub:a.E &fa6;LyYŃ"wR_=0_pru` oLӔ$EPc|ݸqJG129;Jn躻E.+} TM$x` �V�Xz>ʐtd2ܪ+q@ s!lly(p 6>,J]0!la3SQpZaSג=p?a8ulo2i w]+Z};ձfX\ݢml%oUִiVV Wv1 #h* �+@@@@�^{d^$GcӋ.zđM|&LLbУk- tMyyW,QғΖ 4LQxZJIR$ DD6,XQ%&*"c8=2XUȥ%G[ɡ�[ТS`Et8}KPz+7t+bW93V!xxGkJpK(x 9]`?g ϫ*fGiaG ծ(9IkP6}ꢶ>ʕ .n1՝v ʪK@@@@@��a oi*pP1.rVI_ pctB>C9<A ĺˏ+ɡmq wQ!W裮aξm&d3\+^^R,.p`1ZAw7n<yg֑Eq*.,%1 $XiJPaIL)y nx"P 8TӃWe+PϠAݸat>3B+aۇqn8+oE]?WIh/YiEmyt F[FpKVm70jAL++ �V�X` ' VLqI_lam,l^R??u!oCj rfчV! >ݲ7g"q=d1G{X"„Ԯ+2CBPc-=UC˭h?VKhHx^sjG]c0h"ܣE7 (qlNJ٤+`z$bVLbr%aohEm2=G‚T No$w`e% �+@@@@@�� +oW:[>/.ط[iQ1.L y\OtKs3+{�!@C;/_؛σs6^-䰸iI1Xюu>+m XLJsHTR6+Xh<xw186Uq\vJ0�v&NJ@װ))g_5qW wCq~:X<C8s쀕a%vJW zuM v$9{1VO�+�� +tS+ <%16,/g{uΚ.QGɅyMnv!XfSF8D mKÇ9ޛ$C|d"Dνxz&FiĻi cm^}w`'=Rz#lES(&p51wQ@ilEBΌ3i^~PXX&sv)!G% =x!aI0y=)ylZ%IQzUۦ*Nۋ`)4=@&pt uW(++* �VV VFj#x&*"z Z¢Lj:Q`0,D7 /b66xPfS+e/audv1,{g?O3?҅pܝ) zeUlXvgEwdsak7)Y�'>4e&Hl&J`x#0#R˄k{<}>%GC6=\O%E�~�^6xp[v6O̭1B}kPa8"OJvaan]L&D҇:ɵ?|'!_7U"L6)0򝉧os۸4m+=82-س}wfrdՔӨ.}n:9q3DG8n(D"lX8B\tl|I=1n)…[b#Q iwVtC*]$%v_ΧJ:7KNV-)ܤP(whl+xwz\{8g>Iefb`o :^`Sñt_XBBBfAВw $+r/ybNmrR)f$`OjlSmEm\B"%I^k7u'vG%&%&XYI�jUاGKUB>`;->'A1$Wݍ@u~[י7c. uOh>/jc:LHȓˢT}QϦ^c2a\&d`e-&=b%,oh]͕:KJSZtrަ 8!838fk:)P٢Wk5=mUjHz<5uPs=P6Vwk=W9l?07>[zf3 y:c6>|[Xi.T?5=KKK3�G:dtf̯SKnS5@BcsKOL3rj)n\tv}&XnibbĘp? 092.EnSBυG9<˰,X!;2<C42nXAW H?.T@�ؑŽk2lKBZ]L 1iٰ8D|ܙ"C)̫rS CPVzb꿝Fl[XK>b\bޑ,|K�qOMPqaf|C:Ԟ 8?)āʈTVvi;•bhFu|0!A~pB6պƌIr<*8W!oMvn8ʘ%;1TBX"dF͘qKSa3P+vBzxrf#XzErT/JdtK]o>QT˰h=azVEL,~qϪ0kS,_2Zg)L&GLx\n`:=3vn9M#:x˜|�Vƹ4$l Q/Ԏ3M%)[OPuH=@4dDq;՘&xzz&6OY_wqi'l[#Zz2:,,_!J͒;giZ #W3dk6}(eH=gg\J~>>"G7T[lɾP%2vߖߛsMc(aG@x\JmGНz/#X1`gL3-M5;RcsR f=Wv:kM; V0^wW}jr�+$nhHc¸{ 9 a !ൡ13tL +i BFתK.%!E>4|r_<,H&-LlD<YJ6^Oz]Yj}.Pmp k>[: 327ߓT8+Cm'>Y>z-)RTQ ] ކXwؽ =c&ɬ2.;qo]J"Z7 Lr?CMWs@e* z]Ld`^/'W!ɒwrGc7 U߃{kkXqtqDXGZEW +b28_ܼ63!OcAo~ASY++Ϩ+c{$@81!`6h.-l+)G$X9l+q\h0]'rBC+:͎o ވ{4sHƁ�FJD".}oig/asgf X+m<_76qi8S!L-Ɔ/6g[K]F;,9Εx@413^;ɔ-Fg(:<]Fl[ʹ41[2dd7R$Ow<@_K�[_kk|qƳ lT<wVXU' Xq2K2Lziݹо /9X婖[W:kM^Yp]O{Mu[35&2Ps aƒYrG XD[b7G uK쯾 g Vڻ J>ƌ5xf~!ៅ$۱i9n֌'a[|{^̩'LjEr~vJtylԟ L|LH3X<b)`vRtE˭(sWF.q_+f0K+W7\`¤ fLH!P[ì0rKYGe{m_f8%AU]!UU]j?Q3QkVZ V'U@ l$-np^KǕeXY>`rv *'ӥݘ̈́Q:fQQA)5$ ~wWꞴ$AzF s^4b/ &#dISI2nU3Ŋgڂf TVR`m>w{-ř6(5%H]+,f,U)!Gyʌ؆1͂yF=s_bᶎNqb3ԟ=ɂ/#<;,{I} &ܸlh~T7b[`6W]ʲyE`e�+ӭ-7 eyhnmYܹmy0n\6.ild,?[_}h~FxCq!H%6,!6<)~`wuY n\Xȅ4& g V DO4`~|y{ZB]Z} *&>+Hw}'5VaM"wwX,DX7`k ۊBe[<553>Ծވh5v ~<D˭(أـuD! [LZm7"PV,rR4vYEOp[ "Vǟ"+Bo?93QkVZ +_UxﻮVHP]랓h&>sr%7G5ZJ=Vt]K F!/> |@P?ڎ](B`gWҨ+uCɁXyߟd ూ=Vԧ`%gd0f084q>b#=<Xeɒ]+Lf9t߻`0<Л;G M9 g#TSzd7=ىX5{,4kzG鉸P_":_�Ua3vwLޟyޜ^7b[`6WTBWʲyEcLm=VE.Qvέ+]-Cݵ#uc MX딡ma״1a[i~q~ֹK'w۝tn\hs_ZRl\dh@BZ] GP(gֺQ>JO `  3+j?R7RmRDV%P% Vow{WmCnD"V{J s`qrZu+/#m.15l{ 9XYe,N1ep>)7]0YnzyHr%mOwR4v{0!Q$ T읇[S׀JE !B"MEbm-ZX{o Hw ,$4qw>3;d^Μ6VȠӿXѸQߣ3?_Ӿ&#Vh"-oϐɴ lf#Ւ<U'ݝbem_+-YOv$5ʳ9V;U-fgZƢf\Vȗ) bE1V_"Y\ )j] +),ju㈕Kd ӘG+))³Q*IQŸP wK<7F?=2<iFģ mA'ti Lj+Idf؍H@Ƨ;'rhYcEͤLꨵTmX{A'#V]I o)o^=<v`뙣÷<g.T=xқWjhyf;ERَ[A(_>ܨ{˿ܽaiNjNfYs3ғqQ’K0/-J;w|[ғO)&#0+��bE.kePRv].I'#d4=ɡ,Q(/|t5WT5`"'v)*g4Y!|Y&6<_zWqHhܚʱǣ@R?Y++qڃpcEdXV2b8u|C G\r 6~?5/Ј>ΥѲyI4GTtAɫ~6NChm|]?}m{:{6cfɈq>/|xOgk\(<+(hvSo;R'1sjhnÐHQҦW%H۷_klmi|xx�*1OZ/s,y%|2iC/m%kF=+NX۳F-5kD숂+RnC VFj+ηsJoFV%6:zĤ$ű(vFENo}j}e)ܸ-HǫF{JE߭~ Kc%A+G}7fmVϱR$`&eHaq@;_6Z4K$Z9?K9'eIXpA'+/87)׶bkzGn>ux]?\8}cU|'^wQs0VEfS*)U_ܼtġ;6mX|}e9ĸKݻ~.Jݰz wl)޽eMX+5!zp55rybe"y;TT Ava$DɦV_Bi � V+ $TFtbux,o.e F#NUo+I]S|P=b wHˮLJGk흢L1`y%T?[j,FIRSQuVW$t[~*'kJbe=h>{yITkd-/qJ˧$VF;Ua&NKm/϶s0YQLլ@7x-'YL&Ԑ}wJ^y/jkc3fo|MレXyw2zӤ-b%)N8he"l؅C<a wg ̢2ֶrr>N"Qi.3Xɥ'K tpUqMCfڬ/Mpn_Td7w4A&x᱅>mU߷.Oa"<Q \_[$w3kF+ l6;&rlwsCogQ=*WE sOX|NBɈJ)xe ~߽z :-Jg՘IY$7 #((=k[q>+)b!UR+tN2v{d%17NBhS+oIF"˃Wvl\ypƣe[ttߖ- xw<A>5JߠTv ?SU*: Ҋ /N eKV-}#;'_8orKݒ0c䵭riM(V0`U5ʷ0\=nQOr.gN^kl��?#VSe-tMLp'ܨ��{ X&`T Kb=sٻm]%id9sÅ3nT{׷[~l{6R!UW zxQ*&ƺEKSc"|Nan?/I["Z=ݷa<ffj-fyG͔J`Vrb\t]kkݽY6o84 d‹rG 㳯նpAgF]RǯXE1'k}ʈ*_.bziܗj늌Pl79�� |9?ҘGaZ>�X/r򹝛֮)M[%JlXl~uē{*yy~gΪ޿CoՊP :+B:4|#)0^RBLQA-kb#r2wo_nU^"fůoW*ryT 'v8[Vo<$?+dŖ|".m2# I8>_`)U^7hyly(#E&oy8v^:@/%$R9nXq_k[e㫣2O� VX,':^_-P.fr7>�� V�pAA| s٢eKsRrbғ ,|['ܿٵw^]ozy7}_(mJTlW(ϟ^]&ٶiufr|fdgW޺؈¼tiӳW ˔ʮyTJe-Hd%*V(ll$|s~*+i] {0{}1T$__(V^]V4-ѩO[2Gj+'5#M]7�b姈X���@X��ϋy6Or22RHXPaͲ#{K/9xTգ?߽Z͓^\l%SU7 VEN$ǒt6<@Yizr|ɪ[nTgtq4m=)::*V֏a{jڬ4Hl;&=~XP( eRzW4ֺI$VY^;[ Ċ}HT,i+@X���@X��OV,b˙3Rӓ㢄QP("kdUV8nO,JkmyO~kT JChRS*?">?_:{hS=vt)U*><@_WQ{Df|X\2XI!3/eGETr2<A)'o\ZIJ˹̊7+-ɔFQ@X���@X��Ojsv`^fr^VX$3So(.8ߏu|t5=k9՗5?kV*d \P* tT*?( 4tETŝǧܽuy[ׯ|RQNOMXy?m=3$6҆竣آ7&)VZ SCm seKysO"Gr(KK4@".7MR {nBlmxsMX���X�� ԣT~>o[frBfZb\T$.:35!/+m͊V^rs]8ҹݗK‘3N<t3;}#:|'<y�y<kCQiƒ[֯^,㢄qQ2voܷgڢϟZOw V:ZkeY +9Ш6+ЄCʷǤ.N)>Z8A Z+IY^vz6RH ۟h:JVm0 !ky}U@,4<nUi9�@LIW���05b~��0ۑdmmmMMM/_|72,Vtf릵vnٵtuׯ.YrիZzeκE䔬߰`ƕ۷ޱq߾S'=}ys7n}+]9w.?|xIzoll|%we g[Q?X�� ���� ��Xwk{G{ڍ-Cχ*/`@bY1ۃU I@@At%rE-OXN,'l ހ~yG+��@���� V@���ѮTb&+UW(0Q9ԤxTT+J{[@CAܞ e\|ɮ"c s(Gt .V="wX�� ����b ��+V/X HAV**'Jeb)ף VQ@تT)[G,wsDG � �� V����+ V���fXyф- -m:w;:%kyP@X幬\Z%oh!}!{Q#xюS)}ىu?Gtȑ] }K\B.{!��@���� V@���..�� V����+ V���fX������� V~("5D"MM$ey-rL8y{R;C1(T *pGߵ%߉<ƊNUgLeDK[_#=Q} V@���b ����bWnmMΞARs3GOpJ&vbECJ[^GG]v+Ϝbe;;{MNoi퓻䲶gf]J({0{4 ��������2+Jӛ3м7e3%V?ǤP /)Ͼ6!kں"#d2iod&Vnn/ 1tVhTq٥ RsciRfRUD(vX-9(b0Ј+[Xt%ɨlAuVgI*NXM#I[;zfvLbB0qT *k ,/?-8]תcZ߿@޻$(21ۖhgraTz'X������� V~"T64;#b%pF-z".mb쑄$oZ*7_yj/jKtݯly(#E&oyǚXxy6JՒSzf,mwoxE6IsɭhZVo<$?+dŖLi2|d7g(jg]R+s Vdqv*yR239 V���@�����D<:8)̔XG北ʲGuxz?/H@wLn(ͼpѺ췥RaȔ3&)V璩Qb<zF`ֺ3! OKb =zvNi(V(L.㲨 ~ U9{㋕%׫GLO%<(239I) V���@�����A]aWfPH?:X b34J{^ Q"o\B"QjX2m+ɐC1/ZJUO6b\26v})qL*#.mٹGQ *D4r̾96vXy x74M 9Rm2X)~�3شBxGɟION |Q�0~SX���@XY$2ᠳ!U$VΧ\zde,n}8Z_M4ĊM y鯷n/_Ԟ$Sy*N$sle\@>sAX9I"3kTUטXv~4_ 43@X( =\],U5rȤ"V&&')VV8; ��������#f5ˎӹZā|C G\r K,VZ SC#m biRS~3@mͯ*oZ@Gf:+?}HUhpu3r'ɖgeriQl+7M;J= V&yȯ}q{5!o9VxKɰmv$ӹsLLNMLN���b����@P-PO٩u'ƻVm@b,>`0CV^Pm13sN'FJR^M1TzXd\AɮZδԞ\,f1,+J}pg[ ɂYjeul~^ɁF9q"V;}wL ͋μoImRseI0:NuuɌ8!A]y<nꙜX b��� ����X �RF9� ����������Y? |��b���/A+��bbs q _6/('3_8/ |O'm;ĝw%x. X\GdYq@bGgŃ,4{dA \t^r]F������A���urZ38g.XLx!6fHWl`J14v6r;LH&HّhL6E Tsg#ędlDp p2 0E#1V@WAV֡,+��X���K ��+<'BWB3vz!Yi2w-0cbB1u$:FȣC!Rp$ŕbdldfhՂ?73B>S0v1 �������A���&/t']"" a,WO Wų[ĵqP T1 G'H4`# c@SRQw+x ]1cU5&vAAfAvD&��@����%b��`ֈR"GB5kƃecp{-h&t3/VLřխ"]VP]obhU|ʭ.u+H!6&4D�������gXK�lG_iNJ AD]fGs vYbͷ04ϴr[\*T3'3ƪ �S;s�3lAŊ!.Vpp. dKSIE(:7;9àݧn (KPB'˞&q뭵.?81:J{)#}|P&?ipZ9ZV � ���@X��b麐c<Cm1M= t g ̙lD2v: m);M탌탌6~#KE,>[} -}̸#VKBD"NJ$bĭOPwzʝ}ظ'MՅm(q==ͯo%27{CŽ.ys8nk$3X� ���@X��b% b҇]bjm,Hٝn0uIj&v~RA* ]cױ?6~ƸR̰SN<}Br6_H$iOz5wšD܏i~|aUvrF"^deݳl-ƽ' xl Dg/{�I�7q.(>P{R0UȟcGi<n%)|FE`a8k ~'� V����b ��+41+t ]5w-@U,=ئ4cWC>H4p22Ԣ* kl0bo|-mL,} -} ,}} jzאO_~J"Dݭexʞn -keɶ)W_^Z*NޣǷ.@ʜNrek=~pYXU[vn;zT/Soiۣzo%xwDS/ t@*|<{FV~׶^[=8OD^�?����+ V���X u\1,C=Xly 3WytRM](&6zǪ 78R 5" �+G+?#v<u|b:BVA]+gl j^>l_U(>=c:ě֮.Y |{` `?r^ yk{ODK/'ׅKig5qTW+?=[Q+;cB[U5];^mՃr=q>&����X��} %;хbL6Q㽐Dy E\kw;{؍n,n4SfU 1ok<b`V E5GMyA+h߈5Qʛ]b<P;+4+TVBg>xG] i1H/C `יk!x d_5nHvlLM7]dFBҮ8 y[rYލ ;vʨzp:2BcX~����+���W C} w+̋B1uL )N$c}!Xߙ4@J}-F#*=W<e8V 7i㋕802M4̉Ԅ<9I9e J`{* VA^z깘u]K+}5"wJGq<sY/jEtʆ#TRѶ^[={cX~����H<L+@[v0C1E5[o3W6|zֆ22,.ҷ5QN휥20_g&ؑ@|X`:cXR}.V!d@ 9V 4]mC}C0Zp"9F@d#??+ {\bEV, "Vy&9LL&+p~{ VӧxIɮCN/۾1],؇%dG<tOxwk,+ иǣ^ҸQ;Iqik+ry/}³hO- izX.ȂJ]X���XĊKU#mL;|fppɾ5 Colo;zZqѧ5[T;gXnyŮd -kprq T}줣~lbC'ӭYtLlkw#bllM L1t85D#l& t U|ӱ3e :VѰ"Y8ꄳ t7\(s($O-:oidΉKų8'HC(ܰK|[bLRьXXvvXӬ-c_ҸGusDpq"88|uۘchܒG>׏Sz>sku.@X���@\b%H v{Da (z*7-%!6ɾ(>Ig6oz S /Rh/ө44zR[e'EGY{HӘ܋78٣diLb #""RV>ë*y~cERަ>bd74I2vN+VT]uz}6%sL6WX7,g{c~l>l(JΩq in?7os޻܌XQj#ik燼3%VH1=ȱ}4tȏ؃m'tp"[ y KtX68șlbd,K|@w+V<XQŪ*zfxڄbe6e2u3{F� ���� >S#E i;N戕Qr&XƖv -__{Mr!#Svՠ#-X3M[B?-C9ͽ:KڍB<?K*{+7{^yu;V(5EDEZ?)/ WTJo:t7 s/LOhh*be\ێZ#d&nTu՗Dťq\QI)S!}q ;zX]^%+VϔX!c<%+jhؓgafB5txl1fhF?=' >_!>�˴g[F"S,TnEU@WC?XA??;m�b����skןW7HKXԴgV|^N˞5IAdܖWxy=]Wǻtʚ)C_x}c{˫'~NCvIjJT郼IOex[zU.<tWLUŔvN+V(>¦27=HdFxMFoș1X>_@#}K0V|mz~K<c+糌x6xO?<W|<؉oD2;X8YXdpjdbR j drb2?46C&h� ����O=+Pl7f nUcR}HvJ@ (Q+6ĈJ^Ή^ Wt툪QeUbFޢ}ڲmbESU$-B 6];8 2gXx|:>~M\*3IH&4Q73d&9%+VϔX JE 9Vdc[dǰXĵa%F8t6.`C`-Dc}|2 l> ] d3|e+jnXLpGX詹T'c��+ V����+ V&@8Y2bE7+̹9sBaݮ|2J%Vj73C^M嗼sMRX+U+5G'+HϟL}h|$+be9<O"3;FlVXQ"4bLXIeQO`(<'z ~RH'4E|%+VVϔXY`YgZ3$'r̋gJ5q6p!. ^5L1t"3.: l@:x|e`cEAQz^=g/Ȃ,}t}FF, �� V����2u}g=jVV]bi|./5MRH/uL Ç{uNbRUbe_J#i>p锂'I o]:t_\RKcQ쌊 R׶xnRhKzߪ|j* rm䝗 )?6q65!g4[[(GrK{ۓ$rv"~r/8bE{=?%)A]J"g,g:S mtz c#Q߉dH4t֛4vZα @gVӵ з D#VHO\kgoc],8EkKVpbcc,>JUθبCt)+N!ZtH$~cq(X,>O[Sz(~[M ������=oyVR(A"ue_-g$S脢҃Zk{"#3.xf׈BS/ןNE*BN>,Hb09hܼMWplvLn8U ߷.Oa2,~Tº=9j3vNK({;& JO9F_w^n%K"b$yo-be9 &#*Aۗ*x MC B-64#7<ȉl`kh`嫃hN$?CCۀalQli+_] o]3/d1k7ׂ0k33G[[K_uݠ1%S-NdjϪoowz]ŊieOͻ}[i9��b����@�ߝ{8?20[ =;Εfh4gQ'Ϛj(&0͝nJ5E�X|> T9aSa.Z #k_#Ko} o]stcckgc?39^:V>֞^a/V>֯~˟KM-'YYYv+:)LErwvoLINlj7ƽGӝiq1*1/-M=߾9/1Vl$8bޢX~Yj*DqtZ.i@Koܘ 2[z~+v"%_ݘK]} mH JVX*1gyzDD(IH[Y)�+�����bJ;hLOe|F8' VX2}-YIo':X䎥\r81MFvAzx[k?teleC,PE.do`E@YKVť.^iߊ {߰;!}|ڝ٬X_8(1/,q`ۑD|GgļS*nУS(:Dbyp 'pbE暮O8ت^]RZq6:VȂR=}(VH$ұ V7 YwcS6~ YʢpEI=dSRѷUD'R+f[Pkb=<͍Q;/k'C'w�� ����X"CrX!EaO+O # YtsPrwM4iJ3GჃ<XDc`#l|:J!aӳ 075 0DXꡓ({ٖfGN/;pQ?nڼ9)baL6SFK >|fۄ9Vj.\ NJNr*F]nߖ8+++%v^V/Xp 9#xu݊n.;zAUߤ|i+z ^pq)W k΋Lz+GQ }C"*~0z#6eu]"VFwoބbE4K&S$.�+�����b��`j!;ԁ(MJ5Yĵq; 8^6dc`�Ǒh'u"s*ck̬ʼnYEێ:tfg#<=!?l ZžOuY_=Y:_5pXQ5nᾣXrʉZb&.s<_nU)IV|aE4aiŊ1#j+%_y+,=+#;TmV 銨ڿuRO9 �X����+���?XfH1|~Bg_Bލf:iH`3H؟+ } # '1>[!Mgkolhm|-}t)Z !1?<2 iT;ߐɴd.ݴ.cIaeAWZA lm_)) XܭY{&ub}&+tg8fSP)hFPί{kpQ{cĊƨaw{y*�+�����b��`V/=aޝnJyF!e_ ؋g'tt8ȕf Ե׵MVVV:ȫzHْNZ,<u)#آG'+SǾzecVDlBJfuY-/1hͪK59/% jkE[xW'Hű?'"73цD1>bq(>62`MVƸի[Qt̔D/\9+~r2ؘ5ez�� ����X��bPk'trlF^<;JE\%1. S }9Tc|(Zb XenU,|~A^E o]K}ܪ`>/5Yѷ6gƒ'?'d9,� ����ʿ/V:���f92˗?q4JD t Ml8 pv.Xb<fHh?]:ok� = ]W]C,tE�(#*abgI0`X�� ����_ V���fXY3GN\4-" ,#"\C=C H~:$}g Ԋok77]'2b; iѷѳ"Xx5c7âz4eƐ@���b���/A+���Fq]iq^s+xy0GW<?!.)v?>:H10׆gCбյ&XX̵GY@VS`CKs_̼y`VzA͵E^5`L" �� V@���� V@���WĊ;,P8/l1 p`%xv6 96d3`EE{g} Oghg=);8E H zg{YW̽Â<̼~1/Ât`+��X���K ��+xO3yeDp(L j`_ ԉdL6vZ; msumslzS`C�=;?=k?4D.�ϱɔ_fsͽͼ~Qm1�ߔ/^ܵyddK+����+���X'H1t/;1ȇJ8-`,`[y](Av~@Y4[Ķt0׳u 4tԳw% +F [?]_kdѱյc3M=̼g3tÌ8b`/Y̕ +�~ߔg"?+_���X��JD6#(-(j>75&t fxlɾ/7<+飏<S =;?] 7V !=l<g.t|Yy _,~cǘ O} � ����b+/*DžS$W*5 ߇áox~z5$LšƮoz]JcgL1+y/k=�d*#Z nA|X!,"ŠS)#$CM YIE\E!VXw"қgB2r0t!9εw `9YW.D-6(!4h{R@˾W̽ѡ@g^EOf(Xq$f2\~uJ���b����@b.*ҽ7naP`Ik%Vn9y ʿ%V$+xkӻӛ%dZx}|2M>3mv]= JHr#~QP 5փ-E2 =Cl](n)HOϝjN5r!;8]2s FG�Q v~ < nU@xdQEfgŒ'/Vz:/R1oe_rQbE��X����+?X) c&~:꿫K#0>Zmpj늌Pߺiod׆SxלHz[Xt%ɨliRsciRfR+qG7d/ Ko==PA$sZwou\'NXM2//?-8]תcZ߿@޻$(21ۖ+܁Q V JQY6-n|9!ևgˆXBuP3LN馾|[;؝jF1гus%#O@�<zE)Od``닔uA@ lfXٖV]vJ_ -O}CĊ ������� V~4"֐HǶ'FtV|z7Ip#?x(5Zp_9mLx|utX J}Gg&)rLozu_ղ塌K%V5@ێ beLS-E.0!xI&oVɊ-:Zl :XaEaL+k+/d@mbE|?X$= YVȝ`҃i,VthhЅ?nF1.`:S|uQL1,aY|+zv+,\K4S)ח-MO`QWތXѶ�� V�����ʏ&VMwD"3lfx'5h+kGCe%a $fk*mG"3T! ʲGuxzH=gz-FqqG VtP\eQ=F.V:|!*УUW6;킎#V\VB>|yXtL&V)haJO`2f,T1P˷G3O7v&;SAvNv=Tu б%̵&ӱճ!łVd+VsT >DHGwbGΉ'{XѸ�� V�����ʏ&VdmDbFśa ϑն|ʱ.%$Uz*_hH UuTVj='8 и#+SwB: Mjg~j=o-a~k㈕_/JV]Qbew6`LP ]xQTÅdJ[F6d[//`XQ=ȫŶr# :vܪڻ lѩ1AhZ][|cReXi|uq) x~jN+6��� ����XsUb=O_M4N @rL"q8 &V@L/RV=bEuµ]D&@P?^ 9dM+ӾjgJbNH|rCd%~?[)\GO3Y@7w]IJX4E4@[S-,bEyDXzvCG1ϵNzܰ 6|VR b٢1Cm��������iLaV:7; )b8cMhjֆ7/ܜXA)戊W7#ȫ~3*NJ\(<+(X�mbe_8+3&+h>ClL.mx:-Z{c vA$ۓ !˱[򨶵CvaG21ʴ ŊzPO(VP;b%zdy)ڍ˷r&xxq}x^l+ C@} y0�=[|s 0%uA6#̵#xzYm}GG5w+#0)��7%����AhB.=YZƦ茸7޶|N6O!ky}U`0qJ˧%V:ڛm)H籐jXQL U_O,NK/;@ZmGnyJGk흢L1zjOȭ\Y'f@]r2#Nf%yWF0OBLXZ JP[)"MͣI!)^˅,+7 86adloF:#ͧu%8 + G4V[Ў`ghgm`gKUT &Vt9d+��X���K �rl+9 O;bݽd# y3))ʙkha=bhd`N6F x;\[]<k[__<Je8NJW b��+����| X�++`>ċmIa `{湓M ^Ss/Q)!;]?yds`#d[/th`c< \+��X���K �XfX<qC$,+O'ӂ=ϓajf4^H3G4^@58#{-݉FDc'?=G_�a/h;_}" A-̱F4:z_++��X���K ��+ /RGÒ(Q̈4 %(r19"*LFgDKBcdfx*-v ]I')drP^B0/!' K"RK$ GqB|/>8TLD| eL+��X���K ��+A��+����| X��b��� ����X��+��oJ+����| b.��@���)O����_ V���& �� ����_ V��� ��7%����A���LM�� ����b ������+�����b��� ��������߯��X�� V�����ʏ)V8Q *3qU'(k_ť<MbR jTO_"m~oUm3W6|PfO_:V(]oeGGTfLJU ~&jy ��@X���@XAQoXnƧӮj^¤n'ş^. O|S}T$}.}oӊFN?)V u+v%Sh]]9i .JhO%V��X���@X>PH+R> #mϠϾU9L&+,[p74A]ރ?7ose\zSi) o8byך[e'EGV]>+J-|${ʊszOkɾ(>Ig6C%|6c {4I&1)+)'j׌Syk)Qt =>{cs@EF~쑪Mzjv3']2];0^g3 E94 3%v{hkgb?Ç@��A=���X2voZI ?mw 2Wt*K 7c@Ct|KڍE<?K*WƎ[b5#t9ޕ"t+?o^׿,m授NU"VQګx2JWy̚C}{%<^z춊} {T>~`_3B?QXI޻~a^Lt BM "¡zrvϳP PyY1`;=g<.$̬pݽ7x;ɝ݉xzݓnO)j}a>B %Vw]zmĊ|ѾP *ߟB�X9~,m$'����G/VڟDQ;GVIO%HQ ȇ R}`$^b%De{ymFJKR';MaԉZݏ<,I!#?6鴇;{2kLX Ѽ;kyuU}:Ę+$usLAeʳGBkQ<7Փl>Sf!WDsF%VwʋՔӭAX�}+ׯ_HN+����]4[7A[~$h46mveU-*Kx{1 HiW`{-/_VҪbkTgZ-UxWT*D:F- ,K1͝RbB(da|ƉG]fui+yNkUxݕDIU%$V+6b*&и†k_GӃVYA#WD>6bE%Vw4\zmĊ|*V V@���b����@|bp+oQ-k>l8'^tRȒuRx,Lvr5b%IY"{Z zh+񧪱gt3 {YI*=i+agtFGiOEKМY]` } e+$ӽ֔>bg_{bEa4AD+b 7K*Z)[X�������򡊕moQ<E_yye4~UlþPFĶ[XcxMCR;y^ͳfQ3O7^?>>H~8G`zX_uhWGMW΢<n:EdbR7 #{b:nK i/;+2kl[ 5h6mx- X_H ˿M7U 7=G-]׆\9V40]]buWAXQ_N7A1BI$H~tif+zB$b<{8O Y sV[挴 u?Vʙu{(oƟؕYxI P|wH$P%0H^^$z5.;'2SLXv ����X')AfeF èd2J!8'Y$ MsZ+H楂�G4, CX{pFH�L H˩mSV V[Ģ}C~K?6d܎~"ƇQ)*ʍH>9Hef IYtļ.6Xyv }7fPJWϙriaꮂKMqLm(aQ!XlT#m𰰰#e5SNս5X1 3cx/HP%bORfK7[a(e~7E"x.'mӗoVTW9, yDz[§3oDpiA NkN8,;'A^TH%y?Jyyyqq1����GT+4GODݢV�.әH[Γ~n5rt1W9B:+5VH'{ laHÓH K\p#sM/B d+;6ݿE|/IN"HOpDmgR+v_3,;c?aa L-~8/vAqD!e\ z܃K_,pG3C$0:Vv U]W]9e2J.>4hԘ?R''%kDMfu% Cݍ2}0vNs;PKsl2b&ًJh,,1OK]ԡKI*F^ $щ+ ʡ ����X);Z�ҥX) ‹wahwx H9U YhN,bgd\~dOdMsCSd͍wW61B;Ѩ' FR|$kwcx�2C٨ xi(,Τ(،f#\J!=ڣHaO<kN.L H}gol3-߃˒W]E-y0e^(p oX�4?Duf5% Cݍ2ɞ}TEe,X$Ebtށ]Ñ>UWUvZO*/ eTQ\ tdS6U[ V } ����XNRd_ V+7wE`3wOP?kp-UЦw;FCHjjO >&WI`$ѴG+at]l]Rm #\|aIX'U8to|_O?::wh ySv-,J[.dqbenAH z^(}rLNZ]x3BP[;Zb pޮ`ٗ3k.Y! 7rf֔j8v=NOAK[NR~(;Z"TS5iQD؟tdhv~/Er@4o ����+��� VSr9ͮ"߈<NIE{#{>M <ޫJ,ԕm2VW\ IІC+XlS G�Yɋ^%!畓:+-)#sJ [@kCuA+eJ/h&O)O˥]Lg$ UCoG͈p}e.^&G@R~1I&)rf5I1^'ﴎ>Y8:DKS=hsiI n)9"7#s[w{ԔԈU D,���� V���@bXKreGn\)m^)@^])3'ԉ%D3r8vR8=l:y X{v>ڴUƎuCچ{4-g&Gz׵2t=Qh7MI}ز�  sЁQ~G)]A Dcs Gע{U?v`!:D7>#$T 5!h2˔uU]RVI'-),B8RVYCah3˟|;M|jyi|y"k4% 9N~[6b.K:RQ^x*OХhh$deN1{$Zb����@���XyOŊDTKnOKb?G.كɌ뫱oxҒ%g */;Sf֪/[2/\! \v :8'14/C* CIBŰO*lRyDmg<%`vO:DC؝cRP& g孃^<r�c|C)sVYqÚi\O NY6[;(5D+9YYYkZ) `։5oN*SGUgV_rn$'Xqk#(6cT G:,HC=4 0^tٳ(xVs E y/=H9],*+etz;Ey39Ig`(����X���ȅ$}HsH Ky"ǝ^eyRqX=¹LOJdsK'(>YG#ء36IAg%rr&&=9~ >p[y#jÉ<hhxzԼ–@\S%ҹci&#x,?zW;3|욟 %"'F Y�|.6mBiyzK T6eb\ߌswo_@#zP9a3(gPrn$ ۿ&2f/ #*y7+]KuLRsSaXl2rݼo',u a])+����Qz��X\[[[YYY\\|֭+W>}c+?Ζ0@ٚSE~8G6UǀC"vvyTJLi V����+ V���@XR]Xv·| $%^=nw:+7U���� ���+ VI] Ģ?Kj>/}7*.*@���� V@���X����������b �� V����� ��@Y~ˈD'V3™>sUՎ<.DcoG$/q d&riӦUȅe2}}2s_4TRfW;DT)<*\*+DC0]UDkT;�b����@X��+m箋]ʈ~kR/ɽ6.AK@AQv~3μW?WFn݇h߬XQy"*+DC0]Dwj@�����X-8/!FD 3z7iCΠ߮xb73whщEӼ2R)FkrsWwt6O(coKz9N57wPToU~ x8.x@] b+wAb(,,,))A"A="OZ!gEĜmXlah zE ?;?>ï׈3hj; ;"vtV@DTA⭛;3iF|y QBa˞>3VBl2]\3 F>LJ~KgaYDbQ%"=Tuo-WD,MqY%s8,дuwԔ>7YeՎs|CD0_ SN߯yj@�����Q fl(AזnN_NV(!kr:ԽX\&y.>~{o7fm7(Vwwk;LJ71ɟ<j.d2PwBId~{!-{HN߇%7t^o<`++/^D}ΝB$w#VvuFKoE(] b8'?x?Q*{Qj%uebBWV|A,Iu@GvJldoR0QW[u@t^Su#&1J+| +;=NȟJU`֟/BCf(y"".%m,+H}QS|a]Ty7CF:oëU#�b����@b%왒a 2=7Өސ/2F< %M N8%R\SlVL&ӣҲeBgW Q]+:̃˫Ӱ:RSrqNJ"QhśseP1 ^~w[B}+D|iEUyx3.`3r?fDE\]t:%,Ebbw'+ՙlD"|2_S= fx<)>~~~N_{(Ҍ/}Ψxꚹc|x(SRSW}=;=A!"E=Ab"ml}"#\vh{7ˡVX]9ڗbb:,-V$Uk(7t͙ VjJ8 b̌ӗ3W[g:Al٦GGEGr(a[+džd2[ъe:5%(~#+㙱';nc:""U 2d]KVcE!.J @^U#�b����@b\kƆjxs?g$V9w%]sC:y(Kʷ0v,p&'yd,Ҽ"NgK l o"F{ޖu#) t"MC;rW!g.R#t?}5-yoAv߅,C _-TLgP:ʫDX] UNEU‹K*E8 ~o[+ӛBXC<Hu8 Ea8ktɽw5APJU7HC;PXX]9ڗbb!UWWu"mH >t=<ym]սdgFD,/2 v~RKU![HL bE6IT2uBW)V<Hܨ_h僩)O[Jd.)1[%+ZϢ\!]Sv#s[R~XQYubtO!m.:�b����@|xbE\s+O<MV)zKb%\Q=)aWR<X4U^H*!xvɾ˪QX.ޅ'e]KΓ,9AWZ[vN|u t5ۃpLqH>s_/ScF=Uו\$ $H^.p=vHH%bʫEXSzdn~}bŃLg0t'ɗ 5C{x^*w V*+RT)VV]N]RQQ҂n+~bE"ޚ$\G-?AN^s=V_Ǯ{]5-<G#w J[ D\s*3$ X'y1A~o4fW#D1í~JmqY}C朕}HL?5!*ʉU,hT!o\Pъ%-B]=WjX����+X(sXEb&ּvOXͱR}%B<O rFevT)V*n/]]V]-~ ̼pH,;\U4ʻ{R"U 'ܬ'щب}!Y%gg~Thɫ:W^W0wߺ>ٓďJwYNJb߁X ^yixUjR]: * Vz1B,+fv@UӭAtW 1#S #AY 9 fJ\8ʹ\^p ^:rPN@Gܨ+g̡(/N$8>]7*5mo^@ Hi)-bwBl/n׏VXA'KZzO&l MKK[.]XdvWު-XQ|#wOl x\7}YNw����� VS"<|M)A-{>+H]ejQMxEGe H+%q%}ne03J 'y;Aazf&wbɐ >kE(EQ걢w8Hx B ) Cɞ]QJ̔+h"ߠ TSN]RXXX[dm� ����XG:TH+TIFcDvk+ VS֔=uveQ+3}I¬?Qٍ9Ti&Ţ{^x {vfE$$)RÁp ׇǓeㆺl#5 &]X¥XykʎtS)$WCjU'Vٸrݩΰ.[J֯>;;DŊx^~nd!\>DR;t%̞, ~i5C *XywbjF VY@���b����b)oF@&)y4k7W̎H$?v~-TڧόPTߤ;d3$E-ӦMfGb1#(8DOJ2Ndrh OfϬO~; LP {/+O^Xub%g!Wֳ4? Ob˞bEm< 䮫kZ #2rjqЩ.:1 ##7H+'v$0*/+߁ +GAX�� ����X �|(8� ��@�������@X�������b�@X�������b��c+f!?�� V@���� VފX��Y~ڵkW^bŊKΟ??== ¹;eO�� ����ʛ+���{H+B"\tc+WgVh>)XQ��+�����b �� V>vR]˃ȹ\>[T^xbXQ��+�����b �� V>vRSzdnyX+2���b����@X�� ݷ.!O$R].U 2�� V����� ��@X@"*?!֋,VTf��� ����X��~(Pn$9L/jP 5������� V@���b&-Pd (L{YyZ������� V@���b#+��X���X���b �� V����� ���+��X����+��� V@���b����@X��J7JSSӣF+��X���@X��`{4)�����X�����+�����b+Z榣+XG_HV.�X������� V+Z.brd9kwݮtiVmm}+���+�����b坊Ʀڪ.$ۿUU=8LC]tV{HccZ-@A]X������� VީXK+J\lb5,W~9p˩Qw|WnKPx73mL b<V=<{-[+xן21^`_6'CÑc)Wm%,esݍiڵh H6gZ,p[7oFK62���b����>lrԩځT+5Uu JބaC<h+ke!*s-h3r| ioж $L9 };ўʆɲu=+?dl['U_ KG;ڪYdS'V_iiii+ߚ6'V+ V���@�����neܸq.\Py2H:U٪`b݂.$Kb}0eWK;j4;c ѝx1LlL>uQR5Z7B j1c/:+ASo1ڏqجsfȑ#L^%6T #6t`1YK$Lq8\g}_lFZ5U.O驐3 (XQӖؽв hWC%.V5h#VljҎik;҉t#M"K!unBYs0BVvTkFN 6<|-T^G��wJ+����z(:`b.$X/i4bxI(Itfumf.s=aJ\ y>;n0$XϽZ_~}NR[|\%g6rH9測q>-J<qSVcNGxdomk(7k)%xLμY>(1USm& =;R(RFj-V+$.Lشi#Vl]ֿ{1r~r+hHJMuc2◔m ;Ŋkg-kiH4n!~ֶi&V6L V���b����̱V4[Lܽwj^rEՂd+,1^CrI.% ~44*yѭAYCuB5i/:~N:ǻSȿOǷdhk򨓆ʝC~2tb\utd9tqS4zm5b\YEX#_e [Y<F(3vnA͆IFcj<\ wwF[dv2+ʹ=t &=lpmU*r>k4RfCt,M׎uTvd3fcb��+ V����+nK]9r=V6%;1?d)q~C+j/u~԰i n<͋l[qOm%j[/nYCp5l+Rd"Y6 Y/iu: KQ.\I#E߮,GZ Pvɺ]F+*+w,V&ѿ$~1l<rwM5:Lh_Z^tcr*���@X���@GO… *Xz'_Z\UceH9V&Xe԰%#G*s9(ACժr>ok[K |k]֣UEL:?-4?_E{ϥT#cd(zRF~}!ƲNC&R/\X#v^erheLXQ[ GuB?mĊ9V$7)cIt|Q{/*$ZXA{ SzcEkb �� V@���� V>-c Ҫ`bbt<r1S>tG*4֕ }*мSO]9yE3Μ2sΔx1nvCU_-+sO\6NLK%*RRĮ}h/o!n(+jq&.6 8 mͷ1鞸ET}#1F>RS~XcEM/mҶ>@,M>' C\]LeWR%qX:'UJ8+;O5$Ss鰩L+/Y u0aoKtU4n];+oU|��X���CC+l}.$XA}p5<hYo9Sb4DoW {WwOO/H1rDkאո7nʉ]&mWȵʯ:?fGy>$7{Q:G4F#jlʊ]Z+d|*d[alL^} g)ilk|/\Lۃ\3FF#]c%ʓתWs%N[٭Z}6bɦX/c0iӸVVN$E΋bN ylx*+?PS>%gHHH6HO46`Z3'Lo6 ]7p5. &!1k@؁ȊKk,291|cc@ΡB: 9z X�� ����Xђ'y`ebEnvF cz=oݾ|`WyQ7κQG]rtF?Цi~h m۱#+Ln/ldLif5X>)?ifoϙi^zgNKƹ' ˔8Du&%&Mq! `+88tqXcp8G5 .:ȊS4hهqa8Pd]y ʜb��+����|~,be߁;vorAi+̛vC~CN>۬2sDzEstp'Z|Ѫ(.0' W7y ,^ȟZ-@);X=`4ebe >Q='>e�!gJ/T}d=|d_u$@ pqCȫ8@h{9R)R]zGG꠯:a::vVcc#.][3/ �� V����X]\4VYYy+L. ;}i&HA &cnj15ւ[Q=()|1B>X1vKq;9Yt&MǹMן놮 ou&&OG{HJ:8VE>=*Vz#K`2.mq0)=B;a[!&ump_`;v:��@����!n- :455Չ\z~ӅnM\�ʔ8:nRuqù&š#}\tcў).ȂKi_h[głTHJ_mBBېւ!=l=l{XpAF^y V������G!V���=CbpM1)7 홂sE'OEJ4&Vp8m9 1yJGl]mxpb+b2X*%}am7p ŸXiOËq "{kwКRc5qPÃ˝*z޺}iˋH\Y[5!!?L鳦� V����� ���=V&\{!t )1:L.1R5KSd/C$>gsDgE{8H؅H'ձJtȏu0Sx:AEߚk*1 E&ڊ)) E{?ڟzU-bP?xa lc0e-^EÇUwΆ=(Ʋ]MH,xiKUktkkRJkN2s^;|@��������+jX]8XtKL'0h=(](](HS)R (:}uuq?v:8Ȏ>g++VҾ*X ұʖ><]SVOs_gDmJ8 5OcEQñĘPA)YZb{Inx|KE$&Sޞ%{<IEutt/ZŸ+3XT7cad ^f&Dﴎ8MXܰ 4Hsx2$7P֨At1s.cF,Arҥ7fXAH&nh7���������bEP)hOsĊs.StPsDMJOaRb ӵڇCv=Btmq!80]k58>Ί Wǒcf%i#V.ųƿwAdqKݶ$?Tg0ҥeFt [oۼ&≤$b{a$b+bQqmstHQ_yKH6β`-OuMY e VJ)z ;oYdQ3.^@TÁ4'f"U@jft֛ȾW`A<Q?^ȦMX]p� V����� ���bs>>%[r4%kd/Q\#{:S}P]{!GCq芮}#9g#б:V<gu _6I tNa ΆcYrugĞX ){wHy AlbNb{DCO9J5؎>n:!U K~/bH;Аu^VY= a- ;DԟOZS=P6XԅpYurvu 50A:gȾ%Ҫ@K{R=H]:~oG<g.ZQbT<5`|@��������+ϸoq?ʹ}=pJ n=]F>NXѱ mZkg׵Οba ҳY,8 =dB9Gy,q>6A]g3g$g]n6馦rS b=+Zw:@j}^7 Y'127vԌc" {Ee/:[@Թo/bUuKXl\|6<=Rsv]"% ~砧XyxAV>~R|� ����X���Z0-r jR"MjJgnQM3{Sv :~2)5L!Sh/P=}ԳSSttmz,88 5vK ę \y%G:P{pFr`BVbk#m{)oAN,:{9D7!a{=B9} eWΕ^68!#/){( Ȋ'%Bg5HCx &fHHfs^O L/g\{sKEMzݕD[ BVUv蛚s T����� V���@+䄟H_ASt-I'}>9M89`R P)c@6Xώg/е pVA{Zpu9\]+:Gׄơ8@I[? (k1s-9Dy67fMN?~TŵVFؓ:LwxYoEp1?{XTxi\&`œdl?/Ԥ- "+p梕+W>z&MYQi+~[[UiOa>;eȲ( {fуREl߄4O[/=H9&q'w ˞\0o�+�����bE��Cgk׮]z+.]:W+?⍈Ӈx~-PQ9WIO' p :9Ss�ގގ}ž<=kno[~O THg.I3 357g6aw)Vr38{75@'xxq#Rw=9T^:JМƢ oOUcoNn {Q}ҳr+:DoN<>E~6C)A{ޮp^ƏHf6Qw #8݆?{T0 5`cqy޺mI2EN\A%Q.Cy("_&~X����+ � ^A%Od3y1Du ;IYI)dIi0)%?,ik׵ ii׷[ru=,-8l}�= ? ^33e1uRcX'Vkg#}eSվ'?kI[=?EKxm���������C{3J)=a%a 1n(!_,Uי?9x)8 8YsXScճ࠳Y Գbp&:Y,݉ķdv{%V2iӦͺ^}ЖK Znu4ZrX����+ V���V~ y濾uAN~΂NN bgei6555 tv@}@]5gk[Ztt&L`Md陰&Md5s`GbY#G?K؜zz� V����� ��@h+ ?)N=)\B9 }*nJ! 2I`lߩavϜxz];NO>=@}[v6>ց}-ٽ-z雳zZ"~z&}pcu{ <%(�������JNN{bgޟH�J8p�jbpJW3%+o'}[7n߸G;5{wdk�N' 85aA6l8Ol9}}ؽ-z-zYB^YzfLn ]w gLL"ǀX�� ���� VQ =�|Hbe1ICE}j$-<eKh?^_{s 5pj_8 n2jXv F},0pg_ׄ;o YzzY1̙,Yz tx:ntFSu={`:R<iėIxisXOr|҉_gsxyZwg`Mcnë>ƞ3XiӦ<g�=s)� ���� VQ =�|0bń73z?hwAϝFS#~&F %|{w.!a#CǙ75 5{-=]�ߒߚ&POϜӜ2@ה3aL1KÍ댡~茡~FWQ{MSD&~Z<H|<捈G^:ni/ MZ[*jN_{\Q �b����@X@� V+;~%I_ r|"qJȰ_MæE֧ij(Bgr dk:O? oe)5,>Lި^OÍE莡O3e=wObJK"¼d<iYmIfZj֥qa>79k& *o QK=OD1~<R z4 [o&.UV9GK™w$FsvXN 3f"O[orDЃ*>Ҏ0,T'y+ʻ+\HJ5!\PJ_%z\幠BdX@����!Q0Z:b1#zDNQe/%I]ѰKfYlgik .{zx>zi1Can77RyC)^ vE|3)+'>=z&52e撅Aqg&$L%x԰!s M_7ܯ8_:r?cmg̯_ˀf^L}fO3_ ݉ oŢ2a45D&ڋ꓉̘ ]66i5coEO䣳YEMOZid^A#^ZcY[AsHzÝ4vEl+A<N?wV&x"t1rxDXoj`'kE%n+HխzE Ċ?md=~7-ء+ +\sȔ;V xK<͹djD*beX@����!QI'i棧,74;w!V4DrrõoJf2!Rq!jeUˋ,=2t׏|؀b}񕖖['yCl�bE^þs~& 94}kbfg.^ّ3p d3r~3t ֑KwN܁6~}̙̞,~&_OS>~XX|j_oSo>f|zy1mJ9ѻ $ʪ�&bE^dݾ<6*:>>>"T̚9^~^`)β鼬5[Oh3y}aGz`yGCanA)QT4)X6=j<A آX_K&2B; ҵ?bEaw򕫴.//Ji8L]\WĖ V�+����|P|y9ٖEOuu0Xp"]j=a#c{eٚ%דy 9ΝzE,/V|1ͯ=93eSsKK˩ bL>uQR5,lokm<rh,eXTs6G9fupg5T #9Fl-T6H9=+}).@|[Sͨ;7*CB;pp2=|$Tn<Q3;4KΉޅ o3w[s~K{gv|ߧ֬Om>d7g1`Ԋ§c@K-wS31Dӿa06jTMvbE6gJk:w & G(V)V2wǭ>)K|&| c|c6+H,jU^sUM!"j#"|P L+~IȲ=j+mwmT!V|(Ġt+ +XY\Ɂ:Υv=� ���� VTbtHϯ^P^v帲hHJ,=g;"t?oc$Q_f$Jtfumc6W(3v7N^ʔCsJ辵gU*39yFQK[c5sqY9ܒN/湏Ċտ]�|b穂Aqࠣ{9߻~p}_)udaԚ;6|e'V~}Y2a}m?+A-} /lX|bߌ?/?d7aOoJƎ-k >>N^{o亊 ^OES|Vii�jĎ'>6nFP d]sx[y$)ŞaI>RWՄi VrA uEћ+`k&VO=A iRtM|:Ȟ^ԥXQ]|*}|L -:RsyܜKez(-ښ+�����>A+̓*sr>¨rw�dߠ]9GXi܆Siԝ54Q4r1E 4<Rۄ_62YsPsO&_y*d՗34^cPȡduS4z_46^}pWhy'�XgU_Sަ>='&&t'0Ї"M0c7`߄5S+O|;m|fԊ-k/ KgV/l`d= =+'iNheLQHxbI|�/$"6K yyR̹g_Q$V,1erLԭ__+ POX栞E'-=yoLHޕx!VP~DB9˷+r   5wOg/@Kx&vڴikpqMʻ+\HJ`;*7lZreaqse.\7 �b���A+J<)[QܝL,--'j݉6r9V&؏6;+H0?d)q~OllPs sqBa#\쭗*b om{|4wNJPN�>hϬك3'荧MzMDJOxX8Z?g>}'1>;7֬muda+[?szA>|Y0+tSO̼ym֖;sXqeux����� V>"k72j؏'XRԤJI$SU=^G'+ cB[*7dY~-pIw2UNTR1Y)#e=VcĊƫߖfuPN�>hb_ٟY1&&^hwjZ_si}&{zcI}' 4' 4 &R>ʆ5 >_X~nΟW6ϭ-韘RzO$11#6%5G9`׷f4X�� ����+V*w34V^t9A0}tqkqI9VZj斌 Ru"kcMUmjw@ %7_ *Ree4dhV2_?لږG6H~H-▶vƎ@OS4\9)2t-T ]�|b[KTS:1zO59γ>L 3!7O3{"i) ;ֳxb ^MzO ~n֌/c}msr/3RO/1 Jzc4!oADX�� ���� V+ӸVVN$@zRi#Gs]@m-9Lk3J+8<؞vLaSK}Azx$Dkא %5ڡ<8N̗HZQvM'}ٻU{/*]Mw4;iM&ݓB[ C! q! AQD6znsR+e*'ONHz>}|}F =O$vi۲˽ U~z@&)PT>]qwӃxu0zrt/r<lhd`ߗ/p/tRhA >^a 0L!4s8Üı&rLkDzGl[4!0!bcLL`* &St)�� X���_.*Z3pq=�`%adVrMa$`\?H8`~^f+x`1j Q P #Cq.4WC3aTCFC9ig#F.fb"(`n0YF7\ �����%G/p+4=M"ȶ0\sHi0Gd#u8]N jCA{{{Ⱥ{)~0Y7 !Brt<:ׄuṚ(6"(:VEcaXe(^ð/\4+��V��� +pQ =�+T}{(%i g8#00>:[h 5a9\`: rtT=DսD}d`z0IB"krTU^F҄q0:ecX>¨ņ V69Kϲbܳd� X`���+E5�[PxsÚs!Z P1" ֆb4!8MTvP><XUFQFcՑU$Y3(GBPQ "B*ꢨX1i8.h(zЛ!P'%G_= �+���`V�� VN:uر[d3Ɛ1Tc՘uij1tG(3at`TjUمQYtEL"*SΔGѦ(DMA9 Q*BP*4'51$u20mIB},O3I7be+v]\-V�� ���� +��V`%E5G3 l{>LbXB p&2[Qf*c3TDIPfyJVa$V-"?F)TxUx2,PEH<%FS4ùD! +Ø*o*XMAcǾ*Xo��+����+�� Xk$1lY$3d5k4QYH U(.VTDL":CUD`yd,+*ӤqdiAE CqLi8F#Ӄp,$G!j*Lsn*X]&K~㯽g V�� ����ʟ V�n޽ޮ]v+ O<ĭ+dc˰'DSH6 JQEgJ2"[QU!ΔGf+1Li^ecGɢ3q0,,GN(#$Qp4' JYD4#ɖ4I K<դOٮ@xf8a[]b������-V��-+$c4ϰt Ax}x`h±lelFatfatgl`Dp"14il,<K[E%qi,`4X#ȖDe"$IF.Ǧb2QheD,om~g'[\ V�� ���� +��V`b kCH ¡J-QYʘ¨Q@sy860Z V+ )GJӐ"%ʒƥF"4Qd(/ UDAYlID Y2yDDqL!R3jP8o.X_}ɹ~Cߞwm ��V����V X�@+Q$CF ǨCp*4V%6W,%RD၆*ahy(ڵG!IČ$'+1hQT("[Dxq8^cQtQ(a| :C!IDg EƲW'4U;Y5vk7������V��5 USq'i7c!h#pʈlE(2g#p0|0^ 022KFfJGb|vH#0P$+Q 2 ~ v :C.EBGݍ+��V X��� +��p+)L}$Ő̴g\),KÚ.%QY EL,)xE8VWjbqhlaT*:W ɑॡIH4Xʔd6)¨,aD02SXQD0 #ƦdaXA(NC( X�@���!X�;)XI )2 #&%"sqd} V%KŤˢXN@钘 e8'°p<2GIP)ť3>>h7 a8VbY R- C1aH%Fr5@�`���| B��wRDV #h2 (CȊ\eT**"g\%RaXIL0n$:mD6zlqT(QD`h"DSشQY°lA(F]% CqtM2]+WC�`���| BrνfrKb{kva^=J_=zKUny8m]u߷|P�j\Ͼ/9ߵ?z.䷍,1L{~~6/[,vϔ7}u:hJf}soAw+9hOP<"KS h:X"Ȗ"!d6iD8.M0\?Bg(*S<)Fۧ\E?hM\ZAlZAd <SQΏUQQH%- e2]+wB�`���| BrڶܡeՋ? Vl>/w>?~AV [ ~3N_vs#4:+O?ZwC9o?̢ g'. VtjJbT*JJj[%*JfH1" ?+BmB[.!?+ !Xʐ"וMeRSBW&%2/eztB!t}Fc䖹+ X�@���!XS._V_PQl[%U6wSʏ<dtfz_ Nj,ΒEG=md7~~#`e]sZl&KY_.[8p8&_7pPr&x mZI_z׵Xc5o/ƫ?g_V!Ͽ[79Xyd twYrW�� ���`vV>ٶ#]'C.ל憃_/͙ŕN,m\{rmOռw?Xi_PTl?/n[Rڍ-ց:޼O;`G*c<Lz??"'] V><</aw+��� ���� +}+&zϮ@g>t~`}s0ߜ\fl2wOY-+Ϸ kmL~h8X3f`baDߝt+>:Y1.pdןDoX뗿O~թ07^_�+��� ����]4>~-V>ԤubbG7Cf{S 27}&[m`+ KY/N5"i2n5yȁ>K`Se3f[/S6->;jV�������*X+O>d2982ƃ~`{m_a4yznCscnWtu7+gSQKմĕT<=Jt %I ��@���@r]?x݉6d⧟0+?~\lt767CǬ__gr.p` g3+ѯs7xУ=A xz5{,q:0kwX(y_1�|#%.].v}~ y.`�� X��� X\ѦO^<x敗׵M8e- *n&X>xJnwJgxHJסMnY=PȊ+AOl-lb]?<;<0~ 'nzc]996v'.~ib+xӿļR`0?iӃ��N� ���V X��V���������`�� X��� XW��+p�`���`��`�� +��� X`�� X��V����V�����`���`�� X��V����V V�.\8u'|r]vl2/.�����@��wFbS]<LŽq21srEGJy9SaXS!cfd9]-s5r=N^jiT édn<&VJgds|B-(|&M,2s*F+P@`�� ���V X�;&Xp[kG }<2kK <fQAe E 9xS!Kͦ"]( 9 ȶi9U/"M*UC3R]KϪpZ~!fZT4qɡfJx9V V�����`��cE[`hQ4B0JƉ2jz GV5ȒJܪ"q<ZCǨ)9y̖Jj Y! rYB*rK2gserg~\-TZ#i_7X8e2zoꌭ9>qOTԟy!:/LpAl9dԱ9 W=w1|\䗂%s˽f-<60ݹ#>ZhK8}?ڳ}!X`���+��6VcХy9i<Z8J'%7Uk LJ$Գ41,bQ-j0:rX*Qc`9 rp jd#0JAv<zO0+i"I)+O ^<wYjŧOόf?B+L}_hxmWYiӦ-;O_t]S@C3xMWvu/JWf3mZ~ׁ_ɾm1ζgi|g;:_T^kS{טOKgO۽;Lp|; >t X��� X`��ʵJ\)qL(yAߞoU9`Rdbi%$(`c+=R;+s jh0!,jzwEZkdḄcjFUJZ#m#k4dS}rW~>"WH$+FkyB"-[>PU2ms_u |W5{̅+ qU> d,:p//Fc}hQ7ze[wYv/tu>whb0֩݁hktۑ gnm{||clDf=q/!g_} F>Ï7h 5 .㯴"5r#w÷;U%_jK_G�_-.7=Q궮>v>v X��� X`��ps8ZIZ 'dcD41)2|*EǯYQ|&V Ttj14bb>#9BO)9լUz-ղq51^24'6(<&,?P@i^ V sh-Ae?x*xY>zƢ ϝ{sG7ϟ.e,8t#OF#[6{}gUp\>wUtS=7Ow&`_{pG0mg@[[x~϶b žє⛻hz4ڻOm]<}ENG~ &O ݿ HMٌ=hǢG5bѸ2q}dwI#w课$r?r7{g?Q3*>v X��� X~߲o;ii3-ͬū}${˺?ۜqCwK;goͨow:Ş;dƲe낕b Ȅ9ԩ4EBEG*Du224 DZΨa bYɨ.40$YV4^)p|&F/ q~Md2}|Zjd4c?"t *Б$x)5,B/{țϽe FpӳgϞ<JWgHN8 2l Wd“Ԯ8кܽ/5v;̎ {FtUo}o>r.;hf4 rZ8Дÿ_ hǕϊoqms&޻qS/U۝N?`.8%3Qt/>Kf<y܋K,D_iu+����+q[[&ҧ^9ziO/+NnX.yow :9kY/.>rcpv`Ԟ1sIJhzS ĥbT"Re;%K&cG*D >MY !Ǧd"3[-&Ydbxf%MQ䊸x6urP gRJחW\UfE{, tӸt` |l;�Ϣ ܳc`\z]K*uz[V*_ s\+GCϣ8@ n<9E!Ԅ6Q)՝_v>֋LL]нIlmgI49{dDZy/U}r&p)MX| v"_;;����1]zuˣMF3]y2}LdMy%K'4:m6dڒ'{~}yfsy>?=]V\FOgrkvG-9m^nwZeoǶ9̇K͎_BwnnЁ8 .v_3l . V<fFJv-o,6I}RǢfYt MTI.=Ӫei$$hYn[O`2D\B>#`aZfppE\Ŧd)$#C4)>{KI)fC/4:!}`ǂo.{nOs<l8d]p킕VԂ_^:\P 9քE]WG'8qX{ֿ$ڝ@37ζw>vW^߈)n9v8W%ieg UO׮gZM}ܱ%:|%KϞt`͉@cgq7r)ngzm{Q6/{u[Yq_}Nێ`ލe>{ct|@���@r+w5N=:w}./}Bg3G;jy@ڠ{+K|§Oj%m?q;űڇ/;f V>^:$N8wSR)2EPz-w$ . fD"NIIU)Q4 lˈSu:šgzLZ+4L20[jEfN#31Bz1sV>,"9470xjKSQ9J'6oM_|9>{cO;Yl(1o_tasMß]cScx̾Ɔ/C/G۳.zꉵ-^4hXͯ.k>7nX783!p;a;hpCc.]dƥC@ÝO6o6wh#b[PחǵȵcOƻl{h NW-w/U{z:"y&ʇg/^iZgc琏k@C}nG.o't;?u7|@���@rg+ߚǗ"ue=ʔ=pb PO]Åg^5[v?w+V@ef0X{zw\k0ڂbԮ< h|n nu|9Z蹳N=a׹8wSbzJL犹.5ˡg[%<EA'#[L 0d(a$ehUӊ2'ߩe%dY[R0L\lJx9jS!].uXt¨BQ-&y,^_"tY2>ka7I>pָ?\{MmZ_9ǂ( 5\fLU %3/{nf ` [84U䣳[S>:`zMYlDSѰd+==]cJΪ{Q¶u>dY2mw/Wz.ߓ庢{u~Sm&[->Sͅޜ,_߻iIo=tu^XpRl[wאR}܊Y%Nj7g׉Cۃ+����+w@rU[m-VohrgL֪@NGݿuve7bgUيr~bp|hp5fG3rl8g7n N8qu[ =g]y|VJ *x.=G]q[Pȷh|jeTf,D; 8> _Fo4\\k$!2zc,|&F'T\W"ٸb.NbUM7)V JuυR{l+����+mW[\S{G7\:hʡzs7Y]wڮX=i&5FSѹ5eYyŶ;?&w:۱Zmpf`Ũz-RAkD`Ql:f0jK.]ǠGjĹu2!EJٮM]&vB6V'#:"#G'4)ȥd|&б)vR@&V񋌬 wz6mSp#<=r[mmX:ʠ�����vu5'\a6zOO_<'V˴Ŷ/]8{t~y;>8pug[p~G#+g[{Лwv-v/~ _V;_]5Ӎ0nANss߱j~xpr`E)" rb^ 5+ncj/RX(`ay"ڋcT_*RqOViUX8!1rjcYܢ"˪i$D1/`cԱMJZ_4yt!+>:N~_sIf`���`vV"~>Ҝ MEhvVN[j +_zozfwO]!غҩZ+vhJW/v*v!wEWӮ/;/}6d ^+,qq`x ~Q7;53]V\ZӲᵏ}Jm/i􉪋Vᳰr~IIsYt[RHtX ~QmЮetfnK^=5wNĩL3w?`nSީg iZ)EGgd[ST~KD*D]W Ir~EpZ Ţa@�`���+c2T�_VX9MjY+ߦa HlrspRA#&kd>M%$d^长ns6kp {dȰGF=Բkݺ>JD+)v-CQ+CJVd9f%]#%iBIɨ+��V���@ ioi+;�_VJm1eQ3,;[7ҜzV($_W",2D\\2}-<<r.w}Z=2ݏ.I4 ]jUU"M$ `|JT!ZюE|Iʼnw*yUeYG/\5lSu7bq�޷yS*Ko)G6}|h"|`���`]SY8�#K(ȵ>;zLQ.H'4Jl\`b9a/瞥!e?cyhc]cfK<R@y, z- çg .^_QVϼj ɼcE赇pyo2|{O_[́us`嫮a� X��� X�QAJIOSr7D0F:^>Q1AQW*(254Pƿͅ1K{m(ݷtUI[EGn-u\AF1))=SO೰Ȇ$<5)ʓ?mrhe[̕?prtW3ۼ {?}$:aC]L fN<aŧNjill*TU֍9ٓ}tvX<ds;;>_4m7 jVCm|_ ښiOttv\|\[>>Ž/OOkv_\6_Z7e &4U>0"yw&6-7cڪ30֎uKg �V����V��V8C!ݦe\y2ZsX1QQ@4)T(9C)f*cyDġ5k_^w]m/|/|`Uʐ'( 7B0YI Rf#`e+(W#%YX?W3prVk_uu@Z_{Sz~Ÿ2ݿЙ󻝶 ]ˋgּq ?os``0'N-iݎ˹l`k*/X} ڹv['c3XA{'+je͇u|ubƓ{+l[z~pޙ^g'.wltl3�+����+��p'XQR<fUMWILJDZ.#K/:,%HXd`1lJ& ;chպl{O_^o߻dGY7>8cdv-]'egb%<MZjjeDvK!$c×֌ohݣ&k�JǗ47iim]ht%޾*0KJܛtS~W墕붽 n`gWOou"PҶJ 3`Ǟ-m^<>9<}ݓ}>:{Uvw'Y[TL3�+����+��p+2~`RќzzJ4)TH+1((6V'%oҲз[Z^0zxoTV=ս5aΉGE=2t;mϬm՗ v]C׈G! "#ƵVJ襶|yw:÷z`gX >,_;olp`dyrvUC ˋ'vyޱk{*=?<`m_72+o~M2{z>X 0>ˑM%Rd?G;٣Kƽ3?ʵVvMy� ���p+R�t}~B"[4c(Jx9VZBj$|&Ơ )EF,w4B!=->zTVgf=CX[ŭNK[<<b#EVYgd\53qhh =[31b.A)햏}r6О~'`t,k2s_ Զ/97e q+YJGwG7>b+? QBVrKt VZ}-+}L3Cw -}䭝1� X��� X�;8X), j%d kẍh\%(".M6R^Nal:!cŔۊJ O[,$I&㉼Idʪإܻ*)qX\jIyȪ2ZVUUϑ/UIv-COJ(eNu5m5%%ŕ7}[jG7/tu[2mڬ3?qaGWUԎ=k@RжS{VUTխrׁԔzd^7XA|qE4uىM F͚5k}+<gO]/+}L3L֓ʪ+�������9[ 9<zRJ$t'-Vإv[*sp'5Yp!aBB C. ]>8delܳÏ?1s|ϑS,VJb~g`t2r5g(u^f΍wqo#f@���V�� V6V!3qlJ8/kԕ VI"3[ 8B!̑7ul)*>6oMZ塡 Yvds:WΛ)9ng3((\*>ݤdj1٦eTd"f$2CoQ3 X�@���V�� V]"ALsLJj+0\Z& 3PH4R*^NVr-*FDsR>ab^]$$<#SRZW( s&-*$]osXJ()`4Rr}p8mK̦C�`���+��ڵ hY<:J_6U"2k*0Z ٩gT{[e^ق 7M^/3$ dNU[x,!=jEOA]sX&E-!jd �����@��wLRȫt]zRLв 8Xi~s Zv5[ƲəlJUCk͙o4LdVQMJZLr|V-ŤBaVNEV<un#ۢ#;t,|R F%U/z} X�@���V�� VLl#/_+6FV#S)m, ,9? D\)Ë91MN*|#ï+T{VEI1# XXVb6K}"BĎ<za*d8ukVB6*Q̂`�� ���V X�;&Xn=kB[9|<5gU sKlABe$znѳh4q^^NkJ͕CTˣg0:ŦY>'ݮe X2v$3"sf+[9KBmѳp] �+���V X�=XqV-ݪ4,*ze_%BG-sJD"NNQ+, XZd䐱#)4#$<<ɥfh"EAFBJ:Y'(D!Wbʥȳ"3XPG*|gs;]R� X_���@ ��J]H-&+$c!\T!.2qT"FB~GSTrؔLf_2:9e`Zb3DX@"Jqktl/[%S!p嗻xeμkr^ MtEuic7rfes+}��`���`��+൶akNw:ϑgV,RHp~w_4 31#ؑ"nQɰ>{^Wl9nˮe4R;DP*lMjT5E#-)t.5KIx"ƃK7Y+Lw|3W+��`���`��+M"by<Ze,ڸU^̲Ĕ1qr"fq#L!g0<qR#;KyJ! YO>#ˢMZ#,9>[T٪+<VJk幌̛ Vϼj4{rgc7������V��5QEiDήLlPjVVj1I%"R#CٔlaC1mZ^FpYÄ]&;t23c+.,/`*=e./rN^3rJ1sTdrW~M঺ߺ~ZV2c3vs��+����+�� Xk /ǩg\<c,Ֆ<&NHԖj)R,jVBJDq|&Q w>"^Fslb0j]tX^3ǨEDEe`z-Sb5K*%0xmWǹ,q+}��`���`��+M+XHɧgeN] +w2ZW0VZ;lFB2R4MJrY5c^BRgKJP&ZFUcU1M EE+<f2OkR:B:Bz]n]hrrg]�� ���� +��V`ï).(4C2*B.ԙr7T走rj>=MNhTm5RZJYbe{L\ԣ}9 Akd)/N!S)m5jd%|lӲ\ 73xspT4Nrk�� ���� +��V`Ŭ9Jc*UE|*y,hS3]|UYo)9MJ 2Ne]}ebȥfyuZ!+ȱi(^aOX-pEf.p Ive n�`���@��KsjKvUͬ.*h6Ş@"e` r"2-rj]'**B62dd|XXbMl)"ǡGV.sr[kd3UOϟ7I7E5mYPP-i�� X��� +��p+zE#! w~_bV{ 4<a,d˜Ev]qAoQBakflJwA!?KjfQQMT0GQ V59%6NSI* _7i%6n]cir& �����@��wLrKJ��+��� X`��`�� X��� X`�� +��V X��� +��� ��@���V�����`���`�� X��V����V�� +��V����V X��V��@���V�����`���`��`Ӄ@/���`��` (P X��� X��V@����~�@WkP@`���`��` (@���V��5Xq[KJ(P@���V��V:,QWP(#F&' KJ?*c!)C㒆&D'$G!?Sc2*398j2p9C%[ LFVZFIÐ2"q$dÆ'5|TzJzfrf稌V@ ���V X�;&XIHEJԡIÆ'9$XR% 1lxlBRLBriCFJI]RfaR1ԴlP nEE_]Zq"e!%#3uȤŇ@8"-9=#FfrFFHBJzf2+P@`���+��$ h2bԄؔD.'ԤOi3S%$$&D%F!%1%&iHLbJ8|//~othXL OrW=T9\ZzbZzRzV+P@`���+�� IHN>"(4dC$' ?GB`H:< m؂S-V%2>):uX2R$=PiX6jȈ@sLJN5ًF`ӓFG +P@`���+��$'IM6d!HM\B4: 9(%)9!1).!)6>)CbўAL[<QR9ÆO?" m2"-9\e3`ò8\,� (P X��� +��p+hW! Ih24)3+-mСÒJ [A~ǻOIBCPBRY)T̬Ԙa#Sc G~LK!Q(险a)YC֎HJ$^7XRW_>ܱ y7}t{k3q:ANY7#e>!khx>}o流KgN.qFtڼG[9mj6[S:Gw>7f1[잉W=нU5E/+���`��!I0%'(> m֤ħ t:СICc<L $,qho! QCJLIL XdiCխl^` i鉁[%R׿+JⱛWUS08,:ŇLKW}}lw?+iXͮ-g@}Uh3oX}g?u-_~fWK&zw߱=g7T`rC|i%E'ˬ!t`���@��O22mhz!CS&]2$a\"V&NCAXIMJB4%D% M2PRcScⓢ+VS2xX܈ݗS'ddHKN+o,CUL6oɾ^`eh6Uz6`:Z>[yLt`:+,ۺy+fbo}ЊO-Z;RĢiEv8qIwp`ߓLl&uƪeNdΪ/_u\ﮭGRKDt7XIĦn;ُlG[7=k[^C;xBM۶>{~;ϗ>%lҮ`2[tdC߽o<7dYmü=:@ ���V X�%XY >:DƦKB[!C%Tuk bR$ e>[\ VRGr 4$:!9*&>"!mre(ԡ C%h:<a舄# iI) V q!iC5HK{)4~| Unhd D'c6WRx$ehxV ӯ/XCK6{iovpק]l1Mp[]gڶ {g/36<&OmX́>S^}qЀ"<}@BWb~OPԽ oUpXC;赇g6{!Ԃ9sysz}LjmCc^:p}w+WB<|v:}Mt#(Ƙ3;DR$TDAAQ:C. {Asf>>]w> =z5A:X���X��o+O sܶm=u*4'B#D&< +AHml$l FFzÈfܙ3YIsY9qDZx*VXj)z<H$aYqx& խPΎıs~xmmCϠSg# [9)ZO&:6QS\YuY$n ՐE电WIKZKIѬJn]IIUNB'*dڶTc䗹V9H=oUcXQeKI$XXF)! ݔ/!u{Y<h04d{Vwy]<չ8QN? ;9)ǸU&gPci.*Wשּׂ9''t(ݑvmKYt�b����b��"V8X8YX8;D]_nD" 54T-*۽{; 77;À18 '%y ,FX}<̬Ċy++;03uf=K8""L$ Hu.LFb"y&+ʋK(WVś#=W]%n(V<HGMI2[4'S5nZHC#,71&jZ5Z %A2О˹eKm,B_~bR%A'6^ ,T8gkoiVI.^ڽR/-oXčvje׌\Gƪ| PA_O_g+-q)9fdeŔ/X^C~6YJR^YʭH?SF$E@X���X��+Xb@L8&fL37dcgN cp8j1 _;`@bp*B$''2kCYq,l8&HVcQW Hlxnfu,<B b&قVDM65.:GQc:,ՎZVN!~\fb\H_SnGݪ)'.&!WMs1T")ȦֲXTF,eX,U,oSFQJ+8R URuaV4+AZo Lڴ 9MOK.M ./,tA#G#Iy1tşm9MndUo%/.RXZ( 2Vp4o Y+����+���"3ЊPg�qp2o"B]b 6^t;L@D"b0 tz -Bbs9 Z'IXV]ˈcePDfu~l3u=g,d8z4 9NIeU˧(z$޻{ݞFZgAȼ#gzN\rq4RF[.*b$ɆKc^A,U֥/1v5UGRԬ?^6M<X6 i{It@[ܯpDRſwU9G.fpҥw #opc)6>Y2kEj˪9PTrݴd bm||YaiKEYvtĵ5qUbA:X���X��o+h%ZFZjKO$XXxj0p,B<"Th& ZLۑm'N3aLTBϸ~ iw^aLIΦXHhB{ LlIST׳dE8h.fݹb$!&*.!mp MfCh/\VOEijذ\kyEi ) WB,ei5KYdr YqpH,ԽԆX)HKH_5VU}%&.R[jd7|eqU[g$$d_xUk%)11 M#gtr/+����X��  sN@@իW]]]B`tJ؅~4adG @H01D&f<u6O.D bؙXZen8"=Ek1kk1O+DӐG3R?)ҔJ_Zo`IZ V@���� Vb���ELMMUUU}X1  =##KOOv)!eD>Q| po @ b8H3eQ Od HfRt,lD<ݺĊ1 …aZ[ ص?Xɺgp禯:-434Wr�b ����b ��HPU hf Q0X@bѯttkhUhdccff32r13bbpTc$< ZvzI녹L88"#:Ɵ6c\󃉕4gKUySSX ���� ��XQ2}P1Xll$fv={v޽*VU+(J_KXa\sN^^v G[lO0BB\%~ʺ:lb+kI.t ??+ V����� ��,VD uFCRVL8q qwl"TiB BbFttkp8 3aX,#=:MȾ\,$V"OU! I*ʻu&Fz,3=$PB�b ����b ��#VIxff<3ȄYXIē'E__'ć0ѭAT׮~ 3Ⱦ&Զ VF  20jv_Wuw?y3uBl" Ă!0cx x"'JٽwT:EҺho(#**PSmz mM_Y� V����� ��.V99H$7۾;yx8:ttk֮ 5kmx6v1e):yAZa-x;]Oeful<<L8n77iprY|\WKs˨ДEU}wTF+1 eXYFR.+agB VTX����� V@���-bF<l\t<4Pòfѭ`xHGOB Z)CS#-(f拟W3dGH\tԖiH;YUw(eHir0[r@WWGCv(nmPTY>ګ/*Ni.p5Bh;&}GJy}-uEU؂ӑwCGMCWSREum[y5)[N¾nd5 J+JJ{eLMu*r*acp.ÇᥢWbokuVWh鎲/){tF=F+����+``` �DL<c+$I\˱e0 HG+ ( t4D"ptrLj־eec"2Tvֶ'f#݆C}c&æO?y|MOR?g"O?9*Q~Ej+țhp\jZ6J5,NVZ#Wicm->*5oDfSנIRQTb鿕XHuVQH4ZZZv 45W+oHvѺt/%Ҙ%%w\OGK&1<QQѦzu>r7>|8^*zUQ4SxGz%TSvN+_! @���� V@| __�D45$p02/b͚b1 m= 쩓֭# UX_^NTN  e[KFWkGf݆Qևl~s=(-,_QTI^NVL̦gZ+~DK.mbo`jllN6Yklr=!.xVI6(paMIǵ{Iuߚ"p`e/5S6hV+ohP1F}X}vq;޽Rr:fƴ0д|xhwTgbpaPu ����bʧ˗/_@�_%VٳLcezzjO??:5 Þ=;7m"ec'۷5+KMIK .-uKOGV_g@Pa_AMFkN{`p^n݆ GzF{MR>!VJv[eGRY\OY5w\5XҺmaVq窽RgI*>_4hQCd+*R-ɑ?^薉2JȩFQeMkY8y"gY~_ȣP47'b~;3W[I]^c����� V@XAۿK bpx ';wn奖.HFb1bd{9'$$'ܹ O3!w>yt~K1K@O-f)Hcfz)b,NRR9:8܁@5Ғmﻌt[%pt 7e.KS:k/ 58++iBKZqRJ3(VGWTilyZg%;i%T)%gNʻE} q$ ?|8+\wtOFΪv4wz V����+ V@| V�+V6oZʆ' P꯲1&p ekqx,ĴuFVVff_~z~#CՇB@X Ywbg6Joan%~=ѱtu~(ri-d_y䮣7RwsV]4 nY Ut uSКx] M]mm mOi*+**)*jRP+kiYVjr3?fE$/ZiҜJW]SC]]Y>{&*Z>/u;gd`{f>F+����+ V@�$VyyyxXD&Z Ȅ;yPUEy#<05oe&!{[  D<tQ%E'1x<GbqXU`qfϞg4]/Zˋ a߹k};yy?I_E @X���@X 2E/+?x]sbEF`bX=;i~^^N,e`V]ǹa-l8Ȅbd%qx<cܾ}#D&,rF,a&uu:2'FR/-׳I,V"/'+����+ VUx tg u&Vd'7m^Dbcq8ψ :'`p7 +)nܸ32`08>~.\& G|g3 c#Zd>~V" Ƅ'0"ÐOn+ V����+ V@|X),,t4*233__d�2 ^ׁX|vf$898IlLLX<Ȅe", lX٘8X\xTjb+qC7 X: : ۑ,lDT0FF#s5]Yjܬw,&ۭ[N࢕wGNb ����b+!jGE o<!]49o2 "X V5j"1UxPNZRRF%js;+====4_"Vfgg?G V \4x ^~2h�}be&uB<$$8`\FL±s0[ZhsJK=ә5TC[HeM{nd`gc3pL8V6&Xg!2awvvE+Kͭ[xhly�f-2G`b����d;~>𬑩Z4sϾA|_+V|%%KF( |ťê7dj}byEtqqYJTA|X [M^l}21|EG`g VCpq.'7:|'qr3XBܧN߸Q$Q@W<ЛՖ*d'AD g`\Q\޽ ĈH,~.P넸Nꁾ<E%QV6&Xb ����b_/V=9_¯~y_Qjh[uNwE>|x WKt#!gܓrD֯_YZϩ{zn2ܽҿT8K_ʍs01V7/wLHZշ .,%#Z`ĢKbdW%ީwg`bb+b#Vaƅr-bG|@;艃hdM}||=[EJ^T>)#cׯzZTwNfZ ' c~ݽ^ae#pp؉LX.nVo;D{]˾#tnn6fús֦xK 6Ȁ#2Df K[Č;xp@bowbX햟xz5 'O+7zɫmf)B@X���X`ŸN5'xsCO79Bgb?P*$Vn>b8d;Öި{;B(<T($7xb(ATTrTd1zy]Ǩ(vQ!gPg&-C'3OF$-]?G2_WpbG~ DZƗ߉mI4XOסv2VFs96ۿEBbiQ1^>VnV uf$I8$yH.ٻ{SJqq018AN++577h'a׭eL8OdD-v*4֯&1OYvvvrYB@X���X ˆ2NnT-70.X0᥷$YT<X'O'Jyx&h\WX&4 m@uR|DEEǞ3K ?HAX11$&.pqpOyTL>X'k3b |7oݺu~ubj-(/&>dUb 'A@UR|-R_fJjm9p`3 Gdpz6:ߎaPTaca# rihww&݋23)12:xpGmi>6&fG'^H,G b ,X qZ5k}X^],---x=Ì@@@X����+{NʂX.ePB<#2DDD̽c Zd0NBZ+2V0-)g\ʠbX\v 9be_6s/ٳC~ ,:Ɨ '"65WdOޱs'ҹm=B+?TcI@E|=hv*>2SAYyǎgbL"ÑDŽedOi ['Ĺgӧv}wTiNn;<jm;Dc�BfU5t_ V%$s *vkYAfR{be V�����ʷX9)acT&q,C<[jbpߖJr,++X 4w\CIK5h.beb8E\Bq i'b﫱beT]Zm\m %w}rmPkϒX1 bkp6n▔*/z:{ Ǟ8Lx"ct{uH`;]]N}gks ݣn, Lأj}=%f@`<qFR@ϰSOKb!p/VZJ%"WծXce V�����ʷ ԝl'r)<{鉡Avx`Finҏn5)7.Xynsx O$(Vx'ӧrA%#ƇUB+V0#3Oni是bƩY*#}9C 9bIBޱK)*V=t%q-J3Wd$;Zvz0X#"  '֭Rd J..F\<LGZŠcaع^NΝ"'Nfٵ{=qgsWPQ;_v&7urI9L`ee:)*AV``cҳsX@ʝ;c/ meE5>w7é@+����� VU tdQm qRN4?rJ,E0sUm ;Dos)vݿx' BWQ$Y˃ʁRN(%Nf第S\h3VEN,#i?+/===4_2+'ђV>k`*wWu{NL~&EwÒdY?3VظAD|.+빥)(KJ>rt{4tL؉DfƓg$xxYvPW`{8/Ƕ[uL"/xQF.:8|d/No˖uG>zt??ųgĥ6c㩅oYO30Pեq7L%eLV[ V�����_ V(VXcЁRʷ$3@U?ϙ�r*N*D mXؘpDz:'Fsre%7S\*J=qFF jZQi$ƹ& g_:~Dy_vw0??'?gte5w2~˾w6uu)YYGE_04*1) 1}** @�����o+\\ x ׾l ߊoi:]X&Nʁ#ҋJ˳q0m۱Zn]m¼kRk/-ln&wExHl޲Љ#'9wmcIy+YMUcķCd"XE6,$,xMg{Y ٙ/)^{LG]FZZL;aڕ@@@X����+򃋕)r0 VEU@G[RI]k/yX7^d#O/ź}/DhkK9kTUWST<^DO`f`b=|pR\i)>w"pR\C`:V'''ڃ|ecg޸e!' *}R@@@X���Xb^n�@&V8*I78}}C"FIC'23>r-ڼe]4l($G3IGO >#rJ\A@HPhz4;'ǎ];~%wMd~M?o=t́ϩ夤Oۿ ���� +/ V�/+7i=qZ]S1H]KMnρ,f{SDs]S1^˞X tuⲚ'De7l(,?zJUGW).XI]'lݲmޣ'YIȀ lؼ ���� + V�+"DU<)W\pY]KYA1Q>n }<rJ\/IXd#)qnCE%wه%qpQ;y yΟn8rZGUUdee9u۸y~b ����b +�݈rĉb2Ϊ'E%eyFYU{k=yJB) E~q^OPഴcbr'Ȓ7mܽ%tM;-*m;<* O^9.sA+ V����+ V>K@�_'V~=tS^U7=-|a ]{>&!~GuZJeMGȞ;r؎l/$tLLnzR*zjj2ަde[~eo6o߳oQ1}~9~㢇OH\dp#e5w"#/b ����bʧ�{5�b/+B ����b ��w V @�����+��Xb ����b ���+����+��� V @����w&VFGGMMM V���b ����Ѿ>T+��XY1�������?-V?>==] X�� ��@X���@|XP( V���b��+ V����++_F"NLL #���qy,&뵷WWWX�� ����ʗׯ_# /** ��o]OOO{{{SSSUUUQQQFF��@X���@|Xy%0P j���~DBCC_~e/+lJ��+����Ty-:99hjj)+++**��!xArrr\\ݻwCBBBzm])> V������X Zfŋsss eddٹ��077b[7jao>t1 V������X/_ȸ>---M���? uuuUUUܴدXA~~,s$TgxyϿ ɮϧ޾}l°Ab��+����V/o޼AVP2===999>>��Qlii////((x׊jA7/_>}-9=57PKBK7o^̶fMMy?lj)d}_>y b��+����+H !"㦦&&&((��PQQhW>}Ly\^ڪ-:_{;9>?t~nWϿAXz5y{ЋOZK{S^Uxct��@���� V7beɭsd,��) M訯/))?޼GS(#{g*JFÂܸ6=5AXḅ{:_t׼odտO>;5ڝ=T:\37Vbh.狕yiQcwCd -TSk{T_냍bbױq11~ȷ_[W} zA/i)K*kǏMM-=+vJd))g'LJ*ؙK#țx/<S%~x@����K|V/^ GyN��:-)qlii Z/zQS$1u3rk嚘kqj9tD^h˩c8&j(w$ikgOf'fFKznD=,z07Vv՗Nj]ıoUBJ&rjuT^%ыO-y_/&G-dq +m}8:^eD4m\ZC/]y=ɫG MNu֐ZԑH)x@����M,Ted��x] mppʲ(o"MfKrF?-qթmV헖Pr?38VW╞W  l˼l}.Mft%4D5t^J<V%٣'HL<U=NF>6U8"=v*i=R69״dկƟ7RҷꧩbakYJL\\VAqP}]91u'mrN l.J9 $ۜ5RQQ4wZ;BA';GhY$SMevbz˪*=tuiImi 񺸔:e#s95m:KuTl{� ����{zed��@+vNMM=|[3VUf_~|Q~싦aM Z$xT$x/Kl-,k/nH+-NYߵlPXg˂�+>éWS/$8w_Hqλ5e3jng QQQp!}iSU]ڔ %#+W<܃{$UMmdB΋#MT)"fbbRDz{8i:2C#ݕR"=EÔʑ;*Tks{`?:Q-@D?ے6YՍɲP6 _1LА5 n@Z ʣkCjH;ﲾ}DX]g K&\v{� ����G ��ԒDt6WO*_>,|P8%o"6t$/&C%M\koWCDG{lGWnO_`y@EGoQKwaKWvKihyt?<gH;(=oXՇXv%\lqο:Z9Yr>St=b:F/J|Ӡ%;Kzb'd&gTdvYWwKLQG[RN̘ȾrQ́H2#݊VeYK,cZMPFGG JH? TH5D6=Sԋ |Dќ>[ge5h6cȾMQHAKϬOm(PoTLL^BeȍȪ=�b����@���Xb죁̉IJCbO_3ʾ5۝ۛ30PaG=y=E)Ewm7Td^4Mu?y2ۡߴ5|[uWՉ[o_l2u][NTTT>mMu4sp5-G{SES$5S^쇵oX6Q X#[eTM%'{l[שI1*ݔIY&rUUX: a@z䫖[Eg1 DdI'dQoX!_25)k:H2dIVu[GvJ����� V���@|Mo^PgrDŽ^XlUPyݼ*zS[PaykqE[imk^CWIkoy}OI]OicWEC{a{gF[MhY_uԌ;{$(cA{KWϩWϦx9b;Ct%nuRߡ<,~׳@I3AѽF2L^{7er*Dv5'y( cT, ?j{@(V0iVZQV\)AS{fTVV%MƇQ;s^^JLL2o9(H;7.7;Si7d5/4>X^VKZZ*7jO)C[8<(\9C _ɪË=�b����@���X2ՋW/}bz,ou:o0Zs5uZS}c zsk 3*ssK23Ssb3Jz ;˓K}/\*pz.64X>FM|{{PΝ2JcyXXw,\AUEb2`c"kb9ZN \OibA/ܓiibOb FLL<gkG`Y-B,e,-'喽])D4.=$o3 G4(Ǵ=ۆ)k a(? >'.5sc  V����� ���/+o^ÞW3sS1'B=;ҭ*L-:},K*rk2[Sk[ӛZ6'7fWvw7'U$ζRa#ksvR^9JT�c%95>ԙNT=GM*M`buyX:'f=;jwN*Ғb*'WZ|a/*DR`<ĖFRZQIԔ iI1RD5N 0EhrTb(S#aWɒ =B,jCfH$Y.2.JdAx@��������+_&VO>o}P454|}7K.uDu66շe'566$4&76fVf$Vdŕ4TT$DWF'F6h`tVeDâ?dUL;uauL됥''KYO{=�b����@���Xb26"gɀK=1UvaDVUknLooh*okKlOliIjmhIJo.(hH+K+Lɹ_teVve{>MԢ/Me[QJCOJyr|xeI11LF}U%۪yt[=�b����@���XRzȑ޹ ;a5ަ 6E^ϕeʻ[s';>41q7A{[JcS\{CXOk$/5!A\Y̘ʼnW+|JmتR=lTyѸUi.&Vbb&c:EB �b����@���Xb JֽA/^G.5j.6ݶ))_RTY2n;%!*:!NkCXKHOJNM|zE\zyj^uF=ϴpX?ǘV^fJ͑WK-+?i{93r*�� V����� ��-V߼ƫg2'#| S3$]5j|2JT$F%Duܽ{30;,VBYhImDc}X[CXWBVqxb>%u4>mjkwJ{qq!rjZ+��X���@X��ӓOdžOTRh_`G{kMCwa{IN׃̘]mc}m= %59e!a7o$747ׅ5F t'eK NIS{\IMʭ<ׇZ7ZTܚm|XpQ}Xdb\AYrJCbn/I6/<jP.$')%<..0�X����+���߽Xf}峙bJеNۭю5TZDo)nkHhn)*.(z/Fpڍ|J榈ά̢F%Iա>i6w/ܱl 4mw{t3JMqyb!ypel;o[el+^_.V>~#I6_Ijj̫� ����X��gO(o޼~\91dwj72oݾ|;y5 66$.𪬾 nMP]ۜ2[-MQmm%1w/4V/LJԟ_`pBJ|IUBcgKvbVVV67(dmnu\411ղz=X[Nyt_;z-feco`hg}3_?"V(kgI~ZZf|)*igtӣPydt7y'd%:'?8Q}] 5C6f:j.aS2VSܻdgk^ފ #_;";}�+����+���ߓXy۷ogG}<|J TZ绪&7k?Uo՜0,7=/^`mst=C<XUׇ7$4wWɈɼ}-^xefDki7lzc'*n=o+S~;鈖)ȎG(hwW aYF>&5e!Վy\SW+&&Vч3Urp>YưUX\.[M,HQ>y{v-}YMaqordbA6|1˞0eBYŵrk##����� ��H~6HGOJ xYg+Z:iwV&ږw%ߓͽ~W.-t%Y^8P2(-M ̍*-Kǐ~ë$÷=Z~keG}h Ok^=bejj,F>#U(ZK¯[[ZYȚk-U=WTVUWַ0f0KC^/$-r%^MHH,v UV=iۨZ.jDjbewG;xA,mث_hz/cX-V4ZR[=1�����X��݈Hss+)>W5ˍNXwjWfX ˾-Ӝ֞"W[Vi)^ۼ(8vƝꘄ̐ƪ)ёeW;7&$9%[ͶǼ*V(ږ2?^dyY�9-? a&&+ ]W]˛iK 3nyX( ^lKpҢ=ESEzJbŃVZiᚻ'볌 e#?68+BeNʇ,+6V|b��b����@��� b?hk{ˁذK9ƢŗsBfxT$Yek Q⋽j_ ARA"&q)uUѝm9IEy%I ɅY9] ?yp۷ԳXg4JmUebA.kH)Y 4IX VU&F>b狕<Qmu*g2Yu`{eb%?/eY6~:>^Kʊ SrNzޯ{b��b����b��;+o޾z>=6Y9<Гמ~L,Rm {ɸZ}d'3 %wL+n_<npfsmJ~OIYrsK^MuYmeVoyPN]fKhlŝWӏTdZꫪYR#_6r,}o+V^eu# .NoD4Rk䄙hmYVVt,o%7ëXAKaM+wEzbC?Nkʊ #z:~_�� ����b ��w&Vxﯦǧ[Jf*f)A#wN\(7!c#~Yi=c/֕47W_77ݧtfuκ򰪂¦ʜ\Vc/[_?{; %+&�+ V����+ V���Wb˹'_6>Ί{R89zM-k&myiaQ>wo q{W.x uK.-m{禁ԍ;qWZn ihLomNiO/ r黪94S���b����b��_"VEcˎ%{UQ[mo-m-̻Z[zM/Nbnc=j23/ZV?S]u ;A%Q.---"ݞޟ.}[+��X����+���߳Xyͯ^>~Y;[$7i<6xgGwa{sO}^@MxX[/?%YS޷Z;߾{.(9iy 1M{ wOʬk7ZC==(pTR7/߀X�� ����X��^ܛ7/^z1]*YQʣk#.46fxVe^?qG%+ľ힧 3:䋞 qv%ay7Źt8|a6'ahǏ -C �� V����� ��,VP1?gE)>)w<Z<+lR2SݻI]wi~miZ~&}Mw*:5M7%&1aVQ764ݱ콬jlݩG9_<X������ ��R,7o_z63[6^tz|mc}uMT�%̳nj:*8)w5u%[8s�/DǡH ![}5uO?P \VhkP [XgXGAQV!Á 0 ~p1E6*>o9W^ss\쳡:Xu6m);ZJ_ܗ;2\Wul ̷�a�� �VVq芦QٔQwz}dKf8993qobז%"9[a)Kfmsm6-:s=#2 w.]xTq)1!RSUm<J'a�a�@Xy-\"�[+? K۪m4Ֆg<JjJ}ҁgxZ4lˍ}ڶ{ǩ8t\4b8٧|l8Fx[?n4)zmiz[{m,ͭl NVܻ@ݝl2ejwg7+/ϋ۱l˿Ѕ^�a�4dff>%a�ZXgX+/VYVKzӊ's}n>qhͶW,r4]q5~v-i~[r.wy࡬}>q%LTi_W霵'\15sM+Źz73 ŅwL>ʒNJjSK<.v\]ckufyuMy^&K)@�+��a%##C4Dl#$�;VSh49qCj.V+ 4`Czx炈dῖDmkEV8Tb}Ddc|vDkAVQgkQ>ŠfaBvdm|6'C)3P\rPM ;jA +}=� ��tXinnV DlCXw1*EȞ5?Wr@o{O~"kґⳇ+~YOyѯz/=hNQ?M47Pq5>65-/_3"#VFiG.~Q fnBɋC -aGz} ���+�@X/GYW47/o_ ;U ;! 8T䷿6̯>".z˃[RZZ[&h[[z)7;ym8̆Ew +&wH$\X)/lЦmN^�V�� ��aePa=|٢n(hI W\;}eg:TvDK藏4OZkJrMZK)(C +E1əR.J,dmvw*e+VjkwؘHXrͪ@}<� ��� V^saBUldcæwjn;^v̔J,_ۨ8FZPJyu+\--,,--]<7Q'v99-[n-BwpJ{۽\=W[>ON^ ��𯅕׉k+�0Jg^E-/m.mSju-jeBQ*� �`cRR$''kZ_ +�0J۫Jǡ67IMXUV{Zݓjʄ���8555qqqF�3t֮ߚ,v皗ͭߦLX@X�o*11E(J � ZaѼT74~+�+�� xZR)]U!�p +J'mTVj4e� �`Xij;zB-㟴m/jtsulm_֦!� ��+R +b �b@X�V ��#!��0OGlIX� � ��#a�+�+��+�@X� ��� �VRRRnزO& |=&*Qb`effV�^7�Bװ"~{ցmĖ=w}Ņܼ#bbX,֐###C4KRm~ �V�MJkk뀿5m +aErbX,֐###yoMV��b+�@XѰ"v[n%X,-Z �V�`tvv#X,-V�`{'lܸQu!rccc鶄bݰ"VUUV�`S^!y/z^<%ԺE'Vma,Z͝mૈl̻Vu"<%*-"XUmzhj_uK~UүJ2nwdnEW 8fI;jNXXQTNNN".kVlllt7'X,뭇!11QTV�`e<3BVwt9ςw85o>I?[_6;<Mo;h\7ol1uH:fY[~{]v֦3N8tMU~*4fC>ݮ3K:nsȒKcr{)a@aE]`S\G8bbXTXkiiV�`_vݱwU1MNVk"q+kval7=fvvٕvAkJo) | }  'MO|:q-9+;*ڊmʹO:;63 Ê vz666OαbXaVRRR4?#V�`[-.n3IOO-={ƽ EWVd=<b}m7[vywy[m7%2S'|<i'}w_mxY,«mw?GI姼M~2:ǂ[{- +�VV bo|+V a�eXyyQx/;s-9PmNX9sv8O/zh˹~7amo,_5s}W/o4=صƪ+yE.}x=]5_MfgwIE�NXbkaE(|2� c&iYgw tt=ms>7Ц Ю8ԭ(=?1;άGvgXr25K/&d쀵N]귬$SvQ0vWY_s]H p|"=ۓ@_ VwZ V^/l`3qyϳڿj_ۿcBS%k6\7weCoUajl,Df6+7M(i/>D"*ZCفV#abX+DXV6.J||6O~{v.]n}N}nma]qs{>vGmXoym %t%7;_} .^q-9KI�‹W^]Q|k`7Y䚼+9=eq~JcE+WXIa+U/Z*L:7;]{vp_u+ۯOj_B]?ң;|΋L.!Ň$~v`X|lbX7[!�;V�`d2[ )))O(bXo233\.'�;V����4� ���� ��a����a�+����+�@X���@X� a����a�+����+�@X���@X� ���� �V���0(Voh``8~b;$s8>Dyrb9G鏞'xg'VUO6S6u峈cs?fg;RߵVȲ |OI(&��a���;Մ쎔(T*eq/xמZUcjdp\ 0WÊZ5f{v +{GxxByUmY "F �V���Ыc?\L\=sGFcƌ?TƯ+7~1JL~˩Duڂ;KO70;kt|wޕ,cTnWް?x^Zj>le)!`~\/67gggK;* rv +]pI?Jg⏍Ǝ;lَJvw`k(`x#>2yVIX� ���zqsן)Uǝr j?0RX-.U'J1m:+xeitIo/kh N!ZѦ{6T)y;5Oۛ6԰2KĜ *kFs9VZ_T5T7*<0}T^HV {oy?20M[Lf_BPrg7O^/>eoDw\Qk |d4qu � ���*ŋes&{\ԃ K8oXTylFiښ gyruQo_Q嫃)"y;eҡ{ϡOX'5L9b>b%SS +xk0aq+J/oPW돮R%9PC~#ڷSй}5߈K%��a���=U -m?Jfc+zQA϶&s~8zshriG}XgjMߤVliQF޺OnC +>s?ae@jQޜds[XQ)eˈW+C5vG}ޅJ\zQok8y9a�+���N~OQJՉ^7nȢc];PkJk7ҝ#usvd!s9oatJS]O[m&oV qy{ 23eySV2{ +g?;篂qJ^]#VFYÀoDNŸvV���ԪG`璼Q%v}YQ_L̬kթapcn V3f^sy^<dC}(K8:Jw'=׹TՍJUsB]] J?I~Ix>?L+v씝KUWVʳd==ŠaS=.QUU![0h@j&|ܴeWӦ?XA=+C}#~4=IEY3p!��a���(K_0k(agR[dLcf̵9C"XOǍ3S ]Twa4Fma0޺;*ї<d^C_Ϲ0rɜ35]h}[_aobv(PGŨ6`wkڪjhxOt}Cm'�f̵zX&oDA51_d~ΓFx}4zcj)a�+���xW޴7u 7nl(5?mI2N70T66V���,%<X~DG~S?뙫n-znV���\~/?8a؉S]ԩrcu}WTX8EX� ���7DX� ���� �V����V�] +bNX���3DEE%$$A b| �_aET=c~~ӧO +����z褤$12Ab � Z-����=JLLLrr 1DQVrL&{9a���@ϰ&F18A �V*..����JBBǏe18A @AX0riZlnnnhh)++ϗJ6����"ƄL12Ab(XAX0JKK@EEE����Czzzvv }%%+�FzXh4iV뫫 ^x!v 111QQQ����1A@b(Ę 12A V@AX0ÊtfJT*ryii]fgggff>~8---999))IO����1A@b(Ę 12A@AX@Xi4ZnhhP(UUUeeeEEEbsH���0b@ bC Ā 1,A b|>DX@[i4tЊVJeuuueeod'���0b@ bC Ā 1,HUE:\E++�FA+ҙVVT*U}}BbZQQQ���`#8 1A bXUή"BX0ÊH ]illlhhκ:R����0ˆA@b(UO� a�A:zE4���0, 1AU �t)Hkd���0bbStIEWU+�=t,����mX6J?W];����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/main_overview.png�����������������������������������������������0000644�0001750�0001750�00000130766�12161032160�023111� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�������H���sRGB���� pHYs�� �� ����tIME�(]#���bKGD�����vIDATx}uxG﻾{NPۖB)R\SwBABB'D!݅o΄MlKH0{]wݝٙ3g7s93{?Mlb&6Mlb&6Mlb&6Mlb[LX70c3)% $|n• a* Xe缴oe3Jz@`yo:I[P~9Ed\'\[Z ,?Q_?oy 4 A8ҺKZm)^.g'Mׂ}0m-\{CWSz}:/i}Uyԥ)^MyyːEzѹP2I,&mu m0Ô70b9X}m2Uy`wNT%!M,‚Sn\%W 4�V>W`WTx;R׵Awbϛ)}UײHϓWMbtj64L=} 5 6ڋ^ RKv^+DYyrΉ9TnXIePAdHʒX*e)Aߋ/=iϏexeL 3\ℛ:!<m._:Fϫ+^/?a!+AVFk6^=w0Y7HR.tH:nƘ"UUeK ̬ OmFbl43.ZA]_wݫsus8tŖD&aܟUy?hYU5ϼ/G}]uSQ;K_gYsZsހk`,OSSyԤKmhg=mq֐ȍWUݿ<ڔ(8sмC<<BS,Pgҥ^~AϬ,#Lc:}_{s5FGC*;7y N8".%%e7 o8qk7cfCq֍|Qzԥ-)ڨ*&8zI(bƧfᄱ#? UkdQ0v'm3%/.H[dB:V /ݫ ^ݶW{4ɩ~FH]OMpt~f ?EfN]0ies[E%%q+4yDhz)?mS\b]}RT=;ʞGM&촳$#ڌKF׫*Kն,`:"^u&_`ufMzY<ұDR@W9`71uF։gJHeף)]Àju\4uìwfaqpғ++zV,K Lgn\er.˴6<.Yc"@"UmЦ'}/9b 0s~\k95/\t#0+<ߌp% Kcj]6{&K�zc9~5\z\]f\{iy<yqeU;Lެުl貶ϛ)Ŋ UVDnt$UVk[BjD]EYuMeY:.(POrmXu+͢;ut۶!TT<v w>X@VD9`VgFONI9JHeף)]V#1-0˚ϑDP'G[lrRG?:]{[OdY0йRLtP %yi?)1=R 0Oǎ(VNuPJʱ ppDI䆦&@;v8+ÙuWk;66UۜCzv:F}TOg?$ruR$W/?,¤70e%%#+_hΤKӠyeV/9/9ZeRt)O u|%eUgU! <JHeף)]X^7qw6zɠtM*_U~yY=x=KeiT&ɣMWȩ~ e~0{CK ?* hԺK猭}/M�1/Uj[>3[\)|Qfkeݞ7mAaE*r[~KO˟zueIJ)k~KUX^2UE3* .P?͘h;xSvR]wVujL7? RGBfI+v#2Jˮznt\-]<R9rtX7Or^6ciWYQť/OFD<ڴ,]3HMKW95ݯeg=9ٓ|!nսωo̺ހT{*՘M10`ΛUKgƽJu{޴}ꆵ~UTCqX'],uemfLWUY:.u /pƬ xܤz&u{lw?s[N SwV<teTF$TWS㒙;.E ?.7֦Jor&6{U&rԵai7nh_.kWzTA1ݛv~\6rjY{+ɓ,_7\V'Y=z?fh\{iU=" JauYcfV#],u#0nVώ\~mtMm4)ۢZ.ȍQe%WYwݩ"˪"ԙtۯY4%Yz>eƭGnt^e;i;j G34iиx]gd<3bTe)OuQ'Ju Tױui((*f9lXGyO~uiҵѥ2k6hj?@^FNm'* M}Ƙ!~?bl#TJކiVp&G9[uU03{9`S@LrOj(ӻ&]jG)ņUफVe']"R,oa;~<U3 QYΤ= ǝx0|9MfN3QƟ!YmSvqP[CuQ MyʑCC+OWꚰ[[`& dq>h]>Y(DuimX]*+S~N]4daϮ̴Wmt?nD<3-yyձ{A 9='z6,<J. g.&6S@߰JwR'E3C/ìڅ{y9 ݼvՀ)]3"j,39e>;Clf1>Or@}*rnKq'Yt}S/Pg]xUz'CĴq)OrQRVl>&?+Xƒτon)7\9g僬Ii�mAgmͤ:. ':b5(*;#Z֤pBf hH{KKP3 +HW@@@@@@ ݖvzh\ҥaVQ4tC!W~S} K4]zaȨu[Ί5ԤťW}R%Gm+ H30u:ӫ9w^(' wM͐@lss#CqPPtҒ%HW@@nHwϾadlen-wh$*s67y*CCHGb�>{t֯"&<y:'N` 62KLLv4l:]cnE*SRRs_7x9E9z<cCڦM=#ǎc_{kz(M^31aa aa׏7.20vFjj^}8;:7qtYՆt:}.CBiVtNV4Yp1J;ކ$]U0ҙ=ɵv&޻55N;$$Te:Y!ǡ:\b%'6k(o6<O;9UeDD&Cپ{\d_6=-`Dϗ6Ϗ>^X^ҥWp1oyhET zb>:$˫);Z"DDFrkQjרks]c^,J9>>UǤKU3<"8)) ?1tmӦm;qJW꘬?:u^_{¥˫Ǝ-{ y~֧n^}`m]LՃZ;zĈ7*GVH}ՇKC䞤<UFhtCU\U RՔ.o[]-91sƇ蜲:ݟ$&k,fr y7m/m}ux Hm}<ɒ:1阬)e]KcA,ڐbg(aoNцdyt%h]-]u+kk^KXrs h_\ygN> ,d6Ϗҥ}a .i| i܊ъ֭M!0tr<t?n1][- z|lS<r:uk^{f^ި0{#Zg[GjMڮ욺S<tr}Uri?Sab)ݳ/Cr Ҿx ]nLXi.MPQL7yS:u6vvJ!7CLYrҬM4fNgRMcs4:f$N|PN]护CҬbWtUj"]emWvM]+̜šiv{xzUбg/kTh[8H% S ҭ 骛lfSu-xC[Ct+ HW ]Att-RhdMr̉XV2MHM@tr@ o lbKuXU-ȗDOaH7"ak(Z7.<~xCEH[pC (HέXT@@CM F&ݲjV.ubM˃4ANj q0KXMtb[&JtoR@e@h k .YCQ Z;8==y+.o-x%6M6a/&AիWqҥF۷.iF炂pi4 M^oHW L(Zڐk0w\<~/FmtiO"_8 KKK.lp燀�0nBnnnכ ]e*J.˾Y/tXPTT(fr HpBeozSE:^ARl?Нss\K1xHls3^ 9q#ƌŏ={Ͻ8mzacXjuտdJ9v!]r2tѨKJ"T7 ']S%?w3!<<d(((hzD56Vk_͉t_N:` a߁>}HJNFLl,a-J1=pWSg̙[#q2 lJ!\ظti\SF/.npp~7O#O6*RF#]$Dwii)'�M2',IKner�###_8nSԛ&;x~փ썏鼲N5͞zO6k?S}.̜;^aѲUhL:b΂ѧz폩3g㾅eg =[Mu[[JHH[ UDغ &Ln޾So'a<OLLVHҍ6iomisAy3yYu!F׹lEҊ(l޾ .g㟛qKIeeFFfrF޻;`H9L"2*ő3BԄ T<UMCsdՒtҍxh){9eN �3 uAL!!|)tIܣtns5Z\vܽ'TenU"峱$yϬZ'Vejy-df^zٶs7O342NjvS*e ˋ:~�f\R;CBB#]j6_%]�|5^O_[`E/%ZZ㞅l`?�fV=yNL׏Y9ψhR)yӸNiBgJj }~%_%&1$&}Kx ]+<CeZe:!NB\<Rbs&kk{~cbbҸec@6ErSԛ&%w%YedP)yy,u=ttȊwN $$5eY%t5sί wxXgӕ@zROΟ!kObNjaCs, ZUseNOHWͧڨ>sů'✞^>AC)ݳZ=33̜;ڹHyIW: g7ܥ+{(`x.7 60fDƐ~mqr0{f/<\</rD&ec\0WLؾ .]t%%%kPݚHCCC9h#ݦ7M:v䖥c@-:GiNpǻ"]`U|Db䩋ZdmʭpŚEqKy{??wrG,<͓un4N]KאUY;ZV&mm>mdES;Օ@kJ%'4A]}n2j4X_"F/G/# yy36m3 wMa^h-lìCS KbdM\5+W-,m"'7Y/pɕY&#}8OSrEfa^cȍNTDYLc@"i_9e"]MLī"GYn4Y^PFMQoڐ.Ya4 ]Mt5n %ku[r9 $ _KD’u}NZ<a/Tw!:%]i"]M6_KVih~TkO{\pf<etµgVɭZ_ıg)Y4刍G>9+sccF%k"7gʗL' ,7M%= 5O{Ӻ'q�vpgo4\ #ݦ7mHp^bi$i/5uE(G>:]^Vtcj^V"BcS:Gを=<^;Rn]Jl|VeLL ^V+ůl"hvq?5WsmrMi/󘮦iM (zơ8#oqFJQPdG8;OQ^Z?jt%DCE-:;;c߻cǎ0T䫌t޴%]m:OiBX0CDU4GVG#*T|"M!Y4M$gnbO&Ϙ߸-A%Lf[ʵ4v4^+'i ;UCVy;霵6iomՕti2E[wT='4s|m'Zi d` A2*Źx,yѮ(d(ɌB^0EiNDNɐ.}E"h4T:!YO(TSԉөnuK@i2"(*nn^d!t|n \juLoFj+.O'Tk{t}z,4YZ=Cn~*>M; T@c4GM98(ddٲW k1j+6a#dx|DT&MN%{;d4 0jxV%#'Je .D3UmM.YT2DFS^>K^ 骲%<M2([Ar*GEi>ʊߊBn ?(b�\nmI+:{"4 tNl"wnyjy4KІtTT"9ɖx"-=N|e}u d1˯HWިf>ڦk{ez{@UD۸&+g5h S>|wVj)"U]H%nMt)Q ʣұ"!fkg'rty=T:ҥPDb&UÇydMGqǰv8׀5tE$./Gԑ:QE³~u^Z:R@]4( ;A2dtLydegVu! +#]9hJWEIWՂd$Qd;{J5k|,HWQt)tLI>0ewR$"] eB{zr ҭْ.Ya 'uipO!$4YYɜ22yMT VOxDRDF!>!"_rO{zz]HN: ]NH7#MtIoHW,l- HEB8HLZ\kmt%:n"&PZ?ZXcpvqB\| 'ʥ<ҩLy=T7ɠ8iBtҸ."h?*Y.U fobb`em#˫FeިRݤ t)t{mtE$ H \4KKJc)FS.;QMؠ"pÏsfq21!>>Vc:Ae롺IE钵Kī;;Jrb8_+TEs^5+/tYtDҔ{mФR$&aJA"賘 XO!),Y]r+)>$:xA *XFDd[ |Q‚|yXV+6+I侹t| �yr hJ2h"]@%Ɔ @0fY{`{:4*Q.H'ґtҵ[C.}g<ogyȉG@z2odSƜ* HnDeehɚ(r%o^N.E#1f^oJ㦰*ptkF8vt˵mSzndQF4JKcrX[[?CL`jvE 0*eu(#]mFmH Hn'KW{MzSGZpR)QsA߂* F/EbR ;Hm;kՏkZy _MY(}S+?st }J9CPi<oM)UkxYD:xʿŭr A. |n.)*q93<.r+sAK\f2.2QMaS"HKU W#tϟaI881 GSdHȓ.)AtC‚޾xݛ8td?'[sJqa |2Fofj;tA:!hJ'+ӽ&#]C�OH5wƱ9 E< KOaB4g7.^Ƃ[wK]6_1͂R@xEaiǖm*IFt;OMt#*$6;3LΜLnҹq2F)A!SS,b!-9().Q;dH JJJΕt,ѧ-dx!1Pǥ.]^խti1VVV NPpt?}=q1ޏ ̌_GdnWYPGFmHҍtmtJoH~UtR)0?EUњ&7o)}ɭLGOfARt"9նӠhRCrkyq\E9T&HIB [vtKV*ҥmaM )ҭqR}D)Rdqͬ-GAV$OEQa'`^K'%˸Y =[WbT$:VL0(uk8{ZMndQFGY"^9,--+?UbV#7GWw'xs-}{߸w<-_(AUr(#]MzRzBtmtLoHWhQ,_7or7.EwJ"Wr?)_,]ADieXZM]H@Upuj:umfIr3,*,-o~^.'Z-XTT]9H uFR|RE˯-,(lYY͇t󦎛 %"r1/(0EhڦS$Q骂'%/o78?r#7'_d{^,h۪+O:Qfj{mӵս\oZ/YҺx�M`fir*$TNRi_uDF/\cE"ҧXҪ>t6 qb%+@I},ْ9IFeާ @7L/qQ D䄤Zh2o Ko PH[)v2ܿrNjt gqNCUtԑ.-_&:C jmka^L2M4w UZi"$Z&x6&w--x z|ʦ `%DqŞ%]hELvz+ HI k)<Ydf<y'QFƉ?78da gk{ܺveD񄻧[S"Z1 Glt `!dK ܾ]E B6Ei5{@lٱF{ff|S=Jx(,-8f k")9&.YʹxI&Z~v1&qyti]W)$oK p.2+-D(c)`bcɬD<t…gpx{-ZeνpwD˂,ފMtɕF7uld&(#]�i,V4V"u?1[r#H)y@g0{ *U2DyQP(-DJ#LOc~YbX;m$ꍥbzNs`<<>W~9(+JAEy9.钛:n$<<Q@u 2$U$["SE840H)꭮KcV[T@@e ݊gߊBX-*TÐn #|冡8? eũ(AyI:ӽlwġ8| -k0iؽx"άcøuN#2<A4VF5eTD* u۔VҕfSD(щ \[QQfq堤 OvjotPVV'SSX$$�_o8BY^ nV0o/,;ڏXv]pήHO3i|\N46(ͪm H!SIWp)>2mz ҭ 閕#73 ORe,$'15Cphߵ >c p#!я  o{D ;N|50Q ]XC5eԑDB~PGMIoMt[b@'ݧ(Bfj"ғƈIr2q~T5/fY p}Y3z< 0뗭0Nu/0<q�^HEAV \,<!'+y9YJ-݌$x6D*K.JZ>1@ߠp/#%¥pEEi?M^oWD!Ӌjkmʳⳳ) I!ðiVvϪOtus_uౠ)6S@yIIJ<"Ԅ%2EVj#TE.f"ǔx BO<6و#Ga/p 3^Uc n݂{z!q J/S@8;6{UNl֒} YO(ӧy$)8if򋄮.nJߏ5uitY5d[kS6dniH^ߚb8zOZLE!  xn-eS')H`DĆ#.Vt#(N9,OiQA[TX2^018\cڴg?ņ31\,967_ź`bG+;Ą#'#&ᖔ %.nplԁ `"rWHqP(h@ј%}cddɗܼ/dREV[߿^Ǩ9=j*#B9UV< Η6ShG ai@mEV"Ҵ<rK+T-GMA<ɋ0io{Tm'"^ ^"HFyI7/;YDc_x!$ G #0$tr7<ICY|bUj.ggVZ*|]aezNv0u&`cn ;ww=p>L2]~ [7lŠ~(#rtcܼju 3)~pd}K\  R%W<X Oƒ{U_$Nדns[mIHw4i!:&nֆtBS*&7tԯ[P|gZ^OkHKWJDV9q3C@` _h_{kmfn(K*Ʊ&R U x^ҥ1M { ow'x92sB+}[QoVJQZ)$<:e%Hb#nΌx\0ٲ|-+G.]OнkLm,k7c߶=g|vVcmet"և?IG@8=056j|h-eK!8$$yErQ tC]>EeQE@/tթnu῎QV.wA_#WerswǐQ-342NH656r%jNϸsnzr878X2³aAeb # G 5oZw5Yfr&梬qiQ>KP^Foj fS^lMo߆k}:޶Ɨ 1yd|WCgL7[�1`<+/b8~8DLNA,.; 3F&qACc"w>.D .st0o^k-QRB4)YŊK,ز7xrU;?zTc"^IzD$WCzZ<KIPl]HsY4HwYLUߊC(:(3@aSQṅS<e(qa Y.(qGya�ʋ,e(e̚>z p#$EFz;;`Y蓎$a;j6^y |Wҹ >&\c?~3~Ǔdd3Lww8 Μ0x^@.͖dJKIEQJrّ ,]yՅH?,]Yçtu5rmnoy iu8+.!ϸs&";uh\!!oCȎ4Anr,Ð(LB_e?/fivGQJ$'9(͍BiA<#4f ?f?# NeyHAFb|alX.w}֌l۽._oa?`i|;vfBd%"61BaEFO+8K408!&Yѹoq_+D%Ȣ_J> J?/t5.DWJS5KcĴXSUA AW#Ɩ/x\Doxt"opw#GKZ܂6 '[ x8NvCC >9><Ekq|F #{`p�W/ĵKgq�Vo]ば ?D2r@q^#}` G~J̜:?w_':U7? [m0qh?ZG�:`2n<m° 7>dƘ+wU5ekʐ뭶KYD|j&nXZcw)|U%]Z͇H̴h]d'%5&iX]q^rn_N?Qo""ruW^V1s##P/c&H <#uA~&tk |b?φ!"b!6.b!ڟF|½o_cnطvK`~8}v-KfZ= O/ۭ}t8�C ,dGx^ĩ]j~ t?o_Fo>`oƖUsѭkڶiӇ2 ..k-ƥt%RRB+5lM&@6? UENx�nfs_w.�fW|nsAbC⍤`z9 n#1p; B? :}5 g6~,/+am8k Do?;A|CN6>eWͷŻoF>`Vx7[ouFM'W'ٹ AH"w؋v.}YVVn gA$2mlٚ2z+ HWz㱯;ƒ}`}N, ~s@)^+ 8zh?؇C[n4`N=[6ahCz5^eVkZ+Yo>:|>>l۞hqG|̎W{^7v3%sǣg㧟㣏:o:#Ɏ?W_|ESڵA6we=Ň #= 9NMDth0 +_dkt%W%YO[Z֔!כ ]AHW>fy.?䡽<nAiiqpز[6ĜӰ~ ,Y:?vƸFaŘ5s2-'74VF 3kͷ-}vmH6mЉYG%m0z_~%ƍ'2~uZo>o~}+ V7qŝ"/ '݁_?xVK4k:|BM2#R5ٚ2z+ HW:[CjJ7SЯs||]|X53f ~ûᗞп7FAC#?�my [wZ1k7Vx筷&#fom?ݾB;` "6 F[akL dվÿ orj6W5qw?x^[kQb%(+՝LNxdxC1 6lMtֆt˟܀\98;Bg]w|=FFoW_A/}7am =#|ܱ->~>i?iNtGᅨ m}}my5#h;h>Gcpbb817VtDo?F>{5&#{o˜NpxFx^is+GFcbof%x4e7.Rqgpu~d YZ UG9x`u۷oF{wzOq@A(^yyZ|ofV[o[mֻh׶~!Z3K?g3SNpAX߾H ~ ǸB/5#pB7{|Vowgx@pqwǰ}pdn 4o: .66~"s4 -..FNNNӺ:5G&02Ҫ[Er hyLhu5ZP~ԕtKrGkL2_?׫_0(_a<}C|70p�&N9sbĨQ٫z/C~3'cذl6Z]pn0^F{xx-a(ȈAQf#GwǮuS1Ѿ][fkt >}?w]#ct ׬Eġ`|70q~n{aa(eJ!] -BBuXfaq4z= 'peiCe ]AV0|p|t#| _ D᷺Y 6Wfa矺]ѿ@L2k׬07{ksx:ÝV榰4avGsc=</?2׎DNX!1 RcQDf"3^&{G`ճ'#OѦ͇ܚ0v`WlY<f0 1u4ؽM?7cs2p;t):u #9%pҕG%G-0fndy^%<(V.SߊݜǞPu_VJW nPWoaLv! K:Rez+ @>+[@8 F`h{ <\:"ǃG `V7}hx 0ۄyn,욊 +Fc!X;aV͘�H&Y?+NGI~*J R@{?�3qh  Cw_2>n~v޹ql#q?`irիطc;Κmk7msc7̟6.u;7/+)~!0OycԖ j#2\|L ڿnŠ%%!2rKG[W8sefnQuڟo ^!G;;; h?aq6iz㮎ぎ8z(|}}k_O "3Y5ǵ0snNrE/BUꏄ`O< Cmepћqu0xm#ɎƢmZ\eVc¼<*De(/-EYi!U2Q,�WܺzGmÂ31yL7}'mc|I#5#&U p@5\AF|4"`qmڀ⡥{ןЃ;o߸KuݧXn 6 NN6* Qsbux=eS$<Ô`niYuLfi U|H+C7*bժUr h~ #}AWW.\d1gX1ct 6"7_;716AvwA;"Ę&"axnAg(Y4 Ʋ#u87]5B|ψ/35E9(/Ei# gGI#|>߹;Vª1g0_u~%:_}Ŗ9qND#.#')I^p{p7ûp6ANߣO?7[7%ׅ*,] �x)ܶl5G}[plڲ!]u׫CYuL+ciU3W㼦CG%'Qx VСCq j+ *a Ř}hh(_=ޖZMOE|tRU$% 1aCعp$F"-!)DDՖ>myccXbۃF> GLxYYi)̺EEEt(Ȉq@>]a{ma[ 5:})Fu{gĘ_cpbr}Q'ȉqFb<Lࠏ^}=6*[uln*9w+~⢡w `lE:|?6!+Ϻ}r3o䥶ld]l@R919Sյ.;pttaÆ*4h8\ot/39+ﭬt/舱cݻMe%(D^v'L>ƐZ')qs~a98{RNoJ\29q&0kyVz2 rPZRč2 سfe&!*1ܝ`iz /_Eݓ8uo ^=Fo>z}3g/+3DҒ@磘 ~Px8=Dc$3bڼA.+7\N@k vnFZz*ϞӃ}~D<6]aqGmT7 wh+"':1Y(}t5Ɔ/F쨪G[jt:0>ֶtNf,כ ]AκViOXx1׽i*K81栤d(7ia̬X}=]8ZeAj8ZUgʷbd?IBlX�]%ϟ<][7b)'tv㝷A:`.�7.Q&#-.AlG^ԱOMt)YLУwo:t<r’e q~ l)u}'l7pS[6խt5ɦg=3cڟ2ck1`082UH2#G9үsKHz+ 2|ry1f8q5>uDr>ZQQ*2G)#bf fg0 8YqHO$\ˆuEy17헗+frRP݀>,^ڹ3'+}Ѿ=|o>-rDǏ?m!:Зɛ_W[#;9iHgDGyu/KԱKF*< z}͛F{Z'0;fse 좶l<HȦ.`}|8h_Q<8}[j˕_8pH%_y"r h[?ԩ"Kz`ԨQؽ{7_Ƴ>>R;FeU$ȗ\dr+PZ Ou&E<V^^"f椇#1 ~𳿂Gatz=lÇNMx6x7moW^iʀ-lwf&%"6б㧘;u*:].PMh_=f<֭4Z?.CtLbb1q-<Q[&M2+j+2ЃJ ן霔^xBceUU6 J\=..q~N7A͗p6ےn9r$vVQi*a+RKع:F2+( HBj |l `kN,-1H|}Ĭܷ}ІBB~uȽ G)N:8d&2nINFx/\0s4L`/1_vqI:n @Lm!#G矫·ET\ďr}w5Gu $aUeHe``g8&HW@y[o".`X~=ݻ ?,dnl4[^bffF!> &p7[c;b̯xW|>hÈ#tڼ.vuCJx <q!;#"0� E'bټyүW.uqS@a=.gqH8/<KG_e L>dki Fz+ @3UFz7y?1he%]J3Re@<~ Kíؼa N_۶k>~@x7yF$FD 9& 7\sz8s ~AHLBZlPer"Ι4Hj3ss̞7y ^pU9T:ҭl-B&r$߿?x"A4'C.]5ukPY)xQ1v孫8{ٍ+a6d>৮7ߢ]ONJ}'o ]uƓVf6srQ@k<r%]ޓybZ秺Iek.Pt)5(ha sիWc#~a|$áTkX?^OєBrl4"OG'ؘ݆n<zރ[aۦMXl9Ms:gPRTҒb�_TW. 'ѬF%]r_J+ՐeV"Yl&Ze&Z ];^iE366:G/^n.,-.Dan33MD"<^znBaW(|[r4.Ҭ8)h>uލiah|MAB@@�nݺ%K߾}W^OH 4o%,YeH||췢 e̺1xt5)ƀcYr6% dR4*ٳ@De |xyH~Fw/S m"8Z,1@$CndkLP2ڵkUzSEO!!5AtR-?MڒMxoEZV"K1@knn^c"US)C7e(W@ lܹ/=H:p333Np} ⰰ+-[S2IwFJ UrhgHexvҁz#ݘ'.$MY'% , !LndZMA UFo-mmnGU|@mVg;*ZʈWcSʕIJAZXbfיt uX5k%h,\E+EpE HCFpҖQU$_U&],mí]e@B5OBxKݐ?"-7! &H' CrMÓ.AqM=9F^-z |t TU* |+ r*#z']bx9Fߘ. p=9e*d}@l%]E+WgYQN ۫<EX>!ήFYn+ʭ\ڧfx@@@@@@QA+) -B<r}[wo!(8xZӄ¢B#mj2kHWby{/ PETZKZ8@yլJtL ks%%% V.x3Ҡtnq [Qq/\ՍN999 7XIvk6zx9L5O^3]ϳQMtPTWS]u*2 4_h3Cgϖx{UE&?fo͚t7sκ~6gm#؆6cD̨Q1bEAhkw+bpgy:ũt:[ߪztuC>=u&쑤7߸E۷n;Rpczh}C\K3B>"$9%ŭz::t)uC>gI@6C_[DVm_>rn*wF}{m>dg9sCԶsW>{[^^}p/"nRinKӈ}Zl9mI[%W)ѭ+׮#Wt(&VW/YZNi(3?xHthʼ{϶ӧtJaGM#w}zT3N9!A}<t?syFw 6Ӑskt.Xԙȶlа/A-[L Y^ί~ԑ7ٗrrsE! )xZ#}/(i,c#ڻ8uZ'/?. ݗeѽ6=oڬٔGUUUq3ζ>,|#M:M$d?SOjJ2%Dx=t={}xh "I8Wo~͜ 7V9 ۾K3׫<4˲^Kӈ>;~N͏azl[w+׌޲,2FId*σ$Hީ<�/{m>#)ۧwLX!lp,G"cCCRSS{Wf]GU =nrɓ'v듒gdjߵ-'m^年ί sC!~uXFi1cI^t]=6ҭTk5Ξ;/K){md{ a<_YYeE+{3t1#1y,"III]>l&bʹpM˂[UWW_vfˠz1R5KR"w;g>K23#ݒygΊ޾,-GtŒ1mg拉Y}FBwc^ C%ﲶ>@ 7Ѵ,]z'D#SjLۙ^GW.Խ'ݾsGs=6s;?miDOnAs[pXgFԫO޾,-Glcdք)~#d)lAZ+Cn$񲳻DGӲ`p m$ھsg^+m޶uyM=GvhtFi'=}2]Po{0M=3ҭÇ,ՠa R#=Fai).^B%=ԣp`S2YZsܺuKea}bajJ(b51>-3R(ea}bajlYlDHD>w t=PAa. hGnII[͛egw_/  TcKĖԭwrF@Z>7vg.ޡrܸqC]o:Dt ⅷ01fbA1<t XXXXXX\H#H7//ɥUnNN KITx\1a,,,,,,M-Z <u7EA{Sz׌0 AFs+`0y: =ɤˤ`0 #En8..`x2"?+@222 n2..`0222 .ns#]e+gHW?JZC5Bzu0\i ߸ɾx+>;">_W}G3a"]vctvF@lݺSn=(b6;LNMIS ާ/-^-%1OҕeS4ZMy 0eLڰ)K}GtJR^ёcgRdr3\:n5;~=`SvB߼$jZ002"]kjӡ .*o@0e2ƈ^gwڳ =Ġ͛7=+Ȑ+aDAVO;uȌa Ӂm!w(&VH}ͧe^ <oГ^R{+*hn +.y3J<tA203q[xtty/_BxfГOLJwmp z '""`L M6]_Ңe~c9Ou.5m ~3fڭz mBk6У vٛ?⼳\.ĩX [o>Ƕ(-#SS{nEp& kMt9OtitҴpf"M2II\N" \_AԶ-z?'O;אaTV^aG=+aDؿ6c)[V6v*۟wN #:x"HWCl'GCIkz41k"]e}ax[ZVKн6i,sB5HDEtt =]ʪ*K׮S;LcM D|>. #RVWÈtp4Wz s@ _?xV!ՆM}-zyb B2᫏oVMتsngM̤Rvn汘ttBnÔILJy 5 6uTMؼ˰ZVys\r> K=3F C$0"Z&]r$3QNԣO?=.1`e{}.U#?*#pA`I^$H'#/7X_\RB-d^͐?CNo�aYv^+Cˈ&Cشe*VEbrS"l4KUEڍ"bRUU-:LН&C7zc *;L-tw*ܾ# bQØVy/\,< xŌ&2 ߋ\rc (xҶ+Cֈ Ψ=aN_+C|\#䄨H!<gDRjdO:v! Uҽ"tz#s16O|xOwt"Bgma.<ŀh,02*o^`ū%a7`0LLL�r~x啫C^1 ...`0222 III`0ttt III`0LLL ˤˤ`0 &]&]&]`˗b<.`0t@ ܨ=;T^Q.> 228>"Hٳgf]0gіm/*47ҽx2+*¥AT^^aJ i=HU@v"֨5O-PUwo% 5">_k׹pbN>95Ud>}iyjzt^7|EwRRo]]iҝ0ŏ.\DՏ,_ASϰD#Lm+wK4yLI6Eگ `3afc2J5fI~ Q z;J֬5tU7q4T/)%5)2 -ި҅L8 5Q׮I+ ᶚ2qPlC}[ԹuԻݵg/-j\% +ωԽ8-]*BQZܳߋz_9hW|uTOSy/ +$4L^wtFmd^ᄌzY#`b:v8+^S2:o$&RԾ?23 Gۜ^c љ3"_})5`jjVMڼuD'lZjDg؉,.z?g6v -r'NAO>2o*m߹8ca"wGɺʎ(C-#liw15y{ IeCFLzH7 [O+C:L޻϶m;=ZֆmGׁ~*/;vvxFmd44w@ׯ30{^#岐u}ia,qyeDO7nc9 6/HsH??mJLQB&]<¢<;)*ΧGeTYYA7n^[$=#Jqs ݴt#{mtYsD[4uz {=,-ͣs㠓"t褫^Cޣ $( [&#O y^d|UUբm/\p?ٷ?]^yl7/ 3*);VK[D=pD !VYO aUrr(yTQY&5`9/{Mٯ?޶4zYViiŨ1jCLi0 :RF!RUl_s*®8kһx,&ٖ!Ġ'ey 5d8~ǥ<k-h}q'{CyV jæy#0uh器y" Z=e_>gfNyvnZ5閖{ivr/+]zr$ɥsl}'g}4˯ ){Bd[Σ{CuÆt@O`_g_>7A Z=]Lk{md @K=?tIyi)1s4ԣO?=W&݂<ɳKBJ5KzNlO Tiw(f{z@nHGլ~='qL,@h9r3gY&#Ow/iݸ)ka 9`xniAvbͦ-[ESyO9]Lfh}cwFSXT,6EdJ;JF<xCG+A0{-qU[5"|+߽M{L<mڼ6Z=1BԐ # G cZgʉ0zdnl\!6xH1AyΕ!kDHFwgm{פk| [)c9 ׇ\n`7O@#y2굡Fm#M�FݑDЩ׌A0OC޼n06\rU z3Gh&]d?Wl|$Hո(*.xd佹6 FC&ݣ)|SdˤxB<+!a75ٵ@G*BL I׀tcڻw=o/{.C8ؕCD>) VWX Iœ.ޱr!`0r=]&]`eee0 ...`0222 II`0LLL ˤˤ`0 &]&]&]`eeҵ`026kEQuZ]QigŢ>Yŧ0/[.J*$JrXjOZ!]& #}rԮK7}GW]<3 2-$Vй} Wd Խ'uٛvͤIgd:}6UVRUu_:niҝ2}&m!ꔢj¸0|3a6{(Ŗ%, K@g @۶ez"J}%Uk֊2V5zԙL-tՂ:ktQQG0m5k1,QjמgCrѹvFCO`Dnc8ߡXQ<6ږax<o$&RԾk e޽gۿB:x ||]KQ^C=~(hzs׶yM2qzdlH|#9=Lt?~L[wDJIwQ#lIfГOLJwr+jGtG-#ؒxOKT-t=/@xe!B=q0k懏mi;Q,ۭ]AgdV = {efD8e~|щcm+{+dJv۟wN ރDXz?%V39]gHk0*+vx ρ>9C(#35K[DG=#3f-En[Q"hz6BLB5HD=d`¢B|ڎIxUUUY w0϶ 145 ,\pO *eW65][}|h: j<2eFH̤Rvnrt@ v'RLteEW9 g<]3@ʂ 弛;0,}5rѱuH7<tL9ad?ƯQF39݋/S>(/?fmpeI7mQXX([b$Fƒ~F^NFt> .r\u!<ܬvݔ},@ _-HW#B*,*Oactng.k7n3^1AGI#adOwvv}Xxe2"ue1�O`m ۶y43VQQatŻ_ ˜< 'c`<zp apxȫۭc@zrl\z)60<F辚!$S@^3<3L놫{+9Exx`q.&懊Ghbd,G"?yxy_-02`0<LL `eee0 &]&]&]`0222 ...`0222 III`0ttt ˤˤ`0LLL ˤˤ`0 &]&ݖI|^P4?`0tt=BP dt\9fIJl.eE)<TAš[I.@AaMOtW]͝GSVWdqVQ9 #n$P&FHq-tˊp?PlæQgQ[d<,tQ gDiItr3\:nYǎ/F5!>~nK']Ԉٯ?ݗnbCnyEک{OCQr~G㏋Z<P5rexȺP?;xHWaC7b6 Իky fp1twK}z #h*zPLHQS2/Dڷ_,g޽gy0l0<|SG%]D\RRl8I. ص[L7122ݻw+ZV0?-rwz| S7UWEc[y;wqaZUV6XKBp0&&O.(haw\a]]8uZt1>3N:gzΒH#(H@LZF'Inrj+tՀ!;o߾6:yNKKm 9[8nkQϾ}piP= Rv12+r55t˗Hz9i+σg9^niY){}v1eL-tGl EPISPlh?2ՔzXƤ|s6'U ő #Fk`l0Ϝ3~55O<Yt[!:]EVH^晄sp ~0>Խ~-¶2| {XW߼ A!By+{YR_s<t[{ b` ލEXZ>+9Z3EN|ٲ=>+y[wD2jF 9b2"�6m*JlHOFaQ#\{;-nGW\RB-i0ҵ<0z6;c'L2e/�t Ø0ǣt-QSa{@dX`C8pdeLxLĤdn. XBr20 7#]R#;'Gt5cP Bi>܃7t<L tw.]*AsK=[NCt[g  ˤ`0 &]&]&]`eee0 ...`0222 ...`0ttt III`0LLL ˤˤ`0LLL `eee0 &]&]#]t3BCWR|ƻtLx9-^\CeTJ=*(,EwuL\1uy@;Zem늧ې7s]|IcaS{򎨭 t<,!/=ղ$??Veu{t#632Z' Q SzwixlLF A)7|(0m5w1պ&Yݵg/-j\Eo޼a&ka(p1>|bbW^Om˰3HQ  e޽gypU-t{*n ']6:a{>stQ9-#޽{G^5aiEp2SE" {eas[N6<}*dTھs5hiө^Ңe~c[7׆mG ҳ#=gw�)+ ::q0@c|z>qIOtL#qæF+N:{Z`m!+SR=U!k< C/ e}Vt HaIx zXZjsk2+l7x:ٷ?ڝ. GtV'mEHّl>c55t˗(z9igh|PhFC^喖1ҕw2B&M&BuBV^޺Q.GNi|1ezLJuˢ +ImNs<}Ƽڰ9j< =Ȑ><WOJIsˤBI2ƒ<pNNr[9/E]x&V<]G5dah>Խ~-¶zȥFlF捞& 0>1DLt;€EtS[ek7nJUU0|m}C) E@… "4\e{}NW<ԽG>XZ%%46n 9b2hiVf DiivgWIy`m\Dt֡# h' ͤBH> N Fno'OX"]GJo%ög0KC:(!r$v%CG/cZnvtMJp!G7xH~3,E[`ANə-dNf jA:-=}vt&KWAqD/БW=N¤BE*<022 III`0ttt ˤˤ`0LLL ˤˤ`0 &]&]&]`eee0 ...`0222 ...`0ttte .GnzF&M2UT_Y>|4>/[.J*$JjTR3ˤY0'gWAaMOtwK\ΝCeTߌbU>3&Vй} t[ >Φ}xxH2N4g~iҝ2}&m!ꔢV(j¸ybcּ`OϒcgZd%=g0z(ue',YI))J֬5ͮgm ݻe0!R~6emk^Q߷cr9ѹxDQik$vuSw zCOE2 `b:9S,> Fb"E/9=;cXo78cN_qg3ҫ,@"$c3_2P*+M. 0<qtg  *<m:UUW䢠e~cӤ0?F4rwLy-znIfk Ĥ۰pFХgoqO`sBօR]]8uZ5amضE!LzzJl"8)=d4`'E`t,_AL'#z&BҖ-XHB.^b>+?wN 3LFnאaTV^aw%] e}ty-z$]Wm^L gqyfuΑbً/mQ<rҚDCFBʠLg~a!$άgm!۶sW*-+̓xуsf2_?KV(,ΒnP-,r&]>9*esT}-zyb B2᫏oUV%2Bzf&0ssZϤۂHwԸ h. =u! א ]tj}V\jta{ksftKot&?Ưzh:LD˗(|30As,`t1#La`Ȧ-[E^Φ'rSȗ͚`h`!i3YEKtlWtgbc0'x +W<0z9)a$ fιJhuM)&h*R;`u+t[ B0 m)`"KŻ_ ˜` Kxȑxqq"φ>R 0hj Y#B0;Їm۳%j@F 75srDx^3GG:-=ôιJS7 }Źt'%[S7J}L-t3ΡX |`0 wIIU"4|Kc$+^1 ۸`022UW$`0LLL ˤˤ`0 &]&]&]`eee0 &]&]&]`0222 ...`0ttt III`0ttt= xˤq ۛ%]~zP¯ݤ;!BаwQPo%ܖE4}(BWc&L+׮s'a>:TQ :׽O_Z^x{<&V^dȺPK+CB-t$eG 8lPS&QgQ[dJ[<,>r,^AFFC [xf]}NJIPw՚f3̤BIcD:gH5Kepnn4)?\EowQQ/P (:jRwK}z(:FQNZ:}1jStj=ĊT?X=gktQ-Q+Ft :Fw#QWyA}_x7N@{Hw/TGϑ3,OO%1ׯ#n+'ݳӂ%K-tz'ۖmIfГOL*@+OՏ #;n3Jcnq(|~(|2|{EAhz}cEg�A]?Vw"f rքShmzTY`Q.={ ҃hWt<q0k懏m;d(JȤwѫWv+C4IW`xB̊~^HL۾tL#qȤJH^nt-+g̙KUU}R<z?y<(צC'KFSCey.EȀWGO<1<ץ+WDHҕv׋ZFs&]G=]¥A#I[RvfuD뾾xS#'H Yt xeeI7z QGܼ|ѹBn&V@.]",^62) Lo2s(k{ g ._Q?�sV os[<]+:bàb@ B2᫏o`4=Μ3陙{@Q/+t[CII Nf<]c3+.{1C Ë�71)Y紼>mW/eX9[;903rѱuHG<tL9 #|_-e|`=ԣO?7)+Kam{53Ωt9]uGi/EQyc3EN)}X`UqI _Ķ>pAX-]e ?=gkh<F�y^4¢b1z9)9BvZ%qtѩv#VUU�ntgI!l<ܲrAI6A0P"y25cBin; :)vȳ >R hqe L 0 #GkG9[O XBnzmisrD^3 daZG\%[)~ض08n:J0G"x!pRI3 `ee0 ...`0222 III`0ttt III`0LLL ˤˤ`0 &]&]&]`eee0 &]&]&]`02265 IIє3}nB0e Ue Dvu]vݭD.rԫx+>b8}ԮEeƏx9-^\CTB{zܭ[Ik=@HE*<y}h,Q&L(^UV .56<9O_>{&[eIJ??E.Xy B|Qq1[3 SϤ "D[lDD+1t:P^QA em(;`T#I%n6_UU%JPNBԽ(.1#N\XfTսIe�jڳ 5zV7(@.TW\r_#G+~(&z@U5x5Z~nsG˰3HQ =aμ{֗^+=~(thz`+1g<=xI9gQ{OwMb(;z [O+C4^Ǻ-r'NAO>2o*m߹˴'kEӦzIy];vׅE.vQ2dwM׆mP3et,Cg N\>SAgdf<�:հC%WPm+C4贡&Bk.{...i2 ?i+~zރaim~ޟ78z Fey:uhנ.vAR<<5=iF mv۟wN #:0[F=/_zSe}VDM:d_Ix X /I.< i9],stsii"T'8(UoDy|xbZMV A0pVYuۜOWy,{螨EoypFOV%r5""z`m!F" wtI8'zȗWO={|#OHނrGQG˼ 5 Gy_.rEޑ kջ_F0[F =L>|*#" AMO"P&V@< (.\qS٪S<"<oe{}NW遘8Y俐CGb�7E>"΃$U\Rb7I x r_ ΉQbrRr6D3ˈ`Ѧ-[EE~2箒<׃-UW^.0Z{$y[q &FA^@&ON9HѨ[){m{=` ';bZz]l˘Vub'<^Ή2ij y>Io&j^7 )¸G/ m_>Gws X^л_fHk<06`&[<x\o }TJ=bD'N:N{tI&]"`0HNA99TVDr`~)c$=SLL 0 ݬ,JMv;Q_ӃS#|صD 8LL 0 L]ZWth:y$ ~jaee0 馧S}Q5+օzDҁ ^K5ѹsI322  Ƞ'NR ` 0Z`ൌaÆQtt i&]&]`8Aݣ$:{,>}.^HW/%)q$eoiРAtJKKcee0 3+/<Xu>7m1 ՃfϞ-tt $NMGGwEaEi]<zI`0IW~Oz;-[F#;ŕDOC0�ˤ`0 + ȑ#%lakRAAXE*&]`$]^ gq%*l~eiĉlWo/32 $"G0އJRc>= }*ܨ?3f %&&#] Pm mob0Cb~*34_; _RamA9 Sn=S4>ssm2[*2'Oޠ%fJ8^>".rR܂RxC(@E%-TB+׮q@V={nRjo)'WtӵYҤIرcc>Ǥ۔zEvys)ҍڷ_ד ;G( ʨX8(Wv m(;͒B,3iæQ%Q[d(yX*J.9O_>{&zh+ plkVn +}$=zd*飏?]: Μ9Ceeet9ڻ?~ǤTұ{*V7VK&ԵE(@t }$y'y `9PpG㏋Z6P5peWTۃQD!sG=B-p};b:%Dxn|Β~zQ]7yԳoQl] +CОDgh՚k}CBF1Qcn_yc*`  ^صg/-5(LFq8ߡXo�S2UAۣ}{HwmzhZ5+L顕$<x  /nݺE7$ qJN6t5]v^F!|fTQ t!|_-~1ֺUngT7t7,_QH]Lt0jR:|<ULOF ~׋3ymOt3>xFkACFR 2Ңiv4w#b~uX nݩ2n Z>FfΥTcvcc>y-Y_Si,S m$<!bmڨl(K, ۥgoA:HCTUW #(haw^t)+ ::q0 #cvȈQ)ލRl"8Dt}5ØF"<?PT:{Z"]&:prődCVP¹3]B\tXޭ;wxmˣEkТٴpE;Ls_λNUKnj=$0Lp[Go-={Jm-b~4UZ/owDhoy~ihuX}撷Qʹhczиx9~zQmov2SZf.IS1ec鵁Q5=|f]P׾zDgn#o!yx"ܲddi*y\SSx)P#'3f-En[h<�Ha!L,`ˆtW{eeN#"^,ẝtGh@C|YXX<Pdp||U rVm r>7/_ CZ&|k�y`�^Yybv9g!] v2&nV{n힮Z|no׬ w s WHSOV<M_LP| Ͷqb\tzDp7uCD'RL Q>vt89*Xrs eۦt9!c;ڦgU75Vk|A|=^=C{@*kM-ci|}p$nzX*9{iM枦i"dp# *wg9{tEhY:;mp5'=Q3it|.$3<r.rsTT5ɥҵ[&fVߪh|J GTUoҔ١.tiMON$s(4v.Ro%hN>i.9[6R_Ѽ2zQ<ᾇV,>WK^Υ{ЗS@z,eߓ0 zS6~xا$emsg]H_O~W@%#kM-ciz13cߛ(WW%̦&,v &S]7eћ⹂_|<\p1*~u}0uMGi?Ѧv:/h4bf[)5d(}ضg]0Rbj<2Fb(F"eeVˆi~A;%gf[m]o2굡vJ(=.? CBΝBx{Aޕ rWVKRa3?,zh 5W&]ɖ=.V Z)TpZ?&8U>_8<^I^.ˤLd.r)ۑ-qVN7Qum&7DH޽̔9'ͻwԖ}Mʤ o4&]&]F"]i,3-EP-#EY@,b_v}1J&]xIr #V322<te <H:N9G&^**RlN2۵\/( K k{x^yאׂ/湭XZtAwte|}[UxJoWxA,,,+xmˋ/a~1mܧ>/<>u*ɗqC5x^y0F�baq]Լ>`-U_ K >T/ ҕ~1/ȯ3V,, #/+faaaONt9] 2ҨҴ:( %`ۊ=¤¤ˤ¤YRZZJt7ɓ'P&]&HD}1,n7oPRR]xQ;?L,,Lt=J=} LL,,Lt={&ž}~͂vF{!eeaamŤ[WWfi(ҭy+m<ceeaa5'n?HoZxY3Y=ɿO{c-%1iO6JwlK1&m:ϤI7<b3MƟ3mlڸyn5d(}ض=wǓw˗vS/"G_7..Ωz$hgWH7^AՏt%1#:/=OQWkCu^rYhcYzAapM EO*QEԡ[Խ `,ʩcTTTlg?Ԣܧ#ECڮư鵛DBߠCMNiԩG/:{<UVV |d=Qٞ>}j#] Q zY(ݿۿÇv�c>99\OtܯGwRǺYXN}$˹_D#ܥAL[qq1͝;>G[?`><|(d�9|˝hQ2K#pfMAx] $ڷIwe{}{m>_U٥goھs]`k֭Ի@еպǴBY.@c^~=?3ٟ}@8BCC햭[LH =yƏO?hvׁvXp!˿ _1tВpvkG;BO_=R)V!{5&GޡЯ&GSʃRKVQQAn+|#7((Htpp"ퟖF_G؊yFktgLE Qkk4xH}Go�\"WLL;xHL(_|i[-&҅K,Px*Vǃ jߥuM8G[ߣo?~s딗iyFJ۹tooD=C- FcԆN+((wť5ԙBAB3q]DJ+77%8oB ^Vf7 $wH 1?3w0k_{SmY@@�uؑrrr(;;ڵkgw+W:P2C !???c#w6d(ZC;O/Ͽ+R̸LeStz)M?T@6^_NCY%ɒ3g{\gLϟ?=կ~ENƦ&L@Fr `}@:0fZڻ<}ZܯZ4ȶ,Wݰ)C+7/O7FDjaN,L[-) T>?m:t"!h޽v@Vǃ(&>ؙ 1JtAtC+mzftDlFc'NlU!kL8Ǩ I,uG:3GoAy[ (`)?އ1.z]JSNI7OǃOH,e<&H\Ϳۿ Zuu;ݾ}6/gxztl$z𫵟{1{.gUϧ 4mW*M%k%4`Eݥ;f~h:uh;w(:͕4@ ?mhH;Hw{,@ d4 .jzig=x_qOYYm8;Z>RO\XR[pocaHS!]#{hlvJzb?zyy Zö]%eێHd {eJqKU aZySXVX #;:WOj u79[& *r+ǍSnR 1<菄X_cKЫ*A;kݷfv5ˤm>_D!qw/;7S'M$t(33ڴi#˴\/HÍ(Uj߾=ˤmA5W mET똷 o^a_At%gc dm/3wnG. ^[Qz L+mh@tTC+mg$vJzb?:fVOo?j#Ge!sxsEW1:{ aN@¸zJ�9[& rtk֬[Bnbbm͛vjΫwMxdŴhg[@.8IwhR&lML=@eO),,ߧ]=n:WbZmm&x0 BeU7g^³ 16䰔d{N<]s;鞻ppi"]�L#{ȟunVmk1 iW<]kv9cM/_nWMNZ | G?:vvee O.CFԃQ 0�!Ec*E`zd|28v<?{lMRnb d B4`�S. (̶hgrI}d{GĒT(y6ܤos+ AիW{*! S۹sg[Nͳ7~A^6:l�-[(CȵkzfIwۦˆUcOП2a3gg}~J\S7Wi>.7n޹^^dik!mZ"]oo3ԙ~C3Fft nNnns~G6~ߊ۷@IGQ}.~n5m$cew4z9�N~Ag\&] |7>Gz˔g?cw^1h/REm{B??)**55hwgHv-Rf!_CS8F"biwt;FG!_Er8z!q?^+?'z0Ch6@/tҽ!L;ii27o #9JFG1GbZIlxr3iV޹,ohа/W#Ö] Zy "Ex׊=k;#hnFZ!<}pV ?G~"_/]Ne6V8z}CG?iQ@ BcqWfȃܻ;|VKRomj_Cfs(*UhS6HxKs"WpTJچtKw%(zeddN4#HdG#ۀ^A;b:_SME9 ﮮeml ]ܶϧM4s,v]TkRv^#"\&<@^vu$]|WMq։w˞ AE�?B,D*,Ӝ]pϧe+WdիW ]:Dx_rv KC"GUYs)`Hѽ#I=Mw@A&]\-`Y+Y2\r7erK ]OyN]IWЬY%Z11Pzh{Ejf~7GΣkŋtYX(.! cHY/^4tP:{L&=ݓ'O#Žodb+. #1gˤ۳gO1I&]ן=txʿg<k'4߾`5Ɗ ,Y' ;=x+6VOЖr؞I5}]JrNRNv&dSU z[2Z<? >Ju5q2@C|dqp/\ B6f… +ϤZgWkT_"EA|[s. <^|;OyC-vZ"Bɨ_lQm۶L,, e>H9GSm9'dTo߉Ǝ+R:  :>L~!-],, N<ʯˁ_|!>׊(#tYXZ &X&]|Hp!t#mQd{9RFVptYXZ` /Jg̤¢O8P$ b̌Cip]-Vaai"mp!rX2WS|C}W^| Wx<.pnd ;CrHW24,:z֜&ᾧm A4 KӋ*\,;}/ "?c5ieaaQ? z> {,,, 'Kr"ݑENWpx,xVqhXXXNg ϛ:E}Pna-- ˠYXX<P|<I 2Cg p)faaqsM Z"]l N]⁂S~Vd ax7/c0 `0 `0 `0 `0 `0&NZ-h ����IENDB`����������quodlibet-3.0.2/docs/_build/_images/album.png�������������������������������������������������������0000644�0001750�0001750�00000522057�12161032160�021335� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����#������sRGB���� pHYs�� �� ����tIME  I�IDATxX&&7ވ {G j5+vNQT^XRl>>39gX3s4B<����������Zcv?;'"EE���������PHb|qN6JB\.���������=H)ODHh L>uNJ8RD"DBP���������� =DT #% ?ǠyRډ\rN.p8, ���������xAbI"RE$"ԠO&<NTPt:F����������%H "=DT #F$H!YPj >Oݜ'*+[]]]QQQZZZ\\\TTT��������� %DbI"RE$H<"D"tO34hl6),r٪&&@ IAAPHB"?ɧZV(R2OAƎekap4@ @ #FH!HR gIM{d2HpRI5738@ @ [B|| *vΟ2c^^^ii)IH*Z"&?ɧnS":<g{(c}&۸Od @ @^.~Hʺ * HG),++C:%L')=ӞԴgCCCee%u6 0 ~̙Y9z/@ @ :_77r;@PaTE2==�$Jjz{nJT*En\[[;dVh 1- ojp)~@ @ kI7R0??$e]ETE B"]ZZ%LH6;o[䓺666VWWS9- `vlpP A1ʪyfgckanmfnci75?̼!W stɻ~;sT׿vkej9ho.Q67r2رͫ}7|!J}e+Rؾn^IuuϥM]J>SSS T"DIyL>>b1á|N (7lv->.NJB -&Pa*!>~ήȵp%OCȑrtL䟺Hi6Ҷn"!FJ!C~ou]P+;xX;~P/ZFfw"o;i}~Y7%BQu( :ͺT{ԝ*?ER &Lg)˅B!Ū+--mωWF9qܩSS@ OB$ eiYM25)]^ȑ&S/=qv>Њ>V;fki6>֖ffvVɧٟOGgmls J˧=٠vdlZq03ꛍK7/Kwn~ˤm vR{{9Y6N"Y;w8 g{)-m<}nrn5T=֒mavO¡+Q v*Y@T}uy]J>T"D4f|R d2z೸O?2̗L| ; ûS@ G5=kgalkco)R=.V6:rp Ns+3"9yUotq<q$Wi*\XyU|wEO>GEtZTdW/?g3XB)Y“"@{nOxZw~-,m&xwdrWMs8xF&{9;M:sI#Wט5ɛ.#h[Xq/(P;6Nݫo3bzU%~]NVڠok>]>"[Pw-l_@ o7vQJQu)cl-ygBBBzz:JO Wx>O@D )eOg2f#GS @ o:a>/S rX-N>wɧKawZڣ\Bŵw% |w|ORs;B@usi>U)!xkSQyb#77Q~t5g/]V%߼q#1TD9;/.﹎YZ=i~pG?"W#HGo_g+'2ςw<Q'<'֓}+g`x~䌱RwЁc'=x=ѹ<d>Kyc޶`[냳7@ ۍNNy~y/o罹"Djif[e2555|6ӾӯݝZy B ;@__jOl-u94G:Z`mbk>Z{Me'kIuSߠ|jcmccVK==m` zu9裌mmLwco'8y>w88>17o+ ks3[k[g{SL _vhj \l<uus(+=0nNܶn™\--lɁt2(UJn6VB5NvV/P<Sh//O"DjZְ|VWWYl֒<zݩ@ 7`/֙ϝv>hgU'&џ$-N>6JX[؆x8zlJ.p%.eZ۠ɧ~O~y=SV~ :LdeniL=G}x= vIlC>nE?jz^P-;+#LEoi٠(8:yXw2 w[b\Nman.8{zC6{y" W%�>v3IMdd!X?QIyu)cDۺ줮dnm%g\\%H-_@>Q>ߢŗ {t@x|=e ;l-,mg>36.fxst[᳙ϙDkKg[Ķ4fino5qiN>;V(vnzgݺ]5ʝ"?>=#^ۙ/^ښV,usGzAg's^ .CgG]u07N#owXwoQ2u)\`lYExψf>9Z;ۻ:8y"y89t2`/' s;3n>@N)&}utU7t ym\gۗ@ V | T@T=ٝ-8Ծnȋ'2>w ԴgwjA wH]hBS%iMg5UҪ~^ޮ7h8˔Q|:Zf ȇ9)ׯisq񬔑?g-wvgCO'f&_G'*%/R>Ձ@kԁL;;GD?u!)bE&ywy#B=\=sA3&1 ^=1%5[V/߸[pݜS9d# ~W=QP~|LWێFamp^zCWWiomma:訯iL*�;v3yDJ;OTEkվT{EgJJ JUݕO]o~߲ݛ}3 @ޝ:,VI)ђwBG=\6r1L,Oۿ>Q'A^n&fq M5wOnvvBܝ=eT08Ʈ;N>OdDaf+Cy'|R S27Mst";6b\Z@\-M9!3omEyuml;{\6]"pI?K_>ld jL!̉=qQrۭ{ӔM)-j6?K%OռyQ8;{W?\XSwXA^.NKlܴ;;~q fJ"[T@TUiS7UۻѣWΟNa psv17 N#m(2IK 䍶V6.|ZR<\mɊڷYZ88hEÙռՏ3ڏ4m!nvquvvl퀻 Q-H{[hM[ѦK6Nqu\{f1 K'6u!7B(\K.G[utUQRuWW>@ -fj@�OgusCQ["jׯ֝ytu <vS'fy{5Syί閵\f?5 IPjUyu^Q>'X;) @ Ow7?Ok%M qG-ew\k_sq@ @ kϔuTݩٝ;}!@ yI\xq+#A @ $/#;Ĵ����������(s����������y���������@|�������������������@|������������������@|���������uއu{ף==8Z(z5.Xp0M'n+g~GSooZ0sᏇ/q—hzBWʢI<#4 -u\rXD5Ϳ �������{ԟfO]qO%K'|߹}u] ?jiS _o5򠺡aUٶ4:sN?k.}_|@~X ��������| ;ČeWSy#!?hi%S]cQ̊;fM  bj' % j\rh˪)AAW4+Emv귬N9<'p3g.5<)SBPVl>\SUօlvْs߮g|EA?^.l_/sm8:sp /2ݩ<ng,q`C7; M{2 ]ASSL8ESžONۦol-;{5B��������^7|.Q~;cy f׹|oɥmef5w}Bgo=_" )LykOĶɁ[u.[j='5^9w: ]\w;k E<xǬ{N=im'_7sv '";r~6nߔcWjp˃ TK^KsB$TF>gk/`s�������ɬ K `- Ojt)x_w4>:g` po@HX+OI}|褴r2}|sH`֥׵]¬؃䳙o@}ԵZQCn:wژ[ߢ(eɧa$>n$a3au|~50\,'&18/DkHg'm#?&oܩh0 �������| :�ѥhcCX[Bf@Y{|&Q|^m!A Wz/NE:C^łui᱔V8ZnM*\){{}|g\CH`7Na]T{SPc6j*ͩkk6:iMݽCB&Oaut2~3{{Fճ62+O>Ϭ:Uϫ?Ltev?PC&nѻn��������~?,GmsiTM]I'|#!jĐUm|U7{9\UfgG]OᐤMbpl#;%|>kQm'OXi95c줵ϚǛ+:?oI;n݁,=cNz|_9U>;9o\[rP_�������wN>peW8<OED<Nœ|fl,/FoTa Mޞ9s_frvu =P£ k/UZo^W9d'+ǧPjǠ;|w|ZB mAm˞6850<cӋwqS7H4uҚػ S?s37$vpI;n[1wĉ sBRiYyI>9ymc]g�������O}峩&is/_b&J>h+  ӭaؼrrp`vۼ&ΛOZySCQ7~B趵SCY|`ۡChݤɍ+̘,ܽf)C͵iW/&2u(J;6=^>;l%x,oo -gvtNKm]ZJxLkF>&E^0#$0IL��������|�H:�������ʧwW~Go'������� �L|-u�������7 '���������ǑO����������t�'���������ǑO6����������tkL����������&����������9 ����������'���������� ���������� ����������'���������� ���������Y[[AhsҪWh)ޅ�������-HPE5NH 78:Ż0R���������5϶M'F5 L$ J#Vj @IdHIHU (1q%F+#HDo ԸAl-yCA:'}JZ;_*ӕ9dib64MK>OܝaS̗-������O+݀x3ZRB."TbHA +0Z@Q |<"T0 �������ەO$j4O/82OIEJB$SL|R5!4" +U| / jYG-~}=xz�������'nuM0}R59ɓcl'WAp_UXIPh%UHt J ~]á=D{ PfX  t3b�#CMlYҢ)cM ;˰y?l'aTQ{*z2:`А ސs}~hmFu\=_;nX&9hQ5–YPn1pȥX{*o,4vQL4M{ť,pnЀcm:G 22b2wdzrGx�����g$:Ng%.f2,*) c+qo+Y*LxJ5C&g*r9OK0Rj c+T5{-[`Urd�99l2]6 p<h2z0maԣ-_? _o'd8ugm_[=@[qƚRG!=L̰1H6e4b`mj%S31Tͺԡ)ѕTuNs +ޔrkL35lFw%S ˧L4= %,.,A#%OKi <>Q%໑-Ÿa������n'Bt1Ik*q_s8.UR5)2!Sh P5BE9OФP5 #8DbB&ha R.czŒ3;_+au$Uע k[%E#g2&ij$,zٕ۴S %d-nd78ksv03k9^՗d\8(rzDa:c'Na>>*kCݣ&f+/;VK_>kmӾzJ mTʏo9a%ݞ#4b������|Y43m*\Vid|SIDOHWJ&Q8M /KKtfX,Q U[" C|633uS76g?ڑ|ʤWODž͞=OjTuۥEcd4tRuȮAU%hpfQnam:|ӂ:]/N>iQ{2(j{E;M\g{ciD.S[_>6 kڒ,M=~}.8m̘1&V1d;y'������C)`0%m5B9`<YD-T()p(KŊ8:;_*%\q@+Ijr\S".QB%.Rjr}O:?c=oO~mgYg>տl,n2 2JQ}%1 gRہ+:On>+,M8ICϥU|cӛ+douKE*g!g1t3Z' m 7~5ՠ'~^Wz{K5~m?������ /$m]ZSlŒ%Bаejȉz/rTEt4I V0$ 0TZ25ҦYM+vv͆_.8͉{5&,'OPmbm>NJ'z[ {5o'jK%|l6Z;:pj&}OwU&)ƉCM Dj8q(r"6<;˰A+Zn32u)>Pڥ|:|Z.[d(`ѠѺ)S^������@>_|RυҲ'jr擡U*ʦ8[N%&+!xHMertN:[T*UIU"e c*ZA$oc4䝐ϭ7bв*++Μ;mPUU|vksV#R+Z}vA[qG_|QTUWEeUC]Zp^E&'ߧϦE-+Tb^A:Jl[y+.M;"Vvmflޣxr_a $gnU4%-iuƟ+'-Kk+|:fWSJ_'Dm=J6xV^i!eķjhcIig5eWX;1 WKXy+d&C �����3W@>[ ^\>(1 O/Ufyw\B[EI4+jVWI0xDǓTHTe"y>[e <TQ-T4Uei{W場O6}#pط:p(;J֑|8;g>+XxI%+Xv>>OՃ"ܽ:00` 2x}^AÜJZL_>%1ȻL9w(QtI~!jixwǏ:~/PۦƚcԲe!jF90UueN<d/1}.؟OmKBIFTVۤ]'Io!-e39-BrG2)ok5 >[0|ƳRm-f$b������O,e4x'dzW'G% jifB J 8 uX]0D2*q\Q5U|)MKzQbHb4#O]ϦƦffܳogl|L͡윬{<ojn|lޔW?}맗2Wհ-]x5=&]}-:?."r_NnvCh1q߃ޮy!40xx멋=yvhjp?h "nz՗ODuŅ}Ƙod:,t|==؈aQ[ta$߱C 1#pڦ T*f_>adCoZgS779?'#{i^тC~q<)/7n0#tmZY,1CW=Y ������?ipxٷwKͪ W`+LjejT]+PZHbIj obB ;_^Иŗ 0\PQWTbePQ%T2*P^+Ez'7f]}鳧N>^RRXWO?DE9yDYy1d2^E>K2k:JmJQ 枛DT@ۯ(èۥe'?u G_>`ѐϜ=U__w.[s{ft|K#If \yMO������O%_v\J81\/2O\#V\R TU5be2S*.VKdM$+5,9v)^YITG5ʉ ^2)˄|H((JwE>kh5*?;1)8:Β`_ĞGtګg~ݪA'rR~݊]ϞĖsSӟƿ|nΣ!$%'Ai/By R B. Qzv@4o,lIoWO�����OdzNy(R&c<2I#W6n Wђؒ&rfBKR<:AHXU*5GncM5_%"!W7JEDUS<hpO|UWȃ/_XPWTRB:t+UV|fU/K.؝<. ɩYYX7*i^ЎN|S=GC@AA:x�:;.:}. A;[96ԡLT[�����པOOBN רq '8 `<J,䪶˲ skMlPIդ|U`<q JHBEje|9&PhJ@A~䡦8KgEUbE蝙,,+,G7n]CY9i)P^,;'C*V0Ч;yX^4vǙY"GA{ȋP]'5u@>������=6O7yBIH*8OA&Xd|"{bL~ GIj\F+4jRqm=Q&0"!K* p*`0*|ffe_8qJ㔇(ԡ#Ϟ?Gųbs<:O\9?|6c閳t-0s444QB!وC)��������bt[>uK axKtZHSTt-9*^:R}=|FB-$ Pj4 %#_o,>p1{Zl[Vߦke*^\'''ÄJB,ǔ.SD\z3~};o]KM8!!):D={WSR?@PWSngt;'?.Yv:1#ם nΣ!\q G'&:ܸu ]t)g>!"|������#D>5ȧ.A|1R>!RxHI+UK,akrjԉd25.Q㘊i*,_-HbZ/Xmz$1!{/[ksbL(( rcT|"J~3'9wa}Ct:S"Hx|d_Ou0ǻYsO%=0z1a;n8̹ݢahhΜ_ҿ �������g ]{]խJL#UBX)U7ԕJܚRX{-55!V`l ҹ4~k{g:jvV^3zyW{.'L:%5:YSe85"ϸ{ ڿsޝgΝ}p{>u1ѯ"7|/?mT{YSN<h̒C;O㧎ݷ{>0O;g7t}:i#ה^⻾̤ՠzL:-;tVUZIXij������h|W\dH­'Sɵj8CG"82S)1B + (KvI5t<$͒Ĕ}aϥmIx&XTѨ%3; tA\!Sa{W)Y{D?o޾kώW+ݢZr1!xυGΏ4wK|Qܵ[oη:kc_D"y 0`tsXu2f+6mei6/~������wW>[EI* *  gɉF9A+2R)W2GejDEH_i.3^s&ך~+laWKpH}!+ϙ‘wR|}pꙏ?BSjf7qdwG>u̹UUU9{\ݩP<r81w}5&,'}<}TUu=wࡎO0tpcc+5\|]FOM|ŲvOm w+ >3Ryfk$2݉\ ts 4d*h%e~u<<|i/ vnOTfcS|ݝ\&~!cM>2`ކJ3nQwN������7!G=|-4< *uxJ *W`PFE JVDd3d~ΫL6\:P¤ U2U@`kw5i_Յ¯UYѝ1精Ok\Aǖzy!<g~,vx[GGMmrk 0R}23)ƕIy7=M$CBU1M-Qc7eujFGЄȻ$s]S(2u\;ѷv+E-n[,\.K4ZNͬ枟Gu|rzK磝OP9tZ~ΗHM'ڍ=}pGt}�������xSIRKumO  #)Ra"WL9Q#d*9y;.&4 L#SRLuYǁ^/~tOQGk8_N4H|GA7Gݫ\.]Z縊\GMwk7y=7F-9b:i琓76gv]Im$Q"k9hjx獙Y0kWG3fɠa~.E;y3FFCE-w2b;Ѵ:jpqINsZK!pNٙ 6o 3ն bd4-uS>uv^}�������xs\m '!DJ)m+V%Vu"PpJQhbb5QaL9$Sf Yw=l~k?q7wL(cI:W$7³^j/H0"¾ 8YzY@rU\ي%}C&4>pŒ/|./k} 15_҄6K6LmT5mIt:dvW ȣoxRuխW|d=ʫ;>p=uF055K)6 �������oZ>;oo5P(2O|K _@KTH>f\T' 'a稉ǍEϧ[y=a>Ie{,Il,Q]>[/)\k|3%ؙw_·;zDf|~ qz擺Y]>w_X*.g-'{@\.<qfӺTV<md4ynS'gy zv9#k|^hdӷZ:٥|"58{SYB������w<󩯝jB#Qy OZdH%O@ INNNR{{fݽ?7ѣ_a=49) qӺ|+WG)hQ޻.M{UOd.{o}yG7=/nh<jդ#F80xel ʧ\.3nǺL,Zbcj<!\i]AG,L݂{uTa6ot/&c&eR-Nv)5#VUn$|v �������W>ۯX'At(m0B5A>$ *TϖiO\#4 La|w>UB<5r͒!ǟ#y`ӏ'}bzIh{h|lkE f\s*tK1U!'}QYQ5|P7Æ*Yo[w9&˙xHyLr6u;tm|.=lަݐOWyq8aLc-oRa;o�������ެ|Bt!$4JP亵2L#s+TlS!1\"rB -U Ž~vG>ߦ^=|ҿHqWF, '>۔wsjMO>G{}^o$QEV2?|vLµ4p^e�������s!:{ 6JB#ך'RM'Ui \ĩ~0#x*FrI<Ye{۬?=ٔ>{x-O9ղZ^,3T\W̹s҅Oۓse.YdߢUlv|z }+s[.^|������g/$#RAhxr-Qc<br ?y2N:W' |X1Zߎf5˟>GEЃ6=QZ۹c󟮉~}q'=~G>;RG Wi#7A|sIŠ|#SSacO2A>������ݔOEѶ'_ש7vJTQO5b5 0c_Ip8M>22ϲg97nQm}qQ1ȬY}6<z{7!RҢس/glkș>[>8p/c}IߝivfX^PbM6O䳶6 NUHh)ޅ�������GOΉw*8e(ڛo.5JR8dV,ȖK-}=V}G?i^w=[6Ty<W^tDs7&T$2u ?gnVmks߁^}ۆQE.14[e oC>��������ȧv[O S")*O?q\c5^*RErr$5 ׅ/dZzusgŲ_Rhǥ<uL0dNOK?߈WKJ1ٹ\!M|ȒO}t>a6ըWk[ WyE)'��������+焓hͳG=FBF"=m@7K1RV` ^{h>kb=픭& *l(/_fjco|Rgo}tKn|s̟ j1TsҜWP'4 +5'J2Q4++A>5oqZu:FǾ޹bi<�?yHk?L{_.^->.FCG/j{Lʷ6wPF}W `:zѦ| ������|bxK>߹JX91B U.^`WIFޮIW?_-ZPT˛ <|icԚ>Djn:Oq6XőT5.&'Wܯ1:oy"6z̹O~~XOؒ4A||ENdԟR2d| E_֣uWoʦ &Өm_okK'.ތ?^>Yۇ22ܟ$dܲ΃7����� yRU,u:Tb%&Sg;JÑb,] L0~`LJ?ntƤ.|h?.>Rj'Ęe諉=\w_ecU,̤LIpEsR뗦:*p!ȯLu<mw/KE] J <'׏M20h}Rò :zFhcO|tef.aW(Cm5q򰎪"leaÌwy1Mkhs޻sVQd|yrhGD@ιl7!ps嘡CMY[1&C 3S_<"x3V n/)g yV8vz�����'I'2OvzOܣ}W N)0zc+'qxs)?<Ni\1.lǛ~~g7)8Vk0 T@i1' $RYݟ OgIz#oʝR)Gg!g>ߧs26k0kjI vkP>[y\בhCd3FNJyAEc×O62pSP®ަ&c_L8\)ٖyX$-'-߷w vu]}c`ql`u6Jh#,ܰ7"bӪFIU_|~k^Ԣ'yh.疵u jjomDTDr&/R '6!::A<B{) �����>':éҮ[a  |#j@qUr1lkm?lty8vu=O{ο/웩 Vb %MZ-SKw_wã\.:*wOkgg6MJ}i6o?O1_l|Ծs.sOV*xJE1 u|UT1P~OV08ls=i}FbWG%Isb,BR}`rjtVJ}s*1lœkd$-Y֕ ɽHnU]OX"s&M}i\g+RB#cJ8AuEu0ZA'gl/|Uc./&R �����Ojy*4-1B\Q'Qj4OF ۪52!T ̲K`ެl >˶]f92W,Sq5fcxH및~='߮|ٝ"$w~O~+L*;}}5qox^{q)wkY}|:CP(`_D$zc =[H;ϟrk#;Z׊ihz[Țqǐ'eRަY޺'E]s`le:OtU3G>wknG[iZOg}\fŝƏ777;|ɤ$4̽}S[Qn[a{,8e;ysSpil9�����gCRZSj*4 #99OAPŞ!ǒ$늅⫾:c_ߝ)ב/a86)GJ\-ÐbN|V?sV?Z/.:~赲AGsOu0vͲǕwX;֥oɥ/+;|5BZ+Q|Aw~ga)3̶+lo_;W-L~};6e\4DN|.$ob %w٥#V|z*h/׶p\3nK/^>u Y ]C<˒OjZh`sUqqV3wQݔ_'l*mJ>eWXo1����� vu+X*SW0q NTX7ʰ|ru<fk1,#>>ެ~N`t-Wp9KTD_s oՒ#sL3BQNEdVϹ9M ?]O?txǣzvDJDʓ wi}?SQTlE6Oin�Mp =Fg2m.\fƣ/_9cVmuvDDF[ଽv9)fh~{ۆ١VA ]v).t׭9LP b.0M'qhwF۰A|"\i]ARZ~32I 擷L*%76BR#żW,rnpiL@P(������r5rr!B\FQkV`\FHڶj * 2u&[~F4#1I_Rٽ/e\}er:[&¢PX_0 z~cURzX5}硬9EÙ'3.OOčruX\V%SK驼fqHSMOkZNJZ|NoqIdJ?5K<,49RԳةǎnԿ#*i83sâIF3o4t{=+fxWICF`<"hH ]>W7͵p )s m2tps$,oh<wn@󬎙:nHm&M̶_d�����?|*5+0r\-! *5b%M(9|b%AOi5Xy邀"*iV:""R{5HO n@9|re3ݙٝ1yTc)4Ŧ`z­&t>_'l`pg+=BT182>!ZBc=kQFapIM$D�ZVՉc ⚉ ~(m]R=):XdW ůï'0*?������#\*@Xha>#:yOvBc :Tw:X661xX Dyq1 O-#3ۘOHu .<.ulܶsT.|Hich\l;ޙcv&4K^@ >z0/ o~1k&6Q |.YdѢEi||~Z������`�3D r TB># 9Col"PB*O@YVK椴UuN#Aq4ngO ;OH ٜv6⑘M A‰knDwϕ:0~qte2Bd:UWDU+$R i\4C򙕕5[Ff۶m4ggeew}W[[ 7'�������|fEOU6jڹ!WdW扖u=[ODY]Ag"/O.#ijFwuܺuj2osN*GԷ).Kv"je Nle ):ka :O׹;qVVh>N+ٵWG{@OlG[OOϙ3xϜ___lo߾]OOnN�������'D䳞!8@(=#$r6+d,#D+z~F O_A 44|b+ƨ < R$�%$:IL-z|4]Cai|L$ A:V5[H'Z<QkK](!Րtmo4*k6Pp˗- ^B>ݻ7eʔД755|�������9'K zJiicqy<?SL02x" ;]/dCOD_9N$'d D#iloe57q䶎F43 a%SBS^[C׷ $"1eT`D-6<vĢ#⿫Hmuɫ\#3P~X7)ckwY +YRRhѢ=(%D;WLd||"F|`&OlϘ1 ��������|NwRKEhP扞-8|h'vy&G |A'qN.W( ܮDYa2$*3|L%*̲vNj`zV;VRnԶ40nV9Y#"҆1飏'HZJhIrj O:lVhݟ1ͫʂGsp?{{~g%cF|ǎ@3.&q7nܥK0vvv6l@6txyr3g[,ui=_c]2sK֚(-.5ϝ5k"A& �������חO>/jm%*O@ N]$sL&h<>%,RGXjY!�KRYTVt^#ӥb3#5ˣ7a>|_03k?L89F/BBw̖=@j8|KW?iYspV ־v޸f0o* ]n6)dɒyϝ;{"Âo͘1 :vp877իW[,z\R\{% 7s\F45߹3w9v`iڃEDȆ{3lll$H �������e'G r[ *!r">O~'+јب\&UMccht^csѼ�Jߗ^%MΦ2XnH [+aELwJ]\$]s$\2%.猽lEx16ZK.3)ĂRۮ)u9k_}szOҘYwKh$'&!)5ZjM;4Rs ^DnʣȠnyz ɓG-[#򙚚%--ҨxkVhvYsSt`I/+kNfts=>}JMΝp-_O�������cd6;hAL"dz4hm[._iPgvzduUb铒5a} ~3osw3s7%bVO-p>iyXZ%B%DI:3<luUfSM,6U]b1aR6I)c%,|bGԕiw)!>~hq1ђ'IIj4RO7.Wܵu6owgܮ\@^7$h`ƬYBBB'M֟9o %K ̳-bz6ldlԩHiȟqXu~&%%?~y������/M>9<a:m+!גqt 9X\]TOg Ҙ3U[]9֭q*wxI{K;^xȯlPQR\ 1SŦR e~[!>QvJ.R4 {:E6u VhX d4|kPsΒ:1,b̬]&j kt%;3RSn&֭ˎv.lN;_<͛`ֻwF6/^_XX8nܸw.BS}}]~Jyێ 2F~j}t!#?XƿӧO6�������>Kd󄡍dT? hl~6hIr ]vV'-sN6�iZY:�K^wZC♨u4\k>8W?Wlw⣿=+Rbc~6nuIh)xIq Az>}\SCw!yO7WX>B.sgZFfZWWͅLI" e.[௵+zYO[9*!.c$ǕE. ϟ0a[1BzAڼ{sZI/:e''�������|IᳯT."-V:N#j5-J$1H6z8'$!Ҹ~QXF:^,%,۳|Jb1e7upJXIpZIm3'OUl'?@9IiN2<6-$͌NI*P+ ]Xg.ϹW&GIm\A򩬰yܙK˚5j  B:t?"""(38!4Ҽ5:^(keebo6������,$6ߺ#SpD_CDU5ۗΖ巅7&Ƕژ6&3$6 !sB '~JD%j,fib «&C B7g:lX .+N<S79ת5J?Rߗ[||g[yS°(,3YK.#.=eI|=T)m嗟T*L2eJXXXccrϙ3';\Xʲ_!c;jl%tA$RzV]gVL"YW�������Kv~vo&,WSPY^uPJ39EVB$Ո!K(BD54v9GfPu|F+ig5(%6tL&RB BP t>gp%ıDA^ƿTqRpX2pV 帑"gϞurrXh77qǖ {^+x|tt?tŋ6mz=T҅sI.Ykp ߂C|ԗ|s>͙5kB9�������Q+u˳f˿ [KP\ zgREH!c[h, GK52- %N%Ly7R5qLO4Ѯ9QΨKIVJV[;v<n'' ҹT1ѣ\:$;V2ء-عn9NEmL5j\A0Y'KIˢE *Q<iH7n8 m-w+w^dcǎo�������>K<S(vntݏ PHiYT8YDփ6zYJf2 ^-a:"" *pPiX\in󪘲K5<2Lq8<L19TtJ(tvsDdE|KHad1~~am|X̼ʕw`gU/zX35yvX(8WG|)++ vi|/4h$J ?~|NN@4iғ'O@>�������sq,К�33Q Rs>ΧфRWGaaz*nf (Ȧ&F]aGR̠iw GgO Z]n*jͨƫUOl[7p<S-PپhMqӜ3*yH̱!iEb˦qs#Ġ Rg'_Mxx\RNI~S|:::"lߺukʔ)d2�������I> ,^մḦՏEn.TnVR^L3n}G_Hbflt BE[mJzSbiK'H^ƫxl+N/}rZ@d ײ.N_q̄fң< L`,%&5ϼS1Rʘk\%&7-X!fkJAܫXiWZIb R#W>˗.]*=[>D"E6N<L%�������SϟBj/)r~Lӟd>ݟ^Mgz`#ͮ{Mzr %lbqt:n;_;gLrFX"qlɳIN&C^'I8PlYı')]r*TQf̖UJf~6%u$vy/icND C/_]Ӧͩm/~8vdRyz&q!}D'@ptt~zȟsٰaCnOO��������>u-nM)nz&SŸ&fRX!||p,o_Jna8"<(]pxl]v^88B\OR_\6w Wֹ^~Il&71wFkHc6vCw"+8 @m%W_{Xj[%-v]\r~*ҲaOʿ-XQ(g^tbƑGt|,eZXXp+'��������|JG~_:9QϚ('65S04uؖ)6OlHnVz!UIW7'o<vTS9jՍ[zoKI|<+Vs-f1n(Oc_'&1MLk1o$~KJ sLIȺo&zigBKCmWH~&ii+'��������|Nο컠鑵5 FR2̚vN&svݓOmhKju(@4Lng&eJ#c.VI~kB*!S(` L.:<-y3RI&./Rf;Ml%_9ZJz؏L1xuYs}N w!Z9!y[cW\̔z2p̈O*J#p �������g#v~Z$fCg <Ѥ-L|G&~Ct*Ý";U\)71Mѵ餶Wg⧇W}uP3ɿ&ȊUꛕ7^jsP <!/+ '(qľ%>y9bVOKľ%>iub_^Cj7'ZMy~ٯ7s?IïlExPIÐrm_Nr6 �������Ȓ%DUnxڲ-pjz0B9ACzrтjd =MuُNɓ.eM<5^?nAR;þ!)d ;|!/|!ω)L1 O\fOj&k./Fӌ%،MjssgkL:a]C1Rƨeg$\n*kǯ��������`daTRgVy-&=)-Z6G5J'qTƍknAKKDݑ 'ϥ1Su(1IϜH`N-d :<!'RP6_BGL߈)69%&yr&l?$ri"8c#iK7]lh7Jߨ ��������,xhY\gX,"uۓTZ543|ivnFs%Ld60a'z6 _8nX@ɥg-8*>aبSvɧ[>E/RQg/>FZbQ?jIf"6?//upsm)zՁOԽ;x@%&ȞEb1Iƌ%.6Js�������>?$qaLݎM8VܑfzfғZO[UUQ<ns/<Xr3,%6^tQ߉D@*[dE/W'- ''.-6YLlPLBl՘5Wޕҹqa4C~^|5cCqxI1rGO\QF5Jl(Q7ZľgC|~�������O]>?W>|����������'���������� ���������||��������� ����������'���������� ���������|���������z�x<dx !?|b0X=d,}S֊C(P'�����_�峴_ i _�$KF<�|Zqz[>@���೧|tʫ@|D/;!0*��FxwU+]||���)l6R� �����'G ''�@>XDb#L�(#(#�. ȜOK>x|JJ  �*21]圇.D>sss|ݩaCGѥ6JA>hPF�\9ÑOٳd2 I' O�փsm|`F|:^<X}[WA>hPF�\9O6{|AVV').]|+XǍn;;owf[|懆'~|+ʈD=cNM V|P�$ s^)H*"_Ϥ$. O�23$sKV$|^~-l ߇_qyq)^KWsԁ]}mPƪ 9,cR elbG-rk?I%3,mMi=5][-a^G.Wާ~wYsVĥ&;k U=Sz}f;>%1t! EۯCzC Ey?AZnʺFf<S_K4U.Viu5mo }t٫r=~xm �E'B@W,xtz=Wݷ_pQM >aK <w=FC?rmztig}! WٽMt0*Cgx+G}W>|üziδ._:ΘHg:iN 5utr '}Jꕹg{y+J>NQ7Ϙ1N&3T18 R]r#续>| |niʊo>´ibmiNĽB}̊Hm%}x5q{:< ?A>3Ϝ]|YXXp LA=VRH7^SbAL?콬ren"kؼaŝfJ9k3GFv.=:H%ƪΟ=wQ޿" le#mw\i9VZjARfRqDv޼yPƟvt+/dP̝isE,SO]2[ܹs.Yc"FklGB_\ Bkx#mZ_͸FoȪU8H\1ݶa]KxeG>Mcoo^9OFfNzR~D|JfvOxkdflT;\Ii<kl ^gح] V9=P[NNh2C> QռZ#y>`?7iE>';]Y2jVJ՗_7{ƬOX>I-vÑ͹N'Pj:vWۨ :yH碙y19TWUI.-jUG@_߭vB[cC|$ZXyj/rƪ=HԷφރ/D>+ ؃.{C];yJNn%NK%6Ruuq#Q+sck3|CʛDu2mO`ɵ:<c>mO2yf7}#`l6/tԻBgtoX?` e68ς 4|iBwnϐ+C}NK;7[NA-6[+ϱxڶt i6ߑPsX't6IW?K'vkf,QL4 SX I8MSS`u'`K\` ^W)͚0d:?$ʬ;|o6vǖϗ|O2?n>|QPo3K(^'3\ sOu5mL:Vr'`Ĵ*L^Jyף(4rFR]n$S3Vmu>QedH^dFk]Nݺj6)4JkU<j�7O2Kt 巫tEQs>Z[N~oӊsV W̴-2Aj/I L]e74i|w CI#`8> >r2NHC7n ia-=M l;mv8{6}W3_Zzv(l7վm"ʬFxCPzڴ.3ϰ؝Q^3ʨ|<w6:^n.Btoul9hΔo"^csg.u2Xqs\l6&^jd+s|xf-4wXIGOڇϡ6tY܋<{1|j'=hCw#1R| op<bj$/gߑUVWSr#EQ٨G)Og5 s'/QTˆ:?1,ꫬTUPHi%|c1/˕WPQi ��|RHج'գY'%f{wpW3SΝ)(̳<d=G&9m߸lUV-7c~RW̹G|Ͽm=OaFp}LEb͒,|.Tщ:>Was6+gce"7L:`^Cn1P8Ϝ^$63m Q<ZJVƸ+k{Y2+70ak::>5`>|i=V}ѓsdzj| $䈐:ej.V5)j׮]3sht#+U7VGGNBNX^~^/P(T �'FN \g=-:'K>:峪v'v--66G|: 3ϋ̫$5ݭ^:�=*O,[LF>l0g 9ܫ%̊?B?1%ؾgqbu %#nIKiɱ/z"6ݓc`%5Xv 2#j==~׺zvΛٽ?f9ؽg`9*|8`u` 1mڴ#]n9Ḋ!.෬F|U}ѓsOMn.3>>ʧQQC"oBB,jr坫[z>Uzz>K^-%'LQTtA;Y⢥j>q>BXAqO+O��-jDl:Fw%` k n峺r7kOZ`² kvm,۾ZS'XP7*6kܙ/Z'cl0sC@%ɤ5VҼ6yy>bZm\ ZR OY2àm1=M|)ZeD2s48z4\6wMΤZ/ѧ|6gZHKKż _gY>9XI ]}\La1ۣUd4 En.Ý&f9Ľֳj;Xp`ی:︤cYe4:osE<<k!5`> ^ռU-s<z̏!haLʗ뇊-25&喯|/ /D)4R[Ó�[yZf7bTqjKڀtΧmqFNuLyϩ2^v\ntOshW^ DDl}Z|v �gn" [md⎠Uq 6? <k*}nz&gX}4jו)o.ٴ\ZI'Bwk0;%,?g뷫_ZI'^^\gC̗Kis5EfɚB\HkRYшRֿd͓]]30C,JSVQ>.9~ kOH>=ȭy𒱷7~(53XI ]}vyk<}+H<ڳy_+p5z3^yLk7sl9]'9ݰ4!V/)-=CfFy-Wk|yZcy>X'7i@>{?bZzp^6.VgsdWs3O*hgwsA/YTSQUEi^ T# kPVvT6G&،go# J99��|< ](MPj)_(K@R^>FF=G׈̳E*N*ύ*ն=Bs4[4|ZW )kpI|S>7', o\kI 83))ɦ.PO�D"e%$?X^N>wgctì`4bx|}-,**,*.3zg7űI^7m~-;A>?.4:4  e\9&Q2 l5RGecc\�KO*1LA~RkSq4D%}YuURˏBy- @*܇BbbEnO�Z��ħ9-]pE+ m|io<B^' O�P-Ue9).s"U,.) OKO: 83e%sA>hPF�\9 ��|39(D>�����р|�''����� ��|����� '��#O>s�����\}0D�;}d����_�. &x  x�y8 '����|,���>c ���� ����'����� ���g'/q Ni��������ޣ|Jҹ<����@>A>��(Mk5mηAA�������x_Hv™I58DMQ>,4T:}lwQWܻ'kZ 3-9+罪NCpmInGlR>9ЃO5(G E xcgw+0~鐡nEEXP#^U%%UMϗ{Uۇ#|On_Ws jﱳ׊)lO���`g-|a*n2n;]u}ym1 iyy1J>pEyps˧ypUbb=ea}+*a68(wc:8oIO*D6}ȗO!}#?|b*]šf:RvHuGеˣ\70Q8)37l7|iXaSV{L?I ����F=UtCC၄|aOgթrѺ%OewJɶ_>]RUUFi] g5:ZkTTUQFOձ[|&L�fcNit2%P 9#: %icQnIRBCmTĆӞQE`ϡ_9}Xz sa8< 8rX/LTX-gz{1!q sc1-1Ffy+'<H<Ï`Bu6Pa6'ι6Ք {`y29soO~ ]#ehE%l`|0ڞjhڂ{'17"^ΐOx}z|_~Öx6y` <&0w֏wljAfvZZa7x2m㽷Mn}x*cuW.&zʈ J >n`?esm؈eTY]iYs=|S"InJF%)f"iݐ͊Fi#_ ޭrv4GέgOy]sw &R_'2Rn^k}eN+ֺ@u2�|@j|b $ r򙏶HPJ,@/8%8H_ 3S(b#v+fsFELR3E&e $:Z~w #0<DGw}E,<}9p-1 !#抱co+%NQy Q ӆ_> E}8Ǵk^| +jH> uUy3BuG<4<e4| QzV/=#ݽA5c(ag,s#՝B%J>;7PZUPJ?]]`0İqxC[leH/YYHxNe!�Z-fj~Cd~7- gPJ Vn~CH>ij*l(8~c/uҾ QD/D>CNjW8evߛNpuMG~瓽"RCbsBSoݼaq%&LwtKNn޲2iYrzx64DxR>3Z^A D&UϞ>eVu03;hldpno6241551=\FO"kX._budqWc{|flOwD\5619Z9d/:ANAI;+gM>mEvOrw<-5 #$*!Ɂ&&Rۆ0|A3 z 8`r_10;t]n|,a;|̬>_+T5<ON>{f+aڛ"{T^^eOnæ>CB_Q. ֔Wr$C˧н?Z̯/IMQ!򩨶i0AV9p7ۥЏT/:Ghuא'ϔ<O]BBxϋ52 !J(!x kӞ%//Ճ]a'S^ ͥk*`v<9ޞ4c}(]#RbXχ ϧ`K&1Ita,yPH Y{}FY,D继>x䉣A#}b<ie/F7J;D-ⴱ^UzcRhsQNg|S\3ƅĆGܿ媣/-㛙'Lg4D>o?Vϔ3H #<<\w.A„6uYws)l7Tm]Ո%Rdoُ9w:y[WȡIbXC`bn|'OQl-l#yYKN]KoDEWbEyI2~0|<6sֹ3qp3`444gHx) }kJTQ5-i!lc 5=SQ3+*)^|n�HOJD _>?WH*5|Vb~%ZAuoOvح\fGæ ڄ #::ZjwInUq" _(M=$~/P(k_U}cvY]HVϧBb_h=oniPLhLCo;Y' K\<_Lk-)u%Ǯ#=Y*&Cp k@ˢ!eL ]/!dsB>ǁ5O53qo'/5Ke#CgZ{|6{4a <Snw1ztN9JD<~pF?0= ͐!Ǎl׮[Wjv'Շ.gΦxGˎ zt/蠴'-,7}%m,Onl8B=iY)(=j޻|*(|wQ ̃KROj{GvkN>X!NO/&1 :Gϡ'}|b#**>Zdtm|>?%Lg]ϱgl Jױ `k|>q?h|M>B h^0uO<?Z%�_|櫇elD^Yyj_ ߲eSr4H}_x)^^/a*USPstkj=cx.ff/vdRRUva~]Gb ) e z>P󕥨5*E[|@=敹=| V#\>B!򊨞|1`|/z> MEs'C;86CZC3_ZRHYJ͋ vxT6=7h[d2cXO>5>l*qo*BxE9 ֺky8ag # <zLe SRC{f^xnpTәȻw3>v^o֒]fmfI3v0[m"eU'ҟ@Ozy` ^[>{pb<QO9#1=; -5I#=riv]ܬ, >ۅrnJ^Z0,R;cvzzgO6LH>[5잧g�L{q09OBSq?0a"_ԳM{j9C'�>]DvMMMA½ MSޠ2kPp8i'U:"\.-Wͥ{ 4L9dC79*s/B7c cOD]Otzj=$0Dg˦ fdW4qEm,a3u<a_EOvTE%3y^|vv tT{'0Bn{e#uc2>y~Eak4S˶rn[*kr9 ۯ+pT]WP+nW>VT1e1ұp:VE0E;h v}aO- ֵ3)�*2S71Z@D5~Gmk3M(dG%7l6ogc{h!D>D]<q`كNY2 ;w0AAWxhSVKW%.-Y=D35<0-"0%vK֢~ì՟H/B}?sنSf*}YkW"^Bw.~(ivn}I.h檫'|8(v|sl/vZ<|zw u?cDlݫw[>{'_@GON{IV4vb7tH8>TTw 6`qMj{Z"Ow7yF%�#_>봩Svzo&wm|:pl`~L[S|ʫj]%I L[9s5^>ɽ(UU5a> toB>崎*TkAI;,r~ 2:bb,0DGٹߦp{jJ.~~jɦژ^]-ϳ:,#1LcOG{꠾ʾ#93 ۯ/3G|FԷO{Tx}Jϋ )E0E;X v}g7}Wm5UTظzgC Р&8PWP2r |N !)tk( z<‘<kw㐁kw:s U*뭻OoT{Sw}DeYD>R$N籿i@9j=g)9y摅rg?emytwcOC{>[kkk#ţh;{v529tԥҐMW?w"ΊxCMZp? D{062u,y7X#穵Wҗ;F>򃝌|J>]x~=#cc#Cs9㠩n}ět :~޳RYtnzꙟֽЀ ̹ũs<=F%�#\>t Ȟ78!ixE_OYYƼׇL��d>e,h(@#yDcWE8[9߱19礷'L�3mk\vmithn/+>{8ź<v~z݉S$߿gU']ʨ_(8Gɳ53EV\zdBix5w'> *@>�G'NL}d'h爥陃eO��/K>K|Kb=yZ?~⁳Eك7:߲Aٮ_w]}>" WP; .ps=l)˴@D>J#5M)r{~]<k:Ogy'<t y'��0F,(JU$��˒Ol/"Oo:wɨ+B.;n褣~~74Qcw.wUXGSLcR|c}\vtܣ5mԅ:S.r3\ fO` Jn|�� ����g(-%ͥ>ͥ7oy<U󑠳9Qqh~w>z;4{))y(o#>w&miɡ{>j%]K,?se,5bnuN q{)j*F&'�� �����|R.|md̍Q\4}YuG|UnPg>wշ u8S5ۧNG? #[ ۧOz~f'-Οt)ӈ8pR������S>[F>t;u2E3>\QF{W3VDm϶{܉/ӓyɾf77f)wSԽW@!:n1666Ƙj nfci`z5*D5tj!6.󁣣s̙9e93qN%ɛݚŲIwNd ͻt,>$wFxHu̴iOg]- ݨ0+N <AQRK7bjs >NkKkM��8f �����gdϡ{ܳϸdr9g<`{3*Z!G]aGe6>ڂmeqoVdhnԩD||3.?AzuroV^{!'*"Bx[�[9~p晑DwOLb[4K ,3{&H8rste;D"! _3��峡4К����xoZorkK%W"+ a)ͅyՑϥE)Bf1`c{', \hat+!eע 4gɧ̆ 47n+ˮϻQR}* oWZJn=^~uTg")ikYrC:3JfG iУ;d<9fx @ �~K����(?5Imqc>1BSTB/?Nჳcm,i`.h0{^Ŋ'7cEWgOk*|.ZJs>i~T\t&6.^{ԪiMuդɻmCS)rMft$hHu>ge|5B!,)Vt͉oq+)Ndžyhd zL*WyxՖL j,u]9mARLؾryAr-FP6imh9Q8 ۊ86-WH Wg;{#"- D[-ڇ_@fDgX ��'����� s#i rDgH_~wɂpɒAqf!xi 9[I E-0<}$<"ɽ 4^�M%ʲ;rzjԡ955Y]YO4\o):֞$lM0E>ݲ;K8^]cÕY9<fZmU3Ďʫj ͝2/S7'[zVfچ4K%9gc;"tv<pz8@kB:u* n.jX,9,33jyĞ#E ف+�������S[>:':ozRP?FY#hSB8%_X&{8^Ni(DzZy::_A{U^[-:jOcѻ9ws*VL;7ۮN;M2Q>'{(RX:>-TZ7h)iD9?5F(]#k*ZvdUhAt'pxʤD*--rwlX*_=3'$N?E o Nlxdb$: ��'����� s+Y.1P6 뚷07TYz|C񝶊{mU9:j(] :P@>t?>誹UY}nW4tVetVevUgԠ)&dΫ&' bmм|6]ڳ--9`h): ("I/X+pD4M1/́J8x504-CeRD?X ��'����� s=a-~5!&̓{+ȭ(Lc~jgUvWMnW]^W:4˧zpv˧žBLa_SqӒF|ݵ=u>tUg;+2;+һ2z3nK3g{+ .זOD%O-~گ.1. C<_,1٦ >v$cO ȉg#᯿NF��O�����@>\>[+Jo6miDS^OS>�M}ͅhBMEhk*DK˧|5y ~\>"BN[=&/g.qeeҠ4)}'Z([Ό6 (D<+ʎ505ZԯJ\=C10)G4R1SRZ)GD DVnjMsmmvHWM *{~!j @vK/v�pStւ,lEv-Lfjbcpʽlá!D7vp>z~7N+F-LE($s&ESi\-o /=,`M(Lo|v$N]hKk5O[ ?}>򰿵@=*"4  *6ńfZ [5?mz So}4뮹Y^~v㛭R;\;?)H7]>nvjmmu?2=f/j%J Oh:5d3NAk[X;͗0)Q4 /WZu2fv'*83O#38zd_�˧Tz)sbzH@!^k=p`jhN) Ymc02Sunv rG!6i-D49t/F'YΚV�}qcw>ɧT2fM83O*Ko4ۈ1x<azk1^s3Kp]ȾU\769=6UY1ȧ3Qԕ8ݙ4ؒ>ܞ;v=P{o[`[�^8Q4.PGP{P[4^&43V(Z p|hGSS^~dr]Y)DRR7՝*IJS>��@>fuv ^t6q'jǚ;3c%fff!D#ug|t ư xkR]bʘa<2!chZDEwONxAӦ5xc=߰1=WGX@y5ޕ'Z iᏳO8p$v 8a޴x;K&Qw9zO(2kK)ڢ|V׉j3lOLwtWH{xWDñB4vt uu wbhT>Gc]%]%##E##mG [ >}065 4h/((nid{TG2'�� o|JiBC˧)?[XcMIŭ8c@50K rΙ[?`3̈|l#GؒJf(K{g=߰1=W.Gw[:rӜTJ#i00-NĻ)�R228iv cZ<Ykffd\x}c-I77]>)v, [K 5@W#pxg[Ls +z{Sڗ*6ӓ$ʓNI'%ivlvxM2' DdtjnJ:Y97Y%iB2U!@ԓ-|N</=KFώKC3=wMw|��ga:xdSԗS#oa57wT&b҈6jaRqxrdi$3̈|>P$ ;?9n~>:̌=B<E vE{'V;5 {U9 `Y`R2>8'nԢч*ۦUM%1wD%h6wg:R &4|epT<~#͖ԹɇK 3i^D:D*L+Ryql풤nIR$]-KjѴ$FӲb|\|B|r]VHkS3Ių3o- Kn|��gQ *ǿeR‹s&#$_78qL{mDyrմT:gژaF3xIa W37 +}ൠM%>λ(gd|9q0"0ܨ\boo{&#Ane uw^`t3I岤bI\$BLH{FL͂vqVnr=GT\2W6_а QN ukukUs…;H> ��|U)ͿI j}E92E>U1=pQK6Oy^rNs1Ü냪&g#!GkqwP3| g_)"OcA`Z},4'59s)8v"0x;TbK?=Zn'sk/󱢽]Nt59ۗ&.H[.Tg%N4T N+*SQsQ^Ysay\8.:WLY\8)8W+wι*4"X}L\8Y0s��Ϸj{\OǦf/Lj iO!k 8|S"?%:psy5fsj08z4,&~4}o#\>GA5 9,te䪧2 0.%ӎ0ol1ގF]@'{z5t DSuL]aӒA儶ɼ'2iv��@>TXkDNK9L 3<"sN4\qB  >cM>u9}n= Ֆ:l- |ÔZn{acz| 9JakbWuXkg֥dʀsqM;[aQ#I3d扈1q>RQF KW2 p:Jˎ Idשi#7I>���O�xyL��)O�����@>��@>���O����������������������Ө|~���6|����� ���|����� ��� wx����8O���������O���������ϣo��''�����o| O��@>A>���������������������OOO��#1-B.ͯ&6ta𱥗"`pݪm9333;g8LrԳpJ<2S'R݂ ;>?%d Ax;H:gK=YP#'J?nE:Y :wZLbg%I *De\H_63㞾!tl\pSH&'<!O[OO���O]&ں&g6i>9/VRдbc<%XA>5sp{{{cEZJ .nV�mo 9%4WV5%Wa}eDO(^ۍ"2Z'MV9SwTG{n5l*Ɓxrp9m).Nbɧ᧤l*-Bb0zKS5OP_0/B_p?+~*, 3'%m4l2ˑN&%LCo_}?Qt"j%s6G[EJ< ϣ.KrBv}* . pÚk7t*dse臼u1ЕAҙ+;;FM"666;t6m 1'o≖R;}EuTQ$aPӜɔH6F*11ol,բ'B:V +S&,'͉o]26|֏MykrsHUYl* 6:٪`/ϔӍ0F8j+}L< lh$^WVCI*GFW[xNF9qT*nɻ^HW=H1#. Kq|XkVDYQ|J]`)XYRD|2\+U` _!Hl"rU/95K=F[Rѷ)%:߾}MZ c"O(GL5/:jqh~~[ΦZFBC�Ș* at'vaP)IPE*UpsykQ/s|ʶlcq4ʎ.Ua}#cmܓN �gp_(b,^DhYRtrW.Or2\C #^ο Mϝ8svsH acTϥ+L^dxd6O?%X.׎ۮSDԎ0V8`r;&Uz+FvOO ` Ex vt[hnkSQT~ڋ><ZqF&ۈg -h@I1TgZ>ۂQ G)S'xd;uvy%{6H5M(BZ4)%D #rRv5Pz;I R#3P+3u^87\lXO~-|^si?Ws 'Y\Jx9[<Lcy+N&RSʣ(nAZg׌pZQʯ(w$ْaJ8yV4ߒɰcd僥6Ҏt-Ԝ|]y� /,<?/;ť5l jUߝ6HbdYԻQ6_SKi\>7p8\N;ΑnZ/u{mͬ/pdZcVpxʎlI9Hܪ4(eۥyA _IhD>[8ݯj:i<Mg_rOv澕"uqyI8gkxyTȚJxv6gGX˱9g؝-ػs理l;E,n Gr$.E||U8T2\he[% |-=J|+of1|/[[˿̑ U`pm[2۽j}qlbwlUJZ&((OxT\7jTgRhƺ6AheB+ R9w9.\!~X7Vxn< SxXilK4Qg �y,/[>/M=/3HgҌ^E?ӭ$y6uHurbt'YSl'A@U7PndQHྴ_[> PE -tm~Sx LVLIa2W)D{5S`vJySS;W\>+H`|ssp4T<M^ylԵ .zslXcх{ʧ䚸N!lɹ*@>N>ϲF {T@dRK6 -..J*ԕ~R`}H{HU RXe=*W?=vsNZW@qHP\[ Aqh;r2Ŋߖ_?vY7JMM"NmN('>t@>^>-e˧ϓiu=2RTl.d~:!r1k>eug*GAw]ޗ5r0<]9\>H kOo>&iDM>.Gh˧S>Ly<@pk.v_̳"౮8#i(a|B Ъʰù FVC RG&\Tw4j\+lsa2r4sar�Oɉ"*KOٶE B/4OeG)]%+ZVvdcpUyL@75]Ve.}t<iT+'M5^h^MawGx17(cd_SXO(j,i~6>5szuX]R緹H- /8#[Kd\6=rG }|BkF7 :;n#FU')hc{|S~ Er+kb)Am.]1btk)#PX(^.fWř*&D O#)TY,ɏ;+/f|92Χ^v"X)_gilWeUG[>F84C]2/D'Z*ύ^*+4ېUUP{82+݆Ov65WDzF4+QpSrmJ[%S[ F>ֈFEoCNzH4MDU'| -}̔){j OWE]bPDhHst-k9/o\jjP偟^s_ׄڱzzUO>ߟJ:KBËGڏn} 6�/lDbRq8<͋Ϟ?tCr0M\c Jẅ6n[+qht:Tb|GT J1Bc433יekO<D9/D@+u:i:cul&񵐯G({]4 m셮^ށ*v|gii8/k.FvU4,5J8H[(l-ak{j>x67TyĢH% p)9t3ŠIւYU# /Q>ս q93uQY~F\j.-RF%LX*:]:U%W>r$BbbʲEbE.T^lV qn S&lƺ;+lgS9xžFF'Mp_/Nh$VLY`Cs(~~늲 m[!�q| �O|Nz8;llrP *D ɫ%}p ]$(0brp4[NOh潑ƴ,EXɴWV7pێUt 6L<s )>{Vs8F,Or!p$:DXLĊ_7'Xn|僥/(~^nO����M~3o+V{{~_>:2d|*}ehv6ۀ>O����MOa~ȺVY\XQT7+OtFf_%AQ53�'����� o|"s#;_b^Fz}yiSey{C-OŨ >mIGvN"ZO������7@>v~_  n(I(^'O*;|��|�����oDym|xhfb Mk+6FzKmkiiڒΊ==A>��@>�����ܷ|eKgg'7Tj eUʥtU/\]m ϮD[;>ysegw JFzFP5OT(䙙i>z 8+6Kճ>udwpW$Tί+.8rynI`Ir|� {�����ǀ" fw<m{ ε9nfO IgDRPNFӦ+$ptU>t}.~?>|+b_:/P[>'%ʎd)N6R޾'K>׷w/ b3{\m �@>�����<wn6UKDS2l{kq ׮Ɯ;4;=9' hkiy4=P?/i[S|||Ldʥn.^P=edMPF>w6ű^؂ޝ٘@g�mxN-j˧滚dkꀾ$ l! |k Vͧ@E:)t]C V)pVw%:>과BgGxtݔїR3@5?_BfS0uvh`I/y%7w  Aךp/V)������� I 及Kg&e;r2Ү]>wS\۞͍ٙy=E|.Ց)=HbVR$cʏ-S1ZT~ܺbRWlnVO󽡶uʷ= MqNb<doA#0[2p4ߚ,s7s^HVV:-o<yʧK>kxcG^۟m.2p|lyb<un{G8S{}0w T6Qn3xˍTۄ\Ve\|7G�������7 c/߿;߻u#-=%֊X'd]]޿uv|ž9XzIv9&7"jZfOY6 d1.U7ecRllW25!/Ag/=T߶ۄ,|!mn" 2G ̔ÙWH|V {O S<kV |}JZlv:Q)�������͖kW &WWg޾ĦSφv4)sb|wy%v;{ns݈|j\2x)UynY)ݳ'5 WMU%W^4 ' O)%^,eY(Fn&GeGae4nRS]Ym}nsC.}+%Qb S1t ES[fȬSFߩ e�|rT8yC��O�����@>l<Z񸴱2溚+?+׌ mommll÷56Ԣo<~Nj%V6nVsV6t$+mL9悦-, _Qeok#w]>>TFEu@ŋOYPtWR>_~dv̈́rmiVF"gQm0>y' q]NycJsQI_l3xˍt֩5Em)NJ<X��'����� o|>HoCED4<9J?檊ލg˿ϫ+?񉏿X'P iq ;F[idqagOJ#D j2칎@5ε_:Bg_h�儐+,ıuODh73g2ΪSѼ#A ϦNpnM[7<V~U-H [{kpV٩~:%W\##4A}pDȈԳJ<X��+G*`ѽqFz& ANE3{&xka#L;+//&{cIt}ĭ ׂF[;i/OбǶi%,ۃ2n<b'ͩ>-҂rcpgMz~E)po'(:_`X{S[ "O I a2-ҏE!(L3)19k Xj}IT_b'42̰ tG$=~w⼴izl>37Uw?m\q>Ɣk�|UWxg#i5V4aJL#EYQOkmG>+8vזq_2 gk"´D"#ēGg&f *Vf2# /Rɘ5 ̴>Yd+`(wšR+:'5Q@'z+-c 1^sD^r҂Ό^m:~uimD4U>ͻ/Y֍a!Eg&ƭXO| ���V>'r})O#EgTyxՖL rʇEQוSt*훑53VbU7)ߋhNAoMG14HfkVt͉o.\2b~iP> ˑEiC.w*dFH~D"չ<O##9km!Tn^`͢P4 ndJWNr`xJ;IO>vVFDa^,zLO༴.sPy~Vyn`o: _|b!$xWh1$jF*,BaX؄Oqsq:OVd+I ;]2Ǹd™֋xGX˱9|JX#-B~Ô4XnW>-{P7:{-!q &C[WKgEÑIx|��[JEִ-cS^|2mCƥɜ3\sL&?ΰH"<cgy"G/z mPt^IEנv$̒"if=–ƏS>cZBu$!itzE3$zel0ܲ;K8^]BÕ=S+ՏctKZm˂qb#uG` %Fa5,Vy{F�ikUO96rD-dV#esÈ|jG+i0}t7/73ǕF ,N ˷a`]Jn,! 񁺺Qi#nNZHiB 'kMɸScńk9V8ǺR HO%BeK|֫W$T>?OR8_ws:ӟ(D3{{��ϷF>{چ壙-Ճi.|<dOTi:6D:ؒp8&z\P'} {g*`j ME8u"o}4/9ٛFD~ t|t|EI dFe5|B ;*b1iD pD{RE.2JB#id@tMP|狉|jEp8 ˧~5x5iX*U1$ȳ@4Z'Z7ke4|j!)uY+oYч6jj.#"XgLy?m)t]9>{L,n=e-oR1.>^s/}S}s§w~?w>O~_gg|~S|_��8V))59v)~}ylz(@),% #rhm"֏H`T>D8i=iEFDPipid_1WIhD|ܤҸ9覆ОmiȂJ>Y9")HI;Uãc#u,^~.'tRUt熾|jG`8=^|ꧏ V:{8*2y~nT"#8ixc|ba(?Ao r'`_7᫺y9d&16=m/ܾu|_>EwHί9߾;v5w5_7H~_'/5 ���G>4C95~4 O0OuT*p0==SԵ9SkYPMO})8<._G>"9֒I'kx?W:F[>:/{mRMNF9Ft|b]I3{n <C<@pp. B杯l]ܧ΂Is^S$4C|9iͿI jե-hջX˱9 _^tI8Ͽ|_|Kg׾>/|-A3g+_ڗ;_>}+_◾}S諯#Dm6Izv"TcAB$Q.~K;$?gAX> {[Pa6Ħ-`x�͕OxlPMgt<|DDŠ AT${RXӨw3CxF¦cOIⱎ3\:;sz\q27. Y6eh;XS>%Jej˧HΌU)+w6?OP>3ڈ4C[>}8~R=qww(;/ր*hVFHXMâ9La+gσ'v85ϑ8<Os-7xS4v⒫,w*B D}c VRiif.PM(�vs.œ=Q]ZyCRQz~yH4QW$kއM7fڐCN>//woo[woCw/O7Bj>5ǒjMwIU}PyI EMk[+Һ 1zʧk6gI+d-q m%M ��y}[3NPc 1gD<@ٻg>Qh&℀kyzAsaʃ|WʽS{מm|dgGԢGQ|Ϗ w:f# J3?:F:f/zIҸnyloB>oys4 _sLs wxؚ?YY0=)Q4DܦQi;QX'-pGugIfFSD2DDʘ8ˍ`u8$<X42gXڝ9N䖤6-'Z=y:z٘9[ְ$Q<xF4\>鯸}*ѫQp i/&$BXM>nT*?z҅Qmll: ]]h &',ʎLӥ.|{XxM܁Bx U?#37؊ns#|cIla]�yO%XѮJS��O�xA&��^g@>_ d"zD˲핢 <KryRl{9"P[:'ﶫ}eS{|te+L^dxe yxM)ikwr%+۲(; E+ݥEPEȖ S>d~*\Z4z;-wprGL~֎h'Vʘp��|�'���1ϐ6Ջ+$!p8DdmtTM5g>xu{m-'Y[BЯ/ՖB2 aq*yV]źiE(Ҡ|n,VH%MճZNls:j%U9Qpth+eL9^��@>����X˧5Au8F :>xGĚObgSY/FۮdX]zl YVXn{K3Nz9шTO>5m(VtG#X)c�� �����'.Dޅ'e’mPL*P^'7uk58<uyMcvͧϓi~\ӝFT #4"]'1L9p|b) ��'����� y\#%슼s}qE?4Qu<@O+jVv;W B nWv+3QwgWQY;\wɨ:+kblsiT+:;n)nU'н<g[FHS\XfK5deO#z+eL9^��@>�����%mMbPTtj�Ct2H;~|3t�0&5iKN(* ;\0Bc45(V lT -aFU۹&i ]Uj> |\4 TҷxPČϮn1RƔ�������c!o }eֳͦ�''����'k*;\2`~ X�������*ɦPsr�O�����@>A>6����������������OO���OO�����| ��OO�����*���@>_l3-Ϭ2@Igٹ /6'\AD=9 j~aC7ۍhc0ОfELb槴&5D[Pa+MGtیඃ5`qZP } ^ug+u߈t$t6ܵ jpxJ楓T 4c9f8}!R+%qTs ����)ޭ" z½IPiNQ}uJ 7,.yq.XkGMOiI+dmZz?LTk]~~S%X_|l VDBFKij*g*hO&6M80/[αe]pGI"YݫZZY[L>���@>Oۃ/N#,͠rpDYNߺd~55ʉ˦RtKޥ:E> 8@{ZOP8[xd|AL,cm>fh4s3W5uX5k<2j-+hg(;6J2s#l,՚-ȫ7.2T:wweGf0׶F"pM.{jgSqdffӥ.|{XxM?:g}\<aPӜ+#T5ccz6Gwt-O-Z!58Hd;,0x~b8\:j^]QL#Lз\4G (2k9V8GZ 8y%iwNdވO����SXrlGBV!j tlO&?vnKU/54(/ Sgu| a7ޘb/0߸0\p)9l{9"PhT>w",Wvdk 6])kE}dU^YZ|-fn�D9sCu/Yٖm,F-s-L<ܦ#I8JP,B%`d$+k_;n\˱2Ԏ0V8`nc>m{I3کAgήdk^,:?+FNvKB[+ۼ[n扵+�џ&$k> i#OIٖ%=Huc)tUO����sfʟt Ţ|!qA=GEgjEoP6]jpP[=| !yhS$*7>2gG"qߨ +n8ֆ e8Y.4(kh!XA Y4.NiSffDV@(sʑK _?ѯ$4"AͳdV$|BxttLC#0E>G#}S?}tXCRE vwvm[)R3AO#iԾCRE+9( vdM|gs}|4+�ݝ<褰:Oɭ4NxdU\'$1u19���6nE5~$fЁ7_{Ɲk>ܴg8666l{J|w4 q˵:E%~ MEyaZDtkgS8F :>xР|>B8MҌ^N4"U^oC%ťf!R]g|15L'Phf|^zS YEȧ5xF"6ξ>:$yW,?? V' <Sh6C{k>u$kST\٘Bne>>ͯ|��� "n$1|`Ĉ|jZZXoj=rݎxJ\pH$.XQO7)'F6D҅' A |lͯҎPd5YU/DScm�?Ѯ䚼Oo|ӈYUu1.B[>}Lݖ\O}1�1W|dT"@B0rfsb9? VtDM^˒}ܰ]]j[~w;csyjawyOI:ɯN# ����޺xif~y}}uǜyZL"0E +;ٱp[OT6Xu-<:֕ .ݻdW#LA8d`,5C 憲8GK~gZ'*bSϖ(4fK5 ee|_^&6.1Os N,ɏ;+/f|92';niUidVЦw> fFK>G|𴶩M~O⸪n1K HUsG'f`AJd86dpiUyT�Ԟ d.N,omL vvkh9f8ǙW ;~Jel ϯ˶WJ\����4ZmX)8i?zfK#<Xt ObYâMʯE:zGU7:kff(2X(mIwbtM2Tz7buFTjpV *Jcs_-7&>yM/TU"i4I[PI.;\VY0\^M>k!_s Pv&i ]U<XdàRn 9LǑا|bcz|:lBv][\B* Pjg&Xqй eڮlmnhj3XTb5Χr#g3ܨV1: 5{Jʶ #8 LE> ���|;k\2x6L2 ��:7_K< ��'xYQn|��~>h5Ʃ(?5 O1MŸn=g4O'ޏvc*'4 -Eu���NSCKG!� ��'rwv8/q_iGd?)ٿ`r~Zk[_s]?~O<~&Q{HM &ǟPڡ <Z'�� �����5%8Cp{729iyەjN%Np=qGI1^r_G<x9{?.K ׿8hO?e~tBO Hw������7w#opƽ_|HgR#Ef1N~�ЗHq X%o{7lqW NQ,LL㞽'@;7˝/g!RDA>������mOE'^>MߑHv:v:ԥTxtϰ{ǓB6'~@=0˩E>O)==ŋr~O?������R>w�Mow 3ƿH?/_3q=Kן[olןqcanvͿ=;֮tz(S/b:Nd iጦ1{ʧT<LBFKd1fHg>H1_=xr~C+ WF3)Y؆eRU%i~, DaI챼B{ФľIUՙun�� i���-?a=E-=Փ,j ?r5DR~EbxZM+(-}Y_xTxa[~v/^z?Ą ޷8yz[߯ \wdBfu>cϩϠ>ED]]Q2u!Hīa7s{=}g}A\X{BB;" +₢$Dqf2HeAEwu;]Tuͬ0,.E6V6\;%{n6kAAu+OdS\r<uItU vp�@>|����� 5k-\8rS˧)T_5t<oޘx+V<?>_0sMsB!XiU-7x^8zdkn5O"[gU-w/C26ծ"c*X/X} F8%L1Ȇt>D nmָ7Ršh,Qcv{0ْp h4{|) bΘ+<"3hbQ)}:}[C>%e3&k$aK�� ����� _3Cǹ a-Œ޷mǾ&"'(ǻ0,0tnb[ՊGyR/z_UNU/ +բΈUQK,}GJ~vCaWƜO>ł릅la,LvBʵzw̽·)wFt9$,嫉F iٿRڻ'+9FSJLY S #4/ Y]^W[]*Gȭ<9!qlnep�@>|����� ;IΑ5 נ+~>U>B[8<X1dC-3l7> hgOO7> ]:ZhЧvdEX4҄9_8_o_ϾvoߧB*̷x9Lauq űwcJa0CwsK>-(ñ3?[<S[;6Bn6xs᮱$l' !Vl-MpwVjW[GMo~xNG+JSj�|����� K̎6y ֣U~bw/@G׼E^5zvhڮWÈ4mPк Ni"Av]ܓZ{{?^COl}tnyƕxJi:ېBëIl,u 9j8@bGl5rGW'Je0gOz>MpgU71` SőxcdK{>=yԬܫ}WtXJ�� @>����� ef?td"П!Y1(wؿ٣s{V󉕝! cNnwmOwlFÕ?+]1|psk3% -6vWm.ۥP8=5ph{�9g7wVX=VWv[㨩pfi-p;c/ۘcGO7էHCsif aco{J1?bGqȿ3lw>.E�|����� +e뺮֮4W/||$Ð9s풮#?F 뾈[};Ba#) Aj,Ice=Dv8`WÈ_{-7ތ"{ҵm }*Cj:Zo|m{鎮H\ؔ@G# aڌ,\Tf$f:6hJs^'e수Uzc,P5H(nˬϒY[cNV9"7:ҕ)|g햚,{WNF6$X6p�@>|vTE,4#1b n~|:qlj{<ξojHEay%5�COb ~/eBp>G1M.\^OH4':|x%ا6:+ځȣ2[Z9p TOͅv;H:>c^yDG'`!J!;kϥ:fq2ì]y3W]SU.\v4i|\jq{;/f>ؿb൐;ӳG;׷V^;R2o~%Qd߅'݄flz!d u&z-][>ϪߙmV^% 맄o;¢S09t<Zh,W pb *:\ķ^clqò+l3]Mݧ mfzǚ|8b+td%E&z\vAFpۅH%֍z;˺9�.l��眕Ͼ+h4y~[ǫ~46!dO5x9K62gCz}zCυȒ˧硿DlyR$50>6Zo8+f@a&V,G|m, R+#bS.ILo7lW-ۻTT`A>̓`ƼP<GH�/ki5luܰ&kCqXu|QPIe&.6jj8xn\=PjhQ燈Cm'_B mFF?ތ"-+Ȫ kBu {'xmgg; 7J��9,tgu<~ab4Nx181w2Uf_x<Ie*p˪5Fbp 4dz>^&0ź@{8Lnj[S䳭8YĢpXM+ovdpD*;qyJ{` aYh"ңG&H6Jx~˸nAa RMs>>l,Q7aoR)9ם佪6%ҙ}ly+)CKhc1gxz+Ц !8dbڧTk|{d٩8>͈je,߅0Pwww(Ȫ8b|9]f [%qHEa5iM>*IQl'b#ulR 2ܸ@jWFElp/B{ 7j\wd}gCEZr-M'Z^̱F1[oI��眕O@8,?= zsUEhoQڻHqfi,6P] yՊdf{-MC :{.Iau.%'ph:ћ|w@gޕϫuΗ~=h:owF4Fay7zhre{u$Eq<ub$9s M@GH%2&L Uݎqݷ/>t8i;zJ>=3-٧3uA>pT%Z|O۹Lǰ[oΘ7;b1^޲@P 4*-<x^PA NJypxuzz5$q!D$H>ءL 'nm77 ƍ|n4MFenea&CtVdNV|"$/?]]Pg(='7`_o/�|etQ؛vP}C]U)bXjv>}<#kwR #WH,<pkoOi\-~N?ڳ ɟ# j}ȧ6&`Rv?2g\!H4Csmϋ“ Bh²'792p+ w–pM$!Qz_Y֝dq^>S< =W4'NԀmrT窏2Y>y�>O|;|h ={L l<Z0-#,a+ "XCVlF񶈢L8H̄^ltdF*%~Xx7"5maQ(v^bD[<lG _�']}|���/E>mc]&Il{>G'h?@ ;-6# FI1MUtI&fz�Am+ )Eo`q- tt$1jfCF*p>x9a*t"<'R6ܘ=⒋}}}#p B0'#kll63 tY,3^ηH3kBgi >[|ȧk)|NI#w3h,`\L|w[/7" +0_i#]MGe|!f;I�x *&:56Pfrna1\}Z:/8xF��@>g>UZs}uv2Fᄮ4رmq$l[ Ed;߹?9?d9~6]ϧ3d:>%6|۵{,9Q֡Jk|NYVz>;={>eDbS%MGWN W)!"Q9SLu7y2K+A?nHph"M5͏&`BkjʹL!ً|v�8S:0z%"2 %AdL]X`.FفL9Qa! `iLHxBԤ#"3,ztǔϏ/ )l:5$<1D$3IcwHc;bѰa;d;eqQhhh(؇Ulr#r4s|;QPi ׀#=.򊺏}3 ;{'xt| O?FFӨdqdE>İ>>� _|vUᙦaڐ%i?q&S)I]HęA4lQY3hX]8jEPp wg!0F Vnu ܎t(uɧe \2rjgy<ncYt<[KI{)\?uz-G'W8Z9 !* 03}srKLb<@?Zowk5(`tr,D3ꇫR/2 <zw|v�<o7;{!\|b1wus!GW"Hxa,s,yr6D4"F*9XODEf$2 >j憥+3vGd%s8u ^S'cUH%$(w:\4f$:HEs]Ye%E{+ᕦ !H!W>;ڜ?(No? 82ЧK]U>g 3~~PЍ~Ƈ=5�7%7ݡ`q"uBk{Ԭԓ](4r̝IZ,QR{G˸BixJ]^l^g!0OgRG` uQZXnL,@ԧĿw(BƒxRs¡woU}#%\+1rc[wu7{6J䉤J)giDL˒NN1v||zMgqƓSZ/, 2*`yVs[xr>'‹lRޮG#og5ݒS҈8Irr&uJ<߹V@ dvnD_j1X*a#U%t1Ê&ghsha, ]*UFӥQ)$lD&"HAB,2F*%L*X<)х v{{r彑- :ߘ("5Ψ<Iө0!^Uy"X$Vܵ~hvg3]Y{2P$ 4iWgUy&Q9枉3V} 9n:rKui{k)䃎>R ߜI}nb oj<Yfpv9:nMvrlNW<c=^}x2\,HD"ELc#��˓oGg"!f ($K&��Ki?|a&]E Q)Y џ%jH$ '7bcc1dƝvt0!O#O-mȯ-L ftӘΎ`S>fHTJT2QWpP~xFECJ#.܈S02,  [yo]pMn=0h +c:F8_0e]~8>z$d6;fd'ްl:'4 #= wc[voAfDGq}メɕzp[b+;sfp=1]Cw.<s=:rJvQEV~\1�@>|)o4u~{)X́{L|���O_򹖮X_Vnd)\V-Z(,0n'WYnBL/v #2ʼn9S,:^a02L)K#Nʓ ,13xpSuYL1jdlnjFNO$өJB!A򚻽mQt)JD5tR{^S,"/?M>3.X fi5'M>=?ȇ6ڐ+$T_;Sz>{Q%K"&PqW��O s39*H$I̸:+6 ���@>}˧=̟W(ELp!H )$2RU*7$psmvlљ2cA,T\]X)I4*J!IȒ$Jr)]]F+ 'UiYzZ]<CȈJ||ڭ\UG$,G8.7]!VޞQ>aתzZc|d%5yp IYӝKkd4Lb&]</:[3ᔽef^ ]}naox<ϜCOlպނɌ�� �����૕HLHƋxYNCJEWI*c<MNd@22dorޤbXDK5مʴB&)]E屻*p1+2\ Ӱ9ߤW"j2:C/&jҌz{#=P\?HXiXK{H;?1fww2M)v~B^r916f猯(gK [|fc؉B C{s9,vGb-]Gjb�|�����gIR ''ˣ(z(\%w<!==>)aS($lLSQw_ުYeɥ] e麜˜]qŻK$5J K!q)8N>d҇G):VDiBo >x[' iLHt'm([+Dccv]3=hP( 1?yBX" =f�I=.P6W>anY\%7^wv&/ӘL3;:ܪZbOsYpj <~|-F��'O������_|"YBH Rˊ1^DT\nQbMKf$/b+F(LVԖ[Z[@ڽ𿻪UTmܼiժ”ҒݩY)1:Jƕ>JDD9?)V+')M0bR#2sg?-m*N��'������ܖO,OD#p WGEh~T @\,L*Ea<:f4*Լ}IAC eu -__RR O/H*)._\XU+C%&JƑ !"DG"u8?ިLI5%��@>?N> ����� OH(f+#ZHD`I4cPH".^!E~yܱĩ3rLc K9ܘ_X(p IO#jO.<1\GLI1f��@>|�����哮PuzEt2&62.ZoPh5jSR f-Xf UJEdLKW]`TZ{[s޳7`ccNW/Yfͺ6U G@H*caFȹ<&!Z+MK5 ��|�����5'/R4II(5"!6"+jb"aXN�=#x+deV_&_oKz)C)"QwE}{PP`zBTRZ-q&Ǡ`LbgHH१D66 ��|�����gX\\TzjLN-]qCBoߴ52Q~h\ Gh!@v<u +V5d"E)4a;`ju~m g$EED"& /RNZqd"A-ISS@>��O ������BHO+M)+6,_qk6"*7 XmA(ǓJ#|0]h+Vwk6|`Ď@,n%+֮FȻ$mܸMRL$V)US! 0t !tqj1FL^XrlyDΥBKv*7EoyH:@{���������s|"Cuqyyd&h鲅 ,Xhъ56 Pd$AGE%$?]j+`܂&1 hlc(Em ^b-6_~5떭Z]§DGT"X>K Q Prvi (uiC>n}vm6 =t~h>����������sf,Z#Fbv,\deV[)` >1ƒ)[ ꭈ HU,]eCXyt�7lܰ)rݦE6Zv6mfQHIR QxItRݕTnD1%$96ze:O>6]XT)$2̤}=m"BTnZy;=^&0ź}YMC"p4|,YCGm *ǓTGc68Ľ\4$gG~NNP Gx��;QPx٧V&A~tRYvc:W8O}J>c}4^)o:NQG>tt>\G~%aFNŧ ?۪4F4~޾ßP bȪywtYh_ ^>.ZL& ˽, % ~Xt?_xV[e"XI)L6>Z ȸ3fW@d|P S~;"-@  Yv5뗭ٰb5+W89* /,^-?8] u;WnV1蜆O j+)W;?h`yܲG 2)9ny'" Yl=09nE"['&̽mco1Fay7zGuʕЈ�|[K9w>Ѭ}ͫ- )jvOrW@>?ؼ ߫R u>o+XyÉo }|.e pSY0SNU=/]R/s?^: 7S⽧-˧Lw?}־Z:Y|x/Yj%K/\bъ \ov?~' EaRmRX0nXѴk7o @<N23�#Id$~k!0h)z㖅K۸y_m!/3(4 >I1tGt*F+[vk&$|Zo%+D A**|iid3e/F+<ڳ gO7"^Du 9.VvQg̏eM=zd)���9z@M34_r944/]-s "/_|?ۨ 3oN_n%X %ѝ3c J [j8u3׽0. ܚK@>?Uʔ{b`wFP/\:Z%źM:SghTr!_bzۤ^lժ>[}HyF M)s65^ҙ}ly+)L#hݣ ~! a<*hݗɣ9rѸud<܎<fNVo#ӹ) O;MG?+Ba-oZ>{ۮW6G/[R>+嫐+ގ7A,) Tmٶ;-ނ-Yn4rDz Vmܺ1t!0#V3xDV q_0nS06^t5mڼ6`-ۖ.^R+l:Ipl\Š8bPF$Ml6KXڜ*74RNg2T<쮉LZ?<xpW&fz�ޱ8\j*=,l{ ]ƉT 7@'��sNg^)58b@HjO^ڲ2޼}l G~3W{4 M" l{=L{營:K#o2]("Y{ WO|'gqK jOO|~E/ #Kr`y|yci89{̰tf?.3]DGA.ypb^V]U)Vm.oy1d%W;|o7«-[:߸|S:x= B 1ݛ{-y"3,[֮܌1UFR(aIZo g+*M]g܉ތc._i]Ɵ..PnQ` @#q[1DVmeKWZ~ʍk.Zdׄ LNrLpT>.G>U+v@=p tC[>m($V8d4#Q!}]l#\,H ix{c[Z*54� sxX*&( ߤ4!nq7^c'.D qO&֛ 'n|xr"k^3䶉#9:V)Svz'9>aLϤNT|>mR _v>7ܝϿ2%J3W\9g=Ğ"GY&jͯ ^=kEa-7>Je-|z|"w ħ@a11?O_zη zV˽KR|8z}.AQtG|%mZV!)Nq"e2H�U )TH?BΪ %KV]b 0`2#�E @@8Z0L.]r%Kn^vW駟o#CHX>c" 9nYVwj ?>QaD ιHȲN* #O@MuM36p]C^>}䡂)ua(ɬwqхmDZ8tm!|o<c~,-gvZjy<CЀF<��sހ.BaX;]/Sg=)||4^Ӌp۷p<vj..>9_.f0l6 w|ξUʴ+l6;艘TLOC/Q8@@|ӧ|zfxt>(\>vIɺ;݅g|W310j>z̽|zd1ߟ9%/tRm~(G|%\":KX?R.9%7ݺs;뇥n(u̒&f1jV ˜Xrڝȍc P M;сxN<Is%KW[fe+^?heJ!@JNUsv`ܰ[>m֞h!F"PH]޳Q"&O$U*Mm,2Xe:RV=>𸭜|xYp8%4U_zxEHx+n� sX>+ԛ<E>j>=@ɖ7MscgDvPP{\ TG*eJ9z>XS{>KCF|j/'ݞP3|N~(2]>=N|}RG#P$pEϽd矿QPHwM9{_:w]D>[2i3˧ѣS}3|sxNon(7J{"C>o^ͨJ*H6lXzÊu7ɛ lP^l* V%vo-_.ڈglAp�qsv+"lډ\jEK.]rڅ/Zy?D|ȢA;1XRIj*_?hۂ>h퇒JŃp�� A^ޅA N^gl'(9oe0Or5h3BҌ|8Kg}|zvzPG:R)Sm$<2hl|AF }2r9g>iO^{#?fzs&y[$& hս|6vbGȧt> 9.O!Н1$]'u(}}Z몂W\`Yo{%O^h^[jMtq=>< U'_9cD~ׯ3Hޙvx|cO|Z2{¡o_T0dގT>m:;3(`D Y ћ/^~P)T#P 2?͟?k6, \ve+/XX/?qw=O?|?{c4\ʁAe8Ij|,fac̠ ��| 3NOe<"2Lݝ-/o+p629mnM\Ȗf`HFW=X2M=\G*eJݽ}`wJ0f}a-e XNg06㆛>R͛F (;Q5٧?6]|E)|2Q*xV''r?<3e-'"0tLVo##xrhlUڜh  5xsztQ|*N+pf7>_}f6D?Y,uA,&۲v1썰.Ձ!`*XW@;fw޹8b;F)K|C>̀VRlos )5 ��|f Jud���2_|/?y66q~Xd˖/Z ,\s-󾛧KE ~S23)&ݽ:���||Ҁsci8] ( ����|Ͽ5W.[fW.~=;QepJ ���cO'HDN.m-( ����G��O ������*����O������@>|���O ������|����'������ @>��ۑOP�����|k ����� ������'����|������'! ���s ������|����'������ @>���'O�����|����O������@>����oalJNF>JDG',D 7}ƔB) uDxҨ×yHb ~J vpL@?tD\ՏF<#DlvߔD .s3V+^ PH$D$4Hڔ!x|SP=@J޽||{R(���ugW[lXSRlrlwޥ@rfy\'EbXkmc~OL<I1 +6b;2<ndaZs柒Rjjʭh9l6?vJC+L9"9hweV_S\reb@w/X>/4?T /*ޗu&lJ;y5=V|dGOXWPCEMu'>ZzXɅ{4i9RR_RpqSw8Tp :peʴ{RMTޗwp_}@>��ϯF>extΊ(,7x6#!، 6;:-WRR#](5Vi2Qo7-WS ,!W0;dE>6}cF*r #>mEo^&0ź=6 I*S1,UmJ3:V>S9!"`xij"EL<Y'v's(#Rى{.Ц !8dbڧTk[qEV ȕdwUc\,*F+~v6tVxo|)){dYu߯A>ԝ:Y<z^Iԫ{b"19uM9 њc dit@ڜk9ZqxogE)EiࣤƅA _J4X|'���T!C_g,}ձ,^‰ϘxWB@h$S?n9&6HcOIrámn 2'rGOػo_| q\UqԄ\-)I :T&%չD$aځ>>>T£G|zf[:Og.0M-<KD]1*0Fay7zG C=W .oy1j]cgx"n K3aaARXG.^`[{KOGP9"EnImfO/Q>*䳹A csR !7 ۲aŘI;6h`'s/Eō2@ csR9=SNQ$9+NLV30rRL iiAX߁~7, \$l@u4b ���W#6@ }gY{|}4ؠ$ B8}8792p++l?@`wϨ =k44)<S3vfg/;wR #WH3q^>S< _ YY'j6LB92p=}ȣ*}<6#q \z+e ;扡6kz-[:2.߼RsV\ef/X>/6WDҕ,'bW/Ρ|M*15;^&ecDɲtGBB< )8d ]UpIQKEIQ8%<?>,1<ֆAR(B3BCkEj '���ȧφE g>JU87Ff"p#b#.70]h\{WV Ț|hp+sgڃDC;]e|J4?Ea!hݱf)1J3kB%qu4`]*t"<'R6]C>o6iCţXqOTq${>f 5Ÿ;_|LO4h:Vg "y%#9V`G)Ұ;jbUbJ#8!s1 V<GPTt zaZdeQLa:'QZ]PWpXq�'9TtHCmDzLʑswIp\Cm!O���OH;(qb ~)C`Dq36!z>;={>DbS%MGW:4aoygDSCD$rb/E]Wt+A/|Ps\>vF !$Uϸ]h F(C- AL!ً|ZPH|nWZl Kac~Ď=ΔZ,g;L<-[:�'絮kaV?}`MS%qj_̙9 ZNAaiX1}V*s KNFUCSRkKba$9 #e%*+Ni:^)_xv뾳'JVg5\>Qz,rcţK5dX5rW{(Kc"cU=L-[lhΎ=UEi2Bh='^};QVCc0x!Ŀzv?'&bq$1ӗJj@�� ,ġKpT ~BsYNg\|b1wus!L84w[ ';6j[p Wl&Oq4=]CpHȲ., #'%F}.ϙƞ- J2k{F= '>B>q쿖@<a +1 ь*E2rj.7ae-,Hyt 4!T׹16pvc U]%dz GǜX'�j)֑L;5o\-5 Y, aϺ{L8м5gI^Sw;~8N :RH(͎N6huf^@Go%nٕQs0*C؎ m)g$$v'V+IIUw.8_|$^[<huzC)fj.:/}Pix|nqW꟯,H?{F!pjK|ljoH8?e>/Eקx:yWmG/^>(ã#6KJe_GD$q~1{?|>C䕹3��|~> z9dkY "91'4"@*pܖ'Kɑh!n=1>z7ߤv̓Hl޳Q"&O$U*M&OL<{H#bpXxK!66sgqFGDI%^ә}s\>k$d;-jk Lqu XU`;!Ax<;zcwxr>'‹lRE&KPGjA'atN}-ݛ]#XRdr{>HuOŠ @X>E F' =ᐷB w/KUAGү5VyT)U[j(0; ԩ91 c*=٪̨8So <2Er FY$K JS.n>Rظ/ѕX>o6^oJr<jSN$Jc353pݠTXŰ|7luVak"2*;MpC2^>XB8vAƠ0}SgWk3,䱋<B5i |zڠ1(]qyݿvdlrwXZB8*.?^]>ǿ) O;򱨬Gݿ[VB脾gÙ(~L��� �|)/��,.4YT|@[g+.7Wf(2t6 q;QBPt =@̈K*PNlWz8C+e+Yk2gʈ8XyqM$xhwܽenɹ՜uL]<-|U-9"ku^^ 407kp f 0a* ZcX,E&&]v]єa+| #b+kjÜGaG_w`cv,!xIo':$(SSWvVkg˪zg«z[w]_^opJ{ɋ7o^>OZI3: ��@>� ����o{ʩ D/5<Zrq$Nٲb!6p !;V5Tul%#"tL])ZI2Qr1]/踰̑[^lyvϝ .l}fsզƪ>z<T^L`?tSshx8jo^tO !4U͟$Y_ոOܛ ìSN>}Lsp ?yW\JxusTGgϞF[]^93&Qp =? nc3Σ;r8zKo񎬾MR\< |AK`&����|���ϿK>/4K=7u4PQ,J(t p TyL_[bx^j͑)JtJ5(/H5$EI>+]?z*.W?yzm΋Uw/}nש&|{, |ի^Ws'ٽ{6ڻ뜓rDBB1 98`r"�'lc0漑 ,֩KygZ3==ݭg(;Mӆ"£XCOpf7~H0qh5AZh&W.kjTm{̅Ǻ4Եesap̓[[of0-`sEڴUЪKMy=@l,2i~ �m̎1sk3wً: }+;G7yc L��� ������ O%PspR<TyZ3~�A'|ؠК*oFԕF7fwZ;D{.m([\{`INiy̐)N!OO8P+k'9`/4-OUZg<mHץ9MeՆSnn8c#oIYLVTmAL٦2-c 2/Z&usG&'YX̫d`4+]8w  tN$ZanB%O7EF<,m{n'cѹ;R: <KIㇷL��� ������{v[δAm͜-q+EQ ~;Ϳht©ڼ+3%sc?66-Զ4J2\93Tm c$.mԗq˫_ }"`9$vB@w嶗qG{MӆhGDhu޵O̤pW23ImgbԳ.puKlͼw-30rg`_i@O[hM+ʵ ٳUY4.<'-E5 gK 2Sq+GO5lllKgϟ,$^yk{w>|]@=y d=5L��� ������{Pq'kt䦄W#,1܋:}xWvcr;E"pD[Q2ܜ*֥s23Ҋ3B;j*;nHhʆe' -Ye1ʜs 4s,w-CUE VfpLNQfZ p~MQFv6_HUhx-@] U3NgsN7303Wxʼn ^]|6kv'%(" {> ?3` kvikdl!0��'������ M>{Jrb|"\ZIN`s=<8ц8pDW${ r&:s$ >d R2@yp?e=eumy 2OHdb`%v~ڼbƞl>[׌"}�|����Kk?|b9Wv#7‰<ޞ)ݒܞ)d;.ZO:wb\ JK$"AO AF +FjdÕiNtO.szdkCE`c@SUoCEYɢbq[.R&2ϡ$~ȧ�XMA6qE��O������@>ߣ|NrJrE8S*aYx2ţ|:7R37R-IKf ,Q*fyUП|R6\5;R-ᖋDŚe ךJnsUgmIu~BeNH)W<WĹlLs+8{ˠ�� ������YBᵤՂJPeM,/G~6bbv\-S2P -@B ٱJ SjʏK Ņ8vk4g&ԦA)n͚-hJ ��|�����$8rX{tF̭ $z8Ƿ_&vvL- }3E<5P|J-SƅбܴH'@H 9!+-ʻ4s4뺿TYh|2*އV��@>|����� ?PUv͓:љ%HW*x>~nS.scyԄ {^KADꑴ'wF|#dnLo[&*o^X)V@3\BhgM{ ҥK7Ln^RVf-oI[4Jn5ăEI쀸<Uhkd6-߮*"\e�@>|�����s&'"ڕ2Ԑ0í^ pȈ|*B) zCe>TLr@czSYxi/5ȅCϟ?_ v;'Kw BqJzjS d\ݕ_"(kwսV> vym|0c]߉|>Уsn6G}$_0?4rg�'�����A>UrkcejA_7/=w=}ǯ;r4Y),QO.sl2'83.uo~Щ_?}?{�u{lhɎ@̀zp22֝q'[k4sحA4c||| D`Ye !Y'׃]]YLzPbv9N;ӞClS'/6TɞuKN _”w?c~|>d\rE{u)=ŤڰH6$2uwz>'r+5.e6ӫgi |d C TUJouЪ“vvb;Vs:&sߛP)Ǒ`C3U/ ;4MV>��γ�g<!Z~W:mm>d<L{JƉT#-(8Muʮl׾-F+V&[kD?/>4fmX{נaGo^/F=_}}޾X{Aj17ַ^7eK, %\+Y4n4/AwhwgQpe&}󢢜k3܊μ񖤒Dg9ҥ#d{vϧVAGԏv97['> ԁp5O}sׯŞnHKE -Ľ|Nu4'x;t߹!nxyM|Zz\t(~xeL{ѓ[Z|*dA!Ԑ>k_NncJ{{hoCYoO V> -d4 9S(ت mֲ&Q|zɧ?2aER +-XtkgЯ&W<|5{w7Y:űeOڛb$<A,Uխ0V>��ݤټJƲY, Q$|tgkw.oh~zDou+<ytNˉv}D@-{ʧKxsssJS E}fƌ6qWa i(D+zC;)V}^*󻝰H1)m<<$:$LKOvb|klmrk?C쭨͏s ގ1t}-<ՓMHp ^hvh<L_ZpGp̙G~:qk_'K' ~{ı.O_!os}E~S"N')vw׿oDtuz{oʖyA]*GQ-nhCvSĜuݵ,;a/0%dOGmCw|j?zo[l|.IN>xY‚w+BmY7}o{t`7}k߀%_3x.#AAٸ}e>��}gKۗ $}4pxUw:eqmN|6O&p8 l槱W.[Ϡw [;FU:2l?3Hn#ŢV%X8 Ku Sƃ@'ZV?yOCG1_> 0ΎbD2-\7fQ/T<37dYQ~d<ڐ/^S=(|*7<ݙAw 媶"̢n+3kX4?X@V H4{`]-+XLo~:3gOd4k_шkGT)|cӹX7|y&tdo8nA:g><:%+ځ?m ?|ZˮjSP +f%⺒ب`W.-IpsXcߝ= S?8R.4FKz gz Ŝ?E><}O}= %9Ozv{I t!6(UG1uOU8Og.PQNCoҲ$(md_][vQG0ﶧ^H^Ofm T&m|]du>q#o|<H>i粘i~j� |N=y ZrIGL+W64\!A\gXjmɝHئjm1je_j͋(kSZӓͭ8;<+g(˧BU^ZX]4hc ~bW�C6^)L"=R3.iK% ]4Eb,h[䜥}/v1nOsjp4?wXYIG._ZZJh,OİZl^EbMtyy.|hxXxpZSd{zEQDlu峧86iњj/Rs#)iqq軿dEBɫTg"`LILk]E3B`4#_Îpoqg~r calGSϼ(p ,s!Լh0-ƓӐ/mz ]+(9%1NMzBdcjLjxv V5|6+ zgM@绒ϭkPކ'KD9 7ģ{Og0G/6k"r'f7]ocqNRMS5x.뫃x5M9Z|�|~06IhVbÍk$4l}=l2[1 ﮽`Ixd:vL& Jڋ-c3Ŝ FB̤M08NCu =S`YC/jWjO΂L&[X kv佝&3hhimPP*pӧK Z?|͟ݿ"=Sώ`O:ms÷Kk"0X M䉱49/,O<-쾦% #tmjg%1.TqN-t盙|N5LJ2lS#04byxt|fzCs G;˸0_; oǜP-Cow492T0ՑAmW  9">$.oB*:W@ > GWD}\M t ^9e4=pfl',{xf-!S3v|Bo%0]""#SˢSe`b1Q9G޽KZW:\+moif {HCυ';8*:".7J+o��Țj(ʗǠI쬛ЕOij;'`([=xt|Dk"6QKb qѽMgrvQ-[[Lye={>RvIJ}ZzĆ? L>z/>0oB>Ͽ*J |mW\>.Y:.DK |u5�m{>wТAffg.抄PE5�_~1cG<$x{8}cZ3]1`󆇣r\[rՏNk+mJjvq4ݛ3̛@j {9ל=9:3{>y+ ��KMg hpҪɟ޵s>}nIvHlyG~0Fӵ=u08ˮDTilحn*E3?\llӬW|ѻ~p!+4]ӱAU|aB>_[+G. ~g$v|xBBu%ci_$[mY>xZ+ԢР D|[>'9%m5I RJ|u>ϕh3ml0Tqرވ+I 5$p۳c|\Q3T$Ug%Dx] qŽy@)A橞W'7ѕ͌we ��@>??::lm_KC#sGV~7D;KOwgyn=>wyu}ks])ˋu}G Ƕv?;cvp դ"uhybkL~4vG ͻDm{DU9+M97 w~Tdgg6߬ts[ "#zIZڙyۉZ65g+s>A{ޝ&mui<}}~" _uO!0OwF)!z)Jh4Oob5Qof)86v~�Kgϟ,$^yڭp|~xٳn nfshU틱҄o~>9)llG<w(՚]K4쉣mGΦFnܽ7$4?ӕi|p:}0Mߝkq!C|1'Wcyi 8#-iaWjA ���#3"Cڰ+l񺹦ȍ X,Lsn7L a{Fy۳Zh,To@pͨ0+& gJHr q8q8tנ&Cn%x:PC}uuP7OsO,+R5޵ =+Ϙ:G[Cs X|R޾nN>c~|t"نtҢ~~B\]PPX%4'Ұ_0 |6};ׁOHX cWH={MgK<t)؜ڧ;u2is-^{I[y'%Ab1mJ2cC|*4+Ka өSG#H}7CB:# < /;19E#]=E A.^mYN<st @ؓ)SjSBl< !0���<�I���TڜϾ ;Bc pdNn{x_ptD]fz2 ,n]|ZGJcI"ZD[T00t={3OQw9Yu;of 7$ފN $ĸk[ ��� ����P>J3i^עl(ēl %Q1|$"2*7䲛=4ߢ0; :26~-c5c-m1u%YБ ;Y<AgdkpݵޚpNMhgEpQ}1̙ʩϚ��� ����Q>~okcqUToxn= r^8t,tŻ8h^vwʒkZ.gŰʯ_a8bӼ |iwFǏ7O4& ޺]X`Y\IveO||Ob',Pic��� ������|מL?cXѩD 9܁8zgY:0ٷJk#n'Fy@/{ks0O7ͭ, 4{.1l  )O`] pBNX"H][>G긫�� ������|9)]ㄻtQ;3/+tq-йC8vyفh}Ѩ+1!K ;}18&)6(; { ?A b49:9u#,{KK"~d~ꕱ\[}(NG=7<NG6,=#q42[ѯp@=��@>������|oɯ cN:~ȆB!<} KƝtc?](<K`BxxGC@mkݖ@Z0G:1-KtiMB^<‘G]8?fP <"viy$g>OD w:3<\bVX춵[k 2ޠ|Nն+A +b?U���������;"2v衃lϡYd{K*=u_Y1gO]:\Za=.VWNy ΂9st%~ցfY|{AKw:o$;ggq8|BYsԼ-ݯvG{ϑ*3iTe��=������_�|&N8lOBbt#˖LGg_?3}̶ur.9zqS%06d<'mh [ Eϰa&Qsx<ԉ_@gk ЁٶRcF+@>WڡsM~z!x> mx!ՠ|Z\(k[[[2^R ��|������䳻 ̏L%p4ED…"xХ?髟C?|&[bdSGAy$ `qKX(ܬ҂khÇ9~/;rQaG<u78ړ|$%/Gd~HW=ph+ʑ=J`ùKWG׷;>2W>7\Xj,���������}hGލO-c.$̹sǿ[:ԷqoN Y";1-(gNŠ/0vY&{5Q0ZӜՐTtfD]c;vo߿Ӊc2薾><̑v*qt)�e(t#([WبfqW>vVe3 ���������}PKv~7 {G~sk_𗎡Bt≟3ގD{ 衟ȳXy 9إSq.ƴޖNWEkSќkZ&hj+(?{|oC3O7=u\}y< A?`0Zؠn%n[mpm*7 8f��@>������|o9ؔF]ҥ3t; O<?H#ӄKG0~#XN/J&^jkcPqV(+K왓߹s=\ItK"<+=B4vg?<>X32p+<gCiNvTı_)#5yůOlXժ'- ��|������1@SfIFID%xX\8#2I,G0h6DΠ#dK~]:a/yۓ-x9kK}hNPpK=WaW}D{^f2)L'>1Ҏ͆x,[4ؚf9\ Y���������ϏT>{ӓ#G:J?`}Ξ9C@at O'!mN8̚pDa'(.tͲBb/2p[Y"#m0Ɉ3sT" 9~@W,;<O̳δ =o x<Kf< Y���0Q$ R~\^ Ba>9+osLk;D?e)0W'f{ğV sy\nKjobH۷WƷϷe%Clr?6Ձ0*E~^[W}|�ED8KjXjreHx] >m.wOX>;n&RǩB<^.tKGc{X.3ɁLru5fƶhlnE&x|^xoAES#\l(t5ʝ`/N?jgu>ċ{gCbÓ#8o$���gKCCfb9Ж|onho/wuI`rJ1K'v~ >BY>';IdQ6KNma4 1g`{E>ʲq"\nP>�MBvr' S , ƈ p|t8#ɧ'$ j3J (L , UYu,niIu創e˯ו'@U IwKkՕ7V$6V$4W%5U&W$@Uכ+7V'5$5V%6VAA1kmLMoTq'ڠN@[ O��eʧqt0g1 4{z\\vE>GYVeY_>)W,X,,X\ֆwE0mH gIio7_-qqbQ8 CX[[;]1WfVMkia,9ԓCc08ۋp_$x%\6ރmPȠZ;K{o܉Qj*}>l<t.R* f(YnGuvssfѩNAXmymJx̏ʧ9 B~̄#-gaLk, _uYT,mFM4r9UfEnua׋fNp`(˧(FɻZ>Y<1ڣ�� Ϸy|nAhSzO$2K%啥H;+*mxyD&5RaK vtϧ 9W#|M[+ NOKlD>]eJkz9l ;"o RrP9l,cu,eB>qh&Ox7CФ�m ؜|3V[̑O?|^wI{+.8d`@?7p$B]$UW<ϊdXL 5ވ[<.]_Ew*(#lp<|9`R^++;+%r=~����$J]v;=RqY%VoJohD=t3aZ -Q\ 3Ŵ+І;kHc{?VRzJ޾/(!8B11쒨yQl:;'K$HDCfdOJ`pdsD6 R0Q&ӷC:HF 4|3Og_p|mZ7`ۚon=:Y?7<;CsD:8f^Qci0sΧx]q6t]͹%֪+iƸ{ڻCB!XEd �����߻!SrS1!pJuKwv۞leZb6!|&5jZ2-҆8=($;4"%Qu 3e4};˧CFD"_UL ++JXF詗Gjf# 6Ͼz5p^/H+S.۹~L,t͕sci0!Tu~iHZT/௽E)m9Lj*+6z@>����se4|B>GX}JхczmSY)z-]{E 6g/u-TJ$Sr uK>M g08e'/FSw^2 tiBH˧靺6K |7cL|xG.++J c{u{5 v`ו7z) 4'aD>ͬ}M/nn(/QC v -DNξ| }# �����m'=ѤPhAny$04nRM1nW 2ќJK;r Ԏ\ Bhcks=^JQ$R7VD#=95P2ܗ|H<ZARN 2r;v"=N9[Xz2ta'ޚ_^Q#ixzLR0Q, ~a8Z2˕(,֧~|7õei<}˧t L t h8r*US MY ݹ{ci]U`3&`X>sYX6}7n4/e\@?psEYR.*}Dn<O�����7yMd;MugHnD#r= i>d<Z0Ókᵩ!66n%F{>grd4׮ki~,)SO,ە�+]aƎ+K ǫUq) [mվ|SJ8,uɁqzO/ neZ1nn>EwC3ҋiǠm؁yXm٧|?r,aYXֿb** yN҃ebw+3'Ұ˥_Tu>۝ p�L<pseEH¡a08.<|~'����\�~K&��c擑OPT���Y<����@'����|�@>���'����|������ ���'������ ����� ������ȧɦQ���7 ������>7OHgf%3Sr!_>3!Ifb٨dvB:/U.(䋒i=ʣybT)-?T//ΩWDs⽇sldfA8`aF 3/TplD"J'dr@O6>��Ǜ'xu �����Um|NJ8 #}ɁQThl`T8%gS|`R(Z]z(UBBJ½y٢xhZ.S( |Ԝ|N,H&3S1I;ozdJ0<%LOvMvqS3™l '��� �����g*fiA ʛɶqbvA029ŝ  Ecywc%<ٱmǩbD8=.*zEQp`B ?7"ϏD#q+jrx"IT瀸sf'��� �����(꡶zQ琼B?v LsM!ol|trtlB̛t-H3alL \piD9(uAf 3}6TgW<(m K&N,^6)��@>|�����,S6!&iumIL7"u uO&g-#A~ce?<NHCƅֺ;E}E稬K>8)os%QcHQoi6 DŽ9T破E:%n��O ������>OMQE 7?1ƛUw R(oR01:=V7&W4KJ[G:[R{;J[s8Qef\_:WwOtKp<a,A1<1<˛7;YЄt\ xЊJ.]•M ":Ķ<Pɶãp$9AIwk4 ìoiED8KjXjree|H C̙]~M8> H kDJ�Q� �����O@1:.JƦj&owkFų{{``b@'邖>eVutg4L08Pӿ45 So gx҂=Ω=Q~T 52 (O$dyaLgwr$7ggFc[^`8gwGn6cVWpR빝 @ t1ݬ'FLU*t,`i:\l:.G>7]L�'�����@>?]N xRЌjb@,OŁґ~G8Wy0mul.59_R1ై(?!gTД7:#k{W4SQTtsL2EV5'%I|B>3=+(ϩ[eTB(OS~Eˇݕ,k$,7TJoDCc-\bs*ΊpH /&CiC@yΎ p$jNFJ8&8r I`7-XІ4. u)OVV)O8f^w';nI0' yiu?+7K>j~�alg Bdf 'gb"v7MC#"w:#pXKT.8 v[ұY*� |wgQpe9oƪ+—MP_0 縜!mx%6ZjldlG[0:&x> x폡p$5~ϮǗ }mV\+$݋nT/>|o~зSc 5 @u[[xR~%’n7 >ڻ',RM/tB/L &-㐂 ZZo']U]V/[K,JOӟtɬPnJҌ޺Ǝ۷RCS"nwޔU綉xH8XS .g&_V8mv?FoH+'*N}C 893j=Ԉo6xGm*8" Ԏ_"'95!cܴ˕ wZ<]VJ41>:'HƓ,V}(вmvw[1i"H,L<:hOPaNW4K;&QG]XRft%f D%+s`n f\~gj~ZT2Nz\{�|~lmrkw&21߂x]kn럣Mu_>M$OrLpsZG-At߬\s {H/[h(D+zC;)V}^*󻝰H1)m<<$:$L=Ad${~"D<%.)˖g'–QAݶ‚3?O?~xY$?}wQ{⒐_`g ̑C:zу8dieelS̭(WVeKB\<)HfEP $LFvF-${ZPۛ+eBNdԪPUN&kmU3WsnW@+nV%YXmEk2˗ڏĪedOTjotk7⋶@^-BhyiaXGCsY'nI"ݕ7"4V>>m5cU r- f tlh~i}+&Xmw:T" UC5 c끳�1]3x4/qkG.;c0,5lL h pwud4onG-^^ [(WfNlqWʖĽL泹h2YDf+_`G&]X,hZŶ@zge;ISOQ>ubHScۃg&NyWamɲx !_i"[̢?l˟], E~sp-܈ pšvzEYgGcX"S.5'Ӱ_#q42[ѯp?C&쉌f :qM@H ]5o,X<n<_˃5&3wO=xX_KC]~7꘸Sv90㷣qrǤ;D^f0\ ..hkkpwumXR _I19y ]_56PT¹A:%<pheiӆVlph5ZQ9Z-keE%kfeI^F"jhNV;ФPmDM/^ rf炸H3u=2^wd _~E lO6^xH)W0픈,UEfX\}JէfmlxP]J9ILhT4\ 0ة݃`Ҽo)ÑIW�|~򹵵CDCZ{ˏMU0"x4}q3M+{L{c##[OIεLG ې}lm3N(kSZӓͭ8;<+9 ^u� A\xawV HT}K% 4XJ䜥}/v1Lȧ~c~\> ]V[xTH~nA5wzj`~m/\~ns.MN>4'`bTm⾺J9eyGH]'PlhuC|hxXx�<66K*esLd/1ɜhaq~E!S zG䬉hﲚ۲켼?oW7#&jw66JN ?%% Oo/utj Sus/+J3 !ТyD2QƠTN*OӍV"7*V\n-]}} Z Qp&K#ZY T4Q#W./C <ee*S!'tݕrA6NiLjgj7j+5#im S-4']F2uL֮wi ehzT<�":xDI8۠y,Ss;v ߡMFO% �+3aIF= c<b }4cJD6-WFOT(z0Ճ6 c ϟLX]oݯ1v: x$*3}~3{; Mȧ-ܞwt|_gL>_&H<ӇZ4=Smhhw.v l>&!EjWDKs>GB̤i7,O<-�6tm{%h3c@W'w<*Oe~ j^8'(~NmiNTWkbbO?o z#?'ƵҜ@?k 8#nG=sb⽼|[{bݲ[eE O<ɝ)Ω-/gs:ZU´~G]n@mw74I֍YtKimm=]GA'gv%2Nۅue@u%G-Hc^Ј̂h7Uf+*ΦiajV'n˧[tbl0{AzGw3';Uˊm߯WX\Tt88T36-٣ oh<,;Dwr5ל6E a= L<-rrVc[ᚎ+ ag\�Kϗ?ڲڟb<]*r}TԞɢ&|A`JPzx@ ~<:>Z]x4<䓝? L>zd_XPof|,]%ŷW>l0V+{g,w~zuEo)Cb>aXLȧՁB!ylgvf qx�i7iiryU.]H H{gF3 ;eNl5^ ' (%%%##F~>I"Xcs2o6U4&ۏÞ3-Ve;8d w/*s3<!gxnvq^P fsJlɴ|z򴡡tM٪IijC GlrX8Eu/Jy'-D)a}j}\" zܝ֮dЭjC[Q3f3cx K'}? u xK講n8@M7鮣̓W~īqFa(=(m=xZ~Z<as�=iS9+ə+s~$Mȑ`8H.C{Hڐ 3[? ?%o= o#vONG*i"6]'8u ^_cLuBW~]z#>9ziW G6v|cZWϗ G+Pu"agL$v|xBBP[ tKîoX7\Xk,/mY>xZ+Ԃs.jhy˧Z$*Ѵ\XU<1$9B<?7mwqϮʪ*_2+<"$ZjFbǵJwRr +FR nD F$ r~yN0+w /BhU\P>x-Kg'J2G nhjAN]D>|44d&&muE/2 Z4ljͭ+e!PxJ;q $3S> gZ@64MĦ2Ju :'Yz>gyf'E#5:8ɵlJR9ΤF>M򫅵 2⪗ԍ9ƲXiV>)>sx<#D]4:ttg,"ϭ"m?OjbKOywpQI)cz3Ӎ%J;QQTEPPDE齗;;;{ DM|;;3{;0J8Z,\Mk}l@>;fCx5#oq47IqƍKԠ;f)}|qkmn^crAhw|S͔*JJ."b)Ü:\% ED˚})B4鴰\bEYyE;y[XMM}KK[CCsy~]tg/=#{jH!P<. N.~YҿY>|HK2> unlަX[y- @ɧ1|pQ߯w;beanimSIFO psU>t^K<@c6E(7[[[;O_૽uȞnAWt`OMQ%|Z!'e=[ FfYF;ϻ?|8yb0֖X=JOu:?{;;"]]MF+Ð+qiE \F>WCg=0dkmm&21|O#eym IphFC,"D)Tݔfrwݥk:BWe |DԵbt6wwN}2&6^RRRVVvdC%&H5zGg%Xw8![TXX7ks'52C:Hw';CcPXTN G?B+ a�7_ZB�&��<R"D)[leQWP^u-;b1$wKWk ~9gjOMؿO$W+W9@e5cJ_^eAڳ*el ݼw~@)aHe"Z'v ��� ���[]ȵ|\ԩ$ZK#Ba)9>{Rc{<yk* %j}RZ򉬌6,!SyT׆߱koѧn Z̤3\,[V]T 0xWfxS!vuA>��]l��<)i|<TP[R[fvz}u֭GrrJJOZe"jϦUֆN'|(釥.uimS JO:RX^Slknф̎N6SJmiogۙs2O#g#}\W^=Ejkk+KLM}WFfl>ȝ62Ɣ(gVyx{DtK<p &*wz!'eW O;x僺� �����ȧ+)t2Ig𫫛)6MhomqZai NL;DpJa <H"2t?y_v$lVm lqnXd3햓)<Mhj0 mL;#!hʕz^'"I2tx q g!_: )Lmq@e$R}A=$zo9J ^;@>������=)(Ud,O<<o%ֶ$C"v.jhk1hMuf\[CӨ4:ɪmlQ*,'lΡcY5M5uelZz<A"KYLM+6`Lp|PU3v|v2gapJέ7FlKAd?smʄak}1eƮ   eht׻&uZ �}FRnr)q0 *9IFq[4iHnR|{D(S>*I!GV;O  *Ҍ:#ʧ[= y9vFR:Jx{>F )/+8$`NI>��'����� |vT<UL*Oo Xm4 C;0QP{"pl7V7VӘ8b;Qt6\T{0]?}ב&bi4WTI;22B'G("luDbGC6@v̿5RƗ JM٭c#bRGTcX3rwޞxJfs<N{ZaHͳpBd-sUEMP5X>ʹJC{\7֏&U]]:eTgxIM|$9$]&@zC>{#VKlc6Ȫ($zF�������h!\ITrAnijL6'w )<j#>tJф**JJsЕ8 Wq4O$77I3y5%N?u2xiYaZv8Шvt{'+TC[>zͱmmcĝ"JcUmV҆ua7حe۶njVᮎXQXg&B8w\CxN#>D|Z|Zi_ٶ=.290j~b<)lE Ox3 vۆLSsH:Ylg ";oi5%*Lyg�a���L>j5Y& 4\A6Namd9[u2(*4ƞQuKkjˋJN=. 榆ʦ3gg NeI+)L9Q - F.i;5xS>S1a5÷"p*;2e(T$v蚒 O ${9WX`9gGQv_Bs2vGM:X>6H*܏S>llpD#Vg*0r79qCNθy?83~ ";zDc+;:�� �����|cwR\4Cn&36ejϞlh<R_U[]܊okn(.+R*$2ڎ2^\]\UV+#Q Gr ˲ + %5VUr|'&1T.3s/ߏ|u<X;iԎeC1UnȧVui%anٱ1LvwGpd]"(<}ⱦD8XgKCI?K>:i\BZ|(ztpxu<U$#|ޙo.ymm݃]&5̱G>��'����� \-C%UX%ۅ%-2WAA\T$$貪l2\_S' 0Dtus G*/)[k\ZZߊo)*:[\[XYPykW $5Smɩ'=vZ-Qkw wuuEoC9d!oq ٥<ao@ȆF'EGl?'ȩ X4?}c.e]T5)K4xPN/ 5j%xAVg'%77$<666)3_>UY5l;L^x'UC>9PTo?uQMXARށmq;c3� �����|c)?/]7!CZiFwXBLܢ3ygϜŶbZЭ2lMc9H=XvlsS}F'v4cj4+).JO;Xp"4;ьۥ -%f"2AtiOM#5d8G>]9_������ϿB>Nm{v'JN S ²@9PS(p8":=psCSIv^[Y5ETjs!r8ƆҼՅj kKPZ[ḍ1%-4Y*29#\D.������GP>5r+ShJޥḯƲzlwb߁,2 Al/;yFٜBaₒJ\ ePft'Kx Mi%pғ%gr$9PfUj��OO�����A䚮^BO%1TB#(<\TtdcX ErIJ&A+Fin u)$@bX<HdsIڪ좜ƪjFj&v9jN;Ojgv%JFV2 ��|>t=`eakPX /g+ ;g]G 5}!dǦ6VV( ٕcl)f'돷Oos@%q1xcTp4F;萲) \m'xK^Df4i?Hwu9<x>Zŵ\QuʬN66{2亱a9ypS{7C,<\,hter)&hJe-i(ζB,CatV>՜[TVndDچPl&Ahnj E[,0X:ZWYъf)Nt K J!)7ZD)��Z4:?kcfj5Tdcz G=[Ó(vxgF_Oli!Z,N(E%-=w5M6invk3H+~d!)SN+0&yųdZoXvhg`:q3ǽ8aw 92Pեҫx Ci+eP%dK;Ҳ*AX OVojv0p$ts ݥ%*g0چ:@Kd%ENRjo<HJEj2��χ4~}fᾟ$;CnW#!spNQ hٖdcsNȨ|3SyÆuA^!h~㽜lll=weM: pg{[[[ǰT^nHڶ0qqswwَ5ꅲr܊kƙU8F>/{@D1:>|R:ltW^]i|}h')ێА�[HdB6 狲7 m5Mmjn [^|fR|>CwXoYX9A#j*nke2 |Ae]bJђ,ݍ'?d3ux9'dܵ1g>:5W"88LR5<NfiUzeLD4[4 L"%wr5&Hm8C" ;& Bg3XSj-lb*R]NH*@.3U$jy"ԁMV6nށq !%XA��@>G..n_cE:OrqN]MPrRFbI̯d_+%y,uHL/LƢ"*.T!Z@PYFq\4dG>vxrNY{gu;lHQ#.D: W|RךA`xGר')O{:xβOtd ~皠Tq܉{jspGg9b ?YE�Щ2Z?:jt-.W"# hnȧW@S5Q @[cos|SUhzR%&c( R͑+څ Nmn,n#4T@ҥ֐ /IM--X@d<[#U.-bcۥ8͸N*KSevR4d\)VzCH簘x$FɦXo)�ϿB>kRyH?NQݏu#[^,H@}ǖEy' oiõ.VBFZma\&_i$(m * 6a.Xa?aenY-jqCY9|Z::999Yٸa}mÊn7i) ǐ'k|Q GA9{3.Yyqg:56t޾Q8Z2Zx@wi:�Y-hFKs;G^e;quVf|S̒y.y+WymdT)U> [&f1dbD2APQ$R+^.6bmMh!kmR)zz]ZBU�MXTG*=uLC)*Z&S7N%_Q")?1�]+}` ң!}an_獲q/l#i|Yx}kxuxleT'іsq@<RYQ��|)Y}U}բF>/Y;EK ja4squuwwww ?w㌷̭llbۥƃ&[ΎU>S,Qjl44݆Am4X>tX,ʔ9AH.7|x}7h9#sO9gc0׵Z\4Sq~>sG>Ѻpk-˧"RPJRU *b'(iXR 1M~me.%0h46Fh1"ɡZILLHe ,vB!z*FLۚ|AaR ^EudN) *Ś.NŖ|is�n5 ea1p=T49?t;mBR+:ZHd7u>F>cr.<,.tx:FH8@ t\7ߥ׳XX9.2Vt=U��O}eF;h33whc`oO¶o9X>7Vqs,OSSLeaF~q8ȧboڰA8 .abk5p$sēuWg&d8J>\>Mםmݏ=w(XZ2x_:jNFraƽ]!O["TD.XRہ(jURDkˊPt ]#ah,AlRN!BjpV:A‘ZxΟs:f\uXہ;JJ.P[x-ӈDNYR1Ka0:0I|K*^?B6ݝ᦯ɹk%H +7I< ן9j#jMfVEbM �� bڮ.v&S՚,%zDvT]FKͯ5z]=;knM2N1xkC>5* +gSJ[O;-]5GCQ[T#o$ݪRv'OsJ( x-5m˜aqqeeɤtFg*x=R.)-g>GR6~]vzfJ9fZiXT&G9]>7>G` hX9:&$h2k簓5gU>G˧ oC* DnعDuHS?q~>sQcZl#߮J4O,hTLBFGha~%KQBj^W Ŵ9rDƵ`1v<Ц(\$RO$ D\:܊i$ \6Nar*0gʈ,N)(u֮ʫPJ4VCu]xCDhb^[ �yl]z=c@90#|Y٭~4FH@!-9拲<-T4 ��9~eԍ 25@E1PV(wCYiĸAv66.QwH߆6oKȍcsWSax #82v|lm~;xki{(NJbo#`wj2|]}6q=3ana?Rj~STS~nko;p(S{y+!V1Rb7IEzx¦->6DT'k|9|gn;bk=7>r9:ef56VV(AWt{5akP>n7Cm3|Q㹊!QEJKq_HE zashyEMuM覦9M5"_)K$SH$ r$*MћrlAuse ,*Yӟ%*rrXMD)}፲)ӽ9=VNpQqs8 ;$llgt]+�� { Nxd��<|J;X+b)],f"R#KY*0$g∭ y%3e:)OȢ1T2\YXGpXLm}m^[\q",?HM~-QYEB-,#E3h�֝^-,lXc^&n\T$:S�7vۥRvDy v;ΐsM �� :q&9 ~ ' ���%v"sR\̕;eRT>F吨)yM-ue9 f{KC}}N1aԕV$2⚚ 3UbI$ Dni.DUap5Ź4A1d.  TdK ,SEqGc` { P !7m(lg[X\bD#s縢SA��@>A>"^Ύ;kp���@>m# !Nbj)Ĉ]*[х Uu-h\-Nf(8bˑ 2/rLJY^A[cc}})9vLqñG,*?[Xs('M) %==bS&fJ$L ��� ����pvˑr)K*uI[T^M&K.8q8޴ *8'U5 e-ՙii9rK2b(q.\l2ODqNӫ;+2@>������QO9W(U<P]rB_1]l'U5)O/=P:JjN5db!BmPȤ⒊599El9.Ψ?SY{PԈy*; TSt+(O��@>A>����x-t)yrh%FА•U'Bd\i4 AK<mg`CdI0D,s(T&ʓlBrHkl_Ha��q˧\. �����p'~ +edLqR;:3 uJKZT4.nk%4T6`0F'e8ä,.D1DzMϹ+X*r ðgAwLceKL ��|����apȨ%P$Gi4".˙KܭҟtKօZi![>Ѱ @mXڅ(%q"GI&pNqeO��@>A>����x_܏��yae ���� ^���`�����OO���OO�����@>��N>!����@>A>�����������������O8U���/O�����@>���O�����@>A>��@>����OO���������O���������ϿR>W'��@>A>����xL{U?;`6a¤ LD~ncr <6q|ٟ႗>=ɢ?Z8O~8ʇ &8MhOM)s2<e<-ȏٗ?l)-3{O��@>A>����xdQ ? A ^i1gy_z3`@s7f=o~yKfK_g/~=wO4/|f.E+6L[Ʌ˞XL?#":_e|�� ����#( cߪ I!s?Χzstf&L4_|7f7hOdя6z{Y߬zkoⵯVh+Wū[K[ߙ?ߘO[z׿=Պ,{|-Q>��OO�����A|)f&<5iO߉J uv%漅=z|ONW_1{sƓ| >j׿8l+*pMOY_ O{|esVx<?\όsھlۀY3ߴ}aE=od9y ��||����Lzl^:ݧ0_5jެwg~okΚg'_|.]:bmt׾cqg$&W$WW%V.)UVdLݵхIآRI -.fÚm9n oPM'J~6mԯW?0 ��''�����|>>=ߘ/>k};w|0wg}yHU=m{s'e]O:zd}RnhcvN[Y*N)J:\y4t~qIV;|{ 3'7[;VO}m||Wu|{7˧lSb9ߺy.kGڔrb >O*_n GY!)UC`y4j}$!wkK;Z[:EȽp.Wmmw-v 68g{@>A>����aϩoK^꫟Y䫅?~uÍY \B&)Y.8(>I31j;1Ŭ3jE5لmщ5Y?9Gm/IrR74±̸_bw=S_z˩>|^6Bp<ǿ_Xwmlt@6;tO 6 {߸[sAVmbn>xoݸUNvE2JKK(;&{ken݈?G+.^ĄZm<+6m8l8Eա�Xnt JE\9~o9|ԅ @>A>����!ߝko~g;s-_ҟ͗n>]wZ7;궬fR! ii/jͯl*<eϡЈ=){C#݂7;m]S~r\lJwuVVx,pjڼ/z8SոQ K=Xd1 _lgyRWGxZ[ZmK5s3ns~d+֞W{"79[Z68ĿtðMשwOԇe;6[["yH_>[?PucQ]Hd3; jMdu@}mIwut:{Qm}D@h򕾶2@]y=3F<_D?GS}QxGo5Z9 Smea 5S � �����sf>;xoλ/_,m7N.0_cn"7;WUA>nQa){w>Rs8hԓGRNL=5*/ nSX-C]|YyZ{.s[n6-7]9gw=6O~_BpCȴ9o!sk xW 51&S2s3zNI]gp9ԚQiɆmw*7?/'c! 3_U&Ÿ1݈Mn.:?iȞv<ȸ c遬zbv_o,IZ:x0q)~5R N轫_G/@6&TFVc6d GG~u8^o7.w"ԋGK7'mAz]� ���� |x >jo" e_}٢,/skĄOq<.hBƻ{lwZs˼^2/_[ϗ?pܾns7S_yWk|2(ӴZm0I>nai c23ͮa- TJ wuWuΆ!7HrNF)Ѓe)ٴze\-itVS+BGKs4f YdC6ִWLv8[7\,q[w-*+7"gF<)lv Fxs|.Ө>C+ndhH8U]J8Xێn< ]� ���� |~蓗g4?t/6988حY_-r*gZ߀} +JK/: Lȴ͛7nmkiV1\ajϿY╶6{E箶ڐyM9xنfny BCthQ3=hИm&- CldbDå~a߭}17h"8S`ګY VeaxQ0(Viu"�:BHm7KqD}r@K}w-@e&Wdy`[ XLfg彎|>Z-6('㥆f͵~iaoqN�����χF>_5ř5?]p-7l}ђcE|JnE 4N@tN* zDrW'Kgr%;#n֘;wx  [cpˬB?ttwm܄~<˟.sX2|^֞5 (/RMBYsa. ,_昂Wf1L[dӱ:NVwи" ~C�cL;f4oϴqdY3 JDR=}Fy;F֛nH1ht]bBk݁P'Wn)cop=hnrXuL|<;N|,nQ|^hwuIX`{�����χ'v3}</lmۍ#7F=Lc|!>z=Kv;UW$ה]WXuUV1gmO8wkxw +<~\gE?XzW<4#;q8̚g3ly{!oWhVHNà!8ωovQUdݶ/5yaʥz^v0`h2HdٔM&C_2 BG#wHOO^yAj[ c 3Ғ7e28SnE˦14 Rv7-pw@m#v8_Tc|5&17ʷnYQ{eĒ7s^_ ̺av^;/_3rzp%hoԩAwv;bz/_zB'eI%7D?X*t=�''����|>4ۯO{띗`P՘6FtDN];bv$ffm(.Uט'2#=/w:?)-xm7-NaW򛷓_sOhoW咎ssX9?>kJc'i [5LzVj%%g3!:wSCdE% CvYhai>n`WNƱPsKiaYZ۸J:1rm/g)dG+xy{7ZZ:'n0p\_vy,yu]w$eop芍j{eha-aoiU8^SKvY{~{>GLws17\ >Â>z�OO�����|hsyy{+?;o%uP;sڽU+~4_h!(01nԦ3ry;|YLzAv*=TG2NFnKݗp`gbJ̦-.!Qζ.^|n;)؊|3XYwprf pWz^} �����S<?Wx3fǟ}_]pw|W.fٯݜ}`Wɴܢ2 Ac.JUضܬ22N=ؤ}׸y[z]x:ٸ8r5nOϚo|>H#ϱ=q]�''����|>T_|a+Όo|g·s|s?bgݻ!1OJijVcNRZQTZRW_[S^NnhP_a:޿'#>6-|Cro̭߼[:5-h;sW-urs &sk| o`�����xssS&>ً/xwg4ss䣏~FqVSJE.1krUH#jJ+ "MB=^/-&DسnCoVV-Yhϫ_?:/wYZ"O^4uS_������GQ>zn'&=37_7|oY?~- #8M ;ߡ"]S٭&R)EՅye8tIccq~a~IUAYc񙂬SSkDx{zLŚv.vV!.(o{+OvS ��||����g&O|'?|?}/M}ysoڬg~03`ZA.gk]nhnEbPWd9Utt~3yg2N7!kӚֶ./n?ZiVO?Np_<kwϒ~nW8hJ @o?_zoyZn^[7zMy@|VjVW77W{)5Kk{WD#ŭޫuEW[ � ����-O<gfϞS?=WsO‹oɺ2jOS8?w']+8Y|p~]#np ogƕAK|}N󿵛|Oi=6c_<峳r|<,r-m3R& h fP]'=G=ɧ@>A>����xif/dI͘'LϽK3_>PMq]Bi^{otwSS)r+(:rvS YDErXr Ymrs ]b۽HLHݛ_jՔ ,W5Z;F/֣v mnasIKؘ۠K7]}Ĕl`6u{ju׻E!nMz=7 ͫ+KQ^i:bѸ�/ɑaNv=iHّ];c 7.qlv=W?ȪX)8x]Hڰ]TTg 7)"XwL{b+Co^�@>�����7=9~lIϜ9y,[}MjguŌsMKD;]cXe% NH<S~,"jy8%5&;0-,:1v瑄Vڻyy8OVs Y )ry|ւO_l}A{:tMmnx1xciU{)~!a4[vU^/~ˤ7/y*XXi+=Z#kSZ yI{u!kC%i.Oss|Y]8a7"l֨,EGտqW{wd_&`<AwgjAߝ!Cv&vdk,lP|z2}ĺ\@_0ꭚ]&�O�����@>]Kfon6Ix}-8Wz~k D3獮 7{AMϩk+9nPM9~&1@~Ǝ6kh!l]0SZu?2w~|OK0G6FDD+n[CTm2ޔr(#Mb5pcS 3YΡie9.eߐ#Zq.a$2-3N7d=όG>uhSHD?}SذqAGo7i75}+_ {km]X-3&�O�����@>]9iIO|f[Ock<3%^Y͑-cxM^x*칮:hzD>26LwUuEPְ9<a_R"Gۼ$fwG,PvN-EIuZ%'~a1eZhm@9C>ἤt0e" ]_ Q>/*8z em;D&M9>Fr[<x F^y"v#=jp vm4NX9s9FwF i3"T}xȧw.]Y|�� �����K>'?>٧'>9mSϙI3{y Y?҈a^'"I}Eg m|i/*1F]w벞ʞr5D>y O/yZY=L}ÎUnV 5ܬǰ4_>9㓧^{>HGB^HL :ikbzrSz#y.#sanE{MyU/E tE2||"p+JgU[_qu?glv:|(¨Ƿ !<׻U}׌_H\!x^@ qA~Iric&�O�����@>9l¤2ɧҤǞ8qDf 4yԞ ~5ya\tw^W\Wt_hBYS[&8kA䳣~{eW[Vjg 9'Ii5/&U>6!.hJ ist\>Mkׇ9n^8-.~Yi|"*\z?MA!Wo -a:??V?K>es$oo|>!z^D۪+~g .݇?IA݉ o@أ FKguc&'f55>�|����� &M0eSϘ=̤MǦM{i7YW:gUsXeO{E}K洴TIeU|)QwU$V].% TA7tuUC?_Ҫ9uh:`m]]ts&M8G>T�� �����_ f~͞{vҳOM8a >ًo?\1P9$+&iZ$h<KqA쓩ΫTT2Y)i\s\Q/_`1&MV&+:rԯ+-(d_k{o<'fM|O��@>A>����xsMyb̦<aT |>a|q%a&YYW>\\)zk /tub؜"-O{US\f/3;14}}Gw5^]37۟-u-#[רּvj>_ysoN,'�� �����<i6a:'&ONdwio<X\_KiSګu%=,!SD+⮫BeSz&@t mA]S~`Llbj=Q7fO:ɧA>������Qω&M04ѠO &g!/$n+aG˲bE2w`Q?4coleAt(E Xh%X"UBKɽٙ}w}ޙ///tȧm:Kߟѳj;>ܼL8 R [s;eΆƍG;G<M׀_�@|B|��� OWm|_z5g1kޫxt[/8xuͱ]gNwxϗ=]{]zׅ?~~.~ܷGS_[tl9peÞkY޸~Mb*Oa}Eq#+O="'������Oh|>ϧɈ DEGd0D=z7>²][O}}w\LǏ~-Sorӗ8u{o>8վ7v~t}v5,k0,岲 Kޙ4sk5eyƬ`88r ynYc/o/U3<>!aĘvtzׯ~7�����cU+Hy"}v�SH[+*&_c?l~zKwm?=~S_|wqaY=^_i_9vcǡM/~|γmoXز '‘ vNTQV?%ː`}/k>Gnc2s[>oY3&9k҇|Ovm?�@|B|���3~)"Vh'覶'jg 0yM#vvdS ^XskwO|>?}z=v8t_ |[pd洍xJYfŤ5%%s''M| K/ەc6\]mӪ'%ULYow7^5<:2*>533/̚ o7=ϭOtN=0'sT/ vG*#*[VEB￾o.,/EϽ6��@|����SO=*SZfϵL7nX޺2emƼ-moy@km;+xl=ұ35s\t|Yˊ]D;MX«[O,|>+NmZ_ÕTE5FOK w>KC^PY->L*嫟~[gW︻͑i?wmjzlт]zohɎ/l=Ks\/؝{I(\r7-nxB#w,SV��O����@|>< |!UƆ&˄ ź+"'-MlZм:c\;mWڽ7:TCHV~eW|͎S˷_HC|Ҿoʒ=ZwMm\ŢCXB?&)Y]֜Z' QYC8䙗c+?}֤/ߟ;b=mvmzǯv1_ޞ.Ș|+n/vnkf%m-N)^sޕJ;��O����@|>Ir_a}T![()-* 뗙f/ -m +j_X8ͯO^~`C E:GhbʨL"L>y{/9iuN__1u1c۔3L!,XC+01xys|(<B|~wn#>>|66ݵQŽ/W;#""~y}wk}ϛ1pzaalx ShW>߳~��� ����">}bY(|/_P\t8&o8qZD' r*̱ _rsX ?""rdi#,eDsb[DDNbGTfMH+99hjXӬ1`YT@,[AE5X!3O==`O %|D*f٦v#g>||uOEQې̛G>Wd'Tv~��� ����">HPP d=gC~>T7(&/!ƊM%gГ܌ajNHzHٹQ WH* ~ KЌm䨘Y91)!4w%D7֐9ZVHΖe"HG  tŭo57׏8zWs|6Ŏ^n럗f$7}#k׻o;22=::-'-22ޱ7��@|����ρg|Yx_*t" I\^v`|dbt^7R;ޜ0BLW>y^?9tz,OES5#j‚؆uճG6N)RTokK)Pfm1\m(Mb To0y#^+5i qGl^66}?}iKuq<EBZCIGχXEə ћ|5":rƉ/=?1 �� >����XO{Ag(" HڃP(Rl231W4|$HQ,.USO0(L2-N* TiXaT lJXF[ٔбJ#򫭹Y%BeT8<gf(-.A0>}!�� >!>���ʀ|}OyJ{H~Q%AD[d-ır#ӅyHEhm8SV528:$646$6$Ɩ=ޒZjH+3fF3e5fSKtQꄑ<3K" u0U'(4sK4'������O`|>S0i YE T#SHX 48h5ma$qily|2P8R\M.$䫐;ʸ<Yl,6W=B)qdJ"3$ᩢ$-A`vr&4Pf!x8�:z)O��''����nO xx=C <KyqVd$ȭD!+ɲ *fqBSIt=C&udH#dQ#d}H 8X1;hNWS$fDL9 z ܀!z)d$��OO����<_nH x_0�3h@2oSQcx@b3Yd"-u8CkgLC4;Xh-oakt$25tu(ENUpX)b+Eh" D Cxΰa~f[剌�� ���'9>= yz(98*eHQl%.CETq�W :&RBfJI`FQ"Djt9&Qs_"ǗP‹?;�� ���'3>C������OT|������''��@|B|�������'���� >O������''�����_��xl@|�������'���� >!>�������� ����O�������Oc �@|B|���IOEaP: WY 6ȨQZBUX-ѨYT]lQRB"I(XoO�E}AC }%o� K@фި!^a>x/_/E9e ə >�����x3awÃ&'iuΨgXn tZfT*fZZIo0hFTkl N/8b Ƒ_7ps ~aX@ (h x|(RА@A��OO����<j‚ѡZ&f⌏ Y-:[f5m,(ʳYtjB $ J҈T:G(|d@!C/EZBePLj C|(B�/AC >�����xS"[X9$Ě ȕBNf3MFV66l1EUJBc2pD O} Acl Ɛ : ő8?%2HH4<""{G:�� ���'/>ZUx1.*,%%Dž;#X,4*bs"`P JHh6)FP'QD*KGA 7 G{y2@x`SiLJ K`T@Da(B��OO����<5$D$ĄF8",qѡvKMcT|ѨHp0ͦ Ĥ\<)!C hᕗ}^|aؠ!C^z{P$> E$Rd)4!�#� u!nh8|D'Uf5wvLQ^7u!یyģ?;zHgv4WygN*Jr8Rss辺|ZerLttLbŔX*QM/tý(y `�''����a6}rlpr\DR-.eNNM$T"6f Ecڤ%R!Ob"_q\*ABtPW||}1 y_4H"SQh@20"G~xH1$ζE|ĞNJF...y>[v_?pG0/+ʣ<t#1<0a_$./:=0}W::Nz0&jcʏj:q朄}_ߖVbgw/Vggz_=2&eR ��� > 7GB Q!c#vCRlhLTPx.$`im!Zf,jATr1dl.j5rN*R%hL}0h/X"Ҡ}԰a8Ca7Jvr8<qd1:b׊ɱ΄?>wqQyc/pmxZfkԧ9bS-v.ɋr&W7e;*\:-'%!>c٭55ȣ7W)p؝Iu;Z]Nw=6ۗD$d;rbWcEQbLK>zϗW,ƣ_ ں|ܨ1QdE#"~z}஢mY:=gx#*dRwq}Д#SnO\_:6zˢبc</ltfa^t24 ��� > j0sZ|dR5iMM kfIPL),F&U*F#ѩbg3 QN!rX$46-(DAc4=00'xH 2ҟ�'KA༼|eHg,~8=}kTjQEYRGdbB\VUM<9صy͞c_ruΡmgTv=;L.6i⣞5EoJrUږ/OW]QE/yOwq\=uf4fֻS\{ɛv=<0]c=1w?;zEsxv7VIJ 7jQ^{},umj^ZՊ ݝVgdO޻߃2GL~@|B|���{|PaQ%%ڒblqAL AYrOG郃4upjR,jVЙ,HSʄR1_&I%&$T&B!dp,GFzpx"@$X,ţx$>}0ωIf}tO Wp&uO=!lg Yv:+=}Y \o=|;DWҥKNodչ>;_u{ϳxqWNuphd}bVfo&9x<xu}wu:+4~n:>lvE`R꼴3ҵ}q˻=t/0J9ƻ>Ywsqw˨螅!\{Y|^];O5'>=!3̈C�OO����qOXWHC x[rlpljR(d& FZ% ijJ%ԨEB;Ăͦ8 :=P,xl#sL&H4:C$KB.X,&Ja>h/ O QH"d>Ϟw\m':qǮO?YoHO9Yzɋqݺ̭c\x:ksJύKkZsR]EĂG<ەĹwػ?v!;.䬆}}w<iZIb3Vɓ5V~q+wN{w>>̮fp8s;-j>uAo-^uv1ϞqoumKcR;o*ɓa�''����ǧ3fpڍI1%*Lo5hOƒ QU-FL&Rb_*Y5J@|y-rU2DT(p$(_aFx :3l?@ IT<őP8y2OPו}ţ鲭ƜC).uRdR)]{6[cg;/u>k{޹5vv:W3oʎ?}ONvxgLP΋uD&|λ]9MSF^׳l9S?ՓGǟ2Aʼn}чxfWy-Nt=[evϺ,s;Ϻun=w]=R]!.Z<<.m>4 ��� >L%9)qhsDbR遁2 Ħ2 Oo5+&9lf2HuT* 9J2,@\. CqD"Jd(װ�4 O&I�d u'㋾|Pg닣ўGG#\ٞ:/16uY'gxǍI/6>}ב3w:34gʕ͚V=Az{%~{Mia)%ٽ9ݵybF;x1/uLZ;QYV7eQ+ڪ'Vf)s9}JƖ%opI>n/*eM܊w&Zű_vݭʏ1宮[pۻtw m?fѶ+7zz̺t{쌚0����|3nHr ֘L O&bNi7\ oBT!VEMkцkBmZ^*9P xt#1h $%D!~Xo/aC}}QCpd2 &"wX"iT%c|t?\mBݧ>L=Kd5:6upĜ׷T&8#㒳,{MGFx35+~ʜު#:Mu8s<}}~`GL\bV^9muܽ2;Ș9}[{'gYxϥnm+MGK.m~ջw;y]JE˶t['mvxޓ3lVLv|-U9ꨨM~?tJř#_@�OO����qτ(KJLPU *µf͢yl<N-ȅx ^&B!0ʨڬ BD%E|At:%QA 2') Q$5ф#x(sy!KsBv7t\?:|'��� >LG,Q#!pJ x\dJj8>jTX*Fj Zդ6+! 2R,Cs8l"qMo>^hEX@%DV: @~x||Ѿؿ#>]טs nVdO?Zǧ5:9��� >ӢU%m A#08,Q[Hmʅ|Z& @4RSzY pA&R!h$9x90F1(°!(o/=J!tJC;x $f<>{n\\c eo?uqΝYO� ���@|g'Oš>XJl3+ jJ.sS[U+^l5*TF% :LDVrXg3D#LL|08 0dO?Z Fw`??ʋ;f>������ L 0jUV2̦ (C-ʰ`#LcQLJN ,Er#=!~\Ⱥ ʊF"B" B%(Tj b1YL:@'ID*B0y 3 =?+��OO����<Ux,&8<n GkBIP]d.ԪTfI#Q&M7q~S㬉uƗ{f>rPcH^Xd0tOBC#15ǏЫ 43_vqrt*"ex<ܫ YG^wDg=_86%L' wM˟:;5>""]uRAğ7>v� >����g6ۃtȬTܬWXTaAjg>:tEj`dfFK} '6-**ke24*bsX<Ǡ1 :r8R'Lm8}j]S3Db=G<NEɥw$_eG5V6jVײ\?q"J7g(}۲&m3]0)gq����~|NW\1<n3)b"\5 79#1sTjT˥2Ϥe$ϞT?{bӪ*bR)|.d\D,s2/($*KcelQMUɄSMo^;vbDX43_rl٨)ܱкiYfjc泻ܱ>D֜ܵ|tNv~AA~wopݝDE_?vM;eeeUsދk:*KG5~*O1>:2&嵏z'>ߜ02?;%ko}Ǜge9uCgbkg%do<n\L}Rwen]VPcS+Ӓ{<ffS}]e~Ngǎ,~{Řuw>�'���� >tEC-`aU"SHuJ ҟ@~:9V4):l &-6ejDGh~zA'>fɤiTJ'84''d__;dc"Bl?C'$^wbFt͌nϸ#>/ɨ}k^Bgו19\tҥ=wlp\=ԙXi<6N=g>"ݵP̞uG{>qXC^'3>v{פrn{bb _9yS+>흙߲,vf+f{[2K^B~_3Ǭ<wo|"m9 Oػ2|וy+c�����M|:&UIm15RFf1-zJ* 3k­0#AZY396IJNn?erS&aH{24z H + qLr EdbcfܼU#2*ˊ&V6$ϞUmXn<sG|v~VFBv󼶭{>8?J Z,rΖħÙ[g.-++ʎ+^saJG3ҙ}kĥ/E|"uUzL{g7r+'7{{og|q6ַJ3wy@3y1� ����Ͽ&>ÌZMa7F zԪS"BdB-JGc##"Ԏ`]ÚhnPW[Rl*%BnBɠ@ BRTJ&R XSbFg^66'kܚr*ZQ?uݏ !Q{VYxn\;wǦ֦1K﮾;6]yrc]ҳkuew;5]ǔ= =g yXQ+HkS:w# ar[M];z37>s5剩niK#sߕҧuz˨9E{o|Ha~�@|����">Cp3܈tfUk)zI-qش:G!Ȥi MId[ܠh@  r\&1O$ 㲐f0LIg$`~D*جusb a8 ӽ1wT~'_T.<su u`B]."ݱj%W\B㌉N:8d{mgKzw=]+n؟w~>u=)1oA~syo\W$=f>9>aߏ:Svy{�O����@|5n09 Qz;A !:{EشVN%낌*RgYd QfUJR.hJXJe<?bfhq]3h@*#~h(D`U {}i[ kܱu3 K&NjhZ0s>/+(()]Eٙyyyc>{8rdvNNvVAŶw eZYzN~QIsv<plmr{ol?v!A OM-DԚ1"7;f.5r644lo|6%lǎ?gUInFN^^Nvy�'���� >ti#j-Hcֆ#:{>zE+3iefJJ|BbRK jV!k$FLj5bVQK"T>KcY O|r9l&HId<A}1> ;^C(_/~:e �����gQfVY4VmQeJEYb ̌-*L:CakbRUJ*iNH**e>u!&ΠtE1(4(Ҟ@*B!H�<^O= ����f]Ei3FiC *Na*ZM 6ʑͤ4jjD\H`PI THRˤ !fxD:N"D%SW%S)ȍB8?q~>}!- >�����x3̬G3̢ jB*Qeѩ:eAfUVZ)JD, d"B,DS)D<'e"DXB>[, >ɤ“NѨH~Rp<Mn o~^C| ? �@|B|��� Og9*lVmZ{OQm5-QdRu Z|\,E Ȩ"UI2R!P*_.E\6䰘L[D&R)t׷HX :O_/ ����APƢU i)-E1iUz\jRVi#JT,r^+S+JX%\LRJLHy2h4@bHc@ X4H $d}qE#:�� ���'.>CLp>Ԭ5zԨJV% RR&Cj 5 "QJ*\&VI.YrT 9l&A0$*9JD_G~>#x,Q�_ $h/]WdN\S饇yȨg,9|n�@|����j%Xj5&ҤUX cYk( 93f jT.Kx/ j8,[g"Gr9,H@dT1D<O‘F{phOc Ozߚ}849f?ͯ|OG:<Hw?{��O����@|VCIg5hMZY4:lPLIdҘ*Vmѫ L$<.Gpy\6ÓIJH*p9l.+bE,F&RH2&�$?B]GX41ħO/COwF,ջIcScccKZ\FV|,>kQ6͎+gUs[kJnjJ/ߔfVOeOw]bg3rCWNt&TntpkMQ3ҙ;vή&Op:2Zxm������afmIܬFŨ 2zͬUZZ,FNԪHy|>'D|>x"!_"FVr8,Q>d2L6a@<H#ىaHDDduC}0^h!^&>3&L'M[{SSmDV8t8]lfه8齤K7\S-4rC痧(ݻ ]ݞgR#_~q~AbҘ޿sb|GTE�f��''����ͤ1B`f!7.ȢFb[-:[jjRK"GnT)<O,.GiT:=A&?ĢI<H$dD, "9lAΔ8$NJDŭvs}<#ێF&Dڷ#>_ܿ⇉ϋGQɽ{:xg{6;̙4))Q:r��''����aAPѬu&ZV Ud٬Z AeT$\Mј<.rbp,a0L:IJHSIx*Ҝ8 @yB!?qhL%^C<alȉ>ۍbGIE/|8?$C쪊My~uΜR7w3nB[)xm������^|Â6ͬ L:V0F`jAgu:d@ָg>j\&F dsY<dp>pL&FcpT,Cnh"0d$>I%~|a>9_tns&츰tKt_\yꢬ[NE3?;!u쎻(Zq ��O����@|bBQd5lF<Ig5mfɠRȑ4uƠWMZVRrB!Sjؐ&f\' LItC=B <P,# E_ӽnJ3E?{f& QμcSMJpĜ~\G.n0C�/ �����'&bM1fFuYAfNckL&rGRj5jVѪjZhJPbB!iY᱘@*ҠB:E0GA\_q} j`ahws E~E$>SGE';qb111)[>k"""7y|ϧ#ʙв/{G|v3>?=;TIIŪm ��O����@|b d2-fٌ5j1TQopR&TH|U*R*U"Ԡ1@ 0 ɤsdE"?XR/{+>}px CS #��OO����?/>&`itZ`&+7:7Jux\.W*T*B k2P$En"2:E d!I! Jb(HG>ah%ma|q�'rzx C!7O��''����4J jVGӤA2TQ 2)RL*V&W$2@,K9+flhlz s"BID:Kt� An_P.὇}1Æ'������O`|*Ar JZg e3鈒+R\,B-kJ$JR xb>N!#9BX*<:ˠD\2I"1q@<ޮcn(�ks`0,'������O`| &]d2LJ"X*ʐT )*drTHBT(qyb&Sf<)3LR(@n ҟ,1#STDfa0$(>^8?Ws77ۛC B|� >!>���c�@|B|���O���������OO����@|������''��@|������ >!>���� ��������y@|�������'���� >!>����� >!>��@|�������'���� ><'��''����4dik)x tYYy3LKMcY y g7^2r5Kr͘wlxsw^ߝiwC״杪McjZX<oYN)E ˗D׶k&9~}yumze��OO����<)L&L_"<f(}.?s3PSXW\f)[]<yܥk YhTޘc׶ߴmod^}ߴu;׽y-ss۳פU.Ok[T6?hˆEQ ckWIY["b|'������O`|+j J[5E9s91"V j՗,_6keeys/|:}qM{V:hyxV9kș+g=ҭ]Vδ515u3lsbj;/.[h�� ���'0>͹#&/ k ]&Ο˙%ΜV1adv][8yi樖iS_rn_eµS_v|hwnx{֚]7_!gśwؼ䌵K*r g0}RyEs$3!>�����xZP99w "+iM( fZF2^-[f;3=u-knrg-Es^/vRk[];dG>|k7&6c͎ VWZZڲyݮ[>lXvŮڑ=Gϋ5zыť0 ����悪qf'5)hY7=|ftyvxU]D?-jvҔl1̅o/zs̢]%߶mRۆ^۰7[vj m-4iͭ/xp֖'/+g.k ^ش1q:gUϛ|iGDDL9=Dgۮ~fW>XQ;"ƌw (dyvHߎGdtqhCk }vY3eFEFϙl7o~ngץFG&WXX_۫7 ������'32:f}LC%ѵB+h-S]^;iY7gײ!wގҥJe|}Ίkv-zPmٓWlZZgnl;kn[K2',v7/|hnXْq"*m`|еiGmכy*Ëv#8?YxޥkVj,im7o~HC팯Lt sݥoo?G/M ={فب<_8*>?w'=zϨw:&�'����ƧrxY ʜ3jfM^d8muU⹬VYRK1O}-y֬c-i[eo/4~km~W*nT۾sw\<kt .xu҂'.n^SpkꤶԆuK+J燌l5fΖ<0>vd30='\X{Ȩر7p&5ʕv噮J,Y='yt䒓k<ɧz(-9>aw%Ms_??{oL(/I,0ۉ N}R\ho~[;9cr褸h#:-30is|f[ɖļwqF8sk#C}{>7\7>]q['�O����O~L.k8y>qnk&^,i.V +beh[G.Y@/2eIެXec^֞͝?}E-xpڷ'L״$cuצN]2mnYx ,#ksYMoEw" 附=yjm之fe?Gɾ8y(i ǸLv=Z~o}B~5׭j:6#wimEQ-ZԶ|;F~Y?>5܅z;Iݍu5Ȣ3y"ŦwzF⚩GW4o1&3<(O-Zy᷅#Ǭr='̷>C~{G߼sKVkIӈO�����? {,HX^R15vvDbI7Y'lm \cX)Z5aUӖc6?퍚MMߝvFL]Q<gCAˊGX[ڶmMޞfeoX5}UƴU,QQ]Z2V<+t4u$RV:py #Ō>N;3>}0k} &*^e^'ad1~aZ1 y4p[ː՞ş>bvÙoھv0q}b;)w}^_tв:=;D_}rr̤9u_o>@{GP=5݊W � >���.>#r ҴĒѵɪ)𖭶MoFOڬ(X Y(1?fuW,]muvVo5g}̵ (xֺY^664-R=CWGL_ռ.uʚVVe5BJFo(_ O= >oz<Mg=׭9,.pc^cooI@Jpv.Oݺ/ݷccu�-fI>gS9K[K#bG~N~Um}}Ʃ ןhs祯=sq>#FFͽvAګ2>|kɺiO�����w\YdznW(*X R%B(Joҋ Jv"(wBHF@Ez̙s&u3gs)m'o%cu P ]k*Y;j9$)lE!Ĝ_̾lx>ǾpzvN8ju!]~ׄÁ!z%%4:䚸1Y7'w&?W!rm=m>.bA(_mK/6E~߯ ^s$3I.2v;J4SW$ .M:$}򼼼A_$quAoHE'fqi出S|Vr#9,5pX!F ˰uu߭-Lmxlʻh`bEHhy{Was ������?'Kt68f{msR5fPuiK4=Zo[&|-S|N3zL9v#{Y#6Q9vynD昄6?w`[=kd+9'H噢q|ڐش({kÊ?- M x:!WH;uyHLvnAA&Z)E3Z{^ُKO F#| Lʻ龴#1çOHr0o8Ɣ4x#4#s_T[f+mWG(v1v;Y7p{XP~t2Nlx4V^.R\{-,6W�|����ϥ( f~k~zN*Nj>7;dsHE?)cY (MDLQE^t8v})S^IN#I<{'%UdihI|pQ1u-v~УȣY[]Ԉ>Y\>Pu^ӏEY2M ]⭶ WJD=RcC--]#bąǍeg Xm[%j4MQ":h=3k,O8rwiMsW?~iQ3Gkk",K<#t> 1.oMCF1V*`$h=cA|n+�@>����ɧyuvxcVv +,"\R$Q+*nr\^loy:+^9WB3Ͼq+}a\|ޑ'#2 }3ұ'm &fG 3 ? oy5]|'B|KЏ/�O�����lZ7ovuvQkdb헿xdKg6.�t$Ӿ^9W/zg] -)mAtL[C>aGb2/tK8 …eݏUvKQB)%[nv:`w7P`T\(<~s������?)ڎ+585n+uKnJy;}sT|9ly=|>ENg<xs+z-L}lx$^J/t{yQ<MN1,ZF kX`3Q%AbEgSrߍMtwè'�|����E0^2|Vjق^3eu*HyԭNYy .=~%9DlFy)`|u"M|#[%6:bO{(OuY6( b"!2e>qmNO��@>A>����S^JURml<dbMWWDK;f)d%\Ⱦto~OΟ^ٗ2Ng6iجUޤcaimc}006AhW}NhhМCcTݒ$ 1������oP>%Q+0ڮRmg)i9%e 8r^Uئ_rϾ'MWSvL<jNٶN AN.헉~HN\<tpe9*ɆY'|\8{3ĵBCuޟϳ!6Ako-m-BC\r\U#_vcuo)&?O4>|y?҅,lm-`.-4"||����;ݢWa<eb=BC}r Znn ċ vΙs\2 wRD* ZAM*뗅 %FBfcp0qoo1jW}P}[%|Dϊgemd)ꞨEd;d~Ot=fտD>>O.p(N LQnGk@>������Ob-r>ƾu<%j:_kZ4.NsM_pͼlp,4g[՗U^JIn|4!Y G4}Ҍb!GPl ~U3.?/_yimR+qQG9v|{؀"]\#iiĀL;$Ehg$8YWr6@>4/nWJr_ҧq}+e9Y;T%xؚܣ D |7)}{uB.R\8֦hHG'\="JItgx X mzk>>=V琋HIMQGXV'W0bEÅ}֮ng�|�����\%J+ܖ\Vh9.Tf4w~Z+էo-.+Q l~!ei#ecUUm(ȩxfEH,LuN mΚ%X=xaWyT =.&c,5N=4( rFx[P= P|f]\jP|:3"[7呵Nu#8`,ki\9MOw3'rXqy`J|!}㕉iL'GlSN9MwwC}gAjbk5!u̡=7x;`mҋ;ȡcܚE*3R,��'����� |.T!,T6_a9O|ikSעʡg3"2y vTE+YmA9"r c]>rI)?son|K߳O>y.hSד/͸3UQӦ!̣{hRUhix%AaBLK9ؔI$l0KL}K6KCkM>vqh&[E>Fpz4g+ަԅ=)CF>{cGG#/tqķX;;ûPSz@GE/:>w=}++;<L\Ho/F�������h[5Eʄh)e´uz7ob2wRUmRar;1 M0M[g8m#؄Z9-0%fwL9n~*9* 39`x$b{N(5dس_2<x"5]\GsNF{uWu#'@gb|(3;-::2PgU?G:#6֚(tkaV^[ֽ'{o`"dVLet x;C6bw>ޅ+0CsEG!#vO˰o;ؑ7�� �����|ZqXbj fl5`5cM;tZ'mRFZVa#7U[E UsyfX9l6Dm\U Te]iI:AAP{B%)T|({'H/vHuI �,T%|a_yCՎRv)'Ax5Op{"' ^ܕϪB>nW+E4T(`\~| ,Yom)?"uP_ܚûSr8{`IvU~%sp93H6/F V+(F�������L>SXabM36fl3tfsUtY{ٲ *Rdvn+ȣvb2j>zm[.}N)JqT5R==4S5wũkdnq~QA@}rnH'󎏃)"O{bq!587t$";e}aQ1y|" l,-8ީ(qsprrvuʾrn+JMbs;Ok|_Tt9v{o{K;[ۘ݉_a} ~^M;]2r)z#4SЈ#F�������L>g+Q ,mk6ekS혵pRr&aJsޤc1~Ym-̃l9;238:%&*&lRlO)L;(EkO21~^E8Y9vj uL;ʑO>$�������O-gl6d5}I˶NZnL%y <$uhZ$3cYjN1[ A+ (9)M5 Mܯឮ陪4T!dj3yy! nkmdUL'ğ=� ��''�����ߠ|i={4yyrIRKHPz묝 4dMbVGsZ-f.08S&|iv$u}>2ԽSCl6 ]j`+~FBEz.(ekW![!N?W70'�� �����|Ikfu%(OYc*+'7b&9*,B홫N\h'Qw 6 ߯`'k2Z-Mn ʄMƁK]=[NgfW}ߕ+^K2@c)O1M#��OO�����A.4yeK,0yuƓMZ7Mh yսhxf$o&c˞"d%o:9LY&h۽1;,^+խl@]>{ʜuR2ho#rqj wX+:īyd*9f|�� ����7(L;~ ωS%Nј*o:EpJɫ o3Oc.[ lG/؊Zj""|Dz.R^Z ։nir^ KwZ.b8gUfid0gR=զDicύVюm#=9ow�������oP>O<^b%fJN]>MVgzըrSpfpJhPLr+z唗)oxo4ڳRSRFRnNץZ!2V-SuXR0w\9Q6.P/Pr\1Uqb`6A*vE)5GcQ|Jot5Rۙd~D#U8JhMW<CCK'�@>�����ȧĴgxisgEK,WxF382G.UeJ*[ aWjyI]4EJc"E;,o߈[0] w/R_r2BٌVUn&mUG>kq9VvE_iB>膳|>!??�� �����K>gI+Nx<ىRe&ILYkrr[fmy\+\U"m+XF+YǮBATF}F1Z>ah?],o!,R]VRaN 4m1հifd{hn{be=t'=lq9ݒ74000"FlFiЏrXeB ?${K.8 кVaO:Yr;= }5P7K]]{V(;<X<JP;Zu1& 9:( @+?�� �����frSoXMbKM\6Yz5z7XPpivl=Kz-t7 f'3dB}L]U՘9|ZXYܞ;v_ \.XUR}R]_u޻-bT2OۆYGi + 8,G#B2/.&ښ9rֆ*|O :ALJb ۹^z!bK|lb9 WT KrQ^p4x,(澵NV E\)L�'����� .\aUjS&-4QREB5 NIГ֚HaS6j;G^_ր2Q0lnUWxm@H5K^\e @Z{Y.]$}R5I5n4\Wai:z4$nn5ڌ y-ftEc< v --nB\K[!j}C--^`}ɧvOhf~\>CHD=\@&(?ɬOvjja�@>�����U;f욺RKbҨɲkBMZ7q٤[<'mkV{ i;,֛Ů \`-JZzrM#Va8.TtXGT W R \cUF.J:N1@y,=~LB`̛L}o%_ԼE(ɭ 1ʹ@FrWs755C :/@>������|NZ}ԕ+IH5"/! ;qaf =gO5mVWX[0|je˕+J[(f^Y\6%ʶlo^h@NJXP@}ޞ5M(;v[nB܈kE :OԲO}�%@譊 CKut t?xa � p?����_-k0V(N8aڄeǯ@MF_a0afeͦ5|;oqnIe{m&+ 4eP BdqQXn6 :Oyv sHgn.RF[5U5T(:w#$Ǻ]bF ٔwKTEH6x73g}4!₸Ws+x-t-~?~6DRᢏ�O�����?[MZ{,G!/c4Az%JO^c0Gin߹jEjvbc"WŬE`!+wZp]bw >v.F4bEsv:,e\mqB5OI-h%(hO%noEl_-}|Vsn\1!UsB{%GD$.{_w0׳t }v8ȉ`xW|~G3'ޛt.F>�����@>)gs֍_HBwNeSe oG-D3I`U蕘Y}i5ǵ.r(Oi5;mU2H9>zii,a]d-T53BysG[`-\0N֊jJ&O���OO�����I>',.1Gf⬥gHN>AZwKwL\hPogj>qoʒ1I^!Q}>q m/ij62 8ult!Ă5{$6#6XuR'US?PDY~��OO�����AVbR歗X9ctY ;$mDQb. 53vM^^a$G/g0l.xFaR=e #WaW75Z]9[-XbdyqlVcp?+�oE4 tj ��''�����ߠ|NNb 6L^[b9z. FKm&-QX ?i)imB~h!;gWpĝQk1 11ZX}+>l!zLE<e*L[,XZm#.B4P3pl ��''�����ߠ|J,V4wy$N#TwU"r,{-M\yf[lhzWtj.EZ![\Ick1[J/D*mcnC#*۳PgN?)Uھ3ZKNf*a_LRXzKn= ��||���� / '.2[Fs4z6;mpD)%)2(%;'-$pd9*,bu$U<W%U3{ J #['r<trMj*^KT<mL?vLY6*3Q@ͼBgFpioRܤ ��''�����ߠ| �������O���������OO���OO�����@>���O�����@>W���O�����@>A>��? �����|с@ ȿ$ �����|B �����OO����OO|����� @ O�����@>.~@ �����|k93{}aGe {9}dcp#29O ����E> yB|D;)l!ӇyO'rx ����o_>gD5>0{D;{&GHei<ad=l'����OG ?#鐳}BA),Me XhcV&͹d@ �����sD|}4%cL~Gb +j*54vcp |B OO�����9vrx?ukNu,ayYIc='3vR[N6vy],ï<M?<#KG SPE叉׿kb"Lw()�+q]Կ:sv}[gN7E:{))/x9Z[H4I@@>�����[S8m oBOXIG_xLbv#V1ym >^ZIvQ7L/e3tN+@[sˣG?<b^@3qւ~ :?/(^r. `EEEuee<` mX&{xpwL=WuU|XzF >g[Dkcam�|�����ʧX#GR:tS}*4lbުnc lQZZ*[~YKc8U ~Mrt>)nI"s:dҞ+j!<VMINGg&HqcOWby |&T[,Ȭ\>M.N\?$!`1ri7u=&_ 0)U%EFz;bwufěF %z78lrģ>RzDyJ圱ǁ'@ �����|)|_>>,C' E)7O*t0- 4d)hu)l~=]ˮqj(F:ʩ5e~R>cHHcݠfqj_\v`9fi:h ' zkG^D:_?B\uoS,J ?Ss|^Wx$II->$Knj[OEn\X[#U%?~l#w? ޑ=#cn6닜·X/d7#Nؽ '����� _+'~y"p],AY7RKg;/2l5X$6%hq *®_Ϻ6Ҟ^c =MϞ6l|Zf"rllU?/EJHٸhYO#=s9|y[= ib韦{+M *RMj]Wg9f1YfL:ё# }]Ͻav<D$ a3|CW*�O@@>�����z~| >@<a7Ca {8=tuY[i.7^C\!#Af zG4:ZJ5O#ݷ =|;q#W'rDM-ШOD]m#_enMwj*܁JIߚ@ʅ^/cv{ #"!\tݏ5H |g?tVK7U8m6 Fl`NM<YB‘!cG| �|�����Uϡ|:D"1&*Hx$N+=6Qqs޴5TYT3DDI,[@=w=59%&9)ƈ_xcxV4䈆; xh$e[5䘞l>. $6MjeT# :8f AkWyj2XSϗ1ycul>N|n/] O�����@>V>OSmEAjs[6z'# <!NM~veI2g^(0ki\6O Oȧ[xvj@֮]\icSݥ!C^R$u;w]EH}$]=s5Y4R$QRU?r6áN3/8_xZE霵ѧD6Yrra!"Ͽ}}&6,kqŒFX}7ˀyf^du&HvUbwZݎPzu= O@@>�����#r9Or,AzSn?T߽loya'fwnSrD} r! lH<]u{ 7΃l*hK*5眺Sm ŃYEI@(\͏3~0l`JAUS7O(s٤PlR~(mrh>ԇ"f7x"Jmo84B\{JesylGsxGAr.r7O@@>�����>/o'[G(a/GЊx&`1|}>ek$og~U/ ~r~ދכXyI R3 Fflvs93d. < �����_!i[mH  Pna ![ dX\!'lapv6tun8j*I~ԴBI_mܤPTdpe;hUV\+Yם(k'����� |{sCO>r hS$.1O.R.Py6IzMZtw㔉{N>,a4x55 NWdܾg伔8JFr稂ҳ7Fp!O�����@>‘AZY>͓2G@ \> X('lb}n(x5<q܂c7}\ݓYCΩ{ڬsa׿SBɏqk*6^x @@>A>����6sR#μ\1xB*Ҹp"q")#qI'^3E?Ls9$?_}\Jm'෴gc)Xӳ_Jzp||���� ʧp| GOGS},~#!W )xָ^k`Oqrq1~[^<T*p)18k?_rWUR>(i#ёVY[riD!^@ޟp.gc|oZVe]hhii+Mq}΄^}>3�@@>A>����/VXLS8gH9aouɞxsXdcc:wAw~~9A7cE؟Y5Wk?z]KǾ󏼉yI bj|8_"rMkڿ\>wo3pp][s>BTg;@ �����|~L>s`[4c>WH )<!KJ^_j&\-T< Of7s؍uOſlv7YSv7pw6j?%So6SG9vDCs8$Sey>)hctiymMMSSۋl <ݢZ*<1~ӷZuťu Mˏg{u -m rߔ3m͍mՏ;X#s#d;2f4Ĉ;q̰f^x]W`zR}7hȧyn<~\ܼ3#.yuu"1_v OO�����M ρ #D;Y>.'[Ї4EK}ӥrRdٯ{ :qEW󟖙]c?+7{cY6] nOH*6֋_iɯ])Oy~kH9}YBN~wx/aG `51'Qb?4ƺ<h:mz?z־ R>Bq_s}Slu^X]6|H>wdx샎yN*TN4~c~d;\G:b,aXт10K&qG#֞yC_v OO�����Q=8y<G>$ʩpntwsG 6X%4(ń1S[8-ޔڎOVf>yQWwmwȸ(_u1jh/O#LiwL q>J̿TQY񺬬Q}!YOYOpIe<s\Mbh-gMP:_)|NjMD>TJz".43KepsPGI}3׵vy[}O:KCF>4iCCni}@@>A>����f>޾e )a9wfisiW~X4oiMK_Gr2 cURe=E߬ͯ^x=;e Ëe,?T6ܯy^4V[}BD\ǟHiFq%>5y.#'ݐ2:&׽o ?hkCrYn]<`$zr(%g]'߭k,X㩫`޼3;V Fc����| 'W4V(c'=[W'K(lcX<uɺs~ޫ(&M;_s?/6#i5/V:?鰸[?5Ѥ{>L&d?Kxqa_iŖ޼/Onޭ+)F#Ūer|o:|&[Żi,OSsgBjԍ~˧q8Y/lh+0BmOsfD)83p9xтCYW*1rHU/c''�����ߜ|'O [@@ [nV+*}Bbk|ID傣SJƸ\^.lJBa._@[\Y=U"laڂWzv^tdK|;ϟs.%u=̼O?TC"!D~6'Gv{I?rJڵ憚򫃅Hji]٣{?<wOC5- Mo/8${-nhjlkj+Lvo[q-z'\kzݫ(^QQ,W爍|m簜Ɩg?A �����| G dWdv;S'{MҺ$U:5Ÿ'c/9X Q^ӌj7G{ݩ k?å7j7^]9^_<\ݚW٘VD]71؛_9Ʌ-47ݣoR-c ���� j϶Oz8-L-7RыUټG,GןZ}Fbﭝ>.z"{?mǠ; rGLG|~'3_<U7oegg\|3Yy+u''����OvT8t.+>)ۓRFɩ -r{ؔx fT?V۳Rclu"O.EFbT2*{l3jz}:z}uuciaHz7Ԑs ����oqS d:#r H>\!+ +Ltqx=6ɫq_YwZ)OHtD2Yl O 0|W+ZGeI,Ai7oN7VswF'=wWQ;$fU/'����[O_m%s~dDm\!#S4 *^P#z9y1z-4^7[:.r"#r>Gw*[C?%V&I3ղt =UJv:'����kbs3+:X1y-=)' .=SD{EvLA _K tⷕTNI7i;~fYړIcٍua&Jg߬>[ @@>A>����>#O5uqVڶun"^)P]LA䷰y$qľLϪE+)ٵ4Gm{m/Xc~Xhz}V6=n,]8 uǟc?)g.۪e/ ;⿦#]܈&1:q����oP>YC% ,~vO@d?'.6λ̭}Ֆ_SBb715tιfwiε-k~=13r^uwߜOIAe1 /]rJ"N숢6f+~'C|gs;uQ=kk~_ KNe%憆boat/ @@>�����G>:ky5Gvr}<('U)e7^[^~TSO-VsEqݚe8~p<?8ܾY:6ʘ?=9tBNُgݸc~wS F%y.m|$TS mjJUZ`K9Fy+clt^&9P${-l~9F|%dG/˫k۫E[DUM]C[wwc o3YLgѣ @=|�����'+}ԤsYgtEWIb >:OxTWM~=8ga iYNNǧ[alf7ade,A}鉱W/0𛳎VJ_>.Ḡ 7YUv':"繐Osy~7b.NJЀ[u&Z<'#=5>""Ub]No 5|RkωG_CPk2MEY]#]@@>�����峒pz.srzmZiŭvf!!s=AK59o(.6}:>j.~UT?MNYwEO\2QcGYjnųה'Srw\9{zEMtk<|^2H bB3tmvڽnpgmSd3|#"$Xv|>4};2ǬP<r!wШQ\g@@>�����v']FÄܲ?r^.>]ayGjkvwx$ΫrYH[M/w^rjv`S&G%堮7h -']o^{C_՛VIz5l8`kffZ^jvR`B]7avM ܮ΁ ߔ9?*<b=U?�����̚ uG_W>Bs_mKm t>b"0ozک-?[{7)z:j[ϳ.z K <a;f Do%4}Hf>rUַ=B3G|ݲ/h\mg>٦hv`9| 8NF>oU`|gn}Zc:_xtدOJH~Ϫ|�����y'8YBngmY=EmG=Mks({][.ݛ굯׬TQuJxPLU<dZM~$UTN7~RޱIJ$Ytjᙺ9Yn|buI$s4 wJo)3:k-9X]3.)u|P k(I~oOVp(OG|s|"_mB:xȘ/C O�����@>y~ͬS5\lo+<^O*%/ [:ʮr]wՎ.-ocVB" 4G/w2zy/)oz%grl_pYpʜP,yjrW|sl/OS3;kEIO|tNQ̶f]m5{^`;ZcG\v$18YCg!Whs6~ �����?/SWM-[vNvƸפKmu!:Sj(<K}.{=7~8.Ƹ_tGc,OCcO||ǀ|vWS<5Ơqr3Wvlgq̒kcR> @����� s։__N=^J󓶂V&ꞲN[;5vs޻㬏Y7fXYIrzi mKY+vb~ 6{ـ|X˱տ'cskO;Ykڃmun5nq*iP2*'����Ϫi5+.jluzT(eolynͶm*ό4c`xI{0EPa{මڪk[kmVP�"Զurw\B|z#=xɓ k=[U`t"Ît1{+ri*VJA*S->uF 8~8<K0`@|">�� O.zSp?+&zg}E+,_g΢}5\y_+RHT2t'khmxRɉ[LMS6Sk+Dtb&o`$}YΒJ>j{i.3iztaU|b���O|@a҉;{v.U3\K?}xa[*+>d8^EOfQ_᯺Ǎ$A+?qNPPT3itd$t:հӝ;yJGLߵcz4]GZ=0`@|">�� O~$sɸ_o>u{C/>T4d!+.<蹄DEa ʆхU@_U>zzE#N|`R&OiUSLi8Ҥ/GlPIV詨Г޳'Go O'���Q 0 >���F' 0`@|��� O'��� >1`���O 0`@|��� O'���� ���O��@|��� �ox���'�������'��� >4z-�O'���iPais4mUzjk @ۡ6~Fn&#)*=zASAE4<#;c"wz-@jZZ(?*$)G|7@C9;O>x Y>$j)�O���xS]OiOӴkc[8x&Z?u8 }GMCmSOUf&=* Sn类*(ЩFUPP͜.LJ4fŒ'6j1njo*dvMr!>���70> kV7u0 p?ZzېIfx< #]mGЩgOZϞ<i,UUY$1,M)WÊeѲbr HxRxM?"koX_#oJ\;vOjZft2kld�'���=$հ2wJ2jj?\̫ȢAnF[:r<5cK+)*8LuS ={*e0lm!GX]ב֥z*(*1HpF2j9_D'=yҞp< |]~&O�@|">�� Ot+[L&Rg8cOq~=y 7AЉJR%VURy*,Ub9$hIy0x'oDʖȜ3L.*{[)$k=}Bgc8D/�O���x36{.iim]Lhy 5=|1N3=:zs5IvJ/($,9=e'yJ/2DWTRf*)IOUӴjX _:x_;Gdmsi*vN Zxp<#NDJeB򥈐Qdiݪ}U'3cD<lyW~tzmn<w貔Mx1aBaTBƲe9pq̕odz}ՅsDD1f8wMrA&D|�� gyF*<.@MFMǎeձ7uٸ'YF ]5|Y%&;)dks5- ,Z 5v3xZ[99x{L4߰~Gwu%RK-^zeB2Ubܬeg>*cU<Gb!?~ڒNjqʭn_::F6lV5fŌ~L?<wɓ= Sߧ\N���72>csEz[C۔FST+l&[eQ7'gϡOs$>ɚN=dGh٪?{<ZJ~6C\}s,ENy^qS'nX=|,awIM(J*|>3YI10;Y*LK<:1܌-;gEČl郧b#CBÓ2R;*Pc⢄=^{qrbX(ـ)buKj/}t)O~ڝ#ydz-obͱۯ L}$E#l:؅+W-m> +Fd~GrHr?n`_"ߨ߿B(%_m~[ O���x3(n|1dNEKOK͌aj96s¦RIYEY!HTTTN=^AN>9VQvn.^i>N~S/1u@kd }{Et'HSE}Asm&Kpw6BxRa׭[bьCE5Խ>M%߲w6䏕(v:uXVH-Xa)uۜxЌIs}lɉ #+I}͇Â4rolG7v6p*3kd2=mﻪ_Z?:x;[wm[Kɉc>#x^ZOw==rK晚GM'?NACCɞ(_Ei >���g\b*SYYUYbYiy9zehاBfٴ# SEAӣp>Vnfn{E[ŘY:98z:vj\i|. n]iQfɎYɃ6j)u;YUDŽPϭ J>=J(mRilos"A:<~Kf>:T][ymlا]:6^6]nQ?7}ut錓% Fm={ңxڦ� YDj "_mӣ'G-h~~$GN|x{qn�<d+hΑmO'���)J̡ӕLUII`jh:qyl)ONפRIM!ͩL ,O+d(xfچZNᆶÌFC-솚Z׵q8lmSFw MYt2McHz滲c5 }RenJW^zeމd<"n5s}*Nޯ/n uLo˵9jeY#cC/kD~pG!Cڄyҽ%96%*\~_l 6>J-vu;Խb3ὦ*eonux[mk8ۭ=Ȕכ{>EM}'O꫏l']㪸0'"~)~� ���]}Hv<.i#ed25U\hrIy3YZJLEygv̠ RRR%Ua騪Fl5SjaYZd`1Iy5tu%QtZVJjP7Jd\.ȒrH+^ٚrާn.!>C+?$͉g@/g/\ 7ZmIɉmy4./<{|<s!y<"̑Cv]&[e;;CUwx[y;V漨y7ZqHՅ6GoKs>HnnyO'���t2竏O]0éO­[ȾC\*G+SVgKݪ2 qdt Vjpl]-}'u];ISE$.lN}UחIwBFM=*=wm."\n;kW)?]"�N/3[p4zppI}oâY߻}͉ѿ :gLf8WL+6>L?%ͨL|Њֶ: [({DSVozgxj<띋-/^/{a┼+]w?V|]?12ku25]r3Vݺqu\O<kjn&W7 ˅R >���ЕGCCΐyȜ>>XӤdO@аwqs"ǎfg/<I_izz3LJѤe@Ul%&aꑁҤʳ<5홫 ]PvjeuտK$7is%g.XYrG C£[{^8Ĭ(:kL'J=&%&T1~oyU}0Vʓ?ݕ#"݌Epǒb0:1sCv/T|ج_!O_oK%?oxx6D|TOjw'ˇN$ţ&9x+V >���$m) 絈όRG挊M 0>0>ɩo#rBc6oLfRIgڙgGik(**𵵴x\5]YҨ+ryl2d N/8]qtBuyYIc$S{ɢ* ^'���>pTX\b!FvsƍfѻCGϞly!+^>'OOvrɢ=Iy*+)0 23YFS6p2pReմ,jz*LbAK\Og'8~?;@|">��͌HaLBxBk@qԠ^7{n햍;Li 4j+u`-`g``hemfsN5zYy3XyÇ WQZ:1r2yL W*zSeqee O'���ɷs<<¾O_G3kRTڪf1{Qd.HW$w1!CN˛|񉓇N4sY@_o00ZO>@؅3dqdkR#>���S>Lys'$4qގZ9Y:6)ax &;~O)HYhh4tI43S#O wHt!~bW 4px0h(TL'F}n�O���n|VTT8qB^'Olll}]ӌmb6,,)iTJ8qRo`0`a„8q)샏vĤ1j;l:--m m=[Ɔ:Z]\ʚ42!#kt)Ro~=0,ln5uc O_Y%=GO[ҌS?ՋKnٳQIdj1 Ӻ ?���.>#GH0^{> ~iicٶdys.]yܕ iAȄ[>l7F1H0px;<9#-B&=ӆ>.,v` SA&dUScX|;g6KyK+-\]:]:TQI+Yuӌ< 5ˆT_/Ƀ4>| |N׻@;0� >��'QZZzzW|:0T^_Y.{;ۼ{M! Qb\rbBJTxt8a٪͋vfǷ30З#Jvu>гO�a8JFF|&t5uC&KC~\5uN㳱A2;eU牥CB#fLzO(ޱzQܙ֮=uYΉYr&>lG%&\ғGkg&3.:.>Xj[r22s'T?#RwՕ|3 l{Rs߾Tyc̉qڼ6X0Nnjܘ0yɹcL\p!~� >��'A<_ lKȜe;EN0o??nVpa|Ȅq#CG0$wl^RlbLtlJrrd> z{xp{8<\5߁k`lbԳE6>ٺԵsi4E}N 9N46t᫢͒S^zTs6Zyl'T5XX1.3ϐNđu Ҩۘ\{G?9;*mHsOQV2>lH˶JjޘIKJꟐ+f/�'���|}voc&skًgh1*mf?bP`P@!~.}$FE"qlL(,ٙFQbfjo ڙ`2Td6ryd],WN>)>Z5Cs㳦; 4>t]Gwn2qR^^QQ4tN O12vԔ1k|zԅ.^ E񇕇R33GN)n% +tFdRU7%L<E2՞ڼNlQܘ&S3����4><E|iڸ r|"#GM:#FgNb#£$>Ä;{9w.3hXNffba>fmb NQǴf#E^";H+ s;pﴸd[ 6,k~j;ƍu${I͇J~9z&"x2v=򇨔ۊ.4ms~IӚݹi77igf%L ��� S5E|0Y: 3@d.=ݘ31:46\'   <^a+qqxAK//>}a)LݍNZԇʏ˥n2 xz5]ik޽Dfujm$S WՍeIS~M_EQ,'*ݒžXIB2] ~g1くo\ ⑕/|:<m!!>ܘϰ9%%+GΕO���())kȜ>>ՙM&WWU͑gac4yڻzڻ[[8:9={y zr؜hJJJں*lFWѕT9lMKOAeK_}:/%3g-Ycf[d$I&>cٹZ\p狤Yܬ1ٙ[+t~D|=PI\촌љ+y$=yʾY/ZxÎ%m^v7>ܘ0{ziYٙ2l�x ���bd3Yj,OKGەg/(XLʑNBfCѝdS/G㷬ڶqSvsTQQ)Pَi=4GӼP;qD|��`|2e\=6i344շ62p5΅ojkf n/Ԕ q׊kkkBiM)<J,:]E^dewd�D|��,U&ix,׈coaifkd`nn%=ɚlEP;[i{ 38fh`zًٻ9s& KCC"QsҨ"%,&׀WVUST >���70>8\bk0 -6e9Ltʟ٫_π^C#a¨p{UA l|'諢*=gi(pH4lmҢO�@|">�� O U&b4Uxjl5[WĂol7655RgkX<KMiineo['ܽoG?)p_xhHP<h-t_(rV7\mm̈>u4:u-mC|� ���o`|rsK*71j똘Y;Zkk$>L:WiйwK>6V6^^BÄ! 6<.T9i3f|1LB|� ���o`|lu&DYŐ^V '[WDmljaglbm``9n}CJʪL+kKKoHpPXHpx4DBƒF$罽eG_|ODkOZvax)f$Lۻ5 Ex �O���W,hpY 6b0[SrTj 6KԜofiobfΖTukc`bbLPSSWPPCQ* ^;0$xDhBCD!#D!ݶ{aX|'Ftg흃ba:2^vfPq_O�@|>ȑ#ó`Ѽn S ��^|zarHp$ɨ0٤H5jFLSMWVKC up#C},;{4z4&UTV}G !8P4<,8 "aY?زwp) QȔeko\"x ёy߿[<Xx �oj|u?IO��@|v;>G̱l4>9,n,5frxL GӞmYZ:F:F- ZrTgq/$mN9BUṰl읜|}G @3t0at3SN7ٵll|*=*.#2%7f?ÆƆ_9ϯߒ< #׎gU/�$=YY%{v ��v|fɏq5H|rX<2d19LLO6MX\-#KS#KCscum}Sk}3-@ѓ4BTVV159�!# ߿ɒ]uY[?MLJ?7|\{!$T\nfsouSN}5d.'ޟ'Ko*t =ْ$m읆Ӷ)r���3=gT\^HsJe0X** eeUJJ*J &[#\W]K9LQV&Ks5 \uوG]Tfrl g^y W HOh]w2M_tBBSZ*x*>>}褤dHasx �C|ΐyȜ]O-ޟ'޻}ƕN2[w`އ˫+K 8o_v��O3m,ҟSx<-%%e={>-xZ:]NWVPhJ*JdgO`suͩW2js5 tL4 4,tmMlikZX:999xًl|\13N4_ sbs;MM 6Tw Q0صj!>OҖy t+>ޟ'o]|ӁL|Jkm]A|Mxɥ<[DjFYQ.QsTּ���)Y3SGJ=_QA:][-x'$WÐa0T׵4зIm5mcu]smcSkW-C+5S5-cM]s#[5M# m=c=cm]#m=-3]SNՙ>걾ׄ=7Fnj]eitoê{=*>뫎%R"4V7>>؟'o\N2[(z|%U-&L^U19oƛw7A���#GMOɜ5+.y"FlYJ,GXCd@Q^AAAˈo`ni7;`Q!CZ<]3)OXMˈjv ۄ)kɧ<@;S"g%EȄnᭋRSGOɛ6sK�IXL >/_3Z5Zg<撚k_ 0-n{Y]z®T���񙘞Ggj,ރY [z dki[itH75 $# ɸ-IP-c;mcCa>!}[ Yf:f$VmMF|mc.^p��<繟Ot¹.^e{1YriMYI ���6mdƌQ3bdzJJJ*,ECzB@*()3J*J*L*[RiiY[1m40t1v5vw�ԩS͞Ep|v ~x~V|�9Ak ʨTLV^[.;?���gԩӒ3;8z>1gn|Ճg˳A{<?ũ 4%e (Wۄkgooehkg.3w4pB|�⳦&99Y^dLyn>}#v2SZ]iVV~[\Q]YZ&nIݻq눕H]ͽ6Y7yؔM7JK޾zp���736iB\ԩ!a|pXS4 #U SMS6VTf>SQAA4my.luOT]ל|%k!=jB̩?�諨&I<Q[Ӂ|ߜ:֊|_K[?=ϊc bxzڊ rb<vs|��#>c'č7rrBj^LܘtCu]頦m4!ogi`m0d1ʪjQ]Qz.iг6^Wה ffv!>�I!ז]/O*>~_=|t8xh)'u(:[��|&>_Cx? �t+>^T|׻w@f >{.]~W��@|�*O*>w~I���O�7>sv7>54�� >�� ���&>�"]XXMא9g���^������@|������������O������@|������������O������@|vIAA~x ?�����@|vzx!#O y������$U /<uO�����@|">�����D|6N:�����' �����O2c|Vt���� >\.7gee. _�����Çϔ!#W|VUUCd2���� >͖$omc4LHAW6l[A?|gO% GLdAW{u}x3>^:eʔ2J|\|݀aQk.���NwfT[vɵUR[nݣw@lw_ۼǏpcrߔz&KοxMnw`އ˫+K 8o_v|u5/-CkÄQT\RQ~]kENJR^\|wxr?_ >kjjd3pկ^IO-lzߺ_���x89fΘSJ/3:tmjʅ=Œ? lsշ$55 yorx^Lyc\ryGV+ZIpo-o$AX2߷Ƿ$ߥܲ<>k$K"5JeM|~E5s҄ܬ3~**{ ra>{o(f| O?vtF,+-<:w\(\5ue]~wa^|X,4õ6w⳰p-dg]]]Wn|9_}|iffWC/‚J>pngg+|ov};"0����tꗑ4܁ξ<?ŹνGjz')>:6&LutꝜNN/sQp^qV6%? 1~;Am#9^ow끐m=+%d�ʦ6̓V .Yr)9xi9XM߽ke;M:3iq%tl@rg{OcWl'.pߎϊI<.y>ɭmdgwrQ55vAsvUu_C3]&l)wXȟ?8=/؜>Ǔ[scsh5si?߭h9?ݩTV:=>JFd-uLR%Ҍ= hQ+]m?l.n@5oF:nJw__?���� >U3[ցpCRS xսGQj2{1sC&s6ޑ7Kդ.NRx:{Ct~ݺ4mCA||5nHE55S MyFiM�WP߼?ºƸU|4gpOOv|\#)o�忐 ʩg!pa  {yi\I$;-l HեGIrt%>ܤK >ykHgޕ<sDYa Y?73,'$T|yMQAsaV;qOV..V;NnK bhZbmAY~&G|���{vwOI?v绕5-�i_&X}Քv5^vcct{o}m4W~g ^_ڴ osiHVrqӠ䳥mnRґU]w͔amlGK|ib|glע;>sj%&-Õz \lnaӷ@pVRjW6c.h aQZ+dzHHXr QQQ$Ç]O2[{7o^toǠ_ &\|[?J`yn޾42pgdb/+ÈO���1>G;Mj"~޾">_b*퇷hяH/T6foYQɊ?phs[Ox6g&1$b9wv-NvI7E;|}u{vx[ֿj%?3P]~mᑤYXޫug|nEjc E{B *<9қBw$m\P?wǧXX bw,-7U!+K\8-\w'���KgݎYgwlm}klb;v7{}fTQR ?VW*mo]lSt{g69X*~:iOUa U'7N?mj7oپW'_O7fe%ՕE_nη]z@]M]ђiNͯælQ*}Kn_=P?P'Y]}BaԦ?V+v6J27>bWewfD7Y:3:gծ{ҽe׏< -Y+If4>-}w2pt=U$yP[{~k\U]KwYX{P'IW<Z+a~_���NVWVV^w$#UUTj~45ء_/w*eZ)wk?Ko~_i8s{YM]՝?Mj-GSY|6vVWtlơ#Vm潷m^|U]%kkkJ,67n>;C >7'q HpAQ~@r_`hDx򏲞^¼OC/o9;[S9G5!3R$ ʞ,)iش1&OᾅOv[zii Q8>e ߼>ϊ,-kaw2k_;0elvg78,"":q̧{> -( Q����:05fzĿ O`ܶc5%7Fs$ISkq6@oslb:XyK׾L XZ|_{ Ŭߕ^|~oƑ}mA/x^&>Vo|_=nWV9)#I^$[w���կtq7}JJzԼy?OHWvAH|uX.7^pQu����ۧ)=8ƉDw~?cۏ-Oσ=,{?j_���.꺳p]uAa1HQAA? 4>�����@|�����O'����� >O������g|O�����@|v`?����� >������ ������������'������WΝ;ds!>�����ycǎ$iI$]~G|�����@w'N QIҒ&YWWG޽{O������n|:tɓ$*IZ$Ibu|VUU矈O������n|9r_~!QIҒ&gdқ7oR >�����[yر3gΐq$0IfHrJ㳱=|o߾~:������ӧϟ?O% L$6Irlzꂷ+**������sΑ %QIҒ-ͧ@Y]]]VVF ƍ/^$l=vؑ#G:t|������y$I$T$H#IH$'IT$II)>>>|XSSSYYYRRR\\L z3g/'O<qYQ������#yH"" F$IB$9I% L[g}}=K$REEEׯ_'dE9�������$I0l$H$I$-I`R6_EyKDjYYٽ{Ȓ7o,,,$Ju ������@D"IE$I<$!Ir*Oj'u- Ϧ$%JI&Z^^Nݻw�������dH$T$H#IH$'}ٞnϧ)O[jhmm- VpUUW ������@ $I0l$HIm+/ϧ|^P؃dj������Zjd#՜$$lUOSޟTR2D������$N9)/gU Q������Vñ%\B����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/tagedit1.png����������������������������������������������������0000644�0001750�0001750�00000146726�12161032160�021744� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����,������sRGB���� pHYs�� �� ����tIME -f��hIDATxyT龿{w9{Zm;л{(d!D 'šڙvjEq�TF!̄0BMR! g}Rzzx͟~M�����^2^z'LeD������Jq)%vs/itY׷tm������ RK^m˞iu2VV�����p-\x)t'Ly3qJI *JT�����C̖-\x)&L9US/ufrF!ɑt+** EYYYii+������>f%~K,.1^~S t/~m39H7or>QJnII˗/ r�����!NK̖-\x%LL0%k{}X@ bFNNh~fJsUUUiiw$G^^@ p b{C&&L 4qcbL <577T*bܔ:SD@ @CY~~ $A7++0abč!SϯxjVPP# GW?JcI]yc@ xWWb9%>M /+&nL ~635mL <WVVQ6^!g>ztQS@ ăX){,"R. r�9LNy{&ѣĊgj35yOԴ ^J亮c[m/G,lAٖSN9@  qS Cߠ|~%!;'O 7&L<25yǞijg/>jl޴Y<(i_0rH1b?8eɞs82x6׶v4t^':Sgf65Ύ:f͑ ]czr?Ru<g%E#a "=g%lKn^璠9===''X1qcbLMzniiQT=Lzsn\}3Bq$ANKZfR. 'KDmKZELMu&eORhj}1ڇDwYwW$DzeggL5mhf9yt(Sʙ>{Ę~H@KEݥ+?9yʬ><y๽G )D9D)r!9\byyVeԑ}:Wf{={X1qcbēϯY555)JBQPPc<^ߣigy Lf)c7y\]oiϳdG'Yssű“6{II\45LjgJrJS];vlqLQ1i#':OadN?4љg΋2g$c.B i:u煵zJX+<f"L@B27y:'JT3]YԠYAz'!#ehOꊐ\g3i׭-?9Yl6FRS&Zid'sظbBb)}ϵmK 9>ew$VLܘ2db=L}e&=Sl _ĞA9@|1ž'Nuvhaf8N}Z;;kKso 6c'=fq3fIΨo֑/\;y j gp,u :wH,.-* .3o<V6uw镥אmWvĈmQYƝʔF`͜-^Ń!gi{%<GK6 zʿEnz;eZ\+3j]EHgj,*nobƋ6))TuGI#uZ*/̙]@ pg)g4e䔾Rw}jf{u֣GSS'Ss~mύ=K~}g_, |*L+_ٕ5c%7=SB w_K6vs86Ϟ4ژ~SQڅWLǔ\tqrYv}g~%~5Dδ돜j 犯]%8lv8p˺Zl9֜r0eG\^޿Hx⥥Y,%:y\)3c([exyc"̍4xdKYoI)vڞ-MurbL"n^yyQvuwe^ݘ9nVsh+y3)dSWwv>Yt2izR3gN1뛲M8pʹDZ3p!,hg4m}ϥEx˝6ε<R%Asrrrzz:bĐ'gjW^PL7QP֣fi{B ]Lsҭ%Ğsس'::qӤ'1+2}.=Es&\7l;M1i'$4elK^6e'̝ò,qJz$g\^w"K.o%K7kFkΞ5gLeꂓ58_m5F"L0yʤ^ vyL0cS6mtbis'1mKݥIjɩN'͘h='Xu<uKy{q|ɓ&glyrq*`ܮKl &C ePkVϥE^;ε<ҞmK7҈7&L-aݞKJJh{&oOyY?{B ]Ls zYsfL{nzgO<E%.$YoNn3@<iDGڞ]&U9^;ܔs:i3gOᶛJ4ҋ.}*KOp1gF"L<Qq9ihܓ=''&7=߿{ %gz`̹nsE̚F>~\7 mۨZ,l<6r4ĝ|zG^}~d֌9aՔRlf(0=R^MNGA\$=_~gg"2… #6?;.ΞGiΜT Kƒm,b{\p j4a 7Y޴^#_irx̹͜=m.ڞ|n  7G,W:9Ntv`˥-2%6͉\ݼL5PN @۳e9.^}TM4s47֤7[v{muwv4Mawͱ>\8-o#)iΎ]O0w1BjXe"/fSot.Ӽg{e`sgj{oJ9 @|t==oTgn(%6,\sL̯'S'|h X+:\+]\f߰g^c;;.Ψ3Pf1ogNiN33L2,}p姄QPt,5M~QK~xxTD&:17)sڌso4cǞ{ ԻUm'}pGGc_ )8;ڧO SRN.*;w3Ŧ]p!,<eB77LXӊ\Ⱦ{zK+|מ'O\OJC 2YWћ<ulWf4wv7=vhOu } {Ν5lJ`n}ӜY,֛ܫ`93]9˳JW1Nleۺ ݺuV\g̱ZYxmgFY&WTQ'bgKbL bt՗e[mσtLӪ6ړ>Jڴeq:Ys\h+YlYgZOjtًҳ MCӔh Eg@ #<K| r�e䔡=>׹g7~?ә'9@|1ʹr_{:c\W'2e7D-0<{nmΙ5sIxS oLi2yՂ ̘2<aV,sRov5əZZlh-Sepvi#S"A:cDzϓ&8͞NԞ2TNnsmkYnyI Μ4*&t1 BS_ϙoPmzY6Loێ?UUU>=#ǛA; .v:j#�09+|K{f[nv=G"C7u@p8w ܞ@ ~۳=E@ aP_oD @ e=:�����S˗g������`�����������=������{�����������g3������g������`�����������=������{f8�` / ���hϿ�ê=ݼ/)H���{ehn�_>{>ޚT4QUU2�g�>b{f@&B�{�Is+x;(A;] � a�j&=�{�M{� {� {`�a�aPC4�{Ղi1FPXn�{MD(j:FYj=Qk{ܦU;`PC4�uCM^M=F3NT*O&{ʞ-o"B[c,j:uzxڳbCG|DYywA +.?}f ~R~jhi@XԅGYq2ڗ=`=$zZWԔb'=$ oـ {`]ٽv2=k5k93}�`9t˗d*{{n99_DGE{:zĈQksSWׇMQ#9Gn:dI^K%Gy6[ѣG wf;L[AQl7 c7~noҾ񶶹Q;y-8ܬLڻiܓ6׫Yskt)Mٮ6>`= Ұc=QG3�=LfZ PGqǂR#_MK{5wǷܰx+Ȇ%<1YQZ4Lj8Ie!iUڳg._>>u@ߡ7] }CQ[?o  B?ԋ~ӧ-dr$ y-zIEf-}֌|?(j{)F/w>_ZR0ݨ0UqLx.ڈ�>VӞ-2K2M9YS| 6Jfj%5x%a15=Wׂi)AW\<sW�SݛՅ7.I\nfIޫ-}Zx9=9F׿͗1/-#I3m۸Жu�ϿrLɞ5Ug>1gm~cW^=Tly}?dGG]3WhHْ>*yu曱䪄KSu;yQ-i~M.2Eeb{k2÷ZMeowʞp C4*˟>ߞUMdl&$7kk чIsU-B<v'=ij`se}Ǖ-jyxf9#)7yJY{XUVmV]( u}|nOl|Ip*Mmr_+lc 茘iO;05h{`W|@l+=06QQDqRPpL嗇VT|g{o#cD+ZmíC|*Rl\hv6�|p<cí23Mmc%x 5>&._Ln)Cbϖ7Qt,˨![E|nRmt'{/GM'>س%W2∕f)T܏YSsÕ%eY3)XY3]uWgtɠcW7de\+y %W|VJYU=UǸ;Δ3ةb+vؤzb T-=>gbC*g`#~U{fJ+> {�S5WI1oI&2EYRTzN{c*t{p؉jMG7�=9s/Qf1Cn+WX~}pHMdFs>V9s2\z S'PP~dJꚄΫMwG:my׎Eyyyʄ&/!AȾv"&r+YzC+P?U25&. {=E7": Zmiі_5#KJ^GWUUԩ,[y 8 ;D bq}-/462b*g`#~U{+> {e1[ s="Cm {6~һncv6rL\%m,}-hO j:][ԔZzMu_Spc0h/^QAM._['sgMչ_Xh/){&+Mmdy޳|(eKGv~9$)ƞc߉jK=/k}$c;,Ǟj}ba3*K5{&7fd7s왮Sݍcls˒}KShmsyp/i{^(6;e=-Тrاm6on:<xYmx>TQ|7az곸x�w3U_]zwlOxU{Vlc&מ gpw}A=cƼJyϞ(SZB fMr3y`gnhj\5aBniWKK~NmԒ5u4 ajvskkz/ႽW5ֽ(p홱R'ċ О z\4iw$,B8 -KOyd##崣g {gum9Sn b޳Yy07p9*=lTäi{>* ?ԩ¤gjM)RG \h;e�>,{�=h'q9s#?K._ßj~|7xٯܣaarP(crjeϭ-D0ސسJU>:.=7T^簸M ED{f2['trLy ~ k {g6ެ.ܷq9D 71EۢyWTW03ڞ*,X8 |6ڪtx,�{�<Tg\ʩz}@[ (\)r?&zM2�g�`C̫N|c`̡&\{д,<{'?K!@=�{yм=KI$P~﯍Z!@=I{PC4�3�3j&=�{=�{=C Dg�`Cn��t���@Y {g���Ё=#g����3����` ���a���=Þ3����{=#g����ٳ#&]GG{SS|.ѡyeڎƻЎ_^ a0*>뎦=#Tw۞M(ִjʢ-4x/蓃s)RMtuKӯ#KwCcRm���=="P& Jh[n_Le͝}=:ĒȕuWo;{ ���߻=j]w{S/ïvu(emy:M{ΩٳwݬVEygq|gnicGWgkCRy?}>-ud=ߋޖYHݡ*}WL)^NM\!ώJq֪sN>~3^V;t*EΡsJY6SaIsIԔDag����<d,,'o //ߝ=Ǩ#bk]W#g^JW۟Zp<X)O8issMJ_rvus~jUEs̓AbHJ:{=Vh;5_q}hZ=[VʲAfEKͽcab c­}@��� k9}gR* /yĞڵ-tR;g=X39[yj4Ə Hl{iώ3!SDŏמEfvw6ڟ]YSEt̳÷ Ȟa ���?5YYgŹU!ttZ=GL/hPƶ.;?FBH|3=@W{A CigC;^Njei-3c=���硞Z{^Q=ˤvDxP_[|Xk=ScAsDc53&z+ŽRբj#xz~t̔q[ƞ���0gj͍H@tKz K(ܒoO6dBPٳjג2]l.ֽdwU7W۶_Z wٶg-eJ7mYek daĊ_tטܰceLM{ƦKoTpá6왹Zl*74<8޻=���| 7{y9@iDsj[w_H(ͼu~@}?qU cp/=_uJZٞ9KY Z]Nqb; 5G7ά}=G),(~Q<l=66=s)MOIyMujJXs3��'pg{���`ϰg ���a>222���{=#gx@��a+��g3{'3�� {F `Go9}-/rI!Qy5v?G?}O5w)8/6r/3`-��} =7و/{ 9_y;Yzy?OTV]ɟo5=ͬXM 럲=W>\Vz"5􋯦mg�� {gbN#?̮&- O6jZYs=ͰoG  <[š3_'*5t=bĨ5~9dVS6XØ1c[M{ Oq]æOvԨ#_7&͝8r%ǒ#G:`s[f/7=~aiϓ⠢VFmO�a�Y;5. FEoTg쳳UʞvYRެ)ƞc3-@FR{(CgWHQjDM( mE_Þ=;_l{a=?�g3�g[\ w F:]䯾nh|<3&'앪:giϚ3Yf#F_vڳ%}'/NיܡΜfU ysc͕Hk"O;~a=?�g3�g[F<hy4w*NǾ3Be,\و![=g*=~ |7 ~,́C|{lN36dڴBޗmt { �=Þ=۲gu/ŨiW^$&Wf_!`a߾熊#G]ys2\zJ+%I GF|4gƞ=&́[nėͭ6:Fn9w̗TvUf evO�� �ٶ=αsݷsFWrg}Tد==k~-jg-=XZo\1CS]|הٳ&K]UfGڴ>rSٟyڞ[Վ#?wuOx[9;Mn?��jjUձR'Dm>RRSeEUj%6FGH6' Zw U- woi6 V:# ;Mm++[fU5<S$.S:Z {=]5MzNƲlس"e0̆C%;5zw>;8{&]'wtܽ"bT\=Q ] �=nw"sOq}ò[6]9\skn?�՞EJeryYn{O+kj 2n vO_}NY["=kN\SrJ=ޣaϰO�=��N{V9Q/ʳwy>>(6=�C]@](Ğcӯ^p}GIז=&D^v2;CR@ px,hѡ6K Y:ͪ=W]rWnX) ES/-DxEԛR+$mzXjiJ3`d:=HE|RY5PIr*nT>+с<=�nʪnnnw+=/3{^+ ;esԔ'<RڰgڌjUՅg{ B/iSR>)6#=cϾw[yhw$h/*u}́^.NYwx7ﱴgKkƫd>{퐻l8Qd(AWW};CM��`ϵDss̃*e1yy{"Dk0E<I<rt|7"ߣ=ǤPUEpʒYl~y[l+fS!R3+PqE X|-Kb%J#[@ o'- dB6٤m;VʷgrDry c=� ��gƞo_&Yemnlos}ǞY3=_nr\AE"I"W2r\ybsر''eUc>DZ{H% RcW/ '"Iy 9 $$Z�3���`Ǟ*>xy꤄"U r=הgǞQcϯSUV<'^B[jA|⇊ZJ TGo ֤c0Y\?ʞcl~cϰg3���0ٴ8` E\y͍Bߘgu&[{_ ˪TjUyqվAV&}ZVm˷ S[~3qIO[/N<+k{ $28Es{HܙzS/^Osb{j6כ6Vqfh)2C\ߞ//屧:i{���`Ǟժ[=\._,HihVU&"5=D|6+\u_ڋ*P[,D$ŲqǩqCEBH$ d̝ \vўMR~a{=ޫZUMMQ2iOI,ՙ\wm4I΋\dيP_nq!)2)s���ɃU5~|*4ڱg���<<OZ+mF;�3����{=H$Hg#� ���a�|\RXv ��� �Y_]|Z-���`ϰg�`V {bb⺅+ š脊5,���{=�{MMMͱc"##4G,,..>|yLY ���3.!�os\[[0nܸd"Ѕ }C r6O.pcyso ?qĹR=<x]?3-{@{KKōEr= ⁍FWt+-{O臤Zkܣm�=�>,{ܹsG|_bbbIܼE{=o^ܳ~[³%]]]UGq̦!h3�g�gwɓ_5yRMW ,/񈍹c-BW{Ց+L?pӱq2/JL=\](K|@v>8\llObqy6, 8<UO}*e8,wYqv Lթm\$!2a��=S<f̘Tg8늦Ւ3':ǧcIP%Mvs7[ &E\8dO<]vIY*}QbjC. OCTu2x*%<|GmЩ Wİg�`�Şiu><Q'NP\XX8$=7aΞ,Dƞ9w ܬ^N{i؂ΞT#=QQۭ<";d_{n,^zڟ]YSE]=>=�{�|R/RgmgX,.kBNv,Kesq>D 9vڳ:+ d":a@L{֩ cKl`"ԉ={� �xԤ&hu;v,Q炂!Tў"H[0<iF6(˟1~{iB=Vw$>+HklLo>\ 'mφֳV{ y<4fG"4{<)=ݕig[2/;1" Ue{"X aXsss[+ZRgKo*3[}%{~o5ε7=}س.E}NT.o…Rں ;ٶ^Ъ=!57:m%'[a=6Ȅ[RLA3�=&lVOyU<cQ^/|ǬسeE`Ҟ/_XO#: ; E[[AWJ-bz%ou*n_. ES=>{&?i5 ĞońIq^=@dϽ:!=!\w`h@L)0UVWd}<$bIԲ[a�|-svl*uYC-n᳘iI ʚ%!rʼnY*CZZ-ɸ@"-Z*^CԘ]:š-2,_DY=UeN<|h_ŋ޽KɝRWVWVV���{~ٚO>?myVH^fi{^Vdb/jO�<n#DᇚLy^h^Ȟ>u,*k`: ^@-ϟ7Y-%g,o=l$9XsέX>OTP(n\&��=?{7#\f'/o8wlц�}OjσX(" VZȞHLe*iy–7vl15Ha=/vK'T__1B���=c4͊=?qxVy1,NRA}]$(XaʙKBE\aX/?̰|o����cl9;{ő ʼnX*[uem t[AרWg4==Þ���P.YZ'g Aw ec{$k\PٳڮH6=[-9qAEy wb*US.Vذg4 ZFJnǼg3����{į y<GL\b35jo]["d2y! Ӓ@LٳT]FeLp-*|X$"GiѫT <=dذgզ8y1c|a ܀=���g �g���� {� ���a����==�{~[IaIZZy+C���� �Y_]|Z-���3�سnJBq(:bMr\���g3�;v,22Hsdw���d ��x\[[0nܸd"Ѕ }C r׏[.1n����Rs΍=~~~ُCХ7᜛מaϟ=��� �x\__{nZO<I%Y'[>²ƅȄBK+1޿Fs!fQDh !%%1㽓q2P(-3:׷���g�gJ{ZnjL(HJȆ$],iYX2-O: ^lw?ބdL׷���g�gZϟ?Oĉ:,{p ڞ鷘YtEmyx3����YR%$$U/^ #8tt|oo???!~PrfPWK=+{fv���=�h{njRiq:;sAAP=:Y(Di0`i,9NϚs+xV=[v���Y:5Z*G*T7߭p NezVETdmUFwz V畿}:}Dn&\3KtzUxiT![xb7sss[+Zrq:}]6׫p!ɞTg}sり}x3��'di"rv,}7T9z\Sz⾬1ˇҰ+Co:j)dڥuCbaDzT*UmUD8Ճ) {{oh?3kϗ/OƑ[kDssWuuu kЏԟc/Z&ƱguVbD,ϋɲ']õyb&Gi^ǃԞo���>{V9Q/ʳwy>J%V呁3Y>{[kI6>ތ '0`_@yl=LbtJٻpR$UzVIZn+kND-\}#[o¸/N]G|<ڮ+EZ Isb-:<$VǞεZѡ6K Y:Ͳxח̗\'ykR{ݳ~TDaKj!=UeN<|h_ŋ޽KɝN>őZ$g1���{geCw+=/3{ƗjumxVyu熆K!-FuIeWҍF[eX>>_ZC6^e%mT- %A[)U+nZvNR<Bƌy~ RWOWyg|?zjIz IQkJ2KEV\{kgCDQiXuQ:sέX>OTP(n\Oa���fϵČsÐ*e1yy̨O/_D6g/~[$b ] blr>dTd#W7+}3#YsXWeI,ĬʪG,4Ex犴WV=֘իqE=Jbzzw(&{%RT"rIOϋ]Sz6KlYeE=[͢i0؞;zhz%r]njjĘ���{ǞkR<D1sݨ|jGmo,;VRO2P̲k<^yzҰy2//O!<9 ˛+^oVc>DSwxQd;oռ:MIm"+_dyuhT-Ŷelgq:����a{6MP~=97L̘IL W hs.GDwE~k|i40Yn?Z%ժ�>˪W L#^N{{c왞\St46a*6I͕ҟ1^k6dϱg,cl~cϰg����kn+U/zP)K?K칰ĪBOS <}+eX)uԤ6דKP p}-woW^6[߳Νz<3UI&/^?8{&nR_t&P^g#ȼ/*ZZ*X%ǴY/wk6dG}Er_/x69 u\<Tq5i@uqvfq��� {>5C%bQ{&L^JN4MzVpE xɲ[Ysuq"9W~ 57E@iO 8|{e/_ Zr6e=_{yŽaTU "/Zr37e*G2wHvTr ,s-H–a 3����{o \S|����=ÞS$9״rMq )/yh�{���`ϰg{JBgj4 =���g3�ȞK K[Ax��=Þ=3{OVų��� � ~OLL\pB8PQQ&`9���`ϰg�`Ͻ9vXdd$Ȑ" <�� {%m?ҞkkkƍLpohzzzANWvL^#OK藹[,JElzu-{pOfW魵xo_m­-Q�~칮Rs΍=~~~ُ޵?)t X,nǐHE;Jqrυ)CKo='-!gKGyޚ.m{� �fwɓ_5yReƅȄBK+1ɞe^ (u`7u϶z_>>.'u]D�ß_ydD NDG1tݥF]ҕ!UQmyԛq2aTj5Sϩ7/4^ud /zDm>L9*w., i<&jIx/lՓ!2x^q7?rssKmjugI!2㭎=3k٫Ålۗ|ʍؘn��=S<f̘WgBARjhtLC<F,[UX3t.x4cy[[ä%An ̟\Y@F{VgPs),ޘ"fvJm3.]vP܉l uEejIs*= V{4P^( O~L}}$ٳ!*?u ;Ky۠S3b{� �x/L:8qR!`:V=fZVa_Pٶuyjj^@‹˾ѡ/}T߉Fֆjept]۸=')3<QH;^W9-l6P]eMNWTċ~fp[*XdL&s9&^NDv~=[VjQa��U*UBBB_u~PU8tt|oo???!Ǫ~-+y[LN`ÞyOcgs)T+]<wR=jrb߷s4'K_#g{X,b*{-3ͶשMI%K59x�q';d-TeE=�{�Ԥ&hu;v,Q炂Q6(1܍Ln{nrLcϑ".Ah,=# BGa7o/ ؔ+Ĥ9uݣogH4lڌ^_Hמg-=y:-6nmTl,+ӛ [מmTɞdg�> {&V{ y<4fG"\$sx~~0wy}4hoZ;]`l4iKōEr= P->sss[+Zrq:}]6׋ 0\egwCg(tUpe4Q ]-G¥ĽE2qLqzٮXGz=UsVSONþ=շ_7=}58{&]m d:ҍ{6rm[6tm 6$}FLxM�ߞs U6wtjwK'dv>s _!Yɟ'nZ.}Mi޵9=jMΞm4=' DfB z8rk0sndg{{{]]]ccBhkktR4jy̚K[Ǟe\[.D˨o֩2V [dʋ0<M[fL=s~7DΕ-AUݾ](dҞcə"BwyڳN}>0MAa*HyHĒeZt.SQYX</& = alr>gƞ}%ĞO r|9<Iv6> \<`~V;EL " KjMѮa胷(mFk5(W[R,](<Hn Ӄ0{5سSNqhKL, DpE룻ߑ=UeN<|h_ŋ޽KɝRWVWVVƳ|=a!�jϝϞ,6VH^Rk{䡋~:`@KN ( O~*UZQ->ovM@qȞgu= U%^g*k(BdJОfs5(Wfz1t˽Îa`|y#AYcsŧiΝ[|R<WPNJKsiiiKK ;;; >-vhq J9�g}=ez9Uz7\KO qjYƢqy,T\Ze_3$h0O i*w=  1ٳ,,y՚HQ7߿<_,9zgdJf5(rzwx>}01ٳڵkn?pc~_ѣG.rSSS}}^'ƌ.Q>I!<b&u#�vْhdUOc/rx6ګ[<N #udУq֖.b\ɞmda۬D*'YNmFW =3r���64wgy޳b?=OWܗ vo8}tk,Pz`xسWA,zqЫ5>;p}4kO9m$o3ڿyu|[$9U۹ U{fqWv`���=knwVtv 1a_N}Riioo+ ʃou0]= +]V}:G\`ۛ tz Hi6t4~fSWA,z1՚7=oqi{ՠ[.jh'u:2LOXaÞkg$ dmǼg����1|&~T <bMC~mTXb%Aۏ$u`YwGCe\6_&驒zׂ>횼pP(r^= ʤqL YbgjMtQ m'xGn2SN?یve\w,ڊP^se2xz.Ȱa6jզ8yz c����{o wK.{���`� `����aϰg3����{=sIaIZZy+C���� �Y_]|Z���3�س5nJBq(:bMr\���g3�;v,22Hsdw���d ��x\[[0nܸd"Ѕ }C rqZ{m .r8b|u ݭgwxBi̎Dz|1bO m �=�{칮Rs΍=~~~ُq{&LVQV.|@]K)NOaNm`27tm C 2oTl/>U�=\__{nZO<I%Y'[>tg<oHxڞƅȄBK+1g3mkjx<CfLBKalņEd"(hĕ*Z\(+PP"BC$!cHf9̜ssfpr,:{FJq;f*X9^: T&HnzTBީdT-OpNkGW]di/΄���?=7P3(,CMcr':m'{]Ҏ=_LH9spn[Ę_sAg\D[ad}51ۿƔNȊϞ Ю6���?=S|mW^%ylll/W[Rw(K gcGhrm7VޠV<0CW]6,xiz֌h7)#. SζY<SJl���yd2UWW<xZʞ':of$GG( <6ls5@0Q|o8ܱ<G2s{���{�eVIB<22[/6._N`~]Lr?'4*UR\)dvK;'X�A4djV y}7=3oFPOC�girEL$ 3&3I|.G$>Zu/>rőqfQ\<xf==RoχJec3_ƽ̦||!kb ]a;iH1z{މ=/--ݸZ\S<<<0RҞ֧\~9L贎a|ʞo*ZdiZʺc9 }]Vs,q\Ҫ z鐿Nl.|Mʦ57h-sfnU)7q�swU8l=$|FO˯x?;~gShLaˇ)"~92'NuJI){{޷se&Psܽ,N}e `1evy'|N *ѭۇyhh} p8Z۽vcoI*%#[}NS{5sɥÚªƞMIR m5<-0L,Wo;nZYYU ʦ%i]+8~l]ж��#٤N;Ns1lUFaiwEA^K`i?= %zkء*ڱ<OyYq1ɹOdJȻn֍J17U111v{m͹c#qҬ⚷ &򔶺8X$I"oJ"Lmu'7N>;%Y|YRL$# T&YZj%GL5;Y&őY~}ʿy7ՔdBHT&+ {6ѭtjii6ӧh& = ȟfY!g1����سawvOg s3lp8go?' %Om@LUbu}?Kqq{#?&u>J:ў#Rj%^zŞǞ&I+~қƙ[㣾zȆ/ae+/QbֲxYzMw$K=jZ]{{O-,))pfG% n^O$cWgQ]c>{޶=777$ ZQ/4OMMl6t\.9����_gz/H}&ڽ;'=*웜3fZN' $C�̯5i2GkϳcEf|9bυܹ|qZnp W4k2m\~'f+W+i]=w˻t1?:{=g_U|I5K^;_/o=毟j=ill龋npVh4:Nd���سiamx뛌<5S 9C+ebg 3( q6=ՑnY7ZcŃ"7f$a|QRVƞӝ7|7L6_X B/;lSf %&{Շ/Jyϟ?u����ޛl6 fUQ3qÝ=yg=o9y;``Jq<Ԕr oÞa+M({../vLǕ<;,B+8\ԋD8f&황sksEwߞO3Sc\ƞ���fU p%R;av2*i4{lP g憹T/i1Gk&Ik מJ8lܹʞcřwzNTޜ]W|O}cEpx '} C<61IFJXO/\~$9bA*Eħgpofg͕UF扁0����%丱"7B ߗ58͆5QP %e{639V8ٳ?䣜$uf/Ŕ={ޠKbqj>FD",26釚VXRSsj_37B Ξ؄ﲿϫh*{f QjRL熪חPÚ`����og�����������02.2``����� �`{ž'&C�����33�=3DOOOcythY ���==�3 ~ojj*N?jrgff 9,����9˗/gff"iLI1 zL����{B ]�;ۿ=#KM;tF_b9P*[|n;N8Ul+:$WYr,lxjmš(>U'.9 <~ż,T"ON뛪RP(8BoF³rHL dlnxgP(RIV&[6maJK$ʌ.I{ 12>##P3{sq.-=�'yaaT}ݻwOP455 S4ksȞ 7[l?-`[!ڳu麶R= Wمe}nρZ;z{[Bdila8-?ICoˡ j<RZ;$Mߎ=3B6%:Laee )*dknq-vc0uY|-=+x˛kAtK4;�3��=ƳgR|5; B 'Lέs:ʣ"TYߩ#I\PZ1t2^c&+OܚVO][W+E&nSb0>`jRN~VFjbl1XcRiaRB]}GSqjqic2I(T HKĸ,:}F( UpMc9n4K%`)mBnlCE߳FhyS MmNƔlʺ1 X.xTBީT-O Շh{=T^l7h%m:SLC,]jǣЕpgjRA=Tp$GG2Q!^iLDZC#�g��=7P3 qiɲk;^; B/_햇8nZEk67`<$UU605H*a֘-,"mKk>6iβ^y I+J.Kk yTW38QE֖ŞlOrZi&S3Ean+3-R.4wQ.Foq tbL[%q}iQ[v;,-q X.0\+lkchyh{=?sVV ?k%S:mL,}9 g:7D{faű]sEr9J*45~SzXWp.>ḧ E:oa5+�{�`3ηoF|URv%( ů3HVN*ի> :zl67G,4Ĝz.x;^DCfA⸤QZaBno M x)[Xi ERmmYyd*7lmW<Cߕ=/<yzӪ󳮬_lǨCM>wAٮxƕ}4,s2d6\GT2?Mt=kF[Фۀ^qX(ƛ5O/KS&A i{fzsCg[q,v1%^ۻezW(qL)hJlj4 m+�{�`سdV /I :oN1>F[♹O'{o:y#7#9::FP<AZ*o7?ux[V'ڲTn@ | 噎_CMM/ni{rC9ǧfP|]P_8 c\g]zdux<Υ4Xtr 9.@> =NK@q2\=th%S:mL, SW\W撶ˏ %=+xsŒߣ݇Axp��bVIB<22Ab{b~omq2ō5[Os4hƞs{|c{{j㉻' P2,{^ltlߋ2ɖRn*[L?qrj8,{6Hr#\l5+:>ʒU#L !ZE/9.Mnwz7Y{ = E*]_m1ӆtpͲi왡Y e왩╉,Ónƕr侠y֞7_�سaA_ A:ȗ>{yd]' b}aZ3rZۈ Myiir_Rw0C#K֐&ۘx\l(&QXqD=GOZ WuPVFi}G;ci?t{v. `C/mJ{캩who1g:U+&J[<' ñM&BRCSA&KjWօa]g?\8hrieͧBQd7͒?ᱧ`+ϖ^麑//�.%:˵2_{/8c,x֬& i7k)6^L7Y ,knqL{Og }~\+oJc:-Xq|@켘&_{+�{{.;۫Co#X<ilc㵫=. ذ[G/{wJcƵJtk!uZ_K%:EVv?=M/ Ԋuz#-6Y4i X*-Wܫں98qUz57^I02{9wKeqqɇ59Uw{ֵes8h?bmۓ܀07%EKQ&%Ӷ<{K2U)ٚs+؟l,ҤE"+N<кxXƓG%Q2dɡMd>?͎0o; 1K<1r ݬ*EM#BpӔt=35߷�zG<8-%ޘ֛̐,F"1unşWX�y3>~q8Yh xsW~v,K%B%v2F f1\|sH:z,ҘڟW|W:HЖ8\T)؀rX,ӆCLM’UK{6ѭtjii6ӧh& = ȟfY!g1����3,(/qE֞eQp<< Xv#e`w U[Sy s]'|?bϡ,E S1U2ܝŲ<Kl5=3Uc%ܜ`0jGP<55eЍr@����Ξ^܇X%[M( ˞MML1-Dwe@u OhĒO\ r1y"JյXb,e}1v{F(KVMOcccO]t#]ZFt"cnV(Y���{cϋ<A,:L+liϴ__e$eh\_niGU{Z׉%p9Źڇ6pU*PNVbYtŶgj0g�����{;{fX܇Azd|y߶+,{2I6iqӀYVa'\{eq.v o왱_KZcVzXT{����ϺF>$Qfa{fZƈi&<=eXbm)$l!Ę϶9|gedR7B+ݿgZ_oagjd3����=iALk1-Ĕ2?m}] ItqM35NLl۞?էqt+Tp홥n,cR׼<y%=T#%���� �쉻������{����gx�3����==͞'&C�����{{�gfui,82���� �`48V˭)T@����``��˗3334gOLLs=&w����/d��ܞz}uuۑ@Ǧ g*ݴ,:n;mX!hטkn[Qfw1/K-pG2۪'\.:3hqUa s>vh{[gFb&?pi[) tp9XDli8mA4\$IcJ/ܧ{% jmš(>U'.9 5=>eCi}Su4C* E#my2kB9g��@sss}ݻP(^g`G[͹#{&,/-ŞҒN ή֬�bJUuofӱhHV~Dib+uKk平Io(S5 ҊjrL<D.\ԞT]Y}e ĵ!ɮ 7uvX!OSlJ) MfqZ[~׳<PHkB9g��=ƳgR|5;|!|RɹUsNWGCyT$*;u1I"^J 7̮Uq är[kspUz Q'^*a|fINդc2U)0!:ä] 5i)*殏7!A[[6 =7SӟY*�Mm{UGmȓKbqxߤb)'^Up:S2'W$؂G[֓7eqSo_-M SzM8e=" 1"wMC|q&ei7&OS M-t>e}8dǦ6{MW&0ܕ x|<JP|mPa/~�ػL7|CvΤǍ+Z&Nx$ݫK\|MZS[w۸iu]2l7ojx.ImXAv05H *a֘-,"a(]X!@#OtB͓=wqJ:oZnUĕ ڲ闿, ˬlvX#|15"}Mmc靳2o~jiL۪L=,QqEܙe5=޵2Bm쮎5:gl%(h \|И/puNy*=y�j=c1 r*5Bs4%q}2t>Y}8J-l`wҸg,D'ػ&cj�ػL۷:_zT籱]y!)~m&iDrWQ|^5EO;f<G# D%<vY*8J/2%UҪr{xKgR4RmmYy[~p1ʢ]{QǙ|c\+oP%W<oė?Yo3m2Ⱥ9mY;Oe'Ì,\P°@{<Qcx֌h7,Sk5:WS>.[{Z ͣ8](my*l Oxo0_+Ol\Yj AYJfvWːps9iRɴStM(0=�Gd2UWWn=gԯ 1YLqT1SkJ ]ci%QyAF ;y#7#9::FP<AIv(L<oL-=oٞ~M*M<_u#P\|!ճN3m2?K.?JkyX)d/.xˀl(=9tn >|vZ }9j\$)uw_'W -ؤȍbEỠ$ 1Jf@˕x֥GV\zzMEcz3S؏�3��{˞V3o=@W_}yddda^\/L7BgiΣo3WhX{;zVd<no왪r?'4/ReX4*VXZmm$,{h[x/سɂ@pxxt}qjֶ={nU KORO&GƗrN%M՞e+D/(!=FC &?n;"P4dj5�L!=3_ɴQ>Vo/ԺVGKN' e,]1Lb?`M+re"@$o1/*rIZS=9d䧩8Fo"w<ai[6c6!mD͓O꾘ZmYkq1FL6Ó&_>23s2R㱇VD~祥Wˑ+~JwyqPl!Y ֐&ۘ̚w`{F5ʟ/c?9xHzk5"&NS.?<iK۳si(40ohE֖MµgrirDޘL&KjW-a]j{۰>i4J.өE5o(}:m2A=1,:r(~ROZ 86= E$:˵2_BS+1Ew4b)pt^LFZ66GRoN".Xl7]aJ Y[\8hriemJ҃gu)ÁS0^g˨+]7r;qi|2cbg{JǕ 7t'UItޕiɴ^ՄS9ۅ 3,Ŏ%w/S-4>GS^n!ٴ`rvYa{܏ Fr9ksvݞėm\H{wn\DoR硡7p8Zl7,P+ه<ghӤ%bWetʝ{U[w<'01J˶8 &Rf}(`'kr 1kp~9'"hkK&a3[J|^WܰO`ԓO[la * tVYq4;Zq8\\Uv65bzRLφx0OxVnV0@_ٴKmj%(C-b$"SVix~w,Z*B/ؔ},ҤE(+N<кN+ԧW2C¬Dyct`3fPaL)LJ!x4~4Wc!t`NfޔOa  '7)K'Y&}:.C˒be"Phh'a*8hfp+V8!7^ҋZj%GL/kԸH$D>nW y7͓ۺBIކO<9z(N($i~~R!n;q?R981ߜ;v8һhXVq 2%[_+2A-%hPMIL,DA(Շ,z"H(<P_e._ST[ZY{6ѭtjii6ӧhz@?fNC b����/g+LYwejdO]/?vMŗ@Sd^sr8uVԺoGy;(kҏHxΙ2Ȥ}#A,+zvls\zJWNHK3DRZ.hĉl:)yY JoϴŅ1\/g^IĊ&qPHyS bfa >W~軆S*YT[@טWڇ6;ZXaf mpfG%.{f-m=777$ ZQ/4OMMl6t\.����g˃19aޝ֓[$%ב g ai,Qd_F|Tto)_<HKrpTҹ^o1.ϤCIr{v/NfSpSolV\>HoϴŅ,*Km˸EOr8If_p"rU7˴={>sw7D,]C[~. 7m6.?W3̎dϴe՞?=w tjFӉZgZ���=M% qz}\E7;S a\Alv ?֛H^*;jH+yLyTTLLL$Ƌ=rE8hn667Ȟn**/]7z/J܂B7yxq&u<JgjLQꀶvaQWr8?bbeZ<\0ppt m)V!wK7f$a|QRV0ƞikT3����=yމ=U } s/.W>'xݿDuR>/ x99NPA):7W"87\TdbWSXXo jƿ2-"gºe;lU yW?B5A ;K^^ >khKY PFԆ+xvT[Z=����N knM"^Əfp볹¸b%=Rj¶Ekz/\~$Ϟ? ^=$I<GOͻk>"{s&J\ubcR"5 \j5LUׁvA;PysE;X\+X|:ARysbv}ۧ>ϞknLc4t C)xybp8} {?DQ<|0=3זV`�����+r#D|P}Y{祩P2/?r:\x۾̍w y|q:u@kmqllBwU4=!s8Xm;A?S}X$p+8䣜$uf/ştD+1ٷ:H4aT&t,ΧER"txdl5aٳo3G$=#54DL]Tqn8{} LTOA{0mSKcXrȽ뛹(E&Ky>s{����4BٽVߋc~/����<Z$#y>]x~eLxנ``�����W"V=RΪHDcҘ fJgg�����{�`dwwwQBz����{{�gfui,82<���gg��{MMMGZm]nL2����33�=2??L$͙)?A x���`_Ȟ `'wg^_]]}v$ccc鱩===#{ȱK,Js˟/9UlmPLU] $[ʭ3G#1�j |f]RK\,Ķ yd~.1;"ܶH7UG3"P$M?R9hqu:S5-N]tƗ-qP|ڜ肫PG s>v(60K%%e#;~t)m\0``�O煅Rw=B4O`G[͹#",-{f@A1UgCx|ni͵<w6I\5ۚpc)5;'wCҒNשdila8-?I87FX4L]DE$*p\lύu4肣/YߓF4j0aꣁ"EBaDD{.Ll �{{=ƳgR|5;'J!O[5tu4GKE"SG$=0ZpcZe0L*W5<kspUzޤMxU[~B,gTMHM8+Sr Q3M=B]uh 9ވ37ͻh`ѱCHFP` |aW+܋y6Wn4K%`)m= yrX,;=TG%zH4U(\[>_sX Sv `tE LoRyQSb)ư'L`jYɄ GG2Qpo*S[<p1fKG]jǣ-vh1\ ) )ڈ/]��=7P3%W<N%LXIW|Ol<D1nZ]ڌoX\TUq۰aj|qyNg٢"ҴP4k-5DgY/<ك⤕֞eiuVo%_H<+m9 0nωW, ˬlvX|15"}Mmc(\+H;lk11ۿƒ=u0uP_r�jF8Ҫ'zQ[v;,-q NgbH.GWY⹠3OS[7~Y+eꣾhu{DL. Seh3a`O3ηoF|URv%()~m&iDrWQ|޷=;x1QJ8a *12WQzᐙqIգø^5Yg-M2 -+qiSmpS-rvwe{v,>F1|"\+oPW<Sߡ+iǴo$ϳfDY,s  P&L9f]?LU(mn͚'Wfr;掫eHJ}h3TcŜ6ŬyqLdU+K-1sLQlQ J^ l֞Y"G\ )0eBі.� �{מM&Suuu:VPs}xMWH1yhv5 /4}r<ܫ(lʼn1 B.) 3UyOD{\-32(=oY ,5L6<_~8>p33K>CA&(7. C_y e u+WH\|!ճNw+Kǹ.B (tjD#7fcXQwK5؋[ b) =:> 瀈Xt\ )fі.� �{ԞV3o=@W_}yddd Ş3fhxeϾ*[OsƞBPbnodȳ"q}cTM֖y<q|;*òVPHa` ff.':4˗Sa~]nidfV y}y,0=|\!,j0i-^EƩYڦZE/9C< IqWL*mT!Vcsq<H/cʟ%[z=Dҏƞ. Xh+C SD[^�33�Q{^ZZq_yxx Şed37zY[˂$J+6, 4I#깮 ֈ8O(xu, nΥLgJp)+:OXE򏼟]sڻ|>Q=ҴƕuqX& jrפPkn0C.өE5w epplsmc*3K<kVۆ\ Yᱧ`+ϖѶ{FOdWL3U d W?"~.KW42FXGf3],1]~LK?|aPL#btgg�|N zܸVn>CCKCDñjWWWI1{^ GZm=?ipqUFA[oWus"q OK(lK`"eF˅ \*K>/[س-D1osSR?!? 0EKxV)snbӚޒLUJF]xHCAʕ'P NwgfU DMV23yua5º`:(wʢ"}s1RLN,JD! XBюE6 8hvpmrք1sp3jXW8X}D0KDL?nMsa0Tګ)-/��=gf4W---զ<}m;d2l6t:$;����33�{9/'`04j:yjjfr���_o{j5N3tDV(Y���{{=����33�=����O�n7�����{������u�`����� �`����� �`����� �`drl(!=k����gg��{fVщƂ/,//C����``��LߛӏhںꙙBe���� �`ρ_|933IsfJď9gcz����{{�M#KM+}+?BvnM}b  N뛪RP(8!<+L&әX $U~ ËT/�==�s,,,ܼo߾{)v{W;zm=n;)Y[lqz<Nkqc.JҚkyl4==D{N5F'_q8w �gg��{xYJ]~ѓbA!w,{|'?+#51p;f*X9^wz~輕pVZ*`ЁTÄxLS8ۑ+/SY'/l7n;/` uþ30f] 5i)*)s;-?U!BK7jB'J!O[5tu4GKE"ST/g"S?6e%mJ0!J;vY .%}s,RƉMm{UoSaもa3<���CRoRWUU\I3&|pmXԈ3En[Ę_3?8.,"_FZ,iAtqrݷ9)o#[nHKXvp'Jb0fl:2oZ 17\^0fDu?k̦BcgYBq\Rdى{u˗/LR~&^T6KKi\Bų\+쳭m쮎5�.2=4V ǃMyXϒD�� �`!۷:_zT籱] Yxc1#4LڵV<yXAkGqIգuI;f<+ÓPS` /PĔIM0n!WxV(\eo#4{.~b4"Y9UD\_.vW8Ñ&LpZ!-7tx͈v875WtQ:]ɩυS�� T]]Σ2sYs5@7yؙ9uVDPHD܌t\S$mlَ\ꚷjB<_K S&L3<QSt!F=SԹ;&{b ((RXy%\g]zdux<Υ4XtQ=4 nh <���ZH�_}R瑑] jYڹ<0yrpۤ<N~O=i O*UR"( Kgzɱej,X,K&۰s={Vd<.ZOn vb_&R^+Q{ ­N7koofJ8\qbyϯO$; �gg��{giir_R]^nDm4qe}a] g֧\~-Cu, ۙҔR v8Rփ2qZJ}Y2نM]<iq~$\=5Th2nd;/gS0^g J׍0~ۏ3-ׯl ]PKTu6ke&eӚsLwN{7'JipLBUE?<���wt޸Vn>CCCt:EVbۮk<y$ZaXL=Y:īT)3_.KޓKeqqɇ59UwǞd/p>8^g(EDI{&۳s;@HPg>lGc_,τmgaV"&@` G;F7ƒ_<'+7 d QD~eӒzϴ[J|^A3=uŰ�==nl6M[zR]mjKKӧO6M&z@?fNCcȄǮ~6vE>=m��=�}칹9/'`04j:fC7"ľC{y\EOhk/؍crQ/���3��_Ԟ466tE78ej4N'2$3<ݦ \PEEHqb>V(Y Tݍ����Nw����``�������g�����{9�37������`����� ��3����=������m<96]5����33�=3DOOOcythw����gg��{MMMGZm]nL2z����{{�@/_93%}bbǜ31���==�&z}uuۑ@Ǧ UmrF_[TX;ej;sb^Z*b'!<+L&v7��gg��{@sss}ݻP(^Nx|1{h9LmZ;z{[Xy-&Iw7��gg��{f4Ϟ=KkOT4zRHM8܎ن<D,Gh:o>,5؃5t2U)0!:C&vTq <M|e B@˒Iw/dBīTX -I{`^J +g(<arn՜P-NK;6 S3՜gtZ{7g^2۳G%zH,M ��==�vo7RJ_UUsu&mLX`S#RGMmc,z(T i}Ky)I9<alq#.cW a(RLIʼ.Kke.py1 Şe rI-e'vv%._0=M9Q;wŞ]+쳭m쮎J �==�6o7Jo߾ի:JP c1#4LڵV<yXAqb-ZcZ<sc8.z~n_7inj}es?qxjʞ2 -� %Rr7"s/xsʩ"_-vvn@g9{ɸs_,>C;mw5#حtx��33�=ov3L<::[A!;G<W~8>pQgI:[NtHA'<A2ݦJ֘ȕy F)Tn=3e4Sn~%1Ebn3U/INcbRX(y.K`��gg�;ٳjF(uꫯ:bPLh=@iΓۄ&q7=-xIyP>tFTР]:л>J=/Scϯ6ƞY2ن=[noٳ"q2|r8^s{n@g9ʧff.':6pw+��gg��{v[ZZq_yxxۼQ,My`\YtXpyGu;`mg)E~iK~qv4'ݘL#Ek=(u7%msœGs]Cv,) i3]78KQ* |&u"̊[f jrפlZCcW��{{�n{wJܸVn>CCC:t:EVvwɞ?ƓG%ԓONjKUH02j>T|X_Xuy/GYJ^g(EDI{&ۛbn'^B^ GZ3m258Sͩ "etn3,<yԼ"#0lͪ&"+oޕt���9lFvԖOmtL& fNsǾe ])lX‹|\V���{{=777$ ZQ/4OMMl6t\.Bu;eX)xֻ8V( ��� �`ۼ466tE78ej4N'2濝8ɓZmZUTT*G(.Sku,>/PL5{���{�ۿ����gg��{����x=�3n����� �p=����3��`����� s��{����gg��{����gg��{ɱ<����YG'zzz Σ{ F ����{{�g:T~DV*sw����gg��{d~~˙H3S'&&~9;����33�=oBWWW8p XzljOO_&gX=[ЉHBgە Js N뛪RP(8w1/K-p%ܶHe\r?E* S��9THunnn޷o߽{ ESS poi6 vڜfy{q}a㴶'h5֞ҒN݆=ߚt#/8;Ux�33�=oh<{,׮]C?QIà=aq yrX,;=a?t?|8+-QYk@ceRaB<JuLŕ⬓xh7ˌ 0:aJh3 (U~&;-EP~pІ6p4 rX1#t(8Xvm]yaJϛٽ:]^CW˓)6]w_M By{Ϋ{.gάfλ֬uΜBB("_ "RjXLV((,kn$l6DBQ|??bޛmTD vz^U1fg}[A[.zޔ|_U&ND�L=>… >,z>p Xxݑ\QђϖeiW/S< QKv{א_iT2)Rq5[>wZ32Z5nCfM$L-{4JWflIP{7fyΆkI/AIV+iIY}bگYv廲>|iߊUoL%}h*ա߿Tu_rTY{]ZPVZݜ�z) D:={VN禦i)Ql\"#q? W{ G_4:C߹qϊ5Gǥ6n#Z^es; 16pI SOcՖspgCme*Bp}nj֪ԙePe>W aaaaa5{+ZWf(D=;W_[:g]8 3 Pϓ1G΍ӵSؾwXXXD(*5|‘#&"cJG_KMk㗉:wkt$QLpm=ǃj%c*3x ӔZ3zzԽnKE T*UlIܝQ{ir*",2U[fqnkٹݡ˜zvߎUmr&Iڨ;7GDP3@=Ob1h;tnhhƝzE阗m/K>ZܳgFh K X"]qZk*^iu`[V NCqc9`m# 枏utL_78gmf^'7OF[!S"Cgn_tEq6=%$^DP3@=Oj?!Zӹ~?ُU'3.^yMe>נ.?tϳ=-eዖ7<-MEyf}?|{Dm?W)Vⶴ?xXeVpgCoK:Z8;̝ҿOг_I;)[!H>{EJ?\ $,OZ!x<B~8iQϽطg8eFIÁoV' }qdND�L=4 9|wH纺G'].NjC4ٙRS}VUc}B2*qӞ:+nkmOIu8'c錣jϦ(eLº;GwNLSM֚xJZV3~gCmО<D%*icژܐsSOY&eG%VFU?.n엟%K|W~UQ_ : {7'۴u_SNyaJ~�P3@=e] [֓_tL<#h4d=v, Tw;M^�+W;RV,jJ.fz%I}z_g,͕ڡihK�P3JoMfffeE"-`pݢ}zVTʸ5`;o.Vc'?yw^Gq2*u3w@Bmqz �g�zJ=3 ��� ���gz�z��zg��ggr6VTT^C��gCscKeeef7b/>00w�@=S�<1޳lܩjOؕw�@=S�<VOOϙ3g6o,y---rD&��g{HtSS+++jcr$NgK;mRG;dfyscH~OG>^PƦ}eI_2}R/m[e;4'vl٠W.lz}4:gct:9,Xh߮bWk miyUunP<ixZ^{f$NXcwD_~h|k%[+qg_z *ΝM3WӶlZzysu>#.&::zz>-)m۶-ɫ6;CHҤ#Y]ũ3YZPmINýO6P&lH+w$"&uِb2swmߚ.)aCzuk]q2<L\شnΆږϩ=R*UIw:}sh?Az?@:)nnf"_<cm;HnKG}ʿ5֥/<euSsVN/�Smy…~t+MXwN_Hhgr+V)QKvI4:jK;́X4V:j ğ[P6.!yPSnS\zp%96eyp~clr~3<fgCm5꤃vV.]9gƚч.Lr<'<Pla ^{({6oM5`t[NXeo63@=S�2-.\|Y9eD3ɏ]"#q? W{e$O|DEc0XsQ~\l}hEx+SP+Sϟ6O-SΆږ|UeԬU3˴jj>4.=۫g'%߮u_X<~g_Dx/6ϯ.;ueZ*7D/}zh<ztnll"FQTt?1CU::j[JΧnZL,HV~yV[85&Іgk9P+S{<EԚףn&p[ ,R&OxVbL~jj0H٠Mp2{GLPsg_dY,&~~0y ӸSϔ(\;,m/K>ZܳgFh K X"]qZk*^iu`^V{=W =OCqc9`m# 枏utL_7&9T;Nqs3B%E*lwY,ܮr*N^{o^P3@=pZfV~et{k ˢW^|*.5(%26}nKY nKSrѨzlYn"b|Ch=K+q[<J^LTm+N%[^}gC}"3w.OHhC$;͐o7$}iz==܌K?pC~l6\N[ӝEM/+I^Y$C<xܚjr9<,߾8rݱN5�L= 7Ž"2Ο;$] ҹ.I˥Z|Tσ>gg;cJet\O_YU 1ʨM{㣶+Vݶ=%mᜌsρG% >WٔIXWblZVTjlmړR1P%mLqnwb|)KI Tkfx8=V8Pudwdɟʏ [|_uٮm?Y~$Iۓz??zn&cY?Z'tRYYx,Fh'W)z%?~X;#?'0tT ɹf�g`svvUz7˵Zhnkklb{^IŽ_~\(iW\Tj�g_pdffVV.rb -yEJRƭ|tZ8a|˽ :VQj3�P�~z�z��3@=3��P��P\��zg��g�gz~AMW'5��zRYY˶ s��g'"{VV֞;ZԣS��g9s͛E4o^S��L=3z{{=njjڸ|}eeeCm %ʃi9>ԑǻgYмա9cuDrgcLr'E.z-I޸Pq@=xY霝`Fuvˬ6d=K>{-:zV<Z^+ݖKYyzԳ`ꫯ|9ش8S8Y_.B|Ӿ:9L_eˋͮ')IG* ړq(RqG7:j}ԩ'(ݵ}k򺤄 }3ky&xxzWՖٔ\z->R'* 泪 +7:}pG\LttN׏)&O M?}fuRD,|L >|%Y6fYz>pw6vmjjLThר^۽VTƚч.W| L>8169W9vUFwunI.|Q\zkTqM$9odnZ;4|buGr.zYڕ w /SꈫC@n^|Wvs/[ �o_tpHg4-;5wՙ&|=+m\aaYRgiG?iY~0sc{TlFpUK_Jy񚔛o V~p__q$aJ_|\첔FĤʏ}bkJ� 7gx8];5uKqKMk%$$E+?cW%[M>3(;My5ZV\Xqt?wDdtW0Jjw^?oN:@~ג5w[mWr�3߲-?|?H熆iܩCqc9"U/GQݾDszs:OįܛKEFysjܳr64aRϧ m>j[~heus�P�~zZfV~etޝ1QX;ah-eዖwh-MEr=d=ZO<6<{߳e\} 9ϱ~ ?jvJGƦ{U'3.^y b$v;SdO+б;)[1$|"r3�oWϚ{E?wH ?@s]]c1ē.KkZ^xL5Yk*jUZ,nkmOIu8'#q})KTJe*icژܐsSOY|RzvoHXam;/xX"Fi]ٙ~z~1]%>EYgW_@ˣ][V+#7s�P�~z6j=y|Kc1ҍF8AȿLN|w0Ӯ$x?@=S+Y;RV,jJ.fz%c�gx%7&33"G p`0nQ|#��3 P��P3@=3��F; �� z�zrP��P3@=�@=S� ��L=3��\Ogzf�@=�3��3 P��P3@=�@=S� ��L=3 ��`S��P�g��g.� ��L=3��3 P��P3@=�zg��3���9@=�@=S� ��L=3��3 P��p=�� 0کg��g�3��3sz�z��zg��gn��P�p�z@=�@=s9g��g�gz�z��3@=3��F; �� z�zrP��P3@=�@=S� ��L=3 ��`S��P�g��g.� ��L=3��3 P��P3@=�zg��3���9@=�@=s9g��g�gz�z�� 0کg��g�3��3sz�z��zg��g�zJ=3 ��� ���gz�z��zg��gn��P�z�z@=�@=s9g��g�gz�z��3@=3��P��P\��zg��g�gz�z�� 0کg��g�3��3sz�z��zg��g�zJ=3 ��� ���gz�z��zg��R�p�z/U��zg��0gz��3@=��� ��L=3��3 P��P3@=�@=S� ��gz��3@=S��P�g��g�gz�z׹ ס^^sEĐ<9z{=#={ꀈӨWDk* C@ Ĺ:].W|"z|g<zgzzP3 P3L=3L=3L=S�L=S�L=S3@=S3@=S3 PӮp?G{Ba*V5Wrh4yE%et30y�.6έz6v5W]h4WJn{L=S�R?2k\כ̒$e~zO=g]c̙z6s5eV Xm-:kzyb.xݨ}oZMu-Wo/RKVr_z~s>ckNNNcܻUVw^ {Q\Mnqٝ>sʂ{Mk 7J_)z`Z4&iCWun5s QlwEţ7_ZtVIq&'ZE>C8&Fo 8zn‚;-g,G=3?Vo/8yv5[t73Rɡ+ln-r%%pzSݏ)),o\ VQFc^e͕WJ=>r8䗮\Frț~TZpnP b=O X..ܷ^WU<?`=Jsީknm=sɓ/9W4u;Q�F={]// >mxZ7<0[)Wr_z\)(}P[3.rrr=~!fӓMerx\WP%nG`2 Wr46вٗ;%M"}vjC30 gtQ8]-#=ϱ;7ލkŹ99׵t[iWnz `nfOYZxUwƒ/&Wr_zPr:meu= 8~:,?? \Vum7 %#8WZ{E._+Iߘj?{imwZN!z~3Gqtz؜.j+·kl_vyz6Cg9gK_-#D=kC%}߿g ґ牟wn,ЬvZrj4i?$I*_Qw>gw(.0.wο;b \HfYS_Cmzf΍9L}9] f=?ÜS3ක4ǽf/;w ~@̜g�snnz뭅W46qJ˿-Vy{Xu:殿+9s_ eWn=]ڪ/7~vg@׳_YWZ,]_|kPhiUTXY/.<&kN!zxQ<kEPj-sͦλvtg3<G0wvn:Jg g�s|z?ǽ"Ef|:XɡCl? L>mC?+(z^}`jlk*J>sO򻇯+&]}NNΕAI r=O \xL=j^/*kܧ]QRThrl괈YrZiiY;EOg,G==ϟk嗂 ~buy1 ~e_㕤: ֳCd x>yI9zbuMH>& h=FEUΡ9QIĩ-@10vW ixf,G=fhS=<G�YsP�=Oݡ~y.fy?>3@=Sϳ}\G=zfs@gzgg�L=S�L=S3ֳuc`?bC^_;0?19 {^��zg��@=�gz�z��zg��g�� P��zg��� ��L=3��3 P��P3@=���kQ�n ��f+W���kz���g���z���g���z���g���3 ���P���lsOOxEmm- ��y[υEBş=~z��[n*m, Ytzv8z���KJJܹ#X(dɢֳbZz��粲jQŢE!N~^xj5 23���g=WTTԈǢE!N$9Pϒ$G.fLǏ���gD WUU׋*m, Yte̢v<y���jkkEF*m,[Vh(]QQQVVVRRR\\\XXx���x]+ZW^QE U,X|ӳhzo}v\zK, Ν;nk,���^oE+Wԯh`Q¢E6,߶!zv"m6l6 <yc|CCXуj��׋\ѺxE ,JXbƢ6yppPyC~ZThtbɎV+\���x+Wt_E,O<˷mrg jm2Dwz���"*W(^ѽ~E=,:w<O9-$n-X,���H(^ѽ~ES t~ZZbN1���+G(a9ǤzrF.i���,f9LgyLC.i���`cj�CSK����IENDB`������������������������������������������quodlibet-3.0.2/docs/_build/_images/paned.png�������������������������������������������������������0000644�0001750�0001750�00000241061�12161032160�021315� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��B�����<���sRGB���� pHYs�� �� ����tIME %�AIDATxX>_nbO{ors˛{#,`(Kk5ƚhرŎ H, ,.{فu5<'93gG&������[ziӶ%t0������-@]M,kboiZZ������HhBE[]kKg8ZݔJBdRT������h!B҅ԋV:SknrӢ7TH$< ������Qb!B sHhkѓp /Qqܺ:U]]]UUd2+�����7+XHn!B i1zfkbr58"C#7E2‚|������ )-[Hz!Cd )3sr5EHVTT x| 0$cHZ34Rf3a;Ο2R/$`HJKK!%MIR5sT*L&Hh a~~J;i a999Hɐ!=CT{qƩ8B!\nuu5pBBg`&:zb'<=޴(JEbG\II 3gHҐ'(WT詸rz-ujpp <##5ӡ3 < H=<M l{A%@Pb͋4Xjjj^^3g}?VU*뫪ZYoq  Gt<q\п?y~? E4> �MAEピ,334jHؐ G º:Akܔcۖmak n-%KOgG'[Q6vn.`\Ge 2ַyg~`c5Io/&{:9rvik5ͬ޽C@@4Zn uy^|kv^cvӺL4ɋָ似<gHҐ51N. UZZJk䠠buQ׮~;ȆU]FJ3#)p<T㘔_t\o_7R�WSM%$L 5Tyi:&yuZ4n13+ǖ\E#34fX{ͬ꨻O) 5횃 uS.ݴ5g'!Pby^\-df^:e3MNnԸ'Odgg#=CT }{sSRUWW7hܸq7P7nɓ<=]B#'%i)\4+}\_qS&A6tI^ WNvKgU53gcbv^Qa�7SMh`lh'g6 e86G;73Ĝ&<<\5)e5J}ڸy،1jV܉ܽ{˪�O =fF4&9:X hZd8ί4#mGXN0S(Kmky5.!!!##4jHؐ5h|JBg iC_g׽ơ1sGivPOv;ڹ:9.Ӣ3Nn1vqNILnb+25ADu8fqܽVa$iカF3m3c<l>.`iu<~>nS/Ŧ*'~CT,V6}29s䥚voF9G?o 'Kt+N-gU]oZEkmgs0mv1~yCDKjah_�t-9wu\6S̬_CZ6J5/Ns#S(K{5_NOטXFKMMEzFv)sH$\.d710k>HAx@Б'6'i>2m ; !nvR5j&GZ,7vpq*Ub裼*xVc84q&I&DN-rtjh@]ÇN+o9Q}sGv21tr0Ծ=W♍MwҜ=~ܴ]}MomܜW;TlT5{�?捵}*`gb!I˝<QZr4BB9sŵtwcFG Ns#Q5izӓm5MlpՋָ$''#=CT [SSp8yyyơڍ/Ϣڰ_VF9 L#wzmiӜ~?<ONp3j6/g4wZ e{:I]G\nk3pP:Nؒk8L-:S^|J;>:5/owikG ٘qQk0߱>A' xtdXWkR@clk4:IQT㷬Y9w;[ў/fy}h4o{zcS1}KkU[^vlbMїxhnG ZOb^^mrM5zi}3$iHU[8a8_MU%C aiN.qhNoqyiԸ)9Hl|xmSk65#KwqD7ji^p&/zX_g1 4rmk v {`L_swh7$gs {pnƸy5δUt;٭x\*yW8ezx{:\IkݽƸP_`k ]ِۄiQ yiB0=F^c拪&yo*$%4δg[TTeo/:.>~߮]䂀x!|E=v6'[1ԽqRjMa-tGۉ?K*ssu K*yN1cB;['5δ`kb394mutpras}S…e =<5h li!ƯNdKܤIN!jG[ggoܟHrU#]nul}_Ըf?,Oz& r 1>c[ڴ^c]}#�VxبS~~m?jx)aoky[7Μ=<oji\nnnƙn_|ѹۧ_xz*Μ\M"9|]nxG(5%k SV,vnks^Έ L+}o{L}ZҤԪEen.*Gw:TdMALj7:Z0r/sՂ3aZQIbGIww䅄bvgGGeԲ /ˇׄ{{3 /$LFrI^AGYW?oߕ5&U>n/hiÂ=-~dFt<K)5?:zR 9T:2ft8nS!mkJРSLF^:e3MR_8:\Cbnto[fff̽{ @@@Z8-X') ϩ ?;y{^n>V q㔦]oԸWW3r 2 c\BP.OWk8:WpרqUmt&S5;1UoC5cŘz \Xtt]wg&6TڊjO9B)5ZZsimߋgD ]gor!KNMV:ƣиV՜@@@u Qۋ(S3o41;}LqF]9rysC@@A66NΡrLA\l y9/x{;Q[l?46ƞ7˕^Ĵi^Xih;!l<vswKh�O'Gz6z{3$ ͦWN=vd*Fv/4)}== 66 ]hm-6ϜI1BFxQ`x;�crP@wAڼK}3~mGnlI anxq>zةgx/mZL '<nj l#PzJ ec󆼦ƙN{暓E7F27 D1> ~ݠv4l}IM i7''y_]YDžxp¶ŀxہU4ڮɀ ������xVVV�����Aj������x�����|�������!q�����������wh�����qV81-`a #~-:3qc˳sRou׃nyrlzubRHaE@:t!F B9+ &T{z͛a\t8? ����XޅMyegN]x«i\ꝛO9q&׈@$mRkiT,z*!^$&޲8+zf _oXYMgW5 h.O"}S?,8����x'mB\M^ũfO\H'pGscOl1)4$$$|['ElXT_tpӊIA!!3#VՋq_i_"B'O>}RJ75~C1eMxІV/Y4o5. AHO7J߾:>uދXW,[1o??&-l4q02g?{WZ ?ƭ&kstUSMZQxy%_IiFMچFfs~i3{RY/���?B(_;}ŝR1}Ϝy3i[x57fe3?:fzFm{|"O6~21xsI1فyZIDu׶ϞQgh|W_M [(45dAmH"-6#tgƪ',<X+ (TĄ-ܴmR77|)XI_o^T&~pKCtKWUkDBgd0Ơkf����@5Sq.x7?$0NЮkc'yUknM6gq|}T)Bn00T`MjuCV.]H-HRC?F4dRvM2.iM-l8;I5yN?q}RZTHЄr/XtP"OƐָ6mq?'%Ɂ0!���|H'iWǨbtn|fG% ]J 3y!v/EA5PJ&?Tو@BM)*f76o_4BCC xBt :c-6]Uq/Օ2o}-T]_u5 hN7IFi}7w<g?# W[Wa<ojm~5skZÕ36&sʏ<ϩ8@?c5&jeظM&����-N /1- <Wɥk75F,`ǝ[9.lE3bDq79ٚm5!;Bq2h\o 8pmSUGW fQgWmq[[׸6J{|!0#CƸwOx31hBSW>zFk&~YP ~_H���� 4N (+BB~*V B\Y0aљtt Z8i:g=|^ȧҊG&D'F} ]go1#YO(6ԤsyMNB*hL%3'|:Ț'I$oWI?|d˒gu|4~'Gm3xҼj.ҸZB6J35/:}]|+C긡ߊq~SǍ+.]>5פJkoӤ4zMI7qu^,Y4g����wޝƙbqʄ͚t7eF-[8+4$$44tfϷ2kp o\>148jW64tjpԌY+RrlY=9,:y[FR-7LʞX|axP_@д9KW/*eʅTw&}64I_ԸVK{C<<B<0ɻKeeJ[߈ƵZoۜr޴"&s{���4N�N~A[R ����xI3^vߞ?o 4���5N�N.f8����:@������>l�������8�����[������;i\:������yc������{@������@�������8�������4������44������4������x4[UѤҊWj*އ����^޵!@o T8IHpTS�����kx~DH6 z-z-I0\h-)R2- hq-N%k?F㐂54+-*E{=5?qwvV _=hg.3[\9fpOv[K0pt]���gq8 '1ə !UTK V!#%j\:FƁƽSHU=,8;;{_h-eMn;W$���4HNq  1pLK*ɩ8RԸ^b-&`qƕ'>}!Uŏ[vsC)0!~ 4���x{gƚKUTuqzN!j\)ג25!r:%JtPٸ>VƝӫ;ӌ9Yb¢G\}ok3CYr[JtÀ^mcF%(dUzP7eOj~i6c 8zN~{,6ܜp}{3w KQS.Q)SAK-tӈ,,X 4%ϋ{X3`Č_F Y_���oI֣d;k$FPp2-|-!T\2 iul֨"PӡjuJ kJָ}i~vj"h F_ NzZfºy@=  .bݛ*-[|qEMtm2BeUϢL{:И}4@>=/vqFD'(=,fM'=KTX[dMO&hRkWY+ٌMArOðcW+%켅vye}o_��Cd;qmzk QHF/, /WJ5" WqL-P(Õ8)ב*V5I;,?hblj~ֲg\QTszG)Jp2yJW?,}|s*W)1Me\I9>%@`%7$tv{}3nd2,zŒֻ!>k tBQM/ 6YTbnTssFND u >P'cL9u喢z��xf^Up=26m$FROq SiI,IY]\W.1OM0%bH~ L|Z#U:#QW+>X޼NXW oOg+dzmk6:yY^u[\d'!^Q#a3mr9ߩRfGQl=t_w2<7XݴC 5<f d }P=LS3*wj\F#~3&+8eСV-F4ߨq 1?&βs\��ޙƽ#yqTTMrxHUIup" !Pm\։%B"[(ϖREE"E\Qc"a#ZBK䇮q,rO5]5\{[33>LaioLdZ7:V+#3v6J4,(o}nLjPņ;yVOY"OJi=MN0jbi * c`/@kjb.U|;+UQLl9SuR&gq ,l5j+|��?$^EZ"YVNH4zJ'5Y"UXRbLV Q)\i\VhjByJ [q U:и=ܙe8rݯΊv5:$+CӸ{Kκ65ΫU&D8~pϢ#KG0'%l>cӤk IgO�sz֯ײN1`kb@q}7oE!pnU6nڌ 5I ߿���3FI88Ɣ 4#:B'T\5Q"ra<K%Hˊ% %V*VpkejgJm޺-Jyy鳧ZTQQ~K/q5(s+YWqV̑7q;zQ^QLt %h8Ugܸ}oByVY]̄%t_xM*5׳kLnD:H'~S,-qh=mk8L=V܀;=2rFNlEATEۺ¢V ��4uq~F/qthqN8.QQ9wR GA0%5$CR<5)Ԓ-QPe DKE|i_TjRM+(J}8P[o?@}Mkl+bP[Y-L(ZãcϿ)CM=ppߝQ㛻&lZ35 ?|o\AOwv\հ0:xبC-3Nʓ?wݵqQ 䛞0E͕ݞ5;~R{ߏ1oCoՉE!^{sEi4fRȵJX,,ˊhm361+֧F"l/��;8exkA!zz72)8nʓr).Ґb-!АR)2PG*_jU бxSbl%^(Tf 5*Gŗ/q9M4%##}מck5M.efeݷXn}h\y#fj1gE%OL_uQ7qb"lr u3:ޞPǛ47qc}ޭ~N}{l\jv\_W,w;)s[m*953kPK;xa8s4nC y21HnO`$\?u_  ! j=eܝbF$>ϛ0|`?fm쭳cakq{o䚖hhߕ&w���oDZ<#_u78S4B i^c+uUoyTWE2<5.CRk;L)r-CjJ%UW)RF.*ĪEXզV]S}ɓW0M/XN8upدqE5[ 椂e]77דAIOnơf8}̹Ө;::~ɚjK]m{)/Rr@Ts:T��e{mD,"#r!V!TʵՊ+U2L!yjG(tWՊ+dHUX\]"Q52mT+TH4%MXh\%YD"у{"w'U0JJ sK{"w%>gV1JJ%=q+)rd7,5555u!!1uu u0ԥBuޝh(ЀЗA�{?:iW ##nW8��q3K/jQ8 a%j\!'#jm2WvF<W$rgJ9q\ӡ"LwVϜ_*ꤘNիqB',@$euu ]BS Du<Y}ѸbtW/efd夣/<|ҕ Ht +J_G2KƙOò*>0'd[5ǃ^MP閣.N8]B4^BG.3.у�UUϚ* 2��8ŇW8s^G1 :ֈ4\'Ro dygI4j|TKtɴUdȅ1ZL2-z˪^K4G*JKD_V!Tޛٸ\tp5td Wdf^Bg^GR RgWm;?u45ش; 5 3Q7їAxK����5e#XN5a$%)cI5jB!E=W)iVds-g-hYjZG`:$|Fi5Kx)[KJI BN(TJ a_I `T{_4.3;-+'Ds™gO$=BA_:phߙӞ6p,#&I᬴_N<?m3Luuu̹Sk/A8wL%3{ ����Kil3>Ā a<6h^#9JS:`d;\r={*@K9A=5Z@_r(bsn~ƸW0jU)upq-Nqf>ٹg{ԭkɩO%З{vujRrb“J:0wtN܉OAkN{GPQQQ߸c7u]B]Finܺ }oDh����5_Qm[-j1pipRk*%c8O͗᫲vVVT*8F r ϕRڛ_VZNtuKtK|!v̪,P,%Z '8Խ7q]ƛ>zߏ(%u}#D߈{Eg^Ovi)ϝ}2.d!+z GPQܻgO>.<}IUtt@����5e_`|$,P89JRGU圝ٕRazkpZאBED |FձF̱XynfFSi&_2z9W;.}_Hq-W/iu*uzh\Lܽظ{۹{'?|߸]{v?yvthODT׽I=8tA7/jGv|8SgOڽq-O7eR+oeEofѫׄOXa}gp^yֶ ���4LťUc Spr-A=g%jT>RRY S)8ILG'ג|5Y"V戵{K*ؙFt()+SE|QmJy:߹׋r#$Q,IZp\޼Ms!pVp]yq1.&D= <=Fq{kj@DmR4kOBϭaikܼ]uzS%?[/yBli3>o���q+H(9D!S,Vkj"F+0R} ̖<dtrUQ\ ]uPL.[1:ߧݩSwӟ~,'Uάƽ;UO9w6䃑(N?v(zL3jtdIVgƝ:sSi]G[Iܽ|&cvϽf. w}wMcTNZ<˺_?#:Sͺosb0׹!C^aYBJFyZD畮8Řw=၁l2̽ytrXQnck^x6̺k`{Լc~���E&/\㈆H9Kԓ" dj N kZUk*L{Z-2U7Zwi%ŪTXD-ϩ~=cB*bXOR8Ky?Kc+ {9zX[vGOiu 4TVNHa UJ}L #0u놌֥Gw ܢ@b~!{",7V4yyrV8/AJKY@Ogm>?ndsk!^=׸(KPʹ;?mƙ6r/���3i\xTs7#H$Iԫpj70B%9jR05JH׫t(%FpRԉ c+?‹]<sG *5XM*<z[aՈA7Uy6ߗKޮp5lu01nՒ]E'lsƺŒԗYィc7ž*::u}a?hСz>btR:maѧFl[ڳ) os^na| ِH%޻M4nfz-},`mk*jT1?¢/_2S7r^|���ϥq6NȽz~8$gRZ\KJ$_KV4R 6&ILr.p窴R|cv}\#lvŜbpK*0XUEd^\.qdFc]O}uD}Lɲ<%C׸C}&lg&p--yN0k˹E\tP_U\.>bEqےb؜o.Q:w߉*7J&3GZld3'>FjUݢ ֹbgy��?5S^�n~r8+DEZBvhzZ1=A$NP7̩pRGt:޼S-yv΄}%{<}*NU?S#9XeyEv؞uOS:K`_}]5c]v^:>k\-lpOHDZ8<f2ەFo;eaїeza6ΨYlCTw|j]ΘeqУjH͛kq l*���3i܋ƙ +tpjkNJi5]G*0}<_%{!;;iաC|;iy!g~gB2{^zݬgkVWPov;2;H˚6<-CdWZ:)0^T}7|jfX=rDiF ;G->ڢƩՊYy(PE֣5"$c˝8G` Q޻ VsY ^#V+%76ٮơV XqɧU< z9/Q>���k\2Gj\3Npꭩ]qZRAz%Fj*Kp}(+_Guy_:mNq!fQhca&+,ϱ]v?ps?쓵 ͻΫ>\*qfȵиf}2ֺo;% Ew͑#bp["IUӝMsP³D'rr lSTMFqjhíٹ.\w4r/���i1v4-q^ZzT륆UT`Ծ tUrTI b*$ ;tӪO>cwǮˣ:Euؕ厧_H:2Z0fь?ė<ņ;lxoO>Y1"y:#;WZik^,ո6P)v=0W����^G^FpëPhIpHڤZQb r*\'IFV*d&A)̎tTg>Gè]6}6؎?td|ƿV}[쀋%-fgjY7;Nn:. |/o ~pҩI,иQ 7| 4���5M(E z+0j85.Ґ|%.@RDRGo 'R l,Qِky;᷸ӟ._tWvZk]fwqؒO~p*ۊ]t{Ӵ?ctǥw>ِőoN=1'{˴qohQ}Oڪdz9ÿ+8���ha5:[Z-UQaӷĉHH kZR&R-4a,ty1t;O>ޗ52˺GOv{Ds9ӭ65tM_}S.KuN~4'$2SWUUu-hRiEYҬ�����9Gqp Kz-FbNCHG|`NrݓaO<\57;ݡ}~:/KϳOb}0{}|QHQqq"_%5f']|6vW_zv-9V y?B������(3<J7G%^àӫQ`#)L .2,JX0)]pFW<{q_5ϝɿݺzor׳1qeSk{i=){D)Rc?[(e*xOٽ.wY{;[wfpثUMy+ QD ����q$/oSzpz-FMũ ﶗz%X=QƷiWb?{˪讳9aDP3tNft&w=0fj.GG1^t_b^M95rs{o)?C079ALl摎aaxTQ"V=SfUr-h-3ƮI{\gk ;Y@'-wFUZvM~חNs1E!S&ϯ)k\;dIVUգ0N)1��ki񝪦;ZJncz9W'`E [yDxJv#[tf^x#~YCSsu۵~/m?کU]\ aHsŷdsEa+LL,{Piq$zmTS4c~:v˧߯0tm =>+RxZ-?EwZn,NQ7#~F6ܙBrSד(߰%>+f֊b6#wS\/ʶ :(t~/hJ6]qE<${^;s��4r8: k:a`zӑr-Q{3ZL/Pr<Y$ g'LcOHez>uS.|l?^XGHLq7oup?=}/ W6?u\2)7 f%,N{`>=yL;MrOg\m9l/(/M+޸Fh~te^G_+nY;r}*5Ѹs{\5.mY<bPO }]}7=jx>G griMJkޤC6'353F Dqt٫ Qmg]7yZvCq[drasCZ+,K(78 w5Z{J)>7nK3IKMg=+8IN/7��+kmr0ÔeruưcDG4hdD@s)X,x%CJ;SG4z{KiuqhX0+˥qTWZ {uݛՁ4?8FΤ;ţv'uާ^;w*;05#6Q{lI4[z<*ChI5΢Uvl~mQ3 DWlm"^gF,h(g߱ bmOmM7laV~0&,ݳ{U/t6&]޺>Ⱥ78,8b͚5w5Ѹvat+^e+7yyA_-bAu-k28΋ddj2'~qGkҋSjbT נMhyVl)~= ��^MY7 ZDFOEZB&jW%Njt !!"61)AGunft[/<oATt:N~^;{ߞvp곪u㓪'$2wOӺOsW~'묨 nu\x㳕1ex=eŲh:[vZ2j滩JZipHM⭥ɢ\x*a6F ?Q2ֈt݌YzS4gg,D{X:ײoH`*+mR SHBpU{^Y$V4˨wŠk/twNVBe`g*>)f_5MֆnF\ ���/qƗRϟ8U㤜 Yв:r8 'RuzFJ[E*&7=SձO#3%-KٸPtq\F&UΧ}OGy;=⎸|Ѩ;~ 3q|G̀^w=|{"U1_{ѼN+c;Ix){sIMl:[/S._Q~(oqxە!5 j^<Wt[t Ĵaj\fJʹ/T)Efa9lJ6vԆơ"WLk[�7Vggƭ4-P/#F DJ7Kټ(w`Mb3ܢ8ccs46S2:��xk1DEZ}KaKrrN`n IzO*JV|s<Þ䯏t;'}'>?=o Yr:7>dgnuKgDPcVHV׽d]Iz-o{NɚM٬1%x_ny0,*@R_o*䉷 @>,kͪߢ)lzS[M 4̟Sg<Ama9I#X q>^bM:lOiWC.<D{rk1)/g2+'<gG1-ƭ(,Y<~z-_as }H i`+9|��Qgx$Q.Ǔ94LդDM$uaNr-Qs%ڕ| b*??;0Cɟ6ᤕǯ[DU ZP#Ě_D}/.S/t+_y%[8+aq.O?!rCnn{\XïUh*H=Q.yew*v dSc<883U2Ӱj[/1rܥ˧z 6 B?i͆mjX9]J3~ )?ܷs˺^!q6)&|$UȈ_֬{7h\1nE_>81ES ;գ_/ZQ-wqIhzoJQaHy/5[yZa%[,euF= e5n R$Iэ>C6ٕmdrR��^ZzDPNV5PhJ-\y@RVKWʦ%=t{ Hu=iV^p*ŗ먽H0爱9y+:N?f,ϪP#Hg=`9s)kojH"Sj vR6.G's.2E;Y%]W.NAgMDbM=9XҸSz55RnV q޽W߁o5nYtk=3xʮ6IXy3eD*ɦU Έ={X Ymakٶ.S~<4׮QrA9Co%zIUBm݈uu UxޤA0ku$}#zq׌/M36��^Vz$48|5GSPFJzy29~w*a6hIgty)uk Jcի1VQ8XGV+Ess(ϦC_s{"xم[.!^$_NH %bT"jX"KrGz [+)ќKZw{!.OMa<f)Pjsc'0���@0g$$2NSiKzp /N oP^ X`ȱbh13Q`|5UlR P+̭II E*JבR^#N| CH kTh(Ma25bJ1 *IʃE>lIõa8"׸)kEX4OqÆ 4hjhhܟvV )��;8)Nd%| ,\S!r-)ޣ Am NJtXK(Pv5Qc &C}•>b)Ζ0V'Wcu ':R*^!%ZHi0Z'TYJ"S^劵Ly~}h'ReVsSIre]RSSXZzzzJRɒŋ�����Юzﳄ2LFj4RR#x sr2+}n.RG= ђ< Y)]-]T^D^(4ܰt+(GE5z9jH1XJW!r,[-x\/ϺL箍h:'[U?i IFG%zU>ܫWgX[[~q>O8���]zq*h9@ՒIM㴤@K5#U8Ʃ]1+ze~'(AHu@tGiTY)%rXiH@ jR UPCO3r)ūx\X}.3 f<c*߈[.(&1=M 8AĂ ر`A@" "zp zfQ8V"2UFPG=WDz+=.h2L5@ XYY}bitdЃЅO5Ν;~s.==}84����5'ju/h EOD$-nt=A,Ī]'vɞIuR*_@;86jB1Ndr$#nH2&.Jh:)*S<7 6ݸV$̉k]UY>]4!gGsP&f_G+++[xF8$qѷ̗ivȻ͓'O AO~M8�����8 ]"LjɆI%|>#Ll!] $X*Ȟ%BdG*J®!ndQyq"sMd% (*:)%snp/0}i-Ml|–\Sɭ.~wɪ.T oVboG'y̌h.mubEh+9مq&7Y9'JSuvwO>d6Dbâ#nΟ?`ܸqǏG<xpݺuȂEWΝ9sbv޷Ɔ3,ڳԚhiYf/`F"h���� 3+5:l. e[%pGJDOBqKk 9C$& Q:FOsė<[XNy8V2u񗤖F}Ӻ>~.~ts 9c,褐Ը;GOVoWW?l]yhi:p9}qxɼ \4.Zw~hܲe͛goo?wܫN%މ rӐ:cǎ?~<@pի_%nf{I+pZľu*C.G]qY_F#^`́V ����K Y(q+nM`׳UtQ'G!&Je&x*q'"DFcZ9T^-d8wZ'jȎxLFMV&jU|j.fGg+TW9⛧v*챔1.ƛ<MucotUnWX1'sN|p1oN .ky|Y%J*j+MP`ԝEN˖Gu5^<dOj+V'eddĨV5}{VsN6s%kl]ܹ#=VG{iy3, Z˸mgruȑ���8I-Dzv3+,h劉<1C(*dN,'JbXdG\9<,sN5}_^*t"~ և=n|ܲ*rU섣c74L2Be[5qcΩڡJ7*M1P~1*Ns"KtKU.ʞ:5zO<ZUy%5u/톋}dSG5K_8<*Y0s𬬬I&FtL2ALe"^2s=ָ0k$hsV~{ {E���kI(l&\΃e$zc#*H$ER@BK܈F5LqzWoyE 8FxwOOns]f9(/uP[j<KW'.oK]ԴE=1ׄ?u:lᬨ/oUjG7fƄI3v-T=pѸ%sٺnʍt'8v@Ѹ7"tttKbqƽF#A@#"/?ĭшO>uuWV__??.��� 5/FRͿ&7摭e7[e ~ KXR& /e %, '| %hg:x6Oj8Qt6nt Y3'ZΟE/L&.QUF~_yҘ/U|N6V%I%i˃/1Rj:[X<9q^|'̛{.gwtkR͚;uz娚[`9zŲ?Y.ܝU7oތTۻw/ _(((h„ Cbc~q0HZCt0%A����kM?]ձ}tݜ :2ɼB!ɕ]7{?ݡ19d}uWB[قJ-K\ R |-9o"FDZed],f|nПteʓ&ĝd|5d6[%t̓kLMhiA5&Hw*kΝM{ ZmA7ơ6Ο;cv&2jԨ'O"0Ν;o޽{iii~Ǡ5mGӱqE`FɈŵ*`:^+ .���[8 _VBډW_FΉ5l;\A,')꼋c7\Q;Wg:N—09b _DH )H&Kdw2i0ī ~GKdT24~MTKgE_H L,N,jkgX>ԵM"WqlZμ58ǍNDB;^*pK:.ϋs.S*E㦩;gִI~0iG|t:J~***Ⱦ̙g.XBi"L՞St D*@^Y ]ع~twT:ፚ6kM+S����k\5S`ױ~AN^ꥱuVŤn$:R9[xU4a+5^+Y<4$F |%m]#ٹ2&&th&'=YU$aHt/IJǂIe" #&OJK |⿋M`x!y9QCs-mqvW,ū0\47;;{ͿڨW_~㭬k"2;v؆ ^}N8-3sEۏ+< )=�{l׺380n8����A;迧߭_hG!5b]$o -O?hg)xRWsDD4 ^R-ȾJJJ#p/5XLN_Na'vr;ML~_IE'lV[Jd74=3Q;OXGv^ȟwzSUK v#*o9eEl˼nθW666_~4\S㪪ttt:&&&|l޼{nx�����kS~ ީ,z*\ d5l9)"%pNv&[Nvp%mQ=5Lq [B43:1xCA۪uB*Ke_n&\h$R*yb2O|}<K)\1'i".%c|W iMU_Y~ݔ{m#W4:k8> ٚ~^\q_|t:=<<|$iҤI>����``[oU|<#iU|*r bɪ&RL;!j\q#%%4A4yG k mNmqdj0ئ鑕F[iZұaIuaR[0y^9KX'" DD6#.6QK7%N==Vʜz}CfsΉkv%~v/}qrM+jnPhp~~~7[* ����iHgwjF7ϸ8^6MNjµEqm[\K6wlcf*41%4څz^rӆǍN +Pz&˥c穝:vr vvXԠ gs?RUp Vy{6J|&HTtjی l'}C/oUN )~+>]͝pQUSܒN _=rSG&x 8ܔ)SN81H���wY> p7xT%ӿg撹$vH+`|>UM8OW/>8=D (SLU=Xm8$wҖH*{zO<YٷULؕfӾNlǞ8WTѸtg|/vndӬʥ5>m:uML4j55Nv?^ܹs= sYn]߮88�����jW wbB@j$4RqBpmH)G=UC݅%)$.ĶsbORxG/ .x&Ou[F?Ό`OYﺪA2ʟN+=9J?luM<0Hȱ["'}NT1QJswͱSq >8FO/coWܯNGWޫ4;]|JѪ ]g2uÇ 4����eSW ?]3'icJm6ڣvnQީM :w ^5C\_-V49vm؟|T8LU]k~tά7ɕ?L/>;_x*/rU2U`NJT٪|ajkT*)}'?-ٯ`W|yX&ᣳg._%Wrǫ;;R9иW8����x5nʽVv )-F$zZ[7{JYxLfFYvejw) 1d*;mǘ|!G(`,GOP'Gj<K"J%<+%" _@ddնm496qW*(<nSRLFRTe² v?3@setL]5+kŦ_]*#rQq}8fWܰ8m~`0Ȏs˩Hey h�����h7u_5Nn^tiy\ֿ;/5Q9DVL VNVҮ5S7Pb_Ŵ!N[9)?MX4KWN\# $T"K")_,$)ŌStҸQJR<z 'Jj(OKyZPPm&N<kc'sb~ V%fqm-Qc ?;g_%����#_%ΉnYQ[<Ik. :* Q-̰FJsq[H=K1J7m܉1n?:5OTO7.qD=rOb)G,e,'ĕ׏pJGA3QGO6PT ;* zAm17^)y`51f9}s̺3WRY4A(44����F}Q8ayb^:P ݵ}k(m1m컭#&fAX& 5IWGӽ1S,|2 UϘaCĒ' _"{<G$9Xcg`hPOT&|no\Tx[9|-$co魱.?MkkI/{{OQA@����`kk%+qSƹ$ΣMiz [8 DfC^EvZh '̋hj'^,mwWyϸMWꆨ.YyTQcG˞\K$r'zI3?V2iOMUڪ+/um,ꦚ~m1wƿNw'Zܚh5 Dy +O]e%Iƌ4J]{~\cD@����`07J6?Yd2;\ NmD݇V?=YN'n'f,Ц_+Auw?;n1i֣T4ZMu}A|QWoO, G(Y%'.4YIi򅭒T1?V T6fq֑? ]z&{Ic=q{&:jҨQ*F)7ZF5knn~Av1;}+N����q#8������������������������q������qq������q�������h������hh����ƛpwf~qA����n#?!" 2Lovོ����Uzjb pd#k0ahف����qqqq���������MhTri9Ojo +n766`KŒ?x#?���׬q Ltë :hܿfOOztƞo54'>t㿀Ɓ���Ը>3.lN8Ρ7o[F" I!76=mx+&EW}޵m3f\χoNr!���Ӹ[ /^vimwɯqpkF*<>]Xb[_B.c_B)Sow}w3N]y7ߎ ϝ?p-9}w-+k;5et=fâbo\L}UY8����jH U'~;4ܺQGCHt*ފigN3شxE8DښcG;~Y  ^3x?\%qV*v)jH̾oiU[1̛7o1j::[^Ȏ?~7gάr>Sljn޸6Rans SDaH\;{̕'Һd<h����'%(dVgw-q(D:(ϙHAD]H@ץC,vn I}h\u9Xr&t"[\+RB:sJ Y FV.䬿ۮh=&oߒLU.Z4kGo\ :: P^}5GEZΚ^Whu{Zݶ?m=@DӈM[ RgZN.tsOK*\py���ָ*-?62jšD^!5 f1r/s;nb#F.{k}]:{-\kCzmARe wt͂_b2hfݫ~'S<}ˊ#e9꼽KʮlF7Oڸf%?i* >1I^>XlƙtogYjH3kEU����xu#t&}_5 kIjqۮaLjE"۲s={TD:h._bSREURkԩͲ=[4NAgG]W3,(` Ʊi6ȏ5 왪>sU,XPBiYm_MW|=RlR7dsxl%`_@����5F>\ϧ]/t'k#.qQx2Q=?~!ӥϘǿ[˄SL m!QCIK=r[{yWim{_.6uTj>} O<}ڼF?8{l8����x`58s|EN9m?jySă t" m*Lq诎7ܻ7nw8d͝>mޢ ոښA7**<]޼ ~_zKp8p܊FK'DYO-u]菽M$Z{}RTrWK?x!Ypݎ MdduNSIbls58����i6Îz_g;SS6vx_֒i !9S=,}ZD<Rapݶ]ڂG 'V׾Y2=*{J54bFvųcb>!jʢukJ4WlZKf4ug_iz5-j+̝3w޲7n?./?lzz==3?q<ɠ@`����<k>ڴKpj*BWבwŇZ4Fun~U*̜C#x:, B3S:ԎmQK!]3U 2kxny/dY3749m{J8U\TZZe~<f_V6mZg}����5=>& Ri/ߐ@JnD)M~(:&Npe%_CLnj~YF){7@����`kBMuO,ric_y ZYMMMx<H$M׫q%%ؒR,Î{)}zUSW{_����/q577_ZzۢG3AB|D"1G͆BT~|o\~AƁ���Kj2^St}ָҲ̬6tз?][W�����qot;56M4����@@@����2qq�����ADufY 7 ����@477?xM  `/q������U@������@�������8�������4������44������4������F�`(AҒ08j�[-"X68Cq:��쉐H+4VAjB�[ob1E uoA㠫�7J/ZhH�V 36M{H8��FƉD�`h!u@�����44�M~~~߱q4iq�� Vt+h��QT )S _e8��Q(贴4�86mii9)2R�8~Jnn.h��۷oʳ %q�� [Cލ~,;\4{|yK>cϛqGluy��h WWa-p]'-ZC��^Q&swm:]$9 %}ӴY,h��Y8gM3ܼdU<h��oZLUƝ-/;bOax̦Uyn,[0o޼Ũ-݃WhLGM Ν{K D6Wb>mǺY&6Rm��иqMmg-@wVyXqnl\9o֬5=_fOhWAqLQGjgM^W5ibً~<xY�4nk鋚2r߸xau^u\As_c͂_$+Zk=y![f/5cr{l��иqkl8㲵4OgDrG�g&v%Kֹ9g,{)���{m7}nsWl[œuMU-c2\*.P]}vϾB)Z@r+fk&lU&�q\w0G︯>uٮOuIlݍ�gF^b8*;q5c)8Hab͞3W`%46f*QqASLrйx `}egVmo�)IHZ:g鶧MRFi�SkJ2\b]dwժ(Hͷqq=L}B2*78ڧ|;NS?lo\�`7HKH́[-./~ qv?Wq%ӻ͐/[8��ZWΝKI87n 5!E h"(8특o\FGΟH(УjZb=6m��7XkqQWZ]@ד>"¼2c|ҕߗl>v?�|벴fxjM<płs[4\?# V=K1S U qy|= ��h 5KVG|8kΌ־quFoq7iG؁�ָܢ �!8���88��@���@@�����4q���q��Ɓ�4�n��4q��Ɓ�����e>��j<�Vk��Q^{o��Zq��@��hh��q���q ����������hh��qq��+ htPN5E{2_qR칝CE) ~�`(<au(Y eD:G8\��4nWxX,p(IubkԸҤ,h� On&q\rfaaK/]믜6 n,La^Z��0'3iR^WFaΆf+M5ŠhCSͲZhsK+++''Ɖ;; I8z hőQLOrTg4\K�^JI^\^6@a#TPOnCq"N\Pq��'Fkj^UFZl;v@C Z6jK, YJ /f~wI|,;/%qR킬Xn{/i:&sWѸRoCqw?Cjd.�;qFF[Փ[WzںfI5,3}jka`Zs 4"^zT7e& *��/1cWѸ4WUj ݱL+\8��QTl|_ɷݜ-LmkٮvPq[0Ǝ7\UhQQΣ=DbT-X~!f`y�*@ogQ+q:#ASSKfhў��Ҹ*P藐j 2/u.#5p3H.گ7=ʓH{wNPz 9X! ~�U4By51^E:07RX#ro~YI]U q��/# uTqD5NΫ e%OVh\ foRKw-XZyq\ϱq]Wz`bEHgm^ںt��FI@* z&>ȂP(oaiTL7胢o4��иg+^Dt\`1GӋlVsCp;I?3Un5Ƴ&;f2VA _`)jjx�"\O0K|ޞnx_9)S=c4Tt늪xz8vhm�;qÊ3}_XM*٠4"ze˭Σ>Bh7q"ff t3E wՃ��6%"!.E⾰2.m~ ~�Km'yXen)��ƍpi1?š m5 s�>E)[J&K_ ��N\T�`5q��Ɓ����������������hh��qj���8Cmmy���@ qq��ƁA 88��@ 4���4Ɓ��@@^Zキ0]h頷8y$nϚZy�0<au(Y,`T9dB:WJ#MW@ h[Ӹ] bX$ֵfq�#`t3PCC4D"`;fm`{M^DJVH\^B>)w Ҏ[oKS3n g>dO|jLyM3[(z9Af$R^[t#/]GuQB}+OeFc -\H4-1.b\D~W�?$⥳&|槍ڢx*5dBb Dg4R㎜?n)215O?w<}^dcnb]AentSӍFIQچ$Y@4K?[̶ ^'5iicByy5�=f;/sl<A|=/-銷JmNV tQsM)=!iqM/<.*NhdJ+ 8[ފ-׶ <rK#g7GW-!$SkuZ^q,AO�TtܲCgA]eR3g  T.)W^`.gtO+J(㑣qFF[xM-=#pV[ϾE8GF� ښ �+�☱z⥬k#⭎4WU[8m3"n|9K ǠP&דy%?*NޝqYWn._RWzo)#-NTإ5\!)2@2olC ˞ ̆KrT>_kcn\@fA %a΃Ѹ] 4W(!W$l MH?r4nGP)(dA;*^h544xRi/UABJ ه-."��!vuη?T*`\n<f%3-m)xgM<gv5nsDDGR68SCWok GĽ3 h}JF233=&`ojHא)0EոeK`VeKmt;`A ג<|0goboagW(w<Y%q=끦OڹI%;v$dk}�iz:N)C>;f,7卷w9Q/RD$*{1(-ӡ8*ҹbbS8xlLwynmie*VhC 4W|[@ (y/"ݙ('V"=}$kܓ'os+\Tl=eg\q_Cڙ_FW�?DeJx{bTɼ_e|:oagQJ}zK T7Sc{F>pN\,,%"bMB"gu s#]Cq$R5H(v荃@^S]fNv$HŬ&/l{§;bh}"Xbs5KF>$pE��Cs= /ɇ\Ѻ-6w_jTEr;*Ax:SU!՜pelDDOw035PU@g)2Nlg1V(B'}|TY .<`=HC\HW6Ac Fzcc zfhO,Qi 1']l1NR?SIy��F,R1W\G}k&amh' -aN횝-:Ke<.ВqO^~n)//+x5ͳW_]UY~>lő<ku V-)'lRkBNȫgW# O~VQœJ%ZGnMi4~h��#X-g aM[Oqs)" ơ,F/yF ˳)R�0R{Dd c*T2&@dv{ʼnb"`;!ג؎#/bRFm@���hlZT&1I1Mu 9Xܺ[F3U��@ ;8���8��hh��4@@���@ hh��qq44��8��xmp`@ qq�� 511H8pkA hh��oO^A@ qj\F -'r˵'Lоm,˳hV2D]lg �''%˗ 55z)/p6^I@ qoMv7bK[ך!ƕ&=(d @�?Tۃdt{4# ϔ9h3_j\s_Cl?_N:☥R1p@V %xho<JD�7Wiɤ󳶙 @bv (^QLI<&)v=bDiSD|YA>gez hőQT^>\8nQHU.9D[ZYY9y+ ncF0fvgCj-N�0<X][.dhkj>%PA=> 5ki` +5:(=h#9`'$P,kndy9A,$ءt@ #2F5i3}K{0|cgp&n45Nr6$ Xw^J∥F-f½{o2v{Eժ6OvbhȶCi40zjow 'N�>d1з՞%6v'+Xo:*48Ħ\Yyo'Z۽"SZ 4>_)@~e5uxesLMa8<E.a+eMtXġ 7g] pa~˾7f`+Z:ME-14pgV3"q53=Ӝf_eQ-jI| 4 J8rIQ(;[)r09odjjjAoNKң{ gu{( qWcJ[o=_a`Z 5`XqXh=ϥV FH.gYG+*k\| `AL')%rK~.2pp'nfyqQ:ff;3:8D[)-}O l{H3Eո-H m`6\qTn QFTe]~y9]Em 5ҳJW":h><PQHVgGq;J-0E!QG{J{ hQkm}'vsr072׶9Z8-cǛ)4`xsRzEm]KڳgL|X|6ɔ1O*l{dR J֣y|^mL`aᏬZ;$1?Ibc/hv˗-mEZEyo@srgb.N"r~Ԡq<7Mf)7kC#=MBVbr.)lm4дz{!,qB6V[[?(VMOkH(O*�O#WW]&>E ;07XZ"<Y[cmm( ID"HøB*Q)dsQeȦDVwv,ttиvOVXF5*YX^qr:l0wl\Ka�?j8M O7-cvOGEEzHָ'O$]Wz`5.7 iZ:fIr#Z!Y,<8`r�0lHv42պȼ^5+Xƾ݋lI T7Sc{F>pNsoo7qbcL{ =ھ5BȻmո~H2hq" ?C8 g4.<^%O+swĠ/Dҁ5 jn`c{]TMmmu3>64NvA 1wr:�C4 Y6?׷)S=myc5'\n(27;#(fnvR"i^qں^cĊLMIиv(=mn%LAgG/8e%" 5?j$w;@& o+Ơ~]+x}#LU\T='yS��H4{^G8p5[ocT,tBK=?yY$QPF 4N-ؔ.~'۟Υy}s0GWfNF'{ƽNQ;xSX\2Uq/!Y6_(ൖ1PF'�%}˙$yXeS P7e6B\]nq��9 L~H82H>2pK$GA���49X \gHz*���hy���@@@���@ qĚ"y@ qq44ƁA 8@ 8@@@ hh@ 8@ qWΘitkeWݴoO|-Tdi<i8B ';h5fϿ m<Q6ښ(^78y/ 4ƽ5?WUPPtNKǴpPaAE9])ɑX/en8`dĤ0gNxF`ynO%@d]t'^W,pj\x߶^iHlgس%xho t~6?),!WN4r՘fP§AZG]s[豮#J㶞/Wd oZ(]v(x繒nۣv-A鹕9 ; tv;ȴZWZj>6SWuvڶm9}{:A{;[8Euo*;(=}Dzu͞Qo;>2MĻoyEVƭܞ9v8${uN?z myg2% ťu RѷqG7F yp/O_<~˽{^f.[7tq5s)t7Fm9|"A3=C +ҷ8Tm9^hgsUr#3ơ< z_ݧkRY3Ɵ3$/ַ/-.ȼnaxe;n߷Wj\^3K4.911ܹo5l�lEuSK%v,!!L":Ը#e-$P@;nc /?{'@ {g:3w M0t6eVeۉ5$R>D"rw42@j{-o81C [*իpW鳽q` ?xYD9@^Pk6J�͇ iW45uStC[BaE{"S_q5ƹ<ęoy)%ƹŦ˗KSNwS〟}d$ z?ϐmzn=en391ƕ1R%4mghs6.f+,:fS㸴6F:z�򫩱AW3y&.)2B\OSJ>.z\sٞw@lfd9]Ems7@4:5ّ�{CqviiEيBlAm?444ʺ"6;'{bf_;NYEm]K44LLA6<n_mICiM}I0SK۸0j\Aqy˖6"nmFK*˴#%FԸJ-O/3Œ[ֆf'B%=6OېImz%R JWgcظy|^87C L_l>x;]%أw<Y% qjq=3qq)4K߻w@i_Lyz>S=[yyq}5H-- vps/j?g;jH^} X[C-jbp1׷?pUѾ[XGZsOG lJ9[%^C-<"n4RD$*{1a�s;ZQRv\11 e&o5Ɲ[#,Z$d)*t3BVZXXpm׊jG-V˕l(̍_`jz> '0=5N`ףܚ¼0獍qƏYo9t17[CVv![^-@eNƍԜg'We5pE*Nlw8#L3O$sYL<H OtS^mtܴ!S,mTV#R!L1æΓy kX=l#d}84|]f81μ]qIwG=hC=tFSfSTu|u!,ݎmqB/;Y΄,me{sfz陞5{B  "(bK#(" "KBCwP$UE}TNgy}NUE7NdWQjt"^/I(q>}`[Oۋ+a|ɼW|zؗߓccl 8I?YxlHzyY'aR mi/dR+lD3@@ScՖ!qhGΩ i Gxy3hyB#Y&hl9hjL<0lZP!z!,>I?P%ꗱDVs3*`n\3~Ytȸv4b9jjYjFm䤪4rz'&Pto8j1~bhn*}bjGQ*UvU~n)b!"6ERx%Уo X]xo{ux446ى`kK;Rh<lmߍzMN&-W=iH<,88`[[y¥[߰ lvq?/qi|.L/qۆ@` ؼ�m_&s[T 6@@` f 6` 6@@` 688` 4. ��Xa@` 688��@ j�>E-8�� B��4"��q���q���q��@��"h��qq����l4$÷a1؜ZݢXJϨmK9>Nsmя+p`i(/2RxY,\,?x>`4{szh��qLBnNOOƵCXiSq`׸Qh�/g8hmo^35m;~hۏz_-#ŸVv !i][l"~3玶&G)<6͓v�K|zWBabi{16:z8[@4غuӡI#C =3mA*혰 ?`?$RLTc .q Äb7:l X"|pҲz\.E?4XWey1{Ӯ۲׼J s940:(h�, m!\vT_O Op^$8лҸkDӣ<Vԥ'Q f߭v�K|"{WT^fq5+pԞ7c}+Wm4nN %TO!9m;;>m4 w镶 %K|3ClL{6k&Qu}t<A9jtX. β?@79b\?ϘY=:ii-sY[-${`>X1�K(cۥVOfC.:[~nM{iL"HU{调e1A2>=\G뱾 0THϵa)F7%N>J@у@9q �01P=_f3ni@q&q,X,v٘$JaYrLޠ/nMcl%FK53p[8j]W_5bU^L=e0g01/ aCReQ4h�,}"ޖ!;{'np,]^CgNc F㤶%SH8ij.mT<xK,tRHϝ[H0#y'/^hƜ8Q.WCl�|Riܛ:4_};шVMs5Nq0<2n9wu߯7Ԍ %G 1Edғ8Gu GF�iQK�Y{-s�gE1|Y\Ê=<qlK`FUqHR*TZżmƑ;oAnک !|޳kgB}Öm�' tgOՙ|{ޖ`bոc8T5NE 4:*Y,V僚$oơ0d Fjh�,x7nR0>={'OL?j[h\z~h44j\Amw 8̟:q2c*Z h44��ϥƭk3 r*ob85uX.?T{0Ruɴ-O ƌ�apq19<PQTigLqpc0ƶhc:,ݓ~B8�Xy`||":2a0355CD}WBZ[ƕ^P즣b̸żi^Qgߴ. 5'SiT yLJ4�h'$@eiyxoJO>ׂƽզHoږ4N[y_"q7.F|>HK{Q1<["ͷ?wށ8ӹȝQP gdK4-c'ZWYB70vq hinOoio$ ooDrED_a\8smL[ӯd5v1m mNM>h�PO>\ =EQ<0{Š{@~g͛'UWa ��qZjƧv~'$IgWZN` \J*KaY`tCnz6-%xޡ +dzMiB }r5\3SӇl&*T�ћA iqfXbRnZ'h��GߣeK;77VZ</%1 �s&q��fP|/A}!@G$j 7wIӫļ]P��O'ˌZq��"b(XYt :%QK{P(ɒOgMB��&|.3j�4;Bc\q���0j����q����������h��. ܹgA{@��XOQ 4�ƤR-hh��)j�>"bppp֭(k �:Zq��ۀ@J$8��_�`=Dx�u@��Q ��и% gtRzF:C[nfH|CoQ( 3W5aۃV^h�4EeqyO S9L =b_lnnw?W[0 4�5qˉZq!7Z !,m8m0MxLղ. R(Uf 0qNlR>+*/ ӸOjԛc€㕖0jh{arBc3<_p깊%O#PMǕg8hҠd8T8pr�ɧRF66g7\Y��Xla39Б��xߣ j������Ҁ�����������q�������h������hh�����z8x�����GT*Us#W[g�����~vzzzr!1wq �����@$ƍ�����4nrrrACǀ�����ƭƕ\;9n�Z3ƩT/htE�uA97j>}z޽gϞ AWn�Z{qېݳRRR]h]Pơ|*++ס-9/F swx[ 'JYďe\Ԍvd}L<dbL* SKƋ? Utz&Vnb.=\C@$sK[¾?濊K4}m]µwiU+vL@^ȜuqZ+ ^X^FF34G *T?.➞alolj&N|ن@>~C⵫ Uݫq`vd:R1666S.{ӫsI_Sy:t㣺ʂ.8Zhņո]Š~LoӥݓDŷ_O6oݳ6~ǟ~Qbj?2-=q率6}?}otm~<4F~o;2/q|<ö'_fGMvsk⯿駟w_X'M[,/(LWYw۟-zԥP-u~92N M;c#xui\@ylQֲiYk+jiЍ\/?W_Zd ;{GcI;;i$1g?scfh.r .QWXb릔H>qzvJhJ1ny_~+x-|J1ug7e}/H8J7]#5Q|F})tVbg~?~Z ʧh`O8򛈓b~[76><~J}S(_~szX~<JX>>܁yu Po[gKg)}3j\Oۖ~b/$ZUS<L߯Ӹ];1>x+o<F&Н/W֮I_0T04>Q;NU/>g:H#!a8I=CƑ.:בͫ>ˮM)2<<XXXhy^h4f$&Ƽ~ +L_Z4t57+'}M:DQjG~'O<Ŧ+?ߴqʂ??Uj4gB:LuQ!W;\ް5~MW/c$G%EA6}e]~-ʻZ~o8P~f].Iu<hUvǻ<k?c/>tL4#y6Tn>ϖ?ڔ=dp ;e>3M*C1 ݼ_|8z~A#-%hqiH/[ODEGGGDDD ‚c7u~[PHqTvs q; ˮ/w},t?IsϿ^ݸk3 e~%-[Tku}xFTe(db[6KЧiW>%WSݙ~'rubA v_~f!;O?6θ^_&Z&PܴbW4CiɃƽ_mqlg[6Fwl==WH|< rCdpr5QEBRtwҼјHa dl\ǫq]Rp۲KhqCc/NoѸH8:rkUy~ٽ69{}e9h0j\D]n*=%,GvqӇ_ ,4y H?j-ۍ;4iw9>oނ9<tV*mL܏mҩJx`WV_|)ͼ }dya^hYQE�3_LTj4h2cҸJl==f\h Ώ1nܦo˞[kƋոSǎ=ك۽ёHt7X. ӏ`"_~Ho7=?^O7nbl A/EI*]j r G"NM7Zr٥<:X,92>"˲4OuæT'~5Gq>m_o6۴+ř|vGUT%ow<ƫ޸?H{txWfK8`{qdHX?[z!E#s߫-?pmxlbHy+mbz8Jl=fk eCV̩95V΍qc>jCU^{R4li nK7?<#4on63|_'ĘfWqu~-d`}b[>EWarC87iGҜ׶-}e˖]~^L!A6@xRucj\|<j USn'Uÿ˖O>;Öٕn~b Oܔ/Mh"6}Vw㨚i$ #1ۤ>ڴ͟!>ۺEZ4p9qhMQ_v%nJiٮg-Ύ1Nۚ-?忰36RHZ)qDV|[ n�"�.`sK?'-tи Ϥj. ؘ �ZFʹ^жSqq�D^�0o~_'2-@uP�., q������ 8������88������8\������ާ8���� @�����4�����8888���������8�44����@@@@�����444nzWBab% rV_e(M%u,!8!7ol9:莥g؆0vdc9Òە V2pPvz}gU¼30N|_~ V^㴧 rg3|w[JvMh #L4UGyS$^Hfplqc "6Ӫuq.C$+<+Uru1o-b0n'ָ_k$V0=x Otunvaj?SJh+ qokwkwq.i!jVYP^Q r|.\{n?u:q\=g|1hl詮U!UH۠q.f$UG ;qNlQ2S=i׊mO;< !ZĈ?=ёFi=K,nږ .q Äb7:Lߵ'c20T&&832Flo[O 8F^t42 "@(L̸3>c OoDŽIsuc[ l˻'ߞX;+t́qr"|pvGUq 6` S|릺uE2G={о1 `YvLj+Q/i3x׫q(I3xsY;,09*-~t@\ø'8AF8M݋?:\+􌓹O@ֺg:*YXq}ߣ3nmk::l_(OPW[E(~Jˑ8=u3&TG,oƴ75vf5Q }Bu.Vd6/K7Tމa)Te3<m'sǧT<06 T7>iCվ<xi(eEj(88q S|IH L[bX8Q7ڤJTKTXK9*+VW^Y򁪯 -QQJ4%T/fȄƵd*j{ߗ/qS>p4n i"4J?ހ^L~b0+(X/ 3uZL=EGjzAPx7O^X<we~\y%bDX|73p6& Rk7h]znMclUW3:KU4[) y<iܾ&78xMkqR2L΢_OXvFJ FyuF�.;C,بBleNX$J4K'E`Mi\Nz(_ס6);_=e^j?U:q.fρ|Swq ǽt]1t%{rи`O7nݎ%jthD)|jƂDZ싋/ :8a1 >SD&=irj5NqRcC;{h%˅hthb5#s7'֣^uxqv=a#i4.ow 8ujq;Y<sF&MgQ's,j;Eid@_]x@qX;NsWeumqv-PWѸ,tt&4nkڃrm`:5Vb񟷪,m&LM3Ljd5.L'< GfdF7ND[ަwQՒFssW^—ns,=.tsqLjqq75 5'5.YufTb$[s8zK"Eq4h܆,ܶԍZոqitDSTy F`mh6,OMا29:{~t@㖍"֝Bӓ^ǁL$>A9E` A\`0ESS ONƺq)v0\M3 7clk05 RMoTϿ7ܙ؋)ƌ�apqSn'**q_2icdQ]#r;)3|@6\t. Lbq֫ qo$KSy3ƩrW.Uu?& jE6N5.b#+nG"8k<`l+ 9,^z(.Ih_&EW,^<w'"5N{p0&y7`F؞HŽwT ~T%Oh2垦sRk,+#'^#t<Q7u&', h͋ V2-q LEr q?wށ9DQ8qyHݓƙޒi}O{:k`̎ |塱k!SIag-o&9 wRE}ָԘ`S5 $ 7mK)v?3AZzMiB }`j]A2M( !qq8Ѹ{Dy37:oplm"&UW*^<wg"n5N|Ӷ߇Lv\s]ߍsOh zaz7e̝ߐ'\" @,O>yK8�N9ơ(+Kc��8�8t?M$@���{qg��hhhh����ƁƁ����h�����qqqq�����.5����@�����4�����888KJN\����@֊ƍ:���q�hҸaro ���qkH4ZuwO: 4����@֐)ڛa+qGzLWR-VĄ4=[K3L!ŝ {iOl"ƩnŪŞU JS/q.HC 3I[ Ҹcc<E,&s9|e溓{Å<6+?QL2и4ĝ!O S{%_f2xBɞuq=]M n谕8*!-u@;|ՒrR:W:F&Ԗޭnٸ~R({S09Ns�ږ(\ltAKaFnJ+h\KSLJçŵ%yx,ʼn'1Ʀڒ$owCƹDNEKvǴfWtwkhZpCEՒd={.ElPLx<.;cI3:%B<ەgD|'p%]Pv\40Քd#Wz5ZҖIO @oEDeI\~= G]s\ع}{pk[l~sF?70L4YZӥJMuS-<4F'v{b.6I;8U0:b=ZUj<reUf)ʲp?B*8h\J|z'Ǥz`WU㚚_,%nd:lU4NsTWU5Nڮ /odյv[c/.ثN-0˼S|Vtôd~)oCU-%% ̸)jY <z@gM/% ^jU j3R:M^Wc ☿/vf}<v^ZӥJדƑ)^A&ޝD,X(_>jMNUTyJ|q$XgUSc䰶ASam#~t@\q<Hۥ cVqm^".ԷN4uuIUиP4CumD]H,-*%ո뾖 l~i3uՎq\gaBH$yb9f0֥W)hlvl ʎ{ qF㢞Xթl%xpB_jU1Uo ɳ-:tYTIڎP~`^}yėN,Y$4K'#`hܭC L]i^[kuӬ5W+_SJ4%4e=|QQXF�9U10>� 6U^U۞?u^U=:UiZqqDÄ`*P=<<==1|q<:vŕ[^=Ȍ<0~zήX{yAwQjZBOC*0g4.sC}$󫕚6]tz8J4͏'J6;N%}m:vpQ`h#a<gu~8t@\N c4 "e-z{=h\I'/?.)}:/SDB{"d8ZLwpo`V*WljZcrU c_l]o行'j܎ nql5α dܺ[iT,*qZ2f0B+(pZn,:8MR!Bh43^-R3QJ44G.8 #lWqϟ>)k r?8rp0&y7`FҸ6ޝlw˥28eWn:h+~ נơN/)hU]qjE#'_i1-U-@m/-v"m޽qvv 08q]{WzWmnEMr tYDG:J1sCi׷z=/զ*KmRtpC^]k\@dg~u},Ͷ'R҄ڦ|p⓪d)[,(e7w+}%9;\Ms8PSy! LPiۃcA\a:$[ܖBgyyzE5 nsWʵE0>רּUר *ۋwy< NMxR}5M&bBwZTo}ؾ=%=R';dYם)yܥҳtq>q<w_Dor?.hM)6:8UR塭\,@,k!TxHy>\Fbfsj9I4nUƄ\)wF5q9[ 8-hK}ոܼsu Y_�8w'78�44�@�и5qڠqP��ƭ ����8�44����@�88���������8иqo���`":/4����@�88���������888�����@@�����4444����@@@Vc "6ӪuI n3M%uPGŸ@ZiA֭[ /N7uս V?o]鱭d^ס BWtRzFW'�.8#{L&+)R@{!%Zpx5)sxw"bR[s(&L㹠qKW&T"=n<WfV(U2Wmě*4nӆqmkxd$0].['͔gLND7QԸ?k4NJH,(](9_eQWr]JpH.=T@:8WQ}.*#7 ^1hth< z'+1a~*_N ot8l?;Da31E+dj۫"#d{h̵8BK-&82Elbz\.E?486F^th,vLXh4W79<s ZЁ]z6X?jg[X_WGrZׁqrg*qlatOT7UQ;˲cd|g8@Uy1DbBhR] L c]+Z3q(I3xsY;,09*-~t@\ø'8AF8M݋?a0fX6;h+ˋ8)L6*Sif<xG,ofU;$<sv2wpg^i"Jl!ό\x v.߅2&'7(GEY8=u3&& q3wb,zjP! '[qԷjLq-DZuXVkWG0U:Χ4郳)mTF}Af8}*^<\T}ߣ3.mk:ݺA{8Q)_qR&ϺUT}emAj?U:q.Z1z7F&T?5%S<Gc{=nոXx4nFu:m뒽xHFJk\l($m̈́a-oXrLޠu6?ܚka`^g3) e,Z3;P]aSoLl|Ƹ`7ƱnǺlLxP!h-'u?u\8ǖC<{ބ}%:qsHgQ's,j'BleNXqxqU ^@֚备qjښ!ճ^jAou(SoF7uQDcS3oMկF@\Hg:7aw 81 >SD&=i"gc{h\A i6<{ wokdߛ`pdp0!3q4Nquqg*  k!%ƑֵJtF&MgQ's,jqx@q-yWC$O[ :4ɝ^2RW[>5L/qFWUR<H8s":n2c+qQ!qӼb]d-#vXFSp18qrfp7+w"0YQ T8X4E,dj_gۚPs2QH[΂`%k\,*q}]l]Tqx*&׸JUeI&4n-i6,OMا29:{~t@㖍"֝Bӓ%EϣHL|n'h1єfhrRZy@,3Ї\o6XAE8ɷFCх\Qa)Sp5<M&d r*ob85uX.?FtL~u߀JCN4N.! NQ=nLTU-፫q45Dc/zQm76QW;,woCqF*qG"8GgkSЪ35)I(*׽NG3 ?c=,0A֌iƤ1̨Tn!oޓd)[&3SötδXWGhBW]ݧԏ63q8Cʞpc0<-ݲq %phe 0whBi ̎ |塱d('u189&%97un껨i}OYtlGYYv?31=yf8\cyRU)U|![sl9iy%.^(q>q4}p6KQmz9*k!J7ҮO ;z�ƭ(~yp)n<6+ܙ|qis!8PEd`;oݿL~{7ϳr��˝8Pi\ޣGsfCG` @��44nh\MM͈s#A`0�������qqq�����Ɓ����hhhh����Ɓm@&����8�����@@�����4444����@@@�����4�����8888�����{7h51"֭[KNg+|i&t{gi)wWć\6 J>rۘ#;|n{Dړ.۞ǻQv9,&(nh_<v-5]X݊U= 敦UkI"޺n`5X?Oܤ{_lhip! O4L4nuli;1v|e};\WR jNG/GVNJAJg(ˉڨȹZZŭ׎x$xQ^=M4NqR({S09Nz]NK#ޭe&Bt] qZMÌ&{WƵ4Ťd<|Z\[__wۏR(|/nl-I{'=OhҸS/mU {y~ځ}2~r8K=s8pvr=!^\3 :]iٯQ֟c& KHo%5ЕrUҫreGHGjfz[uO`-~ECk`o.'$TH+'<@a/DP)M3m{~Hn8L6{X,Lx<.;cDZPW_qݍ떚PT p|֥Ȑm>JuMzbEz+"*ۃ^bZxfFt2L*j;Z9xxwi&۽M%lғ[;=1XgD|'p%]/^<F Xz=ZUWj<reUf)ʲp?B*и֧WNbӸhW:ovo}D8-jRʮ+qBҦn~o~)?+5Zu>;o;d?L= 8}$zE0YK-\PӻEg<hyҳ5(L(YG U~-9,?Q^12=W,FV]^\WDC%_.x㺦NKТʰ']5;  ^j69<<T+\}iY/h4atO=iiQ۟/G9ޝD,X(u쓡oT-%%KT] XK|@^5=6Mk-4?Ao6RJ4nEmd�q¦q<Hƽ.Ǵj8P~qWbz|=6ek6Y :FzKLm冰V~Xrz\|l#Lnu~* � j\\yu_K:E8jwk\o{ y5Iv<KCRC(!_Úw50H$<ٜex6kCpES}QZD%f3/{;sb'2L΢_OXK?1ڗG|Ă iYz,Sm*;l{e݄VASTyp8bW֎:$ѕ浵hT*|4eT[5[hz�rwqRi۫JMך Uq.@ّ7KJkV,<H2lO|>ZIyAJȹbzaD0(hjOdy8ow88"V=(:^;qu?,m+'\Gxp6B+@E䎱{"_RSE]ak'ƥ#pNyӸe63G#f46uqEmGiOdmwL%J,{ꏱyaq;髏*4GՕ5q<"ْW{'8#\3 )t4n<d0B3b}h,Ŭ[hJ4G@-4)[<h[ن/iaEVl5Ըk! &#iQe="UO!=~lq2ƥֽ>.=.Hy).bVfTߎ nql5nQHg x#hꪁ<- Pxza;=q6{XL[[s/FppC2t%` h\!gTa=ZfS=pEfOhܻHK/~qKDUv] T1-8 SmWv5=)KJ*썲:4kzڲ3wdĮi޸a?m|iOk /AQ8ZP4BK54]x?5ϛu>d-2445E(S!E|6G O҇j_R7T_Uޮ|FfQ7ub0,oz(_UMUTv潬3WxkO,^<dJ8jMW޵Ƶ\NIvW7l{"/M(mj{'>J2иGkYMJe_mI!vct m2.dahY_wr_x_zC1ԝd8|ߐ]7Z8yg w^g(OW&,quK~6o?E莰sw?J] jܼkL#dݭPA<de$Hwܕr-Qfqf;#HZ] u_pӃ[*M%=R'M}̖̜8tOhܵ@79TRsnkmJ~kG|w/U BՕwqͯj#qpB.ӫ 縟&и#Z2&,H2LϾ7tX%~asu;<��Vl54�@���@@��4��8888���������8�44����@@@@�����44n]k[����ȮK{�����8�44����@@@@�����444����@�88���������88иզ,LŁe&{z06\,,;09bvrLcI]#ݱQϽ$÷GiYN+p' |CcsjupV2p0UwŞUyP 'fP>[=}do;{%eRjhz/DxO\~?e:qGb#$۶(yq'Ja207if8Wjk[&<W;bk˻}fNǑӰ/.5,Yク5b %q0 ffk\ȍiø6t5<\.80adJ Merz%248=ay}4%-XYӪ2 z_> CWY>y~ԟ\ץR4 |N4nLЫ~B2#~d\?z5J ꚴ|v}@bw1aA~\dUfjø<Z?p< 5EU ƐK2,4770w|+:>%H'{ϥ |[u;8UReGmWp9Gc&{ѱu 4z:dZy5 "0\虘qg|H�gDq:PUo&GrX_Wg;w_ލ`?rޱ.1Eee`:]T3L鯛*jy]E2l-aN?X$s>$5TK`BHcVQ#g~wXwUar<UZTƹ*D75ew/PJo~]q4nYyJbyP7Fy¯{tm-sY[M![c*Ǧ,<~괡ObζsŊfgVN<� Ѭ#~197m?T?ckcŸEG,ofG}\` SrgxbNO Ý>x`z%i8/RQ^mi4I27ж<xi(eEj(8˲N8bq>qEm\xqzIx1@,X\ۨpKmREUҘ1g++Uir[e@WSZ/(pۖLQh 3C}\:P102նtT,vqID}ijj1Ba7FKznU`km&5R Ya[{=ͳn>Yp ?,͊;ɡ Wcߌ3e1TtOVE[40\x7Ӆ廉b7IZ˄7h]znMc'TԎ W4[NI8N5ޟ7L_D]h\)YTIH yĸN*TVeM^CSTyp8b֎备qjښ!Aճ^jAou(SJSa8'DQELB4 pm*qAY.c5ԵƵ %j 1-yWC$OL&泼^h׽>oTq| XlG{.YF IŅJ 0Չc} GF�=R7w@ EƼ{ƒlLiݮ).V.0<2w+*6<*tQv �50g4.ow 8mNlw\?xu3L΢_OXv4|6Ga}m:Q`hܣ;1]e٥B3XΉ+w61 OOvtz8ףD-C |v4g Sc,yjm!83.n _D?sũbGBιΑcl_zDLh f3b۬B[`qjiu &[;F\5�j_gLXE2Q"[oF,M8qNѸ)YTGmm(p]wit^CSTyBs5qڬ;ت>5aƋ˜=pTs?XQDuƹpup?|@7:99U_ƵƴD,9a <x1Nn'yjaafn ĐZ"ĜcnqG{va`" {כ '3?M;9<PQTIqH(ykC'UG_2%ily4t 971c:,{�Pɤ R'PQ{l^mqsyƉc'Q-+"7l\Eiu:Hhɯ-7Dx롸$Ugxk|S|%Rx`l->�TwcҘW]}fT*T{}Jې7IUƹ7 #[3q6|vݤqz<t0-.⌆`w`0C&}O&/%&LLHx|u8٠6|W@DdTL{͌'.i+K8TZV#j[IeTÏOY$=qZߓyhDa_tl>ơV'nG8ev a0;2Q&塱MyLjScqTIBMR]<?t.<ה*dw ,$`<ЄRNhe.R(q>qd E7unp6KQmzkP/UjFYgmc縟&8~=i{ā(o${ x.Ny%1轹;U;XeV��xq�/qɘj��,1VȪ������q�hh����qq���������qqA���V`Ux_h����qq���������qqq�����Ɓ����hhhh����ƁƁƽrKLO(ٓ^tnGlo'z1z�q.tA?ŝkiO>>۞[^o9ծ*fl"_J_ c]u+.V-$/TWz;w GzV(I"޺n`5X?Oܤ{_lhip! O4L4nul!n7t�/ IyޮKN+{?j>>ϰO͞0e ( (N{oQ C=Y6bNrI$!@ɹ''gs \!h*y:X!E"Qz&U-Յgz)^>K ۘ-W}Hcɉr :m?=8Zw=$ ^ԣO yTNP.D+Ө|96VTgX@%d}?"8{'3"͇Z8q:qc eMBBtnd=4d3C/'-ڛNSs^E ߔ'f:%MGvDL&72%˨}B}4F]# Rm  /2BX-{(â)_:KƕK :'̣WrO{X vz�[XWJqŮX`qܓ_5jJιqWUgFXtG]ibt讖tV I*jW ܌batlOn6AXLcGɚN* `ߊ dڴ؃bJd3d[I !RM ً}EΧQbu%T6pt@:\>qhwS<7WRuHC׏xtV`TjQ[|i^HR|Kd)Ggp3jM._XQ58ˠ\DKPTT~Z|my p:_$s4.Vcõhnt{~#Q;y aeѢ)D)t]dŠ q꧗cHPP:p[>ݛYb&oH59 .Wj-mOV4!WqMv Ỳ٤q c{Y,jSQO cQ U QT j/Q\T%rҸ設aC+F[caC+Q8Q:q j /2ݏcOx,*32S>C7/Tg3ݷ֨dw8x [w?a z?:N+N24uaU {4cնGcEn>ocTVhv̖Z8ZŦzGpQ$ﷷҊ)%dkvQ]Xt&L.p?d2Ȱ"yfc5m-Ďlh\\8Q̀٨q [NgVKg^&H@}YYk5,wq)ڴ؃/QlѸ[{LZK 44MzYk5zy((иŴR&u?/g 7/=-b H1$QNұky;ĥ^ay9Dz`XuJuW^*+˜1" 7[m)t?k wv٭5тn(L _EժTF@j\RH$q弗6TTh&}jB-hٴTTmC3l8| ,4μM<-zDi6{%ʃ#2Ѹ#ō~68t@d*pиɢF+UyhiAac|?k{I2~4).2 Ww'V,2cq]a̘ƩJ(d棗e۽f8RB4>]TV$2cj5f~5XM82]e;!Lꅎɵzdmѭb%I,Yj7 aӝEi4 Dfq nGmڔPJ7AV(gG@1=Jp%l)O {JwO# 'J4n)l±14nԜdzԊh0(΍y\Y~l}&HRf1͜Bn?RVWxuE~}lD6D=T2Iv{&:8!]T9ɺ)y g׭֨ |~{W*L__ea7j amVׂ\B=\H˴qjOӓw<΍7ҼNfq"Gĕ{IdfYTZy;BmrK|)F*8MDXDy8gEdכk , /1<bZ'i7ޑ⧔75>ߩj)0и-صbRR4ՇxJ8hШne4:# jv<k{4(ʰp&u_: vƺ ӕ3kR¢AȨ3wwLݩJnݧh(lOk5N2ks4%*fkV[[|YL&gWW8LC)*O b f%f^T?fpJD&*NUE�O�ADD)xK{|+:͠ kmiDMnG?w531oH#Ȼ4&_D=xYrύyjBz4\fF!ᎦFqT*U{nyt@nq(wGq$|vp8`v~Y<7eA4�W@�KH&Vnѣ5@��7+a3ɇn4P$q��ƁƁƁ����hhh����qq�����Ɓ����hhh_����"8]h����qq���������qqq�����Ɓ����hhhh����ƁƁ-6 wTf|R!SÓsNjDyƉǎ1ӤsKg>Vsf;fwKCTwMlϪ N>p;~{xǕ5#J4'v,Wﴣ?Qg4Lm=0иS!/LOlQ$5*`6^<NPn~{OLٍW^@v͛7#a 9s|bWW[=4 Xll32a١W['_z~4n͠|4.-XXӨR{ZإP4W1agkw*UW^?Og\h6ZڱW*Xwkڻƺ[KC-Dqp-Dz<v!a ӟN h_7O 0lg;#o'ØeZV7bG/%Hq\fIgZ:פf~a[;t<Ќa񇻏ҹۍ,Z3_gwQA~^LV7ruZ9FS10A:T7QQ"!%2]{rX4/6^uc3LϞbk1BdӃVoBF `WQ}]b,\ZLTig a{ZOW}I7eng ^7п@p{_\Vߟv'3XțI/;( OwgF~2vbLݚƶqoܘQJPS=89E]Zd(SNv -⼎n5i eRU%æg+=د_,pMƬDx+a,dKH& Lȳ]&J%XԦqNnMKyփ/X[Rk/cOEa9ͧ7Gu*z/Q\T%%q|t :Ru?e* UwzKENh4/8R91Zwa^Yϼ=go&^Gi B6tDnpk&Ӵy$2| ogk]Yoqc}$ gGUh6;p h"MT&npeE^|[?ߛhy7hH?A6؟#MgԸ 3%3/j+H$R~h W":=D9Yoy]m< [pJƽqQX>o֔^b%Q8Q:qvA(U 95BhoLJZb;hɻ>i777P h>b 3} 55}z Ui(c⨹Y#,Ƣ[yݼ׬d٢qnTmqWcF�A$ Y8|-3%3/jZ1]And`zm^̢2iWQh(,?Z#7,u5$8,qd\k{ _qvAM4njک՚Cq}dq#!h5nظW5zBau7|@y^y5i82]t5.E_fHk\l°~3ĥnZZ3בG)!~kZNgV?71*I%Q.Dxz|a5B6V~uVk[)^<dY8+ 4Nsx +GNhQ@o܌GpɩXOhO\иyh DU-y0Nx=( 8w1w,ƥ2b/k|@f7>PLcWZCTи85mY\;^=kw?~s3i{ܒ^51^z~ 8K@nhփjEi48Yh̪Qhɋ0G C)&,`fZ'O ݟxp݇] 18+/Ox)ѣRw}v5T*yK;U-7_&Uh^6ƺЍ8LLW,Sz5JyH$;cpt\kqBt=qh!u 6d&L#%Xouj_PxTlLGTUU0{iD,lw`tl\ٻa5n 5~MQɩ]qxlN1uek ,*:iq{r{q ʞQ%ߌuۛaOr {hNG?J)6 Q5Mf%Mo|mƆnfXl6/<mzASs5ٜPcBF `i5Nl4yj#p2]T*~F{nyt@kqɱlDz=3j<uxƶ(.zJfTNq{>i �%]8ƽ7 Kmƈ/2��4�z~݅\O漞"��4�����8888���������8�44����@@@fqФ����X.4����@�88���������888�����@@�����4444����@@@iEF|bDJ{'݅J&Y ; ,Nz~C2|q?m Qwn TIu .iި0/[9-] 4cG̎-XxڕɣL}Z72T:'2H}pt@ϓ0WybzFӓwyRdw[JsAΙJGry;e*bR)n=| Fwp^?_Vλd_ҫQz4CY"Y<Q8 >S9Bٻ~4Ni.[Ri]Z'lK8IyCSSEmEp)Nn?gry]k[CE'pt@q'GKQ<KhbPx.h aRNT5SvFy7#>\#-@rĺ5WbW`8I/䝜s16,$X٫J( F&?:zղj<w1A~!IE '5`o"ZtdG+dr#Sz6Iұ=waQ2%k:IvFntz[1L_ҽy,qJ;_gx-$>A&1<<==Cc|Agdy]x٬M ً}EΧQbu%T6pt@qAk,T'>6Hf[?4zAP;rxǢ=#3Žy]r NugGR,1λLjrq]B^[ڪh;kE5)t^f&%)?-p  g\)՚^ٍ]1m8|ұ=wI,)l}uXІ/X/Rh±Tn(J&X/^<XFNH׺:kyɇ^J/?k <\~6bo5=F/6g/c\^3N/2ݏEWu#:4)\D&8~Iu9ՎDPu/ݛ)L.2u.p?ׄdL"E /wubJq6D7_qqBҽ|Q?ߛhj1v-<Oe?(}PAT a\ Qpά4μM7<:Y..EWJI.]T%õ +Kƕ$VB/^nwk__[kmZ+5DDم^4?Ȥ}Y+u+}noH{r& i}&ʃݛOD"tjjW^*#R!FXfrgՒfe4OlZ~68+Eu  ꉃb)6j>әUƙ 4C3[/(fsL*# rj#ʃ{qt`;JǕI믺GnGsPtq㤟y5$8(Ɖ#z7X sk sAJ^Zq,;08#;<̘Zك_3λ82]e;!L2B"q[~}8dKq:H2EfM%Hά4NQ1$2k�-~{O~fM ltbB4exNq e;Vv/иq{˜q%M8i'=p'goڋbj8sx +wVy1NϠxիAi(2[: WصbRR4Շ8קNvcVkT҆]>l=O]F2}9~闅ޮ֖aX{ڑ`i{xq"e'xoqoy]3'(PVҶ⼒9hq:H8q^Y<5Vގ7w_Qm NojS)-(|ިV͋4v%9>+"\㔒d+z$U2A㖍 /1<bZ'i7ޑ⧔75>ߩj)0иyjNQHTv7Tmҍq8h e^J{cP? [)OjxX툏p0H$2;EѸ><=&`0nd;U?1`w*:x""b/?Lk\[l/H|m2I[Պc;c IY9s8tlOѸA.yfO#?\P||m*DL j%Cg?7J7I 9o5j*-ko.3yj#pGSt*ƎLΪ=7<J:q82!2Ǣ9ȍnnAl4}I‚>i �%]8�h��q�hh�������qqq�����Ɓ����hhhh����Ɓƽ����.�����q�hh����ƁƁƁ����hhh����qq���������qqq+MބP6z?>1t& n uv.h3y¤tӷ^MLqeft '^"|D3>)T)oG!!x< T7n4|Rt+j¼3Ss@U ^4'v,Wﴣjx]gdj͟H7iix4#םJ7Բ{'F 42uh]xÍ?fb_ׇr3~s|vsVRX*Gל~mE 8OYZsO)4B-ƅxd=fbn%9g r癈k W7fЇFI yxTg,iT)=nR(+԰;eXRegާ‰ .4G?͇ĉ?ӏ_in- aR\1s Ks"A@)r?$*+b!{4jg6<ǠмI}7g2qX,K񷦭bj 1w;M ɦ?/о"J\fIgZ>-I&1=^^^ioڟa2\ԣwFNeSl8xz)׍d2n>{n DWAvWSTwgK"vg-=e{If~a[;t_$AywsYx#!::2/"Z5fւ.=6*4oV͌Bml`hQQ"Ɖ_"S5Q*7!؋Ejb *^y0j4*}9CZKki*pt@qW:Uw/\|Д>"4nA4yĠquIa?(&ތ`']Gě y${(KMgzj9E]Z<(SNv Xv'3XțI/;(خq?wLOonWCMMe䣣r%{uH@𙶖�ْ*m͝%y$qK h`~`5ㅞV̬h- %XԦqN5f _lޱ碰$DK+US�8>Kp2 |ڥ" 'J4^yfҋy,>q ě<zС܁oD>N/^/%ש;B"Ն9ϑ&i\1LQNiz vlKj)[̇1m3, t0?R;>w|)^P:dۚ >7t;B|hq$2\\TG%J/++n_{ȷlܟ7{ffEfl`J]868XA" G^W4 B<6-v +K-P�qyY,vqnmM)yF:E珞eXINh])*nJU*eCyEj%r(Ov6иaLbw͠/0KB5θfLOY$ O_ q5!Y+ ćzxx@7gGp| \#>NL|7Q}nkmQ,*Sz�щR]WJws.cْ+ZpuyRlѸSsVmL4nn̊fqEmB =- [Max`ES�Ѹc1Lϭ5r2\WL;x7%wMܠq NW~,m}{+>ސM޸{"pd R{=\C:Ti>Ʊ; ~k֐אkEU+kXQ*Ɖ=5ND&R5D^Ѷn5LW6/![0 q)V̬h܌ lV?\_?`<=ܰvG!+ݤkX)^<5,N�q[X^Iݽ07<8pt@E"gq~r**S4nAuk^ >SjMP} f=5*>L=4>f\)?7n䵙`YNm|LuǖZCT}݇] 16݃vpA>?N8,,{I&O5J-jתl3jDT/\a3g/aoƻN>g0$'wzu}װ7~/z3jgByƹ%kb:/鵥qsnf3jq:H8m!Uc\nɋ0G C)&,&A ,^<LS-ƞ,i e^J{Tjl]M2Jޒ?NUK͗{E=ڡWFM.tg-D;G6P*cև= Y*^EX׹&r {mMθP.{F"^R+:@\69F>ԐF's<Rn�qD;֗b O*tQ(5ne,EUDPɥ2Q ™ǡ*㭦8[KͨԮ8W]<_Xfc$fAXTtݧVTn 0>)=f8tlOѸWJYOo6+Qmzkk/QL5ҳ8䩍,ϓÝˈwaPtnL)qVM'dž-{v�oqxJfM\#/Ƈ_;΂>i �%]8�h��q�hh�������qqq�����Ɓ����hhhh����ƁƽM ����:E@�����4�����8888���������8�44����@@@@�����444nhz(:,C%3xipZ~>#Ǡ]gdj|>'KpB#NxF,ltY oMݳmǬLe n?-~Þh][?s[4oT DMBtR'<+ߓG!.m.o7ePtNdv ZNݣi< sŏV�73o/*fReXRegާQ4jbƕe*'8_Vλd_ҫB]@a+L eBd8ZʧcCmKq I;k-!' MM;um i>,‰Gvii <8Ҫ47W^j:eW{!Oy4V6f2Ȕ5^r,=c0,W3c}rذ�_`?p VFtVI|0>K+իJ G]O6u;8чKA(rjޞE"y}Y^Ǎq$/PYȣPNߊ d!IE +5H P뾵R\+VFEqOYnXW]b);XtV 3~)X&&J#E4v$ډY,6QDto`p\Y/^y0bKb5n^l+v> +E gmDau<|cӸ5VRƩPeT/˧]ҸC\k"Z+=6FNH7w<ioH#,qDg.G]^[ڪ*0St<re_Ni.AYR0O3jf\hXip/Rh4EӼ~z9DuNugGR,X܊Ʊ3NU@l8|ұ=wIflS405 _MT!MVwt"Bbx`墪-Xjk <\~6bo5=F/6g4e:uF~q/2ݏ̨q w_ww@ yg/SJʨSL^<ReX9Lgsq+9$0#$2Cn$ﷷ8Lo-(,/RQQPRmfq=Cl7kv SY Y]ŸpZtL2PNZ WEh1<u ,*t^6L^$/3l^DenE⊅DFR3V Hpά4n#D"׏'ofyf ּ*%dkvQ */QlGո[{LZK 44MzYk5zy((8P}awjM8<|э@&5D̳ Vx|^a5%Dz`XuJhf7wwʤBaznLtuxluPx,nq%A{5qvEu <>Qg8e'˦);sҘ橯ͦKby'JE"D:e/0Q)4 %*s+gKXV-ϰtfq3ʃF![/(fsL*# rj#ʃKqG2ܣ'lΫq&Ѕؤzsиi>qhr/Xb{4jo:yjo\s2NXUW |{l^qҧ⶜["UV2Gy'QXZ_Yɳ2z&C;R/^$4$Q.•qvDfLCTCn/aK8dKqU@lԸ ҙUi4 Df>b 4v%C:%8=aLϸ&{ 4rݓ{‰7Xcwptw]M9h\{Q,ֻh@q/hT===MyQt^*:P&/`P- zffNPu\Ji[q^ vaLu.HOqz`l>KK,Fykp{4?a~lVg%ϦexEJeĺ!mdwN[K͇йF57lwS'1u5*i.ߞ*r_ r 9s#.EK3~)rÛ3W%eSSih }szyUJ 7UA2mx`2[X ^Jbx5Nn#O)ohkk|ӗSR8a:qDl>4U؁`44ʫ9Em"RPK7nM"Om1 2]tOƤ.sԊc;c ؙM7Glٚq5p5䌟b<rI4?IĘܩQwJGgl/}IkDf[?Q]E%#�>A u[�קʒ햘yAS_\8.7@{a ^_KRD oG?w531o/IO#?\bUnm e1Ⳬ%֋(&]Blk\{sSχ;ťS4vdrVqV#Vnqh2!2ǢHd#7L4xѨ^tv#/+ax��,j�4x_iIfZȠq��Ɓ-|0;X,FA���[ZFC(4����@@㖻!л;r8?:�����8,q�����w8����@@@q���{wi&7fq�����g������&eI"������,4q������q�������h������������������������������[㊋�����~iD~\ * �����`)5n29qg <�����XJ{٬LiL{]c\KFg^ JxYVReӺЎ,ǖ~'[+qpb"<zJ#dZt%I} wG94 pϒd3���`i?+C'l iR{{a WpN=/ JwiOt}gh_^r5a \kԸ5G'55ZyGzS$$5Nvp՗#5���`YiܬLigG )O[s"XF֬y+Iv/'%};v<mN`f͚O雷-h(Wb/Ek~3vk;^/6<W^݄B׮)Op˗NWott\FG,+6i//i߈o\N~#;>X~/<D{qgStN����X^g!k'VtpD ]S [kQgS%g%l'd!П朳qDmո^=ᡗi';JJ:qtOTQ=SM=wa/VQnj%UaG4R_z5^V}ןFփwFb^q~-=Z>4bU?zuC' u^+Cp tN����XvD!}}}5(f򯴕R]+}Ћ-l\T,H˴:8']jaU>Ɵa<=0' Gt//W(q|}sNIߑWGpɨq>Fxz=s!WYLN^USz'qiUCGG{q׬$=35Ud k7%hq˰Ƶd6:'����,;}5Y[PA&70+C+'kո~"-SF}w8k+do ks47kW2]׬\}\[Vgut*<2i\lj2\rrӿ;Skj ?^el:pE]l8<g38ig9���`yiܬ=zP_ rQnkZ!7u޸{~[z"B^iR"{,-6li:XE(ѻ#{َLupX%3ƽgq}39&;sF3OOkðq+>QD\~u;UAHskI ����Hf{j έw+qsvscܯڞb}'uwfO>߾1ݵ͞__Oztׄw Z%J +SKL"h7lꚯA}Z)zxt@"q(Ǟ9wCk {ƕ_>thn eJVPz{FGRlk[FG0>Ghz[ÓZ*9���`hw|_w~YJOo*g%;?kWqÕlǍ(T~Sw5sr^j/6l vcnmeWV~ځ;n퓞e5?l]2\ʊ_֢t#`NU zi*<0qJx:;aZw9;}'_|J}6'>tp{߸]nqhB?s/|*J����8\~\K8MLvfRiagi6Fd'T����G7UϮw@3?ƥj%+YA#zD֟yz&����,a7O:姟|o}N ꖌAd lJQ9����X>h|`o�����@㖩�����Ɓ�����������q�������h������h������������������Ɓ�����-b8�{�����hD|PB�����и8#@E����qqq�����Ɓ͒J8����������44nI5Nǎg3�����44nW5 h�����44nWTTKeE^����]ZxP6:;x_>Wmz=љ@wړrqVNRD N29)9Ŷc h.744dơhOOvzV{pg0��`/nExNk?#GɴXx6i㺏V}l3~'[+ֿOc[UKg. wuNN6qo _nP,sϒdKq+S5'>rS,57:?23;ݾYxJa.4='7sϥyh q&%%ŸKMrsиa[4E#ҸM_w);|uh��GʚE]}ZvO}xҐr7?ij谆xWEVgvB$(=]~8srTtl~wgQ\eh܈vӚ#/a%)?0ֺC\m雋]>޿5nXۜy͚57okx8νgq?n&lxm-J-`R#Otn1+qᡁ~e^I0:sxQc;c]L&eMG$ɝ;w!% ƍڢq(x0#Vϕ*_~7~~zǩ>_"fOaW|w]��E ߸\eEnsիWņV^݄B׮5wOɿoK'>#f6r?0Ϊ#)^m_ĘAM/N+>(rZqR2y5w3Y~dVYUۍ++qYa-K_srdö+MqDen{O1D3qgSbk\4TvAi.G=X))J:~Um?s6~߈2ȐTO_s wXUk>s >"nD+}@> ,Qa)pI0-OqcU_Ļ {Sh2<b3;]x-Gt.NFuqܰg83fG/?uIc;~P-8��+ڏG˧_[q}H5*jt<#*-ÆaW/"2~y*4I֧_i,/VQnj%Ua*AӸK6~<|[ޮ=dlE3-YEriVv?ܲD])?_O)Ѧ_`_D,92b,PVoK[Tm،1FG܋$V{aqea N+jh{iO'Ka*E*+lAdlJZU &Qa)$VLc.Cd1ƩrI$j}=U$2t8q+|O׮\n9k@d8j+<ǿ�@ k2<kM6jV~룏_ƹ%:bOFŽբ]r#økU-$nz'*_Ę̽y γ3dֶl޸>pݿQ<m7No}ǿƙG4CY(KkM_q1K-;S 58UkԇٹV;lr|4@rR$7)sX3lGeG8N"Q8lvZkr;q^EP4"yL%f2vvoRZ_u%_}5 b͊ ^Eq��,4(٨q+kVH\͒+W h25kܗ'9_VfU[Zzl"F<[8>cVgָa kI)W庽q_kG_Tu>[(kO&g}m8+3:}76u޸5U wύ% + Zo4 qƝs- KT<O4WvLqQh-°$p{qƽq{76CoUXM@U5՝E'4�ӸhخqA3S? upX%3lg}39/urMn'n:~]#Xq[.עؒ5n@Uxk _ #^)ʌF}۳kIYt}p܊;? Jw1HjF>_Vi_Ozuv Z90 vqBa.iz؝g+<l@ݕӨ?T )ѭ坥Kq w*:Cf8W ~R)ՎAv\%tX%_^F۷z&��H_񛍝rVjxk3t00`�&Fl(k }Z)zxt@"Þ9wCk {ƕ_>tv/2Y}l$ޢeVxg rMȰn#*GH㈾)`"R,\Cr'g㊕\$&ZNӈMdBԝ}MܯWZ ݰxoqQtύ+ϢS vPTʃ 1rJ\-' $"jK{;Tm=f2LWyKq 8j\G+ޭ4ܳ9rڰPmH?Me08GV${պ?r�2 p|j7IW0>Y/?:Y&%5Xe-Ԝ>؃SբRh:r=6mpZ;ZIOwEl8<lǍ(T~D,fn-6Qv?O?F7׋r}/) ejB>_S%_[Z8,_q@Ė?ƅ٫3'��9olU!OL/74jߟ^FJj)z qX4mfV 4��`tWfbFs'։ϭ?1,p9p=8jF}8Ȁ��Xa_~'k>7lNKPX<cՁƽύ����`1@�����444�����888�����Sq�����4\`����q�������h�������������������,WS((F]]h�����rи2gHҐYָ~^ggg}}=h�����rиgϞ!=CT ƍPR)A������>4jHؐjJH$͠q������A㊋!ICm(`ooL&�����Xr+++AHҐ!aCo!yi:zАF4 ������X:UUU566"=CT 6$oH&5n||YG*������ˀ:sHϐa"mҸ7o`j5r=H҂NCXVVV\\\XXXPP������,�Hn!B i1dH̐!ICmC6qW^ T*\N@XSSS]]gϞK������-$]H! C2 3$iHհ+Hަi8򻡡!VۋO*vvv󛛛QB u������t IR/$`HÐ!%Cb IR5_uUlA39{j)$ 2AV������` B҅ 0$cHɐa-aWTMjr:l&7<<<88O TT(R������� [Hz!Cd )3l-Mi䰫زR?t�@-������ B i1ljt)3792N3������,0w! )f&7qFd9������Q0{3 i������X|LD?lRI ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/tagedit.png�����������������������������������������������������0000644�0001750�0001750�00000146726�12161032160�021663� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����,������sRGB���� pHYs�� �� ����tIME -f��hIDATxyT龿{w9{Zm;л{(d!D 'šڙvjEq�TF!̄0BMR! g}Rzzx͟~M�����^2^z'LeD������Jq)%vs/itY׷tm������ RK^m˞iu2VV�����p-\x)t'Ly3qJI *JT�����C̖-\x)&L9US/ufrF!ɑt+** EYYYii+������>f%~K,.1^~S t/~m39H7or>QJnII˗/ r�����!NK̖-\x%LL0%k{}X@ bFNNh~fJsUUUiiw$G^^@ p b{C&&L 4qcbL <577T*bܔ:SD@ @CY~~ $A7++0abč!SϯxjVPP# GW?JcI]yc@ xWWb9%>M /+&nL ~635mL <WVVQ6^!g>ztQS@ ăX){,"R. r�9LNy{&ѣĊgj35yOԴ ^J亮c[m/G,lAٖSN9@  qS Cߠ|~%!;'O 7&L<25yǞijg/>jl޴Y<(i_0rH1b?8eɞs82x6׶v4t^':Sgf65Ύ:f͑ ]czr?Ru<g%E#a "=g%lKn^璠9===''X1qcbLMzniiQT=Lzsn\}3Bq$ANKZfR. 'KDmKZELMu&eORhj}1ڇDwYwW$DzeggL5mhf9yt(Sʙ>{Ę~H@KEݥ+?9yʬ><y๽G )D9D)r!9\byyVeԑ}:Wf{={X1qcbēϯY555)JBQPPc<^ߣigy Lf)c7y\]oiϳdG'Yssű“6{II\45LjgJrJS];vlqLQ1i#':OadN?4љg΋2g$c.B i:u煵zJX+<f"L@B27y:'JT3]YԠYAz'!#ehOꊐ\g3i׭-?9Yl6FRS&Zid'sظbBb)}ϵmK 9>ew$VLܘ2db=L}e&=Sl _ĞA9@|1ž'Nuvhaf8N}Z;;kKso 6c'=fq3fIΨo֑/\;y j gp,u :wH,.-* .3o<V6uw镥אmWvĈmQYƝʔF`͜-^Ń!gi{%<GK6 zʿEnz;eZ\+3j]EHgj,*nobƋ6))TuGI#uZ*/̙]@ pg)g4e䔾Rw}jf{u֣GSS'Ss~mύ=K~}g_, |*L+_ٕ5c%7=SB w_K6vs86Ϟ4ژ~SQڅWLǔ\tqrYv}g~%~5Dδ돜j 犯]%8lv8p˺Zl9֜r0eG\^޿Hx⥥Y,%:y\)3c([exyc"̍4xdKYoI)vڞ-MurbL"n^yyQvuwe^ݘ9nVsh+y3)dSWwv>Yt2izR3gN1뛲M8pʹDZ3p!,hg4m}ϥEx˝6ε<R%Asrrrzz:bĐ'gjW^PL7QP֣fi{B ]Lsҭ%Ğsس'::qӤ'1+2}.=Es&\7l;M1i'$4elK^6e'̝ò,qJz$g\^w"K.o%K7kFkΞ5gLeꂓ58_m5F"L0yʤ^ vyL0cS6mtbis'1mKݥIjɩN'͘h='Xu<uKy{q|ɓ&glyrq*`ܮKl &C ePkVϥE^;ε<ҞmK7҈7&L-aݞKJJh{&oOyY?{B ]Ls zYsfL{nzgO<E%.$YoNn3@<iDGڞ]&U9^;ܔs:i3gOᶛJ4ҋ.}*KOp1gF"L<Qq9ihܓ=''&7=߿{ %gz`̹nsE̚F>~\7 mۨZ,l<6r4ĝ|zG^}~d֌9aՔRlf(0=R^MNGA\$=_~gg"2… #6?;.ΞGiΜT Kƒm,b{\p j4a 7Y޴^#_irx̹͜=m.ڞ|n  7G,W:9Ntv`˥-2%6͉\ݼL5PN @۳e9.^}TM4s47֤7[v{muwv4Mawͱ>\8-o#)iΎ]O0w1BjXe"/fSot.Ӽg{e`sgj{oJ9 @|t==oTgn(%6,\sL̯'S'|h X+:\+]\f߰g^c;;.Ψ3Pf1ogNiN33L2,}p姄QPt,5M~QK~xxTD&:17)sڌso4cǞ{ ԻUm'}pGGc_ )8;ڧO SRN.*;w3Ŧ]p!,<eB77LXӊ\Ⱦ{zK+|מ'O\OJC 2YWћ<ulWf4wv7=vhOu } {Ν5lJ`n}ӜY,֛ܫ`93]9˳JW1Nleۺ ݺuV\g̱ZYxmgFY&WTQ'bgKbL bt՗e[mσtLӪ6ړ>Jڴeq:Ys\h+YlYgZOjtًҳ MCӔh Eg@ #<K| r�e䔡=>׹g7~?ә'9@|1ʹr_{:c\W'2e7D-0<{nmΙ5sIxS oLi2yՂ ̘2<aV,sRov5əZZlh-Sepvi#S"A:cDzϓ&8͞NԞ2TNnsmkYnyI Μ4*&t1 BS_ϙoPmzY6Loێ?UUU>=#ǛA; .v:j#�09+|K{f[nv=G"C7u@p8w ܞ@ ~۳=E@ aP_oD @ e=:�����S˗g������`�����������=������{�����������g3������g������`�����������=������{f8�` / ���hϿ�ê=ݼ/)H���{ehn�_>{>ޚT4QUU2�g�>b{f@&B�{�Is+x;(A;] � a�j&=�{�M{� {� {`�a�aPC4�{Ղi1FPXn�{MD(j:FYj=Qk{ܦU;`PC4�uCM^M=F3NT*O&{ʞ-o"B[c,j:uzxڳbCG|DYywA +.?}f ~R~jhi@XԅGYq2ڗ=`=$zZWԔb'=$ oـ {`]ٽv2=k5k93}�`9t˗d*{{n99_DGE{:zĈQksSWׇMQ#9Gn:dI^K%Gy6[ѣG wf;L[AQl7 c7~noҾ񶶹Q;y-8ܬLڻiܓ6׫Yskt)Mٮ6>`= Ұc=QG3�=LfZ PGqǂR#_MK{5wǷܰx+Ȇ%<1YQZ4Lj8Ie!iUڳg._>>u@ߡ7] }CQ[?o  B?ԋ~ӧ-dr$ y-zIEf-}֌|?(j{)F/w>_ZR0ݨ0UqLx.ڈ�>VӞ-2K2M9YS| 6Jfj%5x%a15=Wׂi)AW\<sW�SݛՅ7.I\nfIޫ-}Zx9=9F׿͗1/-#I3m۸Жu�ϿrLɞ5Ug>1gm~cW^=Tly}?dGG]3WhHْ>*yu曱䪄KSu;yQ-i~M.2Eeb{k2÷ZMeowʞp C4*˟>ߞUMdl&$7kk чIsU-B<v'=ij`se}Ǖ-jyxf9#)7yJY{XUVmV]( u}|nOl|Ip*Mmr_+lc 茘iO;05h{`W|@l+=06QQDqRPpL嗇VT|g{o#cD+ZmíC|*Rl\hv6�|p<cí23Mmc%x 5>&._Ln)Cbϖ7Qt,˨![E|nRmt'{/GM'>س%W2∕f)T܏YSsÕ%eY3)XY3]uWgtɠcW7de\+y %W|VJYU=UǸ;Δ3ةb+vؤzb T-=>gbC*g`#~U{fJ+> {�S5WI1oI&2EYRTzN{c*t{p؉jMG7�=9s/Qf1Cn+WX~}pHMdFs>V9s2\z S'PP~dJꚄΫMwG:my׎Eyyyʄ&/!AȾv"&r+YzC+P?U25&. {=E7": Zmiі_5#KJ^GWUUԩ,[y 8 ;D bq}-/462b*g`#~U{+> {e1[ s="Cm {6~һncv6rL\%m,}-hO j:][ԔZzMu_Spc0h/^QAM._['sgMչ_Xh/){&+Mmdy޳|(eKGv~9$)ƞc߉jK=/k}$c;,Ǟj}ba3*K5{&7fd7s왮Sݍcls˒}KShmsyp/i{^(6;e=-Тrاm6on:<xYmx>TQ|7az곸x�w3U_]zwlOxU{Vlc&מ gpw}A=cƼJyϞ(SZB fMr3y`gnhj\5aBniWKK~NmԒ5u4 ajvskkz/ႽW5ֽ(p홱R'ċ О z\4iw$,B8 -KOyd##崣g {gum9Sn b޳Yy07p9*=lTäi{>* ?ԩ¤gjM)RG \h;e�>,{�=h'q9s#?K._ßj~|7xٯܣaarP(crjeϭ-D0ސسJU>:.=7T^簸M ED{f2['trLy ~ k {g6ެ.ܷq9D 71EۢyWTW03ڞ*,X8 |6ڪtx,�{�<Tg\ʩz}@[ (\)r?&zM2�g�`C̫N|c`̡&\{д,<{'?K!@=�{yм=KI$P~﯍Z!@=I{PC4�3�3j&=�{=�{=C Dg�`Cn��t���@Y {g���Ё=#g����3����` ���a���=Þ3����{=#g����ٳ#&]GG{SS|.ѡyeڎƻЎ_^ a0*>뎦=#Tw۞M(ִjʢ-4x/蓃s)RMtuKӯ#KwCcRm���=="P& Jh[n_Le͝}=:ĒȕuWo;{ ���߻=j]w{S/ïvu(emy:M{ΩٳwݬVEygq|gnicGWgkCRy?}>-ud=ߋޖYHݡ*}WL)^NM\!ώJq֪sN>~3^V;t*EΡsJY6SaIsIԔDag����<d,,'o //ߝ=Ǩ#bk]W#g^JW۟Zp<X)O8issMJ_rvus~jUEs̓AbHJ:{=Vh;5_q}hZ=[VʲAfEKͽcab c­}@��� k9}gR* /yĞڵ-tR;g=X39[yj4Ə Hl{iώ3!SDŏמEfvw6ڟ]YSEt̳÷ Ȟa ���?5YYgŹU!ttZ=GL/hPƶ.;?FBH|3=@W{A CigC;^Njei-3c=���硞Z{^Q=ˤvDxP_[|Xk=ScAsDc53&z+ŽRբj#xz~t̔q[ƞ���0gj͍H@tKz K(ܒoO6dBPٳjג2]l.ֽdwU7W۶_Z wٶg-eJ7mYek daĊ_tטܰceLM{ƦKoTpá6왹Zl*74<8޻=���| 7{y9@iDsj[w_H(ͼu~@}?qU cp/=_uJZٞ9KY Z]Nqb; 5G7ά}=G),(~Q<l=66=s)MOIyMujJXs3��'pg{���`ϰg ���a>222���{=#gx@��a+��g3{'3�� {F `Go9}-/rI!Qy5v?G?}O5w)8/6r/3`-��} =7و/{ 9_y;Yzy?OTV]ɟo5=ͬXM 럲=W>\Vz"5􋯦mg�� {gbN#?̮&- O6jZYs=ͰoG  <[š3_'*5t=bĨ5~9dVS6XØ1c[M{ Oq]æOvԨ#_7&͝8r%ǒ#G:`s[f/7=~aiϓ⠢VFmO�a�Y;5. FEoTg쳳UʞvYRެ)ƞc3-@FR{(CgWHQjDM( mE_Þ=;_l{a=?�g3�g[\ w F:]䯾nh|<3&'앪:giϚ3Yf#F_vڳ%}'/NיܡΜfU ysc͕Hk"O;~a=?�g3�g[F<hy4w*NǾ3Be,\و![=g*=~ |7 ~,́C|{lN36dڴBޗmt { �=Þ=۲gu/ŨiW^$&Wf_!`a߾熊#G]ys2\zJ+%I GF|4gƞ=&́[nėͭ6:Fn9w̗TvUf evO�� �ٶ=αsݷsFWrg}Tد==k~-jg-=XZo\1CS]|הٳ&K]UfGڴ>rSٟyڞ[Վ#?wuOx[9;Mn?��jjUձR'Dm>RRSeEUj%6FGH6' Zw U- woi6 V:# ;Mm++[fU5<S$.S:Z {=]5MzNƲlس"e0̆C%;5zw>;8{&]'wtܽ"bT\=Q ] �=nw"sOq}ò[6]9\skn?�՞EJeryYn{O+kj 2n vO_}NY["=kN\SrJ=ޣaϰO�=��N{V9Q/ʳwy>>(6=�C]@](Ğcӯ^p}GIז=&D^v2;CR@ px,hѡ6K Y:ͪ=W]rWnX) ES/-DxEԛR+$mzXjiJ3`d:=HE|RY5PIr*nT>+с<=�nʪnnnw+=/3{^+ ;esԔ'<RڰgڌjUՅg{ B/iSR>)6#=cϾw[yhw$h/*u}́^.NYwx7ﱴgKkƫd>{퐻l8Qd(AWW};CM��`ϵDss̃*e1yy{"Dk0E<I<rt|7"ߣ=ǤPUEpʒYl~y[l+fS!R3+PqE X|-Kb%J#[@ o'- dB6٤m;VʷgrDry c=� ��gƞo_&Yemnlos}ǞY3=_nr\AE"I"W2r\ybsر''eUc>DZ{H% RcW/ '"Iy 9 $$Z�3���`Ǟ*>xy꤄"U r=הgǞQcϯSUV<'^B[jA|⇊ZJ TGo ֤c0Y\?ʞcl~cϰg3���0ٴ8` E\y͍Bߘgu&[{_ ˪TjUyqվAV&}ZVm˷ S[~3qIO[/N<+k{ $28Es{HܙzS/^Osb{j6כ6Vqfh)2C\ߞ//屧:i{���`Ǟժ[=\._,HihVU&"5=D|6+\u_ڋ*P[,D$ŲqǩqCEBH$ d̝ \vўMR~a{=ޫZUMMQ2iOI,ՙ\wm4I΋\dيP_nq!)2)s���ɃU5~|*4ڱg���<<OZ+mF;�3����{=H$Hg#� ���a�|\RXv ��� �Y_]|Z-���`ϰg�`V {bb⺅+ š脊5,���{=�{MMMͱc"##4G,,..>|yLY ���3.!�os\[[0nܸd"Ѕ }C r6O.pcyso ?qĹR=<x]?3-{@{KKōEr= ⁍FWt+-{O臤Zkܣm�=�>,{ܹsG|_bbbIܼE{=o^ܳ~[³%]]]UGq̦!h3�g�gwɓ_5yRMW ,/񈍹c-BW{Ց+L?pӱq2/JL=\](K|@v>8\llObqy6, 8<UO}*e8,wYqv Lթm\$!2a��=S<f̘Tg8늦Ւ3':ǧcIP%Mvs7[ &E\8dO<]vIY*}QbjC. OCTu2x*%<|GmЩ Wİg�`�Şiu><Q'NP\XX8$=7aΞ,Dƞ9w ܬ^N{i؂ΞT#=QQۭ<";d_{n,^zڟ]YSE]=>=�{�|R/RgmgX,.kBNv,Kesq>D 9vڳ:+ d":a@L{֩ cKl`"ԉ={� �xԤ&hu;v,Q炂!Tў"H[0<iF6(˟1~{iB=Vw$>+HklLo>\ 'mφֳV{ y<4fG"4{<)=ݕig[2/;1" Ue{"X aXsss[+ZRgKo*3[}%{~o5ε7=}س.E}NT.o…Rں ;ٶ^Ъ=!57:m%'[a=6Ȅ[RLA3�=&lVOyU<cQ^/|ǬسeE`Ҟ/_XO#: ; E[[AWJ-bz%ou*n_. ES=>{&?i5 ĞońIq^=@dϽ:!=!\w`h@L)0UVWd}<$bIԲ[a�|-svl*uYC-n᳘iI ʚ%!rʼnY*CZZ-ɸ@"-Z*^CԘ]:š-2,_DY=UeN<|h_ŋ޽KɝRWVWVV���{~ٚO>?myVH^fi{^Vdb/jO�<n#DᇚLy^h^Ȟ>u,*k`: ^@-ϟ7Y-%g,o=l$9XsέX>OTP(n\&��=?{7#\f'/o8wlц�}OjσX(" VZȞHLe*iy–7vl15Ha=/vK'T__1B���=c4͊=?qxVy1,NRA}]$(XaʙKBE\aX/?̰|o����cl9;{ő ʼnX*[uem t[AרWg4==Þ���P.YZ'g Aw ec{$k\PٳڮH6=[-9qAEy wb*US.Vذg4 ZFJnǼg3����{į y<GL\b35jo]["d2y! Ӓ@LٳT]FeLp-*|X$"GiѫT <=dذgզ8y1c|a ܀=���g �g���� {� ���a����==�{~[IaIZZy+C���� �Y_]|Z-���3�سnJBq(:bMr\���g3�;v,22Hsdw���d ��x\[[0nܸd"Ѕ }C r׏[.1n����Rs΍=~~~ُCХ7᜛מaϟ=��� �x\__{nZO<I%Y'[>²ƅȄBK+1޿Fs!fQDh !%%1㽓q2P(-3:׷���g�gJ{ZnjL(HJȆ$],iYX2-O: ^lw?ބdL׷���g�gZϟ?Oĉ:,{p ڞ鷘YtEmyx3����YR%$$U/^ #8tt|oo???!~PrfPWK=+{fv���=�h{njRiq:;sAAP=:Y(Di0`i,9NϚs+xV=[v���Y:5Z*G*T7߭p NezVETdmUFwz V畿}:}Dn&\3KtzUxiT![xb7sss[+Zrq:}]6׫p!ɞTg}sり}x3��'di"rv,}7T9z\Sz⾬1ˇҰ+Co:j)dڥuCbaDzT*UmUD8Ճ) {{oh?3kϗ/OƑ[kDssWuuu kЏԟc/Z&ƱguVbD,ϋɲ']õyb&Gi^ǃԞo���>{V9Q/ʳwy>J%V呁3Y>{[kI6>ތ '0`_@yl=LbtJٻpR$UzVIZn+kND-\}#[o¸/N]G|<ڮ+EZ Isb-:<$VǞεZѡ6K Y:Ͳxח̗\'ykR{ݳ~TDaKj!=UeN<|h_ŋ޽KɝN>őZ$g1���{geCw+=/3{ƗjumxVyu熆K!-FuIeWҍF[eX>>_ZC6^e%mT- %A[)U+nZvNR<Bƌy~ RWOWyg|?zjIz IQkJ2KEV\{kgCDQiXuQ:sέX>OTP(n\Oa���fϵČsÐ*e1yy̨O/_D6g/~[$b ] blr>dTd#W7+}3#YsXWeI,ĬʪG,4Ex犴WV=֘իqE=Jbzzw(&{%RT"rIOϋ]Sz6KlYeE=[͢i0؞;zhz%r]njjĘ���{ǞkR<D1sݨ|jGmo,;VRO2P̲k<^yzҰy2//O!<9 ˛+^oVc>DSwxQd;oռ:MIm"+_dyuhT-Ŷelgq:����a{6MP~=97L̘IL W hs.GDwE~k|i40Yn?Z%ժ�>˪W L#^N{{c왞\St46a*6I͕ҟ1^k6dϱg,cl~cϰg����kn+U/zP)K?K칰ĪBOS <}+eX)uԤ6דKP p}-woW^6[߳Νz<3UI&/^?8{&nR_t&P^g#ȼ/*ZZ*X%ǴY/wk6dG}Er_/x69 u\<Tq5i@uqvfq��� {>5C%bQ{&L^JN4MzVpE xɲ[Ysuq"9W~ 57E@iO 8|{e/_ Zr6e=_{yŽaTU "/Zr37e*G2wHvTr ,s-H–a 3����{o \S|����=ÞS$9״rMq )/yh�{���`ϰg{JBgj4 =���g3�ȞK K[Ax��=Þ=3{OVų��� � ~OLL\pB8PQQ&`9���`ϰg�`Ͻ9vXdd$Ȑ" <�� {%m?ҞkkkƍLpohzzzANWvL^#OK藹[,JElzu-{pOfW魵xo_m­-Q�~칮Rs΍=~~~ُ޵?)t X,nǐHE;Jqrυ)CKo='-!gKGyޚ.m{� �fwɓ_5yReƅȄBK+1ɞe^ (u`7u϶z_>>.'u]D�ß_ydD NDG1tݥF]ҕ!UQmyԛq2aTj5Sϩ7/4^ud /zDm>L9*w., i<&jIx/lՓ!2x^q7?rssKmjugI!2㭎=3k٫Ålۗ|ʍؘn��=S<f̘WgBARjhtLC<F,[UX3t.x4cy[[ä%An ̟\Y@F{VgPs),ޘ"fvJm3.]vP܉l uEejIs*= V{4P^( O~L}}$ٳ!*?u ;Ky۠S3b{� �x/L:8qR!`:V=fZVa_Pٶuyjj^@‹˾ѡ/}T߉Fֆjept]۸=')3<QH;^W9-l6P]eMNWTċ~fp[*XdL&s9&^NDv~=[VjQa��U*UBBB_u~PU8tt|oo???!Ǫ~-+y[LN`ÞyOcgs)T+]<wR=jrb߷s4'K_#g{X,b*{-3ͶשMI%K59x�q';d-TeE=�{�Ԥ&hu;v,Q炂Q6(1܍Ln{nrLcϑ".Ah,=# BGa7o/ ؔ+Ĥ9uݣogH4lڌ^_Hמg-=y:-6nmTl,+ӛ [מmTɞdg�> {&V{ y<4fG"\$sx~~0wy}4hoZ;]`l4iKōEr= P->sss[+Zrq:}]6׋ 0\egwCg(tUpe4Q ]-G¥ĽE2qLqzٮXGz=UsVSONþ=շ_7=}58{&]m d:ҍ{6rm[6tm 6$}FLxM�ߞs U6wtjwK'dv>s _!Yɟ'nZ.}Mi޵9=jMΞm4=' DfB z8rk0sndg{{{]]]ccBhkktR4jy̚K[Ǟe\[.D˨o֩2V [dʋ0<M[fL=s~7DΕ-AUݾ](dҞcə"BwyڳN}>0MAa*HyHĒeZt.SQYX</& = alr>gƞ}%ĞO r|9<Iv6> \<`~V;EL " KjMѮa胷(mFk5(W[R,](<Hn Ӄ0{5سSNqhKL, DpE룻ߑ=UeN<|h_ŋ޽KɝRWVWVVƳ|=a!�jϝϞ,6VH^Rk{䡋~:`@KN ( O~*UZQ->ovM@qȞgu= U%^g*k(BdJОfs5(Wfz1t˽Îa`|y#AYcsŧiΝ[|R<WPNJKsiiiKK ;;; >-vhq J9�g}=ez9Uz7\KO qjYƢqy,T\Ze_3$h0O i*w=  1ٳ,,y՚HQ7߿<_,9zgdJf5(rzwx>}01ٳڵkn?pc~_ѣG.rSSS}}^'ƌ.Q>I!<b&u#�vْhdUOc/rx6ګ[<N #udУq֖.b\ɞmda۬D*'YNmFW =3r���64wgy޳b?=OWܗ vo8}tk,Pz`xسWA,zqЫ5>;p}4kO9m$o3ڿyu|[$9U۹ U{fqWv`���=knwVtv 1a_N}Riioo+ ʃou0]= +]V}:G\`ۛ tz Hi6t4~fSWA,z1՚7=oqi{ՠ[.jh'u:2LOXaÞkg$ dmǼg����1|&~T <bMC~mTXb%Aۏ$u`YwGCe\6_&驒zׂ>횼pP(r^= ʤqL YbgjMtQ m'xGn2SN?یve\w,ڊP^se2xz.Ȱa6jզ8yz c����{o wK.{���`� `����aϰg3����{=sIaIZZy+C���� �Y_]|Z���3�س5nJBq(:bMr\���g3�;v,22Hsdw���d ��x\[[0nܸd"Ѕ }C rqZ{m .r8b|u ݭgwxBi̎Dz|1bO m �=�{칮Rs΍=~~~ُq{&LVQV.|@]K)NOaNm`27tm C 2oTl/>U�=\__{nZO<I%Y'[>tg<oHxڞƅȄBK+1g3mkjx<CfLBKalņEd"(hĕ*Z\(+PP"BC$!cHf9̜ssfpr,:{FJq;f*X9^: T&HnzTBީdT-OpNkGW]di/΄���?=7P3(,CMcr':m'{]Ҏ=_LH9spn[Ę_sAg\D[ad}51ۿƔNȊϞ Ю6���?=S|mW^%ylll/W[Rw(K gcGhrm7VޠV<0CW]6,xiz֌h7)#. SζY<SJl���yd2UWW<xZʞ':of$GG( <6ls5@0Q|o8ܱ<G2s{���{�eVIB<22[/6._N`~]Lr?'4*UR\)dvK;'X�A4djV y}7=3oFPOC�girEL$ 3&3I|.G$>Zu/>rőqfQ\<xf==RoχJec3_ƽ̦||!kb ]a;iH1z{މ=/--ݸZ\S<<<0RҞ֧\~9L贎a|ʞo*ZdiZʺc9 }]Vs,q\Ҫ z鐿Nl.|Mʦ57h-sfnU)7q�swU8l=$|FO˯x?;~gShLaˇ)"~92'NuJI){{޷se&Psܽ,N}e `1evy'|N *ѭۇyhh} p8Z۽vcoI*%#[}NS{5sɥÚªƞMIR m5<-0L,Wo;nZYYU ʦ%i]+8~l]ж��#٤N;Ns1lUFaiwEA^K`i?= %zkء*ڱ<OyYq1ɹOdJȻn֍J17U111v{m͹c#qҬ⚷ &򔶺8X$I"oJ"Lmu'7N>;%Y|YRL$# T&YZj%GL5;Y&őY~}ʿy7ՔdBHT&+ {6ѭtjii6ӧh& = ȟfY!g1����سawvOg s3lp8go?' %Om@LUbu}?Kqq{#?&u>J:ў#Rj%^zŞǞ&I+~қƙ[㣾zȆ/ae+/QbֲxYzMw$K=jZ]{{O-,))pfG% n^O$cWgQ]c>{޶=777$ ZQ/4OMMl6t\.9����_gz/H}&ڽ;'=*웜3fZN' $C�̯5i2GkϳcEf|9bυܹ|qZnp W4k2m\~'f+W+i]=w˻t1?:{=g_U|I5K^;_/o=毟j=ill龋npVh4:Nd���سiamx뛌<5S 9C+ebg 3( q6=ՑnY7ZcŃ"7f$a|QRVƞӝ7|7L6_X B/;lSf %&{Շ/Jyϟ?u����ޛl6 fUQ3qÝ=yg=o9y;``Jq<Ԕr oÞa+M({../vLǕ<;,B+8\ԋD8f&황sksEwߞO3Sc\ƞ���fU p%R;av2*i4{lP g憹T/i1Gk&Ik מJ8lܹʞcřwzNTޜ]W|O}cEpx '} C<61IFJXO/\~$9bA*Eħgpofg͕UF扁0����%丱"7B ߗ58͆5QP %e{639V8ٳ?䣜$uf/Ŕ={ޠKbqj>FD",26釚VXRSsj_37B Ξ؄ﲿϫh*{f QjRL熪חPÚ`����og�����������02.2``����� �`{ž'&C�����33�=3DOOOcythY ���==�3 ~ojj*N?jrgff 9,����9˗/gff"iLI1 zL����{B ]�;ۿ=#KM;tF_b9P*[|n;N8Ul+:$WYr,lxjmš(>U'.9 <~ż,T"ON뛪RP(8BoF³rHL dlnxgP(RIV&[6maJK$ʌ.I{ 12>##P3{sq.-=�'yaaT}ݻwOP455 S4ksȞ 7[l?-`[!ڳu麶R= Wمe}nρZ;z{[Bdila8-?ICoˡ j<RZ;$Mߎ=3B6%:Laee )*dknq-vc0uY|-=+x˛kAtK4;�3��=ƳgR|5; B 'Lέs:ʣ"TYߩ#I\PZ1t2^c&+OܚVO][W+E&nSb0>`jRN~VFjbl1XcRiaRB]}GSqjqic2I(T HKĸ,:}F( UpMc9n4K%`)mBnlCE߳FhyS MmNƔlʺ1 X.xTBީT-O Շh{=T^l7h%m:SLC,]jǣЕpgjRA=Tp$GG2Q!^iLDZC#�g��=7P3 qiɲk;^; B/_햇8nZEk67`<$UU605H*a֘-,"mKk>6iβ^y I+J.Kk yTW38QE֖ŞlOrZi&S3Ean+3-R.4wQ.Foq tbL[%q}iQ[v;,-q X.0\+lkchyh{=?sVV ?k%S:mL,}9 g:7D{faű]sEr9J*45~SzXWp.>ḧ E:oa5+�{�`3ηoF|URv%( ů3HVN*ի> :zl67G,4Ĝz.x;^DCfA⸤QZaBno M x)[Xi ERmmYyd*7lmW<Cߕ=/<yzӪ󳮬_lǨCM>wAٮxƕ}4,s2d6\GT2?Mt=kF[Фۀ^qX(ƛ5O/KS&A i{fzsCg[q,v1%^ۻezW(qL)hJlj4 m+�{�`سdV /I :oN1>F[♹O'{o:y#7#9::FP<AZ*o7?ux[V'ڲTn@ | 噎_CMM/ni{rC9ǧfP|]P_8 c\g]zdux<Υ4Xtr 9.@> =NK@q2\=th%S:mL, SW\W撶ˏ %=+xsŒߣ݇Axp��bVIB<22Ab{b~omq2ō5[Os4hƞs{|c{{j㉻' P2,{^ltlߋ2ɖRn*[L?qrj8,{6Hr#\l5+:>ʒU#L !ZE/9.Mnwz7Y{ = E*]_m1ӆtpͲi왡Y e왩╉,Ónƕr侠y֞7_�سaA_ A:ȗ>{yd]' b}aZ3rZۈ Myiir_Rw0C#K֐&ۘx\l(&QXqD=GOZ WuPVFi}G;ci?t{v. `C/mJ{캩who1g:U+&J[<' ñM&BRCSA&KjWօa]g?\8hrieͧBQd7͒?ᱧ`+ϖ^麑//�.%:˵2_{/8c,x֬& i7k)6^L7Y ,knqL{Og }~\+oJc:-Xq|@켘&_{+�{{.;۫Co#X<ilc㵫=. ذ[G/{wJcƵJtk!uZ_K%:EVv?=M/ Ԋuz#-6Y4i X*-Wܫں98qUz57^I02{9wKeqqɇ59Uw{ֵes8h?bmۓ܀07%EKQ&%Ӷ<{K2U)ٚs+؟l,ҤE"+N<кxXƓG%Q2dɡMd>?͎0o; 1K<1r ݬ*EM#BpӔt=35߷�zG<8-%ޘ֛̐,F"1unşWX�y3>~q8Yh xsW~v,K%B%v2F f1\|sH:z,ҘڟW|W:HЖ8\T)؀rX,ӆCLM’UK{6ѭtjii6ӧh& = ȟfY!g1����3,(/qE֞eQp<< Xv#e`w U[Sy s]'|?bϡ,E S1U2ܝŲ<Kl5=3Uc%ܜ`0jGP<55eЍr@����Ξ^܇X%[M( ˞MML1-Dwe@u OhĒO\ r1y"JյXb,e}1v{F(KVMOcccO]t#]ZFt"cnV(Y���{cϋ<A,:L+liϴ__e$eh\_niGU{Z׉%p9Źڇ6pU*PNVbYtŶgj0g�����{;{fX܇Azd|y߶+,{2I6iqӀYVa'\{eq.v o왱_KZcVzXT{����ϺF>$Qfa{fZƈi&<=eXbm)$l!Ę϶9|gedR7B+ݿgZ_oagjd3����=iALk1-Ĕ2?m}] ItqM35NLl۞?էqt+Tp홥n,cR׼<y%=T#%���� �쉻������{����gx�3����==͞'&C�����{{�gfui,82���� �`48V˭)T@����``��˗3334gOLLs=&w����/d��ܞz}uuۑ@Ǧ g*ݴ,:n;mX!hטkn[Qfw1/K-pG2۪'\.:3hqUa s>vh{[gFb&?pi[) tp9XDli8mA4\$IcJ/ܧ{% jmš(>U'.9 5=>eCi}Su4C* E#my2kB9g��@sss}ݻP(^g`G[͹#{&,/-ŞҒN ή֬�bJUuofӱhHV~Dib+uKk平Io(S5 ҊjrL<D.\ԞT]Y}e ĵ!ɮ 7uvX!OSlJ) MfqZ[~׳<PHkB9g��=ƳgR|5;|!|RɹUsNWGCyT$*;u1I"^J 7̮Uq är[kspUz Q'^*a|fINդc2U)0!:ä] 5i)*殏7!A[[6 =7SӟY*�Mm{UGmȓKbqxߤb)'^Up:S2'W$؂G[֓7eqSo_-M SzM8e=" 1"wMC|q&ei7&OS M-t>e}8dǦ6{MW&0ܕ x|<JP|mPa/~�ػL7|CvΤǍ+Z&Nx$ݫK\|MZS[w۸iu]2l7ojx.ImXAv05H *a֘-,"a(]X!@#OtB͓=wqJ:oZnUĕ ڲ闿, ˬlvX#|15"}Mmc靳2o~jiL۪L=,QqEܙe5=޵2Bm쮎5:gl%(h \|И/puNy*=y�j=c1 r*5Bs4%q}2t>Y}8J-l`wҸg,D'ػ&cj�ػL۷:_zT籱]y!)~m&iDrWQ|^5EO;f<G# D%<vY*8J/2%UҪr{xKgR4RmmYy[~p1ʢ]{QǙ|c\+oP%W<oė?Yo3m2Ⱥ9mY;Oe'Ì,\P°@{<Qcx֌h7,Sk5:WS>.[{Z ͣ8](my*l Oxo0_+Ol\Yj AYJfvWːps9iRɴStM(0=�Gd2UWWn=gԯ 1YLqT1SkJ ]ci%QyAF ;y#7#9::FP<AIv(L<oL-=oٞ~M*M<_u#P\|!ճN3m2?K.?JkyX)d/.xˀl(=9tn >|vZ }9j\$)uw_'W -ؤȍbEỠ$ 1Jf@˕x֥GV\zzMEcz3S؏�3��{˞V3o=@W_}yddda^\/L7BgiΣo3WhX{;zVd<no왪r?'4/ReX4*VXZmm$,{h[x/سɂ@pxxt}qjֶ={nU KORO&GƗrN%M՞e+D/(!=FC &?n;"P4dj5�L!=3_ɴQ>Vo/ԺVGKN' e,]1Lb?`M+re"@$o1/*rIZS=9d䧩8Fo"w<ai[6c6!mD͓O꾘ZmYkq1FL6Ó&_>23s2R㱇VD~祥Wˑ+~JwyqPl!Y ֐&ۘ̚w`{F5ʟ/c?9xHzk5"&NS.?<iK۳si(40ohE֖MµgrirDޘL&KjW-a]j{۰>i4J.өE5o(}:m2A=1,:r(~ROZ 86= E$:˵2_BS+1Ew4b)pt^LFZ66GRoN".Xl7]aJ Y[\8hriemJ҃gu)ÁS0^g˨+]7r;qi|2cbg{JǕ 7t'UItޕiɴ^ՄS9ۅ 3,Ŏ%w/S-4>GS^n!ٴ`rvYa{܏ Fr9ksvݞėm\H{wn\DoR硡7p8Zl7,P+ه<ghӤ%bWetʝ{U[w<'01J˶8 &Rf}(`'kr 1kp~9'"hkK&a3[J|^WܰO`ԓO[la * tVYq4;Zq8\\Uv65bzRLφx0OxVnV0@_ٴKmj%(C-b$"SVix~w,Z*B/ؔ},ҤE(+N<кN+ԧW2C¬Dyct`3fPaL)LJ!x4~4Wc!t`NfޔOa  '7)K'Y&}:.C˒be"Phh'a*8hfp+V8!7^ҋZj%GL/kԸH$D>nW y7͓ۺBIކO<9z(N($i~~R!n;q?R981ߜ;v8һhXVq 2%[_+2A-%hPMIL,DA(Շ,z"H(<P_e._ST[ZY{6ѭtjii6ӧhz@?fNC b����/g+LYwejdO]/?vMŗ@Sd^sr8uVԺoGy;(kҏHxΙ2Ȥ}#A,+zvls\zJWNHK3DRZ.hĉl:)yY JoϴŅ1\/g^IĊ&qPHyS bfa >W~軆S*YT[@טWڇ6;ZXaf mpfG%.{f-m=777$ ZQ/4OMMl6t\.����g˃19aޝ֓[$%ב g ai,Qd_F|Tto)_<HKrpTҹ^o1.ϤCIr{v/NfSpSolV\>HoϴŅ,*Km˸EOr8If_p"rU7˴={>sw7D,]C[~. 7m6.?W3̎dϴe՞?=w tjFӉZgZ���=M% qz}\E7;S a\Alv ?֛H^*;jH+yLyTTLLL$Ƌ=rE8hn667Ȟn**/]7z/J܂B7yxq&u<JgjLQꀶvaQWr8?bbeZ<\0ppt m)V!wK7f$a|QRV0ƞikT3����=yމ=U } s/.W>'xݿDuR>/ x99NPA):7W"87\TdbWSXXo jƿ2-"gºe;lU yW?B5A ;K^^ >khKY PFԆ+xvT[Z=����N knM"^Əfp볹¸b%=Rj¶Ekz/\~$Ϟ? ^=$I<GOͻk>"{s&J\ubcR"5 \j5LUׁvA;PysE;X\+X|:ARysbv}ۧ>ϞknLc4t C)xybp8} {?DQ<|0=3זV`�����+r#D|P}Y{祩P2/?r:\x۾̍w y|q:u@kmqllBwU4=!s8Xm;A?S}X$p+8䣜$uf/ştD+1ٷ:H4aT&t,ΧER"txdl5aٳo3G$=#54DL]Tqn8{} LTOA{0mSKcXrȽ뛹(E&Ky>s{����4BٽVߋc~/����<Z$#y>]x~eLxנ``�����W"V=RΪHDcҘ fJgg�����{�`dwwwQBz����{{�gfui,82<���gg��{MMMGZm]nL2����33�=2??L$͙)?A x���`_Ȟ `'wg^_]]}v$ccc鱩===#{ȱK,Js˟/9UlmPLU] $[ʭ3G#1�j |f]RK\,Ķ yd~.1;"ܶH7UG3"P$M?R9hqu:S5-N]tƗ-qP|ڜ肫PG s>v(60K%%e#;~t)m\0``�O煅Rw=B4O`G[͹#",-{f@A1UgCx|ni͵<w6I\5ۚpc)5;'wCҒNשdila8-?I87FX4L]DE$*p\lύu4肣/YߓF4j0aꣁ"EBaDD{.Ll �{{=ƳgR|5;'J!O[5tu4GKE"SG$=0ZpcZe0L*W5<kspUzޤMxU[~B,gTMHM8+Sr Q3M=B]uh 9ވ37ͻh`ѱCHFP` |aW+܋y6Wn4K%`)m= yrX,;=TG%zH4U(\[>_sX Sv `tE LoRyQSb)ư'L`jYɄ GG2Qpo*S[<p1fKG]jǣ-vh1\ ) )ڈ/]��=7P3%W<N%LXIW|Ol<D1nZ]ڌoX\TUq۰aj|qyNg٢"ҴP4k-5DgY/<ك⤕֞eiuVo%_H<+m9 0nωW, ˬlvX|15"}Mmc(\+H;lk11ۿƒ=u0uP_r�jF8Ҫ'zQ[v;,-q NgbH.GWY⹠3OS[7~Y+eꣾhu{DL. Seh3a`O3ηoF|URv%()~m&iDrWQ|޷=;x1QJ8a *12WQzᐙqIգø^5Yg-M2 -+qiSmpS-rvwe{v,>F1|"\+oPW<Sߡ+iǴo$ϳfDY,s  P&L9f]?LU(mn͚'Wfr;掫eHJ}h3TcŜ6ŬyqLdU+K-1sLQlQ J^ l֞Y"G\ )0eBі.� �{מM&Suuu:VPs}xMWH1yhv5 /4}r<ܫ(lʼn1 B.) 3UyOD{\-32(=oY ,5L6<_~8>p33K>CA&(7. C_y e u+WH\|!ճNw+Kǹ.B (tjD#7fcXQwK5؋[ b) =:> 瀈Xt\ )fі.� �{ԞV3o=@W_}yddd Ş3fhxeϾ*[OsƞBPbnodȳ"q}cTM֖y<q|;*òVPHa` ff.':4˗Sa~]nidfV y}y,0=|\!,j0i-^EƩYڦZE/9C< IqWL*mT!Vcsq<H/cʟ%[z=Dҏƞ. Xh+C SD[^�33�Q{^ZZq_yxx Şed37zY[˂$J+6, 4I#깮 ֈ8O(xu, nΥLgJp)+:OXE򏼟]sڻ|>Q=ҴƕuqX& jrפPkn0C.өE5w epplsmc*3K<kVۆ\ Yᱧ`+ϖѶ{FOdWL3U d W?"~.KW42FXGf3],1]~LK?|aPL#btgg�|N zܸVn>CCKCDñjWWWI1{^ GZm=?ipqUFA[oWus"q OK(lK`"eF˅ \*K>/[س-D1osSR?!? 0EKxV)snbӚޒLUJF]xHCAʕ'P NwgfU DMV23yua5º`:(wʢ"}s1RLN,JD! XBюE6 8hvpmrք1sp3jXW8X}D0KDL?nMsa0Tګ)-/��=gf4W---զ<}m;d2l6t:$;����33�{9/'`04j:yjjfr���_o{j5N3tDV(Y���{{=����33�=����O�n7�����{������u�`����� �`����� �`����� �`drl(!=k����gg��{fVщƂ/,//C����``��LߛӏhںꙙBe���� �`ρ_|933IsfJď9gcz����{{�M#KM+}+?BvnM}b  N뛪RP(8!<+L&әX $U~ ËT/�==�s,,,ܼo߾{)v{W;zm=n;)Y[lqz<Nkqc.JҚkyl4==D{N5F'_q8w �gg��{xYJ]~ѓbA!w,{|'?+#51p;f*X9^wz~輕pVZ*`ЁTÄxLS8ۑ+/SY'/l7n;/` uþ30f] 5i)*)s;-?U!BK7jB'J!O[5tu4GKE"ST/g"S?6e%mJ0!J;vY .%}s,RƉMm{UoSaもa3<���CRoRWUU\I3&|pmXԈ3En[Ę_3?8.,"_FZ,iAtqrݷ9)o#[nHKXvp'Jb0fl:2oZ 17\^0fDu?k̦BcgYBq\Rdى{u˗/LR~&^T6KKi\Bų\+쳭m쮎5�.2=4V ǃMyXϒD�� �`!۷:_zT籱] Yxc1#4LڵV<yXAkGqIգuI;f<+ÓPS` /PĔIM0n!WxV(\eo#4{.~b4"Y9UD\_.vW8Ñ&LpZ!-7tx͈v875WtQ:]ɩυS�� T]]Σ2sYs5@7yؙ9uVDPHD܌t\S$mlَ\ꚷjB<_K S&L3<QSt!F=SԹ;&{b ((RXy%\g]zdux<Υ4XtQ=4 nh <���ZH�_}R瑑] jYڹ<0yrpۤ<N~O=i O*UR"( Kgzɱej,X,K&۰s={Vd<.ZOn vb_&R^+Q{ ­N7koofJ8\qbyϯO$; �gg��{giir_R]^nDm4qe}a] g֧\~-Cu, ۙҔR v8Rփ2qZJ}Y2نM]<iq~$\=5Th2nd;/gS0^g J׍0~ۏ3-ׯl ]PKTu6ke&eӚsLwN{7'JipLBUE?<���wt޸Vn>CCCt:EVbۮk<y$ZaXL=Y:īT)3_.KޓKeqqɇ59UwǞd/p>8^g(EDI{&۳s;@HPg>lGc_,τmgaV"&@` G;F7ƒ_<'+7 d QD~eӒzϴ[J|^A3=uŰ�==nl6M[zR]mjKKӧO6M&z@?fNCcȄǮ~6vE>=m��=�}칹9/'`04j:fC7"ľC{y\EOhk/؍crQ/���3��_Ԟ466tE78ej4N'2$3<ݦ \PEEHqb>V(Y Tݍ����Nw����``�������g�����{9�37������`����� ��3����=������m<96]5����33�=3DOOOcythw����gg��{MMMGZm]nL2z����{{�@/_93%}bbǜ31���==�&z}uuۑ@Ǧ UmrF_[TX;ej;sb^Z*b'!<+L&v7��gg��{@sss}ݻP(^Nx|1{h9LmZ;z{[Xy-&Iw7��gg��{f4Ϟ=KkOT4zRHM8܎ن<D,Gh:o>,5؃5t2U)0!:C&vTq <M|e B@˒Iw/dBīTX -I{`^J +g(<arn՜P-NK;6 S3՜gtZ{7g^2۳G%zH,M ��==�vo7RJ_UUsu&mLX`S#RGMmc,z(T i}Ky)I9<alq#.cW a(RLIʼ.Kke.py1 Şe rI-e'vv%._0=M9Q;wŞ]+쳭m쮎J �==�6o7Jo߾ի:JP c1#4LڵV<yXAqb-ZcZ<sc8.z~n_7inj}es?qxjʞ2 -� %Rr7"s/xsʩ"_-vvn@g9{ɸs_,>C;mw5#حtx��33�=ov3L<::[A!;G<W~8>pQgI:[NtHA'<A2ݦJ֘ȕy F)Tn=3e4Sn~%1Ebn3U/INcbRX(y.K`��gg�;ٳjF(uꫯ:bPLh=@iΓۄ&q7=-xIyP>tFTР]:л>J=/Scϯ6ƞY2ن=[noٳ"q2|r8^s{n@g9ʧff.':6pw+��gg��{v[ZZq_yxxۼQ,My`\YtXpyGu;`mg)E~iK~qv4'ݘL#Ek=(u7%msœGs]Cv,) i3]78KQ* |&u"̊[f jrפlZCcW��{{�n{wJܸVn>CCC:t:EVvwɞ?ƓG%ԓONjKUH02j>T|X_Xuy/GYJ^g(EDI{&ۛbn'^B^ GZ3m258Sͩ "etn3,<yԼ"#0lͪ&"+oޕt���9lFvԖOmtL& fNsǾe ])lX‹|\V���{{=777$ ZQ/4OMMl6t\.Bu;eX)xֻ8V( ��� �`ۼ466tE78ej4N'2濝8ɓZmZUTT*G(.Sku,>/PL5{���{�ۿ����gg��{����x=�3n����� �p=����3��`����� s��{����gg��{����gg��{ɱ<����YG'zzz Σ{ F ����{{�g:T~DV*sw����gg��{d~~˙H3S'&&~9;����33�=oBWWW8p XzljOO_&gX=[ЉHBgە Js N뛪RP(8w1/K-p%ܶHe\r?E* S��9THunnn޷o߽{ ESS poi6 vڜfy{q}a㴶'h5֞ҒN݆=ߚt#/8;Ux�33�=oh<{,׮]C?QIà=aq yrX,;=a?t?|8+-QYk@ceRaB<JuLŕ⬓xh7ˌ 0:aJh3 (U~&;-EP~pІ6p4 rX1#t(8Xvm]yaJϛٽ:]^CW˓)6]w_M By{Ϋ{.gάfλ֬uΜBB("_ "RjXLV((,kn$l6DBQ|??bޛmTD vz^U1fg}[A[.zޔ|_U&ND�L=>… >,z>p Xxݑ\QђϖeiW/S< QKv{א_iT2)Rq5[>wZ32Z5nCfM$L-{4JWflIP{7fyΆkI/AIV+iIY}bگYv廲>|iߊUoL%}h*ա߿Tu_rTY{]ZPVZݜ�z) D:={VN禦i)Ql\"#q? W{ G_4:C߹qϊ5Gǥ6n#Z^es; 16pI SOcՖspgCme*Bp}nj֪ԙePe>W aaaaa5{+ZWf(D=;W_[:g]8 3 Pϓ1G΍ӵSؾwXXXD(*5|‘#&"cJG_KMk㗉:wkt$QLpm=ǃj%c*3x ӔZ3zzԽnKE T*UlIܝQ{ir*",2U[fqnkٹݡ˜zvߎUmr&Iڨ;7GDP3@=Ob1h;tnhhƝzE阗m/K>ZܳgFh K X"]qZk*^iu`[V NCqc9`m# 枏utL_78gmf^'7OF[!S"Cgn_tEq6=%$^DP3@=Oj?!Zӹ~?ُU'3.^yMe>נ.?tϳ=-eዖ7<-MEyf}?|{Dm?W)Vⶴ?xXeVpgCoK:Z8;̝ҿOг_I;)[!H>{EJ?\ $,OZ!x<B~8iQϽطg8eFIÁoV' }qdND�L=4 9|wH纺G'].NjC4ٙRS}VUc}B2*qӞ:+nkmOIu8'c錣jϦ(eLº;GwNLSM֚xJZV3~gCmО<D%*icژܐsSOY&eG%VFU?.n엟%K|W~UQ_ : {7'۴u_SNyaJ~�P3@=e] [֓_tL<#h4d=v, Tw;M^�+W;RV,jJ.fz%I}z_g,͕ڡihK�P3JoMfffeE"-`pݢ}zVTʸ5`;o.Vc'?yw^Gq2*u3w@Bmqz �g�zJ=3 ��� ���gz�z��zg��ggr6VTT^C��gCscKeeef7b/>00w�@=S�<1޳lܩjOؕw�@=S�<VOOϙ3g6o,y---rD&��g{HtSS+++jcr$NgK;mRG;dfyscH~OG>^PƦ}eI_2}R/m[e;4'vl٠W.lz}4:gct:9,Xh߮bWk miyUunP<ixZ^{f$NXcwD_~h|k%[+qg_z *ΝM3WӶlZzysu>#.&::zz>-)m۶-ɫ6;CHҤ#Y]ũ3YZPmINýO6P&lH+w$"&uِb2swmߚ.)aCzuk]q2<L\شnΆږϩ=R*UIw:}sh?Az?@:)nnf"_<cm;HnKG}ʿ5֥/<euSsVN/�Smy…~t+MXwN_Hhgr+V)QKvI4:jK;́X4V:j ğ[P6.!yPSnS\zp%96eyp~clr~3<fgCm5꤃vV.]9gƚч.Lr<'<Pla ^{({6oM5`t[NXeo63@=S�2-.\|Y9eD3ɏ]"#q? W{e$O|DEc0XsQ~\l}hEx+SP+Sϟ6O-SΆږ|UeԬU3˴jj>4.=۫g'%߮u_X<~g_Dx/6ϯ.;ueZ*7D/}zh<ztnll"FQTt?1CU::j[JΧnZL,HV~yV[85&Іgk9P+S{<EԚףn&p[ ,R&OxVbL~jj0H٠Mp2{GLPsg_dY,&~~0y ӸSϔ(\;,m/K>ZܳgFh K X"]qZk*^iu`^V{=W =OCqc9`m# 枏utL_7&9T;Nqs3B%E*lwY,ܮr*N^{o^P3@=pZfV~et{k ˢW^|*.5(%26}nKY nKSrѨzlYn"b|Ch=K+q[<J^LTm+N%[^}gC}"3w.OHhC$;͐o7$}iz==܌K?pC~l6\N[ӝEM/+I^Y$C<xܚjr9<,߾8rݱN5�L= 7Ž"2Ο;$] ҹ.I˥Z|Tσ>gg;cJet\O_YU 1ʨM{㣶+Vݶ=%mᜌsρG% >WٔIXWblZVTjlmړR1P%mLqnwb|)KI Tkfx8=V8Pudwdɟʏ [|_uٮm?Y~$Iۓz??zn&cY?Z'tRYYx,Fh'W)z%?~X;#?'0tT ɹf�g`svvUz7˵Zhnkklb{^IŽ_~\(iW\Tj�g_pdffVV.rb -yEJRƭ|tZ8a|˽ :VQj3�P�~z�z��3@=3��P��P\��zg��g�gz~AMW'5��zRYY˶ s��g'"{VV֞;ZԣS��g9s͛E4o^S��L=3z{{=njjڸ|}eeeCm %ʃi9>ԑǻgYмա9cuDrgcLr'E.z-I޸Pq@=xY霝`Fuvˬ6d=K>{-:zV<Z^+ݖKYyzԳ`ꫯ|9ش8S8Y_.B|Ӿ:9L_eˋͮ')IG* ړq(RqG7:j}ԩ'(ݵ}k򺤄 }3ky&xxzWՖٔ\z->R'* 泪 +7:}pG\LttN׏)&O M?}fuRD,|L >|%Y6fYz>pw6vmjjLThר^۽VTƚч.W| L>8169W9vUFwunI.|Q\zkTqM$9odnZ;4|buGr.zYڕ w /SꈫC@n^|Wvs/[ �o_tpHg4-;5wՙ&|=+m\aaYRgiG?iY~0sc{TlFpUK_Jy񚔛o V~p__q$aJ_|\첔FĤʏ}bkJ� 7gx8];5uKqKMk%$$E+?cW%[M>3(;My5ZV\Xqt?wDdtW0Jjw^?oN:@~ג5w[mWr�3߲-?|?H熆iܩCqc9"U/GQݾDszs:OįܛKEFysjܳr64aRϧ m>j[~heus�P�~zZfV~etޝ1QX;ah-eዖwh-MEr=d=ZO<6<{߳e\} 9ϱ~ ?jvJGƦ{U'3.^y b$v;SdO+б;)[1$|"r3�oWϚ{E?wH ?@s]]c1ē.KkZ^xL5Yk*jUZ,nkmOIu8'#q})KTJe*icژܐsSOY|RzvoHXam;/xX"Fi]ٙ~z~1]%>EYgW_@ˣ][V+#7s�P�~z6j=y|Kc1ҍF8AȿLN|w0Ӯ$x?@=S+Y;RV,jJ.fz%c�gx%7&33"G p`0nQ|#��3 P��P3@=3��F; �� z�zrP��P3@=�@=S� ��L=3��\Ogzf�@=�3��3 P��P3@=�@=S� ��L=3 ��`S��P�g��g.� ��L=3��3 P��P3@=�zg��3���9@=�@=S� ��L=3��3 P��p=�� 0کg��g�3��3sz�z��zg��gn��P�p�z@=�@=s9g��g�gz�z��3@=3��F; �� z�zrP��P3@=�@=S� ��L=3 ��`S��P�g��g.� ��L=3��3 P��P3@=�zg��3���9@=�@=s9g��g�gz�z�� 0کg��g�3��3sz�z��zg��g�zJ=3 ��� ���gz�z��zg��gn��P�z�z@=�@=s9g��g�gz�z��3@=3��P��P\��zg��g�gz�z�� 0کg��g�3��3sz�z��zg��g�zJ=3 ��� ���gz�z��zg��R�p�z/U��zg��0gz��3@=��� ��L=3��3 P��P3@=�@=S� ��gz��3@=S��P�g��g�gz�z׹ ס^^sEĐ<9z{=#={ꀈӨWDk* C@ Ĺ:].W|"z|g<zgzzP3 P3L=3L=3L=S�L=S�L=S3@=S3@=S3 PӮp?G{Ba*V5Wrh4yE%et30y�.6έz6v5W]h4WJn{L=S�R?2k\כ̒$e~zO=g]c̙z6s5eV Xm-:kzyb.xݨ}oZMu-Wo/RKVr_z~s>ckNNNcܻUVw^ {Q\Mnqٝ>sʂ{Mk 7J_)z`Z4&iCWun5s QlwEţ7_ZtVIq&'ZE>C8&Fo 8zn‚;-g,G=3?Vo/8yv5[t73Rɡ+ln-r%%pzSݏ)),o\ VQFc^e͕WJ=>r8䗮\Frț~TZpnP b=O X..ܷ^WU<?`=Jsީknm=sɓ/9W4u;Q�F={]// >mxZ7<0[)Wr_z\)(}P[3.rrr=~!fӓMerx\WP%nG`2 Wr46вٗ;%M"}vjC30 gtQ8]-#=ϱ;7ލkŹ99׵t[iWnz `nfOYZxUwƒ/&Wr_zPr:meu= 8~:,?? \Vum7 %#8WZ{E._+Iߘj?{imwZN!z~3Gqtz؜.j+·kl_vyz6Cg9gK_-#D=kC%}߿g ґ牟wn,ЬvZrj4i?$I*_Qw>gw(.0.wο;b \HfYS_Cmzf΍9L}9] f=?ÜS3ක4ǽf/;w ~@̜g�snnz뭅W46qJ˿-Vy{Xu:殿+9s_ eWn=]ڪ/7~vg@׳_YWZ,]_|kPhiUTXY/.<&kN!zxQ<kEPj-sͦλvtg3<G0wvn:Jg g�s|z?ǽ"Ef|:XɡCl? L>mC?+(z^}`jlk*J>sO򻇯+&]}NNΕAI r=O \xL=j^/*kܧ]QRThrl괈YrZiiY;EOg,G==ϟk嗂 ~buy1 ~e_㕤: ֳCd x>yI9zbuMH>& h=FEUΡ9QIĩ-@10vW ixf,G=fhS=<G�YsP�=Oݡ~y.fy?>3@=Sϳ}\G=zfs@gzgg�L=S�L=S3ֳuc`?bC^_;0?19 {^��zg��@=�gz�z��zg��g�� P��zg��� ��L=3��3 P��P3@=���kQ�n ��f+W���kz���g���z���g���z���g���3 ���P���lsOOxEmm- ��y[υEBş=~z��[n*m, Ytzv8z���KJJܹ#X(dɢֳbZz��粲jQŢE!N~^xj5 23���g=WTTԈǢE!N$9Pϒ$G.fLǏ���gD WUU׋*m, Yte̢v<y���jkkEF*m,[Vh(]QQQVVVRRR\\\XXx���x]+ZW^QE U,X|ӳhzo}v\zK, Ν;nk,���^oE+Wԯh`Q¢E6,߶!zv"m6l6 <yc|CCXуj��׋\ѺxE ,JXbƢ6yppPyC~ZThtbɎV+\���x+Wt_E,O<˷mrg jm2Dwz���"*W(^ѽ~E=,:w<O9-$n-X,���H(^ѽ~ES t~ZZbN1���+G(a9ǤzrF.i���,f9LgyLC.i���`cj�CSK����IENDB`������������������������������������������quodlibet-3.0.2/docs/_build/_images/replaygain_plugin.png�������������������������������������������0000644�0001750�0001750�00000043130�12161032160�023734� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����$���ܬ���sRGB���� pHYs�� �� ����tIME���bKGD�����EIDATx|Uׂe-kǾw-X]mkyWWW}u(JH $$%P?Ý{-In|3̜9s2s~=O~rNqp!v6ZahI!==C\y^B#GHXX<z[9g)TaCT~r9,P6&@x%55+.T8!,g:Z-br "0ŗBie#_ cnz`҉(.RtThhB2fIG;7˟Q1EBi>gˇty 8t:UQrr!&Dk%n?{$V6m.B6hvAn-sp.0⃘@brZA:0V2)BF{ddt^YrŽȪݖ<}#m/oӢ.+`0sV=t7r|Ǡ 1Sd̄ y[wr/w= ;z!3ϕ,~AaXfCɿ_)/~)4\/DHb|2~۞Cp.0i?(qJgG%A&E^\W-Kjv\y9s ;qB`ٔ[%~3ZXVdɫ,+bg=v\l̩ו0dH +SɎ: ֱ~CL9N<..;ⵘt0仨B{e{SsZ>c^omߧkƱY#/^ OWFn?#oKTr;vzE?9.S-LgKiƱgkpD7JvJ2tZyyw|5ilߡ[Yޮz g|9-׳2b2zqI0>k 0i'(~:u07ީ]L/N9p-Gs=G_  \"7Bcf*]1Бc@^HD7΃@EmtNȞ{hyXgK/3ۃcwׂad|o ֐v~"WzM(_WOz"wM{y׸{j:!▾YN11ǙUH 1A8Mbϊ?*Vg//d{!>h^rei!F-- ]d%n(ZMoOZIW-s< a OȐwGlt-\ۈD>'ϩqBGN Bw% 3y3h]WH"f9WkDJL_{͓S6D4>Cd;d"'Eϙ1q[L/R]S׿!?.s<} C,Mmtims@G�eޮ}@7 ɪUw3zoTX=&iA@  !y\|l3]I^ɨr;vއsޓk=<K1y]Ku71dK+Z{q�}~ 1G՞z{>C( Yz{TyoTr]kwb>&=.Rw.^n/bE^_'j`בmnε3D1(")&߄giusb8q-&x}WHDї//eeJ! ± e| UVW @uP5L>U�,2ht-|3y51Y+gi `cP}?/E~[S\˛/>C3Ĥy3�c 1A8p/~%w\|JHI^EJ@k}􍑵[ӒU'3ANI=ob܎,XyrdNb=tYkkiomlL<Yffh!2`}&ƭiEPiz9뵼"ĕ!_,E\?>O 1A8|c _sKZFIݭ8Hõp>BUK^*J~*E5Ղ/Ҳ++UP^9[ &Jt8kAzOX?A>H _ }<q6%>@?~B&x){m`kyOE+Ӷjgao1rFOAG0a,߲sIx@WQ}F& #"pzg1_Wy<^ c\ĵ|ɧtI%6{|J>\6 Χky3ã өqOө s~ ^@_8 J\BULg6鱗B"`q˴(0I(30"OXuX|<q-p,bK5w|>GH0p`s90lw!o|&JY}bBH-Q%>1T]|~?n&B4>ɿBB!Ob۽k'!ْbB!bB!bB!bB!bB1!B1!B1!B1ʏBif\ 2akK𢡊!'&4Fk>s )2r0&r9|RuR߷OIK=yƴÇBi\dȠry;vL:9xCDe{uTUVHeyC !4b2׺ErQ~ȖBOLTSBH*& 9~޲+&E)W-o_aWL0NUvln=bRw@l"}B#&jkeuJ 1U֮NUCL <aogvir-e}%c{9ӟT̘1Um{&&uʚUpo 1Q dm*(}19PHw)$Fҹsvq1K.J<Pݵs$&,|f.:vP..lMN }1ݿH.SN9~p饗ʜ{յx,*,;S&N s{mB(tk~ses~V;t wulۺy<~8vM7g%|w&?/Wӟ3ΐ뮻N9<iއ\y2}'gy7OS;<袋@*s+obRTBW1�_Z%Eb4HIؘԩs#<"q8333nys^``:k< 5X|A?#yᇝazg: x{g|d1p;~X^fثb+}uOu!k'ܽӮiS+ U{(\Ғ3g*o>P2[6kFƎrHb:AootҞs<>KBabx{g>w|[nv-@(YٽoQ>lNjX U{(ڴ@]AF[7/~!?h~ 8gL]KH00 NQ1:i<0qw碛7H~}w˳>k;}<VlN[ݛU*߽sSWmZLXW _0r֛ y衇[*91lnڄQX=vЕ'gL>e=1ޙy yIߴI{Yg6nLFl"ݵe'}ccӧMӅ&JNJjNwެ4Vn瞃]^i1ASdu!C?_3CcSO w&$PB깶~Z㷿wqw%%_pfW9C˸2-<ƍu :D.2rʄmٽo0kL[Pp}Lwڪ<PZ{fyNL%GH[(tZ[%:y*&!d2oZfVT%S2 [Z*eb[$8/Ĥ6Q4uAkFwA'1J&/2~i+х2la| _EJ97<;t}q%B 5ڴKB!MO|B!ibDB!MOLqL!yhb B!Dӷ-I2w[.'#ce?ʔq} u}ڬ6앥23Z.8~\l/Y!?%AS/\Q;JG1U סO.['mEqq_$o^^MBL}ڬI@+kr )qPf,/u.SXMa ۹]s}ln7n S.'U<|'NHuMJ·霖dƪ*Xad\W(o!_[&1]|ޣ)ꫮ1^թva /P:v(cF!_.APڬ|:9]^4L:d<p<%HzOGoɓm%{mG"VA2lM. ymmu{ɒJz6qIsa7˂e:*a(9-Pn #s4(1->$'ҿ>iaٳ ̚5SB} ZTÇeOC6i^>Aοq-wq9@-~JB1ߨB:b;~Bv;$UzޜTǹ~qZWSrv}6wբcRZ[Z]f m-25vbN?�-D;<%v8y\PU6}`:jVXb{2XU +e^Hek0.@ՠHOgnl|MZLbr-X ScZ`IS .mVL>ɋǻIqqU[N<fkq^nM21._ת0ɐՃZ!60gR!SqU۶KS_6UkKbzn -Ua=[.}[3F?I.]u1sa;ybwQˤFx/A@q.]sX"~??./# dHDV˛ ?3UP%Z0޷#FpȑrmI؄ A3Ylb xqrIP6 :Q8f3a,l'La܁qviuKޮKt(/ׅ- **qM;aN͇w)rw|=s]eλZT\#|<}7<ޫ�%^8/ZiZ~ K F.**M>*W)&ܹd;#tU <Hw 0@o{{&M[0R1xY=GrmVLڈg>dzmwybs(dPǹ#UդcUacn),S`tsAxmZ6?SKa% jUg'3HDr_mm;=2cYQ}V6kd @'V~7Ō*t˷96\ĤI1߯\{AyLuʙjCu]\?<ڬkt[ysޅzo^[ 'lM~%3I/#wʧ[za(L1ˋࡣ2}Yޞ8mNyݕm52"2K>T5dRUdg]lK%*$d0kZs{V�AzL5VɗeLd7[}Vi"K%zǥ~7ŕҕAu#?EʿVH 7ܠݿBPBW_Vq@Ť6+&#o2u5UPŎu hxߥ ΰJg7~sUm,a}{%H3> >t[x]UJi\io;7Xv{̓O`b{ML˳q >{7kaizKlvcː .2[^Ғb|eܒ9|O6GÁI+izڬt~P/yNgꖗ7ϒה- }ڬZB<?ZJm14B7GL}ڬ5y_T(׳2Ͷvnfn.C6+&oXCHgDd x73JɩmpT5Ч͊[W3e _{?z9it;O k5L}ڬ]2!f͊ Fњ(&4Z+6_2ceLI,=c">{H 9E;6ńbB5 li^ßkIŅ]6h^]6ńbB5wB| *\8{b)&j^zi_#UAýpqQQx)&8wi&hXؼy䪫 J y衇$--b^}q p%$ +U/W أ-ڰSU>{a_d֭JNo߿wpĉrwe]si>|+RW A+'VSS#_u9޽{4bJj1|.α'|R%-0y(&!l5Y1*:W/ j+̲QZȔPACJdM7 ¾?Ez٧Osʒ'N ^-^Xn&y/z)}e^4bJLn߾][***tM,Xiˈ9lrwꚚq_|QKRRRPۅ& Wkf?Mv 3oxwIaӖ+<Ju{Ȃu5X_S{T&,uo}<(`X~eҥi <M!&{9 iBҔaco}Iɖ-[wcp>쳲aIlӟ#G4j O?]v92gDﳘ2d9t 4AU4m/u [c.-gC 8ݵVlZw;,K7o}'OB2e]/Ϊ6wS8KMMm1=zTcicˤɀ4ގts0<f48/9N⋘eݷo^f?Mv۫1}=JɩY &XGQ1:N,fu]Cvh1٩un ý>ӨX5..? I&9>x2gؼ^__/ƍ@ ŤY/Z'ގuuo�Cᅲ+&Vo0}5˘\>vQ&8׾GeJb^]W FDAYZq:%(d^߯Mܣ;]fWLc>a7$a@}]{ァͻx|_C6{饗t9*~/5wl-deZ~3}^O8 kiT@db\bb.wÀyvv@W<hFB#<|gصe2aW?`92-w- <α--&wR@ &22-[oUwÍ1AXAAKi^wf}] xA[Kv0,a|U ʌ%:ިuenk˼6|yso31C.=k00Ww'Ǟv4gϞ=4cz2bZ >Ѽn{@8!Xu~\4Zk?zqK0Ӂ: bFĄ--D_@+|Nu 梘PLh&5ۤߜ@LǷ䛙{aL1hMhu w+aI\ H& FQL(&4Fhm趗F1h(&-p1^ńbBjtFf5L|!'h4Os$a{>`III>VXR#͕0ml111zTQVf嚗n{鶷U[o]b61c4rn{+1͛Yжc[Ohl3\ ƆDH 3ܹc\m0IZmml-ΰp\4<8jVXxL>@Ex1%xܹ &͵;C=!XF 5 BLrK(&!h};r۫ atd5)ܒ8POmuyW+Ҡ;ɛ & ;~YF$Vݔ~jmdhI‚۞5/z ̙Z_K~G$>S`v Q@a.\(/m1qu-MǣB}.wSCn{?<n8¶U5/RLZeUer:VK^}/w嵊=Rn6t+zJgSC0n{ ;ѭjQk^e7Wxt'$-S<fhƛw<u|d6O>t_Virw<Zmނc::itԩS'<k^F1 sע@LKj&bӏ<u 07ڵk~x<ݗU?m4e7)`#6- hcipW+׼t=bVht6etK h趗F1h(&-`^ńbBltKPLh4bB1h4ńFkF4 ńF 趗F1h (&hi(=PL<òjժװ)1&( %{|(|+`'66̡yY7\3RL{=)++37 /SN[NOՎ &/[{Mή+`'66T >}x<5/x趗bҤ 3n{1-hx̸ U9گjg]t3f4yc9|p=߮Ebf%KtM;t5+WV\at6!=kחx趗b]+�{іr Wc!OEk Sw= U9(h1<G}`Тm\fskuMob>];נSmo#;0yd-�g3{rK<tK1 C_,jO?s_K#&xa`֝\u>cңGYr}^VxML<]լ\[y mog+]Sx _Oy}n{)&!c(̃-\V{;c04SOInlm5s[\7m{ [<tYL)퐹k쳒dʲr#T&%2F OXt -䰖tۋ.$\P AAO0Ĥ{ċf/15!&\[s m{`:ư0=7׼v^b/m֬YV7Tn{aG- s L>]<Z^Fא%<�oWL<v`7Wܹs+ftnɻK,5U<FS͛$s۸C1 ڊ^ZB(&4ZkQL(&4ZF4 ńF 趗F1h(&FPLh4F1ڀm/bB16QL(&4ZbB4 ńF7򹦘PLnK50ٿC(t8̆x[拻]+j}&ګ^I3ݖpkďO1<b! Kl!66_ZV11=4ysn{e4wu 5>i TBc:<fRŌ1#^*~w|G,˳t<O7FwBޝloam/Ť̛ݖrkGS-7xCOGk&&&.�JkzZosfpq~wΤ$>*299 Ν /՝ C@n{/v͕WF3ov[my5-C|ٕ-\Ч9N:0;{֛olr}鮞΃Ba` mo`n{ s:NatK1i1nZ=E<FѮ;_+1:ζZ26ov:n/bbtZm]vՃ ϼ h2\z沊n:W)Æ iB7{lsN[!&t:[m/$$Ť%Z{n=Z=j+OsQs1~d:�g?bb7''G M_|E.r[ ?;u uu0W^IHZ[sʟ+kرP6QLhVL,Ƨ6n:ńn{i m/bB16QL(&4ZF4 ńF(&FQLh6`CG)a3ߖQL(&4Zg#c$7;L1hMl _^t bB1 ]t&~_?:; l(&YL͵Rn{ ;=]4[%4γWSMi}pS A :-,#=Q˅^(;v1bcbe Ť%Zm/ S`զ,ۂnCML0aRQ^&´X; .Ą4^ }2bpL(&PtO'QXMK.2cƌĎ]oq&oRX Yn..L,7|�ɜp=[ Ť-^y)++s@kVk]}]V{p+//>v'qpnA5M73$6b7 Z%I3r-(#ue]d3PLZl ]Z2%KL<5_c=&=z+Wen1'MVRLIqQ3Oc'M(rR1\b ^l G1 6t n{‘=Sҭ[7cn׮:_d>IdPL|UYQ.gq1Bz֬2a˄bpuk!&ݻw{"—cV-+oױrӋ>[q- [-Eeq'u=]܎PL(&h !&ӧO[wM5u_ | 4MVl׽pi,18\|rgj)-)pTF(tbB15AhF1Gkb2 bBPLh@[&ќF1hٻp`ńbBfCLh FQL(&4FhCg ńFkb;jd|L1h`?F1QL(&m誗bB1PLZ&Nt鮅qKU$חsz衇$--]k0$?/WɅق,ϣ^Ť5Ŵ㶴"&08 Ω(&ѵkWKyY^fWQLZ<YKzSNzFݔa_~z|9#_"O<ݩ<' Ə/wyQȍ7(wvnIygw_9ŤS+eCj^njW^ŤW?hiIVݿ2g}DnOb2dmZ^~eK/spCo!ka~ڵkwĈۺg;[tA*:gxpE4Ijѓ&M5joX(uqxru8a +&\sܽ{z=3A9 <?##C;C,uU'nKbB]JKC7V]]^2ۇ)&YgHY`^Ak\tKKH $X>#zu.1FZvsk@V\.ue.;\vìҿh"=F=^PtM4I+0ԾQPb`]4[nCm}F!ýޫk<�_PP.u c@>Xbb~tou]tYzϮ۾ bǃн%>^Ť[[p06G4 ŤMńbB1PLh4 ńF1Gk/Yi џ bB1h4 ńFh\QL(&4i 4 Ť]Ӟ{PLڋPL(t̸N*n{ ˓W^yEy-{CLf m @H1^Zz;{CCR__'}d[Gj=vQL58c#'^P9R;Œk֬11+<0,M1 m/)"?uur앝;*R2)/-"I r>==Pqkf5<]spዙf&&>u%!fDnz1?bb+>>~wy 4ȓ.]Ȍ3BVL趗F1iի塇j%z,~AEWe˖5rkM.}IRRnerr;Y6sL֭nEO݆x Tn|'VYvN{yyvbB4I+l Jn{ͶsNYxBQ1C(F;]`7|27ƒͅtVyǤGrʐдULfϚ%ee $';K&MPtYjjj% N̂єbt(-w5섄Z~7Aܟz)E4^7RZR$WUnV_ղ&O,? 5K.`;v <5k>]G Λ#Mv[?bVₐ۶XOݥL͕ؒbBtqnޑZ^VNI ˮ090> oPx[5  !716mn%:tm1ӧw߭D NvtKkMc&BTz%3iBk n{P]`EZkN+cnjуZxxx (&m1D㏾Ia~>bB5q`ZɐA$!>'1ϣhlgB U1Iې*#m}BߘZbB!yq-!(ƍZp狐4BiPL!PL!PL!PL! ! ! ! !B1!B1!B1!B1aBBBB0!PL!PL!PL!PL(&B(&B(&B(&B(&B!B!KLW-'J 19v!V !p̄BńBńbB!bB!bBHfjr#ȷUIqa[? !!HuUlܐ"S'OÆ~0qR[[^˶tI,N| 2bηm[6KM !"٘" y9rQ9qÇ%';K&-׮i"F/b;?Dl>)*̗E DP2 :e+!8OnNn١)E4.V I.!& >RTX uRL P[FW [$P|,*GW'EZx !$&Gxq�\K1ACbBH*>r ܯ#)&ŤV(&!1P|?jʞ=o/b[LꕘtWU$I]F_ńj3d 37YgUyvŤ^ L ={vKyy8Y Ta$X.zy#;w|PbBHB2{=\)*yuR٩^zlBs9:ܮL6Mn&93k'Q1DyY^Ai8BBlenUz{v*KK%;+c|x-p5]/MgSA1! B hy@H.L k+K._B60-(1)ιsW_-+V:ɑmVLER /``T HNI^׫*u륬T*++dӦ4-Z8_7nPt@Q{5MkS@1!$AWV/-+2%,Ew(')gp<g.]$&&(e ,hO>r/Uz LFX~~riefV_/+Wlݼ0c[Lʾ5Q\DJ*P$/[&UٶE.+dl )7{xj؇V lS5 #H^NڹCϙ%;wlwuC)!nn,⢂ۀbBH@8)U\|<?UgV%&8Λ?{6~q(W]uU¿gϞv^#fjc'|a/FCM<::Znf:%EŅrV/-S5+KֶtYDcߦubn]c|Tqٲ<!N֭I]\ÇE󵘭^B2n<7p܊xتb"`zbBH<)Pn-{lUTL"##uo0N9mm^?tP:Kv(s-w񅺘i1YDc]JY:I2lTbY6]-7d _ǫ[m |ay9YZ@̜l/Ο_gn`֎q9F1!- ^~Y$g?YJ@v* !ISYL<y]wITB]tDDcUf^w>쳥Bݣk|؏ݵ\㳋]1HBF6Ux@U_(ghlLYױaB,[5^tOgn->G%/7[9,G�CXER\T([7K\l |]-{願b, 1XHgVUߦrj&Ղؠ dg†xsirWIBR-[nW^3<%TK,5wyGFyuG?HJk>橧_~YPggg /1>4lV N o1JHk\+P/,&U%)j<gVDLVfV-!dlݬq@p_ "qiPbBH(?nPKSOMJ0 :Z#p&Gw„_Z:t \s;6r=QG][0vƶrw˩*]I?䓺SN2y$Ŷۧ-$>Ek"IYIW\2U>hQQQVRC8T D%ej FWcZ.RY !|| !!*&|s`w&8g®X~Zݕt! GjiQí!&0vb'< w9�: 0!!Ahw@1!$D{EM 󝂂 _ }I!y %iN1Yf[6KaA‚%>j2}F-4uܕ`bBH J1V yNA47qqFl!9)IW׮F`\`c^.7 4bBHɁ+y9z,ݬ[A?FSLWIjJdefƴ4vINNՊu)1OĄ7 1Q_#1?î`�_L<;XLlc1~uC !*&WASL;BBPLnmر MLn_YU?Am/!!~P0ٲicPolټIM,E󺴸HJvV. Y(&a`0vlV/WUeyH~  oaUaW1=mf]𤠔P|A O5K1!$Z'ܚdBjO6eLnW'%ŅA? !9T_sO1!)Z(۫IEyߟ][V-WPF o mPL! ! ! ! !B1!B1!B1!B1!B(&B(&B(&B(&<B!B!B!^Lp"!b೘B!P:w(:+T\8(~\qVE:"zBHI :trnlŅKMo8"x!Ҿxġ8tC'.qن8KqVq. !;~Ё8tZN\Ѝ: M;.Bw8tCpDGniɩ3M}`r(UΎ{B!ʡ ry8á#u9q@GGW:""Ҿҡ8tC'q醘htph\#_Biw\Ё pC'tiNu8d91rC}u0BH\Ѕ3:qC7N5CT a1tBinLZahO?@ U'#����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/album1.png������������������������������������������������������0000644�0001750�0001750�00000522057�12161032160�021416� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����#������sRGB���� pHYs�� �� ����tIME  I�IDATxX&&7ވ {G j5+vNQT^XRl>>39gX3s4B<����������Zcv?;'"EE���������PHb|qN6JB\.���������=H)ODHh L>uNJ8RD"DBP���������� =DT #% ?ǠyRډ\rN.p8, ���������xAbI"RE$"ԠO&<NTPt:F����������%H "=DT #F$H!YPj >Oݜ'*+[]]]QQQZZZ\\\TTT��������� %DbI"RE$H<"D"tO34hl6),r٪&&@ IAAPHB"?ɧZV(R2OAƎekap4@ @ #FH!HR gIM{d2HpRI5738@ @ [B|| *vΟ2c^^^ii)IH*Z"&?ɧnS":<g{(c}&۸Od @ @^.~Hʺ * HG),++C:%L')=ӞԴgCCCee%u6 0 ~̙Y9z/@ @ :_77r;@PaTE2==�$Jjz{nJT*En\[[;dVh 1- ojp)~@ @ kI7R0??$e]ETE B"]ZZ%LH6;o[䓺666VWWS9- `vlpP A1ʪyfgckanmfnci75?̼!W stɻ~;sT׿vkej9ho.Q67r2رͫ}7|!J}e+Rؾn^IuuϥM]J>SSS T"DIyL>>b1á|N (7lv->.NJB -&Pa*!>~ήȵp%OCȑrtL䟺Hi6Ҷn"!FJ!C~ou]P+;xX;~P/ZFfw"o;i}~Y7%BQu( :ͺT{ԝ*?ER &Lg)˅B!Ū+--mωWF9qܩSS@ OB$ eiYM25)]^ȑ&S/=qv>Њ>V;fki6>֖ffvVɧٟOGgmls J˧=٠vdlZq03ꛍK7/Kwn~ˤm vR{{9Y6N"Y;w8 g{)-m<}nrn5T=֒mavO¡+Q v*Y@T}uy]J>T"D4f|R d2z೸O?2̗L| ; ûS@ G5=kgalkco)R=.V6:rp Ns+3"9yUotq<q$Wi*\XyU|wEO>GEtZTdW/?g3XB)Y“"@{nOxZw~-,m&xwdrWMs8xF&{9;M:sI#Wט5ɛ.#h[Xq/(P;6Nݫo3bzU%~]NVڠok>]>"[Pw-l_@ o7vQJQu)cl-ygBBBzz:JO Wx>O@D )eOg2f#GS @ o:a>/S rX-N>wɧKawZڣ\Bŵw% |w|ORs;B@usi>U)!xkSQyb#77Q~t5g/]V%߼q#1TD9;/.﹎YZ=i~pG?"W#HGo_g+'2ςw<Q'<'֓}+g`x~䌱RwЁc'=x=ѹ<d>Kyc޶`[냳7@ ۍNNy~y/o罹"Djif[e2555|6ӾӯݝZy B ;@__jOl-u94G:Z`mbk>Z{Me'kIuSߠ|jcmccVK==m` zu9裌mmLwco'8y>w88>17o+ ks3[k[g{SL _vhj \l<uus(+=0nNܶn™\--lɁt2(UJn6VB5NvV/P<Sh//O"DjZְ|VWWYl֒<zݩ@ 7`/֙ϝv>hgU'&џ$-N>6JX[؆x8zlJ.p%.eZ۠ɧ~O~y=SV~ :LdeniL=G}x= vIlC>nE?jz^P-;+#LEoi٠(8:yXw2 w[b\Nman.8{zC6{y" W%�>v3IMdd!X?QIyu)cDۺ줮dnm%g\\%H-_@>Q>ߢŗ {t@x|=e ;l-,mg>36.fxst[᳙ϙDkKg[Ķ4fino5qiN>;V(vnzgݺ]5ʝ"?>=#^ۙ/^ښV,usGzAg's^ .CgG]u07N#owXwoQ2u)\`lYExψf>9Z;ۻ:8y"y89t2`/' s;3n>@N)&}utU7t ym\gۗ@ V | T@T=ٝ-8Ծnȋ'2>w ԴgwjA wH]hBS%iMg5UҪ~^ޮ7h8˔Q|:Zf ȇ9)ׯisq񬔑?g-wvgCO'f&_G'*%/R>Ձ@kԁL;;GD?u!)bE&ywy#B=\=sA3&1 ^=1%5[V/߸[pݜS9d# ~W=QP~|LWێFamp^zCWWiomma:訯iL*�;v3yDJ;OTEkվT{EgJJ JUݕO]o~߲ݛ}3 @ޝ:,VI)ђwBG=\6r1L,Oۿ>Q'A^n&fq M5wOnvvBܝ=eT08Ʈ;N>OdDaf+Cy'|R S27Mst";6b\Z@\-M9!3omEyuml;{\6]"pI?K_>ld jL!̉=qQrۭ{ӔM)-j6?K%OռyQ8;{W?\XSwXA^.NKlܴ;;~q fJ"[T@TUiS7UۻѣWΟNa psv17 N#m(2IK 䍶V6.|ZR<\mɊڷYZ88hEÙռՏ3ڏ4m!nvquvvl퀻 Q-H{[hM[ѦK6Nqu\{f1 K'6u!7B(\K.G[utUQRuWW>@ -fj@�OgusCQ["jׯ֝ytu <vS'fy{5Syί閵\f?5 IPjUyu^Q>'X;) @ Ow7?Ok%M qG-ew\k_sq@ @ kϔuTݩٝ;}!@ yI\xq+#A @ $/#;Ĵ����������(s����������y���������@|�������������������@|������������������@|���������uއu{ף==8Z(z5.Xp0M'n+g~GSooZ0sᏇ/q—hzBWʢI<#4 -u\rXD5Ϳ �������{ԟfO]qO%K'|߹}u] ?jiS _o5򠺡aUٶ4:sN?k.}_|@~X ��������| ;ČeWSy#!?hi%S]cQ̊;fM  bj' % j\rh˪)AAW4+Emv귬N9<'p3g.5<)SBPVl>\SUօlvْs߮g|EA?^.l_/sm8:sp /2ݩ<ng,q`C7; M{2 ]ASSL8ESžONۦol-;{5B��������^7|.Q~;cy f׹|oɥmef5w}Bgo=_" )LykOĶɁ[u.[j='5^9w: ]\w;k E<xǬ{N=im'_7sv '";r~6nߔcWjp˃ TK^KsB$TF>gk/`s�������ɬ K `- Ojt)x_w4>:g` po@HX+OI}|褴r2}|sH`֥׵]¬؃䳙o@}ԵZQCn:wژ[ߢ(eɧa$>n$a3au|~50\,'&18/DkHg'm#?&oܩh0 �������| :�ѥhcCX[Bf@Y{|&Q|^m!A Wz/NE:C^łui᱔V8ZnM*\){{}|g\CH`7Na]T{SPc6j*ͩkk6:iMݽCB&Oaut2~3{{Fճ62+O>Ϭ:Uϫ?Ltev?PC&nѻn��������~?,GmsiTM]I'|#!jĐUm|U7{9\UfgG]OᐤMbpl#;%|>kQm'OXi95c줵ϚǛ+:?oI;n݁,=cNz|_9U>;9o\[rP_�������wN>peW8<OED<Nœ|fl,/FoTa Mޞ9s_frvu =P£ k/UZo^W9d'+ǧPjǠ;|w|ZB mAm˞6850<cӋwqS7H4uҚػ S?s37$vpI;n[1wĉ sBRiYyI>9ymc]g�������O}峩&is/_b&J>h+  ӭaؼrrp`vۼ&ΛOZySCQ7~B趵SCY|`ۡChݤɍ+̘,ܽf)C͵iW/&2u(J;6=^>;l%x,oo -gvtNKm]ZJxLkF>&E^0#$0IL��������|�H:�������ʧwW~Go'������� �L|-u�������7 '���������ǑO����������t�'���������ǑO6����������tkL����������&����������9 ����������'���������� ���������� ����������'���������� ���������Y[[AhsҪWh)ޅ�������-HPE5NH 78:Ż0R���������5϶M'F5 L$ J#Vj @IdHIHU (1q%F+#HDo ԸAl-yCA:'}JZ;_*ӕ9dib64MK>OܝaS̗-������O+݀x3ZRB."TbHA +0Z@Q |<"T0 �������ەO$j4O/82OIEJB$SL|R5!4" +U| / jYG-~}=xz�������'nuM0}R59ɓcl'WAp_UXIPh%UHt J ~]á=D{ PfX  t3b�#CMlYҢ)cM ;˰y?l'aTQ{*z2:`А ސs}~hmFu\=_;nX&9hQ5–YPn1pȥX{*o,4vQL4M{ť,pnЀcm:G 22b2wdzrGx�����g$:Ng%.f2,*) c+qo+Y*LxJ5C&g*r9OK0Rj c+T5{-[`Urd�99l2]6 p<h2z0maԣ-_? _o'd8ugm_[=@[qƚRG!=L̰1H6e4b`mj%S31Tͺԡ)ѕTuNs +ޔrkL35lFw%S ˧L4= %,.,A#%OKi <>Q%໑-Ÿa������n'Bt1Ik*q_s8.UR5)2!Sh P5BE9OФP5 #8DbB&ha R.czŒ3;_+au$Uע k[%E#g2&ij$,zٕ۴S %d-nd78ksv03k9^՗d\8(rzDa:c'Na>>*kCݣ&f+/;VK_>kmӾzJ mTʏo9a%ݞ#4b������|Y43m*\Vid|SIDOHWJ&Q8M /KKtfX,Q U[" C|633uS76g?ڑ|ʤWODž͞=OjTuۥEcd4tRuȮAU%hpfQnam:|ӂ:]/N>iQ{2(j{E;M\g{ciD.S[_>6 kڒ,M=~}.8m̘1&V1d;y'������C)`0%m5B9`<YD-T()p(KŊ8:;_*%\q@+Ijr\S".QB%.Rjr}O:?c=oO~mgYg>տl,n2 2JQ}%1 gRہ+:On>+,M8ICϥU|cӛ+douKE*g!g1t3Z' m 7~5ՠ'~^Wz{K5~m?������ /$m]ZSlŒ%Bаejȉz/rTEt4I V0$ 0TZ25ҦYM+vv͆_.8͉{5&,'OPmbm>NJ'z[ {5o'jK%|l6Z;:pj&}OwU&)ƉCM Dj8q(r"6<;˰A+Zn32u)>Pڥ|:|Z.[d(`ѠѺ)S^������@>_|RυҲ'jr擡U*ʦ8[N%&+!xHMertN:[T*UIU"e c*ZA$oc4䝐ϭ7bв*++Μ;mPUU|vksV#R+Z}vA[qG_|QTUWEeUC]Zp^E&'ߧϦE-+Tb^A:Jl[y+.M;"Vvmflޣxr_a $gnU4%-iuƟ+'-Kk+|:fWSJ_'Dm=J6xV^i!eķjhcIig5eWX;1 WKXy+d&C �����3W@>[ ^\>(1 O/Ufyw\B[EI4+jVWI0xDǓTHTe"y>[e <TQ-T4Uei{W場O6}#pط:p(;J֑|8;g>+XxI%+Xv>>OՃ"ܽ:00` 2x}^AÜJZL_>%1ȻL9w(QtI~!jixwǏ:~/PۦƚcԲe!jF90UueN<d/1}.؟OmKBIFTVۤ]'Io!-e39-BrG2)ok5 >[0|ƳRm-f$b������O,e4x'dzW'G% jifB J 8 uX]0D2*q\Q5U|)MKzQbHb4#O]ϦƦffܳogl|L͡윬{<ojn|lޔW?}맗2Wհ-]x5=&]}-:?."r_NnvCh1q߃ޮy!40xx멋=yvhjp?h "nz՗ODuŅ}Ƙod:,t|==؈aQ[ta$߱C 1#pڦ T*f_>adCoZgS779?'#{i^тC~q<)/7n0#tmZY,1CW=Y ������?ipxٷwKͪ W`+LjejT]+PZHbIj obB ;_^Иŗ 0\PQWTbePQ%T2*P^+Ez'7f]}鳧N>^RRXWO?DE9yDYy1d2^E>K2k:JmJQ 枛DT@ۯ(èۥe'?u G_>`ѐϜ=U__w.[s{ft|K#If \yMO������O%_v\J81\/2O\#V\R TU5be2S*.VKdM$+5,9v)^YITG5ʉ ^2)˄|H((JwE>kh5*?;1)8:Β`_ĞGtګg~ݪA'rR~݊]ϞĖsSӟƿ|nΣ!$%'Ai/By R B. Qzv@4o,lIoWO�����OdzNy(R&c<2I#W6n Wђؒ&rfBKR<:AHXU*5GncM5_%"!W7JEDUS<hpO|UWȃ/_XPWTRB:t+UV|fU/K.؝<. ɩYYX7*i^ЎN|S=GC@AA:x�:;.:}. A;[96ԡLT[�����པOOBN רq '8 `<J,䪶˲ skMlPIդ|U`<q JHBEje|9&PhJ@A~䡦8KgEUbE蝙,,+,G7n]CY9i)P^,;'C*V0Ч;yX^4vǙY"GA{ȋP]'5u@>������=6O7yBIH*8OA&Xd|"{bL~ GIj\F+4jRqm=Q&0"!K* p*`0*|ffe_8qJ㔇(ԡ#Ϟ?Gųbs<:O\9?|6c閳t-0s444QB!وC)��������bt[>uK axKtZHSTt-9*^:R}=|FB-$ Pj4 %#_o,>p1{Zl[Vߦke*^\'''ÄJB,ǔ.SD\z3~};o]KM8!!):D={WSR?@PWSngt;'?.Yv:1#ם nΣ!\q G'&:ܸu ]t)g>!"|������#D>5ȧ.A|1R>!RxHI+UK,akrjԉd25.Q㘊i*,_-HbZ/Xmz$1!{/[ksbL(( rcT|"J~3'9wa}Ct:S"Hx|d_Ou0ǻYsO%=0z1a;n8̹ݢahhΜ_ҿ �������g ]{]խJL#UBX)U7ԕJܚRX{-55!V`l ҹ4~k{g:jvV^3zyW{.'L:%5:YSe85"ϸ{ ڿsޝgΝ}p{>u1ѯ"7|/?mT{YSN<h̒C;O㧎ݷ{>0O;g7t}:i#ה^⻾̤ՠzL:-;tVUZIXij������h|W\dH­'Sɵj8CG"82S)1B + (KvI5t<$͒Ĕ}aϥmIx&XTѨ%3; tA\!Sa{W)Y{D?o޾kώW+ݢZr1!xυGΏ4wK|Qܵ[oη:kc_D"y 0`tsXu2f+6mei6/~������wW>[EI* *  gɉF9A+2R)W2GejDEH_i.3^s&ך~+laWKpH}!+ϙ‘wR|}pꙏ?BSjf7qdwG>u̹UUU9{\ݩP<r81w}5&,'}<}TUu=wࡎO0tpcc+5\|]FOM|ŲvOm w+ >3Ryfk$2݉\ ts 4d*h%e~u<<|i/ vnOTfcS|ݝ\&~!cM>2`ކJ3nQwN������7!G=|-4< *uxJ *W`PFE JVDd3d~ΫL6\:P¤ U2U@`kw5i_Յ¯UYѝ1精Ok\Aǖzy!<g~,vx[GGMmrk 0R}23)ƕIy7=M$CBU1M-Qc7eujFGЄȻ$s]S(2u\;ѷv+E-n[,\.K4ZNͬ枟Gu|rzK磝OP9tZ~ΗHM'ڍ=}pGt}�������xSIRKumO  #)Ra"WL9Q#d*9y;.&4 L#SRLuYǁ^/~tOQGk8_N4H|GA7Gݫ\.]Z縊\GMwk7y=7F-9b:i琓76gv]Im$Q"k9hjx獙Y0kWG3fɠa~.E;y3FFCE-w2b;Ѵ:jpqINsZK!pNٙ 6o 3ն bd4-uS>uv^}�������xs\m '!DJ)m+V%Vu"PpJQhbb5QaL9$Sf Yw=l~k?q7wL(cI:W$7³^j/H0"¾ 8YzY@rU\ي%}C&4>pŒ/|./k} 15_҄6K6LmT5mIt:dvW ȣoxRuխW|d=ʫ;>p=uF055K)6 �������oZ>;oo5P(2O|K _@KTH>f\T' 'a稉ǍEϧ[y=a>Ie{,Il,Q]>[/)\k|3%ؙw_·;zDf|~ qz擺Y]>w_X*.g-'{@\.<qfӺTV<md4ynS'gy zv9#k|^hdӷZ:٥|"58{SYB������w<󩯝jB#Qy OZdH%O@ INNNR{{fݽ?7ѣ_a=49) qӺ|+WG)hQ޻.M{UOd.{o}yG7=/nh<jդ#F80xel ʧ\.3nǺL,Zbcj<!\i]AG,L݂{uTa6ot/&c&eR-Nv)5#VUn$|v �������W>ۯX'At(m0B5A>$ *TϖiO\#4 La|w>UB<5r͒!ǟ#y`ӏ'}bzIh{h|lkE f\s*tK1U!'}QYQ5|P7Æ*Yo[w9&˙xHyLr6u;tm|.=lަݐOWyq8aLc-oRa;o�������ެ|Bt!$4JP亵2L#s+TlS!1\"rB -U Ž~vG>ߦ^=|ҿHqWF, '>۔wsjMO>G{}^o$QEV2?|vLµ4p^e�������s!:{ 6JB#ך'RM'Ui \ĩ~0#x*FrI<Ye{۬?=ٔ>{x-O9ղZ^,3T\W̹s҅Oۓse.YdߢUlv|z }+s[.^|������g/$#RAhxr-Qc<br ?y2N:W' |X1Zߎf5˟>GEЃ6=QZ۹c󟮉~}q'=~G>;RG Wi#7A|sIŠ|#SSacO2A>������ݔOEѶ'_ש7vJTQO5b5 0c_Ip8M>22ϲg97nQm}qQ1ȬY}6<z{7!RҢس/glkș>[>8p/c}IߝivfX^PbM6O䳶6 NUHh)ޅ�������GOΉw*8e(ڛo.5JR8dV,ȖK-}=V}G?i^w=[6Ty<W^tDs7&T$2u ?gnVmks߁^}ۆQE.14[e oC>��������ȧv[O S")*O?q\c5^*RErr$5 ׅ/dZzusgŲ_Rhǥ<uL0dNOK?߈WKJ1ٹ\!M|ȒO}t>a6ըWk[ WyE)'��������+焓hͳG=FBF"=m@7K1RV` ^{h>kb=픭& *l(/_fjco|Rgo}tKn|s̟ j1TsҜWP'4 +5'J2Q4++A>5oqZu:FǾ޹bi<�?yHk?L{_.^->.FCG/j{Lʷ6wPF}W `:zѦ| ������|bxK>߹JX91B U.^`WIFޮIW?_-ZPT˛ <|icԚ>Djn:Oq6XőT5.&'Wܯ1:oy"6z̹O~~XOؒ4A||ENdԟR2d| E_֣uWoʦ &Өm_okK'.ތ?^>Yۇ22ܟ$dܲ΃7����� yRU,u:Tb%&Sg;JÑb,] L0~`LJ?ntƤ.|h?.>Rj'Ęe諉=\w_ecU,̤LIpEsR뗦:*p!ȯLu<mw/KE] J <'׏M20h}Rò :zFhcO|tef.aW(Cm5q򰎪"leaÌwy1Mkhs޻sVQd|yrhGD@ιl7!ps嘡CMY[1&C 3S_<"x3V n/)g yV8vz�����'I'2OvzOܣ}W N)0zc+'qxs)?<Ni\1.lǛ~~g7)8Vk0 T@i1' $RYݟ OgIz#oʝR)Gg!g>ߧs26k0kjI vkP>[y\בhCd3FNJyAEc×O62pSP®ަ&c_L8\)ٖyX$-'-߷w vu]}c`ql`u6Jh#,ܰ7"bӪFIU_|~k^Ԣ'yh.疵u jjomDTDr&/R '6!::A<B{) �����>':éҮ[a  |#j@qUr1lkm?lty8vu=O{ο/웩 Vb %MZ-SKw_wã\.:*wOkgg6MJ}i6o?O1_l|Ծs.sOV*xJE1 u|UT1P~OV08ls=i}FbWG%Isb,BR}`rjtVJ}s*1lœkd$-Y֕ ɽHnU]OX"s&M}i\g+RB#cJ8AuEu0ZA'gl/|Uc./&R �����Ojy*4-1B\Q'Qj4OF ۪52!T ̲K`ެl >˶]f92W,Sq5fcxH및~='߮|ٝ"$w~O~+L*;}}5qox^{q)wkY}|:CP(`_D$zc =[H;ϟrk#;Z׊ihz[Țqǐ'eRަY޺'E]s`le:OtU3G>wknG[iZOg}\fŝƏ777;|ɤ$4̽}S[Qn[a{,8e;ysSpil9�����gCRZSj*4 #99OAPŞ!ǒ$늅⫾:c_ߝ)ב/a86)GJ\-ÐbN|V?sV?Z/.:~赲AGsOu0vͲǕwX;֥oɥ/+;|5BZ+Q|Aw~ga)3̶+lo_;W-L~};6e\4DN|.$ob %w٥#V|z*h/׶p\3nK/^>u Y ]C<˒OjZh`sUqqV3wQݔ_'l*mJ>eWXo1����� vu+X*SW0q NTX7ʰ|ru<fk1,#>>ެ~N`t-Wp9KTD_s oՒ#sL3BQNEdVϹ9M ?]O?txǣzvDJDʓ wi}?SQTlE6Oin�Mp =Fg2m.\fƣ/_9cVmuvDDF[ଽv9)fh~{ۆ١VA ]v).t׭9LP b.0M'qhwF۰A|"\i]ARZ~32I 擷L*%76BR#żW,rnpiL@P(������r5rr!B\FQkV`\FHڶj * 2u&[~F4#1I_Rٽ/e\}er:[&¢PX_0 z~cURzX5}硬9EÙ'3.OOčruX\V%SK驼fqHSMOkZNJZ|NoqIdJ?5K<,49RԳةǎnԿ#*i83sâIF3o4t{=+fxWICF`<"hH ]>W7͵p )s m2tps$,oh<wn@󬎙:nHm&M̶_d�����?|*5+0r\-! *5b%M(9|b%AOi5Xy邀"*iV:""R{5HO n@9|re3ݙٝ1yTc)4Ŧ`z­&t>_'l`pg+=BT182>!ZBc=kQFapIM$D�ZVՉc ⚉ ~(m]R=):XdW ůï'0*?������#\*@Xha>#:yOvBc :Tw:X661xX Dyq1 O-#3ۘOHu .<.ulܶsT.|Hich\l;ޙcv&4K^@ >z0/ o~1k&6Q |.YdѢEi||~Z������`�3D r TB># 9Col"PB*O@YVK椴UuN#Aq4ngO ;OH ٜv6⑘M A‰knDwϕ:0~qte2Bd:UWDU+$R i\4C򙕕5[Ff۶m4ggeew}W[[ 7'�������|fEOU6jڹ!WdW扖u=[ODY]Ag"/O.#ijFwuܺuj2osN*GԷ).Kv"je Nle ):ka :O׹;qVVh>N+ٵWG{@OlG[OOϙ3xϜ___lo߾]OOnN�������'D䳞!8@(=#$r6+d,#D+z~F O_A 44|b+ƨ < R$�%$:IL-z|4]Cai|L$ A:V5[H'Z<QkK](!Րtmo4*k6Pp˗- ^B>ݻ7eʔД755|�������9'K zJiicqy<?SL02x" ;]/dCOD_9N$'d D#iloe57q䶎F43 a%SBS^[C׷ $"1eT`D-6<vĢ#⿫Hmuɫ\#3P~X7)ckwY +YRRhѢ=(%D;WLd||"F|`&OlϘ1 ��������|NwRKEhP扞-8|h'vy&G |A'qN.W( ܮDYa2$*3|L%*̲vNj`zV;VRnԶ40nV9Y#"҆1飏'HZJhIrj O:lVhݟ1ͫʂGsp?{{~g%cF|ǎ@3.&q7nܥK0vvv6l@6txyr3g[,ui=_c]2sK֚(-.5ϝ5k"A& �������חO>/jm%*O@ N]$sL&h<>%,RGXjY!�KRYTVt^#ӥb3#5ˣ7a>|_03k?L89F/BBw̖=@j8|KW?iYspV ־v޸f0o* ]n6)dɒyϝ;{"Âo͘1 :vp877իW[,z\R\{% 7s\F45߹3w9v`iڃEDȆ{3lll$H �������e'G r[ *!r">O~'+јب\&UMccht^csѼ�Jߗ^%MΦ2XnH [+aELwJ]\$]s$\2%.猽lEx16ZK.3)ĂRۮ)u9k_}szOҘYwKh$'&!)5ZjM;4Rs ^DnʣȠnyz ɓG-[#򙚚%--ҨxkVhvYsSt`I/+kNfts=>}JMΝp-_O�������cd6;hAL"dz4hm[._iPgvzduUb铒5a} ~3osw3s7%bVO-p>iyXZ%B%DI:3<luUfSM,6U]b1aR6I)c%,|bGԕiw)!>~hq1ђ'IIj4RO7.Wܵu6owgܮ\@^7$h`ƬYBBB'M֟9o %K ̳-bz6ldlԩHiȟqXu~&%%?~y������/M>9<a:m+!גqt 9X\]TOg Ҙ3U[]9֭q*wxI{K;^xȯlPQR\ 1SŦR e~[!>QvJ.R4 {:E6u VhX d4|kPsΒ:1,b̬]&j kt%;3RSn&֭ˎv.lN;_<͛`ֻwF6/^_XX8nܸw.BS}}]~Jyێ 2F~j}t!#?XƿӧO6�������>Kd󄡍dT? hl~6hIr ]vV'-sN6�iZY:�K^wZC♨u4\k>8W?Wlw⣿=+Rbc~6nuIh)xIq Az>}\SCw!yO7WX>B.sgZFfZWWͅLI" e.[௵+zYO[9*!.c$ǕE. ϟ0a[1BzAڼ{sZI/:e''�������|IᳯT."-V:N#j5-J$1H6z8'$!Ҹ~QXF:^,%,۳|Jb1e7upJXIpZIm3'OUl'?@9IiN2<6-$͌NI*P+ ]Xg.ϹW&GIm\A򩬰yܙK˚5j  B:t?"""(38!4Ҽ5:^(keebo6������,$6ߺ#SpD_CDU5ۗΖ巅7&Ƕژ6&3$6 !sB '~JD%j,fib «&C B7g:lX .+N<S79ת5J?Rߗ[||g[yS°(,3YK.#.=eI|=T)m嗟T*L2eJXXXccrϙ3';\Xʲ_!c;jl%tA$RzV]gVL"YW�������Kv~vo&,WSPY^uPJ39EVB$Ո!K(BD54v9GfPu|F+ig5(%6tL&RB BP t>gp%ıDA^ƿTqRpX2pV 帑"gϞurrXh77qǖ {^+x|tt?tŋ6mz=T҅sI.Ykp ߂C|ԗ|s>͙5kB9�������Q+u˳f˿ [KP\ zgREH!c[h, GK52- %N%Ly7R5qLO4Ѯ9QΨKIVJV[;v<n'' ҹT1ѣ\:$;V2ء-عn9NEmL5j\A0Y'KIˢE *Q<iH7n8 m-w+w^dcǎo�������>K<S(vntݏ PHiYT8YDփ6zYJf2 ^-a:"" *pPiX\in󪘲K5<2Lq8<L19TtJ(tvsDdE|KHad1~~am|X̼ʕw`gU/zX35yvX(8WG|)++ vi|/4h$J ?~|NN@4iғ'O@>�������sq,К�33Q Rs>ΧфRWGaaz*nf (Ȧ&F]aGR̠iw GgO Z]n*jͨƫUOl[7p<S-PپhMqӜ3*yH̱!iEb˦qs#Ġ Rg'_Mxx\RNI~S|:::"lߺukʔ)d2�������I> ,^մḦՏEn.TnVR^L3n}G_Hbflt BE[mJzSbiK'H^ƫxl+N/}rZ@d ײ.N_q̄fң< L`,%&5ϼS1Rʘk\%&7-X!fkJAܫXiWZIb R#W>˗.]*=[>D"E6N<L%�������SϟBj/)r~Lӟd>ݟ^Mgz`#ͮ{Mzr %lbqt:n;_;gLrFX"qlɳIN&C^'I8PlYı')]r*TQf̖UJf~6%u$vy/icND C/_]Ӧͩm/~8vdRyz&q!}D'@ptt~zȟsٰaCnOO��������>u-nM)nz&SŸ&fRX!||p,o_Jna8"<(]pxl]v^88B\OR_\6w Wֹ^~Il&71wFkHc6vCw"+8 @m%W_{Xj[%-v]\r~*ҲaOʿ-XQ(g^tbƑGt|,eZXXp+'��������|JG~_:9QϚ('65S04uؖ)6OlHnVz!UIW7'o<vTS9jՍ[zoKI|<+Vs-f1n(Oc_'&1MLk1o$~KJ sLIȺo&zigBKCmWH~&ii+'��������|Nο컠鑵5 FR2̚vN&svݓOmhKju(@4Lng&eJ#c.VI~kB*!S(` L.:<-y3RI&./Rf;Ml%_9ZJz؏L1xuYs}N w!Z9!y[cW\̔z2p̈O*J#p �������g#v~Z$fCg <Ѥ-L|G&~Ct*Ý";U\)71Mѵ餶Wg⧇W}uP3ɿ&ȊUꛕ7^jsP <!/+ '(qľ%>y9bVOKľ%>iub_^Cj7'ZMy~ٯ7s?IïlExPIÐrm_Nr6 �������Ȓ%DUnxڲ-pjz0B9ACzrтjd =MuُNɓ.eM<5^?nAR;þ!)d ;|!/|!ω)L1 O\fOj&k./Fӌ%،MjssgkL:a]C1Rƨeg$\n*kǯ��������`daTRgVy-&=)-Z6G5J'qTƍknAKKDݑ 'ϥ1Su(1IϜH`N-d :<!'RP6_BGL߈)69%&yr&l?$ri"8c#iK7]lh7Jߨ ��������,xhY\gX,"uۓTZ543|ivnFs%Ld60a'z6 _8nX@ɥg-8*>aبSvɧ[>E/RQg/>FZbQ?jIf"6?//upsm)zՁOԽ;x@%&ȞEb1Iƌ%.6Js�������>?$qaLݎM8VܑfzfғZO[UUQ<ns/<Xr3,%6^tQ߉D@*[dE/W'- ''.-6YLlPLBl՘5Wޕҹqa4C~^|5cCqxI1rGO\QF5Jl(Q7ZľgC|~�������O]>?W>|����������'���������� ���������||��������� ����������'���������� ���������|���������z�x<dx !?|b0X=d,}S֊C(P'�����_�峴_ i _�$KF<�|Zqz[>@���೧|tʫ@|D/;!0*��FxwU+]||���)l6R� �����'G ''�@>XDb#L�(#(#�. ȜOK>x|JJ  �*21]圇.D>sss|ݩaCGѥ6JA>hPF�\9ÑOٳd2 I' O�փsm|`F|:^<X}[WA>hPF�\9O6{|AVV').]|+XǍn;;owf[|懆'~|+ʈD=cNM V|P�$ s^)H*"_Ϥ$. O�23$sKV$|^~-l ߇_qyq)^KWsԁ]}mPƪ 9,cR elbG-rk?I%3,mMi=5][-a^G.Wާ~wYsVĥ&;k U=Sz}f;>%1t! EۯCzC Ey?AZnʺFf<S_K4U.Viu5mo }t٫r=~xm �E'B@W,xtz=Wݷ_pQM >aK <w=FC?rmztig}! WٽMt0*Cgx+G}W>|üziδ._:ΘHg:iN 5utr '}Jꕹg{y+J>NQ7Ϙ1N&3T18 R]r#续>| |niʊo>´ibmiNĽB}̊Hm%}x5q{:< ?A>3Ϝ]|YXXp LA=VRH7^SbAL?콬ren"kؼaŝfJ9k3GFv.=:H%ƪΟ=wQ޿" le#mw\i9VZjARfRqDv޼yPƟvt+/dP̝isE,SO]2[ܹs.Yc"FklGB_\ Bkx#mZ_͸FoȪU8H\1ݶa]KxeG>Mcoo^9OFfNzR~D|JfvOxkdflT;\Ii<kl ^gح] V9=P[NNh2C> QռZ#y>`?7iE>';]Y2jVJ՗_7{ƬOX>I-vÑ͹N'Pj:vWۨ :yH碙y19TWUI.-jUG@_߭vB[cC|$ZXyj/rƪ=HԷφރ/D>+ ؃.{C];yJNn%NK%6Ruuq#Q+sck3|CʛDu2mO`ɵ:<c>mO2yf7}#`l6/tԻBgtoX?` e68ς 4|iBwnϐ+C}NK;7[NA-6[+ϱxڶt i6ߑPsX't6IW?K'vkf,QL4 SX I8MSS`u'`K\` ^W)͚0d:?$ʬ;|o6vǖϗ|O2?n>|QPo3K(^'3\ sOu5mL:Vr'`Ĵ*L^Jyף(4rFR]n$S3Vmu>QedH^dFk]Nݺj6)4JkU<j�7O2Kt 巫tEQs>Z[N~oӊsV W̴-2Aj/I L]e74i|w CI#`8> >r2NHC7n ia-=M l;mv8{6}W3_Zzv(l7վm"ʬFxCPzڴ.3ϰ؝Q^3ʨ|<w6:^n.Btoul9hΔo"^csg.u2Xqs\l6&^jd+s|xf-4wXIGOڇϡ6tY܋<{1|j'=hCw#1R| op<bj$/gߑUVWSr#EQ٨G)Og5 s'/QTˆ:?1,ꫬTUPHi%|c1/˕WPQi ��|RHج'գY'%f{wpW3SΝ)(̳<d=G&9m߸lUV-7c~RW̹G|Ͽm=OaFp}LEb͒,|.Tщ:>Was6+gce"7L:`^Cn1P8Ϝ^$63m Q<ZJVƸ+k{Y2+70ak::>5`>|i=V}ѓsdzj| $䈐:ej.V5)j׮]3sht#+U7VGGNBNX^~^/P(T �'FN \g=-:'K>:峪v'v--66G|: 3ϋ̫$5ݭ^:�=*O,[LF>l0g 9ܫ%̊?B?1%ؾgqbu %#nIKiɱ/z"6ݓc`%5Xv 2#j==~׺zvΛٽ?f9ؽg`9*|8`u` 1mڴ#]n9Ḋ!.෬F|U}ѓsOMn.3>>ʧQQC"oBB,jr坫[z>Uzz>K^-%'LQTtA;Y⢥j>q>BXAqO+O��-jDl:Fw%` k n峺r7kOZ`² kvm,۾ZS'XP7*6kܙ/Z'cl0sC@%ɤ5VҼ6yy>bZm\ ZR OY2àm1=M|)ZeD2s48z4\6wMΤZ/ѧ|6gZHKKż _gY>9XI ]}\La1ۣUd4 En.Ý&f9Ľֳj;Xp`ی:︤cYe4:osE<<k!5`> ^ռU-s<z̏!haLʗ뇊-25&喯|/ /D)4R[Ó�[yZf7bTqjKڀtΧmqFNuLyϩ2^v\ntOshW^ DDl}Z|v �gn" [md⎠Uq 6? <k*}nz&gX}4jו)o.ٴ\ZI'Bwk0;%,?g뷫_ZI'^^\gC̗Kis5EfɚB\HkRYшRֿd͓]]30C,JSVQ>.9~ kOH>=ȭy𒱷7~(53XI ]}vyk<}+H<ڳy_+p5z3^yLk7sl9]'9ݰ4!V/)-=CfFy-Wk|yZcy>X'7i@>{?bZzp^6.VgsdWs3O*hgwsA/YTSQUEi^ T# kPVvT6G&،go# J99��|< ](MPj)_(K@R^>FF=G׈̳E*N*ύ*ն=Bs4[4|ZW )kpI|S>7', o\kI 83))ɦ.PO�D"e%$?X^N>wgctì`4bx|}-,**,*.3zg7űI^7m~-;A>?.4:4  e\9&Q2 l5RGecc\�KO*1LA~RkSq4D%}YuURˏBy- @*܇BbbEnO�Z��ħ9-]pE+ m|io<B^' O�P-Ue9).s"U,.) OKO: 83e%sA>hPF�\9 ��|39(D>�����р|�''����� ��|����� '��#O>s�����\}0D�;}d����_�. &x  x�y8 '����|,���>c ���� ����'����� ���g'/q Ni��������ޣ|Jҹ<����@>A>��(Mk5mηAA�������x_Hv™I58DMQ>,4T:}lwQWܻ'kZ 3-9+罪NCpmInGlR>9ЃO5(G E xcgw+0~鐡nEEXP#^U%%UMϗ{Uۇ#|On_Ws jﱳ׊)lO���`g-|a*n2n;]u}ym1 iyy1J>pEyps˧ypUbb=ea}+*a68(wc:8oIO*D6}ȗO!}#?|b*]šf:RvHuGеˣ\70Q8)37l7|iXaSV{L?I ����F=UtCC၄|aOgթrѺ%OewJɶ_>]RUUFi] g5:ZkTTUQFOձ[|&L�fcNit2%P 9#: %icQnIRBCmTĆӞQE`ϡ_9}Xz sa8< 8rX/LTX-gz{1!q sc1-1Ffy+'<H<Ï`Bu6Pa6'ι6Ք {`y29soO~ ]#ehE%l`|0ڞjhڂ{'17"^ΐOx}z|_~Öx6y` <&0w֏wljAfvZZa7x2m㽷Mn}x*cuW.&zʈ J >n`?esm؈eTY]iYs=|S"InJF%)f"iݐ͊Fi#_ ޭrv4GέgOy]sw &R_'2Rn^k}eN+ֺ@u2�|@j|b $ r򙏶HPJ,@/8%8H_ 3S(b#v+fsFELR3E&e $:Z~w #0<DGw}E,<}9p-1 !#抱co+%NQy Q ӆ_> E}8Ǵk^| +jH> uUy3BuG<4<e4| QzV/=#ݽA5c(ag,s#՝B%J>;7PZUPJ?]]`0İqxC[leH/YYHxNe!�Z-fj~Cd~7- gPJ Vn~CH>ij*l(8~c/uҾ QD/D>CNjW8evߛNpuMG~瓽"RCbsBSoݼaq%&LwtKNn޲2iYrzx64DxR>3Z^A D&UϞ>eVu03;hldpno6241551=\FO"kX._budqWc{|flOwD\5619Z9d/:ANAI;+gM>mEvOrw<-5 #$*!Ɂ&&Rۆ0|A3 z 8`r_10;t]n|,a;|̬>_+T5<ON>{f+aڛ"{T^^eOnæ>CB_Q. ֔Wr$C˧н?Z̯/IMQ!򩨶i0AV9p7ۥЏT/:Ghuא'ϔ<O]BBxϋ52 !J(!x kӞ%//Ճ]a'S^ ͥk*`v<9ޞ4c}(]#RbXχ ϧ`K&1Ita,yPH Y{}FY,D继>x䉣A#}b<ie/F7J;D-ⴱ^UzcRhsQNg|S\3ƅĆGܿ媣/-㛙'Lg4D>o?Vϔ3H #<<\w.A„6uYws)l7Tm]Ո%Rdoُ9w:y[WȡIbXC`bn|'OQl-l#yYKN]KoDEWbEyI2~0|<6sֹ3qp3`444gHx) }kJTQ5-i!lc 5=SQ3+*)^|n�HOJD _>?WH*5|Vb~%ZAuoOvح\fGæ ڄ #::ZjwInUq" _(M=$~/P(k_U}cvY]HVϧBb_h=oniPLhLCo;Y' K\<_Lk-)u%Ǯ#=Y*&Cp k@ˢ!eL ]/!dsB>ǁ5O53qo'/5Ke#CgZ{|6{4a <Snw1ztN9JD<~pF?0= ͐!Ǎl׮[Wjv'Շ.gΦxGˎ zt/蠴'-,7}%m,Onl8B=iY)(=j޻|*(|wQ ̃KROj{GvkN>X!NO/&1 :Gϡ'}|b#**>Zdtm|>?%Lg]ϱgl Jױ `k|>q?h|M>B h^0uO<?Z%�_|櫇elD^Yyj_ ߲eSr4H}_x)^^/a*USPstkj=cx.ff/vdRRUva~]Gb ) e z>P󕥨5*E[|@=敹=| V#\>B!򊨞|1`|/z> MEs'C;86CZC3_ZRHYJ͋ vxT6=7h[d2cXO>5>l*qo*BxE9 ֺky8ag # <zLe SRC{f^xnpTәȻw3>v^o֒]fmfI3v0[m"eU'ҟ@Ozy` ^[>{pb<QO9#1=; -5I#=riv]ܬ, >ۅrnJ^Z0,R;cvzzgO6LH>[5잧g�L{q09OBSq?0a"_ԳM{j9C'�>]DvMMMA½ MSޠ2kPp8i'U:"\.-Wͥ{ 4L9dC79*s/B7c cOD]Otzj=$0Dg˦ fdW4qEm,a3u<a_EOvTE%3y^|vv tT{'0Bn{e#uc2>y~Eak4S˶rn[*kr9 ۯ+pT]WP+nW>VT1e1ұp:VE0E;h v}aO- ֵ3)�*2S71Z@D5~Gmk3M(dG%7l6ogc{h!D>D]<q`كNY2 ;w0AAWxhSVKW%.-Y=D35<0-"0%vK֢~ì՟H/B}?sنSf*}YkW"^Bw.~(ivn}I.h檫'|8(v|sl/vZ<|zw u?cDlݫw[>{'_@GON{IV4vb7tH8>TTw 6`qMj{Z"Ow7yF%�#_>봩Svzo&wm|:pl`~L[S|ʫj]%I L[9s5^>ɽ(UU5a> toB>崎*TkAI;,r~ 2:bb,0DGٹߦp{jJ.~~jɦژ^]-ϳ:,#1LcOG{꠾ʾ#93 ۯ/3G|FԷO{Tx}Jϋ )E0E;X v}g7}Wm5UTظzgC Р&8PWP2r |N !)tk( z<‘<kw㐁kw:s U*뭻OoT{Sw}DeYD>R$N籿i@9j=g)9y摅rg?emytwcOC{>[kkk#ţh;{v529tԥҐMW?w"ΊxCMZp? D{062u,y7X#穵Wҗ;F>򃝌|J>]x~=#cc#Cs9㠩n}ět :~޳RYtnzꙟֽЀ ̹ũs<=F%�#\>t Ȟ78!ixE_OYYƼׇL��d>e,h(@#yDcWE8[9߱19礷'L�3mk\vmithn/+>{8ź<v~z݉S$߿gU']ʨ_(8Gɳ53EV\zdBix5w'> *@>�G'NL}d'h爥陃eO��/K>K|Kb=yZ?~⁳Eك7:߲Aٮ_w]}>" WP; .ps=l)˴@D>J#5M)r{~]<k:Ogy'<t y'��0F,(JU$��˒Ol/"Oo:wɨ+B.;n褣~~74Qcw.wUXGSLcR|c}\vtܣ5mԅ:S.r3\ fO` Jn|�� ����g(-%ͥ>ͥ7oy<U󑠳9Qqh~w>z;4{))y(o#>w&miɡ{>j%]K,?se,5bnuN q{)j*F&'�� �����|R.|md̍Q\4}YuG|UnPg>wշ u8S5ۧNG? #[ ۧOz~f'-Οt)ӈ8pR������S>[F>t;u2E3>\QF{W3VDm϶{܉/ӓyɾf77f)wSԽW@!:n1666Ƙj nfci`z5*D5tj!6.󁣣s̙9e93qN%ɛݚŲIwNd ͻt,>$wFxHu̴iOg]- ݨ0+N <AQRK7bjs >NkKkM��8f �����gdϡ{ܳϸdr9g<`{3*Z!G]aGe6>ڂmeqoVdhnԩD||3.?AzuroV^{!'*"Bx[�[9~p晑DwOLb[4K ,3{&H8rste;D"! _3��峡4К����xoZorkK%W"+ a)ͅyՑϥE)Bf1`c{', \hat+!eע 4gɧ̆ 47n+ˮϻQR}* oWZJn=^~uTg")ikYrC:3JfG iУ;d<9fx @ �~K����(?5Imqc>1BSTB/?Nჳcm,i`.h0{^Ŋ'7cEWgOk*|.ZJs>i~T\t&6.^{ԪiMuդɻmCS)rMft$hHu>ge|5B!,)Vt͉oq+)Ndžyhd zL*WyxՖL j,u]9mARLؾryAr-FP6imh9Q8 ۊ86-WH Wg;{#"- D[-ڇ_@fDgX ��'����� s#i rDgH_~wɂpɒAqf!xi 9[I E-0<}$<"ɽ 4^�M%ʲ;rzjԡ955Y]YO4\o):֞$lM0E>ݲ;K8^]cÕY9<fZmU3Ďʫj ͝2/S7'[zVfچ4K%9gc;"tv<pz8@kB:u* n.jX,9,33jyĞ#E ف+�������S[>:':ozRP?FY#hSB8%_X&{8^Ni(DzZy::_A{U^[-:jOcѻ9ws*VL;7ۮN;M2Q>'{(RX:>-TZ7h)iD9?5F(]#k*ZvdUhAt'pxʤD*--rwlX*_=3'$N?E o Nlxdb$: ��'����� s+Y.1P6 뚷07TYz|C񝶊{mU9:j(] :P@>t?>誹UY}nW4tVetVevUgԠ)&dΫ&' bmм|6]ڳ--9`h): ("I/X+pD4M1/́J8x504-CeRD?X ��'����� s=a-~5!&̓{+ȭ(Lc~jgUvWMnW]^W:4˧zpv˧žBLa_SqӒF|ݵ=u>tUg;+2;+һ2z3nK3g{+ .זOD%O-~گ.1. C<_,1٦ >v$cO ȉg#᯿NF��O�����@>\>[+Jo6miDS^OS>�M}ͅhBMEhk*DK˧|5y ~\>"BN[=&/g.qeeҠ4)}'Z([Ό6 (D<+ʎ505ZԯJ\=C10)G4R1SRZ)GD DVnjMsmmvHWM *{~!j @vK/v�pStւ,lEv-Lfjbcpʽlá!D7vp>z~7N+F-LE($s&ESi\-o /=,`M(Lo|v$N]hKk5O[ ?}>򰿵@=*"4  *6ńfZ [5?mz So}4뮹Y^~v㛭R;\;?)H7]>nvjmmu?2=f/j%J Oh:5d3NAk[X;͗0)Q4 /WZu2fv'*83O#38zd_�˧Tz)sbzH@!^k=p`jhN) Ymc02Sunv rG!6i-D49t/F'YΚV�}qcw>ɧT2fM83O*Ko4ۈ1x<azk1^s3Kp]ȾU\769=6UY1ȧ3Qԕ8ݙ4ؒ>ܞ;v=P{o[`[�^8Q4.PGP{P[4^&43V(Z p|hGSS^~dr]Y)DRR7՝*IJS>��@>fuv ^t6q'jǚ;3c%fff!D#ug|t ư xkR]bʘa<2!chZDEwONxAӦ5xc=߰1=WGX@y5ޕ'Z iᏳO8p$v 8a޴x;K&Qw9zO(2kK)ڢ|V׉j3lOLwtWH{xWDñB4vt uu wbhT>Gc]%]%##E##mG [ >}065 4h/((nid{TG2'�� o|JiBC˧)?[XcMIŭ8c@50K rΙ[?`3̈|l#GؒJf(K{g=߰1=W.Gw[:rӜTJ#i00-NĻ)�R228iv cZ<Ykffd\x}c-I77]>)v, [K 5@W#pxg[Ls +z{Sڗ*6ӓ$ʓNI'%ivlvxM2' DdtjnJ:Y97Y%iB2U!@ԓ-|N</=KFώKC3=wMw|��ga:xdSԗS#oa57wT&b҈6jaRqxrdi$3̈|>P$ ;?9n~>:̌=B<E vE{'V;5 {U9 `Y`R2>8'nԢч*ۦUM%1wD%h6wg:R &4|epT<~#͖ԹɇK 3i^D:D*L+Ryql풤nIR$]-KjѴ$FӲb|\|B|r]VHkS3Ių3o- Kn|��gQ *ǿeR‹s&#$_78qL{mDyrմT:gژaF3xIa W37 +}ൠM%>λ(gd|9q0"0ܨ\boo{&#Ane uw^`t3I岤bI\$BLH{FL͂vqVnr=GT\2W6_а QN ukukUs…;H> ��|U)ͿI j}E92E>U1=pQK6Oy^rNs1Ü냪&g#!GkqwP3| g_)"OcA`Z},4'59s)8v"0x;TbK?=Zn'sk/󱢽]Nt59ۗ&.H[.Tg%N4T N+*SQsQ^Ysay\8.:WLY\8)8W+wι*4"X}L\8Y0s��Ϸj{\OǦf/Lj iO!k 8|S"?%:psy5fsj08z4,&~4}o#\>GA5 9,te䪧2 0.%ӎ0ol1ގF]@'{z5t DSuL]aӒA儶ɼ'2iv��@>TXkDNK9L 3<"sN4\qB  >cM>u9}n= Ֆ:l- |ÔZn{acz| 9JakbWuXkg֥dʀsqM;[aQ#I3d扈1q>RQF KW2 p:Jˎ Idשi#7I>���O�xyL��)O�����@>��@>���O����������������������Ө|~���6|����� ���|����� ��� wx����8O���������O���������ϣo��''�����o| O��@>A>���������������������OOO��#1-B.ͯ&6ta𱥗"`pݪm9333;g8LrԳpJ<2S'R݂ ;>?%d Ax;H:gK=YP#'J?nE:Y :wZLbg%I *De\H_63㞾!tl\pSH&'<!O[OO���O]&ں&g6i>9/VRдbc<%XA>5sp{{{cEZJ .nV�mo 9%4WV5%Wa}eDO(^ۍ"2Z'MV9SwTG{n5l*Ɓxrp9m).Nbɧ᧤l*-Bb0zKS5OP_0/B_p?+~*, 3'%m4l2ˑN&%LCo_}?Qt"j%s6G[EJ< ϣ.KrBv}* . pÚk7t*dse臼u1ЕAҙ+;;FM"666;t6m 1'o≖R;}EuTQ$aPӜɔH6F*11ol,բ'B:V +S&,'͉o]26|֏MykrsHUYl* 6:٪`/ϔӍ0F8j+}L< lh$^WVCI*GFW[xNF9qT*nɻ^HW=H1#. Kq|XkVDYQ|J]`)XYRD|2\+U` _!Hl"rU/95K=F[Rѷ)%:߾}MZ c"O(GL5/:jqh~~[ΦZFBC�Ș* at'vaP)IPE*UpsykQ/s|ʶlcq4ʎ.Ua}#cmܓN �gp_(b,^DhYRtrW.Or2\C #^ο Mϝ8svsH acTϥ+L^dxd6O?%X.׎ۮSDԎ0V8`r;&Uz+FvOO ` Ex vt[hnkSQT~ڋ><ZqF&ۈg -h@I1TgZ>ۂQ G)S'xd;uvy%{6H5M(BZ4)%D #rRv5Pz;I R#3P+3u^87\lXO~-|^si?Ws 'Y\Jx9[<Lcy+N&RSʣ(nAZg׌pZQʯ(w$ْaJ8yV4ߒɰcd僥6Ҏt-Ԝ|]y� /,<?/;ť5l jUߝ6HbdYԻQ6_SKi\>7p8\N;ΑnZ/u{mͬ/pdZcVpxʎlI9Hܪ4(eۥyA _IhD>[8ݯj:i<Mg_rOv澕"uqyI8gkxyTȚJxv6gGX˱9g؝-ػs理l;E,n Gr$.E||U8T2\he[% |-=J|+of1|/[[˿̑ U`pm[2۽j}qlbwlUJZ&((OxT\7jTgRhƺ6AheB+ R9w9.\!~X7Vxn< SxXilK4Qg �y,/[>/M=/3HgҌ^E?ӭ$y6uHurbt'YSl'A@U7PndQHྴ_[> PE -tm~Sx LVLIa2W)D{5S`vJySS;W\>+H`|ssp4T<M^ylԵ .zslXcх{ʧ䚸N!lɹ*@>N>ϲF {T@dRK6 -..J*ԕ~R`}H{HU RXe=*W?=vsNZW@qHP\[ Aqh;r2Ŋߖ_?vY7JMM"NmN('>t@>^>-e˧ϓiu=2RTl.d~:!r1k>eug*GAw]ޗ5r0<]9\>H kOo>&iDM>.Gh˧S>Ly<@pk.v_̳"౮8#i(a|B Ъʰù FVC RG&\Tw4j\+lsa2r4sar�Oɉ"*KOٶE B/4OeG)]%+ZVvdcpUyL@75]Ve.}t<iT+'M5^h^MawGx17(cd_SXO(j,i~6>5szuX]R緹H- /8#[Kd\6=rG }|BkF7 :;n#FU')hc{|S~ Er+kb)Am.]1btk)#PX(^.fWř*&D O#)TY,ɏ;+/f|92Χ^v"X)_gilWeUG[>F84C]2/D'Z*ύ^*+4ېUUP{82+݆Ov65WDzF4+QpSrmJ[%S[ F>ֈFEoCNzH4MDU'| -}̔){j OWE]bPDhHst-k9/o\jjP偟^s_ׄڱzzUO>ߟJ:KBËGڏn} 6�/lDbRq8<͋Ϟ?tCr0M\c Jẅ6n[+qht:Tb|GT J1Bc433יekO<D9/D@+u:i:cul&񵐯G({]4 m셮^ށ*v|gii8/k.FvU4,5J8H[(l-ak{j>x67TyĢH% p)9t3ŠIւYU# /Q>ս q93uQY~F\j.-RF%LX*:]:U%W>r$BbbʲEbE.T^lV qn S&lƺ;+lgS9xžFF'Mp_/Nh$VLY`Cs(~~늲 m[!�q| �O|Nz8;llrP *D ɫ%}p ]$(0brp4[NOh潑ƴ,EXɴWV7pێUt 6L<s )>{Vs8F,Or!p$:DXLĊ_7'Xn|僥/(~^nO����M~3o+V{{~_>:2d|*}ehv6ۀ>O����MOa~ȺVY\XQT7+OtFf_%AQ53�'����� o|"s#;_b^Fz}yiSey{C-OŨ >mIGvN"ZO������7@>v~_  n(I(^'O*;|��|�����oDym|xhfb Mk+6FzKmkiiڒΊ==A>��@>�����ܷ|eKgg'7Tj eUʥtU/\]m ϮD[;>ysegw JFzFP5OT(䙙i>z 8+6Kճ>udwpW$Tί+.8rynI`Ir|� {�����ǀ" fw<m{ ε9nfO IgDRPNFӦ+$ptU>t}.~?>|+b_:/P[>'%ʎd)N6R޾'K>׷w/ b3{\m �@>�����<wn6UKDS2l{kq ׮Ɯ;4;=9' hkiy4=P?/i[S|||Ldʥn.^P=edMPF>w6ű^؂ޝ٘@g�mxN-j˧滚dkꀾ$ l! |k Vͧ@E:)t]C V)pVw%:>과BgGxtݔїR3@5?_BfS0uvh`I/y%7w  Aךp/V)������� I 及Kg&e;r2Ү]>wS\۞͍ٙy=E|.Ց)=HbVR$cʏ-S1ZT~ܺbRWlnVO󽡶uʷ= MqNb<doA#0[2p4ߚ,s7s^HVV:-o<yʧK>kxcG^۟m.2p|lyb<un{G8S{}0w T6Qn3xˍTۄ\Ve\|7G�������7 c/߿;߻u#-=%֊X'd]]޿uv|ž9XzIv9&7"jZfOY6 d1.U7ecRllW25!/Ag/=T߶ۄ,|!mn" 2G ̔ÙWH|V {O S<kV |}JZlv:Q)�������͖kW &WWg޾ĦSφv4)sb|wy%v;{ns݈|j\2x)UynY)ݳ'5 WMU%W^4 ' O)%^,eY(Fn&GeGae4nRS]Ym}nsC.}+%Qb S1t ES[fȬSFߩ e�|rT8yC��O�����@>l<Z񸴱2溚+?+׌ mommll÷56Ԣo<~Nj%V6nVsV6t$+mL9悦-, _Qeok#w]>>TFEu@ŋOYPtWR>_~dv̈́rmiVF"gQm0>y' q]NycJsQI_l3xˍt֩5Em)NJ<X��'����� o|>HoCED4<9J?檊ލg˿ϫ+?񉏿X'P iq ;F[idqagOJ#D j2칎@5ε_:Bg_h�儐+,ıuODh73g2ΪSѼ#A ϦNpnM[7<V~U-H [{kpV٩~:%W\##4A}pDȈԳJ<X��+G*`ѽqFz& ANE3{&xka#L;+//&{cIt}ĭ ׂF[;i/OбǶi%,ۃ2n<b'ͩ>-҂rcpgMz~E)po'(:_`X{S[ "O I a2-ҏE!(L3)19k Xj}IT_b'42̰ tG$=~w⼴izl>37Uw?m\q>Ɣk�|UWxg#i5V4aJL#EYQOkmG>+8vזq_2 gk"´D"#ēGg&f *Vf2# /Rɘ5 ̴>Yd+`(wšR+:'5Q@'z+-c 1^sD^r҂Ό^m:~uimD4U>ͻ/Y֍a!Eg&ƭXO| ���V>'r})O#EgTyxՖL rʇEQוSt*훑53VbU7)ߋhNAoMG14HfkVt͉o.\2b~iP> ˑEiC.w*dFH~D"չ<O##9km!Tn^`͢P4 ndJWNr`xJ;IO>vVFDa^,zLO༴.sPy~Vyn`o: _|b!$xWh1$jF*,BaX؄Oqsq:OVd+I ;]2Ǹd™֋xGX˱9|JX#-B~Ô4XnW>-{P7:{-!q &C[WKgEÑIx|��[JEִ-cS^|2mCƥɜ3\sL&?ΰH"<cgy"G/z mPt^IEנv$̒"if=–ƏS>cZBu$!itzE3$zel0ܲ;K8^]BÕ=S+ՏctKZm˂qb#uG` %Fa5,Vy{F�ikUO96rD-dV#esÈ|jG+i0}t7/73ǕF ,N ˷a`]Jn,! 񁺺Qi#nNZHiB 'kMɸScńk9V8ǺR HO%BeK|֫W$T>?OR8_ws:ӟ(D3{{��ϷF>{چ壙-Ճi.|<dOTi:6D:ؒp8&z\P'} {g*`j ME8u"o}4/9ٛFD~ t|t|EI dFe5|B ;*b1iD pD{RE.2JB#id@tMP|狉|jEp8 ˧~5x5iX*U1$ȳ@4Z'Z7ke4|j!)uY+oYч6jj.#"XgLy?m)t]9>{L,n=e-oR1.>^s/}S}s§w~?w>O~_gg|~S|_��8V))59v)~}ylz(@),% #rhm"֏H`T>D8i=iEFDPipid_1WIhD|ܤҸ9覆ОmiȂJ>Y9")HI;Uãc#u,^~.'tRUt熾|jG`8=^|ꧏ V:{8*2y~nT"#8ixc|ba(?Ao r'`_7᫺y9d&16=m/ܾu|_>EwHί9߾;v5w5_7H~_'/5 ���G>4C95~4 O0OuT*p0==SԵ9SkYPMO})8<._G>"9֒I'kx?W:F[>:/{mRMNF9Ft|b]I3{n <C<@pp. B杯l]ܧ΂Is^S$4C|9iͿI jե-hջX˱9 _^tI8Ͽ|_|Kg׾>/|-A3g+_ڗ;_>}+_◾}S諯#Dm6Izv"TcAB$Q.~K;$?gAX> {[Pa6Ħ-`x�͕OxlPMgt<|DDŠ AT${RXӨw3CxF¦cOIⱎ3\:;sz\q27. Y6eh;XS>%Jej˧HΌU)+w6?OP>3ڈ4C[>}8~R=qww(;/ր*hVFHXMâ9La+gσ'v85ϑ8<Os-7xS4v⒫,w*B D}c VRiif.PM(�vs.œ=Q]ZyCRQz~yH4QW$kއM7fڐCN>//woo[woCw/O7Bj>5ǒjMwIU}PyI EMk[+Һ 1zʧk6gI+d-q m%M ��y}[3NPc 1gD<@ٻg>Qh&℀kyzAsaʃ|WʽS{מm|dgGԢGQ|Ϗ w:f# J3?:F:f/zIҸnyloB>oys4 _sLs wxؚ?YY0=)Q4DܦQi;QX'-pGugIfFSD2DDʘ8ˍ`u8$<X42gXڝ9N䖤6-'Z=y:z٘9[ְ$Q<xF4\>鯸}*ѫQp i/&$BXM>nT*?z҅Qmll: ]]h &',ʎLӥ.|{XxM܁Bx U?#37؊ns#|cIla]�yO%XѮJS��O�xA&��^g@>_ d"zD˲핢 <KryRl{9"P[:'ﶫ}eS{|te+L^dxe yxM)ikwr%+۲(; E+ݥEPEȖ S>d~*\Z4z;-wprGL~֎h'Vʘp��|�'���1ϐ6Ջ+$!p8DdmtTM5g>xu{m-'Y[BЯ/ՖB2 aq*yV]źiE(Ҡ|n,VH%MճZNls:j%U9Qpth+eL9^��@>����X˧5Au8F :>xGĚObgSY/FۮdX]zl YVXn{K3Nz9шTO>5m(VtG#X)c�� �����'.Dޅ'e’mPL*P^'7uk58<uyMcvͧϓi~\ӝFT #4"]'1L9p|b) ��'����� y\#%슼s}qE?4Qu<@O+jVv;W B nWv+3QwgWQY;\wɨ:+kblsiT+:;n)nU'н<g[FHS\XfK5deO#z+eL9^��@>�����%mMbPTtj�Ct2H;~|3t�0&5iKN(* ;\0Bc45(V lT -aFU۹&i ]Uj> |\4 TҷxPČϮn1RƔ�������c!o }eֳͦ�''����'k*;\2`~ X�������*ɦPsr�O�����@>A>6����������������OO���OO�����| ��OO�����*���@>_l3-Ϭ2@Igٹ /6'\AD=9 j~aC7ۍhc0ОfELb槴&5D[Pa+MGtیඃ5`qZP } ^ug+u߈t$t6ܵ jpxJ楓T 4c9f8}!R+%qTs ����)ޭ" z½IPiNQ}uJ 7,.yq.XkGMOiI+dmZz?LTk]~~S%X_|l VDBFKij*g*hO&6M80/[αe]pGI"YݫZZY[L>���@>Oۃ/N#,͠rpDYNߺd~55ʉ˦RtKޥ:E> 8@{ZOP8[xd|AL,cm>fh4s3W5uX5k<2j-+hg(;6J2s#l,՚-ȫ7.2T:wweGf0׶F"pM.{jgSqdffӥ.|{XxM?:g}\<aPӜ+#T5ccz6Gwt-O-Z!58Hd;,0x~b8\:j^]QL#Lз\4G (2k9V8GZ 8y%iwNdވO����SXrlGBV!j tlO&?vnKU/54(/ Sgu| a7ޘb/0߸0\p)9l{9"PhT>w",Wvdk 6])kE}dU^YZ|-fn�D9sCu/Yٖm,F-s-L<ܦ#I8JP,B%`d$+k_;n\˱2Ԏ0V8`nc>m{I3کAgήdk^,:?+FNvKB[+ۼ[n扵+�џ&$k> i#OIٖ%=Huc)tUO����sfʟt Ţ|!qA=GEgjEoP6]jpP[=| !yhS$*7>2gG"qߨ +n8ֆ e8Y.4(kh!XA Y4.NiSffDV@(sʑK _?ѯ$4"AͳdV$|BxttLC#0E>G#}S?}tXCRE vwvm[)R3AO#iԾCRE+9( vdM|gs}|4+�ݝ<褰:Oɭ4NxdU\'$1u19���6nE5~$fЁ7_{Ɲk>ܴg8666l{J|w4 q˵:E%~ MEyaZDtkgS8F :>xР|>B8MҌ^N4"U^oC%ťf!R]g|15L'Phf|^zS YEȧ5xF"6ξ>:$yW,?? V' <Sh6C{k>u$kST\٘Bne>>ͯ|��� "n$1|`Ĉ|jZZXoj=rݎxJ\pH$.XQO7)'F6D҅' A |lͯҎPd5YU/DScm�?Ѯ䚼Oo|ӈYUu1.B[>}Lݖ\O}1�1W|dT"@B0rfsb9? VtDM^˒}ܰ]]j[~w;csyjawyOI:ɯN# ����޺xif~y}}uǜyZL"0E +;ٱp[OT6Xu-<:֕ .ݻdW#LA8d`,5C 憲8GK~gZ'*bSϖ(4fK5 ee|_^&6.1Os N,ɏ;+/f|92';niUidVЦw> fFK>G|𴶩M~O⸪n1K HUsG'f`AJd86dpiUyT�Ԟ d.N,omL vvkh9f8ǙW ;~Jel ϯ˶WJ\����4ZmX)8i?zfK#<Xt ObYâMʯE:zGU7:kff(2X(mIwbtM2Tz7buFTjpV *Jcs_-7&>yM/TU"i4I[PI.;\VY0\^M>k!_s Pv&i ]U<XdàRn 9LǑا|bcz|:lBv][\B* Pjg&Xqй eڮlmnhj3XTb5Χr#g3ܨV1: 5{Jʶ #8 LE> ���|;k\2x6L2 ��:7_K< ��'xYQn|��~>h5Ʃ(?5 O1MŸn=g4O'ޏvc*'4 -Eu���NSCKG!� ��'rwv8/q_iGd?)ٿ`r~Zk[_s]?~O<~&Q{HM &ǟPڡ <Z'�� �����5%8Cp{729iyەjN%Np=qGI1^r_G<x9{?.K ׿8hO?e~tBO Hw������7w#opƽ_|HgR#Ef1N~�ЗHq X%o{7lqW NQ,LL㞽'@;7˝/g!RDA>������mOE'^>MߑHv:v:ԥTxtϰ{ǓB6'~@=0˩E>O)==ŋr~O?������R>w�Mow 3ƿH?/_3q=Kן[olןqcanvͿ=;֮tz(S/b:Nd iጦ1{ʧT<LBFKd1fHg>H1_=xr~C+ WF3)Y؆eRU%i~, DaI챼B{ФľIUՙun�� i���-?a=E-=Փ,j ?r5DR~EbxZM+(-}Y_xTxa[~v/^z?Ą ޷8yz[߯ \wdBfu>cϩϠ>ED]]Q2u!Hīa7s{=}g}A\X{BB;" +₢$Dqf2HeAEwu;]Tuͬ0,.E6V6\;%{n6kAAu+OdS\r<uItU vp�@>|����� 5k-\8rS˧)T_5t<oޘx+V<?>_0sMsB!XiU-7x^8zdkn5O"[gU-w/C26ծ"c*X/X} F8%L1Ȇt>D nmָ7Ršh,Qcv{0ْp h4{|) bΘ+<"3hbQ)}:}[C>%e3&k$aK�� ����� _3Cǹ a-Œ޷mǾ&"'(ǻ0,0tnb[ՊGyR/z_UNU/ +բΈUQK,}GJ~vCaWƜO>ł릅la,LvBʵzw̽·)wFt9$,嫉F iٿRڻ'+9FSJLY S #4/ Y]^W[]*Gȭ<9!qlnep�@>|����� ;IΑ5 נ+~>U>B[8<X1dC-3l7> hgOO7> ]:ZhЧvdEX4҄9_8_o_ϾvoߧB*̷x9Lauq űwcJa0CwsK>-(ñ3?[<S[;6Bn6xs᮱$l' !Vl-MpwVjW[GMo~xNG+JSj�|����� K̎6y ֣U~bw/@G׼E^5zvhڮWÈ4mPк Ni"Av]ܓZ{{?^COl}tnyƕxJi:ېBëIl,u 9j8@bGl5rGW'Je0gOz>MpgU71` SőxcdK{>=yԬܫ}WtXJ�� @>����� ef?td"П!Y1(wؿ٣s{V󉕝! cNnwmOwlFÕ?+]1|psk3% -6vWm.ۥP8=5ph{�9g7wVX=VWv[㨩pfi-p;c/ۘcGO7էHCsif aco{J1?bGqȿ3lw>.E�|����� +e뺮֮4W/||$Ð9s풮#?F 뾈[};Ba#) Aj,Ice=Dv8`WÈ_{-7ތ"{ҵm }*Cj:Zo|m{鎮H\ؔ@G# aڌ,\Tf$f:6hJs^'e수Uzc,P5H(nˬϒY[cNV9"7:ҕ)|g햚,{WNF6$X6p�@>|vTE,4#1b n~|:qlj{<ξojHEay%5�COb ~/eBp>G1M.\^OH4':|x%ا6:+ځȣ2[Z9p TOͅv;H:>c^yDG'`!J!;kϥ:fq2ì]y3W]SU.\v4i|\jq{;/f>ؿb൐;ӳG;׷V^;R2o~%Qd߅'݄flz!d u&z-][>ϪߙmV^% 맄o;¢S09t<Zh,W pb *:\ķ^clqò+l3]Mݧ mfzǚ|8b+td%E&z\vAFpۅH%֍z;˺9�.l��眕Ͼ+h4y~[ǫ~46!dO5x9K62gCz}zCυȒ˧硿DlyR$50>6Zo8+f@a&V,G|m, R+#bS.ILo7lW-ۻTT`A>̓`ƼP<GH�/ki5luܰ&kCqXu|QPIe&.6jj8xn\=PjhQ燈Cm'_B mFF?ތ"-+Ȫ kBu {'xmgg; 7J��9,tgu<~ab4Nx181w2Uf_x<Ie*p˪5Fbp 4dz>^&0ź@{8Lnj[S䳭8YĢpXM+ovdpD*;qyJ{` aYh"ңG&H6Jx~˸nAa RMs>>l,Q7aoR)9ם佪6%ҙ}ly+)CKhc1gxz+Ц !8dbڧTk|{d٩8>͈je,߅0Pwww(Ȫ8b|9]f [%qHEa5iM>*IQl'b#ulR 2ܸ@jWFElp/B{ 7j\wd}gCEZr-M'Z^̱F1[oI��眕O@8,?= zsUEhoQڻHqfi,6P] yՊdf{-MC :{.Iau.%'ph:ћ|w@gޕϫuΗ~=h:owF4Fay7zhre{u$Eq<ub$9s M@GH%2&L Uݎqݷ/>t8i;zJ>=3-٧3uA>pT%Z|O۹Lǰ[oΘ7;b1^޲@P 4*-<x^PA NJypxuzz5$q!D$H>ءL 'nm77 ƍ|n4MFenea&CtVdNV|"$/?]]Pg(='7`_o/�|etQ؛vP}C]U)bXjv>}<#kwR #WH,<pkoOi\-~N?ڳ ɟ# j}ȧ6&`Rv?2g\!H4Csmϋ“ Bh²'792p+ w–pM$!Qz_Y֝dq^>S< =W4'NԀmrT窏2Y>y�>O|;|h ={L l<Z0-#,a+ "XCVlF񶈢L8H̄^ltdF*%~Xx7"5maQ(v^bD[<lG _�']}|���/E>mc]&Il{>G'h?@ ;-6# FI1MUtI&fz�Am+ )Eo`q- tt$1jfCF*p>x9a*t"<'R6ܘ=⒋}}}#p B0'#kll63 tY,3^ηH3kBgi >[|ȧk)|NI#w3h,`\L|w[/7" +0_i#]MGe|!f;I�x *&:56Pfrna1\}Z:/8xF��@>g>UZs}uv2Fᄮ4رmq$l[ Ed;߹?9?d9~6]ϧ3d:>%6|۵{,9Q֡Jk|NYVz>;={>eDbS%MGWN W)!"Q9SLu7y2K+A?nHph"M5͏&`BkjʹL!ً|v�8S:0z%"2 %AdL]X`.FفL9Qa! `iLHxBԤ#"3,ztǔϏ/ )l:5$<1D$3IcwHc;bѰa;d;eqQhhh(؇Ulr#r4s|;QPi ׀#=.򊺏}3 ;{'xt| O?FFӨdqdE>İ>>� _|vUᙦaڐ%i?q&S)I]HęA4lQY3hX]8jEPp wg!0F Vnu ܎t(uɧe \2rjgy<ncYt<[KI{)\?uz-G'W8Z9 !* 03}srKLb<@?Zowk5(`tr,D3ꇫR/2 <zw|v�<o7;{!\|b1wus!GW"Hxa,s,yr6D4"F*9XODEf$2 >j憥+3vGd%s8u ^S'cUH%$(w:\4f$:HEs]Ye%E{+ᕦ !H!W>;ڜ?(No? 82ЧK]U>g 3~~PЍ~Ƈ=5�7%7ݡ`q"uBk{Ԭԓ](4r̝IZ,QR{G˸BixJ]^l^g!0OgRG` uQZXnL,@ԧĿw(BƒxRs¡woU}#%\+1rc[wu7{6J䉤J)giDL˒NN1v||zMgqƓSZ/, 2*`yVs[xr>'‹lRޮG#og5ݒS҈8Irr&uJ<߹V@ dvnD_j1X*a#U%t1Ê&ghsha, ]*UFӥQ)$lD&"HAB,2F*%L*X<)х v{{r彑- :ߘ("5Ψ<Iө0!^Uy"X$Vܵ~hvg3]Y{2P$ 4iWgUy&Q9枉3V} 9n:rKui{k)䃎>R ߜI}nb oj<Yfpv9:nMvrlNW<c=^}x2\,HD"ELc#��˓oGg"!f ($K&��Ki?|a&]E Q)Y џ%jH$ '7bcc1dƝvt0!O#O-mȯ-L ftӘΎ`S>fHTJT2QWpP~xFECJ#.܈S02,  [yo]pMn=0h +c:F8_0e]~8>z$d6;fd'ްl:'4 #= wc[voAfDGq}メɕzp[b+;sfp=1]Cw.<s=:rJvQEV~\1�@>|)o4u~{)X́{L|���O_򹖮X_Vnd)\V-Z(,0n'WYnBL/v #2ʼn9S,:^a02L)K#Nʓ ,13xpSuYL1jdlnjFNO$өJB!A򚻽mQt)JD5tR{^S,"/?M>3.X fi5'M>=?ȇ6ڐ+$T_;Sz>{Q%K"&PqW��O s39*H$I̸:+6 ���@>}˧=̟W(ELp!H )$2RU*7$psmvlљ2cA,T\]X)I4*J!IȒ$Jr)]]F+ 'UiYzZ]<CȈJ||ڭ\UG$,G8.7]!VޞQ>aתzZc|d%5yp IYӝKkd4Lb&]</:[3ᔽef^ ]}naox<ϜCOlպނɌ�� �����૕HLHƋxYNCJEWI*c<MNd@22dorޤbXDK5مʴB&)]E屻*p1+2\ Ӱ9ߤW"j2:C/&jҌz{#=P\?HXiXK{H;?1fww2M)v~B^r916f猯(gK [|fc؉B C{s9,vGb-]Gjb�|�����gIR ''ˣ(z(\%w<!==>)aS($lLSQw_ުYeɥ] e麜˜]qŻK$5J K!q)8N>d҇G):VDiBo >x[' iLHt'm([+Dccv]3=hP( 1?yBX" =f�I=.P6W>anY\%7^wv&/ӘL3;:ܪZbOsYpj <~|-F��'O������_|"YBH Rˊ1^DT\nQbMKf$/b+F(LVԖ[Z[@ڽ𿻪UTmܼiժ”ҒݩY)1:Jƕ>JDD9?)V+')M0bR#2sg?-m*N��'������ܖO,OD#p WGEh~T @\,L*Ea<:f4*Լ}IAC eu -__RR O/H*)._\XU+C%&JƑ !"DG"u8?ިLI5%��@>?N> ����� OH(f+#ZHD`I4cPH".^!E~yܱĩ3rLc K9ܘ_X(p IO#jO.<1\GLI1f��@>|�����哮PuzEt2&62.ZoPh5jSR f-Xf UJEdLKW]`TZ{[s޳7`ccNW/Yfͺ6U G@H*caFȹ<&!Z+MK5 ��|�����5'/R4II(5"!6"+jb"aXN�=#x+deV_&_oKz)C)"QwE}{PP`zBTRZ-q&Ǡ`LbgHH१D66 ��|�����gX\\TzjLN-]qCBoߴ52Q~h\ Gh!@v<u +V5d"E)4a;`ju~m g$EED"& /RNZqd"A-ISS@>��O ������BHO+M)+6,_qk6"*7 XmA(ǓJ#|0]h+Vwk6|`Ď@,n%+֮FȻ$mܸMRL$V)US! 0t !tqj1FL^XrlyDΥBKv*7EoyH:@{���������s|"Cuqyyd&h鲅 ,Xhъ56 Pd$AGE%$?]j+`܂&1 hlc(Em ^b-6_~5떭Z]§DGT"X>K Q Prvi (uiC>n}vm6 =t~h>����������sf,Z#Fbv,\deV[)` >1ƒ)[ ꭈ HU,]eCXyt�7lܰ)rݦE6Zv6mfQHIR QxItRݕTnD1%$96ze:O>6]XT)$2̤}=m"BTnZy;=^&0ź}YMC"p4|,YCGm *ǓTGc68Ľ\4$gG~NNP Gx��;QPx٧V&A~tRYvc:W8O}J>c}4^)o:NQG>tt>\G~%aFNŧ ?۪4F4~޾ßP bȪywtYh_ ^>.ZL& ˽, % ~Xt?_xV[e"XI)L6>Z ȸ3fW@d|P S~;"-@  Yv5뗭ٰb5+W89* /,^-?8] u;WnV1蜆O j+)W;?h`yܲG 2)9ny'" Yl=09nE"['&̽mco1Fay7zGuʕЈ�|[K9w>Ѭ}ͫ- )jvOrW@>?ؼ ߫R u>o+XyÉo }|.e pSY0SNU=/]R/s?^: 7S⽧-˧Lw?}־Z:Y|x/Yj%K/\bъ \ov?~' EaRmRX0nXѴk7o @<N23�#Id$~k!0h)z㖅K۸y_m!/3(4 >I1tGt*F+[vk&$|Zo%+D A**|iid3e/F+<ڳ gO7"^Du 9.VvQg̏eM=zd)���9z@M34_r944/]-s "/_|?ۨ 3oN_n%X %ѝ3c J [j8u3׽0. ܚK@>?Uʔ{b`wFP/\:Z%źM:SghTr!_bzۤ^lժ>[}HyF M)s65^ҙ}ly+)L#hݣ ~! a<*hݗɣ9rѸud<܎<fNVo#ӹ) O;MG?+Ba-oZ>{ۮW6G/[R>+嫐+ގ7A,) Tmٶ;-ނ-Yn4rDz Vmܺ1t!0#V3xDV q_0nS06^t5mڼ6`-ۖ.^R+l:Ipl\Š8bPF$Ml6KXڜ*74RNg2T<쮉LZ?<xpW&fz�ޱ8\j*=,l{ ]ƉT 7@'��sNg^)58b@HjO^ڲ2޼}l G~3W{4 M" l{=L{營:K#o2]("Y{ WO|'gqK jOO|~E/ #Kr`y|yci89{̰tf?.3]DGA.ypb^V]U)Vm.oy1d%W;|o7«-[:߸|S:x= B 1ݛ{-y"3,[֮܌1UFR(aIZo g+*M]g܉ތc._i]Ɵ..PnQ` @#q[1DVmeKWZ~ʍk.Zdׄ LNrLpT>.G>U+v@=p tC[>m($V8d4#Q!}]l#\,H ix{c[Z*54� sxX*&( ߤ4!nq7^c'.D qO&֛ 'n|xr"k^3䶉#9:V)Svz'9>aLϤNT|>mR _v>7ܝϿ2%J3W\9g=Ğ"GY&jͯ ^=kEa-7>Je-|z|"w ħ@a11?O_zη zV˽KR|8z}.AQtG|%mZV!)Nq"e2H�U )TH?BΪ %KV]b 0`2#�E @@8Z0L.]r%Kn^vW駟o#CHX>c" 9nYVwj ?>QaD ιHȲN* #O@MuM36p]C^>}䡂)ua(ɬwqхmDZ8tm!|o<c~,-gvZjy<CЀF<��sހ.BaX;]/Sg=)||4^Ӌp۷p<vj..>9_.f0l6 w|ξUʴ+l6;艘TLOC/Q8@@|ӧ|zfxt>(\>vIɺ;݅g|W310j>z̽|zd1ߟ9%/tRm~(G|%\":KX?R.9%7ݺs;뇥n(u̒&f1jV ˜Xrڝȍc P M;сxN<Is%KW[fe+^?heJ!@JNUsv`ܰ[>m֞h!F"PH]޳Q"&O$U*Mm,2Xe:RV=>𸭜|xYp8%4U_zxEHx+n� sX>+ԛ<E>j>=@ɖ7MscgDvPP{\ TG*eJ9z>XS{>KCF|j/'ݞP3|N~(2]>=N|}RG#P$pEϽd矿QPHwM9{_:w]D>[2i3˧ѣS}3|sxNon(7J{"C>o^ͨJ*H6lXzÊu7ɛ lP^l* V%vo-_.ڈglAp�qsv+"lډ\jEK.]rڅ/Zy?D|ȢA;1XRIj*_?hۂ>h퇒JŃp�� A^ޅA N^gl'(9oe0Or5h3BҌ|8Kg}|zvzPG:R)Sm$<2hl|AF }2r9g>iO^{#?fzs&y[$& hս|6vbGȧt> 9.O!Н1$]'u(}}Z몂W\`Yo{%O^h^[jMtq=>< U'_9cD~ׯ3Hޙvx|cO|Z2{¡o_T0dގT>m:;3(`D Y ћ/^~P)T#P 2?͟?k6, \ve+/XX/?qw=O?|?{c4\ʁAe8Ij|,fac̠ ��| 3NOe<"2Lݝ-/o+p629mnM\Ȗf`HFW=X2M=\G*eJݽ}`wJ0f}a-e XNg06㆛>R͛F (;Q5٧?6]|E)|2Q*xV''r?<3e-'"0tLVo##xrhlUڜh  5xsztQ|*N+pf7>_}f6D?Y,uA,&۲v1썰.Ձ!`*XW@;fw޹8b;F)K|C>̀VRlos )5 ��|f Jud���2_|/?y66q~Xd˖/Z ,\s-󾛧KE ~S23)&ݽ:���||Ҁsci8] ( ����|Ͽ5W.[fW.~=;QepJ ���cO'HDN.m-( ����G��O ������*����O������@>|���O ������|����'������ @>��ۑOP�����|k ����� ������'����|������'! ���s ������|����'������ @>���'O�����|����O������@>����oalJNF>JDG',D 7}ƔB) uDxҨ×yHb ~J vpL@?tD\ՏF<#DlvߔD .s3V+^ PH$D$4Hڔ!x|SP=@J޽||{R(���ugW[lXSRlrlwޥ@rfy\'EbXkmc~OL<I1 +6b;2<ndaZs柒Rjjʭh9l6?vJC+L9"9hweV_S\reb@w/X>/4?T /*ޗu&lJ;y5=V|dGOXWPCEMu'>ZzXɅ{4i9RR_RpqSw8Tp :peʴ{RMTޗwp_}@>��ϯF>extΊ(,7x6#!، 6;:-WRR#](5Vi2Qo7-WS ,!W0;dE>6}cF*r #>mEo^&0ź=6 I*S1,UmJ3:V>S9!"`xij"EL<Y'v's(#Rى{.Ц !8dbڧTk[qEV ȕdwUc\,*F+~v6tVxo|)){dYu߯A>ԝ:Y<z^Iԫ{b"19uM9 њc dit@ڜk9ZqxogE)EiࣤƅA _J4X|'���T!C_g,}ձ,^‰ϘxWB@h$S?n9&6HcOIrámn 2'rGOػo_| q\UqԄ\-)I :T&%չD$aځ>>>T£G|zf[:Og.0M-<KD]1*0Fay7zG C=W .oy1j]cgx"n K3aaARXG.^`[{KOGP9"EnImfO/Q>*䳹A csR !7 ۲aŘI;6h`'s/Eō2@ csR9=SNQ$9+NLV30rRL iiAX߁~7, \$l@u4b ���W#6@ }gY{|}4ؠ$ B8}8792p++l?@`wϨ =k44)<S3vfg/;wR #WH3q^>S< _ YY'j6LB92p=}ȣ*}<6#q \z+e ;扡6kz-[:2.߼RsV\ef/X>/6WDҕ,'bW/Ρ|M*15;^&ecDɲtGBB< )8d ]UpIQKEIQ8%<?>,1<ֆAR(B3BCkEj '���ȧφE g>JU87Ff"p#b#.70]h\{WV Ț|hp+sgڃDC;]e|J4?Ea!hݱf)1J3kB%qu4`]*t"<'R6]C>o6iCţXqOTq${>f 5Ÿ;_|LO4h:Vg "y%#9V`G)Ұ;jbUbJ#8!s1 V<GPTt zaZdeQLa:'QZ]PWpXq�'9TtHCmDzLʑswIp\Cm!O���OH;(qb ~)C`Dq36!z>;={>DbS%MGW:4aoygDSCD$rb/E]Wt+A/|Ps\>vF !$Uϸ]h F(C- AL!ً|ZPH|nWZl Kac~Ď=ΔZ,g;L<-[:�'絮kaV?}`MS%qj_̙9 ZNAaiX1}V*s KNFUCSRkKba$9 #e%*+Ni:^)_xv뾳'JVg5\>Qz,rcţK5dX5rW{(Kc"cU=L-[lhΎ=UEi2Bh='^};QVCc0x!Ŀzv?'&bq$1ӗJj@�� ,ġKpT ~BsYNg\|b1wus!L84w[ ';6j[p Wl&Oq4=]CpHȲ., #'%F}.ϙƞ- J2k{F= '>B>q쿖@<a +1 ь*E2rj.7ae-,Hyt 4!T׹16pvc U]%dz GǜX'�j)֑L;5o\-5 Y, aϺ{L8м5gI^Sw;~8N :RH(͎N6huf^@Go%nٕQs0*C؎ m)g$$v'V+IIUw.8_|$^[<huzC)fj.:/}Pix|nqW꟯,H?{F!pjK|ljoH8?e>/Eקx:yWmG/^>(ã#6KJe_GD$q~1{?|>C䕹3��|~> z9dkY "91'4"@*pܖ'Kɑh!n=1>z7ߤv̓Hl޳Q"&O$U*M&OL<{H#bpXxK!66sgqFGDI%^ә}s\>k$d;-jk Lqu XU`;!Ax<;zcwxr>'‹lRE&KPGjA'atN}-ݛ]#XRdr{>HuOŠ @X>E F' =ᐷB w/KUAGү5VyT)U[j(0; ԩ91 c*=٪̨8So <2Er FY$K JS.n>Rظ/ѕX>o6^oJr<jSN$Jc353pݠTXŰ|7luVak"2*;MpC2^>XB8vAƠ0}SgWk3,䱋<B5i |zڠ1(]qyݿvdlrwXZB8*.?^]>ǿ) O;򱨬Gݿ[VB脾gÙ(~L��� �|)/��,.4YT|@[g+.7Wf(2t6 q;QBPt =@̈K*PNlWz8C+e+Yk2gʈ8XyqM$xhwܽenɹ՜uL]<-|U-9"ku^^ 407kp f 0a* ZcX,E&&]v]єa+| #b+kjÜGaG_w`cv,!xIo':$(SSWvVkg˪zg«z[w]_^opJ{ɋ7o^>OZI3: ��@>� ����o{ʩ D/5<Zrq$Nٲb!6p !;V5Tul%#"tL])ZI2Qr1]/踰̑[^lyvϝ .l}fsզƪ>z<T^L`?tSshx8jo^tO !4U͟$Y_ոOܛ ìSN>}Lsp ?yW\JxusTGgϞF[]^93&Qp =? nc3Σ;r8zKo񎬾MR\< |AK`&����|���ϿK>/4K=7u4PQ,J(t p TyL_[bx^j͑)JtJ5(/H5$EI>+]?z*.W?yzm΋Uw/}nש&|{, |ի^Ws'ٽ{6ڻ뜓rDBB1 98`r"�'lc0漑 ,֩KygZ3==ݭg(;Mӆ"£XCOpf7~H0qh5AZh&W.kjTm{̅Ǻ4Եesap̓[[of0-`sEڴUЪKMy=@l,2i~ �m̎1sk3wً: }+;G7yc L��� ������ O%PspR<TyZ3~�A'|ؠК*oFԕF7fwZ;D{.m([\{`INiy̐)N!OO8P+k'9`/4-OUZg<mHץ9MeՆSnn8c#oIYLVTmAL٦2-c 2/Z&usG&'YX̫d`4+]8w  tN$ZanB%O7EF<,m{n'cѹ;R: <KIㇷL��� ������{v[δAm͜-q+EQ ~;Ϳht©ڼ+3%sc?66-Զ4J2\93Tm c$.mԗq˫_ }"`9$vB@w嶗qG{MӆhGDhu޵O̤pW23ImgbԳ.puKlͼw-30rg`_i@O[hM+ʵ ٳUY4.<'-E5 gK 2Sq+GO5lllKgϟ,$^yk{w>|]@=y d=5L��� ������{Pq'kt䦄W#,1܋:}xWvcr;E"pD[Q2ܜ*֥s23Ҋ3B;j*;nHhʆe' -Ye1ʜs 4s,w-CUE VfpLNQfZ p~MQFv6_HUhx-@] U3NgsN7303Wxʼn ^]|6kv'%(" {> ?3` kvikdl!0��'������ M>{Jrb|"\ZIN`s=<8ц8pDW${ r&:s$ >d R2@yp?e=eumy 2OHdb`%v~ڼbƞl>[׌"}�|����Kk?|b9Wv#7‰<ޞ)ݒܞ)d;.ZO:wb\ JK$"AO AF +FjdÕiNtO.szdkCE`c@SUoCEYɢbq[.R&2ϡ$~ȧ�XMA6qE��O������@>ߣ|NrJrE8S*aYx2ţ|:7R37R-IKf ,Q*fyUП|R6\5;R-ᖋDŚe ךJnsUgmIu~BeNH)W<WĹlLs+8{ˠ�� ������YBᵤՂJPeM,/G~6bbv\-S2P -@B ٱJ SjʏK Ņ8vk4g&ԦA)n͚-hJ ��|�����$8rX{tF̭ $z8Ƿ_&vvL- }3E<5P|J-SƅбܴH'@H 9!+-ʻ4s4뺿TYh|2*އV��@>|����� ?PUv͓:љ%HW*x>~nS.scyԄ {^KADꑴ'wF|#dnLo[&*o^X)V@3\BhgM{ ҥK7Ln^RVf-oI[4Jn5ăEI쀸<Uhkd6-߮*"\e�@>|�����s&'"ڕ2Ԑ0í^ pȈ|*B) zCe>TLr@czSYxi/5ȅCϟ?_ v;'Kw BqJzjS d\ݕ_"(kwսV> vym|0c]߉|>Уsn6G}$_0?4rg�'�����A>UrkcejA_7/=w=}ǯ;r4Y),QO.sl2'83.uo~Щ_?}?{�u{lhɎ@̀zp22֝q'[k4sحA4c||| D`Ye !Y'׃]]YLzPbv9N;ӞClS'/6TɞuKN _”w?c~|>d\rE{u)=ŤڰH6$2uwz>'r+5.e6ӫgi |d C TUJouЪ“vvb;Vs:&sߛP)Ǒ`C3U/ ;4MV>��γ�g<!Z~W:mm>d<L{JƉT#-(8Muʮl׾-F+V&[kD?/>4fmX{נaGo^/F=_}}޾X{Aj17ַ^7eK, %\+Y4n4/AwhwgQpe&}󢢜k3܊μ񖤒Dg9ҥ#d{vϧVAGԏv97['> ԁp5O}sׯŞnHKE -Ľ|Nu4'x;t߹!nxyM|Zz\t(~xeL{ѓ[Z|*dA!Ԑ>k_NncJ{{hoCYoO V> -d4 9S(ت mֲ&Q|zɧ?2aER +-XtkgЯ&W<|5{w7Y:űeOڛb$<A,Uխ0V>��ݤټJƲY, Q$|tgkw.oh~zDou+<ytNˉv}D@-{ʧKxsssJS E}fƌ6qWa i(D+zC;)V}^*󻝰H1)m<<$:$LKOvb|klmrk?C쭨͏s ގ1t}-<ՓMHp ^hvh<L_ZpGp̙G~:qk_'K' ~{ı.O_!os}E~S"N')vw׿oDtuz{oʖyA]*GQ-nhCvSĜuݵ,;a/0%dOGmCw|j?zo[l|.IN>xY‚w+BmY7}o{t`7}k߀%_3x.#AAٸ}e>��}gKۗ $}4pxUw:eqmN|6O&p8 l槱W.[Ϡw [;FU:2l?3Hn#ŢV%X8 Ku Sƃ@'ZV?yOCG1_> 0ΎbD2-\7fQ/T<37dYQ~d<ڐ/^S=(|*7<ݙAw 媶"̢n+3kX4?X@V H4{`]-+XLo~:3gOd4k_шkGT)|cӹX7|y&tdo8nA:g><:%+ځ?m ?|ZˮjSP +f%⺒ب`W.-IpsXcߝ= S?8R.4FKz gz Ŝ?E><}O}= %9Ozv{I t!6(UG1uOU8Og.PQNCoҲ$(md_][vQG0ﶧ^H^Ofm T&m|]du>q#o|<H>i粘i~j� |N=y ZrIGL+W64\!A\gXjmɝHئjm1je_j͋(kSZӓͭ8;<+g(˧BU^ZX]4hc ~bW�C6^)L"=R3.iK% ]4Eb,h[䜥}/v1nOsjp4?wXYIG._ZZJh,OİZl^EbMtyy.|hxXxpZSd{zEQDlu峧86iњj/Rs#)iqq軿dEBɫTg"`LILk]E3B`4#_Îpoqg~r calGSϼ(p ,s!Լh0-ƓӐ/mz ]+(9%1NMzBdcjLjxv V5|6+ zgM@绒ϭkPކ'KD9 7ģ{Og0G/6k"r'f7]ocqNRMS5x.뫃x5M9Z|�|~06IhVbÍk$4l}=l2[1 ﮽`Ixd:vL& Jڋ-c3Ŝ FB̤M08NCu =S`YC/jWjO΂L&[X kv佝&3hhimPP*pӧK Z?|͟ݿ"=Sώ`O:ms÷Kk"0X M䉱49/,O<-쾦% #tmjg%1.TqN-t盙|N5LJ2lS#04byxt|fzCs G;˸0_; oǜP-Cow492T0ՑAmW  9">$.oB*:W@ > GWD}\M t ^9e4=pfl',{xf-!S3v|Bo%0]""#SˢSe`b1Q9G޽KZW:\+moif {HCυ';8*:".7J+o��Țj(ʗǠI쬛ЕOij;'`([=xt|Dk"6QKb qѽMgrvQ-[[Lye={>RvIJ}ZzĆ? L>z/>0oB>Ͽ*J |mW\>.Y:.DK |u5�m{>wТAffg.抄PE5�_~1cG<$x{8}cZ3]1`󆇣r\[rՏNk+mJjvq4ݛ3̛@j {9ל=9:3{>y+ ��KMg hpҪɟ޵s>}nIvHlyG~0Fӵ=u08ˮDTilحn*E3?\llӬW|ѻ~p!+4]ӱAU|aB>_[+G. ~g$v|xBBu%ci_$[mY>xZ+ԢР D|[>'9%m5I RJ|u>ϕh3ml0Tqرވ+I 5$p۳c|\Q3T$Ug%Dx] qŽy@)A橞W'7ѕ͌we ��@>??::lm_KC#sGV~7D;KOwgyn=>wyu}ks])ˋu}G Ƕv?;cvp դ"uhybkL~4vG ͻDm{DU9+M97 w~Tdgg6߬ts[ "#zIZڙyۉZ65g+s>A{ޝ&mui<}}~" _uO!0OwF)!z)Jh4Oob5Qof)86v~�Kgϟ,$^yڭp|~xٳn nfshU틱҄o~>9)llG<w(՚]K4쉣mGΦFnܽ7$4?ӕi|p:}0Mߝkq!C|1'Wcyi 8#-iaWjA ���#3"Cڰ+l񺹦ȍ X,Lsn7L a{Fy۳Zh,To@pͨ0+& gJHr q8q8tנ&Cn%x:PC}uuP7OsO,+R5޵ =+Ϙ:G[Cs X|R޾nN>c~|t"نtҢ~~B\]PPX%4'Ұ_0 |6};ׁOHX cWH={MgK<t)؜ڧ;u2is-^{I[y'%Ab1mJ2cC|*4+Ka өSG#H}7CB:# < /;19E#]=E A.^mYN<st @ؓ)SjSBl< !0���<�I���TڜϾ ;Bc pdNn{x_ptD]fz2 ,n]|ZGJcI"ZD[T00t={3OQw9Yu;of 7$ފN $ĸk[ ��� ����P>J3i^עl(ēl %Q1|$"2*7䲛=4ߢ0; :26~-c5c-m1u%YБ ;Y<AgdkpݵޚpNMhgEpQ}1̙ʩϚ��� ����Q>~okcqUToxn= r^8t,tŻ8h^vwʒkZ.gŰʯ_a8bӼ |iwFǏ7O4& ޺]X`Y\IveO||Ob',Pic��� ������|מL?cXѩD 9܁8zgY:0ٷJk#n'Fy@/{ks0O7ͭ, 4{.1l  )O`] pBNX"H][>G긫�� ������|9)]ㄻtQ;3/+tq-йC8vyفh}Ѩ+1!K ;}18&)6(; { ?A b49:9u#,{KK"~d~ꕱ\[}(NG=7<NG6,=#q42[ѯp@=��@>������|oɯ cN:~ȆB!<} KƝtc?](<K`BxxGC@mkݖ@Z0G:1-KtiMB^<‘G]8?fP <"viy$g>OD w:3<\bVX춵[k 2ޠ|Nն+A +b?U���������;"2v衃lϡYd{K*=u_Y1gO]:\Za=.VWNy ΂9st%~ցfY|{AKw:o$;ggq8|BYsԼ-ݯvG{ϑ*3iTe��=������_�|&N8lOBbt#˖LGg_?3}̶ur.9zqS%06d<'mh [ Eϰa&Qsx<ԉ_@gk ЁٶRcF+@>WڡsM~z!x> mx!ՠ|Z\(k[[[2^R ��|������䳻 ̏L%p4ED…"xХ?髟C?|&[bdSGAy$ `qKX(ܬ҂khÇ9~/;rQaG<u78ړ|$%/Gd~HW=ph+ʑ=J`ùKWG׷;>2W>7\Xj,���������}hGލO-c.$̹sǿ[:ԷqoN Y";1-(gNŠ/0vY&{5Q0ZӜՐTtfD]c;vo߿Ӊc2薾><̑v*qt)�e(t#([WبfqW>vVe3 ���������}PKv~7 {G~sk_𗎡Bt≟3ގD{ 衟ȳXy 9إSq.ƴޖNWEkSќkZ&hj+(?{|oC3O7=u\}y< A?`0Zؠn%n[mpm*7 8f��@>������|o9ؔF]ҥ3t; O<?H#ӄKG0~#XN/J&^jkcPqV(+K왓߹s=\ItK"<+=B4vg?<>X32p+<gCiNvTı_)#5yůOlXժ'- ��|������1@SfIFID%xX\8#2I,G0h6DΠ#dK~]:a/yۓ-x9kK}hNPpK=WaW}D{^f2)L'>1Ҏ͆x,[4ؚf9\ Y���������ϏT>{ӓ#G:J?`}Ξ9C@at O'!mN8̚pDa'(.tͲBb/2p[Y"#m0Ɉ3sT" 9~@W,;<O̳δ =o x<Kf< Y���0Q$ R~\^ Ba>9+osLk;D?e)0W'f{ğV sy\nKjobH۷WƷϷe%Clr?6Ձ0*E~^[W}|�ED8KjXjreHx] >m.wOX>;n&RǩB<^.tKGc{X.3ɁLru5fƶhlnE&x|^xoAES#\l(t5ʝ`/N?jgu>ċ{gCbÓ#8o$���gKCCfb9Ж|onho/wuI`rJ1K'v~ >BY>';IdQ6KNma4 1g`{E>ʲq"\nP>�MBvr' S , ƈ p|t8#ɧ'$ j3J (L , UYu,niIu創e˯ו'@U IwKkՕ7V$6V$4W%5U&W$@Uכ+7V'5$5V%6VAA1kmLMoTq'ڠN@[ O��eʧqt0g1 4{z\\vE>GYVeY_>)W,X,,X\ֆwE0mH gIio7_-qqbQ8 CX[[;]1WfVMkia,9ԓCc08ۋp_$x%\6ރmPȠZ;K{o܉Qj*}>l<t.R* f(YnGuvssfѩNAXmymJx̏ʧ9 B~̄#-gaLk, _uYT,mFM4r9UfEnua׋fNp`(˧(FɻZ>Y<1ڣ�� Ϸy|nAhSzO$2K%啥H;+*mxyD&5RaK vtϧ 9W#|M[+ NOKlD>]eJkz9l ;"o RrP9l,cu,eB>qh&Ox7CФ�m ؜|3V[̑O?|^wI{+.8d`@?7p$B]$UW<ϊdXL 5ވ[<.]_Ew*(#lp<|9`R^++;+%r=~����$J]v;=RqY%VoJohD=t3aZ -Q\ 3Ŵ+І;kHc{?VRzJ޾/(!8B11쒨yQl:;'K$HDCfdOJ`pdsD6 R0Q&ӷC:HF 4|3Og_p|mZ7`ۚon=:Y?7<;CsD:8f^Qci0sΧx]q6t]͹%֪+iƸ{ڻCB!XEd �����߻!SrS1!pJuKwv۞leZb6!|&5jZ2-҆8=($;4"%Qu 3e4};˧CFD"_UL ++JXF詗Gjf# 6Ͼz5p^/H+S.۹~L,t͕sci0!Tu~iHZT/௽E)m9Lj*+6z@>����se4|B>GX}JхczmSY)z-]{E 6g/u-TJ$Sr uK>M g08e'/FSw^2 tiBH˧靺6K |7cL|xG.++J c{u{5 v`ו7z) 4'aD>ͬ}M/nn(/QC v -DNξ| }# �����m'=ѤPhAny$04nRM1nW 2ќJK;r Ԏ\ Bhcks=^JQ$R7VD#=95P2ܗ|H<ZARN 2r;v"=N9[Xz2ta'ޚ_^Q#ixzLR0Q, ~a8Z2˕(,֧~|7õei<}˧t L t h8r*US MY ݹ{ci]U`3&`X>sYX6}7n4/e\@?psEYR.*}Dn<O�����7yMd;MugHnD#r= i>d<Z0Ókᵩ!66n%F{>grd4׮ki~,)SO,ە�+]aƎ+K ǫUq) [mվ|SJ8,uɁqzO/ neZ1nn>EwC3ҋiǠm؁yXm٧|?r,aYXֿb** yN҃ebw+3'Ұ˥_Tu>۝ p�L<pseEH¡a08.<|~'����\�~K&��c擑OPT���Y<����@'����|�@>���'����|������ ���'������ ����� ������ȧɦQ���7 ������>7OHgf%3Sr!_>3!Ifb٨dvB:/U.(䋒i=ʣybT)-?T//ΩWDs⽇sldfA8`aF 3/TplD"J'dr@O6>��Ǜ'xu �����Um|NJ8 #}ɁQThl`T8%gS|`R(Z]z(UBBJ½y٢xhZ.S( |Ԝ|N,H&3S1I;ozdJ0<%LOvMvqS3™l '��� �����g*fiA ʛɶqbvA029ŝ  Ecywc%<ٱmǩbD8=.*zEQp`B ?7"ϏD#q+jrx"IT瀸sf'��� �����(꡶zQ琼B?v LsM!ol|trtlB̛t-H3alL \piD9(uAf 3}6TgW<(m K&N,^6)��@>|�����,S6!&iumIL7"u uO&g-#A~ce?<NHCƅֺ;E}E稬K>8)os%QcHQoi6 DŽ9T破E:%n��O ������>OMQE 7?1ƛUw R(oR01:=V7&W4KJ[G:[R{;J[s8Qef\_:WwOtKp<a,A1<1<˛7;YЄt\ xЊJ.]•M ":Ķ<Pɶãp$9AIwk4 ìoiED8KjXjree|H C̙]~M8> H kDJ�Q� �����O@1:.JƦj&owkFų{{``b@'邖>eVutg4L08Pӿ45 So gx҂=Ω=Q~T 52 (O$dyaLgwr$7ggFc[^`8gwGn6cVWpR빝 @ t1ݬ'FLU*t,`i:\l:.G>7]L�'�����@>?]N xRЌjb@,OŁґ~G8Wy0mul.59_R1ై(?!gTД7:#k{W4SQTtsL2EV5'%I|B>3=+(ϩ[eTB(OS~Eˇݕ,k$,7TJoDCc-\bs*ΊpH /&CiC@yΎ p$jNFJ8&8r I`7-XІ4. u)OVV)O8f^w';nI0' yiu?+7K>j~�alg Bdf 'gb"v7MC#"w:#pXKT.8 v[ұY*� |wgQpe9oƪ+—MP_0 縜!mx%6ZjldlG[0:&x> x폡p$5~ϮǗ }mV\+$݋nT/>|o~зSc 5 @u[[xR~%’n7 >ڻ',RM/tB/L &-㐂 ZZo']U]V/[K,JOӟtɬPnJҌ޺Ǝ۷RCS"nwޔU綉xH8XS .g&_V8mv?FoH+'*N}C 893j=Ԉo6xGm*8" Ԏ_"'95!cܴ˕ wZ<]VJ41>:'HƓ,V}(вmvw[1i"H,L<:hOPaNW4K;&QG]XRft%f D%+s`n f\~gj~ZT2Nz\{�|~lmrkw&21߂x]kn럣Mu_>M$OrLpsZG-At߬\s {H/[h(D+zC;)V}^*󻝰H1)m<<$:$L=Ad${~"D<%.)˖g'–QAݶ‚3?O?~xY$?}wQ{⒐_`g ̑C:zу8dieelS̭(WVeKB\<)HfEP $LFvF-${ZPۛ+eBNdԪPUN&kmU3WsnW@+nV%YXmEk2˗ڏĪedOTjotk7⋶@^-BhyiaXGCsY'nI"ݕ7"4V>>m5cU r- f tlh~i}+&Xmw:T" UC5 c끳�1]3x4/qkG.;c0,5lL h pwud4onG-^^ [(WfNlqWʖĽL泹h2YDf+_`G&]X,hZŶ@zge;ISOQ>ubHScۃg&NyWamɲx !_i"[̢?l˟], E~sp-܈ pšvzEYgGcX"S.5'Ӱ_#q42[ѯp?C&쉌f :qM@H ]5o,X<n<_˃5&3wO=xX_KC]~7꘸Sv90㷣qrǤ;D^f0\ ..hkkpwumXR _I19y ]_56PT¹A:%<pheiӆVlph5ZQ9Z-keE%kfeI^F"jhNV;ФPmDM/^ rf炸H3u=2^wd _~E lO6^xH)W0픈,UEfX\}JէfmlxP]J9ILhT4\ 0ة݃`Ҽo)ÑIW�|~򹵵CDCZ{ˏMU0"x4}q3M+{L{c##[OIεLG ې}lm3N(kSZӓͭ8;<+9 ^u� A\xawV HT}K% 4XJ䜥}/v1Lȧ~c~\> ]V[xTH~nA5wzj`~m/\~ns.MN>4'`bTm⾺J9eyGH]'PlhuC|hxXx�<66K*esLd/1ɜhaq~E!S zG䬉hﲚ۲켼?oW7#&jw66JN ?%% Oo/utj Sus/+J3 !ТyD2QƠTN*OӍV"7*V\n-]}} Z Qp&K#ZY T4Q#W./C <ee*S!'tݕrA6NiLjgj7j+5#im S-4']F2uL֮wi ehzT<�":xDI8۠y,Ss;v ߡMFO% �+3aIF= c<b }4cJD6-WFOT(z0Ճ6 c ϟLX]oݯ1v: x$*3}~3{; Mȧ-ܞwt|_gL>_&H<ӇZ4=Smhhw.v l>&!EjWDKs>GB̤i7,O<-�6tm{%h3c@W'w<*Oe~ j^8'(~NmiNTWkbbO?o z#?'ƵҜ@?k 8#nG=sb⽼|[{bݲ[eE O<ɝ)Ω-/gs:ZU´~G]n@mw74I֍YtKimm=]GA'gv%2Nۅue@u%G-Hc^Ј̂h7Uf+*ΦiajV'n˧[tbl0{AzGw3';Uˊm߯WX\Tt88T36-٣ oh<,;Dwr5ל6E a= L<-rrVc[ᚎ+ ag\�Kϗ?ڲڟb<]*r}TԞɢ&|A`JPzx@ ~<:>Z]x4<䓝? L>zd_XPof|,]%ŷW>l0V+{g,w~zuEo)Cb>aXLȧՁB!ylgvf qx�i7iiryU.]H H{gF3 ;eNl5^ ' (%%%##F~>I"Xcs2o6U4&ۏÞ3-Ve;8d w/*s3<!gxnvq^P fsJlɴ|z򴡡tM٪IijC GlrX8Eu/Jy'-D)a}j}\" zܝ֮dЭjC[Q3f3cx K'}? u xK講n8@M7鮣̓W~īqFa(=(m=xZ~Z<as�=iS9+ə+s~$Mȑ`8H.C{Hڐ 3[? ?%o= o#vONG*i"6]'8u ^_cLuBW~]z#>9ziW G6v|cZWϗ G+Pu"agL$v|xBBP[ tKîoX7\Xk,/mY>xZ+Ԃs.jhy˧Z$*Ѵ\XU<1$9B<?7mwqϮʪ*_2+<"$ZjFbǵJwRr +FR nD F$ r~yN0+w /BhU\P>x-Kg'J2G nhjAN]D>|44d&&muE/2 Z4ljͭ+e!PxJ;q $3S> gZ@64MĦ2Ju :'Yz>gyf'E#5:8ɵlJR9ΤF>M򫅵 2⪗ԍ9ƲXiV>)>sx<#D]4:ttg,"ϭ"m?OjbKOywpQI)cz3Ӎ%J;QQTEPPDE齗;;;{ DM|;;3{;0J8Z,\Mk}l@>;fCx5#oq47IqƍKԠ;f)}|qkmn^crAhw|S͔*JJ."b)Ü:\% ED˚})B4鴰\bEYyE;y[XMM}KK[CCsy~]tg/=#{jH!P<. N.~YҿY>|HK2> unlަX[y- @ɧ1|pQ߯w;beanimSIFO psU>t^K<@c6E(7[[[;O_૽uȞnAWt`OMQ%|Z!'e=[ FfYF;ϻ?|8yb0֖X=JOu:?{;;"]]MF+Ð+qiE \F>WCg=0dkmm&21|O#eym IphFC,"D)Tݔfrwݥk:BWe |DԵbt6wwN}2&6^RRRVVvdC%&H5zGg%Xw8![TXX7ks'52C:Hw';CcPXTN G?B+ a�7_ZB�&��<R"D)[leQWP^u-;b1$wKWk ~9gjOMؿO$W+W9@e5cJ_^eAڳ*el ݼw~@)aHe"Z'v ��� ���[]ȵ|\ԩ$ZK#Ba)9>{Rc{<yk* %j}RZ򉬌6,!SyT׆߱koѧn Z̤3\,[V]T 0xWfxS!vuA>��]l��<)i|<TP[R[fvz}u֭GrrJJOZe"jϦUֆN'|(釥.uimS JO:RX^Slknф̎N6SJmiogۙs2O#g#}\W^=Ejkk+KLM}WFfl>ȝ62Ɣ(gVyx{DtK<p &*wz!'eW O;x僺� �����ȧ+)t2Ig𫫛)6MhomqZai NL;DpJa <H"2t?y_v$lVm lqnXd3햓)<Mhj0 mL;#!hʕz^'"I2tx q g!_: )Lmq@e$R}A=$zo9J ^;@>������=)(Ud,O<<o%ֶ$C"v.jhk1hMuf\[CӨ4:ɪmlQ*,'lΡcY5M5uelZz<A"KYLM+6`Lp|PU3v|v2gapJέ7FlKAd?smʄak}1eƮ   eht׻&uZ �}FRnr)q0 *9IFq[4iHnR|{D(S>*I!GV;O  *Ҍ:#ʧ[= y9vFR:Jx{>F )/+8$`NI>��'����� |vT<UL*Oo Xm4 C;0QP{"pl7V7VӘ8b;Qt6\T{0]?}ב&bi4WTI;22B'G("luDbGC6@v̿5RƗ JM٭c#bRGTcX3rwޞxJfs<N{ZaHͳpBd-sUEMP5X>ʹJC{\7֏&U]]:eTgxIM|$9$]&@zC>{#VKlc6Ȫ($zF�������h!\ITrAnijL6'w )<j#>tJф**JJsЕ8 Wq4O$77I3y5%N?u2xiYaZv8Шvt{'+TC[>zͱmmcĝ"JcUmV҆ua7حe۶njVᮎXQXg&B8w\CxN#>D|Z|Zi_ٶ=.290j~b<)lE Ox3 vۆLSsH:Ylg ";oi5%*Lyg�a���L>j5Y& 4\A6Namd9[u2(*4ƞQuKkjˋJN=. 榆ʦ3gg NeI+)L9Q - F.i;5xS>S1a5÷"p*;2e(T$v蚒 O ${9WX`9gGQv_Bs2vGM:X>6H*܏S>llpD#Vg*0r79qCNθy?83~ ";zDc+;:�� �����|cwR\4Cn&36ejϞlh<R_U[]܊okn(.+R*$2ڎ2^\]\UV+#Q Gr ˲ + %5VUr|'&1T.3s/ߏ|u<X;iԎeC1UnȧVui%anٱ1LvwGpd]"(<}ⱦD8XgKCI?K>:i\BZ|(ztpxu<U$#|ޙo.ymm݃]&5̱G>��'����� \-C%UX%ۅ%-2WAA\T$$貪l2\_S' 0Dtus G*/)[k\ZZߊo)*:[\[XYPykW $5Smɩ'=vZ-Qkw wuuEoC9d!oq ٥<ao@ȆF'EGl?'ȩ X4?}c.e]T5)K4xPN/ 5j%xAVg'%77$<666)3_>UY5l;L^x'UC>9PTo?uQMXARށmq;c3� �����|c)?/]7!CZiFwXBLܢ3ygϜŶbZЭ2lMc9H=XvlsS}F'v4cj4+).JO;Xp"4;ьۥ -%f"2AtiOM#5d8G>]9_������ϿB>Nm{v'JN S ²@9PS(p8":=psCSIv^[Y5ETjs!r8ƆҼՅj kKPZ[ḍ1%-4Y*29#\D.������GP>5r+ShJޥḯƲzlwb߁,2 Al/;yFٜBaₒJ\ ePft'Kx Mi%pғ%gr$9PfUj��OO�����A䚮^BO%1TB#(<\TtdcX ErIJ&A+Fin u)$@bX<HdsIڪ좜ƪjFj&v9jN;Ojgv%JFV2 ��|>t=`eakPX /g+ ;g]G 5}!dǦ6VV( ٕcl)f'돷Oos@%q1xcTp4F;萲) \m'xK^Df4i?Hwu9<x>Zŵ\QuʬN66{2亱a9ypS{7C,<\,hter)&hJe-i(ζB,CatV>՜[TVndDچPl&Ahnj E[,0X:ZWYъf)Nt K J!)7ZD)��Z4:?kcfj5Tdcz G=[Ó(vxgF_Oli!Z,N(E%-=w5M6invk3H+~d!)SN+0&yųdZoXvhg`:q3ǽ8aw 92Pեҫx Ci+eP%dK;Ҳ*AX OVojv0p$ts ݥ%*g0چ:@Kd%ENRjo<HJEj2��χ4~}fᾟ$;CnW#!spNQ hٖdcsNȨ|3SyÆuA^!h~㽜lll=weM: pg{[[[ǰT^nHڶ0qqswwَ5ꅲr܊kƙU8F>/{@D1:>|R:ltW^]i|}h')ێА�[HdB6 狲7 m5Mmjn [^|fR|>CwXoYX9A#j*nke2 |Ae]bJђ,ݍ'?d3ux9'dܵ1g>:5W"88LR5<NfiUzeLD4[4 L"%wr5&Hm8C" ;& Bg3XSj-lb*R]NH*@.3U$jy"ԁMV6nށq !%XA��@>G..n_cE:OrqN]MPrRFbI̯d_+%y,uHL/LƢ"*.T!Z@PYFq\4dG>vxrNY{gu;lHQ#.D: W|RךA`xGר')O{:xβOtd ~皠Tq܉{jspGg9b ?YE�Щ2Z?:jt-.W"# hnȧW@S5Q @[cos|SUhzR%&c( R͑+څ Nmn,n#4T@ҥ֐ /IM--X@d<[#U.-bcۥ8͸N*KSevR4d\)VzCH簘x$FɦXo)�ϿB>kRyH?NQݏu#[^,H@}ǖEy' oiõ.VBFZma\&_i$(m * 6a.Xa?aenY-jqCY9|Z::999Yٸa}mÊn7i) ǐ'k|Q GA9{3.Yyqg:56t޾Q8Z2Zx@wi:�Y-hFKs;G^e;quVf|S̒y.y+WymdT)U> [&f1dbD2APQ$R+^.6bmMh!kmR)zz]ZBU�MXTG*=uLC)*Z&S7N%_Q")?1�]+}` ң!}an_獲q/l#i|Yx}kxuxleT'іsq@<RYQ��|)Y}U}բF>/Y;EK ja4squuwwww ?w㌷̭llbۥƃ&[ΎU>S,Qjl44݆Am4X>tX,ʔ9AH.7|x}7h9#sO9gc0׵Z\4Sq~>sG>Ѻpk-˧"RPJRU *b'(iXR 1M~me.%0h46Fh1"ɡZILLHe ,vB!z*FLۚ|AaR ^EudN) *Ś.NŖ|is�n5 ea1p=T49?t;mBR+:ZHd7u>F>cr.<,.tx:FH8@ t\7ߥ׳XX9.2Vt=U��O}eF;h33whc`oO¶o9X>7Vqs,OSSLeaF~q8ȧboڰA8 .abk5p$sēuWg&d8J>\>Mםmݏ=w(XZ2x_:jNFraƽ]!O["TD.XRہ(jURDkˊPt ]#ah,AlRN!BjpV:A‘ZxΟs:f\uXہ;JJ.P[x-ӈDNYR1Ka0:0I|K*^?B6ݝ᦯ɹk%H +7I< ן9j#jMfVEbM �� bڮ.v&S՚,%zDvT]FKͯ5z]=;knM2N1xkC>5* +gSJ[O;-]5GCQ[T#o$ݪRv'OsJ( x-5m˜aqqeeɤtFg*x=R.)-g>GR6~]vzfJ9fZiXT&G9]>7>G` hX9:&$h2k簓5gU>G˧ oC* DnعDuHS?q~>sQcZl#߮J4O,hTLBFGha~%KQBj^W Ŵ9rDƵ`1v<Ц(\$RO$ D\:܊i$ \6Nar*0gʈ,N)(u֮ʫPJ4VCu]xCDhb^[ �yl]z=c@90#|Y٭~4FH@!-9拲<-T4 ��9~eԍ 25@E1PV(wCYiĸAv66.QwH߆6oKȍcsWSax #82v|lm~;xki{(NJbo#`wj2|]}6q=3ana?Rj~STS~nko;p(S{y+!V1Rb7IEzx¦->6DT'k|9|gn;bk=7>r9:ef56VV(AWt{5akP>n7Cm3|Q㹊!QEJKq_HE zashyEMuM覦9M5"_)K$SH$ r$*MћrlAuse ,*Yӟ%*rrXMD)}፲)ӽ9=VNpQqs8 ;$llgt]+�� { Nxd��<|J;X+b)],f"R#KY*0$g∭ y%3e:)OȢ1T2\YXGpXLm}m^[\q",?HM~-QYEB-,#E3h�֝^-,lXc^&n\T$:S�7vۥRvDy v;ΐsM �� :q&9 ~ ' ���%v"sR\̕;eRT>F吨)yM-ue9 f{KC}}N1aԕV$2⚚ 3UbI$ Dni.DUap5Ź4A1d.  TdK ,SEqGc` { P !7m(lg[X\bD#s縢SA��@>A>"^Ύ;kp���@>m# !Nbj)Ĉ]*[х Uu-h\-Nf(8bˑ 2/rLJY^A[cc}})9vLqñG,*?[Xs('M) %==bS&fJ$L ��� ����pvˑr)K*uI[T^M&K.8q8޴ *8'U5 e-ՙii9rK2b(q.\l2ODqNӫ;+2@>������QO9W(U<P]rB_1]l'U5)O/=P:JjN5db!BmPȤ⒊599El9.Ψ?SY{PԈy*; TSt+(O��@>A>����x-t)yrh%FА•U'Bd\i4 AK<mg`CdI0D,s(T&ʓlBrHkl_Ha��q˧\. �����p'~ +edLqR;:3 uJKZT4.nk%4T6`0F'e8ä,.D1DzMϹ+X*r ðgAwLceKL ��|����apȨ%P$Gi4".˙KܭҟtKօZi![>Ѱ @mXڅ(%q"GI&pNqeO��@>A>����x_܏��yae ���� ^���`�����OO���OO�����@>��N>!����@>A>�����������������O8U���/O�����@>���O�����@>A>��@>����OO���������O���������ϿR>W'��@>A>����xL{U?;`6a¤ LD~ncr <6q|ٟ႗>=ɢ?Z8O~8ʇ &8MhOM)s2<e<-ȏٗ?l)-3{O��@>A>����xdQ ? A ^i1gy_z3`@s7f=o~yKfK_g/~=wO4/|f.E+6L[Ʌ˞XL?#":_e|�� ����#( cߪ I!s?Χzstf&L4_|7f7hOdя6z{Y߬zkoⵯVh+Wū[K[ߙ?ߘO[z׿=Պ,{|-Q>��OO�����A|)f&<5iO߉J uv%漅=z|ONW_1{sƓ| >j׿8l+*pMOY_ O{|esVx<?\όsھlۀY3ߴ}aE=od9y ��||����Lzl^:ݧ0_5jެwg~okΚg'_|.]:bmt׾cqg$&W$WW%V.)UVdLݵхIآRI -.fÚm9n oPM'J~6mԯW?0 ��''�����|>>=ߘ/>k};w|0wg}yHU=m{s'e]O:zd}RnhcvN[Y*N)J:\y4t~qIV;|{ 3'7[;VO}m||Wu|{7˧lSb9ߺy.kGڔrb >O*_n GY!)UC`y4j}$!wkK;Z[:EȽp.Wmmw-v 68g{@>A>����aϩoK^꫟Y䫅?~uÍY \B&)Y.8(>I31j;1Ŭ3jE5لmщ5Y?9Gm/IrR74±̸_bw=S_z˩>|^6Bp<ǿ_Xwmlt@6;tO 6 {߸[sAVmbn>xoݸUNvE2JKK(;&{ken݈?G+.^ĄZm<+6m8l8Eա�Xnt JE\9~o9|ԅ @>A>����!ߝko~g;s-_ҟ͗n>]wZ7;궬fR! ii/jͯl*<eϡЈ=){C#݂7;m]S~r\lJwuVVx,pjڼ/z8SոQ K=Xd1 _lgyRWGxZ[ZmK5s3ns~d+֞W{"79[Z68ĿtðMשwOԇe;6[["yH_>[?PucQ]Hd3; jMdu@}mIwut:{Qm}D@h򕾶2@]y=3F<_D?GS}QxGo5Z9 Smea 5S � �����sf>;xoλ/_,m7N.0_cn"7;WUA>nQa){w>Rs8hԓGRNL=5*/ nSX-C]|YyZ{.s[n6-7]9gw=6O~_BpCȴ9o!sk xW 51&S2s3zNI]gp9ԚQiɆmw*7?/'c! 3_U&Ÿ1݈Mn.:?iȞv<ȸ c遬zbv_o,IZ:x0q)~5R N轫_G/@6&TFVc6d GG~u8^o7.w"ԋGK7'mAz]� ���� |x >jo" e_}٢,/skĄOq<.hBƻ{lwZs˼^2/_[ϗ?pܾns7S_yWk|2(ӴZm0I>nai c23ͮa- TJ wuWuΆ!7HrNF)Ѓe)ٴze\-itVS+BGKs4f YdC6ִWLv8[7\,q[w-*+7"gF<)lv Fxs|.Ө>C+ndhH8U]J8Xێn< ]� ���� |~蓗g4?t/6988حY_-r*gZ߀} +JK/: Lȴ͛7nmkiV1\ajϿY╶6{E箶ڐyM9xنfny BCthQ3=hИm&- CldbDå~a߭}17h"8S`ګY VeaxQ0(Viu"�:BHm7KqD}r@K}w-@e&Wdy`[ XLfg彎|>Z-6('㥆f͵~iaoqN�����χF>_5ř5?]p-7l}ђcE|JnE 4N@tN* zDrW'Kgr%;#n֘;wx  [cpˬB?ttwm܄~<˟.sX2|^֞5 (/RMBYsa. ,_昂Wf1L[dӱ:NVwи" ~C�cL;f4oϴqdY3 JDR=}Fy;F֛nH1ht]bBk݁P'Wn)cop=hnrXuL|<;N|,nQ|^hwuIX`{�����χ'v3}</lmۍ#7F=Lc|!>z=Kv;UW$ה]WXuUV1gmO8wkxw +<~\gE?XzW<4#;q8̚g3ly{!oWhVHNà!8ωovQUdݶ/5yaʥz^v0`h2HdٔM&C_2 BG#wHOO^yAj[ c 3Ғ7e28SnE˦14 Rv7-pw@m#v8_Tc|5&17ʷnYQ{eĒ7s^_ ̺av^;/_3rzp%hoԩAwv;bz/_zB'eI%7D?X*t=�''����|>4ۯO{띗`P՘6FtDN];bv$ffm(.Uט'2#=/w:?)-xm7-NaW򛷓_sOhoW咎ssX9?>kJc'i [5LzVj%%g3!:wSCdE% CvYhai>n`WNƱPsKiaYZ۸J:1rm/g)dG+xy{7ZZ:'n0p\_vy,yu]w$eop芍j{eha-aoiU8^SKvY{~{>GLws17\ >Â>z�OO�����|hsyy{+?;o%uP;sڽU+~4_h!(01nԦ3ry;|YLzAv*=TG2NFnKݗp`gbJ̦-.!Qζ.^|n;)؊|3XYwprf pWz^} �����S<?Wx3fǟ}_]pw|W.fٯݜ}`Wɴܢ2 Ac.JUضܬ22N=ؤ}׸y[z]x:ٸ8r5nOϚo|>H#ϱ=q]�''����|>T_|a+Όo|g·s|s?bgݻ!1OJijVcNRZQTZRW_[S^NnhP_a:޿'#>6-|Cro̭߼[:5-h;sW-urs &sk| o`�����xssS&>ً/xwg4ss䣏~FqVSJE.1krUH#jJ+ "MB=^/-&DسnCoVV-Yhϫ_?:/wYZ"O^4uS_������GQ>zn'&=37_7|oY?~- #8M ;ߡ"]S٭&R)EՅye8tIccq~a~IUAYc񙂬SSkDx{zLŚv.vV!.(o{+OvS ��||����g&O|'?|?}/M}ysoڬg~03`ZA.gk]nhnEbPWd9Utt~3yg2N7!kӚֶ./n?ZiVO?Np_<kwϒ~nW8hJ @o?_zoyZn^[7zMy@|VjVW77W{)5Kk{WD#ŭޫuEW[ � ����-O<gfϞS?=WsO‹oɺ2jOS8?w']+8Y|p~]#np ogƕAK|}N󿵛|Oi=6c_<峳r|<,r-m3R& h fP]'=G=ɧ@>A>����xif/dI͘'LϽK3_>PMq]Bi^{otwSS)r+(:rvS YDErXr Ymrs ]b۽HLHݛ_jՔ ,W5Z;F/֣v mnasIKؘ۠K7]}Ĕl`6u{ju׻E!nMz=7 ͫ+KQ^i:bѸ�/ɑaNv=iHّ];c 7.qlv=W?ȪX)8x]Hڰ]TTg 7)"XwL{b+Co^�@>�����7=9~lIϜ9y,[}MjguŌsMKD;]cXe% NH<S~,"jy8%5&;0-,:1v瑄Vڻyy8OVs Y )ry|ւO_l}A{:tMmnx1xciU{)~!a4[vU^/~ˤ7/y*XXi+=Z#kSZ yI{u!kC%i.Oss|Y]8a7"l֨,EGտqW{wd_&`<AwgjAߝ!Cv&vdk,lP|z2}ĺ\@_0ꭚ]&�O�����@>]Kfon6Ix}-8Wz~k D3獮 7{AMϩk+9nPM9~&1@~Ǝ6kh!l]0SZu?2w~|OK0G6FDD+n[CTm2ޔr(#Mb5pcS 3YΡie9.eߐ#Zq.a$2-3N7d=όG>uhSHD?}SذqAGo7i75}+_ {km]X-3&�O�����@>]9iIO|f[Ock<3%^Y͑-cxM^x*칮:hzD>26LwUuEPְ9<a_R"Gۼ$fwG,PvN-EIuZ%'~a1eZhm@9C>ἤt0e" ]_ Q>/*8z em;D&M9>Fr[<x F^y"v#=jp vm4NX9s9FwF i3"T}xȧw.]Y|�� �����K>'?>٧'>9mSϙI3{y Y?҈a^'"I}Eg m|i/*1F]w벞ʞr5D>y O/yZY=L}ÎUnV 5ܬǰ4_>9㓧^{>HGB^HL :ikbzrSz#y.#sanE{MyU/E tE2||"p+JgU[_qu?glv:|(¨Ƿ !<׻U}׌_H\!x^@ qA~Iric&�O�����@>9l¤2ɧҤǞ8qDf 4yԞ ~5ya\tw^W\Wt_hBYS[&8kA䳣~{eW[Vjg 9'Ii5/&U>6!.hJ ist\>Mkׇ9n^8-.~Yi|"*\z?MA!Wo -a:??V?K>es$oo|>!z^D۪+~g .݇?IA݉ o@أ FKguc&'f55>�|����� &M0eSϘ=̤MǦM{i7YW:gUsXeO{E}K洴TIeU|)QwU$V].% TA7tuUC?_Ҫ9uh:`m]]ts&M8G>T�� �����_ f~͞{vҳOM8a >ًo?\1P9$+&iZ$h<KqA쓩ΫTT2Y)i\s\Q/_`1&MV&+:rԯ+-(d_k{o<'fM|O��@>A>����xsMyb̦<aT |>a|q%a&YYW>\\)zk /tub؜"-O{US\f/3;14}}Gw5^]37۟-u-#[רּvj>_ysoN,'�� �����<i6a:'&ONdwio<X\_KiSګu%=,!SD+⮫BeSz&@t mA]S~`Llbj=Q7fO:ɧA>������Qω&M04ѠO &g!/$n+aG˲bE2w`Q?4coleAt(E Xh%X"UBKɽٙ}w}ޙ///tȧm:Kߟѳj;>ܼL8 R [s;eΆƍG;G<M׀_�@|B|��� OWm|_z5g1kޫxt[/8xuͱ]gNwxϗ=]{]zׅ?~~.~ܷGS_[tl9peÞkY޸~Mb*Oa}Eq#+O="'������Oh|>ϧɈ DEGd0D=z7>²][O}}w\LǏ~-Sorӗ8u{o>8վ7v~t}v5,k0,岲 Kޙ4sk5eyƬ`88r ynYc/o/U3<>!aĘvtzׯ~7�����cU+Hy"}v�SH[+*&_c?l~zKwm?=~S_|wqaY=^_i_9vcǡM/~|γmoXز '‘ vNTQV?%ː`}/k>Gnc2s[>oY3&9k҇|Ovm?�@|B|���3~)"Vh'覶'jg 0yM#vvdS ^XskwO|>?}z=v8t_ |[pd洍xJYfŤ5%%s''M| K/ەc6\]mӪ'%ULYow7^5<:2*>533/̚ o7=ϭOtN=0'sT/ vG*#*[VEB￾o.,/EϽ6��@|����SO=*SZfϵL7nX޺2emƼ-moy@km;+xl=ұ35s\t|Yˊ]D;MX«[O,|>+NmZ_ÕTE5FOK w>KC^PY->L*嫟~[gW︻͑i?wmjzlт]zohɎ/l=Ks\/؝{I(\r7-nxB#w,SV��O����@|>< |!UƆ&˄ ź+"'-MlZм:c\;mWڽ7:TCHV~eW|͎S˷_HC|Ҿoʒ=ZwMm\ŢCXB?&)Y]֜Z' QYC8䙗c+?}֤/ߟ;b=mvmzǯv1_ޞ.Ș|+n/vnkf%m-N)^sޕJ;��O����@|>Ir_a}T![()-* 뗙f/ -m +j_X8ͯO^~`C E:GhbʨL"L>y{/9iuN__1u1c۔3L!,XC+01xys|(<B|~wn#>>|66ݵQŽ/W;#""~y}wk}ϛ1pzaalx ShW>߳~��� ����">}bY(|/_P\t8&o8qZD' r*̱ _rsX ?""rdi#,eDsb[DDNbGTfMH+99hjXӬ1`YT@,[AE5X!3O==`O %|D*f٦v#g>||uOEQې̛G>Wd'Tv~��� ����">HPP d=gC~>T7(&/!ƊM%gГ܌ajNHzHٹQ WH* ~ KЌm䨘Y91)!4w%D7֐9ZVHΖe"HG  tŭo57׏8zWs|6Ŏ^n럗f$7}#k׻o;22=::-'-22ޱ7��@|����ρg|Yx_*t" I\^v`|dbt^7R;ޜ0BLW>y^?9tz,OES5#j‚؆uճG6N)RTokK)Pfm1\m(Mb To0y#^+5i qGl^66}?}iKuq<EBZCIGχXEə ћ|5":rƉ/=?1 �� >����XO{Ag(" HڃP(Rl231W4|$HQ,.USO0(L2-N* TiXaT lJXF[ٔбJ#򫭹Y%BeT8<gf(-.A0>}!�� >!>���ʀ|}OyJ{H~Q%AD[d-ır#ӅyHEhm8SV528:$646$6$Ɩ=ޒZjH+3fF3e5fSKtQꄑ<3K" u0U'(4sK4'������O`|>S0i YE T#SHX 48h5ma$qily|2P8R\M.$䫐;ʸ<Yl,6W=B)qdJ"3$ᩢ$-A`vr&4Pf!x8�:z)O��''����nO xx=C <KyqVd$ȭD!+ɲ *fqBSIt=C&udH#dQ#d}H 8X1;hNWS$fDL9 z ܀!z)d$��OO����<_nH x_0�3h@2oSQcx@b3Yd"-u8CkgLC4;Xh-oakt$25tu(ENUpX)b+Eh" D Cxΰa~f[剌�� ���'9>= yz(98*eHQl%.CETq�W :&RBfJI`FQ"Djt9&Qs_"ǗP‹?;�� ���'3>C������OT|������''��@|B|�������'���� >O������''�����_��xl@|�������'���� >!>�������� ����O�������Oc �@|B|���IOEaP: WY 6ȨQZBUX-ѨYT]lQRB"I(XoO�E}AC }%o� K@фި!^a>x/_/E9e ə >�����x3awÃ&'iuΨgXn tZfT*fZZIo0hFTkl N/8b Ƒ_7ps ~aX@ (h x|(RА@A��OO����<j‚ѡZ&f⌏ Y-:[f5m,(ʳYtjB $ J҈T:G(|d@!C/EZBePLj C|(B�/AC >�����xS"[X9$Ě ȕBNf3MFV66l1EUJBc2pD O} Acl Ɛ : ő8?%2HH4<""{G:�� ���'/>ZUx1.*,%%Dž;#X,4*bs"`P JHh6)FP'QD*KGA 7 G{y2@x`SiLJ K`T@Da(B��OO����<5$D$ĄF8",qѡvKMcT|ѨHp0ͦ Ĥ\<)!C hᕗ}^|aؠ!C^z{P$> E$Rd)4!�#� u!nh8|D'Uf5wvLQ^7u!یyģ?;zHgv4WygN*Jr8Rss辺|ZerLttLbŔX*QM/tý(y `�''����a6}rlpr\DR-.eNNM$T"6f Ecڤ%R!Ob"_q\*ABtPW||}1 y_4H"SQh@20"G~xH1$ζE|ĞNJF...y>[v_?pG0/+ʣ<t#1<0a_$./:=0}W::Nz0&jcʏj:q朄}_ߖVbgw/Vggz_=2&eR ��� > 7GB Q!c#vCRlhLTPx.$`im!Zf,jATr1dl.j5rN*R%hL}0h/X"Ҡ}԰a8Ca7Jvr8<qd1:b׊ɱ΄?>wqQyc/pmxZfkԧ9bS-v.ɋr&W7e;*\:-'%!>c٭55ȣ7W)p؝Iu;Z]Nw=6ۗD$d;rbWcEQbLK>zϗW,ƣ_ ں|ܨ1QdE#"~z}஢mY:=gx#*dRwq}Д#SnO\_:6zˢبc</ltfa^t24 ��� > j0sZ|dR5iMM kfIPL),F&U*F#ѩbg3 QN!rX$46-(DAc4=00'xH 2ҟ�'KA༼|eHg,~8=}kTjQEYRGdbB\VUM<9صy͞c_ruΡmgTv=;L.6i⣞5EoJrUږ/OW]QE/yOwq\=uf4fֻS\{ɛv=<0]c=1w?;zEsxv7VIJ 7jQ^{},umj^ZՊ ݝVgdO޻߃2GL~@|B|���{|PaQ%%ڒblqAL AYrOG郃4upjR,jVЙ,HSʄR1_&I%&$T&B!dp,GFzpx"@$X,ţx$>}0ωIf}tO Wp&uO=!lg Yv:+=}Y \o=|;DWҥKNodչ>;_u{ϳxqWNuphd}bVfo&9x<xu}wu:+4~n:>lvE`R꼴3ҵ}q˻=t/0J9ƻ>Ywsqw˨螅!\{Y|^];O5'>=!3̈C�OO����qOXWHC x[rlpljR(d& FZ% ijJ%ԨEB;Ăͦ8 :=P,xl#sL&H4:C$KB.X,&Ja>h/ O QH"d>Ϟw\m':qǮO?YoHO9Yzɋqݺ̭c\x:ksJύKkZsR]EĂG<ەĹwػ?v!;.䬆}}w<iZIb3Vɓ5V~q+wN{w>>̮fp8s;-j>uAo-^uv1ϞqoumKcR;o*ɓa�''����ǧ3fpڍI1%*Lo5hOƒ QU-FL&Rb_*Y5J@|y-rU2DT(p$(_aFx :3l?@ IT<őP8y2OPו}ţ鲭ƜC).uRdR)]{6[cg;/u>k{޹5vv:W3oʎ?}ONvxgLP΋uD&|λ]9MSF^׳l9S?ՓGǟ2Aʼn}чxfWy-Nt=[evϺ,s;Ϻun=w]=R]!.Z<<.m>4 ��� >L%9)qhsDbR遁2 Ħ2 Oo5+&9lf2HuT* 9J2,@\. CqD"Jd(װ�4 O&I�d u'㋾|Pg닣ўGG#\ٞ:/16uY'gxǍI/6>}ב3w:34gʕ͚V=Az{%~{Mia)%ٽ9ݵybF;x1/uLZ;QYV7eQ+ڪ'Vf)s9}JƖ%opI>n/*eM܊w&Zű_vݭʏ1宮[pۻtw m?fѶ+7zz̺t{쌚0����|3nHr ֘L O&bNi7\ oBT!VEMkцkBmZ^*9P xt#1h $%D!~Xo/aC}}QCpd2 &"wX"iT%c|t?\mBݧ>L=Kd5:6upĜ׷T&8#㒳,{MGFx35+~ʜު#:Mu8s<}}~`GL\bV^9muܽ2;Ș9}[{'gYxϥnm+MGK.m~ջw;y]JE˶t['mvxޓ3lVLv|-U9ꨨM~?tJř#_@�OO����qτ(KJLPU *µf͢yl<N-ȅx ^&B!0ʨڬ BD%E|At:%QA 2') Q$5ф#x(sy!KsBv7t\?:|'��� >LG,Q#!pJ x\dJj8>jTX*Fj Zդ6+! 2R,Cs8l"qMo>^hEX@%DV: @~x||Ѿؿ#>]טs nVdO?Zǧ5:9��� >ӢU%m A#08,Q[Hmʅ|Z& @4RSzY pA&R!h$9x90F1(°!(o/=J!tJC;x $f<>{n\\c eo?uqΝYO� ���@|g'Oš>XJl3+ jJ.sS[U+^l5*TF% :LDVrXg3D#LL|08 0dO?Z Fw`??ʋ;f>������ L 0jUV2̦ (C-ʰ`#LcQLJN ,Er#=!~\Ⱥ ʊF"B" B%(Tj b1YL:@'ID*B0y 3 =?+��OO����<Ux,&8<n GkBIP]d.ԪTfI#Q&M7q~S㬉uƗ{f>rPcH^Xd0tOBC#15ǏЫ 43_vqrt*"ex<ܫ YG^wDg=_86%L' wM˟:;5>""]uRAğ7>v� >����g6ۃtȬTܬWXTaAjg>:tEj`dfFK} '6-**ke24*bsX<Ǡ1 :r8R'Lm8}j]S3Db=G<NEɥw$_eG5V6jVײ\?q"J7g(}۲&m3]0)gq����~|NW\1<n3)b"\5 79#1sTjT˥2Ϥe$ϞT?{bӪ*bR)|.d\D,s2/($*KcelQMUɄSMo^;vbDX43_rl٨)ܱкiYfjc泻ܱ>D֜ܵ|tNv~AA~wopݝDE_?vM;eeeUsދk:*KG5~*O1>:2&嵏z'>ߜ02?;%ko}Ǜge9uCgbkg%do<n\L}Rwen]VPcS+Ӓ{<ffS}]e~Ngǎ,~{Řuw>�'���� >tEC-`aU"SHuJ ҟ@~:9V4):l &-6ejDGh~zA'>fɤiTJ'84''d__;dc"Bl?C'$^wbFt͌nϸ#>/ɨ}k^Bgו19\tҥ=wlp\=ԙXi<6N=g>"ݵP̞uG{>qXC^'3>v{פrn{bb _9yS+>흙߲,vf+f{[2K^B~_3Ǭ<wo|"m9 Oػ2|וy+c�����M|:&UIm15RFf1-zJ* 3k­0#AZY396IJNn?erS&aH{24z H + qLr EdbcfܼU#2*ˊ&V6$ϞUmXn<sG|v~VFBv󼶭{>8?J Z,rΖħÙ[g.-++ʎ+^saJG3ҙ}kĥ/E|"uUzL{g7r+'7{{og|q6ַJ3wy@3y1� ����Ͽ&>ÌZMa7F zԪS"BdB-JGc##"Ԏ`]ÚhnPW[Rl*%BnBɠ@ BRTJ&R XSbFg^66'kܚr*ZQ?uݏ !Q{VYxn\;wǦ֦1K﮾;6]yrc]ҳkuew;5]ǔ= =g yXQ+HkS:w# ar[M];z37>s5剩niK#sߕҧuz˨9E{o|Ha~�@|����">Cp3܈tfUk)zI-qش:G!Ȥi MId[ܠh@  r\&1O$ 㲐f0LIg$`~D*جusb a8 ӽ1wT~'_T.<su u`B]."ݱj%W\B㌉N:8d{mgKzw=]+n؟w~>u=)1oA~syo\W$=f>9>aߏ:Svy{�O����@|5n09 Qz;A !:{EشVN%낌*RgYd QfUJR.hJXJe<?bfhq]3h@*#~h(D`U {}i[ kܱu3 K&NjhZ0s>/+(()]Eٙyyyc>{8rdvNNvVAŶw eZYzN~QIsv<plmr{ol?v!A OM-DԚ1"7;f.5r644lo|6%lǎ?gUInFN^^Nvy�'���� >ti#j-Hcֆ#:{>zE+3iefJJ|BbRK jV!k$FLj5bVQK"T>KcY O|r9l&HId<A}1> ;^C(_/~:e �����gQfVY4VmQeJEYb ̌-*L:CakbRUJ*iNH**e>u!&ΠtE1(4(Ҟ@*B!H�<^O= ����f]Ei3FiC *Na*ZM 6ʑͤ4jjD\H`PI THRˤ !fxD:N"D%SW%S)ȍB8?q~>}!- >�����x3̬G3̢ jB*Qeѩ:eAfUVZ)JD, d"B,DS)D<'e"DXB>[, >ɤ“NѨH~Rp<Mn o~^C| ? �@|B|��� Og9*lVmZ{OQm5-QdRu Z|\,E Ȩ"UI2R!P*_.E\6䰘L[D&R)t׷HX :O_/ ����APƢU i)-E1iUz\jRVi#JT,r^+S+JX%\LRJLHy2h4@bHc@ X4H $d}qE#:�� ���'.>CLp>Ԭ5zԨJV% RR&Cj 5 "QJ*\&VI.YrT 9l&A0$*9JD_G~>#x,Q�_ $h/]WdN\S饇yȨg,9|n�@|����j%Xj5&ҤUX cYk( 93f jT.Kx/ j8,[g"Gr9,H@dT1D<O‘F{phOc Ozߚ}849f?ͯ|OG:<Hw?{��O����@|VCIg5hMZY4:lPLIdҘ*Vmѫ L$<.Gpy\6ÓIJH*p9l.+bE,F&RH2&�$?B]GX41ħO/COwF,ջIcScccKZ\FV|,>kQ6͎+gUs[kJnjJ/ߔfVOeOw]bg3rCWNt&TntpkMQ3ҙ;vή&Op:2Zxm������afmIܬFŨ 2zͬUZZ,FNԪHy|>'D|>x"!_"FVr8,Q>d2L6a@<H#ىaHDDduC}0^h!^&>3&L'M[{SSmDV8t8]lfه8齤K7\S-4rC痧(ݻ ]ݞgR#_~q~AbҘ޿sb|GTE�f��''����ͤ1B`f!7.ȢFb[-:[jjRK"GnT)<O,.GiT:=A&?ĢI<H$dD, "9lAΔ8$NJDŭvs}<#ێF&Dڷ#>_ܿ⇉ϋGQɽ{:xg{6;̙4))Q:r��''����aAPѬu&ZV Ud٬Z AeT$\Mј<.rbp,a0L:IJHSIx*Ҝ8 @yB!?qhL%^C<alȉ>ۍbGIE/|8?$C쪊My~uΜR7w3nB[)xm������^|Â6ͬ L:V0F`jAgu:d@ָg>j\&F dsY<dp>pL&FcpT,Cnh"0d$>I%~|a>9_tns&츰tKt_\yꢬ[NE3?;!u쎻(Zq ��O����@|bBQd5lF<Ig5mfɠRȑ4uƠWMZVRrB!Sjؐ&f\' LItC=B <P,# E_ӽnJ3E?{f& QμcSMJpĜ~\G.n0C�/ �����'&bM1fFuYAfNckL&rGRj5jVѪjZhJPbB!iY᱘@*ҠB:E0GA\_q} j`ahws E~E$>SGE';qb111)[>k"""7y|ϧ#ʙв/{G|v3>?=;TIIŪm ��O����@|b d2-fٌ5j1TQopR&TH|U*R*U"Ԡ1@ 0 ɤsdE"?XR/{+>}px CS #��OO����?/>&`itZ`&+7:7Jux\.W*T*B k2P$En"2:E d!I! Jb(HG>ah%ma|q�'rzx C!7O��''����4J jVGӤA2TQ 2)RL*V&W$2@,K9+flhlz s"BID:Kt� An_P.὇}1Æ'������O`|*Ar JZg e3鈒+R\,B-kJ$JR xb>N!#9BX*<:ˠD\2I"1q@<ޮcn(�ks`0,'������O`| &]d2LJ"X*ʐT )*drTHBT(qyb&Sf<)3LR(@n ҟ,1#STDfa0$(>^8?Ws77ۛC B|� >!>���c�@|B|���O���������OO����@|������''��@|������ >!>���� ��������y@|�������'���� >!>����� >!>��@|�������'���� ><'��''����4dik)x tYYy3LKMcY y g7^2r5Kr͘wlxsw^ߝiwC״杪McjZX<oYN)E ˗D׶k&9~}yumze��OO����<)L&L_"<f(}.?s3PSXW\f)[]<yܥk YhTޘc׶ߴmod^}ߴu;׽y-ss۳פU.Ok[T6?hˆEQ ckWIY["b|'������O`|+j J[5E9s91"V j՗,_6keeys/|:}qM{V:hyxV9kș+g=ҭ]Vδ515u3lsbj;/.[h�� ���'0>͹#&/ k ]&Ο˙%ΜV1adv][8yi樖iS_rn_eµS_v|hwnx{֚]7_!gśwؼ䌵K*r g0}RyEs$3!>�����xZP99w "+iM( fZF2^-[f;3=u-knrg-Es^/vRk[];dG>|k7&6c͎ VWZZڲyݮ[>lXvŮڑ=Gϋ5zыť0 ����悪qf'5)hY7=|ftyvxU]D?-jvҔl1̅o/zs̢]%߶mRۆ^۰7[vj m-4iͭ/xp֖'/+g.k ^ش1q:gUϛ|iGDDL9=Dgۮ~fW>XQ;"ƌw (dyvHߎGdtqhCk }vY3eFEFϙl7o~ngץFG&WXX_۫7 ������'32:f}LC%ѵB+h-S]^;iY7gײ!wގҥJe|}Ίkv-zPmٓWlZZgnl;kn[K2',v7/|hnXْq"*m`|еiGmכy*Ëv#8?YxޥkVj,im7o~HC팯Lt sݥoo?G/M ={فب<_8*>?w'=zϨw:&�'����ƧrxY ʜ3jfM^d8muU⹬VYRK1O}-y֬c-i[eo/4~km~W*nT۾sw\<kt .xu҂'.n^SpkꤶԆuK+J燌l5fΖ<0>vd30='\X{Ȩر7p&5ʕv噮J,Y='yt䒓k<ɧz(-9>aw%Ms_??{oL(/I,0ۉ N}R\ho~[;9cr褸h#:-30is|f[ɖļwqF8sk#C}{>7\7>]q['�O����O~L.k8y>qnk&^,i.V +beh[G.Y@/2eIެXec^֞͝?}E-xpڷ'L״$cuצN]2mnYx ,#ksYMoEw" 附=yjm之fe?Gɾ8y(i ǸLv=Z~o}B~5׭j:6#wimEQ-ZԶ|;F~Y?>5܅z;Iݍu5Ȣ3y"ŦwzF⚩GW4o1&3<(O-Zy᷅#Ǭr='̷>C~{G߼sKVkIӈO�����? {,HX^R15vvDbI7Y'lm \cX)Z5aUӖc6?퍚MMߝvFL]Q<gCAˊGX[ڶmMޞfeoX5}UƴU,QQ]Z2V<+t4u$RV:py #Ō>N;3>}0k} &*^e^'ad1~aZ1 y4p[ː՞ş>bvÙoھv0q}b;)w}^_tв:=;D_}rr̤9u_o>@{GP=5݊W � >���.>#r ҴĒѵɪ)𖭶MoFOڬ(X Y(1?fuW,]muvVo5g}̵ (xֺY^664-R=CWGL_ռ.uʚVVe5BJFo(_ O= >oz<Mg=׭9,.pc^cooI@Jpv.Oݺ/ݷccu�-fI>gS9K[K#bG~N~Um}}Ʃ ןhs祯=sq>#FFͽvAګ2>|kɺiO�����w\YdznW(*X R%B(Joҋ Jv"(wBHF@Ez̙s&u3gs)m'o%cu P ]k*Y;j9$)lE!Ĝ_̾lx>ǾpzvN8ju!]~ׄÁ!z%%4:䚸1Y7'w&?W!rm=m>.bA(_mK/6E~߯ ^s$3I.2v;J4SW$ .M:$}򼼼A_$quAoHE'fqi出S|Vr#9,5pX!F ˰uu߭-Lmxlʻh`bEHhy{Was ������?'Kt68f{msR5fPuiK4=Zo[&|-S|N3zL9v#{Y#6Q9vynD昄6?w`[=kd+9'H噢q|ڐش({kÊ?- M x:!WH;uyHLvnAA&Z)E3Z{^ُKO F#| Lʻ龴#1çOHr0o8Ɣ4x#4#s_T[f+mWG(v1v;Y7p{XP~t2Nlx4V^.R\{-,6W�|����ϥ( f~k~zN*Nj>7;dsHE?)cY (MDLQE^t8v})S^IN#I<{'%UdihI|pQ1u-v~УȣY[]Ԉ>Y\>Pu^ӏEY2M ]⭶ WJD=RcC--]#bąǍeg Xm[%j4MQ":h=3k,O8rwiMsW?~iQ3Gkk",K<#t> 1.oMCF1V*`$h=cA|n+�@>����ɧyuvxcVv +,"\R$Q+*nr\^loy:+^9WB3Ͼq+}a\|ޑ'#2 }3ұ'm &fG 3 ? oy5]|'B|KЏ/�O�����lZ7ovuvQkdb헿xdKg6.�t$Ӿ^9W/zg] -)mAtL[C>aGb2/tK8 …eݏUvKQB)%[nv:`w7P`T\(<~s������?)ڎ+585n+uKnJy;}sT|9ly=|>ENg<xs+z-L}lx$^J/t{yQ<MN1,ZF kX`3Q%AbEgSrߍMtwè'�|����E0^2|Vjق^3eu*HyԭNYy .=~%9DlFy)`|u"M|#[%6:bO{(OuY6( b"!2e>qmNO��@>A>����S^JURml<dbMWWDK;f)d%\Ⱦto~OΟ^ٗ2Ng6iجUޤcaimc}006AhW}NhhМCcTݒ$ 1������oP>%Q+0ڮRmg)i9%e 8r^Uئ_rϾ'MWSvL<jNٶN AN.헉~HN\<tpe9*ɆY'|\8{3ĵBCuޟϳ!6Ako-m-BC\r\U#_vcuo)&?O4>|y?҅,lm-`.-4"||����;ݢWa<eb=BC}r Znn ċ vΙs\2 wRD* ZAM*뗅 %FBfcp0qoo1jW}P}[%|Dϊgemd)ꞨEd;d~Ot=fտD>>O.p(N LQnGk@>������Ob-r>ƾu<%j:_kZ4.NsM_pͼlp,4g[՗U^JIn|4!Y G4}Ҍb!GPl ~U3.?/_yimR+qQG9v|{؀"]\#iiĀL;$Ehg$8YWr6@>4/nWJr_ҧq}+e9Y;T%xؚܣ D |7)}{uB.R\8֦hHG'\="JItgx X mzk>>=V琋HIMQGXV'W0bEÅ}֮ng�|�����\%J+ܖ\Vh9.Tf4w~Z+էo-.+Q l~!ei#ecUUm(ȩxfEH,LuN mΚ%X=xaWyT =.&c,5N=4( rFx[P= P|f]\jP|:3"[7呵Nu#8`,ki\9MOw3'rXqy`J|!}㕉iL'GlSN9MwwC}gAjbk5!u̡=7x;`mҋ;ȡcܚE*3R,��'����� |.T!,T6_a9O|ikSעʡg3"2y vTE+YmA9"r c]>rI)?son|K߳O>y.hSד/͸3UQӦ!̣{hRUhix%AaBLK9ؔI$l0KL}K6KCkM>vqh&[E>Fpz4g+ަԅ=)CF>{cGG#/tqķX;;ûPSz@GE/:>w=}++;<L\Ho/F�������h[5Eʄh)e´uz7ob2wRUmRar;1 M0M[g8m#؄Z9-0%fwL9n~*9* 39`x$b{N(5dس_2<x"5]\GsNF{uWu#'@gb|(3;-::2PgU?G:#6֚(tkaV^[ֽ'{o`"dVLet x;C6bw>ޅ+0CsEG!#vO˰o;ؑ7�� �����|ZqXbj fl5`5cM;tZ'mRFZVa#7U[E UsyfX9l6Dm\U Te]iI:AAP{B%)T|({'H/vHuI �,T%|a_yCՎRv)'Ax5Op{"' ^ܕϪB>nW+E4T(`\~| ,Yom)?"uP_ܚûSr8{`IvU~%sp93H6/F V+(F�������L>SXabM36fl3tfsUtY{ٲ *Rdvn+ȣvb2j>zm[.}N)JqT5R==4S5wũkdnq~QA@}rnH'󎏃)"O{bq!587t$";e}aQ1y|" l,-8ީ(qsprrvuʾrn+JMbs;Ok|_Tt9v{o{K;[ۘ݉_a} ~^M;]2r)z#4SЈ#F�������L>g+Q ,mk6ekS혵pRr&aJsޤc1~Ym-̃l9;238:%&*&lRlO)L;(EkO21~^E8Y9vj uL;ʑO>$�������O-gl6d5}I˶NZnL%y <$uhZ$3cYjN1[ A+ (9)M5 Mܯឮ陪4T!dj3yy! nkmdUL'ğ=� ��''�����ߠ|i={4yyrIRKHPz묝 4dMbVGsZ-f.08S&|iv$u}>2ԽSCl6 ]j`+~FBEz.(ekW![!N?W70'�� �����|Ikfu%(OYc*+'7b&9*,B홫N\h'Qw 6 ߯`'k2Z-Mn ʄMƁK]=[NgfW}ߕ+^K2@c)O1M#��OO�����A.4yeK,0yuƓMZ7Mh yսhxf$o&c˞"d%o:9LY&h۽1;,^+խl@]>{ʜuR2ho#rqj wX+:īyd*9f|�� ����7(L;~ ωS%Nј*o:EpJɫ o3Oc.[ lG/؊Zj""|Dz.R^Z ։nir^ KwZ.b8gUfid0gR=զDicύVюm#=9ow�������oP>O<^b%fJN]>MVgzըrSpfpJhPLr+z唗)oxo4ڳRSRFRnNץZ!2V-SuXR0w\9Q6.P/Pr\1Uqb`6A*vE)5GcQ|Jot5Rۙd~D#U8JhMW<CCK'�@>�����ȧĴgxisgEK,WxF382G.UeJ*[ aWjyI]4EJc"E;,o߈[0] w/R_r2BٌVUn&mUG>kq9VvE_iB>膳|>!??�� �����K>gI+Nx<ىRe&ILYkrr[fmy\+\U"m+XF+YǮBATF}F1Z>ah?],o!,R]VRaN 4m1հifd{hn{be=t'=lq9ݒ74000"FlFiЏrXeB ?${K.8 кVaO:Yr;= }5P7K]]{V(;<X<JP;Zu1& 9:( @+?�� �����frSoXMbKM\6Yz5z7XPpivl=Kz-t7 f'3dB}L]U՘9|ZXYܞ;v_ \.XUR}R]_u޻-bT2OۆYGi + 8,G#B2/.&ښ9rֆ*|O :ALJb ۹^z!bK|lb9 WT KrQ^p4x,(澵NV E\)L�'����� .\aUjS&-4QREB5 NIГ֚HaS6j;G^_ր2Q0lnUWxm@H5K^\e @Z{Y.]$}R5I5n4\Wai:z4$nn5ڌ y-ftEc< v --nB\K[!j}C--^`}ɧvOhf~\>CHD=\@&(?ɬOvjja�@>�����U;f욺RKbҨɲkBMZ7q٤[<'mkV{ i;,֛Ů \`-JZzrM#Va8.TtXGT W R \cUF.J:N1@y,=~LB`̛L}o%_ԼE(ɭ 1ʹ@FrWs755C :/@>������|NZ}ԕ+IH5"/! ;qaf =gO5mVWX[0|je˕+J[(f^Y\6%ʶlo^h@NJXP@}ޞ5M(;v[nB܈kE :OԲO}�%@譊 CKut t?xa � p?����_-k0V(N8aڄeǯ@MF_a0afeͦ5|;oqnIe{m&+ 4eP BdqQXn6 :Oyv sHgn.RF[5U5T(:w#$Ǻ]bF ٔwKTEH6x73g}4!₸Ws+x-t-~?~6DRᢏ�O�����?[MZ{,G!/c4Az%JO^c0Gin߹jEjvbc"WŬE`!+wZp]bw >v.F4bEsv:,e\mqB5OI-h%(hO%noEl_-}|Vsn\1!UsB{%GD$.{_w0׳t }v8ȉ`xW|~G3'ޛt.F>�����@>)gs֍_HBwNeSe oG-D3I`U蕘Y}i5ǵ.r(Oi5;mU2H9>zii,a]d-T53BysG[`-\0N֊jJ&O���OO�����I>',.1Gf⬥gHN>AZwKwL\hPogj>qoʒ1I^!Q}>q m/ij62 8ult!Ă5{$6#6XuR'US?PDY~��OO�����AVbR歗X9ctY ;$mDQb. 53vM^^a$G/g0l.xFaR=e #WaW75Z]9[-XbdyqlVcp?+�oE4 tj ��''�����ߠ|NNb 6L^[b9z. FKm&-QX ?i)imB~h!;gWpĝQk1 11ZX}+>l!zLE<e*L[,XZm#.B4P3pl ��''�����ߠ|J,V4wy$N#TwU"r,{-M\yf[lhzWtj.EZ![\Ick1[J/D*mcnC#*۳PgN?)Uھ3ZKNf*a_LRXzKn= ��||���� / '.2[Fs4z6;mpD)%)2(%;'-$pd9*,bu$U<W%U3{ J #['r<trMj*^KT<mL?vLY6*3Q@ͼBgFpioRܤ ��''�����ߠ| �������O���������OO���OO�����@>���O�����@>W���O�����@>A>��? �����|с@ ȿ$ �����|B �����OO����OO|����� @ O�����@>.~@ �����|k93{}aGe {9}dcp#29O ����E> yB|D;)l!ӇyO'rx ����o_>gD5>0{D;{&GHei<ad=l'����OG ?#鐳}BA),Me XhcV&͹d@ �����sD|}4%cL~Gb +j*54vcp |B OO�����9vrx?ukNu,ayYIc='3vR[N6vy],ï<M?<#KG SPE叉׿kb"Lw()�+q]Կ:sv}[gN7E:{))/x9Z[H4I@@>�����[S8m oBOXIG_xLbv#V1ym >^ZIvQ7L/e3tN+@[sˣG?<b^@3qւ~ :?/(^r. `EEEuee<` mX&{xpwL=WuU|XzF >g[Dkcam�|�����ʧX#GR:tS}*4lbުnc lQZZ*[~YKc8U ~Mrt>)nI"s:dҞ+j!<VMINGg&HqcOWby |&T[,Ȭ\>M.N\?$!`1ri7u=&_ 0)U%EFz;bwufěF %z78lrģ>RzDyJ圱ǁ'@ �����|)|_>>,C' E)7O*t0- 4d)hu)l~=]ˮqj(F:ʩ5e~R>cHHcݠfqj_\v`9fi:h ' zkG^D:_?B\uoS,J ?Ss|^Wx$II->$Knj[OEn\X[#U%?~l#w? ޑ=#cn6닜·X/d7#Nؽ '����� _+'~y"p],AY7RKg;/2l5X$6%hq *®_Ϻ6Ҟ^c =MϞ6l|Zf"rllU?/EJHٸhYO#=s9|y[= ib韦{+M *RMj]Wg9f1YfL:ё# }]Ͻav<D$ a3|CW*�O@@>�����z~| >@<a7Ca {8=tuY[i.7^C\!#Af zG4:ZJ5O#ݷ =|;q#W'rDM-ШOD]m#_enMwj*܁JIߚ@ʅ^/cv{ #"!\tݏ5H |g?tVK7U8m6 Fl`NM<YB‘!cG| �|�����Uϡ|:D"1&*Hx$N+=6Qqs޴5TYT3DDI,[@=w=59%&9)ƈ_xcxV4䈆; xh$e[5䘞l>. $6MjeT# :8f AkWyj2XSϗ1ycul>N|n/] O�����@>V>OSmEAjs[6z'# <!NM~veI2g^(0ki\6O Oȧ[xvj@֮]\icSݥ!C^R$u;w]EH}$]=s5Y4R$QRU?r6áN3/8_xZE霵ѧD6Yrra!"Ͽ}}&6,kqŒFX}7ˀyf^du&HvUbwZݎPzu= O@@>�����#r9Or,AzSn?T߽loya'fwnSrD} r! lH<]u{ 7΃l*hK*5眺Sm ŃYEI@(\͏3~0l`JAUS7O(s٤PlR~(mrh>ԇ"f7x"Jmo84B\{JesylGsxGAr.r7O@@>�����>/o'[G(a/GЊx&`1|}>ek$og~U/ ~r~ދכXyI R3 Fflvs93d. < �����_!i[mH  Pna ![ dX\!'lapv6tun8j*I~ԴBI_mܤPTdpe;hUV\+Yם(k'����� |{sCO>r hS$.1O.R.Py6IzMZtw㔉{N>,a4x55 NWdܾg伔8JFr稂ҳ7Fp!O�����@>‘AZY>͓2G@ \> X('lb}n(x5<q܂c7}\ݓYCΩ{ڬsa׿SBɏqk*6^x @@>A>����6sR#μ\1xB*Ҹp"q")#qI'^3E?Ls9$?_}\Jm'෴gc)Xӳ_Jzp||���� ʧp| GOGS},~#!W )xָ^k`Oqrq1~[^<T*p)18k?_rWUR>(i#ёVY[riD!^@ޟp.gc|oZVe]hhii+Mq}΄^}>3�@@>A>����/VXLS8gH9aouɞxsXdcc:wAw~~9A7cE؟Y5Wk?z]KǾ󏼉yI bj|8_"rMkڿ\>wo3pp][s>BTg;@ �����|~L>s`[4c>WH )<!KJ^_j&\-T< Of7s؍uOſlv7YSv7pw6j?%So6SG9vDCs8$Sey>)hctiymMMSSۋl <ݢZ*<1~ӷZuťu Mˏg{u -m rߔ3m͍mՏ;X#s#d;2f4Ĉ;q̰f^x]W`zR}7hȧyn<~\ܼ3#.yuu"1_v OO�����M ρ #D;Y>.'[Ї4EK}ӥrRdٯ{ :qEW󟖙]c?+7{cY6] nOH*6֋_iɯ])Oy~kH9}YBN~wx/aG `51'Qb?4ƺ<h:mz?z־ R>Bq_s}Slu^X]6|H>wdx샎yN*TN4~c~d;\G:b,aXт10K&qG#֞yC_v OO�����Q=8y<G>$ʩpntwsG 6X%4(ń1S[8-ޔڎOVf>yQWwmwȸ(_u1jh/O#LiwL q>J̿TQY񺬬Q}!YOYOpIe<s\Mbh-gMP:_)|NjMD>TJz".43KepsPGI}3׵vy[}O:KCF>4iCCni}@@>A>����f>޾e )a9wfisiW~X4oiMK_Gr2 cURe=E߬ͯ^x=;e Ëe,?T6ܯy^4V[}BD\ǟHiFq%>5y.#'ݐ2:&׽o ?hkCrYn]<`$zr(%g]'߭k,X㩫`޼3;V Fc����| 'W4V(c'=[W'K(lcX<uɺs~ޫ(&M;_s?/6#i5/V:?鰸[?5Ѥ{>L&d?Kxqa_iŖ޼/Onޭ+)F#Ūer|o:|&[Żi,OSsgBjԍ~˧q8Y/lh+0BmOsfD)83p9xтCYW*1rHU/c''�����ߜ|'O [@@ [nV+*}Bbk|ID傣SJƸ\^.lJBa._@[\Y=U"laڂWzv^tdK|;ϟs.%u=̼O?TC"!D~6'Gv{I?rJڵ憚򫃅Hji]٣{?<wOC5- Mo/8${-nhjlkj+Lvo[q-z'\kzݫ(^QQ,W爍|m簜Ɩg?A �����| G dWdv;S'{MҺ$U:5Ÿ'c/9X Q^ӌj7G{ݩ k?å7j7^]9^_<\ݚW٘VD]71؛_9Ʌ-47ݣoR-c ���� j϶Oz8-L-7RыUټG,GןZ}Fbﭝ>.z"{?mǠ; rGLG|~'3_<U7oegg\|3Yy+u''����OvT8t.+>)ۓRFɩ -r{ؔx fT?V۳Rclu"O.EFbT2*{l3jz}:z}uuciaHz7Ԑs ����oqS d:#r H>\!+ +Ltqx=6ɫq_YwZ)OHtD2Yl O 0|W+ZGeI,Ai7oN7VswF'=wWQ;$fU/'����[O_m%s~dDm\!#S4 *^P#z9y1z-4^7[:.r"#r>Gw*[C?%V&I3ղt =UJv:'����kbs3+:X1y-=)' .=SD{EvLA _K tⷕTNI7i;~fYړIcٍua&Jg߬>[ @@>A>����>#O5uqVڶun"^)P]LA䷰y$qľLϪE+)ٵ4Gm{m/Xc~Xhz}V6=n,]8 uǟc?)g.۪e/ ;⿦#]܈&1:q����oP>YC% ,~vO@d?'.6λ̭}Ֆ_SBb715tιfwiε-k~=13r^uwߜOIAe1 /]rJ"N숢6f+~'C|gs;uQ=kk~_ KNe%憆boat/ @@>�����G>:ky5Gvr}<('U)e7^[^~TSO-VsEqݚe8~p<?8ܾY:6ʘ?=9tBNُgݸc~wS F%y.m|$TS mjJUZ`K9Fy+clt^&9P${-l~9F|%dG/˫k۫E[DUM]C[wwc o3YLgѣ @=|�����'+}ԤsYgtEWIb >:OxTWM~=8ga iYNNǧ[alf7ade,A}鉱W/0𛳎VJ_>.Ḡ 7YUv':"繐Osy~7b.NJЀ[u&Z<'#=5>""Ub]No 5|RkωG_CPk2MEY]#]@@>�����峒pz.srzmZiŭvf!!s=AK59o(.6}:>j.~UT?MNYwEO\2QcGYjnųה'Srw\9{zEMtk<|^2H bB3tmvڽnpgmSd3|#"$Xv|>4};2ǬP<r!wШQ\g@@>�����v']FÄܲ?r^.>]ayGjkvwx$ΫrYH[M/w^rjv`S&G%堮7h -']o^{C_՛VIz5l8`kffZ^jvR`B]7avM ܮ΁ ߔ9?*<b=U?�����̚ uG_W>Bs_mKm t>b"0ozک-?[{7)z:j[ϳ.z K <a;f Do%4}Hf>rUַ=B3G|ݲ/h\mg>٦hv`9| 8NF>oU`|gn}Zc:_xtدOJH~Ϫ|�����y'8YBngmY=EmG=Mks({][.ݛ굯׬TQuJxPLU<dZM~$UTN7~RޱIJ$Ytjᙺ9Yn|buI$s4 wJo)3:k-9X]3.)u|P k(I~oOVp(OG|s|"_mB:xȘ/C O�����@>y~ͬS5\lo+<^O*%/ [:ʮr]wՎ.-ocVB" 4G/w2zy/)oz%grl_pYpʜP,yjrW|sl/OS3;kEIO|tNQ̶f]m5{^`;ZcG\v$18YCg!Whs6~ �����?/SWM-[vNvƸפKmu!:Sj(<K}.{=7~8.Ƹ_tGc,OCcO||ǀ|vWS<5Ơqr3Wvlgq̒kcR> @����� s։__N=^J󓶂V&ꞲN[;5vs޻㬏Y7fXYIrzi mKY+vb~ 6{ـ|X˱տ'cskO;Ykڃmun5nq*iP2*'����Ϫi5+.jluzT(eolynͶm*ό4c`xI{0EPa{මڪk[kmVP�"Զurw\B|z#=xɓ k=[U`t"Ît1{+ri*VJA*S->uF 8~8<K0`@|">�� O.zSp?+&zg}E+,_g΢}5\y_+RHT2t'khmxRɉ[LMS6Sk+Dtb&o`$}YΒJ>j{i.3iztaU|b���O|@a҉;{v.U3\K?}xa[*+>d8^EOfQ_᯺Ǎ$A+?qNPPT3itd$t:հӝ;yJGLߵcz4]GZ=0`@|">�� O~$sɸ_o>u{C/>T4d!+.<蹄DEa ʆхU@_U>zzE#N|`R&OiUSLi8Ҥ/GlPIV詨Г޳'Go O'���Q 0 >���F' 0`@|��� O'��� >1`���O 0`@|��� O'���� ���O��@|��� �ox���'�������'��� >4z-�O'���iPais4mUzjk @ۡ6~Fn&#)*=zASAE4<#;c"wz-@jZZ(?*$)G|7@C9;O>x Y>$j)�O���xS]OiOӴkc[8x&Z?u8 }GMCmSOUf&=* Sn类*(ЩFUPP͜.LJ4fŒ'6j1njo*dvMr!>���70> kV7u0 p?ZzېIfx< #]mGЩgOZϞ<i,UUY$1,M)WÊeѲbr HxRxM?"koX_#oJ\;vOjZft2kld�'���=$հ2wJ2jj?\̫ȢAnF[:r<5cK+)*8LuS ={*e0lm!GX]ב֥z*(*1HpF2j9_D'=yҞp< |]~&O�@|">�� Ot+[L&Rg8cOq~=y 7AЉJR%VURy*,Ub9$hIy0x'oDʖȜ3L.*{[)$k=}Bgc8D/�O���x36{.iim]Lhy 5=|1N3=:zs5IvJ/($,9=e'yJ/2DWTRf*)IOUӴjX _:x_;Gdmsi*vN Zxp<#NDJeB򥈐Qdiݪ}U'3cD<lyW~tzmn<w貔Mx1aBaTBƲe9pq̕odz}ՅsDD1f8wMrA&D|�� gyF*<.@MFMǎeձ7uٸ'YF ]5|Y%&;)dks5- ,Z 5v3xZ[99x{L4߰~Gwu%RK-^zeB2Ubܬeg>*cU<Gb!?~ڒNjqʭn_::F6lV5fŌ~L?<wɓ= Sߧ\N���72>csEz[C۔FST+l&[eQ7'gϡOs$>ɚN=dGh٪?{<ZJ~6C\}s,ENy^qS'nX=|,awIM(J*|>3YI10;Y*LK<:1܌-;gEČl郧b#CBÓ2R;*Pc⢄=^{qrbX(ـ)buKj/}t)O~ڝ#ydz-obͱۯ L}$E#l:؅+W-m> +Fd~GrHr?n`_"ߨ߿B(%_m~[ O���x3(n|1dNEKOK͌aj96s¦RIYEY!HTTTN=^AN>9VQvn.^i>N~S/1u@kd }{Et'HSE}Asm&Kpw6BxRa׭[bьCE5Խ>M%߲w6䏕(v:uXVH-Xa)uۜxЌIs}lɉ #+I}͇Â4rolG7v6p*3kd2=mﻪ_Z?:x;[wm[Kɉc>#x^ZOw==rK晚GM'?NACCɞ(_Ei >���g\b*SYYUYbYiy9zehاBfٴ# SEAӣp>Vnfn{E[ŘY:98z:vj\i|. n]iQfɎYɃ6j)u;YUDŽPϭ J>=J(mRilos"A:<~Kf>:T][ymlا]:6^6]nQ?7}ut錓% Fm={ңxڦ� YDj "_mӣ'G-h~~$GN|x{qn�<d+hΑmO'���)J̡ӕLUII`jh:qyl)ONפRIM!ͩL ,O+d(xfچZNᆶÌFC-솚Z׵q8lmSFw MYt2McHz滲c5 }RenJW^zeމd<"n5s}*Nޯ/n uLo˵9jeY#cC/kD~pG!Cڄyҽ%96%*\~_l 6>J-vu;Խb3ὦ*eonux[mk8ۭ=Ȕכ{>EM}'O꫏l']㪸0'"~)~� ���]}Hv<.i#ed25U\hrIy3YZJLEygv̠ RRR%Ua騪Fl5SjaYZd`1Iy5tu%QtZVJjP7Jd\.ȒrH+^ٚrާn.!>C+?$͉g@/g/\ 7ZmIɉmy4./<{|<s!y<"̑Cv]&[e;;CUwx[y;V漨y7ZqHՅ6GoKs>HnnyO'���t2竏O]0éO­[ȾC\*G+SVgKݪ2 qdt Vjpl]-}'u];ISE$.lN}UחIwBFM=*=wm."\n;kW)?]"�N/3[p4zppI}oâY߻}͉ѿ :gLf8WL+6>L?%ͨL|Њֶ: [({DSVozgxj<띋-/^/{a┼+]w?V|]?12ku25]r3Vݺqu\O<kjn&W7 ˅R >���ЕGCCΐyȜ>>XӤdO@аwqs"ǎfg/<I_izz3LJѤe@Ul%&aꑁҤʳ<5홫 ]PvjeuտK$7is%g.XYrG C£[{^8Ĭ(:kL'J=&%&T1~oyU}0Vʓ?ݕ#"݌Epǒb0:1sCv/T|ج_!O_oK%?oxx6D|TOjw'ˇN$ţ&9x+V >���$m) 絈όRG挊M 0>0>ɩo#rBc6oLfRIgڙgGik(**𵵴x\5]YҨ+ryl2d N/8]qtBuyYIc$S{ɢ* ^'���>pTX\b!FvsƍfѻCGϞly!+^>'OOvrɢ=Iy*+)0 23YFS6p2pReմ,jz*LbAK\Og'8~?;@|">��͌HaLBxBk@qԠ^7{n햍;Li 4j+u`-`g``hemfsN5zYy3XyÇ WQZ:1r2yL W*zSeqee O'���ɷs<<¾O_G3kRTڪf1{Qd.HW$w1!CN˛|񉓇N4sY@_o00ZO>@؅3dqdkR#>���S>Lys'$4qގZ9Y:6)ax &;~O)HYhh4tI43S#O wHt!~bW 4px0h(TL'F}n�O���n|VTT8qB^'Olll}]ӌmb6,,)iTJ8qRo`0`a„8q)샏vĤ1j;l:--m m=[Ɔ:Z]\ʚ42!#kt)Ro~=0,ln5uc O_Y%=GO[ҌS?ՋKnٳQIdj1 Ӻ ?���.>#GH0^{> ~iicٶdys.]yܕ iAȄ[>l7F1H0px;<9#-B&=ӆ>.,v` SA&dUScX|;g6KyK+-\]:]:TQI+Yuӌ< 5ˆT_/Ƀ4>| |N׻@;0� >��'QZZzzW|:0T^_Y.{;ۼ{M! Qb\rbBJTxt8a٪͋vfǷ30З#Jvu>гO�a8JFF|&t5uC&KC~\5uN㳱A2;eU牥CB#fLzO(ޱzQܙ֮=uYΉYr&>lG%&\ғGkg&3.:.>Xj[r22s'T?#RwՕ|3 l{Rs߾Tyc̉qڼ6X0Nnjܘ0yɹcL\p!~� >��'A<_ lKȜe;EN0o??nVpa|Ȅq#CG0$wl^RlbLtlJrrd> z{xp{8<\5߁k`lbԳE6>ٺԵsi4E}N 9N46t᫢͒S^zTs6Zyl'T5XX1.3ϐNđu Ҩۘ\{G?9;*mHsOQV2>lH˶JjޘIKJꟐ+f/�'���|}voc&skًgh1*mf?bP`P@!~.}$FE"qlL(,ٙFQbfjo ڙ`2Td6ryd],WN>)>Z5Cs㳦; 4>t]Gwn2qR^^QQ4tN O12vԔ1k|zԅ.^ E񇕇R33GN)n% +tFdRU7%L<E2՞ڼNlQܘ&S3����4><E|iڸ r|"#GM:#FgNb#£$>Ä;{9w.3hXNffba>fmb NQǴf#E^";H+ s;pﴸd[ 6,k~j;ƍu${I͇J~9z&"x2v=򇨔ۊ.4ms~IӚݹi77igf%L ��� S5E|0Y: 3@d.=ݘ31:46\'   <^a+qqxAK//>}a)LݍNZԇʏ˥n2 xz5]ik޽Dfujm$S WՍeIS~M_EQ,'*ݒžXIB2] ~g1くo\ ⑕/|:<m!!>ܘϰ9%%+GΕO���())kȜ>>ՙM&WWU͑gac4yڻzڻ[[8:9={y zr؜hJJJں*lFWѕT9lMKOAeK_}:/%3g-Ycf[d$I&>cٹZ\p狤Yܬ1ٙ[+t~D|=PI\촌љ+y$=yʾY/ZxÎ%m^v7>ܘ0{ziYٙ2l�x ���bd3Yj,OKGەg/(XLʑNBfCѝdS/G㷬ڶqSvsTQQ)Pَi=4GӼP;qD|��`|2e\=6i344շ62p5΅ojkf n/Ԕ q׊kkkBiM)<J,:]E^dewd�D|��,U&ix,׈coaifkd`nn%=ɚlEP;[i{ 38fh`zًٻ9s& KCC"QsҨ"%,&׀WVUST >���70>8\bk0 -6e9Ltʟ٫_π^C#a¨p{UA l|'諢*=gi(pH4lmҢO�@|">�� O U&b4Uxjl5[WĂol7655RgkX<KMiineo['ܽoG?)p_xhHP<h-t_(rV7\mm̈>u4:u-mC|� ���o`|rsK*71j똘Y;Zkk$>L:WiйwK>6V6^^BÄ! 6<.T9i3f|1LB|� ���o`|lu&DYŐ^V '[WDmljaglbm``9n}CJʪL+kKKoHpPXHpx4DBƒF$罽eG_|ODkOZvax)f$Lۻ5 Ex �O���W,hpY 6b0[SrTj 6KԜofiobfΖTukc`bbLPSSWPPCQ* ^;0$xDhBCD!#D!ݶ{aX|'Ftg흃ba:2^vfPq_O�@|>ȑ#ó`Ѽn S ��^|zarHp$ɨ0٤H5jFLSMWVKC up#C},;{4z4&UTV}G !8P4<,8 "aY?زwp) QȔeko\"x ёy߿[<Xx �oj|u?IO��@|v;>G̱l4>9,n,5frxL GӞmYZ:F:F- ZrTgq/$mN9BUṰl읜|}G @3t0at3SN7ٵll|*=*.#2%7f?ÆƆ_9ϯߒ< #׎gU/�$=YY%{v ��v|fɏq5H|rX<2d19LLO6MX\-#KS#KCscum}Sk}3-@ѓ4BTVV159�!# ߿ɒ]uY[?MLJ?7|\{!$T\nfsouSN}5d.'ޟ'Ko*t =ْ$m읆Ӷ)r���3=gT\^HsJe0X** eeUJJ*J &[#\W]K9LQV&Ks5 \uوG]Tfrl g^y W HOh]w2M_tBBSZ*x*>>}褤dHasx �C|ΐyȜ]O-ޟ'޻}ƕN2[w`އ˫+K 8o_v��O3m,ҟSx<-%%e={>-xZ:]NWVPhJ*JdgO`suͩW2js5 tL4 4,tmMlikZX:999xًl|\13N4_ sbs;MM 6Tw Q0صj!>OҖy t+>ޟ'o]|ӁL|Jkm]A|Mxɥ<[DjFYQ.QsTּ���)Y3SGJ=_QA:][-x'$WÐa0T׵4зIm5mcu]smcSkW-C+5S5-cM]s#[5M# m=c=cm]#m=-3]SNՙ>걾ׄ=7Fnj]eitoê{=*>뫎%R"4V7>>؟'o\N2[(z|%U-&L^U19oƛw7A���#GMOɜ5+.y"FlYJ,GXCd@Q^AAAˈo`ni7;`Q!CZ<]3)OXMˈjv ۄ)kɧ<@;S"g%EȄnᭋRSGOɛ6sK�IXL >/_3Z5Zg<撚k_ 0-n{Y]z®T���񙘞Ggj,ރY [z dki[itH75 $# ɸ-IP-c;mcCa>!}[ Yf:f$VmMF|mc.^p��<繟Ot¹.^e{1YriMYI ���6mdƌQ3bdzJJJ*,ECzB@*()3J*J*L*[RiiY[1m40t1v5vw�ԩS͞Ep|v ~x~V|�9Ak ʨTLV^[.;?���gԩӒ3;8z>1gn|Ճg˳A{<?ũ 4%e (Wۄkgooehkg.3w4pB|�⳦&99Y^dLyn>}#v2SZ]iVV~[\Q]YZ&nIݻq눕H]ͽ6Y7yؔM7JK޾zp���736iB\ԩ!a|pXS4 #U SMS6VTf>SQAA4my.luOT]ל|%k!=jB̩?�諨&I<Q[Ӂ|ߜ:֊|_K[?=ϊc bxzڊ rb<vs|��#>c'č7rrBj^LܘtCu]頦m4!ogi`m0d1ʪjQ]Qz.iг6^Wה ffv!>�I!ז]/O*>~_=|t8xh)'u(:[��|&>_Cx? �t+>^T|׻w@f >{.]~W��@|�*O*>w~I���O�7>sv7>54�� >�� ���&>�"]XXMא9g���^������@|������������O������@|������������O������@|vIAA~x ?�����@|vzx!#O y������$U /<uO�����@|">�����D|6N:�����' �����O2c|Vt���� >\.7gee. _�����Çϔ!#W|VUUCd2���� >͖$omc4LHAW6l[A?|gO% GLdAW{u}x3>^:eʔ2J|\|݀aQk.���NwfT[vɵUR[nݣw@lw_ۼǏpcrߔz&KοxMnw`އ˫+K 8o_v|u5/-CkÄQT\RQ~]kENJR^\|wxr?_ >kjjd3pկ^IO-lzߺ_���x89fΘSJ/3:tmjʅ=Œ? lsշ$55 yorx^Lyc\ryGV+ZIpo-o$AX2߷Ƿ$ߥܲ<>k$K"5JeM|~E5s҄ܬ3~**{ ra>{o(f| O?vtF,+-<:w\(\5ue]~wa^|X,4õ6w⳰p-dg]]]Wn|9_}|iffWC/‚J>pngg+|ov};"0����tꗑ4܁ξ<?ŹνGjz')>:6&LutꝜNN/sQp^qV6%? 1~;Am#9^ow끐m=+%d�ʦ6̓V .Yr)9xi9XM߽ke;M:3iq%tl@rg{OcWl'.pߎϊI<.y>ɭmdgwrQ55vAsvUu_C3]&l)wXȟ?8=/؜>Ǔ[scsh5si?߭h9?ݩTV:=>JFd-uLR%Ҍ= hQ+]m?l.n@5oF:nJw__?���� >U3[ցpCRS xսGQj2{1sC&s6ޑ7Kդ.NRx:{Ct~ݺ4mCA||5nHE55S MyFiM�WP߼?ºƸU|4gpOOv|\#)o�忐 ʩg!pa  {yi\I$;-l HեGIrt%>ܤK >ykHgޕ<sDYa Y?73,'$T|yMQAsaV;qOV..V;NnK bhZbmAY~&G|���{vwOI?v绕5-�i_&X}Քv5^vcct{o}m4W~g ^_ڴ osiHVrqӠ䳥mnRґU]w͔amlGK|ib|glע;>sj%&-Õz \lnaӷ@pVRjW6c.h aQZ+dzHHXr QQQ$Ç]O2[{7o^toǠ_ &\|[?J`yn޾42pgdb/+ÈO���1>G;Mj"~޾">_b*퇷hяH/T6foYQɊ?phs[Ox6g&1$b9wv-NvI7E;|}u{vx[ֿj%?3P]~mᑤYXޫug|nEjc E{B *<9қBw$m\P?wǧXX bw,-7U!+K\8-\w'���KgݎYgwlm}klb;v7{}fTQR ?VW*mo]lSt{g69X*~:iOUa U'7N?mj7oپW'_O7fe%ՕE_nη]z@]M]ђiNͯælQ*}Kn_=P?P'Y]}BaԦ?V+v6J27>bWewfD7Y:3:gծ{ҽe׏< -Y+If4>-}w2pt=U$yP[{~k\U]KwYX{P'IW<Z+a~_���NVWVV^w$#UUTj~45ء_/w*eZ)wk?Ko~_i8s{YM]՝?Mj-GSY|6vVWtlơ#Vm潷m^|U]%kkkJ,67n>;C >7'q HpAQ~@r_`hDx򏲞^¼OC/o9;[S9G5!3R$ ʞ,)iش1&OᾅOv[zii Q8>e ߼>ϊ,-kaw2k_;0elvg78,"":q̧{> -( Q����:05fzĿ O`ܶc5%7Fs$ISkq6@oslb:XyK׾L XZ|_{ Ŭߕ^|~oƑ}mA/x^&>Vo|_=nWV9)#I^$[w���կtq7}JJzԼy?OHWvAH|uX.7^pQu����ۧ)=8ƉDw~?cۏ-Oσ=,{?j_���.꺳p]uAa1HQAA? 4>�����@|�����O'����� >O������g|O�����@|v`?����� >������ ������������'������WΝ;ds!>�����ycǎ$iI$]~G|�����@w'N QIҒ&YWWG޽{O������n|:tɓ$*IZ$Ibu|VUU矈O������n|9r_~!QIҒ&gdқ7oR >�����[yر3gΐq$0IfHrJ㳱=|o߾~:������ӧϟ?O% L$6Irlzꂷ+**������sΑ %QIҒ-ͧ@Y]]]VVF ƍ/^$l=vؑ#G:t|������y$I$T$H#IH$'IT$II)>>>|XSSSYYYRRR\\L z3g/'O<qYQ������#yH"" F$IB$9I% L[g}}=K$REEEׯ_'dE9�������$I0l$H$I$-I`R6_EyKDjYYٽ{Ȓ7o,,,$Ju ������@D"IE$I<$!Ir*Oj'u- Ϧ$%JI&Z^^Nݻw�������dH$T$H#IH$'}ٞnϧ)O[jhmm- VpUUW ������@ $I0l$HIm+/ϧ|^P؃dj������Zjd#՜$$lUOSޟTR2D������$N9)/gU Q������Vñ%\B����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/tagrename.png���������������������������������������������������0000644�0001750�0001750�00000175121�12161032160�022174� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��5��,���m���sRGB���� pHYs�� �� ����tIME  H��IDATxyT{{9]ܵvwo{g}Z2W 1 #"b;3 2C( 2}"eLRI@[zzR|TU7 �������0/ d^K�������AK-bh -$}}}Zzzz������:A*AQ1'0fB;IWWWggg{{{[[[+�������X1&SЮo)ƊO&6;t_~ի�������`  G NA RL*? =mBϙ[ZZHr$gϞ>yǏ�������b A 6A b\ =b(o9!!~C'sÇݻWSSSUUUYYY�������k @ x ,_ AVf孟Fb9Dw<xC @ ۷ ~A,7ovuurRWW~ڴ@@ ] fA,ݻ2kЊB8s[?'O_~M:9/@ @|j!$  ~Q^^^SSC\bA)~Ltvv|O2iN~9 ":@ ⃆99q mЊrb;}aP4~B_EyBO<e] $|O"UIc>1x@ Ad盿@V#+M~m())}61 } }?wuuu}yՓ'Ow>RɆ~ɃCk7SG @ 3(2xdn1h ے9;P555;}!&B|kO苻>|HPh26o, \_8}?im-ۚbǼiS.~"K,Yaf\k+Ý4VӧqLf>ԩvlf9pǮ1ysO{-q9pfu1a݂y ~|@ &lО@ :A{y0-~^K %AIQQ۷w B_OO:::^~ٳw~BNl)*҅ _>5&A9=ۣ^DQZ9\Z^'bf[2h k̲{MqdurU?{eb(9ӧ ˫cedhYUVsWw n\:nX4o<M}d={-qwY~3)(Ǯ zRu&v錙";5r�@Lk v+o'+M%.QSYi2ȿܖ^xrݼyx D[PIOOO[[[CCCmmmMMͰ߾/v3*rk6A $YΚ%.v6lum;;:۲ ;e {{w6Nsݵzl i篿n 1󧟘av6`~v3l4~@e {M.B i=Ml δn6F wͤ@=4oQ,&wvt T1RJM9^GYd| ;Sll9 wSTt fE[oܺ@(<'̗iŦ:],w,fN3xroޮΛ$ş3svN6yG!y5wӞ@61ּX-=mb~[T*>!>2'd)}IUU'_N!~B^td&b\=?6}t=?=`{ޗ+Nl=w;xs_-kl!7?H<nݬ6S:j#ފY3{YJk7o||#1󜹊 m݃} +⢉n7_YiCIYşĖFp̛/Y]|MښfL_yzYy6lfzujwn,ᮕ%/Ujgp_..s+jҍ^4a-omngӴk]qf[*[/H3_6l{Ԩp`Ji|b<}JpOdzU'y pqA &xH\YT_E/4-ؘ]'׮]+))!A߂BL~0q~ǏWTT~[ǯRwl@ &B՟Rc@hs8qLϯyݻO]yf.f'\]ٶsK4/t1N+KlV:ߢ׃q7͞~<TߓCtDr<,}|qf9%\;rSaJdePx,g7>oԟ5tih k"i;nf͎'e)Y}B8xx\V^V&΄hMGdmmf7=fκ7TL<9m:.1s>Sԁܴk8[2Yt̶̝SșrG60F "X,[ãzCla\܋lO;qg:yfifʏ}[ds @L`<UO0ޖQVe}9aWsBիWw BLOwxѣGoߦ$g1V,JmVb"Ĝwׇ,');4۩?ϙ1 ͤǝn38 N\`gfUhk3ކyӦ͟6uŽf%_ 8#V2{;%ˮha]i!f3jy<#nݯ/NiZ?Y@m-j\\pL"l0cݮ6mn(~4cFtG^V&>\{a:y99۞$?n;u|W5蝾d]f+Ӂiylgacsg;;\f7͚;̘e?iubf nfϘHfOj\L# VMn˨ mɗB>Џ2'>dOh,~T @Lt0wr\0aK_;Ԍ6ghlfHZ`;^2wβ]0}'3la9 &Ϛ벋NJsb@Sm*KO̝W'fakțolډgbB/k5zYpgzLNfo'ΜwO33<f-4|]8y.5%W>MV9=KdsߚAvF tDGBda㑾m&)''s+.n9] 1U"d.r?@{vx[Z*k&ٖY.jZ?IOODlt?O^kVb",ѿ?~l;ޢ\u2^Pͬl7n{̡;xe_x lm3/m'#ϵ9g7o9.;qg"t"[emMf%an|D\f۲6FMFN3 B `9[ٌ"q]̘>af\Gg} Ɉס+m3ݽٿֵ<9wvl{y3g6ΊUnۺЕL!g&)liSfWx)X @Lpy1;Y ۶lX-JF'ܺukO8ڵ,zĚDwĉ,yOfG?ZnAfeV?!gMn5zŤAvӖ\0Pm�fg+O ])de7y2<Q_7a["maL57!<>Z{°B9[ٌ&q:s1xԾ~Of ]fol@d7ˊf%^.KQXdgKb+Q:[RU?~x]>^h;b@@{bO Þ}ևؖ^x3O w?bÿ뿪7zCNwdּNmvxO}?aҧ8g:z[_>J[?v&pQ 9V?no'ز&G3ůZ{:,8%vde_hi[^ppf}.D5i|YRO$3 hP/פ?^ݡy`@ihֻf:?q?me+[~D= Y*[Rкše1 Df;#iI͙4YQݦ{7s9z11] do. dݖٜ~m`[?Ο:eblOIh AYsk:;9ؒte̜oi8w6xy$͆vӦϝ9n& F-;f G,Vvr 2g/OW#["A4wtOΟC_4(kkѠ^%Ig3ϚN̼_ÿ@.3Vz\v˦o6nb!MeaNr7v:]0۩Sgs> b\(o=.X`1deͯ+j>'PWW)Y2@ ]{3@|"SNfY R'4l1u˚5Aħ2[bh~0Jl}'@  w@AQOd5!@ 1J?Yx@ bA\c4~y?�������݃�������'��������?������O��������~���������������������?������� �������~��������������d~r�I 8` t��7�'X |g;0U��347�&"774x?'V ��i?!cqVWfJ�'�O t~2)��~ O'�� ��~?O'���?�~? ��?�O' ��>!?wRp_TW �O>)?aᓾQr('?~?�?qVܤ]s=u4U+QkdOC^%c'G<.`0u\+f7Ѧ Vlot1q-{Í𘼸|2dM;eLQ(d-ƸL;>Y?}?@="=<mbL/=o~f1_ �` }Rn)~_Q[;�0É[,+? :qINA$6!ěϟ||@Z;2U-S/;?/?#/ NmtxAslדn& ~Pnb/&/~j]?buØn.n)|_~ ~˼XFOtS+?�|~1篳|pÏcy�^YYI^5Y2V~rx`x]P@y. Kf<RDq9"O//u*~⥇zDB/Dۼ[KZTuV_w EQ2Ϧwhd>lxhH3l_%<"*wodVZv5*Gm{ҖrpT(yOo>WdH񢅭R;E*s]\QX2B?6u#6#뵫]:{a.:_`;O꺷7v>\y]i1Κnb}̈́d۫u'twUb!~aUMtg"Y\(P yG^ILjJ]BZ;YgS~@OJ ]]ioyppS\9Xa?3jPGk>8�>?WS#Rw&?i`Ҥ;�0֒G1!c\dFSGg[k%_e&񛗯ޯӌWުeqך;;[WF+t^uI<f׌H;a\xwJc{g닻[|% w0)7T<}ZpR])|܈^^WsxڑJ?q]_Ug뤭~nA/~_ٞWo=~߹'9m"OkOWD_}/'{lO7-u翟(y>{o}3@lmcOkJkw('ϊWʩ-M4abg#z|R[$=7P0b]K{g˿(hGo�'sDG[7Z wWqҟ1eʔ[- �$&&O^c'<DgvؑRXqvؘ>Q˵y%px]^t^-/[mƍVJ֪hPXEU,1û(j2W 62ĺfyQ2wwwOy,<v큙JȲgOšV܍9Ϟ={3; z#6񍰻sz͵jZufx#YoeYqlʴ_g|'MVtSr&֝;/#9[^'L`G-./kIJCWEqD5~buV^{Z}"N^pE;: hn�'VN7?;1_a�+ ֤$O.~v/YGO*ӎxx({]nXHEVĤkhUdܶSw&q*dud(ipӢp(ܳ&y){r2IK<aH?iztzҤɉOMI[C6A z?0;%P';`x;Jk.3~q[ҰNkbg#>l`I"p^zH$;-uCC7�3󓞞q\yqcyR rv�fLjKݙ_LIkc GeW=SU5zQ7T7.WgU1]oM$͟?2R?1΋R;pDv;cmOZ.Lmu%|iXyvxMˋԢ*K)f+55}+=|7ut j{,gt=EIXΓ>ڍ%IL=?8,�>;?l^X)|ͷ?Yztf6ݡ//5'%SZ'-/rr(𐺳=Mh.ɸEM>Wy7ѥL_o ɘkhnf{[$Vh4מӤ/hP؎lw(MlF'Vt~ʷN2n۩im}ԹC)rΧ5eO?lo8' #񓋋BNvꆃAn#GTU}KWg[B fΤ哢uC2��g'?@?ia!KW._y"yI?y^r"C*H]=w+WvaۯjB"U $_HD{\5Z']-u-"GԎ3Wc'f*eSF'>jooJ7Mj~]MG#=|wBOG2~,"Oeg<R?ٔ- C|p EJ)ܲyBk>?�� �\_-귺{w?y?���0eE:zZwa{OF/~'�� �`<ӼݾrL&d^OF/~'�� �`d|wt! ~?�O'�O' ��'�� ~?��'Ae�O ~)pO���y7'l~&���� �����~?A '�����?����~@O�����'~���� �����+?.*҈؛*5<oϡ }<P>wKYE淊 V&3-R(RSH`mtV3 G7$r ߈ud^/kTJA����ORRk ʪ 3{QQ#N8'ܽ֜7^>~=F*)*H(~8?ѯ~����0DF'oop+~y\*)"&2%JP(VuK9+sy"{oJ!#tu#HIԥca .Op^P$XTR_{q)U"�/=O * liVo y* '�����T]vqqI,,Ӎn$'iŠ,'%9j?QG cRӢ<D>A̟H+3 G(->bȽUA\{Ak*U/Zh>ʪeG+ꊜeRJ7[nV,."{P]ze!'����|~RIn5e9ɼ1LM^ߕ\`T\?Teɑ<Hd᫪E9.~.Ym$zfƼqyRS`*PۧDdyq p ����'3Rr>Y˗Ҝ&O-v^v**_O3xB"j~R'&0ADY? 4ʒZ̈%hAO�����>3?Vyt}O y\a|rI̟X?OprzRo-ʒpy*]S]ZfIϟa~����]bED~aYuѵ >b]weU'0L5V~R˓ї!U' y Waqꪂhy޼쑋Fo"Y'<0pLZY*L*K4pIm;wgTIyU-^]zzM?9���/<y6F?644 o~rG]gmT ġkIA"=L~?nZ!Zt0ɍ뗢BDr]`XWJ$yijɍ%n*xpy|w5[澽W-V[ Yj/Ie~g_Ŗ]wd]O~���+!?@g)*)x?���>A?!$2R?mL E  ����?O ���~?A ����~?  ��� ~@ '����~?A 'c'C}J!^HS[wIRlt<,ӯwʩ O-o3e`�~.2dos-`ecoSXdL#*gZa~1ϟ''hILLWS^Q\X? O^+9}Ong;,o2e`�sh~3Ɇ wźO&NSlyO?>r-Y|ƶ~#Oڶ&''9w[{j+svhBKsȼɝ6 (~R3 41yZ})EId]ba#V\\^Cފ J )IܘP_!OM- H$zN<[wdT,m{78<hx}s2P@y- OS09rXb_9E %ʝgLVǚ2,zםhuީX?('=%\.R.Yg w3ÿ^UZbo@ky3Ŷlm7\X8뗐�_*1 c7G #󓑴G.>¸ HfK/[MIm~5H~ڠvᖂ!AoVe;8TʚXl[cY'/__BޒOhÄgD,S Ud_~ōi)ɩE7^jNnJF9Tc:)9E;RFˍ %^OOLJo־N˾?A DZȩnp'?k`6OhO9sNlʣ"uZl~c`_ 72+rr:C]LjHMcp4.gpHĤԤ>oќ)CFW k͸�{ʔ[/6t!ӆǷ7;Mrb#2lU0Iw{z`Z̈b%44A[X?M2ފI mO/j0'h\f+|A:<~|8[6m+,q I'[UYΆ]MMM111[% ?<=8F$5VGGkJkzͬdWtRrӮxEII[/=f01!$9I{ʫ)yIo[.-�=-Oo{' `I7u'~{I;18g0IћT6ѯ_䅉ܶ0y-=9<åhA ~eAOn,}ge`;:0(@o5R =/WZ B c/u*v[̈b%FW4Y5?MpgEaƮ a2$lî;oư>r-y}Ƥ~GL֑HBݜ(^p|eb lUJY'iێ\+1%-=--5919ZœVB>"͍Zڈ]<MHLhIuVZNeJb£OlX|aRjaSMNħ=IJm7z;WrťghaTE{08g0I\L_jlzuOgGେD"y;@!`V|Ϥ<:Px bϷGQ3YV,󩠰 %o+-p?nr[&.?gd˛X2[d۽zWl3~2B)g-˔Jư>r-Y|ƶ~GL֑HBKB߸_dhE?&[l\) )xۑ͍L|8?ɮn'С. 7ڋ^(#q )))mm+JRz:^>ONWjkĕ%W3on}Q*%^osERr.I~@ >3?9%9Zס4jy;K$ EsAes5F?\[ѩ9˗3gc?,ą*62X*u!ĜusEE@'Wo~+ZTYW]" WL dEo7x\lŶXe3)ksc5K)iV©P?r3f][}2[\,m-P�lud;m<?Zl}&}ZdMOoXɈvڦcuM >5ZM w~chhMsդ=)y[w~bfƺ4ܴ]dԤ ?A  <}zOԒY݃COUJ߆ /Ek8+YYk*)kNCe!{+QPN rjK2c=k{E ~e-)-| ]GB܆j/*yЃM&pb/7j::Ԩj w}Ze]96[ m3S+b6t&mMk0߹4>Kvl[g|ӘG.>¸ ^GGf[Rck#O0ViVe98u3dXӶ&-Oz ڥ'UfjG Mۛ_>YqՌ7ڹO6li~x5)ojN8;ꢽ2!/,Rkw[!qL@Z=!W壑2Jer5[3rK7f.R*XQ`_;E wү Vy|vT tgZQ?#N/x)ICibU7a!K1{.0ߟxY[J|Cc^ WT~vB&H# 8ض )Ĉ律z*[խ&='pe [Ez^Ey-Yr핼{B%b1242󞉻uko^i,rIÞMI_&`Ee} Zd2[# ,cgNhYbtUI[}2_s,m- `H`u𸶁!6?y`kUA,L~b4W24JN˸Vr~gW'WU hn\ik53HONɸMvI]$~|z_cM^AYuaz/7*^\]fII 'ſhUrf+ڼXAnAUY*3 >TKQ>e^kӯ'OOC6W6Y<OX|+eZC sa||~?wpOoä,@ozsb̒¾!ɚ$Сq'j/>7:1~{35w6ʧxƍ`. * K*\74JeuKbPDZn/k<"P(yݮPy/\qѤVrY^Sru`WJ(Wm,*դ_p8¬s#y=_4 _HFI5~rPdؓL [Âd"28X7cI-eX-çs>gh($Oq'E]\\ tD6Iqrm)* beFVUT(MsJ]!צvSX+'J5'>/fe[|~{U%;Oi)s JG2$\O2ӚUYIO>wKp6xQ^wk.I@[dL� �̟~A2ܒ/krۓy%(PF0.C)mٗ~%ʋ[�C8LLj <<NK@߼d"h5=ת;'nFh)7%i'X2D\w[.JGr >}?`t̽Qv@[0Sf"Οo/65Rr>._n4x$g0T 4V*9Doj@O\tU'd <3څpwgh7+J_Up8H 56?Ɋ۶M{X~E���ODs%?IӿD}fbQ>.](KT\?IG\̧QW HJMOw˱O y\a|r1+<h?O0����ɨ%VDU]#~~ u"RMp]|zKm{(F~`ܼL]?V ңOY._ɨX:J>LoG. :njU\@GE[Hl,+D<I� .ύ-o3Ie1.OF_U/~Brٓ^Duԋ ?���F'cHb|ɞR/ wo鐫bڐ�HnnJ,2'7*_  "uez?OJ(D"/Гc}\2WH?!p,ʟ/H-! _F ]>=t+qQ8K'1}M<AB=V1 .O���ē'OԆ۟w >@v9 �����d\EѕB~���� wJ$J����O'~���� �����~?A ����O'���� @~g��� ?3 ���LX'SY��� �����~?A '����OO2| �� ��?��ɘuPHFT"{Ix@$],2zɈ[;E w/s\gHֵ |*3-R(RSH`mFv1ptE"12 '�'��0$u/&0sO/ϻx 'Db{g'ܽ֜hW~?��?�q'j/>7:1~{35wVL/92CkRO1'%!|rݤME _( >zvI?̻nR,(UvRk&\Hy۱~R]+.YG]:P!)mu+% 6GZYPS* i&KńAE1ӷD28X ~Cd|A'?N:5|6Iv4q��~R]t%L7M$oto ɤR#_VO2 @YIO>wKr>'R 7ynSJi 7P+rIED&9|KOFO%*7'[3"U**:e}c/rDuGUrp5]y|k9uUaN|'EyY\D$IBW?qVܤ,=u4U+L(?n[?|�`BIe1"$%߬ה吷'tS빹WNE1F'\% ))y'*ɜ9�z(A*:l'uun$G#s/!Fg]wԅ/%KtLXSYUd'%|WF'&2/N2ad[͟tԬ[(aʷ~WN_}I]o&oF*Ojּxc?aK<{}})[-/r l&1yxɝS_}3<�'V͟0q3-˓,,9⢅˗Ҝ&O-v^**_4 "wOॹ/<3/ |{c?!J=]9D V T.)$H55Sq.+N'~dc狀IĜ^zYKgW!?J(ƍpVW|Ӓwdh5iҗJIy? -4/jo$NST;[{Cɼ֮괘I_Pх#��~ ʓ]fhW<VwU; +<IĎt*Ɂw)R,ϟDY'D'\IkTLo)+#O,E?akLz 'OՔjhc󓖺4Iw&}ٍ=7~ 298f}߾^rE}-}_LJyjO7X-sڌE(/>Y_N:G��Ċ²k|KbΫ,).LP<Ǹ<}QU~gODIq; 7yQ&? ww[*HVP>(py?!nG+)RiKx"~,XeW2ҥ:Avo۹;Ì7gO{ͮmԋkBܟ=A_bO?Ocʔ)ZpI ?~B^<LY<?%;i0 B'H6;lw<'KTgǏ? \O6ЯgʦLImW_~҄#��~O x|8tOԥkCB G,SnZ!Zt0 '9V(C>_  "uef҃Oc}\)Ho&뚒%n*xt2UB<I^'uw겟Tw]ly~*]!%x~2g'&}+|A Ƶtwpf}e_ע Ruw6s7QbO okO&ѩX'<�'tC;țpOzz6| kl{8yҤ<F;k?{<wo0˿֕8~~#��~@ '=1囯9qO4o~]>o*}dv~bx|rڴ|H/f$~#��~@ �S?�� @O����~@O02| �� ��?�� O�����?A ����O'~����  ���� O����01  ����'~?����@O�����?~rG]72T&7Uw*X)TG0;(taަ)\\*퍔<g͇ ?"-\RVm~>E f޶<"(5~����'})5yeՅ(ߨxlRDO*pJU'B"X)F'o(dʸU)$lOQ*幪57}dO{9?V�����~ڋύṆLݫu*r++N"[V;R?!OIuI _SptW%QRAL{?T(S2ELI=2IHjJn[J EBq𪍌Ï\D^H+|rЄ%s.,Cz?Ɉ,ܑJ*8MZl&I6�IV|Z'lۚ,jrR]<_A2>'E^nM[Âd"P(Rg`����O>-?.LFމe!l"y}{G]%K)ƍ~RW ՕU2yqBi8y[SՌ5 ie)'lI}&U&tfb/rDuGUrً=Uejc mHݦ*Z&rBM^FYuʞ%\3bdp pQlEN2ȤlRT'AgZ4$#xq'C];)rlY5˂d.('%/p8'^uj5t<XKR忸S[w0oe};Js2hSZl@nR#m0bBng')kz=a`sj1wCS˺J)1*(9^]p?LOs )eȚ0O*}[2UzMYy{2O3cgQbt~RxdPHZ.9v}<:q5OwjruR-O9_Zwԅ/I*GpKG+.暼D34<5t;g;_@_{R:(>OxBL*x<LR鋬tŮ~2St"'U6Y,L?8$}~BYrz씬:er6?3{?{pؖ Hjpg#JO>4]/Nd7꤬!3}:�Lz8˾a&~[t_uo6Ւ}lWh #8#L3„?;-wIrVeN^jF+<ҵy)+=\Ɋ۶M{X>| Zx)qSKEn4gFpxd5&(*2ߐY'uxie~-O[/_/L.|bIVHlU6Y KyB%4`ɠR^+1QoNJ?ֱžrJ<;lZ})EId] <H.%*ͣB(.Rx*Qle˔"RՠHus/@oݑkRX9PR&| ly}s2P@y- OS0>TJA=%\.Q.Yg7`5;B1l̊XrYHrzuC>΍ ;d٢D2߸{[' Eug>,~w*O.(J&%qغbj&Wx�9^zܦZT^'VNֳ0ۣ_2rck|hr.E, ]ҫ_H-Ia+B)!=7~^GwPDƍ&Ǘ^ڷwt kɢ8#L3D{:77ӆ?!$b&(ȋ諅#r5O>lIE%SY: y\a|r6`ȋݟU݃Zr$S;;q˕C]do̟]b8.A{M[I\KˌL$j~–=R\ 'ogFGmyg>դ>o !7VxR3jc$ wc"k-sSnch+W[H bE;Zz:RxF[SUr)Tvp4.gpHhFR ր{ʔ[/6t!gʆǷMS2^3}tVޏ27C7ouIi]}-GVˬz:Xzk' &%'h69erĻbjl+v-=`G5yRYۚEzkNkm2X10Ţw|lI44=Ciۭ̒c9D~PoӃ2K~2t;!'m͟@aM70]T39#weE6wՔБt墜n-Q^2Q݌aPITPJ_Z+<f*l=d#+L[H6+D(* S%SW[DG\q抭VIqiڇ2nLd\t8탛wo۹;Ìgٓ^Ds[$"~זG>hOtߩ 78F<U[1> w߱lӒኚu_=l5] geEok#|p)[s3g|wS`* M^ld2ޖk pۖK3}tJ%`ڠ1IћT6ѯ_䅉ܶ0y-=l=LFZ6?!#S}N|j,ƶ~j9a|yQd7,/L:dMRBC>d<N^[-i&_kЯc3[l-ĮrU牔9L_dٚn`fz,0dPCK?܃q2l g7{- ]PCdԔdĆ/qWOƣ|ٕr:r&O-'G^B5bW[ YjwmVԲXWJ$yh|첟Tw]lYhߵy~WHv ߅4ވkltߖ=:Pxz{{<ߟo[y6ͧBNNWIzFt6b6iJjH$OzlLVTp^/lĒ#Rel>F:}iTE۵ A#yf5^3=bOi\u7|Ԋb>!l]N?wOVOM;>qjY![<| ";UQs-iz%cUh́mѭM̿Fz,39#UoA; '빷]m\#\mY 6TllӒR-o-e۲X9qynnT5sM*Ӝt7UX6bKSmWЏpKr|#' GC\Ο1&)k܀!{H@^,h\QGх5`r Rc[A?5ou}*ߍ6"^o.r넟4<i~Bϟt2'?i פ@aM7`38#O>t2WފRh{~TyǛ7]/,z7}}} V-'/lv'P|FtԒY݃COUJiltW2وTw_,dOrc׀jW7 MV~Z˛' {ZX+;4ڒDs۫՟]9}33g#wIdm_0 ("j%.VKxԴm6 1d##�jZ>af99y<\$eRōY'eݳ$lx6[찫y0?vPm۬'l!!-!r25LQkop򵷎?;K+Tn7`dd1uϨ̷(D"Xtw/UaGy ^ b5i܇w., ăM\A:0:A~"bvG�~ç+brZNruM,]iICeq2RQyӞ^_ݐ]u{9[eH G+,F M�7O(iN8lcByFA]jymo|"$4 .=[qsc~ Cb2˩PZ6$>/˫sst |+L iYC2T"u_m, pYHHK؄ Cm!=+;u}lL|6Y&PPgi~ozO#D6%=гLfk6b~t$Ц6cz "(DX#�? <�qϨ:<>p*!̬vBu~w>7Z{g2~' A~�t47ԿcN8$̬vBu~w>WO]9f1d~&�?~ $'�VjcfFT*ҳͫnP � H�?������$HO�������?~ '������@ ������'O A������H ?������ $H�������~$'������h~w$d2ΰT<7Q~8QǤ Kg(֞EZ=Dt1wz׬ | ~<K.;"8tlFIQ&bϹd ������''w記<kDoہ8JW}ͱ~6M#zq޻/cÚ( 7N,4EMiKF}'"j 'BM긼 ������OOq2imoX*ST[Oz.GEE eMzB"!U1jur'؟I?n~Y{5t�{}r~yNZ4E<m!TlP>V&=pCH&ex|O]j\uBnk|8/QRj+.|<`drdR"z@Ue$'&Ī.Z<M))) qI{ou|<X*RAI1R~*ПnAIAi6 'O�������?}7P|w;FwXB|bd'4,voo;{GX|05r"dػn^?^/' ؞zj-j/Ovs2nZK(rq|4*{zKϔ&XX~2hT'×S(p(?F[dTLݫƎspE&ێ"]d!Z)xDv%qT\NUt^enOOkˍUj )X^T}$-!Fa4?Zt#?<<Z((ϚC]J驋OV؟D-Gԑ%ޟ.ii՗ ȫbuk JYs?7ߝqF2pK�_/ska4ܵ2DqWpJLZ>]/>^*Ƽ "X#Tdzǰ':%'쯻tKgRv+xkzT]L$W_=E"`z�c7vI<$A\ǃC,?O%^x q ~;#O}e oqzZG+.BTHHk]s; i!&9/x7Oxk*8Oj tB'{NxҚSg=il/#fi}3\]8Ws>5Uro7L@,$l)n:pѶU'$+=$? ?7DιATdq؋I^XW.˹<q!Sk#6aZ,xv껔&.4}H59hmFQ);Vz} gQnc@1Uq$XZ%$9rODXmr/=W߶6gD'^[Uy9ERkPƒqSr eR"#aJ6àbS%?ڡw'kz;'d%jJנ{"Q q |[Ё!oT1n='QyQ4秉 o,b\E)ƿ=HI%&N՚JxSa_㮻Vޜ?(ryp-i˥ur,,{1TCQ+\Y.C׿UIƗ"vP{%;;Ә8`q"GM:#VN;/(IRm1Ko,$SOT\Jnw\#!ĚjBY$ d\$dn7lvo/p*MYt]B:j5+6z5D}J;[2MIqm+Bz)z1;|0#`iKh ߹8]Xoʭ aWxkw~ߐ'Peaו ܨfr@ }}8 4oΖOd_ͥqvVFLJ46u͊'%mG ѱ{+X"THѩw:h}\*q~R!?;?'ߗ|]~Lexiu3t:y5ho/[P>_EJ_ݒ۵zL26Rigږ]n«:g1ߊ?|L/NL,3Z+x'ϦFTݙ_q]KǓb-<9İAHd[cŸ1dsԼ'{чY8dȵO3/GQ̯!ktB'oWaR ݂Mї˞.9 *UVRu۸ힲIe Y"1JcNǚYCBF D@ڹ7C&tn t0?y1u|jG+Dҵ҉b\i֤<VGiʤSW٣OƯw_nW Ce]v+sU'[|rKf/łG%'~\c{P/_~}l{޸hmgv<ٟv~lDJzybHù{+ȍ&֎Ozi@~H+O,y߾#UEߓTRXQ9z]dI1%0ID'HԧފtU̻P*"F Hp�5hCY2N q~J'˫NRڼm`'+2ݿ}9k蔍8ˢu%-B ?/T:FG^/\L׹onEF&BbxLҷݺ7"#>+:%/<!R\WnsoZIm߮F'|)e*8.6Cn g}C«\z$"H{j&Uem12yYzŠ]OnȍF*?z8ݿt." Mw)XߢfH&e㨌Js٨6fĺҊ悅\F{>m\>H0oƿ3CBG3 M0R|O-" axON8&妼?yjN+I<*JBGGGNuYWH0KΨm`jH3zb $NTtvQ%7/(OV䦫(!/8T\zEaC7~LF&s7ԗaT)#9&x_ɨ )a8j?טr$fhqFBpE|}P<}1�?̟\ȵE{[XẠѲozyƎ&LFE'eq#(v ¬T2K:k,k(婯vOI$4MKS7m ܄џWrM{4X#tGRkQFb\VMo\/Z`)rY:zeW?8l/« Ly0RDwz�B_&܄nSJh'nn7<-d%j}Ej>)ߎ�~} W@d8z\3ڹ-" axxH?L i?>ܷsfZw&v2sy#|DJoƭ}K}W8\ zh ɘxW} &TK~%~ u>7Z<a3lvc%:yFˤ*̟`8G׽YCdo}Β\Ο"U8@,[2<7^ a2 §?}?v҃ &tnT ;<:Q)l;=.U:q- ܎i>!`vH~ΟpS3O3R; E3' awx'@ߥZuZu?)bӋיs8<wݧ5kq%ȳZCeͽ1")ž׫^gg)ttv+1ouMU<rH=J㩦ewIe(SJ0<]Jo|-⍜ v޹H|1T2ƬNjgaɏ�fk"Q~;df \AVϯ{ U,1o u~> L0r25LQK y=]r! 7k&C'3s}FeMF%S`^c9a6"'Hqj|\xYz-9v1`"Db#�H?4T('-޾ص:[KcG,*JqU\ҁʺeq2?^a1%WhO]eG[DZ.iZo*hύ'kbeD4Xw҄+3GV\ J`t]Kݾ<%]=JSӆgJds,E6,]_^;T֧[];3E}֍|vQ[K^VA:S/U8@,Sy_N#F  DCzVvMЫ=r! 7wyGn>Y r7=гLf5W~3b+6HJMm,Ǖ!cz Մ޴*bvG�~ $5n,*v!UBο4NQN&~Bk/LgH ?1𺳔=N47ԿcJ8$̬vBu~w>WO]9f1d~&� $Hib?l�v-fk1JB-=ۼG�~$'O�������? ������O@ ������' A~������ H ?������$HO�������?~ $'�������? ������';<.0) 3,lv'F#H*НH-{%&RJMAi͸8.Uɨ#w{+}2eX\ X[{'[#ɟ؇ì~M*ftrHk۾#gS4J4^HO�������??{@GY{&zQFQ˥;75< ޲8vNHϭzxq$:]JQI4OTo1՟hء:9rKbm\")Sװu ������'['8趕=}tX*SOxْh"d˶^bZI*e_1"naI\fx:+uORљn=`ڮ㑶<DBDbk^>p<'-"HBPGb$A2&f𸽖VfW񓰪?t0> 6pmǀMDΦy eRS\q%*#91!Vu: ^N)bC ?٠$q i6O�������?*?軁۽C6:;tKUV}89F`޿~!˛E '52{C["dػPn^?#OO mZK 8LS'nvG>XȐ=8~fQϋU&$Ҳ;EDLKɆ/ʤeMݜZE!{չmn VP%qT\NU>p*Ǘ ~^[n*TS8N,\nDqbJ&:kJD%-m .\|u9\K[3 PL=׏#SKi9R UJY/p;/mhfه-vl:&JS]+K$zȤc!mDy!Qzc^ȇnZ,x~*~2}Q]6nNtz:0w,>XY&JL''Oz3(OrHvIqk]D68dؚD?ǻbK~ٰAej#? z3ԕBbq9he oqjɺk'[k<Iv2?1 S_?OHV99^x3;p|y9&z=ޯMxȿ"O^kj6U8f?b_r~D8p'"99H,{>Ыۿku9<"r.w\ȔyNfłG aW̟LMF(j<l$}CtO.;q, CmXW5DžOFڊ$XZ%$Yp=$S~ɸ7.N ʻ!l-OOԪ+֢ f5N-%>S!~›?#@*v0?YCؓŗ~]+mem_H1E1>PsȜeLk CtJ2Nť*ytE7<508&cZmǍHI%&]7EW[fZysHõ\l~eyG^H`hh߼Rq7R\Y.Cd}z _(&L/E ɡFKvv1Iq>j5.+]vtFɭv~m;_QRW>%ncBfNG*C259ՄHJ23t#dn7lvo/p*MYt]B:j5+6z58:!#v^dRWff$,Uݔ6ȅ܊*jvGm2~ãi$OZIe]WJRɘ;'O%GIr;6OXu4l񓱇gRz&8tje2Dk"&\I]~o'Br>mĤDcSSv}V??9OBVΟ'_ ^Z]? |^?n0 KS" AO6wM{}"2[5~%]elfITi QXs;><+@xX*L۲\xU@Z.hJ_ݒ۵zL+߳)UwW\nRX˽+/c#Wf'&BW )tRWQ̼�(U+Nb߅ljvX|vy9_gPƝnN*cجlLiHe'BV/qsoG܄nQT9'3ΕO7j|%HB:q9^R:͚g"/8R2ǯkUܮʺ@ܟb{VF踮U)d=łG%'~\c{P/(q<T<]>Hw/O"'e'CwُFO%oz?[9~r! qr؍/z|f2*-Xsr{Mۥ#dkN]gv"XOWl'Rڼi{ z(~\"7乶:N9^MHF*r~\|yl#Ngz;{)Źw={7з #"FGׂ/\a^)|1 $ 7NeC6oi&2W Ɂ.֮Dl IoyUK{㉀Vb)cZͤ-F&71 O@Kb tb*A]-jdRz?"IQm(1u)# )M}l` nP?(ʏe|t'̀WTK<O'M rS?r؇.SSLF 9;"ηT Q?O򓱮+:uNoHI> 5VGS$IYQ+rUWb5t_\Mǝ¬>?ӳt_ 5Lg'BչT*K(q2v ~NIeꀋp72:e_5hbZ-#tG:02-,.oGF}$}J"~iWY{CaV\F%l~WHrr!Fb\ɐTMoN/6V@qYze6D p٘هlHeYk�Bf_XxnB7 SNWq47Q0?Z-JT/Ԑ/8Ridsz_qqTGg݈^-" axxH 'ǟV:ژFL]G0Lb-gD'[2jnoE"7N-`B{#<j)Jʊ_껚(@HH2)1 '|]fIɐ:KJLr;j\Vp!1 C.cy)Ox>3/=MЏvxt�RZOwz\"-}u^[Fݵ/x?͟C?q<J>4!hBDb#�$H?SK_.=q3VVo_imt.<b؉f3#% Mݮ U$ޅk*/k'{J(f]U{F"]m+sopLJ,j 뛿v7VT2ƬY" fk"%ǕΞ_o ~jf71a4a]獪]VY@B{C@nLNfS|2J$ExYvD0 )?A+V}H~˒O<h3'" a7x'=Mߊ HKH;O* TіEvd<RQRTK\ݐ]u{9[eGSy_N#e~b)J q ydDˈH.ԅ|B3ڮH++c٘0MMm�!|!e:w8G)֧[]",쳆%d$Gm-yZELCZ@Vp!2  DCzVvM~ 3 (}c|xoͳߠ7/**ʻd=M$0 Fx0B2~Ԕ_|ؤ#)6%yW+sD]&$@DT<H �;s!o /j'T(}'sx?`&L�~ $'�NGsC0Oj'T(}'3L,<{ԕcYCg2~�' A~�8l/?=fk1JB-=ۼ��? ������O A������' ?~������ $H�������~$HO�������? ������O@ ������'O A~������Ɏ'O} LJB& K#.J aFZOmQ|,P[vYs_DFH(Mp)X x~kOH5nە'������O~T~rɳ Mt񁁱~6+TdRŭ[X\n{b1IS:.!o 'jnno-�?�����=N&-meO-FOzJ~l"TɕwD d .zn]UFrbBu`r~yNZ4E<mߡYߏ*H heL<ǭ7AR}O<ۃ౮$ .#|^~›OAI1RV\l:(\F)5o\<')^_ Tـr=VKeKfrhm:aɤ'$"ZKκFyåZ){G%i6'O������~𓉾QQQ{|mtzwʦe:R](4٭=Om}Z4 <6ז NlOm=Xx &}eMnvism'-11sCucvXLOmn l=SgC͗beҲ&$ {W-׳u�B?orZ{n֗J1[lJN@W??$˩CVj{O^[n*T#I,\o~u-Wew#eQjtL/`o.tJLZ>nC|.iivɥTFyM#"z|9\u#SK?-n3B3lWw;N=!kiYmEm eѫdr[rka{u,<OOƻ/>DJC)$﷎m'׺Su$z.J"ԈDI$c}WC_oCR<QL vߖiD$H WN{[w֧F;u8'ztu}B*N1Ʌ لx 1nEspOj tB'{N:zޘ|0Ro"9=N,{>ЫۿCpBBؗ_\.|DžL)w7獶"7z_Xh{}.KrMͶ4ӦFv60JO :ױpa7x5b_? 4}p{Eƺ1<^>V%bj.Q$ɒ'1\n<G 1BG3"QǼ뎸 ##ll~POD򉔟mi-OOԪ˥ f5qV@DȀrG-q?xhd'V'~+ 5={i^uLHr (/=xS)o e*Ru Eto}լHre Ng"\+ocr<|suEJ%Ӕ6/z)zqeYH pJkWqn#qAsq3:8؞l?<*ԣlRr[leBHI%&N՚J508&cO)xu,Iy/b*it秉 )ekn7Z3IP3qYG*FM:#VN;/(IRmZoފEE*C259Մ=^H`hhW276ru,+<ϵnIF?+bͿo:ꊈl\xV*GlcOzV(Hcko?b nL|"'Oz1)DAVLH~[qA!>V(8V!1!?'_~vxiu3t:sv;+-~=bo t0?y1u|jG+Dҵ=lDs/:^/I)ʀi֤<CgSS̯ܮI{\?L:Zp׏~R-xGƯͬ,a{eP=z�#t|eb#^Cev:܎  <+ hpp86h( yRigږ]n«:LtBk &-|Yy[6sΠRe%U;)[TưY ,*Rxc#Wf'&+tU A:VvG %X{&˹wySn$Qu]1?y6l?'Uټo_H5sV/渄@h"`^/HfVq|6Oƻ/H1%HID'B"$dDDS i8wwI87dyV~",`,;1o{ y}Ck蔍_5'uyN3T[ԧ'2TGYg8>S٨6gFI ΕO r.OH;9ƞF\_i)E3CBG3 M0R|J'cXzrC62FE?@ N".ɼMI~ /$ g}C«\zL4H}IUw[Lzo!d[d'6o-@ȮK t,ߣc4 axON8&妼?AX"]kdxr"7]EL|:vޘQ$h$>^hL q* o$MBcw i~R}FkH52ϚC̟U_�!!#'" 5VG#8cc(ݿin$( Ww ~>]Ǝ~W'O*_FÖ<u<ўHhǽG͏bv~%״GjeOVH[ NI$4MbӟQ'\F&{:YV y#QORq+H" UWy#N(#g_WЧjz9xu*e+C7p!JpCȶhQ Y{CaV\F%xٕ cs?7XGi<. AO˂?6~u]m<P*=_kA,E8`T Ȧ;=.UG0LbuDue$յl(TK|p;Z-\my }Bbl2sHBި 30"qt-)51rYRbf -*"A\R抖 dWMܠcˆ#�$H?SK_.=Յ>Lqyw\[3:aLgm2(Hޅvesᙑq]g rè+JwT˻prj|oՍ}Yz-9v1ݮ U$e77jm81^EpSIʤͺgaɷ%Iq K5?60?vP۬\朗L ,:oTZ|R>FcWo  ADzK#�$H?4TxyT/ͭ6Cz/fN$0UW'ۜc)UF_fogVrByFAQѥvmyFl&I))̓2?7rubYwY؎Y })˼/agDO(iNxPZ6$>/T˫ss4O13XgX2?^a1zTaZR ԙ nBiڄ Cm!=+;u}lLrT5oEV]?>Tn7˶w,<H hZn=\BdCsw,?' A~4gE {.GsC06Oj'T(}'X~ C?~ 35hR!֖m^uJ�a!~:h8'O A~������H ?������ $HO�������~ $'�������? ������O  ������'O A������' ?������'O} LJB& K#f)QpJJk~8~ee]̝5k=6t9c'7=Fb_CmYL劉ͥJ5/TN_'4z6E(JxX~�����OQ1y֞޶q~B+g2*_y̡5QopXh<!Ӗ<R_HnM*2-n{b慎͓6@*iTTMgSѶLu\^{  �����dҢVbL= Oz$~& ޲be'ex|O]j\uBnk󄛇(kϹ4*j逌3a珶+ą/5ct[9t=*#91!Vu:0n?]/'R}?ڮGFu9)1:㯿Ȩ4"<gS1G6p! ar~yNZ4E<m! a,OgI 4{WEM#RD#fQ%i6Uy Z%@N)b2F.ПI+������Ov.?uwFwLFm69,&.׈K mMt`OX7n%شEU=[Y1P%Ǘy'&R鍞mRl@0?Qh[{~h3uylmX|05-G~ǻ(~[\zgb..5͕h݁[,^PpS[O%VmeCaz^a8=u5ĤUUӈRGT!iwCH?U{ 9Oz;!Z)xDHZ^v ?q-7V)TcK.7{ݖ/~9oewiAAʤ2Rd8?^?L-}מ7"eQjtL/`o.tJLZ~HITONuR .n3B3T1T??v;/mfs"=W-~IKܖo~* G(1iw7-<n??タ,k`}\yr^x<٩%7Q{>P棃;{(@1TvF$< ^/קw2RM_ ?ɾ>!\F&q׳|Q,\ >T"daDJ_I'EyjfotRֺ݃(lw3Yv3rg}l80OiT$4 ҅ y#T_ !~+T脊կO$+ἑ$Ww$ak)r.u|Xr]η/[nXo"9=N,{>Ыx#5_~mbţ_X~{Il:pѶU'$+=$? ?-~ѫ'/\.syB̻ "X#COM%3ǿ]d5` 0ָ<6A[\vKx.1S1ZU*F&|۠kz䚣") a%#m"rUat?fcb~[\Dzv3ɀ8L R{sQCE]A{oӘv^[U$4 "U_{lxYݎ`WZ!v?Yر?>'/AxQb2Ή寁lJ(MV5y4q<?]AQ2@57ŗ)2gSZC {ݵ<F!ˣ͇k9";n/=xS)o e|"UPAG ܳS$Ðj%Ӕ6N7Z3IGǃR=dt |??\Y.CAy/w &L/2XBTvtFɭv~m;_QRW>%J2Nť*yE("P4n e{l\E)ƿjPt~276r«:jV$l~ /kp:uaJB N Kp^ӆsq3컰"ޔ[1h_{G 7"e}ɓkH_z}:&0! 4oΖOd_ͥqvFLJ46u͊`, &r~qa7{ڷ_~'wd>="~R"<ɤgPX"Ҝ0]Dc-99SHTI Z& a!i /~yNG>ވM0>5j+2ìt?Yx(k,J;Ӷr;^U$)F^Ue<-uJ^?Rug~v-5O 5Z&X?I`~0c\Nz;WRk3H955 ^!u7z#LJy05 叄Q&u9 Uj0φ"]d�r8Gcgp$TJk3y9_(PW͒WeUib5|AJnwS:ah*ӱv|xVмE$/?q̷bD_B�B ʕE!s?M.KRBYR,W)&nW Ce]v+sU'[[rKfj<.?KwD߃x9~.M-ȧrTY{S*|3 0Bފ^3}A)7Oo'?J㳤.\ " DQIϽ" _Is tW4dO;z mws? y<r4j!l^߾?a5ilH`l"M#P`,;1ـn{{3o{.߸t|6d򪓭"DXZ~v?q.X\[El̼k6eE6`y/{ Dg^ v{)ѷP`EF&m T?g6t&:X)|]  Lw)X"GLʐZ8 ,?.O>p=W00EG ۪^E`one*zGq+ ]l'n HzIUw[Lzo!^1(.x}דrみE$?AǴٟ-}d�B _:Mܶ6݌XJ$5, n|!~ɣe| !l |9 G%'S&p)oOof%&Cqe-k!Wߥ4x7]l|+LF&s7ԗaT)#ijL&dՋ-wSdxBc$]Tɍu]ԩtzCJ/m|>;q*Fk8%WFGOBAHSYe/ܕɁ֊tE D3"'Bk920dUPR>KY%gU{XcLE(K4]ﺑP&\_%$-T|rqeAa k!gלzB'<}RF71G9%&LJ"~i7)�ӿKhG͏bv~%״GE2rLwpDZe[BTHH~KiF˦V oPͱFb<Y3X?\V*E ݆(@btwռE$g Yre0t8!ԠhMܶOVz|W$U^�~; W�?1\f=.g 70x]ޯIk:v`Iu9ĻsjWg9^H$njHe)Z "dLã:ݱOwq6<a3c%:otMzw*9E2 FfS÷J%&KG3* 3.%fVw8RH g~B"1\37^XQD2 §?-] @AK/ mUu- ܎iW5U O-?.{fa#�?/.a\~vVO?}iH;] 񩥯_ߞJ}e?埉s4HW.NjS5?{=r;?Y%=נ^qc@*/k'UwT˻&pTa�k&C'3s}lMFQ?.{x(ŰX ό, @8mEzh9E2 C{#)xq5hϯ{ U0fU鿯o"DvSIʤ޺gw.X"7*f|F?f7h C=|&I 9r25LQkop5k3v1  (}c}Wxom+grèJ! R\4_C;^AK&]L-Aot#�'$ EW*崜"܃ }?i,PQ8NF[*c0ns٨ID$ovȵٳ32=E3#%MӉo?^a1%WhO]Fܪ1u<_.+0\Л]j^Dɾ4>~O9RTygҽ~&vGN QP設%/UHxW{J!]Bs}yup>ݲC53XgX!lO@VppdSLY}9N8y28> 1Q6Y PPV^U'|V/W)4?̇؊M:RhSrqe~H~$ "!7ma<H o3Qux|n[fV;:?D;A 3?gO A�d}bgY}}r>+b;L�~$HO�O@ 35hR!֖m^uJ�O@ ������Q�!'���������'�������?�[~������ ���~������ ������������������'��� ������'��O�������?~���������~q ��������'��OkˍUj )X4#K%Tt\IHt_>#0kq!pIKGEE{]yWӆ**gqs <L-7v-WHr0#?V{.w:cVGۧK[3 PL=[Q SOlVBX~wWFf-^g՗ے[ 殍%s Ubd1z) A*Ƽ "X#�?��;脊կO$+aO\qމe‡7}ZZ0|1'xq(@]9B FZKΝF{w2P^{u.}ĊGpX~{ItVa˰aacD"{\ e*8^~{BNoA%ztn/\.syB̻ "X#�?��; ؓŗ:Oi7'*Iċ FkwdԹ`3N&);E,c^k(\a'XӜ=<]M(<QxJ(MV5y{71 \m>\˅> MQm܌=P2ųQX՟#1*%" ::F_UeRyݒiJMk_NO1R>_BΕ24IQ>=GDU69?MOW)cTX^ssZ=h4&3gFzbؤ#0bOnk2$)_߸J2Nť*y΅(Rx_�!KJ'!s2.x-N2돎T0kZH'SfEF3'7(>1;|0#`i+s\@CŠxSn xEX#;z8jQ2뛟OaeDpCEs753Ӳ4\ESr WR@@v03^O0 w={|[{\yn돶\]jFׯR!:CҬ+lMqn,λ713K٧'}yچJQD;ȼS"<-<iuZ- >N~q4Ԇ˯v݆+W޼:ְV{Wo ٫n~~Z}%&j]E'nw9?+:髿WOLJ'zOkeEWD>l'im7V&nu!~]sgL@LxVs<zٴ5)"bz̼f Tƽ4JFTiuNjҞ^=t׈TvTWi#^q|u1hS]>r5sFmnVj]uMʑ~tα,1{Tע1Žڐ' vӣK�:4baWVTx:f8#5ژ>ޙ 2DAiq|޸noLnhV>7ImU S}j4!mC{+@Geawَ*F>3W3<6z==>uaaOeVnwulMâ>OG&qi2gK#FMkLuZ]U3Wm?:,CWQGni٢6zv<p:TEiqU@iOp_kDniJ3vh8-f/a.HS+m/92y-W77YG/ǽg0g*mh8%͗麪QiGxFz ';?*[n?[u>]zS}3|]$FŢ!O,KVV6ޱHk~Ylhc &Goq=kBIiKطeu" IcYW)Lj7ڸ]i[:JD|Q }SvdIMX\O׮tHlF{uݝ9a˝hU)CNlbQijfm*�"*'/}OV/MiҜ#斅C9FrYɑ+..z%6dE1Տ,#s8ݺ4ΐW #JG='�u>8ע\grF޽Q{G FE{i5DohAo$ڈSwrvϑgFkk-ŚW߻7R]KVzfKKd%l>Q*y`Hݧɗc [K_7=~Iڱ}!\1ʽ(_mdt}E]{`t*Nj=}+4{i◓eOisdfGFs*~**ć>rG q{ΑX\OmÁ9{ҔQqGx6z O?$,㒆{e&>!v,+05[YCFwjЧSCcܬ5;m(-N7277W: w7erDΫ8Wo30#Uύ“7ZeutM'i9}c.hotMɍ/EoT^U-//7SX`PtwMz>H7RZ⟾b|\}Cbx=UuHlc<4Z?,}kƯժcF~m_O pC;E 7q˳ /-%{L6P (9n̞wW  ǧ ƔWTLAdFsYrW$DꋛZTNp #uirDKaYj~@#< =@w'֝k3"wԻۿe0]p>i?+;U;C̷,N7rިLFR̸)gojrw7 s}sWFPcܤU_dKY%3R22o;ܯz [N6+}ڽ7UX3#]MtR--fEDu SҟUyz~Lyӓ+pnUW?gRL^L#;GQdXunQjĔi3g8BDd=硿'x,&;GiB9r>|: 6Ls͠:ǪƩ=:OC.Lb&wzUpvƚZM jJnRU=Y'�{>p 9bY^M5׹<K  1<M;?�FQ4D,;9E?Xu}Q7O �geyN-%UyzSB1K7kI'|q ��'�'��|B>8O������O'�'��||��'���@>aO���||��'c� �� O�tR\\\PP@>���(~ߺkݼH}p>"}͎~V3M~5XF1kۤe3ܮ~Z%8l4`4ťeݻw% 6㣬EWI愐GlG)Jk+uu:ۖm!ewA'Eޥ uͷjuϮU{h OHknc :#< =@w'6%W߽g~|Or>=1<qE+Wc ;Saoi?х1Vwz;T.lX1v-|b-64zS:]/S[СMZzkk4Aͭdynal蚛f˫"d=8pjo1e͖fWSM-ǺttGxz ǕO !57 6jc=|kh:{ MDϱ: :sM1}jʤı/W1N[kDr|xAׇV*T/s16޷{F.;qke{#rNN2k Q111j]wIqF>nGlO2?mzu^q (rmu1{aJ\6dwe~<:\ "ۅy@>zX\ʒKͨtqX 2hFN,-aʜ]v}ʺĔ]Q֮3&'&.:W(2EJ{K+uu_kז;CqP&;Ã-|\`촄y<;JmRr0-,\)0Uq^Xu~qj^1Iϯ=FsQFe7UUc|[_?g,: w[]?Zϓu!fK,"^+oXIHz?<qC^g"z%{KþǤpL!m>jO,bo67Lܐ_Oh}{c A7R,褯q=Vc8Xs3G 6t[-fWyۧH뢴nPr[_elښ1=qcf^^rvk`ι\)ߥtތj|:><a{m,<ÎQIt+s.r4t6(\voW9}iA6(xPvKSɑkˌ)G+(P67+IKc.P:Mr{8Df,1{Tע1Žڐ' vPiGxFz nOESU_N5/:Uمт\[+ޟFzTwT n;q߳^y68*e6hum_oCbk|P~bwoRNG{# z0v'|Co^۪vI뢴 TcDžy?OE,w**(QnJD}ޫc>F704:\Ftp!G˸vVhҎ窀p_@h4Ks4Mo\+^.uLl q3XlWm}ɑ;n9OtZqsR{8{v{ s=QyfR>ц6 AZ]|9wPiGxFz ǕOv-ߨ +{ttQ?mp\z#ם5ju]&8ƍ`(tް{=kBIiK0iI>٭S9$hFb`t<޽J9>u%S&DGkg ->+J%=^؂iՍ*uS'K]_l5ľᾬ.T'5au^΃ -*ʗWUvv[u[.mo)^sXܲpt:Ǹ9+9ruťqQ~WoյbĆș:f''vO&Rk$}s16uai!u9s#JK�t?mw}qS"㗟tm;=xt(PѠبnC9_{hگ ԛ|^۲AF׳5y -S,w-ZmɛRĵɮ۷exTݡJVj8 OkZ+k;tµ'-*ʗWUvv[u/RCuqAtRiJ3&~9I]vV?QZ;Gf}tai.=BMtCGj<vt~rvnϟ4V qޓTG @='�w>qKݳm௵8<nF⬻qBx_oȚO8j\sj])ѥ꽑NhϳlwoID[˳ /-%2XN{f(鮘fd}zow+UDn; 32Fl>-}sw?j7$'S.zuHMۛO|=-$"ùQj%*;g:䈔WerD] ;ۦKpW{Qp|0hL9zEŔOh4.!wEBtZ()4~hm9%?V،,j?nr�B@>uڌ}pntnQLGv7]fWFPcܤU_dK_n%3 Lի΁Kd(",zݮk-U&LL6s֎C+dJt7.0#mV{mҊW@'*u1>:\a\zG3tMsfrd3*D--fE:fH%buV?gRL^Lͻe<evVDd$ŌK2}ܟ^?Q]^co4<JO5jmaZߎ;T?t&8]ӇLkj5A'7)UӻJUUXzgG �ey5U:OһC{vBũtC7OΏ~ A>@>};wTL/Ǣ<K#s~NO]5V]oӴ|B>@>_j<S*OoJ::f}w4 '|q ��'�'��|B>8O������O'�'��||��'���@>aO���||��'c� �� O�O���q @>~ߺkݼH}p>"}͎~y)Ẑ]/|dɁ荮/-Oh-ҏ[kZ}{eCN!Xgۢ=voc RsjD%m?>P|pjrbQv}ޜtϭԯ(i蒢X˷͖^]]*жtץ.ҲSTWoc00H<ǾtpGxz O.mJ2į.{rg J>vnS> J6hʛ[ϴ#t cC4K?^^9%-Zw\oŧlF:76fp͏UD]>8 f?vM]2tQ L/f?V]Tv3}?#_M 6n=Y'�y>]sN`68|PZ2C=(v-7KVI\mԧeq 7Z=)Ψׇȑ~[9$M=Gt/qң?OM86\wSzCEX﷖>^Qzm1$|~kRu~qj|H>&)u:)9`c D;LsaӖ}Dee~ j5M$iTXelA'V"aʜ-* Ƿ7z}1nBʟd bbbVպJŕu) FeJ1cjrbBs¼d}F=VT,e%p1{aJ\6dwe~<:\ "DA\25Axc'vJ:(ŽJZ^niJ@kipb~DWR(P:Q(FmnRߔVUuGx&z nOY/|mŏǏN;wmcKK%VP='G&"^.3mGtŊ5lkKLqNV{{Ƥ򕾉"^+oXIHz?<qC=}2-fsx jeQ? wdvOKc.P+m hZMŋ͓FO\Ұ1T&yom"[W-<SVS,DFe)OXC(G**4O~z݆+W??+:髿gJÎVFuuտL@yV-ϯo6mM13n/950(M/ҧ~q񾽱z ;0UZAvW(Pjd]{]:b~Dx@Dpֲ_ܛ kk+lG X='�u>i6OaWVq@KӝeIF4/*t?:4qx8n2qR  2Xׅ?&Ξ=&|gCga\lZ=0K M4{oiu*㊼6uv噹:*ٗsTk5MuG51=M^v~IzVK2{ߥGP{ӹHe.tX{/>J vEmpT )B)VVJҖU"b2W}z7:8G`c*J¼ֆ-;X-*(QAл'fPv~⪀R#/u[ =ʉO1 m4GfwӂK�O{8ԭGM7ۖ^qnti 9Λ%- GstoYɑ+..4_YgLc -(Pt4svX6\6Սwi;]i4hW Y/*Rѽ7]\A>kEīc6:gޠǸ1 ^wZ+UڒF,ػT6RDWA}sO '-9rOdkT+%E{RVoF< ^y\Ey48dv]Dekw;Zoe( (5ݏSҔfp/QN,=܏|"c+n/c0雋٭ K ϩt(XzgG �D>6k$Ή/ٮгIzR/v̸.,ХTZrГ7+^Zg3ƒ,_\UF7MZv*54hwuuKݿ--;;CQR}:?TX}Wj#n`>q[U6R_T޽KTVDC9c;|T[Z)rakikvijfў(_R/0-lAiW(]?kd{J)^ڣX:}@OTNJ`cMJ~@鴠#<=@'οqIý{ֲ [Z~Dv7Yb=}6$cTaјr{#Sf>YќrjcAQҝ! R'.S^hz#)g^6~}럄erDΫ #uirE= <|Q;R!wEBtZI¾qBx_Ov({%yCV|\e(,ž!1<q*ǟW=";*4眾Z|ױ]j⟾b|\[Zr<+}IEϟ3k7zZHD3,+ʗlM-YΗýJ:Jm.KpW{Q#X:w@OTN*gfdUvӂK,�=[w͈Fr7OMoǥ˼VѪ3j(-makKcc'H>ߖ9+h▜U)V'аv|j>3.is:+ʳ St^>CQT 5N=6.j07i'mhcͷG)m؊,XC”tYnk%3 ̶{{L|F%VV*OϏy-"hs&ńuq) T~Zc|t\|J۴ܢԄ)fqhuDdw~jd?x>dg(O,;|'' VcQ&>jwz7PK,�=tOq!=VS΍Ojڝ͗cQauw|OOD #�v]^M*c)rƪٿf?|۹‡'U|'>VXzwhϧDD0=|OaAoV}7OM QBG,ݼﮝK>3=|O'��|8 ��� ���O���@>!� ���  ������@>!�k��@>@>�� @>�����@>!�k��@>@>�� i|��'�'��|B>@>�����@>!� ��� |��'���@>aO���||��'c� ��` A>@>�� @>����O'���O�O���|O8�����O'� �� � ��� B>�����@>!� ��� � �� O�O���q @>�� � �� 0'��|B>@>��1���0 � ���  p\�@||��'|q ��'�'��|B>'��||��' ��O�O���|pZ!��� $��g@7'������@>!���� O*++/˛ׯgbbbbbzB/=3Μ9s7EEE�(嵴X,&Ub1v_Ita__@�1|{?L9}֭LLLLLLO$g-H D||D>!O�ٳ&&&&&SOE �xIMMɓ'>|D=zƊ>|I'G$ '01111O|"h42 '&?~|o )'BDDtرc&&&&& O'�'O&01111Ox|'q 01111O]�"H|D>O�t|?abbbb"O'�1'ӓ;=kǑ�@'|s311111=SgΜ9" nO���'�'��|B>'������@>!���� � �� O� ��O�O���|O'��||��'�]Oj}�� 'uuu[} f ��|, b6ُ/}}@'}z߰9ԗxėRUԋi+ߢ+3B��  444OlJd-xQ~ϿZ`%<m[V=fv⻼@��OD%ɺ 뺲_{豫Zq,uÂF?UO,J1tP߾ K]A4O~4iPY%9(_~/<tk%K]KI {fō<j{k_ 2俱RѼէ;mӧG*Zğ>7~[-<;j r+l51oKL++\#Ŭ^xulچJMε*�|'6͗|"fk/Xnhiz/bP%ya_FoJm\m$gˮ+ŎuoL?W*?_w^,VQiت {}Z6W8Y^G_D ~~o8Kx>_:ѧo7_nT}=yt( |?sYK+}?b-c�W>Qو/ ~ޢreI|f}+bI]Ť7ozwnU��O_gE>_ ׀޽}S ۆU'V9,#љm<y]GƼδG%߉2=.,mz>ʶRM}JKt7yP)֕?0G'lꁽյO[󩺵:OΔH >>[[_?W)T'1*Hye˹>[Tz.Wn+U � �xɿ?:Z\\|#C|~mL<9燸 `H#k #/54&[*w<* w ѿw!;N?~"[.YݝH~{X{ oˮ_[aC+k6Ng+O{>@`nID}#t{{ekѣj(QZ�@>d瓦&_M)?Oӯ ]ab$}~~bճsgMW f5WI.c\;?tfz`G~հ;$ p>umׂJƫ[zr=^t,Z'}Uh~~}]O?tAU��)Zvi\P|*_{<i0`3Mֺ=F~Tۯ+ҭAu[J_Zi-GqA.˹\+dk%KWZ;kWW6k=)'kmԡ|wM3wU,`z>3 ꛸e/UXm#QXY72}{f.˛<,r � �xIss/DK>-_P,WM Яo/1i.HtC:2G&ƻA:]XTġm q" vAeAju{62b]5y+-Cƫ )=znU ~a@@a}'#Fj?ݝN>il)88a V}3RވQXY2K {^*~GiU��O:q'&��O'�A@F>yRP@ � �x'��O'�o>�� � ���  ���O�O���|O���'�'��|B>'������@>!�Zqv�|B>xI]]V8;�@>!�xl6![f酘A&kGϜdƎb#tKoV)-tQ0e>׏k4[fcŵUZ8kj6 Gxl,:g/yLT`��4444;!!Ǐ6KUN;sjb.vg,ƳS]c ~hҏEW^~sE|E哎֪;:w|܋o>"�|B>']O,w>iCR>yبQrk=˙]ԘcNYxN.>)ƍEϞ6-%i\9&b|vJGm&ʜttS'O;)=洺S SCc&|r++rW͙lCâUcuL..Gf81;Z<V=Ř)^d}2.R|Hn]FOje1o(-2T'?yUEJR!+fΛ IL[U`nmGQa:]x7՛+'Ft!co6Gy8ڼt3lr%ɇv3ut RuqD{l^G:{,—M � '6;|h민ub1gf/p5*_Wa_ظe VQ!nMQߖ"5x-jRĸUpaICut˝Mfٻ̈M239b^FݔMLV[]9|b(Z?io5[}ōqkOTN 1:ߕ6;WmHB^WVOjո>1,~5"يuZHGKj':l7On 2JͨԤftf;WEv J9KLb[g}1U<'OXbTj\_An_|fueA)&,uT"|�@>!�|"HBn8E??ddY•O>kvԉq7Iƹ;J#9%K=VX:*ؙ |ueAI62KkK8hҨ](:&TTqeV7Nz2RZE} |9i6km6zsE6[Υ*Jk*SM5*Bom3tK]2Ҥg$K>y:VhmkQy*e\QZCSv[lik#5J=="ٔ徎*uv_�'�]Ojkky-)-x{Ғ_\qd"1;]S/Oܟ4)vj!#f˼C!K/]kL="[kquwhuEM`4W5HD 5y(wUB?g-9[S5,bZȥNM`?fr^+MJbs͖t^Qj+IKN;vQ]p֗|"[kQU&x Q^$;ҲQ�@>!�xI~C~WĴb2lei4K"7UaZ͎Rb.9{\ }3_ppz3Gfc+90(ڮŊ.VT^XД+WNB"~9)zլ؎YJڷ_b'U1x7i}iV}X*ܢX׸ccy9-'egeQAT>lJr_G:>|B>XQ|rԗ|b1]YK[l5whC/8.0|Ih䜼:1 <Ejtٿt8hH4FN96-H?Yġ߫}Lb@ Rp0.(jb 2ސTE`M`JqK؉ 9jrhqqaV*\o}DJ>&5W 2J7>W\JsDͻRnn5zkc[nu8r;^ʭ|}~:*E|B>ЕxQ=$fyZ_q1Ơ@6841uO^8mbTX0tdɟgMkb睸-ꋲg5jfeԎ$FSI΂)Θ>}K]#κ+f'9!j޺߬oֻ׍S\I  !>9<6%3#Zc>mKbb͘9;c=.ᱱ< QTGQ_,eЋc',ߔ)eQA)&,uTCUm�|1|%A�'�|"[} fӣ|@A>�O�<%G '�� '������@>!���� � �� O� ������O'���||��'||R3��O'�o>1gg��'�7f?$f~<xݿ$-8$?㯔+-4徱ye;EVg>z9JyUuSJzM��ӓO|'b6,[dm0=ucv;f6fozdɣTwz78M>�O�<mbOlޟ+G'=?A??_2dcoww׾-1ů4o}85߿k~?EɑEI#?a>`52o5 *"dRZR>Nߡ rTmAyqWţڮ|P}aCӿeIo ׯߋ/T��Ol6/D&YkmȋoW "*I0|z]*xq}^\%Yc1zPl>ٲJ!{~Tz;/ fQ[G,QK(䓁o'-ԕ,Ӿ=^g]ٿЯR;(Qm){'A^o)'Nҧ�'�|"O>k*=*=)pě~ YR>._,hK<w\<)ϯ4p m#cxgZz%=/ T|TrIEح30Wz}U\RGŏ~ض9~+*W'���Og>ypTg]gUeL'%<I ׯ ?Ry}?H'gW_2d{ v~vz~Ȇ(dO\dwFLj=`Mھ:2pD}G8��O|'bvYM=\3l$ 'iDFk z~r{_AumCc\իgnIeEfJHG=xG'*ezT[8򵹺o]Ycy8u�=}*�|Y' 5/r-VWY1~=8_34 h%ɀA65Z,axf7qY_'~_n+=~mcz/ OPP ]ϟ(ǣn)Jy'*ezR0!K*-6SϿ\v6�|';1g-c{Ƹ%fUU ~a@@a'o5зБѿUc?@]n7eڵ07 ¢R6&>P}i8K?`Ȱ CK(>]Jegl^5y7 нv@FFl.��O��  燭>Sz ��'�|*��� xV ������O'���||��'|��@>@>�� @>�� � ���  t63�� ǛO@�� 'fYl/1^>zy}I IO|+J M}ol^Y79V=6Uz Y?Wz1"h޺]&M#]qݮӮWoVV}��@>瓆_6K;}z(0YL7roݘ8f6foz[\Zʆ 7b~en޻g9/7U_=`V|lǛO:��|O:O,/Dٺ{q#;!C76[\}[br~"~㰠QñoȎ{oM#«c6TZl{+8/ԯ+EVYM;x㟞!+(哆KA*i8_ 6[}z=^#F Է+RWuo T{Yb`+dܼ:"~X ^|y脏/O�|qK>|ZgJxo׷=I Ay)&Oq9ϱ#~EVϬoE,+fMR_ҷޛ{f |/WM&[NxFw^6~JQVQ)8jV|N~Ralug }˿gRTMvY%}ĿKd6oIjWދ-g ksE�@>!�x\D%(}TzfUzR78Lv|]#,hK<w=Iܙuu7vEs W_ϯ~=q"'C2׫4Oj,SwQ<8[+dk{dLˑmLٔ]L;<m9ꄟ_*ڹ/TC_vTy�'�:XL{ʼnna |2 |z+COhm)-koDxڔ/ h땇9mZjwIej>{'קWX}턳W|w2d6lJr.b& ⽈SWG߻~� ǖO|'bvYM=\3l$ 'iDFk z~=-׷uCOdGO~=çWY/#!y?i4[|Y;seV%]ɎO\+ͦ,"_rdٷ^gO�|;擆sӗo9ub,a1q^^X34 h%ɀA65Z,ax?,owROJ?_mr ]Qz7Wy[~)0,uً'i}]_A .d?񮭩t_WJO߯l>QM~Yo[ڻ/?csA1}ӝ2d,r.;7�@>!�x\ٗ|"f\>yro?^dޔ~U/ x;pdC:2տwcIaۯ*~Wd='~[e_Ooդq50ldZtaQ)察&,bhR~b4oLު{]�@>!�K/;!�� �D@�� �򉏞|��'�]>�� � ���  ���O�O���|O���'�'��|B>'������@>!� �� � ��� ���O�O��x&� ��07?K&� ��?KO�O�� O'���O'�'��O'|��'���' @>!��MI]!#絷ߟ|O��?O̦}z,ޖ_RUW[u-&O� ��I==z8VVC &Ơ}֔?Jo^28Eyn|kK/WL @>�|'u/>fm?_pBy7{>U$^V`i4w;wb{/ߔ*Muś~5  ��@>%œ'z[VpQZJǥכg S{}_TUY9?k&5e~~}Lf  ��@>$SU5"ir^ۥye𫯿{1[')ǵ=_.)<9_w3`s&  ��@>y۽*{伒Cz "HVPW>1Eow*nm5.O�O��xImK??{d*se_jv~Yz̽v`⛃ ={mHb΋ٍZCkw"O� ��U}cwϯiuW; 68$42yCP|RvcC=}r*.,J@{ O� ��<��'3P@>!��� � ��  O�� O�O�� O'�|�#g��pG5���<y'�'��|B>'������@>!���� � �� O� ������O'���||��'|��@>@>�� @>!��� � �� nH ��е]>���� ���� ����O����O����|���|B��� ���� O����t|RVV&x"���c'<y"} "Onݺu% ���ǔO233;DD$|bĻ充/_&����xL$++"w!2H""x\YYYTTtU ���ǔO;v9;DD$ɽ{ĬUUUg'����G>9ydnnx-҇ "_T'v]jjjjhhsέ[|r����gϞ|"} "#"lҚO?UQQqI����x\xQ;Dx#IKKJ}}}uu1׮]ɓǎ<x����H"G4!2H"_!H"w!2H%DzbUVVLssΝ>}?%�����߈!rH"Sd!H"k!rH"H7wTP>innd2UUU4s[n_zUw����:B&DB 2DC>Dnj'tt E("TWWWTTO#ʺ ����!rH"Sd!H"k!ts&D)*bF$JQJyyy����t"ML!"e!tDzDx "tt!jL#>l6E1���@lj4!2H"_!]6nr;ҵF����:N "YHDd )txQ"����•IXJ&pP>H)Y����G#J-R1����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/queue.png�������������������������������������������������������0000644�0001750�0001750�00000027425�12161032160�021360� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����������� pHYs�� �� ����bKGD�����.IDATxyTW'$Ϝdf~3g33s&D,F QAw]K4qCAeѠ ddi}7TĨjM]U]m|=}nݺu]~~0mڴ'Ot<:Aa8-,,@MvgK(P@*%)etPG8 (P0<@Q9]h\_C  L|[t%lxZV (Pw+*4%m*j~j>]aL  lUh, e6_& {=ټXٹAFQ^"gj,S~$z񿷏 5 ^^%?qgm SjKE0Pfݚ0qԎ*+n0߷,vFC~m<+`~wyA!:RVQ~0$B3G*-b6OIHvCsӧOkmZ/yϘ9zLb+/<mɳqoi;ge:{'gN6k GD)(= @.Rĩ6xTQP(:p4B>r5d0FGG? yԎ~'"/pmll"j5wMᰦ=<45ilcOm3sOxUI7o D"|e+6S6|m.|Eľk}dOk{D9!_%l .x!$$znXXm QUUUG54jc/hnEQ޿#mvvvعels^*OKffxu݆])./\5nB?[!ãcbubà. /�r" YkWv.x'Vo7ΊMgg*LLJ:m<5pttǵ+ok|X1>k^Zooo_v{opųÐgCBwXg7TR.* *̀tU jXYd Ѱy´p/Qh(Qft(cW (z%\g*9\rC&Oۺ}ks)q åo7cJU�!c,Kjjj9 Ϭ] 949koZ/_z8E~cKuD8|XBp6G~:BJJKk+1p+WK7 BbJtdw1)^t$Oe^R.&C)2:QA_~ ݖ w ^Ve)Z';UQ3&L)-!0y"oZ`p¢". ck<---XC+W8d,{ٴwh] [E]yZa[t奯`3<}{w$Bkdܓy ή wksÏiBX XdWTBXn*hc/ȱv0%-cwD|WWo*7vܪ ̬+n`'Mfj(&9y읜<G&}GV.H]q fVk|GYUXp_mv)}0@O٧Ϟ]nS=z$¹M+[p#,-+9y [fZAb''[YY a~f@:" @|a#G ̽V_A[IńiOe:j ?ڗs BUF Y&&վkkumTzYOqJKOW˦GIKYȑ]vo@pׅ>tPOM_vX$$²[QQamkoͻȣy|M IOd\B<+;ۅ͠f|Ɯl퍌фN<i^.(p~^[)Т4UgN''Ev#`bLT\qmAlV*߯N '<b銕ZM휵i6ωsAhp.* &yk' r.H̼K:9>t|SgPPb*[ㆡTpq$$/Q^^amhI HrLBǨ1x:HBc*82}702cƞNH/~\-tm,�[G7"\eb/'`zGp!%=B/aϭb* 32ٷd eg.KJK}ϴ�}f}ǟXL<g-kNSoÜt!W٩=w~ Oh(`afZe#&#ٵZٍ]NvkbABvUfSϮQ;ܮ^aJl{EMJm^@'Wj%]7EŊlY[[+!G$5hf_aVU(8 |rhk<[?ʬm~U柚[B|`+7\mXU]]^QΨoY-BP*El[SSsqe Ohe };J*rQ[U_ VܾQQήx]j5N ޓ]B>-9ue+2~ Ehk:OB$$A$A$A.A.AAKAKAKKa!I7`WRRRlnAcY{ є]|fdǟ;w! 'Nbzm#v4e 1-(}w~wEeƑݻA֎΅BU�ِ9Lqd`._.b u ,Mٍ;;l!Ƒs߇&DCXkə{=~ 88{`ܥ AI+Xr 4n)p Q!݉Žwkm=f\a00KA~"B vZQ*IqgddBFfQuqI[[+_vUJ]F]-ZuOx?zZ钒 ?0k^w;::m6vjd: u%\5]عeW47-"w;$t5cCH_8jΥttL`&,6s_k\sˎ΃ #1s: --+9uBIi^npM/"3UTOǞxaVw5ioIii]] IL<ԙu`g׬`:ϿL,Y~㗝V{GJD)8:S8bيU }Y9s<)(8ddo.} 3SM#\AT^nܻwO:څEyNn\cD^~f!Q]\323u;feӇUXT߸v&C?7c=~Bpu"ὑr@tkBNRs=ar3Wp>ZeW(4{WͲ~ndgg߽{W:څE`IS}mG~1֮Q7mֵ욕Lǣ j=ⳍ0b};}fla.s(VČ̬sLvq&!Q03aҹb3K|&5֙+Ze75-')Jhm1;wHACE8p7}Od{afhRRZ+T:mG,rlxDfou"Gssӧ vLt.<sr\j?0"Cdddܾ}[:B-pW_<c\wyOAbEe媵yܶ}:mpkwlp쪭̜00};K) . ݭٛb8;`AVv6zDI }Yb3tWOǔG:s ,zIOOut4Zx|<4;PWAjG|i6uP;)ܱs Gͺա23`c1j̑ !w$$&S=Gٛbx &COǞILLt2/1fhuuC8|PHw&enݼy֬XB;;q)5u0qpn8`RSSoܸQcV,Y:0'73)+]8uRY)}W8W8*tRKA}G}gtC]\8 ^diiY#f+ ٌ7A֎e9)#v,Kv A˕K &O Mم<sR/5dfKKӗA}PvK >(FADߔ]'~R -),kHvVv_:Xƍ/U(~kCnMF9jdBXQ3[c'-\3}Ѳe,8Ds5A$"y+/)-C ee[6T1n1z\ݚ[ZD"vZ$L+}y_Lٶ#dRdQvNC.A[8 2̣HXLKGG!lcbG [[,Yq_ X͛siڤȑcLJgkϔ }_G ^`"ܴuB@,!LQǏh#`Zی_ #6m ⧠(vS\*#.^<DDBvŮX|0D`%*kMp䘑]].=j%<^};:Hv,w8y`rq'kizf"PU "^y zzzܹr֬ sE!3q;w͜qs=3g#Ng/<o"&_+YMWÌ_ qSͮ;C"Q@c?ϥqD]]+ڽ7} 8;ƒZ6cFmrjրy0pC]˒[osy~qG-|"ήmmm݆!xOvÂ/\pqSuu\U14p sqK#>a[Z[u5y~eW~&\ 6%w([^l9ƃC]+B'8;ƒf6c.J`]<|Sjm-ɮeɮ8DXT#9awReĉwL<1eW0)ݧXD,^9e+J;S !R=z!Q)q W2b � F6"{|{~Gm^jRKلF8e*[t9 Hj.5(d'A!Nip:!/>5UUmEUʴv5%]1jGYʬa% IɈHJ^b%ga&/[Jt0l(UUT<F"[]sU땪#a9fZՑQ.*.&}eS2)gϝv9ux)6ESS%K5G.[{DYWfܹ;̸{PǵLzRptQrָ+JIXz}䜼<H$[;D쉈z¢'QhW؞wt tZTM1bobUKGgM+V ɮqn m====ܮ,xZkÚ#;:&IM*aNݰp2=j]шFc.y\O؍7!%5dWN 56d%cZz@`SCt(l^<sod`x*7dX̦uB?MIv -s$AcXl7s %]´<7}8 ~ %] ]] ] ]] HvIv Hv HvIv Hv HvIv Hv <`d1[/nݺug׸Gf}dZg#y+ggfOgc<+׬~Kojj="$5fʺ}ƍu0Zm>.bH9w)ܽw/,<2ͥO25$4 BIk4 `p*QXk9u5#~X"RĬ}{Yvsu{iC?!Ϗ{Դf*W= k ǽf}͌}{Yvsu{m5.]ѹ|l s$l@]R%J{֚AZ]AVP63:e%V9Xl 6 +R[ZKGZHvC~ApRB19n_Z3q^Yef3s_3`+go?nf{PM]q9gW xU?ٕV>bjRlF羖 9:<:l7$Z5 11 q^CZ^eεV%9Xl@\>Y6nv'NsnHnJNkII~e/&Vǫɮu9X\]l&8ߜ0z6vCy%- oh1gn9MM$ALKDo@Iv Us0.A..A$$A$A$$A$A$$A$A$A$$y&Hv{1 _`F^sp_]LsK.!7ɮ9 :X7h:{jYlmޒ3 ]wa]w*gB9GUb3ẎU.yny;wa]4T-ya^}EMЇU.yn0`8D߫k'5i%B)!j>\_^vs{.-+4tNkBԜJwlcSd_)EMkY~}jm<[S.LkrU[֑mC޻*iM%9XM$ 12'¥ˎ?1y_XxDwwwSsVI,o.yb}͏K'5>bNCeNڬܱM]3)(y1CT 웲Ksٕ.,m&K`] zLKDBIv HvIv %% % %% % %% % % %%us0Ak6$JVc _VǛZ r#3d8H;%b)v :nܱt>鋲cQ.kվ׼Ks0kO{GIeĩJoEeE(E]X\eo]lݞ9.ᦢN{I)X 2>'bEu]"|VAgS}ٛye<[`d"lܱCGId@6}Kv;[:x`rڗX.y2YYs/o[W՛>$2ʑ]XZ$f]luUT\L LH]eWViת$ 9j<'M? ]|fd_dbzM*Zdd<[`i'9XkBsO:!+5dүy]z cB.\ cB.8 d wBKa4MMK)-+ G<$AF]%W8#e<!&%0>y/%" E .S^A%%0Ap.AeW] dwIv zIv'q0AA:B:=+3W8A.Ǐy;qw?A*:9}o ]s:! MvR_' Z E"%%0Ps+ ME2yq� (P/pvsS#[R>y2 ^&(P@AWThlGGK ~j𾜕 (4V]vTaL  ܂" 20 (P0<dbzjll [[[bx%xdxFwwwFFٳg24 d${ȑ'^p- .A욄k׮oG�6AЀ&]]nkk``ZI ╕Ј5<x~e5&{8*64`Hf ݕ]T8z{tM3mG͜;/(8h9z31)\s.yaGz^** . \qskK ~_8;;@za.q&vmmJUm&󍷯?[{e+Waoo@h}~`c+Z k!}kT*#n^C$&566BϿ\}-d[o:tWE<33S΁:7d-# imo :iƇ\,UUU ,xCvM'1z'<bls455\]lQ<3ЦƦ&؆d0]Av.XkX%0J]'֮st4%tV;w spB*߿El?7x74شiꫯ<==ׯ~ka?~@v\Ųe?Ǐojj<4k5tC:_ChlkR4qqlEڋ/VWOY%W*`}}O~nٝ5˸qpWcWZZ^1˟?O]]]U*߾Wb G�s.Ce0&+j_Dq'+pdW3ztC50d虄Đ8{JjڥUL&&{:G6 R\"'mKvٽ7\.4KNLJ:mdSYސT `u1g{ ڶ#R{bXxBQf]t_ .1:nA@dСEEEK,ׯf %%;ӟ... \h}YYYii ;ڵkj555G>}. D|eFkMظʱ[owް_˱R\)Wg WwkFŋɓ'1gjkkLeQ.OBkWTVaKĬƀh;XQ3Sr`yM7m1 Sxa+X Ҁ &n=3KSv+&(bYq: ͷa·+'Վ\eeH_a~]&ib\]S3pd;FZ^/# 8n?;ˑN,R^^1`uj믷Ma!lןg\<==w079MoS3{ѻ U3f/ٟ:!b;qWni>7MѳF澸%WYX欬,.|X~>uuuxz(مo=UU|A+Wg|#vsDh1n㘹2*X1+6Gz:Kʚ0ɛ{]/O$V+7hջ4Maɭ]c,"~nȖ�Ab޽R-"Ɂ `eXlaA3~"Z) 6䋧z6$ՆÅ+7*dh cSYXf _6Ѫ\\, lmm|MN֑d7'7֐Ȥ~T m?AԬ]o.\rfv֚ dTt,8Z-ns$'w4JN j%ڝ```yI~Ν6jMww7 6 6L0?ݴ4.,YtG!Ns˃@0iʅG|aiOvY9eW{3my)9Q\\_R23kfG]vUWWcⓝ^pILJv2T$Xkˉg_Z:85#)d>DlVK/HVD]4K6n^~> IOd@xsHRR!Oc{FFaX ͐=ŏnr;w% Q*D)͛goo_ _l5k !4>| g  h \A+i98 kkkwZ\}:܇ ۲e_|Ά-28[Ed…\X~xtt4aJ[oeXy)ca�c @n b ޾Kl~mw 3 Xb%9LWe\?PϘ3ccڲbYqsJssf+x"Z 4շLeb&Xo2X $$zz.>_N5d@U2cƞNHUv 17ol䁙dDFF;?я%g?&^-믿-""Bt6AȔt:ց:xw{ļN]dѣ׿` 1Mo8pڛ o7MB? o2&]jcd=~VQ&\HIaOG]FWrd{NE*!h655]va8^~/m9jȂ#֒Ot,}En%Z HVPM[9q3ӯ4M&5T8kv27n/@kM XZ)QɔZׁfםŊ#vYɾ_.`ߑh2k^~@WjfxZm  UYIy`P"ɮnUuuyE:}WOvaqRC{z'C+(<u%Hv@]]*T.Ak(x~[I4@ɮr0x9B.Aڍ(#^�MJJA$:IHH JrC$6oUU}A$A$$A$A$A.A.AEv AKa>-$ Ls% zݰ]α����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/plugins.png�����������������������������������������������������0000644�0001750�0001750�00000115306�12161032160�021711� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����P���>>��� pHYs�� �� ����tIME� )ݫ.���bKGD�����SIDATxXK'vfݙٙvv̳3wn6ksFPQ1`Ί(Y((DE1(s1[>}�<twuWUWy뭪w1:E,bX,):]J=n%jbX,ˤ`GP)jObX,iEr ,/)R \P"*bX,4+>-P?SԃK{<z>_V77_w, p83Y�55}c?p,먳n-ݕbڠ.5ϼ1k%;]xyeSS%=Kʦ% y?Y}Xhgs|UubX! M@a+ӛC K"sX,VӬ4j'Mϧӳ1i}}vW!57^m[~/^5޼GqiZdmY,˘\@H~.36+ҎUb@xezMr+, inhʛw{iɖ4hA:#~LFyᶅ&{ ¨�&*Y#Ƭ;@A2h"/䉼y%ҀۥR?m5rs)*X?',AS}\bpS`0fFDP/ q,E7gjct^+;#-'Qo3 B )6M^K'%W,cXmG#WII4ZaYwpl^0±ƶX69M7Mڲ7 /Ӑt )DANG)c7 " 4ti(sC޻NQYuz(&Eۍ5@8ZUr*euܟ>{N%Ս4;JN^)=|L<*Zx%sb!n!Kuٟ[KL X:K/2v{nݸ}_�)؎_#\uO,h21nGh˾\ �hk<0a QW&g`:p&y%ߨdxF rȄb@xcC愞 D9ä"ĝ"Ҍ?,q^ҹnO}XeJunm+Sy/.\K~.XYt`l{z0WuKh9q I`5KbڎL JN4[zI`;~ Yd`yu>M%hRTMI4fyWPsSjjoGNǰ+ב2D&VƊ� ‡kfS*gM㭗"q+whQ˶Tq]_B싗nNAt##4v3bA`)5rv*#BqxwL<8ô%X#�;t 2}K>}Y } �Ѭ*CcyԠY|=fagF1,a>ju<P[gF҈WXV^tl9U4ZJX6VY42psbٖ˙4~cIeO@{Z'%W,3j;"Z4"<A#Ќ >$x!�R*,lWo鬑O[,>B,}t hFjKe(_Qw ;h\p1@.MZX"neKs9L4;5_yW h^%X<`5K#fXmG~gh _˅~qҋ$X+tnQl|N?2Z'|u!_XK1iXq}t h dT=>C*g(z*-FsB˥Wi=QvXٌeiX;yI%>g]tb,_C\XmGaKxG,#e^^OKL XBY,V$S4vNM% Mhxa-#zc2hȒC4;u3fxh&kaLжg4d"oYEaǨ*X\n%-yq >>n3ol9hN{ei#VI�]T#z_%Ն`G,n>+$K&x\Ʊt0_l+kӤj{MkN0$: 8N#]>L_0Rr:[i AX`T}# JPoj]r[ G߂XBTNpOŏ^/,Zg Zn rosXq̝ǻvk2`b-aIdT͒g%^b,mkI_[toH4Аt2F/^ 7(X,vIg6&Q8^^?bX.ekdd7GIv?}FWo Kvi\G,قrZqaZM/*bX,Vvi7!XX,bXK&Y,bX,-S ^*tubX,KU2?^pbX,`bX,bdX,b1XX,bX ,bX,KbX,%bX,bX,bdX,b1XX,b,Y,bX ,bX7 eeeI۷ogP111T__7.bX׮]PY[[KϞ=cH<JHHu7/o~,RzkR#XFGGӧOÇ,֭[neQQ8qŲ𧦢Y/uNzаcZXZ_ii)v8bÎ]Nǘ,HY :566f[%l, uEtYweJuuuVl\G0,|JK{0&L"<9 Pi/į` [Y ր'O޽{, u,a]u[*ȰeӵWo,//L^M=F A :I ԹGO}G=a"]xh~jZoP <tX?hC=o|8}I8(ʈ~Ԯ?Ql yڳ/t*)Y|塥@cbciݾsWrpI99zF+_.cy&%Sy'5n7c_L77އҰ<]#bH|1[zl,ԩV8XʲPĢPj8c޲eӡKW?d(lt񇨪(L�´B>yy_ ` ێ<dfSYYf8g~]Zj ?x\hb= R Px#$X\2)Rkݍ4Ybp޻Ld1j)rq^m8'y?\3Iz'N?NLW+uhБEw4,=OSuX-,q waP2X]4Y2Xr4&m`cnS7_{ڗ;Աk7= |-;SII?  2ldKbL`ݱXΜ3W .NYs'g\|ɴdP;ӧ6X1-;Z )m`SRSu۪kt _ԗTG6kgf^6曖n<އҰ<M]#-חjq`#}zw.n:e*)?(gPZ87Ź)XsUX.X;g̴,m|nm(V,KJvK/~JFӶp09 AS8K0*oC\bR~[[,Lr`M՗/އҰ<Mաbă %Lwve-X*_6 lRR̠c% U圲9Xͬ\N|>\%W˶急9-Mঢ&`\pR߫,C%`iK,Kڜij?-חjq` 7nՑ#GeT&-n:e`P=nERд]#t;Ƃ-#>x|&S~&-MK�N;=w(:sD^H>5uJXZwJSc&Tm,peSqb ܇=O-b88;v,-]ThܸqzqIc˭E l2u`VŋT#*=s"=9X5Bn ŰE555&>xh3{P=;IG2t3ӄDZ)iv %$M|^zD~._z ;au2c,uh=pIMaZZRN,+Sw h8[QDZ܇=OSHeZ X Gn(я~DelƖ[<7ѐ%x<d2ƎRmZGKZղB*H9KW "AjH˼6K;hCX;p*V͈IbXL}|=&a�7-2bn1l9M wt�DϥKpCyB-ѹpdp2v_K_'X*B]pS|PΞ&!QvzLJ {b%s}Ce`رnC[L[nM�6:uUYKT? HPIy*L͡ڜtȞNUpu cm ̃X- ,a}�lЬ`Ν;͛u~~~ԥK:`rkKT :Eݢ,9X=Ne>+=D*8GuSKV,-<Y.) - ,V K˚Rh-Q)lCr5[XVu`*?uٍ,VPaY,Y-E7)3�,w*X- ,XVj4x&ۇ F+VˀIyrKH˾S-,9X]q3|FGЍ^_Y+gҵ %bsM1́Rӟ(**h,v2J)4x ̅~T}e~Gn^ԏnc[$XbZ9X�?weCNQcK3ҵ.Н*.^DGQC^{zz}姼K/^<9XrSbh先^:YkY,RX6u[2%v?ԟ eեPQQNv2�K]ͦc-Xb蓽caLK;o,YJk׻glKZbXo,aY:Q"gNSmʜ '*bd?QՅtj8%vkn,;cVVK[0lѱ :\#|D m3(oƹ4l1E1c2r<Ę)(bۛb Xb6-**bPS-G\03Xr0ϣ\V 0y MQL[gдA#"R1'1, f8l04 p:#"+N Cc=*\`bXVveCe⦄[8ضPUeffZt qXqJ")M޻F/f٤wDN%,rҷS bbXo)XDz2277ӧLCl`5D3ڬOj%S(o4Xj |Gb-|HK4KC 1ccbXo)<&&F�e;eeeԚ!4gddPRR�ZKoaj�毖a~gAOƆzK:KX¢bDI/ WZWw8bedd]reC*>+bX, M0tj�G|]gbXV bZaDslaa!*..MbX,VKbX,%%bX,bX,`bX,bdX,b,Y,bXo+XX7(xet/Ob6|աSXxyo n.BXƶ''x%b,- ѱ 5,jj| ayJ8zb%𼒓ͤ+<~bbhݴk.M¾cc,Y,ր%va /&&?~  c3ٹgBNJkÏ_Kگ2,T U=xı ,z;PYWWgLNNDՏN<GAq)ݢ Wsg"fS3ڻ?Jݻ^vXI{?kORfß% w!KK!�hi1.0XX,�˨(] J4}ۻz*oMՍw)ƹ:辞bPՒt/O"#ͦk?c&yx5<?yBJ1۩K %A@!Ä.]f`3D6,ֆ4,Y,VVK-mp['r҆#t|])TK'/VX ܳf)EsgQڵtKKsᓎ_Hfqpԭu%lt'?*e.vYOa)d[Yj,A[}.:{*9Y䉴G.22$%bZXzxm8A]&Ae)>GA1T\R@^WRH/e]Hk(y>NjOnTYUe,Nw^ ,o IS8,v!,?6Zax ޽{@�nc3BbX,cFť%. [FMNPUu߆Ev+S4zkR*Z e>ԮSZl9]mlRzqI)0&`y41Q4x4n:K9-L;{RR`ɲVbbğek>ZڲZ,Xig BɧOJ TZZDA~)vPzzj减 mZ~{Фz@쵎u X—3z#4dzZˡ<jZ7X?qL-n\GLg 8wN4>gGO1>`.Gg3ZtZR7y~o*k`L B!Ksy 8QN*EA~1mY?={fGؔZ,UK|f4,>>:k,, #b\6,ikv*,,D$?U S;>g>Kۂ%ƨT Zz0hSeuUUR{_*Ywz$C@rxOE&=ay&y K%p986b?0H,>ee& eV7پbZi4ms?uB<5w>%eX<y*?9%ێHls!|?A>~~ԽO?jߩ -\j{X+@8Szf-9>Pz6-a%R]%U_)$?AGeDY:gs/iw/.:_t֫zZEc ,cVr:o岹rgLZ)gU~p-Ʈ9!A+VcyZrOX{,)5 Z^TkY`!"۵Wo:9zל5cYQQaTr4|Pa)(sU'ϒ @ߥK˧3bJ&`!tcsh 9ef6:jѴ͕L$n}S޽ M@1,|X*}NLPiM>v9f"<99T./-\Dk׻ܧϚ-<xm'ZtT6pp:~>JZ)[lُZ>MH mS笖f7y e_"Z^<O%L (ʩvr5un q͠z[sͱ VPX(eOMh-䞰ukn5R'u]z UUU #>χ>TvZk`f9tw`Tjyw5\ӛ&j =*ew$)**˄SX. ,_|5ax9s79,Y򶾃S֥˺a!PST\[?Pghja)![Q~~d,?Jㅋg\9Վ5W.K59fe}}|-g 9&fe6Vwnͭ[CZİNܿ:9~ל)>~׮_sN^Kx_FY?�t)Ee~UK /j�((RZ>ZGөgi”U]O<AGX7:t*}ᄣ&E-<(\)8,Sn3WNc͕RTG<<{ͱMތ-'luݚ[j%e6V޿ֵ<ǯ3X ߹]OBCeeeO h|,90XZ 5r3pr5j+*ZXBůr?%hGwbjZ,eE^X+Z.[U{FYoXҫo,'slYM-Z,-3K-՞7y,[�X ޟ~P8ڴj -H:Ӛu+E7H%%L4Xb:X-t8w^8·͕pK<rƌP}%gfy5ܭ9؃rsES �VK+S|gB>{4Y/jo/g x >aA6s^i켵˖`stf{-MU7Vw͹n[Cԙk X=Go3X e`?vηjG1q12%5U|<Q4vdJ<qB1jn$?>m'zx!jI>{i޻T`NohJ=<sUٜr:]Z,+`BU0:)6WNc筵\Kϒ+Ec:PWͽgt=t1*%՝%Ds-P殹5uvZjћ 8ZLH`@Qkx8" yu|p|;Ǚd1Xr:qV%/E(&W.ZN![K%m,m)~y^GW4c.^Bc CU ,K,,Y,`Ɂ k@SXx& ȫ*KKE PS[Mq),<7y ,c[TW_˔c䔔6ej=t[b�_y12XZchkXTI^m!p0Jy%'I%M?<pכ.e9OKW:Wyeh+<dkz {cdv: <(Qy80X%,}hl'*-+ l !|O9^z8cZmԍg'bZVsэey;rj! 1֡<&bxDEc+0@CEO&%5IXӰ|ƎW7@Y'1\dܚsRsv-kDykW횛{SKY1V&\Oml*]?yj6 J |j*�()11Q㉹a =x.Sn5*EDͦ=gw4ՕҋwUŋvы>z!tU`ijqāCkˁÆk@ee%\/[Aǘ|<HxOMb̚Y:O,t ,#m9ll jS+>yhr\]! QUUE;""8y}њ͕S\a�k1 fpU cɹh)}Ԝgo'ʕ&3Xz6N9[ G:Fo {ɶ QQQŻihw?FyTpRVI#s9$=u}=%_B7EFM~LqS_'t^Sl@dV%Bxz:=] ,џ3Mm$?1'lI2\L8Z\9\afKuV9kEKy<+zxkޜ{SKY11oj`R~ ?_DWJ%ɋd`gRD'gϢk'>Lf]$nDPsVJK-}Ot"ϾLN ͛_[y׺n_rH8GGMx8`2Y1#!὏?} ւa:*�X>x<M aХ$pQҒ:u|͕ZK6@&B*UKEKjQsô-WsXzoj)?3jy,5ᵑ 3FfPjvŤJD kJ ^$5<n~tawuJߡ):ݑz ߖ6!#GSL1iZ]ߖ�DWgߥg/J<qR�h]]KX"vEE +PtגxZC.bX,M׃#⏱#?KZTr@e)Xbi4kCKXycTG�|Z,ծVޛXWb`J>^nT\ZBҰiXڴUUWmXD^iZr9E;NDZ},(-)T^\RJ ze`iݻ'nk@*^8r@ٔwӏ"Ŀ; o, �O,`YLSt=8w_t�(tSD"'fβˎ]Ŭ,4 3̠p8Iͷ X+}Ԝgefc8CK|ծVjaZX:LcdlXig BɧOJ TZZDA~)vPzzj减 mZ~ФzЧ쵎e{U`GSM5y?V4ţ<x^} T&/7$?>m'}n^RZVnҴS:<MÞ}E~x_/:(-D=-�i֕`4ͬf2vZ%% Nq6KcQ44\=v]zW7 gM>l<}D=11XZ [($4rssa={n 7W 'J]I@>T2</-ѳg,H߻_]XbYր%Ҏ?Dnߦϟ_eR/^3;Kґb;Ih`1*Ղ^&$`'{2.<T4Iʁ."?M`4GdOfz%QIJ`*X ,'N% duuȣ7IC ,F�K``bZPRkF8f?Oq,KGVں*:r2WuP,iʺt]*O)u$|Q|&A:(OuM%m߹ŽOIC 3?_R�^-=`( *Ñh@pt``bZ/ C /_f9tw`Tjywϩj՜L5QSy֗Pܟ.;K%ITQYF< _OM`ٜ5oC(,*90X2XX, |<%T{xɋ{ (ǔ@._" ,^O[)XnN阡n ѣ%%b,5P *)+-$Oq!J999TVV&$^mm6m˝v}h <>dbddX,PV^J۶RJ({mZ5wKiͺbG7H%%L,,Y,`ɁKb1XrbX 80X2XX,KKb1XrbX 80XX,KKb1|ݾ}[u]΁Kb!DyeĨ ظ*(2`o,Y,`i1X*L~ɔhH7sٻ `>2Xb%uы>=MJɧS,h1X2XX,-˨(Տ"Pm?,ݻK7o^4y=�~Lky<~K2ce;KKb`Rm?,oݺIUzltO$`rٰ:v:wIw聛1SnCYBR~C箴|z\<14߶ԩ[Qnn<tbiy8ˏ,{.3XTwܡϿ. SBv QGa4f$**.HL oy&b1X,]JeB%T[WMuu5t:%6yI_הĩAUUF K}CMqfXGDT]S#k9^Uk42CXyІm8D\~A! 6B �oTQYiqݭwstgu9wZ!4~n[i4Ӌ鱕et otOXN|;TVV&!`W j4p@,׿2XX u5TP¢< |ʨN%M`ƾ; J_뺁ՇuB-R~r=`aY,&p^~iGt9[/VEc%<k&礌J#"6ZUw5@E~Gӕ/G; gz2((HPppp;x`vZm61!!!bۚ5k:}ٳ8fΝ?ĉb8Y,Vr2l*<cg(%ʹMۆZeu,[�>T'Wk<@ VCXu2<̝2dR2 :\aYyu7o":p^x!Pz葦:3, _~�Xۭ[&�ӿ~3^puu?}?n %$$,wK9EGGti1rwwݻwÇw}WhȐ!b3ßggO6l ' 2e(oNN}uJnelaaѺ2ub1XeiY]Y(/:t ymrqTUUbiݿ/|MY,a3 Xܔ=-CE`.JX*/JuXb%p߁;JoZ[wW (K_ X4-m�,T@iiio}K,Y~  �xCܺuDl:R 87̂kQ,G]v)|Fc,qވ~@ zԨQBh"۸qD9sIʳdզy=l0|},,7P_h}ZbZ!XbJ[ /̥)BRR ^(.W@+Rģ%a!Cgo_?;Gtp篨 Gy5w^]1h⥚c{oRf4X}(|},M'-:�WtQcDԝ)Sf;, K4eK777=+eNm�0aD\vvJB ,},-9Ļ>2,`Y8Xi:IPey~ߚ,?O,OD[l*\ݶx+-FܵRJDZ3�:%OsR Kޛ<�%“S aD R]]}^ֆaYCfX.wo^~cQYK^T G׹ngMt# Dz <v^p;Y[zD ,EדCˏ>H�, ,-o[lmr<'7'h,hNch)XGϱGb'bwfeeHLeSa^ƚ gXԛСC_Jܪ E? Viucxk ,μwPO'%`lڻ? P6wtKl=`X!/_?K=!=4Ql3gMbo~Sl.\bz�]Ǐŋ_bkNMUV# G%KCۿUynwtt/~gΜis^KX,V+K[,"Oo7 \~u<` -]Tcۗ-[f._Ai~v!|/ L ͥ3;vL%~ Kn4 OFˣ�Zc� _Qy;ʥ<F/E}Vݻwz2c,ϢELO>=W{Ϫ OOOas^KX,�aMM`S}\ M?I7r;ֱ}m� 3KlGgXhE`X>L_Dڻv>LX0;*r^�':h.<9ܴs5<.00z:wL{13dWtfByPgN0JJJX|U2X,K>wK&KbZ8XrbX 8p`dX,%% ,z`k6zbdX,V^, bX ,bX o,Go8D /h<rΥЂ94ZFg`1X2XX,Ҹ.㧎Qn^6ReU954`>FR**ΧSIi΂ ,KKbtAwƸ'v<iuv Y;*7?fΞJ? 7,Kb1XbTސN#C+jx`1?z= rO\6yBZⳛ`_Cg:( *y RV~#`L˒tkn>z[@X٭'c*3%j0|dd$m߾FC- ,?M#B*M~;]ν伧&M: `YPKӧ(_O{3oЈ껩+)]IU7 9lu�aKju5bdV׃(%%o1`aED?vY/y1%TeӦ_eQO6'i_71@FyynR PSѽGυUtel m;(z)͏l1 )ξE[SE.ҋSHD>?8.s(76wދVQG j͖]l\Z0m (O^C/;xnP8W\/= 5gt46 PIWSzFj1 ,N8bR***4ett4=}>|j#u떸-,A{ǹRTϠjΤ,Zv'uGhK-ߚ֤[B ,'M0vv`ҶRb}\"i^I6ױzO^/jxhuS8 P3F²Rr}S̅8*{I/5}SZ{F76|rY wi|h�psj#ӯӹ{4*D(S:oA^/GyNݦ}7O++;KgϞ/wXL0ޓi` Km׿Ež"ܒ*ڭJlk7vm"NX!3Χ X$9II47,95iFxiY1%%I̦&pX}i=;G f2ݺ}xz?tK i-X׊|ypN=˝RuR]ޤF TX e%H5[D;)a_+[y<'`T?.IԮc,Y"RUUU ,<yBczH8 e_(zo<)3칗h{fIӷd4i?q 0&N+j@,,~_[ ,[ xX(?PM)8rnsVBXIqhYLc͕ZZ~JK.֋ zʴ\nZ;5{N X>~جlz^B#K(5 [rzH8?t.�%;\ ,QjiUKk#-ZSO<>7j%Enbes?`BB`U{E!N-nRT Qse׷X>b\bZj%ם% M ^g=2X޹sǤVZ#e ͦz{c`1*o.N{8W@}</>S@^8JYSNehƍlfG7}k9,0o+'z4,]~r<|=ْM&SkesZփgd�C/01vuDx/#үXfUZ;)tXX\|,͔U.C{z|vSKߒVfuKo~`ɁR=۷oܑ=\JHk.-6=nq`q,;8)"Tgaf?WӦѤ)idhMꚾ;:Hpy>|@ߣ3~ٴE�3Ғ^rg &{G1:],4HFҮg2&tNDrp,+v{ZaC<z/PXٕ* z>gu(ATbkTӷ3X6O2:tJf΢\M`Ɂt` _Yh^{4{u0ٯ`)wU~I3fҕ}FZ=`4>mlה%[*,q[;N 69,J̼cOs7Т hmoC C >:oYz\ -Zl`B} :r$;0+7niMsQOHrGZeZx 6JYns»I~OI5FYyWIК5nq`i+M]G^@>ڶ=X4ujmfM~詍i~g|rɊ翅|%-],>,өK^U7uӏwB ,*]G*uڍJJJ,9h46}ؐ`UGZju5}ԮMYP]/`^zƞs6#FчRyKMZD2m\6 hF6Ct aْoV(k4+;&1X`ĝ_P edF--X>,^q񺸀`7U4%=o"ZUĭ\6mp,ple%),+1'Рy;C(uf5iASHL χ#<hb}KPx4^^^Ns|aݜhg/hB?N/=岱mjwޓ}Ѣͦm(A^ 2KotQ'hC;x{*`Zfݾ Gzi`ii[X9r)q7tl]`/&&MuЭc}1Xš+W4ehXuѓRš9+ezqId`//{�/[`ɡł% q}1,y iSjg͏>v5iVv1s^ZֿN{Е+9"tbn¢"=tΟi(VeM-={SpV1%<x7%ۻ?=?/gkq![Qg ~SRS̝l񞪓KWuW@U%j`9u ڳW;zx)kT}w&qh{O'b_3̥}Ŀ~k-x13Xrxs0p_YT<43]8}2u'}dޛ֤[H;m=I8!:%O`/I6Sϛ|,uXSm,?-IM`iD'AXͥm)ӦSdTn=rwM9 s/S0Nw&<ןbzO>kb6,Ѵ֫�᳥,<5F':-X;ph` a%!ci8mO7:,v_tNz�x0=#C~6=C/۵Mznn^ZPqEm�5s|O!ع\< ӳ�v^itIpqx\,pfXo@,xI .@)`"pYYL=o}>vdJMZ*X˲fϙi~}h^Zx>YNu ɳTQQ!,NsuwhޅdK9~g.^xve\Ll ]:]ߖ�V7qW$H^>4qECGV%Lh`9pp&OJAG ,b;hyz[¯ |֞ ׹:|/% 0n޼)Ke:O[5q\breeh5[CiϾ}`\$lEgсϩ2= 3lP:~㩌WK?b.!]:}&kP!$h;d1乫Ս8@uDk9/I} ugC˷]wn<% �6KѬmC`l-�׫L-?ֹugJPPX`ɡŃ%g�1-ihwu#|3333zI"Eؖt$%+c[ö;ZXz,lcHc_屯Zx_g~-M{j�zI<O^!TS5!,oB GSWr-UZZ%0m_JJ{R4yKQQNA4t*euo1`;vxS~B� A(8Kuu@etTm>nk CS{͢~6"y*2ԏo=X*1V�LNNDՇ]X'C˔[qn+3rs)znzMueB*`8R tѣmT]So< mPNO>囗+ ]j3`1"mHʳEeTTꍏ&!-M(#nSu]*iq. )6�U-YL(2R3L1T)Sǁ P$>,8,ZCچ(::e5kԲu,'m8BѕjItbm<,e�=kR<':9{խ]K$ʥb`T_@� u 1f0޽{I/4cwDD?ላq+Œs13zaz׈ͥǁj*22R+WXmDÇ^KU\\@'52R$,%((&K kJ Ku 9ϧ|`1X92gңGEu;Z뢋h1jcL`XNӔŌG]z'ʵtqd7}hj}-^ܽ|̦ǁj�/�ͣ-@#G(??_LIк4l~&6:AUUF~zڽ;V\NюqllaaO r:RKe/q\՚1~?0` 5i.= ,V拆nVb|ƎM;#vP@J>}66QF]=Ah*v[GiVAєiES }.Mа*gIS2/^'p,:aT]G;eiI%%b XnCa={n 7W 'J]I@>T2</-ѳgϬK̨nݾ-|񫌷bi*eX�brܣb9jjkH'% ,b|e`^fjAKpLrDS( ؟*˨Rɚ$*RûT|*}KډSI*Y]]#:(} |,gβ,2v%K>Xv[sn:ݑJD|Qq19/^```bX C Oq,KGVں*:r2WuP,iʺt]*O),y$|jX>*,uҟQ.Eun=(0$Tk Xe#Gc$4kgiQt2)bX-,w!R 2fo S:9jܭ/2?]vxJ"L iX6'Qp80XX,%),׮_sN^Kx_FY?�tI`y_" r=17Kb1X ߹]OB#J8W6PWZ2bX 4^B>d`bX,˖�e奴m{(_bѦUSh|GZԙ֬[)}tXOTRZbX 8p`dX,%,Y,``Ɂ%%b,9p`ddX,%,Y,``Ɂ%b,[X߰V',,Y,`iU<ƍk80X2Xzw.X,`YPQOyc\Ljs!Rx?:Aw@_77ÏZn,_Xp}ߠ4qDP0ֿo}rtt,Y,` !FVb~lE= piM7,oߦ}|nYpdJo;<a%+VR|:j8\,,m W4sL>j(%1ݫ+}{ߣ7TXX`bX-,{!ë#+h Gt.3jJ4R9y؆_cVKc6ÓCפ .N``ik*--?m /_.7jkll?Qrqq-GOVV .4YS(?!M2CbZ'X{\X~zP9}g9y͠;v~7ÎK-`w۟>lׁLDE_As *:wЃG|]eTr2l ]n}Q態2 t3p0WzOQC(+/s6fExm}sؾ3¦u#"+ǁԯ,3?ӟj\n <ydpd9+WЯk U=@9O4I/%Kb^?^Ef,!R\Pf-v6\KS`4ߙjjkv>kj;x r;eFw?+`pn}2 ړUVU5=娽{[)<xVl?E6zzٴnfϛ^e!lwc5Xl]]c-G]vmr|[tH_o[бX O rHsvUNP>Y( 2l :PW8ֱ` _F9<|>jQ0eP=Ju [oe4W7RkZM|,^}].hr¥YNGsЙ4M` ˦ i뺩c*dY~YyGiѳb|~"^nnaے}|'?IOK0:jreAP ri Ɔ@^x*+؎x[X*S_SǛ[WK\~ㆰN =zD Mhsh~iǚNyWQ7<$Zmկ,˥K6@5k}|vEߧ]<z#^D9[,Y,�ǀ*&gv7&MIvS6;[fwcX;#*:bu.*iJQAAAAz"#<{{r:s}_s@'.H:RaYpJ(1%(nײ.raj(<Me޻ڵ6mL?�[>̚_<GCMX6oC3g8ƍCnnB͚5"a`ev+Wte^em_gO>:!) $|jMαԿB^Ma9 ak^5q9 (AlXoHA[@ɓ'`rw`V^hly?~X#r`Q qZ .=UUUظew5O_5D]pr{x=zkWcWͱ,))qeC64 ˚o(\VO뿫.NO~z ci,X@ ʐ˲e˪$a>q~m5ؽ?U"SB^},.@oqdBD lcYainK!驔aoϟx.RV>P2_rȈQ8Y'ai./C:" gϝiP*tEE*99ʝ}9G__o}?[P+eH]Vq7oC{%^ Zyg2t\wdY/4w%FaIaIaI!-XX65K’’’B^#a)*\LUx^Qڮ (,), !f>kWL9j64 K KB!4’B%F$BaIaIQXRXB(,), !PXh4 KB!4%! ˗JXlw>jch4 K KB!FӧJ4q:qkMj?’FaIaI!Gm<#ΠSXx!ACy.JIiڠߺ U ² )+/EdL8ܱs(// B^ea)h(222aaafCa…:|NDvC&,o/8t4{)±&Y_ay|4V:8DD4¥8;Q<s OzlBbJ|=p�~_4w-~mk77/Rg)�yمFΝ;f=P1bۿ:Zџӎ56bX͉ĆٗsйG/>sGqI *FaYIU#"CYX /(zѳ Qq.JHW‰'^EuK~[u4wԩNiѳgf qA Fν4p@�Ka#'m0f(7m:vR c1nq+לKX}~ϥaoaDǮݱel8o4S:w\TUU/]cѺ}GXY#ueK gNashq<9~'3x=, 5~G̹EŅ7ׯ/9sѱWee%~Q޾Nig̘''' �B(,[VXb<L.0y$[ )0En߹3֭_ ',- ?)v(ѼXoݾ`&WQQa4|шOÇU*uzJ]x}v:?Fyy._Q{QXday:*GCcO4~e,nP]{m,<vM=FDHXQxGlٲ?epY{|*nZZ Cg[}я~֭[#""B]'?.??Wօ-RG^%/C=zT|w6m̙3?CԽI2|c/tŋk}/<]׉ӧXf _VV y/## �~b͟?_ݫ\GzTl_رc0<Yő}t2mܸq^ /f'4vlt[tM Ǝ-M3l0cO4;tּRX95$:(Qhݽ{=Z=oⴶBlRz<s1oω@UXp[9Uؠa*=rmWf]E9XjpO<ۿٳQPP�777%w߾}޽{ǏLJ~sOQVV6tR\|Ycǎե())Qp^YFj̚5 ׯG^^z+o.r."E]\\'^^^Մr/;w 50V{cbb秄 JKAD<WFFٺ ػwzvQL֡ &ظq'NԹTk 3VVVHLLDqq1Νv "), ߧ2ʕ4DV5C'|ئ J<N ekU8 ࡈ(,[,(G oO/&cb S[k"(m*UK*MEeE}z0oF[ċbʹyUKuV 2D疞5SCr (bgggt__U+**RI{?O_K~zV8F!9sދgv.\P'\_"XWZY2QꃶЭ-\TaԹ Gplli(, e9'Ҳ2's,*cq-5gR5w}ȨjէBlRap?S0*1r_E5&{]UawSSU2Oz+#GaG[z>Su޶m[>|Zz?OKQĨV5I?S[ҪUV;.Kh8/~"Djgچ*HjvtnQ]-IV{12D,"W{dh8>�7o6pǰeZg?ïkXƔk 3WgDԊmӥi(,+!,eJsfɪzFd=={~l-%]C KY-=zAy1r4/Q^OVwg#_E(ʊq./))U y7w"k޻oFab¿d϶>띅5nj 'Lk竉 <xֺ.\[[[{%"zd8Wv55?GQ˩St=Zr }2&r^O@'MB>ZdxT҉rJ4Ϫ\2T&=A^=R2_Spt-Czq@;5L,s'ZXZrj#,cI^}, M62eai}g u\SIWiRⲡ,еU2Q7!#F)h7hW Ǐ۶G/)r U:\^h-uNr%$ck|` Ujn弣2G4O8{iDX0xHHH$2P떞0퐰 :)ȑ#o(M+yIv#Y#"HQBB'N^ĕy|Hz+s"qUbKo,<BĆi U֭߯J3Z$Nx.be?P{=%@%kkkU/B -,M]TXmϱܹ3%yu#/"c_ߑET VJ,.}NEGe`{K.,eeL|$*b0 tG6�# 啥?/ ",E,/>;9Yq^3~"wNE8iݹZ!" t|BY#=t"T!CԲF^{LY\#Sĕ7ߨ!{~g><Õ߲"^e&us. -+EKDžd[,-1,)*/Bk 2O2WQ�~+\ggz*n/h4 ˗|$^DU Ah\s~JwHđ|=oA(, =?6ҤFaJ}ұ(./ĽcŽPR</f@Iccc $%%CB(,i4 rd#;7C#a|+VN2>f h$BaI(, !PXRXhB(,i4 K KB!4’B%F$Ba˂*{]m\֠um5h=z+xED"~eʃFaIaI!²=}V>?\qˎbE΀,? '-OěPX(,), ! RŒ}'\K``o}`<�mv% +_y&΁q< 7}Wi!,o݆FaI!²>RDeyyQ|4,,l;ٸa*칈;c9|,f`t,>G  }M3Fs K{Խ'gE d KB!لFΝ;f]qoހE{b`9 [c%Xrݎw?߈nv{1cJ4M X=)j+,vMl۹ c'NQXBys/[?}fz`(|$EIn0aJAx\.> bLZ9;IXʹz||Pa!fϝNz]pt>}D`/е1L},ow':gϞu;z]c7pji?.=}\Ǐͥ7٣K$Bad²W(,=[x MRlom< YɫC,,g~9W] 9q xe]_/>o7wwL: %%u6npy!sQܣ"FZcy؉&(OOLGIiƂKeS6vԔ ;\tқ{F J KB!`5'�V;6"(2S.ue&憪ĻwU <y:"-=9B}PZV W uqk~{+ܹy;pm.g$B^za;5(�]fx{ Ior,C׳LLf6muw4]8m>9n NGQ~2$.bxֿ9Қ枑’²)+/EdL8ܱs(// B(,t6XF' XpǻaxYx7#9:ʿ[oaihw,rԏg=xˊJիGȔWU5raKci{,zQ;ߔFa\JM :!89&$7ȵ޳ &,eʆXhI|:a7:v3'�| =lpT B|L]M.ȹ\e"N9GT-rяWͱ0cs,eΦ{jZ#&\Qrrrs`Qus,|.W]QJZ!,u> 'N@ȩ 4,,xqVh 2>){<jDd(b/F!9= 9'!0HAaI!/>&E/o Xө<Ws~ݩ柇;`=v.ᘿ3 p*#uG+Qqj巗F { lߡ$P*)ׯcص{2:B"uedv0dĨj W=XVDUқ{FY#+9$r3g4(Pw sVhnaYX\=^p&R㑝^#I 8s$z@Qq|#`=x\y KBysq_ߑJ|ygP|0r+US[/5C`Ħyc#ࣰ–.,OGha'"JIRӓT܈f]d)j?-Fag@$%˗t˗s;))Yy7wpë;~3Ul%wɹ6ʫyy ?GFBa );oD[% ?T|<D[0S#@`Ь(,i>'O@z%䉘J8DE9򭨨@nݑs3K\FD�8sb:pGD$tr,j<4pOw0;.z#Qu̬,j1)BeSKGbmUxxZM܇ۣvO6kVcPRc-,57R3PTr%e&8i*?0mlu 6S5~G^'BOb\u>e=VuT=cgXm/&iS)~Ly>}}/8B(,ZXj-:V9ΓwᏃwk|L򹰬0xK"_-5IiE1.e4&=|ܲϬQ_XJ|Ju EEj G&\bdG.m~g!+C%]8͘zLeY6R &4׿d夡Z}{$'+'QFG{c'aw&ک/`MSz:-=8">}�׮]SG<1bj܅j?~"D-c#E(,KHLǷ7 HĴHNd4n` }]0Ca)km׹<e /q6£Aj }BÕO؉vq.%&R ˮVHB(,),i4 ƜgsI+KN#ʍ' mkVgb/˔Tq;%5MxH▭d>NCay,8XͻI̵t(HV 6R K K²)(GRETUko#q[W%B(,),i4 f~q/{xރ{(xV_|2Ud#D(,[K_QUff(ry$%peH\6Vw߷ !e,AQXz’Be4vq:ַA(,), ! a]XϦG1+2rnܾ�Yٗvu.];۪!i4 K KB!QwST#wb,6qYo顼u0i:[M nOc?H$BaYai5}+F.Kv8xbs@>n <Ri򓣸M%(,iB(, ,e}X)o\MT,8'ΩsWKcO=<гZ)VPXsSNsQUU[oԹ֞<yoo0yOb]evGc ګBO?C~6W3a"rr(,), !r{x1F/|ԊO4_fz7ci(,g~9W] 9q x!ܹUŭ}.nt882{TܤP\R .06vTL>%| W7i U%%!WWX9DP#]\)zoUBC?!U[.n񯫰,+/7ݻGST:JOkrȧ܌28y:ē OiC', K KB!(R+.)Q)(WgմK(**&:-^ai gdb4;t]6mu_Λ'UCMsב!G0L\Mߤ$J K;Oĥ鵴?XV[*,k^%>}z(nPX >nٳg/5- ODQ_2c=xhz,),iB^a9 ak^5q9 (AlXoHA[@Gث臕W4jϜU hd[7mlw1ޢȼLc)αܲ}g9uN K%!wˮK"[# E\n8YQ)~BgVXRHz*e[;<.,nX sm۫^/ċ8]J%eFe%jUr?4NaI$}yg2t\wdY/4weCle+’BeKVxcαD C(, !PXpa)*\LUx^Qڮ iWʡQX6"e奈 W;xnSx#2:e|Be>kWT},۰h-CX^JM :!89&$%O!41}R-Ǐa=[5"2d_xdtl~20|HB%Fai ,PPXP^KIĿمeaqxmÙSHJGvnz$&̹EŅf$i $ KfNX;aRp=8?,((Pi%Bq40R{%$I*nDI2A3`*++kM[WХ-\RO�W.'M]nѽw_|ɧl!4ZIIIFЉ  >R+$*"<s1R ǂ<HH5Ҝ%KȫIXb ϶._Z 9 auqOcfi1mL\BaIaI²iUyE9Nx#53 E%WPRVhTTVyyEE/KCskw޾}1{.l/otkddf1"PXRXhM0deWKMRZQy*MRؼm;VY';m0еѶuA+WZqj*BaIaIxa)ǘ Zm WDFW2uG +' *p۫&8Y9鈈 h(ޘj"4F4wjإ9gq:."PXRXh/Qp4�YxW$q܋w/!1-޸7L"q."9R=ġwLĤ$'>!3Sm^e߁-ͥ$PXQXJ 7F``E{t8u8{5{.MK" ݐKlna),c#Qqw6Iye)bϡB6Re_KU9uaq,8Z WJGaIQY^^nA0Mq=<|@۷w1[wlV?f2!#F"5=] ;v'O$|ȈQ*6MVv֚MVF|̈́ ipJ/6H/(GRETUPT7n~DM=!luع q]ǭ[Uw7޽*)۽wV;׹SRӔJMKr^L<5D>ScM)G)h|>X\ZS\^{?2?yJ*%O!t%ۭz,7ysN:_bo|KеWo<}TTCW<=[%Ϟ=Sszz5Ls^� ʵΪTk.bhݾHȑњkڧ:k^fϝ]ptj饶Pծj]evS~C~L<*B Zs5_QUff(ry$/xB(\l*ٸ_LsչרIbQ0)v()-ŭ۷`sTM<9R rMޭwP="T._aPk,آ7th'Eң,_/_Ye1UMC57wwL: %%*ϵ\w㤄X@zܤ)T ,]4҄%! G;:𗕫Ԑw;qc;tļ`=쇹 sZEEzN :0s\)(~湥N_<ܹyjz/__mX s,5"9w_-&kݻwU=̝-VBj{�tDE ldRRyZz 3OaI!AtNvqww}HXi{PM pofv6FFJݼuKnz,Xx_.2 ,kש{OXhkooPml-/=#٩ar yVckz&λlaG 9%IK '%!WRXv5qr$ %`X:±/@XB!c 9pM l HRi͙ G%\lUn[{/z\S T{,\RwHevM"K;gzky'},2SįeS=-gXjť ".9N!E K٣!Vw9n5F$l*,D:cb[zz.Ao5oR>&rrrsPPuc)UpMI+RkY{R7s64Yj% JF`y'j>hIIZcNXUs,%~Ms,),[4%*), !}, M6">cq;D`3,6GcM0Atka2]I-G++eO!eoˈ5 +VULk!'OB28&% kdUpS64#+BU,4?Y$qj5',e-wj²e |9Ka*%!ǏT4vŪY} քUt%-FaY7$beCYq;0tI, Β:UZuϾ{FaI!RZيV5\;4i$-: K|֒>H!’F5 <̬: KIHaI!’F{݅eLl  #3C\ʰvJSp_JIMaI!’F{݅E\Jϥ i|IKZQ͋’B% ˆ/OB!M&, !%!WFXB! K KB!BaI!B(, !B%!B!B!’B!ʕ+KN`` ***\XX!)aӼׯ_WZVVO#** \YXZ!)`F“'OsMUu Ҕ’N\X^vMuJ%/7RRR u i} Ǐݻ%Gʱ’uuBRXi} GΝ;F^"Y ÍzGjc}eCԅڐ[o\O gp*z_Yd97A] M}߈Rh "{i\im}֪ڣ\],-,?\qˎbE΀,? xcf5JX.BHSmuSvVURf@̙pMp$,>|[nՙ�Gx,iɧ땧~6uBʱ²unjD%ll|噬;:f`,^] gl{ >q{m\u>uBRXֵݹy.M0h:j'H ᯊ&oߠ²RWNh\.nLs8h&Af_ ѥZ뀱&Dh.\ UG5QKʵYꂅ8=NS\?s\p֜o>G3H:L?ξJX+z`t[t/V|tt֧.BHSPvҴi6H0U9? 8WҘ3) >ڶG{o4a)ohT|](ۍBnxh)N<:<yߴAiɴbŚWq,ltRul(+,S,!J)<h=퉁(o=0bI ZنwmDi{1cJ4M Xʬ7n/Yt?|zW>է.BHS ˺;66+Vt\Z^ќ_y(_Rŕ4Ϻı` x}P} KY^=V"coq{0<rwŧ])Ȝ#}uIt %%Få@Ͼhݾ#FkeoVDr}πHJNQٗ/+qrr'%%pc4m>ՊLݛ4a1d(<=kURu lg(mQ|Iv6 A`x":߆_^{b&田̊KJ7iVt<KTNcb*sf7 Ҕ²Dшe_}3Qx1.衐GGvKw_a]0צ4B-kP-菧 [0kfͰ poo/!ی3a.[åfDzzFe7^e#&L̬,ŸISIRA]R<w|kzf 6}Lݛ4]zF(//GFf&/Z\V|کuR:M܁_Őa^3c+J+U}g{nin0L^͕|y ;\0~˳�UwMb.Sf7 4DsMG̈s%NNBF? 8T^=Y#33doio]0צ4<̽{2pmw3z##ρ R)󸜓EKF7>h׹ f9EVv.\ 񲦁׺Ku[Y@|%b|<zΏ'u>yVY {喿JNxOXKe0Lcgތ^2=ֶ<)G)O)צ j1X 'PxE<’2 ii~ 11ZӚ+Ksy*7suO] ڝ|h+qМIsZp\o]0צ4r3tֆ\_[>Әex\&'><=lzDI7+Wā:?)Dx~ Y\\s˹=?/V_PX]!??vCQQ*@t7.3uoҜQevGtDDQSʵ)Bmj Y.3a`=dW23)9YQ~">lV!CWʻr1r3WBi ݩ(-El9&!g„hO$|Dgdmk,iM ڔ|7}DZJY^&R WudzMx g<Wx} ~I?Af'.n qq:w JLjݲ8hmZ,ISi.&?sf:R.Gs^*) օɨ-N>ZwCj~BD_FJy2B~;O}VbҴ5<LO] iwʊqf�2G9R6h0#qM8 {0ƛj,mS}R&>Hrn);&ʗ?33,axY<'dž޼ Ǹ:|&کW Լc0z]a}Ukռ'c:]]hYlپ]7oۮ2سtMs5L51PXXGڔg]&׵.ԖYk7tugN�]&oۡHxEc`LX~+JåZ GT9z]HF֔<LO] N{_?z-$$++u đX~Q<'$y?L ڔ|7^r3UUUj <Ǹ=xm<f?yG~vn:l?ܚ$1 3%Õ5tCu_JLԅK!^_O)ZkME詐sӆ_\TrGR>9ޓVSOooeZ{ |'jiRRRMQBt|:=f§S=y0>̷m?8`SXqQTd aj]_RF֔<LO] N8H }ݕ;wo w[ҘS 9>n^@;Q'a]0צ4ܐ܌$2Q`TO䓀~x6O'I(9<Jhd~gؽ-=RRRMQʌ~xt姶^jeGM9F<>!,& Է 0�Ab۶UkOB\b۵ӅKQXjs٦Rbm:H+CjkSԅv0POǓ=jAՈ<5t3z۹!r.˸!4nwrsҭ 9?oxa)JWnFAqoҨԎq?DbCjkSԅ>MUxg&? &QM+!=3ۄuBiw._FBk\XƜ䐗)G)O)ח.G]:?b 0polg?9 uBj7.TgKXڮqօBi 4фlI^rǪd]`] lw}(C၁222KNRR:TpBiʡp;oK///DEE!--H:qDV..BHSXi}l`UҕJ^Nb ++K}uuuBjt;opaV[0'/_&/)\Z续 Ҕ g|FB!’B!PXB! KB!BaI!B%!B$B!B!’?!B$B!B!’B!PX(, !B B!qxB!Rt’B!Et&e����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/front.png�������������������������������������������������������0000644�0001750�0001750�00000215501�12161032160�021356� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��������`��� pHYs�� �� ����tIME  ֘c���bKGD����IDATxdGu]uOU! 0I""`[6|lm>68 0$lDB H H9Lկ=wj_wbޞzUn[Vmu[Vʖu|ugK n/3_{ky-q+~궺nG άV//*nK</׃�~ڽR9w1{aڝUYVU XR@q|%߻BCSKKӏԉ6+0bV 0궺YX{g UE7* =+,_ѥn ^~5y a[V]+X Y�(ݮ:he,ޕ7{t^ 쵸%@⺨Ce/ \~>6T`ef]Ωb:+{o)LxZBߊL4={ͽ ҋ<=q߬Eǂ{#A Y𨙽nv "U�2t4~ɹjv҄j @((=j7r�B6{MQ�+edze]J3fX)=^܂@n$OVt9ʱ*zܯX-T)*O<__O~h< ]{^>e=^X'{�t>2zڇ�c39 "9 ZPKG+ Җ2UY-b:ˢz}vwn]{3`+ pLE^>yxY0T'OGVG`_m9࿏4+:AeM9 弔Q7K@aSt0CrP_sBC{*,/878]"f4Ueen+w'|ٕW,.*õZmS?Z)5auBV`s=O'sgoٵkWqbttԍ580o߾C{9~?ǧ~pjj$3>t TE)�~~~AFTXk>eq0sbIU73PP}h� �u`)8%By:ס]H;,[?44׬Y~xxx߆7l0uu[l?76mY~Ȉٶm۲K.dWՋ.wæQ ҜZǰG~ꩧk;87==]ƇGvO( qrtNG{0"LxpNy9�>ƛfÂ[trh@ s/S]: Pfp_)Jnm4Yk}8 Aj5E8p~zG=s' ".R|U@=>+^&fA�z=͛7 Xx۸q<pk:֠-|~>#fr{37|'@?]~FG�: xT7_՞޳*zV<|fff��6T�F?sP{ϔn܃M�߁AӀߊ7fh Rh<4]*`usõ}U|+r$KY\<^zWAj*0yHӬ-vgOϺg#~A яx>Z�o4�P9@'@�O-FEi}׻uMoz"Xr9<C0 Ԩx*A}ֈy�xطuz0Y"~1}4A){ok}6g t%�ԯoYw/s_Qz2,pk˖ <E?Ic j�y WI(v_kgg_^�h{42zc5(�;T#�Qf,Pڙ6: z^pI7akŬ#r@-Nbyu&SH $D2o#îA6ᯙƴ�?96o/;FZר2{+Aq]>*%{ J^|>^&*ZCXGڹhȏ#^҇>g�Byy!:}3!zހIm?�_ `Ƥ!;|*'e\?9=�Tچsݻw{:sxi`YwED, S@Iv<+yg֭n۶m֓{?7DPjD[�7�:cm_38ϛLM^hAh=㶱3=LYMzϪKU3_NkOA'AXi*@t*Td:Ʋ><ëcag 0k� As-Q8�LC-?oXnVO/3W8@`u]q·7a"'>Fd|=Ɋn*]Uۍ8Rwv51<AoaC'=F@qc7Iy"$`SV805�B4TI0Ox\EY�p(;nNbB'?KUG~':9r үH@0dwO8wkd?!ϸp؆Zq@? ִZO,A~~d0�>|1xcm ;wn#MaV/�»Z-D@7}CDHd "+@|';>8oaT[vC8D톈 %pЀ6 z<jB3<L۷o"PbtG�iR, \I:lݴb$u 'rQBv =N͛7ٴiAC?g8 3z 8o��� ^DQ3)k>/<fж"dRpNj ��03wu/ޖKHL`";"<!?%Vb'+S#K $^Z=w~{0I;O oٲeO\LC=S[ ѧL4h,34<1MٳgKVIn�UfBRN@ҭf7H,nyEGs7mVPsѓk sЀ!Nr`?a0 4 l +MJDE[sM4 Mcblq.d0,uvTߗ *`J)IViN5)NoAz σ9 h3,Z80Vm`Y[ihW]u/~򔧴}*� hwghRYzw7N;͝|m-vxYKM=y-|*OIO6ǧ ~�>>9,:pIF8&8 tƌ3md]ù]@Jct1hȃ�Z>[H&Q PGq;gPb$R|ȯ31}? h~<nD028Ic,W,:ޅk׮ oOs|s%m櫀.k3:tOXs#O{zlZ G?r__;;D y/"|;qq=S6W>ٽկ&FQrɢ4 y^US[8˟MH)6aЍp3?I 8� mT5`&Mh°3xlZV(N?OwՂ|V#0�E`4 |@ >O߯0}|i~P<Q[XQwrjs#j(ɳZA%/fcE_>; $A@z E�#E,:9syK?2&Z@ЦhN^vuUvu*>cJHi?K(R{#n p BN8}uۓx'AAAcٱcGR~s)¹5\n&?<"9c6)SVciz0| reHЌ2Mc÷_3zb 9OGftIfAgB~>h@S\ˇ"g�.9�6_f<inji81T}R P <I D3yN>b">p,&բ6~]Z%v̚33Y Ͻ5:{[ߚw;:+?餓 (O| E\` <̵Ef,]%#�45Ma"pdYrl5-&IJp_ҋi g?=n='?q_Woo-m~B(^G{`} .pwg?�;e]w]''!&~k2A)%pDY>/¿_r"3 +2^, "3xN=Gh lr8y}1wdG3CrZ;sY �0� Jr|pN[?udnڧ>܃Y.^@wɽ`[0O< %9ci(;E:ڀa~0Lđs>EI2 g_WsY/QvMH}GPc "7rncm.�m #eŒé++A![*16S cB{f� ([*X=ww#Eˆ}cc`*[ŀ`<3+7d<)נh2hT׾5#Vy哟dߣ߭4sCR%)jx 5&ϨXd~+LHM3ҷj;ZE%.`n6k�E zȤ-~�k{, vi�+m۶_{}_;�뢋.>l'ԣ_xᅡ7<]d^ʍ_B;] M@ڵ?JRHafń_TN<^Uɱk|xe}!/DLLI&簨koWD�}хtb BD,ʵI}[Pg Κ5_qP8vI'N=TG1-~|zf~~y #8& &$.,@"HĖ-[ Wa0s\oo/~7bΝg/~` f�TigMn>pgAKk<%j�26I qȔS7["o_`s M\vЮ0yѸ|;FZe6sN'>u߇5׿^җ_|q3}oWO|"~Ԟ'�8� }'qIs1�>}e/369Slh3Q}B EB߅Cʬm^TWaߩJP�elxv @Lӧ}H�О]ez)}w]<Vv�Jzl`ʤiodóg?<cZ�3�4Cs/U`1'Rs3"w9d᣹wL}/ZlHK={4<up.xVx"L4^{<{_M0@2c3ژ m0B//}%b޽OӜQOo< |Lye]׽47 }ϤMkjt<Y,qEǶ54 <=(}C'� ':~+瞛{a2~.8}sL^wLmk<AܔAy(g)j.j\[ַh#N栥~UDVسƔGaq�t_W% 1N6 DL]jtZQg/@l ,:l[c5MA(Uz b:WY?$Ei$4zJF 'Px>gr@*8|}vL[AZܷm,S<;_iC@�8a0X\h"^siׄa~oy�c>3o{Ѹ<�p7ܽ{7N�N,wkJyF!�x?b �ȞP8|K^~:mh5qh+&4>׿gvQyWfVY)nA(zL鼊KC)e`;/,/�R+*Wʜ`"^GyZ%RCkXi3W0qbJ�8Mq0�ߐFw{5iO{Z{ r�ٶQ ]< x4 { �:iXLZ@PVd(N<M2dsQ9kbʼnDdP<v A0W'{_ >K4h+.7p& P\}5'F`L2x^)Vg@cXHkp.${" 6LayCODm{<S/b~3L&^qfb4;zYg8ڎ1HX^9`ΙEa5waR^G0f*T՗E*d?&A]�`w*ckqW/e^%v@�4^,� PO|bU|Am@x^9D~'Nc1s:I54.,M/ӂ,MMJ@(eLpa˪id2HIcIۖ38 ;|c�B҇H*0T}0z)<k#HM|',X534pa ,|=0OI#E; �_{ch^BB!|z!d� +0U@Ύ|C_!|ykM"lh ӷ-EfT7YȁY, V;UNin9,$VxJ~ز]G +Ӽ %!�AT�g.*Qp-<v~|{svŶ$�BÑv\ =xg>h 8gIx) +dD&ⷾHV.cUMRlJ *#Nazk[+ IN|V6!i22BH&HH[g皫}XPst \ FR;/#FbLi_|,0z@D > އ{OOZvh"836mTDz幅&Qky3i0UX(QKq2UnZ_TciS,kNV 'WòZ`MC2JHKoE` KB[ W`R%J1x_̺j|͟韆k1mr Zv*T2(șz7݆,348䦣ͺ�B'"D+2/ipx*"u#L;#zl'Wx4T&JWϦw VH"~(ZDk@"x%0j t,&;wjV˰@ttNXj?II~)9T>8jciq&#keqRDrpXe<c}&ZM 15Tc󵚅kC:.K;si"v _?s$5 ǰOz`to8XFmiWL?ȏB hJ|B9ovSn b})X.@o|d׿ t+Rb~~g3 ?̭Y3xQϟ,EcYE:cRœC� tA03:L^ N@h7gԜӭ=eαNRE7Gu'EDRU\Df@ a*ꂱժ0t<UdsI,.\vv@FeH@F3iKN}Z8{eJQF45es 9H"2 �C:~Z0R̭'`6G! (jF8ڥ"yYYհFE\8 tia ƚy.`gNw-mkIF܉'ܖDá"JeU\I#s>#L6KSiXb}h9ǃpF>`y/|Ppo~YzVNOoZߟz{7<4<ϙS~Y5QNiQ^S;8aX,P�>9 }N-"GvM*nB42 2wMc;8FsM<k5"&!ˮFrf +ZWߨ5ȤQ("F!\�Mh!Ay<.L*|Es4lʴc}fƇ"\d)]ĴBRa𙹏@!0LcnL)Ac1k?>OG)ww>;{Iq3A"Wg5@=h/,A}`nqnx۴8w͎n;ݴ?N \r%(m�J9DQ h(:Ih$G]^dxqq@9yN�1hY� 7ڤTBx{Jv�Ė28vM2 "bl3~zDVC:n͖ MZN�JEJb)i>�˗9(=_`"v)P}dT)6& j �%0&YЃBc)Be =#&f3\+;W2\dfi`"u֓fbLl"Ҵc1ԝ B-E=2Zs֬ !3=$ m?a*wGИHD143�Pg:W ў@_IsAֻ}Mzi1=2/nZ'tKLX<CEc{v;v'w'w<nt[6o�ow`kl'f"Oh~g.�8?pvɴ;pAC Dk8'Ox1O8^Fsh%= 0)oE1w}x0.8PT]v': H- 1嵈2s) *z<LM<xw¶f?t52H  Wy//)KTLumkr~uǤbđXoN>E=OmWe s&R� D &A<Iclʴbyd&U!.CSA",. QBQ8ֺOSl?SPZ@kYmȔ뱬V[o[gy4r}FȍcAhC5,*3I͉R])"y}}&_ݖ촳Zfjhz<5i<ZZ�µpԍ7ب۳у{yuObJ.ro; B#| mB+'v@гim t5\>LP Sh-͛ W dHMX~㞜\/kV==Y,xMƳnd�%h"~?:Tq(q.ҀD`y^xa,ЛX0|] uUJ1Q|*I@RBY) Km-9j<462Ys+@<7g*�O?RaE+3XEm~$qj:E5ɥ]4"8ϩ60bĭWHᐿ[&XTfYЈf�Dx~dHV}߱Vf"@9�cxZsj4՘,Dhk25L<7y`8o:KW频 H6'g~hy*<�kӼ1:17<X rʺQwpT'Db'v@@m8)`ޜ|gX~1!)]i#Zm8ϐyv~9ID{;/@ՙޟYH�HvZL=qu7߱MLNi7:; [Bs9 h A( -' B&0ƒh`.얒ىz"y%^1Iv`J_VN1߯PFY5]Y DCސ]Z{38&)j �k,)-082^ki0$]Eݥ$J "H4#/yDHmYk}fb=X63ԛQhX 8|2ZWDfcD @"Fo~-D'疝y "0c~PJ$<K˴g.wMpX^!r;I))Xf&�<?vx̭)xRc6dg^ퟟR'<)ڥj$�͏!:'c"*em lv6[do4s3މ�HY^OpkMGRdڒ~= -]90z1FAc ; e4pT%cX*u �THqO2" HrO$mlH2aʡm2p-*3"~Nej iU@e�+VU{FDG-Y/),plA-Ef% DhRW=1A* X<z<4^4g]e0v%^Z/R柗�4s̹>3X` p䝀"QDlpfT#kCneEc5ky~0:&ХJU3EkuG 1ϽC ~m۶ҫ$JY4xKhMXŽ0,)ce=iI8#bªҨù%e<8gTM[n=�`(F>ej|$ m� 7L QRMy Z%8FLgeQV6!UCm!2I['lҖ<JmDWٰjH7 =@r&{ieR�UwÜ}h̜x\jslMce8u*}*)>Tzr% e] a,mù w kL3#A kv˕ gW$}9ǷjU {̣sʷuG T| m,J$E(*g]Afp+-TP*9R�MW)\1�ҩl$TB嵎JrtkKZCfiB+ZXI6KJZxf )ʤn{7gwIUƺL\>XRҠ-QJkxtl)l7 B LYm4u[dӸ8:6*i[b�DMT|ND fxȫZ#N = SLKzU&/MdK% LL8IAXݖy+QK&3%0l${ɕ馲ڐnhDhjܢgm_%T :eV'U+2vDi:ZRV{Z+]ڢLJwѱM\'ztw|$-S 6]nf`;p3ӓ?hpoظ=𾧻F/?IYD0 H]r>�VG%7}G- _銈̏iU=N(%*rr3>,lDa><<H•t'!21c &ݻp-&T葺D܃$D:Ua#ǧF~*-ТvըK vUʄ DZ81-̔2sm"g([ɵ[ȲcJ5e)eRSU(Ujx6np'ٗc7Pσekrvz{ȖZ:0dPt݀ ikd n p627& }{_~W$7 >4Eƚ$1"<� 0sٟY� Rvhص xM ~i Se8�}C5!;n6, z8Wf+-I#mV Ur*<p?M Qn"ؚv ,,ȵ><vʙt xpEz zF GNVOZ Ni`& QM~3@$ >O~ 3>0 >UQ5^gc1vh7Șm'QB|+awelS] fͤtaPp:l}o@��(? X_|q/zыд"g`[hw'@lxޑ(44x*9%#tڬmhFL҈ -ehI"ʳJ+cϮQ? oI<tooM699&s1!N5/NmH H41 2Zu$?!:IJ _D`6�-,Z9mg\``*"0 \LDT]lLPrwbbb/})0rJQ Ir$Ai3UMy2Sπ`J CcRI<dH0&#7WQ�,>E/CٵFռ^ ĕI/[/8 s!ӣ9<qVH<L[S!I �|G v$Q AC0~NxLď$D 1rFPcSYD}:h Y%4B0k@~d8B@`YK<n�0@@vА$]#0l-mi4_D!?'-8y…w+8JP/OKY"�h Du[Oh>AܯLb,3=?4ir'oFM#HLP[XJi\îBp>Qe*̡e(W`|0r$>94�ϓ^WbS M9ff2΢?C(hB ZVk+1$F@Phq2n*,fY (Tr2RUi<-kE�bFTU(�t cb2.j!A-l%6 `szv8D@΄f3ɵw%fWoTkl2Va`4^1,;ߝ&ZLlH[;b#B@%}6psw~)6I3K[ΓIl\$edtJL?J#(vN5 W$8f=W=kfuZ|u[:t=^ni*~۶-l+rUB4~WINy$*s/{9*/)eW:9x@XS=>_4Wdu[VweKEȬ%-;ekiyY5U~H5sU< &Yjܱnw!|&d28RlV!ʶ6k?OQ5E W/Զ/Xݎ6G ˆUK&5=?IXL~Ί:կ~u"0JE~痯s{nÎnxֆiw7s9qVw I{٢˳ƌ}21r0xz*~wa*Kc|~R@Y{(3X/F=Κ.2U,ŽUdJlq/:J *ENclĄF qo|IvwߡlAZ*qFp`E((j'z ',ARQaBwᢊB.e+#&�2cKUqy�ÅBa@B&'4aD<RZ:&e>/ƕڢMNm" ޫ ^`bwg�ѢOvŘ#XaнːƖvl=b)cBlʌmh`HYzN[O.sj*)IM0I[ -!\$B`s_FZw4Ph6 wϿƔ;\Z wbJ?R@�[>/A%qH+%*SXa0 &QR$B~hZo–b+ER75ve9eXA|М8}PH2해- lKIg Y5wF۫xڟ+& {B. ;jY,{B%)�1Or�Z6h*<tԍDQv[2ŏ̘'+?:wN|oD9J^EB~sf}8yIO%!ԧYg �guRMI־FKdHDAT ڕVp43 p08#Au{Lhhl0KN6c\,k`9|uXV? T&@<P"a\~[[Z&>vӰ3 ]`=p1I1@Yg΢Z&#`s2?0_q- 0aFlFHH0$$&&- !IAAl 8 XA%gAҹw~)w= dWvq+) .[]a͖-'>Gg9g- {$??o/䃖J Eaųg׽LTj"!+גTۅwykMB »(�qOzғ¼s~,ЕfqT�"ꀐ@*3)yD0י?0v3j ˰5M'/x;46&&gԌ4 p'l[͖DTubzT Hgtp%/(PjVdu4  2J/U>jX/*3wr͙v�+ #tv767 1۶>v71ǃ5J&D`Q %6 нBE E2E�pTHD=̐6L�ƈd{n0(3 DfѠXF<[ @@D �ꧡޙ>sM,& 4#nA׎EF|QDlT.#%.15ؐDI߀ DZCGjs%&ylɃ_t3m9476z96Lr1xGSzeHHxwn`9ȏ]^'ZhaaW( __b#h 4HT8GfУ )p 0Hy 4/>|263ZL֏F37njhs|ʽaW7=Ni D֖N[$TM촶zIde׫�q�(0"&1!Bh,H7LFtsLfitѨw;mz?towEPW,öٶLZ b^Tmjjf=oy\;i KP rZBRʹ/ת0#Kj`V$I`c@w &>�FZhWIN# _Q!|}R|>@KaeHzU=Z4n^{c�y mIbWH#q] APb@r̊cc_ R m0N>jU.Z75ntn`h[sLKhb2)Z�f1'<nc&@Gk4۾TTQ7i#D?VTnjmbB3uW2PGۧ|"˖m Lwy\ת0.^Q;G� 7vstw嶻qW7s[`d Q"KMl*MHi@-D DGVms?njfvo)}8@VkwPS/m ?Jz5is1яܫSJUhcv9Z=_˚;ы|r%XI j ^*^nw1а+7|)wn`p W[HHwt/=w{iW01`<b0/n"a7Mu6mW.FC1sa=:~Rf'D׿9D~Ԥ-_QD=٠Zuf0g"M*3{USLki&ҼN@#()U!URvut/WKeS~הS _s-Zߦҡr R$ A^p0D~k_@݉8SBe5nD+7tgD5:&mB ,1h"_C89H&p")ͅςN>8Y3 \ "QٟJ0AuK6ᾀ;4EԖ,N+A &½ ɄdF8Z2džlFCe NLe0ċ.(]iD)c'J 3R!9ߠ_E@Haکih7YzAi;fO}SO}jwJ 5cy~ ILέ(,]A<ʕgWm<| i6&ڙY 5759ZֵB4|8�(Z axL~&fB+R�SQg.%AX/{_]k!YMfi:+f}P!1;˅^hD;|3Mf C9Y^=o68Ѻ�4|'<{s9a-o ȠkIc5Lhq å} s!bw}#_bC ?3)2(ID  L5TNZ6ތc"k&!/o 0U#%$2#Jc1nl-_ZVԴ{`<h"xuF'¢Rxk!v&$Y3DLJ^cP! | LT&]>aHOZX؝￸r#\+@+m4VF2B tz@+0 6K_[Tʲ{�U&׾Lh1yBHEA s Q|H÷9 ZF8 "@ dw -FĻP7�0k`�da܏wB[c Ki iW'̗w�HVbeNeH7M@>׍~:PQG@c/yM3h( lurco| 79`>\HoEUA̲QL:9o:[ZTt")I$8.<-mݫ_W"-s;|`yh@ RZ/) idEH;̈́0< >;*zL"p+HH_x< I܋c\ 3xk~i Pg}!")3VSUfh>\wA:_x/=} Ag Ba+9h.MnT[9_¼7s#�IDvsq%m@cx7hDI'CH49kp.CP#cs$ƴ*=ƌyA*ؑ4û@ .ơ! zF\ y_=+ -em:@4]N.(gb*7@ #dbÁ_I .{588`ϰ,bwMAxLڃ 80a:wL*¨D7ba  x̔<im OxB`0OA<ʱU̒k!>dL" ٘̌ E.dB0\)&1Ɵw]I C 7h9�>670f sQ-6 Xհ!hmAeux31/~q`�x*N2l2K''ڇa+01ހ*m 3h3@b.dh{7y.cP,o8&(-Ԗ0.Z2|@f\hZ t}Νʳ̛]&z)׍׾'!_;-2_:FH؁!$:L& #E� \75y]tx$c=lђUf1MMpu<S9'ʰEnlkLlQ&�/ ٲYM&n#$ԟ<ώ)�CA�F4:g"k'8OEGjSYV*=ħwq0E1/Hyv%Z`b;"Uc@_/-+ȡ0Xo^hlE]4Ww~ߋBC~'Q {L%9˾PE+ڤjY-9ҋH?^$nR 1Ӌܚn8ebqJ-MmK.fV[Z<}vz~Yv1~XIIL{@m$&Iu-N~󑂑ӈ-ƯYlKf]vll^cՋSz&Y#ǭ@=ϳn4^|Lm>5Pe (O9@O wN67_JwwX;%ĬqCm u\Y",*=󘧻K.61w^=ۺN\YZTH+Rd|Kcc@p4E ftLMz nCnQ# /Oz~6e.:<[7[7u qw5Z c;Xoi`l7Me{DշpMON Lщ֭w{inuƛn \Ɗz Jd3P4wn ,-:?eySNzt h4*MUai6=a&2ԑRGDBkFKYBJ`Iϳю1&^[㛮kCe>pkFunȃpQ<,Zf )",5k֪,:7h7n6#+𙨜[7 nVm}fK izM+[-š[]浌kE7v'8o8p2B0pR"m�$8A,gs !c  UwDH3?e*(y,1s.i8�*/(=E k.Z,w898UjZ1=لC'fŌvܧ66BOr*6Ȝ;X摖ŕ_ીtL� *N(5H!@uN ` [B/ RXTjX,m0w=>YWysYm%$�Cw; M[vzyp|xe�rx,JMypn'oDK<=Vqij ,@ثq�4; . &1"6`v eʑYlu^>T$8.9M `@0BZf`n <ZH'�"IDvq>CD= A ڃ96Tch$8@8Ä e&KɖD]Ϫ�;o+ " /5Qsy5[%7l@:@sWkT,Mqm D\zl6=iE@1u qm jɠCħb HÎD �!dwi;q[oW -a>֮iOhEnsR0=-rN 'O-f&1`r= ,>*A(14O;;gnu(p]�k- GZ3HZ_y>q%' @BJP6FǵtC_t^�=xPY< m3U]%8׏ z{2h,w–nǮ}ײi'l 9Z�ɩp",ԗo۽砻ᮝ0P= 0Q$2HH: "Fځa<L~BZ`2p>L@{Ad`j ]z7?s[8R6ׅ8z1yu<mݸ]q@\KU )(1I!i*O [>66H%Ta0ey.{V� epm3twf.nʙ";Y+3P� 6[h1Zѐ>o`GeUN/{@b\/2 $Ap_+47~3Q2N+ҿ~E>=8tf3nwݾIk;06ᮾuÈAwkrB#2h�ns;41^`j% m'fܯnQa{[5 )ZR@}Lz<A>8<70WR1-^$E澻:w~ak,*{ W[`T$[^z}^Aqh@`\iu[M xǴ )+zxk~GbbS\<ũg�<* 66 ڧy73vs`J%#I4h^RP÷xwU Bw�Nү6sڹټݭ׭ e.srWVsp<\40P GpEރ^hGD ':i9"iӌk/CSdЕ4?f"lCbծQ7rg <  0kM#$څ]:1۴vc5x` ҵ셱Oph' 4<gT߸Eۅ`-jt! UVU*Aа;Pylί KiQ.v�nlr)=Fq-};;i Y EղE;16RkI3V]57Wݵo֩ô Ao\Ib} )cnAޗ:g,NRS\޶5E[Q$K^AFepU BakMp\*$L0xcX(9<56~!TS!DV)"-Al<vs?L 81C]� fXj?)�&-zGGBJWnh/K0Uu>4Rf_ 7/bF ^YizYpd 7+&mfgULme+/ l>{LF*U,Ii/,&&ȼ�쮘 4Pw  6-le QLJ5oqx̻v͛H&ꈺG�'w}{C(Gpc+xu�#vj�@R[]uBKLwVb[ɛ~7RmU+b_5-Č$sW{אI~6C]똶X\/yZ`̓)Z{ Dfuz3Xijg\ι󮝁+ @ᘋݷ}r7mn +ݲyK` S ]U7I&2,_⊶=J9Ju JgN2*aFS!!�-Br6j1!A P}J1#`K;l8Zm"@ 5+*y!FlY3LSfXui,R9`.|%R3Ѳ12ZzPkBFkU#WOپٝr{x&H֎m8 �6[$kk$2:{VHHWav]Koɠes]{4VQTDJ_� ekWn;:9sazǴ Ww۵PlW,nMZ)dUm1kQ&4|Vq;p10&LG'tG-O`h �R<@A_�"$IW| ,JĎIddM 2 &T�Cch`zblXSh?ϡ|h!hQ%^j&ll�Y9a4N46Jސ&1h%>3V- CerKZUfST3sAY缓aQi9`-̦qH]ث9#wm^gT$6q'l۲m߼mݴm _Kbt,#w+hMLMvs7,3aoվRo4ι'?qW^yU[8bqab컭8Go|@ouWݰm;fP Z!'}g ݼS[/N%g`%5h:o0M6|N7>kB[]7LbMzuux]1=ܘt\pA`PO�Fͱe$ Ln9tsPeUER4gDJZq}Y^^o=`mj5> ! ĿiwtL:F9s$t" P2s~S֋0Fcǜ$0< 3G*AOB Sshk#t ULQkO�Ǝw}X|g{!/E_U4N5=-Ѽe^deI<EBQ`b4107L5yM;hw[:nnǮCnρqנsa%vu&/De'1QTPsi"p$l];P>6 %rJxo :u$6 a$-ހ)`j8ךr! f}\YHkh7fV-6 fE/sh/L̡x0W�<� AL'0ߙ%Sy=;31+2V*1.>vKߡ@;0h3b7r)d<R[޺Jm4h; UR|l�[)�2Ӽ4<�3^^_}+^ĤO(b,fg.ࡉ b2b&aPaHwHHtLkcp!<[8-,߽H6N1] 9$&\':V �'w;Eџika"aH0D@1GLoi)F0s01)i0$S\VYC0WރV/ĒIRD;�6ޟ~<F%lLL#̅aƋ�! {7 ;c a1^h" %xAWKygΣVz *ڋ!j7N/XB/9]WOHB^onLIV쒶RՔxcM*'o[SX8(R@6* bt~y1EjF&0 Ä4%A`zD`G=Eg8�p:doVbL0m F~7,'7 `X p$Ew\y B:&4@C40&ĦF29&&؆_ƌ5SkŹH7: PLD)9<vsOħj`U€�JA*'L nOc�7ρ֐Wñs==CVT~?60g10kH1OU BV6:mB + ϰh+HxLjUYD�L]%-$MxkAtұc/ E`ovC1D+@ԁ$!f[WzĚ><6n@_!`9nZ9Ü0Xe2Qib>` DEf   <$m~1q $o �f9*&n*E={2AeNXJӘ)/BF3KdUo헶҄'@҆AJ+;VS̄ߘs2GB\yA ']if"wѻ3T\eCALrǎ&$ A1f>34"MXe8nӜpWBd ק+hT(OKZpm"M$Zlfknyݨ+ns5+vT4Yq3x `$6Mz}|A3ѵ|ǬpU~$79)"{Ӟ.'ʹ0G=/q1 @N BmY6шT.[g&PM<EY- Şlx>tWICڗ8m퓴lUVJ =уG`J@h�]Y |Q5|t0Y:>3D²:i*ԲIds=8M5nf9Z܊ Qx5!ecc1'ɤ}`9 hx L� *Ϡ^Ck@Ñ{rczށBbqvG|~&Y8-R3J|,G˦`�(NJHEOU˲!?U֭8@ d'ҼPN'_G R5ݣƉQwIMusBǁTgpsڏNRJ 9 ,0(Z$G5U:NN"Ts Lp78Ƚ@ɉ܃g|#B0Uɵ\¸r@l锉ͯgϷ5`1}fE+ V]5Ү^^3�GΓEkeLONŞ銄ȒVީ5TGhd5zm/U  ֨_0x[ eVF$> ⸑I}vS�ݾ]2я~bX&)g-i,'x8q`rŀ3Q`t^zi&rY/,NuI>]r39 lƍvOLӋMH-Fa^ yӟ~c0C$L^Q¡)g0v@� �O / C(5NqK6�o@I~$ gy @M<[ 0A-#_}o3qih;I+AT 0r>48 N='$rgַ7ᢘ-a~UDZ! O ,/Eߡh}ɹ |0^[*m~^qB[ sdYj%`̧?+t{(ЮAHY&,: a>R5_?u#wCn(,T޽&mpgq|`ZL>I ÂHgFg=Yd&'A"#I&Z {"aYPtWt oq#FcCw 9qߵ]Xhi]D0h/!8)xW-)Jߝ{Ac!QJ*=mJJ� ;69e&r '#ikqS®t Uq6|SODTa@|s*"tx/ʦ'JY DQ^! .c=)i#m3-% Ah;|0whD1hT5A4UcL!]oJ WFxWN9f`|,yޏw@xC`ISRe'E}kx.@B."L,X_ 7nQs3٠ NTV̜foo׉B"3Lp,Ĥ織dsɹ�L 4"rC̝| ^xmmFZn.#ŀ2ANr$'R .短 fȉx~UWw`(V$!r/ #{89BP/0@�縍j/R>F"S2ZJaM JY UՐ*%@gHG_P9OI�:B4 h `FJG_?b#S-�7Z5}FDeR5&O4t?@bN1y'GˇVF�+=#.ƭ^ B�Bz@œe@"!1 `qOAU  T5{Ix#[fЬX@TIg3S38Â'v< Ccm bI Bh&HB|F=췜7i{ ‰%'a*n;}$3:f3}!ށ*<{oߙȩ�.@I X߄s#:J%�h?-LU%10a>ZCə.dg?;H-tr@ldtH "0bj2/ʤhKׁi}2c =@AQT?V O?$@M c&M7,Ek�<W0VЋ~: �I1�I14lV|"!ȩ3`7oΩZIb,DfIc!3L~>|ܘt"ig�eu<�)NdO-WE=U60^-J.FtG2Pm*ٕ<MeN2Ǚ}^ e9;],rnjc Y0٠(@ cΘL> Rb^DS=BcyL^7rVÌ0K"8x&aAK(:o5�><_ -PFGûN3! J'!ѣVd<" iaBjS˜cF vhNЃ7C[tS*IV_TaA %C+ډ6dEm#nꎃqz=]z3FxmwG%`zիe`D8! i`SȊb[+nܦfAVqdNAfL3Ӯqύn䤭n&tr)Euӫ9H@"mI Zi 3 lq\E�6` JȔPs@ Zֳ۟dSEmHj 2.<C?@z hg*OjkN�[uƈHh!_0.< y �F-ŀ) 7Lً ˲&#k8foP,=qLl~J0_k|gJ#.Ľmך4VB鳟U8Z6'hMMwͮ4I^u/0lU@�ƩU@v'EyM2uIoa8_yPm.搖fC^}pmioQѪ+vMYz6bcv;t,$>"/) m~QZ҂JZ;L~*IO{O>]g/7m0 -ө[A\ hm@,5ҖJSdZ6Bj-$ L2w]NjwJ4,t^,=%5j NbIHTu]+Sbr--$'sd飓ODiĔU*1 %*NsIT~ք,QSTU#©[ \*DB5Vhl_3o*`QۦȺڥJ:z]VD@,U6&&J)>JD>!;ypìcZ1&g*28@[дJco^WĝL2_jN95v*'6P;dBQ <i&\xO$j|GB8vqHfE,`ժ H-낹w 1ix3GFwFlъh\1�A%D -"sW~3"ZD\ Swxp{䙧c2!Xed"zǧ} eO#t3es'-&P>[Q6Zam ?I gb {62mKUbu ؠah bq@K7LY!\OЌ`DWTHk7C.φpcǡ)!\cWKHE=r> 2sM2MsI;NBqy'%m /F@O(&xa/jbx?vPKNH$w%L3]f<6ڍAW $TT}՗Hc"!ukv5ǺD 0k p7]ӝvIw1-ɍ K^g@w�IO3pPNEɂMx`HjoyޛGIO/W,6 uAE@aiZ@Q83rG<* {T`z,4MwUWwUYkyz3*232+2_Ȉ|<v"XkIR&snb0Tvyp!1d:w/y/+@3\۹{%W+}mAXG$�^QN0NY_B<Y#E.wWyAyQI<* ֞UD*!.`#Z 0m0JI �RX�q!s܊AT.d�W@6p?` /ފT6V;73g^`pI%<vz LN%Xi@`L Ex3IpԢ_X,Z2/k ֎0dJQҖ%zVi@N88!UNcCA(Vm & ؠt,w_O2؛񙅆POƺ~9~jnsؿɄ:sr N/WKzn&{`#*\49A,,exXK%Qb!BhAQeT!Rz+IX_o'$γFT\ ǭTxҰֈ-"2Wj0'*2T"eVlV>k,傪ҙ�!i䰶㙪:T&'@�aSiƆ𻴛T}Alc92N.1ƚc$5oJ*^:C&ܮTyyYyƴ~6Ӎ#6o(G}f}E]/,;|ɵAa ccAP 6<C#Jg?ökϦ65Wh4/M%ÞnY`=wI=}c'DF{Wo} r59[%$ Rw<d#AplhaEw]_sKd+HzQH?TC~9{}.4:qfmD)H*)% L_!\ϵ>�:($_AW5pΥ2%ߔBl\#I1o}[U P Ie]+/7y&d,'@C @Tʗ눫963[E@eYb bm+sԳ]De]eυGQa.i,/ڙ܂}4 BVVXO- "FRK@0,r$Z<gq; RW^L⵸ͤlʁbp]VL,$,\>~I{aϹ)v3gml*Gؘ$D]>VC3j Ůᡆ�`#2D o:vJ�Sb*CP׽n$QeAX[81$8Q~dlI@"vγS3Q 4�ma%E4ތҍ76$eP%6s\a\RT4t؎HbEUٜ,p-b_j_s8Ӏѕ~*mPv a IZ2`HwB``IC0Q-i$iJ}]61֢){U aH?ИM!jxX`m@Ct]ukǫ ýiGtVV,ٓnb61Sc?/sn(c,^LHLEJ^3р_u\pirF}MB_=6*>U;B�~o~|>'(UqX?A9kAjG5 ;\+}F;kѩ{qc+qA@,R[ڜ\/aY0dXQ<vN.[v-|,vj:Ah69bu=#-Kvv|ʆ{|sN*il'0;&l e;}av=61sb|;(֓) d}%2h@D C�fq 1`BTgB CX$́t BC1\.j1 ِ؝HO}SޤgEQpǨQ/`ٮ)(|HdZqT�N˾I^-?p9U3$-I!۹ 8zmzq6#ůsPq:{3;b [c}vۏ؝ϤSM,Xa wQ~_9]4#) ^H!]mU7~7\u3!� 8�3y`~Ը7]~b(h#V$k=@8g8HEzK!Jeڝ8 UC[awB/<+͐0B>{d<Zp5Vݒmju6وGuc W..p D"n'M ԌvF'n9'U6;9md)n??vIw c&g|^/WҹїmG:W܈<pd|&phi#(T.F02^@iKAe,V l(2<+] *Y\9Fzj7@\s >")1"|( r?ĚQ LdWR0"~3^LgckC#ʳ>(=R)5(mS7撾0̷Vےj}!}D:n#2!pJ:yH[u;Lbyþ7mNqv.L\9w# =ybH9g @]Õ#c$tJ"n{ol"t}1^W5؎>4f/zOXoKvg;cTI zeȸ*cNr6%6Bd� P1|V bT_QCqs= )"=1O@ AF|T`T{yhu"J)〺<hB8O]G\Z 5exo=rep@le�ZqT{8-p]'(50h#E;8o;^sHY>'Tw 'sN/hnJkqf 煹ĞLAؼ,:JbB~;NJ?tf ϥϹc24!r=EøaRĺ5\j9pJ'T)[%_ޤ emo^+ϖǎY2z`ɣگ=vMN N"-R4t 7¢̘H� %�fRۀ k7x&D yTK \G[9GTk8>E5.&Pq|NP4'~&YG x1Zڨ]>{Νya,l j%VIm!kCcT "Y[Dʥ ɺÙCy>JSÂuxjJU JBԎ xn P26uy$Og�fmt�Q=8xJe|x%Qڈr%lҎR{Q63Jl@5wjOYUA^6]:pQEKEGXqZ7j ,qÍ~j8CnAx-C K} �$5WϦ@>@`hFn.Ğ�ROu,vc\ "l9-6"^�8-xBP6{M%.H!JSm} vOj"铒r7GPbG!5 nجw�` 1!\.JAjqD"o1ٟZ4}T)' I[y(u-[I &u=6?Wq0C]s愊ͪݵ^ϹվS]Fd( ~Ay5&HU²'~C:zB|^XQe %CĆ), J; n[cl:#u{0$|V\B6n/v g3>ɉa3Sn!l-䩅TA&Z G,S3>]b3$ȆA0!vK_xB![�[r- 36=SKwL*I;ELR|~!!Lp$t@kM~'Μ54"ݾrcI5H,\6!4³/eYV7ƈgp=رU/ (u2 KQƺ7~q�?� \V1 mw^jY� CZ\={l̘+MckGao Z/jN֗cK/sEْZc|I|C!p#n+*NWL~h'sF6@+V".K6i'zJ"?SҒ=r3^h{G S1{کSmߞ~;7e>"˱BX,bNH*xqQV1)XF 0D$CсEJgߦuV n�98J`$x*u) DVQڭcRwpql**0�8_si<:6 Cb5| {zҼmҒ2%{�ĽT9P g[7jϊh @�jVZS>g-UH!KN'5f=] Mtbg7Fb 7`ed0a @HQ!Ge-,?WcGlpWֺ]V/ٿvS68gY?9Gc37Ra=A@T,lIZ6 /r8JZ Imt8Czh pl �qdLQ1N� `y+8G5EPkWֳ/C|k7Kt?8$H\a?)cfLI "b<mmaB"^en*l-!y~ZάVVT>C� 1vI)6K"al�=cgը<l-۾ϱB%8t}-J߉+Nɤ/Lb w!Rz턻N' ˵KpmS9KgI8ǜOVmb,a'M[궃TeqэEDcxߐ06+Qڱ�8WGb 8 E_FQ Km�;@E䓺;@ � xq umN TDU7M57iFƇn1V9NjHK~9#]涝5ӮY֗S.3iVHCm_1A vaq6jx\w'A%s>78 kzte(}}40ڲR 욻]$U)[8nɄO^^!tstвO3ߝXn`gt؜&6FwËV(90/Y1{ T(Ss]&m"F h@!wq�(KFDH|'$.$,ExIW}Hm\}C:tR!m `L{!@`[ n,OH6 -m~GԧPMjC[Z:50x#e])5sUjLD-M*RPR[ t=R9̪_dVN+ HmSʺG3p$V-z=?_pa=Aw.f CIC:śүjk[z\GKnliqm ~1ʤSnL ف36ߓ3CVIڎ޽U/u=;362X|0aݕM̂!ƀID@\*&cUc!iZR*%}4pgs 䜓4#O(U\<pXU[�[:p+ȶ iԜR�(c#c<~_o �ٔ'.̀0HeȢ:E!G+M`òrTfځQAж&@ԩS*} b D$)3{{J7^;!3}CM&\tT+HղV`\f(3]@3{.[!ZuY>kp(rD4XXUS:kX"44#$npPF'QU9*.M�]>;no<cn65=g3 ŋޝ67W}pW c-Nvﲓc(. #%&㬌x�SB$DsX@V��3F//}T؈xҒ뚟i e1;�'*9u rX!+vZS Έ߁ 2}Bd6%GŐ4g�* ,JlK DQa.vqd&P6ǚm{+^o+k0QFTG 5,LT< t!.Iԭjz^G nR0e%`L C  ݚ!Cݪ}�QԪj%iVBk8o7ؼی?8H5P[oݼw8?cSEˤq .D.t7 ns9Wz4zQ!q7_'Hu9svfrܢkW8yL2n9w96QyFug=ہ”ѡ]/7<EFBոPsVjj綳^> g6�K$4t !1q"S Qe[�׭T �{ } I`Rܷ9| @ t� c9gZ;)I`g/ҟhW04,l@8X E9Bʥ7�$ 4{pW}wg75ȍĮ dPV6 E{L8hÇ~̎<n~ {S ۝r`Nۮ^;;9kFlFWM;7c4v 8ŞUbUQ@csSHZ<{q׎d]k|MHj)PLq @'*vllDW怋éArF2:Bh�6u(R( > "N'VqmH aWCj6)I80΃@ 6D-G)WP v(iZ*ˋ}XFa, �pe# joڈ[hP"4k 2BMYd贓eK H눭)a%L7b6 LﰓFDFY\8=lPt"2>.'gSr@ g(r]bjK׎uz6j9E6 v  0@Nf#S]SH Q;8U8?3D@d�$ ڃcǡo8o`bc>4+^_z/@'T~=tƜ h/s@?dyT:*)h*hjV7WH;Z:�I)XYHӬo>KzFNРod6+r[0�(R'[ܹ]ý680)9۷ h*b/xdwKʠnPwNrwl6;c=/ (3| ~TcjH9TvkXVFYSݤG@ZxI9U #ǸnuEB-殝rgU`=ZBU(a rJ`]!l4pgl1))�5*RL/*^˗@<a\qמ %W|Iِ$spRI| R䢺0c/륌ł0m1(%.;4Gv#6prMܨζ9DI8+:jvhXN3sx5O[f/go!=Up|ڭJ% DZ$ǑA* f5/:�4a}׳'mK z%+|u\!0WvK>]|?D椋z^Mi"prQ.*?R6\\E6fCD׎儮ħy'6flzW$q$Ԏ*r"r Vwx~#ͩJ€XPIAvjoE�04T{Y<�!Im+ǚT^ B_o>g7#Vv $Y�IVGD} 1\o3^2IFPբ c '7-v (nz#qŅicm\MkYoR'$`ʮ+7<fNcQkZBf1KEװ)PÝ\XsM;0T5A'u,D !Wˀ$.AWXϣTUH ЕZϳUjsAp}~6e`EWo ŝBX)=GV_"TisHx.omոo QS1FKQbfM_^t6j'x7Tf4:c[K`A!HlF[U4:I؄P__z^ _dPQ�8U 5uJ7O*,՘.*F*J;%Y^ t;+/~pPZ]}UϤt5X4u�$VZ"@XbaɖRq8$wH]k-�zދn$ĸ$TN6jf^z|U ެ<JXmh&$,:·\fє+rjwc`m:>Qc`@jHbO#a,!K^`;�ZWb𲂀Ճ*0b%y%Pe@ѷJUd+f߷R YO:w9/xn6p&vMq%&Hn:| -\O8Fva-3|;2y%1$*96@kmpWK.Trf>jD[,Oٙ:qYw&A&_(y܁.o_,*G<5+,HܚOMM7Taq'lϱ[oN=*^J!;N?S?kꮐR$-r2UA=9S* xπx*X7NYDj+-a;UxV eu*p*qb.o+\_րp`]'6RaGp@Tj�"JTm1aM��/bna\䵴*jDXW~SweI",(m H~Y拽[ޙ'Hq6e LiqXs ;|ڷ\|ǎ??m|*�n!&8JnA$I'Nۜ{fh(һoϸ&'^dZ. w[?oCw�?l߶3c-zdJwۿ4+[dp�<4y>xff1QAEl FχDJ N"Gv"oo@*/-ڭL}|V|O pn0�. +GHP}b&A!@$hkB3Ց̟r{Jf?QX H1H#Gcf_Jjg#IP. mdeOeYs #!oK&xa9a�|,*vn.nnOּEHI^cl/mbf 6e%7QYtvvۣ'-k*ॏv„Ҫ\}iCvI&I la~tGv.s1F/,S'(9"Hf~U5GQ3{fP C(<UI!�2r/.M[uU0p�AX(]$ V䁂aSp%TH Ҡͩ\%m '.I6IngCdEoƏ^謷Pabm+*'0PEV0*=9ΑERVXXHe?*ϩfǻ.?nۉ6ÄG%H?0q0x�:󌪑؛̳(~[G^~�%iܫZ2- HJFv%7J{aA>;s!Ӝ0ť?7ew:vVĒe>P4'r|taxnǭV,A:U_eR%m&զEL8+:؀_Cpx$OcCM�ge/IBH@y6 �EF"9DPs Iɂ=g\BhPopuD*^<Bҡ=prc(]&鼛]vJeZjS~q#L&)=Kcޢ-0G2 !G'ی F?Ua7OOzv"I*8@;.ŞC <]RӇۍml0%+: cI3)+.|o;=N',T ]R;dн;;Вlcz%}ݽlj67;cY[1>a_ip|:sfI{baG_)E'pm%&l.:x#=y'D�,@$VE]7A@�:|,db<dQ.�Z\ǽ$ DPt�nV,4�8"qs+2m,)D�ꭶ0͵}͒@>[aZJN_ٜ@B|70R'}Pb9֊dH_w1dqxDPw9cgRt-Ln>b�Cq'u`̔U,Z#аZtK3K$&Z D!7g!@t5k|HU�HSBq<>�UR58TKJѡ#LZyR&[toDl"a~7ti!`RQם8:@+ m{sҕ>6!m :RZYۚ/w;z8)Oby@D>OH)P@pjALHA-B;ufύS~7r6uCCiRb 0N0J; 鶕"A洈0^BBn#vs/F<U,�jI=yeeݨV;r_^^gs{# n@AE U9TUv܅6qmfqa8J}NjFÉ;ު*zd+fDaĹR%ZB\߮߿<a gj­p.F; G۪4?[RXBOJ=^)x]cue{칎-G?O\^X q;vW vO~>4 $ ܊�6+*aA_ { <v<1ڢ<XQl)<t� �j/3DPawWਸx&FE[i}I! qVXDΡW<zeqc�ڮne@jI($�X{:e?m99y'掗 ,;@%BOMۍe$qwkdC8?0Vx*ֳ L@Ezir4iW*&*+ A9Ku,e@:ۄ^|\͈% gkKo8P2zʊbd '<$݆0UW;7c''mavڦ'v7Z6^6aKbf 8s @Iq% 7<H _B#.B8|�+ .xq�(x6Fs\z1cGJ IBt_l'pbZ1 �>O"6괋/8fs(Hi?@ )g0t;6IUI N_A)\Dk kL^yHƄ> Bq]�zx Bx. NK[v녳ƙ?>cSdV0ރ pRjEB[J8 ][%xeOPgOWv'SoBP2Q4F8 S%rœd렢T}==^O}uyH!e_`Kd@Vjhh EhGݦWO<6\@?0JV<{^f??}+v%0,+J@\P:@Mz$ q.�B69`uBQ�88Byp}e*p<? < \,Ap(\6uoaiNFun $ǡ+7Х/SAwy\�L�k'�$� w2s.pWma^ C݉HS挵\b?8ؕQaIkA)!Dݖ8)j .0+{&OAN^/.{fQޖ*VҢ*@_w](|>]}.odj#}Y"%GKqDw,$l!Vw嚕T];5i`:㥕ͺH˾f;`w^#xrs e`M$+XhEP baE�$F~^5|N(r tq< S$H8ϡo\ Ä{\ wP49c*&FV$86`~ "jA<0g  8/ U&Hj̣T6BE�*RTZ,i3sZBτq@`Bդ2I|4`[~ڽ^GLϋ@b.;&jJIbX@{2ݪNM62`&m!7i;9m{A-BH%mP.=LzR(%|b*Ȥ6䮛'/�œu!`.GprIO_rot͒gs@$*NE  'Ȃ-C`9>A �4rypKlt\mT͇8E-&i +]s mVo�p =561W>! hQIϚZ\ C.rl!^Sܦⴍq 8m�Z@+cH_�$Cs_� Q0##mC*bO6p+=Zqj $J7H/LN᳧4Zxթ\lIn2O8t{_!L/ZI#Do<vs7';l檕zJe8zrpx #~&ЍOOY@ZbX,jqxNb9#Lʩ�eQa7H0\f P88wuE*yzSCgSml8%VqMVx`AR>Web\1s .+ STcgJw`NhcAeߒyAdUB˽\2Rbm*#V?4Jת"AU ~ V*씄IC?kO0qzU`�}Q:,pHXUH*@$9BMjʁP1b x y~p%2iFdKoW qN 'VT?ʍ/-^7ؾ7:IhKvc.˺[8rc14jn8Pخܐ6  GL�ec[ B>O{ag|,v.bVrYUTA*J*%yӄ4+#%&k:a '0lWs+}Cݶ{sUN|8 | @�y�YK[hI\ʑ'@{l%8EX,}Zkn[(8+R%6#ɜjM->ѳpDnk$Yc鞬ϣDZMLN7eS1[/z8 )z}ҔS+ !8"(^. dE{EOJEl�E9c#ӮCf TdJ [1fzǫm]kjE$m6C$fHjS )MĕR1^6 ra77;o'/LY6lZ]*[(8rZQTȅĹFznغZT' $oι(Dvkv D%:Iﷳg|M(}9A[ #׊Sz}  ŞZI DQk0ͽ<tB}`5ó EAhR!qu>tD@emJHsEB%Qmڮ8}=%{e셗:g% ZB둜Zїr%$MF$hW2awV8xz4wM^ (KQ]a8�Wj.i[v?k{{| _Xt1uZpMHdl8t*muN)MxV*,_%fW:A�iƒx@�eE"{�D0C|�إXKD`SPGp% !NdaAQqA0#mHJ1n;#Wحȫn{^ϔ}Ew{bGlJ^vk5>k\v3+ucodZ˳p*GRh]:fzAx@zek Xk߉[ U$@#zJȆ֧~K8kjtKM-pşXlԕNyc}Q*ra)R YFo%vUllAM60h+%;$E9 � xsO^ 8<p�߅ mXܗQUC/+D ˊ Uo?:Y.Mb Ȯ @:ܑ*d8 4qI#leM9J^X x`~-X ^l^ڿĤ箤blW\Ӵ�xȎDXN&jEXOW( Οw#&>bI zjsBz-J.K-XZFگy;2S^.c{6uE' rLa/\i8: D18ַs銫x eLH+ .Vt\d`??R lN~HBb䞴 :�Mv/㎴wlv�$n20^sZpdVww=Ȓf<8h]׉]R!_gBWp_fM{W$`zUSb!#A Vz)潿jAx Fvr,Z@E:~xXɮfZ/3 Bh7"֫;ρ'qu#.ͦVQܫхºj 9VTRkVY Rԕrᾒ\MY=c8_j@3DHDKhHrlۑ 0&(sC, AUo lcHg.7d:/yE?v:er[w1^'[{ V&uО~m&#7lR/}W BąX\[ìDe7oI8fk ʧYZfjp !� {NzGͩ\9D@QH�sYw 9JӕsMxJ04$b�BlC\AX1�9A~G<Sy!%v~Я@~q t(P'}T}DDYM'4A:Y5BƁvseE-.7/#ld>KNJ|X| .,6. eq $gJ? &*=t1Y W芲RpRX*&},vYi_‡9pH}aHrF-kxF']FZ ܔE !=48ϗϕjPaL0؀CXBj;S< 5^;T[ul_]Z3WVݵ{  <@00H8A,аPϓ@ BHdKZ28*W}6@fP6[l?FP!@Df111p b7jB騣]%REsg]G3uEz\"^0mAk�lN')8LCUjXyP`Ȑ6Ѕ*أ𾐠v!qo>tjOs5fs(.*P+qVz_i :Ghz�I 52״5 <@[KM9iC_לYh9P? ``D]� }H9CpOaq*ȭ$SG3Mռs1/XW9B-^x&ᤎM,Yy78m6Sy : olx,}}~Fa} 5jHB &skUk9֍+|Vs:՞6mb=}eNM+'S3K yHA_Z3nW�r~R|a`cr۝6wuF^zѷ8n2}1 mp Jmh'WXX8:MLZmqjf}a;-[8|FouG̺}gpZiWd݋ruWbs-^tEQ*eox0?WBor>{.㌄&el٬ 刡Ue9p.$!w٬08L/9?E[O aYZe B)TR < k- rkSx_VN%CcltNZ6K3aLH;Gs:VCAEϮDYׯL:a7j(]7p-:o|b&1=%& \ȥFZporsV]*X.C߶)hx V[*Z.n9')&vڠ{V#[Pw!tm'cT{ugR6�OB=}WMun[O$9< VŲbg,^*U5|gιShkouX 68Pf5=OLDT{u)a=C}Y_[Sג'= 1ٸ+q@#�MxW)qx\z1*TbD# L<!Nxʠ[#@<:kԮbi硦\7E[ڬJj�~`FO;g0FH2С|}Hz2aOwھ %\ǜ>xgnd$H3bM` keaR=K~-p3�@B.G@_չff&>%5UsՍݎTzCzDQW]EVe"gs9o/OhM"e0e+1{ℕ,un歖IG RqI_=?[O\ޮN&syG˶otzi;1@@[n;�(aE[mߎwͻ{} ~n;ua֎M~Fm܁]wSzb~;,m'f>s}!خ^sE`OnԒ9㤶@k>ͪώT~jX;j6iYpҪ̦C\%D�!(X"8G{1J!:f;֕^ @0Z>r?Uu< {ﴕ߃3!:<6!Khők,{OԾ:v̗6Bh  to:y01ox.~gO\ԱQ՞m_r& ZQs^m4`&8_TWJU;{jz]P>#?bΝqǐkn.{Ȁ#T=t55ue$*- 6܂<(ߺK!w[Iʄ\a8rK G|}scShG �2 (LjHKwLHC&c$8�n[r7N {]]3^qE@d8�.sXp_=xԿjl.jF[n]8q�xECAb�,k%.pp⅔C)!"\HXii+R ;]6� 2v68c=HJ}$x>�\! A �-@HL nuMJ.5c}:6F�`Z٩.gvv褂ʊY*gցEGr+'?%=tסʡy uʡY+? v5qObu�UP$dʾ?p|QKrV9nr=uݖwӭY_<H017r1t,;.{CHO~cAؑ(�(5>g9"Nz@=d1IAٺ$G.[/x,#[G�LT]^Ρ;pb#{2-j缪r@v 9jXi86q-a$f*f CH)Rl8k֎RI{ /ýV 8(!@x^2pHpJH y6@وh'?I|)CK<ϠrDAe:α?xL�9jD�G"lrK*D)}%Ns|3wdf|#y� 7SĘ+pz>Y!R*8׼5� ԬߎitTxΔ"#ȟ9[q| SdҶ{G2PU_e יEc!  d0pKlT&=6OKY8;nOb y?R8whm֛u?-7̊y#Ow;☰ljb~~vi_CU%?”} L` P{R\>rf{ύSkߕ\!*4My}ɢ gy {s',ԥ,qFa~C.DmpsIF&\[G]#7P[qnΉ =NJ:p@ӲTll឴uh!�¥CtGQ'Z :LSU@. $OLʛy}M).ϗ2RKE%#)g4}UC^\/pm^e8Wge�p1^s28+lp7@2MkE3^OK0A~3<ƚ�eh�\9Z댟YjͪMՃ$["Bd~"xjf$HuF>IA(郜T>-/Ϲ4Kٽ@ 5KJ :NZ>ז=vO~%bF#BɵwY ,(WK@‹f'jղՖmGQ'Οڔ6{z-L; WwR>߿X;eYǩޟT*8HGD߀3Ƅ}8jBdGMy!BJf.~xã^T=WQj٘'pvw'/6$F;C�ߟ]9V7[#d3t:).̹6WS*P6gCoCX%ńY͇wa~ЇnDx~ObA.^>1h5Wl34K9�.`A'ߣE¢I�3W"[fGrٜ,bQpۥJ½jvL̞ugnї%xhxi1dEJa˹>tQf*ʃeQ˝>g_;~Ğu8.2oTY]쮷Ҭ-8p윝?rʎ?vʫ"ݼ2NW#L|&|*rZn<n7bO*?0^&rm#ɀ8rK؉%jCP-:*&yղX5Q;| Ou]^%iiɍ){9Dpki4 4 >l $T+o}D@)  Wzk A>WSQ6Gi<cPdPj_E)ĥc.멷-wWmalJ(Y'~vݻ@R1eE.;۞c_ܗ-_3XfH\baҙ1\\~#H\nn=8}$ARt{瘳ig9bd3 yiO>s(`{|T_8/d{a=}vԸXap m=yXgz`ԾyW[q#j.X<B2Il+QMlR`vʆؙ+Qu;q4{m*] Dt,,xޑu1ګWV/�j86׽rؗen>mA"6FII'}™� VJG#29k|N[Z99?irUR#NА%]15'Ѥwq^8sޫ"#at$&CKEow@pw|z%"`<ǀ=: 2Ŀ~ /N-%@;=X vyg:`޽}bHu]^nk{[Գot0¯~_(yiJż߸g/g޼-wx1<ju(%.l  :39n-ӊUyYmKIؑp+՞ 3Y 띛N"5DX@(HuQs.BgLkBWav^hZ{P Ko0|+$@w|pZa15'*ĸ ]jGhr9"rnAPŀ2޷Q@ ?n#l\_ܡa>fXyf5l$^VTv$_}#{vœ[ӳVvq\3+o w`_Wݰ{ms1~Á# ,/uxT-~ὅ+-i�g~<Nx#50h$!}LN=y=vN8vnK*ģTpty˰*]SDV-`܁.}8>6a^AB6$)~ojXAss\MyǓB@⾒!B\`%s5#/-Tpx,(__yoI # 4Llt0/)ن尪"LtȕT}$3lx!LdlUERu dk 9=iF"Mwl0hCYCp둖CY)]ѪfJ[M]*ZW&+U~sgؔ2++L#p5ҧ[sų64VCG-lpxq|xUN?dŇ lavz^˞vuv⛇lœK.X�z7X~Jq:8BRv@EkX<pEn^MȉLxSт{2(]Q({.xiqۉ3u#T`>h kjrDZNnD6>ɀ�=@; "qC!poF<�b#�6;`B x.kQ6ʏ>3=S7oQ/>X c?RɕȷfNiZeg)AQa@ T;7`\|5;ze:LCl WMmHdη-\~)ܾYͰT@ƺ8{zRа9wrDVd~K>z#9,N8NjO6VpRAq)*Jjdd͕Οx @NDc8Eh_q|ՉJc(ͪJNK&Å_>GRlzUX$6+IzBe3yWՠgm@ C60BnrQ{Oá M!2ps&]{A;p3>Ptңf<#Q}, r~@bM0Ox a|3 [ 1<H^=̻9ts.7~z#o!xIhJm=񤳁DWPfV|RU.ٹ] K'=c|l̞_n[v#-NMۑ7v);%2ѵ6Q,48C(T<CYO5^xhq;|s@7qvy}]uIb_msmQjs Jj3cG7p^�:nE!0 B`ȱ0k+J[iI BX#"9�SQ<k=Œ팉R�0ޭG|OF66\wt,:}aTzDzRU04U+0`ht醔R>`k[M?Zq \6g=Gϫfrv]wĿ:9dQ*6~fΕpg 3GA=*% $�l 7�u]2/6tސWwD@+iV60/]9b +'W5\76\7AVJ:8R  p;J]='O4z Μ/O\Q"Ah(!aJm>ߤ!f,X30 'o`ҮU# R&0<R\2tUkU[jDg#lvj1U6>vAosu7b),8#+U +VO) &kbń} ﲝ{Flrzyw=!؁ۮlh/ݿ]v3nSVG %ea `X=AT7E�N'.8 vdǪһRq1>KqUG=Mfn< q TyAX ƒX+JQa&�*,L.*s6솨t;\بN=c8"^�#}R6^ؙSvonh.Y8=Uꖨso'SOIn藿3aO\];˾fw,UԜ啣6җ[P?刞pkDcf5@8Fbt?яzc ̇UjvQ%ַXќ;88fS >8^8پ^9wJž;m.Yu;ynP-%\fǁL8ҕA=>\�En\ǵt]G4>N1nk 9Q\~W/;d8u~;_CL֪? {c0&ZV;E-jR?;ٷ0k@;1jUIFF&�!.PT&yGf+v>d٫rb/i[w d<WReȅR ayp*+%$tnؽdaO#Lۚ??i7=K�Nxk^uz $xaE%|KϾ{ OT4)'jn%:dZ0 kD Tp3-S RnJRPj@� ~{*[@TYH8!hZHNe]uUZbm#{ V%t_S _107h"eȬDQuo,k©}X&S_4f7B0HYX(&lOeRV9tIK!,,4$e՗e-֚xH'j 571EOVN<{=~G4gI~g#I 1G:[]BM,mqA[D<]r=pT1:\Jex+_zₕɴM 87i'Ul5Y#_*i\uyd:c߸v*H+Vn!׎͖7��ZSieԠy6qJ[+=6f=)k H|Zq ,~@|Q.5T@ťJݽ\Mޛj|Avw6ku_x~qb (iRсc)@@A*�ٚZF+[K;6[1B7^ތkcgy"EeGHkD,W끄̓ @K"WLF`t1;W\Bj*|DvUI۰&z *LI_Ҷ'^ղj{BJ2> `S9z{ BD=Lgq=e׎(.{5/Vd]=Hҕ>S0ӓ@ pY|fL!QA-daa~:jT !P]c%^zdڱ1ex 2F\ NhP�"#O(REA^%#dX3N>9KeasD$wu|*pv FtUTN"Y)</f5 Hxv<'j�tijQ MÝ&TQq" ڗ%^]v$!t0" ;v=d=?B֞$n? D*ix.S�x Ċ(OL?؛}]TDjqSx\JS?Qq%'Dzl7qwۏsFPoeqG)6ublx:4)^ Ƶ26wUtG#׈]S];%Рʝ]9ˠ)dD&|HX_`=򗿼㪗@ ^{+ [k(G,ѹۑ"+ѮxN=nD]C]Dg Ai!_җ|=~| H w}vw{^m13zBT1V!J:2>Q;vM]w6bw>Y62.5<( ҙkyJ AlZpA&Q\5i7bkHI"6و$IH}�U59w\C v0**PzcNT=3yiEX�r ];W܁u&~F }Ȟ"�#0DD4E*r/Ԅva!fDT( \|z"}ddpX@"`RsZ5"pU*-3azH=}ΜnGv߲/|Q#5D 8BJ  s�>9{}$N_@x<F,.>.Uz뿶W^:x!IJb,X~+}9Pb>jM[X I-R5kǵ H,h{~B;!tdS$R)l=;i�6Sিf痬8*Vxb-*RH#}0OG``! jCKrCj1R7Yh<~ұ]w'J,vc4nEiNd/<  ~փ'> n�Nlb|}_E9ğB|EҾ� 9qȤ Xp� R%W�(u|;=�ԫ_j&~`H@6P@0B2];TYa= >d_BC偪}QA90{O;S9+ t}'x^_WP4zBH`C4((OF#8nB 2Pc~8:M�j#YI4l'Պ |٘]STc)VT,)62}E`y`}#:K eY/Oq@X( � ;R1,(?҈ 'rEZP>,dh h Yazt V}kGMwb z=IY7w:+kPk|T6ca�(7ҩ]ff7F>9 րp!pe`@k'�bj"#"@M#B]lL<e#vpn5u uAۨFN8}{.?*:H#<Pc�L>#b,p{ӛ9* 2M_�xa7qp'B<R,2P�+:XZ^pP;qICKXƖw b¬+={PJUm(S3a?_U6y y3tǟw]zJ]q 4%ߡ恳gP%;)^۸Oje= mjz|SmG'<F>g~Wի~7W~ R 3�o~_ ��<8y^W~Xdm!<[ŔRZ��"5�/֒g0cc, m!-(CxH<!!EBH@$,EyQ0B(8.٬uÌ{9+Sߞߩ}3sS3}twu~y&Ko.5 ?Ueڠ+ND(+of8*Fd{ъD=p66 7҅˿I8|y?K^qq)֍j>,*@*JuMX }8e!pFxD: :ʺ$qX89[m]e]N*AVQ|#%>Z v(mX7u@<&+1a#ѻT| Y'poؽ3n㮼|)w<KVxmOǣ B6~6N|v  @ *BeЃ!�_bToaSḨ[B90ph͐` �>% gdCs\PUq8g _mWR<Iq. kv6@|?a/[A<n <P[}|ssa6Kݳ>ԩOj�st $Tl٥# ct.ֶ;( vGOM܍_|sra"D괳9WPPa5cӊ"#rE�z=0r�[-mP#9z7x\n'q!5@Fq׾{H&sp|g @V"u˺!J2hxbA t8QmL !L`3` mO~@=27Kngy?_/ݣI='z€*7Ѹܼo}[\6@p\eig;ol1w;71c^N<T8&<犱fts7"| FWv@eDY iIφ6h{F¦l1\Ģ Y H?TP da!Dg#668?ת[.r%:}]۩F!|t\1�/vM7O}S!F4 ^o/^q>/^r:zc77,\sW.{_}b29c;`aB'�T$xF�=-C}$srH y0E@$[[P&iЩ<f$= C5+͜`F5Ӌ27҄\ (ޥ5J>FD>f(n�|g1$>G!&8H>>䩂R˺!J  vKLHg3VdB#H-{;q@z{sÝ=s*qysY@^vn7 SĀ*7V�WZD7 ipj/y`m휎68F͜FzNboQ|m9(;115Pֵ 2ImG1SRRxQɣˎf? ocBAr�K Craq|x7B3Ɓt:P} +d{\܈SwpSkÔ_m"ѷ2G!VX$<T/�#+OHt3qɍu3w;Zi8$?ØrxAR樞g E"vҵ+e3u8,s\bwU(?uY[YdUdF;u5#K-s 轭%=ɝNPsL?J7H- DP0WO_~]x!bOJe3\{kF<<qvN*Sf]9sk/yc:11{X&$/o㳌\yW0 D /mm!I6kG.qEGk, "THy CkK;m4h^7NwǙM= m;?:w3n> c$P*CB*,3kn{JNIw4 u'3aWI_uw&a~T.+Ҹ(" cB. xJ.ۨ)m'YqoOa<K1e]XtH;pPrرu|D́gJMV޶Cڞ ?׽~ MhTxX@7D HdT TExb#4vy* [˳fW{_6QjP>"1PHiK`r-"e u�[Z#@8I졫&|LQp]FHltd>*)۰'W͇NINh(Ad&fFu\mq`]pd2Cw=]w7j 6 m-2Wݹ`hptzX&=ؗK~0̑F+>sj^Ol]8*[6U2 ^ Q[a%`#6 u76X ?Z 080<9o~ Lрΰ4gY͓ K"b!؁@P~癸daբRFKlD_]IltY vRhG},IZ+Pv1tt>ۃ9 sͥ=YXd vBcHŋ&$`RW߯|+1 q�6Msrw‹o/= jDvه~8+C-7 :=FC9G%A*Mel**:+@Xn?q#A&~g;8%+eæS)wKQ<0nʏk:lQV]�<*ovQ{}53N41 6*SǍ( W'?/{/.oE&g߾LbۨH7&wO|ZE'Bqn Yۑdqa�qz|ԗʅuLlpw ~~�:=6�S;A.hN]|ӟ4 n!FՃ|Q:{18' ! v ٟkӰ\32qY>fT=\'˴ard]dK\$<_w.= n* 5qqY8ʽ71f{7:tMFA㦣wܕItŘ "�13H䅐\\=u] BJx쑉*>@T3+`90F3 KRx8DAĢl 4~_ XCT7@A8ʹG ^( GjFAٟkbv3*)&$^{}{G}ν5+9(8wb,KY3W!Iɽt!wq92/}e/H!wyodۨwe?aˋ//L̈́PxA`hn*ȅ�J[Jo]u%@*,z�2I�ois4�H-Y�t lq;CN0..怲8|ߎyר -zRsxKҳԩϱh}~9tɃ>`w3 Y|X!@H'0 sRh><"B?@X d> 0aeP/ @vdB$7ѕ8 RL܅KWR$Wo<b7>OcBMˈ񈞂<+P>`kY\d@Z�P_8�&|v�+V^&%Ц-ӟtlWC !- �4noy3Q�iTLH3' Μ&EBB"E9b?et�|Ȁ@c z�jȂ : BǎX*\ATTwM:țP$b=8aJi9kTZ4)�aeԣ/| _yNˣ3eޥ߽}=HcSHeWXObD3(/)N]O۹<x&^PN@&q^5I&�<y5*乨Xũ:|QFĝ  $+RoWZj_d�Q l9&O[HU|.DHuǧ-• s ŹS3Zt/97ToH7$3$ OۖXrBqِ) 2ܹ?Z:W>۰М{<tI⓿Fo?u_tۛ㔑wmy)Ć_%@% //^+ZЭVw&u9Ŧ4l `(ļ<]�x!<6Fyao,WG=dJ:={qQPEpN+I,Rk/Բ,;ICYցcߺǞsx3F7FO<F7m#ҒjPy=^!Z|]( }Q{gë:ʭdcJ@+qy fٷk ߨmAOҚ@:rӇ瓪CjJd9([Qz(=)8M$TomuR#W:zLq0Q  <9p B<w_']'=O3AcώK͎[:\2u>[m+hٱumSreIe* *rg[mT-`SU ōU(||"+u R,;ō9pÑ[+qsfui; y5\f9"P`w$xM㒅W ylTN6pc<6zQ}k..&G5J =2s&=#b! 5 %+kx!>kZmχ>?^(˞O&Pۈ){wZn BγNe~gͨmmNpuf,h^_;u_l N9Jˣj^Fi}5by֛qJFs5ӾZv{Ugi(-v٥4lsU4%GTȾp2du1ֆ  D K(4Noa j8^!=<~ h{HQ7(#_r9}z7fu$&h؟LrW8198Xzg"2oD]@ş x�8Pa{]6"BR8 ȋ6�g <XI*}rѮfFKb]$-͒49ݯ4M>G!BhW^ù4" \gᾰL<43x$up'CP?.-5 ; ~-ºH&w<ΏsQ\2`U *٘|7 >ĆTlwHҴgx ܨn-0]g$0dzިkDMGÐȮ3wUah=5@kl}";‡^c1ܞ1㉇=|51TZN2> ϸvp>Q\Ͽk +NoDI͓g7PF276 n:�ff;ui:hT2@b!fK='<3՜(I#'$&!w`|@)m� 2 w@5K^dU3'r�FxURx>%t|hL³qzU %$3 mN>wo$I8'a֝?~&H4ԙ{chXWއ1RCN& зĠ߉괮.L `#{2 Oh,{MH6$QW`mb mQÐV-e%b%Ul}:AM KZJ^jzmtFvpPp($|`-6!O^Wa{ 7.~+gWx:zdN,}8C@'u @�D@\v]<2PɬM $c@9$,QBC^PA|=X|&W\ ~׽u~D%HO?_C[uOO3>Hb@$pix"AAq:p>HgMĪY'!@R(RWD.؍ԣ K""mXVZ½f'\T~"欯EKfeDQeDEU_%URL]ftuaE(V}_*, !]UI[@d,7.waˁ +ƹW΍1$mB'f]7:Gc; ѷ6=Їp^PMѲ5+ תWF ]q!Y$=T(h }2Ģ!=A"gA,irxVD׼³�MDڍJqP+MfH#y&XpcazIȥ l&U|0Nu"D 4,N+nt#nyvR$!Tiŋ`*I@qYYp$h QdTX DR9XG}%ScJ6AVJ3`m N� �P"rd<*:@xp3Z4J }K0M �X+"kǗ洩4<S=z?Tx߿F]Q^t`X':|@N ROu#a` C$<y2R]Qhd8ck0bIħQ"rͱU! f4YR )@FTTU"gj[FUne-)ޙX(@Ziԃ_֫_TKw󲝺ĕw&Y<e2rhF Aҗ=zeH ]v>$+/9_in%w\}tFT$I=m87Zc-9,x[Nך~[�dl'{=D7'R@*@"I`,i$T*!$�Gz\FWJ܊HVD0KgDҒ^I)|FޞKf m *Xӽ E$^c'W|Xzޟ\2=J]z۾vzD6Ht۰ WbC%[@쐊C QY -*Ժ"a赽6p/M9q Ye}X65Drum2o{ʈ!t}miaξ "Yllis@5IڈS<. F=ΒkLFI2DQ@RE$ ),f֙crM uK*J $8[UzͿ.)##)IE%y1dc$.Aljc\dv{nC{m/KRFN�鐟Xpui|П}K4זdFTl 0uHDot̸ND$:N-W\mCUS $!J6I=FPí{ÐeYpYcRHmOQ1iL"IVHSUAP"C@$_/ûzԫ8V6B<̎RKH"TvsRʱ#`V"ZT\60bUX}.y\Jj.n>XHY Tv!6)ODUrՕL=x �}�v"K>jdhEY7͈L${"I^ˆ?;kK'TZߵ%t#nA- RI͒[mJ%Vri!VeHȺZ)u$Q,,[, c3?aT6_QAl&Vml;CRKd+=uY fse F:5-u=gl( Q >*a2.SwŔ)yŋ#% i˔Ro\QĴJgYܭVJUz~{S,HJ̓͢.c4F"1QH"AVRe먍EKYzjt HKr11Z: @dP)j-'LjYۊ 56wƪÝغ5`A2s^x"1N oxK/TCq˃RAqɑCv׾pw%VߑQ4W>YysrQvS=yOm찿%mkA >oUp?ʞA-^$PXFt:ȵS3o�զ8Qq&)\jJi^S:He gzB:hJ όˮ`2a(}o$kw-,'<IZ<ϤkH=DxC*f )܀ydP_ |lVثzГ{1OGQո|s=q'[VQ@$x3ǦIqFh:$RO#^qPym)`, Ҫqs2Q\1"e꺒Գ J IoƍVVkIuQIa||o3jcHn*"D0>>cngHF1>�%5W*6Ҍp(k< Tp|KH53$)ef@.sUUkA(=Ȭ !pgޓrH@.\W=>GC$g�|0W>,q�<Mٳhtbɏu T >b\ ޤ-1$~AR/acP@*N"~΍렿ľ2苹WWLqsQ y䱊 D?gz%A6gQR,5<R� *12GR_)U䶫+gD\Y)$ƊK:�B1} @1!Ez76 R$)E|1X0Q0Ԕrc3J+U[UT-QYȟl9YcK۬q;iL5gu  ɂu7H'_'9`N*PE)�կ~VJH!#T` "@$"P/�'`iC2,F-U~<H6=S1SDBtl5@dà U/-)b$AhK8&sRVTSd"XM/RYGy.>gZU;I䤓_2% M']<xi(oj L%R}1;sI.}J%QNA*؄5)ND""gV"3 z$A0L6!ȇ|V I|i+M;i /%Xq'1/H{Qؗ^}"+ 8uj>#'$@IkVWu@1xӛޤ \Q5dgJ'N5~20@<E�DEO@'sFg4!ȫIҘ2m�$g(8WRsDžhK#9SL `O$9FQ=Qa61CTTr!7CQvxG3G2YHp~=ځX ){c|_[ɔ5F3êdiޗX3m|2/#MRAJ_fg~5,)Rd7b>RSIY(cp11r1Uʨ8nRnj:UDzo ` �p[q w "H(|Nq\\dz'm6!;It%uނg^|Ò邔*Yʜ_S6M]~xV @,R�:6=C!k 9~gTSڡ@U9hWIX0ڀ/1T#�Uh'l_��?*2d&93n=U�,JKv !.�rM?c= bA"9/G"d\yzCd�(ϗņp+�mn-z ZGURUW:`tڀx^+s5ջ2uvIk%[L*jbBc6Tw~1 TJJQ2C0rdک X\MP�/XF̑zQmCR<l'b:~NdmI*muve5N[=o37Vr5B GtwT5zVbWv;T<Iԅ !$PvP�.# (FPF{K"6"?�+ D!|CeCEpNMMl3jpTp8jwm@u�R @_\/WAih_ЫN@߈�ϒD0I[g/-̷;Jz4G\ij3jDL"Onm̳ \srͲ/;Tq%$E,C*9i]F U$)4ZNNDcMsK˖Tc�` ل6oXTv!0dv qsLȎ'[xJ[zl~hXIҾB~˜+G,CLޖm$!!}@l8#`ouR wH3wA`³Gǡ "%AVp#oc\ MH/mߣ۫/M6ז@-7 xλ,'SOI"4>ex�ȶ̵6vb+u]gQ"cwFGRsUX\AXF.˶!f9I3Zr,(Xk а1!&P9A,ijH >a~K$ ߭ r׸Z&8�䠼q_j ; ddBm#l�De n-|?%6zqA)Go{lj~{\!KiǞ|jA$u,5Z_;yc@E#멻BnϻnSAC ķGXMp-}N&wH(]dOhDqK՗+D.ḁdUHZ"IN X+uѬ%' 7J@H\Τ AM$0n&VmURyiL8m$c[k]sm)^da)+>67Mz̳s,^wُ /'(U>3ؗ[O*z 4#')�%ȁS3 g]ۦ4croZ(i^i{=P|O=�H=Ce @h�j9FZR-1ػD:l;̈́7<Z$Ѳ5oatIg86|`lDL(g$IS2$=v(<\E]i ~~֢^{"}~Y+ [ɍ`n+] %Q>MSJbfpgM~.�{o}n9 ߷'xc+It~=ȽJ2j!UuRU aխ ۫muHBUG.[N $e8 ⺔߬ :Gk16$tt&)'PlEIL$H 5uR b9[5UK^;g{"4vɶNW5.|%z.{ߛ$K�tI!u{JņKU ]T=n )ż9 m@`Er=e_ʫ/d,TzY%62i#׃[R$8MYq.dwVRʎ%JBL@2aiV9kAZ;x$!ق*ICɱe/uoÒ VZ:vҴ<_ RoD$?<\ r' >@u'9%ku}~uFcOc}bLzA@>R:=w5}uCΝvOty裏$4%-/`Lۃhi'7LQ{�y_Y~bc-r n Xw]PxŭH7`뻾p Li^O>26!}Hhꯄ M~soO[$ָMjq:FQK|m.lav6עR]UuHV]:Hm~hYzC˾aҶmh*/#eaI<*R"&u1y-Ѧ#^YFRxVѿm饯*rZhŶT#S 1"U+0F}Lw>2"飮ЇJ1~6\ú +I.H V(,ޥb CAsW=y[;zrcȦ җ$ bu[_BB*)VW-X2)u7vT QE !:U7v=i'ds#uW+:D}nVܞkAt:,ȒX5Z$ZR?n?\*8^u{.rOe 8$W r='׀TjqGك=nнՀu &i߷>s_V4TՖ{Q;(X07f�5د˺aj{ȱWV<1(5ȯ˺N@} ފ#I~]e]$tWuav\uYukPӈ{ca����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/PlaylistBrowser.png���������������������������������������������0000644�0001750�0001750�00000335273�12161032160�023404� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��`��������sBITO���tEXtSoftware�gnome-screenshot>�NIDATxX߀SiЛ{oҕjD VD6 { * ({' )T۩wMϻ<egw~SBיY۶&N-у@ BLu?GB @�$ Tʍ{}{AEc @ zZό uP"ei1T1@ ?f*?mޅ;Gĸ�i'S[A K?xܣo/Ԟt9@ =t?a>~D�yA6T> .˼J_X֟}]UC\~g?a�8 f@jgFղr}Dΐg7:ChiW}֢_>_H>߀o7G8>bU՟w4? ooh>?@^ U{t.3 o9hWw4?^m5sr&�\ @G>_=^pv@rpA笻mYv t^AZ6*:t38\=No8QAjE觏w-3ֺ>4s! f? !GU^_pxl�yA~BB 3陋N`)"m5)7W6ǽ0 l7ۊRw^=j{@^7,!,=V_eyg+YX~ًK2ӃqaŒƼ/$boasV䲣+ZCF$ Ds 5&Ŝu3S͵V85*@-]۲~N;zH9j$ofw^N o 6$n}eIԣQӛ[Yy[njb9}#},,.}F^*Y59#h_]l—:gh|>gBMQ_>̚oĺ~e>?3 v؃kjY@TxWO3@̝|#,:S_>!{w>A ǚ#/)k?@^_(Oտ3g@Ap1O26]c[831oEj\:F ՞zCY.D;4q7",]=, d5&ֻIOL wOc r/K6*.7F fm8gv[�Mm*~vۇX_^gRpȲk"uyy/OwjF#S*n?/+z*+f[=^34bLmnZz'iA*KֲXV[e k2/\9ZǾoi-i7Oc[SIIvB2_ߟx+?1&(VGUqur?5^hݵy'o]q]޳9I?~YHyf ~ d|޹O~{ ِ-5WsRuZң\SrA ~Sp%?0+.޵%u$en _w .; zիz*%5jѫ(lo69/y+jMq g[:NkMkهXXŲų_<:\o]s= ;ѓG[.dO1;ؙڛпmy;Fn̿d,ַ꩷g͆YQ'@A+6[QTՙv|}JXcl弪(K|8ZeYdlnbol֤v3]"2QǓStn?+ sU۶e#]믒ό*D=lo:))Z\mD[O-~ E.ʌB�'>+TF>[+/-ˎɾ�efޕQz\\byϯi \\t?;_~SGFbTib_e2aپLn9S%[9*CWgqVc+SSc:NTMg1CƱI&A3Lbw翃֚ND O0o9zף:aο^ܽHGeu "訍u$a=rv%4W|t !wTsߜW/6;NSKg/::#\:Mg\~~Fce0C\?#d1\dj+>`<0ESg(fGMxOi̻cCbB ><Q6=qpB-w W3ogR71t0lQ,g\<{6yhbB"k<iAoA:qtc%QvjzBfQ>qwT=MoKo]i=jDLjD?ݛ"] ›ҏMrYk(C-5װ5ɋg;9K{u{{?<:K{mՓv}G>vL1Owaw'61#_OEҘfLěGPy J7;} :ĢXzс:w>|՗7Ǭ]Vj)Vj }j9'{Ǣ\ q՜f932uCٺﮩ>%Qo[s7Rjhz{{|!Nw,;\ PsjWCq| 3P-  J٠͓s ~>X iѻBwy}a%K{]]|YGM'׏?FG DwϬ)5f΋Ρ.eI}'~b޴T!g6NnAOWDz1 ki8QvJWc7Ab_ Nݸ|f]{yPyeX G+B&jNR6`K :ztM5+=es&Kg㬤kH%}ktR -Lۜ^nSڵșqtFLuݚ1xV.A|cIihnZ]n2nhXOޱRmOM7Aޱgy= 3Hk94t޳;wOj7]Vmz`VѦn 5,rN>rN9�D%rP^=pZ-EgDhj Es&> �N@Rjx[=Uic.Bqqvw%~kjb_-T&NyHfMCR_f"eڏ95gkv<ECt{{iF[\U̪/ur/l0`-xC=PY26:»_s3k\׻}5΅!=x׎agzh&̢ĨeE4m|_k9r�$?L|3{[ .ޱ Zٱ.0^)_w-|ϻ.K}n*d>?5\:|ݤ\v~n',8 BO.\CK-NۨŏsKUvRM�xAb/Y wTr.},!66zuV{ںE9C'n^1ą4[4㗦mǪh,#l郼&<W# j=@ԄzXwpfZO:�EbR/ߓ\ԧN*.uIṛv*ʙAw▖Tf߈ג~9{3ǛE/ԹU3vt#U/7 &bO6L<vqM;K?4k32j*[N\T)utнcm oΫic{o/g2U7|#~ݵ‹̧C_T|`#مzCvpE@ɒqR.R�?2Tgƞ)<C_IJEi½u*�oaC :3lLd .EĢȖ7ۃӣkObla1Ns>2<Aw uث3*6<܎>=[B9i 8:kep!Bk.v\`SYqh5F)TI'S/~VF AlM&k-{!\"*!:#Qa:{}tocKFgviֱV3uOG3s7aQaPShu_ض:nkW[0SzX=:6rsU[ {L ۿZY/ݵojXh ND!·2,/вKt;Y, W@^:Kg.V 8KA8+Z T< 9Ho^}Tgwz͌InG/f~:mVfzggz.�vΕ4_kަ\kerU J</^6Ia'E,~u_/[oZ n,wD ;H;% ωtE27j_ B_rԻo,׍Uur]3[QJ\MH>L<^|{#t#2 m^^vݱZɫtEx"=JYɿKtt|g4 ·_1O@T*?s':bMI|葃MOլ\Xbni6Co g bTʡeWCt "̡";6ʾ @~Z^Ek `.ʆ}mNzֹ|/+'JL9 *cc _,آ @ 2/ȚZ=N3 B\<TfT oՀ@ yֹ9Y6@ z@ �1֖۶7L@  U/BA@ D@ ? /Ala@ @- @ H@ g%^+)̖Y?E}!44q"͙m5}F4Gu Άy/5co4r½ldF鏛FA][_0^42ߖܷ\9,=j{͏8IH&V39k,U'Ϧ FG} DJN):vsPz�@ �/Al A4R^8,Jl=6JFEbJ]oyhG)ݢgo=J/k[} EDgMT>rZzWtt>^LJ@Y|s �AJN "~@ )|aqWp_5UEoZ$Q4Idb@jRW]9RyAru;vjȨL<oF/n#gYb$\"nt*VL22̙P_VZ}o(/bA=r1#XrS $Hb V/*M u<F.3 ݲYK$j{D[ٙrbv{^tz+#sb,Z3&4Qιk" Tq%\G?3kܙ "+ Ą jtoMW,qQR[veS{@ ȏ?89j:KiM-E Σwf5AlyZBmEEn=xL0J]=|v+}mOKv+Sm=Iھ3N&}NfI $oyYwMAT fuŚLIѾCۛ*nVR@c%9It*5_C2hrzѫGÝGM:VHna-m�%&#*H{HCbuO5z";-Mg$M7/@ 0AlcR(>(-{u mS NAiHF\9;K-"菃udd"Y\o'>bIk/TH:j{jn#^Ί2BTiArU5}1Ium*—}F)͹UFBqkf+ler8ZԏS7eց-&HO9YQe3:ؘk"mw ZWfBba+AI*qW1&RVۋh}qx+g&yqT1@ x DO 3.m 6"k9\p)%ԻJbvD9bv':7 RیHfvzRu٩y D!h'm Vi>f0e%=T�f!w6++O:_YZ7$ ; iQTV[%Fo~5O/@ FAdf7i<V]qrJswA\!5ˣXNi}$8+SŭѾҵh L-]:6Li}~W=ZѢ-&K8 r$e} &/STu(="+,y  D3gS*CA@ ' _E)f*Ȍ4#=)My; .{X\C~a 5@n36+Qw+94(,hm|D\N1_(n_|uTVgz]mI#wbrV"EP1Jb~;XEBYkcn ћ1Y/kEk3+zabQb2S{edFHϙf`T&kMwӐv8VП 7 ]w|PAg Fttm-x{>b@ LX1nȨ7_U6Y.:1u˚eR3zVM&hEWUH.=Op)M"SDIFƟŽ^]6t'>4i4xMF= 2J.O((h⺌_Ƭx1$uъS#:=~''7;'ܾK<A+{ +NaH/)D!$I-7rҮE8ɒ6V/@ 8A$KwbqbR#5mqWNw) IZ!S*ژD:R~2x4rMNoK5Rmq#t3H Yhx݉ ׳/* QT4/{E}1013+,9کhXs]"Ex;2ƜDRYpڿ|CWb9*{iYUoZ3^Hv @ /A MF۳`W@ ρ AW/�?m4LO@: B } "@ A5@ @fZ=@ ? /Al@ g)u@ ,<17@ ? A@ ǁ@ @ @ @ @ 1ƠɃƤ" mojdRjRZ @ #b/oZԚ Il E?qeʹڲ'  l _޶-@  o?+a5Ƥ^9s4/?~p>}OiAǂIt7UŔҁ\U᭫pR@ ? b~ ຃>K[}q_~/}u0}B\$PFC垭eb W8*P{[&# 1:#IKJx#)em[^sE jE?ܽTE$m>7|A@ ("dH'A-,^_+6VWXJ ?~;þ$^[Yll)#nֿU&KP'~s)C DކNw!)/_>}<@=\ULolۚނc[iTԻAZ2'o'\m9@"ɥ]t\Al);5u( Go?Lyڅ+<ID1^x׽^,8/K~k^@mT@ D, ۗϟ> <V_LkheR[ʡm>{,YWV{K;4W٧z, U_!m&EL7Se ݮ:%К:re4̧F$Wn_j,îEoDFF>b~(9+iZŲkϾlx] 1/v`Sl㌐oW=gv^ y*SҞ<CH}YTG7 >Vב$U^S*LXͅ@ (܃ 8 �ޠlMi_?2xDtA x mi'ڳe8%ߖp# V$Y(kJZm=FNq\W4:zͅ:=.ڝF~IRT<pM\tԁIa-/{VCD*YI9);qMi,Z(tdWD4VT"ɺ]WɈtZTgH[mx@e7@ "cȋH X@ @' ~x?xĊƺƺ:y0+?4]M.q)3@(CYҺaϩ:%n@o+;5K=u:U:Jlw_{6J-κ{6ZS3ZZYVa;QAdoR|憫5;lS:IlO.nQKChLB>:/lɺtn9sZqndF!ȐUEZ$9dJӛŤ]5ؐ7/RDI47@낈xp8<bq!,A� VĮ)M<x b=r&0Ҿ bzWDmG4-M:S3ٜeuGj7ٹd*ΈeӦMuźV;4W1Zi)'[mjzDd1vU>8b[3T5O\}REg* 9ğEfSI'>~|5J$1W Q8eК򶘋;ܻ y~$'^s!?-vx  8p"^DdG�4d/jqO!_>G @"ZL x niћX7nH 1؋b,X}qCYTI{\ e"snW-! [5YNo7g:N!M>PLzZvLtMM9;6uW<iB9 boy+'U1\ )D i�CY;<^ZSʠT75qQQ23ecCUϳoA-)g5[^t_҄,RX`'ZDn*~V_WifGY-n�xuT\[ʙX`kRl҅jt]9r7j¬;g7mͺ]RtCL ß:ǵn|{K5CNf7@낈:G0oh+#1fZJC8\"kD, ~m{'\<x\_]YZP3gXWO)Z.962Ƀ҂Zk oARPaPmPyt4_^^119۩ڵާ67oj/ SFmm r܃(9vU M䢬˻)ޚ?T @gi.:9o#e]7Ɵvi[GB٫]פ!Rn/`cJz#m̻--?ZX˲ң,Zd4ZnUDUdTt_r׼xKI& @ 0Arڞk_k,؎U[@ XZܻy,4lMF JD,?Aڵ=㒁ϟ>`?3�;ߵkssvy_z'|Pɤpy8gO*r@{\ <gKAAڠ !9<[5j7&g01Q7qb>ߵȗsskII98y]Y%ܜJuޭ8,Z;(Y-Y0m1'YL:zHM]v'O'+Ds߃~dI_6yIo^W_6Rc}& @ (AbpjVXtB<9(خ磀B 2 Hb0! ņt:}n=HHIb+d5X,]ka4۽hX{t8 7`2O{H-.={&gƙ3?S9x biGe?q@ G7ܩO*&~"wKAAڠ !9QyvN/-s!.p<ˌ$9Q{mmY؄nxp k6$IVncn@ K̊8Mo 6Vۺ{{aTf,WOf(>JuNhoiQcFbwGuyݍwީko8:h#fGzƎ+J㱊(7Ck7曷Mee\#'"Aaa;/c } `<'% Ex3M.٘~Xݳ4F荒' ap8Hdf Q�0_t '+9 3 ܻhӦ: 8/3 ֖摫*.2QA$Sy:[b,qUe= l)D6DFK]9_0kۻ΁m8Rk.{cx@ ?A8NSRFv58ET !b0d] k'터.8#47T?TN@Z_PqIWM5V FUFC /&b)xQAH$}@NXrgiKJJJJK߸_:M�|1ĺrzC%ϟ>d ç&]yje֯yNguE=3rG[*(QЊʊ˗Dff<e?q+szoi_ {L_ dh/?rnzsՕsbǨ@ ?N;98doa,^`,:DA? pC Udxj2M[Z~4%#3J\J($'#G]懸#@ j#Cj޳@?}xϙX̢ǎ?nZꚪ;woݾ{ѓ7o^s[Kr* A:'AF܅W_|+у/M̂‚ 2+Gv<gKAA4Z㕫ݿ �rѢH\HwMoC:;- V~j@ mx,K ; 5`1@B0(:H b,DpD#0$H!/8gL4uI:hu21 @,QHO 8D: 8J;b,F p` @^1UT@?Iz_~@vh�XU8b Iq*'gf}Y\RD߾}9ϜJ(Ϋ,S{4IΫe iM9٥%靝ՖB "2 bq�PC�(x2<!WbDX?>fqaTW*v׿譟8Q$ɤbd J,m!`qx HDD!v(ػ Zy txL:y|yYٙ&ʪrJ~_:XdނXU}EACe!鏒AgSf/V[WJ}hi/5T�)=[ JJiT>7k͛EPSIՖB rrr .X}kD�'@ DB q7RD]Oa<ą(L&XP#G'7)Smؑĉxa!"T>YX�'@@]Dkjp|u"qN0/+eŊ` [ A~ g4V$<8bw2{Z=OyXK@4zٙ -qb hWGPy М۷!?L[ @A@  3,::#dԏ!Å0ÈXYAuNM_?EMtifK,dtIm#&RJ D�R/ BD"*fbGBߴ:a6;onlhs_f,Z N1xsF욒|.^>UZV\]S*Cm�5 ZtjmScgvGKYAo :szoi̬XcIy*y0b 5Oyŀ{?o(/Dd/ :LHD #`ep:$i:ݍ,Ut=D@v$#}3q^ۻk(ꏒTN! Zj8o0BA ň"Xd%Qp)ߴq>v:Pfڻ׭ݟ3Xs[ sj�yLihkoi7lRSQDԔ OARP6<hhhN/:_K]86zi>zj<W|wZKiqEU6ShI[_+R|ALnƾ-~B|{f@P!2H#8tk2+'e!6HV q̣-6W3 `PSPe:~:NnVv^zN*沣te$$x%̜a�QG' `Ⱥd< n5<xcC ;Q6ӒNuKDtJpbkmmimm0aUʹjMi,=#\-mjʃ&Kl� n5W>{, |UdF*zYՐ}(*>~o̗R6C_$?%e 6klamMy/,#;!+^bG_mhe2 B D+T5"8ddf84ZXf/3|aaR5Ԭo cfn"p"eN6d%d䆑W&*072skfh YapBXd[!?RQk;iojD s47ֿnko:/S+򳪊^ԔE}U)?77n^_pɈ֖gKۛAA%ӻ wՒ T헟kmﲒ^1^XwkHU67RbI;|L'+[/Nerέh>E+Ae;/Al֚$g*'QrvqG -2& >ޑuXw}id'۠x7 rJlc5\}%@Db^697$FAC:n8-YIH=X $I55mh\U5'i,#ްoIt( "լ^ bX0VpV@bj*q? C^ x!$A1QkFUQ00w2dkg:si֒SBrARzmO# t]b&-M_GËp8!vD#]*""Qw-}zq_+,3pD. "`JrlSc}cm9pWOA-.$άEɉF>wV_~29E <y "4xή/_q=SxRugeiW7)XJ 5l IM\''EKj-GGĮ8MNpɧJ-p)zNIdyk7'+c6^\Te*OľtzI˵7 [Z茺 4I@^$c}vx<Mfp B>aEwWJ.< @~~A$vߘaC0ÅDCܰMYokP_Sn0!a Aʼn&OtR*.F$I gٴ̆]2NYIRZZLBl#KՀYcvh 鹫]n%a6?cYcu[ Kq"F]ˌc-gFYÇ,;a{V@߶7ADeMI,A<?ZWI-yW)?\(5%5ڜRL=!dYyh)99AFmQ28*=4]^1 젓À-2ķԛH;xm ZS[n[qutQ=;ޘm,`,Z7%s$e7~C9>tz4~XA<_g@~M=f=U4j=(7f)(ҡ B ȿ@B,G<><jD% HB&\2m =% y9o5S 0T>ZwX#'NfFcFȈi3ncT%<=mK�7*J"x�-"Fa 5XYYU]8"ԚҦ:<(n9ýȩUֶ0Wf((nhj/ *(a;fenWk~)Xb嫂H Hc5+;.]ĸ uםsb 򾞫 ̔ 9Mne{mmܞ(6&Ʒ|ľtz=E67rȬOr ͤ7m,:l+`t(/D"y> FH `]Q%zMzp %*2c5dIVN&ݘzvߋAI'o۸g{ް^.Klgڛͳ1-6aE[ehFZ+|fm_tD%fvJCˆ p,쇻` X� ""mA|^Q "V m7b[͹*f^*+e)/ȱ&1Wk)M,g|u s~IJrv.U[(O~ī^rA܅֝&#隔v~eۚ3B 5}@T?"ʯ|Hu}x)-U5 :!@VOP!   "F<Ԩ-O4^w/?[iqW^ؚthkVc':p0\cnѫgrn|/ L4(Y;zʭt7#IG #ס�?aVHI A|ʤU 1:ˌ܉8RS̯v[=`tcI,| $؋˸*{'Ad-RzќBKL k d%Iq]6s-3{,:.<8FLqjWe-94֘ar qŀjߜR|˶uHoe B ȿUxxaC 1W:M 4 ' owoy[3Vޚy@p3Ƭ Y;kbW|Ͷ9<l+;k`E1}IA5M1C+i G *80H Kt #XV@`�G65֕< ":\Y=ҞT|&gގ/G2xFa гT|ķ-Ud'=,(O|`]p *mnr?~xq_(I~*M{١qJg ژj ,KȊNNWpۛ|C>2] "빛@}4T kCĖғNT&~5,tVYYC]}[_;_ȷ2P!_*cqa#-uumTLϴ00e%H;??S}ڮo2=ݛ&+jzѝjd4Vwzx3V9r킇^Ιv*LVr_-c;T�+(H#裙YOg "!GEc- jmOYYOA-fþu5ā)]@f&GQ.AyXwi Qss ybZ6A{tnM)8`()e}H''-i5I 빠ߛtr%ogu|G+xל_|&=-]Ws>tHoe B ȿUX^BIv֌'O;iP)k8]~uCs!+nyp';nm qZ3r0/.֋t}t'h,\8zS􄤤Ykƞ?[DD[Zǖ|替qzjȄ+ bCpXaT ;S$b} ԔR <!.ơM=[K_e!̃Aea6(?-Vɋe&%P!_ 8ARX@mƓ{:'8~J=\Y[XuM-ϗwmC'{0wamg;[7<<T9v<"spõsG)c)7HVi5}U"ðX+b; bz%A�MK}qz}ejVjGܼP "8YO߸v. G--:4zMavg9kLE@ O1"ȒaAV4D5-4eo櫓%>:nLCKLm{a{vqF>ܲ@pplns}MZ4oy]fNukj5"+Z_Ytc31)}l8q0aD9)P쐡X*(%X)~77- rU"lp@؋ז1(7ӘK+6la/>嗷moK嚧 $az0 "@AdDGÇIZw27٪ .lkZxwDءK`>-Zyu):6FfFj &Z& vM]|gnbq?acǝ8rɷ'\}''+I$ bI8) #3+5 +1 '> '6 G&$bDd5` AD y0V[8ЀV~޶/g3v(}ru2LjcDpQk2yʎ^~ stv=XYe繀IsN.3FFL[TLABLNjx;9-;F}6C-^is79eV{$ ) Rb&h3WR4W2)/7DSBpP FDn`@ ,_, c1"0 bCX!@ X"a(v۳<Rpu÷8}>}']Y5XDOaߌq"'.n j<٬hqd68<ZaurR#&"ṠLZ8l[aM\nJ\'.2^^lQA�;B�#,DB >@ qA1XA F�#ie!,f3 Ŋ`BZKܶ_R(y/>4]"Nй5Gn}sr,ݕ3l'*o䢧=NKsD<Nl[j?2A;JBI.ǝ7Ҍ)DUB셗9 0,e7XqFl3lY$ FK^(`I*Ȏ*-f[^[K&E]7 d q3 cgzV H ↈ`G xA<^'25/imNrtcƶwxvu;Os͏{uݨrU\:V>fi2//~va$ٳs/)e8uy<?m {! N৲wOHg aG-EjX1"2GvjDF="dCAiIEBM8wЏK ].4~0 .lw2TG e}֎׵vY<Wб#{szձrv8U=ΛN$/4` "5y"WqnWjgsX+N>S\~nL#eka#֑!#JK%0o_j5  t6YD<%`0 kY,H&&)"!`.ci$7@{˹{1;6o*8?+3\mqS[NW(?bskp[aeƽ7mL=cy/P4F>^=oyϹku|Ŗ-R=WqN櫚4[,$ݞZFz IԆ`%- x` ıj3BҡX yāP+ogKZ4z%IOg1)֟VkbihG'{SYPt6&'J3|C$1kq杵dAj揧ٓgi2$7RÌ*JV&c"+-SJv)S,v0v72R8ni$܂  pADGX#q BFU%4]93?y 1&^=Zh具UteAɟYrޢen1U *cYTVUrZ=')}MV:ग़4ࢧ!KF%* ˆ Q8POGZc1D@x'|}O_>}V [R`ACF&/.v0Tf[ɔUYȒHZqyL7Ng |x=cdl4fŵ^TxidMeC"=\TxowpQ<m;� ΣCD .W;PPHDDzwP<s;;3;fvfQKœOk  ?6h\)zh)/)I:O $?RrrKJ�D�"ϳՕu2:' 6ۑȋXW-cTA޾r^Qx[>GuG)d6g2Jً8~bz yVKw.ۇ eyԾ nFJh8MC/jx*"{dξBEEV Z#^[񨳴+d79:R̀ȢWˍ V7Q FĐ!bG $$ {B){A2*tz?}%O }cx Ϟz{y ڳZ?Ծ_V 53DS:3uAGm?[v>K'saXI'[_5g{V$"x ND,mQ1z~ڟ_5?*0-'<VqTL fBқMRWS6srmk7YKy F+)P"B{U`(@,E} &U!|ĞAR$hlD)v ړf9tp_s5)隘Wl g\IMgBbR/^N > 8Ν2VRaT@2 >Hoad^]sTu' ('U6o0cА>$ڱEa019[o}[[/a]~+\[c>xxd#0v&AsexWLԭcGoƶ�"%3qgc[~toj[^7W@,ˎ Yh!;q6A( +Kc`D0b>!"^LIXJ5ƻ)͚t|2;pk<zoYds`ݡnP^j+5֬;^wH2B%z#=721ܣ5j¤ +F2FkI,G[֗ )aD18qvbAyVX$, w,f먿~s`~IL[,K2rʋsǾys.ڻDj~B~CS%vڣߜ\D Fa팖d_v?)AfKP"; 1҈1H w)=+²ل޲ȜÑd=ɠ e%r̋;RL~)/}9zsooEQ<JKƔӂG�JcϜpNzr rS/=~@ _<0|=\<&7{e^+h *2r:e .2cCRr1q|]mLО"ok~[Ch^5XI YKU'hRljkc%-p FBʺbZzbz$amEtN20X_ 2VDC~%vVQ$YB,ʗM e- 7=_i3KWa2tWp==q ^Wq XC"B0L_?$8'Ov"%)t >#u=)`"ޒ0 Vd];̀2y2 11ͻK uJBKfȪs~"'T}Mtr) =bt\nͽlS ^7@sIi\裷Il59�véxV_ \jK+|^gifyҙhUD1E^T$@\ȑɺ\�F$Ѝ~YOduɅ T jc.&[i." t<?'"? |y"C5I M{".2P+ AX-A}JČŬڐ6d36ši`]Z<\䞁2[ZZw U;e2J^q٪R%eJI׫G-_pC}$UscIz`:]jH`: 1"x ]yC!)T: jkNu@ vM@qNi֎g]< u3UԠ%G.g&71\Jw6 1 n& hLr$O1&;)|f_YKHZZybal TiA~bbI W?ܒʸ;@e9" ʹ9 x\΄?"ZD~'%( 2 rzQ�WÛw޾*(+O=Cw^}CjvYI5EtxUm [cǠ#K[Ė+|dGw">=QF+I(H1Wҷds)~h*⦋oa,4}ږCma[[䞷>uBޏœƭ~<#SVN:IvPuo8\wQH#H`!a!FX̫B0# !JYPX }tfx,�N'O: 2?$G++!fUݛbJޥOept` ׍q%h}={W>N01XF)-ȼ26`z2>Q/?v^3ns( QK)7鋃}yu²wyn‹C>c6iu@sq} 22c|~<r)[XgQ6bVp, ?: P(?LFq ٪IEC??1E*w'42-v!}7ļ/թ2ZN,bI1J{] rʹ 19g?@ހ(:E B‰bı"HXOH\ PHB~Β %fJ nM3ijRjpZk/=mةҶ[t]pk7+֙32uZMGA3A n{xI@:xHL>  60bD1eBM`.Ī6<u4�<vN3|[L^iVNqQH9Qh݂R&>g){^3i(˕ e՛֞L" ׅAcPD>20e^ R�߉Ii-Kϡރi;c8fPѨl1}1*7zl'<¨vƃ}lMRA6;'K.dD޵PQݑxT2IEZP$N/ eI/6B,oϿz:ɷ&kT\ } I*ώՑ1q%φCz;<k!Wk֔eD?4F`s *rl]?zpIeB!g& Q]FY+ljA0 b!H $W#qo; e=줝,{[230qAϙdmFκo2q}N}l#ķ pւ &S*'d-QIAx=|Xt/A"2"Nވv+"@y"27A!歾/S,^$++((x]Hm�Ċg[#�d/:ں5@,*Y>4?2 "ki ct@ИxSsKiy} qw`<MX!ZGAU|}{simE9MsqO|̇:V_ )U3%b~%V;ђw&"e˹ @J,1x@U[( S1O-pVw.j7h,-s2a+27^T(pŵ a4NUVAECv̖]#Օ5 Qx;'uҜ#e-iL싆&w- 9頣JbsXGI2+ȯw-CR6<XDX(bfE+H İqګJ \/.lj aoٺU= Im#a mHXNɵ0/FZ?9RƋD4BeP.K)ħyHORcQ KA^G@ caL-a"ߒҜI!ЍX: kkT~mU'HWOW}+||ܙS%Eg!^Sp=+ hO@$*pb3}<v迤S}?� "?a a/B=$+!!5 <I_d,l(PDYU]%f[)KMk8{#da^R95C-1X,ic@2#�R0m;[[]331^QozY]]2\RRy8w@l-ѮEY.{_ ?\޾+3,}@D c8(/ I09 ц5zkq:X1ju2560RP"u6ۑT]j}qd ̈B6TCIq-Ə !WM--.̇fQP||,g o QR//f6Z퍥 \9x$224r&4LT6uPH] Ah!N< %Ha{D`FHaT1f# k5UⴵtDI8}=Ҷa${O֞oF[u4 +%$1dN2!D}}@n߸.//r| >~H͋Fb^KHHٹyzw7WÔɓ`qF$ʤSKul0e՞"!))'X{^@7lӡO> 4B@[\*@,ڴa=,@f>(" aB8tAj00N\ *@Lh>4@x ^OU*;a}{jN\oéoǐ@1k\F#946QVI@8y'4E ~Z,k+KCC9f9qBݺvтܸ~E\\<=W¼ ttt` @HX+@y!$ᗆ€8Py/E'J ¦  �(!kƈɉTT՗1wP쩳da'iWX#6\ zBJX_1" SL6Z4Ǵ^s.]:w({I{-M|^B8zP o̲2~锭DяB޸r;yLX}g~X;! "Bd W@L(/@ ~8A.pN1!0 CQƹACgROYׯ&VC@v`%1$#!?Hb2^bfNljJifO'Y6C#d"c "l#*->nύ=tgF3 hci8dD @VFa9'9࿇v̟;6m$W/EGf @ KbɌ-)'{~I?}Ol[uqkR2kՊe#_?�D LT#"$0I$+ D59!iiDHO(A/z` )E!EaHCo,$$6Tn.wze^8C!ix/dCHE:/10"k4!JfFuwq4lڿ{]ia@8?l>Ç,-ϝ9`"g*\3Q>󶃒-Κ~@;b*s[,(duu5# � B:d)DQu|V X^PX/ I@Xq+D KczcD@b81u1PH/m뭍tw8`p/Oa;Wa<I\J^HL1DU8dmD6A@V^Z,3iclMݜnXj9w- yy -_h0SAo{d W@LԖ6sW9w N% Rijq(/S] ukV �#DX^5VDHE]xLO!'VPOpOp//`*g[Dz CX)%!y^/-SAH^Hho%$$ e@^QVR,G 26$Y[̛5MX,vmp#}͙PUUq5٣{rrlQ Qcdp*J ܤ nEM(*)xg_O/]@f0"#ˆ aD1,$0L$ $ i#a:2XB'D8HU!ai$/ljAXZ?Dr6 e }eGzd"%/0'CMUjqBB#.?Kbw@ɩ䗑O>>:R?|苧O2Kșƹ ^"5|JPYgY< J^CD^|$Q6\VC@~V<;<}1C"$`$zb! A}p p8;VDJ`D&DCLX, ,VE靗 "^g1kU;mxXZ(ARVRHN<_EY9/#ֵK> E[7,ȑ(Wqc{_IiY#擄O�83%+TAe̅kW$0�D <":Đ? =^ )JxdG�'a` !"QV!/Wk)%?>ǽwsuճ0/wf@}='pq~'<\`.g$\OJkW-%``�@@@@@@�!( a *xHŊ v@,)%rv% {H9�QQX*I >wJRR&܌/Rs%E��mDӓ6NTbԀX^\_]pFANbDbaNqo?_J~f QD� @dD) FDee�"+=ʊakUDZZki(+d[r?&}?$|PSSݱu#v-@(IBX T2|,pA30 6XaK'S 3 b¸NeQvjMμKq똛Q\QD� gQ %Dd3VY 8H+À#Kp B¸kZ}_R 9+Epg&3]0wֺ+2 3.!�@@@@@@�%p$ xB8d/%,d"2|L<�&O��8 X(WA�� À-,,:9 ~-)UiI٩K IM>Ӷ+ I �"�DP, Aǩ )bI*V'%zaV hD�� Ben NIHḏšx<Lxd.KOt. byqAnzҟW@Ӊ@"tXzLHBPA28<O u aZ8!42@>D!,+E@,>s}NZbỳ'<S ͣ b2^ 38#iDXx, XHb Dr$n .b�|';5!6O3ZD\?`끎#8\o�˧\`sғ>D)P'n"kdJ~&9K~zR^G \R7'u@@@@@@@Y0Euc;��"�D �@@@@@@@@@:�Խ; r2B. ܹC A� .z;y̛g5?TZjmMmMu?Wœߺ|�"0`?u 1PUYYOgMuϪUˋeEy%9YE_b�=@%|; ܹW-@,NC@7{P�D`  Eh_$Γ"3@Ǻ3O@}i)6#N=d鼺 VUG毝t:ON�r?*+fΘN M �"5 ԍ]Ƭ򥪱AC_$JVv ޜ P9A鯪:9Zx_W3-|_l`X~mȪ.#z׾H:D''@]Egu9Y3f\xڔɔ? :fVtL4^�D6v=J�ĦF` ԝ{ULU'16]o( 5uDd!v3Q PW c]N�qYNNl"3>;M'qEj9_X}D7cHօPcM΃S!Iv#wV÷rʃv4PVO� dJWƪ -5у\G{Lk%-N[" Fc}w?p>;c7 -{N҆zvR1lkצ2#0{j忨x,#Z͗Ns%)|HK4?j/=Ɵ=Qb^ѫ-Dq|�eFn!85a7ا8p.l|J6Vb&i5Xtim=kck5X1?mcv`NJYxvsuu5{_�8EE/NB[�^x3za~n$s4 6RÖ7f+`_o]%ס&hdhkgs0X?o`序̀xkD-Uƍt2P$:M7gqn -7&NNN?@ "_^{ -S(Y:!;j"5`zRzzJ cD,'sikNxlsp Zw7e:SjсtH&zlgg&]ߢ`hE|�bL,7 (e,< >T52|~Cl`+Gs;.}זn5;[ށ9nښ[J>I,o)L|::$8ki~凜*c1O`e^ڒm? 'C *me&-;Fl<RoQw>ЃIJsk|,դU\F{I+bX\t/CAw;Y "6&lBv+7F3jsbmM ڸwSjaDjV~mh(J~t9T!z^/fQyC[lKJ먙A]s?Q>iN #3xbM:wMb.roW@RCC| 9ZɵM %|VǮ3CqعljS}i" ,WAz"*""ߢ+'D o*i|j"+hU[PN]S-݅G]ɧ65V]ʨ; gd0^!Ut~X^ћ?q^DEzxK`N8봂b4�B(OIwn*n'4%낗3_Zݟ.eS:{+INVW`QTf-;DS R2#c^{ɕ#އߕvH/ךd<7mbbo_lW]m躧<ː{/|WSD3++ #G <l풢+DbВcTX2+ R}:xM^s:M>(k-7% Qv> QGɂG J>m@�j�bN#_v@|lkȧ` 6f-ڌBz~֕aZ SL2jge 10, [j[AvpF+@h՟jgD; 5A ~+/nh�ُKQeC2"7#%Bi< wKL=:}g'T(I]l5Ǽ6愶$6!gڻ7FmӜ]hH8?֣w>N-QAJZ6Vd^Eq>[ؒ{BqgǦ8kp,GTĜm$¯OSC(y-HƈzM&* Ҫ},m_EwKl3if5^zIk̿ )gyr21I=S[}`6#,=/rrh_ `,5-O.d,qʘ=v A%a6{f{Q:>[Aq\~mD3MZ·3~1nɦWgg*ybU|LmnZviD�Q6Č ~{4Z*o]<a c\t |oI* TqnDmc3w! W9: +X6"ª"hĺ-n>%y4r3 ay�"Ku 5ڄM m!7x"Tv@lb=7<dѱVs^dv\IIAa^z'n 3Y9 CJRh<7] }譸2XYˊn1Sw669m)h'gm]箒i$SbCW/äKSC|Ԭ)cٞqx -LJ/Q 8Y(?j}o}NHz}+IElNHW]^EaRYiNa*}</L^Z/5&&suwcE) QN*~1 }ݳcSHҼ'E9Z) 3mDNn4Lq"WST,W*f S, >WV/clMe֛}< {lSČkk7sa_H-Ox&>wd_bj=Fÿ#"pL%hҖڦuB*@ׇ^.U|29ƛJiJhƝvpu9ny˰)2ĬKȯ`yG=v-:Ĭ778֟[ 17L ?y"O)F#lފcy^C_(E[̻᫢7?2,!EFylHW�ȱv_j`0)8!]9m|<oJ&zWL)Ǯ}Eҏ*zBX|9[75MVeKt-y3C'򊓵( ܂,q24vꤻi*FJ},ZQkxP@;$XI3YO|&!J$Q6h9 9QL}ڳu5U #^j1AJ2Z};d-|* W*Iv1jʽ=HSʔI^*cQUy{j\ՆclM%DvbDg5w~ÅQMukoH>c`<CXGnldgoI"*ܯh~T;cӶECt Pi,06OfȀ cטM\uv4/*GޥixӘѲbSCI|�y ɘc 7@/+X>RzUGLw cПaYG!Vi6I*, Vk{35[Ѝ~-!}Fˁ2.g + *OPs5ÀX(@cڗ 8EWND>{hUDq)99]V·8dtFxfln!G&e(sƕ<m=#ghH: B}1 ;R%˹� )ˇzyG _At3㡢0󬛜(2GNW@̹"?s&yCe9îٽ"H !<+?@VmD^>ͽ"9˔M&[߼|H{'3Aj}v3RNx8툝䁆wqUUˑtk85Uq*fCW=9Fw"f*9m]ZG43|hLh�W~g>.s}5F"G2ç`FK-|)Y=9OM@$3H[f3m Ϲc[mHAj Gw{c%Fle 80|ߕ1IܻT}nޛ&|*1%Xi]_*$3'-oYl~Y|c-g=cW NA|!<}I7sJZeD }l>qm7U@Нr;9#o.*,Mildݟ0vuo|_ PdY)gMt)L}:]ShrrvWQ}|c/g%: vENoAd`UMJ~l6aX2͋_e|h!AaxpVSV<v_tخ_ţ` X[C9/FLW~ 柿I>6%pݕt٤l4X]r>wQ_W2Z~Ao ړږ7h;Y|~ ciS)|!jS1ג-h%9*iKZD̢$$w KvVt3=7ԦKf'YO|JC_?Ely2Y)g|D֚q77ZcG;))Ra7Qh٩'@̵q@ղ%]׹,Lr"W8D f95nEjE׍}SܛN�&lV"{7ۑ6 >\L'�Drv{Dox`ބM]EW;HuAa쒼 U~x*z`-Ǧǝ-?6然%5n(D_/ϟwݜEݘw1/Z:@d*sQU='^ "+N"{u٦cã>||`4l;3T`^ǰ+ f"3ً$#vu/I>5oH2Ƭ'+ dD2?R[߿`y l47L*N?M M ~ tKTD #2r|ey {WJ$6w/z1_:g!W V%H~UԸ+}]w1wAq\͌J˚ـmwҪAt@,&gGw$fg؈zQ])1G۪*(ڌܸGMiTd%3~Ș̳0 2s[MlAȧ6愶%7z?Ά _3n֗C yWVqVԥeC,A ecәbNk~s3H&7o'k9@Y† 2hXN>[CVE`wHlE:[[rB;sgٴ|)/G3?ZV+..48KZ&\^_[VZNI~έ.7GUFLA1<3K ʏ=24)H[2os"WSGk$MP][mԸ+=]TgA\ /?InJN ;A!�uQ| H@@/"%/=5팤Cr7?uB� \  _Ģ܌3Q PW c]N�k1Γ"3@Ǻ1 ֗Ew5%ikijYB[S~/W`?#ϝ 5MO:^6X{#]I[So3J g-:&:4F^q\3~\0-baNZ{DkI . B&´S_v@0N٭47ʈ~!zd 7ۛrĆoFtB񝩆F_W pFDK:Nz�ya=/+.٩k_$Γ"3@Ǻ:sub3՟jZǩOG&X;:9KByRsgP[skks 'b+T>Cr\fdQNΧ1d\eC7p9c ٯ/;Ikso:qm;т6c1W@]  R: R٭> fhg4z u*^[WWc5;hǂS-WFQpw4  i<B6Bmh(!匐~D5s;AIr7h0ߜJ$y߯0gH<n1M5 .e/ֺ BCƚꆦ_cY_G<kl`J'y\4yn_ ]Yf3y>>wiUp u & SȻZ6\:jvmŢW0q?#bceL#/zo8rЅ�13K�b}IZWpƲZΓ١{λ.15 MC 7@_A{j\3(=9"dM̑ͱ ff;J%񊶡8=̑4_X[�uk@+~tTP6TdUVẇd4~d~_ckS :<jtyJ3; Q2bb挐5]άO/rÈ *2ա7gL}VZ hsw&v_ƺV"0`og�k6YDu/:$%0ՑCf8_4L=IqO;+[;KaCx͹r봠I*Uڥn&Vn#Z-Bl&mwvۛBO.#i#:V1pi:&$mM-ci_#O@r=#gE]zs㯔g� 0`u@HA9\G?u_�=quK~k UVm%rp^�ިT^n{^ H]j,IО/*s2lťAObuNN6ffӂ 6W֝73:A]Mw2�ĎTJ+ Zgǧv͌o`״HtD£/k5J6k0EIݥrN] 9ף-ʰ$xZ_xm9urPjam*1--j( .|m2h> /񊧃߿y5e@dwib)_}:G* >;o2Ŷlg �"0`�WZçw蘆cq_xuVz&s»wOss\̶Su�QHQuˀHƪ @W! AڄM6zwQDQ{jjk:3 _]M 9]ZBljjrRl ')u.d>W֞v�"�D`�;[t]Q!EӞsjbdGڮl ZcITtxz;xsUŭS./0UA;O9&wl]ood]w^BTҍmuSCe9 c<"S5*3ے4w:We&;t(;-$b=iG~(NjQU:rGfsUqce4] PVubcҤgߺ (؋UO&-G+.J~~Ze6 cՈ�ѢbxUe.R\MM<\ (}c?7NG>?.XfQ}pt'M=/s>Ɯ.mQOvkl9eO{8sZ !Ca,÷':&U�bz*w^en:qwXG^'mmNF7jQp78D95@tE>ͣ2%9>wS? ;% |HXuux= oӳ ݕTåכ|S+ttE7TD,6۴'{}Ic2C} 18* 5S$IO*Xr[լ3�mElw;hy_*mh4 rjn<|Wnٯ j W/R/>FSuܼ͝=`XC�\)o̙~7| [`B(>;?;1?c-ykȭ-j nHWp0ˆ1MWICvS|J??0{u�@ �bcIljЋ!T{)۟m6nk/UMֵ\74^akmi ED?2zgQSHx֦.@%yS).п.yluy<t^9M}˂SԌ@g OSJc7"֨vڌ4MHg[IGȇ] Eo&E~OT,7ӛO"-uy�"ԩygDBMFK. ?^M&"Lz{?hk>֜7mQOvwo8XmM;lc4tn5ڀu<v�uWu@l(I$jDr&Eoc'Tkt?/:4q*8=Ո*Cw)2<(z FSJSqϿbvGbMmCn6\&ʃ/7pz~z#oS- }u""̇h-| R4H Xd45 #O%*Lg=�MEEn> J& EWyj<�Wo諎hEQOA0z9 ,~@yȍƿcyh7x8|3Ǖ<Kewk �q;PwUb>Y.ITm3A1U?C-V7+,g}cӏu"h|K ~S"rYDEsȭZsJ%<@6pm葅IN^73"'UL< Ůbu*j!utlj5)a]J(\=kȏĚO{$^x>WO<Ru9AnD*> 6O[voMRio Ӱu*gžכ񲪉Gut@]e�|CI }Hb&jAJQLRinj7X6H.T?;#H3^8@;OXV3v T2x&32oq؅Hԙt#07蘲w[�TVźk͌lB ~Q0x@" ⟬Q83%dDU*}$> =3)D庼y^{2s<cC\Z+ )bf'H3]6j!Gw(Sm~=6`ưlir; n:4=GsMjFܽMU]~iJՉ=U$g$~I|vettav YN`ƽB*|H)D&8$z< %řJ}R; =3.8GIe|~sI*E?*+kїe25T/6%j vcf~^Fl؅Υb2\Ӧwtݍa7[RvyMnTMU4?'oO'L�~꧉ 2s*cfuVTYfՍ!̈DC{roW/=I{uFkf$궻4Lʗ׏/,%3 Sf_ _|CI~! n2vb "Wx]V5 {ɯxW[.g0X:RP:zuqo7uWu'7�}Eng<Xc�S5ҾEpk3-觧kdo$q~n- Yn9lM?[1-s~hj66?̧ `xe}Wޣui;ch#}Du^ 7\zVy,ah.( 1XEk^YJוF5SUR# ^|3S}\sʲv<&geU_jX5tgO2^g]ZIrUK"0e5,sy{t~5S27ԴDڄƲ[hED"Sƣ-j nJ3`hGc5ʘԜ W"h$瀸  j#o[YPG"o(g eFM~2s4bldS9f9x)7w+9Bur@iI'TJV^_RpoיyПti`i@|Y7FM$94r֐FkS�"0`:? ~Zilw>/]: kGi@1~y@NZxc]ģOY >sjSfּ^[7=%t]wT8yjj樃$2`X@ 0`�k늇&~Z˼3hTG[ʐf?mfE!tCZ/6;}qI=WVqIM 0`� 42 ]L\yȖ4f|MӋt#9 In 5buV覭W [qF7䳫%*k5 |N50e = 0`� V7% 'Yl UFϐ-43 ^C?jUV"7kōl5e˲T,G� �Ķf<6l:1qE j J:祳�+?}f 8{~ 箥Q-D6e.W /@ 0`ujegORbR޳M,Fߡftes&@dU{%zȂËh#%)]Q=g�"S@@�D`�mY5W6*� Im>*b5Othn9!ظ{bd 2 >@ 0`�/ޤ V h`G9˚MfP *!fܛeݏ Qtb$ @ 0`�K�  0�m%@@U�;Ҋ?Wu=XL]@+M:Sɟp}mOtt�@d@@U] ߞ^moK{CDAb+iR3 {Cs=e5t<וf+ã"Y"S6t < l_3nNZi4ᐳxpIIω䑲 [eF4}ufƻ)hDf鱵*n~-K==Ps键g�fuWu!@,0MU.? xzĥm5!OD9yYV\;`Sv`Ug|:,dt%1bin(ԞU'o>%C�QQxc_Mԙr?WP^f+(ֵQQ(|)(kWĢ7gH8lB*B/""( SrvXQp RX(R^TTPCvJB�Ay ݙ73<;3;L_P7!fך _bkA+"qz蹻O%qbg{Ҋޝ/ Ac\%�qLxg)jSk|ts?l+",H f[Me_؝Ot8^w g_!S :[/`k %hQK? terU JZ 36TՍ�<NQFLBB˨rϽyz}uyϔ-nZL? 닚 喀TAE\.Qnr38 Zo3vcC'O8M A^Ug=!'!g%8FpK3MxŇV`Ƅz 7ſh a#% 66b d 9Q}UvIjNĩ!?6e�1#Eں7ؖK'QUMoKhG;l^j?ރ dMI-|^cCmα1I9ʞdD/7&sCџș$bn`ZdRW6+%y/NX"JqY7nA2E)ȨlkozʤK0, ˝_̥>${³<|7^ #hd \y% ]P?U&TG0'Xgea%9V\ +?dbNii nLˎ$"J y\UOGRi[JR6lp\·76r̷홆h!"A3;(Ut߿n↍%�73 wmEpbN^5fJGcZmoD)u.9guvfMꟙMX>֧KM٫ݿ<:؜}݌?TH0< Ϋn+h7L6RI2 (VwjÔtAI~T谘'cDY4$A4UO3a㦇EnEpkI}1X/eA5N( ٰsI~~Cx)Môӑ^{sٍ0q !l5@4WgˬՙS�1pо]qb4TWb%C#=)=$*IzVUjxR?:' W[ gShOGt4OL=_pcN&NRMl`F4TYKÝ;2{SwhɥTD6Bu+rо`lGDX{\mh:摂6Mm(g)ڇ7އjҝF ՚IaX@{`+- Zd >Ҕ^|% J#nҀ8*{ҘC\=XįA}Z.s3k#upQ^T Vcn vG[\9 KD7bD:]k6.ɍ^Db_𐻞heD)]ZplzE6yΞ3�1#@ e2lt1_`N=Ivβ*ߛvѽ#=�'IMf68-v%soO?::3^ޖtx~auy {[ѤҼFoSznu*o=ӓy|{ٿwt~vAQ6eܩbL&&֍}xoy~eքUMw lds;0)fO&$W_GiڢZ9Ili,R) rY$ڜ}iCZ :#N#nü2xġ8\,'ObH([lCn X"$\><| l |[ݫ-6~z9`g"&{LO)/n;"-tДĢC(9yG-1y-#v = e-if%)A߷ۍii::QQX*=umm]:}^oֳP uY.%(f鞉64=8wR6}y[(*"%zwŹj4wa8tDtT_KIou=e;j2s0kո)7 ۔Dދtr6}{IŒ@_ N%9gyWiP�q\\OanPߵDZ3=Y<ʏDS6Ds\%4S_͸%0, f� ] 6J֏xRpD^ |n\@,=bN1=ld@:c s^$rwArY^I$7zA?]7RFTdP$x3GJFFB�'O>3af'>z?_ʙtѧz?G멨ntU7Ujioq&»6ƒ_7F}$ƻ;ݷnaA_O\gg7VZ73-lXIޤA#p._MP[ 9xcӘy |^oTAHK{yě*tsUbG˶#G_,2] !(ك:9.G h+x:^hI&L15Kzmnkwrf%lns#:gR9>KD{" w!(_5ⴝ[Ļ]Ha9 2!"%,&�񫓂5J$vq;)QLʌzq3U�Wq~ 䓦h73�34%ҲEo4i ө7U 49ogՑm^R[r:$K*rTK hA%bCIY񇗠e n\sɉJ#[)!?}-#k>EǓ&6&ϓ|{R|H !Y!C ;hoDEsXdr<bޫ|۶2Lӄ'ܚ7*ׯ &_Ǝ胞2myc2 > [5۹tpFcW=>ЍEY/>-<ƽJh)5pd#w<ܙGAl=ltH z\a[3Hܻelbl*mͯ98S<n(fy:Ƨq35)eLy"k]sљ,2e'AIぶz l=gYV op6Un"A׵[z0u۰7@FJ#\Mu{\Km db_G׳)<_#�"^�"8`㬧LUpͼwOYޱH"fűtYM?!g.Evpwk=hM&@hYٽHs>T=eW\G/~ l#|[I CWC-&"f.(y)!?|Lpvʞh/G7k Lf+:P]6t]EaF_Iq9edխ[2o7:說^ݶM1mVc[0@9[E燨N]dͰmyn Wep2"vP_hiKe;o^⿞emLOL[G>$]_;ud]�MZ wfD%7DoIaWxK.;wөT N]i]-􈓞'w]u}kF _cmY=,r nyܜ-DU Lh՛i+^ J['é-LNt26ۦ6zgaPp?PGĮJqM[p(fRU9掞 Ueб({ʔ9D�"~jD'U)˹q K (3[Q}__.瀻c6Mild'֤kՔ$=m0GJi8 = JƊ =|pt2RQ%/Aq,WX؅p5{:LZ;|v ;x{qtiܟII΄Tؚ Wį|͋B#=L@KNΦp̥3\gZqLM @?jRm4*Q6rVK o^u%x|lء7Eȗ|`okT<w/ @ �qLx3G,miT-= ]o3/NXxuue/oj� @ R<~W@@ �� w5�D ~W M@\ �"�P?䎂@ �"�"@ �D�D�@�� �O|yG}teL]7h]֊bvJ�EH3�DĞ>LA?/){luC4rXun׾ %'P? SrK5Z{FZoe;eK->m "z4sU9U۸+ x_q;� П ݍW=̝8Q{ ˜.v~;q{,LVKn�'ǬQMyXg/߹|x ݓQ6'TsT&O|n…_~ 秮RTgP.2 NV; (=/mw�QPmK$XEKtfm{4c{_t0@qi̊Fؘ%ar]szIw{dfGxv:J^@3tٞ 0r"!DuZk]a#*zmxy/q@ߋ0i_zQ묈[m% 8f~g|ïSq@X&5Q;D[?瀻(`Οs~M,w֌7!+ߌ?~5ΏTzSNc4EI^,�qG4v⫝̸\ާ17="yx_x}Hwgh=Rdy68]Ϗ�A? gj?U%@bw+'8 AV۳vw~(9{RvqkL Ѿ)n'pw_d zcUVCCL}Ha MeOkBcwWpiB0^S[rsIJGDy bwk4ejaEӨ&z</rF�N{yI>fމX\(s{+1ە.56`iB'oJ(+Kێ)'`Fy!l#h+^{ΞhG,o{)_lLM}Ï G4v\PfQOT~|"Ȇ[KGϮ'*nu{-7\y,}Bզwg� ПDsDbWZu` yC †ܙĎ,쁸햫Og4͵> g:AmuA(YOYs{d(/k4 qֈ( F=ڈf2p,8B6Ұ}P|�}lXHs_KM""iU՟uef4?[\(~ 1d:HO%})gH \OA@[io'qsZ݀0o#Ð.1݂fYg뻿4_\l)xiF\�D�mi8[ $󨚁^󯿥pF(} ɰYegIvPtD~磕y]Oi*^lBӵ(]Enw('/kѼTI \!Չ2<m=METo51gS\.ޯ7l I;Cϣ #Õ*;9w)++GWoBH}7(iK;XMukq-O}D^b((")N悂gώhk ̊s\S7hKb*ho� @�CS'dWܩ76z*T=YVpDǜuOz[i+J{نWE9/!s-eRFWFbV1"CE-Asv}p#>4DhY- 6�s}yIPt EOeoڥ?fw}.BqU`9[SZp[672E1Iv7!|Μj[fe,㰃|pޝ @ |-9gY'|x h}B_6|_#t[hK6w=ݠp<1loYUCINs-66H߿o<3 ǫAay8YG 3aG/Γ+vVk肭6JIlxS{b/l>Q_8P!>×{:o6ڝC c xZ$I\V_Sr'lժm~ {/Vj�"�t5ηuMFϤ,-̺7P}dÇHFU JjSCPC۩R- 7XXU"m\%#4Ǹy]r}M7  7rIkZaY. f{Rvjћyu--Տ[A4=J0| %1>9dG7rgj +t_J_lϣsFtc_y՚L_r D;?bM]L,Vۋ$U�Q~QERKqHbO\DF?<R^E𴪾ͳ؝Ͻ6 �@#V&ť l�z~7MV]Yi&X:AUb5zo΅Fގ,9XTm69 ڞ܃*TEÎʜ" ^d, Jqw@܊9Lu篻rH#b�<n(ZĨ;;x.{,lg)k) |,9bp]Mo1O#ޔ0ARW[`sd@+qH8E)%ERUPe ;܈nݞf,Q|h)�"⯣΂0.Z+hIPq`inpug#7�D�' >7E9(3AyDv<UVƫ/IfG%9S#�A' tt }|Kg;}|xo}k  8}KCqp|tRXrRy*wi{_v~ԁF~s}[cMK]USMeۊr�D�@�� �"�A �D  @�  �x@|@ �"@ �"@ �"@ �"@ č �@~aʎYPL⾵>mL6?Rʃ*@D�D�⯧G1:Eױ8Ԛ]mE.eـpRv-u:ŋKsGju^ɿfC_XgT(qfMR|TdgIU%o [v\iib~m#^T\4l �  @ >?>N6 :w;ޝċ.>i{jMQU99Y ۼ͌3$ʇ 9?Q2 9x0nB̮5.2[J'5=y*9Tڼ k=D[�'{Y^P'R㈄O+G)^1+ gEwCN\0 ^ä;!}T[q`@lC[ /p6 !=hjAsƺ!WE1ș$&~F% h7<n0 Ț֫.A\(/lIEք A]2ޟ.4d쥙bXl$dx- BPYiW|!%D8hw~w>* כQ=c5CTL˨ra[ǯ`!C[)Eȁ$7Zwi1*kX?PѸuw6'Z{0 N3X${mtUt񶄊1/@H /WA7DKMI-|^cCmα1I9ʞdD/7&sC0F෵4P8m^ylfhvc%'ev@J-tx eG bQ%{k:v'>yܤ'5 }~t_W'sd>)-ɻÞ,#o.aD# :yEEiAƥRa*uo,d[xRpSnx !wp\ 7WSK@U\pUAtOf>}aKEmk6R͈nw%6_U5vxCǘxv~A /UDu,CIgp{Mp9�A �I+bϪ\É9y֘)!&q )k*%_3dɻ;S;ظcK{:>R̯s.KNGU_�o'u$OX#&[{yF08PHE*bh1T�Q|;guvL0Ovk3󚪯9s,ګkq\CqTq/ &y,ZQ- Wi&d6g.QDxg%q}K=<Ghmȇ<}? L1@�"6Bu5`hAJDX{\mhR?uw7MSR74d&վ㽈hAЯ:\_}=`}"d#!sh{RqF*; ]Sn mt9t7D0#p4ulnWvܒ(m}zhu%Ui@D,*+KD75۔JhuHS/Y+(DM]Ƣ7^gw>i.8 4:@"8)Kr1]X[X7)f)+.T Ox2*"@佺⯦4m:dRT+GZ#@o'lCn �7lD'9Jma�0)fO&h$W\^sݙJvwږi #5n2dOZЂ4 =H,EprN$n:s`+%S812mO l�Dy({� � ݼ89Hw?rcA^R$-JuC/ 9ȳ/$4�(Ҟ60,٫*w3& > uAU3Ō6:6UM9UefSL>~Z| ̊˓VDfU="~OQ3Z6^ш煮5_^_[=ISe-%%G Kt\ӣ:^ :H @�!W]a!Z'3=ђLј2swېݚ>J#Fݬ83Tކ^$CAhhp4"3UV^?!4m--ɸhr9ogՑm&,QC؋v])~Q|fa3 W'k"9/f=H8%c ]T^śj}2 J+*ߍU#NXZ Dc]9|2eᕷxsۋ ~Jz˯@GDo鬢k/7q4g{r-[)x({� �$!b]α…ZtE7ǷTi\LMFS^l\tf9Lej>a'6Hos3pIlЅFjo(wcEmVq{Sхz )֫` W(Ƕ r;Riyz<V?P:D~y A,1kW"7p\٩ɺ*#te^9[Xzˆ1']K?՜A`^1@q@@�AbjAt  (S[}{Loa{l@�AT!/@ �@@ �@@ �@@ ��@ D � Bɀ@ hvge*?,}<A �D  @� @@�A  @ ��@/"OF%]֊bvJ0{k/*h<s%<<lI& GߠB!�A[}暨)!b~Z01mʞ�[:i}cI]|DBa~a@ij{y; ٕ3?|n ((9p}eʿ !K) yT@ApG2nd@;Ug1&Y0!:DڷPud2cMϾ"&6�A �mvGF3%=aY};EI᝸&;%zD~7vbN *#͕52גlw}ӭ2%֝ԡ]WD�Vni(𤅱^*/{{;vaƾkؤHD %}=4 2�"�"� /6q r@h)4ږH,h�> ۵ۣrХ#MFtz~Loitw'xB:1H{|g{N4h.=j{m�{;R%_ ]6s8x AG>tG/1F�4z.;":6lUӍP-x{œB�*?{gj w[PcN:Y /,wИgΑ\*,Jz`JA9N10nTrg4v@)~wC}v}@َ}^ g:+VqFy#D>4ǭӰRC\1q߾Y1׈)]԰ 9W #Mh{0޶lu͕QnRa<>Ս-ʰ5~Ł!ݝT�"#BrIn7px:[mn2֞]D-T8;@t:ߗK|ؖZ[rÕGj/d\mr]` ecaOMO<QeuY94tOٗ\<|Q輿>nITviœ+!ڈ֦"ą{?ʒy|pǟNG =?AxZ5{ |4e/ql#S�9ӗ.}<y%֋T<)r7- tՅN2ߔPR[WPlxl{qgkgqO[.g `jqu}uiػM!߾w=r)m}5&dxB@ddp6>V9\ϲʍ5U`q,ax/E ?:[> X@*\|!oFخ1=o{n*$z]H\賜f]b ɡt$?=xJ3H3K-Jk?",#F9+t`AI j%mvѳ3IO}+gdFImXc2phsn0481%L[h \)H@d.;^ ϸJųbwn�"}qfI믁/ "a 298B6$Q4^Mby7i16Y>,-'1qV(ҜcͻXWs^ qG`_K&mdE:[PuԌ2l}�@�'Ib16Pt6kK+۾I# TV&HC)|4:oWzNSbs0YSGOYdNEnQGd́KFlȆ=Of26'|/5j$1@SA 0\3�_g.NN, EQnw>z+}_(t7- +9dǡ獎 WPl OP;%߻^MAHsxsRU{oblз=-5r~?/1 9Cwd/*hD|G;تs;j5|3+.QsMpa�@(#N1KIo>mE6bͺT:쫭ңH+U)N;FD{َW2Y Mgr#܃~:gK֍(z`'wjThY j0,gKJ 4mď <@O +tz0wn"}!)[&zdvH/P})rK\.{;8[/?Cj's ާ ~VDŽ9}#%{o497\/t5 Xa=:�A � 5mD4dGt6Ptٿ"6QDw'J [~cs9kj4)Q***=hvdwoxOgAf O�0u/倊7PΡ]cI1?VfT)vgѫB@LvR&^M11VJbSS בB&Ju// zy|ZCݵіxb] a`Ï TD3+5.wZμmC_/-x�DĞW9ԢmHck;K&#Lg J_f](ܘC^GClLTM0, ~}('iU}ݛgY;7{M4˛8o6"\,y{K*tE{UHvh>b%q,Ln \P]+; Iє?dx(3.5ѥ5Tc/::/B5 qn /n_R{wg:[u/Rҩ@p+m%X3_N8z3K4^ TB4%5 5f5 P8l⃥_DPwEde o&Tՠ$4q~jB�1 _{[@W*2`94p'."LW�"Gdɩ6h? cg]~}COoOGs.4(<4< bPӌ%Zӣm7= mpణ67EYrNn L*hyÙi?&7̻V|Fr=Cr>CmoŇQPנ=0I3]rTkߺlqVcmnd\JhߵPL0lW>"b.ùvmn ( S֞^k) Ys6s[s ]Eڄ |рpa^2A^X?.e"W FcҾ}Zue%LcXWeOBRb "^R9�SK-;AM�D_Qa\|sBmaU 41TFyxЯ؝ @�=n$X3HOK搣%aG.qadzqYemmvT35_#A� �⟨O|iB21g⇜-Tᬤ4wv @�  @�  @�  @�  @S߁@ 4u @  @  @  @  +j,&!;5&*�D�D7ĶW61=\1Ut5Ǖ4Bc5/gWz[iфa`lbYsuɿfC# y�ī?;D)͑LI5ndz5MX5<LUޜe+ycD],[„3tU5}VL��%ƵNqfH�"<*d']@7o{6MQU99Y ۼ͌3K\!@�'cY^P'R㈄O+T PFbWV>D^[2^יN#"ܥ0F- "Y^'6y'h5,  OG(q|�D�DhjL17_I!6CYDOJX)#=,m5 {5(  ;Z6&Ot8^&^\x$V}$Yϭo7a GE81IerUq)퍅JJlE-_ i~ eTp,_{?2Pn_xǥ�$8U,{cj\a&C؈>2ޟ1ңD}bs78:)@OEKc '@6CKJWe7I=^!xܬF+Yf^uўHq9m-" [ Z[ BؔT5Al=7&)YYٓdnhV@DmMb\tNj|ES$ y%3I+*J 2.ܐQ�WqU <y^|-5 ȀSR>fR>U&sd>)-ɻÞl9 KD!N^s7 ewzE20ÒҜ PNgIb[ўiF�+bDjң3;(U7Mܰĩz� @" =?hJP[9J2ʒZ1I榬ޖ|yx9, 2-]X{˝I d\7("Yݜ^:; D^1K";0} DXDahOZX*xL^Ep #&T<;K/gRGtk<\su9Ue3Vi L)aZHN Ffܰb -[ 2 Vh ,@$ 4 ޤ2W# v4z9S3"KyiҝB6DI3t Dl?6MXN:]Qs'3(1ieK;^Kޘ3$}h̑y5p{b@DkC\=xJ% !w=vB5uhA8,߻)z� @0CɎWO1ĺ$75GNUW\[V55dUܓP  %*BYH-c& Djh'b8#M1VT+8La.6g_AD)2lysscRazWDelsV%ZoQTy3y<[�D~I%T%qbI Z/׿H`!z`WzĂG) hg_oyu,8cMd#sqK"gwRS8ߍQ4@T(1l4J H+a2/K"L~ģS̒W~ցhIf-4<Z�D7D^󼜜g}؈^X زҨyT5<}ϑg6da;rbhXN?A BWq:W񦪺\*RyhU S$ k߅Ҋw|Ոv>T~$ tVQI5Td<* *L~uR&BbvQYiу[Ž?1w,q|vNLw67T'47E9ZrqؤKt2j4'BnPM�抽Ҧ?.3DuUǽQvӸl1K&R\ȅrߵ7w֥ nsStf9Lej>a qL,nyz<VuP: V!X@y݋7:Ls_6͍"n } a&CKi| SNk-5~l*ak`y^U?zT{tٍJ}L<w%j{K.{#x� 1 @ �"@ �"@ �"@ �"@ �"@ �"@ �";]``````S�AIĂ @M@&󷂁M@&#)iMUwE~  �@,eWgY[ZZqudOCaYc%]؃uv؛h E/z_q �@$e,C155>/6ʞ6Qv%-2l<iv]s㠡C&tXl7a}hY0dƮ#{F{ვXGB շ]s9Ii.'mL~EM@DnTw)C% !_.Vv;sUՕ,TZ6=2VȏMœ3>(V\*pv[/r0J/+QT8OSR]R8d(YJ*sfDg%,6TW%͟ h=crB (]kM l y`sml=ðKű" ZAȺR֏9s<oHǽ&n[Dv# Hڭ f (8ra˄u'10hIc02%O c=}omZ-'2!!lYd:vuo{0zse2WWTqBUr)8a, ×Ske t2Y׶<`A}&FF\>HV8OSAX|cm]-mG=*rK/\s]#qZWDMVxq SDri~0gB�"4)pU\^bm]M^Լ]:d_Uw~~O_FK&-5%0滽0EƳ˳ď}HޠFR,8ޗL=/{7_ˎRB*jaBglRe:ӰQ oEõLrAOҌ_!~u_@(!Qk不&m$d;=؃5[MDJTOlD{ h©_aXbLԐc4[Plld|(Ϙ#; 4f#5QQZt( _:-}܍}�mxZ0qKuu&SW^3R^/pµ9 0S=|7_nk=ViM10'7_!YvDʺ#2`[H&848-β 4O}NH ǭ==hy 9ژfi1~(<9 m0+j�@|&eDV̬O [Z=^{+jc׳^5&:ۂ@ 9j)t_B.Bd0L_*WWa|?-ݠúB<prXT߳5& r! o,)=0HAh&KGX:aQ3zb֗JF̖ygKvnF3 et\ [}]JZw?ImC\_ԯ^Hۏ35(ʐhnIuUf-^J`sc BpܽB"2#WL CK e3Y45k KcFV%Cq)p/HP8zou;A46dk3]ۧ +E9x噽xe-uڏP! .h7p'ZUDJܟ[8K c#ښ0_ `nE|mze8sŊ@�AIk[[[*(/-+y[]֊&}yKWM*f cOtuDeg*9 eCRw,RI3wVaDݳStZ[2u.9kD4[(g+Ϻ_}5J-mL oB칹{azJ.q9s=楛Md2*n۽hG+)\[za:}/SD}pq=ۮ^4 Zk]ѦʎR"y&:{c@s0@] fxិ3ho]bFV;:c2Ʉf;Bt ) 3?pxYe2@Ƚ ~C)foM=_Lu9@`x6Q5K_]|~]ifTe=i㰕 Nה=p'ZAt@b.u+RE!q<*Aͼ8sMg̲ivTKQg4;v"ܢ)�Dhr�qM܀b{;Iu5v~qɳCn٫~ezoQC |G"]L�Qη٩{ϛCVrf%v<kgGTi^8$+ЖK؟ΨiDkR HC\?m>=98i\\STeXaS"<w遈طxLBMuv$9缋ͷ!=~b_w=Gkm1vdS,dt/!Ь?X4!T ↁ jDut#3HW㳃Kr7\qT&9 7M2m''2/!2bg\Ǎ(Y&.ĕ7,\NQ2�GpEYXԹ%(u0NQH5k8C*V4>Kc.=D`eG\+j@&JY]&;::*߼yuu7lߓ}}!L}<f0/h<X!D~rOH^I6Mx&< ƬIuQr=ߗuB=㟏ծݐH'ahuB`sh:)K/T4KOs ;ÿHQ7ʾ3^"`#[3꜅YկTdxb=ZO}!8̴T(ԅ4Ja} ՙDve @&fĿLS%빵o=" 3cěKF,.J4Ӓ$9, qvrr)UJIX,"mө@Q-Ow[N8l3GU, 0nQHeBtgES=YK15R55Ð\5N� @wHY˝'n >P߽U'OeݙG"[פ/tز"Ux=O<h[tf!Dߦ $OmgIחuƐh=}b+ח:$7EjYE;;yd&b>l?>=R'9&vNύ$Rпr9|CqtC3Ƅ@0H"OO>ߗOh[T}VJ|hkdD % fE`0fvV:P?/"Xڥ@q)t/HPD,򮳁_ϛ#Ge@q;KP y2t_b䗧Te-Y?1@4mWvL|/:B&\ix%[RfxN#:3 I^RYRR1OYE@�A�@){ܜ>^h5Mu_BS0>E&! 3=g3iۮ­ۢ._czIM@3Un EDE^緗݋ٝ?uv>'z§6Lk%.3�+}ˏv-^x}&!]?{cR( UBU RTDE,(^ bWb4 *])"(Eo6 "4&3g<;3w{v"T#K[ budۂ[Y hg_mǿr_1!͵J'ފk_vI|eD)x/[C,=N)!. \JΜnj^Imv _# %'V ; cFVE/$u?;S|t2PoC+.XM2.(p[ؚnc]2ח kTxE{}X5Q!R][+v}4V^e4a]�=/6}Spyt_lkޡhS=Lrƭn79J@Hn{Wt "85}S*ܠ*x>yFVEwlUS! �[1~֙w/w:>^}gOD֍x⥐cA!\e^õu;f[׾Z' % MI<{_̳:MG=:ז0T#*R ۡN[OzvH:hknRX9¥9f qg٪tKڻ߶ŭw2h:k_v_ Ag< '7o-8dKك0G]OP&4MX(S]\+W~ٯE8' pcF2>ܞfB *km3. x:d`7q-\8錍E_ܙJ9(]QAfn(bZf5D0UO=O8"#zy[LBKc 6Sa<tۚ8sal߃4%qG-jXvj�~ ĭz?-ޓoOl[N %]La[wu+QwF| `zA"L'oRU{dԭ&bcAmې"�A~zn<)YKǔ` mA#` 6`o@bll-"�Aq 6` eA"a 6`o@wb3����= �"���� �"���� �"���� �"���� �"��Sxɂ2T[qS&G1�Hy! G1퍕j+=etwmӑ <�x'PWDՌ{.8oF1;VH@ NF !nl2e9Wa-=?3g"�LQAlʻH<k`~oSvDv[Px|jFjRDf>cpNnSz8 qѐo(^|:"ν?q&D�ȫ8.QHdY ']UVWr" /7d_5'j[V?Q_!d7AZ`iJ Ysk"\HQ1^q4C 9DNy3ʐ܆!Ҝ]L$n{4(Nx}&|GֵoPD�X^du褏-CD՚pDɨCBZcnlRǼJ87ufVڥ!Q7ۓD\-G7r9ulbyi낓JJYB3P{ /:SYA|~Ôu4Tl]@| q8/J FDyyiQF�SQyewl]ƪ;͔YG2F7V-@Fi̹ਢ3K/޲DSDhHc@]R, <){ ǫ y3ck@H|`P%S6 A^M Rx5$StFQ9iA`* "-W+u>$D^3xΗ'Vk*{ 1 ` "N`2P%}ەn 8�ApjOCq2&"J<ԩg]y<7HfCWeYDd'l$)Ts �0%kܩ](K-BqН`F;;rJyi+FGTCY^s]{tm3,₈hUeGi ѕᦘ <1B]Q IjNð!PAT^Q �Q9'x*iHo8D�KTƜ Ge=zE7dPAAC_Dy9e\HwI587 L^-FJ<C FA`"n:jwY F}4 $1-3-)"'V7f5V2D44qxTMl?{h!2TD% dc+g1KJ^_[My=Oz檢zzɗ:|Y{ NNn<MHN{Y!^,`{ku6?Aț[AXzij[W_C* �W "?դ^)xMǘx=R%9STϼ``&Fsu2gyJMD@/ Əmh;T}m>Ё^]iC knp/@'_er6 m֝‘3 חkg)ʙ0}Mν]�Ez#x "����� ������ ������ ������ ������ ������ ������ �0ij���K3D��A����D��A����D��A����D��A����D��ABWYleHMD(Lw-+.Idk*eW~M?鬧 &&s( ĶڈiY_s䢁])э=5N>sD01ͯ>0G) 14mZs;F-ޝy,gR].}1'Ciۥ׵?~ $*ƵsOã|2=U9WA쮺nA1Vեk-}~d =]Kc:؊d/[6 >jMH'=lcYʹDDH&v^SyRETUeIhU~{鑜Vᦞq7U6cizGOXCՏt "}/6 ��(D|!ŵOやKZ[ZZ\zӄB+:߭pKE\2C]ǒrc6vW-&DN#>-֊>^J4q2^tёwf*N ;b֎qޮbw-[<A v`OF4<z[T{u%D+6*9{eX5_O;Q-SԮ%*K 㭯%mY-s6t7Kuه{$DiQ8!)t N)(oS`݂ �b '}WHР%?#<M~?KB8l|o3WsNB~ϫ2L 2nWt/3kٌ3X"H6wYmɽcE@fyYןJxQWЂHoBR_B.svg$v~WK)k:۳~cFoHfko~wUlK$XKYW7vk(js~ B}:9bĮKVWsVnىsZs;i`$Iskf~IXBM;"aŒn͍BtvUK`Iΰ8T0;xy"c-52Ea_d:\ꪺXYa]wfg|S5օ-M'CƿʣT٧L1cq1[K~s{IA` 6D{%8cp ̅p o|b޺ 9sFYd=٭ 43쮾+U"ؽz"ng_WV2fu~M١jQ皪¸KjY=ä+i̲—앑9' ;Dt#Y}Ȓ,,%o|/hvt"uki$O؇ʆƚh)1oRknZ!$hHks~VGY-EWW0Y|rM:}щ Vˌ JxWd e\<lhrq7,~#C&ttn7 =US1h7 bv,=\Q*C*Vz %3c9rcVU^)jH8dlSq/mDg݆k̒|9*=T"�LMA|~Ƴ䬏ٯuBJG=Zy!תdsK\qw5O<,㭷֞{ Htįi/X*'u} 2S^w]s˚mKjAޑ& 7$~ܒO1~v TV)/| c~:ڳAs#.g[aXbW`IJ#ߘu]zk'~x2 b8 犓:uBE,x; bÚbIj^[s2cvDYGY:ctXw]d CUWutLpoz 6?>k%BGsny~0U}:kȊoLVlgqDeի>QD Gޫ_ Dd.8LAv_zr7?D nT+*L+enRrx–mY۵VRs[VM%y$({œ$"Ah?8c˖K6u /?. $C=gݘ3q5EP(̊Ek70.=MҘ<+N{-/Ź'2ux!�rXt5$p.&Jt~[P܏7^jM쥯铭Uv2/8i.8Of 1"n ׂ:ea;|rOq#R_pW;}MX � CD)k#F;Tm՚E&xA̳hw<[>]iAtS+œ$,l{G GR;rI 4 u$AЁ 1K;Q03KvÝbA]W,vb/v)-~$s{1ĉ (8+Sw2Scb2 / b{? (NjA@*k$7gkFb|̮h "D_)OA� 'w:Z Ub_KƿF v|Q]l)zNw=PI<smkxȧq7lIWח s-S+vr")Z'󯮪6$Rq[i聊}#}_a7jw[f'҅~xSC sM%J3qD37Rّhq$]+!*uwhmzd _zG,= }ѩ'q4.A3F /BAa"}[n1k]A榤(/k,}Uk}W_簵2 K}! ꪘ)CЇTw0EX^[%7)WMzHeO;!Q A+g(M ֌TKھoCm v^< ӈsΕv>2~k|,bf'=8aks`W,z-wZ_VCFн$U$2?H1[[*mŽkkTWA3Ўh-wE_^5SB| lffegT' Ǜev7v\6X]O}:2%%̴g'4%U]--Cv:MɎg{uԽ>RtK̮Dx � aʚy eD M4f8copj?jAVV1\xK> /(~yxnayy|pړIMæޖ,5嘾pl^sݛ[)AR=2B׳qㆫ`tĆv?.} VXyl|E~Ww1?vyxI+G~4$`,}9W9AkͿnLy qD~?9n-XצjjZx!hb*  Y<ns enفeN' peAz^daDM(hg.t%"kpxֻ (Di/D I[fknɮ �0Qb��LVqw b`���� ���Ge�/0 ���L �yE3�����W=�����0 ��� �5x����@`n$r ����3����)fb���@A����DD�)e֩T*j}y]7Yp@++MP}Joa"s4("�L)fvѣ}ZDA'jv3D-3E!*~4Kם^4)<屇7G|k~rTژU$g⛋4 8b+jwmP`aXM~88Yy3ٹ|Eݷ~XS\Q鎛NG6& F&xy sN?'?oX# 0D�)?w MRk_nwlhdBr܃uǦ1uJW߼&.wc|5q݈ p}oY# 281G63bw}F˟T& *c(s({SYYMM\ɿ2OQ5mAIWO AeCHDhjd�M <܍F&  s] Jg'.Tz1Ga=:�.5d_5 -_N9IQI4~D YzdCN�#*gVW./STT%R?'uQHGV]T8_P7[}:B0Rc=M TIc.sz6,0.b5S27a`b5]-\ &hV<883A3ٔmIBp! )ilLH(ojiZ>B#؃X "j@?G}e`=pw",NdI-qDqFKjFq JnLk_081q_ xBww4.egnCDDDZ2|Cx@n|-TCS5,9R"�L)fy+y `K'CRs ?o6%3'ՉHQ /cX!ntefnŋ:S Ңn],f "9ŷ(+~*p|~ VD)Gg;keQEVF0TwL,HHS]r)G.89 SfW#at/$CQ̫XIS[ߠ8~1̸ѝ$YMTnqckF7-X<B3 J{>sU!8~l?˩c=/Z %yXs mC,|A;:ޕ"O׾Dac 6/)D v&-SbO |4o@q##0~ϣ ~Mj:J6ڗ?%V6]U4@`O1/ʘDjx b=U~_wӻ+{'];StF!̋~)"a۫бqC|mEZ e&yEwv3/c眘E )a1.bȶ1 9M锰5ͼ4*n3uȋë& $">u!9߅6'ne{<x "mMT0#iWZbOgh!F21-1ΚD7\)rխ<K+汯qaXO^^ockyy>} f A=8�kHo^CFhY^`r9fQ]*`7"�DBK?먪b:D\p9_^Xe=0eS+e$^UuUE'l$)5%X?ߨA^4;ϜxXOg瑴}bk$QEODdA`e J+܈ɫa,'=_SЁ'K[U>]A@\dmDQQ?I[b)d5- _A$+y0BJ+>V1Db%o!Zݐ^ GU\)rխ<K +汯qaX?CH{m3C?7}D/# 0.V]U53Ry [-:REæ D�S̼N4\O!TGTCY^s]{teרu)/S1~82AlUn&;!DUУ*Ū^NUvTȉ]]ɕYujuVd='螑JS�PDsxD궑 N] AZ'SZgSdGŜ D. Jnk_vA䠘8|^K ƬC4S[] < wD `w^uֲ )aeKCS`ç D�S̼ '@|%WX%ېGྨ0P%3,gCM1׋l)* QEE@TvLtr+HwUUwqʡS͜OWz~w]UDWO�UKG~FO]=s\3Ť>3GĜ2lΨR3h4(!"C<$-Oe7>TxْAr)f]))q=R{Y4L/M9'g#ռfIA=LD1Ϥvҝ^FT; D�S̜׷<5#ԬOuƜKimɩ7B>5!$3?1-N}UA1/=Dy(jVDlF4{)?-R!覓_X0>kz|AlnM / QEVF"*O)d漍zFVO݋b佾F8{MvP6_+/a H–:CWIc]6?sn}GQ3œi+FF3)ꙫڲ%_+8:~uz>Z~Lf?SڡZ«O;nCFhv;/>ILLK9)x͍! 7r 2 '2q}`<ė[^KJ]6cE6lu3nyi'^u u \[yÕWיɑ@`O1W=rjC xwd}:{<5y;^!Fsu2gyJMڐօ"ޮEp ]m0^sCNylR#5[.-VޜJ=ABX_TTMnF KƏmh2R "D3MIװwR/JpCT_Vҍ0 ,|ߟyy\H~LRq{*=*ՐW.եv1fPs/d'(hǕOn`v?{ӥ_s6nuJ p½R"Sڗ( ^c\AM"uq!-aսZKCLQFzMj "qe"sl,|}!-y,xE;}E7 D�SS�ܠ_{[ w&׏ι?A+eWʸF&0Q�AI><U H/,R`|*b,@~NG?tc)<RF~cd ��S̀»ltUD �\)�"�3���� �L1����"�3���� �L1����"�L)f���/�Ab���@A ���DD�)f�����0(b���@A�㊂%ݵ(f˻dGWYleHM7T0n5 kR~<ȏ54-ƅp4ٰP`s dĿdGу=NFʂnXNۨGnd/$aR2ޝy,g[wu .ˉKOã|2=U)Ohi]y<~-*>?BKmƢmآtW[ %U󾵴w!Mp9g? uuZ6 vz WĜXgk"8KӶKk )Ϊd3ˑ>dc,H - ---.M =iB@hnAdtܲh3Ķ*)̎ ZzAۋ.ؓͥuu%D+6z 겸!KXZ̊:7bwKEaPWed\ߘ}ϓOۋ.:R،Oىa'Yڑ�a-[]uYxCB6{k.@%![L!i6?γ|}MXKڇ?M=>ߏߝ+Z[F]6IyuׯIͭm.՜Uzۆ΢3|a,6~Mٞ$lC$M7t‰޽0bz>Zδj1Bi ;+d%ze7gz}Wv"P1BkпhZꨌ_fK=#D=`fUlK$XK{t}cULaCPQf/^dF:심F@A)"s[ą$I w=d޺ 9sFYd=d [He&ꌣVii_zB2QP]S}Ў|5A7HfE$)E{aqY|rM:}:zZg#%Y=8]< PXS0"D;6iY$W<lhn\͠.o&{۪_N`eFo4hshfYecȜC}]`WU]|(ڇV=+X5eGk N/>ZqFrCOߴBH< «(&.Hy=c*)-#Lz ĉ?Gm/ gAB8A[ V%3cՒnx {/Tu+{—(3[3?'.;hka?В9qӑoLw{Z[.= GRdV!ʎ'ޠqgB)hn]8P,x; Jj%[ފUyՂoC|4 0mٻhR& *'׈v} 2S^wJ!D FrCў2N,wĩ(&,Լ^zdS'=DD`ަ >QWͷ-}AS x/I=e9m`We4A,WO]{8ؖU?ƻQoI {+ Npڲwi呜^"9~_)/-ߖJ *+?. $C=glV(LkKr2h ̭JO9bOW~wϵHK2#xGW1j-k }HX B2A8 GFpD܊n2b*\@=HgwI ""0E/b,;8O'U,GBK/7Cjw"5}&M奄:t8v +"aiF#QuPY8v4(-~$2ҡ]H7tɫiAD$AЁ 1Kڋ!ޱFHK_L1pYh^A `#yV-C1-+D+$'#�Sx{ m#8L1ݰq+J:`C sΗK{?AqAA O1ԅUWlj~2+t%_#Dgya(KwW[JI^}9d7\b$1Ŝ/9Ō)5!+ ktEbN-Lhh ϕ(>eJ{(7Ak\j/'™B_UA<@ ̿X:!iDhZ]{ۚ+^f90yYrT)f [;ZA^fɹIW Z_‡T*JfM f1Sd*֮+D$G@A)"Cr_@ |B3JE&DѻH_=}rkn7QG~}[ *YUC*\TH`~9,zH J[q ўPljtS{%I W秣3H日p 2̀4TKھoCm v^< ӈsΕv%~1Hֲ=~_\5_3%DW9sS2'"]ҵL]^qT0>o_NSw%l" m kkk&vi0s&1t;*YNzp[j2bR!YYY'UdB'=DD�q" nm/XjXklO1Li=?VK k^Zt3?wTC)wps+x괝_k%wc f `O8R~4$ȬnlU!D7ǖ葉7\S̝eϠ1\1s% /~r\[pLqմ.񨏼N_a`knrnlmñv}oLuW ۬==AnfpIJck3(eodf1e~nѶS#Lz �" K[CɈߧUrf&iލ*�72pI�@}]?x9לTսySl_KðZ6 l@�'=D��AHY $S4[ `HmC��AqA�D�����A�D�����A�A����D)D{����+jp7���"� ����"� ����"� ����"� ����"� P_51^:V`C} ,�L�@flw4u*)SE=f`«qΔ%72HVB29tm#Jk$Vp r ΛQ1-=?33VCaFtda*t M�@%iʻH<k`'(9^}}V܍ qLKV͹zý,Ed?rSZE>+-AB[]͛2OQ5mAIW+Pܦ&B7^ ��("<*NK8 +j>3@K'͆ ޶4ih+Gp;^sY%Wc=MIp1bsNQ-Φ<XNglK'Ms^w1=p[.մz2Ag1QYIgrٲ] M: MFK ~2*+/l 8fO'Tpk"\Hc6%1Zba)b$<`%dE$XȒdWqeylYz˳9+#ӀjcB=f)E*"�LIA_N:tǖBjY~8@A6#gUܓvdHTjnaͦd$~N/nOM=X.Z\'畔0<cb6f6QQĩDQ /cX!ntefNI*aw{;P}xA�A6daoB$䞛b}5c^z-y(5 -OneC|̈́̂4%9Ì rd3̊o-QVT&340~.BZcB/~Z[bԼ¼[W#/-G7r95eQ^)i)"�LEAݱE#Sn4SBflP 6z"f27/,YEkS\-K,lA3`Cꂐ!6Y{ ia\/ھOw\yɒ%VIۦ!tyq|b "" ?+b켳f-!?jh})8ܿrsb&;BA ~)+ֻ mI[S0e(<#*\SeWL9+ܯ)i+"�LEA~e T ȷ]C < ژ|:_*s큉eZ|,]cMTu35[6DIv1yuI[b)ސ4 W<27)2V]e5 5I+ſ w58g#UVٙomCX~#NhE\{m:D%5c7>}4YGF&XaQ(63F' 7l$)/#Dθ ^@`JN1DS%r'K-BqQs~_AWsRE|,gqxuj›ؚhO,9Srb.FWʬVIgDzJAf4 FT{nM;bU)q< Dڮ{MGlh7 eistPsP1 qM1aL1eqqrwupG�SR9'x*2iHoD.ae܆=zEY 2Gb⧴ EGwg8xEgT˫|N'gI}gDq2#:'n3bϳ�AZ 47Aj%QsxT2x -Ϣ6De`Ns6 s*L1QAl3C*M8۲S_3pciH �0%[S[w5}λ,Ʉc[(|䚿tTuTMf^`-QW@e~,){}m6qMRL[Q-Yc#%39l/ĝjtX<+'x:#,@%'ѲF_6Lۊ hÍ'`}D"*O)d漍z{~#W=sUQ[v=KyeGr"餬d,xZJ= 6dfĴ̴Þ^r+"6h#K=M}bl#g\~MqWH N@`j "?դ^'X{2}=,1۫?uGWL7hNҵ=[IPM"/{7 T}mLvoj$ { 3ddF#bJUd8HeeY�Ud jʾ#%\CPFN _s9vC˼榑6.\Kʰ8Qo9^]iCu$Cѣ,5BnRbI,h?=R/9SԈ?-7{ `Pt=-q5]M#OXEA*Diʋr,ESv inP< �⟺gזsTzV�&ALW H/,R`|*bO,�""� hw*fdY�B^LC"&.cy<� �"���� �"����  ����� ��� �"=���03D��A����D��A����D��A����D��A����D��At&[t!~inIoݵ(f˻d,?HkC(\X'CW$&T {" ��8>,m%A̯TJn깕3U{Vt }͑~FBF([P̯UuM>b~噞* uBN>QkF:aS_w'wKjyoΈv"-+i} ;t.#G]񮮩|q)+bN5PTiۥ׵?@A�*BR]{o Ulϟ^_p#&r҇HKBsKK sbCz[hEއuܲh3P zd((oIoWW ˉt7J׏jTuER|uITL{EG B ;1:Y;2@A` v0voeP;%7"R2גB]!He&h%aRfY.f{c=ɝ40`5ڇYF]6{^=(cJ{}: !J9#Ä;+pRW%se9Qve)L%VÎ!8kڛ_:ݕ B}"d10+|1l25~]hm$oPWw骸bN2(VIi+_68n=+#GmɽcEIy둗u]y ..E VAR#]حx !OC N݋]}5]r[wՍ$N_�A Ǎp"RZDYt܄`rxe0PBqk}U˽2?TƝ^BWs}b[$W~9'{A7HfE$)Eepv%-L:JuUo{L X}Xgə[R6il~}*x>8=a|M d#ɬʛn Xj5G =RUu͒d|)4ľo^t8?iq\A ?x8DO4hshfYecȜZ. ܴBH< kyZx$c<EU݀<TOy⭇Ahýܨj>oZ`�A0UyŜ0mWB6 ߌQN2cL;o5ZUgCGӓ%LyF^%S@nvFߐ"L-hӆؕģ?zk]sZi??ef }XG1aeX ՗W  |#X=CV>f%Mow=x>`c_ȜpSV^.\(U.)oYCIև⸂(+yD-oEUyՂ#LkťAlG~S';4< -8q5"_od[/ζ4tMKul3D��AT x߇]jڮ5H{8, Lz}##k"Q'ٕ`2hލjos ~ۖU$^.` re[X3PWe)O (kϙo*[~ +fOP-$6 im [e!2xQa2 Sknڐ kj:+Iة8 }<[M%qMܭd{G5gAmyZX+%9>%O|%Swמbq� P5 " z4F;Tm՚E&p~Heyb\m[V-ʲ}$P܇2] DZADw$AЁ 1K;"ȜtdžYᣩ 6V:O y?jؑ4q&koے ۛ_{ mp[G|E«.y!h^;"S)f3nCBAsL\~:28T0|Oա{Ʊ+oXM{DD�q !=(!eޞ{ T_Ȯlo@^! _o=|Yrt,HL~өv,(D;cN3]XR3c DS}L.ԎlgjRZnqA 9_vZb픞b[5aC Z_,)7vk^C)fx&$Qwvy^}9dAA@;=-{k"{_P\>]sw UieE ż榤(/k7q,kkk&vi':GZ9l6sxUڊ{ n90]!|9M=s{__ǗlDϔ]tt }Bz5nFsk,W# u<,C*ov;.NXM6Ҕ6D CoAd5SIGH?xQY$g#.긃C*C l}md,f3;IoknB?QdffegT' o? 73AA@�ߢgrɺ)X'{Q6f8copĻ|;k^_i.\odR?3,Rc`>]CZ/S$1t+v}oL8OR]' )eϠ@v?GjHAīN>}O2q9"x=AdvHFES{Ur#?kqAr 'x:DoK΍MJplmFk%[_[Y䱵񋲷_yS߉4>'8ݞU#|$߫k3D����(]-ˏwb("� ���/}]?x9לTս& �"���0#e2L}k&� ������ ������ ������ ������U����@�����@�����@�����@�����@'M/092s /YPfaCAx < l�D��A^mfvG*G?~{G! ,]w^xU4]pތbv. 8DIb͙ ΈQTl˽RkcVUboGf eeg`M"8<fϜsN'?oX �DyɻH<k`%y>+M\Djn#"0\̼JK|आFW& r2Fz}oYcڗ]9r8 C~ȼdEќG1ܛNDhjd�hTm2""�8O:{ꊨO ++/l ڱ> )jȾmkL:j[V˷Ƅ*�̎=89K =fTO)G4J[%bY }&i YzNNxE rDjd~霽?Q_!d7I[ωF]R$;F*P9mF8`9->AB =|:WRSA#P?\"y s鰡LxZ P97/8a/(ޜ]L$x �☨_N:tǖBjY~8b [Q8P\U5s+}*;n&|`? p.K'CRs ?o6%3'a "+(*GITe\)^@ݞ\/=zLUc]L5t rO& [Vبh8/<50/-b6^xEpJ!W>楇RY#[*nr<^}}tDƎZiAۡ|CeF4f6QQĩD~pee8͹ " 7 gOO3ؙB#%Ğn*hހ ℽxjvel+7č"pA�qLs[F*025=N3%d֑ bs]*bXb<pvΉYTLV Dښ(cur5 :- sV; :[LdAD$X'Vcto)nD(E}%Q;FSvY3Obh^15VR_[Vb{ɑDʣ1 $Ԁ*VCsM[υ3H B7F?ې<]9Qly8l^ocq`\D|((x6Ɠ&@A�q,p?߲Ak0 ^}-k AYՉ>,//O2QVD?ٜ*"j Ye;& &Pz *<`Ab?<N+68 *lHGiIP( ߦA!@@f2ggfWT$!`4g{SDnJZvj+;06joH Fx0N,l6hCJE N],["PHDEt3FU b&8`a$vTWs2 zԕ-4-1eIh)G ;twZn$c޲0VDU`o̓ꈄS֚ B?/%OeotX �Ⱘt%#&SDKC'U쥗sZ 5g] =9)Ng2XU=M*~PuICnt(Jm>u08%f *«ODu҂8rn|F.F]Ӊ(+A%L=:7Pn7CSJsfFt,SL#0#MvԥiIrWe "fb� Â0p6iRg78px+xUP1{ o r[#d [ v#-Oyh| +0eVIl]ͻd^/ږ&< IZ. gi )$`KP\&}DŒ4<>A4V>fp?A�Q^d.ﮉ |ϖ;=Է}pcn8ڜ?ne3"z_ʨ=V؀tD!6V>tQp' 6&a›#9%洄SޖFGE}u-&Yu2nR1Y%637M*"j1hy)T'ƦÚyR)e^ZBA(NDIVŕ.VP&*V2/:f4T1j9 "f؃ �U=Ϩ-yT8q4 l.:zTck3n$:~gVhSȭI<lL̍"XS�~8>Q|Oq[pZ _ʼk $[ 2N17kSi ϫ1+)G`#3z&b'5- { V" *\$'kJc^111æw!G|"F؃ �"0\1^zo|:���D��A騆겂3j ���"� Qd!Ay����@�����@�����@�����@�����~\A���p� ������ ������ ������ ������ 㑎SUJ?BYwj_WQ7'7a4 `u3"� jSYi4>B5/8v(݈ b7Gc뻆S^w v bOkckGX%v@udždX!Ӵ/MвpXs2=x74z?Dd:y}x@ nGFD]  c7;L,ܰGXCa^Vҳ#84|5mwt(&UI:ӍHr!ZpPzz|)-Jeo-o2ByUXsC5 RSN<lUU8#N[l|t6 H qQEFPT<xV(~Arn-�Aab8/0+Q H^?Lz~≏:Z[zFXK'Qxij;Ň.N69'ۜa{Yk#m+ <ׂʟԛuGGw_!)'htꫥܶ좵]@f[QIߗoݍ)g,h:Bn,/Axt|jh38\Iy߸.J J}SE2s+oD{nIm"j@DKւ{wSO;_k:dAsix5u*"AlK#-ygԉZHr\~W6Pqn$<Uv60Z I7;7`wj*uUǞWVj96M0882"� G+-2OY:j(]S5ӷ mM-{yrUڳv7nG~SQ]A+NQ5x_uc )?dGiKP]р*i+{қe"*vűڻ; 4wuUɑwd\˷xQw⦷8JnZ~g:?]u\5pٕG{maGKJ;!(!Y<]{.jCTQRT۵|nYg1*2he5Pp)\)G+(ɦԒG"S}!Z^/h&޷ל4c@A\ ) X$CV6ZIXȴ=:ݜڞo~^Y<4 @� C4Б zFF5@l+k8YݳQo:;yk6#9]!-TͶ<a .̓&M1S7%IOJ5źkiC?AnL-Du^K~9>ԥyВ@kuhFKΪk3Uv|ܒhJ bkΉّ|YScF-o_KJJ~.*+XjUkIZSw Kag7'"=E &7d22ؖuy*o (C~{')a*P\2gH/U5Tw6h2yiJ7)} �fK.:-Z&FH$Eʦm:6u[(UGeojx\j<~{hc\tϭ[NS[KA$􍔭gg5{N~S,c"%}H 2.{I+ Q6P5e%uaQG?=w"i M[Rh?뭢dART۵`TA\A|e ]_^]>B!:ҜE[e(UovĔ6d]Z򠾣f`Ad IDzIC{/212,`Jl`VzͷsHFs\ yiJ3Ŭ� SB9U%@?ξW/}=TZ=R6byN,Av8[i֜Y*^ Jn*Tp\{MZR.\0ZɩWQ5,WL\: b~S,aU%fw \V592}[ ~k/<6:eM)K\fq+)QF |$,%Ydd ɸIsDˆ+vD WVf96M|̍"� *:sQX "<<2# oyDqC7oQOEԖ.9hZ|ӌ@[c;#XETD$꺷&1zr^aFv& ޺ؐ^tҲpGY8 EmJݤS[b.1c~S,aU$~|@e5: ȂUguzw[bݟQz~P6|$;At.1Q;12<AT" $(^C3>SVJ~ĻZΣ#Jo_ ��8,xMQAv~yY&xMǸ4D}˪JbCqC;v/=D{ٗ5{!b7|yF0׷pdG_{wYg]$[OKqj]Q@{QraU]]Ezg>tHtOQĊ;C{s2l| _Ft )nZR q~v6:"^@O ;:F>^U&o*%*)MV^-SWw TV]0:{2^TDOzxl62je3e/ʹIE�ܦ6ޘ.!ߚSv.o0@]M* " +D| I8yv ? *V#.Ji_ ��8voO17(QAUVXi 6Z}<o}=_\l{Ds-om~!Z$<z[-ZDU͉Fѡ %71TヌJ"FP_Rrީ-1DL&v5 St m֞:X][J]=F=x7oҏy{rׂHoDv4\t5%k#w PV LsaAw3*^lKIl~v2l'otY܈Q$[ED<j`Jcn$+JD4@Wż-msCJ/D/D��A~F:NM"Lc�NK7Mmn( ��@qEOS֝ؼvuna2qJuU.33p(��@q6J<8F/}iLr=͗UB x@�����@�����@�����@�����@`b#����@�����@�����@�����@�����@�ǣ:UC#fefXg]!M>0E7S&ߗ~DߩFmTp* �~RAdڠHBpzbj9} )F.;ο(9A}"<gsh,:_?[NٳÛ|"l54S3n(}u.AJ{-LNYL[2%\Vֽ?WCb䓼ZDn\Jб/ĩ'ʟxNA_5�A�D,8̂D  š% *o22Ғ߼ 8jC4dՍAa^fTtn6qI1v$i$㽉,zJ=@B4G'$F^ie?Gq~ Eh+(ᖅ/u �[bfk=*o2gZjWnuNy)}UnKe'eySᥢ5Bfa_kCO6Y?<Gz(قJ@^r-FC)D9llN[HrXIXΗ?bxR?qe"]Vda˨p&)imx(Kz}+ϘThil -蚲*MjlIDCeI +V"FY˞:K}Ml-޸3N'[l+5?s"ŘDïM?aoJ.ڮT*ԥtL'Z9iT| \t;8�V;ip}6OPYck&"� 6di{^wV6r*<ijۯzGM~HQ_t:(Ygum.=v+Ӕ#\AqEEd]tkb}vr=g2K0#otIv 3X:)ҏdUcȭXAX�vy-@ 0+1nqhe"N]a 5+lFgUCA-LY<B\>kYn',㰙5 ܾy 6aѝ25sٱ%M"U;o'wΠb[qeFv;?0Zwxbv^vR䵀' #c}ykd%]<.:h%-fDu3ǫ9T۳/ U`qtlUQ+x2d_"Xq[՝+w � b]ڟf8gٜ`Uý2M& .jx~9Z8QU=FeqZO!o�YK8Xԝ񲆍mdet,^1 FJ>6k)? L.q1Em)!IA#bhi2Vf`J5sٱ!l&va ;^Yob[ԸbNRGTpG-z&y.+pWkx'%<_A}{YL1?w@AD&7Qw[d"tvCɤ t � "+a 1wEEyqӕhG|.㩍HcWZ6hTҩ _H7JEBT Wl4;ڠ) ĞR/NmAEA_): ir oȖS(GŊݤ"LT&0cдDRJkLYZYA$X8+nh/+r.-yMLi-j\N6jopG/z.}~wkݾ\U < 2ѐ3]pZsAHq} b|8�]jj{`mu]_Y|#Y8;:` �? VG{ WzG9k]1ڬk8F;YGo&-ke'�7+#rGC H ̯#MdepO"2 "tndF*C)UO=4FMܫmbX\K-𗘉XbƌU,AnbQI۸7Dk/yuQ'3}mp^ "oeƒbirDM*wGsȦ\\J;<3-MՍt �S "2b%o{>X9[E«:GuDST�Tk.wYS,=DqV3]kmQ\b#ce[j艫Fv~L.ꚫrW$w7h82]ЕBq Kۄ<ZlykY "oE4SDt-rnJmmOJߤRXK̘M ^l9QĬk\XT^b[mBgPxbXy| h|6 "JE0$$Sx3z=u<FMD�SD& mbHO}}? h,<NS驏v\f=3!":yO֠:cq̠嚈\Ad%;pVt(u*]#Ȟ`+)%oR#cf[h?\jһӝ9{,]+9v]=Q\_Ekm49ŭ|8GeDʤ7CRVH̭֥4Q:\EMҲYb07M$8rWdR 6Z=LED(;.܏IJM> Vbߤ .TUM7Sp s豍ٸ2#r#"ZK>HIkkHӭ=cmwyKdЏ2 Hx |MEAL?W*2`s^{"p喅. M. m O,pkְ{< .=t2Ufv8[;5iV+}{MK&ރ?ᜭP\8x5M ϫs.H,\H.If@$'W؅\Zld:F)޸:Tm^Cos&1 17t]g'Qhv4#D:keqO=(ӂ:X&w ne ?Xf)zxk|w̭wwG,ڗF-5/VSK?6 k3n$:~gVhSzqH'-b!)s"sxƟHLBӐs E/%&"�7�#s8L~Y;l6fO LFm`�� ^"q$FQvWs!2"JJ /6@���b]˺ODE ������ ������ ������ ������ �0^J���"� ����"� ����"� ����"� ����"� G:ّ.u@Q�ÌG-bįhoNnjg] T"�}d]A/Wt i|2Ej2m_pRP=hl}HHOGHeU|NG[KT~O ; T,l,/UAaDn7vWcC ǕIɉpi+E,x^;ή~uZRh#j]A!�Ʀ VJDׇ,8¢ 󲒞q!!cZ !"K|&d? <U1K YVdiJm8 iC^gg9PDMH ˆ"4lW"aq, bGYʴ=y˵3.onaɊ>nAA1.Bfd CDʸ}4aEǯO|,yZk/6F֞4=Ajv^x՜c}rAQrv QI5+A 3`\uf\(j}Lܑ3Y)E@UNMg&*>MxT]z^Sk^i˦!:q[Z  Z^2䩭(x\ *Nou:O?Ǻ&h`K '%' 41嬛 bwX7@iA&+XqUxZOBfPVƬ ϊA�D4 BrcvCu۽wS*^\Dp Ay*L]!9vG29Ҡ%D8JnZ~g҈n UscBpz‘k6A`$O+R_{|\@G+(ɦԒG"S}A(dQKIa+{қOaB{L +»| EwXJUUg]}F]j+Rq*B^huwDj N+v#ݭV> 㴢A�qD[[ &JuvX]k<e:^ La51+zBࡩ)Mfn>b&򧧋p{mNG?sys{:koNhc Nw;* dIZSބw Ka_ou4>U0{to2Su<VN4Tv|%}7]jw \qeaP~i>0 ?x)BU:'m㳢A�qdKZTlJۦHcy5lB0fϩo*y -)[}ꕅD+ Oԗ|&3 de jU'lg߭b Q9/w/.lfiN<VoXm/VׂTD̤E8ap{2޿MZ`!,YϝHmT�F]*NMفfxA/v!F>_:ӃҟʸhD��A%@Ph,kv秢0;ch\%frjbd'(#7f"%rŖ19i7&K k>qA(g09bĉr ;-v|kNެMY_j('>1"*đ@vwICroM1U8&�(C~{Wd񹾚lM:WїÊA�đI yk'Iuo%v*bK9K\_}{e=7‡~ַnR vV_z+}K',Iw+Uv8D }"1d *ؖd}\.T bIɉxO-dʙ6E- E'-K̃j89ɺDF Ok=3kU4"�TqC1yfNnaMsׇ,‡d'鷚etNC񾬺4+6?£ªSy@μF>^U&,$-D{os 2zY ^^ IunR1^Vo&o);[zzZJ7 .b_X2:{2^TDOzxl62je[duo=-šuD/>ESʫes?6wbbV,)@mt_3D;M*(!ŭ==_KCWj!T�HIfq1?ӫ}U f8N+�~pAPrz}ؗb<moP؃۫l)3xl}g{s̩ dsܼ=̌{4ׂ̝-ar/Z:n H|5)F[rfNU wED<j`XbЃfT.5ٞؼo+V9v5:T 4\t5%=FVP)&%%2XniWs 2EfEOKQ �J 4ީXʼn b:+H6kup]w˞e_cӊA\:NM"LR E���� ?S֝ؼvuna2qJX���A�ğY?%M#u4&Ԃ�� �"���� �"���� �"���� �"���� H ̂����D��A����D��A����D��A����D��A����D��A.ڐ&l9r򈮁LSϒh}!33vet�~JAdڠHBpzbj9} )F.;ο(S&?gA{3P=q'y[NsKM[N)б *6NŔQ O)fAZCS0:bc7/Yuc[c!?$D~xtbJblDV[QQiu,iI1a 5(wܔ"�K케Yx GauU}0eKIaefd!d$;Swϳ2�a_kC_&,_}-iu.'Gi"v[.;a㘙Dʞ:R|I29SO?g5B&hLr8ci,W+Kj8`8v}Z})/xd־:iv螅j4V|şؑYwYdH}PQh nEmޗ|>Ȫ|15KzPfN� "vӖN YT$Jrd canAj7�? 6di{^̎sY!$燕+ĬwA,m51A(<.<KI{uwDgUg"㮮!n]tkb}vr=g2Kv .++x)UmMBq^7omBŔQ".HUeۉtz3(ٹ zkⲋiaV-~!,Sƕ=iȤwYڔ<2j_v5r*<ijۯzGM~HQ_t-/Dge<9⨎Wj-V`>lu: T<h/ VV}up"L9`cQicSCYk$!r+#VP4?Aw,&6׫~l"�X=䎸晻:bu6ؕj+AdxAR}LeА}ڊ8$~6-^pg Sv]Xp;Ue |Ղ["؛ZODf ;^Xj{ )&1"1~::U]*RX茈eZhmY/EDݐyl2yVpKf'- +`眳m ڤ&nrk]c{n<14b[>p >FL%p_(ͬ[ȕBq}Tɕ8E;]$;c�? v?zWTW?]vr%]ֺ^Si`&N.z_N<N0-=ĿZ):WvWuibjNU;,U/$)4؛y'VEo"^.&Sf"!*+^y]ÅazH hoצUuČF1+NfW|*7r1B秚/t[]GWu++HJ5̜@| KXěݶ% [`9{+NE1=Md$e7  D�:S|};bvY+!ީqg6D{hiFUK ο<4X  C#u'OTD0PE&-|{s6#‰(XX%7WGn ^Q0L\|kYFm*</[yu:Yҿ PlߘC6=b"VIhiC30sicՎh'U~ QԱԼ"01< � "2b%o{>XܙwgXVǀ8 tk<AD;n[gϑ\bEFO.\%fc}"~/|(\OSz{> ([DuM*kS}u.g^YM}u'Ĝ{?qk\V(slyB)K.$J@N0É$x?颮JEry(K5O$ղI +0'2aNp[`1%=m@73D8 }3W璵 wAn::An6Y%637M*2= s; Z`ؙDvՅ*VޡI{f n`8q+:^T:p.~ґ KEv0fÎ cRb#zM)<b/9ڜ?ne3"z_ʨ]w7\yt:bgr-f`2KA- ]@D$@fN 8(XM3T=Q\_EkSIޤ2%#=-!*pT<qq"�. K / -(#{ tE|M ֚D2U m`xx5|M ϫ(K&d mJ_j=([*XK9,//P˪{ބm8g5t߇M'yiAvm*</s>pg4[زN?̧ymrF#3 !,ǿɪ!>CJ79P i$`44=nlUqXDq[ppWD�oRA}a. PG��� Pf' Ay%yafrׅ:�DD��AYdꎺOD� �"����� ����""� ��� ����� H " ���0N3D��A����D��A����D��A����D��A����D��A#tV_#Y](SI?1/6PADuU:JN!Wu-kAC7%eTR\~껕OR ��84؉N$ %rWd>ҋ d۾Za/}{|.D�#fKilHց NFx_,SNjJ0ڻ Ffy}`oN-'QιZ G^YnN54/cEX6~_+l&I b^gA p:"21yG)�@4RL1p-43 ȔS u؃=($Ǽg!G-peiHyr C 0f>"O:Q^ Ef^6 =IgPQ, ̜˩5qA쬏3YE&Z .8ʜARrscB=s߻ Yy6OUA h ~l*⢊L9VD��A _s|p ;stp+M) eh.ީG\n DS r[SK{GrzfCv7 {RѿZB7-eb**(t?#AжZ}s X̴E]*T~u% [!nʺi%CjL"hK?\F^2C^좵]@fEㇷͣ4 7!omEZPSzӿHĀ-B ιZS+jNcѥ~V:*8;B ɸ͸PWchOd⎤>6PqnzkVD��AܔÀlTJʒC/_ ԩ/LF88zѻ^Glqډ6?o7T{72ET {ʠg車ں;U08b<ؚ3Uh1ZRUd<M#;E+6딍W%.ha ORwlߨ;qRO%7t|-BSZʷVaq9);& 7K-B b\N ,䆧!NsYPaKpBp1 !8=H~*TğZA�qEA˵Em|poo=4~#oMJY jhiyOXZ8wޙK~*eR+au9>&X]c^%x YlA쬺69Aj Nw{Z`>NDSMIX9?OoJ]uo-i VӛhK!Ib5f}0[DA9vt^koJ;'"fGenۭI"\})#'?~ �Pn6%n]Nu LA "@ N>#\D#Eof-Zol# oK%mN=gg5{N~Sa9fgي n&idb bKmآ�@P_vm/\/C 2לCeOdӯ0DɢKZ f5z}Kj|\ED̜cךO$W{uDgUXEğZA�q(3BW!=9¯`Xd/1 dWMn調14տT?rp N=W"[3'J "o9:?Ņ\7 !2Ǧ Ls&MWѱ vNf jb小 lCe]OBKDiŖpZz5'o֦#[W~DcךO9dau`B\*sLs,1:8~c\bw]+" #Ğ&c[pD/[wXbfޚ�ɎXL{ >6 O5L}mΪ`[rKguzw),ƐH{>FRBy:L-Lj8/Bh_ [1nw"$Q^αkMOMNOk;y7\&+8܌ ݤ}oRu "pX8(<Xl I*,͊<2WN2¢7VsL𘛡 "B4Y{5Ȕcy7m!x_V]Urڿ{QraU]]Ezg>]*c|0+.k<Bەe5)MV^-Y6+M*f^*_U&԰|J OQĊF{sq|duo=-šuDM$n(7rjMIU1 ]=-qizzlqcn?9),xex)17ZAqȌ>:UScG_l<xޠDу(Dc7}݅ÞGҮ뚫|5Yw\<ǜ|.1*tf)mD4\t5%a<&F[Xd3Q2OC>F +^~\=9d<QEi&YvwQUskt&1pD9oî5.NxOuĒ'GWϠDv S ^=_ rS7uT/9*?X (_X�3#R(CD8�AA�`cŸ3LKED^p p �� "����X_fV6TYf1⅒k��� z&8?ڥ3G sBS���_AQ Y{!1ھvuvģۘgwoWAɏA���Ƶ vwwuwvvvttu}mcsS珜ύ&n'NYq`[kKG[[V8{|i;X]V%? mf����0~/<KSs/NmUQʪ( T9r8.ɃS��� * mm-pāoA��� ,m_6c$%] ���1A=V5WK跮+SQc$h ���1s)S&0*PA,+Οdif'8F/PߥvAd]!M>0Vϒh}Ά`\3:8^E UGjhyD@c1 K[4mXFyخv{]uG8FHGmXePcV٥Ϗg vbq<t bdz_9eo(sY(8zqn: 21ؓAOHƌAxTȫGnMƭKtP7v㘉vs_gs5^(f }^Vr+.X!/% L=ٗ؝ k5ӆW% uĆV8-qzꮁ SNf KSt1Sكq: &]Y=m_[C N/q^TZV%DN%d⋴7l oZ0{c7/YrSԳ7$Yɉ|^,"#> ߒ2z˩ Aĩ9K:.REv=R&&;aGhG"Z<u5q(V\iLE"]G(ľ~[B%IAW0 O }MM:^{MtȪnjM o\\ W[4}Ƚ|][TZ|~cY꾿-)$|R俳ﱾoƆ} RA}X]ՎZ)qΘjv2hXDVw _#^aD{!%9C'ԅǵc {{(ׇj 6-&71鼇)kRR0.+;tb _3)b첨=V+j ϙz*SU&]Ȭk.1#6]fɋ *y:v}2z5mnyͦ_G 4|&eU#+~iF߰Maσh5= MV+O*督HU/$l|RqaS|RbJF_նpI Pp1ݟʜ[ 5'm L,lW;MY&Wh.E:,a@P]e~<O^xrTϪ{ڑιbE|]_[yGciPC-K"C aqtJ^\ TYTD \{ le<D#[zQ\eW\[c<{5*Br~XOQ;YXa3g.dمAu0'uOuRi0/L{ɒH[oh-;<1;/;)Z†!]h%` WO' .*E?׃Ӎ dVb?2)}%ve[DeRQ6q!J ɃhiTDyԬ_}בZ![([NQ}:UŅO,Ag#(Ygum.=v+24e 溇-xPmϾ> 2M be[3h,:̯UKDoYceT.Ҳ#ssZt^`\(%-mͳ4^xNVz!.^Eȸ㈣nzBO+ '弓+7b|/?(yqAT.PA|DO5P"&LEgꄓn&x"v?+mf&[m2˯^78>VƜYaAo켗=dױ3o$$Q(1z +IKj2rgv?AyZ%sSXMgK޵1Íy䉛_4*$}iJ]~?vJ`5 Bq g^zM64byvp!<DjE r].#bV։ج]G2Zq ɃhAUApcɳXGNKB;m GVşQĖ[\Y#|b"V>m񺛣ޱ[ׅ@Gj@a/͠ξBϽ<xA bh*}VH ΆwG-q]W4?Ym/ܲDBr.1 D\ (eYMyp>HtcV]Xl z <2;8==&'2Mܲȥĝu1){euKqTJ^B ?ץNbLDJ . gN]vQ\F TcYQ#0l/>IUM n^伽o0Eb*+ڊSfV=^$ߦ%G3C0`=NJ<O }[UjU#;?ОdпD4n۷[7jop*CpdD=T| g"!*+^y]=i5 rEMX}q՜",%ᐙE('2V"Vlv}Mqu%|GM:`nW^q%/bCYj6NEo/$ib "DwuD)k!CDl ʈzT|J(䵗.n.3wD2;֒4vU9W1 D\^K{E *K^=}v}XS=v- F2K︑~9) b5iL\risw6zGfN=T'dm|AXXX1kָ{XZV]נ?&&z~[|#ךc&f OùW RϹbƗ5٧&~Q=^Tu{X#<?4O9Uh38ubW.@~3( |i; oM ":VED:ZU HgF.#WD0OV[ 5yvutvHtđ(˝K&&IOx@E5QV]^Jf'?qOOv8&ͯ:;kIe Tϴ+Iv%Lꅧ\?&<.ٯ}|p|(*_>q,<97lC!hpo-~wVH9\A~o(m'ؓ7J$,{P𝿑/#Q Fʟ@~'=_(.aό? ~1?RST?8hگZ[TNx0/גcu11Zqӂ”#7{FdI‡8āGɊɾ ޯe'JκQƬ}߿9Ffn?,ho$: HǺj䔤dʲ%.˜x޴NV]Z\3ɵ?վ;1\pڄ_ )0[}M\ _2+Hk" mJ>eok 88@ĚyTq7Rxu *uqZzRڋvn8U޽4Ԕ@jEwFc`A<,sux}j*џ+b~, Ti%, W| ~t9 #67/~unXo2djr8nΩ7?Bvo\u8{$ )|1  6sw;PA$_)|$&{R+eF^fs~Y7eo<ؚP)W, }a_׶kYwu]u*6TlXEDC IQw& @&u_\ə3ϙδa?ѢA4J 3 Y.XYydiΓɥo_Ex0L]]zDF]'v|bA)B c0΁6[òn5M !F+{7xW?h���0&hzb O4OJ J @W_y$KJ.^%N&?U {m~M&���`4о4/ &(su V%n޾Hh7 %ߋy~De>BS/$h|ۆA5EU���٦Gn yDD bNnvAaeHy&B6wo^kS67-Q..$6ݷuo����aREƺׯd(2u ]A'cǶ+~X|ɆR>A66Կ~L]mMNj"QdCCvy�Гٽm�|A je6yϛWc Xe@W_!|kh#y]N}P_LTS�_H&� ¤Q;!p>wĈ|VWG! )"'67kHY/o^>n.$A5QJ&/T�aZHv؎aW.G *X. j&IRaNzRRL\"l.$!jR)%B�"@:H5�_&%./>l躟($6;Q.T]A7i(R*j;C�iRM�i V>,-4qºQCe"GAwGuj % mvRP���#cR®^YS+"_^y!P`}:"}'6H߰Q(���#cZعT3 *kAܲYA!e$D߽qg@{T?I���Fä3?rIE%qK ï =ux/A!ub+W!A{TCSc9Eybn~ol2���aRHқ̔ćܺjTAT .qvZx i*#o\>{t2��ȝS@gBU1؂������ �������"������������� ������ ������J+D<9t *|"X����0ATD lgy� Vh�����LBbiI}hCݛԤGׂdB6����� E3u6{*W7�����FAĹ} @ +4�����&$66ԽZ~wB$�A����M׊F h�����SׯVHA4D�����LN6VhH +2K#TIa#���� ^ Ɔ7T><6LAMg*0EE˫a/K(IdHAz>V޽-kس'6w ���|鈒5lSRA76di 1e{y?3P_$;)b<#dw lxt4Bj\AJ 85ax_HOWLDˁ?/ąx5TcV;xߓtODo\ D𱂈K666|x56ԣ 5]^Gx+f)`w�@]뀵~Yz)ά׾'"|V֒"Sm1Кl3hNY,G/yo͈ݷEF { ~]8u٘c9$m]$=kwG*8} 8T8{)om XErȀZPZق4uHbυ/Rm-HV+R bJ>g[Y͹)8>|X]qgtHAl_~9i=-| wz_ Y|siFZZ0o.2 ��|8)$5vso4&8kиY1fA̶Yu(,:w+vVցq6A_dȥqqq-ar=Ay~Ǒ~Uu]5^pD(>nn6/ o&;b[A`MV<jq�Ja67,qJM=Rk_T1bkxڅChat/&mRE[]s5ՄQ'ݜQFΩH^1RD"ξadM(Wh M NO4Q U DB_=C0uzGyo6yrzlh+ Upv[W+*,[ad2��)5% fӎ' 򲨥sJUs.bާ9Yt"WDWV:/hvq3w!4a*5L4WƵ̽<<6?OG[Za/ETs矘`9p[J*o-[Qo:$ogO=L-LAo8NgܣaFu$8|,>wƖmO1S (h)R*(pr[pɂp,^+jakbEEwŔp'7l(xe<fobu帴—?g Akd\ѱX^[AS[S%k|:6X\]^#84 G<y/=+WKy7$5c"j{D|x5U<}˫ϹӇxIHhZQ턟C⟳O#}{H DX0mGZʓ4JPM;h3JlaR!(f�mo*rPpN Jbf?:368A�(7sXSє7x noki<?#/M8&+0=fPx} |\:3%l56tD5uCBey{DT-e̵”;V{Ⱉt"]*BgѬGT[qTNsVn1Gs|[8)N'"2÷O"Q=*ʫu GtuԪǞ]9{~xԓoID]COmr"EJqETZMO*bvZݚiMXc<J퓓-}Uj٣J:i3tfvF[{\̯})sτmͫjT ^ŃCp_%Faj =j:jAV+OԂ(P+κ!Aq!A?hff_PժK)`tA>j^Tm7]qi*ec<NU .=p+J �`<a.42%W-WPO%v{e8 LX))Aӂ[#ҥêrRM9Ǜ9or>>5>NjXybE_5ym:l?HVUy-Bmtjuch⛼} n /fS<`D-\tGtu]_Yau\!,mKAl?D,r{ڬە](ŭraasQv'qM[ͮ&ׯte'>wlךC1I_hov񊬠d#p&jAhH,E?ӞH# HJe<{͊v t0ʇ3F#8UTʘK][|�>?6d'CoJsA/zoaRYI;b~y,nJB,L[q{LLMS3nb(yYLh#mfK.gϷRxK6&T|Ʊ~fJT;g{K9e&s`Aԑ)O-;&T ]UL8Iڅ:>x{s R`QǯuҎGb Y̹s)+FDnƹeM "<"'\pJ Ḅh0q�s&Xhb }vKS<|A/% qiO_Y8r)3>l_jZ 0-8@ !-t5 )OKFb$gB_Uv?VSvGqr pc1 ��!Je] uź{`qeBkl.x:w)iYVԹ~Y2NS&-r`md9 jGK2 96{9:ϠJ;gŸYl6y•6tWr QGp)LتV{\..*&GY$~)헮j) "E Fq>&ɋSnff^Ie}M*C ݓ9){g8y *SZ&(dagPq`h,!1PI;~T].:<amL/yլled0gf AA9'[# QD.xMTIE^767QhsT5*8pBe�mrrS Nb֤ v; �@"/Zbg>x~ (ٙO3HNN7&f)/Ϲ.sp#_K̦-f+&;\KP0O>Мbx-va̱OkTrdS^|Ir8þ}A &qz>%HsC3 "++TK:'R({<Fs#$:)3Qѕc,Տi<ģ{:-σ5XV fy9vm $kkU ӌ8;pe{O>|NȮDZ~Bd͊], YkXM--Y4Zd$3V$iS8YϻF|}1/Egee]?}㩧]2R<iTBBw "Rgۇ`e \Oo-6ro jP.̰r\vPEĥ *mtSɆ�@QUem9=(OӻZmo-qEVifQrt_!9EYIg1u0CbAa{jߤs-m,zwM*ݍ쒧 yB$1#pf7HTi>*67N;gu"H18z2׷ %bI;!d38b'<}VuF)`'c/V_YÜt "e(j R-E뜨Hkwv6<+ D);Ǩ ~D!@e^Clz9wl܈r"ӛjۢ?v (b~RHf$ 6y3'0y;E\LYMbX>9ÅfNsȡ9D" VrAQ֣HUMU?ڞ~-!ؾ�:>iMiPA{ VK_v3RgvGANC_hNv\+&8Ь{;p]wt ?tx ��] ^ii5/TWUZ9Q}渔,+`1',wUg5doH}{@>ͱqR5w/ϵA޾*Bm*SIHy蛐yd fS`){f?"yO1Svj? "RΉcntT5DŎX4p[20AN4X%+VHAֹ3'---_-|OEB HS{G~sH���ݛa9>e'oL0p8QzvHAU5+b_sՈʮϤ>hڱ bz_FL+Z!̔[XA"{Qo^t~�A��2ĂA V 4ww+lj|IggW]߶/~P.˙m{/[ѭxc&.u5m+*U AVJEܲR icѨ ��,.V#vc {JxwYc/~D~hH =Z�����AA$Z- ����`r_+ "�����'2�����SD/P+A����DQ!G\ bv0޸K`����$Q%qK ï =ux/[W/Vr"�����  8XX�A19%rf�����LH������D�������������Q������h0{4wpD������ÇA������ j1i W�����0A5D !~i<MMd23�������MA$q ������ZOZ~����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/queue_2browsers1.png��������������������������������������������0000644�0001750�0001750�00000677062�12161032160�023461� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR����5���._���sRGB���� pHYs�� �� ����tIME Zc9�}IDATx tU?e73ofF*0BUAAEP H{H!t:WwuUV1A~?v[U*9[U)X����x9��qq����@FwHU΂Q2��m+!I6����@ C;aG{B*aX��ւwT0bfh0����@ C;2#<2B ��[ VZ*BbZ<|jZZT*����p#:2#<2#=!a!?!^A��pk;U&TN#_{I*J$zX\����-2#:2#<2#=2#?2fSW���B➫BJf^'߯ |Dꊊ����oԑa!` ��YnR$Immm4����<+**Ȑ ���Np8l6bRL&RRRp����TdS\\\UUEd(d+dXHp���u=XXVѨVjttЈ���[$U}SٽVVTTA  Z2,$Ca ��΂t٬D"!_ڞ 7|o\����hIT]@|[T*d+d(HdXHI+7�� OW466\pT[ڐ4[n[)j����@ "7#HҌ4&mR)egg  V'n ��΂av;Bt˵^bn^_~S^I9)+Um����pP:t2#0Ҙlro%I+yyyd@HH2D$;@���7 V4MSSH$Sꥲ[v|;׽軀eY����iL6ۺb2 $B28B��Y"<`|jZUU%+ƎY,V5DQSp}{CCw;u*)]k2BxV C*b.ֵZ;OiZ.;r/5-m%u[3�ܿTdv @׷myN%CA!X((( B z1+V���: V(2 JR"TTT_Ɇ.x~/07�}(%$y(>XS2NB-Kw!m齻IELv!"٭j^l-m%s]=bgZo;w #c*4&mpniv?h4 JZZZnn.aPKV���: V'ZV)<`LV]k!c'9N  "KZUI !kdZh]TRL5͢3q{BJ]߳RR?$(@L|~y~A!m;p*,DԶZ Uj]N,8y("$8dq(R   :|)~ la˷ze\!R].%+W]:y@ސ`rTwWcI-lP E:VلIR4&-/F-WvвKBMcVzx1��MP(bqII`K1 ?V|cL �pjn8jҽRK:Vݲ! eFL>>x<)@R>Pj?8z=A|]Am;pb_yzao堠'Μ;SHTiBq2.] %I&iCǰgΟ?!V̑QV]"&8_Ptbʥ˗S]W銴Mvŗ^ki:#$}JREFFv}@FMݖm+;ح㒡Nfee!!Y`��򺺺b!XQ*73b$A 2YzC3�ܷ$G]*?,T4 +&R(:Gʻ=IB䣸81Q T׸v[s%E@` "5+ZOkt3IY!J W'i *Œ{ {/Ruۃ6֥DpBUWPp <2U"kdk&ojd){LWj\0Q2,=w8kyՍr~!_**""2Ҙl m۷\ɶnHAV\BdXH‹���t5XD{T;f=p~9f)�%=r}{eեH? ˄ҚӤ+kD#VW%ҦhWU썣$tmBvZ  jPu"`FЁVÂKUmPndIW&6?hDJE. {w<DkCi]RCR\dg3; pRT ) H3Ҙl?m7q|[e+WV`%))IVȰ ��m+ݹ8f==<ʕ8rf^}I&cǎ=q2YCUl?Yr0Chߑ\@>TfD΀},.;N~;DMBG@L..%oہA&liBH僗>):3`o~s = $+nDary]Ϸp)2sEOjy"m/Dvueřw>Vhv4#&mKm[ ��455oТ"!X97p?x 24#f}*]{GGG:d?YxXr鐝|[a|Ec]TN*<=; ⯹jșͶG\{ Grݮww <zD@դwhaSR޿;*Osnt:}շzY\}O.ui%&Г9=Sܶq˲&u{"bNKJII9m Bܧ4;}hB-iFMҶ:VVJff&a! "X��`|l>}<<==f3�2{_С]+.;vJ<Ll-TIDE'Gv9pI"uou%jo~q>v=]~T@%>xߗӕbwxnFLxȎE^.ށG~?}1ɗ+꬈=A/kɟ{KkZv'oٱq Imةⶍ[ }e7pV�)Fw^24#&p[2V���XrARp3}􉈈�P߶mX�uZ6,,fY@Vd{444 X�� mh�D\pH(Kp5��HPݻw:Ef1,{-d2+���w8XH;ϚLz����hA.+. H{-566"X��D"���mQT. d'L@F��pgHRW___����:a ��;8qȑ#QQQ����@#>2;w��;9cfQe���_}}="X��@����V���Gb������+����`��+f����x!X��@����V���_b������+����`��+oԩSC˚kD$kME"՞[JnNo^z3|dwl`^o `ޢ.\c+L!N0嚷M k~���~m���ܛ`ezν&t?w{J嚟ZC=`ŠnouCfx >"jl֪EY{~tUJ=A2ݏdo\7ܩ���+���`Ёf}5gNJK>g({ҷ?H,~L]>s6 /zg̙32a%pL(kC[,3g-^YkpOV+[]bLi]pdUUٲ٤_s?vwZ'lq>pwO7MfHIUҜퟭ&G5ݯwC5W,~3$v{ުub,vY>wkڻn [f%4H[i\(;;'OVDN۪ol:O>^tG_g5���=V���MD/;SE>,[ /`Yt%bO\M8',#ku%Y`Bl}wKeYȊ+TZn8|RFIoY7uJw \W7}hr+C[ڨ3Vo-{n)X!Y!5Ӧ%6UyOQ5㋹>vxɜ w$X*XO꺀%gyK#g���+���)XFCW9#I}`E՘=c%U gMzҪK>pfلAșp o̖\oAoJ^sԩͺvW6#ct\`SAhF=c+v[ VԲ Ӧyg4װ8bլ:n?㻽g7E|xLk7;M&AtrVI7zޱbLZ��@��+{_A _9pًI9 LoMU>s6 弳ϊ3|W~͹|rp UBrof jOܪ6m{-̚5T!U&!M)L:\ݶjgmrE0Vnm[5do-Ͻs{ :ͺo}Z^uÒۮդ_m&|yO1mھZymyBw-���!X��JّL钨Uu PtjYjfk4oZ{{ʇ%VvlkO4KNyO'UnoJS~;#?W~h)?dIC VutV26Ϙ4{z%IK|ޚ tZ>|wş|Fq[+&V_i_H���@�� +フrRШjɷoZK9`Ehpy!qy>s6r4bNo-8ˤv9KŊjR_Vjt]C:{I֜*Jl*8QdCMFrP-dBwEgK T+M*r6]tFѪe/lGFC+|^Ҭ<.Ҫj__vxo[Ӽ}뭊f*vɜw}ʬ4`<M+o/nia�����`.-Yz͚%n8UKf͜9k֬ū??a4۵ouP83b9K_(پ_bkhB{F'6]5gƴ>-8(\Cӝ=Kh!$Xi+6"cˢS^3ڹ]7"dLBGP|tG*Xْ~{}}_eZf���+���t?}1'�����ԛݤzwv!X��@��p 9>R\��B��`�������t`E ����4+���V����� ��@ VT����@C��p����x!X�� ����<��� X����+���V����� �������@��`������������@��`�������ܗ M!Z:>..L��B��pD!;'hu8Uc.-dL��;+ˏ%I㻁u:8_Nݩ9vNkevB;43:;krvol3V���Kbۍw yJS}}U~]Z V~34SZbD/a/a ��pg. t G;vie9(VOG3rМbL6r8mdY+���V X��+?W8:Q[i-T59OUL 42Nl4���+`%35˩C˅0ew*uV5KĚK+��ܑ` wBEaƩ)FgcL4gsF5Xi:XB��`j N?eǪK?+ 1`I|l`ƊR􂩓ؗ><5ãa'O]-  io:6gB|'O 3xE_ +C|�� YK&3P[hbs*;UJ1ҌY)@QZ53v`wXhFeF+���V~+ Gߧ +JK CG8}=J: V<<zڣOO1 ZRk1^'4?qH5mft/ϓ2;4yuKj7Xi4sۀcBO]MSAϬ`��[’ɌNF6e,z Zh+YmN`6ZaɌ¨ʹƒf05[F ���JH;~B>-vn̩Wfjjŗԫf]#$X!PTM׷ZmCqORhP~-@fI.:~SDC+I[:on쐩E^w{n-o(��+0NZoqMs:;W5HmQwʹbzBg)P*l 42SVgu0d?z ���6J.Lei8uYn*X48yĢM OV._x<]P+Vlb ;^hT_氌x}w8tXnNNmy-Ac'5Ӿ<a1%W6c=9}Q|ڽ%_Xu|��fM^4P̔iࠅTEkcNWlIRUrBo)ә 45Y[5י(9EkiHf3Yݩ8+���VZ+R]P΢[*r J_?N+dgxN>E_-4Ƕ=<Zg",1\cmܱRҩWj3jQA1dzŨǫ>;t6�~ VZ5nI;Z;}xֿIomNաjkl:SZZlKlh65ꬌbQܵU3V���T(U(ת>%强}eI踄?6]o6iAD֜~m̓V+KK8qB^U^oҩ95yY_E?LJǃR!#W`��^"<Ž\_r?cEfc3j>+)VEq|BMfИ9VE M\sAIU BW+#1FH)(F7#X��ʖmߺvȨvjkkꖂ+XYt#^Y/f|क!N%`E!gQS[nUG+fDkOAo;X1D~?VPEU \T(kuzzv~v-x u VjN:n3F��s z",vԚRz||YAce¿_58Qofsr;[i j3]iTfmPҊ-6h+A��}FMJ:udpH`*Zu̩ +bM _\/8|{^JsՐР3gOηMOimshTc.]4yϾ45bX7ޡGNu㉳ݞZBSf_~|xmm |_VبU69|VՓ&w|��V ׅ*+,b /vi9SӔb G9M 2j Ʃm:Xkg*V56Z:쐚deLcS._eB��}I,o ؞(khU+?%%Ysͅ .E Vթ ?Z̆}S.ݑ`t8|R`P@~A^*r Iv$'f+ys>< u`b}f/<=سOAO?3}E#:aZt |5l2l싫6ן^~xm'm(1⫥czz<sEjݏ}8j\F��pv'RγTnĽCsj(ƪ(g!8oeiJPZYk2qzkH)WGbwE-[VmD&`5eZjLj0RZcΊ`��+FID 8x@ľIeT*^YUFe?'X)m̩ђ+~qm|k, ̌?3X!&ݮ,`t$9 9Yr#hhj.u%X,&鋃x9m`��%X(EHS/YjhVicVd3uER]ebdw*)aNCdBok)NM1MW6i2QzkVcWlEsV(+���7XԉkIA՞OIZ+,+-+QR/LtA\/*'U V$T|Z3HiyC]+ɷnΓSHK@N95E*Drȥ D.%{N.E̼qOb��0Xa܍揭$RiᚨB )FKsjUS,Tam8MeNWVSJ -#:x*ajbfJ͎RAF9̎Ljm)Mb uY`��+U5Hܡ₢U{B--+*(qWV`%Wqz[]Y2*f׭-iN[6}n/X!zNN9rR!I9Mw9}rHU2J^BYxNC}|��w вp-°NY23;8eh9n|FrIvA+F;'ӏ-%N4 vVG1zSowmG-ٕUZ\d1c��+%%eEp1RϾz-ӽUqǏ_kYE`jԒi]Y.d|TP}E?'X!nr:d 95""?yL.���<Jp7OU~Y8;g"Rb6Nks*Rm]3<פּr]J9(K;ڜ^֋O-T*4[ m`Yǐ̷dihLs8Ӝ@��}k9{jNfvΕ̴̋dBvȺvmm+%O|I*QZSu+sr D ֶ\蘃.)���t``xZˮ`iqprClfb4`T)G/W̵zΧ*,ٜe|cbdܗ-HZ~liJQ-Ň)Z+cs&3N#X��JֵWs2g$O XVvFzFjjZP%<c{ɸ̬RE`%9vy-#.}%&&'pQr:g$UI@.R%\+���W>Ng{a8~ƊmfKMfQR#!޿NbZ24GuhHϬZ]W{y)d?YgYsOS.>`-3X* b8a,X��JzFj - ?2<tOpb[VIȃB$HDjN7x-:;B3\;ea3NhV r29- DZ^+���cr'׶ !8nL`3N uXhuԘ_A]N3TٸlyUWLc%c}1=\ĖO\]rE4+Jm6j+1E��ЍsɩZ9~#'iU3`G ?'X9yHƤVK|֔sL_:Ib:Tn5X!w ?/ U9͈;woU<XY0sC6Ƃ}ţISEfHуfS>��`^WֺdgTdgwYVRulfh;u윊*uB}WUiuOnipqˆLPO+*Ş{~EKG/Hl{>^lVa ��No*ĩx?mj'v+G3^8ѽJ9ʌ}^gnjSOη:RENlU^L 7:$z㔾d&K ΌGc"?s'6UՙF��nr> s%4ksd1Ҭ(Nj5&rV%mlvFgs6Z#2ӛ)DfOGmS̬8+3TȒgjf*$=dY ʕs2>kJR[uV���s^h&V.x8DLM{uw¿Vyq y]LUD<P+mDFEִ[i21bC<={sar5;wYzm"yꩧte~4wCpCluhѠ=qэ:3G H0ev2^oD+WVmCsf̘d+{x_};A'7*6=kȐ!}}]7w8h?]?��@GţU[`0dr&1gj5h1,2dN'Y,6Neg\sp~}8\.5V\o)69UdџcK~vbte56&> X��ʝuKJxҳ{Oxj 9"/-+wUZǿ8rJuO뛠>${͹Ԑ9 fR^>vkE+Vxs^Z{}_\`;VF yD'sk11˄N VFUͥSF.8y+kJufIыcDv=Xi��tp/?yOR׌8sZiVgWgVo82JoUk|תCOшϣʚl-LR=9~lB$*ǑQ>[?9Kg?.jF��`uzv#>5o'.;H;+5BjVT&Yc'oq(#IoC2|ԨQÇ<+J4c`rc˚~_thAD(cxxI2/E|0fN V4 e8`Щ3GɁo#FU `w[?��@Jܘr 䟫bu@&;s*;'1 4Ch2r: cr0jSj50.ÏW?3)B4XFBb-]a]8x*ygՇsWhDW9^铮x.ba ���m >Iɵ+t`eMel/ Rh.6`t¶vcWIR\^7ҨzJk Za.ʪ-u%Xib}$ǀg[*ҙp��t%XrMZiv8v'dY5Ӝ4[(,q ?x8-V2L[J+\}lG,1`Tg/-pNiNTX ϋ{}2]=g?=>Q$;#ZxYY ���_슂t`e)Ո~ ey{75c/N4Dxx gdƊ;f 7qtJe{F'Oɛ+ZiG]B6Xq��Yn΂ivUUXၵFkf8NV)-vJ(.0h#rz{C{xS{~y3pe|^lENӒ+/ӓ-&V؞߅>Ȏݘ{|G`?z'G�� X}15(#6H ʢƵv2/3xCj /֤)(ʺŧ_\"V(".Jn ڈgғMoh 5/AGY'vw ӆnX?WTrm+��6XifYVkh2OWs);-i9cUXq6J._k.̀M>nZؒJ7wȑOʓNro+O)]pov\y˴߬8 lH{xsF.0X)���+`eeٓ'x 8qʻ jwQ=E]!tK>t!^c]@-lR|w$n Sk`B[0oIL17ҖĈٓm.+Y[c#8yqt��{nhig8;˿8 vLs6I;ԚDs[ ]3'g{O£k{^3;.~G)qL\鈓.׼f\xᓛ/<mV͗&uzNzhŹG6g.{ϱD��`WtjL"Rqg��A V~t돪u-vIR4X> کV;pNIpZY[IQy=7e~?z=Ư9/zOɉǿTH?>RMӇ*=*_v%'{΋wWۙsm:dPD%lw3V��� X]2ẋa܉`��~`s 8bUf`q* ФAZ,g(bcv7"/K#ⷽȜ^t^\y9_? I;{Zأz/M{'3oN{2.5ƉuV���Kb V^",+ޔ^ /#X��{ ۅ`mBic{|v VYirp69윚b)7OAY?|q̴ygK{O?97|dSCAb9z=kgGe U 6#{?}^#[.?jp慺<-`��[+{7.#huCt3��n;c4XaTq};\7rM;l,czuQeeվX=%{_VGn<s}1x#{oQeoJr K7](֚Öl_Hǟؖo׿]jxIߔ)K,V���G��� V\on6co<" 9>d9>XVzu@AE[=>>*Rd*S ۔WZ [.ށ>!Z{`$Wh bYpE/{YuG$eGER ������_:X'a wcԚTi*+FnwlLپZkgz^~GF=ΖBKEۨMgzy/xj~!Oօ5%څE^O|J\mu[JeT",+k/4a=fs7W̕:&K*1��� XY<bSO=kmOL {'z%+OE E4uO?լ|=^no˶ +^{}z~:EyԦ=gO�A#?��p?+ 뚷-sҀv=TD;MbY 4f̲R[o<!75?]Ȏ==4nˣc+"R80O͟& /dkmRCܓ54|vJݫ*Nv#h D$W>̆91WcMi\V*uv ���+7gTe# XGǛ $s }PL-+V/v+5ʫ'_ۯ]6dPs8i? V:��y§*!$,7TX ׳T;TS\IRʵޙ\hUMi=>걿r8sp,gb'ĺ^y?:R9\;Dڝ3D钬_9U:.h7FoWdދgjڕN<>OV<)t{fG<1Q_c3V���!Y}|)y?%cEoFσvV+[+]4~ƿ:7H!x/c &ODМʹc 9e퇮[.}0rP۹$-3|'Iٗr{hSZ#K͝/n]v䉣 z5~L5tC_2;_cjE+&1q3WOb׼rfPY?ٶ��![qp ˯q/Y3{Fqն}bӷՅ)YMW=u=:hwd̜p~k]%Oz-񙤺i*UR]WݕǐkW^ٗ'}wTɹǧ=9;M/`Ftѵƙ76dur+���"X'zOtVvc6|mkIy_;ឤ{oiԔQ삳OaWy۵~^*V~oUh>%8oM׆'OO:ґm|}WoܸE'X`u =BkUw$Xyŵ HVx\TK S{ݘ'֯VF`E[̐D)??=3Q׵`��̓~;,0NY5l;- gspe4S4N$\?|K^4豝Wz.?Ы!O_>Tn03}aٞXo/={te^_47S2/]WS<ᏛRG?8sՉ'' KxGy㍚##X��Jbb"~אC'=΃)ޓ/DcHۭT5HU>}.( iKf,-w⽿-FE ͕Ha%N])V"z>_(#!|fϬi:Ɗߟd64m,VKmy /}E >BvY|Cm>VAO|=tT'ղA'Jm�;+\5WrL,9.594 ǿ�ҜʬJt勩2,s5>MkmJ;XP1lYW\>>G|"(gEӢgbǟ)&}&Q4Odvd ̛~vQ¿/~bC￾' v`KeCrL_bH{UV ��nv]CvnrWzO{+_ wٴ*a~]Ʌث+:Ik 7nZ=^fh7/~2K_KĚ9]$X! \?]d)sonb׃-{h)/;g=�jmovԤ#^Niqr!.(PkC|a+m�\ d,6Skw2}Zct]sUEzSF1 2Ø?Ӿv̇>={bM kgVJ$<?#1a{Eݝ5|3I'6 :V?,]ٽB Ɵ8pQrժ $U38GT ̱Fertecn[6B`���ʯ=X>>`b PZ1m-w25՘rDi,<>[l׌B_Ls7Ҟ`J]|9L m3_~6Xq?֠ЯSyu³{MaƊΌue_ynaBM֣_HmjqC7W4,Xi[�� pcSkb%7_PFFFqzd+͙l)חMRTawg?yնzΰ˚iXg\?۳{sG=Ǡܙ_h(".yhw\]`袙'ʾTޠj4dVh_cwVK/P^Sj6ʖ]XzU,R"X��@``E|~1ǀ7,x םAzNx\fSFj fx$w6n>0(hɮ}Y>w$ߍ?0o׋LynfM4gظq׉ڟ+\ʠŞJ8 d<?#e>PuO:DgqQzgX͛{-ي%j!z+1ixNx}b$U'|\jcd[�� rF-PMFi1ʩ9-v@WB 3VG3s$ 6|*3͐2:zeQŏ].z<olxtɿom0Α+KzS吘l+1VzqY#.z(<`Jk6״zW A5oJUV��� X,X>irOT^l_ݒɚC LзɳA87FѧOA^]zzB|q{5 ;ܴK>/ۇuY-[ճy9l\7 `ۼt„gY'V(e#<d SkV Ycg}d $I@c:nVq'wN ^h[��r6&[E)OO8i;-b'tk sb3#:W6*V]i,6So${`ߑ6#{a~ߏVm;ɂ͹sM&ח:Kl5t|y-˜(gMnT+žxnoT2WgS{l%YX@@-`���ʯ(X/2$��dBNZXhiV;sziRh*v8)iv8MpjnXVErȬ␙+y)!S/ZVN#3Nn4"|NacZffgf% oћ+)rGɩ+6iꯩLV���`eÇ'_Vw�6XYk`\^e l矫bq71ѬΚ윉_b_ Ȇ|N`uvL6h9EL\=Ca(5GU5t3d27Ӝv_g9iqzCkmrhNVQMVFme$GΞhGB^~R5Cm^wRSh@-hE��p+==x ^YYYGE+��@7 V'oVf#md9OOX+ +Qy+AƒWX'YIƭ)m\qAqSHYLN4HO;Vr+956Rv)\G tdD&Dp/~77v~[ KSJw '$rs��oʞ={{(*k䄇T*R2e… ` �� dXJQvX4vNmgu6DsV:iS=>a)f,kppj+Slt 5ʋrCRg`e&8% +ʈ Ml`MLɑl-_]\SW7Qi@E\unkk(3ق8pjq{ (A62d2I|/"AE}?ޜ$ %(s [-qV#'}99. ?2l# ���7 ttt=jxP7+/^Xuuu���@{ VZNJ ꚧ5lD$+ȸrqMm"S<?#u6\B&QHUVqdebك^h !SQQ$DT=Wed~uP_^ȫ T%3t)vAҺo}mM]ZCj~O֙CVEAbnۢt?OB��~+O<:t, j&I\Kmٳr>}N:`���[R){*W)(6E!kke?E]R%2OkB^PTMXT^HU ^,K(y̗<`T*sIZyU f|`VL? ŧh"8ldNWeu^gvO'f~ ){+B=վ.OuqW�� Xr_||邛n\v)ԠA]tٲe κu&OL,y_l3قW 6-wc{1~޺lA/좇g t˅wYV���>`E&)g,rA\T7JuW*"څjYD"RY-kdl"MXΩQ" bx*v]%SZbdxS,;?ݠ 3:h-Lr0=_uCt'@-N2xQ>N:,hErmNI 9ev>_tc���`eĈ<zpg赋7.\8~'ӛX߿sιL&s߾}cǎ}ʝ&/n9Xr~+*`F1Ѷx5[~ :1".`�� VrN+(L[!0 T.)J~يiM\'҃ <i@X_,*ߞYHȟ*,+Jk2+/VڄN~;m8ZbuvuA'6;ԙ=jVOk̵/ԙǭN;uvz 3ɟv$idH~slhvQGWC4z-B��~? xf[o|?wG/F~ƃCFfgliݸZN2ryA_"rqʂ>_-Xzƍ[#+���ER]4O*]]=Gx<Ox"SU$2auo�UjrBIdմrQPv'o?qc?% }{0E?Bc{M)⛝;\vZ0X=ZcܴcFOKtvr ZvS;L'H]q]&8@ή^g8֙|@SgGM ͎ښji~`��+? MFL޿-vm&!ݹYGG{…jNNNB~._ٽ{7c+*8X0`f=h~L>qDK5+V"X��x/G(""j6 {.>ST aHeYiĿ\S ֯)UrN<U(笿5mG耥>9х|Xw!:O.;T#Xr@׭6hziП9|pgM}s~f?{v&\smDgϻ]=C{Pgﰮ{rw4MQ;3ڽ'?:^7a���`e&Oeown]ckFԩSռ̈ÇwԥK7D{vJ :x+YοKOWʸ3Jnn5k}- ��@ V*kE<JDoh6XƩBaeVEufE RQ.}*TOUORR+JE2P$N .EmOX硝Me^o:(/R>75 fO;vDFo{Rܫ|M㎶ǝ.7ql?,FH\B;IdbKߝMQmqv,(N9mֶ`��+C 8QF<i/<j]]KSs̙j+V HrǏw +삠a>a2;N. ֝-d i=A��+|Y完%A9̳dHs% \ CHS][_V׎gaV>eJlHT/ϩ*1ʃY9<IeVEeqENŕ$Sa6wj/hjv}]6w;5#UK85JG*,qC)Og?[w]vF{ ,fs?E��ЮAn8ev:رXbѢE?/ +7-z Q\@>)i ŗTE{!%lEnY8q1��| R̞y '}= 8QO{C*{cƕbBV*)5 !V2ne KZDX^P^M+NWE1SDli..,WǰU) ~M62a!'o%z\[Z̮`+*WɒkdŢ=b )o_Ț~1ǃH^@%E҃\4��q~}MOk7_ ?iiiuҥ`)igϞ9| N,`MLQï˜2E:O z/ 0y-��GdW9Ɩ nRO|k9lR4v:_R̖f𫋤ri-VʙY2GX.&q|Q^E͵RVG>)KC'JZE C*KjBBP(dO2BRdBL\W˥ f"S?:Qp&>S\%y|x{ 1}NTK39`��+6lضm[TTСC?n3H2otb]׵Q￿[nU |VRg#k~gZ /-��|ʍ2JdBgt&}s>}XBd,"Afp6=}¯dJŒ"T\ÒʙR9*S(Se/2%iu%arq2+UƏa+*+j5OE5r:]P.U(?TRIeĿU5LqiŲX}qWOS3w0O_*˓J厺VhL|Jс!X��hJ~~)S}hJFFYll̞=ήg\l[ V?+���6XY?4$wർ//u!SJIxC #tG&wO**#Z\=IRy2D\˗Jj *3eI2Oz@\aO_2&$mK'W*`g,bRx"J q55OJSӧro&(+q"AM@#7BZ'y{7 3mN=zN >`��=Vj]uL?R|7BK8˗uuulvo߾`���[2f79_KjAk17rWfNemOc 0*25'iRn&/KdʂʒJy2*J1R]{fXaɽ$Fc@keΞt'篇%aE*cԊtN Y#|*zZC ,QPyN)k{TgZ}|+w``ڷ3uO$u6s__D?`��V\/2wUuV]]]???bĉ?#C���-XlWz X06ĸK@͙cٌx~u &Dz."#KU͐SQ;-MX˭ ߣ~?^RI١'_u:Ǒ{b>=ݙ'Bcye{%e |Y.OʖJQJ%ӂ@q~_L3oϥ<<zQ!gp1bGïfhixَ_��xBzzȑ#z~+CӉ={n߾q���xWs?=A!?ȟÚv7wn,c67^ÑDEgq+2l-UKeyB7g2>}{'wޟ=V{C:u!V�kZok #C)gL$$9t''oCħ׵h__Zߓ:60)}O`|)Kٓo6[??^ZU ��-X![ݻq!qq'On>\ ���`廀;H CIaqSgKb,ޒ$O*Z$O(cJ iM WgR^9Oݝvu $׶<I:5}]vtEmZ09I9괶NNt[+o}얖Y{nDgӴ |j']w}y(IT%t̯.~4qp`Et)1.8{O6Ehi"X��x%p& ���`E/0'SOJƗιYRTrbm*4hw3L,C(;~qWk:OܪsVgm%7c{Ձ?gfs`eO_7};~&ld6!:Z<5zh_?_7Z_:oV/ O54?bΰUKov߭.<v={n{E3m-Jd|2Ckm{V���`+���.y=ٽrP8+=;v6͓WEN '"1#JmJ|S*JDDg餿XiGk|1^ΤW\*KU"y RFfL^[o 4FKGOKߎ{itOu:h|uDW}7);ym{gE<esm\NpG>NGky$ ��{^KB!/qG,/++K���@ V~R~!i#Ch3Ndq Yљζ4,޶ tr;lQ?5J'{V?ОPӷ:mbV\.SkdEL^U#)ʫާh|AKO:heF1&i|gF6A㓟gcݖ}c䥴ouy}iN&xZk;_<jg4i0o+���`���E2"h@W@以Mexė-glNg^-,/ؙuO,9#*Gr=n~嶇ݷtsֵ=3e旓uƧC} D"BʪBRsu?뫡ٵiȎC=,5E`Nәy׽N. љЉrGY|gjv3���+V���]+7V9>KP:1sVx7s%7rV0/#i[ՓCh:õ-w1?ۖN=;}cF}oeWOO+O+O%5 qMmR)SWTNC5?W{Xj\Me?xhu]ӓtA}掮'.6:_{^;iv;֗hCG+���V���VKuxu =ev7oC9lIB<RY ہ.W4Gn2pg#7tٵFu!LQȕJퟴieB p?Q4;iuKiO[4Gv59֙tJz`E7>Y+uskyVsĖ4yf:vA��^8���`EpˆECBf-d>*c.+YȲ.3tݲYpւ8uq%jceZStNo訣}5u#V?qBR \-n#;j?k}㬡˳Ӹ]:'5gӱ]X_Q]]\{GBak:v;tAC4Q?`��+ͷw���CB��+����!A��`������� X����+���V����� �������@���V����� �������@��`������� XiN��@;F|CM)6D��`Em ��nDߣ!6|olW?A+���V��� q_ڈ4A6ەO ���+���V X��@`��� +���V���@{V<έ6g  ���+V���DƉW6N3V(6###W^m^X ."X��@`���>` )fnzqWgԡP(d2Y|!+���V^:Xa$]q&aؿ^LJl{f��� Xy`y |rp%26###g̘aaa_S'66HFEErHS'M[ۋNf_FG��ރk>d L~@'@`���ʛV|6i1q;X碟+l{ƌTEUZ/ܿiٜN|� ��ʂ{.o~aCr"enS4`ȉ;&ΗZϜ:3% 8pu;Oߧ/X*+o[7��� Xi}qw~{V{rXM3332\ QH"5*kzXma&];`7,}lmiЈ K^i8ma4I?xDoOD`tj,\gF^Sg���`E"摆OpXuƒxObH\8xh˓򨣗ӋyB `eE_O'U.(sbarԢæU���|JaaիW V3LL\fz-iv Y"0͇ol`hJscI~ے,W|mh1ey Lb!/x^1`e$|n}| J;u NB~M;`��=+>=nzM4^Wx~ACJR~7-4}.R+a,9G\5ȥ۰2;[AF*��p\0EbHNff>>qF;'ScT_|B+(66qWjCAVFk#UpӐpˆ^S_䶷LvW+)YU\j[?Yoo?���`wW!ﱄi0_ğF1eD>TʆS89VxG ��rssWX[G:_s1TT؅Lsuq̎WfTTrZUk=vN'tΡy_4hP6(>KQB4nS89Vy`��+u ki&W|Z0f!*Bֽ> W9kB刕< ��(xQ ]y`E(3VKKV2Fy!O,hi&զig,״854¡&zM1+9k1XQX���J7a֣1iBD* =(v.[!Vk'޹z+Bz}G*#Lط`Ƀ'qia9VZ V0y-��vyk"\8E[YEt׊Rwn=+ƹ3 &22ۛTXعs2[Ynk>{QR6/d.mm^;pC\v0V̛k7TxAw|؅ط`Ǥ쩻 ;nF+V���ރ`E$y/rm숾zz}M19z'*^ƅV h0bԅ.+/;ŌL]zu`EZyf.y փ&ΰ|̫h%X���d­:J} zWFh$̥f%7F~iHرclˋ4'kݔ1u~YU3y|ˑ^篹,nΘ1s&X)%v& 7 n]@L��&Xi���rz_Ғf&Y&ʋQA26-TBطo2[YbEl@��^j X��pܘ0WG&gWlIjsLFY,Vx啃PV݉-#X��@+���+ q#/]3޽LTvVqaB+lVf+AAAV��� X��5Xy#;NYYiVZD\;;ϲlu:2ٰaC3B��` ���gʿM+���V����+V�������+V��� X��x74A6+���V^���@E|CM)6D��`����+���V����� �������@��`������� X����+���`������� X����+���_r����U0m5��� v���qJtj^XX �� F���+m���+����4XyMu��� X����+���wNҙH�5P�p TB묭��� XA P�5P�%gddԳgO_b ���t�5P�p D" e ���t�5P�p ^\+���Eҳ%cwbG>bSjrKgn'T 9lۍWX~xdžt#wO \v+[xd}xkBc6 hn|l?\Wn-třaz}2yۆۯ2y-XZ?h^q @{]79jmiL0y-���6yeq `Gv-M} Fn\R[L, [اHͩ?6lgZ,*j氱7ZM 9|>Fޮ"Hgg:Oti$"Ư}/0 ~vRao$Xy-rdѼ XA��`Mo|i̩>S¿m긟 79}Gj 8p%ySPϽfJ׿?{@=~3fL&"~Ɔy# Z#3v=}.w T%{~:yYx+lpCF߰ƏOjƠ<"b;mH&ַL+n;Rz}G[On>4?(5I2 ˩V>WYk>G deyUvn8>SK2g7ܿqΧhh8"#lhT3]V7Ң~#b1V%EM+;ʣvk1SNv7xjM ���VO^^T^S:z9_8h~o_O'EtI=e+KiBqԡ.'<+iUZەBVX^.}8nTIq2i"u?Wa$zxߖSmgش6(NJ%"A媫ꃺ?$XӬhW"l4?ܶ\�b$x[$(c0ɞgbIM#66~6 |y!V]v7`j_jcq+YuoMvǰ[! 7nH,7»D4b+<_0z2Xiqʰ Q9 }jߔ��� Xy`65ۏuYT(s GvCS Oy#]闈Sp]~7<|eUwһͬ=6mИozyV ]ꤞ^ }OV9q%emWAF8;z:_mEyNQkAAԄ& JN}!b 룷.h%{X_6;b^ۍ=VFudx}^&Ja~x`-4>-!6ٙl]AA+ (HUyE'z2 V۰r`{ ��Gl5ۨ3=z̘1# s /;pzMiҠa6o Ֆ�7CCd~ӓ}Mt{?6#C}ַdĜm2ՠ$ fmY+>ݳgOX"}ܼ#}i�4Soݠɞo匱Ń`僩 MLVuG�Bݱj<]7q ml78bڨlOgq&y%ly^!XicqXi Hv EDDFz;7W%ޅ>yg+ ߔ+#mbM+���c[Y6JW~4NُT~'laʊ5Qs[u}^a}A>vghV⣚ʡm8XcoHiN (VXy܈+M S4q:WW&[+ H >z{FjeWP7uFJ3ih+mOuѫWuI+ϫ5[ԏ&Xyvdս!6ٙl :owgջ*^oCf7Xix`ɓ'mC`��Vt#Ci6#%'춏VbZrX9V$"c7u}^'X9쓖xN2mvH~ilXPĢұO41DՙVOY4aV%Uݵs88<G$.h]+jBIAXfnATՏ45 VuքsK(K%[ìfK{`vC1N0lLr~ ˷I$Va^AQusٶZjQ?`E͑Udg~;-u^/hP6;?{W'm &^zS9V��� Xy[ ᲏رSdKۥ\}@Wyf.y MaܯID-FS׽`ގ_G dh8nD F$͈qSdy7lFΟгg}lUm>*:A6p 볱'YNOVa6U +M 9l2qE5ꃺd}xkB_qbXͰ[?Wpc_&MajfՂV YGS]F[6~>k|4EWO)6GyZi6_EV7&;c؁o@49a[ߝrn(Go,lQC��`:. 6lnx!KgPxAl~#X��@Q+Gv EPn�@;ҢmO=`��� @gP�Pp $ׄC 14QkL+`��� Y &�@ X��@����V��� X���@`��� ����+���2X�����8Xcͧ9dOYB5[s'[Um6y]jry<+mi ]|y+Ֆ$Ӷ6XN !Y{VNⲋ-sf-̃=t2R73!)b*F+#n;L&ũhK^;2 :Q]"TZDsSU+U)9!Xf+]*lM^/-ˋ[eM5XMMmb*.-ypIq!^/SSdYr8ao5kˮh&vl#v(Ov<$nf)NO\VKݞ/)uN**9AfVvKj\}wzsG��`-Sy0_+`Ԟ?KlQblLʫ?1&dYyVa!٘;%ʽ#kcf8hF MVjk\vĩiWG+hWMH4V}?0q)Yri)eePW7ᠰb&Gu-۫ +kkk+))q}z*Ⱥ`-M,ͪoQ8%VMJ+ʚJyciFfg\ှwJ7WRv.|h"2 u϶b*0ɻ VN/sR?(tR&'���+TA.3<6nSFZ_!NI}#T*5Ql(Vmmƴbe̒_2%,=@K"y_JڱnsmlmC?b.RuN(d0#/TmHԥ2.W]ehR_;tŌ<c)-[ ?hI5Yn^`-MM+MJ+v>:Tݖ<+YrevôG$?bbfLg+{+دN#X��@N]rvv͌MV ˎ&g;IbN ]$fٍ̆-MO7XA+7;Y8PajB<+ώ2-؄lJ#VWV*U;W[,a!Pdbb~.QwȈCobf:ʏZ<XicS-+ng74)Y&&eLP+?ހ`C Vr/m_B_ݨ,ARʣ&fi'Yٯ]+ P$qbaKzq=eTǵɥA��`aƙ9CAcJdƳ^lܕuNvZ.K1>>j*qTs XyNO%qjjG8m=ʌ&f뾃,'N[ Vj'ڰ! &*(u +*νشZ}|}Bx7[r;.g5y㵔Œ.P&fMbѤ[jR..d2ݿp.X=뻀l2,%=^[[]>Qi;[|,w͌N=NGh.HʹFFFYy(6'+)މE:or,bzrƺr6���+oWI7͎΅ׄ>?"`n%lSvoO 2L0}!V̳ .m\t+dK[-s!|/[r +<-w*QE,lV mPWZTee  JPMRV(ځܰ渺-]xJۛ&šIRw<{ynn XHQl6YI;qcþ 擭7#1ysHkrG7.oތ X��@jrj ��#V V+���V��� XA`��� X��+V��� XA��` +���V����+���V����+���V���� +���VNc��qډ X��@���V X��@���V X��@`��� +V������ X+V������ X+V�������+V���`J{R+2DZ/_jQDF-p>Buq@UE- K9KI}Ϣ8VPC:O=6E^qPV�ccs܎'8jeIqKݵI]-_eսԋ ޷`{dצNLL6`pWp觶yYV[s^Pnab͌�ɻ Vgl[lkfjjaͪp27䪒諫ܜM)6A��`-0a?J.d|7z',_jn`%y\W-+ꈙ)P#@\S%$߶4ET`K.Ҽ+Wؒ6weU 42N Ub&v|KV|隥Nb g[ fKN$+=Vbdp#rF3\,F":yGХTZhlEZC=JHhϚFB=9`���[N5D*+JLIsȩRg Y%6T*uc*y+SL)vK7?Qop!;M0JkK ~にby#/7sS3 [bS;RT%[8džB!YغBNQItV7-Ww&wg9=B~V ē[0#'R+J iw>|\XRN&VzewsP(V6s_.hvM*122 I9=\ב+ǾU&f`e{MTsTY>lz[,*=@ZZ/%g)iҪ;ǷYVs+|o:[:-rC%@Y^ܞmVI@~s\*9/5$XgGlmG��`Mٽa?O*U7;O,`5~L!jzy+. L|kfw(jOYtX9[,ؗ*;aFHX B2='lLkZz~jN!lCY~:BPTrs7[)Oecf9w8;|>q)%O+}yǴvw->*z~IKʿeJé,S]NO+(R֚Fr_[RBZkc.X9bh6[faTXجb/Ji L+ܭ9lz;U EI 3 #`ہv,6G bV}VRO\ /a+oLJSAn/+Cs,S^=F?J~r ljc ���HVY͚肘rJ1SFnlB[ V6 f7hCMȼy{Lɮ+%8'Ic-pƦ ^56ªhӋ^)P%֦&1uYCO[cE9/~XcJw_,a_n}wU Mm$dUT=ԶXo&Rg̲03%<2z*`<j1X*!Z{/[8U`ԟkDċJ]JZ_ =[U53 Kq@߻`%tRvF EJ)c'.\bPC]y-_ V]n1gs+"lԈS#HߜÑ(j*np3ZV���9 9' +g=)v^ztc#2uO[cEʽnJ<1,n|ܮDfS;t=q6T9R'G;bNwuKcDvޒ"fr 3ϫVn ~k_RJ"m^'1}E\uҺ f7[,TNԶɾs,܏$eP:j,yv`eOdֺ`EU؏ϽM {:b:0UG$21S3G'[ԧI"*%W@6Yeq(���+oL H?!dFԺM ~6/H7M(g>bZdjJc)odr`Zrw"RX6bEHKrlui71<Woy.sKg"uS )뮉yT]n٨]nO|yZj@4\xE5XMMFS͔ A/1X6ݨD2y6ʓs+opicBw(&y,X0Q+V���E ttpL_eJr.y?VoxucT)d>~jKs,V)l{R;)e{h弽+U‡&fʙ2Y)f̓ڎZaSSc!ќ*A{rjGZ)d>ɞgfiX}|,scsszU퓽:ʁdi ~k $ᔤErٖ\ӗ]UQu+r*Hn"k&+dl([-Z5?@&ԔR&Af)ywjXW=UD$YUN}mKuwQq|5.X\LqN,*ea8_%Ţg>@- `336+Chn~ӆrIUl E qUɣU[֩`/{RDޑŤY*���H}o+Ŝ@NJɤ%'wP(T9 w kta\虜+O+~ދ- YW} @a'|\~w9-+FҭW-"{(NʊY:Lt\jjSG@3R_v9V)Vvf5&n'nz.kAe;uiM">056{T77,e'ltwYtUnok-vyX 4^`e{ ,)9K}&rֺ9u[|ŚpXЂ#yT# cV'y"V/p[/'$t#@b0,(j<y-ފ<k.57[I7m/^+���V=p�x |x?!X��@0'_Qކu�� +x�� X6areeeI{$Z]�` +���V����+���V����+���V���� +���V���� +���V��AT+���V���� +���V���� +���V��� XA` ������+` ������+` ������@` ���0#^J2'Yڮs} f<X>J23#[.X>8Y7k-e_]u1|ѹlx^fץ W[ve ~SZ;{1# &fd+.Ey=k u׶؆4~{9ÇݲĄ2aәWܴ܊lfFذI ʩ&F]`{dצNLL6`p[ܾv1j{[$*ιVv=F��`r&])fsOv.9:˾̔zJXaIϿ{q7Ʉt<<XrM<Y9^+AaLtTa116>[jb~h5A];̶G`E]`J^n7DܻJ6uVԘss6h<###>'PD'(X| OH+)+ˈlDr"cs CUbٜSD/+K!X��@ֆŕ;^fE bQ%5.>0dybyq,n\cS+/pqZ6,򈃾dumoxrnvٓ}Id2uۊ2|n[D25W[6ϝN~ yE緾=!E nrO7 XڮuVxj ] #}-(Ͼl&̣NT2l9qV mf] )|!+ _xɜl"6u6I~ysRvÅdz)~$srj}Ȑ5I+f0XA7XHh?#Vsgs )[Lls[)&+Ť D'Wb|-sOo27:ڭgKY|wIlaQ-Ls_32,m^ۻymf[f;L|" uk}^z ϛy?pb���Xbb%V2&hKؼݵ7!&3{.sV->$qTNgvͩϴ{lG͆A-Ay6&W9j^N:@2uA o+Մt]Hqz!4`v(=gK\ty{i{$twWЉYtu/, ;Pg:=n,cwvN+/Vk$ʄ/e8ޕ!mX]z#W'ۍ�b%$~β0y:V|&kvXgcO>cCOF{iev?+JUu,vl\Q2%AQ4Z<6���@l%+>zkl1zl!̘ngB~"l>kY{,_&A7z.L?:=/*8eXxwVP%{ܓh:;A{@vk8;OqAxY ̪n|VK$mp Cz]&#]t,tTiAqyc$Hf› 3l_$X8JD^M*W=V|�mXI}0jfe"g@t8p~:ȽP3QXu4 챏?)HcN2-|3Eq,q%"VT%s|fb1&_4婸f{{\A6,<o]+yb���XJgEM˔U"c 5bMhF^o۳AׯĦlxƽfD\48U(EXR eEɕufG)fƫ8qCDk!7N0<SFg |;ugGz֎p[}B$&APJ8볏zY_RLLJ~}spBMG`i-Pq ']UlUԵ>J6Kl7wt韥s&!V~1RW„=t=^;"VV`Y=s?/')M,5f1 ^/F!V����bLhblc:֝8Mq E̅}Nlq=aDkrld9DGl+ֱX!ib%A/bbDu)[w >b爕d4&E!33ibIꦅ`"CFWeB DGF +i\\t' ,U6�bw+GXeFИGN%& Ri;K_12e]H+|\Dnb0kO"c9ҚbePh" V����c}dbdyt3['UDܙo2<a{+uOv%H}{g.MDG[8yF_xp&e~ceCiI:,Lrb:|yT[rEo1+Ju]0y|6bE}5[K?RD{%+q7siz^ Cu,;n*3 PeWə>lV!s(r^O 톹~w{r=.$Ҟۉ8&@sШ?c`llšH[|<=4->Ȫ_O/1'yc{I8R9k{La&2Wb/-KO����mlBJR` ^2fvr4G(۟ݻu-.D`JL>7q#-F)ahU|ׄsNTQ*V@Y?Yj{9 i OxӮ VFY{pf\@r$ qPB[bU58?쏋X*μ=X1N% }nUf[GߜOޟzb%p@i1*v8$#Fo_{+X Yv5fetQ($O\.r:ØXq 3Su䵼`>!R.}|0LBi&&` ���@xeכ���0떷����bb���XXX��� V� �������bb���XXXX��� V��������@����+�bb���X���� ����R���l9PK_%` V��������@@@����+����XXX��� V V��������b���X++���� ���� V V��������@@@����+XlVJLLG<˭kn ebV}ڇU<eT%Eb&v{d:'f"~9.EH!Q&?'@R61ne [#Za/|,<`;e=Ÿ8H Uey,se^lR.!=PLɎ) ϛ_' YquaV U%fdI9}K_ V����-!KDϾYɞsŮHrv~7MuMm'p V~t::A-~vBiIM )_{׈E9r+`W1i51T^_+c8u<;rT+:dy4p;Naw'Bḇ<Or-VkiemmCjiy����beX\/Vִ[LJ"qķi+8* INӺѪƥ/5{5 %a:ܫ-[^hi1˼bM $Aޱ޽cPENe%2e?YݫnOOMFvq>\2w,K!8.$iًm\,+Shܜ P;Vw OM,`UsI*hʑFpb:r_QyQÈiY{d -c3+W5^8.c|,j+,Fޱ/Z-tOVbPl+I&+W7[^ޮ_kbE4s,-Q+����voȫ_? {>~//l>[�"zٽnh]6xwJ}.Y- /N[׾NM؎++<+لO֕wS呒js&g_j]P~`ɥBZg aqh蝿Bbw'WDk޺F[KZiܹ /+EպRʄ8 L�":[t1^.O>8bξHRI+K?c#sυ͘des/rʓ&;,VXeTBݛr6O_)/8֕r䯉=Jge*7˫_nZ V����++ZE㥟壱Z#t}o~綽ꘓ#AԖ (yz {0o\ލ1˟o%)/ۧA[\ۧ!!>YG?yB} B E1ڧ:WeA�+; hzkkOJ"+&gQ."B-X)p%v6",-B9*SO.Ɵ -Rqi\zIr%rTcNgi4Q)yze4^.$Ab&7<X��� VLl[tp}WX91߁jfrlx2""B4II$C֜XEi87y!tݙ�BPlZz$ֲgXU!@"L~Ѧy{9O/~2}m>[;9[;bUd 0r&ݔ-/= 7xS*K*><!XqGlwؤ򋉕XeVϜk(ώX p[LbY`})ϭza$w_V?ΆxM���@lX:ZZTsͱ2U/XIĊ;iG$͎k $pwB_\8jԻ1YO+'<Gl+KH<;_?tK> E²1I;_X_XIB\ Ub%5be\De ou%+XN"r{=,j>Js..nE͐&X1K3 /lo}_X>~ ���@<V뷕ٶ &?gڊ߾}2V۷;ωEs֬>ʻg$昮rh"K9lA{iҾ:ZMoZf e=.k%lM׬_OJcN V`9+K_-j}Njᙯ,ݪZ%`gpUnS* X=A\ȃL>ñ+K+gq%7p!QۉDVzz~lqG)1Fʣ׽g}�KEƍ&;*V+4w/,}P[zi=ywF`vž={LVr+Jm(,~j!#߯׸+����0הwb]t2WΊLHvzv!I\]Tyo/ձiw]O~ ڣ2使h:``eʼck+<, g'JXVGlќp)+l=z7$'Hɹ_,;#V"jύʂi$# ֥`ߖ4bѱ7ʑY{R$v-8G,[r#Rrn`&V,=g]cVj2CeJ.L[5(u =1T) >zܓ׺cXS~Jе٨}y#oևX��� V����[@[ ������������b����+++���� �������@����+�bb���X��� V� ������������b].���`_%` V��������@@@����+����XXX��� V V��������b���X++���� ���� V V��������@@@����+Xv"-)FJ8CKa?yOϕ0#?*=vB$WŞފ{? $ŨnX57Z%kKZ9²P&o`?oR*V'JsrI!c#zꃩ2hiJ~&I@DCX$'2," 'gLmxܟerF,fdf,< ����߬|3ɫqOofA3Ce+[NcXO.qY?Ƽe-"4gN$�bLdzL{v u6E3S-<<e}cNS|/p*5.z�ucbesH?i4&ugRBeQ۴WpiyvVub���X2(X>ޘp~Yljelf1; Z;#M;qedgiza8iXnŕ9(CWpt +$jBhbCCCl}:]Q'˭%1*9\#OVp)=)!&2gAiP ˲ªcFQg_Bݑ0xϞ= STq%/QC[O}sX:3tB'̼?Rց%+ :MSI{CNB-wN)4-UU6+h,u*Iʿ3:pܳz0M"3uX4{aX��� V~+W5mpq>>dMO"Ul喀+[˜B0_m?6Y45b ɼb?+beib{v"ǟ^l4*e瑚&OrW4`�5x"F]v`37K#RtC 1;;+|۵ pXYeB2 U F oʐsY$daI8Op.iy# 4EY&OB/$Ccm+lg#ualrϽ<bÎXϖE*S_Wձlة�}s͘_ [f+����&V]R\(NZ}s ƕܘ i 2!Uv,ʙ=S Ӎ,q x|l' {V }֚rWtVsTKYǝRFUw$3gMS|Nhʾ E Dմkę*W=ΠF+ ӏ ~yQ)·ޖYdjgOwJu#*+Ƴ='#7uxi\FW{{h42n7ab1 /T\|Es}=Ν;&����bw+7D].dqgL}<;rb1n &#o۬4RS|Q}nT}in< |h`z)o8I|Z|",LT"U^j&@rpg%/k2cXIɯvNY)bh3 #=*.D}W]VGStv7YF߶_yViqLMY:׸_BU0aiG>-%)EׯhAm0b���XJKՎ;,|UX)>P^0z̩qeA2G4qh=*\KC$o!Ć5AGbbDum:G͵GxU~mRnxLcmXi!ؾH0n@UPB䞽x#gXySC$'s!dMڣ}Gc+s!""4AbEHh(өdS\*ms+wq1F̹ iߊB$ o[4}J̱���@l <o^XXzJˋy1pq! 5/읜S{C+Bruz2|~V([x@F=dX<dp%RN9B\:mbXQlu&P4 S/اX P~jƕ4=pӍM/iGb'@ E)/Vj+h(A殺45oo1XQ伞4͍ӲLGrL+8&@sШ?c`llšH[|<=4Iu&qH)s|L^^#є͘s#x+����E o\_edL}W)VlUXZմQr cV)|]2c uuΙ!Vv8vMB0Ұ?t4NTQ*VG_5h1VJWHaPU̡qrϼ=X1N% }Uf[GߜOޟzҵe΃ *1Y[bTV<iXuŊn}zذ1+Re4E%)U}:}rӱdG𦃙R HIkax\MYfCQ@Ʌ V����/{@��o1bn?r V����KrxR;񑚰R'��� V V��������b@@����+����XXX��� V V��������@����+�bb���X��� V� ���8���`ˁZ%*���@�����bbb���X���� �������@@@@����+���� XX��� V��������@�����bbb���Xٍbe柳Y)21Ɇ{!c Dnq[<~r>=qk/XXΙ>E``'yi D$Hت/7TuDzcW٤$VԡIrӷL<eϲL9#3 3MMqnaNvN?^:]FD+Vkn ebV}ڇU+ ����44uw7lXI9*uyNDu⸨O|$XnC bGGWyuŊF-+oғR=!2!VvXͅkZgᮇq tN]28m6ώJ*-yLty"0(K: ucbe[ə=ُm ,3_}?#=���@l; [%V2?syr #/;?Οe򁖃)ZF$~QeBYBq\Hzyӊ[SW`YZ=~}˖)ZZ̪2↓(VZ.G*$,#7'_{y 5&khY9p4ft_$Em)yZ7ZոePENe%2e?YݫnOOM>iJ; _ 탿j 6s3F/mRm[!z:K"w-tOVb[n~ S׼Q>ޞI P';S۵׻69T%~l_\Ңcco ~7+ ����W)~Ŋ\[2b`]V(?7$xҗUꇆheGpCmxУ:;ѻ* cf]*$,hYoKEtb{лiZلHu߆~NcåE-~Z[Y/FnXZg_^$)aFHw"z\;d?ZWMGJz߽sACWj DB0b7w'WDk_"in?}61%PyF&VbTq{%͌?qKcˬ_CsLc{ߊ}M<aŵ3IqaۧA^}÷ϣǞ_!V����_FqA?X)sΕ|U,I۷O 834DBu{ @Xe2w-"qXc臕�%B Eb㮴46^Z󡽱%voFt_$Emw{1o\Oߍ1|^80|VS0uv 6+A~="FT4e6X(8Gf&6*SO.ƥ qg\t^xg o ޚ6[ރ*&\\Wb'mR%b�F^IH4q(||b���XeĊO+]c߰ H$/ΓjfrlxR(Tp">'ŒT}4ޘ6KQl|z1#Vk~Ӧ<�*[᩟,X np[NnPq>Y 40|VӦv 6+7t~D#w۵ߛ LyFM =baVr#VeYQj,G2elյ?Xub&ȟAsXTX��� V~bcVs,㨿,I+J~N)ok7;_qo=$?P/ ~WϿz]T XY nѺ_O'<7@/ajxecw[ m IzX .nR-VE2&ϥ_c_zτB2b}z.])2|PU--йX+����b~[YYm`B _$oفZ[朧>A|cp!QsbEt,'y~yͶwH*1h"K9uA{iҾ:ZS/g[VӒŊ X n@I4}^~}?}L+9gg5Q`#K}]3UM7VEˢ^ebE+ܦM b},Ue_c6[ohJf湑uoY>>21c2μlASխP';&VO<&>:© ^%LK}d[����mf)m2Ipϧ@+Su?^tGD'n)Y˳5Gs¥,r ޣKش;X^.ڧKNM?qQ.%8DMm{X񷡿+"-zDPª~(0|VS0v <�esho &6mRn+pʳ1+s5e! EѲ%-| )MTxtJ>x+'kWxU$Sʬ}Q+gb&$ # V��������+w)6���@�����bbb���X���� �������@@@@����+���� XX��� V��������@�����bbb���XE ���rW ����b����+++���� ���� V V V��������bbbb���X��� V� �������@�����b����+++����.+يqP$Pu[&YfS͒#?")ZTv܈b9sppf;k]W_RO_J�!bO\oEIH( e$Ũn\j77Z%wXџ(͍VE$ɆՎ? 2EKS N6)~0?%Sb.4d oɖ|DP$AsvɵܟerF,fdf,< ����}^\x{phzPI{zgF ]#V1񋦑緮BbEx"MΙMCZOLh5y r?{,ˢ% .烯 mĊHB8iP_HRa@"beXv{O;:Q_ֲʂѱb )\#]ӏ+ONvXګ-'V;FiR{&%TuQ^éKّZi����be,Fٚ<vɒ%ԴRf6)YLCJXV-Xv0(t:MQT8b꿚`>[32$(•JeB^{+Q9a{ƛ*jwvfWKnL%#4} .'%Dߞ4m<b0mW1Q'˭%1*9\# pdgiza8iXnŕ9Fa׳RF%7g!H+! -F&Qh*Js_94%jh1vIʮƂ}Q :ZKI*lL|N8+scw9 be?.>7.Ϩw|5{ w'b���Xn,*.|6klՕjBtE]7,ȰuJX[Y24}ˢ${OHdq[Vv%RzX=+us5NDGv۞gSG'Bo6+r޷ݓNs߳4N/8fàv=4y (-$ S%j.սZH\մ}HB`#!L{48|۵ pX1Tsum$PyFfA(P` 9Ŋp8{46Fz"|70)V]b~mX{3bM%*gz^wSeNWϖE*S}sag3|/-NJB����+ƒdN%C}vgkNwχw+BO ?6Mv_8QLThQ^*gL-L7Ҳ%\-!"izߞS|>Ii~9?2;rT-v#}G { }֚xFCAƩe":ҽZ9GÑX 2ԅCXY8JD^MoE#{ ~ r#q VvXu4 챏K)aSFW{ui2qdqmߨnuKn8_v"T/P4c0LhSqF~}$m^xg���@l/ʬ9VRŊ{ OA)=87׵& QSgiأ4uaYy`)G&39MG\+<xo@xL}c|Z|",L8PVr~gGR^MQ'XYe> G¦b%PG`i-Pq 'r &Eq*n+u)LX3א",lIbbiXBy(FX1M6pC{`f���@' 'sېJ+BBBf~dϛ(Yޣ!A^j?bҚ9K<Ȧ'ƛgkĒԍzmk;RY<'_xz'Nx^.:"}Z8O=H >|%* Pv&ĊϯCyIs6buf+ᖐ*V7$ʌV )hUbk.9VrRu3bE, 9V ath&X!DR{nQ9V+1 ����VDVzz~lT_2,"JW~C?g9rz._rPHى59BO} ŬdXxu%RN97۳#֨}wݷjƦn;Z:YzJj̩!>Ŋ#n~vE:mQbSPlu&Pǯ0^1ObBğg›J5푖%7_=/T{58Rn#ڒ+zM *˓3E}J+ŊrI~ohԉNU1066P@>{<|?<4NR,dgĊ<`={=y-MLƑ" qL^k{+DS:4c6ύG@����vb1 Y<b8X}(]!a Ujеҟ(͍VR$!sQIY7 c1r۳ Z-V3n폋XVXMymmO!QI'k8$#Fo_{>Ŋ#nzvC:V`a4.TO=Uv(Xyc2t+(rkg<^|,*H+WcKC| 6_?Yj{1+[9͹ )nXمbE7_v5fetQ($O\DHxV+οn͆}7ܧ2AJB񖹚hف FA����+����7bVbe;X��� V��������@�����bbb���XX��� V V V V��������b@@����+���� XX��� V��������@���[.W ����b����+++���� ���� V V V��������bbbb���X��� V� �������@�����b����+++����n+-' r$Ihj/fo"$/Oܦ]PY{(T^DW$W$jXv>Ή'VԡIrӷL<eϲL9#3 3MMqnaNvZXW?2|㏗N%DQ"D=rdb���XJfW5L X[&_<U'"}u [(VX&/nO�mL]*VxsYqaC%]u2S Nͳ#GҨ-yK^(]^7/LwCX黐s,ϷX~+9sG7qyy~-_7ٷX��� V'e~i<Q>*[SW`YZ=~cXY<Y/<Xn~Pr^z޴X⫃"i1q$?;N{V8w40Je$V5.}Yy;T$eYLYtOkVjSo ˲2�`#S0ciZZb}5$*VTH!IY˫mgd.[^hEye%ږ(VY)c_hhQi|+ͼr!͎LM:IX(\4]+kwm\y<J8Ⱦ ����7( Hzzf8 ͳKLҢ<ʲ'#+qw~˪uCCE2AbbZۺ,tx}RJk_'_ݦDlMC]曣vX&T7~Z*UW'{gԁIĆ�PDG,!_?, Wv>+?2Xh7a.\gd?]^.[Fsmn+JGX2=g3NQb)|l5+ws.Җ)|7Y`OvFX+j_?{}M<a3I 6+����ai<$*Io:;K)m'V"y6()Ag> $~\`6\~sI?:R$?;NqA>W ~XɼwEL{C%śbIJHXy"5v~|$l*VoD\AH(}{}X(8G&NLmh[vXyP̩'mRLS83.:Y/|3iWdGoM-FCAg..[J<lk׋Kh=o���@l離H*tĊjfrlx2""B4Y"J"OI8_E$MŊ ?ΟKRf<gi 7y!tݙMk)6#}$zѳ11ChF^^bӋ9Sn`#aS|_gk'zK4}g7k<+L-XyX}Ufa٨{VѴL[u|l#VvBKVV+m5\Dm Z}����be !mIcHĵbg\53.#<ڲ᳐Ð"~Q1b{KXiGRMݦݘ,'Hv6MCC_Y^aL$x}9[]CD˰l~Lw+6X!iW+ܛ$p'x@!g~."w~ѣ̢sW:XW3P';#V_e"IV a܇sMm V����-j]ٌpZID-IV=#0`w,?[W?"rkceUw?:F_-ju0I*P9Vt.oفZ[L`vV&y14�b_$x1<Ֆ[OKap$xyawÅDk`[Ows?#\pskU,E[&f]tͱL wPn/~F۲; X"~==`l#є͘s# |}dbdyt3['NvF}}gq1;vaϞ=EÓzL^k}t*SٷX��� VЬ奆X mI?y-;V/ձiw`]|@yݪuuyhNeYN{|ϝIv._&kVXt5ʔyj6 _ʳ%BJ r;#V|GQH$F~|OlʍOJM˹R@ be*"_ly\iF-$ڤl[ 9iSd\{T Ŋ4g=k\MYfCQ@Ʌi lBJRd_~ 䞼vˌWEK".ٷX��� Vv/ vV ْZD-��/𛉕�b���XٍX}]=Iϻ|:lGLf4�� V� ����KJKKkZv_цdR.$lW+�� V� ������������b����+++���� ���� V V��������b@@����V���l9`w ������������b����+++���� �������@����+�bb���X��� V� ������������be2-ٳ>(HIȽ%rO,^³{|jfI銑]SG/ӓJ֍-XT'\{z+MDV}܇ )FvuR*$ ĊDinR."I6DwvDwA7X}0UP-M)8կۤ|hVL̲#z+يqP$Pu[&GȰ$hN]n09;24>]���@l#mjK3X-3ZZz~|/FzߺھMbE:{b%bMo b,\" ~>HZ'>b_$lXq4gN$ KŊ~,CCMuь(T/kYeAG@g TeБ. G{lɧP';$VxsYqaC%]ݸ`{~h2MzϤʢ.;/DIój'Mԕ|D]���@lCױ;؅)V=tΙ[32$(•JeBMLXLCJXVJ+Ҫu,)]q//IM(elfQUkuIJ04)mzE^#^~KӪruF瓷s%j9044ϾMow7M`Nqqu%% )j0; |>Sp)=)!&2M,M0 ' ˭2gݫ=7ZUo5b'<DZZtcEY? ӏl&Qh*Js_M94%jh1vIʮƂ}Q :ZKI*lL|N8@%;κ~z友O= o]QRyefDDGB����+ۈ)Qq=v oLչ-CZE]7,ȰuB]c3eT͆A-yy6<OG/G8=N]xsg7FC=7;;2wSb1 KEd̂ИWAyUdׂp9rّZ˜Br0_[ݫUM^WsX`ۮet{Ċ͏it6gzFm%PyFfA(P` 9Ŋp8{46Fz"|70)V]b~mX{bR8>eN6R-9TMój Fd<xb���XFk/V|/(IQ BI}4&wf)osɌ+ݜ<%nܪ5G=X")LK$z  p\F ED!-,T] $tf!nܿ{ }Y d;2 uI̼kLymOcy^gyW` ŊHT"V&dV2Wӛ55wr/Cn}d2ma.+Ƴ=q)#78lvhjϰq.M&, n g= 1*S4c0LhSq12BhtB0b���X2LM!\ɲUbţ36_^Zg^F`v (,N'1NZciQ0a硬HSx]~r+~4~51,Ĥw5bee8M=/<2=x ס;w`ayξ19溜ّ#-}Mo5؆yG¦b60ZN4oxFW0!.2}[U@fRW„=s 9+ˆ(V,E=_)wbʎXeVz1_NRr{cc)NOXwVl���@lg9,H C3[s70%F@XHQ̆ʷJg[E$qwJ_ܺW>q2#%4$u%A� |ϔOOQ0wxϋեr >|jw5 VE:߂Wl!Iq}F5b%327ȁX٭bEHhu͐☌V%& Ri;c_z:.'!P';(V`֞/'DRv?YyK" ����X`)1͢u/__C SNT%+O9=Ak+{$02) <N/6NJ<`z/<8D2l4bОּi5<pzߥitI]Cb1)/9([x@F=WsV_P¡O qͱt0{�RnGJ%Wl2/Og+RϮ+%qL澡Q':8UaCϷ,yu;5Jk{c*?)K'yc{I8R91%qov-sϧzz}b���XO,fhU(E"1u\V!8.-W+$ ðCU =)ߪ5.TO=UvX ֽ/G8'bV<w< ɱp;~u.qnڞ4L\^R΅`voA0Ұ?ՂۣMqpH"v-_ϻ̭[(VE8$#Fo_{ \0{�Ɖ$A=dzO^ 1pV Bζ}sn&:>yJg=Z}?{{ܻkt$'9QD ŜsDQTTP$sdn% U9ip̮YUfUrT|E(Vf(oLsVFЩT;`:;X4u?0 tV ryco.A"{nai߃AE07<mT�����aX(i ݅N] -�Ҝ|n[w@X����V�V>"q{܃L�� ����23X,# ��V�V@X����V������V����������@Xa�����a�����V@Xa����@Xa����@X@Xa����PX���yER0 �����+����� +����� �����  ���� ���� + �����+����� � +����� ���� ���������+ ���� ,Fa%/k-Ǎ΁K;ݏà /+sb~ӅO>F"M[>NE"Q.>)Q a|*7YVRv.Me;6gd QCT1` Bׅc>.vĩkҩT:gہ|4mui|4* %fmʈ B%Y3l^V|b-dMgm * b9[ާ^@1T188p/^ֶD>Z{xH��/w VnT ~|h7ap;VXaeSt(bd>771]q(R/q͉ndpx[MnH9fGo̙kNL˛)\`xjƽ)`)OGkoJ3i䍗3) eXwﴥyuF816^6\PSJDo\7oZksvW?CT^*;[XX(RSL˗/?{,999?? ^ !���K|VKVo3++Tb:Ŏsv:Qh.#Z? H$8kd8E}406N,krxbl^afC?4,8ow~;B_e2lw3exi<4oȋY+xW#XŠ|lcvmI1;6or~NZ Wފt粙L Ht#A 0IET"A rőwrp�y{~+v|ԖVӉScZ㮆츯ܾmL:qP.ۙbaaC [FclV'IQp8xO`w(/yqtdP4gPl23hXt8Q#2VdnS+nxcM,Ni MXx ͧ d=~rxKK7سN/ 2tlR^^rzpBlllbbbNNNyyyCCC{{P(���_ Yr0EAa#!ѹX yD{U"업5IvȦ cO!'sFLJHw"ba[O{ލrRr_K&;8BV%H.S.֋ ӎp`n446>$eBXg 4<RomLjUx ݳV(,3UQ! 横$l�Dc#r$޾}{s4嶕%%EM?Ȧ*o]ɖxq[U$pgZw |<9%E2YD=ɏ2oԵ QAwoo[As>G4,r0p9(P|O=h bӬ"vTSi訮ꕙ:D]U/!:H/z~f44WO;&i[N g<e1lgѣhaO:۰N_9suL٢(f*:;;KKKϜ9Cl*> )���%  `"|>JgrJY]@QǢܨӤڻ"H$;-X1.3A<6n1cvrᡞ$2{r E M" _*Hd&6k{h;ާdrZi٘jSGzBaplۭF;"`lkY4AXĬ:QRxbXJ9ʯq@` & bzD m)&o"{ cG+U|측%u+:h15li[xfּv ٜDc047& KTK3W15nȼ6{vj5J.uMD'`PÝ$ּ*t\ 7%ة,Z^)^xuU&C襂ʒ` ?.,m%&gV6;jAܮ"f[s}uuU~`;,䬂g\I^'R<y?IRRRz|U455EEEݹsɓ'UknnF/���=��_09R[< ԑB=/Y ?؏|ݢ⸧GdyG%7m<tޡѩST,POrŇuRXo;M"\`ٍF1lL!3 [`uwB68::\mo]WNʆ,wH~>+xW#,w<k L6AnNEe{S319Ee 0;URA'#FU40"w8Lr- 3^n$m e7" ;37TPeYK֯7eaiiZU0HEEEYqlKNM,2Q,nddTY_dɢZHnj�, Uq-ӂ,35݌ɟY罌<ptw{ 33k}X>_3_ ZWja.*VTI4-l E9<灏BѣG+'yEzJMM=|իW⒒иT^^^SSSWW)���y^|> �Af`SWSXqϟD"EIfN2$mF Jn9Ȗ/Hdfχ 'g LSfiZaeBae ĥ܈d*W,|K(wG5Rvă3&-+&zH_ ͧ2P_XUlۋFOɟ[ZШFEN;/++ܒ- 31xƄ,hjv7:8o`h]\B짚rĎR., HqA`}Ja|`^}șσ Yر9YLfkdV ,I;є 1E.,`ӽدmF4<>hl) dV2v\JOO\FA}Cs{}&R3O/_8{<xČB)���y^+++  �A@nr0mE6oVƇ$w{7TlKCoU7 FFLJEIvt/۱DvZ%y8)‰}L.$m:>YHYϺ$Yw) STl[aq?J,k|t/y(Qzf X%-L|hl-pM@P'8W ̩ln<^t�k>U.4+W}VRRRYY  xg" g3H$+qsHc\*D} XL31)f2Ydp 4r.Gm8z9YMa|OPaQ"9ʏ90x gy->=VH$) ȘM@P'x-W udXl6cWU?*Y+߿G1U]FOS 4 n >}K���V*o߾ hTl0ufl(64h6=2UVV"79 e@rI+ ��#ߏ@r|LUqb2MӜn-Nל`g2bn^5 Ei$TUU!g q@l +��|뀰U*--- GCT:k^vkXY+3L63[fJ E@PdӦeHA.))ArI+N+j V�� c`gggcc+]9 8(\ѱ7u 1׮YcCWi BPO e@r\ l5+��| H$a &8*l?h^[fkenNCWKИEccui(2@ [+k,TcRfWfLH[Y: l 8 =P(8,C"Ä̒2 j V��҅l>P\]] +\:<x2h411^%B舸)u/KCkkoG16^ c4Ojj$S w [5ֵ 4#]cKE"iklC*"mLI3-3IGT]/B;#|lN-`�0ƒW޷EFIj[WYV)5b1Cr'B2 ȉYa�/]XAcX,|>rBXѦOBxp$17d~?&xAKUNV^{t]6+C:riTud1͎du4k ==| =-sc3ɜH:Z:hOV>E20\XRQ^~b"_H2ѣZSd4ӗ@C_[l"ud*ubO20r։WV FTizi&f07 tu54ttHdSKBTcC-MɅ4 tt̥ؓ:bJXXQ?-6E +IIIyyye@r\9 +���KPى=42VWW/33V0w|t`oN000OfTy;:БzL_SXOvtWEhkbB>ЌP" t4(V&frn{rqz]#;͖djޞU62*=7Z&DN200/N)k~?QfgJ8ލFaΆFCyY]-5epN|ȚDQ`dJX'tcDNm`ezBaqG%yP'J\Sg{?\W~c#`n�`!1C Y0%QN!ʋ@ⴲʊO +_.//ǶYG@X�KVX]]]TT +vT?^?/;N*000Ob6$#S=>joM@}DV0ԔiGP)zof<|*uo1043ԱA?s% +P d*aq'5uugK Ж++QF\Y')*|~޽6[[z#LefZeG9*E)=P_\TLXy?-=oM`m;Z2H 9uҍW9l 000Eb2C YdrZ"_> |dyU0a%!!!33utt��+aUUUiiii۲&>I+W''1s:&8k3d,䒁i4VS4 k}/]GDO 9ga =56rXiX&xd`) W_XtIňdKk`]3ig9(44Ԑ-շXo.˜mފ~7M[ɝ56Vס&JndDHf-~}V*Qj,F^XMu$jɜ#;8ۚjiHnaUi(gGV +%%% ؇@X��JAALXڿoMkFa~:> &gз&@z+3V$LX%zu4&F{F:݅ osu4tULdŠ|HpCz3+kMY*eXв ([NkK} v,~3}&i}ɦ$:Qllff+탰Prd^OKKbGdkx3\/~3Kz�[<fKbL&[7�V:D9-cT^ UH V^| + ���L#xY|x22RT````H:4%νddaA]u~bdiwÌxl MGXOX1Ұv̴4 i2aE�򒁎2#}3=9@gdKWGOW\0"ii/-  y/RK#E*(DJfjZ_i/{G7Z!/hY0mJ L /V͇$Š.U&I3%S%VD"000EbvD"ހE/-+ۼV9-���uʂ aDϿׯ*TF7ƌKT�qSEvVnto:SƣS{viFڦҽHz>|2$V}}C]AI>MoDFn1!]]& eksrS_ w~(+�CW W9+/S'/^[ZI_׌5S:F}޹ SikaG#-HjJ fYҕAcƺjҦ+ŠjɌv,KgNP']DGSv�fGaښXXA&7}>FZ,rBZJzzzqqq}}}[[+���D D__/tu}Z#}gI$S=K +taabeZ(iΊڕ(Vfщywc .G1dT6;sjߏv5 &V/~R2GJXy'udtDP`fin%)YccC} ,sK9e{OiF1nV妷(~W^Mzzt5t $Sx:W0JUOXQ-[dUĒ$LHֳ0006IaeEEG5,9v +nz;S$c9VpoJep|Þd/]ЏWoX~7Ch$҅nв{B"Q}NK=Vۿ?[D[$F736g%Ǟw0662̍ 4iiZWL -TOP1s2OκuzZ: KPx2Fzc3 +ٱz,CmksI3457<e"-6Lͪ0גdc,he$ACs FPi>@5Җz)+ ֖V3%zm!t44 tHVs0004. Kff(2JiJ/GXe_RZۛ+Rysɭ&!JaI :[^ߋW2y p# ,6azonI[um& ;E _,IaHl_PZ'u"-:45g\xK&T+0000nT*6yȈjnN`(6m%i_]2?y:-òzmvauɡ]4w4vЄQqfo=dwc _PQ{&|ɕN:$:fJEl,_EemIk B :T!=OePD7x5og;βw;|%a +rUd5&=q77mvw|ј}0؏ژVťv,ww "?-ϖ}iq:1Y"XBm-P(V}RD"nd䚶Y{`mm*hE͂n0Ԟv`G&:|!u5GtwC~̃fBj m=5"akA7 ѳ\MaEQɡ;Ǜ`Űu(kv6qqVHT,j%{IzyOVԜr^;:h(JpO?aE$ܡ:oU ='a7qP/=LESY{*CKz.;,6 i E[<iaEКemmt+o qf 8ʭE8%}W{! ]{H"'־ Ƅ8^?N"e NǢp &ޙ1Kke*+d:Ft/@qAg"K9LN,2'fT=JfO%H', lU]Gs?=V۬w{2mjّ0)Őt@49!0.\{ A&5u+ꬽKVU zU3 |$u}JKQ*k +-U$IU!$26pBEz9r{4_Dw%ꮈ d]T.F]J0,7:V};^QO/yrPyЌb)WbCy6QIokvcԋE64:Zfo&4br@`.ʆ  _+,jPLX)GklnQ+|RX2cEi f"x+dz@2_ pv\7GaEВF!3 k2e|.Šse;$)"-3VXQV5DcNZXA��������/EX)t /n [@ Yj(GWxK t9CU p=+,w>":_*ك&eqx;6.+ΨcE4f>#aFW(m2aLˠ.yaEU PP_.76~I;M(4tc{I%VUbNT<3LU � �������� rۇt7}U޹ًEP,߭aH7 W`t~'xOk/??f0L{gûJOJ>dm}Hf>#aEЖG%ި83ӥ@qgÝ=l ݈ܶ%?cerrlm*|0y`]7"BaEunug1,*!|@���������@XYJ$nc9]Xw!ɷk[AV@X��������KS~B)C2e.w=^R= AV@X��������Nmb f89--aX ;&V@X�����������V�������Ԑ/&Ja��`!G�U,g<\ ����JYY@qPLV���BXA6yU)XÁό.)����,Jt8 ���,<o~<_�Wa���XʻwVPO T-i+)MNNIݻ ,NafKq1+����� +``` 23rssAX@Xaev _o BŠ@ HMME +�+=3ܛ[xv4/J^^+n߹P!?lAeo@X�V�h/JXDIII))) dV�VT4QnLpMwʑȃ^76N= 1PuGkoy ��+�4ߗ#twwN +KFX9*�e+^2L;m09X),*x~WWו+*˅®^?!xzIw`u~:V���V]N0000VS :�a�aEWϙӹkUa._0&ʵ'OXK~a֖SC\WRVikՂ $[Z֎ETeGgw9>YY5ڞ Qz˿KmK=̦l"!_~x I<;(=VbO𧮉׶9=4uŸ3LVnw+I8F0:7qog#B$'?RP(:`):V; 'Vƒ|t*Jw;x.mFb;vvqQOQQ{FXe슊'I@X@XB=]ދt'Oollx,v@ ܷ?\,G6?'ru+nlUZl5_wO;Šh?W͒/IjokO~oW ~ ,Eae]k76k4]B?wG ,(?~qOWeޛ/oWl홗i`ŷw;{zjRMae~G'ba~@XQ)W1d-><nwDYOċez.B%YǏ?}1σM)TW#'m|GenTy*ݛ}lt2juv8>98^]vsh? dQH5xK6\CgŠ$iS.?ol{uee+l{DO$tiyV$Pxl :@?7[a2DV+׷GĦ"`JQQᱨ",O,~I#gxi5D3v\vζ5W7@uI7[zDkWh,Ztו+~q@'*',6^y{o2䍽˖ KOoU?/t~oѷ8>%x( 9aT<A?_W㏫jLf._t c8LJ6(tzu&vM=CVx W1;*,7O>AT}x1ܑ*xO˗k[97p^wO(#W;%G;Zj-v!kSU[{~yŊZw*|U=`?T.MX$W_}V0\CмN+rV.ŘB0Ty .V˗als=aU,.$~7B2{+.3e9fXH%xXJ~^yKuk/L?xFfjfENV=2rXXɾsFf<u-=9<7;UܭBNlqNslm}>)kal+7%v?68Fwop$\Ggggleae`'&Ɠ]5O]/ⴖ$̼pŞnG'gHpi+ Wڣ39oKGPT |AX@X$ͷm>a+xyrn^#mE=uk "҂$JfNК fe:~`ۉK߃_X6uO 2PLcJwko?z=v5'4e =}\S[3w; h韂򔯟.mJv3ZǏo {[KW&YcOXc~ #Y~W`?yO>1>;RVVj t? i5z^yޖp5k7S{+^/nmk߀Ϡ_uJr,O髗8ouE@MaEe=n)L)7D+IbBX!*U qk93&F=cF]#$+`{;5{d 2 )6VRLm{NO% dQCdw#5ޑNNg8:>GTf'ݾіIgYQ,@U~'Tbgws9tiysZar{9ҨtƫwwVs|P1N?p*AIU-ʴ6{I$wC>Cc{;ؔǫ +MA(8%;o (_lPOT-qV-7ՍKz:2}O>Z+e DZ^uC * vuk8rԒ[}.+$̏yY,Ye/MtOsiK5JtƼY/- (YL`3D`1[="hok3"'17"8$UF{i5S2 ˖+9oruyykWui 8J_.<=Ѳ7~e bt\pln<맧7v+>cjUȹז-[49A5˷+euۂ yǿ_i J"Vz۟-;R}-3*>c|*aFL ocDm<`X%]kVT~[}Oujo,zܣ;˗}F[1f!9:TXCB/LhRynUnC 8$O%j8rTVz)~<LUpd{RA 8sa%3Rq^~yڋP[X̣f9IŚҔ k$򌤗Ӱ8\YeU_dAҥg_fjQύD%zF,\.?Ćji~~iRl�,Gx7M>\=?o utg옓WM<c^y}#q%NXMB?H!_}}_A$bl -+–mqHnojIdzSxr^Q Cn櫹JPBڝ[ Tx\:V1T;=si"lM SO Esc�zD zξ=gnq,?E</&+%pDXaQ )nKa}<ӫ(+V9̲0?444K Gs{rޞY 5XjUqUrJ/&{ \Iq }'Ҟlw?]*m|Eu7K6 TAt,a%slLgʎ;RVTuRW-@a+QS"5A5gUH%=N}ly@L|_*aŠ\f~1f:DC_E&@XvT=PLVd(r}muKm-鴗=.xJ 4&Œ^6]<M9<Ү)67=)Rz՚D͙L[eU<uWZ;LLu %V.'z~Dx捍JpT8ݰ Iĕ ziy)!&*i,~s"Y"xִ,߾ i*v\t+6^['>Wz-n'OPXabah͇Sl^i򟚧Al Knu,۱gR\&W_Z~)Pa܍[|T=ϋ` �̏"$Zt|}vmvAoB]X~jyE鞐m- M~36ϛ"{ ϋɮZ[;Wz+AUk;ǟC]_]X鶛 sexe'߯6˶ S喊''W1vuٲe3V Xae +ض;˾Y$_}rI1ܑŠZҙV?}HJZX{p`ǨSxc6R݄TAsqt~h"_j!ʲoVɶjxaƊBTXpdʓ')O[ի(&+tb'fm.tNȤo|CwrTzsd&R*BqQ zܞ mqePho?I &Qed0X9M0c%M.v2tև - J^CQ5c򌕤(OLX! AZ=VJRhĕ0ۥ@y Ago_n\lW'x`sbD"iXa4fN"n'V%OiK!jĶU2RuwdR%<{\K+HV04mQa�PGX)J6lok"wm-ZP +55ߩ8}D“'!G_..6,魭`wa{[~n}0Pg}<gSx{ waO=a*RU W]uI6i{(Q!kbSEo\JM8낗i<\,u0Cc-v62,d,[SrU]$XE)+x}c(_ w-=Cob,_c' k,eJU=kf'<޼V$5vK958z,p]Q~K ^aӲoVfJ%/?itRKX!ZHc!:2wXPaw 'J{[]XQ+RdZa]8ߛ붵KG$?%4fFK$1*MjUnT~"ByhbM$B)dz7~+ˡ[ S8WscTM}RX!+we3Vpӆ!T\Xyݑ=A dŞ q ؂ +=cWc x=bQ?n%˶7;'wUrc{MWnpa<cYVj vǤP?;LulQ.ALKWZ 70xŠ¥?,j{_%E8mڢW�`Za% &Moݼy*BMoYͣ*5U/+)T= rq?ˊ( =45 aYds?RׂS=@ƒZBQX'5畫Vq^+ﮈ`QijoVȹ9wW_}uê<7]eUVZQ޼v9ŏc&U;*+PX9kFmo65)?x}c(_ wUWƚ~Xenb6Gws[uz͙VA%ew6<Q1VUEd1oFg#͵-[$Wޗz 2:#P$51˾YP)7ĉ_8Zha QY`V>UdRIW:%6DǽJCBs)QZwCJ-ke<e#u}e,֣R"?Jl{.,ϰٙyOnD*ͽ2ȹ[99Uy9 -KF`=Ssh;/~#)3SWnLͬ+Lzy> + 6m[Ӟoc/i.KbafUʼܜ,h gju6Be?<` -v7>lO%(4&會X &}V{Xϼl U_zf]6Ni5nA!Drٓ{y>+ 0(xב{qg(\M7Ql;N."(*R:),Xa"o+rh (KۊWXJzwJױO5j%J針Rw/~0ԩbTX$Z|lL僔�,e<K uq:9+sctйsѝpcꌀG*9Q̾ ΠL۠(4 NL:`8{n92;>2d:Ar]w↑BY4 Lx:~L=́o]Vp/Wtoߩ\쇗w{q4Wr윶:jJU7w<4ʝ*sqHW[Ta gh@x0=V,;gON?_aFZ@*Be?<`v)Ђ!w:.&TSl +)D)wxp yV9/e٩wy<^kk@ PWf$?'L"ykPmZic R:wa�;gD[nlIdƍ օ2VfiY@XL kJk/\Xmll,,H>(x͹yь3TWSMK<s3Vnݹ =!L,:��a[$ehx/Wu;/g+`_<,nqiRl K0VaYL{ϘҶ"keBobscƭkii֍aнָ9'��a+`_e߉pa!?{V].+K2�#�WY0a����@Xax � +����� +```  � ���� +```` ,}a� ����KV:ǀo%<Ǿ ���.t��,qBagggkk+ǫ,((HMMVXill||Pł|fpA,U@X���@Xa��`ބ��/p:��� ��� ���+����+ ������ ������� ���+����� ���+��� �����+ ��� +���sV\gC#3 {|D9@:5xpt#-}a6m)k)Й[5=K t\qBH(Fiyt<+YzȃDb? Qǹ|UQ"S; g̥H B1~T 8rĉLiݾi߉Jg3h }/ p($k9̍:ڷǞ64 ̞Φ!9t/@cV&=ܵśER'Sg[gE'ߍb~pf3B˚4vLKWܖ"GOcs^ ���B@Ǜ%*q,w)~ttt@k]C~GxV>RE~R$cxB<9dwec?#=7%~5`UQGix͵�2ͱgt|v\i/mjNȤn79K#[ގo;ms(||t/{:ot|ԍv܁p+ɺ},T^X?VfOUsfKn5 QT \L2]^Lɛ"v>[a%#arsg/]/BxM2tMJ,ua��A6vbRVEnp2tlj3V{+a26Ng I^C4 r$(|RLX,K\vwbkrxbl^y75~ك#8 Әξ!/@XYa%V;d2mnG;Q:$OӘGʰ\fpr^kļ4vqދI1;6or~NЩCOÂ}=[Qv_pBeǖoN"_$*<8|*"=m^KP΢!8n8[{,\Xڲ/Hoz&Nƽ\9 7㮼24 ̞Ljh\qBw}^?&u"t] Š {~SEi Vvc0,{Wd0vH2W'ɹ<nt+s-%aEXԐi+\; aۭBq؋K\X cz A QQo?rW+|C5+?ϟleI~^׵+X_;G/?5VCk_; _ǚ֮UߚuWڟ}7^f"/��E⦅\ZJe\rK:g"V917{50:>,G}OOQ`ߵ:ufy?a_`{iϻѾ^N;_sSmh9ICcC\6+ S螵AOUQ",6^{EUʃIzvL"%KgQxC<R?{t1R(_Kg4(2o E8L'z'gy/l)Д{zt~ںoiV1ar`RX)ٍ~ߍ.dk].~]c9]PƇ#] @$rq.vn9}1yPe ;c%"h$06IoxBQWsAwm12g*UeWkG E tB0$|e? јSǞt\P^ݎ57a77;ZrŠH((IC%3^5uN[r/p`F=n:\Y^iy1{~d.;,w_��5W,NaʁT.*w>U2DftxIן0f*)a@p<&Ht~Dfbsa޺=d9nVz#L3ّ+T U~uIΆaіFnSۑ͠627>eqw$>BJ^+ ;;%2% G wBar\[6HU-`MmeE] J@>l{hD8t{k|4̎{xdlwMmMi՚˃`Cɒ ae|poD&8K"38jU](v}ƎIDК# yGFNm@bRA3] h́oĎSYO2o울 <a%ˍ+mV;νRe/:O0qòT*:/Vlr^ܔ +���KBXy 8lM +uwB68::pY%j +mL9%G?$Q}aEʐ-4Dsf7*gJ q*opς� :~hMR*#,6Rex4ܖ+Yo䀛4⧬2n0Yދ3r{)+%:d|Q"qc\̗"_$[VYO._r kr2+{f\.@ (֞МUn3ܛm6Tae #\X>KXiz~1ᰳc3V&H$*b><G|j9 #<up@  |0 )t鵎RY[$<a%ˍR "+Ć~.k}I06uǨD[cyOlfRaO'& @X��@#E +^isS_XyA"3{>X99팕HPOb7{\qڑFu S2gCT+-7җ` Ll Dmo/>`ؙI x);nsB޴͞V++yceHLeJ/ya!/R0-7(J9^; +xSifr/=<d~@婮$ hc#*:8GDК!U=&hrOْY챲9:gT1b۬jϬ V-i23KB,?{Tsﻻumk#ꮫR:HH&+bCD[BH$#$Tog;ܹÝOy.QZx+m}1V^hF%Wap{+0-aU]D-`q`z#пvwvvV>;Qs6ƵV$Yl3"GV(Cgv5DqeCzc۵Zw4֤<KY)L;۪2N Ht b+{{|)o%P�g�+M/^Ttq' ' hFH& ݎ8$%5u}AJSlClE[?Zf'5ե]%.X}e\b, >Uyo<Z4dBlneV ՜W44|ա-ۅ3ku5 |+C4l> �+cvXa`&gTr8!pf8|\u[JFr diU" j.-O=Xa tZSF@M@8Ǥ6+}*㊱"45J2(뱢y}1U3hxġcſN}+De44X@T^^`*9:xszVGl}nFV d1ũP?+] kۦ1i<iGQBh!EV8p$e|*qmMv6XX>�VZkq8?M-wW(s+1Gm4BJy?nG?w`Ʉh[ǾD9 oMha}Wϣ G\޵F(F+p_|ɕB`Hu>J"Mkw <9ƘABhYx]:sEٚ$oxy#+ `jbV8@Nڦm<"Xn>7Y86޷)M\+0 Bv;S�e$ %/\Iv^+ $l1FUs}-7 ZL.  `E]]]_6)},$5@4?��}u`7!q` `kSczI{m# cS �V<Xlk#֫ :Y@Pjv&` �V�XS �V�X` �V�X` �V�Xr`E@@@J �+��}nnbnfjf'5վn׾jaqSS-ܜfh^7>6ּjyLnyTf%54CȂMjy\l%&�+h:[rrK]�+@@@ׯLБ">H HJf ``@@@ߺD~c+uiwUZWySښ;wnTvs]Mۛ eJ<S{y/Ҟ͹Ƚ-³ )G+]V;ug6/ P \rqкk�X�V222F&H�V@ $@` VZ9iOrͩǼ!Ÿ.Ɋ%YsC:Z-U~U:#\>“Y~gՓk#=o(_=nu7rZwmӫ_/N\4+pq܀!rR2rr偲v9$[(S )Ґ �+ H  7VR9Oݟ͎[sK$̛W/ ^|=hյ5Nm;V c2+PZd1rCꊮV._,YV¼gȖʔH˗˕˕@-- R �+ H  зVRO?ÎW{GyKu[ug|Fr,zzX?My<is~]$}A>#,3%/NIಌ3sBfU -+ -;oQiŧʼOȗ> �V@ $@` o qu2oKVHUJ]{e1g\Է=mYS/<C Sʬi^Akhia9[V+o)\\":X!-H|~\\E'/(8-[#[)W!W%>ghªL<(FGKhh!dӹGQ,TɆfW_�}!1JAe`LJ!?w9 : DH?y\6g >YM%*3]uÚA0+ 0x8L' 1}3s#Gm[ �V@ $@ �V�Xyڻeo[yծ+KvE*44ᅰv.e ,0s뭭/^8qI'NYNr<?KN;*/K Y6Tl 32e2Uҕ~'*e+<enoiTdϢXby\i%klsǾP 0ndnmme@@;7KG/|>Js@N] L4-X.巪&YReaC/cMw:u>19y}_<t.s]kV9UIWL:xޒQ;�V@ $@` OV1Vpͫ+yC~R!9@F (#.U=~p3L1>y̖X0g3N<{R˧͚tB]U.~{vAY3rEe}e*O ,llNȎ<VJ`M~]rXçQT1=v^0NbkC!hc[ 8#\S*A/}5^d} HơX5qX[ҎMToxT8Zjx$`s) :r�RbeD8] s .oa"rTz i$B�Ĝu$k:[z)/~qGyA\Tn pA*O󆣨,MO0XL)S'Lv�qyNb)?g) -zjʒE٩m|Cg:뫉zm[c6hh|z:& 2%w6 }+1m:=e]*9j(=uw0k7ZocȧLb[UjD\Jc{WWGcƣpz|ӴⶎfgdR\L>T+]og[C81fgoe敶thxGV'AaTޱUyK fa0DUgy7>kGxS$KyleEX=WD=a}ÑXT#G:Wk F3 x�+qOr+#jS џfmeqp^½ J޳AzŔ_'Oy„I3*1yʬ ~XzɳgI,2]bҴ$,xe NVVɖUV:%X[btUMн%qو FM\p'z k .6Z57'԰Y5֞= mN.sNw4Qxpj!oDRsq=DL,q˹s+6+b>A pǛxO<cu 9.TOo;}nC ; x6]M}68-P}S5"w|q!\8R~Ī~&V y~Tv%�YI}\_SEҽ x u 9aN"c:|u3}nCG?5$ �=TmEw_4vԴ=1%w?yh25Z.962 X?:.me$$N|Es}7hh$bZay]NC5"🭕 Bᵵof5W{u `c w̓7/sauw'ufg<q'b4q'Y^tC#J)&7w~`PTQOOOgkfpk+|k{ڋ^_&ux:�wVRY[ݑn?TMvZl'ј;n\jU_Y?+͗\!7g)&L~0aʴˮ2yƴ3.ᇉa|0ץ ҃fɗ˗-9-[ _/[uZ+cإ@мBpm}"I4 as mZ 7տW^^^{Q=p-L~% ց@S'˚\um$y$gKȷ:#*pŸJntKdU1_t|r,<�;QT"L WӹUd?zTQ3|htH)|{~&8uZI2n}}ąUބ"&_8s�R�2fS9` ۺsΊʾmL>&.IqdP59kPSe73q̱wZ襍ȉGy[wWA^/&1) Tz+3Zp vw[.�1+Xܗx=<JH41ץM;L2O>#Wk;::[әIHѷVM:WP^UD 7 Ԭܒ2]L}Sj-M=s4N@@]2z%}]<H:*]~HqicgKB- SZwzX$| j7;C& oڜYw <`U$>)gGVg31ΰGLǃiho sU'2zV^4Ɠ"^]&\531Q)=V/yiX,@*4.ft4 o}�dt6d{RbswɅWc'ֳ u0-$rCY>]>ch{ >; yJPlU5vAƢ ޢwDu !p8U+XX 0eq;BdYd ce?Ɗ[@女Fo;w]KxF>߆x;׉տ]XЊ?"3?Nӄ&2e/Ϛ!=uʬ&LW ?Is%eAAriO/?O4@2@OJyvcLOOf}ÔG[NbFT9QPl7\ ;L@a)\]J_/ĕ-ZX hЮWF_Гk&FVV S/+<НSֹ}pj \#53"Eթ/IYɾnʋܷ(חA԰zg9c6U(cX)M#)|:#PI5x @ �V܌WZa2_ԹGU1C&s;*(X_M4L6zh0KA6޺y$+wj)k UjU4wPn}53�#K"/ &R@qCusYC͟qж}o+ϥE oǥ/SqRܭU[bP)..Iy(껋yT$n<XA:dj{4: oxTMV`EwŘŖlI#аyҐ.t�ئ@xg0D|9;.a$[_-ig^9;I�|*Vҹk:z\Cc5lh>ǍdU;aǍ\/Ǖ7&w?�G \_l޹! zy$|?xNƵv6yiR j[u֟3$-t2;{{+ߜ#I =+#l#ˇƱC#UߴGi B+Dk.I:؞jxgA2<_0ºꟊi֡3X}Urhq:BDYd+>R8 sjg\]YQq _᯽ilAM7LAo?7Cqi埴딤;Sn_d'N3{3'<??L0irSf̟2}/ߵuc-O \4wqa@�Y,_O6H=V*~HT~f*/8CmS!=JLPlۯsO5YoqJEUcA9sIฑ=G >>@\Q 7CKȵi4ݏ <I X]"”<vTI/-& t8qiյn5T2|bW!Qy`X(�R�2fm5/G?Q_Qi+&L0I틪Ani{ub#q=B)=]uG-htַuPz{;$t: So:9oiM `w V%\_[:t2>vT}B@Vut[:OKTUM}KvhQC o {րnշ6"c@wP=- ΩJO[4nn`6$E`6ophL΍Ӈ"\e~ `Ex4HZ"P Htjcg:EU?U|Ҥ}Y%A4C't]Դ9 '_ HDmz^WA㺎msy VXzv$�\S5#ISt`(D,s^ 5d1uݽ.mN}10DwAid$Ӏ:/oFfC3U p$ID` ¾GB.ؚjZN8  [ '\ݭِyXep<r$#�C_m(f@d&З�+ I<]z_Lm}+6nw-w/ۅ ��q]@?-ueϘ|T3l^㗟ϓJ2CBVnY3%JJaZ&xI饙(U1O2djdF걒vD8</7j Ŋ;Ӯ]0!{gtC+kC:j('䍹(*#tkCqc.,e@ޒ$7)CÃ>)10wp;z!b&w1լkc/Z%υ29awYx;L[TַB 8DË['o˫kxbzeWXU^:Hd>a [8&S�)�X˃v+f|1 y1?(B0XXx8~w{BBgm/斵wwg3JqyN]?%e SŸ#rԐSՑD|KD%ɹDff8tJSi Gÿ9>ϣhzGdVqPWoha%uw6Q&ow5[5N(�".nbwā([*![g"XaUY_ lG…DZ/2K::X%!Pg�H f[5o:Yy3t\-�Xjg1cD ó7/BOq6y[xeg*:F#X#>ݕF6?0B c K#, pHˣ|.h>[ laA PkbRb׌A\c+CQPN;6;=Qtn+NsMb!5WTY/ >Xd]Z`0x|(k*TGoWZXw�q@)PM >x(Fw߻܍<'o7fû|^Ϲ_k}e9u3J9uĉ?O藙rRdN!5yeiصO~2=hIΙA rr~� [FVzȵ73~L_25DF!:ho1kbGCT"}sG)<#@eFn1ӎ AD1HN;]cp@ծp pD©0 #h }-*RcCMP(3!=褆E+T 9|z˝P8֪$M8Zo|.k;o!y>s2 @ �VFӷ2ۘ, v&Gۺs =Vt+&}+cռ.wdbI >ӑ2J=&uۈ( >x퀾4a__Bwu(xg׼Kjp14?uzPUN'\gdy}k 3=,X {:dŻIřMU]OY V82/:},؞Znqiz:Izv{z,]OP2Zz{Xo%y�pKOB`Տӎ1/j+/ZR" H0SO[z_Dy݅Q9N+wapl{/ _a/Q�3DԒvC8sh۞ -k`'׎.bsϸyB6ٵx߆,`%1~v}C{ gp6ܷv|_}qk<^wN.mdze6Ζ\Pr,?O:li93WIgYvkn{y*=dIN�jj\f؎ֆ&tHM;VmSYWx68UZa\0Uc& oYѽn9n~{͛#$i||ifL!h-5CnN{q: I"<ns8Or8lH O>LԴ2f"D/lq@6䃊{g x ~^4f,hVw)~)t*߇ŷoK!{/�%DF]ꍞv&boтKnȹ !lz+t6Nlp^xsY*xYĵ_eq`e1Rq-?D IUaهock{H]B=X}N3دRɏ>FU#2{:ZaSViFP*&/[k_yDz@U6ulxʫ;jNsG{sޫXy>3Hx]$>5`IOH2)1V ⨡c8K^ʩN{ \мw!Ǘ6[u+3mzOUt}ߎ X{BwP++jJwADBHL]z~k[5)R�V ̴ͮWE=RGFt-*+f@t�`%d[jHTޑ| xa}?`}{AYmkrq{1 t_B",TӔ&N1[fu+ni´ ?:[.(>&3KJTs߸\ -l Mȁ}Ɏ{]|Xxh&/XE,)㊕c#׸|@(�XXQ ljǻ"yj~S[4l7VyxY0<B~V=ɶpR]NU)jmkF~FaJ` =*N3Hrچ _՜W|ZPSa ݽ�C|kk,/ BN<מTeffyx)SB6 �oQšΎcS+T=޼5MVl07';3tȥ@+!ƐOD`R|єpY˷|^.ώp|o{ͯl`YRE➧5kg$^2*rH`壩+}ף0@O'}0m47[Gb=VAc;uw8/hMv6XX>C05c8_t(`I 8{�+ j(F!qui<iGQB-Ax<Xa TY]FFr-++f@\�`ΊVG}Sdmɚq%6۰re&+9E)K6tnRr\a[Ȃ]=+({5$͟4'O. ϥۦ2w¤i?O9S%YɺkVe=P _ W 5lWsV8h#_ =ꙗ-[?ef~oH3))**�u*J'L�$>V2tIk��+ߡ,qo˻vq k+uim%oIݚϹ%3D=껲OέRO_nµW&ze&N?s̼+i)>YinFܶy~4o2E9E?M>ugOe<eJ}֥YSxN$xAYvW+@@@�|sy;h@;4˷YM@`hHpRNv�: ζsnH4\h>|yXkS#Xott˶NX<y~㤙?Nu4)YKRJK'OuLɅr'L9u)sgI/Z,##>] g勃)ji`/Z[+B@Sx�ͬkjnnioMDB6  cIM)JZswGMk$n̯9.F}]|ŵE.32IJ_U%ꗹ 0 S2o/&2gs;qsM2KRbͿ̜?qڌKg_^q,o~b͓U9KBs.LҐ54XeX"CR#Yb]([{RGeW[-2w] 3biBVԄ"V c0kmTD/$Ԟd稬4VGkGN H H d@@@�JK]Z17 %o1<V #R,jIn{߸s?M<SvڲS/?ϔ:S S~Of8a<aI˯R^&L)'|\7_Bi٪H +R-> 3dAz2Rcgyo 6"] ́9oS?MR`Ry`aW"09 d12ZS Or_̩ʩm5kX`<H  �+@@@@l)ގ2dk$I_NDYWELV^i [<e[Γ\:WjY d'\4&͚8eք&[4uԲEN6Kbāe+,!Pvr}lZ‚ Wvԏb)P9C-#5(FF½xYVZ:zږ Zzzz2D Ԛz(Q>V69FQ;+*k3CC&�+lV Z;HroסSlߔ[kQTsZ_oWGk]Bɪz&8˩.8us@ݼ&zVghk}@y{_Wil[bN5 H H ]zW\b_DKGKEK_,_" v!vJťoG6+>{ٮKvR-rlk6I.R@i:_v%`+6$)p_֢|4Baۇ] $<&/fVgT$`p93皣�RN.ɪ|ГJ<R^ 8`l`屷ףrh~耨~ Xꞩemフ4'j XҤRh^kW !Gu -Uha vEOaZ$ VT- Vbr&t#lj+gUT#9԰y>aVghk^AnҚG^Fu-h?Yjl]@ $@`XIgDϯ.ɉDJ#%9Q %W+صc-lw\@O@Y]n۔vyۆ?V:Waj2d,P\ϊ 0FV+޸_]y]rEg,Ƚ23؊lt@~##\`Yv_]E?4QR {0"%90RM1=χÂ8ZS ަƇ͍pm$[ ϋfmnn)=UUCF<-xa\[ܔffԆj^>cϤ5d$`5ZU߼Of4a3/7iaq?!N5  +y[ͮ*))IIIILLX`_`EIj#$FJ1#e"W 7?$G$#kXe]ҋvTk亝$YH-O{^rMw(6va> E;m(-,VȉX.: ?뛇 ^[[] ?WS5329hRP54XɈ <Q| 7 fJU^ ^ӟ_HyCËi" 4w*rNԹU]$ELsu2a"8YsKNF@DXIR;to$/XqYѝj8k�X` XidTdGK"kHEHEUdί4/Fu+^c4dQCMؽd#j%n%WĬ:K6QzNZvԽ MM&p&aGy ,Ƚ[1V8mC"j*T<B_wJq-BthϪz[fB 8` + E[$lB2ezQqw<VFe-US^3*YC9?ߍZ(d`faȥGI|"\}njqU3}^4:o/Z7iME<[] Ld]Dvu �V�XJ]Zٍ]p)V 4teh4|?RwsPs9dM];:\Oy-r͕>KJ}_.xH]XPWcq{T1k l[x&%pq^Bq|߆X.pA 8uI}3cNc<Уof@99q獴4utttM2 {f: =$2Y4fxRWaNz 9 o+}K{'gG Ŵ?VNǎZVe! YK",hZt՝V DxЍ,;CM::t-q%bK& a(pr᧣NR7;^+.;h �+@@@@@@��}`.֮j.XbEIA2eE(huO=};Km17s?aϖ֯XvyEy ku,IԢ5{0t gh:^$kp?.֫"Os6^wM\8BqBXwM!c �+@@@@@�� [.K2#HU\."W)wY%{F{蕻Y_S\WCw-YbE3%6̑l葆mαg?48~+ {ޖCVXqS~p+}]\$dAA,�V�X` opҊoV.].S!WpY \0B>תF>kE<oε)')bƕJ,mi*4tccEG3iv+1mN-K O Xfm7匳.,ύR<V�X` orRcvUK/H_yLI{ڱYioh{.R^pe6/߾rَwU UcZYt<.Uq*p,;ҝ^2p`|™/I}5ߥ%7.K,í}\1%hI%% v�eJ60x5;p7.A`kZ<R$ p 5Ge`בn`G 4@HXo:,�n;CTuw}w+r'8K7 0aEF"xĹ}k:堆EDۓ=wp2<m@u ȆV 13$XT@="|T ]~Q(+ !sU<#B+؜%ߥBTT!| eڨs+?[CU)!'᪝.DbT-o(R]>EO�`Vڸ+.VD. S[sBw}cM˷[^i]K[sגmۗlGPV"סnZx93M5m*eR}bsk1o=Ú6ClVąȗH0n ;Ԡ%AK., / V*ӳj;;X%Ȫz׾vTCs*�V/͝Ju`Hfg<q'b4q'Y^tC@sP9UZE 0ZP^493 Z^M]-վөC#a7v6yRgɱf8;EYƺ'ރu`eʋqԡ`幏.N5Ūh{&s:mx!wղoaK3Xk>$Q|\e VMU+>h8:Eɰ_T+z*]VNzrr/pd?8e|+Z]}mWUY}%;/M_A.wxScF.UvL5ZꎥT5=6"9B,JtylԀo]\Pzm�+@@@_s?t`%ŢdtY>]>kŌFa V:`x9z;3kC ē544<3c,C&.S{e&3c(StTzؐTp8[`6;ʊ4"tKbDTH>:XDuFpIJO{ _؊~" kZ]VyJEX›u}p@G=Cޭ)LU~)wlJ&ޏ; &j`Jnl/mC;貞o7@CQwgPuH駰&C"ܸxzH 92#<V+`MC#ܒK;ip59-w:{a'_f8`i:Ah22-84Z2jACmu1]Kߛl^c̅æid՘$7+C<}wx3? 0YPnjFjƱ(Fa(:Wy`R79װhl!#]-ʍR`bm2@MEqu}q&Y?.ahW/�VVD| pXwϺjq FEMB@ԥ\NF6buq:H*pVsN2OmE58mE"" v}oWvEդÕ$JS%ٮLh*)B庡Q#qgET\aK3.Ȗ˽ X dqŹ%ѻFVꏨԛ:dE2*@g]3c\& },ba} `:(D£V~ =k*;5>o68E/gۡl#ԙcdiHBvv=d;w*(0K #j‘x鮹ޞ'_ޞXoQVVahv\<V>Xɹ6=4VɆ6sH&  oOG{).i/-]r(AyCs uL1D߭=.$ŧBg*a8қ~ 1A@ؤQ,_.7 /[<wi]J烕~nu|j"h!;4Mm+b %O*X}oJ6+e$W^3*ᢐh2~I XXAd� Yon+D 5DQZID[+a;1>7IxMY&N)פa\^i /=\K|[G0F~ 6Q'+%L6"M|*Z^%,3J|^A2Kor10|Q\} G_WpUhQC7ڇe˗+{+"RS+]!y%נfrYUQT&. NE+_#[ZT47u7TPU6HF$$ZU#euMt  ԁ0r:xgE# LTJu4Ǯq2PmQ~vyEe0 2Ud B/-]T~nqQo- c+vbᰐL7Dv1J`H1tVE۩co4a ܼR ol$$s* z:&ISt`sV›`p`|f=x;SwLc)Fg`hz_Ve;`04Vݚ Y"p9Ie٘@?t`哂q.;kSumId@X] >k;]kfQ̽߻X,s~ %n Cn^ۉ+*DR#zBh%0{A@\av{vOs/4n@o4vw_o#{]{]m?t`E= J1ŀ <G =ڽ)1~`p8G~G}jN|И"6;28ݻS !yIaĆEBÊ 3 .w){͟nD{jYMyѥtZ/} g4[a4~mKe7T2B|#!k/,KUAg<D (S\]XF\їcU]x>..v v J;Iߩ[j=ICKQ֫6lĩ7iHFH("tnF zj`KߥuleWaZctXᘦ}얮)$8I.-ώP`ސ,Ÿ(]}A܂ܐšC]~t`eV'3 %KC8lM4DZ9oTIEbtci./1汹FѺw}5oj*Ts*_+Jaek= A!hAvmFh>[Jna A B� 8r"~0JCHx<toCTv#, pHˣ|lvɹ6PIyէOs|G ּpQ}/{h�Xw\LNc\ixWC+lҨ/~=;op,w9 .#axE( =Vf&"ʀU{@md`biM"TG%eBs|S!صģ**s=K`܀pEs}RyU~fXU~g;'C�G0CRҙ}N%'EANJCWcQ@ӇhAeXFZ1Rd qĜ6"1f1}?`nsazI:$M [/io;4 6MT֪\Qݢst+]m%꟥t߁3M2\=JюSu1'9p@c4$E,΍f^dEI0/IU_<'WEm- ٣+qNiZ΂u=tSmr"2Kc9b˘ݻ6C>RTp =i GL'Q+wapl{a=VHÃpyUQCTv滚_Dj4*VD6`|}5"ғX}~ߪ~tv<͕}Q3]F\ibz~> `"Xyc7lvC8|IC F;|ۭ7\&Diys c.*[aIޟց1VF`Om- ܷA'Ocd|+/]4a )}5׃.`9mAҴel~'*pEU!͡<x5î"U#[&WHF@y8BUkƗ0 0bUlqmbE=aw)EZw63u3[7SRD*!W!+QuH46I7LGqfՏԧ+]7rkP5?Owvz}�o7;g^ͻ.!Ry٪srpi%ɒ[�V`5@1T-p4 UppoνmQsz9[p@LgԖ& 1A{T]c}Y~֓ V(Ju5}"$Yl3"^~_l +{L|ۻޮt]߷CH2lh0@`w;hIy:ʊ3ū.l0UPV}@bR 1|J4#uI$>8$%5u}qy)Jl?-XnQ'5ե]%.X}Pfqr`b[3ѢN= Cwesww+O̯OXǟ]޵uw{]QW-*BBz(vQ "Ez)B& I@t]{~Μ̜yO=g ]=]eh|[6T21z9䵃0q(M@)-;V^BIh 6@[*@*)yVZ‘l9Z  s͐mr9V<Q`!-%(cŃa,=C+P08>gL.iURaƍ/,63b0Ȅ l:巓V$_B pG.I Ts#RU5vTUJ{5Oe+E=aQޔJ"z7Vk}r"I^(+g\m0 fiZI.뵚fN6XMlX:0ݷ,Uz;`]6٭3.Vw[1}=#{ ]kP|iAm܂KsQ.l<̢mg4/2�+yYCXV8--)_~ݑľ8ڀ+0UBD'Hlƛk=hI +��ʈQ_-Ns{bǟ9ymI_##3;{p/{s,+[C�Zo@g(Ѳʄa^)MTz^  eL=UhXϣDA0\ verZ%f8A{+Cڢ 6PvGgkeqJ%X .c2=[2]2I.&/9zt_O;# & v%aQ(s`ēዘ곾"zRչ2{'}(;V^֯4̰3)4 p hoXͬ QYD~!O*) eB{sO[Z8:~WTPH(E;SC<Me,&מ%�Ov a5b˅- # iLu3V6\۰X_j):GcCV JnF9[1qhcٸ O2zG)y*+˻VqDYS*RsцeQ8r%޽%,>Eq:mehi@Yahbge^Cq1q1eC/PhƘƈYgfVf>2J`xG0]<].6W#'za ڢGk0"~Ă3 Doxu X_Α}bvNzbW)qaJw(<hq +cw�@Xy��E⌧ 5� ��!+%'ȎvX?Aq9bon/1Jq2\,\K3^e`Y ٙA5Lw9] Qݵ?Owwx+nkS7is-LKڦu[oPo["WWFjwwOXXy�W_#Z` 3G\WW-q }Ep K,cR}»���V��߀Ί:7bzzP'� ��}AI10=+*<fظKsS3]JQKKK q'N'"B=*Bx 3oo{Pp38Ӿ;%Fkb^sȯ(qCң9nGU+mE.ê.lxQkXo;eKPM̘,ۣѷb-0M P0F#8KV�� ��# ="ӣK*�a��,3lz bE[H(ʺfZw!~C]-F٩N';G,J)~p3kOcEvMm'Y 9 VME%7\g<>鬎l*1nkigX��@X �������x_'p=HGcQfŘW˳;^t79=>:Z\ܔQxO//u;6g/AFmC彣!25U?ce5/KmKɿ[~}cCa'-,7]}\s?owUܯ%a���a����@X ���|PJq8阮;0QcP}ikfD%笇@9EkI;g.dTېh?]f~n\N^Dk$X;oliKv|Y1A5&KAn_(Z ��� �����+@X��HX)= BvBwǡ!;vޥ{}kΝn:;ڲyVMm9C__wF WM06eoG#R}]=~L s_#M{ڈu\X0%bAoc@ ��� �������C k''3?X[N[[L66qt(v֛F:&*WhXG ER Hk1XoL-t&„lφ͎^S^yY5iesҪUű5 "4K4k/iĨG.Q ��օP����@oﵰ40��7aqaeSPDP-<Vt +C)B_O(IPDt W<?VH% ˻Utuv=.~QawGt)>$BB鏋eݝu@X��@X���� a���>a=M��V�����n@X��@X��� ������ ��� �a���a+����� V����+�������� V����+������������@X��9aE(hp&uuuۄ/EQ$[2ŭj]?m,s*0@9fӕ�GbXviU{SY( o&0E xd翃nn�~~ yp8NVpt:A0D_X`,&\hҔcH>{CihA@C<ߌV 6 9qDg<鯋h੮"FЯD\Ptk-#Pd:74T+Gy!dOHO34`}:|P' 7��A +~o(\mCΝڅ{P']K'oE�ٜw1AkSMaiP.&&a+oۼa_Bgȩ;9E--%YXɡΙl3-K2&{J 1va[mnDλ)AY|T(170)U h;Nai!(K�9eC+o(gD#Gb4 >jN9;+ɉ9]})sbŠeT�DOUV i6~O+���?'4]*PX=-yH 8sW/ cP -504Nv]k%QYN!H/|$h->mbDg̫t"=,-L)򯯡]pZ3 S_TYQCSޥ�oUHB g[uǍC0. PF]پ MMs4a2-#oEXI<kDa0>t6R8F=_cqdQ@G#rj&2 'A̗We8"v#[玞bEWC/m vQ,}NUt"o.@خ9Mz;78!ykTh"<[!s@s:E ! 4&K.ZdZG(;PO{1冠ttǣ\a[1k.5qq% ]ne}Ia+L�a���BaE(l+NQdZIHh> Z 0ԉPT-T]W-h8N㐷pKfdA M̀ 5a{C}e",'=VhMx y5Ѥչ?azMQWh6T2}EhB@R@)tT򶅕ȑ˩j Սh#eor~ 8<qk ]xo7 5 9ZZJYTX4,C [{ kpP %şIq iZkιS +$oikh> M?f  t%1 Fd( VHbyKY% =Ђ*Fq 6C'ڋ;U7BXQp рk# + @XDH6I0T7ZNuYy[\a_Rʺ�+��� +96F^ [VJp1nT۫c6,hiAbXNs2fIIabOC `WZ[k`0tհwoc$ @.SF9 ܇_6WF8C(x$7y?H"8$mxِC$sˮٍ9| .%‘q m6R8WR.-WkU 5¯Vj[? ̽|oxښ;_""h-4%`08 F`4 +r7< W[ED0Hx] ce RӁSl[9.?k<|O#B_ 9VFQ" A6Yͳ!OUi5^8ӑ]=Ϊ!%-����Z3V+ГsQN?7'ygצ{-^oƟc p4~}4 :~y@<Igci 4H\}Z#h$Hl eҼ4*b˷VIʊT CO9ZbS{|N6R8׵XCaeu#VeekCfG6 (^4:+Wq1# &1^A`LŢIs( Ɂk%sy$^XVF,`R;ZQ(Pd] M/Kt5!lNՙV� o+'ʨ> zX䦇Ҡi>8\P"ݠ: zD %-0.%q�_%T8AhM\)qaJK44">\4!*fd^PDG#Δ75ŗHWzȻLqoF]抷Td efC‘$U2SQde/V޶2 vS> lp4v49/R) cEY_2VPMвla~s\^Xe8$ P ]}-ai˨K.˼\2d"ȄiĊ, "V{zy;aplˈ+K#Z\E" +�c<I%�� +~}0E9ݲ*jc,a"10,EZwԗ_mfaT#xᘢ)A&V`dei/61R\Hhd3iw{1m˪ Hbc00SQde)*:(#om(P}r"S*̽⡠lί`$aebT|@ k32JZ[ShhwT�!28M?$&UvC ZѫrӵpQ7 H1-N tCfDNnA{;rFƿw h}=(x^cZX GH/,`RI~- р>w6ʳ̱" 4\US4/F~iЗ<lP~`W �XXrx!|`^Z.6IDϟ?IOB׬ qpp@.A@og=#<0|$sV��sok(}u;(C1Y6H8IX;Dxh_'Rtx7`0X}Є :~77]T4oȴJٍ"tZak1nLu3V6\۰XoC0db|c;@ysa BUJg;匞V!@/Ak ɂN8aH47L8(K;A&a0$ Ozw_*l-o-'UvCωw0 c جaelR^iagRY;V^ 4B!`'nD S$<GLݪsN=kddfspv yq8<ϰrM~@e~%X .+0 K4tT49xg(ѲhK [\Y7�Š(-3ˀN4vA8id^3P2'z9눩MKuڊֆY݌At݂vߌwۂuIB}H߉{ |k:pޛuv=X{l;~W"�a��/)8ã��p~x/h猧V�aeʠh04%ſ.Z_l¥;l4c:o5 43a0%v-1w9f ʌ՜p?ְdӴ mrXzjP+g-f~ Vr\e9k{2̿Ycx)38$D��� KsִJށg9v:�� VȬedc|=�V)DRw÷?lZo?n]xǼ:/pܭֳs|]Y}+?ǫ-jLWgP30i딝{Y}iK?_x55_hoZnt\?$X��@XyT <h?/U� � oÿaG$pz4c "P%� _Xz-Z_tV/X Amys t==<gW鿸}mOV[~){`{xoՔ-nukf2ǫmgrg6ӵi;~fR}!"zށtuu*&g(KShbM D2#Q}n\5^C`MhMCsOZtP{N&.7}, %9S%ˏN omV>�V������ V���V䅕kaߩ.G,XE3O9_sjl]~ \N֚d|*/?z:Uس9?NӴj{V8cukOqhÜE?ҏ]!s^G #^'Z4VD?&Y` fV1-ݶ\1Oް{l>{$2iOOsYisFY68IMfTgsY2؋X� \�����V��RX<k͢;[_觝sf̝1c(훃x U/4̿F:M|Nь r[y|Jӏl'mv~s6)?{Lմ 5KE8yC CXiNES<79~S DG<Y%FXs- B 1Dǁ~{I犦8+h=O?mŊE<b%iVTq yCYhľ�'5(D+Q.V8f멇o' �+������a���2Bpo}*B 7| =S2{ -a>#|?A}k6o| 7Yz`N&]w, qQ[C 2[_|9Vt\&m}&׏y|s5Xq +y]]]=FZ)Jv8<yG=t'E,먄XkX#:Ɉ4L($2>VC Qfu*E\< 2/ًQz}Fېnk`qF2x:'yw$gHy Z{گ,]*` M(d2Ü{$:}@N)3���������@X* ѵ,7#.\xLM5U9+f1tXXuv繚E:VF'[W]Rwhs]a؈N|iR~\VXL]m=Eq&[ܦmrjyVIg.Fq"Tk/${DRGψ,GJѷ>? zeǾldPOtykggѓH-1 WQf: a{yeOچ!8IJsͤ}:$H_=C=Zѫ,ZnKo}!e[n|X O����|7ZX��mmmMMM555%%%wܙvFw E{%Пt߮ju Ps59kMjm2 EWb͛͢<5?!VIFq;"u~f6e w-.S~v㵶_bPZL.4n<Šh`hX "$NdpJ8A OQ5;< J_)Ql(`0ԳWYbi#lِơ2!<Umrlxr\$[9BXsO9hϥX5Et>*v'�V������ ����aPilUZZ О=_K:髵Ou3_p y Q'xD_v6ubˑx&n09),SyH\Na$3]nFI[\nvi3C5δ܏,\j2'#q+BCdy�-cwdbEp@Ot*I?YcExr8OreܓL@{]2,HlhLmVa`8i[ͽ;Yij.ڧF^p:ӽj ȋ@ 4"h#JOͥ,U.(K%O= x�@X�����+����JL ;]u_Ը,YiMh5 d/nɜn<{566'Ӽ%Aw=EL6{y[*۵& U<EiM.;L[cd-)k?[z1sbc}# \K{y8 Dh8ѣuOKv\MUwN6xlŨ,ʩo dxڎ ^X~LmVa5/<"*&:!."h)}Y1<<?4|jz%W.ut>/NYy#y'�V������ ����a奰r,"n|^v*os0dt]ϐt#-9{bޞkN׫5<ܼo}t<;$Vepov,g[&ok+e7YUbeL^CXrxel)o߼8BA-w>^ꌅG_ݱ4  !PC'pT ǰ%C@!nDf_͢SH8 08"o(1)]m1O;3d`wd+ Ba# 0]$q N0%GO<� ����������Ka+}U7XLm< -lu6l>?<dgbeRY\d\RQo!wݯ߬6-A_(z.mZvS4m'MֲjgͿXfzh| t0wsG7P>x�V������ ����aENXq F>ULhoEAp:_MÙ϶dPǖ:"2̹I Vcx/V]Pj{t v6L,Shr?VJXL^�aeB;gc%R3@�����V��朮ZU[}:n7ZfYcU`=5q <:+ haxRMיFM8Iv:IxSi;N_kZڎ|V&@@D�J6,?.M U&`p$ MG1K9$[-g`;݉CO(w;h?34ܴ\ !c}gyy&ZDz# ӕ<kzEp|s-:s(�@Ɍ='D/)GcQ(,y_D½<!gq}nVD !Zt~OCm=BQZv E,M H8#,<2G8}#C[791C=$ icq{X?zى*m|TI`C˚Y(vx_v>$wQÇ{O'�'>~>N.nn3԰v| ܼV ~6F<w7ki35sfeY=eӹᅰSvqe]n4Yq^^Suz8I[=&3y?t&ovI{P��+]4eA8) <L-xoG0o'a<ptۢ@eʋBXQQ-zY{a 91Gѽ7Pz[eT@_wS\81U^Xy-z{$2iOOsYisasa?ڼXV赮Q㺽t͹wS3"=op3v14`נ,>*Zjj+ŠrNNQcKKI5iy2 i<j<yl=A[ ڄ@_Xuu5G~9'un`7MgkQ1X19~o4Y VIEgӓx:B1bɅb۔;AgM>iۤ SLִ7i?zNC,��as|[|Dz a)TfS(qq% ]1ڝOwrX 5сަ�'2N| Bcd%_pBaYM<ƞX^j8St20B"2G +jDc7a ǬF�{+ƙkeΤ&wBS&+3}t~ʝd<%{jQ 7xxxG0~ye9sۣ+JIӞmmFailk!2DY=^EeKe9&f+XQq8ЄȔ?5'5(DVי[鳡냠~76[5CB^Wc m2dCvlUԛOTYv >7^Xy{7u4.xZ rci4y@9ִ9u%[ghy@vהJ`8}z@u -Uw8t4 Ca]0ZXI<kDa0>t8ebACC}οwЋL@ "EvI|49aCCC IXQTTG1%`pנsMZRQ wFae` oyzߨO8ծY-lf=h-\]81nbO01 6YE%ïq<kXM[4]v u돡WXLӰe7eNgY]W2aie2I`DzꋈL苓$3@OWCYH2cԇ@_ /<3rw"#�+PXPd9HtDzxDͻO"7ZNue8!xĈ-Isᘹ+$w@4Е4tN-Cs .:JVz`H:8 )~^!&US�#s0NeCd>z+<TcuFCbwX= WoU]ŝ#seoLBw7 th[< H{aEAo i=?-2$% \h+b�k}VϠGPJ+VTk<B[+ϻܮy ZZJYTX)^j];0^0g`#$4g&۬9ŃL N>VpGyYv uaELűOwZ(>c&,<?y4})pU lo36ߏJ(_w NZ(}EhB@R@Ʉ98JLownŠÉ3ʭl2#Y1b E7BE ly-+':q` _* 0& LS]K kUaFXx䰏x؏Vj׍\tof5q6m:Uعk_A^E /f#֛u2r%7}M,qz:SwsǩlrM.`|4MtNqn畿nu.N˫ﮞ"0 v/zca*nP2�}BØ֎iQYykS\ע<$'Q. �~J[퇕|~6 /{Gm(Fg4dz:`p̣AGU! S.?kBGǷ`0`{] cG<<ͷxXr0Mw_Ddm@G$b4@TfxuҔqک,1QE1B~ #xzwV: P9e]ɜseoIMs"~>75BX[Ô$ ,e yzx$øUѩXsޚ8+#Nc}à=@8:C7:zCO?$4kbg`ϣ�xښ]k~l `DSZEQubS::u%xC9*,$ZRg֐Lw:,iŠsFHZhM;UC#~=n-exNBe͒B] +RZH� NjKPhFUl3}$<EE}sj͕EXTTSPI]jlѵVxnBx0c!+c]~ B5ww} U+4%e*޹h1iN--.˵笶a1W)ɨɿN:i]JTG'mtVY$-ae "4Fn+x<q|;ʒ2e޼2&l16u2az 5 M,],,h3hk.XiGXFTG`g.JEH rP.GW!z6_ $(y~-ͱ`s})hÕf)VTkt#:0s2z*, DٕCt*HlTXp�2a3Z3QD׷Bqzn.)}I.<m> /t\ūHӧ͡0&vGX<зO~@YG/&melyG+3 :.{|6 9-Ӳi ǬFCZ i~7:P]w]/^sDٚX6fyh\oc;JDwe #zaEIz�m2a^ vc}xc9 ʛ$};v)gͽzXx݈qYl<MDžC@ ܓ7;{>R<T{R >*)\;l5tk⿽ š⻎Dsdф+-Ց4Cc 4vlEP%fK"q2V O9ZbS{|x#Vnٕy8)yilU"(,2'}7xXR"Nc(l1XyxPx`c8C'/F/9XɖLԺE^nD,/ ~U39o)qJ4L?״b'lnvg6:|n5m˔mӶx|Ziڎui~3eͮ7P|fu>ܒl`"drסP?iWu?'`ŒŢ'݃"1ƏE;$~*47h‰?rDwm P ,<ݮz\`chwI*V=PΊz'yh6g\#}וű랉Se1 +j?Ί|Raeb-�ʛ+\=z,$08e8~юPOu85 qbX_=%ݴ=}w/ ,z<QŗZCB;P"z$/c ǬFIZnSthq.W. teF;z{hr .uo6#zԘŠ4b,b%e9Vz7pTd2lH{>vOcn^5v K+_KzwBK ?+V>S-DUe[V lp4>]#<t 6cb `z BTi8 4Rs$fBt- !9pVAa +qVp08eJw JX 9og1z[[;h -5D}" eo\ ߛ9KT7Dzof$m)ڼO6rg`?|%W[,OY^4=ЯP\a:mͮ{HWX9FT-@;Cv\ge \)#d8dwy8ַ3݈U<ΏJ@g\ #e-dcYEsN2j&v~<ŠM a`yYMW|F+5"]yΆÞ5,y ]i +h�V^[X]Ni}V_C+d TK(k Dzx\�t]r,×<lP~`JGHtȌ -~"lMW`81;\2ޔL5tVv$# vO0uކ# o:8XM4uʅJs N?ZX]+B~MrU +}O24H+h\!y sm oSXn~5>cϱ"&сBuMQe 8)қa&QAۍu7[t gQYȻPxM`5v=z@ ; ]=]eh|Ự~E؆y:  tw;H4"Qϩ˷{{{ZxMek !_8M|"R7IoNK#q FCSc\`Y/tᠹĄh +0Ilk}4ptҶl9 n$W|d1A9>9~^P( u*m>pVAr+E=aU'a,=w&1x '`Oxz)0#8-l&l܅6.^mn&lYsT|z):vyZOX~nQttȧ[!+o n~v_fݽz}3q3yGg2NJ_g b!޻[OaG5CBa󒿩ԗO9'mɶ^ I6p=B)Ͱ?6^k,|RCq 5+zH^I>CQ 乐#-QXuq$4 74rsA!*, ߕ5 vZ6NJ"�ŠH10Ha Kxs62"#0 ouOj΋0xs|c834Z\#4xj H}qbNP&hv'}xq ^SOtc S-Nt2gV۳._#Vz%8&x* 5yP eLNJLATqqJ%X .c +=[2]2I=9^ -!zh1Oc6辊@LJ¢P='+eg})D袍:SܹL kb\:MrZQ_-n(2E\**נ|%JIAkш{+3k`0 hŰRRuؔmm;ws#AK<2`C <Tk[{q-t&ʆk=‹nh2A0vS2H`pÍCXQZeEN cH>fl烛cetOOՉ叚L_{#<%0A@ w<xgJЁ0/? ןa xZ?*$@9K{m]e]fO#b. `?iK4ְKz?b>6px2bNfM Z"r"#fצUT7I3L>ְ\},5063XEXY*wݑB%1Dt`cP h?T[I{RX=fEM`k(8#V/. -*.Nٰ^EEXQ^U4빯>g!-($@a$oh0sz-� {0+�1m4p!L&���0ݽ{/s?qhDm3u[\վtx EKvRcFBaJQ/n7! Hw;s 6S}|`~æ֋(ϭ]]ۚW񠸚{/VZ|ջVDxUaohLs+h됋nӇҷC͙V&t3ŶE_$۔f[c>k2dz`LkDX5M}E +r˾dgF7e&L $c>Q-(-y8zɹ~Eg1G*,`ٕ{w�SRaZ� � Ȭi/s'cA����9VX 6hg{eG:?fg]t֝EX`̓j hPc<Qv<mˌ<}Wb2K-;Zy-15, =:s̥q/^sˀ7a2�+� ��GzD"G=�a���ʠHT|p=e7_uv脳םhy^w`I<G3SOg"Ȟ"SZhb&+ͧ=W}bKگ6VFdԸ]-9Ysؔ/A^B:{+���+������a���>vo 6:Zfukiꘙw\ZZy?J,ryYp6ٰbє_<nwԽ Y͂Җ7K3JVT7V%ħwg�a���a����� ���8HTb3[uhM#6/[tv&mp9eyԊ-f\YLs/Y}[7a>u*!ݪ_XV\wa`ww߳+o+l*.o\J^£ox-�� �a����@X ���ʋB3s|* 2 6#!p Nсrb{,2s5s.7XAAVmjle>m7*HfOJmZamAiùuGI\D@x ��� ��������uOVΌK֒p:]c;ܶ4:%ZE[-5l-S6p?SgKL-ȻZ;VaMնmy$/ZeLVUdZ-.Q{ϦG>L˭,nje ��?IX ����|@|0 x^��: ~ ';iZ]0sU厳!;M%=lEm3mtrZ:N|n^+eg>| nv6P|yޮJu)?#+ϛKR&O+m_rfO~r"q^Nu)!BQL;nӘd3`0DS߀t:axB?k{HwqQOy}9zX62;q1Ws.P� �a����@X ���ŠHT`̽ >Z?}Egjٟf9n&L죷!BeJ̼U9 kNֶ b49mәZlyjC b~Hx ṼCݯ_6'y&~z6:卄@ߛ}pϮh,j}pG0oPOxU 0E }KqA sOay y߳�>>�+@X����V���2Btjy9nm\_iLY?[ztJDfbzw&]kv,S>dMұ~Dhz3 Mxco؝V'ip bQWf]]5gɬs48"&uŠ;{+ƙkeΤ&w=.r$`xסK݃"f<[Ac<U$4a1U��_#VRzPXVS*@2<BPvަ�'2NyOX,oȔ+˳G@?{F{ݻwgvfz이z{ݹ{gTA@BB�&`c l6N4`0`d%ƀ~rY ԣTթ*{ Kl8燰Z;=9v^9Glj{Oߟ)Xzfq7GE �+��H+[g]>wko ~m/_=_?.wS&0ߋ5߿7o7G 2~QK?Eǝ5^}7r"ʾ_ޯB[du`_$41[2dd7R O.;2.OFq/6len(|^)"F~&Q19o V^=g%TqB}Zw+&fCObY\c0 :P>8qmʬው7,Mѓl6`p|OQu:u3Ad�+@@@@@��€(o^z? ]`ўwد/|xno{~k~++ƛү*ɿkw_K^6/ߑ7Ͽد}ϒm/{o_^ 91VP| &.3ag' VPm pm-L8Uɕ'՞�[D4&6Wj00ovis3ڐWW`@z32-δ1srw8@-#^+#7n8crTr])!Gy'NqRd@@�� ЋV2}7e˾~to'_F6o~֯>;j{#_Jk~{goVv/Y^5\/?^⻯Wo|ėUi Z*N1YX5\`J83GUf3{fQ[+ dk�CK nP=N0c9EReVl>=`p<ir}s2ݥGz{xD(K4n#ٳRG{7lbv"t-2 �V�X`E+Y4O_(Q}?%Jچ?_ǽnj/w[-o _ _ʯ7eQMO?oeS\Wo!jUvz&.1#]t`e~`,^xD i{&}Vjs- !O) mmJ5.ىL`jDXndyPK9XdA| w:81y7/:gӇXaB+ElJkPd|52|B6 {Nk HA<1q*j")#7ӅpܝY,Zק`J!vȘ=h<jw1G#űM+I>4.F z&eRՉR٦Փi,Kd.^E㘘lXvgEwdsaI>k{<5<p4a{@O<4�^_E&Wu)!ԗ 9?rkSNQݯqHdy r zB^w& koո4ў�tƭU9O|?&V5{agdžW|"|+3bs~!S/':32}}C};_Uk~W/>->򿥅绯*f?I_#x J<4.!)wv`Wΐqs/Zl``W)}X&J؈??"XǛ}alwmh{1d`JI+#\@X,yҼVrh{p̂ђ@rѨ COVg`1+ um-:zv`X3VU^CAuH[wf47k4u@j.m^i%,A~| T}M<}]s|婑tloYEnOBsdЏƁ\+kQO_i9j'nPIOnH T� ze^"zvX}>eiD 8!838fk:)j逜Vmreh�XYeť닃eW'gg ,؝YZZ(+fr<&+'d}%o %y,tż]ZV@?aޠx w]WI7v| [6蟿῏ftnQN\S?y{7]`1?LO>IC(n;ߊoۿsw>+~WW~黯<zu`47q'#ڟ (#!XX1-OH*s[Wn{fGcbsilXn]KCc<xfH@*Ha㳊ҖX>ᛏ]M Vplχ dǎm8•.mOYf!^<\y@49+"z`%?$kSx^E$=A>2|) v]ǫDFzD+ǣYҤb Cr}=Ea+U0<b_\53r;'dSKSa3lMR\, c;i`ť^eA^hԌ9*7E)0 eWH R|8"OqOJB^*b7C51^ 1.]cF6h+% wvG5lWii'ǪjfU\4q~Rg+)DF~驌az(NXqrSؚj4x&rh?\;p˷S='*&q\v=G,s[5u�+�lU[Μv\U;2kd~$?̓|ف!+Ry$KD<Dm'7bFŤyPhxPsΦe+9$yeV(a,yOdtXXBX\)cx\%+Fc8Ֆد7l|އfelͷdEYw ~}OOwg'"[p3V&ϭ}>Mgww|w~xc7ߎ׻V�Xyr`Ša0NIz&Vtӻ>K4o?AsK@7r ۬6ODC2.!Xq >wPtVlQRZald{# 8z vMX$SdiQ<I6E6t T%^9vU8͓ŭj<Wf.!< NzB^(CX+3AW; I'KB 5dL1Tݻ,RsRɥ[pwY LȓXqP[_vFomvSuZQ8 Vn[uEE7FŻmz#9N �+Xק<&J)<ޜ)klA@SrghusRt^+|8;qm?B&6E,HFj�ID4,qVit+}x6-<t= '`뵓,ޒTX9auV;_VSrirVyAپq~o.}/F^}cp?F;/|9ɹf@=쟾_dc4?ϒ'}Ȼ';_AcAW.6� 7t29uHr9;ē&m?֬1Jucl+`aQQ'`%]twh h 2ޠd *n :lh CŸ14b ="8ꬪ|{!Qս#OKVeU^k 𢏓^l*bc> ޸rWH.q_뤚ѫ+Mɥ*pVX_ Q6 7$2[>D+aˎbuS}J<sàrOuSrP44/= �+Xjq,~vd5gXFf^6'+Y)>,M$q,X^5n +2VV Y_BB-sjrT+؆1 Z0@m}睵+ v*}1<-0|Io?pƟo~׃=:޾"j?7&_}qoK7{?Œ #~#7 6|c|cg_lR г+v})2lZ+8MuE+J,:p%+֝!sg,H:Xj`0bPm&>:_Dذ28|~D_M#:^N,l8 LI җː q%!/[W BQ/Di.0V> V-€f5D}3 Yg:fVi[o}; n=G`{uZXEx`l'MrrS}J<[Cu-1 ;>,)L&8lvcvM9MCku#(=ꋲUDrY}Ua3^M)2nP^`*uZ?p>jK Vȼ?C+nQpVvLQE8iCSwXl7҂~7 /s;zA*F}ꖳ Vwӏ>~^M?w9W?2wLާ\n&^1Xz`S0+w[3k+!gl}blG[Bc &#k`aP`%֔Ҩ1Ynvg&|,) pCmwx{ڬd"LOgVR\K-pdnD"wT{mC [> {iB,XAց=㫶p꤆2usxFL;FNzʐ +*yW)!/92P 51`śHyf`e%GמmgC`aL @X }m^+*lwK.,Xx0L՜;"<{L;7~O1 K3`!VWvk }pEt+V"4.MYS<VV7Bm~<++xq/N7&L?0όOMLOOMNOLM&hǵɱ~hĽ{Iv|d01٣ihkFtc=gg߿7yԃs&=| �V#Ω>-:G+D}{`dˠ:Kɕ t `E몪"{++} no9nX)AE-x>'v*bf+ 04\b2G $uu=`m~Wn8"-$Nvې& Cuzqrb ~slؗ`:!*9L&j~5[XXu:T3 8xXʒ씝k7)Q>UWj5JOzBܪާH8 ^eh�XY 1bMaa\{J1+x텽0 v]9X_sޤ5v, V0]!-59jt~ɯY53]iݪb:'<q'Xvϙ@{cnYWxVKV<x`@""K ӭO4$`qtv;@24k*wHPq = f!~xJXk`ESY)R"^LJoU+kZsF0 #Brkv1y< E0*Ȧ?HWi(Lwr1vۜv-T'A"~,GBɱΫaX#X1/Fbcع3V,F%`Xzt+l%^`2W>MtWsIvtSLz<(1o1lEp:US m u[k4^͑Fno bO=v]9XΈ\.W[9lSyPb5`R(idٴ�؆WvkŬ.VIs1m.EzXP7jn׼.KVC&%г+@.댏[^@@ПpT` ^\ Ъu S�d-j-cR%Žy �+��䒺JB>E-N K�X` �V�XM �V�X` �V�X` �V�Xz`Qp�� �+@@@@ H/ X+@@@/zZ{nCCCee%�+@@@�� �+@@@@�� �+�� �+@@@@_IRp�X` v7t;؂~ 6 }Ģ&^?>ޏAl1LJ !"[~˂ Ac0hE3nЎFƱ CY񁞞F�V�X`  jIo4ql1t&(KlNMbz|1 _LS&ӌ"VlYiXiCwk`` �V�XzqJ,d%$1&p AF L,< ,E`lH;ka| g Vx,F؈^K+=C{FE|q!mg9H,qy<YuWҾ5jIZ6CRJ<x6[ kx~ܜbOQX.4Wt:V]IVUixxO;^7;Μ'D8D2s\{/U|n{,qi`e2e&Hl&J H?d `{xPfbdT3K uڕ. خl7TMskԘlK ӷaUb5{ p2azT(, Lv͙QjY0>,U!S.iLiiV5��=[B}\Wd5u@?aޘ[r V<xV`i禌ۮ} \똱[%`J ^/1l )gl͐ J� zeV"'{g& N X1.=54=;;qa7WΖ*W]JFgƥ$}ej8rk}-Ֆ^/+\i`e\EuH[wflZudr=P:vl`Eukˍ43##-�<?`,5p]*&G?3G cJJkrZ) Vwc$AO>Y:F u0yq-�+@@@GW&Q61$|(NeRfq<UsTxJ@_dbnin8?=JCQ-"�Ն<%"ɶs̘�p=ggmʬvr K\T8,6sen _A |aiGiMku]<+e _,O0_vtk0\`rU6:<Cb bK%9ڥIloC!#qJѓaR ^4qVQ wv!) <UWvڽ%2vƍsN[nҊn+*LԖX}{d}yht>?y˷d%= Gk#+4o+<^i`eU*ZFl"\ B,;B5дm9IaB9_6`yױ%^9?iz*eP.K_XզF0c3MjՐC/\?E*@a =5Xd@ ):@ȶSzyӎiZC((S5jƜd2vnCAAZ[ѥqJ^V`G|%zʤL[p 5ɬ _f,,swyhY,dB#ǐW7:+ʍ; aqwj-;G #Ohrרl%#<OR!k N*-Lףӯ%u7ґbv828J8�+uH<@Ү2.\!S|E9ܒqi8S!?'M]8kkt41[2dd7ڴ#Agg"Fx6{ ]LUW M`{롥$dZ%fC#ǿ)klA@Srghu#6]]698I*-xPՆLM+%KsLbrQ9.ͪa&qz<go;ζX;k\J!UF㜡;Q_bYcAsxMZm=x+gZ)s,>6rN3mӝ Xqd]BΏv�Vֿ%AUXKugRen']J"Z7 Lr?$6^|s6.]d.5Tabޠ,@WVOֹaa%E*2‚{p`wmm }p׍7f Vd< CΓ%atN *M#(D>  vWo:XMf-CL;�+sT`HIY2 u+`e#ߟ-ߢ!~I4t՞]X S+6Ow\  m̄l&+ מ#]d&FFEDlʜkU/9zZ6p3hW^`Ÿ$XlOaF9LǷ̝3Җ[ic0Xq/lLxtg' VشcEitJ @= Rv갭]dZ%2V675 f^&lsV_698I*-x4R$J v*avD66gtZNJzv킎bTN;lX-\G qVXH$rYkVuԳoy�+red7(aX!Ĝpq)^�4pv\.oO-<i :rv *[^ vJtu}u C(zlԷ>[BrVoKm!r,~*W&ӄ]+D v: rVlaQŭA | .9@Ȣ{-YTesZ7Xf&`ֲUbEea VhۏZVL�+S% ʴk+ ᖲ@R*Fa1zWC*avi&FTU#pPRUM%ǣ(ņxJy8;Ȯ}gg=Q #L&Bۉa7brxlxL冱t/! cN_ aGzW<}Vnɍkύ_#4q$ڿ{5繭 DeƎ8"#-yQR! Oyv>b6ۮ$ fގ҂=s/6^>�{]{XɊ;X)XC5\`J*<>=`p<ir}ė؎q(vD$uN:szd7X͟%JZb1n(u̴fm#I<++9`K? c,YRp�'FZ]XC4}T]%:ub#v Izϛ_JpRazDs=yG{qV ؽQ6ަ7($ZI+-X^zZ\NV걂EאYŅ!jQ!}@u׏J;�++8qX.++,HN3 &EzDZm7"Pem#⽷&c9ƟꨆQ@%†]OW�xﻎ5iy0"a)2,臹VRq9U-Xl7jYXwLz<j}L[ʷ74co [ˏB.$pYt5ZnX+|GvEHȖi5^]MnϞC;^YўR ^)}W^ѕJ5 ,:} ( \nm䤵~w-/TO cSD0Ay(w]5ckύ<Ng!ؿS!p/ʞes;Y9IEb{r_ʌ$"řҨ`򰘚^3"]%r'}il}t ߄_�H^i OA,Xy>qL9;ƅSQTnLd.;+㗰p'NJxV V(#Y,GGFڒ,[h74FZ,Xqb[ȑNJKWNݜz:9ga6ײ2Ge[Rptͨ:f|8Ӟ)E8ϲ`X<Vn,;ʬK&SCt_rd[2iU~W?+KT?X:'2.Iy\GkJ"|cbcuxw428+Xr\Ul7\U4-�Ĭ+ ?rhF9\!} [6ŋb0 u=_b3^d YGr?c2 y:+"tW hZMq }|P:LYkVHӟ1:Xa6>6["\\+(&T|X�VN}F,QX100~`]G:KG#q@#8AO ?d4}x^QlV(G$Inv*8qr]z}n>n9~m]U18"65dI5H*OY$dL DD be0mv1>/�X[%+؛o{nr:>fwscwys+}иp`uۺqHLVGN*0UkL;my~a;o:J8}GF8턌VowW<G9+CUJ(2QFށ(]b!!9q�+؍ #,࣫cץRgf;UiݸVv[VFU-=Z䎖*<shjqqFج@v'G SsS7eɰΆ1oiK ^i`eʹ$(!n>Vgnd_.Wُ_F+ҤUU'7.Yr*X"UtwRe\J>n~7Ɇ}+@IV#.l\ΥT% ||(COr}j[L&Eq?+˂|5zPinPgHfhNL/sG5ZXsS3 KssS2=83ޒqnn~zah&,.lnmmMP;I4)wNv`pFඞg`B806p,;YgFm~;;I8d@sL e81 vXµ"Mk ØyW�k[6~<Mi򍎋7)XTƉLaܱjm .yXdTTTl|bV#�^�HǮ')X1-l!dT_#7qQcKv"w2X<SfO Fo>v5n#Q<+*Ha㳊Җ(tR6C1aStU6r8ICi;1�nXnȲug;W|{J'v?fٻcPb}VʶJ?- Zp=SD'bEgoI['j4n'ut*sǧVܭ". ÈPܚ]l767G|VVX?B.i5kR}P\(&rFmV,מB$TE+ VfՄc#-B,Yf2ynr0 CULYUp V,+cQ+ P(T_!hcSǏV_R|/{>VP|ԗWM5㚱iȄ0=>O4jȄvpl_7`a+`[&8j<r4dE*0 [Q뢬**뭢qQO" 1Tnv+jko(`i*r'QS!zu><.걗bimxAxi{m1u\JsdIlq aOnEFRyB*&[u�a?57֦;-~|B`h]{Ds=h`�za<V{k>ɑ!oL7023٧nWuM5׿QVW[QwVeKeen߮n}vmC斆wzzںꎡaHذV;0??M"Xi*$G F( -HW]yJRv[E[$d0b*"22@!$9c {rJn7RmӶwrXc29C y$ُ\]Jdˌ!]<m!&Kk׮~qc#0a;fi&_]<1 r:O[QAmL(* DbJ�`hev#^G�y �+_aOtw5E)dbD$bD<\wMxغ  7b,Wȃ\atw yD/|n[#9].x#ow#&5Oݹ�;`!w2>uWt0G\&!|ewbPL/ȹ8bdNkM<1 'b0 c2pqZIMESx7 j FY(5r-aǘG`es>n84"׍^FRb2bZiB]b#"<7�Xz:+wwygJ^d �+@@@�|u0g  y0ă9n(G .F9,l$`q!D$񅈄Ńhc.,DnXU&tw>x-sˑdC +�X`+ V rKݸ6b&KlF @'L�E&A^ lu  v.!K**%.G߹Sg$p1�⫦}il g^` P+ׯ 0k `o $IB`:!W,lEƀ K߱-1" r�XyѥY SUւ�` <X"X*}R%b+(, PH0[6,B.'P%z%B/0.u�� �+@@@@/X0Lu7R})tGfE, B0Vg٢&/]K"\!s|qdl7\`h O O+[@&xKn\%k l&^,A`Ub:a.E &fa6;LyYŃ"wR_=0_pru` oLӔ$EPc|ݸqJG129;Jn躻E.+} TM$x` �V�Xz>ʐtd2ܪ+q@ s!lly(p 6>,J]0!la3SQpZaSג=p?a8ulo2i w]+Z};ձfX\ݢml%oUִiVV Wv1 #h* �+@@@@�^{d^$GcӋ.zđM|&LLbУk- tMyyW,QғΖ 4LQxZJIR$ DD6,XQ%&*"c8=2XUȥ%G[ɡ�[ТS`Et8}KPz+7t+bW93V!xxGkJpK(x 9]`?g ϫ*fGiaG ծ(9IkP6}ꢶ>ʕ .n1՝v ʪK@@@@@��a oi*pP1.rVI_ pctB>C9<A ĺˏ+ɡmq wQ!W裮aξm&d3\+^^R,.p`1ZAw7n<yg֑Eq*.,%1 $XiJPaIL)y nx"P 8TӃWe+PϠAݸat>3B+aۇqn8+oE]?WIh/YiEmyt F[FpKVm70jAL++ �V�X` ' VLqI_lam,l^R??u!oCj rfчV! >ݲ7g"q=d1G{X"„Ԯ+2CBPc-=UC˭h?VKhHx^sjG]c0h"ܣE7 (qlNJ٤+`z$bVLbr%aohEm2=G‚T No$w`e% �+@@@@@�� +oW:[>/.ط[iQ1.L y\OtKs3+{�!@C;/_؛σs6^-䰸iI1Xюu>+m XLJsHTR6+Xh<xw186Uq\vJ0�v&NJ@װ))g_5qW wCq~:X<C8s쀕a%vJW zuM v$9{1VO�+�� +tS+ <%16,/g{uΚ.QGɅyMnv!XfSF8D mKÇ9ޛ$C|d"Dνxz&FiĻi cm^}w`'=Rz#lES(&p51wQ@ilEBΌ3i^~PXX&sv)!G% =x!aI0y=)ylZ%IQzUۦ*Nۋ`)4=@&pt uW(++* �VV VFj#x&*"z Z¢Lj:Q`0,D7 /b66xPfS+e/audv1,{g?O3?҅pܝ) zeUlXvgEwdsak7)Y�'>4e&Hl&J`x#0#R˄k{<}>%GC6=\O%E�~�^6xp[v6O̭1B}kPa8"OJvaan]L&D҇:ɵ?|'!_7U"L6)0򝉧os۸4m+=82-س}wfrdՔӨ.}n:9q3DG8n(D"lX8B\tl|I=1n)…[b#Q iwVtC*]$%v_ΧJ:7KNV-)ܤP(whl+xwz\{8g>Iefb`o :^`Sñt_XBBBfAВw $+r/ybNmrR)f$`OjlSmEm\B"%I^k7u'vG%&%&XYI�jUاGKUB>`;->'A1$Wݍ@u~[י7c. uOh>/jc:LHȓˢT}QϦ^c2a\&d`e-&=b%,oh]͕:KJSZtrަ 8!838fk:)P٢Wk5=mUjHz<5uPs=P6Vwk=W9l?07>[zf3 y:c6>|[Xi.T?5=KKK3�G:dtf̯SKnS5@BcsKOL3rj)n\tv}&XnibbĘp? 092.EnSBυG9<˰,X!;2<C42nXAW H?.T@�ؑŽk2lKBZ]L 1iٰ8D|ܙ"C)̫rS CPVzb꿝Fl[XK>b\bޑ,|K�qOMPqaf|C:Ԟ 8?)āʈTVvi;•bhFu|0!A~pB6պƌIr<*8W!oMvn8ʘ%;1TBX"dF͘qKSa3P+vBzxrf#XzErT/JdtK]o>QT˰h=azVEL,~qϪ0kS,_2Zg)L&GLx\n`:=3vn9M#:x˜|�Vƹ4$l Q/Ԏ3M%)[OPuH=@4dDq;՘&xzz&6OY_wqi'l[#Zz2:,,_!J͒;giZ #W3dk6}(eH=gg\J~>>"G7T[lɾP%2vߖߛsMc(aG@x\JmGНz/#X1`gL3-M5;RcsR f=Wv:kM; V0^wW}jr�+$nhHc¸{ 9 a !ൡ13tL +i BFתK.%!E>4|r_<,H&-LlD<YJ6^Oz]Yj}.Pmp k>[: 327ߓT8+Cm'>Y>z-)RTQ ] ކXwؽ =c&ɬ2.;qo]J"Z7 Lr?CMWs@e* z]Ld`^/'W!ɒwrGc7 U߃{kkXqtqDXGZEW +b28_ܼ63!OcAo~ASY++Ϩ+c{$@81!`6h.-l+)G$X9l+q\h0]'rBC+:͎o ވ{4sHƁ�FJD".}oig/asgf X+m<_76qi8S!L-Ɔ/6g[K]F;,9Εx@413^;ɔ-Fg(:<]Fl[ʹ41[2dd7R$Ow<@_K�[_kk|qƳ lT<wVXU' Xq2K2Lziݹо /9X婖[W:kM^Yp]O{Mu[35&2Ps aƒYrG XD[b7G uK쯾 g Vڻ J>ƌ5xf~!ៅ$۱i9n֌'a[|{^̩'LjEr~vJtylԟ L|LH3X<b)`vRtE˭(sWF.q_+f0K+W7\`¤ fLH!P[ì0rKYGe{m_f8%AU]!UU]j?Q3QkVZ V'U@ l$-np^KǕeXY>`rv *'ӥݘ̈́Q:fQQA)5$ ~wWꞴ$AzF s^4b/ &#dISI2nU3Ŋgڂf TVR`m>w{-ř6(5%H]+,f,U)!Gyʌ؆1͂yF=s_bᶎNqb3ԟ=ɂ/#<;,{I} &ܸlh~T7b[`6W]ʲyE`e�+ӭ-7 eyhnmYܹmy0n\6.ild,?[_}h~FxCq!H%6,!6<)~`wuY n\Xȅ4& g V DO4`~|y{ZB]Z} *&>+Hw}'5VaM"wwX,DX7`k ۊBe[<553>Ծވh5v ~<D˭(أـuD! [LZm7"PV,rR4vYEOp[ "Vǟ"+Bo?93QkVZ +_UxﻮVHP]랓h&>sr%7G5ZJ=Vt]K F!/> |@P?ڎ](B`gWҨ+uCɁXyߟd ూ=Vԧ`%gd0f084q>b#=<Xeɒ]+Lf9t߻`0<Л;G M9 g#TSzd7=ىX5{,4kzG鉸P_":_�Ua3vwLޟyޜ^7b[`6WTBWʲyEcLm=VE.Qvέ+]-Cݵ#uc MX딡ma״1a[i~q~ֹK'w۝tn\hs_ZRl\dh@BZ] GP(gֺQ>JO `  3+j?R7RmRDV%P% Vow{WmCnD"V{J s`qrZu+/#m.15l{ 9XYe,N1ep>)7]0YnzyHr%mOwR4v{0!Q$ T읇[S׀JE !B"MEbm-ZX{o Hw ,$4qw>3;d^Μ6VȠӿXѸQߣ3?_Ӿ&#Vh"-oϐɴ lf#Ւ<U'ݝbem_+-YOv$5ʳ9V;U-fgZƢf\Vȗ) bE1V_"Y\ )j] +),ju㈕Kd ӘG+))³Q*IQŸP wK<7F?=2<iFģ mA'ti Lj+Idf؍H@Ƨ;'rhYcEͤLꨵTmX{A'#V]I o)o^=<v`뙣÷<g.T=xқWjhyf;ERَ[A(_>ܨ{˿ܽaiNjNfYs3ғqQ’K0/-J;w|[ғO)&#0+��bE.kePRv].I'#d4=ɡ,Q(/|t5WT5`"'v)*g4Y!|Y&6<_zWqHhܚʱǣ@R?Y++qڃpcEdXV2b8u|C G\r 6~?5/Ј>ΥѲyI4GTtAɫ~6NChm|]?}m{:{6cfɈq>/|xOgk\(<+(hvSo;R'1sjhnÐHQҦW%H۷_klmi|xx�*1OZ/s,y%|2iC/m%kF=+NX۳F-5kD숂+RnC VFj+ηsJoFV%6:zĤ$ű(vFENo}j}e)ܸ-HǫF{JE߭~ Kc%A+G}7fmVϱR$`&eHaq@;_6Z4K$Z9?K9'eIXpA'+/87)׶bkzGn>ux]?\8}cU|'^wQs0VEfS*)U_ܼtġ;6mX|}e9ĸKݻ~.Jݰz wl)޽eMX+5!zp55rybe"y;TT Ava$DɦV_Bi � V+ $TFtbux,o.e F#NUo+I]S|P=b wHˮLJGk흢L1`y%T?[j,FIRSQuVW$t[~*'kJbe=h>{yITkd-/qJ˧$VF;Ua&NKm/϶s0YQLլ@7x-'YL&Ԑ}wJ^y/jkc3fo|MレXyw2zӤ-b%)N8he"l؅C<a wg ̢2ֶrr>N"Qi.3Xɥ'K tpUqMCfڬ/Mpn_Td7w4A&x᱅>mU߷.Oa"<Q \_[$w3kF+ l6;&rlwsCogQ=*WE sOX|NBɈJ)xe ~߽z :-Jg՘IY$7 #((=k[q>+)b!UR+tN2v{d%17NBhS+oIF"˃Wvl\ypƣe[ttߖ- xw<A>5JߠTv ?SU*: Ҋ /N eKV-}#;'_8orKݒ0c䵭riM(V0`U5ʷ0\=nQOr.gN^kl��?#VSe-tMLp'ܨ��{ X&`T Kb=sٻm]%id9sÅ3nT{׷[~l{6R!UW zxQ*&ƺEKSc"|Nan?/I["Z=ݷa<ffj-fyG͔J`Vrb\t]kkݽY6o84 d‹rG 㳯նpAgF]RǯXE1'k}ʈ*_.bziܗj늌Pl79�� |9?ҘGaZ>�X/r򹝛֮)M[%JlXl~uē{*yy~gΪ޿CoՊP :+B:4|#)0^RBLQA-kb#r2wo_nU^"fůoW*ryT 'v8[Vo<$?+dŖ|".m2# I8>_`)U^7hyly(#E&oy8v^:@/%$R9nXq_k[e㫣2O� VX,':^_-P.fr7>�� V�pAA| s٢eKsRrbғ ,|['ܿٵw^]ozy7}_(mJTlW(ϟ^]&ٶiufr|fdgW޺؈¼tiӳW ˔ʮyTJe-Hd%*V(ll$|s~*+i] {0{}1T$__(V^]V4-ѩO[2Gj+'5#M]7�b姈X���@X��ϋy6Or22RHXPaͲ#{K/9xTգ?߽Z͓^\l%SU7 VEN$ǒt6<@Yizr|ɪ[nTgtq4m=)::*V֏a{jڬ4Hl;&=~XP( eRzW4ֺI$VY^;[ Ċ}HT,i+@X���@X��OV,b˙3Rӓ㢄QP("kdUV8nO,JkmyO~kT JChRS*?">?_:{hS=vt)U*><@_WQ{Df|X\2XI!3/eGETr2<A)'o\ZIJ˹̊7+-ɔFQ@X���@X��Ojsv`^fr^VX$3So(.8ߏu|t5=k9՗5?kV*d \P* tT*?( 4tETŝǧܽuy[ׯ|RQNOMXy?m=3$6҆竣آ7&)VZ SCm seKysO"Gr(KK4@".7MR {nBlmxsMX���X�� ԣT~>o[frBfZb\T$.:35!/+m͊V^rs]8ҹݗK‘3N<t3;}#:|'<y�y<kCQiƒ[֯^,㢄qQ2voܷgڢϟZOw V:ZkeY +9Ш6+ЄCʷǤ.N)>Z8A Z+IY^vz6RH ۟h:JVm0 !ky}U@,4<nUi9�@LIW���05b~��0ۑdmmmMMM/_|72,Vtf릵vnٵtuׯ.YrիZzeκE䔬߰`ƕ۷ޱq߾S'=}ys7n}+]9w.?|xIzoll|%we g[Q?X�� ���� ��Xwk{G{ڍ-Cχ*/`@bY1ۃU I@@At%rE-OXN,'l ހ~yG+��@���� V@���ѮTb&+UW(0Q9ԤxTT+J{[@CAܞ e\|ɮ"c s(Gt .V="wX�� ����b ��+V/X HAV**'Jeb)ף VQ@تT)[G,wsDG � �� V����+ V���fXyф- -m:w;:%kyP@X幬\Z%oh!}!{Q#xюS)}ىu?Gtȑ] }K\B.{!��@���� V@���..�� V����+ V���fX������� V~("5D"MM$ey-rL8y{R;C1(T *pGߵ%߉<ƊNUgLeDK[_#=Q} V@���b ����bWnmMΞARs3GOpJ&vbECJ[^GG]v+Ϝbe;;{MNoi퓻䲶gf]J({0{4 ��������2+Jӛ3м7e3%V?ǤP /)Ͼ6!kں"#d2iod&Vnn/ 1tVhTq٥ RsciRfRUD(vX-9(b0Ј+[Xt%ɨlAuVgI*NXM#I[;zfvLbB0qT *k ,/?-8]תcZ߿@޻$(21ۖhgraTz'X������� V~"T64;#b%pF-z".mb쑄$oZ*7_yj/jKtݯly(#E&oyǚXxy6JՒSzf,mwoxE6IsɭhZVo<$?+dŖLi2|d7g(jg]R+s Vdqv*yR239 V���@�����D<:8)̔XG北ʲGuxz?/H@wLn(ͼpѺ췥RaȔ3&)V璩Qb<zF`ֺ3! OKb =zvNi(V(L.㲨 ~ U9{㋕%׫GLO%<(239I) V���@�����A]aWfPH?:X b34J{^ Q"o\B"QjX2m+ɐC1/ZJUO6b\26v})qL*#.mٹGQ *D4r̾96vXy x74M 9Rm2X)~�3شBxGɟION |Q�0~SX���@XY$2ᠳ!U$VΧ\zde,n}8Z_M4ĊM y鯷n/_Ԟ$Sy*N$sle\@>sAX9I"3kTUטXv~4_ 43@X( =\],U5rȤ"V&&')VV8; ��������#f5ˎӹZā|C G\r K,VZ SC#m biRS~3@mͯ*oZ@Gf:+?}HUhpu3r'ɖgeriQl+7M;J= V&yȯ}q{5!o9VxKɰmv$ӹsLLNMLN���b����@P-PO٩u'ƻVm@b,>`0CV^Pm13sN'FJR^M1TzXd\AɮZδԞ\,f1,+J}pg[ ɂYjeul~^ɁF9q"V;}wL ͋μoImRseI0:NuuɌ8!A]y<nꙜX b��� ����X �RF9� ����������Y? |��b���/A+��bbs q _6/('3_8/ |O'm;ĝw%x. X\GdYq@bGgŃ,4{dA \t^r]F������A���urZ38g.XLx!6fHWl`J14v6r;LH&HّhL6E Tsg#ędlDp p2 0E#1V@WAV֡,+��X���K ��+<'BWB3vz!Yi2w-0cbB1u$:FȣC!Rp$ŕbdldfhՂ?73B>S0v1 �������A���&/t']"" a,WO Wų[ĵqP T1 G'H4`# c@SRQw+x ]1cU5&vAAfAvD&��@����%b��`ֈR"GB5kƃecp{-h&t3/VLřխ"]VP]obhU|ʭ.u+H!6&4D�������gXK�lG_iNJ AD]fGs vYbͷ04ϴr[\*T3'3ƪ �S;s�3lAŊ!.Vpp. dKSIE(:7;9àݧn (KPB'˞&q뭵.?81:J{)#}|P&?ipZ9ZV � ���@X��b麐c<Cm1M= t g ̙lD2v: m);M탌탌6~#KE,>[} -}̸#VKBD"NJ$bĭOPwzʝ}ظ'MՅm(q==ͯo%27{CŽ.ys8nk$3X� ���@X��b% b҇]bjm,Hٝn0uIj&v~RA* ]cױ?6~ƸR̰SN<}Br6_H$iOz5wšD܏i~|aUvrF"^deݳl-ƽ' xl Dg/{�I�7q.(>P{R0UȟcGi<n%)|FE`a8k ~'� V����b ��+41+t ]5w-@U,=ئ4cWC>H4p22Ԣ* kl0bo|-mL,} -} ,}} jzאO_~J"Dݭexʞn -keɶ)W_^Z*NޣǷ.@ʜNrek=~pYXU[vn;zT/Soiۣzo%xwDS/ t@*|<{FV~׶^[=8OD^�?����+ V���X u\1,C=Xly 3WytRM](&6zǪ 78R 5" �+G+?#v<u|b:BVA]+gl j^>l_U(>=c:ě֮.Y |{` `?r^ yk{ODK/'ׅKig5qTW+?=[Q+;cB[U5];^mՃr=q>&����X��} %;хbL6Q㽐Dy E\kw;{؍n,n4SfU 1ok<b`V E5GMyA+h߈5Qʛ]b<P;+4+TVBg>xG] i1H/C `יk!x d_5nHvlLM7]dFBҮ8 y[rYލ ;vʨzp:2BcX~����+���W C} w+̋B1uL )N$c}!Xߙ4@J}-F#*=W<e8V 7i㋕802M4̉Ԅ<9I9e J`{* VA^z깘u]K+}5"wJGq<sY/jEtʆ#TRѶ^[={cX~����H<L+@[v0C1E5[o3W6|zֆ22,.ҷ5QN휥20_g&ؑ@|X`:cXR}.V!d@ 9V 4]mC}C0Zp"9F@d#??+ {\bEV, "Vy&9LL&+p~{ VӧxIɮCN/۾1],؇%dG<tOxwk,+ иǣ^ҸQ;Iqik+ry/}³hO- izX.ȂJ]X���XĊKU#mL;|fppɾ5 Colo;zZqѧ5[T;gXnyŮd -kprq T}줣~lbC'ӭYtLlkw#bllM L1t85D#l& t U|ӱ3e :VѰ"Y8ꄳ t7\(s($O-:oidΉKų8'HC(ܰK|[bLRьXXvvXӬ-c_ҸGusDpq"88|uۘchܒG>׏Sz>sku.@X���@\b%H v{Da (z*7-%!6ɾ(>Ig6oz S /Rh/ө44zR[e'EGY{HӘ܋78٣diLb #""RV>ë*y~cERަ>bd74I2vN+VT]uz}6%sL6WX7,g{c~l>l(JΩq in?7os޻܌XQj#ik燼3%VH1=ȱ}4tȏ؃m'tp"[ y KtX68șlbd,K|@w+V<XQŪ*zfxڄbe6e2u3{F� ���� >S#E i;N戕Qr&XƖv -__{Mr!#Svՠ#-X3M[B?-C9ͽ:KڍB<?K*{+7{^yu;V(5EDEZ?)/ WTJo:t7 s/LOhh*be\ێZ#d&nTu՗Dťq\QI)S!}q ;zX]^%+VϔX!c<%+jhؓgafB5txl1fhF?=' >_!>�˴g[F"S,TnEU@WC?XA??;m�b����skןW7HKXԴgV|^N˞5IAdܖWxy=]Wǻtʚ)C_x}c{˫'~NCvIjJT郼IOex[zU.<tWLUŔvN+V(>¦27=HdFxMFoș1X>_@#}K0V|mz~K<c+糌x6xO?<W|<؉oD2;X8YXdpjdbR j drb2?46C&h� ����O=+Pl7f nUcR}HvJ@ (Q+6ĈJ^Ή^ Wt툪QeUbFޢ}ڲmbESU$-B 6];8 2gXx|:>~M\*3IH&4Q73d&9%+VϔX JE 9Vdc[dǰXĵa%F8t6.`C`-Dc}|2 l> ] d3|e+jnXLpGX詹T'c��+ V����+ V&@8Y2bE7+̹9sBaݮ|2J%Vj73C^M嗼sMRX+U+5G'+HϟL}h|$+be9<O"3;FlVXQ"4bLXIeQO`(<'z ~RH'4E|%+VVϔXY`YgZ3$'r̋gJ5q6p!. ^5L1t"3.: l@:x|e`cEAQz^=g/Ȃ,}t}FF, �� V����2u}g=jVV]bi|./5MRH/uL Ç{uNbRUbe_J#i>p锂'I o]:t_\RKcQ쌊 R׶xnRhKzߪ|j* rm䝗 )?6q65!g4[[(GrK{ۓ$rv"~r/8bE{=?%)A]J"g,g:S mtz c#Q߉dH4t֛4vZα @gVӵ з D#VHO\kgoc],8EkKVpbcc,>JUθبCt)+N!ZtH$~cq(X,>O[Sz(~[M ������=oyVR(A"ue_-g$S脢҃Zk{"#3.xf׈BS/ןNE*BN>,Hb09hܼMWplvLn8U ߷.Oa2,~Tº=9j3vNK({;& JO9F_w^n%K"b$yo-be9 &#*Aۗ*x MC B-64#7<ȉl`kh`嫃hN$?CCۀalQli+_] o]3/d1k7ׂ0k33G[[K_uݠ1%S-NdjϪoowz]ŊieOͻ}[i9��b����@�ߝ{8?20[ =;Εfh4gQ'Ϛj(&0͝nJ5E�X|> T9aSa.Z #k_#Ko} o]stcckgc?39^:V>֞^a/V>֯~˟KM-'YYYv+:)LErwvoLINlj7ƽGӝiq1*1/-M=߾9/1Vl$8bޢX~Yj*DqtZ.i@Koܘ 2[z~+v"%_ݘK]} mH JVX*1gyzDD(IH[Y)�+�����bJ;hLOe|F8' VX2}-YIo':X䎥\r81MFvAzx[k?teleC,PE.do`E@YKVť.^iߊ {߰;!}|ڝ٬X_8(1/,q`ۑD|GgļS*nУS(:Dbyp 'pbE暮O8ت^]RZq6:VȂR=}(VH$ұ V7 YwcS6~ YʢpEI=dSRѷUD'R+f[Pkb=<͍Q;/k'C'w�� ����X"CrX!EaO+O # YtsPrwM4iJ3GჃ<XDc`#l|:J!aӳ 075 0DXꡓ({ٖfGN/;pQ?nڼ9)baL6SFK >|fۄ9Vj.\ NJNr*F]nߖ8+++%v^V/Xp 9#xu݊n.;zAUߤ|i+z ^pq)W k΋Lz+GQ }C"*~0z#6eu]"VFwoބbE4K&S$.�+�����b��`j!;ԁ(MJ5Yĵq; 8^6dc`�Ǒh'u"s*ck̬ʼnYEێ:tfg#<=!?l ZžOuY_=Y:_5pXQ5nᾣXrʉZb&.s<_nU)IV|aE4aiŊ1#j+%_y+,=+#;TmV 銨ڿuRO9 �X����+���?XfH1|~Bg_Bލf:iH`3H؟+ } # '1>[!Mgkolhm|-}t)Z !1?<2 iT;ߐɴd.ݴ.cIaeAWZA lm_)) XܭY{&ub}&+tg8fSP)hFPί{kpQ{cĊƨaw{y*�+�����b��`V/=aޝnJyF!e_ ؋g'tt8ȕf Ե׵MVVV:ȫzHْNZ,<u)#آG'+SǾzecVDlBJfuY-/1hͪK59/% jkE[xW'Hű?'"73цD1>bq(>62`MVƸի[Qt̔D/\9+~r2ؘ5ez�� ����X��bPk'trlF^<;JE\%1. S }9Tc|(Zb XenU,|~A^E o]K}ܪ`>/5Yѷ6gƒ'?'d9,� ����ʿ/V:���f92˗?q4JD t Ml8 pv.Xb<fHh?]:ok� = ]W]C,tE�(#*abgI0`X�� ����_ V���fXY3GN\4-" ,#"\C=C H~:$}g Ԋok77]'2b; iѷѳ"Xx5c7âz4eƐ@���b���/A+���Fq]iq^s+xy0GW<?!.)v?>:H10׆gCбյ&XX̵GY@VS`CKs_̼y`VzA͵E^5`L" �� V@���� V@���WĊ;,P8/l1 p`%xv6 96d3`EE{g} Oghg=);8E H zg{YW̽Â<̼~1/Ât`+��X���K ��+xO3yeDp(L j`_ ԉdL6vZ; msumslzS`C�=;?=k?4D.�ϱɔ_fsͽͼ~Qm1�ߔ/^ܵyddK+����+���X'H1t/;1ȇJ8-`,`[y](Av~@Y4[Ķt0׳u 4tԳw% +F [?]_kdѱյc3M=̼g3tÌ8b`/Y̕ +�~ߔg"?+_���X��JD6#(-(j>75&t fxlɾ/7<+飏<S =;?] 7V !=l<g.t|Yy _,~cǘ O} � ����b+/*DžS$W*5 ߇áox~z5$LšƮoz]JcgL1+y/k=�d*#Z nA|X!,"ŠS)#$CM YIE\E!VXw"қgB2r0t!9εw `9YW.D-6(!4h{R@˾W̽ѡ@g^EOf(Xq$f2\~uJ���b����@b.*ҽ7naP`Ik%Vn9y ʿ%V$+xkӻӛ%dZx}|2M>3mv]= JHr#~QP 5փ-E2 =Cl](n)HOϝjN5r!;8]2s FG�Q v~ < nU@xdQEfgŒ'/Vz:/R1oe_rQbE��X����+?X) c&~:꿫K#0>Zmpj늌Pߺiod׆SxלHz[Xt%ɨliRsciRfR+qG7d/ Ko==PA$sZwou\'NXM2//?-8]תcZ߿@޻$(21ۖ+܁Q V JQY6-n|9!ևgˆXBuP3LN馾|[;؝jF1гus%#O@�<zE)Od``닔uA@ lfXٖV]vJ_ -O}CĊ ������� V~4"֐HǶ'FtV|z7Ip#?x(5Zp_9mLx|utX J}Gg&)rLozu_ղ塌K%V5@ێ beLS-E.0!xI&oVɊ-:Zl :XaEaL+k+/d@mbE|?X$= YVȝ`҃i,VthhЅ?nF1.`:S|uQL1,aY|+zv+,\K4S)ח-MO`QWތXѶ�� V�����ʏ&VMwD"3lfx'5h+kGCe%a $fk*mG"3T! ʲGuxzH=gz-FqqG VtP\eQ=F.V:|!*УUW6;킎#V\VB>|yXtL&V)haJO`2f,T1P˷G3O7v&;SAvNv=Tu б%̵&ӱճ!łVd+VsT >DHGwbGΉ'{XѸ�� V�����ʏ&VdmDbFśa ϑն|ʱ.%$Uz*_hH UuTVj='8 и#+SwB: Mjg~j=o-a~k㈕_/JV]Qbew6`LP ]xQTÅdJ[F6d[//`XQ=ȫŶr# :vܪڻ lѩ1AhZ][|cReXi|uq) x~jN+6��� ����XsUb=O_M4N @rL"q8 &V@L/RV=bEuµ]D&@P?^ 9dM+ӾjgJbNH|rCd%~?[)\GO3Y@7w]IJX4E4@[S-,bEyDXzvCG1ϵNzܰ 6|VR b٢1Cm��������iLaV:7; )b8cMhjֆ7/ܜXA)戊W7#ȫ~3*NJ\(<+(X�mbe_8+3&+h>ClL.mx:-Z{c vA$ۓ !˱[򨶵CvaG21ʴ ŊzPO(VP;b%zdy)ڍ˷r&xxq}x^l+ C@} y0�=[|s 0%uA6#̵#xzYm}GG5w+#0)��7%����AhB.=YZƦ茸7޶|N6O!ky}U`0qJ˧%V:ڛm)H籐jXQL U_O,NK/;@ZmGnyJGk흢L1zjOȭ\Y'f@]r2#Nf%yWF0OBLXZ JP[)"MͣI!)^˅,+7 86adloF:#ͧu%8 + G4V[Ў`ghgm`gKUT &Vt9d+��X���K �rl+9 O;bݽd# y3))ʙkha=bhd`N6F x;\[]<k[__<Je8NJW b��+����| X�++`>ċmIa `{湓M ^Ss/Q)!;]?yds`#d[/th`c< \+��X���K �XfX<qC$,+O'ӂ=ϓajf4^H3G4^@58#{-݉FDc'?=G_�a/h;_}" A-̱F4:z_++��X���K ��+ /RGÒ(Q̈4 %(r19"*LFgDKBcdfx*-v ]I')drP^B0/!' K"RK$ GqB|/>8TLD| eL+��X���K ��+A��+����| X��b��� ����X��+��oJ+����| b.��@���)O����_ V���& �� ����_ V��� ��7%����A���LM�� ����b ������+�����b��� ��������߯��X�� V�����ʏ)V8Q *3qU'(k_ť<MbR jTO_"m~oUm3W6|PfO_:V(]oeGGTfLJU ~&jy ��@X���@XAQoXnƧӮj^¤n'ş^. O|S}T$}.}oӊFN?)V u+v%Sh]]9i .JhO%V��X���@X>PH+R> #mϠϾU9L&+,[p74A]ރ?7ose\zSi) o8byך[e'EGV]>+J-|${ʊszOkɾ(>Ig6C%|6c {4I&1)+)'j׌Syk)Qt =>{cs@EF~쑪Mzjv3']2];0^g3 E94 3%v{hkgb?Ç@��A=���X2voZI ?mw 2Wt*K 7c@Ct|KڍE<?K*WƎ[b5#t9ޕ"t+?o^׿,m授NU"VQګx2JWy̚C}{%<^z춊} {T>~`_3B?QXI޻~a^Lt BM "¡zrvϳP PyY1`;=g<.$̬pݽ7x;ɝ݉xzݓnO)j}a>B %Vw]zmĊ|ѾP *ߟB�X9~,m$'����G/VڟDQ;GVIO%HQ ȇ R}`$^b%De{ymFJKR';MaԉZݏ<,I!#?6鴇;{2kLX Ѽ;kyuU}:Ę+$usLAeʳGBkQ<7Փl>Sf!WDsF%VwʋՔӭAX�}+ׯ_HN+����]4[7A[~$h46mveU-*Kx{1 HiW`{-/_VҪbkTgZ-UxWT*D:F- ,K1͝RbB(da|ƉG]fui+yNkUxݕDIU%$V+6b*&и†k_GӃVYA#WD>6bE%Vw4\zmĊ|*V V@���b����@|bp+oQ-k>l8'^tRȒuRx,Lvr5b%IY"{Z zh+񧪱gt3 {YI*=i+agtFGiOEKМY]` } e+$ӽ֔>bg_{bEa4AD+b 7K*Z)[X�������򡊕moQ<E_yye4~UlþPFĶ[XcxMCR;y^ͳfQ3O7^?>>H~8G`zX_uhWGMW΢<n:EdbR7 #{b:nK i/;+2kl[ 5h6mx- X_H ˿M7U 7=G-]׆\9V40]]buWAXQ_N7A1BI$H~tif+zB$b<{8O Y sV[挴 u?Vʙu{(oƟؕYxI P|wH$P%0H^^$z5.;'2SLXv ����X')AfeF èd2J!8'Y$ MsZ+H楂�G4, CX{pFH�L H˩mSV V[Ģ}C~K?6d܎~"ƇQ)*ʍH>9Hef IYtļ.6Xyv }7fPJWϙriaꮂKMqLm(aQ!XlT#m𰰰#e5SNս5X1 3cx/HP%bORfK7[a(e~7E"x.'mӗoVTW9, yDz[§3oDpiA NkN8,;'A^TH%y?Jyyyqq1����GT+4GODݢV�.әH[Γ~n5rt1W9B:+5VH'{ laHÓH K\p#sM/B d+;6ݿE|/IN"HOpDmgR+v_3,;c?aa L-~8/vAqD!e\ z܃K_,pG3C$0:Vv U]W]9e2J.>4hԘ?R''%kDMfu% Cݍ2}0vNs;PKsl2b&ًJh,,1OK]ԡKI*F^ $щ+ ʡ ����X);Z�ҥX) ‹wahwx H9U YhN,bgd\~dOdMsCSd͍wW61B;Ѩ' FR|$kwcx�2C٨ xi(,Τ(،f#\J!=ڣHaO<kN.L H}gol3-߃˒W]E-y0e^(p oX�4?Duf5% Cݍ2ɞ}TEe,X$Ebtށ]Ñ>UWUvZO*/ eTQ\ tdS6U[ V } ����XNRd_ V+7wE`3wOP?kp-UЦw;FCHjjO >&WI`$ѴG+at]l]Rm #\|aIX'U8to|_O?::wh ySv-,J[.dqbenAH z^(}rLNZ]x3BP[;Zb pޮ`ٗ3k.Y! 7rf֔j8v=NOAK[NR~(;Z"TS5iQD؟tdhv~/Er@4o ����+��� VSr9ͮ"߈<NIE{#{>M <ޫJ,ԕm2VW\ IІC+XlS G�Yɋ^%!畓:+-)#sJ [@kCuA+eJ/h&O)O˥]Lg$ UCoG͈p}e.^&G@R~1I&)rf5I1^'ﴎ>Y8:DKS=hsiI n)9"7#s[w{ԔԈU D,���� V���@bXKreGn\)m^)@^])3'ԉ%D3r8vR8=l:y X{v>ڴUƎuCچ{4-g&Gz׵2t=Qh7MI}ز�  sЁQ~G)]A Dcs Gע{U?v`!:D7>#$T 5!h2˔uU]RVI'-),B8RVYCah3˟|;M|jyi|y"k4% 9N~[6b.K:RQ^x*OХhh$deN1{$Zb����@���XyOŊDTKnOKb?G.كɌ뫱oxҒ%g */;Sf֪/[2/\! \v :8'14/C* CIBŰO*lRyDmg<%`vO:DC؝cRP& g孃^<r�c|C)sVYqÚi\O NY6[;(5D+9YYYkZ) `։5oN*SGUgV_rn$'Xqk#(6cT G:,HC=4 0^tٳ(xVs E y/=H9],*+etz;Ey39Ig`(����X���ȅ$}HsH Ky"ǝ^eyRqX=¹LOJdsK'(>YG#ء36IAg%rr&&=9~ >p[y#jÉ<hhxzԼ–@\S%ҹci&#x,?zW;3|욟 %"'F Y�|.6mBiyzK T6eb\ߌswo_@#zP9a3(gPrn$ ۿ&2f/ #*y7+]KuLRsSaXl2rݼo',u a])+����Qz��X\[[[YYY\\|֭+W>}c+?Ζ0@ٚSE~8G6UǀC"vvyTJLi V����+ V���@XR]Xv·| $%^=nw:+7U���� ���+ VI] Ģ?Kj>/}7*.*@���� V@���X����������b �� V����� ��@Y~ˈD'V3™>sUՎ<.DcoG$/q d&riӦUȅe2}}2s_4TRfW;DT)<*\*+DC0]UDkT;�b����@X��+m箋]ʈ~kR/ɽ6.AK@AQv~3μW?WFn݇h߬XQy"*+DC0]Dwj@�����X-8/!FD 3z7iCΠ߮xb73whщEӼ2R)FkrsWwt6O(coKz9N57wPToU~ x8.x@] b+wAb(,,,))A"A="OZ!gEĜmXlah zE ?;?>ï׈3hj; ;"vtV@DTA⭛;3iF|y QBa˞>3VBl2]\3 F>LJ~KgaYDbQ%"=Tuo-WD,MqY%s8,дuwԔ>7YeՎs|CD0_ SN߯yj@�����Q fl(AזnN_NV(!kr:ԽX\&y.>~{o7fm7(Vwwk;LJ71ɟ<j.d2PwBId~{!-{HN߇%7t^o<`++/^D}ΝB$w#VvuFKoE(] b8'?x?Q*{Qj%uebBWV|A,Iu@GvJldoR0QW[u@t^Su#&1J+| +;=NȟJU`֟/BCf(y"".%m,+H}QS|a]Ty7CF:oëU#�b����@b%왒a 2=7Өސ/2F< %M N8%R\SlVL&ӣҲeBgW Q]+:̃˫Ӱ:RSrqNJ"QhśseP1 ^~w[B}+D|iEUyx3.`3r?fDE\]t:%,Ebbw'+ՙlD"|2_S= fx<)>~~~N_{(Ҍ/}Ψxꚹc|x(SRSW}=;=A!"E=Ab"ml}"#\vh{7ˡVX]9ڗbb:,-V$Uk(7t͙ VjJ8 b̌ӗ3W[g:Al٦GGEGr(a[+džd2[ъe:5%(~#+㙱';nc:""U 2d]KVcE!.J @^U#�b����@b\kƆjxs?g$V9w%]sC:y(Kʷ0v,p&'yd,Ҽ"NgK l o"F{ޖu#) t"MC;rW!g.R#t?}5-yoAv߅,C _-TLgP:ʫDX] UNEU‹K*E8 ~o[+ӛBXC<Hu8 Ea8ktɽw5APJU7HC;PXX]9ڗbb!UWWu"mH >t=<ym]սdgFD,/2 v~RKU![HL bE6IT2uBW)V<Hܨ_h僩)O[Jd.)1[%+ZϢ\!]Sv#s[R~XQYubtO!m.:�b����@|xbE\s+O<MV)zKb%\Q=)aWR<X4U^H*!xvɾ˪QX.ޅ'e]KΓ,9AWZ[vN|u t5ۃpLqH>s_/ScF=Uו\$ $H^.p=vHH%bʫEXSzdn~}bŃLg0t'ɗ 5C{x^*w V*+RT)VV]N]RQQ҂n+~bE"ޚ$\G-?AN^s=V_Ǯ{]5-<G#w J[ D\s*3$ X'y1A~o4fW#D1í~JmqY}C朕}HL?5!*ʉU,hT!o\Pъ%-B]=WjX����+X(sXEb&ּvOXͱR}%B<O rFevT)V*n/]]V]-~ ̼pH,;\U4ʻ{R"U 'ܬ'щب}!Y%gg~Thɫ:W^W0wߺ>ٓďJwYNJb߁X ^yixUjR]: * Vz1B,+fv@UӭAtW 1#S #AY 9 fJ\8ʹ\^p ^:rPN@Gܨ+g̡(/N$8>]7*5mo^@ Hi)-bwBl/n׏VXA'KZzO&l MKK[.]XdvWު-XQ|#wOl x\7}YNw����� VS"<|M)A-{>+H]ejQMxEGe H+%q%}ne03J 'y;Aazf&wbɐ >kE(EQ걢w8Hx B ) Cɞ]QJ̔+h"ߠ TSN]RXXX[dm� ����XG:TH+TIFcDvk+ VS֔=uveQ+3}I¬?Qٍ9Ti&Ţ{^x {vfE$$)RÁp ׇǓeㆺl#5 &]X¥XykʎtS)$WCjU'Vٸrݩΰ.[J֯>;;DŊx^~nd!\>DR;t%̞, ~i5C *XywbjF VY@���b����b)oF@&)y4k7W̎H$?v~-TڧόPTߤ;d3$E-ӦMfGb1#(8DOJ2Ndrh OfϬO~; LP {/+O^Xub%g!Wֳ4? Ob˞bEm< 䮫kZ #2rjqЩ.:1 ##7H+'v$0*/+߁ +GAX�� ����X �|(8� ��@�������@X�������b�@X�������b��c+f!?�� V@���� VފX��Y~ڵkW^bŊKΟ??== ¹;eO�� ����ʛ+���{H+B"\tc+WgVh>)XQ��+�����b �� V>vR]˃ȹ\>[T^xbXQ��+�����b �� V>vRSzdnyX+2���b����@X�� ݷ.!O$R].U 2�� V����� ��@X@"*?!֋,VTf��� ����X��~(Pn$9L/jP 5������� V@���b&-Pd (L{YyZ������� V@���b#+��X���X���b �� V����� ���+��X����+��� V@���b����@X��J7JSSӣF+��X���@X��`{4)�����X�����+�����b+Z榣+XG_HV.�X������� V+Z.brd9kwݮtiVmm}+���+�����b坊Ʀڪ.$ۿUU=8LC]tV{HccZ-@A]X������� VީXK+J\lb5,W~9p˩Qw|WnKPx73mL b<V=<{-[+xן21^`_6'CÑc)Wm%,esݍiڵh H6gZ,p[7oFK62���b����>lrԩځT+5Uu JބaC<h+ke!*s-h3r| ioж $L9 };ўʆɲu=+?dl['U_ KG;ڪYdS'V_iiii+ߚ6'V+ V���@�����neܸq.\Py2H:U٪`b݂.$Kb}0eWK;j4;c ѝx1LlL>uQR5Z7B j1c/:+ASo1ڏqجsfȑ#L^%6T #6t`1YK$Lq8\g}_lFZ5U.O驐3 (XQӖؽв hWC%.V5h#VljҎik;҉t#M"K!unBYs0BVvTkFN 6<|-T^G��wJ+����z(:`b.$X/i4bxI(Itfumf.s=aJ\ y>;n0$XϽZ_~}NR[|\%g6rH9測q>-J<qSVcNGxdomk(7k)%xLμY>(1USm& =;R(RFj-V+$.Lشi#Vl]ֿ{1r~r+hHJMuc2◔m ;Ŋkg-kiH4n!~ֶi&V6L V���b����̱V4[Lܽwj^rEՂd+,1^CrI.% ~44*yѭAYCuB5i/:~N:ǻSȿOǷdhk򨓆ʝC~2tb\utd9tqS4zm5b\YEX#_e [Y<F(3vnA͆IFcj<\ wwF[dv2+ʹ=t &=lpmU*r>k4RfCt,M׎uTvd3fcb��+ V����+nK]9r=V6%;1?d)q~C+j/u~԰i n<͋l[qOm%j[/nYCp5l+Rd"Y6 Y/iu: KQ.\I#E߮,GZ Pvɺ]F+*+w,V&ѿ$~1l<rwM5:Lh_Z^tcr*���@X���@GO… *Xz'_Z\UceH9V&Xe԰%#G*s9(ACժr>ok[K |k]֣UEL:?-4?_E{ϥT#cd(zRF~}!ƲNC&R/\X#v^erheLXQ[ GuB?mĊ9V$7)cIt|Q{/*$ZXA{ SzcEkb �� V@���� V>-c Ҫ`bbt<r1S>tG*4֕ }*мSO]9yE3Μ2sΔx1nvCU_-+sO\6NLK%*RRĮ}h/o!n(+jq&.6 8 mͷ1鞸ET}#1F>RS~XcEM/mҶ>@,M>' C\]LeWR%qX:'UJ8+;O5$Ss鰩L+/Y u0aoKtU4n];+oU|��X���CC+l}.$XA}p5<hYo9Sb4DoW {WwOO/H1rDkאո7nʉ]&mWȵʯ:?fGy>$7{Q:G4F#jlʊ]Z+d|*d[alL^} g)ilk|/\Lۃ\3FF#]c%ʓתWs%N[٭Z}6bɦX/c0iӸVVN$E΋bN ylx*+?PS>%gHHH6HO46`Z3'Lo6 ]7p5. &!1k@؁ȊKk,291|cc@ΡB: 9z X�� ����Xђ'y`ebEnvF cz=oݾ|`WyQ7κQG]rtF?Цi~h m۱#+Ln/ldLif5X>)?ifoϙi^zgNKƹ' ˔8Du&%&Mq! `+88tqXcp8G5 .:ȊS4hهqa8Pd]y ʜb��+����|~,be߁;vorAi+̛vC~CN>۬2sDzEstp'Z|Ѫ(.0' W7y ,^ȟZ-@);X=`4ebe >Q='>e�!gJ/T}d=|d_u$@ pqCȫ8@h{9R)R]zGG꠯:a::vVcc#.][3/ �� V����X]\4VYYy+L. ;}i&HA &cnj15ւ[Q=()|1B>X1vKq;9Yt&MǹMן놮 ou&&OG{HJ:8VE>=*Vz#K`2.mq0)=B;a[!&ump_`;v:��@����!n- :455Չ\z~ӅnM\�ʔ8:nRuqù&š#}\tcў).ȂKi_h[głTHJ_mBBېւ!=l=l{XpAF^y V������G!V���=CbpM1)7 홂sE'OEJ4&Vp8m9 1yJGl]mxpb+b2X*%}am7p ŸXiOËq "{kwКRc5qPÃ˝*z޺}iˋH\Y[5!!?L鳦� V����� ���=V&\{!t )1:L.1R5KSd/C$>gsDgE{8H؅H'ձJtȏu0Sx:AEߚk*1 E&ڊ)) E{?ڟzU-bP?xa lc0e-^EÇUwΆ=(Ʋ]MH,xiKUktkkRJkN2s^;|@��������+jX]8XtKL'0h=(](](HS)R (:}uuq?v:8Ȏ>g++VҾ*X ұʖ><]SVOs_gDmJ8 5OcEQñĘPA)YZb{Inx|KE$&Sޞ%{<IEutt/ZŸ+3XT7cad ^f&Dﴎ8MXܰ 4Hsx2$7P֨At1s.cF,Arҥ7fXAH&nh7���������bEP)hOsĊs.StPsDMJOaRb ӵڇCv=Btmq!80]k58>Ί Wǒcf%i#V.ųƿwAdqKݶ$?Tg0ҥeFt [oۼ&≤$b{a$b+bQqmstHQ_yKH6β`-OuMY e VJ)z ;oYdQ3.^@TÁ4'f"U@jft֛ȾW`A<Q?^ȦMX]p� V����� ���bs>>%[r4%kd/Q\#{:S}P]{!GCq芮}#9g#б:V<gu _6I tNa ΆcYrugĞX ){wHy AlbNb{DCO9J5؎>n:!U K~/bH;Аu^VY= a- ;DԟOZS=P6XԅpYurvu 50A:gȾ%Ҫ@K{R=H]:~oG<g.ZQbT<5`|@��������+ϸoq?ʹ}=pJ n=]F>NXѱ mZkg׵Οba ҳY,8 =dB9Gy,q>6A]g3g$g]n6馦rS b=+Zw:@j}^7 Y'127vԌc" {Ee/:[@Թo/bUuKXl\|6<=Rsv]"% ~砧XyxAV>~R|� ����X���Z0-r jR"MjJgnQM3{Sv :~2)5L!Sh/P=}ԳSSttmz,88 5vK ę \y%G:P{pFr`BVbk#m{)oAN,:{9D7!a{=B9} eWΕ^68!#/){( Ȋ'%Bg5HCx &fHHfs^O L/g\{sKEMzݕD[ BVUv蛚s T����� V���@+䄟H_ASt-I'}>9M89`R P)c@6Xώg/е pVA{Zpu9\]+:Gׄơ8@I[? (k1s-9Dy67fMN?~TŵVFؓ:LwxYoEp1?{XTxi\&`œdl?/Ԥ- "+p梕+W>z&MYQi+~[[UiOa>;eȲ( {fуREl߄4O[/=H9&q'w ˞\0o�+�����bE��Cgk׮]z+.]:W+?⍈Ӈx~-PQ9WIO' p :9Ss�ގގ}ž<=kno[~O THg.I3 357g6aw)Vr38{75@'xxq#Rw=9T^:JМƢ oOUcoNn {Q}ҳr+:DoN<>E~6C)A{ޮp^ƏHf6Qw #8݆?{T0 5`cqy޺mI2EN\A%Q.Cy("_&~X����+ � ^A%Od3y1Du ;IYI)dIi0)%?,ik׵ ii׷[ru=,-8l}�= ? ^33e1uRcX'Vkg#}eSվ'?kI[=?EKxm���������C{3J)=a%a 1n(!_,Uי?9x)8 8YsXScճ࠳Y Գbp&:Y,݉ķdv{%V2iӦͺ^}ЖK Znu4ZrX����+ V���V~ y濾uAN~΂NN bgei6555 tv@}@]5gk[Ztt&L`Md陰&Md5s`GbY#G?K؜zz� V����� ��@h+ ?)N=)\B9 }*nJ! 2I`lߩavϜxz];NO>=@}[v6>ց}-ٽ-z雳zZ"~z&}pcu{ <%(�������JNN{bgޟH�J8p�jbpJW3%+o'}[7n߸G;5{wdk�N' 85aA6l8Ol9}}ؽ-z-zYB^YzfLn ]w gLL"ǀX�� ���� VQ =�|Hbe1ICE}j$-<eKh?^_{s 5pj_8 n2jXv F},0pg_ׄ;o YzzY1̙,Yz tx:ntFSu={`:R<iėIxisXOr|҉_gsxyZwg`Mcnë>ƞ3XiӦ<g�=s)� ���� VQ =�|0bń73z?hwAϝFS#~&F %|{w.!a#CǙ75 5{-=]�ߒߚ&POϜӜ2@ה3aL1KÍ댡~茡~FWQ{MSD&~Z<H|<捈G^:ni/ MZ[*jN_{\Q �b����@X@� V+;~%I_ r|"qJȰ_MæE֧ij(Bgr dk:O? oe)5,>Lި^OÍE莡O3e=wObJK"¼d<iYmIfZj֥qa>79k& *o QK=OD1~<R z4 [o&.UV9GK™w$FsvXN 3f"O[orDЃ*>Ҏ0,T'y+ʻ+\HJ5!\PJ_%z\幠BdX@����!Q0Z:b1#zDNQe/%I]ѰKfYlgik .{zx>zi1Can77RyC)^ vE|3)+'>=z&52e撅Aqg&$L%x԰!s M_7ܯ8_:r?cmg̯_ˀf^L}fO3_ ݉ oŢ2a45D&ڋ꓉̘ ]66i5coEO䣳YEMOZid^A#^ZcY[AsHzÝ4vEl+A<N?wV&x"t1rxDXoj`'kE%n+HխzE Ċ?md=~7-ء+ +\sȔ;V xK<͹djD*beX@����!QI'i棧,74;w!V4DrrõoJf2!Rq!jeUˋ,=2t׏|؀b}񕖖['yCl�bE^þs~& 94}kbfg.^ّ3p d3r~3t ֑KwN܁6~}̙̞,~&_OS>~XX|j_oSo>f|zy1mJ9ѻ $ʪ�&bE^dݾ<6*:>>>"T̚9^~^`)β鼬5[Oh3y}aGz`yGCanA)QT4)X6=j<A آX_K&2B; ҵ?bEaw򕫴.//Ji8L]\WĖ V�+����|P|y9ٖEOuu0Xp"]j=a#c{eٚ%דy 9ΝzE,/V|1ͯ=93eSsKK˩ bL>uQR5,lokm<rh,eXTs6G9fupg5T #9Fl-T6H9=+}).@|[Sͨ;7*CB;pp2=|$Tn<Q3;4KΉޅ o3w[s~K{gv|ߧ֬Om>d7g1`Ԋ§c@K-wS31Dӿa06jTMvbE6gJk:w & G(V)V2wǭ>)K|&| c|c6+H,jU^sUM!"j#"|P L+~IȲ=j+mwmT!V|(Ġt+ +XY\Ɂ:Υv=� ���� VTbtHϯ^P^v帲hHJ,=g;"t?oc$Q_f$Jtfumc6W(3v7N^ʔCsJ辵gU*39yFQK[c5sqY9ܒN/湏Ċտ]�|b穂Aqࠣ{9߻~p}_)udaԚ;6|e'V~}Y2a}m?+A-} /lX|bߌ?/?d7aOoJƎ-k >>N^{o亊 ^OES|Vii�jĎ'>6nFP d]sx[y$)ŞaI>RWՄi VrA uEћ+`k&VO=A iRtM|:Ȟ^ԥXQ]|*}|L -:RsyܜKez(-ښ+�����>A+̓*sr>¨rw�dߠ]9GXi܆Siԝ54Q4r1E 4<Rۄ_62YsPsO&_y*d՗34^cPȡduS4z_46^}pWhy'�XgU_Sަ>='&&t'0Ї"M0c7`߄5S+O|;m|fԊ-k/ KgV/l`d= =+'iNheLQHxbI|�/$"6K yyR̹g_Q$V,1erLԭ__+ POX栞E'-=yoLHޕx!VP~DB9˷+r   5wOg/@Kx&vڴikpqMʻ+\HJ`;*7lZreaqse.\7 �b���A+J<)[QܝL,--'j݉6r9V&؏6;+H0?d)q~OllPs sqBa#\쭗*b om{|4wNJPN�>hϬك3'荧MzMDJOxX8Z?g>}'1>;7֬muda+[?szA>|Y0+tSO̼ym֖;sXqeux����� V>"k72j؏'XRԤJI$SU=^G'+ cB[*7dY~-pIw2UNTR1Y)#e=VcĊƫߖfuPN�>hb_ٟY1&&^hwjZ_si}&{zcI}' 4' 4 &R>ʆ5 >_X~nΟW6ϭ-韘RzO$11#6%5G9`׷f4X�� ����+V*w34V^t9A0}tqkqI9VZj斌 Ru"kcMUmjw@ %7_ *Ree4dhV2_?لږG6H~H-▶vƎ@OS4\9)2t-T ]�|b[KTS:1zO59γ>L 3!7O3{"i) ;ֳxb ^MzO ~n֌/c}msr/3RO/1 Jzc4!oADX�� ���� V+ӸVVN$@zRi#Gs]@m-9Lk3J+8<؞vLaSK}Azx$Dkא %5ڡ<8N̗HZQvM'}ٻU{/*]Mw4;iM&ݓB[ C! q! AQD6znsR+e*'ONHz>}|}F =O$vi۲˽ U~z@&)PT>]qwӃxu0zrt/r<lhd`ߗ/p/tRhA >^a 0L!4s8Üı&rLkDzGl[4!0!bcLL`* &St)�� X���_.*Z3pq=�`%adVrMa$`\?H8`~^f+x`1j Q P #Cq.4WC3aTCFC9ig#F.fb"(`n0YF7\ �����%G/p+4=M"ȶ0\sHi0Gd#u8]N jCA{{{Ⱥ{)~0Y7 !Brt<:ׄuṚ(6"(:VEcaXe(^ð/\4+��V��� +pQ =�+T}{(%i g8#00>:[h 5a9\`: rtT=DսD}d`z0IB"krTU^F҄q0:ecX>¨ņ V69Kϲbܳd� X`���+E5�[PxsÚs!Z P1" ֆb4!8MTvP><XUFQFcՑU$Y3(GBPQ "B*ꢨX1i8.h(zЛ!P'%G_= �+���`V�� VN:uر[d3Ɛ1Tc՘uij1tG(3at`TjUمQYtEL"*SΔGѦ(DMA9 Q*BP*4'51$u20mIB},O3I7be+v]\-V�� ���� +��V`%E5G3 l{>LbXB p&2[Qf*c3TDIPfyJVa$V-"?F)TxUx2,PEH<%FS4ùD! +Ø*o*XMAcǾ*Xo��+����+�� Xk$1lY$3d5k4QYH U(.VTDL":CUD`yd,+*ӤqdiAE CqLi8F#Ӄp,$G!j*Lsn*X]&K~㯽g V�� ����ʟ V�n޽ޮ]v+ O<ĭ+dc˰'DSH6 JQEgJ2"[QU!ΔGf+1Li^ecGɢ3q0,,GN(#$Qp4' JYD4#ɖ4I K<դOٮ@xf8a[]b������-V��-+$c4ϰt Ax}x`h±lelFatfatgl`Dp"14il,<K[E%qi,`4X#ȖDe"$IF.Ǧb2QheD,om~g'[\ V�� ���� +��V`b kCH ¡J-QYʘ¨Q@sy860Z V+ )GJӐ"%ʒƥF"4Qd(/ UDAYlID Y2yDDqL!R3jP8o.X_}ɹ~Cߞwm ��V����V X�@+Q$CF ǨCp*4V%6W,%RD၆*ahy(ڵG!IČ$'+1hQT("[Dxq8^cQtQ(a| :C!IDg EƲW'4U;Y5vk7������V��5 USq'i7c!h#pʈlE(2g#p0|0^ 022KFfJGb|vH#0P$+Q 2 ~ v :C.EBGݍ+��V X��� +��p+)L}$Ő̴g\),KÚ.%QY EL,)xE8VWjbqhlaT*:W ɑॡIH4Xʔd6)¨,aD02SXQD0 #ƦdaXA(NC( X�@���!X�;)XI )2 #&%"sqd} V%KŤˢXN@钘 e8'°p<2GIP)ť3>>h7 a8VbY R- C1aH%Fr5@�`���| B��wRDV #h2 (CȊ\eT**"g\%RaXIL0n$:mD6zlqT(QD`h"DSشQY°lA(F]% CqtM2]+WC�`���| BrνfrKb{kva^=J_=zKUny8m]u߷|P�j\Ͼ/9ߵ?z.䷍,1L{~~6/[,vϔ7}u:hJf}soAw+9hOP<"KS h:X"Ȗ"!d6iD8.M0\?Bg(*S<)Fۧ\E?hM\ZAlZAd <SQΏUQQH%- e2]+wB�`���| BrڶܡeՋ? Vl>/w>?~AV [ ~3N_vs#4:+O?ZwC9o?̢ g'. VtjJbT*JJj[%*JfH1" ?+BmB[.!?+ !Xʐ"וMeRSBW&%2/eztB!t}Fc䖹+ X�@���!XS._V_PQl[%U6wSʏ<dtfz_ Nj,ΒEG=md7~~#`e]sZl&KY_.[8p8&_7pPr&x mZI_z׵Xc5o/ƫ?g_V!Ͽ[79Xyd twYrW�� ���`vV>ٶ#]'C.ל憃_/͙ŕN,m\{rmOռw?Xi_PTl?/n[Rڍ-ց:޼O;`G*c<Lz??"'] V><</aw+��� ���� +}+&zϮ@g>t~`}s0ߜ\fl2wOY-+Ϸ kmL~h8X3f`baDߝt+>:Y1.pdןDoX뗿O~թ07^_�+��� ����]4>~-V>ԤubbG7Cf{S 27}&[m`+ KY/N5"i2n5yȁ>K`Se3f[/S6->;jV�������*X+O>d2982ƃ~`{m_a4yznCscnWtu7+gSQKմĕT<=Jt %I ��@���@r]?x݉6d⧟0+?~\lt767CǬ__gr.p` g3+ѯs7xУ=A xz5{,q:0kwX(y_1�|#%.].v}~ y.`�� X��� X\ѦO^<x敗׵M8e- *n&X>xJnwJgxHJסMnY=PȊ+AOl-lb]?<;<0~ 'nzc]996v'.~ib+xӿļR`0?iӃ��N� ���V X��V���������`�� X��� XW��+p�`���`��`�� +��� X`�� X��V����V�����`���`�� X��V����V V�.\8u'|r]vl2/.�����@��wFbS]<LŽq21srEGJy9SaXS!cfd9]-s5r=N^jiT édn<&VJgds|B-(|&M,2s*F+P@`�� ���V X�;&Xp[kG }<2kK <fQAe E 9xS!Kͦ"]( 9 ȶi9U/"M*UC3R]KϪpZ~!fZT4qɡfJx9V V�����`��cE[`hQ4B0JƉ2jz GV5ȒJܪ"q<ZCǨ)9y̖Jj Y! rYB*rK2gserg~\-TZ#i_7X8e2zoꌭ9>qOTԟy!:/LpAl9dԱ9 W=w1|\䗂%s˽f-<60ݹ#>ZhK8}?ڳ}!X`���+��6VcХy9i<Z8J'%7Uk LJ$Գ41,bQ-j0:rX*Qc`9 rp jd#0JAv<zO0+i"I)+O ^<wYjŧOόf?B+L}_hxmWYiӦ-;O_t]S@C3xMWvu/JWf3mZ~ׁ_ɾm1ζgi|g;:_T^kS{טOKgO۽;Lp|; >t X��� X`��ʵJ\)qL(yAߞoU9`Rdbi%$(`c+=R;+s jh0!,jzwEZkdḄcjFUJZ#m#k4dS}rW~>"WH$+FkyB"-[>PU2ms_u |W5{̅+ qU> d,:p//Fc}hQ7ze[wYv/tu>whb0֩݁hktۑ gnm{||clDf=q/!g_} F>Ï7h 5 .㯴"5r#w÷;U%_jK_G�_-.7=Q궮>v>v X��� X`��ps8ZIZ 'dcD41)2|*EǯYQ|&V Ttj14bb>#9BO)9լUz-ղq51^24'6(<&,?P@i^ V sh-Ae?x*xY>zƢ ϝ{sG7ϟ.e,8t#OF#[6{}gUp\>wUtS=7Ow&`_{pG0mg@[[x~϶b žє⛻hz4ڻOm]<}ENG~ &O ݿ HMٌ=hǢG5bѸ2q}dwI#w课$r?r7{g?Q3*>v X��� X~߲o;ii3-ͬū}${˺?ۜqCwK;goͨow:Ş;dƲe낕b Ȅ9ԩ4EBEG*Du224 DZΨa bYɨ.40$YV4^)p|&F/ q~Md2}|Zjd4c?"t *Б$x)5,B/{țϽe FpӳgϞ<JWgHN8 2l Wd“Ԯ8кܽ/5v;̎ {FtUo}o>r.;hf4 rZ8Дÿ_ hǕϊoqms&޻qS/U۝N?`.8%3Qt/>Kf<y܋K,D_iu+����+q[[&ҧ^9ziO/+NnX.yow :9kY/.>rcpv`Ԟ1sIJhzS ĥbT"Re;%K&cG*D >MY !Ǧd"3[-&Ydbxf%MQ䊸x6urP gRJחW\UfE{, tӸt` |l;�Ϣ ܳc`\z]K*uz[V*_ s\+GCϣ8@ n<9E!Ԅ6Q)՝_v>֋LL]нIlmgI49{dDZy/U}r&p)MX| v"_;;����1]zuˣMF3]y2}LdMy%K'4:m6dڒ'{~}yfsy>?=]V\FOgrkvG-9m^nwZeoǶ9̇K͎_BwnnЁ8 .v_3l . V<fFJv-o,6I}RǢfYt MTI.=Ӫei$$hYn[O`2D\B>#`aZfppE\Ŧd)$#C4)>{KI)fC/4:!}`ǂo.{nOs<l8d]p킕VԂ_^:\P 9քE]WG'8qX{ֿ$ڝ@37ζw>vW^߈)n9v8W%ieg UO׮gZM}ܱ%:|%KϞt`͉@cgq7r)ngzm{Q6/{u[Yq_}Nێ`ލe>{ct|@���@r+w5N=:w}./}Bg3G;jy@ڠ{+K|§Oj%m?q;űڇ/;f V>^:$N8wSR)2EPz-w$ . fD"NIIU)Q4 lˈSu:šgzLZ+4L20[jEfN#31Bz1sV>,"9470xjKSQ9J'6oM_|9>{cO;Yl(1o_tasMß]cScx̾Ɔ/C/G۳.zꉵ-^4hXͯ.k>7nX783!p;a;hpCc.]dƥC@ÝO6o6wh#b[PחǵȵcOƻl{h NW-w/U{z:"y&ʇg/^iZgc琏k@C}nG.o't;?u7|@���@rg+ߚǗ"ue=ʔ=pb PO]Åg^5[v?w+V@ef0X{zw\k0ڂbԮ< h|n nu|9Z蹳N=a׹8wSbzJL犹.5ˡg[%<EA'#[L 0d(a$ehUӊ2'ߩe%dY[R0L\lJx9jS!].uXt¨BQ-&y,^_"tY2>ka7I>pָ?\{MmZ_9ǂ( 5\fLU %3/{nf ` [84U䣳[S>:`zMYlDSѰd+==]cJΪ{Q¶u>dY2mw/Wz.ߓ庢{u~Sm&[->Sͅޜ,_߻iIo=tu^XpRl[wאR}܊Y%Nj7g׉Cۃ+����+w@rU[m-VohrgL֪@NGݿuve7bgUيr~bp|hp5fG3rl8g7n N8qu[ =g]y|VJ *x.=G]q[Pȷh|jeTf,D; 8> _Fo4\\k$!2zc,|&F'T\W"ٸb.NbUM7)V JuυR{l+����+mW[\S{G7\:hʡzs7Y]wڮX=i&5FSѹ5eYyŶ;?&w:۱Zmpf`Ũz-RAkD`Ql:f0jK.]ǠGjĹu2!EJٮM]&vB6V'#:"#G'4)ȥd|&б)vR@&V񋌬 wz6mSp#<=r[mmX:ʠ�����vu5'\a6zOO_<'V˴Ŷ/]8{t~y;>8pug[p~G#+g[{Лwv-v/~ _V;_]5Ӎ0nANss߱j~xpr`E)" rb^ 5+ncj/RX(`ay"ڋcT_*RqOViUX8!1rjcYܢ"˪i$D1/`cԱMJZ_4yt!+>:N~_sIf`���`vV"~>Ҝ MEhvVN[j +_zozfwO]!غҩZ+vhJW/v*v!wEWӮ/;/}6d ^+,qq`x ~Q7;53]V\ZӲᵏ}Jm/i􉪋Vᳰr~IIsYt[RHtX ~QmЮetfnK^=5wNĩL3w?`nSީg iZ)EGgd[ST~KD*D]W Ir~EpZ Ţa@�`���+c2T�_VX9MjY+ߦa HlrspRA#&kd>M%$d^长ns6kp {dȰGF=Բkݺ>JD+)v-CQ+CJVd9f%]#%iBIɨ+��V���@ ioi+;�_VJm1eQ3,;[7ҜzV($_W",2D\\2}-<<r.w}Z=2ݏ.I4 ]jUU"M$ `|JT!ZюE|Iʼnw*yUeYG/\5lSu7bq�޷yS*Ko)G6}|h"|`���`]SY8�#K(ȵ>;zLQ.H'4Jl\`b9a/瞥!e?cyhc]cfK<R@y, z- çg .^_QVϼj ɼcE赇pyo2|{O_[́us`嫮a� X��� X�QAJIOSr7D0F:^>Q1AQW*(254Pƿͅ1K{m(ݷtUI[EGn-u\AF1))=SO೰Ȇ$<5)ʓ?mrhe[̕?prtW3ۼ {?}$:aC]L fN<aŧNjill*TU֍9ٓ}tvX<ds;;>_4m7 jVCm|_ ښiOttv\|\[>>Ž/OOkv_\6_Z7e &4U>0"yw&6-7cڪ30֎uKg �V����V��V8C!ݦe\y2ZsX1QQ@4)T(9C)f*cyDġ5k_^w]m/|/|`Uʐ'( 7B0YI Rf#`e+(W#%YX?W3prVk_uu@Z_{Sz~Ÿ2ݿЙ󻝶 ]ˋgּq ?os``0'N-iݎ˹l`k*/X} ڹv['c3XA{'+je͇u|ubƓ{+l[z~pޙ^g'.wltl3�+����+��p'XQR<fUMWILJDZ.#K/:,%HXd`1lJ& ;chպl{O_^o߻dGY7>8cdv-]'egb%<MZjjeDvK!$c×֌ohݣ&k�JǗ47iim]ht%޾*0KJܛtS~W墕붽 n`gWOou"PҶJ 3`Ǟ-m^<>9<}ݓ}>:{Uvw'Y[TL3�+����+��p+2~`RќzzJ4)TH+1((6V'%oҲз[Z^0zxoTV=ս5aΉGE=2t;mϬm՗ v]C׈G! "#ƵVJ襶|yw:÷z`gX >,_;olp`dyrvUC ˋ'vyޱk{*=?<`m_72+o~M2{z>X 0>ˑM%Rd?G;٣Kƽ3?ʵVvMy� ���p+R�t}~B"[4c(Jx9VZBj$|&Ơ )EF,w4B!=->zTVgf=CX[ŭNK[<<b#EVYgd\53qhh =[31b.A)햏}r6О~'`t,k2s_ Զ/97e q+YJGwG7>b+? QBVrKt VZ}-+}L3Cw -}䭝1� X��� X�;8X), j%d kẍh\%(".M6R^Nal:!cŔۊJ O[,$I&㉼Idʪإܻ*)qX\jIyȪ2ZVUUϑ/UIv-COJ(eNu5m5%%ŕ7}[jG7/tu[2mڬ3?qaGWUԎ=k@RжS{VUTխrׁԔzd^7XA|qE4uىM F͚5k}+<gO]/+}L3L֓ʪ+�������9[ 9<zRJ$t'-Vإv[*sp'5Yp!aBB C. ]>8delܳÏ?1s|ϑS,VJb~g`t2r5g(u^f΍wqo#f@���V�� V6V!3qlJ8/kԕ VI"3[ 8B!̑7ul)*>6oMZ塡 Yvds:WΛ)9ng3((\*>ݤdj1٦eTd"f$2CoQ3 X�@���V�� V]"ALsLJj+0\Z& 3PH4R*^NVr-*FDsR>ab^]$$<#SRZW( s&-*$]osXJ()`4Rr}p8mK̦C�`���+��ڵ hY<:J_6U"2k*0Z ٩gT{[e^ق 7M^/3$ dNU[x,!=jEOA]sX&E-!jd �����@��wLRȫt]zRLв 8Xi~s Zv5[ƲəlJUCk͙o4LdVQMJZLr|V-ŤBaVNEV<un#ۢ#;t,|R F%U/z} X�@���V�� VLl#/_+6FV#S)m, ,9? D\)Ë91MN*|#ï+T{VEI1# XXVb6K}"BĎ<za*d8ukVB6*Q̂`�� ���V X�;&Xn=kB[9|<5gU sKlABe$znѳh4q^^NkJ͕CTˣg0:ŦY>'ݮe X2v$3"sf+[9KBmѳp] �+���V X�=XqV-ݪ4,*ze_%BG-sJD"NNQ+, XZd䐱#)4#$<<ɥfh"EAFBJ:Y'(D!Wbʥȳ"3XPG*|gs;]R� X_���@ ��J]H-&+$c!\T!.2qT"FB~GSTrؔLf_2:9e`Zb3DX@"Jqktl/[%S!p嗻xeμkr^ MtEuic7rfes+}��`���`��+൶akNw:ϑgV,RHp~w_4 31#ؑ"nQɰ>{^Wl9nˮe4R;DP*lMjT5E#-)t.5KIx"ƃK7Y+Lw|3W+��`���`��+M"by<Ze,ڸU^̲Ĕ1qr"fq#L!g0<qR#;KyJ! YO>#ˢMZ#,9>[T٪+<VJk幌̛ Vϼj4{rgc7������V��5QEiDήLlPjVVj1I%"R#CٔlaC1mZ^FpYÄ]&;t23c+.,/`*=e./rN^3rJ1sTdrW~M঺ߺ~ZV2c3vs��+����+�� Xk /ǩg\<c,Ֆ<&NHԖj)R,jVBJDq|&Q w>"^Fslb0j]tX^3ǨEDEe`z-Sb5K*%0xmWǹ,q+}��`���`��+M+XHɧgeN] +w2ZW0VZ;lFB2R4MJrY5c^BRgKJP&ZFUcU1M EE+<f2OkR:B:Bz]n]hrrg]�� ���� +��V`ï).(4C2*B.ԙr7T走rj>=MNhTm5RZJYbe{L\ԣ}9 Akd)/N!S)m5jd%|lӲ\ 73xspT4Nrk�� ���� +��V`Ŭ9Jc*UE|*y,hS3]|UYo)9MJ 2Ne]}ebȥfyuZ!+ȱi(^aOX-pEf.p Ive n�`���@��KsjKvUͬ.*h6Ş@"e` r"2-rj]'**B62dd|XXbMl)"ǡGV.sr[kd3UOϟ7I7E5mYPP-i�� X��� +��p+zE#! w~_bV{ 4<a,d˜Ev]qAoQBakflJwA!?KjfQQMT0GQ V59%6NSI* _7i%6n]cir& �����@��wLrKJ��+��� X`��`�� X��� X`�� +��V X��� +��� ��@���V�����`���`�� X��V����V�� +��V����V X��V��@���V�����`���`��`Ӄ@/���`��` (P X��� X��V@����~�@WkP@`���`��` (@���V��5Xq[KJ(P@���V��V:,QWP(#F&' KJ?*c!)C㒆&D'$G!?Sc2*398j2p9C%[ LFVZFIÐ2"q$dÆ'5|TzJzfrf稌V@ ���V X�;&XIHEJԡIÆ'9$XR% 1lxlBRLBriCFJI]RfaR1ԴlP nEE_]Zq"e!%#3uȤŇ@8"-9=#FfrFFHBJzf2+P@`���+��$ h2bԄؔD.'ԤOi3S%$$&D%F!%1%&iHLbJ8|//~othXL OrW=T9\ZzbZzRzV+P@`���+�� IHN>"(4dC$' ?GB`H:< m؂S-V%2>):uX2R$=PiX6jȈ@sLJN5ًF`ӓFG +P@`���+��$'IM6d!HM\B4: 9(%)9!1).!)6>)CbўAL[<QR9ÆO?" m2"-9\e3`ò8\,� (P X��� +��p+hW! Ih24)3+-mСÒJ [A~ǻOIBCPBRY)T̬Ԙa#Sc G~LK!Q(险a)YC֎HJ$^7XRW_>ܱ y7}t{k3q:ANY7#e>!khx>}o流KgN.qFtڼG[9mj6[S:Gw>7f1[잉W=нU5E/+���`��!I0%'(> m֤ħ t:СICc<L $,qho! QCJLIL XdiCխl^` i鉁[%R׿+JⱛWUS08,:ŇLKW}}lw?+iXͮ-g@}Uh3oX}g?u-_~fWK&zw߱=g7T`rC|i%E'ˬ!t`���@��O22mhz!CS&]2$a\"V&NCAXIMJB4%D% M2PRcScⓢ+VS2xX܈ݗS'ddHKN+o,CUL6oɾ^`eh6Uz6`:Z>[yLt`:+,ۺy+fbo}ЊO-Z;RĢiEv8qIwp`ߓLl&uƪeNdΪ/_u\ﮭGRKDt7XIĦn;ُlG[7=k[^C;xBM۶>{~;ϗ>%lҮ`2[tdC߽o<7dYmü=:@ ���V X�%XY >:DƦKB[!C%Tuk bR$ e>[\ VRGr 4$:!9*&>"!mre(ԡ C%h:<a舄# iI) V q!iC5HK{)4~| Unhd D'c6WRx$ehxV ӯ/XCK6{iovpק]l1Mp[]gڶ {g/36<&OmX́>S^}qЀ"<}@BWb~OPԽ oUpXC;赇g6{!Ԃ9sysz}LjmCc^:p}w+WB<|v:}Mt#(Ƙ3;DR$TDAAQ:C. {Asf>>]w> =z5A:X���X��o+O sܶm=u*4'B#D&< +AHml$l FFzÈfܙ3YIsY9qDZx*VXj)z<H$aYqx& խPΎıs~xmmCϠSg# [9)ZO&:6QS\YuY$n ՐE电WIKZKIѬJn]IIUNB'*dڶTc䗹V9H=oUcXQeKI$XXF)! ݔ/!u{Y<h04d{Vwy]<չ8QN? ;9)ǸU&gPci.*Wשּׂ9''t(ݑvmKYt�b����b��"V8X8YX8;D]_nD" 54T-*۽{; 77;À18 '%y ,FX}<̬Ċy++;03uf=K8""L$ Hu.LFb"y&+ʋK(WVś#=W]%n(V<HGMI2[4'S5nZHC#,71&jZ5Z %A2О˹eKm,B_~bR%A'6^ ,T8gkoiVI.^ڽR/-oXčvje׌\Gƪ| PA_O_g+-q)9fdeŔ/X^C~6YJR^YʭH?SF$E@X���X��+Xb@L8&fL37dcgN cp8j1 _;`@bp*B$''2kCYq,l8&HVcQW Hlxnfu,<B b&قVDM65.:GQc:,ՎZVN!~\fb\H_SnGݪ)'.&!WMs1T")ȦֲXTF,eX,U,oSFQJ+8R URuaV4+AZo Lڴ 9MOK.M ./,tA#G#Iy1tşm9MndUo%/.RXZ( 2Vp4o Y+����+���"3ЊPg�qp2o"B]b 6^t;L@D"b0 tz -Bbs9 Z'IXV]ˈcePDfu~l3u=g,d8z4 9NIeU˧(z$޻{ݞFZgAȼ#gzN\rq4RF[.*b$ɆKc^A,U֥/1v5UGRԬ?^6M<X6 i{It@[ܯpDRſwU9G.fpҥw #opc)6>Y2kEj˪9PTrݴd bm||YaiKEYvtĵ5qUbA:X���X��o+h%ZFZjKO$XXxj0p,B<"Th& ZLۑm'N3aLTBϸ~ iw^aLIΦXHhB{ LlIST׳dE8h.fݹb$!&*.!mp MfCh/\VOEijذ\kyEi ) WB,ei5KYdr YqpH,ԽԆX)HKH_5VU}%&.R[jd7|eqU[g$$d_xUk%)11 M#gtr/+����X��  sN@@իW]]]B`tJ؅~4adG @H01D&f<u6O.D bؙXZen8"=Ek1kk1O+DӐG3R?)ҔJ_Zo`IZ V@���� Vb���ELMMUUU}X1  =##KOOv)!eD>Q| po @ b8H3eQ Od HfRt,lD<ݺĊ1 …aZ[ ص?Xɺgp禯:-434Wr�b ����b ��HPU hf Q0X@bѯttkhUhdccff32r13bbpTc$< ZvzI녹L88"#:Ɵ6c\󃉕4gKUySSX ���� ��XQ2}P1Xll$fv={v޽*VU+(J_KXa\sN^^v G[lO0BB\%~ʺ:lb+kI.t ??+ V����� ��,VD uFCRVL8q qwl"TiB BbFttkp8 3aX,#=:MȾ\,$V"OU! I*ʻu&Fz,3=$PB�b ����b ��#VIxff<3ȄYXIē'E__'ć0ѭAT׮~ 3Ⱦ&Զ VF  20jv_Wuw?y3uBl" Ă!0cx x"'JٽwT:EҺho(#**PSmz mM_Y� V����� ��.V99H$7۾;yx8:ttk֮ 5kmx6v1e):yAZa-x;]Oeful<<L8n77iprY|\WKs˨ДEU}wTF+1 eXYFR.+agB VTX����� V@���-bF<l\t<4Pòfѭ`xHGOB Z)CS#-(f拟W3dGH\tԖiH;YUw(eHir0[r@WWGCv(nmPTY>ګ/*Ni.p5Bh;&}GJy}-uEU؂ӑwCGMCWSREum[y5)[N¾nd5 J+JJ{eLMu*r*acp.ÇᥢWbokuVWh鎲/){tF=F+����+``` �DL<c+$I\˱e0 HG+ ( t4D"ptrLj־eec"2Tvֶ'f#݆C}c&æO?y|MOR?g"O?9*Q~Ej+țhp\jZ6J5,NVZ#Wicm->*5oDfSנIRQTb鿕XHuVQH4ZZZv 45W+oHvѺt/%Ҙ%%w\OGK&1<QQѦzu>r7>|8^*zUQ4SxGz%TSvN+_! @���� V@| __�D45$p02/b͚b1 m= 쩓֭# UX_^NTN  e[KFWkGf݆Qևl~s=(-,_QTI^NVL̦gZ+~DK.mbo`jllN6Yklr=!.xVI6(paMIǵ{Iuߚ"p`e/5S6hV+ohP1F}X}vq;޽Rr:fƴ0д|xhwTgbpaPu ����bʧ˗/_@�_%VٳLcezzjO??:5 Þ=;7m"ec'۷5+KMIK .-uKOGV_g@Pa_AMFkN{`p^n݆ GzF{MR>!VJv[eGRY\OY5w\5XҺmaVq窽RgI*>_4hQCd+*R-ɑ?^薉2JȩFQeMkY8y"gY~_ȣP47'b~;3W[I]^c����� V@XAۿK bpx ';wn奖.HFb1bd{9'$$'ܹ O3!w>yt~K1K@O-f)Hcfz)b,NRR9:8܁@5Ғmﻌt[%pt 7e.KS:k/ 58++iBKZqRJ3(VGWTilyZg%;i%T)%gNʻE} q$ ?|8+\wtOFΪv4wz V����+ V@| V�+V6oZʆ' P꯲1&p ekqx,ĴuFVVff_~z~#CՇB@X Ywbg6Joan%~=ѱtu~(ri-d_y䮣7RwsV]4 nY Ut uSКx] M]mm mOi*+**)*jRP+kiYVjr3?fE$/ZiҜJW]SC]]Y>{&*Z>/u;gd`{f>F+����+ V@�$VyyyxXD&Z Ȅ;yPUEy#<05oe&!{[  D<tQ%E'1x<GbqXU`qfϞg4]/Zˋ a߹k};yy?I_E @X���@X 2E/+?x]sbEF`bX=;i~^^N,e`V]ǹa-l8Ȅbd%qx<cܾ}#D&,rF,a&uu:2'FR/-׳I,V"/'+����+ VUx tg u&Vd'7m^Dbcq8ψ :'`p7 +)nܸ32`08>~.\& G|g3 c#Zd>~V" Ƅ'0"ÐOn+ V����+ V@|X),,t4*233__d�2 ^ׁX|vf$898IlLLX<Ȅe", lX٘8X\xTjb+qC7 X: : ۑ,lDT0FF#s5]Yjܬw,&ۭ[N࢕wGNb ����b+!jGE o<!]49o2 "X V5j"1UxPNZRRF%js;+====4_"Vfgg?G V \4x ^~2h�}be&uB<$$8`\FL±s0[ZhsJK=ә5TC[HeM{nd`gc3pL8V6&Xg!2awvvE+Kͭ[xhly�f-2G`b����d;~>𬑩Z4sϾA|_+V|%%KF( |ťê7dj}byEtqqYJTA|X [M^l}21|EG`g VCpq.'7:|'qr3XBܧN߸Q$Q@W<ЛՖ*d'AD g`\Q\޽ ĈH,~.P넸Nꁾ<E%QV6&Xb ����b_/V=9_¯~y_Qjh[uNwE>|x WKt#!gܓrD֯_YZϩ{zn2ܽҿT8K_ʍs01V7/wLHZշ .,%#Z`ĢKbdW%ީwg`bb+b#Vaƅr-bG|@;艃hdM}||=[EJ^T>)#cׯzZTwNfZ ' c~ݽ^ae#pp؉LX.nVo;D{]˾#tnn6fús֦xK 6Ȁ#2Df K[Č;xp@bowbX햟xz5 'O+7zɫmf)B@X���X`ŸN5'xsCO79Bgb?P*$Vn>b8d;Öި{;B(<T($7xb(ATTrTd1zy]Ǩ(vQ!gPg&-C'3OF$-]?G2_WpbG~ DZƗ߉mI4XOסv2VFs96ۿEBbiQ1^>VnV uf$I8$yH.ٻ{SJqq018AN++577h'a׭eL8OdD-v*4֯&1OYvvvrYB@X���X ˆ2NnT-70.X0᥷$YT<X'O'Jyx&h\WX&4 m@uR|DEEǞ3K ?HAX11$&.pqpOyTL>X'k3b |7oݺu~ubj-(/&>dUb 'A@UR|-R_fJjm9p`3 Gdpz6:ߎaPTaca# rihww&݋23)12:xpGmi>6&fG'^H,G b ,X qZ5k}X^],---x=Ì@@@X����+{NʂX.ePB<#2DDD̽c Zd0NBZ+2V0-)g\ʠbX\v 9be_6s/ٳC~ ,:Ɨ '"65WdOޱs'ҹm=B+?TcI@E|=hv*>2SAYyǎgbL"ÑDŽedOi ['Ĺgӧv}wTiNn;<jm;Dc�BfU5t_ V%$s *vkYAfR{be V�����ʷX9)acT&q,C<[jbpߖJr,++X 4w\CIK5h.beb8E\Bq i'b﫱beT]Zm\m %w}rmPkϒX1 bkp6n▔*/z:{ Ǟ8Lx"ct{uH`;]]N}gks ݣn, Lأj}=%f@`<qFR@ϰSOKb!p/VZJ%"WծXce V�����ʷ ԝl'r)<{鉡Avx`Finҏn5)7.Xynsx O$(Vx'ӧrA%#ƇUB+V0#3Oni是bƩY*#}9C 9bIBޱK)*V=t%q-J3Wd$;Zvz0X#"  '֭Rd J..F\<LGZŠcaع^NΝ"'Nfٵ{=qgsWPQ;_v&7urI9L`ee:)*AV``cҳsX@ʝ;c/ meE5>w7é@+����� VU tdQm qRN4?rJ,E0sUm ;Dos)vݿx' BWQ$Y˃ʁRN(%Nf第S\h3VEN,#i?+/===4_2+'ђV>k`*wWu{NL~&EwÒdY?3VظAD|.+빥)(KJ>rt{4tL؉DfƓg$xxYvPW`{8/Ƕ[uL"/xQF.:8|d/No˖uG>zt??ųgĥ6c㩅oYO30Pեq7L%eLV[ V�����_ V(VXcЁRʷ$3@U?ϙ�r*N*D mXؘpDz:'Fsre%7S\*J=qFF jZQi$ƹ& g_:~Dy_vw0??'?gte5w2~˾w6uu)YYGE_04*1) 1}** @�����o+\\ x ׾l ߊoi:]X&Nʁ#ҋJ˳q0m۱Zn]m¼kRk/-ln&wExHl޲Љ#'9wmcIy+YMUcķCd"XE6,$,xMg{Y ٙ/)^{LG]FZZL;aڕ@@@X����+򃋕)r0 VEU@G[RI]k/yX7^d#O/ź}/DhkK9kTUWST<^DO`f`b=|pR\i)>w"pR\C`:V'''ڃ|ecg޸e!' *}R@@@X���Xb^n�@&V8*I78}}C"FIC'23>r-ڼe]4l($G3IGO >#rJ\A@HPhz4;'ǎ];~%wMd~M?o=t́ϩ夤Oۿ ���� +/ V�/+7i=qZ]S1H]KMnρ,f{SDs]S1^˞X tuⲚ'De7l(,?zJUGW).XI]'lݲmޣ'YIȀ lؼ ���� + V�+"DU<)W\pY]KYA1Q>n }<rJ\/IXd#)qnCE%wه%qpQ;y yΟn8rZGUUdee9u۸y~b ����b +�݈rĉb2Ϊ'E%eyFYU{k=yJB) E~q^OPഴcbr'Ȓ7mܽ%tM;-*m;<* O^9.sA+ V����+ V>K@�_'V~=tS^U7=-|a ]{>&!~GuZJeMGȞ;r؎l/$tLLnzR*zjj2ަde[~eo6o߳oQ1}~9~㢇OH\dp#e5w"#/b ����bʧ�{5�b/+B ����b ��w V @�����+��Xb ����b ���+����+��� V @����w&VFGGMMM V���b ����Ѿ>T+��XY1�������?-V?>==] X�� ��@X���@|XP( V���b��+ V����++_F"NLL #���qy,&뵷WWWX�� ����ʗׯ_# /** ��o]OOO{{{SSSUUUQQQFF��@X���@|Xy%0P j���~DBCC_~e/+lJ��+����Ty-:99hjj)+++**��!xArrr\\ݻwCBBBzm])> V������X Zfŋsss eddٹ��077b[7jao>t1 V������X/_ȸ>---M���? uuuUUUܴدXA~~,s$TgxyϿ ɮϧ޾}l°Ab��+����V/o޼AVP2===999>>��Qlii////((x׊jA7/_>}-9=57PKBK7o^̶fMMy?lj)d}_>y b��+����+H !"㦦&&&((��PQQhW>}Ly\^ڪ-:_{;9>?t~nWϿAXz5y{ЋOZK{S^Uxct��@���� V7beɭsd,��) M訯/))?޼GS(#{g*JFÂܸ6=5AXḅ{:_t׼odտO>;5ڝ=T:\37Vbh.狕yiQcwCd -TSk{T_냍bbױq11~ȷ_[W} zA/i)K*kǏMM-=+vJd))g'LJ*ؙK#țx/<S%~x@����K|V/^ GyN��:-)qlii Z/zQS$1u3rk嚘kqj9tD^h˩c8&j(w$ikgOf'fFKznD=,z07Vv՗Nj]ıoUBJ&rjuT^%ыO-y_/&G-dq +m}8:^eD4m\ZC/]y=ɫG MNu֐ZԑH)x@����M,Ted��x] mppʲ(o"MfKrF?-qթmV헖Pr?38VW╞W  l˼l}.Mft%4D5t^J<V%٣'HL<U=NF>6U8"=v*i=R69״dկƟ7RҷꧩbakYJL\\VAqP}]91u'mrN l.J9 $ۜ5RQQ4wZ;BA';GhY$SMevbz˪*=tuiImi 񺸔:e#s95m:KuTl{� ����{zed��@+vNMM=|[3VUf_~|Q~싦aM Z$xT$x/Kl-,k/nH+-NYߵlPXg˂�+>éWS/$8w_Hqλ5e3jng QQQp!}iSU]ڔ %#+W<܃{$UMmdB΋#MT)"fbbRDz{8i:2C#ݕR"=EÔʑ;*Tks{`?:Q-@D?ے6YՍɲP6 _1LА5 n@Z ʣkCjH;ﲾ}DX]g K&\v{� ����G ��ԒDt6WO*_>,|P8%o"6t$/&C%M\koWCDG{lGWnO_`y@EGoQKwaKWvKihyt?<gH;(=oXՇXv%\lqο:Z9Yr>St=b:F/J|Ӡ%;Kzb'd&gTdvYWwKLQG[RN̘ȾrQ́H2#݊VeYK,cZMPFGG JH? TH5D6=Sԋ |Dќ>[ge5h6cȾMQHAKϬOm(PoTLL^BeȍȪ=�b����@���Xb죁̉IJCbO_3ʾ5۝ۛ30PaG=y=E)Ewm7Td^4Mu?y2ۡߴ5|[uWՉ[o_l2u][NTTT>mMu4sp5-G{SES$5S^쇵oX6Q X#[eTM%'{l[שI1*ݔIY&rUUX: a@z䫖[Eg1 DdI'dQoX!_25)k:H2dIVu[GvJ����� V���@|Mo^PgrDŽ^XlUPyݼ*zS[PaykqE[imk^CWIkoy}OI]OicWEC{a{gF[MhY_uԌ;{$(cA{KWϩWϦx9b;Ct%nuRߡ<,~׳@I3AѽF2L^{7er*Dv5'y( cT, ?j{@(V0iVZQV\)AS{fTVV%MƇQ;s^^JLL2o9(H;7.7;Si7d5/4>X^VKZZ*7jO)C[8<(\9C _ɪË=�b����@���X2ՋW/}bz,ou:o0Zs5uZS}c zsk 3*ssK23Ssb3Jz ;˓K}/\*pz.64X>FM|{{PΝ2JcyXXw,\AUEb2`c"kb9ZN \OibA/ܓiibOb FLL<gkG`Y-B,e,-'喽])D4.=$o3 G4(Ǵ=ۆ)k a(? >'.5sc  V����� ���/+o^ÞW3sS1'B=;ҭ*L-:},K*rk2[Sk[ӛZ6'7fWvw7'U$ζRa#ksvR^9JT�c%95>ԙNT=GM*M`buyX:'f=;jwN*Ғb*'WZ|a/*DR`<ĖFRZQIԔ iI1RD5N 0EhrTb(S#aWɒ =B,jCfH$Y.2.JdAx@��������+_&VO>o}P454|}7K.uDu66շe'566$4&76fVf$Vdŕ4TT$DWF'F6h`tVeDâ?dUL;uauL됥''KYO{=�b����@���Xb26"gɀK=1UvaDVUknLooh*okKlOliIjmhIJo.(hH+K+Lɹ_teVve{>MԢ/Me[QJCOJyr|xeI11LF}U%۪yt[=�b����@���XRzȑ޹ ;a5ަ 6E^ϕeʻ[s';>41q7A{[JcS\{CXOk$/5!A\Y̘ʼnW+|JmتR=lTyѸUi.&Vbb&c:EB �b����@���Xb JֽA/^G.5j.6ݶ))_RTY2n;%!*:!NkCXKHOJNM|zE\zyj^uF=ϴpX?ǘV^fJ͑WK-+?i{93r*�� V����� ��-V߼ƫg2'#| S3$]5j|2JT$F%Duܽ{30;,VBYhImDc}X[CXWBVqxb>%u4>mjkwJ{qq!rjZ+��X���@X��ӓOdžOTRh_`G{kMCwa{IN׃̘]mc}m= %59e!a7o$747ׅ5F t'eK NIS{\IMʭ<ׇZ7ZTܚm|XpQ}Xdb\AYrJCbn/I6/<jP.$')%<..0�X����+���߽Xf}峙bJеNۭю5TZDo)nkHhn)*.(z/Fpڍ|J榈ά̢F%Iա>i6w/ܱl 4mw{t3JMqyb!ypel;o[el+^_.V>~#I6_Ijj̫� ����X��gO(o޼~\91dwj72oݾ|;y5 66$.𪬾 nMP]ۜ2[-MQmm%1w/4V/LJԟ_`pBJ|IUBcgKvbVVV67(dmnu\411ղz=X[Nyt_;z-feco`hg}3_?"V(kgI~ZZf|)*igtӣPydt7y'd%:'?8Q}] 5C6f:j.aS2VSܻdgk^ފ #_;";}�+����+���ߓXy۷ogG}<|J TZ绪&7k?Uo՜0,7=/^`mst=C<XUׇ7$4wWɈɼ}-^xefDki7lzc'*n=o+S~;鈖)ȎG(hwW aYF>&5e!Վy\SW+&&Vч3Urp>YưUX\.[M,HQ>y{v-}YMaqordbA6|1˞0eBYŵrk##����� ��H~6HGOJ xYg+Z:iwV&ږw%ߓͽ~W.-t%Y^8P2(-M ̍*-Kǐ~ë$÷=Z~keG}h Ok^=bejj,F>#U(ZK¯[[ZYȚk-U=WTVUWַ0f0KC^/$-r%^MHH,v UV=iۨZ.jDjbewG;xA,mث_hz/cX-V4ZR[=1�����X��݈Hss+)>W5ˍNXwjWfX ˾-Ӝ֞"W[Vi)^ۼ(8vƝꘄ̐ƪ)ёeW;7&$9%[ͶǼ*V(ږ2?^dyY�9-? a&&+ ]W]˛iK 3nyX( ^lKpҢ=ESEzJbŃVZiᚻ'볌 e#?68+BeNʇ,+6V|b��b����@��� b?hk{ˁذK9ƢŗsBfxT$Yek Q⋽j_ ARA"&q)uUѝm9IEy%I ɅY9] ?yp۷ԳXg4JmUebA.kH)Y 4IX VU&F>b狕<Qmu*g2Yu`{eb%?/eY6~:>^Kʊ SrNzޯ{b��b����b��;+o޾z>=6Y9<Гמ~L,Rm {ɸZ}d'3 %wL+n_<npfsmJ~OIYrsK^MuYmeVoyPN]fKhlŝWӏTdZꫪYR#_6r,}o+V^eu# .NoD4Rk䄙hmYVVt,o%7ëXAKaM+wEzbC?Nkʊ #z:~_�� ����b ��w&Vxﯦǧ[Jf*f)A#wN\(7!c#~Yi=c/֕47W_77ݧtfuκ򰪂¦ʜ\Vc/[_?{; %+&�+ V����+ V���Wb˹'_6>Ί{R89zM-k&myiaQ>wo q{W.x uK.-m{禁ԍ;qWZn ihLomNiO/ r黪94S���b����b��_"VEcˎ%{UQ[mo-m-̻Z[zM/Nbnc=j23/ZV?S]u ;A%Q.---"ݞޟ.}[+��X����+���߳Xyͯ^>~Y;[$7i<6xgGwa{sO}^@MxX[/?%YS޷Z;߾{.(9iy 1M{ wOʬk7ZC==(pTR7/߀X�� ����X��^ܛ7/^z1]*YQʣk#.46fxVe^?qG%+ľ힧 3:䋞 qv%ay7Źt8|a6'ahǏ -C �� V����� ��,VP1?gE)>)w<Z<+lR2SݻI]wi~miZ~&}Mw*:5M7%&1aVQ764ݱ콬jlݩG9_<X������ ��R,7o_z63[6^tz|mc}uMT�%̳nj:*8)w5u%[8s�/DǡH ![}5uO?P \VhkP [XgXGAQV!Á 0 ~p1E6*>o9W^ss\쳡:Xu6m);ZJ_ܗ;2\Wul ̷�a�� �VVq芦QٔQwz}dKf8993qobז%"9[a)Kfmsm6-:s=#2 w.]xTq)1!RSUm<J'a�a�@Xy-\"�[+? K۪m4Ֆg<JjJ}ҁgxZ4lˍ}ڶ{ǩ8t\4b8٧|l8Fx[?n4)zmiz[{m,ͭl NVܻ@ݝl2ejwg7+/ϋ۱l˿Ѕ^�a�4dff>%a�ZXgX+/VYVKzӊ's}n>qhͶW,r4]q5~v-i~[r.wy࡬}>q%LTi_W霵'\15sM+Źz73 ŅwL>ʒNJjSK<.v\]ckufyuMy^&K)@�+��a%##C4Dl#$�;VSh49qCj.V+ 4`Czx炈dῖDmkEV8Tb}Ddc|vDkAVQgkQ>ŠfaBvdm|6'C)3P\rPM ;jA +}=� ��tXinnV DlCXw1*EȞ5?Wr@o{O~"kґⳇ+~YOyѯz/=hNQ?M47Pq5>65-/_3"#VFiG.~Q fnBɋC -aGz} ���+�@X/GYW47/o_ ;U ;! 8T䷿6̯>".z˃[RZZ[&h[[z)7;ym8̆Ew +&wH$\X)/lЦmN^�V�� ��aePa=|٢n(hI W\;}eg:TvDK藏4OZkJrMZK)(C +E1əR.J,dmvw*e+VjkwؘHXrͪ@}<� ��� V^saBUldcæwjn;^v̔J,_ۨ8FZPJyu+\--,,--]<7Q'v99-[n-BwpJ{۽\=W[>ON^ ��𯅕׉k+�0Jg^E-/m.mSju-jeBQ*� �`cRR$''kZ_ +�0J۫Jǡ67IMXUV{Zݓjʄ���8555qqqF�3t֮ߚ,v皗ͭߦLX@X�o*11E(J � ZaѼT74~+�+�� xZR)]U!�p +J'mTVj4e� �`Xij;zB-㟴m/jtsulm_֦!� ��+R +b �b@X�V ��#!��0OGlIX� � ��#a�+�+��+�@X� ��� �VRRRnزO& |=&*Qb`effV�^7�Bװ"~{ցmĖ=w}Ņܼ#bbX,֐###C4KRm~ �V�MJkk뀿5m +aErbX,֐###yoMV��b+�@XѰ"v[n%X,-Z �V�`tvv#X,-V�`{'lܸQu!rccc鶄bݰ"VUUV�`S^!y/z^<%ԺE'Vma,Z͝mૈl̻Vu"<%*-"XUmzhj_uK~UүJ2nwdnEW 8fI;jNXXQTNNN".kVlllt7'X,뭇!11QTV�`e<3BVwt9ςw85o>I?[_6;<Mo;h\7ol1uH:fY[~{]v֦3N8tMU~*4fC>ݮ3K:nsȒKcr{)a@aE]`S\G8bbXTXkiiV�`_vݱwU1MNVk"q+kval7=fvvٕvAkJo) | }  'MO|:q-9+;*ڊmʹO:;63 Ê vz666OαbXaVRRR4?#V�`[-.n3IOO-={ƽ EWVd=<b}m7[vywy[m7%2S'|<i'}w_mxY,«mw?GI姼M~2:ǂ[{- +�VV bo|+V a�eXyyQx/;s-9PmNX9sv8O/zh˹~7amo,_5s}W/o4=صƪ+yE.}x=]5_MfgwIE�NXbkaE(|2� c&iYgw tt=ms>7Ц Ю8ԭ(=?1;άGvgXr25K/&d쀵N]귬$SvQ0vWY_s]H p|"=ۓ@_ VwZ V^/l`3qyϳڿj_ۿcBS%k6\7weCoUajl,Df6+7M(i/>D"*ZCفV#abX+DXV6.J||6O~{v.]n}N}nma]qs{>vGmXoym %t%7;_} .^q-9KI�‹W^]Q|k`7Y䚼+9=eq~JcE+WXIa+U/Z*L:7;]{vp_u+ۯOj_B]?ң;|΋L.!Ň$~v`X|lbX7[!�;V�`d2[ )))O(bXo233\.'�;V����4� ���� ��a����a�+����+�@X���@X� a����a�+����+�@X���@X� ���� �V���0(Voh``8~b;$s8>Dyrb9G鏞'xg'VUO6S6u峈cs?fg;RߵVȲ |OI(&��a���;Մ쎔(T*eq/xמZUcjdp\ 0WÊZ5f{v +{GxxByUmY "F �V���Ыc?\L\=sGFcƌ?TƯ+7~1JL~˩Duڂ;KO70;kt|wޕ,cTnWް?x^Zj>le)!`~\/67gggK;* rv +]pI?Jg⏍Ǝ;lَJvw`k(`x#>2yVIX� ���zqsן)Uǝr j?0RX-.U'J1m:+xeitIo/kh N!ZѦ{6T)y;5Oۛ6԰2KĜ *kFs9VZ_T5T7*<0}T^HV {oy?20M[Lf_BPrg7O^/>eoDw\Qk |d4qu � ���*ŋes&{\ԃ K8oXTylFiښ gyruQo_Q嫃)"y;eҡ{ϡOX'5L9b>b%SS +xk0aq+J/oPW돮R%9PC~#ڷSй}5߈K%��a���=U -m?Jfc+zQA϶&s~8zshriG}XgjMߤVliQF޺OnC +>s?ae@jQޜds[XQ)eˈW+C5vG}ޅJ\zQok8y9a�+���N~OQJՉ^7nȢc];PkJk7ҝ#usvd!s9oatJS]O[m&oV qy{ 23eySV2{ +g?;篂qJ^]#VFYÀoDNŸvV���ԪG`璼Q%v}YQ_L̬kթapcn V3f^sy^<dC}(K8:Jw'=׹TՍJUsB]] J?I~Ix>?L+v씝KUWVʳd==ŠaS=.QUU![0h@j&|ܴeWӦ?XA=+C}#~4=IEY3p!��a���(K_0k(agR[dLcf̵9C"XOǍ3S ]Twa4Fma0޺;*ї<d^C_Ϲ0rɜ35]h}[_aobv(PGŨ6`wkڪjhxOt}Cm'�f̵zX&oDA51_d~ΓFx}4zcj)a�+���xW޴7u 7nl(5?mI2N70T66V���,%<X~DG~S?뙫n-znV���\~/?8a؉S]ԩrcu}WTX8EX� ���7DX� ���� �V����V�] +bNX���3DEE%$$A b| �_aET=c~~ӧO +����z褤$12Ab � Z-����=JLLLrr 1DQVrL&{9a���@ϰ&F18A �V*..����JBBǏe18A @AX0riZlnnnhh)++ϗJ6����"ƄL12Ab(XAX0JKK@EEE����Czzzvv }%%+�FzXh4iV뫫 ^x!v 111QQQ����1A@b(Ę 12A V@AX0ÊtfJT*ryii]fgggff>~8---999))IO����1A@b(Ę 12A@AX@Xi4ZnhhP(UUUeeeEEEbsH���0b@ bC Ā 1,A b|>DX@[i4tЊVJeuuueeod'���0b@ bC Ā 1,HUE:\E++�FA+ҙVVT*U}}BbZQQQ���`#8 1A bXUή"BX0ÊH ]illlhhκ:R����0ˆA@b(UO� a�A:zE4���0, 1AU �t)Hkd���0bbStIEWU+�=t,����mX6J?W];����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/plugins1.png����������������������������������������������������0000644�0001750�0001750�00000143112�12161032160�021766� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��o�����lϣ���sBIT|d���tEXtSoftware�gnome-screenshot>��IDATxgxɚ쇝ͺgyg9@cklxA4w[Vap�F t?o:Y,#T*\e4qOD|ɿڵk !B[e????㿼g)#B!bpnB!H!CB!!BH>p|ΟgEWq߂z !)7oޔ˗/˅ FҐr)ɇ*TH*T }WxۻwhB+&ŋWSflFGH$++Knݺ%r5%~'4A^ "6ZC[N۶mi|# -[7o r:nfޓ`SBH1k)HC>N˧x#$7c.YiCox|wʊ[nU/"EEtʆ2#T\V'''ʕSW9*kqK.2d]vU]*fכ";w7Ky}oP|Fk… Us9ҵ0Tfnݺ}Tfa4]R%wz믿8*E7)S-ۈo'PmEϸ}KwN4h;qℤ-H?5I2ܸqC\"?~tbSś p5KVamS`Upjd̘1;ɹ؉7'DЬN6Qg<!4Al/L2h]cBB_~q}xw!$1Za>}$߿W]t}~l9!"}i0^f ڞ~#mڴQGq:tmrz@ҟ'NҴlOKG= }/cBB$y{ȋ}OFH>oN+W'Oe˖HP 6ڵk7oaX>| *J*^-aa6ľYf*.&&y6L៧'Al/#tX(w4  $lqKݽ{hBi:fa Q[yNðvԩɓ'reӺPaaӧO',�8- uv͎h]9뮥<NqnWXѵ!A۷@^|7B?ϟ?W]Z:[oOΝSf͚^sF2 @?ʜ>}ի=؝'y߽{݅m]gޮt|Ey&Gttvu"}@Oׯgg9BHC*UJڷoj]={&7VG E0 (2|Y<ȋ}OFHGgѝu',z !Ja4A^xNB!$p &hVy})B!$P`a;Z!`qHC_u7L!BB7B!(J!BB7B!(08!B m(!BxS/!BH>�B!$?ubB!۾W/!BH>�B!$?bB!۾oy1!BmoB!I5hЀB!$�FF![Æ }֭[r5r\|\TumpB! 趯5jW^3gΝ;I5ruB /KۅuOKKK.ʕ+eʔ)2bBr <c֭7nHFFFȿ?++N#u9$!&7nxۺuo8>}tp-qMr ,7ӧO u6o,[lG_1E8T͛7eRfM)Z+VL*T + x ux#3 }դIwLNNM6) Ŗ?~4%%ŲzرQ駟",YD=zfƌo_C=z*g…6lVZQu"3m~7X 8~W7=y)~Ǡ޸vmo$+84GҥKo^*TH}o5ryk⣣UE:uYЬY3)^aq<+WVAl؝ۉ'GʢeժU9fiڴ(Q£NN꣕sD\WXP>}ܾ}uJ\,YR;eq5۹qzw_oѢERZ5 | PbEuqO<xIII?HJT˗={޽{}s\o+]tQ,kw.pp p-VG၂TKl?;NM8+ǖKtU$}K[YrAcx۱czC cl q<4x lۉ74(<m?l#Np)SFWn]5j2sg8tjP!Rp.pk^zFĨGG+C˗>]vO ޽[ ͛ٳg؊p %'bz~;wVmĦ׵kWu~ZYގ0<7}s퇥pq 8ua>}+(>6*b… ҦM{{bEٳmǵG+|a#p 876#E-v _o$~DvI\5G9;m|l"޺u +\m#ޢE >p;nMkWoq҄1([Gc-XT.^ΧP4vV#GHsZ }>|[lw>�9~;8993^GĊ1%X˼O,Šmĵ<>~ta.:z:tPoosU"6$oҷo_V?G`}^xjW(ޠoP(aD~;/ 5oӦMx#AawpI^ur;h|x.oUJZ"xqt!L۰o2Ҍ]O̺oG+,[3au.V]xvWY�K 6LΝ;SCm? л +Wݎ@h׮]-,q>|XY!neMHD cǎ)y;BDi V>M@z7h鲅]ܩ[W Z4f ؍Sn-;K޾}X�qMY3gRȼX[+{mn-EAĜY~XPo& -px3έ Eo֪ xõ7<F�:`utz=?q0ea|4m<7_DKݐ_ iFеl2݋^k壻\+-X ݔ\WIt֬aހTq:oF>r4n[Cp@xEȑ#(FA U0 TyF9/ǏjZډ(7 SI2bK̬cb5W{}x>0{!x|%kVm*}#kn`tjٽa]C>X ݦZcqZ6պ׮]=ͮ+酧<>7 (KWCF %,*U (MAC@Kw#=7ZTZcJ8[ޔx;V"ޠ!8"$;;[=<ŋn o_իWn`2/, 蛇uMOݸv _3o_޺.igiFx<QYgytk+ .hGsDKk9|2`AOsx7:k͏u7o* ]bZ>"Rj ]Qq:ޚct5  BFc҉Hutz=?O<h f`A2>N+>oy0JU?)?{l\[jՋ3cQa2:Uߐx"8Z7}ޠ۾b%`U0ha\<6.&vy˗W1ǤIԜG<x4?I\S; dvIO{rL78E7:CfМ1Ӧ5ȬB}*c۶my0J~B4a| 4QTB]}2p8WùG0;%f{7}o X Qwtc$<>7X^4ZWq۷o?x8ǩSz9zpHOěU'01ۅx|hS6ՋV5=]tQhaЎ&RpaͶ9xVE_hËE5oʠx#CɸXV\+#^ȫŒy!Nn3\[t^BȗKyޔx;bLϟ?wk*qHCU_t?+޽{^Zډ7tRSɸPZܬ"uO/*6 K=Z(!$4nJx={_~̱>#6-Ϟ=bڐ&LP!cz|v ]oiW(J^dխ<OkoRBB61ɓ'nd>p}@FZbMo+pԅΝ;p-qM)ވ^i SJ*v?ɧٷɋX)!$ě?Ca$FjNvyp-qM&;x#,o<?ț{͔p˺RD^&3ȓcvyɇol7B oIY!8>|H�%los8ճS.a%=*[֕oV+ɇ]vLnYx#o`o߿O�%xÐo7┷oɣۓǤ?[ $Y*ʛrqT20(!m_a 1WZVV v snQ,oFHzu x~XɀBB6۸qĵw%A�Na7% KI!!"ڶmxÊ$ZZ7l0E`~ǏF!!tWڵyG,]�; XuǤp’c6X6 K#T^\. u 4=\'|xy~~._⸡~]P=O6 OÇ'An/91)Yx eSfME_ U:) k[>ܼ:Bnc^{oȆx´ `#VtIX=$V0,oN-T3H趯:tk 0@M&SNU„�+]/_^f̘�_aÆ|�ۈa*0Ŋ*Uŋ=>HǏK*%f8Cw/'>krT݇ ŗtm%Z۷o_>aU?n ,Pe6mTN8N㭱4qr]N>-]vURdIҥs_\?\ *ƍo�ǯ\ٳ'7gxqnzX=[]67BHc2e$))Imccl M8Qiea c^Lq$8~BBϝ ٳg^ctYXGm/6&匋Su#FXψrx`M4I5ku;Woǭ_Ē))))w|s.C\XK,%Jcja,lfL=svϗݻg|ߦcǎld!š5kD?^s*ުW.'OtMlǘkaXΝ+9YF /jc}И}}M׶|)Xp©:qr]iW,"Nś Ah -Z4kgw9en0ssZ`6+Vpۉ7(eMlտh9a ̙m_c}~>v>Upa^1:8v9 + 1_K8kgwsG߀oΗ:[uԉ !$+H"9I4凯Y4Deyl޼YuG:LkyövZTM &qqN||+tP˕e,ϹxsL9ǹyv#PY{lW`6+|i!9K'^l~$'^JF?6txBާ__KٳzysŊipO'鱰6إkQQQX4G>5N/ʖ-E 8 1S<\8Z=fJT9}ov{7ursm~7< 8$޽;G<F!M.mFvG4Hu`hStYMm}7ɪUԗ2Qp֏;v4qlw,?hTt%XQzTK=qF!ZϘ:ofl٢?,xpnshO)q0ś{ fm-0<ƥɟ Ν;jM]L{}y<|Pa5AŋK!$|.$tW0URR0۷S$,[L!&m!#0}1'/䠔Gx�C옋gݻ=!x֭[Z޺^-m?)GϦ%$H hlW\Q3c";vL֯_OF!!tWݻwxٮt-C4+GݑS]D5wW_}%FQ&Ĺxzi:&(!$tn xsx8W$F'dHd7BN |mԩ0G`K^_YaT&H&%4-2Зc #{0]m}~X[ڶmСC#{ύxZe}x#o9IR}JJS )upȿ)<7X0U@M<zH ?\2* 텥#;;[ ѣG`x߷oߪ 2fGz( !pOBB!#l6Af;+ʺוx+mwBF0~t 7 ԨQJ� +фw|󍭨ºlÇ8l#i:rY{ZGl#߻woXh8F(!(0tS6JŲM&%oӎH1]mLLu[V"lwltbm�2ae'Nh�1Y^u}͙3G@2+എ :ĝfA 7B!|BmجmR\9!=g7˿!nݺꯓc۷Ouia!ęY\.Dk*_2-/1X,Ox 3Bka,)o^R>p,5F(!t[Ȉ73q vI~ߎk ]XD ܹ?*bX^Bcq<h.8bqXްپ.Ʋs#oBoy E˛ef]O[Wr:*Jf-38LKj8mTe 8P/_=O $B ݢ^7!n w(7՛qk#7nj?Ifߩ8rÇˊ+"}plX0ksEL/�a$h9w)ͩ2d:&|333eV`x#mBͱc%IQ8}7n&c|\\Js*ެy(5j(3퇑ބ&060a{)}m .bϚq(|p-*ժUS#qHyύPB @'$VXu-RDiÆ!޸)!on@}?M}IE:^GumJx# t[o  7Bx#PB)x->jy#B(hy#-`jp~{ !mnx#\oX%e^ |Zh-׷aiӦ{Dc4m"MJJEx+e KP|yUCSB(!a+ްʕSۨ [n$2f۴ cǪɨ0 32D <XvZR9I:O=,~آ2DkyPxCzk[UZ 8;ViWH9! qg& ϫpZZZGFM W|%>`X(_]d%nUIRy0[=4Vy`C5oRAl!sE7_BHo,DuzXM9*Oݑ3d4ڗuWZtX Ún|`7X`2C<a^;˛v|57BHoNk`(]l}lLܞ*_ [Ͽ-UoH;ReLi5iVvmE 8B7jH-_V-ٸq# ;O=F9sLPۦ͞= pƮU z@!C%j֬lX!K}VYtঌژ"V%@7WejW1EӤ[>pV>ogΜz)Pp ڷo<zH5hP(Hf͚)m6x{L'UVU#Jm]:k,eCWi&MdM񡄑ZوQ'mҥnG !ZfmLnNȤ)sQZrN"Xv^"$Kǵ "ޮۮI'վvՋ|2bիWJ*޽/n4 r͝;WJ.-+V 䋍Z>}իgϞɸq1�ggg̙3 ˒%KLˁb 7@!o~vɀ%g%q<t']K %ɠ%qj_!pज^MÆ ĉz6lGޞ={k5j<x@YJ(V5j:9ofpΣ]vҠC@mV5YYY;Xݖ>77Bx[ZFJv3NJi'fz<}x<zAΈUqbesj_w);vt!vK 3}^4Fu=P4|酤xC7 h|#CrV\)+WV5 !PVJ|?4wD?*߹M./j -&(kyڵlݺ޲erx6H  .aQم+VL>}cqҍ@M6bB(CZ? zI7?j +Gj_ofddH"EBLqH3 $X6oެ,g/^PfB,7u%,oȃ{4ooBxY;(wIA]gVcnF<h1q} },scT ׯ )0T;6u3wƌ>o"NK7oyC^bTPPQBśZ=)z4G.#H>[ɋOTp!t^V. #@1Q a*Z4)ތ2i&}%9Ѧw>\O|Sc98֯__ͫEaCFF!\a FTeRg)k^S>\۔7Bxs(ނwKr R)eZQZkT^ /7%B(Hinކ xeRJY,j%6p#@U#]#1BB>կͽͻ2qiLEkdҲ* 2!o%0%!$tܰoQ!o|o߾]/wcy#P 'BH'~o7"jJ~M>~H A4%%%oś![7_~)!(n:8τONNY}N&BFwCHb Vs :ibDK^x"̆oϟWk WPA-͛sXU\R~Wy8'c\8)VZY ɯiH7_ VyF_0^7"ڴi##F .ȍ7dϞ=Ҿ}{Ztaeռ}<sƸ@qRf…͛7A?6!>;6$śӅmxE Kׯe2$r0ͺPͨS"T`kWNLL4h@Y1@w}2dTTI+&m۶ /-@"EJ*ү_?ʋ{C%JV<y+]#?ٳYP!V Fܱc<,oiii2~xL*UJf͚y!p8@09� fٲe[ݻN?q4iDW.ׯwǬl<;o<up/8 ,P?}iY"ҰaCSZh!?α~xsqRXGTq05fU^RRԯ__+2V\GϕBs2uTyqqqҽ{|g ×Qzz,^Xʔ)DZ^5o\"##fUZR; N/3k;vPqn)S06lOmɒ%)8- b6] ɓ'l̘1tݻw˳gϔ:tmVExԨQ=!QcjMr~ӧOw5}wJ[�7DHѣGh`2QlٲJ5kG4x9rD}Mǻk}?z~r`?\_xN;vJXjhJ[vo$;;kwdΜ9iJ`*}=%,,hhP6y{.]6n8u<1-_Є%D6&]:h *Y-@ڵU]a- )/X-]7furr/-.\-gA 7Fϩ?e |]a8'!,}O4Iif͚Y~>;--P7rʩ6 ,RE! boݺW+!dp#0nqz�Y9r˳cǎrmը<XYsJNTwΥC RffG5kt|FM:ae2K %<8<ci5N.]/,OʕU;w(>v?�!ʱzh"K= hӋ/ k *�\c )}7)" L ^~ݴv̋nS<)=1ò]vJhhxz>. V<h[q} @{@�XON x3IM=F"xۧ.F8}P-x^& a_V"ݺh`0=K J>zjVO7:_gD/WcAdrvzAP,,W!|a{T<7K%,nQS|^]nZ!D|A Q2sL1c7˛1BC#=8'cmذA`_ؿ&kqfeZ0!Ca}C5hf6DZr%Ev#V>oPɻvrj5F-U#,FZC}bLZؽRJ02NbwvvwjyC7YL�,8|aN8ק^zJPDk2+D1ꈮ -**JYVccc=[7z7}^qMkso1=1@EiZ>|({UZH:NaB yXay3u̿XQ_oe}Ë 4ol߾]YpW|AmL1Zxŏ}9ۥC *D|Qfyö7˛k,^P,�s' Bk׮>lD<(Y )+'wG+et9fn7X_H]@_�Gj- #5RZ\!pM_{pʇ'~a-ޜ Jlk׭Vb ޽{L2k2ksS8a7`ժU[p|G~ptJq :MSc*~`qu'{tENK6/ϛ<sKWᇅFYpk p|m#9` @FABȗN<}wt "պR;k0!> H _gߔ>Rs֏D>yi_薃?Ѧ�_~bڐ@,W0k '|GJbj|ݣHV9ۥ#޴.K F8u~t>uAFrc y�8/\73 wI =ZaA 6%}Ly/5mJ朂5u!~x 6y#$7[]7MiYYYON xѦZW6tGW@7qp &0!4F$kWBB >;-0jӧ(7yy#Px*h0!$ӰoQ!oL+90!$tay#PB0.<".nSB&=uTx# !ooByߟ\HN<B((!-\,cC)nl>t 3!oBxey,_2r`7GKRr9s1=OCLJQ@(!Ktaz ͝;.6DoYh9rM>] ڵk+-rR-ZTjժ%7n oBBOݿ%c'O2b`IޫK!n^t㞭ۙ3g^z 4TbyL˗}ɣGT:d BF,ׯ_'0n o3e`d 9POEo*}ކS~"V6K6^,o2|1bǡ.FeJŊeѢE^-oȋ̐`qէOYztpsJҥU9UVX . *t,a,kҥjB /^kԨ!eʔHy{4M4bŊIڜNҜ.udټyMϘ1BwcJ a+%W?^R.#F~wOːy &^m_I C,ˆ((WR6 +6{lСRؿ]v^̙3U^X;k,u(B>ov<K%d̘1pӦM=jsӧSo-nɒ%*ߍ7$++K('NtWTIvޭ'C:Jsr^ƺ7C|mݺ{&}ݻW>|miei{Ȫ;Igd=?OI_=z.^,Sthصkc?4,oyo5k̑{ܬ,svsTc—,4㣛9%%hZhSj伌u!o3W^9sK;yr5p;a<}Dujyz׼S=k>Or3|k׮Jk-[Hn7t=}ƶ7fqZ3*mh/^.\ ௖ƿW^ʚ v伌u!o o6vMOJT'zʏӥY~7Askweσ_ϒ {-"E(1qHӄޏ V7Xeyڵk"ea۪,Pn]ej'<xP9Iox#$_jXmJHUdi2bpILJzEedx|k<xpx8!-[(% TzÏSNb\۷WqVM!jMQ7*m~˗/WLJB7,۷;_~4ʕ+;Joxϗ!?\k:Nٶm[x7oҼMK9@*5{'ߒlyBZ-Z^Æ MQ[M4o=*rժU9F9RHMѦ;v{%݃v{qӦMUiMq.`7pM7BSK߾}ad'z^7{x2>N>m[F87.}ofj#opQㆪ)K={NӐoG L݆ d()ZϤtEx0 6�7zjduAo+W )>DYZ|g 0-z!RMuleJ9)M3$fS?ZX08 ZK-NdzH7?4lW"`[r#s¹iVVo7a�dž6\dZj,o <zG=q1}׎gw,$]_cǎLeU?=V<plDUoYKSěZՠt#ރ'R7"Z&,=ʆQ/$W [ƍ}*#7t 7GÊ  qp{탙@cخ<4t `9EsdX09o�"Ů }b7ȹ@ ?/꩷Lrrg-}0fssrblZb۳hJy#-"2!>7j%Bo=?q(Lү� ?Mlco`AL-lWa]0kX^yoq_c} ݧ@I89=7'YJ!za3n|ΰoQ!^xh&Рɓ<o5670ԽYf5'>ovݚ}h4&F9))'ŊNY]@Ÿ};uw?khUW_Zg/7BΝ;O...CK ,sa W>. M`})( L)ެ,!F_&"g b]7k ꇿFaBsfu.sV7,VYYչ99'k9BF Lݽ{Wῂϟx<y|/aExԩ5p J), 7tcj/| -Nߨ#,2<.Ooׇ~fڵC:|شߏS7bfv H_SSϛ<7g/Fxs2!$Ћ7}{}yZ0SsxC  F/zˈiIAp* C8(Do(D4zK1<lRmhK1,7O?[.n>LN OѦhGѦ6"ݱGu\+Pw ީ:7'D={y /!$q&0J1F2�99S?ѰoP엔rGlZyPQ7+C(pЖ�Vgyv]F/([ʶ_(;]aL[o肢x#$אo,Kcq綌7D ju$]̓3`:)ވ 42)!?NȱCLK)b$\PoIa[[NEEC BP]\9իܾ};(^v2D*U۶mFPQ//<NFH7cJ={TN.)odĘGoJޫK!~>vFկ__BE4ˁ:1ci&(W#:wk@k5j{oo ^xO -ĺamyh #J\iՐU-qڞl=~Mm<"]=QdŊѣG �}ܛ7odرRlYXf8q87|#8큖;3gT^]ʔ)mʅ-[uj޼Z+, ζ<KƵ7nvZe>H6l Nx+(~L�G =`(»6333|[KeHpk ]pTm]'%$rEeODTvmܹҩS'a:xoRȫ yu֎M1)iU I&y䏈 ê/;gw%�߾}kn &wv�͛N@;vT¨eʔ)x+HdeeӧO}#}}{ȊK ݻ#F˻GDVO^J-Bٯɀ]Ȉuɖe۷Ouia�9okV3kaXZjȋԳgO%Ĝ7y!?i-x^Yk)ƌ#UTҥKˠAԃ?1Se /V6vPBH8>oߵ^5{8怌0J>{":}{Bz;yKѧ^ĭ)>or(ZKñxCRmo,/ٲolA%U]ve[;c… ?:MB(޾\J2{l7>DS~.Z6U鋷%ȐG2lyھ|LtRd)R$␦4VQV7Xiys* *U.S8oF<c[S]ʳKB(޾xkٶ.\EϚ&#F ĤרJZJ2KN#W?[Nɬ ?C>|XBm `ho:~l]t& @>oኊ xPxQ9-R>oGf>oNA -Z p„Kσlu¶ H0�q} oB=tmZrdTY#B]g~N޾{/-+鏼׸qc9{lxi1^n]r:NhSl2*B1},ff͒UiWkU!hS ՟;FbaFÇBF!o‚75tm@̍.{Zʴ[ {N|q"sm ˗/s577B w[\vM*TRilO_I͈r!g.UE( .%X䫅Ν}~+gL>ΆP8ҥKrJ5{ĈK`ݸqC&( 5'(BV HkFqF5(!$ؼylٲEgJG>oP1  oBB%Kڦ7) q0!(6qD7BB˗x{!$B~ F!:"$`U7BH؋7_ x6m!!Fx"g3dA+7&fΜIFHr,^6/GJ ]`LHo;w eԪT"/vaRɓ'%J.-}UKĕ*UB 0BM6'Nڿ]vU,YRye☥JRKa S+W={8S5ûɡ^1vB\o!)|Y˗&-;X ,RjT\\Lϓ/pj|Hx7$m̄ׯ; kjJ_% 20iΝ;˹sr+!~5kNzvR3Hddc4L PD G 7lЧ9osεoX̙3btȑ#s4.jСcc\cN# 6xs0ӆΝ p"gz̬R9u .Mnq\nڵ;kת-O>*ϗU8x x5 %111G>O:_pAY@>$y#D,w!İ Ai -Zԧ9om{ k>m۶kx>/^|GdӦM'|ϒKJe'1fGפzUr%n7q\q _S={6-Ux1 qHChyPx "EF>r䈲)SFj֬)[nuAt.\XnQ<Z& &},PSfD iE,=;v쨺9u{תUKvB~2lm202B(qUCwnV6;e|_Ŷ>|R?R5J*V^,U;n8`qfu iƲ?.M4Q/իn#瀗=g4^zfcWY~_^Z#εy+Fr18!Ҍy!rDO_,{vqx1_iX龈79o莵om߾]߫Z:,mriH:udٲeiVBeX>{?)ȱ2da}*9CƮWWȐ˲(+WNtbJCڵ*LŊڱ>.fK _-UCCZqwVu0T|n.1f6lnː!C|.˟k@BX@ȶlْ"78"�Z={ ;nZbccU:>zzxo+x&᫆ 7g& &RBM{kxw|63^ qR!|x[DY޽;jm{NzDtRYOӃ<|-'{VL_ C8ة20@Ƽ[`у%O /\Př h%x3CÍ7t3fA*˟k0E) xÇ ,p/ˆ`$c)~zk`)DJ Kx躅?WS?3(믿VCXJFoUo]ys?߫Q^{8怌0J>{":<=kީ5 Dold.0^ݺus,6@ϰMEFavvj8Uʆs1,R?+!xýGW-qWX cڠ,-o*URݓpV"~)?Nf-Ƞvҵ2tAgɄ 罖 _Ӭ;hXYޒfydض-hX<н3z;m9,n�N˂u777b-JFHhwo-ڴſYdĨᒘ W3V? [t\HV[ʌ编 ^̿dLK.U 1թS'e}v&|f̘ ,Wp#X( zBa- ۧ؉7avhc}*_8QQ{V7BBydfJ6-e`�9~2FԬ|KjFϲy i1vvkyp7;65j`D64ё݄p\mرc#)dʏ-Z(D ֭ Gnh}ᯂYى7oMʂ`֦TQQ{( m8~+,xQCCSa37JJĒ3)vl?rQ7$?:ȵM x+p o d)_J_vS{'ƙ5u.l Mf gΞ#r{DFD˄G0BVC I!̂%޼L]FKVV6}#}}{H`7B 7Fx#77B((!$5 !7B)ms|!PPRP;r״kqd؈!2 ,` ..sWo- !P`cr<6F߸j`Jv3yܽ!~)]! cmaBH肉z\ܟI;fsrMr  .][rUۿ21s(‹4|Y-gBB.l/oIFFFފs�Qv-K˃'%]rꨛ4r09oXʹT˴L#P8kDٶ%kyd>x*Nv̍t_ Y`[P2iY|rS|o\ 'ݔq{Jz .wYF tHxKK."z(ȮSls mX.ܸ#'ɊuQ񷞁v} o0}h@p IBB>EM99il9v^vNqҥ:?*@ins"nݐ=z-WJ]rKqٵO 0E䴻e1:{9#ݘL`qZ7oeKx'kiKyqK+1펇|g/RiMZ<}RMu\gv_W=GgkerD۷ڟpQ/yO^@Yw>/>-[( q6cծoKvۀ1X3ll8$[OǤCf-W-cf1`P_p)I FIɇÔ#2fUBnRM̥[,^xZNT`qZ:U>kHJPzO7c!/O;hi]!42?Vq8efY㪇aw]`;>O4U 3,g^r J,^rO {̴/> =<\bI/^];\/%Ϊzy o'\CFH?ّxfOދ;O�W80p ޮI*%"Ns֙kڹ JuqR~X']Nɠ2`iBnRtfQN>!="zY}x;)0nG?GϹÛ\tsZxxe-z5�Zs Xt; 4]~4[J gU?#vow/w8/I~ipCY4_=֝=gK\Z]`A: 68j=!!.ޢ{pGl ޺jp骫T G-Z.SlT2ν kZ84IG_+/JĒs9I;vn':zȄ+r'-Jvme>pQO>8tq-uƶ>./%*ΥVo{)Pcƻw{V/ 7ǜUѳl}:Q/r$R(StI( m܍oxaދsQ`!is[iۼC~5]Mm?^%>錭ϛM:{ >rL@l;[ i=haXONtOʻHVO=-HYMxXw_ӵmX`9v.fxv—څwϩdU$͗{ov<?7m_tIF-͚5x3 67o… N:RX1a3/2op:o7{6ۉ@EYkIPIik,v}GeJ5"FȞ};܅x|傤^OQB ]"w]N$vny ʨISiws'eʉ 6|\N;c]$NYYpZ޸+~k[ߎwEJW>.Z쯥i u]9- )IK?}@7߹kMxG_wl]-]>q:ֺC pgt{3bwv—څWosST4_qr͂A~o %%EJ(O>-]vҥKKɒ%K.Jiyw) 4P/*UŋmjԨ!NRIIIRP!9w ƪtl߸qC &˗W`qzϞ=[*U@U}ό3&F-ږCqiݺRƇyyT-|8ܭs�QtYŌU{qRE'a- ?)]u]AۻI#~p s58O}6^zL?#qH68ϓ/h5ըjyap=Cua#>ݘ]�l#NK{Q+UֵYJhXw%̎xG8PFy8_ӵyێ˱sj>?3%fg/ ,~>{z<3Vi{pկ__vڥf.WPA֭[DUBB6 e ,PnѢEСClR&LQΝ;8qb}篐xtG5:8Oe^ <SdѼos6ˁ/+,6h{;jsLP*=zuSݢƿ&Ť߷N5oh޲ ?=Gy_}`С={4/,]Zr2w\ILL̑[֭[gϞj]v2j(uLwұ]Z5kr ^G! e#ݸOۄr7tX5<Hg^e:o˶xk<C/'{kUM:r\ !F~6saiժu˴p#G(:ԬY-`ŃȺv*ʕ+/V1ZJG>Xmm?m\l`uNZ7x3/2oy;xhOt+]?/ lIs." /_./_V Y~͛7R'iM>]ڴi0<N,of"ަO2o[V>m#ƠqT Aܬ !F7 6(5L Dqh+Vt6g5�b֬Y*<sLF7gܸqk�ΪHm:cA1/꽱y/f?T:.x۲eԪUK)FB\ZJk#K1IFcǎ0"|.O nFb[%jVoAnrmxFkǣꘗyNg^M_{ <֜1@?GfY1/2yx !$B~m\a_aao^"C(Oak7BB[m>HFx#]) a~mŊ>4Q!ooQE=KFHG;@[Р`y/a&⭠ 7wzLrhZ@jիʛoWfzׁWRocd͡$BHEz )ޜo" ww!C"#ެ Ռڵk+1;u~k׮euVPQ%O>Uzm0~!%ޜAU"xMY6ի"]Rw}h}|۶mx#oBhysdy>|do2bǖ- Z::,%v�cfu߿_lٲjXw^8GDDRJI^T#ku|vvvZk/xK,V'NT3kq#GziU'pqiҤ7[δnX3c=JcW^G9͛7K.y\c u5IJ$oB[>oh4 6 -+Y:RebkgԨQ\~(QBƌ7mԝaÆjj4hToذaYjjJzV K`y mGfʕ+eթRJ{nudС9QeB>QQQҲeKw:ҥԩ!Px3ߩMF]y;w;]X0VfM|; MFRpѢE*sN?>If=:ptٶX'lGGG+jv+WJʕ%!!fddŋZכB(Bl:KF'C!x[uUn˰[n7tQ cq '&&JL2… ;.NF'8ru:w c@xM6j</HFF!o!fy3uLӧϓR/ˆSHcӬ> hEBB9ooͪQEÉvׯкO}^l{>ic"z-ZoF!oN%`һ5kW)޽C&L爏KmY Х 5K+o> Cyu5Py)7I]t7tsSn]5PfyC.[x[n h!|BH~1n:.R+Ḹ+-٨Q# #V ũCرcݣME:tHZ/hpOͩ@ě]o߮q f ޜ9s|o%sP* _QΘ~ .VXƵMÛ/J5x-Xk3|ڦy#tzn &𺄹x"?}D!>+ GytMw)I q) ?0/m.T~-99Y6m$&k,%%`7y&Oyy#/qF/\lt~T*EuQYC!ga'ނF7BxRkx-?$HeĪDYJ'],9p$UoUST^^3B1 Rpۚ5kTÇHytvDO2gDKSXu+-CL>b/YGrFy'Ygoo_.@NJ}([)ʰWdk)&nKRdTY:SZM<ї߷o_ٰaѶ198+(D gy.ޜF =xÜS/wޑ X*ܔQSddbx Zw1Ƶ`TEɸ1ᨱ|! N |o߾-0*$p RBZ-[L9yٛ۬2ik\$.5qm祷+}kcIV&t=167V||\+AHkiq_=XYϪ/K6r`eJRwy5kpc"s'iܴر8뢏60;&4d|;oPŋ{:woǰ^$8==j_яD FyPxÊ"p$8W,9+?,IsHg˼8:/^H,I-SjفaS 1y36p@8q;/DϞ=qfcƌQKiᘘ֭a<XÆ sD @AuQYAvTY}O^o UV={|͎a x}V-op�0fBK-\Pu Lj$i'մzIi3=VI^E mg*ڸ@zY2r9#GʢEa/a^z `uX?Z_̶ax.bz'J*pڵ -fyj֬00/Ϭ@ ?zH/nX}Hp{ o,hdfBKڂ:$8R,>#O8*MwfcKzGzI1Z}eax2</@`!i&[Ӏp_m_ /qf�]{`-e󋏏W)tj]Ϲپaqkw>NҝAݹn,dśӅmx{ꤜ:u(|=>lx͎oʕ=zHzzzԅPUaܹʪb6i54wX 'F#ȷ.p?m}3lkxŸ[=𮰊3cQf͚Ill 4ka+҃_}Y?t_4{w![xZ1~vXl˰;wcCcxxsqRXGTq05fU^RRԯ__qܹ|/ނQm`l2\  >>f0e =`4wP )vI٫*xb!˃jܸ¶++޻}qa,KgS֭ѣ^~xvR3e,ڴi TƎ(mԩ|7m4wz-\VV>yv磏� \+{7}tGf˰;wcCcxmԨQj$h-dž#6 Is`eT9rD{�7--Mm :~CBW@/tG#Xuh3|ŋ/qus6r oz6sLLN$8\v[^$MFjK-RVy<<}A?}+\q>`4W}8<Kp,Z|wNw:~rqfXsj޽{믿V#YQ}Yx'O;~HN v`@6Du {^XjOU &@ 0B͎a x}V`[>o "DmZV",bSN2e8>Ccyfo0s-�-/`=ah@ιN'0 ̤I7䍊R׃UlC "�jq<|B@.]PQy7X0>HZwRJu\&u6In9AZ!;U^ PC{ #̦׏6+o߾}ҹsgw q7�] ú >h5h K[}рki4?_}�&ք V] a!=\70!śwL^z ]Rb{AJuY+;VV* z<{/H^RWѵ{Hx}l:KF'C!x[u]kax[̸U#0#X'>kx1 .UXoxC&DIp%3VȟE׭JˤL lOfLW˺�g{tޑcxxs5 ݻj»O>|0⭬oh)8iBh/-?7 a"4pp"MF<.v⍖77;M ";$\.oX!l2S=z>kDH=YX7'>~(k׭Vb ޽{L2kXWlС9.+VPɂo-LQU/�F}`?? /v쎯ODŽyþih J.v MֵkW776n8s!$?ga/ޜL.R+Ḹ+-ٳ9Tf5èHX0JrݺuPPE6լcǎ1#FW^m{|61\iDS{w.v #Ѧ8ś&0/LBɷ=YȊ7WXƵMpDƄo�bt3BH~3ڦy#u!`.oT!PB}@?T*F޳S_hS?XjE5 $pBH~V7,V ě<oSOQ>nfF?BH`7Bx!B!ooR,!?(!BF!7>(77Bx%РC 3!oBxey@ 0% ;!8taz':)vڊ:M~׃B(ނ"ޜAU"xMYwWٳ^FFF!oamy ,ˈ#[Wnܸqj}Nm;w.]Z߿_lٲj]XwޫWJDDJ+UK5Voggg̙3ZjxK,pBPѣsҥKU *d[o}ʕ+P|y%*|6ۣFRi-ߟkQ{ZF )SDFF*CF!->oh 8,Q89K:tpٮ];5k>h ׯ_/%J1cƸM6umذ8qB5hToذaAѶm[IMM,?~_ s-gϞ޳gO,Ro>H7o;ѣҭ[7m-]?(ƍ:8P&NHF!l:mazhSmazv);vt�ڵ+ VfM|;|%U>h$5h -Zk}ѨZ~yӟOrrr�*۬}_9Rox/Ǫ+5G{JJ;!իWx#R}̦HKNjt2=ˆG[׮]e֭-[<,>bŊӧOal#>VDi߾Ӻ .~ƺ+85zӧl[ 7ݟ@yU >oB ͬkֵw3O>a[Y`)RH?&!MkK7ޚ7 m޼Y5h8myö8>߫$C ZO{bW_ @9&L9`!\fnԑBRɠ?ʚX_w!&ysnٲDEEF s=<r8�1c8G~߾}D"펯O|ްo >o:urag,ˮ޺)[j%mڴǏ{=/|W^˗r.^(}x|d 0@}c5!Sf7A֕p\Y˕nvllԨjּyseӪU<r@ǡnرѦw"::_ =~ ӕ M;e`ݠz{oM+Dzb>uHChS9|}"- śsm{7)&&FQBH>YaA 6^ZL xP:O5`Èᴴ4y*U[%wǎ^qaeiE/d1i<X/^F#? d-0B(ނ&ނM}HhPN`Q<V~}؂#>ljωx~ 01[>ij 멷c Mks5jS8I7K1° gȳvZcF[Ȋ7m~=;%1)A56%Fg Li{]. 0щxKJJRaEq9\rE>H4Fct\ҍA!|9:녙f%LB(BNY6y$հ6ϛ!$Fb�t]Buj ݑv8 /[L*W쎇m۶mӍn֙}oQ!k1-V&i`Bby7 , Hfi<ͩ,ooX uڴi&ѽa8>oQo{UO5Ctcy3y/!W^{J*j$%,U~hZKG_z 39gFb@tk2mXٜCw)%iҤ,Xt)!$h|nЃcB!BHAok֬ xKB(!oBNMZ1X yk`v.gN`YsjP& $PB 3v-KNdm1jĉ60j>͛7DYxJ7wnGEdɒj,g7BF!o~I7eo\)GΥI Z :Gm񒅮X_ߪx#߿>>ozqUj֬YXY(!P9ooHbj9{UvNqs0$]%4T ݦV ̪5g 6Df_:Xfϙ^gWX1tPjU)T{VXQm! 16B샿߸qCcjQ qcBR߿Ws<!36̲kJ`Yո7o$8&b}]̮y7B!!(߼'3nʎSWd˲7$KoJR$zqf ʚ6%͚=CݴyO mҦM޽{3GMtA!m„ jwl[N7Z0=<pRh8G.?::Zu޾}[5)S%ެjwܹ*/U˫Oٵ:OBF!$Dz6 ו.J ,YJ;#s760wM@G?|x߾}#o޼Ri֯Vq{_ ~oԪU/ڵkRvm}q8p֭L>]zXĉj^Z233s 3k;V+|ެjo7էZY'x#tn  *!'eZ~հKePuj^J Rrz5`3=AZ>N}ްTKڵH>u Xе`E!ʕS]}Zyŋ… A˛U]էZY'x#t钬\RYa='~G艃+ !)޶L3o StYwxIo>' \e.ˆc-싿%12Żr 1CvQ%Ceޮj__|8AX #;kV׮]eɒ%ҥKܹ g, bkb=C-^z9,X*򖚚nW/z'x#u>F !yfٲezφx[/^6=/.\w $.嶬>[^d32xY Z/CeS6piʋ}S٪U ={:UFҥe*P3`�%0H�qGZիW~&/'pv2y7wLv!ΣGBS-}V9IJ͔ 7奔kivbsI=7Vz;%Of4s}*v_ ֭[KJJ Aw"&h#8n_ٳgdb̙3:!cFÇmjUW3fhSz< moKxs[.˥ԣ#w~˵M x#7x#$W.$[(a|?w<P!!/`MFHpa-J] ߴY % k_>$xYI^t;so ~_JM6⍐ a-!oW#&MFY͜9⍐ woQ!!0S #1% h3N^m&v) 4Pj0hy5Z3fPsbT!C5ұDB&Ljn̛ގ ='OCY}USx;w-|༴AC(WoF!$&,S$%%)8Νsl٪P{̄/0(uN؆ٻvRS`yddbW۬YUV'/_V_cOsG\||z&Mf͚t~oX:⍐4)!a/`AZB qz1K$߅8ILLyի{똯 ħNr/\,jv~y waUzGFHpٴiSދ7LpK'־}{5BK cCbĸ^8:r䈲NA[nYH 3tuj]XVW2.a{swmh"7B VYx#xH"9|4oD/p ^Fm ۘ ]7;YCgo ⍐Űoj-n:tJ<B(B_58{&X1$66֫ٳ:\7.bBWmdo |ெ ,MxңGěnSO7B ^XB/F|wy 3!#{X iVJ*Z%1 m:h AX|B5,A ߷Ee xÇ2!#CR!)N[ttrNO ^(/544hX>'~ y EBiNܚ kS\1 8o+3--Mu;vLxCqyJar3|rOʗn@勅E7#12#(<ۗoJ⍐woz54,F}̙3A׋jT޽{4@^|ūmB&'˗//S71ѧh<1WU k(>7|8S\ZLX[`-33S.^e\Mg|/] %nԘMƅtc.]f=1- e7oաO>*:̻GkBFr[a>*7B zZA ߹j`S2;j$tЃO|ߜ74VE렏ի?kٲ:ԨQC)>m) ( ذoX NǏԋ-\b) `8lc_>of}oh0]xquG_TQ|7U.eKHp@!  HAvvWm̩"T]LQpN}Ha2Jx3j'X7Q|7CQ!V^aky hDy61snN*+W.+G~XΞ='h%0,jFDlY7]'A 蚥 o$Rx!޷}'5 ȇT)Fqz5EN>f1rR X@#ě4i⎃|p t`F`7 Ѧ9in]߽K!<BVa3g|QF_w$#oCW)V]SL#[-eĔr1Z8�`7<oAuĂԕ*UR7 n)<!P F'NѣGxC)mLߡkBF!o_pmS4za@5F]X݈ˢERZ\7Bxaj m(XmUW)'B(B@}#{!�F<xǍBF!o ނF7B(ވ`JB&-P7B2hѻ1e1b!$�;Znpc)!o$`nIqF5(!$p6oެ`=k?x#v ӏ; dgmA O6~x7B ;LadMmiG.&NHFHr5MO:%3gT Nht++̝;WA^>Pi`91) .#$ś/c9n8QX0/dIIIQmРay8p@Y(rׁG_؈Q oV_z7( .vy`M۰a+ǎ%P48h\޾}+pQVƍ݋o۶C"EH*U_~rʕiPdIر_ZdQp 7vP|oz54$XjR3gΨF Ç\/'Qyjh�ᅣyyPZ!;;[YC@bŋK2eT?y�pBi֬x 2|RjU)]W-gu3fHrT!C릥cy]4|uE[ꅼgϖJ*IBqŊMe)ޢ( 2--o�k1x\pu[&u]3yꥫQy֍*V$v zP8h}YpŊFt}h\oacPnٲeeܸq)BΒeVZI\\\|Y"""Vkݺ$%%)ߖ^~}ٵk022Rͮ^اs#_I&`Y KLFHpAobX7X0  ,[wd,9}̎8w>I!y!7kԨ" ˗/w76m,̙#:uRtA9MʅÖ47`{޼yR;Uha|Cxsez^C:x{L`7X( .6m o6}tp!A#"hxb) 8mkU6^rz˔YkĥVZr i:]vj`Ŵ;QF#/P}…~D xx0 ASl_ś]6to-x#$`y�Zׯ_y3vSuBXQ()+7Xhjy<vҮ];śQlb[jr!FfU6x f& їz1g:a_˩P xLo[ "4"~z61snN*+W.+XΞ=yÚ}%<h/'74uԑe˖h0q+iyx ELzK>֐qѣa{„ t|.WnSS7B§O4 ]e5 /OLb ypG6tذa9DF" /]|YGATbT #>mr/|Zhիꪥј?j1W^9Fi>oPop/UhS8S�tAPұ4>P]}W QQ\v DǏhD$3ddVm*Ū p4"rYyEl7T\YY psd-U/~m4)]Vz1FoUMҵlRYНaVMX x  oEFHpٽ{w`QE V47tQ(Q|BO] p؆O˵M9GxxOC⍐w_]C5F]G FFa)-.EF((o躥x#$߿,L |E|a8 S7<( .XƳ@7PiD��ԉ!8oҀ⍐[ +l5BF|=S0~Fx#_<pKdxBFfB)BHm0~7�%?(!$BF!Pigkq;d]du.77Bx%.^,{WYEҷgB(!ͩxey@gdi*˰(gW]\.&eO((!7 �\7DZ#i[ڻ8СCҨQ#0}Zdƍy&$oBB^9QHn(nemn-EȆW9']pAʗ/&dy2dȐ<o⍄j iBHDF; SI2bK̬m|W GeG-xDL;wԨQCʔ)#qұLDD-[VJ*%zR KJժUPB~72؎7N*V6lM4bŊIeݺu7oo}%YrL2EFA �оbՒ'޲n^4m|x<Pܨ,cdݘJ 1|U:oK,: I+('Nt7lPN8;4cƌaÆyճgOua7sLUWh׮̚5rJ*ݻUCСC)n(( 8X`r'ĢټylٲEg x{D^m+ "w' *S[=ƙ('9* ~nzW֥a/@Xe ͬ 5k˗a|9ßj5::R70رc0=!A<_Kx~Gn_(#?o/Ubɼ'iq7޵i湣|/^\ .i'&&JU& ͬ 8t}e8}Ν;z˕+'kVkQPQQ?⍐ ץo>n/*Qoo: =Ⱦڵku.Soyaق) 95Z`nfKxA+GqCFF7B x{D2.UGV"_n}yZcx>76Hя6@3 ?2"4f/^}ӵr$Wmƌ>o"j~ r7oa/[ȫ׬Y8h)`MFHpA`؋;%7J9OE?EF";_8 7mu)|�/ֹZU#|ޜ7h᧢6|Vپ}?W1/(n(BIy}Wđ#GLmڴioY F&kL +Ej:<QQ>fgqyR x -N7:)7FS\`yIL=<f]ݻ\Bn |xUn'A;A&�6mȶmaL{m28WREis$}tjro"1ɓm[ŵk"j펅gVS�a.@[TT!AsxR%+mJ8V?I֥&8z%> 2!PH:uP 4ӧO4lhBΞ=:1? [$E˖-=! [j%qqq8{ŤNǗnScaΝ;QX 099!eÆ CyM)(7%Ӈ"A@4j(w<?ݓ8?wOSa /7ěݱOBBB]o⍐oQ!/YXw<`xX<DUe XcDEQd0XB(ތ4o\/^,sQ>`Z<=tby tAZ>Y0b||M @ckfx#$lݺR(@`^Cկ__?ҦN|40o>o͚5I&)ԩG:=``7}:+ߣG[+XsAaK7B sAH$\|`uj)z1׶m[hSu 83AKZӦM]ҧcA2hS8sAbNHt*LJQ+ QQ\vIF FfիWSdv "R{MJy7b/0!e޽}ji;|H9z677c) .MXv'yZi8V#]?܉kJoV9 c@Fx|Toxs0]zȨ%1?!CZ? &\r |pL;vL7n^KW!͡;L!GFxÔowlX7ڡSRty*]6!%\nz#%RǾ9yKII *ȡC$;;[:tho7,0mʾ}H[^ '-o%MCu%Jv }睐o;L_ݻ+ᦁݱ'ׯkaŊF^`,!^vsÇF޿!~ NaԗU!6{KXV_-ݻwjSLFZL5k5˖-jy3fKz5+)PuBx#~ٵk!$>|Xo333WQD,'nʶ4)}tvDڌn#db[%v ac!:Ѱ:8za?8i}Z^CI@-;v۷oqjl}{V777 JWs 騳n%ެ Hu]tؿrʪ1ȃbo$wRݦx!޷}۰YۤVr81Cz:&͇o7B]#LuU,eXP ~qzN a+^Ƅ|rmFSKCc !/&>oVur-mLoV4ZZjj)+M(!$ Y7q vI~ߎk SqmY *-CH!Ķ -* wfg%fYxƲCpwBB(B1u~x}Ӳՠ?Am#ΉƍY*1aYzrXD|r[ov7aLLZBB(BP.WorA3Z'w8yPmZ:@yO-JWqmժU\8c8~-ŨX8 h"jyo槦-xñ>o]vH0`AaJ 17Bx Qf,n7ǎKȳ&M$_EY| '<o讛0a{%MD,CnP6|EبQ#% �mjfU_ "ZGڍ65j, h{QK\;:=s !P E j7 J?xڦXHk֬kAF!$?mjHgK(MI.[ vɼ.oBE,> X }nӑ#G*BF!$L!B(PG>oxÈpL#NA~=!⍖7B(޾0cm ^|y5*a{á!<1ckIΝ3E!$Du-[J'Vn޼YLj)ia}:/9c6}XF>cLgtܹ/&uϯ&%%gʕ+by!^zEɇG}oo%0#ܴi aky|~cژ@;\EPn[۷̝;B D"ސJu]M7oݘYa%"` 6'<|0 ,{KV jlk%M:U[reե兯VAw/6t}>c ZVZ֭[=aWG맿Nw) 4Peŋ;2F2gȐ!7+;e,YRfs%te!ϛ5wKCzջM6b 0>|tٳolݾQmd_@1[#_V $11#atzkحm+f͚ӱ DO\\jh#""T7xpɒ%RD ק6l;~xiݺ-[TBVfL׺A\x11hw|AT[N/M_Wl7Z Ϯ]'CXRuB^۷o:X5m׮Jic^pA b 0޻C^y,{ ~j8~m̙o%ް4ڣY `Ix;;Qnڵ V +!ƹ ի6k݊):8c*`CQ;ovuuzoTX09[]s_oX`<&Axv(BD<]a'y8Kޕ3ރ;~S~79 A d/./WdMH9s$ސ?/-oV� @BT:Q lXj#u Yz u OVu'ˉ X$%ݼNě/u 1aEͩ{nݔ`CWxZ|?oNk`m\-nb;}\NȱGJ9Y6  'G&K+СCjax|ᡆBn6xp-KF 8P>z|\Eۗo .I!?>omwu0 jyn[l ͩHf ݨzˑEm:}FY|䥧<gh4iѷfxsby[7+e>mYrmɸ{K~L[7Y5uX@._I&JBy7>oPpܷoz 'PoXqhX3뗪[^K$ސJ(hSxR_ ^?~=P"P6n8-+ h}F}Ȝî73P0gϞ>XK|໅N:帗s?ϟgI!27lؠX<g5o\ ڰ:v0m۶93Ѧajy[6Z̬-a9z9(ݓʲ2wTחF;nlt8ӧ|Jŏn|  5j(;Aiqc/~uԫW/0Y}4GX4FG6⼝4}ꂵI  ՋK8STQY7|"ސn7Xԩ|oӆ+|i`oe׫WO5o»Dɉm}~$ FR7Xqz :"0 nHt¢ FbђHTm2qRoX4Qo< ~rF̎L{cѸz6m77x[fo?fK.Kڏr3D5[$cumd2wd9tmK0A[|<8HhT%`Z:F%F !w+]F7vXhmsٝ/^v֮=/׬ݻ@CСC)(,V7E!x#-F:`D/)mŪ۝49sPsqt$&Vݶxw5u,6Dmפ"e&Rи,F@C HLÚ/0|hCƵt8KF c|YWM狺`l-jha䍎фM/`%E!?΅/zRPAw*<15 Ň{RP|ޖXtqS~̸!fԗ'4T.1v,]CyysbyCc+^{Fh־}{e ֏ >veZ_iq0?}6_fw8^ .V=QUUoހ_*t EO "(a㠜/|'Âw<PBH[ޖ._rQ9?ܞXL>Pъ&r['VQ.pdyT|0aCtoz.8¢!Dcr49_ʴ |0bwv7 _EśZ󀵚/zBo-P s݋/v߮,ܢ˕^ 7[oʇdyFB,GaJ`6 B0hZyH&)W/is`XhtLay 1YY75a%}:Fi I4)(!shɼ=/ oS+d-'6_]HW`x{n;29h?5}}y}1y`p6Ѣ2@`x=BtA0_5 hSlQ 0ˉx;_>VpwLZ:j^ŨS ~x#VX0-X4W~wGʢT<Ki&7Αqr;/2oAxڦ5䵠x#k[|Z5('qڽ@bO+WL~\^z!"˜yC}0&| Н-y](!x[&%ƞIJr~J>~U{D\†9OA)P& &oB@]K*+WG93̊SeYI†7BxR->jy#B(޾BF!77B)͗u !!PB(!4fKJ#K<B((!- NuY G|֣l)~8v 3!oBxjcm56wn˨qCߠ=Q?]K|ՈbPLduAsY6x#[Nɐbq2qDۆ2rw?C=zR# W2T[tVGױc靊`SV-IJJcP7Bxon޸TSKRf:tڳgOeᒒzY>IF~$TJ'k[%`Ζ[n˗p7BF!$ہ){^SL.InI xCe202B(qUCwnV鋶Igj{Ӳ5`>tͲׯ_R`utg*THŽ~ZY +V6}N>-M6bŊI5dӦMi8Ľ^,X-[V O,7oرcUl27BF!o{һ�9s8uE,{IbJ,UJwl\%W?^[ȱ*}xڎzOƯKT72ID˲!|233-[޽U͙3G:u;СCW\Y8#F8J3 hرܾ}[5)S8N;w'ՓPBśx`mp]Y⯤pɒd32wse4z{wdhy?y)Vٯɀsjq.ٲlXV33񖑑7kהV^TZUUWJl:MGx#oBf)eZ~%X%wxUr(g5/w-WFgO]*ޣkީۏ_ʈ?>}B&nMyAe%ތ~hFmidrI:uҌªxN4ݬoB(,rM`=a.3ozU$gVJ=ҬeSx[ Dm_J{(Öǩ˷ˤMm}6n蓃M/&&F*$xznR7Bxo+ƣԅn#ĥܖUxkٶ.\EϚ&#F ĤרJZJ2>xl<rUm<&^,MahS8[7I΢ P  ЪT(xUVh^*w?.] /x#7KtYźC$)5S.ܼ"ى7I6-e`�9~%|jVHzWjY#߼Kq{J#yCW~73 &Gb[=geC%F9sQXM 8!Ft:3M !Pkn2gnPⵔi@5&EEڦPBśS[\vM*TRilO_I͈r!gB(!-H:wNz!G篤^298fB(!͛x#,$|,!B!Bx#Bx#B!oB!B! 7/_L 3q^0355կg~]VD?{ڵp<XuΝ$}K !-ޠo.~p_3>$޶n*| 7H3A Ow}޾[oɲyfU?05%%ůgbӦM|&} |5 ae_kr=$mT1yG_/_qF@yxLYyBu_&l:SNmH{%-wu/;φCp?q_)!5@n:~ ɳ ɢoz"cx ~bߚ̒ʔMeɁM:"ߴ^ mGn5{?73y&!)ނ{6`۾wk@m͚5S~'G<O2V_vvw[Jgr o _=_<~nK+dή MnJ}])mvD.U-Xu8tTZ5מ~y&!)}xN.w.4KMmy!Nm}z~yֻ5 j*e{RĀ-}oZl&"//׵cK[4y=<xTTI+&mڴ#G4m)pL3t=8ȋx?_uJ Yy^.MeT!Y,ORQ;Sdd%޼ݷrIw׋͛PV-IHHg*/@ BHx@ ȓ(y2g\hP.u"޼Q`qHC>feHƍhѢRvmٲeKȼ?sxtDGGsa'UQ;|JY#.-_wӤ]^ԩL<Y/_Ru>nӺ84/'+&D d*nZ 柕> dKj)ni>Wj^-Mەg2nMoۃdҲeKG(\}6l@ BHw^Kh=rGS:u䂫]F܃aє)*/1!Y|y9p<{L$222`[o˖-<paW_ɍA,o6_ gb\BZHGTq)oF<yMIz2׼ys5YKΖKŊFҠ14o߾-  ư^{;hnfCm'NH&MԹׯ_M'Wiτ5c~wYi1 [(FKeݾsUyzSeD*I>)CQ=~X/_z%͓5jH2eԋA{Voƪ {9my&!)}׿~Bεk'Iѣ~p%�Ubc9/x?ZN|;K[oK,Qg_V8&-w5O2_|J-?'KMnұcǪى:MRE3gjʝ>k,رZs=CիWvZwxܸq^iOٳVqVu#ϟ?tv_p=~H)_f|&r*]J{ٸkI-OP$(1:.=fnxo-++KfΜ) /]T:t蠞eĉ^ٽ+۽s6<ox׿r ֭%2Ds]uC4A^2 FZNU;K[o .t|r'r7*/[[?n)c˴[[䗍Mռ2<K޼|ÚnR4#G*UHRK !~葲h5k*x_6맶t颺g%0ÇOqF}qVu,=0l7 4 _}hvmLx'uӎJChVX7[^=u=xU~ڕ9ysO BHx`_<{&-ZH{նq 8k;re<ӧOv{߭<*۵qg0;Oӂ)avs3D͋tmOgFO󾖌,Y&/^�r„ `MC6Ⰽ7O0¯lٲCuy+[:̴vqVuObb=x_w`0+޴gi8M%mHfQ9)aڽ{P_⯷{nvov<ǹM !$<[.uY39jgou*:wkqHCo=ز{;iWv/n[AΝ;736Zf!~\ԔRoIek{veJ /iD0.1>*… Uƀq̊0Lwv=XfvLt8YNW}ұyp_ygJA(fY*E#:EK+ɓnf<33Y qLթSG?:ؕ>#Xg.tiS9^\oR5i"7ZV\s#iȃfeDDDNv{;K[oW BΌw;A>L1vqiۅI۹q[-~|RJnG{kcǎ)4i$e1AMӶN*۷ׯ+ڶm+ӦMsݱ0k"`F\cڥlG<۷Ou!x{p?q_oQQQ k,+e;GḰۥbf?dj>Ww_"wɶdԢe~.^6,Z=Gw޲rJ哀{]ۤ$ӧ}ʲ+۽-Ԕ,JF ֻ]ۨrrݺ…8A^c,ֲ *|l=)iv/n HGUɏ)r7F~^TH~;/J[�L_)r/2o-Dp܆c!s@7 é]^HiڶYGn<6tsx!ˆ7/ urZ7}&)`nz1_^LxþIv}+ofJۤlύRVv)~K͓?}%.;#2pq1Av& =A0["Ν;kV]/Ln3A OˡgX\RE.֬]F`)ZUAw^iذ| [_x>}:8NJês>NY>j uO;˧]6.ںGW;ꪼk!ckpݭ>/'M-Z-j*W&W6gt[!b4G &;_s<oO|?G˕Spms G+؇�LSLQ#@aB􆱲a|WJ_ɵ =_G,gK۽UR)ci{lT|mAʹ]h+,>>3A ?pUK6✦wk@ >f9O \jO$w1-@Acw7L29dXiXtn>O]Hю+Pe5MM%}5!RB|۾wk@ Ss3vQ(8|X|Nb$/ j~iΜOsHN_̒n0]*uY$svKT> ~3A Oz[oXe�#?q`ƓO/_gKQPLBSi \?߭ѣGKff%f_K_cWEcLrO BHx1c]w+oKSaƝ;wb:Ly&!yn c>|8 3p_q{k~F>4ޭ~7%N |LGkDzz:.B!n[B!/!B!Bx#Bxx#Bx#B!oB!ooB!oB!n���0 *��̛�� �b��0}UEX����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/browser_window.png����������������������������������������������0000644�0001750�0001750�00000111372�12161032160�023301� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�� ��e���a{D���bKGD������ pHYs�� �� ����tIME68_B��IDATxetɖ.zfΝ?3wf sg{3oOvYff&m2 KF`Ѳݶ[6~RRk}2#"#"#bcG/ 7Yi`0 }D^VCQǙi`�%M& zALp*|?)M=׊D k  tL;o/Y =@dJu3@u}Mg< PCJt$Sf|Cz\=/L^餸B6-:qs! ^y:H9Gl( YpF/Ny[M1x" \q:< ڸsqxY]= {cb}Y ׻{^™ +IBT´}4lIA?>~$~oHå\ZiQzg9@CQh|6x>|D?zKOQw{R1q_PgV4 (o\򒟑oxq>yqu:qX3/IëI)Ax.).({P/-za$|=JsykH!/RUmm롦PDޤIuGu*Wl34'扼3ӔM(*PęQYegϱj7~N>+={#4Eܷ(GW9݌" mIU`82^v&4deB䔿+2]Ng<fs}b3QFɏ4z)ͼ�& & <0b�pK wt^ǵja]gSѣgss./;#O>d|lEG r粠IwCսP~VkqsyWC|3z'ǠǤ8M]KN<:i(yFgW+)BW=k`-yB3Ҕ=\}KIŽNE#Wp-'_e>32ke$K&D\//IëItFcl!#q"8@0:\ϱq<rc9&$Nd�0R䇭 WcTѶx{VeM_Q|!b2לC-N!^-_G۹ˬCK,4 f4`QI]i 醮L#h3u>*\LVZSHz>R$>.=A 6[w82UwtJw!,>E>o>!k.{uڡel4qV^2IPf1H/~a! `jS�2| }tϊpv:byD)w>LkV t ,2. Yry.>LeO~TM#c[Gr[YFD]0,q J)k[%ll E{RiGnaNkt:4i@B@L)C\J>f).SҀc®>ȣz.ZuwIe~*i^*(AOrQWY:ȎZy)ɀs 7 QViAΓ*Ж[bj<x?|cQDI{,ےU,c8|:LCi|lh[Qܶ ԯF媕~m0<Ja?yJXti{r@2E YgU|%!H|86ݝ\}w}37_8bܓ# e<@)gé?Zp^^2 p3y pMӒgșV^y3I`x3IP}eȦi@/F$O1Cٌ&HS"1"ޱ$H)- 4r>umG2P.!qjQj1 xFJ#+[;qbɾB}@w\%aP7Zkmwg<;z#6ݠ5GnX=TGWYG-xXS~H'+c\otټ$h0I`x5IS0~g8 _'7aˢW7`9eYI˦p8 ~ã)Z}Y-[ p> A.щX4r>uTS62e yIEM=-BIy?aF@Tn:K GM4G+]y{C,<@fm ʶlCW$ YzBzV>|.Ze9e ɀY*zYOc$ q}mVn XyBҋV7h0I`x5I�C$FtC0g.[ `^* ^D}CiovGyЏJD#CAB8^tJ4f/5V7Ok]K9GYPL(u@}uGoPfcz'ش"Z$ͷ$zU8@ z-i$#y^!ȯЀ'h(Su{[̱<LaTQP!^V5kXVFྻoy< sO$[]QNVƸ6R7bK8; ۯdh0I`x5I(u>;„4XG9h"HuQ|r>DU]feYHwY1ZmVzw9Q2ߡCܪo�t?X}ˎrz3BtqߥgiH4rm;t5KI5u\ʬ}x]@>ȡ^i)! ;a q0I`x5I@JCF1{}1'b"1b-G-ޫm@:y=/IëIQX0WaܮHQ>擷}O˛#ҋeWtL *`8 4ޣbf0vg$`0Wb< X^G_? ar& & ```0 & & L I$`0$0L I$@eeenk&  :m g0jAAAt1… TQQAϞ=}ߥuDңG$0$gp+/| (?o޼0~:UVVjO>VW!ߵkD1I`0I$aBzk,:! >|oߺ/^3gЫWtIҸ $0$sR$VW�yׯ_kYpu=<ru0I`0Ir`nHH@fI+ᩐۏIII~B}8P$OK�y% z;o ݶY 8Wտ!& ,5_@G_э)+`0? I ]3${z&(::Jk StL]J{K72I`0IpS׷߹IdeY3IHROy}¶˛ꒄwя? o$Ait>*//,.L -ߎqHp6w~LLL=olׁ~ۨ 9$8YY֕ePs8.-Qd *_RqC�/zW Iwca%� MͧB:Q@ˎR3)l4;vm}Z=h΂Բ}GsremڈIII5n^rrsFBܥq&3I`PIBQrOz^O'2O I7ׂ49.b>v o$nߠa-h*kJkz TtN H7n^SwJdT^ݪUm_I²eˈDCkڜJJJu[o۹wFMZy QiII4g&5iՆ6oIP^~w ؙjw+ԅhE{J j׹+}۸) :?jMHBBD?#1>}"ZOhpWeMJأa8޽AdY' ψ/֯}nL7C;SI͸+*OJgwkkɐ$`ֻyj]͒zIF 5[^Ie??⧯(GSH34H{vQZӾc5wLCn?I:ÇzR0thZj5%%#Ǝ4*(,YӪ,=[TV^NEEEl*Zxw锕m ۶s =SRD+׬J?itJMK4xH- "yD_]uiQ˖DҀHi DS]Q;#{G$[7"]ꪨa/KjERNT\LԼfص+IΖYE3ͣTތ9= a$@Iag`\ՌïfHj OPt~e?ŠT>~I%/|Dm,w&z`zaJɪP;RRSfέ;ۡ⫐R?T;/^b;QfV%Lƈ2 P}Wa l?O3kE 'i˖Sg̙gлM IVԵ+R[Խu�'!i jJv yD Gȿ QFƗ8 hVQ;#YD?Ǘ_9 QwtϟRYʊg*|r(+"R/~Oi&C�%vZؼu V ï޵ۈ$K/Z=$J$b_#啿GSSVlZdw̥LK|; Dw`(tփbTG,P ;mdI :%Ó<m ß ?l"hĘqœ8�iJ0jAH#~ $s?I$.U@UwJ9VY:#xLA}x3uTN7!|G~BЇ>`7ąSfx:gn!Iz|ɷ(0됷I@?V~ˆWi(PBYAV9ESXR!]˧YnD'  ˤw…EѶqA%u@z3ar" L '&K %Fٟ҃:}FTj SWHD6T%*h7(yXd`kIHI>I%ќޔϦ x"~K?0 Aw 5,I!Fb23tz]̡yZH)t)<s.ߥW.+Fy(!1Q3}鄟0/rXF=(*:Z5?jarE`EIWΨ<�Y4?oiS$a)bE<pZq Äiٖx,t%H0~hD-FbR'A$8: ?WA[[5/q!DԷt4_*NO_�?oKH¢EDmT$�2ޞO$S <*@:}"L$L~_鑷I@:ze%/BbX~,n;i?O<IWII Z&M@I1fD ~] Ӆr{cRTBxDRq?c[mddfftӫWtI0Zߐ*uԻwYfĉ]QHJ/+ugwVj1gg\\%$jp ڴ +僇ѷ?] r}5amacqFJ1mؼE. 0óPm[՜+KGV,�_ohIxhܸ YHBqr7*I Ϧ ݍe7eC& ϟ?wYH Z p+:F &O Z{KȨڶc 8y;LF p|^Æo~m-pd޽o(ֻD [/\$|߈t,-+e`% a=CMpS R4c ;wPvv@\]Y:_G-/g+cǎ"sYwt?RHBf_Ӭﯨ ʼnIe-ǂATބ>02R"M@F$P1ѴcVIߗb@QQ4O7CцMkB9:t�Lu=&CM,h/Z0\Vr4a`x%pB2eB&??8@ӧO\^9F]t/^,`pfz囁ZeNK,sҤIohhfڼy%?& L$7?FJQV_ kBq7T%)M+CQbSAD o#Q= :v0n$p)2eegсC]N4wڸi= 6eTmd7IBO9shkNezilΞ=+Ρ333Gr'O[x|Ve[Ҁ #p9~8 4]=0{OHq<o<-Je$I}]=)\O1D#MPeqJ()=-h$`.77%@F$gӑz3]vO Fv0 t 9sO0*sqFŹ.SK[YʶkLL8If˵fHJJ2]F&kL$8&^SyT(o0 $;LߺMz$WS!nQe}d +q.eYq'OsQc {sz6�Rd\tz{qF3c$D䯫mz$fuWS!_ЦIBFFF¶mD ?se 9e%_#[ Xq>|K̭Qc {s,(W8Zm:ރ=ut$ -bmRg$K_'͐WS!C$5Vtt0ScyuJLLQݻwE:<g F޽{E>{i9F-썗ϑ ON#+-[@5kX`z�ϊIb'X,uB@ܫWtczx*sh>6ۅl1�Az%ͭ[J�هA 9 K=zTaڇO|A+&M-Ԧe,tR:uڵkQ,DA~f`͞ULp+/eR'$�AgI`W vlu: eV%T0IBt#:q6�*ŋbǔ}1Xse< h? 1EMe >$;`��_ 4&Emrrr46Ѻ$̋t0I`0 ǡI.t0I`0 3& dr 7I`*$`0$0L I|p!pK(*8dIIIx`$0nB޾}`0n-ȨH HS.]+$ov$p (H}Zz~>~gCy3-D$~ƒ]w"pBA-Wq5?iؘ:vA~nkϴufѱ'E|`0 Z$({(~{+CRmaxL==$Q6ҕ *))pב;RjZZp!nK˗/=qqqO?yL} 9H `ApT޾{+zz 8sH68/[nXa7oݦѷR]鸟j:iVj۩ 5nъ?2V5Sڶs'ҍlM$\ZZjuMU ,:rf<6Xz h^� >P#ǎQ0t?нw{+W)M95O;h嚵Q2! x=¡y<09" /CMy IHMM} E~PBB]$K"IȠ۶sR`\PX(\I䈱D[^ͧUkY]3qt6uώ$%##S3k񔑙)0|XڼuU='M.F 9P4|NlrSCzt\ C#$[κjY2O)KYZ֩A(ѹG/ϣ>7ϡ1=TCBI@]Lc&L2Xam:u*8eN{PnеWoJHLѸtkQ`gÇs%-Va0z֡q95W},a2! r@jGLLziYjΨ_}g! }#"\nBm$!++C@/M7o yv1mںDz GtPX|! z}]CܑF6Ȗ3\#KB6m?X}NZfKVPٰI)=x,(Ix&C?/uR;x2Md:c&5iՆ6oIϠ<ўllI52h Fy.{Ҏ{hѲ՞ٛy7o[OO} @4;?a~8t4yh@L6O[8BS Iɉj$TX0l;_>ϖFj§e.$C_FU(E{O<kbIЫڽ]S`t:}m! xZؼuDӕW5 *̬,KX~2(+Et*1 #::޼ycWYZSh)T sЌʭ0z PFp0go<0=y%,w-ѽSٳ;.O"DL>q/8Y<G` cbJ75͒'tn/I BbRQuF@c`?2gT̠0[u訚]Oxu䓀?tX#Og-CkrЗ R+}F'̒*v͆;V> ߭N' W&$+t� AWz�uR=K_(㭥Ѧ2,**J,A|>L30zg_3|]}FVR?`Ys0nweI_>RX>]9}31<Ui {HBjj E�A@XDlӻIHrS<S!P|`Vްy<& pR /oR=Z {vwplj˪:Ըe+)lu9ig.#8lZ! kF[E @kIyvRƇ 'һ-)1L)OSVzZShf՛a LDO[ĈS=H1UU]ϡ°}5xǍ /9=13p^$(q" I`0 1f�Lpl:�ڱ L0׌ nM!OSZ:Cxx'H=W_ ҥooTmNaz6FCm/]B-ڵ׽?vz{F!2YΣcb$'t-$J,0Es @X._󣰾a6]xx8UVVUZXm)*:Z3NXj =03{F=̹Ϟ@82j=ȨgdQл?7ݰF(uL13K  o! .:cpL)NLam0,04<moP|X0֭w_:{|C1WCB_F=|6F)n|+=?&ks}mpw?'hgkag&I&$wOGV<~p=s<>ˌ͚ <iT 'uDȊπ | CF_$`nj bˁLL̒|ip]O7?[wV; YsQjjS7*VXV ]ܹsGSgϡE �k� _`Hk@优$0$  V" `0n& p+hRXx_!r3ݼfzy0I`0I0I`0 Z$ν;tm)w?O?|YQ?k'l`aa~" g/G-5*LL$xIJ?8O o% bp2瓿?;vNh1׭uc$3H[SmǏko޼{\vMԅV1I`$i$̙3zm�{jfl!u,|ncrZl*pC8cPgymύIILPvP6ꠦn׭HӐwBb%k>" ۸aG{%A#$teԪC'0S6\janԶ$̶:w!f_?{LZi<GFҘMuNlj12##Ǎv/FPyg# O<:FP[f/IϏ]{OWC]Ħ' 4#F҃u˚`T8ȴ`eqNPyDW :Ђ%Kc- tO?I9NcO$a[)OVOgkݡJʪ! qH$9ki[vMaxݥ+A4lԘjdJp |/_a;I¤iӅ3@K3(Ξ` R/c'DKISVn!HyyC+V;}#sTq̹aԄosr-xw֬ F@ G碼fΝ'hE>s抭|#&V ){A ;A!{ajz@6l"a|N ;)0uփjCKV?5{ m[-m8P̬lԣ1²uPx+IWR?oߵVfmY nj^ի:Eu3_7# ;M%`Sg=LHkH%֎nt))&Ҵԥޑ6mLEsh�DMEMBR[>1G}x˗/iM|XFDEkƐgIi)0>BOeyA]޷*fcpK^4Y; ,b|bvVaICQ^rF10tK޽'Zzk'UA)3CV$.Voԑ";խ.Q|O öחAQci CG<!MƴDx<7 F H[4C ]1e$ Cr# Fz=H)+T`A!o*i3gۡt}8uzbk[QOD^iA}'F ^AXsd9r3\3g0p]y'IV3{  tm<`9�?$ NVvì ζFu:px?<G)TTT$Pl7GI#az~ p^EV s:l~Qǖ2IP :F`IЋ\9׍ce|jZpiZ~2k| v]tn=QmCh7"2T}̧}a h/g+Aicy3HlE2K.pX01CO+i+X=MbE':jzi Iǂk,lp6J?9P"֪[vv6]JthY8C))T(1CnunuMdZUΎIU+6o)~-#F1IИ;22ȱ=$֒W-rU b_e<FXGyˌ3, wZqQ挨' 86y 8P^f0ѥgoߠB`ГڍŠnkpQXn$dYa)H]@VvJӶeee PGz OvUd@b[][]/HFiPaZ!윰a\_I#j )d71yf! 0eI�hy -<#9Gq;vI8vk6:MpTLaCs,- ֖~cy)˅JP'S Va).%K\R[QoFbCS'j uf5U$tFJkPęi�b0zNoZȣTlQ"Vz$x\(ɓ zߓ:'$᷀0#u=^qϸwxJ+lkխI{ 2߁5pn4lXxz*IP}C�0JH3(=$0Yخn!F0%S?}Zps]IҁO# h| {$H`b\(`�((O8A@@+&0E)$A2ZÞw!ea+%^Al;/y.x\?4ix<8*Q 3XsI³g !yueQݻ,;-=D1:\=#u=^qϸw1oƟe/.ֆ` b,O`KOO r\IIPҷCoю[~]KmAzXnUy>yZAyV((̥*-+;wo pV" #Ff#u {G-&hx3moT7& L\-X]6*XXX$`dm잿xfQTPDӡ% Q.]Ek); $ *);'CyYT\R(p+mݾBPOYq{&6@[MPQ<X֍IWl//caa'$R ¡*_'&%nLFbODxa[El{rDkAFf.ө0 ƭkP1V#u {G-&hQZۛ& ,,,LB0jg~lPTQ8~CӮ)<" H]V@xi[Fl�Ȋe%BzF eSnn]Lwl˗/ZMn7ܳ|h m62G[+ޞvSsLtwuLXXX$IsV"99Y(*'-[7JJɦ&Z0y OrP6ꀺ"/ȥHYBejݺ.](ZMn7ܳm;mFh+xenPz9$;qR,c$HJ&;J] !v4"O01N�sHc<m1mLK9ZHL~ i\(AS'3ZMn76A۠ʶ\=WYe*Ҳ}GnLXXX$!I~(|F&Ƌ_IJTmKwnJ(3emxa[FPu 3#+DAB,%K#t#y1B8O111z5{j;Z7pϸw@mF6jmonj |מԼM;p f96(P U% XkuXC#K/m;wR.ݨI4o"zc'H+0I`aaaP$P4HN[ YQEFX>LwX}wp/;R4RۖQ@)뗒$DL\%$Ä8-_R  "Z5\/3m@mjmonj |񔉏3ImEҕhݖnܤ8dIVӰ�nP􃇏8Pjj 'TǗ!LXXX$1Ig~L8C +=dI]/޶ BRb(acif Dz1`䬖ng;�eM6zfިnj Çs쥀/8%%vb+ |U9ӠqSy^)!gsrsA c}LXXX$%Ig~ +a>66N9E{Jc/efT)<uGF?!aO!G{Ľqx3mW75\&c|X>:czj 0y:yhj"H]$IB((tV0+/~qn"G٨ҼlT7 .jn?:& ڴe=AxDǃnjכ#u=^ebboٶת%Dz%[ 9qQ:#at:}D2I`aaZܧ^]BpX&G98w$EpyB]խ.MMY?Ⓚ[YF[C]B v1&NڈYuiF4d";SʛեuZI¹sTPX5מxu$fnYa. +;Şasv:qݻOC u]l7 XYdJ*J堫b73|$S ѷTfaY 4p 1fX] |AAi`{@JV`g?YRfR2CSV(RjxB ͞P3~"I<x*IŨᑑbr[wDV`z$~}vӻޙ?(Z2BhЉCP6ꀺS7X 0ǻSe^qI5~\Ne-Z\+pQ,@))0<{ΣXt YʧZgdf`\$,Fuab+ʵh ]$@wJt.pHP4H�Fd:׭fuܣ`=kJp&ZSν{�4kݖu&V ,?~N q??qpėW}?cy"F-ZϜIֶ>Z#(c8v]ƆE9_jzQYSFfFlEӧO9G6 ZQ,ްŷZ[DQ^KfV( %zymWo! ?VVRݤ{u5}߬SI2ybltT]R\7f1:;toB`:g157ЫWKÂ@>G#yƜy^XO޽_DWqh>7|XK={i4z)SRTuA kɂB)-X6nS  m-KeKjٮ3Kcb-Q11l�k'Unt/w7o^ �0pZ2" 0^uY|XxH"1b䒔B_ˣpo5వ܅1Om.|΂E'YQi1Y޾}K 41/(KB{~b*S݄AKV X* ,*3\?R7AlN0,+r{HB40ԽU6{i(Y$WZf_ݼIzXUDd]vtrb� 4|edfQ㖭-d` X% z0գU{ I a ض i8T"L^r>9?fOz W=$ 5ڊ}b3Q: 0U$Nodu89sٜXި$AY>DR:0'$ޏV:RTtK ]A 0�)lO1˒)i Zϵ&$- zaUuFLPPp86y S:XQc6h+ _nz I[%n45Gb, X-P X$K+9$;pPX)jG*�4X6H|�#RĨp$m0u]$*pT�4E Fd9tK;JZi\!@iJ<Ԟ;xH ~q~Z}$rr,PwpXEUD^A( `M@хHsknQ C8cF?'o�'*=*͖WV^.a'߰# Z#,K\ZxٳV,pn:Hӧ5?:QWV7͊5kEEg� �'f((/eXр rQjV0 (o$ Zcs-6Wkɪǒy3 &G6լn8:O!k>4%b"[ Ln*Ώ?a<(Sψ#G[}(_ 0o& # '&dǦ/8a⤤q=XeWJ$xD҄ez ,,L$0܌$a6kIeq,i~k"_X$x`K,1ݰbIG+쓀L9 sfe$IMI];J$c=8;h]bh& ,,,L$.<e{Zxu]7w^9$�gΟ˳6o)0vdvi|K=^ $IB]ᩏ, |vZtu]7w^g$0IpI{P]�sj$j7& LXXX$8$t Ei]�ej$j7& LXXX$8$k}P4ׯ(ur;͝nL$0Ip:Iu3$`$IKIhJ A6<utz:u&h& ,,,LJ ۃ$ڳo[rn 7# ԭ>@ݘ$0I`qFEix˛EfV-\:oS,~S),>0/3$0Ip_Ba7?|vYr I>]={B͎p!7((q}iU;]MI$w;i)vNv]ML6;SE =sA(*)$A/*Kwc3yHx`FPM:u7Q㖭A7oa7?{p5$DڍIBݓcҥ+ATT\L%UhFgH0Ժc'*-+ qZ[h鬺;y3Ip;2Lx_PXHt ѼE$hɊy@?}KfY_D&\0|KZ`o'}IwZZ�O;mE~A!v]$sJK˨Af8(vF 1EܧO;v!F7KVKbs~'cQkZERCŵC)]gTnMm9aS|owE9yc4۩GOQ.0;$9k9!8sֻY_(0z3{]CaG}:U<sdHէw]|@/?e6[75`A|s>g/dpjkڍI{|1t瞽4~S$V"LQ|VYR쒈~~bKel0zYd)mfb/ D@(;6#%ۡbdlj$A\gf}uvIлWg (dI0t'KB黦ͩpZ({ dy&cA<]{Y붴hr켖$<Z<}􂕈7o_SRr` [NܡWlZr$\?H/Y"t6CW�|K.e'Q3yLJ$I<:Cǔbqq t cE{~_Ph{yNeGCX`0a>?}ZW(r! eVY$A^7#ZΞ+o' iL b5Sƃp ђ+$`^(|-=ilcW4nWBDž%hhqiyuF٨H�3da82ؓ(Y�I�.]5LnL˒PRR",E0I% e@'}:1aKmA(Y 1Jn֦uZ|iIuήIP=#W<o`/F8G3o(4l~1:)-bdI@3E<^E` sZտH#!+'4d@]Dީ:)GbqRV1-7FPG-YYbhz{s2I)(V1IxD&N{@̙+ૂ/Ծnf1*?[<Sj$O/O3u `\1G~Iax<d=ҳoֻǒGR?)G}'B$RxfkaӦyfF,ݿr6M|EߋϢٻ㰇9xn([$M  FAsï6nfk'0&HX533S̑I%ADmq,S4n#`iNs蘮a2Ų$ FSΞ:I0zFzC FydCb<8?pf׶=)�6Yqf,nXe ҍˊF } jԬԨkiIuÔlq<{u:p!ZyHkOD-+;őH&cx1iGzb* Fݘ$=Ip7@bv" F2Rhw3ۨ 0B3IbC^ p97PZ1qJv=u `\aI @9%caF{^QE_7o~mйG/ڱ{S$l!Rf۩ V,\aAZ!5-U" gtzie+"ZO<LETPXL\{yl5Ŵb1gZNxIo_l\EkuZ$^$EEEGt&߭[AƖ̬\v6:&^ .懲QԥuD`=4`uZ$I ((tVq=jԼPǤԌlj9 ]`XTu/j7& LXXX$8$8//.ӈ1c'dPq{i֋Az$h& ,,,LBLE# %;.NQu&h& ,,,LB`ww�n͝nL$0Ip IϷluy#'j7& LXXX$8$`n[zzz@ޣAgw3ڍI& Nn &55N�w̙j#bw;Cݘ$0I`aaa4K?Qrrr�.88;͝nL$0IppB6EBbgCw;Cݘ$0I`aaa o5<泲j999bZV7wQ1I`$)$`$7$q$IIꇎ^p?<Bc+WN^UNbg=l|~W�-8S1H/ԌǖHj`&4JRFoXw 䎝bHm.] m & p4|$!3+ZmOܥoPqI -YHSimTj޿8<RئuNTZVV-aSne$9rJ 5ưg_CQIi�_P0I`0$XvBRg`/I̹NAa!͜;n+.3W p}MiQk/)57[HGXYI%rÇR$zKu=uuMӧOaح.YhijqFy. zaYٺyYJ$kߵV9$`Ps,Z? % ᔪ%}xz|nDW|fQ((ez4*|TQAc&Ltt#Q4gvTT\lw=Pa(/DVv;׾hb `RM5%5,/e"(/~\C7UdIXv=qR J"L:IB)P'GH ʫW]Vdy-5hrܼ<9FrGWRR*FZCV[O!o$HP㖭i%S+]n.Qk׾#Ue;%mY;.%/Y+XΞ+o' ))b3$ZOڅ0& aᔐd9wȒ $5-L$LDzXyͣDƱ2~ּ|0YwWX7t=I#fmQ^}Lꓠ a}ʰo[%JǏB<ra}Ga'R οicH L7[ & .g=> z^\J/8FEUvTFJ֒g(Aq|S0[Or@D@xԜA!!",wޢ”:fҳouֻG9jXaV4 & uJ]݀yлnXEBib$`s=$a}4aT�?c @Llfh%#;v ?*gE` Цcg" 'O6Cs,-D ΚfR ?(m@`F'K\A(s_ݦ&T^`0Ip;�Q~'8,RatS/LӘ$@i��pW7(@CQ$�fU|pE8I${/�ڦA>͘,LUʕFyft=eix.Ŋ Lx+IIؾC �#IW}(|H[aaKa`0Ix0Yc*aaa$$IL|yz9,,L$0$0I`aaa$t uӭ3$0I`aaa$c`ث;_ҍ)+`0GL$0Ip=I7w^CO}/] 3cGw_Pɾ4?Rt~m& LXXX$$&JKK o ˗/(~%UaFqZ $>:.-Oz22VN/j5V[@s,@2I`RIMpeeHf= aFqjuWvLI0<&6ސ]$�K<5ʃ'[W7|t /c"nje$>L##HoGNNP-7/K�3SӴc֊Q)R*aحmΝԾK7jҲ5[HXLu+3o,k.=:s F+ n YH=׈8VNS?\뱵m+_l9& @2p08:A1gddZx5;>FbUk9zW(=2âqy4*қQڝ?5RS2c?yf;RKBc>l,#m*埑)Q6ofΓMԴ4Qo;q2& @)J 1Œ:Hf|^ŶkGn:zi$ +)7:N:Nԋ4{<S*\:"oަحO+]N#V|W^YFŠTVVF 7>!!I w" |k IxTQNIp$ ZqX)Y%#-Q_g]l<ȡT܀>0>=O}En* t*H^COVʒ-۶Ӑ4DEk@mS|%Ss Fm L̋+7q zJܩ0I(KBffPE !V�3'aL+EeC* v+9[kzS}RNoQF3zS>>>*HaȌ<ίo_|״)!VΌ%A$x%Amw8{H:8PbbQM܆ZИv5gW=W+^8^. 5g_ Ҹ$C+'{/bRjݱ-^JR;]^`KK$葄*L1ŒW7ĊNpeI9lecN~NR4aBUTTP\|<M5i;s!76W%Y^V4$dKI|.{sYrO9 =OlI1f30Kp'$$Aϟ-jKmW$AW_ӁÇ3i}R*rr(Rib+C0Iwl̄t;UV8v]QPHXY)Ih1=.~rjED1Œu%)~<d+1:EG&{9v̙÷� =AANY{Б+B~i?dwgYMZ! /R~Ľԅ-[NϞ`cnZM/,[ڲ# .$A(WHEfΝGZF-ZϜH]'Araiڪ -Y޼yc}-sU7R5-[tͥwGy>|ӡu.srw(  8Pf;);# ّu}$ 9[E4c~x�fgo{oBfدiVk[Y[Ėc HoB~LHo$JKG{'ȏY#KO޽[-ݸZz-4YLU@.X6n3mI8tPm6%"*̨SK,hCB{mվx_חbqFy?dEZ£bb,V yK'}/ Pf{k>a*<;% |={V2~ JgZ2џ].FeF&%|CO[қє<ŷWa嚵븈)h1r:|}ʌVj+,`j]>(r9[%`Y#$e+G%%b3,USuJ@d^@6k&%#Zm$2= b#�VT\l u -`EdJ% oAm({mπ08ޟAz(ceGeE4~<)gWm3n?FnP :7̋l,w^ԮWuʴzRq" 5)[M+30쨟;$ޡx?~(O><cyTk6=轤\s|.S>MZ6d|9)@`Z `o� kTEQA8ʊG0 -<$dfeQvB:E S)~7SYr\<FЖѩ4vfٶou 1Uk.${pA!l^r1G~IaG%F#7z_SQE20+J ~10I`0$&H\XjSHBd 3<HS4n>,`iK?xj<L\7i:l-A tѺ6HA[<DKY.Qp3jwEŹWϢ�8 phu7kNH,Q$`6 +V2I`0$K"(RNt2 X- Ӛ$cNk$=S~ `7:[xâ�SsV=;{] ((/e(W:i% DA^Ʉ_LbSH/�Z-1c,u\v)ez? v\d0$gYwNn& & .,Bz,,L$0LX,f`xKXX$0I`0$0I``0I`aaa$`$IEGDQ@ 8@Ξ251Ѯ% 8`$J>=#޾{k:?|\rъ($0Ý$I…K(#3HKI>|wD]o$ 6x<\J^~`5$x#IVYKI6`0LXXX$It w]}o}B~*q@j$ ++\=겾fghI;I]oTuaqI8z0ݺ}j#3z;T($x%^�gL~z52}? Hbi]ԪCG:y]@hج8p+ߺR,TRu�ά׹ 4{B4n#3yhTۍ){uNljw$޹M7k׃Q@Dح7w9IpU'#<ͦsU]mFyŻ<$$%'SN]̹sTXTD4c\~58| #v7M(ҲjqCr+c& ΑKWhب1u?y*ED7o鿊0_XdpF8QPKrયEGGsf)8Hm:v|/F3jC }J|ιqVgռ#zIH}yنَ:Ԯy)m۹wFMZy Qii)YыBp1l;/tBȂߎz}여X)]yV[OZV;ґcǭ=ve 9sr7֨^zyw# zi|W6lag꒙MzR 8FXVvnf[HԾk7/( 7kP#2QXa&A� Jlz<0ĩӤ?ֳ_y`؅Et*x%~]bWPP@+֬ԬM;$Zu׋y1vzΜ;VI Ui$Ey6Aj_HE[Icq~~4vd*%:KJy%~瞽4i=~D`”$g4|Xͦ5'Y(=VزTV:82cb-Q11<%'N^BS;!2*""tӸ$i(lz< qJJnz(XsXͼ>"a5Zu׋ҳ7=xr"ԮsW=olk<k|BpC> _BzF%{~b$$S1#|!KT=�"& 4ifWٴF$wFVV@G‚03y 8sʿ fv"C=$!=3:uI{Gbx@raa4ljܲDg,۸i  k\_e=$ `*qusxIts$#Q&X w i_9Gʷ'(Q<'Af|lǏÇBra}hԢ><cٓF^ 8ac! CG"f߯xLSS7" T5I(++s """ lz<0cȻD*7!:vNwQ} ׋,&$ݽF%|[�IzWQKBm{- /y"I0z>j3g.PPp86y S:5v J/D}=VkŊ\qCƥ;oDIo^;|OYbau0KXF텳:ظ8᳠L9!R8fca"ujuSADDFiڳWXD&_mbz�O# X_t:pG- 'OPC-a87iV`4Cs,m3R$^O#& R߄goql6/eC Fy;xHR ~qiܺz6~V99^oo$;@:2kOW\SaaKp}flz< c V1�&`1P ٹG/=H} %L}Z_ 6j"gΞssxw@ZA:.ʀNq)OsJPӔҌ]x,\W$^jpVupG`|RR *T:Fy` L+&0E$AZcem�y4aQkFP.*YW޽{b~U'k&0`kXX-Z$/06ӸVe$!77%{n|O```=<򷍾[ݢtzIp&\B\;w2\}o}=$`0K222 Y`0 '4í$`0$0n & QG$K w#$`0$0I`0 & ,,L I ְev3ianGiw& ,L$0A4b8@Ůi5شuʶR2<$\ &iپYrrs-)4~Toc9lg6#3S<¢"& ,!ąI^7]RͣE˖ӸS8MAZdi;69xP%%b<|XKai_ߴY}m-\DeP 1'QE뎝h٪bG{={v';廦ͭ m.dy߼u[있>]bD9ѣGb2c)Ñ'u~/uK$I6]{YGl[`fXQjJktzed~{gIi!U>1y[ūgΝI\J;v;މ;w56znuiߥ5JT?jp?IB!3ZvMQFLނAA4l0XvoJb"% 32w+7^~zURI`85-Mt>MN,�tmfm IMI^}տ_#0qt){:AWXΘ)Pْ6E=.YR~@.]rg`ͺ뵍{+&4A\g͛O$ecڥD֘$8Q^~M7kQcŇ}ڱ:oKF8C<joաݹwOnK$Ci5[3e4Ϝbl5냙kl˲L@tL ڍ,a4`83 MtȬסkwz#KJŐc9/++ҨPy}B—y>ze775& F5_#Eh.KxfVe8#!HSPP`<ytm&ukGHB^5KQϿiؘI3%=O1Ice 57ЫWKݸrS#i5[嘸xz|R|z2I`8C)L9*1_TF 4*:F $֩{O \^^n9v(Uq2^l5KҡY> FNE)3>Vp 9K> 3{zFJ _P�/H1zlIpgfƈs|~f^HVIkT> $`L]co=$0sU9"՚'1%Al5p%I0_s#DAcEkO+HV_ݻF#$8Yb195)x e ~;'Qf럚.:1 wz{$,`W8%*oM}f]t -V> Xz9q[$LhWy$}\=1>q4f[@T 'An [6lb+P[$AyXi{>cJOUPϚmyc:IB ڍ›sarާ/Ju" F嚭rUa�~iz&dpR35(QRg_#>i~+4܎S?Fi.]&<a6޺c^ٶ<;Ҙkq+LG1I8xz/t*�I4f$'t)}j$އ ڽbE(y&} G[3q& 5̍Âʙ^'OиIS(/?޿/LKs,r9I0*l y]1pHTE2칦&d`@qU}qqǑ:~ϙ�Mzn?}Z̽g�,N& F嚭1;G<mBftMM$Q_rZAa_J8n`aa4C1݀U@J7I `$`0$0I`0 & ,,L I `$`0$x I`0 `$`0LXI `0 $+I`0& ,,,,,5HJJD:u5y /$`LXXX6ժug$I v.9n؉uNx z*ݿ=fmTXTFg*si/i\d䡕3I"nj#<2LD6n*eVӋ/T]& L$H2fDz*+_ҫׯiOH'?ۮh.5ySYj,O?Z4L_.] aS),"^yC?<{&�ve$^is;)MR8>s<u]0!#GQvNn+>cԴUZb%K5ݰŷZ[DQ^KfV6uӪc1²uP8Jfjֺ-jߑ?au{=O:w|_E<W[%c=xXYIvBZ0I`0I0#P=ʬMvݹg/ >Ҵ2=GP6:ֻ#Ik~~4vd*)- `wjϟ?˗0XZ 0GЀMYvٳ�4*~QE*7Sf'O,ax'Ma)S=$pIv6лhLLtb�:עb4QO>}2ZOeG>BY#ѵ^Aehafp欕Ξ+gvܣYaeP^oeVZ_P`9GDSR4(LԽ'2I`0I0ez{JVFg'|*S{ZV}$ zaP_WK@j ?~H>|g% C#̞<77J7 nLA(},plOVy<~BJc=INM1I`P}@*GԪC'1ׇ!F%9Cq{[YLfDWQO|̥ fR;obaUb%K¿A)ֻv$nj{%Ao\qtLiv[~$0Iw$ae/F`=79 ˬy b>_<鴙,& a'OwmgМtI:RCıټJP'Ѣm{':(vn�|�ɞvSnte{}=Fc-& $\y LmԄu&W%-0g ma>}7$y>- 33geFy)Eǎ7Iֺ$D7JLmy%V.wHmu{UN/X֒'7$AZc1I`@,,,,I0%g>ca$,,,^/jK(7nFa$I K/>X90I`$II & & ,,,,,LLXXXXX$0I`$I& L$0I`$I& ,,,fŝ6aL$0I9nݝVzWw^9҂3ݹ 4{B4~I}cZ2ޑx& L-It%1$sGz7q뎝Z4LܼJ[mq1I`$A!?VVR(%$?t:v!_b%dW)i-Ԫ}G#L-9w:tN6nJCF\1ݘ$=/E){ ęy2SV;P8?1jfjֺO9~)Uq& _g`DYv=qҡ︟؂TK&mViϚM<ڻMB**LH\}fGtPGe $Ay/JyPn/_UV;"̻?dEZ£bbh_gOe?%('j?۹g/M#€ Sz,Is Fΰ0I`$$iB% zϐ} +,OhIW Fqyys:ٹ>}rn4iڍI2z_le bT- F3AΜo?Csv .xmXΑX$0$8SmI’Z8*`nU'aZ#r# 5y_lX(Ï?҇̾{o><cٓFb@)8acpLQ/<=E""hY5$0$8$tWչL/{- L$/j3g.PPp8vݛhvUb%K¿A)ֻv$9  vJ IIBt5% 'OT1zɡ9 c^k)' F$HtC!ؑw~Pڀ?(mW3sʾhqBc_8|tO>I�P'gϬ|NoׅaIIB;>-LmԄzDw恎t͖ 8VZ$x/I0z_FRyбce�`Vu9L(�?~S$fE^ pT[lŚ<QG)w$ V_==VU& LgaaW)N{rC& L_L`UV>` F߭(L$0I`aaae0ݰbI& ,,,,,LLXXXXX$0$0I`0I`aaaaa$I & LXXXXX$0I`$I& L$0I`$I& ,,,,,,L$0I`aaaaq$ 7o8woEL$xIpedf8lMHHˁL$xIW. eYy"& LXXXXX$D�L ( & ,,,,,^F & LXXXXX$0I`$QO7DDE0I`$+u\ĵJ$I ^$ILI yef$Ip& LXXXXX I{/Sq,l3I`ROHBD.]@I ARrK!L$#�%A& �AxI K=' JG$0I`aaaa$!IzH& ,,,,,^J>I& ?k23I`aaaaR͙I#SFlt7xbu$A*:-=MX0 Af$ (`�fI/" 7& `hIB=& `+$0I`0 I`0$0I`0 I`0$0I`0 I`0$0I@呿?;vbRyy9wX IӧOA(++?2\7oPXX]vM;wZ I' gΜ>۷o6bEM{ho& IǓ'OkvF{ݹb0L$x IxpI(//Ӆ2mQ9$H}]4PZ?UVV%~_m{HwӁ;!]r:w^-۶d.] 6;J4m:n$SHBPp0uӗiX^ q{;qJ@9ۆك�WӧO;OMN@;ׄ$?L㨸H`:x+on6ggԦMuur qVԤekZiWPm(++۪?dSkkKSN^X<W[FfxEELܝ$Q6`*..R$BT:g0__ЩSD;0<<<jRwL<gQyE.3 {tF*-9Ew<BL+l9s&}7^G?A}4xAZdictBKI;߻vp<rIi3gǬ=JgͶza9 /XIMZm}^,v]^R<! 9+7mDK@o·FFnhÆ Vaׯݻ[j*k#9r$)/hџɟD7Og#(8D@+~h皐SGOUPDjL-+n4vo4M9D>$E$٥ -~+60` ~k,Y"H [FPΝŵGD;vFY,  k-8<|fnSM]Vk1”#)u~/u/[nk+#Ǝ׫)&ש{OMY=槄Z~8F?KMvJUڱ{6:S蝻4=E׶j4lO{^hLװyK<݇M[M%�'0Ipw>##$O:4đS9t4|Xh#@g͛O֮ {ŋ}z:t~ܹj $qa8{<۷o/S%lԴiSJIIdjԨU=VXAM4/ynn.Ӈ&L+~ ,EZqUꈍp.ȏ^*>#Sni",4,FBh {u! OȱkC3f̠t 9sL?/ /uFĒ\A hoپ#^$WzF_w*g7of\qjZ7+ F',^+V*ՅK /݃fsc>℟?}״9-[r>ͨgK_ŽןnRDDnK+KI6jRMOҭ:vA$,%*_zSBb V$^ t4GHCa8B'H2?? |~}z?EEEYӥ{uC/OW`V(\_jJ._;K^ isP6MIsFQAtvM=A>sM˿KюCGGG+Hohss<]oa rI(’fz>R޶Y/ E?-K+})r_!W+0GHܷ؞+f4rֶfZw/U܋-?*aj.Va1IK|HDcKqi<-+J YX/L�2 0(NjL?|ce9 &{'"zy ` J L3O3ܾD~zGwK\[h{p9@ G3hX1@K-eEw(>>4h 06W^NKف9Fߺu7n,"d`I#88lP~lÐVImzeYdھk7YAzIKoOfO9FfmiϽDJcƉiyZAI>ͼ 5yؒQ> T}ૠ[G]z&g;ƠC2x谔@v&sk׮ [f uEzXݻg9{U*WN�̄2AQz3[TGzHcRmIF9AvEo&GNuIe51~_ CŻvҒc%zݵk Y$^9|17mhgI+['j5Ͳ`h&5%(I0ӜIjΑשg9*cY+X=V5`r2 �StaH9N:C:B05P\J#Dc07nܠ??ygff_#\ӧ9m�Ft˗/a P`vT\[|̤E;-p/;j6ß펤n[hT:⍈CO:FD'.:8^Z<H1P6oⓀYfY⍮9~SY8DZg#vn=GtܪC/>3W#c$ ?I\o0aU^j-Z?}͘3ZAb>$Os&I2:÷0HIMNxvsF1=$�/n_[7ntnZV7<zOjL2�J(ZX/LC=|pl `t  __T@;(O곛=M% KCv8NΞ=K!FF bĉ0e0bĈj2Y<ߧimU>8c5�۸Iw b /V9Mi^j#6O"- ;VDU!j>:݃-lv[`Vi$ 5}VFYEܗ^մ~xxp�eev*< Z% )X܊(?7SOʗ?Rbj|CTK}qqe=;qIK:1\ 3ڻh>$奔BIit,2Ipo\VxW�~+u�2wZFC03\ yCB'I<a_Ltԡ`$%\�rp-2 $Io oL0>rp-`+3 & nkI s"õ5̙3lI`0L$x%_(sg ;.2 & ׇ dpk�"~ `0$0ISlv.t!aL38`0I``0 & `0I``0 & `0I``0 & L $a@ T0I``0 $ hX`0<LL &wml����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/paned1.png������������������������������������������������������0000644�0001750�0001750�00000241061�12161032160�021376� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��B�����<���sRGB���� pHYs�� �� ����tIME %�AIDATxX>_nbO{ors˛{#,`(Kk5ƚhرŎ H, ,.{فu5<'93gG&������[ziӶ%t0������-@]M,kboiZZ������HhBE[]kKg8ZݔJBdRT������h!B҅ԋV:SknrӢ7TH$< ������Qb!B sHhkѓp /Qqܺ:U]]]UUd2+�����7+XHn!B i1zfkbr58"C#7E2‚|������ )-[Hz!Cd )3sr5EHVTT x| 0$cHZ34Rf3a;Ο2R/$`HJKK!%MIR5sT*L&Hh a~~J;i a999Hɐ!=CT{qƩ8B!\nuu5pBBg`&:zb'<=޴(JEbG\II 3gHҐ'(WT詸rz-ujpp <##5ӡ3 < H=<M l{A%@Pb͋4Xjjj^^3g}?VU*뫪ZYoq  Gt<q\п?y~? E4> �MAEピ,334jHؐ G º:Akܔcۖmak n-%KOgG'[Q6vn.`\Ge 2ַyg~`c5Io/&{:9rvik5ͬ޽C@@4Zn uy^|kv^cvӺL4ɋָ似<gHҐ51N. UZZJk䠠buQ׮~;ȆU]FJ3#)p<T㘔_t\o_7R�WSM%$L 5Tyi:&yuZ4n13+ǖ\E#34fX{ͬ꨻O) 5횃 uS.ݴ5g'!Pby^\-df^:e3MNnԸ'Odgg#=CT }{sSRUWW7hܸq7P7nɓ<=]B#'%i)\4+}\_qS&A6tI^ WNvKgU53gcbv^Qa�7SMh`lh'g6 e86G;73Ĝ&<<\5)e5J}ڸy،1jV܉ܽ{˪�O =fF4&9:X hZd8ί4#mGXN0S(Kmky5.!!!##4jHؐ5h|JBg iC_g׽ơ1sGivPOv;ڹ:9.Ӣ3Nn1vqNILnb+25ADu8fqܽVa$iカF3m3c<l>.`iu<~>nS/Ŧ*'~CT,V6}29s䥚voF9G?o 'Kt+N-gU]oZEkmgs0mv1~yCDKjah_�t-9wu\6S̬_CZ6J5/Ns#S(K{5_NOטXFKMMEzFv)sH$\.d710k>HAx@Б'6'i>2m ; !nvR5j&GZ,7vpq*Ub裼*xVc84q&I&DN-rtjh@]ÇN+o9Q}sGv21tr0Ծ=W♍MwҜ=~ܴ]}MomܜW;TlT5{�?捵}*`gb!I˝<QZr4BB9sŵtwcFG Ns#Q5izӓm5MlpՋָ$''#=CT [SSp8yyyơڍ/Ϣڰ_VF9 L#wzmiӜ~?<ONp3j6/g4wZ e{:I]G\nk3pP:Nؒk8L-:S^|J;>:5/owikG ٘qQk0߱>A' xtdXWkR@clk4:IQT㷬Y9w;[ў/fy}h4o{zcS1}KkU[^vlbMїxhnG ZOb^^mrM5zi}3$iHU[8a8_MU%C aiN.qhNoqyiԸ)9Hl|xmSk65#KwqD7ji^p&/zX_g1 4rmk v {`L_swh7$gs {pnƸy5δUt;٭x\*yW8ezx{:\IkݽƸP_`k ]ِۄiQ yiB0=F^c拪&yo*$%4δg[TTeo/:.>~߮]䂀x!|E=v6'[1ԽqRjMa-tGۉ?K*ssu K*yN1cB;['5δ`kb394mutpras}S…e =<5h li!ƯNdKܤIN!jG[ggoܟHrU#]nul}_Ըf?,Oz& r 1>c[ڴ^c]}#�VxبS~~m?jx)aoky[7Μ=<oji\nnnƙn_|ѹۧ_xz*Μ\M"9|]nxG(5%k SV,vnks^Έ L+}o{L}ZҤԪEen.*Gw:TdMALj7:Z0r/sՂ3aZQIbGIww䅄bvgGGeԲ /ˇׄ{{3 /$LFrI^AGYW?oߕ5&U>n/hiÂ=-~dFt<K)5?:zR 9T:2ft8nS!mkJРSLF^:e3MR_8:\Cbnto[fff̽{ @@@Z8-X') ϩ ?;y{^n>V q㔦]oԸWW3r 2 c\BP.OWk8:WpרqUmt&S5;1UoC5cŘz \Xtt]wg&6TڊjO9B)5ZZsimߋgD ]gor!KNMV:ƣиV՜@@@u Qۋ(S3o41;}LqF]9rysC@@A66NΡrLA\l y9/x{;Q[l?46ƞ7˕^Ĵi^Xih;!l<vswKh�O'Gz6z{3$ ͦWN=vd*Fv/4)}== 66 ]hm-6ϜI1BFxQ`x;�crP@wAڼK}3~mGnlI anxq>zةgx/mZL '<nj l#PzJ ec󆼦ƙN{暓E7F27 D1> ~ݠv4l}IM i7''y_]YDžxp¶ŀxہU4ڮɀ ������xVVV�����Aj������x�����|�������!q�����������wh�����qV81-`a #~-:3qc˳sRou׃nyrlzubRHaE@:t!F B9+ &T{z͛a\t8? ����XޅMyegN]x«i\ꝛO9q&׈@$mRkiT,z*!^$&޲8+zf _oXYMgW5 h.O"}S?,8����x'mB\M^ũfO\H'pGscOl1)4$$$|['ElXT_tpӊIA!!3#VՋq_i_"B'O>}RJ75~C1eMxІV/Y4o5. AHO7J߾:>uދXW,[1o??&-l4q02g?{WZ ?ƭ&kstUSMZQxy%_IiFMچFfs~i3{RY/���?B(_;}ŝR1}Ϝy3i[x57fe3?:fzFm{|"O6~21xsI1فyZIDu׶ϞQgh|W_M [(45dAmH"-6#tgƪ',<X+ (TĄ-ܴmR77|)XI_o^T&~pKCtKWUkDBgd0Ơkf����@5Sq.x7?$0NЮkc'yUknM6gq|}T)Bn00T`MjuCV.]H-HRC?F4dRvM2.iM-l8;I5yN?q}RZTHЄr/XtP"OƐָ6mq?'%Ɂ0!���|H'iWǨbtn|fG% ]J 3y!v/EA5PJ&?Tو@BM)*f76o_4BCC xBt :c-6]Uq/Օ2o}-T]_u5 hN7IFi}7w<g?# W[Wa<ojm~5skZÕ36&sʏ<ϩ8@?c5&jeظM&����-N /1- <Wɥk75F,`ǝ[9.lE3bDq79ٚm5!;Bq2h\o 8pmSUGW fQgWmq[[׸6J{|!0#CƸwOx31hBSW>zFk&~YP ~_H���� 4N (+BB~*V B\Y0aљtt Z8i:g=|^ȧҊG&D'F} ]go1#YO(6ԤsyMNB*hL%3'|:Ț'I$oWI?|d˒gu|4~'Gm3xҼj.ҸZB6J35/:}]|+C긡ߊq~SǍ+.]>5פJkoӤ4zMI7qu^,Y4g����wޝƙbqʄ͚t7eF-[8+4$$44tfϷ2kp o\>148jW64tjpԌY+RrlY=9,:y[FR-7LʞX|axP_@д9KW/*eʅTw&}64I_ԸVK{C<<B<0ɻKeeJ[߈ƵZoۜr޴"&s{���4N�N~A[R ����xI3^vߞ?o 4���5N�N.f8����:@������>l�������8�����[������;i\:������yc������{@������@�������8�������4������44������4������x4[UѤҊWj*އ����^޵!@o T8IHpTS�����kx~DH6 z-z-I0\h-)R2- hq-N%k?F㐂54+-*E{=5?qwvV _=hg.3[\9fpOv[K0pt]���gq8 '1ə !UTK V!#%j\:FƁƽSHU=,8;;{_h-eMn;W$���4HNq  1pLK*ɩ8RԸ^b-&`qƕ'>}!Uŏ[vsC)0!~ 4���x{gƚKUTuqzN!j\)ג25!r:%JtPٸ>VƝӫ;ӌ9Yb¢G\}ok3CYr[JtÀ^mcF%(dUzP7eOj~i6c 8zN~{,6ܜp}{3w KQS.Q)SAK-tӈ,,X 4%ϋ{X3`Č_F Y_���oI֣d;k$FPp2-|-!T\2 iul֨"PӡjuJ kJָ}i~vj"h F_ NzZfºy@=  .bݛ*-[|qEMtm2BeUϢL{:И}4@>=/vqFD'(=,fM'=KTX[dMO&hRkWY+ٌMArOðcW+%켅vye}o_��Cd;qmzk QHF/, /WJ5" WqL-P(Õ8)ב*V5I;,?hblj~ֲg\QTszG)Jp2yJW?,}|s*W)1Me\I9>%@`%7$tv{}3nd2,zŒֻ!>k tBQM/ 6YTbnTssFND u >P'cL9u喢z��xf^Up=26m$FROq SiI,IY]\W.1OM0%bH~ L|Z#U:#QW+>X޼NXW oOg+dzmk6:yY^u[\d'!^Q#a3mr9ߩRfGQl=t_w2<7XݴC 5<f d }P=LS3*wj\F#~3&+8eСV-F4ߨq 1?&βs\��ޙƽ#yqTTMrxHUIup" !Pm\։%B"[(ϖREE"E\Qc"a#ZBK䇮q,rO5]5\{[33>LaioLdZ7:V+#3v6J4,(o}nLjPņ;yVOY"OJi=MN0jbi * c`/@kjb.U|;+UQLl9SuR&gq ,l5j+|��?$^EZ"YVNH4zJ'5Y"UXRbLV Q)\i\VhjByJ [q U:и=ܙe8rݯΊv5:$+CӸ{Kκ65ΫU&D8~pϢ#KG0'%l>cӤk IgO�sz֯ײN1`kb@q}7oE!pnU6nڌ 5I ߿���3FI88Ɣ 4#:B'T\5Q"ra<K%Hˊ% %V*VpkejgJm޺-Jyy鳧ZTQQ~K/q5(s+YWqV̑7q;zQ^QLt %h8Ugܸ}oByVY]̄%t_xM*5׳kLnD:H'~S,-qh=mk8L=V܀;=2rFNlEATEۺ¢V ��4uq~F/qthqN8.QQ9wR GA0%5$CR<5)Ԓ-QPe DKE|i_TjRM+(J}8P[o?@}Mkl+bP[Y-L(ZãcϿ)CM=ppߝQ㛻&lZ35 ?|o\AOwv\հ0:xبC-3Nʓ?wݵqQ 䛞0E͕ݞ5;~R{ߏ1oCoՉE!^{sEi4fRȵJX,,ˊhm361+֧F"l/��;8exkA!zz72)8nʓr).Ґb-!АR)2PG*_jU бxSbl%^(Tf 5*Gŗ/q9M4%##}מck5M.efeݷXn}h\y#fj1gE%OL_uQ7qb"lr u3:ޞPǛ47qc}ޭ~N}{l\jv\_W,w;)s[m*953kPK;xa8s4nC y21HnO`$\?u_  ! j=eܝbF$>ϛ0|`?fm쭳cakq{o䚖hhߕ&w���oDZ<#_u78S4B i^c+uUoyTWE2<5.CRk;L)r-CjJ%UW)RF.*ĪEXզV]S}ɓW0M/XN8upدqE5[ 椂e]77דAIOnơf8}̹Ө;::~ɚjK]m{)/Rr@Ts:T��e{mD,"#r!V!TʵՊ+U2L!yjG(tWՊ+dHUX\]"Q52mT+TH4%MXh\%YD"у{"w'U0JJ sK{"w%>gV1JJ%=q+)rd7,5555u!!1uu u0ԥBuޝh(ЀЗA�{?:iW ##nW8��q3K/jQ8 a%j\!'#jm2WvF<W$rgJ9q\ӡ"LwVϜ_*ꤘNիqB',@$euu ]BS Du<Y}ѸbtW/efd夣/<|ҕ Ht +J_G2KƙOò*>0'd[5ǃ^MP閣.N8]B4^BG.3.у�UUϚ* 2��8ŇW8s^G1 :ֈ4\'Ro dygI4j|TKtɴUdȅ1ZL2-z˪^K4G*JKD_V!Tޛٸ\tp5td Wdf^Bg^GR RgWm;?u45ش; 5 3Q7їAxK����5e#XN5a$%)cI5jB!E=W)iVds-g-hYjZG`:$|Fi5Kx)[KJI BN(TJ a_I `T{_4.3;-+'Ds™gO$=BA_:phߙӞ6p,#&I᬴_N<?m3Luuu̹Sk/A8wL%3{ ����Kil3>Ā a<6h^#9JS:`d;\r={*@K9A=5Z@_r(bsn~ƸW0jU)upq-Nqf>ٹg{ԭkɩO%З{vujRrb“J:0wtN܉OAkN{GPQQQ߸c7u]B]Finܺ }oDh����5_Qm[-j1pipRk*%c8O͗᫲vVVT*8F r ϕRڛ_VZNtuKtK|!v̪,P,%Z '8Խ7q]ƛ>zߏ(%u}#D߈{Eg^Ovi)ϝ}2.d!+z GPQܻgO>.<}IUtt@����5e_`|$,P89JRGU圝ٕRazkpZאBED |FձF̱XynfFSi&_2z9W;.}_Hq-W/iu*uzh\Lܽظ{۹{'?|߸]{v?yvthODT׽I=8tA7/jGv|8SgOڽq-O7eR+oeEofѫׄOXa}gp^yֶ ���4LťUc Spr-A=g%jT>RRY S)8ILG'ג|5Y"V戵{K*ؙFt()+SE|QmJy:߹׋r#$Q,IZp\޼Ms!pVp]yq1.&D= <=Fq{kj@DmR4kOBϭaikܼ]uzS%?[/yBli3>o���q+H(9D!S,Vkj"F+0R} ̖<dtrUQ\ ]uPL.[1:ߧݩSwӟ~,'Uάƽ;UO9w6䃑(N?v(zL3jtdIVgƝ:sSi]G[Iܽ|&cvϽf. w}wMcTNZ<˺_?#:Sͺosb0׹!C^aYBJFyZD畮8Řw=၁l2̽ytrXQnck^x6̺k`{Լc~���E&/\㈆H9Kԓ" dj N kZUk*L{Z-2U7Zwi%ŪTXD-ϩ~=cB*bXOR8Ky?Kc+ {9zX[vGOiu 4TVNHa UJ}L #0u놌֥Gw ܢ@b~!{",7V4yyrV8/AJKY@Ogm>?ndsk!^=׸(KPʹ;?mƙ6r/���3i\xTs7#H$Iԫpj70B%9jR05JH׫t(%FpRԉ c+?‹]<sG *5XM*<z[aՈA7Uy6ߗKޮp5lu01nՒ]E'lsƺŒԗYィc7ž*::u}a?hСz>btR:maѧFl[ڳ) os^na| ِH%޻M4nfz-},`mk*jT1?¢/_2S7r^|���ϥq6NȽz~8$gRZ\KJ$_KV4R 6&ILr.p窴R|cv}\#lvŜbpK*0XUEd^\.qdFc]O}uD}Lɲ<%C׸C}&lg&p--yN0k˹E\tP_U\.>bEqےb؜o.Q:w߉*7J&3GZld3'>FjUݢ ֹbgy��?5S^�n~r8+DEZBvhzZ1=A$NP7̩pRGt:޼S-yv΄}%{<}*NU?S#9XeyEv؞uOS:K`_}]5c]v^:>k\-lpOHDZ8<f2ەFo;eaїeza6ΨYlCTw|j]ΘeqУjH͛kq l*���3i܋ƙ +tpjkNJi5]G*0}<_%{!;;iաC|;iy!g~gB2{^zݬgkVWPov;2;H˚6<-CdWZ:)0^T}7|jfX=rDiF ;G->ڢƩՊYy(PE֣5"$c˝8G` Q޻ VsY ^#V+%76ٮơV XqɧU< z9/Q>���k\2Gj\3Npꭩ]qZRAz%Fj*Kp}(+_Guy_:mNq!fQhca&+,ϱ]v?ps?쓵 ͻΫ>\*qfȵиf}2ֺo;% Ew͑#bp["IUӝMsP³D'rr lSTMFqjhíٹ.\w4r/���i1v4-q^ZzT륆UT`Ծ tUrTI b*$ ;tӪO>cwǮˣ:Euؕ厧_H:2Z0fь?ė<ņ;lxoO>Y1"y:#;WZik^,ո6P)v=0W����^G^FpëPhIpHڤZQb r*\'IFV*d&A)̎tTg>Gè]6}6؎?td|ƿV}[쀋%-fgjY7;Nn:. |/o ~pҩI,иQ 7| 4���5M(E z+0j85.Ґ|%.@RDRGo 'R l,Qِky;᷸ӟ._tWvZk]fwqؒO~p*ۊ]t{Ӵ?ctǥw>ِőoN=1'{˴qohQ}Oڪdz9ÿ+8���ha5:[Z-UQaӷĉHH kZR&R-4a,ty1t;O>ޗ52˺GOv{Ds9ӭ65tM_}S.KuN~4'$2SWUUu-hRiEYҬ�����9Gqp Kz-FbNCHG|`NrݓaO<\57;ݡ}~:/KϳOb}0{}|QHQqq"_%5f']|6vW_zv-9V y?B������(3<J7G%^àӫQ`#)L .2,JX0)]pFW<{q_5ϝɿݺzor׳1qeSk{i=){D)Rc?[(e*xOٽ.wY{;[wfpثUMy+ QD ����q$/oSzpz-FMũ ﶗz%X=QƷiWb?{˪讳9aDP3tNft&w=0fj.GG1^t_b^M95rs{o)?C079ALl摎aaxTQ"V=SfUr-h-3ƮI{\gk ;Y@'-wFUZvM~חNs1E!S&ϯ)k\;dIVUգ0N)1��ki񝪦;ZJncz9W'`E [yDxJv#[tf^x#~YCSsu۵~/m?کU]\ aHsŷdsEa+LL,{Piq$zmTS4c~:v˧߯0tm =>+RxZ-?EwZn,NQ7#~F6ܙBrSד(߰%>+f֊b6#wS\/ʶ :(t~/hJ6]qE<${^;s��4r8: k:a`zӑr-Q{3ZL/Pr<Y$ g'LcOHez>uS.|l?^XGHLq7oup?=}/ W6?u\2)7 f%,N{`>=yL;MrOg\m9l/(/M+޸Fh~te^G_+nY;r}*5Ѹs{\5.mY<bPO }]}7=jx>G griMJkޤC6'353F Dqt٫ Qmg]7yZvCq[drasCZ+,K(78 w5Z{J)>7nK3IKMg=+8IN/7��+kmr0ÔeruưcDG4hdD@s)X,x%CJ;SG4z{KiuqhX0+˥qTWZ {uݛՁ4?8FΤ;ţv'uާ^;w*;05#6Q{lI4[z<*ChI5΢Uvl~mQ3 DWlm"^gF,h(g߱ bmOmM7laV~0&,ݳ{U/t6&]޺>Ⱥ78,8b͚5w5Ѹvat+^e+7yyA_-bAu-k28΋ddj2'~qGkҋSjbT נMhyVl)~= ��^MY7 ZDFOEZB&jW%Njt !!"61)AGunft[/<oATt:N~^;{ߞvp곪u㓪'$2wOӺOsW~'묨 nu\x㳕1ex=eŲh:[vZ2j滩JZipHM⭥ɢ\x*a6F ?Q2ֈt݌YzS4gg,D{X:ײoH`*+mR SHBpU{^Y$V4˨wŠk/twNVBe`g*>)f_5MֆnF\ ���/qƗRϟ8U㤜 Yв:r8 'RuzFJ[E*&7=SձO#3%-KٸPtq\F&UΧ}OGy;=⎸|Ѩ;~ 3q|G̀^w=|{"U1_{ѼN+c;Ix){sIMl:[/S._Q~(oqxە!5 j^<Wt[t Ĵaj\fJʹ/T)Efa9lJ6vԆơ"WLk[�7Vggƭ4-P/#F DJ7Kټ(w`Mb3ܢ8ccs46S2:��xk1DEZ}KaKrrN`n IzO*JV|s<Þ䯏t;'}'>?=o Yr:7>dgnuKgDPcVHV׽d]Iz-o{NɚM٬1%x_ny0,*@R_o*䉷 @>,kͪߢ)lzS[M 4̟Sg<Ama9I#X q>^bM:lOiWC.<D{rk1)/g2+'<gG1-ƭ(,Y<~z-_as }H i`+9|��Qgx$Q.Ǔ94LդDM$uaNr-Qs%ڕ| b*??;0Cɟ6ᤕǯ[DU ZP#Ě_D}/.S/t+_y%[8+aq.O?!rCnn{\XïUh*H=Q.yew*v dSc<883U2Ӱj[/1rܥ˧z 6 B?i͆mjX9]J3~ )?ܷs˺^!q6)&|$UȈ_֬{7h\1nE_>81ES ;գ_/ZQ-wqIhzoJQaHy/5[yZa%[,euF= e5n R$Iэ>C6ٕmdrR��^ZzDPNV5PhJ-\y@RVKWʦ%=t{ Hu=iV^p*ŗ먽H0爱9y+:N?f,ϪP#Hg=`9s)kojH"Sj vR6.G's.2E;Y%]W.NAgMDbM=9XҸSz55RnV q޽W߁o5nYtk=3xʮ6IXy3eD*ɦU Έ={X Ymakٶ.S~<4׮QrA9Co%zIUBm݈uu UxޤA0ku$}#zq׌/M36��^Vz$48|5GSPFJzy29~w*a6hIgty)uk Jcի1VQ8XGV+Ess(ϦC_s{"xم[.!^$_NH %bT"jX"KrGz [+)ќKZw{!.OMa<f)Pjsc'0���@0g$$2NSiKzp /N oP^ X`ȱbh13Q`|5UlR P+̭II E*JבR^#N| CH kTh(Ma25bJ1 *IʃE>lIõa8"׸)kEX4OqÆ 4hjhhܟvV )��;8)Nd%| ,\S!r-)ޣ Am NJtXK(Pv5Qc &C}•>b)Ζ0V'Wcu ':R*^!%ZHi0Z'TYJ"S^劵Ly~}h'ReVsSIre]RSSXZzzzJRɒŋ�����Юzﳄ2LFj4RR#x sr2+}n.RG= ђ< Y)]-]T^D^(4ܰt+(GE5z9jH1XJW!r,[-x\/ϺL箍h:'[U?i IFG%zU>ܫWgX[[~q>O8���]zq*h9@ՒIM㴤@K5#U8Ʃ]1+ze~'(AHu@tGiTY)%rXiH@ jR UPCO3r)ūx\X}.3 f<c*߈[.(&1=M 8AĂ ر`A@" "zp zfQ8V"2UFPG=WDz+=.h2L5@ XYY}bitdЃЅO5Ν;~s.==}84����5'ju/h EOD$-nt=A,Ī]'vɞIuR*_@;86jB1Ndr$#nH2&.Jh:)*S<7 6ݸV$̉k]UY>]4!gGsP&f_G+++[xF8$qѷ̗ivȻ͓'O AO~M8�����8 ]"LjɆI%|>#Ll!] $X*Ȟ%BdG*J®!ndQyq"sMd% (*:)%snp/0}i-Ml|–\Sɭ.~wɪ.T oVboG'y̌h.mubEh+9مq&7Y9'JSuvwO>d6Dbâ#nΟ?`ܸqǏG<xpݺuȂEWΝ9sbv޷Ɔ3,ڳԚhiYf/`F"h���� 3+5:l. e[%pGJDOBqKk 9C$& Q:FOsė<[XNy8V2u񗤖F}Ӻ>~.~ts 9c,褐Ը;GOVoWW?l]yhi:p9}qxɼ \4.Zw~hܲe͛goo?wܫN%މ rӐ:cǎ?~<@pի_%nf{I+pZľu*C.G]qY_F#^`́V ����K Y(q+nM`׳UtQ'G!&Je&x*q'"DFcZ9T^-d8wZ'jȎxLFMV&jU|j.fGg+TW9⛧v*챔1.ƛ<MucotUnWX1'sN|p1oN .ky|Y%J*j+MP`ԝEN˖Gu5^<dOj+V'eddĨV5}{VsN6s%kl]ܹ#=VG{iy3, Z˸mgruȑ���8I-Dzv3+,h劉<1C(*dN,'JbXdG\9<,sN5}_^*t"~ և=n|ܲ*rU섣c74L2Be[5qcΩڡJ7*M1P~1*Ns"KtKU.ʞ:5zO<ZUy%5u/톋}dSG5K_8<*Y0s𬬬I&FtL2ALe"^2s=ָ0k$hsV~{ {E���kI(l&\΃e$zc#*H$ER@BK܈F5LqzWoyE 8FxwOOns]f9(/uP[j<KW'.oK]ԴE=1ׄ?u:lᬨ/oUjG7fƄI3v-T=pѸ%sٺnʍt'8v@Ѹ7"tttKbqƽF#A@#"/?ĭшO>uuWV__??.��� 5/FRͿ&7摭e7[e ~ KXR& /e %, '| %hg:x6Oj8Qt6nt Y3'ZΟE/L&.QUF~_yҘ/U|N6V%I%i˃/1Rj:[X<9q^|'̛{.gwtkR͚;uz娚[`9zŲ?Y.ܝU7oތTۻw/ _(((h„ Cbc~q0HZCt0%A����kM?]ձ}tݜ :2ɼB!ɕ]7{?ݡ19d}uWB[قJ-K\ R |-9o"FDZed],f|nПteʓ&ĝd|5d6[%t̓kLMhiA5&Hw*kΝM{ ZmA7ơ6Ο;cv&2jԨ'O"0Ν;o޽{iii~Ǡ5mGӱqE`FɈŵ*`:^+ .���[8 _VBډW_FΉ5l;\A,')꼋c7\Q;Wg:N—09b _DH )H&Kdw2i0ī ~GKdT24~MTKgE_H L,N,jkgX>ԵM"WqlZμ58ǍNDB;^*pK:.ϋs.S*E㦩;gִI~0iG|t:J~***Ⱦ̙g.XBi"L՞St D*@^Y ]ع~twT:ፚ6kM+S����k\5S`ױ~AN^ꥱuVŤn$:R9[xU4a+5^+Y<4$F |%m]#ٹ2&&th&'=YU$aHt/IJǂIe" #&OJK |⿋M`x!y9QCs-mqvW,ū0\47;;{ͿڨW_~㭬k"2;v؆ ^}N8-3sEۏ+< )=�{l׺380n8����A;迧߭_hG!5b]$o -O?hg)xRWsDD4 ^R-ȾJJJ#p/5XLN_Na'vr;ML~_IE'lV[Jd74=3Q;OXGv^ȟwzSUK v#*o9eEl˼nθW666_~4\S㪪ttt:&&&|l޼{nx�����kS~ ީ,z*\ d5l9)"%pNv&[Nvp%mQ=5Lq [B43:1xCA۪uB*Ke_n&\h$R*yb2O|}<K)\1'i".%c|W iMU_Y~ݔ{m#W4:k8> ٚ~^\q_|t:=<<|$iҤI>����``[oU|<#iU|*r bɪ&RL;!j\q#%%4A4yG k mNmqdj0ئ鑕F[iZұaIuaR[0y^9KX'" DD6#.6QK7%N==Vʜz}CfsΉkv%~v/}qrM+jnPhp~~~7[* ����iHgwjF7ϸ8^6MNjµEqm[\K6wlcf*41%4څz^rӆǍN +Pz&˥c穝:vr vvXԠ gs?RUp Vy{6J|&HTtjی l'}C/oUN )~+>]͝pQUSܒN _=rSG&x 8ܔ)SN81H���wY> p7xT%ӿg撹$vH+`|>UM8OW/>8=D (SLU=Xm8$wҖH*{zO<YٷULؕfӾNlǞ8WTѸtg|/vndӬʥ5>m:uML4j55Nv?^ܹs= sYn]߮88�����jW wbB@j$4RqBpmH)G=UC݅%)$.ĶsbORxG/ .x&Ou[F?Ό`OYﺪA2ʟN+=9J?luM<0Hȱ["'}NT1QJswͱSq >8FO/coWܯNGWޫ4;]|JѪ ]g2uÇ 4����eSW ?]3'icJm6ڣvnQީM :w ^5C\_-V49vm؟|T8LU]k~tά7ɕ?L/>;_x*/rU2U`NJT٪|ajkT*)}'?-ٯ`W|yX&ᣳg._%Wrǫ;;R9иW8����x5nʽVv )-F$zZ[7{JYxLfFYvejw) 1d*;mǘ|!G(`,GOP'Gj<K"J%<+%" _@ddնm496qW*(<nSRLFRTe² v?3@setL]5+kŦ_]*#rQq}8fWܰ8m~`0Ȏs˩Hey h�����h7u_5Nn^tiy\ֿ;/5Q9DVL VNVҮ5S7Pb_Ŵ!N[9)?MX4KWN\# $T"K")_,$)ŌStҸQJR<z 'Jj(OKyZPPm&N<kc'sb~ V%fqm-Qc ?;g_%����#_%ΉnYQ[<Ik. :* Q-̰FJsq[H=K1J7m܉1n?:5OTO7.qD=rOb)G,e,'ĕ׏pJGA3QGO6PT ;* zAm17^)y`51f9}s̺3WRY4A(44����F}Q8ayb^:P ݵ}k(m1m컭#&fAX& 5IWGӽ1S,|2 UϘaCĒ' _"{<G$9Xcg`hPOT&|no\Tx[9|-$co魱.?MkkI/{{OQA@����`kk%+qSƹ$ΣMiz [8 DfC^EvZh '̋hj'^,mwWyϸMWꆨ.YyTQcG˞\K$r'zI3?V2iOMUڪ+/um,ꦚ~m1wƿNw'Zܚh5 Dy +O]e%Iƌ4J]{~\cD@����`07J6?Yd2;\ NmD݇V?=YN'n'f,Ц_+Auw?;n1i֣T4ZMu}A|QWoO, G(Y%'.4YIi򅭒T1?V T6fq֑? ]z&{Ic=q{&:jҨQ*F)7ZF5knn~Av1;}+N����q#8������������������������q������qq������q�������h������hh����ƛpwf~qA����n#?!" 2Lovོ����Uzjb pd#k0ahف����qqqq���������MhTri9Ojo +n766`KŒ?x#?���׬q Ltë :hܿfOOztƞo54'>t㿀Ɓ���Ը>3.lN8Ρ7o[F" I!76=mx+&EW}޵m3f\χoNr!���Ӹ[ /^vimwɯqpkF*<>]Xb[_B.c_B)Sow}w3N]y7ߎ ϝ?p-9}w-+k;5et=fâbo\L}UY8����jH U'~;4ܺQGCHt*ފigN3شxE8DښcG;~Y  ^3x?\%qV*v)jH̾oiU[1̛7o1j::[^Ȏ?~7gάr>Sljn޸6Rans SDaH\;{̕'Һd<h����'%(dVgw-q(D:(ϙHAD]H@ץC,vn I}h\u9Xr&t"[\+RB:sJ Y FV.䬿ۮh=&oߒLU.Z4kGo\ :: P^}5GEZΚ^Whu{Zݶ?m=@DӈM[ RgZN.tsOK*\py���ָ*-?62jšD^!5 f1r/s;nb#F.{k}]:{-\kCzmARe wt͂_b2hfݫ~'S<}ˊ#e9꼽KʮlF7Oڸf%?i* >1I^>XlƙtogYjH3kEU����xu#t&}_5 kIjqۮaLjE"۲s={TD:h._bSREURkԩͲ=[4NAgG]W3,(` Ʊi6ȏ5 왪>sU,XPBiYm_MW|=RlR7dsxl%`_@����5F>\ϧ]/t'k#.qQx2Q=?~!ӥϘǿ[˄SL m!QCIK=r[{yWim{_.6uTj>} O<}ڼF?8{l8����x`58s|EN9m?jySă t" m*Lq诎7ܻ7nw8d͝>mޢ ոښA7**<]޼ ~_zKp8p܊FK'DYO-u]菽M$Z{}RTrWK?x!Ypݎ MdduNSIbls58����i6Îz_g;SS6vx_֒i !9S=,}ZD<Rapݶ]ڂG 'V׾Y2=*{J54bFvųcb>!jʢukJ4WlZKf4ug_iz5-j+̝3w޲7n?./?lzz==3?q<ɠ@`����<k>ڴKpj*BWבwŇZ4Fun~U*̜C#x:, B3S:ԎmQK!]3U 2kxny/dY3749m{J8U\TZZe~<f_V6mZg}����5=>& Ri/ߐ@JnD)M~(:&Npe%_CLnj~YF){7@����`kBMuO,ric_y ZYMMMx<H$M׫q%%ؒR,Î{)}zUSW{_����/q577_ZzۢG3AB|D"1G͆BT~|o\~AƁ���Kj2^St}ָҲ̬6tз?][W�����qot;56M4����@@@����2qq�����ADufY 7 ����@477?xM  `/q������U@������@�������8�������4������44������4������F�`(AҒ08j�[-"X68Cq:��쉐H+4VAjB�[ob1E uoA㠫�7J/ZhH�V 36M{H8��FƉD�`h!u@�����44�M~~~߱q4iq�� Vt+h��QT )S _e8��Q(贴4�86mii9)2R�8~Jnn.h��۷oʳ %q�� [Cލ~,;\4{|yK>cϛqGluy��h WWa-p]'-ZC��^Q&swm:]$9 %}ӴY,h��Y8gM3ܼdU<h��oZLUƝ-/;bOax̦Uyn,[0o޼Ũ-݃WhLGM Ν{K D6Wb>mǺY&6Rm��иqMmg-@wVyXqnl\9o֬5=_fOhWAqLQGjgM^W5ibً~<xY�4nk鋚2r߸xau^u\As_c͂_$+Zk=y![f/5cr{l��иqkl8㲵4OgDrG�g&v%Kֹ9g,{)���{m7}nsWl[œuMU-c2\*.P]}vϾB)Z@r+fk&lU&�q\w0G︯>uٮOuIlݍ�gF^b8*;q5c)8Hab͞3W`%46f*QqASLrйx `}egVmo�)IHZ:g鶧MRFi�SkJ2\b]dwժ(Hͷqq=L}B2*78ڧ|;NS?lo\�`7HKH́[-./~ qv?Wq%ӻ͐/[8��ZWΝKI87n 5!E h"(8특o\FGΟH(УjZb=6m��7XkqQWZ]@ד>"¼2c|ҕߗl>v?�|벴fxjM<płs[4\?# V=K1S U qy|= ��h 5KVG|8kΌ־quFoq7iG؁�ָܢ �!8���88��@���@@�����4q���q��Ɓ�4�n��4q��Ɓ�����e>��j<�Vk��Q^{o��Zq��@��hh��q���q ����������hh��qq��+ htPN5E{2_qR칝CE) ~�`(<au(Y eD:G8\��4nWxX,p(IubkԸҤ,h� On&q\rfaaK/]믜6 n,La^Z��0'3iR^WFaΆf+M5ŠhCSͲZhsK+++''Ɖ;; I8z hőQLOrTg4\K�^JI^\^6@a#TPOnCq"N\Pq��'Fkj^UFZl;v@C Z6jK, YJ /f~wI|,;/%qR킬Xn{/i:&sWѸRoCqw?Cjd.�;qFF[Փ[WzںfI5,3}jka`Zs 4"^zT7e& *��/1cWѸ4WUj ݱL+\8��QTl|_ɷݜ-LmkٮvPq[0Ǝ7\UhQQΣ=DbT-X~!f`y�*@ogQ+q:#ASSKfhў��Ҹ*P藐j 2/u.#5p3H.گ7=ʓH{wNPz 9X! ~�U4By51^E:07RX#ro~YI]U q��/# uTqD5NΫ e%OVh\ foRKw-XZyq\ϱq]Wz`bEHgm^ںt��FI@* z&>ȂP(oaiTL7胢o4��иg+^Dt\`1GӋlVsCp;I?3Un5Ƴ&;f2VA _`)jjx�"\O0K|ޞnx_9)S=c4Tt늪xz8vhm�;qÊ3}_XM*٠4"ze˭Σ>Bh7q"ff t3E wՃ��6%"!.E⾰2.m~ ~�Km'yXen)��ƍpi1?š m5 s�>E)[J&K_ ��N\T�`5q��Ɓ����������������hh��qj���8Cmmy���@ qq��ƁA 88��@ 4���4Ɓ��@@^Zキ0]h頷8y$nϚZy�0<au(Y,`T9dB:WJ#MW@ h[Ӹ] bX$ֵfq�#`t3PCC4D"`;fm`{M^DJVH\^B>)w Ҏ[oKS3n g>dO|jLyM3[(z9Af$R^[t#/]GuQB}+OeFc -\H4-1.b\D~W�?$⥳&|槍ڢx*5dBb Dg4R㎜?n)215O?w<}^dcnb]AentSӍFIQچ$Y@4K?[̶ ^'5iicByy5�=f;/sl<A|=/-銷JmNV tQsM)=!iqM/<.*NhdJ+ 8[ފ-׶ <rK#g7GW-!$SkuZ^q,AO�TtܲCgA]eR3g  T.)W^`.gtO+J(㑣qFF[xM-=#pV[ϾE8GF� ښ �+�☱z⥬k#⭎4WU[8m3"n|9K ǠP&דy%?*NޝqYWn._RWzo)#-NTإ5\!)2@2olC ˞ ̆KrT>_kcn\@fA %a΃Ѹ] 4W(!W$l MH?r4nGP)(dA;*^h544xRi/UABJ ه-."��!vuη?T*`\n<f%3-m)xgM<gv5nsDDGR68SCWok GĽ3 h}JF233=&`ojHא)0EոeK`VeKmt;`A ג<|0goboagW(w<Y%q=끦OڹI%;v$dk}�iz:N)C>;f,7卷w9Q/RD$*{1(-ӡ8*ҹbbS8xlLwynmie*VhC 4W|[@ (y/"ݙ('V"=}$kܓ'os+\Tl=eg\q_Cڙ_FW�?DeJx{bTɼ_e|:oagQJ}zK T7Sc{F>pN\,,%"bMB"gu s#]Cq$R5H(v荃@^S]fNv$HŬ&/l{§;bh}"Xbs5KF>$pE��Cs= /ɇ\Ѻ-6w_jTEr;*Ax:SU!՜pelDDOw035PU@g)2Nlg1V(B'}|TY .<`=HC\HW6Ac Fzcc zfhO,Qi 1']l1NR?SIy��F,R1W\G}k&amh' -aN횝-:Ke<.ВqO^~n)//+x5ͳW_]UY~>lő<ku V-)'lRkBNȫgW# O~VQœJ%ZGnMi4~h��#X-g aM[Oqs)" ơ,F/yF ˳)R�0R{Dd c*T2&@dv{ʼnb"`;!ג؎#/bRFm@���hlZT&1I1Mu 9Xܺ[F3U��@ ;8���8��hh��4@@���@ hh��qq44��8��xmp`@ qq�� 511H8pkA hh��oO^A@ qj\F -'r˵'Lоm,˳hV2D]lg �''%˗ 55z)/p6^I@ qoMv7bK[ך!ƕ&=(d @�?Tۃdt{4# ϔ9h3_j\s_Cl?_N:☥R1p@V %xho<JD�7Wiɤ󳶙 @bv (^QLI<&)v=bDiSD|YA>gez hőQT^>\8nQHU.9D[ZYY9y+ ncF0fvgCj-N�0<X][.dhkj>%PA=> 5ki` +5:(=h#9`'$P,kndy9A,$ءt@ #2F5i3}K{0|cgp&n45Nr6$ Xw^J∥F-f½{o2v{Eժ6OvbhȶCi40zjow 'N�>d1з՞%6v'+Xo:*48Ħ\Yyo'Z۽"SZ 4>_)@~e5uxesLMa8<E.a+eMtXġ 7g] pa~˾7f`+Z:ME-14pgV3"q53=Ӝf_eQ-jI| 4 J8rIQ(;[)r09odjjjAoNKң{ gu{( qWcJ[o=_a`Z 5`XqXh=ϥV FH.gYG+*k\| `AL')%rK~.2pp'nfyqQ:ff;3:8D[)-}O l{H3Eո-H m`6\qTn QFTe]~y9]Em 5ҳJW":h><PQHVgGq;J-0E!QG{J{ hQkm}'vsr072׶9Z8-cǛ)4`xsRzEm]KڳgL|X|6ɔ1O*l{dR J֣y|^mL`aᏬZ;$1?Ibc/hv˗-mEZEyo@srgb.N"r~Ԡq<7Mf)7kC#=MBVbr.)lm4дz{!,qB6V[[?(VMOkH(O*�O#WW]&>E ;07XZ"<Y[cmm( ID"HøB*Q)dsQeȦDVwv,ttиvOVXF5*YX^qr:l0wl\Ka�?j8M O7-cvOGEEzHָ'O$]Wz`5.7 iZ:fIr#Z!Y,<8`r�0lHv42պȼ^5+Xƾ݋lI T7Sc{F>pNsoo7qbcL{ =ھ5BȻmո~H2hq" ?C8 g4.<^%O+swĠ/Dҁ5 jn`c{]TMmmu3>64NvA 1wr:�C4 Y6?׷)S=myc5'\n(27;#(fnvR"i^qں^cĊLMIиv(=mn%LAgG/8e%" 5?j$w;@& o+Ơ~]+x}#LU\T='yS��H4{^G8p5[ocT,tBK=?yY$QPF 4N-ؔ.~'۟Υy}s0GWfNF'{ƽNQ;xSX\2Uq/!Y6_(ൖ1PF'�%}˙$yXeS P7e6B\]nq��9 L~H82H>2pK$GA���49X \gHz*���hy���@@@���@ qĚ"y@ qq44ƁA 8@ 8@@@ hh@ 8@ qWΘitkeWݴoO|-Tdi<i8B ';h5fϿ m<Q6ښ(^78y/ 4ƽ5?WUPPtNKǴpPaAE9])ɑX/en8`dĤ0gNxF`ynO%@d]t'^W,pj\x߶^iHlgس%xho t~6?),!WN4r՘fP§AZG]s[豮#J㶞/Wd oZ(]v(x繒nۣv-A鹕9 ; tv;ȴZWZj>6SWuvڶm9}{:A{;[8Euo*;(=}Dzu͞Qo;>2MĻoyEVƭܞ9v8${uN?z myg2% ťu RѷqG7F yp/O_<~˽{^f.[7tq5s)t7Fm9|"A3=C +ҷ8Tm9^hgsUr#3ơ< z_ݧkRY3Ɵ3$/ַ/-.ȼnaxe;n߷Wj\^3K4.911ܹo5l�lEuSK%v,!!L":Ը#e-$P@;nc /?{'@ {g:3w M0t6eVeۉ5$R>D"rw42@j{-o81C [*իpW鳽q` ?xYD9@^Pk6J�͇ iW45uStC[BaE{"S_q5ƹ<ęoy)%ƹŦ˗KSNwS〟}d$ z?ϐmzn=en391ƕ1R%4mghs6.f+,:fS㸴6F:z�򫩱AW3y&.)2B\OSJ>.z\sٞw@lfd9]Ems7@4:5ّ�{CqviiEيBlAm?444ʺ"6;'{bf_;NYEm]K44LLA6<n_mICiM}I0SK۸0j\Aqy˖6"nmFK*˴#%FԸJ-O/3Œ[ֆf'B%=6OېImz%R JWgcظy|^87C L_l>x;]%أw<Y% qjq=3qq)4K߻w@i_Lyz>S=[yyq}5H-- vps/j?g;jH^} X[C-jbp1׷?pUѾ[XGZsOG lJ9[%^C-<"n4RD$*{1a�s;ZQRv\11 e&o5Ɲ[#,Z$d)*t3BVZXXpm׊jG-V˕l(̍_`jz> '0=5N`ףܚ¼0獍qƏYo9t17[CVv![^-@eNƍԜg'We5pE*Nlw8#L3O$sYL<H OtS^mtܴ!S,mTV#R!L1æΓy kX=l#d}84|]f81μ]qIwG=hC=tFSfSTu|u!,ݎmqB/;Y΄,me{sfz陞5{B  "(bK#(" "KBCwP$UE}TNgy}NUE7NdWQjt"^/I(q>}`[Oۋ+a|ɼW|zؗߓccl 8I?YxlHzyY'aR mi/dR+lD3@@ScՖ!qhGΩ i Gxy3hyB#Y&hl9hjL<0lZP!z!,>I?P%ꗱDVs3*`n\3~Ytȸv4b9jjYjFm䤪4rz'&Pto8j1~bhn*}bjGQ*UvU~n)b!"6ERx%Уo X]xo{ux446ى`kK;Rh<lmߍzMN&-W=iH<,88`[[y¥[߰ lvq?/qi|.L/qۆ@` ؼ�m_&s[T 6@@` f 6` 6@@` 688` 4. ��Xa@` 688��@ j�>E-8�� B��4"��q���q���q��@��"h��qq����l4$÷a1؜ZݢXJϨmK9>Nsmя+p`i(/2RxY,\,?x>`4{szh��qLBnNOOƵCXiSq`׸Qh�/g8hmo^35m;~hۏz_-#ŸVv !i][l"~3玶&G)<6͓v�K|zWBabi{16:z8[@4غuӡI#C =3mA*혰 ?`?$RLTc .q Äb7:l X"|pҲz\.E?4XWey1{Ӯ۲׼J s940:(h�, m!\vT_O Op^$8лҸkDӣ<Vԥ'Q f߭v�K|"{WT^fq5+pԞ7c}+Wm4nN %TO!9m;;>m4 w镶 %K|3ClL{6k&Qu}t<A9jtX. β?@79b\?ϘY=:ii-sY[-${`>X1�K(cۥVOfC.:[~nM{iL"HU{调e1A2>=\G뱾 0THϵa)F7%N>J@у@9q �01P=_f3ni@q&q,X,v٘$JaYrLޠ/nMcl%FK53p[8j]W_5bU^L=e0g01/ aCReQ4h�,}"ޖ!;{'np,]^CgNc F㤶%SH8ij.mT<xK,tRHϝ[H0#y'/^hƜ8Q.WCl�|Riܛ:4_};шVMs5Nq0<2n9wu߯7Ԍ %G 1Edғ8Gu GF�iQK�Y{-s�gE1|Y\Ê=<qlK`FUqHR*TZżmƑ;oAnک !|޳kgB}Öm�' tgOՙ|{ޖ`bոc8T5NE 4:*Y,V僚$oơ0d Fjh�,x7nR0>={'OL?j[h\z~h44j\Amw 8̟:q2c*Z h44��ϥƭk3 r*ob85uX.?T{0Ruɴ-O ƌ�apq19<PQTigLqpc0ƶhc:,ݓ~B8�Xy`||":2a0355CD}WBZ[ƕ^P즣b̸żi^Qgߴ. 5'SiT yLJ4�h'$@eiyxoJO>ׂƽզHoږ4N[y_"q7.F|>HK{Q1<["ͷ?wށ8ӹȝQP gdK4-c'ZWYB70vq hinOoio$ ooDrED_a\8smL[ӯd5v1m mNM>h�PO>\ =EQ<0{Š{@~g͛'UWa ��qZjƧv~'$IgWZN` \J*KaY`tCnz6-%xޡ +dzMiB }r5\3SӇl&*T�ћA iqfXbRnZ'h��GߣeK;77VZ</%1 �s&q��fP|/A}!@G$j 7wIӫļ]P��O'ˌZq��"b(XYt :%QK{P(ɒOgMB��&|.3j�4;Bc\q���0j����q����������h��. ܹgA{@��XOQ 4�ƤR-hh��)j�>"bppp֭(k �:Zq��ۀ@J$8��_�`=Dx�u@��Q ��и% gtRzF:C[nfH|CoQ( 3W5aۃV^h�4EeqyO S9L =b_lnnw?W[0 4�5qˉZq!7Z !,m8m0MxLղ. R(Uf 0qNlR>+*/ ӸOjԛc€㕖0jh{arBc3<_p깊%O#PMǕg8hҠd8T8pr�ɧRF66g7\Y��Xla39Б��xߣ j������Ҁ�����������q�������h������hh�����z8x�����GT*Us#W[g�����~vzzzr!1wq �����@$ƍ�����4nrrrACǀ�����ƭƕ\;9n�Z3ƩT/htE�uA97j>}z޽gϞ AWn�Z{qېݳRRR]h]Pơ|*++ס-9/F swx[ 'JYďe\Ԍvd}L<dbL* SKƋ? Utz&Vnb.=\C@$sK[¾?濊K4}m]µwiU+vL@^ȜuqZ+ ^X^FF34G *T?.➞alolj&N|ن@>~C⵫ Uݫq`vd:R1666S.{ӫsI_Sy:t㣺ʂ.8Zhņո]Š~LoӥݓDŷ_O6oݳ6~ǟ~Qbj?2-=q率6}?}otm~<4F~o;2/q|<ö'_fGMvsk⯿駟w_X'M[,/(LWYw۟-zԥP-u~92N M;c#xui\@ylQֲiYk+jiЍ\/?W_Zd ;{GcI;;i$1g?scfh.r .QWXb릔H>qzvJhJ1ny_~+x-|J1ug7e}/H8J7]#5Q|F})tVbg~?~Z ʧh`O8򛈓b~[76><~J}S(_~szX~<JX>>܁yu Po[gKg)}3j\Oۖ~b/$ZUS<L߯Ӹ];1>x+o<F&Н/W֮I_0T04>Q;NU/>g:H#!a8I=CƑ.:בͫ>ˮM)2<<XXXhy^h4f$&Ƽ~ +L_Z4t57+'}M:DQjG~'O<Ŧ+?ߴqʂ??Uj4gB:LuQ!W;\ް5~MW/c$G%EA6}e]~-ʻZ~o8P~f].Iu<hUvǻ<k?c/>tL4#y6Tn>ϖ?ڔ=dp ;e>3M*C1 ݼ_|8z~A#-%hqiH/[ODEGGGDDD ‚c7u~[PHqTvs q; ˮ/w},t?IsϿ^ݸk3 e~%-[Tku}xFTe(db[6KЧiW>%WSݙ~'rubA v_~f!;O?6θ^_&Z&PܴbW4CiɃƽ_mqlg[6Fwl==WH|< rCdpr5QEBRtwҼјHa dl\ǫq]Rp۲KhqCc/NoѸH8:rkUy~ٽ69{}e9h0j\D]n*=%,GvqӇ_ ,4y H?j-ۍ;4iw9>oނ9<tV*mL܏mҩJx`WV_|)ͼ }dya^hYQE�3_LTj4h2cҸJl==f\h Ώ1nܦo˞[kƋոSǎ=ك۽ёHt7X. ӏ`"_~Ho7=?^O7nbl A/EI*]j r G"NM7Zr٥<:X,92>"˲4OuæT'~5Gq>m_o6۴+ř|vGUT%ow<ƫ޸?H{txWfK8`{qdHX?[z!E#s߫-?pmxlbHy+mbz8Jl=fk eCV̩95V΍qc>jCU^{R4li nK7?<#4on63|_'ĘfWqu~-d`}b[>EWarC87iGҜ׶-}e˖]~^L!A6@xRucj\|<j USn'Uÿ˖O>;Öٕn~b Oܔ/Mh"6}Vw㨚i$ #1ۤ>ڴ͟!>ۺEZ4p9qhMQ_v%nJiٮg-Ύ1Nۚ-?忰36RHZ)qDV|[ n�"�.`sK?'-tи Ϥj. ؘ �ZFʹ^жSqq�D^�0o~_'2-@uP�., q������ 8������88������8\������ާ8���� @�����4�����8888���������8�44����@@@@�����444nzWBab% rV_e(M%u,!8!7ol9:莥g؆0vdc9Òە V2pPvz}gU¼30N|_~ V^㴧 rg3|w[JvMh #L4UGyS$^Hfplqc "6Ӫuq.C$+<+Uru1o-b0n'ָ_k$V0=x Otunvaj?SJh+ qokwkwq.i!jVYP^Q r|.\{n?u:q\=g|1hl詮U!UH۠q.f$UG ;qNlQ2S=i׊mO;< !ZĈ?=ёFi=K,nږ .q Äb7:Lߵ'c20T&&832Flo[O 8F^t42 "@(L̸3>c OoDŽIsuc[ l˻'ߞX;+t́qr"|pvGUq 6` S|릺uE2G={о1 `YvLj+Q/i3x׫q(I3xsY;,09*-~t@\ø'8AF8M݋?:\+􌓹O@ֺg:*YXq}ߣ3nmk::l_(OPW[E(~Jˑ8=u3&TG,oƴ75vf5Q }Bu.Vd6/K7Tމa)Te3<m'sǧT<06 T7>iCվ<xi(eEj(88q S|IH L[bX8Q7ڤJTKTXK9*+VW^Y򁪯 -QQJ4%T/fȄƵd*j{ߗ/qS>p4n i"4J?ހ^L~b0+(X/ 3uZL=EGjzAPx7O^X<we~\y%bDX|73p6& Rk7h]znMclUW3:KU4[) y<iܾ&78xMkqR2L΢_OXvFJ FyuF�.;C,بBleNX$J4K'E`Mi\Nz(_ס6);_=e^j?U:q.fρ|Swq ǽt]1t%{rи`O7nݎ%jthD)|jƂDZ싋/ :8a1 >SD&=irj5NqRcC;{h%˅hthb5#s7'֣^uxqv=a#i4.ow 8ujq;Y<sF&MgQ's,j;Eid@_]x@qX;NsWeumqv-PWѸ,tt&4nkڃrm`:5Vb񟷪,m&LM3Ljd5.L'< GfdF7ND[ަwQՒFssW^—ns,=.tsqLjqq75 5'5.YufTb$[s8zK"Eq4h܆,ܶԍZոqitDSTy F`mh6,OMا29:{~t@㖍"֝Bӓ^ǁL$>A9E` A\`0ESS ONƺq)v0\M3 7clk05 RMoTϿ7ܙ؋)ƌ�apqSn'**q_2icdQ]#r;)3|@6\t. Lbq֫ qo$KSy3ƩrW.Uu?& jE6N5.b#+nG"8k<`l+ 9,^z(.Ih_&EW,^<w'"5N{p0&y7`F؞HŽwT ~T%Oh2垦sRk,+#'^#t<Q7u&', h͋ V2-q LEr q?wށ9DQ8qyHݓƙޒi}O{:k`̎ |塱k!SIag-o&9 wRE}ָԘ`S5 $ 7mK)v?3AZzMiB }`j]A2M( !qq8Ѹ{Dy37:oplm"&UW*^<wg"n5N|Ӷ߇Lv\s]ߍsOh zaz7e̝ߐ'\" @,O>yK8�N9ơ(+Kc��8�8t?M$@���{qg��hhhh����ƁƁ����h�����qqqq�����.5����@�����4�����888KJN\����@֊ƍ:���q�hҸaro ���qkH4ZuwO: 4����@֐)ڛa+qGzLWR-VĄ4=[K3L!ŝ {iOl"ƩnŪŞU JS/q.HC 3I[ Ҹcc<E,&s9|e溓{Å<6+?QL2и4ĝ!O S{%_f2xBɞuq=]M n谕8*!-u@;|ՒrR:W:F&Ԗޭnٸ~R({S09Ns�ږ(\ltAKaFnJ+h\KSLJçŵ%yx,ʼn'1Ʀڒ$owCƹDNEKvǴfWtwkhZpCEՒd={.ElPLx<.;cI3:%B<ەgD|'p%]Pv\40Քd#Wz5ZҖIO @oEDeI\~= G]s\ع}{pk[l~sF?70L4YZӥJMuS-<4F'v{b.6I;8U0:b=ZUj<reUf)ʲp?B*8h\J|z'Ǥz`WU㚚_,%nd:lU4NsTWU5Nڮ /odյv[c/.ثN-0˼S|Vtôd~)oCU-%% ̸)jY <z@gM/% ^jU j3R:M^Wc ☿/vf}<v^ZӥJדƑ)^A&ޝD,X(_>jMNUTyJ|q$XgUSc䰶ASam#~t@\q<Hۥ cVqm^".ԷN4uuIUиP4CumD]H,-*%ո뾖 l~i3uՎq\gaBH$yb9f0֥W)hlvl ʎ{ qF㢞Xթl%xpB_jU1Uo ɳ-:tYTIڎP~`^}yėN,Y$4K'#`hܭC L]i^[kuӬ5W+_SJ4%4e=|QQXF�9U10>� 6U^U۞?u^U=:UiZqqDÄ`*P=<<==1|q<:vŕ[^=Ȍ<0~zήX{yAwQjZBOC*0g4.sC}$󫕚6]tz8J4͏'J6;N%}m:vpQ`h#a<gu~8t@\N c4 "e-z{=h\I'/?.)}:/SDB{"d8ZLwpo`V*WljZcrU c_l]o行'j܎ nql5α dܺ[iT,*qZ2f0B+(pZn,:8MR!Bh43^-R3QJ44G.8 #lWqϟ>)k r?8rp0&y7`FҸ6ޝlw˥28eWn:h+~ נơN/)hU]qjE#'_i1-U-@m/-v"m޽qvv 08q]{WzWmnEMr tYDG:J1sCi׷z=/զ*KmRtpC^]k\@dg~u},Ͷ'R҄ڦ|p⓪d)[,(e7w+}%9;\Ms8PSy! LPiۃcA\a:$[ܖBgyyzE5 nsWʵE0>רּUר *ۋwy< NMxR}5M&bBwZTo}ؾ=%=R';dYם)yܥҳtq>q<w_Dor?.hM)6:8UR塭\,@,k!TxHy>\Fbfsj9I4nUƄ\)wF5q9[ 8-hK}ոܼsu Y_�8w'78�44�@�и5qڠqP��ƭ ����8�44����@�88���������8иqo���`":/4����@�88���������888�����@@�����4444����@@@Vc "6ӪuI n3M%uPGŸ@ZiA֭[ /N7uս V?o]鱭d^ס BWtRzFW'�.8#{L&+)R@{!%Zpx5)sxw"bR[s(&L㹠qKW&T"=n<WfV(U2Wmě*4nӆqmkxd$0].['͔gLND7QԸ?k4NJH,(](9_eQWr]JpH.=T@:8WQ}.*#7 ^1hth< z'+1a~*_N ot8l?;Da31E+dj۫"#d{h̵8BK-&82Elbz\.E?486F^th,vLXh4W79<s ZЁ]z6X?jg[X_WGrZׁqrg*qlatOT7UQ;˲cd|g8@Uy1DbBhR] L c]+Z3q(I3xsY;,09*-~t@\ø'8AF8M݋?a0fX6;h+ˋ8)L6*Sif<xG,ofU;$<sv2wpg^i"Jl!ό\x v.߅2&'7(GEY8=u3&& q3wb,zjP! '[qԷjLq-DZuXVkWG0U:Χ4郳)mTF}Af8}*^<\T}ߣ3.mk:ݺA{8Q)_qR&ϺUT}emAj?U:q.Z1z7F&T?5%S<Gc{=nոXx4nFu:m뒽xHFJk\l($m̈́a-oXrLޠu6?ܚka`^g3) e,Z3;P]aSoLl|Ƹ`7ƱnǺlLxP!h-'u?u\8ǖC<{ބ}%:qsHgQ's,j'BleNXqxqU ^@֚备qjښ!ճ^jAou(SoF7uQDcS3oMկF@\Hg:7aw 81 >SD&=i"gc{h\A i6<{ wokdߛ`pdp0!3q4Nquqg*  k!%ƑֵJtF&MgQ's,jqx@q-yWC$O[ :4ɝ^2RW[>5L/qFWUR<H8s":n2c+qQ!qӼb]d-#vXFSp18qrfp7+w"0YQ T8X4E,dj_gۚPs2QH[΂`%k\,*q}]l]Tqx*&׸JUeI&4n-i6,OMا29:{~t@㖍"֝Bӓ%EϣHL|n'h1єfhrRZy@,3Ї\o6XAE8ɷFCх\Qa)Sp5<M&d r*ob85uX.?FtL~u߀JCN4N.! NQ=nLTU-፫q45Dc/zQm76QW;,woCqF*qG"8GgkSЪ35)I(*׽NG3 ?c=,0A֌iƤ1̨Tn!oޓd)[&3SötδXWGhBW]ݧԏ63q8Cʞpc0<-ݲq %phe 0whBi ̎ |塱d('u189&%97un껨i}OYtlGYYv?31=yf8\cyRU)U|![sl9iy%.^(q>q4}p6KQmz9*k!J7ҮO ;z�ƭ(~yp)n<6+ܙ|qis!8PEd`;oݿL~{7ϳr��˝8Pi\ޣGsfCG` @��44nh\MM͈s#A`0�������qqq�����Ɓ����hhhh����Ɓm@&����8�����@@�����4444����@@@�����4�����8888�����{7h51"֭[KNg+|i&t{gi)wWć\6 J>rۘ#;|n{Dړ.۞ǻQv9,&(nh_<v-5]X݊U= 敦UkI"޺n`5X?Oܤ{_lhip! O4L4nuli;1v|e};\WR jNG/GVNJAJg(ˉڨȹZZŭ׎x$xQ^=M4NqR({S09Nz]NK#ޭe&Bt] qZMÌ&{WƵ4Ťd<|Z\[__wۏR(|/nl-I{'=OhҸS/mU {y~ځ}2~r8K=s8pvr=!^\3 :]iٯQ֟c& KHo%5ЕrUҫreGHGjfz[uO`-~ECk`o.'$TH+'<@a/DP)M3m{~Hn8L6{X,Lx<.;cDZPW_qݍ떚PT p|֥Ȑm>JuMzbEz+"*ۃ^bZxfFt2L*j;Z9xxwi&۽M%lғ[;=1XgD|'p%]/^<F Xz=ZUWj<reUf)ʲp?B*и֧WNbӸhW:ovo}D8-jRʮ+qBҦn~o~)?+5Zu>;o;d?L= 8}$zE0YK-\PӻEg<hyҳ5(L(YG U~-9,?Q^12=W,FV]^\WDC%_.x㺦NKТʰ']5;  ^j69<<T+\}iY/h4atO=iiQ۟/G9ޝD,X(u쓡oT-%%KT] XK|@^5=6Mk-4?Ao6RJ4nEmd�q¦q<Hƽ.Ǵj8P~qWbz|=6ek6Y :FzKLm冰V~Xrz\|l#Lnu~* � j\\yu_K:E8jwk\o{ y5Iv<KCRC(!_Úw50H$<ٜex6kCpES}QZD%f3/{;sb'2L΢_OXK?1ڗG|Ă iYz,Sm*;l{e݄VASTyp8bW֎:$ѕ浵hT*|4eT[5[hz�rwqRi۫JMך Uq.@ّ7KJkV,<H2lO|>ZIyAJȹbzaD0(hjOdy8ow88"V=(:^;qu?,m+'\Gxp6B+@E䎱{"_RSE]ak'ƥ#pNyӸe63G#f46uqEmGiOdmwL%J,{ꏱyaq;髏*4GՕ5q<"ْW{'8#\3 )t4n<d0B3b}h,Ŭ[hJ4G@-4)[<h[ن/iaEVl5Ըk! &#iQe="UO!=~lq2ƥֽ>.=.Hy).bVfTߎ nql5nQHg x#hꪁ<- Pxza;=q6{XL[[s/FppC2t%` h\!gTa=ZfS=pEfOhܻHK/~qKDUv] T1-8 SmWv5=)KJ*썲:4kzڲ3wdĮi޸a?m|iOk /AQ8ZP4BK54]x?5ϛu>d-2445E(S!E|6G O҇j_R7T_Uޮ|FfQ7ub0,oz(_UMUTv潬3WxkO,^<dJ8jMW޵Ƶ\NIvW7l{"/M(mj{'>J2иGkYMJe_mI!vct m2.dahY_wr_x_zC1ԝd8|ߐ]7Z8yg w^g(OW&,quK~6o?E莰sw?J] jܼkL#dݭPA<de$Hwܕr-Qfqf;#HZ] u_pӃ[*M%=R'M}̖̜8tOhܵ@79TRsnkmJ~kG|w/U BՕwqͯj#qpB.ӫ 縟&и#Z2&,H2LϾ7tX%~asu;<��Vl54�@���@@��4��8888���������8�44����@@@@�����44n]k[����ȮK{�����8�44����@@@@�����444����@�88���������88иզ,LŁe&{z06\,,;09bvrLcI]#ݱQϽ$÷GiYN+p' |CcsjupV2p0UwŞUyP 'fP>[=}do;{%eRjhz/DxO\~?e:qGb#$۶(yq'Ja207if8Wjk[&<W;bk˻}fNǑӰ/.5,Yク5b %q0 ffk\ȍiø6t5<\.80adJ Merz%248=ay}4%-XYӪ2 z_> CWY>y~ԟ\ץR4 |N4nLЫ~B2#~d\?z5J ꚴ|v}@bw1aA~\dUfjø<Z?p< 5EU ƐK2,4770w|+:>%H'{ϥ |[u;8UReGmWp9Gc&{ѱu 4z:dZy5 "0\虘qg|H�gDq:PUo&GrX_Wg;w_ލ`?rޱ.1Eee`:]T3L鯛*jy]E2l-aN?X$s>$5TK`BHcVQ#g~wXwUar<UZTƹ*D75ew/PJo~]q4nYyJbyP7Fy¯{tm-sY[M![c*Ǧ,<~괡ObζsŊfgVN<� Ѭ#~197m?T?ckcŸEG,ofG}\` SrgxbNO Ý>x`z%i8/RQ^mi4I27ж<xi(eEj(8˲N8bq>qEm\xqzIx1@,X\ۨpKmREUҘ1g++Uir[e@WSZ/(pۖLQh 3C}\:P102նtT,vqID}ijj1Ba7FKznU`km&5R Ya[{=ͳn>Yp ?,͊;ɡ Wcߌ3e1TtOVE[40\x7Ӆ廉b7IZ˄7h]znMc'TԎ W4[NI8N5ޟ7L_D]h\)YTIH yĸN*TVeM^CSTyp8b֎备qjښ!Aճ^jAou(SJSa8'DQELB4 pm*qAY.c5ԵƵ %j 1-yWC$OL&泼^h׽>oTq| XlG{.YF IŅJ 0Չc} GF�=R7w@ EƼ{ƒlLiݮ).V.0<2w+*6<*tQv �50g4.ow 8mNlw\?xu3L΢_OXv4|6Ga}m:Q`hܣ;1]e٥B3XΉ+w61 OOvtz8ףD-C |v4g Sc,yjm!83.n _D?sũbGBιΑcl_zDLh f3b۬B[`qjiu &[;F\5�j_gLXE2Q"[oF,M8qNѸ)YTGmm(p]wit^CSTyBs5qڬ;ت>5aƋ˜=pTs?XQDuƹpup?|@7:99U_ƵƴD,9a <x1Nn'yjaafn ĐZ"ĜcnqG{va`" {כ '3?M;9<PQTIqH(ykC'UG_2%ily4t 971c:,{�Pɤ R'PQ{l^mqsyƉc'Q-+"7l\Eiu:Hhɯ-7Dx롸$Ugxk|S|%Rx`l->�TwcҘW]}fT*T{}Jې7IUƹ7 #[3q6|vݤqz<t0-.⌆`w`0C&}O&/%&LLHx|u8٠6|W@DdTL{͌'.i+K8TZV#j[IeTÏOY$=qZߓyhDa_tl>ơV'nG8ev a0;2Q&塱MyLjScqTIBMR]<?t.<ה*dw ,$`<ЄRNhe.R(q>qd E7unp6KQmzkP/UjFYgmc縟&8~=i{ā(o${ x.Ny%1轹;U;XeV��xq�/qɘj��,1VȪ������q�hh����qq���������qqA���V`Ux_h����qq���������qqq�����Ɓ����hhhh����ƁƁƽrKLO(ٓ^tnGlo'z1z�q.tA?ŝkiO>>۞[^o9ծ*fl"_J_ c]u+.V-$/TWz;w GzV(I"޺n`5X?Oܤ{_lhip! O4L4nul!n7t�/ IyޮKN+{?j>>ϰO͞0e ( (N{oQ C=Y6bNrI$!@ɹ''gs \!h*y:X!E"Qz&U-Յgz)^>K ۘ-W}Hcɉr :m?=8Zw=$ ^ԣO yTNP.D+Ө|96VTgX@%d}?"8{'3"͇Z8q:qc eMBBtnd=4d3C/'-ڛNSs^E ߔ'f:%MGvDL&72%˨}B}4F]# Rm  /2BX-{(â)_:KƕK :'̣WrO{X vz�[XWJqŮX`qܓ_5jJιqWUgFXtG]ibt讖tV I*jW ܌batlOn6AXLcGɚN* `ߊ dڴ؃bJd3d[I !RM ً}EΧQbu%T6pt@:\>qhwS<7WRuHC׏xtV`TjQ[|i^HR|Kd)Ggp3jM._XQ58ˠ\DKPTT~Z|my p:_$s4.Vcõhnt{~#Q;y aeѢ)D)t]dŠ q꧗cHPP:p[>ݛYb&oH59 .Wj-mOV4!WqMv Ỳ٤q c{Y,jSQO cQ U QT j/Q\T%rҸ設aC+F[caC+Q8Q:q j /2ݏcOx,*32S>C7/Tg3ݷ֨dw8x [w?a z?:N+N24uaU {4cնGcEn>ocTVhv̖Z8ZŦzGpQ$ﷷҊ)%dkvQ]Xt&L.p?d2Ȱ"yfc5m-Ďlh\\8Q̀٨q [NgVKg^&H@}YYk5,wq)ڴ؃/QlѸ[{LZK 44MzYk5zy((иŴR&u?/g 7/=-b H1$QNұky;ĥ^ay9Dz`XuJuW^*+˜1" 7[m)t?k wv٭5тn(L _EժTF@j\RH$q弗6TTh&}jB-hٴTTmC3l8| ,4μM<-zDi6{%ʃ#2Ѹ#ō~68t@d*pиɢF+UyhiAac|?k{I2~4).2 Ww'V,2cq]a̘ƩJ(d棗e۽f8RB4>]TV$2cj5f~5XM82]e;!Lꅎɵzdmѭb%I,Yj7 aӝEi4 Dfq nGmڔPJ7AV(gG@1=Jp%l)O {JwO# 'J4n)l±14nԜdzԊh0(΍y\Y~l}&HRf1͜Bn?RVWxuE~}lD6D=T2Iv{&:8!]T9ɺ)y g׭֨ |~{W*L__ea7j amVׂ\B=\H˴qjOӓw<΍7ҼNfq"Gĕ{IdfYTZy;BmrK|)F*8MDXDy8gEdכk , /1<bZ'i7ޑ⧔75>ߩj)0и-صbRR4ՇxJ8hШne4:# jv<k{4(ʰp&u_: vƺ ӕ3kR¢AȨ3wwLݩJnݧh(lOk5N2ks4%*fkV[[|YL&gWW8LC)*O b f%f^T?fpJD&*NUE�O�ADD)xK{|+:͠ kmiDMnG?w531oH#Ȼ4&_D=xYrύyjBz4\fF!ᎦFqT*U{nyt@nq(wGq$|vp8`v~Y<7eA4�W@�KH&Vnѣ5@��7+a3ɇn4P$q��ƁƁƁ����hhh����qq�����Ɓ����hhh_����"8]h����qq���������qqq�����Ɓ����hhhh����ƁƁ-6 wTf|R!SÓsNjDyƉǎ1ӤsKg>Vsf;fwKCTwMlϪ N>p;~{xǕ5#J4'v,Wﴣ?Qg4Lm=0иS!/LOlQ$5*`6^<NPn~{OLٍW^@v͛7#a 9s|bWW[=4 Xll32a١W['_z~4n͠|4.-XXӨR{ZإP4W1agkw*UW^?Og\h6ZڱW*Xwkڻƺ[KC-Dqp-Dz<v!a ӟN h_7O 0lg;#o'ØeZV7bG/%Hq\fIgZ:פf~a[;t<Ќa񇻏ҹۍ,Z3_gwQA~^LV7ruZ9FS10A:T7QQ"!%2]{rX4/6^uc3LϞbk1BdӃVoBF `WQ}]b,\ZLTig a{ZOW}I7eng ^7п@p{_\Vߟv'3XțI/;( OwgF~2vbLݚƶqoܘQJPS=89E]Zd(SNv -⼎n5i eRU%æg+=د_,pMƬDx+a,dKH& Lȳ]&J%XԦqNnMKyփ/X[Rk/cOEa9ͧ7Gu*z/Q\T%%q|t :Ru?e* UwzKENh4/8R91Zwa^Yϼ=go&^Gi B6tDnpk&Ӵy$2| ogk]Yoqc}$ gGUh6;p h"MT&npeE^|[?ߛhy7hH?A6؟#MgԸ 3%3/j+H$R~h W":=D9Yoy]m< [pJƽqQX>o֔^b%Q8Q:qvA(U 95BhoLJZb;hɻ>i777P h>b 3} 55}z Ui(c⨹Y#,Ƣ[yݼ׬d٢qnTmqWcF�A$ Y8|-3%3/jZ1]And`zm^̢2iWQh(,?Z#7,u5$8,qd\k{ _qvAM4njک՚Cq}dq#!h5nظW5zBau7|@y^y5i82]t5.E_fHk\l°~3ĥnZZ3בG)!~kZNgV?71*I%Q.Dxz|a5B6V~uVk[)^<dY8+ 4Nsx +GNhQ@o܌GpɩXOhO\иyh DU-y0Nx=( 8w1w,ƥ2b/k|@f7>PLcWZCTи85mY\;^=kw?~s3i{ܒ^51^z~ 8K@nhփjEi48Yh̪Qhɋ0G C)&,`fZ'O ݟxp݇] 18+/Ox)ѣRw}v5T*yK;U-7_&Uh^6ƺЍ8LLW,Sz5JyH$;cpt\kqBt=qh!u 6d&L#%Xouj_PxTlLGTUU0{iD,lw`tl\ٻa5n 5~MQɩ]qxlN1uek ,*:iq{r{q ʞQ%ߌuۛaOr {hNG?J)6 Q5Mf%Mo|mƆnfXl6/<mzASs5ٜPcBF `i5Nl4yj#p2]T*~F{nyt@kqɱlDz=3j<uxƶ(.zJfTNq{>i �%]8ƽ7 Kmƈ/2��4�z~݅\O漞"��4�����8888���������8�44����@@@fqФ����X.4����@�88���������888�����@@�����4444����@@@iEF|bDJ{'݅J&Y ; ,Nz~C2|q?m Qwn TIu .iި0/[9-] 4cG̎-XxڕɣL}Z72T:'2H}pt@ϓ0WybzFӓwyRdw[JsAΙJGry;e*bR)n=| Fwp^?_Vλd_ҫQz4CY"Y<Q8 >S9Bٻ~4Ni.[Ri]Z'lK8IyCSSEmEp)Nn?gry]k[CE'pt@q'GKQ<KhbPx.h aRNT5SvFy7#>\#-@rĺ5WbW`8I/䝜s16,$X٫J( F&?:zղj<w1A~!IE '5`o"ZtdG+dr#Sz6Iұ=waQ2%k:IvFntz[1L_ҽy,qJ;_gx-$>A&1<<==Cc|Agdy]x٬M ً}EΧQbu%T6pt@qAk,T'>6Hf[?4zAP;rxǢ=#3Žy]r NugGR,1λLjrq]B^[ڪh;kE5)t^f&%)?-p  g\)՚^ٍ]1m8|ұ=wI,)l}uXІ/X/Rh±Tn(J&X/^<XFNH׺:kyɇ^J/?k <\~6bo5=F/6g/c\^3N/2ݏEWu#:4)\D&8~Iu9ՎDPu/ݛ)L.2u.p?ׄdL"E /wubJq6D7_qqBҽ|Q?ߛhj1v-<Oe?(}PAT a\ Qpά4μM7<:Y..EWJI.]T%õ +Kƕ$VB/^nwk__[kmZ+5DDم^4?Ȥ}Y+u+}noH{r& i}&ʃݛOD"tjjW^*#R!FXfrgՒfe4OlZ~68+Eu  ꉃb)6j>әUƙ 4C3[/(fsL*# rj#ʃ{qt`;JǕI믺GnGsPtq㤟y5$8(Ɖ#z7X sk sAJ^Zq,;08#;<̘Zك_3λ82]e;!L2B"q[~}8dKq:H2EfM%Hά4NQ1$2k�-~{O~fM ltbB4exNq e;Vv/иq{˜q%M8i'=p'goڋbj8sx +wVy1NϠxիAi(2[: WصbRR4Շ8קNvcVkT҆]>l=O]F2}9~闅ޮ֖aX{ڑ`i{xq"e'xoqoy]3'(PVҶ⼒9hq:H8q^Y<5Vގ7w_Qm NojS)-(|ިV͋4v%9>+"\㔒d+z$U2A㖍 /1<bZ'i7ޑ⧔75>ߩj)0иyjNQHTv7Tmҍq8h e^J{cP? [)OjxX툏p0H$2;EѸ><=&`0nd;U?1`w*:x""b/?Lk\[l/H|m2I[Պc;c IY9s8tlOѸA.yfO#?\P||m*DL j%Cg?7J7I 9o5j*-ko.3yj#pGSt*ƎLΪ=7<J:q82!2Ǣ9ȍnnAl4}I‚>i �%]8�h��q�hh�������qqq�����Ɓ����hhhh����Ɓƽ����.�����q�hh����ƁƁƁ����hhh����qq���������qqq+MބP6z?>1t& n uv.h3y¤tӷ^MLqeft '^"|D3>)T)oG!!x< T7n4|Rt+j¼3Ss@U ^4'v,Wﴣjx]gdj͟H7iix4#םJ7Բ{'F 42uh]xÍ?fb_ׇr3~s|vsVRX*Gל~mE 8OYZsO)4B-ƅxd=fbn%9g r癈k W7fЇFI yxTg,iT)=nR(+԰;eXRegާ‰ .4G?͇ĉ?ӏ_in- aR\1s Ks"A@)r?$*+b!{4jg6<ǠмI}7g2qX,K񷦭bj 1w;M ɦ?/о"J\fIgZ>-I&1=^^^ioڟa2\ԣwFNeSl8xz)׍d2n>{n DWAvWSTwgK"vg-=e{If~a[;t_$AywsYx#!::2/"Z5fւ.=6*4oV͌Bml`hQQ"Ɖ_"S5Q*7!؋Ejb *^y0j4*}9CZKki*pt@qW:Uw/\|Д>"4nA4yĠquIa?(&ތ`']Gě y${(KMgzj9E]Z<(SNv Xv'3XțI/;(خq?wLOonWCMMe䣣r%{uH@𙶖�ْ*m͝%y$qK h`~`5ㅞV̬h- %XԦqN5f _lޱ碰$DK+US�8>Kp2 |ڥ" 'J4^yfҋy,>q ě<zС܁oD>N/^/%ש;B"Ն9ϑ&i\1LQNiz vlKj)[̇1m3, t0?R;>w|)^P:dۚ >7t;B|hq$2\\TG%J/++n_{ȷlܟ7{ffEfl`J]868XA" G^W4 B<6-v +K-P�qyY,vqnmM)yF:E珞eXINh])*nJU*eCyEj%r(Ov6иaLbw͠/0KB5θfLOY$ O_ q5!Y+ ćzxx@7gGp| \#>NL|7Q}nkmQ,*Sz�щR]WJws.cْ+ZpuyRlѸSsVmL4nn̊fqEmB =- [Max`ES�Ѹc1Lϭ5r2\WL;x7%wMܠq NW~,m}{+>ސM޸{"pd R{=\C:Ti>Ʊ; ~k֐אkEU+kXQ*Ɖ=5ND&R5D^Ѷn5LW6/![0 q)V̬h܌ lV?\_?`<=ܰvG!+ݤkX)^<5,N�q[X^Iݽ07<8pt@E"gq~r**S4nAuk^ >SjMP} f=5*>L=4>f\)?7n䵙`YNm|LuǖZCT}݇] 16݃vpA>?N8,,{I&O5J-jתl3jDT/\a3g/aoƻN>g0$'wzu}װ7~/z3jgByƹ%kb:/鵥qsnf3jq:H8m!Uc\nɋ0G C)&,&A ,^<LS-ƞ,i e^J{Tjl]M2Jޒ?NUK͗{E=ڡWFM.tg-D;G6P*cև= Y*^EX׹&r {mMθP.{F"^R+:@\69F>ԐF's<Rn�qD;֗b O*tQ(5ne,EUDPɥ2Q ™ǡ*㭦8[KͨԮ8W]<_Xfc$fAXTtݧVTn 0>)=f8tlOѸWJYOo6+Qmzkk/QL5ҳ8䩍,ϓÝˈwaPtnL)qVM'dž-{v�oqxJfM\#/Ƈ_;΂>i �%]8�h��q�hh�������qqq�����Ɓ����hhhh����ƁƽM ����:E@�����4�����8888���������8�44����@@@@�����444nhz(:,C%3xipZ~>#Ǡ]gdj|>'KpB#NxF,ltY oMݳmǬLe n?-~Þh][?s[4oT DMBtR'<+ߓG!.m.o7ePtNdv ZNݣi< sŏV�73o/*fReXRegާQ4jbƕe*'8_Vλd_ҫB]@a+L eBd8ZʧcCmKq I;k-!' MM;um i>,‰Gvii <8Ҫ47W^j:eW{!Oy4V6f2Ȕ5^r,=c0,W3c}rذ�_`?p VFtVI|0>K+իJ G]O6u;8чKA(rjޞE"y}Y^Ǎq$/PYȣPNߊ d!IE +5H P뾵R\+VFEqOYnXW]b);XtV 3~)X&&J#E4v$ډY,6QDto`p\Y/^y0bKb5n^l+v> +E gmDau<|cӸ5VRƩPeT/˧]ҸC\k"Z+=6FNH7w<ioH#,qDg.G]^[ڪ*0St<re_Ni.AYR0O3jf\hXip/Rh4EӼ~z9DuNugGR,X܊Ʊ3NU@l8|ұ=wIflS405 _MT!MVwt"Bbx`墪-Xjk <\~6bo5=F/6g4e:uF~q/2ݏ̨q w_ww@ yg/SJʨSL^<ReX9Lgsq+9$0#$2Cn$ﷷ8Lo-(,/RQQPRmfq=Cl7kv SY Y]ŸpZtL2PNZ WEh1<u ,*t^6L^$/3l^DenE⊅DFR3V Hpά4n#D"׏'ofyf ּ*%dkvQ */QlGո[{LZK 44MzYk5zy((8P}awjM8<|э@&5D̳ Vx|^a5%Dz`XuJhf7wwʤBaznLtuxluPx,nq%A{5qvEu <>Qg8e'˦);sҘ橯ͦKby'JE"D:e/0Q)4 %*s+gKXV-ϰtfq3ʃF![/(fsL*# rj#ʃKqG2ܣ'lΫq&Ѕؤzsиi>qhr/Xb{4jo:yjo\s2NXUW |{l^qҧ⶜["UV2Gy'QXZ_Yɳ2z&C;R/^$4$Q.•qvDfLCTCn/aK8dKqU@lԸ ҙUi4 Df>b 4v%C:%8=aLϸ&{ 4rݓ{‰7Xcwptw]M9h\{Q,ֻh@q/hT===MyQt^*:P&/`P- zffNPu\Ji[q^ vaLu.HOqz`l>KK,Fykp{4?a~lVg%ϦexEJeĺ!mdwN[K͇йF57lwS'1u5*i.ߞ*r_ r 9s#.EK3~)rÛ3W%eSSih }szyUJ 7UA2mx`2[X ^Jbx5Nn#O)ohkk|ӗSR8a:qDl>4U؁`44ʫ9Em"RPK7nM"Om1 2]tOƤ.sԊc;c ؙM7Glٚq5p5䌟b<rI4?IĘܩQwJGgl/}IkDf[?Q]E%#�>A u[�קʒ햘yAS_\8.7@{a ^_KRD oG?w531o/IO#?\bUnm e1Ⳬ%֋(&]Blk\{sSχ;ťS4vdrVqV#Vnqh2!2ǢHd#7L4xѨ^tv#/+ax��,j�4x_iIfZȠq��Ɓ-|0;X,FA���[ZFC(4����@@㖻!л;r8?:�����8,q�����w8����@@@q���{wi&7fq�����g������&eI"������,4q������q�������h������������������������������[㊋�����~iD~\ * �����`)5n29qg <�����XJ{٬LiL{]c\KFg^ JxYVReӺЎ,ǖ~'[+qpb"<zJ#dZt%I} wG94 pϒd3���`i?+C'l iR{{a WpN=/ JwiOt}gh_^r5a \kԸ5G'55ZyGzS$$5Nvp՗#5���`YiܬLigG )O[s"XF֬y+Iv/'%};v<mN`f͚O雷-h(Wb/Ek~3vk;^/6<W^݄B׮)Op˗NWott\FG,+6i//i߈o\N~#;>X~/<D{qgStN����X^g!k'VtpD ]S [kQgS%g%l'd!П朳qDmո^=ᡗi';JJ:qtOTQ=SM=wa/VQnj%UaG4R_z5^V}ןFփwFb^q~-=Z>4bU?zuC' u^+Cp tN����XvD!}}}5(f򯴕R]+}Ћ-l\T,H˴:8']jaU>Ɵa<=0' Gt//W(q|}sNIߑWGpɨq>Fxz=s!WYLN^USz'qiUCGG{q׬$=35Ud k7%hq˰Ƶd6:'����,;}5Y[PA&70+C+'kո~"-SF}w8k+do ks47kW2]׬\}\[Vgut*<2i\lj2\rrӿ;Skj ?^el:pE]l8<g38ig9���`yiܬ=zP_ rQnkZ!7u޸{~[z"B^iR"{,-6li:XE(ѻ#{َLupX%3ƽgq}39&;sF3OOkðq+>QD\~u;UAHskI ����Hf{j έw+qsvscܯڞb}'uwfO>߾1ݵ͞__Oztׄw Z%J +SKL"h7lꚯA}Z)zxt@"q(Ǟ9wCk {ƕ_>thn eJVPz{FGRlk[FG0>Ghz[ÓZ*9���`hw|_w~YJOo*g%;?kWqÕlǍ(T~Sw5sr^j/6l vcnmeWV~ځ;n퓞e5?l]2\ʊ_֢t#`NU zi*<0qJx:;aZw9;}'_|J}6'>tp{߸]nqhB?s/|*J����8\~\K8MLvfRiagi6Fd'T����G7UϮw@3?ƥj%+YA#zD֟yz&����,a7O:姟|o}N ꖌAd lJQ9����X>h|`o�����@㖩�����Ɓ�����������q�������h������h������������������Ɓ�����-b8�{�����hD|PB�����и8#@E����qqq�����Ɓ͒J8����������44nI5Nǎg3�����44nW5 h�����44nWTTKeE^����]ZxP6:;x_>Wmz=љ@wړrqVNRD N29)9Ŷc h.744dơhOOvzV{pg0��`/nExNk?#GɴXx6i㺏V}l3~'[+ֿOc[UKg. wuNN6qo _nP,sϒdKq+S5'>rS,57:?23;ݾYxJa.4='7sϥyh q&%%ŸKMrsиa[4E#ҸM_w);|uh��GʚE]}ZvO}xҐr7?ij谆xWEVgvB$(=]~8srTtl~wgQ\eh܈vӚ#/a%)?0ֺC\m雋]>޿5nXۜy͚57okx8νgq?n&lxm-J-`R#Otn1+qᡁ~e^I0:sxQc;c]L&eMG$ɝ;w!% ƍڢq(x0#Vϕ*_~7~~zǩ>_"fOaW|w]��E ߸\eEnsիWņV^݄B׮5wOɿoK'>#f6r?0Ϊ#)^m_ĘAM/N+>(rZqR2y5w3Y~dVYUۍ++qYa-K_srdö+MqDen{O1D3qgSbk\4TvAi.G=X))J:~Um?s6~߈2ȐTO_s wXUk>s >"nD+}@> ,Qa)pI0-OqcU_Ļ {Sh2<b3;]x-Gt.NFuqܰg83fG/?uIc;~P-8��+ڏG˧_[q}H5*jt<#*-ÆaW/"2~y*4I֧_i,/VQnj%Ua*AӸK6~<|[ޮ=dlE3-YEriVv?ܲD])?_O)Ѧ_`_D,92b,PVoK[Tm،1FG܋$V{aqea N+jh{iO'Ka*E*+lAdlJZU &Qa)$VLc.Cd1ƩrI$j}=U$2t8q+|O׮\n9k@d8j+<ǿ�@ k2<kM6jV~룏_ƹ%:bOFŽբ]r#økU-$nz'*_Ę̽y γ3dֶl޸>pݿQ<m7No}ǿƙG4CY(KkM_q1K-;S 58UkԇٹV;lr|4@rR$7)sX3lGeG8N"Q8lvZkr;q^EP4"yL%f2vvoRZ_u%_}5 b͊ ^Eq��,4(٨q+kVH\͒+W h25kܗ'9_VfU[Zzl"F<[8>cVgָa kI)W庽q_kG_Tu>[(kO&g}m8+3:}76u޸5U wύ% + Zo4 qƝs- KT<O4WvLqQh-°$p{qƽq{76CoUXM@U5՝E'4�ӸhخqA3S? upX%3lg}39/urMn'n:~]#Xq[.עؒ5n@Uxk _ #^)ʌF}۳kIYt}p܊;? Jw1HjF>_Vi_Ozuv Z90 vqBa.iz؝g+<l@ݕӨ?T )ѭ坥Kq w*:Cf8W ~R)ՎAv\%tX%_^F۷z&��H_񛍝rVjxk3t00`�&Fl(k }Z)zxt@"Þ9wCk {ƕ_>tv/2Y}l$ޢeVxg rMȰn#*GH㈾)`"R,\Cr'g㊕\$&ZNӈMdBԝ}MܯWZ ݰxoqQtύ+ϢS vPTʃ 1rJ\-' $"jK{;Tm=f2LWyKq 8j\G+ޭ4ܳ9rڰPmH?Me08GV${պ?r�2 p|j7IW0>Y/?:Y&%5Xe-Ԝ>؃SբRh:r=6mpZ;ZIOwEl8<lǍ(T~D,fn-6Qv?O?F7׋r}/) ejB>_S%_[Z8,_q@Ė?ƅ٫3'��9olU!OL/74jߟ^FJj)z qX4mfV 4��`tWfbFs'։ϭ?1,p9p=8jF}8Ȁ��Xa_~'k>7lNKPX<cՁƽύ����`1@�����444�����888�����Sq�����4\`����q�������h�������������������,WS((F]]h�����rи2gHҐYָ~^ggg}}=h�����rиgϞ!=CT ƍPR)A������>4jHؐjJH$͠q������A㊋!ICm(`ooL&�����Xr+++AHҐ!aCo!yi:zАF4 ������X:UUU566"=CT 6$oH&5n||YG*������ˀ:sHϐa"mҸ7o`j5r=H҂NCXVVV\\\XXXPP������,�Hn!B i1dH̐!ICmC6qW^ T*\N@XSSS]]gϞK������-$]H! C2 3$iHհ+Hަi8򻡡!VۋO*vvv󛛛QB u������t IR/$`HÐ!%Cb IR5_uUlA39{j)$ 2AV������` B҅ 0$cHɐa-aWTMjr:l&7<<<88O TT(R������� [Hz!Cd )3l-Mi䰫زR?t�@-������ B i1ljt)3792N3������,0w! )f&7qFd9������Q0{3 i������X|LD?lRI ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/replaygain_pref.png���������������������������������������������0000644�0001750�0001750�00000011172�12161032160�023373� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR�����q���B4���sRGB���� pHYs�� �� ����tIME)cw���bKGD�����IDATx] TU6eRTP| -'rUb\.R2M+54DPI+S@4 r|cY3ַgsϹBЍ\@ m @!6ц@ m hӭm3A Y2+Ҧ۝fч4mg̘aooߣG'')S X'NNJJdHhUhcYi H :Ԅ:|蠵Ï;ZS]uYO=e@wa[o-` !2̜͡9Ӫm{Gg A7EΎ嗕̛\>}3mڴ ?Fpء1c 6n8lچ޸8|L0?H/Sr f۽޻52RPZq]wC8κXTXYwmHPyvqvTyyCΓ|c>}:N@,\YȯB{bb ҽ{w.7}t2pCݜ9spxGڱ# ̙4n۹sҏ=O_|ݟ 8gϞWUV*/S|ysr $>徾QzZjZi$pLP(J.(WiDgR>'ذa=>a7|TarT4Dݒ˹k6l߿NN6Ǹ#|lUez+!~-,X&Ftd^4hB fFhS]PdmLcUV}A ~vNT&IWϑ8 H02fm$ Ch‹hrZA~spEh#ZY_{  ڗMZ..Ғ6lPi2@ΓБ;Y=m$ 0PƷTp8w\_υ ۷/ҩO_)?2#F`xx�=�c-&=M:|,{m\DM锔M"e'7*fϞnTL:Uc&gSv8x [>m[4FbJ_yeF$sr/lrV9{F6>IWWWe@^9JmSOq+r~![>QyRp[Q(r3ΞABRe0 2z-%riA�w+|||@ګ5LMg` ˧ >t=gC&@ DhC 6ц@ DháH#z5h@%,wFzefމ~I 01mB/|[ر9ru?=iý"/z?'Mz!m wO @L)b;;;'''~in{{ÆÇ//))qwUVZR'hҴsqqٲe Kdӧ_~{vLk.'x={z{{e=#(˗lll%'LUeNSJ"mF vO|.,j__ݫ< Z ?"ѷo_d?cmm=v {~fxx%;::ҷ`9p�IKbbQՠA6o$Pt6UvE=Mcc#GEaټy3;T{ ˗-(/۵k/ܙ+BB0Z/{ݩS <{kd$zxcfԃ*\\ض wu>߼{)CϞvb9[96 [+WҋH<#0ƿtiӴ j(ekkjDGo%[qnԒ6{?^κIn&66...=;yf6̄gm$oF!=0AMf$i1r/K^\64�H=}J6QC ᐜ|{3$RRY]BrjQo%[97jI =_)<SS%4m@k2tм<nс64&}`f(/+;Z7#RnX UIچ2w܁䓁1V˵T9|!\^HttZd+i#i sڵ7ik4OrEGms<==: P NL1c'yC_ R]\m${1qOA?L4TK >۶q4f<B#q6p@*rVў6}+ Q\%rLÇqL/eb;�ci#7)"3,e]R<{&]p Ĉk1"�Ϗ׭eW)W$ig̘!:AQȵTKڠ tqȭn \=r4a-=m4Vp(wK@ҒM"@'{XcfKdΦJ/C更9<ƚm, VN3u:88tǝͼǝ*ϙ&ǝݤ6ˠ {D eچuE$~PqMҁ:lC Zl--kц@  @!6ц@  @!6цTe%ڨϙeŕWkihChT8~ut MO֭ODoKK=ތ b9q?}2C{I�z)fGnل}sSц`z 6&@[n!dD違bBsMzSƼh$換7o2~ɓr�C1fj:fhkuOϚ%Z]' Xrt)wĉVi mF�&dr6z76 C .((b5}hsƍ /HLhcgIͼy%&ЦU={8M\kMFFF``… %? inn><<\/ڴ475*hcH(k~K $,'b8*+>>>ۣ%%Ժ3] 8;;hd2mT*̙3ʞyPmZZZ@1p-YX\ӧTW%L"Vh*9`gg mz!p>Mkk>t@@dw7oD{N/\ޠW�`FoARh+˨n j=jm8Xwa}TQ3VUVYz=i|g g#F06mvEo՚jh71mTŴA0'Ъ6z\LV686i jm F5A@\iK,i#*V2yrh Je}RR"K+cYv-v rKd~hh(wK�i}hVcU�`^[|K/I.Y ƍ޽m_ns?aH=}%?JTai9pYYY3X>nF|K@6tmm9s M}l ̝;7-4#2%7?1NUvǝXU}ai m,mm~ww_~\.ڀ% OŞ6c06u% P5_@OLBګ5%Er(*ȧ_@S5mN;jzlzΘ?}yY|b.ME<1 IKeow655mGslvDG37o -[n )PO%6ц@ DhC 6yIV:atJ'ty$餕N?xtJ't:^:҉6im *NZJңG޿SguK'%%M24\:iw4m׭xgutoo$tJ7mmZVVV\Gkָ8;3=/_ qww?|¬%3wrrڽ肎{$59XtzCCj7'i65Uj~vHt Æ SX6̗/[6eHO\g07.XHϤn u =;I|rN=]NΜS1T42x!ti ^Q Q3KF(5i$Je!t͓Ob5\\T$>_Y\6bu>,C:=""B3K'tMA~7BDW3WXsːN9Gcc1I+<a IV:Ѧ}!tJ'oH+hCtKV:Ѧӿo餕NowF:҉6N'tMIV:ц@ DhC mц@ DhC X  B&����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/replaygain_force.png��������������������������������������������0000644�0001750�0001750�00000027423�12161032160�023543� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������ƒ��� pHYs�� �� ����tIME 7ܗT���bKGD�����.IDATxP37dҝ82$_2i-;zCޭ^Po$˪$B&;.^.H:Yo{)>sgOsw"+ߓEF\YdeEF\YdeEF\YdeEF\qYdy uwwwAHYLeb[ZZBBB ųgϞ Y$Fa |0v64ya`` Q){ƌF $,|d5#d6J2/<_Ysh w1>4ioom4d*=wLJj60ui3>۰)4<_(Ie+=q򜅋}|:7Ν562!)vݸʃȸ6HGL34F*-#ѝPTdν GwTDhV@vc>?qjѯRE* a7:6N׬h@Í!@.^n#̌Zhkj߰-ۤՁAL)R#@Yd/r$Dvƭۤ*<h�Nv""c>n"!](FfF))؉yrQA===1 fФKoWUUiZycjMuPRU | \H[((̾2S666w [�(n}}= HI3 .8̌{Z(?MMM gBVVV:8/,,F@ZSqJz .~qC;c^qȶI8 dÃD2".tT ·&~~~\ڸ]|.%5E|F5A8%[w꙱y;cyn`]ŏ;*RqVY )�uT N=hzF`-šAG$}}}LKKKo<hNJInu?j2HjMau}70l,6p�&%cwt~ts4-<n2 nB$?_^Q!AG T@[II ~nqE!?q8G⼴2 G VSmnnljnHJNnu+_l&3EQQ`gQ5Ton@byzr $5-}??`֜/</(I.]fzDR/<i>۰)"2:\f-مü]8X ! aG|EEEwl!!= o4V\*شZucc]CC]Bb@T*"GFQD׋4oȨ~Gt<H"LaBF[Y[$&œC0rzfjH6V p8njME]}Mm6.>P䕗ÂVb(6 *"*ūiLećqXD- Ba>Hwtih8$gxL)X e*VQY`4yy]K(<:HVH`5x2Ʀzҋ ⶟MUIqcc=,8$xz/S'0تBޭXT+#<^ufJjb*R82c^̐B_uaַ,SjXSctfjHO e ! "V*,( ny58.(g%%1SRSA&GYSF:: 8zSF+zn]0-*APA7V#)8RPPӫʂ\HQZE fav^ VR3%5E@P5TPHOGgM}9~ʴیsZ?pѤvs]t9q:o`R{?4,յbU"?7W 1 q:35$K[wUBRn"UAp]s+;; gaJJb(sQT UңAh NZZ[;no؊ΝT@KsOLpqrj₈ËEǓ�<_"gegyxw⢕yi>zL f�PxҢt֖_@.AaGo{fdd >wFS(<GEPT UczVg[6 29KBL54|\�3ߌhhZ~CVv{69:ƖƇCu 'Ϙ7 4軷D(�srySYgL--fMI�#՟'T!̔ͭLJJuO!Ԑ8/mL!"%[FVZ2;7/+k^>=p#&Z]+ 3%5EQxTAuP)!=8♲Rl\n ,oG';V7oG߽̎@aQ pҊ>D$;UIƭh|{M [.^ڷlF_AA_MYgIL^3޵mݱYܽW$Yq\OZ_=ɖ#9T]]ͫgF^eoBDliIٹ~>׮xy{!\vX>H̔FQ$RzʔpOI<+((t|r/ P'xz;,:7>ƟdYBI04!;}̅EDlز 8B+ oaXJf:K?O=qdR$9*̹!5!Lp `;333߲A 鉐'̿fJIONLMOܞ^))8 ;ZQQQ-A$f(6 *"z͔~"`~<Wc9CH3nX l0ky<$,|up�ᯎs⦬$=p.Z|ќqx Cp},"ŽU())'Og$'%y]垜 =Sj$LQT RTȊ#@HNIYnCBRҗNϱpR#qǠKaWCX ;P* 7;p8ItZq"=T n4bCeՠ Pq37@p{&%%ACLgI|q-CacbEȃst4K"f,hvpʩ`77/#:?v4800g/^ V[+TB\1g⽯N<xY@!JGU e&Laoܴ ÈtPk{GFԙBB }ќ:?Y'%rdQ# ?xɋWB:qyLP{ór DCQB%* =~kRr OĽ~0O /q@ۦ靦g ML+YY,|0<e&P]]]j(TH/;!MEMۅ"'A gL<+3n5Ssriu#B:^5hB:nd*пi.G `ѓ~o^N*4|ݽbfڇ~?7'rh~F\ACBB߿T*<=%,(t"> [1¢cXǮ K@@A|f*ԯLIVOI烣W7e%K\\pn|98 t٘i{5͔nnnvtvYt'_əCvGB{D! #{'{<z}bd*ᯎi4շ@B ͡_alz.n_;A7 lfN9:!lr$E|׾=dغzya4#ar/A所^wV0#d›2S`qy ˍ0yMER! f//Eʈ;ĥ8K0iO))wL54"o_WL ^!y\O^XnNę.mڶ}2# QK  25wq+Loj8G}<| 55a[w☟!DK-)M''Hn`a4npQ(ᐈE %"^|V]7a lƻaxl\U??{)3dim [e;*f7G`T6%%r]&ː!V8$"#>[O_J!F-[<mHDF|8"Esnx'ÕDėe(S~uBS?nwXY솬\8d[WWGW[[7ߴ]Ȫi~!C4_n݈csRӇjʪtV~-6Ťݑ P}}=~5MkA }Sv ( ˉ4/%^f^Yq5j FSʫ=7 u(Z]UU�.))o!lkkK.$Q9c \a㇟l0# s1ק#nb\̚T W ړOX'˔뱜KS&Gy_<?v@boWkЫO&d4cWRǥ leeC9jzOOmD+|쒑ٕ+S +yXXZ錉0k!).G#ߖЉ'##΃8] +Ϗ>r`rZFW^xC-g-̓念{'b#dÈ---SSS3_ 477ǡL=Ę >1)?oMf__hי5!e4& KXBS)cDwΚ>xW|#Л~nf O)6;.=y( |/-- ('&&ʕ+ߏ{-_p!)))NO?SCu_;t8sLΞjOHH@ʸrѰ`]T1`Rʉ2 *ew߂ouu'BZ,AUYծ1({-"^\ DD`Fa//^xE=$Ғ0(Lʉ!Aw"KW-;&'mZ}a>|,u ,JtRց!"җz-u./zXeBj^a XĐˈ#N\0e f&޻t٪%ЛDrIXB`x۾!q{JB|sV'7,Y|sU$>3l3[r/LMFF(}(J�c*W瘏'Lzұ_Y8saE"]RlfX"PWb)8,INNF/'*2uh95Ѐ<AGMl:k{+=E~ %IJeEG\^+{yHyxɖƒa`w\F;"& K`-f͟w'&a.2]C0Ϳxw{Im~ ȢE QMM|kE(|)mu}@ii)|,qAԺ$>!a[1265;;~lUn:?[,]M|I䃱x uBT/vů@Rl3A$,,,..&FP;d4EаMی#f1ɓ֜vݻwtD$O\|%<GA!Yz M_j[\YSm1 111UT*c8d }bAAANNľ`N`=<<ęT52 jFdirᢃ35%эpy`l`03 fύGSg~j4afV69#_B9q=KOϞ=`!tqyEd))gJPPPdd$|tDqq1]d#޷`30I}tt4 gggc.Ȧ ,t=tvuM54jhlG�&LԘV(߸eckŶuNPH?Ç:G Z~#9wiO<Ayflߩnkol~{oσ&]tDaa@ADx)7OGڱg|Si)@, xIYy9c|IiټK!Dkmk#fC?;q2#=T@ѼD(%q/YE^{˜" xxyy8dTvZZ;HVMV#;xhȞae!Nf:0TNSF�\Ri/(ܺsC2p%utt2;yh Q.2{}vHH 33ną;zۇ1NIIt'44#Nc:Fvo2}qf7/ݦfBU?ϴeWjř( 3^0,=lx$K+.v/eĥ"އ˓ 1DK{Ӎ7H&@&Lκyx"q-;ǏWk>?DoMtL ַaUy[ ☆ޏTc =9>+jmÇY"O7y侮ZOF\˴}pN,--MMMϞ={17 >Ü/#+8vW|̵6Ö^Ϗ>`&q;:.^1#wTB_'Ḅą˖<aҬ =)4} t:;;-oeoA iE*}J-'Jpp0\;XB&\-V.4%5T$N7n(=$!CvDkMѲh_2-.Rq$v/%PL"2e]�\tw.I 1ećq =uUB4L/482qV"5,0SŚ*y![ [!C\cDY((Lyr?WIoTȜsuN=2qG^$8B�˂riZq^g]ď')aT8*oUKptT�YEĔk@>UtN:;*/>|qvtBFkAc~7'#䢰,%w \-[GS"CBy{z$">P}3 ^ly{(x񢅅+?(((,,,222f 8eVmkk�yyy%%%Ս cG'&&斖<y5,3P*ɈˈSjY% v > 5gF*M3x!µp SsܷLeܼpϯ>XyOO֜V|@xIYsFy$#7)w(i>kolۃxq͏l+H,i{yri۲ mƇ]t>a%ۥg7ke4\ "'ʃsYsMs[?Æ�v~iν&zrsBmC{7#- sG]OcLql/ 'qzWӍf8y-!a7dayfe7)l�o)XbL_y弹_ԨwB55JlyGuDԣGƷ!A!FTd/f^E<!|Oz[_i o�n___oپ 1qqwg<Xwm4v(&bU ǵX$ԲvS噕Y׵unRHzcݷVJ )+;|݄g�C:I[ݮ_xşt_EMVS[777_a=k3f~yD8 r̀߸u[LL AOq#~K1,%<j/^$0Dwjx._z7<)kx2f4.y]J $w ?Dʇ⨪*2nL٘3B?} t=|=_eg65x2.^&%+WGDݯT*ٱ{@WZ(0G/=Z#`KcEҁJ)V|탎uPYo$r#x:)>7U$5x>mxjQ/,@%w5k]u*?~,8yd|Ҳ2dYBI[uTL: #Ƽu4>Z7C3:K}H"bc>jXWܪcƌD겝_Sm*M&lEzViJa]aPKَğT !BYn8J [ݱ7l9D?+`? #~ܷvx O:s%+9|h-\x0.uz!'Nv�uNp6#'ݬ;*(<g_V5= dԩp4O^~*V!GU9j u?`wvMuVrIrq}˗BûhgW7`a16\݄bOo!ښ毭¢"n9 {xyeS_ j#;կ̙;xe8!ʇUekTM{Zy> v~ywM\"+P;nl."PYOOOسFKfDoxGn^eeg8tTYUi�"__?˗gqƾr;C8 pխs{ME8pkEE<q= _y؉=yqQqpvGCWJs-2UD{ޏ~{ƍ;::6u<!D\Fo]=([Ziz)co9?~_gϞΕ{!D$ҙ%ɿ~T |kSxxr=^|&8hMEF|#/ˇ~xPg!O~S`ȵR~_;i֊}PMCߢ"#>?1~xP>g $JN7uV7k.Wd]۲?is&?Ү*NiCєjSqAgEe/\f͠OG}4mڴ+W`i|ᕂSã'eR*] qc[ .}EpO\O|5o\>^%RP <z"yw~ߔtJWR0QQQƒ~ !O}XfV E=t.Dp_?ɓ'kkk윜<<<RRR`G4‧߂D/"]'B߼}ky5رMB?{?hZ[[04)hċ-uuuCਈDEo!Dhќf޳x?R%n =JѰp7O8_LRjJ6xG$!p؆#:m˧HyN sÇa1gh$~*OOO5H|}}Z1OIuc}H@"e._i$2Bw^pp0R໲رcnzz:h@|C51Hߓ7泝!"/X e]duW ΋<+19^T⶜:7!!(O~FDD~␵uss[eھy\MRhJl e>q^+.2 Gk6l_[wϑ;0阑0KOѪ7oބ'JAF|( װ\r%Bm Sg~z)cfY:8N6i0{nl|3N40;'[D6F΍OL:w2ͺU]Y#p$ ;pzwpS&g-?UA׍zDniiWcFS !]}Ʀ&D@=3[p'hMHxV\[SlR6nRiR6ȱ۶nڑPR$Vx:mvz7񑇸Py=HDޏN7+*+Ir⥔NTގ�dzgc'N蘸]0Sx &ҲrdM0jUY&f/XgeG"S8N!a{~εBMWISX].f)22V]j݆4yuUP쒳DWDLNoMF| wݺu… O>zs |ϏO t.,ĩGRp28dUX xyEQWZq , +NMh|t:݁NA8VD/R>{F^(--MLL `n'Ϙ05Ϟsbiv!~Vc{PQauI6<aۮ7nP%EBvA?ȱ:n kfde15+>[ŝ]f͞b`xҕ 'ISӊF.;*i:w2ʃR;*=Tmx,6>a@L"M-++KNN=EdϏ6Q_d8. *Ckd V,f9 "55522'\r?/I48.@G;dE\za=V%¢h|t:BF| )][[[CCCUUUQQQVVV||@?0o~AtɪYFRap@N)J1d_x1hv4>N`ěZ-|A o qi^ȁB fG 2xgg'E]]✜WAAt"#>0x񢫫 " b4(,,,((Q>  fDcyhj48,@wS#Ϟ=#+|C^RRqMz@tmY$]hF4& E#ĄOʣ;)28y=YPӂn", 09aIthL4)͋F&|_t6#Nq + : `cIOCјhR4,L&G##.#>CN)9 iJ***B(\Y$h:4 &Eâyhj48囘QS6 j����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_images/exfalso.png�����������������������������������������������������0000644�0001750�0001750�00000247671�12161032160�021704� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��-�����Vn���sRGB���� pHYs����ȥ���tIME wh���tEXtComment�Created with GIMPW�O&IDATx콇_{={su-g= H)$!J,*b[].vaTĂ^C( {!CH#Xv_ayyf晙+��������~MثGA7���������PLjMwWWWv���������(!L)3qgJՄ\N8RT"4��������@ 1eĚ;SNj*Z%2p~vj��������P[K2ebĝ)!'6MٸV5 1pR_,Heee/_,--}��������!vL2ebĝA&6MSj*>H8)Jx<O侲[RRٳ‚��������bđ)_&Lܙ4hbĩYS*NxV ohh 6O_O    !'M<4qj]*>===R𪪪~kab    w&Ml4qjJʼneצNpj0;%Ts   Gb!CuCIG?z851kIJkSCNK$X\[[[VVFIGśćrs3$   rt$~:dH1R7K̜RO&~M,6=$.ptpj0ݗ˥Z8sLrfHWG ;.    C-hpR#I߶.pbw#fMnM.TJ4˗_O,:b0ٝFwg~0b&N˸\3AAAy\] X,C2gR巭Kuq!N}BIJk&MݚM"pG5BSm>lϩV3=X|c׉S2FS/=VA971Ť-]\襖Lk&uœfBg T]Gx{jH`kgnf=3Sk_gk׫OBAd$a"|!Lf]KWW]$ggg&M\5}é+**(*[5>bw}k7lo Sy7+k&omA6tI\j7Yp^2 1a&u˜f4d](?B$mvΞWbԾ.⪋<l}W\-ZCB|{E8noLazo$DAFHZ95un0Y8sa~֐E֥JjQ+Tz7>|HX6qmb#R___VVVXXnnj1v_};ïMf5?[eܿ|n ֬ zZr\J5wd2ك4r4451SZNx]]--M&2]-Y{ݼYVMy;*03623wqf?@{ZwCT򤠀ʵ_|\,L壦6 -& 6EOWPͦ`l1܍y1LI-Ki<\eYԥ'e[B XL+ssccsS3rH'8YYX(ƙ-LՂc:4Vq/97nl{SMw5áv:zAi+}ؐ7Q>Lhץ%<<###''5lĸw{8v2z8p.->o׉S}}g/I3a7֬ LW͋f&f,3짻T5|O惪zqWO__OgmӝI#^l;[nVd}ꌃvDv\ -.xXM=zn}K{_oW}=mH;L{/55twU</Hɲ214h TR]fllqoud~`#pV5ȝ3368;3U;RgW=vyʮl˓ağwiֲZY/xH˶! oT nqH/qm8PR[-bLw?zFS]KlmT|܊jzd+,mtki-0^minkjV#%?GT|rZi=zA&aC&|TѬKɳLuuJz;w_S㦾8777֖>~p/6[3A>Ӛ<|7|an޹g#/^1:Zk-Ad$֛gNN+历G+Kw֠pKi7KNe˖C)mf۸2vlnֵb]/:q>֋Y8mO/',s33;"oؾXMeسC]-n۲swRڭܻ+|&/&zxcw:9iH!={B٘1LV6p6mwi:b/} YfNER^;!pw0WmQ=#fVbZRR G==/MٚM脖[NRlvə8+k'z/zze^:g=P]akcfFe3M093 gKɢ[b*NV7pXǑu> >lk֥[L=uU JPMX6qmbN,ŋyyy4qeN75>\> nfm3EkAdNcy[[s44 3 ;+526/+k Wߋrk3u?J=4\:+xN~ ȏ퍧L9rOɧW$iojbaH68}_㐻p΅A*^R(i?iN-=}N_i `1v ׏W-̧9p(zFJ>]|.Siajkf"p$V.B{fir'>71 'O==3Tmr/JM Ku5^ gMm] 9Lfkapb&l '#lD P>lxauiV]6SW]ªg_r֭[įeצ^KJJh'BG'Sd೉޶ ǘ?|ɟA;}/$]fi8tmv!R|`\);[͌[veu)0llͨjvN36u>Q'S\!pl:vw+Yĵ7w_x,j*X(cASs52,wH fj)$~\Z^rwg=\ȷ\E \Ddti{+כ̷?jYf&|6N?Qlh?õwq;[:SU_fida"ٛsb3%, > lN . #-o&rg2.)֬K3:SO]}Ro_|pbpM2\J tmO?~, Ь 4 kVo]nXen:BEcX[Krv,].Q#3ll--mYd}f8ڐWFFF+;;bknblil|u]mrk%R=.vd|)̵Aֱ!Nv-^cq-tvj;ڹn=~u4, ܄mӭl\Dp w)jiwBY¯PdTsc)ބGH㉤&>I \]]~~áȚ. #/^Jvg0k|XT7ié/pC-cx%d{'Y[GL-mfEFjVDAFB?~1=O&0,cm3HcؑǸ%w)m.QH.(~8K=m/Q b={Je󮽇3V=4t>~`͛>Wbfb47}O~s{{ǎHpw'϶'KqCx [ao:p$~6nm\.ڑ?Q<*Gׂ=/\|()zOg>ft+k=T[V:=jf3EY'Owȹٖ<ٕ{i&{S]#'gyBZ4͜:ϯq8ܴY  <WWN m.URsZ]ó_S_!nW ϕ'q/:/>?ϟ?-6UDAFHl?v+n)rh OatX[x[Kv:zxY*_&sҭMbwfMn˷I6Qìfe?*H w<{>}:ٕlȚW7,uEK2s*NKU3-,3솹 *h+x8IxxoGۗ=\(V۝R3iz`n89Hud}͵/YfkfvǦ;ޙ6pLR0iR΅3,5SNEvMG? 2abK'(&Un]:59GzjmɸY9,)f֬H2_xZX}{*" #'McnjJ.<Rꛨ\]]-͈MK>(sqt4qp]W}cG⛜*5fnL72`(9O65Q{aG-bYCv|s3ənp۠}]<gj{E\6najdGmyDo펙鐋Tc6mnj+_Dru6ŒYӭwW=g}ضƂ(`&?ЖӵVyC٥A!C<d0֕&NSḸ[N9rc#"TEDls6[m) ض|L&=kfb>AA:l654hcvtRToU:rtL7ߋU5,VLxAQu|3AAX,iC37<AAAA~xxC9u_ AAAA:ᑑ_(    ~���������óg���������<����������������x8�����������������$��yרˆAJj^ .<~C����_�HB%\z!%5/qD\;6B�����ѹ�XN@#p��x8<�~{xOOϐUH]>:o"Kt���<��y)Ep��x8<�0<\ܼȿp�D���zxSS'|B%p�D���]yD"D &s�.���;9p�D��I&ճAqhί/Nk�xayڅP,sSEk|ؓZOad3<.��n[%R\�:BX}Wx8njoS6jp^?wUm{w&CD/H_*/:Dž ÕLՕEşS1bMOX/.y oљ6"{`0/9d*ް\/<��oNrʈNF&L{vMozy5| u{)U".\Ɵl4qo83уN>_ >YpJUQӾ#kd 8�ߩk^\k5o cƌocccL[eQvߍ?hyܺ*M pFel'8Gkȋx8ܣr.܏n_WɠŒf\ fjZ%X&ۧU2b=\XܻpV};pδx8/u`x��xpI$\5fNKwYt\$iozy;#wolvV%Ҷі{=+9r-o8X{/tK]i֭*l�Ὼ뼎 y_ƳwxR!{كfc?KK'g-?$m.C.K'}5\./ ^Ao*$&z7~<55A|'<tiYv 3I+7ohK]aqBו[.\v\*ֿL^WjĺvnBG/_]Nڒ pJl:YijMV+ㅊ|6z_;pN\TXtu!k]C ];tߗvs@׾v,۝CΎVUn=]!vMc]1Y!־Z5h!ox#Xhx'2+os,osUѐe��}$b1ʕ7Wݏ|力2q~Wtؗc YcƌoP ,拫N~CWj< �XkXzj:5?uQޢ5s苡tjqR* 2n+F\mHĕ}=(o:<Hs}5{GƪJWږ"\hh4mC YzgW܌7K$7w2Bͱnu>>+HNi Zeܚ`p,N aaOV[%u׆Kدb9f+ҵukmp#>,W9tPGZH-UPÛ*nVu]qgk3ÇdR{AnH"i;Hޡ@h`2��a{TQ_4 tO>Iڮ)).S,hΧc4V(W,<Ǣzʝ#뽙vo <z�we % p ˲j=ױ7#kܝ~=�Ni@u y14U( t#BeJ,9pqU[xVnW}/Pr9#U) &JyzMz+,R{6㵂nVfT5iYO-pg|_}gzxc pz,NЕ+ B-Lnc[-{\vamg]C !<>t" ͱ} WO vZpI[\ۚz')3j)'yB@h`2��7/bߘ1+;uke}X&[zG*N!mMk�NV % p!k]15nRgA]3M)o*;3#]/. mbh_:/S6] }_z q<67by#v߮PB=%Kd9[y㼨ejH-Ϟr/bS*DZֵnUUUM]|;S,NNœcRF*nճ"]9d?YאBiPoRyZljQP[,pߌvI !O6Rf}I==?ﶼNVGCq��ÃNpJ8(ioɟindwUwvIwC*&Y~=kJ/ W?O;⚔-Hs;�s_ӬTullj>@W%b ~;<_8Ru*7P|!CC<ŻVPNM@Jxxr<|-TuG?~_ƙ\UÇҵSo镊/2nÛ3Y^٦uEzs~г׻/}uay8S]>id\Dm=.;̩ylX#z;_{w.���K0iFS}ntQs['&׍.)l}MOE M 'E.:MF';y}�߱}*굮,}ԯ&Yx\ 'X\u\u27؆bد^ pqM*-nnɍUPҺȋ3g_f/\|>\\y3Ű$2597åҶe>.j{&:wJ*=}-z8\pmDm<U(׾NgEzӀ~й}>\{Cp.1cr$^<.i5?aO;=\.{H~2+CI]3kZ,dLm`2��y8��zi<16ԝ?Ξ;wudEe7Ep|OX1ʞ|~pt…p*g(w.ig#[p=;Uy')ÝwmyxSe}M1$T{|>0 |T¯k; ]zkkp#zg[EEۗ34 _&ڗ;NI{xS~!3g͞<zʛg\N@/EzJCq���Gy mƹC ^^Z{#�]Vq���Njͦ|F!8awKkg)ZTЛ$�����xa^~cKP yeN7K �]����$]�����x8<.����<Dx8��ߑ�<\����o0��#x8�����:��x8<������������p��<�����7G4B�������px;pe2YAAc4}�<�����ou������O.>2pT⃑IϒŠAtOHs1ժ *`y3b/]$-/o}dWm p������k۟ )É~KkSve vizx̉.(mW -Wfvξ]~~Ѣ:{������Q~l?Ó¥S@e<O)X,O/xEcKۮ͝'xx|߲} XYq*aVldlB> YP!0.뼨*/,H?0wАe;4IYω JIڻf3~՞ڮ>]ݨGZ6XG;�<�����GpËIKO,CEotonnv&KMoo4il}0?b#Zk[z5u[ dziϫW<J_x8?xSbE*M@hYoۅ ~ p Վ������QCJ8;%GnNjn(ʞ՘x3FxƌkWSy7дVP(yoV2mo)Z_e08Cz<<A.n_7vM_Qz{ 7,3Ȋ.#}`!!=|`u3�����xT)ᴇlk֐ҐXŷ6]sƹ]Id+jZkTR9 -Rzz =8յC&v[DYlj1C<|Su]l6M߮lCt V`_>U7Xk;j�x8�����Nb6ђsCUIUI&9hJ'#U)ޗLx`<|x8p&[}<<Ν&4T5m#YxwS,6^  hgX{x�����uGs )Fy*vLɕLgJvMMo//fgz{5PA dA|^ )5pabqS+YWցnmχkz8ii{ z|A֣p }�F����Fo~Ҝ FgJ6}M'C<U8}B4s]5+zv-/Iޗx/1*`FT̜ 46҂�7(v齺1s<UoGu }=xdM u{2_ucx�MY�����x{YQ5Ė;Ud<)1�px8�����N {FG?t^si?zJ4߿\ '<�x8�����߈Fz!Hv;�>:<޽{C�Y�����8+����x8<��x8�������q����<�ßgNO/ 5 Ǫ1h7y|`~ 5aOjĸ>ц@={voHU-.yԍr]-����<��#Û}:~vęoFH`jvdwmyHOr\wnᕷg}6ָZ"eF~>κQ�����>ߗ.1Y\n5lkzx\¨sO ,`8Y`kގƌ?΁dD\$?hĉpf, _qѬaӦ\kˢL?~ugM.Ǝ`l'87ۥb _lr ='[|WY5]_?kjڐ����w|aY"3s>.:2_ c'Ĕe9U)<j vKm-ē J=8k6j]8y<k&i,',R-)F'an �����xccDz)7YGjMmwÿ`OL<'U?3R[ƌߠq#5?|fTl�>Z=ܘOǤֵk&'91 pO���� ## ={c~:X# Sl:yC?Es> FFFbyxΑ5NS3yU҈E.?%̌.My0 <?���x8<|z2رc~`{xGn32>ޖz)ӣnAׂ4:<<oHuC 0-6T[n5Qr/.a<|4{xijF슼cR*sb. <���Err2 ɌFVs>N(<O?BM=_;U ۹ypqU2Q/5ZUw&|ѯ[Jii's|pdgL. qb >-ws|[pO����#3G,>Y,)hXѾ$O |;8wS�?$jCovin7$-/ošpBY'|x8Bb1/'1z<,}ԯ&Yx\lz,R0h 'E.:zN84Ězn\u27؆bدNnFNέ<1TO˦=~sbےCޗn ���#É~KkSve vizx̉NiXܐ{x^ڥmxGq/xLa9>zG����{xRTsy ,"Whzxlr ٞ7z;Y pww_}d}B6ͦ+w4>\>+)g#<T ~,n|LpVxbguֹs#B7u৸`r@T• 4|�ԸͫONTzq; ���ߋ?X؟<t?lX(; LW?gSӻ"=#6wz.lKL/Y) kWIbvJ^ܞ>YGcQOroK&]p9|E3gfk5=+zwKxE_Pqw7'fL)zO�`\/.7_M-x<���?^_R|vYY17o7^il_ի>w#!=&ۛLt6g0ƞ1'퓩40lS_&{ fͧmg!o㋖%I3cO{wZ4=|Eno8Ɵ%oѦlBx8ø� ����-=``_հ+u)35OZW'[dӰ9dBRp P%Gf YA?)o*RHjӶdÌʓ yjI,n�����x8<7u 5'VJ2J2AS:}3~ n*ƷS,/z[rURO-x<KLKY\<qͲ>7+/)o=9p������~+n꼊er<S٩]S>p}=]%Vy_l{ z| A#2rRcSJ:bR#t)z7ͭKkinN[͍?-#k,]<�����῱~xiN _ɳQ%Sds|#Wn=X$ꤗvT_׃ "ɤg[>7~^gWˏxeq!sw4u-snđ5>d>gil1un8`tx=�����0<<+곆زcj@V'; �B`����Q[%<|4{8!3] Zzi> G*i|r-ng Eq<����� 8 }K@rׅn;�����x8<��<֭[Kf, dP�����x8<��Òϳ' DxDc ������bHG]l-������xۿ8p ..w\DwD.8�����px8��/[l2eJjj*Q񢢢¼ns7oMe&!oyy됋ƜY%ŗn7hsPL?X;;CejS'M#m];'*d|LxsҰ�/8ՒdA>�����x�uuu'''O0!%%% ѣwIjv~[<u7$ ݏ5k.1xθtT)s}"vޕiLg'd1Z.f bO_T%4г|Y+jϻ`KGAᖦP���p��jhhؼy3-"UCh'JlYDڻf3~՞ڮ>TkCV^|+{Ys|¶>%37) b0^U觜xڱ ;+8̣$u9RvuZt=kՅ<O�?-@Arc`n۾:1׋:Ӂ?%u*!6 |o}u3_I x\W[]E\љ :S_4 Fi/ruu=ء6_WZ7Ok/Q;=W{&n97JOq¸3e8����~ :u*-'NܸqJ8ݗ+3b9qg/q B.MtXOåV<ǽ} dz&hy9(e0 }jer0{uٝ$[@vRt?SIUUL&'LwK[v}*d 7R7s2+I={Oy<fcgr:}uԮi.tɴ@,+Scum^*==Q%Il p��<sD. �i ?y$R^TTV5<94#}`}2W!?^}ݘWەH":=knZ5_R GXm=Q>pEXnGU,HY ְܑ3n^NP݌ޮJyC9pHVn n?*u&,r윆e<8pkʑQ ŭ+<易Dx8��Á6.;vLW�ollܲe?}mukxz+}K0ًj԰X)_DMx-Ikat<-^JMPn)]v<<gI*twSӿ ia6/>N֍|~liO X:Rª\뵊^`5$~*!VFi 35ɞ+…6j(]q=7P9p{<CYq��< HNNF_{xKO%|ҤID bWp]:ĩLW[/G)^yqԺ;^$!`)oiΊƝ.S=[H*ela䶲Clj4`A^b3 *S 9ZPu*?yqT_Fj)Z!LPw6kt͡^z;���x8<_,>U|(`dqRaEf<R3uL*Dzlv[ŕY!BGP찿f+%W0 v2ټoR]:x8Y㑃uDZ nWM+J"pA R-up/h&q'iA#[~+c2nDRO63LwZyu+&uuީZ,g_ԁ-f1<ZV"[m?I"XmjnFG%&|Oeq=/V啌6/ݘkZ?vuuuJkɦ^o#Ӕs7]'t)|\k6OW/Ik9O:YэC+Y!q��<pҚj&]~n}>4]=o6%2%3?|m9QK(wBspj]RQڮ[`bx<<2;Ce+ D_;;ꚛɉ]!zt4Wg(ϤzYQB_. \''h"Q0p9Enl߀Iı7Os+ͽ|74!/egT (:g+KTl ׶.x䤞TxzN_xl¢ſ$_uc0?-׃B\=5˝3+ABSb)@LU*pn!Yqc/-ոK:7k_^ݨ{;Cn*%8��t{xRTsy ,"WhelrL]?}d}B6V5ؕfF}hW co|߲6e͏|uM~ѱ =#-@zvuֹs#B7uyxo5Q^oWmRFsTkWk~;%=w3g\~Lncc#XSDJ8-.Yn/xiY��@?X؟<t?lX(; L p]?Tx!R|$;UBK tkSyj?i^YWK`~|?]кͲΰYlݒJgkwS?}A;q_^{t:P&+k`ތ;ʮ_\{zzd2< ށ5{Ĺ^"L#*YymCcx��^_R|vYY17o7^il_ի>w# Mdq=<<tCKö<%scu/3&-%XPkj۬r_k"]mNgWL _>#+wOPg|#߬zÕjx8<\??ߟ},niiihh"� k}<@h4��M=``_հ+u)35OZW'[dS-<jT-Cӏ̏ НES+mڞToQFĜ;u<\*ԶY9.-k,XYrBSl-x<u;dp+G}GV^�����<>=<w%gC #Շ,LLsДNF?t;-kn#VI= 9K &O<0YxU!AԔUջ/;ڡc&+UOj������Y~+n꼊er<S٩]S>6-PWu&ۇzXWKQ4=zշҗ3OZsGz<\*Զ}=5ԔUp2_۶@bCzWԾ �����<><<Ks7oJ*5t qK]?oe``y 7]dO擆<|nM~uݗkj۬|8-9^W[ ZMq_%A}̐+j������YYCJlʱY5n IƓhz8�������`xN {FG?t^si?zJ4߿\ 'z �x8�����7P_2��������� ܺukɌ䂌 ������bXyvv:/HpL����p��<\ ɵѣKcힿbq<S�����x8<��Úyy%�����>WϢAFNSݲe˔)SRSSGfggϘ޼5m􏛄孆 lތ_<džD+q?81���x8 <|h( ONN0aBJJJ@@ѣGs<z/.W]sK*Jr l~< ߷ߟ}w���pAQ 7o%СC_jr~#<h6=2T¬Pѡ<&O?vW*oZ,x<0h퉗6E&R]]]]3;O6,eOKdgKlB> YP!0.뼨*/,H?0wАe˨csDGD%ovV]@jOmW!{eucx���pAQᔄO:'nܸ%Px!R,7QIvA֦~u_z 3Lw5<yҢ<xo=KM΄~;Ҥ-!kNK{^՗Q/VqȴxWnjL>HWjHψMGz.lKlnv o���<>sDK?A hpZO<I$ܥa[Ң^ûZn| *r |67*\.3ܦ1M,n)`p4xx⃆Bn_7)şu<|Eq3 '+j +jTt ɣ ΰ���rW=2,??ѣ~BQፍ[lєOGdžYA?ѢZ2ҏ/E/ ã}K)E?vS]]];d2ERU!zTYZqyve,n"-@>RoZV���ߑĉ+y=ED>i$"ᅅo듣[rURO=^U<|p˺۲yZwjJ`UE>wǹ݄╪,m5=Cdy9MhPG;j���<>=/Gf*>Y|08)YRX}3H )X+(wSFonƋ]ygΜ^vf+YKn.g#7'k<rp5ロHKxALu qWKQ4Ï禕izxWkŠnȞg=\<UJ_^>Ywk!aj;[d[CO7fz/d{oנÅMd]Yfs=ᤥ1ΖY^u3��É~KkSve?e3g>[yݿuGyxʩe]]]G'ٯ& ' W߮κ沲׿W6so<Zx0_ϟHՑ:.G໻E!iʃQ:<ҭX^{<oy9~HL{Q3b]xƠ9DxAKյGܿnInOkyv o���<;piũ%PY*E  vD͉  Ş~GE=L]d ݻ eBgvl?. |nD,nLOqlsRm<B'] N dz%=w3g\~Lncc#XSDJ)jJ ���#ËIKO,CEotonnv&=#x_\C7򂗧ωJWpGLj[1dfȝV37«݃y';zms_n(tޅ~l7qV ỚQ__wYYٵ~pOOLW<���߽m/({VcVLͨC3_O]\?wj 0 ^Y^*]dȸ�%8x,݁\ʱ'٧ lχ- \tg2*=g:K.D[ZZ{���x8<¶} WBR]צk8ל>i]lE=~qv, x/s}ћwKU机\[H)Gi],oo:<.7Nm{Rܵa>�����s1Zr6Ԝp>b[}Ȣ*ɴ*ɤ?M\ M<;38,+"LW`2g{/+yL6/x&(چE:< sx8�����߹ߊ/:bdy~\)yvdԫ~?\HKAΙ,<-\Y?{D٭ݪݪuS9$Mc m&((^P88((bBDBH=O"AqSOQN_~<OOw?W7i'键7;۪<uLoh:q޳Bcʮ}*aB)?+"u1< �����)1֧?;N%>i矼/uiO]ϵ aޗߗ^7%R*+cҾlޛNI$TRUwq}g d"2Ccv8r ن4"k ?YPi5)g? �����m_R n1{= �����Hpy[fO"~|Nu4*~ >4*t.1$$x8�����#P|/9~<@" ŐWHHp������GBBB�}K.m& 2����HHH}=u:]EgLMM �����<)N YyQ/�����#!!WGFF>J;5!2w&����x5�h1_#---]jUCCQq^;V<v*tLR6["TtkoS^˱^XR+϶!+g���p��<Eñ1VµZ[WWRjkko_iY/k5%mHGnV'���<�@ch0vj운/+%שw<|DUXƸ'}c.wO$Y%ƃEJT*:4zy8)͢2ғ*M*zPe}T- Yge|=VG+hdm3]Gf+BCCdl90 O(RFT;K*-_������V?{%%%/.n52> ӊ\0֊tڍgpyLQ64eN~Hp1˓-RI'^EP~ _pc7IbzdZ?qMί㲞s&p K����<,?ZZZN܆^ ?q*VzgȸNϼ8N3)HxcP<<NfHE] 1Q_/NO4坓WAӄ,VzqZZEu7օocE g m CχVl����}?2 uQ?G^xh,--M5Y)JeJR6wpzEy'{ 6̡#y%4_3H|jegW^} \yM>MO 4,*[ |i �W���x8xQC"�x=b1U^ wwwT>LD;DyxnKs& v0[;=a^�g~ΌUeyA([[X*6����={֬=NJ쭌W!瀺k_dOy�V'.{풾w/d_,ԄIC!RUlR pǚ"b{^ Z!ʜ u۰}2|dH3z<�LN7w czd Wj1[ Y'el>pef[{E7O P���x8xN'mʝFSB3˫DgV5N?*&{xMN4ûDI�np:z8022̜x÷]N Q)3kU&9 ZzWYsXycc\C4Nm75}beEQ^/|���xɉ΍Ŧ|wI]y\sg }O\솛S%bJ9{sBgijH`̘nH^իWߵgKTn_A7fH oyYS.\@Ik4Ic5LCCCDQ�����pxKp}Et˓nf=G)+[3^y0M2_ {Fvs5ߘ1(2zӞ˷SAzx0�x+Z6;3f||ooZI#<;;0 �����޽/b OL4c[o6D#V,0;rƯmFv6^7fr7 f`$_?D:M{iv�ZWÿ]4D-`p:ĽQ|�����px?û֮CsqF!rr4=Z2r#'wk\O t2_f̘nH9'ڴ ' 7@�����.\1r53\*oey8>d̘nH|0C x=������9=RM2՝uȝV>&տ{x^(<|xZiF=Ã3f30o2nkۂ< ������S~cOwѝJ|?ySSO=|Q_ORaWe 1c;Q0#y1|SB"D(7o������V46ԥ v1mb*"${CPv������ ?oYsOU?i9׽ӨAljTӨQݾW7`vm7Ҭ"<�����o5]a~_ݫ^F& ]*z#x8<�������ާtƘl @����p��<%6}=u:]EgLMML����p��<4O000PU:882�����o GFF>J;5!2w&e ������+Z^OHt]+-rqXVeYQhׅDBPi'3g;ӵXLs>�����ᯁj}ݺ:JU[[{JJe <xypޡ)}X߶ h?͝:xhrfvjxW,=|����px8��{`صkW«_kj`V؍ 1U+%שwg~D 2BR!s\Gf+BCCdl90Czø[#=癜SKDߛ`OĪY&|����px8��j{8+|W{rpbP-9n*hw>?d SX> ;I5 ;6;\zzGlxԮ7Qtʑ>25kZzM 촞|lϷ����ͨ񣥥t"g�xS=+'N ^UUJ^|SmYΏ+pD@ 1 C[y:U`k^g 9o>v����x8<pߏ tuu=zϑW�n4KKK%gEajTL/~)zx2\R)BEQ;=|jx@ V@  PUwم,d;����<z{8ZyJO${^p.tR:YjB/)zxbHnE'RAGm¸юޅ?7o;����<:zx޵5{hz{{+U+bH9S}{p0i0DM*>x/@ީ N{r^A$"Ԛ/qk=/챦X_W»V2#fU39'Vf uKל}cQǍeI1ܖ尌lkGz$ዴȍ}N^Mzǐuv6;s����~N6;Ե'mkTYl:sTNJxxGc sY|r8l߮(҈!8b;KMu1ifw�bt:ikznlJU'g|Y۰=022̜MqJM19nrه*oPQJ~<j1ihU|<g;V+b障I����^o<9ѹѝؔNw=+ܙk̾U:'u4z]dg.<䳦9Ntc|~p1xxW³[{)l9hv9zq(HU2m<XIMCBupifk%:u… dF4_444DTe �����DWonO<f}db1]7uƞ!7i|k8Ւ�NGd_]ڍ>;R@2ȻY o`oP%<`siزN' ]?$ QLAVxVΌ?'b``[~[V2 4�����<={_To˟tiƶdE5xAml44G7PXsv_Gh@ Wi/ -so~F)4Nzxc {޽1A;Y=s~ Ȼغ[EEW%mX $����Uv234 gcѺS9'{X_$%vmψC;yzx1{?<ݻ/;*ߠJd 7scu�����x8<;FcQUm>UݛZ`S %5?n:[FWwYe"vI8HpP,<H`P%x8Xnt]IdIx8�����~)s{N{:NiOA}uv9q1)S|遈|^rIW>v<am?sg<3KuNݩږt_)Jps߮].|uաCdIx8�����c}xTvɛ"~܌a"!BHLǧ坾9~d "ZFINxé֧÷]NTQҨkc}O/g %Ύa# ( wWMO{8H|*xG������zx׆.-[LE$%,1d�p�����U|'W%g͑?mV)?l\N ﳩQNG_�����x8x!12⻆x8<������m>}ߥK6d ������/1빯*rv87<cj 7�������xi I[[[a``<tpp0/*e ������+>|855wjBe$M6������W1---]jUCCQq^;P`Rѫ=C3W3Ν :)|)^e ��8�ccckw}NR޾je.r2b's\NqHiq1+Y+TI:oX+w4Xiv=Opp��Y%<��(7 vJxuu5KvMZ hRir)bnVr`9畍2ғ*M–9i)fum?;휼z );'ؐFQ,|Sٗ9&p VG+hdm:i̓`{y|;@}(KAK7>]jdYϡ��<��x%+))yq ¸ TzE;8L7˼ʴ?qMί+1.9g*%O*g{G;kIe^n>e@$3\Q8~O8-t*Jb7Ibzdzj{7]~P>5oP&Y}*W$9'O͒U;Xg=nl\Z|��7?ZZZN'r7ý~ "UUUz(̺p 29&ZqfmwB $Yӆb:ͫXywLt5 b B)\|_vPxvX-};E�*Jⴴo>}ל3<|餵I߹yf\&ZAC߃I-0#Z'Gb]<-0*��px:z#�x<h4KxOOϊpN_8R*n@nu7oD8|0?upMeGo-QMR. V^mgJ|%74=14d4ߛbΙn.4B˂ރvaƳp|Qx?��ojW�n~*D»W*خ)oKB�8uxi7 yxoZn%af:mw]Ιщ1[etXVp`B ppd|?|py2zSw���<yx޵5{hz{{+U+bH9S}{p5 :ؓ{+3o6Z+xYQOᓓ5UEĺյC1Ҍj i/X|)%`sw:,c7ڃ�7ß<+TR瘙ɇv X$I2[ u9giߪVNᒃTF6:'XYliYZ!B[1���<m+wOu kOjn4y8x3p�g;tTfxH;wNt:io_ORaWe.P 0BQ_ 0w$ѤÔޞgJL%?HCCiV6znAӆV^H;z` ~xtMo\V',y_:37]1Ju[B���<26xrs;u)ߝzRW3ܙ}<"gŝRw 7/Ov㭂4DLE$d_/ynD 2BRAmH3[{drr,ԩS.\ Ӥ5fL!+-cWrhZlR��WonO<f}db1]=\.2.ށ9 FCx\:*@} GNB8xc<\fgƌ100WV+igggE;,JݠSH~P����x8X"zk_0]ĤK3%/j jcK9b|jGNk؁4ឱaZe=IpxoK_Ɩb1 Nfսukd5gp#-@���û֮CsqF!rr4=Z2r#'wk  ~_/^_p������B~{r} p>ʿͧ{SK/^ßc ^jp������pz_J\޿*wФo;C,>θ6+ɩ=?rұ(������pc}xTvɛ"~b_x5SK7ؔNHI$aҗ9r6N)i:&x8�����6ͯ u)]L[~H=I|������x8 ?oYsOU?i9׽ӨAljTӨQ1�������^v ᮀ #�ꈊNp�������h1ΞݿkW0,xxҥKcI�����MyΝ K"s_U!pnx������_JcH YyQ(S�����x8<��_pddéDS߿/s'iQ�����px8��hiiUDNNUp2y2I F"l[KmA.o-e`4L,n[/35bZQp0ٞDKRYxޯ̳qY7^:LUBD"Zv/-4E&H f|]OSr̶.'L$ #ZZm{ݲ~#|os;?]KŔ<Z 8"Ui����<+Zw߭STRyX|!g\<ܓKxh馶7N-%jXyIb|tc6 *aY<ΉQGG-3>=;4eS!gEiι9ga87>Me9<Yfwhijbe%˪u| ውDWCGMN ŗ_4����N0 vJxuu5KvMZ r]q>?%J"g ;g)eR,@LTNO Idytkuq(JvĺEY ZJQ:9bz}N*T,NtcdNZJblDq81JAQzzgOھHOJP47;<y@EAt8=]pF˗''~}s`[R,%PJRpgIT9Ӥ�ۍ 1U>JYڭ M;`bNKYNnHhj )s2Ear8F{N oaC"I !-F//]Gf+BCCdl904C ?^fnffZd|WJ$E@c+SKDߛ`/Uu[8t��U�pV?{%%%/.9<`siزN' ]?$ QLxtN,95N-j{/_[Oۈ0,# coHȞ(ݏgwO2wjӑs}NI'[<Av$˓N?ulاM_u hx3oKr>s/}pz>؍\|o*R),96nۂgv䒏kaőǹs{#v$!"Or9̧ "crbBNL۫m[wkv~mv3<�V*9k]G|D_ 9K3gm]$Λvi=>57"U�%Η��U\|9khiiq:�9%ĉD«X +:NfHEޯօx89ii5[%9!cS'=JI1qy;?2S?5ӆb:3Cb &3�j3!5mYᳶNb5ifP˲Ƹ䒄]9Q{nYg*@6#輻|oa/mtTy(\-9(@ `r vNkBC*wL، GfmwI~8叏ϤMWƟ \q8 \q_Γ�B܌|<gvH|U:C��*J~_D}?2 uQ?GpXZZ/==+vlfyQ͓F{�74=14d4[ڙ<5;JE]y)M5Y)JeJR6wpJ7x4λPKNǣgg<ɷ%9k9Ϸ0Ɋt90c V|<빲`YJSU%O8'i#kՖyw U}-MUEj8朓3(F[D�-aT%X&U>4Z;Co�e"qg[.g ;qF@_#_?wW �Y%<_T [բrvzb"ᇫ ^SCC q^wNUÅ,BٜM.jýLDYS,;&Q4zr/O}WŊg|I-o\/ Qx ԙχg+^iz/Cg3( @D xo&?r-tԦglwȊ޷N'Pb772,o77Ern;4M袛FutKvqF_po<RKD;z38|W �Y%<_DƒTq{Y{D[[[2N_?CRu׾ȞۅKVRja{ӼP;xcp0mpǚ"b{^ Z!ʂSu{~OvθOH-Nip2Õ}ffVw$C"ϝaF\cwZITH@I3O�]?noroy}EM<S{bel{fteJyuxFjKlM$krX7wt Ut$ⶉX ;6=Y[/B#7MN;=x'P)C"iI'w1YwƘpL?ۖF=fxYo 6w>8,c78)?4Z@Po/Urֺ*^O?S"r^Mzǐuv6;sHU{~��Ux0*z8oW4RמpO>r6Sd82g o8x8=&rXS]L?]"$�p8&&&ISR=nQh?pu>#) iZx%g-ki 9KVFIR-iI;sPadd9y%_-?|>] +}vrO3OO.S{mRF7&ۜ9Ϸ{ÍMꄔO2k>}`΋3aRdmf 2@mӜ˒f'}UU–{Myi@Ť~3y 1scFZ,)c<=/f]a N,RUrֺ`.@U<_[yfv$WN)?~W<�2R=26xrs;u)ߝzRW3ܙ}=<E?߫3ySip9qwdžd򏃖o*Z]usZ*{z=o�B7fH oyYS.\@Ik4Ic5LCCCDQ����� ccq-OFkjLdڿdMVsE=6 G wvp8xԅ=Ve;;82xαs�x =\fgƌ100WV+igggAi����1[r'&]-xQcl7^P["  T?=\FPC(e‘N#}NKN4+/2Y}cװ-w`;ÿ]4D-`p:ĽQ|evZGn 9����xz>La:d8ghT"*Nӣu!#1rOH:KTvRL.xjwavf5*/2C-p������}_#1\?*6M-ѿp>]/R]/2/w`;�x8�����ù=|_J\޿*wФ`<�J4=L>\/w8Az9������@/zxow?SO'ojipa,Ir߭vVp8<=;v�p������{=MkC]@oӖ-"~O�������SeP-?ki'M?>aw?hMw?jV9�<�����/;pW@႑W������<�<Owҥ1٤AF������xKl zt= ϘB������xKi I[[[a``<tpp0/*e ������+>|855wjBe$M6������W1---]jUCCQq^;^ݩ NX O&)zy_CxhurqX֫czbc&e&R,Pk" fHໝj}flw~)yVηMS+谰e\ u!q¸J�8-wK>MI%,yCqܑE9|$Z* ~ u u42Z- L/}*-SUu}Vw2%���m1VµZ[WWRjkko_i򶣱Bθ>skno](&jXyIb|tt.jbe%s^ ]<493;5+N_:_ooTZܐK`R[m,"Okv9-> >ܑE9|ƵYA%>K91=EMm7nN[|6_'|ٸXi½{a}z*䣣W���� î]^]]M]V%wO$Y%ƃEJT*:4.'}cSeY;Z]))/.@yQRN=n^ KS7{#)l9hvܮ(NRP^Y䢶2ғ*M)MΤ.v-_۷o%b*"!z+|QO_~24ԃsm@мK̓sj{2e"jyҖQE!:JsnVr`98eyLoАv:T,Đ%S ɒ9;-m$Y+ܐ@dq|^V8dI6S[#=%���pV?{%%%/.Y<`siزN' ]?$ QLxntN,^j{/_[OI?3=Ҋ\0֊tڍ7/xvl!{>9egdyRdgM<SƸ}%߉t6?3?}?WJ=bcF}~5<7*TxRP'ն3F@hDJk2nMa/5ܷ6M 촞|lrT<kv~mv3C]VH08~79=~Wޮ$Di].TAdVvo䜡rTG$rw<#|P,+)p6&>Oinor/p%��_]._5~8NTe�~ "UUU ribGZ3"WBg<'֜鴴oOwy%a>'H;3/.\$<y2?3q=Y6ik]?.-: hx3ӻ}@HM,D8ږ*xx_p||SwZV鮄N+ifP˲7u&o2nF>s3񜧛-#158\W]t]7cxFN_(6=X`o|rTE9|ƕ'$쪷or0r:W-Sΰo6Sj+O ̞ed;_Q��<WU*N uQ?GpXZZ/===+OonБǼ_<ipN}ӱOCC(MFA󽥝SûC$=z?f/|#TTT*E(js${I㼫{ I6?3?}]`jU eenr]ɺ<`dz+|92[&G}.pv0$zQl*h~puY!-ٝs⊜<r*5[ss r#7rP"@U䋜o}fQJ*MWdow\+)g|O6>ҶU䄪[h(��{ U<Hj�n~*D»W0+BDo9/#XulYSB Gxnl& HfEK}9𝂨eyd0yg|y,?('W?<on\Axv�9M袛ϮK-]xx`YbpA([n u!= )h^A&sdL|:cC䛝!/O:<Ցj?ϟ\u6R =<@Y/L9kL1PeZ3MӮg?M��<Up"A8={֬=NJ쭌W!瀺k_dOy%Whҵ0I=i^VR[}/ 5V$Db2&wHq|\v"pǚ"b{^ Z!ʂƯSqY&K]q2[ =+->e χ+'̬HD;,i Y.蓨=9y'Aigy\g_^]39'VJ<;clu8mX#I=gִ?I&QfT,Kj#gn٫ SFv',[p,^ͭ^Ͷ@>GHX ;a61sJ^:E]L$z~>S勄3r掎aaꯞT~afNP[tmq[<as7&SbH 7903/W �x0*z8oW4RמpM>r6Sd8r3yAw9BAd!�I5O|Nn"g5Ť%Np:clllbbb```zz4/kU&9 Z~3bP)8^r(ߒPZkىa4*%‹otPadd9y%_-?|>] +}vrO3Od;R )d6l}Uޗ87f$P~1ff0<L*P^͗Äc)rmmfv$WN59ŵ eؾAFʧJ~|PKnfkK%TL꧍=t$P)#>[3r˔/l79+-{˃/*l}��xkAWONtnt.6]O3w;oߦhieeoa9nD 2BRYQcuػ#K^1]!@E8SJE N(ȡ\�x#=d|@#%deNp&h$5d2 G����j'NYWonO<f}db1]7~k2G fooX�.L$؍ ME虙QtXl#^?PUsGP.�j3chn֫V4³ �����x8<|9"zk_0]ĤK3%/j jcK9b|jߊB(5tL8r;w�r/|V۽]P_wsq*_{`.φ]RE%3<2ğ_pH7ÿ]4D-`p:ĽQ|evZGn 9����xz>La:d8ghT"*Nӣu!#1rOH:KTvRL>B`߁x[{5fh{~-ffGukx8],˞c=s<�6x8�����Ã/v|TGOU_%"POO02]J%:-P ΓS_= OWqxhApH�x8�����cgzߛe;;r}>iM0ʱ(ZK>H%&GI{ΰwL{S3<KoH|8x$�<����� tOpa9LqJM19x Q9}W^h2+ް;R޷pBFtH�x8�����K46ԥ v1mb*"${ˆGID_px8����� x8yKϚ#ڬISď)ظFgSF叚տ'7RH)?G1x8<�����рOiJwI�����<��O}.]Md(�����<�ưNC))�����<�ƐʳJ2Q�����px8��ÇSSS~&$߿_NdL����p��<|UV544:۝ a<$eS/om-uȺ"<(PmⰬWgb7^_H볻7.=]wonL [63ͼܻãkR w~_q~J.{Bb����+Zw߭STRyX|!g\N0/f c FZ3ȣtKQox]¾3a\ˎY#Y+x38mŞĹ7 >o?5;nB:m3Bg���x8�� ]vy%%& f)Q$>d9xH)JeQe⤢oLvvzjL"c[4EQ2EԶؙ.@yQRNf{V]IT%ѩn۽IKI 2p81JAQzzg*Em_e'%U9W^=pO(RFT;wPlȲ{:TVAZ""ꯗ~q:c{5aye߶CfZŬq&ܝ Ӫ{Ӯ{G34QtTr}~$Ndͦ)Ic5ߐ9Y-nHW5y_&UuZVSb26۞K .ICIUn 5)wixBֹ^ sR_9}-MSRixLys亢1.xvvZO)}|sǙK,N)e&wƄ57= q]"�A���<��x%+))yq gRSk9͇4ryzlYca(&<7sz|V$(Ќpߓ9uα{zaҵgHdαv>?dvԧSKD,.O*xI'~TK^%AwPu'B+\Gh1v>WA0_B)>;j#YzpT(r}/wI 'afnmyƕ^=pR$V+>ou=&w5!z^0wo / emcs1 TF)JvIdi;vgmׯør3U1DJ7PISILlc8y8E*u}˹qrz~l )1[F��_3._5~8NTe�~ "UUU "&vz5C*/~.Dx#oΧ+9@2cS'=2O1qy;?2?8yp\LuP, =8-iYŅB$mYwlS+?iffƕbEoZzu>DǍ*^鹙1񇋙H<[Ҿ $3]쎋OeأPE'>9$ [:fdw=G&9j~QyΙ է\2`ڎH]7x8sSp慞vEޱ9J ��xƯ~USѣ~ [F_{zzV*+|l6̡#y"}}ӱOCC(MFASûC$=FG/|TTT*E+]K<H(?-b:-�"'}'+H0S#eټpu_,xVx9WS%Ӗm޻YdaadX:->02 o柌 ˾2]]AV*]p ]l_7B|@dܭa۴%'E&M?_g8ghK@M,^Ox8ssg>w["Vi_??��~?9HRZ-*7�o[,&~+>5gzxjh\"^7N=?\(:-"v?THzo;QɾaE-+z3pP3ћj=>q0DUtSg+K~yؕ,:b5ں-Qs.Ǡ@ [ȊEK.gQu -,6,VKD_9!z~Jj}mc:rS 5վLt3},^g &;ߍǗK{+V rD;���x+DƒTq{Y{D[[[2N_?CRu׾ȞۅKVR_>DP1)g:͜{ f�x z8cMU=wuex)Ǻ=f=$/}Rw{pB'wb4LC` χ+'̬HD;,i Y.O% Ýw(AR_E7pf�E%S!B[ibk*jz+{=|V(\N6Z%&-Pݫ_.zW_#){d]2=m8% Y03oYg˻>Ůgkg.:'I;`z9^Xo]}D$>R5ٖqTM"bK:f.G鰍Piֹ'iX{ݹc /lGUѷVH y6-L]���-=)`Tp߶i?M/=|r9m"q_M{?p~g=3}ѪsUxdHB"A�BIPQQDDTP!2fBfM62)k}kg)۽+{H{wy<MJOV\A$TbQ* d2C[p-K.Y-_qspbiIyaa<OM<.7'[ym7%irN]µ#y113 xT%\jX@l +QԶ9S89&/x^YBrjwUwg ^pNX=*k"]p6ٹI-nsׄ L; .O J3^,g2E݂d"nnvt%5SnOE'g~ 6wfoOe}VAmi0Nnr0[*p"ls'U}RJ5j!^/-ɎɊUq)_)t$3s噌:7b��難~,8\3ݳq#W<̞ɚt??=<zZ&'is?o""�Z9V($喗%ֶerh4`MjGFF;KHn}9�;B';jOh��x{ᄂ11}k:6}WtdLKl۠+ގ{\LS@wd{wyx�_fޔZRP(6]{ppPדfs86k ^Dӛ doD)G7��w~<hC4ﴭ57in55-2MsjPu{]kogDp^(Wp(-۞ ?ED�×?WΒ-oNVV+qo|}E~=>`wE @_\ ��x4?aHuL}9F V&Bk}ciI\o"߂nfw' /ED������x8<<fcF豿CGsE^=^D�<�����oV{%}x_:c_8kg4Io""�p������=<H lϗQ{:p7{�px8�����s/ᴇߔ.YO$=�������p\z']\?ͱ՘|U6EW[cj (߯=�<�����o6^������p��<[nmY������x[<>immGYQi)�����<�!9VUU۬P(3JN����p�qlkk$/GMII!ɓ'ҋ!)�����<�x?GlAҐOLL|ח/_&*׷.:q_'Dg3]Ae ec܍ֱ`vLqXATsV49㩢#,WC>d 6pYƉr?Z>.Q[1`����ÉfIT*) ^bE]]D"zpsi:aW.v5^~<}cP@:-m8{[023k3ė'q]N 恶&Q6����×juqq1-ᕕ_R49jaW k\8e[F$⇅84amo:q8Y{*>(H\6/RVTJmIxvsc[J,ŕ3:h򙉷9< ȳMZ.v_LرM[a/؂l:}A׵d)Ɏ(@zi_MoUzM6꣦;+4,+՜i`%-Yg)7k算ΉNȸ^ՃtxZ�����x[pJ¿ZW\YXXN9 t6w{2/xEӮ6Dl,S_rvXY[L]ncH^aqS0;퓭QZ|f¤r2=' .x>5zE*ݴ�.\߯6YȅԸ1~$$T4my2ycûGf|HVvg?NìgrW syܔC9Yӗ%y{cnv6m���_۷O|ҋfW�}Kӧ?~𾾾% xcfq;59dYjUΊY!5s?ȉYSK-_ˈvl 1CVEOO!Vm_&t{lRb�ߘpAȜoZ�ia>]Ddhȥ)wѿH{ =[N(3O:l.tdy^fϡozkΙDv3é)q���/O? ^ʼnx/q8>|?z9vn�ÿOBhJJJ%w8^hX)x\#$Yјj?_ONf$NjQdCQSm~&~8u/hc_V*s3/3L 27M tL^Od_. Q2YBUr-#',yxt=f�q_cr-q���/?Ax]]]epMK8Y&k~)DkZ¿ "?^®XxSCB/Y"ZƩe]/`2:̰[*j\)d,bX~9N�[F{<|(dPMK \&<]FҸ=:26sO{~bߢEw̐tNH~F']2/���pxb'S޻?>bMߑ$z-};;9<N(+HԣyH?ܰ^&;9)\t9ʑ%YۣslժUgFG'LNNow&_uJZ>\W-($Wcf''ꟴ<wXof.nյFRäV]_7ßN$2Y;9VU7/ ssitέ&pM<|y-f}z);mõ'NPwe{F6q4ҟ;{Y E=|yMCEþ8mplg'_���5K<<q3&䎇mlU4әmVι&g[$ {_*':8U[{.v-;3Rss0f]S'P($jZ֓0/W v jXJB0LDSß#7\.7L$M}lWM>#MiSuڑiمg=Ý7*k̪d)˗$dlyij#MY4-K.Y-_qs7_%V#4:Ck~sƟ \YP5qWO\qq{[Sd ɩiߥW] fp��� U|Ïk{8!9x䊇S=YS=B۳ M}9;<9rWĊx:] :5:=ב+y jk9O73"3)Hv{d$n+&sr zo[/0YrgZ#s}᳆Ңy R?Z)+, ijaDLyYbmmmKK Y&G]FCԿZvdd7|ɶc,e3Ϩ|'ɓ|Do ���ᄂ11}k:6}WtdLKl۠+ގ=5O^ m\ZT#DTT5mrV~Hո(}FêSJ$H+xxP;w؍ ?k}9Mmw~k@/-⸌Ps}s[鮖W-=zSjJux_BtA^O¤Jcyz =|9+sUzYݗ-d{ar[{���x8<|=< UӴӶ\!\״41Ѫ+Beu=56,|<%ҧ{#Q7y,ǪdE6u3 19q[槻U'rtՁ X!5]DlrEa0MKer(l2xxGO>UEEE뭳`K[өjJ7pfe?,\w~v|/֋Vw,m{����/WLxD}eQj+yu>^DZ4V$?ޮpo$ "~>51,+O˽pXI(7C/]v{w9DtwxoRtn.w $jG������F��1JP\ ������x8�����<��p��������x8�����/TxbQESCC&3�����n0,!iH.;@ > ,EQI3�����pS/!)u#GGz8eځ!i>�u֖՛@�����x8<@ߢ>immGYQigA�����xK<|rr@ߪgff[UUnB((Ζ,�����Z֭[gϞ\G K~iLL 9|0>>>~є) <yr q����pJuճ.VpV=`0~�>11QRR__|x__ߺ]sOl+3ll콹yj3*>bq?T4m$D?gu,z3V{���x_~Y7p N ﻇ+JJ«WXQWW'H\",w5^×؂Yax {o&&6EN+vKyN/zryz4c44ON���_2G Z]\\LKxee%Mouy5,v᝛D&stM27n\'KzOeREʊZ<Q8~/xnVwlKeyfCG osοy.;-5)A&gݛk]j( cc=<_6tk9R6Q8f5 8PH~ف:_iv-Ŝi`%-ƪjժ^ KYRqڡE5 ���d~ݻwÃo+WS^'+sv}Kt2^lѴ䧍;8[(1Fzh%"wp@E똀ɼnL+;"nfâ}5J@{LYTsU:aROէ&u1_HÅ9PWcu8FڏuSntGt !qGSiFwe };lq|Er;�*���<< <KRO>M$㔄-Ƀx]vZL73lmGqA%PoBj4KZ%?cɋ &ujL{L)j٤>rK112AȜoZ�ia>]Ddhȥ)~�$7y[2ܬ|2=[N(3OHDݗhC¢r5&MLlrΛ����x^:hJJJ%wNJ 7l$ɊV"}t2#9^,"˜m]zq^ UP YCf/=_&ft癜5Zdn>m&5]JWsh5Ot=,pgϫ:<[(=FP7/9Yȸʲ[ 8���Ãp?i~״D?~'N;u9)pl,e=0 g LfحqwVGEuX1S,n xxxxL^Ã-=>g2CR 7pjN)+On2Ͻwel~p>iH,4+ô����wzTpc <OVlejsH֢Sv줓DYͣ¬مíHjdҪKzx)\&+z~ÞIl%Xu2y >78g`ak=F7ZaO)m>$|sՁ;<@ͩI*6GKߎwe{F6q4҇kOƴzYw^x]OOIv NYvc$vx&u ����<|*;8bQESCCv)8 Żu5[Vrݗ+6:jX,Jrzz4d2EG*vo\nH5:ٮ%|.GӦ4y #y113 {;mf1vzY՞,pÝ3y҃mWiZ̢5mYrjԍk/xjN3Un3K9OYB. ,qѶ6"bmۼ'W#4:/lT;l+yy���x8��|$%jaDLyYbmmmKK Y&G]FCԿZvdd>Ǽksf)yFeWL؇}~R����x8��|t^]])}J:/ZP\m@^'ap89ܜFߪp=۬q2=�����_?WΒ-oNVV+qN#y<WכE pI7=f"U&p�����w�����<��p��������x8�����/�w P(mgp�����xz��ȑ2H�����ͫ�wEVp�������%pMHx8������G}nڲz9 ������Qڞ{_& ɿ﬇>immG*f0p�����磊ONNZO?%wɱ*gfBQQ2<<-MY������n0?uCɚwǏ=B;%aݓ'OC6΂�����px8�Ӆ5OLL|ח/_&*׷.:q_S$>yg 9_ d ec_}hپxԥp.Gm{<ELulI^#ˎS=gя&Kwe4^i7?9PF"d01k^xj4��|>Y_ן7U2��ܗ_ÕJ%%+VH$UUUt.ia0-Fv5^.zcߒ^Yu(짾i?_OH-7_tzȄw^AzW]gÙ!7uKuShthաW'jN641e.d0B{—g5NYpI �� ?U );)1��Vi $Q OD/k2''EKpeM"~XXXxڎC9:S7Ol2{{De"eEU (]n`?jw<7;IJY\<ɢHeoNKMJIY&}Ã! 8Z"$v{7_Yv<?Cp<ٺMԀ0vN 9_.CdҼcgp0"5dY1WT@gL`0Ύ^%r/K~6c\ ck;5Td[vֺyIktû3R%&4(3,jiNbB.%K⧄[5q0.W .Yc2Mq2 3}eR#x<.:}*omUVj̋g|E[M *oL4 QJ��zxݧ~zK=ljf߾\}V2< MQ'/Ko?|Ͽ ֟!ۯH6+~�{8%| -+W,,,|s OW:iʃ E爏yNƋ-v݋q'bͱX#_rvUfpJ:&`2ﺇ|SE~J"nfâ}5J@L}UTsU:aR}믬kUFq:`cfMgzdXAMi2d=2ΏI?0>^UIv FzvnѲ.0SW+c${QU#$td׆F6j򬡗=maQ>+o7_k;ȗpzp'b`ͨjoxWI64k|#PnuDe <G>)PM):|q4#̲xg篗nv)gyHNcJc?*%5��|I?sW <R]'==%/9?K֘H[vX2sk&)E{<|rmCS޼5 ��NKӧ?~𾾾%9yt3ָ5f|d/nůY!5AH?ȉYSK-_ˈw e8Ү'/2|}=Tmi_"_??'٤>+2ut}#;n-~ ]o]2wW\u7LnEoZjUyuSpc(0-^<7$۞z+H2/~ vrBxby;M[F 1kjYT+$,fb$jح#fuMC{j&>+S \T??8ne 7<@|c^uu];wmJ��!zkܻmw<gg}>ͳ#f^ʟ.m5{Uώ|g_*cOĴ�ÃܖN9<<<88 hJJJ%wN=J{})x<ސe1$S#4HȆ0&IԽ裍|Y0^FL*=U۬= zYPnώ XlzېlB7Xݝ+cSkSD/Z ZG |j.4ٶ�RyCEU'详FtGCuɒ(gWG8 "vs{Vc?#Afe0׍Svd& Xaə;Q>WzӺ!!m;'Ol3d=);�Kշ{|q_+%��>L1>5zH}ޤҩ6zſ>駟NM͏O*o,%N9/ɂ?oȎp�K<$rtZ~5-_|Ǐ/qp!L!=(YZ˸[!&zx 56Εz W:Êb1w=5=nlǍǍdzZ ZrU>Kű[\7_v]vs>8N/c[wHSw70 n&R(-+og%PێYc'SddcM .R260^Q]7F} wr$k;Fl%xI5,H3Ҙ)plD37;}8>WzM|H۞ X_Tk{ɓ<3W=J ㄉMjn<c��pmSܫ>g;{{ßٗSuuEϿ:��={&8HpRĺj%-.+>Q/H*=6:-:eN:O?iy<-̚]8?ܪk n& mxt !Ɋ&ˉUL\<�$mlTlq3jzp]_9ZuӠ]om! {8ou1\ aȏ=qYF9Qe6$4w™cvI}{Lz[x&kψ},h# uԐrvIuóz;0O^ a ۜ-u ; 0lPCJ2UOq]V.Gj1N^P2L]Iq ۭn_qIܣ}+IW$U`z��az^{/5ç:iZ8]ٟ}|l!yRc0{r%M:<= =?|jBCSM?.s��X_jk0/W 'pXJB0Lv}<<R{rD݇v_ܔ(s96[#ɋߘ]x6s<Ph!m<d)˗$dMM jXV>ʲ;#xxu3Un3|8<zd ^pNX=*k"]pVٹI-nsׄ L; .O J3^,g2E݂d"nnp䛥f{CW_!{{5{|R@,+>7jKcad_~/zCaT$Ee5s傑U0,NU zi}V/@/]O)VdKBN' -dֹ�pn0sm?_/!*o45"]oKfv73Bɏp\/Vt�9 lՉBRnyYbmmmKK Y&G]FCԿZvdd>Ǽ۳sf)yC<QI}x']]eMe ~ek̆ < ��>\K<W �՛WT զ ~zrlcy1oy\kt LT/[Pa:}MjW4HlrꞘ-?}��<<v ;%o@0��}|򫊊[gjj%cy<WכE pI7s�/֋V%.m�xwE @_\ ��xB}_~/W,י�g<������������p�; <������������p��<�����;o�w x8�����=\dRQh(H2z:Y?]阱,3'c١G1k6@Q Ez*ˢ<eiKQ5ᾞ+nLdR# 7{t&dxcqBWە]2vh/I$V*nQ{?5LKǟtIeubT'kd0MGI$H9[įTi{)o;p�����xxaA@^#Y|~<V@ >xu֖՛@�����x_/سs H2xk[fU{@֊}8f0p���� x«h2O ^'BW coUUUκ <dxx8[ �����<ܷ#<M?zhJJ uO<9^D8 ����>11QRR__|x__ߺ]sOl-hWw~I*-`-\"sSEGpY,0*Ƣޝ8笎%^O}&] apãs4=����#xRzR$zŊuuu%r/k(ͲyxW{zy7r^l̬0VF_݁D܄in)oÉ\ԣJK\{ьѬӌ>?8=����#xRzZ...%K&G7ɉqэSeM"~XXXxڎC9:S7Ol2{{De"eEU (]n`?jw<7;IJY\<ɢHeoNKMJIY&->$n+H$ɹލWݬ(8\.OnӀ)vN 9?鳣u:YaNf4afɒla\jUF}tg,zB8l}ТH���dNI7|CKʕ+ \)ĕN-`bxB9~O\T%:/hu-yk#SN;8sjut]PvcH^aqS0;퓭Q}f¤r2=' nx+kliȞC5E93%fMgzdXAMgQ:_,m`3>$ۡh#; >,Qa/zM`0H9<yz~\\��<|<ӧO ?~8%}}}Kr ݭ- [T#ksPɲ:8fŬĬ)饖eDƄØ!zy"ɧg6/EZ6OxpʲL]!@W{nF]<OPѢܟc7Vu"CyUWtg usRIs{BXTn/YMΩ���p_h4%%%ۻT'{{ c Kߕ]4Bh7Y.'M'3(()E׏Em*]5tn2efy&gMcҵϲH'r|vh5Ot4rc7;{^Ց.qB1bIYBm%U|lp8/����ï ?_<i~״D?~'N;u9)pl,e=0 g LfحqwVJEuX1S,n+ xxxxL^ D=_YjxxXy8vky?;_hoŽv=?\{~"FҸ=K>ʸC{0���x+W sNCC<6@ ēuJZ>\W-|.,^Tz^mtZtʎt2(ayt[5p~UILZu}IP>t:EdESDp*[I&V`{~xL^66*|6Y8A\tCp~8QђcF?n짣|wlY[{/3ٌ />\{D0<5[RvhҮz*-Lcp&3[���~=ǎu8dظ&:@ >rjZOV\A$T)lVbQ* d2EDzG*vo\nH5:ٮ%|.Gzh"=v$/&&~cZzfv|p,CN1s._Qw7K9p&Ϊ5b[XeM<<ٺEKw̙*Ht~nQ:_,-3T%X̂wmk#"ֶ{reXa0BKv</aO��� :_;\LNN޽{ix=\"٪ږLZQ}yY;R6;<ɱd˾����p~/(++=|ɓ'ΜngW5v̳]Rvk} ׇ'mvqjf^qhhlϮ4*C-Q> M,y26e4TK!�<zSjJux_BtA^O6X17<5Vfu_q<����5gNk$n9?do^/⊄qM,PΝbCf[u_GTԩM'6RQ<4Po-ڻC}C֮o~ @|�'h품NSV{<+ZStTw"~X$``3zߪ|{Dx8����<ԩ5A@y]7ƭ bclJe7G^hz٨zt3b5N59N6i?wP1ͣج2~OM<vQ{g6Z홡B#&lJTp������#?YuB$٢f =,8_<x,uIi|Z$nmXaQrzu|rބ~!%ҧ<=+s-j`f`Y*[G7uJO.z{Vq:;C6ǯsuI\ �����xo?^yt"HE];ƅ\)X&-[>kRގc.*G6hqg}[Rmٟ,T,.r8k<�����Ã#Ƃ${=5̪4;1{ŧYe'?fzdxRQT&NO$*2L-gUmgonxp5(�����Ayx#A@-neOx_[oU燇&nLioZ$̲M?Héݞx%6;7h׬;HWs<|*x8�����`<|߁ς$!GwE~^:3tşt %!z-G sIV!-xv~ 4[.*CU%p^Տ6It{7𦆆I �����- 1cYfOƺGuIz8[jp_OOwc7^a<<*z㧣F}wN/_=:l2<Hyy►s#GHJx8�����x< b<ܥ/wnݺe&r@)�����  @ ~%IkkkE>rΊJ3 8 ����}{yA<@}BUUU96+li:΂�����p@ 7a||ѣ)))DS=y@z9d,�����#x{DII_}e}}}[[[w=|<wEpw<-`-VGYӾV~l_~RKlw8ˣ¶=[:$fe۩GxX+U.0yJɁ5!3)Y{PUX v{��#<J+VI$w:$[[_џF}ͪDa?M{iz:/Gjb[ԛ7F&ZkW9 .a_/vFL+CM6NԜ8mhbj5u]`g߅/=j`��x8@ÝbZ+++ɿhr~3ǃ! 8(}rn7y5De"eEUz d6QCMC;傌W\+oNKMJIY&pf@\[M;vA׵d)Ɏ(@ziNbf$ŎMzO52zx&?,,,<mǡ ޳QbdҼcgp0"5dY1WT@gL`0])z(ʽ,dir)/#MPm[%''k|& p;LK³ʚ\ߠ$`$.5:/ϊ ,8.Bnd&¸\8g5%>ωJȸү6mKNk./㲟f[jUƼh}Vg/QՔ ƄM2oM*��<@ 7r7pEDYqy}\mdiځVyp`liFG5E/fMgzdXAM'0\纉:aRK=\:_mN qe=VcHHhڕIezE*'b5z01<ܔNL~O\T%/2d=2ΏI?0ǽ}t'gOfܢeť]laڝNV9dI/l ;>ۊd׆F6j򬡗=maQ>+o7_k;˭빢BjhS1[ZfTifO52CvPnuEe <G>)PM) ϿvM,^[x}Jn/ 3;��<@ >v%D?NIx__ߒ<=<[{<'fMIKҮ0lzs7yMS,zxN|ƯqtV!\? 47&܃!3FcL7Ziܲm3>bps>%wBT&7Z༏)Qq%DzynVI=e^v}d۸Nw~]NO,s'S{KHu!fM-KjŬQ,Y uD iHq\-gex}jTy+'lvoޙ^r}q̫v뿭wmJ���G 5MII.zL~t2#9^,H$0&e>PnwVd[j0lϹfy&gK=NDgE6{xјXGV<obnx)Ƕ /Fw'*/1:2hצ]_ܵK\hmK ,:4>_QujMwT>+?Z,rQ"Nx|Ğ՘wz uԣVXrϕ޴n|HE }OJ<@|f_a?#p+%a�ï ?_<yۯi /?~x ONk𬡓 5;WJys<<1^:<V.Z5z`gBf<u9)>Wvs>$;n!vΣ[ ҽLQ,ZVIKΏO Fƚ]elYad2oHw>\JZQjYf1S L?7;}8>WzM|H۞ X_Tk{ɓ<3W=JN8Nv3vy���orwihhB<|ff|b_}.')oc§Zu-!;q3jww%Y{}zO8I LY;l'¬YgQxARy)$f'<<`ܞQ3V5s}0^d儳FMڐЈ^&ؓY~L֞%?UY&GRiY!34,Buóz;0O^ a ۜ-u ; 0lPCJ2UOq]V.Gj1N^P2}Wy܂vi>3W=d8Aҷ;|GJIj>X/+��74\ر,DGGu5[5r`ݗ+ww;nu^[,JrzzZPL&'mgv=i^;1-=3lk7)wG0l];L[C:ß5mYrjԍkxc\49M9?n7T,sID݇_, ˾BŒcMı N}vn}DR5!gy.%B63rL6<KLQ Y[08\.o/CW_a1Iܰj<-huJv RIPrH* upt{_>.'>+RzWť|!g2��u(--v{n1{V3DU' gffkkk[ZZ29j4rj###DqKHn}9�;BW\Oh�֝EQee:yę35yv֢zB5lsiƭQW?6==he-Q@Xdlh02N:L|뭗oboxKޔZRP(6]{ppPד#fs88׶<[57&u =R\G;o��=imd9燌E\0iX?ҐE_,GV&}8>h!- vx>f]:m#Ῥɯ***Zo9$jj%� p0: ��:&H2fָ޲AL}M`UBJl(o =K;Ntݏ=y:2w??crHy|wbqZK�Iak/a9tNmIJu#c4-f lPzϲHŮgj#3=#@/ily|v-LU̳n~Xɱy&|yi4q|+φ!Kp������#?YuB$٢f =F-OOMf4/f.lӊnZۉGEڭbw"8h՘cءko{)+3n ef;˨"Y:63ZA13x0gGn> gd+X?>9oj2m~Qy8G M\~����+~Ddǖ#w"6G\\)X&EEE~ۮ4=e=+[:P܉}vrߖT똳qiR)u8{]ʺ0lR,RL ,VL? k"TC }ix{*G6 *"{#p�����xG*IJtĮmM/;{YyxӰ{ d!sOegl<{xt嘸yCKHBCx,-#è>}nu8f*ˢ~\�I6mdz7����:0$PYK~s?G-`wٻׯ&>YgoY3uy65 $i.@AmضiUFZ xAA@@I o 1ж<Kޛ[U}yB\Rqev><#0= a'8ti;cV.9a&5v8RW& HNjiy&=|~>|Ν|8��r?qKoIU&d4,>/]禪T;V_rQŅpnMBWr=%]Gyl=O;_]Q#S*mc=QzxƎ9ǾSRG⑶cnZ*U __InEuM6JW%ן''ovz=\\Ou†d<Q'pz8���=eߚf]kBW^3ʌ?-8[ho`w ZS՘~D˼U]m_?M6u20G1>|ω'Ī ?4K\wdsH[mq. ~]}}&z$Efݾ:;y^:��X! anB=���ËK% !p���WËH =B���=|=B��� !pz8���B���=N��@'z8���pB=��@Bp���|=V---:PKC ��@_l d2755eQ!p���נ75]s\צ6j4B=���ƆpʎL55B=���:s8%b/;s…+W.7'$TfkfU\οʓ,.q7eROa}voy]ScmWqu":g=60nl_1:ސ U)23o G5xZͮZ%��@~Jʹ 8ebF˨MS~28vkE=\fꍎyҘKx[ [vtzNuOb7?қxxr#ݣz8���/:%8,9FnoSMn<R*j~MB_Uf/kwv/n35uH=)~;=}v6+.f٪nQyJvtX:Ϧ,N鋽S2>/<Ј>x_ybqNVI#x&жK 殟B7v'SkMӋ1Ϩ.|rMU=<Iuo41h^p¤ mK|4LB���=mP]e@YqKn=ml}ۤ&jm{޷I rũ㳃'gGfGu2 3-cӏ˗χY= eܟr7M˒ѥ)(=|U]{!-);zp=<M=/74<)$~׵۾>Lkq6aŹLƜNjrݍ VTf&*ɴ[C>!��t?K峻?8ۙ*~{\5_vl+|{xWW^NjIbϽ96f〝9W1m{|CV.o]\cK�hRaa=ίn. Q|}enNſvzloZ0wL5E8 "+TJGݛ��@\1.8L|Ju`>uRH=\] jI5?|>`D<OB^URy_e|L%L3C{xmEKmvo{xq^]izJ<D`h #˘c%UK"+\6 ��8Fqf|"cT;OpXggc^Mk2ځB;'̤6Ykݘ蟣Qo};G=^HQ:^֔ý6zi><÷U|ߧ.v2m \)&8F=Yoz&F&GZ|;pB���=<R?qKoIU&d4,>/=1N9%şmWNMYQO^QW_?U,<L~pMIrOiSrYrȟ+iv?Jqۘn? ԮD _HzoOK۟?=<N&+w<{9xra7H\C}u܊ my1XمL5���z;=tXqXؿ[s׬u^H )k~x.)~sݭnr:,#m˯EKm1:iM?|XSU]m_?6u2y}=F`?g>||9>:Ӿ^zm'>#ӧBq=h__og󹶉e=|᧩4ԦeECV"]iIƻ}3t8wtB���=<xȐ0z!���zj{xqIѠ0z!���zj{x'B���B=���pz8!N���=B��� !pz8���B���=N��pB=��/ߊE*cciz8���kÛm֚L̴4J!���zpΝ|t:F@��0NYQq@��^W_gDegT\Pu愘j]׌qެJ7+銕oGݮsNX&Gگ_VVVuose~Yq1ف௃u#qcffxYi���O_R3-8,kv}k2N2j}Ӕ#lRqn~⇭er\ƌ-8|L5+-?=|jGMIX;=|Aߺ'z'N��B=_$7m*iٍb㲸HY?|=fIrMU19Eҷ\:^hs>״h0 >ؽ>qq$r^EZ0)~;=}v60si>\՞/H}́^k.Ȭ扻Q;d^I|m4+ {X$mlh8\NC?سsG���~ 8lIRqft{kjd6O_,LZɬZs\\ބ(=6ִ1v(U_ik[hIo9Ҿ=#uI7(iqOͯ/·H 6̎NeIgZƦG1&@m&FNc{Z]&v_կLLݳ39h ]y"F7jߩ̜?2햼_ZO=���UTNH [vҬJAĎ ĸTY|xo63'FޗvH?Ohדt!ѴOG?}X Z,XU&~ўW-txS;:;iAUbϽyboU,RW}sίrvaGXNݞ-GaJU*Xݛ���?b\qdx] ɐ)ޙQ9uURd`4=e4,О=3aݺ̂NT{Ӗ7Yl^oa9%şMeS2|>??a{8kIDc_8Om[|x2! }���?8FqXc&j<Giv{l}+?|+ɬ(=RW& HNi?-T+mOJ666[=ײ7{S.VfO՚99̹M.{N[B\Rqe+G:,sL =��@{%^xKNb2!ydy{3IxŶfݣKQu^xPJ(jy0yM ;.VK_'֑u =M $!₲' .w]K?zH'6.^,(Fцlב{r[Q]S#YuŽɴy\N��^V^:,8,kf{[/-'3v7gkrB#[v_:\⛛5u6_ޗg_gl>65A( ;)jl{}>Ã}~1U|76ٜ.29V[yԽ/G?{w؝iʟ;}N,]^4dH%Ixo!C?xg<K'p���?n! a_| H0Χ)>ڂz8���r=hPq_r9o~ !p���zx;pGlQ~ !p���{8!��@Bp��� !���z8=B��N!p���z8=��N'���{ZZZt:]qa26@��6=NmmdjooojjLK$B���Aojn ܹJ'~!Mmh z8��� 3ᔕ-0Lkj z8���uupJKK?^vLŅ UW\=oNIu8=LͪT,O>Ƈs˟;~ߦoӷDiJczP\}bt|s?*&>"^nj 6eZ?!p���?R|fZqXy׆\e21e)z߼v)S6߳k՚rϛkq;'w3%J%ƭIwg_UK^QiзY��zŋNI  9oѻToӲA)[x۴cLnf|Lul-6Yq?mzbs8z=_=Ω};=}TC#CK-Z^\8}r.l{]rMU/ulLVcI#x&жK` %mlh8\NC?سsGp���z/TW$-;iV*!nҌR]@b\BW>d͠v9F +:?2޲s~^*Ur{{g|G׋_7̎NeIgZƦ?h7j512uʎ}3Gz}y}Upu]2J9e_ovilI|(Uik[h\2=;e)SL鑚ЕDڐnԪSX'n^̂z8=��'TNH [vҬJAĎĸTxe®MO=ؕHMqcIt|ˑ'.so28vJ7*ܛcc>s}%vluomم=ޱ4I=uXN^n}'$<ynKt]ɱQzxTrvC*UxބN��"=$·'e_<9xQtTHu =W|s]c-ݛ0yC }~##q6k4=|hbdizJOC0E.=#NeV0vCz8=��'H  {#ó3Ɂwz)uJe]ƒk$aᕭ%O'>-H_>6'?=990iKjq`KYږ6|ܙr{21_GrRoϢK*z%Hsg2Np���z'O,-8,[rc #o7~=۽Uo-/fȏz>]vc:|V1UJ~0߁;ͮ%6K'6Y;z?-g(e뒓F?|m$.s^NoR}]8CȽr+k*Qzx ɚǬcgL5N��=tXqXؿ[s׬u^H LPbOݛ<n;S7<P 7}6nulNai-^{oсϞ]<v'c#..k`_c̿-]~=h__oġ5^:t]zѐefh_#m(Ixo!*~xNp���z<zdHq=a%!p���? J փmoפxdv=92B���={xkY5Q��=B��� !pz8���B���=N��@'z8���pB=��@Bp���|=V---:PKC ��@_l d2755eQ!p���נ75]s\צ6j4B=���ƆpʎL55B=���:s8%b/;s…+W.7'$TfkfU\.9+F9K?.٧|]n5jH˦j 6ejO��/_@za5WLhilϥ7񖼕W&Og2}/F&O+-?=|Aߺg=B��__Ⱀ[M6-QceⷂW_q<(c kxdu'UJvtX:Ϧ,vuW{w{S#=5W|Oi}=ivvxkUA^;d^h0 mKk` r!p���z*e'J?M\aV*xwyץ!~A=<>pX?ݟr7M˒vkX#S1pH-49SŹοik[hI>}oz&'tLF; u2햼!p���z_*'$-;iV% nbGnb\oY܀y zV)ܢMhcrߜkcxzNp-z:ž֔[n}݁1\s19ִzxT>;M=���~q a+z[1f,{!HL#2t"u2oh:Vצ_?{{xFch2fWIQ`8C{އYτz8���=t7Ö7g5;𳃖ɶp:|~c3[5s^s)nv= 7~'R> .͇+q$'5#g~>|Ν|8!p���{%^xKNb2!ywx}_mz}WWȔJqۘnӁN~IU'6?׳_ uW%׍''ovz܊ my=1XYB>xvרB��_K  kuy iAˀsƇKT]m_?z6u2pfYϟ=xNku L]63oy׏^gl>~>h23/u֓l7#á|3B��_xȐ/?c-z8��� J ӷl_b̮' B���^t@b3~kY5x9B=���?B=���pz8!N���=B��� !pz8���B���=N��pB=��/ߊE*cciz8���kÛm֚L̴4J!���zpΝ|t:F@��0NYQq@��^W_gDegT\Pu愘j]׌qެJ'+wvnUw>uNKuԅ]<U{l`l / [ͮZ%5z8=��Wj%7mخoU)3ZFo_N\ĸ'ܚR:-:z6tNukz8!pz8���>~SBΛcn6۴FcPpx;qV=a &,{wv`hۥ kZ_O].4ZUX$iCfC[r:Bp���z/TW$-;iV*!n`bҷo,|C/OW0JȷtZfgn.w鑚Ź ױoZ0sF; u2햼j!pz8���=O@YˉqU8)~7F;v(V'e5ۿ99xոWzɱ*YtoBp���z\1.8L|L~rIz|LboOӝ*;j#3<-ikwT?5MO C0/d4yBp���zOW|#8lyL>|xV1*e MzwV}ةyZu`Õ8܃ sg2N=��@{%^xKNb2!ydy 1F]‹K?e >O wwg՟:RoޚnX|N[nEuM6JW%ן''ovz=\N<fk=UuBp���zK%5wͺ<^lo@NV/~ڡZlg&盳 K- ~]}}&z$Efݾpy���?xȐ0z!���zj{xqIѠ0z!���zj{x'B���B=���pz8!N���=B��� !pz8���B���=N��pB=��/ߊE*cciz8���kÛm֚L̴4J!���zpΝ|t:F@��0NYQq@��^W_gDegT\Pu愘j]׌qެJ4r<nkT2' İ>y^GV>?;huznk*luosjpxU绒GܴxxoRAоv(V�ߛTqf3,l5j^z8=��Wj%7mخoU)3ZFo_;ͮeb-OVeM_Vo~.ٰzcjku|=<+8.R)[sy/1a2y/![s{+ǫ3/w{_p���z/^uJqXys-ަ(x J:Pŧou\YbCgYP!MMWXlcڬayŖ/nj?#mMI嶛[ _t\F0`�N:x6%F=<vŔ:i㴚' S>#,l5?P% ozҷz("CqwͲ"mQ\|ӧL8AOwv]i[I2z-c $��@_~ 8lIRq=<?oפ} W9>;xbq wdvTw*#^ O:26|攸{�ZXؘk?QϛLƜp1 GS6}@VU1=;CWimEÝ'o>v۷G=|E[_6H.;˖Rv{vu[:2I?}1GjrB#mK7jߩLieP���Y?Ke'ͪMX*؉qU {=z<=.Fro\WûUjbaso^*uJNߜ뫘wnNhA#^|ϣvL5ju8~c J;\6l ކ.=] ӉSU)_wd񯝞(Gr١r]znK|tA{3Wÿ;U,7=���?b\q 9\YPC%eF] jI5>h0"Nk4-|niQֶizJ| y5R\ Y>&nW--J;9%%o|x|u~l[H pY67/;CGڢTƷK<7'IGaH���q?]qЇlM xʐs[.v9a&a_?H]m)q$'տ&ͼ|><#0{xңlw-%Wxlw8lVu|WwEğ˲CT-K=;\$໐ӏ#mk~>|Ν|8=���?8YZqX祏$*2Gn]F^MjCbno?+nZ*4L?Xy釮 ډ'㲶쮻տ/!._*ON.@?u_?}ꏚR=nYM]§]Gyl=!w D=<1.m~zJsYv(Rݚx,R{˿[Q]S#oK<fk=N6;k���e/+/@5x]Җ%wvdu|ީO jG76ٜ.29V[ve}l.OpO~jZimG/3Nv6k{;O)jlzNw:m]+S#mW)j7ktw]zÃ|]PD:Ų"}}#exXt|"mhxK$Efݾpyp���׮xȐ0zOp���z'ËK%=��@_m/:\ 1B'p���W !���z8=B��N!p���z8=���pB��N'���pz8!N��oEҢ 4B=���ͶpjkkM&S{{{SSSfZ%B���=| zxSuk8U|> qm:nFCO ��@_mohl od\SCO ��@_m3SZZ"3g*.\rrysagezBLBkfzoVe+:bt~]IWɹ]椕T<od$Fjv=*׶҄5I7m6?}z8=���}|fZqXysvO{_ÿ6l׷*㔉-7MDɓebWZ~(1; = N��g/^uJqX=[M6-Q5IN쳻Yq1 rMU}njw8|i`|;R-6ʶ6d6Z.ӡٹA\hYOK#χ~|hD?5uHF{{x'.Ƥ\:'|q(uCoKz,k7m&}z8=���_rP]e@&+7}piW.~{`%{xTF<AtelqŹֺik[hI4[Xؘ3ۑ>i)ݨU23!VNݒSmg_.}Up%#m=<I7(is˹=q}!A_ZmT"`HMNZ#pz8���~ a{*q;'6RoW:;W}>RT͹Y~ɱfhFKI.=JU*[VHwAѩ7k.X@zxyEץ/xgm hܡ-Ӣo' sU)HWt=��/b\q·k#3C\ߜwi><% @7J -Оh5HKEa {e1JNJܕ֜\#{{xS7u<KZk-'>;=|EG���{銓o$I?\&?<Ap؜0�veb 8&`"?oQGY*xĥgwܙÛ';.hbdQ91s-Kysٱ75'O җ.(" Wz=��/8YZqXys,69..miP>/}%'1V<K_?UoKL?Xp19sra7Ru_t }ĥI^J<fk=o2mv^V nRJH_Qˏ/e\\wT<<Ư>㘿?|?T>LWÔes+k*QzJ��%a a[|=kf{[/O\wdsH[mMΗ'Gz;ϵEߔ_56muQZ6LRIƻ}3q;y^zBsSYu鑶h|-Jvgx/x}#v0(-\4d1B��K?=2$8'!fä[8X��@ J '|-眾G &���z;=py&���zN!p���z8=���pB��N'���B=���pz8!N�� !pz8���~+NW\X!B���MonnS[[k2ۛ2( z8���kÛ[9w_kt5z!���zj{xCcL8eeG} L&SGGz!���zj{x]}91Ǐ9SqBՕ+CϛsO<s.m)KLꖢ!;uM ]uosRZͮZ,[#FFH;Dz cffxYҷI=��@z+5BϛK~*/{Du)I'lN\ _e銼p<Yn_iĸãZ}z8=��i@9@OؾIV{G!s>״h0 >o?|=fI\P(97/;n;~׻P!MdRwz,61nmV\R=hw:֩Ƴ)12bo?F3J.x$j.M5'.no*,!p[ z8=�� U a'Y= e$F5m -?wg]S){|޷I rũ㳃'7̎NeIgZƦKSᆣ)rYrrV>ڔ=\鑚1'sٴ`-4$_׍Zw*3bd-y!B��~ a/L#ox͎W9?ڭ {QO=ߥ.]gU(ûUjbaO}>楪T͹Z֎ju8xc[ Xӎ)9Mp���z\1.8l {n1<Q׫J*rߡYtG޺?<Cn,rZsRp.&c4x:V߯Z&[izJ1C09x���O8FqG_vշ6s'-gf|Bã-<'̤e|ַo`νa=\/#9 `ܙ̇z8=��i'_K  9cr ܖ6 e<R!D6U)%'jJ :i/͔G5 Y\ɥ~LWQu'R,̗1WWȔJqۘn? f3ī3a{xnEuM6JW%ן''ovz=\1Xم}iF���OK  =o7D]JRovNs>x3ߥiS~شa翷W7b\E EY[P_Vt9ɑb;Rj{j땁yuWz?^4d'Gz;ϵM,uIƻ}3</���OxȐ8!���zËK% !p���WËH =B���=|=B��� !pz8���B���=N��@'z8���pB=��@Bp���|=V---:PKC ��@_l d2755eQ!p���נ75]s\צ6j4B=���ƆpʎL55B=���:s8%b/;s…+W.7瞮y\Aˮ4֛`7^.Wd+=#?;huznkWjv=*Chkqۜ}##VuxU FJ.۷nKQ²1d3U{l`l / �=���p=i a%?=t.mˁmS6lغp}YeE^qtaJ\ؚ}qP# IL,Ӡo'@־׋U<z֤�� @6yw>iJ?Oŋy/r*݃val<#״4\ni u}t՛R7_/u,i5O=1)~;=}v6tjwנs6 뿳~[L uK\puΗzi>WTFC-Ҷ~|hDeH?)>ʏnjwH<Y<niۥ@҆̆^%` rj'ß<y+8r5=���YfP]e@A=<UV)q(Sᆣ)rYrrV>ڔ(U׶M[ &BcNrrg]S)[V ) EebꞝGfGu2 3-cӏ˥̇} W9>;xBefW"LtNY{x؍J_U]1[=a?)=<ʏ6ִ16fE38GjrTf&ɴ[Wr<=Ocđp���|f=/>=wL>Ȑ&q5fYrߜkc?טwL5TR3yRAL*ܛ*RS܇Bv/:v}jUEjMO.}=<t+Tx .uvă8֬`JaR?,Śm~q =���_?sŸⰕˏΝfu<!#͇ đEJ !ծu[l /#Neے<⁈zG\jI5*}U{A? :&=<t+]<ʏ`jG.oNIg?]Rv��Q{銓o$ˎ9&:v(V|ۭgCOf&cg>\/#9{˿0\X\<&.,\J\Rqe믚sL﯎W>a}[i^<ʏo!#IlRisL���)=u丸>MBoݲ~R! O桫`v -nKSiv&FTjot{pU9qrv?nMBWr=ӥS) ъ_oaב{KVvc:|v32`a;f:JZ|%^ܲiq=@.۷w#$åu5(=<ecֱֳ ?6;k���^V^:,8,yOP&k7񷕞gu>=5#Rj{j)׶땁Hץ|89| ػF v0(]٫1!L@׉mK9\wdsH[mqoʯKGRVo۲7I50vٌ{vGm=|~~1U|Gpx0,3C_iIƻ}3p8wO?|]+p���|=ǣG$}IgޟT2<v/QM&Ӄ%��ϲ J "IV}oqiRw<2Rȗ}]۷~Ac>���q/:\ 1O$&LV9klivBÍFn- =���q'9mb.P���BK���=N {f{o��@'5fiVÇub0zzw͹�|Y?&F4avE=\,J+HD&_ꀈW|ל_aN=�`+k7zw\ N�pz8�pz8�pz8�p��=N�z8=��z8=N�z8=�W=�e2HƟ_㤿_r$=�9ASW{yvsowW1�zX̯wU=kM =�9l2ngS{g963540q+ItqQ-o�=|E^4_cG{-'k/-Ե@ߎ_XU45XWWY<w={õkoO:5\m~qfzy^mh1G/png¢o54u6mk7͑7D�zm_^i|ݵkM7n45ݼ7Ypq@<&S9`js8{߯]?3gqf�"fg{r)^0LlSioGzs'wp3l)rztw`vDNԌxw|L<z}&.kZ?_=5<uzj}[7wMO!z8�h+$klyl: u~Vong2>}jsGwa!k'͖?6=uݿw~ ~}gIW/aش8=RoGz _k)|s3󟚿j nxc~]WM,Focѿ}N0vadxVW]XvZ-귈Ulh{e6D�zmE_g̮K?ovݹZWxw`<OV}v3{M-&%omz8=�=<;?q{V=b{=ۑ^{ͧi_SwxG`qC* jZZێڹ:gt{ej*nEB� B @ʒ$$'$a INla|?#sNH {J$u;CBw>ЎHMgjP Mn 5QeSx}3Ӕ=.`<P_nn=2~!t8��:|>G%粳֠p5l%zJfxwF]]===Y :Lj�tX+>fAhXl(KM~>tAqlݣS/,Z|~N3?v. #2`};鲛hhr(sD4ޣ 9Bp��tlKɈ҄Tg?<Lݒ]cU|~Roq y,#dAunF._H)ع1\}[gw�>7*QZNe7 }hy\4 ZwZW@ɘ-#VB5wxZ[ZЊ]QU*iBACypMBp��th3&tx- ;4 Ĵ֖gӻv ;ͭ֎aGǨ+s4j/+f=W zZy#LŗiIu'׎G�:szeoY""%=ַjMڦ-~ hyuiL 8zvWB jn^ag{M{z{x7 qȈ{ Bp��th3&t8- B*8: \ѝ,^r_*we‡s0jϷt55Jqq3@Ռۮ~9[y,t�Dl{Ƽas<~]'>_}5ĭ987vKcMBp��th3geùA`pjzg.wsG'M]KhԞoR[Zɼ~_TU~=?]ېY:# ko'K�td!ͧ<�� ўf|n2|m6Vbq:j<[n]HɈ.>pWX38ץ^i蔴*Qr?N[㬋S|wtu #B8fmH^ ,,':9 ��A:=g ó7[ښeG19Y8\|@O%_)dI#|vvJF?#ia5>NK]</0Skug/j`& 1 6A`�@! HptdʼvE"\ZV;sؚRUFI&G,;jQ{;$$䪚᫣¿k7MPd.x[~%92"f}쿚uwG۷lڸ&y7J|=@rB\LLL|p@rW_%'x-ttZ0iӌ7;>ry}sUֿ%Z=w~|΋#yۦ8:�� a@eEQqcǾŋ/jsЕ.<CK~9e?^[l o1YYo,.ݓ0P/pTc/9hYzLhCGKXUۏyoȗ&zTNb62巵dޚC_XW(gӾ/1q8-I qt8:��9ƿ\ӝS4EWyu]'$$.Yč-=eCx͛sv}*qw˩_y&5"/ uF Kugr_Dzt XRoBC6ߓ;ãV;ݪIW=^atμ=o'Sn;ít8�p a@=ZܼTwo,˔/"Rvڔީ8N':w[5Cw=.|MkcDΏ̸̇o|}mʵ*}u[Lgʚi゘1Y~)$${7͌o\xT*k3-ǥOcvZл0 Sw;�@dc2YҒOfٕ*V>U%OWb|tt|0^|xKu8je}-0w^ָ{z_l :|q;G=}+w;|���u\^-(oikp歌&%R9Oÿ](dc߳8jKF5>?|rY'Y}�jaZ Y[,UҧƮ-6qG- )hgFK1GN)ԃEtx׿v`p����Jڔ-W2/VHiIc4PĂ+不0YO m9;.MY{]͹VDErY w<blH[E0ƫ+^E2^ܲV^غe^l,KIC-:G;6E^71K{Ww|7\s��� ;pJJYyNFhиĂ 6/}R.=.# �?6e?_�����P~ccCpF9ZW<I=)]gu~0tUe<7G���|Zޒ;);B8wkJe 2?ϋ_kC'ʼ#콣Y ����t8.viJUsSV͉ҟ t8 ����tluHxE\RXv)掎o>S_? 燣�����A  MMMjd2MVUTM\ �p����E�:����pt8�:����ӈG�:����YEN`@����:wZΟ٧O-��:����p�y+����B�������������p�������txww7=������0 *Z{ZwJ������0DR*Z{b;NZjB@������̺Ëe25U667ugYaF؈������ub\N}MMM=].=fFNǭ������]K$zLMMMEpM{{{fsWWR:�������fZPP_SeSkSqSwS}S:|``d`j�������`jkk)ȩSw?!qf2(U*USSF/HbqqqH$ �������0Jzڙ :jʚ*Z;9)vj2 I+P+\.ɤR)m�������FQ)S/S5S;SASGSMSSSYS_SeSksS} ^b4ڵZRiC�������02U334u445555U66wPGFFCӹ)q.ũM&`5u:Fm������xTTTT\sA(fvfp7T Vz}7�������GLLLMM5MMMë́sgs;ܟĸvY�������Tippt?)NqZ�������pL755"aSq.69�������L\~ :|Bmr�������xDzBw?]����IENDB`�����������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/����������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017544� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/plus.png��������������������������������������������������������0000644�0001750�0001750�00000000307�11644410761�021243� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���&q��� pHYs�� �� ����tIME 1l9���tEXtComment�̖���RIDATc<s ^U߿cBDab `4>z(BpipPc� � |����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/up-pressed.png��������������������������������������������������0000644�0001750�0001750�00000000564�11644410761�022354� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sRGB����bKGD������C��� pHYs�� �� B(x���tIME �,Ze���IDAT8͓jA*WKk-,By@- و/`cXYh!6jf GrOlXvvfk2!p!GOOԲ &zf 6|M~%`]* ΛM]K ZĆ1E�r%ȶcm1`<Ezhl^)Al�_ԩ`U 8` W+Ky,7Dlx7+-=AOzw����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/comment.png�����������������������������������������������������0000644�0001750�0001750�00000006565�11644410761�021736� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a�� OiCCPPhotoshop ICC profile��xڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $p�d!s#�~<<+"�x �M0B\t8K�@zB�@F&S��`cb�P-�`'�{�[!� eD�h;�VE�X0�fK9�-�0IWfH�� � �0Q)�{�`##x��FW<+*��x<$9E[-qWW.(I+6aa@.y24��x6_-"bbϫp@��t~,/;m%h^ uf@�Wp~<<EJB[aW}g_Wl~<$2]GLϒ bG "IbX*QqD2"B)%d,>5�j>{-]cK'Xt��o(hw?G%�fIq��^D$.Tʳ?��D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;�2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}= Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz�%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy +V<*mOW~&zMk^ʂk U }]OX/Yߵa>(xoʿܔĹdff-[n ڴ VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ 8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-���bKGD������ pHYs�� �� ����tIME �1;V��IDAT8ukU?sg4h`G1 RQܸp%Bn"bЍXJ .4V iZ##T;m!4bP~7r>ιbwc;m;oӍAΆ ζZ^/|s{;yR=9(r�tVoG1w#_ө{*E&!(LVuoᲵ‘D� PG4 :&~*ݳreu: S-,U^E&JY[P!RB ŖޞʖR@_ȐdBfNvHf"2T]R j'B1ddAak/DIJD D2H&L`&L $Ex,6|~_\P $MH`I=@Z||ttvgcЕWTZ'3rje"ܵx9W> mb|byfFRx{w%DZC$wdցHmWnta(M<~;9]C/_;Տ#}o`zSڷ_>:;x컓?yݩ|}~wam-/7=0S5R�P"*֯ ����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/up.png����������������������������������������������������������0000644�0001750�0001750�00000000553�11644410761�020707� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sRGB����bKGD������C��� pHYs�� �� B(x���tIME!.<̓E���IDAT8͓NABP\EG{%<|x�c  cr6@t;b$;3&)h1!﫳Hz�z@=)p� 3۵e2/ߴ ( %^ND^ }3H1DoǪISFұ?, G`{v^X[b]&HC3{:sO& ?,[eL#����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/alert_info_32.png�����������������������������������������������0000644�0001750�0001750�00000002220�11644410761�022702� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��WIDATXýohUu?"JzћWzqzq ]d܆.d54܄;5TҴ?i4Gd Mm^ݷLKbн=r<| cp'̣@&Vx8At,('"I'{ckꗥ o`0DQ:!:OnzVk%{u՜% [#RqԪ~7;(>`fKe? !H1�6O & ['U@8�d =r3͔G8&/˅-*de `<<,X(lN`u"coEj2 Ijxp p:ְR.pe–maiQrP P!TxH5[rJmSyf|a5 (=*"®k"ג?K\}S=*iHCo,*8[xIM+טPlVn*9.5�x;Y,/Kޒ.x?DZ� 75+p[V/pS$zCE0%+-U,l("@m٤[bܵ`jƢ�<O^YsEMdա=!ux o~\(9OV/_,P^V0S)Uޫje/~MĮOۇ@rD $L�/OcbsJ~ӛj]FINZA`?0x!0#sS5;x7l(_.X+NaS\@~-h/5?._z9.NAzS|lbW2`mC.S?+pG 2Æ `.P.*[^⤢s:מT$)܁x #\?0OeEI/ɫVY WYK\Pl o/HtKt˕ HE`7ޏ"rQD:_gCqG &Y%ߐ!$����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/alert_warning_32.png��������������������������������������������0000644�0001750�0001750�00000002044�11644410761�023420� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���szz��IDATXML\U o((e &`uUvlUcM7mhbDn(u4F4ta1PB(-TZt޻y3yL;'}ssszX)`os;\df7x᜜z] FUqDtNDDԖsO^+239*zKΜ:ϜH24=g )@N$љmWPmGwV e ,X`Hܭ9S_Zt ' (PggPK4@*Bh * ;P@5) A@9 eunj�nb..R-Q[ًȗ�t30'fQQp</Oc‡^"ӫnq.$n 󀛽{2@Yq�Nr/vc@ð:>ʍO8 P1avʮ 37 /azM,ýv Ä뭼eCp` ^=_}mBt4 B*cl) `A]Trh?~_Ke:p#dښiFPVt& cn*p  trf�rHi`[B<L(JuhOSyy4 tt\0S <s[@zmM8lb|urQO*姘xx ]Dg/ql�x^Bn׹]7ýD�k-tuh5Jݏc:X989P#D@stred,tEth.)N|ኧ(.9?GAf2+#cf 2y}U\?� ZI]#'RBOy)e۱`Q����IENDB`��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/bullet_orange.png�����������������������������������������������0000644�0001750�0001750�00000000555�11644410761�023107� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������z���`PLTE~*̓m7޵ث*ŋzn˅*<ņt������������������������⟄���bKGD ��� pHYs���H���H�Fk>��� vpAg����������/IDAT �u? .r/P5z=,%&;���%tEXtdate:create�2010-01-07T12:49:06+01:00:y���%tEXtdate:modify�2010-01-07T12:49:06+01:00Kt����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/bg-page.png�����������������������������������������������������0000644�0001750�0001750�00000000244�11644410761�021562� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ���h���Jr���gAMA�� a��� pHYs�� �� ����tIME +���3IDATHб � W6`#_Vz#  &>Aklr����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/minus.png�������������������������������������������������������0000644�0001750�0001750�00000000307�11644410761�021413� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR��� ��� ���&q��� pHYs�� �� ����tIME <8���tEXtComment�̖���RIDATc<s ^U߿cEab `PrGE8~8LLLn;|ea``w3�=U[.����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/comment-bright.png����������������������������������������������0000644�0001750�0001750�00000006654�11644410761�023212� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a�� OiCCPPhotoshop ICC profile��xڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $p�d!s#�~<<+"�x �M0B\t8K�@zB�@F&S��`cb�P-�`'�{�[!� eD�h;�VE�X0�fK9�-�0IWfH�� � �0Q)�{�`##x��FW<+*��x<$9E[-qWW.(I+6aa@.y24��x6_-"bbϫp@��t~,/;m%h^ uf@�Wp~<<EJB[aW}g_Wl~<$2]GLϒ bG "IbX*QqD2"B)%d,>5�j>{-]cK'Xt��o(hw?G%�fIq��^D$.Tʳ?��D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;�2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}= Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz�%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy +V<*mOW~&zMk^ʂk U }]OX/Yߵa>(xoʿܔĹdff-[n ڴ VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ 8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-���bKGD������ pHYs�� �� ����tIME 6 B\<��IDAT8˅Kh]es1mA`jh[-E(FEaA!bIȐ*BX"؁4)NURZ!Mhjssm؋^-\gg ]o|Ҭ[346>zd �]#8Oݺt{5uIXN!I=@Vf=v1}e>;fvnvxaHrʪJF`D¹WZ]S%S)WAb |0K=So7D~\~q-˟\aMZ,S'*} F`Nnz674U<hRR躃FM`f"ҹ%*Rivq;"0'hPϛ VPRa}d+*Q "u,S4LqjrɢBCU$1 "q䈋+Ł'^fu+8D8C MPj M8DXtm c|o5|f(EAcD! |7ny@_(_~2Yby y Ek\Μ2v y؍ݰgJŻܽT&Y5<Sx꽇O{oOm;5A ^zGߪx߷8߲.G �l:?�)T%!G����IENDB`������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/down-pressed.png������������������������������������������������0000644�0001750�0001750�00000000560�11644410761�022673� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sRGB����bKGD������C��� pHYs�� �� B(x���tIME �-vF#���IDAT8!OAJ, ++@I vbÿ@W7F HN#48646TMvv޼7Dsax1U q;< E-f)j%po4xF78G>)- EYm4%7YTk-Qa"NWAo-yeq,) Ypt\hqmszG]Nar߶s^l vh\2%0EeRv����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/file.png��������������������������������������������������������0000644�0001750�0001750�00000000610�11644410761�021174� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���bKGD������ pHYs�� �� ����tIME  )T��IDAT8˭J@Ir('[ "&xYZ X0!i|_@tD] #xjv YNaEi(əy@D&`6PZk$)5%"z.NA#Aba`Vs_3c,�2mj �[klvy|!Iմy;v "߮a?A7`c^nk?Bg}TЙD# "RD1yER*6MJ3K_Ut8F~����IENDB`������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/_build/_static/comment-close.png�����������������������������������������������0000644�0001750�0001750�00000006772�11644410761�023041� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a�� OiCCPPhotoshop ICC profile��xڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $p�d!s#�~<<+"�x �M0B\t8K�@zB�@F&S��`cb�P-�`'�{�[!� eD�h;�VE�X0�fK9�-�0IWfH�� � �0Q)�{�`##x��FW<+*��x<$9E[-qWW.(I+6aa@.y24��x6_-"bbϫp@��t~,/;m%h^ uf@�Wp~<<EJB[aW}g_Wl~<$2]GLϒ bG "IbX*QqD2"B)%d,>5�j>{-]cK'Xt��o(hw?G%�fIq��^D$.Tʳ?��D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;�2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}= Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz�%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy +V<*mOW~&zMk^ʂk U }]OX/Yߵa>(xoʿܔĹdff-[n ڴ VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ 8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-���bKGD������ pHYs�� �� ����tIME!��,IDAT8e_Hu?}s3y˕U2MvQ֊FE.łĊbE$DDZF5b@Q":2{n.s<_ y?mwV@tR`}Z _# _=_@ w^R%6gC-έ(K>| ${}<u|kA:!Oq`- oL66\5.*вj$(j(-qDzrpOԴ|b`$6DQK4T"dLk`e읪7LNe%40JAh#6R'K]4;ۯo((pjfX0q"`|HUE )_"q<׀wPGpW}KshdYL 1|#1dWvsMu׃X9P+|&p#\oFH ~ &sΆ6ʊzcu{~|xʡ~8Jzv"Mև|Zk9Q~´\Wq$4RzP0G( DGgqw=0{˦u]'B/PD b4i$ q�dž�3?)'fqW4XM^d2F#|=RykPYk:?mSc 痭fƖK/if}NL5]Vy{M^wBaE!0c;^R]qIU/)(<0+dgq__E:_WxV!Аj~7,dS����IENDB`������quodlibet-3.0.2/docs/_build/_static/down.png��������������������������������������������������������0000644�0001750�0001750�00000000553�11644410761�021232� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sRGB����bKGD������C��� pHYs�� �� B(x���tIME"U{���IDAT8ҡNCAJ, ++@4>�/U^,~T&3M^^^PM6ٹs*RJa)eG*�W<"F Fg78G>q OIp:sAj5GنyD^+yU:p_%G@D|aOs(yM,"msx:.b@D|`Vٟ۲иeKſ/G!����IENDB`�����������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/development/�������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017202� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/development/contributing.rst���������������������������������������������������0000644�0001750�0001750�00000011777�12161032160�022452� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _Contribute: How to contribute ================= Testing ------- One of the most helpful things both regular users and developers can do is to test others' code. The easiest way to do this is to run the development version of Quod Libet. Development versions are kept stable, and the developers generally run the latest code to play their own music, so this is a safe and helpful way to contribute. Please keep in mind that Quod Libet is not forward compatible, meaning that if you use a newer version, reverting to an older version could lead to errors and data loss. So always backup your :ref:`config files<ConfigFiles>` if you plan to downgrade at a later point. You can find find development packages in the :ref:`download section <Downloads>` . Trying Patches -------------- Sometimes developers will post patches on tickets (`try these tickets <http://code.google.com/p/quodlibet/issues/list?can=2&q=label%3APatch>`_ for a start) for preview or experimental functionality. To install these over a local checkout, save the patch file e.g. to `123-ql.patch` :: $ cd /usr/local/src/quodlibet/ # or wherever you have it $ patch -p1 < ql.patch If you're using mercurial, you can just use ``hg revert --all`` to remove any patches. Also, for more advanced usage or to test multiple patches together, you may also like to try `mercurial queues <http://mercurial.selenic.com/wiki/MqTutorial>`_. .. _BugReports: Filing bug reports ------------------ Useful Links ^^^^^^^^^^^^ * `List current bugs <http://code.google.com/p/quodlibet/issues/list>`_ * `Add a new bug <http://code.google.com/p/quodlibet/issues/entry>`_ Writing a good bug report ^^^^^^^^^^^^^^^^^^^^^^^^^ The more information provided in a bug report, the more likely a bug can be reproduced on another system. Good examples of details include: * OS, distribution, and version * Versions of Python, Quod Libet, Mutagen, GTK, PyGTK, GStreamer, libXine * A list of all enabled plugins * The current browser * Debug log information (dump files) For more tips see `How to Report Bugs Effectively <http://www.chiark.greenend.org.uk/~sgtatham/bugs.html>`_. Isolating the problem(s) ^^^^^^^^^^^^^^^^^^^^^^^^ Misbehaving plugins are a common source of bugs. Try reproducing the bug with all plugins disabled; if the bug is gone, enable them one by one until you find the *combination* of plugins that triggers the bug. Viewing Debug information ^^^^^^^^^^^^^^^^^^^^^^^^^ If the bug you have found does not raise an exception, the debug window won't appear and the dump won't be generated. In this case, run quodlibet from the command line using the command ``$ QUODLIBET_DEBUG=1 quodlibet`` (or in newer versions, just ``quodlibet --debug``), and use 'Cause an error' from the Help menu to produce the dump. Testing the latest code ^^^^^^^^^^^^^^^^^^^^^^^ Some problems are fixed in the development branch which aren't yet fixed in the current release. If you can, try to reproduce your bug against a recent checkout before filing. One bug per ticket ^^^^^^^^^^^^^^^^^^ Please do not create an item (ticket) in the issue tracker which contains reports of multiple unrelated issues. Even if you are reporting several very minor bugs, each one deserves its own issue. This allows each issue to receive independent discussion and analysis, and to be closed separately. Filing enhancement requests --------------------------- The most important component of an enhancement is the *why*. State what it is Quod Libet doesn't do for you, and give as much information about why you think adding a feature which accomplished this would be a good thing. If you have an idea as to how a feature might be implemented, suggestions are welcome, but be sure to explain why you want a feature before explaining how you envision it being implemented. Not only does this make your feature more likely to be supported, it allows others to enhance, generalize, and refine your ideas. As with bugs, please refrain from submitting multiple feature requests in the same issue. If you have related ideas, file them separately and mention the issue numbers of previous ideas. Translation ----------- Help us :ref:`translate Quod Libet into other languages<Translating>`. You don't need to know how to program in Python to do it. Submitting patches ------------------ Patches are always welcome, and should be attached to the issue tracker. We review every issue and tag the ones which include patches, so there's no need to add "PATCH" to the issue summary. We try to keep Quod Libet's code in pretty good shape; when submitting a patch, it's much easier to get it included quickly if you run through this checklist of common-sense code quality items. Make sure your patch: * is `PEP 8 <http://www.python.org/dev/peps/pep-0008/>`_ compliant. Yes, this means an 80-character line length. * passes existing tests, and includes new ones if at all possible. * is commented. * adds your name to the copyright header of every file you touch. This helps you get credit and helps us keep track of authorship. �quodlibet-3.0.2/docs/development/index.rst����������������������������������������������������������0000644�0001750�0001750�00000002143�12161032160�021035� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Development Guide ================= **We believe that you know how to organize your music best.** Quod Libet is a cross-platform music player that supports the features you'd expect from a modern media player, like Unicode support, multimedia keys, advanced tag editing and Replay Gain. Quod Libet distinguishes itself from other media players with its emphasis on simplicity, performance and :ref:`search <Searching>`. Quod Libet uses `GTK+ <http://www.gtk.org/>`_, because GTK+ makes it easy to create clean, simple standards compliant user interfaces. Quod Libet uses `Python <http://www.python.org/>`_, because Python makes it easy to create clean, simple functional and object-oriented software. Various other packages and libraries add to this - see :ref:`Requirements`. Using the `Mutagen <http://code.google.com/p/mutagen/>`_ tagging library keeps the rest of Quod Libet as simple as possible and ensures every tag in your music library is available for your searching pleasure. .. toctree:: :titlesonly: contributing guidelines translating plugins formats misc tools faq �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/development/translating.rst����������������������������������������������������0000644�0001750�0001750�00000015626�12161032160�022266� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _Translating: Translating =========== If you're fluent in a language other than English, and have some spare time, you can help us translate Quod Libet. Translation is a continuous process on an active projects like this - as developers add new features or modify existing text used, new translations will be needed. Many of the translations files are missing a lot of strings, so please try the trunk version in your language. Of course, there might be mistakes in the English, too! Please let us know if you find them. Translation Software -------------------- To translate, you'll want to have intltool, gettext and mercurial installed:: apt-get install intltool gettext mercurial For translating itself you need a PO editor like `Poedit <http://www.poedit.net/>`_:: apt-get install poedit Translation Process ------------------- Get the QL code:: $ hg clone https://quodlibet.googlecode.com/hg/ quodlibet $ cd quodlibet/quodlibet To translate the last release, update to the stable branch:: $ hg branches # to get the list of branches $ hg update quodlibet-X.X # for example: quodlibet-2.3 To translate current trunk, update to the default branch:: $ hg update default Create the POT file and update translations:: $ ./setup.py build_mo In case there's not already a translation for your language:: $ msginit -i po/quodlibet.pot -l po/<mylang> Now start translating... :: $ poedit ./po/<lang>.po Test the translation by generating MO files and running Quod Libet and Ex Falso. build_mo will create a 'build' directory including the processed translations and if 'build' is present QL/EF will use these translations instead of the global ones. :: $ ./setup.py build_mo $ ./quodlibet.py $ ./exfalso.py If your active system language is not the one you are translating, you can run them like:: $ LANG=<mylang> ./quodlibet.py Finally run our unit tests to make sure the translation will not cause programming errors. If it says something else, there's a problem with the translation. :: $ ./setup.py build_mo $ ./setup.py test --to-run PO.<mylang> And send us the .po file you made! Create a `new issue <http://code.google.com/p/quodlibet/issues/entry>`_ and attach the file. Feel free to post a comment to the mailing list, so that other people can test your work. Translation FAQ --------------- Why are some strings not translatable? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In case of strings like "Apply" and "Ok" that show up on buttons, these come from GTK and are not part of QL. But there is a chance that we have forgotten to mark a string translatable, so please contact us. If anything else is not translatable you can start QL with the following variable set:: QUODLIBET_TEST_TRANS=xx ./quodlibet.py which will append and prepend "xx" to all translatable strings. Translation Context ^^^^^^^^^^^^^^^^^^^ Some strings have a "|" character in them (for example, "command|filename"). This is used to separate strings with the same text but different contexts. The filename string is used to describe the filename tag, and should be translated in a style appropriate for users to read in a GUI (for example, "nome de arquivo"). The "command|filename" is used to describe a command-line argument, and should be translated appropriate for that (for example, "nome_de_arquivo"). The comments in the PO file should describe the context if there is any. Do not translate or include the text before the "|". For example, "command|tag" should be translated as "etiqueta" in Galician, not "command|etiqueta". What does `check|titlecase?` mean? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ There's a special string `check|titlecase?` which should be translated as anything if your language does not use `title casing <http://en.wikipedia.org/wiki/Letter_case>`_ (eg *This Is Title Casing*) for labels. If it is left untranslated, title-casing will be used. Plural-Forms ^^^^^^^^^^^^ If you used KBabel or Emacs, you've already translated the plural forms, so you can skip this. GTranslator doesn't support "plural" messages (for example, *0 songs*, *1 song*, *2 songs*, *3 songs*...). After you do the translation with GTranslator you'll need to open up the PO file in your favorite text editor (`GEdit <http://live.gnome.org/Gedit>`_ is good for this, as is `vim <http://www.vim.org/>`_) and manually edit the plural forms. The first thing you need is a Plural-Forms line for your language. The GNU gettext manual has a chapter on plural forms with examples for many languages. This should go after the "Content-Transfer-Encoding" line. The Plural-Forms line tells gettext how many plural forms there are in the language and how to use them. For example: :: msgid "artist" msgid_plural "artists" msgstr[0] "artist" msgstr[1] "artists" The English plural expression, "n != 1" means to use msgstr[0] if the count is 1, otherwise use msgstr[1]. If your language has 3 plural forms, you'll need msgstr[0], msgstr[1], and msgstr[2], and so on. Sometimes (usually, even) the English strings will be the same. For example, ``%d selected`` doesn't change whether it stands for *1 selected* or *99 selected*. If it does in your language, you should translate them differently. There are further difficulties for the many languages that have gender agreement and an unspecified noun in the phrase, but these are often translated with brackets (eg in French: *1 sélectionné(e)*, *99 sélectionné(e)s* perhaps) Fuzzy translations ^^^^^^^^^^^^^^^^^^ A translation marked *fuzzy* is (usually) one that has been matched to a similar previous translation, often by `gettext` itself. Note that fuzzy translations are not treated as accurate translations so will not be used. Common reasons for strings being marked as fuzzy include: * A contributor corrects a typo in the source (English) text * A developer changes the `Mnemonic Label <http://developer.gnome.org/gtk/2.24/GtkLabel.html#id727933>`_ - This is the underscore you see in many translation strings. * The English has changed, but not much * sometimes it *just happens*... For example:: #: ../quodlibet/browsers/albums.py:425 #, fuzzy msgid "Sort _by:" msgstr "Ordina per data" Here, in the Italian `.po` file, you can see this message has been matched, presumably used from a "Sort by date" translation previously entered. This explains why this string was missing in the Italian build. As a translator please make sure there are no translations left marked as fuzzy. In `poedit`, you can click the cloud (!) icon, or in a text editor you should simply remove the `fuzzy` string above the `msgid`. Other resources --------------- The `GNOME Translation Project <http://live.gnome.org/TranslationProject>`_ has many good resources on how to translate programs properly. When possible we try to share English terms and phrases with other GTK+/GNOME applications, and we'd like to share non-English ones, too. ����������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/development/misc.rst�����������������������������������������������������������0000644�0001750�0001750�00000005644�12161032160�020672� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Miscellaneous ============= Useful Specifications --------------------- * Code: * `PEP-8, style guidelines for Python code <http://www.python.org/dev/peps/pep-0008/>`_ * `GNOME Human Interface Guidelines <http://developer.gnome.org/projects/gup/hig/2.0/>`_ * File Formats: * `APEv2 tag specification <http://wiki.hydrogenaudio.org/index.php?title=APEv2_specification>`_ * `MP3/ID3 <http://www.id3.org/>`_: * `MPEG audio header format <http://www.dv.co.yu/mpgscript/mpeghdr.htm>`_, and the `Xing VBR header <http://www.codeproject.com/audio/MPEGAudioInfo.asp#XINGHeader>`_ * `ID3v2.4 structure <http://www.id3.org/id3v2.4.0-structure.txt>`_, `ID3v2.4 frame list <http://www.id3.org/id3v2.4.0-frames.txt>`_, `ID3v2.3 <http://www.id3.org/id3v2.3.0.html>`_, `ID3v2.2 <http://www.id3.org/id3v2-00.txt>`_, and `ID3v1 <http://www.id3.org/id3v1.html>`_ * `Lyrics3v2 <http://www.id3.org/lyrics3200.html>`_ * `Xiph Formats <http://www.xiph.org/>`_: * `Ogg bitstream structure <http://www.xiph.org/ogg/doc/rfc3533.txt>`_ * `Vorbis comment structure <http://www.xiph.org/vorbis/doc/v-comment.html>`_ * `Ogg Vorbis embedding <http://www.xiph.org/vorbis/doc/Vorbis_I_spec.html>`_ * `FLAC format <http://flac.sourceforge.net/format.html>`_, and `Ogg FLAC embedding <http://flac.sourceforge.net/ogg_mapping.html>`_ * `Ogg Theora embedding <http://theora.org/doc/Theora_I_spec.pdf>`_ Downstream Bug Trackers ----------------------- * `Fedora <https://admin.fedoraproject.org/pkgdb/acls/bugs/quodlibet>`_ * `Debian <http://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=quodlibet>`_ * `Arch Linux <https://bugs.archlinux.org/?project=1&string=quodlibet>`_ * `Ubuntu <https://launchpad.net/ubuntu/+source/quodlibet/+bugs>`_ Translation Backport Braindump ------------------------------ given: translation update for default, branch possibly contains code that got removed in default. :: hg up default # (commit translations to default) hg update quodlibet-2.5 ./setup.py build_mo msgcat --use-first brach.po default.po > branch.po ./setup.py test # (review changes..) hg up default hg merge --tool internal:local quodlibet-2.5 Release Checklist ----------------- Stable Release: * Run test suite on karmic/arch * Update version * Run setup.py build_mo * Update NEWS * Commit (release prep) * hg tag quodlibet-x.y.z * Update version * Commit (version bump) * hg up default * hg merge --tool internal:local quodlibet-x.y Files: * Run setup.py sdist * Create the plugin tarball Windows: * hg up quodlibet-x.y.z * setup.py build_mo * win_installer_build.py quodlibet-x.y.z * copy MSVC files * reinstall / test ��������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/development/guidelines.rst�����������������������������������������������������0000644�0001750�0001750�00000011104�12161032160�022053� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Workflow & Guidelines ===================== .. seealso:: This page contains information on contributing code and patches to Quod Libet. If you want to contribute in another way please see :ref:`Contribute` for many ways to help. Getting started --------------- Quod Libet now provides its code through Google Code's Mercurial hosting service. Click the "Source" tab at the top of the screen to view the current history, or pull a copy using the `checkout instructions <http://code.google.com/p/quodlibet/source/checkout>`_. If you have a recent GTK+ version installed and don't need translations you can simply run QL directly from source without building/installing. All you need are the :ref:`Requirements`. Since QL does not depend on recent versions of them, the ones shipping with your distribution should work. See :ref:`RunFromSource` on how to get started. Source Overview --------------- ============ ========================================== browsers/* Things in the View menu formats/* File format support library/* Library management code qltk/* GTK+ widget subclasses/extensions util/* General utility functions and setup code ============ ========================================== If you want to get a full overview of QL's code, good places to start are browsers/_base.py, formats/_audio.py, and library/libraries.py. Tags & Branches --------------- At the point where no new functionality will be added before a release, a new branch gets created. All bugfix changes should get commited there and merged back in the default branch where new functionality can be added. In case a bugfix was commited to the default branch or an unplanned stable release is needed use the hg graft extension to copy those changes to the stable branch(es). :: /|\ /|\ | | | 2.4.91 2.5.-1 / <--- quodlibet-2.5 branch |_____/ | /|\ | | | 2.4.1 <--- quodlibet-2.4.1 tag | | | 2.4.0.-1 | | | 2.4 <--- quodlibet-2.4.0 tag | | | 2.3.91.-1 | | | 2.3.91 2.4.-1 / |______/ <--- quodlibet-2.4 branch | | <--- default branch 2.3.-1 | /|\ Code Guidelines --------------- We try to keep Quod Libet's code in pretty good shape; when submitting a patch, it's much easier to get it included quickly if you run through this checklist of common-sense code quality items. Make sure your patch: * is `PEP 8 <http://www.python.org/dev/peps/pep-0008/>`_ compliant. Yes, this means an 80-character line length. * passes existing tests, and includes new ones if at all possible. * is commented. * adds your name to the copyright header of every file you touch. This helps you get credit and helps us keep track of authorship. General Guidelines ------------------ We prefer Python to C. We prefer ctypes to compiled C wrappers. A good way to get a new feature applied is if you include tests for it. Stock strings and string reuse are awesome, but don't make the interface awkward just to avoid a new string. Unit Tests ---------- Quod Libet comes with tests. To run them, run ``./setup.py test``. Your patch can't break any unit tests, and if you change tests in a non-obvious way (e.g. a patch that removes an entry point and also removes a test for it is obvious) you should explain why. Printing Text ------------- All terminal output should go through the ``print_``, ``print_w``, ``print_e``, or ``print_d`` functions. These will handle Unicode recoding. They also let us capture all output for debugging purposes. Translations ------------ All text that could be visible to users (with debugging mode disabled) should be marked translatable. You can do this by simply using the ``_`` function which is globally available (through __builtin__):: print_w(_("This is translatable")) To handle plural forms use ``ngettext``:: text = ngettext("%d second", "%d seconds", time) % time It is good practice to add a comment for translators if the translation depends on the context:: # Translators: As in "by Artist Name" text = _("by %s") % tag Submitting ---------- If your patch fixes a known bug with a ticket, you should attach it to the ticket directly. If it is a bug fix but doesn't have a ticket, you can either make a ticket to attach it to, or send it to the mailing list, quod-libet-development@googlegroups.com. The ticket tracker is at http://code.google.com/p/quodlibet/issues/list and at http://code.google.com/p/quodlibet/issues/entry. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/development/formats.rst��������������������������������������������������������0000644�0001750�0001750�00000014711�12161032160�021405� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Tag Formats & Spec Deviations ============================= Deviations ---------- Quod Libet deviates from several of the standards it claims to support. We'll document them here, but most of the time we won't change them; we had a good reason for violating them in the first place. General Deviations ------------------ Since we translate to and from many formats, sometimes we're forced to accept the lowest common denominator among tag formats. Don't worry; if it's too low we'll figure out some way around it. * Dates are restricted to YYYY or YYYY-MM-DD formats. Blame ID3. * = and ~ are not allowed in tag names, and tag names must also be pure ASCII. * Tag names are always case-insensitive. * Newlines are not allowed in tag values. If you use a newline in a tag value, it will instead be treated as two values for the tag. ID3 --- UTF-8 and ID3 Tags ^^^^^^^^^^^^^^^^^^ If Quod Libet finds data in an MP3 claiming to be "latin 1", it won't trust it. It'll try UTF-8 and some other encodings before it gives up and actually considers it Latin 1. On the other hand, when it writes tags, it saves purely ASCII values as UTF-8 and any non-ASCII values as UTF-16. This means it won't try to "guess" when it reloads them, and other programs shouldn't either. Using a format like Ogg Vorbis, FLAC, or Musepack, the tag encoding is known and Unicode is perfectly supported. Genre and TCON ^^^^^^^^^^^^^^ The ID3 standard is ambiguous in its specification for the TCON frame. If you try to use a numeric genre in the form of 02 or (23) (for example) it will get translated into a text genre. This means there's no way to have a genre actually start with (xx) for MP3s. QuodLibet::TXXX Frames ^^^^^^^^^^^^^^^^^^^^^^ ID3 doesn't let you have frames named whatever you want like Ogg Vorbis and APEv2 do. However, it does let you create "TXXX" frames which are text data with an associated "description". Quod Libet uses these frames with a *`QuodLibet``::<tagname>* description to store tags that don't have ID3 counterparts. For example, labelid is stored as *`QuodLibet`::labelid*. RVA2 / ReplayGain ^^^^^^^^^^^^^^^^^ Quod Libet implements ReplayGain using MP3's RVA2 frame. Unfortunately there is no standard on how to read RVA2 frames to support RG properly. If the description string is "album" the gain is treated as the album/audiophile value. Any other value is read as the track/radio value, but an actual description of "track" will preempt other values. I've passed this information along to the GStreamer guys and their RVA2 support should match this, once it's completed. foobar2000-style TXXX:replaygain_* tags are also supported, but migrated to the proper RVA2 format on save. COMM Frame Language codes ^^^^^^^^^^^^^^^^^^^^^^^^^ Language codes in COMM frames with empty descriptors are replaced by \x00\x00\x00 on save. These tend to contain garbage rather than valid language codes anyway, and empty descriptors are usually a sign of comments migrated ID3v1 or other formats that do not support language markers. Legacy Stuff ^^^^^^^^^^^^ Multiframe Hack: Since versions of ID3 prior to 2.4 did not support multiple values in a single text frame, we stored multiple text frames of the same type with one value for each if you tried to save more than one value per frame. This was strictly a violation of the ID3 spec, but we never encountered an ID3 reader that had trouble reading the tags saved this way (and still haven't). Now that we use Mutagen, we store multiple values in the standard ID3v2.4 format. Old tags are migrated when you edit them. QuodLibet:: COMM Frames: Quod Libet used to use COMM frames instead of TXXX frames for its extended tag names. It will still load old COMM tags, but clears then when you save the file again. APEv2 ----- Naming Conflicts ^^^^^^^^^^^^^^^^ Since we turn APEv2's ``Subtitle`` tag into version, you can't edit a tag named ``subtitle`` in MPC files. Similar problems exist for ``Track``, ``Catalog``, ``Year``, and ``Record location`` tags. VorbisComment ------------- This is a list of Ogg Vorbis tags Quod Libet uses that require special handling. They are presented here in the hopes that other applications will adopt them. **rating** The rating tag has a subkey of an email address, and is formatted as e.g. ``rating:quodlibet@sacredchao.net``. The email is used as a unique identifier to allow multiple users to share the same files (it need not actually be an email address, but having it as such ensures that it's unique across users). It represents how much a user likes a song. Its value is a string representation of a floating point number between 0.0 and 1.0, inclusive. This format is chosen so the application may decide what precision it offers to the user, and how this information is presented. If no value is present, the rating should be assumed to be 0.5. Example: ``rating:quodlibet@sacredchao.net=0.67`` **playcount** The playcount tag has a subkey of an email address, and is formatted as e.g. ``playcount:quodlibet@sacredchao.net``. It stores how many times the user has played the song all the way through, as a numeric string. If no value is present, it should be assumed to be 0. Example: ``playcount:quodlibet@sacredchao.net=3`` **website** The website tag stores an absolute IRI (Internationalized Resource Identifier), as per RFC 3987. The intent is that it hold an IRI suitable for opening in a standard web browser (e.g. http, https, or ftp scheme). As it is an IRI, and not a URI, it should be stored in unescaped form. If an application needs a URI, it should follow the procedure in RFC 3987 section 3.1 to convert a valid IRI to a valid URI. As per the Vorbis comment specification, the tag must be a UTF-8 represention of the Unicode string. This tag may occur any number of times in a file. .. _PerformerRoles: Performer Roles ^^^^^^^^^^^^^^^ Quod Libet supports performer roles, which let you associate a performer in a song with a specific instrument. To use this feature, name a tag performer:role. This is similar to the ID3v2 IPLS (involved person list) frame. Examples: ``*performer:vocals=Brandon Patton``, ``performer:banjo=Béla Fleck*``. Quod Libet displays these tags by putting the role after the name, parenthesized (e.g. ``Béla Fleck (banjo)``), but in other supporting programs the role can be associated with the name in any understandable way, or simply ignored and treated like an ordinary performer tag. �������������������������������������������������������quodlibet-3.0.2/docs/development/tools.rst����������������������������������������������������������0000644�0001750�0001750�00000006730�12161032160�021074� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Development Tools ================= Performance Profiling --------------------- cProfile ^^^^^^^^ * http://docs.python.org/library/profile.html * bundled with python :: python -m cProfile -s [sort_order] quodlibet.py > cprof.txt where ``sort_order`` can one of the following: calls, cumulative, file, line, module, name, nfl, pcalls, stdname, time Example output:: 885311 function calls (866204 primitive calls) in 12.110 seconds Ordered by: cumulative time ncalls tottime percall cumtime percall filename:lineno(function) 1 0.002 0.002 12.112 12.112 quodlibet.py:11(<module>) 1 0.007 0.007 12.026 12.026 quodlibet.py:25(main) 19392/13067 0.151 0.000 4.342 0.000 __init__.py:639(__get__) 1 0.003 0.003 4.232 4.232 quodlibetwindow.py:121(__init__) 1 0.000 0.000 4.029 4.029 quodlibetwindow.py:549(select_browser) 1 0.002 0.002 4.022 4.022 albums.py:346(__init__) ... ... Run Snake ^^^^^^^^^ * http://www.vrplumber.com/programming/runsnakerun/ * package runsnakerun in debian Wheezy :: python -m cProfile -o prof.out quodlibet.py runsnake prof.out Example: http://www.google.at/search?q=runsnakerun&tbm=isch Gprof2Dot ^^^^^^^^^ * http://code.google.com/p/jrfonseca/wiki/Gprof2Dot :: python -m cProfile -o output.pstats ./quodlibet.py gprof2dot.py -f pstats output.pstats | dot -Tpng -o output.png Line Profiler ^^^^^^^^^^^^^ * http://packages.python.org/line_profiler/ :: # wrap all functions of interest with the @profile decorator ./kernprof.py -l ./quodlibet.py # creates quodlibet.py.lprof python line_profiler.py quodlibet.py.lprof > prof.txt Example output:: Timer unit: 1e-06 s File: test.py Function: a at line 2 Total time: 0.001528 s Line # Hits Time Per Hit % Time Line Contents ============================================================== 2 @profile 3 def a(): 4 1 134 134.0 8.8 print "hello" 5 1 12 12.0 0.8 b = [] 6 101 628 6.2 41.1 for i in xrange(100): 7 100 696 7.0 45.5 b.append(i) 8 1 58 58.0 3.8 print "world" strace ^^^^^^ * http://linux.die.net/man/1/strace :: strace -c ./quodlibet.py Example output:: time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 81.64 0.013274 9 1444 178 read 7.04 0.001144 0 4041 3259 open 3.81 0.000619 11 54 getdents64 2.80 0.000456 0 1004 fstat64 1.84 0.000299 0 2221 1688 stat64 ... ... IOProfiler ^^^^^^^^^^ * http://code.google.com/p/ioapps/wiki/ioprofiler * strace GUI * Shows read/write to files (how many reads/writes per file, which parts of the files were affected) :: strace -q -a1 -s0 -f -tttT -oOUT_FILE -e trace=file,desc,process,socket ./quodlibet.py ioreplay -c -f OUT_FILE -o OUT_FILE.bin ioprofiler.py # open OUT_FILE.bin Example: http://code.google.com/p/ioapps/wiki/IOProfilerScreenshots ����������������������������������������quodlibet-3.0.2/docs/development/faq.rst������������������������������������������������������������0000644�0001750�0001750�00000005136�12161032160�020502� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Frequently Asked Questions ========================== Any plans to use Python 3? -------------------------- No plans at the moment. First all dependencies (like mutagen) have to be ported. At the moment Python 2 does its job. What format is the song database in? ------------------------------------ It's a pickled list of AudioFile instances. It's easy to edit, if you know a little Python; here's an example session from the Python interactive interpreter which can get you started. :: Python 2.6.2 (r262:71600, Jun 4 2009, 15:54:27) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import quodlibet >>> import cPickle >>> with open(".quodlibet/songs", 'r') as songsfile: ... songs = cPickle.load(songsfile) ... >>> for k, v in songs[0].items(): ... print u'%-26s= %s' % (k, v) ... date = 2003 musicbrainz_albumartistid = 2624e8b9-3f77-453d-85e8-6a8c9e5b9d65 tracknumber = 1/11 ~mountpoint = /opt/media musicbrainz_trackid = 4471cad1-c642-4171-8bca-a8ddf7ac805b ~#skipcount = 0 album = You Are Here replaygain_album_gain = -0.519531 dB ~#bitrate = 192000 title = Ventriloquist ~#length = 195 ~#rating = 0.25 ~filename = /opt/media/music/+_-/You Are Here/01 - Ventriloquist.mp3 replaygain_album_peak = 0.46560668967 genre = Synthpop replaygain_track_peak = 0.423797607619 ~#laststarted = 0 ~#playcount = 5 artist = +/- musicbrainz_albumid = d9816797-946e-4d4e-beea-7940fdef57cc ~#added = 1215625984 replaygain_track_gain = +1.960938 dB ~#lastplayed = 1125835201 ~#mtime = 1238344410.0 >>> >>> inrainbows = filter(lambda s: s.get('album') == "In Rainbows", songs) >>> for s in inrainbows: ... s['~#rating'] = 1.0 ... >>> with open('test', 'w') as newsongsfile: ... cPickle.dump(songs, newsongsfile) ... >>> Why don't you use SQLite for the song database? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Although the song data Quod Libet stores would benefit from a relational database, it does not have a predefined schema, and opts to let users define their own storage keys. This means relational databases based on SQL, which require predefined schemata, cannot be used directly. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/docs/development/plugins.rst��������������������������������������������������������0000644�0001750�0001750�00000010670�12161032160�021413� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.. _PluginDev: Plugin Development ================== A Quod Libet / Ex Falso Plugin is a simple python module that contains sub-classes of special plugin classes and is placed anywhere in ``~/.quodlibet/plugins`` so it can be found by QL. These classes can provide special methods that get used by QL or can take action on certain events. At the moment the following plugin classes exist: **Event plugins:** * Are instantiated as long as they are enabled or QL is running. They get notified when songs start, get added etc. * Example: Last.fm scrobbler that watches what you play and sends the information to last.fm. **Tag Editing plugins:** * Can extend many parts of the tag editor. * Example: Title case your tags. **GStreamer plugins:** * Can inject elements into the GStreamer pipeline and configure them on the fly. * Example: Tempo adjustment to play music/audio books faster. **Play order plugins:** * Can decide which song to play next or what happens if you select one. * Example: Follow cursor, which plays the selected song next. **Song menu plugins:** * Can be accessed through the play list context menu and get passed all selected songs. * Example: Album art search, to search album art for all selected songs. .. note:: The best way to find out what is possible is to read the documentation of the `plugin base classes <http://code.google.com/p/quodlibet/source/browse/#hg%2Fquodlibet%2Fquodlibet %2Fplugins>`_ . Let's make a new plugin! ------------------------ First we start with a minimal event plugin:: from quodlibet.plugins.events import EventPlugin class MyPlugin(EventPlugin): PLUGIN_ID = "myplugin" PLUGIN_NAME = _("My Plugin") .. * PLUGIN_ID should be something unique so QL can remember the plugin even if it changes its name or class. * PLUGIN_NAME is the display name of the plugin (in the plugin manager, context menus etc.) After you place it in ``~/.quodlibet/plugins`` it will show up ind the plugin manager and you can enable and disable it. ---- Now we want to display when the plugin gets enabled and disabled by providing enabled and disabled methods. :: class MyPlugin(EventPlugin): PLUGIN_ID = "myplugin" PLUGIN_NAME = _("My Plugin") def enabled(self): print "enabled!" def disabled(self): print "disabled!" As you can see, these get called when you enabled/disable the plugin in the plugin manager or when you launch or shut down the application. They should be used to connect to external things, or initialisation. Make sure you get rid of all references in disabled so the plugin can be deleted properly. ---- Now we want to do something useful and take some action when a song starts playing. :: class MyPlugin(EventPlugin): PLUGIN_ID = "myplugin" PLUGIN_NAME = _("My Plugin") def plugin_on_song_started(self, song): if song is not None: print song("title") ``plugin_on_song_started`` gets called whenever a new song starts. When no song is active (the playlist has reached its end) the song will be `None`. The plugin now prints the song title on each song change. ---- Instead of printing the song title we now want the song title to be spoken on every new song. :: import gobject import subprocess from quodlibet import app from quodlibet.plugins.events import EventPlugin class MyPlugin(EventPlugin): PLUGIN_ID = "myplugin" PLUGIN_NAME = _("My Plugin") def plugin_on_song_started(self, song): if song is None: return old_volume = app.player.volume app.player.volume /= 3 def done(pid, cond): app.player.volume = old_volume pid = gobject.spawn_async( ["/usr/bin/espeak", song("~artist~title").encode("utf-8")], flags = gobject.SPAWN_DO_NOT_REAP_CHILD)[0] gobject.child_watch_add(pid, done) Whenever a new song starts we save the current volume, execute ``espeak`` and pass the artist and title of the new song to it and let it speak the text. Once the espeak process terminates our 'done' callback gets called and we restore the volume. .. note:: The easies way to get started is to look for `existing plugins <http://code.google.com/p/quodlibet/source/browse/#hg%2Fplugins>`_ that do something similar to what you want. ������������������������������������������������������������������������quodlibet-3.0.2/tests/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�015072� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_remote.py�����������������������������������������������������������0000644�0001750�0001750�00000006143�12173213426�021040� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import add, TestCase import os import unittest from gi.repository import Gtk from quodlibet import const from quodlibet import config from quodlibet.formats._audio import AudioFile from quodlibet.library import SongFileLibrary from quodlibet.player.nullbe import NullPlayer from quodlibet.qltk.remote import FSInterface, FIFOControl class TFSInterface(TestCase): def setUp(self): self.p = NullPlayer() self.fs = FSInterface(self.p) def do(self): while Gtk.events_pending(): Gtk.main_iteration() def test_init(self): self.do() self.failIf(os.path.exists(const.CURRENT)) def test_start(self): self.p.emit('song_started', AudioFile({"woo": "bar", "~#length": 10})) self.do() self.failUnless("woo=bar\n" in file(const.CURRENT).read()) def test_song_ended(self): self.p.emit('song-started', AudioFile({"woo": "bar", "~#length": 10})) self.do() self.p.emit('song-ended', {}, False) self.do() self.failIf(os.path.exists(const.CURRENT)) def tearDown(self): self.p.destroy() try: os.unlink(const.CURRENT) except EnvironmentError: pass add(TFSInterface) class TFIFOControl(TestCase): def setUp(self): config.init() self.p = NullPlayer() self.l = SongFileLibrary() self.w = Gtk.Window() self.fifo = FIFOControl(self.l, self.w, self.p) def tearDown(self): self.fifo.destroy() self.p.destroy() self.l.destroy() self.w.destroy() config.quit() def __send(self, command): f = open(const.CONTROL, "wb") f.write(command) f.close() while Gtk.events_pending(): Gtk.main_iteration() def test_player(self): self.__send("previous") self.__send("force_previous") self.__send("next") self.__send("pause") self.__send("play-pause") self.__send("stop") self.__send("volume +1000") self.__send("volume 40") self.__send("volume -10") #self.__send("seek -10") #self.__send("seek +10") #self.__send("seek 0") def test_misc(self): #self.__send("add-directory /dev/null") self.__send("add-file /dev/null") #self.__send("dump-playlist /dev/null") #self.__send("dump_queue /dev/null") #self.__send("enqueue /dev/null") self.__send("enqueue-files /dev/null") #self.__send("filter album=test") #self.__send("focus") #self.__send("hide-window") #self.__send("open-browser 1") #self.__send("order shuffle") self.__send("properties") #self.__send("queue 1") self.__send("quit") #self.__send("random album") self.__send("refresh") #self.__send("repeat 0") #self.__send("set-browser 1") self.__send("set-rating 0.5") #self.__send("show-window") #self.__send("song-list 1") #self.__send("status /dev/null") #self.__send("toggle-window") #self.__send("unqueue /dev/null") add(TFIFOControl) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_delete.py�����������������������������������������������������������0000644�0001750�0001750�00000000447�12173213426�021010� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.delete import DeleteDialog class TDeleteDialog(TestCase): def setUp(self): self.win = DeleteDialog(None, ["/dev/null"]) def test_ctr(self): pass def tearDown(self): self.win.destroy() add(TDeleteDialog) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_pyflakes.py��������������������������������������������������������������0000644�0001750�0001750�00000003505�12173213426�020327� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import glob import sys import subprocess import unittest try: from pyflakes.scripts import pyflakes except ImportError: pyflakes = None from tests import TestCase, add class FakeStream(object): # skip these, can be false positives BL = ["imported but unused", "redefinition of unused", "unable to detect undefined names", "redefinition of function"] def __init__(self): self.lines = [] def write(self, text): for p in self.BL: if p in text: return text = text.strip() if not text: return self.lines.append(text) def check(self): if self.lines: raise Exception("\n".join(self.lines)) class TPyFlakes(TestCase): def __check_path(self, path): old_stdout = sys.stdout stream = FakeStream() try: sys.stdout = stream for dirpath, dirnames, filenames in os.walk(path): for filename in filenames: if filename.endswith('.py'): pyflakes.checkPath(os.path.join(dirpath, filename)) finally: sys.stdout = old_stdout stream.check() def test_core(self): import quodlibet path = quodlibet.__path__[0] path = os.path.dirname(path) self.__check_path(path) def test_plugins(self): import quodlibet path = quodlibet.__path__[0] path = os.path.join(path, "../../plugins") self.__check_path(path) if pyflakes: add(TPyFlakes) else: print_w("pyflakes not found") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_information.py������������������������������������������������������0000644�0001750�0001750�00000002373�12161032160�022062� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.formats._audio import AudioFile from quodlibet.library import SongLibrary from quodlibet.qltk.information import Information import quodlibet.config def AF(*args, **kwargs): a = AudioFile(*args, **kwargs) a.sanitize() return a class TInformation(TestCase): def setUp(self): quodlibet.config.init() self.library = SongLibrary() def test_none(self): Information(self.library, []).destroy() def test_one(self): f = AF({"~filename": "/dev/null"}) Information(self.library, [f]).destroy() def test_two(self): f = AF({"~filename": "/dev/null"}) f2 = AF({"~filename": "/dev/null2"}) Information(self.library, [f, f2]).destroy() def test_album(self): f = AF({"~filename": "/dev/null", "album": "woo"}) f2 = AF({"~filename": "/dev/null2", "album": "woo"}) Information(self.library, [f, f2]).destroy() def test_artist(self): f = AF({"~filename": "/dev/null", "artist": "woo"}) f2 = AF({"~filename": "/dev/null2", "artist": "woo"}) Information(self.library, [f, f2]).destroy() def tearDown(self): self.library.destroy() quodlibet.config.quit() add(TInformation) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_views.py������������������������������������������������������������0000644�0001750�0001750�00000002423�12173212464�020700� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.views import AllTreeView, BaseView import quodlibet.config from gi.repository import Gtk class THintedTreeView(TestCase): def setUp(self): quodlibet.config.init() self.c = AllTreeView() def test_exists(self): self.failUnless(self.c) def tearDown(self): self.c.destroy() quodlibet.config.quit() add(THintedTreeView) class TBaseView(TestCase): def setUp(self): self.m = Gtk.ListStore(str) self.c = BaseView(self.m) def test_remove(self): self.m.append(row=["foo"]) self.c.remove_iters([self.m[0].iter]) self.failIf(len(self.m)) self.m.append(row=["foo"]) self.c.remove_iters([]) self.failUnless(len(self.m)) self.c.remove_paths([self.m[0].path]) self.failIf(len(self.m)) def test_select_func(self): self.m.append(row=["foo"]) self.m.append(row=["bar"]) self.failUnless(self.c.select_by_func(lambda r: True)) self.failIf(self.c.select_by_func(lambda r: False)) self.c.select_by_func(lambda r: False, scroll=False, one=True) def test_remove_select(self): self.c.remove_selection() def tearDown(self): self.c.destroy() add(TBaseView) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_data_editors.py�����������������������������������������������������0000644�0001750�0001750�00000001246�12161032160�022175� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from quodlibet import config from tests import TestCase, add from quodlibet.qltk.data_editors import MultiStringEditor class TMultiStringEditor(TestCase): def setUp(self): config.init() def test_no_strings(self): mse = MultiStringEditor("title") self.failUnlessEqual(mse.get_strings(), []) self.failUnlessEqual(mse.get_title(), "title") mse.destroy() def test_defaulting(self): defaults = ["one", "two three"] mse = MultiStringEditor("title", defaults) self.failUnlessEqual(mse.get_strings(), defaults) mse.destroy() def tearDown(self): config.quit() add(TMultiStringEditor) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_tracker.py����������������������������������������������������������0000644�0001750�0001750�00000004226�12173212464�021201� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from gi.repository import Gtk from quodlibet.formats._audio import AudioFile from quodlibet.player.nullbe import NullPlayer from quodlibet.qltk.tracker import SongTracker from quodlibet.library import SongLibrary class TSongTracker(TestCase): def setUp(self): self.p = NullPlayer() self.w = SongLibrary() self.s1 = AudioFile( {"~#playcount": 0, "~#skipcount": 0, "~#lastplayed": 10, "~filename": "foo", "~#length": 1.5}) self.s2 = AudioFile( {"~#playcount": 0, "~#skipcount": 0, "~#lastplayed": 10, "~filename": "foo", "~#length": 1.5}) self.cm = SongTracker(self.w, self.p, self) self.current = None def do(self): while Gtk.events_pending(): Gtk.main_iteration() def test_play(self): import time # Allow at least 2 second to elapse to simulate playing self.p.song = self.s1 self.p.paused = False time.sleep(2) self.do() self.p.emit('song-ended', self.s1, False) self.do() t = time.time() self.assertEquals(self.s1["~#playcount"], 1) self.assertEquals(self.s1["~#skipcount"], 0) self.failUnless(t - self.s1["~#lastplayed"] <= 1) def test_skip(self): self.p.emit('song-ended', self.s1, True) self.do() self.assertEquals(self.s1["~#playcount"], 0) self.assertEquals(self.s1["~#skipcount"], 1) self.failUnless(self.s1["~#lastplayed"], 10) def test_error(self): self.current = self.p.song = self.s1 self.p.error('Test error') self.do() self.assertEquals(self.s1["~#playcount"], 0) self.assertEquals(self.s1["~#skipcount"], 0) self.assertEquals(self.s1["~errors"].endswith('Test error\n\n'), True) self.failUnless(self.s1["~#lastplayed"], 10) def test_restart(self): self.current = self.s1 self.p.emit('song-ended', self.s1, True) self.do() self.assertEquals(self.s1["~#playcount"], 0) self.assertEquals(self.s1["~#skipcount"], 0) def tearDown(self): self.w.destroy() add(TSongTracker) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_edittags.py���������������������������������������������������������0000644�0001750�0001750�00000001475�12161032160�021343� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from tests import TestCase, add from quodlibet.qltk.edittags import * from quodlibet.library import SongLibrary import quodlibet.config class TEditTags(TestCase): def setUp(self): quodlibet.config.init() def tearDown(self): quodlibet.config.quit() def test_items(self): SplitValues("foo", "bar").destroy() SplitDisc("foo", "bar").destroy() SplitTitle("foo", "bar").destroy() SplitArranger("foo", "bar").destroy() def test_addtag_dialog(self): lib = SongLibrary() AddTagDialog(None, ["artist"], lib).destroy() add(TEditTags) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_browsers_albums.py�������������������������������������������������������0000644�0001750�0001750�00000007350�12173213426�021724� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from tests import TestCase, add from quodlibet import config from quodlibet.browsers.albums import AlbumList from quodlibet.formats._audio import AudioFile from quodlibet.library import SongLibrary, SongLibrarian SONGS = [ AudioFile({"album": "one", "artist": "piman", "~filename": "/dev/null"}), AudioFile({"album": "two", "artist": "mu", "~filename": "/dev/zero"}), AudioFile({"album": "three", "artist": "boris", "~filename": "/bin/ls"}), AudioFile({"album": "three", "artist": "boris", "~filename": "/bin/ls2"}), ] SONGS.sort() class TAlbumBrowser(TestCase): def setUp(self): config.init() library = SongLibrary() library.librarian = SongLibrarian() AlbumList.init(library) for af in SONGS: af.sanitize() library.add(SONGS) self.bar = AlbumList(library, True) w = Gtk.Window() w.add(self.bar) w.show_all() w.hide() self.w = w self._id = self.bar.connect("songs-selected", self._selected) self._id2 = self.bar.connect("activated", self._activated) self.bar.filter_text("") self._wait() self.songs = [] self.activated = False def _activated(self, albumlist): self.activated = True def _selected(self, albumlist, songs, *args): self.songs = songs def _wait(self): while Gtk.events_pending(): Gtk.main_iteration() def test_activated(self): view = self.bar.view view.row_activated(Gtk.TreePath((0,)), view.get_column(0)) self.failUnless(self.activated) def test_can_filter(self): self.failUnless(self.bar.can_filter(None)) self.failUnless(self.bar.can_filter("album")) self.failUnless(self.bar.can_filter("foobar")) self.failIf(self.bar.can_filter("~#length")) self.failIf(self.bar.can_filter("title")) def test_set_text(self): self.bar.filter_text("artist=piman") self._wait() self.failUnlessEqual(len(self.songs), 1) self.bar.filter_text("") self._wait() self.failUnlessEqual(set(self.songs), set(SONGS)) def test_filter_album(self): self.bar.filter_text("dsagfsag") self._wait() self.failUnlessEqual(len(self.songs), 0) self.bar.filter_text("") self._wait() self.bar.filter("album", ["one", "three"]) self._wait() self.failUnlessEqual(len(self.songs), 3) def test_filter_artist(self): self.bar.filter("artist", ["piman"]) self._wait() self.failUnlessEqual(len(self.songs), 1) self.failUnlessEqual(self.songs[0]("artist"), "piman") def test_header(self): self.failIf(self.bar.headers) def test_list(self): albums = self.bar.list_albums() self.failUnlessEqual(set(albums), set([s.album_key for s in SONGS])) self.bar.filter_albums([SONGS[0].album_key]) self._wait() self.failUnlessEqual(set([s.album_key for s in self.songs]), set([SONGS[0].album_key])) def test_active_filter(self): self.bar.filter("artist", ["piman"]) self._wait() self.failUnless(self.bar.active_filter(self.songs[0])) for s in SONGS: if s is not self.songs[0]: self.failIf(self.bar.active_filter(s)) def tearDown(self): self.bar.disconnect(self._id) self.bar.disconnect(self._id2) self.w.destroy() config.quit() add(TAlbumBrowser) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_queue.py������������������������������������������������������������0000644�0001750�0001750�00000001063�12173212464�020666� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from gi.repository import Gtk from quodlibet.player.nullbe import NullPlayer from quodlibet.qltk.queue import QueueExpander from quodlibet.library import SongLibrary import quodlibet.config class TQueueExpander(TestCase): def setUp(self): quodlibet.config.init() player = NullPlayer() self.queue = QueueExpander(Gtk.CheckMenuItem(), SongLibrary(), player) def test_ctr(self): pass def tearDown(self): self.queue.destroy() quodlibet.config.quit() add(TQueueExpander) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_cbes.py�������������������������������������������������������������0000644�0001750�0001750�00000010216�12173212464�020456� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import os import tempfile from quodlibet.qltk.cbes import ComboBoxEntrySave, StandaloneEditor import quodlibet.config class TComboBoxEntrySave(TestCase): memory = "pattern 1\npattern 2\n" saved = "pattern text\npattern name\n" def setUp(self): quodlibet.config.init() self.fname = tempfile.mkstemp()[1] f = file(self.fname, "w") f.write(self.memory) f.close() f = file(self.fname + ".saved", "w") f.write(self.saved) f.close() self.cbes = ComboBoxEntrySave(self.fname, count=2) self.cbes2 = ComboBoxEntrySave(self.fname, count=2) def test_equivalence(self): model1 = self.cbes.get_model() model2 = self.cbes2.get_model() self.failUnlessEqual(model1, model2) rows1 = list(model1) rows2 = list(model2) for row1, row2 in zip(rows1, rows2): self.failUnlessEqual(row1[0], row2[0]) self.failUnlessEqual(row1[1], row2[1]) self.failUnlessEqual(row1[2], row2[2]) def test_text_changed_signal(self): called = [0] def cb(*args): called[0] += 1 def get_count(): c = called[0] called[0] = 0 return c self.cbes.connect("text-changed", cb) entry = self.cbes.get_child() entry.set_text("foo") self.failUnlessEqual(get_count(), 1) self.cbes.prepend_text("bar") # in case the model got changed but the entry is still the same # the text-changed signal should not be triggered self.failUnlessEqual(entry.get_text(), "foo") self.failUnlessEqual(get_count(), 0) def test_shared_model(self): self.cbes.prepend_text("a test") self.test_equivalence() def test_initial_size(self): # 1 saved, Edit, separator, 2 remembered self.failUnlessEqual(5, len(self.cbes.get_model())) def test_prepend_text(self): self.cbes.prepend_text("pattern 3") self.memory = "pattern 3\npattern 1\n" self.test_save() def test_save(self): self.cbes.write() self.failUnlessEqual(self.memory, file(self.fname).read()) self.failUnlessEqual(self.saved, file(self.fname + ".saved").read()) def test_set_text_then_prepend(self): self.cbes.get_child().set_text("foobar") self.cbes.prepend_text("foobar") self.memory = "foobar\npattern 1\n" self.test_save() def tearDown(self): self.cbes.destroy() self.cbes2.destroy() os.unlink(self.fname) os.unlink(self.fname + ".saved") quodlibet.config.quit() class TStandaloneEditor(TestCase): TEST_KV_DATA = [("Search Foo", "https://foo.com/search?q=<artist>-<title>")] def setUp(self): quodlibet.config.init() self.fname = tempfile.mkstemp()[1] f = file(self.fname + ".saved", "w") f.write("%s\n%s\n" % (self.TEST_KV_DATA[0][1], self.TEST_KV_DATA[0][0])) f.close() self.sae = StandaloneEditor(self.fname, "test", None, None) def test_constructor(self): self.failUnless(self.sae.model) data = [(row[1], row[0]) for row in self.sae.model] self.failUnlessEqual(data, self.TEST_KV_DATA) def test_load_values(self): values = StandaloneEditor.load_values(self.fname + ".saved") self.failUnlessEqual(self.TEST_KV_DATA, values) def test_defaults(self): defaults = [("Dot-com Dream", "http://<artist>.com")] try: os.unlink(self.fname) except OSError: pass # Now create a new SAE without saved results and use defaults self.fname = "foo" self.sae.destroy() self.sae = StandaloneEditor(self.fname, "test2", defaults, None) self.sae.write() data = [(row[1], row[0]) for row in self.sae.model] self.failUnlessEqual(defaults, data) def tearDown(self): self.sae.destroy() try: os.unlink(self.fname) os.unlink(self.fname + ".saved") except OSError: pass quodlibet.config.quit() add(TComboBoxEntrySave) add(TStandaloneEditor) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_tagscombobox.py�����������������������������������������������������0000644�0001750�0001750�00000002106�12161032160�022216� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.formats import USEFUL_TAGS class TagsCombo(TestCase): def setUp(self): self.all = self.Kind() self.some = self.Kind(["artist", "album", "~people", "foobar"]) def test_none(self): self.failUnlessRaises(ValueError, self.Kind, []) def test_some(self): self.some.set_active(2) self.failUnlessEqual(self.some.tag, "foobar") def test_all(self): tags = list(USEFUL_TAGS) tags.sort() for i, value in enumerate(tags): self.all.set_active(i) self.failUnlessEqual(self.all.tag, value) def tearDown(self): self.all.destroy() self.some.destroy() class TTagsComboBox(TagsCombo): from quodlibet.qltk.tagscombobox import TagsComboBox as Kind add(TTagsComboBox) class TTagsComboBoxEntry(TagsCombo): from quodlibet.qltk.tagscombobox import TagsComboBoxEntry as Kind def test_custom(self): self.all.get_child().set_text("a new tag") self.failUnlessEqual(self.all.tag, "a new tag") add(TTagsComboBoxEntry) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_songmodel.py��������������������������������������������������������0000644�0001750�0001750�00000027035�12173212464�021540� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from gi.repository import Gtk from quodlibet.player.nullbe import NullPlayer from quodlibet.formats._audio import AudioFile from quodlibet.qltk.songmodel import PlaylistModel, PlaylistMux from quodlibet.qltk.playorder import ORDERS, Order def do_events(): while Gtk.events_pending(): Gtk.main_iteration() class TPlaylistModel(TestCase): def setUp(self): self.pl = PlaylistModel() self.pl.set(range(10)) do_events() self.failUnless(self.pl.current is None) def test_current_recover(self): self.pl.set(range(10)) self.pl.next() self.failUnlessEqual(self.pl.current, 0) self.pl.set(range(20, 30)) self.failUnless(self.pl.current is None) self.pl.current_iter = self.pl.current_iter self.failUnless(self.pl.current is None) self.pl.set(range(10)) self.failUnlessEqual(self.pl.current, 0) def test_isempty(self): self.failIf(self.pl.is_empty()) self.pl.clear() self.failUnless(self.pl.is_empty()) def test_get(self): self.assertEqual(self.pl.get(), range(10)) self.pl.set(range(12)) Gtk.main_iteration_do(False) self.assertEqual(self.pl.get(), range(12)) def test_next(self): self.pl.next() self.failUnlessEqual(self.pl.current, 0) self.pl.next() self.failUnlessEqual(self.pl.current, 1) self.pl.go_to(9) self.failUnlessEqual(self.pl.current, 9) self.pl.next() self.failUnless(self.pl.current is None) def test_find(self): self.failUnlessEqual(self.pl[self.pl.find(8)][0], 8) def test_find_not_there(self): self.failUnless(self.pl.find(22) is None) def test_find_all(self): to_find = [1, 4, 5, 8, 9] iters = self.pl.find_all(to_find) for i, v in zip(iters, to_find): self.failUnlessEqual(self.pl[i][0], v) def test_find_all_some_missing(self): to_find = [1, 4, 18, 5, 8, 9, -1] iters = self.pl.find_all(to_find) to_find.remove(18) to_find.remove(-1) for i, v in zip(iters, to_find): self.failUnlessEqual(self.pl[i][0], v) def test_find_all_empty(self): to_find = [100, 200, -11] iters = self.pl.find_all(to_find) self.failUnlessEqual(iters, []) def test_contains(self): self.failUnless(1 in self.pl) self.failUnless(8 in self.pl) self.failIf(22 in self.pl) def test_removal(self): self.pl.go_to(8) for i in range(3, 8): self.pl.remove(self.pl.find(i)) self.pl.next() self.failUnlessEqual(self.pl.current, 9) def test_next_repeat(self): self.pl.repeat = True self.pl.go_to(3) for i in range(9): self.pl.next() self.assertEqual(self.pl.current, 2) for i in range(12): self.pl.next() self.assertEqual(self.pl.current, 4) def test_shuffle(self): self.pl.order = ORDERS[1](self.pl) for i in range(5): numbers = [self.pl.current for i in range(10) if self.pl.next() or True] self.assertNotEqual(numbers, range(10)) numbers.sort() self.assertEqual(numbers, range(10)) self.pl.next() self.assertEqual(self.pl.current, None) def test_weighted(self): self.pl.order = ORDERS[2](self.pl) r0 = AudioFile({'~#rating': 0}) r1 = AudioFile({'~#rating': 1}) r2 = AudioFile({'~#rating': 2}) r3 = AudioFile({'~#rating': 3}) self.pl.set([r0, r1, r2, r3]) Gtk.main_iteration_do(False) songs = [self.pl.current for i in range(1000) if self.pl.next() or True] self.assert_(songs.count(r1) > songs.count(r0)) self.assert_(songs.count(r2) > songs.count(r1)) self.assert_(songs.count(r3) > songs.count(r2)) def test_shuffle_repeat(self): self.pl.order = ORDERS[1](self.pl) self.pl.repeat = True numbers = [self.pl.current for i in range(30) if self.pl.next() or True] allnums = range(10) * 3 allnums.sort() self.assertNotEqual(numbers, allnums) numbers.sort() self.assertEqual(numbers, allnums) def test_onesong(self): self.pl.go_to(3) self.pl.order = ORDERS[3](self.pl) self.failUnlessEqual(self.pl.current, 3) self.pl.next() self.failUnlessEqual(self.pl.current, 4) self.pl.next_ended() self.failUnlessEqual(self.pl.current, None) def test_onesong_repeat(self): self.pl.go_to(3) self.pl.order = ORDERS[3](self.pl) self.pl.repeat = True self.failUnlessEqual(self.pl.current, 3) self.pl.next() self.failUnlessEqual(self.pl.current, 4) self.pl.next_ended() self.failUnlessEqual(self.pl.current, 4) def test_previous(self): self.pl.go_to(2) self.failUnlessEqual(self.pl.current, 2) self.pl.previous() self.failUnlessEqual(self.pl.current, 1) self.pl.previous() self.failUnlessEqual(self.pl.current, 0) self.pl.previous() self.failUnlessEqual(self.pl.current, 0) def test_go_to_saves_current(self): self.pl.go_to(5) self.failUnlessEqual(self.pl.current, 5) self.pl.set([5, 10, 15, 20]) Gtk.main_iteration_do(False) self.pl.next() self.failUnlessEqual(self.pl.current, 10) def test_go_to_order(self): self.pl.order = ORDERS[1](self.pl) for i in range(5): self.pl.go_to(5) self.failUnlessEqual(self.pl.current, 5) self.pl.go_to(1) self.failUnlessEqual(self.pl.current, 1) def test_go_to(self): class SetOrder(Order): # most orders don't change iter here, # so make sure this gets handled right def set_explicit(self, playlist, iter): return playlist.iter_next(iter) def set_implicit(self, playlist, iter): return playlist.iter_next(playlist.iter_next(iter)) self.pl.order = SetOrder(self.pl) self.failUnlessEqual(self.pl[self.pl.go_to(5, True)][0], 6) self.failUnlessEqual(self.pl[self.pl.go_to(5, False)][0], 7) def test_go_to_none(self): for i in range(5): self.pl.go_to(None) self.failUnlessEqual(self.pl.current, None) self.pl.next() self.failUnlessEqual(self.pl.current, 0) def test_reset(self): self.pl.go_to(5) self.failUnlessEqual(self.pl.current, 5) self.pl.reset() self.failUnlessEqual(self.pl.current, 0) def test_reset_order(self): self.pl.order = ORDERS[0](self.pl) self.pl.go_to(5) self.failUnlessEqual(self.pl.current, 5) self.pl.reset() self.failUnlessEqual(self.pl.current, 0) def test_restart(self): self.pl.go_to(1) self.pl.set([101, 102, 103, 104]) Gtk.main_iteration_do(False) self.pl.next() self.failUnlessEqual(self.pl.current, 101) def test_next_nosong_536(self): self.pl.go_to(1) self.pl.repeat = True self.pl.order = ORDERS[1](self.pl) self.pl.set([]) Gtk.main_iteration_do(False) self.pl.next() def test_clear_current(self): self.pl.go_to(1) self.pl.clear() self.pl.go_to(None) def shutDown(self): self.pl.destroy() add(TPlaylistModel) class TPlaylistMux(TestCase): def setUp(self): self.q = PlaylistModel() self.pl = PlaylistModel() self.p = NullPlayer() self.mux = PlaylistMux(self.p, self.q, self.pl) self.p.setup(self.mux, None, 0) self.failUnless(self.pl.current is None) def test_only_pl(self): self.pl.set(range(10)) do_events() self.failUnless(self.mux.current is None) songs = [self.next() for i in range(10)] self.failUnlessEqual(songs, range(10)) self.next() self.failUnless(self.mux.current is None) def test_only_q(self): self.q.set(range(10)) do_events() self.failUnless(self.mux.current is None) songs = [self.next() for i in range(10)] self.failUnlessEqual(songs, range(10)) self.next() self.failUnless(self.mux.current is None) def test_mixed(self): self.q.set(range(5)) self.pl.set(range(5, 10)) do_events() self.failUnless(self.mux.current is None) songs = [self.next() for i in range(10)] self.failUnlessEqual(songs, range(10)) self.next() self.failUnless(self.mux.current is None) def test_newplaylist(self): self.pl.set(range(5, 10)) do_events() self.failUnless(self.mux.current is None) self.mux.go_to(7) self.failUnlessEqual(self.mux.current, 7) self.pl.set([3, 5, 12, 11]) do_events() self.failUnlessEqual(self.mux.current, None) self.pl.set([19, 8, 12, 3]) do_events() self.failUnlessEqual(self.mux.current, None) self.pl.set([3, 7, 9, 11]) do_events() self.mux.next() self.failUnlessEqual(self.mux.current, 9) def test_halfway(self): self.pl.set(range(10)) do_events() self.failUnless(self.mux.current is None) songs = [self.next() for i in range(5)] self.q.set(range(100, 105)) do_events() songs.extend([self.next() for i in range(10)]) self.failUnlessEqual( songs, [0, 1, 2, 3, 4, 100, 101, 102, 103, 104, 5, 6, 7, 8, 9]) self.next() self.failUnless(self.mux.current is None) def test_removal(self): self.pl.set(range(0, 5)) self.q.set(range(10, 15)) do_events() songs = [self.next() for i in range(3)] self.q.remove(self.q.find(14)) self.q.remove(self.q.find(13)) songs.extend([self.next() for i in range(5)]) self.failUnlessEqual(songs, [10, 11, 12, 0, 1, 2, 3, 4]) def next(self): self.mux.next() song = self.mux.current self.p.emit('song-started', self.mux.current) do_events() return song def test_goto(self): self.pl.set(range(10)) self.q.set(range(10, 20)) do_events() self.failUnless(self.mux.current is None) self.mux.go_to(5) self.failUnlessEqual(self.mux.current, 5) self.mux.go_to(2) self.failUnlessEqual(self.mux.current, 2) self.failUnlessEqual(self.next(), 10) self.mux.go_to(7) self.failUnlessEqual(self.mux.current, 7) self.failUnlessEqual(self.next(), 11) def test_random_queue_666(self): for i in range(5): self.mux.go_to(None) self.pl.set([1]) do_events() self.failUnless(self.mux.current is None) self.q.order = ORDERS[1](self.pl) self.failUnless(self.next() == 1) self.q.set([10, 11]) do_events() value = self.next() self.failUnless( value in [10, 11], "got %r, expected 10 or 11" % value) if value == 10: next = 11 else: next = 10 self.failUnlessEqual(self.next(), next) def test_sourced(self): self.pl.set(range(10)) self.q.set(range(10)) self.mux.go_to(None) self.failUnless(self.pl.sourced) self.q.go_to(1) self.p.next() self.failIf(self.pl.sourced) def tearDown(self): self.p.destroy() add(TPlaylistMux) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_util_json_data.py��������������������������������������������������������0000644�0001750�0001750�00000005521�12161032160�021477� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import json from tempfile import NamedTemporaryFile from quodlibet.util.json_data import JSONObjectDict, JSONObject from tests import TestCase, add class TJsonData(TestCase): class WibbleData(JSONObject): """Test subclass""" def __init__(self, name=None, pattern=None, wibble=False): JSONObject.__init__(self, name) self.pattern = pattern self.wibble = wibble self._dont_wibble = not wibble WIBBLE_JSON_STR = """{ "foo":{"name":"foo", "pattern":"echo '<~artist~title>.mp3'"}, "bar":{"name":"bar", "wibble":true} }""" def test_JSONObject(self): blah = JSONObject('blah') self.failUnlessEqual(blah.name, 'blah') self.failUnlessEqual({"name": "blah"}, blah.data) self.failUnlessEqual("{\"name\": \"blah\"}", blah.json) def test_nameless_construction(self): try: self.failIf(JSONObject()) except TypeError: pass else: self.fail("Name should be enforced at constructor") def test_subclass(self): blah = self.WibbleData('blah') self.failUnlessEqual(blah.name, 'blah') exp = {"name": "blah", "pattern":None, "wibble": False} self.failUnlessEqual(exp, blah.data) self.failUnlessEqual(json.dumps(exp), blah.json) def test_from_invalid_json(self): # Invalid JSON jd = JSONObjectDict.from_json(JSONObject, '{"foo":{}') self.failIf(jd) # Valid but unexpected Command field self.failIf(JSONObjectDict.from_json(JSONObject, '{"bar":{"name":"bar", "invalid":"foo"}')) def test_subclass_from_json(self): coms = JSONObjectDict.from_json(self.WibbleData, self.WIBBLE_JSON_STR) self.failUnlessEqual(len(coms), 2) self.failUnlessEqual(coms['foo'].__class__, self.WibbleData) def test_save_all(self): data = JSONObjectDict.from_json(self.WibbleData, self.WIBBLE_JSON_STR) with NamedTemporaryFile(suffix=".json") as f: ret = data.save(f.name) jstr = f.read() # Check we also return the string as documented... self.failUnlessEqual(jstr, ret) # Check we have the right number of items self.failUnlessEqual(len(json.loads(jstr)), len(data)) # Check them one by one (for convenience of debugging) parsed = JSONObjectDict.from_json(self.WibbleData, jstr) for o in data.values(): self.failUnlessEqual(parsed[o.name], o) def test_from_list(self): baz_man = JSONObject("baz man!") lst = [JSONObject("foo"), JSONObject("bar"), baz_man] data = JSONObjectDict.from_list(lst) self.failUnlessEqual(len(data), len(lst)) self.failUnless("baz man!" in data) self.failUnlessEqual(baz_man, data["baz man!"]) add(TJsonData)�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_formats__audio.py��������������������������������������������������������0000644�0001750�0001750�00000056230�12161032160�021476� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import os from quodlibet import config from quodlibet.util import HashableDict from quodlibet.formats._audio import AudioFile from quodlibet.formats._audio import INTERN_NUM_DEFAULT bar_1_1 = AudioFile({ "~filename": "/fakepath/1", "title": "A song", "discnumber": "1/2", "tracknumber": "1/3", "artist": "Foo", "album": "Bar"}) bar_1_2 = AudioFile({ "~filename": "/fakepath/2", "title": "Perhaps another", "discnumber": "1", "tracknumber": "2/3", "artist": "Lali-ho!", "album": "Bar", "date": "2004-12-12", "originaldate": "2005-01-01", "~#filesize": 1024**2}) bar_2_1 = AudioFile({ "~filename": "does not/exist", "title": "more songs", "discnumber": "2/2", "tracknumber": "1", "artist": "Foo\nI have two artists", "album": "Bar", "lyricist": "Foo", "composer": "Foo", "performer": "I have two artists"}) quux = AudioFile({ "~filename": "tests/data/asong.ogg", "album": "Quuxly" }) num_call = AudioFile({"custom": "0.3"}) class TAudioFile(TestCase): def setUp(self): file(quux["~filename"], "w") def test_sort(self): l = [quux, bar_1_2, bar_2_1, bar_1_1] l.sort() self.assertEqual(l, [bar_1_1, bar_1_2, bar_2_1, quux]) self.assertEqual(quux, quux) self.assertEqual(bar_1_1, bar_1_1) self.assertNotEqual(bar_2_1, bar_1_2) def test_realkeys(self): self.failIf("artist" in quux.realkeys()) self.failIf("~filename" in quux.realkeys()) self.failUnless("album" in quux.realkeys()) def test_trackdisc(self): self.failUnlessEqual(bar_1_1("~#track"), 1) self.failUnlessEqual(bar_1_1("~#disc"), 1) self.failUnlessEqual(bar_1_1("~#tracks"), 3) self.failUnlessEqual(bar_1_1("~#discs"), 2) self.failIf(bar_1_2("~#discs")) self.failIf(bar_2_1("~#tracks")) def test_call(self): # real keys should lookup the same for key in bar_1_1.realkeys(): self.failUnlessEqual(bar_1_1[key], bar_1_1(key)) # fake/generated key checks self.failIf(quux("not a key")) self.failUnlessEqual(quux("not a key", "foo"), "foo") self.failUnlessEqual(quux("artist"), "") self.failUnlessEqual(quux("~basename"), "asong.ogg") self.failUnlessEqual(quux("~dirname"), "tests/data") self.failUnlessEqual(quux("title"), "asong.ogg [Unknown]") self.failUnlessEqual(bar_1_1("~#disc"), 1) self.failUnlessEqual(bar_1_2("~#disc"), 1) self.failUnlessEqual(bar_2_1("~#disc"), 2) self.failUnlessEqual(bar_1_1("~#track"), 1) self.failUnlessEqual(bar_1_2("~#track"), 2) self.failUnlessEqual(bar_2_1("~#track"), 1) def test_year(self): self.failUnlessEqual(bar_1_2("~year"), "2004") self.failUnlessEqual(bar_1_2("~#year"), 2004) self.failUnlessEqual(bar_1_1("~#year", 1999), 1999) def test_filesize(self): self.failUnlessEqual(bar_1_2("~filesize"), "1.00 MB") self.failUnlessEqual(bar_1_2("~#filesize"), 1024**2) def test_originalyear(self): self.failUnlessEqual(bar_1_2("~originalyear"), "2005") self.failUnlessEqual(bar_1_2("~#originalyear"), 2005) self.failUnlessEqual(bar_1_1("~#originalyear", 1999), 1999) def test_call_people(self): self.failUnlessEqual(quux("~people"), "") self.failUnlessEqual(bar_1_1("~people"), "Foo") self.failUnlessEqual(bar_1_2("~people"), "Lali-ho!") self.failUnlessEqual(bar_2_1("~people"), "Foo\nI have two artists") def test_call_multiple(self): for song in [quux, bar_1_1, bar_2_1]: self.failUnlessEqual(song("~~people"), song("~people")) self.failUnlessEqual(song("~title~people"), song("title")) self.failUnlessEqual(song("~title~~people"), song("~title~artist")) self.failUnlessEqual(song("~title~~#tracks"), song("~title~~#tracks")) def test_call_numeric(self): self.failUnlessAlmostEqual(num_call("~#custom"), 0.3) self.failUnlessEqual(num_call("~#blah~foo", 0), 0) def test_list(self): for key in bar_1_1.realkeys(): self.failUnlessEqual(bar_1_1.list(key), [bar_1_1(key)]) self.failUnlessEqual(quux.list("artist"), []) self.failUnlessEqual(quux.list("title"), [quux("title")]) self.failUnlessEqual(quux.list("not a key"), []) self.failUnlessEqual(len(bar_2_1.list("artist")), 2) self.failUnlessEqual(bar_2_1.list("artist"), bar_2_1["artist"].split("\n")) def test_list_separate(self): for key in bar_1_1.realkeys(): self.failUnlessEqual(bar_1_1.list_separate(key), [bar_1_1(key)]) self.failUnlessEqual(bar_2_1.list_separate("~artist~album"), ['Foo - Bar', 'I have two artists - Bar']) self.failUnlessEqual(bar_2_1.list_separate("~artist~~#track"), ['Foo - 1', 'I have two artists - 1']) def test_comma(self): for key in bar_1_1.realkeys(): self.failUnlessEqual(bar_1_1.comma(key), bar_1_1(key)) self.failUnless(", " in bar_2_1.comma("artist")) def test_exist(self): self.failIf(bar_2_1.exists()) self.failUnless(quux.exists()) def test_valid(self): self.failIf(bar_2_1.valid()) quux["~#mtime"] = 0 self.failIf(quux.valid()) quux["~#mtime"] = os.path.getmtime(quux["~filename"]) self.failUnless(quux.valid()) os.utime(quux["~filename"], (quux["~#mtime"], quux["~#mtime"] - 1)) self.failIf(quux.valid()) quux["~#mtime"] = os.path.getmtime(quux["~filename"]) self.failUnless(quux.valid()) os.utime(quux["~filename"], (quux["~#mtime"], quux["~#mtime"] - 1)) quux.sanitize() self.failUnless(quux.valid()) def test_can_change(self): self.failIf(quux.can_change("~foobar")) self.failIf(quux.can_change("=foobar")) self.failIf(quux.can_change("foo=bar")) self.failIf(quux.can_change("")) self.failUnless(quux.can_change("foo bar")) os.chmod(quux["~filename"], 0444) self.failIf(quux.can_change("foo bar")) os.chmod(quux["~filename"], 0644) self.failUnless(quux.can_change("foo bar")) def test_rename(self): old_fn = quux("~basename") new_fn = "anothersong.mp3" dir = os.getcwd() + "/tests/data/" self.failUnless(quux.exists()) quux.rename(new_fn) self.failIf(os.path.exists(dir + old_fn)) self.failUnless(quux.exists()) quux.rename(old_fn) self.failIf(os.path.exists(dir + new_fn)) self.failUnless(quux.exists()) # move out of parent dir and back quux.rename("/tmp/more_test_data") self.failIf(os.path.exists(dir + old_fn)) self.failUnless(quux.exists()) quux.rename(dir + old_fn) self.failUnless(quux.exists()) def test_rename_to_existing(self): quux.rename(quux("~basename")) self.failUnlessRaises(ValueError, quux.rename, "/dev/null") self.failUnlessRaises(ValueError, quux.rename, "silence-44-s.ogg") def test_website(self): song = AudioFile() song["comment"] = "www.foo" song["contact"] = "eh@foo.org" self.failUnlessEqual(song.website(), "www.foo") song["contact"] = "https://www.foo.org" self.failUnlessEqual(song.website(), "https://www.foo.org") song["website"] = "foo\nhttps://another.com" self.failUnlessEqual(song.website(), "foo") song = AudioFile({"artist": "Artist", "album": "Album"}) for value in song.values(): self.failUnless(value in song.website()) song["labelid"] = "QL-12345" self.failIf(song["artist"] in song.website()) self.failUnless(song["labelid"] in song.website()) def test_sanitize(self): q = AudioFile(quux) b = AudioFile(bar_1_1) q.sanitize() b.pop('~filename') self.failUnlessRaises(ValueError, b.sanitize) n = AudioFile({"artist": u"foo\0bar", "title": u"baz\0", "~filename": "whatever"}) n.sanitize() self.failUnlessEqual(n["artist"], "foo\nbar") self.failUnlessEqual(n["title"], "baz") def test_performers(self): q = AudioFile([("performer:vocals", "A"), ("performer:guitar", "B"), ("performer", "C")]) self.failUnless("A (Vocals)" in q.list("~performers")) self.failUnless("B (Guitar)" in q.list("~performers")) self.failUnless("C" in q.list("~performers")) self.failUnless("A (Vocals)" in q.list("~people")) self.failUnless("B (Guitar)" in q.list("~people")) self.failUnlessEqual(len(q.list("~performers")), 3) def test_to_dump(self): dump = bar_1_1.to_dump() num = len(set(bar_1_1.keys()) | INTERN_NUM_DEFAULT) self.failUnlessEqual(dump.count("\n"), num + 2) for key, value in bar_1_1.items(): self.failUnless(key in dump) self.failUnless(value in dump) for key in INTERN_NUM_DEFAULT: self.failUnless(key in dump) n = AudioFile() n.from_dump(dump) self.failUnless(set(dump.split("\n")) == set(n.to_dump().split("\n"))) def test_to_dump_long(self): b = AudioFile(bar_1_1); b["~#length"] = 200000000000L dump = b.to_dump() num = len(set(bar_1_1.keys()) | INTERN_NUM_DEFAULT) self.failUnlessEqual(dump.count("\n"), num + 2) n = AudioFile() n.from_dump(dump) self.failUnless(set(dump.split("\n")) == set(n.to_dump().split("\n"))) def test_add(self): song = AudioFile() self.failIf("foo" in song) song.add("foo", "bar") self.failUnlessEqual(song["foo"], "bar") song.add("foo", "another") self.failUnlessEqual(song.list("foo"), ["bar", "another"]) def test_remove(self): song = AudioFile() song.add("foo", "bar") song.add("foo", "another") song.add("foo", "one more") song.remove("foo", "another") self.failUnlessEqual(song.list("foo"), ["bar", "one more"]) song.remove("foo", "bar") self.failUnlessEqual(song.list("foo"), ["one more"]) song.remove("foo", "one more") self.failIf("foo" in song) song.add("foo", "bar") song.add("foo", "another") song.add("foo", "one more") song.remove("foo", "not in list") self.failIf("foo" in song) def test_change(self): song = AudioFile() song.add("foo", "bar") song.add("foo", "another") song.change("foo", "bar", "one more") self.failUnlessEqual(song.list("foo"), ["one more", "another"]) song.change("foo", "does not exist", "finally") self.failUnlessEqual(song["foo"], "finally") song.change("foo", "finally", "we're done") self.failUnlessEqual(song["foo"], "we're done") def test_bookmarks_none(self): self.failUnlessEqual([], AudioFile().bookmarks) def test_bookmarks_simple(self): af = AudioFile({"~bookmark": "1:20 Mark 1"}) self.failUnlessEqual([(80, "Mark 1")], af.bookmarks) def test_bookmarks_two(self): af = AudioFile({"~bookmark": "1:40 Mark 2\n1:20 Mark 1"}) self.failUnlessEqual([(80, "Mark 1"), (100, "Mark 2")], af.bookmarks) def test_bookmark_invalid(self): af = AudioFile({"~bookmark": ("Not Valid\n1:40 Mark 2\n" "-20 Not Valid 2\n1:20 Mark 1")}) self.failUnlessEqual( [(80, "Mark 1"), (100, "Mark 2"), (-1, "Not Valid"), (-1, "-20 Not Valid 2")], af.bookmarks) def test_set_bookmarks_none(self): af = AudioFile({"bookmark": "foo"}) af.bookmarks = [] self.failUnlessEqual([], AudioFile().bookmarks) self.failIf("~bookmark" in af) def test_set_bookmarks_simple(self): af = AudioFile() af.bookmarks = [(120, "A mark"), (140, "Mark twain")] self.failUnlessEqual(af["~bookmark"], "2:00 A mark\n2:20 Mark twain") def test_set_bookmarks_invalid_value(self): self.failUnlessRaises( ValueError, setattr, AudioFile(), 'bookmarks', "huh?") def test_set_bookmarks_invalid_time(self): self.failUnlessRaises( TypeError, setattr, AudioFile(), 'bookmarks', [("notint", "!")]) def test_set_bookmarks_unrealistic_time(self): self.failUnlessRaises( ValueError, setattr, AudioFile(), 'bookmarks', [(-1, "!")]) def test_album_key(self): album_key_tests = [ ({}, ('', '')), ({'album': 'foo'}, (('foo',), '')), ({'labelid': 'foo'}, ('', 'foo')), ({'musicbrainz_albumid': 'foo'}, ('', 'foo')), ({'album': 'foo', 'labelid': 'bar'}, (('foo',), 'bar')), ({'album': 'foo', 'labelid': 'bar', 'musicbrainz_albumid': 'quux'}, (('foo',), 'bar')) ] for tags, expected in album_key_tests: afile = AudioFile(**tags) afile.sanitize('/dir/fn') self.failUnlessEqual(afile.album_key, expected) def test_album_id_values(self): album_key_tests = [ ({}, {}), ({'album': 'foo'}, None), ({'labelid': 'foo'}, None), ({'musicbrainz_albumid': 'foo'}, None), ({'album': 'foo', 'labelid': 'bar'}, {'labelid': 'bar'}), # Musicbrainz is our current "favourite" tag ({'album': 'foo', 'labelid': 'bar', 'musicbrainz_albumid': 'quux'}, {'musicbrainz_albumid': 'quux'}), # albumartist > album in this case ({'album': 'foo', 'albumartist': 'bar', 'artist': 'baz'}, {'album': 'foo', 'albumartist': 'bar'}), # Fail as there's nothing to specify the album ({'albumartist': 'bar', 'artist': 'baz', 'title': 'foo'}, {}) ] for tags, expected in album_key_tests: if expected is None: expected = tags afile = AudioFile(**tags) afile.sanitize('/dir/fn') self.failUnlessEqual(afile.album_id_values, HashableDict(expected)) def test_album_id_values_with_artist(self): album_key_tests = [ # The artist should now appear ({'album': 'foo', 'artist': 'bar', 'title': 'baz'}, {'album': 'foo', 'artist': 'bar'}), # But albumartist > album still ({'album': 'foo', 'albumartist': 'bar', 'artist': 'baz'}, {'album': 'foo', 'albumartist': 'bar'}), ] for tags, expected in album_key_tests: if expected is None: expected = tags afile = AudioFile(**tags) afile.sanitize('/dir/fn') # Use alternate version, that includes artist in dict self.failUnlessEqual(afile._album_id_values(True), HashableDict(expected)) def test_eq_ne(self): self.failIf(AudioFile({"a": "b"}) == AudioFile({"a": "b"})) self.failUnless(AudioFile({"a": "b"}) != AudioFile({"a": "b"})) def test_invalid_fs_encoding(self): # issue 798 a = AudioFile() a["~filename"] = "/\xf6\xe4\xfc/\xf6\xe4\xfc.ogg" # latin 1 encoded a.sort_by_func("~filename")(a) a.sort_by_func("~basename")(a) # windows a["~filename"] = "/\xf6\xe4\xfc/\xf6\xe4\xfc.ogg".decode("latin-1") a.sort_by_func("~filename")(a) a.sort_by_func("~basename")(a) a.sort_by_func("~dirname")(a) def test_sort_cache(self): copy = AudioFile(bar_1_1) sort_1 = tuple(copy.sort_key) copy["title"] = copy["title"] + "something" sort_2 = tuple(copy.sort_key) self.failIfEqual(sort_1, sort_2) album_sort_1 = tuple(copy.album_key) copy["album"] = copy["album"] + "something" sort_3 = tuple(copy.sort_key) self.failIfEqual(sort_2, sort_3) album_sort_2 = tuple(copy.album_key) self.failIfEqual(album_sort_1, album_sort_2) def test_cache_attributes(self): x = AudioFile() x.multisong = not x.multisong x["a"] = "b" # clears cache # attribute should be unchanged self.failIfEqual(AudioFile().multisong, x.multisong) def test_sort_func(self): tags = [lambda s: s("foo"), "artistsort", "albumsort", "~filename", "~format", "discnumber", "~#track"] for tag in tags: f = AudioFile.sort_by_func(tag) f(bar_1_1) f(bar_1_2) f(bar_2_1) def test_uri(self): # On windows where we have unicode paths (windows encoding is utf-16) # we need to encode to utf-8 first, then escape. # On linux we take the byte stream and escape it. # see g_filename_to_uri f = AudioFile({"~filename": "/\x87\x12.mp3", "title": "linux"}) self.failUnlessEqual(f("~uri"), "file:///%87%12.mp3") f = AudioFile({"~filename": u"/\xf6\xe4.mp3", "title": "win"}) self.failUnlessEqual(f("~uri"), "file:///%C3%B6%C3%A4.mp3") def tearDown(self): os.unlink(quux["~filename"]) add(TAudioFile) class Treplay_gain(TestCase): # -6dB is approximately equal to half magnitude minus_6db = 0.501187234 def setUp(self): self.rg_data = {"replaygain_album_gain": "-1.00 dB", "replaygain_album_peak": "1.1", "replaygain_track_gain": "+1.0000001 dB", "replaygain_track_peak": "0.9"} self.song = AudioFile(self.rg_data) def test_nogain(self): self.failUnlessEqual(self.song.replay_gain(["none", "track"]), 1) def test_fallback_track(self): del(self.song["replaygain_track_gain"]) self.failUnlessAlmostEqual( self.song.replay_gain(["track"], 0, -6.0), self.minus_6db) def test_fallback_album(self): del(self.song["replaygain_album_gain"]) self.failUnlessAlmostEqual( self.song.replay_gain(["album"], 0, -6.0), self.minus_6db) def test_fallback_and_preamp(self): del(self.song["replaygain_track_gain"]) self.failUnlessEqual(self.song.replay_gain(["track"], 9, -9), 1) def test_preamp_track(self): self.failUnlessAlmostEqual( self.song.replay_gain(["track"], -7.0, 0), self.minus_6db) def test_preamp_album(self): self.failUnlessAlmostEqual( self.song.replay_gain(["album"], -5.0, 0), self.minus_6db) def test_preamp_clip(self): # Make sure excess pre-amp won't clip a track (with peak data) self.failUnlessAlmostEqual( self.song.replay_gain(["track"], 12.0, 0), 1.0 / 0.9) def test_trackgain(self): self.failUnless(self.song.replay_gain(["track"]) > 1) def test_albumgain(self): self.failUnless(self.song.replay_gain(["album"]) < 1) def test_invalid(self): self.song["replaygain_album_gain"] = "fdsodgbdf" self.failUnlessEqual(self.song.replay_gain(["album"]), 1) def test_track_fallback(self): radio_rg = self.song.replay_gain(["track"]) del(self.song["replaygain_album_gain"]) del(self.song["replaygain_album_peak"]) # verify defaulting to track when album is present self.failUnlessAlmostEqual( self.song.replay_gain(["album", "track"]), radio_rg) def test_numeric_rg_tags(self): """"Tests fully-numeric (ie no "db") RG tags. See Issue 865""" self.failUnless(self.song("replaygain_album_gain"), "-1.00 db") for key, exp in self.rg_data.items(): # Hack the nasties off and produce the "real" expected value exp = float(exp.split(" ")[0]) # Compare as floats. Seems fairer. album_rg = self.song("~#%s" % key) try: val = float(album_rg) except ValueError: self.fail("Invalid %s returned: %s" % (key,album_rg)) self.failUnlessAlmostEqual(val, exp, places=5, msg="%s should be %s not %s" % (key,exp,val)) add(Treplay_gain) # Special test case for find_cover since it has to create/remove # various files. class Tfind_cover(TestCase): def setUp(self): config.init() self.dir = os.path.realpath(quux("~dirname")) self.files = [self.full_path("12345.jpg"), self.full_path("nothing.jpg") ] for f in self.files: file(f, "w").close() def full_path(self, path): return os.path.join(self.dir, path) def test_dir_not_exist(self): self.failIf(bar_2_1.find_cover()) def test_nothing(self): self.failIf(quux.find_cover()) def test_labelid(self): quux["labelid"] = "12345" self.failUnlessEqual(os.path.abspath(quux.find_cover().name), self.full_path("12345.jpg")) del(quux["labelid"]) def test_regular(self): files = [os.path.join(self.dir, f) for f in ["cover.png", "folder.jpg", "frontcover.jpg", "front_folder_cover.gif", "jacket_cover.front.folder.jpeg"]] for f in files: file(f, "w").close() self.files.append(f) self.failUnlessEqual(os.path.abspath(quux.find_cover().name), f) self.test_labelid() # labelid must work with other files present def test_intelligent(self): song = quux song["artist"] = "Q-Man" song["title"] = "First Q falls hardest" files = [self.full_path(f) for f in ["Quuxly - back.jpg", "Quuxly.jpg", "q-man - quxxly.jpg", "folder.jpeg", "Q-man - Quuxly (FRONT).jpg"]] for f in files: file(f, "w").close() self.files.append(f) cover = song.find_cover() if cover: actual = os.path.abspath(cover.name) self.failUnlessEqual(actual, f) else: # Here, no cover is better than the back... self.failUnlessEqual(f, self.full_path("Quuxly - back.jpg")) def test_embedded_special_cover_words(self): """Tests that words incidentally containing embedded "special" words album keywords (e.g. cover, disc, back) don't trigger See Issue 818""" song = AudioFile({ "~filename": "tests/data/asong.ogg", "album": "foobar", "title": "Ode to Baz", "artist": "Q-Man", }) files = [self.full_path(f) for f in ['back.jpg', 'discovery.jpg', "Pharell - frontin'.jpg", 'nickelback - Curb.jpg', 'foobar.jpg', 'folder.jpg', # Though this is debatable 'Q-Man - foobar.jpg', 'Q-man - foobar (cover).jpg']] for f in files: file(f, "w").close() self.files.append(f) cover = song.find_cover() if cover: actual = os.path.abspath(cover.name) self.failUnlessEqual(actual, f, "\"%s\" should trump \"%s\"" % (f, actual)) else: self.failUnless(f, self.full_path('back.jpg')); def tearDown(self): map(os.unlink, self.files) config.quit() add(Tfind_cover) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_parse__pattern.py��������������������������������������������������������0000644�0001750�0001750�00000023424�12161032160�021510� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- from tests import TestCase, add import os from quodlibet import util from quodlibet.parse import FileFromPattern, XMLFromPattern, Pattern class _TPattern(TestCase): from quodlibet.formats._audio import AudioFile def setUp(self): s1 = { 'tracknumber': '5/6', 'artist':'Artist', 'title':'Title5', '~filename':'/path/to/a.mp3', 'xmltest': "<&>"} s2 = { 'tracknumber': '6', 'artist':'Artist', 'title':'Title6', '~filename': '/path/to/b.ogg', 'discnumber':'2', 'unislash': u"foo\uff0fbar" } s3 = { 'title': 'test/subdir', 'genre':'/\n/', '~filename':'/one/more/a.flac', 'version': 'Instrumental'} s4 = { 'performer': 'a\nb', 'artist': 'foo\nbar'} s5 = { 'tracknumber': '7/1234','artist':'Artist', 'title':'Title7', '~filename':'/path/to/e.mp3'} self.a = self.AudioFile(s1) self.b = self.AudioFile(s2) self.c = self.AudioFile(s3) self.d = self.AudioFile(s4) self.e = self.AudioFile(s5) class TPattern(_TPattern): from quodlibet.formats._audio import AudioFile def test_conditional_number_dot_title(s): pat = Pattern('<tracknumber|<tracknumber>. ><title>') s.assertEquals(pat.format(s.a), '5/6. Title5') s.assertEquals(pat.format(s.b), '6. Title6') s.assertEquals(pat.format(s.c), 'test/subdir') def test_conditional_other_number_dot_title(s): pat = Pattern('<tracknumber|<tracknumber>|00>. <title>') s.assertEquals(pat.format(s.a), '5/6. Title5') s.assertEquals(pat.format(s.b), '6. Title6') s.assertEquals(pat.format(s.c), '00. test/subdir') def test_conditional_other_other(s): # FIXME: was <tracknumber|a|b|c>.. but we can't put <>| in the format # string since it would break the XML pattern formater. s.assertEqual(Pattern('<tracknumber|a|b|c>').format(s.a), "") def test_conditional_genre(s): pat = Pattern('<genre|<genre>|music>') s.assertEquals(pat.format(s.a), 'music') s.assertEquals(pat.format(s.b), 'music') s.assertEquals(pat.format(s.c), '/, /') def test_conditional_unknown(s): pat = Pattern('<album|foo|bar>') s.assertEquals(pat.format(s.a), 'bar') def test_conditional_notfile(s): pat = Pattern('<tracknumber|<tracknumber>|00>') s.assertEquals(pat.format(s.a), '5/6') s.assertEquals(pat.format(s.b), '6') s.assertEquals(pat.format(s.c), '00') def test_conditional_subdir(s): pat = Pattern('/a<genre|/<genre>>/<title>') s.assertEquals(pat.format(s.a), '/a/Title5') s.assertEquals(pat.format(s.b), '/a/Title6') s.assertEquals(pat.format(s.c), '/a//, //test/subdir') def test_number_dot_title(s): pat = Pattern('<tracknumber>. <title>') s.assertEquals(pat.format(s.a), '5/6. Title5') s.assertEquals(pat.format(s.b), '6. Title6') s.assertEquals(pat.format(s.c), '. test/subdir') def test_recnumber_dot_title(s): pat = Pattern('\<<tracknumber>\>. <title>') s.assertEquals(pat.format(s.a), '<5/6>. Title5') s.assertEquals(pat.format(s.b), '<6>. Title6') s.assertEquals(pat.format(s.c), '<>. test/subdir') def test_generated(s): pat = Pattern('<~basename>') s.assertEquals(pat.format(s.a), os.path.basename(s.a["~filename"])) def test_generated_and_not_generated(s): pat = Pattern('<~basename> <title>') res = pat.format(s.a) s.assertEquals( res, os.path.basename(s.a["~filename"]) + " " + s.a["title"]) def test_number_dot_title_dot(s): pat = Pattern('<tracknumber>. <title>.') s.assertEquals(pat.format(s.a), '5/6. Title5.') s.assertEquals(pat.format(s.b), '6. Title6.') s.assertEquals(pat.format(s.c), '. test/subdir.') def test_number_dot_genre(s): pat = Pattern('<tracknumber>. <genre>') s.assertEquals(pat.format(s.a), '5/6. ') s.assertEquals(pat.format(s.b), '6. ') s.assertEquals(pat.format(s.c), '. /, /') def test_unicode_with_int(s): song = s.AudioFile({"tracknumber": "5/6", "title": "\xe3\x81\x99\xe3\x81\xbf\xe3\x82\x8c".decode('utf-8')}) pat = Pattern('<~#track>. <title>') s.assertEquals(pat.format(song), "5. \xe3\x81\x99\xe3\x81\xbf\xe3\x82\x8c".decode('utf-8')) class TFileFromPattern(_TPattern): def test_escape_slash(s): fpat = FileFromPattern('<~filename>') pat = Pattern('<~filename>') wpat = FileFromPattern(r'\\<artist>\\ "<title>') s.assertEquals(fpat.format(s.a), "_path_to_a.mp3") s.assertEquals(pat.format(s.a), "/path/to/a.mp3") s.assertEquals(wpat.format(s.a), "\\Artist\\ \"Title5.mp3") def test_specialcase_anti_ext(s): p1 = FileFromPattern('<~filename>') p2 = FileFromPattern('<~dirname>_<~basename>') s.assertEquals(p1.format(s.a), p2.format(s.a)) s.assertEquals(p1.format(s.a), '_path_to_a.mp3') s.assertEquals(p1.format(s.b), p2.format(s.b)) s.assertEquals(p1.format(s.b), '_path_to_b.ogg') s.assertEquals(p1.format(s.c), p2.format(s.c)) s.assertEquals(p1.format(s.c), '_one_more_a.flac') def test_number_dot_title_dot(s): pat = FileFromPattern('<tracknumber>. <title>.') s.assertEquals(pat.format(s.a), '05. Title5..mp3') s.assertEquals(pat.format(s.b), '06. Title6..ogg') s.assertEquals(pat.format(s.c), '. test_subdir..flac') def test_tracknumber_decimals(s): pat = FileFromPattern('<tracknumber>. <title>') s.assertEquals(pat.format(s.a), '05. Title5.mp3') s.assertEquals(pat.format(s.e), '0007. Title7.mp3') def test_raw_slash_preservation(s): pat = FileFromPattern('/a/b/<genre>') s.assertEquals(pat.format(s.a), '/a/b/.mp3') s.assertEquals(pat.format(s.b), '/a/b/.ogg') s.assertEquals(pat.format(s.c), '/a/b/_, _.flac') def test_unicode_slash_removal(s): pat = FileFromPattern(u'/a/b/<unislash>') s.assertEquals(pat.format(s.b), '/a/b/foo_bar.ogg') def test_directory_rooting(s): s.assertRaises(ValueError, FileFromPattern, 'a/<b>') s.assertRaises(ValueError, FileFromPattern, '<a>/<b>') FileFromPattern('/<a>/<b>') def test_ext_case_preservation(s): x = s.AudioFile({ '~filename':'/tmp/Xx.Flac', 'title':'Xx' }) # If pattern has a particular ext, preserve case of ext p1 = FileFromPattern('<~basename>') s.assertEquals(p1.format(x), 'Xx.Flac') p2 = FileFromPattern('<title>.FLAC') s.assertEquals(p2.format(x), 'Xx.FLAC') # If pattern doesn't have a particular ext, lowercase ext p3 = FileFromPattern('<title>') s.assertEquals(p3.format(x), 'Xx.flac') def test_backslash_conversion_win32(s): if os.name == 'nt': pat = FileFromPattern(r'Z:\<artist>\<title>') s.assertEquals(pat.format(s.a), 'Z:/Artist/Title5.mp3') def test_long_filename(s): a = s.AudioFile({"title": "x"*300, "~filename": "/f.mp3"}) path = FileFromPattern(u'/foobar/ä<title>/<title>').format(a) s.failUnlessEqual(len(util.fsnative(path)), 1 + 6 + 1 + 255 + 1 + 255) path = FileFromPattern(u'äüö<title><title>').format(a) s.failUnlessEqual(len(util.fsnative(path)), 255) class TXMLFromPattern(_TPattern): def test_markup_passthrough(s): pat = XMLFromPattern(r'\<b\><<title>>\</b\>') s.assertEquals(pat.format(s.a), '<b><Title5></b>') s.assertEquals(pat.format(s.b), '<b><Title6></b>') s.assertEquals(pat.format(s.c), '<b><test/subdir></b>') def test_escape(s): pat = XMLFromPattern(r'\<b\><<xmltest>>\</b\>') s.assertEquals(pat.format(s.a), '<b><<&>></b>') def test_cond_markup(s): pat = XMLFromPattern(r'<title|\<b\><title> woo\</b\>>') s.assertEquals(pat.format(s.a), '<b>Title5 woo</b>') class TRealTags(TestCase): def test_empty(self): self.failUnlessEqual(Pattern("").tags, set([])) def test_both(self): pat = "<foo|<~bar~fuu> - <fa>|<bar>>" self.failUnlessEqual(Pattern(pat).tags, set(["bar", "fuu", "fa"])) class TPatternFormatList(_TPattern): def test_same(s): pat = Pattern('<~basename> <title>') s.failUnlessEqual(pat.format_list(s.a), set([pat.format(s.a)])) pat = Pattern('/a<genre|/<genre>>/<title>') s.failUnlessEqual(pat.format_list(s.a), set([pat.format(s.a)])) def test_same2(s): fpat = FileFromPattern('<~filename>') pat = Pattern('<~filename>') s.assertEquals(fpat.format_list(s.a), set([fpat.format(s.a)])) s.assertEquals(pat.format_list(s.a), set([pat.format(s.a)])) def test_tied(s): pat = Pattern('<genre>') s.failUnlessEqual(pat.format_list(s.c), set(['/', '/'])) pat = Pattern('<performer>') s.failUnlessEqual(pat.format_list(s.d), set(['a', 'b'])) pat = Pattern('<performer><performer>') s.failUnlessEqual(set(pat.format_list(s.d)), set(['aa', 'ab', 'ba', 'bb'])) pat = Pattern('<~performer~artist>') s.failUnlessEqual(pat.format_list(s.d), set(['a - foo', 'b - foo', 'a - bar', 'b - bar'])) pat = Pattern('<performer~artist>') s.failUnlessEqual(pat.format_list(s.d), set(['a - foo', 'b - foo', 'a - bar', 'b - bar'])) pat = Pattern('<artist|<artist>.|<performer>>') s.failUnlessEqual(pat.format_list(s.d), set(['foo.', 'bar.'])) pat = Pattern('<artist|<artist|<artist>.|<performer>>>') s.failUnlessEqual(pat.format_list(s.d), set(['foo.', 'bar.'])) add(TPattern) add(TFileFromPattern) add(TXMLFromPattern) add(TRealTags) add(TPatternFormatList) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_browsers_media.py��������������������������������������������������������0000644�0001750�0001750�00000001532�12161032160�021503� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from tests import TestCase, add from quodlibet import config from quodlibet.browsers.media import * from quodlibet.library import SongLibrary class TMediaBrowser(TestCase): def setUp(self): config.init() def tearDown(self): config.quit() def test_init(self): library = SongLibrary() MediaDevices(library, False).destroy() def test_property(self): class FakeDevice(dict): dev = "Fake" mountpoint = "/" Properties = lambda *x: [] fake = FakeDevice({"name": "Foo"}) DeviceProperties(None, fake).destroy() add(TMediaBrowser) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_completion.py�������������������������������������������������������0000644�0001750�0001750�00000002421�12173212464�021712� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from gi.repository import Gtk from quodlibet import config from quodlibet.library import SongLibrary from quodlibet.qltk.completion import EntryWordCompletion, LibraryTagCompletion from quodlibet.qltk.completion import LibraryValueCompletion class TEntryWordCompletion(TestCase): def test_ctr(self): w = EntryWordCompletion() e = Gtk.Entry() e.set_completion(w) self.failUnlessEqual(w.get_entry(), e) self.failUnlessEqual(e.get_completion(), w) e.destroy() add(TEntryWordCompletion) class TLibraryTagCompletion(TestCase): def test_ctr(self): w = LibraryTagCompletion(SongLibrary()) e = Gtk.Entry() e.set_completion(w) self.failUnlessEqual(w.get_entry(), e) self.failUnlessEqual(e.get_completion(), w) e.destroy() add(TLibraryTagCompletion) class TLibraryValueCompletion(TestCase): def setUp(self): config.init() def tearDown(self): config.quit() def test_ctr(self): w = LibraryValueCompletion("artist", SongLibrary()) e = Gtk.Entry() e.set_completion(w) self.failUnlessEqual(w.get_entry(), e) self.failUnlessEqual(e.get_completion(), w) e.destroy() add(TLibraryValueCompletion) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_util_dbusutils.py��������������������������������������������������������0000644�0001750�0001750�00000010730�12161032160�021551� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2012 Christoph Reiter <christoph.reiter@gmx.at> # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License as # published by the Free Software Foundation. from tests import TestCase, add import dbus from quodlibet.util.dbusutils import apply_signature, list_spec_properties from quodlibet.util.dbusutils import filter_property_spec, DBusProperty from quodlibet.util.dbusutils import dbus_unicode_validate ANN1 = """ <property name="Position" type="s" access="read"> <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> </property> <property name="MinimumRate" type="s" access="read"/> """ ANN2 = """ <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="false"/> <property name="Foobar" type="s" access="read"> <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="invalidates"/> </property> <property name="XXX" type="s" access="read"/> """ class TDbusUtils(TestCase): def test_prop_sig(self): value = apply_signature(2, "u") self.failUnless(isinstance(value, dbus.UInt32)) value = apply_signature({"a": "b"}, "a{ss}") self.failUnlessEqual(value.signature, "ss") self.failUnless(isinstance(value, dbus.Dictionary)) value = apply_signature(("a",), "a(s)") self.failUnlessEqual(value.signature, "s") self.failUnless(isinstance(value, dbus.Struct)) value = apply_signature(("a", "b"), "as") self.failUnlessEqual(value.signature, "s") self.failUnless(isinstance(value, dbus.Array)) self.failUnlessRaises(TypeError, apply_signature, 2, "a(s)") text = '\xc3\xb6\xc3\xa4\xc3\xbc' value = apply_signature(text, "s", utf8_strings=True) self.failUnless(isinstance(value, str)) value = apply_signature(text, "s") self.failUnless(isinstance(value, unicode)) text = u"öäü" value = apply_signature(text, "s", utf8_strings=True) self.failUnless(isinstance(value, str)) value = apply_signature(text, "s") self.failUnless(isinstance(value, unicode)) def test_list_props(self): props = list_spec_properties(ANN1) self.failUnlessEqual(props["Position"]["access"], "read") self.failUnlessEqual(props["Position"]["emit"], "false") self.failUnlessEqual(props["Position"]["type"], "s") self.failUnlessEqual(props["MinimumRate"]["emit"], "true") props = list_spec_properties(ANN2) self.failUnlessEqual(props["Foobar"]["emit"], "invalidates") self.failUnlessEqual(props["XXX"]["emit"], "false") def test_filter_props(self): spec = filter_property_spec(ANN1, wl=["Position"]) self.failUnlessEqual(list_spec_properties(spec).keys(), ["Position"]) props = list_spec_properties(spec) self.failUnlessEqual(props["Position"]["emit"], "false") spec = filter_property_spec(ANN1, bl=["Position"]) self.failUnlessEqual(list_spec_properties(spec).keys(), ["MinimumRate"]) spec = filter_property_spec(ANN1) self.failUnlessEqual(len(list_spec_properties(spec).keys()), 2) def test_validate_utf8(self): self.failUnlessEqual(dbus_unicode_validate(u'X\ufffeX'), u"X\ufffdX") self.failUnlessEqual(dbus_unicode_validate('X\xef\xbf\xbeX'), u"X\ufffdX") def test_property_mixin(self): class X(DBusProperty): SUPPORTS_MULTIPLE_OBJECT_PATHS=False def set_introspection(self, *args): pass def get_property(self, interface, name): return interface def set_property(self, interface, name, value): pass x = X() x.set_properties("a1", ANN1) x.set_properties("a2", ANN2) x.implement_interface("a1", "a2") props = x.get_properties("a1") self.failUnless(("a1", "Position") in props) self.failUnless(("a2", "XXX") in props) props = x.get_properties("a2") self.failIf(("a1", "Position") in props) self.failUnlessEqual(x.get_interface("a2", "XXX"), "a2") self.failUnlessEqual(x.get_interface("a1", "XXX"), "a2") self.failUnlessEqual(x.get_value("a2", "XXX"), "a2") self.failUnlessEqual(x.get_value("a1", "XXX"), "a2") self.failUnlessEqual(x.get_value("a1", "Position"), "a1") add(TDbusUtils) ����������������������������������������quodlibet-3.0.2/tests/test_plugins_events.py��������������������������������������������������������0000644�0001750�0001750�00000005200�12173201603�021542� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import os import sys from tempfile import mkstemp, mkdtemp from quodlibet import player from quodlibet.library import SongLibrarian from quodlibet.plugins import PluginManager from quodlibet.plugins.events import EventPluginHandler class TEventPlugins(TestCase): def setUp(self): self.tempdir = mkdtemp() self.pm = PluginManager(folders=[self.tempdir]) self.lib = SongLibrarian() self.player = player.init("nullbe").init(self.lib) self.handler = EventPluginHandler( librarian=self.lib, player=self.player) self.pm.register_handler(self.handler) self.pm.rescan() self.assertEquals(self.pm.plugins, []) def tearDown(self): self.pm.quit() for f in os.listdir(self.tempdir): os.remove(os.path.join(self.tempdir, f)) os.rmdir(self.tempdir) def create_plugin(self, name='', funcs=None): fd, fn = mkstemp(suffix='.py', text=True, dir=self.tempdir) file = os.fdopen(fd, 'w') file.write("from quodlibet.plugins.events import EventPlugin\n") file.write("log = []\n") file.write("class %s(EventPlugin):\n" % name) indent = ' ' file.write("%spass\n" % indent) if name: file.write("%sPLUGIN_ID = %r\n" % (indent, name)) file.write("%sPLUGIN_NAME = %r\n" % (indent, name)) for f in (funcs or []): file.write("%sdef %s(s, *args): log.append((%r, args))\n" % (indent, f, f)) file.flush() file.close() def _get_calls(self, plugin): mod = sys.modules[type(plugin).__module__] return mod.log def test_found(self): self.create_plugin(name='Name') self.pm.rescan() self.assertEquals(len(self.pm.plugins), 1) def test_player_paused(self): self.create_plugin(name='Name', funcs=["plugin_on_paused"]) self.pm.rescan() self.assertEquals(len(self.pm.plugins), 1) plugin = self.pm.plugins[0] self.pm.enable(plugin, True) self.player.emit("paused") self.failUnlessEqual([("plugin_on_paused", tuple())], self._get_calls(plugin)) def test_lib_changed(self): self.create_plugin(name='Name', funcs=["plugin_on_changed"]) self.pm.rescan() self.assertEquals(len(self.pm.plugins), 1) plugin = self.pm.plugins[0] self.pm.enable(plugin, True) self.lib.emit("changed", [None]) self.failUnlessEqual([("plugin_on_changed", ([None],))], self._get_calls(plugin)) add(TEventPlugins) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_controls.py���������������������������������������������������������0000644�0001750�0001750�00000002141�12173213426�021402� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from tests import TestCase, add from quodlibet.qltk.controls import PlayControls, ReplayGainMenu, SeekBar from quodlibet.qltk.controls import StopAfterMenu, Volume from quodlibet.library import SongLibrary from quodlibet.player.nullbe import NullPlayer from quodlibet import config class TControls(TestCase): def setUp(self): config.init() self.p = NullPlayer() self.l = SongLibrary() def tearDown(self): config.quit() def test_controls(self): w = PlayControls(self.p, self.l) w.destroy() def test_replaygain(self): w = ReplayGainMenu(self.p) w.destroy() def test_seekbar(self): w = SeekBar(self.p, self.l) w.destroy() def test_stopafter(self): w = StopAfterMenu(self.p) w.destroy() def test_volume(self): w = Volume(self.p) w.destroy() add(TControls) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_browsers___init__.py�����������������������������������������������������0000644�0001750�0001750�00000001753�12173213426�022201� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import sys from tests import TestCase, add from quodlibet import browsers browsers.init() class TBrowsers(TestCase): def test_presence(self): self.failUnless(browsers.search) self.failUnless(browsers.paned) self.failUnless(browsers.iradio) self.failUnless(browsers.audiofeeds) self.failUnless(browsers.albums) self.failUnless(browsers.playlists) self.failUnless(browsers.filesystem) def test_get(self): self.failUnless(browsers.get("EmptyBar") is browsers.search.EmptyBar) self.failUnless( browsers.get("FileSystem") is browsers.filesystem.FileSystem) def test_get_invalid(self): self.failUnless( browsers.get("DoesNotExist") is browsers.search.EmptyBar) def test_migrate(self): self.failUnless( sys.modules["browsers.audiofeeds"] is browsers.audiofeeds) self.failUnless( sys.modules["browsers.iradio"] is browsers.iradio) add(TBrowsers) ���������������������quodlibet-3.0.2/tests/test_player_gst.py������������������������������������������������������������0000644�0001750�0001750�00000013270�12173212464�020663� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- import contextlib from gi.repository import Gst import unittest from tests import TestCase, add from quodlibet.player.gstbe import GStreamerSink as Sink from quodlibet.player.gstbe import parse_gstreamer_taglist from quodlibet.util import sanitize_tags @contextlib.contextmanager def ignore_gst_errors(): old = Gst.debug_get_default_threshold() Gst.debug_set_default_threshold(Gst.DebugLevel.NONE) yield Gst.debug_set_default_threshold(old) class TGStreamerSink(TestCase): def test_simple(self): sinks = ["gconfaudiosink", "alsasink"] for n in filter(Gst.ElementFactory.find, sinks): obj, name = Sink(n) self.failUnless(obj) self.failUnlessEqual(name, n) def test_fallback(self): import __builtin__ pw = print_w __builtin__.__dict__["print_w"] = lambda *x: None with ignore_gst_errors(): obj, name = Sink("notarealsink") __builtin__.__dict__["print_w"] = pw self.failUnless(obj) self.failUnlessEqual(name, "autoaudiosink") def test_append_sink(self): obj, name = Sink("volume") self.failUnless(obj) self.failUnlessEqual(name.split("!")[-1].strip(), Sink("")[1]) add(TGStreamerSink) class TGstreamerTagList(TestCase): def test_parse(self): # gst.TagList can't be filled using pyGtk... so use a dict instead l = {} l["extended-comment"] = u"foo=bar" self.failUnless("foo" in parse_gstreamer_taglist(l)) l["extended-comment"] = [u"foo=bar", u"bar=foo", u"bar=foo2"] self.failUnless("foo" in parse_gstreamer_taglist(l)) self.failUnless("bar" in parse_gstreamer_taglist(l)) self.failUnlessEqual(parse_gstreamer_taglist(l)["bar"], "foo\nfoo2") # date is abstract, so define our own # (might work with pygobject now) class Foo(object): def to_iso8601_string(self): return "3000-10-2" l["date"] = Foo() date = Gst.DateTime Gst.DateTime = Foo self.failUnlessEqual(parse_gstreamer_taglist(l)["date"], "3000-10-2") Gst.DateTime = date l["foo"] = u"äöü" self.failUnless(isinstance(parse_gstreamer_taglist(l)["foo"], unicode)) self.failUnlessEqual(parse_gstreamer_taglist(l)["foo"], u"äöü") l["foo"] = u"äöü".encode("utf-8") self.failUnless(isinstance(parse_gstreamer_taglist(l)["foo"], unicode)) self.failUnlessEqual(parse_gstreamer_taglist(l)["foo"], u"äöü") l["bar"] = 1.2 self.failUnlessEqual(parse_gstreamer_taglist(l)["bar"], 1.2) l["bar"] = 9L self.failUnlessEqual(parse_gstreamer_taglist(l)["bar"], 9) l["bar"] = 9 self.failUnlessEqual(parse_gstreamer_taglist(l)["bar"], 9) l["bar"] = Gst.TagList() # some random gst instance self.failUnless(isinstance(parse_gstreamer_taglist(l)["bar"], unicode)) self.failUnless("GstTagList" in parse_gstreamer_taglist(l)["bar"]) def test_sanitize(self): l = sanitize_tags({"location": u"http://foo"}) self.failUnless("website" in l) l = sanitize_tags({"channel-mode": u"joint-stereo"}) self.failUnlessEqual(l["channel-mode"], "stereo") l = sanitize_tags({"channel-mode": u"dual"}) self.failUnlessEqual(l["channel-mode"], "stereo") l = sanitize_tags({"audio-codec": u"mp3"}) self.failUnlessEqual(l["audio-codec"], "MP3") l = sanitize_tags({"audio-codec": u"Advanced Audio Coding"}) self.failUnlessEqual(l["audio-codec"], "MPEG-4 AAC") l = sanitize_tags({"audio-codec": u"vorbis"}) self.failUnlessEqual(l["audio-codec"], "Ogg Vorbis") l = {"a": u"http://www.shoutcast.com", "b": u"default genre"} l = sanitize_tags(l) self.failIf(l) l = sanitize_tags({"duration": 1000 * 42}, stream=True) self.failUnlessEqual(l["~#length"], 42) l = sanitize_tags({"duration": 1000 * 42}) self.failIf(l) l = sanitize_tags({"duration": u"bla"}, stream=True) self.failUnlessEqual(l["duration"], u"bla") l = sanitize_tags({"bitrate": 1000 * 42}, stream=True) self.failUnlessEqual(l["~#bitrate"], 42) l = sanitize_tags({"bitrate": 1000 * 42}) self.failIf(l) l = sanitize_tags({"bitrate": u"bla"}) self.failUnlessEqual(l["bitrate"], u"bla") l = sanitize_tags({"nominal-bitrate": 1000 * 42}) self.failUnlessEqual(l["~#bitrate"], 42) l = sanitize_tags({"nominal-bitrate": 1000 * 42}, stream=True) self.failIf(l) l = sanitize_tags({"nominal-bitrate": u"bla"}) self.failUnlessEqual(l["nominal-bitrate"], u"bla") l = {"emphasis": u"something"} self.failIf(sanitize_tags(l)) self.failIf(sanitize_tags(l)) l = {"title": u"something"} self.failIf(sanitize_tags(l)) self.failUnless(sanitize_tags(l, stream=True)) l = {"artist": u"something"} self.failIf(sanitize_tags(l)) self.failUnless(sanitize_tags(l, stream=True)) l = {"~#foo": 42, "bar": 42, "~#bla": u"42"} self.failUnless("~#foo" in sanitize_tags(l)) self.failUnless("~#bar" in sanitize_tags(l)) self.failUnless("bla" in sanitize_tags(l)) l = {} l["extended-comment"] = [u"location=1", u"website=2", u"website=3"] l = parse_gstreamer_taglist(l) l = sanitize_tags(l)["website"].split("\n") self.failUnless("1" in l) self.failUnless("2" in l) self.failUnless("3" in l) # parse_gstreamer_taglist should only return unicode self.failIf(sanitize_tags({"foo": "bar"})) add(TGstreamerTagList) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_bookmarks.py��������������������������������������������������������0000644�0001750�0001750�00000001777�12161032160�021534� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from tests import TestCase, add from quodlibet.qltk.bookmarks import EditBookmarks, MenuItems from quodlibet.player.nullbe import NullPlayer from quodlibet.library import SongLibrary from quodlibet.formats._audio import AudioFile from quodlibet import config class TBookmarks(TestCase): def setUp(self): config.init() player = NullPlayer() song = AudioFile() song.bookmarks = [(10, "bla")] song.sanitize("/") player.song = song self.player = player def tearDown(self): self.player.destroy() config.quit() def test_edit_window(self): EditBookmarks(None, SongLibrary(), self.player).destroy() def test_menu_items(self): MenuItems(self.player.song.bookmarks, self.player, False) add(TBookmarks) �quodlibet-3.0.2/tests/test_library_libraries.py�����������������������������������������������������0000644�0001750�0001750�00000045345�12173212464�022222� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from gi.repository import Gtk import os import shutil from quodlibet import config from quodlibet.formats._audio import AudioFile from tests import TestCase, add from tempfile import mkstemp from quodlibet.library.libraries import * class Fake(int): def __init__(self, _): self.key = int(self) def Frange(*args): return map(Fake, range(*args)) class FakeSong(Fake): def list(self, tag): # Turn tag_values into a less-than query, for testing. if tag <= self: return [] else: return [int(self)] def rename(self, newname): self.key = newname class AlbumSong(AudioFile): """A mock AudioFile belong to one of three albums, based on a single number""" def __init__(self, num, album=None): super(AlbumSong, self).__init__() self["~filename"] = "file_%d.mp3" % (num + 1) self["title"] = "Song %d" % (num + 1) self["artist"] = "Fakeman" if album is None: self["album"] = "Album %d" % (num % 3 + 1) else: self["album"] = album self["labelid"] = self["album"] class FakeSongFile(FakeSong): _valid = True _exists = True _mounted = True mountpoint = property(lambda self: "/" if self._mounted else "/FAKE") def valid(self): return self._valid def exists(self): return self._exists def reload(self): if self._exists: self._valid = True else: raise IOError("doesn't exist") def mounted(self): return self._mounted # Custom range functions, to generate lists of song-like objects def FSFrange(*args): return map(FakeSongFile, range(*args)) def FSrange(*args): return map(FakeSong, range(*args)) def ASrange(*args): return map(AlbumSong, range(*args)) class TLibrary(TestCase): Fake = Fake Frange = staticmethod(Frange) Library = Library def setUp(self): self.library = self.Library() self.added = [] self.changed = [] self.removed = [] self.library.connect_object('added', list.extend, self.added) self.library.connect_object('changed', list.extend, self.changed) self.library.connect_object('removed', list.extend, self.removed) def test_add(self): self.library.add(self.Frange(12)) self.failUnlessEqual(self.added, self.Frange(12)) del(self.added[:]) self.library.add(self.Frange(12, 24)) self.failUnlessEqual(self.added, self.Frange(12, 24)) def test_remove(self): self.library.add(self.Frange(10)) self.library.remove(self.Frange(3, 6)) self.failUnlessEqual(self.removed, self.Frange(3, 6)) # Neither the objects nor their keys should be present. self.failIf(self.Fake(3) in self.library) self.failUnless(self.Fake(6) in self.library) self.failIf(3 in self.library) self.failUnless(6 in self.library) def test_remove_when_not_present(self): self.failUnlessRaises(KeyError, self.library.remove, [self.Fake(12)]) def test_changed(self): self.library.add(self.Frange(10)) self.library.changed(self.Frange(5)) while Gtk.events_pending(): Gtk.main_iteration() self.failUnlessEqual(self.changed, self.Frange(5)) def test_changed_not_present(self): self.library.add(self.Frange(10)) self.library.changed(self.Frange(2, 20, 3)) while Gtk.events_pending(): Gtk.main_iteration() self.failUnlessEqual(self.changed, [2, 5, 8]) def test_changed_none_present(self): self.library.changed(self.Frange(5)) while Gtk.events_pending(): Gtk.main_iteration() def test___iter__(self): self.library.add(self.Frange(10)) self.failUnlessEqual(sorted(list(self.library)), self.Frange(10)) def test___iter___empty(self): self.failIf(list(self.library)) def test___len__(self): self.failUnlessEqual(len(self.library), 0) self.library.add(self.Frange(10)) self.failUnlessEqual(len(self.library), 10) self.library.remove(self.Frange(3)) self.failUnlessEqual(len(self.library), 7) def test___getitem__(self): self.library.add(self.Frange(10)) self.failUnlessEqual(self.library[5], 5) new = self.Fake(12) new.key = 100 self.library.add([new]) self.failUnlessEqual(self.library[100], 12) self.failIf(12 in self.library) def test___getitem___not_present(self): self.library.add(self.Frange(10)) self.failUnlessRaises(KeyError, self.library.__getitem__, 12) def test___contains__(self): self.library.add(self.Frange(10)) new = self.Fake(12) new.key = 100 self.library.add([new]) for value in [0, 1, 2, 6, 9, 100, new]: # 0, 1, 2, 6, 9: all added by self.Frange # 100: key for new # new: is itself present self.failUnless(value in self.library, "didn't find %d" % value) for value in [-1, 10, 12, 101]: # -1, 10, 101: boundry values # 12: equal but non-key-equal to new self.failIf(value in self.library, "found %d" % value) def test_get(self): self.failUnless(self.library.get(12) is None) self.failUnless(self.library.get(12, "foo") == "foo") new = self.Fake(12) new.key = 100 self.library.add([new]) self.failUnless(self.library.get(12) is None) self.failUnless(self.library.get(100) is new) def test_keys(self): items = [] for i in range(20): items.append(self.Fake(i)) items[-1].key = i + 100 self.library.add(items) self.failUnlessEqual(sorted(self.library.keys()), range(100, 120)) self.failUnlessEqual(sorted(self.library.iterkeys()), range(100, 120)) def test_values(self): items = [] for i in range(20): items.append(self.Fake(i)) items[-1].key = i + 100 self.library.add(items) self.failUnlessEqual(sorted(self.library.values()), range(20)) self.failUnlessEqual(sorted(self.library.itervalues()), range(20)) def test_items(self): items = [] for i in range(20): items.append(self.Fake(i)) items[-1].key = i + 100 self.library.add(items) expected = zip(range(100, 120), range(20)) self.failUnlessEqual(sorted(self.library.items()), expected) self.failUnlessEqual(sorted(self.library.iteritems()), expected) def test_has_key(self): self.failIf(self.library.has_key(10)) new = self.Fake(10) new.key = 20 self.library.add([new]) self.failIf(self.library.has_key(10)) self.failUnless(self.library.has_key(20)) def tearDown(self): self.library.destroy() add(TLibrary) class TPicklingMixin(TestCase): class PicklingMockLibrary(PicklingMixin, Library): """A library-like class that implements enough to test PicklingMixin""" def __init__(self): PicklingMixin.__init__(self) self._contents = {} # set up just enough of the library interface to work self.values = self._contents.values self.items = self._contents.items def add(self, items): for item in items: self._contents[item.key] = item Library = PicklingMockLibrary Frange = staticmethod(Frange) def setUp(self): self.library = self.Library() def test_save_load(self): fd, filename = mkstemp() try: os.close(fd) self.library.add(Frange(30)) self.library.save(filename) library = self.Library() library.load(filename) self.failUnlessEqual( sorted(self.library.items()), sorted(library.items())) finally: os.unlink(filename) add(TPicklingMixin) class TSongLibrary(TLibrary): Fake = FakeSong Frange = staticmethod(FSrange) Library = SongLibrary def test_rename_dirty(self): self.library.dirty = False song = FakeSong(10) self.library.add([song]) self.failUnless(self.library.dirty) self.library.dirty = False self.library.rename(song, 20) self.failUnless(self.library.dirty) def test_rename(self): song = FakeSong(10) self.library.add([song]) self.library.rename(song, 20) while Gtk.events_pending(): Gtk.main_iteration() self.failUnless(song in self.changed) self.failUnless(song in self.library) self.failUnless(song.key in self.library) self.failUnlessEqual(song.key, 20) def test_tag_values(self): self.library.add(self.Frange(30)) del(self.added[:]) self.failUnlessEqual(sorted(self.library.tag_values(10)), range(10)) self.failUnlessEqual(sorted(self.library.tag_values(0)), []) self.failIf(self.changed or self.added or self.removed) add(TSongLibrary) class TFileLibrary(TLibrary): Fake = FakeSongFile Library = FileLibrary def test_mask_invalid_mount_point(self): new = self.Fake(1) self.library.add([new]) self.failIf(self.library.masked_mount_points) self.failUnless(len(self.library)) self.library.mask("/adsadsafaf") self.failIf(self.library.masked_mount_points) self.library.unmask("/adsadsafaf") self.failIf(self.library.masked_mount_points) self.failUnless(len(self.library)) def test_mask_basic(self): new = self.Fake(1) self.library.add([new]) self.failIf(self.library.masked_mount_points) self.library.mask(new.mountpoint) self.failUnlessEqual(self.library.masked_mount_points, [new.mountpoint]) self.failIf(len(self.library)) self.failUnlessEqual(self.library.get_masked(new.mountpoint), [new]) self.failUnless(self.library.masked(new)) self.library.unmask(new.mountpoint) self.failUnless(len(self.library)) self.failUnlessEqual(self.library.get_masked(new.mountpoint), []) def test_remove_masked(self): new = self.Fake(1) self.library.add([new]) self.library.mask(new.mountpoint) self.failUnless(self.library.masked_mount_points) self.library.remove_masked(new.mountpoint) self.failIf(self.library.masked_mount_points) def test_content_masked(self): new = self.Fake(100) new._mounted = False self.failIf(self.library.get_content()) self.library._load_init([new]) self.failUnless(self.library.masked(new)) self.failUnless(self.library.get_content()) def test_init_masked(self): new = self.Fake(100) new._mounted = False self.library._load_init([new]) self.failIf(self.library.items()) self.failUnless(self.library.masked(new)) def test_load_init_nonmasked(self): new = self.Fake(200) new._mounted = True self.library._load_init([new]) self.failUnlessEqual(self.library.values(), [new]) add(TFileLibrary) class TSongFileLibrary(TSongLibrary): Fake = FakeSongFile Frange = staticmethod(FSFrange) Library = SongFileLibrary def test__load_exists_invalid(self): new = self.Fake(100) new._valid = False changed, removed = self.library._load_item(new) self.failIf(removed) self.failUnless(changed) self.failUnless(new._valid) self.failUnless(new in self.library) def test__load_not_exists(self): new = self.Fake(100) new._valid = False new._exists = False changed, removed = self.library._load_item(new) self.failIf(removed) self.failIf(changed) self.failIf(new._valid) self.failIf(new in self.library) def test__load_error_during_reload(self): try: from quodlibet import util print_exc = util.print_exc util.print_exc = lambda *args, **kwargs: None new = self.Fake(100) def error(): raise IOError new.reload = error new._valid = False changed, removed = self.library._load_item(new) self.failUnless(removed) self.failIf(changed) self.failIf(new._valid) self.failIf(new in self.library) finally: util.print_exc = print_exc def test__load_not_mounted(self): new = self.Fake(100) new._valid = False new._exists = False new._mounted = False changed, removed = self.library._load_item(new) self.failIf(removed) self.failIf(changed) self.failIf(new._valid) self.failIf(new in self.library) self.failUnless(self.library.masked(new)) def __get_file(self): fd, filename = mkstemp(".flac") shutil.copy(os.path.join('tests', 'data', 'empty.flac'), filename) return filename def test_add_filename(self): config.init() try: filename = self.__get_file() ret = self.library.add_filename(filename) self.failUnless(ret) self.failUnlessEqual(1, len(self.library)) self.failUnlessEqual(len(self.added), 1) ret = self.library.add_filename(filename) self.failUnless(ret) self.failUnlessEqual(len(self.added), 1) os.unlink(filename) filename = self.__get_file() ret = self.library.add_filename(filename, add=False) self.failUnless(ret) self.failIf(ret in self.library) self.failUnlessEqual(len(self.added), 1) self.library.add([ret]) self.failUnless(ret in self.library) self.failUnlessEqual(len(self.added), 2) self.failUnlessEqual(2, len(self.library)) os.unlink(filename) ret = self.library.add_filename("") self.failIf(ret) self.failUnlessEqual(len(self.added), 2) self.failUnlessEqual(2, len(self.library)) finally: config.quit() add(TSongFileLibrary) class TAlbumLibrary(TestCase): Fake = FakeSong Frange = staticmethod(ASrange) UnderlyingLibrary = Library def setUp(self): self.underlying = self.UnderlyingLibrary() self.added = [] self.changed = [] self.removed = [] self._sigs = [ self.underlying.connect_object('added', list.extend, self.added), self.underlying.connect_object( 'changed', list.extend, self.changed), self.underlying.connect_object( 'removed', list.extend, self.removed), ] self.library = AlbumLibrary(self.underlying) # Populate for every test self.underlying.add(self.Frange(12)) def tearDown(self): for s in self._sigs: self.underlying.disconnect(s) self.underlying.destroy() self.library.destroy() def test_get(self): key = self.underlying.get("file_1.mp3").album_key self.failUnlessEqual(self.library.get(key).title, "Album 1") album = self.library.get(key) self.failUnlessEqual(album.key, key) self.failUnlessEqual(len(album.songs), 4) key = self.underlying.get("file_2.mp3").album_key self.failUnlessEqual(self.library.get(key).title, "Album 2") def test_getitem(self): key = self.underlying.get("file_4.mp3").album_key self.failUnlessEqual(self.library[key].key, key) def test_keys(self): self.failUnless(len(self.library.keys()),3) def test_has_key(self): key = self.underlying.get("file_1.mp3").album_key self.failUnless(self.library.has_key(key)) def test_misc_collection(self): self.failUnless(self.library.itervalues()) self.failUnless(self.library.iteritems()) def test_items(self): self.failUnlessEqual(len(self.library.items()), 3) def test_items(self): albums = self.library.values() self.failUnlessEqual(len(albums), 3) songs = self.underlying._contents.values() # Make sure "all the songs' albums" == "all the albums", roughly self.failUnlessEqual(set([a.key for a in albums]), set([s.album_key for s in songs])) def test_remove(self): key = self.underlying.get("file_1.mp3").album_key songs = self.underlying._contents # Remove all songs in Album 1 for i in range(1, 12, 3): song = songs["file_%d.mp3" % i] self.underlying.remove([song]) # Album 1 is all gone... self.failUnlessEqual(self.library.get(key), None) # ...but Album 2 is fine key = self.underlying.get("file_2.mp3").album_key album2 = self.library[key] self.failUnlessEqual(album2.key, key) self.failUnlessEqual(len(album2.songs), 4) def test_misc(self): # It shouldn't implement FileLibrary etc self.failIf(getattr(self.library, "filename", None)) add(TAlbumLibrary) class TAlbumLibrarySignals(TestCase): def setUp(self): lib = SongLibrary() received = [] def listen(name, items): received.append(name) self._sigs = [ lib.connect_object('added', listen, 'added'), lib.connect_object('changed', listen, 'changed'), lib.connect_object('removed', listen, 'removed'), ] albums = lib.albums self._asigs = [ albums.connect_object('added', listen, 'a_added'), albums.connect_object('changed', listen, 'a_changed'), albums.connect_object('removed', listen, 'a_removed'), ] self.lib = lib self.albums = albums self.received = received def test_add_one(self): self.lib.add([AlbumSong(1)]) self.failUnlessEqual(self.received, ["added", "a_added"]) def test_add_two_same(self): self.lib.add([AlbumSong(1, "a1")]) self.lib.add([AlbumSong(5, "a1")]) self.failUnlessEqual(self.received, ["added", "a_added", "added", "a_changed"]) def test_remove(self): songs = [AlbumSong(1, "a1"), AlbumSong(2, "a1"), AlbumSong(4, "a2")] self.lib.add(songs) self.lib.remove(songs[:2]) self.failUnlessEqual(self.received, ["added", "a_added", "removed", "a_removed"]) def test_change(self): songs = [AlbumSong(1, "a1"), AlbumSong(2, "a1"), AlbumSong(4, "a2")] self.lib.add(songs) self.lib.changed(songs) self.failUnlessEqual(self.received, ["added", "a_added", "changed", "a_changed"]) def tearDown(self): for s in self._asigs: self.albums.disconnect(s) for s in self._sigs: self.lib.disconnect(s) self.lib.destroy() add(TAlbumLibrarySignals) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_ratingsmenu.py������������������������������������������������������0000644�0001750�0001750�00000001442�12161032160�022065� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from tests import TestCase, add from quodlibet.qltk.ratingsmenu import RatingsMenuItem from quodlibet.library import SongLibrary, SongLibrarian from quodlibet.formats._audio import AudioFile class TRatingsMenuItem(TestCase): def test_menuitem(self): library = SongLibrary() library.librarian = SongLibrarian() a = AudioFile({"~filename": "/foo"}) a.sanitize() x = RatingsMenuItem([a], library) x.set_rating(0, [a], library) x.destroy() library.destroy() library.librarian.destroy() add(TRatingsMenuItem) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_util_fmps.py�������������������������������������������������������������0000644�0001750�0001750�00000026064�12161032160�020507� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2010 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. from tests import TestCase, add from quodlibet.util.fmps import * class TFmps(TestCase): def setUp(self): pass def test_float(self): self.failUnlessEqual(str(FmpsFloat(1.0)), "1.0") self.failUnlessEqual(str(FmpsFloat(0.0)), "0.0") self.failUnlessEqual(str(FmpsFloat(-1.0)), "-1.0") self.failUnlessEqual(str(FmpsFloat(1.123456789)), "1.123457") def test_parse_float(self): self.failUnlessRaises(ValueError, lambda: FmpsFloat("")) self.failUnlessRaises(ValueError, lambda: FmpsFloat("a")) self.failUnlessEqual(FmpsFloat("99.99").native(), 99.99) self.failUnlessEqual(FmpsFloat("-1.0").native(), -1.0) self.failUnlessEqual(FmpsFloat("-1").native(), -1) def test_pos_float(self): self.failUnlessEqual(str(FmpsPositiveFloat(1.0)), "1.0") self.failUnlessEqual(str(FmpsPositiveFloat(0.0)), "0.0") self.failUnlessEqual(str(FmpsPositiveFloat(1.123456789)), "1.123457") self.failUnlessRaises(ValueError, lambda: FmpsPositiveFloat(-1.0)) self.failUnlessRaises( ValueError, lambda: FmpsPositiveFloat(4294967295)) def test_parse_pos_float(self): self.failUnlessRaises(ValueError, lambda: FmpsPositiveFloat("")) self.failUnlessRaises(ValueError, lambda: FmpsPositiveFloat("a")) self.failUnlessRaises(ValueError, lambda: FmpsPositiveFloat("-1.0")) self.failUnlessEqual(FmpsPositiveFloat("99.99").native(), 99.99) self.failUnlessEqual( FmpsPositiveFloat("4294967296").native(), 4294967296) def test_rating_float(self): self.failUnlessEqual(str(FmpsRatingFloat(1.0)), "1.0") self.failUnlessEqual(str(FmpsRatingFloat(1)), "1.0") self.failUnlessRaises(ValueError, lambda: FmpsRatingFloat(-1.0)) self.failUnlessRaises(ValueError, lambda: FmpsRatingFloat(1.1)) def test_parse_rating_float(self): self.failUnlessRaises(ValueError, lambda: FmpsRatingFloat("")) self.failUnlessRaises(ValueError, lambda: FmpsRatingFloat("a")) self.failUnlessRaises(ValueError, lambda: FmpsRatingFloat("-1.0")) self.failUnlessRaises(ValueError, lambda: FmpsRatingFloat("1.1")) self.failUnlessEqual(FmpsRatingFloat("1").native(), 1) self.failUnlessEqual(FmpsRatingFloat("0.0").native(), 0) def test_rating_user(self): a = RatingUser("Alice Abba::0.6;;Bob Beatles::0.8;;Alice Abba::0.6") self.failUnlessEqual(a.get_all("Alice"), []) self.failUnlessEqual(a.keys(), ["Alice Abba", "Bob Beatles"]) self.failUnlessEqual(a.get_all("Alice Abba"), [0.6, 0.6]) a.remove_all("Alice Abba") self.failUnlessEqual(a.get_all("Alice Abba"), []) self.failUnlessEqual(a.keys(), ["Bob Beatles"]) a.set_all("Bob Beatles", 0.25) self.failUnlessEqual(a.to_data(), "Bob Beatles::0.25") a.append("Bob Beatles", 0.5) a.extend("Bob Beatles", [0.75, 1]) self.failUnlessEqual(a.get_all("Bob Beatles"), [0.25, 0.5, 0.75, 1]) a.set_all("Bob Beatles", [0.125, 0.375]) self.failUnlessEqual(a.get_all("Bob Beatles"), [0.125, 0.375]) self.failUnlessEqual(a.to_data(), "Bob Beatles::0.125;;Bob Beatles::0.375") def test_rating_user_2(self): # if a key got invalid values it still shows up, but returns an # empty list a = RatingUser("foo::1.25;;bar::0.75;;foo::-1") self.failUnlessEqual(a.keys(), ["foo", "bar"]) self.failUnlessEqual(a.get_all("foo"), []) # also they will be written back self.failUnlessEqual(a.to_data(), "foo::1.25;;foo::-1;;bar::0.75") # but they will be overwritten a.set_all("foo", 0.25) self.failUnlessEqual(a.to_data(), "foo::0.25;;bar::0.75") def test_rating_user_3(self): a = RatingUser("a::b::c;;abc;;def") a.append("foo", 0.25) self.failUnlessEqual(a.to_data(), "foo::0.25;;a::b::c;;abc;;def") # ignore empty strings a = RatingUser("") a.append("foo", 0.25) self.failUnlessEqual(a.to_data(), "foo::0.25") def test_rating_user_4(self): a = RatingUser("foo::0.5") self.failUnlessRaises(ValueError, lambda: a.set_all("foo", 1.2)) # an error shouldn't remove old data self.failUnlessEqual(a.to_data(), "foo::0.5") def test_rating_user_5(self): a = RatingUser() x = [1, 0] y = x[:] a.set_all("x",x) self.failUnlessEqual(x, y) def test_int(self): a = Playcount("3.0000") self.failUnlessEqual(type(a.native()), int) self.failUnlessEqual(str(a), "3.0000") a = PlaycountUser("a::135.0;;b::123") self.failUnlessEqual(a.get_all("a"), [135]) self.failUnlessEqual(a.get_all("b"), [123]) def test_key(self): a = PlaycountUser() self.failUnlessRaises(ValueError, lambda: a.set_all("", 1.0)) self.failUnlessRaises(ValueError, lambda: a.append("", 1.0)) a = RatingUser() self.failUnlessRaises(ValueError, lambda: a.set_all("", 1.0)) self.failUnlessRaises(ValueError, lambda: a.append("", 1.0)) def test_escaping(self): a = RatingUser() a.extend("foo::;;", [0, 0]) self.failUnlessEqual(a.to_data(), r"foo\:\:\;\;::0.0;;foo\:\:\;\;::0.0") a = RatingUser(r"foo\:\:\;\;::0.0;;foo\:\:\;\;::0.0") self.failUnlessEqual(a.get_all("foo::;;"), [0, 0]) a = Performers() a.set_all(";;foo::", ["::bar;;", r"\;\;\:\:", r"\:\:\;\;"]) b = Performers(a.to_data()) self.failUnlessEqual(a.to_data(), b.to_data()) def test_escaping_2(self): d = "a::b;;;c::d" a = RatingUser(d) self.failUnlessEqual(a.to_data(), d) d = "a::b;;c:::d" a = RatingUser(d) self.failUnlessEqual(a.to_data(), d) d = ";;;;" a = RatingUser(d) self.failUnlessEqual(a.to_data(), "") def test_escaping_3(self): a = RatingUser(":;:;:;::1") self.failUnlessEqual(a.to_data(), r"\:\;\:\;\:\;::1") a = Performers(":;::;:;") self.failUnlessEqual(a.to_data(), r"\:\;::\;\:\;") def test_escaping_4(self): a = Performers(";x;;a::b;;:;") Performers(a.to_data()) Performers(a.to_data()) Performers(a.to_data()) self.failUnlessEqual(a.get_all("a"), ["b"]) def test_escaping_5(self): a = Performers(r"a::b\;;a\::b") self.failUnlessEqual(a.get_all("a"), ["b;;a::b"]) a = Performers(r"a::b\\;;a\\::b") self.failUnlessEqual(a.get_all("a"), ["b\\"]) self.failUnlessEqual(a.get_all("a\\"), ["b"]) a = Performers(r"ab::b\\\;;a\\\::b") self.failUnlessEqual(a.get_all("ab"), [r"b\;;a\::b"]) self.failUnlessEqual(a.to_data(), r"ab::b\\\;\;a\\\:\:b") a = Performers(r"a::b\\\\;;a\\\\::b") self.failUnlessEqual(a.get_all("a"), ["b\\\\"]) self.failUnlessEqual(a.get_all("a\\\\"), ["b"]) a = Performers(r"a::b;;;a::b;;;a::b") self.failUnlessEqual(a.get_all("a"), []) a = Performers(r":a::b;;a::b;;;a::b") self.failUnlessEqual(a.get_all(":a"), ["b"]) a = Performers(r";:a::b;;a::b;;;a::b") self.failUnlessEqual(a.get_all(";:a"), ["b"]) def test_escaping_6(self): a = Performers(r";;") self.failUnlessEqual(a.to_data(), "") def test_invalid_escaping(self): d = r"in:;;:va;\;li\;d\;:\:\:\x." a = Performers(d) self.failUnlessEqual(a.to_data(), d) a = RatingUser(r"foo::ba:\:\;;;foo::\:") self.failUnlessEqual(a.to_data(), r"foo::ba\:\:\;;;foo::\:") def test_merge(self): a = Performers(["ab::cd", "ef::gh"]) self.failUnlessEqual(a.get_all("ab"), ["cd"]) self.failUnlessEqual(a.get_all("ef"), ["gh"]) self.failUnlessEqual(a.to_data(), "ab::cd;;ef::gh") a = Performers(["ab::cd", ";ef::gh;;ab::x", ";a;;;c"]) self.failUnlessEqual(a.get_all("ab"), ["cd", "x"]) self.failUnlessEqual(a.get_all(";ef"), ["gh"]) self.failUnlessEqual(a.to_data(), "\\;ef::gh;;ab::cd;;ab::x;;\\;a;;;c") a = Performers(a.to_data()) self.failUnlessEqual(a.get_all("ab"), ["cd", "x"]) self.failUnlessEqual(a.get_all(";ef"), ["gh"]) def test_rating_algo(self): a = RatingAlgorithm("") self.failUnlessEqual(a.keys(), []) a = RatingAlgorithm("a::b::0;;a::c::1.0;;a::b::0.25") self.failUnlessEqual(a.keys(), ["a"]) self.failUnlessEqual(a.get_all("a"), {"b": [0, 0.25], "c": [1]}) self.failUnlessEqual(a.get_all("a", "c"),[1]) def test_rating_algo_2(self): a = RatingAlgorithm("a::b::0;;a::c::1.0;;a::b::0.25") a.remove_all("a", "c") self.failUnlessEqual(a.keys(), ["a"]) self.failUnlessEqual(a.get_all("a"), {"b": [0,0.25]}) a.remove_all("a") self.failUnlessEqual(a.keys(), []) self.failUnlessEqual(a.to_data(), "") def test_rating_algo_3(self): a = RatingAlgorithm("a::b::0") x = {"d": 1} y = {"d": 1} a.set_all("a", None, x) self.failUnlessEqual(x, y) self.failUnlessEqual(a.to_data(), "a::d::1.0") a.remove_all("a") x = [0, 0.25] y = x[:] a.set_all("x", "y", x) a.set_all("x", "y", x) self.failUnlessEqual(x, y) self.failUnlessEqual(a.to_data(), "x::y::0.0;;x::y::0.25") def test_rating_algo_4(self): a = RatingAlgorithm("a::b::0") a.append("a", "b", 1) a.append("a", "c", 1) self.failUnlessEqual(a.get_all("a"), {"b": [0, 1], "c": [1]}) a.remove_all("a") a.extend("a", "b", [0, 1]) self.failUnlessEqual(a.to_data(), "a::b::0.0;;a::b::1.0") def test_rating_algo_5(self): a = RatingAlgorithm("a::b::0;;a::b::1") self.failUnlessEqual(a.items(), [("a", "b", 0), ("a", "b", 1)]) a = RatingAlgorithm() self.failUnlessEqual(a.get_all("foo"), {}) self.failUnlessEqual(a.get_all("foo", "bar"), []) def test_escaping_20(self): a = RatingAlgorithm() a.extend("foo::;;", ":;::", [0]) self.failUnlessEqual(a.to_data(), r"foo\:\:\;\;::\:\;\:\:::0.0") a = RatingAlgorithm(r"foo\:\:\;\;::;\:::0.0") self.failUnlessEqual(a.get_all("foo::;;", ";:"), [0]) def test_invalid_escaping_20(self): d = r"in:;;:va;\;li\;d\;:\:\:" a = AlbumsCompilations(d) self.failUnlessEqual(a.to_data(), d) a = AlbumsCompilations(r"fo:o::ba:\:::;x;:;;xxx") self.failUnlessEqual(a.to_data(), r"fo\:o::ba\:\:::\;x\;\:;;xxx") def test_invalid_escaping_21(self): a = AlbumsCompilations(r";xxx;;a::b::c;;x;") a = AlbumsCompilations(a.to_data()) a = AlbumsCompilations(a.to_data()) a = AlbumsCompilations(a.to_data()) self.failUnlessEqual(a.get_all("a", "b"), ["c"]) add(TFmps) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/perf/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�016026� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/perf/__init__.py��������������������������������������������������������������0000644�0001750�0001750�00000000000�12161032160�020117� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/perf/test_playlist_tag_caching.py���������������������������������������������0000644�0001750�0001750�00000006250�12161032160�023604� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import tempfile import shutil from quodlibet.formats._audio import AudioFile as Fakesong from quodlibet.util.collection import Playlist from tests import TestCase, add from random import randint from timeit import timeit,default_timer from quodlibet import const const.DEBUG = True class TPlaylistPerformance(TestCase): def setUp(self): self.temp = tempfile.mkdtemp() def tearDown(self): shutil.rmtree(self.temp) def test_playlists_featuring_performance(s): """Basic performance tests for `playlists_featuring()` Initial tests indicate that: For 100,000 songs with 20 Playlists (each of 1000 songs): -> The cache is ~= 6MB in size, delivers a 250x speed increase once warm For 10,000 songs with 20 Playlists (each of 100 songs): -> The cache is ~= 770 KB in size, 6.4x speed increase once warm For 10,000 songs with 2 Playlists (each of 5000 songs) -> The cache is ~= 770 KB in size, 180x speed increase once warm TODO: Reporting, debugging. """ # Basic sizes NUM_PLAYLISTS = 10 NUM_SONGS = 10000 # Every nth song is playlisted SONGS_TO_PLAYLIST_SIZE_RATIO = 10 PLAYLISTS_PER_PLAYLISTED_SONG = 3 ARTISTS = ["Mr Foo", "Bar", "Miss T Fie", "Dr Death"] pls = [] library = [] def setup(): for i in xrange(NUM_PLAYLISTS): pls.append(Playlist(s.temp, "List %d" % (i+1))) for i in xrange(NUM_SONGS): a = ARTISTS[randint(0,2)] t = "Song %d" % i data = {"title": t, "artist":a, "~#tracknumber": i % 20, "~filename": "%s.mp3" % t, "~#filesize":randint(1000000,100000000)} song = Fakesong(data) library.append(song) if not (i % SONGS_TO_PLAYLIST_SIZE_RATIO): song["~included"] = "yes" for j in range(PLAYLISTS_PER_PLAYLISTED_SONG): pls[(i+j) % NUM_PLAYLISTS].append(song) print_d("\nSetting up %d songs and %d playlists... " % ( NUM_SONGS, NUM_PLAYLISTS)) print_d("took %.1f ms" % (timeit(setup, "pass", default_timer, 1)*1000.0)) def get_playlists(): for song in library: #song = library[randint(0,len(library)-1)] playlists = func(song) s.failUnlessEqual(len(playlists), PLAYLISTS_PER_PLAYLISTED_SONG if song("~included") else 0) # Spot sanity check # s.failUnless(song in list(playlists)[0]) REPEATS = 2 # Now try caching version func = Playlist.playlists_featuring print_d("Timing cached get_playlists_featuring()...") cold = timeit(get_playlists, "pass", default_timer, 1) # And now it's warmed up... print_w("cold: averages %.1f ms" % (cold* 1000.0)) warm = timeit(get_playlists, "pass", default_timer, REPEATS -1) print_w("warm: averages %.1f ms (speedup = %.1f X)" % (warm * 1000.0 / (REPEATS-1), cold/warm)) add(TPlaylistPerformance) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_util_tags.py�������������������������������������������������������������0000644�0001750�0001750�00000001115�12161032160�020466� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from tests import TestCase, add from quodlibet.util import tags class TTagsSortkey(TestCase): def test_basic(self): t = ["album", "title", "artist", "part", "musicbrainz_trackid"] t.sort(key=tags.sortkey) expected = ["title", "artist", "album", "part", "musicbrainz_trackid"] self.failUnlessEqual(t, expected) add(TTagsSortkey) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_browsers__base.py��������������������������������������������������������0000644�0001750�0001750�00000001126�12173213426�021505� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.browsers._base import Browser class TBrowser(TestCase): def setUp(self): self.browser = Browser() def test_can_filter(self): for key in ["foo", "title", "fake~key", "~woobar", "~#huh"]: self.failIf(self.browser.can_filter(key)) def test_defaults(self): self.failUnless(self.browser.background) self.failIf(self.browser.reordered) self.failIf(self.browser.headers) self.failUnless(self.browser.dynamic(None)) def tearDown(self): self.browser = None add(TBrowser) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_prefs.py������������������������������������������������������������0000644�0001750�0001750�00000000736�12161032160�020655� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.prefs import PreferencesWindow from quodlibet import config class TPreferencesWindow(TestCase): def setUp(self): config.init() # Avoid warnings when running with empty config config.set_columns(["artist", "title"]) self.win = PreferencesWindow(None) def test_ctr(self): pass def tearDown(self): self.win.destroy() config.quit() add(TPreferencesWindow) ����������������������������������quodlibet-3.0.2/tests/data/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�016003� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/empty.ogg����������������������������������������������������������������0000644�0001750�0001750�00000016660�12161032160�017642� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������OggS���������>1n����@vorbis����D������ɯ������OggS����������>1n���'-Cvorbis���Xiph.Org libVorbis I 20030909����vorbis"BCV��� R!%BJc)RR)%cJhs9'A1.bkiRV!%S [hRT)cRJhs9FsB'c.b[Ic1&SJ(c1cPJ%tBG%t9c1"[ŞJ魅[JR*Td!|F[Jc1cdˁАU����@BCV� ��0EQАU�@��Eqq$G,BCV�@����(#9dIi'뺮n۶m۶ � ��4TD!����db@h*�� ��@$'IRa,&IRʣ<IƠRJ)RJ)RJa,GIRJb,FIRʣ<IƞRJ)RJ)Rʂ<iIנRJr4hɦRJDRJ)RJ)R|J)R՞\I)ROJ)RJ)RJ)RF ����F9D33MAR4{%Int9ݜr'��� B )B )B 1ĐCN9TPI%UTQeeYfeYfeYguYH!ZhXc椭9J餔RJ)t9!����! 2(B 1SNA%T@h*���@���(鈎舎舎xx(g院i*˶lۺ۾۶nqqqqqC ����B!B )S9J ������(8H$Yeiiy'zz(h{gzz隮꺮몮*k۶m۶m۶m۶m۶-!�� ��ɑIqɑ$ 4d� � ��EQq$ǒ,IDɴTdOtQu 4d��� ������C4DCtDKDQEQEQEQEQEQEQEQEQEQEQEQEQEQ<<<BCV���:#9b)")c9@h*�@�@��"9eYyy'(j@h*���@������XHx舒((((((((((((((���(GJA{xZ;bsgI˵tB(-טyǘsB bwJ9H5B��0H i i�������Hhh�������(������������������������������������������������������������������� y""�������h �������()������������������������������������������������������������������� i""�������h x �������(ij����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������p�� Y� ������������������������������������������������������������������������������ ��`� 2PhȊ� N�8��$i��8i��`i(�i���������������������������������������������������������������� ��`� 2PhJ� �,e4 i�x@����4%(4d%��`P˲,σi(B4Mi'43Ex&<L( DQU��8��ؠ)8@!+��Xy牢i*4DQM4Uy(i M<QETUׅy(iDQ4MTUuy(EQ4MTUue i꺮 DQ4MSU]W(i20ETUueY2@UUueY+ PUu]Ym�뺲,����*ф @!+(��S0&!$B&J RR(TJ !Rj)eJ) B)T��؁�؁PhJ� � D)cLBc9!T1眓P2sI)c9礔9sRJǜs9)s9眔RJsNJ)%A'9��T��`#A�R� cYig$iy(fYy'<OD4Uy(i*=Q4MSuU,zh0MQ4MUu]虦.d4Uu]n躲 \UU]W몪ڲ���VG8) ,4d%��@cR !BJ)R ��p��0 "���TRJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)QJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJRJ)RJ)RJRJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)�F8�>P Y ���(bb9)-X!sR-g1)XcΘsJI\J礴s9QJ)sΥbK))Xk9Zs9j9sls9[5�0� lXh,А�@H��aR1s:(d1 B1會B1B!R2sB!TJ眃B!PJsB!JIB!B)A!JIB!B B!PB%RR!B!RJJ%B!RJJRJ(!PJ*)PB!PJ*)RJ!B)TR !B(��� :ɨM�� �@xAI1"!娵b1c<$sRkhH1jS!ŤՎɔrTC)2dILXB#M����L�Q1��A U DD�hut1 t.  � p7x< @GQR����`��� \FGH������@"DDD3Waq�� �����@@@����� ���@@OggS�z�����>1n���OQ*-+++*,***+++,+++-+++*,***+++,+++-+++*,***+++,+++-+++*,***+++,+++-+++*,***+++,+'ؽۉ �20�=ܰ=����DD�����������˂�~lXӞ? n����@H���������e 2@B%=XӞ? ���� D���������THX0H,�=XӞ? n����@D���������@BE =ܰ=����DD���������@ e=ܰ=����@���������B2�=XӞ? n����@$$��������� E, ap%$�=ܰ=����H���������D `@P�=XӞ? ���� "��������� `b=ܰ=����@DD���������@"R@ =X^? 6���� I$���������H"0�=ܰ=����HD$���������B@ʠ=ܰ=����D"���������ʀ"�=ܰ=����$��������� AA�=ܰ=����D���������pU=XӞ? n����@D" ���������`@d@=ܰ~l����@""���������AeAPp~lXӞ? n����@H���������e 2@B%=XӞ? ���� D���������THX0H,�=XӞ? n����@D���������@BE =ܰ=����DD���������@ e=ܰ=����@���������B2�=XӞ? n����@$$��������� E, ap%$�=ܰ=����H���������D `@P�=XӞ? ���� "��������� `b=ܰ=����@DD���������@"R@ =X^? 6���� I$���������H"0�=ܰ=����HD$���������B@ʠ=ܰ=����D"���������ʀ"�=ܰ=����$��������� AA�=ܰ=����D���������pU=XӞ? n����@D" ���������`@d@=ܰ~l����@""���������AeAPp~lXӞ? n����@H���������e 2@B%=XӞ? ���� D���������THX0H,�=XӞ? n����@D���������@BE =ܰ=����DD���������@ e=ܰ=����@���������B2�=XӞ? n����@$$��������� E, ap%$�=ܰ=����H���������D `@P�=XӞ? ���� "��������� `b=ܰ=����@DD���������@"R@ =X^? 6���� I$���������H"0�=ܰ=����HD$���������B@ʠ=ܰ=����D"���������ʀ"�=ܰ=����$��������� AA�=ܰ=����D���������pU=XӞ? n����@D" ���������`@d@=ܰ~l����@""���������AeAPp~lXӞ? n����@H���������e 2@B%=XӞ? ���� D���������THX0H,�=XӞ? n����@D���������@BE =ܰ=����DD���������@ e=ܰ=����@���������B2�=XӞ? n����@$$��������� E, ap%$�=ܰ=����H���������D `@P�=XӞ? ���� "��������� `b=ܰ=����@DD���������@"R@ =X^? 6���� I$���������H"0�=ܰ=����HD$���������B@ʠ=ܰ=����D"���������ʀ"�=ܰ=����$��������� AA�=ܰ=����D���������pU=XӞ? n����@D" ���������`@d@=ܰ~l����@""���������AeAPp~lXӞ? n����@H���������e 2@B%=XӞ? ���� D���������THX0H,�=XӞ? n����@D���������@BE =ܰ=����DD���������@ e=ܰ=����@���������B2�=XӞ? n����@$$��������� E, ap%$�=ܰ=����H���������D `@P�=XӞ? ���� "��������� `b=ܰ=����@DD���������@"R@ =X^? 6���� I$���������H"0�=ܰ=����HD$���������B@ʠ=ܰ=����D"���������ʀ"�=ܰ=����$��������� AA�=ܰ=����D���������pU[ܰ[���������������@���������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/empty.opus���������������������������������������������������������������0000644�0001750�0001750�00000050511�12161032160�020045� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������OggS���������N;����OpusHeaddD�����OggS����������N;���yHOpusTags���libopus 0.9.14���&���ENCODER=opusenc from opus-tools 0.1.2 OggS��������N;���+ 2fgigijiijiijkjjjjjkkklkkkkllnlmkllmklklkkmkkklkH,JkY!�(A!㨂u pXBj+B?1uu!FOѤz4E0 33  cIZv&TDEs#*oQP͑9M 4'ydnnI)k;5yv)#7uUmMo$"}4vdKTr /ҳa=rQYEk(G g4'(U~8A&Jc_"9<R9RX qc6Ҡh,l2%m%a%Kzi&$_a{2i? 96q'8GSUx2UgA@)T 1!(\!n--L eP?gYaҏVvs%|^q4ۍΛ a߂G-̦`|OTeș" 67B18>@�MX1DyyKS$y1a5_ 'T8rGi4 E_V?3 ܸCe> #!@@ϪٽI|n5 a@#~yE"qM2ejjؿδ ҜOɪ{ackE#Q_TZ_̉PHg|]P_LIq^`;[xYa3 b=z?7 Gӽঔ,9ƎStV8rȽk BEԠ`iM+0ġkT}-�#+k Ժ]}E5a'"?#@u)X{ݫVs$Y4'<j`,GCXK*e1:/cyDa=RÈ]_g?LCF[\f 2r4\G!wKwi,x]/or jРȁviʦ- _ Έkjȃ5aB;j; O9=`BCT0x)*ɥu_d@CϽT;QNCUƶOfc*:yW?yjJa5߂GS`Ψ18" ! p r>9 Oqfj0W3rZ85>"tp*N/rHm/^V2asm{=h%Ta8Ds,du'Qc dj簘4rGJI⣩<s#2bG>hR1,QaK*s4Fwt}6Կ;:o%يa.tqof&ԈIP$rhA/?N2) sn˒ri|- έ0AhxNa[b(<3G)~$(0…x4*ҩocvΪ[^ΒyC%VLar>˂Pup;.Wĥ3U&~fZT0/JH Yj`TzO쮻}C2gy5|b5KW:\dg{:5zӬ6a3gXGZul&m~g?6]o6[ƽ͸*}G IiHuTzq?(p'p,vޡ/`ƺa>/KgA2%sĥ-lRb3*9c kPz0do>YyJ\^A~h,mDoG.bIKh an\O'BGx$v{\ {a|.fX.7Q&qREJh}#1Z$Hq'q1 pe&2aߴGzfRHe;)$!U\h7TAWGUWX\U˧D# s=:Ց5K.Fg,+ʩ%&5*^#aHwӾJf)X.fp߁uLk!9ipzjzl@IrMT+B}pBHv~= D`l- ia4^ }P{gr^aAH'0ۻځ"�.1I0T c=_m,l?Ot<7/'*>_.ZmmW,lLƢda@ou = R`6dfE@R)7âB`G6RRq9GuT.%a@",z'k*Ctq�8|F8cM&av?~ѹ5'>9`t)Á\T]Cr9iIg v՟alL�GVWTV XXPB!a$b„lOfM3S,i2=Oc%b8kwyo $Vb]<3šy<-~eV[OQ3Y㭱?TduL֑anmRfl&H.^ZVirg?#M?{g.y"Pզt]zkWsZiŪ1 Tp3 :?o[ޖa8)}Z`Wĭ^@;puf\9'Au֡'/hF;fGA<2 &OCe[&3_QEN ֋"8q_2:8a@|Ct׌|בNNr2⡥f?}�i!PA"LjG^Xр3H6Awp�MD^9)?IYoM%KNw�eEy}=Z&`#ޅ k @/6y>m(/YS,Sc;9+ yQc�8HeOS݁yua{(WV}@} Qq#Mye1ju8a F~UyU@ ÙV,!VZ}},۵@󰱾ݿ{PaK�Ͱ@O@4 eUAs(x..GXCJN:9czSO16BS<]w}l4Yb $fSтQڦsc�3\hRS5{E/yayÀ��Lq?lx}}J <4qoi Q;TGzxSHER2w%DxO0mmo~5r=\}a+@2M쳜8/W ]9dZlNĒd3QM4/WԜi7ƍUR#nB )lx *ѽ[2kSzBcqaꔚ1}Eb?ۧImA`�͹!8YU<l/3Jjp_sbg>GHS q*=> CɔK{X^H~8f)θ:b6ލYΆaO9]ZcP.-e|ٞ$aV:aK!h2`�ejwf;OhP]C*;.vIW7rM0 0DFc8a{Xr}VptةEָ6 l0hڊ֒:eE!|7ywPtBLF lsrM}aiÑnGo3R{ 9y+)Jy&R̆+ 4|<*iZ_`g=n=Im*7KIJqUkB5@a괢{}@ E&3miF`^#-%佯pi] xgF] ;תcHEblj7C\[L$y;R!ͦsk͔9q<N*M52 ذd1^!ً }q}\60>a#q)z310H o+M3Mb=} Y{d Lyjir^$b?qt^6cDJUU({t)u!}a`ӭb .EGuXY+NפD|(@@ޤFx!>Y3s+VFsC4ef1;eqN@}a<@rQjrBBv #M(l6*'gwb0>V%C?)6ٍnl}^N ٞ`̛ia{x+|yNF8hkw–N97A;[f3 mn>ȜykJ$K 󀨾W''|? WܞN(6̌)(ysaAg<n;a^"&Q$HP]xcc(DD 6B[]XS#{W#26nLI=VqzY|-_aAg=VH>zL:ͭU*w 2`lgA좥3j-5ao-C@CExNpG>*SJatU# 6KVKHzL<ijey\1 jalheN%ea_p?ltqS'n;)@Њu:-*ha :6@r[t< >.29q)fWkVZdtp&:~^,Əfwx'/^,NxٺQa괭]< h&W&m2kKV-N W6e`S d]][gCDhjLyc(7Bå0 hcce ǵaA"�QoZ\ZcqEzX zʅvr먾#Vs#׆y=edZyx-S=0$Ʀ]y/(szeX*a52PR^ڲc܅4cZ裰X+J0*\R S"!2͝s  ^ɸ WWAqՊ"uVvJԸi\9ɒ d*#Ftj6*G6=ϢuSIزA Aaj>r[f [u }&{)ڔem>m>nW8_%#xoC(ٹI]rD?+Pw@D#(0Vaa!1!s-SfRQs6D2:O ~p&pp:AEk/AKŰR'ӡyZ֧kDAOggS���w�����N;���Z 2kkklkkkklllkmjklknlkkmkllklllllmlklkkllmlnmllllmmnoQ1#_x޲,Ş6fTۻ̯Oq/U .[x"+TOל..I]$zS>qJ{^r4MFQ'AS~Wi`acN%H?lU&= &=llzӯ3H7|֠PKՒ΍gws5gњU^ͮkHѴq8bX(fa5c9F_?o.5F˚~(xW!ؓ�AF/6L?TIP0@N%sܴ(ܥD}BQ^]< au>4~Gh0S7(x:8biET<g - A ޲Kl;&Xɬ@ps7[am[א=N,܏Ud)R&hD_ihoTrm_7C.)=gV.X$@3z8+@%gD>o`a폆VQBhU r̼u!o{Kز>m`ݿB_GC_=Vdw^hrTQ^~^~p:h $ǎ{˜ 9^FKa+«xr:7x,==`&%'8f!n6owɀ Kq9E1mTAh>E<vA&[`x9Oaս:F@&pFZ:+BGuJߌ7vJQ+OVy TܓL3SL�+Iel@Fvo5~s-):~ƛA&rY' `$mu|~ëu["Hs!)[�{Y`"gPȶ JԌ,}~SK(nzj]-=q+Ja:"ߠMZ7a̅+7ar/@*:} t Q/*(NNLf~A49;d~9`+oLub~ 0amhTfÎOX)qd3@̿.Ð@+篘 =|&i,2l2^L+ĸ P 4C"l-X]dq1>+BaꡪE異lǂ< xë7p*]"t<tO/b$p8ɒcu9JpoJ!&auC8n߇Yp~`?ͅ,/5S=0б'?PW[:lmmWhN#. e]T~5OkgEȎ'tTa@cچ0G�MyK/c HdQt-$<BH<+ xa]Sb?aJR5<Pl%̘,,q,VQa+"Kh8t�;- z 5?fw[yckSت#ܖFBt\ibX{4? D}8Ad a? M X~ۿ_$8@q6H'ds,[NfvrHs%[&9 oL{g#(/؎Ca1SL~O;aKo\hC ߲,ysC|ې \S̚R9ۤ)HO w z 6�>EkR8 h8w:.5aáAK\__̀T]9 KWp+1ECPI:DLTw-t2t=]Y�wJGLg'5~"qsa\KG�\ǭVN5̵O;SUF$ug5%?M q!#`Dp w&[+(qa‹Jc/}s0m$LG=eJYay �gjɠ$"r#\W$c. in*70`3ᾘ}ΚaO9]:I 폞BZs|띨UEo`9_6Є5mNhZ O0�=Cr E\tJ7pIꀑaV_oQLٳf'seW&"� r8c<0LYӵԃ**\RvO=Xf' m=_2Ma{Omg͝7zm:*%��nV24HzޘRrsLVhB�f-Tl,l1/J=Y;vaX^""UdZP<kp _}N,_S?"}?0Jg;t*T%4zmhUB-Yā<VP<87ZaYȿ+$GGiJ�b΁uPHMƑݡ%sa>X!+ ^4BP{$0&"ql'1 j V~c}Za=r8KR,I Xv^#3_:،}=B>'>iKɏ8}t�l}<ZG*2j'% 0whyإa*.fHOBįZ8]L}0JZ4 v^FOHTū|0,6, &P}4V4.Ftc晎ܹM, sJqya!ӝp3v/}Qe;ygWK:֭|e4h7d禼;@15 d#d%˸4k�pta5#<z3=F@"1]<*_Dsk5hz۳>ȩDHQl0豈x#Jc<#aPmnN=Qo+/E9YLm aJ@2bzv_ M,hyƨ\RlPg59vxxB_?HUtߤ:k҈- 'P&e\7T*GpIaB=� OI -K$[׭P/|&xuCEEM2OFÓ=}%ޙXD&ˀ)F8yNoVHTl ɽThiNaMcUl;&dpxy(<G5DJXt';oIS$Lظ(axKV 5O >Uwa#/:kuw6N'.*sOGAl^pRot ?)�kfyLQ`~>8۲}w}C #57a@f�s/WȫpAhQ*?EtsIe}D2k0r[+%<h+ۑǖ8հ5vO{iqnh4Wla2>_mRBvh4\ԻO*Yr*F(u}@  M]GmiTi(ADX(oㆮ<2#O) ?}G7aQp$mRݪ5xv]x颛,>$>oU?vnj=Q GtL-w0=bJmkxa\\?|R~<s%Pa)<S"ϒ=D(ɺD J?SS 榷7JTAq Pd|e*a443 Wμy8 .zkaftrd!<86L=�ޖݣТF)@:<)g.S)T,0ުbuG>$~݂fDc>[ .Ca�[=Yh,nц@9TU(Z+, .`E?IEfSPn_Z9E$)3&tPyȼ`eDƽ(.atzʧϒ+NGHxK_OXj)#ࢸ5wҽ$ƂbH4φL;s* H x~Z}U a)?r{}\|82@J}#�=GvM^ (mr)NJ8J(MM�3#NaGhWa窝-?GYȂ_F̶n CXƯ0v·8%Zk7!YclEW'߁ȪS2?6a03KW(9UeoM,/l-KF7۴Mjas��-7 3zȰP] :܁ψUjPぷ5a|UpO%A.>݆24ȕR~Jd5UmJ^xE{1_x$ DoAE!:A5pqcYߌWME1Žk]]U u AyaսG i5dt ׀m5!5/>"铩e"zNko> }_U uc+SÃyYHls,pfaB}jq<oH1A] =�j^٭vVm(~z>/N,w31rXƠ6Z%JQrܗOgJCqi#Cߦpo]tya] hdiih$vI+PE~#]6R\'8lTa݅XR+4Y{q )#NyjwXdx!OSHC^ۖah# Cl<$%* #FQg `?כihY83%T}0S]CmE#Qd9#aGE[+braՀQFDM-܆2h5T5VզXTyDRr]pӖM5ʐ8@%Cyu/WFFiA4+zoۭD7(|ʡy/Ut6mS5CX;IĪcB/kT 1 kGerfm4N7+9+ۨԩ)He�F:B: /OggS��2�����N;���)*2llmlllllmlmlmkkkllkllkllkklkmllkklkllmmlklkllkoțozZa*BȤVJ (({eh<mIi*L3=`O {rJd/aM@MDESDfg )O(?@a)l)eaꎵVZMZ۲_ (ʟDꢺ9ͯ @ыkI nܑV"ۥDɘLߗwshM*iC|8GIaղe w`2fh=֎yl=d .|լa$;'g5zŠt}U;.إ.ˆsG}J?!a sFvN D.*.�WfCɃ %Iq<_"ja `\:"gHs-Yz d(715a24K`[jvC<ш^JcV25}$cߓ+/n48KrLQ)znFf,)+ c^"aH$aqaL&4F&Rſh5y☀#;!ew_:;L IdWӨB<aBn^x`*ޠPuAeHſ7ٮ3`~xP!a3JKW.f%#| =dn"OD_ΏxYf@›L:(2Lb(e%h(bRP La괹0)96QÛ.Q┧w7FlLb'dN!ʃܵ k1'ݖS-GKMS#NH^aV^ɽpfRk?&m@P#q(U1|vR3{e1N}@,oҖ.۰ Ca^.C2[G~6�k�B,SGqWjm;P. `esG\Z?Cs8Kh@,<8x'϶aERȾ]naTpd%6A�d�i`rZhf܊ T<WIq[I21y]b4?H~Y̮=I80al45Faҙ _BsD:z,Tk*$>M!2ZN:9cT,q-\>]KjWbodI} #)l|<ZEwx;7j/61rj:`aW9E+JT\o�3m/VF!::j `KHA{]?G:" yZHygްVE'DI?u9+,/]Z9Ua R0s*> Ike:]KO”4-#˙gsd1:)Alu9o9 ڄ,;M%y^g ]`8qax{1j71w1oX;@2ݔ.ZJv%m>=dx\  ̪屹 YG$D\P.PKC*#&˴Q^Be>`'dx9o ̡g˜aꡯʬGB߲HsSg!A|ǶGޚaC[#N !Ƴ2&md(%n ֖WjD&q${liaJ>{Y}D$rB ɚOS תq7a'l9_YvhH,dĎ3Ō{"_olSŘӥ0aAI1z<)yI}U 6q?gr"~I cU5G%%ݹ%>/?WU `ʎALiJ*_vcK?yƃ@<// -l>,av I\Dd' r';t1Kgꃴ;Rb|<EIWHzރ,,KEY/M4b4>uVaa괧 D׳ن Izær֔sل} u/Y9jɄάzyQ.a 54Iibc,<7ѥa@f�_Lpm /yB";l�YEPn GudL>O:J;ׯB D / ڃζ*7όn[5GစaD+yT!:>H6/1h;. AEt `)xK*6(bFFYO!ӱ]ѩ@4>;h{aH#W]m@.Xt@H]mzOIer-< //nՅi"xT_PAgff*;e arLרp51TYi5 Ya|:XU:}`8Mզ/ϩQb0/q)a^U9ҡ̗Ù$jR@*#[Y \REYi7ic8:>km|ANaҿM&a筣ϵk~)k) % ƒ‡RF.i"`mSP/Ȇ2Wv N+?XZ]KZo; T!*_9ap"lzi-@v}~Wp0HR oqAJI,ZVq8 lɒ)楗g,-[Ŗx$-0oS8*D5O:X%mLNJ.|=7W&r<?9K!2Pљojvړ ,` *pUщ=Aw>p f~ꙶw�aƼ^'!XJ-IfZ"Q Q=-5`0̎Y-piN=M8}4ؒi)2{M<@*a܇vSzfjr`z9'ֆ%WCS`ҷ)D6H0�6Y  4> WU6xX)NNT<daߴE]5  kTTNtIn0^' @RZDNsMDȋtBR'ĄGCCyɵiTASDkvSa GeͣOTuC\_{ @TW2B齫8D"w#_u[lAа3,riѼ3.S^ޓ+eB_ o]N;.qN\`]ux,uڄ$Ĕ@`ԍ"pFqs,RSe@XqKj_*A;)FhRɆ $sQd0ZRloțOE10;QNjU/{;C& l3@0kk$IL4Yq&r6>߈L.#i/˃#2+1 -=v&CaphhS L1!~qEnnj ~#$۟@=1He+}.u"L}|p$hح@ejb{\7 =uå5buuIDۦ7Y8CL͎dv_6bi a{O~h@ao.n F~.;9 I /5 \aꡪ?AR¨<x`cr>\D\ψ;?!o腩hpZ?~dӷ,nA'"gw:ׇR_[ YRR0q{d a}A00q"ĢᣄNgMyte@Mv` JWooïT{>!v0rEnΖ}?��T#*�$-VO(/4KaAgR}^M}O~F+Qq?hxb` S2tZpc_GznOܰ+c ko}7sM[&Z`@s >ay[r7I_I!$CѺw2W&G)P{Fe Yt(wt*z("yDn5i:_Av̔T?'tm a?(Tjdi >!ɞ7gk:aXsԴQ[N l ̐@+%E+'BKC P ^G,'0m+R;}|kPm-[aB㘍>>3~{Ė[p8 |y(ɲn,->J({H$}y5t rVřeTTL-! :&`*aôr_uB;?Y/{k-o{ /fCNDg?3 lH:_4s{Wl U0rJ]u0w>eHBY2havNEp -E9mXS7� K&ym, h9SC*8b׋̖ύg?oNOh!qa42\ՁGMx �e#Ⱥh vdJp&vHfkp,W\@g*?W|P&Q� 9F}NLTa괮(my"gMo ˂Y&p#F۷"hJYlY' i/㔗!qZvN'H|Kq3L m|=78ULaA= RFՁ.4wGf5{gU6>*TohAq+3yWēlr_:�ŗ;If Nc9 Ca괢w6̼0rDmH[v,YT>^[(:|!Wf.-K(Hא#N,6ef -8Vay9"C$7>Z(T2Ώns dgDLw*߆-=J{𝔢ovsMb.m{ڄ_i2a9~BR :kI-T7f'-9_bW A:P"⏦O Hαp5j"pg_ޟE18So͠5]mL0KhܨKZŠ SDm1+1~:~54#aϽ}lF5Aj$S/S!H׌"$ J>FER.'.5gpKZ49W.)*D 9OggS�G�����N;���smc#kklkklklmkkkmlkkkklmlkklkmllllkllla=4 /NĄxVq<OA:\=.8uJ_qݪ0;J=j^@d O�*Mr5ax{ܱ0`:i-*Hk™3"340JNz �\n-ak†^�rwY-\,>}ɐ~Y\aea{&NܢDuMS6W?}8 9}\Z[Ga5<TW󤂅Ȣ>*vJRs$e6l3HEC.u/A+oE:a �13XpjBmDtdpIS*cJ9$إyB.fÏ9v�pS}>.bGarLc0δfG&:aBF6'8RO)MC 44RS9|c�^_P(/W|,z㩒hXdQs�@$k )ahʅ:6O,=K:"6eƹ܏A$V;x]o<D׺Lԃ!)tG mw>^a"saß[ +s3,x9M <yj[6* U'7㥗 z%7+C(ZRfXG|r,=m7?a@e[kccGzVR_4?sD'JF|՘a2mD'`UIx!$ܽ%* ۮ,i7ME_u*C1`Eo]j�ͨl "aēz8LJlV5,!?J.1ص jS*ιGHtEwxyjO6k+=`q~9 af88FMй&Y@xn:R Gk /KK!C"7ɃRē(5 Q<)AԳԵ2a; VaNMW9piE] ]3ip]Y4&PY|usr%>@(tM;4b68siW`*OPZa .!^f�v,I}#h nOW3N9iزhb]l*ӽ>O70((Ÿ)zO91?y;6][:K`Y\%a� ȸ>i!sM(/ R>In`6vuÁ'iaJ.73$Qp2_*t))f'') )?ДBg&Ba3=۷G7/5L!c'[w>miYN@-$!,wbvL,gg_"o'0J,xC=^뿃^yI�zaӌҮH"a2aHPd~jYDE J<EFCW,տP`䭻`cԳl\FZ |LmS; =Rfa܄\zFm1KM W#xgRgڶ%эZ6u+à#&-bKYƾ@{o<H$A^[%&a<%a1c@T2776`PM"�i,")3l.هlGl)B& 0Gu}߀mU"Bs7ug*j´ shn@P"50Ia窤{1h$#ث�ݠ%A#A ۔9`2:,}%c>5n~ oD/v,5]C&jy▧g- JeLa2(ԑWtsmP?`ſΉs<&zkfUSEfL}G]~C�TƺmFPD2Ⱦ}JrK AN!aAOx,_Xfsqg3?Eb[Nuwz&hB$Oz8*vGMl&u<Jħ,8K(<~sU~)/b9kJaI2} x&}U^ '{iס:VyD9O1rd^Ɲ>7ʳ 'dFyŻt)Q^Sh=ɍ&ߗD5paEť4DgAX9n.Ȼ@TKH ǰ5iՑd}F/슁d·*@*d/gzCTa </hoact[ZIn>ƿ njbN^"-DzO�A* ,fuy&=$GsK/Gn1V꣺/)ADa:i3W�:uw {!B?~#ջ!w�`z'Akl.%RP3NT9O jJw3r6eAb巎^TA+uE%a@aɏy "@B=1 hPBH/#܇*DW$Ӊ/pԍ9:{VK>b~XsUʚ6u\e$lC,\qI\aüEX/PW~.E%r E[Dc$NJ$U0\h(<ܛ*,ZwX&V"!CA J!a<q 'gi?axQRjSֹ}_u aG +S^L0~V0ų>G]b'g˄}r -_#`a{vk?]\D |oxm4X'ŕS,ހ!�! "'u,( e $Y=DRx&Sil /a몏 bANnz-iz.h)x#$xϯlGe45tTQ9`@a伴NJ{"~OF BHa-3ڬ3Y9@![I 9ʒ3%Cʂ]Xܟ&RDV[J$j5H?JP!'lOX2a3TbWUW u?hqkxF'l 4=ψ}^7.-MkDcNh$뾃}Vwd2> ^?C$<a@x|i_ lZKv<1EcZDF/Ĩw7D@h׬59)i+؆\O[I3;=aLJf4"i$,bs+ aeCL%`wYK=r޲ c)lpB(Xj Y{I�ۧ )a+1 8*Y:9k;<8!�H \~xomESNaNӕnaźr}i},{VG؄8x5hgQ"G^ `䏿Mti/:e4MZ�cMD0[Gbr'FR0f?3튳%f%%]2UH`g8`KK\b ACc>mP֗hW px���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/silence-44-s.mpc���������������������������������������������������������0000644�0001750�0001750�00000003641�12161032160�020611� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������MP+���\gg��Йs4}>|n"vKd"墲*{eiy\=sy4g/cX@Occ{҄-y^g2<DGjQ(5 lYR1ElŤ.<*0ZP>;ZK'?I%.]$Q(w%3V�I9_x{zÿLvZhߞ0|6H }7ܤ>_I]Y-&D.;"0I,H)zZb>sϱ ӷ]g;l*,/*'o֕ 5H6P&C(jAon]~пB8 xqKrJy=A8p:P1(iĝ7X?ZE?l:яӼ1F8Tp=|'mX/D*H hrn@{j-y-B^ BN9qL6.[`[&dN"hG Nc].h>;R'=2L<N7nc͔K H^2{fUt R{:r2q%L&9$ws> ǽ>{E0织F6/""K{|̜ [ĞK~zw69UTUDDWvB}|*^l] wLxInL sGSTI*}{O nQi5urNl i�m;IZX\^&ЖV*UAޮhn ȇYQ|8VM3yll mS33a)IqeZ9[f[-+gրOE uG&WG5&6|_{;V]sϤL/O} ۚ\%1b- ZU̓RT}:pFg+i}WiY<l[.cSfZzglnw= <S*b<zPz_v[o۞*ӈ{z=vpgf*Sjg禮ؑ#xs{RYo7$ Dp29|շvZ!#^% yyӤmnM<<g~ΟӞ3sϟg39{ϺaI%|Lq! `Y^H> �y럻+)2n$pմs9doZ���W dǩdoz۶mےcpz_UUU]?Vt.\tپpkU`__G뼪j$ҤLT<UU~r�[U5]ţK BUUuVAP~��:APETAGEX��M�� ���������������������Date�2004�������Track�02/10�������Title�Silence�������Genre�Silence �������Artist�piman�jzig�������Album�Quod Libet Test Data�������Replaygain_Album_Gain�+9.27 dB�������Replaygain_Track_Gain�+9.27 dB�������Replaygain_Track_Peak�0.229712820826�������Replaygain_Album_Peak�0.229712820826APETAGEX��M�� �������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/test.mid�����������������������������������������������������������������0000755�0001750�0001750�00000010100�12161032160�017442� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������MThd������`MTrk���4�XXXXXX� Tempo/TimeSig�Y���QR�X�/�MTrk��~�bbbbbbb� aaaaaaaaaaaa�?���C_`C��C_`C��C_`C��?_H?��F_F��C_`C��?_H?��F_F��C_@C��J_`J��J_`J��J_`J��K_HK��F_F��B_`B��?_H?��F_F��C_@C��O_`O��C_HC��C_C��O_`O��N_HN��M_M��L_L��K_K��L_0L�0D_0D��I_`I��H_HH��G_G��F_F��E_E��F_0F�0?_0?��B_`B��?_H?��B_B��F_`F��C_HC��F_F��J_@J��O_`O��C_HC��C_C��O_`O��N_HN��M_M��L_L��K_K��L_0L�0D_0D��I_`I��H_HH��G_G��F_F��E_E��F_0F�0?_0?��B_`B��?_H?��F_F��C_`C��?_H?��F_F��C_@C��C_`C��C_`C��C_`C��?_H?��F_F��C_`C��?_H?��F_F��C_@C��J_`J��J_`J��J_`J��K_HK��F_F��B_`B��?_H?��F_F��C_@C��O_`O��C_HC��C_C��O_`O��N_HN��M_M��L_L��K_K��L_0L�0D_0D��I_`I��H_HH��G_G��F_F��E_E��F_0F�0?_0?��B_`B��?_H?��F_F��C_`C��?_H?��F_F��C_@C�0>_0>��?_0?��<_0<�0F_0F��E_0E��B_0B�0J_0J��I_0I��E_0E��H_0H��F_0F��B_0B��?_0?�0>_0>��?_0?��<_0<�0F_0F��E_0E��B_0B�0O_0O��J_0J��F_0F��D_0D��?_0?��;_0;��8_08�0>_0>��?_0?��<_0<�0F_0F��E_0E��B_0B�0J_0J��I_0I��E_0E��H_0H��F_0F��B_0B��?_0?�0?_0?��@_0@��=_0=�0G_0G��F_0F��C_0C�0P_0P��K_0K��G_0G��E_0E��@_0@��<_0<��9_09��E_`E��E_`E��E_`E��A_HA��H_H��E_`E��A_HA��H_H��E_@E��L_`L��L_`L��L_`L��M_HM��H_H��D_`D��A_HA��H_H��E_@E��Q_`Q��E_HE��E_E��Q_`Q��P_HP��O_O��N_N��M_M��N_0N�0F_0F��K_`K��J_HJ��I_I��H_H��G_G��H_0H�0A_0A��D_`D��A_HA��H_H��E_`E��A_HA��H_H��E_@E��Q_`Q��E_HE��E_E��Q_`Q��P_HP��O_O��N_N��M_M��N_0N�0F_0F��K_`K��J_HJ��I_I��H_H��G_G��H_0H�0A_0A��D_`D��A_HA��H_H��E_`E��A_HA��H_H��E_E��/�MTrk���Piano 1� Roland SC-55�?���>_`>��>_`>��>_`>��:_H:�>_`>��:_H:�>_@>��F_`F��F_`F��F_`F��F_HF�?_`?��:_H:�>_@>��J_`J�`J_`J��J_HJ�I_I�I_0I�`D_`D��D_HD�B_B�B_0B�`?_`?��:_H:�C_`C��:_H:�F_@F��K_`K�`K_`K��K_HK�I_I�I_0I�`D_`D��D_HD�B_B�B_0B�`?_`?��:_H:�>_`>��:_H:�>_@>��>_`>��>_`>��>_`>��:_H:�>_`>��:_H:�>_@>��F_`F��F_`F��F_`F��F_HF�?_`?��:_H:�>_@>��J_`J�`J_`J��J_HJ�I_I�I_0I�`D_`D��D_HD�B_B�B_0B�`?_`?��:_H:�>_`>��:_H:�>_@>��@_`@��@_`@��@_`@��<_H<�@_`@��<_H<�@_@@��H_`H��H_`H��H_`H��H_HH�A_`A��<_H<�@_@@��L_`L�`L_`L��L_HL�K_K�K_0K�`F_`F��F_HF�D_D�D_0D�`A_`A��<_H<�@_`@��<_H<�@_@@��M_`M�`L_`L��L_HL�K_K�K_0K�`F_`F��F_HF�D_D�D_0D�`A_`A��<_H<�@_`@��<_H<�@_@��/�MTrk���GGGGGGG� XXXXXXXXXXXX�?���:_`:��:_`:��:_`:��6_H6�:_`:��6_H6�:_@:��C_`C��C_`C��C_`C��B_HB�:_`:��6_H6�:_@:��F_`F�`F_`F��F_HF�D_D�D_0D�`@_`@��@_H@�?_?�?_0?�`:_`:��6_H6�>_`>�`C_@C��F_`F�`F_`F��F_HF�D_D�D_0D�`@_`@��@_H@�?_?�?_0?�`:_`:��6_H6�:_`:��6_H6�:_@:��:_`:��:_`:��:_`:��6_H6�:_`:��6_H6�:_@:��C_`C��C_`C��C_`C��B_HB�:_`:��6_H6�:_@:��F_`F�`F_`F��F_HF�D_D�D_0D�`@_`@��@_H@�?_?�?_0?�`:_`:��6_H6�:_`:��6_H6�:_@:��<_`<��<_`<��<_`<��8_H8�<_`<��8_H8�<_@<��E_`E��E_`E��E_`E��D_HD�<_`<��8_H8�<_@<��H_`H�`H_`H��H_HH�F_F�F_0F�`B_`B��B_HB�A_A�A_0A�`<_`<��8_H8�<_`<��8_H8�<_@<��H_`H�`H_`H��H_HH�F_F�F_0F�`B_`B��B_HB�A_A�A_0A�`<_`<��8_H8�<_`<��8_H8�<_<��/�MTrk���Piano 1� Roland SC-55�?���+_`+��+_`+��+_`+��'_`'��+_`+��'_`'��+_`+��+_`+��+_`+��+_`+��+_`+��'_`'��'_`'��'_`'��+_`+��+_`+��+_`+��+_`+��+_`+��+_`+��%_`%��%_`%��%_`%��%_`%��'_`'��'_`'��'_`'��'_`'��+_`+��'_`'��+_`+��+_`+��'_`'��'_`'��+_`+��+_`+��%_0%��1_01��%_0%��1_01��%_0%��1_01��%_0%��1_01��'_0'��3_03��'_0'��3_03��'_0'��3_03��'_0'��3_03��+_`+��$_`$��+_`+��+_`+��+_`+��+_`+��+_`+��'_`'��+_`+��'_`'��+_`+��+_`+��+_`+��+_`+��+_`+��'_`'��'_`'��'_`'��+_`+��+_`+��+_`+��+_`+��+_`+��+_`+��%_`%��%_`%��%_`%��%_`%��'_`'��'_`'��'_`'��'_`'��+_`+��$_`$��+_@+��2_@2��2_@2��2_@2��2_`2��2_`2��2_@2��2_@2��2_@2��2_`2��2_`2��+_@+��+_@+��+_@+��+_`+��+_`+��,_@,��,_@,��,_@,��-_`-��(_`(��-_`-��-_`-��-_`-��)_`)��-_`-��)_`)��-_`-��-_`-��-_`-��-_`-��-_`-��)_`)��)_`)��)_`)��-_`-��-_`-��-_`-��-_`-��-_`-��-_`-��'_`'��'_`'��'_`'��'_`'��)_`)��)_`)��)_`)��)_`)��-_`-��&_`&��-_@-��)_`)��)_`)��-_`-��-_`-��'_0'�0'_0'�0'_0'�0'_0'�0)_0)�0)_0)�0)_0)�0)_0)�0-_`-��)_`)��-_0-��)_0)��-_0-��/�MTrk����HHHHHHH� ZZZZZZZZZZZZ�?���C_`C�`C_`C��C_HC�X=_`=��=_H=�C_`C�`C_`C��C_HC�X=_`=��=_H=�C_`C�`C_`C��C_HC�X=_`=��=_H=�E_`E�`E_`E��E_HE�X?_`?��?_H?�E_`E�`E_`E��E_HE�X?_`?��?_H?��/�P�PĞJ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/silence-44-s.wv����������������������������������������������������������0000644�0001750�0001750�00000104513�12161032160�020466� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������wvpk����z�����"V��1# !RIFF$ �WAVEfmt �����D�����data� �BWWGHC����������������������������e���� �2<g~J4���>ԡO�v_ Ih�t G3z|8Cp‡z1: Yp1ѳ00X8�E�f�?<�n�~PgC=�xG0� ��)\O8���NX3GY9S3SO8q`�'PAzh��3 }8Ss��< �f@ǀ�e ��D �>l���0z`88s�z!x i�O'�>�h�#8 ~o@�pwc ��0z-`�3 @O>O q@~VO=>'z4c�<>A |y�O#CH�G=9ҩ=#=HO~d�?7=`�!|�f�`�8tq�H @?:= `�N}�=�FcG�8`�HOp c=�x�< :t �p�c�e�zQx!:� �@z�F x�hF �ta�CO0�z1|6G=�c ���=Y~D0�C= >!:u0�/v�|ѣpG0:�0�a�84F8�<Dl0�|s�9��|0Sf@Ox�}.LTѳ~JϢs�?2�>ѩ|40�8�:!=��� �h � c@�C~PzF?3k9E?2GF342k90�3=jpOЃ~V< �4z1#�8!842C?S�s�<�N=� = I?*:0x�� ��':�  <kc�1�`�1���0� g8ҩ<�>9�>}C��|~c�FFxo 1�@|4t�~n�:`�|�q�:�>ԩcOl�?O�2�zփ��D?1SO�(�:(|2O5�0q�ԩ=z/#=h���~C3zc�? |s�?6ѧ@S 2~B�f�?z��� ��� s=s=!<�c��>�< 1��d�3G!�@3th38>f�$x�=1�!<|C�GtGz�Ip�@�>gz�38ty� Mx'z2�sOc��f �E40�< s>d�4zpi��1��c@�|�tq �<�0�38pd�d�< G0C0�£e�88C0gf��f�G2���?00�C=f �c���t I�>ѡ'> y�O03�~N3�H88C> Yc`��q�?4s�h�x�`�1}0O{@OCh@?g= @8S>�>'n� �>13DI/h�ǐ}:S �>=~d f_ �>7j`�f�3���.}1��Fc�O� T<�=>}:G}>�'x=!&g��~` �y � a@3�� �9j�|s��>A>`u =q�4x�?9�4�"z�<Ff`��CD `я=GS;K?00h`��}φp 3= `0��>O}C #�>42Ou�H?1����>ӏaz/ |2C�OH4z u�/1}8'T`�x8p/ "=8@�i��52�x9'�~B�>'C:0T??��~@4:>tC}>0>1Op Ⴡ�x�8�D3�h�D  ~ahCd�Cg}�r�d�@��f�Oz҃Fl`�40��F�pG#C}2��Y<c},h@2k�;0�_ it m�3f� `p@�}s�Ct�#�v�3O0:@O8�> Գ~Bx�8D |F>Wc�?�~`�0�|OpzӁ�1��?4�C�>1c@�N=< �|:1��3gz1h�:4O q@e�:��у\x@z³|c ��>h@4x}G p`�i�?`�O0:��>C}6pht3x�z ɀN�| 2CtYhG8L}EFODQ= �г5:� |2�LOtG0GxГF< 0Nѳ~H 8>h�h?Da�}:s�?<C31'}c� `}~l�@CO}pj48u qF0 d�?A4x� YpA8CxOt1���fG=a�z'4>i@t�c��f�O:<t�F4:0gl�x�>5�x`@q� i�/xA 3tԡѣ<гc�g}O �� �h��~b@��>ԡc`��d@Y y�c��q� ��F= y�?2c�:uSgAn�zgx9S��800��h`�8DL1C4z< �t�8l�?'�^:!1} =�}2'֡s� `` �ѩ��~@~j`�'z9z �@4�`�30��G}'x9`�8N=�`�88F�p pѳN}4e�O5PT�~n� �>G:�FgF `�x|2s@�>z�=00��>G2Gx`0|3CC:<c�f�?t Y#8c` ��3<s}8��|69s�O:(2'�~L�z:N= 3:~Tq�O2�< q�O8�v�3?Be�x�>i�#:~p` ��� i��4C >�>ֈԣ�Iˀ>1�� 'l�2CCx9StY I�D =' �N0�/ }�Cx5CAc��f �8`@0s�|�c �B�|310��xЃN��=t #= `z Q >gc�� '< @xGS"z�##4D3Qz'd�?3��f��>9�:0�`�#��ѣ!�80xԃNу |.>~b�'�|�!wvpkp����z�"V��"V��1+&ȋBWWGHC��������������������������� � <`,HcH�pC2їH?¡G�>�~`�C�g1��g}8t ��~f�?0�KA}23�1��� �xQ�40 p p @H?թc�=I 2`0z3= A 9�zA�~j� F�~f`��=ԩ`�I?15HP4<c=h:t }2�QG>Ќ�a�83xСG=k�4O <A0Wxx A24x��t�10�1�~l�x�h4TC=j,|��`p49��YPx}(te�L?CPO| �=/�|<=�@L>~D4xCL38o�> c=��~F=�xԏNF3|O`�|9�ـ|O i�3f�t@#84s�2gx~l�Ozԓ~npj�>Ca�'4x�ѩDd � A}0C<�Cz `0�@d�~d�Ha�p�2c�I >gs�?2 `p!) }G'z z9l��z`4?@>8O>c�?W:S:p }<�|3/D?$0��XOz>10�`��>x18|:C?h0l��N='cp�EO@`���>C� y���:~P`pux}g= `000�`��4�`�O�f|2O0zCa}0�pO��>4|$@?3�gz~j�dA?02C �4n_|00�1t xң|2O0c���p �S�|29Уp '1}69�c��~f�0Tj```��tA2/�c�@ = ��|60���=YX344��O}�~PF�Czi�O8p �0@ @�|`F4zgx=q�S30xֳpG`�8z<y`�:8p��c� 6ouj�<�<a``��>�0zM y��< �Ft��f�c��N= IY�< A?Otq �z8�>< ԓ �<':DO8#�h�2�1��O= A�~P"8p}61�>Hc���1O@?Oj1���d�zf�_I�!c��f@?s�0g4 zֳ A4`�?3x胁��4�>O�8u gX?5�< sh(8e��>�t|C�F >x}2|4�<�:0l�Ɂ�c��O>�e�/c `��u A:|<�zOz��4g2�<�!�f`4�^D?p 'Ɛ��>G`�\\�x�}4GCCOg}!zC�pI裁�Ozҡ=POH��|4 a�10d��v�60p�xO�0� .= 9 a�1��?9! q�|<�|2?j�uS}0s�'=|x҃>�)"L0!}s�#p |*x!8p `g= >g|��}0G9Oq�:6[?1YFc���@�Fpc}8�`t�>�|>0�0|4S> Q4zg:t �|$z��>z>0~B�C�|91|:g�C?s�?'w@?D>h1��^�N=u�za�~j�?4��<A>�=<a�;9!��p> g5|�?S}zЩ�FO| = l�`�xgp�i3z#>1'=Q8uti@H:h�A>| A}8cf�h<�=gp�x�>d@>Џ'�F}0SA3CO2����>ҩ/p<XϢ{ �>~b�O``@0�2�3=CCx�p΁1 �y`�g<чC�#2�}h00�zS= p i� QOc��i���Cz}> �Pp�'}CNC<`��s�j!=}s�30� @�N= g��p��>ѩC�>= f�'u1�� }�@>Ӄ>աCҳ |1oDOti� �8�Ρ@=k~H1��;`�>�0h�<СԳό�Ztcя Q?8  `:t �Lg`�O gd�t �<3}Ct� Џ90�g<i�SG=A?;c�#8e@d��f�xҏ��|2j4d`�1�'!|4�Cg`�=�~u ��i �90� @?-Y}<ti�p�t�-}>Dc`��4i�_C=kD;'�[C0` �'h�?+d� 32�F�>z�z��u“>Oc��f� c��f`��O ||:?Jk~b�N=�~`� S̀f``�� h�x:uACb�^ H1��;ߐp~b� `�>'T?!p� i�1OA�1��c���gC\\x80G�4�~@?;G}?k�=q �� Qd `4)�N}�=�@�F:p 0c��fd�1�:#�~m�z0�1��zGt�x�@ �p�f���pc� �\O>�|z9�`` �s�s�y`�x�G==G8�= h�~`��8�>l�= � �g�<< =Y?1g1�� �P#`�|��0�3x1OtI?4x }4 >�<~j�#O5x�0�`�x >�@�>�~L <AB>Y��~x�0/�G}"|6p <�>чx�1C!8d��F8e���� �||g}1K3:02c �!|:�C�><`@ϢDQ�8�ue� Y3�l�0�z�zЌ1���p�c�90zСOX]Hz�>O� @~v�Oѩ�C3s�>ч8 <kDOQ= `wvpk<����z�D��"V��1~LBWWGHC�������������R��������������D gz `"�|HNG|80hd�~b���|_d�>�h�^c4p�O �0g=p_Dz8p�q};�<jd�8<s�O|Ot`~~3�ht#}2'= |�`}c@�4�:p<f�3��>1>9E?A �N=5<AFDO�h�� ��i� <i`�1<ԏG0d �гG0xXрe�v` ��f�!�> 15:5�P��G��f�`t p|:өg�p >'X!}>ѯ `@�~N� `�P :է�Nc��~h�S0�|6c�ǀz֩x�4t�Oc��f�3$c�3�uI/h�?7>�u2�48g=' Z��|рh$@�>�~L G�F`t < |6҇l� g:0�:E809G=T?08e�Q:p'0@N0z�cg=kt@@_e�Fԏa�3'>x `0!g> q@}  Q>�>'t��~x�f�?c�OH�>AL)�!<>я D4:3L h q� `:�==A>Oi�>=ԃq�:[ 9c��> z�Oi� !|0�>Ӏ����t y�hta�3�FO8�N}ko�>�^:у>�=g@ԩCGxg=Y�FP?> < � ��Ā �?3�|C?0:��Ȁ�N�� ��7�0@z�~d�?<?@�48tԧ2C�^0s�|1<q``�� �pD?c�h0Gx��p�~TO:5u�?CcD3')zd� YO'pA?C�> < QS3�2���Os30`�!<i�38�f `��ѡ4HO:00:@3s� I �pzԏ< �pq�3G= 'gh��Ij�@�|0:u!�20�F>:Gd� @|<�z a`�G|d@:0� `Dof�ty��!�~NFpI��f�OxPO8p�l�3s@�tQd�O>�uczg:u '' I S>�d�x�p�f��0 | �Ft#�00 ��>�<i�3g= Y>9}|ѩG=Г>}>c��>O�d�8s�Գ>< >'zO!@:`�_�8G=j2��c�'=q�`�>'D �8��f�Q#c`��2�zGz0>O#}��1OxЏD4�GGh>g:54�O�~f��|0s�ta � �F�|10�Y?GC�p`g\0}":E?1'�Og0�':�C8�>�f�2>|8ty�>!}9!zO 3= �>ԏ }6�0zև@�~``� g�ԩ'�> | � �|O A3�i� �sQ:�>ѳ>)<��f��>ӳ��~ǸI Az!�d� �htg! @Xz�N��<\3e�OC>փv�C�}'c�~D ��0s�?3zԳFi�O� x9|>�(L3`�O0�< 8'= FO5:<0 УFϢ'`` ��f��~LOc�� 0>ч2O�^z14��b� >9xг>y�t1t<GD3:4`�v�_ Ȁ>փ>ψ ~@ g�Gh4Cd�\= Y '!�0@i<O42SO8,C|6<G=Yzpq�F:~B3 H~@� �>184z�>p �8�f`�4OpG,8��<}&:#x�v�!�N>zԈ|'�>�}GxС@�FOCt <A} tOz>AO:|S?s��h 7B#Pi�O2�c`��<S>� |8x�x8#f�p ԣ~B?60P4d�O Q 1��` �S�f��~Z}<>'z�F�IO40�`'d�h�:tq�?Lq�N�>IHGXO230�|<`�x9Ol�#80��A3&>�@�N1'='Ti�3�q� �;}0�:u 'x�=y���~Ry�xg0�g`�|�3Of��@+BOz �I:�>�>�``�g� Ѓ5CC�4zuh<0�i�?�4c�� �3� z1pjD'}6|у`�:5|�3g=q��~d@�h�C?|�|Sh���< �8�~k�oVf�az1�����p ��< `Op `9��e@i �#D��|>|;s� SN>�N=|C4s�?2k �,0�>�4� 2c�>gxx }1<�Ya t�c!Fc��0�I'}o�1��O2�`#:�~J}!A3�g=�D3| P?3G>�p A30��s�Q�N}Sl �>F2CQp s=I�>':t `d`�<C}0<'xGO c�C�1��T< ^2� �[�4X?0S?:g�Сǁ�z �Oh�}6  `�f�O EC`�ǀ~b � C}$<y�>1�' Gx|$:0�:$zz¡1�>�'zЃN}<�<y`�Gc�ppOp`k`�8' �pi� ��<�x H�8G)�'`�P>80z҃>~1'=1џ"tq�g:�?by��~n�2gwvpkN����z�f�"V��1H\7BWWGHC�������������������������� ��=Y`�>1C Qt`SzN O 5z0�G}4�c��X�24s� `��= y� ԟ5x8584c��}2d�?| i�?Ї85:``���~�_ht q�Y�0�ЏOI�O#9`�<y` ��~z�6S8G2$z�} 1��zС02C|�zty|7���ܢ0Y�>Oi�4TĀtg4ѓ~{�|�HOC8>��>G$H?2t IOz�N!z�>ң> zЩ4t�Gsx�F©'!<`@`�C�0�>С|:�F 'z Г `D?6{9s�t`�Ot��>ֳ�>C� ��:`@LOPpЩ�<s` `��x�4|=` Fi4� @8Txgx��z1��`�гEGd`��>�20�IСS~z�c��2op=y~Dl�C! �SO<i<c`�>1Ot9φ@:8 Ih �8Ei4Ou=,:#`�_ zG�}>sh�}CϚ|҃~l �����=q�:t<i3c �X#xa4@#�>ӣf��=g>��>A`�?20�q�L2C#8c:u �8q�x�Qz�NЃ>0��s�3ǁ� }��>�p� }c �>F::_��z�p �O�~Vi�!z>#�~K:��< oWPN7pjh8�>�>ϊ>GL s�9` �C?00�C:!�)g=��@85t�q��}S2'T3���Nz>҃f �7d@?::c}:>O�>!x't `zЩ10�` ����>׃>׃>�N= Q?0�=A�|0Q�AOz�@0xq�4~Jf�?3S<i@O21ѣ�³>g:t ~D|_d�� �t |�?3C�>ko�<G}!)0�:41�`��XD3��>S}O@<i�q�p��p9gz�`@���<Q<A=A�?9c��~@�|0O�>�~D88�!<Y0c�8d�@Ozip `0}$c ���>�`�i�0�� �L�t zҏ�`�d�?C 48s�j�;S�<� ��CC8810t�Oz4z@�4c�?5= �|2pQ�~l� `�p�?3O�2p Ч8u�}0ѣGb&�N90�|3�<k00i�i�Y_ ' �ph4:0d8Oe�гѧxc��}2gx0kz >ƀ�< ��4c ���`�;'':pt�V�ң@0�A Сhtj�< 9O�<�f��>ѓ~T:c���x'l�>�f� �xO >G:t�>ҏ Á!@#Tc ���3>'�'8>�4Dg�^ч}Oe�<y�?0s�� ҃>9s�  Q3 1xҏ'tS}2s�3OC1�� DS<a@�>p�3#t�>�01SA41��?�|8O�|( 8`�8tA A:4z'z �@;/@d`�O`'=Ok0�IO< ht y�~t�?2'c� E?:>Ǣ(CŐF�0Pa�f�}ѩ Ї:8O8`0t�c�4C �NN='0c@�>= at<~e�;�:sz `�d��>Щg>�p�C0z!8tԳN>�x�0|'|s�Oz@�^s�=5!<I?1_:�0�3}0D3'p�� �N}�cl�?0t�c�a� >gh�F>1)z�<A O �>)8D�uFz9s�?10\tj4O5��=Yc �z�/4D~t�|4=i�~`�3 =�~h@p�3f� f�C>ѧ8841xG:�FzgzOp y�~l�?$D?0ѡgl�F3?o�X�phd�1OpQq�~J�uy�D88d@|>� ``x'~ROh� 0O<�`cH `DC}0zp]3�|;2�A?3�HN=>�=I:0zև�~`�a`�O�p 'd�Џ C>1�@4��u�8����� `0�zӀ#:S>z'}68 <A�pf�C?0O8 )8D<�O<C?zҩ u'�>OГ '`�z=[a:�f�ƀ�< i��|GC�'�t QO< >0c��p}Gz9|01�h�OLMm�s�ԣ~L a�s�<j q��~l�>=GP?@OT0Ou0�20�|4Щs� x|`4zh�F1>'8d�z }�~l�> c}$z9�f�#z78D?C8pas@�52CO:��0x�>ׇz1c �g!:s�"x �0�|G}C�>өc�??aO`@G4 �4s� `0#�^0~n�Ј02C�!h���py�O<a:�#=cN=Y |���}2 88!8E�D aH�>ѓ~b  9���<<Q3|00��k��<Ix�C8�>'``�1� 7P�== Ѓ~@��>�F?0��~z�#}6��|20 �'~D?%1��?2?BO>ө�~B30�<`pSc��~`�0@=s�3G==�>2)<'@>>9©�0x|O |s�8 У~b�a�?0~d�G �ѳ>:�f�?3�N> �wvpkx����z�X�"V��1uBWWGHC�������������������������� �f�c�f��<C~Rd�@@OC8`@8 }ӏ1OφN I��0=�u hszhtOgd�z�N�N= � `�?5uh@s�?30� a�zЃp �0�A|G}(x�u:pc>O#@h��0<У5t�Oxo '�_<<hGg|<��}:��i�?6<a�4}ѡ5z�>c��08cz �`�G} w>|:2W}׃!||>�`���>� �S|C I?"<Сg}xb� G~Fd�d�?G��<GDF�>'0��a�l@�>4H3|:z9g < q@?6'=Iz�F?7S85x� С0<m�G2�a>�s`�g=0�t |2S?2G}O0G}8g1OpI39À^8E� p>֣Ft =i�s=}6e �=�0zc AzѧCx�F~@thFz1+)>Gc�чTOx��|'= Ij�0�� �<x�>O G4}6c�|8ч| 0��~b�d�!�@<�c��NL?08:u `>ѳ0z�0� �Oz�}0�3�> '= GxСSa>gx�8u� �Op� G�>z|3= A?5�|2Og��L}7/�>�p:p�<Q�>DO1��`��}8�Щc��> �Q�F8�PxӀ> 1��?3�|O5000��:_z҃~h`�O1}O���>�`�t G}�>� �?C�O!= �48`�}` ��|0S#=< 8�Щ<Y8#t@0�a= �<0�SzG8��y`�1[x:5x�CxЃ����000�� �= `<c��pGpi�G}:c�3�1��,POc�':8�d��Ftj��pI~w��t \��|4g`� v�?8>~f� 1��LCl�t'5D��O2=s}3u�x 1��3я 9Sz3� =Y |0 ч<j�c��'��@:p3}gc� `4zD2c�q�O:�>ѡc�# q@< I>�>��u�~b��x}6G�u1��Ta�210��:�^�>�=@= �x� `�xGx�e� �30xe�/8cH��f�# A0��N}�|O��<e�> #ѡС'ѳ>=!�8O�'=Àt|'}pGG y��>0SЇC}2s�;_}8<'d `�SOnph0� `@D8�>O����>5�:>9ѓ�><A }C>9p�CP8sT�><80zֳ�F3}>c�> 8Gzj?`1��h���#8>�0:e�i��>��z�>?Wk(=3:pjpi��>= �d�s=�~TX �~F?pjt��� �>`�9ғGs@ �4x���Fl�pA:d�= I0�D?5c��C `d��0 n��FoE `|>�h>=i�'�DOp }6G0�<|84=I~d:C:4|GA}4?@Si�>я >1S3O4Cx 38� �<a�|2CGt�>O'~l�s�� ���|g=�A?1|00 Q�N�t СSO<y�8D��<0�h3XzÁ!��>h4= q@841��4c��ѡg=>Џ��|8d`�“>֡C!��0�e�9O5z�F>9C� �xy��g}8c�ԡs� @3uq@:�p> i�EA!zOYtG�7':4�|�� @5X?�@0Y�4{ �tYxg@�|-:GhFp 0:�|G� z3}03}2уF:�~d`��>!:d�Fpt�p3�4�У12}2?`�3�<GE�f��>�^5|20��D>!|0gt u�:� �4��>�C:4g}8�:G�>t10��x45ߝo q�-!|0�}4}2N Y� �s�=@�|=C~``�:u I 'C1��3S@z1��30�'pj�>�>5Q?1�@e�?0Of@300��4�<c:!|1[}�oȀ~F8t D?1u0t�}|8C4O 'Sc`��1��!|}}<z~` �z�`�?>ҟ5Ѓ8� `(2�h0�~f�>Gx d�c�G8S1��3g}2t�NHo�6w=��gL�~f�N=|:C�Cy�DCS`�8ui�3c ��8f�|ѧ@ FOx�>�= �00�9s 9<0�<�xԣxԃ#z�у4�~F?0s�� `� |6pq��CxԳ a��p�  `3H���|0��>ӌ` ��S�<':<��F>i@q���v?5ѧ<y ��0�<pA q�c� a�?� !pi �h��~j�?<�zЇd� ֣>�>g8��~f�<e� ҡOp2�`�Gя L2s`�Gf�_ �x ``��>�>ֳO1�ht `>!q��0ggO��d�Ϻ2?`��}6�x�=�= h��8�~w�_ O1OtG='G=F'`�@DC?;' �xС9sx�5|'ujp�0� ��O|�F? �0')}t|CF�'�1��g!|?LO|1Op}<0�i@FE?0?FwvpkJ����z��"V��1yBWWGHC�������������������������� �}Oe�<y�?0s�� ҃>9s�  Q3 1xҏ'tS}2s�3OC1�� DS<a@�>p�3#t�>�01SA41��?�|8O�|( 8`�8tA A:4z'z �@;/@d`�O`'=Ok0�IO< ht y�~t�?2'c� E?:>Ǣ(CŐF�0Pa�f�}ѩ Ї:8O8`0t�c�4C �NN='0c@�>= at<~e�;�:sz `�d��>Щg>�p�C0z!8tԳN>�x�0|'|s�Oz@�^s�=5!<I?1_:�0�3}0D3'p�� �N}�cl�?0t�c�a� >gh�F>1)z�<A O �>)8D�uFz9s�?10\tj4O5��=Yc �z�/4D~t�|4=i�~`�3 =�~h@p�3f� f�C>ѧ8841xG:�FzgzOp y�~l�?$D?0ѡgl�F3?o�X�phd�1OpQq�~J�uy�D88d@|>� ``x'~ROh� 0O<�`cH `DC}0zp]3�|;2�A?3�HN=>�=I:0zև�~`�a`�O�p 'd�Џ C>1�@4��u�8����� `0�zӀ#:S>z'}68 <A�pf�C?0O8 )8D<�O<C?zҩ u'�>OГ '`�z=[a:�f�ƀ�< i��|GC�'�t QO< >0c��p}Gz9|01�h�OLMm�s�ԣ~L a�s�<j q��~l�>=GP?@OT0Ou0�20�|4Щs� x|`4zh�F1>'8d�z }�~l�> c}$z9�f�#z78D?C8pas@�52CO:��0x�>ׇz1c �g!:s�"x �0�|G}C�>өc�??aO`@G4 �4s� `0#�^0~n�Ј02C�!h���py�O<a:�#=cN=Y |���}2 88!8E�D aH�>ѓ~b  9���<<Q3|00��k��<Ix�C8�>'``�1� 7P�== Ѓ~@��>�F?0��~z�#}6��|20 �'~D?%1��?2?BO>ө�~B30�<`pSc��~`�0@=s�3G==�>2)<'@>>9©�0x|O |s�8 У~b�a�?0~d�G �ѳ>:�f�?3�N> �f�c�f��<C~Rd�@@OC8`@8 }ӏ1OφN I��0=�u hszhtOgd�z�N�N= � `�?5uh@s�?30� a�zЃp �0�A|G}(x�u:pc>O#@h��0<У5t�Oxo '�_<<hGg|<��}:��i�?6<a�4}ѡ5z�>c��08cz �`�G} w>|:2W}׃!||>�`���>� �S|C I?"<Сg}xb� G~Fd�d�?G��<GDF�>'0��a�l@�>4H3|:z9g < q@?6'=Iz�F?7S85x� С0<m�G2�a>�s`�g=0�t |2S?2G}O0G}8g1OpI39À^8E� p>֣Ft =i�s=}6e �=�0zc AzѧCx�F~@thFz1+)>Gc�чTOx��|'= Ij�0�� �<x�>O G4}6c�|8ч| 0��~b�d�!�@<�c��NL?08:u `>ѳ0z�0� �Oz�}0�3�> '= GxСSa>gx�8u� �Op� G�>z|3= A?5�|2Og��L}7/�>�p:p�<Q�>DO1��`��}8�Щc��> �Q�F8�PxӀ> 1��?3�|O5000��:_z҃~h`�O1}O���>�`�t G}�>� �?C�O!= �48`�}` ��|0S#=< 8�Щ<Y8#t@0�a= �<0�SzG8��y`�1[x:5x�CxЃ����000�� �= `<c��pGpi�G}:c�3�1��,POc�':8�d��Ftj��pI~w��t \��|4g`� v�?8>~f� 1��LCl�t'5D��O2=s}3u�x 1��3я 9Sz3� =Y |0 ч<j�c��'��@:p3}gc� `4zD2c�q�O:�>ѡc�# q@< I>�>��u�~b��x}6G�u1��Ta�210��:�^�>�=@= �x� `�xGx�e� �30xe�/8cH��f�# A0��N}�|O��<e�> #ѡС'ѳ>=!�8O�'=Àt|'}pGG y��>0SЇC}2s�;_}8<'d `�SOnph0� `@D8�>O����>5�:>9ѓ�><A }C>9p�CP8sT�><80zֳ�F3}>c�> 8Gzj?`1��h���#8>�0:e�i��>��z�>?Wk(=3:pjpi��>wvpk ����z��:��1BWWGHC������ ��������������������-�D>\2�>G4O00�yh��}?/4:8O,c��pGt$n��'g0��<0��?=�xУ�~`@Ox= >O �G=G}>= `{:<C�c���nf�'4�}~b@:zI=o�>@�!@ Q� �l�#�~Fx}G:'=y�N= y�Q�~P =G}:O#<y�p 0G�}0�s�xG`� �>a�p=hpI0=9�G:�n}0'}:c�YtxO i� xԡc�S��0 |'}(8t�~p�z�900��< ��>փ0p`�~D@4�f�Cx}�< <i ��= c��0�`tYϢ#20�a��uЩs?=1� �x8tS<C?}6ѡt`�4z10�Y':ugC cx|4�4z�sgzЧ:tSz|0/hN= ࣁ�>94�>Сg�>A?6�`� `�xGc��f� 8:z�41�_},<0|\L΁�Q3s�L i�d�L `『|0�8|u1:�L8< �pq�G=gp `d� A  ~`�OQ9�O>Wf� �8��>1`l� Yx��=�8e�?4N= Y��` ��7 +}gw'85D4z�~K�f��D gE |Ssx9�@0�_С�NCxg ~z � гd � � }:O8OGit�xO >ЩG | � �XN=q_ �~AA3�`2�O C>D'd�< `:0 =�0�` `���lAAy��ƀ �>gg a�'=� < �8�F?C3�4'�Q��f � Y 3:@?S�>�~p ]O2s��:�>�Sh�57�v�oz>�NCx �0c��},a�k>'�48CO8����8up3= �0s�c��G�@� 1s�? p��>'x� a�?z,x12|'=480̀>1���q �|04c�����|c�O:=Gf�0�|2џsGz9|5O `Df�z�� �!xGx�x|:'=@zG=a �1��v��>wOd�?6�|0}8'p�Oz@8t:d� �>Q#1b� ��W�5�4O4/p�~F�Fp�84}2O`Hx2�Yـ<1��> 5w=k@ �c@�@c��~`@1�`��|0Wt 8�F:v�k�Q��I4:5�thp'p��d�3g~|�I?g\1� @��<}6c�i�3h�< ~J#:e�G|c@1�` ��~tӓ~a�_ D �xGѳ~`�x >ѧ2��<9s�~iA 9�VO�<G:>9!�ѩ�0s�|8 `}:c �x� �Gp��>'`��>^ CxGC0�: Cx `== `�| 20�'0xғt 5zg𤧁@�p4:<S?:1�@@Ϣ AcGz!\؁�bHk�o|0l�3Sǀ> wCxҧx|:1�z�~`�~Nzx1 l� c0:�D2�9= `0C}2s� Գ~V �8u�N= �:pYF a`� <��>ӓ�>Gx9' �~bp�/x9p�t �/ kc��>G}8?j�s�>x�O1}6}:10O�~H|4CS�= �f��Otp S�f�s�:DG=9gz}.:5z'zi`� 1�}=g}S?:�>4Pti�?0hpCd�?4}8OF3@3G!LH<#`�=3=c8<�D?6}3}6S7|c�C842O'8O8 T?Gwvpk ����z�?�:��1R/VBWWGHC��� ���� ��������������������;�`�:<Sz�n}2S�>O�P0C0<qx֓F?|4� @HOzx�0x1|S0ѡ̀>g= 8�~L`Ox�~D`��}SuA g=C�~b�?000�'dh�G82��G�~H� � �:e�xc ���h� �h0z�=i@��x ЩS�=wxՓ>�{�ǁ�8D3�'zgz�ui`�xgQ= `:я�f�tIp|0g=`�3�c@�4GN��S�>ѣ!Փf`�:�@ 1�8D>#=�>�̀|4'}&6�9OtQ?0�9�5Sp `8c�?6Su|(x'}чz:sx���>9O�<�>O �0=k4`�Op~P 2�w>�q�?6 `>=� �3 ҡ809}c�'ch��< y�C= 1�x9G<ich ��>֣>סui�1П0'}0OHxa�x9v�/x�~H?7O hDOСc�4��`�O8<�0gh��FFDO@OX�>Џ�l�>gxzSd�OO0$`�I?1�ap~a�x�u `�>�5c��|<�!|� }00�c�|G�tp�A?s�f�a��f�`�?=>�`��>p i`�“~@?�'X � �?!�08�Щ1��?0��ge 9td� s h�?I �@xO G|�<�>'X�>9P `pQ?10P?2��f �Y�3 �R~P ``�L3Ct 1�@3��~T?)2� !0 >GuDzgCD hc�d�`�L:4x9=j4:t'32=a�f�d�x|0:49�0�c=A8u``�� zOjt s�>ң>< ad�X8F@xԧ}4c``��x��tQ}:< 7h�z/ U��4xУ 3�>>�f @�f�t G4�0�>C=f�胁1��1= `p�0�z֣>�D�>‡x>ӏA>�>�p|0�h��f�A`�ЩC�>ӡ�pг> <|1#XD?#2�}2ѣFc��#S Gd��~|�_p0g}6?n�Sx }�>�N=  a�8g=a�©}<pЇzG �6ot#G0@�~P i�d`@90�гc ��>>ҧCx> xG8 a@/c�~JC8sDQ#:4h�uA>2�`�= 1=`!<i�C?O:4@=jN\B1� яC}<���>֓O5| �s��g <y�Џ#>1S �>C�>�f�?1G}2O�| x1��N}ԇi:�@Y= �'= >�ƒf� pp<Щ~X 3}<:t�'}8p#f�c=�> �A�>'zЏ c�C��|̀`� �8t 8e��s� S}�|0c�>�1c� hpa�s�n�oI}<p i@ gp��>է��zЯ =A?40�'>'DO|`�� �0�:@z֣> ��Fa�ԡ�`�x�0�̀>G0�a��>©�Fz �}:�f�z�N=c`��<0�@ [|<!<A�f�Oc��~`�Oz�O�xGx1c�O884ѣ>1~~��Sxz}1�xЏz�^�|2Oe�#:5d�~f�O8k;s�O:��`��> �0x ��FOb;ԃ�D At A?3�g}!|6�:t Џ}c��'x҇:��<ip�ЏGp)= `f��,x�>hC�5``�1�c��|G8>O 1�O\0=�}G18'`�18�C i� f�:d�?1s�< >~APETAGEX��M�� ���������������������Date�2004�������Track�02/10�������Title�Silence�������Genre�Silence �������Artist�piman�jzig�������Album�Quod Libet Test Data�������Replaygain_Album_Gain�+9.27 dB�������Replaygain_Track_Gain�+9.27 dB�������Replaygain_Track_Peak�0.229712820826�������Replaygain_Album_Peak�0.229712820826APETAGEX��M�� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/test.spc�����������������������������������������������������������������0000644�0001750�0001750�00000201060�12161032160�017462� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������SNES-SPC700 Sound File Data v0.30eE��Game Select���������������������Super Mario All-Stars�����������Datschge���������������������������������������������������25�7000�Koji Kondo�����������������������0������������������������������������������������������������� "�= e������������������!%`+%+tò���@�����2��������������<�<������������ �����������������������������������������������������������������������������0����������������������������1L��������Ja � �������� �������������j��������)����)����������Q�Q����������������������������������������������������������������������������������������� ����� ��������������������������������������������������������������������������������������������������e�;����������� � � ��� �� ����������������� � � ��� �� ��� �������@�������������������2�����nA�A�A�������������������������������������������������������������������0������������2�����n�A�A�A������������������� Ͻ�]��=�=? H?6` ??<]?��S� iMLL�]�EFD\\kk�m8`CC+?.�??????iML \LS`QQ ??_G�G1?== G&?_G&/��u���oʐ?" Ȱ$G(`P`a`\�|ՠ�԰� G^ GEԠԡ aa`a? ? �4 zM�]-ݍ�z+/K|=  m!z!z}\?-G$��o$$(?++(��no����ŀ<́<ł<̃<o�,?<?\??�&�o�&?͐Z�[Y? \_�ZYpY_ Y�_ohhhh0h(o_HF���ԏ�Go�@:@-@:@o`h"hh h hh�&-?�`]o@ HF�oGG$( # ?{ ՁՀաԱKGZhTPB_Y So �__ Wn ?_BB?B@/0��G1 �?" �Ԁ-G$ԑԐp== G�^GD1npd? ? 0011/0 �? 0-(>(>? h? /-G$?�pq/? ?g == G_< T VzRnTTRhdz``fzbnhh`jbZ\zXnZZX^�G1?( == Go - -\ 001o`_`�=$G:M}\]�(8 HH� GI/GNI���=! oQ(1�0oԑ-? P1? @Aoհ? ա? Ա�ձoձ-�ΞDo �XoZ? [YZ? \o�RoT? UST? VoPoա-G$o? ? o/�ՐՁ? -G$�Հ? ՑoՀo��oԐ-? ? o-G$Ձo@? A? Ԁ0011@0A1oJ? �`? �bHoh? iah? d? jch? fo`bHo? ? N? ]y?=`DoM}��dM+(HL`LL���H l?M}?H<m__o-G$&/D0h>G$ ? n/-? ? ԡ? Ԡ? `P(Հam? pqoa`okH�-�Do" {   ) Z c , 0 S | Z W ���� �? # G^/`?G/?R 0? G$^I10}\ed`dP!QݐH?�3o G^M` �/ ? oqeqp\01�00@h?h)h0m- /# 1-0/A-@/-/G\?/$G `? ? LްD�u/ @� `Ա`ՠHh(/ݍ�?2_qo ?:10 A@??} ?  qp?ްQ`_? mQ�Qz? zoQ`HHY!o� )4BQ^gnswz|}~�������X !++43�,< MlL\=-\acNJHEIKF_e , J *Ver S1.20*���h/ �^���/^������1�o S? /9�(�xC�x�x� xx x�� �Io_ h� �\?�ňĨʼnx;xC JJM?o �ж,-/Mx \?��Ғ( JJM?�Ĩʼnň_" o.�X:,�,0*/�:,,0@?:,, ]A?}/ A?:,,hnh8hHh_??r/�.�?/e.�\?o�:,,D??r�:,,ĩ:,,Ĩ-:,,D? /�:,, ]@m?=nm)�(_(xxx #!`o#@\?�ŌĬōon#:;/7���I=?�ĬōŌ _" oY:�0*:0`?: ]a?}/ a?:hoh9hIh/ ?@?r ?/e@\?o�:Џ D ?@?r�:ĭ:Ĭ-: D ? /�I=?�:0" ]`m?=nm-�,_`(8 HH�l?@I=?/ ]Pm?=nm+�*o-\�?L_]]T?=n+=*o ��� \?( JM?�& ?" �'ĪŋŊo%hh '%&hHo&'� \?�ŊĪŋo'��? ?rJJM?Ī� D? o ? /P?Q?oĪ�( D? o�,?<?\?�&�_`? a`�G_qh_hh_z(%(hhh hLho__耍\?�ŎĮŏo0 /Ex* qD�˯ˮ? /]n ߏ��ĮŏŎ_" o?D?�˯ˮ? 8p?8q??r. 耍\??o ]pm?=nm/�.o耍\?�ŎĮŏo" ?on O ""iD?/#��ĮŏŎ_" p?q??r. 耍\?opp� pp�� pp�pp�jpp��pp� jpp�jpp� jpp��׸pp�jpp�jpp�pp��pp��00pp�jppp�jppp�ppp�pp�3pp� pp���pp�ppp�jp%f#X#$d$"%!q%!!{#{#!E%%%�&��$ [ O wN"cN >#:Dr[S��nnv~n PV=FfwN#+#""t"��#Z!!A$"$#!$p$!!""#####$#K!"("A! !c!ARB.8;V}ZB81D!![ F�F�2F�2�2�2�2�P�TF8*TF8*� 2�� P P:,0�<�� �`F�` 2� � � � ���o�l�2-+(&$!$! �d�88?1)FM#88?1*F88?1)FM#M#88�P� 88 ?1 )F M# 88 ?1 *F *F0F� 88 ?1 )F M# 88 ?1 *F *F0F�F� 7�� T�F�P�`�``�``�``�``�``�``�``�``�``�]� c�ZZ� Z� 'c� �PP� � F� �A� P�(2<FPJFPZdZUPKIFDB@><72-+(&$!$! � <�<0F� F��� �F�<� 0<�0��F� 1� T� �Y� P��8#�8�#��8#�� 8( �8 ��*� x�*� x�*� x�*� x�*� x�*� x��F� &" $! "'"$& " "'"$& " "'"$& " ��O�L� K�F FF F�3T�0�3T�0� � F� � <0� P�� F � <� 2� 2� <�  F� �P� FF$$��     � 0�0 �� �r$$���  �! � r�$$�� � �! � 0��0���T�<$� <�|��T����(2<FPJFA<72-(#� �2�P�<�(��� T� �TF8*�TF8*�TF8*  � 20� (��2� ��2��2����88?1)FM#88?1*FF0#M� �T F88T * *0#�  �#�`�T�(2�&-���� F*� <& .5 <JO6$0� `� F??F*?811#��8� T� � �?��8� � 1�� *� � #� � � � � �l�88��KF�H�F�F�� T�P < (  �T��?�1�#�� � T�#� � *�� � *� Y��1� ��1�8�8�TF8*� * � ** 1 � 11 8 �08� * � ** 1 � 11 8 �08� 8� �48�0��8#�8�#��8#�� 8� 8� 8��M�Y�Y�Y�Y�Y�Y�Y�Y�Y� 1� T� �#� � � A��??�F� F� F� F� F� F� � ##*� � � � � #� � 1� � 8� � ?� �� >� � >� � S� ��F�Y �YYMF?8�*##�FF?8�??81�F$�**1##188??F� 8 �8 �8 �8� n�'n�$� d�d�� 8#� *8��@@6@Q@6@Q@l@MAhABBBBBBCElIElIlIOOOO \;\nnCuCupuux[xÂނTT007vv���jjj/j��&p j@ &� j�  j@jp�&pjj UP�2e2Ler��������1 �z$zB�C ��{4.�����������z?1��@!�zf{?�1����������$] =pBԒO/ 1ӖNԖ 0 ܿ0 :RӖ&1o02/A�4@!>"!?R% `P&-AB�5.$`>#U O_/TT~ҶB0MnNe# NB0/?/3# ?C1��������2#�>! QO"01L+N}1*?C-// /@#/OP A4,*[+k.",<"2�]z]ӣ;l",z,ԕ/P2�<0>/Y.Nz<NĒ*]�M0[]?-z]-?�N LM0zm�<?�>1MM@{]<>��������A1DANC,!A1DAN��������jDDUUUfffzC4C4CDCCzDCD3D3C3vUUDDDC33jTEDD4D33ZweuUeVTUZTUDUDEDDZCT34C$B$JUUueeeeeZ3434#C#CJVfUUdCD2:UR"ܬZZ̻ZZF˼JZjjjjZZjjjZۼZ#2EUffjDDUTVfffzC4C4CD4Dz44D43D33jwfeeeeTUjDUDD4C4Bf4TDC3DDDZEEETET4EZCD43D#C#JVTveVeVeZ33C33C#3VVTD2!:4S/ZZ̻˼Z˻ZܼFJZ̼jjjjZZjjjZZ"DDFVgkDDTUefff��������� ,OձOKO / 4!�� [OſM߰N��.2,l԰�Z#.., 1@N?1.!+>Kn%/1O�� ??°!�,0/O>-.,=@.%/ ��İ:`дO�E--ĠԵ2/?�N�# M,K? M 0* /1<:/O.l:LlO]a;�"ޠ,= -m[\?N] ��?OO:% /?ÐL0>� -.�ϐ%0�  CL00_>!Ґ !Pр)/�@M P>0,n/� $[�N.�;ҀK?2�pL/"3pD.0..�.p9~1p<NNm !1�p/?�@/�M!p�L �@ ` <N*[p]R!p0 |?NpNp�?`2�"p.`;j-!`<?`0` Jp` /`2n.Pq,`�-`�P"*`1Pk>�P.\N�P>>-L>@a @,\ @"L$@@N#�0,_[_0L=0OM0�l@.0!�� . ^! 10 1�! M.O@n �OP �?�0#�<�!�. ����./����� ��������������������������������������� z-]Ν1zB+D$!vnc̊/E.0 5-/"Q 0� 1.UB)22S/F! !�" �3./0͊U2%0%OߊcΊT5A#?̊�B�# 1&PBzdEgPUB42݊�?zE�14->/"/!#&"A51 " ?Q�5` A�Q>`$ GM3?%"/34"Bϊ/*". C?F/C7aA.ъ/�"�� P"e�FR�"WAE?� ﻊ. 30@d�!�$e%.""VA"z D-͊��켊z Sz1BDS3zAv5fU0#EB�z2ˊ.�zDCz435gS4$S!!j%CW-� Ί zBzT?z#!5EC2zECDCjd$2"!z�Uz˾ڭzj#3Rz�"#3D z#$C3Zgc4AC/z2$1z! zj�""z"#Cj5DVEUDz� $z@1j.ɫj/ܙZ!!j�"EfBj#C3FfCj# 3�Vj@W@ʾjjܫZ#/j�5UTj"!#Egej2"#Fj0V@۽j!j캾jj3ESz�4Cj!D2Dj/VAj!j!ۛjj#DDz!��DCj0�#U23j VRj#zj�j�"5Tz!���D3jB�4eB2j!fRjD.zjj4Uz!��TBjA 5v13j �WbjF/zj j4Ez"�DCj0FeB2z41jF>zj ˼j�#4Tz!�4Dj0Fu23z�41jU/z!j ʼj#$Tz"��ECj"Fv2#z�4AjV/z!j˻j�$Tz"��D3jCFv2#z�41jU>zk˻��������D��C eC "�S ��������z�0!-z#%zm@B$Dz"z@�$#""�#�"z!1݊�!T?z=BڜP�!F"B݊U/g,#33"D/DR̚C Da�g?&de #D2̚6@$2C##!ʚG_513#!�ܪB? B2"ݚwO$>A21˽ VO%?12!�͚U?$5Aڰ43"1B4F@1D/�A��ݚW?U1�"ݚe2u 1"!켪C!A02 B"/ܼ3" B1#122#˽B"!11ɮ#$Aʾ$2"ʾ3"3 $ ?$2Ъ#"#?##.24>$2 VCF,E# T "# CTS2C�3DU0"��$0ݚd"6c"�0f,16b1 ˬ0sٿ" G^40.30!�4"#1"D23 !B!쪾2 !� # !/۪#!"�""ۚUC E  432"ܚfBCDB C!� VC32 DB 41FBD25A݊WaʫEAD@51̊3VOݚE0EO#40C5.E.D#C �"34T $C͚DA3"5R4BݚU0D FA#U?ݚ$e.Ce?$eݚ%t$Ce.&dܚGc5A%TFcܚFbEAERVR̪4 3?DBg@͚f0e/U0f0͚d $TS!ۼu˿&T%CC!۽&cߚ5R6A�$B5SКEBEA416B�DBE032E1�D1C�D U D!C�3" 41v2 u3 3!�u!!S/" 242S2�""B!! !�#C# D!B1#B3D!zu"2#12 D!zT"3."#C zS!�42�#Dze#C.2�Dzt#0ڰd.B#C zf$1ٯT#.C$C" 2� 2$.24-C#2�1#�$.B4>C!3 1#03�$.B6>C"2 23?3�#D"3 Њ3$ ۿC"!#D"3 ъ131ڿ3"#/E"3 240ʿD�"$/#!4E?ʿ4/!�3/""C!E0ɠD"/$/3"ЊE"E?C#!3/3# "!""4/""" К"2""!D#"" ߚ#!#"#.4.3"" ""2#""4.3"" ""2##!"3.3""2"2 #.!4.32"њ"2"22"4.C2К3!2#!"4.4""К3""3#-34.32" 3!333"DD""#2"3""DD"1#2"3"""3.C"1К4"#3"24-D"1њ$""3"34-4""2"2C3 2DD!2њ3"2424D!"њ3""3#24.423!#3"#4-4""К4!#C23442!њ3"#4#2DC"1њ333 "-#4.4""3!33!.25-41"3!33#BDC""2"33#"D4""##"3""4.32!њ3"2C#2D-C"22224#25-4""#"33#3542"њ3"34 #34.D""њ3"33#3542"њ3"34 #34.4""3"3C3C5=C"23"#43E4"232#3#2"3.D!3њ3#23#2!4.D!23"3C3BD-D1"њ32"/3#2D42"Қ3"3C324.42!К4"3C$34.4"2#2#.4#-34-D"2���������h^1t S.F�!�� 22"CGk CL2Mn"<`2 #0E+m$ݨ@-QN�C"3"  ܴ$1 Ϩ_.n1и  T.#̨QS B,1Ϩ&-RNC"/=D,Q-e#. D?Ϩ!0T @"A$ # A/B 2>C^0/DV.PK!##!d^C+��?�21d3 L%r4`&@��!Pb 03ޘ> 6O<DZ�.AӨ  ; Bae0oV!.0ܘnC%M9$S%ܘB # RK//  !S4s#5T|1.N!?2#0ޘUR/D!N2._# " A^01*<ΘA%;@dO0��_G ?D̔.&LaB?2�-e?Cި 1$OB�T/.C5/a"4 O"��1.t&>D R@Cc#ET0#6Ϙ"?=A>$="  132&+CU,uE^"0"b aT.ӈPCsU 2"-0#!2!-!+A3 10Na O܈t4FD4@0/0 "Q?!D!"DBdoNM,"!,F!./"# $ !>"1�јSD?vb oT-@@2 TE>5/!0=QFE20?M,"R#O#/$eO-1"N$ 24  D/B/ 1# 4�#"�# /AҘA /!"@2 /=7AԘ-0- &< D N3�3� D,!�.Q Bވe1#"B�5= ܈ $O324!$>!0 #˘C11 <1#3 b2B>TT#@ �21R31"A߈�5.SR,^DS`$133!1� ̈e 3 0`333 .R12B A@2#��3@&.Nu A.R2 a0N33?.1005,/B%?! ݈-S? D?5ш@0�_ b%B#!%.�E+N#/2� cC##PЈ!1�xTlA1"$14 .x N`!2A4x7<"3 xPۯ3NC -x.1Rx6^bxOU 13x%P/xR/3?h0&S2BxO/x/. 0��x$4/h2,6-x 2?-"xB3x"#.F xA x?"!6xc1xO30x/e#x.=xOxR=1x2/x$?0!x62�x6x>"<Rx1/xCxe1x".C1x@ Sx?/�4xQ2xRxS ^x !Px!t !"x /xN!x�Mx"_x#�x$ x%- x Bx>xE 3x"x!$2h,bx!ChTDh?$=h c1h_?h %<RhrTh?1!hV?oh Rh"!rhOF�0PhCd;@h!A0 h.^Qh3 @hC�0 hE >Ch�52h &^h0 hQ00hF."hRhEh-. hn ���h!th-E/d%*hA!h$3�hP1h/EX6 'h0"h-C �2h $/h # BX !�hO.h3/h!4d03XE-!h 4 d!3h2h20X2_h2!!X@SXEbTNUX 4 2 h0X%AdX!-X5P!!TO$ X1"F!X.cX1.X 2 X#2X1CX 1QD"�>qX0$TE X/1BX 00Hd!XX?# /H,}3X"$.Dg"#X"$XC  D`"X3 X/.X"bX3?1H�`X��X$��H31OX!� 2H H!OCHSڰR H  #H ?SH#�3H$OH-A "HB1H>2BH�!0H�/,H AH@3D1!8WA�5 H!% 8# $P8PCH B 8D�R H2#88%,?.H1 ��8/dH#�A( 8&+�H 4"�HA��"8Q 8#48%@(*N8B�!82�(q@Q81(B(@";(nW(1>(c"(2A/(P> (.$1(�� " >3(�$ (.!1(20E @61#! 0!!$!�$ P0�!� 0A0�1@"�/��" ��? ���6 �-��O�2�� 1� 2/1���^ ���! �CB������5D"E�����2#C �� ����"D����!�����B��������2��������������"#DC#4DC������4�3#34C!������""""�#2���������!����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� N:J��"2P0䖰vRdPp#",0? ��-5? _ +,_�P �<ݯ@/R7ִ ..+V墴/M*OE+o __ MP!n C2ߤҼ Ӷ?�2<.jnN;- .?ձѲZ/- ./D/A n4QM͠ ޤ/ ...�� Ф -"  &¤ !"A AO�?4"/>?M;B23D$32=nZZ$E@Eϐ3/"*E 0RTBM"BO=@\T~2 ۿ]N1�A!͐M-n]D%fE;P0@ [\L !.,2`RNN=42_U""@a  0->A"N =C /A�0=ߔ].�1ѐ1/DB� -0---OO.&-DM23/��- 0<O>0M� ],Pl]m /"c`B $D0τn$23?!߄k6C$dF4WT%Ѐ/3]t1">>EcR=O  #EUDS/!?2B�ھ#�41 "tq@It@p $Tt`-1/"tѧOK# -/tL!.p�dtlNpSQڽdo[ @p )Bt/ "t <.+tC=p#C2tB�!=``" UTGt",�tp��`S#$PTd4[d Akd�/2d10d ."0d ,d=L`�PD"-+-`$-PA,K,TI6@QP P �0T%1Ed/TPO2P3 4?2TNB�\PP?P #13OP/P�DoPVT"D4@PPDq+4n*/D"@,D N/4N,<D+1.4> >B-0 5 Q!4@4� ?$`< A$- - /S  !�3 _nk@/ .� ���! @����������������������������������������������������������jaͯ jjEFUuCjSݯ jj55VTuDkb͠ �������� *  �,=L��/6Q ?@@>1�= &-^-, >�ܶ>//tA^�,"] .?=O�>� /n2a_1�1NMN!A/ S>λ=_ao1>Ŗ!</� �  ]-;,/>Ѧ;�2K��MJ+%C<3ݦ�<�Ñ MD� zjЮ . NҖ-; ϭ> //0�.�v,-M0<񲰆 , -$@vjʊN-;�� �,-�Ҋ01">>N"ÿ -  -�<�� ,��--_m @=�Ov:.L1¢<.[. -.^^A. ?��������&.?=".LO Y�!�2mi[-_!> %ݲ/n=pP n�^ LԶ_.**[=N!@Ԥ@@qn_¶..!>?+ݦ!om _J�OQ泦?1 nͦl=L>=2,2@0 @!-[ NO e'nʮڢ _��- ODF- @Ѣ01 2�/k_" á?!!]=S,i/ NԴ+00N.~!2.LB 2"1B@?Dd0г=}*$L �fUA-\^[#9%>@">/$ L$N- _ >�<!\[]$ʮΒ1O$. ?߮,UTBb/.]!!O!3�!,-.,?+! %/ ; .& oKaJ$. m�?�N;Q1 C^"$4#A-Tg6 >>P0#/k $  =-!= ,!*ߦ?k!/>ݦ>,#":L/.1NT0!----O/0@O�=P PN� @2�^1]]�/� �"0P1Ң Ж!_/>`BӒT0@�"..@"a!, ? 0m.3n CeNQ �1/ . 1=>�BSS/ , 2#LN20+>.#\ "M!$=>,A& '-M�,+C1Ԗ.M䖣�-02M� "#-#4! _LO K�" $!@0#ݺ㿆3 Q =/$0^0!A^M@+P1�EB/N,N/% _B #2!A/OAЂ0/4�˼0�Q҆:#/v AGĶ A1v]Wz<$v+|?>ON?#reBQ$-3v!@J-v!vP-aІ!/r M/v ;T�@"rO�2E0_/��rE!RvO,�v3 v> v"/.v/b0/FQrrͭv3v;"?f?[A�2f! =bϝ›vM�$b/@3fA=bt?f�0L�Mbb%b�Rv\sbRD-޾V O3@3f?f# f>"fM�f@ f!@/bC1$#"fMfA�>2V\< b3V>V=,Nf�RAU3RGT+0əV03CV! 0@V.  V"AVV>AfV1�/1RT��R$V! -4�F:U R�CܼR1�%UCRT� 2V#! V@AVBV"3F`4V A�FrFQ4F0rF GFP!"!V 1!F0t R�3#FrV4FR�2F@q #FBc Fa%V AV3Fb�CV A�V3Fr�#V A�F u FQ3V AV!2Fq3V AF1e Fa#VAF1eFa3V AFAe FQ�2V AF1eFa3V AFAeFa3W A���������,.,1"#"^2�s2"""2""xED4342#"�M�2��!0tqd3"�/xPpR�'$ 2"�$?"�!tBe$5o%Dd$BA# ChPB]C>x�>x-x޳xxd/d ` !hKO\dC4ARBE3dA$>F�h-0OBhA"dDQ dC!A3?hSF O=D�dBAQ$332X"]%?@?T#T#ݴ/D !D-BD00U4H"d$^H>bADQ3H? XXXH˽H8 ( 5#823$3283%2B$2383#3"C"@382!B"""!(CD#$R1$#7vCSC2AC1#"1B""%cU3UcC$$3"B$3"���̽����������������������������������4->߈5�߈=/2"2RAx#B3�x멻ax�!x"A4D"dxCB!Uc"x�1?݈�x413D$5tD22""x�x d1x2"C0!3Dx2TfD@=#hd">@9ܼxx�h!P@x#4U2T2Ux!"!4 xxx#0"2Cx4CCC#1h@!!hhڽɿhAx"231344x4""2��hh̻ hURhV@!%UUSh3EC32!#h4 h˽h�#h$34EEhdT53C#"!X" �= hݭhʽ�h�"3%Dx"3C""h1!hܻh�XACSDTh$433!2d"3hhX%Vh"#D2D3#Ch4!"!"Xά˙X˛ͼX� 2h!"33"433XUUceTT2X��hX!!X3$CTTXTE3Uc333HC32ͽX̽˺Xh!#C34XeWEE333#Hv!ܽXH̬X�33X4$EC4E45XU4"!X۬X̼X2"C3XCDDD33#2HVvVU#2XXH#D3X"DC3TCD3XC321�HܺͻXHX14C33XT4C3533"H#ۻX̻H!H3TEWgfFeHSSC4##""8#H˜H̺X�""34X3$3C323"HE12H̻˺HH#"3CHBDDDUEDeHCST2"�H˻H˻H�3243H3CDDCS338uRD22�8 ͻH̼˼8 5H2FDUUVEeHED4C"!�HHͼ(<!2C83#4D5FEE8vUVeVeUc8P1 ޼H8H!"2C334C87dteDD$"(5ͻ8̻8H�� "##BH3CC433#!8D1!�8ʻ˫˻8��(�!@e5EV82334CDED8cC3C! 8ۼ88�!"C3D8UFFFETDC(dd#18(ʩ( $8##3CBcBS8cD3S22 (8ͽ(��$(BDDcEcGF(DVFcED3A(1�8(."(#4DVTvef(f7GCT3B(� ((޼($"4D(TTTuUsUS(R2" �(ۺ˻((##43(3CBC$2""bC13�((�#46F(33CD3C33Vd3R뭼( �"6#1T2dFFFftdVCE1@0�̬(544$$SCbRCC$!Q@! �1$"CRED64CC3!1��1�A##4%"!22$!!�� 1R%$aE5T5$C3! ���  ���!"#$25RB3$����##D234"3"!43#3$3CTD4RB"�������!! ��ͼۻ����3DEEUUDD42"�����""!�������������������"�����2"!���ۻ���������""#3�2""�������������������������������������������������������������z120ߖB #@%ߚ�?ϊuBc#�@?/�"$4O4p/1�#�0/#@#z/UB102 _5, �=> #sU� 1]?ٚD='An�� =!\Ѫ0 P/ D"3$ Cm 3L Ϛ1%+*G �!B �"2��? 5 ,,/�L4�b00Ѷ���� 5+���/1q/� 3C2JQҺ/.�/Զ00, �2���J��N����@]1N�{>5�/\?4! V�,!����m5"벰 ϻ 2/\1��" #a,� 2�T��� R"!0?0-2/1!�2n�O��o a��C�R"�>PO- ��%.!��. ��,к?���1.N?�k �=D�Ϻ?#?3  B .��^ ��O �*��"�"<�,4ү"[ ]=4���C.��+R2*Ѷ�>c�� �>  "�/�@?_�6, S$��3A�R-!��L�0���l���1� -�/A 2� 3�!� �� �%��� N> P#% 1� #���������l;˴2.>�ߤL!#S�>YQ10!/1ӴO  !/!0SQ?10AC/<"S 0?%dN0Q�/-? ,ӰT#$ݾ ?,`1.o = 0 Q,$?:@"2!3�B� 2/3�2 3o, / 0Z!ԑ%O_PL&U$AE=E$#A @,.<-C 50!B/3/CCn%#/_-!O/A!" N B\O *[/_Z #0\-/,Q]2 ? .0ް/ ðT?ba./,Ԯմm@"$D/AB=�F ?>_L+!�?P@B<Q�>? 2^"ĥO ?S5C$/,L=20"a /Ӱ 0.MN>-A0@ д=MMM=N@ !�C5!ONQC@!/a0?><=.DD;.M0 B6O!1߰B@ .A/ \=35#+2C"4D?AmN@1�3 Q=а@$B1�C!#� ,1-1KVD_/M�]YJ!.??@>߰/[<-l0mQ&o"!3��/_=0?#"v35.,"Z[>0$#N<-- 3/O >-R! �- ĠR.< ,٠C@>@.! <&�EO0.-"Π_>3A !%4CP>-� -� " ? <�/ސ$ 2ഠ2//AEF.!-^RFA>.JM= $/ !#�@l9Pa#NsNT< ɠ"`R@1>%?5 1 L ! =!$"۔/L =`"31a$-#<^TίN߀/2;1CdBU11]/ .B!A 1/o-K2W$U Ӕ+ AS"!/>33No=K!0M -p  A��-� !2!<$ O+>31  QB"P�1�>Op�;ppppѐ1/p>CL4?%$p�.?pA:p%.Qt+L4p"p?. >4p%$4.p �+-�p`�? #!O`. $`4Ap 1 p�.p!B�"`@  `%�2d1=Tm#ud`�P 1:_bPt1rd+P0P0>_ PP,>>�T 1P�.?@@ E@Tq.N@."4,\aJ-4� /"Q00 ��4$+R.0?$ $. � $ 1B ?, �"�0� 0�������������������������������������!�A�f ̈q���"���"!�����hm$42#BX2ChX@P���hNm t<X HDH4MfE"e5X"A?1H� /H �H H>H1_ H_/SL1D 5*Vx`���DD���4 Z�xb����HB*[X�X� 4DC!!x7z���X2hXA43X336A3@&X. Xx�#CQ,""x2  XXhy] h?! !$N�=6���X?p2 ! 1! +�FfeDC2=��>�bM?��]KD1��x" �� R�h1@xO� C" Q?!*դ-AO�4?&������@>>OA&P/> 41ۻO2!� Na��#O�."!huh̼5�Om%%Etx�!�� N�hH ���>."F^5#$L!�1 !��] #x@"#b  ,Nє$�5`6R4є !#0C3,^�/-;P$�!!"#s3”!B@$ ߈ô 1  / A!DҔ/!OΘ!0��� �?` \|K>xS!�� t"#��DUD2""N0!@. E\M?2Ф/Դ  @����"/>0=��վ*J&ӈ2=!�""?"Δ@?DA !O!!0@宴/ _!/#n)�Ѽ-._^1;!?#�dZN>Ӕ�AR; </ ,.#!< ,[C%%2R; /2-�¢ݰ �!M=.KO��"[1P2O >de1" +1\>\1!$?A# �1/=5<!O Ј!x==, QDx/ -m_ @CD33S%5!x x�t!߻x1ݔ""1  ,do$Mބ, �>^5",">4 !O  N#� @x�\M0?/\ �@ @:t6a?-�!>xRo{*N xox�OK��̈́m_@0�0 >„^M>� S0Ĥ�  "!�;M;_<-Tń?LOPB  t?l5ftYrN&A1/P0. p.�1Ӏ ̄=t;t S`$x< ,t//#$x=> t"/M"d63 ުx. A �C, /tE0&ϻxL-<]t*% 30 M>/݄�Otc>D�>?>t�%Q?xYCt2Mt h:2>>tD3E?!Qx{>/hmM=t Ot #"xLOdOE1ed3l0d �h$4:dD$x[�xxM0#f-# !��t<ބ@"@tRU dvOd >Nx.?tO2te?Pd3�< dڮ¢d/520*xD;Odt /! d3M{+t*t-#>2dA=lt�-xE/t!<OtB"�d[-&d ]2="d�d=<$�T7bNdNdCTd/�ݳh>!?�Md4h?,?d1d^?!O?#Ld.@Tl!d,d hM>X# d =d d"0T"=2 T� TT�1�.X[{dB#! �T?. T;h>,?X@Sd ?�X^n1<.STA3X<-dX.+^h�/ dO TD""4_T<K9</HQ/,T 34$OaTQϰT]`TD3??X# >�T,-OT->!X/OT TL� TT�H>5X<\Z0 H$ ,֑DE#5OX=A-TDJE#bX!�?.D@! D D`?&H�N DC4$D 3@XT "H0;"D@!2T� �D =D H>�MH 40l,H�>OD? �D @#D223D<\D�0H�>,T<?D<k?.H-\1^D4:>0OP4 r<4м-VC8.#4 Ͱ8�4 D�0 #T_�DLmP@Ca .?@P"3#D0=4D24P4.?`8 44�44_0r4D�4QS/2 8*?> ^8?/4�P@0$=޲O4!$^@.$$S_%.aA$M0n�(="4�@ 4O.$E�$_�@$11>N(O�..M(<.-(/$.45/20 $E!#-M<> N�,_�><O�D@R � - � //`.? � ��>@Π��@ 1����!@O"�.��@^!1� ��004B1@20���P���/��������������������5TDD�T4"!��"3C4T�EDDD!�����������!"""""�""���������������������������������������������������������������������������������������������������������������� .<xS2$=� + �2,@5@@/B@Q�b>Dm@,$?"- .4$<˜=A##=ҨϘbE @4?5!"ߘ" R?F  Tb?=?͘s.AgB�Q!! "^ވ^=\"6E=�2!%��$  .� !�BO 5 3.! !2!6!V@5  1.>S�-!2R!�!""�-  =A-ˆ_NG+c3$0S�܈%]RΈ4>!A""#-!3Bߘ"$eWnT�3-P�C"-���Ef7l@A+ >Έ#PCNB� „T�;$2�-<xg!S?2 x`VA; �QC[$0 DA Q߈!W?T?@ @.+@ /" "U 2, 3  $  4-2>Q!Q .3-xU.4$>ވBO@�BO�x�t.ֈN>?E/D2A3C4"" 2$B-Ax2" <x./x&OO!1t@!x4 R�xL~ψ$. xT1@x!$ xT/xF?bx3 40 xV2xO x/߈D !�x$/# x!Ot!6<b�x"$.TxA/x1x� $x `xw /Ex0F >%x/"x"""x4 x@Ccx##1x 2$t%+S x!x^$"0?x%Cx #4x�x04?x_2.CxD2x#h G=x/2h<ESBx%S h@$.RxBhC3hA fS0h2"dSx1 x.x"x1xf x$?!x!�xx`E/x312hE.ݻAht 3!#/xB��"x2%@de_ x"h ?/hQC2!h�"C20hB0`h5?ʮ%h@/6x/"hf?BxSAhC�̺.h=!X#�5 %ah d3!XCEBX@h3.h?ux"Cx1""h#ܿh!��X&N"!hS/4hE1"�Xh�hA3h#2#! hWA6Tx"hQXE@h !�$Bh �%?h !X !h�" h"$ChDACh Ah��X"�.XCD/"! Xug3X&N3hCh��/Xs4 dX�"gBX5?#!�XFXڼ�X>#DHc$e$T/hBX# X2ܻAX�B �Xe 5D2X34?X " X!!H�#33X!�" VQX�5QX#0"XH01X�D3H/6RD?˾H't�H ۼ˪Hd H.EUB2 X!43!X3H3ښ!H/%B!8QEX"  �CHA�HA H Hv%!8fAe2 H28ʰ B8#H A8e30T8C20HB8-%8_.DV`8EcT n"Z82� (ܾ@8#S("vc&U8VO8"�8?(#@8C#g=8!B(1(/(23�(S WR1(1�$1%?(( ߝ4(C1" #D3(E>( E  !(E (21.$T "�(� (�! �EeA(1��, 40230�� / 0�/� �3"3#"�-3P�� .$����� C0���3"!"23������������"# ��!������������������������������������������������������:!":1Jn""J5 J̹&uDJ31 1J�0$JjC fP˼32Z##0�"zTj2j#0zWbj"4�j3!Ί51j"B# �j"3!z�5bj3!!��j�$ Qz"�Z�5SB?���A��Z=#Ue3?��a����j0�342��S!��j/�#E2�FR�j�52"zǚT�jC5�w �j�Df�렪4��j5wz!ڬ%Q��j$Vz!��ۚE/��jP�Dz" ܚ50�jO4{# ����.9`‡��������������222� 7 { |} { |} { |} { |} { |} ɪ { |} { |}{H} { |} { |} { |}{H |} {|}H${ y { }�d -ɒHH0H $�2 = = =H0 0 7 9 ; =?0  ?PdH $�2 = = =00 0 7 9 ; =?H  ?PdHsHHmHiH 0 d mH{H}H~HH $dZd }HH $dZd }H"����°�����������������Zjê�� <<2���2 )� Ɍ Ɏ ɐ ɑ ɒ Ɏɓɓɓ Y _ Y _ Y _i Y _ Y _ Y _ Y _n )A ɓ ɕ ɜɜɜɜ ɜɜɜɝɝ ɝɝ$A ɜ ɝ ɤɤɤɤ ɤɤɤɤɤ ɤɤ$A ɗ ɘ ɡɡɡɡ ɡɡɡɡɡ ɡɡ$� ɨɠɡ ɨT ɪɭ ɴ ɯɭ$� Y _ Y _ Y _������j����`������`��� j@������������/��������/����������������<��F ��� ,���������������������������������������������������������������������������������xid6(������ �Nintendo����0��j�3�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/silence-44-s.tta���������������������������������������������������������0000644�0001750�0001750�00000235274�12161032160�020633� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ID3�����TDRC�����2004�TALB�����Quod Libet Test Data�TRCK�����02/10�TPE1��� ��piman�jzig�TIT2��� ��Silence�TCON��� ��Silence������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TTA1���D��z�)RLZ��RZ��Z��'��` _��������������� �������������������������������������@� ��������������������������������������������������������������@����������������� ��� ��������P���������������@����������@���(@�� � ������� ��������P@�� �����@���������������� ���� ��(����������(��� �P�� ��������P(���A��@!������ ���� ��� (�HB%�%B ��D���@��A����������PPP�`�(`�����P@I�P�P������������P(�@�������T�C��@�!PX @a� �����@A����&���� d(0�0 ��L ������������� ��@&" �E�(EaPtP`L���LT� ���E��P[������2`����0�������`������e����e��$@Y ��ˀ ���d���0lr1���I�&a2����`������*�� e������e��TI��LR6 �e�0��������&P �� �e�Q[����0 `�*��������&������`��eT�`e���0 ������` ����e�2�*��0 ������P6 ���0 ������e����e�@��� eP6������LB52���������P�L�� `R\!� ��&�@�`���`����(��� �&�P�2����jL`�ʘ�e�e� &�����Ap�0 ��P ������0�������Pe����L�� ��� �����$�e�0 �� 0WRI��(1a�(���I �dP6L� �C�� ��eS �����I������IL�0 Pm�2lj T����@6�L��A�  ��@5�� 0 ���@1���&(���I��&P0PF5&6$ ���(T������0��`�0�!L`� @Y5�������ʀ2�j��d0$����P)��ee!L2j�`V �@0P$0�L��L�e�3(l@�T���&e��L��ʀ2�`(cB����(eP �����L� L2 ���&@5 ���PV@5�՘���@P��( �2p'!M `������ �����I` ʨ��jE e �( � $����P�! a�`�P6\6'` ���*� �e@���eTC����@�T � ����P�@A�0����`k*aj�P6 C�2���� (����`!@ �0 CH`@(������ �&0Y���� ��2�P���L`)�����j@Ym #C1��($ �������(������ ��� �<���& (S`rɐ00 ��`�00 f �e���PF2j%L5&����P2��a�$@x!R2TP������`” ������'���0 �������&af�0�LA�PV6 C`�d���2�ef&$S!L�! L2l&I������T d& 0$�������0�����A�� a3 C���( aC �� (ʀ0����A�� abʨ`@�! �������� ��(��AJ������ �����*V-� ����� ��������x&a`Ն0@��0�����T �0�0 .� �����a( OQca��! A`L��`j ���� �@\m$�&a��A���(������0!yõ2@9aTl���\��0! Pa&a�L��������@6Sa��IՆ0e�I0$ a�eCLj#a0 � 6\m&eCjL2d�Ae����Pa(=̜ ����- y���( @5�0�� �a ���d�$ a A23��P�$Px�2&'I�� R6L2@! ��0WIx�P)0�P)0�՘dL�.d!L��0$3�Ax6u{�0��Pa����` Pa��������` CH$ Cr$Lep9 ddM��2 d0��pf�A L`j6'S[ɐ &$3����x8<$O5&gAI�PF5D0�2<'3  �����@6!L������eh 0d g&a0 C�A2C0��I1WIfH0&a�۬$2Hf��0eaA2C2HfB$3\MƩ@sj.r3a'dj�*aN<C���PL jC yS! @fN23(Y �mI"0 @$3d\$p2(0jF L��&0 rmd&��@$@ٓ!��� �f0 ��%0a$ aL&a83�&a83d3�� 0uIf!y<3'pm&C9 s5!L2 A��P69<a&gV d&��!Ppx8 �� ��(0S0IL�ʆ9g����LIL�9IF9I@"0��(0Ix8L&@f������A L$L����&7N A'0a83$ g& <O���`t>@pfRa298$$��\md& !0 3C<Pm$$$ 灘D���2HL�&arF rQ&&~֖̜@X��A2\M !g&���0 3�����&ŕ!e &C�&arf093PTd̄ ���0 3I�La&g&Lhd$393��d&g&PIQF&a+o)�Wb P Ù A2 j2uy��L 2L`|m d!L�d&g& ���0'$Hfr2ə �Pa @!A�0 3��2 3/<ʮf2d&咙s�䩏;9AJ4��F2$MKy `reG'�&ə��ᓧ!L232(f9G������`lO MNq!$'&��Ro9m9J���L.{5GT$Dd&'�������$393�����2yΙ !a�ZkkC!TPcAjfڮ�$393���I3��������D$Նd����0LXL'CjCxIjcΜ#!�fCޤ<M"cEC�����`LL ����(0\0\a�dx>v &Pae�sِ32O29 �3`393�� 3932C���(0 (sِ!L2C��`LL�L_z83 �1W{ ��0sfG� ����ˆs'A��������PA!��2��030sfC(0�&dR3?*V'3.0�`LL�0�`LL�������"!�F@PF�j 3a&g&eLL��00L0m0��@V M 3 $arf������d@ ?LL������03sٜmɑhE$ j$<����&��rf�e$<2sL"�2�����e3?G- �B��*Vl8<HxfrFF29�PFC� 393`<<L"��0jgC >[�T0_#P  O"@�&Ϝ?ơ���$#E@593` y'�&HxȄarf@8g�@ ZAC��ˆs~03`.{nYoMjbO1Ih`1HxHIyGʔSo �) *P[$Rf����0ayQA֖I����� 5C03'09y2sddp ��eEϜ3 3j@����`LL��ly8y+ 2,19����&kLq@��*sIms>A0wX՟)y&�9<�e31VE�BʂǾ��0fRTQE���|HF$p W6��!DTE`6syjD��L2GWA`p3g 3� 3k38���PFa,�2rxC�`91G@�*:L9�PV9aʨogY&y �`99@�� -'93���(#gϸVU��a''�(#0a愙9}Th ����@9<0 3���ԍ99 G�sp>!-a@mYTa1hc@f�M*"�`9H9zpH1V*"�0 V{sO*B��cA3g#3j 0s&��� 3��ϸH|8 �jTj�PFg8g&��f|au#HF|1��`朧�����@F�@2b 3gN0)?xUi10 �j��������Lxʮ8͢ 2B͙�L9̉����(#�fy&����@9<dv&y�F X5B�@3(bD@3'`̙��@9<L9�&|`@dppŪ!UG�Q,f<Kb 38"ky5;0 ����*c T��0a?qU#�@5u)2(ja='Cc$ Fx��fy*�șt;<P9<�P|C̜z �P9<��������v&DI3���`2·*.#Rgl;Ҁ` *,�d�Pԍ*(0C|mO>8����33@KX5B�B& -@�'̜3HfN��0a?:NَZ5 ���$#23���&68P6uC"F08<3ϙ9mcT8�������(#�3 sSC9aΜ�����&|15B����H|ꪣ1h`A:8U#77Ta@�,C}C��!���0gfU" ���fy*���X>YF�7=h��,H9<33kGc!����������9)sN�PU#Z/wi@��d+VBD GcPa@0V"3u�����@9<!���V9a�90ảap9Yi9$/w` 91�0F¤vvT!��PD̜��<�@F:Xe *زKPĪ *����F?gOZ=0R9fq]�b�BQ#9j޲ !b0mLErV2"Ӟ5�cPa@�BUqs �TPul€` %WI��f> �&Z9$����$#O VcPSvcaĪ)��aŪ�� 9c@3Ta@�� kTPFGle5HAԤɁ"T{$X 3, @c€�sx�����0X��PX!��Tg�*xS3��$0`3\X5B���:P���*X砊�� |  _�Tg���$|?V`;Ö:U#cmIP'Ϝ�8jy@�"\�<35|jLD 膧p:Aj����:j�����@OcU������|Xkݡ[vV �Lnha1Ta@��������1j � c,g>F,EDYT@��������@��UJM380S?Q��0bPe\!0*Y]u����z:kWX51t !I� |j"V��P9@@|j�����q,ޭ5z˂00b���8Y\8$����H,du1!2Ta@����RiF nIa.0 ԈFQN91joX)ӌ}*�����@8ͨªBTxge!e#Vh\X+}v1"���0.�����@���ƢbU:Jƈ߆~ْ,V!eXC%Ee왾# U81.=eF)[0bmg k}<֊*`vb@eBT1�F!rh=fע,H�BjCFa@c up:F L+1@����s!pp:F@1ƥǸjDc�������U.F����`q:Uq@08jfb@@#V�2I7U�����s9 �HVy@̧F�PI~V����Lx3.v*E@#VO9��P*FŚ~e*D���e3?��*v-!n3ŀB>�T_݁W|U)SU����dE@F`RMKc������*XuUA2ƨ �. hqa( :B����@c4PW}��0Zq@e:x4U¡8b1i���0����,p�bExY �����G]1q3wiBWLt1+-U:VQjBj���aq@�H8!uXx��@c|spr1jDS.<\ZA����@2QXc]z !��d#s�q.�񔍺!X5B�`CF��� ������u*~jE ��V�����R8" u#X1b1ZXcTXu#V0b)FĪ#��0ƫ>UG�������d.��T/ĊUhĪ#���@2Q���`1 �`QGisAxueP+����"vz�0b1 #FD:B!XuW}ejĢbغB4"ZCVbĪ#��cXWP+4Zq@Eօj�`6u<$��ª#c�����(ZǏx@��`q������1*jq fU 놮8bF}YUZpuQ8 h *Vz"b`ݿ^ǃDH(вA0Z11Պ��Ʒ ?LЪ1` ���1��PQGh٨/)F\uDcvWQ8[w>������@F)T#P->���HVX1ԊVQ1�w?E�P,���UG#C8PD#uSp@��0�18̙[!C-:úl}AěfRa8 ���P[X8V �,C[Q8 ��c Ke�EUG������q�$cq@@G#z Bj]UǨ9]j��XZq@��1 ���$bQu����@Z������ uiv jq1 @Oٳkǵ����������R85pu���c���QWjPxG\#pB(.A٬Q/:@����@(:ЈƤP+���cq-;_Hň=h Z eYX�@(V!���Fak;ή I���rX+��j1 ��������dG]PQnp@0��TUG4���ԭ~UG�� 0U#d !�ưVa8 ��R7 1B�Pţ�cUG(v׊�c9 � ,����8"����ԭO0Ckq@���W!� ���5j#�p�c��TT/��������?> @P֏ǶQI)aX+�p#c+~UG���PW!���Pţ������d����8����@2.U±�:<&Y,���@ l"H W!�1�����8����Rt^Z)U^g򺆩‚P:.]W�LkEP���� uG���� uO^:B��DUG kŁa2 Z6֗~DafUa`+N!k  *R0 ��cX+ uſǰI ��P \u�����$82g]-z6~{wĪGȲA�����@88 ��v=õƈ=/cmg*e/A+f&$$W!����Z�d<B ���PcE6~џ ���XEϰp�,h����8Tz xMl1Z�����4;��@Qq#29�6RƸen=HT#d֊�2EZq@�������@iF= ߺQW��nb@o Z��a8 ���8,Zq@aҳ8D�b8W$����Y X8i8в֭B �WcUX1p������ jc\2Ep8 ����@8F]u*:B���QqiZӬVP !�,:k!��G-L��8p8Z8d!v]r<`D������(Qu:B�����u#  ƈ^T�ٱȴp�an]rV!XA֊ !^xĊb \u�����Hሗ~K#qb0rX+�,ZcUGr��������:.qq@�HQ�ԭK?��QqS&��`֊`�����:C8f?_r"�`1&aR �� =&���JW!DĮƀP4ƈW �� fZ+4BZGq[D >A�í  :a8 ���Haq@p6T;a8 �ūZ Bq#8p���@E]<Ł���]z<$��a-z1���>^.J ��0!:B���dG]l 1�1x@eX+���><ZQN.v ����+EAe���c!*pu�������Qq�qFD#d֊Egz|�����������P. Xq@���:.���5QXqK?eưV`,^8uUG�_*:$Ue[I/6K$�p*Xqe@t_0�����0`)99@cXk ����PS֯gkAE\ ʀ�@(\u� ޺c2,�ZcD#֊��qiVkʼn ���L6;UC,Zq@���?`D^,H������jq88Mz\u*\uu?TRZq1G8pA����KCF]:B@Y ��� W֊a8 �@~PX,cX+�Bq#dY-㡫��!  P4U9d k0Kc#��� zv4'$a%nY %����������1 e!���N}���Q۳p8 ����@88 XDZ��Rqaή]C^H�Z1ezc$�){ ��,Zq*<jm@T�l+;] 1bhX/A��������@?ho@P€d z- +0]!��m6_rBBARk4 ��Z,Zq@�� u<-k!dbʪ^l������:q@��R4;+����|z��Lk�Ԩ :B�B0�� ���l ���Q- - �DNJ�RDZQ8𪃲:zj����HNJ)ƈWİV�2]��TW+:N1 hT ���^u��QqUG��������5c!��5«@ŁW8#�@(|z���Xq@���@E]|�� Y}݅z|UUh( h���`֊���F]|�겻B� a_X8D (z=rY"���:158#�@=;��b!P<5h7aPX* %�0�����:#�*/�������"x %`�*�Z,Z`֊Zƈaw c`:N5Y㠊 {`Y#*h6SfW=U � ���� uG!*F |zŁWfܸ.:he �������H����d<zAuU�õ� z^۳Zƺ�������G�Pu=BcV<@�z� ^۳x-z�Ƭ+| $�0�1,-ZGpx@���@Eu=B��cV|H^յ����W]9,Ӡ@K�KCsVh�������@dLC b%Z7+P@o{CxOt���\r&�@I+4�, 2R(Kf^l m[5' Zdi Jf0%Yl  6H��`L&ӲC^a ,6� i��MK@���%LPPvԶpM,6�1x[` ¶ RRSrk ����8G������Rk<�ŁW=Bt]������(QaVhN޶$�$hL^$���� 64K@������ 0-m ��@P/= $��0eI�0R+'+AѮFԘ0���� fв t]꺢gj�����BcDt�����PQ��������HqKʵ %M  ư,P0`��@PQz��1 u<OQp`8@��ٯ%�(-1\1+������:>(1�U ŁW=B���� (<ǵŁQtV=>BCFs&Aka� V@���0eRHXa E=W�aZ@� (  @ AErQi@���KNtDaZaZ� ���=ӿ.I�` [e Chia��������iIi¥LA0v2à0�HdV:B���p͎kK`xK ail��1P%='U�����@EU����d<>r2���r06,opƕؘ֖p=ņ 2&����� 2ò Qh%i�jg}g �p-i8UA8Z,ed!%$$������� _:WRþ3(P% ��8Z\.qZ@��������P'MKaZJ`iZ@���ƴ,iB++.d�`L˒Ro`�����ư,i` .7,[dH-L ����@09 �����@Ppѐ.e „K��XiNVf ,a����L1ZZ0ۮXW ��������*/cLж.6�( -&r$$� $���� ( MI-L ��@Pp)SJCPvG]q���K@$ ZBI@̘6<������ 0-npeP� .eRN'XYka����� 2%Mi �r �(eI�cZ! <P� #vl.6���m�����Dƴ ���D)M���� lP°iyii2`DqV E&֊��` 5����Jԋe"eI�Жa +oh2ٍm;L&�����ƴ,i���„Kw [!f ���Aa¥LA�����il `1\)xVFޭ4㤵0Y`p) � $����å $�nvL��TL���� 2*Vm逢ƈZMxX3I$���QW=B���@HK�,LpT ITs0�⤵0��Ŵ,i����@IK� }6|6|d4f ���\iJmAՆul���,eISh/K` $@Fl6�X Kxp{-1.p [vL��l`ih4�YbC(4f �ˆm7: $ U @���  i]mKzM z_ڐ�Hhr������ІPJ�@2iyii�����cX4A��cX4A�� l0b r �p(_VA[vIr��0ee1 ��ư,i���hNM�������Pb �� (CaY�������(Ulր%LJ+:B0@|hXD 4f � .6lia�����cؖ4A�\biT,;ކv57m7p" ��@{M`P{��( �����cؖ4AA9&����T/ 6e$��00�(a܊@h- m&۪9Z@���@aؖ0(m � (L`M$���0mI�a( [ ������ mK 2˵Z"`bl!Q]d2і; 8YZ@'K uܰ|=KXKzl8lia��@X1I$*m f^mGl[e ��� D��a[+[ bؖ4�@(/ i&����X ے&���������J*[8CP(W9j� wr\֦d��a E 6I!=H�������ʆK9!(Lv  n6! ���`1may9nw@0[ZLD�0ae �wU_(LR�\l"!.6�������� 2�������J(ndpr8d76bF⬁D 4&.6�������ʆ[90mI����Q-MH 0^�������(lC&ʁ���������%$��Z&�` ے&((LiHfP(؜l- �@ n6��0F{KtLpMH9Z@�H`6f ����1lK ��������B8NC�cZ0Q3(4�����c4A�ak0M$��„Wnh:/- ��������@ն>P�`1lK� vb ������ n�1,ჼD��,VR ukhp�[9LTa0`i)QM$@B3(4��Ű-i�X ے&��&\dwж0� 4%l"�����Ű-i -Lp*7,[a�8l- ���Jp+ ����� Es[APex]������PpXha`ia� '(�Y7' Km ��Ű-a��A:L4lY+ ���% &I .6���@(iZ4 wm)�H�Ts0��������������@T M� S{ne"8�,rR[9 l-Ll0&�P-/vDL @F\l"�bږ4��Ŵ-ѹA6������@T e [9���i[B ʁ�������@I!p&����bؖt���8,�@([wN-F0Le5\h`Zh[@������t _^Ʃ&K"XL"��&DbɾX-K@�����ö`H������iۆN � �% ����� q؆  l(g߶�`[4C i,i�0r ���������@Ib 0ʂԺpY@&H .6ٲAi+@@ .6����Bce; Lp Cm0$P,K@����� pM ����pM �@NK:�(%djQEs-i���@(ရb,CUs-i�������Br8$DBUlX~{Zx����@Cyi�eI#L�� N M"2��������p[2���@([9������8lá`XH �ŰmY 6 ö���B0IAscӥ���������,muϠQٲ���������LP(�aۆ99† |ML$8X4��Mp`ۛ2:% 2! % �@Fd"�@(�/2�b[H�����`1l0%"2l{`8X4����t-<A�Aۆ'y i,)lYҠ4X4�Mpsstit& �����bڮmK9e{ &D�eIdit& �������iۆ B @�������ӧrvvcö@q�@(H�ö���J8E �����(\Yl[�A �J8;\~a7wJD�P0esܮsTU2�����J86- "dt0\cpit&79Lp�'˒2& �="D˒�������()C���PR8E ��B {`=2ತA= Am)ZyR������%B nda�@qƆmK��bڶ4An2!M% ��%p+d"��Ŵmi=6H n2��� plY ���%"PhL$@U4(v Fу{Ke .,d��H,K0[4��5H+-rö`L$�������%Cbږ4Mp&x%s79ٰ]Nk7H�BjN[$����B @��,mˎ鶤AhrLZD��BIYl�2& ����`I�ޕئE>- eIDPŲ0��(NeHa/ Mr)d &D�@FDmIazyɎeIIn2MC{+)0+G|Lla 8/0����:&u����`i)6M$���XLmJa/L &x%+Ҷņ4ؖa���֒[#Jc P���������@(7ۗ'ى������tWXTm0؋L$���*Vm&)9Leܰc-!�����*m �IWH0�(NFA܏Mvq0ۙ!ܦC0!) E$"���������xaf n4@@q,��%" d͍]mI8 " ��Ul/e"vb&"���8Z8 " E2CF�������� ӢJNHF�$]4� &xqQd8X%/A@"!,qodI���`/2L�@qU9,���]/-f_`m�����bld/2�����xBIx���}$t0E&� K4b- ��@(7hya0(NzI0VH���@qrY����`1]1ݖa������Axކ#L,e [n6d[Np*0^d"!I`H,̮Zrk$[D�������,6Mb, `a6@����@ͽ ����fcn���( E&���� (Aod[������B7vx[B0Ds a%k68ФA"��.0( nixD��������� 6:2 `�������Z8mӄblJ:ȋLQ2 $2��Pl0Y5Ǝ$%jv6"!I^d"����@(ZY` C($/2X8ȋL$��e0���nξ VXT{)\ai ������ذmtJPA -L"�Eia$/22 7l[Za/d[Aa-1-��������@(餗v:U Z1/9Y8ȋL$��������� gܗ LI���%&`[������ i/ vXQa  ��Y8ɋL$��b-Cx, P�vކ�����p٦A؇(� IkYfWh��@V� d%T]g"; Ha����������"^`4dvvA$l$��������re æ)�����0M�X m:48ɋLFy�����,ձryDq- �@FrM$�E&{������`1\i��@(78}DqrKAҭ E �Y8ȋL$����������� ��jt& �,6Mbe\4�������jM ���Iov]LRWYD0��������D5N4��������(CD$r. ,A 2 b�d /0������� MOD�d /0��X caH"�����Io8Y %m^iӲd/b"��� y'2 ©\ 7H�����ݒl ��� a5H��t:6l}$h �d /2�����e&����blA������%v%p7:W]lJ8ؖvc"([8#�����Y8ȋ:m&)���tH�2 A^`"��%&�����������ZtT)p e��� tľ\`J"m77\.าPZd ���J: &�*$/0��� o ::D6݀3Ă #���-"uLnE`;~ @��m������pڦI,6:/U��������f)-}F����M򎛖] ����mnd���Iv�ti*/0����� t^a�% n0 ��,2 b���M� tW$-2HK����r$Odd�����*L%;&ݱr&%+)} IL×)D �����*w����@qRdSE���nKvLn0��P;~>@AѭMU\a��� e ��'*M x H$�Y0dd����`aTQ&������Io8.2Lb�2Lb�����������(NGFcr[2LPaS y/  ]0]\".7D-` �����bxLK{Jo6����Pҩcp[I ���,6Lb�d`/0!^ʳBPZdaoidaFeZ�������AI'"? nvIѢ*%@U0,&2��]6|}Y@����Xna{9| dQE9���������@VvA����@�@T0r h8!V2|/`"� { �@qpYI� d�����@(Tr& { �^`"��%7 #.0 �����%=`"�m& '{*.0 H]K2c/)hoؘdV$3f6IdRB��� `[b "s����S{[��`1ܶaS\a0þa(pe88Ld��2Lɾ2 p^nɤA*FCѠn$_(Efb��8T$bibFϵi [@qrYarYarYI ���, &8,1e& '{ ����� pd.p4W^)c_QR8Gb�������X m���Jz(_(^P(`"����+ E2��BIF)MD@N��� &2��* p7�����, hi 4zh{GU$BÙFXn !d_XE&AFE0,$e�����)Ӄ}#G6a �����T23�f :n������A Д2��bm : d�dt7��G"9 .6I$ ��������� (‹Md���vT| i-'H(Ⱥde&1����pۆILq>7C3�p^[$��������������� al LI @qrY Z80L$N� �^@������/}E ��G$LqLD`스(Cy1D 1:������/و"A,U4vMl!m@@B v022������a 21222��@P ibӊ;$zE%XKF@�ƙW(1����EeR`Q 4goi6 !������%</0�������v6,Q\AAF�2:Ҿ, KD��hb;H�hb;H���X6A4XtY&*6J $������B  $�Jx(_`"� & 6M"��dt7����� (| M�@(ipfs"dt77wK3a���d4 5 X₎jd@8XtY&BF{`U29nA`����+CE[R.i }QlA!%h@��d�a���� t-L`4(.h`\�ɢL$���8YtY&Ee"�Pam$6M"��� P����bmнVq}IMY0m%3f9<xS$P;-���ࡶœ���@%D$dI~ NaWHpmA`�U2BF���d4 de���, NEe"@FdD�Ja՛(�����������A[2 V]`e8VͩDL�ѨYMȈ�����06 i 0`"jEB������@ٻ(qAwQ I̊$I�hb$#�������� ��@&�������xx7�(6U2A H�&ԜeD@q6MNm&m&.Б]bH"���dt/0 ������C&�����������Pr[mY i_YD��������B a~M| ò|bo @y!/@I!��d2*.Ht$ڐuD���������J @�20m$�������, .cY&[e"����dP};H{Q$ P �(Nn]6e�P;%:ʊ��@qABg:` ���@,MF$ `.������"x(@qXuY&�����b0t$8yUCi�'mD���� P�� 3|," ��rwNJ_*IB�����:_Q$bEB�����'.D�������@{fp�(N6]������������PY4Xr&1��� ��S'@(ɾ .im&���4I2\/Ib@v$8tY&���@Ez*_@ ��X /4���@(} ����������Zةi$�%< (^i��˵[v or-</p QܶiP����p(_hn-) �����vH6m$Bʗ0CR8}A  ����������`1l�@ v8x(_@���������% N8z=M{GF@�d Q0P `D������� $����XL/pj���@2RxoI tbv ���'.D���������@]> 6Q$�� @����@Aإ Jqje"�Meb@/4PlA&q,q+��Pl,���`T| ��v<2�����d2�b3b(�� FŮ4opqİH(S� d3I!��@</#m<B7,D�������2�24���2;̚ ��� �(6UѨ`R\���p;8 ����UeJSl,���tcO_ N 2��T ݽ8<i*WPK&£;a7HHf"'[s!]UE[IIPܖP~a3 �нetL{[I�δ_Y P.4��������()<7( VUlUŎi/H����������,-]e"�@L( XU٠Yףr~ro$3`pQW%I����(N۬~hnHF"I�������� (}����]w/Ad"@"ݥiAG񚅈�@ �������� (AqC9VU ��P,��0 * |ShmKw�������������������������������������`@�������� ����������������@�����@���������������������� �����������������D�@�����������@��R����� ��� ������� ������(@���H � ��� ��P��P@�P@����P@� �P @��P @��P @@��@A@����@A@@����� � ������ �������(@���(��"��� @�P2@( �����"@����� �� P������@EP����<$�����``�(�������@ ���&� (�����I(�L��`.P&`P@� (@�L0�TL��$� `&�� �)&��((��L� L�����L���\���& �B$���$PHQ�I@(�BT�(@Q���I����D���2���$��0I���������������$e�P�L���I��������`������(�&��$Tc��&�$��$�����e��@��L��@Y��P$ )*!@ L0�ʀ2�ePm����I`������I��&T�2P&2�`0���I��2`�2����ee�C��(���2����������&P `B�����0I�@YCj��e����`B���A�������0 �0 @@Y��P&�0 ���$L\ �P�����L�����\a&A��2��(+��&)���������2��(&��@�@��`������$Pm����(c���(c� e@��e�����e�����L� ������������P� ���Q����e��P��2$����������������eL�j���P$ �0 0)j��e�LP�������P��P����PV���0�`�j�0(���@@�20������!����jS7 e����e�e�����@�����s5&00@��ˆ ��`�`C@5 &�2*Q 0l@��LB��&�(C���$���02���2�&�I�d������@P�LR���$e��Ap�( �e�$e�PP�eL���e�������L�`��I����� ����@m�0�0 L2���L���`2����&`�j���$@���(�Le\F2 A�0L @!�$�L`e .0 C��I�����$ a������IfHsjC��@5&@���������P��2�22��!Ce�������� ��&a3 C��tld��I0@�ˆ0� ���P$LS L�” <!�0��La�� ��&�����A!<02���PF0����e��e0@����@R[jL�� @�@e�e@������PF3 LIfr$ L`O�”A1 ��P�����������L&�0�P 沙Dl  @sd2!LPF�l�`I2C�(+� &�& ː& $@P�2��P �& L0ʠ����P�L`Ȑ!0x&a���������&a&j0 3@���I.@ epe&�0! ��������e�e���ee��@0�( @����&aȐB�`�&a0 C��(@L6� ��� Vʊ `�Ɠ̐2���2! 0 I������02�Pa&a���0 C�'g&a�� @m\mH2dH9:m��I:6 ���eTcLL2e<9$ ����eʘd&a(-a1AƄ TI0 C�� �Ax30!��&n2@P@F2Ԇ0���(0�C2��PaA��ʨ�(+3aC�<'L���ef������`$aIp� ����Pa(0O\ !$ I�0�ȀIxrx������ ��2�!C2! ���A����&a� aq51!ruI ����&aL'0�0!< !3''gd̤2�C�tpj! a��eCjf $e$Sa�$�� ������C�If������ef` a�1aP pe#=H2Lt&a'[0d0@��=-?\l <$@��d��LL C2&gjsxr����j#@0 ��� 'Ϝ@y0�� W{o$L0��L! Pa�'a �0! �A8 Ʉ2Hpm0epf��(Pm8<&@d�@f�0l83$L&a�����L L �C9 ̜ L „!<A53�(0��(d&���Tb p9 ���L&������@Y� �A2 px8L��������2H2��-��`&xrxB!LS a���L&2 3A2��(dd\mg<9HAmrMdo0&�� v0b C�� �`Bm�������@$C v 3 �0A�\6I�`CO<Lj#0aAB!�P[&�L`L2 &a@e2���23���fns0 � L 2��0!3�&aL�(0��& �������eCI3' A0 ̄2d&��L�3��Ifrf����� ���Ն���2CdgN3�&>-h�~83I0a3� ���2C����lIfNmpmZ4Yѓ;} ��� ���2ld& �L`rfe 沙 Qm8pF9Yo3Hǜ@f̜D�(0\Ɯk'5@H�����Ajeo<&����Pa&��@m Lj6�e _$S8sĄ0a0�� �@Ն\ouc& ���\6� R$M & ���L83$<93WdA ����ee!�lL2a&�0ɄI�@0������j<uc30[2s�Pa&��PL ̤l83ϟzC  0���L`8R!eE3`Ùp90�� ����d0a3sI � � 93&g&��frMadI0(3�`d&�L<EzHI����d&gd&g&���$393$39:e�C�(2HfSo$Zs'g&Pa&<GJ$ ���P!3O208 �AY ������2HfB$3- �fy�0a&gm� A �����A3<G�P!LL��0<S��0Af'yr�&p$C&<$DS6u3sI21`LΨA��s'̵6L2s13&3&$39� ��&03��`R6C� rmde���-z�Pa&L`rf��PT+K`323�mW |#��B0�(0& 3g&������� H`rfRa&ɇ���������frfef��Pa&���Lə09h$Cl>30�Ljxe L09l9g&�L$m���L5HjAx R3 !���|<Gx2HH  3930sF7&y 2 LL2�l>BxY�� .{8<*9(�Hf39Ph��� 3\7 <L a&' pGR[.#ᙃD��� ٧Y<s0LW� 393(#!�e9DE4bHx 393- σM"�0a&g <&$ 3j$<�rf��Ly9!LФO>I�������(#!���vL���0m��� <� <ժZ3?s&(#am'm A�2j 9r5&y`LL�Y[2,<9������P٪c\C�*C[z" ΐXɁ�0 I.)(;d��Hx&L��ʸZM6"frX[<g���LL�2eg��@y�(#g�ə 0\?��� r<��6rx&�m|`��PFkK0L�PVL�!|x>պ#(��`LL�03Cə ��������frf39303�0sݞ ��!���Lə ��P6̫}<0g 9h@��$#���& v<bDfI?9I��0sA0aL"�0\ۓ�I DM&<yK660 � ���HF PaXkE�����/{ҍI�fΙՀ2rxH9<2rxaP;<8VaHŐ2@&̜ə 3 3hEh�� 3&v08Lɡ-׆,w0x2H4�����PF����(#Lə @9<�&<Cۜ;x0 �����`朧�&<<|V48< 3 3k38`Va=#�ad83��Lx8X!�$#?3gI��`Ǣ<D`.6c` *E �����C 6!ik=U��ƠY-;Ġ€@2b!L&-|pU11v)b@U$`&1s&�(#PF?ayΧ.BDM"DHז<8�~p@��HF 1Aoc! d\Q:�j!$6 $#dD��fy&����PF(#9OE9<�����0ϳc,q@�Bs���*y/����`1c��@qU#�1X�kzjYlB���YA֖z<��@œ'!3����&3s3�������2𳎑fRa@ɈÃ`23gNÏ9��a9O�dd,;gR`1hp!�eeϵ�BQ(933<z"����ʸn59 &!30sL���(#'A93H=Gΰq@Ơ! 47"��HFa"B;59�IPa9dD0fA3gp28uÏF8j��@:ƪ2'd 3'��0m>�*L>GlTa@�����d9穠lɧֈŠD"3�(#_dD�f}Id<Μ����0sγ���PF|5B��`\ӬT6 -UDZ,BC����T#":@ �am$͉�!0aE|g%̉����� 3'393&1�fyXR&������*y'A#ԨAq@�@2rxO<$�0F .l٨_ !*eRa@���$#|���*RWx����T!̙�%QnMBH^��`g"ed;z0 �����P sΣ >bƣQ̜���0sΑr� F5 zX�y?8 4)bD Vb����$#s+u 10 Jpu<bUʤ€���!ÃP̣p@�̈B�ɈQ?�ٺ#V��!Pw\������(#����PVP~~"FȚ`& I�!����&̜C�z`,VcB5C���`4 ��QUt%U#��ԨF���:b }* @m)g=%:WijThEZ#!���j5B0yj�X��̙sX#$Ȝ#!0snxJ�̜9��0y?8�EDrxxfQ *�F��`̜T� Z# !�� IT*;-@(#$3|Pu"��PFϜ9s!S#(3'am8Pw .fqC�cPa@:ACFBdI2s"�|F2���0s2G:{]c�ˆ ����TCf�?W<V ��@2`�$c �TxuSPP?YAj@ ��cHwV%D@�,�Ro秳G- �����U1q� #0 �����Tn|fQC#**L(~TCk #N L4��P9<0x#V 2Iz߲aa��aAl����1`X 5���ֿ? e�` U`bzV # X:pkU!��` U!c+ V5C���@kP #����@" XPa3ҷ#�;aJ :5*1Ta[6=ò~ R*,C-5CڐA֖ ]!��bĪ1� Uf p�(Fs���q?��������ԨUXC!X5BA4P�S#'lV땞u!�- F,ň�����Pc *x[�੣F@8y<8 �� u+>u:T4b�1c[vCq]1jЈU#ˆU#�����(b]�����Pc\):["`@E@jF�����UX@2�� u1b8Dz�����*XuU:j���������Tpqpc�dPCd b)FЮB2ղ3ˆU#�0agX ˆUj!lG\5B����.�������)"{<HiF 0hW!���H8 c5j �*jj4p@�������jVQ��P Qq`����Pc!�@2Qj �`#,kN80@]a @cVDDCaЮ ��f:Ɓ�Quu(hbxD1E�����q#Vpb�P ��Q+V!����@A-qpA������j:8XZq@@T!h;C) \q@��XZ8 �T:SB��HC#b��10c \AW}lgc-������������1.�RWXh`U p@�,!Tƫcm3C`D]c@Y�0zq` jLQ1b�XZq@��Hg**�����:Ʊ>5��1b������3Oc #V!���d � u�Q+vvKqT%m]J �� ���*n-:ے(X��Bj Y#~]2E���01t C����$c: �1�uDž1 ���� 㨋6>4N3^C¡e Sj%0 � \z@�������P RFڍi6֊#F,ňXf9lN4b��R?4bHU� ƀ`j���P���Pc!�(:` .t@@T 4 k�*TkDDZq@�����HwUPl7o����C54Zqb�Wcc\6H������@z뱮#������d^{�G]eGe��5tx`Ɔ(�������㈇4h Mj�������cu5ja,CxfX+z PjňUG4zBqh Zq@�B�B0Wu!����$cq�*Vz` ���PS~`tG Z1e9ԊP ,Vqh����Rxʎv8,F:H�XZqC:B����� u.ԈW!������� LuY 1 �@TV���jx����zmZq�aB� c>KA0zmB\vʮ "V4@����0;tphᨷJ!0hU �cW! dgۻG, P+�����U:B���z#�Eg+*FV(k;kjѳxغ!RV&H"�����TˆƈjG]�nQW1�1kP+�u=��czgV��4S8 ���*Xxcu W:1v1.!<l ;E'Yai � V �Jahw;ꊇ4p�����*j#Zq�P(֙~ +vEAl�F6X-Ā���Z<� Ap8�ŰB� 4(G��� ucXIHSq3)D hY_k��Zce cuY6`A�!ưV<PDZ3XEȀ1B^Ȁft 8 ֢c���!:q���XƱ#��Xce c@8H]]֊�NqcGٸ~G0�������x#8-Ha�����@Ia;#�eV֊زQs?���X *9a۟=^nFe)Ŭ: �������P:YB b`]Ua8 �u=afvQl�زT]BG$���ưJCW~E ������"cHx Z 㸾qmcv}1D�ڞm8jHHqm@��$�ai�� Z _mTeX+���� l}i<BW!���1#q1���Hgk�eXQW<W!�Q#JJZ+��Dk=2v-U�� k���gV����*⺮xbBTZ1JZGa8 㸾C`bW_6% �Em)OX8 �����-Zq�W[������$4ӯmD��ڥL���ra8 ����:; Z,3=A`%!��,ZqUq:B��������;+�����㨋�RqEUDZ";qE�2vPvW!F,:ׯ,2J,���� jDTIcQqcUG�,Zq@��:n~(4GK\����R4;GJNJ!�0U+\uDŁ(:hT̪hPQ F( VPk3\������5q=mwE@n,Qqઃ�������QWЧ׆!A���Aqઃ֊����vH)],J!�Ł1��@t6V<Ƶ#T8/:@�����Xq@ mcK� p�:BŁ1ۭaD �������� Z+(Pa a,������6* ����HqE�$8%(\u����iv+ҁeX+�B` ١W!�����H�P.W}e QqUG�����������㨋�HZfkWC�����(:.��P.>gtwb@0W `Ċ:B�������8"�������jU?#PJ 8h+:B������H> QqUG@(1٨ ����Ԩ:Bau [p l��� *2Gx=V ��� uvX8 ��Q%�q<͎G%'A)@�*A���X���8����x]_G;&d2E lJ"���P€ $�*a8bŁW=B��!���������d1ٮjUh k��1 cXٱ^PB5B���ŁW=B@^�`,^>N1 KJX"��C[vʂƠq~ɉ �&r�����@T8QDZYC �������Q/u,, ���j -pUtI',����[n0I���% �ZcV ����uB��5,ú2+�2+��!�P.|sC5Tc8n���:6H����X Unh �ҁZ TW$mH����KNd���`1,a��ò � t UcZD@h���q��C[Ae4S�  $���bhK �����p(S2+`���������Qb1,K8ZW<䑖 :fMR6[2Qĵ MQoŕ@�����0UKjc[&���� n.,Kx@��Zk=ȅW-+EH�%C2i $������Aǰ]Tn@0( [H��cXp]6 ���` m%=V�Cka�������Y e0LA������a(XUCNk\le �Łz�1-���{Էch�P8* �Aq$��p[m ix���� E֊ x)T k1e-"�8qR>KMBDh)i ˅`CZ.4) J��h!H���R�` m ֊PLw$ ڄ"le �-a -|[hIX D^hA)0%Y,Q4|�,6��( BR e2,6 i0(A[hPB��@(aVPeX=cB@ 6H����X X1WhΖev:&H������, ��(Q^5u}LI^v���jih!�@TxiW=BzPx#��BqU�>z����ƈoݣ^񠢇,z켓uF8Ί)@֦A �^6Űqj]qð.z����MӲȉ*0���� 0�XLMpY������J ��$qGl4RA/;H�X\C{������� (iX)��ch[z HC 2�( ae���0e d,lm6IL $�kT0��������i*J 6����$r0�cZ0lBW9x��׿ ����� ]v)��06MKH&K�pH 6 @BB H�����UXC�,Yk4�€L ^�"�H,6$Xl �����Dƴ 2�^A}VVլ$ rv8tZ*/@�HP^$���0eIT 2$MRi����� ( )������%+>v0@ư,.6�1�A!].�[ *S��$q9,K X����TpQ�p!�t0RF-- � .e ���\*S` ו�WaY9(4n]`���HphW*/´@1,K@`  ����Aј]cX0A@PpiTJJ� ���*j(c}|*O`Z@ `@aX0$l ��ò ò "�ư,i` ˒&�� ( )��� 2Z6=L¤4U[y %Ե ǥ&T���T]8} %l ��XiJ 0q R'Xa0�p &��@B\l ���h./aR \l QUl� TaT���������%v,lK@0eI*6.�A6����; Bm�0l0�����dsr9 .FoS{q� B 6Hl6������� ��pJS������@d [�cXZ8 \l  ( vFsr#h41[[Ҥ40(MIkaB "!�� �����/c[ ���������\[pJ*a.WXL ������@ KK [RL9 V m"%)/x0i- �8A6bd}З $ s �������PQ?Ɖu�����Y<遊妵- 0-K@���+=^4P)H�e Ӳ  T= e�@aZ0 tt@���LZ{yRk&@h����� (L)0eI���Ș4Aư,i�cڭrVRiC�t]���QW=B�H;li2H��1+K@����҆AҰ���bX4A�����2-}*e ����������jLS[,i���d��PR8) jS�ò �4tBLu9L&�J[ � K ��0R` ��cX4A���% 2��������"K`]zٻp-i��++8^#xM$@.6���0! hHyCY����� fh]4A_2/Ia^2"e �������x�c|L)�������(^(SYP@BFlBIk�������Ԩ���RC_e �bxKy:.6���(N�������PF}[@��h���^ZXZ0�,eIB .6 ˒2l6��,a���B .e �KOt���JZC X }Lm��heul @f&h͆P(. 'Us0���@koa鶡�����1,K@0R$�0a[m6�� (L %MPPpѐD�Ķ7; &���1,Kò ��@b > D�iѶ ƎU Nat+Od3ZcsUaKaZ@@aZ )bH�@1Z蘶0��)kR)@qe ������7K fKcsڲ'D��������Y4-ј,i�Zm/`ka2H`&Г�27- ���1[[An6�[5G[ ������ʆK9���JVۮ��˫]$%p-/vL�������@P‹>F-- ��1lK ��Ll{+ :oiebH��±#N�@7yM$��0lK@��شB?M$��$0͞hSʣj_,1��T r.e"�����bcvL��aM斿52%��@B,,"P�I!Mf ���I5%<nd;mh[@Hh $�� p���p;.- �����8Ʀp���0mI9lK ��„[9&\hҾ}I�HhM$�$4&���c QVXh��� 24����0cMӃl"������34`/@7H����AT.SZhD��0mIAaMf cܴmi���������2L� ( hh 0\^������ ZyĕmiD��iyS}[Eˁͱ*6@HhʃRR&���Rp)L%Ll"�P,K6:Mhe2"��8d� .6( F &˒�H������ 0VA���@b = oi2� .2���a[a&���„Wlh]]6ٲ OJH��a�cےaFOP˒2̖% ����„[9�������1ڇm /6���( ےf �ľ}U!êM"AU�D����������rIƦoA\lK@˒" ��0C(4E&�����@da� 7������D0LPP^&�v-}H�� (p�H�Hn2��AရL$�����fa�m$�AရA�Qo3r˖�P$/rȰۦ$9ؖ!QxH!M&r,K4'ے As걹������Aa­&D��ö ��@P>ЋL$��@P8r9 In2( vKνׂPr,K&Ki& ����%Lxс�,mJA d[ ��``ۗhbn2�(N%mI���m@����������T豂%JBS�����5u4a�S{HxK˒����{`J"�,f{[A X ض������@ICx" �7q,)êe1I�/rd &D���@(z A~QOmgX,KD�����Űm$P/2�����$/Cf�@F$#PTKD�b48M$�@F#rp˒����������Qa �öM&DŰm�a��J8C& �������(\.p������r>ȋLHeI\'yhRm䲤�eI�����m ����@IKxBF#D@q,i������B ����DKyLbض4���UE����m �ö  pЋC{CD������������rI�^t ��ư\"wiŋDlͬ����rE&�2/CVX4`Y@&ɈeI���������"p&�`1l0A����ja+�PA/:!pЋL$UKAh N6- PhL0��PlKD ߮.K&���&D���@N ���Xl_$W`⠪Z\]a⠪V-&)�������p(:E&�x�_ ]Tym!�`Yd= 2M&���2& dF2As7\M"d�U//ТU/id[J0Л$F��AA�hRDZ &xM˖���p˒Pvs"I"���xс��&ꕷ4������p؆ -" .v~IOh8���2:M&����-;ے2a/d9,i����#v!�r56]]mIi0Mvgے2a/ Iے2̶% 8X.H 8% "��mI�������rыA���@I7���J8M �@(79 P@����z*KR� r:؋L$����+V�����J8bo��� pқ$��n���B 'Ɂ����ji,2|Jom(nNbO& (\nd !D pJ[Vcö �ё" ��@(iE,qpkOk&KJa/dcrY1K;% L$�����%&�������PB �������I_$ey.iYmwa ��P1[ \A2 "�����������j$ �iF\i p&xyQ �������������T.|!`ɶ 0a7 MˁK A����&�e(e{L�@q-ـ](2�����`anrIzY` A$+q54 L4H���PIo0Aar���pنA�`"������jit:6w۞/@B"(tH�����,˜xL������X.4IX-O�;H�]E"�����p6F\Y \AhH&yDq-Cٶ fےe��������`1<ZDdt/|ɝx!&ĐH,D d2rEѭK{D ���� ��������D5N4I����6,Z0p٦r,p3X'5e0J�ݱ.a#@WI|!3 R$[U `"dt7 U4hpՍI kT(T]g$� f[ ^ 0 L$@F' ϴ : wd3 �Q&+]E"�8ؖa�.0mnv&�ɶ.0ٖa�����bl$J8 6 7;L_\@FSuI����������M/t4@pH������@(7u.0l"94v �&��P1[ -l[A��������D5N4bM�lR4 "�.! /0���Ფd/0������PIo8 o-6J$�@Fy�I^`"���X e ^`" Y]ކbPZd ���X mD���@(᡽L;mv1II֮D+=% "��J8;nZ^ l[A�������MJ8 &PI^(c7v)���������B 'M��,6M%a_6: L$������%m6%�% }/0��� ʕX=L[ d/p8aan4bM�����@FyǶ_d������̶4'Q(m%:;�������`aXtQ$8t]@F8ն,’n0[.'ux` 17  LD o����0\a�X m N{aI"!����Wa'7I;Eـơ(17th&@0&�������XLmD�Ax8do����0]apl0���`1ݭMA��XLp SD�8va{9|0_@B����@qZT ��������hr[4StUieF��@qUQ$�������Z8m$eh o0kbCh o0X8LQ D�0�%[_`"���������@TM� �Tnp7 d �����0\i�����( ��B '},Wbѷ5_= B�'2 "������PC)-<DnzJ7H��, PA(I`"! y):I| eXl%�%`-- "�d o8bO⤫AA`"���Uͻs%&eqrYA {`0, ��beK߶���A`"e��������%÷ ��PI`"��������Q-<l$!tH�PI_`k +,mi.w%=�к5-$MTE B�b o0).3dA`P_T 1 I�P,,٢"����T}l`dVR˸=a B����@���J: L$Te30 8N@LDwL��������tpBf2D�����,$'*KaZ8L$���@Nc;So 1 ����AF@ ddQeYA&almi�� y ��,2 skpd em7~$9+(&n%!����'S*vxY>��r4U-i���%ze`o' 8YTY$B ���������JJ�m; "�m�md/6H�%[3 7ȂXafSr\i���n4����`1ݶ ����o/Cj0}E������D�������� e.E bmA��m; "�XNcso˧H�������������B-<)D����`cm ����JzX^NE&poBI2H,8%i}sae`bJo4������pjvmJ/2��Y% 8, ����m; 6cP$vl&V !MTE(Nt۾@ ��Y8L$����k 7cտV%$PݾYL�����Y0eEE"����E:s%"�����������Qa�StOlI(N.-&���P҃D2 "����B7vzs@�Y8e$����T҃QF`t.(#Qa �(.4L��r ��&�n- &2:ٛ:/4��(jA,i� jm([D������ 0I�����PFkui"ɢ���� K�M ���PC��@(| �tۦA��� t]`J"����������ڿ-2� Ndw(3U¢e��p7@@qN ����$–h���� P�������@&���j<^. ������Q0I%=/6Jv"��]qܒa 5I�����̲KyѪ8](U�@ 2��P,,������$�����ONbV~PFŦ(j ;TKЋb0@j�$$������rmA������^x:7]^N H���N 2 brY2 "�@/P�Tvh),MH lLvUdQѠLpP]D"��P1- .&ϩbLW$����d;H�������,L/ r[V-Ku3Ր,r��������U7D����`qM\yYFe9:7u#(w.;hT�TP"�do`"�����C ���,wk֞}LL(4o������A&4nnj&���@ɦ U&* Tޤs5%!������P e\'&r~3Nf" ��������]J;|(_`"���X_H�@ɭm��+K a5v{h@br[A��@䶌זi���������@ ~(Ŧ6 "���*"C2x~uo- br[A��TLn4����Mm1O*s!�Qn`0nI�����@І*C0- UmE$��TҩZ:7B �����1����� ^2:&/4�����^pjo0p*o0���rd2�Cx ���Yii��*T`t/lNDdo $���������ZzjoLd������ ԾDPCy ap[fW{JfC��SزAivvVR[ I*.C"; 2 bTҡt{ hAcD �������eB-d$QrI6p`S$m0��rP`b����������vT`9l �vIa ��×L@��TCyg���bL�, ������� sG7w(���* ;���Av0����If22"860H�B:طY���@Ex(o0mbp[AJxn"1μtݕD ��T ^mi�*᡼0- ����X-݈FWWXNnK �@KDTCy�������BKO Ld�@-=7�����E[:���Tl1yH T n4����lb'D ���@"1Ld�����^0um)0$//0�&j�����boB< NP������*` ���XN/4‹Ld���������2&2��b\u�t*o0ܖi�*oAb �������������bho T�2 b�����e;Lb�����eHO M%T\0- bD"#"x(@F��@{6HTRvE(0PXn$!Fukae 1��@EP 5A@"sͿ�������P<o! 6U92eݖi2:-D'P-Mb�������{iM$HyҲB �� &2��оM 0��m9:7�@qp[I ����˅o'"0UL3����;7,L @r Meb����*xEHR,6 1��������4,"_.Cy�tpX= 9+ e1{YI,-<7������%=_'<{R Zxho`" MeJ�����C{*^iP,$��Te0Sb6$! $�,xho4 SaB+ D���S{e&1�B Fe/47dj""����� (S{Ú/4�ĂQ"�������������P` ����ծEl�����iyC`We������X޺A&e���m&[ʇI8XUYY�@Ly$b���8XUY�VM2U;ʅٞK\0���@en' %hi+X-ip_P������������0Ɲ]F@�ȂQ0[8ٮHЩt 0p/Q` ��*E4l`Q$5k! ���@e&1P1xYI ���`9|UFe!5&mFnO ��������r6Mb���,i"������, oU0���XvU���X(������� lwܦ������������������������������������������������������ ������������������������������������������� �� �������������������������H�����@��������P�@�P�@��@���������(@���������� ��������( ����( � ����������� �����@����(����@ ��������������@����@!��@@!@@AA����@��!������� R���(�PH�@�D���@��������� �������H�@@(���@E� @��$�� ��$`(�&&)` ��`���0�s P@a��&���� (��LB`(��$�(�������@������(�I������$@ ������I���d�((��$��$@�@A)(��@A���U��(����L��P�� ����`$� &��0��E�������� ( � a. ��@Q������ �� �eL��(c��( ��L��� � `!� ��`(�� �� � &I��\6 0`H�`$��@�L�����@��P���e�������0 L2��\�����f�����2���`&�� ��l@jT���������0�����������������(c2� �`��e�C��� ����1 �e�T��l.0�0 �2`������ʨV� �$�����e�C�$�L$C`r�P�$C���P $��s5N 2���$��ee@IA�� L�P�e�L ����2��S &������e�C��ʆ0�e�0����A5�&�I!���0!� �����C����ՠ��`@P0 O�C���� 0L��� �P @�T�`�0&I�������!��P ��I(������!L�Հ���@�Ԗj��f$�����(�(j� ����LA���0��$���T.d��@5���`�&(C ������`1 ��e I ����0 ������Tc��!��LB��Y0�����PT& @5���`@%L ����&��� T!@�2��( 21 C�`B�����e����@�����@Y�@`@@��������&�A ��(clSap��(���`P6L�`�������e�e��P6ɔ$ e�P[P$ a`���e@2������ �C�&��`��� $$� PI�2��������&�0� Wd&L��PPV �՘�P@YI`��(``��0@՘Y L.�@�0 �Ԩ�0'`�&)Ce��&a�xL�C�j���������Tc @���2��2���Ȑ2@�3I$ a@�e@Y5������eՆ�����&a�0I(������Q 2�d&$ a�&aH�����H0P\!$L�'aOZ� ����IeC��`:Lm!L�@��&aH�Ld�� �(��L2�2��!������B��Pj @WR �(`T՘d�����L�`((T ��0�e�e������� ��������� @&�aL �`p̩m�s5e&��0�����LI�0 CI���@m ɓF `�YTC  a�����0$�����L`TI�Lf0�����L ����6C2$�����0&a��������0ɐ a�21� 0 @ʀ�`0�P&KIP6�&A`��P��������P)3�Q!L@���P��e0�0e!Tc�������2��II����0 C�If��0V L2L2 e00 j �@ ��0 3P 0�L0���@!L\m&, ���0���2�(0������0W0ɐ @ddP6jL�2�C\�� <� 0 dAL&�Lp�����������2�P6 CU A�ʨa'ala0bf2j@f`0�Pa� R �����A��A&a������0'a��@��(0$ ` f��d���0\3Ղ! �0! e$e�� a���2JH�d�LRF���� �# $C.{Nf8A0 Cf������IP dQ T<  e0��0l8$ A ef���`0���0 C�d(M5� KjLʆ0�0 Cj !���`rِ uj3��@2kb$ L“3O�����P6��0 C���� Ս� A2��& gr����2HZ 23����@��A2I y(.0 L a C& A LII($ ��@C1@��\ə'@s2O$2HF ea L���(̈́ˆ!L2df���� &0 ������# 6fee�0!L ��0���pjd,�L``0E$3��&a6d!g(d&0&0l42Hf����L��`3� �j2IlHfBڞ$B* ��I.{0 !9L�j3Ld�A2 5Hf$f8L�2Hfpf�LpA2��&a8$ g&L<j<9 弶sF'� @m!nL0&����L`8eIlsC2b02L��IL�2ȵMj`BI L0��j#eL$Y-/�pəa@̓0g Ù $ gb<s0sVb09<rdb\b�ɇ��@mÓ0sf�A8LT9̨A2�(jL!y�����3y>Mb ���`n3 �@YY W=(��(\$ 0#$32 3_O?X4R e4 *"�����&09V$0C`@ A2I932pfa0WӜ3P|I�Pdre'����e@fș 0g0 lCle?GBE �P1r!@&L�(:y ���P#ၜ���0ə 2��b2&e3'arfL&C6Hf�L`H|3)Cf.O"�@$3��(\$ ��� a8yma̜gL(d&0і(Hms&&GՐeL���� 3je 0��h��@HXF>�9��\L����-LL(dF < � $<$0�����2Hm0���� L2Hf2əPo L�(d&LفkSK6'D0��0�&frfPL�2\''3՘���@\�!<�Ty0(b&'gp <Ԁdmf 5ȵM�����f}jé a&LI����� r��L23jf����gIB�L23�@Yy&�!3O���efB՞`c.1�T0$2+Km8yLb ������!<L y(H$����60����(02ə!ə ���ep̤ C�&<$@PLL���� �03*921Lp0 393����������@�AxJ����@1��0mPsID������������L9'0 "LL�����*9&032چ3s0���032Ho3 93�03��Ifۣ<�dB��ee]H( D�� ��(C�����'|͠ebp귌r}dL��0M-!�Lə LN"�0a&g&��������@YY��&hˇRF%93�`LL`�@kg~򟪀�0QD��-X'b� e����P28ć&&���� uE���`T\y֨��C��03� rf���L3!�Lə epxepx�epx�� g&�Lsf<Q;C�2*B���ȩ[(,XŁQC8Њ���j!�� FU<� NC�\|5*NYh d1px�!Ƀ�ᇡ#PE09��P�����frf.C ��������&<|Аڒ3<x3IC*Yj ܯ ���ʸ~ ��|U�PF 39#Mn%s rCźЊUD��� .-=Xu2"4�Px6"��(#_WTE@9X������dfrf�����(#vdeGDM"�LI0���&\g`&'`LL�`u{h2rX��`¬vfa&g2rxees$ e\c!F*t � EX#VBL"�� 2rx&eL�f΄9HL"�ᙃG8CtĥA6UcD!b&�a9yp�U@G#1Xƈ �0sȩ7 3���e<MDTX"���@2b� 3'<L>k1��j L�0s0<&̜90ả��&̜D�&̜"fN��ۃ# ?k=bcPae51P5BrsdD0 IA���1F:RW!���Lj8 2X+���@0 �PF\s@E&̜9�eOīC�����(8V�$F rU#4C %1X��(#9p0`F������2rxL9����(s[<" 9<5PsaΜ@9s"�0 c����*(Gd5F]Z#d * XGZcj"$3'���`.j@3'f| jO<5B|dD����2ag�fy~C,rZ\Z(�!b]���! #FFTQg T����fy*�����p*"930dmb@�̜!f3B�PFO5rx%93���&̜30s>+|<#H<ՠ�0yN��If 2rx$3sAޠ fWۻ��B,6 С5B1 JҲb:j�� uMd1'f 0 �9D ��`LBfes>q}PZ# !T8�@9<\FBPF�0a朧��$Sy> 9‘vҀ \�@Ö�2IŨ Y5B dўp �ˆA�O<p BUNd AG=F������PAtj d`1Ygu!¡Ck���Q!B�š ���T1Z6!�Q5BD!̉������2�� 3<������Pc<J̙LNnym@0vxLc8<ھvP�T9 ��� '?q �������� >g1gn@i@�����Tht0vUPAam3 #?g` * �8PJ1V1s# �����`9OڒC����.#_eɈB��Tft:{H` * d`@M]XF�ACq1*��R1*)U#����| d���j#FڸnW83j#��9 `ԛ^]ԊJ�1+{ĭX��.k ��@B����@cF20 ���������#,�@��59穀9|u eÃ�9$L-?*@ˠ��0sN!��s�������r v&yC�gU#d `<s"��0ᙏ"aD~u ���T6 `#G8$3'�����@m�d@m|�����f>cձuQ !2If1hp ���� 3T��@I~>c�@!/vUqY�� * �����@Uc0@�U#��@n:* - H1XjA ͟+U#� *,�QU!�0g1!���TP?,^��!D١W}B(aĪ1 )Uk;*�0bU? ����` XT�8j��!X5B1b)"̉��˟��@2bp)K�@M݊F!�Ѳ^3;dgѰX5>Ve"f<5Ơp1.$E1Ҳ3€�FݵPEYaP)B����� y׸jR&-;xU#������$Kq1Ts! ԘpWЈ[7pa@���R8 ab- �����*Xu��ԭ:TB@o64e8$�����Wja@��c�Ht!Q6k<Z$l $')B� :Ƹ1!�1€��j~*#�!qc\lԅ>5��iɲcq5B���� "u<$�0*Fa_a�ˆU#`lRz˂�@v ui iĭb@!X5B��0b��*xfV����Hx.]q1��1.s+�TQkǐ�0b!X5B��,!,ˢ}) ��:*C���PA뎣#!����dczF���\X1JG�!ĊU#oguрP �����qE�PQU93����ΨzUZ8j� zjgZtTQ pMP#V�B͡Z#�@#V!^x# �0Z1ܵxˎX$��P+aĪ2*9JgP#V����@B��&[#$u<D�ˆUL���fc`� V=ZJg+>!��cGll>VLL���PUG�� ���HFuկW!��VP#V!�!+~Uf/CD1ԊF:B���������@Oz|=XYd B�V:FaĪ#����$cuA@:B�����$c\DKg#  j,|UG�ˆUhĪ#0bF:B����1 �`QG@+nݤK�k=Ŭ!Zی" eXDT6aEgX+!۳ �����!8�j�1u��aĺ=RؚKua2[P+s14FĪ#���*X�cc Vj� T0ba8 ��d#��������PQKgG ^4B����PAkab#4f8a,V���Zw|` YG!d+�����*Xu/hW}k$�!XkT+&jb@�`bx:FaZG���!tW}dc����cq@aZG���"@Y^!�0b#C8 �Ƭjq!ec]Zq@��������H8"dVU0q`8p@�PV#b#�����@Ez::B�����$#:ȡ #uA՞a-{p@�,C-{p@����q��j|zvA*R^0c���Zu#���Hac< V��;{E3a���18 18 �5bĺ=]8u$�����������P��$#:-[ d mp@���0F<#uFi_4EP+X4S8 �������H8"�H8"���H]Ǡ�, !c!c:T ۳Xl1( Y4`Z�C8 _=;$���bZG���q+��eU[}W;) @e'@ AXU����@2Q/iZG@(Fu�DF}TPv4jC,CV ��aĵP@DZCdUigNd$D�PVYJbDz�( jŠ݊C��au{k5k���PQ+u��@Eq����q:B&N�����H8”]HgV��� z` =[ b*=]8YPSvb 4bbZ+4-*h k1����� .��*x��z��!\B��� uS1*B�0'xZ���gZF����*غ c@���Tpc=B��cxE,��k=B����$8ꂌ11+ o!m K9H@an(#X#z�Ъ-{Ԣ SvG�PuH5etw@ʮ3q3zC@`����!#����� z������_xQ zL`+n(��2-펺@cX+��������@2^ �HqX�pŵ>#1=Ut���������@��\8^k2Q(Akc\rV���!qG0egkD�Z-����i '\-sA KahESV0 C!��#oG]���0k=B�����dGXz|,DKHa0h2U����k ���� 2!< kr KH�����"c pV)lw!qG!qG֊ ׊Z ע������HYըǡk=Bm}i! A+9Ly͵}l)H$����0������$8E���P`\!�8xê٨?ZjFh`Y<l � m3ى*J a)G1n( ZF񺤩V � S^1C[qbZе>@)\ P [OBS�H(Q+Ҡ:@�Z�֊xhі( $�chٺ4����@8V<qc]�)\uHe*9Lye@��������VQ8CZ9H�����@W\gqx@0UI*=+@G\A�J5eZ+������dG,�HfGE�qc`Z��p����PQW=4;qDU$�8Z#���c8nl]z ]ABfU��0��T҅m@cֽ+⠻�ሷC_,%㤊�����@2#z3z;` ������zGax@��X�)8pZ�����\Xq@�B8kA[H���Zx@tc~MA+2 `eRM#M���� Cx[ͦA����` ^ &@azLZ%¥ $������1&ʖNb6 maRtP% ]Z!R(tABB:H����a]Q:>i%h�� (ڃȁqtYҁd)Ҡ,e ܲAZB $������&q\le ��bhK̡-��ᶋ�� 8+|xA�,zG}@���Ю�������n'-aB1.$��-a������Qa X bk=ƢgR(4誃@hUG lU ��1�8W:H���������$x  �*xh[H�����"���@E]!��B!Xw\HB8 a@ahKx�����@ź Cĺm9R � ڔ l( $$«0DaPZ$,A0jD 8e:z!0&�6���lYjbҲР4(p&b^_u�eucq&�� (x)V< ������Pz��€MA�������Z�kfk)lw+ԸQ=L K7p˥:pFP ȰriJI}$BB 2�( J ���jnxp[7G4XQQ�����`kSPc%O$B 2àl F@/ �������6!(P���@deZ M 02*`) �� (Lڱûf'X@���[H0`kS` m RzƣV��Bq!�1+欻Ǡ%C[hNˎA ULۄ5@���`1AWCkð�'@  ��(:_SN'�BF 2�������ʂC�X   q6 ,u= %1���`���Rq���$쏯1H-L �����@(qզ �������ԥǠ.q\��HeXo^cX@����������@q<`҂òLA����,W���jK>e G|Y :H\6q uŐ1_����@xNk$�DucZu���,qØ޲QN1YV4n6+ HJ"� [H���X,޻JlUri��� ( Dm ���A!c%��������@dLS @ NwWXx@00hk ��@P)T ���e9 �$aV���Aa֦�#?h+� $�aY%L��+ u��!\xG1\ 6ŁjF�v5kZx@�@bB�����#< ����ԩ_Ѡ4h���% �ò^��8Z���,u��ڲW�������� ?.C0= -0ipF� (LDch[z $���&0jS����*z����������ԛ-L����Ș0A * $�� [; e\d[H����U찴)% KH��0e �����i ����Pq '-YL[; Mm4g/a*p[@U0�(NZ�����Ű,a�����՘rS p) ��lm ,e +X] �bˎ_@@qr¶=L[&e Gm,z ThFCk ��(B8mciZh����R�����&sk K_]ɔl) �������&���D4 e.Lے usRaYŞ`I$%�%X@�����B 6��X zIk,e ����BI)Tm=PH ���ikhNFQeB����PT>ԊNRrMf�������Z:6��X,a@�iYdNB�X4cf۵2HI$���mK@��������j |?pWB��,V0@vB'K�`1-K ��� qLȲx]Lڶ �%X`,e ����^4PNBX]q@�8ZWQ4ઃ����1�����Ԩ-ugz-a���@81M%փ�� T<Z^0,-Zt( Hj��>WH���BG]q]Px��Qk}�S*ҶE"- @�������(lڔZ�����% [&lm"eI1v4)�-*Ĵ`mc4Z+@ `MKH��B&*4b)X@�����`1<Q4_.6PJ- İB)5��% !a+���������DGyA:Wx@�`Z#�@l��%<'��bX�X ������Ca{X ��&2���ð( ��� 0akSB #vQJ @P!et) ���AaF1kp, AZH2uAZ8ZA.e �P @P%L ���ڛ>L6 n!h0à5@�XaX@$4R2���1���P6lm ���_d��ư,1mK@` ˒&����StsER��` &Aa֦ ����i 9[[�@ �ò����ҝ]y1y)T�����X4!��jaZ!Q@�������(^|)�@ Q7ֵ0"^L5(z������������T6m ,eI���՘4A����%6=Х $0h- �c`) ��[t9ZZLX,�K9HJ >ѭ $��$4RPh rL������ 6òIiXa0`ilNZJZ�����U}0Pn5@��0&� jSp`��cXa 6�`L˒&��� v.-Yka ����zMm/vL�e ���i 56zKH@qR�2�������%MP(aUmT.`0V2�Dmt*ȊHZq`8W$������B_# CvP Tt$�x૛��� LC%M 1,K �@bכ|�`+9 Z � (LDqeel+ �� v@% 0R`+Ҡ0( �L")V&����&\ 9r9:f$4 viD����������Ș4A���@\����T6\cᲄ�����QiIaY�`1,KٶrxM$�BV&� .���aYdKabj �%<p) ��i - BB-4jCTaK���������� ni&OT�(f9mkaB+P`�Q-7; &�� yZ W4@���%M,eI��`1m �Yֶhr%d-=�������%M��nlZ.a�����D5TjS��%M��. ��@���m/4����,eI�ò �X ˒.eBph[H�����):*Akq��Xfka��Gڶi].6����%L�JxR|@��������(^!��|C@ʁ$xM$��Mm ���Ű,i����PRp) ���@Տ4֠ (Lؖd[5G[ Ҡ0����,eI����T/|C� (]C �Ll{+�M$b$ m&l"���@(a¥aY�A/H��P2|�b XI$$4%<-o� �P������QiI�Aa tle"������� 2t� 0[t,eIX ˒bX(RX68a!2qV|LR!2,Gm0\D@Ble"�����Aa]mj0�IԵ%$Jp e � Qv�;nX0Q2��������@dt������"0&\!�a[� (LC„jUlX0��������A��C&r,-L �0&�&\VhkaP-KC�[ ��öY-JH` ے ����¡\a[&��ư-d28[Z@�����[K`[H�qE>PP,i[ ��������"㰤 (L7,00wHE%D���diltdž//�@8YZ@hL$@Y2YғD 'ud 4V&¤4Y D@Fle"��XLے % %@�HhL$@B,0ٕ7-L ��2���%@ˆ.h,KzK;Lv) � _OMR�2r&KP(4 p!$��a��@(a­H������Dp�iPpkŴma�������J(t(2t0�4'_. �����AaM0%=m_������ rIM$���0n6���a�`,\ȩ ōU/m ����3hŴmimas-a����PZ#�����PQ/h ���������A/me `Y$a[H�ö�2���@PBijIL$��!qn g˅1ٖ0`Y¤4X0��� wYeK�H$Lj@ D1l[J4M$�������`1Ea[!UzB6�����㰥Sѡ\´@hKBv8iYfcm#$,K@�Hh]lD����cض!Q&Da>&wk]@ٲ �HhMH@a`-aBƆr..���@Bl"Q,Ka,aB\l .6�����~&��@*vNm5G&��������`ÖNEl"¥Ka,a���ư]M&*4&� \l)mK2��J+:̰M$������@ [9D���� 2gcvnm"��0f 7xƕeasڲ'xdadd.76������p i,i%+2��Z貤f �( &0f Im0ŦPh !&�������0) C(4kMNeI�� v>Ћ8[4���������rML-a,� .6!M%M ���0m&pp&�� eI = EEg˒&����1l01lWaD&pyK�����~<������Aရ4f @P8&��XY^y[=] BΛږ&����@P8VlKaröI��������r4&'y@abNSn27H����� j`0 t�� D8k@Զ4���0AHhP 4: p0YI^l"������[6`4+oj4dY�$4Fm/^,f˒&����� /6bڶ4 aZ  pno��eI�eB��qI.I^l"�� vD������cڶ����Y8l����@Tˎ] Ҁi   n65Hd1[4lY���ưmi�����rK9ö 0�`1,[axyK0P]iz :5'T�����'Ւ&0����B t0&2���@(�����ŴmW` �<E{�_Ҏ{o8Y4A0D ����b-&2Pmov��'˒&0����J8VTqV $0I`br)Ci&���B x ���@N[:Mp '˒&I :F%M`�8Y4��XLۖ&0�����B C(�T=6'Q�Mp ���@Qm%KVږ&0P,Kf `7����ö f`itf7�^K-A<[H _.1��˒&02f n6!Mv� M`@Fl &D�d4./nm"SjD@ d����%)$xM6|;(,[eI�Mp*%M`�������Z ��aZޖa����m8�,mP��@(ဗrar`��N=`6|3��P,KtmK���aۆ ��@(tN=w\�������%›~;�� (ˍ$˒&1�������ʎ SF% P@ öID`ah7;� Mpgے&1�����cض @=V~k(;|;|hzỳ��@BVf ܶ'�.l����1,h F rifh` ����\w8̄,LD ��PtU(9vM,̺*@H:M#Ka ���P,Kے&0��%ف ���`1\4�Nb8ٖ4�������zeAZՆ6L`P^lk R2�P`3\B{y%h$&8ٖ4)N%MŦwe ʅo ,hE0 K�ɶ , T@8ؖ4d /sR[X���Mr ��˒FmK�ے&0�PAn2An6����e`����������J*Tz, T@�/BBܪctm{1Ku��bկT@d4M0{6�������@(ဗr fh�B ؁hے&1����%|XN7@d��8vcvI ^iӲl] nf"# n6�������mM��������P$傗rhyw7lŒT4e(ed��������P$o!�eb�����+LtxyNb��������J8BB ف ����������@ 喞K9��p7%Lb��X m�/2A3haٶD䲤I �h;�˒&12HmeI�LOf2�����X -Mb���������~z3�P1-I0AI3ha����`1\ pYi��J8;,K+/-4���������ʨw%|��eIr:؋Md�������ʉ ��,v ov ��PAj6XՓN!v+Cu@ TlK`[D؁ hR Z���,˒&1�.K���B irIM"Um_pH>H������6LPhdۍ %4�PlK����B D�����@Tˎ]A]Lm��������ʨwy{aXhizyN`�mI�amA0 Yii ��@q-i�6abf���鲤A^ A^d"���2LdM7-!oQA^d"�2:ȋ;F%Mb��������������� a8��`1<-2Q{%%8ٖ4䪗dd/չ֞ś#[aIln$b�i)Q<&0 D��eI��tٲ@������N4Io6��XLm8BIy ��������PRMD����`1]����e(�J:͝C׶4N d�T0���b����o,j4D¡H,DB ���Ȃ$#SafUp V"3M$`�����(N. &{ �����tL3nl���tr)������Z8] `~le1�d\c/h6*diB$6p����������%SZђȃRm&j / /2ٶ 5"����D.Oy Rn ']e`�����d"����J:M2�@_ޢRUd �Y8kVXZ.1m���d /2ٶM;Fm�������%zL"{Jwaf),����� Le&8ضa�͞"3�.DF��������`UD"#���"M&2������NjOR�p dۆ Lqm��� 1i ;'oz㢮 `���������.P0lۆ ����������4PB 'D`1\.ácqm8t9F$�]M`�@&U],2# &mn*0ضa�p7��,M&2�Pڇ22�����`a\ AdB],2Pt]���;P�j38 &]8(St]4X8ț;F*&&b������XLrE-& Nd�@quQ04ٛdd�������`a\J:���������_ʳcvulܢ @qnm3��D8l���@(/2�����()E1۶app,a� y;GvnlLB � f"E`Gp $̂ a�����tZDY84Tȭ)HDX8ț8M&2�Pl0D@ɿ&Ʉ)N.��������AI'}��� t9� tD!Ѡ^Y$Fm&1Pl[v ڇ;YRl!+_)������J:5Z8444D�8ٮ 0! ��'6Lbd o0!Lm��,䥜N���(Nm=I���(f6Lb����NA`"4}[fA^&J.&=w݆U^[7��&&D4�bea`Wp &2������� t DF~ )5Il`,,Ҷ&C����%&2���vɎm& Ȓ&1��ۗ �Y8Ld�����,6;vuH�Xw%"/Bq-ZZ@$HDTcQ!!a��M!dܗ L Z8K9H �, Tqrن%tLl- bi(oeM#W`F�wŜ1���=&D�����l m9���@qmS$FU,6!!9 .0��(Nֆj-0v禗߂���������� (/r{vW`�������E2-.$ ���T[D H76Uܸf$a�����brٲcrۆI �{M\ vIe ɾ,o7g7b ۠ZOUM) H���������Mr&Q"RA^M�TL.0�P y)p i*o �nl/* "dV&"���ParYP@R `Č��������KӦ &b2� QvqM�P da+1 Pat XP@Ą���͕"3�Pabde��0jmRbr٦I ������v&IT #����@h$_`"* _@����bg$*&c6  Ld�@% d,gm���J8E|+O]oK[^@ ���P1l$�����vm������o_)̀Ne^@ \a E2P 'ۀ2vFc�Q(♞ 2d: ������v&brنIanm+2$1����@(ط/I ����`! L5Qd ���͕"3����I&JarI ������VswɨE sm+$WZwf#&("��ParaV|.$2ف ����������etY&�������tb�,ep��@MP 'wOlιk[!žYHDl@B �����"BP '{I '{�e&1���XV_Av\"pǥ2Lb������rn[xHRl!,dor �P~Hdo2 "MA 6xfi)F ̂˖6:'^ZJ���������V{ -/1ui)  'b����������@҃~ ?m`���P<Eeb�������o0dv ) ("�" d���kB/6 "BE ������.@cG7 (��)Q.sWl���v0 `b;)Nu�����������E|\٤NJf*ɄP,J,)ڮ ���������XZHN������x*�`9\C@�����^eE6(do0 SapI �Jxh/d�[:wjob@�������K"���BK @wE"3km-IL>$&j2P '{������������d���Q�0ISr ��������) ���@h|S{[!",}���������D=.��������Pd@&V^uI" `%0�*d_@��������X&P �d_`@�4- m2������BKT nK8i , b����Ndbpۦ Zxhw73����@%;p vI����4@2���t깣͛`&D$0��*}b�����*L^,����`iz 21�������()|9r154 5P^2Q 0tqj]0p$tdlEc�����}Qm]!C��*d_@bpۦ Z88��P d������������^tԹC TM����Gؗ1չ喒E+[H d����@-<8P d���*FV,xu !lXL C D����ij-/Yt<hRUl%= ��@M��������0X/|\D9��������⚭�g��������������������������������������������������@� ������� ����@� ������������������������������ ���������������������@������������$������������ ����(��� ��� ���� ����� �(������@��������� �P@����� �����P��P��@�����P !����@@�����������@A"���@���@ �������A���(��(��������������� P������������"BP��� �P�P!P�d@ *��*H H(�����H@������P��� ��L�„�X�&(@�(&����`�0T �(��&��  0IA���� &� (������������P�*&LB����(�&�����&P�I��`���&JQ���� �$�P�P�s5$�\m�&a�(��RL2���� �� �(�PV0 �e����e�Le��C�d�P!e�L��2��C�� 2����I� (I���� I*�elB����� ���������j#������L�$���0 ��0`����C� aL2�� I�`(!��e�e�P����ML$����m�����L����(`F����(If�������@�P$��Q ���2�l C��`e��������P������l2����L�I��@�����:���e��e�0d�&I� �����s52��&I�1!�C������0��!�Tj!<Wc0l��e�P 2I�����������0dH�P ��ȀI��!�� ��d�P �6�����I��I��!0 ���! ����C���020��QP�P�L�u����`R��$ 0���0�������P6'dL�@�� ���@�@���0 ���@Lj0T++c��jL��L a��j#�$<I�T���0 ��� j����e C�������(!e�`!�� 2����!Cd �0 �$������ ��`��������ʘ( ��`Հ2�ɀjȠ��PV �� ������L2���������T*�L(������L@A@�`ʨ6@� ��`@j aPV������$@ �����2�(2Y2���`2&��e��e��0W9  `���T �L������a2����2� �2A2����&�a�`2WZ `�2S ���aL���e������Հ0 ����������((���d��0LjL�(��`2�2Pj�P���L�� �����������(+��I(P��P[�� �&�a��`�����YQ�e�� ������(��e�C0������0 lrm�a�5������&���e0��ula0�@������� �L�Uj�(�!C ����`0�0 ��&Z �1l�Ls! �!<I$ �� aH&Ð ����0 C�d � aA�0� a�b��(@V����՘d! T{8lڐ* a.a2HT+� @!<!� ��&0j0�����$<9 A @$3����� `��Mj$CjL��� &a$ 0�����0�� 0 *a�����&a2�P0��0�ˆ0ePc2�01%�0 �e�`6O< $<9L.ņ0��eePp��� cl�e0a Ա�05'g&a�!e82CjL���0\6���\mC�� L5�0 C0 #`C`C�j0P,C�! 4��@ )00����Axrf�� 2�a! �C.C �����e���!����dpAd& �LkeCD�`Cjd� aɐ<''a�(0OO�@! e@jm0 C����&a��Ld.�C �j@�\1BmL2SA̤ ���C�� ���0sL��e0ls<t2�0��������2\m̄! A! �$ I����T0� a����Pa`j �0 g&a�` a a0���P � � a0[M6jL2 )#Wl0\6d''�C2eC2=���&a0�(0��0 OO��0\$CuZaa�`��L2�j A�L( ��ef��������IP �����$e$ÔA2SVn2e��2�d�j3L����` IIR$�@ < C��'gVZ- e�� 0!L���\6eIA2p� �������A2 0 PL(d&�L`p�����00���ʘ 1'39L,pmCmHfAmHf��@$3�� |ِ3O&F&A2���p���P1B$3�Nm@f��A2 �Lp����������L`8 0�ʘyr\ ��e<9L`CPO5HfB$S$3����� �PL���(+`�&0&eTc &Sd3S@$3aR6e8L��&0��fN �@m!SG<%O$2Y����� yÙ 0<O0pFdfAp�&0 apFr̜H&2lҊ#ck{@2HfLZ<L�`×MP0a�3�`ep���2H LL͜|F��&arf��Am 6I2��Pep6F`ԀL63P $31'j2s1HfPL�����`&g&��0LL��d&g&�L2���"I><3��\s���063��&ə �eTc!����2Cʘgrk<M"ed&'�՞9 0�d&mr @mM=8@2��0LL�����d&g&������1'ϓmr^`�2jp$3�������(d& � m<I&_$���������`3C`rA2s':6<WD��L`rfesʞ|p @b#g��@s<קlD�Lŀ3399"L��&093d% ��e &093���� ~$P<LN"��@ulr!���PL(|ə A2���ʨ$z;dԘ0ə A z$BH ����@2|fș xyμn( d1c7=8"��PL������ ��� _o3~#I!�e̗=5�鑰hr0H3jGR-XAк8R"1 feh 9arf„Q;7<+7<:&Pd&@$3d<s0jf���ef2a&!Cy&'Ag&g&Y̘������ 3|x2ar���&k{fB8g.L`LN"�ԖdHmf�����PA�PV3( 0932̐3��� 39[NfH�frfL23��93&SFY s0�(��0C7m'eŕMa&2�&n9Ι'��� 3Ifrf$h9����IfrfB�@63s23���`$3dyL"��eqO5 3<ЃO-zr1��0L���eԍI!YDZ*B�����`dYLeǜ0⧹!)AIa&'�28<28> |4B�� 70 HI4Rd@.I��� pS3�28<jpx*�2$�Q32cTE��Pg�����\6W`B�`����H<yPk($B$I@L|3������@ �&yLCfr�� ���&�&<jՔo̙)>ƨ( 0E����Lf9REIfr%RIe&'GʙsfNd K@@DA=9PF��euN\oGc9xqxLЖBFr�&g&C�����`<��*ə ������e&< 39$px"4ehL͆ A!B94 3@0B#"fNŐ�`gLUǨm@ir+��d��TP5FUe3:Bdd1'uky����@ g&Lf��M>CcĠY`E!b&�`Wg{7F("��jT"0ả2rx0 y"<KM:�0a@9<yD(#ޢ@jQ�PFg=*\ZAL@��ƨ, !I�����0a朙�e(#�C3L>k*"`2QK>�ə aC�PF�2rx���̣K���PAU������N`e�F~��������@m,"?qT��Po a��0gOULKDpc G���`,;G�ar<9<��S_#TjƠVPD�A2�z yr`y7��P̙#�`��������PF&<IgByΙ �sf.F�٨€""�sf<5ƪI @9<2rx�ԖdL�0sL2<$9[fp �q e!y&�q5&y&����3���m bPa��0a朙�3 sL��0sL� 32rx��Lv>T��������|�*U8”IƠ€�Q#cU#�� C9 ��0sS����� ���/{"����C0axҡ5B��c5*vͰx`��CoQ5ց""F�`F����C����l䇡cv+a]X`Ú6&R 0F���d`U����@S"�PA9@9<s1rX[rDO�cЖQk<j1`tvX11 C!�1kG-I��!FE���@2R˧ޞӳ1P!�����j#g��!C-96Ül,š,g= J "DHf���0sL��ʸڐ@D���L _ã}"B�� 1.l38y#���Lx XYbz\L����!�lN'>1 9<2rx*�j;pٲ48�2r7�������q5z"F�@R;0so҈֠���FϤ99L@9G����9nZ"bb#0�&̜)Df�������@fyj2oQ� �(#9?cQ5j��0szCU>Zi&1I9g~��*X h�0aǨ[KaY=x�����T95 ��� 3糊`<TvD�Uf<@ɇ ÜTMb<xC10B�gFr����ec,bY rD�(#gfr������� eL�jKœy�sm(�@UcM��$#(#g�����eo^1 �` *RD1��^:�� 1Bn< Fy1!��B<u4(!Dz#!�0Vҁ�L9 ��)kCF4Fx&]c!Ds!D��� 3* 33B���*6��0Ft* ɈB���)1K!�� &3s��~Rv3$ϣt�ˠ�ٸ(����+(0j �@F-h������FUc-@F#95d 1X!@ ����������*jk$#W��@O���fg]VZ#cP�c*P("j��!QزCg<Z#�!D1ny ����q re2p1İ3Vn����j?Oc(D팪 � !�TPX�j2r��zՕfR��'[Z8 aq�ˠ+�@ňk!X\k!����� uન[Qk T$# ~? T8T8����qh]ˆZcd~*���TjA$#?�5~DET8 �!&)'!��Bx2! >P39<4@ xj���T9mkz&!YxPU������������ ux�� ]T���� 1�H1v3, Q4 1 ��\q>LmCF@Ly�nm;0P:n£k}�������>u/|T�BfRY12eqH�زH𐂺EpQ:B���#!X8p��HHk,Yfn=Y2c\k ����@\�@ꈧ҅#���H1Ƶ��RGB�@Zjc?���� c��@ꈃ+ u/)bX ���Haˤ#"rЃO�g�L3)C:P:t!���b1�b1 Xk �������T8�UˆP#C��0;p��� ���PXC���8֭B: �!k<ngc-P ��d���T8�T4;B: �RtXǣ4b1$�xC���@+1B#C��X(�L@PG\_nЅ` e�����W@k]q\#b1������Hxk:C�U`Ł2FB qA+"@ !�1ͮ+UP )օ1B!Xk+"TB[aZ����PBv+B4!6wkC������ "�����1.U:��:1 XnЅ������:k�PC]h p@�ˆ!�aĺp@1S-c1�q`X1c ��P/]�C4S-����\z:C-Z?�Pb-������H",,4w񫝆 ���XZ,mX_i�p�ˠ#1CUͤ+>Ƶ L"j0 pCkC@#:��0Z8 XZxHq\G`�1:Buܺ � ��Ef_1k !�!�aY]40#ԮHt�ˆU1kC�@ ��:1����@2E�$c\Xǐ1�����VZDZl dx}I����A*Fĥ����\8(א�� xq! ��c�QǡJ@ٸ0V{���R1c2ղgX ���XUR ����ԨUq ��������RG|׸4S-eBTX,C-<kC���QCb�P`b[Wz!b-h pC-��늀0VHd bңc����� B"JFu ���q,=tˆcaD])9JgpCDa`=C���0Z1"ふ!DcC_ѭ@T G@#:kC0f*1L_.5B��� 1^j( jP X*FZ���u|H�06CKzE ������qFu X5:FcPD��Hx]8baZF1F]C�F@W{c�����T8���Խ5>u �F07k}J=Gʔ2H ����@#u$Z1ƪ�"Bm6֊Hw` p@@#u 0b] hYѪ������`գFD\Aw+J9�B1JX�������@@<>j@ĵP ��1h67k|H�` 6;2J+p����cfQ/QG���@6����P-%:Ƹ1�eJz{vڽ h@a ��� Ċk0=0ejW ������@5Fĵr+>k +0 ,h ��� 1q/|��aĵe*zlw^x@��4 [QF\1�����@d#]륏Z CYx@�0Ƶpu](+8@����ak!C-< öXz�8> �P&1)~?RHGX��!����q���$c����1Exz!*+J3)S-< ��` @ ���V=+9dC? X,5>V$6Kb]I����,0A���PRiͅHX�� *Ƹ1����H#vW�bԭ<b, 8V _x\K dj����ZcFX����Pָ1Zf*ĀFF\k*%5��@T1���@1ZW|mJe�e���jԪ:� Ύ*@FZIA���TX-0VUv/< C-<ju<p#��j+F\HUz \B(F\ax%P *0��(0AA1Zhĵaa,=@ňkǂW�BH G]#Dau���BXqo#G\u(i_�!1C-< �����&������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/silence-44-s.ape���������������������������������������������������������0000644�0001750�0001750�00000224141�12161032160�020577� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������MAC ��4���������,���'���������I C(|'|<�����z������D��|���RIFF$ �WAVEfmt �����D�����data� �YE����������������?��ڪJN9T�`T������nhO( �����Z�OC)3 ���������������������������������������������������jU 9D� y����������#< ZJ&�������������������������� �k , ng} vibMQK���������������������������N��k[+`娺 ���.6.������������������������O�nfB�8keFq5N^  &iޖu 𜮓; C��^�����������"|[I'E&A���X.混[ܼ�eV*8���I����0���6 }q֕"b!V���&�6"Nl�+JF#Fl--6FھQnhlCnR�8!tj Rs Z@Ќgjϑ#+ғ3~ Y� S#dZQ4/.�~}�����7{�Gw�������wmDLUZ귀M.u5*G�xBHn[.�m@�q$��^n$HudZ/z~`]<h`���9�����������J`�?%M]~q*ku T(>oއ`lF!ung mX^? ّ=|} ͖����.�BY� ����%j�5mh���ډ2��E5��ÎT"0QجpĻt�=}+! MJl�RP�^-7(P]έQRzvG\pQ��=U=h^$I^Yp���p}�2K]MkC~.d;*F�uT�Eۿ FvQ.z,z/9 2{M3nJ0gfhJ0"Ck)aN]L ϙ!u��]��;Q=LJw݉brH]%熼;pZ͂&Q?-$ŚlŚ(f%7,YcE0Cי1xMJ`E` T{����N��4>w.P�g����0�]|zYmmKXvck�~s(xnX3��فobƅɼx t�G^\'6B{gGcC LUxb@pXV^uNQETqQx`G$S7�ǙWspQ3"maؐҢ}}� ZFڷ;Ffؒ{f!Z> V#1mƺ"}����.C;0��������\� ,BF 8l��XOiw�7м2mB��Du $z�T<enI7T|2 DfN[B ۵{-wy+qDכd,&[ 4CK]bmgA RO��Z�� "H G�]r7BqMw#ovgW,iܮ|$GRWs} 619n<[K촾V_9VvNJΙ3DP]u?5 űv徥3@zqI&"~7yړ~,K:=& #.ӚrZ!6X2>\Zv¦ܷ|>j[ogĔ^˭u>~甴<]VE *6ESmLD5^,ulf̻ �m}Nek} ]Ի:KT O`0�ykeFxkAJX4Ϋ刯E0XЖʦ!̘J ��߂c�>jǶ*k&zK"LI-Af Pn2 \���k{-o PxVaWN8 A$j���hXʷs|7Mr<FwTE})[ǾsX5X;UjZ~O ?jajI �1LqAm+? Cu���5rxSI[~ ;:2TٷDƿРyl7Vh"Fp�8w)⦖Q}AF k9\Zw?DŽO%bwç k /۠>^IVu@hX o`cq6_ E񧇟c1dž���E\6��/zL5@"c\yޔS310P%{MbRu?>LHtj5l �A԰|egpkٛ(&zH $πw���q_PV4ołK҃ENJ".?R��wͻkX)�Dhy8d yq "4ҪL`F2z wGL0^aKM$>t3 XOh_{>0lCj3bV_<K/Nkm6G';'%73r��moѻݏDNDI(j$vWV=J h~ꦬdJ�m�I����`�v|ӭOdk9&zf]ٛ3%VD{a/We _2ia8OsRpD۾GLĠzgcN/x|~wB *=PLLk.*\zxCQ՜���� ����.6�LH/(1~k ��2#˿ >&cT\1/u!q1'\=َt\UDlW֮鷞Jh�p����� 7$�) �, f<rﱀ%��"�x�k X2E.r\(KJѣ+C7˅u�x"F��ݹs\b ]$�pXa���gn#zN ֮̀����0VxʶddeXC!Ak8~+WOSn_ސ< b4)VJbl0>t|&b� i�����%ȹLzx 8* ba Z2#$jhЯ\R&N@D/;������ǬûZd࿕#W:B";�U|)( Z +m&~L6 $Lx/u5腪ks<@KŸ�i:EFqT:T">4m+g"4+7cNk-;++!cP?k ?' 5+$c| Nc $q^�:k1ӠɺdչA0U+�Ȏfư%b��~yYNTSIE�xo?7;I�p͙\ ;2+>ZV^ׯ,ow?NKդsa1׻ٿ>A"M0Y4gFyV� x ��{�j6-mz@ 1?ᄀs@5Ddh?%P���ir�������� Ymp^�B_gLz2V˘&C"# v^ԥ�ym5Fxlq {89�@Jr@R=4&c\k Tϧ'z'|.mR��D؝1���%[ˢso ] /�ӃcВRf>%X}Y� 4l, Wt\>6si2IrPGWCK풟6i*! Ȳ1 joUqM;ȭg%X:+֯N{{uŌkһUdrɨvl5J9>D]ƉF]X^ t~jqpQjInkx43$QLr% .)[ƀE$-,Xv~!2J(RLy큑U]�2(ԐCYUry'`f ?*$/8--[b\*Te2bꠋ|1r6XQaqP~"]< yh� ƵG;&K%NULm jxsS^Z (&p$z vVH '*c3us[ j2*:Ո4� LN'�=VzqțhѬtB1#q~9'q.7 x"0[ jvŶXqo:$Oj@"Nlٴ%GElO<IJCE�s���lƤzR$<>22 >.Uߍ$j4?&ݮ&�ȊeLlGWE)Gh$U6t &F#mcmb,�</<]r/Ξ/5펐:5&uENg|]pfJ˾=4?a<:!lMT@/Ɇ'9U+tK:*Úv9wIluWAeّe<U2>S)tJgF4(� ���d|@ѽqb ?k;@ݼZz'k{+)_(O+s6$pn:)e9QTjʂ>}cA}znqG=,,GGmz!Sa@BlgPknpv=í\ɋ�xZ���# - qʖܨ:S* .Tl !6%�-5$ %DViÉ_y[|#�5ؕ 1rkn_GLeۺp$n^ˢ6֗-S!IXZP ,Ƭ�$a"A�RHIp/"I��ʗVKty[ԒN@sz-JVf�I N|lCALEILqqG=~ ` Y qo֢8gj?$/G,Ώ_ (�/O�xVf[V~��$t�������~<W>%y�Xn(1=>mϗgbe{);k׮pq6ˉ3dMWR<w Հ<75Ŕ  . m*Oמ=G)�P'xyQX+M sHܞU8!(bdyJ*szU%�箈sY8aV| {Cޡ31P 1t]QHpy"sNzsjC,6UPJV0n ո��(}�d jd�@L��H7S3CxBmX5=w~H�<a��B��ROe�8 n u'% xv# 0RE[Bou<Տ*�wn*/j|x4jѲϓ�J3_Fᖁ}( #_Ծi��w^pUvE{F&���ufɭYA(3 Nm)Vsm k禝s+Ƞ/WCa@3It 7pI[Ee|[|!��@CUn&%(*_d3,Lֿ7��# `=p1IV $*0xK8o�D$ ^\$SBٮG߄<pfT4]vrl9G}�eɃOF�/n�gظΙ�y,PyL\[ߪ &# B(ϕ!L^JP;=\7>w#y@D�# -=kGD71�8 f]�@waWYP`cX Xͩ}uULP)sɟKvEz \0c#]2'mWZx7H{x,:6yg҄<B{V.v< ;;v{柭n ,W5`qB�f-3.GF A 4T%n50T>)#m�cjLgS1^D]-,h0kL8>z ldq׋ m,�U GC;ڄp\UUK EXVdLdjmQscnGD̏|̗ΰ#!$a|a#n(bED|`|ڇwCc__@U4 * ;��~9۰w@|wؐvQk7tK!S??�t*(!uBo+"ahk2\ i@X^&QxG@�a= `Ǩ-!:T!ðL"vhBN:\fδSo#6HX%gZ '�ZAxE҉ 8*vW1OkvC!u&<(dn@|4Kw!EWb}d~EӱxW*-7yC_QP4xm&]]НpQeߤ3S~ޏԆȟNub[88iJUs#g\$>/J 78Ukz3"n./Θ,Ls^EP~ /&[pŞ SrIC֢x/5 zBAj ��m@�0ٷ=��?ElxGW/3U�WJj]H+؈ �('.�p!Q8��Pvd<>e2NUͯ)A�XM?LTj rr<Ầaǡ<cDl"B3,lMw̜ "õn[�(PXdKy-u*Gdn9%^Em" g6'fnɚa ڸR$@9�Tꕫ+/��1���<xu„R��r  �ǐL�f <�eID7`��LSܑ���gȄ Q1g<(8~!dhL O~xf/Z&2�aB%*+jKQ4u-H/͵\[s,Hf�Ig DIHuARD��|� Á�. Y a|d wWGVH%cLH�1"���0(9G��[<<Di2�.T[_)BҤ]/4d3P%���&2���4,#o&\.5T&]ƀ)@Q��w/Hf?B~Ù@4��h* YI���p�1g|2lDy�� ����tCJ��<G7GredTBb�q���7R充fɭ\s+uG&שi:Co܂_$!=0p ԏOWY`0:SIÂpo :!Zd^3 /WvA`i`Q/0{͘QXFQRj%M7'�ا!HF@X@'&>]C^9ݕ �& ;ŨbĽ3C!il;�؎[8g[`i F`߿Svgo ~Iwԏu k:}@ WD Y]8pgkcډLVҋy$c �&4lc$?gb@-Em�b3v#�[6Gjمe,YZC�`"xo8џ޾ 4<w(7Z:dUG3DXd vlҚ&�tWH=^Esxw]Ga4$D"g�0.?-<d,[gފ0pO0}&)��1_da��r̟2F�~\ڪ@) ��--UEt 35J]ҝ*27uثUEa\m5H!)u޽)Am\\�h_VĔޭ2~v7NqRl7Z>.y;ML1(yc<HK{k=B"ZpOWFnkWGt1<I�_:WS$B`FwrvE91/�ݦ-^hb׹P[S sKxlXW~LT]-(;(jnBrK;!СbO5n<d-'ͼEs% Jʻ[OGG�qN�+cRj Avu1۴PH˪ 3_ ~��tHIQ!>^dWZTZ<|9*[m9@ iO-δO5m j4G  N)8Cu~wF #%cw  ,,� qju8u|';WA\qѵ]o6fOC3:^fuD( 7B#yG-USG֦*YR/-f9>pg@P1?x؍\_dHɱӶ5%1#*u`ueNo$ϯ;O@k"M2j+tn.<sMbK Z3Jav /E:H~d}ds͠7(bguYtkQV� �洲7h!Aij/+ ~I+qzR2���N�8}xbx���9K`_N{L1Q���ti�'َW Tt״Xls //s% !=ҳn@Sۯ!("L!Zxj)s'� _`Nnm!(suh4Uf%B+s[Bo0(*!;/%>Wy#$yǾD6F'z&qסn?dOՑq?;cO-p R:6ٰ"k^tvF+(\Y'xwƀ&Vj@:MY-݈V(ᗜlT6|ZkNVxL�D*ÔECv&oQYC L�[h;g��J4 o���9bSpDE1,'8���p���c/0<tBh̀Ux[5yjŠ��T(}wZ]>~K}eb,NFFRg6i7 XљJGUG=l}�u<5־vC.}g�c(x{JO:�Hν㮥 y N IoBPnʻ#ɱD]eb&TZ/߻J#91v=k=}(6axX=5R~bT ^R<>dvbZ\B;.?MýZ\ xر$-(Ū%m@w0 AAw=,˙޴a\owY/ΈTs�#)Y S]yG,_Wp$d Wzn~[2b"rX;he=`ى{ٗ;"jB?>%wI#)3%0WH O)[:vyѝ]~镋-R\crQ++}qE_k6kM?*l^2kJf%_o>VlsE%R }~W 87}rfIw/>?HHTE [Nl_7 ZPn#c7x掎Ic8(ǕNjp)>*8,HrJ t=�vh5P�vף6ڗڕh_k�tw0tIotr|S����+,z8 �=�c��9��|U�;���?Ѻxja$P%T/���̢��VsU:F\mKR΁oϾWM?}0FzR^ 8Y/*SX*goCIA4bM2=XjN$�vѹYېN*!V\楇hB:Xt{jD]h?���>kݹU��6.*8' !4ӣ1~21G?Ioxm$"�\Tdܧ:1 �=!A9X3wD3pVJ7"ôӿS7C�#_[,)h@YGh\<PAڵ vBR%l Z>ze** 7�I �� ��������C�h7Y#Y��}5RlYK|�Sl�s��U��������6ST(H��� ����,j +XV1��qi"��dyYQ.de K!l ��ʑ}�w7`wҢsl %T/qzܺ4bѬY!{ݵAQPN6wgb^:Tr8J-;_Pʧ. nzF ./ғy,O{1`uP#3?`v{~CdQɶo5r֭X691N,V1@v*& <Pqtuݸ<;$Y'ad/'mI/V6q Mk|Bٿʵ�.qa)ʉ7k Gg;~dG[gmp+֍"2%‘+P[C$Z]㽒wπ,Ҡ7FG.$G9fڒ%:6e{|v ص|D)Ou"Y�L^bvLw!"�3#ZT :" a3h6�' x�xLj^AdO ,nui&@Mݾr/MUx" =NkRLj 8_9>6]aïzDŽa:}Wt.V'uZ}6e NKInZ!N{vdٝ\e��u)j4#(��hh'�$`KbNCy�lLkѶO՗2mVxDIH -�+wjvm%>^f+=HwǞ2E2#uiU/ nA[KK>\KER(�fSZr1Cj7 I: ASNڄ4'ۃ)A �$O9hM���=Tx pڕuoSjVPMj!1S.h+"Z8].~^dLz �x[�z`했CjC;k4:%YyC@O37LB53Bu+%zAMUB+X �& wVz Na ކ�Y^"a_śͮ̋ (r1�YǖqZkrLoַ,D#a J=b�)GzOjӖ"Uc$⼭Z;,lVZŰVD�Y'rR90w4!F_hoƭkN�\BQ1KTI Őt Hox;V?HݽlW+K:EFS|UwW@Fġ�冑���+-V$=ljf5{]/ ܣG�<eAW �4/ !Q^>fێ*S3/u^7߬ƙp߱M>\yC [$,9P MOmv캀';Ķ}N��R򊧑 k%TΔ@Y&-6;*W)Lecar.m9ӱ3 |}׮�^x�~*(/K!DQ,l: !0La  Gi9(=dc5Ȓ:bxTǺ6M}<Di,.Z<C[#i;53t"y XPu\gNE$�0��CZ M7y���MvW 7#ys,V֥uӯ&KbtfgJkdjf3qjMə~0" vr�V>!͖A R{ƀ 1Rt7-cYz.ᡁ0,A2pߣr /h+XҾ�V��Bfy�/4z5vR��|�_Y\Ez0 Y%;�V`�1i2pFK/y:q*)kk/9kSRF#^ �D3\tj��"T=�p1*�¾\:�͑s ���D �; H���nDD l[fhmbF��#eKXGr" aD����[J]>"Q��$= �L\!]dmPəQ���h!!8x3 aءG@ܻP` �$9Pe_]+Rzqe_XO`g[Q5@)铇gmQXuncBEcXO.9J�DgKz*` X QN!"K~+c87>?!wOS8>Lvf+5WD\("תP|syIz lp��j Ʃ%F](0V_W�6̥l=�skj` |ڔ,rC#h߼DQZ��[QA�rh8�Rsq�$z'7ȡlT<WbєAM0_|P.���w%K6͹n 9�< S%Z3# Mv,"o[y0RKf%B hpĊy[7K‡U25_g L^ YYPq?FǺlcVW6qxpP .�) CXaUd ,J^ ZT{-eKYəp]Km}\3w �%g_R� M\?T#]8]Ĩ(%[5h!*pDq+W(ĩrl�=&r2DV0%< |گ%ڃM!k݀."����a%��2t4�_b6bYP5ߨB4˴$[L��dac��f%֍wu'z?Kjs MDG\eרA5 CK-ɧ-ħ_a*> "~zڎƖ�fnKA=%II Zm VUtUPa-˨ Yڞ. wڎ-%.Rr26BR2FUO9;z9=CeFH!s7`Y�Z[`fg)+c/p넲wg-@m}%P嫘o֝GcblU^ (^?`źj;7.R IS^.dcȁ[yW`�#^-ե /AfB~}hHI$Mq [s?/m[%fQ'QqS#cǀ2ڕgr7J�JAP5o[Nq;a4^bpƯfRU1z s=/ǓD.Ƭ�o,!nRR,_j[4 x@m)H@mI em7GR=8d&?JSnO(><o_!t5 K # \�� ?}q:Cf �E4:&"ԙn tr&_i:- {' /1`^[5jv}$SϏp%ʀF^4D-`s h@2NƗ�5! w�&LuA|AL#v*xx^iWXF[(8#ڈ컉2p.$;'�Ye}.�Gtj?bfk@4N+s�%M���� yRnfX0NlX��6mK)6QyHJ;}H8uw f 4m�w=<̺J;<j}Rw!Tl. Cc^ԍ$b@ $#;+Ѝ$jFÕ @ߑ~��D$��̻㴫jsZ6pH4 NuU_9T^�oT>әƅSFrۜ_, 0 h:_FI vT? ?-U 88fy7axZ'%o�\yp9>އfUdmZFdwn,o (N4֥ RGg!G;QS;E\UҎ3&o o/sRyikKrkyc!MA\j7k,u�ė7{Fj*EÂ^2O?% iI+8�K�a]_|w$?؊C 7+)uuq=pHTYE  ZD3FW #.@hթ4S (n_m>.#;'�eBA9IW#3�,mT'=gO�מZ4qdk אMȭaܘ!u}ڢB.`@X!z8@*f~`ҥv: 9mjeBIz=)'JưfRۛM.cZ\䗮�)0l'lIL&!zQ:d\&u0t@ SfKn�;3Ye% zu@,7N], /VӾt<oGD4^IM Ң[ƥ+b|yC]lY-q(9Z]ՑƁl¼EPT?C<܉b^³_ƩWO$l�6523&Du{75GYFmnmTZcPc(往P/fVA|0Q(3~uy /Q\t8=Q(P)~�z��ʳ&zE49-�xW��������?+�� 6fSbJ=^D@Vm=r`5[�Հ`������@�^P3"L^1s��6 �衻g5cQsaV0,buLg� D���Kʄcn���AX Nh0xU04�.�� UUdLvrW PVEU3zaƌ(2q:O<P'[)L)Jn@=nZҎ/<8<��w(<@!xC]nd1)4�� t`j//ڢǎaMOՒ( @bgz8>^ThRR ��D^,X�3G<EO.<6 ߀UQjFƈNLRZ[SOܝ#x1qZYsGb`^ja�hq#UDx1C�oЦje5o�T;lAPf^=kgy.#d��<���=Q\UV)L7?9 L ޲dSVؗXj= qr )k{b5z8VR? @.uݫ-ϊ:l?(cFK|Uth|{WIA�9]32 M%\P[Hx]+K df q<9)u<c3%O�q/M-<suNml#VAtUK쏀rH@��JGAmך%|jQ+�A #j0Urvti 66b�]��Ղ~�lț ���bp P(h9ؾi߶EAK 7J؛EμX!4(ˆrC/ec84J z+�CyH^l9Y� oeM)(!Z\Q{}%Dc =y尘Sꊝj<̬`_4􏇞lG(M[Zp�k�Ǫl/e'%;_nR㔷 =|O���miC�%&0jA/j_{ *~rFe iۅ縣:D&m#]>W҉#;wR&4lj4v<B'BY1e|om8��Pn"y�0OBee^\ά=$Do従HEhdf⤭5ٳcgtؕ&萴<0o1/)W}7vjMħ{s\ b? vg ,F  rI/ĄD3sE?.F@Q2,s|*jυ (@} 0{I/IS2&AAW]_Do.=GP0[ 2o%Pޮ١}-RsV=PV\O +yp(j|68L5!|FU᧶RP pQ@s$1~70lxgo-UCZ 5]ثYU#F \ta9Dl,nA5z*%ۍ�`d\[.}kP[Y bmCWP/&tؑ@TS|d!B+N=?]T\Ө b %�Lこ+܉]6k^mSuiX!|ޯ]s*+ri�L-]:PrnȄ᧤!ftbs;r@7BhOкWi(E$f|t +\_�RgGxLPL-; NjzQ'.�}!| isdJδBZ.Y}N9#I^XĶl0/w$8d{<5έhVk%�xaɡTt�]ʪ'q!>v 4Z>3WXa{G �d ��<_\Cm}5+# 4l (hRu eDGD?1��6nxe 4vdʊ㓌s޸nҭ<T,{= ���"2; |sfs/<eȮꮧdZK;6~=WP�(vܓ��� �ovbtSI(bCnx%#MKnH䬫HY ԥ6oOl.9xf_iJ{X"=\+�r>h%wM:hTjTkʩR%w 0d'�]Yrb'_ڊG&KamNNfƦ ̄n4\|$$�Y= e{ V H5N$kN J_W~ #ž%?@([%F~"H^�ѹTX�4J��5�$5 B,Ž4WcE79BC]?#&bC_D׫BdJ]�WL0xK+dVW!� )�������DzMƍ �Mjs�p=iĤDYv"컖g'��� [ ����̞����������,=h`كM�ؔ�`E����'���mPצ]#p/7X?C�ux40=~AML��<{Pt+hj�hyŏ�ݼ˱ |��lo�I [d 8 @�= skpGx6coy<)܁h",ТV4.B< ��`��_ �`xŵaW@iJQ|�=W@xB$7B�,|UkC lT��< H8z8}�['"Z(s迕: . 7hX4<N1 �[Q,~V|'d6YQ!�-s˒WuS]Ձ)xGMNۑ&,=2܌H�]X]rC`r P"C^A(LV8>'TZv}=ѯ@JfE&.̈j\G�f3F`,iuּ��\?$�MU?i#5M3yK:;AU\JV>u͑7&bH%Qp$}߿@L19$EH e6ӌf뮎73>8=,1ڽ'6CzyK=Ӭk2 zTZzU@8v| B�O��QbX} ���菙�,>/��Z�HѤwMEi�?+ZC\ftjԞH# e4+g]INP2B�9BւvOgm�skzL6w$wq۴O'$4ݖ:\ Mab ;pC{OԒjΉ!tN  6ξ���(RwwbJ�cV�$rD=2]n/u̪PvT tH Lg [Y5�+X- D~-&)^u+ZFqM43=S#3Wa"8|Ξr0]KA)~Qjӡ"@GĖL,_˞VE~u|ՒgѣYߓ~ADKb7=7tOjQLyCZ /lTѪ(u lh $ (}aHHSE^a]o"[ëoWsȧPkWqX>,t s̓y@4ǽפlG---I1Y0269[�['v|`X3g^suj'@+`NB*8(xTSIY`0k,/s������oP.Txa9~%x*/VL> 5'uwW-K6)X|!-aE�#bNlVwl"LI`e2bGyf8G��X���0GwdAFƊhv?f,UsH<e@.'4Un85Md9Oe`m,jh3�J@Mt<*7t(Y~���e=b�&smR��8]����en;sAcRd4!Vi}uA!}2x:uG6o_1׶?,�'(dt2|xgiz8hW 5U;��Ҍ>Vv1Th �X$q1Ū Y>* c2gÍΏB%yҐ2sڪK$��`)Gh-oPAPV^(kt!^W%qUտL�#֢}<<�^}9<ݠR|-sk C+�;8M��=?#y$ c 2/zSq7 J�VH'Vׁ eQOul6ym@:LͿ6h8Fpi2v+<nJ-2K]dY<'!K `�t^'RCRpiOlKe��:v0 HDS]�^m  =ǒܐh QD�ɿ�Xp$)XMwr �L/ط-p���'�uB+�N]wfLv6}4`r;N!�N/p Q))7x|1N Z9QoE9; �S坩 o3NtP Q&-ظ3mXa_ll4ZQtU -cp%�\~�%:3U; $ 4z:�=^BB�@Y#M0k�԰z_ 4 & :'8��`v{kN�d�T6y1Hf�>f:2su �xo[xjb~J-��;Z�;3Hbo��8#H@pI;%y=\�=M"��71oz�+hr ܸMbch_��B1��-d��������2w�BŠՓoɢG ;���4:)'JU��t+v�b>|�����y0`h.dI6ۺZ�����������ك�ͅPT!��c�"E,H0B#/·�h����F��i�u_HrFQ~^l$����"�{c ��#!%��35y�x{(M�<��i? ��%z"��6=d��Q �@fBEO(<`/4mqw`wO$�wF�X<���`z_-F%~�?U1��2_|��yhBR�},D溴C *KU=!9kFc[xKd%V>4(3~ �j+u4҄nt]x{�~nuԬ&ŻS orp>0u|ʯ8\[<'o :?c=A*zB>[Y4jWrã4�@垖7z8"rdfذuF1@ oƝuNc�\l1~3&MI&vFFs<_d<OZ%Q+Q�R�e�䇜yx<t,0"(%]d'PbpG؀��I))K4Aycs/7p5��>p�8*|*kb1nϳM^/*3MT V/RxUY*0<i�-&J�[@A՝g�䰒TeA*�=Rh$t7����~)㷄 "4����B\tF �0fC����YӲ�r�PĈ=���xr1�Em 9H0ϢiJqGbj_(d�BR^z"��QBFر~^n]-�LA.4FH0�����pTO!R.[I[ẃF 8s B("eX:VFn,:BB�< T8&XH�>D @ r`̇E�H4A/{KYk)<��pq ��.ʓ� dטFU8��H%�Wm�0����(<��������PC��w8Uh����ରq�$#tI����xu����rF�>��Q,LBfW��`,4]# c7xg^l xMP^>^ҿCGto����vV ����Pn�DGVѨl\q ꉑU1FIEolq7O7n}"LHø.pP+ ���x��������&j ̍3"2ך leRdDkG+z@p;v7� TGZ��������uB8\<�rKJB3D�4 ���FΚ"T4[k C z0 �)FPB5&"8 % aMckt[j?Ӊ Ұ@3/���T��������h��0;7,�D6z2}  �/�m18k��l&����1wZѭ.�D ygϖ^�OfX �n����^Ydn�RľTdu]z\���KI'�v1rqY� jpN���c����pi?7ɪ)�Z{.����5C��e !T>H{H  rU�� 8��pqF-�%kbฬ�� ��������%'���������Rm���P�\ d�E�%:._{-p!8 b?~>C ���`j��Nra�|@N$g([h y5 Ce0KNsZ/o�}^ uS:0¹:{q{\j�ee*4~ )�jh5#'k@n_5h]7#[k�TVDk=( G<�(q(|G@�o2D3̾BaUĆ;ugsweKC5:q3k11{Izx[^|AT)/ |gWL@p6|%]KH9eQ.yf4�d�-wM�G�A' ��7.q'@Fȭ0]99a+i]H�e+8k*S�!Z%5`{#Kh~<oe �HY����y):<]nqc۱R9Q'|<;>By)hOsAŸݲ4wȧ>9��n��I�����+K6PC8 u^ gըUjtl.psútU 1:Sf)bD`C&dVkB ;[ّi� k Eap_{H+x CP5',TL,ш�diF�N)������\]$  Va!#8��-�r1:L ���tP#��#m��TΰZƩat\n.�5���5]Ʋ�6)~&PCX'קx��*.{`#OX~ߔ3%췽31Vta� B=ȧ~53FBDMW!2-.utVV�֠uG 7J, ^ (u hc5 T^hkmPr /Iٯuf`cڤXq͛c„ E}u拌ٙp~݈�TR-8@1Ov��U6NOUkۯ�^,K��vW&!7Tn3:�h/JI6_7]k&�NlW]<[ J6훰-Xz}c1*)9giuH-�%h?-Cva8FqK?�~|鯄~�<FҨ/t|ʋ��rY%��^2N�^c{s���!���l*W)a<ߑfJsH�7O4 ��85����z�Z@�*Gbƛ,W~aMN|\A�br8k/p^M�;�`�I@|SAwX���bev˔-Q/-N?EU0WҚV�PYИ0�V!S cr�wz����nAuqQ3H:d>"/%͋aXgJ"+ ~Y1X׀p% FA/MG7F(Jſf��B��)sTLUD8X2"bv1>L �ːk�KA~} ?b_0PM�e*����v :bUPTrY &Mx~rFX R &ն| 4�4~��OJ|��-m@�m9C2��A;>wv-,��a r�ra [f\|Joa3 UZ~#XE A{!I XVs;qFzUR/.OR7B�$` ƶo�48Tu,Q`*4*z2)$��2n qD,rUK՗3�&?nJIgXPG4NUm@ifHH,Y .eչ :�ʹ0(4T)TZH�|꨺�wL M��l۝5R[B2SgXr`C#z���!*6o��2i3m2"-= ��CjgKڮYY^p��`qs�ҫR�txnR>SePIuAߴg-:OQֿ!y� t��0Y0w&k2#|5�D聒a">l?=h�1M,��sٶy,+hGhd*76'wPM)2!R&QqnV<{\q<|���(j;�"H9)1Du�I��zIP�v7��������t {—>��tţ������p59ר]ȗ(�T>iF5=^���J�-]=c~ Mjh���\%�q~YyhWl8 p�>UcXfZw[NR���H�e5*�eM=-1��f����h&PCY۝�@`AD~3@5?NGz&ՄIfYWTjQ)<!ab?I��K,#P�O6-k sP'bZ݈��5~�[j-�6H������t6L6����GA�ZňEu���=Ak�lS�d�I����rF����Q��1������������C{��q;p&gO&^� }v����&:I���8u���� ��������$�ЏSa��$����g��9YBI��*�PY:��xGZ^%]Sv*o"��������4)��������<U\q oJǽSIͦY8&oKuH/^�a6^��!(0ӿi�T݁x庑�ZsӡbtϚ9ǵnLnylyf��9H����aN,Ns%9ZF-�RTƣ�"h2i 7\IqM(K߅tQh1.d34Z*A1sԛ7 $6t/)�㳣l1hz|4 p`N�e=�t?lm%"�M�NyF\�$d"b:H7mhJH#%Ζ!9tDl6v3+_`ecw- |f~z[C}+!cP.cf�5mrYKjM#H^hFUYN K2 />-chٺ7z)=b;^|1Ƒ�![`D'Lӂou5ݏ���,����3��H!�=1،%/Wc$^BX�X~kQ�2mrŠwy`'Y\΀"M`"<MO|�gֻ)c : ׆U/��P����+��'1,RSˇq�d$7퟇U1� �[CH&\Fi띖IYmzW e^)xηpS&5] .*�3(k/X8P�EG��Pn.��djtA+KtLxWO�F-��\|C\�����?cr5DG<x�eŠ99It�K9n���pC*�xTWm�q-L}p%fpF��ԩx1$` Gho��� ���B�"8_ LVv*L~c}C��43�;6Ne|��8]4cl9\rK]5dx~)[}|qp(�,:3#JUqZ�(Cr�+�R4\)r������byQ r���k7+&��c�N�H!�h���d hHh_KL/��LvpB"扞*$h&d �uO�}O����vHVU /9#H}fbni�fl���D,bmEo]H;%Ӯ2JdXV/' P)��w#u {:`zM-JP.Ci,C##�F^Y P2I����K/7]QǎLi6X*��Fn``c`_§z3��8elWU��jJ$l0 %% ���N4 Ŷ,ԡ"9\T��L_~2�E֞ÀDq�c��U=i ԡL)���p�����rG;<-0e4/j8t=l��~9uq歹oZb0/| t(Kw5 d|~ɞpSP��\taOdQٯJb����$%$Li��,( |ٺf40iX]Yȝ* \QEI�\K`w65܀�P99D۾F2 -%T2[ v+Ik9{ Y8|d6|4̴? ����pP-5 $0ޕRXg40[9y/Ve����zN�I% vxZO€bS�������M���ӝc%HSnXT;~��3ݦLXIC=����L]'0��4�"TSaMDwJBd��������PU#�Zp����������Č%~��G( ~X-ј0+0f{IG5~d+-^N OZ �z l�� ^9D=c�@BX޿ Tp%����������)>BS~@?dV>>iO9 ,U4Gx�:���VLHyވf/߃^<x.Pn4��!%����ɠK��;\5�\:]K@�|x ��+_�75{d�����������s$\jKIM<k�J=q.L:�NGwq*H=!`rp58酸I��)EmG"r�fLVXI�%3Y !ːsCd,J;O/<.׏]1Su<)tmBo�KJoo4W\1дo�e G(% TB9=bfMdGxr`H5!HAW�YII4 v*PVM-şbe�h`לS ɰfq:3y����z4 �������%����l��������������>5TlѐrNL�P���ۨAƸ���m%WoeRRyF$@՜r>>2S5jS�� �Zd*`"�x{fS.EV+ I4Y1fu ɭ� Q渽R�yz,kA d%)t@=l cgױEOj= 8'.ዟ޲(iR�0!B�)ݒ?Ԕ�86)<Y3�-Ks�Յ< $i_P.NX\@ޗ>Ow[QI`Ɍ' ÛJ;%I����qe[ E $/_J _\O7>$x_ߋ xC#UJ# 7ѰR73Fd�9i�eX5IZ6a*JۤzXK~$x%DVֹXjmzpjS l�I _mbg"h�W����-�9JK24~Ï)fNL A{*`̤ DrcO!BT�n*,5)2a VJYT 8����bB�d[.wIl_�=bMJfX) ~��&[8�M;U2b4�4$B"<5O���f9i0vu%e!���DZʧ8 Ԏ@��M/p7D ���q_�9EgNt/�Xž;!io!hQe<vCзS { �e(<9@sd*E� K]_1rI }%T��Ɍc����-w/Ow\�E ��_�- [ӣJ('r 8Xm+C=�p���l=�P.b<��Ӕ߂s.,WS fa@o��� 7OG -;@ ȀxD�,PQ���E·Ogۀ�㵈c>4p\ ch4 ��>!GJMgE !P\O`* e)}'! x:N勹<J̱+<^zJ `ny��Dl �/Z VagL)Gt mrAq+�cv�aM|g 5Uasb&)bL2f=bA qdDb!*C`cUl\_eq�ޝpoJ7#q&ne=!G(2|LڈaNC Enksˎ~M[JwC&0!c{=�s\�QD&=!a,7.NFd\V$ 0�/iY:, ˃D[I��2O?~&)Ǯ���4 &95��� W��kԸ׀i[bw&Q {3WL߮bw$zm<VdcfK,Җg< �`%Khx5l+C9Kp[/n�k=.=Ϲ_�M$&D[T�����$��\�Y%&~ GkL&e/%|c$l.�tռ RWp�.kCՉ3���0Z-hUp4|?�� ٩Uq=~�lĥ v� ���1'���,ޗ6>1T%P[ AU[I0|� ��d�̞[����tN�s\K�` U],�wZzzӭ:~g��#_)?,M�YSQ6 \ 83*BƤļ#����\Rf�ѼMNCz�������,�����������FJ^ n�n����p'����s'����������j ��Bd�O6�����* ����hn�e/��Pam-"KְIX[OD/�^-���P"Iv����H9o,)dD|u���8���`JtEV�j��(��rs���� ��dd�L���������2R_\ǻack_P|f.5( �G�_ٞկ?)��`_)��8i�x{ ��gqۏ0pjF�TB<�P���� ����D�����$���LY,L5�YkpAv׾IH>YAx6]�,\�2?G���פ�$E����'k 'dt1*K02B,vl'5QȲahJiPkhO0 03|}4~?zn*%�.5XqaKg�#2V] ��đ Kamp ң}ʀ�J0���) �Cb66��LH9ec�y ���m\\%!Ra$j{IY)C{*&j�"#Ur*BO 5)bxY<` Z+x(lqҡ��~8�2kR>n`Ŀ݆`v'%ĢZ]" {F��p)IΏl3H]%���hϝjn"E<V"g`2>A^<@|C8wpxաns2sQDP;>T\23@fR M"O-����?3=*G ��� �{42ťU\5;G"ɼ4G%JU@6'ݎ+&4@u�W�@����L�[wdחp ;�ϻdߥ2[Lu; ̈́FLq(�{āL fYQ6o^3f(,�Dky&(�DvpKp�����������ϲg%u8n��d%|܅ ��M1��������i�-m��ƴMևd x{3nUeӖͫx h:2?_ď"h�u>{~ ������/���d ����4��QW7cB@bH@VfȠ[ՁmcEY$7dh&R}ڤr*hKgg-'$d1���qDD pC-�=L=#/IўgJ:&507eb@.S 3k Yf��4P=];ȽP("XFoJ'ӤcçIM,x5Co�vuu+AkA]ЕXM$kp;`NgUw��'QInS u:_ヮn'[<BIʍVV1s\Y- &p TSs%Wfz w?=5-sg3宲=Oʘ5捝I v3kȖxT,FlKA>u6ĹEP��Z3I>C(p3UC+P/(}mGd+�5éd/EvV([EN.$bHDshDsSpj0Z 뵛)H6v8 8ީ]"aPHG= cW q9�$Fb(Ƽrh? O�w6o%6m��Z'j Cw>=���-qu:1m +� ۛ\�Re�Lm p+ND?"3r/dI6$ԩ}^qHp/D�plN!0u�Փ��{ �Z>t/3<: 3̔g*#hS- VD$dfw�6@V�`�I1AT&F�A+�0{yWO+*:'{|������}KCs<)pօIȖ=h0^Db�3�����J{)�)|{k0y-~^^qͪ|||n3kEtr4*g2B��Scķ+'ڡr))h3NhΘO %3@ �.[4\_nn]B�_ ڕt'x\=����O'�m(}ϞU *A-$9{Ѐv{mH) 2=�t���� ��ǥsY"5q*\Vf+UçF@L�-R0zsQAkA`2Kn�qEbR[��ʂDkMVǭ(M2 �:g�6U#��r!�Ԋ޻zw+児�lx1��U m-`",�D!?3y�4, ౹kF`kuvd��T������������͝���x�t�Uyڹ�2�0�@S����4*%v2������(�����������+?�h?QGak�';�S�������? �>opЄ$TޡNa��� ����HxD,SBE.P<��h"0 3�Ro���X;���`��~얢|zrٿ ���{ ������������:��31# }`1.D?$ RYW{c �X[R[..~��� 1���������������� pzg5���L8#Sv ت]��pO{ �'5R 3=\*�O6 �wluǾi_| 71jNbTD%��<m pB8h>A�A �m\+ 8& RfL:R)6K?eUI]hP2"nc֤~A-8/mZR��uR�\, &4`yT]d_?Uf&�@Ӆ'�#SH{ I6*{gKƴ-uJ |��_�{TX룞m1*S}�=Py`H M[;ks vJ)F@?ý,zҥXL`XNԖik4?>�k�bD6U��7a놔 JE=,ᴟPMAY"1%¾-_C4ԏW��Dӆ!(XV8 -b������/GR�Ț\쌿@<K; \=8& ~B.����LT^�xU}UD+CQ$:Syb~`8#VQyHӜXy� [3��] .��na[nNa #"2[ϿPcaK=\<xE}^^o 8ɜë*LβQjЎ՜%ڞ) �:@"~dޛ8 |sҏ��,'A1P H)E4?#3/ Ԯ|(R=@&f#<Hq�/�.ݝ}[田 K�H= ɪkF2x}M#D4齳di�s4VZт�qc7nn?.=�d��{2���ͶB'Pܿ�6٤ nJ#:n/0@C |��P����.��EsP���8 ̻6"I(xwq-~$_�P``rC$&!<N}'&L�%#>w &a!GȲMâ�tu݁H���u|9Ѐ^։>#"+-[lu�"kc?�(b]Fh f;S۳�W5D�t��p8¯v#|!���\ނY9L�ṯ"�h.{�+OR ������� 8��������Q� n9ޚX+TN[�iT_n��V(*0sW����������SGl�*P0aq<������R7d�{Wկ (²� fV7ǁC5G\Ù;LE8 Mtp"H#bܓZݸ%> -hpwz� z�746���{yj/,/Ml���p���vK|^[Ӱ9!�O^BR·(�⪯E(4X N;gYե({w h81EZn!ԯF\] �Qk9 PQs\+}(Vm{\H^\O1rrI`�ǮD&/?sI݂�ba  vy�xnk._!r�j- ���|K�l-oE-ؤc ��r<2'}pE_hh����y���K&ҕamX���(L�Wۙ3r ݦwc~�۪le\3f6]zX9"Hm�䯏!C2'7W7rBU,JI"֫ʦC%ԉ�g`ԲD}0� >�d�ܗ"~u,��~1O�R5ɗ�蜀͝�Z��6cX {��0‚6[-1�$BBD^j�"X'O,�Vm��r #Z� �w,^؄{�0DXF��,Ns@;���������:n ��HyDӿ!È\xiL,3y[�@ Э�$@Alr ��ҏ@ oc֦B47{�������=S4Kx/iogbdt u��bϷ|= ����$�ĉ:O`�����hgH+?6?��xB��������@`���<d����h���|3,̮6AjɔA�p����*�`c����;iFy+V�%P������D �wm@HV���Xu�(*A2|)az�Nˇc����$���?^1����E:2Y�Lqˎ|SQ`ACOG`h( (օmS�|�4�hzq���4eۜ8;#2d�6H��P=��' ɫcH�,rR<.>U#X 'V6` -cqPS�@n`� _* 9br68��yiw#�ʗKӱ: LqQ(mD`b-KDYŀZ_=��Gs�^Ԟ�+#xq�`Yrl%/oDe})'XdWcF (ExX l�|7y2Jnrc}0!$��%ۨe�0KE0|rlc^ ڸb6L3e\0�բ=<LG :M(fSr4dx@?K|!/ѳSVE^<0H}C\'L"Zo*L�:/B�\rY#zr.4e So\�`!Ȱ4y Tcc r:]�XdIwPaS7/SB;p;JCym0>q쇢�*]*ʽD�LIY %��PT?4ݞ_b?p)VїH lzw1���P%h��cO0ʪvl\1��-����|W���x.�V&a�59S:ZAANn"-=i+;'E,U*�)4؀mI|i*B炑�I[-@ � :ā%�rp ����<;`ɏ hۏJXT4/w_��0C �UE�������_ Rf����d����Y ��Rˌq]��q(�8ݨTY6_+&�)�� ��#,>�gQ� a#�hFt�|yV�DpI"α|a#!AYu[ Y*ӕ����� ak��T.@��C}~2hXbrrA#3Oy? ���d7bYc*Mr{;Rie`��8Ue|���&(a���������2%%ZH*�Z+?='h=<�� -ip.�� m%\�����yphX D��p 74f�s:+Fd>���By՚$1[&k>$q' $C(zMNj8?ރ[L6�$Ԣ������������cNd��tU/�Unb'�|@D���0= t�tN8�����()qcQg8�-.;� zؒq[���n Q[�N+ @k9r x:V,g׊,(cS�v&x���;�H�hMJoB�xT>��"r`nosL_g{ h"I(LI`�mRH��� ?tT|!J��TP��������0����8 ����T���P~(� �Ȇ�A٧%* YZ/+zD6py6t7 Hboe51���v����8=/6`����-�~΍�d; /�ޥ��fY<~yf*��5iʠOªrO2 ]GrT���i%KB,H|l f8�i90ixpa7f����DlY sɷ? ."g@n)/v{BUM a"wQ�9 ̠$==@VM:@2(_ Iю {.neU殱0 '?B͡Hy"BD 4Ux4�&Q)N6 u_(TX2W~پ~3T{|:v.rZ O!wKXl{p#;7 sw=ZtŃ�� _��� ��|���D� R-n4�!^_QNT7tRd�1x����X�(z�ƮPDc.L`pjx;8uk`<u\ʼnVpV秣W 3";mu6�UAt&n]NlQϰr ;fZ,*��\T�DWZ���,P'qt��Ƅz߅).���`���Ɗ�"KB]*O#B*���Pt!!</ `�Fy� ����$ QtfڅRWœA�Iqq��EΕ8��� O}8.g,i6g \s5 Nͤ*OBq1onPDۮh;2#9 ;*8\:NK桐�;AҀ@IC_:X\fx VN4pA$@=Jh�ƍ����.{�sv u`ۅ>kV D]oҀ1eJ�` m_qфsx]~4#7E � 8�o )Y@L`)wvPLu;JؠZϿ�|el7%'08Eg]Ij/̗30&j��H �� IS<^&v%M!ҥ"0+q��NF �h��/K�.7��,S$i &c Msku5�<`@\b1�r;DmO���hL��tg)d&cldE��jDiҌH16Ӥ8e߹_LS `����+3Ƭݠ!=:���.IQ V;^An&l}~EO<)kD=1mc`.% $?RђS^13Yӣ~Q'U���Z ��Dو:�l ;fE4ar!1xJ=H�� V97�K`�/rgbxL_N燀2]t/�CxGkk/^eJE΅lT[3!wc�o�_0܀@lQ"mQ;U�3,M[㡉-G٫ތPlyx�#���MJ!aݜH 䕰7#`"g/^P5%�,E倄flԐyrrFc+d1l],x<xQ�h2i%ϛCK̠T`K`H|ܽ(���xs}~w�.@ؚFQV�c�o�<����H~Z1�U�8e;ΡKVFPx1 zG+}.-Qۀ&N#X$���x:w�d}67+ .pC0\U٭Q"@gE������Ǣډ[l7�-�>���R92T{EPHt��cF>��:`U ����] B+Z9 D4Զ }/{Ȧ2:H8:iџP"h�W.k]xӦIbY$XX ?xR<l:DV����u��'*(4{NFz$z3[t{(kuׯًwE͵<UvGF)UbtG�RM7?ǎQ �`kQ(rMx :P{~U@闲�Tf����̞�b~8oiF%�\[Nz����/ ��b;J45�D�1�M+ ���ùT) yt �F/IhT5O׶wʔZ��ޚU$ji]O? ���Yq%�2ar /<t �������� ���Gt Ы9zx^�0|W ��)8��4��[vNP���"����c�DT�O\�iV�`}i ,�BPA}z�&|����p ��0>�ɹ!gn'WV�lJ�<���� �9�� \]�p������������Y:�� *Cñ��d�pqb���$�!K�#I����p��������c��D'3��$�������Lx� ��(d:S����� s�}7[2J��������C��������9 kɴSͭ2ȋq̗2�N6 hLn=� �������Y88eIF �N_gL1�Ptuiv g^Z��"ăf �xp����_��!><՟dxU����� GK���\��+6V"匥<o!rm %yhȕo@e;m\\yѸ)ޚTU�e&ģ tt1GKhBxSd#v\.ߟseuH!2@s%iLMYyC4/5eрK 9M;㠡:�uň G>+VUa7V#t4\~wwpzLeE8 M E#1ƅ(^@nh)Tԧ�)Jօ6!o~f���0v8i{ iO <Ja+`R+:eRnܾ\^ m,E)W �%_X+djXbs:H�HR���2'0p^سT/ ~9zeoPf>RQ*,Jbb0�P/bp$^D���r w'CsFHz} }�o.pCP%l������D!gB �� (��`^Nrz3TLh��H����8 �} l>&&$6ޢ< �QN}uPD '� 6\>'JXA ~(vU+WYmQj؆)Wz}j�R�a���$�qEMw8�:Fڅ;� W���E8Cd9#ǃK��K(y��<$��@xLmP�Z }mLTc^���� �^z),/��s���: Mt��� ��hπjM�� x73R3�u��������HԬUj�pS.vSeVt����kzBe7co�C;�eߐ�k8$�LR@Y`N�P0y 5}PA�n�Cx?P��KfXōWY`h{汀h���x0Ϣ���7*�n��E��\�,U/*���:5{/~Q,x? �<XB���-r@UpDl������n~hྌ 5O4�ZIYR#uv"�Kd s<fxik2N) ĘVz��PW̎�"%=���iCC)K�wH6z>��@kR��G| #h ww8CnE/:Q"4$8�. |oQ⫙(3<A*=AMwDpފd�_Lh| @���wqav8���Pr$&S/e�Omp]ۙ?"t#,l�o=2鞴/ݸ?_NJ;6~۝h�?x ��lc:NT ���:-,��< A` ���;��05 G͞��Y@9���bVeV�R4y`�,Wb7k5P8ݎi§JWc.Vh":JN �Y�қ��C`�� N;Ҩ|U w~drd6fO����NBC�j]%D;'? ����P#�������wggM�|"sNO (B0* Hg+\Ŝ<�Ϸv=B �30.ATӕ�' ����h�9*J�{{��_�������/85&wQի!Nl"f".dPA;y5>-zUVViIdEvb ��<���� �,Aq1Ud m-�������.�����ν�$&�b �im���8|ǭD<T����� �c\٘\?X���{)x �L!*����>߯+��:X�KP�PE;nkPn��)dkp g]�B3��&ZE)E'E��e$s�d봇VIo�B/���xy<.,MUs�pڎ�U]xvE`jƎx]�<5#b.7{�X1ۅN[�_7?MϢj7@l;^dGX7+e$_ q"$�F0 ĸ�|I?�QYPHU#�νP%�õ�[& [�p@���K7u{DrU�][g1UF9|ԝ� c,f"oܤ_GMWBN7Zt>gl9v/��Tr����S����\����C ���))��.]@^ �< ��&(oi ���}Nҫ itnW~(G4OƠF=Q"+E��� `�w,\|Th��%S�y�X$Wk^5u%b=�xqb*�!^s$+r�@^, ބP.E?/-}wS\YGدGW&u<<��LRm*.��^*oB��1IXJl@ �@8UX3u&'mPd{Drkر2>1<yne+C`ף�C}V} bo'=x!�� s��>agc�HHL��>NBdd`@ջZ0y؂qi< tx#.`+}ˉ4\:4ec�#iT<W@"A9^uw�di.�-km/S $*RMx�����]xt.�NmFgʽlܚ B1uުO]B񖟮�& ޣUtӝPb`ދcH^t\�)B���@��ZYB�4h ��[ AE�(sYBT;p�ԝE��W1ٷpe6@{?�VVZ[đ�Ň*��O_VNW��,&!L"%S���5m����0����"3� ��.'K�>fe]ԙB73q =^�5n��rSd8-NJ ~4LN����@b�T$��h7�c)w;g%Fz7v{)[p,p���9O��pW}7���+L%r+ [�6Pҍ�cr6'�45eP2}17,Ͷ`�,v ��Tw_iFHNH{�2em �pȶKY%a_&$�]83:[1 d9Hgݩh � ^}2V)쐅db:}c�}^;y>{xmU(Im�Ԉr(��  �.$53/ `���xZ f�, zd#>Zot}0 kkޚS���)+�_kUEU�&2�[mB{R9>@��U�%3=OTtZj!)t$đGcA>9ōoY헣22W_Q3!zzg@o~9pX $eX�! $%e.t󭣊Q`ϵP`ldFq!3hI&L,k7��-:F*-���<����S�Sf#��(Mn ov?o.,֘m&DӇ1 cr ps5=478,[X]5q152s3؍5-o�D& Mr��x�� lϞ>So0 oZM <�i.}N1n� 0����* |iB>�ַՍV%s$Ut!�)vے'Ȃ>ָ&�Z|՗6.mg}¬{k���<[4X@ =<[[btZIb��%l.����6��0\'{@����?/Dy5K •��;W�{ .n`|WJ#[ )SI h_HJzRK��ѦLmja|m���ܰ���������������EF O�x,a���F'�tYNS���|4"+C�����������ԚޚO��f { ����Y<T?lֳXq# R�k0pM>*>@� ��H��'�pj�#3��gF*3/$(" ������q��N31�9]���8p���������G[}����������3-6_rΌ~E0#} 耟x�v$ ����˴���\�BS3l@2K�ߵV�����������������2����Gd#Gş@O�w# B\H|gⒿxDWV蔘dx��4f"�� 6�}����r��^>���8pJ�;[�e_�`Ǹɭ&.�EiUI_j00sik&uϰqy4f$Dj0�;}`>h5ۘ,do`)k$$z wͶ������_:Z<PL��9_p.(DX>lJ~��B$����/<{4@xEaLza)Oʼn.@+4U-O@pg $��з���� ����%G��4Ct:9=dm-Y)_��uaHud��4526HX2Nm q}r#&[lD ?·grM$AVBI:6qxO\IpfeRd|E|z.׫q��Z_7L85Ҧ��y�B{ \!JG1yo7{ HL~ sP<ld S91Z��`bE�03��|p7=P)@]ԧs3K*9镛e!&\tcKTO0'��+&gNKKM 7nK۾�U,zoQm�pA���fj5,$_n�g@.U* ΄1#뎷����(4�������cQKQS}jh N�d hc��0CyQ &8ܽWSrG //d?_W�$-  h`ㆨ��������7��������]Km 'A܅FyaULud(�3aig�61W.x|Zn�d)PS^=g@̀|W��H/�uK�kBjㇼ ^NwF:#_{/�{9̬�lg+FlEjdX<����]4Q3 l=i[]l0JKKvB/S6A[U&y,`yR *Lo Uu`| jB_�?4/M^L��. f(z/~@*2SN 䔲αvF1ݨnڷe;OQqezhlU5^O,<ŌC~�<֙`: C@@`Tc$ x`׳p�M=CB^a:8mMI�l1\of EEjz |0]͔OrخXd$"wY0XS;$5y *VlC'*:@̦<��[-!]2Tא uR2 4,[B̴%oa-_cAK-}?ہ@9��7j.w5-g��Yc)T:<A5BB< /tD�]D,t̪\da<x._ `<�4zb8b���� }FZNj4����whgb TZ:Ridm2ؑ`prhq�o a%n:<�KAsnw��Zg^ vn,oS)|ӑU(������!ˣ`�0iBwKv^JQA}=R]?���������an�O (� d��^կۿAa�3TFUf}q^pun`"D}^\,9wQ r��{��dK1a><ho~U {8.li[��NxLf\~ZNӨm+O0% F�GD[vTt{Dk���� �3}TRm@ wldå��@_-� Hy�4������Yx�"/>%��7Vh0]�L5UoP 0y̦����^rX: @do4��Rs^|;qeXv1&d�����#JPˎМ𵹀W\۫6�>S���������m�# Y����� ؒ}^O�Ģ = iPP1̲8ga�FNإ}J@>`.<a�S�A ����Ē�������m+7�K$zڹ�2�!-2�?T!d�ԫN!@+0Z`,\ ����R���h���� ��z$[:ׁ�|ĥbe-o���� ��,t0��SF��ܔ����1�|F潦?l���4rp �|0N�\B!(Hn K4Σ����9$BH &�����ԯ ����\0�����������t}~svco:b[5ʳ?A/~2`c� �g)�'h<m� L,.7���������������kR�|s����L/9J �����8ݎ}@dQwB,"_8=ʄ/'`Z3w\�!"NyI9 r}x���7]5f?6)T5~:DL��+KIh�c%'IgnO/H `zhQbw��:f��FT؎nY;- ���`|ɭ�*4*�efiBq]D Ec:��<ÃھX}B$A}98aCp��|O��� B  Hei׳.m\ț9c�_%ipJY $?p@Y!OGIyQom|$Źn$g**r�)a:A�!n!��;iU&ܒj*.v ja.h6 �n�H ]��� ;�q4��'�0a����@A�$W���� �?P􈛌w `ZS'He&�JO�({�>]�XH[lIVsfc;@��ҷ*[HP(p(4xgC�ILqэkaxkK3D#: ęV~Ӎƚ|��xl �L]f<g`spJI|^<y@Ho2 =TD#Ԣq0!hǢ[/s���Hٺ[ &ޙ����UN& –8����y�*yg>'iS Yx)�Bsz/UudI ؀(��uS/-�JyMfWS[_da#cx_ZEe'+]]eNh7ҡ}? Gt)C���d}a;X ۈ ���f K8.SdP)53ūO��{`1CS��GAx-���pI>,DjCpac��)]=����kw+8`!ڋb=>_+�$Oʠ�f x.,�UST!u�HgoCa1x$Ӭ \WK@cU#�`ttC N�k%�HIJ-M^!\�}^���e"��ND�@zN4|Xr\ d,DXڮU#kL���=���|fr��������V �s۳~yDx+OH0�e���#a�6!``<Ā>v����y����:A\�$� 8:;œH@ß<����7��t:J a� Ѯ!$@oEIL /l M͝>�|_q2gxϵzZ|R��>ftL/3>E�BMwJԥ^mN�PUD���eLDSq�J#k,���� n(%KѤ<.j��ѾeC?G03M��>^jVTS1u:%�XBQdtIUZt���%`-QX7 M-E,+SIb۷/cDwobu]5nǿr=���(qa",A04`ҡ]A>�g [uw@%L{lS9B=>L�� P ##x�o^B�/W? "M`(G��!�|N]p6}5}y0su1_u��V����BɊ��1Ó{v�;� BJ<2 :pC+^kW|rMb(( h1I $ ��BR=A?n4]�70 x\3V/5b=vq-i $�a8e\��;�r<,L4(��  �]'�˜ƪ9<u@0\EcNXR6m�6(UM3��̇s�ʭv.Ѻ� p7X������������� |gS cGpwLr v�.�� ,zQB|�l ^T��pFW } ��8f ����Z��qQv 8KԢ2�x.%� &xZkpN討]��V�HQ���D���y|w&;\�����2���V}j�A=ʶ���@m�Û*YB* ���$����cm ����H��Mc��� EҼ=B�[X�����T�� 7��[F%���ꑶ L(>�cwh#h �P�فk����|f[9��R7 ���[=1�$rG xŰ'NI rP2I}j(7,��4ƼfX7L{@3���|3��p���ޕ3i���>='<{mϱ��gvPy+vIbk Dآk �8�Ch �KeNF^9��N����p@loJ{3W(3m8qD; `ք_|T G&@=xi:RL 0���`\��b%h9X D!3<rL/Dpj�Ujt΁I VoxjhdatŻ7tn5\A.B(�=h�ƺ *q"yw,M +bt#,شd¦cdW8n&]"4\H7I>U5 _9ƈ o7W�W>E3"h\�% ?�䵙e/6�4 ʼAbˈq�4�0_*WXq/J'~u/\6 e_OzyqQpjiJ<v0L�a& B /;9\d4D Iוֹ0�~:Q]2uh:.Ydfc7v^5 j/C-SBk��wĹ5��g8�.\;:_��lݾ&zm%e%FM�,,@���D��%�t8d�Qr�XJ HPBĶ?>L9x7#�t;�7UQh|@1��Ch?VP9pB�*�v�iCk &a`n~o*"��& +�>P���T����DXދG����t����2��(�>":P�/](h�D ʍ���~��Y��p@<��I 3�Dx1OA l404dyfooW MDI ZM�lA̚<`@"�;/+P#c�[y3J-Txf+-$BA1]E,�3\����dcjdDDd��tJ+ k4$H�3@(����������������O(����� i\Xz�%�tԥ��l�,G~[�T?�������,E0 (ck| [~Y��hV:t��(�-n|A coڙ�LD eܤanzL@n/m+#=��U"�\}�(=��������1����2UB ��Pj{1��c d+|2 ������#uusES$Ti0��`��� F\E@NE@B{j\=0!AiRz O(R+~Rj��L��MǺDrY4&�y_}na8�KW]lX&3W�P?L0_������dUZdD"@R������������$v\�������G~��8:ߪL T/-ԐϱM8;�=ywP�*Z���� t��� +�TWLW)(%[H6�4a<����~�RG� ,S܆pLߪf8�>P0ѭmT9Hڃ��D/n}˜liv7Wyg&D#bKGp'T}��Zl*EL50d$k_wn��4M���"A�\ ZPu�X4���}9pHٺWŽE�B HaTqh TC.`@2 Az3^[NEJy)ιA��X�){u���m��(TrBMԩyhĆ0 B΅&)ӎ^ndpbRM]5\5eC�zOn" &}#/G\H_2p'ƚ^;"s(DAxt18ʚ+��\<B8;U#+e0 W��us#��{P�H5��j7?16!;+"qgz9i:�,����w"��@e ��<n4]՝�<“fwwMo#���PsZF9xm)կijŭ`T-Jee7(xr!㋪@ӏH��A̡BU ɓm7j~� />��&%I���`J]��T�$Y��d8�[Y.1Z J5l#���AsF)"K%/Ys Ń!v���sU`(Odmk9Z<  #F����96`>2JT*:o7n�s��#���1Yw@80[AL3qCSQOF["Zȸ~g ˩*"YtC8H3[Z\^K()'<2 !$R샘_�V_eN`gL!fs` �1��-uLuth}|�4J��0���F` 0 lV \f|�0K5@�]�Eq>ra1g. B.jXu n^:Ε���|f�N9f- H lX[scN|F% rgGbc m tx- �h"���`��he$�l`; EZ~zb���W5�9~Ķt`Lvm�L:o ���F�%]&49dx"n,돎[B)3��8&PF=P9ˢ�Crm���\gYwøt*�k$/,QB�P<t91cJ׆jmIlr=RI$�~-kRz��ر����& �x @;i>}Eᬯ,a]K{G^I%AqژA�gxj{&/P 1 n������$Ԣ:"� 7�^ �D]_ ��|cX�b[X�jV1o����@ "������\3LG�@gV2_r:.afo0Ū ~=c G�xLܻ *���FŴv'WjtFfmE9\Icشj�Z-DaQ/~P==Kk}\qyYq7B񤍗&7,ʃt&Ef9ڻ8/Mp�ݼ$sĠBȞ�LI2׼w)N ~To2“j4$!E�\9���un4>� չ��R��ri��������p}-�qW t��84D\ԑhLDIIFXts.(AiѶ%�0U���-ٺt4Ϭ9ZB��ӝpt9U=$>`3;� )x~����1/��xO0<��P_�grir��l@=� @~/*W %-cyu,Hp__0t,ex ���-1$ǝ YR9�d;qT"X.wMwZZS|� � !Zڇ嘄J]a[)! Qa<.3zr0=[bMHwj^9+mq£r9DC1p$Eb �$ΤnDIߦNBVYZED ���� ���S5ojQN9A���(L ���D��U�yADHrv{g�k����qq IJ\Gg6Q,(O�!k4|>!o" VmO^{< ZtD[ W�8" _ 7v Lz&��@�udٝ��������F'��@R�ؕ��2*z���ٌ�`z����@N<T�,iOut�& ���@];����<,~�#P=�\׳�< ���� 0>��)���u;ࣜb${33o ��dX����o5 ����pqə'���������������38}�W|$��,BC�T��ݍV|��<����Ć �������� ���lKE��� ߶������>S�N? uv ��Tz\o���-O $ixd����L���� ������#<k)@0gBW.a]3h(q*M[~dU#����P����X��Q!�of&끀8c�&�c$v@X޸6#�d-;�@U{G(�;q'W����I��4\gBo{Yc�����\�����&uy?n"XK*L<3nN��$�gxcGbRӗʩP ;x{4�i9?-jdT.2?WeIGs (&6;dK7��In" 6Q^K<UmGXͧ:vBbp J|>0W1v$2P!?Аauoh6tCTG"U\,#8:u/##.x9Քq3tdݨM8Z~\5ra$b0>pj ymJḯé\v 1%Cl|c;.Vca_r0!L֡ {��LE���ۂp@?nùN l{,^۪֋&�9*_u [ , C,;W% ?����?K.[roku){-o(ph#HPDS\������hN 1!�� �< ;iv%G@/pL���&[�Ilueb1OdJ.me2Pt?2ޫ L�hP*Fv';j3 *pm5>(p�q �{�\ԯ+�= 8M@X$_�lL<<�gj q?p5<��D2;b� `�8ڂ!rKZ �����s<@��o@~ �&W����ly��15z;��iU�������,^�,kohJ!͠pJ ������hyQ#;�#K�B Ai� 'u1;D@5$zN\(���0T)wC.']v��XVm@fŏR�x;�=a`3O#�����=M�3KC!8�3���-q� ��Tf#�����Pj � sNXh�Q/ix���V"de���H�����l%HB"]m}f}WY^do愫F ��P>n48e_�ܻU 8Vu>_(; :P2"% R = ��,z��7b Ԓ������νZ! .%~6|��7,2�K!_vUU�w R�(]bp| d}K6-B3==)�814��ưPaF���PI{)A^5���(;�[531@6 <D4[\sKqe].K1KpFڼdr m]R"aE(Fۘ]D�%@nlj�DP|'���h��Hޮ7`�%q:����3g��U�g-րŨ,~I(F:y���d8 ��knwPQ G�'HlIOzZqh@G"&<�����3: �<SdRf�pH}YA=̀l ߂XS ���W��2�'<?y)��i����,����@ox��&:pcP�]da xv&.(@y�{'�KԨ&ݫxŪ?tL$��1�s���������P�"h˝<0 btVM܁Bu4u$*c<Hbv(EK�uJ ����XA���W;I>([^1�Ӿ*>��i��������p��������fc�n8 ~3���ޣX��8T��������X/��wy:����^:\6ia ���(>Y��h-<���`? ��ԕtL�7΄e��� !��W0igi!�H�q��e�����~n�Apcb]|�� VB��s=^hX2(@0 d4@ X0;j,|,��̓ՄY�GsȤ4_{5 \,@8�$)(1,6U%sytFx2Z_p����@oՌ2SlZRzCK,��]D_����E%p{V �#��=8�J}(�pGwa1=~� dǫ��W}HMj1 r:ą'NkX\E���%��.���� ����8��������1��#58 mUx v���W�D]��P_bbTzjd<OS7vnï:���_S��Pk",W#WD{{ Wgh,` lIp`+5#D<ۯ)6FS$wHD �|g]`;�Ƚ Facb?̴+KO>yQ#$rlͭy^T^'F$|<*?6րc��� ��<>Y_AB{BR`��}Sc}J��>U.�,3}O,�"H!:��Yw ihU2vI���V��Z2\-���>)`y4g|hosһ\u9:ߵ!pR\7p\f/ o>gk"> Q=�y# @]HY�7;dn41lb|^F[,6i������o^L/ca<��Zd.3Ȝ츝+a60LzNBcEYņ1sW|:0z1h2^(e6I5|lU83WϢ�� ���kW7W%�� dmx,H;">גj^2}('n7�8,6[/Kh ǧp]./���,ZK�p�Y �Thy {\��(3M;��i�����ZCB�������k{�hϠ�츣-f"*;*㥳҇A{7K='iQӹ.=]\ 6z ��y( ����� J3ugw�D >um_[SzASCNc\�Mu���[#h!�9ahP���ܣKqڴpw8;wOu_�h̘Gm4�}*ԤL*DcVK# �?�4NP.X��񡕷ߡSkYBĸ�@yb:PO0t;QOl � �C)xv_c0+W N:$�a��zR+ V60q���@MJ{41u`KM�*縝!�������btejok��,~�DA!Guo�C0$vg?zH679a!z���0Ɛ��7�j���{y䠮Wݫ/b,�� a������� љflV*�~̝441Î,i{ iA{{}f_(VȻ~3E:,H3uVO> a\20��H$ K z2"8bI28dLG@8WA7UD3L2]�IȀZ& @����&��<ZlJ�dJ{ nP O)uMt4he-3 K(9J.�s�<w(M5S~$x.6S!'HnS JPz+1Ww5vT t�Ik!); ogze1�LLMO(7o��^����?4�<#$X^Z0Q �Hܫݤq7�phJZ+Qc̏ohU? inxdxV8+F��x�)>lp-2.J||;\=���������c��<����a7Wʮc4-B��j�"R�ν�xYxdp<#N0`Pb�GITj�T"C �V/~ʟk0^u8�6[0:nE��������"�P:~뛫wm%��P^:��HW,������0��v��Pa'cKn�8)Tx�sOW̧yn1ٕNf`伊 H�x/t0U���Ӕ2F�5XRǁ�������QrFY0j:�S33���4u����f��c�4��������cv�%nDQYk>EZA� t�#sG��J?��pUg�7& ���O%a��Ff[˒��������������������d>D��Ͳ7a]%�T/Hh& y�i*K#Ut!,i��|厉����ȥ�8Q������_�����X�8 ��������=��/Czc(|hɮbcr)f4 H+O*(ּi���NBcEg̀#�>Dmz ZZ��; �X �X~*�`y=x $1Q0F'Ys}n\ �ȟr ��K9c�� Xpqھ;Tp]cU@ G40VxQEy-Z a^�O��L���}^�� <d1!�ń���H{vD�� YRh,w ^BY0�9!EϠLܒ1Kq?t]}I ZIEahkd=L 3SS��ܦ(e5��X�5Z�K ��?%E�n����x �M\xVpK0;o9]`-=L#^(]⢽f�|I����q%2��`T N)ǝhIHCV2)�&i[e~1퇜PfZs*M yR׀ehe;yqex׀i����Ȋ��#ʦ9wk[)-wΛ0���^����<E����t��o.;��3i~��l,ԓgX%p@?a zZLN/DNI7��lD%ɩ4�\'���� ���` ���� ��Z(|n%۟_Fcތ�����aCK۱ �vthZ%z,�Ɨ:P�p��DLB5�O<Y��o^a>kz%�BpX}ζ8څ6(Xy¤ �~A˴ ��lKT/�$kڭanM5ʙwFqkB f#hd9B766>�i>e. 5{`=B|L��8{J`Eh)AhM- ,LF ȦsOUT̸C-xa^i��Z?'2$Bn<ba*vY!q@gNMg2J��fIIرR��Wߨn$FX,RҘ6Rai<``Mbj\mAMO��0H +nY g=ݺBt (~�G?KX|u[F7î/ '�H12\󔍫ޘZ�Uz@o?)8#t8bd�X4ft4a!cQV;e@.Mx$!� jq޿P}.�lW?9q|:*31u(465@D! e#DFUl ����bȀ�����I9oftΔ0#I]̮1"N̦ �hy�&nxPWz3`msx$}76pBF#;�0}7mS�P�������f�EL}dkͤ2cg> n�K���������D ��x:#@ (D"+3Rt�&a`Y/ (��;r��sCQ��Di. CE7[wlo$:p ?D`N'vA`PC,OPP(��������7Ȝ –?i_l4`�RH}<PE˒;Bί j��� ���� �>cУ��KVL2&:(1� "f iQ G+41m'+*7} WL09C��� ��||%^p쵝6 {5KOO5L�,��������{Ki��}=���lr���Zn̙ �9mx@K���̓�,lNJ-E������������ g%!pܖF_;Z�wĈ�S�/]PO*Ɓ��\]j�~Ħ��������}[eIeT|_a*|fG@L 捰`<1$ T7ac���D����#g.e|t`��|J�9y$0_�H�l'���*z��H"~�zZQ�0�P���� }����z%����������l.v 02 PLd{n v(���ƕO`>W������������������MĊo:�N���EcNۄ-l��Ĕ\?D���bdzФ,]&��/T1oFIxwx#�Ĉ9{,n���<([ ��_3p ex�6 $@u op�3j=2 eKBP-<c@O~>S ���k/�K-83A\CY��� N�#H����T69¦FK{۱XHv�}Ag_ZWEC\ nGD߁ ,<< E-��C�ۭTv⻎MS^LH�����āM?7 �zӱgWQs%vnPD[r}*sv_,!ȶc+py5N  �Ur���1e\�^K��,cwHi9Pg6�,A70O'f+%肐(2>G�фs�ź����� �@aa��� LY=gɒnϲZd"Q:zjllնrwu�Y >LYV�\59p�$GtD�0I8rؐ ߲9bXZgg���1HT ���}+ ��Jq+H`D}ηV\zs){L8extOB{4!phW`F(~X_V qt%{so� S(Y$o@,Z"�` �~m[xU��������l�3[�[�E%:_׶o A*��`[Gg��Tq_1 !/puJd0NKRpb9IF�� H pr ���-�,�g���G]b5asp7~5A��� ID��phhKRLsDŽzit^ET]Y ǎG\)hhG\gx&H,;9lw(l};1}+;V�,ڵ2I��|E֝12>͕;1%݋p8 � .U^<*A|;(5gD*5Z$ ,c������� \0/��� 5a"VMA_m��� x[`sh�p����e���\g�������uN6$iZ�{+�2&n��/̈́niU��������P'j6���,9O�_ާ)C0���x����XJ _ ;fL^|s $ M "6␨y(�hAc舰@",mHy4 Ca��J:?\qdO,1P�d19Aɻo�8ɦ ���>�[EZ$N�7! ��ۺo����DO{i_`vaqJn r7���CGCe&(�uSF �>RO t= 7RH�*$N��{9#*g�bq��|0w�r�:wS<kup4<)d���L*]*(w|D qm qE` |_d�|,"��yD�Xw�ݨd=M6�Ld|e�d ԩ?6c$T{l"4Y: /:v~��(������șU���vF�D9���SgޟBZtL<&C<8 ifu ҢLf_�=>y4) ی2~��?qNI/*~BJ;Q)T>�:(G,+ <ҷW��LMdz���C Xc%8�������`oL��`րzҟ �|*K%,�5��V��iKƎ ��X'̠ �6(v<vpPa�� �MuYI}s��$��������<���a�`w$�A!e]�%�ۥa ��<&:Cr��= _#_��lȑ#��]����Y,tX ֣́fo3�8L7gNA���@�&���U���`Y^$~ܜbp F�8����u8g4{[_$�҉~O44Ud׻JxNq�A����@������wW�nt--8R!ᡶ<?ܒ1p��J���-��tB����!sW0FȕXc8�`C�� }����S}f��| \���� �4f%��q7 5e&��yd�����,ǃ,��0! 1���>8.�� n����@ �rlN��B �@v�LqI^b47/ncX>!edh �3G ��xH@ �bHOFPS5��rE������� LSxj{~O;ph$PadO#Lјm:6�x���"R@H%{~+���"A ABmJצ ~D 3Chv;<g&RtNR�pZE|iʁ ;VK.E%Gl<_<d ���L\�t[yW_u҅2gg4ju&0�g-i%-m�@dAjKa]{+u)Ǒ5 0(XόTRk͹T79=�چjYdӕ�Réo%�QmWaO��(8%RE}%;XI5gz�j~ȝ* 4|m���yPǩ{KBLY?WPW =#J-#ctw`8dpeu;�vI YLVa\H"~2, ǩVI oI'=k f�f�.7��bHt1Bh�\Ks�\ h�&y(wHuF x+Y�)ҥS_b&9MA��d<#L%��&�#"rʹMȒj*|B 5����G36J_1;�ڈqTǚt �ȐK[ �탗~[.��x+%ë�C|7,c�ַ~��֕��0!���� ����t���� ���/`!�� `�ȝ�hϝ9p��� m&N����@LhV�]��XaԈQ" �U]dַ,TL1dB LW( ^-0 �KgxۥٯX]S6w| /Zl$wX FPf ڪ48q ��@Vӝz>9b و&Ex?�īFm������������ ��"�(@��������W׶4o_(xTO,)��<?�g �8,u���;����# ��\f T!/��~H4v����XWE&Y1������~�uad�>G7:g�lp:Ы"1&�F $zcx������������qW]��8̮*]�Ul>-T}�Ģ���ӱ}$��l���?OL+cu�qil 3.!7Kf}�H/����{F�vƶ`z53-Yv~LBEl=.c?ٙxb8}=md��ֹ}��ʏHYg �פJ{`0΃#kɒ+�\} ��% e~$ ,���Њ �� c1GP& L ����������\3��8;�0K5���0Thk lx\Q6K`fh˜?f*[Al}9d,/���9O6���,���08��c5ep4Yay�����؉T0�`��x�(;Ïwē�<�lԛ�� @v]zc�xL$*<O0*ME2kJ!���q:D5ɡR��!ЎϺn���Z?k@T[Rr^Oz�PS���� : ?! 4d��) br�IBΨ(Þjt4I4تӹzr&O1� kE փ3DL���� ���xgՆc$~qkR{x�0�g˛/IS%@� !B�B?�3'�zUD=8K.[^-%l_0 %d dcBq<dDDWwS6΁#p(te;TklFq$Hd[n8m�xx��U�-f��vy�ÛiM ųC5T/?ͦQ,j2:_ �j�������_F��</t�`MU"J`"d68 rqcK;�`Xq+;<I8���5b-h}29GT Y!��l����L;^ {V+`��'��<XP��T.w'm����XV������˽._4(n׬l`F��� [puqΜ7��M|��瀥=�GEW"uzkR��S��p"�K,IjxLJ?C|U"����[����������x}��ywphLmi @X8,3*)YM8j?]"`?^[\=>(:!M#NDBYTj>:h`1ĤZ� t).3bI8A i~�8< wHS,O�#��@����\J$@^H#lN,�K����A@���|tɼmqH ^Y&h ^_ٍ,֟J-ŠwM0u)<zT<P`JI!ťExbw SnA٥0*4eFH�朹^3kȽ,j ���+�i)xxE7�9d U-niFC,ff�'L��T >$��)4K<kMZeeiS`CMyu#n/e��e 7\Q����7K7!%U�meQ�Xh7!j/`2*Z+ڙ�He3ML�ɺx1H٬.�+���ey&Ng]fPъ.U#hy  ΂ 30dzs/0= u 0RuOX ׭.�����HRf�b����U.�ao�~1FN��#=��(�:)���� ����ƥ4 �r[_f��1p٧X1tRl!ԛ�X���W���񤌾i<ך.М3y$tҡ;ԗYڡ kcsEGq)^-JEZV7 x[#9_Ȅ\tTVB?IO?Bv%�$HKxjD�P|'o�C)fw=fb W�'a��� 06͠qc2=v-�hk���l:(ny�J�� -L::B}A MB౶**5@e����L0dC^pj���2 Gmu *o &yfZ;!=2q[����*eKi3�hY$����2B:�y=w y I�1\���?_�=�| @~sr%KMux�t cYZ n#=x<OX6���`'~9g584+NC]ӬQ/Bܺ�-4�61>ǐ֓RM˨YW4� jdB33k|:ǘ4vr\ܞb:�H$K:$9XJi0ѻ` @yO�~x=f�$ȲK8����ps:3Ii{���V3����S���t�n�RiEM$W2ѱL�����|37�PkBX-\C��@958>ip0\;mӝq'-/-ϟ$!ΐTXn_|im xu $|�BU=���|F,�/-�p%=���Y�,iT���J7�8 `��Dd1SU4� ��0�' ���,%Aa�.&Zl,M��?�@u'�b����g���8w�(+ _I7ٟ܀p�S����\\����r��r������������ T��WYZ7~��L.f����0�1��Dh����'����������.V��9������Q,>v2�Fb��[n�@ ���QPxUPw, �,���� ���3c@8h\i>KJ_q!lQ'��{JY /1 �_f~ �Mo5RLm��XjGٌ �J­@dk!= 㣣O����8To�; `dTV]�����Iv��榇"M`3���������+ &,' Z])mUz>Akz��t ����U���OB]/qR����GG-nw? �~W,g/@���TSVZg*�aG>5# Lܑ~ � �{ 4 Y}J6B@ |_Y&,9X�0[3oQ/ W:VַFI.Ii:sZ~W崑%3v#}KǕb]VQ7}+���~(ma>0>OLj-.»8T;y? NV% hjI!j#k q2mZ;����8��8K3W_>ݻ<T8Ij:c�U[M�:>Yհռe㸶.tҖb{&'�C,���^Ymد;>H��y9յ%`�j������\3�0���0r/ͤCIqMx#4jŘ���r18mᐢOla ub%S^nk$670h6�OQv@?QU+;X>Hh�mäp�����$\ |_l7B0��"P�`:lQ-k~5LU_͑j��p�� wD,뗝sF֬8���?p[gG��XYi se9L����'�DS79��Ц9���Q����hġ#஛BDh[J�l{ԭ ~k`�M}/� )�%9I�|(hl?#� ��N^�P^W=Cx ��N|U6KGp1��p7,a�BQUqoz`]&9ۯ$S��cM��uxl���2K"S�M�\Fm���h}��N+VIp'!n[@t*�s��Q�m�B����"3�q"+sΡ8#8'#faXj ���Ld|] u$4-|^X'lwe�ֿ=WW)}8�� S+tiS���!W t:HD5QK.D%�UHA��� e��5acnn�(�ib<Qڥ��oa �p?|ť<ʭL�NBݪ<_qj _h�݃5����{/h<����kUȒ4p X ��< �� �0kNhcVJCd˧��ݯd07OoIY8w[$r X2t`ߑ|C% ��O8h:Y$U@��Pz<%���΀J�)��� FiP��tFsz?=K��VP���3*c5_J ԘCOg4N\Ky 8U$*F@ !sr��� p���a2�)(�FD(n[��K֎s��ڻ`�x���P2S74f*ɔ�����w)�����|ܒPIOpjGK/S0b~Zj��&Lx�sػ\quZC �s�T4$J�x���$G�������Jft7h >ؚ 㮀v?sϐ!Ҍ~evYV))կ%n@fz-\ʍ\�s)C{���JiNYTJ�hRU9A p��0w������������S<ў |s��$��P.`3��C���It)}p5ea3/8;����=�P$dt���l +�cZd���,m��~:��CpPnӭ����X�� ; *�\�lnxZ��$��������mDUQY��ܿ;P�Tص��'o^}1->�4ؙc5?s+x0p8u%U^iԞ%@.W]5\srN8ED]n.(;2,M@4]Ƒ. S`jӽ'4k!`=JE[3W�UhBR2cz����w�$T.�(α'$��� ���x0����Ԫ��NU@pdo'�|@#RHc875*]{h��8 ���7��������1����������������u<;;} @��vJ����g�;@�|/�=3(ڼP¶(\wZ_+3g`/@$R3� S4 _eb&|�'{1F+HQ)'Td�SHn3*vmKˍb̨Q& ESAbPwۓ-<eaJh?\Ke6m�jYI�y` `qi�`���M >M�no:~��|ahYx�c41� `ic&m�����}[Cv\%; H^ :gR{�����p$� Hț��.ب63ci&*P =KE/M,^ub8ۯ~aIvM!:4X%Gz]���Gv7m\eß}-ԧ\Jk7pҊ|���~�;DW��²(Mf>;AY晹clnAQ _+nc%9m"zto=Gb%'Ѐāu9Hoh�� 3 ���Fv��$8_* X)�^do%$;(EH 3% χk]|#1�� (����9_Gv-��l3h9 �= RۃA��$R��;����c����D"�����/YXiwEk!V{pN=mQ�]_9Wy{;r[}$P H�,|fQwG���?l�����.� - HEpܠZ3*�fhxi| RDYk"��Xs���$랏i�ʨ 0f lOSQRu*J 7_V`^Jo26Eh8=a(z}Qt*�QyT�Ҏ&8041J7u_'$ XVV׶<D� /M@P]�b� ߡ�KZF.,I߈$#OQ!�0s}(ŗwmKGD=�PQˎ%vt߆a*hdT�������APETAGEX��������������������������Year�2004�������Track�02/10�������Title�Silence�������Genre�Silence �������Artist�piman�jzig�������Album�Quod Libet Test DataAPETAGEX��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/empty.flac���������������������������������������������������������������0000644�0001750�0001750�00000143330�12161032160�017766� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������fLaC���"���y�+ B�zbܷH2ĺJ�,������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Y�k?O?s???????9>?3y?̟>?O????ϟy??ϟ??'<3??O>I??Ny||??�C3'?????????????g|????s?|g?yg????|ϟ???'?'????9????sϟ>?'Oy?4uYl??93??>?ϟ?y3???O?y?????9?93???<<3O???<9ϓ???9?~O??g?~?ϞNO'�Cɟϓsϟ9?g'??|?ϙ?'?3|?'?????<????d????g???ϟ???>yϟ?g?9?<??~?9?I???ϟ?|??Ye?3??>|?gg??>|~s<?3s???''<~???O<??~Og????~yy?????g??O?9??g?ϙ?y???>y?|?�Cs|??N̟?3g???>sg?L??3O?3y???>3ϟ?'33?~||g???O?|g<??6Yb???s~y<??O?ϟ?ϟ?g?????ϟ ?s?s??<?g???|g$3?f?真?�Cy~Iϟ?'?'O<<?'&?O3>g~gg?ϟ?g>sϓ9?L><??g??<~?<?'3??g?XYw??gϟ?|?s??y??2g<s??|>g???????ɟ??s<g?<'?s|y>>|<??3g??ygys?s~~?????$s???y?g<???O3?y??3'??ϟ9?????9?O4Yp9???3s<'?????~<'?yy????g??ϟ????9?O?ɟ??>?9???3?? ?s|???93???????<O?fss??>?~g??'g???~g???3g?3??ϟ??s Yy???s?9ϟϟ9<?|???9??|>~Ϝ?yg?3???f3>??''???|?'????$??'>'?'9??9?9|y'|??|@O?<|??>3s??&~3???????<~r'??s~???'???s3ϟ??ϙ?9?|'?N<??Y~???O??'<?????O???9?????|''~?y???3>????s?????9??93<?|??ϒ?9?@?????3OI????O???&s????ϟy~'?<???<?O?~??<???<?|<3????gYS3y9?'?93??>?ϟ?y3???O?y????????<<3O???<9ϓ???9?~O??�Cg?<3'?9gy?s?~'?y??9y>?>O???3?9?y|'s?<9O?Ϟ|9?~?g?3???zY T?y??<>yIg9<3??>|?gg??>|~s<?3s???''<~?dϟy3?~Og????~yy?????g??O?9??g???~?3????|??'???O???>?'???f??'O>?>s3<?L??3O???s???ɟ???y<????y?9g??s<=Y ]&gO??|ys??g9?>~gO?~???<?<???y?ϟ?????3????9&9I93?g9>?|g<??y~Iϟ?'?'O<<?'&?O3>g~gg??ϟ?>sϓ9?L><??g??<~?<?'&Y Z???y??r??gϟ?|?s??y??2g<s????y??~?'??????ɟ??s<g?<'$9'?󟟟'|???>~?9~y?yO?g?'O<s's????O̓?$??9~?>???|||9??=Y O33y?99ϟy???3s<'?????~<'s???????g??ϟ????9?O?ɟ??>?9??'??'?y??y??9??39gsϟ'??|?ssO<3'??3???yϟd~?yϟ??3???~??O@1Y H?'?????>Ny?<N??~?Oys3?3ϟg???>s?>9?ssy|~???9?s'???~O9????'??|ϟ?|?II?D<<O?<|??>3s??&~3???9??<~r'??s~???'???s3ϟ??ϙ?9*YA???|'???3?sO?s???????9>??s????9<'??$?????ϟy??ϟ??'<3@?????~?|9>s~?9ϟϟs??????3?g?'?????9?????g>s|~|???~sO3kYF?g9?<???~g?<?'y??g?s>|y?>3?'g?OO??3??ϓs?>g?y???'??|<3????gyϟ?|'Oɟϓsϟ9?g'??|?ϙ?'?3|?'???ϟsO'gL?Oy????ϟ???>yϟ?g?9?<??~˛Y???>O??|y??<>yIg9<3??>|?gg??>|~s<?3s??ϟ?'??????dϟy3?~Og????~yy?????g??O?~?g?3??????s|??N̟?3g?'O>?>s3<9?s~??$3y???>3ϟ?'3Y'y3?~<gO??|ys??g9?>~gO?~???<?<??g?????ϟ?????3????9&9@|g9<'?3g???O?3O???'>?<?~?O??ϟgy9??>|?3ϓ?9??>L??93?<?ssY?$3?f?真?O<?y9ss<?<?????̙|?<??d?<????O?<?gOg~?>???'??s?�C~?<?'3??g?ϟN???????f????g?????$s???y?~?93>y?ϟ????$?<??y??Y'?s|y>??9?f~?????'~????'|?'3yy>??ϟ??><?3<'y<~>g?>3|>|?????|???|?fg???|?ssO<?y?g???ϟ|9?OOs??<?Y??ɟ??>?9???3????s?9ϟϟ9<?|???9??|>~?|ϟϟ~'?3??g?<~O???|?'????$??'???<<O?<|??>332g>????9??<~r'??s~???'???sY�?|?II???|'???3?sO?s???????'O??>?s????9<'??$?????ϟy?93ϟ??ϙ?9?|'?N<???????3OI????O???3?g?'|?yO9ϟy~'?<???<?O?~??<?VHY ?????9??93<?|??ϒ?9??瓞|3|?3'??3~ϟϟ?y3???O?y?????9?93???O?~>O?D|~|???~sO3?33O9>?s?9???r??s~rs?rs??'|?'?????<????d????g<>|?Y?9?~|<?g??3?<???'Oϟ????'??ϟL??|???|??~g>|?>s$??????3>I????s~~~~s?|9?~?g?3??????s|???>?'???f??'O>?>s3<9?s~??$3y???>i Y#'~yy?????g??O?9??g?ϙ?y???>y?|?9O|?????????>?'?<>?~?ϟ????'??O@3ϟ?'33?~||g???O?|g<??y~Iϟ?'?'O??3?y?|rg?|?ϟ?>sϓ9?L|Y$33??ɟy??????y??r??gϟ?|?s~s?9?>~y&>|?O??~|?y??~?'??????ɟ??<?ss|?O|9'?󟟟'|???>~?9~y?yO?g??~???O?<??s's????O̓?$??9~?>NY-?s<g?<'?s|y>??9?f~??y332?'????'|?'3yy>?y??3'??ϟ9?????9?ϟ???ϟ?'?ϟ?<O?393???????<O?fss???gs'???>pY*???ϟ?rg&|??Or<?Ϟ?39?g>>??Oys3?3ϟg???>s?>9?ssyOϟ|?????|ϟ??>O9?s?|??O????9??~<?3?????????9???̙ϟ<y~|???>O39???gg3Y?9???ϟ????39???9?????<?9???????9>?3y?̟>?Oϟs???'???s3ϟ??ϙ?9?|'?N<???????3Oϟs??????3?g?'|?yO9ϟy~'?<???<?O?:xY8???>????3?>s9O̜??'?3~gO?y9?'?9??3~ϟ???O?s?g?sLy?????<|@y?'??9??y?y9?????39??<g?<3'?9gy?sg'??>gO?3??9?y|'s?<9SY1??~>O?9?~|<?g??3?<???'Oϟ????'??9ϟ??ϟ|??~g>|?>s$??????3>I??�C>?9ɟϟ??y?yϟ'??>?~?3????|0|??N̟?3g???>sg?L??3O???s???Y6'??s??|ϟ<gy??|ys??ϟ?????~?????ɟ???y<????y?9g??s?ɜy|??'s??~Iϟ?'?'O<<?'&?O3>g~gg?ϟ?g3??>OY ?Oy????d3??ɟy??????y??r??gϟ????|3?~s?9?>~y&>|?O??~|?y??~?'???@?9??>L??93?<?ss|?O|9'?󟟟'|???>~?9~y?<~g???~???O?<??s's????O̓?$??9~TY!9???Oϟg'?~?9'?sg??9~g??9??s 9?f~?????'~?~y??????�C?>???|||9???'??'?y??y??9?|>|?????|???|?fg????????9>3'??3???yY"<?g??ϟ????9?O?ɟ??>?9???3????sϟ??'|sgg3|ϟϟ~'?3??g?<~O???|?�Bg??'g???~g???3g?3??ϟ??s???????????????ϟ?|ɟ??<?y?y#��jUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPTUU*UUUtTUWҪUU]UUURUUU]UU]RꪪuҪWUUUUU]UUUUWUUUUUUwUUtUUjUUUUtUUrҪuUUUUUUURUUUT]UU\uUʾUWʪUUUUrꪪUU]U)URRUUUUU%UTUUUUUWUUUUU*.UUUUVUU]UjUUUU]U*UU*UW*uUU]URUW]UTUUUJUU]jU*U.ꪪUU]UUUUP��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/mutagen-bug.mp3����������������������������������������������������������0000644�0001750�0001750�00000003720�12161032160�020633� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ID3���� FOOB������aaaaaaaaaaaaaaaaaaaaaaa vvvvvvvvvvvvvvvvveeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyy loooooooooooooooooooooooooooooonnnnnnggggggggggggg ttttttttttttttttiiiiiiiiiiiiiittttttttttllllllllllllllleeeeeeeeeeeeeeeeeeeTPE1������aaaaaaaaaaaaaaaaaaaaaaa vvvvvvvvvvvvvvvvveeeeeerrrrrrrrrrrrrrrryyyyyyyyyyyyy loooooooooooooooooooooooooooooonnnnnnggggggggggggg artist name�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������d�u�=�@��"`�1 @�?˼N(|rrDO xKإ2Mw3ŕQv. sR܄$dyA�� 0�#����4�`��� ADYa ^O-c7 EbJ!SwukrA%5:=ʹjw0l%RPn@MD] uؕd oA`�� 0������=� ���[[6mes| !)V+ -.Xڤ4ϹR[" !mdj���0�����<� ���=|TVYrK>͎pu1D{-eRa7tfTb)JT*vdkB�@���0����=�`���PTdZOz SGm=F*=)2gK̘Y +ci7bpynd dA@�� `0������0�a����U^!62z)}H:]X7NqUlλcjk)h{ech辅*kTd(jA@�� 0������8 ��{T:TVuw0QlKJ4������������������������������������������������quodlibet-3.0.2/tests/data/silence-44-s.mp3���������������������������������������������������������0000644�0001750�0001750�00000040000�12161032160�020517� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ID3���� TYER������2004TCON������SilenceTLEN���@��3000TALB������Quod Libet Test DataTPE1������pimanTPE1������jzigTIT2������SilenceTRCK������02/10TIT1������Silence��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������d�u�=�@��"`�1 @�?˼N(|rrDO xKإ2Mw3ŕQv. sR܄$dyA�� 0�#����4�`��� ADYa ^O-c7 EbJ!SwukrA%5:=ʹjw0l%RPn@MD] uؕd oA`�� 0������=� ���[[6mes| !)V+ -.Xڤ4ϹR[" !mdj���0�����<� ���=|TVYrK>͎pu1D{-eRa7tfTb)JT*vdkB�@���0����=�`���PTdZOz SGm=F*=)2gK̘Y +ci7bpynd dA@�� `0������0�a����U^!62z)}H:]X7NqUlλcjk)h{ech辅*kTd(jA@�� 0������8 ��{T:TVuw0QlKJ48'ދ}D9<!cW=vEFbJd/z��� 0�����9� ���\E7i*of81CQIxD1,Q,<_/m u,V)JȆݕZkU d6SB�@�� 0������7 ��o*ikP)U1u(1wR+TQԠt뻋<޻ j29N؄[Jd>lB�`��` ������5 ��� صĨ3`:4\ȴ"bY Ӟ"0-d/uҥmguΔB(tndEyA�� 0�#����4� HG*P̿b7xxrmCMMm*̺t A"(BT.?8EdK`�@�� ������: Hm~˩2 NPrYЪ1E叼XRZa饔ƠmV߲-C8غdQz��� @0���P@�8 ���In͠*Y#V$.9sgnF̛?ԺbR\Vko*U(VIi{dXXA@�� `0�����/� ���,`rј MvX*<>YLzJ1ץ/;  ]&up+C dbz��@��@��t���:� ���:D\=XYzSsWN}x^w]!F U̐FY׭$FЁte Q;1F!-UPYoLdgt�A� �����4 ���j6VӔ*{۟8^(rm&^HXRFKA"Դð"j#:* dmv��� 0������2�`��̯ar-Xʱ+84ΕT1XqǸQs醘–ݩKe+ ]S*cRduuA��@ �"����- ���|Au�Oހom61W�Ϩp9 Xѵ9}$KS<Ӹ啇Bd|`��@�� 0������5 iud5'2haµ2$!/&p4  vZc9frdf�@�� �����;`@��M93bRqό]͹(u2"*+bխǘ?C\(tsKըV6']9[h;s=PdqA��  �����.�`��B2ELv<FT!ϩ$%smNwzj ` L$`SqcbdoA�� �#���= ���0F?xņ^aW+5B.cHyV)Bބҩ4U sYz!㏋]ja{ֳ`6pd^A`�� ` �����9�`��pKPlw4i= [qUJ1*rv_\VjE."ذ쐆+ lґn`ddA@�� @ ��@�=�`��ƺ#kQqU)8YкQI4 wUk.M R 5;Y;Rdz���� 0�����; ��� EzQuVTqW9v ^ر}N~HX|\6JyyNg0Udu���� `@������+�!����E5Nb2@m 9HFG.9WlutBihU K֭3N2 1o - #{SdfA���`0����3 ���zǦ^Tk QMI(M@@εxs 4uk=DP~53FW`Tx[<dzA��� 0�����1`���ʣ#AMoc.ʪIKn5P45+8?emלYww1q@$T)q.d\B�`�� 0������;�`��MBp*Pɫ֊iN7*d^D| aҟ(F~h[zQHͭHiy"dǏsA�`��  �����7�`��Ezv*S{^[byU k C'-[VHVQO?UBQQW̉M (7fApbŲ1w Yd͏iA���0������7`���04B4U[d7&?%sْ6|G|1/k{&]i˥)Ghl6>6dgA���  #&��<� ���(krqt))G yN Jlz C)Ňʹ3*79xdrA���@������3 ��h(Uƚ,r ET7_۰}L)!!I;Ifw=p^S _do����0������-�a����mWIn qѭ =gy+0V̪'L9 (ֵHsoZkklh0,T>d��@���#�A���9`���Y̎\fmy$'@WHbFbVyၢڌqel) g jd�����c�B(���G�`@�z'8jF@, ZY&&BrVI킡g?]}vwo:-[<R`dyA��0#8�@�8`��dI*T ؒ@τ(!rP:tTPU[аu~&$>8VJd� ���A`�?� @1i2iy/9q]UB Lː8bF@SX2r˫w~xyd���� ������C�`���wlx:iL)_d(fcSIKi&=A׳mR_|(ed@����B<@?�`@��t ;L&jVy#<Njkߒn_h=V瘦LcZ$Cd}��� #&P)DD`@��R]sq%k֢9KݗE~ A<t֨A䅥/4ZzMK,z2dA���#8@�? ��˽{<l|?hu>3|2mbb6STÙ vm <e(d6>*Ld���� ���B\�@Hx('p( i^ZÝNF 9<o!d}T\e-BdA��` �"�`�A�`@��qA!ր(}y V4<Gt3yM{G׻k+:lg%M&dwA��� #8\�L� @v틨>5 ^A)xf.pnJk*X|ukh}&dj����  �#�P`H`@�?l5=F93/`tIi&4͇aQr__{Pd� � #8A`�4�`�,1{o:+ile.Yn B)VdV2R.y˸^X-sgʿQd�`��A��:`���krFRN;vuHe8C-6*IlxH<+lqL|貔p9rKd@�7#$ �E`@��;}LPF͇ cLcZFVS:Vޛ :4*&⬏m@d@`��� ��C`��.]P iUM2sT0q  i00+&ctdC4dYhQ" d@����B ���G�`��Feڻ̿UU |[,aRmj"l 2<7H[2w2Ċ<uJd@�@ #8���I� @��N*Ne<}^qG_Q./My};(Bs.&Rd~��@�� ��8��N �c]Zx)jm6Dle(At: w)SEt4\95h{uOAQ !dmA��� #8h��H� @ :IgނYY;* }ܶlIr.;Ww{F=/ =MCdA���  #$ ���I� @��eG&/j7 (ʚ_](y9 b(.hRS⡋ k>,FXjqPldA��� 0���T��J� @��&Tִw&igE2l]Hkuu%ԉ45Լx,Yd����` �"����F� @�NJ(ʞPmUF@*vJC7wl;x`v'.X"eg81d@�"8��D @���.o&Sdɭ"+]"'סyh ...lP)C>AXSjHtXd��A�#&B$���F�`@�!aκ^Y%ϵC([uB7kCb]Ej)Zy iA&=*+isOd~����� ���D����I� @��R<6N-/ۀ;,?'jYMʃBBŦ^OJViMdA�0���\�J� �qnat9B QzU .*4Ir9<uof~ub+<ɔC-);Od~A��@0����?`��HB\)KmUE m \XcU)RJbQ"\(<:>X(Y_ed���` �� @�E� s-^8ysK!qVd:@(BR)`7,s8Caf%&\M ҙd����@��c�B$���<`���R[O*Y+T9<�v)iWj+nyuk1朗k8;,kv}?9_ldA��� ���$���E r>Ol]ڹ~ *zXA׵.JE񖔧LBjԊm,L> G{zM37d}�@�� ��p`M�`�"o㯘wș6sz}ۈ Kf( SIsݼ`vlYA&P]UE.d���`#&��@ ��mF m|MmQ7R;A-EkDEڻ5[tjwShCbI8_BdA��� ���B @�D`@�s+;)3gӭD o\kxFaeE`PjtikFiJr hqqZUdA������P`J @\t-{onAŚ[Zzw])SL"0_:y?RƤpo%owxRid�� ���(@�@ ���;o-)dy2U zBfQ ԲH׹'Զ0,fG6R̙TTR7d@�� ��BD��H @��9 0vPW6ANufm( r-x5ZuY#nʽ̎b@dA�@�� `���8�L�`@��၃d�bD-|r$$XJP-Yȓ29>IT7bkȏ)J:ud�@��@��$���I� ��jA/._Z0XY\J5*ck qΕk73}MUߺǨQ X duA�� ���A@�H`@�=k!g\/d,fg19ԭ <H,!y!vp"v1bInMsw>׿td������"�B @�H @�/Mc2G~M Pj]4iu`pAPB]1/75A�R%Qހ<xUdpA�� @�p@L`� pv8b*ӲyÈ NCOϣRc;ooAԤ}8sg^Xj_dA��� �#�`�?�`@��#i2Vt2KڅYas$Aık9ʠ)g/0wG_5ta c6d�@#�B$`�F�`@�U!.=j]| w8[e)l^lIDpUUrӣ+Uѭ35e)r76<d���� "���E� @��yOm?۟wMwYP*w\Bv1BRPT pe\(ME{AZϩd*d}����@���B<���H@hO05ZT*koSu�(9E o˭&{aً9MOoȻed����� ���H��L @�޻?EP r/ hSc' :v)S6ruo ȊВP@FF]ιH@5d@�� ���(��F� ��6*1X)P `:cj 4yuB ,6dOPTmOMd����"B ���E RZ5Iy Ϥ ru 4"+B$vAJ'O -a]DlXmwaN89fLd�� ��A`�:� ���cѡqd:s+[7`N˿/g/MXg;! * ldP8Yd@h�"8��E�`�ަ8XAC�,"= ^f\ܙ܌BqN!wDS/spㅫ/!>ǰSmdxA��� ���<@�> @ߛȂg~ԗul~Vd?d|V*d4\2|W$ad����B8�I� v|ԑV5A\v ډ׋eTdJKO<VJ~䇿JdA��� ���8���E ���>MA¬G^̟^dcz1KH=xH ^%PY0.Th`<x#~ ʬ wd@�����B `�B� ���o#gio1?UsOG_K脓̊&X+_6)HuKF<> 6xadA���`0�����8� ��EpjDJ < kJ5#nSd)[G; aT1F_6><rǐWd@"�B���F ���8Der*8jCC;!n6XU2RRͦda+(ymJXd��@��� ���Ah���F`@��0˘wXՖ IЂR*Z֔t}jLTJP([ <7+!At ʡ4d� �"B,��J�`@��UKXZd#al%w>͸8{㥍WK2OP6A ), 5Kd���� 0���H��J @DYH,츹p -$=4`|v OuI$6J_zQ}_є_[dy�A���D`K� @QozV:ySԀ]N�Ǐ̋r9IiVMM}=Ġ23[ޔS?d��� ���4`�>`���:wyIM6M ($ P{A* y1h) 6)1yKRdA����b�T��C� @���l ClU;onTF;E=oRt[h8"1dyA��  ���T+�dG @���.|ݯخ"s>oQ%?w<)bU6R{,!<ar1dd}����`#@�B� ��;z{W,˽Xj6c; ^tK3``Jzd=tBd����"�B(`�G�`��ʐuo]%K;Ao5q<ػ zPH|.( @˄"hvCQ=PDj96鈅SJ 4da���  �c�h`E�`� �k�k.¨�jݖ2f̨m|$X󘁲u]u67KbЙ +d��#8B ��G`eOs눷 HRaxRG/cVAlaf w(5ک+d@������A`�6� ���]^gY y)9GrpD.K_r\au3y55=5d :d��� #&BD`�G` \7yFU_-8NF~kڴu[*nL^2ݫ8ddk�@��`0���T���E`@c=Xҁy.)"o9*Su(YH!5>,8{!:Uф"c|*"H.Qdw��@��@�� � J �W*D>ռU oCZѬسEiQ<c;Y̱U׶%�^jXՌd�����$���=� ��\3[^mB#*,Q8ni&.IcƲ>@y9\9B&ٛK{Nq]hd@��`�b�B���J`��GC:2RI`<sh 2,hᅡYk/Pv,1U:HMA])FdA���� "8p�L� @0qQ8f6pHbCTV_? myK O/-?H:4B1dz��  ��p� `N� ���sCI;( ?B$@O&5unk5KX~r>P|n+d��� `0#8�`R�IՏ3VU6jȵĝ p)]?Ic*1CMEqH$:V'J[rd���` #���3`���I4+%/ ^JS#I %R$B.1uH +h7=P^uW"d@�c�B����A ��x5kS'AV(ߗ]<~]fa X"Qt"2ˤLy7DjZd��� #&D��H`@ z CΤ"l~E}q֒^&qqg̵=2!Q؅ ݨ}\dK<dzA���`�����? ���YmW|t2[b#/|д;yN&ZƢUE7*yd@��#8B8`G`�RR8,0bW " @m7c F:=mK=iRWyv֛`ĩXb")dw���� 0��t�`N`�=2�(~Pw3iS:Qz (vmaFZ|V.5kC%RQ$ʪIdvA��� �#�`�J`�Rmqr>V*Ċ5 7 ikE,r+eg/8aeadwA��0���l��P`�Æ"*IŨx4,y:lNEwxʂ+I TXĐ48P9U9N�ᨹQ!zndA��� ��`�J�`@�2TcX޻}S?9Jf8&} ox}R.qkq[\Ķ:=Id����"A|���E�`��v] *]fpJ`fS: T4X*kEXǙ,2^J hMV&o.d@X�#$B(���A 1Wo\%F>9kXŬjPa0Je"�vr d5  SadA��� �����B`@��AI* " |L(<rMUp %9ڐ<y)B*UCR?ʊ0˕ `EId��� �#� @@F� @�Ih&+-צ+iVTHR�^5KH~/-O>͓ %c*d����` ���8��B�`@��� 5ٗybr_p~ vE&:ئcRyIs*/6DbQ4=>Ӏ'duA��� #8 ���I� ��,c$1* )NW*Pj*Kc 44۳P]ԕ 8eq d @  ���A���D @ƥvîqz+ 6:28 Et[̪[(ڑO>.l8CY$d@��#����F� @iԏ,RUe1ޞ4}|-#%{Ot<;|TVs !d���� ���$���D� ��@gAoJsYAj.8C U ,"]bFmx]ʏ2fw-uNrdd���� ��4@�9�`���{6kM_q^jtsϱ:0qi|gMMI)kTɢjX}AXQ5z;R8]Id�����c�BT��J`���1MM<ZܥaC(q�3DsɸIav06ƙ0oJ9ᵇކp$@'di����C�d��L ���&D?{jzmTװ{s6A*"=jMN-J(VI+mds����0@�h!BG`@�[ ͂jZ dNx= nKc_g09ׂDrK0SPdA��� ���A���:� @֊ G%\Q .pe䞖T>HM 6ܣfOwo @h=ad@�#�A`�G`@��`'`DISa1Kw{z ÚbId]^7gzo G m *d@��"P`H �WRAw%LAME3.93LAME3.93d��@��(��>�`��dA�����B ���C�`��dlA�`�� ���,`�C�`@�d@#�A���D`��d@�`�"8A@�9 �d���#�B����A�પd��i������ �����������4���TAGSilence�����������������������piman�������������������������Quod Libet Test Data����������2004�����������������������������quodlibet-3.0.2/tests/data/silence-44-s.ogg���������������������������������������������������������0000644�0001750�0001750�00000017136�12161032160�020612� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������OggS���������>1n����@vorbis����D������ɯ������OggS����������>1n���*־Cvorbis���Xiph.Org libVorbis I 20030909���)���rating:quodlibet@lists.sacredchao.net=0.0���album=Quod Libet Test Data ���title=Silence ���artist=piman ���artist=jzig ���genre=Silence ���date=2004���tracknumber=02/10vorbis"BCV��� R!%BJc)RR)%cJhs9'A1.bkiRV!%S [hRT)cRJhs9FsB'c.b[Ic1&SJ(c1cPJ%tBG%t9c1"[ŞJ魅[JR*Td!|F[Jc1cdˁАU����@BCV� ��0EQАU�@��Eqq$G,BCV�@����(#9dIi'뺮n۶m۶ � ��4TD!����db@h*�� ��@$'IRa,&IRʣ<IƠRJ)RJ)RJa,GIRJb,FIRʣ<IƞRJ)RJ)Rʂ<iIנRJr4hɦRJDRJ)RJ)R|J)R՞\I)ROJ)RJ)RJ)RF ����F9D33MAR4{%Int9ݜr'��� B )B )B 1ĐCN9TPI%UTQeeYfeYfeYguYH!ZhXc椭9J餔RJ)t9!����! 2(B 1SNA%T@h*���@���(鈎舎舎xx(g院i*˶lۺ۾۶nqqqqqC ����B!B )S9J ������(8H$Yeiiy'zz(h{gzz隮꺮몮*k۶m۶m۶m۶m۶-!�� ��ɑIqɑ$ 4d� � ��EQq$ǒ,IDɴTdOtQu 4d��� ������C4DCtDKDQEQEQEQEQEQEQEQEQEQEQEQEQEQ<<<BCV���:#9b)")c9@h*�@�@��"9eYyy'(j@h*���@������XHx舒((((((((((((((���(GJA{xZ;bsgI˵tB(-טyǘsB bwJ9H5B��0H i i�������Hhh�������(������������������������������������������������������������������� y""�������h �������()������������������������������������������������������������������� i""�������h x �������(ij����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������p�� Y� ������������������������������������������������������������������������������ ��`� 2PhȊ� N�8��$i��8i��`i(�i���������������������������������������������������������������� ��`� 2PhJ� �,e4 i�x@����4%(4d%��`P˲,σi(B4Mi'43Ex&<L( DQU��8��ؠ)8@!+��Xy牢i*4DQM4Uy(i M<QETUׅy(iDQ4MTUuy(EQ4MTUue i꺮 DQ4MSU]W(i20ETUueY2@UUueY+ PUu]Ym�뺲,����*ф @!+(��S0&!$B&J RR(TJ !Rj)eJ) B)T��؁�؁PhJ� � D)cLBc9!T1眓P2sI)c9礔9sRJǜs9)s9眔RJsNJ)%A'9��T��`#A�R� cYig$iy(fYy'<OD4Uy(i*=Q4MSuU,zh0MQ4MUu]虦.d4Uu]n躲 \UU]W몪ڲ���VG8) ,4d%��@cR !BJ)R ��p��0 "���TRJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)QJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJRJ)RJ)RJRJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)�F8�>P Y ���(bb9)-X!sR-g1)XcΘsJI\J礴s9QJ)sΥbK))Xk9Zs9j9sls9[5�0� lXh,А�@H��aR1s:(d1 B1會B1B!R2sB!TJ眃B!PJsB!JIB!B)A!JIB!B B!PB%RR!B!RJJ%B!RJJRJ(!PJ*)PB!PJ*)RJ!B)TR !B(��� :ɨM�� �@xAI1"!娵b1c<$sRkhH1jS!ŤՎɔrTC)2dILXB#M����L�Q1��A U DD�hut1 t.  � p7x< @GQR����`��� \FGH������@"DDD3Waq�� �����@@@����� ���@@OggS�z�����>1n���OQ*-+++*,***+++,+++-+++*,***+++,+++-+++*,***+++,+++-+++*,***+++,+++-+++*,***+++,+'ؽۉ �20�=ܰ=����DD�����������˂�~lXӞ? n����@H���������e 2@B%=XӞ? ���� D���������THX0H,�=XӞ? n����@D���������@BE =ܰ=����DD���������@ e=ܰ=����@���������B2�=XӞ? n����@$$��������� E, ap%$�=ܰ=����H���������D `@P�=XӞ? ���� "��������� `b=ܰ=����@DD���������@"R@ =X^? 6���� I$���������H"0�=ܰ=����HD$���������B@ʠ=ܰ=����D"���������ʀ"�=ܰ=����$��������� AA�=ܰ=����D���������pU=XӞ? n����@D" ���������`@d@=ܰ~l����@""���������AeAPp~lXӞ? n����@H���������e 2@B%=XӞ? ���� D���������THX0H,�=XӞ? n����@D���������@BE =ܰ=����DD���������@ e=ܰ=����@���������B2�=XӞ? n����@$$��������� E, ap%$�=ܰ=����H���������D `@P�=XӞ? ���� "��������� `b=ܰ=����@DD���������@"R@ =X^? 6���� I$���������H"0�=ܰ=����HD$���������B@ʠ=ܰ=����D"���������ʀ"�=ܰ=����$��������� AA�=ܰ=����D���������pU=XӞ? n����@D" ���������`@d@=ܰ~l����@""���������AeAPp~lXӞ? n����@H���������e 2@B%=XӞ? ���� D���������THX0H,�=XӞ? n����@D���������@BE =ܰ=����DD���������@ e=ܰ=����@���������B2�=XӞ? n����@$$��������� E, ap%$�=ܰ=����H���������D `@P�=XӞ? ���� "��������� `b=ܰ=����@DD���������@"R@ =X^? 6���� I$���������H"0�=ܰ=����HD$���������B@ʠ=ܰ=����D"���������ʀ"�=ܰ=����$��������� AA�=ܰ=����D���������pU=XӞ? n����@D" ���������`@d@=ܰ~l����@""���������AeAPp~lXӞ? n����@H���������e 2@B%=XӞ? ���� D���������THX0H,�=XӞ? n����@D���������@BE =ܰ=����DD���������@ e=ܰ=����@���������B2�=XӞ? n����@$$��������� E, ap%$�=ܰ=����H���������D `@P�=XӞ? ���� "��������� `b=ܰ=����@DD���������@"R@ =X^? 6���� I$���������H"0�=ܰ=����HD$���������B@ʠ=ܰ=����D"���������ʀ"�=ܰ=����$��������� AA�=ܰ=����D���������pU=XӞ? n����@D" ���������`@d@=ܰ~l����@""���������AeAPp~lXӞ? n����@H���������e 2@B%=XӞ? ���� D���������THX0H,�=XӞ? n����@D���������@BE =ܰ=����DD���������@ e=ܰ=����@���������B2�=XӞ? n����@$$��������� E, ap%$�=ܰ=����H���������D `@P�=XӞ? ���� "��������� `b=ܰ=����@DD���������@"R@ =X^? 6���� I$���������H"0�=ܰ=����HD$���������B@ʠ=ܰ=����D"���������ʀ"�=ܰ=����$��������� AA�=ܰ=����D���������pU[ܰ[���������������@�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/silence-44-s.spx���������������������������������������������������������0000644�0001750�0001750�00000057556�12161032160�020662� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������OggS���������'����ǑrPSpeex 1.1.12�����������������P���D��������������������������������OggS����������'���0���Encoded with Speex 1.1.12������album=Quod Libet Test Data ���artist=piman ���artist=jzig ���title=Silence ���date=2004 ���genre=Silence���tracknumber=02/10OggS��n������'���+-]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]tN��mC�_mm/mmmmUՅ]]]]XUՅ]]]]\ֵtNkmE_mm�/mmomUՅ]]]]XUՅ]]]]\ֵtN��mW�_mm/mmܡm%UՅ]]]]XUՅ]]]]\ֵtNFS_mm�/mmwUՅ]]]]XUՅ]]]]\ֵtNq�m`3_?%/mm�mmUՅ]]]]XUՅ]]]]\ֵtNa�m}�_mmcmҵ0?omUՅ]]]]XUՅ]]]]\ֵtN<m�_mm/mmmUՅ]]]]XUՅ]]]]\ֵtN�mP_mm@/mmhUՅ]]]]XUՅ]]]]\ֵtN(խa_'@mmUՅ]]]]XUՅ]]]]\ֵtN�m}�_mmثtbmmUՅ]]]]XUՅ]]]]\ֵtN(mmB_jȯmmsmUՅ]]]]XUՅ]]]]\ֵtN@�ma_o/mm[AmUՅ]]]]XUՅ]]]]\ֵtN�mn�_mm/mmUՅ]]]]XUՅ]]]]\ֵtN_"mt"_jVm mmUՅ]]]]XUՅ]]]]\ֵtN,�mj�_mm/mmo5UՅ]]]]XUՅ]]]]\ֵtN�m^c_m@/mm(m[mUՅ]]]]XUՅ]]]]\ֵtN_Dg,_mUՅ]]]]XUՅ]]]]\ֵtNpm]_m/mg8տoUՅ]]]]XUՅ]]]]\ֵtNZ�md#_m/mm#mUՅ]]]]XUՅ]]]]\ֵtND+^�_mm+ m`mmUՅ]]]]XUՅ]]]]\ֵtN;�mk_mmٯmO#omUՅ]]]]XUՅ]]]]\ֵtN.�m~#_'mfmUՅ]]]]XUՅ]]]]\ֵtNPj�_mm�/mmrWڵ5UՅ]]]]XUՅ]]]]\ֵtN/ƀ_mm@/mm۠mmUՅ]]]]XUՅ]]]]\ֵtNt�mx�_mm/mmUՅ]]]]XUՅ]]]]\ֵtN1�mk_mm/mmѠmmUՅ]]]]XUՅ]]]]\ֵtN[�m@_[m/mmڎmUՅ]]]]XUՅ]]]]\ֵtNmFmR_mm/mmޔmUՅ]]]]XUՅ]]]]\ֵtN'�mW"_mm@/mmmUՅ]]]]XUՅ]]]]\ֵtNFm#_m/mmUՅ]]]]XUՅ]]]]\ֵtNC�mu_mm/mmXmmUՅ]]]]XUՅ]]]]\ֵtNm\�_mm@/mmmmUՅ]]]]XUՅ]]]]\ֵtNrp�_mm/mmmmUՅ]]]]XUՅ]]]]\ֵtNcmOʀ_mmm@mmUՅ]]]]XUՅ]]]]\ֵtN5�m_mmA/mРmmUՅ]]]]XUՅ]]]]\ֵtN8�mu_/mmLmmUՅ]]]]XUՅ]]]]\ֵtNz�mR_o@/mm�mmUՅ]]]]XUՅ]]]]\ֵtNPc�mU_�/mumUՅ]]]]XUՅ]]]]\ֵtN �j�_mmfm$OhUՅ]]]]XUՅ]]]]\ֵtNY�mV_m/mmߋoUՅ]]]]XUՅ]]]]\ֵtN�mp_mm˯mkmUՅ]]]]XUՅ]]]]\ֵtN(mU�_mm/mm�mmUՅ]]]]XUՅ]]]]\ֵtNq:kH�_mm/mmܠmmUՅ]]]]XUՅ]]]]\ֵtNp�mI_lm/mm mmUՅ]]]]XUՅ]]]]\ֵtNZ�mq_?m'/mmcomUՅ]]]]XUՅ]]]]\ֵOggS��������'���B-]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]tNH�mi#_@/mm`mmUՅ]]]]XUՅ]]]]\ֵtNP^ԿZQS_mgpmUՅ]]]]XUՅ]]]]\ֵtN1�ma_ikAUՅ]]]]XUՅ]]]]\ֵtN_oڵ@/mm mmUՅ]]]]XUՅ]]]]\ֵtNH�mv_mm@/mmҞlmUՅ]]]]XUՅ]]]]\ֵtN��mc_oow�/mހmmUՅ]]]]XUՅ]]]]\ֵtNK�mr__mۅmmmmUՅ]]]]XUՅ]]]]\ֵtNk�mj_mm�/mmmmUՅ]]]]XUՅ]]]]\ֵtNp_mm�/mm`mmUՅ]]]]XUՅ]]]]\ֵtNbI#_m/ٱWmmUՅ]]]]XUՅ]]]]\ֵtN+.O�_mmu/m mmUՅ]]]]XUՅ]]]]\ֵtN7�ms_mm@/mmԎ%[mUՅ]]]]XUՅ]]]]\ֵtNԛ_mo@/mm`mmUՅ]]]]XUՅ]]]]\ֵtNfηz_mm/mmޠmmUՅ]]]]XUՅ]]]]\ֵtN{_[m/dm mmUՅ]]]]XUՅ]]]]\ֵtN_�mb�_mm mmkmUՅ]]]]XUՅ]]]]\ֵtNE�mT_mjҿmJmmUՅ]]]]XUՅ]]]]\ֵtNsFs_mm/_mUՅ]]]]XUՅ]]]]\ֵtN*ԿR_mm"mm×UՅ]]]]XUՅ]]]]\ֵtN�mp_z'YmӬ5oUՅ]]]]XUՅ]]]]\ֵtN=�mq�_mm/mm߀mmUՅ]]]]XUՅ]]]]\ֵtNwmE_mm/mӭmmUՅ]]]]XUՅ]]]]\ֵtN<Xֶo_mkmUՅ]]]]XUՅ]]]]\ֵtN0jx_oѬ[텝UՅ]]]]XUՅ]]]]\ֵtN>�mo_mom:mUՅ]]]]XUՅ]]]]\ֵtNP`Կm~_omoUՅ]]]]XUՅ]]]]\ֵtN�m[�_mm@/mmmmUՅ]]]]XUՅ]]]]\ֵtNfη]�_mm2/m|Ӄ'UՅ]]]]XUՅ]]]]\ֵtN'�mq_mm@/mm٠mmUՅ]]]]XUՅ]]]]\ֵtNmX+_m[m�/mm@mmUՅ]]]]XUՅ]]]]\ֵtNb�m~�_mm/mmҗ[mmUՅ]]]]XUՅ]]]]\ֵtN�m[�_mm/mm�mmUՅ]]]]XUՅ]]]]\ֵtN �mZ_F/mm`mmUՅ]]]]XUՅ]]]]\ֵtNT,v_@/mm܀mmUՅ]]]]XUՅ]]]]\ֵtNtFO_mmmmUՅ]]]]XUՅ]]]]\ֵtN8οmp_ummUՅ]]]]XUՅ]]]]\ֵtN&_mm/mmmmUՅ]]]]XUՅ]]]]\ֵtNmOO_mm@/mm�mmUՅ]]]]XUՅ]]]]\ֵtN3mՐ3_m/mm`mmUՅ]]]]XUՅ]]]]\ֵtNl�mJ_m[m/mmՏUՅ]]]]XUՅ]]]]\ֵtNQ�m}�_mm�/mm[mmUՅ]]]]XUՅ]]]]\ֵtN�mo_mm`mmUՅ]]]]XUՅ]]]]\ֵtNJTӶS_ml @/mڀmmUՅ]]]]XUՅ]]]]\ֵtN~�mw_mmMmmmUՅ]]]]XUՅ]]]]\ֵtN2UI�_mm/mm,[m[mUՅ]]]]XUՅ]]]]\ֵOggS��O�����'���r&:-]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]tN mp#_mo/mm׳mmUՅ]]]]XUՅ]]]]\ֵtNB�mv�_mm/}WmmUՅ]]]]XUՅ]]]]\ֵtN'Կmp_m�/mm۠mmUՅ]]]]XUՅ]]]]\ֵtNpm~Vmm/mm@mmUՅ]]]]XUՅ]]]]\ֵtNP�mn�_mmCdmmmUՅ]]]]XUՅ]]]]\ֵtN7�mq�_mmomխmmUՅ]]]]XUՅ]]]]\ֵtN:Կ{�_mmѠmmUՅ]]]]XUՅ]]]]\ֵtNP\�moO_m3UՅ]]]]XUՅ]]]]\ֵtNvF؀_mm/kMmmUՅ]]]]XUՅ]]]]\ֵtN=Xm_mmݠmmUՅ]]]]XUՅ]]]]\ֵtN$�mi�_mm/mmѠomUՅ]]]]XUՅ]]]]\ֵtN/ _mmGm mmUՅ]]]]XUՅ]]]]\ֵtNv�mh�_mmomUՅ]]]]XUՅ]]]]\ֵtN*�mz_o/mmmmUՅ]]]]XUՅ]]]]\ֵtNh�mx?_m/mm mmUՅ]]]]XUՅ]]]]\ֵtNc�mJ_m[mg/ZmmUՅ]]]]XUՅ]]]]\ֵtNNmq_/UՅ]]]]XUՅ]]]]\ֵtNq�md_mm@/mm mmUՅ]]]]XUՅ]]]]\ֵtNukR_M�mmUՅ]]]]XUՅ]]]]\ֵtNk�ms_o/mm mmUՅ]]]]XUՅ]]]]\ֵtN{Կ_mm0/m[ mPmmUՅ]]]]XUՅ]]]]\ֵtN1�mn�_mm/mmї[mUՅ]]]]XUՅ]]]]\ֵtNFm[_/mlmUՅ]]]]XUՅ]]]]\ֵtN'�my_o@/mmPUՅ]]]]XUՅ]]]]\ֵtNrFKX_mm/mmm5UՅ]]]]XUՅ]]]]\ֵtN�mQ�_mmu/m;ͿmۅUՅ]]]]XUՅ]]]]\ֵtNԿmN�_mm/mmݠmmUՅ]]]]XUՅ]]]]\ֵtN �mE_lo�/mm׈mmUՅ]]]]XUՅ]]]]\ֵtNymi_?/ym֐oUUՅ]]]]XUՅ]]]]\ֵtNƿӚ�_mmٯNmUՅ]]]]XUՅ]]]]\ֵtN8 dg�_mmm٠mmUՅ]]]]XUՅ]]]]\ֵtNP9ԿO_mmj[mUՅ]]]]XUՅ]]]]\ֵtNyƿ|�_mm@/mm@mUՅ]]]]XUՅ]]]]\ֵtNNً_mm/mmڨo4mUՅ]]]]XUՅ]]]]\ֵtNfJE_mmkm۠mmUՅ]]]]XUՅ]]]]\ֵtNR�m~_2[mٯmkm@mmUՅ]]]]XUՅ]]]]\ֵtN@�mu�_mm/mm_mڵUՅ]]]]XUՅ]]]]\ֵtNu>ˀ_mm/mmmmUՅ]]]]XUՅ]]]]\ֵtN�m@_mmͯmdmmUՅ]]]]XUՅ]]]]\ֵtNC�mj"_m/mm mmUՅ]]]]XUՅ]]]]\ֵtNl�mzH_mmmmUՅ]]]]XUՅ]]]]\ֵtNG�m\#_m/mmmmUՅ]]]]XUՅ]]]]\ֵtN&οm�_mm�/mmmmUՅ]]]]XUՅ]]]]\ֵtN9mkN~_mmUՅ]]]]XUՅ]]]]\ֵtNs�mn_omڗ/RmmUՅ]]]]XUՅ]]]]\ֵOggS�������'���ț-]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]tN=�mr_mmm+sUՅ]]]]XUՅ]]]]\ֵtN/�mm�_mm/mmmڵUՅ]]]]XUՅ]]]]\ֵtN�_mm/mmzmmUՅ]]]]XUՅ]]]]\ֵtN)�me*_ڴmM mmUՅ]]]]XUՅ]]]]\ֵtN#�mg_mm@/mm7mUՅ]]]]XUՅ]]]]\ֵtN2Կm_oڗm@/mm]UՅ]]]]XUՅ]]]]\ֵtNԿmQ_m)m`mmUՅ]]]]XUՅ]]]]\ֵtN=d_mm/mmo[mUՅ]]]]XUՅ]]]]\ֵtN"�mTc_mmQ@mmUՅ]]]]XUՅ]]]]\ֵtNb�mx_m_G/m`mmUՅ]]]]XUՅ]]]]\ֵtNJ�ms�_mmHmm!տUՅ]]]]XUՅ]]]]\ֵtN�m_�_mm/mmoڕUՅ]]]]XUՅ]]]]\ֵtNF][_m/mmvmUՅ]]]]XUՅ]]]]\ֵtNP�moj_m@/mmHUՅ]]]]XUՅ]]]]\ֵtNI o#_/mmCUՅ]]]]XUՅ]]]]\ֵtNzԿ^_/UՅ]]]]XUՅ]]]]\ֵtN�mX�_mm�/mmߠmmUՅ]]]]XUՅ]]]]\ֵtN.�mI_vm@/mm׿o7mUՅ]]]]XUՅ]]]]\ֵtN �Y�_mm@/mmޗ?UՅ]]]]XUՅ]]]]\ֵtNƿmH_mm}/mmmmUՅ]]]]XUՅ]]]]\ֵtN �mx,_oo:/mӠmmUՅ]]]]XUՅ]]]]\ֵtNC�mh_mmCZHmmUՅ]]]]XUՅ]]]]\ֵtN5ֶm_6m!/Ƿm͝UՅ]]]]XUՅ]]]]\ֵtN9�T�_mm@/mm mmUՅ]]]]XUՅ]]]]\ֵtNo�m@\%@/mm#oUՅ]]]]XUՅ]]]]\ֵtNj�mn�_mmׯmmѠmmUՅ]]]]XUՅ]]]]\ֵtN5�m}_mQm mmUՅ]]]]XUՅ]]]]\ֵtN`_mm/mm�mmUՅ]]]]XUՅ]]]]\ֵtNxI_mm!/momUՅ]]]]XUՅ]]]]\ֵtNW_mmٯmmmmUՅ]]]]XUՅ]]]]\ֵtNBԿO_o5@/mm֠mmUՅ]]]]XUՅ]]]]\ֵtNu6V�_mm@/mm'mUՅ]]]]XUՅ]]]]\ֵtN#㏀_mm�/mm�mmUՅ]]]]XUՅ]]]]\ֵtNi�mR_mm:@mmUՅ]]]]XUՅ]]]]\ֵtN:VB_mۯp WmUՅ]]]]XUՅ]]]]\ֵtN@ֿ_m�/mm,mUՅ]]]]XUՅ]]]]\ֵtN&6_Vm/mmܐUՅ]]]]XUՅ]]]]\ֵtNPX�m\_j呯hUՅ]]]]XUՅ]]]]\ֵtNdοV�_mm/mm`mmUՅ]]]]XUՅ]]]]\ֵtN_m H_/mm݀mmUՅ]]]]XUՅ]]]]\ֵtN|Os m|S_6m@/mmڗmmUՅ]]]]XUՅ]]]]\ֵtNP�ml_Q[mK`[mUՅ]]]]XUՅ]]]]\ֵtN�m\�_mm/mmmmUՅ]]]]XUՅ]]]]\ֵtNwmOʀ_mm/mm`mmUՅ]]]]XUՅ]]]]\ֵtNs�mE_mm@/mmmUՅ]]]]XUՅ]]]]\ֵOggS��0�����'���m,-]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]tN�mh_mm/ҶmmUՅ]]]]XUՅ]]]]\ֵtN>�mz~_o@/mmUՅ]]]]XUՅ]]]]\ֵtND,_m/mlmmUՅ]]]]XUՅ]]]]\ֵtN%F#_/mmԀmmUՅ]]]]XUՅ]]]]\ֵtNS�mI_/mmmUՅ]]]]XUՅ]]]]\ֵtNL�m{_mmkm-@ mmUՅ]]]]XUՅ]]]]\ֵtN�ma_mm@/mmҗ[mmUՅ]]]]XUՅ]]]]\ֵtN,~܀_mm@/mmmmUՅ]]]]XUՅ]]]]\ֵtNcoƀ_mm/mmzomUՅ]]]]XUՅ]]]]\ֵtNm�ma_mm/mUՅ]]]]XUՅ]]]]\ֵtN8�mp�_mm/mmހmmUՅ]]]]XUՅ]]]]\ֵtN|mY#_mڵ1mmUՅ]]]]XUՅ]]]]\ֵtNgfZ_jbگmmUՅ]]]]XUՅ]]]]\ֵtN�m~,_/mmmmUՅ]]]]XUՅ]]]]\ֵtNgS_mo*ȯmmUՅ]]]]XUՅ]]]]\ֵtNE�mx�_mmQ/խa?mUՅ]]]]XUՅ]]]]\ֵtN'�mi�_mm/mmܗmmUՅ]]]]XUՅ]]]]\ֵtN�mO�_mm/mm@mmUՅ]]]]XUՅ]]]]\ֵtNmO,_om/ZUՅ]]]]XUՅ]]]]\ֵtNX�mu�_mmmHooUՅ]]]]XUՅ]]]]\ֵtNO_m`mmUՅ]]]]XUՅ]]]]\ֵtNgO[_joA+mmUՅ]]]]XUՅ]]]]\ֵtN(ԿmH_mm@/mmmmUՅ]]]]XUՅ]]]]\ֵtN �mT_멿m`mmUՅ]]]]XUՅ]]]]\ֵtNBm�_mm@/mmmmUՅ]]]]XUՅ]]]]\ֵtN}GVmm/mmڨmvmUՅ]]]]XUՅ]]]]\ֵtNj�mU_mmm`mmUՅ]]]]XUՅ]]]]\ֵtN"�mh_mm/mmW[omUՅ]]]]XUՅ]]]]\ֵtNFm �_mm/VmmUՅ]]]]XUՅ]]]]\ֵtNMX�_mm/mmmmUՅ]]]]XUՅ]]]]\ֵtNr�mu_mڵ/mmUՅ]]]]XUՅ]]]]\ֵtN)mx_mm/mmUՅ]]]]XUՅ]]]]\ֵtN�mb�_mm/Ӣm%UՅ]]]]XUՅ]]]]\ֵtNƿVƣ_/mmڀmmUՅ]]]]XUՅ]]]]\ֵtN|�mc_om/moUՅ]]]]XUՅ]]]]\ֵtNJm_mmѯmmmUՅ]]]]XUՅ]]]]\ֵtNCƿcE_mmζommUՅ]]]]XUՅ]]]]\ֵtN.�ms_m/mmڠmmUՅ]]]]XUՅ]]]]\ֵtNaܿ γ_oo5�/mmԀmmUՅ]]]]XUՅ]]]]\ֵtNI�m�_mm/mm?mmUՅ]]]]XUՅ]]]]\ֵtN<m՞_mm)m mڏmUՅ]]]]XUՅ]]]]\ֵtNNX`S_mڴٯ-ٿ@mmUՅ]]]]XUՅ]]]]\ֵtNW_mQp mmUՅ]]]]XUՅ]]]]\ֵtNdF_mmf/ ڵUՅ]]]]XUՅ]]]]\ֵtN~mb_n�/mm׀mmUՅ]]]]XUՅ]]]]\ֵOggS�z�����'���F]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]tNZ�mH_mMmk�mmUՅ]]]]XUՅ]]]]\ֵtNucG[m/m܀mmUՅ]]]]XUՅ]]]]\ֵtNP6NӶmK_mmqf[jVڵUՅ]]]]XUՅ]]]]\ֵtN�mf�_mm�/mm@mmUՅ]]]]XUՅ]]]]\ֵtNI�mw_mm�/mm`mmUՅ]]]]XUՅ]]]]\ֵtNR�m}�_mm@/mmԠmmUՅ]]]]XUՅ]]]]\ֵtN6?F_mm<mmݨmmUՅ]]]]XUՅ]]]]\ֵtN�mV_mm?/mJmmUՅ]]]]XUՅ]]]]\ֵtN.mmӄ_mmUՅ]]]]XUՅ]]]]\ֵtN �mR_om`mmUՅ]]]]XUՅ]]]]\ֵtNc�mk�_mmïmKmimUՅ]]]]XUՅ]]]]\ֵtN�mU_mm/mmo7UՅ]]]]XUՅ]]]]\ֵtN�mQ_mm/mm mmUՅ]]]]XUՅ]]]]\ֵtNz,_m@/mm@mmUՅ]]]]XUՅ]]]]\ֵtNU�mH_m[o/mm`mmUՅ]]]]XUՅ]]]]\ֵtNkF|�_mm/mmI}UՅ]]]]XUՅ]]]]\ֵtN%6m`_mm@/mm@mmUՅ]]]]XUՅ]]]]\ֵtNe6mk@_mmmRXoUՅ]]]]XUՅ]]]]\ֵtN,�ml_w[o&/@mmUՅ]]]]XUՅ]]]]\ֵtN-ԿmX�_mm/mmmUՅ]]]]XUՅ]]]]\ֵtNZ�mt?_m/mV@mmUՅ]]]]XUՅ]]]]\ֵtN(mh�_mm�/mmߨoڕmUՅ]]]]XUՅ]]]]\ֵtN 6M_mm�/mmܠmmUՅ]]]]XUՅ]]]]\ֵtN֚J�_mm/mm mmUՅ]]]]XUՅ]]]]\ֵtNk�mK_V糯m�mmUՅ]]]]XUՅ]]]]\ֵtNRa_mm/mmڗ]mUՅ]]]]XUՅ]]]]\ֵtN"mKj_`mmUՅ]]]]XUՅ]]]]\ֵtNBp_ůmm۫mmUՅ]]]]XUՅ]]]]\ֵtN[�mo_mm/mmmmUՅ]]]]XUՅ]]]]\ֵtNh�m@_mm@/mm`mmUՅ]]]]XUՅ]]]]\ֵ��������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/empty.xm�����������������������������������������������������������������0000644�0001750�0001750�00000030544�12161032160�017507� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Extended Module: test song�����������rst's SoundTracker ����������}����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ������2��arrive.wav��������������(�����������������������������������������������������������������������������������������������������@����������������������������������������������� ���������������������������������������������������������������������������������.���������@�arrive.wav������������v�+�b]j,=CYG/ym%�U �&�pA.B< u4U�>�0B+�bENuA3�{2:'� 3�Y*Q?QG*�X4Y�kfXxv{AEu�7L2kj��i�y#d^GB])O���o� �IF1i?�V�5-"}2IK)�&�Id�hK\�toPU�NWD����[=@j_gn�lR�H@ ~ 4�?g)����n��LJv\WI�Q �L0��f�g |QSm$"Pc�yP:f ~6*  2nSi �3t4�D�V��R� I{lSbf�f�/�E�|���+i+)�RA��E�KY!A�)Kp+^��m.�1;v,Z+�j~��6E�@QN�/ s�"Y��-Vy7�dk~/<O$��� 3�&��"�B/XHvKkE!-�.�b:�, "dx$QME��y+\�p�D_]u�&\U |�o 28*?�� ��C�"6� �M� �)����@�96|��Nyc���PAKY:3,F�8myq8Ld/Z#Tp�]�Dv/��]�]_}�=a^s���((�%�J/Zb�[sK*&J"�AR �OI���;76�X&M9|�+��_h�*k3�}x1}�AB@i;n>��/�+:�lFo���y�Q;a[�rYy! ��`�N vZ��lM�,�?%rb1�L9vd�4�!�Y_PM5w �7/�nADb�<7'L�5Gv>tG l�~9b�������D�a?�e�t�n�_�]���m+c:�p7y*�R�%�8pU�O$u��(`W/4QN�+gCx*8g��;a* TdZJFMbZ��J ;C�U! A0<;* sB�oM{t�`�gHKLQ"t,x����q��;gKt�PY���h�g�T@�yK2"'�TZemD{^?y�O�_H3`@��/�u��rIH%&�*2*R!f|6�)ITaWNQ��|$ )Yz][oYXS*��<sqWA:Q3c�v��Q1�>��L��?)�vJ  &#6m0�0+ rAj7"�\�ya_������k��_s�R !c��"�L��hPA U�&<RL�7i���U<�w�#� #;'%@3��5e Ov1>`�K.F|g9"DJ- �Z986B �V�a���n�x#n�2@8�Z�y��M^�'�Ow 5���d�e��ucO|O�>ydA[q�b2�����~��p@moee)����Y�Wbg$c-.,`2, |f7;(wyH�U o*���l0�e�fFe���=I��T>JUsB�FcbN��\%@)~FD�#���9~(uK%I��Ce !%�FnN1EE? W*?�<  { �6S�l(s�ZN'Q<d = b�j#.%}VEZf�Vx2T'?:s|FS ]$�G ][�jd-zX3@U�� su0(AG lxb�ln-%_gK~G4�;]D5gY,�<Irw/:C���2�D�+s9v"G^�GXtD /WEBVA]�{�a�� q":�gg�p�m��@R�(k)iJ|1�� 3\z`h�@(>5p����c�[��]-�3Q{s�?��Hax?5.;*�K][z�M.b\Zx6L��#�]�s�&�}�nk�o�a�y��V�BM]rN5�����#i��!G# 3K"���]�|k����t'#Lto6W�K8a[%LlC 8u� m}<��Kk��97-�X�E�!��O��6N�W���F�P��[C$-Npco>��|Z_wx0kEar� �%�|��K�lV}7&-\yx:�z�6�9O�'�<[m|PI6b&�3sG8dU*>&t�cy�0�^~y�t1j$_�t�<e�?T]����� �����A3t�i7kj6gdB0(jM�BXhw�x�R:0lx��i mJ���Mmqs �k����9�e{tN(�������\�9p:8�p4m�WF�:K[�Of+`9Wm1_~ YC� V0d}�EGg�+3J&�o(4hY��.b�C]3��xJB-)Rw�me\{�w�W��3�C;9j"�<D]-dR��B@�\�MQ+X�A Z�D8y�Zi�1a/G�SMB4=W*r~79Rz�#fXhaL a�9s,.� f~cZ�t�Q�[<30��"���x)YM�� <I9��%�oU�%�faa�GfD�"��;i}~FE~w"$]�#.iMG7��z���7p�z�%�L+G����@Y+�u- hfb'�/�u6Xr�A^])O�2rb�^%1.A:����]�1�� ����X0xckm�+��u4Y�A�-��O5Z7�e;}/��VHGj>G3WC��0P'a`&7NK+D:1�y<U2_) ���X�f^!��{8��<��.bkdet:��eD��ZdJ }>�$5R�0��&7 �TM��'�e�W%-T`��rQxVJ�+(~!� �v(^1�v �J���k����U�iUEwbmU6��03#-��:��ym�XJV)��s�I#w= fzo,I�uZF*3* 2HP3`�.B-S;qG2V}sp_����dE�t>?@w�D[�1h2��~�)� �3�I�U�e�}���[�9n |b`{Np5�SZ)d�!�7��GB{hDT�Zjyb����k�)zwFJL�k���9]h\9�g��C��9\�CLv�A�[Ac:@kI�!AqufWMB(P������"<LX]S1���(>A��!? |�TC;OCxO�,Z[����gvA1�s� �S"?vo Q ttV<l����S� � �r�ZBv� �=8~��ZV�3jc�����K� Z 4\&NddP8*9rf�c#).5�X���S��\/,8o�?�j@�����<S:7)(�Z�m�]�2�~V��%uM��m�<�� ��~��[~)�d��A��mmX�uqhfHpw3@3?��?&�|�9�K��/d ���\�'�iWc~��P2}biL]+�G�&�PP-^D�&gn@�A��=�O� �Wt �C�U�K�/�5!hs$BPb\ �]�y�n�Z�U�x��'pCC�tVr�V���08�2J��1Z,�8$\L�-H[iiS+��9)B,v������ HN�=�8L0E(�r v'V ��Nk�;���q� /z}Cm�^�Lm���%�N�|������|�����������y�;�:;.>1�+�)(+^K�2w*�f��*��y! $�@xP"�"�]=<_v}TB�j�I�Z?e�>t5�?�?R�Z h`�L�"��.��i?D4q(| �K��)G{ #C��B�1�����6N=�j����Q�\#/lJ'�����sz)��S B����&>]�4��a&ZC;f�u,��Oc�~�*��I��V>r�?L8s �R���s�%�z[t,���-,'#�z�WmvnZ s�}-^����T��+��u&j��Js]s"����R�H}�%���p���m�"�?��� ��c�,�Ap/a��Q�%� ��$�a����Z�v;#o1ttHT��$/RFc�� Lc�-� �7�>��3[K�t�k�3�,&*�tlt�<5�;~o �O�3�7�N�t���Dz�3giP;wAN��!ThmpyvV+#v{#?2�2n%�w���;�i 2�v����i�!�� -R�� .[�������/��I��=I�)lOE\4���6�H<}�"K��lio�� ���!�Hw*�@�-���Q��cKWR !2��=�!�3�T�S��du9*B]�Km�/_2sh]�r�@�J���1|4�\%hSV;/2gp= go���{�<��G~c�x_�.���)4S<��&2<WJp~m ��=>?T*5, {p}m~�$T���/�H.���?g�K�z<>(�����]0Nd5�U�W�Y�r���@kd2��}����"���������T�%FJ@P <2'��� Jxo%�.�X=n}�ia�/�U,X?,�T�~���/c~iL8:Po{>�q�N%Q?$K[8H�LOr�P���.�QWqa*(2@�#����#�2�(���m��1UA��<��r��S+)�`�b��VH~r[XUV0Y���%% �\4o =�Y���� �/^=bD���_=�~�������OG*����� Qg=��,3 ���r�f�b�i�v������5|C�,�ldQ>7nD@7N��EX������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/data/silence-44-s.flac��������������������������������������������������������0000644�0001750�0001750�00000143330�12161032160�020737� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������fLaC���"���y�+ B�zbܷH2ĺJ�� ���reference libFLAC 1.1.0 20030126������album=Quod Libet Test Data ���artist=piman ���artist=jzig ���genre=Silence���tracknumber=02/10 ���date=2004 ���title=Silence��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Y�k?O?s???????9>?3y?̟>?O????ϟy??ϟ??'<3??O>I??Ny||??�C3'?????????????g|????s?|g?yg????|ϟ???'?'????9????sϟ>?'Oy?4uYl??93??>?ϟ?y3???O?y?????9?93???<<3O???<9ϓ???9?~O??g?~?ϞNO'�Cɟϓsϟ9?g'??|?ϙ?'?3|?'?????<????d????g???ϟ???>yϟ?g?9?<??~?9?I???ϟ?|??Ye?3??>|?gg??>|~s<?3s???''<~???O<??~Og????~yy?????g??O?9??g?ϙ?y???>y?|?�Cs|??N̟?3g???>sg?L??3O?3y???>3ϟ?'33?~||g???O?|g<??6Yb???s~y<??O?ϟ?ϟ?g?????ϟ ?s?s??<?g???|g$3?f?真?�Cy~Iϟ?'?'O<<?'&?O3>g~gg?ϟ?g>sϓ9?L><??g??<~?<?'3??g?XYw??gϟ?|?s??y??2g<s??|>g???????ɟ??s<g?<'?s|y>>|<??3g??ygys?s~~?????$s???y?g<???O3?y??3'??ϟ9?????9?O4Yp9???3s<'?????~<'?yy????g??ϟ????9?O?ɟ??>?9???3?? ?s|???93???????<O?fss??>?~g??'g???~g???3g?3??ϟ??s Yy???s?9ϟϟ9<?|???9??|>~Ϝ?yg?3???f3>??''???|?'????$??'>'?'9??9?9|y'|??|@O?<|??>3s??&~3???????<~r'??s~???'???s3ϟ??ϙ?9?|'?N<??Y~???O??'<?????O???9?????|''~?y???3>????s?????9??93<?|??ϒ?9?@?????3OI????O???&s????ϟy~'?<???<?O?~??<???<?|<3????gYS3y9?'?93??>?ϟ?y3???O?y????????<<3O???<9ϓ???9?~O??�Cg?<3'?9gy?s?~'?y??9y>?>O???3?9?y|'s?<9O?Ϟ|9?~?g?3???zY T?y??<>yIg9<3??>|?gg??>|~s<?3s???''<~?dϟy3?~Og????~yy?????g??O?9??g???~?3????|??'???O???>?'???f??'O>?>s3<?L??3O???s???ɟ???y<????y?9g??s<=Y ]&gO??|ys??g9?>~gO?~???<?<???y?ϟ?????3????9&9I93?g9>?|g<??y~Iϟ?'?'O<<?'&?O3>g~gg??ϟ?>sϓ9?L><??g??<~?<?'&Y Z???y??r??gϟ?|?s??y??2g<s????y??~?'??????ɟ??s<g?<'$9'?󟟟'|???>~?9~y?yO?g?'O<s's????O̓?$??9~?>???|||9??=Y O33y?99ϟy???3s<'?????~<'s???????g??ϟ????9?O?ɟ??>?9??'??'?y??y??9??39gsϟ'??|?ssO<3'??3???yϟd~?yϟ??3???~??O@1Y H?'?????>Ny?<N??~?Oys3?3ϟg???>s?>9?ssy|~???9?s'???~O9????'??|ϟ?|?II?D<<O?<|??>3s??&~3???9??<~r'??s~???'???s3ϟ??ϙ?9*YA???|'???3?sO?s???????9>??s????9<'??$?????ϟy??ϟ??'<3@?????~?|9>s~?9ϟϟs??????3?g?'?????9?????g>s|~|???~sO3kYF?g9?<???~g?<?'y??g?s>|y?>3?'g?OO??3??ϓs?>g?y???'??|<3????gyϟ?|'Oɟϓsϟ9?g'??|?ϙ?'?3|?'???ϟsO'gL?Oy????ϟ???>yϟ?g?9?<??~˛Y???>O??|y??<>yIg9<3??>|?gg??>|~s<?3s??ϟ?'??????dϟy3?~Og????~yy?????g??O?~?g?3??????s|??N̟?3g?'O>?>s3<9?s~??$3y???>3ϟ?'3Y'y3?~<gO??|ys??g9?>~gO?~???<?<??g?????ϟ?????3????9&9@|g9<'?3g???O?3O???'>?<?~?O??ϟgy9??>|?3ϓ?9??>L??93?<?ssY?$3?f?真?O<?y9ss<?<?????̙|?<??d?<????O?<?gOg~?>???'??s?�C~?<?'3??g?ϟN???????f????g?????$s???y?~?93>y?ϟ????$?<??y??Y'?s|y>??9?f~?????'~????'|?'3yy>??ϟ??><?3<'y<~>g?>3|>|?????|???|?fg???|?ssO<?y?g???ϟ|9?OOs??<?Y??ɟ??>?9???3????s?9ϟϟ9<?|???9??|>~?|ϟϟ~'?3??g?<~O???|?'????$??'???<<O?<|??>332g>????9??<~r'??s~???'???sY�?|?II???|'???3?sO?s???????'O??>?s????9<'??$?????ϟy?93ϟ??ϙ?9?|'?N<???????3OI????O???3?g?'|?yO9ϟy~'?<???<?O?~??<?VHY ?????9??93<?|??ϒ?9??瓞|3|?3'??3~ϟϟ?y3???O?y?????9?93???O?~>O?D|~|???~sO3?33O9>?s?9???r??s~rs?rs??'|?'?????<????d????g<>|?Y?9?~|<?g??3?<???'Oϟ????'??ϟL??|???|??~g>|?>s$??????3>I????s~~~~s?|9?~?g?3??????s|???>?'???f??'O>?>s3<9?s~??$3y???>i Y#'~yy?????g??O?9??g?ϙ?y???>y?|?9O|?????????>?'?<>?~?ϟ????'??O@3ϟ?'33?~||g???O?|g<??y~Iϟ?'?'O??3?y?|rg?|?ϟ?>sϓ9?L|Y$33??ɟy??????y??r??gϟ?|?s~s?9?>~y&>|?O??~|?y??~?'??????ɟ??<?ss|?O|9'?󟟟'|???>~?9~y?yO?g??~???O?<??s's????O̓?$??9~?>NY-?s<g?<'?s|y>??9?f~??y332?'????'|?'3yy>?y??3'??ϟ9?????9?ϟ???ϟ?'?ϟ?<O?393???????<O?fss???gs'???>pY*???ϟ?rg&|??Or<?Ϟ?39?g>>??Oys3?3ϟg???>s?>9?ssyOϟ|?????|ϟ??>O9?s?|??O????9??~<?3?????????9???̙ϟ<y~|???>O39???gg3Y?9???ϟ????39???9?????<?9???????9>?3y?̟>?Oϟs???'???s3ϟ??ϙ?9?|'?N<???????3Oϟs??????3?g?'|?yO9ϟy~'?<???<?O?:xY8???>????3?>s9O̜??'?3~gO?y9?'?9??3~ϟ???O?s?g?sLy?????<|@y?'??9??y?y9?????39??<g?<3'?9gy?sg'??>gO?3??9?y|'s?<9SY1??~>O?9?~|<?g??3?<???'Oϟ????'??9ϟ??ϟ|??~g>|?>s$??????3>I??�C>?9ɟϟ??y?yϟ'??>?~?3????|0|??N̟?3g???>sg?L??3O???s???Y6'??s??|ϟ<gy??|ys??ϟ?????~?????ɟ???y<????y?9g??s?ɜy|??'s??~Iϟ?'?'O<<?'&?O3>g~gg?ϟ?g3??>OY ?Oy????d3??ɟy??????y??r??gϟ????|3?~s?9?>~y&>|?O??~|?y??~?'???@?9??>L??93?<?ss|?O|9'?󟟟'|???>~?9~y?<~g???~???O?<??s's????O̓?$??9~TY!9???Oϟg'?~?9'?sg??9~g??9??s 9?f~?????'~?~y??????�C?>???|||9???'??'?y??y??9?|>|?????|???|?fg????????9>3'??3???yY"<?g??ϟ????9?O?ɟ??>?9???3????sϟ??'|sgg3|ϟϟ~'?3??g?<~O???|?�Bg??'g???~g???3g?3??ϟ??s???????????????ϟ?|ɟ??<?y?y#��jUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPTUU*UUUtTUWҪUU]UUURUUU]UU]RꪪuҪWUUUUU]UUUUWUUUUUUwUUtUUjUUUUtUUrҪuUUUUUUURUUUT]UU\uUʾUWʪUUUUrꪪUU]U)URRUUUUU%UTUUUUUWUUUUU*.UUUUVUU]UjUUUU]U*UU*UW*uUU]URUW]UTUUUJUU]jU*U.ꪪUU]UUUUP��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/plugin/�����������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�016370� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/plugin/test_test_plugins.py���������������������������������������������������0000644�0001750�0001750�00000000756�12161032160�022523� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from tests import add from tests.plugin import PluginTestCase class TTestPlugins(PluginTestCase): def test_pickle(self): plugin = self.plugins["pickle_test"] instance = plugin() instance.enabled() instance.disabled() add(TTestPlugins) ������������������quodlibet-3.0.2/tests/plugin/test_html.py�����������������������������������������������������������0000644�0001750�0001750�00000002162�12173201744�020751� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License as # published by the Free Software Foundation. from tests import add from tests.plugin import PluginTestCase from quodlibet import config from quodlibet import util from quodlibet.formats._audio import AudioFile SONGS = [ AudioFile({"title": "one", "artist": "piman", "~filename": "/dev/null"}), AudioFile({"title": u"\xf6\xe4\xfc", "~filename": "/dev/zero"}), AudioFile({"title": "three", "artist": "boris", "~filename": "/bin/ls"}) ] for song in SONGS: song.sanitize() class THTMLExport(PluginTestCase): def setUp(self): config.init() self.mod = self.modules["Export to HTML"] self.to_html = self.mod.to_html def test_empty_export(self): text = self.to_html([]) self.failUnless("<html" in text) def test_export(self): text = self.to_html(SONGS) self.failUnless(u"\xf6\xe4\xfc".encode("utf-8") in text) def tearDown(self): config.quit() add(THTMLExport) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/plugin/test_mediaserver.py����������������������������������������������������0000644�0001750�0001750�00000003741�12173212464�022320� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License as # published by the Free Software Foundation. from gi.repository import Gtk import dbus from tests import add from tests.plugin import PluginTestCase from quodlibet import library from quodlibet import app class TMediaServer(PluginTestCase): @classmethod def setUpClass(cls): app.library = library.init() cls.plugin = cls.plugins["mediaserver"] def setUp(self): self.m = self.plugin() self.m.enabled() self._replies = [] self._args = { "reply_handler": self._reply, "error_handler": self._error } def _reply(self, *args): self._replies.append(args) def _error(self, *args): self.failIf(args) def _wait(self): while not self._replies: Gtk.main_iteration_do(False) return self._replies.pop(0) def _entry_props_iface(self): bus = dbus.SessionBus() obj = bus.get_object("org.gnome.UPnP.MediaServer2.QuodLibet", "/org/gnome/UPnP/MediaServer2/QuodLibet") return dbus.Interface( obj, dbus_interface="org.freedesktop.DBus.Properties") def test_entry_name(self): iface = self._entry_props_iface() iface.Get("org.gnome.UPnP.MediaObject2", "DisplayName", **self._args) self.failUnless("Quod Libet" in self._wait()[0]) def test_name_owner(self): bus = dbus.SessionBus() self.failUnless( bus.name_has_owner("org.gnome.UPnP.MediaServer2.QuodLibet")) def tearDown(self): bus = dbus.SessionBus() self.failUnless( bus.name_has_owner("org.gnome.UPnP.MediaServer2.QuodLibet")) self.m.disabled() self.failIf( bus.name_has_owner("org.gnome.UPnP.MediaServer2.QuodLibet")) del self.m add(TMediaServer) �������������������������������quodlibet-3.0.2/tests/plugin/__init__.py������������������������������������������������������������0000644�0001750�0001750�00000001313�12161032160�020471� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase from quodlibet.util.modulescanner import ModuleScanner from quodlibet.plugins import list_plugins import sys import os # Nasty hack to allow importing of plugins... PLUGIN_DIR = os.path.abspath(os.path.join(sys.path[0], '../plugins')) TEST_PLUGIN_DIR = os.path.join(os.path.dirname(__file__), "test_plugins") ms = ModuleScanner([PLUGIN_DIR, TEST_PLUGIN_DIR]) ms.rescan() plugins = {} modules = {} for name, module in ms.modules.iteritems(): for plugin in list_plugins(module): plugins[plugin.PLUGIN_ID] = plugin modules[plugin.PLUGIN_ID] = module class PluginTestCase(TestCase): """Base class for all plugin tests""" plugins = plugins modules = modules ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/plugin/test_custom_commands.py������������������������������������������������0000644�0001750�0001750�00000001737�12161032160�023176� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from quodlibet.qltk.data_editors import JSONBasedEditor from quodlibet.util.json_data import JSONObjectDict from quodlibet import config from tests import add from tests.plugin import PluginTestCase CustomCommands = Command = None class TCustomCommands(PluginTestCase): """Test CustomCommands plugin and associated classes""" def setUp(self): globals().update(vars(self.modules["CustomCommands"])) config.init() self.cmd_list = CustomCommands.DEFAULT_COMS self.commands = JSONObjectDict.from_list(self.cmd_list) def tearDown(self): config.quit() def test_JSONBasedEditor(self): ed = JSONBasedEditor(Command, self.commands, None, "title") ed.show_now() ed.destroy() add(TCustomCommands) ���������������������������������quodlibet-3.0.2/tests/plugin/test_plugins/����������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�021110� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/plugin/test_plugins/pickle_test.py��������������������������������������������0000644�0001750�0001750�00000001363�12161032160�023765� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import shelve from tempfile import mkstemp from quodlibet.plugins.events import EventPlugin class PickleMe(object): pass class PickleTestPlugin(EventPlugin): PLUGIN_ID = "pickle_test" PLUGIN_NAME = "This is a test" def enabled(self): # http://code.google.com/p/quodlibet/issues/detail?id=1093 fd, filename = mkstemp('.shelve') os.close(fd) os.unlink(filename) s = shelve.open(filename) s["foobar"] = PickleMe() s.close() os.unlink(filename) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/plugin/test_songsmenu.py������������������������������������������������������0000644�0001750�0001750�00000003601�12173212464�022023� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from tests import add from tests.plugin import PluginTestCase from quodlibet import config from quodlibet.qltk.songsmenu import SongsMenuPluginHandler from quodlibet.formats._audio import AudioFile from quodlibet.library import SongLibrary, SongLibrarian SONGS = [ AudioFile({"title": "one", "artist": "piman", "~filename": "/dev/null"}), AudioFile({"title": "two", "artist": "mu", "~filename": "/dev/zero"}), AudioFile({"title": "three", "artist": "boris", "~filename": "/bin/ls"}) ] SONGS.sort() for song in SONGS: song.sanitize() class TPluginsSongSMenu(PluginTestCase): def setUp(self): config.init() self.h = SongsMenuPluginHandler() library = SongLibrary() library.librarian = SongLibrarian() self.lib = library self.parent = Gtk.Window() def tearDown(self): self.lib.destroy() self.parent.destroy() config.quit() def test_init(self): for id_, plugin in self.plugins.iteritems(): if self.h.plugin_handle(plugin): self.h.plugin_enable(plugin, None) self.h.handle(id_, None, None, []) self.h.plugin_disable(plugin) def test_handle_single(self): # This test pops up windows and needs user input.. so disabled # Still useful, until we have unit tests for all plugins.. return for id_, plugin in self.plugins.iteritems(): if self.h.plugin_handle(plugin): self.h.plugin_enable(plugin, None) self.h.handle(id_, self.lib, self.parent, SONGS) self.h.plugin_disable(plugin) add(TPluginsSongSMenu) �������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/plugin/test_mpris.py����������������������������������������������������������0000644�0001750�0001750�00000016627�12173212464�021153� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012,2013 Christoph Reiter <christoph.reiter@gmx.at> # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License as # published by the Free Software Foundation. from gi.repository import Gtk import dbus from tests import add from tests.plugin import PluginTestCase from quodlibet.formats._audio import AudioFile from quodlibet import config from quodlibet.qltk.quodlibetwindow import QuodLibetWindow from quodlibet import library from quodlibet import browsers from quodlibet import player from quodlibet import app A1 = AudioFile( {'album': u'greatness', 'title': 'excellent', 'artist': 'fooman\ngo', '~#lastplayed': 1234, '~#rating': 0.75, '~filename': '/foo a/b', "~#length": 123, "albumartist": "aa\nbb", "bpm": "123.5", "tracknumber": "6/7"}) A1.sanitize() A2 = AudioFile( {'album': u'greatness2\ufffe', 'title': 'superlative', 'artist': u'fooman\ufffe', '~#lastplayed': 1234, '~#rating': 1.0, '~filename': '/foo'}) A2.sanitize() class TMPRIS(PluginTestCase): @classmethod def setUpClass(cls): config.init() browsers.init() backend = player.init("nullbe") app.library = library.init() app.player = backend.init(app.librarian) app.window = QuodLibetWindow(app.library, app.player) cls.plugin = cls.plugins["mpris"] def setUp(self): app.window.songlist.set_songs([A1, A2]) app.player.go_to(None) self.m = self.plugin() self.m.enabled() self._replies = [] def test_name_owner(self): bus = dbus.SessionBus() self.failUnless(bus.name_has_owner("org.mpris.quodlibet")) def _main_iface(self): bus = dbus.SessionBus() obj = bus.get_object("org.mpris.quodlibet", "/org/mpris/MediaPlayer2") return dbus.Interface(obj, dbus_interface="org.mpris.MediaPlayer2") def _prop(self): bus = dbus.SessionBus() obj = bus.get_object("org.mpris.quodlibet", "/org/mpris/MediaPlayer2") return dbus.Interface(obj, dbus_interface="org.freedesktop.DBus.Properties") def _player_iface(self): bus = dbus.SessionBus() obj = bus.get_object("org.mpris.quodlibet", "/org/mpris/MediaPlayer2") return dbus.Interface(obj, dbus_interface="org.mpris.MediaPlayer2.Player") def _reply(self, *args): self._replies.append(args) def _error(self, *args): self.failIf(args) def _wait(self): while not self._replies: Gtk.main_iteration_do(False) return self._replies.pop(0) def test_main(self): args = {"reply_handler": self._reply, "error_handler": self._error} piface = "org.mpris.MediaPlayer2" app.window.hide() self.failIf(app.window.get_visible()) self._main_iface().Raise(**args) self.failIf(self._wait()) self.failUnless(app.window.get_visible()) app.window.hide() props = { "CanQuit": dbus.Boolean(True), "CanRaise": dbus.Boolean(True), "CanSetFullscreen": dbus.Boolean(False), "HasTrackList": dbus.Boolean(False), "Identity": dbus.String("Quod Libet"), "DesktopEntry": dbus.String("quodlibet"), "SupportedUriSchemes": dbus.Array(), } for key, value in props.iteritems(): self._prop().Get(piface, key, **args) resp = self._wait()[0] self.failUnlessEqual(resp, value) self.failUnless(isinstance(resp, type(value))) self._prop().Get(piface, "SupportedMimeTypes", **args) self.failUnless("audio/vorbis" in self._wait()[0]) def test_player(self): args = {"reply_handler": self._reply, "error_handler": self._error} piface = "org.mpris.MediaPlayer2.Player" props = { "PlaybackStatus": dbus.String("Stopped"), "LoopStatus": dbus.String("None"), "Rate": dbus.Double(1.0), "Shuffle": dbus.Boolean(False), "Volume": dbus.Double(1.0), "Position": dbus.Int64(0), "MinimumRate": dbus.Double(1.0), "MaximumRate": dbus.Double(1.0), "CanGoNext": dbus.Boolean(True), "CanGoPrevious": dbus.Boolean(True), "CanPlay": dbus.Boolean(True), "CanPause": dbus.Boolean(True), "CanSeek": dbus.Boolean(True), "CanControl": dbus.Boolean(True), } for key, value in props.iteritems(): self._prop().Get(piface, key, **args) resp = self._wait()[0] self.failUnlessEqual(resp, value) self.failUnless(isinstance(resp, type(value))) def test_metadata(self): args = {"reply_handler": self._reply, "error_handler": self._error} piface = "org.mpris.MediaPlayer2.Player" # No song case self._prop().Get(piface, "Metadata", **args) resp = self._wait()[0] self.failUnlessEqual(resp["mpris:trackid"], "/net/sacredchao/QuodLibet/NoTrack") self.failUnless(isinstance(resp["mpris:trackid"], dbus.ObjectPath)) # go to next song self._player_iface().Next(**args) self._wait() self._prop().Get(piface, "Metadata", **args) resp = self._wait()[0] # mpris stuff self.failIf(resp["mpris:trackid"].startswith("/org/mpris/")) self.failUnless(isinstance(resp["mpris:trackid"], dbus.ObjectPath)) self.failUnlessEqual(resp["mpris:length"], 123 * 10 ** 6) self.failUnless(isinstance(resp["mpris:length"], dbus.Int64)) # list text values self.failUnlessEqual(resp["xesam:artist"], ["fooman", "go"]) self.failUnlessEqual(resp["xesam:albumArtist"], ["aa", "bb"]) # single text values self.failUnlessEqual(resp["xesam:album"], "greatness") self.failUnlessEqual(resp["xesam:title"], "excellent") self.failUnlessEqual(resp["xesam:url"], "file:///foo%20a/b") # integers self.failUnlessEqual(resp["xesam:audioBPM"], 123) self.failUnless(isinstance(resp["xesam:audioBPM"], dbus.Int32)) self.failUnlessEqual(resp["xesam:trackNumber"], 6) self.failUnless(isinstance(resp["xesam:trackNumber"], dbus.Int32)) # rating self.failUnlessAlmostEqual(resp["xesam:userRating"], 0.75) self.failUnless(isinstance(resp["xesam:userRating"], dbus.Double)) # time from time import strptime from calendar import timegm seconds = timegm(strptime(resp["xesam:lastUsed"], "%Y-%m-%dT%H:%M:%S")) self.failUnlessEqual(seconds, 1234) # go to next song with invalid utf-8 self._player_iface().Next(**args) self._wait() self._prop().Get(piface, "Metadata", **args) resp = self._wait()[0] self.failUnlessEqual(resp["xesam:album"], u'greatness2\ufffd') self.failUnlessEqual(resp["xesam:artist"], [u'fooman\ufffd']) def tearDown(self): bus = dbus.SessionBus() self.failUnless( bus.name_has_owner("org.mpris.quodlibet")) self.m.disabled() self.failIf(bus.name_has_owner("org.mpris.quodlibet")) del self.m @classmethod def tearDownClass(cls): app.window.destroy() config.quit() add(TMPRIS) ���������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/plugin/test_prefs.py����������������������������������������������������������0000644�0001750�0001750�00000001354�12173212464�021127� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from tests import add from tests.plugin import PluginTestCase from quodlibet import config class TPrefs(PluginTestCase): def setUp(self): config.init() def tearDown(self): config.quit() def test_all(self): for id_, plugin in self.plugins.iteritems(): if hasattr(plugin, "PLUGIN_INSTANCE"): plugin = plugin() if hasattr(plugin, "PluginPreferences"): plugin.PluginPreferences(Gtk.Window()) add(TPrefs) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/plugin/test_titlecase.py������������������������������������������������������0000644�0001750�0001750�00000006500�12161032160�021751� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter <christoph.reiter@gmx.at>, # Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License as # published by the Free Software Foundation. from tests import add from tests.plugin import PluginTestCase from quodlibet import config, util humanise = None class TTitlecase(PluginTestCase): def setUp(self): globals().update(vars(self.modules["Title Case"])) config.init() self.plugin = self.plugins["Title Case"] def test_no_all_caps(self): self.plugin.config_set("allow_all_caps", True) p = self.plugin("", "") self.failUnlessEqual(p.activated("", "foo bar")[0][1], "Foo Bar") self.failUnlessEqual(p.activated("", "FOO BAR")[0][1], "FOO BAR") def test_all_caps(self): self.plugin.config_set("allow_all_caps", False) p = self.plugin("", "") self.failUnlessEqual(p.activated("", "foo bar")[0][1], "Foo Bar") self.failUnlessEqual(p.activated("", "FOO BAR")[0][1], "Foo Bar") def title(self, value): """Mimic the plugin's basic operation without config etc""" value = util.title(value) return humanise(value) def test_english_human_title_case(s): """Checks human humanise casing, assuming that it defaults to enabled""" s.assertEquals(u"System of a Down", s.title(u"System Of A Down")) s.assertEquals(u"The Man with the Golden Gun", s.title(u"The Man With The Golden gun")) s.assertEquals(u"Live and Let Die", s.title(u"Live And Let Die")) # s.assertEquals(u"The Vitamins are in my Fresh California Raisins", # Updated to match modifications to is/are/am rules: s.assertEquals(u"The Vitamins Are in My Fresh California Raisins", s.title(u"the vitamins are in my fresh california raisins")) s.assertEquals(u"Dig In", s.title(u"dig in")) s.assertEquals(u"In da Club", s.title(u"in da club")) # See Issue 616 s.assertEquals(u" Dodgy Are the Spaces ", s.title(u" dodgy are the spaces ")) s.assertEquals(u"Space: The Final Frontier", s.title(u"Space: the final frontier")) s.assertEquals(u"- Out of Space", s.title(u"- out Of space")) def test_tricky_apostrophes(s): s.assertEquals(u"Guns 'n' Roses", s.title(u"Guns 'n' roses")) s.assertEquals(u"Scarlett O'Hara", s.title(u"scarlett o'hara")) s.assertEquals(u"Scarlett O'Hara", s.title(u"Scarlett O'hara")) s.assertEquals(u"No Life 'til Leather", s.title(u"no life 'til leather")) def test_english_humanise_sentences(s): """Checks trickier human title casing, also assuming it's enabled""" s.assertEquals(u"Buffy the Vampire Slayer: The Album", s.title(u"Buffy the vampire slayer: the album")) s.assertEquals(u"Killing Is My Business... and Business Is Good!", s.title(u"Killing is my business... And business is good!")) s.assertEquals(u"Herbie Hancock - The Definitive", s.title(u"herbie hancock - the definitive")) def tearDown(self): config.quit() add(TTitlecase) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/plugin/test_randomalbum.py����������������������������������������������������0000644�0001750�0001750�00000006401�12161032160�022275� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from quodlibet.util.collection import Album from quodlibet.formats._audio import AudioFile from tests import add from tests.plugin import PluginTestCase from quodlibet.util.dprint import print_d A1S1 = AudioFile( {'album': 'greatness', 'title': 'excellent', 'artist': 'fooman', '~#lastplayed': 1234, '~#rating': 0.75}) A1S2 = AudioFile( {'album': 'greatness', 'title': 'superlative', 'artist': 'fooman', '~#lastplayed': 1234, '~#rating': 1.0}) A1 = Album(A1S1) A1.songs = set([A1S1, A1S2]) A2S1 = AudioFile({'album': 'mediocrity', 'title': 'blah', 'artist': 'fooman', '~#lastplayed': 1234}) A2S2 = AudioFile({'album': 'mediocrity', 'title': 'meh', 'artist': 'fooman', '~#lastplayed': 1234}) A2 = Album(A2S1) A2.songs = set([A2S1, A2S2]) A3S1 = AudioFile( {'album': 'disappointment', 'title': 'shameful', 'artist': 'poorman', '~#lastplayed': 2345, '~#rating': 0.25}) A3S2 = AudioFile( {'album': 'disappointment', 'title': 'zero', 'artist': 'poorman', '~#lastplayed': 2345, '~#rating': 0.0}) A3S3 = AudioFile( {'album': 'disappointment', 'title': 'lame', 'artist': 'poorman', '~#lastplayed': 0, '~#rating': 0.25}) A3 = Album(A3S1) A3.songs = set([A3S1, A3S2, A3S3]) for song in [A1S1, A1S2, A2S1, A2S2, A3S1, A3S2, A3S3]: song["length"] = 100 class TRandomAlbum(PluginTestCase): """Some basic tests for the random album plugin algorithm""" WEIGHTS = {'rating': 0, 'added': 0, 'laststarted': 0, 'lastplayed': 0, 'length': 0, 'skipcount': 0, 'playcount': 0} def setUp(self): self.plugin = self.plugins["Random Album Playback"]() self.albums = [A1, A2, A3] def get_winner(self, albums): print_d("Weights: %s " % self.plugin.weights) scores = self.plugin._score(albums) print_d("Scores: %s" % scores) return max(scores)[1] def test_score_rating(self): weights = self.plugin.weights = self.WEIGHTS.copy() weights['rating'] = 1 self.failUnlessEqual(A1, self.get_winner(self.albums)) def test_score_length(self): weights = self.plugin.weights = self.WEIGHTS.copy() weights['length'] = 1 self.failUnlessEqual(A3, self.get_winner(self.albums)) def test_score_lastplayed(self): weights = self.plugin.weights = self.WEIGHTS.copy() weights['lastplayed'] = 1 self.failUnlessEqual(A3, self.get_winner(self.albums)) def test_score_lastplayed_added(self): weights = self.plugin.weights = self.WEIGHTS.copy() weights['lastplayed'] = 1 # No data here weights['added'] = 1 self.failUnlessEqual(A3, self.get_winner(self.albums)) def test_score_mixed(self): print_d("Starting.") weights = self.plugin.weights = self.WEIGHTS.copy() weights['length'] = 1 weights['lastplayed'] = 2 weights['rating'] = 1 # A3 is #3 rating, #1 in lastplayed, #1 in length self.failUnlessEqual(A3, self.get_winner(self.albums)) weights['lastplayed'] = 1 weights['rating'] = 2 weights['length'] = 0.5 # A1 is #1 for Rating, #2 for lastplayed, #2 or 3 length self.failUnlessEqual(A1, self.get_winner(self.albums)) add(TRandomAlbum) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_quodlibetwindow.py��������������������������������������������������0000644�0001750�0001750�00000001331�12161032160�022746� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from tests import TestCase, add from quodlibet.qltk.quodlibetwindow import QuodLibetWindow from quodlibet import library from quodlibet import player from quodlibet import config class TQuodLibetWindow(TestCase): def setUp(self): config.init() def tearDown(self): config.quit() def test_window(self): lib = library.init() pl = player.init("nullbe").init(lib.librarian) window = QuodLibetWindow(lib, pl) window.destroy() add(TQuodLibetWindow) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_renamefiles.py������������������������������������������������������0000644�0001750�0001750�00000003437�12161032160�022031� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.renamefiles import SpacesToUnderscores, StripWindowsIncompat from quodlibet.qltk.renamefiles import StripDiacriticals, StripNonASCII from quodlibet.qltk.renamefiles import Lowercase class TFilter(TestCase): def setUp(self): self.c = self.Kind() def tearDown(self): self.c.destroy() def test_empty(self): v = self.c.filter("", u"") self.failUnlessEqual(v, "") self.failUnless(isinstance(v, unicode)) def test_safe(self): self.failUnlessEqual(self.c.filter("", u"safe"), "safe") class TSpacesToUnderscores(TFilter): Kind = SpacesToUnderscores def test_conv(self): self.failUnlessEqual(self.c.filter("", "foo bar "), "foo_bar_") add(TSpacesToUnderscores) class TStripWindowsIncompat(TFilter): Kind = StripWindowsIncompat def test_conv(self): self.failUnlessEqual(self.c.filter("", 'foo\\:*?;"<>|'), "foo_________") def test_ends_with_dots_or_spaces(self): self.failUnlessEqual(self.c.filter("", 'foo. . '), "foo. ._") self.failUnlessEqual(self.c.filter("", 'foo. /bar .'), "foo._/bar _") add(TStripWindowsIncompat) class TStripDiacriticals(TFilter): Kind = StripDiacriticals def test_conv(self): self.failUnlessEqual(self.c.filter("", u"\u00c1 test"), "A test") add(TStripDiacriticals) class TStripNonASCII(TFilter): Kind = StripNonASCII def test_conv(self): self.failUnlessEqual( self.c.filter("", u"foo \u00c1 \u1234"), "foo _ _") add(TStripNonASCII) class TLowercase(TFilter): Kind = Lowercase def test_conv(self): self.failUnlessEqual( self.c.filter("", u"foobar baz"), "foobar baz") self.failUnlessEqual( self.c.filter("", u"Foobar.BAZ"), "foobar.baz") add(TLowercase) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_cover.py������������������������������������������������������������0000644�0001750�0001750�00000002057�12173213426�020663� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import tempfile import os from gi.repository import Gtk, GdkPixbuf, Gdk from tests import TestCase, add from quodlibet import config from quodlibet.formats._audio import AudioFile from quodlibet.qltk.cover import CoverImage, BigCenteredImage, ResizeImage class TCoverImage(TestCase): def setUp(self): config.init() self.fn = tempfile.mkstemp()[1] pb = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 150, 10) pb.savev(self.fn, "png", [], []) def tearDown(self): config.quit() os.remove(self.fn) def test_set_song(self): c = CoverImage() c.set_song(AudioFile({"~filename":"woo"})) event = Gdk.Event.new(Gdk.EventType.BUTTON_PRESS) event.type.button = 1 c.emit("button-press-event", event) c.destroy() def test_big_window(self): w = BigCenteredImage("foobar", self.fn) w.destroy() def test_resize(self): w = ResizeImage(False) w.set_path(self.fn) w.set_path(None) w.destroy() add(TCoverImage) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_library_librarians.py����������������������������������������������������0000644�0001750�0001750�00000013435�12173212464�022367� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from gi.repository import Gtk from tests import TestCase, add from quodlibet.library import SongLibrarian from quodlibet.library.libraries import Library, SongFileLibrary from quodlibet.library.librarians import Librarian from tests.test_library_libraries import Fake, Frange, FakeSong, FSrange class TLibrarian(TestCase): Fake = Fake Frange = staticmethod(Frange) Librarian = Librarian Library = Library def setUp(self): self.librarian = self.Librarian() self.Library.librarian = self.librarian self.lib1 = self.Library("One") self.lib2 = self.Library("Two") self.added_1 = [] self.changed_1 = [] self.removed_1 = [] self.added_2 = [] self.changed_2 = [] self.removed_2 = [] self.added = [] self.changed = [] self.removed = [] self.lib1.connect_object('added', list.extend, self.added_1) self.lib1.connect_object('changed', list.extend, self.changed_1) self.lib1.connect_object('removed', list.extend, self.removed_1) self.lib2.connect_object('added', list.extend, self.added_2) self.lib2.connect_object('changed', list.extend, self.changed_2) self.lib2.connect_object('removed', list.extend, self.removed_2) self.librarian.connect_object('added', list.extend, self.added) self.librarian.connect_object('changed', list.extend, self.changed) self.librarian.connect_object('removed', list.extend, self.removed) def test_libraries(self): self.failUnlessEqual(len(self.librarian.libraries), 2) self.failUnless(self.lib1 in self.librarian.libraries.values()) self.failUnless(self.lib2 in self.librarian.libraries.values()) def test_register_at_instantiation(self): try: lib = self.Library("Three") self.failUnlessEqual(len(self.librarian.libraries), 3) finally: lib.destroy() def test_register_later(self): try: lib = self.Library() self.failUnlessEqual(len(self.librarian.libraries), 2) self.librarian.register(lib, "Three") self.failUnlessEqual(len(self.librarian.libraries), 3) finally: lib.destroy() def test_register_exists(self): self.failUnlessRaises(ValueError, self.Library, "Two") def test_unregister(self): self.lib2.destroy() self.failUnlessEqual(len(self.librarian.libraries), 1) self.failUnless(self.lib1 in self.librarian.libraries.values()) self.failIf(self.lib2 in self.librarian.libraries.values()) self.lib1.destroy() self.failUnlessEqual(len(self.librarian.libraries), 0) def test_added(self): self.lib1.add(self.Frange(12)) self.lib2.add(self.Frange(12, 24)) self.failUnlessEqual(sorted(self.added), self.Frange(24)) def test_removed(self): self.lib1.add(self.Frange(12)) self.lib2.add(self.Frange(12, 24)) self.lib1.remove([self.Fake(9)]) self.lib2.remove([self.Fake(16)]) self.failUnlessEqual(self.removed, [self.Fake(9), self.Fake(16)]) def test_changed(self): self.lib1.add(self.Frange(12)) self.lib2.add(self.Frange(12, 24)) self.librarian.changed(self.Frange(6, 18)) while Gtk.events_pending(): Gtk.main_iteration() self.failUnlessEqual(sorted(self.changed), self.Frange(6, 18)) self.failUnlessEqual(self.changed_1, self.Frange(6, 12)) self.failUnlessEqual(self.changed_2, self.Frange(12, 18)) def test___getitem__(self): self.lib1.add(self.Frange(12)) self.lib2.add(self.Frange(12, 24)) self.failUnlessEqual(self.librarian[10], 10) new = self.Fake(100) new.key = 200 self.lib2.add([new]) self.failUnlessEqual(self.librarian[200], new) def test___getitem___not_present(self): self.lib1.add(self.Frange(12)) self.lib2.add(self.Frange(12, 24)) self.lib2.remove([self.Fake(16)]) self.failUnlessRaises(KeyError, self.librarian.__getitem__, 16) self.failUnlessRaises(KeyError, self.librarian.__getitem__, 99) def test___contains__(self): self.lib1.add(self.Frange(12)) self.lib2.add(self.Frange(12, 24)) new = self.Fake(100) new.key = 200 self.lib1.add([new]) for value in [1, 2, 15, 22, 200, new]: self.failUnless(value in self.librarian, "didn't find %d" % value) for value in [-1, 25, 50, 100]: self.failIf(value in self.librarian, "found %d" % value) def tearDown(self): self.Library.librarian = None self.lib1.destroy() self.lib2.destroy() self.librarian.destroy() class TSongLibrarian(TLibrarian): Fake = FakeSong Frange = staticmethod(FSrange) Library = SongFileLibrary Librarian = SongLibrarian def test_tag_values(self): self.lib1.add(self.Frange(0, 30, 2)) self.lib2.add(self.Frange(1, 30, 2)) del(self.added[:]) self.failUnlessEqual(sorted(self.librarian.tag_values(20)), range(20)) self.failUnlessEqual(sorted(self.librarian.tag_values(0)), []) self.failIf(self.changed or self.added or self.removed) def test_rename(self): new = self.Fake(10) new.key = 30 self.lib1.add([new]) self.lib2.add([new]) self.librarian.rename(new, 20) while Gtk.events_pending(): Gtk.main_iteration() self.failUnlessEqual(new.key, 20) self.failUnless(new in self.lib1) self.failUnless(new in self.lib2) self.failUnless(new.key in self.lib1) self.failUnless(new.key in self.lib2) self.failUnlessEqual(self.changed_1, [new]) self.failUnlessEqual(self.changed_2, [new]) self.failUnless(new in self.changed) add(TSongLibrarian) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_entry.py������������������������������������������������������������0000644�0001750�0001750�00000006711�12161032160�020676� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import add, TestCase from quodlibet.qltk.entry import ValidatingEntry, UndoEntry from quodlibet.parse import Query import quodlibet.config class TValidatingEntry(TestCase): def setUp(self): quodlibet.config.init() self.entry = ValidatingEntry(Query.is_valid_color) def test_changed_simple(self): self.entry.set_text("valid") def test_changed_valid(self): self.entry.set_text("search = 'valid'") def test_changed_invalid(self): self.entry.set_text("=#invalid") def tearDown(self): self.entry.destroy() quodlibet.config.quit() add(TValidatingEntry) class TUndoEntry(TestCase): def setUp(self): self.entry = UndoEntry() def __equal(self, value): entry_val = self.entry.get_text().decode("utf-8") self.failUnlessEqual(value, entry_val) def __insert(self, text, pos): self.entry.insert_text(text, position=pos) self.entry.set_position(pos + len(text)) def __delete_left(self, start, end): self.entry.set_position(start) self.entry.delete_text(start, end) self.entry.set_position(start) def __delete_right(self, start, end): self.entry.set_position(end) self.entry.delete_text(start, end) self.entry.set_position(start) def test_undo_reset(self): entry = self.entry self.__insert("foo", 0) self.__insert("bar", 0) entry.reset_undo() entry.undo() entry.undo() entry.undo() self.__equal("barfoo") def test_undo_norm(self): entry = self.entry self.__insert("foo", 0) entry.undo() self.__equal("") entry.redo() self.__equal("foo") def test_undo_space(self): entry = self.entry self.__insert("f", 0) self.__insert(" ", 1) self.__insert("o", 2) entry.undo() self.__equal("f ") entry.undo() self.__equal("") def test_undo_insert_end(self): entry = self.entry self.__insert("f", 0) self.__insert("o", 1) self.__insert("o", 2) entry.undo() self.__equal("") entry.redo() self.__equal("foo") def test_undo_insert_end_2(self): entry = self.entry self.__insert("f", 0) self.__insert("o", 1) self.__insert("o", 2) self.__insert("bar", 3) entry.undo() self.__equal("foo") entry.redo() self.__equal("foobar") def test_undo_insert_middle(self): entry = self.entry self.__insert("foo", 0) self.__insert("b", 1) self.__equal("fboo") entry.undo() self.__equal("foo") entry.undo() self.__equal("") def test_undo_delete(self): entry = self.entry self.__insert("foobar", 0) self.__delete_left(3, 4) self.__equal("fooar") self.__delete_right(1, 3) self.__equal("far") entry.undo() self.__equal("fooar") entry.undo() self.__equal("foobar") def test_undo_delete_space(self): entry = self.entry self.__insert("foob ar", 0) self.__delete_right(6, 7) self.__equal("foob a") self.__delete_right(5, 6) self.__delete_right(4, 5) self.__delete_right(3, 4) self.__delete_right(2, 3) entry.undo() self.__equal("foob") def tearDown(self): self.entry.destroy() add(TUndoEntry) �������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_sortdialog.py�������������������������������������������������������0000644�0001750�0001750�00000000271�12161032160�021677� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.sortdialog import SortDialog class TSortDialog(TestCase): def test(self): SortDialog(None).destroy() add(TSortDialog) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_browser.py����������������������������������������������������������0000644�0001750�0001750�00000001112�12173213426�021217� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.browser import LibraryBrowser import quodlibet.config class TLibraryBrowser(TestCase): def setUp(self): quodlibet.config.init() def test_ctr(self): from quodlibet.library import SongLibrary from quodlibet.browsers.search import EmptyBar win = LibraryBrowser(EmptyBar, SongLibrary()) win.browser.emit("songs-selected", [], False) win.songlist.get_selection().emit("changed") win.destroy() def tearDown(self): quodlibet.config.quit() add(TLibraryBrowser) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_session.py����������������������������������������������������������0000644�0001750�0001750�00000000625�12161032160�021216� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import sys from tests import TestCase, add from quodlibet.qltk import session class TSession(TestCase): def test_session(self): session.init("quodlibet") add(TSession) �����������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/__init__.py�������������������������������������������������������������������0000644�0001750�0001750�00000011216�12173213426�017207� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- import glob from math import log import os import sys import unittest import tempfile import shutil from quodlibet.util.dprint import Colorise from unittest import TestCase suites = [] def add(t): assert issubclass(t, TestCase) suites.append(t) class Result(unittest.TestResult): TOTAL_WIDTH = 90 TEST_RESULTS_WIDTH = 50 TEST_NAME_WIDTH = TOTAL_WIDTH - TEST_RESULTS_WIDTH - 3 MAJOR_SEPARATOR = '=' * TOTAL_WIDTH MINOR_SEPARATOR = '-' * TOTAL_WIDTH USE_COLORS = True def _markup(self, call, text): try: return call(text) if self.use_colors or False else text except AttributeError: return text def bold(self, text): return self._markup(Colorise.bold, text) def red(self, text): return self._markup(Colorise.red, text) def green(self, text): return self._markup(Colorise.green, text) CHAR_SUCCESS, CHAR_ERROR, CHAR_FAILURE = '+', 'E', 'F' def __init__(self, test_name, num_tests, out=sys.stdout): super(Result, self).__init__() self.out = out self.use_colors = (self.USE_COLORS and self.out.isatty() and os.name != 'nt') if hasattr(out, "flush"): out.flush() pref = '%s (%d): ' % (self.bold(test_name), num_tests) line = pref + " " * (self.TEST_NAME_WIDTH - len(test_name) - 6 - int(num_tests and log(num_tests, 10) or 0)) out.write(line) def addSuccess(self, test): unittest.TestResult.addSuccess(self, test) self.out.write(self.green(self.CHAR_SUCCESS)) def addError(self, test, err): unittest.TestResult.addError(self, test, err) self.out.write(self.red(self.CHAR_ERROR)) def addFailure(self, test, err): unittest.TestResult.addFailure(self, test, err) self.out.write(self.red(self.CHAR_FAILURE)) def printErrors(self): succ = self.testsRun - (len(self.errors) + len(self.failures)) v = self.bold("%3d" % succ) cv = self.green(v) if succ == self.testsRun else self.red(v) count = self.TEST_RESULTS_WIDTH - self.testsRun self.out.write((" " * count) + cv + "\n") self.printErrorList('ERROR', self.errors) self.printErrorList('FAIL', self.failures) def printErrorList(self, flavour, errors): for test, err in errors: self.out.write(self.MAJOR_SEPARATOR + "\n") self.out.write(self.red("%s: %s\n" % (flavour, str(test)))) self.out.write(self.MINOR_SEPARATOR + "\n") self.out.write("%s\n" % err) class Runner(object): def run(self, test): suite = unittest.makeSuite(test) result = Result(test.__name__, len(suite._tests)) suite(result) result.printErrors() return len(result.failures), len(result.errors) def unit(run=[], filter_func=None, subdir=None, strict=False): path = os.path.dirname(__file__) if subdir is not None: path = os.path.join(path, subdir) import quodlibet quodlibet._dbus_init() quodlibet._gtk_init() quodlibet._python_init() # make glib warnings fatal if strict: from gi.repository import GLib GLib.log_set_always_fatal( GLib.LogLevelFlags.LEVEL_CRITICAL | GLib.LogLevelFlags.LEVEL_ERROR | GLib.LogLevelFlags.LEVEL_WARNING) for name in glob.glob(os.path.join(path, "test_*.py")): parts = filter(None, [__name__, subdir, os.path.basename(name)[:-3]]) __import__(".".join(parts), {}, {}, []) # create a user dir in /tmp user_dir = tempfile.mkdtemp(prefix="QL-TEST-") os.environ['QUODLIBET_USERDIR'] = user_dir import quodlibet.const reload(quodlibet.const) import quodlibet.config # emulate python2.7 behavior def setup_test(test): if hasattr(TestCase, "setUpClass"): return if hasattr(test, "setUpClass"): test.setUpClass() def teardown_test(test): if hasattr(TestCase, "setUpClass"): return if hasattr(test, "tearDownClass"): test.tearDownClass() runner = Runner() failures = errors = 0 use_suites = filter(filter_func, suites) for test in sorted(use_suites, key=repr): if (not run or test.__name__ in run or test.__module__[11:] in run): setup_test(test) df,de = runner.run(test) failures += df errors += de teardown_test(test) quodlibet.config.quit() try: shutil.rmtree(user_dir) except EnvironmentError: pass return failures, errors ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk___init__.py���������������������������������������������������������0000644�0001750�0001750�00000002353�12173212464�021304� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from gi.repository import Gtk, Gdk from gi.overrides import keysyms from quodlibet import qltk class TQltk(TestCase): def test_none(self): self.failUnless(qltk.get_top_parent(None) is None) def test_gtp(self): w = Gtk.Window(); l = Gtk.Label() self.failUnlessEqual(qltk.get_top_parent(w), w) self.failUnlessEqual(qltk.get_top_parent(l), None) w.destroy(); l.destroy() def test_gtp_packed(self): w = Gtk.Window(); l = Gtk.Label(); w.add(l) self.failUnlessEqual(qltk.get_top_parent(w), w) self.failUnlessEqual(qltk.get_top_parent(l), w) w.destroy(); l.destroy() def test_is_accel(self): e = Gdk.Event.new(Gdk.EventType.KEY_RELEASE) self.failIf(qltk.is_accel(e, "a")) e = Gdk.Event.new(Gdk.EventType.KEY_PRESS) e.keyval = keysyms.Return e.state = Gdk.ModifierType.CONTROL_MASK self.failUnless(qltk.is_accel(e, "<ctrl>Return")) def test_popup_menu_under_widget(self): w = Gtk.Window() l = Gtk.Label() w.add(l) m = Gtk.Menu() l.realize() qltk.popup_menu_under_widget(m, l, 1, 0) w.destroy() m.destroy() add(TQltk) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_browsers_iradio.py�������������������������������������������������������0000644�0001750�0001750�00000005335�12161032160�021700� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.library import SongLibrary from quodlibet.formats._audio import AudioFile from quodlibet.browsers.iradio import InternetRadio, IRFile from quodlibet.player.nullbe import NullPlayer import quodlibet.config class TInternetRadio(TestCase): def setUp(self): quodlibet.config.init() self.bar = InternetRadio(SongLibrary(), NullPlayer()) def test_can_filter(self): for key in ["foo", "title", "fake~key", "~woobar", "~#huh"]: self.failIf(self.bar.can_filter(key)) def tearDown(self): self.bar.destroy() quodlibet.config.quit() add(TInternetRadio) class TIRFile(TestCase): def setUp(self): self.s = IRFile("http://foo.bar") def test_website(self): self.s["website"] = "abc" self.assertEqual(self.s.get("artist"), "abc") self.assertEqual(self.s("artist"), "abc") def test_organisation(self): self.s["organization"] = "foo" self.assertEqual(self.s("title"), "foo") self.assertEqual(self.s.get("title"), "foo") def test_title_split_stream(self): self.assertFalse(self.s("artist")) self.s["title"] = "artist - title" self.s.multisong = False self.assertEqual(self.s("title"), "title") self.assertEqual(self.s.get("title"), "title") self.assertEqual(self.s("artist"), "artist") self.assertEqual(self.s.get("artist"), "artist") def test_title_split(self): self.assertTrue(self.s.multisong) self.s["title"] = "artist - title" self.assertEqual(self.s("title"), self.s["title"]) def test_format(self): self.assertEqual(self.s("~format"), self.s.format) self.s["audio-codec"] = "SomeCodec" self.assertTrue("SomeCodec" in self.s("~format")) self.assertTrue(self.s.format in self.s("~format")) def test_people(self): self.s["title"] = "artist - title" self.s.multisong = False self.assertEqual(self.s("~people"), "artist") self.assertEqual(self.s("~~people~foo"), "artist") def testcan_write(self): self.failUnless(self.s.can_change("title")) self.s.streamsong = True self.failIf(self.s.can_change("title")) def test_dump_to_file(self): self.s["title"] = "artist - title" self.s.multisong = False dump = self.s.to_dump() new = AudioFile() new.from_dump(dump) self.assertEqual(new["title"], "title") self.assertEqual(new["artist"], "artist") del self.s["title"] dump = self.s.to_dump() new = AudioFile() new.from_dump(dump) self.assertTrue("title" not in new) self.assertTrue("artist" not in new) add(TIRFile) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_util_titlecase.py��������������������������������������������������������0000644�0001750�0001750�00000006533�12161032160�021516� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2007 Javier Kohen, 2010 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from tests import TestCase, add from quodlibet.util import title class Ttitle(TestCase): def test_basics(s): s.assertEquals(u"Mama's Boy", title(u"mama's boy")) s.assertEquals(u"The A-Sides", title(u"the a-sides")) s.assertEquals(u"Hello Goodbye", title(u"hello goodbye")) s.assertEquals(u"HELLO GOODBYE", title(u"HELLO GOODBYE")) s.assertEquals(u"", title(u"")) def test_extra_spaces(s): s.assertEquals(u" Space", title(u" space")) s.assertEquals(u" Dodgy Spaces ", title(u" dodgy spaces ")) def test_quirks(s): # This character is not an apostrophe, it's a single quote! s.assertEquals(u"Mama’S Boy", title(u"mama’s boy")) # This is actually an accent character, not an apostrophe either. s.assertEquals(u"Mama`S Boy", title(u"mama`s boy")) def test_quotes(s): s.assertEquals(u"Hello Goodbye (A Song)", title(u"hello goodbye (a song)")) s.assertEquals(u"Hello Goodbye 'A Song'", title(u"hello goodbye 'a song'")) s.assertEquals(u'Hello Goodbye "A Song"', title(u'hello goodbye "a song"')) s.assertEquals(u"Hello Goodbye „A Song”", title(u"hello goodbye „a song”")) s.assertEquals(u"Hello Goodbye ‘A Song’", title(u"hello goodbye ‘a song’")) s.assertEquals(u"Hello Goodbye “A Song”", title(u"hello goodbye “a song”")) s.assertEquals(u"Hello Goodbye »A Song«", title(u"hello goodbye »a song«")) s.assertEquals(u"Hello Goodbye «A Song»", title(u"hello goodbye «a song»")) s.assertEquals(u"\"24\" Theme", title(u"\"24\" theme")) s.assertEquals(u"\"Mad-Dog\" Mike", title(u"\"mad-dog\" mike")) def test_unicode(s): s.assertEquals(u"Fooäbar", title(u"fooäbar")) s.assertEquals(u"Los Años Felices", title(u"los años felices")) s.assertEquals(u"Ñandú", title(u"ñandú")) s.assertEquals(u"Österreich", title(u"österreich")) # Not a real word - there is none with this character at the beginning # but still Python doesn't capitalize the es-zed properly. # s.assertEquals(u"SSbahn", title(u"ßbahn")) # Old tests, somewhat redundant with the above, but you can never have # too many tests... def test_empty(self): self.failUnlessEqual(title(""), "") def test_oneword(self): self.failUnlessEqual(title("foobar"), "Foobar") def test_twowords(self): self.failUnlessEqual(title("foo bar"), "Foo Bar") def test_preserve(self): self.failUnlessEqual(title("fooBar"), "FooBar") def test_nonalphabet(self): self.failUnlessEqual(title("foo 1bar"), "Foo 1bar") def test_two_words_and_one_not(self): self.failUnlessEqual(title("foo 1 bar"), "Foo 1 Bar") def test_apostrophe(self): self.failUnlessEqual(title("it's"), "It's") add(Ttitle) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_util_thumbnails.py�������������������������������������������������������0000644�0001750�0001750�00000004375�12173213426�021722� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from gi.repository import Gtk, GdkPixbuf import os import urllib try: import hashlib as hash except ImportError: import md5 as hash from quodlibet.util import thumbnails from quodlibet.util import mtime class TThumb(TestCase): def setUp(s): s.wide = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 150, 10) s.high = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 10, 100) s.small = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 10, 20) s.filename = os.path.join(os.getcwd(), "test_thumbnail.png") s.wide.savev(s.filename, "png", [], []) def tearDown(s): os.remove(s.filename) def test_scale(s): nw = thumbnails.scale(s.wide, (50, 30)) s.failUnlessEqual((nw.get_width(), nw.get_height()), (50, 3)) nh = thumbnails.scale(s.high, (100, 20)) s.failUnlessEqual((nh.get_width(), nh.get_height()), (2, 20)) ns = thumbnails.scale(s.small, (500, 300)) s.failUnlessEqual((ns.get_width(), ns.get_height()), (150, 300)) ns = thumbnails.scale(s.small, (500, 300), scale_up=False) s.failUnlessEqual((ns.get_width(), ns.get_height()), (10, 20)) def test_thumb(s): thumb = thumbnails.get_thumbnail(s.filename, (50, 60)) #check for right scaling s.failUnless(thumb) s.failUnlessEqual((thumb.get_width(), thumb.get_height()), (50, 3)) #test the thumbnail filename uri = "file://" + urllib.pathname2url(s.filename) name = hash.md5(uri).hexdigest() + ".png" path = os.path.expanduser("~/.thumbnails") # newer spec new_path = os.path.expanduser("~/.cache/thumbnails") if os.path.exists(new_path): path = new_path path = os.path.join(path, "normal", name) s.failUnless(os.path.isfile(path)) #check for metadata thumb_pb = GdkPixbuf.Pixbuf.new_from_file(path) meta_mtime = thumb_pb.get_option("tEXt::Thumb::MTime") meta_uri = thumb_pb.get_option("tEXt::Thumb::URI") s.failUnlessEqual(int(meta_mtime), int(mtime(s.filename))) s.failUnlessEqual(meta_uri, uri) #check rights s.failUnlessEqual(os.stat(path).st_mode, 33152) add(TThumb) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_debugwindow.py������������������������������������������������������0000644�0001750�0001750�00000001311�12173213426�022053� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import sys from tests import TestCase, add from quodlibet.qltk.debugwindow import ExceptionDialog class TExceptionDialog(TestCase): def test_exec_hook(self): old = sys.stderr try: sys.stderr = None try: raise Exception except Exception: ExceptionDialog.excepthook(*sys.exc_info()) ExceptionDialog.instance.destroy() finally: sys.stderr = old add(TExceptionDialog) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_po.py��������������������������������������������������������������������0000644�0001750�0001750�00000002235�12161032160�017115� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import os import glob class PO(TestCase): def test_pos(self): self.failIf(os.system("msgfmt -c po/%s.po > /dev/null" % self.lang)) try: os.unlink("messages.mo") except OSError: pass def test_gtranslator_blows_goats(self): for line in file("po/%s.po" % self.lang): if line.strip().startswith("#"): continue self.failIf("\xc2\xb7" in line, "Broken GTranslator copy/paste in %s:\n%s" % ( self.lang, line)) def test_gtk_stock_items(self): for line in file("po/%s.po" % self.lang): if line.strip().startswith('msgstr "gtk-'): parts = line.strip().split() value = parts[1].strip('"')[4:] self.failIf(value and value not in [ 'media-next', 'media-previous', 'media-play', 'media-pause'], "Invalid stock translation in %s\n%s" %( self.lang, line)) for fn in glob.glob("po/*.po"): lang = fn[3:-3] testcase = type('PO.' + lang, (PO,), {}) testcase.lang = lang add(testcase) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_ccb.py��������������������������������������������������������������0000644�0001750�0001750�00000004356�12173212464�020301� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from gi.repository import Gtk from quodlibet import config from quodlibet.qltk.ccb import ConfigCheckButton, ConfigCheckMenuItem class TConfigCheckButton(TestCase): def setUp(self): config.init() def tearDown(self): config.quit() def test_toggle(self): config.set("memory", "bar", "on") c = ConfigCheckButton("dummy", "memory", "bar") c.set_active(True) self.failUnless(config.getboolean("memory", "bar") and c.get_active()) c.set_active(False) while Gtk.events_pending(): Gtk.main_iteration() self.failIf(config.getboolean("memory", "bar") or c.get_active()) def test_populate(self): # Assert that active state works config.set("memory", "bar", "on") c = ConfigCheckButton("dummy", "memory", "bar", populate=True) while Gtk.events_pending(): Gtk.main_iteration() self.failUnless(c.get_active()) # ...and inactive config.set("memory", "bar", "off") c = ConfigCheckButton("dummy", "memory", "bar", populate=True) while Gtk.events_pending(): Gtk.main_iteration() self.failIf(c.get_active()) add(TConfigCheckButton) class TConfigCheckMenuItem(TestCase): def setUp(self): config.init() def tearDown(self): config.quit() def test_toggle(self): config.set("memory", "bar", "on") c = ConfigCheckMenuItem("dummy", "memory", "bar") c.set_active(True) self.failUnless(config.getboolean("memory", "bar") and c.get_active()) c.set_active(False) while Gtk.events_pending(): Gtk.main_iteration() self.failIf(config.getboolean("memory", "bar") or c.get_active()) def test_populate(self): # Assert that active state works config.set("memory", "bar", "on") c = ConfigCheckMenuItem("dummy", "memory", "bar", populate=True) while Gtk.events_pending(): Gtk.main_iteration() self.failUnless(c.get_active()) # ...and inactive config.set("memory", "bar", "off") c = ConfigCheckMenuItem("dummy", "memory", "bar", populate=True) while Gtk.events_pending(): Gtk.main_iteration() self.failIf(c.get_active()) add(TConfigCheckMenuItem) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_chooser.py����������������������������������������������������������0000644�0001750�0001750�00000001273�12173212464�021207� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.chooser import FolderChooser, FileChooser import quodlibet.config class TFolderChooser(TestCase): Kind = FolderChooser def setUp(self): quodlibet.config.init() def tearDown(self): quodlibet.config.quit() def test_init_nodir(self): f = self.Kind(None, "A file chooser") f.destroy() def test_init_dir(self): f = self.Kind(None, "A file chooser", initial_dir="/home") f.destroy() add(TFolderChooser) class TFileChooser(TFolderChooser): Kind = FileChooser def test_filter(self): f = lambda *x: None FileChooser(None, "foo", filter=f) add(TFileChooser) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_downloader.py�������������������������������������������������������0000644�0001750�0001750�00000000570�12161032160�021670� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.downloader import DownloadWindow import quodlibet.config class TDownloadWindow(TestCase): def setUp(self): quodlibet.config.init() self.win = DownloadWindow() def test_ctr(self): pass def tearDown(self): self.win.destroy() quodlibet.config.quit() add(TDownloadWindow) ����������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_songlist.py���������������������������������������������������������0000644�0001750�0001750�00000003033�12161032160�021371� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.library import SongLibrary from quodlibet.qltk.songlist import SongList import quodlibet.config class TSongList(TestCase): HEADERS = ["acolumn", "~#lastplayed", "~foo~bar", "~#rating", "~#length", "~dirname", "~#track"] def setUp(self): quodlibet.config.init() self.songlist = SongList(SongLibrary()) def test_set_all_column_headers(self): SongList.set_all_column_headers(self.HEADERS) headers = [col.header_name for col in self.songlist.get_columns()] self.failUnlessEqual(headers, self.HEADERS) def test_set_column_headers(self): self.songlist.set_column_headers(self.HEADERS) headers = [col.header_name for col in self.songlist.get_columns()] self.failUnlessEqual(headers, self.HEADERS) def test_drop(self): self.songlist.enable_drop() self.songlist.disable_drop() def test_sort_by(self): self.songlist.set_column_headers(["one", "two", "three"]) for key, order in [("one", True), ("two", False), ("three", False)]: self.songlist.set_sort_by(None, tag=key, order=order) self.failUnlessEqual(self.songlist.get_sort_by(), (key, order)) self.songlist.set_sort_by(self.songlist.get_columns()[-1], tag="three") self.failUnlessEqual(self.songlist.get_sort_by(), ("three", True)) def tearDown(self): self.songlist.destroy() quodlibet.config.quit() add(TSongList) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_wlw.py��������������������������������������������������������������0000644�0001750�0001750�00000002400�12173213426�020346� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from gi.repository import Gtk from quodlibet.qltk.wlw import WaitLoadWindow class TWaitLoadWindow(TestCase): class DummyConnector(Gtk.Window): count = 0 def connect(self, *args): self.count += 1 def disconnect(self, *args): self.count -= 1 class Eater: def set_cursor(*args): pass window = Eater() def setUp(self): self.parent = self.DummyConnector() self.wlw = WaitLoadWindow(self.parent, 5, "a test") self.wlw.hide() def test_none(self): wlw = WaitLoadWindow(None, 5, "a test") wlw.step() wlw.destroy() def test_connect(self): self.failUnlessEqual(1, self.parent.count) def test_start(self): self.failUnlessEqual(0, self.wlw.current) self.failUnlessEqual(5, self.wlw.count) def test_step(self): self.failIf(self.wlw.step()) self.failUnlessEqual(1, self.wlw.current) self.failIf(self.wlw.step()) self.failIf(self.wlw.step()) self.failUnlessEqual(3, self.wlw.current) def test_destroy(self): self.wlw.destroy() self.failUnlessEqual(0, self.parent.count) def tearDown(self): self.wlw.destroy() add(TWaitLoadWindow) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_pluginwin.py��������������������������������������������������������0000644�0001750�0001750�00000000716�12161032160�021550� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.pluginwin import PluginWindow import quodlibet.config import quodlibet.plugins class TPluginWindow(TestCase): def setUp(self): quodlibet.plugins.init() quodlibet.config.init() self.win = PluginWindow(None) def test_ctr(self): pass def tearDown(self): self.win.destroy() quodlibet.plugins.quit() quodlibet.config.quit() add(TPluginWindow) ��������������������������������������������������quodlibet-3.0.2/tests/test_util_collection.py�������������������������������������������������������0000644�0001750�0001750�00000034053�12161032160�021672� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import tempfile import shutil from quodlibet import config from quodlibet.const import DEFAULT_RATING from tests import TestCase, add from quodlibet.formats._audio import AudioFile as Fakesong from quodlibet.formats._audio import INTERN_NUM_DEFAULT, PEOPLE from quodlibet.util.collection import Album, Playlist, avg, bayesian_average from quodlibet.util.collection import HashedList from quodlibet.library.libraries import FileLibrary NUMERIC_SONGS = [ Fakesong({"~filename": "fake1.mp3", "~#length": 4, "~#added": 5, "~#lastplayed": 1, "~#bitrate": 200, "date": "100", "~#rating": 0.1, "originaldate": "2004-01-01", "~#filesize": 101}), Fakesong({"~filename": "fake2.mp3", "~#length": 7, "~#added": 7, "~#lastplayed": 88, "~#bitrate": 220, "date": "99", "~#rating": 0.3, "originaldate": "2002-01-01", "~#filesize": 202}), Fakesong({"~filename": "fake3.mp3", "~#length": 1, "~#added": 3, "~#lastplayed": 43, "~#bitrate": 60, "date": "33", "~#rating": 0.5}) ] class TAlbum(TestCase): def setUp(self): config.init() def test_people_sort(s): songs = [ Fakesong({"albumartist": "aa", "artist": "b\na"}), Fakesong({"albumartist": "aa", "artist": "a\na"}) ] album = Album(songs[0]) album.songs = set(songs) s.failUnlessEqual(album.comma("~people"), "aa, a, b") def test_peoplesort_sort(s): songs = [ Fakesong({"albumartistsort": "aa", "artist": "b\na"}), Fakesong({"albumartist": "aa", "artistsort": "a\na"}) ] album = Album(songs[0]) album.songs = set(songs) s.failUnlessEqual(album.comma("~peoplesort"), "aa, a, b") def test_tied_tags(s): songs = [ Fakesong({"artist": "a", "title": "c"}), Fakesong({"artist": "a", "dummy": "d\ne"}) ] album = Album(songs[0]) album.songs = set(songs) s.failUnlessEqual(album.comma("~artist~dummy"), "a - e, d") def test_tied_num_tags(s): songs = [ Fakesong({"~#length": 5, "title": "c", "~#rating": 0.4}), Fakesong({"~#length": 7, "dummy": "d\ne", "~#rating": 0.6}), Fakesong({"~#length": 0, "dummy2": 5, "~#rating": 0.5}) ] album = Album(songs[0]) album.songs = set(songs) s.failUnlessEqual(album.comma("~foo~~s~~~"), "") s.failUnlessEqual(album.comma("~#length~dummy"), "12 - e, d") s.failUnlessEqual(album.comma("~#rating~dummy"), "0.50 - e, d") s.failUnlessEqual(album.comma("~#length:sum~dummy"), "12 - e, d") s.failUnlessEqual(album.comma("~#dummy2"), 5) s.failUnlessEqual(album.comma("~#dummy3"), "") def test_internal_tags(s): songs = [ Fakesong({"~#length": 5, "discnumber": "1", "date": "2038"}), Fakesong({"~#length": 7, "dummy": "d\ne", "discnumber": "2"}) ] album = Album(songs[0]) album.songs = set(songs) s.failIfEqual(album.comma("~long-length"), "") s.failIfEqual(album.comma("~tracks"), "") s.failIfEqual(album.comma("~discs"), "") s.failUnlessEqual(album.comma("~foo"), "") s.failUnlessEqual(album.comma(""), "") s.failUnlessEqual(album.comma("~"), "") s.failUnlessEqual(album.get("~#"), "") def test_numeric_ops(s): songs = NUMERIC_SONGS album = Album(songs[0]) album.songs = set(songs) s.failUnlessEqual(album.get("~#length"), 12) s.failUnlessEqual(album.get("~#length:sum"), 12) s.failUnlessEqual(album.get("~#length:max"), 7) s.failUnlessEqual(album.get("~#length:min"), 1) s.failUnlessEqual(album.get("~#length:avg"), 4) s.failUnlessEqual(album.get("~#length:foo"), 0) s.failUnlessEqual(album.get("~#added"), 7) s.failUnlessEqual(album.get("~#lastplayed"), 88) s.failUnlessEqual(album.get("~#bitrate"), 200) s.failUnlessEqual(album.get("~#year"), 33) s.failUnlessEqual(album.get("~#rating"), 0.3) s.failUnlessEqual(album.get("~#originalyear"), 2002) def test_single_rating(s): songs = [Fakesong({"~#rating": 0.75})] album = Album(songs[0]) album.songs = set(songs) # One song should average to its own rating s.failUnlessEqual(album.get("~#rating:avg"), songs[0]("~#rating")) # BAV should now be default for rating s.failUnlessEqual(album.get("~#rating:bav"), album.get("~#rating:avg")) def test_multiple_ratings(s): r1, r2 = 1.0, 0.5 songs = [Fakesong({"~#rating": r1}), Fakesong({"~#rating": r2})] album = Album(songs[0]) album.songs = set(songs) # Standard averaging still available s.failUnlessEqual(album("~#rating:avg"), avg([r1, r2])) # C = 0.0 => emulate arithmetic mean config.set("settings", "bayesian_rating_factor", 0.0) s.failUnlessEqual(album("~#rating:bav"), album("~#rating:avg")) def test_bayesian_multiple_ratings(s): # separated from above to avoid caching c, r1, r2 = 5, 1.0, 0.5 songs = [Fakesong({"~#rating": r1}), Fakesong({"~#rating": r2})] album = Album(songs[0]) album.songs = set(songs) config.set("settings", "bayesian_rating_factor", float(c)) s.failUnlessEqual( config.getfloat("settings", "bayesian_rating_factor"), float(c)) expected = avg(c * [DEFAULT_RATING] + [r1, r2]) s.failUnlessEqual(album("~#rating:bav"), expected) s.failUnlessEqual(album("~#rating"), expected) def test_bayesian_average(s): bav = bayesian_average l = [1, 2, 3, 4] a = avg(l) # c=0 => this becomes a mean regardless of m s.failUnlessEqual(a, bav(l, 0, 0)) s.failUnlessEqual(a, bav(l, 0, 999)) # c=1, m = a (i.e. just adding another mean score) => no effect s.failUnlessEqual(a, bav(l, 1, a)) # Harder ones s.failUnlessEqual(20.0 / 9, bav(l, 5, 2)) expected = 40.0 / 14 s.failUnlessEqual(expected, bav(l, 10, 3)) # Also check another iterable s.failUnlessEqual(expected, bav(tuple(l), 10, 3)) def test_defaults(s): failUnlessEq = s.failUnlessEqual song = Fakesong({}) album = Album(song) failUnlessEq(album("foo", "x"), "x") album.songs.add(song) failUnlessEq(album("~#length", "x"), song("~#length", "x")) failUnlessEq(album("~#bitrate", "x"), song("~#bitrate", "x")) failUnlessEq(album("~#rating", "x"), song("~#rating", "x")) failUnlessEq(album("~#playcount", "x"), song("~#playcount", "x")) failUnlessEq(album("~#mtime", "x"), song("~#mtime", "x")) failUnlessEq(album("~#year", "x"), song("~#year", "x")) failUnlessEq(album("~#foo", "x"), song("~#foo", "x")) failUnlessEq(album("foo", "x"), song("foo", "x")) failUnlessEq(album("~foo", "x"), song("~foo", "x")) failUnlessEq(album("~people", "x"), song("~people", "x")) failUnlessEq(album("~peoplesort", "x"), song("~peoplesort", "x")) failUnlessEq(album("~performer", "x"), song("~performer", "x")) failUnlessEq(album("~performersort", "x"), song("~performersort", "x")) failUnlessEq(album("~cover", "x"), song("~cover", "x")) failUnlessEq(album("~rating", "x"), song("~rating", "x")) for p in PEOPLE: failUnlessEq(album(p, "x"), song(p, "x")) for p in INTERN_NUM_DEFAULT: failUnlessEq(album(p, "x"), song(p, "x")) def test_methods(s): songs = [ Fakesong({"b": "bb4\nbb1\nbb1", "c": "cc1\ncc3\ncc3"}), Fakesong({"b": "bb1\nbb1\nbb4", "c": "cc3\ncc1\ncc3"}) ] album = Album(songs[0]) album.songs = set(songs) s.failUnlessEqual(album.list("c"), ["cc3", "cc1"]) s.failUnlessEqual(album.list("~c~b"), ["cc3", "cc1", "bb1", "bb4"]) s.failUnlessEqual(album.comma("c"), "cc3, cc1") s.failUnlessEqual(album.comma("~c~b"), "cc3, cc1 - bb1, bb4") def tearDown(self): config.quit() add(TAlbum) class THashedList(TestCase): def test_init(self): l = HashedList([1, 2, 3]) self.failUnless(1 in l) l = HashedList() self.failIf(1 in l) def test_length(self): l = HashedList([1, 2, 3, 3]) self.failUnlessEqual(len(l), 4) def test_insert(self): l = HashedList([1, 2, 3, 3]) l.insert(0, 3) self.failUnlessEqual(len(l), 5) def test_delete(self): l = HashedList([2, 2]) self.failUnless(2 in l) del l[0] self.failUnless(2 in l) del l[0] self.failIf(2 in l) def test_iter(self): l = HashedList([1, 2, 3, 3]) new = [a for a in l] self.failUnlessEqual(new, [1, 2, 3, 3]) def test_del_slice(self): l = HashedList([1, 2, 3, 3]) del l[1:3] self.failUnlessEqual(len(l), 2) self.failUnless(1 in l) self.failUnless(3 in l) self.failIf(2 in l) def test_set_slice(self): l = HashedList([1, 2, 3, 3]) l[:3] = [4] self.failUnless(4 in l) self.failUnless(3 in l) self.failIf(2 in l) def test_extend(self): l = HashedList() l.extend([1, 1, 2]) self.failUnless(1 in l) self.failUnlessEqual(len(l), 3) def test_duplicates(self): l = HashedList() self.failIf(l.has_duplicates()) l = HashedList(range(10)) self.failIf(l.has_duplicates()) l.append(5) self.failUnless(l.has_duplicates()) add(THashedList) class TPlaylist(TestCase): TWO_SONGS = [ Fakesong({"~#length": 5, "discnumber": "1", "date": "2038"}), Fakesong({"~#length": 7, "dummy": "d\ne", "discnumber": "2"}) ] def setUp(self): self.temp = tempfile.mkdtemp() self.temp2 = tempfile.mkdtemp() def tearDown(self): shutil.rmtree(self.temp) shutil.rmtree(self.temp2) def test_masked_handling(self): # playlists can contain songs and paths for masked handling.. pl = Playlist(self.temp, "playlist") song = Fakesong({"date": "2038", "~filename": "/fake"}) song.sanitize() lib = FileLibrary("foobar") lib.add([song]) # mask and update lib.mask("/") pl.append(song) pl.remove_songs([song], lib) self.failUnless("/fake" in pl) pl.extend(self.TWO_SONGS) # check if collections can handle the mix self.failUnlessEqual(pl("date"), "2038") # unmask and update lib.unmask("/") pl.add_songs(["/fake"], lib) self.failUnless(song in pl) pl.delete() lib.destroy() def test_equality(s): pl = Playlist(s.temp, "playlist") pl2 = Playlist(s.temp, "playlist") pl3 = Playlist(s.temp2, "playlist") s.failUnlessEqual(pl, pl2) # Debatable s.failUnlessEqual(pl, pl3) pl4 = Playlist(s.temp, "foobar") s.failIfEqual(pl, pl4) pl.delete() pl2.delete() pl3.delete() pl4.delete() def test_index(s): pl = Playlist(s.temp, "playlist") songs = s.TWO_SONGS pl.extend(songs) # Just a sanity check... s.failUnlessEqual(1, songs.index(songs[1])) # And now the happy paths.. s.failUnlessEqual(0, pl.index(songs[0])) s.failUnlessEqual(1, pl.index(songs[1])) # ValueError is what we want here try: pl.index(Fakesong({})) s.fail() except ValueError: pass pl.delete() def test_internal_tags(s): pl = Playlist(s.temp, "playlist") pl.extend(s.TWO_SONGS) s.failIfEqual(pl.comma("~long-length"), "") s.failIfEqual(pl.comma("~tracks"), "") s.failIfEqual(pl.comma("~discs"), "") s.failUnlessEqual(pl.comma("~foo"), "") s.failUnlessEqual(pl.comma(""), "") s.failUnlessEqual(pl.comma("~"), "") s.failUnlessEqual(pl.get("~#"), "") pl.delete() def test_numeric_ops(s): songs = NUMERIC_SONGS pl = Playlist(s.temp, "playlist") pl.extend(songs) s.failUnlessEqual(pl.get("~#length"), 12) s.failUnlessEqual(pl.get("~#length:sum"), 12) s.failUnlessEqual(pl.get("~#length:max"), 7) s.failUnlessEqual(pl.get("~#length:min"), 1) s.failUnlessEqual(pl.get("~#length:avg"), 4) s.failUnlessEqual(pl.get("~#length:foo"), 0) s.failUnlessEqual(pl.get("~#rating:avg"), avg([0.1, 0.3, 0.5])) s.failUnlessEqual(pl.get("~#filesize"), 303) s.failUnlessEqual(pl.get("~#added"), 7) s.failUnlessEqual(pl.get("~#lastplayed"), 88) s.failUnlessEqual(pl.get("~#bitrate"), 200) s.failUnlessEqual(pl.get("~#year"), 33) s.failUnlessEqual(pl.get("~#rating"), 0.3) s.failUnlessEqual(pl.get("~#originalyear"), 2002) pl.delete() def test_listlike(s): pl = Playlist(s.temp, "playlist") pl.extend(NUMERIC_SONGS) s.failUnlessEqual(NUMERIC_SONGS[0], pl[0]) s.failUnlessEqual(NUMERIC_SONGS[1:2], pl[1:2]) s.failUnless(NUMERIC_SONGS[1] in pl) pl.delete() def test_playlists_featuring(s): pl = Playlist(s.temp, "playlist") pl.extend(NUMERIC_SONGS) playlists = Playlist.playlists_featuring(NUMERIC_SONGS[0]) s.failUnlessEqual(set(playlists), set([pl])) # Now add a second one, check that instance tracking works pl2 = Playlist(s.temp, "playlist2") pl2.append(NUMERIC_SONGS[0]) playlists = Playlist.playlists_featuring(NUMERIC_SONGS[0]) s.failUnlessEqual(set(playlists), set([pl, pl2])) pl.delete() pl2.delete() def test_playlists_tag(self): # Arguably belongs in _audio songs = NUMERIC_SONGS pl_name = "playlist 123!" pl = Playlist(self.temp, pl_name) pl.extend(songs) for song in songs: self.assertEquals(pl_name, song("~playlists")) pl.delete() add(TPlaylist) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_info.py�������������������������������������������������������������0000644�0001750�0001750�00000000556�12161032160�020471� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.player.nullbe import NullPlayer from quodlibet.qltk.info import SongInfo from quodlibet.library import SongLibrary class TSongInfo(TestCase): def setUp(self): self.info = SongInfo(SongLibrary(), NullPlayer()) def test_ctr(self): pass def tearDown(self): self.info.destroy() add(TSongInfo) ��������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_browsers_collection.py���������������������������������������������������0000644�0001750�0001750�00000006635�12173213426�022601� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import unittest from tests import TestCase, add from quodlibet import config from quodlibet.browsers.collection import * from quodlibet.formats._audio import AudioFile from quodlibet.library import SongLibrary SONGS = [ AudioFile({"album": "one", "artist": "piman", "~filename": "/dev/null"}), AudioFile({"album": "two", "artist": "mu\nboris", "~filename": "/dev/zero"}), AudioFile({"album": "three", "artist": "boris", "~filename": "/bin/ls"}), AudioFile({"album": "three", "artist": "boris", "~filename": "/bin/ls2"}), AudioFile({"album": "four", "~filename": "/bin/ls3"}), ] SONGS.sort() class TCollectionPreferences(TestCase): def setUp(self): config.init() def tearDown(self): config.quit() def test_headers(self): value = [("foobar", 0), ("~people", 1)] save_headers(value) self.failUnlessEqual(get_headers(), value) def test_pref_dialog(self): d = PatternEditor() d.destroy() add(TCollectionPreferences) class TCollectionAlbums(TestCase): def setUp(self): l = SongLibrary() l.add(SONGS) l.albums.load() self.albums = l.albums def tearDown(self): del self.albums def test_build_tree(self): tags = [("~people", 0)] tree = build_tree(tags, self.albums) self.failUnless("mu" in tree) self.failUnless("boris" in tree) self.failUnless("piman" in tree) self.failUnless(UnknownNode in tree) self.failUnlessEqual(len(tree), 4) def test_build_tree_merge(self): tags = [("~people", 1)] tree = build_tree(tags, self.albums) self.failUnless(MultiNode in tree) self.failUnless(UnknownNode in tree) self.failUnless("boris" in tree) self.failUnless("piman" in tree) self.failUnlessEqual(len(tree), 4) def test_model(self): model = CollectionTreeStore() model.set_albums([("~people", 0)], self.albums) self.failUnlessEqual(len(model), 4) model.change_albums(self.albums) self.failUnlessEqual(len(model), 4) model.remove_albums(self.albums) self.failUnlessEqual(len(model), 0) def test_utils(self): model = CollectionTreeStore() model.set_albums([("~people", 0)], self.albums) a = self.albums.values() a.sort(key=lambda x: x.key) path = StoreUtils.get_path_for_album(model, a[0]) albums = StoreUtils.get_albums_for_path(model, path) self.failUnless(a[0] in albums) albums = StoreUtils.get_albums_for_iter(model, model.get_iter(path)) self.failUnless(a[0] in albums) x = StoreUtils.get_album(model, model.get_iter_first()) self.failIf(x) x = StoreUtils.get_album(model, model.get_iter(path)) self.failUnlessEqual(x, a[0]) for r in model: self.failUnless(StoreUtils.get_markup(model, model.tags, r.iter)) add(TCollectionAlbums) class TCollectionBrowser(TestCase): def setUp(self): config.init() def tearDown(self): config.quit() def test_init(self): library = SongLibrary() x = CollectionBrowser(library, False) x.destroy() add(TCollectionBrowser) ���������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_operon.py����������������������������������������������������������������0000644�0001750�0001750�00000035445�12161032160�020012� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012,2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import subprocess import tempfile import imp import shutil import contextlib import StringIO import sys from tests import TestCase, add import quodlibet from quodlibet import config from quodlibet.formats import MusicFile @contextlib.contextmanager def capture_output(): err = StringIO.StringIO() out = StringIO.StringIO() old_err = sys.stderr old_out = sys.stdout sys.stderr = err sys.stdout = out yield (out, err) sys.stderr = old_err sys.stdout = old_out def call(args=None): path = os.path.join(os.path.dirname(quodlibet.__path__[0]), "operon.py") mod = imp.load_source("operon", path) with capture_output() as (out, err): try: return_code = mod.run(["operon.py"] + args) except SystemExit, e: return_code = e.code return (return_code, out.getvalue(), err.getvalue()) class TOperonBase(TestCase): def setUp(self): config.init() self.f = tempfile.mkstemp(".ogg")[1] self.f2 = tempfile.mkstemp(".mp3")[1] shutil.copy(os.path.join('tests', 'data', 'silence-44-s.ogg'), self.f) shutil.copy(os.path.join('tests', 'data', 'silence-44-s.mp3'), self.f2) self.s = MusicFile(self.f) self.s2 = MusicFile(self.f2) def tearDown(self): os.unlink(self.f) os.unlink(self.f2) config.quit() def check_true(self, args, so, se, **kwargs): return self._check(args, True, so, se, **kwargs) def check_false(self, args, so, se, **kwargs): return self._check(args, False, so, se, **kwargs) def _check(self, args, success, so, se): s, o, e = call(args) self.failUnlessEqual(s == 0, success, msg=repr(s)) self.failUnlessEqual(bool(o), so, msg=repr(o)) self.failUnlessEqual(bool(e), se, msg=repr(e)) return o, e class TOperonMain(TOperonBase): # [--version] [--help] [--verbose] <command> [<args>] def test_main(self): self.check_false([], False, True) self.check_true(["help"], True, False) self.check_false(["help", "foobar"], False, True) # TODO: "image-extract", "rename", "fill", "fill-tracknumber", "edit" # "load" for sub in ["help", "dump", "copy", "set", "clear", "remove", "add", "list", "print", "info", "tags"]: self.check_true(["help", sub], True, False) self.check_true(["help", "-h"], True, False) self.check_true(["help", "--help"], True, False) self.check_false(["help", "--foobar"], False, True) self.check_true(["--verbose", "help", "help"], True, False) self.check_true(["-v", "help", "help"], True, False) self.check_false(["--foobar", "help", "help"], False, True) self.check_true(["--version"], True, False) add(TOperonMain) class TOperonAdd(TOperonBase): # add <tag> <value> <file> [<files>] def test_add_misc(self): self.check_false(["add"], False, True) self.check_false(["add", "tag"], False, True) self.check_false(["add", "tag", "value"], False, True) self.check_true(["add", "tag", "value", self.f], False, False) self.check_true(["add", "tag", "value", self.f, self.f], False, False) def test_add_check(self): keys = self.s.keys() self.check_true(["add", "foo", "bar", self.f], False, False) self.s.reload() self.failUnlessEqual(self.s["foo"], "bar") self.failUnlessEqual(len(keys) + 1, len(self.s.keys())) self.check_true(["-v", "add", "foo", "bar2", self.f], False, True) self.s.reload() self.failUnlessEqual(set(self.s.list("foo")), set(["bar", "bar2"])) def test_add_backlisted(self): self.check_false(["add", "playcount", "bar", self.f], False, True) def test_permissions(self): os.chmod(self.f, 0000) self.check_false(["add", "foo", "bar", self.f, self.f], False, True) os.chmod(self.f, 0444) self.check_false(["add", "foo", "bar", self.f, self.f], False, True) add(TOperonAdd) class TOperonPrint(TOperonBase): # [-p <pattern>] <file> [<files>] def test_print(self): self.check_false(["print"], False, True) o, e = self.check_true(["print", self.f], True, False) self.failUnlessEqual(o.splitlines()[0], "piman, jzig - Quod Libet Test Data - 02/10 - Silence") o, e = self.check_true(["print", "-p", "<title>", self.f], True, False) self.failUnlessEqual(o.splitlines()[0], "Silence") o, e = self.check_true(["print", "-p", "<title>", self.f, self.f], True, False) self.failUnlessEqual(o.splitlines(), ["Silence", "Silence"]) def test_permissions(self): os.chmod(self.f, 0000) self.check_false(["print", "-p", "<title>", self.f], False, True) add(TOperonPrint) class TOperonRemove(TOperonBase): # [--dry-run] <tag> [-e <pattern> | <value>] <file> [<files>] def test_error(self): self.check_false(["remove"], False, True) self.check_false(["remove", "tag", "value"], False, True) def test_remove(self): self.s["test"] = "foo\nbar\nfoo" self.s.write() self.check_true(["remove", "tag", "value", self.f], False, False) self.check_true(["remove", "test", "foo", self.f], False, False) self.s.reload() self.failUnlessEqual(self.s["test"], "bar") self.check_true(["-v", "remove", "test", "xxx", self.f, self.f], False, True) self.s.reload() self.failUnlessEqual(self.s["test"], "bar") def test_dry_run(self): self.s["test"] = "foo\nbar\nfoo" self.s.write() self.check_true(["remove", "--dry-run", "test", "foo", self.f], False, True) self.s.reload() self.failUnlessEqual(len(self.s.list("test")), 3) def test_pattern(self): self.s["test"] = "fao\nbar\nfoo" self.s.write() self.check_true(["remove", "test", "-e", "f[ao]o", self.f], False, False) self.s.reload() self.failUnlessEqual(self.s.list("test"), ["bar"]) self.check_true(["-v", "remove", "test", "-e", ".*", self.f], False, True) self.s.reload() self.failIf(self.s.list("test")) add(TOperonRemove) class TOperonClear(TOperonBase): # [--dry-run] [-a | -e <pattern> | <tag>] <file> [<files>] def test_misc(self): self.check_false(["clear"], False, True) self.check_false(["clear", self.f], False, True) self.check_true(["clear", "-a", self.f], False, False) self.check_false(["-v", "clear", "-e", self.f], False, True) self.check_true(["-v", "clear", "-e", "xx", self.f], False, True) self.check_true(["clear", "-e", "xx", self.f], False, False) self.check_false(["clear", "-e", "x", "-a", self.f], False, True) def _test_all(self): self.check(["clear", "-a", self.f], True, output=False) self.s.reload() self.failIf(self.s.realkeys()) self.check(["clear", "-a", self.f, self.f], True, output=False) def _test_all_dry_run(self): old_len = len(self.s.realkeys()) self.failUnless(old_len) self.check(["clear", "-a", "--dry-run", self.f], True) self.s.reload() self.failUnlessEqual(len(self.s.realkeys()), old_len) def _test_pattern(self): old_len = len(self.s.realkeys()) self.check(["clear", "-e", "a.*", self.f], True, output=False) self.s.reload() self.failUnlessEqual(len(self.s.realkeys()), old_len - 2) def _test_simple(self): old_len = len(self.s.realkeys()) self.check(["clear", "a.*", self.f], True, output=False) self.s.reload() self.failUnlessEqual(len(self.s.realkeys()), old_len) self.check(["clear", "--dry-run", "artist", self.f], True) self.s.reload() self.failUnlessEqual(len(self.s.realkeys()), old_len) self.check(["clear", "artist", self.f], True, output=False) self.s.reload() self.failUnlessEqual(len(self.s.realkeys()), old_len - 1) add(TOperonClear) class TOperonSet(TOperonBase): # [--dry-run] <tag> <value> <file> [<files>] def test_misc(self): self.check_false(["set"], False, True) self.check_true(["set", "-h"], True, False) self.check_false(["set", "tag", "value"], False, True) self.check_true(["set", "tag", "value", self.f], False, False) self.check_true(["set", "tag", "value", self.f, self.f], False, False) self.check_true(["set", "--dry-run", "tag", "value", self.f], False, False) def test_simple(self): self.check_true(["set", "foo", "bar", self.f], False, False) self.s.reload() self.failUnlessEqual(self.s["foo"], "bar") self.check_true(["set", "--dry-run", "foo", "x", self.f], False, False) self.s.reload() self.failUnlessEqual(self.s["foo"], "bar") def test_replace(self): self.failIfEqual(self.s["artist"], "foobar") self.check_true(["set", "artist", "foobar", self.f], False, False) self.s.reload() self.failUnlessEqual(self.s["artist"], "foobar") add(TOperonSet) class TOperonDump(TOperonBase): def test_misc(self): self.check_true(["dump", "-h"], True, False) self.check_false(["dump"], False, True) self.check_true(["dump", self.f], True, False) self.check_true(["-v", "dump", self.f], True, True) self.check_false(["dump", self.f, self.f], False, True) def test_output(self): o, e = self.check_true(["dump", self.f], True, False) internal = filter(lambda x: x.startswith("~"), o.splitlines()) self.failIf(internal) add(TOperonDump) class TOperonCopy(TOperonBase): # [--dry-run] [--ignore-errors] <source> <dest> def test_misc(self): self.check_false(["copy"], False, True) self.check_true(["copy", "-h"], True, False) self.check_false(["copy", "foo"], False, True) self.check_true(["copy", self.f, self.f2], False, False) self.check_true(["-v", "copy", self.f, self.f2], False, True) def test_simple(self): map(self.s2.__delitem__, self.s2.realkeys()) self.s2.write() self.s2.reload() self.failIf(self.s2.realkeys()) self.check_true(["copy", self.f, self.f2], False, False) self.s2.reload() self.failUnless(self.s2.realkeys()) def test_not_changable(self): self.s2["rating"] = "foo" self.s2.write() self.check_false(["copy", self.f2, self.f], False, True) self.check_true(["copy", "--ignore-errors", self.f2, self.f], False, False) def test_add(self): self.failUnlessEqual(len(self.s2.list("genre")), 1) self.check_true(["copy", self.f, self.f2], False, False) self.s2.reload() self.failUnlessEqual(len(self.s2.list("genre")), 2) def test_dry_run(self): map(self.s2.__delitem__, self.s2.realkeys()) self.s2.write() self.s2.reload() self.check_true(["copy", "--dry-run", self.f, self.f2], False, True) self.s2.reload() self.failIf(self.s2.realkeys()) add(TOperonCopy) class TOperonInfo(TOperonBase): # [-t] [-c <c1>,<c2>...] <file> def test_misc(self): self.check_false(["info"], False, True) self.check_true(["info", self.f], True, False) self.check_false(["info", self.f, self.f2], False, True) self.check_true(["info", "-h"], True, False) def test_normal(self): self.check_true(["info", "-cdesc", self.f], True, False) self.check_true(["info", "-cvalue", self.f], True, False) self.check_true(["info", "-cdesc,value", self.f], True, False) self.check_true(["info", "-cvalue, desc", self.f], True, False) self.check_false(["info", "-cfoo", self.f], False, True) def test_terse(self): self.check_true(["info", "-t", self.f], True, False) self.check_true(["info", "-t", "-cdesc", self.f], True, False) self.check_true(["info", "-t", "-cvalue", self.f], True, False) self.check_true(["info", "-t", "-cdesc,value", self.f], True, False) self.check_true(["info", "-t", "-cvalue, desc", self.f], True, False) self.check_false(["info", "-t", "-cfoo", self.f], False, True) add(TOperonInfo) class TOperonList(TOperonBase): # [-t] [-c <c1>,<c2>...] <file> def test_misc(self): self.check_true(["list", "-h"], True, False) self.check_false(["list"], False, True) self.check_true(["list", self.f], True, False) self.check_false(["list", self.f, self.f2], False, True) def test_normal(self): self.check_true(["list", "-cdesc", self.f], True, False) self.check_true(["list", "-cvalue,tag", self.f], True, False) self.check_true(["list", "-cdesc,value", self.f], True, False) self.check_true(["list", "-cvalue, desc", self.f], True, False) self.check_false(["list", "-cfoo", self.f], False, True) def test_terse(self): self.check_true(["list", "-t", self.f], True, False) self.check_true(["list", "-t", "-cdesc", self.f], True, False) self.check_true(["list", "-t", "-cvalue,tag", self.f], True, False) self.check_true(["list", "-t", "-cdesc,value", self.f], True, False) self.check_true(["list", "-t", "-cvalue, desc", self.f], True, False) self.check_false(["list", "-t", "-cfoo", self.f], False, True) def test_terse_escape(self): self.s["foobar"] = "a:bc\\:" self.s.write() d = self.check_true(["list", "-t", "-cvalue", self.f], True, False)[0] lines = d.splitlines() self.assertTrue("a\\:bc\\\\\\:" in lines) add(TOperonList) class TOperonTags(TOperonBase): # [-t] [-c <c1>,<c2>...] def test_misc(self): self.check_true(["tags", "-h"], True, False) self.check_false(["tags", self.f], False, True) self.check_false(["tags", self.f, self.f2], False, True) def test_normal(self): self.check_true(["tags", "-cdesc"], True, False) self.check_true(["tags", "-ctag"], True, False) self.check_true(["tags", "-ctag, desc"], True, False) self.check_false(["tags", "-cfoo"], False, True) def test_terse(self): self.check_true(["tags", "-t"], True, False) self.check_true(["tags", "-t", "-cdesc"], True, False) self.check_true(["tags", "-t", "-cdesc,tag"], True, False) self.check_true(["tags", "-t", "-ctag, desc"], True, False) self.check_false(["tags", "-t", "-cfoo"], False, True) add(TOperonTags) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_parse__match.py����������������������������������������������������������0000644�0001750�0001750�00000006143�12161032160�021126� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.parse._match import map_numeric_op, ParseError class TNumericOp(TestCase): TIME = 424242 def test_time_op(self): # lastplayed less than 10 seconds ago o, v = map_numeric_op("lastplayed", "<", "10", time_=self.TIME) self.failUnless(o(self.TIME - 5, v)) # laststarted more than 1 day ago o, v = map_numeric_op("laststarted", ">", "1 day", time_=self.TIME) self.failUnless(o(self.TIME - (3600 * 25), v)) # added less than 4 minutes and 30 seconds ago o, v = map_numeric_op("added", "<", "4:30", time_=self.TIME) self.failUnless(o(self.TIME - (4 * 60 + 15), v)) self.failIf(o(self.TIME - (4 * 60 + 35), v)) def test_time_unit(self): t = map_numeric_op("mtime", "=", "now", time_=self.TIME)[1] self.failUnlessEqual(t, self.TIME) t = map_numeric_op("mtime", ">", "today", time_=self.TIME)[1] self.failUnlessEqual(t, self.TIME - (3600 * 24)) t = map_numeric_op("mtime", ">", "2 days ago", time_=self.TIME)[1] self.failUnlessEqual(t, self.TIME - (3600 * 24 * 2)) t = map_numeric_op("mtime", ">", "3.0 weeks ago", time_=self.TIME)[1] self.failUnlessEqual(t, self.TIME - (3600 * 24 * 7 * 3)) t = map_numeric_op("mtime", ">", "1 year ago", time_=self.TIME)[1] self.failUnlessEqual(t, self.TIME - (3600 * 24 * 365)) t = map_numeric_op("mtime", ">", "5 hours ago", time_=self.TIME)[1] self.failUnlessEqual(t, self.TIME - (3600 * 5)) t = map_numeric_op("mtime", ">", "1 minute", time_=self.TIME)[1] self.failUnlessEqual(t, self.TIME - (60)) self.failUnlessRaises(ParseError, map_numeric_op, "mtime", "<", "3 foo") self.failUnlessRaises(ParseError, map_numeric_op, "mtime", "<", "bar") def test_time_format(self): o, v = map_numeric_op("length", ">", "5:10") self.failUnless(o(5 * 60 + 12, v)) o, v = map_numeric_op("length", "=", "10:5:10") self.failUnless(o((3600 * 10) + (5 * 60) + 10, v)) def test_float(self): o, v = map_numeric_op("rating", ">", "0.5") self.failUnless(o(0.6, v)) self.failIf(o(0.5, v)) def test_size(self): o, v = map_numeric_op("filesize", ">", "10MB") self.failUnless(o(1024 * 1024 * 11, v)) self.failIf(o(1024 * 1024 * 9, v)) map_numeric_op("filesize", ">", "10kB") map_numeric_op("filesize", ">", "10bytes") map_numeric_op("filesize", ">", "10G") map_numeric_op("filesize", ">", "10m") self.failUnlessRaises(ParseError, map_numeric_op, "foobar", ">", "10MB") self.failUnlessRaises(ParseError, map_numeric_op, "filesize", ">", "10X") self.failUnlessRaises(ParseError, map_numeric_op, "filesize", "!", "10MB") def test_simple(self): o, v = map_numeric_op("playcount", "<=", "5") self.failUnless(o(5, v)) self.failIf(o(5.01, v)) add(TNumericOp) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_exfalso.py����������������������������������������������������������0000644�0001750�0001750�00000000720�12173212464�021202� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.exfalsowindow import ExFalsoWindow from quodlibet.library import SongLibrary import quodlibet.config class TExFalsoWindow(TestCase): def setUp(self): quodlibet.config.init() self.ef = ExFalsoWindow(SongLibrary()) def test_nothing(self): self.failUnless(self.ef.get_child()) def tearDown(self): self.ef.destroy() quodlibet.config.quit() add(TExFalsoWindow) ������������������������������������������������quodlibet-3.0.2/tests/test_qltk_msg.py��������������������������������������������������������������0000644�0001750�0001750�00000001211�12161032160�020311� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.msg import * class _TMessage(TestCase): def setUp(self): self.win = self.Kind(None, "title", "description") def test_ctr(self): pass def tearDown(self): self.win.destroy() class TWarningMessage(_TMessage): Kind = WarningMessage add(TWarningMessage) class TErrorMessage(_TMessage): Kind = ErrorMessage add(TErrorMessage) class TConfirmAction(_TMessage): Kind = ConfirmAction add(TConfirmAction) class TCancelRevertSave(TestCase): def setUp(self): self.win = CancelRevertSave(None) def test_ctr(self): pass def tearDown(self): self.win.destroy() add(TCancelRevertSave) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_plugins___init__.py������������������������������������������������������0000644�0001750�0001750�00000011054�12161032160�021776� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import os from quodlibet import config from quodlibet.formats._audio import AudioFile from quodlibet.util.songwrapper import SongWrapper, ListWrapper class TSongWrapper(TestCase): psong = AudioFile({ "~filename": "does not/exist", "title": "more songs", "discnumber": "2/2", "tracknumber": "1", "artist": "Foo\nI have two artists", "album": "Bar", "~bookmark": "2:10 A bookmark" }) pwrap = SongWrapper(psong) def setUp(self): config.init() self.wrap = SongWrapper(AudioFile( {"title": "woo", "~filename": "/dev/null"})) def tearDown(self): config.quit() def test_slots(self): def breakme(): self.wrap.woo = 1 self.failUnlessRaises(AttributeError, breakme) def test_cmp(self): songs = [SongWrapper(AudioFile({"tracknumber": str(i)})) for i in range(10)] songs.reverse() songs.sort() self.failUnlessEqual([s("~#track") for s in songs], range(10)) def test_needs_write_yes(self): self.failIf(self.wrap._needs_write) self.wrap["woo"] = "bar" self.failUnless(self.wrap._needs_write) def test_needs_write_no(self): self.failIf(self.wrap._needs_write) self.wrap["~woo"] = "bar" self.failIf(self.wrap._needs_write) def test_getitem(self): self.failUnlessEqual(self.wrap["title"], "woo") def test_get(self): self.failUnlessEqual(self.wrap.get("title"), "woo") self.failUnlessEqual(self.wrap.get("dne"), None) self.failUnlessEqual(self.wrap.get("dne", "huh"), "huh") def test_delitem(self): self.failUnless("title" in self.wrap) del(self.wrap["title"]) self.failIf("title" in self.wrap) self.failUnless(self.wrap._needs_write) def test_realkeys(self): self.failUnlessEqual( self.pwrap.realkeys(), self.psong.realkeys()) def test_website(self): self.failUnlessEqual(self.pwrap.website(), self.psong.website()) def test_find_cover(self): self.failUnlessEqual(self.pwrap.find_cover(), self.psong.find_cover()) def test_can_change(self): for key in ["~foo", "title", "whee", "a test", "foo=bar", ""]: self.failUnlessEqual( self.pwrap.can_change(key), self.psong.can_change(key)) def test_comma(self): for key in ["title", "artist", "album", "notexist", "~length"]: self.failUnlessEqual(self.pwrap.comma(key), self.psong.comma(key)) def test_list(self): for key in ["title", "artist", "album", "notexist", "~length"]: self.failUnlessEqual(self.pwrap.list(key), self.psong.list(key)) def test_dicty(self): self.failUnlessEqual(self.pwrap.keys(), self.psong.keys()) self.failUnlessEqual(self.pwrap.values(), self.psong.values()) self.failUnlessEqual(self.pwrap.items(), self.psong.items()) def test_mtime(self): self.wrap._song.sanitize() self.failUnless(self.wrap.valid()) self.wrap["~#mtime"] = os.path.getmtime("/dev/null") - 2 self.wrap._updated = False self.failIf(self.wrap.valid()) def test_setitem(self): self.failIf(self.wrap._was_updated()) self.wrap["title"] = "bar" self.failUnless(self.wrap._was_updated()) self.failUnlessEqual(self.wrap["title"], "bar") def test_not_really_updated(self): self.failIf(self.wrap._was_updated()) self.wrap["title"] = "woo" self.failIf(self.wrap._was_updated()) self.wrap["title"] = "quux" self.failUnless(self.wrap._was_updated()) def test_new_tag(self): self.failIf(self.wrap._was_updated()) self.wrap["version"] = "bar" self.failUnless(self.wrap._was_updated()) def test_bookmark(self): self.failUnlessEqual(self.psong.bookmarks, self.pwrap.bookmarks) self.pwrap.bookmarks = [(43, "another mark")] self.failUnlessEqual(self.psong["~bookmark"], "0:43 another mark") self.failUnlessEqual(self.psong.bookmarks, self.pwrap.bookmarks) add(TSongWrapper) class TListWrapper(TestCase): def test_empty(self): wrapped = ListWrapper([]) self.failUnlessEqual(wrapped, []) def test_empty_song(self): wrapped = ListWrapper([{}]) self.failUnless(len(wrapped) == 1) self.failIf(isinstance(wrapped[0], dict)) def test_none(self): wrapped = ListWrapper([None, None]) self.failUnless(len(wrapped) == 2) self.failUnlessEqual(wrapped, [None, None]) add(TListWrapper) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_config.py����������������������������������������������������������������0000644�0001750�0001750�00000010156�12161032160�017745� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- from tests import TestCase, add from quodlibet import config class Tconfig(TestCase): def setUp(self): config.init() config.add_section("foo") def test_set(self): config.set("foo", "bar", 1) self.failUnlessEqual(config.get("foo", "bar"), "1") self.failUnlessEqual(config.getint("foo", "bar"), 1) def test_get(self): config.set("foo", "int", "1") config.set("foo", "float", "1.25") config.set("foo", "str", "foobar") config.set("foo", "bool", "True") self.failUnlessEqual(config.getint("foo", "int"), 1) self.failUnlessEqual(config.getfloat("foo", "float"), 1.25) self.failUnlessEqual(config.get("foo", "str"), "foobar") self.failUnlessEqual(config.getboolean("foo", "bool"), True) def test_get_default(self): self.failUnlessEqual(config.getboolean("foo", "nothing", True), True) self.failUnlessEqual(config.getint("foo", "nothing", 42), 42) self.failUnlessEqual(config.getfloat("foo", "nothing", 42.42), 42.42) self.failUnlessEqual(config.get("foo", "nothing", "foo"), "foo") def test_get_default_raises(self): self.assertRaises(ValueError, config.getboolean, "foo", "nothing", "") self.assertRaises(ValueError, config.getint, "foo", "nothing", "") self.assertRaises(ValueError, config.getfloat, "foo", "nothing", "") def test_setdefault_no_defaulting(self): self.failUnlessEqual(None, config.get("foo", "bar", None)) config.set("foo", "bar", "blah") config.setdefault("foo", "bar", "xxx") self.failUnlessEqual("blah", config.get("foo", "bar")) def test_setdefault_defaulting(self): self.failUnlessEqual(None, config.get("foo", "bar", None)) config.setdefault("foo", "bar", "xxx") self.failUnlessEqual("xxx", config.get("foo", "bar")) def test_stringlist_simple(self): self.failIf(config.get("foo", "bar", None)) vals = ["one", "two", "three"] config.setstringlist("foo", "bar", vals) self.failUnlessEqual(config.getstringlist("foo", "bar"), vals) def test_stringlist_mixed(self): self.failIf(config.get("foo", "bar", None)) config.setstringlist("foo", "bar", ["one", 2]) self.failUnlessEqual(config.getstringlist("foo", "bar"), ["one", "2"]) def test_stringlist_quoting(self): self.failIf(config.get("foo", "bar", None)) vals = ["foo's gold", "bar, \"best\" 'ever'", u"le goût d'œufs à Noël"] config.setstringlist("foo", "bar", vals) self.failUnlessEqual(config.getstringlist("foo", "bar"), vals) def test_stringlist_spaces(self): vals = [" ", " ", " \t ", " \n \n"] config.setstringlist("foo", "bar", vals) self.failUnlessEqual(config.getstringlist("foo", "bar"), vals) def test_get_columns_migrates(self): self.failIf(config.get("settings", "headers", None)) self.failIf(config.get("settings", "columns", None)) headers = "~album ~#replaygain_track_gain foobar" config.set("settings", "headers", headers) columns = config.get_columns(headers) self.failUnlessEqual(columns, ["~album", "~#replaygain_track_gain", "foobar"]) self.failIf(config.get("settings", "headers", None)) def test_get_set_columns(self): self.failIf(config.get("settings", "headers", None)) self.failIf(config.get("settings", "columns", None)) columns = ["first", "won't", "two words", "4"] config.set_columns(columns) # First assume caching self.failUnlessEqual(columns, config.get_columns()) # Then without self.failUnlessEqual(columns, config.get_columns(refresh=True)) columns += ["~~another~one"] # Test dirtying the cache config.set_columns(columns) self.failUnlessEqual(columns, config.get_columns()) self.failUnlessEqual(columns, config.get_columns(refresh=True)) self.failIf(config.get("settings", "headers", None)) def tearDown(self): config.quit() add(Tconfig) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_plugins_songsmenu.py�����������������������������������������������������0000644�0001750�0001750�00000007105�12161032160�022257� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import os from tempfile import mkstemp, mkdtemp from quodlibet.formats._audio import AudioFile from quodlibet.plugins import PluginManager from quodlibet.qltk.songsmenu import SongsMenuPluginHandler class TSongsMenuPlugins(TestCase): def setUp(self): self.tempdir = mkdtemp() self.pm = PluginManager(folders=[self.tempdir]) self.handler = SongsMenuPluginHandler() self.pm.register_handler(self.handler) self.pm.rescan() self.assertEquals(self.pm.plugins, []) def tearDown(self): self.pm.quit() for f in os.listdir(self.tempdir): os.remove(os.path.join(self.tempdir,f)) os.rmdir(self.tempdir) def create_plugin(self, id= '', name='', desc='', icon='', funcs=None, mod=False): fd, fn = mkstemp(suffix='.py', text=True, dir=self.tempdir) file = os.fdopen(fd, 'w') if mod: indent = '' else: file.write("from quodlibet.plugins.songsmenu import SongsMenuPlugin\n") file.write("class %s(SongsMenuPlugin):\n" % name) indent = ' ' file.write("%spass\n" % indent) if name: file.write("%sPLUGIN_ID = %r\n" % (indent, name)) if name: file.write("%sPLUGIN_NAME = %r\n" % (indent, name)) if desc: file.write("%sPLUGIN_DESC = %r\n" % (indent, desc)) if icon: file.write("%sPLUGIN_ICON = %r\n" % (indent, icon)) for f in (funcs or []): if f in ["__init__"]: file.write("%sdef %s(*args): pass\n" % (indent, f)) else: file.write("%sdef %s(*args): return args\n" % (indent, f)) file.flush() file.close() def test_empty_has_no_plugins(self): self.pm.rescan() self.assertEquals(self.pm.plugins, []) def test_name_and_desc_plus_func_is_one(self): self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song']) self.pm.rescan() self.assertEquals(len(self.pm.plugins), 1) def test_additional_functions_still_only_one(self): self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song', 'plugin_songs']) self.pm.rescan() self.assertEquals(len(self.pm.plugins), 1) def test_two_plugins_are_two(self): self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song']) self.create_plugin(name='Name2', desc='Desc2', funcs=['plugin_albums']) self.pm.rescan() self.assertEquals(len(self.pm.plugins), 2) def test_disables_plugin(self): self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song']) self.pm.rescan() self.failIf(self.pm.enabled(self.pm.plugins[0])) def test_enabledisable_plugin(self): self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song']) self.pm.rescan() plug = self.pm.plugins[0] self.pm.enable(plug, True) self.failUnless(self.pm.enabled(plug)) self.pm.enable(plug, False) self.failIf(self.pm.enabled(plug)) def test_ignores_broken_plugin(self): self.create_plugin(name="Broken", desc="Desc", funcs=["__init__", "plugin_song"]) self.pm.rescan() plug = self.pm.plugins[0] self.pm.enable(plug, True) menu = self.handler.Menu(None, None, [AudioFile()]) self.failIf(menu and menu.get_children()) def test_Menu(self): self.create_plugin(name='Name', desc='Desc', funcs=['plugin_song']) self.handler.Menu(None, None, [AudioFile()]) add(TSongsMenuPlugins) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_util_copool.py�����������������������������������������������������������0000644�0001750�0001750�00000006100�12173212464�021034� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from gi.repository import Gtk from quodlibet.util import copool class Tcopool(TestCase): def setUp(self): while Gtk.events_pending(): Gtk.main_iteration() self.buffer = None def tearDown(self): copool.remove_all() def __set_buffer(self): while True: self.buffer = True yield None def test_add_remove(self): copool.add(self.__set_buffer) Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) self.assertEquals(self.buffer, True) copool.remove(self.__set_buffer) self.buffer = None Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) self.assertEquals(self.buffer, None) def test_add_remove_with_funcid(self): copool.add(self.__set_buffer, funcid="test") Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) self.assertEquals(self.buffer, True) copool.remove("test") self.buffer = None Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) self.assertEquals(self.buffer, None) def test_pause_resume(self): copool.add(self.__set_buffer) Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) copool.pause(self.__set_buffer) self.buffer = None Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) self.assertEquals(self.buffer, None) copool.resume(self.__set_buffer) Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) self.assertEquals(self.buffer, True) copool.remove(self.__set_buffer) self.buffer = None Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) def test_pause_resume_with_funcid(self): copool.add(self.__set_buffer, funcid="test") Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) copool.pause("test") self.buffer = None Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) self.assertEquals(self.buffer, None) copool.resume("test") Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) self.assertEquals(self.buffer, True) copool.remove("test") self.buffer = None Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) def test_pause_restart_pause(self): copool.add(self.__set_buffer, funcid="test") Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) self.failUnless(self.buffer) copool.pause("test") self.buffer = None Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) self.failIf(self.buffer) copool.add(self.__set_buffer, funcid="test") Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) self.failUnless(self.buffer) copool.pause("test") self.buffer = None Gtk.main_iteration_do(False) Gtk.main_iteration_do(False) self.failIf(self.buffer) add(Tcopool) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_mmkeys.py�����������������������������������������������������������0000644�0001750�0001750�00000000564�12173212464�021054� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from gi.repository import Gtk from quodlibet.player.nullbe import NullPlayer from quodlibet.qltk.mmkeys_ import init class TMmKeys(TestCase): def setUp(self): self.win = Gtk.Window() self.keys = init(self.win, NullPlayer()) def test_ctr(self): pass def tearDown(self): self.win.destroy() add(TMmKeys) ��������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_formats_xiph.py����������������������������������������������������������0000644�0001750�0001750�00000034357�12173213426�021225� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import add, TestCase import os import sys import shutil import tempfile import base64 from quodlibet import config, const, formats from quodlibet.formats.xiph import OggFile, FLACFile, OggOpusFile, OggOpus from mutagen.flac import FLAC, Picture from mutagen.id3 import ID3, TIT2, ID3NoHeaderError from mutagen.oggvorbis import OggVorbis class TXiphPickle(TestCase): # make sure the classes are available at the old paths # so unpickling old libraries works. def test_modules_flac(self): self.failUnless("formats.flac" in sys.modules) mod = sys.modules["formats.flac"] self.failUnless(mod.FLACFile is FLACFile) def test_modules_vorbis(self): self.failUnless("formats.oggvorbis" in sys.modules) mod = sys.modules["formats.oggvorbis"] self.failUnless(mod.OggFile is OggFile) add(TXiphPickle) class TVCFile(TestCase): # Mixin to test Vorbis writing features def setUp(self): config.init() config.set("editing", "save_email", "") config.set("editing", "save_to_songs", "1") def test_rating(self): self.song["~#rating"] = 0.2 self.song.write() song = type(self.song)(self.filename) self.failUnlessEqual(song["~#rating"], 0.2) def test_deletes_rating(self): config.set("editing", "save_email", "foo@bar.org") self.song["~#rating"] = 0.2 self.song.write() self.song["~#rating"] = const.DEFAULT_RATING self.song.write() song = type(self.song)(self.filename) config.set("editing", "save_email", const.EMAIL) self.failUnlessEqual(song("~#rating"), const.DEFAULT_RATING) def test_new_email_rating(self): config.set("editing", "save_email", "foo@bar.org") self.song["~#rating"] = 0.2 self.song.write() song = type(self.song)(self.filename) config.set("editing", "save_email", const.EMAIL) self.failUnlessEqual(song["~#rating"], 0.2) def test_default_email_rating(self): self.song["~#rating"] = 0.2 self.song.write() song = type(self.song)(self.filename) config.set("editing", "save_email", "foo@bar.org") config.set("editing", "save_email", const.EMAIL) self.failUnlessEqual(song["~#rating"], 0.2) def test_different_email_rating(self): config.set("editing", "save_email", "foo@bar.org") self.song["~#rating"] = 0.2 self.song.write() config.set("editing", "save_email", const.EMAIL) song = type(self.song)(self.filename) self.failUnlessEqual(song("~#rating"), const.DEFAULT_RATING) song.write() config.set("editing", "save_email", "foo@bar.org") song = type(self.song)(self.filename) config.set("editing", "save_email", const.EMAIL) self.failUnlessEqual(song["~#rating"], 0.2) def test_invalid_rating(self): self.song["~#rating"] = "invalid" self.song.write() song = type(self.song)(self.filename) self.failUnlessEqual(song("~#rating"), const.DEFAULT_RATING) def test_huge_playcount(self): count = 1000000000000000L self.song["~#playcount"] = count self.song.write() song = type(self.song)(self.filename) self.failUnlessEqual(song["~#playcount"], count) def test_parameter(self): for bad in ["rating", "playcount", "rating:foo", "playcount:bar"]: self.failIf(self.song.can_change(bad)) def test_dont_save(self): config.set("editing", "save_to_songs", "false") self.song["~#rating"] = 1.0 self.song.write() song = type(self.song)(self.filename) config.set("editing", "save_to_songs", "true") self.failUnlessEqual(song("~#rating"), const.DEFAULT_RATING) def test_can_change(self): self.failUnless(self.song.can_change()) class TTotalTagsBase(TestCase): """Test conversation between the tracknumber/totaltracks/tracktotal format and the tracknumber="x/y" format. """ MAIN = None FALLBACK = None SINGLE = None def setUp(self): config.init() self.filename = tempfile.mkstemp(".ogg")[1] shutil.copy(os.path.join('tests', 'data', 'empty.ogg'), self.filename) def tearDown(self): os.unlink(self.filename) config.quit() def __load_tags(self, tags, expected): m = OggVorbis(self.filename) for key, value in tags.iteritems(): m.tags[key] = value m.save() song = OggFile(self.filename) for key, value in expected.iteritems(): self.failUnlessEqual(song(key), value) if self.MAIN not in expected: self.failIf(self.MAIN in song) if self.SINGLE not in expected: self.failIf(self.SINGLE in song) if self.FALLBACK not in expected: self.failIf(self.FALLBACK in song) def test_load_old_single(self): self.__load_tags( {self.SINGLE: "1/42"}, {self.SINGLE: "1/42"}) def test_load_main(self): self.__load_tags( {self.SINGLE: "3", self.MAIN: "10"}, {self.SINGLE: "3/10"}) def test_load_fallback(self): self.__load_tags( {self.SINGLE: "3", self.FALLBACK: "10"}, {self.SINGLE: "3/10"}) def test_load_all(self): self.__load_tags( {self.SINGLE: "3", self.FALLBACK: "10", self.MAIN: "5"}, {self.SINGLE: "3/5", self.FALLBACK: "10"}) def test_load_main_no_single(self): self.__load_tags( {self.MAIN: "5"}, {self.SINGLE: "/5"}) def test_load_fallback_no_single(self): self.__load_tags( {self.FALLBACK: "6"}, {self.SINGLE: "/6"}) def test_load_both_no_single(self): self.__load_tags( {self.FALLBACK: "6", self.MAIN: "5"}, {self.FALLBACK: "6", self.SINGLE: "/5"}) def __save_tags(self, tags, expected): #return song = OggFile(self.filename) for key, value in tags.iteritems(): song[key] = value song.write() m = OggVorbis(self.filename) # test if all values ended up where we wanted for key, value in expected.iteritems(): self.failUnless(key in m.tags) self.failUnlessEqual(m.tags[key], [value]) # test if not specified are not there if self.MAIN not in expected: self.failIf(self.MAIN in m.tags) if self.FALLBACK not in expected: self.failIf(self.FALLBACK in m.tags) if self.SINGLE not in expected: self.failIf(self.SINGLE in m.tags) def test_save_single(self): self.__save_tags( {self.SINGLE: "1/2"}, {self.SINGLE: "1", self.MAIN: "2"}) def test_save_main(self): self.__save_tags( {self.MAIN: "3"}, {self.MAIN: "3"}) def test_save_fallback(self): self.__save_tags( {self.FALLBACK: "3"}, {self.MAIN: "3"}) def test_save_single_and_main(self): # not clear what to do here... self.__save_tags( {self.SINGLE: "1/2", self.MAIN: "3"}, {self.SINGLE: "1", self.MAIN: "3"}) def test_save_single_and_fallback(self): self.__save_tags( {self.SINGLE: "1/2", self.FALLBACK: "3"}, {self.SINGLE: "1", self.MAIN: "2", self.FALLBACK: "3"}) def test_save_all(self): # not clear what to do here... self.__save_tags( {self.SINGLE: "1/2", self.MAIN: "4", self.FALLBACK: "3"}, {self.SINGLE: "1", self.MAIN: "4", self.FALLBACK: "3"}) class TTrackTotal(TTotalTagsBase): MAIN = "tracktotal" FALLBACK = "totaltracks" SINGLE = "tracknumber" add(TTrackTotal) class TDiscTotal(TTotalTagsBase): MAIN = "disctotal" FALLBACK = "totaldiscs" SINGLE = "discnumber" add(TDiscTotal) class TFLACFile(TVCFile): def setUp(self): TVCFile.setUp(self) self.filename = tempfile.mkstemp(".flac")[1] shutil.copy(os.path.join('tests', 'data', 'empty.flac'), self.filename) self.song = FLACFile(self.filename) def test_mime(self): self.failUnless(self.song.mimes) def test_save_empty(self): self.song.write() flac = FLAC(self.filename) self.failIf(flac.tags) self.failIf(flac.tags is None) def test_strip_id3(self): self.song["title"] = "Test" self.song.write() id3 = ID3() id3.add(TIT2(encoding=2, text=u"Test but differently")) id3.save(filename=self.filename) song2 = formats.MusicFile(self.filename) self.failUnlessEqual(type(self.song), type(song2)) self.failUnlessEqual(self.song["title"], song2["title"]) song2.write() self.assertRaises(ID3NoHeaderError, ID3, self.filename) def tearDown(self): os.unlink(self.filename) config.quit() add(TFLACFile) class TVCCover(TestCase): def setUp(self): config.init() def __get_jpeg(self, size=5): from gi.repository import GdkPixbuf pb = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, False, 8, size, size) fn = tempfile.NamedTemporaryFile() pb.savev(fn.name, "jpeg", [], []) return fn.read() def test_no_cover(self): song = self.QLType(self.filename) self.failIf(song("~picture")) self.failIf(song.find_cover()) def test_handle_old_coverart(self): data = self.__get_jpeg() song = self.MutagenType(self.filename) song["coverart"] = base64.b64encode(data) song["coverartmime"] = "image/jpeg" song.save() song = self.QLType(self.filename) self.failUnlessEqual(song("~picture"), "y") self.failIf(song("coverart")) self.failIf(song("coverartmime")) song.write() fn = song.find_cover() cov_data = fn.read() self.failUnlessEqual(data,cov_data) song = self.MutagenType(self.filename) self.failUnlessEqual(base64.b64decode(song["coverart"][0]), data) self.failUnlessEqual(song["coverartmime"][0], "image/jpeg") def test_handle_invalid_coverart(self): crap = ".-a,a.f,afa-,.-" song = self.MutagenType(self.filename) song["coverart"] = crap song.save() song = self.QLType(self.filename) self.failUnlessEqual(song("~picture"), "y") self.failIf(song("coverart")) self.failIf(song.find_cover()) self.failIf(song("~picture")) song.write() song = self.MutagenType(self.filename) self.failUnlessEqual(song["coverart"][0], crap) def test_handle_picture_block(self): pic = Picture() pic.data = self.__get_jpeg() pic.type = 3 b64pic_cover = base64.b64encode(pic.write()) pic2 = Picture() pic2.data = self.__get_jpeg(size=6) pic2.type = 4 b64pic_other= base64.b64encode(pic2.write()) song = self.MutagenType(self.filename) song["metadata_block_picture"] = [b64pic_other, b64pic_cover] song.save() song = self.QLType(self.filename) self.failUnlessEqual(song("~picture"), "y") fn = song.find_cover() self.failUnlessEqual(pic.data, fn.read()) song.write() song = self.MutagenType(self.filename) self.failUnless(b64pic_other in song["metadata_block_picture"]) self.failUnless(b64pic_cover in song["metadata_block_picture"]) song["metadata_block_picture"] = [b64pic_other] song.save() song = self.QLType(self.filename) fn = song.find_cover() self.failUnlessEqual(pic2.data, fn.read()) def test_handle_invalid_picture_block(self): crap = ".-a,a.f,afa-,.-" song = self.MutagenType(self.filename) song["metadata_block_picture"] = crap song.save() song = self.QLType(self.filename) self.failUnlessEqual(song("~picture"), "y") self.failIf(song("metadata_block_picture")) self.failIf(song.find_cover()) self.failIf(song("~picture")) song.write() song = self.MutagenType(self.filename) self.failUnlessEqual(song["metadata_block_picture"][0], crap) def tearDown(self): os.unlink(self.filename) config.quit() class TVCCoverOgg(TVCCover): def setUp(self): TVCCover.setUp(self) self.filename = tempfile.mkstemp(".ogg")[1] shutil.copy(os.path.join('tests', 'data', 'empty.ogg'), self.filename) self.MutagenType = OggVorbis self.QLType = OggFile add(TVCCoverOgg) class TVCCoverFlac(TVCCover): def setUp(self): TVCCover.setUp(self) self.filename = tempfile.mkstemp(".flac")[1] shutil.copy(os.path.join('tests', 'data', 'empty.flac'), self.filename) self.MutagenType = FLAC self.QLType = FLACFile add(TVCCoverFlac) class TFlacPicture(TestCase): def setUp(self): config.init() self.filename = tempfile.mkstemp(".flac")[1] shutil.copy(os.path.join('tests', 'data', 'empty.flac'), self.filename) def test_picture(self): data = "abc" song = FLAC(self.filename) pic = Picture() pic.data = data song.add_picture(pic) song.save() song = FLACFile(self.filename) self.failUnless(song("~picture")) fn = song.find_cover() self.failUnlessEqual(fn.read(), pic.data) def tearDown(self): os.unlink(self.filename) config.quit() add(TFlacPicture) class TOggFile(TVCFile): def setUp(self): TVCFile.setUp(self) self.filename = tempfile.mkstemp(".ogg")[1] shutil.copy(os.path.join('tests', 'data', 'empty.ogg'), self.filename) self.song = OggFile(self.filename) def tearDown(self): os.unlink(self.filename) config.quit() add(TOggFile) class TOggOpusFile(TVCFile): def setUp(self): TVCFile.setUp(self) self.filename = tempfile.mkstemp(".ogg")[1] shutil.copy(os.path.join('tests', 'data', 'empty.opus'), self.filename) self.song = OggOpusFile(self.filename) def test_length(self): self.failUnlessEqual(self.song("~#length"), 3) self.failUnless("opusenc" in self.song("encoder")) def tearDown(self): os.unlink(self.filename) config.quit() if OggOpus: add(TOggOpusFile) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_parse__query.py����������������������������������������������������������0000644�0001750�0001750�00000031223�12161032160�021174� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- encoding: utf-8 -*- from tests import TestCase, add from quodlibet.parse import Query class TQuery_is_valid(TestCase): def test_re(self): self.failUnless(Query.is_valid('t = /an re/')) self.failUnless(Query.is_valid('t = /an re/c')) self.failUnless(Query.is_valid('t = /an\\/re/')) self.failIf(Query.is_valid('t = /an/re/')) self.failUnless(Query.is_valid('t = /aaa/lsic')) self.failIf(Query.is_valid('t = /aaa/icslx')) def test_str(self): self.failUnless(Query.is_valid('t = "a str"')) self.failUnless(Query.is_valid('t = "a str"c')) self.failUnless(Query.is_valid('t = "a\\"str"')) # there's no equivalent failure for strings since 'str"' would be # read as a set of modifiers def test_tag(self): self.failUnless(Query.is_valid('t = tag')) self.failUnless(Query.is_valid('t = !tag')) self.failUnless(Query.is_valid('t = |(tag, bar)')) self.failUnless(Query.is_valid('t = a"tag"')) self.failIf(Query.is_valid('t = a, tag')) def test_empty(self): self.failUnless(Query.is_valid('')) self.failUnless(Query.is_parsable('')) self.failUnless(Query('')) def test_emptylist(self): self.failIf(Query.is_valid("a = &()")) self.failIf(Query.is_valid("a = |()")) self.failIf(Query.is_valid("|()")) self.failIf(Query.is_valid("&()")) def test_nonsense(self): self.failIf(Query.is_valid('a string')) self.failIf(Query.is_valid('t = #(a > b)')) self.failIf(Query.is_valid("=a= = /b/")) self.failIf(Query.is_valid("a = &(/b//")) self.failIf(Query.is_valid("(a = &(/b//)")) def test_trailing(self): self.failIf(Query.is_valid('t = /an re/)')) self.failIf(Query.is_valid('|(a, b = /a/, c, d = /q/) woo')) def test_not(self): self.failUnless(Query.is_valid('t = !/a/')) self.failUnless(Query.is_valid('t = !!/a/')) self.failUnless(Query.is_valid('!t = "a"')) self.failUnless(Query.is_valid('!!t = "a"')) self.failUnless(Query.is_valid('t = !|(/a/, !"b")')) self.failUnless(Query.is_valid('t = !!|(/a/, !"b")')) self.failUnless(Query.is_valid('!|(t = /a/)')) def test_taglist(self): self.failUnless(Query.is_valid('a, b = /a/')) self.failUnless(Query.is_valid('a, b, c = |(/a/)')) self.failUnless(Query.is_valid('|(a, b = /a/, c, d = /q/)')) self.failIf(Query.is_valid('a = /a/, b')) def test_andor(self): self.failUnless(Query.is_valid('a = |(/a/, /b/)')) self.failUnless(Query.is_valid('a = |(/b/)')) self.failUnless(Query.is_valid('|(a = /b/, c = /d/)')) self.failUnless(Query.is_valid('a = &(/a/, /b/)')) self.failUnless(Query.is_valid('a = &(/b/)')) self.failUnless(Query.is_valid('&(a = /b/, c = /d/)')) def test_numcmp(self): self.failUnless(Query.is_valid("#(t < 3)")) self.failUnless(Query.is_valid("#(t <= 3)")) self.failUnless(Query.is_valid("#(t > 3)")) self.failUnless(Query.is_valid("#(t >= 3)")) self.failUnless(Query.is_valid("#(t = 3)")) self.failUnless(Query.is_valid("#(t != 3)")) self.failIf(Query.is_valid("#(t !> 3)")) self.failIf(Query.is_valid("#(t >> 3)")) def test_trinary(self): self.failUnless(Query.is_valid("#(2 < t < 3)")) self.failUnless(Query.is_valid("#(2 >= t > 3)")) # useless, but valid self.failUnless(Query.is_valid("#(5 > t = 2)")) def test_list(self): self.failUnless(Query.is_valid("#(t < 3, t > 9)")) self.failUnless(Query.is_valid("t = &(/a/, /b/)")) self.failUnless(Query.is_valid("s, t = |(/a/, /b/)")) self.failUnless(Query.is_valid("|(t = /a/, s = /b/)")) def test_nesting(self): self.failUnless(Query.is_valid("|(s, t = &(/a/, /b/),!#(2 > q > 3))")) add(TQuery_is_valid) class TQuery(TestCase): from quodlibet.formats._audio import AudioFile as AF def setUp(self): self.s1 = self.AF( { "album": "I Hate: Tests", "artist": "piman", "title": "Quuxly", "version": "cake mix", "~filename": "/dir1/foobar.ogg" }) self.s2 = self.AF( { "album": "Foo the Bar", "artist": "mu", "title": "Rockin' Out", "~filename": "/dir2/something.mp3", "tracknumber": "12/15" }) self.s3 = self.AF( {"artist": "piman\nmu", "~filename": "/test/\xc3\xb6\xc3\xa4\xc3\xbc/fo\xc3\xbc.ogg"}) self.s4 = self.AF({"title": u"Ångström", }) self.s5 = self.AF({"title": "oh&blahhh", "artist": "!ohno"}) def test_2007_07_27_synth_search(self): song = self.AF({"~filename": "foo/64K/bar.ogg"}) query = Query("~dirname = !64K") self.failIf(query.search(song), "%r, %r" % (query, song)) def test_empty(self): self.failIf(Query("foobar = /./").search(self.s1)) def test_gte(self): self.failUnless(Query("#(track >= 11)").search(self.s2)) def test_re(self): for s in ["album = /i hate/", "artist = /pi*/", "title = /x.y/"]: self.failUnless(Query(s).search(self.s1)) self.failIf(Query(s).search(self.s2)) f = Query("artist = /mu|piman/").search self.failUnless(f(self.s1)) self.failUnless(f(self.s2)) def test_not(self): for s in ["album = !hate", "artist = !pi"]: self.failIf(Query(s).search(self.s1)) self.failUnless(Query(s).search(self.s2)) def test_abbrs(self): for s in ["b = /i hate/", "a = /pi*/", "t = /x.y/"]: self.failUnless(Query(s).search(self.s1)) self.failIf(Query(s).search(self.s2)) def test_str(self): for k in self.s2.keys(): v = self.s2[k] self.failUnless(Query('%s = "%s"' % (k, v)).search(self.s2)) self.failIf(Query('%s = !"%s"' % (k, v)).search(self.s2)) def test_numcmp(self): self.failIf(Query("#(track = 0)").search(self.s1)) self.failIf(Query("#(notatag = 0)").search(self.s1)) self.failUnless(Query("#(track = 12)").search(self.s2)) def test_trinary(self): self.failUnless(Query("#(11 < track < 13)").search(self.s2)) self.failUnless(Query("#(11 < track <= 12)").search(self.s2)) self.failUnless(Query("#(12 <= track <= 12)").search(self.s2)) self.failUnless(Query("#(12 <= track < 13)").search(self.s2)) self.failUnless(Query("#(13 > track > 11)").search(self.s2)) self.failUnless(Query("#(20 > track < 20)").search(self.s2)) def test_not_2(self): for s in ["album = !/i hate/", "artist = !/pi*/", "title = !/x.y/"]: self.failUnless(Query(s).search(self.s2)) self.failIf(Query(s).search(self.s1)) def test_case(self): self.failUnless(Query("album = /i hate/").search(self.s1)) self.failUnless(Query("album = /I Hate/").search(self.s1)) self.failUnless(Query("album = /i Hate/").search(self.s1)) self.failUnless(Query("album = /i Hate/i").search(self.s1)) self.failUnless(Query(u"title = /ångström/").search(self.s4)) self.failIf(Query("album = /i hate/c").search(self.s1)) self.failIf(Query(u"title = /ångström/c").search(self.s4)) def test_re_and(self): self.failUnless(Query("album = &(/ate/,/est/)").search(self.s1)) self.failIf(Query("album = &(/ate/, /ets/)").search(self.s1)) self.failIf(Query("album = &(/tate/, /ets/)").search(self.s1)) def test_re_or(self): self.failUnless(Query("album = |(/ate/,/est/)").search(self.s1)) self.failUnless(Query("album = |(/ate/,/ets/)").search(self.s1)) self.failIf(Query("album = |(/tate/, /ets/)").search(self.s1)) def test_newlines(self): self.failUnless(Query("a = /\n/").search(self.s3)) self.failUnless(Query("a = /\\n/").search(self.s3)) self.failIf(Query("a = /\n/").search(self.s2)) self.failIf(Query("a = /\\n/").search(self.s2)) def test_exp_and(self): self.failUnless(Query("&(album = ate, artist = man)").search(self.s1)) self.failIf(Query("&(album = ate, artist = nam)").search(self.s1)) self.failIf(Query("&(album = tea, artist = nam)").search(self.s1)) def test_exp_or(self): self.failUnless(Query("|(album = ate, artist = man)").search(self.s1)) self.failUnless(Query("|(album = ate, artist = nam)").search(self.s1)) self.failIf(Query("&(album = tea, artist = nam)").search(self.s1)) def test_dumb_search(self): self.failUnless(Query("ate man").search(self.s1)) self.failUnless(Query("Ate man").search(self.s1)) self.failIf(Query("woo man").search(self.s1)) self.failIf(Query("not crazy").search(self.s1)) def test_dumb_search_value(self): self.failUnless(Query("|(ate, foobar)").search(self.s1)) self.failUnless(Query("!!|(ate, foobar)").search(self.s1)) self.failUnless(Query("&(ate, te)").search(self.s1)) self.failIf(Query("|(foo, bar)").search(self.s1)) self.failIf(Query("&(ate, foobar)").search(self.s1)) self.failIf(Query("! !&(ate, foobar)").search(self.s1)) self.failIf(Query("&blah").search(self.s1)) self.failUnless(Query("&blah oh").search(self.s5)) self.failUnless(Query("!oh no").search(self.s5)) self.failIf(Query("|blah").search(self.s1)) # http://code.google.com/p/quodlibet/issues/detail?id=1056 self.failUnless(Query("&(ate, piman)").search(self.s1)) def test_dumb_search_value_negate(self): self.failUnless(Query("!xyz").search(self.s1)) self.failUnless(Query("!!!xyz").search(self.s1)) self.failUnless(Query(" !!!&(xyz, zyx)").search(self.s1)) self.failIf(Query("!man").search(self.s1)) def test_dumb_search_regexp(self): self.failUnless(Query("/(x|H)ate/").search(self.s1)) self.failUnless(Query("'PiMan'").search(self.s1)) self.failIf(Query("'PiMan'c").search(self.s1)) self.failUnless(Query("!'PiMan'c").search(self.s1)) self.failIf(Query("!/(x|H)ate/").search(self.s1)) def test_unslashed_search(self): self.failUnless(Query("artist=piman").search(self.s1)) self.failUnless(Query(u"title=ång").search(self.s4)) self.failIf(Query("artist=mu").search(self.s1)) self.failIf(Query(u"title=äng").search(self.s4)) def test_synth_search(self): self.failUnless(Query("~dirname=/dir1/").search(self.s1)) self.failUnless(Query("~dirname=/dir2/").search(self.s2)) self.failIf(Query("~dirname=/dirty/").search(self.s1)) self.failIf(Query("~dirname=/dirty/").search(self.s2)) def test_search_almostequal(self): a, b = self.AF({"~#rating": 0.771}), self.AF({"~#rating": 0.769}) self.failUnless(Query("#(rating = 0.77)").search(a)) self.failUnless(Query("#(rating = 0.77)").search(b)) def test_and_or_operator(self): union = Query("|(foo=bar,bar=foo)") inter = Query("&(foo=bar,bar=foo)") neg = Query("foo=!bar") numcmp = Query("#(bar = 0)") tag = Query("foo=bar") tests = [inter | tag, tag | tag, neg | neg, tag | inter, neg | union, union | union, inter | inter, numcmp | numcmp, numcmp | union] self.failIf(filter(lambda x: not isinstance(x, type(union)), tests)) tests = [inter & tag, tag & tag, neg & neg, tag & inter, neg & union, union & union, inter & inter, numcmp & numcmp, numcmp & inter] self.failIf(filter(lambda x: not isinstance(x, type(inter)), tests)) def test_match_all(self): self.failUnless(Query.match_all("")) self.failUnless(Query.match_all(" ")) self.failIf(Query.match_all("foo")) def test_fs_utf8(self): self.failUnless(Query(u"~filename=foü.ogg").search(self.s3)) self.failUnless(Query(u"~filename=öä").search(self.s3)) self.failUnless(Query(u"~dirname=öäü").search(self.s3)) self.failUnless(Query(u"~basename=ü.ogg").search(self.s3)) def test_filename_utf8_fallback(self): self.failUnless(Query(u"filename=foü.ogg").search(self.s3)) self.failUnless(Query(u"filename=öä").search(self.s3)) add(TQuery) class TQuery_is_valid_color(TestCase): def test_red(self): for p in ["a = /w", "|(sa#"]: self.failUnlessEqual(False, Query.is_valid_color(p)) def test_black(self): for p in ["a test", "more test hooray"]: self.failUnlessEqual(None, Query.is_valid_color(p)) def test_green(self): for p in ["a = /b/", "&(a = b, c = d)", "/abc/", "!x", "!&(abc, def)"]: self.failUnlessEqual(True, Query.is_valid_color(p)) add(TQuery_is_valid_color) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/helper.py���������������������������������������������������������������������0000644�0001750�0001750�00000003327�12173213426�016733� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import contextlib from gi.repository import Gtk @contextlib.contextmanager def realized(widget): """Makes sure the widget is realized. view = Gtk.TreeView() with realized(view): do_something(view) """ if isinstance(widget, Gtk.Window): toplevel = widget else: toplevel = widget.get_parent_window() if toplevel is None: window = Gtk.Window() window.add(widget) widget.realize() while Gtk.events_pending(): Gtk.main_iteration() assert widget.get_realized() yield widget if toplevel is None: window.remove(widget) window.destroy() while Gtk.events_pending(): Gtk.main_iteration() @contextlib.contextmanager def visible(widget, width=None, height=None): """Makes sure the widget is realized. view = Gtk.TreeView() with visible(view): do_something(view) """ if isinstance(widget, Gtk.Window): toplevel = widget else: toplevel = widget.get_parent_window() if toplevel is None: window = Gtk.Window() window.add(widget) if width is not None and height is not None: window.resize(width, height) window.show_all() while Gtk.events_pending(): Gtk.main_iteration() assert widget.get_visible() assert window.get_visible() yield widget window.hide() if toplevel is None: window.remove(widget) window.destroy() while Gtk.events_pending(): Gtk.main_iteration() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_pep8.py������������������������������������������������������������������0000644�0001750�0001750�00000003402�12173213426�017361� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import glob import subprocess import unittest from tests import TestCase, add from quodlibet.util import iscommand class TPEP8(TestCase): # E12x popped up in pep8 1.4 compared to 1.2.. # drop them once 1.4 is common enough # E261: at least two spaces before inline comment # W603: we use <> to check for py3k atm.. IGNORE_ERROROS = "E12,E261,W603" PACKAGES = ("util library parse browsers devices formats " "plugins qltk player").split() def _run(self, path): subprocess.check_call( ["pep8", "--ignore=" + self.IGNORE_ERROROS, path]) def test_packages(self): for package in self.PACKAGES: name = "quodlibet." + package mod = getattr(__import__(name), package) self._run(mod.__path__[0]) def test_main_package(self): import quodlibet path = quodlibet.__path__[0] files = glob.glob(os.path.join(path, "*.py")) for file_ in files: self._run(file_) def test_plugins(self): import quodlibet path = quodlibet.__path__[0] path = os.path.join(path, "../../plugins") self._run(path) def test_scripts(self): import quodlibet path = quodlibet.__path__[0] path = os.path.join(path, "../") files = glob.glob(os.path.join(path, "*.py")) files = filter(lambda p: not p.endswith("setup.py"), files) for file_ in files: self._run(file_) if iscommand("pep8"): add(TPEP8) else: print_w("pep8 not found") ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_maskedbox.py��������������������������������������������������������0000644�0001750�0001750�00000000572�12161032160�021511� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet import config from quodlibet.qltk.maskedbox import MaskedBox from quodlibet.library import SongFileLibrary class TMaskedBox(TestCase): def setUp(self): config.init() def tearDown(self): config.quit() def test(self): lib = SongFileLibrary() MaskedBox(lib).destroy() add(TMaskedBox) ��������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_metadata.py��������������������������������������������������������������0000644�0001750�0001750�00000007055�12161032160�020264� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import os from quodlibet import formats from quodlibet import config from shutil import copyfileobj from tempfile import mkstemp class TestMetaData(TestCase): base = 'tests/data/silence-44-s' def setUp(self): """Copy the base silent file to a temp name/location and load it""" config.init() fd, self.filename = mkstemp(suffix=self.ext, text=False) dst = os.fdopen(fd, 'w') src = open(self.base + self.ext, 'rb') copyfileobj(src, dst) dst.close() self.song = formats.MusicFile(self.filename) def tearDown(self): """Delete the temp file""" os.remove(self.filename) del self.filename del self.song config.quit() def test_base_data(self): self.failUnlessEqual(self.song['artist'], 'piman\njzig') self.failUnlessEqual(self.song['album'], 'Quod Libet Test Data') self.failUnlessEqual(self.song['title'], 'Silence') def test_mutability(self): self.failIf(self.song.can_change('=foo')) self.failIf(self.song.can_change('foo~bar')) self.failUnless(self.song.can_change('artist')) self.failUnless(self.song.can_change('title')) self.failUnless(self.song.can_change('tracknumber')) self.failUnless(self.song.can_change('somebadtag')) self.failUnless(self.song.can_change('some%punctuated:tag.')) def _test_tag(self, tag, values, remove=True): self.failUnless(self.song.can_change(tag)) for value in values: self.song[tag] = value self.song.write() written = formats.MusicFile(self.filename) self.failUnlessEqual(written[tag], value) if remove: del self.song[tag] self.song.write() deleted = formats.MusicFile(self.filename) self.failIf(tag in deleted) def test_artist(self): # a normalish tag self._test_tag('artist', [u'me', u'you\nme', u'\u6d5c\u5d0e\u3042\u3086\u307f']) def test_date(self): # unusual special handling for mp3s self._test_tag('date', [u'2004', u'2005', u'2005-06-12'], False) def test_genre(self): # unusual special handling for mp3s self._test_tag('genre', [u'Pop', u'Rock\nClassical', u'Big Bird', u'\u30a2\u30cb\u30e1\u30b5\u30f3\u30c8\u30e9',]) def test_odd_performer(self): values = [u"A Person", u"Another"] self._test_tag("performer:vocals", values) self._test_tag("performer:guitar", values) def test_wackjob(self): # undefined tag self._test_tag('wackjob', [u'Jelly\nDanish', u'Muppet', u'\u30cf\u30f3\u30d0\u30fc\u30ac\u30fc']) tags = ['album', 'arranger', 'artist', 'author', 'comment', 'composer', 'conductor', 'copyright', 'discnumber', 'encodedby', 'genre', 'isrc', 'language', 'license', 'lyricist', 'organization', 'performer', 'title', 'tracknumber', 'version', 'xyzzy_undefined_tag', 'musicbrainz_trackid', 'releasecountry'] for ext in formats._infos.keys(): if os.path.exists(TestMetaData.base + ext): extra_tests = {} for tag in tags: if tag in ['artist', 'date', 'genre']: continue def test_tag(self, tag=tag): self._test_tag(tag, [u'a']) extra_tests['test_tag_' + tag] = test_tag def test_tags(self, tag=tag): self._test_tag(tag, [u'b\nc']) extra_tests['test_tags_' + tag] = test_tags testcase = type('MetaData' + ext, (TestMetaData,), extra_tests) testcase.ext = ext add(testcase) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_util.py������������������������������������������������������������������0000644�0001750�0001750�00000046202�12173213426�017467� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import sys import os import re from quodlibet import util from quodlibet.util import format_time_long as f_t_l class Tmkdir(TestCase): def test_exists(self): util.mkdir(".") def test_notdirectory(self): self.failUnlessRaises(OSError, util.mkdir, __file__) def test_manydeep(self): self.failUnless(not os.path.isdir("nonext")) util.mkdir("nonext/test/test2/test3") try: self.failUnless(os.path.isdir("nonext/test/test2/test3")) finally: os.rmdir("nonext/test/test2/test3") os.rmdir("nonext/test/test2") os.rmdir("nonext/test") os.rmdir("nonext") add(Tmkdir) class Tiscommand(TestCase): def test_ispartial(self): self.failUnless(util.iscommand("ls")) def test_isfull(self): self.failUnless(util.iscommand("/bin/ls")) def test_notpartial(self): self.failIf(util.iscommand("zzzzzzzzz")) def test_notfull(self): self.failIf(util.iscommand("/bin/zzzzzzzzz")) def test_empty(self): self.failIf(util.iscommand("")) def test_symlink(self): self.failUnless(util.iscommand("pidof")) def test_dir(self): self.failIf(util.iscommand("/bin")) def test_dir_in_path(self): self.failIf(util.iscommand("X11")) add(Tiscommand) class Tmtime(TestCase): def test_equal(self): self.failUnlessEqual(util.mtime("."), os.path.getmtime(".")) def test_bad(self): self.failIf(os.path.exists("/dev/doesnotexist")) self.failUnlessEqual(util.mtime("/dev/doesnotexist"), 0) add(Tmtime) class Tunexpand(TestCase): d = os.path.expanduser("~") def test_base(self): self.failUnlessEqual(util.unexpand(self.d), "~") def test_base_trailing(self): self.failUnlessEqual(util.unexpand(self.d + "/"), "~/") def test_noprefix(self): self.failUnlessEqual( util.unexpand(self.d + "foobar/"), self.d + "foobar/") def test_subfile(self): self.failUnlessEqual( util.unexpand(os.path.join(self.d, "la/la")), "~/la/la") add(Tunexpand) class Tformat_rating(TestCase): def test_empty(self): self.failUnlessEqual(util.format_rating(0, blank=False), "") def test_full(self): self.failUnlessEqual( len(util.format_rating(1, blank=False)), int(1/util.RATING_PRECISION)) def test_rating_length(self): util.RATING_PRECISION = 4 for i in range(0, int(1/util.RATING_PRECISION+1)): self.failUnlessEqual( i, len(util.format_rating(i * util.RATING_PRECISION, blank=False))) def test_bogus(self): max_length = int(1 / util.RATING_PRECISION) self.failUnlessEqual(len(util.format_rating(2**32-1, blank=False)), max_length) self.failUnlessEqual(len(util.format_rating(-4.2, blank=False)), 0) def test_blank_lengths(self): """Check that there are no unsuspected edge-cases for various rating precisions""" for util.RATING_PRECISION in [0.1, 0.2, 0.25, 1/3.0, 0.5]: steps = int(1/util.RATING_PRECISION) self.failUnlessEqual(len(util.format_rating(1)), steps) self.failUnlessEqual(len(util.format_rating(0)), steps) self.failUnlessEqual(len(util.format_rating(0.5)), steps) self.failUnlessEqual(len(util.format_rating(1/3.0)), steps) def test_blank_values(self): util.RATING_PRECISION = 0.2 util.BLANK_RATING_SYMBOL = "0" util.RATING_SYMBOL = "1" # Easy ones first self.failUnlessEqual(util.format_rating(0.0), "00000") self.failUnlessEqual(util.format_rating(0.2), "10000") self.failUnlessEqual(util.format_rating(0.8), "11110") self.failUnlessEqual(util.format_rating(1.0), "11111") # A bit arbitrary, but standard behaviour self.failUnlessEqual(util.format_rating(0.5), "11100") # Test rounding down... self.failUnlessEqual(util.format_rating(0.6), "11100") # Test rounding up... self.failUnlessEqual(util.format_rating(0.9), "11111") # You never know... self.failUnlessEqual(util.format_rating(3.0), "11111") self.failUnlessEqual(util.format_rating(-0.5), "00000") add(Tformat_rating) class Tescape(TestCase): def test_empty(self): self.failUnlessEqual(util.escape(""), "") def test_roundtrip(self): for s in ["foo&", "<&>", "&", "&", "<&testing&>amp;"]: esc = util.escape(s) self.failIfEqual(s, esc) self.failUnlessEqual(s, util.unescape(esc)) add(Tescape) class Tunescape(Tescape): def test_empty(self): self.failUnlessEqual(util.unescape(""), "") add(Tunescape) class Tre_esc(TestCase): def test_empty(self): self.failUnlessEqual(re.escape(""), "") def test_safe(self): self.failUnlessEqual(re.escape("fo o"), "fo o") def test_unsafe(self): self.failUnlessEqual(re.escape("!bar"), r"\!bar") def test_many_unsafe(self): self.failUnlessEqual( re.escape("*quux#argh?woo"), r"\*quux\#argh\?woo") add(Tre_esc) class Tsplit_scan_dirs(TestCase): def test_basic(self): if sys.platform == "win32": res = util.split_scan_dirs(r":Z:\foo:C:/windows:") self.assertEquals(res, [r"Z:\foo", "C:/windows"]) else: res = util.split_scan_dirs(":/home/user/Music:/opt/party:") self.assertEquals(res, ["/home/user/Music", "/opt/party"]) add(Tsplit_scan_dirs) class Tdecode(TestCase): def test_empty(self): self.failUnlessEqual(util.decode(""), "") def test_safe(self): self.failUnlessEqual(util.decode("foo!"), "foo!") def test_invalid(self): self.failUnlessEqual( util.decode("fo\xde"), u'fo\ufffd [Invalid Encoding]') add(Tdecode) class Tencode(TestCase): def test_empty(self): self.failUnlessEqual(util.encode(""), "") def test_unicode(self): self.failUnlessEqual(util.encode(u"abcde"), "abcde") add(Tencode) class Tcapitalize(TestCase): def test_empty(self): self.failUnlessEqual(util.capitalize(""), "") def test_firstword(self): self.failUnlessEqual(util.capitalize("aa b"), "Aa b") def test_preserve(self): self.failUnlessEqual(util.capitalize("aa B"), "Aa B") def test_nonalphabet(self): self.failUnlessEqual(util.capitalize("!aa B"), "!aa B") add(Tcapitalize) class Tsplit_value(TestCase): def test_single(self): self.failUnlessEqual(util.split_value("a b"), ["a b"]) def test_double(self): self.failUnlessEqual(util.split_value("a, b"), ["a", "b"]) def test_custom_splitter(self): self.failUnlessEqual(util.split_value("a b", [" "]), ["a", "b"]) def test_two_splitters(self): self.failUnlessEqual( util.split_value("a, b and c", [",", "and"]), ["a", "b and c"]) def test_no_splitters(self): self.failUnlessEqual(util.split_value("a b", []), ["a b"]) def test_wordboundry(self): self.failUnlessEqual( util.split_value("Andromeda and the Band", ["and"]), ["Andromeda", "the Band"]) def test_unicode_wordboundry(self): val = '\xe3\x81\x82&\xe3\x81\x84'.decode('utf-8') self.failUnlessEqual(util.split_value(val), val.split("&")) add(Tsplit_value) class Thuman_sort(TestCase): def smaller(self, x, y): return util.human_sort_key(x) < util.human_sort_key(y) def test_human(self): self.failUnlessEqual(self.smaller(u"2", u"15"), True) self.failUnlessEqual(self.smaller(u" 2", u"15 "), True) self.failUnlessEqual(self.smaller(u"a2 g", u"a 2z"), True) self.failUnlessEqual(self.smaller(u"a2zz", u"a2.1z"), True) self.failUnlessEqual(self.smaller(u"42o", u"42\xf6"), True) self.failUnlessEqual(self.smaller(u"42\xf6", u"42p"), True) self.failUnlessEqual(self.smaller(u"bbb", u"zzz3"), True) def test_false(self): # album browser needs that to sort albums without artist/title # to the bottom self.failIf(util.human_sort_key("")) def test_white(self): self.failUnlessEqual( util.human_sort_key(u" 3foo bar6 42.8"), util.human_sort_key(u"3 foo bar6 42.8 ")) self.failUnlessEqual(64.0 in util.human_sort_key(u"64. 8"), True) add(Thuman_sort) class Tformat_time(TestCase): def test_seconds(self): self.failUnlessEqual(util.format_time(0), "0:00") self.failUnlessEqual(util.format_time(59), "0:59") def test_minutes(self): self.failUnlessEqual(util.format_time(60), "1:00") self.failUnlessEqual(util.format_time(60*59+59), "59:59") def test_hourss(self): self.failUnlessEqual(util.format_time(60*60), "1:00:00") self.failUnlessEqual(util.format_time(60*60+60*59+59), "1:59:59") def test_negative(self): self.failUnlessEqual(util.format_time(-124), "-2:04") add(Tformat_time) class Tparse_time(TestCase): def test_invalid(self): self.failUnlessEqual(util.parse_time("not a time"), 0) def test_except(self): self.failUnlessRaises(ValueError, util.parse_time, "not a time", None) def test_empty(self): self.failUnlessEqual(util.parse_time(""), 0) def test_roundtrip(self): # The values are the ones tested for Tformat_time, so we know they # will be formatted correctly. They're also representative of # all the major patterns. for i in [0, 59, 60, 60*59+59, 60*60, 60*60+60*59+59]: self.failUnlessEqual(util.parse_time(util.format_time(i)), i) def test_negative(self): self.failUnlessEqual(util.parse_time("-2:04"), -124) add(Tparse_time) class Tformat_size(TestCase): def t_dict(self, d): map(self.failUnlessEqual, map(util.format_size, d.keys()), d.values()) def test_bytes(self): self.t_dict({ 0: "0 B", 1: "1 B", 1023: "1023 B" }) def test_kbytes(self): self.t_dict({ 1024: "1.00 KB", 1536: "1.50 KB", 10240: "10 KB", 15360: "15 KB" }) def test_mbytes(self): self.t_dict({ 1024*1024: "1.00 MB", 1024*1536: "1.50 MB", 1024*10240: "10.0 MB", 1024*15360: "15.0 MB", 123456*1024: "121 MB", 765432*1024: "747 MB"}) def test_gbytes(self): self.t_dict({ 1024*1024*1024: "1.0 GB", 1024*1024*1536: "1.5 GB", 1024*1024*10240: "10.0 GB", 1024*1024*15360: "15.0 GB"}) add(Tformat_size) class Tsplit_title(TestCase): def test_trailing(self): self.failUnlessEqual(util.split_title("foo ~"), ("foo ~", [])) def test_prefixed(self): self.failUnlessEqual(util.split_title("~foo "), ("~foo ", [])) def test_prefix_and_trailing(self): self.failUnlessEqual(util.split_title("~foo ~"), ("~foo ~", [])) def test_prefix_and_version(self): self.failUnlessEqual(util.split_title("~foo ~bar~"), ("~foo", ["bar"])) def test_simple(self): self.failUnlessEqual(util.split_title("foo (baz)"), ("foo", ["baz"])) def test_two_versions(self): self.failUnlessEqual( util.split_title("foo [b, c]"), ("foo", ["b", "c"])) def test_custom_splitter(self): self.failUnlessEqual( util.split_title("foo [b c]", " "), ("foo", ["b", "c"])) add(Tsplit_title) class Tsplit_album(TestCase): def test_album_looks_like_disc(self): self.failUnlessEqual( util.split_album("disk 2"), ("disk 2", None)) def test_basic_disc(self): self.failUnlessEqual( util.split_album("foo disc 1/2"), ("foo", "1/2")) def test_looks_like_disc_but_isnt(self): self.failUnlessEqual( util.split_album("disc foo disc"), ("disc foo disc", None)) def test_disc_album_and_disc(self): self.failUnlessEqual( util.split_album("disc foo disc 1"), ("disc foo", "1")) def test_weird_disc(self): self.failUnlessEqual( util.split_album("foo ~disk 3~"), ("foo", "3")) def test_weird_not_disc(self): self.failUnlessEqual( util.split_album("foo ~crazy 3~"), ("foo ~crazy 3~", None)) add(Tsplit_album) class Tsplit_people(TestCase): def test_parened_person(self): self.failUnlessEqual(util.split_people("foo (bar)"), ("foo", ["bar"])) def test_with_person(self): self.failUnlessEqual( util.split_people("foo (With bar)"), ("foo", ["bar"])) def test_with_with_person(self): self.failUnlessEqual( util.split_people("foo (with with bar)"), ("foo", ["with bar"])) def test_featuring_two_people(self): self.failUnlessEqual( util.split_people("foo featuring bar, qx"), ("foo", ["bar", "qx"])) def test_featuring_person_bracketed(self): self.failUnlessEqual( util.split_people("foo (Ft. bar)"), ("foo", ["bar"])) self.failUnlessEqual( util.split_people("foo(feat barman)"), ("foo", ["barman"])) def test_originally_by(self): self.failUnlessEqual( util.split_people("title (originally by artist)"), ("title", ["artist"])) self.failUnlessEqual( util.split_people("title [originally by artist & artist2]"), ("title", ["artist", "artist2"])) def test_cover(self): self.failUnlessEqual( util.split_people("Pyscho Killer [Talking Heads Cover]"), ("Pyscho Killer", ["Talking Heads"])) add(Tsplit_people) class Ttag(TestCase): def test_empty(self): self.failUnlessEqual(util.tag(""), "Invalid tag") def test_basic(self): self.failUnlessEqual(util.tag("title"), "Title") def test_basic_nocap(self): self.failUnlessEqual(util.tag("title", False), "title") def test_internal(self): self.failUnlessEqual(util.tag("~year"), "Year") def test_numeric(self): self.failUnlessEqual(util.tag("~#year"), "Year") def test_two(self): self.failUnlessEqual(util.tag("title~version"), "Title / Version") def test_two_nocap(self): self.failUnlessEqual( util.tag("title~version", False), "title / version") def test_precap_handling(self): self.failUnlessEqual(util.tag("labelid"), "Label ID") self.failUnlessEqual(util.tag("labelid", False), "label ID") add(Ttag) class Ttagsplit(TestCase): def test_single_tag(self): self.failUnlessEqual(util.tagsplit("foo"), ["foo"]) def test_synth_tag(self): self.failUnlessEqual(util.tagsplit("~foo"), ["~foo"]) def test_two_tags(self): self.failUnlessEqual(util.tagsplit("foo~bar"), ["foo", "bar"]) def test_two_prefix(self): self.failUnlessEqual(util.tagsplit("~foo~bar"), ["foo", "bar"]) def test_synth(self): self.failUnlessEqual(util.tagsplit("~foo~~bar"), ["foo", "~bar"]) def test_numeric(self): self.failUnlessEqual(util.tagsplit("~#bar"), ["~#bar"]) def test_two_numeric(self): self.failUnlessEqual(util.tagsplit("~#foo~~#bar"), ["~#foo", "~#bar"]) def test_two_synth_start(self): self.failUnlessEqual( util.tagsplit("~~people~album"), ["~people", "album"]) add(Ttagsplit) class Tpattern(TestCase): def test_empty(self): self.failUnlessEqual(util.pattern(""), "") def test_basic(self): self.failUnlessEqual(util.pattern("<title>"), "Title") def test_basic_nocap(self): self.failUnlessEqual(util.pattern("<title>", False), "title") def test_internal(self): self.failUnlessEqual(util.pattern("<~plays>"), "Plays") def test_tied(self): self.failUnlessEqual(util.pattern("<~title~album>"), "Title - Album") def test_unknown(self): self.failUnlessEqual(util.pattern("<foobarbaz>"), "Foobarbaz") def test_condition(self): self.failUnlessEqual(util.pattern("<~year|<~year> - <album>|<album>>"), "Year - Album") def test_escape(self): self.failUnlessEqual(util.pattern("\<i\><&>\</i\>", esc=True), "<i>&</i>") def test_invalid(self): self.failUnlessEqual(util.pattern("<date"), "") util.pattern("<d\\") add(Tpattern) class Tformat_time_long(TestCase): def test_second(s): s.assertEquals(f_t_l(1).split(", ")[0], _("1 second")) def test_seconds(s): s.assertEquals(f_t_l(2).split(", ")[0], _("%d seconds")%2) def test_notminutes(s): s.assertEquals(f_t_l(59).split(", ")[0], _("%d seconds")%59) def test_minute(s): s.assertEquals(f_t_l(60), _("1 minute")) def test_minutes(s): s.assertEquals(f_t_l(120).split(", ")[0], _("%d minutes")%2) def test_nothours(s): s.assertEquals(f_t_l(3599).split(", ")[0], _("%d minutes")%59) def test_hour(s): s.assertEquals(f_t_l(3600), _("1 hour")) def test_hours(s): s.assertEquals(f_t_l(7200), _("%d hours")%2) def test_notdays(s): s.assertEquals(f_t_l(86399).split(", ")[0], _("%d hours")%23) def test_seconds_dropped(s): s.assertEquals(len(f_t_l(3601).split(", ")), 2) def test_day(s): s.assertEquals(f_t_l(86400), _("1 day")) def test_days(s): s.assertEquals(f_t_l(172800).split(", ")[0], _("%d days")%2) def test_notyears(s): s.assertEquals(f_t_l(31535999).split(", ")[0], _("%d days")%364) def test_year(s): s.assertEquals(f_t_l(31536000), _("1 year")) def test_years(s): s.assertEquals(f_t_l(63072000).split(", ")[0], _("%d years")%2) def test_drop_zero(s): s.assertEquals(f_t_l(3601), ", ".join([_("1 hour"), _("1 second")])) add(Tformat_time_long) class Tspawn(TestCase): def test_simple(self): self.failUnless(util.spawn(["ls", "."], stdout=True)) def test_invalid(self): from gi.repository import GLib self.failUnlessRaises(GLib.GError, util.spawn, ["not a command"]) def test_types(self): self.failUnlessRaises(TypeError, util.spawn, [u"ls"]) def test_get_output(self): fileobj = util.spawn(["echo", "'$1'", '"$2"', ">3"], stdout=True) self.failUnlessEqual(fileobj.read().split(), ["'$1'", '"$2"', ">3"]) add(Tspawn) class Txdg_dirs(TestCase): def test_system_data_dirs(self): os.environ["XDG_DATA_DIRS"] = "/xyz" self.failUnlessEqual(util.xdg_get_system_data_dirs()[0], "/xyz") del os.environ["XDG_DATA_DIRS"] dirs = util.xdg_get_system_data_dirs() self.failUnlessEqual(dirs[0], "/usr/local/share/") self.failUnlessEqual(dirs[1], "/usr/share/") def test_data_home(self): os.environ["XDG_DATA_HOME"] = "/xyz" self.failUnlessEqual(util.xdg_get_data_home(), "/xyz") del os.environ["XDG_DATA_HOME"] should = os.path.join(os.path.expanduser("~"), ".local", "share") self.failUnlessEqual(util.xdg_get_data_home(), should) add(Txdg_dirs) class Tpathname2url(TestCase): def test_win(self): cases = { r"c:\abc\def" : "/c:/abc/def", r"C:\a b\c.txt": "/C:/a%20b/c.txt", r"\\xy\z.txt": "xy/z.txt", r"C:\a:b\c:d": "/C:/a%3Ab/c%3Ad" } p2u = util.pathname2url_win32 for inp, should in cases.iteritems(): self.failUnlessEqual(p2u(inp), should) add(Tpathname2url) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_x.py����������������������������������������������������������������0000644�0001750�0001750�00000006602�12173212464�020015� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from helper import visible from gi.repository import Gtk from quodlibet.qltk import x from quodlibet import config class Window(TestCase): def test_ctr(self): x.Window().destroy() add(Window) class Notebook(TestCase): def test_widget_str(self): n = x.Notebook() c = Gtk.VBox() n.append_page(c, "A Test") self.failUnlessEqual("A Test", n.get_tab_label(c).get_text()) n.destroy() def test_widget_label(self): l = Gtk.Label(label="A Test") n = x.Notebook() c = Gtk.VBox() n.append_page(c, l) self.failUnless(l is n.get_tab_label(c)) c.destroy() def test_widget_error(self): n = x.Notebook() w = Gtk.VBox() self.failUnlessRaises(TypeError, n.append_page, w) w.destroy() n.destroy() add(Notebook) class Frame(TestCase): def test_label(self): self.failUnlessEqual( x.Frame("foo").get_label_widget().get_text(), "foo") add(Frame) class MenuItem(TestCase): def test_ctr(self): self.failUnless(x.MenuItem("foo", Gtk.STOCK_FIND)) add(MenuItem) class Button(TestCase): def test_ctr(self): self.failUnless(x.Button("foo", Gtk.STOCK_FIND)) add(Button) class RPaned(object): Kind = None def test_ctr(self): self.Kind().destroy() def test_pre_alloc(self): p = self.Kind() p.set_relative(0.25) self.failUnlessEqual(p.get_relative(), 0.25) def test_visible_no_setup(self): p = self.Kind() with visible(p): pass def test_visible_pre_setup_children(self): p = self.Kind() p.pack1(Gtk.Button()) p.pack2(Gtk.Button()) p.set_relative(0.75) self.failUnlessEqual(p.get_relative(), 0.75) with visible(p, width=200, height=200) as p: self.failUnlessAlmostEqual(p.get_relative(), 0.75, 2) def test_visible_pre_setup_empty(self): p = self.Kind() p.set_relative(0.75) self.failUnlessEqual(p.get_relative(), 0.75) with visible(p) as p: self.failUnlessEqual(p.get_relative(), 0.75) class RHPaned(TestCase, RPaned): Kind = x.RHPaned add(RHPaned) class RVPaned(TestCase, RPaned): Kind = x.RVPaned add(RVPaned) class TConfigRPaned(TestCase): def setUp(self): config.init() def tearDown(self): config.quit() def test_basic(self): self.failUnless(config.get("memory", "foobar", None) is None) p = x.ConfigRVPaned("memory", "foobar", 0.75) p.pack1(Gtk.Button()) p.pack2(Gtk.Button()) with visible(p, width=200, height=200) as p: self.failUnlessAlmostEqual(p.get_relative(), 0.75, 2) p.props.position = 20 self.failUnlessAlmostEqual(p.get_relative(), 0.10, 2) config_value = config.getfloat("memory", "foobar") self.failUnlessAlmostEqual(config_value, 0.10, 2) add(TConfigRPaned) class TAlignment(TestCase): def test_ctr(self): button = Gtk.Button() a = x.Alignment(button, left=2, right=4, top=5, bottom=-2, border=2) self.failUnlessEqual(a.get_padding(), (7, 0, 4, 6)) self.failUnless(a.get_child() is button) a.destroy() add(TAlignment) class TScrolledWindow(TestCase): def test_ctr(self): w = x.ScrolledWindow() w.destroy() add(TScrolledWindow) ������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_tagsfrompath.py�����������������������������������������������������0000644�0001750�0001750�00000014013�12161032160�022226� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.tagsfrompath import TagsFromPattern from quodlibet.qltk.tagsfrompath import TitleCase, SplitTag, UnderscoresToSpaces import quodlibet.config class FilterTestCase(TestCase): def setUp(self): quodlibet.config.init() self.c = self.Kind() def tearDown(self): self.c.destroy() quodlibet.config.quit() class TTitleCase(FilterTestCase): Kind = TitleCase def test_simple(self): self.failUnlessEqual(self.c.filter("title", "foo bar"), "Foo Bar") def test_apostrophe(self): self.failUnlessEqual(self.c.filter("title", "IT's"), "IT's") add(TTitleCase) class TSplitTag(FilterTestCase): Kind = SplitTag def test_simple(self): self.failUnlessEqual(self.c.filter("title", "foo & bar"), "foo\nbar") add(TSplitTag) class TUnderscoresToSpaces(FilterTestCase): Kind = UnderscoresToSpaces def test_simple(self): self.failUnlessEqual(self.c.filter("titke", "foo_bar"), "foo bar") add(TUnderscoresToSpaces) class TTagsFromPattern(TestCase): def setUp(self): self.f1 = '/path/Artist/Album/01 - Title.mp3' self.f2 = '/path/Artist - Album/01. Title.mp3' self.f3 = '/path/01 - Artist - Title.mp3' self.b1 = '/path/01 - Title' self.b2 = '/path/01 - Artist - Title' self.nomatch = {} def test_songtypes(self): from quodlibet import formats pat = TagsFromPattern('<tracknumber>. <title>') tracktitle = {'tracknumber': '01', 'title': 'Title' } for ext, kind in formats._infos.iteritems(): f = formats._audio.AudioFile() if not isinstance(kind, type): continue f.__class__ = kind f["~filename"] = '/path/Artist - Album/01. Title' + ext self.assertEquals(pat.match(f), tracktitle, ext) def test_skip(self): pat = TagsFromPattern('<path>/<~>/<~>/<tracknumber> - <title>') self.failUnlessEqual(len(pat.headers), 3) song = pat.match({"~filename":self.f1}) self.failUnlessEqual(song.get("path"), "path") self.failUnlessEqual(song.get("title"), "Title") self.failIf(song.get("album")) self.failIf(song.get("artist")) def test_dict(self): tracktitle = {'tracknumber': '01', 'title': 'Title' } pat = TagsFromPattern('<tracknumber> - <title>') self.assertEquals(pat.match({"~filename":self.f1}), tracktitle) def test_nongreedy(self): pat = TagsFromPattern('<artist> - <title>') dic = pat.match("Prefuse 73 - The End of Biters - International.ogg") self.assertEquals(dic["artist"], "Prefuse 73") self.assertEquals(dic["title"], "The End of Biters - International") def test_empty(self): pat = TagsFromPattern('') self.assertEquals(pat.match(self.f1), self.nomatch) self.assertEquals(pat.match(self.f2), self.nomatch) self.assertEquals(pat.match(self.f3), self.nomatch) self.assertEquals(pat.match(self.b1), self.nomatch) self.assertEquals(pat.match(self.b2), self.nomatch) def test_tracktitle(self): tracktitle = {'tracknumber': '01', 'title': 'Title' } btracktitle = {'tracknumber': '01', 'title': 'Artist - Title' } pat = TagsFromPattern('<tracknumber> - <title>') self.assertEquals(pat.match(self.f1), tracktitle) self.assertEquals(pat.match(self.f2), self.nomatch) self.assertEquals(pat.match(self.f3), btracktitle) self.assertEquals(pat.match(self.b1), self.nomatch) self.assertEquals(pat.match(self.b2), self.nomatch) def test_path(self): albumtracktitle = {'tracknumber': '01', 'title': 'Title', 'album': 'Album' } balbumtracktitle = {'tracknumber': '01', 'title': 'Artist - Title', 'album': 'path' } pat = TagsFromPattern('<album>/<tracknumber> - <title>') self.assertEquals(pat.match(self.f1), albumtracktitle) self.assertEquals(pat.match(self.f2), self.nomatch) self.assertEquals(pat.match(self.f3), balbumtracktitle) self.assertEquals(pat.match(self.b1), self.nomatch) self.assertEquals(pat.match(self.b2), self.nomatch) def test_all(self): all = {'tracknumber': '01', 'title': 'Title', 'album': 'Album', 'artist': 'Artist' } pat = TagsFromPattern('<artist>/<album>/<tracknumber> - <title>') self.assertEquals(pat.match(self.f1), all) self.assertEquals(pat.match(self.f2), self.nomatch) self.assertEquals(pat.match(self.f3), self.nomatch) self.assertEquals(pat.match(self.b1), self.nomatch) self.assertEquals(pat.match(self.b2), self.nomatch) def test_post(self): btracktitle = {'tracknumber': '01', 'title': 'Titl' } vbtracktitle = {'tracknumber': '01', 'title': 'Artist - Titl' } pat = TagsFromPattern('<tracknumber> - <title>e') self.assertEquals(pat.match(self.f1), btracktitle) self.assertEquals(pat.match(self.f2), self.nomatch) self.assertEquals(pat.match(self.f3), vbtracktitle) self.assertEquals(pat.match(self.b1), btracktitle) self.assertEquals(pat.match(self.b2), vbtracktitle) def test_nofakes(self): pat = TagsFromPattern('<~#track> - <title>') self.assertEquals(pat.match(self.f1), self.nomatch) self.assertEquals(pat.match(self.f2), self.nomatch) self.assertEquals(pat.match(self.f3), self.nomatch) self.assertEquals(pat.match(self.b1), self.nomatch) self.assertEquals(pat.match(self.b2), self.nomatch) def test_disctrack(self): pat = TagsFromPattern('<discnumber><tracknumber>. <title>') self.assertEquals(pat.match('101. T1.ogg'), dict(discnumber='1', tracknumber='01', title='T1')) self.assertEquals(pat.match('1318. T18.ogg'), dict(discnumber='13', tracknumber='18', title='T18')) self.assertEquals(pat.match('24. T4.ogg'), dict(discnumber='2', tracknumber='4', title='T4')) add(TTagsFromPattern) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_util_uri.py��������������������������������������������������������������0000644�0001750�0001750�00000004214�12161032160�020332� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.util.uri import URI class TURI(TestCase): def setUp(s): s.http_uri = URI("http://www.example.com/~piman;woo?bar=quux#whee") s.rfile_uri = URI("file://example.com/home/piman/crazy") s.file_uri = URI.frompath("/home/piman/cr!azy") s.extra_uri = URI("file:///////////home/piman") def test_type(s): s.failUnless(isinstance(s.http_uri, URI)) s.failUnless(isinstance(s.http_uri, basestring)) # bad constructor tests def test_empty(s): s.failUnlessRaises(ValueError, URI, "") def test_no_scheme(s): s.failUnlessRaises(ValueError, URI, "foobar/?quux") def test_no_loc_or_path(s): s.failUnlessRaises(ValueError, URI, "http://") # good constructor tests def test_scheme(s): s.failUnlessEqual(s.http_uri.scheme, "http") def test_netlocl(s): s.failUnlessEqual(s.http_uri.netloc, "www.example.com") def test_path(s): s.failUnlessEqual(s.http_uri.path, "/~piman") def test_params(s): s.failUnless(s.http_uri.params, "woo") def test_query(s): s.failUnlessEqual(s.http_uri.query, "bar=quux") def test_fragment(s): s.failUnlessEqual(s.http_uri.fragment, "whee") # unescaping def test_unescaped(s): s.failUnlessEqual(s.file_uri.unescaped, "file:///home/piman/cr!azy") s.failUnlessEqual(s.http_uri.unescaped, s.http_uri) # local file handling def test_frompath(s): s.failUnlessEqual(s.file_uri, "file:///home/piman/cr%21azy") s.failUnlessEqual(s.file_uri.filename, "/home/piman/cr!azy") def test_bad_files(s): s.failUnlessRaises(ValueError, lambda: s.http_uri.filename) s.failUnlessRaises(ValueError, lambda: s.http_uri.filename) def test_is_filename(s): s.failUnless(s.file_uri.is_filename) s.failIf(s.rfile_uri.is_filename) s.failIf(s.http_uri.is_filename) # test urlparse workaround def test_urlparse_workaround(s): s.failUnless(s.extra_uri.is_filename) s.failIf(s.extra_uri.netloc) s.failUnlessEqual(s.extra_uri.filename, "/home/piman") add(TURI) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_browsers_search.py�������������������������������������������������������0000644�0001750�0001750�00000007146�12173213426�021711� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from gi.repository import Gtk import quodlibet.browsers.search import quodlibet.config from quodlibet.browsers.search import EmptyBar, SearchBar from quodlibet.formats._audio import AudioFile from quodlibet.library import SongLibrary, SongLibrarian # Don't sort yet, album_key makes it complicated... SONGS = [AudioFile({ "title": "one", "artist": "piman", "~filename": "/dev/null"}), AudioFile({ "title": "two", "artist": "mu", "~filename": "/dev/zero"}), AudioFile({ "title": "three", "artist": "boris", "~filename": "/bin/ls"}), AudioFile({ "title": "four", "artist": "random", "album": "don't stop", "labelid": "65432-1", "~filename": "/dev/random"}), AudioFile({ "title": "five", "artist": "shell", "album": "don't stop", "labelid": "12345-6", "~filename": "/dev/sh"})] class TEmptyBar(TestCase): Bar = EmptyBar def setUp(self): quodlibet.config.init() quodlibet.browsers.search.library = SongLibrary() quodlibet.browsers.search.library.librarian = SongLibrarian() for af in SONGS: af.sanitize() quodlibet.browsers.search.library.add(SONGS) self.bar = self.Bar(quodlibet.browsers.search.library, False) self.bar.connect('songs-selected', self._expected) def _expected(self, bar, songs, sort): songs.sort() self.failUnlessEqual(self.expected, songs) self.expected = None def _do(self): while Gtk.events_pending(): Gtk.main_iteration() self.failUnless(self.expected is None) def test_can_filter(self): for key in ["foo", "title", "fake~key", "~woobar", "~#huh"]: self.failUnless(self.bar.can_filter(key)) def test_empty_is_all(self): self.bar.filter_text("") self.expected = list(sorted(SONGS)) self._do() def test_dynamic(self): self.failUnless(self.bar.dynamic(SONGS[0])) self.bar.filter_text("this does not match any song") self.expected = [] self.failIf(self.bar.dynamic(SONGS[0])) def test_filter(self): self.expected = [SONGS[1]] self.bar.filter("title", ["two"]) def test_filter_again(self): self.expected = sorted(SONGS[3:5]) self.bar.filter("album", ["don't stop"]) def test_filter_notvalue(self): self.expected = sorted(SONGS[0:2]) self.bar.filter("artist", ["notvalue", "mu", "piman"]) def test_filter_none(self): self.expected = [] self.bar.filter("title", ["not a value"]) def test_filter_album_by_labelid(self): self.expected = [SONGS[3]] self.bar.filter("labelid", [("65432-1")]) def test_filter_numeric(self): self.expected = list(sorted(SONGS)) self.bar.filter("~#length", [0]) def test_saverestore(self): self.bar.filter_text("title = %s" % SONGS[0]["title"]) self.expected = [SONGS[0]] self._do() self.bar.save() self.bar.filter_text("") self.expected = list(sorted(SONGS)) self._do() self.bar.restore() self.expected = [SONGS[0]] self._do() def tearDown(self): self.bar.destroy() quodlibet.browsers.search.library.destroy() quodlibet.config.quit() add(TEmptyBar) class TSearchBar(TEmptyBar): Bar = SearchBar add(TSearchBar) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_browsers_playlists.py����������������������������������������������������0000644�0001750�0001750�00000013724�12161032160�022456� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import os import tempfile import shutil from quodlibet.browsers.playlists import ParseM3U, ParsePLS, Playlist, Playlists from quodlibet.player.nullbe import NullPlayer from quodlibet.library import SongLibrary import quodlibet.config from quodlibet.formats._audio import AudioFile from quodlibet.library.librarians import SongLibrarian from quodlibet.library.libraries import FileLibrary def makename(): return tempfile.mkstemp()[1] class TParsePlaylist(TestCase): def setUp(self): quodlibet.config.init() def tearDown(self): quodlibet.config.quit() def test_parse_empty(self): name = makename() file(name, "w").close() pl = self.Parse(name) os.unlink(name) self.failUnlessEqual(0, len(pl)) pl.delete() def test_parse_onesong(self): name = makename() f = file(name, "w") target = self.prefix target += os.path.join(os.getcwd(), "tests/data/silence-44-s.ogg") f.write(target) f.close() list = self.Parse(name) os.unlink(name) self.failUnlessEqual(len(list), 1) self.failUnlessEqual(list[0]("title"), "Silence") list.delete() def test_parse_onesong_uri(self): name = makename() target = os.path.join(os.getcwd(), "tests/data/silence-44-s.ogg") from quodlibet.util.uri import URI target = URI.frompath(target) target = self.prefix + target f = file(name, "w") f.write(target) f.close() list = self.Parse(name) os.unlink(name) self.failUnlessEqual(len(list), 1) self.failUnlessEqual(list[0]("title"), "Silence") list.delete() class TParseM3U(TParsePlaylist): Parse = staticmethod(ParseM3U) prefix = "" add(TParseM3U) class TParsePLS(TParsePlaylist): Parse = staticmethod(ParsePLS) prefix = "File1=" add(TParsePLS) class TPlaylist(TestCase): def setUp(self): self._dir = tempfile.mkdtemp() def tearDown(self): shutil.rmtree(self._dir) def test_make(self): p1 = Playlist.new(self._dir, "Does not exist") self.failUnlessEqual(0, len(p1)) self.failUnlessEqual(p1.name, "Does not exist") p1.delete() def test_rename_working(self): p1 = Playlist.new(self._dir, "Foobar") p1.rename("Foo Quuxly") self.failUnlessEqual(p1.name, "Foo Quuxly") p1.delete() def test_rename_nothing(self): p1 = Playlist.new(self._dir, "Foobar") self.failUnlessRaises(ValueError, p1.rename, "") p1.delete() def test_rename_dup(self): p1 = Playlist.new(self._dir, "Foobar") p2 = Playlist.new(self._dir, "Crazy") self.failUnlessRaises(ValueError, p2.rename, "Foobar") p1.delete() p2.delete() def test_make_dup(self): p1 = Playlist.new(self._dir, "Does not exist") p2 = Playlist.new(self._dir, "Does not exist") self.failUnlessEqual(p1.name, "Does not exist") self.failUnless(p2.name.startswith("Does not exist")) self.failIfEqual(p1.name, p2.name) p1.delete() p2.delete() add(TPlaylist) class TPlaylistIntegration(TestCase): DUPLICATES = 1 SONG = AudioFile({ "title": "two", "artist": "mu", "~filename": "/dev/zero"}) SONGS = [ AudioFile({ "title": "one", "artist": "piman", "~filename": "/dev/null"}), SONG, AudioFile({ "title": "three", "artist": "boris", "~filename": "/bin/ls"}), AudioFile({ "title": "four", "artist": "random", "album": "don't stop", "labelid": "65432-1", "~filename": "/dev/random"}), SONG, ] def setUp(self): quodlibet.config.init() self.lib = quodlibet.browsers.search.library = FileLibrary() quodlibet.browsers.search.library.librarian = SongLibrarian() for af in self.SONGS: af.sanitize() self.lib.add(self.SONGS) self._dir = tempfile.mkdtemp() self.pl = Playlist.new(self._dir, "Foobar") self.pl.extend(self.SONGS) def tearDown(self): self.pl.delete() self.lib.destroy() self.lib.librarian.destroy() quodlibet.config.quit() shutil.rmtree(self._dir) def test_remove_song(self): # Check: library should have one song fewer (the duplicate) self.failUnlessEqual(len(self.lib), len(self.SONGS) - self.DUPLICATES) self.failUnlessEqual(len(self.pl), len(self.SONGS)) # Remove an unduplicated song self.pl.remove_songs([self.SONGS[0]], self.lib) self.failUnlessEqual(len(self.pl), len(self.SONGS) - 1) def test_remove_duplicated_song(self): self.failUnlessEqual(self.SONGS[1], self.SONGS[4]) self.pl.remove_songs([self.SONGS[1]], self.lib) self.failUnlessEqual(len(self.pl), len(self.SONGS) - 2) def test_remove_multi_duplicated_song(self): self.pl.extend([self.SONG, self.SONG]) self.failUnlessEqual(len(self.pl), 7) self.pl.remove_songs([self.SONG], self.lib, False) self.failUnlessEqual(len(self.pl), 7-2-2) def test_remove_duplicated_song_leave_dupes(self): self.pl.remove_songs([self.SONGS[1]], self.lib, True) self.failUnlessEqual(len(self.pl), len(self.SONGS) - 1) add(TPlaylistIntegration) class TPlaylists(TestCase): def setUp(self): quodlibet.config.init() self.library = SongLibrary() self.bar = Playlists(SongLibrary(), NullPlayer()) def test_can_filter(self): for key in ["foo", "title", "fake~key", "~woobar", "~#huh"]: self.failIf(self.bar.can_filter(key)) def tearDown(self): self.bar.destroy() self.library.destroy() quodlibet.config.quit() add(TPlaylists) ��������������������������������������������quodlibet-3.0.2/tests/test_qltk_filesel.py����������������������������������������������������������0000644�0001750�0001750�00000004111�12161032160�021150� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import os import sys sys.modules['dircache'] = os # cheat the dircache effects from quodlibet.qltk.filesel import DirectoryTree, FileSelector import quodlibet.config class TDirectoryTree(TestCase): def setUp(self): quodlibet.config.init() def tearDown(self): quodlibet.config.quit() def test_initial(self): for path in ["/", "/home", os.environ["HOME"], "/usr/bin"]: dirlist = DirectoryTree(path) model, rows = dirlist.get_selection().get_selected_rows() selected = [model[row][0] for row in rows] dirlist.destroy() self.failUnlessEqual([path], selected) def test_bad_initial(self): for path in ["/", os.environ["HOME"]]: newpath = os.path.join(path, "bin/file/does/not/exist") dirlist = DirectoryTree(newpath) model, rows = dirlist.get_selection().get_selected_rows() selected = [model[row][0] for row in rows] dirlist.destroy() self.failUnlessEqual([path], selected) def test_bad_go_to(self): newpath = "/woooooo/bar/fun/broken" dirlist = DirectoryTree("/") dirlist.go_to(newpath) dirlist.destroy() add(TDirectoryTree) class TFileSelector(TestCase): def setUp(self): quodlibet.config.init() self.fs = FileSelector( initial="/dev", filter=(lambda s: s in ["/dev/null", "/dev/zero"])) self.fs.connect('changed', self.changed) self.expected = [] self.fs.rescan() def changed(self, fs, selection): self.selection = selection model, rows = selection.get_selected_rows() files = [model[row][0] for row in rows] files.sort() self.expected.sort() self.assertEqual(files, self.expected) self.expected = None def test_select(self): self.expected = ["/dev/null", "/dev/zero"] self.selection.select_all() self.failUnless(self.expected is None) def tearDown(self): self.fs.destroy() quodlibet.config.quit() add(TFileSelector) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_formats_mod.py�����������������������������������������������������������0000644�0001750�0001750�00000000756�12161032160�021017� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import os from quodlibet.formats.mod import ModFile, extensions class TModFile(TestCase): def setUp(self): self.song = ModFile(os.path.join('tests', 'data', 'empty.xm')) def test_length(self): self.failUnlessEqual(0, self.song("~#length", 0)) def test_title(self): self.failUnlessEqual("test song", self.song["title"]) if extensions: add(TModFile) else: print "WARNING: Skipping ModFile tests. Install ModPlug." ������������������quodlibet-3.0.2/tests/test_qltk_songsmenu.py��������������������������������������������������������0000644�0001750�0001750�00000010216�12161032160�021546� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.formats._audio import AudioFile from quodlibet.library import SongLibrary from quodlibet.qltk.songsmenu import SongsMenu import quodlibet.player class TSongsMenu(TestCase): def setUp(self): self.library = SongLibrary() backend = quodlibet.player.init("nullbe") self.device = backend.init(self.library) self.songs = [AudioFile({"title": x}) for x in ["song1", "song2", "song3"]] for song in self.songs: song.sanitize(song["title"]) def test_empty(self): self.menu = SongsMenu(self.library, self.songs, plugins=False, playlists=False, queue=False, devices=False, remove=False, delete=False, edit=False) self.failUnlessEqual(0, len(self.menu)) def test_simple(self): self.menu = SongsMenu(self.library, self.songs, plugins=False) def test_playlists(self): self.menu = SongsMenu( self.library, self.songs, plugins=False, playlists=True, queue=False, devices=False, remove=False, delete=False, edit=False) self.failUnlessEqual(1, len(self.menu)) self.failUnless(self.menu.get_children()[0].props.sensitive) self.songs[0].can_add = False self.menu = SongsMenu( self.library, self.songs, plugins=False, playlists=True, queue=False, devices=False, remove=False, delete=False, edit=False) self.failUnlessEqual(1, len(self.menu)) self.failIf(self.menu.get_children()[0].props.sensitive) def test_queue(self): self.menu = SongsMenu( self.library, self.songs, plugins=False, playlists=False, queue=True, devices=False, remove=False, delete=False, edit=False) self.failUnlessEqual(1, len(self.menu)) self.failUnless(self.menu.get_children()[0].props.sensitive) self.songs[0].can_add = False self.menu = SongsMenu( self.library, self.songs, plugins=False, playlists=False, queue=True, devices=False, remove=False, delete=False, edit=False) self.failUnlessEqual(1, len(self.menu)) self.failIf(self.menu.get_children()[0].props.sensitive) def test_devices(self): self.menu = SongsMenu( self.library, self.songs, plugins=False, playlists=False, queue=False, devices=True, remove=False, delete=False, edit=False) from quodlibet import browsers if browsers.media.MediaDevices in browsers.browsers: self.failUnlessEqual(1, len(self.menu)) else: self.failUnlessEqual(0, len(self.menu)) def test_remove(self): self.menu = SongsMenu( self.library, self.songs, plugins=False, playlists=False, queue=False, devices=False, remove=True, delete=False, edit=False) self.failUnlessEqual(1, len(self.menu)) self.failIf(self.menu.get_children()[0].props.sensitive) def test_remove_sensitive(self): self.library.add(self.songs) self.menu = SongsMenu( self.library, self.songs, plugins=False, playlists=False, queue=False, devices=False, remove=True, delete=False, edit=False) self.failUnlessEqual(1, len(self.menu)) self.failUnless(self.menu.get_children()[0].props.sensitive) def test_delete(self): self.menu = SongsMenu( self.library, self.songs, plugins=False, playlists=False, queue=False, devices=False, remove=False, delete=True, edit=False) self.failUnlessEqual(1, len(self.menu)) self.failUnless(self.menu.get_children()[0].props.sensitive) self.songs[0].is_file = False self.menu = SongsMenu( self.library, self.songs, plugins=False, playlists=False, queue=False, devices=False, remove=False, delete=True, edit=False) self.failUnlessEqual(1, len(self.menu)) self.failIf(self.menu.get_children()[0].props.sensitive) def tearDown(self): self.device.destroy() self.library.destroy() try: self.menu.destroy() except AttributeError: pass else: del(self.menu) add(TSongsMenu) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_icons.py�����������������������������������������������������������������0000644�0001750�0001750�00000001512�12173212464�017621� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from tests import TestCase, add from quodlibet import const class TIconTheme(TestCase): def test_icon_theme(self): theme = Gtk.IconTheme.get_default() theme.append_search_path(const.IMAGEDIR) for i in ["audio-volume-high", "audio-volume-high", "audio-volume-medium", "audio-volume-muted", "multimedia-player", "multimedia-player-apple-ipod", "quodlibet", "exfalso", "quodlibet-missing-cover", "media-eject", "multimedia-player-ipod", "user-trash"]: self.failUnless(theme.has_icon(i)) add(TIconTheme) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_formats_apev2.py���������������������������������������������������������0000644�0001750�0001750�00000007340�12161032160�021251� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import os import shutil import tempfile import mutagen from mutagen.apev2 import BINARY, APEValue from quodlibet.formats.monkeysaudio import MonkeysAudioFile from quodlibet.formats.mpc import MPCFile class TAPEv2FileBase(TestCase): def setUp(self): raise NotImplementedError def test_can_change(self): self.failUnlessEqual(self.s.can_change(), True) self.failUnlessEqual(self.s.can_change("~"), False) self.failUnlessEqual(self.s.can_change("a"), False) self.failUnlessEqual(self.s.can_change("OggS"), True) self.failUnlessEqual(self.s.can_change("\xc3\xa4\xc3\xb6"), False) self.failUnlessEqual(self.s.can_change("sUbtitle"), False) self.failUnlessEqual(self.s.can_change("indeX"), False) self.failUnlessEqual(self.s.can_change("yEar"), False) def test_trans_keys(self): self.s["date"] = "2010" self.s.write() m = mutagen.apev2.APEv2(self.f) self.failUnlessEqual(m["Year"], "2010") m["yEar"] = "2011" m.save() self.s.reload() self.failUnlessEqual(self.s["date"], "2011") def test_ignore(self): for tag in ["inDex", "index"]: m = mutagen.apev2.APEv2(self.f) m[tag] = "foobar" m.save() self.s.reload() self.failUnlessEqual(self.s.get(tag), None) m = mutagen.apev2.APEv2(self.f) self.failUnlessEqual(m[tag], "foobar") def test_multi_case(self): self.s["AA"] = "B" self.s["aa"] = "C" self.s["BB"] = "D" self.s["Aa"] = "E" self.s.write() self.s.reload() self.failUnlessEqual(set(self.s["aa"].split()), set(["C", "B", "E"])) def test_binary_ignore(self): m = mutagen.apev2.APEv2(self.f) m["foo"] = APEValue("bar", BINARY) m.save() self.s.reload() self.failUnlessEqual(self.s.get("foo"), None) self.s.write() m = mutagen.apev2.APEv2(self.f) self.failUnlessEqual("foo" in m, True) def test_titlecase(self): self.s["isRc"] = "1234" self.s["fOoBaR"] = "5678" self.s.write() self.s.reload() self.failUnlessEqual("isrc" in self.s, True) self.failUnlessEqual("foobar" in self.s, True) m = mutagen.apev2.APEv2(self.f) self.failUnlessEqual("ISRC" in m, True) self.failUnlessEqual("Foobar" in m, True) def test_disc_mapping(self): m = mutagen.apev2.APEv2(self.f) m["disc"] = "99/102" m.save() self.s.reload() self.failUnlessEqual(self.s("~#disc"), 99) self.failUnlessEqual(self.s("discnumber"), "99/102") self.s["discnumber"] = "77/88" self.s.write() m = mutagen.apev2.APEv2(self.f) self.failUnlessEqual(m["disc"], "77/88") def test_track_mapping(self): m = mutagen.apev2.APEv2(self.f) m["track"] = "99/102" m.save() self.s.reload() self.failUnlessEqual(self.s("~#track"), 99) self.failUnlessEqual(self.s("tracknumber"), "99/102") self.s["tracknumber"] = "77/88" self.s.write() m = mutagen.apev2.APEv2(self.f) self.failUnlessEqual(m["track"], "77/88") def tearDown(self): os.unlink(self.f) class TMPCFile(TAPEv2FileBase): def setUp(self): self.f = tempfile.mkstemp(".mpc")[1] shutil.copy(os.path.join('tests', 'data', 'silence-44-s.mpc'), self.f) self.s = MPCFile(self.f) add(TMPCFile) class TMAFile(TAPEv2FileBase): def setUp(self): self.f = tempfile.mkstemp(".ape")[1] shutil.copy(os.path.join('tests', 'data', 'silence-44-s.ape'), self.f) self.s = MonkeysAudioFile(self.f) add(TMAFile) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk__editpane.py��������������������������������������������������������0000644�0001750�0001750�00000002112�12161032160�021454� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk._editpane import FilterCheckButton class FCB(FilterCheckButton): _section = _key = _label = "foo" class FCB2(FCB): _order = 1.0 class FCB3(FCB): _order = 1.2 class FCB4(FCB): _order = 1.3 class FCB5(FCB): _order = 1.3 class FCB1(FCB): _order = 1.4 class TFilterCheckButton(TestCase): def setUp(self): self.fcb1 = FCB1() self.fcb2 = FCB2() self.fcb3 = FCB3() self.fcb4 = FCB4() self.fcb5 = FCB5() def test_filter(self): self.failUnlessRaises(NotImplementedError, self.fcb1.filter, "", "") def test_filter_list(self): self.failUnlessRaises( NotImplementedError, self.fcb1.filter_list, [""], [""]) def test_cmp(self): l = [self.fcb1, self.fcb2, self.fcb3, self.fcb4, self.fcb5] l.sort() self.failUnlessEqual( l, [self.fcb2, self.fcb3, self.fcb4, self.fcb5, self.fcb1]) def tearDown(self): for cb in [self.fcb1, self.fcb2, self.fcb3, self.fcb4, self.fcb5]: cb.destroy() add(TFilterCheckButton) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_getstring.py��������������������������������������������������������0000644�0001750�0001750�00000001650�12173212464�021552� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from gi.repository import Gtk, Gdk from tests import TestCase, add from quodlibet.qltk.getstring import GetStringDialog class _ClipboadTestClass(GetStringDialog): _OK = True def _verify_clipboard(self, text): if self._OK: return text class TGetStringDialog(TestCase): def setUp(self): self.gsd1 = GetStringDialog(None, "title", "enter a string") self.gsd2 = _ClipboadTestClass(None, "title", "enter a string") def test_getstring(self): ret = self.gsd1.run(text="foobar", test=True) self.failUnlessEqual(ret, "foobar") def test_clipboard(self): clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) clipboard.set_text("42", -1) ret = self.gsd2.run(text="24", clipboard=True, test=True) self.failUnlessEqual(ret, "42") def tearDown(self): self.gsd1.destroy() self.gsd2.destroy() add(TGetStringDialog) ����������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_player.py����������������������������������������������������������������0000644�0001750�0001750�00000015673�12173212464�020017� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from tests import TestCase, add from quodlibet import player from quodlibet import library from quodlibet import config from quodlibet.player.nullbe import NullPlayer from quodlibet.formats._audio import AudioFile from quodlibet.qltk.songmodel import PlaylistModel from quodlibet.qltk.controls import Volume FILES = [ AudioFile({"~filename": "/foo/bar1", "title": "1"}), AudioFile({"~filename": "/foo/bar2", "title": "2"}) ] for file_ in FILES: file_.sanitize() class TPlayer(TestCase): NAME = None def setUp(self): config.init() config.set("player", "gst_pipeline", "fakesink") module = player.init(self.NAME) lib = library.init() self.player = module.init(lib.librarian) source = PlaylistModel() source.set(FILES) self.player.setup(source, None, 0) def tearDown(self): import __builtin__ pw = print_w __builtin__.__dict__["print_w"] = lambda *x: None # FIXME: idle_add should be removed on destroy, wait here instead while Gtk.events_pending(): Gtk.main_iteration() self.player.destroy() while Gtk.events_pending(): Gtk.main_iteration() __builtin__.__dict__["print_w"] = pw config.quit() def test_song_start(self): self.assertFalse(self.player.song) self.assertFalse(self.player.info) def test_paused(self): self.assertTrue(self.player.paused) self.player.paused = False self.assertFalse(self.player.paused) def test_volume(self): self.assertEqual(self.player.volume, 1.0) self.player.volume = 1000 self.assertEqual(self.player.volume, 1.0) self.player.volume = -1000 self.assertEqual(self.player.volume, 0.0) self.player.volume = 0.5 self.assertEqual(self.player.volume, 0.5) def test_remove(self): self.player.remove(None) self.player.go_to(FILES[0]) self.assertEqual(self.player.song, FILES[0]) self.player.remove(FILES[0]) self.assertEqual(self.player.song, FILES[1]) self.player.remove(None) self.assertEqual(self.player.song, FILES[1]) def test_next(self): self.assertFalse(self.player.song) self.player.next() self.assertEqual(self.player.song, FILES[0]) self.player.next() self.assertEqual(self.player.song, FILES[1]) self.player.next() self.assertFalse(self.player.song) def test_previous(self): self.player.next() self.player.next() self.assertEqual(self.player.song, FILES[1]) self.player.previous() self.assertEqual(self.player.song, FILES[0]) def test_goto(self): self.assertTrue(self.player.paused) self.player.go_to(FILES[1]) self.assertEqual(self.player.song, FILES[1]) self.assertTrue(self.player.paused) self.player.go_to(FILES[0], explicit=True) self.assertEqual(self.player.song, FILES[0]) def test_reset(self): self.player.go_to(None) self.player.reset() self.assertEqual(self.player.song, FILES[0]) self.player.next() self.player.reset() self.assertEqual(self.player.song, FILES[0]) def test_equalizer(self): self.player.eq_bands self.player.eq_values self.player.eq_values = [1,2,3,4] self.player.next() class TNullPlayer(TPlayer): NAME = "nullbe" def test_previous_seek(self): self.player.next() self.player.next() self.assertEqual(self.player.song, FILES[1]) self.player.seek(10000) self.assertEqual(self.player.get_position(), 10000) self.player.previous() self.assertEqual(self.player.get_position(), 0) self.assertEqual(self.player.song, FILES[1]) def test_previous_force(self): self.player.next() self.player.next() self.assertEqual(self.player.song, FILES[1]) self.player.seek(10000) self.assertEqual(self.player.get_position(), 10000) self.player.previous(force=True) self.assertEqual(self.player.get_position(), 0) self.assertEqual(self.player.song, FILES[0]) def test_previous_skip(self): self.player.next() self.player.next() self.assertEqual(self.player.song, FILES[1]) self.player.seek(10) self.assertEqual(self.player.get_position(), 10) self.player.previous() self.assertEqual(self.player.get_position(), 0) self.assertEqual(self.player.song, FILES[0]) def test_stop(self): self.player.next() self.player.seek(10000) self.assertEqual(self.player.get_position(), 10000) self.player.stop() self.assertEqual(self.player.get_position(), 0) def test_can_play_uri_xine(self): self.assertFalse(self.player.can_play_uri("")) self.assertFalse(self.player.can_play_uri("file://")) self.assertFalse(self.player.can_play_uri("fake://")) add(TNullPlayer) class TXinePlayer(TPlayer): NAME = "xinebe" def test_can_play_uri_xine(self): self.assertFalse(self.player.can_play_uri("")) self.assertTrue(self.player.can_play_uri("file://")) self.assertFalse(self.player.can_play_uri("fake://")) try: player.init(TXinePlayer.NAME) except player.PlayerError: print_w("couldn't load/test xinebe") else: add(TXinePlayer) class TGstPlayer(TPlayer): NAME = "gstbe" def test_can_play_uri_gst(self): self.assertFalse(self.player.can_play_uri("")) self.assertTrue(self.player.can_play_uri("file://")) self.assertFalse(self.player.can_play_uri("fake://")) try: player.init(TGstPlayer.NAME) except player.PlayerError: print_w("couldn't load/test gstbe") else: add(TGstPlayer) class TVolume(TestCase): def setUp(self): config.init() self.p = NullPlayer() self.v = Volume(self.p) def test_setget(self): for i in [0.0, 1.2, 0.24, 1.0, 0.9]: self.v.set_value(i) self.failUnlessAlmostEqual(self.p.volume, self.v.get_value()) def test_add(self): self.v.set_value(0.5) self.v += 0.1 self.failUnlessAlmostEqual(self.p.volume, 0.6) def test_sub(self): self.v.set_value(0.5) self.v -= 0.1 self.failUnlessAlmostEqual(self.p.volume, 0.4) def test_add_boundry(self): self.v.set_value(0.95) self.v += 0.1 self.failUnlessAlmostEqual(self.p.volume, 1.0) def test_sub_boundry(self): self.v.set_value(0.05) self.v -= 0.1 self.failUnlessAlmostEqual(self.p.volume, 0.0) def tearDown(self): self.p.destroy() self.v.destroy() config.quit() add(TVolume) ���������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_logging.py����������������������������������������������������������0000644�0001750�0001750�00000000660�12161032160�021160� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from tests import TestCase, add from quodlibet.qltk.logging import LoggingWindow class TLoggingWindow(TestCase): def test_window(self): w = LoggingWindow() w.destroy() add(TLoggingWindow) ��������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_formats___init__.py������������������������������������������������������0000644�0001750�0001750�00000002222�12161032160�021765� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import sys from tests import TestCase, add from quodlibet import formats class TFormats(TestCase): def test_presence(self): self.failUnless(formats.midi) self.failUnless(formats.mod) self.failUnless(formats.monkeysaudio) self.failUnless(formats.mpc) self.failUnless(formats.mp3) self.failUnless(formats.mp4) self.failUnless(formats.spc) self.failUnless(formats.trueaudio) def test_infos(self): self.failUnless(formats._infos[".mp3"] is formats.mp3.MP3File) def test_migration(self): self.failUnless(formats.mp3 is sys.modules["quodlibet.formats.mp3"]) self.failUnless(formats.mp3 is sys.modules["quodlibet/formats/mp3"]) self.failUnless(formats.mp3 is sys.modules["formats.mp3"]) self.failUnless(formats.xiph is sys.modules["formats.flac"]) self.failUnless(formats.xiph is sys.modules["formats.oggvorbis"]) add(TFormats) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_browsers_paned.py��������������������������������������������������������0000644�0001750�0001750�00000007020�12173213426�021522� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet import config from quodlibet.browsers.paned import PanedBrowser, PanePattern from quodlibet.formats._audio import AudioFile from quodlibet.util.collection import Collection from quodlibet.library import SongLibrary, SongLibrarian SONGS = [ AudioFile({"title": "one", "artist": "piman", "~filename": "/dev/null"}), AudioFile({"title": "two", "artist": "mu", "~filename": "/dev/zero"}), AudioFile({"title": "three", "artist": "boris", "~filename": "/bin/ls"}) ] SONGS.sort() ALBUM = Collection() ALBUM.songs = SONGS class TPanedBrowser(TestCase): Bar = PanedBrowser def setUp(self): config.init() config.set("browsers", "panes", "artist") library = SongLibrary() library.librarian = SongLibrarian() PanedBrowser.init(library) for af in SONGS: af.sanitize() library.add(SONGS) self.bar = self.Bar(library, False) def test_can_filter(self): for key in ["foo", "title", "fake~key", "~woobar", "~#huh"]: self.failIf(self.bar.can_filter_tag(key)) self.failUnless(self.bar.can_filter("artist")) def test_filter_value(self): self.expected = [SONGS[0]] self.bar.filter("artist", ["boris"]) def test_filter_notvalue(self): self.expected = SONGS[1:3] self.bar.filter("artist", ["notvalue", "mu", "piman"]) def test_restore_entry_text(self): self.bar.filter_text("foobar") self.bar.save() self.bar._sb_box.set_text("nope") self.bar.restore() self.failUnlessEqual(self.bar._sb_box.get_text(), "foobar") def tearDown(self): self.bar.destroy() config.quit() add(TPanedBrowser) class TPanePattern(TestCase): def test_tag(self): p = PanePattern("title") self.failUnlessEqual(p.title, "Title") self.failUnlessEqual(p.tags, set(["title"])) self.failUnlessEqual(p.format(SONGS[0]), ["three"]) self.failUnless("3" in p.format_display(ALBUM)) self.failIf(p.has_markup) def test_numeric(self): p = PanePattern("~#lastplayed") self.failUnlessEqual(p.title, "Last Played") self.failUnlessEqual(p.tags, set(["~#lastplayed"])) self.failUnlessEqual(p.format(SONGS[0]), ["0"]) self.failIf(p.has_markup) def test_tied(self): p = PanePattern("~title~artist") self.failUnlessEqual(p.title, "Title / Artist") self.failUnlessEqual(p.tags, set(["title", "artist"])) self.failUnlessEqual(p.format(SONGS[0]), ["three - boris"]) self.failIf(p.has_markup) def test_pattern(self): p = PanePattern("<foo>") self.failUnlessEqual(p.title, "Foo") self.failUnlessEqual(p.tags, set(["foo"])) self.failUnless(p.has_markup) def test_condition(self): p = PanePattern("<foo|a <bar>|quux>") self.failUnlessEqual(p.title, "a Bar") self.failUnlessEqual(p.tags, set(["bar"])) self.failUnless(p.has_markup) def test_group(self): p = PanePattern("a\:b:<title>") self.failUnlessEqual(p.title, "A:B") self.failUnlessEqual(set(p.format_display(ALBUM).split(", ")), set(["one", "two", "three"])) p = PanePattern("foo:~#lastplayed") self.failUnlessEqual(p.format_display(ALBUM), "0") p = PanePattern("foo:title") self.failUnlessEqual(set(p.format_display(ALBUM).split(", ")), set(["one", "two", "three"])) add(TPanePattern) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_about.py������������������������������������������������������������0000644�0001750�0001750�00000000534�12161032160�020644� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.about import AboutQuodLibet, AboutExFalso from quodlibet.player.nullbe import NullPlayer class TAboutQuodLibet(TestCase): def test_ctr(self): AboutQuodLibet(None, NullPlayer()).destroy() def test_ef(self): AboutExFalso(None, NullPlayer()).destroy() add(TAboutQuodLibet) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_browsers_audiofeeds.py���������������������������������������������������0000644�0001750�0001750�00000001236�12161032160�022535� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.browsers.audiofeeds import AudioFeeds from quodlibet.player.nullbe import NullPlayer from quodlibet.library import SongLibrary import quodlibet.config class TAudioFeeds(TestCase): def setUp(self): quodlibet.config.init() self.library = SongLibrary() self.bar = AudioFeeds(self.library, NullPlayer('fakesink')) def test_can_filter(self): for key in ["foo", "title", "fake~key", "~woobar", "~#huh"]: self.failIf(self.bar.can_filter(key)) def tearDown(self): self.bar.destroy() self.library.destroy() quodlibet.config.quit() add(TAudioFeeds) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_playorder.py��������������������������������������������������������0000644�0001750�0001750�00000002453�12161032160�021535� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.playorder import PlayOrder import quodlibet.config import quodlibet.plugins class TPlayOrder(TestCase): def setUp(self): self.order = -1 self.volume = 0 self.replaygain_profiles = [None, None, None] quodlibet.plugins.init() quodlibet.config.init() self.win = PlayOrder(self, self) self.win.set_active(0) def test_initial(self): self.failUnlessEqual(self.win.get_active(), 0) self.failUnless(self.replaygain_profiles[2], ["album", "track"]) def test_set_name(self): self.win.set_active("weighted") self.failUnlessEqual(2, self.win.get_active()) self.failUnless(self.replaygain_profiles[2], ["track"]) def test_set_int(self): self.win.set_active(3) self.failUnlessEqual(3, self.win.get_active()) self.failUnless(self.replaygain_profiles[2], ["track"]) def test_get_name(self): for i, name in enumerate(["inorder","shuffle","weighted","onesong"]): self.win.set_active(name) self.failUnlessEqual( self.win.get_active_name().lower(), name.lower()) def tearDown(self): self.win.destroy() quodlibet.plugins.quit() quodlibet.config.quit() add(TPlayOrder) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_formats__id3.py����������������������������������������������������������0000644�0001750�0001750�00000046074�12161032160�021061� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- from tests import add, TestCase import os import shutil import tempfile from quodlibet import config, const from quodlibet.formats.mp3 import MP3File from quodlibet.formats._id3 import ID3hack import mutagen class TID3File(TestCase): def setUp(self): config.init() self.filename = tempfile.mkstemp(".mp3")[1] shutil.copy(os.path.join('tests', 'data', 'silence-44-s.mp3'), self.filename) self.filename2 = tempfile.mkstemp(".mp3")[1] shutil.copy(os.path.join('tests', 'data', 'mutagen-bug.mp3'), self.filename2) def test_optional_POPM_count(self): #http://code.google.com/p/quodlibet/issues/detail?id=364 f = mutagen.File(self.filename) f.tags.add(mutagen.id3.POPM(const.EMAIL, 42)) try: f.save() except TypeError: #http://code.google.com/p/mutagen/issues/detail?id=33 pass else: MP3File(self.filename) def test_TXXX_DATE(self): # http://code.google.com/p/quodlibet/issues/detail?id=220 f = mutagen.File(self.filename) f.tags.add(mutagen.id3.TXXX(encoding=3, desc=u'DATE', text=u'2010-01-13')) f.tags.add(mutagen.id3.TDRC(encoding=3, text=u'2010-01-14')) f.save() self.assertEquals(MP3File(self.filename)['date'], '2010-01-14') f.tags.delall('TDRC') f.save() self.assertEquals(MP3File(self.filename)['date'], '2010-01-13') f.delete() MP3File(self.filename) def test_lang_read(self): """Tests reading of language from TXXX""" # http://code.google.com/p/quodlibet/issues/detail?id=439 f = mutagen.File(self.filename) try: lang = u'free-text' f.tags.add(mutagen.id3.TXXX(encoding=3, desc=u'QuodLibet::language', text=lang)) f.save() self.assertEquals(MP3File(self.filename)['language'], lang) finally: f.delete() def test_lang_read_TLAN(self): """Tests reading language from TLAN""" f = mutagen.File(self.filename) lang = u'eng' try: f.tags.add(mutagen.id3.TLAN(encoding=3, text=lang)) f.save() self.assertEquals(MP3File(self.filename)['language'], lang) finally: f.delete() def test_lang_read_multiple_TLAN(self): """Tests reading multiple language from TLAN""" f = mutagen.File(self.filename) # Include an invalid one; current behaviour is to load anyway lang = u'eng\0der\0fra\0fooooo' exp = u'eng\nder\nfra\nfooooo' try: f.tags.add(mutagen.id3.TLAN(encoding=3, text=lang)) f.save() self.assertEquals(MP3File(self.filename)['language'], exp) finally: f.delete() def test_write_lang_freetext(self): """Tests that if you don't use an ISO 639-2 code, TXXX gets populated""" af = MP3File(self.filename) for val in ["free-text", "foo", "de", "en"]: af["language"] = val # Just checking... self.failUnlessEqual(af("language"), val) af.write() tags = mutagen.File(self.filename).tags self.failUnlessEqual(tags[u'TXXX:QuodLibet::language'], val) self.failIf("TLAN" in tags) def test_write_lang_iso(self): """Tests that if you use an ISO 639-2 code, TLAN gets populated""" for iso_lang in ['eng', 'ger', 'zho']: af = MP3File(self.filename) af["language"] = iso_lang self.failUnlessEqual(af("language"), iso_lang) af.write() tags = mutagen.File(self.filename).tags self.failIf(u'TXXX:QuodLibet::language' in tags, "Should have used TLAN tag for '%s'" % iso_lang) self.failUnlessEqual(tags[u'TLAN'], iso_lang) af.clear() def test_write_multiple_lang_iso(self): """Tests using multiple ISO 639-2 codes""" iso_langs = ['eng', 'ger', 'zho'] iso_langs_str = "\n".join(iso_langs) af = MP3File(self.filename) af["language"] = iso_langs_str self.failUnlessEqual(af("language"), iso_langs_str) af.write() tags = mutagen.File(self.filename).tags self.failIf(u'TXXX:QuodLibet::language' in tags, "Should have used TLAN for %s" % iso_langs) self.failUnlessEqual(tags[u'TLAN'], iso_langs, msg="Wrong tags: %s" % tags) af.clear() def test_tlen(self): f = mutagen.File(self.filename) f.tags.add(mutagen.id3.TLEN(encoding=0, text=['20000'])) f.save() self.failUnlessEqual(MP3File(self.filename)("~#length"), 20) # ignore <= 0 [issue 222] f = mutagen.File(self.filename) f.tags.add(mutagen.id3.TLEN(encoding=0, text=['0'])) f.save() self.failUnless(MP3File(self.filename)("~#length") > 0) # inval f.tags.add(mutagen.id3.TLEN(encoding=0, text=['x'])) f.save() self.failUnless(MP3File(self.filename)("~#length") > 0) def test_load_apic(self): self.failIf(MP3File(self.filename)("~picture")) f = mutagen.File(self.filename) apic = mutagen.id3.APIC(encoding=3, mime="image/jpeg", type=4, desc="foo", data="bar") f.tags.add(apic) f.save() song = MP3File(self.filename) self.failUnless(song("~picture")) fn = song.get_format_cover() self.failUnlessEqual(fn.read(), "bar") apic = mutagen.id3.APIC(encoding=3, mime="image/jpeg", type=3, desc="xx", data="bar2") f.tags.add(apic) f.save() song = MP3File(self.filename) self.failUnless(song("~picture")) fn = song.get_format_cover() self.failUnlessEqual(fn.read(), "bar2") def test_load_tcon(self): # check if the mutagen preprocessing is used f = mutagen.File(self.filename) f.tags.add(mutagen.id3.TCON(encoding=3, text=["4", "5"])) f.save() genres = set(MP3File(self.filename).list("genre")) self.failUnlessEqual(genres, set(["Funk", "Disco"])) def test_mb_track_id(self): f = mutagen.File(self.filename) f.tags.add(mutagen.id3.UFID(owner="http://musicbrainz.org", data="x")) f.save() song = MP3File(self.filename) self.failUnlessEqual(song("musicbrainz_trackid"), "x") song["musicbrainz_trackid"] = "y" song.write() f = mutagen.File(self.filename) self.failUnlessEqual(f.tags["UFID:http://musicbrainz.org"].data, "y") del song["musicbrainz_trackid"] song.write() f = mutagen.File(self.filename) self.failIf(f.tags.get("UFID:http://musicbrainz.org")) def test_load_comment(self): # comm with empty descriptions => comment f = mutagen.File(self.filename) f.tags.add(mutagen.id3.COMM(encoding=3, lang="aar", desc="", text=["foo", "bar"])) f.save() comments = set(MP3File(self.filename).list("comment")) self.failUnlessEqual(comments, set(["bar", "foo"])) def test_foobar2k_replaygain(self): # foobar2k saved gain there f = mutagen.File(self.filename) f.tags.add(mutagen.id3.TXXX(encoding=3, desc="replaygain_track_gain", text=["-6 db"])) f.save() song = MP3File(self.filename) self.failIfAlmostEqual(song.replay_gain(["track"]), 1.0, 1) # check if all keys are str for k in MP3File(self.filename).keys(): self.failUnless(isinstance(k, str)) # remove value, save, reload and check if still gone del song["replaygain_track_gain"] song.write() song.reload() self.failUnlessAlmostEqual(song.replay_gain(["track"]), 1.0, 1) def test_foobar2k_replaygain_read_new(self): # Others don't like RVA2, so we have to read/write foobar style # http://code.google.com/p/quodlibet/issues/detail?id=1027 f = mutagen.File(self.filename) f.tags.add(mutagen.id3.TXXX(encoding=3, desc="replaygain_track_gain", text=["-6 db"])) f.tags.add(mutagen.id3.TXXX(encoding=3, desc="replaygain_track_peak", text=["0.9"])) f.tags.add(mutagen.id3.TXXX(encoding=3, desc="replaygain_album_gain", text=["3 db"])) f.tags.add(mutagen.id3.TXXX(encoding=3, desc="replaygain_album_peak", text=["0.8"])) f.save() song = MP3File(self.filename) self.failUnlessEqual(song("replaygain_track_gain"), "-6 db") self.failUnlessEqual(song("replaygain_track_peak"), "0.9") self.failUnlessEqual(song("replaygain_album_gain"), "3 db") self.failUnlessEqual(song("replaygain_album_peak"), "0.8") # still prefer RVA2 in case there are both f.tags.add(mutagen.id3.RVA2(desc="track", channel=1, gain=-9, peak=1.0)) f.save() song = MP3File(self.filename) self.failUnlessAlmostEqual(song.replay_gain(["track"]), 0.35, 1) def test_foobar2k_replaygain_write_new(self): # Others don't like RVA2, so we have to read/write foobar style # http://code.google.com/p/quodlibet/issues/detail?id=1027 song = MP3File(self.filename) song["replaygain_track_gain"] = "-6 db" song["replaygain_track_peak"] = "0.9" song["replaygain_album_gain"] = "3 db" song["replaygain_album_peak"] = "0.8" song.write() f = mutagen.File(self.filename) for k in ["track_peak", "track_gain", "album_peak", "album_gain"]: self.failUnless(f["TXXX:replaygain_" + k]) def test_quodlibet_txxx_inval(self): # This shouldn't happen in our namespace, but check anyway since # we might open the whole TXXX namespace sometime f = mutagen.File(self.filename) f.tags.add(mutagen.id3.TXXX(encoding=3, desc="QuodLibet::valid", text=["quux"])) f.tags.add(mutagen.id3.TXXX(encoding=3, desc="QuodLibet::foo=", text=["quux", "bar"])) f.tags.add(mutagen.id3.COMM(encoding=3, desc=u"QuodLibet::öäü", text=["quux", "bar"], lang="aar")) f.tags.add(mutagen.id3.COMM(encoding=3, desc=u"", text=["a"], lang="aar")) f.tags.add(mutagen.id3.COMM(encoding=3, desc=u"", text=["b"], lang="foo")) f.save() # check if all keys are valid for k in MP3File(self.filename).keys(): self.failUnless(isinstance(k, str)) song = MP3File(self.filename) self.failIf("foo=" in song) self.failIf(u"öäü" in song) self.failUnlessEqual(set(song.list("comment")), set(["a", "b"])) self.failUnlessEqual(song("valid"), "quux") del song["valid"] song.write() f = mutagen.File(self.filename) self.failUnless(f.tags.getall("TXXX:QuodLibet::foo=")) self.failIf(f.tags.getall("TXXX:QuodLibet::valid")) self.failUnlessEqual(len(f.tags.getall("COMM")), 2) self.failUnlessEqual(len(f.tags.getall("COMM:")), 1) def test_old_comm_to_txxx(self): f = mutagen.File(self.filename) f.tags.add(mutagen.id3.COMM(encoding=3, desc=u"QuodLibet::foo", text=["a"], lang="aar")) f.save() song = MP3File(self.filename) self.failUnlessEqual(song("foo"), "a") song.write() f = mutagen.File(self.filename) self.failUnlessEqual(f["TXXX:QuodLibet::foo"].text, ["a"]) def test_txxx_others(self): f = mutagen.File(self.filename) t1 = mutagen.id3.TXXX(encoding=3, desc="FooBar::invalid", text="quux") t2 = mutagen.id3.TXXX(encoding=3, desc="FooBar::öäü", text="bar") f.tags.add(t1) f.tags.add(t2) f.save() song = MP3File(self.filename) self.failIf("invalid" in song) self.failIf(u"öäü" in song) song.write() f = mutagen.File(self.filename) self.failUnless(f[t1.HashKey]) self.failUnless(f[t2.HashKey]) def test_woar(self): f = mutagen.File(self.filename) t1 = mutagen.id3.WOAR(url="http://this.is.a.test") f.tags.add(t1) f.save() song = MP3File(self.filename) self.failUnlessEqual(song("website"), t1.url) song["website"] = "http://another.test\nhttp://omg.another.one" song.write() f = mutagen.File(self.filename) self.failUnlessEqual(len(f.tags.getall("WOAR")), 2) def test_unhandled(self): f = mutagen.File(self.filename) t1 = mutagen.id3.AENC(owner="x", preview_start=1, preview_length=3) f.tags.add(t1) f.save() MP3File(self.filename) def test_id3_hack(self): # will only show the content of the last frame f = mutagen.File(self.filename) self.failUnless(len(f.tags["TPE1"].text), 1) # will merge both frames and translate TP1 to TPE1, so 3 values f = mutagen.mp3.MP3(self.filename, ID3=ID3hack) f.tags.add(mutagen.id3.TP1(encoding=3, text="blah")) self.failUnless(len(f.tags["TPE1"].text), 3) # same here, but without the TP1, so 2 values song = MP3File(self.filename) self.failUnlessEqual(len(song.list("artist")), 2) def test_id3_bug(self): # http://code.google.com/p/mutagen/issues/detail?id=97 tag = mutagen.id3.ID3(self.filename2) self.failUnless(tag.unknown_frames) version = mutagen.version mutagen.version = (1, 20) song = MP3File(self.filename2) song.write() mutagen.version = version tag = mutagen.id3.ID3(self.filename2) self.failIf(tag.unknown_frames) def test_encoding(self): song = MP3File(self.filename) song["foo"] = u"öäü" song["bar"] = u"abc" song["comment"] = u"öäü" song["artist"] = u"xyz" song["album"] = u"öäü" song["tracknumber"] = u"ö" song["discnumber"] = u"9" song.write() f = mutagen.File(self.filename) self.failUnlessEqual(f.tags["TXXX:QuodLibet::foo"].encoding, 1) self.failUnlessEqual(f.tags["TXXX:QuodLibet::bar"].encoding, 3) self.failUnlessEqual(f.tags["TPE1"].encoding, 3) self.failUnlessEqual(f.tags["TALB"].encoding, 1) self.failUnlessEqual(f.tags["TPE1"].encoding, 3) # FIXME: we shouldn't write invalid TRCK... self.failUnlessEqual(f.tags["TRCK"].encoding, 1) self.failUnlessEqual(f.tags["TPOS"].encoding, 3) def test_tcon(self): f = mutagen.File(self.filename) f.tags.add(mutagen.id3.TMCL(encoding=3, people=[["foo", "bar"]])) f.save() song = MP3File(self.filename) self.failUnless("performer:foo" in song) self.failUnlessEqual(song("performer:foo"), "bar") def test_nonascii_unsup_tcon(self): people = [["a=", "a"], ["b~", "b"], [u"äöü", "u"], ["quux", "x"]] f = mutagen.File(self.filename) f.tags.add(mutagen.id3.TMCL(encoding=3, people=people)) f.save() # we only support one of them self.failUnlessEqual(len(MP3File(self.filename).list("~performer")), 1) # but after writing they should still be there song = MP3File(self.filename) song.write() f = mutagen.File(self.filename) self.failUnlessEqual(len(f.tags["TMCL"].people), 4) self.failUnlessEqual(f.tags["TMCL"].people, people) # also change something.. song["performer:quux"] = "foo" song.write() f = mutagen.File(self.filename) self.failUnlessEqual(dict(f.tags["TMCL"].people)["quux"], "foo") def test_rva_large(self): song = MP3File(self.filename) song["replaygain_track_peak"] = "3" song["replaygain_track_gain"] = "100" song.write() song["replaygain_track_peak"] = "-1" song["replaygain_track_gain"] = "-100" song.write() def test_rva(self): f = mutagen.File(self.filename) f.tags.add(mutagen.id3.RVA2(desc="track", channel=1, gain=-3, peak=1.0)) f.tags.add(mutagen.id3.RVA2(desc="album", channel=1, gain=-6, peak=1.0)) f.save() song = MP3File(self.filename) self.failUnlessAlmostEqual(song.replay_gain(["track"]), 0.7, 1) self.failUnlessAlmostEqual(song.replay_gain(["album"]), 0.5, 1) song.write() f = mutagen.File(self.filename) self.failUnlessEqual(len(f.tags.getall("RVA2")), 2) def test_rva_unknown(self): f = mutagen.File(self.filename) f.tags.add(mutagen.id3.RVA2(desc="track", channel=2, gain=-6, peak=1.0)) f.tags.add(mutagen.id3.RVA2(desc="foo", channel=1, gain=-3, peak=1.0)) f.save() # we use foo as track if nothing else is there song = MP3File(self.filename) self.failUnlessAlmostEqual(song.replay_gain(["track"]), 0.7, 1) song.write() # and we write that over track.. f = mutagen.File(self.filename) self.failUnlessAlmostEqual(f.tags["RVA2:track"].gain, -3.0, 1) # now that one is there, ignore foo f = mutagen.File(self.filename) f.tags.add(mutagen.id3.RVA2(desc="foo", channel=1, gain=0, peak=1.0)) f.save() song = MP3File(self.filename) self.failUnlessAlmostEqual(song.replay_gain(["track"]), 0.7, 1) def test_rva_inval(self): song = MP3File(self.filename) song["replaygain_track_peak"] = u"0.1afasf" song["replaygain_track_gain"] = u"0.1afasf" song.write() def test_without_id3_tag(self): f = mutagen.File(self.filename) f.delete() f.save() song = MP3File(self.filename) song.get_format_cover() song.write() def test_distrust_latin1(self): x = u"Å" # abuse mutagen a bit, and get some utf-8 in with the wrong encoding f = mutagen.File(self.filename) f.tags.add(mutagen.id3.TPE1(encoding=0, text=x.encode("utf-8"))) f.save() # back to utf-8 song = MP3File(self.filename) self.failUnlessEqual(song("artist"), x) song.write() # because it's not ascii, saved as utf-16 f = mutagen.File(self.filename) self.failUnlessEqual(f.tags["TPE1"].encoding, 1) # and now latin-1 that is not decodable using utf-8/16 x = u"äöü".encode("ibm1026").decode("latin-1") f.tags.add(mutagen.id3.TPE1(encoding=0, text=x)) f.save() self.failUnlessEqual(MP3File(self.filename)("artist"), x) def tearDown(self): os.unlink(self.filename2) os.unlink(self.filename) config.quit() add(TID3File) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_properties.py�������������������������������������������������������0000644�0001750�0001750�00000003067�12173212464�021744� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from gi.repository import Gtk from quodlibet.formats._audio import AudioFile from quodlibet.qltk.properties import SongProperties from quodlibet.library import SongLibrary from quodlibet import config class DummyPlugins(object): def rescan(self): pass def find_subclasses(self, *args): return [] def TagsFromPathPlugins(self): return [] def RenamePlugins(self): return [] def EditTagsPlugins(self): return [] class TSongProperties(TestCase): af1 = AudioFile({"title": "woo"}) af1.sanitize("invalid") af2 = AudioFile({"title": "bar", "album": "quux"}) af2.sanitize("alsoinvalid") def setUp(self): SongProperties.plugins = DummyPlugins() config.init() self.library = SongLibrary() def test_onesong(self): self.window = SongProperties(self.library, [self.af1]) def test_twosong(self): self.window = SongProperties(self.library, [self.af2, self.af1]) def test_changed(self): self.test_twosong() self.window.hide() self.library.emit('changed', [self.af2]) while Gtk.events_pending(): Gtk.main_iteration() def test_removed(self): self.test_twosong() self.window.hide() self.library.emit('removed', [self.af2]) while Gtk.events_pending(): Gtk.main_iteration() def tearDown(self): try: self.window.destroy() except AttributeError: pass else: del(self.window) self.library.destroy() del(SongProperties.plugins) config.quit() add(TSongProperties) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_util_massagers.py��������������������������������������������������������0000644�0001750�0001750�00000007170�12161032160�021524� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add import quodlibet.util.massagers class TMassagers(TestCase): def validate(self, key, values): for val in values: self.failUnless(quodlibet.util.massagers.tags[key].is_valid(val)) def invalidate(self, key, values): for val in values: self.failIf(quodlibet.util.massagers.tags[key].is_valid(val)) def equivs(self, key, equivs): for value, normed in equivs.items(): self.failUnlessEqual( normed, quodlibet.util.massagers.tags[key].validate(value)) def test_date_valid(self): self.validate("date", ["2002-10-12", "2000", "1200-10", "0000-00-00", "1999/09/12"]) def test_date_invalid(self): self.invalidate("date", ["200", "date-or-no", "", "2000-00-00-00"]) def test_date_equivs(self): self.equivs("date", {"2000": "2000", "1999-99-99": "1999-99-99", "1999/12/09": "1999-12-09"}) def test_gain_valid(self): gains = ["+2.12 dB", "99. dB", "-1.11 dB", "-0.99 dB", "0 dB"] self.validate('replaygain_track_gain', gains) self.validate('replaygain_album_gain', gains) def test_gain_invalid(self): gains = ["hooray", "", "dB dB"] self.invalidate('replaygain_track_gain', gains) self.invalidate('replaygain_album_gain', gains) def test_gain_equivs(self): equivs = {"12.1 dB": "+12.1 dB", "-1.00 dB": "-1.00 dB", "0": "+0. dB"} self.equivs("replaygain_track_gain", equivs) self.equivs("replaygain_album_gain", equivs) def test_peak_valid(self): peaks = ["0.54", "0.999", "0", "1.234", "1.99"] self.validate('replaygain_track_peak', peaks) self.validate('replaygain_album_peak', peaks) def test_peak_invalid(self): peaks = ["", "100 dB", "woooo", "12.12.12", "-18", "2.23"] self.invalidate('replaygain_track_peak', peaks) self.invalidate('replaygain_album_peak', peaks) def test_mbid_valid(self): self.validate("musicbrainz_trackid", ["cafebabe-ffff-eeee-0101-deadbeafffff", "Fef1F0f4-dead-a5da-d0D0-86753099ffff"]) def test_mbid_invalid(self): self.invalidate("musicbrainz_trackid", ["", "cafebab!-ffff-eeee-0101-deadbeaf", "Fef1F0f4-dead-a5da-d0D0-8675309z"]) def test_mbid_equivs(self): self.equivs("musicbrainz_trackid", {"cafebabe-ffff-eeee-0101-deadbeafffff": "cafebabe-ffff-eeee-0101-deadbeafffff", "Fef1F0f4-dead-a5da-d0D0-86753099ffff": "fef1f0f4-dead-a5da-d0d0-86753099ffff" }) def test_albumstatus(self): self.validate("musicbrainz_albumstatus", ["official", "promotional", "bootleg"]) self.invalidate("musicbrainz_albumstatus", ["", "unofficial", "\x99"]) def test_language_valid(self): self.validate("language", ["eng", "zho", "lol", "fre", "ger", "zza"]) self.validate("language", ["deu", "fra", "msa"]) # self.invalidate("language", ["xxx", "ROFL", "", "es", "ENG"]) # Issue 439: Actually, allow free-text. self.validate("language", ["", "German", "Chinese", "Foobarlanguage"]) mas = quodlibet.util.massagers.tags["language"] # Check completion help too for code in ["eng", "fra", "fre", "deu", "zho"]: self.failUnless(code in mas.options, "'%s' should be in languages options" % code) self.failIf("" in mas.options) add(TMassagers) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_formats_midi.py����������������������������������������������������������0000644�0001750�0001750�00000002103�12161032160�021146� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from tests import TestCase, add from quodlibet.formats.midi import MidiFile class TMidiFile(TestCase): def setUp(self): self.song = MidiFile(os.path.join('tests', 'data', 'test.mid')) def test_length(self): self.failUnlessAlmostEqual(87, self.song("~#length", 0), 0) def test_reload(self): self.song["title"] = "foobar" self.song.reload() self.failUnlessEqual(self.song("title"), "foobar") def test_write(self): self.song.write() def test_can_change(self): self.failUnlessEqual(self.song.can_change(), ["title"]) self.failUnless(self.song.can_change("title")) self.failIf(self.song.can_change("album")) def test_invalid(self): path = os.path.join('tests', 'data', 'empty.xm') self.failUnlessRaises(Exception, MidiFile, path) add(TMidiFile) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_notif.py������������������������������������������������������������0000644�0001750�0001750�00000002534�12161032160�020653� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.notif import Task, TaskController class FakeStatusBar(object): def __init__(self): self.count = 0 def update(self): self.count += 1 class TTaskController(TestCase): def setUp(self): self.c = TaskController() self.f = FakeStatusBar() self.c.parent = self.f def test_reparent(self): def set_parent(p): self.c.parent = p set_parent(None) set_parent(FakeStatusBar()) self.assertRaises(ValueError, set_parent, FakeStatusBar()) def test_multiple_tasks(self): self.assertEquals(self.c.active_tasks, []) self.assertNotEqual(self.c.source, "") t1 = Task("src", "desc", controller = self.c) self.assertEquals(self.c.source, "src") self.assertEquals(self.c.active_tasks, [t1]) t1.update(0.5) self.assertEquals(self.c.frac, 0.5) t2 = Task("src2", "desc2", controller = self.c) self.assertEquals(self.c.source, _("Active tasks")) self.assertEquals(self.c.frac, 0.25) Task("src3", "desc3", controller = self.c, known_length=False) self.assertAlmostEqual(self.c.frac, 0.5/3) t1.finish() t2.finish() self.assertEquals(self.c.desc, "desc3") self.assertEquals(self.c.frac, None) add(TTaskController) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_browsers_filesystem.py���������������������������������������������������0000644�0001750�0001750�00000001212�12161032160�022603� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.browsers.filesystem import FileSystem from quodlibet.player.nullbe import NullPlayer from quodlibet.library import SongLibrary import quodlibet.config class TFileSystem(TestCase): def setUp(self): quodlibet.config.init() self.bar = FileSystem(SongLibrary(), NullPlayer()) def test_can_filter(self): for key in ["foo", "title", "fake~key", "~woobar", "~#huh"]: self.failIf(self.bar.can_filter(key)) self.failUnless(self.bar.can_filter("~dirname")) def tearDown(self): self.bar.destroy() quodlibet.config.quit() add(TFileSystem) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_const.py�����������������������������������������������������������������0000644�0001750�0001750�00000001432�12161032160�017623� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import subprocess from tests import TestCase, add from quodlibet import const class Tconst(TestCase): def test_branch_name(self): devnull = open(os.devnull, 'w') try: subprocess.check_call(["hg", "version"], stdout=devnull) except OSError: # no active hg repo, skip return p = subprocess.Popen(["hg", "id", "-b"], stdout=subprocess.PIPE) branch = p.communicate()[0].strip() self.failIf(p.returncode) self.failUnlessEqual(branch, const.BRANCH_NAME) add(Tconst) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/tests/test_qltk_textedit.py���������������������������������������������������������0000644�0001750�0001750�00000001756�12161032160�021373� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from tests import TestCase, add from quodlibet.qltk.textedit import TextEditBox, TextEdit class TTextEditBox(TestCase): def setUp(self): self.box = TextEditBox() def test_empty(self): self.failUnlessEqual(self.box.text, "") def test_set(self): self.box.text = "bazquux" self.failUnlessEqual(self.box.text, "bazquux") def test_clicked(self): self.box.apply.clicked() def tearDown(self): self.box.destroy() add(TTextEditBox) class TTextEdit(TTextEditBox): def setUp(self): self.box = TextEdit(None) add(TTextEdit) class TTextEditBox2(TestCase): def setUp(self): self.foobar = TextEditBox("foobar") def test_revert(self): self.foobar.revert.clicked() self.failUnless(self.foobar.text, "foobar") def tearDown(self): self.foobar.destroy() add(TTextEditBox2) class TTextEdit2(TTextEditBox2): def setUp(self): self.foobar = TextEdit(None, "foobar") add(TTextEdit2) ������������������quodlibet-3.0.2/tests/test_formats_spc.py�����������������������������������������������������������0000644�0001750�0001750�00000002166�12161032160�021022� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from tests import TestCase, add from quodlibet.formats.spc import SPCFile class TSPCFile(TestCase): def setUp(self): self.song = SPCFile(os.path.join('tests', 'data', 'test.spc')) def test_tags(self): tags = { "title": "Game Select", "artist": "Koji Kondo", "album": "Super Mario All-Stars", "dumper": "Datschge", } for k, v in tags.items(): self.failUnlessEqual(self.song[k], v) def test_length(self): self.failUnlessEqual(self.song("~#length"), 25) def test_write(self): self.song.write() def test_can_change(self): self.failUnless(self.song.can_change("title")) def test_invalid(self): path = os.path.join('tests', 'data', 'empty.xm') self.failUnless(os.path.exists(path)) self.failUnlessRaises(Exception, SPCFile, path) add(TSPCFile) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/man/��������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�014503� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/man/quodlibet.1���������������������������������������������������������������������0000644�0001750�0001750�00000016106�12173213426�016564� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" Man page generated from reStructeredText. . .TH QUODLIBET 1 "" "" "" .SH NAME quodlibet \- audio library manager and player . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .nf \fBquodlibet\fP [ \fB\-\-print\-playing\fP | \fIcontrol\fP ] \fBexfalso\fP [ \fIdirectory\fP ] .fi .sp .SH DESCRIPTION .sp Quod Libet is a music management program. It provides several different ways to view your audio library, as well as support for Internet radio and audio feeds. It has extremely flexible metadata tag editing and searching capabilities. .sp This manual page is only a short reference for Quod Libet. Complete documentation is available at \fI\%http://code.google.com/p/quodlibet/wiki/Guide\fP. .SH OPTIONS .INDENT 0.0 .TP .B \-\-enqueue filename|query Enqueue a filename or query results .TP .B \-\-filter tag=value Filter on a tag value .UNINDENT .INDENT 0.0 .TP .B \-\-focus Focus the running player .TP .B \-\-hide\-window Hide main window .TP .B \-\-next Jump to next song .TP .BI \-\-open\-browser\fB= BrowserName Open a new browser .UNINDENT .INDENT 0.0 .TP .B \-\-order=inorder|shuffle|weighted|onesong|toggle Set or toggle the playback order .UNINDENT .INDENT 0.0 .TP .B \-\-pause Pause playback .TP .B \-\-play Start playback .TP .BI \-\-play\-file\fB= filename Play a file .TP .B \-\-play\-pause Toggle play/pause mode .TP .B \-\-previous Jump to previous song or restart if near the beginning .TP .B \-\-force\-previous Jump to previous song .TP .B \-\-print\-playlist Print the current playlist .TP .B \-\-print\-queue Print the contents of the queue .TP .B \-\-print\-playing Print out information about the currently playing song. You may provide in a string like the kind described in the RENAMING FILES section below. .TP .BI \-\-query\fB= search\-string Search your audio library .TP .B \-\-quit Exit Quod Libet .TP .BI \-\-random\fB= tag Filter on a random value .UNINDENT .INDENT 0.0 .TP .B \-\-repeat=off|on|t Turn repeat off, on, or toggle .TP .B \-\-seek=[+|\-][HH:]MM:SS Seek within the playing song .UNINDENT .INDENT 0.0 .TP .BI \-\-set\-browser\fB= BrowserName Set the current browser .UNINDENT .INDENT 0.0 .TP .B \-\-set\-rating=0.0..1.0 Rate the playing song .UNINDENT .INDENT 0.0 .TP .B \-\-show\-window Hide main window .TP .B \-\-start\-playing Begin playing immediately .TP .B \-\-status Print playing status .TP .B \-\-toggle\-window Toggle main window visibility .TP .B \-\-unfilter Remove active browser filters .UNINDENT .INDENT 0.0 .TP .B \-\-unqueue=filename|query Unqueue a file or query .TP .B \-\-volume=(+|\-|)0..100 Set the volume .UNINDENT .SH ALBUM COVERS .sp Album covers should be put in the same directory as the songs they apply to, and have "folder", "front", or "cover" in their filenames. If you want to store multiple albums in the same directory but keep distinct cover images, the name of the appropriate image file must contain the labelid tag value, e.g. COCX\-32760 cover.jpg. .SH TIED TAGS .sp Many places in Quod Libet allow you to use "tied tags". Tied tags are two tag names joined together with a "~" like "title~version" or "album~part". Tied tags result in "nice" displays even when one of the tags is missing; for example, "title~version" will result in Title \- Version when a version tag is present, but only Title when one isn\(aqt. You can tie any number of tags together. .SH SEARCH SYNTAX .sp All of Quod Libet\(aqs search boxes support advanced searches of the following forms: .sp .nf tag = value tag = !value tag = "value" tag = /value/ tag = &(value1, value2) tag = |(value1, value2) !tag = value |(tag1 = value1, tag2 = value2) &(tag1 = value1, tag2 = value2) #(numerictag < value) #(numerictag = value) #(numerictag > value) .fi .sp .sp .sp The \(aqc\(aq postfix on strings or regular expressions makes the search case\-sensitive. Numeric values may be given as integers, floating\-point numbers, MM:SS format, or simple English, e.g. "3 days", "2 hours". .sp See \fI\%http://code.google.com/p/quodlibet/wiki/Guide_Searching\fP. .sp All internal tags begin with a ~ character. Non\-numeric internal tags are ~base‐ name, ~dirname, ~filename, ~format, ~length, ~people, and ~rating. Numeric internal tags are ~#added, ~#bitrate, ~#disc, ~#lastplayed, ~#laststarted, ~#length, ~#mtime, ~#playcount, ~#skipcount, and ~#track. .sp See \fI\%http://code.google.com/p/quodlibet/wiki/Guide_InternalTags\fP. .SH RENAMING FILES .sp Quod Libet allows you to rename files based on their tags. In some cases you may wish to alter the filename depending on whether some tags are present or missing, in addition to their values. A common pattern might be .sp \fB<tracknumber>. <title~version>\fP .sp You can use a \(aq|\(aq to only text when a tag is present: .sp \fB<tracknumber|<tracknumber>. ><title~version>\fP .sp You can also specify literal text to use if the tag is missing by adding another \(aq|\(aq: .sp \fB<album|<album>|No Album> \- <title>\fP .sp See \fI\%http://code.google.com/p/quodlibet/wiki/Guide_Renaming\fP. .SH AUDIO BACKENDS .sp Quod Libet uses GStreamer for audio playback. It tries to read your GConf GStreamer configuration, but if that fails it falls back to osssink. You can change the pipeline option in ~/.quodlibet/config to use a different sink, or pass options to the sink. For example, you might use esdsink or alsasink device=hw:1. .sp See \fI\%http://code.google.com/p/quodlibet/wiki/Guide_AudioBackends\fP. .SH FILES .INDENT 0.0 .TP .B ~/.quodlibet/songs A pickled Python dict of cached metadata. Deleting this file will remove all songs from your library. .TP .B ~/.quodlibet/config Quod Libet\(aqs configuration file. This file is overwritten when Quod Libet exits. .TP .B ~/.quodlibet/current A "key=value" file containing information about the currently playing song. .TP .B ~/.quodlibet/control A FIFO connected to the most\-recently\-started instance of the program. \-\-next, \-\-previous, etc., use this to control the player. .TP .B ~/.quodlibet/plugins/ Put plugins (from \fI\%http://code.google.com/p/quodlibet/wiki/Guide_Plugins\fP) here. .TP .B ~/.quodlibet/browsers/ Put custom library browsers here. .UNINDENT .sp See \fI\%http://code.google.com/p/quodlibet/wiki/Guide_Extending\fP. .SH BUGS .sp See \fI\%http://code.google.com/p/quodlibet/issues/list\fP for a list of all currently open bugs and feature requests. .SH AUTHORS .sp Joe Wreschnig and Michael Urman are the primary authors of Quod Libet. .SH SEE ALSO .nf \fI\%http://code.google.com/p/quodlibet/wiki/Guide\fP, \fI\%http://code.google.com/p/quodlibet/wiki/FAQ\fP, \fBregex\fP(7), \fBgst\-launch\fP(1) .fi .sp .\" Generated by docutils manpage writer. .\" . ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/man/exfalso.1�����������������������������������������������������������������������0000644�0001750�0001750�00000005047�12173213426�016237� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" Man page generated from reStructeredText. . .TH EXFALSO 1 "" "" "" .SH NAME exfalso \- audio tag editor . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .sp \fBexfalso\fP [ \fIdirectory\fP ] .SH DESCRIPTION .sp Ex Falso displays and edits audio metadata tags. Supported formats include MP3, Ogg Vorbis, FLAC, Musepack (MPC), WavPack, and MOD/XM/IT. .sp This manual page is only a short reference for Ex Falso. Complete documentation is available at \fI\%http://code.google.com/p/quodlibet/wiki/Guide\fP. .SH OPTIONS .sp Ex Falso may be given a directory to open on the command line. .SH TIED TAGS .sp Many places in Ex Falso allow you to use "tied tags". Tied tags are two tag names joined together with a "~" like "title~version" or "album~part". Tied tags result in "nice" displays even when one of the tags is missing; for example, "title~version" will result in Title \- Version when a version tag is present, but only Title when one isn\(aqt. You can tie any number of tags together. .SH RENAMING FILES .sp Ex Falso allows you to rename files based on their tags. In some cases you may wish to alter the filename depending on whether some tags are present or missing, in addition to their values. A common pattern might be .sp \fB<tracknumber>. <title~version>\fP .sp You can use a \(aq|\(aq to only text when a tag is present: .sp \fB<tracknumber|<tracknumber>. ><title~version>\fP .sp You can also specify literal text to use if the tag is missing by adding another \(aq|\(aq: .sp \fB<album|<album>|No Album> \- <title>\fP .sp See \fI\%http://code.google.com/p/quodlibet/wiki/Guide_Renaming\fP. .SH BUGS .sp See \fI\%http://code.google.com/p/quodlibet/issues/list\fP for a list of all currently open bugs and feature requests. .SH AUTHORS .sp Joe Wreschnig and Michael Urman are the primary authors of Ex Falso. .SH SEE ALSO .nf \fI\%http://code.google.com/p/quodlibet/wiki/Guide\fP, \fI\%http://code.google.com/p/quodlibet/wiki/FAQ\fP .fi .sp .\" Generated by docutils manpage writer. .\" . �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/man/operon.1������������������������������������������������������������������������0000644�0001750�0001750�00000013756�12173213426�016106� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" Man page generated from reStructeredText. . .TH OPERON 1 "" "" "" .SH NAME operon \- command line music tagger . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .SH SYNOPSIS .nf \fBoperon\fP [\-\-version] [\-\-help] [\-v | \-\-verbose] <\fIcommand\fP> [<\fIargument\fP>...] \fBoperon help\fP <\fIcommand\fP> .fi .sp .SH OPTIONS .INDENT 0.0 .TP .B \-h | \-\-help Display help and exit .UNINDENT .INDENT 0.0 .TP .B \-\-version Print the program version .TP .B \-v, \-\-verbose Verbose mode .UNINDENT .SH COMMAND-OVERVIEW .SS Edit Tags .nf \fIadd\fP Add a tag value \fIremove\fP Remove a tag value \fIset\fP Set a tag and remove existing values \fIclear\fP Remove tags \fIcopy\fP Copy tags from one file to another \fIdump\fP Print all tags to stdout .fi .sp .SS Show file metadata .nf \fIlist\fP List tags \fIinfo\fP List file information \fIprint\fP Print tags based on the given pattern .fi .sp .SS Miscellaneous .nf \fItags\fP List all common tags \fIhelp\fP Display help information .fi .sp .SH EDIT TAGS .SS add .sp Add a new tag \fB<tag>\fP with the value \fB<value>\fP to all files. .sp operon add [\-h] <tag> <value> <file>... .INDENT 0.0 .TP .B \-h | \-\-help Display help and exit .TP .B Example: operon add artist \(aqThe Beatles\(aq song1.ogg song2.ogg .UNINDENT .SS remove .sp Remove all values from the tag \fB<tag>\fP that match either \fB<value>\fP or the regular expression \fB<pattern>\fP from all files. .sp operon remove [\-h] [\-\-dry\-run] <tag> (\-e <pattern> | <value>) <file>... .INDENT 0.0 .TP .B \-h | \-\-help Display help and exit .UNINDENT .INDENT 0.0 .TP .B \-\-dry\-run Print the results without changing any files .UNINDENT .INDENT 0.0 .TP .B \-e | \-\-regexp <regexp> Remove all tag values that match the given regular expression .TP .B Example: operon remove artist \(aqThe Beatles\(aq song.ogg .UNINDENT .SS set .sp Replace all values of the tag \fB<tag>\fP by \fB<value>\fP in all files. .sp operon set [\-h] [\-\-dry\-run] <tag> <value> <file>... .INDENT 0.0 .TP .B \-h | \-\-help Display help and exit .UNINDENT .INDENT 0.0 .TP .B \-\-dry\-run Print the results without changing any files .UNINDENT .INDENT 0.0 .TP .B Example: operon set artist \(aqThe Beatles\(aq song.ogg .UNINDENT .SS clear .sp Remove all tags that match \fB<tag>\fP or the regular expression \fB<pattern>\fP from all files. If \fI\-\-all\fP is specified, all known tags will be removed. .sp operon clear [\-h] [\-\-dry\-run] (\-a | \-e <pattern> | <tag>) <file>... .INDENT 0.0 .TP .B \-h | \-\-help Display help and exit .UNINDENT .INDENT 0.0 .TP .B \-\-dry\-run Print the results without changing any files .UNINDENT .INDENT 0.0 .TP .B \-a | \-\-all Remove all tags .TP .B \-e | \-\-regexp <regexp> Remove all tags that match the given regular expression .TP .B Example: operon clear \-a song.ogg .sp operon clear \-e \(aqmusicbrainz_.*\(aq song.ogg .sp operon clear date song.ogg .UNINDENT .SS copy .sp Copy all tags from the file \fI<source>\fP to \fI<dest>\fP. All tags in \fB<dest>\fP will be preserved. In case the destination format doesn\(aqt support setting a tag from source, no tags will be copied. To ignore tags that aren\(aqt supported by the destination format pass \fI\-\-ignore\-errors\fP. .sp operon copy [\-h] [\-\-dry\-run] [\-\-ignore\-errors] <source> <dest> .INDENT 0.0 .TP .B \-h | \-\-help Display help and exit .UNINDENT .INDENT 0.0 .TP .B \-\-dry\-run Print the results without changing any files .TP .B \-\-ignore\-errors Skip tags which the target file does not support .UNINDENT .INDENT 0.0 .TP .B Example: operon copy song.flac song.ogg .UNINDENT .SS dump .sp Print all tags to stdout. The format is not specified. The data can be loaded again using \fIoperon load\fP, given the same version was used to create the data. .sp operon dump [\-h] <src\-file> .INDENT 0.0 .TP .B \-h | \-\-help Display help and exit .TP .B Example: operon dump song.flac > backup.tags .UNINDENT .SH SHOW FILE METADATA .SS list .sp Lists all tags, values and a description of each tag in a table. .sp operon list [\-h] [\-a] [\-t] [\-c <c1>,<c2>...] <file> .INDENT 0.0 .TP .B \-h | \-\-help Display help and exit .TP .B \-a | \-\-all Also list programmatic tags .TP .B \-t | \-\-terse Output is terse and suitable for script processing .TP .B \-c | \-\-columns <name>,... Defines which columns should be printed and in which order .TP .B Example: operon list \-a song.flac .sp operon list \-t \-c tag,value song.ogg .UNINDENT .SS info .sp Lists non\-tag metadata like length, size and format. .sp operon info [\-h] [\-t] [\-c <c1>,<c2>...] <file> .INDENT 0.0 .TP .B \-h | \-\-help Display help and exit .TP .B \-t | \-\-terse Output is terse and suitable for script processing .TP .B \-c | \-\-columns <name>,... Defines which columns should be printed and in which order .TP .B Example: operon info a.ogg .UNINDENT .SS print .sp Prints information per file built from tag values. The pattern can be customized by passing a pattern string (See \fBquodlibet\fP(1) for the pattern format) .sp operon print [\-h] [\-p <pattern>] <file>... .INDENT 0.0 .TP .B \-h | \-\-help Display help and exit .TP .B \-p | \-\-pattern <pattern> Use a custom pattern .TP .B Example: operon print \-p "<album> \- <artist>" a.ogg .UNINDENT .SH COMMANDS .SS help .sp operon help [<command>] .INDENT 0.0 .TP .B Example: operon help list .UNINDENT .SH SEE ALSO .nf \fBregex\fP(7) \fBexfalso\fP(1) \fBquodlibet\fP(1) .fi .sp .\" Generated by docutils manpage writer. .\" . ������������������quodlibet-3.0.2/setup.py����������������������������������������������������������������������������0000755�0001750�0001750�00000027666�12173213426�015471� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python 0<>0 # Python 3.x not supported. Use 2.6+ instead. import glob import os import shutil import sys import subprocess # disable translations os.environ["QUODLIBET_NO_TRANS"] = "" from distutils.core import setup, Command from distutils.dep_util import newer from distutils.command.build_scripts import build_scripts as distutils_build_scripts from distutils.spawn import find_executable from distutils.dir_util import remove_tree from distutils.archive_util import make_archive from gdist import GDistribution from gdist.clean import clean as gdist_clean PACKAGES = ("browsers devices formats library parse plugins qltk " "util player").split() # TODO: link this better to the app definitions MIN_PYTHON_VER = (2,6) MIN_PYTHON_VER_STR = ".".join(map(str,MIN_PYTHON_VER)) class clean(gdist_clean): def run(self): gdist_clean.run(self) if not self.all: return def should_remove(filename): if (filename.lower()[-4:] in [".pyc", ".pyo"] or filename.endswith("~") or (filename.startswith("#") and filename.endswith("#"))): return True else: return False for pathname, dirs, files in os.walk(os.path.dirname(__file__)): for filename in filter(should_remove, files): try: os.unlink(os.path.join(pathname, filename)) except EnvironmentError, err: print str(err) for base in ["coverage", "build", "dist"]: path = os.path.join(os.path.dirname(__file__), base) if os.path.isdir(path): shutil.rmtree(path) class test_cmd(Command): description = "run automated tests" user_options = [ ("to-run=", None, "list of tests to run (default all)"), ("suite=", None, "test suite (folder) to run (default 'tests')"), ("strict", None, "make glib warnings / errors fatal"), ] use_colors = sys.stderr.isatty() and os.name != "nt" def initialize_options(self): self.to_run = [] self.suite = "tests" self.strict = False def finalize_options(self): if self.to_run: self.to_run = self.to_run.split(",") self.strict = bool(self.strict) @classmethod def _red(cls, text): from quodlibet.util.dprint import Colorise return Colorise.red(text) if cls.use_colors else text def run(self): mods = sys.modules.keys() if "gi" in mods: raise SystemExit("E: setup.py shouldn't depend on gi") tests = __import__("tests") subdir = (self.suite != "tests" and self.suite) or None failures, errors = tests.unit(self.to_run, subdir=subdir, strict=self.strict) if failures or errors: raise SystemExit(self._red("%d test failure(s) and " "%d test error(s), as detailed above." % (failures, errors))) class sdist_plugins(Command): description = "Build a source distribution of all plugins" user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): old_dir = os.getcwd() os.chdir("..") process = subprocess.Popen(["hg", "locate", "-I", "plugins"], stdout=subprocess.PIPE) out, err = process.communicate() assert process.returncode == 0 files = out.splitlines() from quodlibet import const dest_name = "quodlibet-plugins-" + const.VERSION for f in files: parts = f.split(os.path.sep) target = os.path.join(dest_name, *parts[1:]) self.mkpath(os.path.dirname(target)) self.copy_file(f, target) archive_name = make_archive(dest_name, "gztar", base_dir=dest_name) remove_tree(dest_name) dist_dir = os.path.join("quodlibet", "dist") self.mkpath(dist_dir) self.move_file(archive_name, dist_dir) os.chdir(old_dir) class build_scripts(distutils_build_scripts): description = "copy scripts to build directory" def run(self): self.mkpath(self.build_dir) for script in self.scripts: newpath = os.path.join(self.build_dir, os.path.basename(script)) if newpath.lower().endswith(".py"): newpath = newpath[:-3] if newer(script, newpath) or self.force: self.copy_file(script, newpath) class coverage_cmd(Command): description = "generate test coverage data" user_options = [ ("to-run=", None, "list of tests to run (default all)"), ] def initialize_options(self): self.to_run = [] def finalize_options(self): pass def run(self): # Wipe existing modules, to make sure coverage data is properly # generated for them. for key in sys.modules.keys(): if key.startswith('quodlibet'): del(sys.modules[key]) import trace tracer = trace.Trace( count=True, trace=False, ignoredirs=[sys.prefix, sys.exec_prefix]) def run_tests(): cmd = self.reinitialize_command("test") cmd.to_run = self.to_run[:] cmd.ensure_finalized() cmd.run() tracer.runfunc(run_tests) results = tracer.results() coverage = os.path.join(os.path.dirname(__file__), "coverage") results.write_results(show_missing=True, coverdir=coverage) map(os.unlink, glob.glob(os.path.join(coverage, "[!q]*.cover"))) try: os.unlink(os.path.join(coverage, "..setup.cover")) except OSError: pass # compute coverage stats = [] cov_files = [] for filename in glob.glob(os.path.join(coverage, "*.cover")): cov_files.append(filename) lines = file(filename, "rU").readlines() lines = filter(None, map(str.strip, lines)) total_lines = len(lines) if not total_lines: continue bad_lines = len([l for l in lines if l.startswith(">>>>>>")]) percent = 100.0 * (total_lines - bad_lines) / float(total_lines) stats.append((percent, filename, total_lines, bad_lines)) stats.sort(reverse=True) print "#" * 80 print "COVERAGE" print "#" * 80 total_sum = 0 bad_sum = 0 for s in stats: p, f, t, b = s total_sum += t bad_sum += b print "%6.2f%% %s" % (p, os.path.basename(f)) print "-" * 80 print "Coverage data written to", coverage, "(%d/%d, %0.2f%%)" % ( total_sum - bad_sum, total_sum, 100.0 * (total_sum - bad_sum) / float(total_sum)) print "#" * 80 def recursive_include(dir, pre, ext): all = [] old_dir = os.getcwd() os.chdir(dir) for path, dirs, files in os.walk(pre): for file in files: if file.split('.')[-1] in ext: all.append(os.path.join(path, file)) os.chdir(old_dir) return all def recursive_include_py2exe(dir, pre, ext): all = [] dir = os.path.join(dir, pre) for path, dirs, files in os.walk(dir): all_path = [] for file in files: if file.split('.')[-1] in ext: all_path.append(os.path.join(path, file)) if all_path: all.append((path, all_path)) return all if __name__ == "__main__": os.chdir(os.path.dirname(os.path.abspath(__file__))) from quodlibet import const cmd_classes = { 'clean': clean, "test": test_cmd, "coverage": coverage_cmd, "build_scripts": build_scripts, "sdist_plugins": sdist_plugins, } setup_kwargs = { 'distclass': GDistribution, 'cmdclass': cmd_classes, 'name': "quodlibet", 'version': const.VERSION, 'url': "http://code.google.com/p/quodlibet/", 'description': "a music library, tagger, and player", 'author': "Joe Wreschnig, Michael Urman, & others", 'author_email': "quod-libet-development@googlegroups.com", 'maintainer': "Steven Robertson and Christoph Reiter", 'license': "GNU GPL v2", 'packages': ["quodlibet"] + map("quodlibet.".__add__, PACKAGES), 'package_data': {"quodlibet": recursive_include("quodlibet", "images", ("svg", "png", "cache", "theme"))}, 'scripts': ["quodlibet.py", "exfalso.py", "operon.py"], 'po_directory': "po", 'po_package': "quodlibet", 'shortcuts': ["data/quodlibet.desktop", "data/exfalso.desktop"], 'man_pages': ["man/quodlibet.1", "man/exfalso.1", "man/operon.1"], "search_provider": "data/quodlibet-search-provider.ini", } if os.name == 'nt': # (probably) necessary to get the right DLLs pulled in by py2exe import pygst pygst.require('0.10') from os.path import join # taken from http://www.py2exe.org/index.cgi/win32com.shell # ModuleFinder can't handle runtime changes to __path__, but win32com uses them try: # py2exe 0.6.4 introduced a replacement modulefinder. # This means we have to add package paths there, not to the built-in # one. If this new modulefinder gets integrated into Python, then # we might be able to revert this some day. # if this doesn't work, try import modulefinder try: import py2exe.mf as modulefinder except ImportError: import modulefinder import win32com for p in win32com.__path__[1:]: modulefinder.AddPackagePath("win32com", p) for extra in ["win32com.shell"]: #,"win32com.mapi" __import__(extra) m = sys.modules[extra] for p in m.__path__[1:]: modulefinder.AddPackagePath(extra, p) except ImportError: # no build path setup, no worries. pass data_files = [('', ['COPYING'])] + recursive_include_py2exe( "quodlibet", "images", ("svg", "png", "cache", "theme")) for type in ["playorder", "songsmenu", "editing", "events", "gstreamer"]: data_files.append((join('quodlibet', 'plugins', type), glob.glob(join('..', 'plugins', type, '*.py')))) setup_kwargs.update({ 'data_files': data_files, 'windows': [ { "script": "quodlibet.py", "icon_resources": [(0, join('..', 'win_installer', 'quodlibet.ico'))] }, # workaround icon not working under Vista/7 # exe resource identifiers get incremented and start at 0. # and 0 doesn't seem to be valid. { "script": "quodlibet.py", "icon_resources": [(0, join('..', 'win_installer', 'quodlibet.ico'))] }, { "script": "exfalso.py", "icon_resources": [(0, join('..', 'win_installer', 'exfalso.ico'))] } ], 'options': { 'py2exe': { 'packages': ('encodings, feedparser, quodlibet, ' 'HTMLParser, gtk, glib, gobject, ' 'musicbrainz2, shelve, json, pyHook'), 'includes': ('cairo, pango, pangocairo, atk, gio, ' 'pygst, gst, quodlibet.player.gstbe, ' 'CDDB'), 'excludes': ('ssl_', 'doctest', 'pdb', 'unittest', 'difflib', 'inspect'), 'skip_archive': True, 'dist_dir': 'dist\\bin' } } }) setup(**setup_kwargs) ��������������������������������������������������������������������������quodlibet-3.0.2/po/���������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�014346� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/bg.po����������������������������������������������������������������������������0000644�0001750�0001750�00000311760�12173213426�015311� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Bulgarian translation of quodlibet. # Copyright (C) 2005 THE quodlibet'S COPYRIGHT HOLDER # This file is distributed under the same license as the quodlibet package. # Rostislav "zbrox" Raykov <zbrox@i-space.org>, 2005 # msgid "" msgstr "" "Project-Id-Version: quodlibet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2006-07-05 15:56-0500\n" "Last-Translator: Rostislav \"zbrox\" Raykov <zbrox@i-space.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n" "Language: bg\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" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Редактор на музикални етикети" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Редактиране на етикетите в аудио файловете Ви" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Слушане на музика" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "За слушане, разглеждане или редактиране на Вашата аудио колекция" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Преслушване" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "Пре_глед" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "редактор на музикални етикети" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "папка" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Показване на про_граматични етикети" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "описание" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Стойност" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Етикет" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Редактор на музикални етикети" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "_Премахване на станция" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "_Премахване на станция" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Филтриране по стойност на етикета" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Филтриране по стойност на етикета" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Няма информация за времетраенето" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Показване на кратка информация за употреба" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> не е валидно местоположение." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Песните не са в албум" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Настройки на списъка с албуми" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Показване на _обложките" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Показване на албум" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d песен" msgstr[1] "%d песни" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d диск" msgstr[1] "%d диска" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Невалиден шаблон" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Заглавие" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Артист" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Дата" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "жанр" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Оценка" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Сортиране по дата" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Настройки" #: ../quodlibet/browsers/albums.py:419 #, fuzzy msgid "Album List" msgstr "Спис_ък с албуми" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "Спис_ък с албуми" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Всички албуми" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d албум" msgstr[1] "%d албума" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Показване на _обложките" msgstr[1] "Показване на _обложките" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "непознат" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Нова емисия" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Въведете местоположението на аудио емисия:" #: ../quodlibet/browsers/audiofeeds.py:222 #, fuzzy msgid "Audio Feeds" msgstr "_Аудио емисии" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Аудио емисии" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "Из_тегляне..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Изтегляне на файлове" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Изтегляне на файл" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Неуспех при добавяне на емисията" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> не може да бъде добавена. Сървърът може да не е на линия или " "местоположението да не е аудио емисия." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Разглеждане на фонотеката" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "непознат" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Разделяне на _множество стойности" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Лично" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Настройки на списъка с албуми" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 #, fuzzy msgid "File System" msgstr "Ф_айлова система" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "Ф_айлова система" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Неуспех при копиране на песните" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Избраните файлове не могат да бъдат копирани към други списъци с песни или " "към опашката." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "Пре_зареждане на фонотеката" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Неподдържан вид файл" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Списъците със станции могат да съдържат само местоположения на станции, не " "други списъци на станции или списъци на песни. Следните местоположения не " "могат да бъдат заредени:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Неуспех при добавяне на станцията" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 #, fuzzy msgid "Internet Radio" msgstr "_Радио по Интернет" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Изтегляне на файлове" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Нова станция" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Въведете местоположението на радиостанция в Интернет:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "оценка" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Радио по Интернет" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Нова станция" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Нова станция" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Нова станция" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Няма открити станции." #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Няма открити Интернет радиостанции на %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Всички изписани станции са вече във фонотеката Ви." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "Премахване от фонотеката" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Добавяне към списък" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d станция" msgstr[1] "%(count)d станции" #: ../quodlibet/browsers/media.py:30 #, fuzzy msgid "Device Properties" msgstr "Информация" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "" #: ../quodlibet/browsers/media.py:46 #, fuzzy msgid "Mount Point:" msgstr "точка на монтиране" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Име:" #: ../quodlibet/browsers/media.py:128 #, fuzzy msgid "Media Devices" msgstr "Аудио устройство: %s" #: ../quodlibet/browsers/media.py:129 #, fuzzy msgid "_Media Devices" msgstr "Аудио устройство: %s" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 #, fuzzy msgid "_Eject" msgstr "_Избор" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Преименуване" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "" #: ../quodlibet/browsers/media.py:461 #, fuzzy, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> не е валидно местоположение." #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "Пропадна изтриването на <b>%s</b>." #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 #, fuzzy msgid "Unable to copy song" msgstr "Неуспех при копиране на песните" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "" #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "" #: ../quodlibet/browsers/media.py:531 #, fuzzy msgid "Unable to delete songs" msgstr "Неуспех при добавяне на песните" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Пропадна изтриването на <b>%s</b>." #: ../quodlibet/browsers/media.py:560 #, fuzzy, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> не е валидно местоположение." #: ../quodlibet/browsers/media.py:564 #, fuzzy msgid "Unable to delete song" msgstr "Неуспех при редактиране на песента" #: ../quodlibet/browsers/media.py:579 #, fuzzy, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Пропадна изтриването на <b>%s</b>." #: ../quodlibet/browsers/media.py:582 #, fuzzy msgid "Unable to eject device" msgstr "Неуспех при изтриването на файл" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Настройки на панели" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Всички" #: ../quodlibet/browsers/paned.py:684 #, fuzzy msgid "Paned Browser" msgstr "_Изглед на панели" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Изглед на панели" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "_Избор на всички" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Внасяне на списък с песни.\n" "\n" "Добавени са %d/%d песни." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Нов списък с песни" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Въведете име за новата папка:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Нов списък с песни" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:193 #, fuzzy msgid "Playlists" msgstr "Сп_исъци с песни" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "Сп_исъци с песни" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "Премахване от фонотеката" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Внасяне" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Неуспех при внасяне на списъка" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet може да внася само списъци с песни с формат M3U или PLS." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "П_роизволен ред" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Неуспех при преименуване на списъка." #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Внасяне на списък с песни" #: ../quodlibet/browsers/search.py:35 #, fuzzy msgid "Disable Browser" msgstr "_Изключване на разглеждането" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Изключване на разглеждането" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Търсене във фонотеката" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "Т_ърсене във фонотеката" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Ограничаване на резултатите" #: ../quodlibet/devices/_base.py:59 #, fuzzy msgid "Unknown Device" msgstr "непознат" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "E: \"%s\" не е уникална представка." #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "Невалидна стойност" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 #, fuzzy msgid "Copy _album covers" msgstr "Показване на _обложките" #: ../quodlibet/devices/ipod.py:115 #, fuzzy msgid "Combine tags with _multiple values" msgstr "Разделяне на _множество стойности" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Заглавието включва _версията" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "" #: ../quodlibet/devices/ipod.py:291 #, fuzzy msgid "Unable to save iPod database" msgstr "Неуспех при запазване на фонотеката" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 #, fuzzy msgid "_Filename Pattern:" msgstr "_Файлово име" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "" #: ../quodlibet/devices/storage.py:96 #, fuzzy msgid "File exists" msgstr "Ф_айлова система" #: ../quodlibet/devices/storage.py:97 #, fuzzy, python-format msgid "Overwrite <b>%s</b>?" msgstr "Пропадна изтриването на <b>%s</b>." #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Фонотека" #: ../quodlibet/library/libraries.py:618 #, fuzzy msgid "Checking mount points" msgstr "точка на монтиране" #: ../quodlibet/library/libraries.py:628 #, fuzzy msgid "Scanning library" msgstr "Запазване на фонотеката" #: ../quodlibet/library/libraries.py:668 #, fuzzy, python-format msgid "Scanning %s" msgstr "Проверяване на %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d секунда" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "Неуспех при отваряне на файловете" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "Невалидна стойност" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "Неуспех при създаването на папка" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet вече е стартиран." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "В момента не се слуша никаква песен." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet не е стартиран." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Неуспех при писането към %s. Премахва се." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "фонотека и програма за слушане на музика" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[опции]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Показване на изпълняващата се песен и излизане" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Започване на изпълнението незабавно" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Отиване на следващата песен" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Отиване на предишната песен" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Започване на изпълнението" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Паузиране на изпълнението" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Сменяне между Слушане и Пауза" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Започване на изпълнението" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Увеличаване силата на звука" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Намаляване силата на звука" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Показване статуса на изпълнението" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Скриване на главния прозорец" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Показване на главния прозорец" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Превключване видимостта на главния прозорец" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Фокусиране на програмата" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "Опресн_яване на фонотеката" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Печат на текущия списък с песни" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Показване съдържанието на опашката" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Затваряне на Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Прескачане в слушаната в момента песен" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Промяна на реда на изпълнение" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Включване на повтарянето, изключване или превключването му." #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Настройване силата на звука" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Търсене из фонотеката" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "запитване" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Слушане на файл" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 #, fuzzy msgid "command|filename" msgstr "файлово име" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Оценка на текущата песен" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Отваряне на нов браузър" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Показване или скриване на опашката" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Показване или скриване на главния изглед с песни" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Филтриране по произволна стойност" #: ../quodlibet.py:340 msgid "command|tag" msgstr "" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Филтриране по стойност на етикета" #: ../quodlibet.py:341 msgid "tag=value" msgstr "етикет=стойност" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Поставяне на файл или запитване на опашката" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "файлово име" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 #, fuzzy msgid "Unqueue a file or query" msgstr "Поставяне на файл или запитване на опашката" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "E: Невалиден аргумент за \"%s\"." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "E: Опитайте %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Поддържани формати: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Аудио устройство: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Начало" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "липсва" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Време" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Име на отметка" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "ММ:СС" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Отметки" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Няма информация за времетраенето" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "С_тойност:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Запазени стойности" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Запазване на редактираните стойности..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Песни" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Показване на оставащото време" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Редактиране на отметки..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "Номера на песните" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "Спис_ък с албуми" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Спиране след тази песен" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Филтриране по стойност на етикета" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Изтриване на файлове" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "Преместване в _кошчето" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Изтриване на файла за постоянно?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Изтриване на файловете за постоянно?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "" msgstr[1] "" #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "Преместване на %d/%d." #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Изтриване на %d/%d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Неуспех при запазване на фонотеката" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Пропадна изтриването на <b>%s</b>." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Неуспех при изтриването на файл" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Пропадна изтриването на <b>%s</b>." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Изтегляния" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Файлово име" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Размер" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "_Опашка" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "шаблон" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Запазване на редактираните стойности..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "Пре_глед" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "О_ще опции..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "липсва от %d песен" msgstr[1] "липсва от %d песни" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "различно при %d песен" msgstr[1] "различно при %d песни" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Разделяне на _множество стойности" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Номерът на диска извън етикета за _албум" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "_Версията извън етикета за заглавието" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "_Аранжиментът извън етикета за артист" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Из_пълнителят извън етикета за артист" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Из_пълнителят извън етикета за артист" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "_Версията извън етикета за заглавието" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Добавяне на етикет" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Етикет:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 msgid "ql-revert" msgstr "" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Редактиране на етикетите" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Запис" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Неуспех при добавяне на етикет" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Неуспех при добавяне на <b>%s</b>\n" "\n" "Текущо избраните файлове не поддържат множествени стойности." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Невалиден етикет" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Невалиден етикет <b>%s</b>\n" "\n" "Избраните в момента файлове не поддържат редакцията на този етикет." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Етикетът може да не е точен" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> претърпя промени, докато програмата вървеше. Запазването без " "опресняване на фонотеката може да презапише други промени по песента.\n" "\n" "Да се запази ли въпреки това?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Не може да се запази песента" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Запазването на <b>%s</b> пропадна. Файлът може би е само за четене, повреден " "или нямате права да го променяте." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Невалидна стойност" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Невалидна стойност: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "П_риставки" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d песен" msgstr[1] "%d песни" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Настройки на Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Раз_деляне на:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Показване на про_граматични етикети" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Редактиране на етикети" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Папки" #: ../quodlibet/qltk/filesel.py:137 #, fuzzy msgid "_New Folder..." msgstr "Нова папка..." #: ../quodlibet/qltk/filesel.py:146 #, fuzzy msgid "_Select All Subfolders" msgstr "_Избор на всички" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Нова папка" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Въведете име за новата папка:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Неуспех при създаването на папка" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Неуспех при изтриването на папка" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Диск %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Песен номер %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Добавяне към списък" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Редактиране на показваното" #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Редактиране на _етикети" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Не се изпълнява нищо" #: ../quodlibet/qltk/information.py:61 #, fuzzy msgid "_Clear Errors" msgstr "Грешки на приставките" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Няма избрани песни." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Няма песни" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Информация" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Текст на песен" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 #, fuzzy msgid "Errors" msgstr "Показване на _грешки" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "артист" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "артисти" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "изпълнители" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Никога" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d път" msgstr[1] "%d пъти" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "добавенa" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "последно слушана" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "Прослушвания" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "пропускания" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "оценка" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "времетраене" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "размер на файла" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "променян" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Файл" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d избрана" msgstr[1] "%d избрани" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Продуцирано от %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "изпълнител" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Песента е неналична" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Списък с песни" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d песен без албум" msgstr[1] "%d песни без албум" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Избор на дискография" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d песен без артист" msgstr[1] "%d песни без артист" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "албуми" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Общо времетраене:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Общ размер:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Файлове" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "Из_тегляне" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Няма открит текст за тази песен." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Търсене на текст на песента..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Неуспех при изтегляне на текстовете" #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d станция" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Отказване от промените?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Етикетите бяха променени, но не бяха запазени. Ще запазите промените или ще " "се откажете от тях?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, fuzzy, python-format msgid "%d tasks running" msgstr "Quod Libet е стартиран" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "непознат" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "Подред" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "П_одред" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "В разбъркан ред" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Претеглен" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "Пре_теглен" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Една песен" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Една песен" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Грешки на приставките" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "П_риставки" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Показване на _грешки" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "версия" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "_Изключване на разглеждането" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Няма открити приставки." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "Д_иск" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "Песен н_омер" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "групиране" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Алб_ум" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Файлово име" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Времетраене" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Списък на песните" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Автоматично прескачане до текущата песен" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "" "Когато слушана песен се смени, автоматично да се селектира нея в списъка с " "песни" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Други:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Редактиране на показваното" #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Видими колони" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Заглавието включва _версията" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Името на файла вклю_чва папката" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Настройки" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Разглеждане" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Глобален филтър:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "Спиране след тази песен" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Търсене" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Когато слушана песен се смени, автоматично да се селектира нея в списъка с " "песни" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "_Оценка" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Спис_ък с албуми" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Паузиране на изпълнението" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 msgid "_Fall-back gain (dB):" msgstr "" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 msgid "_Pre-amp gain (dB):" msgstr "" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "Без нагласяне на силата на звука" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "Без нагласяне на силата на звука" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Редактиране на етикетите" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Отказване от промените?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "Запазване на оценките и броя на слушания" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Е-поща:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Оценките и броя на слушанията ще бъдат настроени за тази е-поща" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Нова станция" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "Опресн_яване на фонотеката" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "Опресн_яване на фонотеката" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Сканиране на пап_ки" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Няма песни" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Настройки" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Информация" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Опашка" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Премахване на всички песни от опашката" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "Произв_олен" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "Р_ед:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "П_овтаряне" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Започване наново списъка с песни след приключване" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Неуспех при добавяне на песните" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> използва неподдържан протокол." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Музика" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Добавяне на папка..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Добавяне на файл..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Добавяне на местоположение..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Отваряне на нов браузър" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Филтри" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "Н_икога не е слушано" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Топ 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Управление" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "П_рескачане към текущата песен" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Преглед" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "Помощ" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "Грешки на приставките" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Търсене" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Опресн_яване на фонотеката" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Пре_зареждане на фонотеката" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Само този _жанр" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Само този _артист" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Само този _албум" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Произволен _жанр" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Произволен _артист" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Произволен _албум" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Списък с пес_ни" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Проверка за промени във фонотеката Ви" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "" "Презареждане на всички песни от фонотеката ви (това може да отнеме много " "време)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "40те песни, които сте слушали най-много (може да са повече от 40, ако някой " "имат равен брой пускания)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Добавяне на местоположение" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Въведете местоположението на аудио файл:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Неуспех при добавяне на местоположението" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> не е валидно местоположение." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Добавяне на музика" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Наблюдение на папката за нови песни" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s не може да се добави към фонотеката Ви.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Неуспех при добавяне на песента" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Заменяне на интервалите с долни черти" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Премахване на _несъвместимите с Windows символи" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Премахване на _диакритичните знаци" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Премахване на н_e-ASCII символите" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Преименуване на файлове" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Ново име" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "Показване на _грешки" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Продължаване" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Неуспех при преименуване на файл." #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Пропадна преименуването на <b>%s</b> на <b>%s</b>. Възможно е да има вече " "файл с такова име или да нямате привилегиите да създадете нов файл или да " "премахвате стария." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Местоположението не е абсолютно" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Шаблона\n" "\t<b>%s</b>\n" "съдържа /, но не започва от главната папка (root folder). За да се избегнат " "зле именувани папки, направете шаблона да започва с / или ~/." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "Песните поставени в тези папки ще бъдат добавяни към фонотеката" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Избор на папки" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Запазени стойности" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Запазване на редактираните стойности..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Търсене" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Ограничаване:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Тежест" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Само този %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "Спис_ък с албуми" #: ../quodlibet/qltk/songlist.py:1018 #, fuzzy msgid "_Track Headers" msgstr "Номера на песните" #: ../quodlibet/qltk/songlist.py:1019 #, fuzzy msgid "_Album Headers" msgstr "Спис_ък с албуми" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "" #: ../quodlibet/qltk/songlist.py:1022 #, fuzzy msgid "_File Headers" msgstr "_Филтри" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "" #: ../quodlibet/qltk/songlist.py:1037 msgid "Custom _Sort..." msgstr "" #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "" #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Добавяне към _опашката" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "Премахване от фонотеката" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "Номера на песните" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "_Филтри" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "Спис_ък с албуми" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "_Филтри" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "_Филтри" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "Номера на песните" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Етикет:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Лично" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Замяна на _долните черти с интервали" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Етикети със регистър на заглавие" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Разделяне на _множество стойности" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Етикети от местоположението" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Етикетите заменят съществуващите" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Етикетите се добавят към съществуващите" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Шаблонът\n" "\t<b>%s</b>\n" "е невалиден. Възможно е да съдържа същия етикет два пъти или има " "небалансирани скоби (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Невалидни етикети" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Невалидни етикети <b>%s</b>\n" "\n" "Избраните в момента файлове не поддържат редактиране на тези етикети." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Неуспех при редактиране на песента" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Шаблонът, който въведохте е невалиден. Уверете се, че сте въвели < и > " "като \\< и \\> и че етикетите са балансирани.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Редактиране на показваното" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Номера на песните" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Запо_чване от:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Общо песни:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Песен" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "и още %d..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Запазване на песните, които сте променили." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Изчистване на търсенето" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Списък с песни с името %s, вече съществува." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "_Оценка" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Показване на кратка информация за употреба" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Показване на версията на запазените права" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Употреба: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[опции]" #: ../quodlibet/util/__init__.py:186 #, fuzzy, python-format msgid "Option %r not recognized." msgstr "E: Опцията \"%s\" не е разпозната." #: ../quodlibet/util/__init__.py:189 #, fuzzy, python-format msgid "Option %r requires an argument." msgstr "E: Опцията \"%s\" изисква аргумент." #: ../quodlibet/util/__init__.py:192 #, fuzzy, python-format msgid "%r is not a unique prefix." msgstr "E: \"%s\" не е уникална представка." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[невалидна кодировка]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Датата трябва да бъде въведета във един от следните формати: ГГГГ, ГГГГ-ММ-" "ДД или ГГГГ-ММ-ДД ЧЧ:ММ:СС." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "" #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "" #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz идентификаторите трябва да са във формата UUID." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "албум" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "аранжимент" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "автор" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "композитор" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "диригент" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "за контакт" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "авторски права" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "дата" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "описание" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "жанр" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "групиране" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "език" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "лиценз" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "местонахождение" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "текстописец" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "организация" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "заглавие" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "версия" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "интернет сайт" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "Артист на албума" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "диск" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "номер" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "каталожен номер" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "оригинална дата на издаване" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "оригинален албум" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "оригинален артист" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "дата на запис" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "Артист на албума" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "артисти" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "Артист на албума" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "изпълнители" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "изпълнители" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "ID в MusicBrainz на песента" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "ID в MusicBrainz на песента" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "ID в MusicBrainz на артиста" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "ID в MusicBrainz за артиста на албума" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "" #: ../quodlibet/util/tags.py:79 #, fuzzy msgid "MusicBrainz album status" msgstr "ID в MusicBrainz за артиста на албума" #: ../quodlibet/util/tags.py:80 #, fuzzy msgid "MusicBrainz album type" msgstr "ID в MusicBrainz на албума" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 #, fuzzy msgid "track gain" msgstr "номер" #: ../quodlibet/util/tags.py:84 #, fuzzy msgid "track peak" msgstr "номер" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 #, fuzzy msgid "album gain" msgstr "албум" #: ../quodlibet/util/tags.py:87 #, fuzzy msgid "album peak" msgstr "албум" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Настройки" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "дискове" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "песни" #: ../quodlibet/util/tags.py:96 #, fuzzy msgid "last started" msgstr "последно слушана" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "пълно име" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "точка на монтиране" #: ../quodlibet/util/tags.py:105 #, fuzzy msgid "errors" msgstr "изпълнители" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "човека" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "година" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "оригинална дата на издаване" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "Отметки" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "формат" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "текстописци" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "аранжименти" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "композитори" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "диригенти" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "автори" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d секунда" msgstr[1] "%d секунди" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d минута" msgstr[1] "%d минути" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d час" msgstr[1] "%d часа" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d ден" msgstr[1] "%d дни" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d година" msgstr[1] "%d години" #~ msgid "_Browse Library" #~ msgstr "Р_азглеждане на фонотеката" #, fuzzy #~ msgid "No eject command found." #~ msgstr "Няма открити станции." #~ msgid "Unable to start web browser" #~ msgstr "Неуспех при стартирането на интернет браузър" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Не може да бъде открит интернет браузърът. Настройте променливата " #~ "$BROWSER или се уверете, че /usr/bin/sensible-browser съществува." #, fuzzy #~ msgid "Library Error" #~ msgstr "Разглеждане на фонотеката" #~ msgid "translator-credits" #~ msgstr "" #~ "Ростислав \"zbrox\" Райков <zbrox@i-space.org>\n" #~ "Проектът за превод на GNOME има нужда от\n" #~ "подкрепа. Научете повече за нас на http://gnome.cult.bg\n" #~ "Докладвайте за грешки на http://gnome.cult.bg/bugs" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Други колони, които да се показват, разделени от интервали" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "_Продължаване" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "Информация" #~ msgid "_Search:" #~ msgstr "_Търсене:" #~ msgid "Search your library" #~ msgstr "Търсене из фонотеката" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quodlibet@lists.sacredchao.net>\n" #~ "Всички права запазени 2004-2005 Joe Wreschnig, Michael Urman, and others\n" #~ "\n" #~ "Това е свободен софтуер; вижте изходния код за условията по копирането. " #~ "Няма НИКАКВА\n" #~ "гаранция; нито дори за ПРОДАВАЕМОСТ или ПРИГОДЕНОСТ ЗА НЯКАКВА ОПРЕДЕЛЕНА " #~ "ЦЕЛ.\n" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Общ размер:" #~ msgid "Quod Libet Plugins" #~ msgstr "Приставки за Quod Libet" #~ msgid "Color _search terms" #~ msgstr "Оцветяване на _търсените фрази" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Показва простите търсения в синьо, разширените в зелено и невалидните в " #~ "червено." #~ msgid "_Select" #~ msgstr "_Избор" #~ msgid "Separators for splitting tags" #~ msgstr "Разделители за разделяне на етикети" #, fuzzy #~ msgid "Display" #~ msgstr "Редактиране на показваното" #~ msgid "Quod Libet Preferences" #~ msgstr "Настройки на Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "Не е слушана _днес" #~ msgid "Not Played in a _Week" #~ msgstr "Не е слушана 1 _седмица" #~ msgid "Not Played in a _Month" #~ msgstr "Не е слушана 1 _месец" #~ msgid "B_ottom 40" #~ msgstr "Пос_ледните 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "40те песни, които сте слушали най-малко (може да са повече от 40, ако " #~ "някои имат равен брой пускания)" #~ msgid "gtk-media-next" #~ msgstr "Следваща" #~ msgid "gtk-media-previous" #~ msgstr "Предишна" #, fuzzy #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --refresh-library | --print-playing | control ]" #, fuzzy #~ msgid "Artist" #~ msgstr "_Артист" #, fuzzy #~ msgid "Date" #~ msgstr "_Дата" #~ msgid "Choose New Stations" #~ msgstr "Избор на нови станции" #~ msgid "Add" #~ msgstr "Добавяне" #~ msgid "_Stations..." #~ msgstr "_Станции..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Затваряне на Quod Libet" #~ msgid "Unable to save library" #~ msgstr "Неуспех при запазване на фонотеката" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Неуспех при изпъление на песента" #~ msgid "_Information" #~ msgstr "_Информация" #~ msgid "Sort by title" #~ msgstr "Сортиране по заглавие" #~ msgid "Sort by artist" #~ msgstr "Сортиране по артист" #~ msgid "Lyrics provided by %s." #~ msgstr "Текстът е предоставен чрез %s" #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Няма открит текст на песента.\n" #~ "\n" #~ "Може да натиснете бутона \"Изтегляне\", за да се потърси текста в " #~ "Интернет. Също така може сами да въведете текста и да натиснете " #~ "\"Запазване\"." #~ msgid "part" #~ msgstr "част" #~ msgid "Opening audio device." #~ msgstr "Отваряне на аудио устройството." #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d песни запазени" #~ msgid "MusicBrainz album ID" #~ msgstr "ID в MusicBrainz на албума" #~ msgid "Loaded song library." #~ msgstr "Заредена е фонотеката с песни." #~ msgid "Unable to open audio device" #~ msgstr "Неуспех при отваряне на аудио устройството" #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet не може да открие елемента на GStreamer 'filesrc'. Проверете " #~ "инсталацията си на GStreamer." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer неуспя да зареди избраната песен." #, fuzzy #~ msgid "C_opy album covers" #~ msgstr "Показване на _обложките" #~ msgid "Unable to retag multiple values" #~ msgstr "Неуспех при презаписването на множество стойности" #~ msgid "Changing the name of a tag with multiple values is not supported." #~ msgstr "Не се поддържа смяната на името на етикет с множествени стойности." #~ msgid "W: %s is not a QL song database." #~ msgstr "W: %s не е база данни за песни на Quod Libet" #~ msgid "tag" #~ msgstr "етикет" #~ msgid "Per-song (\"Radio\") volume adjustment" #~ msgstr "Нагласяне на силата на звука за всяка песен (\"Радио\")" #~ msgid "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "Нагласяне на силата на звука за всеки албум (\"Аудиофил\")" #~ msgid "_Volume Normalization" #~ msgstr "_Нормализиране на звука" #~ msgid "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgstr "" #~ "Сканира се фонотеката Ви. Това може да отнеме няколко минути..\n" #~ "\n" #~ "%d презаредени песни\n" #~ "%d премахнати песни" #~ msgid "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgstr "" #~ "Сканира се за нови песни и се добавят към фонотеката.\n" #~ "\n" #~ "%d добавени песни" #~ msgid "No new stations" #~ msgstr "Няма нови станции" #~ msgid "M3U playlists cannot be loaded." #~ msgstr "M3U списъците не могат да се зареждат." #~ msgid "This station is already in your library." #~ msgstr "Зареждане, сканиране и запазване на фонотеката Ви" #~ msgid "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "by <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disc <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Track <tracknumber>>>" #~ msgstr "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "на <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Диск <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Песен номер <tracknumber>>>" #~ msgid "Tray Icon Preferences" #~ msgstr "Настройки на иконата за статус" #~ msgid "" #~ "Scroll wheel adjusts volume\n" #~ "Shift and scroll wheel changes song" #~ msgstr "" #~ "Колелото на мишката наглася силата на звука;\n" #~ "Shift и колелото на мишката променят песента." #~ msgid "" #~ "Scroll wheel changes song\n" #~ "Shift and scroll wheel adjusts volume" #~ msgstr "" #~ "Колелото на мишката сменя песента;\n" #~ "Shift и колелото на мишката променят силата на звука." #~ msgid "Scroll _Wheel" #~ msgstr "Колелото на ми_шката" #~ msgid "Tooltip Display" #~ msgstr "Показване на подсказка" #~ msgid "Play _Order" #~ msgstr "Р_ед на прослушване" #~ msgid "The library cannot be refreshed while Quod Libet is running." #~ msgstr "Фонотеката не може да бъде опреснена, докато Quod Libet върви." #~ msgid "Loading, scanning, and saving your library." #~ msgstr "Зареждане, сканиране и запазване на фонотеката Ви." #~ msgid "Rescan your library and exit" #~ msgstr "Сканиране наново на фонотеката и излизане." #~ msgid "" #~ "It looks like you are running Quod Libet right now. If you edit songs " #~ "also in Quod Libet's library while it is running, you may need to refresh " #~ "or re-add them.\n" #~ "\n" #~ "If you are not running Quod Libet, or are editing songs outside of its " #~ "library, you may ignore this warning." #~ msgstr "" #~ "Изглежда в момента Quod Libet е пуснат. Ако редактирате песни, които са " #~ "също въф фонотеката на Quod Libet, докато програмата върви, може да се " #~ "наложи да обновите фонотеката или да добавите песните наново.\n" #~ "\n" #~ "Ако Quod Libet не върви или редактирате песни извън фонотеката, може да " #~ "пренебрегнете това предупреждение." #~ msgid "GStreamer status %r != %r" #~ msgstr "Състояние на GStreamer %r != %r" #~ msgid "_Pane %d:" #~ msgstr "Пане_л %d:" #~ msgid "View and edit tags in the playing song" #~ msgstr "Преглед и редакция на етикетите на вървящата песен" ����������������quodlibet-3.0.2/po/ja.po����������������������������������������������������������������������������0000644�0001750�0001750�00000265112�12173213426�015312� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Japanese translations for PACKAGE package. # Copyright (C) 2006 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Yasushi Iwata <yasusii@lowlife.jp>, 2006. # msgid "" msgstr "" "Project-Id-Version: Quod Libet 0.23\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:35+0100\n" "Last-Translator: Yasushi Iwata <yasusii@lowlife.jp>\n" "Language-Team: Japanese\n" "Language: ja\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" "X-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "オーディオタグ・エディタ" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "オーディオファイルのタグ編集" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "ミュージックプレイヤー" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "オーディオファイルの再生、内容表示、編集ができます" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "プレイヤー" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "プレビュー(_P)" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "オーディオタグ・エディタ" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "ディレクトリ" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "プログラマチックタグの表示(_p)" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "説明" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "値" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "タグ" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "オーディオタグ・エディタ" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "ラジオ局の削除(_R)" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "ラジオ局の削除(_R)" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "タグの値でフィルタリング" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "タグの値でフィルタリング" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "時間情報なし" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "基本的な使い方を表示" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "指定された場所 <b>%s</b> にアクセスできません。" #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "どのアルバムにも属さない曲" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "アルバムリストの設定" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "アルバムのカバーを表示する(_c)" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "アルバムの表示" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%dトラック" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%dディスク" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "不正なパターン" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "タイトル" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "アーティスト(_A)" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "日付(_D)" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "ジャンル" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "レイティング(_R)" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "日付で並び換え" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "設定" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "アルバムリスト" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "アルバムリスト(_A)" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "全てのアルバム" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%dアルバム" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "アルバムのカバーを表示する(_c)" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "不明" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "新規フィード" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "オーディオフィードの場所を入力してください:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "オーディオフィード" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "オーディオフィード(_A)" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "ダウンロード(_D)" #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "ファイルのダウンロード" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "ファイルのダウンロード" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "フィードを追加できません" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> を追加できませんでした。サーバがダウンしているか、もしくはオーディ" "オフィードの場所を間違えている可能性があります。" #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "ライブラリブラウザ" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d曲(%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "不明" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "複数の値に分割(_M)" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "カスタム(_C)" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "アルバムリストの設定" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "ファイルシステム" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "ファイルシステム(_F)" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "曲のコピーができません" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "選択されたファイルのソングリストまたはキューへのコピーに失敗しました。" #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "ライブラリへ追加(_A)" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "サポートしていないファイル形式です" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "ステーションリストに含められるのはそのラジオ局のプレイリストだけで、他局のリ" "ストや他局のプレイリストを含めることはできません。以下の場所は読み込みできま" "せんでした:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "ラジオ局を追加できません" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "インターネットラジオ" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "ファイルのダウンロード" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "新規ラジオ局" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "インターネットラジオ局の場所を入力してください:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "レイティング" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "インターネットラジオ(_I)" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "新規ラジオ局(_N)" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "新規ラジオ局(_N)" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "新規ラジオ局" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "ラジオ局が見つかりません" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "%sにインターネットラジオ局が見つかりません。" #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "一覧にあるラジオ局は全てライブラリに登録されています。" #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "プレイリストから削除(_R)" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "プレイリストへ追加(_A)" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d局" #: ../quodlibet/browsers/media.py:30 #, fuzzy msgid "Device Properties" msgstr "プロパティ" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "デバイス:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "マウントされていません" #: ../quodlibet/browsers/media.py:46 #, fuzzy msgid "Mount Point:" msgstr "マウントポイント" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "名前(_N)" #: ../quodlibet/browsers/media.py:128 #, fuzzy msgid "Media Devices" msgstr "オーディオデバイス: %s" #: ../quodlibet/browsers/media.py:129 #, fuzzy msgid "_Media Devices" msgstr "オーディオデバイス: %s" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 #, fuzzy msgid "_Eject" msgstr "イジェクト(_E)" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "名前の変更(_R)" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "使用中<b>%s</b>、利用可能<b>%s</b>" #: ../quodlibet/browsers/media.py:461 #, fuzzy, python-format msgid "<b>%s</b> is not connected." msgstr "指定された場所 <b>%s</b> にアクセスできません。" #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "<b>%s</b>の削除失敗。" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 #, fuzzy msgid "Unable to copy song" msgstr "曲のコピーができません" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "この曲を保存するための空き領域が不足しています" #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b>のコピーに失敗しました。" #: ../quodlibet/browsers/media.py:531 #, fuzzy msgid "Unable to delete songs" msgstr "曲を追加できません" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "<b>%s</b>の削除失敗。" #: ../quodlibet/browsers/media.py:560 #, fuzzy, python-format msgid "<b>%s</b> could not be deleted." msgstr "指定された場所 <b>%s</b> にアクセスできません。" #: ../quodlibet/browsers/media.py:564 #, fuzzy msgid "Unable to delete song" msgstr "曲の編集に失敗しました" #: ../quodlibet/browsers/media.py:579 #, fuzzy, python-format msgid "Ejecting <b>%s</b> failed." msgstr "<b>%s</b>のイジェクト失敗。" #: ../quodlibet/browsers/media.py:582 #, fuzzy msgid "Unable to eject device" msgstr "ファイルを削除できませんでした。" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "ペインブラウザの設定" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "全て" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "ペインブラウザ" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "ペインブラウザ(_P)" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "全て選択(_A)" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "プレイリストをインポートしています。\n" "\n" "%d/%d 曲を追加しました。" #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "新規プレイリスト" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "フォルダ名を入力してください:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "新規プレイリスト(_N)" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "プレイリスト" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "プレイリスト(_P)" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "プレイリストから削除(_R)" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "インポート(_I)" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "プレイリストをインポートできません" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod LibetではM3UとPLS形式のプレイリストしかインポートできません。" #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "シャッフル(_S)" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "プレイリストの名前を変更できません" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "プレイリストのインポート" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "ブラウザの無効化" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "ブラウザの無効化(_D)" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "ライブラリの検索" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "ライブラリの検索(_S)" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "検索結果の上限を設定(_L)" #: ../quodlibet/devices/_base.py:59 #, fuzzy msgid "Unknown Device" msgstr "不明なデバイス" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "E: '%s'はユニークなプリフィックスではありません。" #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "不正な値" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "ボリュームゲイン(dB)" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 #, fuzzy msgid "Copy _album covers" msgstr "アルバムのカバーを表示する(_c)" #: ../quodlibet/devices/ipod.py:115 #, fuzzy msgid "Combine tags with _multiple values" msgstr "複数の値に分割する(_v)" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "タイトルにバージョンを含める(_v)" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "アルバムにパートを含める(_p)" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "モデル" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "容量" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "ファームウェア" #: ../quodlibet/devices/ipod.py:181 #, fuzzy msgid "Removing orphaned iPod track" msgstr "警告: 関連付けされていない iPod トラックを削除します" #: ../quodlibet/devices/ipod.py:291 #, fuzzy msgid "Unable to save iPod database" msgstr "ライブラリの保存に失敗しました" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "初期化されていない iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "iPodに空のデータベースを新規作成しますか?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 #, fuzzy msgid "_Filename Pattern:" msgstr "ファイル名のパターン(_F)" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "使われていないカバーアートとディレクトリを削除(_R)" #: ../quodlibet/devices/storage.py:96 #, fuzzy msgid "File exists" msgstr "同名のファイルが存在します" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "<b>%s</b>を上書きしますか?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "ライブラリ" #: ../quodlibet/library/libraries.py:618 #, fuzzy msgid "Checking mount points" msgstr "マウントポイントを確認中" #: ../quodlibet/library/libraries.py:628 #, fuzzy msgid "Scanning library" msgstr "ソングライブラリ読み込み中" #: ../quodlibet/library/libraries.py:668 #, fuzzy, python-format msgid "Scanning %s" msgstr "%sをチェックしています" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d秒" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "ファイルのオープンに失敗しました" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "不正な値" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "フォルダを作成できません" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet は既に起動しています。" #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "現在再生中の曲はありません。" #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libetが起動していません。" #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "%sに書き込みできないため、削除します。" #: ../quodlibet.py:296 msgid "a music library and player" msgstr "ミュージックライブラリ/プレイヤー" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "場所" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "再生中の曲名を表示して終了" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "直ちに再生開始" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "次の曲へジャンプ" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "前の曲へジャンプ" #: ../quodlibet.py:307 msgid "Start playback" msgstr "再生開始" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "一時停止" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "再生/一時停止の切替" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "再生開始" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "音量を上げる" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "音量を下げる" #: ../quodlibet.py:313 msgid "Print player status" msgstr "プレイヤーの状態を表示" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "メインウィンドウを隠す" #: ../quodlibet.py:315 msgid "Show main window" msgstr "メインウィンドウを表示する" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "メインウィンドウの表示/非表示切り替え" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "起動中のプレイヤーにフォーカス" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "アクティブなフィルタを削除" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "ライブラリの再表示(_f)" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "現在のプレイリストを表示" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "キューの内容を表示" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Quod Libetの終了" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "再生中の曲をシーク" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "再生順のセットまたは切替" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "リピートのオン/オフまたは切替" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "音量のセット" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "オーディオライブラリの検索" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "" #: ../quodlibet.py:334 msgid "Play a file" msgstr "ファイルの再生" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "再生中の曲をレイティング" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "現在のブラウザをセット" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "新しいブラウザを開く" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "キューの表示/非表示" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "メインソングリストの表示/非表示" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "ランダムな値でフィルタリング" #: ../quodlibet.py:340 msgid "command|tag" msgstr "" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "タグの値でフィルタリング" #: ../quodlibet.py:341 msgid "tag=value" msgstr "" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "ファイルまたはクエリの内容をキューに入れる" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "ファイル名" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 #, fuzzy msgid "Unqueue a file or query" msgstr "ファイルまたはクエリの内容をキューから削除" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "E: 不正な引数'%s'が指定されました。" #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "E: %s --help を試してみてください。" #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "サポートしているフォーマット: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "オーディオデバイス: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "曲の頭から再生" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "なし" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "時間" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "ブックマーク名" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "分:秒" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "ブックマーク" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "時間情報なし" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "値(_V)" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "保存された値" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "保存されている値を編集..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "曲" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "残り時間を表示" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "ブックマークの編集(_E)" #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "トラック番号ヘッダ(_T)" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "アルバムヘッダ(_A)" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "この曲の後で停止" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "タグの値でフィルタリング" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "ファイルの削除" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "ゴミ箱へ移動する(_M)" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "このファイルを完全に削除しますか?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "これらのファイルを完全に削除しますか?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "" #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "%d/%d移動中。" #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "%d/%d 削除中。" #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "ライブラリの保存に失敗しました" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "<b>%s</b>のイジェクト失敗。" #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "ファイルを削除できませんでした。" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "<b>%s</b>の削除失敗。" #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "ダウンロード" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "ファイル名" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "サイズ" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "キュー(_Q)" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "パターン" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "保存されている値を編集..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "プレビュー(_P)" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "ほかのオプション(_M)" #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "%d曲が欠落しています" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "%d曲の内容がそれぞれ異なっています" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "複数の値に分割(_M)" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "albumからdiscを分離(_A)" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "titleからversionを分離(_V)" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "artisitからarrangerを分離(_t)" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "artistからperformer を分離(_P)" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "artistからperformer を分離(_P)" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "titleからversionを分離(_V)" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "タグの追加" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "タグ(_T)" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 msgid "ql-revert" msgstr "" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "タグの編集" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "書き込み" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "タグを追加できません" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" " <b>%s</b> を追加できません。\n" "\n" "選択されているファイルは複数のタグをサポートしていません。" #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "不正なタグ" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "不正なタグ <b>%s</b>\n" "\n" "選択されているファイルはこのタグをサポートしていません。" #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "タグが正しくない可能性があります" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "プログラム動作中に<b>%s</b>の内容が変更されました。ライブラリをリフレッシュせ" "ずに保存すると、この曲に対する他の修正内容を上書きしてしまう可能性がありま" "す。\n" "それでも保存を実行しますか? " #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "曲を保存できません" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "<b>%s</b>の保存に失敗しました。ファイルが読み取り専用になっている、あるいは破" "損している、またはあなたにファイル編集の権限が与えられていない可能性がありま" "す。" #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "不正な値" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "不正な値: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "プラグイン(_P)" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d曲" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falsoの設定" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "タグの分割に用いる文字(_o)" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "プログラマチックタグの表示(_p)" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "タグの編集" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "フォルダ" #: ../quodlibet/qltk/filesel.py:137 #, fuzzy msgid "_New Folder..." msgstr "新規フォルダ(_N)" #: ../quodlibet/qltk/filesel.py:146 #, fuzzy msgid "_Select All Subfolders" msgstr "全て選択(_S)" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "新規フォルダ" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "フォルダ名を入力してください:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "フォルダを作成できません" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "フォルダを削除できません" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "ディスク %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "トラック %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "プレイリストへ追加(_A)" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "ディスプレイの編集(_E)" #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "タグの編集(_T)" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "再生中の曲はありません" #: ../quodlibet/qltk/information.py:61 #, fuzzy msgid "_Clear Errors" msgstr "プラグインのエラー" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "曲が選択されていません" #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "曲がありません" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "情報" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "歌詞" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 #, fuzzy msgid "Errors" msgstr "エラー" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "アーティスト" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "アーティスト" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "演奏者" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "なし" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d 回" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "登録日時" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "最終再生日時" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "再生回数" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "スキップ回数" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "レイティング" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "時間" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "サイズ" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "修正日時" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "ビットレート" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "ファイル" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d曲選択済み" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "プロデュース %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "演奏者" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "トラック情報が取得できません" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "トラックリスト" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d曲にアルバム情報がありません" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "選択済みディスコグラフィ" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d曲にアーティスト情報がありません" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "アルバム" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "合計時間" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "合計サイズ" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "ファイル" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "ダウンロード(_D)" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "この曲の歌詞は見つかりませんでした。" #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "歌詞を検索中..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "歌詞のダウンロードに失敗しました。" #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d局" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "タグの変更を破棄しますか?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "タグが変更されましたが、まだ保存されていません。保存しますか?それとも元に戻" "して変更を破棄しますか?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "不明" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "並び順" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "並び順(_I)" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "シャッフル" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "ウェイト順" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "ウェイト順(_W)" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "1曲だけ" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "1曲のみ(_O)" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "プラグインのエラー" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "プラグイン(_P)" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "エラーの表示(_E)" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "バージョン" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "ブラウザの無効化" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "プラグインが見つかりません" #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "ディスク(_D)" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "トラック(_T)" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "グループ" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "アルバム(_b)" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "ファイル名(_F)" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "時間(_L)" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "ソングリスト" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "再生中の曲へ自動的にジャンプする(_J)" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "再生する曲が変わったときにソングリストをスクロールさせます" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "その他(_O)" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "ディスプレイの編集(_E)" #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "表示するカラム" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "タイトルにバージョンを含める(_v)" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "ファイル名にフォルダ名を含める(_f)" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "設定" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "ブラウザ" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "グローバルに適用するフィルタ(_G)" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "この曲の後で停止" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "検索" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "再生する曲が変わったときにソングリストをスクロールさせます" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "レイティング(_R)" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "アルバムリスト" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "一時停止" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "ボリュームゲイン(dB)" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "ボリュームゲイン(dB)" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "リプレイの度に音量調整をする(_R)" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "リプレイの度に音量調整をする(_R)" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "タグの編集" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "タグの変更を破棄しますか?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "レイティングと再生回数を保存する" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "メールアドレス(_E)" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "レイティングと再生回数はこのメールアドレスにセットされます" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "新規ラジオ局(_N)" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "ライブラリの再表示(_f)" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "ライブラリの再表示(_f)" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "スキャンするディレクトリ(_D)" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "曲がありません" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "設定" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "プロパティ" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "キュー(_Q)" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "キューの曲をすべて削除" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "ランダム(_R)" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "再生順(_O)" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "繰り返し(_R)" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "終了したときにプレイリストをリスタートする" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "曲を追加できません" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b>で使われているプロトコルをサポートしていません。" #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "ミュージック(_M)" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "フォルダの追加(_A)" #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "ファイルの追加(_A)" #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "場所の追加(_A)" #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "新しいブラウザを開く" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "フィルタ(_F)" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "まだ1度も再生していない曲(_N)" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "上位40曲(_T)" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "操作(_C)" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "再生中の曲にジャンプ(_J)" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "表示(_V)" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "ヘルプ(_H)" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "プラグインのエラー" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "検索" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "ライブラリの再表示(_f)" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "ライブラリの再読込(_l)" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "ジャンルでフィルタリング(_G)" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "アーティストでフィルタリング(_A)" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "アルバムでフィルタリング(_b)" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "ジャンルでランダム選択(_G)" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "アーティストでランダム選択(_A)" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "アルバムでランダム選択(_b)" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "ソングリスト(_L)" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "ライブラリの変更内容をチェックします" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "ライブラリの再読込(この処理はやや時間がかかるかもしれません)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "再生回数の上位40曲(組になっているものがある場合40曲以上が選択される場合もあり" "ます)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "場所の追加" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "オーディオファイルのある場所を入力してください:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "場所の追加ができません" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "指定された場所 <b>%s</b> にアクセスできません。" #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "ミュージックの追加" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "このフォルダの新しい曲をチェックする" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s をライブラリに追加できませんでした。\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "曲を追加できません" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "スペースをアンダースコアに置き換える(_u)" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Windowsと互換性のない文字を削除する(_W)" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "発音記号を削除する" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "非 ASCII 文字を削除する" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "ファイル名の変更" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "新しい名前" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "エラーの表示(_E)" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "続行する(_C)" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "ファイル名を変更できません" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "<b>%s</b>から<b>%s</b>への名前変更に失敗しました。変更先のファイルが既に存在" "する、新規ファイルを作成する権限がない、旧ファイルを削除する権限がないなどの" "可能性があります。" #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "パス名が絶対パスになっていません" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "パターン\n" " <b>%s</b>\n" "に /が含まれていますが、ルートとなる位置を示していません。パターンを/か~/から" "始め、ルート位置を特定してください。" #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "入力されたフォルダをライブラリに追加します(複数入力するときは ':' で区切る)" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "ディレクトリの選択" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "保存された値" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "保存されている値を編集..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "検索" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "検索結果の上限(_L)" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "ウェイト(_W)" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "%sでフィルタリング(_F)" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "アルバムヘッダ(_A)" #: ../quodlibet/qltk/songlist.py:1018 #, fuzzy msgid "_Track Headers" msgstr "トラック番号ヘッダ(_T)" #: ../quodlibet/qltk/songlist.py:1019 #, fuzzy msgid "_Album Headers" msgstr "アルバムヘッダ(_A)" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_Peopleヘッダ" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Dateヘッダ" #: ../quodlibet/qltk/songlist.py:1022 #, fuzzy msgid "_File Headers" msgstr "_Fileヘッダ" #: ../quodlibet/qltk/songlist.py:1023 #, fuzzy msgid "_Production Headers" msgstr "_Productionヘッダ" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Customizeヘッダ" #: ../quodlibet/qltk/songlist.py:1042 #, fuzzy msgid "_Customize Headers..." msgstr "_Customizeヘッダ" #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "キューへ追加(_Q)" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "デバイスへコピー(_C)" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "プレイリストから削除(_R)" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "トラック番号ヘッダ(_T)" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "_Peopleヘッダ" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "アルバムヘッダ(_A)" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "_Dateヘッダ" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "_Fileヘッダ" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "_Productionヘッダ" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "タグ(_T)" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "カスタム(_C)" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "アンダースコアをスペースに置き換える(_u)" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "タイトルの単語をキャピタライズする(_T)" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "複数の値に分割する(_v)" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "パス名からタグへの変換" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "既存のタグを置き換える" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "既存のタグに追加する" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "不正なパターンが入力されました。\n" " <b>%s</b>\n" "同じタグが2度使われているか、ブラケットの開始、終了の対応(< / >)が取れ" "ていない可能性があります。" #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "不正なタグ" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "不正なタグ <b>%s</b>\n" "\n" "選択されたファイルは上記のタグをサポートしていません。" #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "曲の編集に失敗しました" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "入力されたパターンが不正です。< と > はそれぞれ \\< や \\> のよう" "に入力し、タグの開始と終了関係を保つように入力してください。\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "ディスプレイの編集" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "トラック番号" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "開始番号(_m)" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "合計トラック数(_T)" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "トラック" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "" #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "変更した曲を保存しています。" #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "検索条件をクリア" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "プレイリスト%sは既に存在します。" #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "レイティング(_R)" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "基本的な使い方を表示" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "バージョンと著作権情報を表示" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "使い方: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "" #: ../quodlibet/util/__init__.py:186 #, fuzzy, python-format msgid "Option %r not recognized." msgstr "E: オプション'%s'は認識できません。" #: ../quodlibet/util/__init__.py:189 #, fuzzy, python-format msgid "Option %r requires an argument." msgstr "E: オプション'%s'には引数が必要です。" #: ../quodlibet/util/__init__.py:192 #, fuzzy, python-format msgid "%r is not a unique prefix." msgstr "E: '%s'はユニークなプリフィックスではありません。" #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[不正なエンコーディング]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "日付は'YYYY'、'YYYY-MM-DD'または'YYYY-MM-DD HH:MM:SS'の形式で入力してくださ" "い。" #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "リプレイゲインは'x.yy dB'の形式で入力してください。" #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "リプレイゲインのピークは 'x.yy' の形式で入力してください。" #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz IDはUUID形式でなくてはなりません。" #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainzリリースステータスは'official'、'promotional'、'bootleg'のいずれか" "でなくてはなりません。" #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "アルバム" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "アレンジャー" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "著作者" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "作曲者" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "指揮者" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "連絡先" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "著作権" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "日時" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "説明" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "ジャンル" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "グループ" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "言語" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "ライセンス" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "場所" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "作詞者" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "組織" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "タイトル" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "バージョン" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "ウェブサイト" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "アルバムアーティスト" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "ディスク" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "トラック" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "レーベルID" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "オリジナルリリース日時" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "オリジナルアルバム" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "オリジナルアーティスト" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "録音日時" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "リリース国" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "アルバムアーティスト" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "アーティスト" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "アルバムアーティスト" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "演奏者" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "演奏者" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainzトラックID" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "MusicBrainzトラックID" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "MusicBarainzアーティストID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainzアルバムアーティストID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "" #: ../quodlibet/util/tags.py:79 #, fuzzy msgid "MusicBrainz album status" msgstr "MusicBrainzアルバムアーティストID" #: ../quodlibet/util/tags.py:80 #, fuzzy msgid "MusicBrainz album type" msgstr "MusicBrainz アルバム ID" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "トラックのゲイン" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "トラックのピーク" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "アルバムのゲイン" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "アルバムのピーク" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "設定" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "ディスク" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "トラック" #: ../quodlibet/util/tags.py:96 #, fuzzy msgid "last started" msgstr "最終再生開始日時" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "フルネーム" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "マウントポイント" #: ../quodlibet/util/tags.py:105 #, fuzzy msgid "errors" msgstr "エラー" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "ピープル" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "年" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "オリジナルリリース日時" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "ブックマーク" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "フォーマット" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "作詞者" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "アレンジャー" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "作曲者" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "指揮者" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "著作者" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d秒" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d分" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d時間" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d日" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d年" #~ msgid "_Browse Library" #~ msgstr "ライブラリの参照(_B)" #, fuzzy #~ msgid "No eject command found." #~ msgstr "ラジオ局が見つかりません" #~ msgid "Unable to start web browser" #~ msgstr "webブラウザを起動できません" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "webブラウザが見つかりません。環境変数$BOWSERを設定するか、/usr/sbin/" #~ "sensible-browserが存在することを確認してください。" #, fuzzy #~ msgid "Library Error" #~ msgstr "ライブラリブラウザ" #, fuzzy #~ msgid "_Output device:" #~ msgstr "デバイスへコピー(_C)" #~ msgid "translator-credits" #~ msgstr "Yasushi Iwata <yasusii@lowlife.jp>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "表示したいカラム名をスペースで区切って入力します" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "続行する(_C)" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "情報" #~ msgid "_Search:" #~ msgstr "検索" #~ msgid "Search your library" #~ msgstr "ライブラリを検索します" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "合計サイズ" #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet プラグイン" #~ msgid "Color _search terms" #~ msgstr "検索文字列のカラー表示" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "単純な検索は青、詳細な検索は緑、間違った入力内容は赤で表示します" #~ msgid "_Select" #~ msgstr "フォルダの選択(_S)" #~ msgid "Separators for splitting tags" #~ msgstr "タグを分割するときの区切り文字" #, fuzzy #~ msgid "Display" #~ msgstr "ディスプレイの編集" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libetの設定" #~ msgid "Not Played To_day" #~ msgstr "この1日再生していない曲(_d)" #~ msgid "Not Played in a _Week" #~ msgstr "この1週間再生していない曲(_W)" #~ msgid "Not Played in a _Month" #~ msgstr "この1ヶ月再生していない曲(_M)" #~ msgid "B_ottom 40" #~ msgstr "下位40曲(_B)" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "再生回数の下位40曲(組になっているものがある場合40曲以上が選択される場合も" #~ "あります)" #, fuzzy #~ msgid "Artist" #~ msgstr "アーティスト(_A)" #, fuzzy #~ msgid "Date" #~ msgstr "日付(_D)" #~ msgid "Choose New Stations" #~ msgstr "新しいラジオ局を選択してください" #~ msgid "Add" #~ msgstr "追加" #, fuzzy #~ msgid "Bitrate" #~ msgstr "ビットレート" #~ msgid "_Stations..." #~ msgstr "ラジオ局(_S)" #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Quod Libetの終了" #~ msgid "Unable to save library" #~ msgstr "ライブラリの保存に失敗しました" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "曲の再生ができません" #~ msgid "_Information" #~ msgstr "情報(_I)" #~ msgid "Sort by title" #~ msgstr "タイトルで並び換え" #~ msgid "Sort by artist" #~ msgstr "アーティストで並び換え" #~ msgid "Lyrics provided by %s." #~ msgstr "歌詞の提供元 %s" #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "歌詞が見つかりません。\n" #~ "\n" #~ "ダウンロードボタンをクリックすると歌詞のオンライン検索を実行します。また、" #~ "自分で歌詞を入力して保存することもできます。" #~ msgid "part" #~ msgstr "パート" #~ msgid "Opening audio device." #~ msgstr "オーディオデバイスのオープン中です。" #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d 曲を保存しました" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainzアルバムID" #~ msgid "Loaded song library." #~ msgstr "ソングライブラリの読み込み" #~ msgid "Unable to open audio device" #~ msgstr "オーディオデバイスのオープンに失敗しました" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libetは'autosink'と'%(sink)s' ドライバへのアクセスに失敗しました。~/." #~ "quodlibet/configの\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "を編集してGStreamerのパイプラインを変更してください。" #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod LibetはGStreamerの'filesrc'要素を見つけられませんでした。GStreamerの" #~ "インストール状態を確認してください。" #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamerが選択された曲のロードに失敗しました。" #~ msgid "Unable to retag multiple values" #~ msgstr "複数の値によるタグの付け直しはできません" #~ msgid "Changing the name of a tag with multiple values is not supported." #~ msgstr "複数の値を持つタグ名の変更はサポートされていません。" #~ msgid "W: %s is not a QL song database." #~ msgstr "警告: %sはQuod Libetのデータベースではありません" #~ msgid "Per-song (\"Radio\") volume adjustment" #~ msgstr "曲単位の(\"Radio\")音量調整" #~ msgid "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "アルバム単位の(\"Audiophile\")音量調整" #~ msgid "_Volume Normalization" #~ msgstr "音量の均一化" #~ msgid "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgstr "" #~ "ライブラリをスキャンしています。この処理には数分かかるかもしれません。\n" #~ "\n" #~ "%d曲を再読込\n" #~ "%d曲を削除" #~ msgid "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgstr "" #~ "新しい曲をスキャンしてライブラリに追加しています。\n" #~ "\n" #~ "%d曲を追加しました" #, fuzzy #~ msgid "Add Custom Header" #~ msgstr "カスタムヘッダの追加" #, fuzzy #~ msgid "_Header:" #~ msgstr "ヘッダ(_H)" #~ msgid "No new stations" #~ msgstr "新しいラジオ局はありません" #~ msgid "M3U playlists cannot be loaded." #~ msgstr "M3Uプレイリストを読み込めません。" #~ msgid "This station is already in your library." #~ msgstr "このラジオ局は既にライブラリに登録されています。" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/lv.po����������������������������������������������������������������������������0000644�0001750�0001750�00000261111�12173213426�015334� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Einars Sprugis <einars8@gmail.com>, 2010. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2010-03-30 10:12+0300\n" "Last-Translator: Einars Sprugis <einars8@gmail.com>\n" "Language-Team: Latvian <locale@laka.lv>\n" "Language: lv\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 != 0 ? 1 : " "2);\n" "X-Generator: Lokalize 1.0\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Audio tagu redaktors" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Rediģē tagus jūsu audio failos" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Mūzikas atskaņotājs" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Atskaņo, pārlūko vai rediģē jūsu audio kolekciju" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Atskaņotājs" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Priekšskats" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "audio tagu redaktors" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "mape" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Rādīt programmatūras _tagus" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Par daudz kļūdu" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "apraksts" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Vērtība" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Tags" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Audio tagu redaktors" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 msgid "Remove tags" msgstr "" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 msgid "Remove all tags" msgstr "" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filtrēt pēc taga vērtības" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filtrēt pēc taga vērtības" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Nav ilguma informācijas" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Parādīt īsu lietošanas informāciju" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> nav derīga vieta." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Dziesmas nav albumā" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Albumu saraksta iestatījumi" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Rādīt albumu _vākus" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "Iegultajā _meklēšanā tiek iekļauti cilvēki" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Albuma attēlojums" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d celiņš" msgstr[1] "%d celiņi" msgstr[2] "%d celiņu" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disks" msgstr[1] "%d diski" msgstr[2] "%d disku" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Nederīgs paraugs" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Nosaukums" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Mākslinieks" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Datums" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "Žanrs" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Vērtējums" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "_Kārtot pēc:" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Iestatījumi" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Albumu saraksts" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Albumu saraksts" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Visi albumi" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d albums" msgstr[1] "%d albumi" msgstr[2] "%d albumu" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Rādīt albumu _vākus" msgstr[1] "Rādīt albumu _vākus" msgstr[2] "Rādīt albumu _vākus" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Nezināms" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Jauna barotne" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Ievadiet audio barotnes adresi:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Audio barotnes" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Audio barotnes" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "Lejupielā_dēt..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Lejupielādēt failus" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Lejupielādēt failu" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Neizdevās pievienot barotni" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> neizdevās pievienot. Iespējams, nedarbojas serveris, vai arī " "ievadītā adrese nav audio barotne." #: ../quodlibet/browsers/audiofeeds.py:495 #, fuzzy, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" "Neizdevās importēt python-feedparser, audio barotņu pārlūks tiks atslēgts." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "Pašreizējā audio aizmugure neatbalsta URL, audio barotņu pārlūks tiks " "atslēgts." #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Bibliotēkas pārlūks" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d dziesma (%(time)s)" msgstr[1] "%(count)d dziesmas (%(time)s)" msgstr[2] "(count)d dziesmas (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Nezināms" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Sadalīt _vairākās vērtībās" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Pielāgots" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Albumu saraksta iestatījumi" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Failu sistēma" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Failu sistēma" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Neizdevās pārkopēt dziesmas" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Izvēlētie faili nevar tikt pārkopēti uz citiem dziesmu sarakstiem vai rindu." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "Pievienot bibliotēk_ai" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Neatbalstīts faila tips" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Staciju saraksti var saturēt tikai staciju adreses, nevis citus staciju " "sarakstus vai repertuārus. Neizdevās ielādēt šādas stacijas:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Neizdevās pievienot staciju" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Interneta radio" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Lejupielādēt failus" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Jauna stacija" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Ievadiet interneta radiostacijas adresi:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "vērtējums" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Interneta radio" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "Jau_na stacija" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "Jau_na stacija" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Jauna stacija" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 #, fuzzy msgid "No Category" msgstr "Bez kategorijas" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Nav atrasta neviena stacija" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Netika atrasta neviena interneta radiostacija ar adresi %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Visas sarakstā esošas stacijas jau ir jūsu bibliotēkā." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "Izņemt no _repertuāra" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "Pievienot repertuār_am" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d stacija" msgstr[1] "%(count)d stacijas" msgstr[2] "%(count)d staciju" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Ierīces īpašības" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Ierīce:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Nav piemontēta" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Montēšanas punkts:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Nosaukums:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Multivides ierīces" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Multivides ierīces" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "Izgrūz_t" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "Pā_rdēvēt" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> izmantoti, <b>%s</b> pieejami" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> nav pievienots." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "Kopē <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Neizdevās pārkopēt dziesmu" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Nav pietiekami daudz brīvas vietas šajai dziesmai." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> nevarēja tikt pārkopēta." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Neizdevās izdzēst dziesmas" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Dzēš <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> nevarēja tikt izdzēsta." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Neizdevās izdzēst dziesmu" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Neizdevās izgrūzt <b>%s</b>." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Neizdevās izgrūzt ierīci" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "Nav ierīču aizmugures, multivides ierīču pārlūks atslēgts." #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Sadalītā pārlūka iestatījumi" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Visi" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Sadalītais pārlūks" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "Sadalītais _pārlūks" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Iezīmēt visus" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Importē repertuāru.\n" "\n" "%(current)d/%(total)d dziesmas pievienotas." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Jauns repertuārs" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Ievadiet jaunās mapes nosaukumu:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "Jau_ns repertuārs" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s un vēl %(count)d" msgstr[1] "%(title)s un vēl %(count)d" msgstr[2] "%(title)s un vēl %(count)d" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Repertuāri" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "Re_pertuāri" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "Izņemt no _repertuāra" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importēt" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Neizdevās importēt repertuāru" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet var importēt repertuārus tikai M3U un PLS formātā." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Sajaukt" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Neizdevās pārdēvēt repertuāru" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importēt repertuāru" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Atslēgt pārlūku" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "A_tslēgt pārlūku" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Meklēt bibliotēkā" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Meklēt bibliotēkā" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Limitēt rezultātus" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Nezināma ierīce" #: ../quodlibet/devices/__init__.py:19 #, fuzzy, python-format msgid "Could not import %s, which is needed for device support." msgstr "Neizdevās importēt dbus-python, kas ir nepieciešams ierīču atbalstam." #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "%r nav atbalstīta ierīce." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: neizdevās atrast media-player-info." #: ../quodlibet/devices/__init__.py:212 #, fuzzy, python-format msgid "%s: Could not find %s." msgstr "%s: neizdevās atrast media-player-info." #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "Inicializē ierīces aizmuguri." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "Mēģina '%s'" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "Neizdevās pieslēgties ierīces aizmugurei." #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Ierīces aizmugure inicializēta." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "S_kaļuma pastiprinājums (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Kopēt _albumu vākus" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Ko_mbinēt tagus ar vairākām vērtībām" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Nosaukums iekļauj _versiju" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "Albums iekļauj _diska apakšnosaukumu" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modelis:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Ietilpība:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Programmatūra:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "Dzēš nevajadzīgu iPod celiņu" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Neizdevās saglabāt iPod datubāzi" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Neinicializēts iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Vai vēlaties izveidot tukšu datubāzi uz šī iPod?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "Neizdevās importēt python-gpod, iPod atbalsts tiks atslēgts." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Faila nosaukuma paraugs:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Dzēst nevajadzīgos vākus un mapes" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Fails pastāv" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Pārrakstīt <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Kļūda ielādējot %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Bibliotēka" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Pārbauda montēšanas punktus" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Skenē bibliotēku" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Skenē %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "GStreamer izvades līnija, kas tiks izmantota atskaņošanai, piemēram, " "'alsasink device=default'. Atstājiet tukšu, lai izmantotu noklusēto līniju." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "_Izvades līnija:" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d sekunde" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Izvades kļūda" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "Neizdevās inicializēt GStreamer izvades līniju. Līnija var nebūt derīga, vai " "arī ierīce jau tiek izmantota. Pārbaudiet jūsu atskaņotāja iestatījumus." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Neizdevās atvērt ievades failus" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "GStreamer nav elementa failu nolasīšanai. Pārbaudiet jūsu GStreamer " "instalācijas iestatījumus." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "Nederīga GStreamer izvades līnija, mēģina noklusēto." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "Nederīga audio aizmugure" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "Audio aizmugure %r nav instalēta." #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Neizdevās izveidot audio izvadi" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Audio ierīce %r netika atrasta. Pārbaudiet jūsu Xine iestatījumus failā ~/." "quodlibet/config." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet jau ir palaists." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Pašreiz netiek atskaņota neviena dziesma." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet nav palaists." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Neizdevās uz %s. Dzēš to." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "mūzikas bibliotēka un atskaņotājs" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[opcijas]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Izdrukā pašreiz atskaņoto dziesmu un iziet" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Nekavējoties uzsāk atskaņošanu" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Pāriet uz nākamo dziesmu" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Pāriet uz iepriekšējo dziesmu" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Sākt atskaņošanu" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Pauzēt atskaņošanu" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Pārslēgt atskaņošanas/pauzes režīmu" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Sākt atskaņošanu" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Palielināt skaļumu" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Samazināt skaļumu" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Izdrukāt atskaņotāja statusu" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Slēpt galveno logu" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Rādīt galveno logu" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Pārslēgt galvenā loga redzamību" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Fokusēties uz darbojošos atskaņotāju" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Noņemt aktīvos pārlūka filtrus" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Atsvaidzināt un pārskenēt bibliotēku" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Izdrukāt pašreizējo repertuāru" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Izdrukāt rindas saturu" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Iziet no Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Meklēt pašreizējā dziesmā" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Iestatīt vai pārslēgt atskaņošanas kārtību" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Izslēgt, ieslēgt vai pārslēgt atkārtošanu" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Iestatīt skaļumu" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Meklēt jūsu audio bibliotēkā" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "vaicājums" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Atskaņot failu" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "faila_nosaukums" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Novērtēt pašreiz atskaņoto dziesmu" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Iestatīt pašreizējo pārlūku" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Atvērt jaunu pārlūku" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Rādīt vai slēpt rindu" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Rādīt vai slēpt galveno dziesmu sarakstu" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtrēt pēc nejaušas vērtības" #: ../quodlibet.py:340 msgid "command|tag" msgstr "tags" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtrēt pēc taga vērtības" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tags=vērtība" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Ierindot failu vai vaicājumu" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "faila nosaukums" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Atrindot failu vai vaicājumu" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Nederīgs arguments priekš '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Mēģiniet %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Atbalstītie formāti: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Audio ierīce: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Sākums" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/P" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Laiks" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Grāmatzīmes nosaukums" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Grāmatzīmes" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Nav ilguma informācijas" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Vērtība:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Saglabātās vērtības" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Rediģēt saglabātās vērtības..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Dziesmas" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Rādīt atlikušo laiku" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "R_ediģēt grāmatzīmes..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "_Celiņu galvenes" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "_Albumu galvenes" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Apstāties pēc šīs dziesmas" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtrēt pēc taga vērtības" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Gadījās kļūda" #: ../quodlibet/qltk/debugwindow.py:71 #, fuzzy, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Quod Libet nonāca izņēmumsituācijā. Dump fails, kas mums palīdzēs atkļūdot " "avāriju, tika saglabāts <b>%s</b>. Lūdzu, aizpildiet jaunu problēmas " "ziņojumu vietnē http://code.google.com/p/quodlibet/issues/list , un " "pievienojiet šo failu vai arī iekļaujiet tā saturu. Šis fails var saturēt " "identificējošu situāciju par jums vai jūsu sistēmu, piemēram, nesen " "atskaņoto failu sarakstu. Ja tas nav pieņemami, tā vietā sūtiet <b>%s</b> " "kopā ar aprakstu par jūsu darbībām avārijas brīdī.\n" "\n" "Quod Libet tagad var būt nestabils. Vēlams to aizvērt un pārstartēt. Jūsu " "bibliotēka tiks saglabāta." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Dzēst failus" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "Pārvietot uz _miskasti" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Neatgriezeniski dzēst šo failu?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Neatgriezeniski dzēst šos failus?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s un vēl %(count)d..." msgstr[1] "%(title)s un vēl %(count)d..." msgstr[2] "%(title)s un vēl %(count)d..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "Pārvieto %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Dzēš %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Neizdevās saglabāt iPod datubāzi" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Neizdevās izgrūzt <b>%s</b>." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Neizdevās izdzēst failu" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Neizdevās izdzēst <b>%s</b>." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Lejupielādes" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Faila nosaukums" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Izmērs" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "Ierindots" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "paraugs" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Rediģēt saglabātās vērtības..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Priekšskats" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Vairāk opciju..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "trūkst no %d dziesmas" msgstr[1] "trūkst no %d dziesmām" msgstr[2] "trūkst no %d dziesmām" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "atšķirīgs %d dziesmā" msgstr[1] "atšķirīgs %d dziesmās" msgstr[2] "atšķirīgs %d dziesmās" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Sadalīt _vairākās vērtībās" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Izdalīt disku no _albuma" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Izdalīt _versiju no nosaukuma" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Izdalīt aranžētāju no izpildī_tāja" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Izdalīt iz_pildītāju no mākslinieka" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Izdalīt iz_pildītāju no mākslinieka" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Izdalīt _versiju no nosaukuma" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Pievienot tagu" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Tags:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "ql-remove" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Rediģēt tagus" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Rakstīt" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Neizdevās pievienot tagu" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Neizdevās pievienot <b>%s</b>\n" "\n" "Pašlaik izvēlētie faili neatbalsta vairākas vērtības." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Nederīgs tags" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Neatļauts tags <b>%s</b>\n" "\n" "Pašlaik izvēlētie faili neatbalsta šī taga rediģēšanu." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Tags var nebūt precīzs" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> tika izmainīts, programmai darbojoties. Saglabāšana, " "neatsvaidzinot jūsu bibliotēku, var pārrakstīt citas izmaiņas dziesmā.\n" "\n" "Tomēr saglabāt šo dziesmu?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Neizdevās saglabāt dziesmu" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Neizdevās saglabāt <b>%s</b>. Fails var būt tikai lasāms, bojāts vai arī " "jums nav atļauju to rediģēt." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Nederīga vērtība" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Nederīga vērtība: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "S_praudņi" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d dziesma" msgstr[1] "%d dziesmas" msgstr[2] "%d dziesmu" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso iestatījumi" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Sadalīt _pie:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Rādīt programmatūras _tagus" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Tagu rediģēšana" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Mapes" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "Jau_na mape..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "Izvēlēties vi_sas apakšmapes" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Jauna mape" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Ievadiet jaunās mapes nosaukumu:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Neizdevās izveidot mapi" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Neizdevās izdzēst mapi" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "no %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "%s. disks" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "%s. celiņš" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "Pievienot repertuār_am" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "R_ediģēt rādāmo..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Rediģēt _tagus" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Pašreiz neatskaņo" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Notīrīt kļūdas" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Nav izvēlēta neviena dziesma." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Nav dziesmu" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informācija" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Dziesmas vārdi" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Kļūdas" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "mākslinieks" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "mākslinieki" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "izpildītāji" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Nekad" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d reizi" msgstr[1] "%d reizes" msgstr[2] "%d reižu" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "pievienots" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "Pēdējo reizi atskaņots" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "atskaņojumi" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "izlaidumi" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "vērtējums" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kb/s" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "ilgums" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "faila izmērs" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "mainīts" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitātrums" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Fails" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d izvēlēti" msgstr[1] "%d izvēlēti" msgstr[2] "%d izvēlēti" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Producējis %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "izpildītājs" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Celiņš nav pieejams" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Celiņu saraksts" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d dziesma bez albuma" msgstr[1] "%d dziesmas bez albuma" msgstr[2] "%d dziesmu bez albuma" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Izvēlētā diskogrāfija" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d dziesma bez mākslinieka" msgstr[1] "%d dziesmas bez mākslinieka" msgstr[2] "%d dziesmas bez mākslinieka" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "albumi" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Kopējais ilgums:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Kopējais izmērs:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Faili" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Izvades žurnāls" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "Lejupielā_dēt" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Šajai dziesmai vārdi netika atrasti." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Meklē dziesmas vārdus..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Neizdevās lejupielādēt dziesmas vārdus." #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "" "Jūs grasāties mainīt vērtējumu %d dziesmām.\n" "Vai vēlaties turpināt?" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d stacija" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Izmest tagu izmaiņas?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Tagi tika izmainīti, bet netika saglabāti. Saglabāt šos failus, vai " "atgriezties un izmest izmaiņas?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Nezināms" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "Pēc kārtības" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "Pē_c kārtības" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Sajaukt" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Svērti" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "S_vērti" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Viena dziesma" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "V_iena dziesma" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Spraudņu kļūdas" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "S_praudņi" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Rādīt _kļūdas" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "versija" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Ieslēgts" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Izslēgts" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Bez kategorijas" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Nav atrasts neviens spraudnis." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disks" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Celiņš" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "grupēšana" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bums" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Faila nosaukums" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Ilgums" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Dziesmu saraksts" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Pārlēkt uz atskaņoto dziesmu automātiski" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "Kad atskaņotā dziesma izmainās, pāriet uz to arī dziesmu sarakstā" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "C_iti:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "R_ediģēt rādāmo..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Redzamās kolonnas" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Iegultajā _meklēšanā tiek iekļauti cilvēki" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "_Faila nosaukums iekļauj mapi" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Iestatījumi" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Pārlūki" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Globālais filtrs:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Meklēt pēc ieraks_tīšanas" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" "Parāda meklējuma rezultātus pēc tam, kad lietotājs ir pārtraucis rakstīt." #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Meklēt" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Apstiprināt vairākus vērtēju_mus" #: ../quodlibet/qltk/prefs.py:236 #, fuzzy msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" "Vaicāt pēc apstiprinājuma, pirms mainīt vērtējumu vairākām dziesmām uzreiz" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Ieslēgt viena klikšķa vērtējumus" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Ieslēgt novērtējumu, noklikšķinot uz vērtējumu kolonnas dziesmu sarakstā" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Vērtējumi" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "Izmantot noapaļot_us stūrus sīktēliem" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "Noapaļot albumu vāciņu sīktēlus. Iespējams, būs jāpārstartē programma, lai " "izmaiņas stātos spēkā." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Albumu saraksts" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Pauzēt atskaņošanu" #: ../quodlibet/qltk/prefs.py:306 #, fuzzy msgid "Output Configuration" msgstr "Izvades žurnāls" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "Ja dziesmai nav pieejama Replay Gain informācija, mērogot skaļumu par šo " "vērtību" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "Atkāpšanās pastiprinājums (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Mērogot skaļumu visām dziesmām par šo vērtību, ja vien neparādās apgriešana" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "Priekšpastiprinājuma pastiprinājums (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "I_eslēgt Replay Gain skaļuma regulāciju" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Replay Gain skaļuma regulācija" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Rediģēt tagus" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Izmest tagu izmaiņas?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Saglabāt vērtējumus un _atskaņošanu skaitu" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_E-pasts:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Vērtējumi un atskaņošanu skaits tiks iestatīts šajai e-pasta adresei" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "Jau_na stacija" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "A_tsvaidzināt bibliotēku, palaižot programmu" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "_Atsvaidzināt bibliotēku" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Skenēt _mapes" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Nav dziesmu" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Iestatījumi" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Īpašības" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Rinda" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Izņemt no rindas visas dziesmas" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Nejauši" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Kārtība" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Atkārtot" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Pārstartēt repertuāru, kad pabeigts" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Neizdevās pievienot dziesmas" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> izmanto neatbalstītu protokolu." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Mūzika" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Pievienot mapi..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "Pievienot _failu..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "Pievienot _vietu..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Atvērt jaunu pārlūku" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtri" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Nekad nav atskaņots" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "Augšējās _40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Vadība" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Pārlēkt uz atskaņoto dziesmu" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Skats" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Palīdzība" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "Izvades ž_urnāls" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "Izraisīt _kļūdu" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Meklēt" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "_Atsvaidzināt bibliotēku" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Pār_lādēt bibliotēku" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtrēt pēc žanra" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtrēt pēc māksliniek_a" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filtrēt pēc al_buma" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Nejauš_s žanrs" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Nej_aušs mākslinieks" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Nejaušs al_bums" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "_Dziesmu saraksts" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Pārbaudīt izmaiņas jūsu bibliotēkā" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Pārlādēt visas dziesmas jūsu bibliotēkā (tas var aizņemt ilgu laiku)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "40 dziesmas, ko esi atskaņojis visbiežāk (var tikt atlasītas vairāk nekā 40, " "ja ir 'neizšķirti' gadījumi)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Pievienot vietu" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Ievadiet audio faila atrašanās vietu:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Neizdevās pievienot vietu" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> nav derīga vieta." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Pievienot mūziku" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Vērot šo mapi" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s nevarēja tikt pievienota jūsu bibliotēkai.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Neizdevās pievienot dziesmu" #: ../quodlibet/qltk/ratingsmenu.py:20 #, fuzzy, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" "Jūs grasāties mainīt vērtējumu %d dziesmām.\n" "Vai vēlaties turpināt?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Saņemta nederīga komanda %r." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Nezināms pārlūks %r." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Aizvietot atstarpes ar pa_svītrām" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Izņemt ar Windows nesavietojamas rakstzīmes" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Izņemt _diakritiskās zīmes" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Izņemt ne-ASCII rakstzīmes" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Pārdēvēt failus" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Jauns nosaukums" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "Ignorēt vis_as kļūdas" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Turpināt" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Neizdevās pārdēvēt failu" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Neizdevās pārdēvēt <b>%s</b> par <b>%s</b>. Mērķa fails, iespējams, jau " "eksistē, vai arī jums nav atļauju izveidot jaunu vai dzēst veco failu." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Ceļš nav absolūts" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Paraugs\n" "\t<b>%s</b>\n" "satur '/', bet nesākas no saknes mapes. Lai izvairītos no mapju nepareizas " "nosaukšanas, pievienojiet savam paraugam sakni, iesākot to ar '/' vai '~/'." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Šajās mapēs (jāatdala ar ':') esošās dziesmas tiks pievienotas jūsu " "bibliotēkai" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Izvēlieties mapes" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Saglabātās vērtības" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Rediģēt saglabātās vērtības..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Meklēt" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limits:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "S_vars" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtrēt pēc %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "_Albumu galvenes" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_Celiņu galvenes" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Albumu galvenes" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "C_ilvēku galvenes" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Datumu galvenes" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_Failu galvenes" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "_Producēšanas galvenes" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "Pielāg_ot galvenes..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "Pielāg_ot galvenes..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Pie_vienot rindai" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "Kopēt uz ierī_ci" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "Izņemt no _repertuāra" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "_Celiņu galvenes" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "C_ilvēku galvenes" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "_Albumu galvenes" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "_Datumu galvenes" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "_Failu galvenes" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "_Producēšanas galvenes" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Tags:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Pielāgots" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Aizvietot pasvīt_ras ar atstarpēm" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Tagu reģistrs ir tāds pats, kā nosaukuma reģistrs" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Sadalīt _vairākās vērtībās" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Tagi no ceļa" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Tagi aizvieto pastāvošos tagus" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Tagi tiek pievienoti pastāvošajiem tagiem" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Paraugs\n" "\t<b>%s</b>\n" "ir nederīgs. Iespējams, tas satur vienu un to pašu tagu divreiz, vai arī " "tajā ir nenobalancētas zīmes (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Nederīgi tagi" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Nederīgi tagi <b>%s</b>\n" "\n" "Pašreiz izvēlētie faili neatbalsta šo tagu rediģēšanu." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Neizdevās rediģēt dziesmu" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Jūsu ievadītais paraugs nav derīgs. Pārliecinieties, ka ievadiet < un " "> kā \\< un \\> un ka jūsu tagi ir nobalancēti.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Rediģēt rādāmo" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Par daudz kļūdu" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Aptur atskaņošanu, jo tika novērotas %d kļūdas pēc kārtas." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Celiņu numuri" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Sākt _no:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Celiņi kopā:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Celiņš" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "un vēl %d..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Saglabā jūsu izmainītās dziesmas." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d dziesmas saglabātas\n" "(%(remaining)s atlikušas)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d no %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Notīrīt meklējumu lauku" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Repertuārs ar nosaukumu %s jau pastāv." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 #, fuzzy msgid "D: " msgstr "B: " #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "B: " #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Brīdinājumi" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "E: " #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Parādīt īsu lietošanas informāciju" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Parādīt versiju un autortiesības" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Lietošana: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[opcijas]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Opcija %r nav atpazīta." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "Opcijai %r nepieciešams arguments." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r nav unikāls prefikss." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Nederīgs kodējums]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "nē" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Datumam jābūt ievadītam 'GGGG', 'GGGG-MM-DD' vai 'GGGG-MM-DD HH:MM:SS' " "formātā." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Replay Gain pastiprinājumi jāievada 'x.yy dB' formātā." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Replay Gain maksimumi jāievada 'x.yy' formātā." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz ID-iem jābūt UUID formātā." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz izlaiduma statusam jābūt 'official', 'promotional' vai 'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "albums" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "aranžētājs" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "autors" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "komponists" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "diriģents" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "kontakts" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "autortiesības" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "datums" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "apraksts" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "žanrs" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "grupēšana" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "valoda" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licence" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "vieta" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "dziesmu vārdu autors" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organizācija" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "nosaukums" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "versija" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "tīmekļa vietne" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "albuma mākslinieks" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "sit./min." #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "diska apakšnosaukums" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disks" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "celiņš" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "izdevēja ID" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "oriģinālais izlaiduma datums" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "oriģinālais albums" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "oriģinālais mākslinieks" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "ierakstīšanas datums" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "izlaiduma valsts" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "albuma mākslinieks (kārtot)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "mākslinieks (kārtot)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "albums (kārtot)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "izpildītājs (kārtot)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "izpildītāji (kārtot)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz celiņa ID" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "MusicBrainz izlaiduma ID" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "MusicBrainz mākslinieka ID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz albuma mākslinieka ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz albuma statuss" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz albuma tips" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "celiņa pastiprinājums" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "celiņa maksimums" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "albuma pastiprinājums" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "albuma maksimums" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Iestatījumi" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "diski" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "celiņi" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "pēdējo reizi sākts" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "pilns vārds" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "montēšanas punkts" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "kļūdas" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "cilvēki" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "gads" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "oriģinālais izlaiduma datums" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "grāmatzīme" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "Nav ilguma informācijas" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "vārdu autori" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "aranžētāji" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "komponisti" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "diriģenti" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "autori" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d sekunde" msgstr[1] "%d sekundes" msgstr[2] "%d sekunžu" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minūte" msgstr[1] "%d minūtes" msgstr[2] "%d minūšu" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d stunda" msgstr[1] "%d stundas" msgstr[2] "%d stundu" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d diena" msgstr[1] "%d dienas" msgstr[2] "%d dienu" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d gads" msgstr[1] "%d gadi" msgstr[2] "%d gadu" #~ msgid "_Browse Library" #~ msgstr "Pārlūkot _bibliotēku" #~ msgid "No eject command found." #~ msgstr "Komanda 'eject' nav atrasta." #~ msgid "Unable to start web browser" #~ msgstr "Neizdevās palaist tīmekļa pārlūku" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Neizdevās atrast tīmekļa pārlūku. Lūdzu, iestatiet mainīgo '$BROWSER', " #~ "vai arī pārliecinieties, ka /usr/bin/sensible-browser eksistē." #, fuzzy #~ msgid "Library Error" #~ msgstr "Bibliotēkas pārlūks" #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Izvades līnija:" #~ msgid "translator-credits" #~ msgstr "Einārs Sprūģis <einars8@gmail.com>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Citas kolonnas, ko attēlot, atdalītas ar atstarpēm" #~ msgid "_Edit and Continue" #~ msgstr "R_ediģēt un turpināt" #, fuzzy #~ msgid "You are about to change the rating of %d song." #~ msgid_plural "You are about to change the rating of %d songs." #~ msgstr[0] "" #~ "Jūs grasāties mainīt vērtējumu %d dziesmām.\n" #~ "Vai vēlaties turpināt?" #~ msgstr[1] "" #~ "Jūs grasāties mainīt vērtējumu %d dziesmām.\n" #~ "Vai vēlaties turpināt?" #~ msgstr[2] "" #~ "Jūs grasāties mainīt vērtējumu %d dziesmām.\n" #~ "Vai vēlaties turpināt?" #~ msgid "Confirm rating" #~ msgstr "Apstiprināt vērtējumu" #~ msgid "_Search:" #~ msgstr "_Meklēt:" #~ msgid "Search your library" #~ msgstr "Meklēt jūsu bibliotēkā" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quod-libet-development@googlegroups.com>\n" #~ "Autortiesības 2004-2005 Joe Wreschnig, Michael Urman, and others\n" #~ "\n" #~ "Šī ir brīvā programmatūra; kopēšanas nosacījumiem skatiet pirmkodu.\n" #~ "Netiek dota NEKĀDA garantija, pat PIEPRASĪJUMA vai NODERĪBAS ĪPAŠAM\n" #~ "MĒRĶIM garantija.\n" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r nesatur nekādus pārlūkus." #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Kopējais izmērs:" #~ msgid "%r doesn't contain any devices." #~ msgstr "%r nesatur nekādas ierīces." #~ msgid "%s: Could not import ctypes." #~ msgstr "%s: neizdevās importēt ctypes." #~ msgid "%s: Could not find media-player-info." #~ msgstr "%s: neizdevās atrast media-player-info." #, fuzzy #~ msgid "Couldn't find module %s." #~ msgstr "%s: neizdevās atrast media-player-info." #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet spraudņi" #~ msgid "Color _search terms" #~ msgstr "Iekrā_sot meklējamos terminus" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Attēlot vienkāršos meklējumus zilā krāsā, paplašinātos - zaļā, bet " #~ "nederīgos - sarkanā krāsā" #~ msgid "_Select" #~ msgstr "Izvēlētie_s" #~ msgid "Separators for splitting tags" #~ msgstr "Atdalītāji tagu sadalīšanai" #, fuzzy #~ msgid "Display" #~ msgstr "Rediģēt rādāmo" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet iestatījumi" #~ msgid "Not Played To_day" #~ msgstr "Nav atskaņots šo_dien" #~ msgid "Not Played in a _Week" #~ msgstr "Nav atskaņots š_onedēļ" #~ msgid "Not Played in a _Month" #~ msgstr "Nav atskaņots šo_mēness" #~ msgid "B_ottom 40" #~ msgstr "Apakšējās 4_0" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "40 dziesmas, ko esi atskaņojis visretāk (var tikt atlasītas vairāk nekā " #~ "40, ja ir 'neizšķirti' gadījumi)" #~ msgid "gtk-media-next" #~ msgstr "gtk-media-next" #~ msgid "gtk-media-previous" #~ msgstr "gtk-media-previous" #~ msgid "gtk-media-play" #~ msgstr "gtk-media-play" #~ msgid "gtk-media-pause" #~ msgstr "gtk-media-pause" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | vadīkla ]" #~ msgid "Artist" #~ msgstr "Izpildītājs" #~ msgid "Date" #~ msgstr "Datums" #~ msgid "Choose New Stations" #~ msgstr "Izvēlieties jaunas stacijas" #~ msgid "Add" #~ msgstr "Pievienot" #~ msgid "Bitrate" #~ msgstr "Bitātrums" #~ msgid "_Stations..." #~ msgstr "_Stacijas..." #~ msgid "Quod Libet" #~ msgstr "Quod Libet" #~ msgid "Initializing audio backend (%s)" #~ msgstr "Inicializē audio aizmuguri (%s)" #~ msgid "Initializing main library (%s)" #~ msgstr "Inicializē galveno bibliotēku (%s)" #~ msgid "Unable to save library" #~ msgstr "Neizdevās saglabāt bibliotēku" #~ msgid "" #~ "The audio output pipeline %r could not be created. Check your GStreamer " #~ "settings in ~/.quodlibet/config." #~ msgstr "" #~ "Audio izvades līnija %r nevarēja tikt izveidota. Pārbaudiet jūsu " #~ "GStreamer iestatījumus failā ~/.quodlibet/config." #~ msgid "_Information" #~ msgstr "_Informācija" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/fr.po����������������������������������������������������������������������������0000644�0001750�0001750�00000267366�12173213426�015344� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# translation of fr.po to Français # Olivier Gambier <dev@viapanda.com>, 2006. msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:32+0100\n" "Last-Translator: Nick Boultbee <nick.boultbee@googlemail.com>\n" "Language-Team: Français\n" "Language: 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-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Éditeur d'étiquettes audio (tags)" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Éditer les etiquettes dans vos fichiers audio" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Lecteur" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Ecouter, parcourir ou éditer votre collection musicale" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Lecteur" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "A_perçu" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "un éditeur d'étiquettes (tags) audio" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "répertoire" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Montrer les commentaires de _programmation" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Trop d'erreurs" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "description" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Valeur" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Étiquette" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Éditeur d'étiquettes audio (tags)" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "Supprimer les doublons" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Supprimer les doublons" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filtrer sur la valeur d'une étiquette" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filtrer sur la valeur d'une étiquette" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Aucun renseignement de durée" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Afficher des informations d'utilisation succinctes " #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> n'est pas un chemin valide." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Chansons pas dans un album" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Préférences de l'affichage liste d'albums" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Montrer les _jaquettes des albums" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "Inclure les personnes dans la _recherche" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Affichage des albums" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d piste" msgstr[1] "%d pistes" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disque" msgstr[1] "%d disques" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Motif invalide" #: ../quodlibet/browsers/albums.py:180 msgid "_Title" msgstr "_Titre" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artiste" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Date" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 msgid "_Genre" msgstr "_Genre" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Notation" #: ../quodlibet/browsers/albums.py:189 msgid "Sort _by..." msgstr "_Trier par..." #: ../quodlibet/browsers/albums.py:210 msgid "_Preferences" msgstr "_Préférences" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Liste des albums" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "Liste des _albums" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Tous les albums" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d album" msgstr[1] "%d albums" #: ../quodlibet/browsers/albums.py:725 msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Recharger la _jaquettes de l'album" msgstr[1] "Recharger les _jaquettes des albums" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Inconnu(e)" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Nouveau flux" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Saisissez l'adresse d'un flux audio." #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Flux audio" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Flux audio" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Télécharger..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Télécharger les fichiers" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Télécharger le fichier" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Impossible d'importer le flux" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> n'a pas pu être ajouté. Le serveur est peut-être en dérangement ou " "la ressource n'est pas un flux audio." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "Impossible d importer %s. Désactivation de navigateur de flux audio." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Navigateur de bibliothèque" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d chanson (%(time)s)" msgstr[1] "%(count)d chansons (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Inconnu(e)" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Séparer en _plusieurs valeurs" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Autre" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Préférences de l'affichage liste d'albums" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Système de fichiers" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Système de fichiers" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Impossible de copier les chansons" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Les fichiers selectionnés ne peuvent pas être copiés vers une autre liste de " "chanson ou la file." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "A_jouter à la bibliothèque" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Type de fichier non supporté" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Les listes de radio doivent contenir seulement des emplacements de radio, " "pas d'autres listes de radio ou des listes de lecture. Il est impossible de " "charger ces emplacements:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Impossible d'ajouter la radio" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Radio Internet" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Télécharger les fichiers" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Nouvelle radio Internet" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Saisissez l'adresse d'une radio Internet:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 msgid "Latin" msgstr "" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Radio Internet" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Nouvelle radio internet" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Nouvelle radio internet" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Nouvelle radio Internet" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "Favoris" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "Aucune catégorie" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Aucune radio trouvée." #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Aucune radio ne correspond à %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Tous les radios listées sont déjà dans votre bibliothèque." #: ../quodlibet/browsers/iradio.py:738 msgid "Remove from Favorites" msgstr "Supprimer des Favoris" #: ../quodlibet/browsers/iradio.py:744 msgid "Add to Favorites" msgstr "_Ajouter à la liste des favoris" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d radio" msgstr[1] "%(count)d radios" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Propriétés du périphérique" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Périphérique :" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Pas monté" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Point de montage :" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Nom :" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Périphériques multimedia" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "Périphériques _multimedia" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Éjecter" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "Re_nommer" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> utilisé(s), <b>%s</b> disponible(s)" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> n'est pas connecté." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "Copie de <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Impossible de copier la chanson" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Il n'y a pas assez de place pour cette chanson" #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> n'a pas pu être copié." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Impossible de supprimer les chansons" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Suppression de <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> ne peut pas être supprimé." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Impossible de supprimer la chanson" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "L'éjection de <b>%s</b> a échoué." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Impossible d'éjecter le périphérique" #: ../quodlibet/browsers/media.py:587 #, fuzzy msgid "No device backend, Media Devices browser disabled." msgstr "" "Impossible de se connecter à un gestionnaire de périphérique, désactivation " "du navigateur de Périphériques Multimédias." #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Préférences du navigateur à panneaux" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Tous" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Navigateur à panneaux" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "Navigateur à _panneaux" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Choisir _tous" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Importation de liste de lecture.\n" "\n" "%(current)d/%(total)d chansons ajoutées." #: ../quodlibet/browsers/playlists.py:108 #, fuzzy, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" "Vous êtes sur le point de supprimer la liste de lecture '<i>%s</i>'.\n" "Voulez-vous continuer?" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, fuzzy, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "Vous allez supprimer %d chanson." msgstr[1] "Vous allez supprimer %d chansons." #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Créer une liste de lecture" #: ../quodlibet/browsers/playlists.py:141 msgid "Enter a name for the new playlist:" msgstr "Saisissez un nom pour la nouvelle liste de lecture:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Créer une liste de lecture..." #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s et %(count)d de plus" msgstr[1] "%(title)s et %(count)d de plus" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Listes de lecture" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Listes de lecture" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "Supp_rimer de la liste de lecture" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importer" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Impossible d'importer la liste de lecture" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "" "Quod Libet ne peut importer que des listes de lecture au format M3U ou PLS." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "Supprimer les doublons" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Mélangé" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Impossible de renommer la liste de lecture" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importer une liste de lecture" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Désactiver le navigateur" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Désactiver le navigateur" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Rechercher dans la bibliothèque" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Rechercher dans la bibliothèque" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Limiter les résultats" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Périphérique inconnu" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "E: '%s' n'est pas un préfixe unique." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: Impossible de trouver %s." #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "%s: Impossible de trouver %s." #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "Valeur non valide" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "Tentative avec '%s'" #: ../quodlibet/devices/__init__.py:421 #, fuzzy msgid "Couldn't connect to a device backend." msgstr "" "Impossible de se connecter à un gestionnaire de périphérique, désactivation " "du navigateur de Périphériques Multimédias." #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Gestionnaire de périphériques initialisé." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "Gain du _volume (dB) :" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Copier les jaquettes des _albums" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Combiner les tags à valeurs _multiples" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Le titre contient la _version" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "L'album contient la sous-titre du _disque" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modèle :" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Capacité :" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware :" #: ../quodlibet/devices/ipod.py:181 #, fuzzy msgid "Removing orphaned iPod track" msgstr "W: suppression d'une piste orpheline de l'iPod" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Impossible d'enregistrer la base de données de l'iPod" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "iPod non initialisé" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Voulez-vous créer une base de données vide sur cet iPod ?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "Impossible d importer %s. Désactivation de navigateur de flux audio." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "Motif du nom de _fichier" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "Enleve_r les jaquettes et les dossiers inutilisés" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Le fichier existe" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Écraser <b>%s</b> ?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Erreur au chargement de %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Bibliothèque" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Vérification des points de montage" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Parcours de la bibliothèque" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Parcours de %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "Le canal de sortie GStreamer utilisée pour la lecture, comme 'alsasink " "device=default'. Laisser vide pour le canal par défaut." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "Pipeline de s_ortie" #: ../quodlibet/player/gstbe.py:75 #, python-format msgid "%.1f seconds" msgstr "%.1f secondes" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Erreur de sortie" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "Impossible d'ouvrir les fichiers" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "GStreamer n'a aucun élément pour gérer la lecture de fichiers. Vérifiez " "votre installation." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "Canal de sortie GStreamer invalide, utilisation du canal pardéfaut." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "Valeur non valide" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "Le moteur audio %r n'est pas installé." #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "Impossible de créer le dossier" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Le périphérique audio %r n'a pas été trouvé. Vérifiez vos paramètres Xine " "dans ~/.quodlibet/config." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet est déjà en fonctionnement." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Il n'y a pas de chanson en cours de lecture." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet n'est pas en fonctionnement." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Impossible d'écrire le fichier %s. Suppression." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "un lecteur et une bibliothèque de musique" #: ../quodlibet.py:297 msgid "[option]" msgstr "[option]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Afficher la chanson en cours de lecture et quitter" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Commencer la lecture immédiatement" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Aller à la chanson suivante" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "Aller à la chanson précédente ou recommencer si près du début" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Aller à la chanson précédente" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Commencer la lecture" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Suspendre la lecture" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Basculer entre le mode lecture et pause" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Commencer la lecture" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Augmenter le volume" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Diminuer le volume" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Afficher l'état du lecteur" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Cacher la fenêtre principale" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Afficher la fenêtre principale" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Basculer la visibilité de la fenêtre principale" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Focaliser le lecteur en fonction" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Enlever les filtres actifs du navigateur" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Rafraîchir la bibliothèque" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Imprimer la liste de lecture" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Montrer le contenu de la file " #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "Démarrer sans greffons" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Quitter Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Se déplacer dans la chanson en cours de lecture" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Définir ou basculer d'un ordre de lecture à un autre" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Activer, désactiver ou basculer le mode répétition" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Régler le volume" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Rechercher dans votre bibliothèque de musique" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "recherche" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Lire un fichier" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "nom_de_fichier" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Noter la chanson en cours de lecture" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Définir le navigateur courant" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Démarrer un nouveau navigateur" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Montrer ou cacher la file" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Montrer ou cacher la liste principale des chansons" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtrer au hasard" #: ../quodlibet.py:340 msgid "command|tag" msgstr "etiquette" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtrer sur la valeur d'une étiquette" #: ../quodlibet.py:341 msgid "tag=value" msgstr "étiquette=valeur" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Mettre un fichier ou le résultat d'une recherche dans la file" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "nom de fichier" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Enlever un fichier ou le résultat d'une recherche de la file" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Argument non valide pour '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Essayez %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Formats supportés : %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Périphérique audio: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Début de la piste" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "Non disponible" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Temps" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Nom du signet" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Signets" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Aucun renseignement de durée" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Valeur :" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Entrées sauvegardées" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Éditer les entrées sauvegardées..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Chansons" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Montrer la durée restante" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Modifier les signets" #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "Auto_matique" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "Colonnes « _Piste »" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "Colonnes « _Album »" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Arrêter après cette chanson" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtrer sur la valeur d'une étiquette" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Une erreur est survenue" #: ../quodlibet/qltk/debugwindow.py:71 #, fuzzy, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Une exception est survenue dans Quod Libet. Un fichier de débuggage a été " "sauvé dans <b>%s</b>, il nous aidera à trouver la cause du problème. " "Veuillez remplir un rapport de bug à http://code.google.com/p/quodlibet/" "issues/list et attachez-y ce fichier ou son contenu. Ce fichier peut " "contenir certaines informations vous identifiant, telles qu'une liste de " "chansons récemment écoutées. Si ceci est inacceptable, envoyez à la place <b>" "%s</b> accompagné d'une description de ce que vous faisiez au moment où ce " "message est apparu.\n" "\n" "Quod Libet est maintenant peut-être instable. Il est recommandé de fermer et " "redémarrer l'application. Votre librairie va être sauvegardée." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Supprimer les fichiers" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Mettre à la corbeille" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Supprimer définitivement ce fichier?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Supprimer définitivement ces fichiers?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s et %(count)d de plus..." msgstr[1] "%(title)s et %(count)d de plus..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "Déplacement de %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Suppression de %(current)d/%(total)d" #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Impossible d'enregistrer la base de données de l'iPod" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "L'éjection de <b>%s</b> a échoué." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Impossible de supprimer le fichier" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "La suppression de <b>%s</b> a échoué." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Téléchargements" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Nom de fichier" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Taille" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "_File de chansons" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "motif" #: ../quodlibet/qltk/_editpane.py:83 msgid "Edit saved patterns..." msgstr "Éditer les motifs sauvegardés..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "A_perçu" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Plus d'options..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "manquant dans %d chanson" msgstr[1] "manquant dans %d chansons" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "différent parmi %d chanson" msgstr[1] "différent dans les %d chansons" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Séparer en _plusieurs valeurs" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Séparer le disque de l'_album" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Séparer la _version du titre" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Séparer l'arrangeur de l'ar_tiste" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Séparer l'intér_prète de l'artiste" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Séparer l'intér_prète de l'artiste" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Séparer la _version du titre" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Ajouter une nouvelle étiquette (\"tag\")" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "É_tiquette :" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "Enregi_strer" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 msgid "ql-revert" msgstr "" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Éditer les étiquettes" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Écrire" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Impossible d'ajouter l'étiquette" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Impossible d'ajouter <b>%s</b>\n" "\n" "Les fichiers sélectionnés actuellement ne permettent pas des valeurs " "multiples." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Étiquette non valide" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Étiquette invalide <b>%s</b>\n" "\n" "Les fichiers sélectionnés actuellement ne permettent pas l'édition de cette " "étiquette." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "L'étiquette peut ne pas être correcte" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> semble avoir été changée pendant le fonctionnement du programme. " "Sauvegarder maintenant sans réactualiser votre bibliothèque pourrait écraser " "d'autres modifications à la chanson.\n" "\n" "Sauvegarder tout de même cette étiquette?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Impossible de sauvegarder la chanson" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "La sauvegarde de <b>%s</b> a échoué. Le fichier peut être en lecture seule, " "corrompu, ou vous n'avez pas la permission de l'éditer." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Valeur non valide" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Valeur invalide: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Greffons" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d chanson" msgstr[1] "%d chansons" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Préférences d'Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Séparer _sur:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Montrer les commentaires de _programmation" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Édition d'étiquettes (\"tags\")" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Dossiers" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Nouveau dossier..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Sélectionner tous les sous-dossiers" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Nouveau dossier" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Saisissez un nom pour le nouveau dossier :" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Impossible de créer le dossier" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Impossible de supprimer le dossier" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "par %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Disque %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Piste %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Ajouter à la liste de lecture" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Éditer l'affichage des informations..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Éditer les éti_quettes" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Pas de lecture en cours" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Nettoyer les erreurs" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Aucune chanson n'est sélectionnée." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Pas de chansons" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Information" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Paroles" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Erreurs" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artiste" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artistes" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "interprètes" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Jamais" #: ../quodlibet/qltk/information.py:243 #, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%(n)d fois" msgstr[1] "%(n)d fois" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "ajoutée" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "dernière écoute" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "joué" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "sauté" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "notation" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "durée" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "taille du fichier" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "modifiée" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "débit des données" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Fichier" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d sélectionnée" msgstr[1] "%d sélectionnées" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Produit par %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "interprète" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Piste indisponible" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Liste de pistes" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d chanson sans album" msgstr[1] "%d chansons sans album" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Discographie sélectionnée" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d chanson sans artiste" msgstr[1] "%d chansons sans artiste" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "albums" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Durée totale :" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Taille totale :" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Fichiers" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Journal" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Télécharger" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Des paroles n'ont pas été trouvées pour cette chanson." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Recherche de paroles..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Impossible de télécharger des paroles." #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "Vous allez supprimer %d chanson." #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d radio" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Abandonner les modifications apportées aux étiquettes ?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Des étiquettes ont été changées, mais n'ont pas été enregistrées. " "Enregistrer ces fichiers, ou abandonner les changements?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "%d tâches en cours" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Inconnu(e)" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "Dans l'ordre" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "Dans l'_ordre" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Mélangé" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Mélangé et pondéré" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "Mélangé et _pondéré" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Une chanson" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Une chanson" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Erreurs de greffon" #: ../quodlibet/qltk/pluginwin.py:80 msgid "Plugins" msgstr "Greffons" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Montrer les _erreurs" #: ../quodlibet/qltk/pluginwin.py:259 msgid "Version:" msgstr "Version:" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Activé" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Désactivé" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Aucune catégorie" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Pas de greffon trouvé." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disque" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "Pis_te" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "groupage" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "Nom de _fichier" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "D_urée" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Liste de chansons" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Sauter à la chanson courante automatiquement" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "" "Quand la chanson jouée change, défiler jusqu'à elle dans la liste des " "chansons" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "Au_tres :" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Éditer l'affichage des informations..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Colonnes visibles" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Inclure les personnes dans la _recherche" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Le nom de _fichier contient le répertoire" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Préférences" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Navigateurs" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "Filtre _global :" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "Appliquer cette recherche avec tous les autres" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Rechercher après avoir _tapé" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Rechercher" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Confirmer les notations _multiples" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" "Demander une confirmation avant de changer la notation de plusieurs chansons " "en une fois" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Activer les n_otations en un clic" #: ../quodlibet/qltk/prefs.py:241 msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Activer la notation des chansons par un clic dans la colonne de la liste de " "chansons" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Notation" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "_Utiliser des coins arrondis pour les vignettes" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "Arrondir les coins des jaquettes d'album. Peut nécessiter un redémarrage " "pour prendre effet." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 msgid "Album Art" msgstr "Jaquettes d'Album" #: ../quodlibet/qltk/prefs.py:301 msgid "Playback" msgstr "Lecture" #: ../quodlibet/qltk/prefs.py:306 #, fuzzy msgid "Output Configuration" msgstr "Journal" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "Si aucune information de Replay Gain n'est disponible pour une chanson, " "multiplier le volume par cette valeur" #: ../quodlibet/qltk/prefs.py:320 msgid "_Fall-back gain (dB):" msgstr "Gain par _défaut (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Multiplier le volume pour toutes les chansons par cette valeur, tant que le " "résultat ne sature pas" #: ../quodlibet/qltk/prefs.py:334 msgid "_Pre-amp gain (dB):" msgstr "Gain _global (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "_Activer l'ajustement de volume par les valeurs Replay Gain" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Ajustement du volume par Replay Gain" #: ../quodlibet/qltk/prefs.py:387 msgid "Tags" msgstr "Étiquettes" #: ../quodlibet/qltk/prefs.py:392 msgid "Auto-save tag changes" msgstr "Sauvegarder les changements " #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Enregistrer la notation et le _nombre d'écoutes" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "Courri_el :" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" "La notation et le nombre d'écoutes seront enregistrés pour cette adresse " "électronique" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Nouvelle radio internet" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "Ra_fraîchir la bibliothèque au démarrage" #: ../quodlibet/qltk/prefs.py:501 msgid "Refresh Library" msgstr "Rafraîchir la bibliothèque" #: ../quodlibet/qltk/prefs.py:509 msgid "Scan Directories" msgstr " _Répertoires à scanner" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Pas de chansons" #: ../quodlibet/qltk/prefs.py:524 msgid "Preferences" msgstr "Préférences" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Propriétés" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_File de chansons" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Supprimer toutes les chansons de la queue" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Aléatoire" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Ordre :" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Répéter" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "" "Recommencer la liste de lecture après que toutes les chansons ont été jouées" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Impossible d'ajouter les chansons" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> utilise un protocole non supporté." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Musique" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Ajouter un dossier..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Ajouter un fichier..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Ajouter une adresse..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Démarrer un nouveau navigateur" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtres" #: ../quodlibet/qltk/quodlibetwindow.py:455 msgid "Recently _Played" msgstr "Récemment _Jouées" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "Récemment _Ajoutées" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Contrôle" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Aller à la chanson en cours" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "Afficha_ge" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Aide" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "J_ournal" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "_Provoquer une erreur" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Rechercher" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Ra_fraîchir la bibliothèque" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Re_charger la bibliothèque" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtrer sur ce _genre" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtrer sur cet _artiste" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filtrer sur cet al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "_Genre aléatoire" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "_Artiste aléatoire" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Al_bum aléatoire" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "_Liste de chansons" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Chercher des changements faits dans la bibliothèque" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "" "Recharger toutes les chansons de votre bibliothèque (peut durer longtemps)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "Les 40 chansons que vous avez le plus jouées (plus de 40 peuvent être " "choisies en cas d'égalité)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Ajouter un chemin" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Saisissez le chemin vers un fichier audio:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Impossible d'ajouter le chemin" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> n'est pas un chemin valide." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Ajouter de la musique" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Surveiller les modifications sur ce dossier" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "Impossible d'ajouter %s à la bibliothèque.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Impossible d'ajouter la chanson" #: ../quodlibet/qltk/ratingsmenu.py:20 #, fuzzy, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" "Vous êtes sur le point de changer la notation de %d chansons.\n" "Voulez-vous continuer?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Commande invalide (%r) reçue." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Navigateur inconnu (%r)." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Remplacer les espaces par des _soulignés" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Remplacer les caractères incompatibles avec _Windows" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Enlever les signes _diacritiques" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Remplacer les caractères non-_ASCII" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "Utiliser uniquement des caractères minuscules" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Renommer les fichiers" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Nouveau nom" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "Ignorer _toutes les erreurs" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Continuer" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Impossible de renommer le fichier" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Le renommage de <b>%s</b> en <b>%s</b> a échoué. Il se peut que le fichier " "destination existe déjà, ou que vous n'ayez pas la permission de créer le " "nouveau fichier ou de supprimer l'ancien." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Le chemin n'est pas absolu" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Le motif\n" "\t<b>%s</b>\n" "contient / mais ne commence pas à la racine. Pour éviter des répertoires mal " "nommés, enracinez votre motif en le commençant par le répertoire / ou le " "répertoire ~/." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Les chansons placées dans ces répertoires (séparées par ':') seront\n" "ajoutées à votre bibliothèque" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Choisir des répertoires" #: ../quodlibet/qltk/searchbar.py:46 msgid "Saved Searches" msgstr "Recherches sauvegardées" #: ../quodlibet/qltk/searchbar.py:47 msgid "Edit saved searches..." msgstr "Editer les recherches sauvegardées..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Rechercher" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limite:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Pondéré" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtrer sur %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "Colonnes « _Album »" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Colonnes « _Piste »" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "Colonnes « _Album »" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "Colonnes « Ar_tistes »" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Colonnes « _Date »" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Colonnes « _Fichier »" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "Colonnes « _Production »" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Configurer les colonnes..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Configurer les colonnes..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "A_jouter à la file" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Copier sur le périphérique" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "Supp_rimer de la liste de lecture" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "Colonnes « _Piste »" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "Colonnes « Ar_tistes »" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "Colonnes « _Album »" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "Colonnes « _Date »" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "Colonnes « _Fichier »" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "Colonnes « _Production »" #: ../quodlibet/qltk/sortdialog.py:67 msgid "Tag:" msgstr "É_tiquette :" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Autre" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Remplacer les so_ulignés par des espaces" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "Mettre une _majuscule aux valeurs résultantes" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Séparer en plusieurs _valeurs" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Étiquettes par chemin" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Les étiquettes remplacent celles existantes" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Les étiquettes sont ajoutées à celles existantes" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Le motif\n" "\t<b>%s</b>\n" "n'est pas valide. Il peut contenir deux fois la même étiquette ou des " "parenthèses sans correspondance (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Étiquettes non valides" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Étiquettes invalides <b>%s</b>\n" "\n" "Les fichiers sélectionnés actuellement ne permettent pas l'édition de ces " "étiquettes." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Impossible d'éditer la chanson" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Le motif entré est invalide. Assurez-vous d'avoir entré < et > comme " "\\< et \\> et que vos balises sont bien balancées.\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Éditer l'affiche des informations" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Trop d'erreurs" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Arrêt de la lecture suite à %d erreurs successives." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Numéros de pistes" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Com_mencer à:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "Nombre _total de pistes :" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Piste" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "et %d de plus..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Sauvegarde des chansons que vous avez modifiées." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d chansons sauvées\n" "(%(remaining)s restantes)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d sur %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Effacer la chaîne de recherche" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Une liste de lecture appelée %s existe déjà." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 #, fuzzy msgid "D: " msgstr "A:" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "A:" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Avertissements" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "E: " #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Afficher des informations d'utilisation succinctes " #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Afficher la version et le copyright" #: ../quodlibet/util/__init__.py:142 #, python-format msgid "Usage: %s %s\n" msgstr "Utilisation: %s %s\n" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[options]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "L'option %r n'est pas reconnue." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "L'option %r nécessite un argument" #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r n'est pas un préfixe unique." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Codage invalide]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "no_capitalize" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "Aucun journal disponible" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "La date doit être saisie au format 'AAAA', 'AAAA-MM-JJ' ou 'AAAA-MM-JJ HH:MM:" "SS'." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Les gains ReplayGain doivent être saisis au format « x.yy dB »." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Les pics ReplayGain doivent être saisis au format 'x.yy'." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "" "Les identificateurs de pistes MusicBrainz doivent être dans le format UUID." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "Le statut de publication MusicBrainz doit être « official » (officiel), " "« promotional » (promotionnel) ou « bootleg » (illégal)." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "La langue doit être au format ISO 639-2 avec trois caractères" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "arrangeur" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "auteur" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "compositeur" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "chef d'orchestre" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "contact" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "date" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "description" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "genre" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "groupage" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "langue" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licence" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "endroit" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "parolier" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organisation" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "titre" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "version" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "site web" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "Artiste de l'album" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "sous-titre du disque" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disque" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "piste" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "numéro catalogue" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "date de première publication " #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "Nom de la première édition " #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "Artiste (première édition)" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "date d'enregistrement " #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "pays de publication" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "Artiste de l'album" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "artistes" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "Artiste de l'album" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "interprètes" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "interprètes" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "Identifiant MusicBrainz - piste " #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "Identifiant MusicBrainz - piste " #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "Identifiant MusicBrainz - artiste" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "Identifiant MusicBrainz - artiste (album)" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "Identifiant MusicBrainz - trm" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "Identifiant MusicBrainz - puid" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "Statut MusicBrainz de l'album" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "Type MusicBrainz de l'album" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "gain pour la piste" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "pic de la piste" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "gain pour l'album" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "pic de l'album" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Préférences" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "disques" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "pistes" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "dernier lancement" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "chemin complet" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "point de montage" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "erreurs" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "personnes" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "année" #: ../quodlibet/util/tags.py:111 msgid "original release year" msgstr "année de première publication " #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "signet" #: ../quodlibet/util/tags.py:115 msgid "file format" msgstr "format de fichier" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "paroliers" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "arrangeurs" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "compositeurs" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "chefs d'orchestre" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "auteurs" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d seconde" msgstr[1] "%d secondes" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minute" msgstr[1] "%d minutes" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d heure" msgstr[1] "%d heures" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d jour" msgstr[1] "%d jours" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d année" msgstr[1] "%d années" #~ msgid "_Browse Library" #~ msgstr "_Parcourir la bibliothèque" #~ msgid "Do you wish to continue?" #~ msgstr "Voulez-vous continuer?" #~ msgid "Confirm playlist removal" #~ msgstr "Confirmez la suppression de la liste de lecture" #, fuzzy #~ msgid "Confirm duplicates removal" #~ msgstr "Confirmez la suppression de la liste de lecture" #~ msgid "No eject command found." #~ msgstr "Pas de commande d'éjection trouvée." #~ msgid "Unable to start web browser" #~ msgstr "Impossible de lancer un navigateur web" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Aucun navigateur web n'a pu être trouvé. Veuillez positionner votre " #~ "variable $BROWSER, ou assurez-vous de l'existence de /usr/bin/sensible-" #~ "browser." #~ msgid "Library Error" #~ msgstr "Erreur de bibliothèque" #, fuzzy #~ msgid "_Output device:" #~ msgstr "Pipeline de s_ortie" #~ msgid "translator-credits" #~ msgstr "" #~ "Joshua Kwan <joshk@triplehelix.org>\n" #~ "kwikwi <kwiskas@gmail.com>\n" #~ "fab <fab@gnux.info>\n" #~ "Bastien Gorissen <kadomony@gmail.com>\n" #~ "Nick Boultbee <nick.boultbee@googlemail.com>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "" #~ "Listez les autres en-têtes que vous voulez voir affichés, séparées par " #~ "des espaces" #~ msgid "_Edit and Continue" #~ msgstr "Éditer et Continuer" #, fuzzy #~ msgid "You are about to change the rating of %d song." #~ msgid_plural "You are about to change the rating of %d songs." #~ msgstr[0] "" #~ "Vous êtes sur le point de changer la notation de %d chanson.\n" #~ "Voulez-vous continuer?" #~ msgstr[1] "" #~ "Vous êtes sur le point de changer la notation de %d chansons.\n" #~ "Voulez-vous continuer?" #~ msgid "Confirm rating" #~ msgstr "Vérifier notation" #~ msgid "_Search:" #~ msgstr "_Rechercher :" #~ msgid "Search your library" #~ msgstr "Rechercher dans votre bibliothèque de musique" #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "Ce programme est un logiciel libre ; veuillez voir la source pour les\n" #~ "conditions de duplication. Il n'y a PAS de garantie; même pour la\n" #~ "COMMERCIALISATION ou L'APTITUDE À UN OBJET PARTICULIER.\n" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r ne contient aucun navigateur." #~ msgid "Total size unknown" #~ msgstr "Taille totale inconnue" #~ msgid "%r doesn't contain any devices." #~ msgstr "%r ne contient aucun périphérique." #~ msgid "Quod Libet Plugins" #~ msgstr "Greffons de Quod Libet" #~ msgid "Quod Libet Preferences" #~ msgstr "Préférences de Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "Pas jouée aujour_d'hui" #~ msgid "Not Played in a _Week" #~ msgstr "Pas jouée depuis une _semaine" #~ msgid "Not Played in a _Month" #~ msgstr "Pas jouée depuis un _mois" #~ msgid "B_ottom 40" #~ msgstr "Fl_op 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "Les 40 chansons que vous avez le moins jouées (plus de 40 peuvent être " #~ "choisies en cas d'égalité)" #~ msgid "Color _search terms" #~ msgstr "Colorer les terme_s de recherche" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Afficher les recherches simples en bleu, les avancées en vert, et les " #~ "invalides en rouge" #~ msgid "_Select" #~ msgstr "_Choisir" #~ msgid "Separators for splitting tags" #~ msgstr "Séparateurs pour la séparation des étiquettes (\"tags\")" #, fuzzy #~ msgid "Display" #~ msgstr "Éditer l'affiche des informations" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | contrôle ]" #~ msgid "Artist" #~ msgstr "Artiste" #~ msgid "Date" #~ msgstr "Date" #~ msgid "Choose New Stations" #~ msgstr "Choisir des nouvelles radios Internet" #~ msgid "Add" #~ msgstr "Ajouter" #, fuzzy #~ msgid "Bitrate" #~ msgstr "Débit des données" #~ msgid "_Stations..." #~ msgstr "_Radios internet..." #~ msgid "Quod Libet" #~ msgstr "Quod Libet" #~ msgid "Initializing audio backend (%s)" #~ msgstr "Initialisation du moteur audio (%s)" #~ msgid "Initializing main library (%s)" #~ msgstr "Initialisation de la librairie (%s)" #~ msgid "Unable to save library" #~ msgstr "Impossible d'enregistrer la bibliothèque de données." #~ msgid "" #~ "The audio output pipeline %r could not be created. Check your GStreamer " #~ "settings in ~/.quodlibet/config." #~ msgstr "" #~ "Le canal de sortie %r n'a pas pu être créée. Vérifiez vos paramètres " #~ "GStreamer dans ~/.quodlibet/config." #~ msgid "_Information" #~ msgstr "_Information" #~ msgid "Sort by title" #~ msgstr "Tri par titre" #~ msgid "Sort by artist" #~ msgstr "Tri par artiste" #~ msgid "Lyrics provided by %s." #~ msgstr "Paroles fournies par %s" #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Des paroles n'ont pas été trouvées.\n" #~ "\n" #~ "Vous pouvez appuyer le bouton Télécharger pour faire une recherche de " #~ "paroles en ligne. Vous pouvez aussi saisir les paroles vous-même et " #~ "appuyer 'Enregistrer'." #~ msgid "Output pipeline could not be initialized." #~ msgstr "Le canal de sortie n'a pas pu être initialisée." #~ msgid "part" #~ msgstr "partie" #~ msgid "Opening audio device." #~ msgstr "Ouverture du périphérique audio." #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d chansons sauvegardées" #~ msgid "MusicBrainz album ID" #~ msgstr "Identifiant MusicBrainz - album" #~ msgid "Loaded song library." #~ msgstr "Bibliothèque de chansons chargée." #~ msgid "Unable to open audio device" #~ msgstr "Impossible d'ouvrir la périphérique audio" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet a essayé d'accéder aux pilotes 'autosink' et '%(sink)s' mais " #~ "aucun n'a pu être ouvert. Définissez votre canal GStreamer en changeant " #~ "la ligne\n" #~ "<b>pipeline = %(sink)s</b>\n" #~ " dans ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet n'a pas pu trouver l'élément 'filesrc' de GStreamer. Vérifiez " #~ "votre installation de GStreamer." ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/gl_ES.po�������������������������������������������������������������������������0000644�0001750�0001750�00000274672�12173213426�015724� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Ex Falso / Quod Libet's galician (RAG) translation. # Copyright (C) 2005 - 2010, Johám-Luís MIguéns Vila <galiza.ceive@gmail.com>, 2010. # This file is distributed under the same license as the Ex Falso / Quod Libet package. # msgid "" msgstr "" "Project-Id-Version: Ex Falso / Quod Libet SVN\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:34+0100\n" "Last-Translator: Johám-Luís Miguéns Vila <galiza.ceive@gmail.com>\n" "Language-Team: Galician\n" "Language: gl_ES\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-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Editor de etiquetas de música" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Edita as etiquetas dos teus arquivos de música" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Reproductor de música" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Escoita, examina ou edita a túa colección de música" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Reproductor" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "Seguinte" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Antever" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "un editor de etiquetas de música" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "cartafol" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "Imposíbel carregar o arquivo: %r" #: ../operon.py:114 msgid "List tags" msgstr "Mostrar as etiquetas" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "Mostrar a saída para depuración" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "Colunas e orde para mostralas no modo depuración (%s)" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Mostrar mensaxes de depuración" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "Sen argumentos dabondo" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Demasiados erros" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "descrición" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Valor" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Etiqueta" #: ../operon.py:152 msgid "List all common tags" msgstr "Mostrar todas as etiquetas habituais" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "Mostrar todas as etiquetas na saída estándard" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "Mostrar as etiquetas arroxadas por 'dump'" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "Mostrar as mudanzas, sen aplicalas" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "Saltar as etiquetas que nom se poidan escreber" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "Copiar as etiquetas dun arquivo a outro" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "Non se puido copiar a etiqueta %r ao arquivo: %r" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Editor de etiquetas de música" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "Estabelece unha etiqueta e elimina os valores existentes" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "Non se puido estabelecer %r" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "Eliminar duplicados" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "O valor é unha expresión regular" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Eliminar duplicados" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "Non se pode combinar '--all' con '--regexp'" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "Non se pode eliminar %r de %r" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filtrar nun valor da etiqueta" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filtrar nun valor da etiqueta" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Non consta a duración" #: ../operon.py:488 msgid "Extract embedded images" msgstr "Extraer as imaxes incrustadas" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "Mudar o nome dos arquivos baseándose nas etiquetas" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "Crear as etiquetas baseándose na rota ao arquivo" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "Crear os números de pista para todos os arquivos" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "Mostrar as etiquetas coincidentes co padrón indicado" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Amosar indicacións sumarias sobre o modo de utilización" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> non é un enderezo válido." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Cancións sen álbum" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Preferencias da lista de álbuns" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Amosar as _portadas dos álbuns" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "A procura _inclúi os componentes" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Vista de álbuns" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d pista" msgstr[1] "%d pistas" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disco" msgstr[1] "%d discos" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Padrón inválido" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Título" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artista" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Data" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "Estilo" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Puntuación" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Ordenar _por:" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Preferencias" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Lista de álbuns" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Lista de álbuns" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Todos os álbuns" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d álbum" msgstr[1] "%d álbuns" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Amosar as _portadas dos álbuns" msgstr[1] "Amosar as _portadas dos álbuns" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Descoñecido" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Nova fonte" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Insire o enderezo dunha fonte de audio (feed)" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Fontes de audio" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Fontes de audio" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Baixar..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Baixar os arquivos" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Baixar o arquivo" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Non se puido engadir a fonte" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "Non foi posíbel engadir <b>%s</b>. Pode ser que o servidor estea caído ou\n" "que o enderezo introducido non sexa o dunha fonte de audio (feed)." #: ../quodlibet/browsers/audiofeeds.py:495 #, fuzzy, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" "Non se puido importar o python-feedparser. Desactivóuse o navegador de " "fontes (feeds)." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "A infraestrutura de audio activada non soporta URLs. Desactivóuse o " "navegador de fontes (feeds)." #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Navegador da colección" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d canción (%(time)s)" msgstr[1] "%(count)d cancións (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Descoñecido" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Extraer valores múltiplos" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Personalizada" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "Xuntar" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Preferencias da lista de álbuns" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "Colección de álbuns" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "_Colección de álbuns" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Sistema de arquivos" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Sistema de arquivos" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Non se puideron copiar as cancións" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Os arquivos seleccionados non se puideron copiar a outra lista ou á fileira." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Engadir á colección" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Tipo de arquivo non admitido" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "As listas de emisoras só poden conter enderezos de emisoras, non outras " "listas de emisoras nen listas de reproducción. Os seguintes enderezos non se " "puideron cargar:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Non se puido engadir a emisora" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Radio por Internet" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Baixar os arquivos" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Nova emisora" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Insire o enderezo dunha emisora de radio por Internet:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "Electrónica" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "Hip Hop / Rap" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "Éxitos antigos" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "R&B" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "Xaponesa" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "India" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "Relixiosa" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "Éxitos" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "Turca" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "Reggae / Baile" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "puntuación" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "Radio universitaria" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "Faladoiro / Novas" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "Ambiente" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "Jazz" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "Clásica" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "Pop" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "Alternativa" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "Metal" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "Country" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "Novas" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "Schlager" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "Funk" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "Indie" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "Blues" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "Soul" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "Lounge" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "Punk" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "Reggaeton" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "Eslava" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "Grega" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "Gótica" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "Rock" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Radio por Internet" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Nova emisora" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Nova emisora" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Nova emisora" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "Preferidos" #: ../quodlibet/browsers/iradio.py:528 #, fuzzy msgid "No Category" msgstr "Sen categoría" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Non se atoparon emisoras" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Non se atoparon emisoras de radio por Internet en %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Todas as emisoras relacionadas xa están na túa colección." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Eliminar da lista" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "Engadir á _lista" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d emisora" msgstr[1] "%(count)d emisoras" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Propiedades do dispositivo" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Dispositivo:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Sen montar" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Ponto de montaxe:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Nome:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Dispositivos externos" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Dispositivos externos" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Expulsar" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "Muda_r o nome" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "Utilizado <b>%s</b>, disponíbel <b>%s</b>" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "Non se puido copiar <b>%s</b>." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "A copiar <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Non se puido copiar a canción" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Non hai espazo libre dabondo para esa canción." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "Non se puido copiar <b>%s</b>." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Non foi posíbel eliminar as cancións" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "A eliminar <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "Non se puido eliminar <b>%s</b>." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Non foi posíbel eliminar a canción" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Erro ao expulsar <b>%s</b>." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Non foi posíbel expulsar o dispositivo" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" "Sen infraestrutura de dispositivos. O navegador de dispositivos foi " "desactivado." #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Preferencias da vista por paneis" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Todo" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Vista por paneis" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Vista por paneis" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Seleccionar _todo" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "A importar a lista de reproducción.\n" "\n" "%(current)d/%(total)d cancións engadidas." #: ../quodlibet/browsers/playlists.py:108 #, fuzzy, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "Estás a piques de eliminar a lista <i>%s</i>.\n" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" "Toda a información sobre a lista seleccionada váise eliminar e non se poderá " "repor." #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "As cancións duplicadas serán eliminadas da lista '%s'." #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Nova lista" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Insire un nome para o novo cartafol" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Nova lista" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s e %(count)d máis" msgstr[1] "%(title)s e %(count)d máis" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Listas" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Listas" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Eliminar da lista" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importar" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Non se puido importar a lista de reproducción" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "O Quod Libet só pode importar listas nos formatos M3U e PLS." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "Eliminar duplicados" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Barallar" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Non se puido mudar o nome da lista" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importar lista" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Desactivar o navegador" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Desactivar o navegador" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Procurar na colección" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Procurar na colección" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Limitar os resultados" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Dispositivo descoñecido" #: ../quodlibet/devices/__init__.py:19 #, fuzzy, python-format msgid "Could not import %s, which is needed for device support." msgstr "" "Non se puido importar o dbus-python, necesario para o soporte de " "dispositivos." #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "%r non é un dispositivo admitido." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: Non se puido atopar o media-player-info." #: ../quodlibet/devices/__init__.py:212 #, fuzzy, python-format msgid "%s: Could not find %s." msgstr "%s: Non se puido atopar o media-player-info." #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "A activar a infraestrutura de dispositivos." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "A tentar '%s'" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "Non se puido conectar a unha infraestrutura de dispositivos." #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Infraestrutura de dispositivos activa." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "Ganancia de _volume (dB)" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Copiar as _portadas dos álbuns" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Combinar as etiquetas con valores múltiples" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "O título inclúe a _versión" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "O álbum inclúe a _parte" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modelo:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Capacidade:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "A eliminar ficheiros orfos do iPod" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Non se puido gardar a base de datos do iPod" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "iPod sen configurar" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Ques crear unha base de datos baleira no iPod?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "" "Non se puido importar a biblioteca python-gpod. Desactivóuse a interacción " "co iPod." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Padrón do nome do arquivo:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Eliminar portadas e cartafoles non utilizados" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "O arquivo existe" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Sobreescreber <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "Erro ao ler a portada \"%s\"" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Erro ao cargar %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Colección" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "A comprobar os pontos de montaxe" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "A analisar a colección" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "A analisar %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "A saída do GStreamer utilizada para a reproducción, e.g. 'alsasink " "device=default'.\n" "Deixa-o en branco para utilizar a predeterminada." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "Infraestrutura de _saída:" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d segundo" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "Duración do _buffer:" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "Stream" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "A encher o buffer" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Saída do erro" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "A saída do GStreamer non se puido activar. Pode ser que non sexa válida ou\n" "que o dispositivo estea a ser utilizado. Verifica a configuración do " "reproductor." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Non se puideron abrir os arquivos seleccionados" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "O GStreamer non dispón de ningún elemento para ler arquivos. \n" "Verifica as opcións de instalación do GStreamer." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "Saída do GStreamer inválida, tentaráse a predeterminada." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "Non se puido crear a pipeline predefinida do GStreamer" #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "A infraestrutura de son non é válida" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "A infraestrutura de son %r non está instalada" #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Non se puido crear a saída de audio" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Non se atopou o dispositivo de son %r. Verifica as opcións do Xine en ~/." "quodlibet/config." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "O Quod Libet xa se está a executar" #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Non se está a reproducir ningunha canción" #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "O Quod Libet non se está a executar." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Non foi posíbel escribir a %s. Eliminándoo." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "un xestor de música e reproductor de son" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[opcións]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Amosa a canción que se está a reproducir" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Comezar a tocar inmediatamente" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Ir á canción seguinte" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" "Ir á canción anterior ou, de estarmos próximos ao inicio, recomezar a " "presente" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Ir á canción anterior" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Comezar a reproducción" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Parar a reproducción" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Alternar entre tocar e parar" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Comezar a reproducción" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Aumentar o volume" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Diminuir o volume" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Amosar o estado da reproducción" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Agochar a fiestra principal" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Amosar a fiestra principal" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Alternar entre mostrar ou non a fiestra principal" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Centrarse no reproductor activo" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Eliminar os filtros de navegación activos" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Reler e actualizar a colección" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Amosar a lista de reproducción activa" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Amosar o contido da fileira " #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "Comezar sen extensións" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Saír do Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Avanzar na canción activa" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Configurar ou alternar a orde de reproducción" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Activar ou desactivar o modo de repetición" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Axustar o volume" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Procurar na colección de música" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "procura" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Reproducir un arquivo" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "arquivo" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Puntuar a canción actual" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Configurar o navegador activo" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Abrir un novo navegador" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Amosar ou agochar a fileira" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Amosar ou agochar a lista de reproducción" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtrar nun valor aleatorio" #: ../quodlibet.py:340 msgid "command|tag" msgstr "etiqueta" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtrar nun valor da etiqueta" #: ../quodlibet.py:341 msgid "tag=value" msgstr "etiqueta=valor" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Pór un arquivo ou unha procura na fileira" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "Engadir á fileira os arquivos (separados por comas)" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "nome" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "Mostrar os resultados da procura na saída estándard" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Tirar da fileira un ficheiro ou unha procura" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Argumento inválido para '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Proba %s --help" #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Formatos admitidos: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Dispositivo de son: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Comezo" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/D" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Intre" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Nome do marcador" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Marcadores" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Non consta a duración" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Valor:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Valores gardados" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Editar os valores gardados..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Cancións" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Amosar o tempo restante" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Editar os marcadores..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "Auto_mática" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "_Cabeceiras da pista" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "Cabeceiras do á_lbum" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Parar despois desta canción" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtrar nun valor da etiqueta" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Producíuse un erro" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Ocorreu un erro no Quod Libet. Gardóuse un arquivo de depuración en <b>%s</" "b> que nos axudará a analizar o problema. \n" "Por favor crea un novo asunto en http://code.google.com/p/quodlibet/issues/" "list e inclue dito arquivo ou o seu contido. \n" "Ese ficheiro pode conter información do teu sistema, como a lista das " "cancións reproducidas recentemente. \n" "Se non o consideras aceptábel, envía no seu lugar <b>%s</b> coa descrición " "do que estabas a facer." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" "Pode ser que o QuodLibet estea inestábel. É recomendábel fechálo e " "reiniciálo. Gardaráse a colección." #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Eliminar os arquivos" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Mover para o lixo" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Eliminar este arquivo?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Eliminar estes arquivos?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s e %(count)d máis..." msgstr[1] "%(title)s e %(count)d máis..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "A mover %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "A eliminar %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Non se puido gardar a base de datos do iPod" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Erro ao expulsar <b>%s</b>." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Non se puido eliminar o arquivo" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Erro ao eliminar <b>%s</b>." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Descargas" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Nome" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Tamaño" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "Na fileira" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "patrón" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Editar os valores gardados..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Antever" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Máis opcións..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "non se atopou de %d canción" msgstr[1] "non se atopou de %d cancións" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "diferente en %d canción" msgstr[1] "diferente en %d cancións" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Extraer valores múltiplos" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Extraer o disco do _álbum" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Extraer a _versión do título" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Extraer o arranxista do a_rtista" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Extraer o intér_prete do artista" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Extraer o intér_prete do artista" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Extraer a _versión do título" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Engadir unha etiqueta" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Etiqueta" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "Gardar" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "_Eliminar da colección" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Editar etiquetas" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Gardar" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Non se puido engadir a etiqueta" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Non se puido engadir <b>%s</b>\n" "\n" "Os arquivos seleccionados non admiten valores múltiples." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Etiqueta inválida" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Etiqueta inválida: <b>%s</b>\n" "\n" "Os ficheiros seleccionados non permiten a edición desa etiqueta." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "A etiqueta pode non ser correcta" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "Mentres o programa estaba a ser executado <b>%s</b> mudou. Gardar sen " "actualizar a colección podería eliminar outras modificacións na canción.\n" "\n" "Gardar a canción de todos xeitos?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Non se puido gardar a canción" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Erro ao gardar <b>%s</b>. Pode ser que o arquivo sexa de só lectura, estea " "corrompido ou que non teñas permisos para editalo." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Valor inválido" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Valor inválido: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Extensións" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d canción" msgstr[1] "%d cancións" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Preferencias do Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "E_xtraer por::" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Mostrar mensaxes de depuración" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Edición de etiquetas" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Cartafoles" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Novo cartafol..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Seleccionar todos os cartafoles subordinados" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Novo cartafol" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Insire un nome para o novo cartafol" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Non se puido crear o cartafol" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Non se puido eliminar o cartafol" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "por %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Disco %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Pista %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "Engadir á _lista" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Editar vista..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Editar as e_tiquetas" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Sen reproducción" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Limpar os erros" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Non foi seleccionada ningunha canción." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Sen cancións" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Información" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Letra" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Erros" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artista" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artistas" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "intérpretes" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Nunca" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d vez" msgstr[1] "%d veces" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "engadida" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "última vez tocada" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "contador" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "saltada" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "puntuación" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "duración" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "tamaño" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "modificada" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitrate" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Arquivo" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d seleccionada" msgstr[1] "%d seleccionadas" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Producido por %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "intérprete" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Pista non disponíbel" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Lista de pistas" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d canción sen álbum" msgstr[1] "%d cancións sen álbum" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Discografía seleccionada" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d canción sen artista" msgstr[1] "%d cancións sen artista" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "álbuns" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Duración total:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Tamaño total:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Arquivos" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Rexistro da saída" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Baixar" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Non se atopou a letra desta canción." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "A procurar a letra da canción..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Non se puido baixar a letra." #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "" "Estás a piques de mudar a puntuación de %d cancións.\n" "Desexas continuar?" #: ../quodlibet/qltk/maskedbox.py:18 #, fuzzy msgid "The selected songs will be removed from the library." msgstr "As cancións duplicadas serán eliminadas da lista '%s'." #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d emisora" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Descartar as modificacións nas etiquetas?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "As etiquetas mudaron pero non se gardaron. Gardar os arquivos ou descartar " "as mudanzas?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "Tarefas activas" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "Número de tarefas activas: %d" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Descoñecido" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "En orde" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_En orde" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Barallar" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Dinámica" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Dinámica" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Unha canción" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Unha canción" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Erros nas extensións" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Extensións" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Mostrar os _erros" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "versión" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Activado" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Desactivado" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Sen categoría" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Non se atoparon extensións." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disco" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Pista" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "agrupación" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Ál_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Nome" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Duración" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Lista de cancións" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Ir á canción reproducida automaticamente" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "Ao mudar a canción reproducida, rolar cara ela na lista" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "Comportamento" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Outras:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Editar vista..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "Engadir ou eliminar colunas de información adicional" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Colunas visíbeis" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "A procura _inclúi os componentes" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "O nome inclúe o carta_fol" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Preferencias" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" "Aplicar a configuración actual á lista, engadindo as novas colunas ao final" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "Colunas adicionais" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Navegadores" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "Filtro _global:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "Aplicar esta procura engadíndoa ás demais" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "_Procurar despois de escreber" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "Mostrar os resultados despois de rematar de escreber" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Procurar" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Confirmar a puntuación _múltipla" #: ../quodlibet/qltk/prefs.py:236 #, fuzzy msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" "Obter confirmación antes de mudar as puntuacións de varias cancións á vez" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Activar as puntuacións c_un click" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Posibilitar a mudanza das puntuacións ao facer click na coluna de puntuacións" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Puntuacións" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "_Empregar cantos redondeados nas miniaturas" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "Redondear os cantos das miniaturas das portadas. Pode requirir reiniciar a " "aplicación." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "Preferir as portadas _incrustadas" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" "Escoller utilizar as portadas incrustadas no ficheiro de audio (de estaren " "disponíbeis) antes que doutras fontes" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "_Forzar o nome do arquivo de imaxe" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "O nome de ficheiro da imaxe da portada para usar forzosamente" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Lista de álbuns" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Parar a reproducción" #: ../quodlibet/qltk/prefs.py:306 #, fuzzy msgid "Output Configuration" msgstr "Rexistro da saída" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "De non existir información sobre o axuste Replay Gain para a canción, " "multiplicar o volume por este valor" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "Ganancia por defecto (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Multiplicar o volume de todas as cancións por este valor, sempre que non se " "produzan cortes" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "Ganancia de _volume (dB)" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "_Activar o axuste do Replay Gain" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Axuste do Replay Gain" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Editar etiquetas" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Descartar as modificacións nas etiquetas?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" "Gardar as mudanzas nas etiquetas sen solicitar confirmación individual ao se " "editaren varios arquivos" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" "Acceder a todas as etiquetas, mesmo a aquelas xeradas automaticamente, p.ex. " "as etiquetas MusicBrainz ou ReplayGain" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" "Relación de separadores para seren empregados ao extraer os valores das " "etiquetas. A lista está separada por espazos." #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" "Factor de media _Bayesiana (C) para as puntuacións acumuladas.\n" "0 significa unha media convencional, valores máis elevados significan que " "álbuns \n" "con poucas pistas terán menor puntuación extrema. Mudar este valor executa " "un recálculo \n" "para todos os álbuns." #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "Cantidade de media _Bayesiana:" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Gardar as puntuacións e o _contador" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Correo-e:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" "Determinaránse as calificacións e o contador para este enderezo de correo-e" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Nova emisora" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "_Actualizar a colección ao iniciar" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "Actualizar a colección" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Analisar os _cartafoles" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Sen cancións" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Preferencias" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Propiedades" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Fileira" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Eliminar todas as cancións da fileira" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Aleatorio" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Orde:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Repetición" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Comezar de novo a lista de reproducción ao rematar" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Non se puideron engadir as cancións" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> utiliza un protocolo non admitido." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Música" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Engadir un cartafol..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Engadir un arquivo..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Engadir un enderezo..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Abrir un novo navegador" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtros" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Nunca tocadas" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "Engadidas _recentemente" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Principais 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Control" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Ir á canción reproducida" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Ver" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Axuda" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "_Registro de saída" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "_Provocar un erro" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "Axuda en Internet" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Procurar" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Actualizar a colección" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Reler a colección" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtro no _estilo" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtro no _artista" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filtro no ál_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Estilo _aleatorio" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Ar_tista aleatorio" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Ál_bum aleatorio" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Lista de can_cións" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Escrutar por modificacións na colección de música" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "" "Cargar de novo todas as cancións da colección (pode levar moito tempo, hora " "de prepararse un cafe?)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "As 40 cancións máis tocadas (aparecerán máis de corenta se hai cancións " "tocadas o mesmo número de veces)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Engadir un enderezo" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Insire o enderezo dun arquivo de música:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Non se puido engadir o enderezo" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> non é un enderezo válido." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Engadir música" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Escrutar este cartafol á procura de novas cancións" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s non se puido engadir á colección.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Non se puido engadir a canción" #: ../quodlibet/qltk/ratingsmenu.py:20 #, fuzzy, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" "Estás a piques de mudar a puntuación de %d cancións.\n" "Desexas continuar?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "Mudaráse a puntuación de todas as cancións seleccionadas a '%s'" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Recibíuse o comando %r, que non é válido." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "Erro ao se executar o comando %r, causado por: %r." #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Navegador descoñecido %r." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Substituír os espazos por trazos _baixos" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Eliminar os caracters non compatíbeis co _Windows(tm)" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Eliminar as marcas diacríticas" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Eliminar os caracteres non-_ASCII" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "Empregar unicamente caracteres de caixa-_baixa" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Mudar o nome dos arquivos" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Novo nome" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "Ignorar todos os _erros" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Continuar" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Non se puido mudar o nome do arquivo" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Erro ao mudar o nome de <b>%s</b> a <b>%s</b>. Pode ser que o arquivo de " "destino xa exista\n" "ou que non teñas permisos para crear o novo ou eliminar o antigo." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "O enderezo non é absoluto" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "O patrón\n" "\t<b>%s</b>\n" "contén / pero non comeza na raíz (/). Para evitar cartafoles mal indicados, " "comeza o teu padrón por / ou ~/" #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "As cancións que se atopen neses cartafoles (separados por ':') engadiránse á " "colección" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Seleccionar cartafoles" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Valores gardados" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Editar os valores gardados..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Procurar" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "Procurar na colección, empregando texto ou procuras QL" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limite:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Importancia" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtrar por %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "Cabeceiras do á_lbum" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_Cabeceiras da pista" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "Cabeceiras do á_lbum" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "Cabeceiras dos _componentes" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Cabeceiras da _data" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Cabeceiras do _arquivo" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "Cabeceiras de p_rodución" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Personalizar as cabeceiras..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Personalizar as cabeceiras..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Engadir á _fileira" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Copiar ao dispositivo" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Eliminar da lista" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "_Cabeceiras da pista" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "Cabeceiras dos _componentes" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "Cabeceiras do á_lbum" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "Cabeceiras da _data" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "Cabeceiras do _arquivo" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "Cabeceiras de p_rodución" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Etiqueta" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "Ascendente" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "Descendente" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Personalizada" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Substituir os trazos _baixos por espazos" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Maiúsculas nas etiquetas (title-case)" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Extraer valores _múltiplos" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Etiquetas a partires do enderezo" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "As etiquetas reemprazan ás anteriores" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "As etiquetas engádense ás anteriores" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "O patrón\n" "\t<b>%s</b>\n" "non é válido. Pode que conteña a mesma etiqueta dúas veces ou que teña " "parénteses ou chaves desaxustadas (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Etiquetas inválidas" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Etiquetas inválidas <b>%s</b>\n" "\n" "Os arquivos seleccionados non permiten a edición das etiquetas." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Non se puido editar a canción" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "O patrón que introduciches era inválido. Asegúrate de que insires < e " "> como \\< e \\> e que as etiquetas están equilibradas.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Editar a vista" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Demasiados erros" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "A deter a reproducción por se sucederon %d erros seguidos." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Números de pista" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Comezar de_nde:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "Pistas _totais:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Pista" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "e %d máis..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "A gardar as cancións modificadas." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d cancións gardadas\n" "(restan %(remaining)s)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d de %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Limpar a procura" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Xa existe unha lista chamada %s." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 #, fuzzy msgid "D: " msgstr "A:" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "Debug" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "A:" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Advertencias" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "E:" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Amosar indicacións sumarias sobre o modo de utilización" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Amosar a versión e o copyright" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Utilización: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[opcións]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Non se recoñeceu a opción %r." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "A opción %r require un argumento." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r non é un prefixo único." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Codificación inválida]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "Sen title-case en galego" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "Xeral" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "Sen rexistros" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "A data há ser inserida nos formatos 'YYYY', 'YYYY-MM-DD' ou 'YYYY-MM-DD HH:" "MM:SS'." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "As ganancias do Replay Gain han ser inseridas no formato 'x.yy dB'." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Os limites do Replay Gain han ser inseridos no formato 'x.yy'." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "Os ID do MusicBrainz deben utilizar un formato UUID." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "O estatus do lanzamento do MusicBrainz debe ser 'official', 'promotional' ou " "'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "O idioma debe ser un código de tres letras ISO 639-2" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "álbum" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "arranxista" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "autor/a" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "compositor/a" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "director/a" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "contacto" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "data" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "descrición" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "estilo" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "agrupación" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "idioma" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licenza" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "localización" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "letrista" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "compañía" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "título" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "versión" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "página de Internet" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "artista do álbum" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "subítulo / parte" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disco" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "pista" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "número ID" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "data da publicación orixinal" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "álbum orixinal" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "artista orixinal" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "data de gravación" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "país de publicación" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "artista do álbum (ordenar)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "artista (ordenar)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "álbum (ordenar)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "intérprete (ordenar)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "intérpretes (ordenar)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "ID do MusicBrainz da pista" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "ID do MusicBrainz da publicación" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "ID do MusicBrainz do artista" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "ID do MusicBrainz do artista do álbum" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "ID do MusicBrainz do TRM" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "PUID do MusicIP" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "Estado do álbum no MusicBrainz" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "Tipo de álbum no MusicBrainz" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "ganancia de volume da pista" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "pico de ganancia da pista" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "ganancia de volume do álbum" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "pico de ganancia do álbum" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Preferencias" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "discos" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "pistas" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "última vez comezada" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "nome completo" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "ponto de montaxe" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "erros" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "componentes" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "ano" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "data da publicación orixinal" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "marcador" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "Non consta a duración" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "letristas" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "arranxistas" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "compositoras/es" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "directoras/es" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "autoras/es" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d segundo" msgstr[1] "%d segundos" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuto" msgstr[1] "%d minutos" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d hora" msgstr[1] "%d horas" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d día" msgstr[1] "%d días" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d ano" msgstr[1] "%d anos" #~ msgid "_Browse Library" #~ msgstr "_Examinar a colección" #, fuzzy #~ msgid "" #~ "An exception has occured in Quod Libet. A dump file has been saved to <b >" #~ "%s</b> that will help us debug the crash. Please file a new issue at " #~ "http://code.google.com/p/quodlibet/issues /list and attach this file or " #~ "include its contents. This file may contain some identifying information " #~ "about you or your system, such as a list of recent files played. If this " #~ "is unacceptable, send <b>% s</b> instead with a description of whatyou " #~ "were doing." #~ msgstr "" #~ "Ocorreu un erro no Quod Libet. Gardóuse un arquivo de depuración en <b>" #~ "%s</b> que nos axudará a analizar o problema. \n" #~ "Por favor crea un novo asunto en http://code.google.com/p/quodlibet/" #~ "issues/list e inclue dito arquivo ou o seu contido. \n" #~ "Ese ficheiro pode conter información do teu sistema, como a lista das " #~ "cancións reproducidas recentemente. \n" #~ "Se non o consideras aceptábel, envía no seu lugar <b>%s</b> coa " #~ "descrición do que estabas a facer.\n" #~ "\n" #~ "Pode que o Quod Libet se torne inestábel a partires deste momento. " #~ "Recomendamos fechalo e abrilo de novo.Gardaráse a túa colección." #~ msgid "Could not import python-gpod, iPod support disabled." #~ msgstr "" #~ "Non se puido importar a biblioteca python-gpod. Desactivóuse a " #~ "interacción co iPod." #, fuzzy #~ msgid "_Output device:" #~ msgstr "Infraestrutura de _saída:" #~ msgid "Could not link GStreamer pipeline: '%s'" #~ msgstr "Non se puido enlazar a pipeline GStreamer: '%s'" #~ msgid "Default" #~ msgstr "Predefinida" #~ msgid "_Search:" #~ msgstr "_Procurar:" #~ msgid "Search your library" #~ msgstr "Procurar na colección" #~ msgid "No eject command found." #~ msgstr "Non se atopou o comando eject." #~ msgid "Unable to start web browser" #~ msgstr "Non se puido iniciar un navegador de Internet" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Non se atopou un navegador de Internet. Por favor, configura a variábel " #~ "$BROWSER\n" #~ " ou asegúrate de que existe /usr/bin/navegador." #, fuzzy #~ msgid "Library Error" #~ msgstr "Navegador da colección" #~ msgid "translator-credits" #~ msgstr "ashtophet" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Outras colunas para seren mostradas, separadas por espazos" #~ msgid "_Edit and Continue" #~ msgstr "_Editar e continuar" #, fuzzy #~ msgid "You are about to change the rating of %d song." #~ msgid_plural "You are about to change the rating of %d songs." #~ msgstr[0] "" #~ "Estás a piques de mudar a puntuación de %d cancións.\n" #~ "Desexas continuar?" #~ msgstr[1] "" #~ "Estás a piques de mudar a puntuación de %d cancións.\n" #~ "Desexas continuar?" #~ msgid "Confirm rating" #~ msgstr "Confirmar puntuación" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quod-libet-development@googlegroups.com>\n" #~ "Copyright 2004-2010 Joe Wreschnig, Michael Urman et alii\n" #~ "\n" #~ "Este aplicativo é software libre, accede ao código fonte para " #~ "verificares\n" #~ "as condicións de copia. NON HÁ garantía, nen sequera da súa\n" #~ "APTITUDE PARA O COMERCIO nun DE SER AXEITADO PARA UN USO DETERMINADO.\n" #~ "\n" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r non contén ningún navegador" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Tamaño total:" #~ msgid "%r doesn't contain any devices." #~ msgstr "%r non contén ningún dispositvo" #~ msgid "%s: Could not import ctypes." #~ msgstr "%s: Non se puido importar ctypes." #~ msgid "%s: Could not find media-player-info." #~ msgstr "%s: Non se puido atopar o media-player-info." #, fuzzy #~ msgid "Couldn't find module %s." #~ msgstr "%s: Non se puido atopar o media-player-info." #~ msgid "Quod Libet Plugins" #~ msgstr "Extensións do Quod Libet" #~ msgid "Color _search terms" #~ msgstr "C_or nos termos de procura" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Amosar as procuras simples en azul, as avanzadas en verde e as inválidas " #~ "en vermello" #~ msgid "_Select" #~ msgstr "_Seleccionar" #~ msgid "Separators for splitting tags" #~ msgstr "Separadores para dividir as etiquetas" #, fuzzy #~ msgid "Display" #~ msgstr "Editar a vista" #~ msgid "Quod Libet Preferences" #~ msgstr "Preferencias do Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "Non tocadas ho_xe" #~ msgid "Not Played in a _Week" #~ msgstr "Non tocadas nunha _semana" #~ msgid "Not Played in a _Month" #~ msgstr "Non tocadas nun _mes" #~ msgid "B_ottom 40" #~ msgstr "Ú_ltimas 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "As 40 cancións menos tocadas (aparecerán máis de corenta se hai cancións " #~ "tocadas o mesmo número de veces)" #~ msgid "gtk-media-next" #~ msgstr "_Seguinte" #~ msgid "gtk-media-previous" #~ msgstr "_Anterior" #~ msgid "gtk-media-play" #~ msgstr "_Tocar" #~ msgid "gtk-media-pause" #~ msgstr "_Parar" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #~ msgid "Artist" #~ msgstr "Artista" #~ msgid "Date" #~ msgstr "Data" #~ msgid "Choose New Stations" #~ msgstr "Escolle novas emisoras" #~ msgid "Add" #~ msgstr "Engadir" #~ msgid "Bitrate" #~ msgstr "Taxa de bits" #~ msgid "_Stations..." #~ msgstr "_Emisoras..." #~ msgid "Quod Libet" #~ msgstr "Quod Libet" #~ msgid "Initializing audio backend (%s)" #~ msgstr "A activar a infraestrutura de son (%s)" #~ msgid "Initializing main library (%s)" #~ msgstr "A cargar a colección principal (%s)" #~ msgid "Unable to save library" #~ msgstr "Non se puido gardar a colección" #~ msgid "" #~ "The audio output pipeline %r could not be created. Check your GStreamer " #~ "settings in ~/.quodlibet/config." #~ msgstr "" #~ "Non se puido crear a tubería para a saída de audio %r. Verifica as " #~ "configuracións do GStreamer en ~/.quodlibet/config." #~ msgid "_Information" #~ msgstr "_Información" #~ msgid "Sort by title" #~ msgstr "Ordenar polo título" #~ msgid "Sort by artist" #~ msgstr "Ordenar polo artista" #~ msgid "Lyrics provided by %s." #~ msgstr "Letras fornecidas por %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Non se atoparon as letras.\\nPodes premer no botón \"Baixar\" para que o " #~ "Quod Libet os procureonline. Tamén podes escribilos ti mesm@ e premer " #~ "\"Gardar\"." #~ msgid "Recommend" #~ msgstr "Recomendados" #~ msgid "_LastFM webservice URL: http://" #~ msgstr "URL do servizo _LastFM: http://" #~ msgid "The main url for lastfm webservices. Must end in a trailing /" #~ msgstr "A URL principal para os servizos do LastFM. Debe rematar cun /" #~ msgid "LastFM _similar artist webservice: " #~ msgstr "Artistas _similares no LastFM:" #~ msgid "" #~ "Enter here the xml webservice lookup that gets appended to the main " #~ "service url" #~ msgstr "" #~ "Insire o ficheiro xml de procura que se engadirá á URL principal do " #~ "LastFM." #~ msgid "LastFM top _tracks webservice: " #~ msgstr "Princi_pais cancións do LastFM:" #~ msgid "LastFM top _albums webservice: " #~ msgstr "Principais _álbuns do LastFM:" ����������������������������������������������������������������������quodlibet-3.0.2/po/sv.po����������������������������������������������������������������������������0000644�0001750�0001750�00000266760�12173213426�015362� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Swedish translation of Quod Libet 2.5 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Daniel Nyberg <p.daniel.nyberg@gmail.com>, 2013. # Erik Christiansson <spam.erik@alphafish.com>, 2006. # msgid "" msgstr "" "Project-Id-Version: Quod Libet 2.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:30+0100\n" "Last-Translator: Daniel Nyberg <p.daniel.nyberg@gmail.com>\n" "Language-Team: SWEDISH\n" "Language: sv\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-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Ljudtaggsredigerare" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Redigera taggar i ljudfiler" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Musikspelare" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Lyssna på, bläddra i eller redigera din ljudsamling" #: ../data/quodlibet.desktop.in.h:3 msgid "Play/Pause" msgstr "Spela upp/pausera" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "Nästa" #: ../data/quodlibet.desktop.in.h:5 msgid "Previous" msgstr "Föregående" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "en ljudtaggsredigerare" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "mapp" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "Kunde inte ladda filen: %r" #: ../operon.py:114 #, fuzzy msgid "List tags" msgstr "Lista alla taggar." #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "Koncis utmatning" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "Vilka kolumner som syns och i vilken ordning i koncist läge (%s)" #: ../operon.py:124 msgid "Also list programmatic tags" msgstr "Lista även programmatiska taggar" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "Inte nog många argument" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "För många argument" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 msgid "Description" msgstr "Beskrivning" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Värde" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Tagg" #: ../operon.py:152 msgid "List all common tags" msgstr "Visa alla gemensamma taggar" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "Skriv ut alla taggar till stdout" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "Läs in taggar dumpade med 'dump'" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "Visa förändringar, verkställ dem inte" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "Hoppa över taggar som inte kan skrivas" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "Kopiera taggar från en fil till en annan" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "Kan ej kopiera tagen %r till filen: %r" #: ../operon.py:263 msgid "Edit tags in an editor" msgstr "Editera taggar i redigerare" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "Sätt en tagg och ta bort alla existerande värden" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "Kunde inte sätta %r" #: ../operon.py:311 msgid "Remove tags" msgstr "Ta bort taggar" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "Värdet är ett reguljärt uttryck" #: ../operon.py:320 msgid "Remove all tags" msgstr "Ta bort alla taggar" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "Kan inte kombinera '--all' med '--regexp'" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "Kan inte ta bort %r från %r" #: ../operon.py:370 msgid "Remove a tag value" msgstr "Ta bort ett taggvärde" #: ../operon.py:418 msgid "Add a tag value" msgstr "Lägg till ett taggvärde" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Visa filinformation" #: ../operon.py:488 msgid "Extract embedded images" msgstr "Extrahera inbäddade bilder" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Visa kortfattad användningsinformation" #: ../operon.py:601 #, python-format msgid "'%s' is not a valid column name (%s)." msgstr "'%s' är inte ett giltigt kolumnnamn (%s)." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Låtar utan album" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Inställningar för albumlista" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Visa album_omslag" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "Sökning inkluderar personer" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Albumvisning" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d spår" msgstr[1] "%d spår" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d skiva" msgstr[1] "%d skivor" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Ogiltigt mönster" #: ../quodlibet/browsers/albums.py:180 msgid "_Title" msgstr "_Titel" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artist" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Datum" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 msgid "_Genre" msgstr "_Genre" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Betyg" #: ../quodlibet/browsers/albums.py:189 msgid "Sort _by..." msgstr "Sortera _på..." #: ../quodlibet/browsers/albums.py:210 msgid "_Preferences" msgstr "_Inställningar" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Albumlista" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Albumlista" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Alla album" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d album" msgstr[1] "%d album" #: ../quodlibet/browsers/albums.py:725 msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Ladda om omslaget" msgstr[1] "Ladda om omslagen" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Okänd" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Ny feed" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Ange platsen för en ljud-feed:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Ljudfeeds" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Ljudfeeds" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Hämta..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Hämta filer" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Hämta fil" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Kunde ej lägga till feed" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> kunde ej läggas till. Servern kan vara nere eller så innehåller " "platsen ej en ljudfeed." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "Kunde inte importera %s. Ljudströmsbläddraren avaktiverad." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "Nuvarande ljud-backend stödjer inte URL:er. Ljudströmsbläddraren avaktiverad." #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Biblioteksbläddrare" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d låt (%(time)s)" msgstr[1] "%(count)d låtar (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, python-format msgid "Unknown %s" msgstr "Okänd %s" #: ../quodlibet/browsers/collection.py:37 #, python-format msgid "Multiple %s Values" msgstr "Multipla %s-värden" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Anpassad" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "Slå samman" #: ../quodlibet/browsers/collection.py:210 msgid "Album Collection Preferences" msgstr "Inställningar för skivsamling" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "Albumsamling" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "_Albumsamling" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Filsystem" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Filsystem" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Kunde ej kopiera låtar" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "De valda filerna kan inte kopieras till andra låtlistor eller till kön." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "Lägg _till i bibliotek" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Filtypen stödjs ej" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Stationslistor kan endast innehålla stationsplatser, ej andra stationslistor " "eller spellistor. Följande platser kan ej laddas:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Kunde ej lägga till station" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Internetradio" #: ../quodlibet/browsers/iradio.py:235 msgid "Downloading station list" msgstr "Ladda hem stationslista" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Ny station" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Ange adressen till en internetradiostation:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "Elektrinisk" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "Hip Hop / Rap" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "Gamla favoriter" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "R&B" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "Japanskt" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "indisk" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "Religiöst" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "Topplistemusik" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "Turkiskt" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "Reggae / Dancehall" #: ../quodlibet/browsers/iradio.py:370 msgid "Latin" msgstr "Latin" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "Universitetsradio" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "Prat / Nyheter" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "Ambient" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "Jazz" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "Klassiskt" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "Pop" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "Alternativ" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "Metal" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "Country" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "Nyheter" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "Schlager" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "Funk" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "Indie" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "Blues" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "Soul" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "Lounge" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "Punk" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "Reggaeton" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "Slavisk" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "Grekiskt" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "Gothic" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "Rock" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Internetradio" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Ny station" #: ../quodlibet/browsers/iradio.py:491 msgid "_Update Stations" msgstr "_Uppdatera stationer" #: ../quodlibet/browsers/iradio.py:516 msgid "All Stations" msgstr "Alla stationer" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "Favoriter" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "Ingen kategori" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Inga stationer funna" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Inga internetradiostationer hittades på %s" #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Alla listade stationer finns redan i biblioteket" #: ../quodlibet/browsers/iradio.py:738 msgid "Remove from Favorites" msgstr "Ta bort från favoriter" #: ../quodlibet/browsers/iradio.py:744 msgid "Add to Favorites" msgstr "_Lägg till som favorit" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d station" msgstr[1] "%(count)d stationer" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Enhetsinställningar" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Enhet:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Ej monterad" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Monteringspunkt:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Namn:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Mediaenheter" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Mediaenheter" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Mata ut" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Byt namn" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> använt, <b>%s</b> tillgängligt" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> is ej ansluten." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "Kopierar <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Kunde ej kopiera låt" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Det finns inte tillräckligt med fritt utrymme för den här sången." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> kunde inte kopieras." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Kunde ej ta bort låtar." #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Tar bort <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> kunde inte tas bort." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Kunde ej ta bort låt" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Utmatning av <b>%s</b> misslyckades." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Kunde inte mata ut enhet" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "Ingen enhetsdrivrutin. Mediaenheter avaktiverade." #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Inställningar för panelbläddrare" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Alla" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Panelbläddrare" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Panelbläddrare" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Välj _alla" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Importerar spellista.\n" "\n" "%(current)d/%(total)d låtar tillagda." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "Är du säker på att du vill ta bort spellistan '%s'?" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" "All information om den valda spellistan kommer att tas bort och kan inte " "återställas." #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "Är du säker på att du vill ta bort %d dublett?" msgstr[1] "Är du säker på att du vill ta bort %d dubletter?" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "Dubletter kommer att tas bort från spellistan '%s'." #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Ny spellista" #: ../quodlibet/browsers/playlists.py:141 msgid "Enter a name for the new playlist:" msgstr "Ange ett namn på den nya spellistan:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Ny spellista" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s och %(count)d till" msgstr[1] "%(title)s och %(count)d till" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Spellistor" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "Spellistor" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "Ta _bort från spellista" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importera" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Kan ej importera spellistor" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet kan endast importera spellistor i M3U- och PLS-format." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "Ta bort dubletter" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Blanda" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Kan ej byta namn på spellista" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importera spellista" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Inaktivera bläddrare" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Inaktivera bläddrare" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Sök i bibliotek" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Sök i bibliotek" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Begränsa resultat" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Okänd enhet" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "Kan inte importera %s, som behövs för enhetsstöd." #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "%r stöds inte. " #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: Hittar inte 'libudev'." #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "%s: Kan inte hitta %s." #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "Initialiserar enhetsdrivrutin." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "Testar '%s'" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "Kunde inte ansluta till enhetsdrivrutin." #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Enhetsdrivrutin initierad." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Volymsförstärkning (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Kopiera _omslag" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Lägg ihop taggar med _multipla värden" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Titel innehåller _version" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "Album innehåller skivunderrubrik" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modell:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Kapacitet:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "Tar bort överblivna iPod-låtar" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Kunde ej iPod-databas" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "iPod ej initierad" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Vill du skapa en tom databas på den här iPoden?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "Kunde inte importera python-gpod, iPodstöd avaktiverat." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Filnamn mönster:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Ta bort oanvända omslag och kataloger" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Filen existerar" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Skriv över <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "Kunde inte läsa albumbiler \"%s\"" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Fel vid läsning av %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Bibliotek" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Kontrollerar monteringspunkter" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Kontrollerar bibliotek" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Kontrollerar %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "GStreamer output-pipeline används för uppspelning, exempelvis 'alsasink " "device=default'. Lämna tomt för förinstäld pipeline." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "_Utgångspipeline" #: ../quodlibet/player/gstbe.py:75 #, python-format msgid "%.1f seconds" msgstr "%.1f sekunder" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "_Buffertlängd:" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "Ström" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "Buffrar" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Utfel" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "GStreamer output pipeline kunde inte initieras. Pipelinen kan vara ogiltig, " "eller så används redan enheten. Kontrollera uppspelningsinställningarna." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Kunde ej öppna infiler" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "GStreamer har ingen funktionalitet att läsa filer. Kontrollera dina " "GStreamerinställningar." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "Ogiltig GStreamer output pipeline, försöker med förvalt värde." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "Kunde inte skapa förvald GStreamer pipeline." #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "Ogiltigt ljuddrivrutin" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "Ljuddrivrutinen %r är inte installerad." #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Kunde ej skapa audiodata" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Ljudenheten %r hittades inte. Kontrollera dina Xine-inställningar i ~/." "quodlibet/config." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet körs redan." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Ingen låt spelas för tillfället" #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet körs inte" #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Kunde inte skriva till %s. Tar bort den." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "musikbibliotek och -spelare" #: ../quodlibet.py:297 msgid "[option]" msgstr "[alternativ]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Skriver ut den låt som spelas och avslutar" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Börja spela omgående" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Hoppa till nästa låt" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" "Hoppa till föregående låt, eller starta om aktuell låt om det är nära början" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Hoppa till föregående låt" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Starta uppspelning" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Pausa uppspelning" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Växla spelnings-/paus-läge" #: ../quodlibet.py:310 msgid "Stop playback" msgstr "Stoppa uppspelning" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Höj volymen" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Sänk volymen" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Skriv ut spelarstatus" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Dölj huvudfönstret" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Visa huvudfönstret" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Växla synlighet för huvudfönstret" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Fokuserar på den spelare som körs" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Ta bort aktuella bläddrarfilter" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Uppdatera och skanna om biblioteket" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Skriv ut nuvarande spellista" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Skriv ut innehållet i kön" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "Starta utan insticksmoduler" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Avsluta Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Sök innom spelande låt" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Ange eller växla spelordningen" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Stäng av, på eller växla repetering" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Ställ in volymen" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Sök i ljudbiblioteket" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "fråga" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Spela en fil" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "filnamn" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Betygsätt den spelande låten" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Ange nuvarande bläddrare" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Öppna ny bläddrare" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Visa eller dölj bläddraren" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Visa eller dölj huvudlåtfönstret" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtrera på slumpvis värde" #: ../quodlibet.py:340 msgid "command|tag" msgstr "tagg" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtrera på ett taggvärde" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tagg=värde" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Kölägg en fil eller fråga" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "Kölägg kommaseparerad lista" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "filnamn" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "Skriv ut filnamnen på sökresultatet till stdout" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Ta bort fil eller fråga från kö" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Ogiltigt argument för '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Försök med %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Format som stödjs: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Ljudenhet: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Början" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/A" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Tid" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Bokmärkesnamn" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Bokmärken" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Ingen tidsinformation" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Värde:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Sparade värden" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Redigera sparade värden..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Låtar" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Visa återstående tid" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Redigera bokmärken" #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "Auto_matisk" #: ../quodlibet/qltk/controls.py:233 msgid "_Track Mode" msgstr "_Spårläge" #: ../quodlibet/qltk/controls.py:234 msgid "_Album Mode" msgstr "_Albumläge" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Stoppa efter denna låt" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtrera på ett taggvärde" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Ett fel har inträffat" #: ../quodlibet/qltk/debugwindow.py:71 #, fuzzy, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Ett undantagsfel har inträffat i Quod Libet. En dumpfil har skapats i <b>%s</" "b>. Den underlättar felsökningen. Skapa ett nytt ärende på http://code." "google.com/p/quodlibet/issues/list och bifoga filen eller infoga innehållet. " "Filen kan innehålla viss personlig information om dig och din dator. " "Exempelvis en lista med de senaste spelade filerna. Om det inte är " "acceptabelt, skicka <b>%s</b> med en beskrivning om vad du gjorde i " "stället.\n" "\n" "Nu är Quod Libet instabilt. Omstart rekommenderas. Ditt bibliotek kommer att " "sparas." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Ta bort filer" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Flytta till papperskorgen" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Ta bort filen permanent?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Ta bort filerna permanent?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s och %(count)d till..." msgstr[1] "%(title)s och %(count)d till..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "Flyttar %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Tar bort %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:105 msgid "Unable to move to trash" msgstr "Kunde ej flytta till papperskorg" #: ../quodlibet/qltk/delete.py:106 #, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Misslyckades med att flytta <b>%s</b> till papperskorg." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Kunde ej ta bort fil" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Borttagning av <b>%s</b> misslyckades." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Hämtningar" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Filnamn" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Storlek" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "Köad" #: ../quodlibet/qltk/_editpane.py:82 msgid "Path Patterns" msgstr "Sökvägsmönster" #: ../quodlibet/qltk/_editpane.py:83 msgid "Edit saved patterns..." msgstr "Redigera sparade mönster" #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Förhandsgranska" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Fler alternativ" #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "saknas från %d låt" msgstr[1] "saknas från %d låtar" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "skiljer sig mellan %d låt" msgstr[1] "skiljer sig mellan %d låtar" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Dela till flera värden" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Hämta skiva ur _album" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Hämta _version ur titel" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Hämta arrangör ur ar_tist" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Hämta _uppträdande ut artist" #: ../quodlibet/qltk/edittags.py:229 msgid "Split _Performer out of Title" msgstr "Hämta _framträdanden från titel" #: ../quodlibet/qltk/edittags.py:235 msgid "Split _Originalartist out of Title" msgstr "Hämta _originalartist från titel" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Lägg till en tagg" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Tagg:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "ql-save" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 msgid "ql-revert" msgstr "ql-revert" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Redigera taggar" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Skriv" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Kunde ej lägga till tagg" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Kunde ej lägga till <b>%s</b>\n" "\n" "Den valda filen har ej stöd för flera värden." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Ogiltig tall" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Ogiltig tagg <b>%s</b>\n" "\n" "Den valda filen har ej stöd för att redigera den här taggen." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Taggen är möjligtvis ej korrekt" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> har ändrats utanför programet. Att spara utan att uppdatera " "bilbioteket kan skriva över andra ändringar.\n" "\n" "Spara ändå?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Kunde ej spara låt" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Sparning av filen <b>%s</b> misslyckades. Filen kan vara skrivskyddad, " "korrupt eller så har du inte tillstånd att redigera den." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Ogiltigt värde" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Felaktigt värde: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Insticksmoduler" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d låt" msgstr[1] "%d låtar" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso inställningar" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Dela _på:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Ta bort _programmatiska taggar" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Taggredigering" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Mappar" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "Ny mapp..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "Välj _alla rekursivt" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Ny mapp" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Namn på den nya mappen:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Kunde ej skapa mapp" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Kunde ej ta bort mapp" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "av %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Skiva %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Spår %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Lägg till i spellista" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Redigera visning..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Redigera _taggar" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Spelar ej" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Rensa fel" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Inga låtar är valda." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Inga låtar" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Information" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Text" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Visa fel" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artist" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artister" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "uppträdande" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Aldrig" #: ../quodlibet/qltk/information.py:243 #, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%(n)d gång" msgstr[1] "%(n)d gånger" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "tillagd" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "senast spelad" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "spelningar" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "överhoppningar" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "betyg" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbit/s" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "längd" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "filstorlek" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "ändrad" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitrate" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Fil" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d vald" msgstr[1] "%d valda" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Producerad av %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "uppträdande" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Spår otillgängligt" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Spårlista" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d låt utan album" msgstr[1] "%d låtar utan album" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Vald discografi" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d låt utan artist" msgstr[1] "%d låtar utan artist" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "album" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Total längd:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Total storlek:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Filer" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Utgångslogg" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Hämta" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Ingen text hittades för denna låt." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Söker efter text..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Kunde ej hämta text." #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "Är du säker på att du vill ta bort %d dublett?" #: ../quodlibet/qltk/maskedbox.py:18 #, fuzzy msgid "The selected songs will be removed from the library." msgstr "Dubletter kommer att tas bort från spellistan '%s'." #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d station" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Förkasta taggändringar?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Taggar har ändrats men ej sparade. Spara filerna eller återgå och förkasta " "ändringarna?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "Aktiva uppgifter" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "%d uppgifter körs" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Okänd" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "I ordning" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_I ordning" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Blanda" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Viktad" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Viktad" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "En låt" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_En låt" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Insticksmodulfel" #: ../quodlibet/qltk/pluginwin.py:80 msgid "Plugins" msgstr "Insticksmoduler" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Visa _fel" #: ../quodlibet/qltk/pluginwin.py:259 msgid "Version:" msgstr "Version:" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Aktiverad" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Inaktiverad" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Ingen kategori" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Inga insticksmoduler hittades." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Skiva" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "Sp_år" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "gruppering" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Filnamn" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Längd" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Låtlista" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Hoppa automatiskt till spelande låt" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "När en låt spelas, skrolla till den i låtlistan" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "Beteende" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Andra:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Redigera visning..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Synliga kolumner" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Sökning inkluderar personer" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Filnamn innehåller _mapp" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Inställningar" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Bläddrare" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Globalt filter:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "Använd den här sökningen som ett tillägg till alla andra" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Sök när man slutat skriva" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "Visa sökresultat när användaren har slutat skriva" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 msgid "heading|Search" msgstr "Sök" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Bekräfta _multipla betyg" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" "Fråga om man är helt säker innan betygen ändras på flera låtar samtidigt" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Aktivera_ enklicksbetyg" #: ../quodlibet/qltk/prefs.py:241 msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Möjliggör betygssättning genom att klicka på betygskolumnen i spellistan" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Betyg" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "_Använd rundande hörn på miniatyrbilder" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "Runda hörnen på albumbilder. Omstart kan behövas för att träda i kraft" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "Föredra _inbäddade bilder" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "Använd grafik som finns inbäddade i ljudfilerna i första hand" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "_Tvinga bildfilnamn:" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "Albumbild som ska tvunget ska användas" #: ../quodlibet/qltk/prefs.py:283 msgid "Album Art" msgstr "Albumomslag" #: ../quodlibet/qltk/prefs.py:301 msgid "Playback" msgstr "Uppspelning" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "Utkonfiguration" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "Skala med volymen med det här värdet om ingen Reply Gain-information finns " "tillgänglig" #: ../quodlibet/qltk/prefs.py:320 msgid "_Fall-back gain (dB):" msgstr "_Fall-back förstärkning (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Skala volymen för alla låtar med det här värdet så länge som resultatet inte " "klipper." #: ../quodlibet/qltk/prefs.py:334 msgid "_Pre-amp gain (dB):" msgstr "_Pre-amp förstärkning (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "_Aktivera Replay Gain volymjusterning" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Replay Gain volymjusterning" #: ../quodlibet/qltk/prefs.py:387 msgid "Tags" msgstr "Taggar" #: ../quodlibet/qltk/prefs.py:392 msgid "Auto-save tag changes" msgstr "Spara taggförändringar automatiskt" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "Spara taggförändringar utan bekräftelse när flera filer editerats" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" "Ge åtkomst till alla taggar, inklusive maskingenererade. Exempelvis " "MusicBrainz- och Replay Gain-taggar" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" "En lista med skiljetecken som används vid delning av taggvärden. Listan är " "mellanslagsseparerad." #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" "Bayesisk medelvärdesfaktor (C) för sammanlagt betyg.\n" "0 betyder vanligt medelvärde. Högre faktor betyder att album med får spår " "kommer få mindre extremt betyg. Förändring av faktorn startar en omberäkning " "av alla album." #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "_Bayesisk medelvärdesfaktor" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Spara betyg och antalet _spelningar" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Epost:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" "Betyg och antalet spelningar kommer att sparas för denna epost adressen" #: ../quodlibet/qltk/prefs.py:477 msgid "Updating for new ratings" msgstr "Uppdaterar betyg" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "_Uppdatera biblioteket vid programstart" #: ../quodlibet/qltk/prefs.py:501 msgid "Refresh Library" msgstr "Uppdatera biblioteket" #: ../quodlibet/qltk/prefs.py:509 msgid "Scan Directories" msgstr "Skanna mappar" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Inga låtar" #: ../quodlibet/qltk/prefs.py:524 msgid "Preferences" msgstr "Inställningar" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Egenskaper" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Kö" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Ta bort alla låtar från kön" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Slumpvis" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Ordning:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Repetera" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Starta om spellistan vid slut" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Kunde ej lägga till låtar" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> använder ett protokoll som inte stödjs" #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Musik" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "Lägg _till mapp.." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "Lägg _till fil..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "Lägg _till plats..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Öppna ny bläddrare" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filter" #: ../quodlibet/qltk/quodlibetwindow.py:455 msgid "Recently _Played" msgstr "Nyligen _spelad" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "Nyligen _tillagda" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "40 _högsta" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Kontroll" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Hoppa till spelande låt" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Visa" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Hjälp" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "_Utlogg" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "_Orsaka ett fel" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "Onlinehjälp" #: ../quodlibet/qltk/quodlibetwindow.py:502 msgid "Search Help" msgstr "Sök i hjälpen" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Uppdatera biblioteket" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Ladda om biblioteket" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtrera på _genre" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtrera på _artist" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filtrera på al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Slumpvis _genre" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Slumpvis _artist" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Slumpvis al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Låt_lista" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Kontrollera ändringar i biblioteket" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Ladda om alla låtar i bilbioteket (kan ta lång tid)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "De 40 mesta spelade låtarna (mer än 40 kan väljas om flera låtar är spelade " "lika mycket)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Lägg till en plats" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Ange platsen för en ljudfil:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Kan lägga till plats" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> är ej en giltig plats." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Lägg till musik" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Vaka över denna mapp för nya låtar" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s kunde ej läggas till i biblioteket.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Kunde ej lägga till låt" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "Är du säker på att du vill ändra betygen på alla %d låtar?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "Betyget på alla markerade låtar kommer att ändras till '%s'" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Ogiltigt kommando %r." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "Fel inträffade vid körning av kommando %r, orsakat av %r." #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Okänd bläddrare %r." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Ersätt mellanslag med _understreck" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Ta bort _Windows-inkompatibla " #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Ta bort diakritiska tecken" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Ta bort icke-ASCII-tecken" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "Använd enbart _gemener" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Byt namn på filer" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Nytt namn" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "Ignorera _alla fel" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Fortsätt" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Kunde ej byta namn på fil" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Namnbyte av <b>%s</b> till <b>%s</n> misslyckades. Möjligtvis finns redan " "målfilen eller så har du inte rättigheter att skapa den nya filen eller ta " "bort den gamla." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Sökvägen är ej absolut" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Mönstret\t<b>%s</b>\n" "innehåller / men startar inte från roten. För att undvika feldöpta mappar " "ska mönster börja med / eller ~/." #: ../quodlibet/qltk/scanbox.py:35 msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Låtar i de här mapparna kommer att läggas till i biblioteket när det " "uppdateras" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Välj mappar" #: ../quodlibet/qltk/searchbar.py:46 msgid "Saved Searches" msgstr "Sparade sökningar" #: ../quodlibet/qltk/searchbar.py:47 msgid "Edit saved searches..." msgstr "Redigera sparade sökningar..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Sök" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Gräns:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Vikt" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtrera på %s" #: ../quodlibet/qltk/songlist.py:1017 msgid "All _Headers" msgstr "Alla _Kolumner" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_Spårkolumner" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Albumkolumner" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_Personkolumner" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Datumkolumner" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_Filkolumner" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "_Produktionskolumner" #: ../quodlibet/qltk/songlist.py:1037 msgid "Custom _Sort..." msgstr "Egen _sortering..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Kolumninställningar..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Lägg till i _kö" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Kopiera till enhet" #: ../quodlibet/qltk/songsmenu.py:259 msgid "_Remove from library" msgstr "_Ta bort från bibliotek" #: ../quodlibet/qltk/sortdialog.py:19 msgid "Track Headers" msgstr "Spårkolumner" #: ../quodlibet/qltk/sortdialog.py:22 msgid "People Headers" msgstr "Personkolumner" #: ../quodlibet/qltk/sortdialog.py:25 msgid "Album Headers" msgstr "Albumkolumner" #: ../quodlibet/qltk/sortdialog.py:28 msgid "Date Headers" msgstr "Datumkolumner" #: ../quodlibet/qltk/sortdialog.py:31 msgid "File Headers" msgstr "Filkolumner" #: ../quodlibet/qltk/sortdialog.py:33 msgid "Production Headers" msgstr "Produktionskolumner" #: ../quodlibet/qltk/sortdialog.py:67 msgid "Tag:" msgstr "Tagg:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "Ökande" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "Avtagande" #: ../quodlibet/qltk/sortdialog.py:117 msgid "Custom sort" msgstr "Anpassad sortering" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Ersätt _understreck med mellanslag" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "Första bokstaven i varje ord _versal" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Dela till flera _värden" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Taggar från sökväg" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Taggar ersätter redan existerande" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Taggar läggs till till redan existerande" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Mönstret\n" "\t<b>%s</b>\n" "är ogiltigt. Möjligtvis innehåller det samma tagg två gånger eller " "obalanserade hakar (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Ogiltiga taggar" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Ogiltiga taggar <b>%s</b>\n" "\n" "Filen har inte stöd för att redigera dessa taggar." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Kunde ej redigera låt" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Mönstret är ogiltigt. Säkerställ att du skriver < och > som \\< och " "> och att hakarna är balanserade.\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Redigera visning" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "För många fel" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Uppspelning avbryts på grund av att det var %d fel på rad." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Spårnummer" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Börja frå_n" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Antal spår:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Spår" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "och %d till..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Sparar låtarna du ändrade." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d låtar sparade\n" "(%(remaining)s återstår)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d av %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Töm sökning" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "En spellista med namnet %s finns redan." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "D:" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "Avlusa" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "W:" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Varningar" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "E:" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Visa kortfattad användningsinformation" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Visa version och copyright" #: ../quodlibet/util/__init__.py:142 #, python-format msgid "Usage: %s %s\n" msgstr "Användning: %s %s\n" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[alternativ]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Alternativet %r känns ej igen." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "Alternativet %r kräver ett argument." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r är ej ett unikt prefix." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Oglitig kodning]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "svenne" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "Övergripande" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "Inga loggar tillgängliga." #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Datumet måste skrivas in på formatet 'YYYY', 'YYYY-MM-DD' eller 'YYYY-MM-DD " "HH:MM:SS'." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Replay Gain-förstärkningar måste anges på formen 'x.yy dB'." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Replay Gain-toppar måste anges på formen 'x.yy'." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz ID måste vara på UUID-format." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz utgivningsstatus måste vara 'official', 'promotional' eller " "'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "Språket måste vara en ISO 639-2 trebokstavsförkortning" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "arrangör" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "författare" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "kompositör" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "dirigent" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "kontakt" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "datum" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "beskrivning" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "genre" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "gruppering" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "språk" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licens" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "plats" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "lyrist" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organisation" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "titel" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "version" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "webbsida" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "album artist" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "Skivunderrubrik" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "skiva" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "spår" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "katalognummer" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "ursprungligt släppdatum" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "ursprungligt album" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "ursprunglig artist" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "inspelningsdatum" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "utgivningsland" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "album artist (sort)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "artist (sort)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "album (sort)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "uppträdande (sort)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "uppträdanden (sort)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz spår-ID" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "MusicBrainz release-ID" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "MusicBrainz artist-ID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz album artist-ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz album status" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz album typ" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "spårförstärkning" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "spårtopp" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "albumförstärkning" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "albumtopp" #: ../quodlibet/util/tags.py:88 msgid "reference loudness" msgstr "Referensljudstyrka" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "skivor" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "spår" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "senast spelad" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "fullt namn" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "monteringspunkt" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "fel" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "personer" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "år" #: ../quodlibet/util/tags.py:111 msgid "original release year" msgstr "ursprungligt släppdatum" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "Bokmärke" #: ../quodlibet/util/tags.py:115 msgid "file format" msgstr "filformat" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "lyrister" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "arrangörer" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "kompositörer" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "dirigenter" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "författare" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d sekund" msgstr[1] "%d sekunder" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minut" msgstr[1] "%d minuter" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d timma" msgstr[1] "%d timmar" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d dag" msgstr[1] "%d dagar" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d år" msgstr[1] "%d år" #~ msgid "_Browse Library" #~ msgstr "_Bläddra i bibliotek" #~ msgid "" #~ "Cannot save library contents to %s (it's a directory). Please remove it " #~ "and try again." #~ msgstr "" #~ "Kunde inte spara biblioteksinnehåll till %s (det är en katalog). Ta bort " #~ "den och försök igen." #~ msgid "Library Error" #~ msgstr "Biblioteksfel" #~ msgid "_Output device:" #~ msgstr "_Utenhet" #~ msgid "Could not link GStreamer pipeline: '%s'" #~ msgstr "Kunde inte länka GStreamer-pipeline: '%s'" #~ msgid "Default" #~ msgstr "Förval" #~ msgid "translator-credits" #~ msgstr "Erik Christiansson" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Andra kolumner att visa, separerade med mellanslag" #~ msgid "_Edit and Continue" #~ msgstr "_Editera och fortsätt" #~ msgid "_Search:" #~ msgstr "_Sök:" #~ msgid "Search your library" #~ msgstr "Sök i ditt bibliotek" #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "Detta är fri mjukvara, se källkoden för kopieringsvillkor. There is NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ "Inga garantier lämnas, inte ens för KÖP eller LÄMPLIGHET FÖR NÅGOT " #~ "SPECIELLT ÄNDAMÅL.\n" #~ msgid "Unable to start web browser" #~ msgstr "Kunde ej starta webbläsare" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Ingen webbläsare kunde hittas. Ställ in din $BROWSER-variabel eller " #~ "säkerställ att /usr/bin/sensible-browser finns." #, fuzzy #~ msgid "No eject command found." #~ msgstr "Inga stationer funna" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "Information" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Total storlek:" #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet-insticksmoduler" #~ msgid "Color _search terms" #~ msgstr "Färglägg _söktermer" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Visa enkla sökningar i blått, avancerade i grönt och ogiltiga i rött" #~ msgid "_Select" #~ msgstr "_Välj" #~ msgid "Separators for splitting tags" #~ msgstr "Avgränsare för taggdelning" #, fuzzy #~ msgid "Display" #~ msgstr "Redigera visning" #~ msgid "Quod Libet Preferences" #~ msgstr "Inställningar för Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "Ej spelad i_dag" #~ msgid "Not Played in a _Week" #~ msgstr "Ej spelad på en _vecka" #~ msgid "Not Played in a _Month" #~ msgstr "Ej spelad på en _månad" #~ msgid "B_ottom 40" #~ msgstr "40 _lägsta" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "De 40 minst spelade låtarna (mer än 40 kan väljas om flera låtar är " #~ "spelade lika mycket)" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | kontroll ]" #, fuzzy #~ msgid "Artist" #~ msgstr "_Artist" #, fuzzy #~ msgid "Date" #~ msgstr "_Datum" #~ msgid "Choose New Stations" #~ msgstr "Välj nya stationer" #~ msgid "Add" #~ msgstr "Lägg till" #, fuzzy #~ msgid "Bitrate" #~ msgstr "bitrate" #~ msgid "_Stations..." #~ msgstr "_Stationer..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Avsluta Quod Libet" #~ msgid "Unable to save library" #~ msgstr "Kunde ej spara bibliotek" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Kan ej spela låt" #~ msgid "_Information" #~ msgstr "_Information" #~ msgid "Sort by title" #~ msgstr "Sortera efter titel" #~ msgid "Sort by artist" #~ msgstr "Sortera efter artist" #~ msgid "Lyrics provided by %s." #~ msgstr "Texter från %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Texter hittades inte.\n" #~ "\n" #~ "Klicka på kanppen Hämta för att låte Quod Libet söka efter texten på " #~ "internet. Du kan också skriva in texten själv och klicka på Spara." #~ msgid "part" #~ msgstr "del" #~ msgid "Opening audio device." #~ msgstr "Öppnar ljudenhet" #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d låtar sparade" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainz album-ID" #~ msgid "Loaded song library." #~ msgstr "Låtbibliotek laddat." #~ msgid "Unable to open audio device" #~ msgstr "Kunde ej öppna ljudenhet" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet försökte komma åt drivrutinerna 'autosink' och '%(sink)s' men " #~ "kunde inte öppna dem. Konfigurera din GStreamer-pipeline genom att ändra " #~ "raden\n" #~ "....<b>pipeline = %(sink)s</b>\n" #~ "i ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet kunde ej hitta GStreamer-elementet 'filesrc'. Kontrollera din " #~ "GStreamer-installation." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer kunde ej ladda den valda låten." #, fuzzy #~ msgid "C_opy album covers" #~ msgstr "Visa album_omslag" #~ msgid "Unable to retag multiple values" #~ msgstr "Kan ej tagga om flera värden" #~ msgid "Changing the name of a tag with multiple values is not supported." #~ msgstr "Det går ej att byta namn på en tagg med flera värden." #~ msgid "W: %s is not a QL song database." #~ msgstr "W: %s är ej en QL-låtdatabas." #~ msgid "tag" #~ msgstr "tagg" #~ msgid "Per-song (\"Radio\") volume adjustment" #~ msgstr "Låtvis (\"radio\") volymjustering" #~ msgid "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "Albumvis (\"audiofil\") volymjustering" #~ msgid "_Volume Normalization" #~ msgstr "_Volymnormalisering" #~ msgid "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgstr "" #~ "Skannar biblioteket. Detta kan ta flera minuter.\n" #~ "\n" #~ "%d låtar omladdade\n" #~ "%d låtar borttagna" #~ msgid "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgstr "" #~ "Söker efter nya låtar och lägger till dem i biblioteket.\n" #~ "\n" #~ "%d låtar tillagda" #~ msgid "No new stations" #~ msgstr "Inga nya stationer" #~ msgid "M3U playlists cannot be loaded." #~ msgstr "M3U-spellistor kan ej laddas." #~ msgid "This station is already in your library." #~ msgstr "Stationen finns redan i biblioteket." #~ msgid "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "by <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disc <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Track <tracknumber>>>" #~ msgstr "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "av <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Skiva <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Spår <tracknumber>>>" #~ msgid "Tray Icon Preferences" #~ msgstr "Inställningar för notifieringsikon" #~ msgid "" #~ "Scroll wheel adjusts volume\n" #~ "Shift and scroll wheel changes song" #~ msgstr "" #~ "Skrollhjulet justerar volymen\n" #~ "Skift och skrollhjulet byter låt" #~ msgid "" #~ "Scroll wheel changes song\n" #~ "Shift and scroll wheel adjusts volume" #~ msgstr "" #~ "Skrollhjulet byter låt\n" #~ "Skift och skrollhjulet justerar volymen" #~ msgid "Scroll _Wheel" #~ msgstr "Rullhjul" #~ msgid "Tooltip Display" #~ msgstr "Hjälptextvisning" #~ msgid "Play _Order" #~ msgstr "Spel_ordning" #~ msgid "The library cannot be refreshed while Quod Libet is running." #~ msgstr "Biblioteket kan inte uppdateras när Quod Libet körs" #~ msgid "Loading, scanning, and saving your library." #~ msgstr "Läser hem, skannar och sparar bilblioteket" #~ msgid "Rescan your library and exit" #~ msgstr "Skannar om biblioteket och avslutar" ����������������quodlibet-3.0.2/po/ro.po����������������������������������������������������������������������������0000644�0001750�0001750�00000254020�12173213426�015334� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# translation of ro.po to Română # Romanian translation of Quod Libet # Copyright (C) 2006, Free Software Foundation # This file is distributed under the same license as the Quod Libet package. # # # Mugurel Tudor <mugurelu@gnome.ro>, 2006. # Mişu Moldovan <dumol@gnome.ro>, 2006. msgid "" msgstr "" "Project-Id-Version: ro\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:30+0100\n" "Last-Translator: Mugurel Tudor <mugurelu@gnome.ro>\n" "Language-Team: Română <gnomero@lists.sourceforge.net>\n" "Language: ro\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%100>19)||((n%100==0)&&(n!=0)))?" "2:1));\n" "X-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Editor pentru etichete audio" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Editare etichete fişiere audio" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Redare audio" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Ascultaţi, editaţi sau cautaţi în propria colecţie audio" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Redare" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Previzualizare" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "un editor de etichete audio" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "director" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Arată etichetele _programatice" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "descriere" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Valoare" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Etichetă" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Editor pentru etichete audio" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 msgid "Remove tags" msgstr "" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 msgid "Remove all tags" msgstr "" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filtrare dupa o valoare din etichetă" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filtrare dupa o valoare din etichetă" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Durată necunoscută" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Arată pe scurt informaţiile de utilizare" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> nu este o locaţie validă." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Piese ce nu aparţin unui album" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Preferinţe listă albume" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Arată _coperţile albumelor" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Afişare albume" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d pistă" msgstr[1] "%d piste" msgstr[2] "%d de piste" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disc" msgstr[1] "%d discuri" msgstr[2] "%d de discuri" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Şablon invalid" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Titlu" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artist" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Dată" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "gen" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "E_valuare" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Sortează după dată" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Preferinţe" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Listă albume" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "Listă _albume" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Toate albumele" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d album" msgstr[1] "%d albume" msgstr[2] "%d de albume" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Arată _coperţile albumelor" msgstr[1] "Arată _coperţile albumelor" msgstr[2] "Arată _coperţile albumelor" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Necunoscut" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Flux nou" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Introduceţi locaţia unui flux audio:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Fluxuri audio" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "Fluxuri a_udio" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Descarcă..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Descarcă fişierele" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Descarcă fişierul" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Nu s-a putut adăuga fluxul" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> nu a putut fi adăugat. Serverul ar putea fi nefuncţional ori " "locaţia ar putea să nu fie a unui flux audio." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Navigator colecţie" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d piesă (%(time)s)" msgstr[1] "%(count)d piese (%(time)s)" msgstr[2] "%(count)d de piese (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Necunoscut" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Separă în valori _multiple" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Personalizat" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Preferinţe listă albume" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Sistem de fişiere" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "Sistem de _fişiere" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Nu s-au putut copia piesele" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Fişierele selectate nu pot fi copiate în alte liste de piese sau în coadă." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Adaugă la colecţie" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Tip nesuportat de fişier" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Listele de staţii pot conţine doar locaţiile staţiilor, nu şi alte liste de " "staţii sau liste de redare. Următoarele locaţii nu pot fi încărcate:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Nu s-a putut adăuga staţia" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Radio Internet" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Descarcă fişierele" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Staţie nouă" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Introduceţi locaţia unei staţii radio Internet:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "evaluare" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "Radio _Internet" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "Staţie _nouă" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "Staţie _nouă" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Staţie nouă" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Nici s-a găsit nici o staţie" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Nu s-a găsit nici o staţie radio Internet la %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Toate staţiile listate sunt deja în colecţie." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "Şte_rge din listă" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Adaugă în listă" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d staţie" msgstr[1] "%(count)d staţii" msgstr[2] "%(count)d de staţii" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Proprietăţi dispozitiv" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Dispozitiv:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Nu este montat" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Punct de montare:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Nume:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Dispozitive media" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "Dispozitive _media" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Ejectare" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Redenumeşte" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> folosit, <b>%s</b> disponibil" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> nu este conectat." #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "Copiez <b>%s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Nu s-a putut copia piesa" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Nu există suficient spaţiu disponibil pentru această piesă." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> nu a putut fi copiat." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Nu s-au putut şterge piesele" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Şterg <b>%s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> nu a putut fi şters." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Nu s-a putut şterge piesa" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Ejectarea <b>%s</b> a eşuat." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Nu s-a putut ejecta dispozitivul" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Preferinţe navigator încastrat" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Toate" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Navigator încastrat" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Navigator încastrat" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Selectează t_ot" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Se importă lista de redare.\n" "\n" "%d/%d piese adăugate." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Listă nouă" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Introduceţi un nume pentru noul director:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "Listă _nouă" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, fuzzy, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s şi %(count)d în plus" msgstr[1] "%(title)s şi %(count)d în plus" msgstr[2] "%(title)s şi %(count)d în plus" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Liste" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Liste" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "Şte_rge din listă" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importă" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Nu s-a putut importa lista de redare" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "" "Quod Libet poate importa liste de redare doar în formatele M3U sau PLS." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Aleator" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Nu s-a putut redenumi lista" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importă lista" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Dezactivează navigatorul" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Dezactivează navigatorul" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Căutare în colecţie" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "Caută în c_olecţie" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Limitează rezultatele" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Dispozitiv necunoscut" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "E: „%s” nu este un prefix unic." #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "Valoare invalidă" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Volume Gain (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Copiază coperţile _albumelor" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Combină etichetele cu valori m_ultiple" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Titlul include ver_siunea" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "Albumul include pa_rtea" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Model:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Capacitate:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 #, fuzzy msgid "Removing orphaned iPod track" msgstr "W: sterg pista orfană din iPod" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Nu s-a putut salva baza de date iPod" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "iPod neiniţializat" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Doriţi să creaţi o bază de date goală pe acest iPod?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "Model nume _fişier:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "Ş_terge directoarele şi coperţile nefolosite" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Fişierul există" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Suprascriu <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Colecţie" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Se verifică punctele de montare" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Se verifică colecţia" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Se verifică %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d secundă" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "Nu s-au putut deschide fişierele" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "Valoare invalidă" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "Nu s-a putut crea directorul" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet este deja pornit." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Nici o piesă nu este redată curent." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet nu este pornit." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Nu se poate scrie %s. Va fi eliminat din listă." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "redare audio pentru colecţii de muzică" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[opţiuni]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Afişare piesă redată curent" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Cu pornire imediată a redării" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Salt la piesa următoare" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Salt la piesa precedentă" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Start redare" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Pauză redare" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Comutare între start şi pauză redare" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Start redare" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Volum mai mare" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Volum mai mic" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Afişare status curent" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Ascundere fereastră principală" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Afişare fereastră principală" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Comutare a vizibilităţii ferestrei principale" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Focalizare a ferestrei de redare" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "Reactualizare c_olecţie" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Afişare a listei curente" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Afişare a cozii curente" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Ieşire Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Derulare în piesa redată curent" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Setare ori comutare a ordinii de redare" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Anulare, activare sau comutare a repetării" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Setare volum" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Căutare în colecţia muzicală" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "căutare" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Redare fişier" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "comandă|nume" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Evaluare a piesei redate curent" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Setare a navigatorului web utilizat" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Deschidere nou navigator web" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Afişare/ascundere a cozii" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Afişare/ascundere a listei principale de piese" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtrare după o valoare aleatoare" #: ../quodlibet.py:340 msgid "command|tag" msgstr "comandă|etichetă" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtrare dupa o valoare din etichetă" #: ../quodlibet.py:341 msgid "tag=value" msgstr "etichetă=valoare" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Punere fişier în coadă sau căutare" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "nume" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 #, fuzzy msgid "Unqueue a file or query" msgstr "Punere fişier în coadă sau căutare" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "E: Argument invalid pentru „%s”." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "E: Încercaţi %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Formate suportate: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Dispozitiv audio: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Început" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/A" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Timp" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Nume favorit" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Favorite" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Durată necunoscută" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Valoare:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Valori salvate" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Editare valori salvate..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Piese" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Arată timpul rămas" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Editare favorite..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "Coloane _pistă" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "Coloane _album" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Stop după această piesă" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtrare dupa o valoare din etichetă" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Ştergere fişiere" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Mută la Gunoi" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Ştergeţi permanent acest fişier?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Ştergeţi permanent aceste fişiere?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s şi alte %(count)d în plus..." msgstr[1] "%(title)s şi alte %(count)d în plus..." msgstr[2] "%(title)s şi alte %(count)d în plus..." #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "Mut %d/%d." #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Se şterge %d/%d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Nu s-a putut salva baza de date iPod" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Ejectarea <b>%s</b> a eşuat." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Nu s-a putut şterge fişierul" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Ştergerea <b>%s</b> a eşuat." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Transferuri" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Nume fişier" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Mărime" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "_Coadă" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "şablon" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Editare valori salvate..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Previzualizare" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Mai multe opţiuni..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "lipseşte din %d piesă" msgstr[1] "lipseşte din %d piese" msgstr[2] "lipseşte din %d de piese" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "diferit în %d piesă" msgstr[1] "diferit în %d piese" msgstr[2] "diferit în %d de piese" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Separă în valori _multiple" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Separă discul de _album" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Separă _versiunea de titlu" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Separă aranjorul de ar_tist" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Separă _interpretul de artist" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Separă _interpretul de artist" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Separă _versiunea de titlu" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Adaugă o etichetă" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Etichetă:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 msgid "ql-revert" msgstr "" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Editare etichete" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Scrie" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Nu s-a putut adăuga eticheta" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Nu s-a putut adăuga <b>%s</b>\n" "\n" "Fişierul selectat nu suportă valori multiple." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Etichetă invalidă" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Etichetă invalidă <b>%s</b>\n" "\n" "Fişierle selectate curent nu suportă editarea acestei etichete." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Eticheta ar putea fi imprecisă" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> a fost modificat în timp ce aplicaţia era pornită. Salvarea sa " "fără reactualizarea colecţiei ar putea suprascrie alte modificări ale " "piesei.\n" "\n" "Salvaţi totuşi această piesă?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Nu s-a putut salva piesa" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Salvarea <b>%s</b> a eşuat. Fişierul ar putea fi protejat la scriere, corupt " "sau cu drepturi prea stricte pentru a-l putea edita." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Valoare invalidă" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Valoare invalidă: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Module" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d piesă" msgstr[1] "%d piese" msgstr[2] "%d de piese" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Preferinţe Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Separare _la:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Arată etichetele _programatice" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Editare etichete" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Directoare" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "Director _nou..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Selectează toate subdirectoarele" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Director nou" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Introduceţi un nume pentru noul director:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Nu s-a putut crea directorul" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Nu s-a putut şterge directorul" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "de către %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Discul %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Pista %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Adaugă în listă" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Editare afişare..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Editare _etichete" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Oprit" #: ../quodlibet/qltk/information.py:61 #, fuzzy msgid "_Clear Errors" msgstr "Erori module" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Nici o piesă nu este selectată." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Nici o piesă" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informaţii" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Versuri" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 #, fuzzy msgid "Errors" msgstr "Arată _erorile" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artist" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artişti" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "interpreţi" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Niciodată" #: ../quodlibet/qltk/information.py:243 #, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "O dată" msgstr[1] "De %(n)d ori" msgstr[2] "De %(n)d de ori" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "adăugat" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "ultima redare" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "redări" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "întreruperi" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "evaluare" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "durată" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "mărime fişier" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "modificat" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "rată de biţi" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Fişier" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d selectată" msgstr[1] "%d selectate" msgstr[2] "%d selectate" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Produs de către %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "interpret" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Pistă nedisponibilă" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Listă piste" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d piesă fără album" msgstr[1] "%d piese fără album" msgstr[2] "%d de piese fără album" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Discografie selectată" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d piesă fără artist" msgstr[1] "%d piese fără artist" msgstr[2] "%d de piese fără artist" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "albume" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Durată totală:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Mărime totală:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Fişiere" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Caută" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Versurile pentru această piesă nu au putut fi găsite." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Se caută versurile..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Nu s-au putut descărca versurile." #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d staţie" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Anulaţi modificarea etichetelor?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Etichetele au fost modificate, dar nu au fost salvate. Salvaţi aceste " "fişiere sau reveniţi la valorile iniţiale şi anulaţi modificările?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "Necunoscut" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "În ordine" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "În _ordine" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Aleator" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Ponderat" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Ponderat" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "O singură piesă" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "O _singură piesă" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Erori module" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Module" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Arată _erorile" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "versiune" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "Dezactivează navigatorul" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Nici un modul nu a fost găsit." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "Di_sc" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Pistă" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "grupare" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "Nume _fişier" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "D_urată" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Listă piese" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Sări automat la piesa redată" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "Când se schimbă piesa redată, derulează la aceasta în listă" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "Alt_ele:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Editare afişare..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Coloane vizibile" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Titlul include ver_siunea" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Numele de fişier include dire_ctorul" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Preferinţe" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Navigatoare" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "Filtru _global:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "Stop după această piesă" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Caută" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "Când se schimbă piesa redată, derulează la aceasta în listă" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "E_valuare" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Listă albume" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Pauză redare" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "_Volume Gain (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "_Volume Gain (dB):" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "Ajustare de volum _replay gain" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "Ajustare de volum _replay gain" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Editare etichete" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Anulaţi modificarea etichetelor?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "Salvează evaluarile şi numărul de redări" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Adresă de mail:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" "Evaluările şi numărul de redări vor fi setate pentru această adresă de mail" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "Staţie _nouă" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "Reactualizare c_olecţie" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "Reactualizare c_olecţie" # ??? #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "_Directoare indexate" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Nici o piesă" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Preferinţe" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Proprietăţi" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Coadă" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Şterge toate piesele din coadă" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Aleator" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Ordine:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Repetare" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Repetă lista" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Nu s-au putut adăuga piesele" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> foloseşte un protocol nesuportat." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Muzică" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "Adăugare _director..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "Adăugare _fişier..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "Adăugare _locaţie..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Deschidere nou navigator web" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtre" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "Nu a fost _niciodată redat" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Primele 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Control" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Sări la piesa redată" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Vizualizare" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Ajutor" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "Erori module" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Caută" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Reactualizare c_olecţie" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Reîn_cărcare colecţie" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtrare după _gen" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtrare după _artist" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filtrare după al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "_Gen aleator" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "A_rtist aleator" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "A_lbum aleator" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Listă _piese" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Caută noutăţi în colecţie" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Reîncarcă toate piesele din colecţie (poate dura foarte mult)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "Cele mai des redate 40 de piese (mai mult de 40 în anumite cazuri)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Adăugare locaţie" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Introduceţi locaţia unui fişier audio:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Nu s-a putut adăuga locaţia" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> nu este o locaţie validă." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Adăugare muzică" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Monitorizează acest director pentru piese noi" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s nu a putut fi adăugat la colecţie.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Nu s-a putut adăuga piesa" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Înlocuieşte spaţiile cu liniuţe de _subliniere" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Şterge caracterele incompatibile cu sistemele _Windows" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Şterge semnele _diacritice" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Şterge caracterele non-_ASCII" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Redenumire fişiere" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Nume nou" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "Arată _erorile" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Continuă" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Nu s-a putut redenumi fişierul" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Redenumirea fişierului <b>%s</b> în <b>%s</b> a eşuat. S-ar putea ca " "fişierul ţintă să existe deja sau poate nu aveţi drepturile necesare pentru " "a crea noul fişier sau a-l şterge pe cel vechi." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Calea nu este una absolută" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Şablonul\n" "\t<b>%s</b>\n" "conţine / dar nu porneşte din rădăcină. Pentru a evita directoarele greşit " "numite, aveţi grijă ca şablonul să înceapă cu / sau ~/." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Piesele din aceste directoare (separate de „:”) vor fi adăugate la colecţie" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Selectare directoare" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Valori salvate" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Editare valori salvate..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Caută" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limită:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Pondere" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtrare după %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "Coloane _album" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Coloane _pistă" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "Coloane _album" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "Coloane _persoane" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Coloane _dată" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Coloane _fişier" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "Coloane _producţie" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Personalizează coloanele..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Personalizează coloanele..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Adaugă în _coadă" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Copiază către dispozitiv" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "Şte_rge din listă" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "Coloane _pistă" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "Coloane _persoane" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "Coloane _album" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "Coloane _dată" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "Coloane _fişier" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "Coloane _producţie" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Etichetă:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Personalizat" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Înlocuieşte liniuţele de _subliniere cu spaţii" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "Prima literă _majusculă" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Separă în valori m_ultiple" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Etichetare din cale" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Etichetele le înlocuiesc pe cele actuale" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Etichetele sunt adăugate la cele actuale" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Şablonul\n" "\t<b>%s</b>\n" "este invalid. S-ar putea să conţină aceeaşi etichetă de două ori sau " "paranteze potrivite greşit (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Etichete invalide" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Etichete invalide <b>%s</b>\n" "\n" "Fişierele selectate nu suportă editarea acestor etichete." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Nu s-a putut edita piesa" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Şablonul introdus a fost invalid. Asiguraţi-vă că aţi introdus < şi > " "ca \\< şi \\> şi că parantezele sunt potrivite corect.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Editare afişare" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Număr piste" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Start _de la:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Total piste:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Pistă" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "şi alte %d..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Se salvează piesele modificate." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d din %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Şterge căutarea" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "O listă cu numele „%s” există deja." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "E_valuare" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Arată pe scurt informaţiile de utilizare" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Arată versiunea şi drepturile de autor" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Utilizare: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[opţiuni]" #: ../quodlibet/util/__init__.py:186 #, fuzzy, python-format msgid "Option %r not recognized." msgstr "E: Opţiunea „%s” nu a fost recunoscută." #: ../quodlibet/util/__init__.py:189 #, fuzzy, python-format msgid "Option %r requires an argument." msgstr "E: Opţiunea „%s” necesită un argument." #: ../quodlibet/util/__init__.py:192 #, fuzzy, python-format msgid "%r is not a unique prefix." msgstr "E: „%s” nu este un prefix unic." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Codare invalidă]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "fără_capitalizare" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Data trebuie introdusă în formatul „YYYY”, „YYYY-MM-DD” sau „YYYY-MM-DD HH:" "MM:SS”." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Normalizarea Replay Gain trebuie introdusă în format „x.yy dB”." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Vârfurile Replay Gain trebuie introduse în format „x.yy”." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "ID-urile MusicBrainz trebuie să fie în formatul UUID." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "Statusul de lansare MusicBrainz trebuie să fie „official” (oficial), " "„promotional” (promoţional) sau „bootleg” (ilegal)." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "aranjor" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "autor" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "compozitor" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "dirijor" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "contact" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "drepturi de autor" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "dată" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "descriere" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "gen" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "grupare" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "limbaj" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licenţă" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "locaţie" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "textier" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organizaţie" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "titlu" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "versiune" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "adresă internet" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "artist album" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disc" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "pistă" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "ID etichetă" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "dată iniţială de lansare" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "album iniţial" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "artist iniţial" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "dată de înregistrare" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "ţara de lansare" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "artist album" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "artişti" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "artist album" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "interpreţi" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "interpreţi" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "ID pistă MusicBrainz" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "ID pistă MusicBrainz" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "ID artist MusicBrainz" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "ID artist album MusicBrainz" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "ID TRM MusicBrainz" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "ID PUID MusicBrainz" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "Status album MusicBrainz" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "Tip album MusicBrainz" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "corecţie pistă" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "vârf pistă" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "corecţie album" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "vârf album" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Preferinţe" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "discuri" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "piste" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "ultima lansare" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "nume complet" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "punct de montare" #: ../quodlibet/util/tags.py:105 #, fuzzy msgid "errors" msgstr "interpreţi" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "persoane" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "an" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "dată iniţială de lansare" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "Favorite" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "format" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "textieri" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "aranjori" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "compozitori" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "dirijori" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "autori" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d secundă" msgstr[1] "%d secunde" msgstr[2] "%d de secunde" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minut" msgstr[1] "%d minute" msgstr[2] "%d de minute" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d oră" msgstr[1] "%d ore" msgstr[2] "%d de ore" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d zi" msgstr[1] "%d zile" msgstr[2] "%d de zile" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d an" msgstr[1] "%d ani" msgstr[2] "%d de ani" #~ msgid "_Browse Library" #~ msgstr "_Navigare în colecţie" #~ msgid "No eject command found." #~ msgstr "Nu s-a găsit comanda eject." #~ msgid "Unable to start web browser" #~ msgstr "Nu s-a putut porni navigatorul web" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Nu s-a găsit un navigator web. Setaţi variabila $BROWSER, sau asiguraţi-" #~ "vă că /usr/bin/sensible-browser există." #, fuzzy #~ msgid "Library Error" #~ msgstr "Navigator colecţie" #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Copiază către dispozitiv" #~ msgid "translator-credits" #~ msgstr "" #~ "Mugurel Tudor <mugurelu@gnome.ro>\n" #~ "Mişu Moldovan <dumol@gnome.ro>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Alte coloane pentru afişare, separate prin spaţii" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "_Continuă" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "Informaţii" #~ msgid "_Search:" #~ msgstr "_Caută:" #~ msgid "Search your library" #~ msgstr "Căutare în colecţie" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quodlibet@lists.sacredchao.net>\n" #~ "Drepturi de autor © 2004-2006 Joe Wreschnig, Michael Urman şi alţii\n" #~ "\n" #~ "Acesta este free software, vedeţi sursele pentru condiţiile de copiere. " #~ "Nu\n" #~ "se oferă NICI o garanţie, nici măcar pentru o POSIBILĂ COMERCIALIZARE sau " #~ "de\n" #~ "FOLOSIRE PENTRU UN SCOP ANUME.\n" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Mărime totală:" #~ msgid "Quod Libet Plugins" #~ msgstr "Module Quod Libet" #~ msgid "Color _search terms" #~ msgstr "Colorează termenii de _căutare" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Colorează căutările simple cu albastru, cele avansate cu verde şi cele " #~ "invalide cu roşu" #~ msgid "_Select" #~ msgstr "_Selectează" #~ msgid "Separators for splitting tags" #~ msgstr "Caractere pentru separarea etichetelor" #, fuzzy #~ msgid "Display" #~ msgstr "Editare afişare" #~ msgid "Quod Libet Preferences" #~ msgstr "Preferinţe Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "Nu a fost redat _astăzi" #~ msgid "Not Played in a _Week" #~ msgstr "Nu a fost redat de o _săptămână" #~ msgid "Not Played in a _Month" #~ msgstr "Nu a fost redat de o _lună" #~ msgid "B_ottom 40" #~ msgstr "_Ultimele 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "Cele mai rar redate 40 de piese (mai mult de 40 în anumite cazuri)" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #, fuzzy #~ msgid "Artist" #~ msgstr "_Artist" #, fuzzy #~ msgid "Date" #~ msgstr "_Dată" #~ msgid "Choose New Stations" #~ msgstr "Adăugare staţii noi" #~ msgid "Add" #~ msgstr "Adaugă" #, fuzzy #~ msgid "Bitrate" #~ msgstr "rată de biţi" #~ msgid "_Stations..." #~ msgstr "_Staţii..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Ieşire Quod Libet" #~ msgid "Unable to save library" #~ msgstr "Nu s-a putut salva colecţia" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Nu s-a putut reda piesa" #~ msgid "_Information" #~ msgstr "_Informaţii" #~ msgid "Sort by title" #~ msgstr "Sortează după titlu" #~ msgid "Sort by artist" #~ msgstr "Sortează după artist" #~ msgid "Lyrics provided by %s." #~ msgstr "Versuri furnizate de către %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Nu s-au găsit versuri salvate.\n" #~ "\n" #~ "Puteţi apăsa pe butonul „Caută” pentru a căuta versuri pe internet. Le " #~ "puteţi de asemenea introduce dumneavoastră, nu uitaţi să apăsaţi apoi " #~ "„Salvează”." #~ msgid "part" #~ msgstr "parte" #~ msgid "Opening audio device." #~ msgstr "Se deschide dispozitivul audio." #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d piese salvate" #~ msgid "MusicBrainz album ID" #~ msgstr "ID album MusicBrainz" #~ msgid "Loaded song library." #~ msgstr "S-a încărcat colecţia de piese." #~ msgid "Unable to open audio device" #~ msgstr "Nu s-a putut deschide dispozitivul audio" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "S-a încercat accesarea driver-elor „autosink” şi „%(sink)s” dar acestea " #~ "nu au putut fi deschise. Setaţi un pipelinel GStreamer schimbând linia\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "în ~/.quodlibet/config ." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Nu s-a găsit elementul GStreamer „filesrc”. Verificaţi instalarea " #~ "GStreamer." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer nu a putut încărca piesa selectată." ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/nb.po����������������������������������������������������������������������������0000644�0001750�0001750�00000247361�12173213426�015325� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Norwegian translation of Quod Libet 1.1 # Copyright (C) 2004-2007 Joe Wreschnig # This file is distributed under the same license as the Quod Libet package. # # Eirik Haatveit <haatveit@gmail.com>, 2007. msgid "" msgstr "" "Project-Id-Version: nb\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:31+0100\n" "Last-Translator: Eirik Haatveit <haatveit@gmail.com>\n" "Language-Team: Norwegian Bokmål\n" "Language: nb\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-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Lydtaggredigering" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Endre tagger i lydfiler" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Musikkspiller" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Hør på, bla gjennom, eller gjør endringer i din lydsamling" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Spiller" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Forhåndsvisning" #: ../exfalso.py:27 #, fuzzy msgid "an audio tag editor" msgstr "Lydtaggredigering" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "mappe" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Vis programmatiske tagger" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "beskrivelse" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Verdi" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Tagg" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Lydtaggredigering" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 msgid "Remove tags" msgstr "" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 msgid "Remove all tags" msgstr "" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filtrer på en taggverdi" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filtrer på en taggverdi" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Ingen tidsinformasjon" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Vis kortfattet bruksinformasjon" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> er ikke en gyldig adresse." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Sanger uten album" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Instillinger for albumliste" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Vis album_omslag" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Albumvisning" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d spor" msgstr[1] "%d spor" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disk" msgstr[1] "%d disker" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Ugyldig mønster" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Tittel" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artist" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Dato" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "sjanger" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Vurdering" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Sorter etter dato " #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Instillinger" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Albumliste" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Albumliste" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Alle album" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d album" msgstr[1] "%d album" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Vis album_omslag" msgstr[1] "Vis album_omslag" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Ukjent" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Ny kilde" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Skriv inn adressen til en lydkilde: " #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Lydkilder" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Lydkilder" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Last ned..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Last ned filer" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Last ned fil" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Klarte ikke å legge til kilde" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "Klarte ikke å legge til <b>%s</b>. Tjeneren kan være nede, eller adressen er " "kanskje ikke en lydkilde." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Bibliotekvisning" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d sang (%(time)s)" msgstr[1] "%(count)d sanger (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Ukjent" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Splitt til _flere verdier" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Tilpasset" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Instillinger for albumliste" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Filsystem" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Filsystem" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Klarte ikke å legge til sanger" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "De valgte filene kan ikke kopieres til andre sanglister, eller til køen." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Legg til i bibliotek" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Filtype ikke støttet" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Stasjonslister kan nå kun inneholde adresser til stasjoner, ikke andre " "stasjonslister eller spillelister. De følgende adressene kan ikke åpnes: \n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Klarte ikke å legge til stasjon" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Internettradio" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Last ned filer" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Ny stasjon" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Skriv inn adressen til en Internettradiostasjon:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "vurdering" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Internettradio" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Ny stasjon" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Ny stasjon" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Ny stasjon" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Ingen stasjoner funnet" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Ingen Internettradiostasjoner ble funnet på %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Alle de oppførte stasjonene er allerede i ditt bibliotek." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Fjern fra spillelisten" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Legg til spilleliste" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d stasjon" msgstr[1] "%(count)d stasjoner" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Enhetsegenskaper" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Enhet:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Ikke montert" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Monteringspunkt:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Navn:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Medieenheter" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Medieenheter" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Løs ut" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Gi nytt navn" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> brukt, <b>%s</b> tilgjengelig" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> er ikke tilkoblet." #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "Kopierer <b>%s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Klarte ikke å kopiere sang" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Det er ikke nok ledig plass til denne sangen." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "Klarte ikke å kopiere <b>%s</b>" #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Klarte ikke å slette sanger" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Sletter <b>%s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "Klarte ikke å slette <b>%s</b>." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Klarte ikke å slette sang" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Å løse ut <b>%s</b> mislyktes." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Klarte ikke å løse ut enhet" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Instillinger for rutevisning" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Alle" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Rutevisning" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Rutevisning" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Velg alle" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Importerer spilleliste.\n" "\n" "%d/%d sanger lagt til." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Ny spilleliste" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Skriv inn et navn til den nye mappen:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Ny spilleliste" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, fuzzy, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s og %(count)d til" msgstr[1] "%(title)s og %(count)d til" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Spillelister" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Spillelister" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Fjern fra spillelisten" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importer" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Klarte ikke å importere spilleliste" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet kan bare importere spillelister i formatene M3U og PLS." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Omstokket" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Klarte ikke å gi nytt navn til spillelisten" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importer spilleliste" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Deaktiver visning" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Deaktiver utforsker" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Søk i bibliotek" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Søk i bibliotek" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Begrens resultater" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Ukjent enhet" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "%r er ikke et unikt prefiks." #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "Ugyldig verdi" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Volumnivå (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Kopier _albumomslag" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Kombiner tagger med _flere verdier" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Tittel inkluderer _versjon" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "Album inkluderer _del" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modell:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Kapasitet:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Fastvare:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "Fjerner foreldreløst iPod-spor" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Klarte ikke å lagre iPod-database" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "iPod ikke klartgjort" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Vil du opprette en tom database på denne iPoden?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Filnavnmønster:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Fjern ubrukte omslag og mapper" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Filen ekisterer" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Skrive over <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Bibliotek" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Sjekker monteringspunkt" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Skanner bibliotek" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Skanner %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d sekund" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 #, fuzzy msgid "Output Error" msgstr "_Utdatalogg" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "Klarte ikke å åpne filer" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "Ugyldig verdi" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "Klarte ikke å opprette mappen" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet kjører allerede." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "For øyeblikket spilles ingen sang." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet kjører ikke." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Klarte ikke å skrive til %s. Fjerner den." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "musikkbibliotek og -spiller" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[valg]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Skriv ut den spillende sangen og avslutt" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Begynn avspilling med en gang" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Hopp til neste sang" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Hopp til forrige sang" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Start avspilling" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Pause avspilling" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Skift mellom avspilling/pause-modus" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Start avspilling" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Skru opp volumet" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Skru ned volumet" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Skriv ut spillerens status" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Skjul hovedvinduet" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Vis hovedvinduet" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Slå av/på hovedvinduets synlighet" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Fokusér på den kjørende spilleren" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Fjern aktive visningsfiltere" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "_Oppdater bibliotek" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Skriv ut den gjeldende spilleplanen" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Skriv ut innholdet i køen" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Avslutt Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Søk inni sangen som spilles av" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Velg eller veksle på avspillingsrekkefølgen" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Slå gjentagelse av, på, eller skift mellom disse" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Still inn volumet" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Søk i musikkbiblioteket" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "spørring" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Spill av en fil" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "kommando|filnavn" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Vurdér sangen som spilles av" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Velg visningsmodus for det gjeldende vinduet" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Åpne nytt visningsvindu" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Vis eller skjul køen" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Vis eller skjul hovedsanglisten" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtrer på en tilfeldig verdi" #: ../quodlibet.py:340 msgid "command|tag" msgstr "kommando|tagg" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtrer på en taggverdi" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tagg=verdi" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Sett en fil eller spørring i køen" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "filnavn" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Fjern en fil eller spørring fra køen" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Ugyldig argument for «%s»." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Prøv %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Støttede formater: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Lydenhet: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Begynnelse" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "–" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Tid" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Bokmerkenavn" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "mm:ss" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Bokmerker" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Ingen tidsinformasjon" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Verdi:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Lagrede verdier" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Rediger lagrede verdier..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Sanger" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Vis gjenværende tid" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Rediger bokmerker..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "_Sporkolonner" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "_Albumkolonner" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Stopp etter denne sangen" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtrer på en taggverdi" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Slett filer" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Flytt til papirkurven" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Slett denne filen permanent?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Slett disse filene permanent?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s og %(count)d annen..." msgstr[1] "%(title)s og %(count)d andre..." #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "Flytter %d/%d." #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Sletter %d/%d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Klarte ikke å lagre iPod-database" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Å løse ut <b>%s</b> mislyktes." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Klarte ikke å slette fil" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Å slette <b>%s</b> mislyktes." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Nedlastninger" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Filnavn" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Størrelse" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "_Kø" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "mønster" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Rediger lagrede verdier..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Forhåndsvisning" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Flere instillinger..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "mangler fra %d sang" msgstr[1] "mangler fra %d sanger" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "forskjellig på %d sang" msgstr[1] "forskjellig over %d sanger" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Splitt til _flere verdier" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Splitt disk ut av _album" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Splitt _versjon ut av tittel" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Splitt arrangør ut av ar_tist" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Splitt _utøver ut av artist" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Splitt _utøver ut av artist" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Splitt _versjon ut av tittel" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Legg til en tagg" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Tagg:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 msgid "ql-revert" msgstr "" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Rediger tagger" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Skriv" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Klarte ikke å legge til tagg" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Klarte ikke å legge til <b>%s</b>\n" "\n" "De valgte filene støtter ikke flere verdier." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Ugyldig tagg" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Ugyldig tagg <b>%s</b>\n" "\n" "De valgte filene støtter ikke redigering av denne taggen." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Taggen er kanskje ikke nøyaktig" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> ble endret mens programmet kjørte. Å lagre uten å oppdatere " "biblioteket kan overskrive endringer i sangen.\n" "\n" "Lagre denne sangen likevel?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Klarte ikke å lagre sangen" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Å lagre <b>%s</b> mislyktes. Filen kan være skrivebeskyttet, korrupt, eller " "det kan være at du ikke har rettigheter til å redigere den." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Ugyldig verdi" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Ugyldig verdi: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Programtillegg" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d sang" msgstr[1] "%d sanger" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso-instillinger" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Splitt _på:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Vis programmatiske tagger" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Taggredigering" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Mapper" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Ny mappe..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Velg alle undermapper" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Ny mappe" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Skriv inn et navn til den nye mappen:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Klarte ikke å opprette mappen" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Klarte ikke å slette mappen" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "av %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Disk %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Spor %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Legg til spilleliste" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Rediger visning..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Rediger _tagger" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Ingenting avspilles" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Fjern feilmeldinger" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Ingen sanger er valgt." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Ingen sanger" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informasjon" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Sangtekst" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Feil" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artist" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artister" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "utøvere" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Aldri" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d gang" msgstr[1] "%d ganger" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "lagt til" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "sist spilt" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "ganger spilt" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "hoppet over" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "vurdering" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbit/s" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "lengde" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "filstørrelse" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "modifisert" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitrate" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Fil" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d valgt" msgstr[1] "%d valgte" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Produsert av %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "utøver" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Spor utilgjengelig" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Sporliste" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d sang uten album" msgstr[1] "%d sanger uten album" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Valgt diskografi" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d sang uten artist" msgstr[1] "%d sanger uten artist" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "album" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Total lengde:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Total størrelse:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Filer" #: ../quodlibet/qltk/logging.py:12 #, fuzzy msgid "Output Log" msgstr "_Utdatalogg" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Last ned" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Ingen sangtekst funnet for denne sangen." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Søker etter sangtekst..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Klarte ikke å laste ned sangtekst." #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d stasjon" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Avvis taggendringer?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Taggene har blitt endret, men ikke lagret. Lagre disse filene, eller " "tilbakestill og avvis endringene?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "Ukjent" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "I rekkefølge" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_I rekkefølge" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Omstokket" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Vektet" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Etter vurdering" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Én sang" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Én sang" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Programtilleggfeil" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Programtillegg" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Vis _feil" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "versjon" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "Deaktiver visning" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Ingen programtillegg funnet" #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disk" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Spor" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "gruppering" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Filnavn" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Lengde" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Sangliste" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Hopp til den spillende sangen automatisk" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "" "Når den spillende sangen endres, vil den automatisk blit hoppet til i " "sanglisten" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Annet:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Rediger visning..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Synlige kolonner" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Tittel inkluderer _versjon" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Filnavn inkluderer _mappe" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Instillinger" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Utforskere" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Globalt filter:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "Stopp etter denne sangen" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Søk" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Når den spillende sangen endres, vil den automatisk blit hoppet til i " "sanglisten" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "_Vurdering" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Albumliste" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Pause avspilling" #: ../quodlibet/qltk/prefs.py:306 #, fuzzy msgid "Output Configuration" msgstr "_Utdatalogg" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "_Volumnivå (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "_Volumnivå (dB):" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "Volumjustering med _Replay Gain" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "Volumjustering med _Replay Gain" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Rediger tagger" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Avvis taggendringer?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "Lagre vurderinger og statistikk" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_E-post:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Vurderinger og statistikk vil bli satt til denne e-postadressen" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Ny stasjon" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "_Oppdater bibliotek" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "_Oppdater bibliotek" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Skann _mapper" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Ingen sanger" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Instillinger" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Egenskaper" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Kø" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Fjern alle sanger fra køen" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Tilfeldig" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Rekkefølge:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Gjenta" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Begynn spillelisten på nytt når den er ferdig" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Klarte ikke å legge til sanger" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> bruker en protokoll som ikke er støttet." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Musikk" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Legg til en mappe..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Legg til en fil..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Legg til en adresse..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Åpne nytt visningsvindu" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtere" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Aldri spilt" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "40 på _topp" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Kontroll" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Hopp til spillende sang" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Visning" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Hjelp" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "_Utdatalogg" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "_Fjern feilmeldinger" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Søk" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "_Oppdater bibliotek" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "_Gjenlast bibliotek" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtrer på _sjanger" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtrer på _artist" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filtrer på al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Tilfeldig _sjanger" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Tilfeldig _artist" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Tilfeldig al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Sang_liste" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Se etter endringer i biblioteket" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Laster inn alle sangene i biblioteket på nytt (dette kan ta lang tid)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "De 40 mest spilte sangene i biblioteket (det kan være mer enn 40 valgte, om " "det er flere som har vært hørt på like mange ganger)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Legg til en adresse" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Skriv inn adressen til en lydfil:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Klarte ikke å legge til adressen" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> er ikke en gyldig adresse." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Legg til musikk" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Overvåk denne mappen for nye sanger" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "Klarte ikke å legge til %s i biblioteket.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Klarte ikke å legge til sangen" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Erstatt mellomrom med _understreker" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Fjern _Windows-inkompatible tegn" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Fjern diakritiske merker" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Fjern tegn som ikke er en del av _ASCII" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Endre navn på filer" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Nytt navn" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "Vis _feil" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Fortsett" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Klarte ikke å endre navn på filen" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Å endre navn på <b>%s</b> til <b>%s</b> feilet. Kanskje målfilen allerede " "eksisterer, eller at du ikke har rettigheter til å lage den nye filen eller " "å fjerne den gamle." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Stien er ikke absolutt" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Mønsteret\n" "\t<b>%s</b>\n" "inneholder /, men starter ikke fra root. For å unngå feil navngivning av " "mapper, må du begynne mønsteret med / eller ~/." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Sanger plassert i disse mappene (separert med «:»), vil bli lagt til i " "biblioteket" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Velg mapper" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Lagrede verdier" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Rediger lagrede verdier..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Søk" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Grense:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Innflytelse" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtrer på %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "_Albumkolonner" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_Sporkolonner" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Albumkolonner" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_Personkolonner" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Datokolonner" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_Filkolonner" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "_Produksjonskolonner" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "Kolonne_instillinger..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "Kolonne_instillinger..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Legg til _køen" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Kopier til enhet" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Fjern fra spillelisten" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "_Sporkolonner" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "_Personkolonner" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "_Albumkolonner" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "_Datokolonner" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "_Filkolonner" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "_Produksjonskolonner" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Tagg:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Tilpasset" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Erstatt _understreker med mellomrom" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "Tittelversaliser taggene" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Splitt til flere _verdier" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Tagger fra sti" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Tagger erstatter de eksisterende" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Tagger legges til de eksisterende" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Mønsteret\n" "\t<b>%s</b>\n" "Er ugyldig. Det inneholder kanskje den samme taggen flere ganger, eller har " "ubalanserte parenteser (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Ugyldige tagger" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Ugyldige tagger <b>%s</b>\n" "\n" "De valgte filene støtter ikke redigering av disse taggene." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Klarte ikke å redigere sang" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Mønsteret du skrev inn er ugyldig. Pass på å skrive < og > som \\< " "og \\>, og se til at taggene er balanserte.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Rediger visning" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Spornummer" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Start fr_a:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Totalt antall:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Spor" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "og %d flere..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Lagrer sangene du endret." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d av %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Fjern søk" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "En spilleliste ved navnet %s eksisterer allerede." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "_Vurdering" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Vis kortfattet bruksinformasjon" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Vis versjon og opphavsrett" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Bruk: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[valg]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Kommandovalget %r gjenkjennes ikke." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "Kommandovalget %r krever et argument." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r er ikke et unikt prefiks." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Ugyldig tegnkoding]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "sjekk|tittelversaler" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Datoen må skrives inn i formatet «YYYY', 'YYYY-MM-DD», eller «YYYY-MM-DD hh:" "mm:ss»." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Replay Gain-forsterkninger må skrives inn i formatet «x.yy dB»." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Replay Gain-toppunkt må skrives inn i formatet «x.yy dB»." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz-IDer må være i UUID-formatet." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz-ugivelsesstatus må være «official», «promotional» eller " "«bootleg»." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "arrangør" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "opphavsmann" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "komponist" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "dirigent" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "kontakt" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "opphavsrett" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "dato" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "beskrivelse" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "sjanger" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "gruppering" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "språk" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "lisens" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "sted" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "sangtekstforfatter" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organisasjon" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "tittel" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "versjon" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "nettsted" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "album-artist" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disk" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "spor" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "katalognummer" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "original utgivelsesdato" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "originalt album" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "original artist" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "innspillingsdato" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "utgivelsesland" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "album-artist" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "artister" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "album-artist" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "utøvere" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "utøvere" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz spor-ID" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "MusicBrainz spor-ID" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "MusicBrainz artist-ID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz album-artist-ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM-ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP-PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz-albumstatus" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz-albumtype" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "sporforsterkning" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "sportoppunkt" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "albumforsterkning" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "albumtoppunkt" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Instillinger" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "disker" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "spor" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "sist startet" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "fullt navn" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "monteringspunkt" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "feil" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "personer" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "år" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "original utgivelsesdato" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "Bokmerker" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "format" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "sangtekstforfattere" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "arrangører" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "komponister" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "dirigenter" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "opphavsmenn" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d sekund" msgstr[1] "%d sekunder" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minutt" msgstr[1] "%d minutter" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d time" msgstr[1] "%d timer" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d dag" msgstr[1] "%d dager" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d år" msgstr[1] "%d år" #~ msgid "_Browse Library" #~ msgstr "_Utforsk bibliotek" #~ msgid "No eject command found." #~ msgstr "Ingen utløsningskommando funnet." #~ msgid "Unable to start web browser" #~ msgstr "Klarte ikke å starte nettleseren" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Klarte ikke å finne en nettleser. Angi $BROWSER-variabelen, eller sørg " #~ "for at /usr/bin/sensible-browser eksisterer." #, fuzzy #~ msgid "Library Error" #~ msgstr "Bibliotekvisning" #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Utdatalogg" #~ msgid "translator-credits" #~ msgstr "Eirik Haatveit" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Vis andre kolonner, separert av mellomrom" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "_Fortsett" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "Informasjon" #~ msgid "_Search:" #~ msgstr "_Søk:" #~ msgid "Search your library" #~ msgstr "Søk i biblioteket ditt" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quodlibet@lists.sacredchao.net>\n" #~ "Opphavsrett 2004-2007 Joe Wreschnig, Michael Urman, og andre\n" #~ "\n" #~ "Dette er fri programvare, se kildekoden for kopieringsbetingelser.\n" #~ "Det finnes INGEN garanti, ikke engang for SALGBARHET eller SKIKKETHET\n" #~ "FOR ET BESTEMT FORMÅL.\n" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Total størrelse:" #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet-programtillegg" #~ msgid "Color _search terms" #~ msgstr "Farg _søkebetingelser" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "Viser enkle søk i blått, avanserte i grønt, og ugyldige i rødt" #~ msgid "_Select" #~ msgstr "_Velg" #~ msgid "Separators for splitting tags" #~ msgstr "Separator for splitting av tagger" #, fuzzy #~ msgid "Display" #~ msgstr "Rediger visning" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet-instillinger" #~ msgid "Not Played To_day" #~ msgstr "Ikke spilt i _dag" #~ msgid "Not Played in a _Week" #~ msgstr "Ikke spilt på en _uke" #~ msgid "Not Played in a _Month" #~ msgstr "Ikke spilt på en _måned" #~ msgid "B_ottom 40" #~ msgstr "40 på _bunn" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "De 40 minst spilte sangene i biblioteket (det kan være mer enn 40 valgte, " #~ "om det er flere som har vært hørt på like mange ganger)" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | kontroll ]" #, fuzzy #~ msgid "Artist" #~ msgstr "_Artist" #, fuzzy #~ msgid "Date" #~ msgstr "_Dato" #~ msgid "Choose New Stations" #~ msgstr "Velg nye stasjoner" #~ msgid "Add" #~ msgstr "Legg til" #, fuzzy #~ msgid "Bitrate" #~ msgstr "bitrate" #~ msgid "_Stations..." #~ msgstr "_Stasjoner..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Avslutt Quod Libet" #~ msgid "Unable to save library" #~ msgstr "Klarte ikke å lagre biblioteket" #~ msgid "_Information" #~ msgstr "_Informasjon" #~ msgid "Sort by title" #~ msgstr "Sorter etter tittel" #~ msgid "Sort by artist" #~ msgstr "Sorter etter artist" #~ msgid "Lyrics provided by %s." #~ msgstr "Sangtekster fra %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Ingen sangtekst funnet\n" #~ "\n" #~ "Du kan trykke på «Last ned»-knappen for å få Quod Libet til å søke etter " #~ "sangtekster på nettet. Du kan også skrive dem inn selv, og trykke på " #~ "«Lagre»-knappen." #~ msgid "part" #~ msgstr "del " #~ msgid "Opening audio device." #~ msgstr "Åpner lydenhet." #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d sanger lagret" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainz album-ID" #~ msgid "Unable to open audio device" #~ msgstr "Klarte ikke å åpne lydenheten" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet forsøkte å få tilgang til «autosink»- og «%(sink)s»-driverene, " #~ "men klarte ikke å åpne dem. Velg din GStreamer-kommandokø ved å endre " #~ "linjen med\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "i ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet klarte ikke å finne GStreamer-elementet «filesrc». Kontroller " #~ "GStreamer-installasjonen din." �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/pt.po����������������������������������������������������������������������������0000644�0001750�0001750�00000323610�12173213426�015341� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Portuguese/Brazil translation of Quod Libet. # Copyright (C) 2004 Joe Wreschnig # This file is distributed under the same license as the Quod Libet package. # Alexandre Passos <alexandre.tp@gmail.com>, 2006. # Djavan Fagundes <djavan@comum.org>, 2010. msgid "" msgstr "" "Project-Id-Version: Quod Libet 0.23\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2010-06-15 09:00-0300\n" "Last-Translator: Djavan Fagundes <djavan@comum.org>\n" "Language-Team: Portuguese/Brazil <gnome-l10n-br@listas.cipspa.org.br>\n" "Language: pt_BR\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-Generator: Virtaal 0.5.2\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Editor de informações de músicas" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Editar informações em seus arquivos de som" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Reprodutor de músicas" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Ouça, navegue, ou edite sua coleção de músicas" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "_Pause" #: ../data/quodlibet.desktop.in.h:4 #, fuzzy msgid "Next" msgstr "_Next" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "Pre_vious" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "um editor de informações de músicas" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "diretório" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Mostrar etiquetas _programáticas" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Muitos erros" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "description" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Valor" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Etiqueta" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Editor de informações de músicas" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "_Remover Estação" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Remove tag selecionada" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filtrar por uma etiqueta" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filtrar por uma etiqueta" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Nenhuma informação de tempo" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Mostra breve instrução de uso" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> não é uma localização válida." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Músicas sem álbum" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Preferências da lista de álbuns" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Mostrar _capas" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "Bu_sca inline inclui pessoa" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Lista de álbuns" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d faixa" msgstr[1] "%d faixas" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disco" msgstr[1] "%d discos" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Padrão inválido" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Título" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artista" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Data" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "Gênero" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "N_ota" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Ordenar por:" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Preferências" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Lista de álbuns" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "Lista de á_lbuns" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Todos os álbuns" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d álbum" msgstr[1] "%d álbuns" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Mostrar _capas" msgstr[1] "Mostrar _capas" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Desconhecido" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Novo feed" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Entre a localização de um feed de áudio:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Feeds de áudio" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Feeds de áudio" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Download..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Baixar arquivos" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Baixar arquivo" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Impossível adicionar feed" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> não pôde ser adicionado. O servidor pode estar fora do ar, ou a " "localização pode não ser de um feed válido." #: ../quodlibet/browsers/audiofeeds.py:495 #, fuzzy, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" "Não foi possível importar python-feedparser, navegador de feeds de áudio " "desabilitado." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "O backend atual de áudio não suporta URLs, assim, o navegador de feeds de " "áudio está desabilitado." #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Navegador de biblioteca" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d música (%(time)s)" msgstr[1] "%(count)d músicas (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Desconhecido" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Divide em vári_os valores" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Personalizado" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Preferências da lista de álbuns" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Sistema de arquivos" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Sistema de arquivos" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Impossível copiar músicas" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Os arquivos selecionados não puderam ser copiados para outras listas de " "músicas ou para a fila de reprodução." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Adicionar à biblioteca" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Tipo de arquivo não suportado" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Listas de estações só podem conter localizações de estações, não outras " "listas de estações ou playlists. As seguintes localizações não puderam ser " "carregadas.\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Impossível adicionar estação" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Rádio via Internet" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Baixar arquivos" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Nova estação" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Favor entrar com a localização de uma estação de rádio via internet." #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "classificação" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "Rádio via _Internet" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Nova estação" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Nova estação" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Nova estação" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 #, fuzzy msgid "No Category" msgstr "Nenhuma categoria" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Nenhuma estação encontrada" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Nenhuma estação de rádio via internet foi encontrada em %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Todas as estações listadas já estão em sua biblioteca." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Remover da lista de reprodução" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Adicionar à lista de reprodução" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d estação" msgstr[1] "%(count)d estações" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Propriedades do aparelho" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Aparelho:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Não montado" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Ponto de montagem:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Nome:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Aparelhos externos" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Aparelhos externos" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Ejetar" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Renomear" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> usado, <b>%s</b> disponível" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> não está conectado." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "Copiando <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Impossível copiar a música" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Não existe espaço livre suficiente para essa música." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> não pôde ser copiado." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Impossível remover músicas" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Apagando <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> não pôde ser apagado." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Impossível apagar música" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Falha ao ejetar <b>%s</b> ." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Impossível ejetar aparelho" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" "Nenhum backend de dispositivo, assim o navegador de dispositivos multimídia " "está desabilitado." #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Preferências do navegador" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Todos" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Navegador" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Navegador" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Selecionar _todos" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Importando lista de reprodução.\n" "\n" "%(current)d/%(total)d músicas adicionadas." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Nova lista de reprodução" #: ../quodlibet/browsers/playlists.py:141 msgid "Enter a name for the new playlist:" msgstr "Digite o nome da nova lista de reprodução:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Nova lista de reprodução" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s e %(count)d mais" msgstr[1] "%(title)s e %(count)d mais" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Listas de reprodução" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "Listas de re_produção" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Remover da lista de reprodução" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importar" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Impossível importar lista de reprodução" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "" "Quod Libet só pode importar lista de reprodução nos formatos M3U e PLS." #: ../quodlibet/browsers/playlists.py:504 #, fuzzy msgid "Remove Duplicates" msgstr "Remove tag selecionada" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Embaralhado" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Impossível renomear lista de reprodução" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importar lista de reprodução" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Desabilitar navegador" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Desabilitar navegador" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Buscar na biblioteca" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Buscar na biblioteca" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Limitar resultados" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Aparelho desconhecido" #: ../quodlibet/devices/__init__.py:19 #, fuzzy, python-format msgid "Could not import %s, which is needed for device support." msgstr "" "Não foi possível importar o dbus-python, que é necessário para suporte a " "dispositivos." #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "%r não é um dispositivos com suporte." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: Não foi possível encontrar o media-player-info." #: ../quodlibet/devices/__init__.py:212 #, fuzzy, python-format msgid "%s: Could not find %s." msgstr "%s: Não foi possível encontrar o media-player-info." #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "Inicializando o backend de dispositivo." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "Tentando '%s'" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "Não foi possível conectar ao backend de dispositivo." #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Backend de dispositivos inicializado." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "Ganho de _Volume (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Mostrar _capas" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Combinar etiquetas com _múltiplos valores" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Título inclui _versão" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "Álbum inclui legenda do _disco" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modelo:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Capacidade:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "Removendo faixa órfã do iPod" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Impossível gravar biblioteca do iPod" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "iPod não-inicializado" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Você deseja criar uma base de dados vazia nesse iPod?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "Não foi possível importar python-gpod, suporte ao iPod desabilitado." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "Formato do _nome de arquivo:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Remover capas e diretórios não-utilizados" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Arquivo existe" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Sobrescrever <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Erro carregando %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Biblioteca" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Verificando pontos de montagem" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Lendo biblioteca" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Checando %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "O pipeline de saída do GStreamer usado para reprodução, como 'alsasink " "dispositivo=padrão'. Deixar em branco para pipeline padrão." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "Saída d_o pipeline:" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "1 second" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Erro de saída" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "O pipeline de saída do GStreamer não pôde ser inicializado. O pipeline deve " "ser inválido, ou o dispositivo deve estar em uso. Verifique as preferências " "de reprodução." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Impossível abrir arquivos de entrada" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "O GStreamer não possui elementos para manipular arquivos. Verifique suas " "configurações de instalação do GStreamer." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "Saída do pipeline do GStreamer inválida, tentando o padrão." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "Backend de áudio inválido" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "O backend de áudio %r não está instalado." #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Impossível criar saída de áudio" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "O dispositivo de áudio %r não foi encontrado. Verifique as suas " "configurações do Xine em ~/.quodlibet/config." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet já está em execução." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Nenhuma música está sendo tocada." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet não está em execução." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Impossível escrever em %s. Removendo." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "uma biblioteca e um reprodutor de músicas" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[opções]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Exibe a música que está tocando e sai" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Começar a tocar imediatamente" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Ir para a próxima música" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Ir para a música anterior" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Começar a tocar" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Pausar reprodução" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Altera o estado tocando/pausado" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Começar a tocar" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Aumenta o volume" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Diminui o volume" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Escreve o status (tocando/pausado)" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Oculta a janela principal" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Mostra a janela principal" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Altera a visibilidade da janela principal" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Focaliza o player que está rodando" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Remover filtros de navegador ativo" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Atualizar e re-escanear biblioteca" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Mostra a playlist atual" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Mostra conteúdo da fila" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Sair do Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Avança/retorna na música atual" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Define ou altera a ordem de reprodução" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Liga, desliga ou alterar o modo repetir" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Ajusta o volume" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Buscar na sua biblioteca" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "busca" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Reproduz um arquivo" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "nome_de_arquivo" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Avaliar música atual" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Editar o navegador atual" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Abre um novo navegador" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Mostrar ou ocultar a fila" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Mostrar ou ocultar a lista de músicas" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtrar por um valor aleatório" #: ../quodlibet.py:340 msgid "command|tag" msgstr "etiqueta" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtrar por uma etiqueta" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tag=valor" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Enfileirar um arquivo ou busca" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "nome de arquivo" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Desenfileirar um arquivo ou busca" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Argumento inválido para '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Tente %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Formatos suportados: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Dispositivo de som: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Início" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/A" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Tempo" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Nome do marcador" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Marcadores" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Nenhuma informação de tempo" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Valor:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Valores gravados" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Editar valores gravados..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Músicas" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Mostra tempo restante" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Editar marcadores..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "Cabeçalhos de Faixa" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "Cabeçalhos de á_lbuns" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Parar após essa música" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtrar por uma etiqueta" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Houve um erro" #: ../quodlibet/qltk/debugwindow.py:71 #, fuzzy, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Uma exceção ocorreu no Quod Libet. Um arquivo de dump foi salvo em <b>%s</b> " "ele ajudará você a depurar o erro. Por favor, encaminhe o erro para http://" "code.google.com/p/quodlibet/issues/list e anexe este arquivo ou inclua seu " "conteúdo. Este arquivo pode conter alguma informação de identificação sobre " "você e seu sistema, assim como a lista de arquivos recentes reproduzidos. Se " "isto não for aceitável para você envie <b>%s</b> no lugar e uma descrição do " "que você estava fazendo no momento.\n" "\n" "Quod Libet pode agora instável agora. Fechá-lo e reiniciá-lo é recomendado. " "Sua biblioteca irá ser salva." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Apagar arquivos" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Mover para a lixeira" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Permanentemente apagar este arquivo?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Permanently apagar estes arquivos?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s e %(count)d mais..." msgstr[1] "%(title)s e %(count)d mais..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "Movendo %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Apagando %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Impossível gravar biblioteca do iPod" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Falha ao ejetar <b>%s</b> ." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Impossível apagar arquivo" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Apagar <b>%s</b> falhou." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Downloads" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Nome de arquivo" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Tamanho" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "Enfileirada" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "Invalid Pattern" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Editar valores gravados..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Visualizar" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Mais opções..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "faltando em %d música" msgstr[1] "faltando em %d músicas" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "diferente em %d música" msgstr[1] "diferente em %d músicas" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Divide em vári_os valores" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Separar disco de á_lbum" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Separar _versão de título" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Separar arranjador de ar_tista" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Separar _intérprete de artista" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Separar _intérprete de artista" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Separar _versão de título" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Adicionar uma etiqueta" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "Etique_ta:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "ql-remove" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Editar etiquetas" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Escrever" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Impossível adicionar etiqueta" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Não é possível adicionar <b>%s</b>\n" "\n" "Os arquivos selecionados não suportam múltiplos valores." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Etiqueta inválida" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Etiqueta <b>%s</b> inválida\n" "\n" "Os arquivos selecionados não suportam a edição desta etiqueta." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Etiqueta pode não ser exata" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> mudou com o programa sendo executado. Gravar sem atualizar a " "biblioteca pode sobrescrever outras mudanças à música.\n" "\n" "Gravar mesmo assim?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Impossível gravar música" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Gravar <b>%s</b> falhou. O arquivo pode ser somente leitura, estar " "corrompido , ou você pode não ter permissão para editá-lo." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Valor inválido" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Valor inválido: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Plug-ins" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d música" msgstr[1] "%d músicas" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Preferências do Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Separar _em:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Mostrar etiquetas _programáticas" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Edição de etiquetas" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Pastas" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Nova pasta..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Selecionar todas as subpastas" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Nova pasta" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Entre com o nome da nova pasta:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Impossível criar pasta" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Impossível remover pasta" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "por %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Disco %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Faixa %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Adicionar à lista de reprodução" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Editar display..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Editar Etique_tas" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Não tocando" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "Limpar _erros" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Nenhuma música selecionada." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Nenhuma música" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informação" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Letras" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Erros" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artista" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artistas" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "intérpretes" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Nunca" #: ../quodlibet/qltk/information.py:243 #, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%(n)d vez" msgstr[1] "%(n)d vezes" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "adicionado" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "reproduzida pela última vez" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "reproduz" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "pula" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "classificação" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "duração" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "tamanho do arquivo" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "modificado" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "taxa de bits" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Arquivo" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d selecionado" msgstr[1] "%d selecionados" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Produzido por %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "intérprete" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Faixa indisponível" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Lista de faixas" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d música sem álbum" msgstr[1] "%d músicas sem álbum" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Discografia selecionada" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d música sem artista" msgstr[1] "%d músicas sem artistas" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "álbums" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Duração total:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Tamanho total:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Arquivos" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Registro de saída" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Download" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Letras dessa música não encontradas" #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Buscando letras..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Impossível baixar letras" #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "" "Você irá alterar a classificação de %d músicas.\n" "Você tem certeza que deseja continuar?" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d estação" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Descartar mudanças?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Tags foram mudadas, mas não gravadas. Gravar esses arquivos, ou reverter e " "descartar mudanças?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, fuzzy, python-format msgid "%d tasks running" msgstr "Quod Libet está rodando" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Desconhecido" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "Em ordem" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "Em _ordem" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Embaralhar" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Ponderado" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Ponderado" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Uma música" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Uma música" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Erros dos plug-ins" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Plug-ins" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Mostrar _erros" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "_Version" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Habilitado" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Desabilitado" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Nenhuma categoria" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Nenhum plug-in foi encontrado." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disco" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Faixa" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "agrupamento" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Ál_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Nome de arquivo" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "Du_ração" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Lista de músicas" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Pular automaticamente para a música atualmente sendo reproduzida" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "Quando a música reproduzida mudar, mostrá-la na lista" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Outros:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Editar display..." #: ../quodlibet/qltk/prefs.py:97 #, fuzzy msgid "Add or remove additional column headers" msgstr "Set and save column headers" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Colunas visíveis" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Bu_sca inline inclui pessoa" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Nome de arquivo inclui _pasta" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Preferências" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Navegadores" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Filtro global:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Procurar após digi_tar" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "Exibir resultados da pesquisa após o usuário parar de digitar." #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Buscar" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Confirmar _múltiplas classificações" #: ../quodlibet/qltk/prefs.py:236 #, fuzzy msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" "Pede confirmação antes de alterar a classificação de múltiplas faixas de uma " "vez" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Habilitar classificação de u_m clique" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Habilita a classificação clicando na coluna de classificação na lista de " "músicas" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Classificações" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "_Usar cantos arredondados nas miniaturas" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "Arredonda os cantos da imagem de miniatura da arte da capa. Pode requerer a " "reinicialização para funcionar." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Lista de álbuns" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Pausar reprodução" #: ../quodlibet/qltk/prefs.py:306 #, fuzzy msgid "Output Configuration" msgstr "Registro de saída" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "Se a informação de ganho de replay não está disponível para a música, coloca " "o volume neste valor." #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "Ganho de fall-back (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Ajusta o volume para todas as músicas para este valor, contanto que o " "resultado não será cortado" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "Ganho de pre-amp (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "Habilitar o ajuste de volume de ganho de _replay" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Ajuste de volume de ganho de reprodução" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Editar etiquetas" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Descartar mudanças?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Salvar _classificações e contagem de reproduções" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Email:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Notas e contagens de reproduções serão enviadas para esse email" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Nova estação" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "Atuali_zar biblioteca ao iniciar" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "Atuali_zar biblioteca" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Escanear _diretórios" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Nenhuma música" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Preferências" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Propriedades" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Fila de reprodução" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Remover todas as músicas da fila de reprodução" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "A_leatório" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Ordem:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Repetir" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Reiniciar a lista de reprodução quando acabado" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Impossível adicionar músicas" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> utiliza um protocolo não-suportado." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Música" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Adicionar uma pasta..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Adicionar um arquivo..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Adicionar um local..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Abre um novo navegador" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtros" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Nunca reproduzidas" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "40 _mais" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Controle" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Ir para a música atual" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Ver" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "A_juda" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "Registr_o de saída" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "_Causar um erro" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Buscar" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Atuali_zar biblioteca" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Re_carregar biblioteca" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtrar por _gênero" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtrar por _artista" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filtrar por ál_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "_Gênero aleatório" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "_Artista aleatório" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Ál_bum aleatório" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "_Lista de músicas" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Checar por mudanças na biblioteca" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Recarregar todas as músicas na biblioteca (isso pode demorar muito)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "As quarenta músicas mais tocadas (mais de quarenta podem ser escolhidas se " "houver empates)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Adicionar uma localização" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Entre a localização de um arquivo de som:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Impossível adicionar estação" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> não é uma localização válida." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Adicionar música" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Buscar nessa pasta por novas músicas" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s não pode ser adicionada à sua biblioteca.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Impossível adicionar música" #: ../quodlibet/qltk/ratingsmenu.py:20 #, fuzzy, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" "Você irá alterar a classificação de %d músicas.\n" "Você tem certeza que deseja continuar?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Comando inválido %r recebido." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Navegador desconhecido: %r" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Substituir espaços por _underscores" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Substituir caracteres incompatíveis com o _Windows" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Retirar _marcas diacríticas" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Substituir caracteres não-_ASCII" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Renomear arquivos" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Novo nome" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "Ignorar _todos os erros" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Continue" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Impossível renomear arquivo" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Renomear <b>%s</b> para <b>%s</b> falhou. Possivelmente o novo nome já está " "usado, ou você não tem permissão para criar o novo arquivo ou apagar o velho." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Caminho não é absoluto" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "O padrão\n" "\t<b>%s</b>\n" "contem / mas não começa do diretório raiz. Para evitar pastas com os nomes " "incorretos, inicie o seu padrão por / ou ~/." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Músicas nessas pastas (separadas por ':') serão adicionadas à sua biblioteca" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Selecionar diretórios" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Valores gravados" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Editar valores gravados..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Buscar" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limite:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Ponderado" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtrar em %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "Cabeçalhos de á_lbuns" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Cabeçalhos de Faixa" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "Cabeçalhos de á_lbuns" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "Cabeçalhos de _pessoas" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Cabeçalhos de _data" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Cabeçalhos de _filtros" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "Cabeçalhos de p_rodução" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "Per_sonalizar cabeçalhos" #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "Per_sonalizar cabeçalhos" #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Adicionar à _fila" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Copiar para o aparelho" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Remover da Biblioteca" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "Cabeçalhos de Faixa" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "Cabeçalhos de _pessoas" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "Cabeçalhos de á_lbuns" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "Cabeçalhos de _data" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "Cabeçalhos de _filtros" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "Cabeçalhos de p_rodução" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "Etique_ta:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Personalizado" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Substituir _underscores por espaços" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Valores dependentes da caixa do título" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "_Separar em múltiplos valores" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Etiquetas do caminho do arquivo" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Etiquetas substituem outras preexistentes" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Etiquetas são adicionadas a outras" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "O padrão\n" "\t<b>%s</b>\n" "é inválido. Possivelmente ele contem a mesma etiqueta mais de uma vez ou tem " "colchetes desbalanceados (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Etiquetas inválidas" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Etiquetas inválidas <b>%s</b>\n" "\n" "Os arquivos selecionados não suportam essas etiquetas." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Impossível editar música" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "O padrão inserido por você era inválido. Se lembre de colocar < e > " "como \\< e \\> e que as suas etiquetas são balanceadas.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Editar exibição" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Muitos erros" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Parando a reprodução pelo fato de haver %d erros em uma linha." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Números de faixa" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Começar _de:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "Faixas ao _todo:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Faixa" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "e %d mais..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Gravando as músicas alteradas." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d músicas salvas\n" "(%(remaining)s restando)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d de %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Limpar busca" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Uma lista de reprodução chamada %s já existe." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 #, fuzzy msgid "D: " msgstr "W: " #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "W: " #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Avisos" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "E: " #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Mostra breve instrução de uso" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Mostra versão e copyright" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Uso: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[opções]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Opção %r não reconhecida." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "Opção %r requer um parâmetro." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r não é um prefixo único." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Codificação Inválida]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "check|titlecase?" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 #, fuzzy msgid "No log available." msgstr "No information available" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "A data deve ser entrada nos formatos AAAA, AAAA-MM-DD ou AAAA-MM-DD HH:MM:SS." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Ganhos em ReplayGain devem ser inseridos no formato 'x.yy dB'." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Picos ReplayGain devem ser inseridos no formato x.yy." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "Identificadores MusicBrainz devem estar no formato UUID." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "Os status de release MusicBrainz devem ser 'official', 'promotional' ou " "'bootleg'" #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "álbum" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "arranjador" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "autor" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "compositor" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "condutor" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "contato" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "data" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "descrição" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "gênero" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "agrupamento" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "língua" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licença" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "localização" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "compositor" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organização" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "título" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "versão" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "site" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "artista do álbum" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "legenda do álbum" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disco" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "faixa" # label ID #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "identificador de rótulo" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "data original de lançamento" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "álbum original" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "artista original" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "data de gravação" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "país de origem" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "artista do álbum (ordenado)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "artistas (ordenado)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "álbum (ordenado)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "intérprete (ordenado)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "intérpretes (ordenado)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "ID de faixa MusicBrainz" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "ID de faixa MusicBrainz" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "ID de artista MusicBrainz" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "ID do álbum do artista no MusicBrainz" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "ID de TRM MusicBrainz" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "ID de álbum MusicBrainz" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "Tipo de álbum MusicBrainz" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "ganho da faixa" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "pico da faixa" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "ganho do álbum" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "pico do álbum" #: ../quodlibet/util/tags.py:88 msgid "reference loudness" msgstr "referência de loudness" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "discos" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "faixas" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "reproduzida pela última vez" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "nome completo" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "ponto de montagem" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "erros" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "pessoas" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "ano" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "data original de lançamento" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "favoritos" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "formato" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "letristas" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "arranjadores" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "compositores" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "condutores" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "autores" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d segundo" msgstr[1] "%d segundos" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuto" msgstr[1] "%d minutos" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d hora" msgstr[1] "%d horas" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d dia" msgstr[1] "%d dias" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d ano" msgstr[1] "%d anos" #~ msgid "_Browse Library" #~ msgstr "_Navegar pela biblioteca" #~ msgid "No eject command found." #~ msgstr "Nenhum comando para ejetar encontrado." #~ msgid "Unable to start web browser" #~ msgstr "Impossível abrir um navegador web" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Um navegador de internet não foi encontrado. Por favor, defina a variável " #~ "$BROWSER, ou garanta que /usr/bin/sensible-browser exista." #, fuzzy #~ msgid "Library Error" #~ msgstr "Navegador de biblioteca" #, fuzzy #~ msgid "_Output device:" #~ msgstr "Saída d_o pipeline:" #~ msgid "translator-credits" #~ msgstr "" #~ "Alexandre Passos <alexandre.tp@gmail.com>\n" #~ "Djavan Fagundes <djavan@comum.org>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Outras colunas a mostrar, separadas por espaços" #~ msgid "_Edit and Continue" #~ msgstr "_Editar e continuar" #, fuzzy #~ msgid "You are about to change the rating of %d song." #~ msgid_plural "You are about to change the rating of %d songs." #~ msgstr[0] "" #~ "Você irá alterar a classificação de %d músicas.\n" #~ "Você tem certeza que deseja continuar?" #~ msgstr[1] "" #~ "Você irá alterar a classificação de %d músicas.\n" #~ "Você tem certeza que deseja continuar?" #~ msgid "Confirm rating" #~ msgstr "Confirmar classificação" #~ msgid "_Search:" #~ msgstr "_Busca:" #~ msgid "Search your library" #~ msgstr "Busca na sua biblioteca" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quod-libet-development@googlegroups.com>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, e outros\n" #~ "\n" #~ "Este software é livre; veja o código fonte para as condições de " #~ "redistribuição. Não há\n" #~ "NENHUMA garantia; nem para COMERCIALIZAÇÃO ou UTILIDADE PARA UM PROPÓSITO " #~ "ESPECÍFICO.\n" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r não possui nenhum navegador." #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Tamanho total:" #~ msgid "%r doesn't contain any devices." #~ msgstr "%r não contém nenhum dispositivo." #~ msgid "%s: Could not import ctypes." #~ msgstr "%s: Não foi possível importar ctypes." #~ msgid "%s: Could not find media-player-info." #~ msgstr "%s: Não foi possível encontrar o media-player-info." #, fuzzy #~ msgid "Couldn't find module %s." #~ msgstr "%s: Não foi possível encontrar o media-player-info." #~ msgid "Quod Libet Plugins" #~ msgstr "Plug-ins do Quod Libet" #~ msgid "Color _search terms" #~ msgstr "Colorir itens da _busca" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Mostra buscas simples em azul, avançadas em verde, e inválidas em vermelho" #~ msgid "_Select" #~ msgstr "_Selecionar" #~ msgid "Separators for splitting tags" #~ msgstr "Separadores para as etiquetas" #, fuzzy #~ msgid "Display" #~ msgstr "Editar exibição" #~ msgid "Quod Libet Preferences" #~ msgstr "Preferências do Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "Não reproduzidas _hoje" #~ msgid "Not Played in a _Week" #~ msgstr "Não reproduzidas em uma _semana" #~ msgid "Not Played in a _Month" #~ msgstr "Não reproduzidas em um _mês" #~ msgid "B_ottom 40" #~ msgstr "40 m_enos" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "As quarenta músicas menos tocadas (mais de quarenta podem ser escolhidas " #~ "se houver empates)" #~ msgid "gtk-media-next" #~ msgstr "gtk-media-next" #~ msgid "gtk-media-previous" #~ msgstr "gtk-media-previous" #~ msgid "gtk-media-play" #~ msgstr "gtk-media-play" #~ msgid "gtk-media-pause" #~ msgstr "gtk-media-pause" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #~ msgid "Artist" #~ msgstr "Artista" #~ msgid "Date" #~ msgstr "Data" #~ msgid "Choose New Stations" #~ msgstr "Escolher novas estações" #~ msgid "Add" #~ msgstr "Adicionar" #~ msgid "Bitrate" #~ msgstr "Taxa de bits" #~ msgid "_Stations..." #~ msgstr "_Estações..." #~ msgid "Player" #~ msgstr "Reprodutor" #~ msgid "Quod Libet" #~ msgstr "Quod Libet" #~ msgid "Initializing audio backend (%s)" #~ msgstr "Inicializando backend de áudio (%s)" #~ msgid "Initializing main library (%s)" #~ msgstr "Inicializando biblioteca principal (%s)" #~ msgid "Unable to save library" #~ msgstr "Impossível gravar biblioteca" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Impossível tocar música" #~ msgid "" #~ "The audio output pipeline %r could not be created. Check your GStreamer " #~ "settings in ~/.quodlibet/config." #~ msgstr "" #~ "O pipeline de saída de áudio %r não pôde ser criado. Verifique suas " #~ "configurações do GStreamer em ~/.quodlibet/config." #~ msgid "pattern" #~ msgstr "padrão" #~ msgid "_Information" #~ msgstr "_Informação" #~ msgid "Sort by title" #~ msgstr "Ordenar por título" #~ msgid "Sort by artist" #~ msgstr "Ordenar por artista" #~ msgid "Lyrics provided by %s." #~ msgstr "Letras por %s" #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Nenhuma letra foi encontrada.\n" #~ "\n" #~ "Você pode clicar no botão Download para que Quod Libet busque por letras " #~ "das músicas na internet. Você pode digitá-las você mesmo e clicar em " #~ "gravar." #~ msgid "part" #~ msgstr "parte" #~ msgid "Opening audio device." #~ msgstr "Abrindo dispositivo de som." #~ msgid "Moving %d/%d." #~ msgstr "Movendo %d/%d." #~ msgid "Deleting %d/%d." #~ msgstr "Apagando %d/%d." #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d músicas gravadas" #~ msgid "MusicBrainz album ID" #~ msgstr "ID de álbum MusicBrainz" #~ msgid "Loaded song library." #~ msgstr "Biblioteca carregada." #~ msgid "Unable to open audio device" #~ msgstr "Impossível abrir dispositivo de som" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet tentou acessar os drivers 'autosink' e '%(sink)s' mas não foi " #~ "capaz de abrir nenhum deles. Escolhe a pipeline correta no seu GStreamer " #~ "mudando a linha\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "no seu arquivo ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet não conseguiu achar o elemento GStreamer 'filesrc'. Verificque " #~ "a sua instalação do GStreamer." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "O GStreamer não conseguiu carregar as músicas selecionadas." #, fuzzy #~ msgid "C_opy album covers" #~ msgstr "Mostrar _capas" #~ msgid "Unable to retag multiple values" #~ msgstr "Impossível alterar as tags de múltiplos valores" #~ msgid "Changing the name of a tag with multiple values is not supported." #~ msgstr "Mudar o nome de uma tag com valores múltiplos não é possível." #~ msgid "W: %s is not a QL song database." #~ msgstr "W: %s não é uma base de dados de músicas QL." #~ msgid "tag" #~ msgstr "tag" #~ msgid "Per-song (\"Radio\") volume adjustment" #~ msgstr "Ajuste por música (\"Radio\")" #~ msgid "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "Ajuste por álbum (\"Audiófilo\")" #~ msgid "_Volume Normalization" #~ msgstr "Normalização do _Volume" #~ msgid "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgstr "" #~ "Quod Libet está lendo a sua biblioteca. Isso pode demorar vários " #~ "minutos.\n" #~ "\n" #~ "%d músicas recarregadas\n" #~ "%d músicas removidas" #~ msgid "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgstr "" #~ "Quod Libet está procurando por músicas novas e adicionando-as à sua " #~ "biblioteca.\n" #~ "\n" #~ "%d músicas adicionadas" #~ msgid "No new stations" #~ msgstr "Nenhuma estação nova" #~ msgid "M3U playlists cannot be loaded." #~ msgstr "Playlists M3U não podem ser carregadas." #~ msgid "This station is already in your library." #~ msgstr "Essa estação já está em sua biblioteca." #~ msgid "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "by <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disc <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Track <tracknumber>>>" #~ msgstr "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "por <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disco <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Faixa <tracknumber>>>" #~ msgid "Tray Icon Preferences" #~ msgstr "Preferências do Ícone" #~ msgid "" #~ "Scroll wheel adjusts volume\n" #~ "Shift and scroll wheel changes song" #~ msgstr "" #~ "Roda do mouse ajusta volume;\n" #~ "Shift e roda do mouse troca de música" #~ msgid "" #~ "Scroll wheel changes song\n" #~ "Shift and scroll wheel adjusts volume" #~ msgstr "" #~ "Roda do mouse troca de música;\n" #~ "Shift e roda do mouse ajusta o volume" #, fuzzy #~ msgid "Scroll _Wheel" #~ msgstr "Roda do Mouse" #~ msgid "Tooltip Display" #~ msgstr "Mostrar Dicas" #~ msgid "Play _Order" #~ msgstr "_Ordem de Reprodução" #~ msgid "The library cannot be refreshed while Quod Libet is running." #~ msgstr "" #~ "A biblioteca não pode ser atualizada enquando Quod Libet está rodando." #~ msgid "Loading, scanning, and saving your library." #~ msgstr "Carregando, lendo e gravando a biblioteca." #~ msgid "Rescan your library and exit" #~ msgstr "Relê a sua biblioteca e sai" #~ msgid "" #~ "It looks like you are running Quod Libet right now. If you edit songs " #~ "also in Quod Libet's library while it is running, you may need to refresh " #~ "or re-add them.\n" #~ "\n" #~ "If you are not running Quod Libet, or are editing songs outside of its " #~ "library, you may ignore this warning." #~ msgstr "" #~ "Parece que você está usando o Quod Libet agora. Se você editar músicas " #~ "que também estão na biblioteca do Quod Libet enquanto ele está rodando, " #~ "você precisa mandar atualizá-las ou relê-las.\n" #~ "\n" #~ "Se você não está usando o Quod Libet, ou está editando músicas que não " #~ "estão em sua biblioteca, você pode ignorar esse aviso." #~ msgid "GStreamer status %r != %r" #~ msgstr "Status do GStreamer %r != %r" #~ msgid "_Pane %d:" #~ msgstr "_Painel %d:" #~ msgid "View and edit tags in the playing song" #~ msgstr "Ver e editar tags na música atual" #~ msgid "Double-click a tag value to change it, right-click for other options" #~ msgstr "Duplo-clique numa tag altera, botão direito dá opções" #~ msgid "Add a new tag" #~ msgstr "Adicionar nova tag" #~ msgid "Tag by Filename" #~ msgstr "Tag por arquivo" #~ msgid "The first letter of each word will be capitalized" #~ msgstr "A primeira letra de cada palavra estará em maiúsculas" #~ msgid "" #~ "Characters not allowed in Windows filenames (\\:?;\"<>|) will be replaced " #~ "by underscores" #~ msgstr "" #~ "Caracteres não permitidos em arquivos Windows (\\:?;\"<>|) serão " #~ "substituídos por underscores" #~ msgid "" #~ "Characters outside of the ASCII set (A-Z, a-z, 0-9, and punctuation) will " #~ "be replaced by underscores" #~ msgstr "" #~ "Caracteres não-ASCII (A-Z, a-z, 0-9, e pontuação básica) serão " #~ "substituídos por underscores" #~ msgid "Apply to these _files..." #~ msgstr "Aplicar a esses _arquivos..." #~ msgid "Path" #~ msgstr "Caminho" #~ msgid "Tray Preferences - Quod Libet" #~ msgstr "Preferências do Painel - Quod Libet" #~ msgid "E: You need GTK+ 2.6 and PyGTK 2.6 or greater." #~ msgstr "E: Você precisa de GTK+ 2.6 e PyGTK 2.6 ou mais recente." #~ msgid "E: You have GTK+ %s and PyGTK %s." #~ msgstr "E: Você tem GTK+ %s e PyGTK %s." #~ msgid "E: Please upgrade GTK+/PyGTK." #~ msgstr "E: Por favor, atualize GTK+/PyGTK." #~ msgid "%(different)s, %(missing)s" #~ msgstr "%(different)s, %(missing)s" #~ msgid "skip count" #~ msgstr "pular contagem" #~ msgid "Search Bar" #~ msgstr "Barra de Busca" #~ msgid "Play songs in random order" #~ msgstr "Tocas as músicas em ordem aleatória" #~ msgid "S_ong" #~ msgstr "Mú_sica" #~ msgid "_Choose randomly" #~ msgstr "_Escolher aleatoriamente" #~ msgid "Drag songs here to add them to the play queue" #~ msgstr "Arraste músicas para cá para adicioná-las à fila de reprodução" #~ msgid "" #~ "Deleting <b>%s</b> failed. Possibly the target file does not exist, or " #~ "you do not have permission to delete it." #~ msgstr "" #~ "Apagar <b>%s</b> falhou. Possivelmente o arquivo não existe, ou você não " #~ "tem permissão para apagá-lo." #~ msgid "No audio device found" #~ msgstr "Nenhum dispositivo de som encontrado" #~ msgid "" #~ "Quod Libet was unable to open your audio device. Often this means another " #~ "program is using it, or your audio drivers are not configured.\n" #~ "\n" #~ "Quod Libet will now exit." #~ msgstr "" #~ "Quod Libet não conseguiu abrir o seu dispositivo de som. Normalmente, " #~ "isso significa que outro programa está usando-o, ou os seus drivers de " #~ "som não estão configurados. \n" #~ "Quod Libet vai sair." #~ msgid "_New/Edit Playlist..." #~ msgstr "_New/Edit Playlist..." #~ msgid "New/Edit Playlist" #~ msgstr "New/Edit Playlist" #~ msgid "" #~ "Enter a name for the new playlist. If it already exists it will be opened " #~ "for editing." #~ msgstr "" #~ "Enter a name for the new playlist. If it already exists it will be opened " #~ "for editing." #~ msgid "All songs" #~ msgstr "All songs" #~ msgid "Turn shuffle off, on, or toggle it" #~ msgstr "Turn shuffle off, on, or toggle it" #~ msgid "Closing _minimizes to system tray" #~ msgstr "Closing _minimizes to system tray" #~ msgid "Performed by %s" #~ msgstr "Performed by %s" #~ msgid "arranged by %s" #~ msgstr "arranged by %s" #~ msgid "conducted by %s" #~ msgstr "conducted by %s" #~ msgid "composed by %s" #~ msgstr "composed by %s" #~ msgid "written by %s" #~ msgstr "written by %s" #~ msgid "Add songs to your library" #~ msgstr "Add songs to your library" #~ msgid "Visit the artist's website" #~ msgstr "Visit the artist's website" #~ msgid "Change volume" #~ msgstr "Change volume" #~ msgid "Supported formats:" #~ msgstr "Supported formats:" #~ msgid "" #~ "Invalid tag <b>%s</b>\n" #~ "\n" #~ "The files currently selected do not support editing this tag.Invalid tags " #~ "<b>%s</b>\n" #~ "\n" #~ "The files currently selected do not support editing these tags." #~ msgstr "" #~ "Invalid tag <b>%s</b>\n" #~ "\n" #~ "The files currently selected do not support editing this tag.Invalid tags " #~ "<b>%s</b>\n" #~ "\n" #~ "The files currently selected do not support editing these tags." #~ msgid "(shared across all %d songs)" #~ msgstr "(shared across all %d songs)" #~ msgid "(different across %d songs, missing from %d songs)" #~ msgstr "(different across %d songs, missing from %d songs)" #~ msgid "1 minute" #~ msgstr "1 minute" #~ msgid "1 hour" #~ msgstr "1 hour" #~ msgid "1 day" #~ msgstr "1 day" #~ msgid "An audio player and tag editor" #~ msgstr "An audio player and tag editor" #~ msgid "" #~ "If you have songs in directories that will not always be mounted (for " #~ "example, a removable device or an NFS shared drive), list those mount " #~ "points here. Files in these directories will not be removed from the " #~ "library if the device is not mounted." #~ msgstr "" #~ "If you have songs in directories that will not always be mounted (for " #~ "example, a removable device or an NFS shared drive), list those mount " #~ "points here. Files in these directories will not be removed from the " #~ "library if the device is not mounted." #~ msgid "" #~ "These characters will be used as separators when \"Split values\" is " #~ "selected in the tag editor" #~ msgstr "" #~ "These characters will be used as separators when \"Split values\" is " #~ "selected in the tag editor" #~ msgid "Initialized multimedia key support." #~ msgstr "Initialised multimedia key support." #~ msgid "1 track" #~ msgstr "1 track" #~ msgid "Adjust audio volume" #~ msgstr "Adjust audio volume" #~ msgid "Check for changes in the library made since the program was started" #~ msgstr "Check for changes in the library made since the program was started" #~ msgid "Set Rating" #~ msgstr "Set Rating" #~ msgid "1 time" #~ msgstr "1 time" #~ msgid "Add a new tag to the file" #~ msgstr "Add a new tag to the file" #~ msgid "Invalid date format" #~ msgstr "Invalid date format" #~ msgid "" #~ "Invalid date: <b>%s</b>.\n" #~ "\n" #~ "The date must be entered in YYYY or YYYY-MM-DD format." #~ msgstr "" #~ "Invalid date: <b>%s</b>.\n" #~ "\n" #~ "The date must be entered in YYYY or YYYY-MM-DD format." #~ msgid "_On-Screen Display" #~ msgstr "_On-Screen Display" #~ msgid "No on-screen display" #~ msgstr "No on-screen display" #~ msgid "Display OSD on the top" #~ msgstr "Display OSD on the top" #~ msgid "Display OSD on the bottom" #~ msgstr "Display OSD on the bottom" #~ msgid "Select a color for the OSD" #~ msgstr "Select a colour for the OSD" #~ msgid "Select a second color for the OSD" #~ msgstr "Select a second colour for the OSD" #~ msgid "Song _list" #~ msgstr "Song _list" #, fuzzy #~ msgid "[directory]" #~ msgstr "directory" #~ msgid "" #~ "Quod Libet - a music library and player\n" #~ "Options:\n" #~ " --help, -h Display this help message\n" #~ " --version Display version and copyright information\n" #~ " --refresh-library Rescan your song cache and then exit.\n" #~ " --print-playing Print the currently playing song.\n" #~ "\n" #~ " Player controls:\n" #~ " --next, --previous, --play-pause, --play, --pause\n" #~ " Change songs or pause/resume playing.\n" #~ " --volume +|-|0..100\n" #~ " Increase, decrease, or set the volume.\n" #~ " --shuffle 0|1|t, --repeat 0|1|t\n" #~ " Enable, disable, or toggle shuffle and repeat. \n" #~ " --query search-string\n" #~ " Make a new playlist from the given search.\n" #~ " --seek [+|-][HH:MM:]SS\n" #~ " Seek to a position in the current song.\n" #~ " --play-file filename\n" #~ " Play this file, adding it to the library if necessary.\n" #~ "\n" #~ "For more information, see the manual page (`man 1 quodlibet').\n" #~ msgstr "" #~ "Quod Libet - a music library and player\n" #~ "Options:\n" #~ " --help, -h Display this help message\n" #~ " --version Display version and copyright information\n" #~ " --refresh-library Rescan your song cache and then exit.\n" #~ " --print-playing Print the currently playing song.\n" #~ "\n" #~ " Player controls:\n" #~ " --next, --previous, --play-pause, --play, --pause\n" #~ " Change songs or pause/resume playing.\n" #~ " --volume +|-|0..100\n" #~ " Increase, decrease, or set the volume.\n" #~ " --shuffle 0|1|t, --repeat 0|1|t\n" #~ " Enable, disable, or toggle shuffle and repeat. \n" #~ " --query search-string\n" #~ " Make a new playlist from the given search.\n" #~ " --seek [+|-][HH:MM:]SS\n" #~ " Seek to a position in the current song.\n" #~ " --play-file filename\n" #~ " Play this file, adding it to the library if necessary.\n" #~ "\n" #~ "For more information, see the manual page (`man 1 quodlibet').\n" #~ msgid "" #~ "Quod Libet %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, and others\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE." #~ msgstr "" #~ "Quod Libet %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, and others\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE." #~ msgid "E: Unknown command line option: %s" #~ msgstr "E: Unknown command line option: %s" #~ msgid "%d:%02d:%02d" #~ msgstr "%d:%02d:%02d" #~ msgid "%d:%02d" #~ msgstr "%d:%02d" #~ msgid "" #~ "Ex Falso - an audio file tagger\n" #~ "Usage: %s [directory]\n" #~ "\n" #~ "For more information, see the manual page (`man 1 exfalso').\n" #~ msgstr "" #~ "Ex Falso - an audio file tagger\n" #~ "Usage: %s [directory]\n" #~ "\n" #~ "For more information, see the manual page (`man 1 exfalso').\n" #~ msgid "Quod Libet is free software licensed under the GNU GPL v2." #~ msgstr "Quod Libet is free software licensed under the GNU GPL v2." #~ msgid "Songs heard:" #~ msgstr "Songs heard:" #~ msgid "Listening" #~ msgstr "Listening" #~ msgid "%s and %d more - Properties" #~ msgstr "%s and %d more - Properties" #~ msgid "" #~ "No on-screen display\n" #~ "Display OSD on the top\n" #~ "Display OSD on the bottom" #~ msgstr "" #~ "No on-screen display\n" #~ "Display OSD on the top\n" #~ "Display OSD on the bottom" #~ msgid "" #~ "No volume adjustment\n" #~ "Per-song (\"Radio\") volume adjustment\n" #~ "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "" #~ "No volume adjustment\n" #~ "Per-song (\"Radio\") volume adjustment\n" #~ "Per-album (\"Audiophile\") volume adjustment" #~ msgid "Pause/resume the current song" #~ msgstr "Pause/resume the current song" #~ msgid "Perfor_mer" #~ msgstr "Perfor_mer" #~ msgid "Pick a random album from your library" #~ msgstr "Pick a random album from your library" #~ msgid "Pick a random artist from your library" #~ msgstr "Pick a random artist from your library" #~ msgid "Pick a random genre from your library" #~ msgstr "Pick a random genre from your library" #~ msgid "Play _song" #~ msgstr "Play _song" #~ msgid "Play next song" #~ msgstr "Play next song" #~ msgid "Pre_vious song" #~ msgstr "Pre_vious song" #~ msgid "Select a font for the OSD" #~ msgstr "Select a font for the OSD" #~ msgid "_Part" #~ msgstr "_Part" #~ msgid "Pause _song" #~ msgstr "Pause _song" #~ msgid "_About" #~ msgstr "_About" #~ msgid "xx minutes, " #~ msgstr "xx minutes, " ������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/es.po����������������������������������������������������������������������������0000644�0001750�0001750�00000321677�12173213426�015340� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Spanish translation of Quod Libet # Copyright (C) 2010 Johám-Luís Miguéns Vila # This file is distributed under the same license as the Quod Libet package. # Contacta conmigo para: # - Indicar errores, comentarios, sugerencias sobre la traducción. # - Colaborar / tomar el relevo en la misma. # Johám-Luís Miguéns Vila <galiza.ceive@gmail.com>, 2005-2010. # msgid "" msgstr "" "Project-Id-Version: QuodLibet dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2010-02-15 18:25+0100\n" "Last-Translator: Johám-Luís Miguéns Vila <galiza.ceive@gmail.com>\n" "Language-Team: Spanish <LL@li.org>\n" "Language: es\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" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Editor de etiquetas de audio" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Edita las etiquetas de tus archivos de música" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Reproductor de música" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Escucha, examina o edita tu colección de música" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Reproductor" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "Siguiente" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Prever" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "un editor de etiquetas de audio" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "ruta" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "Error al abrir el archivo: %r" #: ../operon.py:114 msgid "List tags" msgstr "Mostrar las etiquetas" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "Mostrar salida para depuración" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "Columnas y orden de disposición en el modo depuración (%s)" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Mostrar _mensajes adicionales para depuración" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "Sin argumentos suficientes" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Demasiados errores" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "descripción" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Valor" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Etiqueta" #: ../operon.py:152 msgid "List all common tags" msgstr "Mostrar las etiquetas habituales" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "Mostrar todas las etiquetas en la salida estandard" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "Cargar las etiquetas extraídas con 'dump'" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "Mostrar los cambios, sin aplicarlos" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "Saltar las etiquetas que no se puedan escribir" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "Copiar las etiquetas de un archivo a otro" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "No se ha podido copiar la etiqueta %r al archivo: %r" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Editor de etiquetas de audio" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "Establecer una etiqueta y eliminar los valores existentes" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "No se ha podido establecer %r" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "_Eliminar la emisora" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "El valor es una expresión regular" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Eliminar la etiqueta seleccionada" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "No se puede combinar '--all' con '--regexp'" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "No se ha podido eliminar %r de %r" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filtro en un valor de las etiquetas" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filtro en un valor de las etiquetas" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "No existe información sobre la duración" #: ../operon.py:488 msgid "Extract embedded images" msgstr "Extraer las imágenes incrustadas" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "Renombrar los archivos según las etiquetas" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "Rellenar las etiquetas según la ruta al archivo" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "Rellenar los números de pista de todos los archivos" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "Mostrar las etiquetas basándose en el patrón indicado" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Muestra información sumaria sobre los distintos comandos" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> no es una dirección válida." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Canciones sin álbum" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Preferencias de la lista de álbumes" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Mostrar _carátulas" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "La _búsqueda incluye los \"componentes\"" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Vista de álbumes" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d pista" msgstr[1] "%d pistas" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disco" msgstr[1] "%d discos" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Patrón inválido" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Título" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artista" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "F_echa" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "Estilo" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Puntuación" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Ordenar _por:" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Preferencias" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Lista de álbumes" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "Lista de á_lbumes" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Todos los álbumes" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d álbum" msgstr[1] "%d álbumes" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Mostrar _carátulas" msgstr[1] "Mostrar _carátulas" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Desconocido" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Nueva fuente (feed)" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Introduce la direcciónde la fuente de audio (feed)" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Fuentes de audio" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "Fuentes de _audio" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Descargar..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Descargar archivos" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Descargar archivo" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "No ha sido posible añadir la fuente" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "No se ha podido añadir <b>%s</b>. Es posible que el servidor esté caido, o " "que la dirección no contenga una fuente de audio (feed)." #: ../quodlibet/browsers/audiofeeds.py:495 #, fuzzy, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" "No ha sido posible importar python-feedparser, el navegador de fuentes " "(feed) de audio ha sido desactivado." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "La infraestructura de sonido actual no admite URLs. El navegador de fuentes " "(feed) de audio ha sido desactivado." #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Navegador de la colección" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d canción (%(time)s)" msgstr[1] "%(count)d canciones (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Desconocido" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Extraer en valores _múltiples" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Personalizada" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "Unir" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Preferencias de la lista de álbumes" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "Colección de álbumes" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "_Colección de álbumes" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Sistema de archvos" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "Sistema de _archivos" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "No ha sido posible copiar las canciones" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Los archivos seleccionados no pueden ser copiados\n" "a otra lista ni a la cola de reproducción." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Añadir a la colección" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Tipo de archivo no admitido" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Las listas de emisoras sólo pueden contener la dirección de las mismas, no " "otra lista de emisoras o lista de reproducción. Las siguientes emisoras no " "han podido ser cargadas:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "No se ha podido añadir la emisora" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Radio por Internet" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Descargar archivos" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Nueva emisora" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Por favor, introduce la dirección de una emisora de radio por Internet" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "Electrónica" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "Hip Hop / Rap" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "Viejos éxitos" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "R&B" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "Japonesa" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "India" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "Religiosa" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "Éxitos" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "Turca" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "Regae / Baile" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "puntuación" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "Radio universitaria" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "Debate / Noticias" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "Ambiente" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "Jazz" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "Clásica" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "Pop" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "Alternativa" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "Metal" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "Country" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "Noticias" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "Schlager" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "Funk" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "Indie" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "Blues" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "Soul" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "Lounge" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "Punk" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "Reggaeton" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "Eslava" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "Griega" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "Gótica" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "Rock" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "Radio por _Internet" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Nueva emisora" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Nueva emisora" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Nueva emisora" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "Favoritos" #: ../quodlibet/browsers/iradio.py:528 #, fuzzy msgid "No Category" msgstr "Sin categoría" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "No se han encontrado emisoras" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "No se han encontrado emisoras en %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Todas las emisoras referidas ya se encuentran en tu colección." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Eliminar de la lista" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Añadir a la lista" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d emisora" msgstr[1] "%(count)d emisoras" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Propiedades del dispositivo" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Dispositivo:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "No montado" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Punto de montaje:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Nombre" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Dispositivos externos" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "Dispositivos _externos" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Expulsar" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Cambiar el nombre" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> utilizado, <b>%s</b> disponible" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> no está conectado." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "Copiando <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "No se ha podido copiar la canción" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "No hay espacio libre suficiente para esta canción" #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "No se ha podido copiar <b>%s<b>." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "No se han podido eliminar las canciones" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Eliminando <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "No ha podido eliminarse <b>%s</b>.." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "No se ha podido eliminar la canción" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Error al expulsar <b>%s</b>." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "No ha sido posible expulsar el dispositivo" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" "Sin infraestructura de dispositivos. El navegador de dispositivos ha sido " "desactivado." #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Preferencias de la vista por paneles" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Todo" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Vista en paneles" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Vista en paneles" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Seleccionar _todo" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Importando la lista de reproducción.\n" "\n" "%(current)d/%(total)d canciones añadidas." #: ../quodlibet/browsers/playlists.py:108 #, fuzzy, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "Estás a punto de eliminar la lista <i>%s</i>.\n" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" "Toda la información sobre la lista seleccionada será eliminada y no se podrá " "restaurar." #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "Las canciones duplicadas serán eliminadas de la lista '%s'." #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Nueva lista" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Introduce un nombre para la nueva carpeta" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Nueva lista" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s y %(count)d más" msgstr[1] "%(title)s y %(count)d más" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Listas" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Listas" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Eliminar de la lista" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importar" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "No ha sido posible importar la lista de reproducción" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "" "Quod Libet sólo puede importar listas de reproducción en los formatos M3U y " "PLS." #: ../quodlibet/browsers/playlists.py:504 #, fuzzy msgid "Remove Duplicates" msgstr "Eliminar la etiqueta seleccionada" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Aleatoriamente" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "No ha sido posible cambiar el nombre de la lista" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importar lista" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Desactivar el navegador" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Desactivar el Navegador" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Buscar en la colección" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Buscar en la colección" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Limitar resultados" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Dispositivo desconocido" #: ../quodlibet/devices/__init__.py:19 #, fuzzy, python-format msgid "Could not import %s, which is needed for device support." msgstr "" "No se ha podido importar la librería dbus-python, necesaria para la " "interacción con dispositivos externos" #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "%r no es un dispositivo admitido." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: no se ha podido encontrar media-player-info" #: ../quodlibet/devices/__init__.py:212 #, fuzzy, python-format msgid "%s: Could not find %s." msgstr "%s: no se ha podido encontrar media-player-info" #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "Activando la infraestructura de dispositivos." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "Intentando '%s'" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "No se ha podido conectar a una infraestructura de dispositivos" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "La infraestructura de dispositivos ha sido iniciada." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "Ganancia de _volumen (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Copiar las _carátulas del álbum" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Combinar las etiquetas con valores _múltiples" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "El título incluye la _versión" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "El álbum incluye el _subtítulo" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modelo:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Capacidad:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "Eliminando pistas huérfanas del iPod" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "No ha sido posible guardar la base de datos del iPod" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "iPod sin configurar" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Deseas crear una base de datos vacía en este iPod?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "" "No se ha podido importar python-gpod. La interacción con el iPod se ha " "desactivado." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "Patrón para el nombre de _archivo:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Eliminar las portadas de discos y las carpetas sin utilizar" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "El archivo ya existe" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Sobreescribir <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "Error al leer la carátula \"%s\"" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Error al cargar %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Colección" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Comprobando los puntos de montaje" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Analizando la colección" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Analizando %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "La infraestructura de salida GStreamer utilizada para la reproducción, e.g. " "'alsasink device=default'.\n" "Déjalo en blanco para utilizar la predeterminada." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "_Infraestructura de salida de sonido:" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d segundo" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "Duración del _buffer:" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "Stream" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "Llenando el buffer" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Error en la salida de audio" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "No ha podido ser iniciada la salida de GStreamer. Es posible que\n" "la configuración sea inválida o que el dispositivo esté siendo utilizado.\n" "Verifica las opciones de configuración." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "No ha sido posible abrir los archivos" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "GStreamer no tiene ningún elemento para leer archivos. Comprueba las " "opciones de instalación de GStreamer." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "Salida de GStreamer inválida, intentando la predeterminada." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "No se ha podido crear la pipeline GStreamer predefinida" #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "Infraestructura de sonido inválida" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "La infraestructura de sonido %r no está instalada" #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "No fue posible generar salida de audio" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "No se ha encontrado el dispositivo de sonido %r. Comprueba la configuración " "de Xine en ~/.quodlibet/config." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet ya está siendo ejecutado" #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "No se está a reproducir ninguna canción" #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet no está siendo ejecutado" #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "No ha sido posible escribir en %s. Eliminándolo." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "un gestor y reproductor de música" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[opciones]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Muestra la canción reproducida y termina" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Comenzar a reproducir de inmediato" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Saltar hasta la siguiente canción" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" "Ir a la canción anterior o reiniciar la actual si está próxima al comienzo" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Volver a la canción anterior" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Comenzar la reproducción" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Parar la reproducción" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Alternar reproducir y parar" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Comenzar la reproducción" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Subir el volumen" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Bajar el volumen" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Mostrar el estado del reproductor" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Esconder la ventana principal" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Mostrar la ventana principal" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Alternar la visibilidad de la ventana principal" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Centrarse en el reproductor" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Eliminar los filtros de navegación activos" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Actualizar y analizar de nuevo la colección" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Mostrar la lista de reproducción" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Mostrar las canciones en la cola de reproducción" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "Comenzar sin extensiones" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Salir de Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Avanzar en la canción activa" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Configurar o alternar el orden de reproducción" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Activar o desactivar el modo repetición" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Ajustar el volumen" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Buscar en la colección" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "búsqueda" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Reproducir un archivo" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "archivo" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Puntuar la canción activa" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Configurar el navegador actual" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Abrir un nuevo navegador" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Mostrar o esconder la cola de reproducción" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Mostrar o esconder la lista principal de canciones" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtro en un valor aleatorio" #: ../quodlibet.py:340 msgid "command|tag" msgstr "etiqueta" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtro en un valor de las etiquetas" #: ../quodlibet.py:341 msgid "tag=value" msgstr "etiqueta=valor" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Poner en cola un archivo o búsqueda" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "Añadir nombres de archivo separados por comas a la cola" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "nombre del archivo" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" "Mostrar los nombres de archivo de los resultados de la búsqueda en la salida " "estandard" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Eliminar de la cola un archivo o búsqueda" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Argumento inválido para '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Intenta %s --help" #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Formatos admitidos: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Dispositivo de sonido: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Comienzo" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/D" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Posición" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Nombre del marcador" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Marcadores" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "No existe información sobre la duración" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Valor:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Valores guardados" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Editar los valores guardados..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Canciones" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Mostrar el tiempo restante" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Editar los marcadores..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "Auto_mática" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "Cabeceras de _fichero" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "Cabeceras de _álbumes" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Parar después de esta canción" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtro en un valor de las etiquetas" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Ha ocurrido un error" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Quod Libet ha tenido un problema. Un archivo de depuración que nos puede " "ayudar a analizar el error ha sido guardado en <b>%s</b>.\n" "Por favor, crea un nuevo tema en http://code.google.com/p/quodlibet/issues/" "list y anexa dicho archivo o copia su contenido . \n" "Ese archivo puede contener información sobre tu sistema, tal como la lista " "de música reproducida recientemente. Si no deseas hacer\n" "pública dicha información envía el fichero <b>%s</b> con una descripción " "sobre lo que estabas haciendo." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" "Puede ser que QuodLibet esté inestable. Se recomienda cerrarlo y abrirlo de " "nuevo. Se guardará la colección." #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Eliminar los archivos" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Mover a la papelera" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "¿Eliminar definitivamente el archivo?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "¿Eliminar definitivamente los archivos?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s y %(count)d más..." msgstr[1] "%(title)s y %(count)d más..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "Moviendo %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Eliminando %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "No ha sido posible guardar la base de datos del iPod" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Error al expulsar <b>%s</b>." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "No se ha podido eliminar el archivo" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Ha ocurrido un error al eliminar <b>%s</b>." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Descargas" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Nombre del archivo" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Tamaño" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "En cola" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "patrón" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Editar los valores guardados..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Prever" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Más opciones..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "no fue encontrada de %d canción" msgstr[1] "no se hallaron de %d canciones" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "difiere a lo largo de %d canción" msgstr[1] "difieren a lo largo de %d canciones" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Extraer en valores _múltiples" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Extraer el disco del ál_bum" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Extraer la _versión del título" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Extraer el arreglista del ar_tista" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Extraer el _intérprete del artista" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Extraer el _intérprete del artista" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Extraer la _versión del título" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Añadir una etiqueta" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Etiqueta:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "Guardar" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "_Eliminar de la colección" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Editar etiquetas" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Guardar" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "No se ha podido añadir la etiqueta" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "No se ha podido añadir <b>%s</b>\n" "\n" "Los archivos seleccionados no permiten valores múltiples." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Etiqueta inválida" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Etiqueta inválida <b>%s</b>\n" "\n" "Los archivos seleccionados no permiten la edición de la etiqueta." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "La etiqueta puede no ser correcta" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "Se ha modificado <b>%s</b> mientras el programa estaba siendo ejecutado. Si " "se guardasen los cambios sin actualizar la colección podrían ser eliminadas " "otras modificaciones efectuadas.\n" "¿ Guardar de todos modos?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "No ha sido posible guardar la canción" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "No se ha podido guardar <b>%s</b>. Es posible que el archivo sea sólo de " "escritura, que esté corrupto o que no tengas permisos para editarlo." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Valor inválido" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Valor inválido: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Extensiones" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d canción" msgstr[1] "%d canciones" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Configuración de Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Extraer _de:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Mostrar _mensajes adicionales para depuración" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Edición de etiquetas" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Directorio" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "Nueva _carpeta..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "Seleccionar todas las carpetas subordinadas" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Nueva carpeta" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Introduce un nombre para la nueva carpeta" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "No se ha podido crear la carpeta" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "No se ha podido eliminar la carpeta" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "por %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Disco %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Pista %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Añadir a la lista" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Editar la vista..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Editar las _etiquetas" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Sin reproducción" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Eliminar errores" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "No se ha seleccionado canción alguna" #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Sin canciones" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Información" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Letra" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Errores" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artista" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artistas" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "intérpretes" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Nunca" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] " %d vez" msgstr[1] " %d veces" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "añadida" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "última reproducción" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "contador" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "saltada" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "puntuación" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "duración" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "tamaño" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "modificada" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "tasa de bits" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Archivo" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d seleccionada" msgstr[1] "%d seleccionadas" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Producido por %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "intérprete" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Pista no disponible" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Lista de pistas" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d canción sin álbum" msgstr[1] "%d canciones sin álbum" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Discografía seleccionada" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d canción sin artista" msgstr[1] "%d canciones sin artista" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "álbumes" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Duración total:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Tamaño total:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Archivos" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Registro" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Descargar" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "No se ha encontrado la letra de esta canción." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Buscando la letra de la canción..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "No ha sido posible descargar la letra." #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "" "Estás a punto de cambiar la puntuación de %d canciones.\\n\n" "Deseas continuar?" #: ../quodlibet/qltk/maskedbox.py:18 #, fuzzy msgid "The selected songs will be removed from the library." msgstr "Las canciones duplicadas serán eliminadas de la lista '%s'." #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d emisora" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "¿ Descartar las modificaciones en las etiquetas?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Las etiquetas se han modificado pero no han sido guardadas. ¿Guardar eses " "ficheros o revertir y descartar dichos cambios?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "Tareas activas" #: ../quodlibet/qltk/notif.py:183 #, fuzzy, python-format msgid "%d tasks running" msgstr "Quod Libet está siendo ejecutado" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Desconocido" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "En orden" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_En orden" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Aleatoriamente" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Dinámica" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Dinámica" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Una canción" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Una canción" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Errores en las extensiones" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Extensiones" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Mostrar _Errores" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "versión" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Activado" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Desactivado" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Sin categoría" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "No se ha encontrado extensión alguna" #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disco" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "Pis_ta" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "agrupación" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Ál_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "Nombre de _archivo" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "Durac_ión" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Lista de canciones" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Ir automáticamente a la canción reproducida" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "Cuando cambie la canción reproducida, centrar la lista en la misma." #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "Comportamiento" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Otras:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Editar la vista..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "Añadir o eliminar columnas de información adicional" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Columnas visibles" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "La _búsqueda incluye los \"componentes\"" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "El nombre incluye la _carpeta" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Preferencias" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" "Aplicar la configuración actual a la lista, añadiendo nuevas etiquetas al " "final" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "Columnas adicionales" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Navegadores" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "Filtro _globale:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "Aplicar esta búsqueda añadiéndola a las demás" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Buscar despues de _escribir" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "Mostrar los resultados después de terminar de escribir." #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Buscar" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Confirmar la puntuación _múltiple" #: ../quodlibet/qltk/prefs.py:236 #, fuzzy msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" "Solicitar confirmación antes de cambiar la puntuación de varias canciones a " "la vez" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Activar las puntuaciones con _un click" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Permitir las puntuaciones al hacer click en la columna de puntuaciones de la " "lista" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Puntuaciónes" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "_Utilizar esquinas redondeadas en las miniaturas de las imágenes" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "Redondear las esquinas de las imágenes correspondientes a las portadas de " "los discos.\n" "Puede ser necesario reiniciar la aplicación para que sea efectivo." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "Preferir la carátula _incrustada" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" "Elegir utilizar la carátula incrustada en el archivo de audio (si está " "disponible) antes que la tomada de otras fuentes" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "Nombre _forzoso de la imagen:" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "El nombre de la imagen de portada para utilizar al predeterminarlo" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Lista de álbumes" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Parar la reproducción" #: ../quodlibet/qltk/prefs.py:306 #, fuzzy msgid "Output Configuration" msgstr "Registro" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "Si no existe información sobre el ajuste Replay Gain para una canción,\n" "multiplicar el volumen por este valor" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "Ganancia por defecto (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Multiplicar el volumen de todas las canciones por este valor, siempre que el " "resultado no provoque cortes" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "Ganancia de _volumen (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "Activar el ajuste de volumen _replay gain" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Ajuste de volumen _replay gain" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Editar etiquetas" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "¿ Descartar las modificaciones en las etiquetas?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" "Guardar los cambios en las etiquetas sin confirmación individual al editar " "varios archivos" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" "Acceso a todas las etiquetas, incluso a aquellas generadas automáticamente, " "p.ej. las etiquetas MusicBrainz o ReplayGain" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" "Relación de separadores para utilizar al extraer valores de etiqueta. La " "lista está separa por espacios" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" "Factor de media _Bayesiana (C) para las puntuaciones agregadas.\n" "0 significa una media convencional, valores mayores implican que los álbumes " "con \n" "pocas pistas tendrán menores puntuaciones extremas. Al cambiar este valor se " "inicia un \n" "recálculo para todos los álbumes." #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "Cantidad de la media _Bayesiana:" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Guardar puntuaciones y co_ntadores" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "Correo _electrónico:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" "Las puntuaciones y los contadores se configurarán para esta dirección de " "correo-e" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Nueva emisora" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "A_ctualizar la colección al iniciar" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "Ac_tualizar la colección" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Analizar _Carpetas" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Sin canciones" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Preferencias" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Propiedades" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Cola de reproducción" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Elimina todas las canciones de la cola de reproducción" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "Aleato_rio" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Orden" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Repetir" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Reinicia la lista de reproducción al terminar" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "No ha sido posible añadir las canciones" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> utiliza un protocolo no permitido." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Música" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Añadir un directorio..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Añadir un archivo..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Añadir una dirección..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Abrir un nuevo navegador" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtros" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Nunca reproducidas" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "Añadidas _recientemente" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "40 más _eschuchadas" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Control" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Ir a la canción reproducida" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Ver" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Ayuda" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "_Salida del log" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "_Provocar un error" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "Ayuda en Internet" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Buscar" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Ac_tualizar la colección" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Rec_argar la colección" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtrar por _género" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtrar por _artista" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filtrar por ál_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "_Género aleatorio" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "_Artista aleatorio" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Ál_bum aleatorio" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "_Lista de canciones" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Buscar cambios en la colección" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "" "Recarga todas las canciones de tu colección (puede llevar bastante tiempo... " "un cafetito?)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "Las 40 canciones que más has escuchado (pueden mostrarse más de 40 si " "algunas se reproducieron el mismo número de veces)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Añadir una dirección" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Introduce la ubicación del archivo de audio" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "No ha sido posible añadir la dirección" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> no es una dirección válida." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Añadir música" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Monitorizar este directorio en busca de nuevas canciones" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s no se ha podido añadir a tu colección.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "No a sido posible añadir la canción" #: ../quodlibet/qltk/ratingsmenu.py:20 #, fuzzy, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" "Estás a punto de cambiar la puntuación de %d canciones.\\n\n" "Deseas continuar?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "Se cambiará la puntuación de todas las canciones seleccionadas a '%s'" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Se ha recibido el comando inválido %r." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "Error al ejecutar el comando %r, causado por: %r." #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Navegador desconocido %r." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Reemplazar los espacios con _guiones bajos" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Eliminar los caracteres incompatibles con _Windows" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Eliminar las marcas _diacríticas" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Eliminar los caracteres no-_ASCII" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "Utilizar únicamente caracteres en minúscula" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Cambiar el nombre del archivo" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Nuevo nombre" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "_Ignorar todos los errores" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Continuar" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "No ha sido posible cambiar el nombre del archivo" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Error al cambiar el nombre de <b>%s</b> a <b>%s</b>. Puede ser que ya exista " "el archivo de destino o que no tengas permiso para crear el nuevo fichero o " "eliminar el antiguo." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "La dirección no es absoluta" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "El patrón\n" "\t<b>%s</b>\n" "contiene / pero no comienza por root (/). Para evitar errores, comienza el " "patrón con / o ~/" #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Las canciones localizadas en estas carpetas (separadas por ':') serán " "añadidas a la colección" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Seleccionar Directorios" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Valores guardados" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Editar los valores guardados..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Buscar" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "Busca en tu colección, mediante texto o búsquedas QL" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "Lím_ite:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Importancia" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtrar por %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "Cabeceras de _álbumes" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Cabeceras de _fichero" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "Cabeceras de _álbumes" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "Cabeceras de los _componentes" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Cabeceras de la _fecha" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Cabeceras de _archivo" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "Cabeceras de la _producción" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Personalizar cabeceras..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Personalizar cabeceras..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Añadir a la _cola" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Copiar al dispositivo" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Eliminar de la Colección" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "Cabeceras de _fichero" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "Cabeceras de los _componentes" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "Cabeceras de _álbumes" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "Cabeceras de la _fecha" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "Cabeceras de _archivo" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "Cabeceras de la _producción" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Etiqueta:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "Ascendiente" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "Descendiente" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Personalizada" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Reemplazar _guiones bajos por espacios" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "C_on mayúscula inicial los valores resultantes" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Extraer en valores _múltiples" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Etiquetas a partir de la dirección" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Las etiquetas reemplazan a las existentes" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Las etiquetas se añaden a las existentes" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "El patrón\n" "\t<b>%s</b>\n" "es inválido. Es posible que contenga la misma etiqueta dos veces o que tenga " "paréntesis o llaves desemparejados (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Etiquetas inválidas" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Etiquetas inválidas <b>%s</b>\n" "\n" "Los archivos seleccionados no permiten la edición de etiquetas." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "No ha sido posible editar la canción" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "El patrón introducido es inválido. Asegúrate de introducir < y > " "como \n" "\\< y \\> y que las etiquetas estén bien ajustadas.\n" " \n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Editar la vista" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Demasiados errores" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Parando la reproducción porque se sucedieron %d errores consecutivos." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Números de pista" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Comienza de_sde:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "Pistas _totales:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Pista" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "y %d más..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Guardando las canciones modificadas..." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "Guardadas %(current)d/%(total)d canciones.\n" "(restan %(remaining)s)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d de %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Borrar la búsqueda" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Una lista de reproducción con nombre %s ya existe." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 #, fuzzy msgid "D: " msgstr "A:" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "Debug" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "A:" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Advertencias" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "E:" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Muestra información sumaria sobre los distintos comandos" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Muestra la versión y el copyright" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Utilización: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[opciones]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Opción %r no reconocida." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "La opción %r requiere un argumento." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r no es un prefijo único" #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Codificación inválida]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "La title case no se ajusta a las reglas del español." #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "General" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "Sin registros" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "La fecha ha de ser introducida en el formato 'AAAA', 'AAAA-MM-DD' o 'AAAA-MM-" "DD HH:MM:SS'" #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "" "Las ganancias Replay Gain han de ser introducidas en el formato 'x.yy dB'" #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Los picos Replay Gain han de ser introducidos en el formato 'x.yy'" #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "Los ID de MusicBrainz han de ser en el formato UUID" #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "La versión de MusicBrainz debe ser 'official', 'promotional' o 'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "El idioma ha de ser un código de tres letras ISO 639-2" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "álbum" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "arreglista" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "autor" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "compositor/a" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "director/a" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "contacto" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "fecha" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "descripción" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "estilo" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "agrupación" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "idioma" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licencia" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "ubicación" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "letrista" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "compañía" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "título" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "versión" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "página de Internet" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "artista del álbum" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "parte" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disco" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "pista" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "número de catálogo" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "fecha de publicación original" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "álbum original" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "artista original" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "fecha de grabación" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "país de publicación" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "artista del álbum (ordenar)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "artista (ordenar)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "álbum (ordenar)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "intérprete (ordenar)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "intérpretes (ordenar)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "ID MusicBrainz de la pista" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "ID MusicBrainz de la publicación" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "ID MusicBrainz del artista" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "ID MusicBrainz del artista del álbum" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "ID MusicBrainz del TRM" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "PUID de MusicIP" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "Estado del álbum según MusicBrainz" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "Tipo de álbum según MusicBrainz" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "ganancia de volumen de la pista" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "pico de ganancia de la pista" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "ganancia de volumen del álbum" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "pico de ganancia del álbum" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Preferencias" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "discos" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "pistas" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "comenzada por última vez" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "nombre completo" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "punto de montaje" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "errores" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "componentes" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "año" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "fecha de publicación original" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "marcador" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "formato" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "letristas" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "arreglistas" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "compositores/as" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "directores/as" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "autores" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d segundo" msgstr[1] "%d segundos" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuto" msgstr[1] "%d minutos" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d hora" msgstr[1] "%d horas" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d día" msgstr[1] "%d días" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d año" msgstr[1] "%d años" #~ msgid "_Browse Library" #~ msgstr "_Examinar la colección" #, fuzzy #~ msgid "" #~ "An exception has occured in Quod Libet. A dump file has been saved to <b >" #~ "%s</b> that will help us debug the crash. Please file a new issue at " #~ "http://code.google.com/p/quodlibet/issues /list and attach this file or " #~ "include its contents. This file may contain some identifying information " #~ "about you or your system, such as a list of recent files played. If this " #~ "is unacceptable, send <b>% s</b> instead with a description of whatyou " #~ "were doing." #~ msgstr "" #~ "Quod Libet ha tenido un problema. Un archivo de depuración que nos puede " #~ "ayudar a analizar el error ha sido guardado en <b>%s</b>.\n" #~ "Por favor, crea un nuevo tema en http://code.google.com/p/quodlibet/" #~ "issues/list y anexa dicho archivo o copia su contenido . \n" #~ "Ese archivo puede contener información sobre tu sistema, tal como la " #~ "lista de música reproducida recientemente. Si no deseas hacer\n" #~ "pública dicha información envía el fichero <b>%s</b> con una descripción " #~ "sobre lo que estabas haciendo.\n" #~ "\n" #~ "A partir de ahora Quod Libet puede volverse inestable. Se recomienda " #~ "salir del programa y ejecutarlo de nuevo. \n" #~ "Se guardará tu colección." #~ msgid "Could not import python-gpod, iPod support disabled." #~ msgstr "" #~ "No se ha podido importar python-gpod. La interacción con el iPod se ha " #~ "desactivado." #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Infraestructura de salida de sonido:" #~ msgid "Could not link GStreamer pipeline: '%s'" #~ msgstr "No se ha podido enlazar la pipeline GStreamer: '%s'" #~ msgid "Default" #~ msgstr "Predefinida" #~ msgid "_Search:" #~ msgstr "_Buscar" #~ msgid "Search your library" #~ msgstr "Buscar en la colección" #~ msgid "No eject command found." #~ msgstr "No se ha encontrado el comando para expulsar (eject)." #~ msgid "Unable to start web browser" #~ msgstr "No ha sido posible iniciar el navegador de Internet" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "No se ha encontrado un navegador de Internet. Por favor, configura la " #~ "variable $BROWSER o asegúrate de que /usr/bin/nombre_del_navegador existe." #, fuzzy #~ msgid "Library Error" #~ msgstr "Navegador de la colección" #~ msgid "translator-credits" #~ msgstr "ashtophet" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Mostrar otras columnas, separadas por espacios" #~ msgid "_Edit and Continue" #~ msgstr "_Editar y continuar" #, fuzzy #~ msgid "You are about to change the rating of %d song." #~ msgid_plural "You are about to change the rating of %d songs." #~ msgstr[0] "" #~ "Estás a punto de cambiar la puntuación de %d canciones.\\n\n" #~ "Deseas continuar?" #~ msgstr[1] "" #~ "Estás a punto de cambiar la puntuación de %d canciones.\\n\n" #~ "Deseas continuar?" #~ msgid "Confirm rating" #~ msgstr "Confirmar la puntuación" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quod-libet-development@googlegroups.com>\n" #~ "Copyright 2004-2010 Joe Wreschnig, Michael Urman, et alii\n" #~ "\n" #~ "Este programa es software libre; accede al código fuente para comprobar " #~ "las\n" #~ "condiciones de copia. No existe garantía alguna, ni siquiera de APTITUD " #~ "PARA EL\n" #~ "COMERCIO o de AJUSTARSE a alguna finalidad particular.\n" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r no contiene ningún navegador" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Tamaño total:" #~ msgid "%r doesn't contain any devices." #~ msgstr "%r no contiene ningún dispositivo." #~ msgid "%s: Could not import ctypes." #~ msgstr "%s: No se puede importar ctypes." #~ msgid "%s: Could not find media-player-info." #~ msgstr "%s: no se ha podido encontrar media-player-info" #, fuzzy #~ msgid "Couldn't find module %s." #~ msgstr "%s: no se ha podido encontrar media-player-info" #~ msgid "Quod Libet Plugins" #~ msgstr "Extensiones del Quod Libet" #~ msgid "Color _search terms" #~ msgstr "Colorear los términos de la _búsqueda" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Muestra las búsquedas simples en azul, las avanzadas en verde, y las " #~ "inválidas en rojo" #~ msgid "_Select" #~ msgstr "_Seleccionar" #~ msgid "Separators for splitting tags" #~ msgstr "Separadores para extraer las etiquetas" #, fuzzy #~ msgid "Display" #~ msgstr "Editar la vista" #~ msgid "Quod Libet Preferences" #~ msgstr "Preferencias de Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "No reproducidas ho_y" #~ msgid "Not Played in a _Week" #~ msgstr "No reproducidas en una s_emana" #~ msgid "Not Played in a _Month" #~ msgstr "No reproducidas en un _mes" #~ msgid "B_ottom 40" #~ msgstr "Úl_timas 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "Las 40 canciones que menos has escuchado (pueden mostrarse más de 40 si " #~ "algunas se reproducieron el mismo número de veces)" #~ msgid "gtk-media-next" #~ msgstr "_Siguiente" #~ msgid "gtk-media-previous" #~ msgstr "_Anterior" #~ msgid "gtk-media-play" #~ msgstr "_Reproducir" #~ msgid "gtk-media-pause" #~ msgstr "_Parar" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #~ msgid "Artist" #~ msgstr "Artista" #~ msgid "Date" #~ msgstr "Fecha" #~ msgid "Choose New Stations" #~ msgstr "Escoger nuevas emisoras" #~ msgid "Add" #~ msgstr "Añadir" #~ msgid "Bitrate" #~ msgstr "Tasa de bits" #~ msgid "_Stations..." #~ msgstr "_Emisoras..." #~ msgid "Quod Libet" #~ msgstr "Quod Libet" #~ msgid "Initializing audio backend (%s)" #~ msgstr "Activando la infraestructura de sonido (%s)" #~ msgid "Initializing main library (%s)" #~ msgstr "Cargando la colección principal (%s)" #~ msgid "Unable to save library" #~ msgstr "No ha sido posible guardar la colección" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Imposible añadir canción" #~ msgid "" #~ "The audio output pipeline %r could not be created. Check your GStreamer " #~ "settings in ~/.quodlibet/config." #~ msgstr "" #~ "No se ha podido crear la salida de audio %r. Comprueba la configuración " #~ "de GStreamer en ~/.quodlibet/config" #~ msgid "_Information" #~ msgstr "_Información" #~ msgid "Sort by title" #~ msgstr "Ordenar por título" #~ msgid "Sort by artist" #~ msgstr "Ordenar por artista" #~ msgid "Lyrics provided by %s." #~ msgstr "Letras obtenidas de %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "No se han encontrado las letras.\n" #~ "\n" #~ "Puedes hacer clic en el botón de descargar para que Quod Libet las busque " #~ "online. También las puedes introducir tú mism@ y guardarlas. " #~ msgid "Recommend" #~ msgstr "Recomendado" #~ msgid "_LastFM webservice URL: http://" #~ msgstr "URL del servicio _LastFM: http://" #~ msgid "The main url for lastfm webservices. Must end in a trailing /" #~ msgstr "La URL para acceder a los servicios lastfm. Debe terminar con un /" #~ msgid "LastFM _similar artist webservice: " #~ msgstr "Servicio LastFM de artistas _similares" #~ msgid "" #~ "Enter here the xml webservice lookup that gets appended to the main " #~ "service url" #~ msgstr "" #~ "Introduce aquí el fichero xml de búsqueda que se añade a la URL principal." #~ msgid "LastFM top _tracks webservice: " #~ msgstr "Canciones _más escuchadas en LastFM" #~ msgid "LastFM top _albums webservice: " #~ msgstr "Álbums más _escuchados en LastFM" #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d canciones guardadas" #~ msgid "part" #~ msgstr "parte" #~ msgid "Opening audio device." #~ msgstr "Accediendo al dispositivo de sonido" #~ msgid "MusicBrainz album ID" #~ msgstr "ID MusicBrainz del álbum" #~ msgid "Loaded song library." #~ msgstr "La colección fue cargada" #~ msgid "Unable to open audio device" #~ msgstr "Imposible acceder al dispositivo de audio" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet ha intentado acceder a los plugins 'autosink' y '%(sink)ss' " #~ "pero no ha podido utilizar ninguno de ellos. Configura el plugin de " #~ "GStreamer editando\n" #~ " <b>pipeline = %(sink)s</b>/nen ~/.quodlibet/config" #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet no ha podido encontrar el elemento 'filesrc' de GStreamer. " #~ "Verifica la instalación de GStreamer." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer no ha podido cargar la canción seleccionada" #~ msgid "Unable to retag multiple values" #~ msgstr "Imposible renombrar una etiqueta" #~ msgid "Changing the name of a tag with multiple values is not supported." #~ msgstr "" #~ "No se permite editar el nombre de una etiqueta con múltiples valores." #~ msgid "Select _recursively" #~ msgstr "Seleccionar _recursivamente" #~ msgid "Select Recursively" #~ msgstr "Seleccionar recursivamente" #~ msgid "Also select files from subdirectory when in file system view." #~ msgstr "" #~ "También seleccionará los ficheros de los subdirectorios en la vista de " #~ "sistema de ficheros" #~ msgid "File System View" #~ msgstr "Vista de sistema de ficheros" #~ msgid "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgstr "" #~ "Quod Libet está examinando tu colección. Este proceso puede demorar " #~ "varios minutos. \n" #~ "%d canciones recargadas\n" #~ "%d canciones eliminadas" #~ msgid "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgstr "" #~ "Quod Libet está examinando la colección y de haber nuevas canciones las \n" #~ "añadirá a la colección.\n" #~ "\n" #~ "%d canciones añadidas" #~ msgid "W: %s is not a QL song database." #~ msgstr "A: %s no es una canción de la colección del QL" #~ msgid "tag" #~ msgstr "etiqueta" #~ msgid "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "by <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disc <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Track <tracknumber>>>" #~ msgstr "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "por <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disco <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Pista <tracknumber>>>" #~ msgid "Per-song (\"Radio\") volume adjustment" #~ msgstr "Ajuste de voumen por canción (\"Radio\")" #~ msgid "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "Ajuste de volumen por álbum (\"Audiófilo\")" #~ msgid "_Volume Normalization" #~ msgstr "Normalización del _volumen" #~ msgid "No new stations" #~ msgstr "No existen emisoras nuevas" #~ msgid "M3U playlists cannot be loaded." #~ msgstr "Las listas M3U no pueden ser cargadas" #~ msgid "This station is already in your library." #~ msgstr "Esta emisora ya se encuentra en la Colección" #~ msgid "Tray Icon Preferences" #~ msgstr "Preferencias del Icono" #~ msgid "" #~ "Scroll wheel adjusts volume\n" #~ "Shift and scroll wheel changes song" #~ msgstr "" #~ "La rueda del ratón ajusta el volumen\n" #~ "Shift y la rueda del ratón cambia de canción" #~ msgid "" #~ "Scroll wheel changes song\n" #~ "Shift and scroll wheel adjusts volume" #~ msgstr "" #~ "La rueda del ratón cambia la canción\n" #~ "Shift y la rueda del ratón ajusta el volumen" #~ msgid "Scroll _Wheel" #~ msgstr "Rueda del _Ratón" #~ msgid "Tooltip Display" #~ msgstr "Editar vista" #~ msgid "Play _Order" #~ msgstr "_Orden de reproducción" #~ msgid "The library cannot be refreshed while Quod Libet is running." #~ msgstr "" #~ "La colección no puede ser actualizada mientras se está ejecutando el Quod " #~ "Libet" #~ msgid "Loading, scanning, and saving your library." #~ msgstr "Cargando, examinando y guardando su colección" #~ msgid "Rescan your library and exit" #~ msgstr "Actualiza tu colección" #~ msgid "Old Plugins" #~ msgstr "Extensiones antiguas" #~ msgid "" #~ "It looks like you are running Quod Libet right now. If you edit songs " #~ "also in Quod Libet's library while it is running, you may need to refresh " #~ "or re-add them.\n" #~ "\n" #~ "If you are not running Quod Libet, or are editing songs outside of its " #~ "library, you may ignore this warning." #~ msgstr "" #~ "Parece que estás ejecutandor Quod Libet. Si editas las canciones al mismo " #~ "tiempo en la colección de Quod Libet mientras se está ejecutando, nece-" #~ "sitarás actualizarla o añadirlas de nuevo.\n" #~ "\n" #~ "Si no estás ejecutando Quod Libet, o estás editando canciones que no " #~ "están en su colección, puedes ignorar esta advertencia." #~ msgid "GStreamer status %r != %r" #~ msgstr "Estado del GStreamer %r != %r" #~ msgid "_Pane %d:" #~ msgstr "_Panel %d:" #~ msgid "View and edit tags in the playing song" #~ msgstr "Ver y editar las etiquetas de la canción reproducida" #~ msgid "Double-click a tag value to change it, right-click for other options" #~ msgstr "" #~ "Haz doble-click en un valor de la etiqueta para modificarlo, clic \n" #~ "derecho para otras opciones." #~ msgid "Add a new tag" #~ msgstr "Añadir una nueva etiqueta" #~ msgid "Tag by Filename" #~ msgstr "Etiqueta a partir del nombre de fichero" #~ msgid "The first letter of each word will be capitalized" #~ msgstr "La primera letra de cada palabra será puesta en mayúsculas" #~ msgid "" #~ "Characters not allowed in Windows filenames (\\:?;\"<>|) will be replaced " #~ "by underscores" #~ msgstr "" #~ "Los caracteres que no son permitidos en los nombres de ficheros de " #~ "windows (\\:?;\"<>|) serán reemplazados por guiones bajos" #~ msgid "" #~ "Characters outside of the ASCII set (A-Z, a-z, 0-9, and punctuation) will " #~ "be replaced by underscores" #~ msgstr "" #~ "Los caracteres no incluidos en la especificación ASCII (A-Z, a-z, 09, y " #~ "los de puntuación) serán reemplazados por guiones bajos" #~ msgid "Apply to these _files..." #~ msgstr "Aplicar a estes _ficheros..." #~ msgid "Path" #~ msgstr "Ruta" #~ msgid "Tray Preferences - Quod Libet" #~ msgstr "Preferencias del icono - Quod Libet" #~ msgid "E: You need GTK+ 2.6 and PyGTK 2.6 or greater." #~ msgstr "E: Necesitas GTK+ 2.6 y PyGTK 2.6 o superior" #~ msgid "E: You have GTK+ %s and PyGTK %s." #~ msgstr "E: Tienes GTK+ %s y PyGTK %s." #~ msgid "E: Please upgrade GTK+/PyGTK." #~ msgstr "E: Por favor, actualiza GTK+/PyGTK" #~ msgid "Set play order" #~ msgstr "Establecer el orden de reproducción" #~ msgid "_Song" #~ msgstr "Canción" #~ msgid "" #~ "Deleting <b>%s</b> failed. Possibly the target file does not exist, or " #~ "you do not have permission to delete it." #~ msgstr "" #~ "La elminación de <b>%s</b> erró. Posiblemente el fichero no existe o no " #~ "tienes permisos para eliminarlo." #~ msgid "%(different)s, %(missing)s" #~ msgstr "%(different)s, %(missing)s" #~ msgid "skip count" #~ msgstr "saltar el contador" #~ msgid "Search Bar" #~ msgstr "Barra de búsqueda" #~ msgid "Play songs in random order" #~ msgstr "Reproduce las canciones en orden aleatorio" #~ msgid "S_ong" #~ msgstr "Canció_n" #~ msgid "_Choose randomly" #~ msgstr "_Escoger aleatoriamente" #~ msgid "Drag songs here to add them to the play queue" #~ msgstr "" #~ "Arrastra las canciones aquí para añadirlas a la cola de reproducción" #~ msgid "No audio device found" #~ msgstr "No se encontró dispositivo de sonido" #~ msgid "" #~ "Quod Libet was unable to open your audio device. Often this means another " #~ "program is using it, or your audio drivers are not configured.\n" #~ "\n" #~ "Quod Libet will now exit." #~ msgstr "" #~ "Quod Libet no pudo acceder a tu dispositivo de audio. Esto suele " #~ "significar que otro programa lo está utilizando o que los controladores " #~ "no están configurados. \n" #~ "\n" #~ "Quod Libet terminará ahora." �����������������������������������������������������������������quodlibet-3.0.2/po/gl.po����������������������������������������������������������������������������0000644�0001750�0001750�00000316212�12173213426�015320� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Ex Falso / Quod Libet galician translation # Copyright (C) 2005 Johám-Luís Miguéns Vila # Johám-Luís Miguéns Vila <galiza.ceive@gmail.com>, 2005 - 2010 # Galician: galego reintegracionista, seguindo as normas da Associaçom Galega da Língua <http://www.agalgz.org>. # msgid "" msgstr "" "Project-Id-Version: Quod Libet VC\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:34+0100\n" "Last-Translator: Johám-Luís Miguéns Vila <galiza.ceive@gmail.com>\n" "Language-Team: GALICIAN\n" "Language: gl\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-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Editor de etiquetas de áudio" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Editar as etiquetas dos arquivos de áudio" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Reprodutor de música" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Escoite, explore ou edite a sua colecçom de música" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "_Parar" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "Seguinte" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Antever" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "um editor de etiquetas de música" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "cartafol" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "Erro ao carregar o arquivo: %r" #: ../operon.py:114 msgid "List tags" msgstr "Mostrar as etiquetas" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "Mostrar saída de depuraçom" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "Colunas para serem mostradas e a sua orde no modo de depuraçom (%s)" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Mostrar informaçom para de_puraçom" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "Sem argumentos dabondo" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Demasiados erros" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "descriçom" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Valor" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Etiqueta" #: ../operon.py:152 msgid "List all common tags" msgstr "Mostrar todas as etiquetas habituais" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "Mostrar todas as etiquetas na saída estándard" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "Mostrar as etiquetas que arroja o 'dump'" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "Mostrar as mudanças, sem aplica-las" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "Saltar as etiquetas que nom se podem escrever" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "Copiar as etiquetas dum arquivo para outro" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "Nom se puido copiar a etiqueta %r para o arquivo: %r" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Editor de etiquetas de áudio" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "Estabelecer umha etiqueta e eliminar os valores anteriores" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "Nom se puido estabelecer %r" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "_Eliminar Emisora" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "O valor é umha expressom regular" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Eliminar a tag seleccionada" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "Impossível combinar '--all' com '--regexp'" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "Impossível eliminar %r de %r" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filtrar num valor da etiqueta" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filtrar num valor da etiqueta" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Sem informaçom sobre a duraçom" #: ../operon.py:488 msgid "Extract embedded images" msgstr "Extrair as imagens incrustadas" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "Mudar o nome dos arquivos a partires das etiquetas" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "Tirar as etiquetas da rota ao arquivo" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "Criar os números de pista para todos os arquivos" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "Mostrar as etiquetas baseadas no padrom indicado" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Mostra informaçom sumária sobre o modo de utilizaçom" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> nom é umha localizaçom válida." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Canções sem álbum" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Preferências da Lista de Álbuns" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Mostrar _cobertas dos discos" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "A procura _inclúi \"componentes\"" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Vista de álbuns" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d pista" msgstr[1] "%d pistas" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disco" msgstr[1] "%d discos" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Padrom inválido" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Título" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artista" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Data" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "Estilo" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Qualificaçom" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Ordenar _por:" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Preferências" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Lista de Álbuns" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "Lista de _Álbuns" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Todos os Álbuns" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d álbum" msgstr[1] "%d álbuns" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Mostrar _cobertas dos discos" msgstr[1] "Mostrar _cobertas dos discos" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Desconhecido" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Nova Fonte" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Por favor, introduça a localizaçom da fonte (feed):" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Fontes de Áudio (feeds)" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "Fontes de _Áudio (feeds)" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Baixar..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Baixar os arquivos" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Baixar o arquivo" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Non foi possível engadir a fonte" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> nom puido ser engadida. O servidor pode estar caído, ou o endereço " "pode nom ser o de umha fonte de áudio (feed)." #: ../quodlibet/browsers/audiofeeds.py:495 #, fuzzy, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" "Nom se puido importar o python-feedparser. Desactivou-se o navegador de " "fontes (feeds) " #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "A infraestrutura de áudio activa nom admite URLs. \n" "Desactivou-se o navegador de fontes (feeds)." #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Navegador da Colecçom" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d cançom (%(time)s)" msgstr[1] "%(count)d canções (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Desconhecido" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Extraer em valores _múltiplos" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Personalizada" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "Juntar" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Preferências da Lista de Álbuns" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "Colecçom de álbuns" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "_Colecçom de álbuns" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Sistema de arquivos" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "Sistema de _arquivos" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Nom foi possível copiar as canções" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Os arquivos seleccionados nom se puiderom copiar a outras listas de " "reproduçom ou à fileira" #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Engadir à Colecçom" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Tipo de arquivo nom admitido" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "As listas de emisoras só podem conter endereços de emisoras, nom outras " "listas de emisoras NEM listas de reproduçom. Os seguintes endereços nom " "puiderom ser carregados:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Nom foi possível engadir a emisora" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Radio por Internet" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Baixar os arquivos" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Nova Emisora" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Por favor, introduz o endereço dumha emisora por Internet" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "Electrónica" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "Hip Hop / Rap" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "Velhos sucessos" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "R&B" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "Japonesa" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "Índio" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "Religioso" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "Charts" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "Turca" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "Reggae / Baile" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "qualificaçom" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "Rádio universitária" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "Faladoiro / Notícias" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "Ambiente" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "Jazz" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "Clássica" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "Pop" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "Alternativa" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "Metal" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "Country" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "Notícias" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "Schlager" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "Funk" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "Indie" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "Blues" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "Soul" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "Lounge" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "Punk" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "Reggaeton" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "Eslava" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "Grega" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "Gótica" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "Rock" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "Radio por _Internet" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Nova Emisora" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Nova Emisora" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Nova Emisora" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "Prediletos" #: ../quodlibet/browsers/iradio.py:528 #, fuzzy msgid "No Category" msgstr "Sem categoria" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Nom se atopárom emisoras" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Nom se atopárom emisoras de radio por internet em %s" #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Todas as emisoras relacionadas já estám na sua colecçom" #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "Elimina_r da Lista" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Engadir à lista" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d emisora" msgstr[1] "%(count)d emisoras" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Propriedades do dispositivo" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Dispositivo:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Nom está montado" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Ponto de montagem:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Nome:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Dispositivos externos" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "Dispositivos _externos" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Expulsar" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Mudar o nome" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> utilizado, <b>%s</b> disponível" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> nom está conectado." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "A copiar <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Non foi possível copiar a cançom" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Nom há espaço livre de abondo para essa cançom." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> nom puido ser copiada." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Nom se puidérom eliminar as canções" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "A eliminar <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> nom se puido eliminar." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Non foi possível eliminar a cançom" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Erro ao expulsar <b>%s</b>." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Nom foi possível expulsar o dispositivo" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" "Sem sistema de infraestrutura de dispositivos, desactivou-se o navegador de " "dispositivos" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Preferências do Navegador em paneis" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Tudo" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Vista em paneis" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Vista em paneis" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Seleccionar _tudo" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "A importar a lista de reproduçom\\n\n" "\n" "%(current)d/%(total)d canções engadidas." #: ../quodlibet/browsers/playlists.py:108 #, fuzzy, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "Está a piques de apagar a lista <i>%s</i>.\n" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" "Toda a informaçom sobre a lista selecionada vai ser eliminada e nom se " "poderá repor" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "As canções duplicadas serám eliminadas da lista '%s'." #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Nova Lista" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Introduz um nome para o novo cartafol:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Nova Lista" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s e %(count)d mais" msgstr[1] "%(title)s e %(count)d mais" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Listas" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Listas" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "Elimina_r da Lista" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importar" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Non foi possível importar a lista" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "O Quod Libet só pode importar listas nos formatos M3U ou PLS." #: ../quodlibet/browsers/playlists.py:504 #, fuzzy msgid "Remove Duplicates" msgstr "Eliminar a tag seleccionada" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Aleatoriamente" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Non foi possível mudar o nome da lista" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importar lista" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Desactivar o Navegador" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Desactivar o Navegador" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Procurar na colecçom" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Procurar na colecçom" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Limitar os resultados" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Dispositivo desconhecido" #: ../quodlibet/devices/__init__.py:19 #, fuzzy, python-format msgid "Could not import %s, which is needed for device support." msgstr "" "Nom se puido importar a biblioteca dbus-python, necessária para\n" "a interacçom com os dispositivos." #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "%r nom é um dispositivo admitido." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: Nom se puido achar media-player-info." #: ../quodlibet/devices/__init__.py:212 #, fuzzy, python-format msgid "%s: Could not find %s." msgstr "%s: Nom se puido achar media-player-info." #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "A iniciar a infraestrutura de dispositivos." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "A tentar '%s'" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "Nom se puido conectar a unha infraestrutura gestora de dispositivos." #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Iniciou-se a infraestrutura de dispositivos." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "Ganância do _volume (dB)" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Copiar as _cobertas dos discos" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Combinar as etiquetas com múltiplos _valores" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "O título inclúi a _versom" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "O album inclúi o subtítulo do _disco / parte" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modelo:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Capacidade:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "A eliminar pista orfã do iPod" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Nom foi possível guardar a base de dados do iPod" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "iPod sem configurar" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Desejas criar umha base de dados baleira neste iPod?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "" "Nom se puido importar a biblioteca python-gpod,\n" "as capacidades de interacçom com o iPod fôrom desactivadas." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "Padrom para o _nome:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Eliminar cobertas e cartafoles nom utilizados" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "O arquivo já existe" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Sobreescrever <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "Erro ao ler a capa do álbum \"%s\"" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Erro ao carregar %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Colecçom" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "A comprovar os pontos de montagem" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "A analisar a colecçom" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "A analisar %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "A saída de GStreamer utilizada para a reproduçom, e.g. 'alsasink " "device=default'.\n" "Deixa-a em branco para utilizar a predeterminada." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "Infraestrutura de _saída:" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d segundo" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "Duraçom do _buffer:" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "Stream" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "A encher o buffer" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Erro na saída" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "Nom se puido iniciar a saída do GStreamer. Pode ser que a saída especificada " "seja inválida\n" "ou que o dispositivo esteja a ser utilizado. Verifique as configurações do " "reprodutor." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Nom se puiderom abrir os arquivos" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "O GStreamer nom tem nengum elemento para ler arquivos. Verifica as opções de " "instalaçom do GStreamer." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "Saida de GStreamer inválida, tentará-se com a predeterminada." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "Nom se puido criar a pipeline GStreamer predefinida." #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "A infraestrutura de som nom é válida" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "A infraestrutura de som %r nom está instalada." #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Non foi possível criar a saída de som" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Nom se atopou o dispositivo de som %r. Verifica as configurações do Xine em " "~/.quodlibet/config." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "O Quod Libet já se está a executar." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Nom se está a reproduzir cançom nengumha." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "O Quod Libet nom está a ser executado." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Nom foi possível escrever em %s. Eliminando-o." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "um gestor de música e reprodutor" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[opções]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Mostra a cançom que se está a reproduzir" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Começar a tocar imediatamente" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Ir à cançom seguinte" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "Saltar à cançom anterior ou, de estar próximo ao início, recomeçar" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Ir à cançom anterior" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Começar a reproduçom" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Parar a reproduçom" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Alternar entre reproduzir e parar" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Começar a reproduçom" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Aumentar o volume" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Diminuir o volume" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Mostrar o estado do reprodutor" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Agochar a fiestra principal" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Mostrar a fiestra principal" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Alternar entre mostrar e agochar a fiestra principal" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Centrar-se no reprodutor actual" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Eliminar os filtros de navegaçom activos" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Reler e actualizar a colecçom" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Mostrar a lista de reproduçom actual" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Mostrar o conteúdo da fileira" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "Começar sem extensões" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Sair do Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Avançar na cançom reproduzida" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Configurar ou alternar a ordem de reproduçom" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Activar ou desactivar o modo repetiçom" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Configurar o volume" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Procurar na colecçom" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "procura" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Reproduzir um arquivo" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "nome de arquivo" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Qualificar a cançom activa" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Configurar o navegador activo" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Abrir um novo navegador" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Mostrar ou agochar a fileira" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Mostrar ou agochar a lista principal" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtro num valor aleatório" #: ../quodlibet.py:340 msgid "command|tag" msgstr "etiqueta" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtrar num valor da etiqueta" #: ../quodlibet.py:341 msgid "tag=value" msgstr "etiqueta=valor" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Pôr na fileira un arquivo ou procura" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "Engadir à fileira nomes de arquivo separados por comas" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "nome do ficheiro" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "Mostrar na saída padrom os nomes de archivo dos resultados da procura" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Eliminar da fileira um arquivo ou procura" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Argumento inválido para '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Tenta %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Formatos admitidos: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Dispositivo de áudio: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Começo" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/D" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Intre" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Nome do marcador" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Marcadores" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Sem informaçom sobre a duraçom" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Valor:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Valores guardados" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Editar os valores guardados..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Canções" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Mostrar o tempo restante" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Editar os marcadores..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "Auto_mática" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "Cabeceiras dos _números de pista" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "Cabeceiras dos _álbuns" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Parar despois desta cançom" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtrar num valor da etiqueta" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Ocorreu un erro" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Ocorreu un problema no Quod Libet. Un arquivo de depuraçom, que nos pode " "ajudar a analisar o erro, foi guardado em <b>%s</b>. \n" "Por favor, abre un novo tema en http://code.google.com/p/quodlibet/issues/" "list e inclúi o arquivo ou o contido do mesmo. \n" "O arquivo pode conter informaçom do teu sistema, p.ex. unha lista das " "canções reproduzidas recentemente. \n" "Se isso nom for aceitável, envia <b>%s</b> com umha descriçom do que estavas " "a fazer." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" "QuodLibet pode ressultar inestável. Recomenda-se fechá-lo e reiniciá-lo.\n" "Guardará-se a colecçom." #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Eliminar os ficheiros" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Mover à Lixeira" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Eliminar permanentemente este arquivo?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Eliminar permanentemente estes arquivos?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s e %(count)d mais..." msgstr[1] "%(title)s e %(count)d mais..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "A mover %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "A eliminar %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Nom foi possível guardar a base de dados do iPod" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Erro ao expulsar <b>%s</b>." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Nom foi possível eliminar o arquivo" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Erro ao intentar eliminar <b>%s</b>." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Descargas" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Nome do ficheiro" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Tamanho" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "Na fileira" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "padrom" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Editar os valores guardados..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Antever" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Mais opções..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "nom se achou da cançom %d" msgstr[1] "nom se achou de %d canções" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "diferente em %d cançom" msgstr[1] "diferente em %d cançõess" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Extraer em valores _múltiplos" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Extraer o disco do _Álbum" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Extraer a _Versom do Título" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Extraer o Arrangista do Ar_tista" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Extraer o _Intérprete do Artista" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Extraer o _Intérprete do Artista" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Extraer a _Versom do Título" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Engadir umha etiqueta" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "E_tiqueta:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "Guardar" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "E_liminar" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Editar as etiquetas" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Guardar" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Nom foi possível engadir a etiqueta" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Nom foi possível engadir <b>%s</b>\n" "\n" "Os arquivos seleccionados nom permitem valores múltiplos." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Etiqueta inválida" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Etiqueta inválida <b>%s</b>\n" "\n" "Os arquivos seleccionados nom permitem a ediçom das etiquetas." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "A etiqueta pode nom ser correcta" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> mudou mentres o programa está a ser executado. Guardar sem reler a " "colecçom pode eliminar outras modificações que se figéram.\n" "\n" "Guardar de todos xeitos?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Nom foi possível guardar a cançom" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Erro ao guardar <b>%s</b>. Pode ser que o arquivo só permita a leitura, " "esteja corrompido, ou nom tenha permissões para o editar." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Valor inválido" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Valor inválido: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Extensões" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d cançom" msgstr[1] "%d canções" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Preferências do Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Extraer _de:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Mostrar informaçom para de_puraçom" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Ediçom das etiquetas" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Cartafoles" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "Novo _cartafol..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "Seleccionar todos os _cartafoles subordinados" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Novo Cartafol" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Introduz um nome para o novo cartafol:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Nom foi possível criar o cartafol" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Nom foi possível eliminar o cartafol" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "por %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Disco %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Pista %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Engadir à lista" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Editar a vista..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Editar as _etiquetas" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Parado" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Eliminar os erros" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Sem canções seleccionadas." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Sem Canções" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informaçom" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Letra" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Erros" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artista" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artistas" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "intérpretes" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Nunca" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d vez" msgstr[1] "%d vezes" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "engadida" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "última vez tocada" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "contador" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "saltada" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "qualificaçom" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "duraçom" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "tamaño do ficheiro" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "modificada" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "taxa de bits" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Arquivo" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d seleccionada" msgstr[1] "%d seleccionadas" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Produzido por %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "intérprete" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Pista nom disponível" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Lista de pistas" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d cançom sem album" msgstr[1] "%d canções sem album" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Discografia seleccionada" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d cançom sem artista" msgstr[1] "%d canções sem artista" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "álbuns" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Duraçom total:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Tamanho total:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Arquivos" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Saída do registro" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Baixar" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Nom se atopou a letra desta cançom" #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "A procurar a letra..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Nom se puido baixar a letra" #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "" "Está a piques de mudar as qualificações de %d canções.\n" "Deseja continuar?" #: ../quodlibet/qltk/maskedbox.py:18 #, fuzzy msgid "The selected songs will be removed from the library." msgstr "As canções duplicadas serám eliminadas da lista '%s'." #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d emisora" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Descartar as mudanças na etiqueta?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "As etiquetas fôrom mudadas mais nom guardadas. Guardar os ficheiros, ou " "desfazer e descartar as mudanças?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "Tarefas ativas" #: ../quodlibet/qltk/notif.py:183 #, fuzzy, python-format msgid "%d tasks running" msgstr "Quod Libet está a ser executado" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Desconhecido" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "Em Ordem" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_Ordenadamente" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Aleatoriamente" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Dinâmica" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Dinâmica" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Umha cançom" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Umha cançom" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Erros das extensões" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Extensões" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Mostrar os _erros" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "versom" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Activado" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Desactivado" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Sem categoria" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Nom se atopárom extensões." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disco" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Pista" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "agrupaçom" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Ál_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Nome" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "D_uraçom" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Lista de canções" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Ir à cançom reproduzida automaticamente" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "Centrar a lista na cançom reproduzida quando esta mudar" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "Comportamento" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Outros:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Editar a vista..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "Engadir ou eliminar colunas de informaçom adicionais." #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Colunas visíveis" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "A procura _inclúi \"componentes\"" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "O nome inclúi o _cartafol" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Preferências" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" "Aplicar a configuraçom actual á lista, engadindo novas colunas ao final" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "Colunas adicionais" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Navegadores" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "Filtro _global:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "Aplicar esta procura engadindo-a às demais" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Procurar despois de _escrever" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "Mostrar os resultados despois de rematar de escrever." #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Procurar" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Confirmar a _qualificaçom múltipla" #: ../quodlibet/qltk/prefs.py:236 #, fuzzy msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" "Obter confirmaçom antes de mudar a qualificaçom de várias canções à vez." #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Activar as qualificações com _um click" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Permitir mudar a qualificaçom com um click na coluna de qualificações da " "lista" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Qualificações" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "_Utilizar cantos redondeados nas miniaturas" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "Redondear os cantos das miniaturas das cobertas. Pode ser necessário " "reiniciar para que tenha efecto." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "Preferir as capas _integradas" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" "Escholhe utilizar as capas integradas no arquivo de áudio (quando estiverem " "disponíveis), com preferência sobre outras fontes" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "_Forçar o nome de arquivo da imagem:" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "O nome do arquivo da capa que se pretender forçar" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Lista de Álbuns" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Parar a reproduçom" #: ../quodlibet/qltk/prefs.py:306 #, fuzzy msgid "Output Configuration" msgstr "Saída do registro" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "De nom existir informaçom sobre o axuste Replay Gain para a cançom, " "multiplicar o volume por este valor" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "Ganância por defeito (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Multiplicar o volume de todas as canções por este valor, sempre que nom se " "produçam cortes" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "Ganância do _volume (dB)" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "_Activar o ajuste de volume do _Replay Gain" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Ajuste de volume do _Replay Gain" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Editar as etiquetas" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Descartar as mudanças na etiqueta?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" "Ao se editárem múltiplos arquivos, guardar as modificações às etiquetas sen " "solicitar confirmaçom individual" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" "Acesso a todas as etiquetas, mesmo as geradas automaticamente, p.ex. " "etiquetas da MusicBrainz ou Replay Gain" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" "Relaçom de separadores para diferenciar os valores das etiquetas, separados " "por espaços" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" "Factor de Média Bayesiana (C) para as qualificações agregadas.\n" "0 significa umha média convencional, valores máis elevados significam que os " "álbuns\n" "com poucas pistas terám menores qualificações estremas. Modificar este valor " "fai que se inicie\n" "o recálculo para todos os álbuns." #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "Quantidade da média _Bayesiana" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Guardar qualificações e o _contador" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Endereço de correio-e" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" "As qualificações e o contador determinarám-se para este endereço de correio-e" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Nova Emisora" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "Actualizar a colecçom ao iniciar" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "Ac_tualizar a colecçom" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Analisar os _cartafoles" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Sem Canções" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Preferências" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Propriedades" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Fileira" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Eliminar todas as canções da fileira" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "Aleató_rio" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Ordem:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Repetir" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Recomeçar a lista de reproduçom ao rematar" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Nom foi possível engadir as canções" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> emprega um protocolo nom admitido." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Música" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Engadir um Cartafol..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Engadir um arquivo..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Engadir umha localizaçom..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Abrir um novo navegador" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtros" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Nunca tocadas" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "Engadidas _recentemente" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Top 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Controis" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Ir à cançom reproduzida" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Ver" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Ajuda" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "_Registro" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "_Provocar um erro" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "Ajuda na Internet" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Procurar" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Ac_tualizar a colecçom" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Reler a colecçom" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtrar no e_stilo" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtrar no _artista" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filtrar no ál_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "E_stilo aleatório" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "_Artista aleatório" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Ál_bum aleatório" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "_Lista de canções" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Procurar mudanças na colecçom" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Reler todas as canções da sua colecçom (pode demorar moito tempo)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "As 40 canções mais tocadas (podem resultar mais se houverem canções " "reproduzidas um mesmo número de vezes)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Engadir umha localizaçom" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Por favor, introduça a localizaçom dum arquivo de música:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Nom foi possívell engadir a localizaçom" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> nom é umha localizaçom válida." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Engadir música" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Verificar a existência de novas canções no cartafol" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s nom se puido engadir à colecçom.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Nom foi possível engadir a cançom" #: ../quodlibet/qltk/ratingsmenu.py:20 #, fuzzy, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" "Está a piques de mudar as qualificações de %d canções.\n" "Deseja continuar?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "A qualificaçom de todas as canções seleccionadas mudará para '%s'" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Recebeu-se o comando inválido %r." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "Erro ao executar o comando %r, causado por: %r." #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Navegador desconhecido %r." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Reemprazar espaços com _guiões baixos" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Eliminar os caracteres nom compatíveis com _Windows(tm)" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Eliminar as marcas _diacríticas" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Eliminar os caracteres nom-_ASCII" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "Utilizar unicamente caracteres de caixa-_baixa" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Mudar o nome dos arquivos" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Novo nome" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "Ignorar todos os _erros" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Continuar" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Nom foi possível mudar o nome do arquivo" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Erro ao tentar mudar o nome de <b>%s</b> a <b>%s</b>. Pode ser que o arquivo " "de destino já exista, ou que nom tenha permissões para criar o novo arquivo " "ou eliminar o antigo." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "A rota nom é absoluta" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "O padrom\n" "\t<b>%s</b>\n" "contém / mais nom começa no cartafol pai (/). Para previr cartafoles com " "nomes errados, começa o padrom por / or ~/." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "As canções localizadas nesses cartafoles (separados por ':') serám engadidas " "à sua colecçom" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Seleccionar os cartafoles" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Valores guardados" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Editar os valores guardados..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Procurar" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "Procura na tua colecçom, empregando texto ou procuras do QL" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limite:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Importância" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtrar por %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "Cabeceiras dos _álbuns" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Cabeceiras dos _números de pista" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "Cabeceiras dos _álbuns" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_Cabeceiras dos _componentes" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Cabeçeiras de _data" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Cabeceira dos _arquivos" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "Cabeceiras da _produçom" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Personalizar as cabeceiras..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Personalizar as cabeceiras..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "En_gadir à fileira" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Copiar ao dispositivo" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Eliminar da Colecçom" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "Cabeceiras dos _números de pista" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "_Cabeceiras dos _componentes" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "Cabeceiras dos _álbuns" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "Cabeçeiras de _data" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "Cabeceira dos _arquivos" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "Cabeceiras da _produçom" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "E_tiqueta:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "Ascendente" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "Descendente" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Personalizada" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Reemprazar _guiões baixos com espaços" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Letras capitais nas etiquetas" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Dividir em _valores múltiplos" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Etiquetas a partires da rota" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "As etiquetas substituem as já existentes" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "As etiquetas engadem-se às já existentes" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "O padrom\n" "\t<b>%s</b>\n" "é inválido. Pode ser que contenha duas vezes a mesma etiqueta ou que tenha " "chaves dessajustadas(< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Etiquetas inválidas" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Etiquetas inválidas <b>%s</b>\n" "\n" "Os arquivos seleccionados nom permitem a ediçom das etiquetas." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Nom foi possível editar a etiqueta da cançom" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "O padrom introduzido é inválido. Assegure-se de que pus < e > como " "\\< e \\> e que as etiquetas estám ajustadas.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Editar a vista" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Demasiados erros" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "A parar a reproduçom porque se sucedérom %d erros seguidos." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Números de pista" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Começar de_nde:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Pistas totais:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Pista" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "e %d mais..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "A guardar as canções modificadas." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d canções guardadas\\n\n" "(%(remaining)s restantes)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d de %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Limpar a procura" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Xá existe umha lista co nome %s ." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 #, fuzzy msgid "D: " msgstr "A:" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "Debug" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "A:" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Advertências" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "E:" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Mostra informaçom sumária sobre o modo de utilizaçom" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Mostrar a versão e o copyright" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Utilizaçom: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[opções]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Nom se reconhece a opçom %r." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "A opçom %r requer um argumento." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r nom é um prefixo único." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Codificaçom inválida]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "Nom há titlecase em galego" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "Geral" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "Sem registros" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "A data há ser introduzida no formato 'YYYY', 'YYYY-MM-DD' ou 'YYYY-MM-DD HH:" "MM:SS'" #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "As ganâncias Replay Gain ham-de-ser introduzidas no formato 'x.yy dB'" #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Os picos ReplayGain ham-de-ser introduzidos no formato 'x.yy'" #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "As IDs das pistas MusicBrainz ham-de-ser no formato UUID." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "O estado oficial da publicaçom no MusicBrainz há ser 'official', " "'promotional' ou 'bootleg'" #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "O idioma tem de ser um código de três letras ISO 639-2" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "álbum" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "arrangista" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "autor/a" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "compositor/a" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "director/a" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "Contacto" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "data" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "descriçom" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "estilo" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "agrupaçom" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "idioma" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licença" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "endereço" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "autor da letra" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "companhia" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "título" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "versom" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "Sítio de Internet" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "artista do álbum" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "parte" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disco" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "pista" # label ID #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "Número de catálogo" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "data de publicaçom original" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "álbum original" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "artista original" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "data da gravaçom" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "país de publicaçom" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "artista do álbum (ordenar)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "artista (ordenar)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "álbum (ordenar)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "intérprete (ordenar)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "intérpretes (ordenar)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "ID do MusicBraniz da pista" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "ID do MusicBrainz do lançamento" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "ID do MusicBrainz do artista" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "ID do MusicBrainz do artista do album" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "ID do MusicBraniz do TRM" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "PUID do MUsicIP" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "Estado do álbum segundo MusicBrainz" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "Tipo de álbum segundo MusicBrainz" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "ganância de volume da pista" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "pico de ganância da pista" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "ganância de volume do âlbum" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "pico de ganância do álbum" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Preferências" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "discos" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "pistas" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "última vez iniciada" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "localizaçom" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "ponto de montagem" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "erros" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "componentes" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "ano" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "data de publicaçom original" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "marcador" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "Formato" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "Autores/as das letras" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "arrangistas" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "compositores/as" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "directores/as" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "autores/as" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d segundo" msgstr[1] "%d segundos" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuto" msgstr[1] "%d minutos" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d hora" msgstr[1] "%d horas" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d dia" msgstr[1] "%d dias" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d ano" msgstr[1] "%d anos" #~ msgid "_Browse Library" #~ msgstr "_Examinar a colecçom" #, fuzzy #~ msgid "" #~ "An exception has occured in Quod Libet. A dump file has been saved to <b >" #~ "%s</b> that will help us debug the crash. Please file a new issue at " #~ "http://code.google.com/p/quodlibet/issues /list and attach this file or " #~ "include its contents. This file may contain some identifying information " #~ "about you or your system, such as a list of recent files played. If this " #~ "is unacceptable, send <b>% s</b> instead with a description of whatyou " #~ "were doing." #~ msgstr "" #~ "Ocorreu un problema no Quod Libet. Un arquivo de depuraçom, que nos pode " #~ "ajudar a analisar o erro, foi guardado em <b>%s</b>. \n" #~ "Por favor, abre un novo tema en http://code.google.com/p/quodlibet/issues/" #~ "list e inclúi o arquivo ou o contido do mesmo. \n" #~ "O arquivo pode conter informaçom do teu sistema, p.ex. unha lista das " #~ "canções reproduzidas recentemente. \n" #~ "Se isso non é aceitável, envia <b>%s</b> com umha descriçom do que " #~ "estavas a fazer.\n" #~ "\n" #~ "O Quod Libet pode-se tornar agora inestável. Fecha-lo e executá-lo de " #~ "novo é o recomendado. A base de dados da sua coleçom guardará-se." #~ msgid "Could not import python-gpod, iPod support disabled." #~ msgstr "" #~ "Nom se puido importar a biblioteca python-gpod,\n" #~ "as capacidades de interacçom com o iPod fôrom desactivadas." #, fuzzy #~ msgid "_Output device:" #~ msgstr "Infraestrutura de _saída:" #~ msgid "Could not link GStreamer pipeline: '%s'" #~ msgstr "Nom puido ligar-se com a pipeline do GStreamer: '%s'" #~ msgid "Default" #~ msgstr "Predefinido" #~ msgid "_Search:" #~ msgstr "_Procurar:" #~ msgid "Search your library" #~ msgstr "Procurar na colecçom" #~ msgid "No eject command found." #~ msgstr "Nom foi encontrado o comando para expulsar (eject)." #~ msgid "Unable to start web browser" #~ msgstr "Nom foi possível iniciar um navegador de Internet" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Nom se atopu nengum navegador de Internet. Por favor, configure a " #~ "variável $BROWSER, ou verifique que /usr/bin/navegador existe." #, fuzzy #~ msgid "Library Error" #~ msgstr "Navegador da Colecçom" #~ msgid "translator-credits" #~ msgstr "ashtophet" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Outras colunas para seren mostradas, separadas por espaços" #~ msgid "_Edit and Continue" #~ msgstr "_Editar e continuar" #, fuzzy #~ msgid "You are about to change the rating of %d song." #~ msgid_plural "You are about to change the rating of %d songs." #~ msgstr[0] "" #~ "Está a piques de mudar as qualificações de %d canções.\n" #~ "Deseja continuar?" #~ msgstr[1] "" #~ "Está a piques de mudar as qualificações de %d canções.\n" #~ "Deseja continuar?" #~ msgid "Confirm rating" #~ msgstr "Confirmar a qualificaçom" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quod-libet-development@googlegroups.com>\n" #~ "Copyright 2004-2010 Joe Wreschnig, Michael Urman, et alii\n" #~ "\n" #~ "Este programa é Software Livre: aceda ao código fonte para verificar as " #~ "condições de cópia.\n" #~ "NOM HÁ garantia nemgumha; nem sequera de APTITUDE PARA O COMÉRCIO ou de " #~ "SER\n" #~ "AXEITADO PARA ALGUM PROPÓSITO PARTICULAR.\n" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r nom contém nengum navegador." #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Tamanho total:" #~ msgid "%r doesn't contain any devices." #~ msgstr "%r nom contém nengum dispositivo." #~ msgid "%s: Could not import ctypes." #~ msgstr "%s: Nom se puido importar o ctypes." #~ msgid "%s: Could not find media-player-info." #~ msgstr "%s: Nom se puido achar media-player-info." #, fuzzy #~ msgid "Couldn't find module %s." #~ msgstr "%s: Nom se puido achar media-player-info." #~ msgid "Quod Libet Plugins" #~ msgstr "Extensões do Quod Libet" #~ msgid "Color _search terms" #~ msgstr "Cores nos termos da _procura" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Mostrar as procuras simples em azul, as avançadas em verde, e as " #~ "inválidas em vermelho" #~ msgid "_Select" #~ msgstr "_Seleccionar" #~ msgid "Separators for splitting tags" #~ msgstr "Separadores para extraer as etiquetas" #, fuzzy #~ msgid "Display" #~ msgstr "Editar a vista" #~ msgid "Quod Libet Preferences" #~ msgstr "Preferências do Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "Nom tocadas _hoje" #~ msgid "Not Played in a _Week" #~ msgstr "Nom tocadas numha _semana" #~ msgid "Not Played in a _Month" #~ msgstr "Nom tocadas num _més" #~ msgid "B_ottom 40" #~ msgstr "Ú_ltimas 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "As 40 canções que menos tocadas (podem resultar mais se houverem canções " #~ "reproduzidas o mesmo número de vezes)" #~ msgid "gtk-media-next" #~ msgstr "_Seguinte" #~ msgid "gtk-media-previous" #~ msgstr "_Anterior" #~ msgid "gtk-media-play" #~ msgstr "_Reproduzir" #~ msgid "gtk-media-pause" #~ msgstr "_Parar" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #~ msgid "Artist" #~ msgstr "_Artista" #~ msgid "Date" #~ msgstr "Data" #~ msgid "Choose New Stations" #~ msgstr "Escolher Novas Emisoras" #~ msgid "Add" #~ msgstr "Engadir" #~ msgid "Bitrate" #~ msgstr "Taxa de bits" #~ msgid "_Stations..." #~ msgstr "_Emisoras..." #~ msgid "Player" #~ msgstr "Reprodutor" #~ msgid "Quod Libet" #~ msgstr "Quod Libet" #~ msgid "Initializing audio backend (%s)" #~ msgstr "A activar a infraestrutura de som (%s)" #~ msgid "Initializing main library (%s)" #~ msgstr "A carregar a colecçom principal (%s)" #~ msgid "Unable to save library" #~ msgstr "Nom foi possível guardar a colecçom" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Impossível reproduzir a cançom" #~ msgid "" #~ "The audio output pipeline %r could not be created. Check your GStreamer " #~ "settings in ~/.quodlibet/config." #~ msgstr "" #~ "A saída de áudio %r non puido ser criada. Verifica as configurações do " #~ "GStreamer em ~/.quodlibet/config." #~ msgid "_Information" #~ msgstr "_Informaçom" #~ msgid "Sort by title" #~ msgstr "Ordenar polo título" #~ msgid "Sort by artist" #~ msgstr "Ordenar polo artista" #~ msgid "Lyrics provided by %s." #~ msgstr "Letra fornecida por %s" #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Nom se atopou a letra.\n" #~ "\n" #~ "Pode premer em Baixar para que o QL as procure em Internet. Tamém pode " #~ "introduzi-la voçê e guardá-la" #~ msgid "Recommend" #~ msgstr "Recomendada" #~ msgid "_LastFM webservice URL: http://" #~ msgstr "URL do serviço web do _LastFM: http://" #~ msgid "The main url for lastfm webservices. Must end in a trailing /" #~ msgstr "A url principal para os serviços web do lastfm. Deve rematar em /" #~ msgid "LastFM _similar artist webservice: " #~ msgstr "Serviço web de artista _similar do LastFM:" #~ msgid "" #~ "Enter here the xml webservice lookup that gets appended to the main " #~ "service url" #~ msgstr "" #~ "Indroduz o enderezo do ficheiro xml que complementa a url do serviço " #~ "principal" #~ msgid "LastFM top _tracks webservice: " #~ msgstr "Canções mais _tocadas do serviço LastFM:" #~ msgid "LastFM top _albums webservice: " #~ msgstr "_Albums mais tocados do serviço LastFM:" #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d canções guardadas" #~ msgid "part" #~ msgstr "Movimento" #~ msgid "Opening audio device." #~ msgstr "A aceder ao dispositivo de áudio." #~ msgid "MusicBrainz album ID" #~ msgstr "ID de MusicBrainz do álbum" #~ msgid "Loaded song library." #~ msgstr "A colecçom musical foi carregada." #~ msgid "Unable to open audio device" #~ msgstr "Impossível aceder ao dispositivo de som" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "O Quod Libet tentou aceder aos controladores 'autosink' e '%(sink)s' mais " #~ "nom puido abrir nengum deles. Configure o plugin do GStreamer mudando a\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "linha anterior em ~/.quodlibet/config" #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "O Quod Libet nom puido atopar o elemento do GStreamer 'filesrc'. Comprove-" #~ "se a instalaçom do GStreamer." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "O GStreamer nom puido carregar a cançom seleccionada." #~ msgid "Unable to retag multiple values" #~ msgstr "Impossível modificar distintos valores da etiqueta" #~ msgid "Changing the name of a tag with multiple values is not supported." #~ msgstr "" #~ "Mudar o nome dumha etiqueta com múltiplos valores non está suportado" #~ msgid "W: %s is not a QL song database." #~ msgstr "W: %s nom é umha cançom da colecçom do QL." #~ msgid "tag" #~ msgstr "etiqueta" #~ msgid "Per-song (\"Radio\") volume adjustment" #~ msgstr "Ajuste de volume por-cançom (\"Radio\")" #~ msgid "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "Ajuste de volume por-album (\"Audiophile\")" #~ msgid "_Volume Normalization" #~ msgstr "Normalizaçom do _Volume" #~ msgid "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgstr "" #~ "A examinar a sua colecçom. Pode levar vários minutos.\n" #~ "\n" #~ "%d canções recarregadas\n" #~ "%d canções eliminadas" #~ msgid "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgstr "" #~ "A procurar novas canções e a engadi-las à colecçom.\n" #~ "\n" #~ "%d canções engadidas" #~ msgid "No new stations" #~ msgstr "Nom há novas emisoras" #~ msgid "M3U playlists cannot be loaded." #~ msgstr "Nom podem ser carregadas listas M3U" #~ msgid "This station is already in your library." #~ msgstr "Esta emisora já está na sua colecçom" #~ msgid "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "by <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disc <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Track <tracknumber>>>" #~ msgstr "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "por <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disco <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Track <tracknumber>>>" #~ msgid "Tray Icon Preferences" #~ msgstr "Preferências da Ícona" #~ msgid "" #~ "Scroll wheel adjusts volume\n" #~ "Shift and scroll wheel changes song" #~ msgstr "" #~ "A roda do rato axusta o volume;\n" #~ "Shift e a roda do rato muda de cançom" #~ msgid "" #~ "Scroll wheel changes song\n" #~ "Shift and scroll wheel adjusts volume" #~ msgstr "" #~ "A roda do rato muda de cançom;\n" #~ "Shift e a roda do rato configura o volume" #~ msgid "Scroll _Wheel" #~ msgstr "Roda do _Rato" #~ msgid "Tooltip Display" #~ msgstr "Editar vista" #~ msgid "Play _Order" #~ msgstr "Ordem de Repr_oduçom" #~ msgid "The library cannot be refreshed while Quod Libet is running." #~ msgstr "" #~ "A colecçom nom pode ser actualizada no entanto o QL está a ser executado." #~ msgid "Loading, scanning, and saving your library." #~ msgstr "A carregar, a examinar e a guardar a sua colecçom." #~ msgid "Rescan your library and exit" #~ msgstr "Actualiza a sua colecçom" #~ msgid "Old Plugins" #~ msgstr "Extensões antigas" #~ msgid "" #~ "It looks like you are running Quod Libet right now. If you edit songs " #~ "also in Quod Libet's library while it is running, you may need to refresh " #~ "or re-add them.\n" #~ "\n" #~ "If you are not running Quod Libet, or are editing songs outside of its " #~ "library, you may ignore this warning." #~ msgstr "" #~ "Semelha que está a executar, assemade, o Quod Libet. Se editar as tags " #~ "das canções na colecçom do QL no entanto estiver a ser executado, " #~ "cumprirá que as engada ou actualize a colecçom.\n" #~ "\n" #~ "Se nom estiver a executar QL, ou estiver a editar as tags além da sua " #~ "colecçom, pode ignorar esta advertência." #~ msgid "GStreamer status %r != %r" #~ msgstr "Estado do GStreamer %r != %r" #~ msgid "_Pane %d:" #~ msgstr "_Panel %d:" #~ msgid "View and edit tags in the playing song" #~ msgstr "Ver e editar as tags da cançom reproduzida" #~ msgid "Double-click a tag value to change it, right-click for other options" #~ msgstr "" #~ "Duplo-clic num valor da tag para mudá-lo, clic-direito para outras opções" #~ msgid "Add a new tag" #~ msgstr "Engadir umha nova tag" #~ msgid "Tag by Filename" #~ msgstr "Tag a partires do Nome" #~ msgid "The first letter of each word will be capitalized" #~ msgstr "A primeira letra de cada palavra será posta em maiúsculas" #~ msgid "" #~ "Characters not allowed in Windows filenames (\\:?;\"<>|) will be replaced " #~ "by underscores" #~ msgstr "" #~ "Os caracteres nom permitidos nos nomes de ficheiro de WindowsTM (\\:?;" #~ "\"<>|) serám reemprazados por barras baixas" #~ msgid "" #~ "Characters outside of the ASCII set (A-Z, a-z, 0-9, and punctuation) will " #~ "be replaced by underscores" #~ msgstr "" #~ "Os caracteres além do conjunto ASCII (A-Z, a-z, 0-9, e pontuaçom) serám " #~ "reemprazados com barras baixas" #~ msgid "Apply to these _files..." #~ msgstr "Aplicar a estes _ficheiros..." #~ msgid "Path" #~ msgstr "Endereço" #~ msgid "Tray Preferences - Quod Libet" #~ msgstr "Preferências da icona - Quod Libet" #~ msgid "E: You need GTK+ 2.6 and PyGTK 2.6 or greater." #~ msgstr "E: Necesita GTK+ 2.6 e PyGTK 2.6 (ou versões máis novas)." #~ msgid "E: You have GTK+ %s and PyGTK %s." #~ msgstr "E: Tem GTK+ %s e PyGTK %s." #~ msgid "E: Please upgrade GTK+/PyGTK." #~ msgstr "E: Por favor, actualize GTK+/PyGTK." #~ msgid "Set play order" #~ msgstr "Estabelecer a ordem de reproduçom" #~ msgid "_Song" #~ msgstr "C_ançom" #~ msgid "" #~ "Deleting <b>%s</b> failed. Possibly the target file does not exist, or " #~ "you do not have permission to delete it." #~ msgstr "" #~ "A eliminaçom de <b>%s</b> errou. Possivelmente o ficheiro nom existe, ou " #~ "vostede nom tem permissões para eliminá-lo." #~ msgid "%(different)s, %(missing)s" #~ msgstr "%(different)s, %(missing)s" #~ msgid "skip count" #~ msgstr "saltar contador" #~ msgid "Search Bar" #~ msgstr "Barra de pesquisa" #~ msgid "Play songs in random order" #~ msgstr "Reproduz as canções em ordem aleatória" #~ msgid "S_ong" #~ msgstr "Canç_om" #~ msgid "_Choose randomly" #~ msgstr "_Escolher aleatoriamente" #~ msgid "Drag songs here to add them to the play queue" #~ msgstr "Arrastar canções para engadir" #~ msgid "No audio device found" #~ msgstr "Nom foi atopado dispositivo de áudio" #~ msgid "" #~ "Quod Libet was unable to open your audio device. Often this means another " #~ "program is using it, or your audio drivers are not configured.\n" #~ "\n" #~ "Quod Libet will now exit." #~ msgstr "" #~ "Quod Libet nom puido aceder ao seu dispositivo de áudio. Às vezes isto " #~ "sucede quando outro programa o está a empregar, ou os drivers nom estám " #~ "configurados.\n" #~ "\n" #~ "Quod Libet fechará agora." ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/hu.po����������������������������������������������������������������������������0000644�0001750�0001750�00000245144�12173213426�015337� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:35+0100\n" "Last-Translator: SZERVÁC Attila <sas@321.hu>\n" "Language-Team: hu\n" "Language: hu\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" "X-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Hang tag szerkesztő" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Tagok szerkesztése hangfájljaidban" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Zenelejátszó" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Hallgasd, böngészd vagy szerkeszd zenéidet" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Lejátszó" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "Előnézet" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "egy hang tag szerkesztő" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "könyvtár" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "_Programozható tagok mutatása" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "leírás" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Érték" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Tag" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Hang tag szerkesztő" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 msgid "Remove tags" msgstr "" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 msgid "Remove all tags" msgstr "" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Szűrő egy tag értéken" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Szűrő egy tag értéken" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Nincs idő adat" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Kiírja a tömör útmutatót" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> nem egy érvényes hely" #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Dalok albumon kívül" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Album lista jellemzők" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Album borítók mutatása" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Album kiírás" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d szám" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d lemez" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Hibás minta" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Cím" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Művész" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Dátum" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "műfaj" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "É_rték" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Rendezés dátum szerint" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Jellemzők" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Album lista" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Album lista" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Minden album" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d album" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Album borítók mutatása" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Ismeretlen" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Új forrás" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Add meg a hangforrás helyét:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Hangforrások" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "H_angforrások" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "Letöltés..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Fájlok letöltése" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Fájl letöltése" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Forrás hozzáadása sikertelen" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> nem tölthető be. Talán a kiszolgáló áll, vagy a hely nem " "hangforrás." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Daltár böngésző" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d dal (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Ismeretlen" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Több értékre szedés" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "Egyedi" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Album lista jellemzők" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Fájlrendszer" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Fájlrendszer" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Dalok másolása sikertelen" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "A kijelölt fájlok nem másolhatók más dal listába vagy sorba." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "Daltárhoz _adás" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Nem támogatott fájl típus" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Az állomás listák csak állomások helyeit tartalmazhatják, más állomás " "listákat vagy lejátszó-listákat nem. Az alábbi helyek nem tölthetők be:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Állomás hozzáadása sikertelen" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Internet Rádió" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Fájlok letöltése" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Új állomás" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Add meg egy Internet rádió állomás helyét:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "érték" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Internet Rádió" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "Új állomás" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "Új állomás" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Új állomás" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Nem leltem állomást" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Nem leltem Internet rádió állomást itt: %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Már minden kiírt állomás a daltárban van." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "Tö_rlés a listáról" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "Listához _adás" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d állomás" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Eszköz Tulajdonságok" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Eszköz:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Nincs csatolva" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Csatolási pont:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Név:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Média eszközök" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Média eszközök" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "Kiad" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "Átnevez" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> használt, <b>%s</b> elérhető" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> nincs csatlakoztatva" #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "<b>%s</b> másolása" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Dal másolása sikertelen" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Nincs elég hely e dalhoz" #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> másolása sikertelen" #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Dalok törlése meghiúsult" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "<b>%s</b> törlése" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> törlése sikertelen" #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "A dal törlése sikertelen" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "<b>%s</b> kinyitása sikertelen" #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Nem tudom kinyitni az eszközt" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Paneles böngésző beállítások" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Minden" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Paneles böngésző" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Paneles böngésző" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Mindent kijelöl" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Lista importálása.\n" "\n" "%d/%d dal behozva." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Új lista" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Adj nevet az új mappának:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "Új lista" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, fuzzy, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s és %(count)d még" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Listák" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "Listák" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "Tö_rlés a listáról" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Import" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Lista importálása sikertelen" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "A Quod Libet csak PLS és M3U listákat tud importálni" #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "S_huffle" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Lista átnevezése sikertelen" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Listák importálása" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Böngésző kikapcsolása" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "Böngésző kikapcsolása" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Daltár keresése" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "Daltár kere_sése" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "Eredmény kor_lát" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Ismeretlen eszköz" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "E: '%s' nem egyedi előtag." #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "Rossz érték" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "_Album borítók másolása" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Tagok egyesítése több értékkel" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "_Verzió a címben" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modell:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Kapacitás:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 #, fuzzy msgid "Removing orphaned iPod track" msgstr "F: elavult iPod sáv eltávolítása" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "iPod adatbázis mentése sikertelen" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Iniciálatlan iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Készítesz egy üres adatbázist ezen az iPod-on?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Fájlnév minta:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "Nem használt borítók és mappák törlése" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "A fájl létezik" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Felülírod: <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Daltár" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Csatolási pontok ellenőrzése" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Daltár átnézése" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "%s átnézése" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d mp." #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "Fájlok megnyitása sikertelen" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "Rossz érték" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "Mappa létrehozása sikertelen" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "A Quod Libet már fut." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Nem fut dal." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "A Quod Libet nem fut." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "%s írása sikertelen. Eltávolítom." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "egy zenekönyvtár és lejátszó" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[lehetőségek]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Kiírja a most forgó dalt és kilép" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Lejátszás kezdése azonnal" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Ugrás a következő dalra" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Ugrás az előző dalra" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Lejátszás indítása" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Lejátszás szünete" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Lejátszás/szünet váltása" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Lejátszás indítása" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Hang be" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Hang ki" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Lejátszó állapot kiírása" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Főablak rejtése" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Főablak mutatása" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Főablak mutatásának váltása" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Fókusz a futó lejátszóra" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Aktív böngésző szűrők törlése" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "Daltár _frissítése" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Mostani lista kiírása" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Sor tartalmának kiírása" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Quod Libet bezárása" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Ugrás a forgó dalban" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][ÓÓ:]PP:MM" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Sorrend beállítása/váltása" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Ismétlés be/ki/váltás" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Hangerő beállítása" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Daltár keresése" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "lekérés" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Fájl lejátszása" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "fájlnév" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "E dal értéke" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "E böngésző beállítása" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Új böngésző megnyitása" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Sor mutatása/rejtése" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Fő dal lista mutatása/rejtése" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Szűrő egy véletlen értéken" #: ../quodlibet.py:340 msgid "command|tag" msgstr "tag" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Szűrő egy tag értéken" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tag=érték" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Fájl vagy lekérés a lejátszósorba" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "fájlnév" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Fájl vagy lekérés törlése a sorból" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "E: Rossz argumentum ehhez: '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "E: Próbáld ezt: %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Támogatott formátumok: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Hang eszköz: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Kezd..." #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/A" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Idő" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Könyvjelző név" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "PP:MM" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Könyvjelzők" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Nincs idő adat" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "Érték:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Mentett értékek" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Mentett értékek szerkesztése..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Dalok" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Maradék idő kiírása" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "Könyvjelzők sz_erkesztése..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "_Sáv fejlécek" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "_Album fejlécek" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Stop e szám után" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Szűrő egy tag értéken" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Fájlok törlése" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Mozgatás a kukába" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Végleg törlöd e fájlt?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Végleg törlöd e fájlokat?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s és %(count)d még..." #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "%d/%d mozgatása" #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "%d/%d törlése" #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "iPod adatbázis mentése sikertelen" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "<b>%s</b> kinyitása sikertelen" #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Fájl törlése sikertelen" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "<b>%s</b> törlése sikertelen" #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Letöltések" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Fájlnév" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Méret" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "Lejátszósor" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "minta" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Mentett értékek szerkesztése..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "Előnézet" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "Több lehetőség..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "hiányzik %d dalból" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "eltér %d dal közt" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Több értékre szedés" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "_Album és lemez elválasztása" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "_Verzió és cím elválasztása" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "A hangszerelőt és a többi Művészt ne mossuk egybe !" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Az előadót és a többi Művészt ne mossuk egybe !" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Az előadót és a többi Művészt ne mossuk egybe !" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "_Verzió és cím elválasztása" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Tag hozzáadása" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Tag:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "ql-remove" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Tag szerkesztés" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Ír" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Tag hozzáadása sikertelen" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "<b>%s</b> hozzáadása sikertelen\n" "\n" "A kijelölt fájlok nem támogatnak többszörös értékeket." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Rossz tag" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Rossz tag <b>%s</b>\n" "\n" "A kijelölt fájlok nem támogatják e tag szerkesztését." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "A tag pontatlannak hat" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> változott a program futása alatt. A daltár frissítése nélküli " "mentés felülírhatja e dal más változásait.\n" "\n" "Mégis mentes e dalt?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Dal mentése sikertelen" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "<b>%s</b> mentése sikertelen. Lehet, hogy a fájl csak-olvasható, hibás, vagy " "nincs jogod szerkeszteni." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Rossz érték" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Hibás érték: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Pluginok" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d dal" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso jellemzők" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Vágás így:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "_Programozható tagok mutatása" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Tag szerkesztés" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Mappák" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "Ú_j mappa..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "Alkönyvtárak kijelölé_se" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Új mappa" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Adj nevet az új mappának:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Mappa létrehozása sikertelen" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Mappa törlése sikertelen" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "by %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "%s lemez" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "%s szám" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "Listához _adás" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "Kijelző sz_erkesztése..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "_Tag szerkesztés" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Nem játszik" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "Hibák tisztitása" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Nincs kijelölt dal" #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Nincs dal" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Információ" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Szövegek" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Hibák" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "művész" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "művészek" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "előadók" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Soha" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%dx" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "hozzáadva" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "utolsó lejátszás" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "lejátszás" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "kihagyás" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "érték" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "hossz" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "fájlméret" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "módosítva" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitarány" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Fájl" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d kijelölt" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Készítette: %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "előadó" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Elérhetetlen szám" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Szám lista" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d dal nem tartozik albumhoz" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Kijelölt diszkográfia" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d dalhoz nincs szerző" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "albumok" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Összhossz:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Összméret:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Fájlok" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "Letöltés" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Nincs szöveg ehhez a dalhoz." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Szöveg keresése..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Szöveg letöltése sikertelen" #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d állomás" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Tag cserék elvetése?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "A tagok változtak, de nincsenek elmentve. Mented e fájlokat, vagy elveted a " "változtatásokat?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "Ismeretlen" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "Sorban" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_Sorban" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Shuffle" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Weighted" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "Súlyozott" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Egy dal" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Egy dal" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Plugin hibák" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Pluginok" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Hibák mutatása" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "verzió" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "Böngésző kikapcsolása" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Beillesztések nem találhatók" #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Lemez" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Szám" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "csoport" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "_Album" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Fájlnév" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Hossz" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Dal lista" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "Automatikus ugrás a forgó dalra" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "A dal váltásakor a lista görgetése" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "Más_ok:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "Kijelző sz_erkesztése..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Látható oszlopok" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "_Verzió a címben" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Mappa a _fájlnévben" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Jellemzők" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Böngészők" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Globális szűrő:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "Stop e szám után" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Keres" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "A dal váltásakor a lista görgetése" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "É_rték" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Album lista" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Lejátszás szünete" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 msgid "_Fall-back gain (dB):" msgstr "" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 msgid "_Pre-amp gain (dB):" msgstr "" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Tag szerkesztés" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Tag cserék elvetése?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "Értékek és lejátszások mentése" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Email:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Értékekhez és lejátszásokhoz beállítandó email cím" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "Új állomás" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "Daltár _frissítése" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "Daltár _frissítése" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Könyvtárak átnézése" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Nincs dal" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Jellemzők" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Tulajdonságok" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "Lejátszósor" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Minden dal törlése a sorból" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "Véletlen" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "S_orrend:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "Ismétlés" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Lista újraindítása befejezéskor" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Dalok hozzáadása sikertelen" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> nem támogatott protokollt használ" #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Zene" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "Mappa hozzá_adása..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "Fájl hozzá_adása..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "Hely hozzá_adása..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Új böngésző megnyitása" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "Szűrők" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "Soha _nem játszott" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "40 legmenőbb" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Vezérlés" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Ugrás a lejátszásra" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Nézet" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Súgó" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "Hibák tisztitása" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Keres" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Daltár _frissítése" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Daltár újratö_ltése" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Szűrő a _műfajon" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Szűrő a _szerzőn/előadón" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Szűrő az _albumon" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Véletlen _műfaj" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Véletlen _szerző/előadó" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Véletlen _album" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Dal _lista" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Változások átnézése a daltárban" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Minden dal újratöltése a daltárban (sokáig tarthat)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "A legtöbbet lejátszott 40 dal (csomókban több is kijelölhető)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Hely hozzáadása" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Add meg egy hang fájl helyét:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Hely hozzáadása sikertelen" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> nem egy érvényes hely" #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Zene hozzáadása" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Új dalok keresése e mappában" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s-t nem tudtam hozzáadni a daltárhoz.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Dal hozzáadása sikertelen" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Szóközök helyett aláhúzások !" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "w$-inkompatibilis jeleket mellőz" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Mellékjelek ki" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Nem-_ASCII karakterek ki" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Fájlok átnevezése" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Új név" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "Hibák mutatása" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "Tovább" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Fájl átnevezése sikertelen" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "<b>%s</b> átnevezése erre: <b>%s</b> sikertelen. A cél fájl talán létezik, " "nincs jogod az új fájl létrehozására vagy a régi törlésére." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Az ösvény nem abszolút" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "A minta\n" "\t<b>%s</b>\n" "tartalmaz /-t de nem indul gyökértől. Könyvtárnév-tévesztés ellen, adj " "gyökeret a mintának /-rel vagy ~/-rel kezdéssel." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "E mappákban levő dalok (':'-tal elválasztva) a daltárhoz adódnak" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Könyvtárak kijelölése" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Mentett értékek" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Mentett értékek szerkesztése..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Keres" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "Kor_lát:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "Súly" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "Szűrő itt: %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "_Album fejlécek" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_Sáv fejlécek" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Album fejlécek" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "Személ_y fejlécek" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Dátum fejlécek" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_Fájl fejlécek" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "_Termék fejlécek" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Egyéni fejlécek..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Egyéni fejlécek..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Sorhoz adás" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "Eszközre másolás" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "Tö_rlés a listáról" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "_Sáv fejlécek" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "Személ_y fejlécek" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "_Album fejlécek" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "_Dátum fejlécek" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "_Fájl fejlécek" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "_Termék fejlécek" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Tag:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "Egyedi" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Aláhúzások helyett szóköz" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "Cím szerinti tagok" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Több értékre _vágás" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Tagok az ösvényből" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Létezőket cserélő tagok" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Létezőkhöz adandó tagok" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "A minta\n" "\t<b>%s</b>\n" "rossz. Talán ugyanaz a tag 2x vagy páratlan zárójelek vannak benne (< / " ">)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Érvénytelen tagok" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Érvénytelen tagok <b>%s</b>\n" "\n" "A kijelölt fájlok nem támogatják e tagok szerkesztését." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "A dal szerkesztése sikertelen" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "A minta rossz. A < és > legyen \\< és \\> és legyenek párban.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Kijelző szerkesztése" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Számok száma" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Indítás innen:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "Összes szám:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Szám" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "és még %d..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Módosított dalok mentése" #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Keresés törlése" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Már van egy %s nevű lista" #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "É_rték" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Kiírja a tömör útmutatót" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Kiírja a verziót és a szerzői jogokat" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Használat: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[lehetőségek]" #: ../quodlibet/util/__init__.py:186 #, fuzzy, python-format msgid "Option %r not recognized." msgstr "E: '%s' nem ismert lehetőség." #: ../quodlibet/util/__init__.py:189 #, fuzzy, python-format msgid "Option %r requires an argument." msgstr "E: '%s' egy argumentumot vár." #: ../quodlibet/util/__init__.py:192 #, fuzzy, python-format msgid "%r is not a unique prefix." msgstr "E: '%s' nem egyedi előtag." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Hibás kódolás]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "cím-nagybetű" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "A dátumot 'ÉÉÉÉ', 'ÉÉÉÉ-HH-NN' vagy 'ÉÉÉÉ-HH-NN ÓÓ:PP:MM' formában kell " "bevinni." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "" #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "" #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "A MusicBrainz ID-knek UUID formátumúaknak kell lenniük" #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "A MusicBrainz kiadási állapot 'official', 'promotional' vagy 'bootleg' kell " "legyen" #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "hangszerelő" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "szerző" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "zeneszerző" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "karmester" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "kapcsolat" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "dátum" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "leírás" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "műfaj" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "csoport" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "nyelv" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licenc" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "hely" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "szövegíró" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "szervezet" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "cím" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "verzió" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "weblap" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "album művész" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "lemez" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "szám" # label ID #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "címke ID" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "eredeti kiadási dátum" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "eredeti album" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "eredeti művész" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "rögzítési dátum" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "megjelenés országa" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "album művész" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "művészek" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "album művész" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "előadók" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "előadók" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz track ID" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "MusicBrainz track ID" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "MusicBrainz artist ID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz album művész ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz album állapot" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz album típus" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "szám csúcs" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "album csúcs" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Jellemzők" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "lemezek" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "számok" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "utolsó indítás" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "pontos elérés" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "csatolási pont" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "hibák" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "személyek" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "év" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "eredeti kiadási dátum" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "Könyvjelzők" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "formátum" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "szövegírók" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "hangszerelők" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "zeneszerzők" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "karmesterek" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "szerzők" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d mp." #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d perc" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d óra" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d nap" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d év" #~ msgid "_Browse Library" #~ msgstr "Daltár _böngészése" #~ msgid "No eject command found." #~ msgstr "Nem találtam 'eject' parancsot" #~ msgid "Unable to start web browser" #~ msgstr "Web böngésző indítása sikertelen" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Nem lelek web böngészőt. Állítsd be a $BROWSER változót, vagy nézd meg, " #~ "létezik-e /usr/bin/sensible-browser." #, fuzzy #~ msgid "Library Error" #~ msgstr "Daltár böngésző" #, fuzzy #~ msgid "_Output device:" #~ msgstr "Eszközre másolás" #~ msgid "translator-credits" #~ msgstr "sas," #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Más látható oszlopok szóközökkel elválasztva" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "Tovább" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "Információ" #~ msgid "_Search:" #~ msgstr "Kere_s:" #~ msgid "Search your library" #~ msgstr "Daltár keresése" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, és mások\n" #~ "\n" #~ "Ez szbaf szoftver; lásd a forrást a másolási feltételekért. NINCS\n" #~ "garancia; sem az ELADHATÓSÁGRA sem az EGYES CÉLRA VALÓ MEGFELELÉSRE.\n" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Összméret:" #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet Pluginok" #~ msgid "Color _search terms" #~ msgstr "Színes kere_ső kifejezések" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "Egyszerű keresések kékkel, haladók zölddel, érvénytelenek pirossal" #~ msgid "_Select" #~ msgstr "Vála_szt" #~ msgid "Separators for splitting tags" #~ msgstr "Tagok elválasztói" #, fuzzy #~ msgid "Display" #~ msgstr "Kijelző szerkesztése" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet beállítások" #~ msgid "Not Played To_day" #~ msgstr "_Ma még nem játszott" #~ msgid "Not Played in a _Week" #~ msgstr "1 hé_ten belül nem játszott" #~ msgid "Not Played in a _Month" #~ msgstr "1 _hónapon belül nem játszott" #~ msgid "B_ottom 40" #~ msgstr "40 legritkább" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "A legutóbb lejátszott 40 dal (csomókban több is kijelölhető)" #~ msgid "gtk-media-next" #~ msgstr "gtk-media-next" #~ msgid "gtk-media-previous" #~ msgstr "gtk-media-previous" #~ msgid "gtk-media-play" #~ msgstr "gtk-media-play" #~ msgid "gtk-media-pause" #~ msgstr "gtk-media-pause" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | vezérlő ]" #, fuzzy #~ msgid "Artist" #~ msgstr "_Művész" #, fuzzy #~ msgid "Date" #~ msgstr "_Dátum" #~ msgid "Choose New Stations" #~ msgstr "Válassz új állomásokat" #~ msgid "Add" #~ msgstr "Hozzáad" #, fuzzy #~ msgid "Bitrate" #~ msgstr "bitarány" #~ msgid "_Stations..." #~ msgstr "Állomá_sok..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Quod Libet bezárása" #~ msgid "Unable to save library" #~ msgstr "Daltár mentése sikertelen" #~ msgid "_Information" #~ msgstr "_Információ" #~ msgid "Sort by title" #~ msgstr "Rendezés cím szerint" #~ msgid "Sort by artist" #~ msgstr "Rendezés művész szerint" #~ msgid "Lyrics provided by %s." #~ msgstr "A szöveg forrása: %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Nincs szöveg ehhez a hangfájlhoz.\n" #~ "\n" #~ "A Letöltés gombbal a Quod Libet rákereshet a hálózaton. Kézzel is be " #~ "lehet vinni, majd a mentés gombra kattintani." #~ msgid "part" #~ msgstr "rész" #~ msgid "Opening audio device." #~ msgstr "Hang eszköz megnyitása." #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d dal elmentve" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainz album ID" #~ msgid "Loaded song library." #~ msgstr "Daltár betöltve." #~ msgid "Unable to open audio device" #~ msgstr "Hang eszköz megnyitása sikertelen" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "A Quod Libet megpróbálta elérni az 'autosink' és '%(sink)s' meghajtókat, " #~ "de nem tudta megnyitni. Állítsd be a GStreamer pipát a\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "sor cseréjével a ~/.quodlibet/config-ban." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "A Quod Libet nem leli a 'filesrc' GStreamer elemet. Ellenőrizd a " #~ "GStreamer telepítést." ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/POTFILES.skip��������������������������������������������������������������������0000644�0001750�0001750�00000000054�12161032160�016454� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������tests/test_qltk_notif.py tests/test_util.py ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/en_CA.po�������������������������������������������������������������������������0000644�0001750�0001750�00000304761�12173213426�015671� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# English/Canada translation of Quod Libet. # Copyright (C) 2004 Joe Wreschnig # This file is distributed under the same license as the Quod Libet package. # Joe Wreschnig <piman@sacredchao.net>, 2004 # # NB: I am not actually Canadian, but I need a translation to test my i18n # support, and I know Canadian better than, say, Kurdish. # msgid "" msgstr "" "Project-Id-Version: Quod Libet 0.18\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:32+0100\n" "Last-Translator: Joe Wreschnig <piman@sacredchao.net>\n" "Language-Team: Joe Wreschnig <piman@sacredchao.net>\n" "Language: en_CA\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-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Audio tag editor" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Edit tags in your audio files" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Music Player" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Listen to, browse, or edit your audio collection" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "_Pause" #: ../data/quodlibet.desktop.in.h:4 #, fuzzy msgid "Next" msgstr "_Next" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "Pre_vious" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "an audio tag editor" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "directory" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Show _programmatic tags" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "Description" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Value" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Tag" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Audio tag editor" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "_Remove Station" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Remove selected tag" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filter on a tag value" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filter on a tag value" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "No time information" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Display brief usage information" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> is not a valid location." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Songs not in an album" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Album List Preferences" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Show album _covers" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Album Display" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d track" msgstr[1] "%d tracks" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disc" msgstr[1] "%d discs" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Invalid pattern" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Title" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artist" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Date" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "_Genre" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Rating" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Sort by date" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Preferences" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Album List" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Album List" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "All Albums" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d album" msgstr[1] "%d albums" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Show album _covers" msgstr[1] "Show album _covers" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Unknown" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "New Feed" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Enter the location of an audio feed:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Audio Feeds" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Audio Feeds" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Download..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Download Files" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Download File" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Unable to add feed" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Library Browser" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d song (%(time)s)" msgstr[1] "%(count)d songs (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Unknown" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Split into _Multiple Values" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Custom" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Album List Preferences" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "File System" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_File System" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Unable to copy songs" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "The files selected cannot be copied to other song lists or the queue." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Add to Library" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Unsupported file type" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Unable to add station" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Internet Radio" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Download Files" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "New Station" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Enter the location of an Internet radio station:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "rating" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Internet Radio" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_New Station" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_New Station" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "New Station" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "No stations found" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "No Internet radio stations were found at %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "All stations listed are already in your library." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Remove from Playlist" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Add to Playlist" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d station" msgstr[1] "%(count)d stations" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Device Properties" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Device:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Not mounted" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Mount Point:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Name:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Media Devices" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Media Devices" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Eject" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Rename" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> used, <b>%s</b> available" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> is not connected." #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "Copying <b>%s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Unable to copy song" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "There is not enough free space for this song." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> could not be copied." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Unable to delete songs" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Deleting <b>%s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> could not be deleted." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Unable to delete song" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Ejecting <b>%s</b> failed." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Unable to eject device" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Paned Browser Preferences" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "All" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Paned Browser" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Paned Browser" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Select _All" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Importing playlist.\n" "\n" "%d/%d songs added." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "New Playlist" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Enter a name for the new folder:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_New Playlist" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, fuzzy, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s and %(count)d more" msgstr[1] "%(title)s and %(count)d more" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Playlists" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Playlists" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Remove from Playlist" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Import" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Unable to import playlist" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet can only import playlists in the M3U and PLS formats." #: ../quodlibet/browsers/playlists.py:504 #, fuzzy msgid "Remove Duplicates" msgstr "Remove selected tag" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Shuffle" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Unable to rename playlist" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Import Playlist" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Disable Browser" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Disable Browser" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Search Library" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Search Library" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Limit Results" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Unknown Device" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "E: '%s' is not a unique prefix." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "Could not play %s." #: ../quodlibet/devices/__init__.py:212 #, fuzzy, python-format msgid "%s: Could not find %s." msgstr "Could not play %s." #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "Invalid tag name" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Volume Gain (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Copy _album covers" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Combine tags with _multiple values" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Title includes _version" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "Album includes _part" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Model:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Capacity:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 #, fuzzy msgid "Removing orphaned iPod track" msgstr "W: removing orphaned iPod track" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Unable to save iPod database" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Uninitialized iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Do you want to create an empty database on this iPod?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Filename Pattern:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Remove unused covers and directories" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "File exists" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Overwrite <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Library" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Checking mount points" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Scanning library" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Scanning %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "1 second" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "Unable to open files" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "Invalid tag name" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "Unable to create folder" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet is already running." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "No song is currently playing." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet is not running." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Unable to write to %s. Removing it." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "a music library and player" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[options]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Print the playing song and exit" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Begin playing immediately" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Jump to next song" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Jump to previous song" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Start playback" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Pause playback" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Toggle play/pause mode" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Start playback" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Turn up volume" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Turn down volume" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Print player status" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Hide main window" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Show main window" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Toggle main window visibility" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Focus the running player" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Remove active browser filters" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "Re_fresh Library" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Print the current playlist" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Print the contents of the queue" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Exit Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Seek within the playing song" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Set or toggle the playback order" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Turn repeat off, on, or toggle it" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Set the volume" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Search your audio library" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "query" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Play a file" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "filename" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Rate the playing song" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Set the current browser" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Open a new browser" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Show or hide the queue" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Show or hide the main song list" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filter on a random value" #: ../quodlibet.py:340 msgid "command|tag" msgstr "tag" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filter on a tag value" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tag=value" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Enqueue a file or query" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "filename" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Unqueue a file or query" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "E: Invalid argument for '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "E: Try %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Supported formats: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Audio device: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Beginning" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/A" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Time" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Bookmark Name" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Bookmarks" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "No time information" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Value:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Saved Values" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Edit saved values..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Songs" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Display remaining time" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Edit Bookmarks..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "_Track Headers" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "_Album Headers" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Stop after this song" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filter on a tag value" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Delete Files" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Move to Trash" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Permanently delete this file?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Permanently delete these files?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s and %(count)d more..." msgstr[1] "%(title)s and %(count)d more..." #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "%(current)s/%(total)s" #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "%(current)s/%(total)s" #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Unable to save iPod database" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Ejecting <b>%s</b> failed." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Unable to delete file" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Deleting <b>%s</b> failed." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Downloads" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Filename" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Size" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "_Queue" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "Invalid Pattern" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Edit saved values..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Preview" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_More options..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "missing from %d song" msgstr[1] "missing from %d songs" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "different across %d song" msgstr[1] "different across %d songs" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Split into _Multiple Values" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Split Disc out of _Album" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Split _Version out of Title" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Split Arranger out of Ar_tist" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Split _Performer out of Artist" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Split _Performer out of Artist" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Split _Version out of Title" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Add a Tag" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Tag:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "ql-remove" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Edit Tags" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Write" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Unable to add tag" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Invalid tag" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Tag may not be accurate" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Unable to save song" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Invalid value" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Plugins" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d song" msgstr[1] "%d songs" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso Preferences" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Split _on:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Show _programmatic tags" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Tag Editing" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Folders" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_New Folder..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Select All Subfolders" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "New Folder" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Enter a name for the new folder:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Unable to create folder" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Unable to delete folder" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "by %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Disc %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Track %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Add to Playlist" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Edit Display..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Edit _Tags" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Not playing" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Clear Errors" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "No songs are selected." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "No Songs" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Information" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Lyrics" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Errors" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artist" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artists" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "performers" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Never" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d time" msgstr[1] "%d times" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "added" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "last played" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "plays" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "skips" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "rating" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "length" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "file size" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "modified" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitrate" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "File" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d selected" msgstr[1] "%d selected" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Produced by %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "performer" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Track unavailable" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Track List" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d song with no album" msgstr[1] "%d songs with no album" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Selected Discography" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d song with no artist" msgstr[1] "%d songs with no artist" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "albums" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Total length:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Total size:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Files" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Download" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "No lyrics found for this song." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Searching for lyrics..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Unable to download lyrics." #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d station" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Discard tag changes?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, fuzzy, python-format msgid "%d tasks running" msgstr "Quod Libet is running" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "Unknown" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "In Order" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_In Order" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Shuffle" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Weighted" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Weighted" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "One Song" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_One Song" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Plugin Errors" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Plugins" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Show _Errors" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "_Version" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "Disable Browser" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "No plugins found." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disc" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Track" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "grouping" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Filename" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Length" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Song List" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Jump to playing song automatically" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "When the playing song changes, scroll to it in the song list" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Others: " #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Edit Display..." #: ../quodlibet/qltk/prefs.py:97 #, fuzzy msgid "Add or remove additional column headers" msgstr "Set and save column headers" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Visible Columns" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Title includes _version" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Filename includes _folder" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Preferences" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Browsers" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Global filter:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "search-string" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Search" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "When the playing song changes, scroll to it in the song list" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "Rating" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Album List" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Pause playback" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "_Volume Gain (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "_Volume Gain (dB):" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "_Replay Gain volume adjustment" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "_Replay Gain volume adjustment" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Edit Tags" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Discard tag changes?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "Save ratings and play counts" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Email:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Ratings and play counts will be set for this email address" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_New Station" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "Re_fresh Library" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "Re_fresh Library" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Scan _Directories" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "No Songs" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Preferences" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Properties" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Queue" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Remove all songs from the queue" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Random" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Order:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Repeat" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Restart the playlist when finished" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Unable to add songs" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> uses an unsupported protocol." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Music" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Add a Folder..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Add a File..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Add a Location..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Open a new browser" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filters" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Never Played" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Top 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Control" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Jump to Playing Song" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_View" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Help" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "_Clear Errors" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Search" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Re_fresh Library" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Re_load Library" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filter on _Genre" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filter on _Artist" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filter on Al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Random _Genre" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Random _Artist" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Random Al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Song _List" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Check for changes in your library" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Reload all songs in your library (this can take a long time)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Add a Location" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Enter the location of an audio file:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Unable to add location" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> is not a valid location." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Add Music" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Watch this folder for new songs" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s could not be added to your library.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Unable to add song" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, fuzzy, python-format msgid "Unknown browser %r." msgstr "Opening web browser: %s" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Replace spaces with _underscores" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Strip _Windows-incompatible characters" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Strip _diacritical marks" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Strip non-_ASCII characters" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Rename Files" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "New Name" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "Show _Errors" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Continue" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Unable to rename file" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Path is not absolute" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Songs placed in these folders (separated by ':') will be added to your " "library" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Select Directories" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Saved Values" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Edit saved values..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Search" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limit:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Weighted" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filter on %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "_Album Headers" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_Track Headers" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Album Headers" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_People Headers" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Date Headers" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_File Headers" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "_Production Headers" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Customize Headers..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Customize Headers..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Add to _Queue" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Copy to Device" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Remove from Library" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "_Track Headers" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "_People Headers" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "_Album Headers" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "_Date Headers" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "_File Headers" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "_Production Headers" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Tag:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Custom" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Replace _underscores with spaces" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Title-case tags" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Split into multiple _values" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Tags From Path" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Tags replace existing ones" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Tags are added to existing ones" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Invalid tags" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Unable to edit song" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Edit Display" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Track Numbers" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Start fro_m:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Total tracks:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Track" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "and %d more..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Saving the songs you changed." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d of %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Clear search" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "A playlist named %s already exists." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "Rating" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Display brief usage information" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Display version and copyright" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Usage: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[options]" #: ../quodlibet/util/__init__.py:186 #, fuzzy, python-format msgid "Option %r not recognized." msgstr "E: Option '%s' not recognized." #: ../quodlibet/util/__init__.py:189 #, fuzzy, python-format msgid "Option %r requires an argument." msgstr "E: Option '%s' requires an argument." #: ../quodlibet/util/__init__.py:192 #, fuzzy, python-format msgid "%r is not a unique prefix." msgstr "E: '%s' is not a unique prefix." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Invalid Encoding]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "check|titlecase?" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 #, fuzzy msgid "No log available." msgstr "No information available" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Replay Gain gains must be entered in 'x.yy dB' format." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Replay Gain peaks must be entered in 'x.yy' format." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz IDs must be in UUID format." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "arranger" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "author" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "composer" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "conductor" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "contact" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "date" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "description" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "genre" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "grouping" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "language" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licence" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "location" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "lyricist" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organization" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "title" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "version" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "website" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "album artist" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disc" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "track" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "label ID" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "original release date" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "original album" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "original artist" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "recording date" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "release country" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "album artist" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "artists" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "album artist" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "performers" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "performers" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz track ID" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "MusicBrainz track ID" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "MusicBrainz artist ID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz album artist ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz album status" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz album type" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "track gain" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "track peak" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "album gain" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "album peak" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Preferences" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "discs" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "tracks" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "last started" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "full name" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "mount point" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "errors" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "people" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "year" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "original release date" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "Bookmarks" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "format" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "lyricists" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "arrangers" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "composers" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "conductors" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "authors" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d second" msgstr[1] "%d seconds" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minute" msgstr[1] "%d minutes" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d hour" msgstr[1] "%d hours" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d day" msgstr[1] "%d days" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d year" msgstr[1] "%d years" #~ msgid "_Browse Library" #~ msgstr "_Browse Library" #~ msgid "No eject command found." #~ msgstr "No eject command found." #~ msgid "Unable to start web browser" #~ msgstr "Unable to start web browser" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #, fuzzy #~ msgid "Library Error" #~ msgstr "Library Browser" #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Copy to Device" #~ msgid "translator-credits" #~ msgstr "translator-credits" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Other columns to display, separated by spaces" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "_Continue" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "Information" #~ msgid "_Search:" #~ msgstr "_Search:" #~ msgid "Search your library" #~ msgstr "Search your library" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, and others\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Total size:" #, fuzzy #~ msgid "%s: Could not import ctypes." #~ msgstr "Could not play %s." #, fuzzy #~ msgid "Couldn't find module %s." #~ msgstr "Could not play %s." #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet Plugins" #~ msgid "Color _search terms" #~ msgstr "Colour _search terms" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgid "_Select" #~ msgstr "_Select" #~ msgid "Separators for splitting tags" #~ msgstr "Separators for splitting tags" #, fuzzy #~ msgid "Display" #~ msgstr "Edit Display" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet Preferences" #~ msgid "Not Played To_day" #~ msgstr "Not Played To_day" #~ msgid "Not Played in a _Week" #~ msgstr "Not Played in a _Week" #~ msgid "Not Played in a _Month" #~ msgstr "Not Played in a _Month" #~ msgid "B_ottom 40" #~ msgstr "B_ottom 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgid "gtk-media-next" #~ msgstr "gtk-media-next" #~ msgid "gtk-media-previous" #~ msgstr "gtk-media-previous" #~ msgid "gtk-media-play" #~ msgstr "gtk-media-play" #~ msgid "gtk-media-pause" #~ msgstr "gtk-media-pause" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #, fuzzy #~ msgid "Artist" #~ msgstr "_Artist" #, fuzzy #~ msgid "Date" #~ msgstr "_Date" #~ msgid "Choose New Stations" #~ msgstr "Choose New Stations" #~ msgid "Add" #~ msgstr "Add" #, fuzzy #~ msgid "Bitrate" #~ msgstr "bitrate" #~ msgid "_Stations..." #~ msgstr "_Stations..." #~ msgid "Player" #~ msgstr "Player" #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Exit Quod Libet" #~ msgid "Unable to save library" #~ msgstr "Unable to save library" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Unable to play song" #~ msgid "pattern" #~ msgstr "pattern" #~ msgid "_Information" #~ msgstr "_Information" #~ msgid "Sort by title" #~ msgstr "Sort by title" #~ msgid "Sort by artist" #~ msgstr "Sort by artist" #~ msgid "Lyrics provided by %s." #~ msgstr "Lyrics provided by %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgid "part" #~ msgstr "part" #~ msgid "Opening audio device." #~ msgstr "Opening audio device." #~ msgid "Moving %d/%d." #~ msgstr "Moving %d/%d." #~ msgid "Deleting %d/%d." #~ msgstr "Deleting %d/%d." #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d songs saved" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainz album ID" #~ msgid "Loaded song library." #~ msgstr "Loaded song library." #~ msgid "Unable to open audio device" #~ msgstr "Unable to open audio device" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer was unable to load the selected song." #~ msgid "C_opy album covers" #~ msgstr "C_opy album covers" #~ msgid "Unable to retag multiple values" #~ msgstr "Unable to retag multiple values" #~ msgid "Changing the name of a tag with multiple values is not supported." #~ msgstr "Changing the name of a tag with multiple values is not supported." #~ msgid "W: %s is not a QL song database." #~ msgstr "W: %s is not a QL song database." #~ msgid "tag" #~ msgstr "tag" #~ msgid "Per-song (\"Radio\") volume adjustment" #~ msgstr "Per-song (\"Radio\") volume adjustment" #~ msgid "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "Per-album (\"Audiophile\") volume adjustment" #~ msgid "_Volume Normalization" #~ msgstr "_Volume Normalization" #~ msgid "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgstr "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgid "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgstr "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgid "No new stations" #~ msgstr "No new stations" #~ msgid "M3U playlists cannot be loaded." #~ msgstr "M3U playlists cannot be loaded." #~ msgid "This station is already in your library." #~ msgstr "This station is already in your library." #~ msgid "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "by <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disc <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Track <tracknumber>>>" #~ msgstr "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "by <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disc <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Track <tracknumber>>>" #~ msgid "Tray Icon Preferences" #~ msgstr "Tray Icon Preferences" #~ msgid "" #~ "Scroll wheel adjusts volume\n" #~ "Shift and scroll wheel changes song" #~ msgstr "" #~ "Scroll wheel adjusts volume\n" #~ "Shift and scroll wheel changes song" #~ msgid "" #~ "Scroll wheel changes song\n" #~ "Shift and scroll wheel adjusts volume" #~ msgstr "" #~ "Scroll wheel changes song\n" #~ "Shift and scroll wheel adjusts volume" #~ msgid "Scroll _Wheel" #~ msgstr "Scroll _Wheel" #~ msgid "Tooltip Display" #~ msgstr "Tooltip Display" #~ msgid "Play _Order" #~ msgstr "Play _Order" #~ msgid "The library cannot be refreshed while Quod Libet is running." #~ msgstr "The library cannot be refreshed while Quod Libet is running." #~ msgid "Loading, scanning, and saving your library." #~ msgstr "Loading, scanning, and saving your library." #~ msgid "Rescan your library and exit" #~ msgstr "Rescan your library and exit" #~ msgid "Old Plugins" #~ msgstr "Old Plugins" #~ msgid "" #~ "It looks like you are running Quod Libet right now. If you edit songs " #~ "also in Quod Libet's library while it is running, you may need to refresh " #~ "or re-add them.\n" #~ "\n" #~ "If you are not running Quod Libet, or are editing songs outside of its " #~ "library, you may ignore this warning." #~ msgstr "" #~ "It looks like you are running Quod Libet right now. If you edit songs " #~ "also in Quod Libet's library while it is running, you may need to refresh " #~ "or re-add them.\n" #~ "\n" #~ "If you are not running Quod Libet, or are editing songs outside of its " #~ "library, you may ignore this warning." #~ msgid "GStreamer status %r != %r" #~ msgstr "GStreamer status %r != %r" #~ msgid "_Pane %d:" #~ msgstr "_Pane %d:" #~ msgid "View and edit tags in the playing song" #~ msgstr "View and edit tags in the playing song" #~ msgid "Double-click a tag value to change it, right-click for other options" #~ msgstr "" #~ "Double-click a tag value to change it, right-click for other options" #~ msgid "Add a new tag" #~ msgstr "Add a new tag" #~ msgid "Tag by Filename" #~ msgstr "Tag by Filename" #~ msgid "The first letter of each word will be capitalized" #~ msgstr "The first letter of each word will be capitalized" #~ msgid "" #~ "Characters not allowed in Windows filenames (\\:?;\"<>|) will be replaced " #~ "by underscores" #~ msgstr "" #~ "Characters not allowed in Windows filenames (\\:?;\"<>|) will be replaced " #~ "by underscores" #~ msgid "" #~ "Characters outside of the ASCII set (A-Z, a-z, 0-9, and punctuation) will " #~ "be replaced by underscores" #~ msgstr "" #~ "Characters outside of the ASCII set (A-Z, a-z, 0-9, and punctuation) will " #~ "be replaced by underscores" #~ msgid "Apply to these _files..." #~ msgstr "Apply to these _files..." #~ msgid "Path" #~ msgstr "Path" #~ msgid "Tray Preferences - Quod Libet" #~ msgstr "Tray Preferences - Quod Libet" #~ msgid "%(different)s, %(missing)s" #~ msgstr "%(different)s, %(missing)s" #~ msgid "E: You need GTK+ 2.6 and PyGTK 2.6 or greater." #~ msgstr "E: You need GTK+ 2.6 and PyGTK 2.6 or greater." #~ msgid "E: You have GTK+ %s and PyGTK %s." #~ msgstr "E: You have GTK+ %s and PyGTK %s." #~ msgid "E: Please upgrade GTK+/PyGTK." #~ msgstr "E: Please upgrade GTK+/PyGTK." #~ msgid "skip count" #~ msgstr "skip count" #~ msgid "Search Bar" #~ msgstr "Search Bar" #~ msgid "Play songs in random order" #~ msgstr "Play songs in random order" #~ msgid "S_ong" #~ msgstr "S_ong" #~ msgid "_Choose randomly" #~ msgstr "_Choose randomly" #~ msgid "Drag songs here to add them to the play queue" #~ msgstr "Drag songs here to add them to the play queue" #~ msgid "" #~ "Deleting <b>%s</b> failed. Possibly the target file does not exist, or " #~ "you do not have permission to delete it." #~ msgstr "" #~ "Deleting <b>%s</b> failed. Possibly the target file does not exist, or " #~ "you do not have permission to delete it." #~ msgid "No audio device found" #~ msgstr "No audio device found" #~ msgid "" #~ "Quod Libet was unable to open your audio device. Often this means another " #~ "program is using it, or your audio drivers are not configured.\n" #~ "\n" #~ "Quod Libet will now exit." #~ msgstr "" #~ "Quod Libet was unable to open your audio device. Often this means another " #~ "program is using it, or your audio drivers are not configured.\n" #~ "\n" #~ "Quod Libet will now exit." #~ msgid "_New/Edit Playlist..." #~ msgstr "_New/Edit Playlist..." #~ msgid "" #~ "Enter a name for the new playlist. If it already exists it will be opened " #~ "for editing." #~ msgstr "" #~ "Enter a name for the new playlist. If it already exists it will be opened " #~ "for editing." #~ msgid "All songs" #~ msgstr "All songs" #~ msgid "Turn shuffle off, on, or toggle it" #~ msgstr "Turn shuffle off, on, or toggle it" #~ msgid "Closing _minimizes to system tray" #~ msgstr "Closing _minimizes to system tray" #~ msgid "Performed by %s" #~ msgstr "Performed by %s" #~ msgid "arranged by %s" #~ msgstr "arranged by %s" #~ msgid "conducted by %s" #~ msgstr "conducted by %s" #~ msgid "composed by %s" #~ msgstr "composed by %s" #~ msgid "written by %s" #~ msgstr "written by %s" #~ msgid "Add songs to your library" #~ msgstr "Add songs to your library" #~ msgid "Visit the artist's website" #~ msgstr "Visit the artist's website" #~ msgid "Change volume" #~ msgstr "Change volume" #~ msgid "Supported formats:" #~ msgstr "Supported formats:" #~ msgid "" #~ "Invalid tag <b>%s</b>\n" #~ "\n" #~ "The files currently selected do not support editing this tag.Invalid tags " #~ "<b>%s</b>\n" #~ "\n" #~ "The files currently selected do not support editing these tags." #~ msgstr "" #~ "Invalid tag <b>%s</b>\n" #~ "\n" #~ "The files currently selected do not support editing this tag.Invalid tags " #~ "<b>%s</b>\n" #~ "\n" #~ "The files currently selected do not support editing these tags." #~ msgid "(shared across all %d songs)" #~ msgstr "(shared across all %d songs)" #~ msgid "(different across %d songs, missing from %d songs)" #~ msgstr "(different across %d songs, missing from %d songs)" #~ msgid "1 minute" #~ msgstr "1 minute" #~ msgid "1 hour" #~ msgstr "1 hour" #~ msgid "1 day" #~ msgstr "1 day" #~ msgid "An audio player and tag editor" #~ msgstr "An audio player and tag editor" #~ msgid "" #~ "If you have songs in directories that will not always be mounted (for " #~ "example, a removable device or an NFS shared drive), list those mount " #~ "points here. Files in these directories will not be removed from the " #~ "library if the device is not mounted." #~ msgstr "" #~ "If you have songs in directories that will not always be mounted (for " #~ "example, a removable device or an NFS shared drive), list those mount " #~ "points here. Files in these directories will not be removed from the " #~ "library if the device is not mounted." #~ msgid "" #~ "These characters will be used as separators when \"Split values\" is " #~ "selected in the tag editor" #~ msgstr "" #~ "These characters will be used as separators when \"Split values\" is " #~ "selected in the tag editor" #~ msgid "Initialized multimedia key support." #~ msgstr "Initialized multimedia key support." #~ msgid "1 track" #~ msgstr "1 track" #~ msgid "Adjust audio volume" #~ msgstr "Adjust audio volume" #~ msgid "Check for changes in the library made since the program was started" #~ msgstr "Check for changes in the library made since the program was started" #~ msgid "Set Rating" #~ msgstr "Set Rating" #~ msgid "1 time" #~ msgstr "1 time" #~ msgid "Add a new tag to the file" #~ msgstr "Add a new tag to the file" #~ msgid "Invalid date format" #~ msgstr "Invalid date format" #~ msgid "" #~ "Invalid date: <b>%s</b>.\n" #~ "\n" #~ "The date must be entered in YYYY or YYYY-MM-DD format." #~ msgstr "" #~ "Invalid date: <b>%s</b>.\n" #~ "\n" #~ "The date must be entered in YYYY or YYYY-MM-DD format." #~ msgid "_On-Screen Display" #~ msgstr "_On-Screen Display" #~ msgid "No on-screen display" #~ msgstr "No on-screen display" #~ msgid "Display OSD on the top" #~ msgstr "Display OSD on the top" #~ msgid "Display OSD on the bottom" #~ msgstr "Display OSD on the bottom" #~ msgid "Select a color for the OSD" #~ msgstr "Select a colour for the OSD" #~ msgid "Select a second color for the OSD" #~ msgstr "Select a second colour for the OSD" #~ msgid "Song _list" #~ msgstr "Song _list" #, fuzzy #~ msgid "[directory]" #~ msgstr "directory" #~ msgid "" #~ "Quod Libet - a music library and player\n" #~ "Options:\n" #~ " --help, -h Display this help message\n" #~ " --version Display version and copyright information\n" #~ " --refresh-library Rescan your song cache and then exit.\n" #~ " --print-playing Print the currently playing song.\n" #~ "\n" #~ " Player controls:\n" #~ " --next, --previous, --play-pause, --play, --pause\n" #~ " Change songs or pause/resume playing.\n" #~ " --volume +|-|0..100\n" #~ " Increase, decrease, or set the volume.\n" #~ " --shuffle 0|1|t, --repeat 0|1|t\n" #~ " Enable, disable, or toggle shuffle and repeat. \n" #~ " --query search-string\n" #~ " Make a new playlist from the given search.\n" #~ " --seek [+|-][HH:MM:]SS\n" #~ " Seek to a position in the current song.\n" #~ " --play-file filename\n" #~ " Play this file, adding it to the library if necessary.\n" #~ "\n" #~ "For more information, see the manual page (`man 1 quodlibet').\n" #~ msgstr "" #~ "Quod Libet - a music library and player\n" #~ "Options:\n" #~ " --help, -h Display this help message\n" #~ " --version Display version and copyright information\n" #~ " --refresh-library Rescan your song cache and then exit.\n" #~ " --print-playing Print the currently playing song.\n" #~ "\n" #~ " Player controls:\n" #~ " --next, --previous, --play-pause, --play, --pause\n" #~ " Change songs or pause/resume playing.\n" #~ " --volume +|-|0..100\n" #~ " Increase, decrease, or set the volume.\n" #~ " --shuffle 0|1|t, --repeat 0|1|t\n" #~ " Enable, disable, or toggle shuffle and repeat. \n" #~ " --query search-string\n" #~ " Make a new playlist from the given search.\n" #~ " --seek [+|-][HH:MM:]SS\n" #~ " Seek to a position in the current song.\n" #~ " --play-file filename\n" #~ " Play this file, adding it to the library if necessary.\n" #~ "\n" #~ "For more information, see the manual page (`man 1 quodlibet').\n" #~ msgid "" #~ "Quod Libet %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, and others\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE." #~ msgstr "" #~ "Quod Libet %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, and others\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE." #~ msgid "E: Unknown command line option: %s" #~ msgstr "E: Unknown command line option: %s" #~ msgid "%d:%02d:%02d" #~ msgstr "%d:%02d:%02d" #~ msgid "%d:%02d" #~ msgstr "%d:%02d" #~ msgid "" #~ "Ex Falso - an audio file tagger\n" #~ "Usage: %s [directory]\n" #~ "\n" #~ "For more information, see the manual page (`man 1 exfalso').\n" #~ msgstr "" #~ "Ex Falso - an audio file tagger\n" #~ "Usage: %s [directory]\n" #~ "\n" #~ "For more information, see the manual page (`man 1 exfalso').\n" #~ msgid "Quod Libet is free software licensed under the GNU GPL v2." #~ msgstr "Quod Libet is free software licensed under the GNU GPL v2." #~ msgid "Songs heard:" #~ msgstr "Songs heard:" #~ msgid "Listening" #~ msgstr "Listening" #~ msgid "%s and %d more - Properties" #~ msgstr "%s and %d more - Properties" #~ msgid "" #~ "No on-screen display\n" #~ "Display OSD on the top\n" #~ "Display OSD on the bottom" #~ msgstr "" #~ "No on-screen display\n" #~ "Display OSD on the top\n" #~ "Display OSD on the bottom" #~ msgid "" #~ "No volume adjustment\n" #~ "Per-song (\"Radio\") volume adjustment\n" #~ "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "" #~ "No volume adjustment\n" #~ "Per-song (\"Radio\") volume adjustment\n" #~ "Per-album (\"Audiophile\") volume adjustment" #~ msgid "Pause/resume the current song" #~ msgstr "Pause/resume the current song" #~ msgid "Perfor_mer" #~ msgstr "Perfor_mer" #~ msgid "Pick a random album from your library" #~ msgstr "Pick a random album from your library" #~ msgid "Pick a random artist from your library" #~ msgstr "Pick a random artist from your library" #~ msgid "Pick a random genre from your library" #~ msgstr "Pick a random genre from your library" #~ msgid "Play _song" #~ msgstr "Play _song" #~ msgid "Play next song" #~ msgstr "Play next song" #~ msgid "Pre_vious song" #~ msgstr "Pre_vious song" #~ msgid "Select a font for the OSD" #~ msgstr "Select a font for the OSD" #~ msgid "_Part" #~ msgstr "_Part" #~ msgid "Pause _song" #~ msgstr "Pause _song" #~ msgid "_About" #~ msgstr "_About" #~ msgid "xx minutes, " #~ msgstr "xx minutes, " ���������������quodlibet-3.0.2/po/pl.po����������������������������������������������������������������������������0000644�0001750�0001750�00000254557�12173213426�015346� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Polish translation of PACKAGE. # Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # godfryd <godfryd@gmail.com>, 2005. # updated to 0.12 version by pambuk <pambuk@gmail.com> # updated to 0.15 version by Tomasz Torcz <zdzichu@irc.pl> # # msgid "" msgstr "" "Project-Id-Version: Quod Libet 0.16\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2006-04-26 18:32+0200\n" "Last-Translator: Tomasz Torcz <zdzichu@irc.pl>\n" "Language-Team: Polish <gnomepl@pandora.info.bielsko.pl>\n" "Language: pl\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" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "edytor znaczników audio" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Edycja znaczników w plikach dźwiekowych" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Odtwarzacz Muzyczny" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Słuchanie, przeglądanie lub edycja kolekcji muzycznej" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Odtwarzacz" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Podgląd" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "edytor znaczników audio" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "katalog" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "_Pokazywanie komentarzy komputerowych" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "opis" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Wartość" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Znacznik" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "edytor znaczników audio" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 msgid "Remove tags" msgstr "" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 msgid "Remove all tags" msgstr "" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filtruje wg. znacznika" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filtruje wg. znacznika" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Brak informacji o czasie" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Pokaż skrócone infomacje o użyciu" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> nie jest prawidłowym położeniem." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Utwory nie przypisane do albumów" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Ustawienia Listy Albumów" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Pokazuj o_kładki albumów" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Lista Albumów" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d ścieżka" msgstr[1] "%d ścieżki" msgstr[2] "%d ścieżek" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d płyta" msgstr[1] "%d płyty" msgstr[2] "%d płyt" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Błędny wzorzec" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Tytuł" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artysta" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "Da_ta" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "rodzaj" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Ocena" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Sortuj według daty" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Ustawienia" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Lista Albumów" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "Lista _Albumów" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Wszystkie albumy" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d album" msgstr[1] "%d albumy" msgstr[2] "%d albumów" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Pokazuj o_kładki albumów" msgstr[1] "Pokazuj o_kładki albumów" msgstr[2] "Pokazuj o_kładki albumów" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Nieznany" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Nowy kanał" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Proszę podać adres kanału audio." #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Kanały Audio" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "Kanały _Audio" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Pobierz..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Pobierz Pliki" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Pobierz Plik" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Nie można dodać kanału" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "Nie można dodać <b>%s</b>. Sprawdź, czy serwer jest dostępny i czy jest to " "adres kanału audio." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Przeglądarka biblioteki" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d utwór (%(time)s)" msgstr[1] "%(count)d utwory (%(time)s)" msgstr[2] "%(count)d utworów (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Nieznany" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Rozdziel na _wiele wartości" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Własne" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Ustawienia Listy Albumów" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "System plików" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "System _plików" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Nie można dodać utworu" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "Nie można dodać wybranych plików do listy utworów lub kolejki." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Dodaj do biblioteki" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Nieobsługiwany typ pliku" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Lista stacji może zawierać jedynie adresy stacji, a nie ich listy lub listy " "utworów. Następujące lokacje nie mogły być załadowane:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Nie można dodać stacji" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Radio Internetowe" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Pobierz Pliki" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Nowa Stacja" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Proszę podać adres internetowej stacji radiowej." #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "ocena" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "Radio _Internetowe" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Nowa stacja" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Nowa stacja" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Nowa Stacja" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Nie znaleziono żadnych stacji." #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Nie odnaleziono rozgłośni internetowych w %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Wszystkie podane stacje już znajdują się w bibliotece." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Usuń z listy utworów" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "Dodaj do _listy utworów" # python-format # python-format #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d nowa stacja" msgstr[1] "%(count)d nowe stacje" msgstr[2] "%(count)d nowych stacji" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Właściwości urządzenia" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Urządzenie:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Niezamontowane" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Punkt montowania:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Nazwa:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Urządzenia" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Urządzenia" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Wysuń" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Zmień nazwę" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "zajęte <b>%s</b>, wolna przestrzeń <b>%s</b>" # python-format #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> nie jest podłączone." # python-format #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "Kopiowanie <b>%s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Nie można skopiować utworu" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Nie ma wystarczającej ilości wolnego miejsca na ten utwór." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> nie można było skopiować." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Nie można usuwać utworów" # python-format #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Usuwanie <b>%s</b>" # python-format #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> nie mógł zostać usunięty." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Nie można usunąć utworu" # python-format #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Wysuwanie <b>%s</b> nie powiodło się." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Nie można wysunąc urządzenia" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Ustawienia przeglądarki panelowej" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Wszystkie" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Przeglądarka panelowa" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "Przeglądarka _panelowa" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Z_aznacz wszystko" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Importuję listę utworów.\n" "\n" "Dodano %d z %d utworów." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Nowa lista utworów" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Wpisz nazwę dla nowego katalogu:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Nowa lista utworów..." #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, fuzzy, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s i %(count)d więcej" msgstr[1] "%(title)s i %(count)d więcej" msgstr[2] "%(title)s i %(count)d więcej" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Listy utworów" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "Przeglądanie _list utworów" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Usuń z listy utworów" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Import" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Nie można zaimportować listy odtwarzania" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Można importować jedynie listy w formatach M3U i PLS." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "Mie_szaj" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Nie można zmienić nazwy list odtwarzania" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Import listy utworów" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Bez przeglądania" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Bez przeszukiwania" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Wyszukiwanie w bibliotece" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Wyszukiwanie w bibliotece" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "Ogranicz _Liczbę Wyników" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Nieznane urządzenie" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "E: '%s' nie jest unikalnym prefiksem." #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "Niepoprawna wartość" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "W_zmocnienie (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Skopiuj okładki _albumów" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Połącz znaczniki z wielo_ma wartościami" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Zawarcie _wersji w tytule" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "Zawarcie _numeru części w tytule" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Model:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Pojemność:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Oprogramowanie:" #: ../quodlibet/devices/ipod.py:181 #, fuzzy msgid "Removing orphaned iPod track" msgstr "W: usuwam osieroconą ścieżkę z iPoda" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Nie można zapisać biblioteki iPod." #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Niezainicjalizowany iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Czy chcesz utworzyć pustą bibliotekę na tym iPodzie?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Wzór nazw plików:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "Usuń nieu_żywane okładki i katalogi" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Plik istnieje" # python-format #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Zastąpić <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Biblioteka" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Sprawdzanie punktów montowania" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Skanowanie biblioteki" # python-format #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Skanowanie %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d sekunda" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "Nie można otworzyć plików" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "Niepoprawna wartość" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "Nie można utworzyć katalogu" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet już działa." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Żaden utwór nie jest w tej chwili odtwarzany." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet nie działa." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Nie można zapisać do pliku %s. Usuwanie go." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "biblioteka muzyki i odtwarzacz" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[opcje]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Wypisuje tytuł odtwarzanego utworu i kończy" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Natychmiast zaczyna odtwarzanie" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Przechodzi do następnego utworu" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Przechodzi do poprzedniego utwóru" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Rozpoczyna odtwarzanie" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Zatrzymuje odtwarzanie" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Przełącza odtwarzanie/pauzę" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Rozpoczyna odtwarzanie" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Głośniej" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Ciszej" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Wypisuje status odtwarzacza" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Ukrywa główne okno" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Wyświetla główne okno" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Przełącza widoczność głównego okna" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Przenosi działającego QL na pierwszy plan" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Usunięcie filtrowania w przeglądarce" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "_Odśwież bibliotekę" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Wypisuje bieżącą listę utworów" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Wypisuje zawartość kolejki" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Kończy Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Szuka w odtwarzanym utworze" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][GG:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Ustawia kolejność odtwarzania" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Włącza, wyłącza lub przełącza stan powtarzania" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Ustawia głośność" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Przeszukuje bibliotekę" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "zapytanie" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Odtwarza plik" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "nazwa_pliku" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Ocenia odtwarzany utwór" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Ustawia bieżącą przeglądarkę" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Otwiera nową przeglądarkę" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Wyświetla lub ukrywa kolejkę" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Wyświetla lub ukrywa główną listę utworów" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtruje losowo" #: ../quodlibet.py:340 msgid "command|tag" msgstr "" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtruje wg. znacznika" #: ../quodlibet.py:341 msgid "tag=value" msgstr "znacznik=wartość" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Dodaje do kolejki plik lub zapytanie" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "nazwa pliku" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Usuwa z kolejki plik lub zapytanie" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "E: Niepoprawny argument dla '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "E: Spróbuj %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Obsługiwane formaty: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Urządzenie audio: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Początek" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/D" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Czas" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Nazwa zakładki" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Zakładki" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Brak informacji o czasie" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Wartość:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Zachowane wartości" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Modyfikuj zapamiętane wartości..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Utwory" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Wyświetlanie pozostałego czasu" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Modyfikuj zakładki..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "Nagłówki _ścieżek" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "Nagłówki _albumów" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Zatrzymaj po tym utworze" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtruje wg. znacznika" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Usuń Pliki" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Przenieś do Śmietnika" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Usunąć wskazany plik?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Usunąć wskazane pliki?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s i %(count)d więcej..." msgstr[1] "%(title)s i %(count)d więcej..." msgstr[2] "%(title)s i %(count)d więcej..." #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "Przenoszenie %d/%d." #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Usuwanie %d/%d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Nie można zapisać biblioteki iPod." # python-format #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Wysuwanie <b>%s</b> nie powiodło się." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Nie można usunąć pliku" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Nie można usunąć <b>%s</b>." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Pobieranie" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Nazwa pliku" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Rozmiar" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "_Kolejka" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "wzorzec" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Modyfikuj zapamiętane wartości..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Podgląd" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Więcej opcji..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "braki w %d utworze" msgstr[1] "braki w %d utworach" msgstr[2] "braki w %d utworach" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "różne w %d utworze" msgstr[1] "różne w %d utworach" msgstr[2] "różne w %d utworach" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Rozdziel na _wiele wartości" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Oddziel płytę od al_bumu" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Oddziel _Wersję od Tytułu" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Oddziel aranżera od _artysty" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Oddziel w_ykonawcę od artysty" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Oddziel w_ykonawcę od artysty" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Oddziel _Wersję od Tytułu" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Dodaj Znacznik" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Znacznik:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "Usuń z _biblioteki" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Modyfikuj znaczniki" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Zapisane" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Nie można dodać znacznika" # python-format #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Nie można dodać <b>%s</b>\n" "\n" "Wybrane pliki nie obsługują znaczników z wieloma wartościami." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Błędny znacznik" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Błędny znacznik <b>%s</b>\n" "\n" "Nie można zmienić tego znacznika w zaznaczonym pliku." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Znacznik może być niewłaściwy" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "Wygląda na to, że znacznik <b>%s</b> zmieniono w trakcie działania programu." "Zapisanie bez odświeżenia biblioteki może spowodować nadpisanie innych zmian " "w znacznikach.\n" "\n" "Czy zapisać mimo to?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Nie można zapisać utworu" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Nie można zapisać <b>%s</b>. Prawdopodobnie plik jest tylko do odczytu,albo " "zepsuty albo nie masz uprawnień do jego edycji." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Niepoprawna wartość" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Błędna wartość: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Wtyczki" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d utwór" msgstr[1] "%d utwory" msgstr[2] "%d utworów" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ustawienia Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Rozdziel _przy:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "_Pokazywanie komentarzy komputerowych" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Edycja Znaczników" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Katalogi" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Nowy Katalog..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "Z_aznacz wszystkie podkatalogi" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Nowy katalog" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Wpisz nazwę dla nowego katalogu:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Nie można utworzyć katalogu" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Nie można usunąć katalogu" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "przez %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Płyta %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Ścieżka %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "Dodaj do _listy utworów" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "Dostosuj wyświ_etlanie" #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "_Modyfikuj znaczniki" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Nie odtwarza" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "Wy_czyść błędy" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Nie wybrano żadnych utworów." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Brak utwory" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informacje" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Słowa" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Błędy" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artysta" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artyści" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "wykonawcy" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Nigdy" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d raz" msgstr[1] "%d razy" msgstr[2] "%d razy" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "dodano" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "ostatnio odtwarzane" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "odtwarzań" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "pominięć" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "ocena" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "długość" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "rozmiar pliku" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "zmodyfikowano" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitrate" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Plik" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "wybrany %d" msgstr[1] "wybrane %d" msgstr[2] "wybrano %d" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Wyprodukowane przez %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "wykonawca" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Ścieżka niedostępna" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Lista ścieżek" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d utwór bez albumu" msgstr[1] "%d utwóry bez albumu" msgstr[2] "%d utworów bez albumu" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Wybrana dyskografia" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d utwór bez artysty" msgstr[1] "%d utwory bez artystów" msgstr[2] "%d utworów bez artystów" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "albumy" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Całkowita długość:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Całkowity rozmiar:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Pliki" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Pobieranie" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Nie znaleziono słów tego utworu." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Szukanie słów utworu..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Nie można pobrać słów." #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" # python-format # python-format #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d nowa stacja" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Porzucić zmiany w znacznikach?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Znaczniki zostały zmienione, ale nie zapisane. Zapisać pliki czy przywrócić " "starą wersję i porzucić zmiany?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "Nieznany" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "W porządku" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_W porządku" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Losowo" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Ważone" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Ważone" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Pojedynczo" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "P_ojedynczo" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Błędy wtyczek" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Wtyczki" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Pokazuj bł_ędy" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "wersja" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "Bez przeglądania" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Nie znaleziono żadnych wtyczek." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Płyta" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "Ścież_ka" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "grupowanie" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Nazwa pliku" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Długość" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Lista utworów" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "Automatyczny _skok do bieżącego utworu" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "" "W chwili zmiany odtwarzanego utworu, lista zostanie przesunięta na nowy utwór" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Inne:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "Dostosuj wyświ_etlanie" #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Widoczne kolumny" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Zawarcie _wersji w tytule" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Zawarcie nazwy _katalogu w tytule" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Ustawienia" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Przeglądarki" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "Filtr _globalny:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "Zatrzymaj po tym utworze" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Szukaj" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "W chwili zmiany odtwarzanego utworu, lista zostanie przesunięta na nowy utwór" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "_Ocena" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Lista Albumów" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Zatrzymuje odtwarzanie" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "W_zmocnienie (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "W_zmocnienie (dB):" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "Dopasowywanie _głośności" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "Dopasowywanie _głośności" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Modyfikuj znaczniki" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Porzucić zmiany w znacznikach?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "Zapisuj oceny i ilość odtworzeń" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Email:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Oceny i ilość odtworzeń będą przypisane do tego adresu email" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Nowa stacja" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "_Odśwież bibliotekę" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "_Odśwież bibliotekę" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Skanowane _Katalogi" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Brak utwory" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Ustawienia" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Właściwości" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Kolejka" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Usunięcie wszystkich utworów z kolejki" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Losuj" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "K_olejność:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "Powta_rzanie" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Odtwarzanie od początku listy po odtworzeniu wszystkich utworów" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Nie można dodać utworów" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> używa nieobsługiwanego protokołu." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Muzyka" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "Dod_aj katalog..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Dodaj plik..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Dodaj adres..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Otwiera nową przeglądarkę" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtr" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Nigdy nie odtwarzane" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "40 _popularnych" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Sterowanie" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Skocz do odtwarzanego utworu" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Widok" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Pomoc" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "Wy_czyść błędy" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Szukaj" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "_Odśwież bibliotekę" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "_Załaduj ponownie bibliotekę" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtruj _rodzaj" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtruj _artystów" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filtruj al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Losuj _rodzaj" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Losuj _artystę" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Losuj al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "_Lista utworów" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Sprawdź, czy zaszły zmiany w bibliotece" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Przeładowuje wszystkie utwory w bibliotece (to może chwilę potrwać)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "40 najczęściej odtwarzanych utworów (może być więcej jeśli utwory mają tę " "samą liczbę odtworzeń)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Dodaj adres" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Proszę podać adres internetowej stacji radiowej:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Nie można dodać stacji" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> nie jest prawidłowym położeniem." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Dodaj Utwory" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Śledź zmiany w tym folderze" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "Nie można dodać do biblioteki %s.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Nie można dodać utworu" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Zamiana znaków spacji na znaki _podkreślenia" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Usuń znaki niezgodne z _Windows" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Usuń znaki _diakrytyczne" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Usuń znaki spoza _ASCII" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Zmień nazwy plików" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Nowa nazwa" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "Pokazuj bł_ędy" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Kontynuuj" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Nie można zmienić nazwy pliku" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Nie można zmienić nazwy z <b>%s</b> na <b>%s</b>.Prawdopodobnie docelowy " "plik już istnieje albo nie masz prawa zapisu." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Ścieżka nie jest bezwzględna" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Wzorzec\n" "\t<b>%s</b>\n" "zawiera / ale nie zaczyna się od korzenia. W celu uniknięcia źle nazwanych " "katalogów zacznij wzorzec od katalogu / lub ~/." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Utwory znajdujące się w tych katalogach (oddzielonych przez ':') zostaną " "dodane do biblioteki" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Wybierz Katalogi" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Zachowane wartości" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Modyfikuj zapamiętane wartości..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Szukaj" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limit:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Waga" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtr %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "Nagłówki _albumów" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Nagłówki _ścieżek" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "Nagłówki _albumów" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "Nagłówki _osób" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Nagłówki _dat" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Nagłówki _plików" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "Nagłówki p_rodukcji" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Dostosuj nagłówki" #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Dostosuj nagłówki" #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Dodaj do _kolejki" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Skopiuj na urządzenie" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Usuń z listy utworów" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "Nagłówki _ścieżek" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "Nagłówki _osób" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "Nagłówki _albumów" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "Nagłówki _dat" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "Nagłówki _plików" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "Nagłówki p_rodukcji" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Znacznik:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Własne" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Zamiana znaków _podkreślenia na znaki spacji" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "Wielke litery Jak W _Tytule" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Rozdzielanie na wiele _wartości" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Znaczniki ze ścieżki" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Zastępowanie istniejących znaczników nowymi" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Dodawanie nowych znaczników do istniejących" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Wzorzec\n" "\t<b>%s</b>\n" "jest błędny. Prawdopodobnie zawiera on dwa razy ten sam znacznik albo " "niezamknięte nawiasy (< i >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Błędne znaczniki" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Błędne znaczniki <b>%s</b>\n" "\n" "Nie można zmieniać tych znaczników w zaznaczonych plikach" #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Nie można zmodyfkiwować utworu" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Wpisany szablon jest nieprawidłowy. Upewnij się, że znaki < i > " "zostały wpisane jako \\< i \\> a wszystkie otwarte znaczniki zostały " "zamknięte.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Dostosuj..." #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Numeracja ścieżek" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "_Zacznij od:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Liczba ścieżek:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Ścieżka" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "i %d więcej..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Zapisywanie zmienionych utworów." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d z %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Wyczyść pole wyszukiwania" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Lista utworów %s już istnieje." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "_Ocena" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Pokaż skrócone infomacje o użyciu" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Pokaż numer wersji i prawa autorskie" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Użycie: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[opcje]" #: ../quodlibet/util/__init__.py:186 #, fuzzy, python-format msgid "Option %r not recognized." msgstr "E: Opcja `%s' nie została rozpoznana." #: ../quodlibet/util/__init__.py:189 #, fuzzy, python-format msgid "Option %r requires an argument." msgstr "E: Opcja `%s' wymaga podania argumentu." #: ../quodlibet/util/__init__.py:192 #, fuzzy, python-format msgid "%r is not a unique prefix." msgstr "E: '%s' nie jest unikalnym prefiksem." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Błędne Kodowanie]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "no_capitalize" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "Data musi mieć postać 'YYYY', 'YYYY-MM-DD' lub 'YYYY-MM-DD HH:MM:SS'." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Wzmocnienie Replay Gain należy podać w formacie 'x.yy dB'." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Szczyty Replay Gain należy podać w formacie 'x.yy'." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "Identyfikatory MusicBrainz muszą być w formacie UUID." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "Status wydania MusicBrainz może być jedynie 'official', 'promotional', lub " "'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "aranżer" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "autor" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "kompozytor" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "dyrygent" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "kontakt" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "data" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "opis" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "rodzaj" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "grupowanie" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "język" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licencja" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "pochodzenie" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "autor słów" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organizacja" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "tytuł" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "wersja" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "strona www" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "artysta na albumie" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "płyta" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "ścieżka" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "numer katalogowy" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "data pierwszego wydania" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "oryginalny album" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "oryginalny wykonawca" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "data nagrania" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "kraj wydania" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "artysta na albumie" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "artyści" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "artysta na albumie" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "wykonawcy" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "wykonawcy" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz ID ścieżki" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "MusicBrainz ID ścieżki" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "MusicBrainz ID artysty" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz ID artysty na albumie" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM ID ścieżki" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID ścieżki" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "Status MusicBrainz albumu" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "Typ MusicBrainz albumu" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "wzmocnienie ścieżki" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "szczyt ścieżki" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "wzmocnienie albumu" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "szczyt albumu" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Ustawienia" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "płyt" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "ścieżek" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "ostatnio odtwarzane" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "pełna nazwa" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "punkt montowania" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "błędy" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "ludzie" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "rok" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "data pierwszego wydania" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "Zakładki" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "format" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "autorzy słów" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "aranżerowie" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "kompozytorzy" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "dyrygenci" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "autorzy" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d sekunda" msgstr[1] "%d sekundy" msgstr[2] "%d sekund" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuta" msgstr[1] "%d minuty" msgstr[2] "%d minut" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d godzina" msgstr[1] "%d godziny" msgstr[2] "%d godzin" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d dzień" msgstr[1] "%d dni" msgstr[2] "%d dni" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d rok" msgstr[1] "%d lata" msgstr[2] "%d lat" #~ msgid "_Browse Library" #~ msgstr "_Przeglądaj bibliotekę" #~ msgid "No eject command found." #~ msgstr "Nie znaleziono polecenie wysuwania." #~ msgid "Unable to start web browser" #~ msgstr "Nie można uruchomić przeglądarki WWW." #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Nie znaleziono przeglądarki WWW. Należy ustawić zmienną środowiskową " #~ "$BROWSER albo ustawić link symboliczny /usr/bin/sensible-browser." #, fuzzy #~ msgid "Library Error" #~ msgstr "Przeglądarka biblioteki" #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Skopiuj na urządzenie" #~ msgid "translator-credits" #~ msgstr "" #~ "Michal Nowikowski\n" #~ "Witold Kieraś <pambuk@gmail.com>\n" #~ "Tomasz Torcz <zdzichu@irc.pl>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Inne nagłówki do wyświetlania, rozdzielone spacjami" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "_Kontynuuj" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "Informacje" #~ msgid "_Search:" #~ msgstr "_Szukanie:" #~ msgid "Search your library" #~ msgstr "Szukaj w bibliotece" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quodlibet@lists.sacredchao.net>\n" #~ "\n" #~ "To jest wolne oprogramowanie; przeczytaj warunki kopiowania w licencji. " #~ "Na program NIE jest udzielana jakakolwiek gwarancja, nawet gwarancja " #~ "PRZYDATNOŚCI HANDLOWEJ czy też PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ.\n" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Całkowity rozmiar:" #~ msgid "Quod Libet Plugins" #~ msgstr "Wtyczki Quod Libet" #~ msgid "Color _search terms" #~ msgstr "_Kolorowanie poszukiwanych wyrażeń" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Wyświetla proste wyszukiwania na niebiesko, zaawansowane na zielono i " #~ "nieprawidłowe na czerwono" #~ msgid "_Select" #~ msgstr "_Wybierz" #~ msgid "Separators for splitting tags" #~ msgstr "Separatory dzielenia znaczników" #, fuzzy #~ msgid "Display" #~ msgstr "Dostosuj..." #~ msgid "Quod Libet Preferences" #~ msgstr "Ustawienia Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "Nie odtwarzane _dzisiaj" #~ msgid "Not Played in a _Week" #~ msgstr "Nie odtwarzane w tym _tygodniu" #~ msgid "Not Played in a _Month" #~ msgstr "Nie odtwarzane w tym _miesiącu" #~ msgid "B_ottom 40" #~ msgstr "40 _niepopularnych" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "40 najrzadziej odtwarzanych utworów (może być więcej jeśli utwory mają tę " #~ "samą liczbę odtworzeń)" #~ msgid "gtk-media-next" #~ msgstr "gtk-media-next" #~ msgid "gtk-media-previous" #~ msgstr "gtk-media-previous" #~ msgid "gtk-media-play" #~ msgstr "gtk-media-play" #~ msgid "gtk-media-pause" #~ msgstr "gtk-media-pause" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #, fuzzy #~ msgid "Artist" #~ msgstr "_Artysta" #, fuzzy #~ msgid "Date" #~ msgstr "Da_ta" #~ msgid "Choose New Stations" #~ msgstr "Wybierz nowe stacje" #~ msgid "Add" #~ msgstr "Dodaj" #, fuzzy #~ msgid "Bitrate" #~ msgstr "bitrate" #~ msgid "_Stations..." #~ msgstr "_Stacje..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Kończy Quod Libet" #~ msgid "Unable to save library" #~ msgstr "Nie można zapisać biblioteki." #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Nie można odtwarzać utworu" #~ msgid "_Information" #~ msgstr "_Informacje" #~ msgid "Sort by title" #~ msgstr "Sortuj według tytułu" #~ msgid "Sort by artist" #~ msgstr "Sortuj według artystów" #~ msgid "Lyrics provided by %s." #~ msgstr "Słowa utworów dostarcza %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Nie odnaleziono tekstu.\n" #~ "\n" #~ "Możesz kliknąć przycisk Pobieranie, aby Quod Libet poszukał słów w " #~ "Internecie. Możesz również wpisać je samodzielnie i kliknąć Zapisz." #~ msgid "part" #~ msgstr "część" #~ msgid "Opening audio device." #~ msgstr "Otwieranie urządzenia audio." #~ msgid "%d/%d songs saved" #~ msgstr "zapisano %d/%d utworów" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainz ID albumu" #~ msgid "Loaded song library." #~ msgstr "Załadowano bibliotekę utworów." #~ msgid "Unable to open audio device" #~ msgstr "Nie można otworzyć urządzenia audio" # python-format #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet mnie mógł użyć 'autosink' ani sterownika '%(sink)s'. Musisz " #~ "samodzielnie podać wyjście GStreamer zmieniając linijkę\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "w pliku ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet nie odnalazł elementr 'filesrc' GStreamera. Sprawdź, czy " #~ "poprawnie zainstalowano GStreamer." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer nie mógł załadować wybranego utworu." �������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/en_GB.po�������������������������������������������������������������������������0000644�0001750�0001750�00000300666�12173213426�015676� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# British English translation of Quod Libet. # Copyright (C) 2004 Joe Wreschnig # This file is distributed under the same license as the Quod Libet package. # Joe Wreschnig <piman@sacredchao.net>, 2004 # # msgid "" msgstr "" "Project-Id-Version: Quod Libet 2.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:34+0100\n" "Last-Translator: Nick Boultbee <nick.boultbee@googlemail.com>\n" "Language-Team: Joe Wreschnig <piman@sacredchao.net>\n" "Language: en_GB\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-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Audio tag editor" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Edit tags in your audio files" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Music Player" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Listen to, browse, or edit your audio collection" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "_Pause" #: ../data/quodlibet.desktop.in.h:4 #, fuzzy msgid "Next" msgstr "_Next" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "Pre_vious" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "an audio tag editor" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "directory" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Show _programmatic tags" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "Description" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Value" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Tag" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Audio tag editor" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "_Remove Station" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Remove selected tag" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filter on a tag value" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filter on a tag value" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "No time information" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Display brief usage information" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> is not a valid location." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Songs not in an album" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Album List Preferences" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Show album _covers" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Album Display" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d track" msgstr[1] "%d tracks" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disc" msgstr[1] "%d discs" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Invalid pattern" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Title" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artist" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Date" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "genre" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Rating" #: ../quodlibet/browsers/albums.py:189 msgid "Sort _by..." msgstr "" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Preferences" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Album List" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Album List" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "All Albums" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d album" msgstr[1] "%d albums" #: ../quodlibet/browsers/albums.py:725 msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Reload album _cover" msgstr[1] "Reload album _covers" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Unknown" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "New Feed" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Enter the location of an audio feed:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Audio Feeds" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Audio Feeds" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Download..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Download Files" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Download File" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Unable to add feed" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Library Browser" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d song (%(time)s)" msgstr[1] "%(count)d songs (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Unknown" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Split into _Multiple Values" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Custom" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Album List Preferences" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "File System" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_File System" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Unable to copy songs" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "The files selected cannot be copied to other song lists or the queue." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Add to Library" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Unsupported file type" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Unable to add station" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Internet Radio" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Download Files" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "New Station" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Enter the location of an Internet radio station:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "rating" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Internet Radio" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_New Station" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_New Station" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "New Station" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "No stations found" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "No Internet radio stations were found at %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "All stations listed are already in your library." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Remove from Playlist" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Add to Playlist" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d station" msgstr[1] "%(count)d stations" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Device Properties" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Device:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Not mounted" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Mount Point:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Name:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Media Devices" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Media Devices" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Eject" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Rename" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> used, <b>%s</b> available" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> is not connected." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Unable to copy song" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "There is not enough free space for this song." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> could not be copied." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Unable to delete songs" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> could not be deleted." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Unable to delete song" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Ejecting <b>%s</b> failed." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Unable to eject device" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Paned Browser Preferences" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "All" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Paned Browser" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Paned Browser" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Select _All" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "New Playlist" #: ../quodlibet/browsers/playlists.py:141 msgid "Enter a name for the new playlist:" msgstr "Enter a name for the new playlist:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_New Playlist" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Playlists" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Playlists" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Remove from Playlist" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Import" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Unable to import playlist" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet can only import playlists in the M3U and PLS formats." #: ../quodlibet/browsers/playlists.py:504 #, fuzzy msgid "Remove Duplicates" msgstr "Remove selected tag" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Shuffle" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Unable to rename playlist" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Import Playlist" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Disable Browser" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Disable Browser" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Search Library" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Search Library" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Limit Results" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Unknown Device" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "%r is not a supported device." #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "Initialising device backend." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Device backend initialised." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Volume Gain (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Copy _album covers" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Combine tags with _multiple values" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Title includes _version" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "Album includes _disc subtitle" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Model:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Capacity:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Unable to save iPod database" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Uninitialised iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Do you want to create an empty database on this iPod?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Filename Pattern:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Remove unused covers and directories" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "File exists" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Overwrite <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Library" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Checking mount points" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Scanning library" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Scanning %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "1 second" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "GStreamer output pipeline could not be initialised. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet is already running." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "No song is currently playing." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet is not running." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Unable to write to %s. Removing it." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "a music library and player" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[options]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Print the playing song and exit" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Begin playing immediately" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Jump to next song" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Jump to previous song" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Start playback" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Pause playback" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Toggle play/pause mode" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Start playback" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Turn up volume" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Turn down volume" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Print player status" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Hide main window" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Show main window" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Toggle main window visibility" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Focus the running player" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Remove active browser filters" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Refresh and rescan library" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Print the current playlist" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Print the contents of the queue" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Exit Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Seek within the playing song" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Set or toggle the playback order" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Turn repeat off, on, or toggle it" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Set the volume" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Search your audio library" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "query" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Play a file" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "filename" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Rate the playing song" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Set the current browser" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Open a new browser" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Show or hide the queue" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Show or hide the main song list" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filter on a random value" #: ../quodlibet.py:340 msgid "command|tag" msgstr "tag" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filter on a tag value" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tag=value" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Enqueue a file or query" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "filename" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Unqueue a file or query" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Invalid argument for '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Try %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Supported formats: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Audio device: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Beginning" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/A" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Time" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Bookmark Name" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Bookmarks" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "No time information" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Value:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Saved Values" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Edit saved values..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Songs" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Display remaining time" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Edit Bookmarks..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "_Track Headers" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "_Album Headers" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Stop after this song" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filter on a tag value" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Delete Files" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Move to Trash" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Permanently delete this file?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Permanently delete these files?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s and %(count)d more..." msgstr[1] "%(title)s and %(count)d more..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "" #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "" #: ../quodlibet/qltk/delete.py:105 msgid "Unable to move to trash" msgstr "" #: ../quodlibet/qltk/delete.py:106 #, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Moving <b>%s</b> to the trash failed." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Unable to delete file" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Deleting <b>%s</b> failed." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Downloads" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Filename" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Size" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "Invalid Pattern" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Edit saved values..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Preview" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_More options..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "missing from %d song" msgstr[1] "missing from %d songs" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "different across %d song" msgstr[1] "different across %d songs" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Split into _Multiple Values" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Split Disc out of _Album" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Split _Version out of Title" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Split Arranger out of Ar_tist" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Split _Performer out of Artist" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Split _Performer out of Artist" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Split _Version out of Title" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Add a Tag" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Tag:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "ql-remove" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Edit Tags" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Write" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Unable to add tag" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Invalid tag" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Tag may not be accurate" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Unable to save song" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Invalid value" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Plugins" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d song" msgstr[1] "%d songs" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso Preferences" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Split _on:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Show _programmatic tags" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Tag Editing" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Folders" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_New Folder..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Select All Subfolders" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "New Folder" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Enter a name for the new folder:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Unable to create folder" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Unable to delete folder" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "by %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Disc %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Track %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Add to Playlist" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Edit Display..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Edit _Tags" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Not playing" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Clear Errors" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "No songs are selected." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "No Songs" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Information" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Lyrics" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Show _Errors" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artist" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artists" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "performers" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Never" #: ../quodlibet/qltk/information.py:243 #, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "" msgstr[1] "" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "added" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "last played" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "plays" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "skips" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "rating" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "length" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "file size" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "modified" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitrate" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "File" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d selected" msgstr[1] "%d selected" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Produced by %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "performer" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Track unavailable" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Track List" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d song with no album" msgstr[1] "%d songs with no album" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Selected Discography" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d song with no artist" msgstr[1] "%d songs with no artist" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "albums" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Total length:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Total size:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Files" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Download" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "No lyrics found for this song." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Searching for lyrics..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Unable to download lyrics." #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d station" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Discard tag changes?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Unknown" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "In Order" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_In Order" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Shuffle" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Weighted" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Weighted" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "One Song" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_One Song" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Plugin Errors" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Plugins" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Show _Errors" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "_Version" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Disabled" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "No plugins found." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disc" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Track" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "grouping" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Filename" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Length" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Song List" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Jump to playing song automatically" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "When the playing song changes, scroll to it in the song list" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "Behaviour" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Others:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Edit Display..." #: ../quodlibet/qltk/prefs.py:97 #, fuzzy msgid "Add or remove additional column headers" msgstr "Set and save column headers" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Visible Columns" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Title includes _version" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Filename includes _folder" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Preferences" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Browsers" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Global filter:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Search after _typing" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Search" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 msgid "Enable rating by clicking on the rating column in the song list" msgstr "" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Ratings" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Album List" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Pause playback" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "_Volume Gain (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "_Volume Gain (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "_Enable Replay Gain volume adjustment" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Edit Tags" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Discard tag changes?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Save ratings and play _counts" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Email:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Ratings and play counts will be set for this email address" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_New Station" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "Re_fresh Library" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Scan _Directories" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "No Songs" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Preferences" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Properties" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Queue" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Remove all songs from the queue" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Random" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Order:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Repeat" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Restart the playlist when finished" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Unable to add songs" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> uses an unsupported protocol." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Music" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Add a Folder..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Add a File..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Add a Location..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Open a new browser" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filters" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Never Played" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Top 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Control" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Jump to Playing Song" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_View" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Help" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Search" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Re_fresh Library" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Re_load Library" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filter on _Genre" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filter on _Artist" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filter on Al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Random _Genre" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Random _Artist" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Random Al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Song _List" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Check for changes in your library" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Reload all songs in your library (this can take a long time)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Add a Location" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Enter the location of an audio file:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Unable to add location" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> is not a valid location." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Add Music" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Watch this folder for new songs" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s could not be added to your library.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Unable to add song" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Replace spaces with _underscores" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Strip _Windows-incompatible characters" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Strip _diacritical marks" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Strip non-_ASCII characters" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Rename Files" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "New Name" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Continue" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Unable to rename file" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Path is not absolute" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Songs placed in these folders (separated by ':') will be added to your " "library" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Select Directories" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Saved Values" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Edit saved values..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Search" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limit:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Weight" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filter on %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "_Album Headers" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_Track Headers" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Album Headers" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_People Headers" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Date Headers" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_File Headers" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "_Production Headers" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Customise Headers..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Customise Headers..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Add to _Queue" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Copy to Device" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Remove from Library" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "_Track Headers" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "_People Headers" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "_Album Headers" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "_Date Headers" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "_File Headers" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "_Production Headers" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Tag:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Custom" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Replace _underscores with spaces" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Title-case tags" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Split into multiple _values" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Tags From Path" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Tags replace existing ones" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Tags are added to existing ones" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Invalid tags" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Unable to edit song" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Edit Display" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Track Numbers" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Start fro_m:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Total tracks:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Track" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "and %d more..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Saving the songs you changed." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d of %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Clear search" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "A playlist named %s already exists." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Display brief usage information" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Display version and copyright" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Usage: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[options]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Option %r not recognised." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "Option '%r' requires an argument." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "'%r' is not a unique prefix." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Invalid Encoding]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "check|titlecase?" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Replay Gain gains must be entered in 'x.yy dB' format." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Replay Gain peaks must be entered in 'x.yy' format." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz IDs must be in UUID format." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "arranger" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "author" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "composer" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "conductor" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "contact" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "date" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "description" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "genre" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "grouping" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "language" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licence" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "location" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "lyricist" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organisation" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "title" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "version" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "website" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "album artist" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disc" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "track" # label ID #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "label ID" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "original release date" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "original album" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "original artist" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "recording date" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "release country" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz track ID" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz album artist ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz album status" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz album type" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "track gain" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "track peak" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "album gain" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "album peak" #: ../quodlibet/util/tags.py:88 msgid "reference loudness" msgstr "" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "discs" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "tracks" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "last started" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "full name" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "mount point" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "errors" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "people" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "year" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "original release date" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "" #: ../quodlibet/util/tags.py:115 msgid "file format" msgstr "" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "lyricists" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "arrangers" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "composers" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "conductors" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "authors" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d second" msgstr[1] "%d seconds" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minute" msgstr[1] "%d minutes" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d hour" msgstr[1] "%d hours" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d day" msgstr[1] "%d days" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d year" msgstr[1] "%d years" #~ msgid "_Browse Library" #~ msgstr "_Browse Library" #~ msgid "No eject command found." #~ msgstr "No eject command found." #~ msgid "Unable to start web browser" #~ msgstr "Unable to start web browser" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #, fuzzy #~ msgid "Library Error" #~ msgstr "Library Browser" #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Copy to Device" #~ msgid "translator-credits" #~ msgstr "translator-credits" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Other columns to display, separated by spaces" #~ msgid "_Search:" #~ msgstr "_Search:" #~ msgid "Search your library" #~ msgstr "Search your library" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "Quod Libet %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, and others\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE." #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet Plugins" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet Preferences" #~ msgid "Not Played To_day" #~ msgstr "Not Played To_day" #~ msgid "Not Played in a _Week" #~ msgstr "Not Played in a _Week" #~ msgid "Not Played in a _Month" #~ msgstr "Not Played in a _Month" #~ msgid "B_ottom 40" #~ msgstr "B_ottom 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgid "gtk-media-next" #~ msgstr "gtk-media-next" #~ msgid "gtk-media-previous" #~ msgstr "gtk-media-previous" #~ msgid "gtk-media-play" #~ msgstr "gtk-media-play" #~ msgid "gtk-media-pause" #~ msgstr "gtk-media-pause" #~ msgid "Color _search terms" #~ msgstr "Colour _search terms" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgid "_Select" #~ msgstr "_Select" #~ msgid "Separators for splitting tags" #~ msgstr "Separators for splitting tags" #, fuzzy #~ msgid "Display" #~ msgstr "Edit Display" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #~ msgid "Artist" #~ msgstr "Artist" #~ msgid "Choose New Stations" #~ msgstr "Choose New Stations" #~ msgid "Add" #~ msgstr "Add" #~ msgid "_Stations..." #~ msgstr "_Stations..." #~ msgid "Player" #~ msgstr "Player" #~ msgid "Unable to save library" #~ msgstr "Unable to save library" #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Unable to dump logs at all." #~ msgid "pattern" #~ msgstr "pattern" #~ msgid "_Information" #~ msgstr "_Information" #~ msgid "Sort by title" #~ msgstr "Sort by title" #~ msgid "Sort by artist" #~ msgstr "Sort by artist" #~ msgid "Lyrics provided by %s." #~ msgstr "Lyrics provided by %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgid "part" #~ msgstr "part" #~ msgid "Opening audio device." #~ msgstr "Opening audio device." #~ msgid "Moving %d/%d." #~ msgstr "Moving %d/%d." #~ msgid "Deleting %d/%d." #~ msgstr "Deleting %d/%d." #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d songs saved" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainz album ID" #~ msgid "Loaded song library." #~ msgstr "Loaded song library." #~ msgid "Unable to open audio device" #~ msgstr "Unable to open audio device" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer was unable to load the selected song." #~ msgid "C_opy album covers" #~ msgstr "C_opy album covers" #~ msgid "Unable to retag multiple values" #~ msgstr "Unable to retag multiple values" #~ msgid "Changing the name of a tag with multiple values is not supported." #~ msgstr "Changing the name of a tag with multiple values is not supported." #~ msgid "W: %s is not a QL song database." #~ msgstr "W: %s is not a QL song database." #~ msgid "tag" #~ msgstr "tag" #~ msgid "Per-song (\"Radio\") volume adjustment" #~ msgstr "Per-song (\"Radio\") volume adjustment" #~ msgid "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "Per-album (\"Audiophile\") volume adjustment" #~ msgid "_Volume Normalization" #~ msgstr "_Volume Normalisation" #~ msgid "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgstr "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgid "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgstr "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgid "No new stations" #~ msgstr "No new stations" #~ msgid "M3U playlists cannot be loaded." #~ msgstr "M3U playlists cannot be loaded." #~ msgid "This station is already in your library." #~ msgstr "This station is already in your library." #~ msgid "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "by <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disc <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Track <tracknumber>>>" #~ msgstr "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "by <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disc <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Track <tracknumber>>>" #~ msgid "Tray Icon Preferences" #~ msgstr "Tray Icon Preferences" #~ msgid "" #~ "Scroll wheel adjusts volume\n" #~ "Shift and scroll wheel changes song" #~ msgstr "" #~ "Scroll wheel adjusts volume\n" #~ "Shift and scroll wheel changes song" #~ msgid "" #~ "Scroll wheel changes song\n" #~ "Shift and scroll wheel adjusts volume" #~ msgstr "" #~ "Scroll wheel changes song\n" #~ "Shift and scroll wheel adjusts volume" #~ msgid "Scroll _Wheel" #~ msgstr "Scroll _Wheel" #~ msgid "Tooltip Display" #~ msgstr "Tooltip Display" #~ msgid "Play _Order" #~ msgstr "Play _Order" #~ msgid "The library cannot be refreshed while Quod Libet is running." #~ msgstr "The library cannot be refreshed while Quod Libet is running." #~ msgid "Loading, scanning, and saving your library." #~ msgstr "Loading, scanning, and saving your library." #~ msgid "Rescan your library and exit" #~ msgstr "Rescan your library and exit" #~ msgid "Old Plugins" #~ msgstr "Old Plugins" #~ msgid "" #~ "It looks like you are running Quod Libet right now. If you edit songs " #~ "also in Quod Libet's library while it is running, you may need to refresh " #~ "or re-add them.\n" #~ "\n" #~ "If you are not running Quod Libet, or are editing songs outside of its " #~ "library, you may ignore this warning." #~ msgstr "" #~ "It looks like you are running Quod Libet right now. If you edit songs " #~ "also in Quod Libet's library while it is running, you may need to refresh " #~ "or re-add them.\n" #~ "\n" #~ "If you are not running Quod Libet, or are editing songs outside of its " #~ "library, you may ignore this warning." #~ msgid "GStreamer status %r != %r" #~ msgstr "GStreamer status %r != %r" #~ msgid "_Pane %d:" #~ msgstr "_Pane %d:" #~ msgid "View and edit tags in the playing song" #~ msgstr "View and edit tags in the playing song" #~ msgid "Double-click a tag value to change it, right-click for other options" #~ msgstr "" #~ "Double-click a tag value to change it, right-click for other options" #~ msgid "Add a new tag" #~ msgstr "Add a new tag" #~ msgid "Tag by Filename" #~ msgstr "Tag by Filename" #~ msgid "The first letter of each word will be capitalized" #~ msgstr "The first letter of each word will be capitalised" #~ msgid "" #~ "Characters not allowed in Windows filenames (\\:?;\"<>|) will be replaced " #~ "by underscores" #~ msgstr "" #~ "Characters not allowed in Windows filenames (\\:?;\"<>|) will be replaced " #~ "by underscores" #~ msgid "" #~ "Characters outside of the ASCII set (A-Z, a-z, 0-9, and punctuation) will " #~ "be replaced by underscores" #~ msgstr "" #~ "Characters outside of the ASCII set (A-Z, a-z, 0-9, and punctuation) will " #~ "be replaced by underscores" #~ msgid "Apply to these _files..." #~ msgstr "Apply to these _files..." #~ msgid "Path" #~ msgstr "Path" #~ msgid "Tray Preferences - Quod Libet" #~ msgstr "Tray Preferences - Quod Libet" #~ msgid "%(different)s, %(missing)s" #~ msgstr "%(different)s, %(missing)s" #~ msgid "E: You need GTK+ 2.6 and PyGTK 2.6 or greater." #~ msgstr "E: You need GTK+ 2.6 and PyGTK 2.6 or greater." #~ msgid "E: You have GTK+ %s and PyGTK %s." #~ msgstr "E: You have GTK+ %s and PyGTK %s." #~ msgid "E: Please upgrade GTK+/PyGTK." #~ msgstr "E: Please upgrade GTK+/PyGTK." #~ msgid "skip count" #~ msgstr "skip count" #~ msgid "Search Bar" #~ msgstr "Search Bar" #~ msgid "Play songs in random order" #~ msgstr "Play songs in random order" #~ msgid "S_ong" #~ msgstr "S_ong" #~ msgid "_Choose randomly" #~ msgstr "_Choose randomly" #~ msgid "Drag songs here to add them to the play queue" #~ msgstr "Drag songs here to add them to the play queue" #~ msgid "" #~ "Deleting <b>%s</b> failed. Possibly the target file does not exist, or " #~ "you do not have permission to delete it." #~ msgstr "" #~ "Deleting <b>%s</b> failed. Possibly the target file does not exist, or " #~ "you do not have permission to delete it." #~ msgid "No audio device found" #~ msgstr "No audio device found" #~ msgid "" #~ "Quod Libet was unable to open your audio device. Often this means another " #~ "program is using it, or your audio drivers are not configured.\n" #~ "\n" #~ "Quod Libet will now exit." #~ msgstr "" #~ "Quod Libet was unable to open your audio device. Often this means another " #~ "program is using it, or your audio drivers are not configured.\n" #~ "\n" #~ "Quod Libet will now exit." #~ msgid "_New/Edit Playlist..." #~ msgstr "_New/Edit Playlist..." #~ msgid "New/Edit Playlist" #~ msgstr "New/Edit Playlist" #~ msgid "" #~ "Enter a name for the new playlist. If it already exists it will be opened " #~ "for editing." #~ msgstr "" #~ "Enter a name for the new playlist. If it already exists it will be opened " #~ "for editing." #~ msgid "All songs" #~ msgstr "All songs" #~ msgid "Turn shuffle off, on, or toggle it" #~ msgstr "Turn shuffle off, on, or toggle it" #~ msgid "Closing _minimizes to system tray" #~ msgstr "Closing _minimises to system tray" #~ msgid "Performed by %s" #~ msgstr "Performed by %s" #~ msgid "arranged by %s" #~ msgstr "arranged by %s" #~ msgid "conducted by %s" #~ msgstr "conducted by %s" #~ msgid "composed by %s" #~ msgstr "composed by %s" #~ msgid "written by %s" #~ msgstr "written by %s" #~ msgid "Add songs to your library" #~ msgstr "Add songs to your library" #~ msgid "Visit the artist's website" #~ msgstr "Visit the artist's website" #~ msgid "Change volume" #~ msgstr "Change volume" #~ msgid "Supported formats:" #~ msgstr "Supported formats:" #~ msgid "" #~ "Invalid tag <b>%s</b>\n" #~ "\n" #~ "The files currently selected do not support editing this tag.Invalid tags " #~ "<b>%s</b>\n" #~ "\n" #~ "The files currently selected do not support editing these tags." #~ msgstr "" #~ "Invalid tag <b>%s</b>\n" #~ "\n" #~ "The files currently selected do not support editing this tag.Invalid tags " #~ "<b>%s</b>\n" #~ "\n" #~ "The files currently selected do not support editing these tags." #~ msgid "(shared across all %d songs)" #~ msgstr "(shared across all %d songs)" #~ msgid "(different across %d songs, missing from %d songs)" #~ msgstr "(different across %d songs, missing from %d songs)" #~ msgid "1 minute" #~ msgstr "1 minute" #~ msgid "1 hour" #~ msgstr "1 hour" #~ msgid "1 day" #~ msgstr "1 day" #~ msgid "An audio player and tag editor" #~ msgstr "An audio player and tag editor" #~ msgid "" #~ "If you have songs in directories that will not always be mounted (for " #~ "example, a removable device or an NFS shared drive), list those mount " #~ "points here. Files in these directories will not be removed from the " #~ "library if the device is not mounted." #~ msgstr "" #~ "If you have songs in directories that will not always be mounted (for " #~ "example, a removable device or an NFS shared drive), list those mount " #~ "points here. Files in these directories will not be removed from the " #~ "library if the device is not mounted." #~ msgid "" #~ "These characters will be used as separators when \"Split values\" is " #~ "selected in the tag editor" #~ msgstr "" #~ "These characters will be used as separators when \"Split values\" is " #~ "selected in the tag editor" #~ msgid "Initialized multimedia key support." #~ msgstr "Initialised multimedia key support." #~ msgid "1 track" #~ msgstr "1 track" #~ msgid "Adjust audio volume" #~ msgstr "Adjust audio volume" #~ msgid "Check for changes in the library made since the program was started" #~ msgstr "Check for changes in the library made since the program was started" #~ msgid "Set Rating" #~ msgstr "Set Rating" #~ msgid "1 time" #~ msgstr "1 time" #~ msgid "Add a new tag to the file" #~ msgstr "Add a new tag to the file" #~ msgid "Invalid date format" #~ msgstr "Invalid date format" #~ msgid "" #~ "Invalid date: <b>%s</b>.\n" #~ "\n" #~ "The date must be entered in YYYY or YYYY-MM-DD format." #~ msgstr "" #~ "Invalid date: <b>%s</b>.\n" #~ "\n" #~ "The date must be entered in YYYY or YYYY-MM-DD format." #~ msgid "_On-Screen Display" #~ msgstr "_On-Screen Display" #~ msgid "No on-screen display" #~ msgstr "No on-screen display" #~ msgid "Display OSD on the top" #~ msgstr "Display OSD on the top" #~ msgid "Display OSD on the bottom" #~ msgstr "Display OSD on the bottom" #~ msgid "Select a color for the OSD" #~ msgstr "Select a colour for the OSD" #~ msgid "Select a second color for the OSD" #~ msgstr "Select a second colour for the OSD" #~ msgid "Song _list" #~ msgstr "Song _list" #, fuzzy #~ msgid "[directory]" #~ msgstr "directory" #~ msgid "" #~ "Quod Libet - a music library and player\n" #~ "Options:\n" #~ " --help, -h Display this help message\n" #~ " --version Display version and copyright information\n" #~ " --refresh-library Rescan your song cache and then exit.\n" #~ " --print-playing Print the currently playing song.\n" #~ "\n" #~ " Player controls:\n" #~ " --next, --previous, --play-pause, --play, --pause\n" #~ " Change songs or pause/resume playing.\n" #~ " --volume +|-|0..100\n" #~ " Increase, decrease, or set the volume.\n" #~ " --shuffle 0|1|t, --repeat 0|1|t\n" #~ " Enable, disable, or toggle shuffle and repeat. \n" #~ " --query search-string\n" #~ " Make a new playlist from the given search.\n" #~ " --seek [+|-][HH:MM:]SS\n" #~ " Seek to a position in the current song.\n" #~ " --play-file filename\n" #~ " Play this file, adding it to the library if necessary.\n" #~ "\n" #~ "For more information, see the manual page (`man 1 quodlibet').\n" #~ msgstr "" #~ "Quod Libet - a music library and player\n" #~ "Options:\n" #~ " --help, -h Display this help message\n" #~ " --version Display version and copyright information\n" #~ " --refresh-library Rescan your song cache and then exit.\n" #~ " --print-playing Print the currently playing song.\n" #~ "\n" #~ " Player controls:\n" #~ " --next, --previous, --play-pause, --play, --pause\n" #~ " Change songs or pause/resume playing.\n" #~ " --volume +|-|0..100\n" #~ " Increase, decrease, or set the volume.\n" #~ " --shuffle 0|1|t, --repeat 0|1|t\n" #~ " Enable, disable, or toggle shuffle and repeat. \n" #~ " --query search-string\n" #~ " Make a new playlist from the given search.\n" #~ " --seek [+|-][HH:MM:]SS\n" #~ " Seek to a position in the current song.\n" #~ " --play-file filename\n" #~ " Play this file, adding it to the library if necessary.\n" #~ "\n" #~ "For more information, see the manual page (`man 1 quodlibet').\n" #~ msgid "E: Unknown command line option: %s" #~ msgstr "E: Unknown command line option: %s" #~ msgid "%d:%02d:%02d" #~ msgstr "%d:%02d:%02d" #~ msgid "%d:%02d" #~ msgstr "%d:%02d" #~ msgid "" #~ "Ex Falso - an audio file tagger\n" #~ "Usage: %s [directory]\n" #~ "\n" #~ "For more information, see the manual page (`man 1 exfalso').\n" #~ msgstr "" #~ "Ex Falso - an audio file tagger\n" #~ "Usage: %s [directory]\n" #~ "\n" #~ "For more information, see the manual page (`man 1 exfalso').\n" #~ msgid "Quod Libet is free software licensed under the GNU GPL v2." #~ msgstr "Quod Libet is free software licensed under the GNU GPL v2." #~ msgid "Songs heard:" #~ msgstr "Songs heard:" #~ msgid "Listening" #~ msgstr "Listening" #~ msgid "%s and %d more - Properties" #~ msgstr "%s and %d more - Properties" #~ msgid "" #~ "No on-screen display\n" #~ "Display OSD on the top\n" #~ "Display OSD on the bottom" #~ msgstr "" #~ "No on-screen display\n" #~ "Display OSD on the top\n" #~ "Display OSD on the bottom" #~ msgid "" #~ "No volume adjustment\n" #~ "Per-song (\"Radio\") volume adjustment\n" #~ "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "" #~ "No volume adjustment\n" #~ "Per-song (\"Radio\") volume adjustment\n" #~ "Per-album (\"Audiophile\") volume adjustment" #~ msgid "Pause/resume the current song" #~ msgstr "Pause/resume the current song" #~ msgid "Perfor_mer" #~ msgstr "Perfor_mer" #~ msgid "Pick a random album from your library" #~ msgstr "Pick a random album from your library" #~ msgid "Pick a random artist from your library" #~ msgstr "Pick a random artist from your library" #~ msgid "Pick a random genre from your library" #~ msgstr "Pick a random genre from your library" #~ msgid "Play _song" #~ msgstr "Play _song" #~ msgid "Play next song" #~ msgstr "Play next song" #~ msgid "Pre_vious song" #~ msgstr "Pre_vious song" #~ msgid "Select a font for the OSD" #~ msgstr "Select a font for the OSD" #~ msgid "_Part" #~ msgstr "_Part" #~ msgid "Pause _song" #~ msgstr "Pause _song" #~ msgid "_About" #~ msgstr "_About" #~ msgid "xx minutes, " #~ msgstr "xx minutes, " ��������������������������������������������������������������������������quodlibet-3.0.2/po/el.po����������������������������������������������������������������������������0000644�0001750�0001750�00000327756�12173213426�015335� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Language po/el translations for PACKAGE package. # Copyright (C) 2012 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Dimitris Papageorgiou <dipap@gmx.com>, 2012. # msgid "" msgstr "" "Project-Id-Version: el\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-06-06 03:45+0300\n" "Last-Translator: Dimitris Papageorgiou <dipap@gmx.com>\n" "Language-Team: Greek\n" "Language: el\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" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Επεξεργαστής ετικετών μουσικής" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Επεξεργάσου τις ετικέτες στα αρχεία μουσικής σου" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Αναπαραγωγή Μουσικής" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Ακούστε, περιηγηθείτε ή επεξεργαστείτε την μουσική σας συλλογή" #: ../data/quodlibet.desktop.in.h:3 msgid "Play/Pause" msgstr "Αναπαραγωγή/Παύση" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "Επόμενο" #: ../data/quodlibet.desktop.in.h:5 msgid "Previous" msgstr "Προηγούμενο" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "ένας επεξεργαστής ετικετών μουσικής" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "κατάλογος" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "Αποτυχία ανοίγματος αρχείου: %r" #: ../operon.py:114 msgid "List tags" msgstr "Εμφάνιση ετικετών" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "Εμφάνιση ωμής εξόδου" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "Στήλες και η σειρά που θα εμφανιστούν στην ωμή έξοδο (%s)" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Εμφάνιση _προγραμματικών ετικετών" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "Μη αρκετός αριθμός ορισμάτων" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Υπερβολικά Πολλά Σφάλματα" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "περιγραφή" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Τιμή" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Ετικέτα" #: ../operon.py:152 msgid "List all common tags" msgstr "Εμφάνιση όλων των κοινών ετικετών" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "Εκτύπωση όλων των ετικετών στην κανονική έξοδο" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "Φόρτωση ετικετών από προηγούμενη εκτύπωση στην έξοδο" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "Δείξε τις αλλαγές χωρίς να τις εφαρμόσεις" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "Παράλειψη ετικετών που δεν μπορούν να γραφούν" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "Αντιγραφή ετικετών από ένα αρχείο σε άλλο" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "Αδύνατη αντιγραφή της ετικέτας %r στο αρχείο %r" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Επεξεργαστής ετικετών μουσικής" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "Καθόρισε μια ετικέτα και αφαίρεσε τις παρούσες τιμές της" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "Αδύνατος ο ορισμός του %r" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "Διαγραφή Διπλότυπων" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "Η τιμή είναι κανονική παράσταση" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Διαγραφή Διπλότυπων" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "Αδύνατος ο συνδυασμός του '--all' με το '--regexp'" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "Αδύνατη η αφαίρεση του %r από το %r" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Φίλτρο βάση μιας ετικέτας" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Φίλτρο βάση μιας ετικέτας" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Χωρίς πληροφορίες χρόνου" #: ../operon.py:488 msgid "Extract embedded images" msgstr "Εξαγωγή ενσωματωμένων εικόνων" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "Μετονομασία αρχείων βάση ετικετών" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "Συμπλήρωση ετικετών βάση διαδρομής αρχείου" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "Συμπλήρωση αριθμών κομματιού για όλα τα αρχεία" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "Εμφάνιση ετικετών βάση παρεχόμενου προτύπου" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Προβολή σύντομων πληροφοριών χρήσης" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "Το <b>%s</b> δεν είναι έγκυρη τοποθεσία." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Τραγούδια που δεν ανήκουν σε κάποιο άλμπουμ" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Προτιμήσεις Λίστας Άλμπουμ" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Δείξε _εξώφυλλα των άλμπουμ" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "Η _αναζήτηση συμπεριλαμβάνει ονόματα συντελεστών" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Προβολή Άλμπουμ" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d τραγούδι" msgstr[1] "%d τραγούδια" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d δίσκος" msgstr[1] "%d δίσκοι" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Μη έγκυρη αναζήτηση" #: ../quodlibet/browsers/albums.py:180 msgid "_Title" msgstr "_Τίτλος" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Καλλιτέχνης" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Ημερομηνία" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 msgid "_Genre" msgstr "_Είδος μουσικής" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Βαθμολογία" #: ../quodlibet/browsers/albums.py:189 msgid "Sort _by..." msgstr "Τα_ξινόμηση κατά..." #: ../quodlibet/browsers/albums.py:210 msgid "_Preferences" msgstr "_Προτιμήσεις" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Λίστα Άλμπουμ" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "Λίστα _Άλμπουμ" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Όλα τα Άλμπουμ" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d άλμπουμ" msgstr[1] "%d άλμπουμς" #: ../quodlibet/browsers/albums.py:725 msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Επαναφόρτωση ε_ξώφυλλου του άλμπουμ" msgstr[1] "Επαναφόρτωση ε_ξώφυλλων των άλμπουμ" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Άγνωστο" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Νέα Ροή" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Εισήγαγε την τοποθεσία μιας ροής ήχου" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Ροές Ήχου" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Ροές Ήχου" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Κατέβασμα" #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Κατέβασμα Αρχείων" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Κατέβασμα Αρχείου" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Αδυναμία προσθήκης ροής" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "Η ροή <b>%s</b> δεν μπόρεσε να προστεθεί. Ίσως ο διακομιστής να είναι εκτός " "λειτουργίας, ή η τοποθεσία δεν είναι ροή ήχου." #: ../quodlibet/browsers/audiofeeds.py:495 #, fuzzy, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" "Δεν μπόρεσα να εισάγω τη λειτουργία python-feedparser, ο περιηγητής ροών " "ήχου απενεργοποιήθηκε." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "Το τρέχων ηχητικό σύστημα δεν υποστηρίζει απομακρυσμένες διευθύνσεις ο " "περιηγητής Ροών Ήχου απενεργοποιήθηκε" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Περιηγητής Μουσικοθήκης" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d τραγούδι (%(time)s)" msgstr[1] "%(count)d τραγούδια (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Άγνωστο" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "_Διαμοιρασμός σε Πολλαπλές Τιμές" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Προσαρμοσμένο" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "Συγχώνευση" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Προτιμήσεις Συλλογής Άλμπουμ" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "Συλλογή Άλμπουμ" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "Σ_υλλογή Άλμπουμ" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Σύστημα Αρχείων" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Σύστημα Αρχείων" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Αδυναμία αντιγραφής τραγουδιών" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Τα επιλεγμένα τραγούδια δεν μπορούν να αντιγραφούν σε άλλες λίστες ή στην " "ουρά αναπαραγωγής." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Προσθήκη στην Μουσικοθήκη" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Μη υποστηριζόμενος τύπος αρχείου" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Οι λίστες σταθμών μπορούν να περιέχουν μόνο τοποθεσίες σταθμών, όχι άλλες " "λίστες σταθμών ή λίστες αναπαραγωγής. Οι ακόλουθες τοποθεσίας δεν μπορούν να " "εισαχθούν:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Δεν μπορεί να προστεθεί ο σταθμός" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Διαδικτυακό Ραδιόφωνο" #: ../quodlibet/browsers/iradio.py:235 msgid "Downloading station list" msgstr "Κατέβασμα λίστας σταθμών" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Νέος Σταθμός" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Εισήγαγε την τοποθεσία ενός διαδικτυακού ραδιοφωνικού σταθμού" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "Ηλεκτρονική" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "Ιαπωνική" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "Ινδική" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "Θρησκευτική" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "Τουρκική" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 msgid "Latin" msgstr "" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "Κολεγιακό Ραδιόφωνο" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "Ομιλία / Νέα" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "Κλασική" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "Ποπ" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "Εναλακτική" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "Νέα" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "Σλαβική" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "Ελληνική" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "Ροκ" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "Διαδικτυακό Ραδιό_φωνο" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Νέος Σταθμός" #: ../quodlibet/browsers/iradio.py:491 msgid "_Update Stations" msgstr "_Ανανέωση Σταθμών" #: ../quodlibet/browsers/iradio.py:516 msgid "All Stations" msgstr "Όλοι οι Σταθμοί" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "Αγαπημένα" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "Χωρίς Κατηγορία" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Δεν βρέθηκαν σταθμοί" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Δεν βρέθηκε σταθμός ραδιοφώνου στο %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Όλοι οι σταθμοί που επεστράφησαν ανήκουν ήδη στην μουσικοθήκη" #: ../quodlibet/browsers/iradio.py:738 msgid "Remove from Favorites" msgstr "Αφαίρεση από τα Αγαπημένα" #: ../quodlibet/browsers/iradio.py:744 msgid "Add to Favorites" msgstr "Προσθήκη στα Αγαπημένα" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d σταθμός" msgstr[1] "%(count)d σταθμοί" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Ιδιότητες Συσκευής" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Συσκευή:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Μη προσαρτημένο" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Σημείο Προσάρτησης:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Όνομα:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Συσκευές Μέσων" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Συσκευές Μέσων" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Εξαγωγή" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Μετονομασία" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> σε χρήση, <b>%s</b> διαθέσιμο" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> δεν είναι συνδεδεμένο" #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "Αντιγραφή <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Αδυναμία αντιγραφής τραγουδιού" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Δεν υπάρχει αρκετός ελεύθερος χώρος γι' αυτό το τραγούδι" #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> δεν μπόρεσε να αντιγραφεί" #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Αδυναμία διαγραφής τραγουδιών" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Διαγραφή <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "Το <b>%s</b> δεν μπόρεσε να διαγραφεί" #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Αδυναμία διαγραφής τραγουδιού" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Η εξαγωγή του <b>%s</b> απέτυχε." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Αδυναμία εξαγωγής συσκευής" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" "Χωρίς υποστήριξη συσκευών, ο περιηγητής Συσκευών Μέσων απενεργοποιήθηκε" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Προτιμήσεις Περιηγητή με Στήλες" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Όλα" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Περιηγητής με Στήλες" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "Περιηγητής με _Στήλες" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Επιλογή _Όλων" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Εισαγωγή λίστας αναπαραγωγής.\n" "\n" "%(current)d/%(total)d τραγούδια προστέθηκαν." #: ../quodlibet/browsers/playlists.py:108 #, fuzzy, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" "Θα διαγραφή η λίστα '<i>%s</i>'.\n" "Θέλεις να συνεχίσεις;" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" "Οι πληροφορίες που αφορούν την επιλεγμένη λίστα αναπαραγωγής θα διαγραφούν " "χωρίς δυνατότητα ανάκτησης" #: ../quodlibet/browsers/playlists.py:123 #, fuzzy, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "Πρόκειται να αφαιρέσεις %d τραγούδι." msgstr[1] "Πρόκειται να αφαιρέσεις %d τραγούδια." #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "Τα διπλότυπα τραγούδια θα αφαιρεθούν από την λίστα αναπαραγωγής '%s'." #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Νέα Λίστα Αναπαραγωγής" #: ../quodlibet/browsers/playlists.py:141 msgid "Enter a name for the new playlist:" msgstr "Εισάγετε όνομα για την νέα λίστα" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Νέα Λίστα Αναπαραγωγής" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s και %(count)d ακόμη" msgstr[1] "%(title)s και %(count)d ακόμη" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Λίστες Αναπαραγωγής" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Λίστες Αναπαραγωγής" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "Αφαίρεση από την Λίστα" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Εισαγωγή" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Αδυναμία εισαγωγής λίστας αναπαραγωγής" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Ο Quod Libet μπορεί να εισάγει λίστες τύπου M3U και PLS μόνο." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "Διαγραφή Διπλότυπων" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Ανακάτεμα" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Αδυναμία μετονομασίας λίστας αναπαραγωγής" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Εισαγωγή Λίστας Αναπαραγωγής" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Απενεργοποίηση Περιηγητή" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Απενεργοποίηση Περιηγητή" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Αναζήτηση στην Μουσικοθήκη" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Αναζήτηση στην Μουσικοθήκη" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Περιορισμός Αποτελεσμάτων" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Άγνωστη Συσκευή" #: ../quodlibet/devices/__init__.py:19 #, fuzzy, python-format msgid "Could not import %s, which is needed for device support." msgstr "" "Δεν μπόρεσε να εισαχθεί το dbus-python, που είναι απαραίτητο για υποστήριξη " "συσκευών." #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "Το %r δεν είναι υποστηριζόμενη συσκευή." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: Δεν βρέθηκε το libudev." #: ../quodlibet/devices/__init__.py:212 #, fuzzy, python-format msgid "%s: Could not find %s." msgstr "%s: Δεν βρέθηκε το libudev." #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "Αρχικοποίηση υποστήριξης συσκευών" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "Δοκιμή '%s'" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "Δεν ήταν δυνατή η σύνδεση σε κάποιο σύστημα υποστήριξης συσκευών." #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Αρχικοποιήθηκε η υποστήριξη συσκευών." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Αύξηση Ήχου (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Αντιγραφή εξώφυλλων _άλμπουμ" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Συνδύασε ετικέτες με _πολλαπλές τιμές" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Ο Τίτλος να περιλαμβάνει την _έκδοση" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "Το Άλμπουμ περιλαμβάνει τον υπότιτλο του _δίσκου" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Μοντέλο:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Χωρητικότητα:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Έκδοση Υλικολογισμικού:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "Removing orphaned iPod track" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Αδυναμία αποθήκευσης της βάσης δεδομένων του iPod" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Μη αρχικοποιημένο iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Θέλεις να δημιουργήσεις μια άδεια βάση δεδομένων σε αυτό το iPod;" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "" "Δεν ήταν δυνατό να εισαχθεί το python-gpod, η υποστήριξη iPod " "απενεργοποιήθηκε." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Πρότυπο ονόματος αρχείου:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Αφαίρεση αχρείαστων εξώφυλλων και φακέλων" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Το αρχείο υπάρχει" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Αντικατάσταση του <b>%s</b>;" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "Αποτυχία ανάγνωσης εξώφυλλου \"%s\"" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Σφάλμα κατά την φόρτωση %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Μουσικοθήκη" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Έλεγχος σημείων προσάρτησης" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Σάρωση της μουσικοθήκης" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Σάρωση του %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "Η διασωλήνωση εξόδου του GStreamer που χρησιμοποιείται για αναπαραγωγή, π.χ. " "'alsasink device=default'. Αφήστε το κενό για χρήση της προεπιλεγμένης τιμής." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "_Διασωλήνωση εξόδου:" #: ../quodlibet/player/gstbe.py:75 #, python-format msgid "%.1f seconds" msgstr "%.1f δευτερόλεπτα" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "Διάρκεια _Buffer:" #: ../quodlibet/player/gstbe.py:332 #, fuzzy, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" "Δεν βρέθηκε στοιχείο GStreamer ικανό να χειριστεί το ακόλουθο είδος: " "%(format_details)r" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "Ροή" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "Buffering" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Σφάλμα Εξόδου" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "Η διασωλήνωση εξόδου του GStreamer δεν μπόρεσε να αρχικοποιηθεί. Ίσως να μην " "είναι έγκυρη ή η συσκευή να είναι απασχολημένη. Ελέγξτε τις προτιμήσεις." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Αδυναμία ανοίγματος αρχείων" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "Το GStreamer δεν έχει κάποιο στοιχείο για να χειριστεί την ανάγνωση αρχείων. " "Ελέγξτε τις ρυθμίσεις εγκατάστασης του GStreamer." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "Μη έγκυρη διασωλήνωση εξόδου GStreamer, δοκιμή προεπιλογής." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "Αδυναμία δημιουργίας προεπιλεγμένης διασωλήνωσης GStreamer." #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "Μη έγκυρο ηχητικό σύστημα υποστήριξης" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "Η υποστήριξη ηχητικού συστήματος %r δεν είναι εγκατεστημένη." #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Αδυναμία δημιουργίας εξόδου ήχου" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Η συσκευή ήχου %r δεν βρέθηκε. Ελέγξτε τις ρυθμίσεις του Xine στο ~/." "quodlibet/config." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Ο Quod Libet εκτελείται ήδη." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Κανένα τραγούδι δεν αναπαράγεται αυτή τη στιγμή." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Ο Quod Libet δεν εκτελείται." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Αδυναμία εγγραφής στο %s. Αφαίρεσή του." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "Μουσικοθήκη και αναπαραγωγέας" #: ../quodlibet.py:297 msgid "[option]" msgstr "[επιλογή]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Εμφάνιση του αναπαραγόμενου τραγουδιού και έξοδος" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Έναρξη αναπαραγωγής άμεσα" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Μεταπήδηση στο επόμενο τραγούδι" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" "Μεταπήδηση στην αρχή του τραγουδιού ή στο προηγούμενο αν είναι ήδη κοντά " "στην αρχή" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Μεταπήδηση στο προηγούμενο τραγούδι" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Έναρξη αναπαραγωγής" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Παύση αναπαραγωγής" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Εναλλαγή αναπαραγωγής/παύσης" #: ../quodlibet.py:310 msgid "Stop playback" msgstr "Σταμάτημα αναπαραγωγής" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Αύξηση της έντασης αναπαραγωγής" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Μείωση της έντασης αναπαραγωγής" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Εμφάνιση της κατάστασης του αναπαραγωγέα" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Απόκρυψη του κυρίου παραθύρου" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Εμφάνιση του κυρίου παραθύρου" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Εναλλαγή ορατότητας κυρίου παραθύρου" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Εστίαση του εκτελούμενου αναπαραγωγέα" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Αφαίρεση ενεργών φίλτρων περιηγητή" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Ανανέωση και σάρωση ξανά της μουσικοθήκης" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Εμφάνιση της τρέχουσας λίστας αναπαραγωγής" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Εμφάνιση των περιεχομένων της ουράς αναπαραγωγής" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "Εκκίνηση με απενεργοποιημένα πρόσθετα" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Έξοδος από τον Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Αναζήτηση στο αναπαραγόμενο τραγούδι" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][ΩΩ:]ΛΛ:ΔΔ" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Καθορισμός ή εναλλαγή της σειράς αναπαραγωγής" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Ενεργοποίηση, απενεργοποίηση ή εναλλαγή της επανάληψης" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Καθορισμός έντασης" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Αναζήτηση στην μουσικοθήκη" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "ερώτημα" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Αναπαραγωγή αρχείου" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "εντολή|όνομα αρχείου" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Βαθμολόγηση αναπαραγόμενου τραγουδιού" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Καθορισμός τρέχοντος περιηγητή" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Άνοιγμα νέου περιηγητή" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Εμφάνιση ή απόκρυψη της ουράς αναπαραγωγής" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Εμφάνιση ή απόκρυψη της κύριας λίστας τραγουδιών" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Φιλτρο βάση μιας τυχαίας τιμής" #: ../quodlibet.py:340 msgid "command|tag" msgstr "εντολή|ετικέτα" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Φίλτρο βάση μιας ετικέτας" #: ../quodlibet.py:341 msgid "tag=value" msgstr "ετικέτα=τιμή" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Προσθήκη ενός αρχείου ή ενός ερωτήματος στην ουρά" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "Προσθήκη στην ουρά αρχείων διαχωρισμένων με κόμματα" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "όνομα αρχείου" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" "Εμφάνιση ονομάτων αρχείων ή αποτελεσμάτων ερωτήματος στην κανονική έξοδο" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Αφαίρεση αρχείου ή ερωτήματος από την ουρά αναπαραγωγής" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Μη έγκυρο όρισμα για το '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Δοκιμάστε το %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Υποστηριζόμενοι τύποι αρχείων: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Συσκευή ήχου: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Αρχή" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "Μ/Δ" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Χρόνος" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Όνομα Σελιδοδείκτη" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "ΛΛ:ΔΔ" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Σελιδοδείκτες" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Χωρίς πληροφορίες χρόνου" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Τιμή" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Αποθηκευμένες Τιμές" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Επεξεργασία αποθηκευμένων τιμών..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Τραγούδια" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Προβολή χρόνου που υπολείπεται" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Επεξεργασία Σελιδοδεικτών..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "Αυτό_ματα" #: ../quodlibet/qltk/controls.py:233 msgid "_Track Mode" msgstr "Λειτουργία _Κομματιού" #: ../quodlibet/qltk/controls.py:234 msgid "_Album Mode" msgstr "Λειτουργία _Άλμπουμ" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Σταμάτησε μετά από αυτό το τραγούδι" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Φίλτρο βάση μιας ετικέτας" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Προκλήθηκε Σφάλμα" #: ../quodlibet/qltk/debugwindow.py:71 #, fuzzy, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Σημειώθηκε μια εξαίρεση στον Quod Libet. Ένα αρχείο καταγραφής σώθηκε στο <b>" "%s</b> που θα βοηθήσει στην επίλυση του σφάλματος. Παρακαλώ καταχωρήστε μια " "αναφορά στο http://code.google.com/p/quodlibet/issues/list και συμπεριλάβετε " "αυτό το αρχείο. Αυτό το αρχείο ίσως περιέχει στοιχεία που προσωποποιούν εσάς " "ή το σύστημά σας, π.χ. η λίστα των πρόσφατα παιγμένων αρχείων σας. Αν αυτό " "δεν είναι επιθυμητό στείλτε το αρχείο <b>%s</b> μαζί με μια περιγραφή του " "τι κάνατε.\n" "\n" "Ο Quod Libet ίσως είναι ασταθής. Συνίσταται επανεκκίνησή του. Η μουσικοθήκη " "σας θα αποθηκευθεί." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" "Ο Quod Libet ίσως είναι ασταθής. Συνίσταται επανεκκίνησή του. Η μουσικοθήκη " "σας θα αποθηκευθεί." #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Διαγραφή Αρχείων" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Μετακίνηση στα Απορρίμματα" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Μόνιμη διαγραφή αυτού του αρχείου;" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Μόνιμη διαγραφή αυτών των αρχείων;" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s και %(count)d ακόμη..." msgstr[1] "%(title)s και %(count)d ακόμη..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "Μετακίνηση %(current)d από %(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Διαγραφή %(current)d από %(total)d." #: ../quodlibet/qltk/delete.py:105 msgid "Unable to move to trash" msgstr "Αδυναμία μετακίνησης στα απορρίμματα" #: ../quodlibet/qltk/delete.py:106 #, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Η μετακίνηση του <b>%s</b> στα απορρίμματα απέτυχε." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Αδυναμία διαγραφής αρχείου" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Η διαγραφή του <b>%s</b> απέτυχε." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Λήψεις" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Όνομα Αρχείου" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Μέγεθος" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "Σε αναμονή" #: ../quodlibet/qltk/_editpane.py:82 msgid "Path Patterns" msgstr "Πρότυπα Διαδρομών" #: ../quodlibet/qltk/_editpane.py:83 msgid "Edit saved patterns..." msgstr "Επεξεργασία αποθηκευμένων προτύπων..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Προεπισκόπηση" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Περισσότερες επιλογές..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "Λείπει από %d τραγούδι" msgstr[1] "Λείπει από %d τραγούδια" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "Διαφορετικό σε %d τραγούδι" msgstr[1] "Διαφορετικό σε %d τραγούδια" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "_Διαμοιρασμός σε Πολλαπλές Τιμές" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Διαχωρισμός του Δίσκου από το _Άλμπουμ" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Διαχωρισμός της _Έκδοσης από τον Τίτλο" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Διαχωρισμός του Διευθετώντα από τον _Καλλιτέχνη" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Διαχωρισμός του _Εκτελεστή από τον Καλλιτέχνη" #: ../quodlibet/qltk/edittags.py:229 msgid "Split _Performer out of Title" msgstr "Διαχωρισμός του _Εκτελεστή από τον Τίτλο" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Διαχωρισμός της _Έκδοσης από τον Τίτλο" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Προσθήκη Ετικέτας" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "Ε_τικέτα:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 msgid "ql-revert" msgstr "" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Επεξεργασία Ετικετών" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Αποθήκευση" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Αδυναμία προσθήκης ετικέτας" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Αδυναμία προσθήκης του <b>%s</b>\n" "\n" "Τα επιλεγμένα αρχεία δεν υποστηρίζουν πολλαπλές τιμές." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Μη έγκυρη ετικέτα" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Μη έγκυρη ετικέτα <b>%s</b>\n" "\n" "Τα επιλεγμένα αρχεία δεν υποστηρίζουν επεξεργασία αυτής της ετικέτας." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Η ετικέτα ίσως να μην είναι ακριβής" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "Το <b>%s</b> άλλαξε ενώ το πρόγραμμα εκτελούταν. Η αποθήκευση χωρίς ανανέωση " "της μουσικοθήκης ίσως αντικαταστήσει άλλες αλλαγές στο τραγούδι.\n" "\n" "Αποθήκευση του τραγουδιού ούτως ή άλλως;" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Αδυναμία αποθήκευσης τραγουδιού" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Η αποθήκευση του <b>%s</b> απέτυχε. Το αρχείο ίσως είναι μόνο για ανάγνωση, " "κατεστραμμένο, ή δεν έχετε δικαιώματα επεξεργασίας του." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Μη έγκυρη τιμή" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Μη έγκυρη τιμή: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Πρόσθετα" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d τραγούδι" msgstr[1] "%d τραγούδια" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Προτιμήσεις του Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Διαχωρισμός _στο:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Εμφάνιση _προγραμματικών ετικετών" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Επεξεργασία ετικετών" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Φάκελοι" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Νέος Φάκελος..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Επιλογή όλων των Υποφακέλων" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Νέος Φάκελος" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Εισάγετε όνομα για τον νέο φάκελο:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Αδυναμία δημιουργίας φακέλου" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Αδυναμία διαγραφής φακέλου" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "από %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Δίσκος %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Κομμάτι %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "Προσθήκη στην _Λίστα Αναπαραγωγής" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Επεξεργασία Εμφάνισης..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "_Επεξεργασία Ετικετών" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Δεν αναπαράγεται" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Καθαρισμός Σφαλμάτων" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Δεν υπάρχουν επιλεγμένα τραγούδια." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Κανένα Τραγούδι" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Πληροφορίες" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Στίχοι" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Σφάλματα" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "καλλιτέχνης" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "καλλιτέχνες" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "εκτελεστές" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Ποτέ" #: ../quodlibet/qltk/information.py:243 #, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%(n)d φορά" msgstr[1] "%(n)d φορές" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "προστέθηκε" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "τελευταία αναπαραγωγή" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "αναπαραγωγές" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "παραλήψεις" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "βαθμολογία" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "διάρκεια" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "μέγεθος αρχείου" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "τροποποίηση" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitrate" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Αρχείο" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d επιλεγμένο" msgstr[1] "%d επιλεγμένα" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Παραγωγή από %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "εκτελεστής" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Μη διαθέσιμο κομμάτι" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Λίστα Κομματιών" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d τραγούδι χωρίς άλμπουμ" msgstr[1] "%d τραγούδια χωρίς άλμπουμ" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Επιλεγμένη Δισκογραφία" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d τραγούδι χωρίς καλλιτέχνη" msgstr[1] "%d τραγούδια χωρίς καλλιτέχνες" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "άλμπουμ" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Συνολική διάρκεια:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Συνολικό μέγεθος:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Αρχεία" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Καταγραφή Εξόδου" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Λήψη" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Δεν βρέθηκαν στίχοι γι' αυτό το τραγούδι." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Αναζήτηση στίχων..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Αδυναμία λήψης στίχων." #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "Πρόκειται να αφαιρέσεις %d τραγούδι." #: ../quodlibet/qltk/maskedbox.py:18 #, fuzzy msgid "The selected songs will be removed from the library." msgstr "Τα διπλότυπα τραγούδια θα αφαιρεθούν από την λίστα αναπαραγωγής '%s'." #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d σταθμός" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Απόρριψη αλλαγών στις ετικέτες;" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Ετικέτες έχουν αλλαχθεί αλλά δεν έχουν αποθηκευθεί. Αποθήκευση αυτών των " "αρχείων ή επαναφορά και απόρριψη των αλλαγών;" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "Ενεργές διεργασίες" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "%d διεργασίες εκτελούνται" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "Ά_γνωστο" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "Με τη Σειρά" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "Με τη _Σειρά" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Ανακάτεμα" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Με τη Βαρύτητα" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "Με τη _Βαρύτητα" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Ένα Τραγούδι" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "Ένα _Τραγούδι" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Σφάλματα Πρόσθετων" #: ../quodlibet/qltk/pluginwin.py:80 msgid "Plugins" msgstr "Πρόσθετα" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Εμφάνιση _Λαθών" #: ../quodlibet/qltk/pluginwin.py:259 msgid "Version:" msgstr "Έκδοση:" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Ενεργοποιημένα" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Απενεργοποιημένα" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Χωρίς κατηγορία" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Δεν βρέθηκαν πρόσθετα." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Δίσκος" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Κομμάτι" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "ομαδοποίηση" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "_Άλμπουμ" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Όνομα Αρχείου" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Διάρκεια" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Λίστα Τραγουδιών" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "Αυτόματη _μεταπήδηση στο αναπαραγώμενο τραγούδι" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "" "Όταν το αναπαραγώμενο τραγούδι αλλάζει, μετάβαση σε αυτό στην λίστα " "τραγουδιών" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "Συμπεριφορά" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "Ά_λλα:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Επεξεργασία Εμφάνισης..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "Προσθαφαίρεση κεφαλίδων στηλών" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Ορατές Στήλες" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Η _αναζήτηση συμπεριλαμβάνει ονόματα συντελεστών" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Το Όνομα Αρχείου συμπεριλαμβάνει τον _φάκελο" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Προτιμήσεις" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" "Εφαρμογή τρεχόντων ρυθμίσεων στην λίστα τραγουδιών, προσθέτοντας νέες στήλες " "στο τέλος" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "Επιπλέον Στήλες" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Περιηγητές" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "Κα_θολικό φίλτρο:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "Εφαρμογή αυτού του ερωτήματος επιπροσθέτως από όλα τα άλλα" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Αναζήτηση με την _πληκτρολόγηση" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" "Εμφάνισε τα αποτελέσματα αναζήτησης αφού ο χρήστης σταματήσει την " "πληκτρολόγηση" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Αναζήτηση" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Επιβεβαίωση πο_λλαπλών βαθμολογήσεων" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" "Ζήτησε επιβεβαίωση πριν αλλάξεις τις βαθμολογίες πολλαπλών τραγουδιών " "μονομιάς" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Ενεργοποίηση βαθμολόγησης με _ένα κλικ" #: ../quodlibet/qltk/prefs.py:241 msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Επέτρεψε την βαθμολόγηση κάνοντας κλικ στην στήλη βαθμολογίας της λίστας " "τραγουδιών" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Βαθμολογίες" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "_Χρήση στρογγυλεμένων γωνιών στις εικόνες επισκόπησης" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "Στρογγύλεψε τις γωνίες των εικόνων επισκόπησης των άλμπουμ. Ίσως χρειαστεί " "επανεκκίνηση για να να ενεργοποιηθεί." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "Προτίμηση _ενσωματωμένων εικόνων" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" "Χρήση εξώφυλλων ενσωματωμένων στο αρχείο ήχου (όταν είναι διαθέσιμο) αντί " "από άλλες πηγές" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "Εξαναγκασμός _ονόματος αρχείου εικόνας:" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "Το όνομα αρχείου εικόνας που θα χρησιμοποιηθεί υποχρεωτικά" #: ../quodlibet/qltk/prefs.py:283 msgid "Album Art" msgstr "Εξώφυλλα Άλμπουμ" #: ../quodlibet/qltk/prefs.py:301 msgid "Playback" msgstr "Αναπαραγωγή" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "Ρύθμιση Εξόδου" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "Αν δεν είναι διαθέσιμες πληροφορίες Replay Gain για ένα τραγούδι, κλιμάκωσε " "την ένταση του ήχου κατά αυτή την τιμή" #: ../quodlibet/qltk/prefs.py:320 msgid "_Fall-back gain (dB):" msgstr "Εναλλακτική τιμή gain (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Κλιμάκωσε την ένταση για όλα τα τραγούδια κατά αυτή την τιμή, αρκεί να μην " "υπάρξει αποκοπή" #: ../quodlibet/qltk/prefs.py:334 msgid "_Pre-amp gain (dB):" msgstr "Gain προενίσχυσης (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "_Ενεργοποίηση ρύθμισης έντασης Replay Gain" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Ρύθμισης Έντασης Replay Gain" #: ../quodlibet/qltk/prefs.py:387 msgid "Tags" msgstr "Ετικέτες" #: ../quodlibet/qltk/prefs.py:392 msgid "Auto-save tag changes" msgstr "Αυτόματη αποθήκευση αλλαγών στις ετικέτες" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" "Αποθήκευση αλλαγών στις ετικέτες χωρίς επιβεβαίωση όταν γίνεται επεξεργασία " "πολλαπλών αρχείων" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" "Επεξεργασία όλων των ετικετών, συμπεριλαμβανομένων και των αυτόματα " "δημιουργημένων απο λογισμικό όπως π.χ. MusicBrainz ή ετικέτες του Replay Gain" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" "Λίστα διαχωριστών που θα χρησιμοποιηθούν κατά των διαχωρισμό τιμών ετικετών. " "Η λίστα είναι διαχωρισμένη με κενά" #: ../quodlibet/qltk/prefs.py:430 #, fuzzy msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" "Μέσος Μπαγεσιανός παράγοντας (C) για την συγκεντρωτική βαθμολογία.\n" "Το 0 σημαίνει χρήση συμβατικού μέσου όρου, υψηλότερες τιμές σημαίνουν πως τα " "άλμπουμ με λίγα τραγούδια θα έχουν λιγότερο ακραίες βαθμολογίες. Αν αλλαχθεί " "αυτή η τιμή ενεργοποιείται επανυπολογισμός για όλα τα άλμπουμ." #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "_Μπαγεσιανός παράγοντας μέσου όρου:" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Αποθήκευση βαθμολογιών και _μετρητών αναπαραγωγών" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "Διεύθυνση ηλεκτρονικού ταχυδρομείου:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" "Οι βαθμολογίες και οι μετρητές αναπαραγωγών θα καθοριστούν γι' αυτή την " "διεύθυνση" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Ανανέωση Σταθμών" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "Ανανέωση της μουσικοθήκης κατά την εκκίνηση" #: ../quodlibet/qltk/prefs.py:501 msgid "Refresh Library" msgstr "Ανανέωση της Μουσικοθήκης" #: ../quodlibet/qltk/prefs.py:509 msgid "Scan Directories" msgstr "Σάρωση Καταλόγων" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Κανένα Τραγούδι" #: ../quodlibet/qltk/prefs.py:524 msgid "Preferences" msgstr "Προτιμήσεις" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Ιδιότητες" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Ουρά Αναπαραγωγής" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Αφαίρεση όλων των τραγουδιών από τη ουρά" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Τυχαία" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Σειρά:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "Επανάληψη" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Εκκίνηση ξανά της λίστας αναπαραγωγής όταν φτάσει στο τέλος" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Αδυναμία προσθήκης τραγουδιών" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "Το <b>%s</b> χρησιμοποιεί ένα μη υποστηριζόμενο πρωτόκολλο" #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Μουσική" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Προσθήκη Φακέλου..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Προσθήκη Αρχείου..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Προσθήκη Τοποθεσίας" #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Άνοιγμα νέου περιηγητή" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Φίλτρα" #: ../quodlibet/qltk/quodlibetwindow.py:455 msgid "Recently _Played" msgstr "Πρόσφατα _Αναπαραχθέντα" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "Πρόσφατα _Προστεθέντα" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "Κορυφαία 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Έλεγχος" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Μεταπήδηση στο Αναπαραγώμενο Τραγούδι" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Προβολή" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Βοήθεια" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "_Καταγραφή Εξόδου" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "Πρόκληση _Λάθους" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "Βοήθεια στο Διαδίκτυο" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Αναζήτηση" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "_Ανανέωση Μουσικοθήκης" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "_Επαναφόρτωση Μουσικοθήκης" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Φίλτρο στο Εί_δος" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Φίλτρο στον _Καλλιτέχνη" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Φίλτρο στο _Άλμπουμ" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Τυχαίο Εί_δος" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Τυχαίος _Καλλιτέχνης" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Τυχαίο _Άλμπουμ" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "_Λίστα Τραγουδιών" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Έλεγχος για αλλαγές στην μουσικοθήκη σας" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "" "Επαναφόρτωση όλων των τραγουδιών της μουσικοθήκης σας (μπορεί να πάρει " "αρκετό χρόνο)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "Τα 40 τραγούδια που έχετε ακούσει περισσότερο (θα επιλεχθούν πάνω από 40 αν " "υπάρχουν ισοπαλίες)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Προσθήκη Τοποθεσίας" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Εισάγετε την τοποθεσία ενός αρχείου ήχου:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Αδυναμία προσθήκης τοποθεσίας" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "Το <b>%s</b> δεν είναι έγκυρη τοποθεσία." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Προσθήκη Μουσικής" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Παρακολούθηση αυτού του φακέλου για νέα τραγούδια" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "Το %s δεν μπόρεσε να προστεθεί στην μουσικοθήκη σας.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Αδυναμία προσθήκης τραγουδιού" #: ../quodlibet/qltk/ratingsmenu.py:20 #, fuzzy, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" "Πρόκειται να αλλάξετε την βαθμολογία %d τραγουδιών.\n" "Θέλετε να συνεχίσετε;" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "Η βαθμολογία όλων των επιλεγμένων τραγουδιών θα αλλαχθεί σε '%s'" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Ελήφθη μη έγκυρη εντολή %r." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "Σφάλμα κατά την εκτέλεση της εντολής %r, προκλήθηκε από: %r." #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Άγνωστος περιηγητής %r." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Αντικατάσταση κενών με _κάτω παύλες" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Αφαίρεση χαρακτήρων μη συμβατών με τα _Windows" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Αφαίρεση _διακριτικών συμβόλων" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Αφαίρεση μη-_ASCII χαρακτήρων" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "Χρήση μόνο πε_ζών γραμμάτων" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Μετονομασία Αρχείων" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Νέο Όνομα" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "Αγνόηση Όλων των Σ_φαλμάτων" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "Συνέ_χεια" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Αδυναμία μετονομασίας αρχείου" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Η μετονομασία του <b>%s</b> σε <b>%s</b> απέτυχε. Πιθανότατα το αρχείο " "προορισμού υπάρχει ήδη, ή δεν έχετε δικαιώματα δημιουργίας νέου αρχείου ή " "απομάκρυνσης του παλιού." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Η διαδρομή αρχείου δεν είναι απόλυτη" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Το πρότυπο\n" "\t<b>%s</b>\n" "περιέχει το / μα δεν ξεκινά από την βάση του συστήματος αρχείων. Για να " "αποφύγετε λάθος ονομασμένους φακέλους, ξεκινήστε το πρότυπό σας με / ή ~/." #: ../quodlibet/qltk/scanbox.py:35 msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Τραγούδια από τους εμφανιζόμενους φακέλους θα προστεθούν στην μουσικοθήκη " "σας μετά από ανανέωση" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Επιλεγμένοι Κατάλογοι" #: ../quodlibet/qltk/searchbar.py:46 msgid "Saved Searches" msgstr "Αποθηκευμένες Αναζητήσεις" #: ../quodlibet/qltk/searchbar.py:47 msgid "Edit saved searches..." msgstr "Επεξεργασία αποθηκευμένων αναζητήσεων..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Αναζήτηση" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" "Αναζήτηση στην μουσικοθήκη σας, με χρήση ελεύθερου κειμένου ή ερωτημάτων QL" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Όριο:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Βαρύτητα" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Φίλτρο στο %s" #: ../quodlibet/qltk/songlist.py:1017 msgid "All _Headers" msgstr "_Όλες οι Κεφαλίδες" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Κεφαλίδες _Κομματιών" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "Κεφαλίδες _Άλμπουμ" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "Κεφαλίδες Α_νθρώπων" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Κεφαλίδες _Ημερομηνιών" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Κεφαλίδες Αρ_χείων" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "Κεφαλίδες Παρα_γωγής" #: ../quodlibet/qltk/songlist.py:1037 msgid "Custom _Sort..." msgstr "Προσαρμοσμένη _Ταξινόμηση..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "Προσαρμογή _Κεφαλίδων..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Προσθήκη στην Ο_υρά" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "Αντιγραφή στην _Συσκευή" #: ../quodlibet/qltk/songsmenu.py:259 msgid "_Remove from library" msgstr "Α_φαίρεση από την μουσικοθήκη" #: ../quodlibet/qltk/sortdialog.py:19 msgid "Track Headers" msgstr "Κεφαλίδες Κομματιών" #: ../quodlibet/qltk/sortdialog.py:22 msgid "People Headers" msgstr "Κεφαλίδες Ανθρώπων" #: ../quodlibet/qltk/sortdialog.py:25 msgid "Album Headers" msgstr "Κεφαλίδες Άλμπουμ" #: ../quodlibet/qltk/sortdialog.py:28 msgid "Date Headers" msgstr "Κεφαλίδες Ημερομηνιών" #: ../quodlibet/qltk/sortdialog.py:31 msgid "File Headers" msgstr "Κεφαλίδες Αρχείων" #: ../quodlibet/qltk/sortdialog.py:33 msgid "Production Headers" msgstr "Κεφαλίδες Παραγωγής" #: ../quodlibet/qltk/sortdialog.py:67 msgid "Tag:" msgstr "Ετικέτα:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "Αύξουσα" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "Φθήνουσα" #: ../quodlibet/qltk/sortdialog.py:117 msgid "Custom sort" msgstr "Προσαρμοσμένη ταξινόμηση" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Αντικατάσταση _κάτω παύλων με κενά" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Κεφαλαία τα πρώτα γράμματα κάθε λέξης στις ετικέτες" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Διαχωρισμός σε πο_λλαπλές τιμές" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Ετικέτες από την Διαδρομή Αρχείου" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Οι ετικέτες αντικαθιστούν τις ήδη υπάρχουσες" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Οι ετικέτες προστίθενται στις ήδη υπάρχουσες" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Το πρότυπο\n" "\t<b>%s</b>\n" "δεν είναι έγκυρο. Πιθανότατα περιέχει την ίδια ετικέτα δύο φορές ή έχει μη " "ισορροπημένες γωνιακές αγκύλες (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Μη έγκυρες ετικέτες" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Μη έγκυρες ετικέτες <b>%s</b>\n" "\n" "Τα επιλεγμένα αρχεία δεν υποστηρίζουν την επεξεργασία αυτών των ετικετών." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Αδυναμία επεξεργασίας τραγουδιού" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Το πρότυπο που εισάγατε δεν ήταν έγκυρο. Βεβαιωθείτε πως εισάγετε τα < " "και > ως \\< και \\> και πως οι ετικέτες σας είναι ισορροπημένες.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Επεξεργασία Προβολής" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Υπερβολικά Πολλά Σφάλματα" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Σταματά η αναπαραγωγή διότι υπήρξαν %d σφάλματα στη σειρά." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Αριθμοί Κομματιών" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Αρ_χή από:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "Συνολικός αριθμός κομματιών:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Κομμάτι" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "και %d ακόμη..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Αποθήκευση των τραγουδιών που επεξεργαστήκατε" #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d τραγούδια αποθηκεύτηκαν\n" "(%(remaining)s απομένουν)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d από %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Καθαρισμός αναζήτησης" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Μια λίστα αναπαραγωγής με το όνομα %s υπάρχει ήδη." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "Α: " #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "Αποσφαλμάτωση" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "Π: " #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Προειδοποιήσεις" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "Σ: " #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Προβολή σύντομων πληροφοριών χρήσης" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Προβολή έκδοσης και πνευματικών δικαιωμάτων" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Χρήση: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[επιλογές]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Η επιλογή %r δεν αναγνωρίστηκε" #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "Η επιλογή %r χρειάζεται ένα όρισμα" #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "Το %r δεν είναι μοναδικά ταυτοποιήσιμο πρόθεμα" #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Μη έγκυρη Κωδικοποίηση]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "Γενικά" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "Δεν υπάρχει διαθέσιμη καταγραφή" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Η ημερομηνία πρέπει να εισαχθεί με μορφή 'ΧΧΧΧ', 'ΧΧΧΧ-ΜΜ-ΗΗ' ή 'ΧΧΧΧ-ΜΜ-ΗΗ " "ΩΩ:ΛΛ:ΔΔ'." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Οι ενισχύσεις του Replay Gain πρέπει να εισαχθούν με μορφή 'x.yy dB'." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Οι μέγιστες κορυφές Replay Gain πρέπει να εισαχθούν σε μορφή 'x.yy'." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "Οι ταυτότητες του MusicBrainz πρέπει να είναι σε μορφή UUID." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "Η κατάσταση κυκλοφορίας του MusicBrainz πρέπει να είναι 'επίσημη', " "'διαφημιστική' ή 'πειρατική'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "Η γλώσσα πρέπει να είναι σε μορφή κώδικα τριών γραμμάτων ISO 639-2" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "άλμπουμ" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "διευθετών" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "συγγραφέας" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "συνθέτης" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "διευθυντής ορχήστρας" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "σύνδεσμος" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "πνευματική ιδιοκτησία" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "ημερομηνία" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "περιγραφή" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "είδος" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "ομαδοποίηση" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "γλώσσα" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "άδεια" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "τοποθεσία" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "στιχουργός" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "οργάνωση" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "τίτλος" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "έκδοση" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "ιστοσελίδα" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "καλλιτέχνης άλμπουμ" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "ρυθμός (BPM - διακροτήματα ανά λεπτό)" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "υπότιτλος δίσκου" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "δίσκος" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "κομμάτι" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "δισκογραφική ταυτότητα" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "ημερομηνία αρχικής κυκλοφορίας" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "αρχικό άλμπουμ" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "αρχικός καλλιτέχνης" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "ημερομηνία ηχογράφησης" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "χώρα κυκλοφορίας" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "καλλιτέχνης άλμπουμ (ταξινόμηση)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "καλλιτέχνης (ταξινόμηση)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "άλμπουμ (ταξινόμηση)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "εκτελεστής (ταξινόμηση)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "εκτελεστές (ταξινόμηση)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz Ταυτότητα κομματιού" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "MusicBrainz Ταυτότητα κυκλοφορίας" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "MusicBrainz Ταυτότητα καλλιτέχνη" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz Ταυτότητα καλλιτέχνη άλμπουμ" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz Ταυτότητα TRM" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicBrainz Ταυτότητα PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz κατάσταση κυκλοφορίας άλμπουμ" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz τύπος άλμπουμ" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "ενίσχυση κομματιού" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "ηχητική κορυφή κομματιού" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "ενίσχυση άλμπουμ" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "ηχητική κορυφή άλμπουμ" #: ../quodlibet/util/tags.py:88 msgid "reference loudness" msgstr "ηχητική ένταση αναφοράς" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "δίσκοι" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "κομμάτια" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "τελευταία εκκίνηση αναπαραγωγής" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "πλήρες όνομα" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "σημείο προσάρτησης" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "σφάλματα" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "άνθρωποι" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "έτος" #: ../quodlibet/util/tags.py:111 msgid "original release year" msgstr "έτος αρχικής κυκλοφορίας" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "σελιδοδείκτης" #: ../quodlibet/util/tags.py:115 msgid "file format" msgstr "τύπος αρχείου" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "στιχουργοί" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "διευθετώντες" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "συνθέτες" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "διευθυντές ορχήστρας" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "συγγραφείς" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d δευτερόλεπτο" msgstr[1] "%d δευτερόλεπτα" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d λεπτό" msgstr[1] "%d λεπτά" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d ώρα" msgstr[1] "%d ώρες" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d ημέρα" msgstr[1] "%d ημέρες" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d χρόνος" msgstr[1] "%d χρόνια" #~ msgid "_Browse Library" #~ msgstr "Π_εριήγηση στην Μουσικοθήκη" #~ msgid "Do you wish to continue?" #~ msgstr "Θέλεις να συνεχίσεις;" #~ msgid "Confirm playlist removal" #~ msgstr "Επιβεβαίωση διαγραφής λίστας" #~ msgid "Confirm duplicates removal" #~ msgstr "Επιβεβαίωση αφαίρεσης διπλότυπων" #~ msgid "No eject command found." #~ msgstr "Δεν βρέθηκε εντολή εξαγωγής." #~ msgid "Unable to start web browser" #~ msgstr "Αδυναμία εκκίνησης περιηγητή διαδικτύου" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Δεν βρέθηκε περιηγητής διαδικτύου. Παρακαλώ καθορίστε την μεταβλητή " #~ "%BROWSER, ή βεβαιωθείτε πως το /usr/bin/sensible-browser υπάρχει." #~ msgid "" #~ "Cannot save library contents to %s (it's a directory). Please remove it " #~ "and try again." #~ msgstr "" #~ "Δεν μπορώ να αποθηκεύσω τα περιεχόμενα της μουσικοθήκης στο %s (είναι " #~ "κατάλογος). Παρακαλώ διαγράψτε το και προσπαθήστε ξανά." #~ msgid "Library Error" #~ msgstr "Σφάλμα Μουσικοθήκης" #~ msgid "_Output device:" #~ msgstr "_Συσκευή Εξόδου:" #~ msgid "Could not link GStreamer pipeline: '%s'" #~ msgstr "Αδυναμία σύνδεσης με την διασωλήνωση GStreamer: '%s'" #~ msgid "Default" #~ msgstr "Προεπιλογή" #~ msgid "translator-credits" #~ msgstr "Δημήτρης Παπαγεωργίου <dipap@gmx.com>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Άλλες στήλες για εμφάνιση, διαχωρισμένες με κενά" #~ msgid "_Edit and Continue" #~ msgstr "Επεξεργασία και Συνέχεια" #, fuzzy #~ msgid "You are about to change the rating of %d song." #~ msgid_plural "You are about to change the rating of %d songs." #~ msgstr[0] "" #~ "Πρόκειται να αλλάξεις την βαθμολογία %d τραγουδιού.\n" #~ "Θέλεις να συνεχίσεις;" #~ msgstr[1] "" #~ "Πρόκειται να αλλάξεις την βαθμολογία %d τραγουδιών.\n" #~ "Θέλεις να συνεχίσεις;" #~ msgid "Confirm rating" #~ msgstr "Επιβεβαίωση βαθμολογίας" #~ msgid "_Search:" #~ msgstr "_Αναζήτηση:" #~ msgid "Search your library" #~ msgstr "Αναζήτηση στην μουσικοθήκη σας" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quod-libet-development@googlegroups.com>\n" #~ "Πνευματική ιδιοκτησία 2004-2005 Joe Wreschnig, Michael Urman, και άλλοι\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r δεν περιέχει περιηγητές" #~ msgid "%r doesn't contain any devices." #~ msgstr "Το %r δεν περιέχει συσκευές." #~ msgid "%s: Could not find media-player-info." #~ msgstr "%s: Δεν βρέθηκε το media-player-info." #~ msgid "Unkown" #~ msgstr "Άγνωστο" ������������������quodlibet-3.0.2/po/ru.po����������������������������������������������������������������������������0000644�0001750�0001750�00000323125�12173213426�015345� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Russian translation of Quod Libet # Copyright (C) 2005 THE quodlibet'S COPYRIGHT HOLDER # This file is distributed under the same license as the Quod Libet package. # Andrey Fedoseev <andrey.fedoseev@gmail.com>, 2005, 2006. # Sergey Fedoseev <fedoseev.sergey@gmail.com>, 2005, 2006. # Nikolai Prokoschenko <nikolai@prokoschenko.de>, 2005. # Russian L10N Team <debian-l10n-russian@lists.debian.org>, 2005. # # msgid "" msgstr "" "Project-Id-Version: Quod Libet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2012-12-01 14:35+0800\n" "Last-Translator: Anton Shestakov <engored@ya.ru>\n" "Language-Team: Russian\n" "Language: ru\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" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Редактор тегов аудиофайлов" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Программа для редактирования тегов аудиофайлов" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Музыкальный проигрыватель" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Программа для прослушивания и управления фонотекой" #: ../data/quodlibet.desktop.in.h:3 msgid "Play/Pause" msgstr "Воспроизведение/Пауза" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "Следующая композиция" #: ../data/quodlibet.desktop.in.h:5 msgid "Previous" msgstr "Предыдущая композиция" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "редактор тегов аудиофайлов" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "папка" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "_Показывать программные теги" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Слишком много ошибок" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "описание" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Значение" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Тег" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Редактор тегов аудиофайлов" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "Удалить повторы" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Удалить повторы" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Фильтровать по значению тега" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Фильтровать по значению тега" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Нет информации о времени" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Вывести краткую информацию об использовании" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> не является корректным адресом." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Композиции, не входящие в альбомы" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Настройка списка альбомов" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Показывать обложки _альбомов" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "При быстром поиске _искать также исполнителей" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Список альбомов" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d дорожка" msgstr[1] "%d дорожки" msgstr[2] "%d дорожек" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d диск" msgstr[1] "%d диска" msgstr[2] "%d дисков" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Некорректный шаблон" #: ../quodlibet/browsers/albums.py:180 msgid "_Title" msgstr "_Название" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Исполнитель" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Дата" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 msgid "_Genre" msgstr "_Жанр" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "О_ценка" #: ../quodlibet/browsers/albums.py:189 msgid "Sort _by..." msgstr "Сортировать _по..." #: ../quodlibet/browsers/albums.py:210 msgid "_Preferences" msgstr "_Настройки" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Список альбомов" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "Список _альбомов" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Все альбомы" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d альбом" msgstr[1] "%d альбома" msgstr[2] "%d альбомов" #: ../quodlibet/browsers/albums.py:725 msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Обновить _обложку альбома" msgstr[1] "Обновить _обложки альбомов" msgstr[2] "Обновить _обложки альбомов" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Неизвестно" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Новая лента" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Введите адрес ленты аудиофайлов:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Ленты аудиофайлов" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Ленты аудиофайлов" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Загрузить..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Загрузить файлы" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Загрузить файл" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Не удалось добавить ленту" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "Не удалось добавить <b>%s</b>. Возможно, указанный сервер не работает или " "адрес не является лентой аудиофайлов." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "Не удалось импортировать %s, поддержка лент аудиофайлов отключена." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "Используемая система аудиовывода не поддерживает адреса URL. Поддержка лент " "аудиофайлов отключена." #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Окно просмотра фонотеки" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d композиция (%(time)s)" msgstr[1] "%(count)d композиции (%(time)s)" msgstr[2] "%(count)d композиций (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, python-format msgid "Unknown %s" msgstr "Неизвестный %s" #: ../quodlibet/browsers/collection.py:37 #, python-format msgid "Multiple %s Values" msgstr "Несколько значений %s" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Особые" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "Группировать" #: ../quodlibet/browsers/collection.py:210 msgid "Album Collection Preferences" msgstr "Настройка коллекции альбомов" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "Коллекция альбомов" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "_Коллекция альбомов" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Файловая система" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Файловая система" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Не удалось скопировать композиции" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Выбранные файлы не могут быть скопированы в другой список воспроизведения " "или очередь." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Добавить в фонотеку" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Неподдерживаемый тип файла" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Списки станций могут содержать только местоположения станций, но не списки " "станций или списки воспроизведения. Не удалось загрузить следующие станции:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Не удалось добавить станцию" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Интернет-радио" #: ../quodlibet/browsers/iradio.py:235 msgid "Downloading station list" msgstr "Загрузка списка станций" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Новая станция" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Введите адрес интернет-радиостанции:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 msgid "Latin" msgstr "" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Интернет-радио" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Новая станция" #: ../quodlibet/browsers/iradio.py:491 msgid "_Update Stations" msgstr "_Обновить список станций" #: ../quodlibet/browsers/iradio.py:516 msgid "All Stations" msgstr "Все станции" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "Избранное" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "Без категории" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Станций не найдено" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "По адресу %s интернет-радиостанций не найдено." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Все указанные станции уже находятся в фонотеке." #: ../quodlibet/browsers/iradio.py:738 msgid "Remove from Favorites" msgstr "Удалить из избранного" #: ../quodlibet/browsers/iradio.py:744 msgid "Add to Favorites" msgstr "Добавить в избранное" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d станция" msgstr[1] "%(count)d станции" msgstr[2] "%(count)d станций" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Свойства устройства" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Устройство:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Не подключено" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Точка монтирования:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Имя:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Аудиоустройства" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "Аудио_устройства" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Извлечь" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "Пере_именовать" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> использовано, <b>%s</b> доступно" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> не присоединено." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "Копирование <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Не удалось скопировать композицию" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Недостаточно места для данной композиции." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "Не удалось скопировать <b>%s</b>." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Не удалось удалить композиции" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Удаление <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "Не удалось удалить <b>%s</b>." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Не удалось удалить композицию" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Не удалось извлечь <b>%s</b>." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Не удалось извлечь устройство" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" "Система поддержки устройств не найдена, просмотр аудиоустройств отключён." #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Параметры просмотра" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Все" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Обзор фонотеки" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Обзор фонотеки" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "В_ыбрать всё" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Импортируется список воспроизведения.\n" "\n" "%(current)d/%(total)d композиций добавлено." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "Удалить список воспроизведения «%s»?" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "Список воспроизведения будет удалён безвозвратно." #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "Удалить %d повтор?" msgstr[1] "Удалить %d повтора?" msgstr[2] "Удалить %d повторов?" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" "Из списка воспроизведения «%s» будут удалены все повторяющиеся композиции." #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Новый список воспроизведения" #: ../quodlibet/browsers/playlists.py:141 msgid "Enter a name for the new playlist:" msgstr "Введите название нового списка воспроизведения:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Новый список воспроизведения" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s и ещё %(count)d композиция" msgstr[1] "%(title)s и ещё %(count)d композиции" msgstr[2] "%(title)s и ещё %(count)d композиций" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Списки воспроизведения" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "Списки _воспроизведения" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "Удалить из _списка воспроизведения" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Импортировать" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Не удалось импортировать список воспроизведения" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "" "Quod Libet может импортировать списки воспроизведения только в форматах M3U " "и PLS." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "Удалить повторы" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Случайно" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Не удалось переименовать список воспроизведения" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Импортировать список воспроизведения" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Без просмотра" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Без просмотра" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Поиск по фонотеке" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Поиск по фонотеке" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Ограничить результаты" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Неизвестное устройство" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" "Не удалось импортировать %s, который необходим для поддержки устройств." #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "Устройство «%r» не поддерживается." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: не удалось найти %s." #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "%s: не удалось найти %s." #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "Инициализация системы поддержки устройств." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "Проверка «%s»" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "Не удалось подключиться к системе поддержки устройств." #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Система поддержки устройств запущена." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Усиление громкости (дБ):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Копировать обложки _альбомов" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "_Объединить теги с разными значениями" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Название содержит _версию" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "Альбом содержит _раздел диска" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Модель:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Ёмкость:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Микропрограмма:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "Удаление лишней дорожки с iPod" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Не удалось сохранить базу данных iPod" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "iPod отключён" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Создать новую базу данных на этом iPod?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "Не удалось импортировать python-gpod, поддержка iPod отключена." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Шаблон имени файла:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Удалить неиспользуемые обложки и папки" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Файл существует" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Перезаписать <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "Не удалось прочитать обложку «%s»" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Не удалось загрузить %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Фонотека" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Проверка точек монтирования" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Сканирование фонотеки" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Сканирование %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "Конвейер GStreamer для воспроизведения, например: «alsasink device=default». " "Пустое поле соответствует значению по умолчанию." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "_Конвейер воспроизведения:" #: ../quodlibet/player/gstbe.py:75 #, python-format msgid "%.1f seconds" msgstr "%.1f секунд" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "_Размер буфера:" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "Поток" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "Буферизация" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Ошибка воспроизведения" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "Не удалось инициализировать конвейер GStreamer. Конвейер может быть " "некорректным или устройство может быть занято. Проверьте настройки " "проигрывателя." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Не удалось открыть входные файлы" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "Элемент GStreamer для чтения файлов отсутствует. Проверьте параметры " "установки GStreamer." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "Некорректный конвейер GStreamer, используется конвейер по умолчанию." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "Не удалось создать конвейер GStreamer по умолчанию." #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "Некорректная система аудиовывода" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "Система аудиовывода %r не установлена." #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Не удалось создать аудиовыход" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Аудиоустройство %r не найдено. Проверьте настройки Xine в ~/.quodlibet/" "config." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet уже запущен." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Не проигрывает на данный момент." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet не запущен." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Не удалось записать в %s, файл будет удалён." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "музыкальный проигрыватель и фонотека" #: ../quodlibet.py:297 msgid "[option]" msgstr "[параметр]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Вывести название текущей композиции и выйти" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Сразу начать воспроизведение" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Перейти к следующей композиции" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "Перейти к предыдущей композиции или в начало текущей" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Перейти к предыдущей композиции" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Начать воспроизведение" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Приостановить воспроизведение" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Переключить режим воспроизведения/паузы" #: ../quodlibet.py:310 msgid "Stop playback" msgstr "Остановить воспроизведение" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Увеличить громкость" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Уменьшить громкость" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Вывести состояние воспроизведения" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Скрыть главное окно" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Показать главное окно" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Показать/скрыть главное окно" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Поместить фокус на окно Quod Libet" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Снять текущие фильтры режимов просмотра" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Обновить фонотеку" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Вывести текущий список воспроизведения" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Вывести содержимое очереди" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "Отключить расширения" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Выйти из Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Навигация по воспроизводимой композиции" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][ЧЧ:]ММ:СС" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Переключить порядок воспроизведения" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Включить/выключить режим повторения композиций" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Установить громкость" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Найти в фонотеке" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "запрос" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Воспроизвести файл" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "имя файла" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Оценить воспроизводимую композицию" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Установить режим просмотра фонотеки" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Открыть новый режим просмотра" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Показать/скрыть/переключить очередь" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Показать/скрыть список композиций" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Фильтровать по случайному параметру" #: ../quodlibet.py:340 msgid "command|tag" msgstr "тег" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Фильтровать по значению тега" #: ../quodlibet.py:341 msgid "tag=value" msgstr "тег=значение" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Добавить в очередь файл или результат запроса" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "Добавить в очередь несколько файлов" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "имя файла" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "Вывести полученные имена файлов на экран (stdout)" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Удалить из очереди файл или результат запроса" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Недопустимый аргумент для «%s»." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Попробуйте %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Поддерживаемые форматы: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Аудиоустройство: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Начало" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "Н/Д" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Время" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Имя закладки" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "ММ:СС" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Закладки" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Нет информации о времени" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Значение:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Сохранённые значения" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Изменить сохранённые значения..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Композиции" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Отображать оставшееся время" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Изменить закладки..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "Авто_матически" #: ../quodlibet/qltk/controls.py:233 msgid "_Track Mode" msgstr "Режим _дорожки" #: ../quodlibet/qltk/controls.py:234 msgid "_Album Mode" msgstr "Режим _альбома" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Остановиться после этой композиции" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Фильтровать по значению тега" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Произошла ошибка" #: ../quodlibet/qltk/debugwindow.py:71 #, fuzzy, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "В Quod Libet произошло исключение. Дамп памяти был сохранён в файл <b>%s</" "b>, который поможет нам при диагностике. Отправьте отчёт об ошибке на http://" "code.google.com/p/quodlibet/issues/list и прикрепите данный файл. В файле " "могут присутствовать такие персональные данные, как информация о системе и " "список недавно воспроизведённых файлов. Если вы не хотите распространять эту " "информацию, вместо этого файла прикрепите <b>%s</b> с описанием ваших " "действий до ошибки.\n" "\n" "Quod Libet может работать некорректно. Рекомендуется перезапустить " "программу. Фонотека будет сохранена." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Удаление файлов" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Переместить в корзину" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Навсегда удалить этот файл?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Навсегда удалить эти файлы?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s и ещё %(count)d композиция..." msgstr[1] "%(title)s и ещё %(count)d композиции..." msgstr[2] "%(title)s и ещё %(count)d композиций..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "Перемещение %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Удаление %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:105 msgid "Unable to move to trash" msgstr "Не удалось переместить файл в корзину" #: ../quodlibet/qltk/delete.py:106 #, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Не удалось переместить <b>%s</b> в корзину." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Не удалось удалить файл" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Не удалось удалить <b>%s</b>." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Загрузки" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Имя файла" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Размер" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "В очереди" #: ../quodlibet/qltk/_editpane.py:82 msgid "Path Patterns" msgstr "Сохранённые шаблоны" #: ../quodlibet/qltk/_editpane.py:83 msgid "Edit saved patterns..." msgstr "Сохранённые шаблоны..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Предварительный просмотр" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Дополнительные параметры..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "отсутствует у %d композиции" msgstr[1] "отсутствует у %d композиций" msgstr[2] "отсутствует у %d композиций" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "разное у %d композиции" msgstr[1] "разное у %d композиций" msgstr[2] "разное у %d композиций" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "_Разделить на несколько значений" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Выделить «_disc» из «album»" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Выделить «_version» из «title»" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Выделить «_arranger» из «artist»" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Выделить «_performer» из «artist»" #: ../quodlibet/qltk/edittags.py:229 msgid "Split _Performer out of Title" msgstr "Выделить «_performer» из «title»" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Выделить «_version» из «title»" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Добавить тег" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "Т_ег:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 msgid "ql-revert" msgstr "" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Изменить теги" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Записать" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Не удалось добавить тег" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Невозможно добавить <b>%s</b>\n" "\n" "Выбранные файлы не поддерживают множественные значения." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Недопустимый тег" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Недопустимый тег <b>%s</b>\n" "\n" "Выбранные файлы не поддерживают изменение этого тега." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Тег может быть неверным" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> был изменён сторонней программой. Сохранение композиции без " "обновления фонотеки может привести к перезаписи других изменений.\n" "\n" "Всё равно сохранить композицию?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Не удалось сохранить композицию" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Не удалось сохранить <b>%s</b>. Возможно, файл доступен только для чтения, " "испорчен, или вы не имеете прав для его изменения." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Недопустимое значение" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Некорректное значение: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Расширения" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d композиция" msgstr[1] "%d композиции" msgstr[2] "%d композиций" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Настройки Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "_Разделять по:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "_Показывать программные теги" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Редактор тегов" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Папки" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Создать папку..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "В_ыбрать все вложенные папки" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Создание папки" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Введите имя новой папки:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Не удалось создать папку" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Не удалось удалить папку" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "в исполнении %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Диск %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Дорожка %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "Добавить в _список воспроизведения" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Изменить внешний вид..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Изменить _теги" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Остановлен" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Очистить ошибки" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Не выбрана ни одна композиция." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Нет композиций" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Информация" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Текст песни" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Ошибки" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "исполнитель" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "исполнители" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "исполнители" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Никогда" #: ../quodlibet/qltk/information.py:243 #, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%(n)d раз" msgstr[1] "%(n)d раза" msgstr[2] "%(n)d раз" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "добавлен" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "последнее воспроизведение" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "количество воспроизведений" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "пропущено" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "оценка" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d Кбит/с" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "время" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "размер" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "изменён" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "битрейт" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Файл" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d выбрано" msgstr[1] "%d выбрано" msgstr[2] "%d выбрано" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Продюсер: %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "исполнитель" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Дорожка недоступна" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Список композиций" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d композиция с неуказанным альбомом" msgstr[1] "%d композиции с неуказанным альбомом" msgstr[2] "%d композиций с неуказанным альбомом" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Выбранные альбомы" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d композиция с неуказанным исполнителем" msgstr[1] "%d композиции с неуказанным исполнителем" msgstr[2] "%d композиций с неуказанным исполнителем" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "альбомы" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Общая продолжительность:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Общий размер:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Файлы" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Журнал" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Загрузить" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Не удалось найти текст этой композиции." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Идёт поиск текста песни..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Не удалось загрузить текст песни." #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "Удалить %d повтор?" #: ../quodlibet/qltk/maskedbox.py:18 #, fuzzy msgid "The selected songs will be removed from the library." msgstr "" "Из списка воспроизведения «%s» будут удалены все повторяющиеся композиции." #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d станция" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Забыть изменения тегов?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Теги были изменены, но изменения не были сохранены. Сохранить файлы или " "забыть изменения?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "Активные задачи" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "%d задач активно" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Неизвестно" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "По порядку" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_По порядку" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Случайно" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "По оценкам" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_По оценкам" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Одна композиция" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Одна композиция" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Ошибки расширений" #: ../quodlibet/qltk/pluginwin.py:80 msgid "Plugins" msgstr "Расширения" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "_Ошибки" #: ../quodlibet/qltk/pluginwin.py:259 msgid "Version:" msgstr "Версия:" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Включённые" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Отключённые" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Без категории" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Расширения не найдены." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Диск" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Номер дорожки" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "классификация" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "_Альбом" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "Имя _файла" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "Вре_мя" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Список композиций" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Автоматически переходить к воспроизводимой композиции" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "" "Когда воспроизведение переходит к другой композиции, переходить к ней в " "списке воспроизведения" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "Поведение" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "Д_ругие:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Изменить внешний вид..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Отображаемые столбцы" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "При быстром поиске _искать также исполнителей" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Имя файла содержит _путь" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Параметры" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Режимы отображения" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Общий фильтр:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" "В дополнение к остальным, всегда будет выполняться и этот поисковый запрос" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "_Производить поиск по окончании ввода" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "Производить поиск сразу после прекращения ввода." #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 msgid "heading|Search" msgstr "Поиск" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "_Запрашивать подтверждение при множественном изменении оценок" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" "Запрашивать подтверждение, прежде чем сменить оценку сразу нескольким " "композициям" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "О_ценивать композицию одним щелчком" #: ../quodlibet/qltk/prefs.py:241 msgid "Enable rating by clicking on the rating column in the song list" msgstr "Изменять оценку композиции при щелчке в соответствующем столбце" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Оценка композиций" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "_Закруглять углы обложек альбомов" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "Закруглять углы миниатюр обложек. Может потребоваться перезапуск." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "_Предпочитать внедрённую обложку" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "Предпочитать изображение, внедрённое в медиафайл, если таковое имеется" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "_Только с указанным именем:" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "Будут использоваться файлы только с указанным именем" #: ../quodlibet/qltk/prefs.py:283 msgid "Album Art" msgstr "Обложки" #: ../quodlibet/qltk/prefs.py:301 msgid "Playback" msgstr "Воспроизведение" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "Параметры воспроизведения" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "Если информация Replay Gain для композиции отсутствует, изменять уровень " "громкости на это значение" #: ../quodlibet/qltk/prefs.py:320 msgid "_Fall-back gain (dB):" msgstr "_Усиление по умолчанию (дБ):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Изменять уровень громкости всех композиций на данное значение, если это не " "приводит к потере качества" #: ../quodlibet/qltk/prefs.py:334 msgid "_Pre-amp gain (dB):" msgstr "_Базовое усиление громкости (дБ):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "Корректировка _громкости Replay Gain" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Настройка Replay Gain" #: ../quodlibet/qltk/prefs.py:387 msgid "Tags" msgstr "Теги" #: ../quodlibet/qltk/prefs.py:392 msgid "Auto-save tag changes" msgstr "Сохранять изменения тегов автоматически" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" "Сохранять изменения тегов без подтверждения при редактировании нескольких " "файлов" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" "Список разделителей (через пробел), которые будут использоваться для " "разделения тегов" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Со_хранять оценки и счётчик воспроизведений" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Электронная почта:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" "Оценки и счётчики воспроизведений будут привязаны к этому почтовому адресу" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Обновить список станций" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "_Обновлять фонотеку при запуске" #: ../quodlibet/qltk/prefs.py:501 msgid "Refresh Library" msgstr "Обновить фонотеку" #: ../quodlibet/qltk/prefs.py:509 msgid "Scan Directories" msgstr "Сканировать папки" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Нет композиций" #: ../quodlibet/qltk/prefs.py:524 msgid "Preferences" msgstr "Параметры" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Свойства" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Очередь" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Удалить все композиции из очереди" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Случайно" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "О_черёдность:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Повторять" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "По окончании списка воспроизведения начать его заново" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Не удалось добавить композиции" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> использует неподдерживаемый протокол." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Музыка" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "Добавить _каталог..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "Добавить _файл..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "Добавить _адрес..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Открыть новый режим просмотра" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Фильтры" #: ../quodlibet/qltk/quodlibetwindow.py:455 msgid "Recently _Played" msgstr "Недавно _прослушанные" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "Недавно _добавленные" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "40 _лучших" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Управление" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "Перейти _к воспроизводимой композиции" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Вид" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Справка" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "_Журнал" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "_Вызвать ошибку" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "Справка в сети" #: ../quodlibet/qltk/quodlibetwindow.py:502 msgid "Search Help" msgstr "Справка по поисковым запросам" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "_Обновить фонотеку" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Пере_загрузить фонотеку" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Фильтровать по _жанру" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Фильтровать по _исполнителю" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Фильтровать по _альбому" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Случайный _жанр" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "_Случайный исполнитель" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "_Случайный альбом" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "_Список композиций" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Проверить наличие изменений в фонотеке" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "" "Перезагрузить все композиции в фонотеке (это может занять много времени)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "40 композиций, которые воспроизводились большее количество раз, чем " "остальные (может быть выбрано больше 40, если есть композиции, " "воспроизводившиеся равное количество раз)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Добавление адреса" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Введите адрес аудиофайла:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Не удается добавить адрес" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> не является корректным адресом." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Добавление музыки" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Следить за появлением новых файлов в этой папке" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "Не удалось добавить %s в фонотеку.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Не удалось добавить композицию" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "Изменить оценку %d композиций?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "Оценка всех композиций будет установлена в «%s»." #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Получена некорректная команда %r." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Неизвестный режим просмотра %r." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "_Заменить пробел подчёркиванием" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Заменить _Windows-несовместимые символы" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "_Удалить диакритические знаки" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Заменить не-_ASCII символы" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "_Только строчные символы" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Переименовать файлы" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Новое имя файла" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "_Пропустить все ошибки" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Продолжить" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Не удалось переименовать файл" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Не удалось переименовать <b>%s</b> в <b>%s</b>. Возможно целевой файл уже " "существует, или вы не имеете прав для создания нового или удаления старого " "файла." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Неабсолютный путь" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Шаблон\n" "\t<b>%s</b>\n" "содержит «/», но начинается не с корневого каталога. Чтобы избежать ошибки в " "названиях папок, начните шаблон с «/» или «~/»." #: ../quodlibet/qltk/scanbox.py:35 msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "Композиции, расположенные в этих папках, будут добавлены в фонотеку" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Выбор папок" #: ../quodlibet/qltk/searchbar.py:46 msgid "Saved Searches" msgstr "Сохранённые запросы" #: ../quodlibet/qltk/searchbar.py:47 msgid "Edit saved searches..." msgstr "Сохранённые запросы..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Найти" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Ограничение:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "По _оценкам" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Фильтровать по %s" #: ../quodlibet/qltk/songlist.py:1017 msgid "All _Headers" msgstr "_Все заголовки" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Д_орожка" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Альбом" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_Люди" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Дата" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_Файл" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "_Производство" #: ../quodlibet/qltk/songlist.py:1037 msgid "Custom _Sort..." msgstr "_Расширенная сортировка..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Настроить заголовки..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Добавить в _очередь" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Копировать на устройство" #: ../quodlibet/qltk/songsmenu.py:259 msgid "_Remove from library" msgstr "Удалить из _фонотеки" #: ../quodlibet/qltk/sortdialog.py:19 msgid "Track Headers" msgstr "Дорожка" #: ../quodlibet/qltk/sortdialog.py:22 msgid "People Headers" msgstr "Люди" #: ../quodlibet/qltk/sortdialog.py:25 msgid "Album Headers" msgstr "Альбом" #: ../quodlibet/qltk/sortdialog.py:28 msgid "Date Headers" msgstr "Дата" #: ../quodlibet/qltk/sortdialog.py:31 msgid "File Headers" msgstr "Файл" #: ../quodlibet/qltk/sortdialog.py:33 msgid "Production Headers" msgstr "Производство" #: ../quodlibet/qltk/sortdialog.py:67 msgid "Tag:" msgstr "Заголовок:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "По возрастанию" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "По убыванию" #: ../quodlibet/qltk/sortdialog.py:117 msgid "Custom sort" msgstr "Расширенная сортировка" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "_Заменить подчёркивание пробелом" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "З_аменить первую букву каждого слова заглавной" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "_Разделить на несколько значений" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Теги из имени файла" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Теги заменят существующие" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Теги будут добавлены к существующим" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Шаблон\n" "\t<b>%s</b>\n" "недопустим. Возможно, он содержит незакрытые скобки (< / >) или один и " "тот же тег дважды." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Недопустимые теги" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Недопустимый теги <b>%s</b>\n" "\n" "Выбранные файлы не поддерживают изменение этих тегов." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Не удалось изменить композицию" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Введённый шаблон некорректен. Убедитесь, что вы ввели < и > как \\< " "и \\> и закрыли все открытые теги.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Изменить внешний вид" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Слишком много ошибок" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Воспроизведение остановлено из-за %d ошибок подряд." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Номера дорожек" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "_Начинать с:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "Всего _дорожек:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Дорожка" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "и ещё %d..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Сохранение изменений." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d композиций сохранено\n" "(осталось %(remaining)s)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d из %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Очистить поле поиска" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Список воспроизведения с названием «%s» уже существует." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "D: " #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "Отладка" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "W: " #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Предупреждения" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "E: " #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Вывести краткую информацию об использовании" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Вывести версию и информацию об авторских правах" #: ../quodlibet/util/__init__.py:142 #, python-format msgid "Usage: %s %s\n" msgstr "Использование: %s %s\n" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[параметры]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Неопознанный параметр «%r»." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "Для параметра «%r» требуется аргумент." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r — не уникальный префикс." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Неверная кодировка]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "firstcapital" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "Сообщения" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "В журнале нет записей." #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Дата должна быть введена в формате 'ГГГГ', 'ГГГГ-ММ-ДД' или 'ГГГГ-ММ-ДД ЧЧ:" "ММ:СС'." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Значения усилений Replay Gain должны быть введены в формате «x.yy dB»." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Значения пиков Replay Gain должны быть введены в формате «x.yy»." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "" "Идентификаторы MusicBrainz должны быть в формате UUID (уникальный " "идентификатор)." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "Статус выпуска MusicBrainz должен быть «official», «promotional», либо " "«bootleg»." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "альбом" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "аранжировщик" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "автор" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "композитор" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "дирижёр" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "контакты" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "авторское право" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "дата" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "описание" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "жанр" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "классификация" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "язык" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "лицензия" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "место записи" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "автор слов" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "организация" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "название" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "версия" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "веб-сайт" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "автор обложки" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "ударов в минуту" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "раздел диска" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "диск" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "дорожка" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "ID издателя" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "дата первоначального выпуска" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "первоначальный альбом" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "первоначальный исполнитель" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "дата записи" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "страна выпуска" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "исполнитель альбома (сортировка)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "исполнитель (сортировка)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "альбом (сортировка)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "исполнитель (сортировка)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "исполнители (сортировка)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz ID дорожки" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "MusicBrainz ID выпуска" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "MusicBrainz ID исполнителя" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz ID исполнителя альбома" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "Статус альбома MusicBrainz" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "Тип альбома MusicBrainz" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "усиление дорожки" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "пик дорожки" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "усиление альбома" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "пик альбома" #: ../quodlibet/util/tags.py:88 msgid "reference loudness" msgstr "эталонная громкость" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "диски" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "дорожки" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "запущено последний раз" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "полное имя" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "точка монтирования" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "ошибки" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "люди" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "год" #: ../quodlibet/util/tags.py:111 msgid "original release year" msgstr "год первоначального выпуска" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "закладка" #: ../quodlibet/util/tags.py:115 msgid "file format" msgstr "формат файла" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "авторы слов" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "аранжировщики" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "композиторы" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "дирижёры" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "авторы" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d секунда" msgstr[1] "%d секунды" msgstr[2] "%d секунд" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d минута" msgstr[1] "%d минуты" msgstr[2] "%d минут" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d час" msgstr[1] "%d часа" msgstr[2] "%d часов" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d день" msgstr[1] "%d дня" msgstr[2] "%d дней" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d год" msgstr[1] "%d года" msgstr[2] "%d лет" #~ msgid "_Browse Library" #~ msgstr "Про_смотр фонотеки" #~ msgid "No eject command found." #~ msgstr "Команда «извлечь» не найдена." #~ msgid "Unable to start web browser" #~ msgstr "Не удалось запустить веб-браузер" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Не удалось найти веб-браузер. Присвойте значение переменной $BROWSER или " #~ "убедитесь, что /usr/bin/sensible-browser существует." #~ msgid "" #~ "Cannot save library contents to %s (it's a directory). Please remove it " #~ "and try again." #~ msgstr "" #~ "Не удалось сохранить данные в %s (это директория). Удалите директорию и " #~ "попробуйте снова." #~ msgid "Library Error" #~ msgstr "Ошибка фонотеки" #~ msgid "_Output device:" #~ msgstr "_Устройство воспроизведения:" #~ msgid "Could not link GStreamer pipeline: '%s'" #~ msgstr "Не удалось соединить конвейер GStreamer: «%s» " #~ msgid "Default" #~ msgstr "По умолчанию" #~ msgid "translator-credits" #~ msgstr "" #~ "Андрей Федосеев <andrey.fedoseev@gmail.com>\n" #~ "Сергей Федосеев <fedoseev.sergey@gmail.com>\n" #~ "Николай Прокошенко <nikolai@prokoschenko.de>\n" #~ "Anton Shestakov <engored@ya.ru>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Перечислите через пробел другие столбцы для отображения" #~ msgid "_Edit and Continue" #~ msgstr "_Изменить и продолжить" #~ msgid "_Search:" #~ msgstr "_Найти:" #~ msgid "Search your library" #~ msgstr "Найти в фонотеке" #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Авторские права {dates}\t{authors}\n" #~ "\n" #~ "Это свободное программное обеспечение; условия его распространения\n" #~ "приведены в исходных кодах.\n" #~ "Распространяется БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ,\n" #~ "ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ\n" #~ "ПОДРАЗУМЕВАЕМЫМИ ГАРАНТИЯМИ КОММЕРЧЕСКОЙ ЦЕННОСТИ\n" #~ "И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ.\n" #~ msgid "Do you wish to continue?" #~ msgstr "Продолжить?" #~ msgid "Confirm playlist removal" #~ msgstr "Подтвердите удаление списка воспроизведения" #~ msgid "Confirm duplicates removal" #~ msgstr "Подтвердите удаление дубликатов" #~ msgid "You are about to change the rating of %d song." #~ msgid_plural "You are about to change the rating of %d songs." #~ msgstr[0] "Будет изменена оценка %d композиции." #~ msgstr[1] "Будет изменена оценка %d композиций." #~ msgstr[2] "Будет изменена оценка %d композиций." #~ msgid "Confirm rating" #~ msgstr "Подтверждение оценки" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r не содержит режимов просмотра." #~ msgid "Total size unknown" #~ msgstr "Общий размер неизвестен" #~ msgid "%r doesn't contain any devices." #~ msgstr "%r не содержит устройств." #~ msgid "%s: Could not import ctypes." #~ msgstr "%s: не удалось импортировать ctypes." #~ msgid "%s: Could not find media-player-info." #~ msgstr "%s: не удалось найти media-player-info." #~ msgid "Couldn't find module %s." #~ msgstr "Не удалось найти модуль %s." #~ msgid "%.1f s" #~ msgstr "%.1f с" #~ msgid "Quod Libet Plugins" #~ msgstr "Расширения Quod Libet" #~ msgid "Color _search terms" #~ msgstr "_Выделять цветом критерий поиска" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Выделять простой поиск синим цветом, расширенный — зелёным, неправильный " #~ "— красным" #~ msgid "_Select" #~ msgstr "_Выбрать" #~ msgid "Separators for splitting tags" #~ msgstr "Символы, по которым будут разделяться теги" #~ msgid "Enable _human title case" #~ msgstr "Соблюдать правила _капитализации" #~ msgid "" #~ "Uses common English rules for title casing, as in \"Dark Night of the Soul" #~ "\"" #~ msgstr "" #~ "Следовать правилам английского языка при изменении регистра букв, " #~ "например «Dark Night of the Soul»" #~ msgid "Display" #~ msgstr "Вид" #~ msgid "Art sources" #~ msgstr "Источники" #~ msgid "Quod Libet Preferences" #~ msgstr "Настройка Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "Не воспроизводившиеся _сегодня" #~ msgid "Not Played in a _Week" #~ msgstr "Не воспроизводившиеся _неделю" #~ msgid "Not Played in a _Month" #~ msgstr "Не воспроизводившиеся _месяц" #~ msgid "B_ottom 40" #~ msgstr "40 _худших" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "40 композиций, которые воспроизводились меньшее количество раз, чем " #~ "остальные (может быть выбрано больше 40, если есть композиции, " #~ "воспроизводившиеся равное количество раз)" #~ msgid "gtk-media-next" #~ msgstr "gtk-media-next" #~ msgid "gtk-media-previous" #~ msgstr "gtk-media-previous" #~ msgid "gtk-media-play" #~ msgstr "gtk-media-play" #~ msgid "gtk-media-pause" #~ msgstr "gtk-media-pause" #~ msgid "Choose New Stations" #~ msgstr "Выберите новые станции" #~ msgid "Add" #~ msgstr "Добавить" #~ msgid "Bitrate" #~ msgstr "Битрейт" #~ msgid "Genre" #~ msgstr "Жанр" #~ msgid "Title" #~ msgstr "Название" #~ msgid "_Stations..." #~ msgstr "_Станции..." #~ msgid "Artist" #~ msgstr "Исполнитель" #~ msgid "Date" #~ msgstr "Дата" #~ msgid "Quod Libet" #~ msgstr "Quod Libet" #~ msgid "Initializing audio backend (%s)" #~ msgstr "Инициализация системы аудиовывода (%s)" #~ msgid "Initializing main library (%s)" #~ msgstr "Инициализация фонотеки (%s)" #~ msgid "Unable to save library" #~ msgstr "Не удалось сохранить фонотеку" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/lt.po����������������������������������������������������������������������������0000644�0001750�0001750�00000265433�12173213426�015345� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������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: # Jonas <jonas.slivka@gmail.com>, 2006, Naglis Jonaitis <njonaitis@gmail.com>, 2011. msgid "" msgstr "" "Project-Id-Version: Quod Libet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2012-12-07 17:22+0300\n" "Last-Translator: Naglis Jonaitis <njonaitis@gmail.com>\n" "Language-Team: Lithuanian (http://www.transifex.net/projects/p/quodlibet/" "team/lt/)\n" "Language: lt\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" "%100<10 || n%100>=20) ? 1 : 2)\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Garso žymių redaktorius" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Redaguoti Jūsų garso failų žymes" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Muzikos grotuvas" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Klausykite, naršykite ar redaguokite savo muzikos kolekciją" #: ../data/quodlibet.desktop.in.h:3 msgid "Play/Pause" msgstr "Groti/Pristabdyti" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "Kita" #: ../data/quodlibet.desktop.in.h:5 msgid "Previous" msgstr "Ankstesnė" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "audio žymių redaktorius" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "aplankas" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Rodyti su_generuotas programines žymes" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Per daug klaidų" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "aprašymas" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Reikšmė" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Žymė" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Garso žymių redaktorius" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "Pašalinti pasikartojančias dainas" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Pašalinti pasikartojančias dainas" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filtruoti pagal žymės reikšmę" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filtruoti pagal žymės reikšmę" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Nėra laiko informacijos" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Rodyti bendrą vartojimo informaciją" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> nėra tinkama vieta." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Dainos nėra albume" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Albumų sąrašo nuostatos" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Rodyti albumų _viršelius" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "Į paiešką įtraukti atlikėju_s" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Albumo vaizdas" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d takelis" msgstr[1] "%d takeliai" msgstr[2] "%d takelių" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d diskas" msgstr[1] "%d diskai" msgstr[2] "%d diskų" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Netaisyklingas šablonas" #: ../quodlibet/browsers/albums.py:180 msgid "_Title" msgstr "Pa_vadinimas" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Atlikėjas" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Data" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 msgid "_Genre" msgstr "_Žanras" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "Į_vertis" #: ../quodlibet/browsers/albums.py:189 msgid "Sort _by..." msgstr "Rikiuoti _pagal..." #: ../quodlibet/browsers/albums.py:210 msgid "_Preferences" msgstr "_Nuostatos" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Albumų sąrašas" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Albumų sąrašas" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Visi albumai" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d albumas" msgstr[1] "%d albumai" msgstr[2] "%d albumų" #: ../quodlibet/browsers/albums.py:725 msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Atnaujinti albumo _viršelį" msgstr[1] "Atnaujinti albumų _viršelius" msgstr[2] "Atnaujinti albumų _viršelius" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Nežinoma" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Naujas kanalas" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Įveskite garso kanalo vietą:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Audio kanalai" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Audio kanalai" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Atsiųsti..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Atsiųsti failus" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Atsiųsti failą" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Negalima pridėti kanalo" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> negali būti pridėta. Serveris gali neveikti arba nurodyta vieta " "nėra garso kanalas." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "Nepavyko įkelti %s. Audio kanalų naršyklė išjungta." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "Dabartinė garso posistemė nepalaiko URL adresų. Audio kanalų naršyklė " "išjungta." #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Bibliotekos naršyklė" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d daina (%(time)s)" msgstr[1] "%(count)d dainos (%(time)s)" msgstr[2] "%(count)d dainų (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, python-format msgid "Unknown %s" msgstr "Nežinoma (-s) %s" #: ../quodlibet/browsers/collection.py:37 #, python-format msgid "Multiple %s Values" msgstr "Kelios lauko %s reikšmės" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Individualus" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "Sulieti" #: ../quodlibet/browsers/collection.py:210 msgid "Album Collection Preferences" msgstr "Albumų sąrašo nuostatos" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "Albumų kolekcija" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "Albumų _kolekcija" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Failų sistema" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Failų sistema" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Negalima kopijuoti dainų" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Failai, kuriuos pasirinkote, negali būti nukopijuoti į kitą dainų sąrašą ar " "eilę." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Pridėti į biblioteką" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Nepalaikomas failo tipas" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Stočių sąrašuose gali būti tik stočių vietos, ne kiti stočių sąrašai ar " "grojaraščiai. Šios vietos negali būti įkeltos:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Negalima pridėti stoties" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Interneto radijas" #: ../quodlibet/browsers/iradio.py:235 msgid "Downloading station list" msgstr "Atsiunčiamas stočių sąrašas" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Nauja stotis" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Įveskite Interneto radijo stočių adresą:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "Elektroninė" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "Hiphopas / Repas" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "Senesnė muzika" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "R&B" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "Japonų" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "Indų" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "Religinė" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "Topai" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "Turkų" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "Regis / „Šokių salės“ regis" #: ../quodlibet/browsers/iradio.py:370 msgid "Latin" msgstr "Lotynų" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "Koledžų radijo stotys" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "Pokalbiai / Žinios" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "Ambientinė" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "Džiazas" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "Klasikinė" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "Pop" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "Alternatyvioji" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "Metalas" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "Kantri" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "Žinios" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "Šlageriai" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "Fank" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "Indie" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "Bliuzas" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "Soul" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "Lounge" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "Pank" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "Regetonas" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "Slavų" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "Graikų" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "Gotikinė" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "Rokas" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Interneto radijas" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Nauja stotis" #: ../quodlibet/browsers/iradio.py:491 msgid "_Update Stations" msgstr "_Atnaujinti stotis" #: ../quodlibet/browsers/iradio.py:516 msgid "All Stations" msgstr "Visos stotys" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "Mėgstamiausios" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "Be kategorijos" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Nerasta stočių" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Jokių Interneto radijo stočių nerasta %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Visos šios stotys jau yra Jūsų bibliotekoje." #: ../quodlibet/browsers/iradio.py:738 msgid "Remove from Favorites" msgstr "Pašalinti iš Mėgstamiausių" #: ../quodlibet/browsers/iradio.py:744 msgid "Add to Favorites" msgstr "Pridėti prie Mėgstamiausių" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d stotis" msgstr[1] "%(count)d stotys" msgstr[2] "%(count)d stočių" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Įrenginio savybės" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Įrenginys:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Neprijungtas" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Prijungimo taškas:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Vardas:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Medijos įrenginiai" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Medijos įrenginiai" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "At_jungti" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "Per_vadinti" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> naudojama, <b>%s</b> prieinama" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> nėra prijungtas." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "Kopijuojama <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Negalima kopijuoti dainos" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Šiai dainai nepakanka laisvos vietos." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> nepavyko nukopijuoti." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Negalima ištrinti dainų" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Nepavyko ištrinti <b>%(song)s</b>." #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "Nepavyko ištrinti „<b>%s</b>“." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Negalima ištrinti dainos" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Nepavyko atjungti <b>%s</b>." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Negalima atjungti įrenginio" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" "Nerasta jokių įrenginių posistemių, įvairialypės terpės naršyklė išjungta." #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Langų naršyklės nuostatos" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Viskas" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Langų naršyklė" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Langų naršyklė" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "P_asirinkti viską" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Importuojamas grojaraštis.\n" "\n" "%(current)d/%(total)d dainų pridėta." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "Ar tikrai norite ištrinti grojaraštį '%s'?" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" "Visa pažymėto grojaraščio informacija bus ištrinta be atkūrimo galimybės." #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "Ar tikrai norite pašalinti %d pasikartojančią dainą?" msgstr[1] "Ar tikrai norite pašalinti %d pasikartojančias dainas?" msgstr[2] "Ar tikrai norite pašalinti %d pasikartojančių dainų?" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "Pasikartojančios dainos bus pašalintos iš grojaraščio '%s'." #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Naujas grojaraštis" #: ../quodlibet/browsers/playlists.py:141 msgid "Enter a name for the new playlist:" msgstr "Įveskite naujo grojaraščio pavadinimą:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Naujas grojaraštis" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s bei dar %(count)d" msgstr[1] "%(title)s bei dar %(count)d" msgstr[2] "%(title)s bei dar %(count)d" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Grojaraščiai" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Grojaraščiai" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Pašalinti iš grojaraščio" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importuoti" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Negalima importuoti grojaraščio" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet gali importuoti tik M3U ir PLS formato grojaraščius." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "Pašalinti pasikartojančias dainas" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Išmaišytai" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Negalima pervadinti grojaraščio" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importuoti grojaraštį" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Išjungti naršyklę" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Išjungti naršyklę" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Paieška bibliotekoje" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "Pa_ieška bibliotekoje" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "Ap_riboti rezultatus" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Nežinomas įrenginys" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "Nepavyko įkelti %s, kuri yra būtina įrenginio palaikymui." #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "„%r“ nėra palaikomas įrenginys." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: Nepavyko rasti %s." #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "%s: Nepavyko rasti %s." #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "Inicijuojama garso posistemė." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "Bandoma '%s'" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "Nepavyko prisijungti prie įrenginio posistemės." #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Įrenginio posistemė inicijuota." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "Ga_rsumo derinimas (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Kopijuoti albumų _viršelius" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Sujungti žymes su keletu _reikšmių" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Pavadinime yra dainos versija" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "Albumo pavadinime yra disko _dalis" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modelis:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Talpa:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Programinė įranga:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "Šalinamas vienišas takelis iPod grotuve" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Negalima išsaugoti iPod duomenų bazės" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Neinicijuotas iPod grotuvas" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Ar norite sukurti tuščią duomenų bazę šiame iPod?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "Nepavyko įkelti python-gpod, iPod palaikymas išjungtas." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "Failo _vardo šablonas:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "Šalinti nenaudojamus vi_ršelius bei aplankus" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Failas egzistuoja" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Perrašyti <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "Nepavyko perskaityti albumo viršelio \"%s\"" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Klaida įkeliant %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Biblioteka" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Tikrinami prijungimo taškai" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Peržvelgiama biblioteka" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Peržvelgiama %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "GStreamer išvestis naudojama grojimui, pvz. 'alsasink device=default'. " "Palikie tuščią, jei norite naudoti numatytąją išvestį." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "_Išvestis:" #: ../quodlibet/player/gstbe.py:75 #, python-format msgid "%.1f seconds" msgstr "%.1f sekundė" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "_Buferizavimo trukmė:" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "Srautas" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "Buferizuojama" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Išvesties klaida" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "GStreamer išvesties inicijuoti nepavyko. Gali būti, jog išvestis " "netaisyklinga arba įrenginys šiuo metu naudojamas. Patikrinkite grotuvo " "nuostatas." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Negalima atverti įvesties failų" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "GStreamer neturi elemento, skirto failų skaitymui. Patikrinkite GStreamer " "įdiegties nuostatas." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "Netaisyklinga GStreamer išvestis, bandoma naudoti numatytąją." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "Nepavyko sukurti GStreamer išvesties." #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "Netaisyklinga garso posistemė" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "Garso posistemė „%r“ neįdiegta." #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Negalima sukurti garso išvesties" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Garso įrenginys %r nerastas. Patikrinkite Xine nuostatas ~/.quodlibet/config " "faile." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet jau paleistas." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Negroja jokia daina." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet nėra paleistas." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Negalima rašyti į %s. Pašalinama." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "muzikos biblioteka ir grotuvas" #: ../quodlibet.py:297 msgid "[option]" msgstr "[pasirinktis]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Parašyti dabar grojamos dainos pavadinimą ir išeiti" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Iškart pradėti groti" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Peršokti į kitą dainą" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" "Peršokti į praėjusią dainą arba groti esamą dainą iš naujo, jei netoli " "pradžios" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Peršokti į praėjusią dainą" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Pradėti grojimą" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Pristabdyti grojimą" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Perjungti grojimo/pauzės režimą" #: ../quodlibet.py:310 msgid "Stop playback" msgstr "Sustabdyti grojimą" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Pagarsinti" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Pritildyti" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Parašyti apie grotuvo būseną" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Slėpti pagrindinį langą" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Rodyti pagrindinį langą" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Perjungti pagrindinio lango matomumą" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Fokusuoti grojantį grotuvą" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Naikinti aktyvius naršyklių filtrus" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Atnaujinti biblioteką" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Parašyti dabartinį grojaraštį" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Parašyti eilės turinį" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "Paleisti be įskiepių" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Išjungti Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Peršokti grojamoje dainoje" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Įjungti ar perjungti grojimo tvarką" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Išjungti/įjungti kartojimo veikseną" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Nustatyti garsumą" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Ieškoti jūsų garsų bibliotekoje" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "užklausa" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Groti failą" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "failo_vardas" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Įvertinti grojamą dainą" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Nustatyti dabartinę naršyklę" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Atverti naują naršyklę" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Rodyti ar slepti eilę" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Rodyti ar slėpti pagrindinį dainų sąrašą" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtruoti pagal atsitiktinę reikšmę" #: ../quodlibet.py:340 msgid "command|tag" msgstr "žymė" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtruoti pagal žymės reikšmę" #: ../quodlibet.py:341 msgid "tag=value" msgstr "žymė=reikšmė" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Pridėti į eilę failą ar užklausą" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "Pridėti į eilę kableliu atskirtus failus" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "failo vardas" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "Spausdinti užklausų rezultatų failų vardus į standartinę išvestį" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Pašalinti iš eilės failą ar užklausą" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Netaisyklingas „%s“ argumentas." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Pamėginkite „%s“ --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Palaikomi formatai: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Garso įrenginys: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Pradžia" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/D" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Laikas" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Žymės vardas" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Žymės" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Nėra laiko informacijos" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Reikšmė:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Išsaugotos reikšmės" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Redaguoti išsaugotas reikšmes..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Dainos" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Rodyti, kiek liko laiko" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "Redaguoti _žymes..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "Auto_matinis" #: ../quodlibet/qltk/controls.py:233 msgid "_Track Mode" msgstr "_Takelio režimas" #: ../quodlibet/qltk/controls.py:234 msgid "_Album Mode" msgstr "_Albumo režimas" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Po šios dainos sustabdyti" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtruoti pagal žymės reikšmę" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Įvyko klaida" #: ../quodlibet/qltk/debugwindow.py:71 #, fuzzy, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Quod Libet programoje aptikta nenumatyta išimtis. Išimties informacija " "išsaugota faile <b>%s</b>, kuri padės mums derinti programą. Prašome " "užpildyti pranešimą apie klaidą tinklalapyje http://code.google.com/p/" "quodlibet/issues/list ir prisegti šį failą arba tekste įterptį jo turinį. " "Šiame faile gali būti šiek tiek informacijos apie Jus ar Jūsų kompiuterį, " "pvz. neseniai klausytų dainų sąrašas. Jei Jums tai nepriimtina, vietoje to " "atsiųskite failą <b>%s</b> su veiksmų, kuriuos atlikote prieš įvykstant " "klaidai, aprašymu.\n" "\n" "Quod Libet dabar gali būti nestabilus. Patartina išeiti iš programos ir " "paleisti ją iš naujo. Jūsų biblioteka bus išsaugota." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Ištrinti failus" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Perkelti į šiukšlinę" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Ar negrįžtamai ištrinti šį failą?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Ar negrįžtamai ištrinti šiuos failus?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s ir %(count)d daugiau..." msgstr[1] "%(title)s ir %(count)d daugiau..." msgstr[2] "%(title)s ir %(count)d daugiau..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "Perkeliama %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Ištrinama %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:105 msgid "Unable to move to trash" msgstr "Nepavyko perkelti į šiukšlinę" #: ../quodlibet/qltk/delete.py:106 #, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Nepavyko perkelti <b>%s</b> į šiukšlinę." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Negalima ištrinti failo" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Nepavyko ištrinti <b>%s</b>." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Atsiuntimai" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Failo vardas" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Dydis" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "Eilėje" #: ../quodlibet/qltk/_editpane.py:82 msgid "Path Patterns" msgstr "Kelio šablonai" #: ../quodlibet/qltk/_editpane.py:83 msgid "Edit saved patterns..." msgstr "Redaguoti išsaugotus šablonus..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "Perž_iūra" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Daugiau pasirinkčių..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "trūksta iš %d dainos" msgstr[1] "trūksta iš %d dainų" msgstr[2] "trūksta iš %d dainų" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "skirtinga tarp %d dainos" msgstr[1] "skirtinga tarp %d dainų" msgstr[2] "skirtinga tarp %d dainų" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Iš_skaidyti į keletą reikšmių" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Išskaidyti diską iš _albumo" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Išskaidyti _versiją iš pavadinimo" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Išskaidyti aranžuotoją iš a_tlikėjo" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Išskaidyti muzikantą iš atlikėjo" #: ../quodlibet/qltk/edittags.py:229 msgid "Split _Performer out of Title" msgstr "Išskaidyti _Muzikantą iš Pavadinimo žymės" #: ../quodlibet/qltk/edittags.py:235 msgid "Split _Originalartist out of Title" msgstr "Išskaidyti _Originalo atlikėją iš Pavadinimo žymės" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Pridėti žymę" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "Žy_mė:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "ql-save" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 msgid "ql-revert" msgstr "ql-revert" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Redaguoti žymes" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Įrašyti" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Negalima pridėti žymės" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Negalima pridėti <b>%s</b>\n" "\n" "Failai, kuriuos pasirinkote, nepalaiko kelių reikšmių redagavimo." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Netaisyklinga žymė" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Netaisyklinga žymė <b>%s</b>\n" "\n" "Failai, kuriuos pasirinkote, nepalaiko šios žymės redagavimo." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Žymė gali būti netiksli" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> buvo pakeista, kol veikė programa. Išsaugojimas neatnaujinus " "bibliotekos gali panaikinti kitus dainos pakeitimus.\n" "\n" "Ar vistiek išsaugoti šią dainą?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Negalima išsaugoti dainos" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Nepavyko išsaugoti <b>%s</b>. Failas gali būti apsaugotas nuo rašymo, " "sugadintas arba neturite teisių jo redaguoti." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Netaisyklinga reikšmė" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Netaisyklinga reikšmė: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Priedai" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d daina" msgstr[1] "%d dainos" msgstr[2] "%d dainų" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso nuostatos" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "At_skirti ties:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Rodyti su_generuotas programines žymes" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Žymių redagavimas" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Aplankai" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Naujas aplankas..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Pasirinkti visus poaplankius" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Naujas aplankas" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Įveskite naujo aplanko vardą:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Negalima sukurti aplanko" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Negalima ištrinti aplanko" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "atliko %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Diskas %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Takelis %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Pridėti į grojaraštį" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Redaguoti vaizdą..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "_Redaguoti žymes" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Negrojama" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "Valyti _klaidas" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Nepasirinkta jokių dainų." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Nėra dainų" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informacija" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Dainos žodžiai" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Klaidos" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "atlikėjas" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "atlikėjai" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "muzikantai" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Niekada" #: ../quodlibet/qltk/information.py:243 #, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%(n)d kartą" msgstr[1] "%(n)d kartus" msgstr[2] "%(n)d kartų" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "pridėta" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "paskutinį kartą grota" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "grota" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "praleista" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "įvertis" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "trukmė" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "failo dydis" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "paskutinį kartą pakeista" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitų dažnis" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Failas" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d pasirinkta" msgstr[1] "%d pasirinkta" msgstr[2] "%d pasirinkta" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Prodiusavo %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "muzikantas" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Takelis neprieinamas" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Takelių sąrašas" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d daina be jokio albumo" msgstr[1] "%d dainos be jokio albumo" msgstr[2] "%d dainų be jokio albumo" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Pasirinkta diskografija" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d daina be jokio atlikėjo" msgstr[1] "%d dainos be jokio atlikėjo" msgstr[2] "%d dainų be jokio atlikėjo" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "albumai" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Visa trukmė:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Visas dydis:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Failų" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Išvesties žurnalas" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Atsisiųsti" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Nerasta dainos žodžių šiai dainai." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Ieškoma dainos žodžių..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Negalima atsiųsti dainos žodžių." #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "Ar tikrai norite pašalinti %d pasikartojančią dainą?" #: ../quodlibet/qltk/maskedbox.py:18 #, fuzzy msgid "The selected songs will be removed from the library." msgstr "Pasikartojančios dainos bus pašalintos iš grojaraščio '%s'." #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d stotis" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Atšaukti žymių pakeitimus?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Žymės buvo pakeistos, bet neišsaugotos. Išsaugoti šiuos failus, atkurti " "buvusias reikšmes ar atsisakyti pakeitimų?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "Aktyvios užduotys" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "%d užduotys vykdomos" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "Nežinoma" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "Iš eilės" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "Iš _eilės" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Išmaišytai" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Svertinai" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Svertinai" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Viena daina" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Viena daina" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Priedų klaidos" #: ../quodlibet/qltk/pluginwin.py:80 msgid "Plugins" msgstr "Priedai" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Rodyti klaidas" #: ../quodlibet/qltk/pluginwin.py:259 msgid "Version:" msgstr "Versija:" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Įjungta" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Išjungta" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Be kategorijos" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Nerasta priedų." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Diskas" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Takelio nr." #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "grupavimas" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bumas" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "Failo _vardas" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "T_rukmė" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Dainų sąrašas" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Automatiškai peršokti prie grojamos dainos" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "Kai pasikeičia grojama daina, perškoti ties ja dainų sąraše" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "Elgsena" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Kita:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Redaguoti vaizdą..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Matomi stulpeliai" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Į paiešką įtraukti atlikėju_s" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Failo varde yra _aplanko vardas" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Nuostatos" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Naršyklės" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Bendras filtras:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "Taikyti šią užklausą kartu su kitomis" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Ieško_ti bevedant užklausą" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "Rodyti paieškos rezultatus vartotojui baigus įvesti užklausą." #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 msgid "heading|Search" msgstr "heading|Paieška" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Patvirtinti su_dėtinius įverčius" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "Prašyti patvirtinimo prieš pakeičiant kelių dainų įvertį vienu metu" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Įjungti vien_o paspaudimo įverčius" #: ../quodlibet/qltk/prefs.py:241 msgid "Enable rating by clicking on the rating column in the song list" msgstr "Įjungti įverčių keitimą spragtelėjus įverčio stulpelyje dainų sąraše" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Įverčiai" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "Apvalinti miniatiūrų kamp_us" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "Apvalinti albumų viršelių miniatiūrų paveikslėlių kampus. Gali tekti " "paleisti programą iš naujo, kad pakeitimai įsigaliotų." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "Pageidautina naudoti į_terptinius albumų viršelius" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" "Pasirinkite, jei norite, kad pirmenybė būtų teikiama į audio failus " "įterptiems albumų viršeliams (kai prieinama)" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "_Priverstinai naudotino paveikslėlio failo vardas:" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" "Naudotino albumo viršelio paveikslėlio failo vardas (esant keliems galimiems " "variantams)" #: ../quodlibet/qltk/prefs.py:283 msgid "Album Art" msgstr "Albumų viršeliai" #: ../quodlibet/qltk/prefs.py:301 msgid "Playback" msgstr "Grojimas" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "Išvesties sąranka" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "Jei Replay Gain garso derinimo informacija dainai neprieinama, pakoreguoti " "garsumo lygį šia reikšme" #: ../quodlibet/qltk/prefs.py:320 msgid "_Fall-back gain (dB):" msgstr "_Numatytasis derinimas (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Pakoreguoti garsumo lygį visoms dainoms šia reikšme, kol neatsiras iškraipymų" #: ../quodlibet/qltk/prefs.py:334 msgid "_Pre-amp gain (dB):" msgstr "_Pirminis derinimas (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "Įjungti Replay Gain garso d_erinimą" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Garsumo derinimas (Replay Gain)" #: ../quodlibet/qltk/prefs.py:387 msgid "Tags" msgstr "Žymės" #: ../quodlibet/qltk/prefs.py:392 msgid "Auto-save tag changes" msgstr "Automatiškai išsaugoti žymių pakeitimus" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "Redaguojant keletą failų išsaugoti žymių pakeitimus be patvirtinimo" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" "Prieiti prie visų žymių, įskaitant kompiuterio sugeneruotas, pvz. " "MusicBrainz ar ReplayGain žymes" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" "Skyriklių, naudojamų žymių reikšmių išskaidymui, sąrašas. Skyrikliai " "atskirti tarpais" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Saugoti įverčius bei grojimo _kartų vertes" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_El. paštas:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" "Įverčiai bei grojimo kartų vertės bus susietos su šiuo el. pašto adresu" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Atnaujinti stotis" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "At_naujinti biblioteką paleidus programą" #: ../quodlibet/qltk/prefs.py:501 msgid "Refresh Library" msgstr "Atnaujinti biblioteką" #: ../quodlibet/qltk/prefs.py:509 msgid "Scan Directories" msgstr "Peržvelgiami aplankai" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Nėra dainų" #: ../quodlibet/qltk/prefs.py:524 msgid "Preferences" msgstr "Nuostatos" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Savybės" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Eilė" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Iš eilės pašalinti visas dainas" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Atsitiktine tvarka" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Tvarka:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Kartoti" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Iš naujo pradėti grojaraštį jam pasibaigus" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Negalima pridėti dainų" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> naudoja nepalaikomą protokolą." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Muzika" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Pridėti aplanką..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Pridėti failą..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Pridėti vietą..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Atverti naują naršyklę" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtrai" #: ../quodlibet/qltk/quodlibetwindow.py:455 msgid "Recently _Played" msgstr "_Neseniai grota" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "Neseniai _pridėta" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "40 _geriausių" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Valdymas" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Peršokti ties grojama daina" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Rodymas" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Pagalba" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "Išvesties _žurnalas" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "Suke_lta klaida" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "Pagalba Internete" #: ../quodlibet/qltk/quodlibetwindow.py:502 msgid "Search Help" msgstr "Paieškos bibliotekoje pagalba" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "At_naujinti biblioteką" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Iš naujo įkelti _biblioteką" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtras _žanrui" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtras _atlikėjui" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "FIltras a_lbumui" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Atsitiktinis žanras" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Atsitiktinis _atlikėjas" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Atsitiktinis a_lbumas" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Dainų _sąrašas" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Ieškoti pasikeitimų bibliotekoje" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Iš naujo įkelti dainas į biblioteką (tai gali užtrukti)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "40 dažniausiai grotų dainų (gali būti parinkta daugiau nei 40, jei kai " "kurios bus grotos tiek pat kartų)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Pridėti vietą" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Įveskite garso failo vietą:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Negalima pridėti vietos" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> nėra tinkama vieta." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Pridėti muziką" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Stebėti šį aplanką dėl naujų dainų" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s negali būti pridėta į Jūsų biblioteką.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Negalima pridėti dainos" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "Ar tikrai norite pakeisti visų %d dainų įvertį?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "Pažymėtų dainų įvertis bus pakeistas į '%s'" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Gauta netaisyklinga komanda %r." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "Klaida vykdant komandą %r, sukėlėjas: %r." #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Nežinoma naršyklė %r." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Pakeisti tarpus „_“ simboliu" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Pašalinti su _Windows nesuderinamus simbolius" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Pašalinti _diakritinius ženklus" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Pašalinti ne _ASCII simbolius" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "Naudoti tik _mažąsias raides" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Pervadinti failus" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Naujas vardas" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "Ignoruoti vis_as klaidas" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Tęsti" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Negalima pervadinti failo" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Pervadinimas iš <b>%s</b> į <b>%s</b> nepavyko. Greičiausiai paskirties " "failas jau egzistuoja arba neturite teisių sukurti naują ar pašalinti seną." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Kelias neabsoliutus" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Šablone\n" "\t<b>%s</b>\n" "yra „/“, bet jis neprasideda šaknimi. Siekdami išvengti netaisyklingų " "aplankų, nurodykite kelyje šaknį jį pradėdami „/“ arba „~/“." #: ../quodlibet/qltk/scanbox.py:35 msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Dainos, esančios šiuose aplankuose, bus pridėtos į Jūsų biblioteką jos " "atnaujinimo metu" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Pasirinkti aplankus" #: ../quodlibet/qltk/searchbar.py:46 msgid "Saved Searches" msgstr "Išsaugotos paieškos reikšmės" #: ../quodlibet/qltk/searchbar.py:47 msgid "Edit saved searches..." msgstr "Redaguoti išsaugotas paieškos reikšmes..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Ieškoti" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Riba:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Svoris" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtras laukui „%s“" #: ../quodlibet/qltk/songlist.py:1017 msgid "All _Headers" msgstr "_Visos antraštės" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_Takelio antraštės" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Albumo antraštės" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "A_tlikėjų antraštės" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Dat_os antraštės" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_Failo antraštės" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "_Produkcijos antraštės" #: ../quodlibet/qltk/songlist.py:1037 msgid "Custom _Sort..." msgstr "Individualizuotas _rikiavimas..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Individualizuoti antraštes..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Pridėti į _eilę" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Kopijuoti į įrenginį" #: ../quodlibet/qltk/songsmenu.py:259 msgid "_Remove from library" msgstr "_Pašalinti iš bibliotekos" #: ../quodlibet/qltk/sortdialog.py:19 msgid "Track Headers" msgstr "_Takelio antraštės" #: ../quodlibet/qltk/sortdialog.py:22 msgid "People Headers" msgstr "Atlikėjų antraštės" #: ../quodlibet/qltk/sortdialog.py:25 msgid "Album Headers" msgstr "Albumo antraštės" #: ../quodlibet/qltk/sortdialog.py:28 msgid "Date Headers" msgstr "Datos antraštės" #: ../quodlibet/qltk/sortdialog.py:31 msgid "File Headers" msgstr "Failo antraštės" #: ../quodlibet/qltk/sortdialog.py:33 msgid "Production Headers" msgstr "Produkcijos antraštės" #: ../quodlibet/qltk/sortdialog.py:67 msgid "Tag:" msgstr "Žymė:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "Didėjančia tvarka" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "Mažėjančia tvarka" #: ../quodlibet/qltk/sortdialog.py:117 msgid "Custom sort" msgstr "Individualizuotas rikiavimas" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Pakeisti simbolius „_“ tarpo simboliais" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "Žymes pradėti iš _didžiosios raidės" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Išskaidyti į keletą _reikšmių" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Žymės pagal kelią" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Žymės pakeičia jau esamas" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Žymės pridedamos prie esamų" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Šablonas\n" "\t<b>%s</b>\n" "yra netaisyklingas. Greičiausiai jame yra kelios tos pačios žymės ar " "netvarkingi skliausteliai (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Netaisyklingos žymės" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Netaisyklingos žymės <b>%s</b>\n" "\n" "Failai, kuriuos pasirinkote, nepalaiko šių žymų redagavimo." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Negalima redaguoti dainos" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Šablonas, kurį įvedėte, netaisyklingas. Įsitikinkite, kad įvedėte < ir " "> kaip \\< ir \\> ir kad Jūsų žymės suderintos.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Redaguoti rodomą informaciją" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Per daug klaidų" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Stabdomas grojimas, nes įvyko %d klaidos iš eilės." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Takelių numeriai" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Pradėti _nuo:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "Iš _viso takelių:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Takelis" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "ir %d daugiau..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Išsaugomos dainos, kurias pakeitėte." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d dainų išsaugota\n" "(%(remaining)s liko)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d iš %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Išvalyti paiešką" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Grojaraštis vardu %s jau egzistuoja." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "Der:" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "Derinimas" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "Įsp:" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Įspėjimai" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "Kl:" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Rodyti bendrą vartojimo informaciją" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Rodyti versijos numerį ir autorių teises" #: ../quodlibet/util/__init__.py:142 #, python-format msgid "Usage: %s %s\n" msgstr "Naudojimas: %s %s\n" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[pasirinktys]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Pasirinkimas „%r“ neatpažintas." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "Pasirinkimas „%r“ reikalauja argumento." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "„%r“ nėra unikalus priešdėlis." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Netaisyklinga koduotė]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "nereikia" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "Bendrasis" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "Nėra prieinamo vedamo žurnalo." #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Data turi būti įvesta tokiais formatais: „YYYY“, „YYYY-MM-DD“ arba „YYYY-MM-" "DD HH:MM:SS“." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "ReplayGain garso pokyčiai turi būti įvesti „x.yy dB“ formatu." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "ReplayGain garso maksimumai turi būti įvesti „x.yy“ formatu." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz ID turi būti UUID formato." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz leidimo statusas privalo būti 'official', 'promotional' arba " "'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "Kalba privalo būti ISO 639-2 trijų raidžių kodas" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "albumas" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "aranžuotojas" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "autorius" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "kompozitorius" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "dirigentas" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "kontaktai" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "autorių teisės" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "data" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "aprašymas" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "žanras" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "grupavimas" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "kalba" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licencija" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "vieta" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "dainos ž. autorius" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organizacija" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "pavadinimas" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "versija" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "tinklalapis" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "albumo atlikėjas" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "disko dalis" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "diskas" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "takelio nr." #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "leidinio ID" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "originalo išleidimo data" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "originalus albumas" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "originalus atlikėjas" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "įrašymo data" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "išleidimo šalis" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "albumo atlikėjas (rikiuojamas)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "atlikėjas (rikiuojamas)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "albumas (rikiuojamas)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "muzikantas (rikiuojamas)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "muzikantai (rikiuojamas)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "„MusicBrainz“ takelio ID" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "„MusicBrainz“ leidimo ID" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "„MusicBrainz“ atlikėjo ID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "„MusicBrainz“ albumo atlikėjo ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "„MusicBrainz“ TRM ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "„MusicIP“ PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "„MusicBrainz“ albumo statusas" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "„MusicBrainz“ albumo tipas" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "takelio garso lygis" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "takelio maks. garsumo lygis" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "albumo garso lygis" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "albumo maks. garsumo lygis" #: ../quodlibet/util/tags.py:88 msgid "reference loudness" msgstr "garsumo etalonas" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "diskai" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "takeliai" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "paskutinį kartą grota" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "pilnas vardas" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "prijungimo taškas" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "klaidos" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "atlikėjai" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "metai" #: ../quodlibet/util/tags.py:111 msgid "original release year" msgstr "originalo išleidimo metai" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "žymė" #: ../quodlibet/util/tags.py:115 msgid "file format" msgstr "failo formatas" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "dainos ž. autoriai" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "aranžuotojai" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "kompozitoriai" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "dirigentai" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "autoriai" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d sekundė" msgstr[1] "%d sekundės" msgstr[2] "%d sekundžių" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minutė" msgstr[1] "%d minutės" msgstr[2] "%d minučių" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d valanda" msgstr[1] "%d valandos" msgstr[2] "%d valandų" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d diena" msgstr[1] "%d dienos" msgstr[2] "%d dienų" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d metai" msgstr[1] "%d metai" msgstr[2] "%d metų" #~ msgid "_Browse Library" #~ msgstr "_Naršyti bibliotekoje" #~ msgid "No eject command found." #~ msgstr "Nerasta atjungimo komanda." #~ msgid "Unable to start web browser" #~ msgstr "Negalima įkelti Interneto naršyklės" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Nerasta Interneto naršyklė. Nustatykite $BROWSER kintamąjį arba " #~ "įsitikinkite, ar /usr/bin/sensible-browser egzistuoja." #~ msgid "" #~ "Cannot save library contents to %s (it's a directory). Please remove it " #~ "and try again." #~ msgstr "" #~ "Negalima išsaugoti bibliotekos turinio į '%s' (tai aplankas). Pašalinkite " #~ "jį ir bandykite dar kartą." #~ msgid "Library Error" #~ msgstr "Bibliotekos klaida" #~ msgid "_Output device:" #~ msgstr "Išvesties įren_ginys:" #~ msgid "Could not link GStreamer pipeline: '%s'" #~ msgstr "Nepavyko susieti GStreamer išvesties: '%s'" #~ msgid "Default" #~ msgstr "Numatytasis" #~ msgid "translator-credits" #~ msgstr "" #~ "Jonas Slivka <jonas.slivka@gmail.com>,\n" #~ "Naglis Jonaitis <njonaitis@gmail.com>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Rodyti kitus stulpelius, atskirtus tarpais" #~ msgid "_Edit and Continue" #~ msgstr "R_edaguoti ir tęsti" #~ msgid "_Search:" #~ msgstr "_Paieška:" #~ msgid "Search your library" #~ msgstr "Ieškoti bibliotekoje" #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Autorinės teisės {dates}\t{authors}\n" #~ "\n" #~ "Tai nemokama programinė įranga, kopijavimo sąlygų ieškokite išeities " #~ "tekstuose. Nesuteikiama JOKIŲ \n" #~ "garantijų.\n" #, fuzzy #~ msgid "You are about to change the rating of %d song." #~ msgid_plural "You are about to change the rating of %d songs." #~ msgstr[0] "" #~ "Ketinate pakeisti %d dainų reitingą.\n" #~ "Ar norite tęsti?" #~ msgstr[1] "" #~ "Ketinate pakeisti %d dainų reitingą.\n" #~ "Ar norite tęsti?" #~ msgstr[2] "" #~ "Ketinate pakeisti %d dainų reitingą.\n" #~ "Ar norite tęsti?" #~ msgid "Confirm rating" #~ msgstr "Patvirtinti reitingą" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r nėra naršyklių." #~ msgid "Total size unknown" #~ msgstr "Visas dydis nežinomas" #~ msgid "%r doesn't contain any devices." #~ msgstr "%r nėra jokių įrenginių." #~ msgid "%s: Could not import ctypes." #~ msgstr "%s: Nepavyko įkelti ctypes." #~ msgid "%s: Could not find media-player-info." #~ msgstr "%s: Nepavyko rasti media-player-info." #, fuzzy #~ msgid "Couldn't find module %s." #~ msgstr "%s: Nepavyko rasti libudev." #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet priedai" #~ msgid "Color _search terms" #~ msgstr "Nus_palvinti paieškos žodžius" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Rodyti paprastą paiešką mėlynai, sudėtingesnę žaliai ir netaisyklingą - " #~ "raudonai" #~ msgid "_Select" #~ msgstr "_Pasirinkti" #~ msgid "Separators for splitting tags" #~ msgstr "Atskyrikliai žymėms atskirti" #~ msgid "Enable _human title case" #~ msgstr "Įjungti žmonėms tinkamą pavadinimų tvarkymą" #~ msgid "" #~ "Uses common English rules for title casing, as in \"Dark Night of the Soul" #~ "\"" #~ msgstr "" #~ "Naudoti bendrines anglų kalbos taisykles pavadinimams, pvz. \"Dark Night " #~ "of the Soul\"" #, fuzzy #~ msgid "Display" #~ msgstr "Redaguoti rodymą" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet pasirinktys" #~ msgid "Not Played To_day" #~ msgstr "Šiandien ne_grota" #~ msgid "Not Played in a _Week" #~ msgstr "_Savaitę negrota" #~ msgid "Not Played in a _Month" #~ msgstr "_Mėnesį negrota" #~ msgid "B_ottom 40" #~ msgstr "40 _blogiausių" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "40 rečiausiai grotų dainų (gali būti parinkta daugiau nei 40, jei kai " #~ "kurių bus grota tiek pat kartų)" #~ msgid "gtk-media-next" #~ msgstr "Kita" #~ msgid "gtk-media-previous" #~ msgstr "Ankstesnė" #~ msgid "gtk-media-play" #~ msgstr "gtk-media-play" #~ msgid "gtk-media-pause" #~ msgstr "gtk-media-pause" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #~ msgid "Artist" #~ msgstr "Atlikėjas" #~ msgid "Date" #~ msgstr "Data" #~ msgid "Choose New Stations" #~ msgstr "Pasirinkite naujas stotis" #~ msgid "Add" #~ msgstr "Pridėti" #~ msgid "Bitrate" #~ msgstr "Bitų dažnis" #~ msgid "_Stations..." #~ msgstr "_Stotys..." #~ msgid "Quod Libet" #~ msgstr "Quod Libet" #~ msgid "Initializing audio backend (%s)" #~ msgstr "Inicijuojama garso posistemė (%s)" #~ msgid "Initializing main library (%s)" #~ msgstr "Inicijuojama pagrindinė biblioteka (%s)" #~ msgid "Unable to save library" #~ msgstr "Negalima išsaugoti bibliotekos" #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Negalima išvesti klaidos žurnalo, Jums labai nepasisekė." �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/it.po����������������������������������������������������������������������������0000644�0001750�0001750�00000266667�12173213426�015354� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������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. # felipe <filippo@email.it>, 2005. msgid "" msgstr "" "Project-Id-Version: Quod Libet 0.22\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:34+0100\n" "Last-Translator: Luca Baraldi <luca.baraldi+quodlibet@gmail.com>\n" "Language-Team: Italian\n" "Language: it\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-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Editor di tag audio" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Modifica i tag dei file audio." #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Riproduttore" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Ascolta, sfoglia o modifica la collezione audio" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Player" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Anteprima" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "un editor di tag audio" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "cartella" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Mostra _commenti" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Troppo errori" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "descrizione" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Valore" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Tag" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Editor di tag audio" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "_Rimuovi Stazione" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "_Rimuovi Stazione" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filtro su un tag" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filtro su un tag" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Nessuna informazione sul tempo" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Mostra brevi informazioni sull'utilizzo" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> non è una posizione valida" #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Brani non in un album" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Preferenze della lista album" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Mostra le _Cover degli album" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "La ricerca inline include le persone" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Mostra Album" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d traccia" msgstr[1] "%d tracce" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disco" msgstr[1] "%d dischi" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Modello non valido" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Titolo" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artista" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Data" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "Genere" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Giudizio" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Ordina _per:" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Preferenze" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Lista degli Album" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "Lista degli _Album" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Tutti gli Album" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d album" msgstr[1] "%d album" #: ../quodlibet/browsers/albums.py:725 msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Ricarica le _Copertine dell'album" msgstr[1] "Ricarica le _Copertine degli album" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Sconosciuto" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Nuovo Feed" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Inserire la posizione di un feed audio." #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Feed Audio" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "Feed _Audio" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Scarica..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Scarica i file" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Scarica il file" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Impossibile aggiungere il feed" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> non è stato aggiunto. Il server potrebbe essere irraggiungibile, o " "potrebbe non contenere un feed audio." #: ../quodlibet/browsers/audiofeeds.py:495 #, fuzzy, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" "Non posso importare il python-feedparser, il navigatore degli Audio Feed è " "disabilitato." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "L'attuale audio backend non supporta gli URL, il navigatore degli Audio Feed " "è disabilitato." #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Esplora la Libreria" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d brano (%(time)s)" msgstr[1] "%(count)d brani (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Sconosciuto" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Separa in valori _multipli" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Personalizzato" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Preferenze della lista album" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Computer" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Computer" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Impossibile copiare i brani" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "I Brani selezionati non possono essere copiati ad altre liste o alla coda" #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Aggiungi alla Libreria" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Tipo di file non supportato" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Le liste di stazioni possono contenere solo indirizzi di stazioni, non altre " "liste di stazioni o scalette. I seguenti indirizzi non sono stati aggiunti.\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Impossibile aggiungere la stazione" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Internet Radio" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Scarica i file" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Nuova Stazione" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Inserire l'indirizzo di una stazione Internet radio " #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "giudizio" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Internet Radio" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Nuova Stazione" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Nuova Stazione" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Nuova Stazione" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 #, fuzzy msgid "No Category" msgstr "Nessuna categoria" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Nessuna stazione trovata." #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Nessuna stazione radio in %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Tutte le stazioni elencate sono già nella libreria." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Rimuovi dalla Scaletta" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "Metti in _Scaletta" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d stazione" msgstr[1] "%(count)d stazioni" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Proprietà del dispositivo" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Dispositivo:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Non montato" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Punto di mount:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Nome:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Dispositivo multimediale" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "Dispositivo_Multimediale" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Espelli" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Rinomina" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> utilizzato, <b>%s</b> disponibile" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> non è connesso." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "Sto copiando <b>%(song)s</b>." #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Impossibile copiare il brano" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Non c'è abbastanza spazio libero per questa canzone." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> non può essere copiato." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Impossibile eliminare i brani" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Elimino <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> non può essere eliminato." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Impossibile eliminare il brano" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Esplusione di <b>%s</b>fallita." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Impossibile espellere il dispositivo" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" "Nessun dispositivo di backend, il navigatore dei dispositivi multimediali è " "disabilitato." #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Preferenze del catalogo con filtri" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Tutti" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Catalogo con Filtri" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Catalogo con Filtri" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "_Seleziona Tutto" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Sto importando la scaletta.\n" "\n" "%(current)d/%(total)d brani aggiunti." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Nuova Scaletta" #: ../quodlibet/browsers/playlists.py:141 msgid "Enter a name for the new playlist:" msgstr "Inserisci un nome per la nuova cartella:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Nuova Scaletta" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s e %(count)d altro" msgstr[1] "%(title)s e altri %(count)d" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Scalette" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Scalette" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Rimuovi dalla Scaletta" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importa" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Impossibile importare la scaletta" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "I formati supportati per le scalette sono solo M3U e PLS" #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Casuale" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Impossibile rinominare la scaletta" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importa una scaletta" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Disattiva il Catalogo" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Disattiva il Catalogo" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Cerca nella Libreria" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Cerca nella Libreria" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Limita i Risultati" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Dispositivo sconosciuto" #: ../quodlibet/devices/__init__.py:19 #, fuzzy, python-format msgid "Could not import %s, which is needed for device support." msgstr "" "Non riesco a imporare dbus-python, che è necessario per leggere il " "dispositivo." #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "'%r' non è un dispositivo supportato." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: Non trovo libudev." #: ../quodlibet/devices/__init__.py:212 #, fuzzy, python-format msgid "%s: Could not find %s." msgstr "%s: Non trovo libudev." #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "Annullo l'inizializzazione del dispositivo di backend." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "Provo '%s'" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "Non riesco a connettermi al backend del dispositivo" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Backend del dispositivo inizializzato" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Volume (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Copia le copertine degli _album" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Combina i tag con valori _multipli" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Il Titolo include la _versione" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "L'album include il sottotitolo del _disco" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modello:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Capienza:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "Sto rimuovendo le tracce iPod orfane" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Non riesco a salvare il database iPod" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Inizializzazione di iPod annullata" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Vuoi creare un database vuoto su questo iPod?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "Non posso importare python-gpod, il supporto a iPod è disabilitato." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "Schema per il nome del file" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Rimuovi le immagini e le directory inutilizzate" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Il file esiste" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Sovrascrivere <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Errore mentre carico %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Libreria" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Controllo i punti di mount" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Scansiono la libreria" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Scansiono %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "GStreamer output pipeline utilizzato per la riproduzione, esempio 'alsasink " "device=default'. Lascia vuoto per il default pipeline." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "_Output pipeline:" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d secondo" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Output Error" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "Il GStreamer output pipeline non può essere inizializzato. Il pipeline può " "essere invalido, o il dispositivo può essere in uso. Controlla le preferenze " "del lettore multimediale." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Impossibile aprire i file di input" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "GStreamer non ha l'elemento per gestire i file in lettura. Controlla i " "settaggi della tua installazione di GStreamer." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "GStreamer output pipeline invalido, provo con il default." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "Audio backend invalido" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "L'audio backend %r non è installato." #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Impossibile creare l'uscita audio." #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Il dispositivo audio %r non è stato trovato. Controlla le tue configurazioni " "di Xine in ~/.quodlibet/config." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet è già in esecuzione." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Nessun brano è attualmente in esecuzione" #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet non è in esecuzione" #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Impossibile scrivere su %s. Rimosso." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "una libreria musicale e player" #: ../quodlibet.py:297 msgid "[option]" msgstr "[opzione]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Mostra il brano in esecuzione ed esci" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Comincia a riprodurre immediatamente" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Salta al prossimo brano" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Salta al precedente brano" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Avvia l'esecuzione" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Metti in pausa" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Commuta play/pausa" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Avvia l'esecuzione" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Aumenta il volume" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Abbassa il volume" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Mostra lo stato attuale" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Nascondi la finestra" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Mostra la finestra" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Commuta la visibilità della finestra" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Dai il focus al riproduttore" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Rimuovi i filtri attivi dal navigatore" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Aggiorna e ricarica la libreria" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Stampa la scaletta attuale" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Stampa il contenuto della coda" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Chiudi Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Cerca nel brano in esecuzione" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Imposta o commuta l'ordine d'esecuzione" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Commuta o disattiva la ripetizione" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Imposta il volume" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Cerca nella libreria audio" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "ricerca" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Riproduci un brano" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "nome del file" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Dai un giudizio al brano in esecuzione" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Imposta il browser" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Apri un nuovo browser" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Mostra o nascondi la coda" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Mostra o nascondi la lista di brani" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtro su un valore casuale" #: ../quodlibet.py:340 msgid "command|tag" msgstr "tag" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtro su un tag" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tag=valore" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Codifica un file o ricerca" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "Accoda i file separati dalla virgola" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "nome del file" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "Stampa i nomi dei file ottenuti dalla query sullo standard output" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Rimuovi dalla coda un file o una ricerca" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Argomento non valido per '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Prova %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Formati supportati: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Dispositivo audio: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Inizio" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/D" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Tempo" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Nome del Segnalibro" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Segnalibri" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Nessuna informazione sul tempo" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Valore:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Valori salvati" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Modifica i valori salvati..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Brani" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Mostra il tempo rimanente" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Modifica Segnalibri..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "Auto_matic" #: ../quodlibet/qltk/controls.py:233 msgid "_Track Mode" msgstr "Modalità _Traccia" #: ../quodlibet/qltk/controls.py:234 msgid "_Album Mode" msgstr "Modalità _Album" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Ferma dopo questo brano" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtro su un tag" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "E' avvenuto un errore" #: ../quodlibet/qltk/debugwindow.py:71 #, fuzzy, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Un eccezione è occorsa in Quod Libet. E' stato salvato un file di dump in <b>" "%s</b> che ci potrebbe aiutare a debuggare il crash. Per cortesia apri un " "nuovo problema su http://code.google.com/p/quodlibet/issues/list ed allega " "questo file o includi il suo contenuto. Questo file può contenere alcune " "informazioni di identificazione circa te o il tuo sistema, come la lista dei " "file recentemente ascoltati. Se questo è inaccettabile, invia <b>%s</b> con " "una descrizione di quello che stavi facendo.\n" "\n" "Quod Libet può ora essere instabile. Si raccomanda di chiuderlo e " "riavviarlo. La tua libreria sarà salvata." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Elimina i File" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Sposta nel Cestino" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Eliminare permanentemente questo file?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Eliminare permanentemente questi file?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s e altri %(count)d..." msgstr[1] "%(title)s e altri %(count)d..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "Sto spostando %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Sto cancellando %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:105 msgid "Unable to move to trash" msgstr "Impossibile sposare nel cestino" #: ../quodlibet/qltk/delete.py:106 #, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Non riesco a spostare <b>%s</b> nel cestino." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Impossibile eliminare il file" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Non è stato possibile eliminare <b>%s</b>." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Scaricati" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Nome del file" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Dimensioni" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "Accodato" #: ../quodlibet/qltk/_editpane.py:82 msgid "Path Patterns" msgstr "Modello del Percorso" #: ../quodlibet/qltk/_editpane.py:83 msgid "Edit saved patterns..." msgstr "Modifica i modelli salvati..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Anteprima" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Più opzioni.." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "mancante da %d brano" msgstr[1] "mancante da %d brani" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "differente in %d brano" msgstr[1] "differente in %d brani" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Separa in valori _multipli" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Separa i dischi dell'_album" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Separa la _Versione dal titolo" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Separa l'arrangiatore dall'ar_tista" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Separa l'e_secutore dall'artista" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Separa l'e_secutore dall'artista" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Separa la _Versione dal titolo" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Aggiungi un Tag" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Tag:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "ql-remove" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Modifica Tag" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Scrivi" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Impossibile aggiungere tag" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Impossibile aggiungere <b>%s</b>\n" "\n" "I file attualmente selezionati non supportano valori multipli." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Tag non valido" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Tag <b>%s</b> non valido\n" "\n" "I file attualmente selezionati non supportano la modifica su questo tag." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Il tag potrebbe non essere accurato" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> è cambiato mentre il programma era in esecuzione. Salvare senza " "aggiornare la libreria potrebbe sovrascrivere altri cambiamenti nel brano.\n" "\n" "Salvare il brano comunque?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Impossibile salvare il brano" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Salvataggio di <b>%s</b> fallito. Il file potrebbe essere in sola lettura " "oppure non si hanno sufficienti permessi per modificarlo." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Valore non valido" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Valore non valido: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Plugin" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d brano" msgstr[1] "%d brani" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Preferenze di Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Dividi _a:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Mostra _commenti" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Modifica dei Tag" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Cartelle" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Nuova Cartella..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Seleziona Tutte le Sottocartelle" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Nuova Cartella" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Inserire un nome per la nuova cartella:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Impossibile creare la cartella" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Impossibile eliminare la cartella" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "di %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Disco %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Traccia %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "Metti in _Scaletta" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Modifica Display..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Modifica _Tag" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Non in esecuzione" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Pulisci gli Errori" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Nessun brano selezionato." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Nessun Brano" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informazioni" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Testi" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Errori" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artista" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artisti" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "esecutori" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Mai" #: ../quodlibet/qltk/information.py:243 #, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%(n)d volta" msgstr[1] "%(n)d volte" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "aggiunto" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "ultimo passaggio" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "riproduzioni" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "saltato" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "giudizio" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "lunghezza" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "dimensioni" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "modificato" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitrate" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "File" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d selezionato" msgstr[1] "%d selezionati" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Prodotto da %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "esecutore" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Traccia non disponibile" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Lista delle Tracce" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d brano senza album" msgstr[1] "%d brani senza album" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Disografia Selezionata" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d brano senza artista" msgstr[1] "%d brani senza artista" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "album" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Lunghezza totale:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Dimensioni totali:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "File" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Output Log" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "S_carica" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Nessun testo trovato per questo brano." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Ricerca di testo..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Impossibile scaricare i testi" #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "" "Stai per modificare il voto di %d tracce.\n" "Desideri proseguire?" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d stazione" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Tralasciare le modifiche ai tag?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "I tag modificati non sono stati salvati. Salvare i file, o tralasciare i " "cambiamenti?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "Operazioni attive" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "%d operazioni in esecuzione" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Sconosciuto" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "In Ordine" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_In Ordine" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Casuale" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "In base al Giudizio" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "In base al _Giudizio" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Un Brano" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Un Brano" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Errori dei plugin" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Plugin" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Mostra _Errori" #: ../quodlibet/qltk/pluginwin.py:259 msgid "Version:" msgstr "Versione:" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Attivo" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Disattivato" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Nessuna categoria" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Nessun plugin trovato." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disco" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Traccia" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "raggruppamento" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "Nome del _file" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Lunghezza" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Lista dei Brani" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Salta automaticamente al brano in esecuzione" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "Scorri nella lista dei brani fino a quello in esecuzione" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "Altr_o:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Modifica Display..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Colonne Visibili" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "La ricerca inline include le persone" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Il nome del file include la _cartella" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Preferenze" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Catalogo" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "Filtro _Globale:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Cerca dopo aver digitato" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "Mostra i risultati della ricerca dopo che l'utente smette di scrivere" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Cerca" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Conferma voti _multipli" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "Chiedi conferma prima di cambiare il voto di più canzoni assieme" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Abilita voti con un click" #: ../quodlibet/qltk/prefs.py:241 msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Abilita il giudizio cliccando sulla colonna del voto della lista dei brani" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Giudizi" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "_Usa angoli arrotondati nelle anteprime" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "Arrotonda gli angoli delle anteprime delle immagini degli album. Richiede il " "riavvio per avere effetto." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Lista degli Album" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Metti in pausa" #: ../quodlibet/qltk/prefs.py:306 #, fuzzy msgid "Output Configuration" msgstr "Output Log" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "Se non è disponibile l'informazione per Ripetere il Volume di una traccia, " "scala il volume a questo valore " #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "Volume di Fall-back (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Scala il volume di tutti i brani a questo valore, finché il risultato non " "clippa " #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "Volume Pre-amp (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "_Abilita la possibilità di Ripetere la modifica al volume di Uscita" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Ripeti la Modifica al Volume di Uscita" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Modifica Tag" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Tralasciare le modifiche ai tag?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Salva i giudizi e il _numero di riproduzioni" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Email:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" "Giudizi e numero dei passaggi saranno impostati per questo indirizzo email" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Nuova Stazione" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "_Aggiorna il catalogo all'avvio" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "A_ggiorna la Libreria" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Esamina le _Cartelle" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Nessun Brano" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Preferenze" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Proprietà" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "Co_da" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Rimuovi tutti i brani dalla coda" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "Ca_suale" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "In _Ordine" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Ripeti" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Ricomincia la scaletta una volta finito" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Impossibile aggiungere i brani" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> usa un protocollo non supportato." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Musica" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Aggiungi una Cartella..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Aggiungi un File..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Aggiungi una Posizione..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Apri un nuovo browser" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtri" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "M_ai ascoltati" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Primi 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "Con_trolli" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Salta al brano in esecuzione" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Visualizza" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "A_iuto" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "_Output Log" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "_Causa un Errore" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Cerca" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "A_ggiorna la Libreria" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Ri_carica la Libreria" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtro sul _genere" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtro sull'_artista" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filtro sull'al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "_Genere casuale" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "_Artista casuale" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Al_bum casuale" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "_Lista dei Brani" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Controlla cambiamenti effettuati sulla libreria" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Ricarica tutti i brani nella libreria (può richiedere molto tempo)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "I 40 brani più ascoltati" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Aggiungi una Posizione" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Inserire la posizione di un file audio." #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Impossibile aggiungere la stazione" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> non è una posizione valida" #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Aggiungi Musica" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Controlla la presenza di nuovi brani in questa cartella" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "Non è stato possibile aggiungere %s alla libreria\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Impossibile aggiungere il brano" #: ../quodlibet/qltk/ratingsmenu.py:20 #, fuzzy, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" "Stai per modificare il voto di %d tracce.\n" "Desideri proseguire?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Ricevuto il commando invalido %r." #: ../quodlibet/qltk/remote.py:121 #, fuzzy, python-format msgid "Error running command %r, caused by: %r." msgstr "Errore mentre eseguo il comando %r, causato da: %r)." #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Browser sconosciuto %r." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Sostituisci gli spazi con _underscore" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Elimina i caratteri incompatibili con _Windows" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Elimina i segni _diacritici" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Elimina i caratteri non-_ASCII" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "Usa solo caratteri _minuscoli" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Rinomina i File" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Nuovo Nome" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "Ignora _Tutti gli Errori" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Continua" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Impossibile rinominare il file" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "La rinomina di <b>%s</b> in <b>%s</b> è fallita. Porbabilmente il file " "esiste già, o non si hanno sufficienti permessi per creare un nuovo file o " "eliminarne uno vecchio." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Il percorso non è assoluto" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Il modello\n" "\t<b>%s</b>\n" "contiene / ma non parte dalla cartella root. Per evitare cartelle mal " "nominate, bisogna far partire i modelli con / o con ~/" #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "I brani in queste cartelle (separati da ':') saranno aggiunti alla libreria" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Selezionare le Cartelle" #: ../quodlibet/qltk/searchbar.py:46 msgid "Saved Searches" msgstr "Ricerche Salvate" #: ../quodlibet/qltk/searchbar.py:47 msgid "Edit saved searches..." msgstr "Modifica le ricerche salvate..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Cerca" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limita:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "In base al _Giudizio" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtro su %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "Headers degli _Album" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Headers delle _Tracce" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "Headers degli _Album" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "Headers della _Gente" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Headers della _Data" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Headers dei _File" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "Headers della _Produzione " #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Personalizza gli Headers..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Personalizza gli Headers..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Metti in _Coda" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "Copia sul dispositivo" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Rimuovi dalla Scaletta" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "Headers delle _Tracce" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "Headers della _Gente" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "Headers degli _Album" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "Headers della _Data" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "Headers dei _File" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "Headers della _Produzione " #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Tag:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Personalizzato" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Sostituisci _underscore con spazi" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Prima lettera maiuscola" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Separa in _valori multipli" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Tag dal File" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "I tag rimpiazzano quelli esistenti" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "i tag sono aggiunti a quelli esistenti" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Il modello\n" "\t<b>%s</b>\n" "non è valido. Probabilmente contiene lo stesso tag due volte o ha parentesi " "non valide (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Tag non validi" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "tags <b>%s</b> non validi\n" "\n" "I file attualmente selezionati non supportano la modifica di questi tag." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Impossibile modificare il brano" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Il modello inserito non è valido. Fare attenzione ad inserire < e > " "come \\< e \\> e che i tag sono bilanciati.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Modifica Display" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Troppo errori" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Riproduzione fermata poiché vi sono stati %d errori in una riga." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Numeri delle Tracce" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Parti _da:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Totale tracce:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Traccia" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "e altri %d ..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Salvataggio dei brani modificati." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d tracce salvate\n" "(%(remaining)s rimanenti)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d di %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Pulisci la ricerca" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Esiste già una scaletta chiamata %s." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 #, fuzzy msgid "D: " msgstr "W: " #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "Debug" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "W: " #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Avvertimenti" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "E: " #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Mostra brevi informazioni sull'utilizzo" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Mostra versione e copyright" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Utilizzo: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[opzioni]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Opzione '%s' non riconosciuta." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "L'opzione '%s' richiede un argomento." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "'%s' non è un prefisso unico." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Codifica non valida]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "Usare titoli maiuscoli?" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "Generale" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "Nessun log disponibile." #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "I formati corretti sono: AAAA, AAAA-MM-GG oppuure AAAA-MM-GG HH:MM:SS." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "I valori di ReplayGain devono essere nel formato 'x.yy dB'." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "I valori di picco di ReplayGain devono essere nel formato 'x.yy'." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "l'ID MusicBrainz della traccia deve essere nel formato UUID." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "Lo stato del rilascio di MusicBrainz deve essere 'ufficiale', " "'promozionale', o 'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "arrangiatore" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "autore" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "compositore" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "direttore" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "contatto" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "data" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "descrizione" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "genere" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "raggruppamento" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "lingua" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licenza" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "posizione" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "paroliere" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "etichetta discografica" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "titolo" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "versione" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "sito web" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "artista dell'album" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "Sottotitolo" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disco" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "traccia" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "numero di catalogo" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "data d'uscita originale" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "album originale" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "artista originale" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "data di registrazione" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "Stato di rilascio" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "artista dell'album" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "artista" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "album" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "esecutore" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "esecutori" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "ID MusicBrainz della traccia" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "ID MusicBrainz della traccia" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "ID MusicBrainz dell'artista" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "ID MusicBrainz dell'artista dell'album" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "ID TRM MusicBrainz" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "Stato dell'album MusicBrainz" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "Tipo di album MusicBrainz" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "volume della traccia" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "picco della traccia" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "volume dell'album" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "picco dell'album" #: ../quodlibet/util/tags.py:88 msgid "reference loudness" msgstr "volume di riferimento" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "dischi" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "tracce" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "ultima riproduzione" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "nome e percorso" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "Punto di mount" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "errori" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "gente" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "anno" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "data d'uscita originale" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "segnalibri" #: ../quodlibet/util/tags.py:115 msgid "file format" msgstr "formato file" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "parolieri" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "arrangiatori" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "compositori" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "direttori" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "autori" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d secondo" msgstr[1] "%d secondi" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuto" msgstr[1] "%d minuti" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d ora" msgstr[1] "%d ore" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d giorno" msgstr[1] "%d giorni" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d anno" msgstr[1] "%d anni" #~ msgid "_Browse Library" #~ msgstr "_Esplora la Libreria" #~ msgid "No eject command found." #~ msgstr "Nessun comando di espulsione trovato" #~ msgid "Unable to start web browser" #~ msgstr "Impossibile avviare un browser web" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Non è stato trovato alcun browser web. Impostare la variabile $BROWSER, o " #~ "verificare l'esistenza di /usr/bin/sensible-browser." #, fuzzy #~ msgid "Library Error" #~ msgstr "Esplora la Libreria" #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Output pipeline:" #~ msgid "translator-credits" #~ msgstr "Filippo Pappalardo <filippo@email.it>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Altre intestazioni da mostrare, separate da spazi" #~ msgid "_Edit and Continue" #~ msgstr "_Modifica e Continua" #, fuzzy #~ msgid "You are about to change the rating of %d song." #~ msgid_plural "You are about to change the rating of %d songs." #~ msgstr[0] "" #~ "Stai per modificare il voto di %d tracce.\n" #~ "Desideri proseguire?" #~ msgstr[1] "" #~ "Stai per modificare il voto di %d tracce.\n" #~ "Desideri proseguire?" #~ msgid "Confirm rating" #~ msgstr "Chiedi conferma del voto" #~ msgid "_Search:" #~ msgstr "_Cerca:" #~ msgid "Search your library" #~ msgstr "Cerca nella libreria audio" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quod-libet-development@googlegroups.com>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, e altri\n" #~ "\n" #~ "Questo è software libero; vedi il codice sorgente per le condizioni di " #~ "copia. Non c'è\n" #~ "garanzia; neppure per la COMMERCIALIZZAZIONE o per L'ADEGUATEZZA AD UNO " #~ "SCOPO PARTICOLARE.\n" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r non contiene alcun browser." #~ msgid "Total size unknown" #~ msgstr "Dimensione totale sconosciuta" #~ msgid "%r doesn't contain any devices." #~ msgstr "%r non contiene alcun dispositivo." #~ msgid "%s: Could not import ctypes." #~ msgstr "%s: Non riesco a importare i ctypes." #~ msgid "%s: Could not find media-player-info." #~ msgstr "%s: Non trovo le informazioni di media-player." #, fuzzy #~ msgid "Couldn't find module %s." #~ msgstr "%s: Non trovo libudev." #~ msgid "Quod Libet Plugins" #~ msgstr "Plugin di Quod Libet" #~ msgid "Color _search terms" #~ msgstr "_Colora il termini cercati" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Colora le stringhe di ricerca semplici in blu, avanzate in verde, non " #~ "valide in rosso" #~ msgid "_Select" #~ msgstr "_Seleziona" #~ msgid "Separators for splitting tags" #~ msgstr "Separatori per dividere i tag" #~ msgid "Enable _human title case" #~ msgstr "Abilita un case del titolo _umano" #~ msgid "" #~ "Uses common English rules for title casing, as in \"Dark Night of the Soul" #~ "\"" #~ msgstr "" #~ "Usa le comuni regole Inglesi per le maiuscole nel titolo, come \"Dark " #~ "Night of the Soul\"" #, fuzzy #~ msgid "Display" #~ msgstr "Modifica Display" #~ msgid "Quod Libet Preferences" #~ msgstr "Preferenze di Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "Non ascoltati o_ggi" #~ msgid "Not Played in a _Week" #~ msgstr "Non ascoltati da una _settimana" #~ msgid "Not Played in a _Month" #~ msgstr "Non ascoltati da un _mese" #~ msgid "B_ottom 40" #~ msgstr "_Ultimi 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "I 40 brani meno ascoltati" #~ msgid "gtk-media-next" #~ msgstr "gtk-media-next" #~ msgid "gtk-media-previous" #~ msgstr "gtk-media-previous" #~ msgid "gtk-media-play" #~ msgstr "gtk-media-play" #~ msgid "gtk-media-pause" #~ msgstr "gtk-media-pause" #~ msgid "Artist" #~ msgstr "Artista" #~ msgid "Date" #~ msgstr "Data" #~ msgid "Choose New Stations" #~ msgstr "Scegli Nuove Stazioni" #~ msgid "Add" #~ msgstr "Aggiungi" #~ msgid "Bitrate" #~ msgstr "Bitrate" #~ msgid "_Stations..." #~ msgstr "_Stazioni..." #~ msgid "Quod Libet" #~ msgstr "Quod Libet" #~ msgid "Initializing audio backend (%s)" #~ msgstr "Sto inizializzando l'audio backend (%s)" #~ msgid "Initializing main library (%s)" #~ msgstr "Sto inizializzando la libreria principale (%s)" #~ msgid "Unable to save library" #~ msgstr "Impossibile salvare la libreria" #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Impossibile esportare i log, sei bloccato." #~ msgid "" #~ "The audio output pipeline %r could not be created. Check your GStreamer " #~ "settings in ~/.quodlibet/config." #~ msgstr "" #~ "L'audio output pipeline %r non può essere creato. Controlla le tue " #~ "impostazioni di GStreamer in ~/.quodlibet/config." #~ msgid "_Information" #~ msgstr "_Informazioni" #~ msgid "Sort by title" #~ msgstr "Ordina per titolo" #~ msgid "Sort by artist" #~ msgstr "Ordina per artista" #~ msgid "Lyrics provided by %s." #~ msgstr "Testi forniti da %s" #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Nessun testo trovato.\n" #~ "\n" #~ "Si può cliccare sul pulsante Scarica per cercare testi online.E' " #~ "possibile anche inserire manualmente il testo e salvarlo." #~ msgid "part" #~ msgstr "parte" #~ msgid "Opening audio device." #~ msgstr "Apertura del dispositivo audio." #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d brani modificati" #~ msgid "MusicBrainz album ID" #~ msgstr "ID MusicBrainz dell'album" #~ msgid "Loaded song library." #~ msgstr "Libreria audio caricata." #~ msgid "Unable to open audio device" #~ msgstr "Impossibile accedere al dispositivo audio" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet ha cercato di accedere ai driver 'autosink' e '%(sink)s' ma " #~ "senza successo. Imposta le preferenze di GStreamer cambiando il valore\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "in ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet non è riuscito a trovare l'elemento GStreamer " #~ "'filesrc.'Controlla l'installazione di GStreamer." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer non è stato in grado di caricare il brano selezionato" #, fuzzy #~ msgid "C_opy album covers" #~ msgstr "Mostra le _Cover degli album" #~ msgid "Unable to retag multiple values" #~ msgstr "Impossibile rietichettare valori multipli" #~ msgid "Changing the name of a tag with multiple values is not supported." #~ msgstr "Cambiare il nome di un tag con valori multipli non è supportato." #~ msgid "W: %s is not a QL song database." #~ msgstr "W. %s non è un database di QL" #~ msgid "Per-song (\"Radio\") volume adjustment" #~ msgstr "Per brano (\"Radio\")" #~ msgid "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "Per album (\"Audiofilo\")" #~ msgid "_Volume Normalization" #~ msgstr "Normalizzazione del _Volume" #~ msgid "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgstr "" #~ "Quod Libet sta aggiornando la libreria. Possono volerci alcuni minuti.\n" #~ "\n" #~ "%d brani ricaricati\n" #~ "%d brani rimossi" #~ msgid "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgstr "" #~ "Quod Libet sta rilevando nuovi brani da aggiungere alla libreria.\n" #~ "\n" #~ "%d brani aggiunti" #~ msgid "No new stations" #~ msgstr "Nessuna nuova stazione" #~ msgid "M3U playlists cannot be loaded." #~ msgstr "Le scalette M3U non possono essere caricate." #~ msgid "This station is already in your library." #~ msgstr "Questa stazione è già nella libreria" #~ msgid "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "by <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disc <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Track <tracknumber>>>" #~ msgstr "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "di <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disco <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Traccia <tracknumber>>>" �������������������������������������������������������������������������quodlibet-3.0.2/po/cs_CZ.po�������������������������������������������������������������������������0000644�0001750�0001750�00000254722�12173213426�015726� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������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: # Honza Hejzl <honza.hejzl@gmail.com>, 2011. msgid "" msgstr "" "Project-Id-Version: Quod Libet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-04-18 22:07+0100\n" "Last-Translator: Honza Hejzl <honza.hejzl@gmail.com>\n" "Language-Team: Czech (Czech Republic)\n" "Language: cs_CZ\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" "X-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Editor tagů" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Editovat tagy skladeb" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Přehrávač hudby" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Poslouchejte, procházejte nebo upravujte svou hudební sbírku" #: ../data/quodlibet.desktop.in.h:3 msgid "Play/Pause" msgstr "Přehrávat/Pauza" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "Další" #: ../data/quodlibet.desktop.in.h:5 msgid "Previous" msgstr "Předchozí" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "editor tagů " #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "adresář" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Ukázat _" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Příliš mnoho chyb." #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "popis" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Hodnota" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Tag" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Editor tagů" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "Odstranění duplicit" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Odstranění duplicit" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filtr na hodnotu tagu" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filtr na hodnotu tagu" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Informace o čase nejsou dostupné" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Zobrazit stručné info o využití" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> není platné umístění." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Skladby neobsažené v albu" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Nastavení seznamu skladeb" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Zobrazovat _přebaly alb" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "_Hledání obsahuje osoby" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Zobrazení alba" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d skladba" msgstr[1] "%d skladeb" msgstr[2] "%d skladby" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disk" msgstr[1] "%d disky" msgstr[2] "%d disky" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Neplatné zadání" #: ../quodlibet/browsers/albums.py:180 msgid "_Title" msgstr "_Název" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Umělec" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Datum" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 msgid "_Genre" msgstr "_Žánr" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Hodnocení" #: ../quodlibet/browsers/albums.py:189 msgid "Sort _by..." msgstr "Seřadit podle:" #: ../quodlibet/browsers/albums.py:210 msgid "_Preferences" msgstr "_Nastavení" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Seznam alb" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Seznam alb" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Všechna alba" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d album" msgstr[1] "%d alba" msgstr[2] "%d alb" #: ../quodlibet/browsers/albums.py:725 msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Znovu _načíst přebal" msgstr[1] "Znovu _načíst přebaly" msgstr[2] "Znovu načíst přebaly" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Neznámé" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Nový zdroj" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Zadejte umístění audio zdroje:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Audio zdroje" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Audio zdroje" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Stahování ..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Stáhnout soubory" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Stáhnout soubor" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Nelze přidat zdroj" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> nemůže být přidán. Buď může mít server problémy, nebo na tomto " "místě nemusí být žádný audio zdroj." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "Nelze importovat %s. Prohlížeč zdrojů zakázán." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "Současná obslužná aplikace nepodporuje URL, prohlížeč audio zdrojů je " "zakázán." #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Prohlížeč sbírky" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d skladba (%(time)s)" msgstr[1] "%(count)d skladby (%(time)s)" msgstr[2] "%(count)d skladeb (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, python-format msgid "Unknown %s" msgstr "Neznámé %s" #: ../quodlibet/browsers/collection.py:37 #, python-format msgid "Multiple %s Values" msgstr "Více %s hodnot" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Vlastní" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "sloučit" #: ../quodlibet/browsers/collection.py:210 msgid "Album Collection Preferences" msgstr "Nastavení sbírky alb" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "Sbírka alb" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "Sbírka _Alb" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Systém souborů" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Systém souborů" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Nelze kopírovat skladby" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Vybrané soubory nelze zkopírovat do jiných seznamů skladeb nebo do fronty." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Přidat do sbírky" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Nepodporovaný formát souboru" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Seznamy stanic mohou obsahovat pouze umístění stanic, nemohou obsahovat " "seznamy stanic nebo plylisty. Následující umístění nelze nahrát:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Nelze přidat stanici" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Internetová rádia" #: ../quodlibet/browsers/iradio.py:235 msgid "Downloading station list" msgstr "Stahování seznamu stanic" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Nová stanice" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Zadejte umístění stanice internetového rádia:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "Elektronika" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "Hip Hop / Rap" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "Oldies" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "R&B" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "Japonská" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "Indická" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "Náboženská" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "Sborová" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "Turecká" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "Reggae / Taneční" #: ../quodlibet/browsers/iradio.py:370 msgid "Latin" msgstr "Latinskoamerické" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "College rádio" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "Rozhovory / Zprávy" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "Ambient" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "Jazz" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "Klasická" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "Pop" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "Alternativní" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "Metal" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "Country" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "Zprávy" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "Šlágry" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "Funky" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "Indie" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "Blues" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "Soul" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "Lounge" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "Punk" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "Reggaeton" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "Slovanská" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "Řecká" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "Gotická" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "Rock" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Internetová rádia" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Nová stanice" #: ../quodlibet/browsers/iradio.py:491 msgid "_Update Stations" msgstr "_Aktualizace stanic" #: ../quodlibet/browsers/iradio.py:516 msgid "All Stations" msgstr "Všechny stanice" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "Oblíbené" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "Žádná kategorie" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Nenalezeny žádné stanice" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Na %s nebyly nalezeny žádné stanice." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Všechny stanice na seznamu jsou už ve sbírce." #: ../quodlibet/browsers/iradio.py:738 msgid "Remove from Favorites" msgstr "Odstranit z oblíbených" #: ../quodlibet/browsers/iradio.py:744 msgid "Add to Favorites" msgstr "Přidat do oblíbených" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d stanice" msgstr[1] "%(count)d stanice" msgstr[2] "%(count)d stanic" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Vlastnosti zařízení" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Zařízení:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Není připojeno" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Přípojný bod:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Jméno:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Zařízení s médii" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Zařízení s médii" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Vysunout" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Přejmenovat" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s je využito,%s</b> je k dispozici" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> není připojeno." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "<b>Kopírování %(song)s </b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Skladbu nelze kopírovat" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Pro tuto skladbu již není dost místa." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> nelze zkopírovat." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Skladby nelze smazat" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "<b>Odstraňování %(song)s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> nelze odstranit." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Skladbu nelze smazat" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "<b>Vysunutí %s</b> selhalo." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Zařízení nelze vysunout" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "Nenalezena obslužná aplikace, prohlížeč mediálních zařízení zakázán." #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Nastavení prohlížeče s panely" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Vše" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Prohlížeč s panely" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Prohlížeč s panely" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Vybrat _vše" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Importování seznamu skladeb.\n" "\n" "%(current)d/%(total)d skladeb přidáno." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "Jste si jistí, že chcete smazat seznam skladeb '%s'?" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" "Všechny informace o vybraných seznamech skladeb budou smazány a nebude je " "možné obnovit." #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "Jste si jistí, že chcete odstranit %d duplikátní skladbu?" msgstr[1] "Jste si jistí, že chcete odstranit %d duplikátní skladby?" msgstr[2] "Jste si jistí, že chcete odstranit %d duplikátních skladeb?" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "Duplikátní skladby budou ze seznamu skladeb '%s' odstraněny." #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Nový seznam skladeb" #: ../quodlibet/browsers/playlists.py:141 msgid "Enter a name for the new playlist:" msgstr "Zadejte jméno nového seznamu:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Nový seznam skladeb" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s a %(count)d více" msgstr[1] "%(title)s a %(count)d více" msgstr[2] "%(title)s a %(count)d více" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Seznamy skladeb" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Seznamy skladeb" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Odstranit ze seznamu" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importovat" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Seznam skladeb nelze importovat" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet umí importovat jen seznamy ve formátu M3U a PLS." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "Odstranění duplicit" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Promíchat" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Seznam skladeb nelze přejmenovat" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importovat seznam skladeb" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Zakázat prohlížeč" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Zakázat prohlížeč" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Prohledávat sbírku" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Hledat ve sbírce" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Omezit výsledky" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Neznámé zařízení" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "Nemohu importovat %s, což je třeba pro podporu zařízení." #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "%r není podporované zařízení." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: %s nelze nalézt." #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "%s: %s nelze nalézt." #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "Načítání zařízení." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "Zkoušení '%s'" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "Nelze se připojit k obslužné aplikaci zařízení." #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Zařízení načteno." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "Úprava _Hlasitosti (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Kopírovat _obaly alb" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "_Kombinovat tagy s více hodnotami" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Název obsahuje _verzi" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "Album obsahuje podnázev _disku" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Model:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Kapacita:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "Odstraňování nezařazené skladby z iPodu" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Nelze uložit iPod dazabázi" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Nenačtený iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Chcete vytvořit pro tento iPod prázdnou databázi?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "Nelze importovat python-gpod, podpora iPodu zakázána." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Vzor názvu souborů:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Odstranit nepoužívané přebaly a adresáře" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Soubor existuje" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Přepsat <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "Načítání přebalu alba \"%s\" selhalo" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Chyba načítání %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Sbírka" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Kontrola přípojných bodů" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Načítání sbírky" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Načítání %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "Roura výstupu GStreameru používána pro přehrávání, jako např. 'alsasink " "device=default'. Nechte prázdné pro použití výchozí roury." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "_Výstupní roura:" #: ../quodlibet/player/gstbe.py:75 #, python-format msgid "%.1f seconds" msgstr "%.1f vteřin" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "_Délka mezipaměti:" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "Stream" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "Načítání do vyrovnávací paměti" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Chyba výstupu" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "Výstupní roura GStreameru nemohla být načtena. Roura je možná neplatná, nebo " "může být zařízení používáno. Zkontrolujte nastavení přehrávače." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Nelze otevřít vstupní data" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "GStreamer nemá parametr pro čtení souborů. Zkontrolujte nastavení instalace." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "Neplatná výstupní roura GStreameru, zkouším výchozí." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "Nelze vytvořit výchozí rouru GStreameru." #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "Neplatná oblužná aplikace" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "Obslužná aplikace %r není nainstalována." #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Nelze vytvořit audio výstup." #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Zařízení %r nenalezeno. Zkontrolujte nastavení Xine v ~/.quodlibet/config." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet už běží." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Nyní se nic nepřehrává." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet neběží" #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Nelze zapisovat do %s. Odstraňuji." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "hudební sbírka a přehrávač" #: ../quodlibet.py:297 msgid "[option]" msgstr "[volba]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Vypsat přehrávanou skladbu a skončit." #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Ihned začít přehrávat" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Další skladba" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" "Skočit na předchozí skladbu nebo začít znovu, pokud je přehrávání na začátku" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Předchozí skladba" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Přehrávat" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Pauza" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Prohodit režim přehrávání/pauza" #: ../quodlibet.py:310 msgid "Stop playback" msgstr "Přehrávat" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Zesílit hlasitost" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Snížit hlasitost" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Zobrazit stav přehrávače" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Skrýt hlavní okno" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Obnovit hlavní okno" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Přepnout viditelnost hlavního okna" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Zaměřit běžící přehrávač" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Odstranit aktivní fiiltry procházení" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Obnovit a znovu načíst sbírku" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Zobrazit současný seznam skladeb" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Zobrazit obsah fronty" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "Start bez zásuvných modulů" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Ukončit Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Vyhledávat v přehrávané skladbě" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][ HH:] MM: SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Nastavit nebo přepnout pořadí přehrávání" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Vypnout/zapnout či přepnout opakování" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Nastavit hlasitost" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Procházet sbírku skladeb" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "dotaz" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Přehrát soubor" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "příkaz | název souboru" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Ohodnotit přehrávanou skladbu" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Nastavit aktuální prohlížeč" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Otevřít nový prohlížeč" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Zobrazit nebo skrýt frontu" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Zobrazit nebo skrýt hlavní seznam skladeb" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filtr s náhodnou hodnotou" #: ../quodlibet.py:340 msgid "command|tag" msgstr "příkaz | tag" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filtr na hodnotu tagu" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tag=hodnota" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Zařadit do fronty soubor nebo dotaz" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "Vyřadit z fronty soubory oddělené čárkou" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "název souboru" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "Zobrazit jména souborů z výsledku hledání na standardní výstup" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Vyřadit z fronty soubor nebo dotaz" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Neplatný argument pro '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Zkuste %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Podporované formáty: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Zvukové zařízení: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Začátek" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/A" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Čas" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Název záložky" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Záložky" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Informace o čase nejsou dostupné" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Hodnota:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Uložené hodnoty" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Upravit uložené hodnoty..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Skladby" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Zobrazit zbývající čas" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Upravit záložky..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "Auto_maticky" #: ../quodlibet/qltk/controls.py:233 msgid "_Track Mode" msgstr "_Režim skladeb" #: ../quodlibet/qltk/controls.py:234 msgid "_Album Mode" msgstr "_Režim alb" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Po této skladbě zastavit přehrávání" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filtr na hodnotu tagu" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Vyskytla se chyba" #: ../quodlibet/qltk/debugwindow.py:71 #, fuzzy, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "V aplikaci Quod Libet došlo k výjimce. Zpráva o ní byla uložena do <b>%s</" "b>, může pomoci závadu odstranit. Prosíme, ohlašte ji na code.google.com a " "uvedenou zprávu přiložte, nebo vložte přímo její obsah. Soubor se zprávou " "může obsahovat informace o vás nebo vašem systému, jako například seznam " "naposled hraných skladeb. Pokud je to pro vás nepřijatelné, pošlete místo " "toho <b>%s</b> s popisem, co jste právě dělali.\n" "\n" "Quod Libet může být nyní nestabilní. Doporučujeme aplikaci restartovat. " "Sbírka bude uložena." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Smazat soubory" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Přesunout do koše" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Skutečně navždy odstranit soubor?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Skutečně chce navždy smazat tyto soubory?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s a %(count)d více..." msgstr[1] "%(title)s a %(count)d více..." msgstr[2] "%(title)s a %(count)d více..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "Přesouvání %(current)d/%(total).d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Mazání %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:105 msgid "Unable to move to trash" msgstr "Nelze přesunout do koše" #: ../quodlibet/qltk/delete.py:106 #, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Přesunování <b>%s</b> do koše selhalo." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Soubor nezle smazat" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Mazání <b>%s</b> selhalo." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Stažené" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Název souboru" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Velikost" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "Zařazeno do fronty" #: ../quodlibet/qltk/_editpane.py:82 msgid "Path Patterns" msgstr "Vzory cesty" #: ../quodlibet/qltk/_editpane.py:83 msgid "Edit saved patterns..." msgstr "Upravit uložené hodnoty..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Náhled" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Více možností..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "chybí u %d skladby" msgstr[1] "chybí u %d skladeb" msgstr[2] "chybí u %d skladeb" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "liší se u %d skladby" msgstr[1] "liší se u %d skladeb" msgstr[2] "liší se u %d skladeb" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Rozdělit do _Více položek" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Oddělit disk od _Alba" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Oddělit _Verzi od názvu" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Oddělit aranžmá od Umělce" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Oddělit _Interpreta od umělce" #: ../quodlibet/qltk/edittags.py:229 msgid "Split _Performer out of Title" msgstr "Oddělit _Interpreta od názvu" #: ../quodlibet/qltk/edittags.py:235 msgid "Split _Originalartist out of Title" msgstr "Oddalit _Původního umělce od názvu" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Přidat tag" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Tag:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 msgid "ql-revert" msgstr "" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Upravit tagy" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Zapsat" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Tag nelze přidat" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Nelze přidat <b>%s</b>\n" "\n" "Vybrané soubory nepodporují zadávání více položek." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Neplatný tag" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Neplatný tag <b>%s</b>\n" "\n" "Vybrané soubory nepodporují označení tímto tagem." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Tag nemusí být správně" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> se za běhu programu změnily. Uložení bez obnovení sbírky (refresh) " "by mohlo přepsat jiné změny.\n" "\n" "Přesto skladbu uložit?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Skladbu nelze uložit" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Ukládání <b>%s</b> selhalo. Soubor může být jen pro čtení, poškozený, nebo " "nemáte právo ho měnit." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Neplatná hodnota" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Neplatná hodnota: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Zásuvné moduly" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d skladba" msgstr[1] "%d skladby" msgstr[2] "%d skladby" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Nastavení Ex Falsa" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Rozdělit _v:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Ukázat _" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Úprava tagů" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Složky" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Nová složka..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Vybrat všechny podsložky" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Nová složka" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Jméno nové složky:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Složku nelze vytvořit" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Složku nelze smazat" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "podle %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Disk %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Skladba %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Přidat do seznamu skladeb" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Upravit zobrazení..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Editovat _Tagy" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Nepřehrává se" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Vyčistit Chyby" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Nejsou vybrány žádné skladby." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Žádné skladby." #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informace" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Texty" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Chyby" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "umělec" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "umělci" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "interpreti" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Nikdy" #: ../quodlibet/qltk/information.py:243 #, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%(n)dkrát" msgstr[1] "%(n)dkrát" msgstr[2] "%(n)dkrát" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "přidáno" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "naposledy hrané" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "přehrání" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "přeskočení" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "hodnocení" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "délka" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "velikost souboru" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "naposledy změněno" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitrate" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Soubor" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d vybrána" msgstr[1] "%d vybrány" msgstr[2] "%d vybráno" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Vydáno %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "interpret" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Skladba je nedostupná" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Seznam skladeb" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d skladba mimo alba" msgstr[1] "%d skladby mimo alba" msgstr[2] "%d skladeb mimo alba" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Vybraná diskografie" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d skladba bez umělce" msgstr[1] "%d skladby bez umělce" msgstr[2] "%d skladeb bez umělce" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "alba" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Celková delka:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Celková velikost" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Soubory" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Log výstupu" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Stahování" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Ke skladbě nebyly nalezeny žádné texty." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Hledání textů skladby..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Nelze stáhnout texty skladby." #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "Jste si jistí, že chcete odstranit %d duplikátní skladbu?" #: ../quodlibet/qltk/maskedbox.py:18 #, fuzzy msgid "The selected songs will be removed from the library." msgstr "Duplikátní skladby budou ze seznamu skladeb '%s' odstraněny." #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d stanice" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Zahodit změny v tagu?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Tagy byly změněny, ale nebyly uloženy. Přejete si změny uložit, nebo zahodit?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "Aktivní úlohy" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "%d úlohy běží" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Neznámé" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "V pořadí" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_V pořadí" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Zamíchat" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Vyváženo" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Vyváženo" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Jedna skladba" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Jedna skladba" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Chyby zásuvného modulu" #: ../quodlibet/qltk/pluginwin.py:80 msgid "Plugins" msgstr "Zásuvné moduly" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Ukázat _Chyby" #: ../quodlibet/qltk/pluginwin.py:259 msgid "Version:" msgstr "Verze:" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Povoleno" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Zakázáno" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Žádná kategorie" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Nebyly nalezeny žádné zásuvné moduly." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disk" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Skladba" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "slučování" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Název souboru" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Délka" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Seznam skladeb" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Rovnou automaticky přehrávat skladbu" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "Když se přehrávaná skladba změní, najet na ni v přehledu skladeb" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "Chování" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Ostatní:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Upravit zobrazení..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Viditelné položky" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "_Hledání obsahuje osoby" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Název souboru obsahuje_složku" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Nastavení" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Prohlížeče" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Globální filtr:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "Použít tento dotaz spolu s ostatními" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Hledat po _psaní" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "Ukázat výsledky hledání až když uživatel přestane psát." #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "heading|Vyhledávání" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Potvrdit _hromadné hodnocení" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "Zeptat se na souhlas před změnou hodnocení u více skladeb najednou" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Povolit hodnocení _jedním klikem" #: ../quodlibet/qltk/prefs.py:241 msgid "Enable rating by clicking on the rating column in the song list" msgstr "Povolit hodnocení kliknutím na kolonku hodnocení v seznamu skladeb" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Hodnocení" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "_Použít v náhledech zaoblené rohy" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "Zakulacení rohů u náhledů přebalů. Může to vyžadovat restart přehrávače." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "Upřednostnit _vložené grafiky alb" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" "Upřednostit náhledy přebalů vložené přímo do souborů (pokud lze) před " "ostatními zdroji" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "_Vynucený název souboru obrázku:" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "Použít soubor grafiky alba vynuceně" #: ../quodlibet/qltk/prefs.py:283 msgid "Album Art" msgstr "Přebaly alb" #: ../quodlibet/qltk/prefs.py:301 msgid "Playback" msgstr "Přehrávání" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "Nastavení výstupu" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "Jestliže není informace o úpravě hlasitosti pro tuto skladbu dostupná, " "upravit hlasitost na tuto hodnotu" #: ../quodlibet/qltk/prefs.py:320 msgid "_Fall-back gain (dB):" msgstr "_Vyrovnání hlasitosti (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Upravit hlasitost podle této hodnoty pro všechny skladby, pokud nedojde ke " "snížení kvality." #: ../quodlibet/qltk/prefs.py:334 msgid "_Pre-amp gain (dB):" msgstr "_Předzesílení (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "_Povolit úpravu hlasitosti" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Úprava hlasitosti" #: ../quodlibet/qltk/prefs.py:387 msgid "Tags" msgstr "Tagy" #: ../quodlibet/qltk/prefs.py:392 msgid "Auto-save tag changes" msgstr "Automaticky ukládat změny tagů" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "Uložit změny tagů bez potvrzení v případě úpravy více tagů najednou" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" "Používat všechny tagy včetně strojově generovaných, jako jsou např. " "MusicBrainz tegy nebo tagy Úpravy hlasitosti" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" "Seznam oddělovačů pro rozdělování hodnot tagů. Položky jsou odděleny mezerou." #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Uložit hodnocení a _počet přehrání" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Email:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Hodnocení a počet přehrání budou nastaveny pro tuto emailovou adresu" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Aktualizace stanic" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "_Obnovit sbírku při startu" #: ../quodlibet/qltk/prefs.py:501 msgid "Refresh Library" msgstr "Obnovit sbírku" #: ../quodlibet/qltk/prefs.py:509 msgid "Scan Directories" msgstr "Pohledávat adresáře" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Žádné skladby." #: ../quodlibet/qltk/prefs.py:524 msgid "Preferences" msgstr "Nastavení" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Vlastnosti" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Fronta" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Odstranit všechny skladby z fronty" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Náhodně" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Pořadí:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Opakovat" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Začít znovu přehrávat po přehrání seznamu skladeb" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Nelze přidat skladby" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> používá nepodporovaný protokol." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Hudba" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Přidat složku..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Přidat soubor..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Přidat umístění..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Otevřít nový prohlížeč" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtry" #: ../quodlibet/qltk/quodlibetwindow.py:455 msgid "Recently _Played" msgstr "_Nedávno hrané" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "Nedávno _Přidané" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Top 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Ovládání" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Skočit na přehrávanou skladbu" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Zobrazení" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Pomoc" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "_Log z výstupu" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "_Způsobuje chybu" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "Online pomoc" #: ../quodlibet/qltk/quodlibetwindow.py:502 msgid "Search Help" msgstr "Hledat pomoc" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Obnovit sbírku" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Znovu načíst sbírku" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filtrovat podle _Žánru" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filtrovat podle _Umělce" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filtrovat podle alba" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Náhodný _Žánr" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Náhodný Umělec" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Náhodné al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Se_znam skladeb" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Zkontrolovat změny ve sbírce" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Znovu načíst všechny skladby ve sbírce (to může trvat dost dlouho)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "40 skladeb, které jste poslouchali nejvíc (více než 40 jich může být vybráno " "také)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Přidat umístění" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Zadejte umístění zvukového souboru:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Umístění nelze přidat" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> není platné umístění." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Přidat hudbu" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Hledat ve složce nové skladby" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s by neměly být přídány do sbírky.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Nelze přidat skladbu" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "Jste si jistí, že chcete změnit hodnocení u všech %d skladeb?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "Hodnocení u všech vybraných skladeb bude změněno na '%s'" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Zadán neplatný příkaz %r." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "Při provádění příkazu %r se vyskytla chyba způsobená %r." #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Neznámý prohlížeč %r." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Nahradit mezery _podtržítky" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Nahradit znaky nekompatibilní s _Windows" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Nahradit _diakritiku" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Nahradit ne-_ASCII znaky" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "Použít jen _malá písmena" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Přejmenovat soubory" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Nový název" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "Ignorovat _všechny chyby" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Pokračovat" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Soubor nelze přejmenovat" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Přejmenovávání <b>%s</b> na <b>%s</b> selhalo. Cílový soubor už možná " "existuje, nebo nemáte práve soubory vytvářet a měnit. " #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Uvedená cesta není absolutní" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Vzor\n" "\t<b>%s</b>\n" "obsahuje / , ale nezačíná od kořene (root). Pro vyhnutí se nepojmenovaným " "složkám upravte vzor root tak, aby začínal / nebo ~/." #: ../quodlibet/qltk/scanbox.py:35 msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Skladby v uvedených složkách budou přidány do sbírky při obnově (refresh)" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Vybrané adresáře" #: ../quodlibet/qltk/searchbar.py:46 msgid "Saved Searches" msgstr "Uložené hodnoty" #: ../quodlibet/qltk/searchbar.py:47 msgid "Edit saved searches..." msgstr "Upravit uložené hodnoty..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Hledání" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limit:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Váha" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filtr na %s" #: ../quodlibet/qltk/songlist.py:1017 msgid "All _Headers" msgstr "Všechny _Hlavičky" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Hlavičky _Skladeb" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "Hlavičky _Alb" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "Hlavičky _Lidí" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Hlavičky _Dat" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Hlavičky _Souborů" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "Hlavičky _Produkce" #: ../quodlibet/qltk/songlist.py:1037 msgid "Custom _Sort..." msgstr "Vlastní _Třídění..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Upravit hlavičky..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Přidat do _Fronty" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Kopírovat do zařízení" #: ../quodlibet/qltk/songsmenu.py:259 msgid "_Remove from library" msgstr "_Odstranit ze seznamu" #: ../quodlibet/qltk/sortdialog.py:19 msgid "Track Headers" msgstr "Hlavičky skladeb" #: ../quodlibet/qltk/sortdialog.py:22 msgid "People Headers" msgstr "Hlavičky lidí" #: ../quodlibet/qltk/sortdialog.py:25 msgid "Album Headers" msgstr "Seznam alb" #: ../quodlibet/qltk/sortdialog.py:28 msgid "Date Headers" msgstr "Hlavičky dat" #: ../quodlibet/qltk/sortdialog.py:31 msgid "File Headers" msgstr "Složky" #: ../quodlibet/qltk/sortdialog.py:33 msgid "Production Headers" msgstr "Hlavičky produkce" #: ../quodlibet/qltk/sortdialog.py:67 msgid "Tag:" msgstr "_Tag:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "Stoupání" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "Klesání" #: ../quodlibet/qltk/sortdialog.py:117 msgid "Custom sort" msgstr "Vlastní řazení" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Nahradit _podtržítka mezerami" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Tagy Kapitálkami" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Rozdělit do více _hodnot" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Tagy z cesty" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Nahradit existující tagy" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Tagy jsou přidány k již existujícím" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Vzor\n" "\t<b>%s</b>\n" "je neplatný. Možná obsahuje duplicitní tag nebo nemá uzavřené závorky " "(< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Neplatné tagy" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Neplatné tagy <b>%s</b>\n" "\n" "Vybrané položky nepodporují vkládání těchto tagů." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Skladbu nelze upravit" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Zadaný vzor je neplatný. Ujistětě se, že vkládáte < a > jako \\< a " "\\> a že jsou vaše tagy v pořádku.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Upravit zobrazení" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Příliš mnoho chyb." #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Zastavuji přehrávání, protože se vyskytlo %d chyb za sebou." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Čísla skladeb" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Začít _od:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Celkem skladeb:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Skladba" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "a %d více..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Ukládání změněných skladeb." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d skladeb uloženo\n" "(%(remaining)s zbývá)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d z %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Vyčistit hledání" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Seznam skladeb s názvem %s již existuje." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "D:" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "Ladit" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "W:" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Varování" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "E:" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Zobrazit stručné info o využití" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Zobrazit verzi a copyright" #: ../quodlibet/util/__init__.py:142 #, python-format msgid "Usage: %s %s\n" msgstr "Využití: %s %s\n" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[možnosti]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Volba %r nerozpoznána." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "Volba %r vyžaduje parametry." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r není jedinečný prefix." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Neplatné kódování]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "kontrola|první velké" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "Obecné" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "Není dostupný žádný výstup." #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Datum musí být vloženo ve formátu 'YYYY', 'YYYY-MM-DD' nebo 'YYYY-MM-DD HH:" "MM:SS'." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Úprava hlasitosti musí být zadána ve formátu 'x.yy dB'." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Nejvyšší hodnoty úpravy hlasitosti musí být zadány ve formátu 'x.yy'." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "ID MusicBrainzu musí být ve formátu UUID." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "Status MusicBrainz musí být 'official', 'promotional', nebo 'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "Jazyk musí být ISO 639-2 trojpísmenný kód" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "aranžmá" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "autor" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "skladatel" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "dirigent" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "kontakt" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "rok" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "popis" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "žánr" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "slučování" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "jazyk" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licence" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "místo" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "texty" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organizace" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "název" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "verze" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "webová stránka" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "umělec alba" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "podnázev disku" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disk" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "skladba" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "ID labelu" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "datum původního vydání" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "původní album" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "původní umělec" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "datum nahrávání" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "země vydání" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "umělec alba (setříděno)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "umělec (setříděno)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "album (setříděno)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "performer (setříděno)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "performeři (setříděno)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "ID skladby na MusicBrainz" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "ID vydání na MusicBrainz" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "ID umělce na MusicBrainz" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "ID umělce alba na MusicBrainz" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "ID TRM na MusicBrainz" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "PUID MusicIP" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "Status alba na MusicBrainz" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "Typ alba na MusicBrainz" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "úprava hlasitosti skladby" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "nejvyšší hodnota u skladby" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "úprava hlasitosti alba" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "nejvyšší hodnota u alba" #: ../quodlibet/util/tags.py:88 msgid "reference loudness" msgstr "určující hlasitost" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "disky" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "skladby" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "poslední start" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "celé jméno" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "přípojný bod" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "chyby" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "lidé" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "rok" #: ../quodlibet/util/tags.py:111 msgid "original release year" msgstr "rok původního vydání" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "záložka" #: ../quodlibet/util/tags.py:115 msgid "file format" msgstr "formát souboru" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "textaři" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "aranžmá" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "skladatelé" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "dirigenti" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "autoři" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d vteřina" msgstr[1] "%d vteřiny" msgstr[2] "%d vteřin" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuta" msgstr[1] "%d minuty" msgstr[2] "%d minut" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d hodina" msgstr[1] "%d hodiny" msgstr[2] "%d hodin" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d den" msgstr[1] "%d dny" msgstr[2] "%d dnů" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d rok" msgstr[1] "%d roky" msgstr[2] "%d let" #~ msgid "_Browse Library" #~ msgstr "_Procházet sbírku" #~ msgid "" #~ "Cannot save library contents to %s (it's a directory). Please remove it " #~ "and try again." #~ msgstr "" #~ "Nelze uložit obsah sbírky do %s (je to adresář). Prosím, odstraňte jej a " #~ "zkuste to znovu." #~ msgid "Library Error" #~ msgstr "Prohlížeč sbírky" #~ msgid "_Output device:" #~ msgstr "_Výstupní zařízení:" #~ msgid "Could not link GStreamer pipeline: '%s'" #~ msgstr "Nemohu spojit rouru GStreameru: '%s'" #~ msgid "Default" #~ msgstr "Výchozí" #~ msgid "translator-credits" #~ msgstr "Honza Hejzl (honza.hejzl@gmail.com)[připomínky velmi vítány!]" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Zobrazení dalších sloupců (oddělených mezerami)" #~ msgid "_Edit and Continue" #~ msgstr "_Upravit a pokračovat" #~ msgid "_Search:" #~ msgstr "_Hledat:" #~ msgid "Search your library" #~ msgstr "Hledat ve sbírce" #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "Toto je volně šiřitelný software; ve zdroji jsou k nahlédnutí podmínky " #~ "kopírování. Použití na vlastní zodpovědnost.\n" #~ msgid "No eject command found." #~ msgstr "Příkaz k vysunutí nenalezen." #~ msgid "Unable to start web browser" #~ msgstr "Nelze spustit prohlížeč webu" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Prohlížeč webu nelze najít. Nastavte prosím svou $BROWSER proměnnou, nebo " #~ "se ujistěte, že existuje /usr/bin/nějaký prohlížeč." #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Celková velikost neznámá" #, fuzzy #~ msgid "Display" #~ msgstr "Zobrazení alba" #, fuzzy #~ msgid "Not Played To_day" #~ msgstr "Dnes nehrané" #, fuzzy #~ msgid "Not Played in a _Week" #~ msgstr "Nehrané v posledním týdnu" #, fuzzy #~ msgid "Not Played in a _Month" #~ msgstr "Nehrané za poslední měsíc" #, fuzzy #~ msgid "Artist" #~ msgstr "Umělec" #, fuzzy #~ msgid "Date" #~ msgstr "Datum" #, fuzzy #~ msgid "Choose New Stations" #~ msgstr "Vybrat nové stanice" #, fuzzy #~ msgid "Add" #~ msgstr "Přidat" #, fuzzy #~ msgid "Bitrate" #~ msgstr "Bitrate" #, fuzzy #~ msgid "_Stations..." #~ msgstr "_Stanice..." ����������������������������������������������quodlibet-3.0.2/po/zh_CN.po�������������������������������������������������������������������������0000644�0001750�0001750�00000235407�12173213426�015725� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Simplified Chinese (zh_CN) translation of Quod Libet. # Copyright (C) 2006 THE quodlibet'S COPYRIGHT HOLDER # This file is distributed under the same license as the Quod Libet package. # Emfox Zhou <EmfoxZhou@gmail.com>, 2006. # msgid "" msgstr "" "Project-Id-Version: Quod Libet 0.21\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:33+0100\n" "Last-Translator: Emfox Zhou <EmfoxZhou@gmail.com>\n" "Language-Team: Emfox Zhou <EmfoxZhou@gmail.com>\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=n<0;\n" "X-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "音频标签编辑器" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "编辑您的音频文件里的标签" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "音乐播放器" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "听、浏览或者编辑您的音频收藏" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "播放器" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "预览(_P)" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "音频标签编辑器" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "目录" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 msgid "Also list programmatic tags" msgstr "" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "描述" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "值" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "标签" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "音频标签编辑器" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "删除站点(_R)" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "删除站点(_R)" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "以标签值过滤" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "以标签值过滤" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "没有时间信息" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "没有时间信息" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> 不是合法的位置。" #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "不在专辑里的曲目" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "专辑列表首选项" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "显示专辑封面(_C)" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "专辑显示" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d 音轨" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d 唱片" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "非法参数" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "标题" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "歌手(_A)" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "日期(_D)" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "流派" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "评分(_R)" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "按日期排序" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Ex Falso 首选项" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "专辑列表" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "专辑列表(_A)" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "所有专辑" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "显示专辑封面(_C)" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "未知" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "新的源" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "输入音频源的位置:" #: ../quodlibet/browsers/audiofeeds.py:222 #, fuzzy msgid "Audio Feeds" msgstr "音频设备:%s" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "下载(_D)..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "下载文件" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "下载文件" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "无法加入源" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "库浏览器" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "未知" #: ../quodlibet/browsers/collection.py:37 #, python-format msgid "Multiple %s Values" msgstr "" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "自定义(_C)" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "专辑列表首选项" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "文件系统" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "文件系统(_F)" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "无法复制曲目" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "被选定的文件无法被复制到其它曲目列表或队列。" #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "加入到库(_A)" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "不支持的文件类型" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "站点列表只能包含站点的位置,不能包括其它的站点列表或播放列表。以下位置无法导" "入:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "无法加入站点" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "网上广播" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "下载文件" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "新站点" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "输入网上广播站点的位置:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "评分" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "网上广播(_I)" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "新站点(_N)" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "新站点(_N)" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "新站点" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "没有发现站点" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "没有发现网上广播站点 %s" #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "所有列出的站点都已经在您的库里。" #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "从播放列表里删除(_R)" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "加入到播放列表(_A)" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "" #: ../quodlibet/browsers/media.py:30 #, fuzzy msgid "Device Properties" msgstr "属性" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "" #: ../quodlibet/browsers/media.py:46 #, fuzzy msgid "Mount Point:" msgstr "挂载点" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "名字(_N):" #: ../quodlibet/browsers/media.py:128 #, fuzzy msgid "Media Devices" msgstr "音频设备:%s" #: ../quodlibet/browsers/media.py:129 #, fuzzy msgid "_Media Devices" msgstr "音频设备:%s" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 #, fuzzy msgid "_Eject" msgstr "选择(_S)" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "重命名(_R)" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "" #: ../quodlibet/browsers/media.py:461 #, fuzzy, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> 不是合法的位置。" #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "删除 <b>%s</b> 失败。" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 #, fuzzy msgid "Unable to copy song" msgstr "无法复制曲目" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "" #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "" #: ../quodlibet/browsers/media.py:531 #, fuzzy msgid "Unable to delete songs" msgstr "无法添加曲目信息" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "删除 <b>%s</b> 失败。" #: ../quodlibet/browsers/media.py:560 #, fuzzy, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> 不是合法的位置。" #: ../quodlibet/browsers/media.py:564 #, fuzzy msgid "Unable to delete song" msgstr "无法编辑曲目" #: ../quodlibet/browsers/media.py:579 #, fuzzy, python-format msgid "Ejecting <b>%s</b> failed." msgstr "删除 <b>%s</b> 失败。" #: ../quodlibet/browsers/media.py:582 #, fuzzy msgid "Unable to eject device" msgstr "无法删除文件" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "所有" #: ../quodlibet/browsers/paned.py:684 #, fuzzy msgid "Paned Browser" msgstr "关掉浏览器" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "全选(_A)" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "正在导入播放列表。\n" "\n" "已经添加 %d/%d 首曲目。" #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "新播放列表" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "输入新文件夹的名字:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "新播放列表(_N)" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "播放列表" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "播放列表(_P)" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "从播放列表里删除(_R)" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "导入(_I)" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "无法导入播放列表" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet 只能导入 M3U 或者 PLS 格式的播放列表" #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "无法重命名播放列表" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "导入播放列表" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "关掉浏览器" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "关掉浏览器" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "搜索库" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "搜索库(_S)" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "限制结果(_L)" #: ../quodlibet/devices/_base.py:59 #, fuzzy msgid "Unknown Device" msgstr "未知" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "" #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "非法的值" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 #, fuzzy msgid "Copy _album covers" msgstr "显示专辑封面(_C)" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "标题包含版本(_V)" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "专辑包含部分(_P)" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "" #: ../quodlibet/devices/ipod.py:291 #, fuzzy msgid "Unable to save iPod database" msgstr "无法保存库" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 #, fuzzy msgid "_Filename Pattern:" msgstr "文件名(_F)" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "" #: ../quodlibet/devices/storage.py:96 #, fuzzy msgid "File exists" msgstr "文件系统" #: ../quodlibet/devices/storage.py:97 #, fuzzy, python-format msgid "Overwrite <b>%s</b>?" msgstr "删除 <b>%s</b> 失败。" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "库" #: ../quodlibet/library/libraries.py:618 #, fuzzy msgid "Checking mount points" msgstr "挂载点" #: ../quodlibet/library/libraries.py:628 #, fuzzy msgid "Scanning library" msgstr "已导入曲目库。" #: ../quodlibet/library/libraries.py:668 #, fuzzy, python-format msgid "Scanning %s" msgstr "正在检查 %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d 秒" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "无法打开文件" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "非法的值" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "无法创建文件夹" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet 已经在运行。" #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "当前没有曲目在播放。" #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet 没有在运行。" #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "无法写入到 %s。正在删除。" #: ../quodlibet.py:296 msgid "a music library and player" msgstr "音乐库和播放器" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[选项]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "显示正在播放的曲目并退出" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "立即开始播放" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "跳到下一首曲目" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "跳到前一首曲目" #: ../quodlibet.py:307 msgid "Start playback" msgstr "开放回放" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "暂停回放" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "切换播放/暂停模式" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "开放回放" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "加大音量" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "减小音量" #: ../quodlibet.py:313 msgid "Print player status" msgstr "显示播放器状态" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "隐藏主窗口" #: ../quodlibet.py:315 msgid "Show main window" msgstr "显示主窗口" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "切换主窗口可见性" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "焦点移到运行中的播放器" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "刷新库(_F)" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "显示当前播放列表" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "显示队列内容" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "退出 Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "在正在播放的曲目中定位" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "设定或切换回放顺序" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "开、关或切换重复播放" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "设定音量" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "搜索您的音频库" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "查询" #: ../quodlibet.py:334 msgid "Play a file" msgstr "播放文件" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 #, fuzzy msgid "command|filename" msgstr "文件名" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "评估正在播放的曲目" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "设定当前浏览器" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "打开新的浏览器" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "显示或隐藏队列" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "显示或隐藏主曲目列表" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "以随机值过滤" #: ../quodlibet.py:340 msgid "command|tag" msgstr "" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "以标签值过滤" #: ../quodlibet.py:341 msgid "tag=value" msgstr "" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "文件名" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "错误:%s 的非法参数。" #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "错误:试试 %s --help。" #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "支持的格式: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "音频设备:%s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "开头" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "无" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "时间" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "书签名" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "书签" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "没有时间信息" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "值(_V):" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "已保存值" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "编辑已保存的值..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "曲目" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "显示剩下的时间" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "编辑书签(_E)..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "音轨号" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "专辑列表(_A)" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "这首曲目放完后就停止" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "以标签值过滤" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "删除文件" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "移到回收站(_M)" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "永远删除这个文件?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "永远删除这些文件?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "" #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "正在移动 %d/%d" #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "正在删除 %d/%d" #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "无法保存库" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "删除 <b>%s</b> 失败。" #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "无法删除文件" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "删除 <b>%s</b> 失败。" #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "下载" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "文件名" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "大小" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "队列(_Q)" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "参数" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "编辑已保存的值..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "预览(_P)" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "更多选项(_M)..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "" #: ../quodlibet/qltk/edittags.py:229 msgid "Split _Performer out of Title" msgstr "" #: ../quodlibet/qltk/edittags.py:235 msgid "Split _Originalartist out of Title" msgstr "" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "增加一个标签" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "标签(_T):" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "移除" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "编辑标签" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "写入" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "无法增加标签" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "非法标签" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "非法标签<b>%s</b>\n" "当前被选定的文件不支持编辑这个标签。" #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "标签可能不准确" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "无法保存曲目" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "保存<b>%s</b>失败。该文件可能是只读的,损坏了,或者您并没有权限编辑它。" #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "非法的值" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "插件(_P)" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso 首选项" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "标签编辑" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "文件夹" #: ../quodlibet/qltk/filesel.py:137 #, fuzzy msgid "_New Folder..." msgstr "新文件夹..." #: ../quodlibet/qltk/filesel.py:146 #, fuzzy msgid "_Select All Subfolders" msgstr "全选(_A)" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "新文件夹" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "输入新文件夹的名字:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "无法创建文件夹" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "无法删除文件夹" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "唱片 %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "音轨 %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "加入到播放列表(_A)" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "" #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "编辑标签(_T)" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "" #: ../quodlibet/qltk/information.py:61 #, fuzzy msgid "_Clear Errors" msgstr "插件错误" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "没有选中曲目。" #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "没有曲目" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "信息" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "歌词" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 #, fuzzy msgid "Errors" msgstr "显示错误(_E)" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "歌手" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "歌手" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "演员" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "从来没有" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d 时间" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "加入" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "最近一次播放" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "评分" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "长度" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "文件大小" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "修改" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "比特率" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "文件" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d 选中" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "%s 制造" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "表演" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "音轨不可用" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "音轨列表" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d 首曲目没有专辑信息" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "专辑" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "总长度:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "总大小:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "文件" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "下载(_D)" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "" #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "" #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "" #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, python-format msgid "%(song_count)d songs" msgstr "" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "未知" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "顺序" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "顺序(_I)" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Shuffle" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "权重" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "权重(_W)" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "单曲" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "单曲(_O)" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "插件错误" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "插件(_P)" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "显示错误(_E)" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "版本" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "关掉浏览器" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "没有找到插件。" #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "唱片(_D)" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "音轨(_T)" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "组合" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "专辑(_B)" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "文件名(_F)" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "长度(_L)" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "曲目列表" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "自动跳到正在播放的曲目" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "当正在播放的曲目改变的时候,在曲目列表里相应跳过去" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "其它(_O):" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "编辑书签(_E)..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "可见的栏" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "标题包含版本(_V)" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "文件名包含文件夹(_F)" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Ex Falso 首选项" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "浏览器" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "全局过滤器:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "这首曲目放完后就停止" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "搜索" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "当正在播放的曲目改变的时候,在曲目列表里相应跳过去" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "评分(_R)" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "专辑列表" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "暂停回放" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 msgid "_Fall-back gain (dB):" msgstr "" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 msgid "_Pre-amp gain (dB):" msgstr "" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "无音量调整" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "无音量调整" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "编辑标签" #: ../quodlibet/qltk/prefs.py:392 msgid "Auto-save tag changes" msgstr "" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "新站点(_N)" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "刷新库(_F)" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "刷新库(_F)" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "扫描目录(_D)" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "没有曲目" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Ex Falso 首选项" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "属性" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "队列(_Q)" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "删除队列里的所有曲目" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "随机(_R)" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "顺序(_O):" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "重复(_R)" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "完成后重新开始播放列表" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "无法添加曲目信息" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b>使用不支持的协议。" #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "音乐(_M)" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "加入文件夹(_A)..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "加入文件(_A)..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "加入位置(_A)..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "打开新的浏览器" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "过滤器(_F)" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "从来没有播放过(_N)" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "前40(_T)" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "控制(_C)" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "跳到正在播放的曲目(_J)" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "查看(_V)" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "帮助(_H)" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "插件错误" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "搜索" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "刷新库(_F)" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "重新导入库(_L)" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "以流派过滤(_G)" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "以歌手过滤(_A)" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "以专辑过滤(_B)" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "随机流派(_G)" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "随机歌手(_A)" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "随机专辑(_B)" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "曲目列表(_L)" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "检查您的库的更改" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "重新导入您的库里的所有曲目(可能会花费较长时间)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "40首您播放得最多的歌(如果有绑定的话,可能会多于40首)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "加入位置" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "输入音频文件的位置:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "无法添加位置" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> 不是合法的位置。" #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "添加音乐" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "监视这个文件夹的新曲目" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s 无法添加到您的库。\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "无法添加曲目" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "重命名文件" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "新的名字" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "显示错误(_E)" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "继续(_C)" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "无法重命名文件" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "路径不是绝对的" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "这些文件夹里的曲目(由“:”分隔)将会被加入到您的库里" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "选择目录" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "已保存值" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "编辑已保存的值..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "搜索" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "限制(_L):" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "权重(_W)" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "以 %s 过滤(_F)" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "专辑列表(_A)" #: ../quodlibet/qltk/songlist.py:1018 #, fuzzy msgid "_Track Headers" msgstr "音轨号" #: ../quodlibet/qltk/songlist.py:1019 #, fuzzy msgid "_Album Headers" msgstr "专辑列表(_A)" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "" #: ../quodlibet/qltk/songlist.py:1022 #, fuzzy msgid "_File Headers" msgstr "过滤器(_F)" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "" #: ../quodlibet/qltk/songlist.py:1037 msgid "Custom _Sort..." msgstr "" #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "" #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "加入到队列(_Q)" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "从播放列表里删除(_R)" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "音轨号" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "过滤器(_F)" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "专辑列表(_A)" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "过滤器(_F)" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "过滤器(_F)" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "音轨号" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "标签(_T):" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "自定义(_C)" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "用空格替换下划线(_U)" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "标题大小写标签(_T)" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "非法标签" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "无法编辑曲目" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "编辑显示" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "音轨号" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "开始于(_M):" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "总音轨数:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "音轨" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "" #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "正在保存改变过的曲目。" #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "清空搜索" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "名为 %s 的播放列表已经存在" #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "评分(_R)" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "显示版本和版权" #: ../quodlibet/util/__init__.py:142 #, python-format msgid "Usage: %s %s\n" msgstr "" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[选项]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "" #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "" #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "" #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[非法编码]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "" #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "" #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "" #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "专辑" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "作者" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "作曲" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "执导" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "版权" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "日期" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "描述" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "流派" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "组合" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "语言" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "许可" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "位置" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "作词" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "组织" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "标题" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "版本" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "网站" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "专辑歌手" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "唱片" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "音轨" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "原始发行日期" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "原始专辑" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "原始歌手" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "录制日期" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "专辑歌手" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "歌手" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "专辑歌手" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "演员" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "演员" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz 音轨 ID" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "MusicBrainz 音轨 ID" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "MusicBrainz 歌手 ID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz 专辑歌手 ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "" #: ../quodlibet/util/tags.py:79 #, fuzzy msgid "MusicBrainz album status" msgstr "MusicBrainz 专辑歌手 ID" #: ../quodlibet/util/tags.py:80 #, fuzzy msgid "MusicBrainz album type" msgstr "MusicBrainz 专辑 ID" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "音轨调整" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "专辑调整" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "" #: ../quodlibet/util/tags.py:88 msgid "reference loudness" msgstr "" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "唱片" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "音轨" #: ../quodlibet/util/tags.py:96 #, fuzzy msgid "last started" msgstr "最近一次播放" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "全名" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "挂载点" #: ../quodlibet/util/tags.py:105 #, fuzzy msgid "errors" msgstr "演员" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "年份" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "原始发行日期" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "书签" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "格式" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "作词" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "作曲" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "执导" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "作者" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d 秒" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d 分" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d 小时" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d 天" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d 年" #~ msgid "_Browse Library" #~ msgstr "浏览库(_B)" #, fuzzy #~ msgid "No eject command found." #~ msgstr "没有发现站点" #~ msgid "Unable to start web browser" #~ msgstr "无法启动网页浏览器" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "无法找到网页浏览器。请设定好您的 $BROWSER 变量,或者确保存在 /usr/bin/" #~ "sensible-browser。" #, fuzzy #~ msgid "Library Error" #~ msgstr "库浏览器" #~ msgid "translator-credits" #~ msgstr "Emfox Zhou <EmfoxZhou@gmail.com>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "其它要显示的栏,以空格分隔" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "继续(_C)" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "信息" #~ msgid "_Search:" #~ msgstr "搜索(_S):" #~ msgid "Search your library" #~ msgstr "搜索您的库" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "总大小:" #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet 插件" #~ msgid "Color _search terms" #~ msgstr "给搜索条件着色(_S)" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "简单搜索显示成蓝色,高级搜索绿色,非法搜索则是红色" #~ msgid "_Select" #~ msgstr "选择(_S)" #~ msgid "Separators for splitting tags" #~ msgstr "切分标签的分隔符" #, fuzzy #~ msgid "Display" #~ msgstr "编辑显示" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet 首选项" #~ msgid "Not Played To_day" #~ msgstr "今天没有播放过(_D)" #~ msgid "Not Played in a _Week" #~ msgstr "一星期没有播放过(_W)" #~ msgid "Not Played in a _Month" #~ msgstr "一个月没有播放过(_M)" #~ msgid "B_ottom 40" #~ msgstr "后40(_O)" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "40首您播放得最少的歌(如果有绑定的话,可能会多于40首)" #, fuzzy #~ msgid "Artist" #~ msgstr "歌手(_A)" #, fuzzy #~ msgid "Date" #~ msgstr "日期(_D)" #~ msgid "Choose New Stations" #~ msgstr "选择新的站点" #~ msgid "Add" #~ msgstr "加入" #, fuzzy #~ msgid "Bitrate" #~ msgstr "比特率" #~ msgid "_Stations..." #~ msgstr "站点(_S)..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "退出 Quod Libet" #~ msgid "Unable to save library" #~ msgstr "无法保存库" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "无法播放曲目" #~ msgid "_Information" #~ msgstr "信息(_I)" #~ msgid "Sort by title" #~ msgstr "按标题排序" #~ msgid "Sort by artist" #~ msgstr "按歌手排序" #~ msgid "Lyrics provided by %s." #~ msgstr "由 %s 提供的歌词。" #~ msgid "part" #~ msgstr "部分" #~ msgid "Opening audio device." #~ msgstr "正在打开音频设备。" #~ msgid "%d/%d songs saved" #~ msgstr "已保存 %d/%d 首曲目" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainz 专辑 ID" #~ msgid "Loaded song library." #~ msgstr "已导入曲目库。" #~ msgid "Unable to open audio device" #~ msgstr "无法打开音频设备" #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet 无法找到 Gstreamer 元素“filesrc”。检查您的 GStreamer 安装。" #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer 无法导入选定的曲目。" #, fuzzy #~ msgid "C_opy album covers" #~ msgstr "显示专辑封面(_C)" #~ msgid "W: %s is not a QL song database." #~ msgstr "警告:%s 不是 QL 的曲目数据库。" #~ msgid "tag" #~ msgstr "标签" #~ msgid "Per-song (\"Radio\") volume adjustment" #~ msgstr "单曲(“广播”)音量调整" #~ msgid "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "专辑(“Audiophile”)音量调整" #~ msgid "_Volume Normalization" #~ msgstr "音量整定" #~ msgid "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgstr "" #~ "正在扫描您的库。这可能要进行数分钟。\n" #~ "\n" #~ "重新导入了%d首曲目\n" #~ "删除了%d首曲目" #~ msgid "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgstr "" #~ "扫描新曲目并把它们添加到您的库里。\n" #~ "\n" #~ "加入了%d首曲目" #~ msgid "No new stations" #~ msgstr "没有新的站点" #~ msgid "M3U playlists cannot be loaded." #~ msgstr "M3U 播放列表无法导入。" #~ msgid "This station is already in your library." #~ msgstr "这个站点已经在您的库里。" #~ msgid "Tray Icon Preferences" #~ msgstr "系统托盘图标首选项" #~ msgid "Play _Order" #~ msgstr "播放次序(_O)" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/nl.po����������������������������������������������������������������������������0000644�0001750�0001750�00000250715�12173213426�015334� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# translation of nl.po to Nederlands # English translation of Quod Libet. # Copyright (C) 2005 THE Quod Libet'S COPYRIGHT HOLDER # This file is distributed under the same license as the Quod Libet package. # # dok <dok@xs4all.nl>, 2005. # Hans van Dok <dok@xs4all.nl>, 2005, 2006, 2007. msgid "" msgstr "" "Project-Id-Version: nl\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:33+0100\n" "Last-Translator: Hans van Dok <dok@xs4all.nl>\n" "Language-Team: Nederlands <en@li.org>\n" "Language: nl\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-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Audio tag editor" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Bewerk tags in je audio bestanden" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Muziek Speler" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Luister naar, browse, of bewerk je audio verzameling" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Speler" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Vooruitblik" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "een audio tag editor" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "directory" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Laat _programmatische commentaren zien" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "beschrijving" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Waarde" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Tag" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Audio tag editor" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 msgid "Remove tags" msgstr "" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 msgid "Remove all tags" msgstr "" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filter op tag waarde" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filter op tag waarde" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Geen tijdsinformatie" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Weergeven verkorte gebruikersinformatie" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> is geen geldige locatie." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Songs niet in een album" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Albumlijst Voorkeuren" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Laat album_covers zien" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Album Weergave" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d track" msgstr[1] "%d tracks" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disc" msgstr[1] "%d discs" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Ongeldig patroon" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Titel" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "A_rtiest" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "Dat_um" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "genre" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Cijfer" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Sorteer op datum" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Voorkeuren" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Albumlijst" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Albumlijst" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Alle albums" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d album" msgstr[1] "%d albums" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Laat album_covers zien" msgstr[1] "Laat album_covers zien" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Onbekend" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Nieuwe Feed" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Voer de locatie van een audio feed in:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Audio Feeds" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Audio Feeds" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Download..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Download Bestanden" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Download Bestand" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Niet in staat om feed toe te voegen" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> kon niet worden toegevoegd. De server is misschien down, of de " "locatie is geen audio feed." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Bibliotheek Browser" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d song (%(time)s)" msgstr[1] "%(count)d songs (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Onbekend" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Splits in _Verschillende Waarden" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Aangepast" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Albumlijst Voorkeuren" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Bestandssysteem" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Bestandssysteem" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Niet in staat om songs te kopiëren" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "De geselecteerde bestanden kunnen niet worden gekopiëerd naar andere " "songlijsten of de wachtrij." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Voeg toe aan Bibliotheek" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "File type wordt niet ondersteund" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Station lists kan alleen locaties van stations bevatten, geen andere station " "lists of playlists. De volgende locaties kunnen niet worden geladen:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Niet in staat om station toe te voegen" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Internet Radio" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Download Bestanden" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Nieuw Station" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Voer de locatie van een Internet radio station in." #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "cijfer" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Internet Radio" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Nieuw Station" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Nieuw Station" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Nieuw Station" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Geen stations gevonden" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Geen Internet radio stations werden gevonden op %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Alle vermelde stations zitten al in je collectie." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Verwijder uit Speellijst" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Voeg Toe Aan Speellijst" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d station" msgstr[1] "%(count)d stations" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Device Eigenschappen" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Device:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Niet gemount" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Mount Point:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Naam:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Media Devices" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Media Devices" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Verwijder" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Hernoem" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> gebruikt, <b>%s</b> beschikbaar" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> is niet aangesloten." #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "Kopiëert <b>%s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Niet in staat om song te kopiëren" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Er is onvoldoende beschikbare ruimte voor deze song." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> kon niet worden gekopiëerd." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Niet in staat om songs te verwijderen." #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Verwijdert <b>%s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> kon niet worden verwijderd." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Niet in staat om song te verwijderen." #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Verwijderen van <b>%s</b> mislukt." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Niet in staat om device te verwijderen" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Paned Browser Voorkeuren" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Alles" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Paned Browser" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Paned browser" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Selecteer _Alles" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Importeert speellijst.\n" "\n" "%d/%d songs toegevoegd." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Nieuwe Speellijst" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Voer een naam in voor de nieuwe folder:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Nieuwe Speellijst" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, fuzzy, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s en %(count)d meer" msgstr[1] "%(title)s en %(count)d meer" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Speellijsten" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Speellijsten" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Verwijder uit Speellijst" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importeer" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Niet in staat om speellijst importeren" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "" "Quod Libet kan aleen speellijsten in de M3U en PLS formaten importeren." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Shuffle" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Niet in staan om speellijst te hernoemen" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importeer Speellijst" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Zet Browser Uit" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Zet Browser Uit" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Doorzoek Bibliotheek" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Doorzoek Bibliotheek" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Beperk Resultaten" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Onbekend Device" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "E: '%s' is niet een unieke prefix." #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "Ongeldige waarde" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Volume Gain (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Kopiëer album_covers" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Combineer tags met _meerdere waarden" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Titel bevat _versie" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "Album bevat _deel" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Model:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Capaciteit:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 #, fuzzy msgid "Removing orphaned iPod track" msgstr "W:verwijdert wees iPod track" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Niet in staat om iPod database op te slaan" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Ongeïnitialiseerde iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Wil je een lege database creëren op deze iPod?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Bestandsnaam Patroon:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Verwijder ongebruikte covers en mappen" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Bestand bestaat" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "<b>%s</b> overschrijven?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Bibliotheek" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Check.mount points" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Scan song collectie" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Scant %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d seconde" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "Niet in staan om het bestanden te openen" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "Ongeldige waarde" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "Niet in staat om folder te maken" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet draait al" #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Momenteel wordt geen song gespeelt." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet draait niet." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Niet in staat om naar %s te schrijven." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "een muziek collectie en speler" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[opties]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Print de spelende song en exit" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Speel onmiddelijk" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Ga naar de volgende song" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Ga naar de vorige song" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Begin terugspelen" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Pauseer terugspelen" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Toggle play/pause mode" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Begin terugspelen" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Verhoog volume" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Verlaag volume" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Geef status speler weer" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Verberg hoofd window" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Vertoon hoofd window" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Toggle zichtbaarheid hoofd window" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Focus de spelende speler" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Verwijder actieve browser filters" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "Ver_vers collectie" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Print de huidige speellijst" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Print de inhoud van de queue" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Verlaat Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Zoek in spelende song" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][UU:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Zet of toggle de terugspeel volgorde" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Zet repeat aan, uit, of toggle ht" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Bepaal volume" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Zoek in je audio collectie" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "vraag" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Speel bestand" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "bestandsnaam" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Waardeer de spelende song" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Set de huidge browser" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Open een nieuwe browser" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Queue laten zien of verbergen" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Hoofd songlijst laten zien of verbergen" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filter op willekeurige waarde" #: ../quodlibet.py:340 msgid "command|tag" msgstr "tag" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filter op tag waarde" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tag=waarde" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Zet file of query in queue" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "bestandsnaam" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Haal file of query uit queue" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "E: Ongeldig argument voor '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "E: Probeer %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Ondersteunde formaten: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Audio-device: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Begin" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/A" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Tijd" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Bookmark Naam" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Bookmarks" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Geen tijdsinformatie" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Waarde:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Opgeslagen Waarden" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Bewerk opgeslagen waarden..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Songs" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Laat resterende tijd zien" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Bewerk Bookmarks..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "_Trackheaders" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "_Albumheaders" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Stop na deze song" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filter op tag waarde" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Verwijder bestanden" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Verplaats naar Vuilnisbak" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Permanent dit bestand verwijderen?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Permanent deze bestanden verwijderen?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s en %(count)d meer..." msgstr[1] "%(title)s en %(count)d meer..." #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "Verplaatst %d/%d." #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Verwijdert %d/%d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Niet in staat om iPod database op te slaan" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Verwijderen van <b>%s</b> mislukt." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Niet in staat om bestand te verwijderen" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Verwijderen van <b>%s</b> mislukt." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Downloads" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Bestandsnaam" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Grootte" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "_Wachtrij" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "patroon" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Bewerk opgeslagen waarden..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Vooruitblik" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Meer opties..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "(ontbreekt-in-%d-song)" msgstr[1] "(ontbreekt-in-%d-songs)" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "(verschilt over %d song)" msgstr[1] "(verschilt over %d songs)" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Splits in _Verschillende Waarden" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Splits Disc van _Album" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Splits _Versie uit Titel" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Splits Arrangeerder van ar_tiest" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Splits _Uitvoerende van Artiest" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Splits _Uitvoerende van Artiest" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Splits _Versie uit Titel" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Voeg een nieuwe tag toe" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Tag:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "ql-remove" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Bewerk Tags" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Schrijf" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Niet in staat om tag toe te voegen" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Niet in staat om <b>%s</b> toe te voegen\n" "\n" "De geselecteerde bestanden ondersteunen meerdere waarden niet." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Ongeldige tag" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Ongeldige tag <b>%s</b>\n" "\n" "De geselecteerde bestanden ondersteunen het bewerken van deze tag niet." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Tag is mogelijk niet juist" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "Het lijkt erop alsof <b>%s</b> was aangepast terwijl het programma opgestart " "was. Nu opslaan zonder uw collectie te verversen kan mogelijk andere " "veranderingen in deze tag overschrijven.\n" "\n" "Deze tag toch opslaan?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Niet in staat om song op te slaan" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Opslaan van <b>%s</b> mislukt. Het bestand is read-only, corrupt, of u heeft " "geen permissies om het aan te passen." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Ongeldige waarde" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Ongeldige waarde: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Plugins" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d song" msgstr[1] "%d songs" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso Voorkeuren" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Splits _op:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Laat _programmatische commentaren zien" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Tag Bewerken" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Folders" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Nieuwe Folder..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Selecteer Alle Subfolders" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Nieuwe folder" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Voer een naam in voor de nieuwe folder:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Niet in staat om folder te maken" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Niet in staat om folder te verwijderen" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "door %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Schijf %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Track %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Voeg Toe Aan Speellijst" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Bewerk Weergave..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Bewerk _Tags" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Speelt niet" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Schoon Fouten" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Er zijn geen songs geselecteerd." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Geen Songs" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informatie" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Tekst" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Errors" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artiest" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artiesten" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "uitvoerenden" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Nooit" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d keer" msgstr[1] "%d keren" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "toegevoegd" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "laatst gespeeld" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "speelt" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "skipt" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "cijfer" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "lengte" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "bestandsgrootte" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "gewijzigd" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitrate" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Bestand" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d geselecteerd" msgstr[1] "%d geselecteerd" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Geproduceerd door %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "uitvoerende" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Track niet beschikbaar" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Tracklijst" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d song zonder album" msgstr[1] "%d songs zonder album" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Selectieve Discografie" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d song zonder artiest" msgstr[1] "%d songs zonder artiest" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "albums" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "totale lengte:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "totale grootte:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Bestanden" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Download" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Geen tekst gevonden voor deze song." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Zoekt naar tekst..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Niet in staan om de tekst down te loaden." #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d station" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Gooi tag wijzigingen weg?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Tags zijn gewijzigd maar niet opgeslagen. Deze bestanden opslaan, of " "teruggaan en wijzigingen weggooien?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "Onbekend" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "In Volgorde" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_In Volgorde" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Shuffle" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Gewogen" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Gewogen" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Eén Song" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Eén Song" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Plugin Fouten" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Plugins" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Laat _Errors zien" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "versie" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "Zet Browser Uit" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Geen plugins gevonden" #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disc" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Track" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "groeperen" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bum" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Bestandsnaam" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Lengte" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Song-lijst" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Ga automatisch naar song die gespeeld wordt" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "" "Als de song die gespeeld wordt verandert, scroll ernaar in de songlijst" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Overige:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Bewerk Weergave..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Zichtbare Kolommen" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Titel bevat _versie" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Bestandsnaam bevat _folder" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Voorkeuren" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Browsers" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Globaal filter:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "Stop na deze song" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Zoek" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Als de song die gespeeld wordt verandert, scroll ernaar in de songlijst" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "_Cijfer" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Albumlijst" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Pauseer terugspelen" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "_Volume Gain (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "_Volume Gain (dB):" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "_Replay Gain volume aanpassing" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "_Replay Gain volume aanpassing" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Bewerk Tags" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Gooi tag wijzigingen weg?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "Sla waarderingen en speeltellingen op" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Email:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Waarderingen en speeltellingen worden bewaard voor dit email adres" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Nieuw Station" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "Ver_vers collectie" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "Ver_vers collectie" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Scan _Directories" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Geen Songs" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Voorkeuren" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Eigenschappen" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Wachtrij" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Verwijder alle songs uit de wachtrij" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Random" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Volgorde:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Herhaal" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Start de playlist opnieuw nadat alle songs gespeeld zijn" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Niet in staat om songs toe te voegen" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> gebruikt een protocol dat niet wordt ondersteund." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Muziek" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Voeg folder toe" #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Voeg Muziek Toe..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Voeg Locatie Toe..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Open een nieuwe browser" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filters" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Nooit Gespeeld" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Top 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Control" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Ga naar Spelende Song" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Weergave" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Help" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "_Schoon Fouten" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Zoek" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Ver_vers collectie" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Her_laad Bibliotheek" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filter op _Genre" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filter op _Artiest" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filter op Al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Random _Genre" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Random _Artiest" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Random Al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Song_lijst" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Controleer op wijzigingen in je collectie" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Herlaad alle songs in je collectie (dit kan lang duren)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "De 40 songs die je het meest hebt beluistered (meer dan 40 kunnen worden " "gekozen als er sprake is van gelijkspel)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Voeg Locatie Toe" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Voer de locatie van een audio bestand in:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Niet in staat om locatie toe te voegen" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> is geen geldige locatie." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Voeg Muziek Toe" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Bewaak deze folder voor nieuwe songs" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s kon niet worden toegevoegd aan je collectie.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Niet in staat om song toe te voegen" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Vervangen spaties door _underscores" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Verwijderen _Windows-incompatible karakters" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Verwijderen _diakrieten" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Verwijderen niet-_ASCII karakters" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Hernoem bestanden" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Nieuwe naam" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "Laat _Errors zien" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Ga door" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Niet in staan om het bestand te hernoemen" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Hernoemen van <b>%s</b> naar <b>%s</b> mislukt. Mogelijk bestaat de doelfile " "al, of heeft u geen permissie om het nieuwe bestand te maken of het oude " "bestand te verwijderen." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Pad is niet absoluut" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Het patroon\n" "\t<b>%s</b>\n" "bevat / maar begint niet op root niveau. Om verkeerd genaamde directories te " "voorkomen, moet je het patroon rooten door te beginnen met de / directory." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Alle songs in deze directories (gescheiden door ':') worden toegevoegd aan " "je collectie" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Kies Directories" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Opgeslagen Waarden" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Bewerk opgeslagen waarden..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Zoek" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limiet:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Gewogen" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filter op %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "_Albumheaders" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_Trackheaders" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Albumheaders" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_Mensenheaders" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Datumheaders" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_Bestandsheaders" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "_Productieheaders" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Pas Headers Aan" #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Pas Headers Aan" #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Voeg Toe Aan _Wachtrij" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Kopiëer naar device " #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Verwijder uit Speellijst" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "_Trackheaders" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "_Mensenheaders" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "_Albumheaders" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "_Datumheaders" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "_Bestandsheaders" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "_Productieheaders" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Tag:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Aangepast" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Vervang _underscores door spaties" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Resultaat in hoofdletters" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Splits in verschillende _waarden" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Tags vanuit path" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Tags vervangen bestaande tags" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Tags worden toegevoegd aan de bestaande tags" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Het patroon\n" "\t<b>%s</b>\n" "is ongeldig. Mogelijk bevat het dezelfde tag twee keer of heeft het " "ongebalanceerde haakjes (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Ongeldige tags" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Ongeldige tags <b>%s</b>\n" "\n" "De geselecteerde bestanden ondersteunen het bewerken van deze tags niet." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Niet in staat om song aan te passen" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Het patroon dat je hebt ingevoerd is onjuist. Verifïeer dat je < en > " "hebt ingevoerd als \\< en \\> en dat de tags gebalanceerd zijn.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Bewerk Display" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Track nummers" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Begin va_n:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Totaal tracks:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Track" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "en %d meer..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Slaat aangepaste songs op." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d van %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Schoon zoektekst" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Een speellijst genaamd %s bestaat al." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "_Cijfer" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Weergeven verkorte gebruikersinformatie" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Weergeven versie en copyright" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Gebruik: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[opties]" #: ../quodlibet/util/__init__.py:186 #, fuzzy, python-format msgid "Option %r not recognized." msgstr "E: Optie '%s' niet herkend." #: ../quodlibet/util/__init__.py:189 #, fuzzy, python-format msgid "Option %r requires an argument." msgstr "E: Optie '%s' vereist een argument." #: ../quodlibet/util/__init__.py:192 #, fuzzy, python-format msgid "%r is not a unique prefix." msgstr "E: '%s' is niet een unieke prefix." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Ongeldige codering]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "check|titlecase?" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "De datum moet ingevoerd worden in 'JJJJ', 'JJJJ-MM-DD' of 'JJJJ-MM-DD UU:MM:" "SS' formaat." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Replay Gain gains moeten worden ingevoerd in 'x.yy dB' formaat." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Replay Gain peaks moeten worden ingevoerd in 'x.yy' formaat." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz IDs moeten in UUID formaat zijn." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz release status moet zijn: 'official', 'promotional', of 'bootleg'" #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "arrangeur" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "auteur" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "componist" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "dirigent" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "contact" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "datum" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "beschrijving" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "genre" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "groeperen" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "taal" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licentie" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "locatie" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "tekstschrijver" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organisatie" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "titel" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "versie" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "website" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "albumartiest" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disc" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "track" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "label ID" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "originele release datum" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "originele album" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "originele artiest" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "opnamedatum" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "release land" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "albumartiest" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "artiesten" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "albumartiest" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "uitvoerenden" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "uitvoerenden" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz track ID" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "MusicBrainz track ID" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "MusicBrainz artiest ID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz album artiest ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz album status" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz album type" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "track gain" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "track peak" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "album gain" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "album peak" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Voorkeuren" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "discs" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "tracks" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "laatst gestart" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "volledige naam" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "mount point" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "errors" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "mensen" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "jaar" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "originele release datum" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "Bookmarks" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "formaat" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "tekstschrijvers" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "arrangeurs" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "componisten" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "dirigenten" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "auteurs" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d seconde" msgstr[1] "%d seconden" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuut" msgstr[1] "%d minuten" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d uur" msgstr[1] "%d uren" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d dag" msgstr[1] "%d dagen" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d jaar" msgstr[1] "%d jaren" #~ msgid "_Browse Library" #~ msgstr "_Weergave Bibliotheek" #~ msgid "No eject command found." #~ msgstr "Geen verwijder commando gevonden." #~ msgid "Unable to start web browser" #~ msgstr "Niet in staat om een webbrowser te starten" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Een web browser kon niet niet gevonden worden Stel alstublieft uw " #~ "$BROWSER variabele in, of controleer that /usr/bin/sensibe-browser " #~ "bestaat." #, fuzzy #~ msgid "Library Error" #~ msgstr "Bibliotheek Browser" #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Kopiëer naar device " #~ msgid "translator-credits" #~ msgstr "Hans van Dok" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Andere kopjes om weer te geven, gescheiden door spaties" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "_Ga door" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "Informatie" #~ msgid "_Search:" #~ msgstr "_Zoek:" #~ msgid "Search your library" #~ msgstr "Zoek in je audio collectie" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, en anderen\n" #~ "\n" #~ "Dit is vrije software; zie de broncode voor kopieer-voorwaarder. Er is " #~ "GEEN\n" #~ "garantie; zelfs niet voor VERKOOPBAARHEID of NUT VOOR EEN GEGEVEN DOEL.\n" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "totale grootte:" #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet Plugins" #~ msgid "Color _search terms" #~ msgstr "Kleur _zoektermen" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Geef eenvoudige zoekopdrachten weer in blauw, ingewikkelde in groen, en " #~ "ongeldige in rood" #~ msgid "_Select" #~ msgstr "_Selecteer" #~ msgid "Separators for splitting tags" #~ msgstr "Seperatoren om tags the splitsen" #, fuzzy #~ msgid "Display" #~ msgstr "Bewerk Display" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet Voorkeuren" #~ msgid "Not Played To_day" #~ msgstr "Vandaag Niet Ge_speeld" #~ msgid "Not Played in a _Week" #~ msgstr "Een _Week Niet Gespeeld" #~ msgid "Not Played in a _Month" #~ msgstr "Een _Maand Niet Gespeeld" #~ msgid "B_ottom 40" #~ msgstr "_Onderste 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "De 40 songs die je het minst heb beluisterd (meer dan 40 kunnen worden " #~ "gekozen als er sprake is van gelijkspel)" #~ msgid "gtk-media-next" #~ msgstr "gtk-media-next" #~ msgid "gtk-media-previous" #~ msgstr "gtk-media-previous" #~ msgid "gtk-media-play" #~ msgstr "gtk-media-play" #~ msgid "gtk-media-pause" #~ msgstr "gtk-media-pause" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-spelend | controle ]" #, fuzzy #~ msgid "Artist" #~ msgstr "A_rtiest" #, fuzzy #~ msgid "Date" #~ msgstr "Dat_um" #~ msgid "Choose New Stations" #~ msgstr "Kies Nieuwe Stations" #~ msgid "Add" #~ msgstr "Voeg toe" #, fuzzy #~ msgid "Bitrate" #~ msgstr "bitrate" #~ msgid "_Stations..." #~ msgstr "_Stations..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Verlaat Quod Libet" #~ msgid "Unable to save library" #~ msgstr "Niet in staat om collectie op te slaan" #~ msgid "_Information" #~ msgstr "_Informatie" #~ msgid "Sort by title" #~ msgstr "Sorteer op titel" #~ msgid "Sort by artist" #~ msgstr "Sorteer op artiest" #~ msgid "Lyrics provided by %s." #~ msgstr "Tekst gegeven door %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Geen tekst gevonden.\n" #~ "\n" #~ "Je kunt clicken op de Download knop om Quod Libet online te laten zoeken " #~ "naar de tekst. Je kunt ze ook zelf invoeren en op save clicken. " #~ msgid "part" #~ msgstr "deel" #~ msgid "Opening audio device." #~ msgstr "Opent audio device" #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d songs opgeslagen" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainz album ID" #~ msgid "Loaded song library." #~ msgstr "geladen song collectie" #~ msgid "Unable to open audio device" #~ msgstr "Niet in staat om audio device te openen" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet probeerde toegang the krijgen tot de 'autosink' en '%(sink)s' " #~ "drivers maar kon ze niet openen. Set je GStreamer pipeline door de regel\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "aan te passen in ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet kon het 'filesrc' GStreamer element niet vinden. Check je " #~ "GStreamer installatie." ���������������������������������������������������quodlibet-3.0.2/po/uk.po����������������������������������������������������������������������������0000644�0001750�0001750�00000300164�12173213426�015334� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Ukrainian translation of Quod Libet # Copyright (C) 2007'S THE quodlibet'S COPYRIGHT HOLDER # This file is distributed under the same license as the Quod Libet package. # Mykola Lynnyk <pydefiner@gmail.com>, 2007. # msgid "" msgstr "" "Project-Id-Version: Quod Libet 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:33+0100\n" "Last-Translator: Mykola Lynnyk <pydefiner@gmail.com>\n" "Language-Team: Ukrainian\n" "Language: uk\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" "X-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Редактор аудіо-тегів" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Програма для редагування тегів аудіо-файлів" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Музичний програвач" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Програма для прослуховування і керування аудіо-колекцією" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Програвач" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Попередній перегляд" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "програма для редагування аудіо-тегів" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "каталог" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Показувати _програмні теги" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "опис" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Значення" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Тег" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Редактор аудіо-тегів" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 msgid "Remove tags" msgstr "" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 msgid "Remove all tags" msgstr "" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Фільтрувати за тегом" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Фільтрувати за тегом" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Немає інформації про час" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Вивести коротку інформацію з користування" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> не є правильною адресою." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Пісні, що не входять в альбом" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Налаштування списку альбомів" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Показувати _обкладинки альбомів" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Перегляд альбомів" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d трек" msgstr[1] "%d треки" msgstr[2] "%d треків" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d диск" msgstr[1] "%d диски" msgstr[2] "%d дисків" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Неправильний шаблон" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Назва" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Виконавець" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Дата" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "жанр" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Рейтинг" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "За датою" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Налаштування" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Список альбомів" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "Список _альбомів" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Всі альбоми" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d альбом" msgstr[1] "%d альбомb" msgstr[2] "%d альбомів" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Показувати _обкладинки альбомів" msgstr[1] "Показувати _обкладинки альбомів" msgstr[2] "Показувати _обкладинки альбомів" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Невідомо" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Новий фід" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Введіть адресу аудіо-фіду" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Аудіо-фіди" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Аудіо-фіди" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Завантажити..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Завантажити файли" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Завантажити файл" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Не вдалося додати фід" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "Не вдається додати <b>%s</b>. Можливо, вказаний сервер не працює, або адреса " "не є аудіо-фідом." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Перегляд бібліотеки" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d пісня (%(time)s)" msgstr[1] "%(count)d пісні (%(time)s)" msgstr[2] "%(count)d пісень (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Невідомо" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "_Розділити на кілька значень" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Інший" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Налаштування списку альбомів" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Файлова система" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Файлова система" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Не вдалося скопіювати пісню" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Вибрані файли не можуть бути скопійовані до іншого списку пісень або черги." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Додати до бібліотеки" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Непідтримуваний тип файлу" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Списки станцій можуть містити лише адреси станцій, але не списки станцій або " "списки програвання. Не вдалося завантажити такі станції:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Не вдалося додати станцію" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Інтернет-радіо" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Завантажити файли" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Нова станція" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Введіть адресу інтернет-радіостанції:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "рейтинг" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Інтернет-радіо" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Нова станція" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Нова станція" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Нова станція" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Станцій не знайдено" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "За адресою %s інтернет-радіостанцій не знайдено" #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Всі перелічені станції вже є в бібліотеці." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Вилучити зі cписку програвання" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Додати до списку програвання" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d станція" msgstr[1] "%(count)d станції" msgstr[2] "%(count)d станцій" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Властивості пристрою" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Пристрій:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Не змонтовано" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Точка монтування:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Назва:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Медіа-пристрої:" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Медіа-пристрої" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Витягнути" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Перейменувати" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> використано, <b>%s</b> наявно" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> не під'єднано" #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "Копіювання <b>%s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Не вдалося скопіювати пісню" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Недостатньо вільного місця для цієї пісні." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> не може бути скопійовано." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Не вдалося видалити пісні" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Видалення <b>%s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> не може бути видалений." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Не вдалося видалити пісню" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Не вдалося витягнути <b>%s</b>." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Не вдалося витягнути пристрій" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Налаштування 'Вибору пісень''" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Всі" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Вибір пісень" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "В_ибір пісень" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Вибрати _все" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Імпортується список програвання.\n" "\n" "%d/%d пісень додано." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Новий список програвання" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Введіть назву нового каталоги" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Новий список програвання" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, fuzzy, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s та %(count)d інших" msgstr[1] "%(title)s та %(count)d інших" msgstr[2] "%(title)s та %(count)d інших" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Списки програвання" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Списки програвання" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Вилучити зі cписку програвання" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Імпортувати" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Не вдалося імпортувати список програвання" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "" "Quod Libet здатне імпортувати списки програвання тільки у форматах M3U та " "PLS." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Випадково" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Не вдалося перейменувати список програвання" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Імпортувати список програвання" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Вимкнути переглядач" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Вимкнути переглядач" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Пошук в бібліотеці" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Пошук бібліотекою" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Обмежити результати" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Невідомий пристрій" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "E: '%s' неоднозначний" #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "Неправильне значення" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "Приріст гучності (дБ):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Копіювати обкладинки _альбомів" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Комбінувати теги з _різними значеннями" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Назва включає _версію" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "Альбом включає _частину" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Модель:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Ємність:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Мікропрограми:" #: ../quodlibet/devices/ipod.py:181 #, fuzzy msgid "Removing orphaned iPod track" msgstr "W: видалення 'самотнього' треку iPod" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Не вдалося зберегти базу iPod" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Неініціалізований iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Бажаєте створити порожню базу на цьому iPod?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Шаблон назви файлу:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Видалити невикористовувані обкладинки та каталоги" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Файл існує" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Перезаписати <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Бібліотека" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Перевірка точок монтування" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Сканування бібліотеки" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Сканування %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d секунда" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "Не вдалося відкрити файл" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "Неправильне значення" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "Не вдалося створити каталог" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet вже запущено." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "На даний момент програвання не відбувається." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet не запущено." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Запис в %s не є можливим, файл буде видалено." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "музична бібліотека та програвач" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[параметри]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Показати, яка пісня програється, і вийти" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Відразу почати програвання" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Перейти до наступної пісні" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Перейти до попередньої пісні" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Почати програвання" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Призупинити програвання" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Перемикнути режим програвання/паузи" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Почати програвання" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Збільшити гучність" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Зменшити гучність" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Показати стан програвача" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Сховати головне вікно" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Показати головне вікно" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Показати/сховати головне вікно" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Помістити фокус на вікно Quod Libet" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Видалити фільтри активного переглядача" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "_Оновити бібліотеку" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Показати поточний список програвання" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Показати вміст черги" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Вийти з Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Переміститись всередині відтворюваної пісні" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][ГГ:]ХХ:СС" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Перемикнути порядок програвання" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Увімкнути/вимкнути/перемикнути повторення" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Встановити гучність" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Шукати в бібліотеці" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "запит" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Відтворити файл" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "команда|назва файлу" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Оцінити відтворювану пісню" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Встановити режим перегляду бібліотеки" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Відкрити новий переглядач" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Показати/сховати чергу" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Показати/сховати список пісень" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Фільтрувати за випадковим параметром" #: ../quodlibet.py:340 msgid "command|tag" msgstr "команда|тег" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Фільтрувати за тегом" #: ../quodlibet.py:341 msgid "tag=value" msgstr "тег=значення" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Додати в чергу файл або результат пошуку" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "назва файлу" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Видалити з черги файл або результат пошуку" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "E: Неправильний аргумент для '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "E: Спробуйте %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Підтримуються формати: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Аудіо-пристрій: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Початок" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "Немає" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Час" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Назва закладки" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "ХХ:СС" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Закладки" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Немає інформації про час" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Значення:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Збережені значення" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Редагувати збережені параметри..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Пісні" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Відображати час, що лишився" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Редагувати закладки..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "_Трек" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "_Альбом" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Зупинитись після цієї пісні" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Фільтрувати за тегом" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Видалення фалів" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Перемістити в Trash" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Назавжди видалити цей файл?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Назавжди видалити ці файли?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s та %(count)d інших..." msgstr[1] "%(title)s та %(count)d інших..." msgstr[2] "%(title)s та %(count)d інших..." #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "Перенесення %d/%d." #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Видалення %d/%d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Не вдалося зберегти базу iPod" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Не вдалося витягнути <b>%s</b>." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Не вдалося видалити файл" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Не вдалося видалити <b>%s</b>." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Завантаження" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Назва файлу" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Розмір" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "_Черга" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "шаблон" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Редагувати збережені параметри..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Попередній перегляд" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Додаткові параметри..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "відсутнє у %d пісні" msgstr[1] "відсутнє у %d пісень" msgstr[2] "відсутнє у %d пісень" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "різне у %d пісні" msgstr[1] "різне у %d пісень" msgstr[2] "різне у %d пісень" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "_Розділити на кілька значень" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Відділити номер диску від альбому" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Відділити _версію від назви" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Відділити аранжувальника від _виконавця" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Відділити поле \"виконавець \" від поля \"артист\"" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Відділити поле \"виконавець \" від поля \"артист\"" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Відділити _версію від назви" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Додати тег" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Тег" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "_Видалити з бібліотеки" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Редагувати теги" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Записати" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Не вдалося додати тег" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Не вдалося додати <b>%s</b>\n" "\n" "Вибрані файли не підтримують множинні значення." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Неправильний тег" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Неправильний тег <b>%s</b>\n" "\n" "Вибрані файли не підтримують редагування цього тега." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Тег може бути невірним" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> змінився, поки ви працювали. Збереження змін без оновлення " "бібліотеки може призвести до перезапису інших змін. \n" "\n" "Зберегти пісню незважаючи на це?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Не вдалося зберегти пісню" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Не вдалося зберегти <b>%s</b>. Можливо, файл відкритий тільки для читання, " "зіпсовано, або у вас недостатньо прав на його зміну." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Неправильне значення" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Неправильне значення: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Розширення" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d пісня" msgstr[1] "%d пісні" msgstr[2] "%d пісень" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Налаштування Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "_Розділяти по:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Показувати _програмні теги" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Редагування тегів" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Каталоги" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Створити каталог..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Вибрати всі підкаталоги" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Створення каталогу" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Введіть назву нового каталоги" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Не вдалося створити каталог" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Не вдалося видалити каталог" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "%s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Диск %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Трек %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Додати до списку програвання" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Змінити зовнішній вигляд..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Редагувати _теги" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Не грає" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Очистити помилки" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Не вибрано жодної пісні" #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Немає пісень" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Інформація" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Текст пісні" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Помилки" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "артист" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "виконавці" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "виконавці" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Ніколи" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d раз" msgstr[1] "%d рази" msgstr[2] "%d разів" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "доданий" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "востаннє відтворено" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "відтворень" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "перервано" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "рейтинг" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d Кбіт/с" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "тривалість" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "розмір файлу" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "змінено" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "бітрейт" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Файл" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d вибрано" msgstr[1] "%d вибрано" msgstr[2] "%d вибрано" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Продюсер: %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "виконавець" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Трек недоступний" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Список треків" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d пісня з невказаним альбомом" msgstr[1] "%d пісні з невказаним альбомом" msgstr[2] "%d пісень з невказаним альбомом" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Вибрані альбоми" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d пісня з невказаним виконавцем" msgstr[1] "%d пісні з невказаним виконавцем" msgstr[2] "%d пісень з невказаним виконавцем" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "альбоми" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Загальна тривалість:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Загальний розмір:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Файли" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Завантажити" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Для цієї пісні текст не знайдено." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Пошук тексту пісні..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Не вдалося завантажити текст пісні." #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d станція" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Скасувати зміни в тегу?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Теги було змінено, але зміни не були збережені. Зберегти їх чи повернути " "зміни?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "Невідомо" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "По порядку" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_По порядку" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Випадково" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "За оцінками" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_За оцінками" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Одна пісня" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Одна пісня" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Помилки розширень" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Розширення" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "_Помилки" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "версія" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "Вимкнути переглядач" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Розширень не знайдено" #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Диск" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Номер треку" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "групування" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "_Альбом" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "Назва _файлу" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Тривалість" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Список пісень" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "" "Автоматично переходити _до відтворюваної \n" "пісні" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "При зміні пісні переходити до неї в списку програвання" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Інші:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Змінити зовнішній вигляд..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Стовпець" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Назва включає _версію" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Назва файлу включає _каталог" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Налаштування" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Вибір пісень" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Загальний фільтр" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "Зупинитись після цієї пісні" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Пошук" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "При зміні пісні переходити до неї в списку програвання" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "_Рейтинг" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Список альбомів" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Призупинити програвання" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "Приріст гучності (дБ):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "Приріст гучності (дБ):" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "Корегування гучності Replay Gain" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "Корегування гучності Replay Gain" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Редагувати теги" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Скасувати зміни в тегу?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "Зберігати рейтинги та лічильники програвань" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Електронна пошта:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Рейтинги та лічильники програвань будуть прив'язані до цієї адреси" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Нова станція" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "_Оновити бібліотеку" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "_Оновити бібліотеку" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "_Сканувати каталоги" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Немає пісень" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Налаштування" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Властивості" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Черга" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Видалити всі пісні з черги" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Випадково" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Порядок:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Повторювати" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Почати спочатку після програвання всіх пісень" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Не вдається додати пісні" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> використовує протокол, що не підтримується." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Музика" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Додати каталог..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Додати файл..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Додати адресу..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Відкрити новий переглядач" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Фільтри" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "Що _ніколи не відтворювались" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "40 _кращих" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Керування" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Перейти до відтворюваної пісні" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Вигляд" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Довідка" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "_Очистити помилки" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Пошук" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "_Оновити бібліотеку" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "_Перезавантажити бібліотеку" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Фільтрувати за _жанром" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Фільтрувати за _виконавцем" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Фільтрувати за _альбомом" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Випадковий _жанр" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Випадковий _виконавець" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Випадковий _альбом" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Список пісень" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Перевірити наявність змін в бібліотеці" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Перезавантажити всі пісні в бібліотеці (це може зайняти багато часу)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "40 пісень, що відтворювались найчастіше (може бути вибрано більше 40,якщо є " "пісні, що відтворювались однакову кількість разів)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Додати адресу" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Введіть адресу аудіо-файлу:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Не вдалося додати адресу" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> не є правильною адресою." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Додати музику" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Слідкувати за появою нових пісень в цьому каталозі" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "Не вдалося додати %s в бібліотеку.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Не вдалося додати пісню" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Замінити пробіли на підкреслення" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Замінити _Windows-несумісні символи" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Замінити _діакритичні знаки" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Замінити не-_ASCII символи" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Перейменувати файли" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Нова назва" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "_Помилки" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Продовжити" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Не вдалося перейменувати файл" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Не вдалося перейменувати <b>%s</b> на <b>%s</b>. Можливо, цільовий файл вже " "існує, або ви не маєте прав для створення нового чи видалення старого файлу." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Неабсолютний шлях" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Шаблон\n" "\t<b>%s</b>\n" "містить /, але починається не з кореневого каталогу. Для запобігання помилок " "в назвах каталогів, почніть шаблон з кореневого каталогу." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Пісні, розташовані в цих каталогах (розділені ':'), будуть додані до " "бібліотеки" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Вибір каталогів" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Збережені значення" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Редагувати збережені параметри..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Пошук" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Обмеження:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "За _оцінками" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Фільтрувати по %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "_Альбом" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_Трек" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Альбом" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_Люди" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Дата" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_Файл" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "_Виробництво" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Налаштувати заголовки..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Налаштувати заголовки..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Додати до _черги" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Копіювати до пристрою" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Вилучити зі cписку програвання" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "_Трек" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "_Люди" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "_Альбом" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "_Дата" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "_Файл" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "_Виробництво" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Тег" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Інший" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Замінити підкреслення на пробіл" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "Замінити першу букву кожного слова великою" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "_Розділити на кілька значень" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Теги з імен файлів" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Теги замінять існуючі" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Теги будуть додані до існуючих" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Шаблон\n" "\t<b>%s</b>\n" "є недопустимим. Можливо, він містить незакриті лапки (< / >) або " "повторений двічі тег." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Неправильні теги" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Недопустимі теги <b>%s</b>\n" "\n" "Вибрані файли не підтримують редагування цих тегів." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Не вдалося редагувати пісню" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Введений вами шаблон є невірним. Переконайтесь, що ви ввели < та > як " "\\< и \\>, а також що відкриті теги вже закриті.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Змінити зовнішній вигляд" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Номери треків" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Починати _з:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Всього треків:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Трек" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "%d інших..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Збереження змінених вами пісень." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d з %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Очистити поле пошуку" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Список програвання %s вже існує." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "_Рейтинг" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Вивести коротку інформацію з користування" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Вивести версію та інформацію про авторські права" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Використання: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[параметри]" #: ../quodlibet/util/__init__.py:186 #, fuzzy, python-format msgid "Option %r not recognized." msgstr "E: Невідомий параметр '%s'" #: ../quodlibet/util/__init__.py:189 #, fuzzy, python-format msgid "Option %r requires an argument." msgstr "E: Параметр '%s' вимагає аргументу." #: ../quodlibet/util/__init__.py:192 #, fuzzy, python-format msgid "%r is not a unique prefix." msgstr "E: '%s' неоднозначний" #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Неправильне кодування]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "check|titlecase?" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Дату слід вводити в форматі 'РРРР', 'РРРР-ММ-ДД' або 'РРРР-ММ-ДД ГГ:ХХ:СС'" #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Підсилення Replay Gain слід вводити в форматі 'x.yy dB'." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Піки Replay Gain слід вводити в форматі 'x.yy'" #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "" "Ідентифікатори MusicBrainz повинні бути в форматі UUID (унікальний " "ідентифікатор)." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "Статус випуску MusicBrainz повинен бути 'official', 'promotional', або ж " "'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "альбом" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "аранжувальник" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "автор" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "композитор" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "диригент" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "зв'язок" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "авторське право" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "дата" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "опис" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "жанр" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "групування" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "мова" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "ліцензія" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "місце запису" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "автор слів" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "організація" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "назва" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "версія" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "веб-сайт" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "автор альбому" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "ударів на хвилину" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "диск" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "трек" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "ID видавця" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "оригінальна дата випуску" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "оригінальний альбом" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "оригінальний виконавець" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "дата запису" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "країна випуску" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "автор альбому" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "виконавці" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "автор альбому" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "виконавці" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "виконавці" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "Ідентифікатор треку MusicBrainz" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "Ідентифікатор треку MusicBrainz" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "Ідентифікатор виконавця MusicBrainz" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "Ідентифікатор альбому MusicBrainz" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "Ідентифікатор TRM MusicBrainz" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "Статус альбому MusicBrainz" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "Тип альбому MusicBrainz" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "підсилення треку" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "пік треку" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "підсилення альбому" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "пік альбому" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Налаштування" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "диски" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "треки" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "востаннє запущено" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "повна назва" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "точка монтування" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "помилки" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "люди" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "рік" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "оригінальна дата випуску" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "Закладки" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "формат" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "автори слів" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "аранжувальники" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "композитори" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "диригенти" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "автори" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d секунда" msgstr[1] "%d секунди" msgstr[2] "%d секунд" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d хвилина" msgstr[1] "%d хвилини" msgstr[2] "%d хвилин" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d година" msgstr[1] "%d години" msgstr[2] "%d годин" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d день" msgstr[1] "%d дні" msgstr[2] "%d днів" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d рік" msgstr[1] "%d роки" msgstr[2] "%d років" #~ msgid "_Browse Library" #~ msgstr "_Переглянути бібліотеку" #~ msgid "No eject command found." #~ msgstr "Не знайдено команди для витягування" #~ msgid "Unable to start web browser" #~ msgstr "Не вдалося запустити веб-бровзер" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Не вдалося знайти веб-бровзер. Присвойте змінній $BROWSER значення,або " #~ "переконайтесь, що /usr/bin/sensible-browser існує." #, fuzzy #~ msgid "Library Error" #~ msgstr "Перегляд бібліотеки" #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Копіювати до пристрою" #~ msgid "translator-credits" #~ msgstr "Микола 'Cthulhu' Линник <pydefiner@gmail.com>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Інші стовпці до відображення, через пробіл" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "_Продовжити" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "Інформація" #~ msgid "_Search:" #~ msgstr "_Пошук" #~ msgid "Search your library" #~ msgstr "Шукати в бібліотеці" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, and others\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Загальний розмір:" #~ msgid "Quod Libet Plugins" #~ msgstr "Розширення Quod Libet" #~ msgid "Color _search terms" #~ msgstr "_Виділяти кольором критерій пошуку" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Виділяти простий пошук синім кольором, розширений - зеленим, неправильний " #~ "- червоним" #~ msgid "_Select" #~ msgstr "_Вибрати" #~ msgid "Separators for splitting tags" #~ msgstr "Символи розділення тегів" #, fuzzy #~ msgid "Display" #~ msgstr "Змінити зовнішній вигляд" #~ msgid "Quod Libet Preferences" #~ msgstr "Налаштування Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "Що не відтворювались _сьогодні" #~ msgid "Not Played in a _Week" #~ msgstr "Що не відтворювались _тиждень" #~ msgid "Not Played in a _Month" #~ msgstr "Що не відтворювались _місяць" #~ msgid "B_ottom 40" #~ msgstr "40 _гірших" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "40 пісень, що відтворювались найрідше (може бути вибрано більше 40,якщо є " #~ "пісні, що відтворювались однакову кількість разів)" #, fuzzy #~ msgid "Artist" #~ msgstr "_Виконавець" #, fuzzy #~ msgid "Date" #~ msgstr "_Дата" #~ msgid "Choose New Stations" #~ msgstr "Виберіть нові станції" #~ msgid "Add" #~ msgstr "Додати" #, fuzzy #~ msgid "Bitrate" #~ msgstr "бітрейт" #~ msgid "_Stations..." #~ msgstr "_Станції..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Вийти з Quod Libet" #~ msgid "Unable to save library" #~ msgstr "Не вдалося зберегти бібліотеку" #~ msgid "_Information" #~ msgstr "_Інформація" #~ msgid "Sort by title" #~ msgstr "За назвою" #~ msgid "Sort by artist" #~ msgstr "За виконавцем" #~ msgid "Lyrics provided by %s." #~ msgstr "Текст пісні наданий %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Текст пісні не знайдено.\n" #~ "\n" #~ "Ви можете натиснути кнопку Завантажити, щоб Quod Libet спробував знайти " #~ "текст пісні в Інтернеті. Також ви можете ввести текст самостійно, і потім " #~ "натиснути Зберегти." #~ msgid "part" #~ msgstr "частина" #~ msgid "Opening audio device." #~ msgstr "Відкриваю аудіо-пристрій" #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d пісень збережено" #~ msgid "MusicBrainz album ID" #~ msgstr "Ідентифікатор альбому MusicBrainz" #~ msgid "Loaded song library." #~ msgstr "Бібліотеку пісень завантажено" #~ msgid "Unable to open audio device" #~ msgstr "Не вдалося відкрити аудіо-пристрої" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet спробував отримати доступ до драйверів 'autosink' та " #~ "'%(sink)s', але не зміг відкрити їх. Встановіть GStreamer pipeline, " #~ "змінивши рядок\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "в in ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet не зміг знайти елемент 'filesrc' GStramer. Перевірте вашу " #~ "інсталяцію GStramer." ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/he.po����������������������������������������������������������������������������0000644�0001750�0001750�00000270103�12173213426�015310� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Hebrew translation of QuodLibet. # Copyright (C) 2005 THE QuodLibet'S COPYRIGHT HOLDER # This file is distributed under the same license as the QuodLibet package. # johnny5 <johnny5@hde.co.il>, 2005. # # msgid "" msgstr "" "Project-Id-Version: Quod Libet 0.16\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:34+0100\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he\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-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "עורך תגיות שירים" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "הכנס את כתובת האינטנרט של קובץ המוסיקה" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "נגן מוסיקה" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "האזן, עיין וערוך את אוסף המוסיקה שלך" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "נגן" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_תצוגה מקדימה" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "עורך תגיות שירים" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "ספריה" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "_הצג תגיות תיכנותיות" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "תיאור" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "ערך" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "תגית" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "עורך תגיות שירים" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "_הסר תחנה" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "הסר תגית נבחרת" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 msgid "Remove a tag value" msgstr "" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "הוסף תגית" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "נתוני זמן חסרים" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "נתוני זמן חסרים" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "הנתיב <b>%s</b> אינו נתיב חוקי" #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "שירים ללא אלבום" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "מאפייני רשימת אלבומים" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "ה_צג עטיפות אלבומים" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "תצוגת אלבום" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d רצועה" msgstr[1] "%d רצועות" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d תקליטור" msgstr[1] "%d תקליטורים" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "תבנית שגויה" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "שם" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "א_מן" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "ת_אריך" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "סגנון" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "ד_ירוג" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "מיין לפי תאריך" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "מאפיינים" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "רשימת אלבומים" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "רשימת א_לבומים" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "כל האלבומים" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d אלבום" msgstr[1] "%d אלבומים" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "ה_צג עטיפות אלבומים" msgstr[1] "ה_צג עטיפות אלבומים" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "לא ידוע" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "ערוץ חדש" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "הכנס את הכתובת אינטנרט של ערוץ השמע" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "ערוצי שמע" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_ערוצי שמע" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_הורדה..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "הורד קבצים" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "הורד קובץ" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "לא ניתן להוסיף את הערוץ המבוקש" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "לא ניתן היה לוסיף את <b>%s</b>. יתכן שהשרת לא זמין כעת או שהנתיב אינו נתיב " "לערוץ שמע" #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "דפדפן הספריה" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "שיר %(count)d (%(time)s)" msgstr[1] "%(count)d שירים (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "לא ידוע" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "פצל ל_ערכים נפרדים" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_חופשי" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "מאפייני רשימת אלבומים" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "מערכת קבצים" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_מערכת קבצים" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "לא ניתן להעתיק את השיר" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "לא ניתן להעביר את השירים שנבחרו לרשימת ניגון או לסדר ההשמעה." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_הוסף לספרית השירים" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "תסדיר זה אינו נתמך" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "רשימות תחנות יכולות להכיל רק תחנות ולא רשימת תחנות אחרת או רשימת השמעה. " "הנתיבים הבאים אינם יכולים להיטען: /n%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "לא ניתן להוסיף תחנה" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "רדיו אינטרנט" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "הורד קבצים" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "תחנה חדשה" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "הכנס את הכתובת אינטנרט של התחנה" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "דירוג" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "רדיו _אינטרנט" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_תחנה חדשה" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_תחנה חדשה" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "תחנה חדשה" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "לא נמצאו תחנות" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "לא נמצאו תחנות ב %s" #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "כל התחנות שנבחרו כבר נמצאות בספריה שלך" #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "ה_סר מרשימת הניגון" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "הוסף לרשימת _ניגון" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d תחנה" msgstr[1] "%(count)d תחנות" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "מאפייני התקן" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "התקן:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "לא מעוגן" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "נקודת עגינה:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "ש_ם:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "התקני שמע" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "התקני _שמע" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_נתק" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_שנה שם" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "נפח בשימוש <b>%s</b>, פנוי <b>%s</b>" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "ההתקן <b>%s</b> אינו מחובר" #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "מעתיק את <b>%s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "לא ניתן להעתיק את השיר" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "אין מספיק מקום פנוי על מנת להעביר את השיר" #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "לא ניתן להעתיק את <b>%s</b>" #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "לא ניתן למחוק את השיר" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "מוחק את <b>%s</b> " #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "לא ניתן למחוק את <b>%s</b>" #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "לא ניתן למחוק את השיר" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "ניתוק <b>%s</b> נכשל" #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "לא ניתן לנתק את ההתקן" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "מאפייני דיפדוף חלוניות" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "הכל" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "תצוגת חלוניות" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_תצוגת חלוניות" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "ב_חר הכל" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "מייבא רשימת ניגון\n" "עד כה נוספו %d/%d שירים" #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "רשימת ניגון חדשה" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "הזן שם עבור התיקיה החדשה:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_רשימת ניגון חדשה" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, fuzzy, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s ו %(count)d עוד" msgstr[1] "%(title)s ו %(count)d עוד" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "רשימות ניגון" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_רשימות ניגון" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "ה_סר מרשימת הניגון" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "יי_בא" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "לא ניתן לייבא את רשימת הניגון" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet מסוגל לייבא רק רשימון ניגון מסוג M3U או PLS." #: ../quodlibet/browsers/playlists.py:504 #, fuzzy msgid "Remove Duplicates" msgstr "הסר תגית נבחרת" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_מעורבב" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "לא ניתן לשנות שם לרשימת הניגון" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "ייבא רשימת ניגון" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "הסתר דפדפן שירים" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_הסתר דפדפן שירים" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "חפש בספרית השירים" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_חפש בספרית השירים" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "ה_גבל תוצאות" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "התקן לא ידוע" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "" #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "ערך שגוי" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "הגבר עוצמה (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "ה_עתק עטיפות אלבומים" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "מזג תגיות עם ערכים מרובים" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "כלול _גרסה בשם" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "כלול חל_ק באלבום" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "מודל:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "קיבולת:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "קושחה:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "לא ניתן לשמור את מסד הנתונים של ה iPod" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "התקן ה iPod אינו מאותחל" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "האם ברצונך ליצור מסד נתונים ריק ב iPod?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_תבנית שם קובץ:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "ה_סר תיקיות ועטיפות אלבום שאינן בשימוש" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "הקובץ קיים" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "האם לשכתב את <b>%s</b> ?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "ספריה" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "בודק מחיצות מעוגנות" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "סורק את ספרית השירים" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "סורק %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d שניה" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "לא ניתן לפתוח את הקבצים" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "ערך שגוי" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "לא ניתן ליצור תיקיה חדשה" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "" #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "" #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "" #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "" # If not in command line # msgstr "לא ניתן לכתוב אל %s ולכן הוא הוסר" #: ../quodlibet.py:296 msgid "a music library and player" msgstr "" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "מיקום" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "" #: ../quodlibet.py:307 msgid "Start playback" msgstr "" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "" #: ../quodlibet.py:310 msgid "Stop playback" msgstr "" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "" #: ../quodlibet.py:313 msgid "Print player status" msgstr "" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "" #: ../quodlibet.py:315 msgid "Show main window" msgstr "" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "_רענן ספרית שירים" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "" #: ../quodlibet.py:334 msgid "Play a file" msgstr "" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "" #: ../quodlibet.py:340 msgid "command|tag" msgstr "" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "" #: ../quodlibet.py:341 msgid "tag=value" msgstr "" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "שם קובץ" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "" #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "" #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "התקן שמע: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "התחלה" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "לא זמין" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "זמן" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "שם סימניה" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "סימניות" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "נתוני זמן חסרים" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_ערך:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "ערכים שמורים" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "ערוך ערכים שמורים" #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "שירים" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "הצג זמן שנשאר לנגן" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_ערוך סימניות" #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "_כותרות רצועות" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "כ_ותרות אלבומים" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "עצור לאחר השיר הנוכחי" #: ../quodlibet/qltk/data_editors.py:338 msgid "Enter new value" msgstr "" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "מחק קבצים" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "העבר ל_אשפה" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "האם למחוק קובץ זה צמיתות?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "האם למחוק קבצים אלו לצמיתות?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s ו %(count)d נותרו..." msgstr[1] "%(title)s ו %(count)d נותרו..." #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "מעביר %d/%d." #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "מוחק %d/%d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "לא ניתן לשמור את מסד הנתונים של ה iPod" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "ניתוק <b>%s</b> נכשל" #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "לא ניתן למחוק קובץ" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "מחיקת הקובץ <b>%s</b> נכשלה" #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "הורדות" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "שם קובץ" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "גודל" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "_סדר השמעה" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "תבנית" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "ערוך ערכים שמורים" #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_תצוגה מקדימה" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_אפשרויות נוספות..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "חסר לשיר %d" msgstr[1] "חסר ל %d שירים" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "שונה בשיר %d" msgstr[1] "חסר ל %d שירים" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "פצל ל_ערכים נפרדים" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "פצל תקליטור מתוך _אלבום" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "פצל _גרסה מתוך שם" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "פצל _מעבד מתוך אמן" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "פצל מ_בצע מתוך אמן" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "פצל מ_בצע מתוך אמן" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "פצל _גרסה מתוך שם" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "הוסף תגית" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_תגית:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "_הסר" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "ערוך תגיות" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "שמור" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "לא ניתן להוסיף תגית" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "לא ניתן להוסיף את <b>%s</b>\n" "\n" "הקבצים שנבחרו אינם תומכים בתגיות כפולות" #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "תגית שגויה" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "תגית שגויה <b>%s</b>\n" "\n" "הקבצים שנבחרו אינם תומכים בעריכת התגית הזו" #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "יתכן שהתגית לא תהייה מדוייקת" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> שונה בזמן שהתוכנה עבדה. שמירה ללא ריענון סיפרית השירים עלולה למחוק " "את השינויים שנעשו לשיר\n" "\n" "האם ברצונך לשמור את השיר?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "לא ניתן לשמור שיר" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "השמירה של <b>%s</b> נכשלה. יתכן שהקובץ אינו קיים או שאין לך הרשאות מתאימות" #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "ערך שגוי" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "הר_חבות" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "שיר %d" msgstr[1] "%d שירים" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "מאפייני Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "_פצל ב:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "_הצג תגיות תיכנותיות" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "עריכת תגיות שיר" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "תיקיות" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_תיקיה חדשה..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "בח_ר הכל את כל תתי התיקיות" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "תיקיה חדשה" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "הזן שם עבור התיקיה החדשה:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "לא ניתן ליצור תיקיה חדשה" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "לא ניתן למחוק תיקיה" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "בביצוע %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "תקליטור %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "רצועה %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "הוסף לרשימת _ניגון" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "תצוגת _עריכה..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "ע_רוך תגיות" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "לא מנגן" #: ../quodlibet/qltk/information.py:61 #, fuzzy msgid "_Clear Errors" msgstr "שגיאות בהרחבות" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "לא נבחרו שירים" #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "ללא שירים" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "מידע" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "מילים" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 #, fuzzy msgid "Errors" msgstr "הצג שגיא_ות" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "אמן" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "אמנים" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "מבצעים" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "מעולם לא" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "פעם %d" msgstr[1] "%d פעמים" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "נוסף" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "הושמע לאחרונה" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "נוגן" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "דולג" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "דירוג" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "משך השיר" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "גודל קובץ" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "שונה לאחרונה" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "איכות" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "קובץ" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d נבחר" msgstr[1] "%d נבחרו" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "הופק על ידי %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "מבצע" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "רצועה לא זמינה" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "רשימת רצועות" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "שיר %d ללא אלבום" msgstr[1] "%d שירים ללא אלבום" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "דיסקוגרפיה נבחרת" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "שיר %d ללא אמן" msgstr[1] "%d שירים ללא אמן" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "אלבומים" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "משך כללי:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "גודל כללי:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "קבצים" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "הורד_" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "לא נמצאו מילים לשיר" #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "מחפש מילים לשירים..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "לא ניתן להוריד מילים לשיר" #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d תחנה" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "התעלם משינויים בתגיות?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "תגיות שונו אך לא נשמרו. לשמור את השינויים או לחזור למקור תוך התעלמות " "מהשינויים?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "לא ידוע" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "לפי הסדר" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "לפי _הסדר" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "מעורבב" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "לפי דירוג" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "לפי _דירוג" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "שיר בודד" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_שיר בודד" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "שגיאות בהרחבות" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "הר_חבות" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "הצג שגיא_ות" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "גרסה" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "הסתר דפדפן שירים" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "לא נמצאו הרחבות" #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_תקליטור" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_רצועה" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "איגוד" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "אל_בום" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_שם קובץ" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "מש_ך" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "רשימת שירים" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_דלג לשיר המושמע באופן אוטומטי" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "כאשר מתחלף שיר מושמע, הצג אותו ברשימת השירים" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "אח_רים" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "תצוגת _עריכה..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "עמודות מוצגות" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "כלול _גרסה בשם" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "כלול _נתיב בשם הקובץ" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "מאפיינים" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "דפדפנים" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "מ_סנן כללי" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "עצור לאחר השיר הנוכחי" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "חפש" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "כאשר מתחלף שיר מושמע, הצג אותו ברשימת השירים" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "ד_ירוג" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "רשימת אלבומים" #: ../quodlibet/qltk/prefs.py:301 msgid "Playback" msgstr "" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "הגבר עוצמה (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "הגבר עוצמה (dB):" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "יי_צוב עוצמה של Replay Gain" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "יי_צוב עוצמה של Replay Gain" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "ערוך תגיות" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "התעלם משינויים בתגיות?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "שמור דירוגים וספירות השמעה" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_דואר אלקטרוני" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "הדירוגים וספירות ההשמעה ישויכו לכותבת הדואר האלקטרוני המופיעה כאן" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_תחנה חדשה" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "_רענן ספרית שירים" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "_רענן ספרית שירים" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "סר_וק ספריות" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "ללא שירים" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "מאפיינים" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "מאפיינים" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_סדר השמעה" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "הסר את כל השירים מסדר ההשמעה" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_נגן בסדר אקראי" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_אופן השמעה:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_חזור" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "התחל מחדש את רשימת הניגון בהגיעה לסופה" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "לא ניתן להוסיף שיר או שירים" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "ב <b>%s</b> מתבצע שימוש בתסדיר אשר אינו נתמך" #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_מוסיקה" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "הוסף _תיקיה..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "ה_וסף קובץ..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "הוסף _נתיב לקובץ..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "תצוגת חלוניות" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "מ_סננים" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "לא נוגנו מ_עולם" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "40 ה_פופולארים" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_בקרה" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_דלג לשיר מושמע" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_תצוגה" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_עזרה" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "שגיאות בהרחבות" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "חפש" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "_רענן ספרית שירים" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "_טען מחדש את ספרית השירים" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "סנן לפי _סגנון" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "סנן לפי _אמן" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "סנן לפי א_לבום" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "ס_גנון אקראי" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "א_מן אקראי" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "אל_בום אקראי" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "רשימת _שירים" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "בדוק אם נעשו שינויים בספרית השירים" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "טען את כל השירים בספרית השירים (פעולה זו עלולה לקחת משך זמן ארוך)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "40 השירים שהושמעו מספר הפעמים הרב ביותר (ניתן לבחור יותר מ 40 שירים אם ישנם " "קשרים בינם)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "הוסף כתובת" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "הכנס את הכתובת אינטנרט של קובץ המוסיקה:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "לא ניתן להוסיף את הנתיב שצוין" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "הנתיב <b>%s</b> אינו נתיב חוקי" #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "הוסף מוסיקה" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "עקוב אחר שירים חדשים בתיקייה זו" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "לא ניתן להוסיף את %s לספריה שלך\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "לא ניתן להוסיף שיר" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "החלף _רווחים בקווים תחתיים" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "הסר תווים שאינם נתמכים ב_חלונות" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "הסר תווי _הטייה" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "ה_סר תווים שאינם תווי ASCII" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "שינוי שמות קבצים" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "שם חדש" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "הצג שגיא_ות" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "המ_שך" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "לא ניתן לשנות שם קובץ" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "שינוי השם של <b>%s</b> ל <b>%s</b> נכשל. יתכן ששם היעד קיים כבר או שאין לך " "הרשאות מתאימות ליצור או למחוק קובץ קודם." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "הנתיב אינו מלא" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "התבנית\n" "\t<b>%s</b>\n" "מכילה / אך אינה מתחילה מספרית השורש. על מנת למנוע שמות תיקיות שגויות על " "התבנית להתחיל מ / או מ /~." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "שירים בספריות אלו (מופרדות ב ':') יוספו לספרית השירים שלך" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "בחר ספריות" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "ערכים שמורים" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "ערוך ערכים שמורים" #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "חפש" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_גבול:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "לפי _דירוג" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_מיין לפי %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "כ_ותרות אלבומים" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_כותרות רצועות" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "כ_ותרות אלבומים" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "כותרות _מבצעים" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "כותרות ת_אריך" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "כו_תרות קבצים" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "כות_רות הפקה" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "כותרות _מותאמות אישית..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "כותרות _מותאמות אישית..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "הו_סף לסדר ההשמעה" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "ה_עתק להתקן שמע חיצוני" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "ה_סר מרשימת הניגון" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "_כותרות רצועות" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "כותרות _מבצעים" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "כ_ותרות אלבומים" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "כותרות ת_אריך" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "כו_תרות קבצים" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "כות_רות הפקה" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_תגית:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_חופשי" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "החלף _קווים תחתיים ברווחים" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_שנה לאות גדולה ראשונה בכל מילה" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "פצל ל_תגיות נפרדות" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "תגיות משם הקובץ" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "תגיות מחליפות תגיות קיימות" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "תגיות נוספות לתגיות קיימות" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "התבנית\n" "\t<b>%s</b>\n" "שגוייה. יתכן והיא מכילה את אותה תגית פעמיים או שהיא אינה סגורה עם " "מרכאות(< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "תגיות שגויות" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "תגיות שגויה <b>%s</b>\n" "\n" "הקבצים שנבחרו אינם תומכים בעריכת התגיות האלו" #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "לא ניתן לערוך שיר" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "התבנית שהוזנה שגוייה, וודא כי < ו > הוזנו כ \\< ו \\> וכי התגיות " "מאוזנות.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "תצוגת עריכה" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "מספרי רצועות" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "התחל _מ:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_סך הכל רצועות:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "רצועה" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "%d נותרו..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "שומר שירים שבוצעו בהם שינויים..." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "נקה חיפוש" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "רשימת ניגון בשם %s כבר קיימת" #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "ד_ירוג" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "" #: ../quodlibet/util/__init__.py:142 #, python-format msgid "Usage: %s %s\n" msgstr "" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "" #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "" #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "" #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[קידוד לא נתמך]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "לא_רלוונטי_בעברית" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "על תאריך להיות מוזן בתצורת YYYY, YYYY-MM-DD או YYYY-MM-DD HH:MM:SS" #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "על הגברת העוצמה של Replay Gain להיות מוזנת בתצורה 'x.yy dB'" #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "על העוצמת המירבית של Replay Gain להיות מוזנת בתצורה 'x.yy dB'" #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "רצועות בעלות סימול של MusicBrainz חייבות להיות בתסדיר UUID" #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "סטטוס של MusicBrainz יכול להיות 'official' (רשמי), 'promotional' (לצרכי " "קידום) או 'bootleg' (לא רשמי)." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "אלבום" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "עיבוד" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "מחבר" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "מלחין" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "מנצח" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "איש קשר" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "זכויות יוצרים" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "תאריך" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "תיאור" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "סגנון" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "איגוד" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "שפה" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "רישוי" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "מיקום" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "מילים" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "ארגון" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "שם" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "גרסה" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "אתר אינטרנט" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "אמן האלבום" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "תקליטור" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "רצועה" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "זיהוי תגית" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "תאריך הפצה מקורי" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "אלבום מקורי" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "אמן מקורי" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "הוקלט" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "ארץ מקור" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "אמן האלבום" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "אמנים" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "אמן האלבום" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "מבצעים" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "מבצעים" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "סימון רצועה של MusicBrainz" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "סימון רצועה של MusicBrainz" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "סימון אמן של MusicBrainz" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "סימון MusicBrainz של אלבום אמן" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "סימון TRM של MusicBrainz" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "סימון PUID של MusicIP" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "סימון MusicBrainz של מצב אלבום " #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "סימון סוג אלבום של MusicBrainz" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "הגברת רצועה" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "עוצמת רצועה מקסימלית" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "הגברת אלבום" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "עוצמת אלבום מקסימלית" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "מאפיינים" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "תקליטורים" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "רצועות" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "נוגן לאחרונה" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "שם מלא" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "נקודת עגינה" #: ../quodlibet/util/tags.py:105 #, fuzzy msgid "errors" msgstr "מבצעים" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "יוצרים" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "שנה" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "תאריך הפצה מקורי" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "סימניות" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "תסדיר" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "מילים" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "עיבוד" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "מלחינים" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "מנצחים" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "מחברים" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d שניה" msgstr[1] "%d שניות" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d דקה" msgstr[1] "%d דקות" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d שעה" msgstr[1] "%d שעות" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d יממה" msgstr[1] "%d יממות" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d שנה" msgstr[1] "%d שנים" #~ msgid "_Browse Library" #~ msgstr "_עיין בספרית השירים" #~ msgid "No eject command found." #~ msgstr "לא נמצאה פקודת ניתוק" #~ msgid "Unable to start web browser" #~ msgstr "לא ניתן להפעיל את דפדפן האינטרנט שלך" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "לא נמצא דפדפן אינטנרט. כוון את הערך $BROWSER או וודא שהקובץ/usr/bin/" #~ "sensible-browser קיים." #, fuzzy #~ msgid "Library Error" #~ msgstr "דפדפן הספריה" #, fuzzy #~ msgid "_Output device:" #~ msgstr "ה_עתק להתקן שמע חיצוני" #~ msgid "translator-credits" #~ msgstr "Roee Haimovich, johnny5@i12.com" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "תגיות אחרות שיוצגו, מופרדות ברווחים" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "המ_שך" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "מידע" #~ msgid "_Search:" #~ msgstr "חפש:_" #~ msgid "Search your library" #~ msgstr "חפש בספרית השירים" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "גודל כללי:" #~ msgid "Quod Libet Plugins" #~ msgstr "הרחבות ל Quod Libet" #~ msgid "Color _search terms" #~ msgstr "_צבע תנאי חיפוש" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "הצג חיפושים פשוטים בכחול, חיפושים מורכבים בירוק וחיפושים שגויים באדום" #~ msgid "_Select" #~ msgstr "_עיין" #~ msgid "Separators for splitting tags" #~ msgstr "סימנים מפרידים להפרדת תגיות" #, fuzzy #~ msgid "Display" #~ msgstr "תצוגת עריכה" #~ msgid "Quod Libet Preferences" #~ msgstr "מאפייני Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "לא נוגנו ה_יום" #~ msgid "Not Played in a _Week" #~ msgstr "לא נוגנו ב_שבוע האחרון" #~ msgid "Not Played in a _Month" #~ msgstr "לא נוגנו ב_חודש האחרון" #~ msgid "B_ottom 40" #~ msgstr "40 _הלא פופלארים" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "40 השירים שהושמעו מספר הפעמים המועט ביותר (ניתן לבחור יותר מ 40 שירים אם " #~ "ישנם קשרים בינם)" #~ msgid "gtk-media-next" #~ msgstr "ה_בא" #~ msgid "gtk-media-previous" #~ msgstr "ה_קודם" #~ msgid "gtk-media-play" #~ msgstr "_נגן" #~ msgid "gtk-media-pause" #~ msgstr "_השהה" #, fuzzy #~ msgid "Artist" #~ msgstr "א_מן" #, fuzzy #~ msgid "Date" #~ msgstr "ת_אריך" #~ msgid "Choose New Stations" #~ msgstr "בתר תחנות חדשות" #~ msgid "Add" #~ msgstr "הוסף" #, fuzzy #~ msgid "Bitrate" #~ msgstr "איכות" #~ msgid "_Stations..." #~ msgstr "ת_חנות..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "הרחבות ל Quod Libet" #~ msgid "Unable to save library" #~ msgstr "לא ניתן לשמור את ספרית השירים" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "לא ניתן להוסיף שיר" #~ msgid "_Information" #~ msgstr "מי_דע" #~ msgid "Sort by title" #~ msgstr "מיין לפי שם" #~ msgid "Sort by artist" #~ msgstr "מיין לפי אמן" #~ msgid "Lyrics provided by %s." #~ msgstr "מילות השיר סופקו על ידי %s" #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "לא נמצאו מילים לשיר.\n" #~ "\n" #~ "באפשרותך להקיש על הורד ולתת ל Quod Libet לחפש מילים לשיר באינטרנט או " #~ "שניתן לכתוב את המילים בעצמך ולשמור אותם על ידי הקשה על שמור" #~ msgid "part" #~ msgstr "חלק" #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d שירים נשמרו" #~ msgid "MusicBrainz album ID" #~ msgstr "סימון אלבום של MusicBrainz" #~ msgid "Unable to open audio device" #~ msgstr "לא ניתן לפתוח את התקן הקול שלך" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet ניסה לגשת לצינורות השמע alsasink, osssink ול %(sink)s אך נכשל " #~ "בגישה לכל אחד מהם.יש לכוון את צינור השמע המתאים של GStremer על ידי שינוי " #~ "השורה <b>pipeline = %(sink)s</b>\n" #~ "בקובץ ההגדרות ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "לא ניתן היה למצוא את ישום ה GStreamer מסוג filesrc.בדוק אם התקנת " #~ "GStreamer שלך תקינה" #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "לא ניתן לטעון את השיר המבוקש" #, fuzzy #~ msgid "C_opy album covers" #~ msgstr "ה_צג עטיפות אלבומים" #~ msgid "Unable to retag multiple values" #~ msgstr "לא ניתן לערוך ערכים כפולים" #~ msgid "" #~ "Scanning your library. This may take several minutes.\n" #~ "\n" #~ "%d songs reloaded\n" #~ "%d songs removed" #~ msgstr "" #~ "Quod Libet סורק את ספרית השירים שלך. תהליך זה יכול להימשך מספר דקות.\n" #~ "\n" #~ "%d שירים הוטענו\n" #~ "%d שירים הוסרו" #~ msgid "" #~ "Scanning for new songs and adding them to your library.\n" #~ "\n" #~ "%d songs added" #~ msgstr "" #~ "Quod Libet סורק למציאת שירים חדשים ומוסיף אותם לספרית השירים שלך.\n" #~ "\n" #~ "%d שירים נוספו" #~ msgid "No new stations" #~ msgstr "אין תחנות חדשות" #~ msgid "M3U playlists cannot be loaded." #~ msgstr "לא ניתן לטעון רשימת M3U" #, fuzzy #~ msgid "<b>%s</b> is already in your library." #~ msgstr "תחנה זו כבר נמצאת בספריה שלך" #~ msgid "Per-song (\"Radio\") volume adjustment" #~ msgstr "ייצוב עוצמה לפי שיר (רדיו)" #~ msgid "Per-album (\"Audiophile\") volume adjustment" #~ msgstr "ייצוב עוצמה לפי אלבום (אודיופיל)" #~ msgid "_Volume Normalization" #~ msgstr "_ייצוב עוצמת קול" #~ msgid "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "by <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - Disc <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - Track <tracknumber>>>" #~ msgstr "" #~ "\\<span weight='bold' size='large'\\><title>\\</span\\><~length| " #~ "(<~length>)><version|\n" #~ "\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|\n" #~ "בביצוע <~people>><album|\n" #~ "\\<b\\><album>\\</b\\><discnumber| - תקליטור <discnumber>><part| - \\<b" #~ "\\><part>\\</b\\>><tracknumber| - רצועה <tracknumber>>>" #~ msgid "Tray Icon Preferences" #~ msgstr "מאפייני צלמית מגש המערכת" #~ msgid "" #~ "Scroll wheel adjusts volume\n" #~ "Shift and scroll wheel changes song" #~ msgstr "" #~ "השתמש בגלילת העכבר לשינוי עוצמת הקול\n" #~ "לחיצה על Shift וגלילת עכבר יחד להחלפת שיר" #~ msgid "" #~ "Scroll wheel changes song\n" #~ "Shift and scroll wheel adjusts volume" #~ msgstr "" #~ "השתמש בגלילת העכבר להחלפת שירים\n" #~ "לחיצה על Shift וגלילת עכבר יחד לשינוי עוצמת הקול" #, fuzzy #~ msgid "Scroll _Wheel" #~ msgstr "גלילת עכבר" #~ msgid "Tooltip Display" #~ msgstr "תצוגת בלון" #~ msgid "Play _Order" #~ msgstr "_סדר השמעה" #~ msgid "Loading, scanning, and saving your library." #~ msgstr "טוען, סורק ושמור את ספרית השירים שלך" #~ msgid "" #~ "It looks like you are running Quod Libet right now. If you edit songs " #~ "also in Quod Libet's library while it is running, you may need to refresh " #~ "or re-add them.\n" #~ "\n" #~ "If you are not running Quod Libet, or are editing songs outside of its " #~ "library, you may ignore this warning." #~ msgstr "" #~ "נראה כי Quod Libet עובד כרגע. באם יערכו שירים בספרית השירים של Quod Libet " #~ "כאשר הוא פעיל, יתכן ויהיה צורך לטעון אותה מחדש או להוסיף את השירים שוב\n" #~ "\n" #~ "אם Quod Liet איננה עובדת כרגע או שיערכו שירים שאינם בספרית השירים שלה אז " #~ "ניתן להתעלם מהודעה זו" #~ msgid "GStreamer status %r != %r" #~ msgstr "סטטוס GStreamer %r != %r" #~ msgid "_Pane %d:" #~ msgstr "_חלונית: %d" #~ msgid "View and edit tags in the playing song" #~ msgstr "הצג וערוך תגיות בשיר נוכחי" #~ msgid "Double-click a tag value to change it, right-click for other options" #~ msgstr "הקש פעמים על מנת לשנות ערך, מקש ימני לאפשרויות נוספות" #~ msgid "Add a new tag" #~ msgstr "הוסף תגית חדשה" #~ msgid "Tag by Filename" #~ msgstr "תגית לפי שם קובץ" #~ msgid "The first letter of each word will be capitalized" #~ msgstr "האות הראשונה של כל מילה תהייה אות גדולה" #~ msgid "" #~ "Characters not allowed in Windows filenames (\\:?;\"<>|) will be replaced " #~ "by underscores" #~ msgstr "התווים (\\:?;\"<>|) אינם מורשים בחלונות ולכן יוחלפו בקווים תחתיים" #~ msgid "" #~ "Characters outside of the ASCII set (A-Z, a-z, 0-9, and punctuation) will " #~ "be replaced by underscores" #~ msgstr "" #~ "תווים שאינם בטווח תווי ה ASCII כדוגמת (A-Z, a-z, 0-9, וסימני פיסוק) " #~ "יוחלפו בקווים תחתיים" #~ msgid "Apply to these _files..." #~ msgstr "יישם עבור הקבצים הבאים..." #~ msgid "Path" #~ msgstr "נתיב" #~ msgid "Tray Preferences - Quod Libet" #~ msgstr "הגדרות מגש המערכת - Quod Libet" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/ko.po����������������������������������������������������������������������������0000644�0001750�0001750�00000251512�12173213426�015330� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Korean translation of Quod Libet # ChangBom Yoon <changbom.yoon@gmail.com>, 2006 # Byung-Hee HWANG <bh@izb.knu.ac.kr>, 2006 # $LUG: projects/quodlibet/ql_0_23_ko.po,v 1.2 2006/08/09 08:35:52 bh Exp $ # msgid "" msgstr "" "Project-Id-Version: Quod Libet 0.23\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:35+0100\n" "Last-Translator: ChangBom Yoon <changbom.yoon@gmail.com>\n" "Language-Team: The FreeBSD Korean Documentation Project <doc@kr.FreeBSD." "org>\n" "Language: ko\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" "X-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "오디오 태그 편집기" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "오디오 파일 태그 편집" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "음악 재생기" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "듣기, 검색 및 오디오 모음 편집" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "재생기" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "미리보기" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "오디오 태그 편집기" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "디렉토리" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Show _programmatic tags" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "설명" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "값" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "태그" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "오디오 태그 편집기" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 msgid "Remove tags" msgstr "" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 msgid "Remove all tags" msgstr "" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "태그 값으로 필터" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "태그 값으로 필터" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "정보에 시간이 없습니다" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "사용 정보 개요 표시" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> 는 유효하지 않은 주소입니다." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "앨범에 없는 노래" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "앨범 목록 설정" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "앨범 표지 보이기" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "앨범 표시" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d 트랙" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d 디스크" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "유효하지 않은 양식" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "제목" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "아티스트" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "날짜" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "장르" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "재생율" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "날짜 순 정렬" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "설정" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "앨범 목록" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "앨범 목록" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "모든 앨범" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d 앨범" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "앨범 표지 보이기" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Unknown" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "새 피드" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "오디오 피드의 주소를 입력하십시오:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "오디오 피드" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "오디오 피드" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "내려받기..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "파일 내려받기" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "파일 내려받기" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "피드를 추가할 수 없습니다" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> 는 추가할 수 없습니다. 서버가 죽었거나 입력한 주소는오디오 피드가 " "아닙니다." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "라이브러리 브라우저" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d song (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Unknown" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Split into _Multiple Values" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Custom" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "앨범 목록 설정" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "파일 시스템" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "파일 시스템" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "노래를 복사할 수 없습니다" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "선택한 파일은 다른 노래 목록이나 대기열로 복사 할 수 없습니다." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "라이브러리 추가" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "지원하지 않는 파일 형식" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "방송국 목록은 방송국의 주소만 포함되어야 합니다. 다음 주소는 추가할수 없습니" "다:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "방송국을 추가할 수 없습니다" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "인터넷 라디오" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "파일 내려받기" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "새방송국" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "인터넷 라디오 방송국의 주소를 입력하십시오:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "재생율" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "인터넷 라디오" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "새 방송국" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "새 방송국" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "새방송국" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "발견된 방송국이 없습니다" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "%s 에서 발견된 인터넷 라디오 방송국이 없습니다." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "목록에 있는 모든 방송국은 이미 라이브러리에 존재합니다." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "재생목록으로부터 제거" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "재생목록 추가" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d station" #: ../quodlibet/browsers/media.py:30 #, fuzzy msgid "Device Properties" msgstr "등록정보" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "" #: ../quodlibet/browsers/media.py:46 #, fuzzy msgid "Mount Point:" msgstr "마운트 지점" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "이름:" #: ../quodlibet/browsers/media.py:128 #, fuzzy msgid "Media Devices" msgstr "오디오 장치: %s" #: ../quodlibet/browsers/media.py:129 #, fuzzy msgid "_Media Devices" msgstr "오디오 장치: %s" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 #, fuzzy msgid "_Eject" msgstr "선택" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "이름 바꾸기" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "" #: ../quodlibet/browsers/media.py:461 #, fuzzy, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> 는 유효하지 않은 주소입니다." #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "<b>%s</b> 삭제 실패." #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 #, fuzzy msgid "Unable to copy song" msgstr "노래를 복사할 수 없습니다" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "" #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "" #: ../quodlibet/browsers/media.py:531 #, fuzzy msgid "Unable to delete songs" msgstr "노래를 추가할 수 없습니다" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "<b>%s</b> 삭제 실패." #: ../quodlibet/browsers/media.py:560 #, fuzzy, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> 는 유효하지 않은 주소입니다." #: ../quodlibet/browsers/media.py:564 #, fuzzy msgid "Unable to delete song" msgstr "노래를 편집할 수 없습니다" #: ../quodlibet/browsers/media.py:579 #, fuzzy, python-format msgid "Ejecting <b>%s</b> failed." msgstr "<b>%s</b> 삭제 실패." #: ../quodlibet/browsers/media.py:582 #, fuzzy msgid "Unable to eject device" msgstr "파일 삭제에 실패했습니다" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Paned Browser 설정" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "All" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Paned Browser" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Paned Browser" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "모두 선택" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "재생목록을 가져옵니다.\n" "\n" "%d/%d 곡을 추가했습니다." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "새 재생목록" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "새 폴더 이름을 입력하십시오:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "새 재생목록" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, fuzzy, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s and %(count)d more" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "재생목록" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "재생목록" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "재생목록으로부터 제거" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "가져오기" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "재생목록을 가져올 수 없습니다" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet 은 M3U 와 PLS 포맷에서만 재생목록을 가져올 수 있습니다." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "섞어서" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "재생목록 이름을 바꿀 수 없습니다" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "재생목록 가져오기" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "브라우저 비활성" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "브라우저 비활성" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "라이브러리 검색" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "라이브러리 검색" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "결과 제한" #: ../quodlibet/devices/_base.py:59 #, fuzzy msgid "Unknown Device" msgstr "Unknown" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "에러: '%s' 는 유일한 prefix 가 아닙니다." #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "유효하지 않은 값" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 #, fuzzy msgid "Copy _album covers" msgstr "앨범 표지 보이기" #: ../quodlibet/devices/ipod.py:115 #, fuzzy msgid "Combine tags with _multiple values" msgstr "Split into multiple _values" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "버전을 포함하는 제목" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "파트(part)를 포함하는 앨범" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "" #: ../quodlibet/devices/ipod.py:291 #, fuzzy msgid "Unable to save iPod database" msgstr "라이브러리를 저장할 수 없습니다" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 #, fuzzy msgid "_Filename Pattern:" msgstr "파일이름" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "" #: ../quodlibet/devices/storage.py:96 #, fuzzy msgid "File exists" msgstr "파일 시스템" #: ../quodlibet/devices/storage.py:97 #, fuzzy, python-format msgid "Overwrite <b>%s</b>?" msgstr "<b>%s</b> 삭제 실패." #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "라이브러리" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "마운트 지점 확인" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "라이브러리 스캐닝" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "스캐닝 %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d 초" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "파일을 열 수 없습니다" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "유효하지 않은 값" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "폴더를 생성할 수 없습니다" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet 이 이미 실행중입니다." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "현재 재생중인 노래가 없습니다." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet 이 실행중이 아닙니다." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "%s 에 쓸 수 없음. 제거합니다." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "음악 라이브러리 및 재생기" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[옵션]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "재생중인 노래 표시 후 마침" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "곧 노래 시작" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "다음 노래로 가기" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "이전 노래로 가기" #: ../quodlibet.py:307 msgid "Start playback" msgstr "연주 시작" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "연주 일시정지" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "재생/일시정지 토글(Toggle) 모드" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "연주 시작" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "음량 증가" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "음량 감소" #: ../quodlibet.py:313 msgid "Print player status" msgstr "재생기 상태 표시" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "메인 창 숨기기" #: ../quodlibet.py:315 msgid "Show main window" msgstr "메인 창 보이기" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "메인 창 표시 토글(Toggle)" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "실행중인 재생기 강조" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "라이브러리 새로고침" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "현재 재생목록 표시" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "대기열 내용 표시" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Quod Libet 마침" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "재생중인 노래에서 탐색" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "연주 순서 지정 또는 토글(Toggle)" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "반복 끄기, 켜기, 토글(Toggle)" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "음량 설정" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "오디오 라이브러리 검색" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "쿼리" #: ../quodlibet.py:334 msgid "Play a file" msgstr "파일 재생" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "command|filename" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "재생율" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "현재 브라우저 지정" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "새 브라우저 열기" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "대기열 보이기 및 숨기기" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "메인 노래 목록 보이기 및 숨기기" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "임의의 값으로 필터" #: ../quodlibet.py:340 msgid "command|tag" msgstr "command|tag" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "태그 값으로 필터" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tag=value" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Enqueue a file or query" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "파일이름" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 #, fuzzy msgid "Unqueue a file or query" msgstr "Enqueue a file or query" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "에러: '%s' 에 유효하지 않은 인자." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "에러: %s --help 를 시도해 보십시오." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "지원 포맷: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "오디오 장치: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "시작" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/A" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "시간" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "북마크 이름" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "북마크" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "정보에 시간이 없습니다" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "값:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "저장된 값" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "저장된 값 편집..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "노래" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "남은 시간 표시" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "북마크 편집" #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "_Track Headers" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "_Album Headers" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "이 노래 후 정지" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "태그 값으로 필터" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "파일 지우기" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "휴지통으로 이동" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "이 파일을 영구히 지울까요?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "이 파일을 영구히 지울까요?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s and %(count)d more..." #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "%d/%d 이동" #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "%d/%d 삭제" #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "라이브러리를 저장할 수 없습니다" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "<b>%s</b> 삭제 실패." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "파일 삭제에 실패했습니다" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "<b>%s</b> 삭제 실패." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "내려받기" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "파일이름" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "크기" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "대기열" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "양식" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "저장된 값 편집..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "미리보기" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "좀 더 많은 옵션..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "missing from %d song" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "different across %d song" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Split into _Multiple Values" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Split Disc out of _Album" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Split _Version out of Title" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Split Arranger out of Ar_tist" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Split _Performer out of Artist" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Split _Performer out of Artist" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Split _Version out of Title" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "태그 추가" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "태그:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "ql-remove" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "태그 편집:" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "쓰기" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "태그를 추가할 수 없습니다" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "<b>%s</b> 태그를 추가할 수 없습니다\n" "\n" "지금 선택한 파일은 복수값을 지원하지 않습니다." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "유효하지 않은 태그" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "유효하지 않은 태그 <b>%s</b>\n" "\n" "지금 선택한 파일은 이러한 태그의 편집을 지원하지 않습니다." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "태그에 결함이 있습니다" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> 는 프로그램이 실행되는 동안 변경되었습니다. 새로고침없이라이브러리" "를 저장하면 그 노래에 변경사항을 덮어씁니다.\n" "어쨌든 이 노래를저장할까요?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "노래를 저장할 수 없습니다" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "<b>%s</b> 저장을 할 수 없습니다. 읽기-전용 파일이거나, 변조된파일입니다. 또" "는 파일에 접근 권한이 없습니다." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "유효하지 않은 값" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "플러그인" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d 곡" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso 설정" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Split _on:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Show _programmatic tags" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "태그 편집" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "폴더" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "새 폴더" #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "하위폴더 모두 선택" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "새 폴더" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "새 폴더 이름을 입력하십시오:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "폴더를 생성할 수 없습니다" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "폴더를 지울 수 없습니다" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "아티스트: %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "%s 디스크" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "%s 트랙" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "재생목록 추가" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Edit Display..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "태그 편집" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Not playing" #: ../quodlibet/qltk/information.py:61 #, fuzzy msgid "_Clear Errors" msgstr "플러그인 에러" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "선택한 노래가 없습니다." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "No Songs" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "정보" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "가사" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 #, fuzzy msgid "Errors" msgstr "에러 보이기" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "아티스트" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "아티스트" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "연주" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Never" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d 회" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "추가" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "마지막 재생" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "재생" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "통과" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "재생율" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "길이" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "파일 크기" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "수정" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "비트율" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "파일" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d 선택" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "기획: %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "연주" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "트랙을 이용할 수 없습니다" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "트랙 목록" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "앨범이 없는 노래 %d 곡" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Selected Discography" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "아티스트가 없는 노래 %d 곡" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "앨범" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "총 길이:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "총 크기:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "파일" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "내려받기" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "이 노래를 위한 가사가 없습니다" #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "가사 검색중..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "가사를 내려받을 수 없습니다" #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d station" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "변경된 태그를 버릴까요?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "태그가 변경되었으나 저장되지 않았습니다. 이 파일을 저장할까요? 아니면 변경사" "항을 무시하고 이전으로 되돌릴까요?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "Unknown" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "순서대로" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "순서대로" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "섞어서" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "무거운거로" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "무거운거로" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "선택한 노래" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "선택한 노래" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "플러그인 에러" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "플러그인" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "에러 보이기" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "버전" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "브라우저 비활성" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "발견된 플러그인이 없습니다" #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "디스크" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "트랙" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "그룹" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "앨범" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "파일이름" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "길이" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "노래 목록" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "자동으로 현재 재생중인 노래로 가기" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "When the playing song changes, scroll to it in the song list" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Others:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Edit Display..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "칼럼 표시" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "버전을 포함하는 제목" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "폴더를 포함하는 파일이름" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "설정" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "브라우저" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "전역 필터:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "이 노래 후 정지" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "검색" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "When the playing song changes, scroll to it in the song list" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "재생율" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "앨범 목록" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "연주 일시정지" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 msgid "_Fall-back gain (dB):" msgstr "" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 msgid "_Pre-amp gain (dB):" msgstr "" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "_Replay Gain volume adjustment" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "_Replay Gain volume adjustment" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "태그 편집:" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "변경된 태그를 버릴까요?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "Save ratings and play counts" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "전자메일:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Ratings and play counts will be set for this email address" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "새 방송국" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "라이브러리 새로고침" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "라이브러리 새로고침" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "디렉토리 스캔" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "No Songs" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "설정" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "등록정보" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "대기열" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "대기열의 모든 노래 지우기" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "임의로" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "재생순서:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "반복" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "완료후 재생목록 재시작" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "노래를 추가할 수 없습니다" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> 는 지원하지 않는 프로토콜을 사용하고 있습니다." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "음악" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "폴더 추가..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "파일 추가..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "주소 추가..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "새 브라우저 열기" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "필터" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Never Played" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Top 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "조정" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "현재 재생중인 노래로 가기" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "보기" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "도움말" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "플러그인 에러" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "검색" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "라이브러리 새로고침" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "라이브러리 새로불러오기" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "장르 필터" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "아티스트 필터" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "앨범 필터" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "임의의 장르" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "임의의 아티스트" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "임의의 앨범" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "노래 목록" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "라이브러리 변경 체크" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "라이브러리의 모든 노래를 새로불러오기" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "최대 40 곡이 재생되었습니다" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "주소 추가" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "오디오 파일의 주소를 입력하십시오:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "주소를 추가할 수 없습니다" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> 는 유효하지 않은 주소입니다." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "음악 추가" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "새 노래를 위해 이 폴더 감시" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s 는 라이브러리에 추가할 수 없습니다.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "노래를 추가할 수 없습니다" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Replace spaces with _underscores" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Strip _Windows-incompatible characters" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Strip _diacritical marks" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Strip non-_ASCII characters" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "파일이름 바꾸기" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "새 이름" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "에러 보이기" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "계속" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "파일이름 변경을 할 수 없습니다" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "<b>%s</b> 를 <b>%s</b> 로 이름 변경을 할 수 없습니다. 변경하려는목적지 파일" "이 이미 존재하거나 파일로의 접근이 거부되었습니다." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "절대경로가 아닙니다" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "아래 양식\n" "\t<b>%s</b>\n" "는 root 에서 시작하지않은 / 를포함하고 있습니다.폴더의 잘못된 이름을 피하려" "면, / 또는 ~/ 으로 시작하는 양식을취하십시오." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Songs placed in these folders (separated by ':') will be added to your " "library" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "디렉토리 선택" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "저장된 값" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "저장된 값 편집..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "검색" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "제한:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "무게" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filter on %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "_Album Headers" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_Track Headers" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Album Headers" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_People Headers" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Date Headers" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_File Headers" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "_Production Headers" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Customize Headers..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Customize Headers..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "대기열 추가" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "재생목록으로부터 제거" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "_Track Headers" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "_People Headers" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "_Album Headers" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "_Date Headers" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "_File Headers" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "_Production Headers" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "태그:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Custom" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Replace _underscores with spaces" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Title-case tags" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Split into multiple _values" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Tags From Path" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Tags replace existing ones" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Tags are added to existing ones" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "유효하지 않은 태그" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "유효하지 않은 태그 <b>%s</b>\n" "\n" "지금 선택한 파일은 이러한 태그의 편집을 지원하지 않습니다." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "노래를 편집할 수 없습니다" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Edit Display" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "트랙 번호" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "시작:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "총 트랙:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "트랙" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "and %d more..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "변경한 노래 저장" #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "검색 초기화" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "%s 재생목록은 이미 존재합니다." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "재생율" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "사용 정보 개요 표시" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "버전 및 저작권 표시" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "사용법: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[옵션]" #: ../quodlibet/util/__init__.py:186 #, fuzzy, python-format msgid "Option %r not recognized." msgstr "에러: '%s' 는 알 수 없는 옵션입니다." #: ../quodlibet/util/__init__.py:189 #, fuzzy, python-format msgid "Option %r requires an argument." msgstr "에러: '%s' 는 인자를 요구하는 옵션입니다." #: ../quodlibet/util/__init__.py:192 #, fuzzy, python-format msgid "%r is not a unique prefix." msgstr "에러: '%s' 는 유일한 prefix 가 아닙니다." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[유효하지 않은 인코딩]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "check|titlecase?" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "날짜는 반드시 'YYYY', 'YYYY-MM-DD' 또는 'YYYY-MM-DD HH:MM:SS' 형식으로 입력해" "야 합니다." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Replay Gain gains must be entered in 'x.yy dB' format." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Replay Gain peaks must be entered in 'x.yy' format." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz IDs must be in UUID format." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "앨범" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "편곡" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "작가" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "작곡" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "지휘" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "연락" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "저작권" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "날짜" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "설명" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "장르" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "그룹" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "언어" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "라이센스" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "주소" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "작사" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "조직" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "제목" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "버전" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "웹사이트" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "앨범 아티스트" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "디스크" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "트랙" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "라벨 ID" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "오리지널 출시 날짜" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "오리지널 앨범" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "오리지널 아티스트" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "녹음 날짜" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "출시 국가" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "앨범 아티스트" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "아티스트" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "앨범 아티스트" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "연주" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "연주" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz track ID" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "MusicBrainz track ID" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "MusicBrainz artist ID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz album artist ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz album status" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz album type" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "track gain" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "track peak" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "album gain" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "album peak" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "설정" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "디스크" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "트랙" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "마지막 시작" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "성명(FullName)" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "마운트 지점" #: ../quodlibet/util/tags.py:105 #, fuzzy msgid "errors" msgstr "연주" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "가수" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "년" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "오리지널 출시 날짜" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "북마크" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "포맷" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "작사" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "편곡" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "작곡" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "지휘" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "작가" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d 초" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d 분" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d 시간" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d 일" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d 년" #~ msgid "_Browse Library" #~ msgstr "라이브러리 브라우저" #, fuzzy #~ msgid "No eject command found." #~ msgstr "발견된 방송국이 없습니다" #~ msgid "Unable to start web browser" #~ msgstr "웹브라우저를 시작할 수 없습니다" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "웹브라우저를 찾을 수 없습니다. $BROWSER 환경변수를 지정하거나 경로에 웹브" #~ "라우저의 실행파일이 걸려있는지 확인하십시오." #, fuzzy #~ msgid "Library Error" #~ msgstr "라이브러리 브라우저" #~ msgid "translator-credits" #~ msgstr "" #~ "ChangBom Yoon <changbom.yoon@gmail.com>\n" #~ "Byung-Hee HWANG <bh@izb.knu.ac.kr>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Other columns to display, separated by spaces" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "계속" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "정보" #~ msgid "_Search:" #~ msgstr "검색:" #~ msgid "Search your library" #~ msgstr "라이브러리 검색" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, and others\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "총 크기:" #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet 플러그인" #~ msgid "Color _search terms" #~ msgstr "검색 용어에 색깔" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "파랑색은 간단한 검색, 초록색은 복잡한 검색, 빨강색은 유효하지 않은검색" #~ msgid "_Select" #~ msgstr "선택" #~ msgid "Separators for splitting tags" #~ msgstr "Separators for splitting tags" #, fuzzy #~ msgid "Display" #~ msgstr "Edit Display" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet 설정" #~ msgid "Not Played To_day" #~ msgstr "Not Played To_day" #~ msgid "Not Played in a _Week" #~ msgstr "Not Played in a _Week" #~ msgid "Not Played in a _Month" #~ msgstr "Not Played in a _Month" #~ msgid "B_ottom 40" #~ msgstr "B_ottom 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "최소 40 곡이 재생되었습니다" #~ msgid "gtk-media-next" #~ msgstr "gtk-media-next" #~ msgid "gtk-media-previous" #~ msgstr "gtk-media-previous" #~ msgid "gtk-media-play" #~ msgstr "gtk-media-play" #~ msgid "gtk-media-pause" #~ msgstr "gtk-media-pause" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #, fuzzy #~ msgid "Artist" #~ msgstr "아티스트" #, fuzzy #~ msgid "Date" #~ msgstr "날짜" #~ msgid "Choose New Stations" #~ msgstr "새 방송국을 선택하십시오" #~ msgid "Add" #~ msgstr "추가" #, fuzzy #~ msgid "Bitrate" #~ msgstr "비트율" #~ msgid "_Stations..." #~ msgstr "방송국..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Quod Libet 마침" #~ msgid "Unable to save library" #~ msgstr "라이브러리를 저장할 수 없습니다" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "노래를 실행할 수 없습니다" #~ msgid "_Information" #~ msgstr "정보" #~ msgid "Sort by title" #~ msgstr "제목 순 정렬" #~ msgid "Sort by artist" #~ msgstr "아티스트 순 정렬" #~ msgid "Lyrics provided by %s." #~ msgstr "가사 제공: %s" #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "발견된 가사 없음.\n" #~ "\n" #~ "Quod Libet 검색을 통해 찾은 온라인 가사를 내려받기 버튼을또는 직접 입력하" #~ "셔도 됩니다. 그리고 저장을 클릭하십시오." #~ msgid "part" #~ msgstr "파트(part)" #~ msgid "Opening audio device." #~ msgstr "오디오 장치 열기" #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d 곡을 저장했습니다" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainz album ID" #~ msgid "Loaded song library." #~ msgstr "라이브러리 불러오기" #~ msgid "Unable to open audio device" #~ msgstr "오디오 장치를 열 수 없습니다" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet 이 'alsasink', 'osssink', '%(sink)s' 장치 접근을시도했지만 그것" #~ "들중 어느것도 열 수 없었습니다. ~/.quodlibet/config 파일에서GStreamer " #~ "pipeline 을 찾아 아래처럼 설정을 해주십시오:\n" #~ "\t<b>pipeline = %(sink)s</b>" #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet 이 'filesrc' GStreamer 요소를 찾지 못 합니다. GStreamer 가 설치" #~ "되었는지 확인해보십시오." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer 는 선택한 노래를 불러올 수 없습니다." #, fuzzy #~ msgid "C_opy album covers" #~ msgstr "앨범 표지 보이기" #~ msgid "Unable to retag multiple values" #~ msgstr "Unable to retag multiple values" #~ msgid "Changing the name of a tag with multiple values is not supported." #~ msgstr "Changing the name of a tag with multiple values is not supported." ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/fi.po����������������������������������������������������������������������������0000644�0001750�0001750�00000252311�12173213426�015313� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Finnish translation of Quod Libet. # Copyright (C) 2005-2007 Joe Wreschnig, Michael Urman & others # This file is distributed under the same license as the Quod Libet package. # Jari Rahkonen <jari.rahkonen@pp1.inet.fi>, 2005-2007. # # msgid "" msgstr "" "Project-Id-Version: quodlibet\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2007-04-28 16:55+0300\n" "Last-Translator: Jari Rahkonen <jari.rahkonen@pp1.inet.fi>\n" "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" "Language: fi\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" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Äänitiedostojen tunniste-editori" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Muokkaa äänitiedostojesi tunnisteita" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Musiikkisoitin" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Kuuntele, selaa tai muokkaa äänikokoelmaasi" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Soitin" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Esikatsele" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "äänitiedostojen tunniste-editori" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "hakemisto" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Näytä _ohjelmalliset tunnisteet" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "kuvaus" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Arvo" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Tunniste" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Äänitiedostojen tunniste-editori" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 msgid "Remove tags" msgstr "" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 msgid "Remove all tags" msgstr "" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Suodata tunnisteen arvon perusteella" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Suodata tunnisteen arvon perusteella" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Ei aikatietoa" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Näytä lyhyt käyttöohje" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> ei ole kelvollinen sijainti." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Kappaleet, jotka eivät ole millään albumilla" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Albumilistan asetukset" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Näytä albumien _kannet" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Albuminäkymä" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d raita" msgstr[1] "%d raitaa" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d levy" msgstr[1] "%d levyä" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Virheellinen hakukaava" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Nimi" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artisti" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Päivämäärä" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "tyylilaji" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "Ar_vosana" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Järjestys: päivämäärä" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Asetukset" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Albumilista" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Albumilista" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Kaikki albumit" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d albumi" msgstr[1] "%d albumia" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Näytä albumien _kannet" msgstr[1] "Näytä albumien _kannet" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Tuntematon" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Uusi syöte" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Syötä äänisyötteen sijainti:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Äänisyötteet" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "Äänis_yötteet" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Lataa..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Lataa tiedostoja" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Lataa tiedosto" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Syötettä ei voitu lisätä" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "Sijainnin <b>%s</b> lisääminen ei onnistunut. Ehkä palvelin ei ole linjoilla " "tai sijainti ei ole äänisyöte." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Kirjaston selain" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d kappale (%(time)s)" msgstr[1] "%(count)d kappaletta (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Tuntematon" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Jaa _useammaksi arvoksi" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Mukautettu" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Albumilistan asetukset" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Tiedostojärjestelmä" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "Tie_dostojärjestelmä" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Kappaleiden kopiointi epäonnistui" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Valittuja tiedostoja ei voi kopioida toisiin soittolistoihin tai jonoon." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Lisää kirjastoon" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Tiedostomuotoa ei tueta" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Kanavalistat voivat sisältää ainoastaan kanavien sijainteja, ei toisia " "kanavalistoja tai soittolistoja. Seuraavien sijaintien avaaminen ei " "onnistunut:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Kanavaa ei voitu lisätä" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Internetradio" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Lataa tiedostoja" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Uusi kanava" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Syötä internetradiokanavan sijainti:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "arvosana" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "I_nternetradio" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Uusi kanava" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Uusi kanava" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Uusi kanava" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Kanavia ei löytynyt." #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Internetradiokanavia ei löytynyt sijainnista %s." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Kaikki luetellut kanavat ovat jo kirjastossasi." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Poista Soittolistalta" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Lisää soittolistaan" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d kanava" msgstr[1] "%(count)d kanavaa" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Laitteen ominaisuudet" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Laite:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Ei liitetty" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Liitoskohta:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Nimi:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Medialaitteet" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Medialaitteet" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Irrota laite" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Nimeä" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> käytössä, <b>%s</b> vapaana" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> ei ole yhdistetty." #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "Kopioidaan <b>%s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Kappaletta ei voi kopioida" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Kappaleelle ei ole riittävästi tilaa." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "Kohdetta <b>%s</b> ei voitu kopioida." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Kappaleita ei voi poistaa" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Poistetaan <b>%s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "Kohdetta <b>%s</b> ei voitu poistaa." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Kappaletta ei voi poistaa" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Laitteen <b>%s</b> irrottaminen epäonnistui." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Laitetta ei voi irrottaa" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Paneeliselaimen asetukset" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Kaikki" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Paneeliselain" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Paneeliselain" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Valitse _Kaikki" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Tuodaan soittolista.\n" "\n" "%d/%d kappaletta lisätty." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Uusi soittolista" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Anna uuden kansion nimi:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Uusi soittolista" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, fuzzy, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s ja %(count)d muuta" msgstr[1] "%(title)s ja %(count)d muuta" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Soittolistat" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Soittolistat" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Poista Soittolistalta" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Tuo" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Soittolistan tuonti ei onnistu" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet voi tuoda vain M3U- ja PLS-muotoisia soittolistoja." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Sekoita" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Soittolistan nimeäminen ei onnistu" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Tuo soittolista" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Sulje selain" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "S_ulje selain" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Hae kirjastosta" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Hae kirjastosta" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "Tulosten _määrä" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Tuntematon laite" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "VIRHE: '%s' ei ole ainutkertainen etuliite." #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "Virheellinen arvo" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Äänen vahvistus (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Kopioi _albumien kannet" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Yhdistä _moniarvoiset tunnisteet" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Nimi sisältää v_ersion" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "Albumi sisältää _osan" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Malli:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Tallennustila:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Laiteohjelmisto:" #: ../quodlibet/devices/ipod.py:181 #, fuzzy msgid "Removing orphaned iPod track" msgstr "VAROITUS: poistetaan orvoksi jäänyt iPod-kappale" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "iPod-tietokantaa ei voi tallentaa" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Alustamaton iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Haluatko luoda iPodiin tyhjän tietokannan?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Tiedoston hakukuvio:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Poista käyttämättömät kannet ja hakemistot" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Tiedosto on olemassa" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Korvataanko <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Kirjasto" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Tarkistetaan liitoskohdat" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Luetaan musiikkikirjastoa" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Luetaan kohdetta %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d sekunti" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "Tiedostojen avaaminen ei onnistu" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "Virheellinen arvo" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "Kansiota ei voi luoda" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet on jo käynnissä" #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Ei kappaletta soitossa." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet ei ole käynnissä." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Kohteeseen %s ei voi kirjoittaa. Poistetaan." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "musiikkikirjasto ja soitin" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[valitsimet]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Tulosta soiva kappale ja poistu" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Aloita soitto välittömästi" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Hyppää seuraavaan kappaleeseen" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Hyppää edelliseen kappaleeseen" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Aloita soitto" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Keskeytä soitto" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Keskeytä soitto tai jatka sitä" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Aloita soitto" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Lisää äänenvoimakkuutta" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Vähennä äänenvoimakkuutta" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Tulosta soittimen tila" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Piilota pääikkuna" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Näytä pääikkuna" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Piilota tai näytä pääikkuna" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Kohdista käynnissä olevaan soittimeen" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Poista aktiiviset selainsuodattimet" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "_Virkistä kirjasto" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Tulosta nykyinen soittolista" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Tulosta jonon sisältö" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Poistu Quod Libetistä" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Siirry soitettavassa kappaleessa" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Aseta tai vaihda soittojärjestystä" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "" "Aseta soitontoisto päälle, pois, tai vaihda\n" " sen tilaa" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Aseta äänenvoimakkuus" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Hae äänikirjastostasi" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "kysely" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Soita tiedosto" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "tiedostonimi" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Arvostele soiva kappale" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Valitse nykyinen selain" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Avaa uusi selain" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Näytä tai piilota jono" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Näytä tai piilota soittolista" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Suodata satunnaisen arvon perusteella" #: ../quodlibet.py:340 msgid "command|tag" msgstr "tunniste" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Suodata tunnisteen arvon perusteella" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tunniste=arvo" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Lisää tiedosto tai kysely jonoon" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "tiedostonimi" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Poista tiedosto tai kysely jonosta" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "VIRHE: Virheellinen argumentti valitsimelle \"%s\"" #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "VIRHE: Kokeile kirjoittaa %s --help" #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Tuetut tiedostomuodot: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Äänilaite: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Alku" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "-" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Aika" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Kirjanmerkin nimi" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Kirjanmerkit" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Ei aikatietoa" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Arvo:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Tallennetut arvot" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Muokkaa tallennettuja arvoja..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Kappaleet" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Näytä jäljellä oleva aika" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Muokkaa kirjanmerkkejä..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "_Raitaotsakkeet" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "_Albumiotsakkeet" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Pysäytä tämän kappaleen jälkeen" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Suodata tunnisteen arvon perusteella" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Poista tiedostot" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Siirrä roskakoriin" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Poistetaanko tiedosto lopullisesti?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Poistetaanko tiedostot lopullisesti?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s ja %(count)d muu..." msgstr[1] "%(title)s ja %(count)d muuta..." #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "Siirretään %d/%d." #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Poistetaan %d/%d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "iPod-tietokantaa ei voi tallentaa" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Laitteen <b>%s</b> irrottaminen epäonnistui." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Tiedoston poistaminen epäonnistui" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Kohteen <b>%s</b> poistaminen epäonnistui." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Lataukset" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Tiedostonimi" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Koko" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "J_ono" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "hakukaava" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Muokkaa tallennettuja arvoja..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Esikatsele" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Lisäasetukset" #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "puuttuu %d kappaleesta" msgstr[1] "puuttuu %d kappaleesta" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "eri %d kappaleessa" msgstr[1] "eri %d kappaleessa" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Jaa _useammaksi arvoksi" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Erota levyn numero _albumin nimestä" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Erota _versio kappaleen nimestä" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Erota sovittaja ar_tistin nimestä" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Erota _esittäjä artistin nimestä" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Erota _esittäjä artistin nimestä" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Erota _versio kappaleen nimestä" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Lisää tunniste" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Tunniste:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "P_oista kirjastosta" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Muokkaa tunnisteita" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Kirjoita" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Tunnistetta ei voi lisätä" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Tunnistetta <b>%s</b> ei voi lisätä\n" "\n" "Valitut tiedostot eivät tue useita arvoja samalle tunnisteelle." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Virheellinen tunniste" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Tunniste <b>%s</b> ei kelpaa\n" "\n" "Valitut tiedostot eivät tue tämän tunnisteen muokkaamista." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Tunniste saattaa olla epätarkka" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> muuttui ohjelman ollessa käynnissä. Jos tallennat virkistämättä " "kirjastoa, saatat korvata muita kappaleeseen tehtyjä muutoksia.\n" "\n" "Tallennetaanko kappale siitä huolimatta?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Kappaletta ei voi tallentaa" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Kappaleen <b>%s</b> tallentaminen epäonnistui. Tiedosto saattaa olla vain " "luku -muodossa, viallinen, tai sinulla ei ole oikeuksia sen muokkaamiseen." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Virheellinen arvo" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Arvo ei kelpaa: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "Liitä_nnäiset" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d kappale" msgstr[1] "%d kappaletta" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falson Asetukset" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "_Erotin:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Näytä _ohjelmalliset tunnisteet" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Tunnisteiden muokkaus" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Kansiot" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Uusi kansio..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Valitse alihakemistot" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Uusi kansio" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Anna uuden kansion nimi:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Kansiota ei voi luoda" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Kansiota ei voi poistaa" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "%s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Levy %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Raita %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Lisää soittolistaan" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Muokkaa näkymää..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Muokkaa t_unnisteita" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Soitto katkaistu" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "Tyhje_nnä virheet" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Ei kappaleita valittuna" #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Ei kappaleita" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Tiedot" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Sanat" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Virheet" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artisti" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artistit" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "esittäjää" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Ei koskaan" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d kerran" msgstr[1] "%d kertaa" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "lisätty" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "soitettu" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "soittokertoja" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "ohituksia" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "arvosana" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kb/s" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "kesto" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "tiedostokoko" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "muokattu" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bittinopeus" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Tiedosto" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d valittu" msgstr[1] "%d valittu" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Tuottanut %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "esittäjä" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Raita ei ole käytettävissä" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Kappaleet" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d albumiton kappale" msgstr[1] "%d albumitonta kappaletta" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Valittu diskografia" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d kappale, jonka artisti tuntematon" msgstr[1] "%d kappaletta, joiden artisti tuntematon" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "albumit" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Kesto yhteensä:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Koko yhteensä:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Tiedostot" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Lataa" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Kappaleelle ei löydy sanoja." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Etsitään laulun sanoja..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Laulun sanojen lataaminen ei onnistu" #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d kanava" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Hylkää muutokset tunnisteisiin?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Tunnisteita on muutettu, mutta ei tallennettu. Tallennetaanko tiedostot, vai " "hylätäänkö muutokset?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "Tuntematon" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "Järjestyksessä" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_Järjestyksessä" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Sekoitettu" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Painotettu" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Painotettu" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Yksi kappale" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Yksi kappale" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Liitännäisten virheet" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "Liitä_nnäiset" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Näytä _Virheet" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "versio" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "Sulje selain" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Liitännäisiä ei löytynyt." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Levy" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Raita" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "ryhmittely" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_bumi" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "Tie_dostonimi" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Kesto" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Kappalelista" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Hyppää soivaan kappaleeseen automaattisesti" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "Kun soitettava kappale vaihtuu, vieritä soittolistaa sen kohdalle" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "M_uut:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Muokkaa näkymää..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Näytettävät sarakkeet" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Nimi sisältää v_ersion" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Tiedostonimi sisältää hake_miston" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Asetukset" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Selaimet" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Yleissuodatin:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "Pysäytä tämän kappaleen jälkeen" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Hae" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "Kun soitettava kappale vaihtuu, vieritä soittolistaa sen kohdalle" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "Ar_vosana" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Albumilista" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Keskeytä soitto" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "_Äänen vahvistus (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "_Äänen vahvistus (dB):" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "_Replay Gain äänenvoimakkuuden säätö" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "_Replay Gain äänenvoimakkuuden säätö" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Muokkaa tunnisteita" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Hylkää muutokset tunnisteisiin?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "Tallenna arvosanat ja soittomäärät" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Sähköposti:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Arvosanat ja soittomäärät asetetaan tälle osoitteelle" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Uusi kanava" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "_Virkistä kirjasto" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "_Virkistä kirjasto" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Käy läpi _hakemistot" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Ei kappaleita" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Asetukset" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Ominaisuudet" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "J_ono" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Poista kaikki kappaleet jonosta" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "Satunnainen al_bumi" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Soittotapa:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "Soiton_toisto" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Aloita soittolista alusta, kun kaikki kappaleet on soitettu" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Kappaleita ei voi lisätä" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "Kohteen <b>%s</b> käyttämää protokollaa ei tueta." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Musiikki" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "Lisää _kansio..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "Lisää _tiedosto..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "Lisää s_ijainti..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Avaa uusi selain" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "S_uodattimet" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Ei soitettu koskaan" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Top 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "O_hjaus" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Hyppää soivaan kappaleeseen" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Näytä" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Ohje" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "Tyhje_nnä virheet" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Hae" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "_Virkistä kirjasto" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Lataa kirjasto _uudelleen" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Suodata t_yylilajin perusteella" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Suodata _artistin perusteella" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Suodata al_bumin perusteella" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Satunnainen _tyylilaji" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Satunnainen a_rtisti" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Satunnainen alb_umi" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "_Kappalelista" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Etsi muutoksia kirjastostasi" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Lataa kaikki kirjaston kappaleet uudelleen (tämä saattaa kestää kauan)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "40 eniten soittamaasi kappaletta (tasapelitilanteissa saatetaan valita " "enemmän kuin 40)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Lisää sijainti" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Syötä äänitiedoston sijainti:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Sijaintia ei voi lisätä" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> ei ole kelvollinen sijainti." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Lisää musiikkia" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Tarkkaile tätä kansiota uusien kappaleitten varalta" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "Kohdetta %s ei voitu lisätä kirjastoosi.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Kappaletta ei voitu lisätä" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Korvaa _välilyönnit alaviivoilla" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Poista _Windows-yhteensopimattomat merkit" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Poista ta_rkkeet" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Poista _ASCII:hin kuulumattomat merkit" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Nimeä tiedostot" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Uusi nimi" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "Näytä _Virheet" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Jatka" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Tiedoston nimeäminen ei onnistu" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Nimeäminen lähteestä <b>%s</b> kohteeseen <b>%s</b> ei onnistu. " "Kohdetiedosto on mahdollisesti jo olemassa, tai sinulla ei ole oikeuksia " "uuden tiedoston luomiseen tai vanhan poistamiseen." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Polku ei ole absoluuttinen" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Kaava\n" "\t<b>%s</b>\n" "sisältää merkin /, mutta ei ala juurihakemistosta. Välttääksesi hakemistojen " "väärinnimeämistä, aloita kaavasi merkeillä / tai ~/." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Näissä (kaksoispisteellä erotetuissa) hakemistoissa olevat kappaleet " "lisätään kirjastoosi" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Valitse hakemistot" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Tallennetut arvot" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Muokkaa tallennettuja arvoja..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Hae" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Rajoite:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Painoarvo" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Suodata sarakkeen \"%s\" perusteella" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "_Albumiotsakkeet" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "_Raitaotsakkeet" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Albumiotsakkeet" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_Tekijäotsakkeet" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Ai_kaotsakkeet" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Tie_dosto-otsakkeet" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "T_uotanto-otsakkeet" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Mukauta otsakkeita..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Mukauta otsakkeita..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Lisää _jonoon" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Kopioi laitteeseen" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Poista Soittolistalta" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "_Raitaotsakkeet" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "_Tekijäotsakkeet" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "_Albumiotsakkeet" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "Ai_kaotsakkeet" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "Tie_dosto-otsakkeet" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "T_uotanto-otsakkeet" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Tunniste:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Mukautettu" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Korvaa alaviivat _välilyönneillä" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Isot alkukirjaimet tunnisteisiin" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Jaa _useampaan arvoon" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Tunnisteet polusta" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Tunnisteet korvaavat olemassaolevat" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Tunnisteet lisätään olemassaoleviin" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Kaava\n" "\t<b>%s</b>\n" "on virheellinen. Se saattaa sisältää saman tunnisteen kahdesti tai " "parittomia pienemmyys/suuremmuusmerkkejä (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Tunnisteet eivät kelpaa" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Tunnisteet <b>%s</b> eivät kelpaa\n" "\n" "Valitut tiedostot eivät tue näiden tunnisteiden muokkaamista." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Kappaleen muokkaaminen epäonnistui" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Syöttämäsi hakukaava ei kelpaa. Varmista, että syötät merkit < ja > " "muodossa \\< ja \\> ja että tunnisteita ei jää sulkematta.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Muokkaa näkymää" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Raitanumerot" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Aloitus_kohta:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "Raitoja _yhteensä:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Raita" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "ja %d muuta..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Tallennetaan muuttamasi kappaleet." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d/%d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Tyhjennä haku" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Soittolista on jo olemassa nimellä %s." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "Ar_vosana" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Näytä lyhyt käyttöohje" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Näytä versio ja tekijänoikeustiedot" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Käyttö: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[valitsimet]" #: ../quodlibet/util/__init__.py:186 #, fuzzy, python-format msgid "Option %r not recognized." msgstr "VIRHE: Valitsin '%s' ei kelpaa." #: ../quodlibet/util/__init__.py:189 #, fuzzy, python-format msgid "Option %r requires an argument." msgstr "VIRHE: Valitsin '%s' vaatii argumentin." #: ../quodlibet/util/__init__.py:192 #, fuzzy, python-format msgid "%r is not a unique prefix." msgstr "VIRHE: '%s' ei ole ainutkertainen etuliite." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Virheellinen koodaus]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "no" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Päivämäärä täytyy syöttää muodossa 'VVVV', 'VVVV-KK-PP' tai 'VVVV-KK-PP HH:" "MM:SS'." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Replay Gainin vahvistukset syötetään muodossa 'x.yy dB'." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Replay Gainin huiput syötetään muodossa 'x.yy'." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz-kappaletunnisteiden on oltava UUID-muodossa." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz-julkaisun tilaksi kelpaa 'official', 'promotional' tai 'bootleg'." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "albumi" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "sovittaja" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "kirjoittaja" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "säveltäjä" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "kapellimestari" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "yhteys" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "tekijänoikeus" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "päivämäärä" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "kuvaus" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "tyylilaji" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "ryhmittely" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "kieli" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "lisenssi" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "sijainti" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "sanoittaja" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organisaatio" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "nimi" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "versio" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "web-sivusto" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "albumin artisti" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "levy" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "raita" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "nimikkeen tunniste" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "alkuperäinen julkaisupvm" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "alkuperäinen albumi" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "alkuperäinen artisti" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "nauhoituspäivämäärä" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "Julkaisumaa" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "albumin artisti" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "artistit" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "albumin artisti" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "esittäjää" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "esittäjää" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz raidan tunniste" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "MusicBrainz raidan tunniste" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "MusicBrainz artistin tunniste" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz albumin artistin tunniste" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM-tunniste" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz albumin tila" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz albumin tyyppi" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "raidan vahvistus" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "raidan huippu" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "albumin vahvistus" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "albumin huippu" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Asetukset" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "levyt" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "raidat" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "soitto aloitettu" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "täydellinen nimi" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "liitoskohta" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "virheet" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "henkilöt" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "vuosi" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "alkuperäinen julkaisupvm" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "Kirjanmerkit" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "muoto" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "sanoittajaa" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "sovittajaa" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "säveltäjää" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "orkesterinjohtajaa" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "kirjoittajaa" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d sekunti" msgstr[1] "%d sekuntia" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minuutti" msgstr[1] "%d minuuttia" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d tunti" msgstr[1] "%d tuntia" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d päivä" msgstr[1] "%d päivää" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d vuosi" msgstr[1] "%d vuotta" #~ msgid "_Browse Library" #~ msgstr "_Selaa kirjastoa" #~ msgid "No eject command found." #~ msgstr "Irrotuskomentoa ei löytynyt." #~ msgid "Unable to start web browser" #~ msgstr "Web-selainta ei voi käynnistää" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Web-selainta ei löydy. Aseta $BROWSER-muuttujasi, tai varmista, että /usr/" #~ "bin/sensible-browser on olemassa." #, fuzzy #~ msgid "Library Error" #~ msgstr "Kirjaston selain" #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Kopioi laitteeseen" #~ msgid "translator-credits" #~ msgstr "Jari Rahkonen <jari.rahkonen@pp1.inet.fi>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Muut näytettävät sarakkeet välilyönneillä erotettuna" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "_Jatka" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "Tiedot" #~ msgid "_Search:" #~ msgstr "_Hae:" #~ msgid "Search your library" #~ msgstr "Hae kirjastostasi" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, ja muut\n" #~ "\n" #~ "Tämä on vapaa ohjelma; kopiointiehdot löydät lähdekoodista. " #~ "Minkäänlaista\n" #~ "takuuta EI ole; ei edes koskien KAUPPAKELPOISUUTTA tai TIETTYYN " #~ "TEHTÄVÄÄN\n" #~ "SOVELTUVUUTTA.\n" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Koko yhteensä:" #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libetin liitännäiset" #~ msgid "Color _search terms" #~ msgstr "Väritä _hakuehdot" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Näytä yksinkertaiset haut sinisinä, erityishaut vihreinä ja virheelliset " #~ "haut punaisina" #~ msgid "_Select" #~ msgstr "_Valitse" #~ msgid "Separators for splitting tags" #~ msgstr "Erottimet tunnisteiden katkaisemiseen" #, fuzzy #~ msgid "Display" #~ msgstr "Muokkaa näkymää" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libetin asetukset" #~ msgid "Not Played To_day" #~ msgstr "Ei soitettu _tänään" #~ msgid "Not Played in a _Week" #~ msgstr "Ei soitettu _viikkoon" #~ msgid "Not Played in a _Month" #~ msgstr "Ei soitettu _kuukauteen" #~ msgid "B_ottom 40" #~ msgstr "_Viimeiset 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "40 vähiten soittamaasi kappaletta (tasapelitilanteissa saatetaan valita " #~ "enemmän kuin 40)" #~ msgid "gtk-media-next" #~ msgstr "S_euraava" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #, fuzzy #~ msgid "Artist" #~ msgstr "_Artisti" #, fuzzy #~ msgid "Date" #~ msgstr "_Päivämäärä" #~ msgid "Choose New Stations" #~ msgstr "Valitse uusia kanavia" #~ msgid "Add" #~ msgstr "Lisää" #, fuzzy #~ msgid "Bitrate" #~ msgstr "bittinopeus" #~ msgid "_Stations..." #~ msgstr "_Kanavat..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Poistu Quod Libetistä" #~ msgid "Unable to save library" #~ msgstr "Kirjastoa ei voi tallentaa" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Kappaletta ei voi soittaa" #~ msgid "_Information" #~ msgstr "T_iedot" #~ msgid "Sort by title" #~ msgstr "Järjestys: nimi" #~ msgid "Sort by artist" #~ msgstr "Järjestys: artisti" #~ msgid "Lyrics provided by %s." #~ msgstr "Laulun sanat tarjoaa %s" #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Laulun sanoja ei löytynyt.\n" #~ "\n" #~ "Voit pyytää Quod Libetiä etsimään sanoja verkosta Lataa-painikeella. Voit " #~ "myös syöttää ne itse ja klikata sitten tallennuspainiketta." #~ msgid "part" #~ msgstr "osa" #~ msgid "Opening audio device." #~ msgstr "Avataan äänilaite." #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d kappaletta tallennettu" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainz albumin tunniste" #~ msgid "Loaded song library." #~ msgstr "Musiikkikirjasto ladattu." #~ msgid "Unable to open audio device" #~ msgstr "Äänilaitetta ei voi avata" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet yritti käyttää ajureita 'autosink' ja '%(sink)s', mutta niiden " #~ "avaaminen ei onnistunut. Aseta GStreamerin pipeline rivillä\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "tiedostossa ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet ei löytänyt GStreamerin 'filesrc' -elementtiä. Tarkista " #~ "GStreamer-asennuksesi." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer ei voinut avata valittua kappaletta." �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/tr.po����������������������������������������������������������������������������0000644�0001750�0001750�00000252377�12173213426�015356� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Language po/tr translations for PACKAGE package. # Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # genel <turerkan@gmail.com>, 2009. # msgid "" msgstr "" "Project-Id-Version: Quod Libet 2.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:32+0100\n" "Last-Translator: Turerkan <turerkan@gmail.com>\n" "Language-Team: Turerkan <turerkan@gmail.com>\n" "Language: tr\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-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Müzik etiketleri düzenleyici" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Ses dosyalarınızdaki etiketleri düzenler" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Müzik Çalar" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Müzik arşivinizi gezin, dinleyin, düzenleyin" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Çalıcı" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Önizleme" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "bir müzik etiketleyicisi" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "dizin" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "_Programatik etiketleri göster" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Çok Fazla Hata" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "açıklama" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Değer" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Etiket" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Müzik etiketleri düzenleyici" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 msgid "Remove tags" msgstr "" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 msgid "Remove all tags" msgstr "" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Bir etiket değerine göre süz" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Bir etiket değerine göre süz" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Süre bilgisi yok" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Özet kullanım bilgisi göster" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> geçerli bir adres değil." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Bir albümde olmayan şarkılar" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Albüm listesi ayarları" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Albüm _kapaklarını göster" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "_Arama kişileri de içerir" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Albüm Görünümü" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d şarkı" msgstr[1] "%d şarkı" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disk" msgstr[1] "%d disk" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Geçersiz süzgeç" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Ad" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Sanatçı" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Tarih" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "Tür" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Puan" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Tarihe göre sırala" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Ayarlar" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Albüm Listesi" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Albüm Listesi" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Tüm albümler" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d albüm" msgstr[1] "%d albüm" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Albüm _kapaklarını göster" msgstr[1] "Albüm _kapaklarını göster" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Bilinmeyen" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Yeni Bildirim" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Ses bildiriminin yerini girin:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Ses bildirimleri" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Ses Bildirimleri" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_İndir..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Dosyaları İndir" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Dosyayı İndir" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Bildirim eklenemiyor" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> eklenemedi. Sunucu çalışmıyor olabilir, veya adreste bir ses " "bildirimi olmayabilir." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Arşiv Gezici" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d şarkı (%(time)s)" msgstr[1] "%(count)d şarkı (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Bilinmeyen" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Birden fazla değelere _böl" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Özel" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Albüm listesi ayarları" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Dosya Sistemi" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Dosya Sistemi" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Şarkılar kopyalanamıyor" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Seçilen şarkılar başka çalma listelerine veya çalma kuyruğuna kopyalanamıyor." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Arşive Ekle" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Dosya türü desteklenmiyor" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Kanal listesi sadece kanal adresi içerebilir. Diğer kanal listelerini veya " "çalma listelerini içeremez. Bu adres yüklenemedi:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Kanal eklenemedi" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "İnternet Radyosu" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Dosyaları İndir" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Yeni Kanal" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "İnternet radyo kanalı adresi girin:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "puan" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_İnternet Radyosu" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Yeni Kanal" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Yeni Kanal" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Yeni Kanal" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Kanal bulunamadı" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "%s adresinde İnternet radyo kanalı bulunamadı." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Listelenen tüm radyolar zaten arşivinizde." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "Çalma Listesinden _Çıkar" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "Çalma Listesine _Ekle" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d kanal" msgstr[1] "%(count)d kanal" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Aygıt Özellikleri" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Aygıt:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Bağlanmamış" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Bağlama Yeri:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_İsim:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Ortam Aygıtları" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Ortam Aygıtları" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Çıkart" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Yeniden Adlandır" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> kullanılmış, <b>%s</b> boş" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> takılı değil." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "<b>%(song)s</b> Kopyalanıyor" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Şarkı kopyalanamadı" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Bu şarkı için yeterli boş yer yok." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> kopyalanamadı." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Şarkılar silinemiyor" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "<b>%(song)s</b> siliniyor" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> silinemedi." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Şarkı silinemedi" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "<b>%s</b> çıkartılamadı." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Aygıt çıkartılamadı" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Panelli Gezici Ayarları" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Hepsi" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Panelli Gezici" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Panelli Gezici" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Hepsini _Seç" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Şarkı listesi içe aktarılıyor.\n" "\n" "%(current)d/%(total)d şarkı eklendi." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Yeni Çalma Listesi" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Yeni dizin için isim girin:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Yeni Çalma Listesi" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s ve %(count)d tane daha" msgstr[1] "%(title)s ve %(count)d tane daha" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Çalma Listeleri" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Çalma Listeleri" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "Çalma Listesinden _Çıkar" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "İçe _Aktar" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Çalma listesi içe aktarılamadı" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "" "Quod Libet sadece M3u ve PLS biçimli çalma listelerini içe aktarabilir." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Rastgele" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Çalma Listesinin adı değiştirilemedi" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Çalma Listesi İçe Aktar" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Geziciyi Gizle" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "Geziciyi _Gizle" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Arşivde Ara" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "Arşivde _Ara" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "Sonuçları _Sınırla" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Bilinmeyen Aygıt" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "%r desteklenen bir aygıt değil." #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "Ses altsistemi yükleniyor (%s)" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 #, fuzzy msgid "Device backend initialized." msgstr "%r ses altsistemi kurulu değil." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Ses Düzeyi (dB)" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Albüm kapaklarını kopyala" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Birden _çok değeri olan etiketleri birleştir" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "İsim _versiyonları içersin" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "Albüm _disk altyazısını içersin" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Model:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Kapasite:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "Boşta kalan iPod parçası silindi" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "iPod veritabanı kaydedilemedi" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "iPod'la bağlantı kurulmamış" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Bu iPod'da boş bir veritabanı yaratmak istiyor musunuz?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Dosya Adı Süzgeci:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "Kullanılmayan albüm kapakları ve dizinleri _sil" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Dosya zaten var" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "<b>%s</b> dosyasının üstüne yazılsın mı?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "%r yüklenemedi." #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Arşiv" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Bağlama yerleri denetleniyor" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Arşiv taranıyor" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "%s taranıyor" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d saniye" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 #, fuzzy msgid "Output Error" msgstr "Çıktı Kaydı" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Giriş dosyaları açılamadı" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "Gstreamer'da dosya okumayı sağlayacak bileşen yok. Gstreamer kurulum " "ayarlarınızı kontrol edin." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "Geçersiz ses altsistemi" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "%r ses altsistemi kurulu değil." #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Ses çıkışı yaratılamadı." #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Ses aygıtı %r bulunamadı. ~/.quodlibet/config dosyasındaki Xine ayarlarınızı " "kontrol edin." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet zaten çalışıyor." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Şu anda çalmıyor." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet çalışmıyor." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Yazılamayan %s kaldırıldı." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "bir müzik arşivleyici ve çalıcı" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[ayarlar]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Çalan şarkıyı göster ve çık" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Hemen çalmaya başla" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Sonraki şarkıya atla" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Önceki şarkıya atla" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Çalmaya başla" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Çalmayı duraklat" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "çalma/duraklama durumunu değiştir" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Çalmaya başla" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Sesi aç" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Sesi kıs" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Durum bilgisini göster" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Ana pencereyi gizle" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Ana pencereyi göster" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Ana pencere görünürlüğünü değiştir" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Çalışan müzikçalara odaklan" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Geçerli gezici süzgeçlerini kaldır" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Arşivi yenile ve tekrar tara" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Şu anki çalma listesini göster" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Çalma kuyruğunu göster" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Quod Libet'ten çık" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Şarkı içinde ileri/geri git" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][SS:]DD:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Çalma sıralamasını değiştir" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Başa dönmeyi aç, kapat veya değiştir" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Ses yüksekliğini değiştir" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Müzik arşivinde arama yap" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "sorgu" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Bir ses dosyası çal" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "dosya adı" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Çalan şarkıya puan ver" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Geziciyi değiştir" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Yeni bir gezici aç" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Çalma kuyruğunu göster veya sakla" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Şarkı listesini göster veya sakla" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Rastgele bir değerle süz" #: ../quodlibet.py:340 msgid "command|tag" msgstr "etiket" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Bir etiket değerine göre süz" #: ../quodlibet.py:341 msgid "tag=value" msgstr "etiket=değer" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "bir dosya veya sorguyu çalma kuyruğuna koy" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "dosya adı" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "bir dosya veya sorguyu çalma kuyruğundan çıkar" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "'%s' için geçersiz parametre." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Yardım için %s --help komutunu deneyin." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Desteklenen biçimler: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Ses aygıtı: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Baş" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "Yok" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Süre" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Yer İmi Adı" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "DD:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Yer imleri" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Süre bilgisi yok" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Değer:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Kayıtlı Değerler" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Kayıtlı değerleri değiştir..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Şarkılar" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Kalan süreyi göster" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "Yer imlerini _değiştir" #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "Şarkı _Numarası Etiketleri" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "_Albüm Etiketleri" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Bu şarkıdan sonra dur" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Bir etiket değerine göre süz" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Hata Oldu" #: ../quodlibet/qltk/debugwindow.py:71 #, fuzzy, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Quod Libet'te beklenmedik bir durum oluştu. Durumu çözümlememize yardımcı " "olmak için <b>%s</b> adında bir döküm dosyası oluşturuldu. Lütfen http://" "code.google.com/p/quodlibet/issues/list adresine döküm dosyasıyla beraber " "bildirimde bulunun. Bu dosya son dinlediğiniz şarkılar gibi hakkınızda bazı " "bilgiler içerebilir. Bunu uygun bulmuyorsanız yerine <b>%s</b> dosyasını o " "anda ne yaptığınızın bir anlatımıyla beraber gönderebilirsiniz.\n" "\n" "Quod Libet şimdi kararlı durumda olmayabilir. Kapatıp tekrar başlatmanız " "Tavsiye edilir. Arşiviniz kaydedilecektir." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Dosyaları Sil" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Çöpe Taşı" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Dosya geri dönüşü olmayacak şekilde silinsin mi?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Dosyalar geri dönüşü olmayacak şekilde silinsin mi?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s ve %(count)d tane daha..." msgstr[1] "%(title)s ve %(count)d tane daha..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "%(current)d/%(total)d Taşınıyor." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "%(current)d/%(total)d Siliniyor." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "iPod veritabanı kaydedilemedi" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "<b>%s</b> çıkartılamadı." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Dosya silinemedi" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "<b>%s</b> silinemedi." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "İndirilenler" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Dosya Adı" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Boyut" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "Çalma _Kuyruğu" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "süzgeç" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Kayıtlı değerleri değiştir..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Önizleme" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Daha çok seçenek..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "%d şarkıda eksik" msgstr[1] "%d şarkıda eksik" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "%d şarkıda farklı" msgstr[1] "%d şarkıda farklı" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Birden fazla değelere _böl" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Diski _Albümden ayır" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "_Versiyonu İsimden ayır" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Aranjörü _Sanatçıdan ayır" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Seslendireni Sanatçıdan ayır" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Seslendireni Sanatçıdan ayır" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "_Versiyonu İsimden ayır" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Etiket ekle" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Etiket:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "Arşivden _Çıkart" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Etiketleri değiştir" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Yaz" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Etiket eklenemedi" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "<b>%s</b> eklenemedi\n" "\n" "Seçili dosyalar birden fazla değeri desteklemiyor." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Geçersiz etiket" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "<b>%s</b> geçersiz bir etiket\n" "\n" "Seçili dosyalar bu etiketi değiştirmeyi desteklemiyor." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Etiket doğru olmayabilir" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> program çalışıyorken değişti. Arşivi yenilemeden kaydetmek arada " "yapılan değişiklikleri yokedebilir.\n" "\n" "Yine de kaydedilsin mi?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Şarkı kaydedilemedi" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "<b>%s</b> kaydedilemedi. Dosya salt okunur olabilir veya sizin dosyayı " "değiştirme izniniz olmayabilir." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Geçersiz değer" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Geçersiz değer: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Eklentiler" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d şarkı" msgstr[1] "%d şarkı" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso Ayarları" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Buna göre _ayır:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "_Programatik etiketleri göster" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Etiket değiştirme" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Dizinler" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Yeni Dizin..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Tüm Alt Dizinleri Seç" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Yeni Dizin" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Yeni dizin için isim girin:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Dizin yaratılamadı" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Dizin silinemedi" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "%s eseri" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Disk %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Şarkı %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "Çalma Listesine _Ekle" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Görünümü düzenle..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "_Etiketleri Değiştir" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Çalmıyor" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "Hataları _Sil" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Seçili şarkı yok." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Şarkı yok" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Bilgi" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Sözler" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Hatalar" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "sanatçı" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "sanatçılar" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "seslendirenler" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Hiçbir Zaman" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d defa" msgstr[1] "%d defa" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "eklendi" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "en son çalındı" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "defa çalındı" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "defa geçildi" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "puan" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kb/s" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "uzunluk" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "dosya boyutu" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "değiştirildi" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bit oranı" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Dosya" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d tane seçili" msgstr[1] "%d tane seçili" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Yapımcı %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "seslendiren" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Şarkı yok" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Şarkı Listesi" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d tane albümsüz şarkı" msgstr[1] "%d tane albümsüz şarkı" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Seçili Diskografi" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d sanatçısız şarkı" msgstr[1] "%d sanatçısız şarkı" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "albümler" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Toplam uzunluk:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Toplam boyut:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Dosyalar" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Çıktı Kaydı" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_İndir" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Bu şarkının sözleri bulunamadı." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Şarkı sözleri aranıyor..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Şarkı sözleri indirilemedi." #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d kanal" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Etiket değişikliklerini gözardı et?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Etiketler değiştirildi ama kaydedilmedi. Dosyaları kaydetmek mi yoksa " "değişiklikleri gözardı etmek mi istersiniz?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Bilinmeyen" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "Sırayla" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_Sırayla" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Rastgele" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Ağırlıklı" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Ağırlıklı" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Bir Şarkı" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Bir Şarkı" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Eklenti Hataları" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Eklentiler" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "_Hataları Göster" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "versiyon" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "Geziciyi Gizle" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Eklenti bulunamadı." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disk" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "Şarkı _No" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "grup" #: ../quodlibet/qltk/prefs.py:43 #, fuzzy msgid "Al_bum" msgstr "_Albüm" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Dosya Adı" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Uzunluk" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Şarkı Listesi" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "Çalan şarkıya otomatik olarak _atla" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "Çalan şarkı değişince listede yeni şarkıya git" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Diğerleri:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Görünümü düzenle..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Görünen Sütunlar" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "_Arama kişileri de içerir" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Dosya adı _dizinleri içersin" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Ayarlar" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Geziciler" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Evrensel süzgeç:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "Bu şarkıdan sonra dur" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Ara" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "Çalan şarkı değişince listede yeni şarkıya git" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "_Puan" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "Önizlemelerde _yuvarlatılmış köşeler kullan" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "albüm kapat resimlerinin kenarlarını yuvarlat. Tekrar başlatmayı " "gerektirebilir." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Albüm Listesi" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Çalmayı duraklat" #: ../quodlibet/qltk/prefs.py:306 #, fuzzy msgid "Output Configuration" msgstr "Çıktı Kaydı" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "Ses Düzeyi Düzeltmesi bilgisi yoksa, sesi buna ayarla" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "Öntanımlı ses (dB):" #: ../quodlibet/qltk/prefs.py:331 #, fuzzy msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "Kesilme olmadığı sürece bütün şarkıların ses düzeyini buna ayarla" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "Pre-amp düzeyi (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "Ses Düzeyi Düzeltmesini etkinleştir (Replay Gain)" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Ses Düzeyi Düzeltmesi" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Etiketleri değiştir" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Etiket değişikliklerini gözardı et?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "_Puan ve çalma seferlerini kaydet" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_E-posta:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Puan ve çalma seferleri bu posta adresi için kaydedilecek" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Yeni Kanal" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "Başlangıçta arşivi _yenile" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "Arşivi _Yenile" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "_Dizinleri tara" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Şarkı yok" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Ayarlar" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Özellikler" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "Çalma _Kuyruğu" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Kuyruğu temizle" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Rastgele" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Sıralama:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Başa dön" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Çalma listesi bitince başa dön" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Şarkılar eklenemedi" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> desteklenmeyen bir protokol kullanıyor." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Müzik" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "Dizin _Ekle..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "Dosya _Ekle..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "Adres _Ekle..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Yeni bir gezici aç" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Süzgeçler" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Hiç çalınmadı" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Tepe 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Kontrol" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "Çalan Şarkıya _Atla" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Görünüm" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Yardım" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "_Çıktı Kayıtları" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "Hata _Yüzünden" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Ara" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Arşivi _Yenile" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Arşivi _Baştan Yükle" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "_Türe göre süz" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "_Sanatçıya göre süz" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "_Albüme göre süz" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Rastgele Müzik _Türü" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Rastgele _Sanatçı" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "_Rastgele Albüm" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Şarkı _Listesi" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Arşivinizdeki değişiklikleri denetle" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Arşivi baştan yükle (uzun sürebilir)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "En çok çaldığınız 40 şarkı (eşitlik varsa 40'tan fazla olabilir)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Adres Ekle" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Ses dosyasının yerini gir:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Adres eklenemedi" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> geçerli bir adres değil." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Şarkı Ekle" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Bu dizini yeni şarkılar için denetle" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s arşive eklenemedi.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Şarkı eklenemedi" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Geçersiz bir komut olan %r alındı." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "%r gezicisi bilinmiyor." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Boşlukları _altçizgi ile değiştir" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "_Windows'la uyumsuz karakterleri çıkart" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "_Düzeltme işaretlerini çıkart" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "_ASCII olmayan karakterleri çıkart" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Yeniden Adlandır" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Yeni İsim" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "_Hataları Göster" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Devam" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Dosya yeniden adlandırılamadı" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "<b>%s</b>, <b>%s</b> olarak yeniden adlandırılamadı. Yeni isimle zaten bir " "dosya olabilir, yeni bir dosya yaratmak veya eskisini silmek için izniniz " "olmayabilir." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Yol mutlak değil" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Girdiğiniz bu süzgeç;\n" "\t<b>%s</b>\n" "/ karakteri içermekle beraber kök dizininden başlamıyor. Hatalı " "isimlendirmelerden sakınmak için süzgeçinize / veya ~/ şeklinde bir kök " "verin." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "Bu (':' ile ayrılmış) dizinlerdeki şarkılar arşivinize eklenecek" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Dizin Seç" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Kayıtlı Değerler" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Kayıtlı değerleri değiştir..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Ara" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Sınır:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Ağırlık" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "%s etiketine göre süz" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "_Albüm Etiketleri" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Şarkı _Numarası Etiketleri" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Albüm Etiketleri" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_Kişi Etiketleri" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Tarih Etiketleri" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_Dosya Etiketleri" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "_Yapımcı Etiketleri" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Etiketleri Özelleştir..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Etiketleri Özelleştir..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Çalma _Kuyruğuna Ekle" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "Aygıta _Kopyala" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "Çalma Listesinden _Çıkar" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "Şarkı _Numarası Etiketleri" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "_Kişi Etiketleri" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "_Albüm Etiketleri" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "_Tarih Etiketleri" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "_Dosya Etiketleri" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "_Yapımcı Etiketleri" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Etiket:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Özel" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "_Altçizgileri boşlukla değiştir" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "Etiketlerde _büyük/küçük harfleri düzelt" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Birden fazla değere _ayır" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Dosya Yolundan Etiket" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Yeni etiketler eskilerin yerine geçsin" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Yeni etiketler eskilerine eklensin" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Girdiğiniz bu süzgeç;\n" "\t<b>%s</b>\n" "geçersiz. Aynı etiketi iki defa içeriyor olabilir veya parantezleri hatalı " "olabilir (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Geçersiz etiketler" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "<b>%s</b> etiketleri geçersiz\n" "\n" "Seçili dosyalar bu etiketleri değiştirmeyi desteklemiyor." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Şarkı değiştirilemedi" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Girdiğiniz süzgeç geçersiz. \\< ve \\> yerine < ve > kullanmaya " "ve parantez sayılarına dikkat edin.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Görünümü Değiştir" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Çok Fazla Hata" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Arka arkaya %d hata olduğu için çalma durduruldu." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Şarkı Numaraları" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "_Başlangıç:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Toplam Şarkı:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Şarkı" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "ve %d tane daha..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Değişiklik yapılan dosyalar kaydediliyor." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d şarkı kaydedildi.\n" "(%(remaining)s kaldı)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d taneden %d tanesi" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Aramayı temizle" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "%s adında bir çalma listesi zaten var." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 #, fuzzy msgid "D: " msgstr "U:" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "U:" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "_Puan" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "H:" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Özet kullanım bilgisi göster" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Versiyon ve telif haklarını göster" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Kullanım: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[ayarlar]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "%r parametresi anlaşılmadı." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "%r için bir parametre vermelisiniz." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r eşsiz bir önek değil." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[kodlama Hatası]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Tarih şu biçimlerin birinde girilmelidir: 'YYYY', 'YYYY-AA-GG' veya 'YYYY-AA-" "GG SS:DD:SS'." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "" "Ses Düzeyi Düzeltmesi (Replay Gain) değeri 'x.yy dB' biçminde girilmelidir." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "" "Ses Düzeyi Düzeltmesi (Replay Gain) tepe değerleri 'x.yy' biçminde " "girilmelidir." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz ID'leri UUID biçminde girilmelidir." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz'de yayın durumu 'official', 'promotional' veya 'bootleg' " "olmalıdır." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "albüm" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "aranjör" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "yazar" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "besteci" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "orkestra şefi" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "iletişim" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "telif hakkı" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "tarih" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "açıklama" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "tür" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "grup" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "dil" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "lisans" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "konum" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "söz yazarı" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organizasyon" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "isim" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "versiyon" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "web" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "albüm sanatçısı" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "disk altyazısı" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disk" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "şarkı no" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "yapımcı ID" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "asıl yayım tarihi" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "asıl albüm" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "asıl sanatçı" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "kayıt tarihi" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "yayımlandığı ülke" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "albüm sanatçısı (sıralama)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "sanatçı (sıralama)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "albüm (sıralama)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "seslendiren (sıralama)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "seslendirenler (sıralama)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz şarkı ID'si" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "MusicBrainz yayın ID'si" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz sanatçı ID'si" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM ID'si" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz albüm durumu" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz albüm türü" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "şarkı ses seviyesi" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "şarkı tepe ses seviyesi" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "albüm ses seviyesi" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "albüm tepe ses seviyesi" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Ayarlar" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "diskler" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "şarkılar" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "son başlatılan" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "tam isim" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "bağlama yeri" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "hatalar" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "kişiler" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "yıl" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "asıl yayım tarihi" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "yer imi" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "Süre bilgisi yok" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "söz yazarları" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "aranjörler" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "besteciler" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "orkestra şefleri" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "yazarlar" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d saniye" msgstr[1] "%d saniye" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d dakika" msgstr[1] "%d dakika" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d saat" msgstr[1] "%d saat" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d gün" msgstr[1] "%d gün" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d yıl" msgstr[1] "%d yıl" #~ msgid "_Browse Library" #~ msgstr "Arşivi _Gez" #~ msgid "No eject command found." #~ msgstr "Çıkartma komutu bulunamadı." #~ msgid "Unable to start web browser" #~ msgstr "İnternet gezicisi başlatılamadı" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Bir internet gezicisi bulunamadı. Lütfen $BROWSER değişkenini ayarlayın " #~ "veya /usr/bin/sensible-browser dosyasının var olduğundan emin olun." #, fuzzy #~ msgid "Library Error" #~ msgstr "Arşiv Gezici" #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Çıktı Kayıtları" #~ msgid "translator-credits" #~ msgstr "Türerkan İnce (turerkan@gmail.com)" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Diğer gösterilecek sütunlar, boşluklarla ayrılmış olarak" #~ msgid "_Edit and Continue" #~ msgstr "_Düzenle ve Devam Et" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "Bilgi" #~ msgid "_Search:" #~ msgstr "_Ara:" #~ msgid "Search your library" #~ msgstr "Arşivinizde arama yapın" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quod-libet-development@googlegroups.com>\n" #~ "Telif Hakkı 2004-2005 Joe Wreschnig, Michael Urman ve diğerleri\n" #~ "\n" #~ "Bu yazılım ücretsizdir; kopyalama koşulları için kaynak koda başvurun. " #~ "There is NO\n" #~ "Yazılımın hiçbir şekilde GARANTİSİ YOKTUR. Buna herhangi bir amaç için " #~ "kullanılabilirlik bile dahildir.\n" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r hiçbir gezici içermiyor." #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Toplam boyut:" #~ msgid "%r doesn't contain any devices." #~ msgstr "%r hiçbir aygıt içermiyor." #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet Eklentileri" #~ msgid "Color _search terms" #~ msgstr "Arama kriterlerini _renklendir" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "basit aramalar mavi, gelişmiş aramalar yeşil, geçersiz aramalar kırmızı" #~ msgid "_Select" #~ msgstr "_Seç" #~ msgid "Separators for splitting tags" #~ msgstr "etiketler ayırıcıları" #, fuzzy #~ msgid "Display" #~ msgstr "Görünümü Değiştir" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet Ayarları" #~ msgid "Not Played To_day" #~ msgstr "_Bugün çalınmadı" #~ msgid "Not Played in a _Week" #~ msgstr "Bir _haftadır çalınmadı" #~ msgid "Not Played in a _Month" #~ msgstr "Bir _aydır çalınmadı" #~ msgid "B_ottom 40" #~ msgstr "_Dip 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "En az çaldığınız 40 şarkı (eşitlik varsa 40'tan fazla olabilir)" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #, fuzzy #~ msgid "Artist" #~ msgstr "_Sanatçı" #, fuzzy #~ msgid "Date" #~ msgstr "_Tarih" #~ msgid "Choose New Stations" #~ msgstr "Yeni Kanal Seç" #~ msgid "Add" #~ msgstr "Ekle" #~ msgid "Bitrate" #~ msgstr "Bit oranı" #~ msgid "_Stations..." #~ msgstr "_Kanallar..." #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Quod Libet'ten çık" #~ msgid "Initializing audio backend (%s)" #~ msgstr "Ses altsistemi yükleniyor (%s)" #~ msgid "Initializing main library (%s)" #~ msgstr "Ana kitaplık yükleniyor (%s)" #~ msgid "Unable to save library" #~ msgstr "Arşiv kaydedilemedi" #~ msgid "" #~ "The audio output pipeline %r could not be created. Check your GStreamer " #~ "settings in ~/.quodlibet/config." #~ msgstr "" #~ "Ses çıkış hattı %r yaratılamadı. ~/.quodlibet/config dosyasındaki " #~ "Gstreamer ayarlarınızı kontrol ediniz." #~ msgid "_Information" #~ msgstr "_Bilgi" #~ msgid "Sort by title" #~ msgstr "İsime göre sırala" #~ msgid "Sort by artist" #~ msgstr "Sanatçıya göre sırala" #~ msgid "Lyrics provided by %s." #~ msgstr "Şarkı sözleri %s tarafından sağlanmıştır." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Şarkı sözleri bulunamadı.\n" #~ "\n" #~ "İndir'e basarak arama yaptırabilirsiniz veya kendinizi yazıp Kaydet'e " #~ "basabilirsiniz." �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/POTFILES.in����������������������������������������������������������������������0000644�0001750�0001750�00000004155�12173213426�016133� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������data/exfalso.desktop.in data/quodlibet.desktop.in exfalso.py operon.py quodlibet/browsers/albums.py quodlibet/browsers/audiofeeds.py quodlibet/browsers/_base.py quodlibet/browsers/collection.py quodlibet/browsers/filesystem.py quodlibet/browsers/__init__.py quodlibet/browsers/iradio.py quodlibet/browsers/media.py quodlibet/browsers/paned.py quodlibet/browsers/playlists.py quodlibet/browsers/search.py quodlibet/devices/_base.py quodlibet/devices/__init__.py quodlibet/devices/ipod.py quodlibet/devices/storage.py quodlibet/formats/_audio.py quodlibet/formats/__init__.py quodlibet/__init__.py quodlibet/library/__init__.py quodlibet/library/libraries.py quodlibet/player/gstbe.py quodlibet/player/_gstutils.py quodlibet/player/__init__.py quodlibet/player/xinebe.py quodlibet/plugins/__init__.py quodlibet.py quodlibet/qltk/about.py quodlibet/qltk/bookmarks.py quodlibet/qltk/browser.py quodlibet/qltk/cbes.py quodlibet/qltk/chooser.py quodlibet/qltk/controls.py quodlibet/qltk/data_editors.py quodlibet/qltk/debugwindow.py quodlibet/qltk/delete.py quodlibet/qltk/downloader.py quodlibet/qltk/_editpane.py quodlibet/qltk/edittags.py quodlibet/qltk/exfalsowindow.py quodlibet/qltk/filesel.py quodlibet/qltk/info.py quodlibet/qltk/information.py quodlibet/qltk/logging.py quodlibet/qltk/lyrics.py quodlibet/qltk/maskedbox.py quodlibet/qltk/msg.py quodlibet/qltk/notif.py quodlibet/qltk/playorder.py quodlibet/qltk/pluginwin.py quodlibet/qltk/prefs.py quodlibet/qltk/properties.py quodlibet/qltk/queue.py quodlibet/qltk/quodlibetwindow.py quodlibet/qltk/ratingsmenu.py quodlibet/qltk/remote.py quodlibet/qltk/renamefiles.py quodlibet/qltk/scanbox.py quodlibet/qltk/searchbar.py quodlibet/qltk/songlist.py quodlibet/qltk/songsmenu.py quodlibet/qltk/sortdialog.py quodlibet/qltk/tagsfrompath.py quodlibet/qltk/textedit.py quodlibet/qltk/tracker.py quodlibet/qltk/tracknumbers.py quodlibet/qltk/views.py quodlibet/qltk/wlw.py quodlibet/qltk/x.py quodlibet/util/collection.py quodlibet/util/dprint.py quodlibet/util/__init__.py quodlibet/util/library.py quodlibet/util/logging.py quodlibet/util/massagers.py quodlibet/util/songwrapper.py quodlibet/util/tags.py �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/zh_TW.po�������������������������������������������������������������������������0000644�0001750�0001750�00000247163�12173213426�015761� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Traditional Chinese (zh_TW) translations for Quod Libet. # Copyright (C) 2006 THE Quod Libet'S COPYRIGHT HOLDER # This file is distributed under the same license as the Quod Libet package. # Hsin-lin Cheng <lancetw@gmail.com>, 2006. # msgid "" msgstr "" "Project-Id-Version: Quod Libet 0.24\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:36+0100\n" "Last-Translator: Hsin-lin Cheng <lancetw@gmail.com>\n" "Language-Team: Hsin-lin Cheng <lancetw@gmail.com>\n" "Language: 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" "X-Generator: Poedit 1.5.4\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "音效標籤編輯器" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "編輯您的音訊標籤" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "音樂播放器" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "收聽、瀏覽,或編輯您的音訊收藏" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "播放器" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "預覽 (_P)" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "一個音訊標籤編輯器" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "目錄" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "顯示標題音樂 (programmatic) 標籤 (_p)" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "描述" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "設定值" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "標籤" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "音效標籤編輯器" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 msgid "Remove tags" msgstr "" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 msgid "Remove all tags" msgstr "" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "以標籤值篩選" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "以標籤值篩選" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "無時間資訊" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "顯示基本的使用方法" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> 不是有效的位置。" #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "專輯中沒有曲目" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "專輯清單偏好設定" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "顯示專輯封面 (_C)" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "專輯顯示" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d 音軌" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d 唱片" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "無效的格式" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "標題" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "演出者 (_A)" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "日期 (_D)" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "風格" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "評等 (_R)" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "依日期排序" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "偏好設定" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "專輯清單" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "專輯清單 (_A)" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "所有專輯" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d 專輯" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "顯示專輯封面 (_C)" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "未知" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "新的饋流" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "輸入音訊檔案饋流位置:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "音訊饋流" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "音訊饋流 (_A)" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "下載... (_D)" #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "下載檔案" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "下載檔案" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "無法加入饋流" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "<b>%s</b> 不能被加入。伺服器可能關機中,或者這位置可能不是音訊饋流。" #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "資料庫瀏覽器" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d 曲目 (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "未知" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "多重設定值分割 (_M)" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "自訂 (_C)" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "專輯清單偏好設定" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "檔案系統" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "檔案系統 (_F)" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "無法複製曲目" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "選取的檔案不能被複製到其他曲目清單或佇列。" #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "加入資料庫 (_A)" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "未支援的檔案格式" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "站台清單僅能是站台位置,而不能是其他站台清單或播放清單。以下的位置不能被載" "入:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "無法加入站台" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "網路電台" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "下載檔案" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "新站台" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "輸入網路電台位置:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "曲目評等" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "網路電台 (_I)" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "新的站台 (_N)" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "新的站台 (_N)" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "新站台" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "未發現站台" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "%s 沒有網路電台被發現。" #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "所有列出的站台已經在您的資料庫當中了。" #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "從播放清單中移除 (_R)" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "加入播放清單 (_A)" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d 站台" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "裝置屬性" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "裝置:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "未掛載" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "掛載點:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "名稱:(_N)" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "媒體裝置" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "媒體裝置 (_M)" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "退出 (_E)" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "重新命名 (_R)" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> 已使用,<b>%s</b> 可用" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> 未連線。" #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "正在複製 <b>%s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "無法複製曲目" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "沒有足夠的空間給這首曲目。" #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "無法複製 <b>%s</b>。" #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "無法刪除曲目" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "正在刪除 <b>%s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "無法刪除 <b>%s</b>。" #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "無法刪除曲目" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "退出 <b>%s</b> 失敗。" #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "無法退出裝置" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "窗格瀏覽器偏好設定" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "全部" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "窗格瀏覽器" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "窗格瀏覽器 (_P)" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "全選 (_A)" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "正在匯入播放清單。\n" "\n" "%d/%d 曲目已加入。" #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "新的播放清單" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "輸入新資料夾的名稱:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "新的播放清單 (_N)" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, fuzzy, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s 與其他 %(count)d 首..." #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "播放清單" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "播放清單 (_P)" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "從播放清單中移除 (_R)" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "匯入 (_I)" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "無法匯入播放清單" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet 僅不能匯入 M3U 或 PLS 格式的播放清單。" #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "洗牌 (_S)" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "無法重新命名播放清單" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "匯入播放清單" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "停用瀏覽器" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "停用瀏覽器 (_D)" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "搜尋資料庫" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "搜尋資料庫 (_S)" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "設定搜尋結果上限 (_L)" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "未知的裝置" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "錯誤:「%s」不是一個獨特的前綴 (prefix)。" #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "無效的設定值" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "音量增益 (dB):(_V)" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "複製專輯封面 (_A)" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "以多個設定值合併標籤" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "標題包含版本 (_V)" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "專輯包含部份 (_P)" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "模式;" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "容量:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "韌體" #: ../quodlibet/devices/ipod.py:181 #, fuzzy msgid "Removing orphaned iPod track" msgstr "警告:正在移除孤立的 iPod 音軌" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "無法儲存 iPod 資料庫" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "iPod 尚未初始化" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "您是否要在這 iPod 上建立一個空的資料庫?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "檔名型態 (_F)" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "移除不在使用的專輯封面與目錄 (_R)" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "檔案已存在" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "是否複寫 <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "資料庫" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "正在檢查掛載點" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "正在掃瞄資料庫" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "正在掃瞄 %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d 秒" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "無法開啟檔案" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "無效的設定值" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "無法建立資料夾" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet 已經在執行了。" #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "當前沒有播放中的曲目。" #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet 並未執行。" #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "無法寫入 %s。正在移除。" #: ../quodlibet.py:296 msgid "a music library and player" msgstr "一個音樂資料庫與播放器" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[選項]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "顯示播放中的曲目並離開" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "立即開始播放" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "跳到下一個曲目" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "跳到上一個曲目" #: ../quodlibet.py:307 msgid "Start playback" msgstr "開始播放" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "暫停播放" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "切換 播放/暫停 模式" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "開始播放" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "調高音量" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "調低音量" #: ../quodlibet.py:313 msgid "Print player status" msgstr "顯示播放器狀態" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "隱藏主視窗" #: ../quodlibet.py:315 msgid "Show main window" msgstr "顯示主視窗" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "切換主視窗可見性" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "焦點移到執行中的播放器" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "重新整理資料庫 (_F)" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "顯示當前的播放清單" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "顯示佇列的內容" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "離開 Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "在其中找尋播放中的曲目" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "設定或切換播放順序" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "關掉、打開或切換重新播放" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "設定音量" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "搜尋您的音訊資料庫" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "查詢" #: ../quodlibet.py:334 msgid "Play a file" msgstr "播放檔案" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "command|filename" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "評等播放中的曲目" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "設定當前的瀏覽器" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "開啟新的瀏覽器" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "顯示或隱藏佇列" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "顯示或隱藏主要曲目清單" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "以亂數篩選" #: ../quodlibet.py:340 msgid "command|tag" msgstr "command|tag" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "以標籤值篩選" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tag=value" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "佇列檔案或查詢" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "檔名" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 #, fuzzy msgid "Unqueue a file or query" msgstr "佇列檔案或查詢" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "錯誤:無效的參數:「%s」。" #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "錯誤:試試 %s --help。" #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "支援格式:%s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "音訊裝置:%s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "開頭" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/A" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "時間" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "書籤名稱" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "書籤" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "無時間資訊" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "設定值:(_V)" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "已儲存設定值" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "編輯儲存設定值..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "曲目" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "顯示剩餘時間" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "編輯書籤... (_E)" #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "音軌檔頭 (_T)" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "專輯檔頭 (_A)" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "在這首歌之後停止" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "以標籤值篩選" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "刪除檔案" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "移到回收筒 (_M)" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "永久刪除這個檔案?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "永久刪除這些檔案?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s 與其他 %(count)d 首..." #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "正在移動 %d/%d。" #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "正在刪除 %d/%d。" #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "無法儲存 iPod 資料庫" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "退出 <b>%s</b> 失敗。" #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "無法刪除檔案" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "刪除 <b>%s</b> 失敗。" #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "下載" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "檔案名稱" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "大小" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "佇列 (_Q)" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "模式" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "編輯儲存設定值..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "預覽 (_P)" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "更多選項... (_M)" #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "%d 曲目遺失" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "%d 首曲目有差異" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "多重設定值分割 (_M)" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "從專輯分離唱片 (_A)" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "從標題分離版本 (_V)" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "從演出者分離組織者 (_T)" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "從演出者分離演奏者 (_P)" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "從演出者分離演奏者 (_P)" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "從標題分離版本 (_V)" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "加入標籤" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "標籤:(_T)" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "ql-remove" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "編輯標籤" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "寫入" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "無法加入標籤" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "無法加入 <b>%s</b>\n" "\n" "當前選取的檔案不支援多重設定值。" #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "無效的標籤" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "無效的標籤 <b>%s</b>\n" "\n" "當前選取的檔案不支援標籤編輯。" #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "標籤可能不正確" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "當程式執行時 <b>%s</b> 已經被改變了。 沒有更新您的資料庫就儲存可能會複寫這首" "曲目其他的變更。\n" "\n" "無論如何都要儲存這首曲目?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "無法儲存曲目" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "儲存 <b>%s</b> 時發生錯誤。這個檔案可能唯讀、損壞或是您沒有編輯權限。" #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "無效的設定值" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "無效的設定值:<b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "外掛 (_P)" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d 曲目" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso 偏好設定" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "分隔標記 (_O)" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "顯示標題音樂 (programmatic) 標籤 (_p)" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "標籤編輯" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "資料夾" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "新資料夾... (_N)" #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "選取所有子資料夾 (_S)" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "新資料夾" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "輸入新資料夾的名稱:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "無法建立資料夾" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "無法刪除資料夾" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "演出者:%s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "唱片 %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "音軌 %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "加入播放清單 (_A)" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "編輯顯示... (_E)" #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "編輯標籤 (_T)" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "尚未播放" #: ../quodlibet/qltk/information.py:61 #, fuzzy msgid "_Clear Errors" msgstr "外掛程式錯誤" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "無曲目被選取。" #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "無曲目" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "資訊" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "歌詞" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 #, fuzzy msgid "Errors" msgstr "顯示錯誤 (_E)" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "演出者" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "演出者" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "表演者" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "從未" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d 次" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "加入時間" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "上次播放" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "播放次數" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "跳過次數" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "曲目評等" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "長度" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "檔案大小" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "修改時間" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "位元率" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "檔案" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d 已選取" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "由 %s 創作" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "表演者" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "無效的音軌" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "音軌清單" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d 曲目沒有專輯資訊" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "已選擇音樂唱片分類" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d 曲目沒有演出者資訊" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "專輯" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "總計長度:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "合計大小:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "檔案" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "下載 (_D)" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "找不到這首曲目的歌詞。" #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "正在搜尋歌詞..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "無法下載歌詞。" #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d 站台" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "要放棄標籤的變更?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "標籤已被改變但尚未儲存。要儲存這些檔案或者是放棄變更?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "未知" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "順序" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "順序 (_I)" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "洗牌" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "加權" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "加權 (_W)" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "單曲" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "單曲 (_O)" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "外掛程式錯誤" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "外掛 (_P)" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "顯示錯誤 (_E)" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "版本" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "停用瀏覽器" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "找不到外掛。" #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "唱片 (_D)" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "音軌 (_T)" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "組合" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "專輯 (_B)" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "檔名 (_F)" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "長度 (_L)" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "曲目清單" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "自動跳到播放中的曲目 (_J)" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "當變更播放中的曲目時,捲動清單到該曲目位置" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "其他:(_O)" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "編輯顯示... (_E)" #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "可視欄位" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "標題包含版本 (_V)" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "檔名包含資料夾 (_F)" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "偏好設定" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "瀏覽器" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "通用篩選:(_G)" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "在這首歌之後停止" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "搜尋" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "當變更播放中的曲目時,捲動清單到該曲目位置" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "評等 (_R)" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "專輯清單" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "暫停播放" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "音量增益 (dB):(_V)" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "音量增益 (dB):(_V)" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "回放增益音量修正 (_R)" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "回放增益音量修正 (_R)" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "編輯標籤" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "要放棄標籤的變更?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "儲存評等與播放次數" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "電子郵件:(_E)" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "評等和播放次數將會被設定到這個電子郵件地址" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "新的站台 (_N)" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "重新整理資料庫 (_F)" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "重新整理資料庫 (_F)" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "掃瞄目錄 (_D)" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "無曲目" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "偏好設定" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "屬性" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "佇列 (_Q)" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "移除佇列中所有曲目" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "隨機 (_R)" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "排序:(_O)" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "重覆播放 (_R)" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "當結束時重新開始這個播放清單" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "無法加入曲目" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> 使用了未支援的通訊協定。" #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "音樂 (_M)" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "加入資料夾... (_A)" #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "加入檔案... (_A)" #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "加入位置... (_A)" #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "開啟新的瀏覽器" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "篩選 (_F)" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "從未播放過 (_N)" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "前 40 名 (_T)" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "控制 (_C)" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "跳到播放中的曲目 (_J)" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "檢視 (_V)" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "說明 (_H)" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "外掛程式錯誤" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "搜尋" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "重新整理資料庫 (_F)" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "重新載入資料庫 (_L)" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "依風格篩選 (_G)" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "依演出者篩選 (_A)" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "依專輯篩選 (_B)" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "隨機風格 (_G)" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "隨機演出者 (_A)" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "隨機專輯 (_B)" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "曲目排序 (_L)" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "檢查您的資料庫變動" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "重新載入您的資料庫中所有曲目 (這可能會花一些時間)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "這是您播放最多次的 40 首曲目 (排名平手的話或許會超出 40 首)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "加入位置" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "輸入音訊檔案位置:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "無法加入位置" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> 不是有效的位置。" #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "加入音樂" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "監視這個資料夾中的新曲目" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s 不能被加到您的資料庫。\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "無法加入曲目" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "以底線替換空白 (_U)" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "刪除不相容 Windows 的字元 (_W)" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "刪除發音標記 (_D)" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "刪除非 ASCII 字元 (_A)" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "重新命名檔案" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "新的名稱" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "顯示錯誤 (_E)" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "繼續 (_C)" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "無法重新命名檔案" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "重新命名 <b>%s</b> 成 <b>%s</b> 時失敗。可能目標檔案已存在,或者是您沒有足夠" "的權限來建立新檔案或移除舊檔案。" #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "不是絕對路徑" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "這個模式\n" "\t<b>%s</b>\n" "包含 / 但不是以根目錄為起始。要避免呼叫錯誤的資料夾,您的起始目錄格式應為 / " "或 ~/。" #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "這些資料夾 (以「:」隔開) 中所放置的曲目將會被加入到您的資料庫中" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "選取目錄" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "已儲存設定值" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "編輯儲存設定值..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "搜尋" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "限制 (_L):" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "加權 (_W)" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "以 %s 篩選 (_F)" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "專輯檔頭 (_A)" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "音軌檔頭 (_T)" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "專輯檔頭 (_A)" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "個人或團體檔頭 (_P)" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "日期檔頭 (_D)" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "檔案檔頭 (_F)" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "出版檔頭 (_P)" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "設置檔頭... (_C)" #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "設置檔頭... (_C)" #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "加入佇列 (_A)" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "複製到裝置 (_C)" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "從播放清單中移除 (_R)" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "音軌檔頭 (_T)" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "個人或團體檔頭 (_P)" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "專輯檔頭 (_A)" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "日期檔頭 (_D)" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "檔案檔頭 (_F)" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "出版檔頭 (_P)" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "標籤:(_T)" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "自訂 (_C)" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "以空白替換底線 (_U)" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "標籤英文首字大寫 (_T)" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "分割多重設定值" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "從路徑名設定標籤" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "替換現存的標籤" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "加入現存的標籤" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "格式\n" "\t<b>%s</b>\n" "無效。可能是包含兩次同樣的標籤或是括號不平衡 (< / >)。" #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "無效的標籤" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "無效的標籤 <b>%s</b>\n" "\n" "當前選取的檔案不支援標籤編輯。" #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "無法編輯曲目" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "您所輸入的格式無效。確定您輸入 < 和 > 代替 \\< 和 \\>;並且您輸入" "的標籤都對稱。\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "編輯顯示" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "音軌編號" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "起始編號:(_m)" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "總計音軌數:(_T)" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "音軌" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "與其他 %d 首..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "正在儲存曲目變更。" #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d 之 %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "清除搜尋紀錄" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "叫作 %s 的播放清單已經存在了。" #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "評等 (_R)" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "顯示基本的使用方法" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "顯示版本與著作權" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "使用方法:%s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[選項]" #: ../quodlibet/util/__init__.py:186 #, fuzzy, python-format msgid "Option %r not recognized." msgstr "錯誤:選項「%s」未被辨識。" #: ../quodlibet/util/__init__.py:189 #, fuzzy, python-format msgid "Option %r requires an argument." msgstr "錯誤:選項「%s」需要一個參數。" #: ../quodlibet/util/__init__.py:192 #, fuzzy, python-format msgid "%r is not a unique prefix." msgstr "錯誤:「%s」不是一個獨特的前綴 (prefix)。" #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[無效的編碼]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "check|titlecase?" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "日期必須以「YYYY」、「YYYY-MM-DD」或是「YYYY-MM-DD HH:MM:SS」格式輸入。" #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "回放增益增益必須以「x.yy dB」格式輸入。" #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "回放增益高峰值必須以「x.yy」格式輸入。" #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz IDs 必須是 UUID 格式。" #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz 釋出狀態應當是「official」、「promotional」或者是「bootleg」。" #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "專輯" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "組織者" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "作者" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "作曲" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "指揮" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "聯絡" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "著作權" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "日期" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "描述" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "風格" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "組合" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "語言" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "許可" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "位置" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "作詞" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "團體" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "標題" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "版本" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "網站" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "專輯演出者" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "唱片" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "音軌" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "標籤 ID" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "最初發行日期" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "原作專輯" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "原作" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "錄製日期" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "發行國家" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "專輯演出者" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "演出者" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "專輯演出者" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "表演者" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "表演者" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz 音軌 ID" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "MusicBrainz 音軌 ID" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "MusicBrainz 演出者 ID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz 專輯演出者 ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz 專輯狀態" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz 專輯類型" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "音軌增益" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "音軌高峰值" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "專輯增益" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "專輯高峰值" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "偏好設定" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "唱片" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "音軌" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "上次開始" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "全名" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "掛載點" #: ../quodlibet/util/tags.py:105 #, fuzzy msgid "errors" msgstr "表演者" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "個人或團體" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "年份" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "最初發行日期" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "書籤" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "格式" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "作詞" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "組織者" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "作曲" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "指揮" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "作者" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d 秒" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d 分" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d 時" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d 日" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d 年" #~ msgid "_Browse Library" #~ msgstr "瀏覽資料庫 (_B)" #~ msgid "No eject command found." #~ msgstr "未發現退出(裝置)指令。" #~ msgid "Unable to start web browser" #~ msgstr "無法啟動網頁瀏覽器" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "無法找到網頁瀏覽器。請設定您的 $BROWSER 變數,或是確定/usr/bin/sensible-" #~ "browser 是否存在。" #, fuzzy #~ msgid "Library Error" #~ msgstr "資料庫瀏覽器" #, fuzzy #~ msgid "_Output device:" #~ msgstr "複製到裝置 (_C)" #~ msgid "translator-credits" #~ msgstr "" #~ "翻譯者資訊\n" #~ "繁體中文翻譯:\n" #~ "Hsin-lin Cheng <lancetw@gmail.com>\n" #~ "若有任何關於本軟體的繁體中文翻譯問題,歡迎不吝指教。" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "顯示其他欄位,以空白隔開" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "繼續 (_C)" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "資訊" #~ msgid "_Search:" #~ msgstr "搜尋:(_S)" #~ msgid "Search your library" #~ msgstr "搜尋您的資料庫" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, and others\n" #~ "\n" #~ "This is free softwae; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "合計大小:" #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet 外掛" #~ msgid "Color _search terms" #~ msgstr "以顏色標示搜尋項目 (_S)" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "用藍色顯示簡單的搜尋,用綠色顯示進階搜尋,用紅色顯示無效的搜尋。" #~ msgid "_Select" #~ msgstr "選取 (_S)" #~ msgid "Separators for splitting tags" #~ msgstr "以分隔符號分開標籤" #, fuzzy #~ msgid "Display" #~ msgstr "編輯顯示" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet 偏好設定" #~ msgid "Not Played To_day" #~ msgstr "本日沒有播放紀錄 (_D)" #~ msgid "Not Played in a _Week" #~ msgstr "本星期沒有播放紀錄 (_W)" #~ msgid "Not Played in a _Month" #~ msgstr "本月沒有播放紀錄 (_M)" #~ msgid "B_ottom 40" #~ msgstr "倒數 40 名 (_O)" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "這是您播放最少次的 40 首曲目 (排名平手的話或許會超出 40 首)" #~ msgid "gtk-media-next" #~ msgstr "gtk-media-next" #~ msgid "gtk-media-previous" #~ msgstr "gtk-media-previous" #~ msgid "gtk-media-play" #~ msgstr "gtk-media-play" #~ msgid "gtk-media-pause" #~ msgstr "gtk-media-pause" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #, fuzzy #~ msgid "Artist" #~ msgstr "演出者 (_A)" #, fuzzy #~ msgid "Date" #~ msgstr "日期 (_D)" #~ msgid "Choose New Stations" #~ msgstr "選擇新站台" #~ msgid "Add" #~ msgstr "加入" #, fuzzy #~ msgid "Bitrate" #~ msgstr "位元率" #~ msgid "_Stations..." #~ msgstr "站台... (_S)" #, fuzzy #~ msgid "Quod Libet" #~ msgstr "離開 Quod Libet" #~ msgid "Unable to save library" #~ msgstr "無法儲存到資料庫" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "無法播放曲目" #~ msgid "_Information" #~ msgstr "資訊 (_I)" #~ msgid "Sort by title" #~ msgstr "依標題排序" #~ msgid "Sort by artist" #~ msgstr "依演出者排序" #~ msgid "Lyrics provided by %s." #~ msgstr "歌詞是由「%s」所提供。" #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "找不到歌詞。\n" #~ "\n" #~ "您可以按下載按鈕讓 Quod Libet 線上搜尋歌詞。您也可以自行輸入歌詞,然後按儲" #~ "存。" #~ msgid "part" #~ msgstr "部份" #~ msgid "Opening audio device." #~ msgstr "正在開啟音效裝置。" #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d 曲目已儲存" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainz 專輯 ID" #~ msgid "Loaded song library." #~ msgstr "已載入曲目資料庫。" #~ msgid "Unable to open audio device" #~ msgstr "無法開啟音訊狀置" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet 已嘗試存取「autosink」與「%(sink)s」驅動但無法開啟。設定您的 " #~ "GStreamer 管線,修改 ~/.quodlibet/config 中的\n" #~ " <b>pipeline = %(sink)s</b> 這行。" #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet 不能找到 GStreamer 的元件「filesrc」。檢查您的 GStreamer 設置。" #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer 無法載入被選取的曲目。" #~ msgid "Unable to retag multiple values" #~ msgstr "無法重新標籤多重設定值" #~ msgid "Changing the name of a tag with multiple values is not supported." #~ msgstr "不支援以多重設定值變更標籤名稱。" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/sk.po����������������������������������������������������������������������������0000644�0001750�0001750�00000250521�12173213426�015333� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Slovak translations for Quod Libet/Ex Falso # Lukáš Lalinský <lalinsky@gmail.com>, 2006. msgid "" msgstr "" "Project-Id-Version: sk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2006-11-08 19:59+0100\n" "Last-Translator: Lukáš Lalinský <lalinsky@gmail.com>\n" "Language-Team: Slovak <sk@li.org>\n" "Language: sk\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" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Editor audio tagov" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Upraviť tagy vo vašich audio súboroch" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Hudobný prehrávač" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Počúvajte, prehliadajte, alebo upravujte svoju hudobnú kolekciu" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Prehrávač" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Náhľad" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "editor audio tagov" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "adresár" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Zobraziť _programové tagy" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 msgid "Too many arguments" msgstr "" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "popis" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Hodnota" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Tag" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Editor audio tagov" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 msgid "Remove tags" msgstr "" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 msgid "Remove all tags" msgstr "" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Filter na hodnote tagu" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Filter na hodnote tagu" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Žiadna informácia o čase" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Zobraziť krátku informáciu o použití" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> nie je platné umiestnenie." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Skladby bez albumu" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Nastavenie zoznamu albumov" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Zobraziť _obaly albumov" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Zobrazenie albumov" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d skladba" msgstr[1] "%d skladby" msgstr[2] "%d skladieb" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d disk" msgstr[1] "%d disky" msgstr[2] "%d diskov" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Neplatná vzorka" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Názov" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Interpret" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Dátum" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "žáner" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Hodnotenie" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Podľa dátumu" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Nastavenie" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Zoznam albumov" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "Zoznam _albumov" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Všetky albumy" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d album" msgstr[1] "%d albumy" msgstr[2] "%d albumov" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Zobraziť _obaly albumov" msgstr[1] "Zobraziť _obaly albumov" msgstr[2] "Zobraziť _obaly albumov" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Neznáme" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Pridať kanál" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Vložte umiestnenie audio kanálu:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Audio kanály" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Audio kanály" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Sťahovania..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Sťiahnuť súbory" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Sťiahnuť súbor" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Nepodarilo sa pridať kanál" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> nemôže byť pridané. The server may be down, or the location may " "not be an audio feed." #: ../quodlibet/browsers/audiofeeds.py:495 #, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Prehliadať knižnice" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d skladba (%(time)s)" msgstr[1] "%(count)d skladby (%(time)s)" msgstr[2] "%(count)d skladieb (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Neznáme" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Rozdeliť na _viacero hodnôt" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Vlastné" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Nastavenie zoznamu albumov" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Súborový systém" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Súborový systém" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Nepodarilo sa skopírovať skladby" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Vybrané súbory nemôžu byť kopírované do iného zoznamu skladieb alebo fronty." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Pridať do knižnice" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Nepodporovaný typ súboru" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Nepodarilo sa pridať stanicu" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Internetové rádio" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Sťiahnuť súbory" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Nová stanica" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Vložte umiestnenie Internetovej rádio stanice:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "hodnotenie" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Internetové rádio" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Nová stanica" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Nová stanica" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Nová stanica" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Nenájdené žiadne stanice." #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Na %s nebola nájdená žiadna Internetová rádio stanica." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Všetky stanice už sú v knižnici." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Odstrániť z playlistu" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Pridať do playlistu" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d stanica" msgstr[1] "%(count)d stanice" msgstr[2] "%(count)d staníc" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Vlastnosti zariadenia" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Zariadenie:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Nepripojené" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Prípojný bod:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Názov:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Média zariadenia" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Média zariadenia" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Vysunúť" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Premenovať" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> použité, <b>%s</b> dostupné" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> nie je pripojené." #: ../quodlibet/browsers/media.py:478 #, fuzzy, python-format msgid "Copying <b>%(song)s</b>" msgstr "Kopírovanie <b>%s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Neporadilo sa kopírovať skladbu" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Na túto skladbu nie je dost voľného miesta" #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> nemôže byť skopírované." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Nepodarilo sa vymazať skladby" #: ../quodlibet/browsers/media.py:541 #, fuzzy, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Odstraňovanie <b>%s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> nemôže byť odstránené." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Nedá sa odstrániť skladba" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Vysúvanie <b>%s</b> zlyhalo." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Neporadilo sa vysunúť zariadenie" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Nastavenie prehliadača" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Všetko" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Prehliadač" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Prehliadač" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Označiť _všetko:" #: ../quodlibet/browsers/playlists.py:75 #, fuzzy, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Importovanie playlistu.\n" "\n" "%d/%d skladieb pridaných." #: ../quodlibet/browsers/playlists.py:108 #, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" msgstr[2] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Nový playlist" #: ../quodlibet/browsers/playlists.py:141 #, fuzzy msgid "Enter a name for the new playlist:" msgstr "Vložte názov novej zložky:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Nový playlist" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, fuzzy, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s a %(count)d viac" msgstr[1] "%(title)s a %(count)d viac" msgstr[2] "%(title)s a %(count)d viac" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Playlisty" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Playlisty" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Odstrániť z playlistu" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Import" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Nepodarilo sa importovať playlist" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "Quod Libet môže importovať iba playlist vo formáte M3U alebo PLS." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Náhodne" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Neporadilo sa premenovať playlist" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Importovať playlist" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Vypnúť prehliadač" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Vypnúť prehliadač" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Vyhľadávať v knižnici" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Vyhľadávať v knižnici" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Obmedziť výsledky" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Neznáme zariadenie" #: ../quodlibet/devices/__init__.py:19 #, python-format msgid "Could not import %s, which is needed for device support." msgstr "" #: ../quodlibet/devices/__init__.py:140 #, fuzzy, python-format msgid "%r is not a supported device." msgstr "E: '%s' nie je unikátny prefix." #: ../quodlibet/devices/__init__.py:206 #, python-format msgid "%s: Could not find 'libudev'." msgstr "" #: ../quodlibet/devices/__init__.py:212 #, python-format msgid "%s: Could not find %s." msgstr "" #: ../quodlibet/devices/__init__.py:401 #, fuzzy msgid "Initializing device backend." msgstr "Neplatná hodnota" #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "" #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "" #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Hlasitosť (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Kopírovať obaly _albumov" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Kombinovať tagy z _viacerých hodnôt" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Názov obsahuje _verziu" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 #, fuzzy msgid "Album includes _disc subtitle" msgstr "Album obsahuje ča_sť" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Model:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Kapacita:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 #, fuzzy msgid "Removing orphaned iPod track" msgstr "W: odstraňovanie ositorené iPod skladby" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Neporadilo sa uložiť iPod databázu" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Neinicializovaný iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Chcete vytvoriť prázdnu databázu na tomto iPod-e?" #: ../quodlibet/devices/ipod.py:433 msgid "Could not find libgpod, iPod support disabled." msgstr "" #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Formát názvu súboru:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Odstrániť nepoužívané obaly a adresáre" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Súbor existuje" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Prepísať <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Knižnica" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Kontrola prípojných bodov" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Skenovanie knižnice" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "Skenovanie %s" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "%d sekunda" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" #: ../quodlibet/player/gstbe.py:661 #, fuzzy msgid "Unable to open input files" msgstr "Neporadilo sa otvoriť súbory" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "" #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "" #: ../quodlibet/player/__init__.py:29 #, fuzzy msgid "Invalid audio backend" msgstr "Neplatná hodnota" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "" #: ../quodlibet/player/xinebe.py:64 #, fuzzy msgid "Unable to create audio output" msgstr "Nepodarilo sa vytvoriť zložku" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet už beží." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Momentálne nehrá žiadna skladba." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet nie je spustený." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Nepodarilo sa zapísať do %s. Odstraňujem to." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "hudobný prehrávač" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[možnosti]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Vypíše hrajúcu skladbu a skončí" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Začať prehrávanie okamžite" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Preskočiť na nasledujúcu skladbu" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Preskočiť na predchádzajúcu skladbu" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Spustiť prehrávanie" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Pozastaviť prehrávanie" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Prepnúť mód prehrávania/pauzy" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Spustiť prehrávanie" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Zvýšiť hlasitosť" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Znižiť hlasitosť" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Vypísať stav prehrávača" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Schovať hlavné okno" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Zobraziť hlavné okno" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Prepnúť viditelnosť hlavného okna" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "" #: ../quodlibet.py:319 #, fuzzy msgid "Refresh and rescan library" msgstr "O_bnoviť knižnicu" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Vypísať aktuálny playlist" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Vypísať obsah fronty" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Ukončiť Quod Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Presunúť pozíciu hrajúcej skladby" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Nastaviť alebo prepnúť poradie prehrávania" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Zapnúť alebo vypnúť opakovanie" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Nastaviť hlasitosť" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Vyhľadávať v hudobnej knižnici" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "dotaz" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Prehrať súbor" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Ohodnotiť hrajúcu skladbu" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Nastaviť aktuálny prehliadač" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Otvoriť nový prehrávač" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Zobraziť alebo skryť frontu" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Zobraziť alebo skryť hlavný zoznam skladieb" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Filter na náhodnej hodnote" #: ../quodlibet.py:340 msgid "command|tag" msgstr "" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Filter na hodnote tagu" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tag=hodnota" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Pridať do fronty" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "názov súboru" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "" #: ../quodlibet.py:348 #, fuzzy msgid "Unqueue a file or query" msgstr "Pridať do fronty" #: ../quodlibet.py:398 #, fuzzy, python-format msgid "Invalid argument for '%s'." msgstr "E: Neplatný argument pre '%s'." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, fuzzy, python-format msgid "Try %s --help." msgstr "E: Skúste %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Podporované formáty: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Audio zariadenie: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Začiatok" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "N/A" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Čas" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Názov záložky" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Záložky" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Žiadna informácia o čase" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Hodnota:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Uložené hodnoty" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Upraviť uložené hodnoty..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Skladby" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Zobraziť zostávajúci čas" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Upraviť záložky..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "Hlavičky _skladby" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "Hlavičky _albumu" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Skončiť po tejto skladbe" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Filter na hodnote tagu" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Odstrániť súbory" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Presunúť do koša" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Vymazať tento súbor natrvalo?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Vymazať tieto súbory natrvalo?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s a %(count)d viac..." msgstr[1] "%(title)s a %(count)d viac..." msgstr[2] "%(title)s a %(count)d viac..." #: ../quodlibet/qltk/delete.py:90 #, fuzzy, python-format msgid "Moving %(current)d/%(total)d." msgstr "Presúvanie %d/%d." #: ../quodlibet/qltk/delete.py:92 #, fuzzy, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Odstraňovanie %d/%d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Neporadilo sa uložiť iPod databázu" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Vysúvanie <b>%s</b> zlyhalo." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Nepodarilo sa odstrániť súbor" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Odstraňovanie <b>%s</b> zlyhalo." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Sťahovania" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Názov súboru" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Veľkosť" #: ../quodlibet/qltk/downloader.py:62 #, fuzzy msgid "Queued" msgstr "_Fronta" #: ../quodlibet/qltk/_editpane.py:82 #, fuzzy msgid "Path Patterns" msgstr "vzorka" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Upraviť uložené hodnoty..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Náhľad" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Viac možností..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "chýba v %d skladbe" msgstr[1] "chýba v %d skladbách" msgstr[2] "chýba v %d skladbách" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "rôzne v %d skladbe" msgstr[1] "rôzne v %d skladbách" msgstr[2] "rôzne v %d skladbách" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Rozdeliť na _viacero hodnôt" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Oddeliť disk z _albumu" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Oddeliť _verziu z názvu" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Oddeliť aranžéra z in_terpreta" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Oddeliť _hudobníka z interpreta" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Oddeliť _hudobníka z interpreta" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Oddeliť _verziu z názvu" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Pridať tag" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Tag:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "_Odstrániť z knižnice" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Upraviť tagy" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Zapísať" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Nepodarilo sa pridať tag" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Nepodarilo sa pridať <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Neplatný tag" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Neplatný tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Tag môže byť nepresný" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> zmenené počas behu programu. Uloženie bez obnovenia knižnice môže " "prepísať zmeny v skladbe.\n" "\n" "Uložiť túto skladba aj tak?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Nepodarilo sa uložiť skladbu" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Ukladanie <b>%s</b> zlyhalo. Súbor je možno len pre čítanie alebo nemáte " "práva na jeho zmenu." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Neplatná hodnota" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Neplarná hodnota: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Zásuvné moduly" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d skladba" msgstr[1] "%d skladby" msgstr[2] "%d skladieb" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Možnosti Ex Falso" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "R_ozdeliť na:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Zobraziť _programové tagy" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Editácia tagov" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Zložky" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Nová zložka..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "_Vybrať všetky podzložky..." #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Nová zložka" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Vložte názov novej zložky:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Nepodarilo sa vytvoriť zložku" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Nepodarilo sa odstrániť zložku" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "od %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "Disk %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Skladba %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Pridať do playlistu" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Upraviť zobrazenie..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Upraviť _tagy" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Nehrá" #: ../quodlibet/qltk/information.py:61 #, fuzzy msgid "_Clear Errors" msgstr "Chyby zásuvných modulov" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Nie sú vybrané žiadne skladby." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Žiadne skladby" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informácie" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Text" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 #, fuzzy msgid "Errors" msgstr "Zobraziť _chyby" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "interpret" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "interpreti" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "hudobníci" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Nikdy" #: ../quodlibet/qltk/information.py:243 #, fuzzy, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%d krát" msgstr[1] "%d krát" msgstr[2] "%d krát" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "pridané" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "naposledy prehrané" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "prehraní" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "preskočení" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "hodnotenie" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "dĺžka" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "veľkosť súboru" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "upravené" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bitrate" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Súbor" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d vybraná" msgstr[1] "%d vybrané" msgstr[2] "%d vybraných" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Vytvorené v %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "hudobník" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Skladba nedostupná" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Zoznam skladieb" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d skladba bez albumu" msgstr[1] "%d skladby bez albumu" msgstr[2] "%d skladieb bez albumu" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Vybraná diskografia" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d skladba bez interpreta" msgstr[1] "%d skladby bez interpreta" msgstr[2] "%d skladieb bez interpreta" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "albumy" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Celková dľžka:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Celková veľkosť:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Súbory" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Sťahovanie" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Nenájdený žiadny text pre túto skladbu." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Vyhľadávanie textov..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Neporadilo sa stiahnuť text." #: ../quodlibet/qltk/maskedbox.py:17 msgid "Are you sure you want to remove all songs?" msgstr "" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d stanica" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Zahodiť zmeny v tagoch?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Tagy boli zmenéné ale nie uložené. Uložiť tieto súbory, alebo zahodiť zmeny?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "" #: ../quodlibet/qltk/playorder.py:18 #, fuzzy msgid "_Unknown" msgstr "Neznáme" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "V poradí" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_V poradí" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Náhodne" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Podľa váhy" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Podľa váhy" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Jedna skladba" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Jedna skladba" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Chyby zásuvných modulov" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Zásuvné moduly" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Zobraziť _chyby" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "verzia" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "" #: ../quodlibet/qltk/pluginwin.py:346 #, fuzzy msgid "Disabled" msgstr "Vypnúť prehliadač" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Nenájdené žiadne zásuvné moduly." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Disk" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Skladba" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "zoskupenie" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "_Album" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "Názob _súboru" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Dľžka" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Zoznam skladieb" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "Automaticky _preskočiť na hrajúcu skladbu" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Ostatné:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Upraviť zobrazenie..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Viditeľné stĺpce" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Názov obsahuje _verziu" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Názov súboru obsahuje _zložku" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Nastavenie" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Prehliadače" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Globálny filter:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "" #: ../quodlibet/qltk/prefs.py:223 #, fuzzy msgid "Search after _typing" msgstr "Skončiť po tejto skladbe" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Vyhľadávať" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "" #: ../quodlibet/qltk/prefs.py:241 msgid "Enable rating by clicking on the rating column in the song list" msgstr "" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 #, fuzzy msgid "Ratings" msgstr "_Hodnotenie" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Zoznam albumov" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Pozastaviť prehrávanie" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "_Hlasitosť (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "_Hlasitosť (dB):" #: ../quodlibet/qltk/prefs.py:339 #, fuzzy msgid "_Enable Replay Gain volume adjustment" msgstr "_Prispôsobiť hlasitosť podľa Replay Gain" #: ../quodlibet/qltk/prefs.py:364 #, fuzzy msgid "Replay Gain Volume Adjustment" msgstr "_Prispôsobiť hlasitosť podľa Replay Gain" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Upraviť tagy" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Zahodiť zmeny v tagoch?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 #, fuzzy msgid "Save ratings and play _counts" msgstr "Ukladať hodnotenia a počty hraní" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Email:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "Hodnotenia a počty hraní budú nastavené pre túto emailovú adresu" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Nová stanica" #: ../quodlibet/qltk/prefs.py:487 #, fuzzy msgid "_Refresh library on start" msgstr "O_bnoviť knižnicu" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "O_bnoviť knižnicu" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Prehľadávať _adresáre" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Žiadne skladby" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Nastavenie" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Vlastnosti" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Fronta" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Odstrániť všetky skladby z fronty" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Náhodne" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Poradie:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "_Opakovať" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Reštartovať playlist po skončení" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Neporadilo sa pridať skladby" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> používa nepodporovaný protokol." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Hudba" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "Pridať _zložku..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "Pridať _súbor..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "Pridať _umiestnenie..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Otvoriť nový prehrávač" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filtre" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Nehrané nikdy" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Top 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Ovládanie" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Preskočiť na hrajúcu skladbu" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Zobraziť" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Pomocník" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:481 #, fuzzy msgid "_Cause an Error" msgstr "Chyby zásuvných modulov" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Vyhľadávať" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "O_bnoviť knižnicu" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Z_novunačítať knižnicu" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Filter na žá_ner" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Filter na _interpreta" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Filter na _album" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Náhodný žá_ner" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Náhodný int_erpret" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Náhodný al_bum" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "_Zoznam skladieb" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Skontrolovať zmeny v knižnici" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Znovunačítať všetky skladby v knižnici (toto môže trvať dlho)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "40 skladieb ktoré ste hrali najviac" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Pridať umiestnenie" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Vložte umiestnenie audio súboru:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Nepodarilo sa pridať umiestnenie" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> nie je platné umiestnenie." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Pridať hudbu" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Sledovať túto zložku pre nové skladby" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s nemôže byť pridané do knižnice.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Neporadilo sa pridať skladby" #: ../quodlibet/qltk/ratingsmenu.py:20 #, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "" #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "" #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "" #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Nahradiť medzery _podtržítkami" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Odstrániť znaky nekompatibilné s _Windows" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Odstrániť _diakritiku" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Odstrániť ne-_ASCII znaky" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Premenovať súbory" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Nový názov" #: ../quodlibet/qltk/renamefiles.py:140 #, fuzzy msgid "Ignore _All Errors" msgstr "Zobraziť _chyby" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Pokračovať" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Nepodarilo sa premenovať súbory" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Premenovanie <b>%s</b> do <b>%s</b> zlyhalo. Možno cieľový súbor už existuje " "alebo nemáte právo vytvoriť nový súbor alebo odstrániť starý." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Cesta nie je absolútna" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Skladby uložené v týchto zložkách (oddelené pomocou ':') budú pridané do " "Vašej knižnice" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Vyberte adresáre" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Uložené hodnoty" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Upraviť uložené hodnoty..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Vyhľadávať" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limit:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Váha" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Filter na %s" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "Hlavičky _albumu" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Hlavičky _skladby" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "Hlavičky _albumu" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "Hlavičky ľ_udí" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Hlavičky _dátumu" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Hlavičky _súboru" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "Hlavičky _produkcie" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Vlastné hlavičky..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Vlastné hlavičky..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Pridať do _fronty" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Kopírovať na zariadenie" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Odstrániť z playlistu" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "Hlavičky _skladby" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "Hlavičky ľ_udí" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "Hlavičky _albumu" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "Hlavičky _dátumu" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "Hlavičky _súboru" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "Hlavičky _produkcie" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "_Tag:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Vlastné" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Nahradiť _podržítko medzerami" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Každé slovo začína veľkým písmenom" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Rozdeliť na viacero hodnôt" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Tagy z cesty" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Nahradiť pôvodné tagy" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Pridať k pôvodným tagom" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Neplatné tagy" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Neporadilo sa editovať skladbu" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Upraviť zobrazenie" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "" #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Čísla skladieb" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Začať _od:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Celkový počet:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Skladba" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "a %d viac..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Ukladanie skladieb, ktoré ste zmenili." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d z %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Vyčistiť vyhľadávanie" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Playlist s názvom %s už existuje." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "" #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 #, fuzzy msgid "Warnings" msgstr "_Hodnotenie" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "" #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Zobraziť krátku informáciu o použití" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Zobraziť verziu a copyright" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Použitie: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[možnosti]" #: ../quodlibet/util/__init__.py:186 #, fuzzy, python-format msgid "Option %r not recognized." msgstr "E: Možnosť '%s' nerospoznaná." #: ../quodlibet/util/__init__.py:189 #, fuzzy, python-format msgid "Option %r requires an argument." msgstr "E: Možnosť '%s' vyžaduje parameter." #: ../quodlibet/util/__init__.py:192 #, fuzzy, python-format msgid "%r is not a unique prefix." msgstr "E: '%s' nie je unikátny prefix." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Neplatné kódovanie]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "nope" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "" #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Dátum musí byť vo formáte 'RRRR', 'RRRR-MM-DD' alebo 'RRRR-MM-DD HH:MM:SS'." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "" #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "" #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz ID musia byť v UUID formáte." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz status albumu musí byť 'official', 'promotional', or 'bootleg'" #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "aranžér" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "autor" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "skladateľ" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "dirigent" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "kontakt" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "dátum" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "popis" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "žáner" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "zoskupenie" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "jazyk" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "licencia" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "miesto" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "autor textu" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "organizácia" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "názov" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "verzia" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "webstránka" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "interpret albumu" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "disk" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "skladba" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "katalógové číslo" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "originálny dátum vydania" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "pôvodný album" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "pôvodný interpret" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "dátum nahrania" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "krajina vydania" #: ../quodlibet/util/tags.py:65 #, fuzzy msgid "album artist (sort)" msgstr "interpret albumu" #: ../quodlibet/util/tags.py:66 #, fuzzy msgid "artist (sort)" msgstr "interpreti" #: ../quodlibet/util/tags.py:67 #, fuzzy msgid "album (sort)" msgstr "interpret albumu" #: ../quodlibet/util/tags.py:68 #, fuzzy msgid "performer (sort)" msgstr "hudobníci" #: ../quodlibet/util/tags.py:69 #, fuzzy msgid "performers (sort)" msgstr "hudobníci" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz ID skladby" #: ../quodlibet/util/tags.py:74 #, fuzzy msgid "MusicBrainz release ID" msgstr "MusicBrainz ID skladby" #: ../quodlibet/util/tags.py:75 #, fuzzy msgid "Musicbrainz artist ID" msgstr "MusicBrainz artist ID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz album artist ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz status albumu" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz typ albumu" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "" #: ../quodlibet/util/tags.py:88 #, fuzzy msgid "reference loudness" msgstr "Nastavenie" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "disky" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "skladby" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "naposledy spustené" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "celý názov" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "prípojný bod" #: ../quodlibet/util/tags.py:105 #, fuzzy msgid "errors" msgstr "hudobníci" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "ľudia" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "rok" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "originálny dátum vydania" #: ../quodlibet/util/tags.py:112 #, fuzzy msgid "bookmark" msgstr "Záložky" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "formát" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "autori textu" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "aranžéri" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "skladatelia" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "dirigenti" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "autori" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d sekunda" msgstr[1] "%d sekundy" msgstr[2] "%d sekúnd" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d minúta" msgstr[1] "%d minúty" msgstr[2] "%d minút" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d hodina" msgstr[1] "%d hodiny" msgstr[2] "%d hodín" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d deň" msgstr[1] "%d dni" msgstr[2] "%d dní" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d rok" msgstr[1] "%d roky" msgstr[2] "%d rokov" #~ msgid "_Browse Library" #~ msgstr "_Prehliadať knižnicu" #~ msgid "No eject command found." #~ msgstr "Príkaz na vysunutie nenájdený." #~ msgid "Unable to start web browser" #~ msgstr "Neporadilo sa spustit webový prehliadač" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Nepodarilo sa nájst žiadny webový prehliadač. Nastavte prosím premennú " #~ "$BROWSER, alebo sa uistite že súbor /usr/bin/sensible-browser existuje." #, fuzzy #~ msgid "Library Error" #~ msgstr "Prehliadať knižnice" #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Kopírovať na zariadenie" #~ msgid "translator-credits" #~ msgstr "Lukáš Lalinský <lalinsky@gmail.com>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Ostatné stĺpce, oddelené medzerami" #, fuzzy #~ msgid "_Edit and Continue" #~ msgstr "_Pokračovať" #, fuzzy #~ msgid "Confirm rating" #~ msgstr "Informácie" #~ msgid "_Search:" #~ msgstr "_Vyhľadať:" #~ msgid "Search your library" #~ msgstr "Vyhľadávať v knižnici" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quodlibet@lists.sacredchao.net>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman a ďalší\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Celková veľkosť:" #~ msgid "Quod Libet Plugins" #~ msgstr "Zásuvné moduly Quod Libet" #~ msgid "Color _search terms" #~ msgstr "Farebne označovať _vyhľadávanie" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Zobraziť jednoduche vyhľadávanie modro, rozšírené zeleno a neplatné " #~ "červeno" #~ msgid "_Select" #~ msgstr "_Výber" #~ msgid "Separators for splitting tags" #~ msgstr "Oddelovače na delenie tagov" #, fuzzy #~ msgid "Display" #~ msgstr "Upraviť zobrazenie" #~ msgid "Quod Libet Preferences" #~ msgstr "Nastavenie Quod Libet" #~ msgid "Not Played To_day" #~ msgstr "Nehrané _dnes" #~ msgid "Not Played in a _Week" #~ msgstr "Nehrané za posledný _týždeň" #~ msgid "Not Played in a _Month" #~ msgstr "Nehrané za posledný _mesiac" #~ msgid "B_ottom 40" #~ msgstr "_Spodných 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "40 skladieb ktoré ste hrali najmenej" #~ msgid "gtk-media-next" #~ msgstr "_Nasledujúca" #~ msgid "gtk-media-previous" #~ msgstr "Pre_dchádzajúca" #, fuzzy #~ msgid "Artist" #~ msgstr "_Interpret" #, fuzzy #~ msgid "Date" #~ msgstr "_Dátum" #~ msgid "Choose New Stations" #~ msgstr "Zvoľte nové stanice" #~ msgid "Add" #~ msgstr "Pridať" #, fuzzy #~ msgid "Bitrate" #~ msgstr "bitrate" #~ msgid "_Stations..." #~ msgstr "_Stanice:" #, fuzzy #~ msgid "Quod Libet" #~ msgstr "Ukončiť Quod Libet" #~ msgid "Unable to save library" #~ msgstr "Neporadilo sa uložiť knižnicu" #, fuzzy #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Neporadilo sa prehrať skladbu" #~ msgid "_Information" #~ msgstr "_Informácie" #~ msgid "Sort by title" #~ msgstr "Podľa názvu" #~ msgid "Sort by artist" #~ msgstr "Podľa interpreta" #~ msgid "Lyrics provided by %s." #~ msgstr "Text od %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Žiadny text nenájdený.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgid "part" #~ msgstr "časť" #~ msgid "Opening audio device." #~ msgstr "Otváranie audio zariadenia." #~ msgid "%d/%d songs saved" #~ msgstr "%d/%d skladieb uložených" #~ msgid "MusicBrainz album ID" #~ msgstr "MusicBrainz ID albumu" #~ msgid "Loaded song library." #~ msgstr "Načítaná knižnica skladieb." #~ msgid "Unable to open audio device" #~ msgstr "Neporadilo sa otvoriť audio zariadenie" #~ msgid "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgstr "" #~ "Quod Libet tried to access the 'autosink' and '%(sink)s' drivers but " #~ "could not open them. Set your GStreamer pipeline by changing the\n" #~ " <b>pipeline = %(sink)s</b>\n" #~ "line in ~/.quodlibet/config." #~ msgid "" #~ "Quod Libet could not find the 'filesrc' GStreamer element. Check your " #~ "GStreamer installation." #~ msgstr "" #~ "Quod Libet nenašiel GStreamer element 'filesrc'. Skontrolujte svoju " #~ "inštaláciu GStreameru." #~ msgid "GStreamer was unable to load the selected song." #~ msgstr "GStreamer nemohol načítať vybranú skladbu." �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/de.po����������������������������������������������������������������������������0000644�0001750�0001750�00000270570�12173213426�015314� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# German translation of Quod Libet 2.3 # 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. # Avoid Injury or Death # Rüdiger Arp <ruediger@gmx.net>, 2011. # msgid "" msgstr "" "Project-Id-Version: Quod Libet 2.4.-1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2013-07-20 22:19+0100\n" "Last-Translator: \n" "Language-Team: GERMAN <LL@li.org>\n" "Language: de_DE\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" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Editor für Audio-Tags" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Audio-Tags bearbeiten" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Musik-Player" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Anhören, Durchsuchen und Bearbeiten Ihrer Musik-Sammlung" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Player" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Voransicht" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "Ein Editor für Audio-Tags" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "Ordner" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "" #: ../operon.py:114 msgid "List tags" msgstr "" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "_Programmatische Tags anzeigen" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Zu viele Fehler" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "Beschreibung" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Wert" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Tag" #: ../operon.py:152 msgid "List all common tags" msgstr "" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Editor für Audio-Tags" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "Duplikate entfernen" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Duplikate entfernen" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Nach Tag-Wert filtern" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Nach Tag-Wert filtern" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Keine Informationen zur Abspieldauer" #: ../operon.py:488 msgid "Extract embedded images" msgstr "" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Kurzinfo zur Benutzung anzeigen" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> ist keine gültige URL." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Titel ohne Album" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Einstellungen der Albenliste" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Album-_Cover anzeigen" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "Die integrierte _Suchfunktion erfasst auch Mitwirkende" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Alben-Anzeige" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "%d Titel" msgstr[1] "%d Titel" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "%d CD" msgstr[1] "%d CDs" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Ungültiges Muster" #: ../quodlibet/browsers/albums.py:180 msgid "_Title" msgstr "_Titel" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Künstler" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "Dat_um" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 msgid "_Genre" msgstr "_Genre" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Bewertung" #: ../quodlibet/browsers/albums.py:189 msgid "Sort _by..." msgstr "Sortieren _nach..." #: ../quodlibet/browsers/albums.py:210 msgid "_Preferences" msgstr "_Einstellungen" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Albenliste" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Albenliste" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Alle Alben" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "%d Album" msgstr[1] "%d Alben" #: ../quodlibet/browsers/albums.py:725 msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Album-_Cover neu laden" msgstr[1] "Album-_Cover neu laden" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Unbekannt" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Neuer Feed" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Geben Sie die URL des Audio-Feed an:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Audio-Feeds" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Audio-Feeds" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Download..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Dateien herunterladen" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Datei herunterladen" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Feed konnte nicht hinzugefügt werden" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> konnte nicht hinzugefügt werden. Möglicherweise ist der Server " "gerade außer Betrieb, oder die angegebene URL enthält keinen Audio-Feed." #: ../quodlibet/browsers/audiofeeds.py:495 #, fuzzy, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" "»python-feedparser« konnte nicht importiert werden, der Browser für Audio-" "Feeds wurde deaktiviert." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "Das aktuelle Audio-Backend unterstützt keine URLs, der Browser für Audio-" "Feeds wurde deaktiviert." #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Bibliothek-Browser" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "%(count)d Titel (%(time)s)" msgstr[1] "%(count)d Titel (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Unbekannt" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "In _mehrere Werte aufteilen" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Benutzerdefiniert" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Einstellungen der Albenliste" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Dateisystem" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "Dateis_ystem" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Titel konnten nicht kopiert werden" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "" "Die ausgewählten Dateien konnten nicht in die Wiedergabeliste oder " "Warteschlange kopiert werden." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Zur Bibliothek hinzufügen" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Dateityp wird nicht unterstützt" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Senderlisten dürfen nur Sender-URLs enthalten, nicht jedoch Sender- oder " "Wiedergabelisten. Die folgenden URLs können nicht geladen werden:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Sender konnte nicht hinzugefügt werden" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Internet-Radio" #: ../quodlibet/browsers/iradio.py:235 msgid "Downloading station list" msgstr "Senderliste wird heruntergeladen" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Neuer Sender" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Bitte geben Sie die URL eines Internet-Radiosenders ein:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "Electronic" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "HipHop / Rap" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "Oldies" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "R&B" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "Japanisch" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "Indisch" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "Religion" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "Charts" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "Türkisch" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "Reggae / Dancehall" #: ../quodlibet/browsers/iradio.py:370 msgid "Latin" msgstr "Latin" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "Campusradio" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "Talk / News" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "Ambient" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "Jazz" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "Klassik" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "Pop" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "Alternative" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "Metal" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "Country" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "News" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "Schlager" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "Funk" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "Indie" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "Blues" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "Soul" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "Lounge" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "Punk" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "Reggaeton" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "Slawisch" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "Griechisch" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "Gothic" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "Rock" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "Internet-_Radio" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Neuer Sender" #: ../quodlibet/browsers/iradio.py:491 msgid "_Update Stations" msgstr "Sender akt_ualisieren" #: ../quodlibet/browsers/iradio.py:516 msgid "All Stations" msgstr "Alle Sender" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "Favoriten" #: ../quodlibet/browsers/iradio.py:528 msgid "No Category" msgstr "Keine Kategorie" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Keine Sender gefunden" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Unter %s wurden keine Internet-Radiosender gefunden." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Alle aufgelisteten Sender befinden sich bereits in Ihrer Bibliothek." #: ../quodlibet/browsers/iradio.py:738 msgid "Remove from Favorites" msgstr "Aus Favoriten löschen" #: ../quodlibet/browsers/iradio.py:744 msgid "Add to Favorites" msgstr "Zu Favoriten hinzufügen" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d Sender" msgstr[1] "%(count)d Sender" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Geräte-Eigenschaften" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Gerät:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Nicht eingebunden" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Mountpunkt:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "_Name:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Mediaplayer" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Mediaplayer" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Auswerfen" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "_Umbenennen" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> verwendet, <b>%s</b> verfügbar" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> ist nicht verbunden." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "Kopiere <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Titel konnte nicht kopiert werden" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Für diesen Titel reicht der freie Speicherplatz nicht aus." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> konnte nicht kopiert werden." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Titel konnten nicht gelöscht werden" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "Lösche <b>%(song)s</b>" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> konnte nicht gelöscht werden." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Der Titel konnte nicht gelöscht werden" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "Auswerfen von <b>%s</b> fehlgeschlagen." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Datenträger konnte nicht ausgeworfen werden" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "" "Kein Backend für Geräte gefunden, der Mediaplayer-Browser wurde deaktiviert." #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Einstellungen des Browsers" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Alle" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Browser" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "Br_owser" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "A_lle auswählen" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Wiedergabeliste wird importiert.\n" "\n" "%(current)d/%(total)d Titel hinzugefügt." #: ../quodlibet/browsers/playlists.py:108 #, fuzzy, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "" "Sie sind im Begriff, die Wiedergabeliste »<i>%s</i>« zu löschen.\n" "Möchten Sie fortfahren?" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" #: ../quodlibet/browsers/playlists.py:123 #, fuzzy, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "Sie sind im Begriff, %d Titel zu entfernen" msgstr[1] "Sie sind im Begriff, %d Titel zu entfernen" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "" #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Neue Wiedergabeliste" #: ../quodlibet/browsers/playlists.py:141 msgid "Enter a name for the new playlist:" msgstr "Geben Sie einen Namen für die neue Wiedergabeliste ein:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "Wiedergabeliste a_nlegen" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s und %(count)d weiterer" msgstr[1] "%(title)s und %(count)d weitere" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Wiedergabelisten" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "Wieder_gabelisten" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "Aus Wiede_rgabeliste löschen" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Importieren" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Die Wiedergabeliste konnte nicht importiert werden." #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "" "Quod Libet kann nur Wiedergabelisten in den Formaten M3U und PLS importieren." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "Duplikate entfernen" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Zufall" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Die Wiedergabeliste konnte nicht umbenannt werden." #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Wiedergabeliste importieren" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Browser deaktivieren" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "Browser _deaktivieren" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Bibliothek durchsuchen" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "Bibliothek d_urchsuchen" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "Er_gebnis weiter einschränken" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Unbekanntes Gerät" #: ../quodlibet/devices/__init__.py:19 #, fuzzy, python-format msgid "Could not import %s, which is needed for device support." msgstr "" "»dbus-python« wird für die Geräteunterstützung benötigt, konnte jedoch nicht " "importiert werden." #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "%r ist kein unterstütztes Gerät." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: libudev wurde nicht gefunden." #: ../quodlibet/devices/__init__.py:212 #, fuzzy, python-format msgid "%s: Could not find %s." msgstr "%s: libudev wurde nicht gefunden." #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "Initialisiere Geräte-Backend." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "Versuche »%s«" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "Konnte nicht mit einem Geräte-Backend verbinden." #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Geräte-Backend initialisiert." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Lautstärkenverstärkung (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Album-_Cover kopieren" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Tags mit unterschiedlichen Werten zusammenführen" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Titel mit _Version" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "Albu_m mit CD-Untertitel" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modell:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Speicherkapazität:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmware:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "Verwaister iPod-Titel wird entfernt" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Die iPod-Datenbank konnte nicht gespeichert werden" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Nicht initialisierter iPod" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Möchten Sie eine leere Datenbank auf diesem iPod anlegen?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "" "»python-gpod« konnte nicht importiert werden, iPod-Unterstützung wurde " "deaktiviert." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "Dateinamen-_Muster:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Ungenutzte Cover und Ordner entfernen" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Datei existiert" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "<b>%s</b> überschreiben?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "Das Album-Cover \"%s\" konnte nicht gelesen werden" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Fehler beim Laden von %r" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Bibliothek" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Prüfe Mount-Punkte" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Audio-Bibliothek wird eingelesen" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "%s wird eingelesen" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "Die Pipeline für die GStreamer-Audioausgabe, z. B. »alsasink " "device=default«. Leer lassen, um die Standardpipeline zu verwenden." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "_Audio-Pipeline:" #: ../quodlibet/player/gstbe.py:75 #, python-format msgid "%.1f seconds" msgstr "%.1f Sekunden" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "_Pufferdauer:" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "Stream" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "Puffer wird gefüllt" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Ausgabefehler" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "Die GStreamer Ausgabe-Pipeline konnte nicht initialisiert werden. Die " "Pipeline könnte ungültig oder das Gerät gerade aktiv sein. Überprüfen Sie " "die Player-Einstellungen." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Die Eingabedateien konnten nicht geöffnet werden" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "GStreamer hat kein Element zum Lesen von Dateien. Überprüfen Sie die " "GStreamer-Installation." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "Ungültige GStreamer Ausgabe-Pipeline, versuche die Standard-Pipeline." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "GStreamer-Standard-Pipeline konnte nicht angelegt werden" #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "Ungültiges Audio-Backend" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "Das Audio-Backend %r ist nicht installiert." #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Der Audioausgang konnte nicht angelegt werden" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Das Audiogerät %r wurde nicht gefunden. Überprüfen Sie die Xine-" "Einstellungen in ~/.quodlibet/config." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet läuft bereits." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Momentan wird kein Titel wiedergegeben." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet läuft momentan nicht." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Nach %s konnte nicht geschrieben werden; es wird daher entfernt." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "Musik-Bibliothek und -Player" #: ../quodlibet.py:297 msgid "[option]" msgstr "[Option]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Momentan gespielten Titel anzeigen" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Wiedergabe sofort starten" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Nächsten Titel abspielen" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "" "Zum vorherigen Titel oder – falls Titel noch nicht lange läuft – zum " "Titelanfang springen" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Vorherigen Titel abspielen" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Wiedergabe" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Pause" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Zwischen Wiedergabe/Pause umschalten" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Wiedergabe" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Lautstärke erhöhen" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Lautstärke senken" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Wiedergabestatus anzeigen" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Hauptfenster verbergen" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Hauptfenster anzeigen" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Hauptfenster anzeigen/verbergen" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Fokus auf laufenden Player setzen" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Aktive Browserfilter entfernen" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Bibliothek aktualisieren und neu einlesen" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Aktuelle Wiedergabeliste anzeigen" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Aktuelle Warteschlange anzeigen" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Quod Libet beenden" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Zu einer bestimmten Position im momentan abgespielten Titel gehen" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Wiedergabereihenfolge einstellen oder wechseln" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Endlosschleife ein-, aus-, oder zwischen beiden Modi umschalten" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Lautstärke einstellen" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Audio-Bibliothek durchsuchen" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "Abfrage" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Datei abspielen" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "Dateiname" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Abgespielten Titel bewerten" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Aktuellen Browser einstellen" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Neuen Browser öffnen" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Warteschlange anzeigen oder verbergen" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Titelliste anzeigen oder verbergen" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Nach zufälligem Wert filtern" #: ../quodlibet.py:340 msgid "command|tag" msgstr "Tag" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Nach Tag-Wert filtern" #: ../quodlibet.py:341 msgid "tag=value" msgstr "tag=Wert" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Eine Datei oder eine Abfrage zur Warteschlange hinzufügen" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "" "Mehrere Dateien – durch Kommata getrennt – zur Warteschlange hinzufügen" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "Dateiname" # Klingt genauso wackelig wie das Englische. Was meinst? #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "Dateinamen von Abfrageergebnissen auf Standardausgabe ausgeben" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Eine Datei oder eine Abfrage aus Warteschlange entfernen" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Argument für »%s« ungültig." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Geben Sie »%s --help« ein." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Unterstützte Formate: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Audiogerät: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Titelanfang" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "k. A." #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Zeit" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Lesezeichenname" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Lesezeichen" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Keine Informationen zur Abspieldauer" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Wert:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Gespeicherte Werte" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Gespeicherte Werte bearbeiten..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Titel" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Verbleibende Abspieldauer anzeigen" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Lesezeichen bearbeiten..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "Auto_matisch" #: ../quodlibet/qltk/controls.py:233 msgid "_Track Mode" msgstr "_Titel-Modus" #: ../quodlibet/qltk/controls.py:234 msgid "_Album Mode" msgstr "_Album-Modus" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Nach diesem Titel stoppen" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Nach Tag-Wert filtern" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Ein Fehler ist aufgetreten" #: ../quodlibet/qltk/debugwindow.py:71 #, fuzzy, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Ein Fehler ist in Quod Libet aufgetreten. Eine Speicherauszugsdatei wurde " "unter <b>%s</b> gespeichert. Sie kann uns bei der Fehlerbehebung helfen. " "Bitte legen Sie unter http://code.google.com/p/quodlibet/issues/list einen " "neuen Fehlerbericht inklusive dieser Datei oder ihres Inhalts an. Diese " "Datei kann einige Informationen zu Ihnen oder Ihrem System enthalten, z.B. " "zuletzt abgespielte Dateien. Falls das für Sie nicht akzeptabel ist, senden " "Sie <b>%s</b> stattdessen mit einer Beschreibung dessen, was zum Auftreten " "des Fehlers führte.\n" "Quod Libet könnte nun instabil sein. Es wird empfohlen, es zu schließen und " "neu zu starten. Die Bibliothek wird gespeichert." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Dateien löschen" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_In den Papierkorb verschieben" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Diese Datei unwiderruflich löschen?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Diese Dateien unwiderruflich löschen?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s und %(count)d weiterer..." msgstr[1] "%(title)s und %(count)d weitere..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "Verschiebe %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Lösche %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:105 msgid "Unable to move to trash" msgstr "Konnte nicht in den Müll verschieben" #: ../quodlibet/qltk/delete.py:106 #, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "Verschieben von <b>%s</b> in den Müll ist fehlgeschlagen." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Die Datei konnte nicht gelöscht werden." #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Löschen von <b>%s</b> fehlgeschlagen." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Downloads" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Dateiname" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Größe" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "Warteschlange" # Unter Tagging, 'Tags aus Pfad erzeugen'. # 'Pfad' gefällt mir nicht, 'Muster' ('Profil'?) auch nicht ;) #: ../quodlibet/qltk/_editpane.py:82 msgid "Path Patterns" msgstr "Pfadmuster" # Für mich sieht das eher nach 'Profile' aus. #: ../quodlibet/qltk/_editpane.py:83 msgid "Edit saved patterns..." msgstr "Gespeicherte Muster bearbeiten..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Voransicht" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Weitere Optionen..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "fehlt in %d Titel" msgstr[1] "fehlt in %d Titeln" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "unterschiedlich in %d Titel" msgstr[1] "unterschiedlich in %d Titeln" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "In _mehrere Werte aufteilen" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "CD von _Album trennen" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "_Version von Titel trennen" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Arrangeur von Küns_tler trennen" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "_Interpret von Künstler trennen" #: ../quodlibet/qltk/edittags.py:229 msgid "Split _Performer out of Title" msgstr "_Interpret von Titel trennen" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "_Version von Titel trennen" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Tag hinzufügen" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "_Tag:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "Aus Bibliothek _entfernen" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Tags bearbeiten" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Schreiben" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Tag konnte nicht hinzugefügt werden" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "<b>%s</b> konnte nicht hinzugefügt werden.\n" "\n" "Die momentan ausgewählten Dateien unterstützen keine mehrfachen Werte." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Ungültiges Tag" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "Ungültiges Tag <b>%s</b>\n" "\n" "Die ausgewählten Dateien unterstützen das Bearbeiten dieses Tags nicht." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Tag ist möglicherweise ungenau" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> wurde verändert, während das Programm lief. Wenn Sie speichern, " "ohne die Bibliothek zu aktualisieren, werden möglicherweise andere " "Änderungen an dem Titel überschrieben.\n" "\n" "Wollen Sie diesen Titel trotzdem speichern?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Der Titel konnte nicht gespeichert werden" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Speichern von <b>%s</b> fehlgeschlagen. Die Datei ist möglicherweise nur " "lesbar, beschädigt, oder Sie haben keine ausreichenden Benutzerrechte zum " "Bearbeiten der Datei." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Ungültiger Wert" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Ungültiger Wert: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Plugins" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "%d Titel" msgstr[1] "%d Titel" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso Einstellungen" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Trenne _nach:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "_Programmatische Tags anzeigen" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Tags bearbeiten" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Ordner" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Neuer Ordner..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "All_e Unterordner auswählen" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Neuer Ordner" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Geben Sie einen Namen für den neuen Ordner ein:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Ordner konnte nicht angelegt werden" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Ordner konnte nicht gelöscht werden" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "von %s" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "CD %s" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "Titel %s" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "Zur Wiederg_abeliste hinzufügen" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "Anz_eige bearbeiten..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "_Tags bearbeiten" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Keine Wiedergabe" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Fehler anzeigen" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Keine Titel ausgewählt" #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Keine Titel" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informationen" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Texte" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Fehler" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "Künstler" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "Künstler" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "Interpreten" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Nie" #: ../quodlibet/qltk/information.py:243 #, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%(n)d-mal" msgstr[1] "%(n)d-mal" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "Hinzugefügt" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "Letzte Wiedergabe" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "Wiedergegeben" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "Übersprungen" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "Bewertung" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbit/s" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "Dauer" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "Dateigröße" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "Geändert" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "Bitrate" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Datei" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d ausgewählt" msgstr[1] "%d ausgewählt" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "Produziert von %s" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "Interpret" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Titel nicht verfügbar" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Titel-Liste" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "%d Titel ohne Album" msgstr[1] "%d Titel ohne Album" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Ausgewählte Diskographie" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "%d Titel ohne Künstler" msgstr[1] "%d Titel ohne Künstler" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "Alben" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Gesamtdauer:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Gesamtgröße:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Dateien" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Protokoll" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Download" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Für diesen Titel wurden keine Texte gefunden." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Liedtext wird gesucht..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Liedtext konnte nicht heruntergeladen werden" #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "Sie sind im Begriff, %d Titel zu entfernen" #: ../quodlibet/qltk/maskedbox.py:18 msgid "The selected songs will be removed from the library." msgstr "" #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d Sender" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Änderungen an den Tags verwerfen?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Tags wurden verändert, aber noch nicht gespeichert. Sollen die Änderungen " "gespeichert oder verworfen werden?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "Aktive Prozesse" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "%d aktive Prozesse" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Unbekannt" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "Normal" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_Normal" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Zufall" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Bewertung" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Bewertung" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Einzelner Titel" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Einzelner Titel" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Plugin-Fehler" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Plugins" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "_Fehler anzeigen" #: ../quodlibet/qltk/pluginwin.py:259 msgid "Version:" msgstr "Version:" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Aktiviert" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Deaktiviert" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Keine Kategorie" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Keine Plugins gefunden" #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_CD" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Titel-Nr." #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "Gruppieren" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "_Album" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "Datei_name" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "Dau_er" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Titelliste" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "Automatisch zu aktuellem Titel _springen" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "Zu Titel in der Titelliste gehen, sobald dessen Wiedergabe beginnt" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "Verhalten" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Weitere:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "Anz_eige bearbeiten..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Anzuzeigende Spalten" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Die integrierte _Suchfunktion erfasst auch Mitwirkende" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Dateiname mit _Pfad" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "_Einstellungen" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Browser" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "_Globaler Filter:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "Diese Abfrage zusätzlich zu allen anderen anwenden" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Suche bei Eingabe _starten" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "Suchergebnisse umgehend nach Beenden der Eingabe anzeigen." #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Suchen" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Gleichzeitiges Bewerten _mehrerer Titel bestätigen" #: ../quodlibet/qltk/prefs.py:236 msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "" "Um die Bewertungen mehrerer Titel gleichzeitig zu ändern, wird eine " "Bestätigung angefordert" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Bewertungen mit _einfachem Klick zulassen" #: ../quodlibet/qltk/prefs.py:241 msgid "Enable rating by clicking on the rating column in the song list" msgstr "" "Das Ändern von Bewertungen durch Klicken in der Spalte \"Bewertung\" zulassen" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Bewertungen" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "Alben-Cover mit abger_undeten Ecken darstellen" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "Die Ecken der Alben-Cover werden abgerundet dargestellt. Möglicherweise ist " "ein Programmneustart erforderlich." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "_Eingebettete Cover-Bilder bevorzugen" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "" "Falls verfügbar, immer die in Audiodateien eingebetteten Coverbilder " "verwenden" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "Verwendung _folgender Bilddatei erzwingen:" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "Die zwingend zu verwendende Bilddatei" #: ../quodlibet/qltk/prefs.py:283 msgid "Album Art" msgstr "Alben-Cover" #: ../quodlibet/qltk/prefs.py:301 msgid "Playback" msgstr "Wiedergabe" #: ../quodlibet/qltk/prefs.py:306 msgid "Output Configuration" msgstr "Konfiguration der Tonausgabe" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "Lautstärke um diesen Wert skalieren, falls ein Titel keine ReplayGain-" "Informationen bietet" #: ../quodlibet/qltk/prefs.py:320 msgid "_Fall-back gain (dB):" msgstr "_Standardverstärkung (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Lautstärke aller Titel um diesen Wert skalieren, solange dadurch keine " "Übersteuerung auftritt" #: ../quodlibet/qltk/prefs.py:334 msgid "_Pre-amp gain (dB):" msgstr "_Vorverstärkung (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "ReplayGain-Lautstärkeanpassung _aktivieren" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "ReplayGain-Lautstärkeanpassung" #: ../quodlibet/qltk/prefs.py:387 msgid "Tags" msgstr "Tags" #: ../quodlibet/qltk/prefs.py:392 msgid "Auto-save tag changes" msgstr "Änderungen an Tags automatisch speichern" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" "Änderungen an Tags beim Bearbeiten mehrerer Dateien automatisch speichern" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" "Auf alle Tags zugreifen, auch auf solche, die z.B. durch MusicBrainz oder " "Replay Gain automatisch erstellt wurden" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" "Liste von Trennzeichen, die zum Aufteilen von Tag-Feldern verwendet werden. " "Einträge dieser Liste werden durch Leerzeichen voneinander getrennt." #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Bewertungen und Wiedergabeanzahl speichern" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_E-Mail:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" "Bewertungen und Angaben zur Wiedergabeanzahl werden dieser E-Mailadresse " "zugeordnet" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "Sender akt_ualisieren" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "Bibliothek beim Programmstart aktualisieren" #: ../quodlibet/qltk/prefs.py:501 msgid "Refresh Library" msgstr "Bibliothek aktualisieren" #: ../quodlibet/qltk/prefs.py:509 msgid "Scan Directories" msgstr "Ordner einlesen" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Keine Titel" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "_Einstellungen" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Eigenschaften" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Warteschlange" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Alle Titel aus Warteschlange entfernen" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Zufall" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "Reihenf_olge:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "En_dlosschleife" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Wiedergabeliste nach Abspielen aller Titel von vorn beginnen" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Titel konnten nicht hinzugefügt werden" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b> verwendet ein nicht unterstütztes Protokoll." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Musik" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Ordner hinzufügen..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Datei hinzufügen..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_URL hinzufügen..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Neuen Browser öffnen" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Filter" #: ../quodlibet/qltk/quodlibetwindow.py:455 msgid "Recently _Played" msgstr "Zuletzt _abgespielt" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "Zuletzt _hinzugefügt" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "_Top 40" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Steuerung" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Zum abgespielten Titel springen" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Ansicht" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Hilfe" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "Pr_otokoll" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "Ein Fehler ist aufgetreten" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Suchen" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "Bibliothek _aktualisieren" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Bibliothek _neu laden" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Nach _Genre filtern" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Nach _Künstler filtern" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Nach _Album filtern" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "G_enre zufällig auswählen" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Kü_nstler zufällig auswählen" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Alb_um zufällig auswählen" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "_Titelliste" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Bibliothek auf Änderungen überprüfen" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Alle Titel in der Bibliothek neu laden (dauert möglicherweise lange)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "Die 40 meist gespielten Titel (mehr als 40 werden ausgewählt bei Gleichstand)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "URL hinzufügen" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Geben Sie die URL einer Audio-Datei an:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Die URL konnte nicht hinzugefügt werden." #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> ist keine gültige URL." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Musik hinzufügen" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Diesen Ordner auf neue Titel prüfen" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s konnte nicht zu Ihrer Bibliothek hinzugefügt werden.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Titel konnte nicht hinzugefügt werden" #: ../quodlibet/qltk/ratingsmenu.py:20 #, fuzzy, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" "Sie sind im Begriff, die Bewertung von %d Titeln zu ändern.\n" "Möchten Sie fortfahren?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "Ungültigen Befehl %r empfangen." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "Fehler beim Ausführen des Befehls %r, verursacht durch: %r." #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "Unbekannter Browser %r." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Leerzeichen durch _Unterstriche ersetzen" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Von MS _Windows nicht unterstützte Zeichen entfernen" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "_Diakritische Zeichen entfernen" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Nicht-_ASCII-Zeichen entfernen" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "Nur _Kleinschreibung verwenden" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Dateien umbenennen" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Neuer Name" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "_Alle Fehler ignorieren" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Fortfahren" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Die Datei konnte nicht umbenannt werden" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Umbenennen von <b>%s</b> nach <b>%s</b> fehlgeschlagen. Möglicherweise " "existiert die Zieldatei bereits, oder Sie haben keine ausreichenden " "Benutzerrechte, um die neue Datei anzulegen oder die alte zu entfernen." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Der Pfad ist nicht absolut" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "Der Pfad\n" "\t<b>%s</b>\n" "enthält »/«, startet aber nicht vom Stammverzeichnis. Um zu vermeiden, dass " "Ordner falsch benannt werden, sollte der Pfad entweder mit »/« oder mit »~/« " "beginnen." #: ../quodlibet/qltk/scanbox.py:35 msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "In den aufgeführten Ordnern abgelegte Audiotitel werden Ihrer Bibliothek " "hinzugefügt, wenn diese aktualisiert wird." #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Ordner auswählen" #: ../quodlibet/qltk/searchbar.py:46 msgid "Saved Searches" msgstr "Gespeicherte Suchläufe" #: ../quodlibet/qltk/searchbar.py:47 msgid "Edit saved searches..." msgstr "Gespeicherte Suchläufe bearbeiten..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Suchen" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Limit:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Bewertung" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "Nach %s _filtern" #: ../quodlibet/qltk/songlist.py:1017 msgid "All _Headers" msgstr "_Alle Spalten" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Spalten zu _Titeln" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "Spalten zu _Alben" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "Spalten zu _Mitwirkenden" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "Spalten zum _Datum" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "Spalten zu _Dateien" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "Spalten zur _Produktion" #: ../quodlibet/qltk/songlist.py:1037 msgid "Custom _Sort..." msgstr "Benutzerdefinierte _Sortierung..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Spalten anpassen ..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Zur _Warteschlange hinzufügen" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "Auf _Gerät übertragen" #: ../quodlibet/qltk/songsmenu.py:259 msgid "_Remove from library" msgstr "Aus Bibliothek entfe_rnen" #: ../quodlibet/qltk/sortdialog.py:19 msgid "Track Headers" msgstr "Spalten zu Titeln" #: ../quodlibet/qltk/sortdialog.py:22 msgid "People Headers" msgstr "Spalten zu Mitwirkenden" #: ../quodlibet/qltk/sortdialog.py:25 msgid "Album Headers" msgstr "Spalten zu Alben" #: ../quodlibet/qltk/sortdialog.py:28 msgid "Date Headers" msgstr "Spalten zum Datum" #: ../quodlibet/qltk/sortdialog.py:31 msgid "File Headers" msgstr "Spalten zu Dateien" #: ../quodlibet/qltk/sortdialog.py:33 msgid "Production Headers" msgstr "Spalten zur Produktion" #: ../quodlibet/qltk/sortdialog.py:67 msgid "Tag:" msgstr "Tag:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "Aufsteigend" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "Absteigend" #: ../quodlibet/qltk/sortdialog.py:117 msgid "Custom sort" msgstr "Benutzerdefinierte Sortierung" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "_Unterstriche durch Leerzeichen ersetzen" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "Titel_anfang in Großbuchstaben" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "In _mehrere Werte aufteilen" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Tags aus Pfad erzeugen" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Neue Tags überschreiben bestehende Tags" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Neue Tags werden zu den vorhandenen Tags hinzugefügt" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "Das Muster\n" "\t<b>%s</b>\n" "ist ungültig. Möglicherweise enthält es den gleichen Tag zweimal, oder es " "enthält nicht zueinander passende Klammern (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Ungültige Tags" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "Ungültige Tags <b>%s</b>\n" "\n" "Die momentan ausgewählten Dateien unterstützen das Bearbeiten dieser Tags " "nicht." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Der Titel kann nicht bearbeitet werden" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Das von Ihnen eingegebene Muster ist ungültig. Bitte geben Sie < und > " "als \\< und \\> ein. Achten Sie darauf, dass Tags richtig geschlossen " "werden\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Anzeige bearbeiten" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Zu viele Fehler" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Wiedergabe wird gestoppt, da %d Fehler in Folge auftraten." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Titelnummern" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "_Starten bei:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "_Titel insgesamt:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Titel" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "und %d weitere..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Geänderte Titel werden gespeichert." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d Titel gespeichert\n" "(%(remaining)s übrig)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d von %d" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Suchbegriffe löschen" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Die Wiedergabeliste %s existiert bereits." # "Debug" untranslated in German strings hence "D:" remains unchanged. #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 msgid "D: " msgstr "D: " #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "Debug" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "W: " #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Warnungen" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "F: " #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Kurzinfo zur Benutzung anzeigen" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Info zu Version und Copyright anzeigen" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Aufruf: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[Optionen]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Die Option %r ist ungültig." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "Die Option %r erfordert ein Argument." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r ist kein eindeutiger Präfix." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Ungültige Kodierung]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "no title-casing" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "Allgemein" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "Kein Protokoll verfügbar." #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Das Datum muss in einem der folgenden Formate eingegeben werden: »JJJJ«, " "»JJJJ-MM-TT« oder »JJJJ-MM-TT HH:MM:SS«." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "" "Die ReplayGain-Wiedergabeverstärkung muss im Format »x.yy dB« eingegeben " "werden." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "ReplayGain-Spitzenpegel müssen im Format »x.yy« eingegeben werden." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz-IDs müssen dem Format UUID entsprechen." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "Der MusicBrainz Release-Status muss »official«, »promotional«, oder " "»bootleg« sein." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "Der Sprachcode muss aus drei Buchstaben bestehen (ISO 639-2)" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "Album" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "Arrangeur" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "Autor" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "Komponist" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "Dirigent" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "Kontakt" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "Copyright" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "Datum" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "Beschreibung" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "Genre" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "Gruppieren" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "Sprache" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "Lizenz" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "URL" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "Texter" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "Plattenfirma" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "Titel" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "Version" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "Website" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "Album-Künstler" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "CD-Untertitel" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "CD" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "Titel-Nr." #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "Label-ID" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "Erste Veröffentlichung" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "Originalalbum" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "Originalkünstler" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "Aufnahmedatum" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "Erschienen in" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "Album-Künstler (sortieren)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "Künstler (sortieren)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "Album (sortieren)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "Interpret (sortieren)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "Interpreten (sortieren)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz Titel-ID" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "MusicBrainz Release-ID" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "MusicBrainz Künstler-ID" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz Albumkünstler-ID" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM-ID" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz Albumstatus" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz Album-Typ" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "Lautstärkeverstärkung per Titel" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "Titel-Spitzenpegel" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "Lautstärkeverstärkung per Album" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "Album-Spitzenpegel" #: ../quodlibet/util/tags.py:88 msgid "reference loudness" msgstr "Referenzlautstärke" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "CDs" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "Titel" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "Zuletzt angespielt" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "Vollst. Dateiname" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "Mount-Punkt" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "Fehler" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "Mitwirkende" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "Jahr" #: ../quodlibet/util/tags.py:111 msgid "original release year" msgstr "Jahr der Erstveröffentlichung" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "Lesezeichen" #: ../quodlibet/util/tags.py:115 msgid "file format" msgstr "Dateiformat" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "Texter" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "Arrangeure" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "Komponisten" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "Dirigenten" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "Autoren" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "%d Sekunde" msgstr[1] "%d Sekunden" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "%d Minute" msgstr[1] "%d Minuten" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "%d Stunde" msgstr[1] "%d Stunden" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "%d Tag" msgstr[1] "%d Tage" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "%d Jahr" msgstr[1] "%d Jahre" #~ msgid "_Browse Library" #~ msgstr "Bibli_othek durchsuchen" #~ msgid "Do you wish to continue?" #~ msgstr "Möchten Sie fortfahren?" #~ msgid "Confirm playlist removal" #~ msgstr "Entfernen der Wiedergabeliste bestätigen" #~ msgid "Confirm duplicates removal" #~ msgstr "Entfernen von Duplikaten bestätigen" #~ msgid "No eject command found." #~ msgstr "Kein Befehl zum Auswerfen gefunden." #~ msgid "Unable to start web browser" #~ msgstr "Der Webbrowser konnte nicht gestartet werden" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Es wurde kein Webbrowser gefunden. Bitte setzen Sie die Variable " #~ "$BROWSER, oder stellen Sie sicher, dass /usr/bin/sensible-browser " #~ "existiert." #~ msgid "" #~ "Cannot save library contents to %s (it's a directory). Please remove it " #~ "and try again." #~ msgstr "" #~ "Die Inhalte der Bibliothek können nicht auf %s (dies ist ein Verzeichnis) " #~ "gespeichert werden. Bitte entfernen und erneut versuchen." #~ msgid "Library Error" #~ msgstr "Fehler in Bibliothek" #~ msgid "_Output device:" #~ msgstr "_Ausgabe-Gerät:" # verknüpft? #~ msgid "Could not link GStreamer pipeline: '%s'" #~ msgstr "GStreamer-Pipeline konnte nicht verknüpft werden: »%s«" #~ msgid "Default" #~ msgstr "Standardgerät" #~ msgid "translator-credits" #~ msgstr "" #~ "Rüdiger Arp <ruediger@gmx.net>\n" #~ "Bastian Kleineidam" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "" #~ "Weitere anzuzeigende Spalten (durch Leerzeichen voneinander getrennt " #~ "eingeben)" #~ msgid "_Edit and Continue" #~ msgstr "_Bearbeiten und Fortfahren" #, fuzzy #~ msgid "You are about to change the rating of %d song." #~ msgid_plural "You are about to change the rating of %d songs." #~ msgstr[0] "" #~ "Sie sind im Begriff, die Bewertung von %d Titel zu ändern.\n" #~ "Möchten Sie fortfahren?" #~ msgstr[1] "" #~ "Sie sind im Begriff, die Bewertung von %d Titeln zu ändern.\n" #~ "Möchten Sie fortfahren?" #~ msgid "Confirm rating" #~ msgstr "Bewertung bestätigen" #~ msgid "_Search:" #~ msgstr "S_uche:" #~ msgid "Search your library" #~ msgstr "Bibliothek durchsuchen" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quod-libet-development@googlegroups.com>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman und weitere\n" #~ "\n" #~ "Dieses Programm ist freie Software; Konditionen zum Kopieren siehe " #~ "Quellcode.\n" #~ "Dieses Programm beinhaltet KEINERLEI Garantie, keine implizite Garantie " #~ "der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK.\n" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r enthält keine Browser." #~ msgid "%r doesn't contain any devices." #~ msgstr "%r enthält keine Geräte." #~ msgid "%s: Could not find media-player-info." #~ msgstr "%s: media-player-info wurde nicht gefunden." #~ msgid "Unkown" #~ msgstr "Unbekannt" #~ msgid "gtk-media-next" #~ msgstr "_Nächster" #~ msgid "gtk-media-previous" #~ msgstr "_Vorheriger" #~ msgid "gtk-media-play" #~ msgstr "_Wiedergabe" #~ msgid "gtk-media-pause" #~ msgstr "_Pause" #~ msgid "Not setting process title." #~ msgstr "Prozessname wird nicht gesetzt." #~ msgid "Couldn't find module %s." #~ msgstr "Modul %s wurde nicht gefunden." #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet Plugins" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet Einstellungen" #~ msgid "Total size unknown" #~ msgstr "Gesamtgröße unbekannt" #~ msgid "Not Played To_day" #~ msgstr "Heute n_och nicht abgespielt" #~ msgid "Not Played in a _Week" #~ msgstr "Seit einer _Woche nicht abgespielt" #~ msgid "Not Played in a _Month" #~ msgstr "Seit einem _Monat nicht abgespielt" #~ msgid "B_ottom 40" #~ msgstr "Fl_op 40" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "Die 40 am wenigsten gespielten Titel (mehr als 40 werden ausgewählt bei " #~ "Gleichstand)" #~ msgid "%s: Could not import ctypes." #~ msgstr "%s: ctypes konnte nicht importiert werden." #~ msgid "Color _search terms" #~ msgstr "_Suchbegriffe einfärben" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Einfache Suchen in Blau, erweiterte in Grün und ungültige in Rot anzeigen" #~ msgid "_Select" #~ msgstr "Au_swählen" #~ msgid "Separators for splitting tags" #~ msgstr "Begrenzungszeichen zum Trennen von Tags" #~ msgid "Enable _human title case" #~ msgstr "Übliche Groß-/Kleinschreibung in Titeln verwenden" #~ msgid "" #~ "Uses common English rules for title casing, as in \"Dark Night of the Soul" #~ "\"" #~ msgstr "" #~ "Gebräuchliche englische Regeln für Groß-/Kleinschreibung von Titeln " #~ "verwenden. Beispiel: \"Dark Night of the Soul\"" #~ msgid "Display" #~ msgstr "Anzeige" #~ msgid "Art sources" #~ msgstr "Quellen für Cover-Bilder" #~ msgid "Choose New Stations" #~ msgstr "Neue Sender auswählen" #~ msgid "Add" #~ msgstr "Hinzufügen" #~ msgid "Bitrate" #~ msgstr "Bitrate" #~ msgid "Genre" #~ msgstr "Genre" #~ msgid "Title" #~ msgstr "Titel" #~ msgid "_Stations..." #~ msgstr "_Sender..." #~ msgid "Artist" #~ msgstr "Künstler" #~ msgid "Date" #~ msgstr "Datum" #~ msgid "Unable to dump logs, you're boned." #~ msgstr "Protokolle konnten nicht geschrieben werden." #~ msgid "Quod Libet" #~ msgstr "Quod Libet" #~ msgid "Initializing audio backend (%s)" #~ msgstr "Audio-Backend (%s) wird initialisiert" #~ msgid "Initializing main library (%s)" #~ msgstr "Hauptbibliothek (%s) wird initialisiert" #~ msgid "Unable to save library" #~ msgstr "Die Bibliothek konnte nicht gespeichert werden" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | control ]" #~ msgid "" #~ "The audio output pipeline %r could not be created. Check your GStreamer " #~ "settings in ~/.quodlibet/config." #~ msgstr "" #~ "Die Audioausgabe-Pipeline %r konnte nicht angelegt werden. Überprüfen Sie " #~ "die GStreamer-Einstellungen in ~/.quodlibet/config." #~ msgid "_Information" #~ msgstr "_Informationen" #~ msgid "Sort by title" #~ msgstr "Nach Titel sortieren" #~ msgid "Sort by artist" #~ msgstr "Nach Künstler sortieren" #~ msgid "Lyrics provided by %s." #~ msgstr "Liedtext zur Verfügung gestellt von %s." #~ msgid "" #~ "No lyrics found.\n" #~ "\n" #~ "You can click the Download button to have Quod Libet search for lyrics " #~ "online. You can also enter them yourself and click save." #~ msgstr "" #~ "Liedtext nicht gefunden.\n" #~ "\n" #~ "Klicken Sie auf die Schaltfläche Download, damit Quod Libet die Liedtexte " #~ "online sucht. Sie können die Texte auch selbst eingeben und speichern." ����������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/po/eu.po����������������������������������������������������������������������������0000644�0001750�0001750�00000267320�12173213426�015334� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Basque translation of Quod Libet # Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Quod Libet package. # Piarres Beobide <pi@beobide.net>, 2010. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-07-22 13:10+0200\n" "PO-Revision-Date: 2010-11-29 00:37+0200\n" "Last-Translator: Piarres Beobide <pi@beobide.net>\n" "Language-Team: Basque <librezale@librezale.es>\n" "Language: eu\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-Generator: Pootle 2.0.5\n" #: ../data/exfalso.desktop.in.h:1 msgid "Audio tag editor" msgstr "Audio etiketa editorea" #: ../data/exfalso.desktop.in.h:2 msgid "Edit tags in your audio files" msgstr "Editatu zure audio fitxategietako etiketak" #: ../data/quodlibet.desktop.in.h:1 msgid "Music Player" msgstr "Musika erreproduzigailua" #: ../data/quodlibet.desktop.in.h:2 msgid "Listen to, browse, or edit your audio collection" msgstr "Entzun, arakatu edo editatu zure audio bilduma" #: ../data/quodlibet.desktop.in.h:3 #, fuzzy msgid "Play/Pause" msgstr "Erreproduzigailua" #: ../data/quodlibet.desktop.in.h:4 msgid "Next" msgstr "Hurrengoa" #: ../data/quodlibet.desktop.in.h:5 #, fuzzy msgid "Previous" msgstr "_Aurreikusi" #: ../exfalso.py:27 msgid "an audio tag editor" msgstr "audio etiketa editorea" #: ../exfalso.py:27 ../quodlibet/util/tags.py:99 msgid "directory" msgstr "direktorioa" #: ../operon.py:81 #, python-format msgid "Failed to load file: %r" msgstr "%r fitxategia kargatzeak huts egin du" #: ../operon.py:114 msgid "List tags" msgstr "Erakutsi etiketak" #: ../operon.py:119 ../operon.py:157 ../operon.py:450 msgid "Print terse output" msgstr "Erakutsi debugarako informazioa" #: ../operon.py:121 ../operon.py:159 ../operon.py:452 #, python-format msgid "Columns to display and order in terse mode (%s)" msgstr "Zutabeak eta ordena Debugarako moduan (%s)" #: ../operon.py:124 #, fuzzy msgid "Also list programmatic tags" msgstr "Ikusi etiketa _programatikoak" #: ../operon.py:128 ../operon.py:192 ../operon.py:218 ../operon.py:236 #: ../operon.py:272 ../operon.py:286 ../operon.py:328 ../operon.py:332 #: ../operon.py:382 ../operon.py:385 ../operon.py:423 ../operon.py:457 #: ../operon.py:493 msgid "Not enough arguments" msgstr "Argumentu nahikorik ez" #: ../operon.py:130 ../operon.py:164 ../operon.py:194 ../operon.py:220 #: ../operon.py:238 ../operon.py:459 #, fuzzy msgid "Too many arguments" msgstr "Errore gehiegi" #: ../operon.py:133 ../operon.py:166 ../operon.py:464 #, fuzzy msgid "Description" msgstr "azalpena" #: ../operon.py:133 ../operon.py:464 ../quodlibet/qltk/edittags.py:422 msgid "Value" msgstr "Balioa" #: ../operon.py:133 ../operon.py:166 ../quodlibet/browsers/collection.py:146 #: ../quodlibet/qltk/edittags.py:406 msgid "Tag" msgstr "Etiketa" #: ../operon.py:152 msgid "List all common tags" msgstr "Erakutsi ohiko etiketak" #: ../operon.py:187 msgid "Print all tags to stdout" msgstr "Erakutsi etiketa guztiak irteera estandarrean" #: ../operon.py:207 msgid "Load tags dumped with 'dump'" msgstr "Kargatu 'dump'-ek jaurkitako etiketak" #: ../operon.py:212 ../operon.py:230 ../operon.py:268 ../operon.py:282 #: ../operon.py:316 ../operon.py:375 msgid "Show changes, don't apply them" msgstr "Erakutsi aldaketak, ez ezarri" #: ../operon.py:214 ../operon.py:232 msgid "Skip tags that can't be written" msgstr "Jauzi egin idatzi ezin daitezkeen etiketak" #: ../operon.py:225 msgid "Copy tags from one file to another" msgstr "Kopiatu etiketak fitxategi batetik beste batera" #: ../operon.py:252 #, python-format msgid "Can't copy tag %r to file: %r" msgstr "Ezin da %r %r fitxategira kopiatu" #: ../operon.py:263 #, fuzzy msgid "Edit tags in an editor" msgstr "Audio etiketa editorea" #: ../operon.py:277 msgid "Set a tag and remove existing values" msgstr "Jarri etiketa bat eta ezabatu aurreko baloreak" #: ../operon.py:297 ../operon.py:434 #, python-format msgid "Can not set %r" msgstr "Ezin da %r jarri" #: ../operon.py:311 #, fuzzy msgid "Remove tags" msgstr "Bikoiztuak ezabatu" #: ../operon.py:318 ../operon.py:377 msgid "Value is a regular expression" msgstr "Balorea expresio erregularra da (RE)" #: ../operon.py:320 #, fuzzy msgid "Remove all tags" msgstr "Bikoiztuak ezabatu" #: ../operon.py:324 msgid "Can't combine '--all' with '--regexp'" msgstr "Ezin da '--all' eta '--regexp' aldi berean erabili" #: ../operon.py:358 #, python-format msgid "Can't remove %r from %r" msgstr "Ezin da %r %r -tik ezabatu" #: ../operon.py:370 #, fuzzy msgid "Remove a tag value" msgstr "Iragazi etiketa balio batez" #: ../operon.py:418 #, fuzzy msgid "Add a tag value" msgstr "Iragazi etiketa balio batez" #: ../operon.py:445 #, fuzzy msgid "List file information" msgstr "Ez dago denbora informaziorik" #: ../operon.py:488 msgid "Extract embedded images" msgstr "Atera irudi txertatuak" #: ../operon.py:498 msgid "Rename files based on tags" msgstr "Izenaz aldatu etiketeen arabera" #: ../operon.py:512 msgid "Fill tags based on the file path" msgstr "Bete etiketak fitxategiaren helbidearen arabera" #: ../operon.py:526 msgid "Fill tracknumbers for all files" msgstr "Bete pista zenbakiak fitxategi guztietan" #: ../operon.py:544 msgid "Print tags based on the given pattern" msgstr "Erakutsi emandako patroiarekin bat datozen etiketak" #: ../operon.py:573 #, fuzzy msgid "Display help information" msgstr "Erakutsi erabiltze argibide laburpena" #: ../operon.py:601 #, fuzzy, python-format msgid "'%s' is not a valid column name (%s)." msgstr "<b>%s</b> ez da baliozko kokapen bat." #: ../quodlibet/browsers/albums.py:33 ../quodlibet/browsers/collection.py:30 msgid "Songs not in an album" msgstr "Album gabeko kantak" #: ../quodlibet/browsers/albums.py:89 msgid "Album List Preferences" msgstr "Album zerrenda hobespenak" #: ../quodlibet/browsers/albums.py:96 msgid "Show album _covers" msgstr "Ikusi album _karatulak" #: ../quodlibet/browsers/albums.py:103 msgid "Inline _search includes people" msgstr "Sarezko _bilaketa jendea barneratuz" #: ../quodlibet/browsers/albums.py:120 msgid "Album Display" msgstr "Album bistaratzea" #: ../quodlibet/browsers/albums.py:147 ../quodlibet/qltk/information.py:368 #: ../quodlibet/util/collection.py:230 #, python-format msgid "%d track" msgid_plural "%d tracks" msgstr[0] "kanta %d" msgstr[1] "%d kantak" #: ../quodlibet/browsers/albums.py:148 ../quodlibet/qltk/information.py:366 #: ../quodlibet/util/collection.py:234 #, python-format msgid "%d disc" msgid_plural "%d discs" msgstr[0] "disko %d" msgstr[1] "%d disko" #: ../quodlibet/browsers/albums.py:154 ../quodlibet/browsers/albums.py:159 #: ../quodlibet/qltk/tagsfrompath.py:155 ../quodlibet/qltk/textedit.py:88 #: ../quodlibet/util/__init__.py:690 msgid "Invalid pattern" msgstr "Patroi baliogabea" #: ../quodlibet/browsers/albums.py:180 #, fuzzy msgid "_Title" msgstr "Titulua" #: ../quodlibet/browsers/albums.py:181 ../quodlibet/qltk/prefs.py:42 msgid "_Artist" msgstr "_Artista" #: ../quodlibet/browsers/albums.py:182 ../quodlibet/qltk/prefs.py:47 msgid "_Date" msgstr "_Data" #: ../quodlibet/browsers/albums.py:183 ../quodlibet/qltk/prefs.py:46 #, fuzzy msgid "_Genre" msgstr "Genero" #: ../quodlibet/browsers/albums.py:184 ../quodlibet/qltk/prefs.py:51 #: ../quodlibet/qltk/ratingsmenu.py:47 msgid "_Rating" msgstr "_Balorazioa" #: ../quodlibet/browsers/albums.py:189 #, fuzzy msgid "Sort _by..." msgstr "Ordena_tu:" #: ../quodlibet/browsers/albums.py:210 #, fuzzy msgid "_Preferences" msgstr "Hobespenak" #: ../quodlibet/browsers/albums.py:419 msgid "Album List" msgstr "Album zerrenda" #: ../quodlibet/browsers/albums.py:420 msgid "_Album List" msgstr "_Album zerrenda" #: ../quodlibet/browsers/albums.py:581 msgid "All Albums" msgstr "Album guztiak" #: ../quodlibet/browsers/albums.py:582 #, python-format msgid "%d album" msgid_plural "%d albums" msgstr[0] "album %d" msgstr[1] "%d album" #: ../quodlibet/browsers/albums.py:725 #, fuzzy msgid "Reload album _cover" msgid_plural "Reload album _covers" msgstr[0] "Ikusi album _karatulak" msgstr[1] "Ikusi album _karatulak" #: ../quodlibet/browsers/audiofeeds.py:46 #: ../quodlibet/browsers/audiofeeds.py:58 #: ../quodlibet/browsers/audiofeeds.py:60 #: ../quodlibet/browsers/audiofeeds.py:145 ../quodlibet/browsers/paned.py:220 #: ../quodlibet/formats/_audio.py:400 ../quodlibet/qltk/information.py:247 #: ../quodlibet/qltk/information.py:255 ../quodlibet/qltk/information.py:281 #: ../quodlibet/qltk/playorder.py:17 ../quodlibet/qltk/wlw.py:65 msgid "Unknown" msgstr "Ezezaguna" #: ../quodlibet/browsers/audiofeeds.py:202 msgid "New Feed" msgstr "Jario berria" #: ../quodlibet/browsers/audiofeeds.py:203 msgid "Enter the location of an audio feed:" msgstr "Idatzi audio jarioaren kokapena:" #: ../quodlibet/browsers/audiofeeds.py:222 msgid "Audio Feeds" msgstr "Audio jarioak" #: ../quodlibet/browsers/audiofeeds.py:223 msgid "_Audio Feeds" msgstr "_Audio jarioak" #: ../quodlibet/browsers/audiofeeds.py:294 #: ../quodlibet/browsers/audiofeeds.py:300 msgid "_Download..." msgstr "_Deskargak..." #: ../quodlibet/browsers/audiofeeds.py:309 msgid "Download Files" msgstr "Deskargatu fitxategiak" #: ../quodlibet/browsers/audiofeeds.py:330 msgid "Download File" msgstr "Deskargatu fitxategia" #: ../quodlibet/browsers/audiofeeds.py:422 #: ../quodlibet/browsers/audiofeeds.py:478 msgid "Unable to add feed" msgstr "Ezin da jarioa gehitu" #: ../quodlibet/browsers/audiofeeds.py:423 #: ../quodlibet/browsers/audiofeeds.py:479 #, python-format msgid "" "<b>%s</b> could not be added. The server may be down, or the location may " "not be an audio feed." msgstr "" "<b>%s</b> ezin da gehitu. Zerbitzaria eroria egon liteke edo kokapena ez da " "audio jario bat." #: ../quodlibet/browsers/audiofeeds.py:495 #, fuzzy, python-format msgid "Could not import %s. Audio Feeds browser disabled." msgstr "" "Ezin da python-feedparser inportatu, audio jario nabigatzaile desgaiturik." #: ../quodlibet/browsers/audiofeeds.py:502 msgid "" "The current audio backend does not support URLs, Audio Feeds browser " "disabled." msgstr "" "Uneko audio azpiegiturak ez ditu URLak onartzen, audio jario nabigatzailea " "ezgaiturik." #. The browser's name, without an accelerator. #. The name, with an accelerator. #: ../quodlibet/browsers/_base.py:138 ../quodlibet/browsers/_base.py:140 msgid "Library Browser" msgstr "Liburutegi nabigatzailea" #: ../quodlibet/browsers/_base.py:221 ../quodlibet/qltk/queue.py:128 #, python-format msgid "%(count)d song (%(time)s)" msgid_plural "%(count)d songs (%(time)s)" msgstr[0] "kanta %(count)d (%(time)s)" msgstr[1] "%(count)d kanta (%(time)s)" #: ../quodlibet/browsers/collection.py:36 #, fuzzy, python-format msgid "Unknown %s" msgstr "Ezezaguna" #: ../quodlibet/browsers/collection.py:37 #, fuzzy, python-format msgid "Multiple %s Values" msgstr "Zatitu _hainbat baliotan" #: ../quodlibet/browsers/collection.py:90 ../quodlibet/browsers/paned.py:68 msgid "_Custom" msgstr "_Personalizatu" #: ../quodlibet/browsers/collection.py:152 msgid "Merge" msgstr "Batu" #: ../quodlibet/browsers/collection.py:210 #, fuzzy msgid "Album Collection Preferences" msgstr "Album zerrenda hobespenak" #: ../quodlibet/browsers/collection.py:495 msgid "Album Collection" msgstr "Diska bilduma" #: ../quodlibet/browsers/collection.py:496 msgid "Album _Collection" msgstr "Diska _bilduma" #: ../quodlibet/browsers/filesystem.py:37 msgid "File System" msgstr "Fitxategi sistema" #: ../quodlibet/browsers/filesystem.py:38 msgid "_File System" msgstr "_Fixtategi sistema" #: ../quodlibet/browsers/filesystem.py:108 ../quodlibet/browsers/media.py:472 #: ../quodlibet/qltk/songlist.py:458 msgid "Unable to copy songs" msgstr "Ezin dira kantak kopiatu" #: ../quodlibet/browsers/filesystem.py:109 ../quodlibet/qltk/songlist.py:459 msgid "The files selected cannot be copied to other song lists or the queue." msgstr "Hautatutako kantak ezin dira kopiatu beste zerrenda edo ilara batera." #: ../quodlibet/browsers/filesystem.py:174 msgid "_Add to Library" msgstr "_Gehitu liburutegira" #: ../quodlibet/browsers/iradio.py:167 msgid "Unsupported file type" msgstr "Onartzen ez den fitxategi mota" #: ../quodlibet/browsers/iradio.py:168 #, python-format msgid "" "Station lists can only contain locations of stations, not other station " "lists or playlists. The following locations cannot be loaded:\n" "%s" msgstr "" "Kate zerrendak kate helbideak bakarrik izan ditzake ez beste kate zerrenda " "edo erreprodukzio-zerrendarik. Hurrengo kateak ezin dira kargatu:\n" "%s" #: ../quodlibet/browsers/iradio.py:211 ../quodlibet/browsers/iradio.py:224 #: ../quodlibet/browsers/iradio.py:715 msgid "Unable to add station" msgstr "Ezin da katea gehitu" #: ../quodlibet/browsers/iradio.py:235 ../quodlibet/browsers/iradio.py:424 msgid "Internet Radio" msgstr "Internet irratia" #: ../quodlibet/browsers/iradio.py:235 #, fuzzy msgid "Downloading station list" msgstr "Deskargatu fitxategiak" #: ../quodlibet/browsers/iradio.py:333 msgid "New Station" msgstr "Kate berria" #: ../quodlibet/browsers/iradio.py:334 msgid "Enter the location of an Internet radio station:" msgstr "Sar Internet bidezko irrati kate kokapena:" #: ../quodlibet/browsers/iradio.py:356 msgid "Electronic" msgstr "Elektronikoa" #: ../quodlibet/browsers/iradio.py:359 msgid "Hip Hop / Rap" msgstr "Hip Hop / Rap" #: ../quodlibet/browsers/iradio.py:360 msgid "Oldies" msgstr "Oldies" #: ../quodlibet/browsers/iradio.py:361 msgid "R&B" msgstr "R&B" #: ../quodlibet/browsers/iradio.py:362 msgid "Japanese" msgstr "Japaniarra" #: ../quodlibet/browsers/iradio.py:363 msgid "Indian" msgstr "Indiarra" #: ../quodlibet/browsers/iradio.py:365 msgid "Religious" msgstr "Erlijio-musika" #: ../quodlibet/browsers/iradio.py:367 msgid "Charts" msgstr "Salduenak" #: ../quodlibet/browsers/iradio.py:368 msgid "Turkish" msgstr "Turkiarra" #: ../quodlibet/browsers/iradio.py:369 msgid "Reggae / Dancehall" msgstr "Reggae / Dantzatzeko" #: ../quodlibet/browsers/iradio.py:370 #, fuzzy msgid "Latin" msgstr "balorazioa" #: ../quodlibet/browsers/iradio.py:371 msgid "College Radio" msgstr "Unibertsitate irratia" #: ../quodlibet/browsers/iradio.py:372 msgid "Talk / News" msgstr "Eztabaidak / Berriak" #: ../quodlibet/browsers/iradio.py:373 msgid "Ambient" msgstr "Ambient" #: ../quodlibet/browsers/iradio.py:374 msgid "Jazz" msgstr "Jazz" #: ../quodlibet/browsers/iradio.py:375 msgid "Classical" msgstr "Klasikoa" #: ../quodlibet/browsers/iradio.py:376 msgid "Pop" msgstr "Pop" #: ../quodlibet/browsers/iradio.py:377 msgid "Alternative" msgstr "Alternatiboa" #: ../quodlibet/browsers/iradio.py:378 msgid "Metal" msgstr "Metal" #: ../quodlibet/browsers/iradio.py:379 msgid "Country" msgstr "Country" #: ../quodlibet/browsers/iradio.py:380 msgid "News" msgstr "Berriak" #: ../quodlibet/browsers/iradio.py:381 msgid "Schlager" msgstr "Schlager" #: ../quodlibet/browsers/iradio.py:382 msgid "Funk" msgstr "Funk" #: ../quodlibet/browsers/iradio.py:383 msgid "Indie" msgstr "Indie" #: ../quodlibet/browsers/iradio.py:384 msgid "Blues" msgstr "Blues" #: ../quodlibet/browsers/iradio.py:385 msgid "Soul" msgstr "Soul" #: ../quodlibet/browsers/iradio.py:386 msgid "Lounge" msgstr "Lounge" #: ../quodlibet/browsers/iradio.py:387 msgid "Punk" msgstr "Punk" #: ../quodlibet/browsers/iradio.py:388 msgid "Reggaeton" msgstr "Reggaeton" #: ../quodlibet/browsers/iradio.py:390 msgid "Slavic" msgstr "Eslaboa" #: ../quodlibet/browsers/iradio.py:392 msgid "Greek" msgstr "Greziarra" #: ../quodlibet/browsers/iradio.py:393 msgid "Gothic" msgstr "Gotikoa" #: ../quodlibet/browsers/iradio.py:394 msgid "Rock" msgstr "Rock" #: ../quodlibet/browsers/iradio.py:425 msgid "_Internet Radio" msgstr "_Internet irratia" #: ../quodlibet/browsers/iradio.py:488 #, fuzzy msgid "_New Station..." msgstr "_Kate berria" #: ../quodlibet/browsers/iradio.py:491 #, fuzzy msgid "_Update Stations" msgstr "_Kate berria" #: ../quodlibet/browsers/iradio.py:516 #, fuzzy msgid "All Stations" msgstr "Kate berria" #: ../quodlibet/browsers/iradio.py:520 msgid "Favorites" msgstr "Kuttunak" #: ../quodlibet/browsers/iradio.py:528 #, fuzzy msgid "No Category" msgstr "Kategoria gabe" #: ../quodlibet/browsers/iradio.py:707 msgid "No stations found" msgstr "Ez da katerik aurkitu" #: ../quodlibet/browsers/iradio.py:708 #, python-format msgid "No Internet radio stations were found at %s." msgstr "Ez da Intenet irrati katerik topatu %s-en." #: ../quodlibet/browsers/iradio.py:716 msgid "All stations listed are already in your library." msgstr "Zerrendatutako kate guztiak dagoeneko badaude liburutegian." #: ../quodlibet/browsers/iradio.py:738 #, fuzzy msgid "Remove from Favorites" msgstr "_Kendu erreprodukzio-zerrendatik" #: ../quodlibet/browsers/iradio.py:744 #, fuzzy msgid "Add to Favorites" msgstr "_Gehitu erreprodukzio-zerrendara" #: ../quodlibet/browsers/iradio.py:836 #, python-format msgid "%(count)d station" msgid_plural "%(count)d stations" msgstr[0] "%(count)d kate" msgstr[1] "%(count)d kate" #: ../quodlibet/browsers/media.py:30 msgid "Device Properties" msgstr "Gailu propietateak" #: ../quodlibet/browsers/media.py:43 msgid "Device:" msgstr "Gailua:" #: ../quodlibet/browsers/media.py:45 msgid "Not mounted" msgstr "Ez dago muntaturik" #: ../quodlibet/browsers/media.py:46 msgid "Mount Point:" msgstr "Muntatze puntua:" #: ../quodlibet/browsers/media.py:52 ../quodlibet/qltk/cbes.py:37 msgid "_Name:" msgstr "Ize_na:" #: ../quodlibet/browsers/media.py:128 msgid "Media Devices" msgstr "Medio gailuak" #: ../quodlibet/browsers/media.py:129 msgid "_Media Devices" msgstr "_Medio gailuak" #: ../quodlibet/browsers/media.py:215 ../quodlibet/browsers/media.py:361 msgid "_Eject" msgstr "_Ebatzi" #: ../quodlibet/browsers/media.py:348 ../quodlibet/browsers/playlists.py:536 msgid "_Rename" msgstr "Be_rrizendatu" #: ../quodlibet/browsers/media.py:444 #, python-format msgid "<b>%s</b> used, <b>%s</b> available" msgstr "<b>%s</b> erabilia, <b>%s</b> erabilgarri" #: ../quodlibet/browsers/media.py:461 #, python-format msgid "<b>%s</b> is not connected." msgstr "<b>%s</b> ez dago konektaturik." #: ../quodlibet/browsers/media.py:478 #, python-format msgid "Copying <b>%(song)s</b>" msgstr "<b>%(song)s</b> kopiatzen" #: ../quodlibet/browsers/media.py:497 ../quodlibet/browsers/media.py:514 msgid "Unable to copy song" msgstr "Ezin da kanta kopiatu" #: ../quodlibet/browsers/media.py:498 msgid "There is not enough free space for this song." msgstr "Ez kanta honentzako behar aina leku." #: ../quodlibet/browsers/media.py:511 #, python-format msgid "<b>%s</b> could not be copied." msgstr "<b>%s</b> ezin izan da kopiatu." #: ../quodlibet/browsers/media.py:531 msgid "Unable to delete songs" msgstr "Ezin dira kantak ezabatu" #: ../quodlibet/browsers/media.py:541 #, python-format msgid "Deleting <b>%(song)s</b>" msgstr "<b>%(song)s</b> ezabatzen" #: ../quodlibet/browsers/media.py:560 #, python-format msgid "<b>%s</b> could not be deleted." msgstr "<b>%s</b> ezin izan da ezabatu." #: ../quodlibet/browsers/media.py:564 msgid "Unable to delete song" msgstr "Ezin da abestiak ezabatu" #: ../quodlibet/browsers/media.py:579 #, python-format msgid "Ejecting <b>%s</b> failed." msgstr "<b>%s</b> ebazteak huts egin du." #: ../quodlibet/browsers/media.py:582 msgid "Unable to eject device" msgstr "Ezin da gailua ebatzi" #: ../quodlibet/browsers/media.py:587 msgid "No device backend, Media Devices browser disabled." msgstr "Ez dago gailu azpiegiturarik, media gailu nabigatzailea desgaiturik." #: ../quodlibet/browsers/paned.py:179 msgid "Paned Browser Preferences" msgstr "Paneldun nabigatzaile hobespenak" #: ../quodlibet/browsers/paned.py:221 ../quodlibet/qltk/pluginwin.py:343 msgid "All" msgstr "Dena" #: ../quodlibet/browsers/paned.py:684 msgid "Paned Browser" msgstr "Paneldun nabigatzailea" #: ../quodlibet/browsers/paned.py:685 msgid "_Paned Browser" msgstr "_Paneldun nabigatzailea" #: ../quodlibet/browsers/paned.py:710 msgid "Select _All" msgstr "Hautatu _denak" #: ../quodlibet/browsers/playlists.py:75 #, python-format msgid "" "Importing playlist.\n" "\n" "%(current)d/%(total)d songs added." msgstr "" "Erreprodukzio-zerrenda inportatzen.\n" "\n" "%(current)d/%(total)d kanta gehiturik." #: ../quodlibet/browsers/playlists.py:108 #, fuzzy, python-format msgid "Are you sure you want to delete the playlist '%s'?" msgstr "<i>%s</i> zerrenda ezabatzera zoaz.\n" #: ../quodlibet/browsers/playlists.py:110 msgid "" "All information about the selected playlist will be deleted and can not be " "restored." msgstr "" "Aukeratutako zerrendari buruzko informazio guztia ezabatzera doa eta\n" "ezin da berreskuratu izango." #: ../quodlibet/browsers/playlists.py:123 #, python-format msgid "Are you sure you want to remove %d duplicate song?" msgid_plural "Are you sure you want to remove %d duplicate songs?" msgstr[0] "" msgstr[1] "" #: ../quodlibet/browsers/playlists.py:126 #, python-format msgid "The duplicate songs will be removed from the playlist '%s'." msgstr "Kanta bikoiztuak '%s' zerrendatik ezabatuko dira." #: ../quodlibet/browsers/playlists.py:140 #: ../quodlibet/browsers/playlists.py:430 ../quodlibet/util/collection.py:400 msgid "New Playlist" msgstr "Sortu erreprodukzio-zerrenda" #: ../quodlibet/browsers/playlists.py:141 msgid "Enter a name for the new playlist:" msgstr "Idatzi erreprodukzio-zerrenda berriaren izena:" #: ../quodlibet/browsers/playlists.py:148 msgid "_New Playlist" msgstr "_Sortu erreprodukzio-zerrenda" #: ../quodlibet/browsers/playlists.py:172 #: ../quodlibet/qltk/exfalsowindow.py:203 ../quodlibet/qltk/properties.py:135 #: ../quodlibet/util/collection.py:422 #, python-format msgid "%(title)s and %(count)d more" msgid_plural "%(title)s and %(count)d more" msgstr[0] "%(title)s eta %(count)d gehiago" msgstr[1] "%(title)s eta %(count)d gehiago" #: ../quodlibet/browsers/playlists.py:193 msgid "Playlists" msgstr "Erreprodukzio-zerrendak" #: ../quodlibet/browsers/playlists.py:194 msgid "_Playlists" msgstr "_Erreprodukzio-zerrendak" #: ../quodlibet/browsers/playlists.py:269 msgid "_Remove from Playlist" msgstr "_Kendu erreprodukzio-zerrendatik" #: ../quodlibet/browsers/playlists.py:306 msgid "_Import" msgstr "_Inporatu" #: ../quodlibet/browsers/playlists.py:452 #: ../quodlibet/browsers/playlists.py:590 msgid "Unable to import playlist" msgstr "Ezin da erreprodukzio-zerrenda inportatu" #: ../quodlibet/browsers/playlists.py:453 #: ../quodlibet/browsers/playlists.py:591 msgid "Quod Libet can only import playlists in the M3U and PLS formats." msgstr "" "Quod Libet M3U eta PLS formatuko erreprodukzio-zerrendak bakarrik " "inportatzeko gai da." #: ../quodlibet/browsers/playlists.py:504 msgid "Remove Duplicates" msgstr "Bikoiztuak ezabatu" #: ../quodlibet/browsers/playlists.py:514 ../quodlibet/qltk/playorder.py:131 msgid "_Shuffle" msgstr "_Ausaz" #: ../quodlibet/browsers/playlists.py:570 msgid "Unable to rename playlist" msgstr "Ezin da erreprodukzio-zerrenda berrizendatu" #: ../quodlibet/browsers/playlists.py:579 msgid "Import Playlist" msgstr "Inportatu erreprodukzio-zerrenda" #: ../quodlibet/browsers/search.py:35 msgid "Disable Browser" msgstr "Desgaitu nabigatzailea" #: ../quodlibet/browsers/search.py:36 msgid "_Disable Browser" msgstr "_Desgaitu nabigatzailea" #: ../quodlibet/browsers/search.py:120 msgid "Search Library" msgstr "Bilatu liburutegia" #: ../quodlibet/browsers/search.py:121 msgid "_Search Library" msgstr "_Bilatu liburutegia" #: ../quodlibet/browsers/search.py:132 msgid "_Limit Results" msgstr "_Emaitza muga" #: ../quodlibet/devices/_base.py:59 msgid "Unknown Device" msgstr "Gailu ezezaguna" #: ../quodlibet/devices/__init__.py:19 #, fuzzy, python-format msgid "Could not import %s, which is needed for device support." msgstr "Ezin da dbus-python inportatu, beharrezkoa da gailu euskarriarentzat." #: ../quodlibet/devices/__init__.py:140 #, python-format msgid "%r is not a supported device." msgstr "%r ez da onartzen den gailu bat." #: ../quodlibet/devices/__init__.py:206 #, fuzzy, python-format msgid "%s: Could not find 'libudev'." msgstr "%s: Ezin da media-player-info aurkitu." #: ../quodlibet/devices/__init__.py:212 #, fuzzy, python-format msgid "%s: Could not find %s." msgstr "%s: Ezin da media-player-info aurkitu." #: ../quodlibet/devices/__init__.py:401 msgid "Initializing device backend." msgstr "Gailu azpiegitura abiarazten." #: ../quodlibet/devices/__init__.py:402 #, python-format msgid "Trying '%s'" msgstr "'%s' saiatzen" #: ../quodlibet/devices/__init__.py:421 msgid "Couldn't connect to a device backend." msgstr "Ezin da gailu azpiegiturarekin konektatu." #: ../quodlibet/devices/__init__.py:423 msgid "Device backend initialized." msgstr "Gailu azpiegitura abiarazia." #: ../quodlibet/devices/ipod.py:111 msgid "_Volume Gain (dB):" msgstr "_Bolumen irabazia (dB):" #: ../quodlibet/devices/ipod.py:114 ../quodlibet/devices/storage.py:58 msgid "Copy _album covers" msgstr "Kopiatu _album karatulak" #: ../quodlibet/devices/ipod.py:115 msgid "Combine tags with _multiple values" msgstr "Nahasi etiketak balio a_nitzekin" #. Column preferences #: ../quodlibet/devices/ipod.py:116 ../quodlibet/qltk/prefs.py:109 msgid "Title includes _version" msgstr "Izenburuak bertsioa barneratzen du" #: ../quodlibet/devices/ipod.py:117 ../quodlibet/qltk/prefs.py:113 msgid "Album includes _disc subtitle" msgstr "Albumak _disko azpititulua barneratzen du" #: ../quodlibet/devices/ipod.py:128 msgid "Model:" msgstr "Modeloa:" #: ../quodlibet/devices/ipod.py:130 msgid "Capacity:" msgstr "Kapazitatea:" #: ../quodlibet/devices/ipod.py:132 msgid "Firmware:" msgstr "Firmwarea:" #: ../quodlibet/devices/ipod.py:181 msgid "Removing orphaned iPod track" msgstr "iPod pista umezurtzak kentzen" #: ../quodlibet/devices/ipod.py:291 msgid "Unable to save iPod database" msgstr "Ezin da iPod datu-basea gorde" #: ../quodlibet/devices/ipod.py:304 msgid "Uninitialized iPod" msgstr "Hasieratu-gabeko iPoda" #: ../quodlibet/devices/ipod.py:305 msgid "Do you want to create an empty database on this iPod?" msgstr "Data-base huts bat sortu nahi al duzu iPod honentzat?" #: ../quodlibet/devices/ipod.py:433 #, fuzzy msgid "Could not find libgpod, iPod support disabled." msgstr "Ezin da python-gpod inporatu, iPod euskarria desgaitua." #: ../quodlibet/devices/storage.py:54 msgid "_Filename Pattern:" msgstr "_Fixategi-izen patroia:" #: ../quodlibet/devices/storage.py:62 msgid "_Remove unused covers and directories" msgstr "_Kendu erabili gabeko karatula eta direktorioak" #: ../quodlibet/devices/storage.py:96 msgid "File exists" msgstr "Fitxategia badago" #: ../quodlibet/devices/storage.py:97 #, python-format msgid "Overwrite <b>%s</b>?" msgstr "Gainidatzi <b>%s</b>?" #: ../quodlibet/formats/_audio.py:780 #, python-format msgid "Failed reading album art \"%s\"" msgstr "Album arte-lan \"%s\" irakurteak huts egin du" #: ../quodlibet/formats/__init__.py:77 #, python-format msgid "Error loading %r" msgstr "Errorea %r kargatzean" #: ../quodlibet/library/libraries.py:618 ../quodlibet/library/libraries.py:628 #: ../quodlibet/library/libraries.py:669 ../quodlibet/qltk/information.py:276 #: ../quodlibet/qltk/prefs.py:485 ../quodlibet/util/library.py:49 msgid "Library" msgstr "Liburutegia" #: ../quodlibet/library/libraries.py:618 msgid "Checking mount points" msgstr "Muntatze puntuak arakatzen" #: ../quodlibet/library/libraries.py:628 msgid "Scanning library" msgstr "Liburutegia arakatzen" #: ../quodlibet/library/libraries.py:668 #, python-format msgid "Scanning %s" msgstr "%s arakatzen" #: ../quodlibet/player/gstbe.py:59 msgid "" "The GStreamer output pipeline used for playback, such as 'alsasink " "device=default'. Leave blank for default pipeline." msgstr "" "Erreprodukziorako erabiltzen den GStreamer kanalizazio 'alsasink " "device=default' gisakoa. Zurian utzi lehenetsitako kanalizaziorako." #: ../quodlibet/player/gstbe.py:68 msgid "_Output pipeline:" msgstr "_Irteera kanalizazioa:" #: ../quodlibet/player/gstbe.py:75 #, fuzzy, python-format msgid "%.1f seconds" msgstr "segundo %d" #: ../quodlibet/player/gstbe.py:90 msgid "_Buffer duration:" msgstr "_Buferren iraupena:" #: ../quodlibet/player/gstbe.py:332 #, python-format msgid "" "No GStreamer element found to handle the following media format: " "%(format_details)r" msgstr "" #: ../quodlibet/player/gstbe.py:413 msgid "Stream" msgstr "Stream" #: ../quodlibet/player/gstbe.py:413 msgid "Buffering" msgstr "Buffering" #. Backend error; show message and halt playback #: ../quodlibet/player/gstbe.py:473 msgid "Output Error" msgstr "Irteera erroreak" #: ../quodlibet/player/gstbe.py:474 msgid "" "GStreamer output pipeline could not be initialized. The pipeline might be " "invalid, or the device may be in use. Check the player preferences." msgstr "" "Ezin izan da GStreamer irteera kanalizazioa abiatu.Kanalizazioa baliogaea " "izanda daiteke edo gailua erabilita egon. Aztertu erreproduzigailu ezarpenak." #: ../quodlibet/player/gstbe.py:661 msgid "Unable to open input files" msgstr "Ezin dira sarrera fitxategiak ireki" #: ../quodlibet/player/gstbe.py:662 msgid "" "GStreamer has no element to handle reading files. Check your GStreamer " "installation settings." msgstr "" "Gstreamer-ek ez du irakurritako fitxategiak kudeatzeko elementurik. Aztertu " "zure Gstreamer instalazio ezarpenak." #: ../quodlibet/player/_gstutils.py:67 msgid "Invalid GStreamer output pipeline, trying default." msgstr "GStreamer irteera kanalizazio baliogabea, lehenetsia saiatzen." #: ../quodlibet/player/_gstutils.py:85 msgid "Could not create default GStreamer pipeline." msgstr "Ezin da berezko GStreamer pipeline-a sortu." #: ../quodlibet/player/__init__.py:29 msgid "Invalid audio backend" msgstr "Audio azpiegitura baliogabea" #: ../quodlibet/player/__init__.py:30 #, python-format msgid "The audio backend %r is not installed." msgstr "%r audio azpiegitura ez dago instalaturik." #: ../quodlibet/player/xinebe.py:64 msgid "Unable to create audio output" msgstr "Ezin da audio irteera sortu" #: ../quodlibet/player/xinebe.py:65 #, python-format msgid "" "The audio device %r was not found. Check your Xine settings in ~/.quodlibet/" "config." msgstr "" "Ez da %r audio gailua aurkitu. Aztertu zure Xine ezarpenak ~/.quodlibet/" "config-en." #: ../quodlibet.py:29 msgid "Quod Libet is already running." msgstr "Quod Libet martxan dago." #: ../quodlibet.py:215 msgid "No song is currently playing." msgstr "Ez dago abestirik erreproduzitzen." #: ../quodlibet.py:259 msgid "Quod Libet is not running." msgstr "Quod Libet ez dago martxan." #: ../quodlibet.py:270 #, python-format msgid "Unable to write to %s. Removing it." msgstr "Ezin da %s-en idatzi. Ezabatzen." #: ../quodlibet.py:296 msgid "a music library and player" msgstr "musika liburutegi eta erreproduzigailua" #: ../quodlibet.py:297 #, fuzzy msgid "[option]" msgstr "[aukerak]" #: ../quodlibet.py:299 msgid "Print the playing song and exit" msgstr "Erreproduzitzen den abestia inprimatu eta irten" #: ../quodlibet.py:300 msgid "Begin playing immediately" msgstr "Segituan erreproduzitzen hasiko da" #: ../quodlibet.py:303 msgid "Jump to next song" msgstr "Salto hurrengo abestira" #: ../quodlibet.py:305 msgid "Jump to previous song or restart if near the beginning" msgstr "Salto aurreko abestira, edota, hasieratik gertu balego, berrabiatu" #: ../quodlibet.py:306 msgid "Jump to previous song" msgstr "Salto aurreko abestira" #: ../quodlibet.py:307 msgid "Start playback" msgstr "Hasi erreproduzitzen" #: ../quodlibet.py:308 msgid "Pause playback" msgstr "Gelditu erreproduzitzeaz" #: ../quodlibet.py:309 msgid "Toggle play/pause mode" msgstr "Txandakatu erreproduzitu/gelditu modua" #: ../quodlibet.py:310 #, fuzzy msgid "Stop playback" msgstr "Hasi erreproduzitzen" #: ../quodlibet.py:311 msgid "Turn up volume" msgstr "Igo bolumena" #: ../quodlibet.py:312 msgid "Turn down volume" msgstr "Beheratu bolumena" #: ../quodlibet.py:313 msgid "Print player status" msgstr "Inprimatu erreproduzigailu egoera" #: ../quodlibet.py:314 msgid "Hide main window" msgstr "Ezkutatu leiho nagusia" #: ../quodlibet.py:315 msgid "Show main window" msgstr "Ikusi leiho nagusia" #: ../quodlibet.py:316 msgid "Toggle main window visibility" msgstr "Txandakatu leiho nagusi ikusgarritasuna" #: ../quodlibet.py:317 msgid "Focus the running player" msgstr "Fokoa ipini erreproduzigailua martxan" #: ../quodlibet.py:318 msgid "Remove active browser filters" msgstr "Kendu nabigatzaile filtroak" #: ../quodlibet.py:319 msgid "Refresh and rescan library" msgstr "Freskatu eta liburutegia berrarakatu" #: ../quodlibet.py:320 msgid "Print the current playlist" msgstr "Inprimatu uneko erreprodukzio-zerrenda" #: ../quodlibet.py:321 msgid "Print the contents of the queue" msgstr "Inprimatu ilararen edukiak" #: ../quodlibet.py:322 msgid "Start without plugins" msgstr "Hasi pluginik gabe" #: ../quodlibet.py:323 msgid "Exit Quod Libet" msgstr "Itxi Qoud Libet" #: ../quodlibet.py:328 msgid "Seek within the playing song" msgstr "Bilatu jotzen ari den anestian" #: ../quodlibet.py:328 msgid "[+|-][HH:]MM:SS" msgstr "[+|-][HH:]MM:SS" #: ../quodlibet.py:329 msgid "Set or toggle the playback order" msgstr "Ezarri edo txandakatu erreprodukzio ordena" #: ../quodlibet.py:331 msgid "Turn repeat off, on, or toggle it" msgstr "Errepikapenak gaitu, desgaitu edo txanda" #: ../quodlibet.py:332 msgid "Set the volume" msgstr "Ezarri bolumena" #: ../quodlibet.py:333 msgid "Search your audio library" msgstr "Bilatu audio liburutegian" #: ../quodlibet.py:333 ../quodlibet.py:343 ../quodlibet.py:347 #: ../quodlibet.py:349 msgid "query" msgstr "bilaketa" #: ../quodlibet.py:334 msgid "Play a file" msgstr "Erreproduzitu fitxategi bat" #: ../quodlibet.py:334 ../quodlibet.py:343 ../quodlibet.py:349 msgid "command|filename" msgstr "komandoa|fixtategi-izena" #: ../quodlibet.py:335 msgid "Rate the playing song" msgstr "Baloratu erreproduzitutako abestia" #: ../quodlibet.py:336 msgid "Set the current browser" msgstr "Ezarri nabigatzailea" #: ../quodlibet.py:337 msgid "Open a new browser" msgstr "Ireki nabigatzaile berri bat" #: ../quodlibet.py:338 msgid "Show or hide the queue" msgstr "Erakutsi edo ezkutatu ilara" #: ../quodlibet.py:339 msgid "Show or hide the main song list" msgstr "Erakutsi edo ezkutatu kanten zerrenda nagusia" #: ../quodlibet.py:340 msgid "Filter on a random value" msgstr "Iragazi ausazko balio batez" #: ../quodlibet.py:340 msgid "command|tag" msgstr "komandoa|etiketa" #: ../quodlibet.py:341 msgid "Filter on a tag value" msgstr "Iragazi etiketa balio batez" #: ../quodlibet.py:341 msgid "tag=value" msgstr "etiketa=balioa" #: ../quodlibet.py:342 msgid "Enqueue a file or query" msgstr "Ilaran ipini fitxategi bat edo bilatu" #: ../quodlibet.py:344 msgid "Enqueue comma-separated files" msgstr "Ilaran ipini komaz bereiztutako fitxategiak" #: ../quodlibet.py:345 ../quodlibet/util/tags.py:98 msgid "filename" msgstr "fitxategi-izena" #: ../quodlibet.py:346 msgid "Print filenames of results of query to stdout" msgstr "Erakutsi bilaketaren emaitzen izenak" #: ../quodlibet.py:348 msgid "Unqueue a file or query" msgstr "Ilaratik kendu fitxategi bat edo bilatu" #: ../quodlibet.py:398 #, python-format msgid "Invalid argument for '%s'." msgstr "Argumentu baliogabea '%s'-rentzat." #: ../quodlibet.py:399 ../quodlibet/util/__init__.py:194 #, python-format msgid "Try %s --help." msgstr "Saiatu %s --help." #: ../quodlibet/qltk/about.py:32 #, python-format msgid "Supported formats: %s" msgstr "Onartutako formatuak: %s" #: ../quodlibet/qltk/about.py:35 #, python-format msgid "Audio device: %s" msgstr "Audio gailua: %s" #. Translators: Refers to the beginning of the playing song. #: ../quodlibet/qltk/bookmarks.py:23 msgid "Beginning" msgstr "Hasten" #: ../quodlibet/qltk/bookmarks.py:34 ../quodlibet/qltk/bookmarks.py:73 msgid "N/A" msgstr "E/G" #: ../quodlibet/qltk/bookmarks.py:78 msgid "Time" msgstr "Denbora" #: ../quodlibet/qltk/bookmarks.py:84 ../quodlibet/qltk/bookmarks.py:119 msgid "Bookmark Name" msgstr "Laster-marka izena" #: ../quodlibet/qltk/bookmarks.py:117 msgid "MM:SS" msgstr "MM:SS" #: ../quodlibet/qltk/bookmarks.py:201 ../quodlibet/qltk/information.py:100 msgid "Bookmarks" msgstr "Laster-markak" #: ../quodlibet/qltk/browser.py:49 ../quodlibet/qltk/notif.py:286 #: ../quodlibet/util/__init__.py:335 msgid "No time information" msgstr "Ez dago denbora informaziorik" #: ../quodlibet/qltk/cbes.py:45 ../quodlibet/qltk/edittags.py:268 msgid "_Value:" msgstr "_Balioa:" #: ../quodlibet/qltk/cbes.py:249 msgid "Saved Values" msgstr "Gordetako balioak" #: ../quodlibet/qltk/cbes.py:250 msgid "Edit saved values..." msgstr "Editatu gordetako balioak..." #: ../quodlibet/qltk/chooser.py:44 ../quodlibet/qltk/filesel.py:335 msgid "Songs" msgstr "Abestiak" #: ../quodlibet/qltk/controls.py:79 msgid "Display remaining time" msgstr "Bistarazi faltako denbora" #: ../quodlibet/qltk/controls.py:85 msgid "_Edit Bookmarks..." msgstr "_Editatu laster-markak..." #: ../quodlibet/qltk/controls.py:232 msgid "Auto_matic" msgstr "Automati_koa" #: ../quodlibet/qltk/controls.py:233 #, fuzzy msgid "_Track Mode" msgstr "Pis_ta goiburuak" #: ../quodlibet/qltk/controls.py:234 #, fuzzy msgid "_Album Mode" msgstr "_Album goiburuak" #: ../quodlibet/qltk/controls.py:277 msgid "Stop after this song" msgstr "Gelditu kanta honen ondoren" #: ../quodlibet/qltk/data_editors.py:338 #, fuzzy msgid "Enter new value" msgstr "Iragazi etiketa balio batez" #: ../quodlibet/qltk/debugwindow.py:69 msgid "Error Occurred" msgstr "Errore bat gertatu da" #: ../quodlibet/qltk/debugwindow.py:71 #, python-format msgid "" "An exception has occured in Quod Libet. A dump file has been saved to <b >" "%s</b> that will help us debug the crash. Please file a new issue at http://" "code.google.com/p/quodlibet/issues /list and attach this file or include its " "contents. This file may contain some identifying information about you or " "your system, such as a list of recent files played. If this is unacceptable, " "send <b>%s</b> instead with a description of what you were doing." msgstr "" "Salbuespen bat gertatu da Quod Libet-en. Iraulketa fitxategi bat gorde da <b>" "%s</b>-en zuri kraskatzea arazten laguntzeko. Mesedez ireki programa- errore " "txostena at http://code.google.com/p/quodlibet/issues/list gunean eta " "erantsi fitxategia edo bertako edukia. Fitxategi honek zure sistema " "ezagutagarri egin dezakeen informazioa izan dezake, azken erreproduzitutako " "abestiak adibidez. Hau onartezina bada bidali <b>%s</b> zer egiten ari zinen " "azalpenarekin.." #: ../quodlibet/qltk/debugwindow.py:80 msgid "" "Quod Libet may now be unstable. Closing it and restarting is recommended. " "Your library will be saved." msgstr "" "QuodLibet ezegonkor egon liteke. Itxi eta berriz irekitzea gomendatzen da. \n" "Bilduma gordea izango da." #: ../quodlibet/qltk/delete.py:24 msgid "Delete Files" msgstr "Ezabatu fitxategiak" #: ../quodlibet/qltk/delete.py:33 msgid "_Move to Trash" msgstr "_Mugitu zakarrontzira" #: ../quodlibet/qltk/delete.py:52 msgid "Permanently delete this file?" msgstr "Betirako ezabatu fitxategi hau?" #: ../quodlibet/qltk/delete.py:54 msgid "Permanently delete these files?" msgstr "Betirako ezabatu fitxategi hauek?" #: ../quodlibet/qltk/delete.py:59 #, python-format msgid "%(title)s and %(count)d more..." msgid_plural "%(title)s and %(count)d more..." msgstr[0] "%(title)s eta %(count)d gehiago..." msgstr[1] "%(title)s eta %(count)d gehiago..." #: ../quodlibet/qltk/delete.py:90 #, python-format msgid "Moving %(current)d/%(total)d." msgstr "Mugitzen: %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:92 #, python-format msgid "Deleting %(current)d/%(total)d." msgstr "Ezabatzen: %(current)d/%(total)d." #: ../quodlibet/qltk/delete.py:105 #, fuzzy msgid "Unable to move to trash" msgstr "Ezin da iPod datu-basea gorde" #: ../quodlibet/qltk/delete.py:106 #, fuzzy, python-format msgid "Moving <b>%s</b> to the trash failed." msgstr "<b>%s</b> ebazteak huts egin du." #: ../quodlibet/qltk/delete.py:123 msgid "Unable to delete file" msgstr "Ezin da fitxategia ezabatu" #: ../quodlibet/qltk/delete.py:124 #, python-format msgid "Deleting <b>%s</b> failed." msgstr "Huts <b>%s</b> ezabatzean." #: ../quodlibet/qltk/downloader.py:33 msgid "Downloads" msgstr "Deskargak" #: ../quodlibet/qltk/downloader.py:47 msgid "Filename" msgstr "Fitxategi-izena" #: ../quodlibet/qltk/downloader.py:57 msgid "Size" msgstr "Tamaina" #: ../quodlibet/qltk/downloader.py:62 msgid "Queued" msgstr "Ilaran" #: ../quodlibet/qltk/_editpane.py:82 msgid "Path Patterns" msgstr "Bide patroiak" #: ../quodlibet/qltk/_editpane.py:83 #, fuzzy msgid "Edit saved patterns..." msgstr "Editatu gordetako balioak..." #: ../quodlibet/qltk/_editpane.py:85 ../quodlibet/qltk/tracknumbers.py:44 msgid "_Preview" msgstr "_Aurreikusi" #: ../quodlibet/qltk/_editpane.py:107 msgid "_More options..." msgstr "_Aukera gehiago..." #: ../quodlibet/qltk/edittags.py:42 ../quodlibet/qltk/edittags.py:53 #, python-format msgid "missing from %d song" msgid_plural "missing from %d songs" msgstr[0] "abesti %d-etan falta da" msgstr[1] "%d absetitan falta da" #: ../quodlibet/qltk/edittags.py:46 ../quodlibet/qltk/edittags.py:50 #, python-format msgid "different across %d song" msgid_plural "different across %d songs" msgstr[0] "desberdina kanta %d-etan" msgstr[1] "desberdina %d kantetan" #: ../quodlibet/qltk/edittags.py:146 msgid "Split into _Multiple Values" msgstr "Zatitu _hainbat baliotan" #: ../quodlibet/qltk/edittags.py:166 msgid "Split Disc out of _Album" msgstr "Atera diskoa _albumetik" #: ../quodlibet/qltk/edittags.py:183 msgid "Split _Version out of Title" msgstr "Atera _bertsioa izenburutik" #: ../quodlibet/qltk/edittags.py:218 msgid "Split Arranger out of Ar_tist" msgstr "Atera moldatzailea ar_tistatik" #: ../quodlibet/qltk/edittags.py:223 msgid "Split _Performer out of Artist" msgstr "Atera _interpretea atistatik" #: ../quodlibet/qltk/edittags.py:229 #, fuzzy msgid "Split _Performer out of Title" msgstr "Atera _interpretea atistatik" #: ../quodlibet/qltk/edittags.py:235 #, fuzzy msgid "Split _Originalartist out of Title" msgstr "Atera _bertsioa izenburutik" #: ../quodlibet/qltk/edittags.py:242 msgid "Add a Tag" msgstr "Gehitu etiketa bat" #: ../quodlibet/qltk/edittags.py:259 msgid "_Tag:" msgstr "E_tiketa:" #. Translators: translate only to override the text #. for the tag "save" button #: ../quodlibet/qltk/edittags.py:365 msgid "ql-save" msgstr "Gorde" #. Translators: translate only to override the for the tag "revert" button #: ../quodlibet/qltk/edittags.py:367 #, fuzzy msgid "ql-revert" msgstr "E_zabatu bilduma" #: ../quodlibet/qltk/edittags.py:376 msgid "Edit Tags" msgstr "Editatu etiketak" #: ../quodlibet/qltk/edittags.py:383 msgid "Write" msgstr "Idatzi" #: ../quodlibet/qltk/edittags.py:600 msgid "Unable to add tag" msgstr "Ezin da etiketa gehitu" #: ../quodlibet/qltk/edittags.py:601 #, python-format msgid "" "Unable to add <b>%s</b>\n" "\n" "The files currently selected do not support multiple values." msgstr "" "Ezin da <b>%s</b> gehitu\n" "\n" "Unean hautatutako fitxategiak ez ditu balio anitz onartzen." #. Can't remove the old tag. #. Can't add the new tag. #: ../quodlibet/qltk/edittags.py:626 ../quodlibet/qltk/edittags.py:782 #: ../quodlibet/qltk/edittags.py:789 ../quodlibet/qltk/tagsfrompath.py:173 #: ../quodlibet/util/__init__.py:634 ../quodlibet/util/tags.py:131 msgid "Invalid tag" msgstr "Okerreko etiketa" #: ../quodlibet/qltk/edittags.py:627 ../quodlibet/qltk/edittags.py:783 #: ../quodlibet/qltk/edittags.py:790 ../quodlibet/qltk/tagsfrompath.py:174 #, python-format msgid "" "Invalid tag <b>%s</b>\n" "\n" "The files currently selected do not support editing this tag." msgstr "" "<b>%s</b> okerreko etiketa\n" "\n" "Unean hautatutako fitxategiak ez du ha editatzea onartzen." #: ../quodlibet/qltk/edittags.py:678 ../quodlibet/qltk/tagsfrompath.py:236 #: ../quodlibet/qltk/tracknumbers.py:116 msgid "Tag may not be accurate" msgstr "Etiketa ez zehatza izatea liteke" #: ../quodlibet/qltk/edittags.py:679 ../quodlibet/qltk/tagsfrompath.py:237 #: ../quodlibet/qltk/tracknumbers.py:117 #, python-format msgid "" "<b>%s</b> changed while the program was running. Saving without refreshing " "your library may overwrite other changes to the song.\n" "\n" "Save this song anyway?" msgstr "" "<b>%s</b> aldatu egin da programa martxan zegoela. Liburutegia freskatu gabe " "gordetzeak abestiaren beste aldaketa batzuk gainidatzi ditzake.\n" "\n" "Gorde abesti hau hala ere?" #: ../quodlibet/qltk/edittags.py:737 ../quodlibet/qltk/tracknumbers.py:130 msgid "Unable to save song" msgstr "Ezin da abestia gorde" #: ../quodlibet/qltk/edittags.py:738 ../quodlibet/qltk/tagsfrompath.py:263 #: ../quodlibet/qltk/tracknumbers.py:131 ../quodlibet/util/songwrapper.py:97 #, python-format msgid "" "Saving <b>%s</b> failed. The file may be read-only, corrupted, or you do not " "have permission to edit it." msgstr "" "Huts <b>%s</b> gordetzean. Fitxategia irakurketa soilekoa izan daiteke, " "hondaturik egon edo zuk berau editatzeko baimenik ez izatea izan liteke." #: ../quodlibet/qltk/edittags.py:762 ../quodlibet/qltk/edittags.py:800 msgid "Invalid value" msgstr "Okerreko balioa" #: ../quodlibet/qltk/edittags.py:763 ../quodlibet/qltk/edittags.py:801 #, python-format msgid "" "Invalid value: <b>%(value)s</b>\n" "\n" "%(error)s" msgstr "" "Okerreko balioa: <b>%(value)s</b>\n" "\n" "%(error)s" #: ../quodlibet/qltk/exfalsowindow.py:78 #: ../quodlibet/qltk/quodlibetwindow.py:450 ../quodlibet/qltk/songsmenu.py:196 msgid "_Plugins" msgstr "_Pluginak" #: ../quodlibet/qltk/exfalsowindow.py:179 ../quodlibet/qltk/information.py:543 #: ../quodlibet/util/collection.py:573 ../quodlibet/util/collection.py:599 #, python-format msgid "%d song" msgid_plural "%d songs" msgstr[0] "kanta %d" msgstr[1] "%d kanta" #: ../quodlibet/qltk/exfalsowindow.py:216 msgid "Ex Falso Preferences" msgstr "Ex Falso hobespenak" #: ../quodlibet/qltk/exfalsowindow.py:226 ../quodlibet/qltk/prefs.py:413 msgid "Split _on:" msgstr "Zati_tu:" #: ../quodlibet/qltk/exfalsowindow.py:232 ../quodlibet/qltk/prefs.py:399 msgid "Show _programmatic tags" msgstr "Ikusi etiketa _programatikoak" #: ../quodlibet/qltk/exfalsowindow.py:236 ../quodlibet/qltk/prefs.py:460 msgid "Tag Editing" msgstr "Etiketa editatzea" #: ../quodlibet/qltk/filesel.py:55 msgid "Folders" msgstr "Karpetak" #: ../quodlibet/qltk/filesel.py:137 msgid "_New Folder..." msgstr "_Sortu karpeta..." #: ../quodlibet/qltk/filesel.py:146 msgid "_Select All Subfolders" msgstr "__Hautatu azpikarpeta guztiak" #: ../quodlibet/qltk/filesel.py:209 msgid "New Folder" msgstr "Sortu karpeta" #: ../quodlibet/qltk/filesel.py:209 msgid "Enter a name for the new folder:" msgstr "Idatzi izen bat karpeta berriarentzat:" #: ../quodlibet/qltk/filesel.py:219 msgid "Unable to create folder" msgstr "Ezinda karpeta sortu" #: ../quodlibet/qltk/filesel.py:234 msgid "Unable to delete folder" msgstr "Ezin da karpeta ezabatu" #. Translators: As in "by Artist Name" #: ../quodlibet/qltk/info.py:37 #, python-format msgid "by %s" msgstr "%s -ez" #: ../quodlibet/qltk/info.py:38 ../quodlibet/qltk/information.py:147 #: ../quodlibet/qltk/information.py:443 #, python-format msgid "Disc %s" msgstr "%s diskoa" #: ../quodlibet/qltk/info.py:39 ../quodlibet/qltk/information.py:152 #, python-format msgid "Track %s" msgstr "%s pista" #: ../quodlibet/qltk/info.py:69 ../quodlibet/qltk/songsmenu.py:227 msgid "_Add to Playlist" msgstr "_Gehitu erreprodukzio-zerrendara" #: ../quodlibet/qltk/info.py:87 msgid "_Edit Display..." msgstr "_Editatu bistaratzea..." #: ../quodlibet/qltk/info.py:95 ../quodlibet/qltk/quodlibetwindow.py:463 #: ../quodlibet/qltk/songsmenu.py:277 msgid "Edit _Tags" msgstr "Editatu etiketak" #: ../quodlibet/qltk/info.py:136 msgid "Not playing" msgstr "Ez da erreproduzitzen" #: ../quodlibet/qltk/information.py:61 msgid "_Clear Errors" msgstr "_Garbitu errorea" #: ../quodlibet/qltk/information.py:77 msgid "No songs are selected." msgstr "Ez da abestirik hautatu." #: ../quodlibet/qltk/information.py:78 msgid "No Songs" msgstr "Abestirik ez" #: ../quodlibet/qltk/information.py:92 ../quodlibet/qltk/information.py:322 #: ../quodlibet/qltk/information.py:467 ../quodlibet/qltk/information.py:531 msgid "Information" msgstr "Informazioa" #: ../quodlibet/qltk/information.py:96 msgid "Lyrics" msgstr "Hitzak" #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/qltk/information.py:106 ../quodlibet/util/dprint.py:197 msgid "Errors" msgstr "Erroreak" #: ../quodlibet/qltk/information.py:181 ../quodlibet/qltk/information.py:412 #: ../quodlibet/util/tags.py:30 msgid "artist" msgstr "artista" #: ../quodlibet/qltk/information.py:183 ../quodlibet/qltk/information.py:414 #: ../quodlibet/qltk/information.py:563 ../quodlibet/util/tags.py:169 msgid "artists" msgstr "artistak" #: ../quodlibet/qltk/information.py:231 ../quodlibet/qltk/information.py:422 #: ../quodlibet/util/tags.py:108 msgid "performers" msgstr "interpreteak" #: ../quodlibet/qltk/information.py:241 ../quodlibet/qltk/information.py:256 #: ../quodlibet/qltk/songlist.py:188 msgid "Never" msgstr "Inoiz" #: ../quodlibet/qltk/information.py:243 #, python-format msgid "%(n)d time" msgid_plural "%(n)d times" msgstr[0] "%(n)d-etan" msgstr[1] "%(n)d aldiz" #: ../quodlibet/qltk/information.py:263 ../quodlibet/util/tags.py:90 msgid "added" msgstr "gehiturik" #: ../quodlibet/qltk/information.py:264 ../quodlibet/util/tags.py:91 msgid "last played" msgstr "azken erreproduzitua" #: ../quodlibet/qltk/information.py:265 ../quodlibet/util/tags.py:101 msgid "plays" msgstr "erreproduzitzen" #: ../quodlibet/qltk/information.py:266 ../quodlibet/util/tags.py:102 msgid "skips" msgstr "salto" #: ../quodlibet/qltk/information.py:267 ../quodlibet/util/tags.py:109 msgid "rating" msgstr "balorazioa" #: ../quodlibet/qltk/information.py:293 #, python-format msgid "%d kbps" msgstr "%d kbps" #: ../quodlibet/qltk/information.py:300 ../quodlibet/util/tags.py:106 msgid "length" msgstr "iraupena" #: ../quodlibet/qltk/information.py:301 ../quodlibet/util/tags.py:114 msgid "file size" msgstr "fitxategi tamaina" #: ../quodlibet/qltk/information.py:302 ../quodlibet/util/tags.py:100 msgid "modified" msgstr "eraldatua" #: ../quodlibet/qltk/information.py:304 ../quodlibet/util/tags.py:113 msgid "bitrate" msgstr "bit-tasa" #: ../quodlibet/qltk/information.py:315 ../quodlibet/qltk/properties.py:67 #: ../quodlibet/qltk/renamefiles.py:99 ../quodlibet/qltk/tagsfrompath.py:190 #: ../quodlibet/qltk/tracknumbers.py:56 msgid "File" msgstr "Fitxategia" #: ../quodlibet/qltk/information.py:370 #, python-format msgid "%d selected" msgid_plural "%d selected" msgstr[0] "%d hautatua" msgstr[1] "%d hautatuak" #: ../quodlibet/qltk/information.py:383 #, python-format msgid "Produced by %s" msgstr "%s-ek sortua" #: ../quodlibet/qltk/information.py:420 ../quodlibet/util/tags.py:46 msgid "performer" msgstr "interpretea" #: ../quodlibet/qltk/information.py:453 msgid "Track unavailable" msgstr "Pista erabilezina" #: ../quodlibet/qltk/information.py:460 msgid "Track List" msgstr "Pista zerrenda" #: ../quodlibet/qltk/information.py:503 ../quodlibet/qltk/information.py:579 #, python-format msgid "%d song with no album" msgid_plural "%d songs with no album" msgstr[0] "kanta %d album gabe" msgstr[1] "%d kanta album gabe" #: ../quodlibet/qltk/information.py:507 msgid "Selected Discography" msgstr "Hautatu diskografia" #: ../quodlibet/qltk/information.py:560 #, python-format msgid "%d song with no artist" msgid_plural "%d songs with no artist" msgstr[0] "abesti %d artista gabe" msgstr[1] "%d abesti artista gabe" #: ../quodlibet/qltk/information.py:582 ../quodlibet/util/tags.py:170 msgid "albums" msgstr "album" #: ../quodlibet/qltk/information.py:597 msgid "Total length:" msgstr "Iraupena guztira:" #: ../quodlibet/qltk/information.py:601 msgid "Total size:" msgstr "Tamaina guztira:" #: ../quodlibet/qltk/information.py:604 msgid "Files" msgstr "Fixategiak" #: ../quodlibet/qltk/logging.py:12 msgid "Output Log" msgstr "Erregistro irteera" #: ../quodlibet/qltk/lyrics.py:32 msgid "_Download" msgstr "_Deskargatu" #. buffer.set_text(_("No lyrics found.\n\nYou can click the " #. "Download button to have Quod Libet search " #. "for lyrics online. You can also enter them " #. "yourself and click save.")) #: ../quodlibet/qltk/lyrics.py:67 ../quodlibet/qltk/lyrics.py:106 msgid "No lyrics found for this song." msgstr "Ez da kanta honen letrarik aurkitu." #: ../quodlibet/qltk/lyrics.py:76 msgid "Searching for lyrics..." msgstr "Letrak bilatzen..." #: ../quodlibet/qltk/lyrics.py:98 msgid "Unable to download lyrics." msgstr "Ezin dira letrak deskargatu." #: ../quodlibet/qltk/maskedbox.py:17 #, fuzzy msgid "Are you sure you want to remove all songs?" msgstr "" "%d abestiren balorazioa aldatzera zoaz.\n" "Jarraitu nahi duzu?" #: ../quodlibet/qltk/maskedbox.py:18 #, fuzzy msgid "The selected songs will be removed from the library." msgstr "Kanta bikoiztuak '%s' zerrendatik ezabatuko dira." #: ../quodlibet/qltk/maskedbox.py:40 ../quodlibet/qltk/maskedbox.py:82 msgid "Unhide" msgstr "" #: ../quodlibet/qltk/maskedbox.py:65 #, fuzzy, python-format msgid "%(song_count)d songs" msgstr "%(count)d kate" #: ../quodlibet/qltk/msg.py:55 msgid "Discard tag changes?" msgstr "Baztertu etiketa aldaketak?" #: ../quodlibet/qltk/msg.py:56 msgid "" "Tags have been changed but not saved. Save these files, or revert and " "discard changes?" msgstr "" "Etiketak aldatu egin dira baina ez gorde. Fitxategi hauek gorde edo atzera " "egin eta aldaketa baztertu?" #: ../quodlibet/qltk/notif.py:177 msgid "Active tasks" msgstr "Lan aktiboak" #: ../quodlibet/qltk/notif.py:183 #, python-format msgid "%d tasks running" msgstr "Lan aktiboak: %d" #: ../quodlibet/qltk/playorder.py:18 msgid "_Unknown" msgstr "_Ezezaguna" #: ../quodlibet/qltk/playorder.py:70 msgid "In Order" msgstr "Ordenean" #: ../quodlibet/qltk/playorder.py:71 msgid "_In Order" msgstr "_Ordenean" #: ../quodlibet/qltk/playorder.py:130 msgid "Shuffle" msgstr "Ausaz" #: ../quodlibet/qltk/playorder.py:152 msgid "Weighted" msgstr "Iraupena" #: ../quodlibet/qltk/playorder.py:153 msgid "_Weighted" msgstr "_Iraupena" #: ../quodlibet/qltk/playorder.py:172 msgid "One Song" msgstr "Abesti bat" #: ../quodlibet/qltk/playorder.py:173 msgid "_One Song" msgstr "_Abesti bat" #: ../quodlibet/qltk/pluginwin.py:28 msgid "Plugin Errors" msgstr "Plugin erroreak" #: ../quodlibet/qltk/pluginwin.py:80 #, fuzzy msgid "Plugins" msgstr "_Pluginak" #: ../quodlibet/qltk/pluginwin.py:156 msgid "Show _Errors" msgstr "Ikusi erroreak" #: ../quodlibet/qltk/pluginwin.py:259 #, fuzzy msgid "Version:" msgstr "bertsioa" #: ../quodlibet/qltk/pluginwin.py:345 msgid "Enabled" msgstr "Gaitua" #: ../quodlibet/qltk/pluginwin.py:346 msgid "Disabled" msgstr "Desgaitua" #: ../quodlibet/qltk/pluginwin.py:352 msgid "No category" msgstr "Kategoria gabe" #: ../quodlibet/qltk/pluginwin.py:356 msgid "No plugins found." msgstr "Ez da pluginik aurkitu." #: ../quodlibet/qltk/prefs.py:38 msgid "_Disc" msgstr "_Diskoa" #: ../quodlibet/qltk/prefs.py:39 msgid "_Track" msgstr "_Pista" #: ../quodlibet/qltk/prefs.py:40 #, fuzzy msgid "Grou_ping" msgstr "taldekatzea" #: ../quodlibet/qltk/prefs.py:43 msgid "Al_bum" msgstr "Al_buma" #: ../quodlibet/qltk/prefs.py:48 msgid "_Filename" msgstr "_Fitxategi-izena" #: ../quodlibet/qltk/prefs.py:50 msgid "_Length" msgstr "_Iraupena" #: ../quodlibet/qltk/prefs.py:57 msgid "Song List" msgstr "Abesti zerrenda" #: ../quodlibet/qltk/prefs.py:61 msgid "_Jump to playing song automatically" msgstr "_Salto erreproduzitzen den abestira automatikoki" #: ../quodlibet/qltk/prefs.py:63 msgid "When the playing song changes, scroll to it in the song list" msgstr "" "Erreproduzitzen ari den abestia aldatzean, joan abesti zerrendan uneko " "abestiraino" #: ../quodlibet/qltk/prefs.py:66 msgid "Behavior" msgstr "Portaera" #: ../quodlibet/qltk/prefs.py:90 msgid "_Others:" msgstr "_Besteak:" #. Stock edit doesn't have ellipsis chars. #: ../quodlibet/qltk/prefs.py:95 #, fuzzy msgid "_Edit..." msgstr "_Editatu bistaratzea..." #: ../quodlibet/qltk/prefs.py:97 msgid "Add or remove additional column headers" msgstr "Gehitu edo ezabatu informazio gehigarriko zutabeak" #: ../quodlibet/qltk/prefs.py:105 msgid "Visible Columns" msgstr "Zutabe ikusgarriak" #: ../quodlibet/qltk/prefs.py:111 #, fuzzy msgid "Artist includes all _people" msgstr "Sarezko _bilaketa jendea barneratuz" #: ../quodlibet/qltk/prefs.py:115 msgid "Filename includes _folder" msgstr "Fitxategi-izenak _karpeta barneratzen du" #: ../quodlibet/qltk/prefs.py:138 #, fuzzy msgid "Column Preferences" msgstr "Hobespenak" #: ../quodlibet/qltk/prefs.py:144 msgid "Apply current configuration to song list, adding new columns to the end" msgstr "" "Ezarri oraingo konfigurazioa zerrendari, zutabe berriak bukaeran jarriz" #: ../quodlibet/qltk/prefs.py:198 msgid "Extra Columns" msgstr "Zutabe gehigarriak" #: ../quodlibet/qltk/prefs.py:207 msgid "Browsers" msgstr "Nabigatzaileak" #: ../quodlibet/qltk/prefs.py:212 msgid "_Global filter:" msgstr "Iragazki na_gusia:" #: ../quodlibet/qltk/prefs.py:217 msgid "Apply this query in addition to all others" msgstr "Ezarri bilaketa hau besteei gehituz" #: ../quodlibet/qltk/prefs.py:223 msgid "Search after _typing" msgstr "Bilatu ida_tzi ondoren" #: ../quodlibet/qltk/prefs.py:226 msgid "Show search results after the user stops typing." msgstr "" "Bistarazi bilaketa emaitzak erabiltzaileak tekleatzeari utzi bezain laster." #. Translators: The heading of the preference group, no action #: ../quodlibet/qltk/prefs.py:229 #, fuzzy msgid "heading|Search" msgstr "Bilatu" #: ../quodlibet/qltk/prefs.py:234 msgid "Confirm _multiple ratings" msgstr "Berretsi balorazio a_nitz" #: ../quodlibet/qltk/prefs.py:236 #, fuzzy msgid "" "Ask for confirmation before changing the rating of multiple songs at once" msgstr "Berrespena eskatu abesti anitzen balorazioa batera aldatu aurretik" #: ../quodlibet/qltk/prefs.py:239 msgid "Enable _one-click ratings" msgstr "Gaitu klik-bakarreko balorazioak" #: ../quodlibet/qltk/prefs.py:241 #, fuzzy msgid "Enable rating by clicking on the rating column in the song list" msgstr "Balorazio gaitu abesti zerrendak balorazio zutabea klikatuaz" #: ../quodlibet/qltk/prefs.py:247 ../quodlibet/qltk/prefs.py:463 msgid "Ratings" msgstr "Balorazioak" #: ../quodlibet/qltk/prefs.py:252 msgid "_Use rounded corners on thumbnails" msgstr "_Erabili borobildutako ertzak argazkitxoentzat" #: ../quodlibet/qltk/prefs.py:254 msgid "" "Round the corners of album artwork thumbnail images. May require restart to " "take effect." msgstr "" "Borobildu album arte-lan argazkitxo irudiaren ertzak. Berrabiarazte behar " "dezake eragin izateko." #. Filename choice algorithm config #: ../quodlibet/qltk/prefs.py:259 msgid "Prefer _embedded art" msgstr "Hobetsi album arte lan _txertatuak" #: ../quodlibet/qltk/prefs.py:263 msgid "" "Choose to use artwork embedded in the audio (where available) over other " "sources" msgstr "Aukeratu album arte lan txertatuak hobestea, dagoenean" #: ../quodlibet/qltk/prefs.py:268 msgid "_Force image filename:" msgstr "_Ezarritako irudiaren izena:" #: ../quodlibet/qltk/prefs.py:274 msgid "The album art image file to use when forced" msgstr "Album arte lanaren irudia erabiltzeko, izena ezartzen denean" #: ../quodlibet/qltk/prefs.py:283 #, fuzzy msgid "Album Art" msgstr "Album zerrenda" #: ../quodlibet/qltk/prefs.py:301 #, fuzzy msgid "Playback" msgstr "Gelditu erreproduzitzeaz" #: ../quodlibet/qltk/prefs.py:306 #, fuzzy msgid "Output Configuration" msgstr "Erregistro irteera" #: ../quodlibet/qltk/prefs.py:317 msgid "" "If no Replay Gain information is available for a song, scale the volume by " "this value" msgstr "" "Ez badago erreprodukzio argibiderik kanta batentzat, bidertu bolumena balio " "hau erabiliaz" #: ../quodlibet/qltk/prefs.py:320 #, fuzzy msgid "_Fall-back gain (dB):" msgstr "Lehenetsiriko irabazia (dB):" #: ../quodlibet/qltk/prefs.py:331 msgid "" "Scale volume for all songs by this value, as long as the result will not clip" msgstr "" "Biderkatu abesti guztien bolumena balio honez, beti mozketak sortzen ez " "baditu" #: ../quodlibet/qltk/prefs.py:334 #, fuzzy msgid "_Pre-amp gain (dB):" msgstr "Aurre-amp irabazia (dB):" #: ../quodlibet/qltk/prefs.py:339 msgid "_Enable Replay Gain volume adjustment" msgstr "_Gaitu erreprodukzio irabazte bolumen doitzea" #: ../quodlibet/qltk/prefs.py:364 msgid "Replay Gain Volume Adjustment" msgstr "Erreprodukzio bolumen irabazi doitzea" #: ../quodlibet/qltk/prefs.py:387 #, fuzzy msgid "Tags" msgstr "Editatu etiketak" #: ../quodlibet/qltk/prefs.py:392 #, fuzzy msgid "Auto-save tag changes" msgstr "Baztertu etiketa aldaketak?" #: ../quodlibet/qltk/prefs.py:395 msgid "Save changes to tags without confirmation when editing multiple files" msgstr "" "Gorde aldaketak baiespen indibidualarik eskatu gabe fitxategi asko editatzen " "denean" #: ../quodlibet/qltk/prefs.py:402 msgid "" "Access all tags, including machine-generated ones e.g. MusicBrainz or Replay " "Gain tags" msgstr "" "Atzitu etiketa guztiak, automatikoki sortuak barne: MusicBrainz edo " "ReplayGain, besteak beste" #: ../quodlibet/qltk/prefs.py:411 msgid "" "A list of separators to use when splitting tag values. The list is space-" "separated" msgstr "" "Etiketatik baloreak bereizterakoan erabil daitezkeen bereizle zerrenda " "(komaz bereiztuta)." #: ../quodlibet/qltk/prefs.py:430 msgid "" "Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that albums with few " "tracks will have less extreme ratings. Changing this value triggers a re-" "calculation for all albums." msgstr "" "Erantsitako balorazioa osatzeko Batezbesteko Bayesianaren faktorea (C).\n" "0k ohiko batezbesteko esan nahi du, balore handiagok esan nahi dute \n" "pista gutxiko albumek puntuazio estremo gutxiago izango dutela.\n" "Balore hau aldatutakoan, album guztientzat birkalkulatzea abiaraziko da." #: ../quodlibet/qltk/prefs.py:436 msgid "_Bayesian averaging amount:" msgstr "_Batezbesteko Bayesianaren kopurua:" #: ../quodlibet/qltk/prefs.py:444 msgid "Save ratings and play _counts" msgstr "Gorde balorazio eta erreprodukzio _kontaketak" #: ../quodlibet/qltk/prefs.py:448 msgid "_Email:" msgstr "_Eposta:" #: ../quodlibet/qltk/prefs.py:450 msgid "Ratings and play counts will be set for this email address" msgstr "" "Balorazio eta erreprodukzio kontuak ezarriko dira posta helbide honentzat" #: ../quodlibet/qltk/prefs.py:477 #, fuzzy msgid "Updating for new ratings" msgstr "_Kate berria" #: ../quodlibet/qltk/prefs.py:487 msgid "_Refresh library on start" msgstr "F_reskatu liburutegia abiaraztean" #: ../quodlibet/qltk/prefs.py:501 #, fuzzy msgid "Refresh Library" msgstr "_Freskatu liburutegia" #: ../quodlibet/qltk/prefs.py:509 #, fuzzy msgid "Scan Directories" msgstr "Arakatu _direktorioak" #: ../quodlibet/qltk/prefs.py:515 #, fuzzy msgid "Hidden Songs" msgstr "Abestirik ez" #: ../quodlibet/qltk/prefs.py:524 #, fuzzy msgid "Preferences" msgstr "Hobespenak" #: ../quodlibet/qltk/properties.py:139 ../quodlibet/qltk/properties.py:141 msgid "Properties" msgstr "Propietateak" #: ../quodlibet/qltk/queue.py:41 ../quodlibet/qltk/quodlibetwindow.py:540 msgid "_Queue" msgstr "_Ilara" #: ../quodlibet/qltk/queue.py:49 msgid "Remove all songs from the queue" msgstr "Kendu ilarako abesti guztiak" #: ../quodlibet/qltk/queue.py:59 msgid "_Random" msgstr "_Ausaz" #: ../quodlibet/qltk/quodlibetwindow.py:179 msgid "_Order:" msgstr "_Ordena:" #: ../quodlibet/qltk/quodlibetwindow.py:187 msgid "_Repeat" msgstr "E_rrepikatu" #: ../quodlibet/qltk/quodlibetwindow.py:188 msgid "Restart the playlist when finished" msgstr "Berriz hasi erreprodukzio-zerrenda amaitzean" #: ../quodlibet/qltk/quodlibetwindow.py:389 msgid "Unable to add songs" msgstr "Ezin dira abestiak gehitu" #: ../quodlibet/qltk/quodlibetwindow.py:390 #: ../quodlibet/qltk/quodlibetwindow.py:844 #, python-format msgid "<b>%s</b> uses an unsupported protocol." msgstr "<b>%s</b>k onartzen ez den protokolo bat erabiltzen du." #: ../quodlibet/qltk/quodlibetwindow.py:440 msgid "_Music" msgstr "_Musika" #: ../quodlibet/qltk/quodlibetwindow.py:441 msgid "_Add a Folder..." msgstr "_Gehitu karpeta bat..." #: ../quodlibet/qltk/quodlibetwindow.py:443 msgid "_Add a File..." msgstr "_Gehitu fitxategi bat..." #: ../quodlibet/qltk/quodlibetwindow.py:445 msgid "_Add a Location..." msgstr "_Gehitu kokapen bat..." #: ../quodlibet/qltk/quodlibetwindow.py:447 #, fuzzy msgid "Open _Browser" msgstr "Ireki nabigatzaile berri bat" #: ../quodlibet/qltk/quodlibetwindow.py:453 msgid "_Filters" msgstr "_Iragazkia" #: ../quodlibet/qltk/quodlibetwindow.py:455 #, fuzzy msgid "Recently _Played" msgstr "_Inoiz ez erreproduzituak" #: ../quodlibet/qltk/quodlibetwindow.py:457 msgid "Recently _Added" msgstr "Duela gutxi _gehituak" #: ../quodlibet/qltk/quodlibetwindow.py:459 msgid "_Top 40" msgstr "40 gehien e_rabiliak" #: ../quodlibet/qltk/quodlibetwindow.py:462 msgid "_Control" msgstr "_Kontrola" #: ../quodlibet/qltk/quodlibetwindow.py:468 msgid "_Jump to Playing Song" msgstr "_Salto erreproduzitzen den abestira" #: ../quodlibet/qltk/quodlibetwindow.py:471 msgid "_View" msgstr "_Ikusi" #: ../quodlibet/qltk/quodlibetwindow.py:472 msgid "_Help" msgstr "_Laguntza" #: ../quodlibet/qltk/quodlibetwindow.py:473 msgid "_Output Log" msgstr "_Irteera erregistroa" #: ../quodlibet/qltk/quodlibetwindow.py:481 msgid "_Cause an Error" msgstr "E_rrore bat sortzen du" #: ../quodlibet/qltk/quodlibetwindow.py:498 msgid "Online Help" msgstr "Laguntza sarean" #: ../quodlibet/qltk/quodlibetwindow.py:502 #, fuzzy msgid "Search Help" msgstr "Bilatu" #: ../quodlibet/qltk/quodlibetwindow.py:507 msgid "Re_fresh Library" msgstr "_Freskatu liburutegia" #: ../quodlibet/qltk/quodlibetwindow.py:511 msgid "Re_load Library" msgstr "Birkargatu _liburutegia" #: ../quodlibet/qltk/quodlibetwindow.py:516 msgid "Filter on _Genre" msgstr "Iragazi _generoz" #: ../quodlibet/qltk/quodlibetwindow.py:517 msgid "Filter on _Artist" msgstr "Iragazi _artistaz" #: ../quodlibet/qltk/quodlibetwindow.py:518 msgid "Filter on Al_bum" msgstr "Iragazi al_bumez" #: ../quodlibet/qltk/quodlibetwindow.py:526 msgid "Random _Genre" msgstr "Ausazko _generoa" #: ../quodlibet/qltk/quodlibetwindow.py:527 msgid "Random _Artist" msgstr "Ausazko _artista" #: ../quodlibet/qltk/quodlibetwindow.py:528 msgid "Random Al_bum" msgstr "Ausazko Al_buma" #: ../quodlibet/qltk/quodlibetwindow.py:535 msgid "Song _List" msgstr "Abesti _zerrenda" #: ../quodlibet/qltk/quodlibetwindow.py:583 msgid "Check for changes in your library" msgstr "Aztertu zure liburutegiko aldaketak" #: ../quodlibet/qltk/quodlibetwindow.py:586 msgid "Reload all songs in your library (this can take a long time)" msgstr "Birkargatu liburutegiko kanta guztiak (denbora luzea har lezake)" #: ../quodlibet/qltk/quodlibetwindow.py:590 msgid "" "The 40 songs you've played most (more than 40 may be chosen if there are " "ties)" msgstr "" "Gehien erreproduzitutako 40 abestiak (40 baino gehiago egon litezke " "berdinketarik badago)" #: ../quodlibet/qltk/quodlibetwindow.py:832 msgid "Add a Location" msgstr "Gehitu kokapena" #: ../quodlibet/qltk/quodlibetwindow.py:833 msgid "Enter the location of an audio file:" msgstr "Idatzi audio fitxategiaren kokapena:" #: ../quodlibet/qltk/quodlibetwindow.py:838 #: ../quodlibet/qltk/quodlibetwindow.py:843 msgid "Unable to add location" msgstr "Ezin da kokapena gehitu" #: ../quodlibet/qltk/quodlibetwindow.py:839 #, python-format msgid "<b>%s</b> is not a valid location." msgstr "<b>%s</b> ez da baliozko kokapen bat." #: ../quodlibet/qltk/quodlibetwindow.py:855 #: ../quodlibet/qltk/quodlibetwindow.py:862 msgid "Add Music" msgstr "Gehitu musika" #: ../quodlibet/qltk/quodlibetwindow.py:856 msgid "Watch this folder for new songs" msgstr "Bilatu kanta berriak karpeta honetan" #: ../quodlibet/qltk/quodlibetwindow.py:880 #, python-format msgid "" "%s could not be added to your library.\n" "\n" msgstr "" "%s ezin da liburutegian gehitu.\n" "\n" #: ../quodlibet/qltk/quodlibetwindow.py:885 msgid "Unable to add song" msgstr "Ezin da abestia gehitu" #: ../quodlibet/qltk/ratingsmenu.py:20 #, fuzzy, python-format msgid "Are you sure you want to change the rating of all %d songs?" msgstr "" "%d abestiren balorazioa aldatzera zoaz.\n" "Jarraitu nahi duzu?" #: ../quodlibet/qltk/ratingsmenu.py:22 #, fuzzy, python-format msgid "The rating of all selected songs will be changed to '%s'" msgstr "Hautatuko %d abestien balorazioa '%s'-ra aldatuko da" #: ../quodlibet/qltk/remote.py:118 #, python-format msgid "Invalid command %r received." msgstr "%r komando baliogabea jasoa." #: ../quodlibet/qltk/remote.py:121 #, python-format msgid "Error running command %r, caused by: %r." msgstr "%r komando exekutatzeak huts egin du, %r dela eta." #: ../quodlibet/qltk/remote.py:265 ../quodlibet/qltk/remote.py:272 #, python-format msgid "Unknown browser %r." msgstr "%r nabigatzaile ezezaguna." #: ../quodlibet/qltk/renamefiles.py:25 msgid "Replace spaces with _underscores" msgstr "Ordeztu zuriuneak a_zpimarrez" #: ../quodlibet/qltk/renamefiles.py:35 msgid "Strip _Windows-incompatible characters" msgstr "Kendu windows-ekin bateragarriak ez diren karaktereak" #: ../quodlibet/qltk/renamefiles.py:53 msgid "Strip _diacritical marks" msgstr "Kendu marka _diakritikoak" #: ../quodlibet/qltk/renamefiles.py:64 msgid "Strip non-_ASCII characters" msgstr "Kendu ASCII ez diren karaktereak" #: ../quodlibet/qltk/renamefiles.py:74 msgid "Use only _lowercase characters" msgstr "Erabili letra _xeheak bakarrik" #: ../quodlibet/qltk/renamefiles.py:89 msgid "Rename Files" msgstr "Berrizendatu fitxategiak" #: ../quodlibet/qltk/renamefiles.py:105 msgid "New Name" msgstr "Izen berria" #: ../quodlibet/qltk/renamefiles.py:140 msgid "Ignore _All Errors" msgstr "Baztertu errore _guztiak" #: ../quodlibet/qltk/renamefiles.py:142 msgid "_Continue" msgstr "_Jarraitu" #: ../quodlibet/qltk/renamefiles.py:144 msgid "Unable to rename file" msgstr "Ezin da fitxategia berrizendatu" #: ../quodlibet/qltk/renamefiles.py:145 #, python-format msgid "" "Renaming <b>%s</b> to <b>%s</b> failed. Possibly the target file already " "exists, or you do not have permission to make the new file or remove the old " "one." msgstr "" "Huts <b>%s</b> <b>%s</b>-ra berrizendatzean. Ziurrenik edo helburua " "fixtategi badago dagoeneko edo ez duzu baimenik fitxategi berria sortu edo " "zaharra kentzeko." #: ../quodlibet/qltk/renamefiles.py:180 msgid "Path is not absolute" msgstr "Bidea ez da absolutua" #: ../quodlibet/qltk/renamefiles.py:181 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "contains / but does not start from root. To avoid misnamed folders, root " "your pattern by starting it with / or ~/." msgstr "" "\t<b>%s</b>\n" "patroiak / du baina ez da errotik hasten. Okerreko izeneko direktorioak " "saihesteko patroia / edo ~/ -rekin hasi behar da." #: ../quodlibet/qltk/scanbox.py:35 #, fuzzy msgid "" "Songs in the listed folders will be added to the library during a library " "refresh" msgstr "" "Karpeta hauetan kokatutako abestiak (':' erabiliaz bereziak) zure " "liburutegira gehituko dira" #: ../quodlibet/qltk/scanbox.py:102 msgid "Select Directories" msgstr "Hautatu direktorioak" #: ../quodlibet/qltk/searchbar.py:46 #, fuzzy msgid "Saved Searches" msgstr "Gordetako balioak" #: ../quodlibet/qltk/searchbar.py:47 #, fuzzy msgid "Edit saved searches..." msgstr "Editatu gordetako balioak..." #: ../quodlibet/qltk/searchbar.py:67 msgid "Search" msgstr "Bilatu" #: ../quodlibet/qltk/searchbar.py:68 msgid "Search your library, using free text or QL queries" msgstr "Bilatu zure bilduman, testua edo QL bilaketak erabiliz" #: ../quodlibet/qltk/searchbar.py:176 msgid "_Limit:" msgstr "_Muga:" #: ../quodlibet/qltk/searchbar.py:188 msgid "_Weight" msgstr "_Tamaina" #: ../quodlibet/qltk/songlist.py:320 #, python-format msgid "_Filter on %s" msgstr "_Iragazi %s-ez" #: ../quodlibet/qltk/songlist.py:1017 #, fuzzy msgid "All _Headers" msgstr "_Album goiburuak" #: ../quodlibet/qltk/songlist.py:1018 msgid "_Track Headers" msgstr "Pis_ta goiburuak" #: ../quodlibet/qltk/songlist.py:1019 msgid "_Album Headers" msgstr "_Album goiburuak" #: ../quodlibet/qltk/songlist.py:1020 msgid "_People Headers" msgstr "_Pertsona goiburuak" #: ../quodlibet/qltk/songlist.py:1021 msgid "_Date Headers" msgstr "_Data goiburuak" #: ../quodlibet/qltk/songlist.py:1022 msgid "_File Headers" msgstr "_fixategi goiburuak" #: ../quodlibet/qltk/songlist.py:1023 msgid "_Production Headers" msgstr "P_rodukzio goiburuak" #: ../quodlibet/qltk/songlist.py:1037 #, fuzzy msgid "Custom _Sort..." msgstr "_Pertsonalizatu goiburuak..." #: ../quodlibet/qltk/songlist.py:1042 msgid "_Customize Headers..." msgstr "_Pertsonalizatu goiburuak..." #: ../quodlibet/qltk/songsmenu.py:232 msgid "Add to _Queue" msgstr "Gehitu _ilarara" #: ../quodlibet/qltk/songsmenu.py:250 msgid "_Copy to Device" msgstr "_Kopiatu gailura" #: ../quodlibet/qltk/songsmenu.py:259 #, fuzzy msgid "_Remove from library" msgstr "_Kendu erreprodukzio-zerrendatik" #: ../quodlibet/qltk/sortdialog.py:19 #, fuzzy msgid "Track Headers" msgstr "Pis_ta goiburuak" #: ../quodlibet/qltk/sortdialog.py:22 #, fuzzy msgid "People Headers" msgstr "_Pertsona goiburuak" #: ../quodlibet/qltk/sortdialog.py:25 #, fuzzy msgid "Album Headers" msgstr "_Album goiburuak" #: ../quodlibet/qltk/sortdialog.py:28 #, fuzzy msgid "Date Headers" msgstr "_Data goiburuak" #: ../quodlibet/qltk/sortdialog.py:31 #, fuzzy msgid "File Headers" msgstr "_fixategi goiburuak" #: ../quodlibet/qltk/sortdialog.py:33 #, fuzzy msgid "Production Headers" msgstr "P_rodukzio goiburuak" #: ../quodlibet/qltk/sortdialog.py:67 #, fuzzy msgid "Tag:" msgstr "E_tiketa:" #: ../quodlibet/qltk/sortdialog.py:71 msgid "Ascending" msgstr "Goraka" #: ../quodlibet/qltk/sortdialog.py:73 msgid "Descending" msgstr "Beheraka" #: ../quodlibet/qltk/sortdialog.py:117 #, fuzzy msgid "Custom sort" msgstr "_Personalizatu" #: ../quodlibet/qltk/tagsfrompath.py:80 msgid "Replace _underscores with spaces" msgstr "Ordeztu azpimarrak zuriunez" #: ../quodlibet/qltk/tagsfrompath.py:90 msgid "_Title-case tags" msgstr "_Titulu-gisako etiketak" #: ../quodlibet/qltk/tagsfrompath.py:100 msgid "Split into multiple _values" msgstr "Zatitu hainbat _ baliotan" #: ../quodlibet/qltk/tagsfrompath.py:117 msgid "Tags From Path" msgstr "Etiketak bidetik" #: ../quodlibet/qltk/tagsfrompath.py:127 msgid "Tags replace existing ones" msgstr "Etiketak daudenak ordezkatzen dituzte" #: ../quodlibet/qltk/tagsfrompath.py:128 msgid "Tags are added to existing ones" msgstr "Etiketak daudenei gehituko zaizkie" #: ../quodlibet/qltk/tagsfrompath.py:156 #, python-format msgid "" "The pattern\n" "\t<b>%s</b>\n" "is invalid. Possibly it contains the same tag twice or it has unbalanced " "brackets (< / >)." msgstr "" "\t<b>%s</b>\n" "patroia baliogabea da. Baliteke etiketa berdina bi aldiz edukitzea edo itxi " "gabeko parentesiak ditu (< / >)." #: ../quodlibet/qltk/tagsfrompath.py:177 msgid "Invalid tags" msgstr "Etiketa baliogabeak" #: ../quodlibet/qltk/tagsfrompath.py:178 #, python-format msgid "" "Invalid tags <b>%s</b>\n" "\n" "The files currently selected do not support editing these tags." msgstr "" "<b>%s</b> etiketa baliogabeak\n" "\n" "Hautatutako fitxategiek ez dute onartzen etiketa hauek ezabatzea." #: ../quodlibet/qltk/tagsfrompath.py:262 ../quodlibet/util/songwrapper.py:96 msgid "Unable to edit song" msgstr "Ezin da abestia editatu" #: ../quodlibet/qltk/textedit.py:89 #, python-format msgid "" "The pattern you entered was invalid. Make sure you enter < and > as " "\\< and \\> and that your tags are balanced.\n" "\n" "%s" msgstr "" "Sartutako patroia baliogabea da. Ziuratu < eta > \\< eta \\> " "gisa sartu dituzula eta etiketak parekatuak daudela.\n" "\n" "%s" #: ../quodlibet/qltk/textedit.py:105 msgid "Edit Display" msgstr "Editatu bistaratzea" #: ../quodlibet/qltk/tracker.py:88 msgid "Too Many Errors" msgstr "Errore gehiegi" #: ../quodlibet/qltk/tracker.py:89 #, python-format msgid "Stopping playback because there were %d errors in a row." msgstr "Errenkada batean %d errore daudelako erreprodukzioa gelditzen." #: ../quodlibet/qltk/tracknumbers.py:20 msgid "Track Numbers" msgstr "Pista zenbakiak" #: ../quodlibet/qltk/tracknumbers.py:25 msgid "Start fro_m:" msgstr "Hasi he_mendik:" #: ../quodlibet/qltk/tracknumbers.py:36 msgid "_Total tracks:" msgstr "Pista _guztira:" #: ../quodlibet/qltk/tracknumbers.py:61 msgid "Track" msgstr "Pista" #: ../quodlibet/qltk/views.py:541 #, python-format msgid "and %d more..." msgstr "eta %d gehiago..." #: ../quodlibet/qltk/wlw.py:176 msgid "Saving the songs you changed." msgstr "Aldatu dituzun abestiak gordetzen." #: ../quodlibet/qltk/wlw.py:177 #, python-format msgid "" "%(current)d/%(total)d songs saved\n" "(%(remaining)s remaining)" msgstr "" "%(current)d/%(total)d abesti gordeak\n" "(%(remaining)s falta dira)" #: ../quodlibet/qltk/wlw.py:207 #, python-format msgid "%d of %d" msgstr "%d %d-tik" #: ../quodlibet/qltk/x.py:281 msgid "Clear search" msgstr "Garbitu bilaketa" #: ../quodlibet/util/collection.py:499 #, python-format msgid "A playlist named %s already exists." msgstr "Badago %s izeneko erreprodukzio-zerrenda bat." #. Translators: "D" as in "Debug". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:162 #, fuzzy msgid "D: " msgstr "W: " #. Translators: Name of the debug tab in the Output Log window #: ../quodlibet/util/dprint.py:171 msgid "Debug" msgstr "Debug" #. Translators: "W" as in "Warning". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:178 msgid "W: " msgstr "W: " #. Translators: Name of the warnings tab in the Output Log window #: ../quodlibet/util/dprint.py:184 msgid "Warnings" msgstr "Abisuak" #. Translators: "E" as in "Error". It is prepended to #. terminal output. APT uses a similar output format. #: ../quodlibet/util/dprint.py:191 msgid "E: " msgstr "E: " #: ../quodlibet/util/__init__.py:100 msgid "Display brief usage information" msgstr "Erakutsi erabiltze argibide laburpena" #: ../quodlibet/util/__init__.py:102 msgid "Display version and copyright" msgstr "Bertsio eta kopia-eskubideak bistarazi" #: ../quodlibet/util/__init__.py:142 #, fuzzy, python-format msgid "Usage: %s %s\n" msgstr "Erabilera: %s %s" #: ../quodlibet/util/__init__.py:143 msgid "[options]" msgstr "[aukerak]" #: ../quodlibet/util/__init__.py:186 #, python-format msgid "Option %r not recognized." msgstr "Ez da %r aukera ezagutzen." #: ../quodlibet/util/__init__.py:189 #, python-format msgid "Option %r requires an argument." msgstr "%r aukerak argumentu bat behar du." #: ../quodlibet/util/__init__.py:192 #, python-format msgid "%r is not a unique prefix." msgstr "%r ez da aurrizki bakana." #: ../quodlibet/util/__init__.py:415 ../quodlibet/util/__init__.py:424 msgid "[Invalid Encoding]" msgstr "[Kodeketa baliogabea]" #. Translators: If tag names, when capitalized, should not #. be title-cased ("Looks Like This"), but rather only have #. the first letter capitalized, translate this string as #. something other than "check|titlecase?". #: ../quodlibet/util/__init__.py:643 msgid "check|titlecase?" msgstr "Lehen hizkia larriz hitz bakoitzean?" #: ../quodlibet/util/logging.py:8 msgid "General" msgstr "Orokorra" #: ../quodlibet/util/logging.py:32 msgid "No log available." msgstr "Erregistrurik gabe." #: ../quodlibet/util/massagers.py:31 msgid "" "The date must be entered in 'YYYY', 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS' " "format." msgstr "" "Data 'UUUU', 'UUUU-HH-EE' edo 'UUUU-HH-EE OO:MM:SS' formatuan sartu behar da." #: ../quodlibet/util/massagers.py:43 msgid "Replay Gain gains must be entered in 'x.yy dB' format." msgstr "Erreprodukzio irabazia 'x.yy dB' formatuan idatzi behar da." #: ../quodlibet/util/massagers.py:63 msgid "Replay Gain peaks must be entered in 'x.yy' format." msgstr "Erreprodukzio irabazi gailurra 'x.yy' formatuan sartu behar da." #: ../quodlibet/util/massagers.py:82 msgid "MusicBrainz IDs must be in UUID format." msgstr "MusicBrainz IDak UUID formatuan izan behar dira." #. Translators: Leave "official", "promotional", and "bootleg" #. untranslated. They are the three possible literal values. #: ../quodlibet/util/massagers.py:103 msgid "" "MusicBrainz release status must be 'official', 'promotional', or 'bootleg'." msgstr "" "MusicBrainz argitaratze egoera 'official', 'promotional', edo 'bootleg' izan " "behar da." #: ../quodlibet/util/massagers.py:113 msgid "Language must be an ISO 639-2 three-letter code" msgstr "Hizkuntzak ISO 639-2tik hiru letratako kodea izan behar du" #: ../quodlibet/util/tags.py:28 msgid "album" msgstr "albuma" #: ../quodlibet/util/tags.py:29 msgid "arranger" msgstr "Moldatzailea" #: ../quodlibet/util/tags.py:31 msgid "author" msgstr "egilea" #: ../quodlibet/util/tags.py:32 msgid "composer" msgstr "konposatzailea" #: ../quodlibet/util/tags.py:33 msgid "conductor" msgstr "gidaria" #: ../quodlibet/util/tags.py:34 msgid "contact" msgstr "kontaktua" #: ../quodlibet/util/tags.py:35 msgid "copyright" msgstr "Copyright-a" #: ../quodlibet/util/tags.py:36 msgid "date" msgstr "data" #: ../quodlibet/util/tags.py:37 msgid "description" msgstr "azalpena" #: ../quodlibet/util/tags.py:38 msgid "genre" msgstr "generoa" #: ../quodlibet/util/tags.py:39 msgid "grouping" msgstr "taldekatzea" #: ../quodlibet/util/tags.py:40 msgid "language" msgstr "hizkuntza" #: ../quodlibet/util/tags.py:41 msgid "license" msgstr "lizentzia" #: ../quodlibet/util/tags.py:42 msgid "location" msgstr "kokapena" #: ../quodlibet/util/tags.py:43 msgid "lyricist" msgstr "idazlea" #. Translators: Also e.g. "record label", "publisher" #: ../quodlibet/util/tags.py:45 msgid "organization" msgstr "erakundea" #: ../quodlibet/util/tags.py:47 msgid "title" msgstr "izenburua" #: ../quodlibet/util/tags.py:48 msgid "version" msgstr "bertsioa" #: ../quodlibet/util/tags.py:49 msgid "website" msgstr "webgunea" #: ../quodlibet/util/tags.py:51 msgid "album artist" msgstr "album artista" #: ../quodlibet/util/tags.py:52 msgid "BPM" msgstr "BPM" #. Translators: This used to be called "part". #: ../quodlibet/util/tags.py:55 ../quodlibet/util/tags.py:56 msgid "disc subtitle" msgstr "disko azpititulua" #: ../quodlibet/util/tags.py:57 ../quodlibet/util/tags.py:92 msgid "disc" msgstr "diskoa" #: ../quodlibet/util/tags.py:58 ../quodlibet/util/tags.py:94 msgid "track" msgstr "pista" #: ../quodlibet/util/tags.py:59 msgid "label ID" msgstr "etiketa IDa" #: ../quodlibet/util/tags.py:60 msgid "original release date" msgstr "jatorrizko argitaratze data" #: ../quodlibet/util/tags.py:61 msgid "original album" msgstr "jatorrizko albuma" #: ../quodlibet/util/tags.py:62 msgid "original artist" msgstr "jatorrizko artista" #: ../quodlibet/util/tags.py:63 msgid "recording date" msgstr "grabaketa data" #: ../quodlibet/util/tags.py:64 msgid "release country" msgstr "argitaratzen nazioa" #: ../quodlibet/util/tags.py:65 msgid "album artist (sort)" msgstr "album artista (ordenatu)" #: ../quodlibet/util/tags.py:66 msgid "artist (sort)" msgstr "artista (ordenatu)" #: ../quodlibet/util/tags.py:67 msgid "album (sort)" msgstr "album (ordenatu)" #: ../quodlibet/util/tags.py:68 msgid "performer (sort)" msgstr "interpretea (ordenatu)" #: ../quodlibet/util/tags.py:69 msgid "performers (sort)" msgstr "interpreteak (ordenatu)" #. http://musicbrainz.org/doc/MusicBrainzTag #: ../quodlibet/util/tags.py:73 msgid "MusicBrainz track ID" msgstr "MusicBrainz pista IDa" #: ../quodlibet/util/tags.py:74 msgid "MusicBrainz release ID" msgstr "MusicBrainz argitaratze IDa" #: ../quodlibet/util/tags.py:75 msgid "Musicbrainz artist ID" msgstr "Musicbrainz artista IDa" #: ../quodlibet/util/tags.py:76 msgid "MusicBrainz album artist ID" msgstr "MusicBrainz album artista IDa" #: ../quodlibet/util/tags.py:77 msgid "MusicBrainz TRM ID" msgstr "MusicBrainz TRM IDa" #: ../quodlibet/util/tags.py:78 msgid "MusicIP PUID" msgstr "MusicIP PUID" #: ../quodlibet/util/tags.py:79 msgid "MusicBrainz album status" msgstr "MusicBrainz album egoera" #: ../quodlibet/util/tags.py:80 msgid "MusicBrainz album type" msgstr "MusicBrainz album mota" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:83 msgid "track gain" msgstr "Pistaren irabazpena" #: ../quodlibet/util/tags.py:84 msgid "track peak" msgstr "Pistaren erpina" #. Translators: "gain" means a volume adjustment, not "to acquire". #: ../quodlibet/util/tags.py:86 msgid "album gain" msgstr "Albumaren irabazpena" #: ../quodlibet/util/tags.py:87 msgid "album peak" msgstr "Albumaren gailurra" #: ../quodlibet/util/tags.py:88 msgid "reference loudness" msgstr "erreferentzia ozena" #: ../quodlibet/util/tags.py:93 msgid "discs" msgstr "diskoak" #: ../quodlibet/util/tags.py:95 msgid "tracks" msgstr "pistak" #: ../quodlibet/util/tags.py:96 msgid "last started" msgstr "azken abiarazia" #: ../quodlibet/util/tags.py:97 msgid "full name" msgstr "Izen osoa" #: ../quodlibet/util/tags.py:104 msgid "mount point" msgstr "muntatze puntua" #: ../quodlibet/util/tags.py:105 msgid "errors" msgstr "erroreak" #: ../quodlibet/util/tags.py:107 msgid "people" msgstr "jendea" #: ../quodlibet/util/tags.py:110 msgid "year" msgstr "urtea" #: ../quodlibet/util/tags.py:111 #, fuzzy msgid "original release year" msgstr "jatorrizko argitaratze data" #: ../quodlibet/util/tags.py:112 msgid "bookmark" msgstr "laster-marka" #: ../quodlibet/util/tags.py:115 #, fuzzy msgid "file format" msgstr "Ez dago denbora informaziorik" #. Other things put here as a canonical translated copy. #: ../quodlibet/util/tags.py:164 msgid "lyricists" msgstr "Idazleak" #: ../quodlibet/util/tags.py:165 msgid "arrangers" msgstr "moldatzaileak" #: ../quodlibet/util/tags.py:166 msgid "composers" msgstr "konposatzaileak" #: ../quodlibet/util/tags.py:167 msgid "conductors" msgstr "gidariak" #: ../quodlibet/util/tags.py:168 msgid "authors" msgstr "egileak" #: ../quodlibet/util/tags.py:172 #, python-format msgid "%d second" msgid_plural "%d seconds" msgstr[0] "segundo %d" msgstr[1] "%d segundo" #: ../quodlibet/util/tags.py:173 #, python-format msgid "%d minute" msgid_plural "%d minutes" msgstr[0] "minutu %d" msgstr[1] "%d minutu" #: ../quodlibet/util/tags.py:174 #, python-format msgid "%d hour" msgid_plural "%d hours" msgstr[0] "ordu %d" msgstr[1] "%d ordu" #: ../quodlibet/util/tags.py:175 #, python-format msgid "%d day" msgid_plural "%d days" msgstr[0] "egun %d" msgstr[1] "%d egun" #: ../quodlibet/util/tags.py:176 #, python-format msgid "%d year" msgid_plural "%d years" msgstr[0] "urte %d" msgstr[1] "%d urte" #~ msgid "_Browse Library" #~ msgstr "_Arakatu liburutegia" #, fuzzy #~ msgid "" #~ "An exception has occured in Quod Libet. A dump file has been saved to <b >" #~ "%s</b> that will help us debug the crash. Please file a new issue at " #~ "http://code.google.com/p/quodlibet/issues /list and attach this file or " #~ "include its contents. This file may contain some identifying information " #~ "about you or your system, such as a list of recent files played. If this " #~ "is unacceptable, send <b>% s</b> instead with a description of whatyou " #~ "were doing." #~ msgstr "" #~ "Salbuespen bat gertatu da Quod Libet-en. Iraulketa fitxategi bat gorde da " #~ "<b>%s</b>-en zuri kraskatzea arazten laguntzeko. Mesedez ireki programa- " #~ "errore txostena at http://code.google.com/p/quodlibet/issues/list gunean " #~ "eta erantsi fitxategia edo bertako edukia. Fitxategi honek zure sistema " #~ "ezagutagarri egin dezakeen informazioa izan dezake, azken " #~ "erreproduzitutako abestiak adibidez. Hau onartezina bada bidali <b>%s</b> " #~ "zer egiten ari zinen azalpenarekin..\n" #~ "\n" #~ "Quod Libet erabilezina egon liteke.Itxi eta berriz irekitzea gomendatzen " #~ "da. Zure liburutegia gordea izango da." #~ msgid "Could not import python-gpod, iPod support disabled." #~ msgstr "Ezin da python-gpod inporatu, iPod euskarria desgaitua." #, fuzzy #~ msgid "_Output device:" #~ msgstr "_Irteera kanalizazioa:" #~ msgid "Could not link GStreamer pipeline: '%s'" #~ msgstr "Ezin da GStreamer pipeline-a lotu: '%s'" #~ msgid "Default" #~ msgstr "Berezkoa" #~ msgid "_Search:" #~ msgstr "_Bilaketa:" #~ msgid "Search your library" #~ msgstr "Bilatu zure liburutegian" #~ msgid "No eject command found." #~ msgstr "Ez da ebazpen komandorik aurkitu." #~ msgid "Unable to start web browser" #~ msgstr "Ezinda web nabigatzaile abiarazi" #~ msgid "" #~ "A web browser could not be found. Please set your $BROWSER variable, or " #~ "make sure /usr/bin/sensible-browser exists." #~ msgstr "" #~ "Ezin da nabigatzailerik aurkitu. Mesedez ezarri $BROWSER aldagaia, edo " #~ "ziurtatu /usr/bin/sensible-browser egotea." #, fuzzy #~ msgid "Library Error" #~ msgstr "Liburutegi nabigatzailea" #~ msgid "translator-credits" #~ msgstr "Piarres Beobide <pi@beobide.net>" #~ msgid "Other columns to display, separated by spaces" #~ msgstr "Bistaratzeko beste zutabeak, zuriunez bereizirik" #~ msgid "_Edit and Continue" #~ msgstr "_Editatu eta jarraitu" #, fuzzy #~ msgid "You are about to change the rating of %d song." #~ msgid_plural "You are about to change the rating of %d songs." #~ msgstr[0] "" #~ "%d abestiren balorazioa aldatzera zoaz.\n" #~ "Jarraitu nahi duzu?" #~ msgstr[1] "" #~ "%d abestiren balorazioa aldatzera zoaz.\n" #~ "Jarraitu nahi duzu?" #~ msgid "Confirm rating" #~ msgstr "Berretsi balorazioa" #, fuzzy #~ msgid "" #~ "{title} {version}\n" #~ "<{email}>\n" #~ "Copyright {dates}\t{authors}\n" #~ "\n" #~ "This is free software; see the source for copying conditions. There is " #~ "NO\n" #~ "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR " #~ "PURPOSE.\n" #~ msgstr "" #~ "%s %s - <quod-libet-development@googlegroups.com>\n" #~ "Copyright 2004-2005 Joe Wreschnig, Michael Urman, eta beste zenbait\n" #~ "\n" #~ "Hau software librea da, kopiatze baldintzak ikusteko begiratu iturburuan. " #~ "EZ dago bermerik \n" #~ "ezta MERKATARITZA edo ERABILERA warranty; not even for MERCHANTABILITY or " #~ "FITNESS FOR A PARTICULAR PURPOSE.\n" #~ msgid "%r doesn't contain any browsers." #~ msgstr "%r-ek ez du nabigatzailerik." #, fuzzy #~ msgid "Total size unknown" #~ msgstr "Tamaina guztira:" #~ msgid "%r doesn't contain any devices." #~ msgstr "%r-ek ez du gailurik." #~ msgid "%s: Could not import ctypes." #~ msgstr "%s: Ezin da ctypes inportatu." #~ msgid "%s: Could not find media-player-info." #~ msgstr "%s: Ezin da media-player-info aurkitu." #, fuzzy #~ msgid "Couldn't find module %s." #~ msgstr "%s: Ezin da media-player-info aurkitu." #~ msgid "Quod Libet Plugins" #~ msgstr "Quod Libet pluginak" #~ msgid "Color _search terms" #~ msgstr "Kolore bil_keta terminoak" #~ msgid "" #~ "Display simple searches in blue, advanced ones in green, and invalid ones " #~ "in red" #~ msgstr "" #~ "Bistarazi bilaketa arruntak urdinez, hedatutakoak berdez eta baliogabeak " #~ "gorriz" #~ msgid "_Select" #~ msgstr "_Hautatu" #~ msgid "Separators for splitting tags" #~ msgstr "Bereizleak zatitutako etiketentzat" #~ msgid "Enable _human title case" #~ msgstr "Gaitu _gizakizko izenburu larritasuna" #~ msgid "" #~ "Uses common English rules for title casing, as in \"Dark Night of the Soul" #~ "\"" #~ msgstr "" #~ "Erabili ingelesezko arau arruntak letra larrientzat, \"Dark Night of the " #~ "Soul\" gisa" #, fuzzy #~ msgid "Display" #~ msgstr "Editatu bistaratzea" #~ msgid "Quod Libet Preferences" #~ msgstr "Quod Libet hobespenak" #~ msgid "Not Played To_day" #~ msgstr "_Gaur erreproduzitu gabe" #~ msgid "Not Played in a _Week" #~ msgstr "_Aste batean erreproduzitu gabe" #~ msgid "Not Played in a _Month" #~ msgstr "_Hilabete batean erreproduzitu gabe" #~ msgid "B_ottom 40" #~ msgstr "40 gutxien era_biliak" #~ msgid "" #~ "The 40 songs you've played least (more than 40 may be chosen if there are " #~ "ties)" #~ msgstr "" #~ "Azken erreproduzitutako 40 abestiak (40 baino gehiago egon litezke " #~ "berdinketarik badago)" #~ msgid "gtk-media-next" #~ msgstr "_Hurrengoa" #~ msgid "gtk-media-previous" #~ msgstr "_Aurrekoa" #~ msgid "gtk-media-play" #~ msgstr "_Erreproduzitu" #~ msgid "gtk-media-pause" #~ msgstr "_Gelditu" #~ msgid "[ --print-playing | control ]" #~ msgstr "[ --print-playing | kontrol ]" #~ msgid "Artist" #~ msgstr "Artista" #~ msgid "Date" #~ msgstr "Data" #~ msgid "Choose New Stations" #~ msgstr "Hautatu kate berriak" #~ msgid "Add" #~ msgstr "Gehitu" #~ msgid "Bitrate" #~ msgstr "Bit-tasa" #~ msgid "_Stations..." #~ msgstr "Ka_teak..." #~ msgid "Quod Libet" #~ msgstr "Quod Libet" #~ msgid "Initializing audio backend (%s)" #~ msgstr "Audio azpiegitura abiarazten (%s)" #~ msgid "Initializing main library (%s)" #~ msgstr "Liburutegi nagusia hasieratzen (%s)" #~ msgid "Unable to save library" #~ msgstr "Ezin da liburutegia gorde" #~ msgid "" #~ "The audio output pipeline %r could not be created. Check your GStreamer " #~ "settings in ~/.quodlibet/config." #~ msgstr "" #~ "Ezin izan da %r audio irteera kanalizazioa sortu. Aztertu zure GStreamer " #~ "ezarpenak ~/.quodlibet/config-en." ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/README������������������������������������������������������������������������������0000644�0001750�0001750�00000002603�12173212464�014615� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ex Falso / Quod Libet - A Music Library/Editor/Player ===================================================== Quod Libet is a music management program. It provides several different ways to view your audio library, as well as support for Internet radio and audio feeds. It has extremely flexible metadata tag editing and searching capabilities. Ex Falso is a tag editor with the same tag editing interface as Quod Libet, but it does not play files. Supported file formats include Ogg Vorbis/Opus/Speex/FLAC, MP3, FLAC, MOD/XM/IT, Musepack, Wavpack, MPEG-4 AAC, Monkeys Audio, WMA, SPC, MIDI. Contact & Bug Reports --------------------- To report bugs, suggest features, ask a question, get the latest version, or help us out, visit http://code.google.com/p/quodlibet/. IRC: #quodlibet on irc.oftc.net Mailing List: http://groups.google.com/group/quod-libet-development Documentation ------------- Call 'make' in the 'docs' directory to build sphinx documentation. Or access it online: https://quodlibet.readthedocs.org/ Installation Requirements ------------------------- * intltool * gettext Runtime Requirements -------------------- * Python >= 2.6 * PyGObject >= 3.2 * GTK+ >= 3.0 * GStreamer >= 1.0 or xine-lib 1.x * Mutagen >= 1.14 Installation ------------ :: ./setup.py build ./setup.py install Tests ----- :: ./setup.py test ./setup.py test --to-run=TestClassName �����������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/data/�������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�014641� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/data/quodlibet.desktop.in�����������������������������������������������������������0000644�0001750�0001750�00000001226�12173212464�020636� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Desktop Entry] Name=Quod Libet _GenericName=Music Player _Comment=Listen to, browse, or edit your audio collection Exec=quodlibet Terminal=false StartupNotify=true Type=Application Icon=quodlibet Categories=AudioVideo;Audio;Player;GTK; #http://live.gnome.org/GnomeGoals/NotificationSource X-GNOME-UsesNotifications=true # for unity-panel integration X-Ayatana-Desktop-Shortcuts=X-Play;X-Next;X-Prev; [X-Play Shortcut Group] _Name=Play/Pause Exec=quodlibet --play-pause TargetEnvironment=Unity [X-Next Shortcut Group] _Name=Next Exec=quodlibet --next TargetEnvironment=Unity [X-Prev Shortcut Group] _Name=Previous Exec=quodlibet --prev TargetEnvironment=Unity ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/data/exfalso.desktop.in�������������������������������������������������������������0000644�0001750�0001750�00000000321�12173212464�020302� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Desktop Entry] Name=Ex Falso _GenericName=Audio tag editor _Comment=Edit tags in your audio files Exec=exfalso Terminal=false StartupNotify=true Type=Application Icon=exfalso Categories=AudioVideo;Audio;GTK; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/data/quodlibet-search-provider.ini��������������������������������������������������0000644�0001750�0001750�00000000242�12173212464�022427� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Shell Search Provider] DesktopId=quodlibet.desktop BusName=net.sacredchao.QuodLibet.SearchProvider ObjectPath=/net/sacredchao/QuodLibet/SearchProvider Version=2 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/PKG-INFO����������������������������������������������������������������������������0000644�0001750�0001750�00000000460�12173213432�015025� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Metadata-Version: 1.0 Name: quodlibet Version: 3.0.2 Summary: a music library, tagger, and player Home-page: http://code.google.com/p/quodlibet/ Author: Steven Robertson and Christoph Reiter Author-email: quod-libet-development@googlegroups.com License: GNU GPL v2 Description: UNKNOWN Platform: UNKNOWN ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/gdist/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�015042� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/gdist/clean.py����������������������������������������������������������������������0000644�0001750�0001750�00000002463�12161032160�016475� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2007 Joe Wreschnig # # This software and accompanying documentation, if any, may be freely # used, distributed, and/or modified, in any form and for any purpose, # as long as this notice is preserved. There is no warranty, either # express or implied, for this software. """clean up output of 'build' commands""" import os from distutils.core import Command from distutils.command.clean import clean as distutils_clean class clean(distutils_clean, Command): """clean up output of 'build' commands GDistribution commands generate files that the normal distutils clean command doesn't. This removes them. """ description = "clean up output of 'build' commands" def initialize_options(self): distutils_clean.initialize_options(self) def finalize_options(self): distutils_clean.finalize_options(self) self.shortcuts = self.distribution.shortcuts self.po_package = self.distribution.po_package self.po_directory = self.distribution.po_directory def run(self): distutils_clean.run(self) if self.all: if self.po_directory and self.po_package: pot = os.path.join(self.po_directory, self.po_package + ".pot") try: os.unlink(pot) except OSError: pass __all__ = ["clean"] �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/gdist/man.py������������������������������������������������������������������������0000644�0001750�0001750�00000002757�12161032160�016174� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2007 Joe Wreschnig # # This software and accompanying documentation, if any, may be freely # used, distributed, and/or modified, in any form and for any purpose, # as long as this notice is preserved. There is no warranty, either # express or implied, for this software. """install man pages Commands to install Unix man pages. """ import os from distutils.util import change_root from distutils.core import Command class install_man(Command): """install man pages Install man pages into $prefix/share/man/manN. """ description = "install man pages" user_options = [] man_pages = None prefix = None root = None def initialize_options(self): pass def finalize_options(self): self.set_undefined_options('install', ('root', 'root'), ('install_base', 'prefix')) self.man_pages = self.distribution.man_pages for man_page in self.man_pages: if not man_page[-1].isdigit(): raise SystemExit("%r has no section" % man_page) def run(self): basepath = os.path.join(self.prefix, 'share', 'man') if self.root != None: basepath = change_root(self.root, basepath) self.mkpath(basepath) for man_page in self.man_pages: manpath = os.path.join(basepath, "man" + man_page[-1]) self.mkpath(manpath) fullpath = os.path.join(manpath, os.path.basename(man_page)) self.copy_file(man_page, fullpath) __all__ = ["install_man"] �����������������quodlibet-3.0.2/gdist/__init__.py�������������������������������������������������������������������0000644�0001750�0001750�00000010164�12173212464�017161� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2007 Joe Wreschnig # # This software and accompanying documentation, if any, may be freely # used, distributed, and/or modified, in any form and for any purpose, # as long as this notice is preserved. There is no warranty, either # express or implied, for this software. """distutils extensions for GTK+/GObject/Unix This module contains a Distribution subclass (GDistribution) which implements build and install commands for operations related to Python GTK+ and GObject support. This includes installation of man pages and gettext/intltool support. """ import os try: from py2exe import Distribution except ImportError: from distutils.core import Distribution from distutils.command.build import build as distutils_build from distutils.command.install import install as distutils_install from gdist.shortcuts import build_shortcuts, install_shortcuts from gdist.man import install_man from gdist.po import build_mo, install_mo, po_stats, check_pot from gdist.icons import build_icon_cache, install_icons from gdist.search_provider import install_search_provider class build(distutils_build): """Override the default build with new subcommands.""" sub_commands = distutils_build.sub_commands + [ ("build_mo", lambda self: self.distribution.has_po()), ("build_shortcuts", lambda self: self.distribution.has_shortcuts()), ("build_icon_cache", lambda self: self.distribution.need_icon_cache()), ] class install(distutils_install): """Override the default install with new subcommands.""" sub_commands = distutils_install.sub_commands + [ ("install_shortcuts", lambda self: self.distribution.has_shortcuts()), ("install_man", lambda self: self.distribution.has_man_pages()), ("install_mo", lambda self: self.distribution.has_po()), ("install_icons", lambda self: self.distribution.need_icon_install()), ("install_search_provider", lambda self: self.distribution.need_search_provider()), ] class GDistribution(Distribution): """A Distribution with support for GTK+-related options The GDistribution class adds a number of commads and parameters related to GTK+ and GObject Python programs and libraries. Parameters (to distutils.core.setup): po_directory -- directory where .po files are contained po_package -- package name for translation files shortcuts -- list of .desktop files to build/install man_pages -- list of man pages to install Using the translation features requires intltool. Example: from distutils.core import setup from gdist import GDistribution setup(distclass=GDistribution, ...) """ shortcuts = [] po_directory = None man_pages = [] po_package = None search_provider = None def __init__(self, *args, **kwargs): Distribution.__init__(self, *args, **kwargs) self.cmdclass.setdefault("build_mo", build_mo) self.cmdclass.setdefault("build_shortcuts", build_shortcuts) self.cmdclass.setdefault("build_icon_cache", build_icon_cache) self.cmdclass.setdefault("install_icons", install_icons) self.cmdclass.setdefault("install_shortcuts", install_shortcuts) self.cmdclass.setdefault("install_man", install_man) self.cmdclass.setdefault("install_mo", install_mo) self.cmdclass.setdefault("install_search_provider", install_search_provider) self.cmdclass.setdefault("build", build) self.cmdclass.setdefault("install", install) self.cmdclass.setdefault("po_stats", po_stats) self.cmdclass.setdefault("check_pot", check_pot) def has_po(self): return os.name != 'nt' and bool(self.po_directory) def has_shortcuts(self): return os.name != 'nt' and bool(self.shortcuts) def has_man_pages(self): return os.name != 'nt' and bool(self.man_pages) def need_icon_cache(self): return os.name != 'nt' def need_icon_install(self): return os.name != 'nt' def need_search_provider(self): return os.name != 'nt' __all__ = ["GDistribution"] ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/gdist/search_provider.py������������������������������������������������������������0000644�0001750�0001750�00000002121�12173212464�020573� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This software and accompanying documentation, if any, may be freely # used, distributed, and/or modified, in any form and for any purpose, # as long as this notice is preserved. There is no warranty, either # express or implied, for this software. import os from distutils.util import change_root from distutils.core import Command class install_search_provider(Command): user_options = [] root = None prefix = None search_provider = None def initialize_options(self): pass def finalize_options(self): self.set_undefined_options('install', ('root', 'root'), ('install_base', 'prefix')) self.search_provider = self.distribution.search_provider def run(self): basepath = os.path.join( self.prefix, 'share', 'gnome-shell', 'search-providers') if self.root is not None: basepath = change_root(self.root, basepath) self.mkpath(basepath) self.copy_file(self.search_provider, basepath) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/gdist/shortcuts.py������������������������������������������������������������������0000644�0001750�0001750�00000006314�12173212464�017462� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2007 Joe Wreschnig # # This software and accompanying documentation, if any, may be freely # used, distributed, and/or modified, in any form and for any purpose, # as long as this notice is preserved. There is no warranty, either # express or implied, for this software. import os from distutils.dep_util import newer from distutils.util import change_root from distutils.core import Command class build_shortcuts(Command): """Build .desktop files Move .desktop files to the appropriate location in the build tree. If there is a .desktop.in file, process it with intltool. """ description = "build .desktop files" user_options = [] build_base = None def initialize_options(self): pass def finalize_options(self): self.shortcuts = self.distribution.shortcuts self.po_directory = self.distribution.po_directory self.set_undefined_options('build', ('build_base', 'build_base')) def __check_po(self): """Exit if translation is needed and not available""" if not (self.po_directory and os.path.isdir(self.po_directory)): raise SystemExit("PO directory %r not found." % self.po_directory) def run(self): basepath = os.path.join(self.build_base, 'share', 'applications') self.mkpath(basepath) for shortcut in self.shortcuts: if os.path.exists(shortcut + ".in"): fullpath = os.path.join(basepath, os.path.basename(shortcut)) self.__check_po() if newer(shortcut + ".in", fullpath): self.spawn(["intltool-merge", "-d", self.po_directory, shortcut + ".in", fullpath]) else: self.copy_file(shortcut, os.path.join(basepath, shortcut)) class install_shortcuts(Command): """Install .desktop files Install any .desktop files from the build tree to their final location, under $prefix/share/applications. """ description = "install .desktop files" user_options = [] prefix = None skip_build = None shortcuts = None build_base = None root = None def initialize_options(self): pass def finalize_options(self): self.set_undefined_options('build', ('build_base', 'build_base')) self.set_undefined_options( 'install', ('root', 'root'), ('install_base', 'prefix'), ('skip_build', 'skip_build')) self.set_undefined_options( 'build_shortcuts', ('shortcuts', 'shortcuts')) def run(self): if not self.skip_build: self.run_command('build_shortcuts') basepath = os.path.join(self.prefix, 'share', 'applications') if self.root != None: basepath = change_root(self.root, basepath) srcpath = os.path.join(self.build_base, 'share', 'applications') self.mkpath(basepath) for shortcut in self.shortcuts: shortcut = os.path.basename(shortcut) fullsrc = os.path.join(srcpath, shortcut) fullpath = os.path.join(basepath, shortcut) self.copy_file(fullsrc, fullpath) __all__ = ["build_shortcuts", "install_shortcuts"] ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/gdist/po.py�������������������������������������������������������������������������0000644�0001750�0001750�00000013311�12161032160�016023� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2007 Joe Wreschnig # # This software and accompanying documentation, if any, may be freely # used, distributed, and/or modified, in any form and for any purpose, # as long as this notice is preserved. There is no warranty, either # express or implied, for this software. """translation support This module contains commands to support building and installing gettext message catalogs. """ import os import glob from subprocess import Popen, PIPE from distutils.dep_util import newer from distutils.util import change_root from distutils.spawn import find_executable from distutils.core import Command class po_stats(Command): description = "Show translation statistics" user_options = [] build_base = None def initialize_options(self): pass def finalize_options(self): self.po_package = self.distribution.po_package self.po_directory = self.distribution.po_directory self.po_files = glob.glob(os.path.join(self.po_directory, "*.po")) self.set_undefined_options('build', ('build_base', 'build_base')) def run(self): self.run_command("build_mo") res = [] for po in self.po_files: language = os.path.basename(po).split(".")[0] p = Popen(["msgfmt", "--statistics", po], stdout=PIPE, stderr=PIPE) output = p.communicate()[1] res.append((language, output)) stats = [] for po, r in res: nums = [int(p.split()[0]) for p in r.split(",")] while len(nums) < 3: nums.append(0) trans, fuzzy, untrans = nums stats.append((po, trans, fuzzy, untrans)) stats.sort(key=lambda x: x[1], reverse=True) print "#"*30 for po, trans, fuzzy, untrans in stats: all_ = float(trans + fuzzy + untrans)/100 print "%5s: %3d%% (+%2d%% fuzzy)" % (po, trans/all_, fuzzy/all_) class check_pot(Command): description = "check for missing files in POTFILES.in" user_options = [] def initialize_options(self): pass def finalize_options(self): self.po_directory = self.distribution.po_directory self.po_package = self.distribution.po_package def run(self): oldpath = os.getcwd() os.chdir(self.po_directory) self.spawn(["intltool-update", "--maintain", "--gettext-package", self.po_package]) os.chdir(oldpath) class build_mo(Command): """build message catalog files Build message catalog (.mo) files from .po files using xgettext and intltool. These are placed directly in the build tree. """ description = "build message catalog files" user_options = [] build_base = None po_package = None po_files = None pot_file = None def initialize_options(self): pass def finalize_options(self): self.po_directory = self.distribution.po_directory self.shortcuts = self.distribution.shortcuts self.po_package = self.distribution.po_package self.set_undefined_options('build', ('build_base', 'build_base')) self.po_files = glob.glob(os.path.join(self.po_directory, "*.po")) self.pot_file = os.path.join( self.po_directory, self.po_package + ".pot") def run(self): if find_executable("intltool-update") is None: raise SystemExit("Error: 'intltool' not found.") if find_executable("msgfmt") is None: raise SystemExit("Error: 'gettext' not found.") basepath = os.path.join(self.build_base, 'share', 'locale') infilename = os.path.join(self.po_directory, "POTFILES.in") infiles = file(infilename).read().splitlines() pot_name = os.path.join( self.po_directory, self.po_package + ".pot") for filename in infiles: if newer(filename, pot_name): oldpath = os.getcwd() os.chdir(self.po_directory) self.spawn(["intltool-update", "--pot", "--gettext-package", self.po_package]) for po in self.po_files: self.spawn(["intltool-update", "--dist", "--gettext-package", self.po_package, os.path.basename(po[:-3])]) os.chdir(oldpath) for po in self.po_files: language = os.path.basename(po).split(".")[0] fullpath = os.path.join(basepath, language, "LC_MESSAGES") destpath = os.path.join(fullpath, self.po_package + ".mo") if newer(po, destpath): self.mkpath(fullpath) self.spawn(["msgfmt", "-o", destpath, po]) class install_mo(Command): """install message catalog files Copy compiled message catalog files into their installation directory, $prefix/share/locale/$lang/LC_MESSAGES/$package.mo. """ description = "install message catalog files" user_options = [] skip_build = None build_base = None install_base = None root = None def initialize_options(self): pass def finalize_options(self): self.set_undefined_options('build', ('build_base', 'build_base')) self.set_undefined_options( 'install', ('root', 'root'), ('install_base', 'install_base'), ('skip_build', 'skip_build')) def run(self): if not self.skip_build: self.run_command('build_mo') src = os.path.join(self.build_base, "share", "locale") dest = os.path.join(self.install_base, "share", "locale") if self.root != None: dest = change_root(self.root, dest) self.copy_tree(src, dest) __all__ = ["build_mo", "install_mo", "po_stats", "check_pot"] �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/gdist/icons.py����������������������������������������������������������������������0000644�0001750�0001750�00000004765�12173212464�016547� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This software and accompanying documentation, if any, may be freely # used, distributed, and/or modified, in any form and for any purpose, # as long as this notice is preserved. There is no warranty, either # express or implied, for this software. import os import subprocess from distutils.util import change_root from distutils.core import Command def update_icon_cache(*args): args = list(args) try: subprocess.check_call( ['gtk-update-icon-cache-3.0'] + args) except OSError: try: subprocess.check_call( ['gtk-update-icon-cache'] + args) except OSError: return False except subprocess.CalledProcessError: return False except subprocess.CalledProcessError: return False return True class build_icon_cache(Command): """Update the icon theme cache""" user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): if not update_icon_cache('-f', 'quodlibet/images/hicolor'): print "WARNING: gtk-update-icon-cache missing" class install_icons(Command): """Copy app icons to hicolor/pixmaps and update the global cache""" user_options = [] root = None prefix = None def initialize_options(self): pass def finalize_options(self): self.set_undefined_options('install', ('root', 'root'), ('install_base', 'prefix')) def run(self): # install into hicolor icon theme basepath = os.path.join(self.prefix, 'share', 'icons', 'hicolor') if self.root is not None: basepath = change_root(self.root, basepath) local = os.path.join("quodlibet", "images", "hicolor") scalable = os.path.join(local, "scalable", "apps") scalable_dst = os.path.join(basepath, "scalable", "apps") self.copy_tree(scalable, scalable_dst) png = os.path.join(local, "64x64", "apps") png_dst = os.path.join(basepath, "64x64", "apps") self.copy_tree(png, png_dst) # this fails during packaging.. so ignore the outcome update_icon_cache(basepath) # install png versions to /usr/share/pixmaps basepath = os.path.join(self.prefix, 'share', 'pixmaps') if self.root is not None: basepath = change_root(self.root, basepath) self.copy_tree(png, basepath) �����������quodlibet-3.0.2/quodlibet.py������������������������������������������������������������������������0000755�0001750�0001750�00000033717�12173213426�016313� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # 2012, 2013 Christoph Reiter # <quod-libet-development@googlegroups.com> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. 0 <> 0 # Python 3.x not supported! Use 2.6+ instead. import os import signal import sys import tempfile import stat play = False no_plugins = False def main(): process_arguments() from quodlibet import const if isrunning() and not const.DEBUG: print_(_("Quod Libet is already running.")) control('focus') import quodlibet quodlibet._init_signal() import quodlibet.player from quodlibet import app from quodlibet import config from quodlibet import browsers from quodlibet import const from quodlibet import util config.init(const.CONFIG) library = quodlibet.init(library=const.LIBRARY, icon="quodlibet", name="Quod Libet", title=const.PROCESS_TITLE_QL) app.library = library from quodlibet.player import PlayerError for backend in [config.get("player", "backend"), "nullbe"]: try: player = quodlibet.init_backend(backend, app.librarian) except PlayerError, error: print_e("%s. %s" % (error.short_desc, error.long_desc)) else: break app.player = player os.environ["PULSE_PROP_media.role"] = "music" os.environ["PULSE_PROP_application.icon_name"] = "quodlibet" browsers.init() from quodlibet.qltk.songlist import SongList try: ratings = config.getint("settings", "ratings") except (ValueError, TypeError): pass else: util.RATING_PRECISION = 1.0 / ratings try: default_rating = config.getfloat("settings", "default_rating") except (ValueError, TypeError): pass else: const.DEFAULT_RATING = default_rating try: symbol = config.get("settings", "rating_symbol_full").decode("utf-8") except UnicodeDecodeError: pass else: util.RATING_SYMBOL = symbol try: symbol = config.get("settings", "rating_symbol_blank").decode("utf-8") except UnicodeDecodeError: pass else: util.RATING_SYMBOL_BLANK = symbol from quodlibet.util.collection import Album try: cover_size = config.getint("browsers", "cover_size") except config.Error: pass else: if cover_size > 0: Album.COVER_SIZE = cover_size headers = config.get_columns() SongList.set_all_column_headers(headers) for opt in config.options("header_maps"): val = config.get("header_maps", opt) util.tags.add(opt, val) in_all = ("~filename ~uri ~#lastplayed ~#rating ~#playcount ~#skipcount " "~#added ~#bitrate ~current ~#laststarted ~basename " "~dirname").split() for Kind in browsers.browsers: if Kind.headers is not None: Kind.headers.extend(in_all) Kind.init(library) pm = quodlibet.init_plugins(no_plugins) if hasattr(player, "init_plugins"): player.init_plugins() from quodlibet.qltk.songsmenu import SongsMenu SongsMenu.init_plugins() from quodlibet.qltk.quodlibetwindow import QuodLibetWindow app.window = window = QuodLibetWindow(library, player) from quodlibet.plugins.events import EventPluginHandler pm.register_handler(EventPluginHandler(library.librarian, player)) from quodlibet.qltk import mmkeys_ as mmkeys from quodlibet.qltk.remote import FSInterface, FIFOControl from quodlibet.qltk.tracker import SongTracker try: from quodlibet.qltk.dbus_ import DBusHandler except ImportError: DBusHandler = lambda player, library: None mmkeys.init(window, player) FSInterface(player) FIFOControl(library, window, player) DBusHandler(player, library) SongTracker(library.librarian, player, window.playlist) from quodlibet.qltk import session session.init("quodlibet") quodlibet.enable_periodic_save(save_library=True) if play: player.paused = False quodlibet.main(window) print_d("Shutting down player device %r." % player.version_info) player.destroy() quodlibet.library.save(force=True) config.save(const.CONFIG) print_d("Finished shutdown.") def print_fifo(command): import quodlibet from quodlibet import const if not os.path.exists(const.CURRENT): quodlibet.exit("not-running") else: fd, filename = tempfile.mkstemp() try: os.unlink(filename) # mkfifo fails if the file exists, so this is safe. os.mkfifo(filename, 0600) signal.signal(signal.SIGALRM, lambda: "" + 2) signal.alarm(1) f = file(const.CONTROL, "w") signal.signal(signal.SIGALRM, signal.SIG_IGN) f.write(command + " " + filename) f.close() f = file(filename, "r") sys.stdout.write(f.read()) try: os.unlink(filename) except EnvironmentError: pass f.close() quodlibet.exit() except TypeError: try: os.unlink(filename) except EnvironmentError: pass quodlibet.exit("not-running") def print_playing(fstring="<artist~album~tracknumber~title>"): import quodlibet from quodlibet.formats._audio import AudioFile from quodlibet.parse import Pattern from quodlibet import const try: text = open(const.CURRENT, "rb").read() song = AudioFile() song.from_dump(text) print_(Pattern(fstring).format(song)) quodlibet.exit() except (OSError, IOError): print_(_("No song is currently playing.")) quodlibet.exit(True) def print_query(query): '''Queries library, dumping filenames of matches to stdout See Issue 716 ''' import quodlibet import quodlibet.library from quodlibet import const print_d("Querying library for %r" % query) library = quodlibet.library.init(const.LIBRARY) songs = library.query(query) #songs.sort() sys.stdout.write("\n".join([song("~filename") for song in songs]) + "\n") quodlibet.exit() def isrunning(): from quodlibet import const # http://code.google.com/p/quodlibet/issues/detail?id=1131 # FIXME: There is a race where control() creates a new file # instead of writing to the fifo, confusing the next QL instance. # Remove non-fifos here for now. try: if not stat.S_ISFIFO(os.stat(const.CONTROL).st_mode): print_d("%r not a FIFO. Remove it." % const.CONTROL) os.remove(const.CONTROL) except OSError: pass return os.path.exists(const.CONTROL) def control(c): import quodlibet from quodlibet import const if not isrunning(): quodlibet.exit(_("Quod Libet is not running.")) else: try: # This is a total abuse of Python! Hooray! signal.signal(signal.SIGALRM, lambda: "" + 2) signal.alarm(1) f = file(const.CONTROL, "w") signal.signal(signal.SIGALRM, signal.SIG_IGN) f.write(c) f.close() except (OSError, IOError, TypeError): print_w(_("Unable to write to %s. Removing it.") % const.CONTROL) try: os.unlink(const.CONTROL) except OSError: pass if c != 'focus': raise quodlibet.exit(True) else: quodlibet.exit() def process_arguments(): import quodlibet from quodlibet.util.uri import URI from quodlibet import util from quodlibet import const controls = ["next", "previous", "play", "pause", "play-pause", "stop", "hide-window", "show-window", "toggle-window", "focus", "quit", "unfilter", "refresh", "force-previous"] controls_opt = ["seek", "order", "repeat", "query", "volume", "filter", "set-rating", "set-browser", "open-browser", "random", "song-list", "queue"] options = util.OptionParser( "Quod Libet", const.VERSION, _("a music library and player"), _("[option]")) options.add("print-playing", help=_("Print the playing song and exit")) options.add("start-playing", help=_("Begin playing immediately")) for opt, help in [ ("next", _("Jump to next song")), ("previous", _("Jump to previous song or restart if near the beginning")), ("force-previous", _("Jump to previous song")), ("play", _("Start playback")), ("pause", _("Pause playback")), ("play-pause", _("Toggle play/pause mode")), ("stop", _("Stop playback")), ("volume-up", _("Turn up volume")), ("volume-down", _("Turn down volume")), ("status", _("Print player status")), ("hide-window", _("Hide main window")), ("show-window", _("Show main window")), ("toggle-window", _("Toggle main window visibility")), ("focus", _("Focus the running player")), ("unfilter", _("Remove active browser filters")), ("refresh", _("Refresh and rescan library")), ("print-playlist", _("Print the current playlist")), ("print-queue", _("Print the contents of the queue")), ("no-plugins", _("Start without plugins")), ("quit", _("Exit Quod Libet")), ]: options.add(opt, help=help) for opt, help, arg in [ ("seek", _("Seek within the playing song"), _("[+|-][HH:]MM:SS")), ("order", _("Set or toggle the playback order"), "[order]|toggle"), ("repeat", _("Turn repeat off, on, or toggle it"), "0|1|t"), ("volume", _("Set the volume"), "(+|-|)0..100"), ("query", _("Search your audio library"), _("query")), ("play-file", _("Play a file"), Q_("command|filename")), ("set-rating", _("Rate the playing song"), "0.0..1.0"), ("set-browser", _("Set the current browser"), "BrowserName"), ("open-browser", _("Open a new browser"), "BrowserName"), ("queue", _("Show or hide the queue"), "on|off|t"), ("song-list", _("Show or hide the main song list"), "on|off|t"), ("random", _("Filter on a random value"), Q_("command|tag")), ("filter", _("Filter on a tag value"), _("tag=value")), ("enqueue", _("Enqueue a file or query"), "%s|%s" % ( Q_("command|filename"), _("query"))), ("enqueue-files", _("Enqueue comma-separated files"), "%s[,%s..]" % ( _("filename"), _("filename"))), ("print-query", _("Print filenames of results of query to stdout"), _("query")), ("unqueue", _("Unqueue a file or query"), "%s|%s" % ( Q_("command|filename"), _("query"))), ]: options.add(opt, help=help, arg=arg) options.add("sm-config-prefix", arg="dummy") options.add("sm-client-id", arg="prefix") options.add("screen", arg="dummy") def is_vol(str): if str[0] in '+-': if len(str) == 1: return True str = str[1:] return str.isdigit() def is_time(str): if str[0] not in "+-0123456789": return False elif str[0] in "+-": str = str[1:] parts = str.split(":") if len(parts) > 3: return False else: return not (False in [p.isdigit() for p in parts]) def is_float(str): try: float(str) except ValueError: return False else: return True validators = { "order": ["0", "1", "t", "toggle", "inorder", "shuffle", "weighted", "onesong"].__contains__, "repeat": ["0", "1", "t", "on", "off", "toggle"].__contains__, "volume": is_vol, "seek": is_time, "set-rating": is_float, } opts, args = options.parse() for command, arg in opts.items(): if command in controls: control(command) elif command in controls_opt: if command in validators and not validators[command](arg): print_e(_("Invalid argument for '%s'.") % command) print_e(_("Try %s --help.") % sys.argv[0]) quodlibet.exit(True) else: control(command + " " + arg) elif command == "status": print_fifo("status") elif command == "print-playlist": print_fifo("dump-playlist") elif command == "print-queue": print_fifo("dump-queue") elif command == "volume-up": control("volume +") elif command == "volume-down": control("volume -") elif command == "enqueue" or command == "unqueue": try: filename = URI(arg).filename except ValueError: filename = arg control(command + " " + filename) elif command == "enqueue-files": control(command + " " + arg) elif command == "play-file": try: filename = URI(arg).filename except ValueError: filename = os.path.abspath(util.expanduser(arg)) if os.path.isdir(filename): control("add-directory " + filename) else: control("add-file " + filename) elif command == "print-playing": try: print_playing(args[0]) except IndexError: print_playing() elif command == "print-query": print_query(arg) elif command == "start-playing": global play play = True elif command == "no-plugins": global no_plugins no_plugins = True if __name__ == "__main__": main() �������������������������������������������������quodlibet-3.0.2/MANIFEST.in�������������������������������������������������������������������������0000644�0001750�0001750�00000000654�12173212464�015477� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������include COPYING include HACKING include NEWS include README include po/*.po include po/POTFILES.in include po/POTFILES.skip include man/* include quodlibet/images/README recursive-include quodlibet/images/hicolor/ *.cache *.theme *.svg *.png include tests/data/* recursive-include tests *.py include gdist/*.py include data/*.desktop.in include data/*.ini include MANIFEST.in recursive-include docs conf.py Makefile *.rst *.png ������������������������������������������������������������������������������������quodlibet-3.0.2/exfalso.py��������������������������������������������������������������������������0000755�0001750�0001750�00000003000�12161032160�015731� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env python # Copyright 2004-2005 Joe Wreschnig, Niklas Janlert # 2012 Christoph Reiter # <quod-libet-development@googlegroups.com> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. 0 <> 0 # Python 3.x not supported! Use 2.6+ instead. import os import sys import quodlibet from quodlibet import app from quodlibet import util from quodlibet import const from quodlibet import config def main(): quodlibet._init_signal() opts = util.OptionParser( "Ex Falso", const.VERSION, _("an audio tag editor"), "[%s]" % _("directory")) sys.argv.append(os.path.abspath(".")) opts, args = opts.parse() args[0] = os.path.realpath(args[0]) config.init(const.CONFIG) app.library = quodlibet.init(icon="exfalso", name="Ex Falso", title=const.PROCESS_TITLE_EF) app.player = quodlibet.init_backend("nullbe", app.librarian) pm = quodlibet.init_plugins() pm.rescan() from quodlibet.qltk.exfalsowindow import ExFalsoWindow app.window = ExFalsoWindow(app.library, args[0]) app.window.init_plugins() from quodlibet.qltk import session session.init("exfalso") quodlibet.enable_periodic_save(save_library=False) quodlibet.main(app.window) config.save(const.CONFIG) print_d("Finished shutdown.") if __name__ == "__main__": main() quodlibet-3.0.2/operon.py���������������������������������������������������������������������������0000755�0001750�0001750�00000054416�12161032160�015613� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/python # Copyright 2012,2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation """A simple command line tagger""" # TODO: # - unicode handling # - some commands missing import sys import os import string import re from optparse import OptionParser from quodlibet.formats import MusicFile from quodlibet import config from quodlibet import const from quodlibet import parse from quodlibet import util from quodlibet.util.dprint import print_, Colorise from quodlibet.util.tags import STANDARD_TAGS, MACHINE_TAGS, sortkey PROGRAM = os.path.basename(sys.argv[0]) VERSION = const.VERSION COMMANDS = [] class CommandError(Exception): pass class Command(object): """Base class for commands. Subclasses can override _add_options() and _execute() """ NAME = None DESCRIPTION = None USAGE = None def __init__(self, options=None): usage = "%s %s %s" % (PROGRAM, self.NAME, self.USAGE) self.__parser = OptionParser(usage=usage, description=self.DESCRIPTION) if options is None: options = self.__parser.parse_args([])[0] self.__options = options self._add_options(self.__parser) def _add_options(self, parser): """Override to add options to the parser""" pass @property def verbose(self): return self.__options.verbose @verbose.setter def verbose(self, value): self.__options.verbose = bool(value) def log(self, text): """Print output if --verbose was passed""" if self.verbose: return print_(text, sys.stderr) def load_song(self, path): """Load a song. Raises CommandError in case it fails""" self.log("Load file: %r" % path) song = MusicFile(path) if not song: raise CommandError(_("Failed to load file: %r") % path) return song def save_songs(self, songs): """Save all passed songs""" self.log("Saving songs...") for song in songs: song.write() def _execute(self, options, args): """Override to execute something""" raise NotImplemented def print_help(self, file=None): """Print the help information about the comand""" if file is None: file = sys.stdout self.__parser.print_help(file=file) def execute(self, args): """Execute the command""" options, args = self.__parser.parse_args(args) self._execute(options, args) class ListCommand(Command): NAME = "list" DESCRIPTION = _("List tags") USAGE = "[-a] [-t] [-c <c1>,<c2>...] <file>" def _add_options(self, p): p.add_option("-t", "--terse", action="store_true", help=_("Print terse output")) p.add_option("-c", "--columns", action="store", type="string", help=_("Columns to display and order in terse mode (%s)") % "desc,value,tag") p.add_option("-a", "--all", action="store_true", help=_("Also list programmatic tags")) def _execute(self, options, args): if len(args) < 1: raise CommandError(_("Not enough arguments")) elif len(args) > 1: raise CommandError(_("Too many arguments")) path = args[0] headers = [_("Description"), _("Value"), _("Tag")] nicks = ["desc", "value", "tag"] if not options.columns: order = nicks else: order = map(str.strip, options.columns.split(",")) song = self.load_song(path) tags = list_tags(song, machine=options.all, terse=options.terse) if options.terse: print_terse_table(tags, nicks, order) else: print_table(tags, headers, nicks, order) class TagsCommand(Command): NAME = "tags" DESCRIPTION = _("List all common tags") USAGE = "[-t] [-c <c1>,<c2>...]" def _add_options(self, p): p.add_option("-t", "--terse", action="store_true", help=_("Print terse output")) p.add_option("-c", "--columns", action="store", type="string", help=_("Columns to display and order in terse mode (%s)") % "tag,desc") def _execute(self, options, args): if len(args) != 0: raise CommandError(_("Too many arguments")) headers = [_("Tag"), _("Description")] nicks = ["tag", "desc"] if not options.columns: order = nicks else: order = map(str.strip, options.columns.split(",")) tags = [] for key in STANDARD_TAGS: tags.append((key, util.tag(key))) tags.sort() if not options.terse: print_table(tags, headers, nicks, order) else: print_terse_table(tags, nicks, order) class DumpCommand(Command): NAME = "dump" DESCRIPTION = _("Print all tags to stdout") USAGE = "<src-file>" def _execute(self, options, args): if len(args) < 1: raise CommandError(_("Not enough arguments")) elif len(args) > 1: raise CommandError(_("Too many arguments")) # load file path = args[0] song = self.load_song(path) # dump, sort and skip internal tags lines = sorted(song.to_dump().splitlines()) print_("\n".join((l for l in lines if not l.startswith("~")))) class LoadCommand(Command): NAME = "load" DESCRIPTION = _("Load tags dumped with 'dump'") USAGE = "[--dry-run] [--ignore-errors] <dest-file> [<tag-file>]" def _add_options(self, p): p.add_option("--dry-run", action="store_true", help=_("Show changes, don't apply them")) p.add_option("--ignore-errors", action="store_true", help=_("Skip tags that can't be written")) def _execute(self, options, args): if len(args) < 1: raise CommandError(_("Not enough arguments")) elif len(args) > 2: raise CommandError(_("Too many arguments")) class CopyCommand(Command): NAME = "copy" DESCRIPTION = _("Copy tags from one file to another") USAGE = "[--dry-run] [--ignore-errors] <source> <dest>" def _add_options(self, p): p.add_option("--dry-run", action="store_true", help=_("Show changes, don't apply them")) p.add_option("--ignore-errors", action="store_true", help=_("Skip tags that can't be written")) def _execute(self, options, args): if len(args) < 2: raise CommandError(_("Not enough arguments")) elif len(args) > 2: raise CommandError(_("Too many arguments")) if options.dry_run: self.verbose = True source_path = args[0] dest_path = args[1] source = self.load_song(source_path) dest = self.load_song(dest_path) for key in source.realkeys(): self.log("Copy %r" % key) if not options.ignore_errors and not dest.can_change(key): raise CommandError(_("Can't copy tag %r to file: %r") % (key, dest_path)) for value in source.list(key): dest.add(key, value) if not options.dry_run: self.save_songs([dest]) class EditCommand(Command): NAME = "edit" DESCRIPTION = _("Edit tags in an editor") USAGE = "[--dry-run] <file> [<files>]" def _add_options(self, p): p.add_option("--dry-run", action="store_true", help=_("Show changes, don't apply them")) def _execute(self, options, args): if len(args) < 1: raise CommandError(_("Not enough arguments")) class SetCommand(Command): NAME = "set" DESCRIPTION = _("Set a tag and remove existing values") USAGE = "[--dry-run] <tag> <value> <file> [<files>]" def _add_options(self, p): p.add_option("--dry-run", action="store_true", help=_("Show changes, don't apply them")) def _execute(self, options, args): if len(args) < 3: raise CommandError(_("Not enough arguments")) tag = args[0] value = args[1].decode("utf-8") paths = args[2:] songs = [] for path in paths: song = self.load_song(path) if not song.can_change(tag): raise CommandError(_("Can not set %r") % tag) self.log("Set %r to %r" % (value, tag)) if tag in song: del song[tag] song.add(tag, value) songs.append(song) if not options.dry_run: self.save_songs(songs) class ClearCommand(Command): NAME = "clear" DESCRIPTION = _("Remove tags") USAGE = "[--dry-run] [-a | -e <pattern> | <tag>] <file> [<files>]" def _add_options(self, p): p.add_option("--dry-run", action="store_true", help=_("Show changes, don't apply them")) p.add_option("-e", "--regexp", action="store", type="string", help=_("Value is a regular expression")) p.add_option("-a", "--all", action="store_true", help=_("Remove all tags")) def _execute(self, options, args): if options.all and options.regexp is not None: raise CommandError(_("Can't combine '--all' with '--regexp'")) if options.regexp is not None or options.all: if len(args) < 1: raise CommandError(_("Not enough arguments")) paths = args else: if len(args) < 2: raise CommandError(_("Not enough arguments")) paths = args[1:] if options.dry_run: self.verbose = True songs = [] for path in paths: song = self.load_song(path) tags = [] realkeys = song.realkeys() if options.all: tags.extend(realkeys) elif options.regexp is not None: e = re.compile(options.regexp) tags.extend(filter(e.match, realkeys)) else: tag = args[0] if tag in realkeys: tags.append(tag) for tag in tags: self.log("Remove tag %r" % tag) if not song.can_change(tag): raise CommandError( _("Can't remove %r from %r") % (tag, path)) del song[tag] if tags: songs.append(song) if not options.dry_run: self.save_songs(songs) class RemoveCommand(Command): NAME = "remove" DESCRIPTION = _("Remove a tag value") USAGE = "[--dry-run] <tag> [-e <pattern> | <value>] <file> [<files>]" def _add_options(self, p): p.add_option("--dry-run", action="store_true", help=_("Show changes, don't apply them")) p.add_option("-e", "--regexp", action="store", type="string", help=_("Value is a regular expression")) def _execute(self, options, args): if options.regexp is None: if len(args) < 3: raise CommandError(_("Not enough arguments")) else: if len(args) < 2: raise CommandError(_("Not enough arguments")) if options.dry_run: self.verbose = True tag = args[0] if options.regexp is not None: match = re.compile(options.regexp).match paths = args[1:] else: value = args[1] paths = args[2:] match = lambda v: v == value songs = [] for path in paths: song = self.load_song(path) if tag not in song: continue for v in song.list(tag): if match(v): self.log("Remove %r from %r" % (v, tag)) song.remove(tag, v) songs.append(song) if not options.dry_run: self.save_songs(songs) class AddCommand(Command): NAME = "add" DESCRIPTION = _("Add a tag value") USAGE = "<tag> <value> <file> [<files>]" def _execute(self, options, args): if len(args) < 3: raise CommandError(_("Not enough arguments")) tag = args[0] value = args[1].decode("utf-8") paths = args[2:] songs = [] for path in paths: song = self.load_song(path) if not song.can_change(tag): raise CommandError(_("Can not set %r") % tag) self.log("Add %r to %r" % (value, tag)) song.add(tag, value) songs.append(song) self.save_songs(songs) class InfoCommand(Command): NAME = "info" DESCRIPTION = _("List file information") USAGE = "[-t] [-c <c1>,<c2>...] <file>" def _add_options(self, p): p.add_option("-t", "--terse", action="store_true", help=_("Print terse output")) p.add_option("-c", "--columns", action="store", type="string", help=_("Columns to display and order in terse mode (%s)") % "desc,value") def _execute(self, options, args): if len(args) < 1: raise CommandError(_("Not enough arguments")) elif len(args) > 1: raise CommandError(_("Too many arguments")) path = args[0] song = self.load_song(path) headers = [_("Description"), _("Value")] nicks = ["desc", "value"] if not options.columns: order = nicks else: order = map(str.strip, options.columns.split(",")) if not options.terse: tags = [] for key in ["~format", "~length", "~#bitrate", "~filesize"]: tags.append((util.tag(key), str(song(key)))) print_table(tags, headers, nicks, order) else: tags = [] for key in ["~format", "~#length", "~#bitrate", "~#filesize"]: tags.append((key.lstrip("#~"), str(song(key)))) print_terse_table(tags, nicks, order) class ImageExtractCommand(Command): NAME = "image-extract" DESCRIPTION = _("Extract embedded images") USAGE = "<file> [<dest-name>]" def _execute(self, options, args): if len(args) < 1: raise CommandError(_("Not enough arguments")) class RenameCommand(Command): NAME = "rename" DESCRIPTION = _("Rename files based on tags") USAGE = "[--dry-run] <pattern> <file> [<files>]" def _add_options(self, p): p.add_option("--dry-run", action="store_true", help="show changes, don't apply them") def _execute(self, options, args): if len(args) < 1: raise CommandError("Not enough arguments") class FillCommand(Command): NAME = "fill" DESCRIPTION = _("Fill tags based on the file path") USAGE = "[--dry-run] <pattern> <file> [<files>]" def _add_options(self, p): p.add_option("--dry-run", action="store_true", help="show changes, don't apply them") def _execute(self, options, args): if len(args) < 1: raise CommandError("Not enough arguments") class FillTracknumberCommand(Command): NAME = "fill-tracknumber" DESCRIPTION = _("Fill tracknumbers for all files") USAGE = "[--dry-run] [--start] [--total] <file> [<files>]" def _add_options(self, p): p.add_option("--dry-run", action="store_true", help="show changes, don't apply them") p.add_option("--start", action="store_true", help="tracknumber to start with") p.add_option("--total", action="store_true", help="total number of tracks") def _execute(self, options, args): if len(args) < 1: raise CommandError("Not enough arguments") class PrintCommand(Command): NAME = "print" DESCRIPTION = _("Print tags based on the given pattern") USAGE = "[-p <pattern>] <file> [<files>]" def _add_options(self, p): p.add_option("-p", "--pattern", action="store", type="string", help="use a custom pattern") def _execute(self, options, args): if len(args) < 1: raise CommandError("Not enough arguments") pattern = options.pattern if pattern is None: pattern = "<artist~album~tracknumber~title>" self.log("Using pattern: %r" % pattern) try: pattern = parse.Pattern(pattern) except ValueError: raise CommandError("Invalid pattern: %r" % pattern) paths = args for path in paths: print_(pattern % self.load_song(path)) class HelpCommand(Command): NAME = "help" DESCRIPTION = _("Display help information") USAGE = "[<command>]" def _execute(self, options, args): if len(args) > 1: raise CommandError("Too many arguments") for cmd in COMMANDS: if cmd.NAME == args[0]: cmd().print_help() break else: raise CommandError("Unknown command") def filter_table(rows, nicks, order): """Returns a new table with rows filtered and reordered""" if nicks == order: return rows mapping = [] lower = [h.lower() for h in nicks] for o in order: try: index = lower.index(o.lower()) except ValueError: raise CommandError( _("'%s' is not a valid column name (%s).") % (o, ",".join(nicks))) else: mapping.append(index) if not mapping: return [] new_rows = [] for row in rows: new_rows.append([row[i] for i in mapping]) return new_rows def print_table(rows, headers, nicks, order): """Print a fancy table""" rows.insert(0, headers) rows = filter_table(rows, nicks, order) if not rows: return widths = [] for c in range(len(rows[0])): widths.append(max(map(lambda r: len(r[c]), rows))) seperator = " %s " % Colorise.gray("|") format_string = seperator.join(["%%-%ds" % w for w in widths]) header = [] for i, h in enumerate(rows.pop(0)): header.append(string.ljust(h, widths[i], " ")) line_width = len(" ".join(header)) + 2 header = [Colorise.bold(h) for h in header] header_line = " " + (" %s " % Colorise.gray("|")).join(header) print_(header_line.rstrip()) print_(Colorise.gray("-" * line_width)) for row in rows: print_(" " + (format_string % tuple(row)).rstrip()) def print_terse_table(rows, nicks, order): """Print a terse table""" for row in filter_table(rows, nicks, order): row = [r.replace("\\", "\\\\") for r in row] row = [r.replace(":", r"\:") for r in row] print_(":".join(row)) def list_tags(song, machine=False, terse=False): """Return a list of key, value pairs""" keys = set(song.realkeys()) if not machine: keys.difference_update(MACHINE_TAGS) tags = [] for key in sorted(keys, key=sortkey): for value in song.list(key): if not terse: # QL can't handle multiline values and splits them by \n. # Tags with Windows line endings leave a \r, messing up the # table layout value = value.rstrip("\r") # Normalize tab value = value.replace("\t", " ") tags.append((util.tag(key), value, key)) return tags def print_help(parser, file=None): """Print a short help list for all commands""" if file is None: file = sys.stdout parser.print_help(file=file) cl = ["", "Commands:"] for command in COMMANDS: cl.append(" %-17s %s" % (command.NAME, command.DESCRIPTION)) cl.append("") cl.append("See '%s help <command>' for more information " "on a specific command." % PROGRAM) print_("\n".join(cl), file) def run(argv=sys.argv): # the main optparser usage = "%s [--version] [--help] [--verbose] <command> [<args>]" % PROGRAM parser = OptionParser(usage=usage) parser.remove_option("--help") parser.add_option("-h", "--help", action="store_true") parser.add_option("--version", action="store_true", help="print version") parser.add_option("-v", "--verbose", action="store_true", help="verbose output") # no args, print help (might change in the future) if len(argv) <= 1: print_help(parser, file=sys.stderr) return 1 # collect options for the main command and get the command offset offset = -1 pre_command = [] for i, a in enumerate(argv): if i == 0: continue elif a.startswith("-"): pre_command.append(a) else: offset = i break # parse the global options options = parser.parse_args(pre_command)[0] # --help somewhere if options.help: print_help(parser) return 0 # --version somewhere if options.version: print_("%s version %s" % (PROGRAM, VERSION)) return 0 # no sub command followed, help to stderr if offset == -1: print_help(parser, file=sys.stderr) return 1 arg = argv[offset] # special case help and list all commands if arg == "help": # no command, list all commands if len(argv) == 2: print_help(parser) return 0 # get the right sub command and pass the remaining args for command in COMMANDS: if command.NAME == arg: cmd = command(options) try: cmd.execute(argv[offset + 1:]) except CommandError, e: print_("%s: %s" % (command.NAME, e), sys.stderr) return 1 break else: print_("Unknown command '%s'. See '%s help'." % (arg, PROGRAM), sys.stderr) return 1 return 0 COMMANDS.extend([ListCommand, DumpCommand, CopyCommand, SetCommand, RemoveCommand, AddCommand, PrintCommand, HelpCommand, ClearCommand, InfoCommand, TagsCommand]) COMMANDS.sort(key=lambda c: c.NAME) # TODO # EditCommand, ImageExtractCommand, FillCommand, RenameCommand # FillTracknumberCommand, LoadCommand if __name__ == "__main__": config.init() sys.exit(run()) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/��������������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�015720� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/parse/��������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017032� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/parse/_match.py�����������������������������������������������������������0000644�0001750�0001750�00000020272�12173213426�020645� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2005 Joe Wreschnig, Michael Urman # 2011 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import time import operator from quodlibet.util import fsdecode class error(ValueError): pass class ParseError(error): pass TIME_KEYS = ["added", "mtime", "lastplayed", "laststarted"] SIZE_KEYS = ["filesize"] FS_KEYS = ["~filename", "~basename", "~dirname"] # True if the object matches any of its REs. class Union(object): def __init__(self, res): self.res = res def search(self, data): for re in self.res: if re.search(data): return True return False def __repr__(self): return "<Union %r>" % self.res def __or__(self, other): if isinstance(other, Union): return Union(self.res + other.res) else: return Union(self.res + [other]) __ror__ = __or__ def __and__(self, other): if not isinstance(other, Inter): return Inter([self, other]) return NotImplemented def __neg__(self): return Neg(self) # True if the object matches all of its REs. class Inter(object): def __init__(self, res): self.res = res def search(self, data): for re in self.res: if not re.search(data): return False return True def __repr__(self): return "<Inter %r>" % self.res def __and__(self, other): if isinstance(other, Inter): return Inter(self.res + other.res) else: return Inter(self.res + [other]) __rand__ = __and__ def __or__(self, other): if not isinstance(other, Union): return Union([self, other]) return NotImplemented def __neg__(self): return Neg(self) # True if the object doesn't match its RE. class Neg(object): def __init__(self, res): self.res = res def search(self, data): return not self.res.search(data) def __repr__(self): return "<Neg %r>" % self.res def __and__(self, other): if not isinstance(other, Inter): return Inter([self, other]) return NotImplemented def __or__(self, other): if not isinstance(other, Union): return Union([self, other]) return NotImplemented def __neg__(self): return self.res # Numeric comparisons class Numcmp(object): def __init__(self, tag, op, value): if isinstance(tag, unicode): self.__tag = tag.encode("utf-8") else: self.__tag = tag self.__ftag = "~#" + self.__tag self.__op, self.__value = map_numeric_op(self.__tag, op, value) def search(self, data): num = data(self.__ftag, None) if num is not None: return self.__op(round(num, 2), self.__value) return False def __repr__(self): return "<Numcmp tag=%r, op=%r, value=%.2f>" % ( self.__tag, self.__op.__name__, self.__value) def __and__(self, other): if not isinstance(other, Inter): return Inter([self, other]) return NotImplemented def __or__(self, other): if not isinstance(other, Union): return Union([self, other]) return NotImplemented def __neg__(self): return Neg(self) # See if a property of the object matches its RE. class Tag(object): # Shorthand for common tags. ABBRS = {"a": "artist", "b": "album", "v": "version", "t": "title", "n": "tracknumber", "d": "date", } def __init__(self, names, res): self.res = res self.__names = [] self.__intern = [] self.__fs = [] names = [Tag.ABBRS.get(n.lower(), n.lower()) for n in names] for name in names: if name[:1] == "~": if name in FS_KEYS: self.__fs.append(name) else: self.__intern.append(name) else: self.__names.append(name) def search(self, data): for name in self.__names: val = data.get(name) if val is None: # filename is the only real entry that's a path if name == "filename": val = fsdecode(data.get("~filename", "")) else: val = data.get("~" + name, "") if self.res.search(val): return True for name in self.__intern: if self.res.search(data(name)): return True for name in self.__fs: if self.res.search(fsdecode(data(name))): return True return False def __repr__(self): names = self.__names + self.__intern return ("<Tag names=%r, res=%r>" % (names, self.res)) def __and__(self, other): if not isinstance(other, Inter): return Inter([self, other]) return NotImplemented def __or__(self, other): if not isinstance(other, Union): return Union([self, other]) return NotImplemented def __neg__(self): return Neg(self) def map_numeric_op(tag, op, value, time_=None): """Maps a human readable numeric comparison to something we can use. Handles cases like '< 3 days', '>5MB' etc.. If parsing fails, raises a ParseError. Takes a tag, an operator string and and a value string: op, v = map_numeric_op("added", "<", "today") Returns an (operator function, numeric value) tuple: if op(v, song("~#added")): ... (time_ is only used for testing) """ if tag in TIME_KEYS: if op == ">": op = "<" elif op == "<": op = ">" elif op == "<=": op = ">=" elif op == ">=": op = "<=" op_fun = {"<": operator.lt, "<=": operator.le, ">": operator.gt, ">=": operator.ge, "=": operator.eq, "!=": operator.ne}.get(op, None) if op_fun is None: raise ParseError("Unknown operator %s" % op) op = op_fun value = value.lower().strip() if tag in TIME_KEYS: if value == "now": value = (time_ or time.time()) return (op, value) if value == "today": value = (time_ or time.time()) - 24 * 60 * 60 return (op, value) # check for time formats: "5:30" # TODO: handle "5:30 ago" try: hms = map(int, value.split(":")) except ValueError: pass else: value = 0 for t in hms: value *= 60 value += t if tag in TIME_KEYS: value = (time_ or time.time()) - value return (op, value) # get the biggest float/int max_val = "" for i in xrange(1, len(value) + 1): try: float(value[:i]) max_val = value[:i] except ValueError: break if not max_val: raise ParseError("No numeric value %r" % value) unit = value[len(max_val):].strip() try: value = int(max_val) except ValueError: value = float(max_val) if tag in TIME_KEYS: part = unit.split()[0].rstrip("s") if part == "minute": value *= 60 elif part == "hour": value *= 60 * 60 elif part == "day": value *= 24 * 60 * 60 elif part == "week": value *= 7 * 24 * 60 * 60 elif part == "year": value *= 365 * 24 * 60 * 60 elif unit: raise ParseError("No time unit: %r" % unit) value = int((time_ or time.time()) - value) elif tag in SIZE_KEYS: if unit.startswith("g"): value *= 1024 ** 3 elif unit.startswith("m"): value *= 1024 ** 2 elif unit.startswith("k"): value *= 1024 elif unit.startswith("b"): pass elif unit: raise ParseError("No size unit: %r" % unit) elif unit: raise ParseError("Tag %r does not support units (%r)" % (tag, unit)) return (op, value) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/parse/_pattern.py���������������������������������������������������������0000644�0001750�0001750�00000027664�12173213426�021242� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2010 Joe Wreschnig, Michael Urman # Copyright 2010,2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation # Pattern := (<String> | <Tags>)* # String := ([^<>|\\]|\\.)+, a string # Tags := "<" String [ "|" Pattern [ "|" Pattern ] ] ">" import os import re from quodlibet import util from quodlibet.parse._scanner import Scanner # Token types. (OPEN, CLOSE, TEXT, COND, EOF) = range(5) class error(ValueError): pass class ParseError(error): pass class LexerError(error): pass class PatternLexeme(object): _reverse = {OPEN: "OPEN", CLOSE: "CLOSE", TEXT: "TEXT", COND: "COND", EOF: "EOF"} def __init__(self, typ, lexeme): self.type = typ self.lexeme = lexeme def __repr__(self): return (super(PatternLexeme, self).__repr__().split()[0] + " type=" + repr(self.type) + " (" + str(self._reverse[self.type]) + "), lexeme=" + repr(self.lexeme) + ">") class PatternLexer(Scanner): def __init__(self, s): self.string = s.strip() Scanner.__init__(self, [(r"([^<>|\\]|\\.)+", self.text), (r"[<>|]", self.table), ]) def text(self, scanner, string): return PatternLexeme(TEXT, re.sub(r"\\(.)", r"\1", string)) def table(self, scanner, string): return PatternLexeme( {"|": COND, "<": OPEN, ">": CLOSE}[string], string) def __iter__(self): s = self.scan(self.string) if s[1] != "": raise LexerError("characters left over in string") else: return iter(s[0] + [PatternLexeme(EOF, "")]) class PatternNode(object): def __init__(self): self.children = [] def __repr__(self): return "Pattern(%s)" % (", ".join(map(repr, self.children))) class TextNode(object): def __init__(self, text): self.text = text def __repr__(self): return "Text(\"%s\")" % self.text class ConditionNode(object): def __init__(self, tag, ifcase, elsecase): self.tag = tag self.ifcase = ifcase self.elsecase = elsecase def __repr__(self): t, i, e = self.tag, repr(self.ifcase), repr(self.elsecase) return "Condition(tag: \"%s\", if: %s, else: %s)" % (t, i, e) class TagNode(object): def __init__(self, tag): self.tag = tag def __repr__(self): return "Tag(\"%s\")" % self.tag class PatternParser(object): def __init__(self, tokens): self.tokens = iter(tokens) self.lookahead = self.tokens.next() self.node = self.Pattern() def Pattern(self): node = PatternNode() while self.lookahead.type in [OPEN, TEXT]: la = self.lookahead self.match(TEXT, OPEN) if la.type == TEXT: node.children.append(TextNode(la.lexeme)) elif la.type == OPEN: node.children.extend(self.Tags()) return node def Tags(self): nodes = [] tag = self.lookahead.lexeme # fix bad tied tags if tag[:1] != "~" and "~" in tag: tag = "~" + tag try: self.match(TEXT) except ParseError: while self.lookahead.type not in [CLOSE, EOF]: self.match(self.lookahead.type) return nodes if self.lookahead.type == COND: self.match(COND) ifcase = self.Pattern() if self.lookahead.type == COND: self.match(COND) elsecase = self.Pattern() else: elsecase = None nodes.append(ConditionNode(tag, ifcase, elsecase)) try: self.match(CLOSE) except ParseError: nodes.pop(-1) while self.lookahead.type not in [EOF, OPEN]: self.match(self.lookahead.type) else: nodes.append(TagNode(tag)) try: self.match(CLOSE) except ParseError: nodes.pop(-1) while self.lookahead.type not in [EOF, OPEN]: self.match(self.lookahead.type) return nodes def match(self, *tokens): if tokens != [EOF] and self.lookahead.type == EOF: raise ParseError("The search string ended, but more " "tokens were expected.") try: if self.lookahead.type in tokens: self.lookahead = self.tokens.next() else: raise ParseError("The token '%s' is not the type exected." % ( self.lookahead.lexeme)) except StopIteration: self.lookahead = PatternLexeme(EOF, "") class PatternFormatter(object): _format = None _post = None def __init__(self, func, list_func, tags): self.__func = func self.__list_func = list_func self.tags = set(tags) self.format(self.Dummy()) # Validate string class Dummy(dict): def comma(self, *args): return u"_" def list_separate(self, *args): return [u""] class SongProxy(object): def __init__(self, realsong, formatter): self.__song = realsong self.__formatter = formatter def comma(self, key): value = self.__song.comma(key) if isinstance(value, str): value = util.fsdecode(value) elif not isinstance(value, unicode): if isinstance(value, float): value = "%.2f" % value value = unicode(value) if self.__formatter: return self.__formatter(key, value) return value def list_separate(self, key): if key.startswith("~#") and "~" not in key[2:]: value = self.__song(key) if isinstance(value, float): value = "%.2f" % value values = [unicode(value)] else: values = self.__song.list_separate(key) if self.__formatter: return [self.__formatter(key, v) for v in values] return values def format(self, song): value = "".join(self.__func(self.SongProxy(song, self._format))) if self._post: return self._post(value, song) return value def format_list(self, song): """Returns a set of formatted patterns with all tag combinations: <performer>-bla returns [performer1-bla, performer2-bla]""" vals = [""] for val in self.__list_func(self.SongProxy(song, self._format)): if type(val) == list: vals = [r + part for part in val for r in vals] else: vals = [r + val for r in vals] if self._post: return set([self._post(v, song) for v in vals]) return set(vals) __mod__ = format class PatternCompiler(object): def __init__(self, root): self.__root = root.node def compile(self, song_func): tags = set() content = [ "def f(s):", " x = s." + song_func, " r = []", " a = r.append"] content.extend(self.__pattern(self.__root, {}, tags)) content.append(" return r") code = "\n".join(content) scope = {} exec compile(code, "<string>", "exec") in scope return scope["f"], tags def __escape(self, text): text = text.replace("\\", r"\\") text = text.replace("\"", "\\\"") return text.replace("\n", r"\n") def __put_tag(self, text, scope, tag): tag = self.__escape(tag) if tag not in scope: scope[tag] = 't%d' % len(scope) text.append('%s = x("%s")' % (scope[tag], tag)) return tag def __tag(self, node, scope, tags): text = [] if isinstance(node, TextNode): text.append('a("%s")' % self.__escape(node.text)) elif isinstance(node, ConditionNode): tag = self.__put_tag(text, scope, node.tag) ic = self.__pattern(node.ifcase, dict(scope), tags) ec = self.__pattern(node.elsecase, dict(scope), tags) if not ic and not ec: text.pop(-1) elif ic: text.append('if %s:' % scope[tag]) text.extend(ic) if ec: text.append('else:') text.extend(ec) else: text.append('if not %s:' % scope[tag]) text.extend(ec) elif isinstance(node, TagNode): tags.update(util.tagsplit(node.tag)) tag = self.__put_tag(text, scope, node.tag) text.append('a(%s)' % scope[tag]) return text def __pattern(self, node, scope, tags): text = [] if isinstance(node, PatternNode): for child in node.children: text.extend(self.__tag(child, scope, tags)) return map(" ".__add__, text) def Pattern(string, Kind=PatternFormatter, MAX_CACHE_SIZE=100, cache={}): if (Kind, string) not in cache: if len(cache) > MAX_CACHE_SIZE: cache.clear() comp = PatternCompiler(PatternParser(PatternLexer(string))) func, tags = comp.compile("comma") list_func, tags = comp.compile("list_separate") cache[(Kind, string)] = Kind(func, list_func, tags) return cache[(Kind, string)] def _number(key, value): if key == "tracknumber": parts = value.split("/") try: decimals = len(str(int(parts[1]))) except (IndexError, ValueError): decimals = 2 try: return "%0*d" % (max(2, decimals), int(parts[0])) except (TypeError, ValueError): return value elif key == "discnumber": parts = value.split("/") try: return "%02d" % int(parts[0]) except (TypeError, ValueError): return value else: return value class _FileFromPattern(PatternFormatter): def _format(self, key, value): value = _number(key, value) value = value.replace(os.sep, "_") value = value.replace(u"\uff0f", "_") value = value.strip() return value def _post(self, value, song): if value: fn = song.get("~filename", ".") ext = fn[fn.rfind("."):].lower() val_ext = value[-len(ext):].lower() if not ext == val_ext: value += ext.lower() if os.name == "nt": value = util.strip_win32_incompat_from_path(value) value = util.expanduser(value) # Limit each path section to 255 (bytes on linux, chars on win). # http://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits path, ext = os.path.splitext(value) path = map(util.fsnative, path.split(os.sep)) limit = [255] * len(path) limit[-1] -= len(util.fsnative(ext)) elip = lambda (p, l): (len(p) > l and p[:l - 2] + "..") or p path = os.sep.join(map(elip, zip(path, limit))) value = util.fsdecode(path) + ext if os.sep in value and not os.path.isabs(value): raise ValueError("Pattern is not rooted") return value class _XMLFromPattern(PatternFormatter): def _format(self, key, value): return util.escape(value) def FileFromPattern(string): # On Windows, users may use backslashes in patterns as path separators. # Since Windows filenames can't use '<>|' anyway, preserving backslash # escapes is unnecessary, so we just replace them blindly. if os.name == 'nt': string = string.replace("\\", r"\\") return Pattern(string, _FileFromPattern) def XMLFromPattern(string): return Pattern(string, _XMLFromPattern) ����������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/parse/__init__.py���������������������������������������������������������0000644�0001750�0001750�00000000167�12161032160�021141� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from quodlibet.parse._query import Query from quodlibet.parse._pattern import Pattern, FileFromPattern, XMLFromPattern ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/parse/_scanner.py���������������������������������������������������������0000644�0001750�0001750�00000002755�12161032160�021177� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright (c) 1998-2001 by Secret Labs AB. All rights reserved. # Copyright 2008 Joe Wreschnig # # This code can be redistributed under CNRI's Python 1.6 license. For # any other use, please contact Secret Labs AB (info@pythonware.com). # Based on re.Scanner, copied because that one likes moving around. import sre_parse import sre_compile from sre_constants import BRANCH, SUBPATTERN class Scanner(object): def __init__(self, lexicon, flags=0): self.__lexicon = lexicon # combine phrases into a compound pattern p = [] s = sre_parse.Pattern() s.flags = flags for phrase, action in lexicon: p.append(sre_parse.SubPattern(s, [ (SUBPATTERN, (len(p) + 1, sre_parse.parse(phrase, flags))), ])) s.groups = len(p) + 1 p = sre_parse.SubPattern(s, [(BRANCH, (None, p))]) self.__scaner = sre_compile.compile(p) def scan(self, string): result = [] append = result.append match = self.__scaner.scanner(string).match i = 0 while True: m = match() if not m: break j = m.end() if i == j: break action = self.__lexicon[m.lastindex - 1][1] if callable(action): self.match = m action = action(self, m.group()) if action is not None: append(action) i = j return result, string[i:] �������������������quodlibet-3.0.2/quodlibet/parse/_query.py�����������������������������������������������������������0000644�0001750�0001750�00000027442�12161032160�020713� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2005 Joe Wreschnig, Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation # A simple top-down parser for the query grammar. It's basically textbook, # but it could use some cleaning up. It builds the requisite match.* # objects as it goes, which is where the interesting stuff will happen. import re from quodlibet.parse import _match as match from quodlibet.parse._scanner import Scanner from quodlibet.parse._match import error, ParseError # Token types. (NEGATION, INTERSECT, UNION, OPENP, CLOSEP, EQUALS, OPENRE, CLOSERE, REMODS, COMMA, TAG, RE, RELOP, NUMCMP, EOF) = range(15) class LexerError(error): pass class QueryLexer(Scanner): def __init__(self, s): self.string = s.strip() Scanner.__init__(self, [(r"/([^/\\]|\\.)*/", self.regexp), (r'"([^"\\]|\\.)*"', self.str_to_re), (r"'([^'\\]|\\.)*'", self.str_to_re), (r"([<>]=?)|(!=)", self.relop), (r"[=|()&!,#]", self.table), (r"\s+", None), (r"[^=)|&#/<>!,]+", self.tag) ]) def regexp(self, scanner, string): return QueryLexeme(RE, string[1:-1]) def str_to_re(self, scanner, string): if isinstance(string, unicode): string = string.encode('utf-8') string = string[1:-1].decode('string_escape') string = string.decode('utf-8') return QueryLexeme(RE, "^%s$" % re.escape(string)) def tag(self, scanner, string): return QueryLexeme(TAG, string.strip()) def relop(self, scanner, string): return QueryLexeme(RELOP, string) def table(self, scanner, string): return QueryLexeme({'!': NEGATION, '&': INTERSECT, '|': UNION, '(': OPENP, ')': CLOSEP, '=': EQUALS, ',': COMMA, '#': NUMCMP}[string], string) def __iter__(self): s = self.scan(self.string) if s[1] != "": raise LexerError("characters left over in string") else: return iter(s[0] + [QueryLexeme(EOF, "")]) class QueryLexeme(object): _reverse = {NEGATION: "NEGATION", INTERSECT: "INTERSECT", OPENRE: "OPENRE", CLOSERE: "CLOSERE", REMODS: "REMODS", OPENP: "OPENP", CLOSEP: "CLOSEP", UNION: "UNION", EQUALS: "EQUALS", COMMA: "COMMA", TAG: "TAG", RE: "RE", RELOP: "RELOP", NUMCMP: "NUMCP", EOF: "EOF", } def __init__(self, typ, lexeme): self.type = typ self.lexeme = lexeme def __repr__(self): return (super(QueryLexeme, self).__repr__().split()[0] + " type=" + repr(self.type) + " (" + str(self._reverse[self.type]) + "), lexeme=" + repr(self.lexeme) + ">") class QueryParser(object): """Parse the input. One lookahead token, start symbol is Query.""" def __init__(self, tokens): self.tokens = iter(tokens) self.lookahead = self.tokens.next() def _match_parened(self, expect, ReturnType, InternalType): self.match(expect) self.match(OPENP) m = InternalType() if len(m) > 1: m = ReturnType(m) else: m = m[0] self.match(CLOSEP) return m def _match_list(self, InternalType): l = [InternalType()] while self.lookahead.type == COMMA: self.match(COMMA) l.append(InternalType()) return l def Query(self): if self.lookahead.type == UNION: return self.QueryUnion() elif self.lookahead.type == INTERSECT: return self.QueryInter() elif self.lookahead.type == NEGATION: return self.QueryNeg() elif self.lookahead.type == NUMCMP: return self.QueryNumcmp() elif self.lookahead.type == TAG: return self.QueryPart() else: raise ParseError("The expected symbol should be |, &, !, #, or " "a tag name, but was %s" % self.lookahead.lexeme) def StartQuery(self): s = self.Query() self.match(EOF) return s def StartStarQuery(self, star): s = self.RegexpSet(no_tag=True) self.match(EOF) def insert_tags(p): # pack all values in tags if isinstance(p, match.Inter): return match.Inter([match.Tag(star, v) for v in p.res]) elif isinstance(p, match.Union): return match.Union([match.Tag(star, v) for v in p.res]) elif isinstance(p, match.Neg): # we want Neg to negate the whole query, not the value return match.Neg(insert_tags(p.res)) else: return match.Tag(star, p) return insert_tags(s) def QueryNeg(self): self.match(NEGATION) return match.Neg(self.Query()) def QueryInter(self): return self._match_parened(INTERSECT, match.Inter, self.QueryList) def QueryUnion(self): return self._match_parened(UNION, match.Union, self.QueryList) def QueryNumcmp(self): return self._match_parened(NUMCMP, match.Inter, self.NumcmpList) def QueryList(self): return self._match_list(self.Query) def NumcmpList(self): return self._match_list(self.Numcmp) def Numcmp(self): tag = self.lookahead.lexeme self.match(TAG) op = self.lookahead.lexeme self.match(RELOP, EQUALS) value = self.lookahead.lexeme self.match(TAG) if self.lookahead.type in [RELOP, EQUALS]: # Reverse the first operator tag, value = value, tag op = {">": "<", "<": ">", "<=": ">=", "<=": ">="}.get(op, op) op2 = self.lookahead.lexeme self.match(RELOP, EQUALS) val2 = self.lookahead.lexeme self.match(TAG) return match.Inter([match.Numcmp(tag, op, value), match.Numcmp(tag, op2, val2)]) else: return match.Numcmp(tag, op, value) def _match_string(self): s = self.lookahead.lexeme self.match(self.lookahead.type) return s def QueryPart(self): names = [s.lower() for s in self._match_list(self._match_string)] if filter(lambda k: k.encode("ascii", "replace") != k, names): raise ParseError("Expected ascii key") self.match(EQUALS) res = self.RegexpSet() return match.Tag(names, res) def RegexpSet(self, no_tag=False): if self.lookahead.type == UNION: return self.RegexpUnion() elif self.lookahead.type == INTERSECT: return self.RegexpInter() elif self.lookahead.type == NEGATION: return self.RegexpNeg() elif self.lookahead.type == TAG and not no_tag: return self.MatchTag() elif self.lookahead.type == RE: return self.Regexp() else: raise ParseError("The expected symbol should be |, &, !, or " "a tag name, but was %s" % self.lookahead.lexeme) def RegexpNeg(self): self.match(NEGATION) return match.Neg(self.RegexpSet()) def RegexpUnion(self): return self._match_parened(UNION, match.Union, self.RegexpList) def RegexpInter(self): return self._match_parened(INTERSECT, match.Inter, self.RegexpList) def RegexpList(self): return self._match_list(self.RegexpSet) def MatchTag(self): tag = self.lookahead.lexeme self.match(TAG) try: return re.compile(re.escape(tag), re.IGNORECASE | re.UNICODE) except re.error: raise ParseError("The regular expression was invalid") def Regexp(self): regex = self.lookahead.lexeme self.match(RE) mods = re.MULTILINE | re.UNICODE | re.IGNORECASE if self.lookahead.type == TAG: s = self.lookahead.lexeme.lower() if set(s) - set("cisl"): raise ParseError("Invalid regular expression flags: %r" % s) if "c" in s: mods &= ~re.IGNORECASE if "i" in s: mods |= re.IGNORECASE if "s" in s: mods |= re.DOTALL if "l" in s: mods = (mods & ~re.UNICODE) | re.LOCALE self.match(TAG) try: return re.compile(regex, mods) except re.error: raise ParseError("The regular expression /%s/ is invalid." % regex) def match(self, *tokens): if tokens == [EOF] and self.lookahead.type == EOF: raise ParseError("The search string ended, but more " "tokens were expected.") try: if self.lookahead.type in tokens: self.lookahead = self.tokens.next() else: raise ParseError("The token '%s' is not the type exected." % ( self.lookahead.lexeme)) except StopIteration: self.lookahead = QueryLexeme(EOF, "") NORMAL, VALUE, STRING = range(3) def _get_query_type(string): try: QueryParser(QueryLexer(string)).StartStarQuery([]) except error: if not set("#=").intersection(string): return STRING else: return VALUE return NORMAL STAR = ["artist", "album", "title"] def Query(string, star=STAR): """Parses the query string and returns a match object. star -- List of tags to look in if none are specified in the query. You can add some by extending Query.START and pass it here. This parses the above query language as well as some tagless shortcuts: "foo bar" -> &(star1,star2=foo,star1,star2=bar) "!foo" -> !star1,star2=foo "&(foo, bar)" -> &(star1,star2=foo, star1,star2=bar) "|(foo, bar)" -> |(star1,star2=foo, star1,star2=bar) "!&(foo, bar)" -> !&(star1,star2=foo, star1,star2=bar) "!(foo, bar)" -> !star1,star2=(foo, bar) etc... """ if not isinstance(string, unicode): string = string.decode('utf-8') # fast path if Query.match_all(string): return match.Inter([]) query_type = _get_query_type(string) # normal string, put it in a intersection to get a value list if query_type == STRING: parts = ["/%s/" % re.escape(s) for s in string.split()] string = "&(" + ",".join(parts) + ")" query_type = VALUE # try to parse with a taglist if query_type == VALUE: try: return QueryParser(QueryLexer(string)).StartStarQuery(star) except error: pass return QueryParser(QueryLexer(string)).StartQuery() # default tags to search in, use/extend and pass to Query() Query.STAR = STAR # query base exception Query.error = error def is_valid(string): """Whether a full query can be parsed""" if Query.match_all(string): return True try: QueryParser(QueryLexer(string)).StartQuery() except error: return False return True Query.is_valid = is_valid def match_all(string): """Whether the resulting query will not filter anything""" return string.strip() == "" Query.match_all = match_all def is_parsable(string): """Whether the text can be parsed""" try: Query(string) except error: return False return True Query.is_parsable = is_parsable def is_valid_color(string): """Returns True/False for a query, None for a text only query""" if is_parsable(string): if _get_query_type(string) == STRING: return None else: return True return False Query.is_valid_color = is_valid_color ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/config.py�����������������������������������������������������������������0000644�0001750�0001750�00000025161�12173213426�017547� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2011 Joe Wreschnig, Christoph Reiter # 2009-2013 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation # Simple proxy to a Python ConfigParser. # TODO: refactor method names for PEP-8 from StringIO import StringIO import csv import os import const from quodlibet.util.dprint import print_d, print_w # We don't need/want variable interpolation. from ConfigParser import RawConfigParser as ConfigParser, Error # In newer RawConfigParser it is possible to replace the internal dict. The # implementation only uses items() for writing, so replace with a dict that # returns them sorted. This makes it easier to look up entries in the file. class _sorted_dict(dict): def items(self): return sorted(super(_sorted_dict, self).items()) try: _config = ConfigParser(dict_type=_sorted_dict) except TypeError: _config = ConfigParser() options = _config.options def get(*args): if len(args) == 3: try: return _config.get(*args[:2]) except Error: return args[-1] return _config.get(*args) def getboolean(*args): if len(args) == 3: if not isinstance(args[-1], bool): raise ValueError try: return _config.getboolean(*args[:2]) # ValueError if the value found in the config file # does not match any string representation -> so catch it too except (ValueError, Error): return args[-1] return _config.getboolean(*args) def getint(*args): if len(args) == 3: if not isinstance(args[-1], int): raise ValueError try: return _config.getint(*args[:2]) except Error: return args[-1] return _config.getint(*args) def getfloat(*args): if len(args) == 3: if not isinstance(args[-1], float): raise ValueError try: return _config.getfloat(*args[:2]) except Error: return args[-1] return _config.getfloat(*args) def getstringlist(*args): """Gets a list of strings, using CSV to parse and delimit""" if len(args) == 3: if not isinstance(args[-1], list): raise ValueError try: value = _config.get(*args[:2]) except Error: return args[-1] else: value = _config.get(*args) parser = csv.reader([value]) vals = [v.decode('utf-8') for v in parser.next()] print_d("%s.%s = %s" % (args + (vals,))) return vals def setstringlist(section, option, values): """Sets a config item to a list of quoted strings, using CSV""" sw = StringIO() values = [unicode(v).encode('utf-8') for v in values] writer = csv.writer(sw, lineterminator='\n', quoting=csv.QUOTE_MINIMAL) writer.writerow(values) _config.set(section, option, sw.getvalue()) # RawConfigParser only allows string values but doesn't scream if they are not # (and it only fails before the first config save..) def set(section, option, value): if not isinstance(value, str): value = str(value) _config.set(section, option, value) def setdefault(section, option, default): if not _config.has_option(section, option): set(section, option, default) def write(filename): if isinstance(filename, basestring): if not os.path.isdir(os.path.dirname(filename)): os.makedirs(os.path.dirname(filename)) f = file(filename, "w") else: f = filename _config.write(f) f.close() def save(filename): print_d("Writing config...") try: write(filename) except EnvironmentError: print_w("Unable to write config.") def quit(): for section in _config.sections(): _config.remove_section(section) def init(*rc_files): if len(_config.sections()): raise ValueError("config initialized twice without quitting: %r" % _config.sections()) initial = { # User-defined tag name -> human name mappings "header_maps": { }, "player": { "time_remaining": "false", "replaygain": "on", "fallback_gain": "0.0", "pre_amp_gain": "0.0", "backend": "gstbe", "gst_pipeline": "", "gst_buffer": "1.5", # stream buffer duration in seconds "gst_device": "", }, "library": { "exclude": "", "refresh_on_start": "true", }, # State about the player, to restore on startup "memory": { "song": "", # filename of last song "seek": "0", # last song position, in milliseconds "volume": "1.0", # internal volume, [0.0, 1.0] "browser": "PanedBrowser", # browser name "songlist": "true", # on or off "queue": "false", # on or off "shufflequeue": "false", # on or off "sortby": "0album", # <reversed?>tagname, song list sort "order": "inorder", "plugin_selection": "", # selected plugin in manager }, "browsers": { "query_text": "", # none/search bar text # panes in paned browser "panes": "~people <~year|\<b\>\<i\><~year>\</i\>\</b\> - ><album>", "pane_selection": "", # selected pane values "background": "", # "global" filter for SearchBar "albums": "", # album list "album_sort": "0", # album sorting mode, default is title "album_covers": "1", # album cover display, on/off "album_substrings": "1", # include substrings in inline search "collection_headers": "~people 0", "radio": "", # radio filter selection "rating_click": "true", # click to rate song, on/off "rating_confirm_multiple": "false", # confirm rating multiple songs "cover_size": "-1", # max cover height/width, <= 0 is default "search_limit": "false", # Show the limit widgets for SearchBar }, # Kind of a dumping ground right now, should probably be # cleaned out later. "settings": { "scan": "", # scan directories, :-separated "jump": "true", # scroll song list on current song change "default_rating": "0.5", # initial rating of new song "ratings": "4", # maximum rating value # (0 = disabled i.e. arithmetic mean) "bayesian_rating_factor": "0.0", # rating symbol (black star) "rating_symbol_full": "\xe2\x98\x85", # rating symbol (hollow star) "rating_symbol_blank": "\xe2\x98\x86", # probably belong in memory "repeat": "false", # Now deprecated: space-separated headers column #"headers": " ".join(const.DEFAULT_COLUMNS), # 2.6: this gets migrated from headers entry in code. # TODO: re-instate columns here in > 2.6 or once most have migrated #"columns": ",".join(const.DEFAULT_COLUMNS), # hack to disable hints, see bug #526 "disable_hints": "false", # search as soon as text is typed into search box "eager_search": "true", }, "rename": { "spaces": "false", "windows": "true", "ascii": "false", }, "tagsfrompath": { "underscores": "false", "titlecase": "false", "split": "false", "add": "false", }, "plugins": { "active_plugins": "", # newline separated plugin IDs }, "editing": { "split_on": "/ & ,", # words to split on "id3encoding": "", # ID3 encodings to try "human_title_case": "true", "save_to_songs": "true", "save_email": const.EMAIL, "alltags": "true", # show all tags, or just "human-readable" ones # Skip dialog to save or revert changes "auto_save_changes": "false" }, "albumart": { "round": "true", # use rounded corners for artwork thumbnails "prefer_embedded": "false", "force_filename": "false", "filename": "folder.jpg", } } # <=2.2.1 QL created the user folder in the profile folder # but it should be in the appdata folder, so move it. if os.name == "nt": old_dir = os.path.join(os.path.expanduser("~"), ".quodlibet") new_dir = const.USERDIR if not os.path.isdir(new_dir) and os.path.isdir(old_dir): import shutil shutil.move(old_dir, new_dir) for section, values in initial.iteritems(): _config.add_section(section) for key, value in values.iteritems(): _config.set(section, key, value) _config.read(rc_files) # revision 94d389a710f1 from_ = ("settings", "round") if _config.has_option(*from_): _config.set("albumart", "round", _config.get(*from_)) _config.remove_option(*from_) def state(arg): return _config.getboolean("settings", arg) def add_section(section): if not _config.has_section(section): _config.add_section(section) # Cache __songlist_columns = None def get_columns(refresh=False): """ Gets the list of songlist column headings, caching unless `refresh` is True This migrates from old to new format if necessary. """ global __songlist_columns if not refresh and __songlist_columns: return __songlist_columns try: __songlist_columns = [str(s).lower() for s in getstringlist("settings", "columns")] return __songlist_columns except Error: try: __songlist_columns = columns = get("settings", "headers").split() except Error: return const.DEFAULT_COLUMNS else: print_d("Migrating from settings.headers to settings.columns...") setstringlist("settings", "columns", columns) print_d("Removing settings.headers...") _config.remove_option("settings", "headers") return columns def set_columns(vals, force=False): """ Persists the settings for songlist headings held in `vals` Will override the cache if `force` is True """ global __songlist_columns if vals != __songlist_columns or force: print_d("Writing: %r" % vals) vals = [str(col).lower() for col in vals] setstringlist("settings", "columns", vals) __songlist_columns = vals else: print_d("No change in columns to write") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/library/������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017364� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/library/librarians.py�����������������������������������������������������0000644�0001750�0001750�00000015216�12173212464�022075� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Joe Wreschnig # 2012 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation """ Librarians for libraries. """ import itertools from gi.repository import GObject from quodlibet.util.dprint import print_d class Librarian(GObject.GObject): """The librarian is a nice interface to all active libraries. Librarians are a kind of meta-library. When any of their registered libraries fire a signal, they fire the same signal. Likewise, they provide various methods equivalent to the ones found in libraries that group the results of the real libraries. Attributes: libraries -- a dict mapping library names to libraries """ __gsignals__ = { 'changed': (GObject.SignalFlags.RUN_LAST, None, (object,)), 'removed': (GObject.SignalFlags.RUN_LAST, None, (object,)), 'added': (GObject.SignalFlags.RUN_LAST, None, (object,)), } def __init__(self): super(Librarian, self).__init__() self.libraries = {} self.__signals = {} def destroy(self): pass def register(self, library, name): """Register a library with this librarian.""" if name in self.libraries or name in self.__signals: raise ValueError("library %r is already active" % name) added_sig = library.connect('added', self.__added) removed_sig = library.connect('removed', self.__removed) changed_sig = library.connect('changed', self.__changed) self.libraries[name] = library self.__signals[library] = [added_sig, removed_sig, changed_sig] def _unregister(self, library, name): # This function, unlike register, should be private. # Libraries get unregistered at the discretion of the # librarian, not the libraries. del(self.libraries[name]) map(library.disconnect, self.__signals[library]) del(self.__signals[library]) # FIXME: We can be smarter about this -- queue a list of items # and fire the signal after a short wait, to take advantage of # a case where many libraries fire a signal at the same time (or # one fires a signal often). def __changed(self, library, items): self.emit('changed', items) def __added(self, library, items): self.emit('added', items) def __removed(self, library, items): self.emit('removed', items) def changed(self, items): """Triage the items and inform their real libraries.""" for library in self.libraries.itervalues(): in_library = filter(library.__contains__, items) if in_library: library._changed(in_library) def __getitem__(self, key): """Find a item given its key.""" for library in self.libraries.itervalues(): try: return library[key] except KeyError: pass else: raise KeyError(key) def get(self, key, default=None): try: return self[key] except KeyError: return default def remove(self, items): """Remove items from all libraries.""" for library in self.libraries.itervalues(): library.remove(filter(library.__contains__, items)) def __contains__(self, item): """Check if a key or item is in the library.""" for library in self.libraries.itervalues(): if item in library: return True else: return False def __iter__(self): """Iterate over all items in all libraries.""" return itertools.chain(*self.libraries.itervalues()) def move(self, items, from_, to): """Move items from one library to another. This causes 'removed' signals on the from library, and 'added' signals on the 'to' library, but will not cause any signals to be emitted via this librarian. """ try: from_.handler_block(self.__signals[from_][1]) to.handler_block(self.__signals[to][0]) from_.remove(items) to.add(items) finally: from_.handler_unblock(self.__signals[from_][1]) to.handler_unblock(self.__signals[to][0]) class SongLibrarian(Librarian): """A librarian for SongLibraries.""" def tag_values(self, tag): """Return a list of all values for the given tag.""" tags = set() for library in self.libraries.itervalues(): tags.update(library.tag_values(tag)) return list(tags) def rename(self, song, newname, changed=None): """Rename the song in all libraries it belongs to. The 'changed' signal will fire for any library the song is in. """ # This needs to poke around inside the library directly. If # it uses add/remove to handle the songs it fires incorrect # signals. If it uses the library's rename method, it breaks # the call for future libraries because the item's key has # changed. So, it needs to reimplement the method. re_add = [] print_d("Renaming %r to %r" % (song.key, newname), self) for library in self.libraries.itervalues(): try: del library._contents[song.key] except KeyError: pass else: re_add.append(library) song.rename(newname) for library in re_add: library._contents[song.key] = song if changed is None: library._changed([song]) else: print_d("Delaying changed signal for %r." % library, self) changed.append(song) def reload(self, item, changed=None, removed=None): """Reload a song.""" re_add = [] print_d("Reloading %r" % item.key, self) for library in self.libraries.itervalues(): try: del library._contents[item.key] except KeyError: pass else: re_add.append(library) try: library = re_add[0] except IndexError: return # Rely on the first library in the list to do the actual # load, then just inform the other libraries what happened. was_changed, was_removed = library._load_item(item) if was_removed: for library in re_add: library.emit('removed', [item]) elif was_changed: for library in re_add: library._contents[item.key] = item library.emit('changed', [item]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/library/__init__.py�������������������������������������������������������0000644�0001750�0001750�00000003655�12173213426�021511� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation """Various library classes. Libraries are (roughly) dicts of items, and in the case of Quod Libet, these items are songs. Libraries are in charge of alerting the rest of the program when songs have been added, changed, or removed. They can also be queried in various ways. """ import time import threading from quodlibet import util, print_d import quodlibet.formats as formats from quodlibet.const import LIBRARY_SAVE_PERIOD_SECONDS from quodlibet.library.libraries import SongFileLibrary, SongLibrary from quodlibet.library.librarians import SongLibrarian def init(cache_fn=None): """Set up the library and return the main one. Return a main library, and set a librarian for all future SongLibraries. """ s = ", ".join(formats.modules) print_d("Supported formats: %s" % s) SongFileLibrary.librarian = SongLibrary.librarian = SongLibrarian() library = SongFileLibrary("main") if cache_fn: library.load(cache_fn) return library def save(force=False): """Save all registered libraries that have a filename and are marked dirty. If force = True save all of them blocking, else save non-blocking and only if they were last saved more than LIBRARY_SAVE_PERIOD_SECONDS ago. """ print_d("Saving all libraries...") librarian = SongFileLibrary.librarian for lib in librarian.libraries.values(): filename = lib.filename if not filename or not lib.dirty: continue if force: try: lib.save() except EnvironmentError: pass lib.destroy() elif time.time() - util.mtime(filename) > LIBRARY_SAVE_PERIOD_SECONDS: threading.Thread(target=lib.save).run() �����������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/library/libraries.py������������������������������������������������������0000644�0001750�0001750�00000062634�12173213426�021730� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Joe Wreschnig # 2013 Nick Boultbee # 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation """Base library classes. These classes are the most basic library classes. As such they are the least useful but most content-agnostic. """ # Windows doesn't have fcntl, just don't lock for now try: import fcntl fcntl except ImportError: fcntl = None import cPickle as pickle import os import shutil import threading from UserDict import DictMixin from gi.repository import GObject from quodlibet.formats import MusicFile from quodlibet.parse import Query from quodlibet.qltk.notif import Task from quodlibet.util.collection import Album from quodlibet import util from quodlibet import const from quodlibet.util.dprint import print_d, print_w class Library(GObject.GObject, DictMixin): """A Library contains useful objects. The only required method these objects support is a .key attribute, but specific types of libraries may require more advanced interfaces. WARNING: The library implements the dict interface with the exception that iterating over it yields values and not keys. """ __gsignals__ = { 'changed': (GObject.SignalFlags.RUN_LAST, None, (object,)), 'removed': (GObject.SignalFlags.RUN_LAST, None, (object,)), 'added': (GObject.SignalFlags.RUN_LAST, None, (object,)), } librarian = None dirty = False def __init__(self, name=None): super(Library, self).__init__() self._contents = {} self._name = name if self.librarian is not None and name is not None: self.librarian.register(self, name) def destroy(self): if self.librarian is not None and self._name is not None: self.librarian._unregister(self, self._name) def changed(self, items): """Alert other users that these items have changed. This causes a 'changed' signal. If a librarian is available this function will call its changed method instead, and all libraries that librarian manages may fire a 'changed' signal. The item list may be filtered to those items actually in the library. If a librarian is available, it will handle the filtering instead. That means if this method is delegated to the librarian, this library's changed signal may not fire, but another's might. """ if not items: return if self.librarian and self in self.librarian.libraries.itervalues(): print_d("Changing %d items via librarian." % len(items), self) self.librarian.changed(items) else: items = filter(self.__contains__, items) if not items: return print_d("Changing %d items directly." % len(items), self) self._changed(items) def _changed(self, items): # Called by the changed method and Librarians. if not items: return print_d("Changing %d items." % len(items), self) self.dirty = True self.emit('changed', items) def __iter__(self): """Iterate over the items in the library.""" return self._contents.itervalues() def iteritems(self): return self._contents.iteritems() def iterkeys(self): return self._contents.iterkeys() def itervalues(self): return self._contents.itervalues() def __len__(self): """The number of items in the library.""" return len(self._contents) def __getitem__(self, key): """Find a item given its key.""" return self._contents[key] def __contains__(self, item): """Check if a key or item is in the library.""" try: return item in self._contents or item.key in self._contents except AttributeError: return False def get_content(self): """All items including hidden ones for saving the library (see FileLibrary with masked items)""" return self.values() def keys(self): return self._contents.keys() def values(self): return self._contents.values() def _load_item(self, item): """Load (add) an item into this library""" # Subclasses should override this if they want to check # item validity; see `FileLibrary`. print_d("Loading %r." % item.key, self) self.dirty = True self._contents[item.key] = item def _load_init(self, items): """Load many items into the library (on start)""" # Subclasses should override this if they want to check # item validity; see `FileLibrary`. content = self._contents for item in items: content[item.key] = item def add(self, items): """Add items. This causes an 'added' signal. Return the list of items actually added, filtering out items already in the library. """ items = filter(lambda item: item not in self, items) if not items: return print_d("Adding %d items." % len(items), self) for item in items: self._contents[item.key] = item self.dirty = True self.emit('added', items) return items def remove(self, items): """Remove items. This causes a 'removed' signal.""" if not items: return print_d("Removing %d items." % len(items), self) for item in items: del(self._contents[item.key]) self.dirty = True self.emit('removed', items) def dump_items(filename, items): """Pickle items to disk""" dirname = os.path.dirname(filename) if not os.path.isdir(dirname): os.makedirs(dirname) temp_filename = filename + ".tmp" with open(temp_filename, "wb") as fileobj: if fcntl is not None: fcntl.flock(fileobj.fileno(), fcntl.LOCK_EX) # While protocol 2 is usually faster it uses __setitem__ # for unpickle and we override it to clear the sort cache. # This roundtrip makes it much slower, so we use protocol 1 # unpickle numbers (py2.7): # 2: 0.66s / 2 + __set_item__: 1.18s / 1 + __set_item__: 0.72s # see: http://bugs.python.org/issue826897 pickle.dump(items, fileobj, 1) fileobj.flush() os.fsync(fileobj.fileno()) # No atomic rename on windows if os.name == "nt": try: os.remove(filename) except EnvironmentError: pass try: os.rename(temp_filename, filename) except EnvironmentError: print_w("Couldn't save library to path: %r" % filename) def load_items(filename, default=None): """Load items from disk""" if default is None: default = [] try: fp = open(filename, "rb") except EnvironmentError: if const.DEBUG or os.path.exists(filename): print_w("Couldn't load library from: %r" % filename) return default # pickle makes 1000 read syscalls for 6000 songs # read the file into memory so that there are less # context switches. saves 40% CPU time.. with fp: data = fp.read() try: items = pickle.loads(data) except Exception: # there are too many ways this could fail util.print_exc() # move the broken file out of the way try: shutil.copy(filename, filename + ".not-valid") except EnvironmentError: util.print_exc() items = default return items class PicklingMixin(object): """A mixin to provide persistence of a library by pickling to disk""" filename = None def __init__(self): self._save_lock = threading.Lock() def load(self, filename): """Load a library from a file, containing a picked list. Loading does not cause added, changed, or removed signals. """ self.filename = filename print_d("Loading contents of %r." % filename, self) items = load_items(filename) # this loads all items without checking their validity, but makes # sure that non-mounted items are masked self._load_init(items) print_d("Done loading contents of %r." % filename, self) def save(self, filename=None): """Save the library to the given filename, or the default if `None`""" if filename is None: filename = self.filename with self._save_lock: print_d("Saving contents to %r." % filename, self) dump_items(filename, self.get_content()) self.dirty = False class PicklingLibrary(Library, PicklingMixin): """A library that pickles its contents to disk""" def __init__(self, name=None): print_d("Using pickling persistence for library \"%s\"" % name) PicklingMixin.__init__(self) Library.__init__(self, name) class AlbumLibrary(Library): """An AlbumLibrary listens to a SongLibrary and sorts its songs into albums. The library behaves like a dictionary: the keys are album_keys of AudioFiles, the values are Album objects. """ def __init__(self, library): self.librarian = None print_d("Initializing Album Library to watch %r" % library._name) super(AlbumLibrary, self).__init__( "AlbumLibrary for %s" % library._name) self._library = library self._asig = library.connect('added', self.__added) self._rsig = library.connect('removed', self.__removed) self._csig = library.connect('changed', self.__changed) self.__added(library, library.values(), signal=False) def refresh(self, items): """Refresh albums after a manual change.""" self._changed(set(items)) def load(self): # deprectated pass def destroy(self): for sig in [self._asig, self._rsig, self._csig]: self._library.disconnect(sig) def _get(self, item): return self._contents.get(item) def __add(self, items): changed = set() new = set() for song in items: key = song.album_key if key in self._contents: changed.add(self._contents[key]) else: album = Album(song) self._contents[key] = album new.add(album) self._contents[key].songs.add(song) changed -= new return changed, new def __added(self, library, items, signal=True): changed, new = self.__add(items) for album in changed: album.finalize() if signal: if new: self.emit('added', new) if changed: self.emit('changed', changed) def __removed(self, library, items): changed = set() removed = set() for song in items: key = song.album_key album = self._contents[key] album.songs.remove(song) changed.add(album) if not album.songs: removed.add(album) del self._contents[key] changed -= removed for album in changed: album.finalize() if removed: self.emit('removed', removed) if changed: self.emit('changed', changed) def __changed(self, library, items): """Album keys could change between already existing ones.. so we have to do it the hard way and search by id.""" print_d("Updating affected albums for %d items" % len(items)) changed = set() removed = set() to_add = [] for song in items: # in case the key hasn't changed key = song.album_key if key in self._contents and song in self._contents[key].songs: changed.add(self._contents[key]) else: # key changed.. look for it in each album to_add.append(song) for key, album in self._contents.iteritems(): if song in album.songs: album.songs.remove(song) if not album.songs: removed.add(album) else: changed.add(album) break # get new albums and changed ones because keys could have changed add_changed, new = self.__add(to_add) changed |= add_changed # check if albums that were empty at some point are still empty for album in removed: if not album.songs: del self._contents[album.key] changed.discard(album) for album in changed: album.finalize() if removed: self.emit("removed", removed) if changed: self.emit("changed", changed) if new: self.emit("added", new) class SongLibrary(PicklingLibrary): """A library for songs. Items in this kind of library must support (roughly) the AudioFile interface. """ def __init__(self, *args, **kwargs): super(SongLibrary, self).__init__(*args, **kwargs) @util.cached_property def albums(self): return AlbumLibrary(self) def destroy(self): super(SongLibrary, self).destroy() if "albums" in self.__dict__: self.albums.destroy() def tag_values(self, tag): """Return a list of all values for the given tag.""" tags = set() for song in self.itervalues(): tags.update(song.list(tag)) return list(tags) def rename(self, song, newname, changed=None): """Rename a song. This requires a special method because it can change the song's key. The 'changed' signal may fire for this library. If the song exists in multiple libraries you cannot use this method. Instead, use the librarian. """ print_d("Renaming %r to %r" % (song.key, newname), self) del(self._contents[song.key]) song.rename(newname) self._contents[song.key] = song if changed is not None: print_d("%s: Delaying changed signal." % (type(self).__name__,)) changed.append(song) else: self.changed([song]) def query(self, text, sort=None, star=Query.STAR): """Query the library and return matching songs.""" if isinstance(text, str): text = text.decode('utf-8') songs = self.values() if text != "": songs = filter(Query(text, star).search, songs) return songs class FileLibrary(PicklingLibrary): """A library containing items on a local(-ish) filesystem. These must support the valid, exists, mounted, and reload methods, and have a mountpoint attribute. """ def __init__(self, name=None): super(FileLibrary, self).__init__(name) self._masked = {} def _load_init(self, items): """Add many items to the library, check if the mountpoints are available and mark items as masked if not. Does not check if items are valid. """ mounts = {} contents = self._contents masked = self._masked for item in items: mountpoint = item.mountpoint if mountpoint not in mounts: is_mounted = os.path.ismount(mountpoint) mounts[mountpoint] = is_mounted # at least one not mounted, make sure masked has an entry if not is_mounted: masked.setdefault(mountpoint, {}) if mounts[mountpoint]: contents[item.key] = item else: masked[mountpoint][item.key] = item def _load_item(self, item, force=False): """Add an item, or refresh it if it's already in the library. No signals will be fired. Return a tuple of booleans: (changed, removed) """ print_d("Loading %r." % item.key, self) valid = item.valid() # The item is fine; add it if it's not present. if not force and valid: print_d("%r is valid." % item.key, self) self._contents[item.key] = item return False, False else: # Either we should force a load, or the item is not okay. # We're going to reload; this could change the key. So # remove the item if it's currently in. try: del(self._contents[item.key]) except KeyError: present = False else: present = True # If the item still exists, reload it. if item.exists(): try: item.reload() except (StandardError, EnvironmentError): print_d("Error reloading %r." % item.key, self) util.print_exc() return False, True else: print_d("Reloaded %r." % item.key, self) self._contents[item.key] = item return True, False elif not item.mounted(): # We don't know if the item is okay or not, since # it's not not mounted. If the item was present # we need to mark it as removed. print_d("Masking %r." % item.key, self) self._masked.setdefault(item.mountpoint, {}) self._masked[item.mountpoint][item.key] = item return False, present else: # The item doesn't exist at all anymore. Mark it as # removed if it was present, otherwise nothing. print_d("Ignoring (so removing) %r." % item.key, self) return False, present def reload(self, item, changed=None, removed=None): """Reload a song, possibly noting its status. If lists are given, it assumes the caller will handle signals, and only updates the lists. Otherwise, it handles signals itself. It *always* handles library contents, so do not try to remove (again) a song that appears in the removed list. """ was_changed, was_removed = self._load_item(item, force=True) if was_changed and changed is not None: changed.append(item) elif was_removed and removed is not None: removed.append(item) elif changed is None and removed is None: if was_changed: self.changed([item]) elif was_removed: self.emit('removed', [item]) def rebuild(self, paths, force=False, exclude=[], cofuncid=None): """Reload or remove songs if they have changed or been deleted. This generator rebuilds the library over the course of iteration. Any paths given will be scanned for new files, using the 'scan' method. Only items present in the library when the rebuild is started will be checked. If this function is copooled, set "cofuncid" to enable pause/stop buttons in the UI. """ print_d("Rebuilding, force is %s." % force, self) task = Task(_("Library"), _("Checking mount points")) if cofuncid: task.copool(cofuncid) for i, (point, items) in task.list(enumerate(self._masked.items())): if os.path.ismount(point): self._contents.update(items) del(self._masked[point]) self.emit('added', items.values()) yield True task = Task(_("Library"), _("Scanning library")) if cofuncid: task.copool(cofuncid) changed, removed = [], [] for i, (key, item) in task.list(enumerate(sorted(self.items()))): if key in self._contents and force or not item.valid(): self.reload(item, changed, removed) # These numbers are pretty empirical. We should yield more # often than we emit signals; that way the main loop stays # interactive and doesn't get bogged down in updates. if len(changed) > 100: self.emit('changed', changed) changed = [] if len(removed) > 100: self.emit('removed', removed) removed = [] if len(changed) > 5 or i % 100 == 0: yield True print_d("Removing %d, changing %d." % (len(removed), len(changed)), self) if removed: self.emit('removed', removed) if changed: self.emit('changed', changed) for value in self.scan(paths, exclude, cofuncid): yield value def add_filename(self, filename, add=True): """Add a file based on its filename. Subclasses must override this to open the file correctly. """ raise NotImplementedError def scan(self, paths, exclude=[], cofuncid=None): added = [] exclude = [util.expanduser(path) for path in exclude if path] for fullpath in paths: print_d("Scanning %r." % fullpath, self) desc = _("Scanning %s") % (util.unexpand(util.fsdecode(fullpath))) with Task(_("Library"), desc) as task: if cofuncid: task.copool(cofuncid) fullpath = util.expanduser(fullpath) if filter(fullpath.startswith, exclude): continue for path, dnames, fnames in os.walk(util.fsnative(fullpath)): for filename in fnames: fullfilename = os.path.join(path, filename) if filter(fullfilename.startswith, exclude): continue if fullfilename not in self._contents: fullfilename = os.path.realpath(fullfilename) if filter(fullfilename.startswith, exclude): continue if fullfilename not in self._contents: item = self.add_filename(fullfilename, False) if item is not None: added.append(item) if len(added) > 20: self.add(added) added = [] task.pulse() yield True if added: self.add(added) added = [] task.pulse() yield True def get_content(self): """Return visible and masked items""" items = self.values() for masked in self._masked.values(): items.extend(masked.values()) # Item keys are often based on filenames, in which case # sorting takes advantage of the filesystem cache when we # reload/rescan the files. items.sort(key=lambda item: item.key) return items def masked(self, item): """Return true if the item is in the library but masked.""" try: point = item.mountpoint except AttributeError: # Checking a key. for point in self._masked.itervalues(): if item in point: return True else: # Checking a full item. return item in self._masked.get(point, {}).itervalues() def unmask(self, point): print_d("Unmasking %r." % point, self) items = self._masked.pop(point, {}) if items: self.add(items.values()) def mask(self, point): print_d("Masking %r." % point, self) removed = {} for item in self.itervalues(): if item.mountpoint == point: removed[item.key] = item if removed: self.remove(removed.values()) self._masked.setdefault(point, {}).update(removed) @property def masked_mount_points(self): """List of mount points that contain masked items""" return self._masked.keys() def get_masked(self, mount_point): """List of items for a mount point""" return self._masked.get(mount_point, {}).values() def remove_masked(self, mount_point): """Remove all songs for a masked point""" self._masked.pop(mount_point, {}) class SongFileLibrary(SongLibrary, FileLibrary): """A library containing song files. Pickles contents to disk as `FileLibrary`""" def __init__(self, name=None): print_d("Initializing SongFileLibrary \"%s\"." % name) super(SongFileLibrary, self).__init__(name) def add_filename(self, filename, add=True): """Add a song to the library based on filename. If 'add' is true, the song will be added and the 'added' signal may be fired. Example (add=False): load many songs and call Library.add(songs) to add all in one go. The song is returned if it is in the library after this call. Otherwise, None is returned. """ song = None if filename not in self._contents: song = MusicFile(filename) if song and add: self.add([song]) else: print_d("Already got file %r." % filename) song = self._contents[filename] return song ����������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/browsers/�����������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017566� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/browsers/albums.py��������������������������������������������������������0000644�0001750�0001750�00000074002�12173213426�021431� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2010 Joe Wreschnig, Michael Urman, Iñigo Serna, # Christoph Reiter, Steven Robertson # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from gi.repository import Gtk, Pango, Gdk, GLib from quodlibet import config from quodlibet import const from quodlibet import qltk from quodlibet import util from quodlibet.browsers._base import Browser from quodlibet.parse import Query, XMLFromPattern from quodlibet.qltk.ccb import ConfigCheckButton from quodlibet.qltk.completion import EntryWordCompletion from quodlibet.qltk.songsmenu import SongsMenu from quodlibet.qltk.textedit import PatternEditBox from quodlibet.qltk.views import AllTreeView from quodlibet.qltk.x import MenuItem, Alignment, ScrolledWindow, RadioMenuItem from quodlibet.qltk.x import SymbolicIconImage, SeparatorMenuItem from quodlibet.qltk.searchbar import SearchBarBox from quodlibet.qltk.menubutton import MenuButton from quodlibet.util import copool, gobject_weak, thumbnails from quodlibet.util.library import background_filter from quodlibet.util.collection import Album EMPTY = _("Songs not in an album") PATTERN = r"""\<b\><album|\<i\><album>\</i\>|%s>\</b\><date| (<date>)> \<small\><~discs|<~discs> - ><~tracks> - <~long-length>\</small\> <~people>""" % EMPTY PATTERN_FN = os.path.join(const.USERDIR, "album_pattern") ALBUM_QUERIES = os.path.join(const.USERDIR, "lists", "album_queries") class FakeAlbum(dict): def get(self, key, default="", connector=" - "): if key[:1] == "~" and '~' in key[1:]: return connector.join(map(self.get, util.tagsplit(key))) elif key[:2] == "~#" and key[-4:-3] == ":": func = key[-3:] key = key[:-4] return "%s<%s>" % (util.tag(key), func) elif key in self: return self[key] return util.tag(key) __call__ = get def comma(self, key): value = self.get(key) if isinstance(value, (int, float)): return value return value.replace("\n", ", ") class AlbumTagCompletion(EntryWordCompletion): def __init__(self): super(AlbumTagCompletion, self).__init__() try: model = self.__model except AttributeError: model = type(self).__model = Gtk.ListStore(str) self.__refreshmodel() self.set_model(model) self.set_text_column(0) def __refreshmodel(self, *args): for tag in ["title", "album", "date", "people", "artist", "genre"]: self.__model.append(row=[tag]) for tag in ["tracks", "discs", "length", "date"]: self.__model.append(row=["#(" + tag]) for tag in ["rating", "playcount", "skipcount"]: for suffix in ["avg", "max", "min", "sum"]: self.__model.append(row=["#(%s:%s" % (tag, suffix)]) class Preferences(qltk.UniqueWindow): def __init__(self, parent): if self.is_not_unique(): return super(Preferences, self).__init__() self.set_border_width(12) self.set_title(_("Album List Preferences") + " - Quod Libet") self.set_default_size(400, 270) self.set_transient_for(qltk.get_top_parent(parent)) box = Gtk.VBox(spacing=6) cb = ConfigCheckButton( _("Show album _covers"), "browsers", "album_covers") cb.set_active(config.getboolean("browsers", "album_covers")) gobject_weak(cb.connect, 'toggled', lambda s: AlbumList.toggle_covers()) box.pack_start(cb, False, True, 0) cb = ConfigCheckButton( _("Inline _search includes people"), "browsers", "album_substrings") cb.set_active(config.getboolean("browsers", "album_substrings")) box.pack_start(cb, False, True, 0) vbox = Gtk.VBox(spacing=6) label = Gtk.Label() label.set_alignment(0.0, 0.5) edit = PatternEditBox(PATTERN) edit.text = AlbumList._pattern_text gobject_weak(edit.apply.connect, 'clicked', self.__set_pattern, edit) gobject_weak(edit.buffer.connect_object, 'changed', self.__preview_pattern, edit, label, parent=edit) vbox.pack_start(label, False, True, 0) vbox.pack_start(edit, True, True, 0) self.__preview_pattern(edit, label) f = qltk.Frame(_("Album Display"), child=vbox) box.pack_start(f, True, True, 0) main_box = Gtk.VBox(spacing=12) close = Gtk.Button(stock=Gtk.STOCK_CLOSE) close.connect('clicked', lambda *x: self.destroy()) b = Gtk.HButtonBox() b.set_layout(Gtk.ButtonBoxStyle.END) b.pack_start(close, True, True, 0) main_box.pack_start(box, True, True, 0) main_box.pack_start(b, False, True, 0) self.add(main_box) close.grab_focus() self.show_all() def __set_pattern(self, apply, edit): AlbumList.refresh_pattern(edit.text) def __preview_pattern(self, edit, label): people = "\n".join( [util.tag("artist"), util.tag("performer"), util.tag("arranger")]) album = FakeAlbum({ "date": "2004-10-31", "~length": util.format_time(6319), "~long-length": util.format_time_long(6319), "~tracks": ngettext("%d track", "%d tracks", 5) % 5, "~discs": ngettext("%d disc", "%d discs", 2) % 2, "~people": people}) try: text = XMLFromPattern(edit.text) % album except: text = _("Invalid pattern") edit.apply.set_sensitive(False) try: Pango.parse_markup(text, -1, u"\u0000") except GLib.GError: text = _("Invalid pattern") edit.apply.set_sensitive(False) else: edit.apply.set_sensitive(True) label.set_markup(text) def cmpa(a, b): """Like cmp but treats values that evaluate to false as inf""" if not a and b: return 1 if not b and a: return -1 return cmp(a, b) class PreferencesButton(Gtk.HBox): def __init__(self, model): super(PreferencesButton, self).__init__() sort_orders = [ (_("_Title"), self.__compare_title), (_("_Artist"), self.__compare_artist), (_("_Date"), self.__compare_date), (_("_Genre"), self.__compare_genre), (_("_Rating"), self.__compare_rating), ] menu = Gtk.Menu() sort_item = Gtk.MenuItem(_("Sort _by..."), use_underline=True) sort_menu = Gtk.Menu() active = config.getint('browsers', 'album_sort', 1) item = None for i, (label, func) in enumerate(sort_orders): item = RadioMenuItem(group=item, label=label, use_underline=True) model.set_sort_func(100 + i, func) if i == active: model.set_sort_column_id(100 + i, Gtk.SortType.ASCENDING) item.set_active(True) gobject_weak(item.connect, "toggled", util.DeferredSignal(self.__sort_toggled_cb), model, i) sort_menu.append(item) sort_item.set_submenu(sort_menu) menu.append(sort_item) pref_item = MenuItem(_("_Preferences"), Gtk.STOCK_PREFERENCES) menu.append(pref_item) gobject_weak(pref_item.connect_object, "activate", Preferences, self) menu.show_all() button = MenuButton( SymbolicIconImage("emblem-system", Gtk.IconSize.MENU), arrow=True) button.set_menu(menu) self.pack_start(button, True, True, 0) def __sort_toggled_cb(self, item, model, num): if item.get_active(): config.set("browsers", "album_sort", str(num)) model.set_sort_column_id(100 + num, Gtk.SortType.ASCENDING) def __compare_title(self, model, i1, i2, data): a1, a2 = model[i1][0], model[i2][0] # all albums has to stay at the top if (a1 and a2) is None: return cmp(a1, a2) # move album without a title to the bottom if not a1.title: return 1 if not a2.title: return -1 return (cmpa(a1.sort, a2.sort) or cmp(a1.key, a2.key)) def __compare_artist(self, model, i1, i2, data): a1, a2 = model[i1][0], model[i2][0] if (a1 and a2) is None: return cmp(a1, a2) if not a1.title: return 1 if not a2.title: return -1 return (cmpa(a1.peoplesort, a2.peoplesort) or cmpa(a1.date, a2.date) or cmpa(a1.sort, a2.sort) or cmp(a1.key, a2.key)) def __compare_date(self, model, i1, i2, data): a1, a2 = model[i1][0], model[i2][0] if (a1 and a2) is None: return cmp(a1, a2) if not a1.title: return 1 if not a2.title: return -1 return (cmpa(a1.date, a2.date) or cmpa(a1.sort, a2.sort) or cmp(a1.key, a2.key)) def __compare_genre(self, model, i1, i2, data): a1, a2 = model[i1][0], model[i2][0] if (a1 and a2) is None: return cmp(a1, a2) if not a1.title: return 1 if not a2.title: return -1 return (cmpa(a1.genre, a2.genre) or cmpa(a1.peoplesort, a2.peoplesort) or cmpa(a1.date, a2.date) or cmpa(a1.sort, a2.sort) or cmp(a1.key, a2.key)) def __compare_rating(self, model, i2, i1, data): a1, a2 = model[i1][0], model[i2][0] if (a1 and a2) is None: return cmp(a1, a2) return (cmpa(a1("~#rating"), a2("~#rating")) or cmpa(a1.date, a2.date) or cmpa(a1.sort, a2.sort) or cmp(a1.key, a2.key)) class VisibleUpdate(object): # how many rows should be updated # beyond the visible area in both directions PRELOAD_COUNT = 35 def enable_row_update(self, view, sw, column): gobject_weak(view.connect_object, 'draw', self.__update_visibility, view) gobject_weak(sw.get_vadjustment().connect, "value-changed", self.__stop_update, view, parent=view) self.__pending_paths = [] self.__scan_timeout = None self.__column = column self.__first_expose = True def disable_row_update(self): if self.__scan_timeout: GLib.source_remove(self.__scan_timeout) self.__scan_timeout = None if self.__pending_paths: copool.remove(self.__scan_paths) self.__column = None self.__pending_paths = [] def _row_needs_update(self, row): """Should return True if the rows should be updated""" raise NotImplementedError def _update_row(self, row): """Do whatever is needed to update the row""" raise NotImplementedError def __stop_update(self, adj, view): if self.__pending_paths: copool.remove(self.__scan_paths) self.__pending_paths = [] self.__update_visibility(view) def __update_visibility(self, view, *args): if not self.__column.get_visible(): return # update all visible rows on first expose event if self.__first_expose: self.__first_expose = False self.__update_visible_rows(view, 0) for i in self.__scan_paths(): pass if self.__scan_timeout: GLib.source_remove(self.__scan_timeout) self.__scan_timeout = None self.__scan_timeout = GLib.timeout_add( 50, self.__update_visible_rows, view, self.PRELOAD_COUNT) def __scan_paths(self): while self.__pending_paths: model, path = self.__pending_paths.pop() try: row = model[path] # row could have gone away by now except IndexError: pass else: self._update_row(row) yield True def __update_visible_rows(self, view, preload): vrange = view.get_visible_range() if vrange is None: return model_filter = view.get_model() model = model_filter.get_model() #generate a path list so that cover scanning starts in the middle #of the visible area and alternately moves up and down start, end = vrange # pygtk2.12 sometimes returns empty tuples if not start or not end: return start = start.get_indices()[0] - preload - 1 end = end.get_indices()[0] + preload vlist = range(end, start, -1) top = vlist[:len(vlist) / 2] bottom = vlist[len(vlist) / 2:] top.reverse() vlist_new = [] for i in vlist: if top: vlist_new.append(top.pop()) if bottom: vlist_new.append(bottom.pop()) vlist_new = filter(lambda s: s >= 0, vlist_new) vlist_new = map(Gtk.TreePath, vlist_new) visible_paths = [] for path in vlist_new: model_path = model_filter.convert_path_to_child_path(path) try: row = model[model_path] except TypeError: pass else: if self._row_needs_update(row): visible_paths.append([model, model_path]) if not self.__pending_paths and visible_paths: copool.add(self.__scan_paths) self.__pending_paths = visible_paths class AlbumList(Browser, Gtk.VBox, util.InstanceTracker, VisibleUpdate): __gsignals__ = Browser.__gsignals__ __model = None __no_cover = None __last_render = None __last_render_pb = None name = _("Album List") accelerated_name = _("_Album List") priority = 4 def pack(self, songpane): container = qltk.RHPaned() container.pack1(self, True, False) container.pack2(songpane, True, False) return container def unpack(self, container, songpane): container.remove(songpane) container.remove(self) @classmethod def init(klass, library): try: text = file(PATTERN_FN).read().rstrip() #Migrate <=2.2 pattern. #This breaks people, title.. so remove it someday. text = text.replace("<people", "<~people") text = text.replace("<title", "<album") klass._pattern_text = text except EnvironmentError: klass._pattern_text = PATTERN theme = Gtk.IconTheme.get_default() cover_size = Album.COVER_SIZE try: klass.__no_cover = theme.load_icon( "quodlibet-missing-cover", cover_size, 0) except GLib.GError: pass else: klass.__no_cover = thumbnails.scale( klass.__no_cover, (cover_size, cover_size)) klass._pattern = XMLFromPattern(klass._pattern_text) @classmethod def _destroy_model(klass): library = klass.__library for sig in klass.__sigs: library.albums.disconnect(sig) klass.__library = None klass.__model.clear() klass.__model = None @classmethod def toggle_covers(klass): on = config.getboolean("browsers", "album_covers") for albumlist in klass.instances(): albumlist.__cover_column.set_visible(on) map(lambda x: x.queue_resize(), albumlist.view.get_columns()) @classmethod def refresh_pattern(klass, pattern_text): if pattern_text == klass._pattern_text: return klass._pattern_text = pattern_text klass._pattern = XMLFromPattern(pattern_text) for row in klass.__model: klass.__model.row_changed(row.path, row.iter) pattern_fn = os.path.join(const.USERDIR, "album_pattern") f = file(pattern_fn, "w") f.write(pattern_text + "\n") f.close() @classmethod def _init_model(klass, library): klass.__model = model = Gtk.ListStore(object) klass.__library = library library.albums.load() klass.__sigs = [ library.albums.connect("added", klass._add_albums, model), library.albums.connect("removed", klass._remove_albums, model), library.albums.connect("changed", klass._change_albums, model)] model.append(row=[None]) for album in library.albums.itervalues(): model.append(row=[album]) @classmethod def _refresh_albums(klass, albums): """We signal all other open album views that we changed something (Only needed for the cover atm) so they redraw as well.""" if klass.__library: klass.__library.albums.refresh(albums) @classmethod def _add_albums(klass, library, added, model): for album in added: model.append(row=[album]) @classmethod def _remove_albums(klass, library, removed, model): removed_albums = removed.copy() for row in model: if row[0] and row[0] in removed_albums: removed_albums.remove(row[0]) model.remove(row.iter) if not removed_albums: break @classmethod def _change_albums(klass, library, changed, model): """Trigger a row redraw for each album that changed""" changed_albums = changed.copy() for row in model: if row[0] and row[0] in changed_albums: changed_albums.remove(row[0]) model.row_changed(row.path, row.iter) if not changed_albums: break def __init__(self, library, main): super(AlbumList, self).__init__(spacing=6) self._register_instance() if self.__model is None: self._init_model(library) sw = ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.IN) self.view = view = AllTreeView() view.set_headers_visible(False) model_sort = Gtk.TreeModelSort(model=self.__model) model_filter = model_sort.filter_new() self.__bg_filter = background_filter() self.__filter = None model_filter.set_visible_func(self.__parse_query) render = Gtk.CellRendererPixbuf() self.__cover_column = column = Gtk.TreeViewColumn("covers", render) column.set_visible(config.getboolean("browsers", "album_covers")) column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) column.set_fixed_width(Album.COVER_SIZE + 12) render.set_property('height', Album.COVER_SIZE + 8) def cell_data_pb(column, cell, model, iter, no_cover): album = model[iter][0] if album is None: pixbuf = None elif album.cover: pixbuf = album.cover else: pixbuf = no_cover if self.__last_render_pb == pixbuf: return self.__last_render_pb = pixbuf cell.set_property('pixbuf', pixbuf) column.set_cell_data_func(render, cell_data_pb, self.__no_cover) view.append_column(column) render = Gtk.CellRendererText() column = Gtk.TreeViewColumn("albums", render) column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) render.set_property('ellipsize', Pango.EllipsizeMode.END) def cell_data(column, cell, model, iter, data): album = model[iter][0] if album is None: text = "<b>%s</b>" % _("All Albums") text += "\n" + ngettext("%d album", "%d albums", len(model) - 1) % (len(model) - 1) markup = text else: markup = AlbumList._pattern % album if self.__last_render == markup: return self.__last_render = markup cell.markup = markup cell.set_property('markup', markup) column.set_cell_data_func(render, cell_data) view.append_column(column) view.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) view.set_rules_hint(True) view.set_search_equal_func(self.__search_func, None) view.set_search_column(0) view.set_model(model_filter) sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) sw.add(view) if main: gobject_weak(view.connect, 'row-activated', self.__play_selection) self.__sig = gobject_weak( view.get_selection().connect, 'changed', util.DeferredSignal(self.__update_songs), parent=view) targets = [("text/x-quodlibet-songs", Gtk.TargetFlags.SAME_APP, 1), ("text/uri-list", 0, 2)] targets = [Gtk.TargetEntry.new(*t) for t in targets] view.drag_source_set( Gdk.ModifierType.BUTTON1_MASK, targets, Gdk.DragAction.COPY) gobject_weak(view.connect, "drag-data-get", self.__drag_data_get) gobject_weak(view.connect_object, 'popup-menu', self.__popup, view, library) self.accelerators = Gtk.AccelGroup() search = SearchBarBox(completion=AlbumTagCompletion(), accel_group=self.accelerators) gobject_weak(search.connect, 'query-changed', self.__update_filter) gobject_weak(search.connect_object, 'focus-out', lambda w: w.grab_focus(), view) self.__search = search prefs = PreferencesButton(model_sort) search.pack_start(prefs, False, True, 0) if main: self.pack_start(Alignment(search, left=3, top=3), False, True, 0) else: self.pack_start(search, False, True, 0) self.pack_start(sw, True, True, 0) self.connect("destroy", self.__destroy) self.enable_row_update(view, sw, self.__cover_column) self.show_all() def _row_needs_update(self, row): album = row[0] return album is not None and not album.scanned def _update_row(self, row): album = row[0] album.scan_cover() self._refresh_albums([album]) def __destroy(self, browser): self.disable_row_update() self.__inhibit() self.view.set_model(None) klass = type(browser) if not klass.instances(): klass._destroy_model() def __update_filter(self, entry, text, scroll_up=True, restore=False): model = self.view.get_model() self.__filter = None if not Query.match_all(text): self.__filter = Query(text, star=["~people", "album"]).search self.__bg_filter = background_filter() self.__inhibit() # We could be smart and try to scroll to a selected album # but that introduces lots of wild scrolling. Feel free to change it. # Without scrolling the TV trys to stay at the same position (40% down) # which makes no sence so always go to the top. if scroll_up: self.view.scroll_to_point(0, 0) # don't filter on restore if there is nothing to filter if not restore or self.__filter or self.__bg_filter: model.refilter() self.__uninhibit() def __parse_query(self, model, iter, data): f, b = self.__filter, self.__bg_filter if f is None and b is None: return True elif model[iter][0] is None: return True elif b is None: return f(model[iter][0]) elif f is None: return b(model[iter][0]) else: return b(model[iter][0]) and f(model[iter][0]) def __search_func(self, model, column, key, iter, data): album = model[iter][0] if album is None: return True key = key.decode('utf-8').lower() title = album.title.lower() if key in title: return False if config.getboolean("browsers", "album_substrings"): people = (p.lower() for p in album.list("~people")) for person in people: if key in person: return False return True def __popup(self, view, library): selection = view.get_selection() albums = self.__get_selected_albums(selection) songs = self.__get_songs_from_albums(albums) menu = SongsMenu(library, songs, parent=self) if self.__cover_column.get_visible(): num = len(albums) button = MenuItem( ngettext("Reload album _cover", "Reload album _covers", num), Gtk.STOCK_REFRESH) gobject_weak(button.connect, 'activate', self.__refresh_album, view) menu.prepend(SeparatorMenuItem()) menu.prepend(button) menu.show_all() return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def __refresh_album(self, menuitem, view): selection = view.get_selection() albums = self.__get_selected_albums(selection) for album in albums: album.scan_cover(True) self._refresh_albums(albums) def __get_selected_albums(self, selection): if not selection: return [] model, rows = selection.get_selected_rows() if not model or not rows: return [] if rows and model[rows[0]][0] is None: return [row[0] for row in model if row[0]] return [model[row][0] for row in rows] def __get_songs_from_albums(self, albums, sort=True): # Sort first by how the albums appear in the model itself, # then within the album using the default order. songs = [] if sort: for album in albums: songs.extend(sorted(album.songs, key=lambda s: s.sort_key)) else: for album in albums: songs.extend(album.songs) return songs def __get_selected_songs(self, selection, sort=True): albums = self.__get_selected_albums(selection) return self.__get_songs_from_albums(albums, sort) def __drag_data_get(self, view, ctx, sel, tid, etime): songs = self.__get_selected_songs(view.get_selection()) if tid == 1: filenames = [song("~filename") for song in songs] type_ = Gdk.atom_intern("text/x-quodlibet-songs", True) sel.set(type_, 8, "\x00".join(filenames)) else: sel.set_uris([song("~uri") for song in songs]) def __play_selection(self, view, indices, col): self.emit("activated") def active_filter(self, song): selection = self.view.get_selection() for album in self.__get_selected_albums(selection): if song in album.songs: return True return False def can_filter_text(self): return True def filter_text(self, text): self.__search.set_text(text) if Query.is_parsable(text): self.__update_filter(self.__search, text) self.__inhibit() self.view.set_cursor((0,)) self.__uninhibit() self.activate() def can_filter(self, key): # numerics are different for collections, and title # works, but not of much use here if key is not None and (key.startswith("~#") or key == "title"): return False return super(AlbumList, self).can_filter(key) def can_filter_albums(self): return True def list_albums(self): model = self.view.get_model() return [row[0].key for row in model if row[0]] def filter_albums(self, values): view = self.view self.__inhibit() changed = view.select_by_func(lambda r: r[0] and r[0].key in values) self.__uninhibit() if changed: self.activate() def unfilter(self): self.filter_text("") self.view.set_cursor((0,)) def activate(self): self.view.get_selection().emit('changed') def __inhibit(self): self.view.get_selection().handler_block(self.__sig) def __uninhibit(self): self.view.get_selection().handler_unblock(self.__sig) def restore(self): text = config.get("browsers", "query_text").decode("utf-8") entry = self.__search entry.set_text(text) # update_filter expects a parsable query if Query.is_parsable(text): self.__update_filter(entry, text, scroll_up=False, restore=True) albums = config.get("browsers", "albums").split("\n") # FIXME: If albums is "" then it could be either all albums or # no albums. If it's "" and some other stuff, assume no albums, # otherwise all albums. self.__inhibit() if albums == [""]: self.view.set_cursor((0,)) else: select = lambda r: r[0] and r[0].title in albums self.view.select_by_func(select) self.__uninhibit() def scroll(self, song): album_key = song.album_key select = lambda r: r[0] and r[0].key == album_key self.view.select_by_func(select, one=True) def __get_config_string(self, selection): if not selection: return "" model, rows = selection.get_selected_rows() if not model or not rows: return "" # All is selected if rows and model[rows[0]][0] is None: return "" # All selected albums albums = (model[row][0] for row in rows) # FIXME: title is far from perfect here confval = "\n".join((a.title for a in albums)) # ConfigParser strips a trailing \n so we move it to the front if confval and confval[-1] == "\n": confval = "\n" + confval[:-1] return confval def save(self): selection = self.view.get_selection() conf = self.__get_config_string(selection) config.set("browsers", "albums", conf) text = self.__search.get_text().encode("utf-8") config.set("browsers", "query_text", text) def __update_songs(self, selection): songs = self.__get_selected_songs(selection, False) self.emit('songs-selected', songs, None) browsers = [AlbumList] ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/browsers/media.py���������������������������������������������������������0000644�0001750�0001750�00000047725�12173213426�021241� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2006 Markus Koller # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from gi.repository import Gtk, Pango from quodlibet import config from quodlibet import devices from quodlibet import qltk from quodlibet import util from quodlibet.browsers._base import Browser from quodlibet.formats._audio import AudioFile from quodlibet.qltk.views import AllTreeView from quodlibet.qltk.songsmenu import SongsMenu from quodlibet.qltk.wlw import WaitLoadBar from quodlibet.qltk.browser import LibraryBrowser from quodlibet.qltk.delete import DeleteDialog from quodlibet.qltk.x import Alignment, ScrolledWindow class DeviceProperties(Gtk.Dialog): def __init__(self, parent, device): super(DeviceProperties, self).__init__( _("Device Properties"), qltk.get_top_parent(parent), buttons=(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)) self.set_default_size(400, -1) self.connect('response', self.__close) table = Gtk.Table() table.set_border_width(8) table.set_row_spacings(8) table.set_col_spacings(8) self.vbox.pack_start(table, False, True, 0) props = [] props.append((_("Device:"), device.dev, None)) mountpoint = util.escape( device.mountpoint or ("<i>%s</i>" % _("Not mounted"))) props.append((_("Mount Point:"), mountpoint, None)) props.append((None, None, None)) entry = Gtk.Entry() entry.set_text(device['name']) props.append((_("_Name:"), entry, 'name')) y = 0 for title, value, key in props + device.Properties(): if title is None: table.attach(Gtk.HSeparator(), 0, 2, y, y + 1) else: if key and isinstance(value, Gtk.CheckButton): value.set_label(title) value.set_use_underline(True) value.connect('toggled', self.__changed, key, device) table.attach(value, 0, 2, y, y + 1, xoptions=Gtk.AttachOptions.FILL) else: label = Gtk.Label() label.set_markup("<b>%s</b>" % util.escape(title)) label.set_alignment(0.0, 0.5) table.attach(label, 0, 1, y, y + 1, xoptions=Gtk.AttachOptions.FILL) if key and isinstance(value, Gtk.Widget): widget = value label.set_mnemonic_widget(widget) label.set_use_underline(True) widget.connect('changed', self.__changed, key, device) else: widget = Gtk.Label(label=value) widget.set_use_markup(True) widget.set_selectable(True) widget.set_alignment(0.0, 0.5) table.attach(widget, 1, 2, y, y + 1) y += 1 self.show_all() def __changed(self, widget, key, device): if isinstance(widget, Gtk.Entry): value = widget.get_text() elif isinstance(widget, Gtk.SpinButton): value = widget.get_value() elif isinstance(widget, Gtk.CheckButton): value = widget.get_active() else: raise NotImplementedError device[key] = value def __close(self, dialog, response): dialog.destroy() devices.write() # This will be included in SongsMenu class Menu(Gtk.Menu): def __init__(self, songs, library): super(Menu, self).__init__() for device in MediaDevices.devices(): i = Gtk.ImageMenuItem(device['name']) i.set_image( Gtk.Image.new_from_icon_name(device.icon, Gtk.IconSize.MENU)) i.set_sensitive(device.is_connected()) i.connect_object( 'activate', self.__copy_to_device, device, songs, library) self.append(i) @staticmethod def __copy_to_device(device, songs, library): if len(MediaDevices.instances()) > 0: browser = MediaDevices.instances()[0] else: win = LibraryBrowser(MediaDevices, library) browser = win.browser browser.select(device) browser.dropped(browser.get_toplevel().songlist, songs) class MediaDevices(Gtk.VBox, Browser, util.InstanceTracker): __gsignals__ = Browser.__gsignals__ name = _("Media Devices") accelerated_name = _("_Media Devices") priority = 25 replaygain_profiles = ['track'] __devices = Gtk.ListStore(object, str) __busy = False __last = None @staticmethod def cell_data(col, render, model, iter, data): device = model[iter][0] if device.is_connected(): render.markup = "<b>%s</b>" % util.escape(device['name']) else: render.markup = util.escape(device['name']) render.set_property('markup', render.markup) @classmethod def init(klass, library): devices.device_manager.connect('added', klass.__device_added) devices.device_manager.connect('removed', klass.__device_removed) devices.device_manager.discover() @classmethod def devices(klass): return [row[0] for row in klass.__devices] @classmethod def __device_added(klass, manager, device): klass.__devices.append(row=[device, device.icon]) @classmethod def __device_removed(klass, manager, bid): for row in klass.__devices: if row[0].bid == bid: klass.__devices.remove(row.iter) break def __init__(self, library, main): super(MediaDevices, self).__init__(spacing=6) self._register_instance() self.__cache = {} # Device list on the left pane swin = ScrolledWindow() swin.set_shadow_type(Gtk.ShadowType.IN) swin.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) self.pack_start(swin, True, True, 0) self.__view = view = AllTreeView() view.set_model(self.__devices) view.set_rules_hint(True) view.set_headers_visible(False) view.get_selection().set_mode(Gtk.SelectionMode.BROWSE) view.get_selection().connect_object('changed', self.__refresh, False) view.connect('popup-menu', self.__popup_menu, library) if main: view.connect('row-activated', lambda *a: self.emit("activated")) swin.add(view) col = Gtk.TreeViewColumn("Devices") view.append_column(col) render = Gtk.CellRendererPixbuf() col.pack_start(render, False) col.add_attribute(render, 'icon-name', 1) self.__render = render = Gtk.CellRendererText() render.set_property('ellipsize', Pango.EllipsizeMode.END) render.connect('edited', self.__edited) col.pack_start(render, True) col.set_cell_data_func(render, MediaDevices.cell_data) hbox = Gtk.HBox(spacing=6) hbox.set_homogeneous(True) if main: self.pack_start(Alignment(hbox, left=3, bottom=3), False, True, 0) else: self.pack_start(hbox, False, True, 0) self.__refresh_button = refresh = Gtk.Button(stock=Gtk.STOCK_REFRESH) refresh.connect_object('clicked', self.__refresh, True) refresh.set_sensitive(False) hbox.pack_start(refresh, True, True, 0) self.__eject_button = eject = Gtk.Button(_("_Eject"), use_underline=True) eject.set_image( Gtk.Image.new_from_icon_name("media-eject", Gtk.IconSize.BUTTON)) eject.connect('clicked', self.__eject) eject.set_sensitive(False) hbox.pack_start(eject, True, True, 0) # Device info on the right pane self.__header = table = Gtk.Table() table.set_col_spacings(8) self.__device_icon = icon = Gtk.Image() icon.set_size_request(48, 48) table.attach(icon, 0, 1, 0, 2, 0) self.__device_name = label = Gtk.Label() label.set_ellipsize(Pango.EllipsizeMode.END) label.set_alignment(0, 0) table.attach(label, 1, 3, 0, 1) self.__device_space = label = Gtk.Label() label.set_ellipsize(Pango.EllipsizeMode.END) label.set_alignment(0, 0.5) table.attach(label, 1, 2, 1, 2) self.__progress = progress = Gtk.ProgressBar() progress.set_size_request(150, -1) table.attach(progress, 2, 3, 1, 2, xoptions=0, yoptions=0) self.accelerators = Gtk.AccelGroup() key, mod = Gtk.accelerator_parse('F2') self.accelerators.connect(key, mod, 0, self.__rename) self.__statusbar = WaitLoadBar() self.show_all() def pack(self, songpane): self.__vbox = vbox = Gtk.VBox(spacing=6) vbox.pack_start(self.__header, False, True, 0) vbox.pack_start(songpane, True, True, 0) vbox.pack_start(self.__statusbar, False, True, 0) vbox.show() self.__header.show_all() self.__header.hide() self.__statusbar.show_all() self.__statusbar.hide() self.__paned = paned = qltk.RHPaned() paned.pack1(self, True, False) paned.pack2(vbox, True, False) return paned def unpack(self, container, songpane): self.__vbox.remove(songpane) self.__paned.remove(self) def Menu(self, songs, songlist, library): model, iter = self.__view.get_selection().get_selected() if iter: device = model[iter][0] delete = device.delete and self.__delete_songs else: delete = False menu = SongsMenu(library, songs, delete=delete, remove=False, accels=songlist.accelerators, parent=self) return menu def activate(self): self.__refresh() def save(self): selection = self.__view.get_selection() model, iter = selection.get_selected() if iter: config.set('browsers', 'media', model[iter][0]['name']) def restore(self): try: name = config.get('browsers', 'media') except config.Error: pass else: for row in self.__devices: if row[0]['name'] == name: break else: return selection = self.__view.get_selection() selection.unselect_all() selection.select_iter(row.iter) def select(self, device): for row in self.__devices: if row[0] == device: break else: return # Force a full refresh try: del self.__cache[device.bid] except KeyError: pass selection = self.__view.get_selection() selection.unselect_all() selection.select_iter(row.iter) def dropped(self, songlist, songs): return self.__copy_songs(songlist, songs) def __popup_menu(self, view, library): model, iter = view.get_selection().get_selected() device = model[iter][0] if device.is_connected() and not self.__busy: songs = self.__list_songs(device) else: songs = [] menu = SongsMenu(library, songs, playlists=False, devices=False, remove=False, parent=self) menu.preseparate() props = Gtk.ImageMenuItem(Gtk.STOCK_PROPERTIES, use_stock=True) props.connect_object('activate', self.__properties, model[iter][0]) props.set_sensitive(not self.__busy) menu.prepend(props) ren = qltk.MenuItem(_("_Rename"), Gtk.STOCK_EDIT) keyval, mod = Gtk.accelerator_parse("F2") ren.add_accelerator( 'activate', self.accelerators, keyval, mod, Gtk.AccelFlags.VISIBLE) def rename(path): self.__render.set_property('editable', True) view.set_cursor(path, view.get_columns()[0], start_editing=True) ren.connect_object('activate', rename, model.get_path(iter)) menu.prepend(ren) menu.preseparate() eject = Gtk.ImageMenuItem(_("_Eject"), use_underline=True) eject.set_image( Gtk.Image.new_from_icon_name("media-eject", Gtk.IconSize.MENU)) eject.set_sensitive( not self.__busy and device.eject and device.is_connected()) eject.connect_object('activate', self.__eject, None) menu.prepend(eject) refresh = Gtk.ImageMenuItem(Gtk.STOCK_REFRESH, use_stock=True) refresh.set_sensitive(device.is_connected()) refresh.connect_object('activate', self.__refresh, True) menu.prepend(refresh) menu.show_all() return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def __properties(self, device): DeviceProperties(self, device).run() self.__set_name(device) def __rename(self, group, acceleratable, keyval, modifier): model, iter = self.__view.get_selection().get_selected() if iter: self.__render.set_property('editable', True) self.__view.set_cursor(model.get_path(iter), self.__view.get_columns()[0], start_editing=True) def __edited(self, render, path, newname): self.__devices[path][0]['name'] = newname self.__set_name(self.__devices[path][0]) render.set_property('editable', False) devices.write() def __set_name(self, device): self.__device_name.set_markup( '<span size="x-large"><b>%s</b></span>' % util.escape(device['name'])) def __refresh(self, rescan=False): model, iter = self.__view.get_selection().get_selected() if iter: path = model[iter].path if not rescan and self.__last == path: return self.__last = path device = model[iter][0] self.__device_icon.set_from_icon_name( device.icon, Gtk.IconSize.DIALOG) self.__set_name(device) songs = [] if device.is_connected(): self.__header.show_all() self.__eject_button.set_sensitive(bool(device.eject)) self.__refresh_button.set_sensitive(True) self.__refresh_space(device) try: songs = self.__list_songs(device, rescan) except NotImplementedError: pass else: self.__eject_button.set_sensitive(False) self.__refresh_button.set_sensitive(False) self.__header.hide() self.emit('songs-selected', songs, device.ordered) else: self.__last = None self.emit('songs-selected', [], False) def __refresh_space(self, device): try: space, free = device.get_space() except NotImplementedError: self.__device_space.set_text("") self.__progress.hide() else: used = space - free fraction = float(used) / space self.__device_space.set_markup( _("<b>%s</b> used, <b>%s</b> available") % (util.format_size(used), util.format_size(free))) self.__progress.set_fraction(fraction) self.__progress.set_text("%.f%%" % round(fraction * 100)) self.__progress.show() def __list_songs(self, device, rescan=False): if rescan or not device.bid in self.__cache: self.__busy = True self.__cache[device.bid] = device.list(self.__statusbar) self.__busy = False return self.__cache[device.bid] def __check_device(self, device, message): if not device.is_connected(): qltk.WarningMessage( self, message, _("<b>%s</b> is not connected.") % util.escape(device['name']) ).run() return False return True def __copy_songs(self, songlist, songs): model, iter = self.__view.get_selection().get_selected() if not iter: return False device = model[iter][0] if not self.__check_device(device, _("Unable to copy songs")): return False self.__busy = True wlb = self.__statusbar wlb.setup(len(songs), _("Copying <b>%(song)s</b>"), {'song': ''}) wlb.show() model = songlist.get_model() for song in songs: label = util.escape(song('~artist~title')) if wlb.step(song=label): wlb.hide() break if len(model) > 0: songlist.scroll_to_cell(model[-1].path) while Gtk.events_pending(): Gtk.main_iteration() space, free = device.get_space() if free < os.path.getsize(song['~filename']): wlb.hide() qltk.WarningMessage( self, _("Unable to copy song"), _("There is not enough free space for this song.") ).run() break status = device.copy(songlist, song) if isinstance(status, AudioFile): model.append([status]) try: self.__cache[device.bid].append(song) except KeyError: pass self.__refresh_space(device) else: msg = _("<b>%s</b> could not be copied.") % label if type(status) == unicode: msg += "\n\n" + util.escape(status) qltk.WarningMessage(self, _("Unable to copy song"), msg).run() if device.cleanup and not device.cleanup(wlb, 'copy'): pass else: wlb.hide() self.__busy = False return True def __delete_songs(self, songs): model, iter = self.__view.get_selection().get_selected() if not iter: return False songlist = qltk.get_top_parent(self).songlist device = model[iter][0] if not self.__check_device(device, _("Unable to delete songs")): return False song_titles = [s('~artist~title') for s in songs] if DeleteDialog(self, song_titles, False, True).run() != 2: return False self.__busy = True wlb = self.__statusbar wlb.setup(len(songs), _("Deleting <b>%(song)s</b>"), {'song': ''}) wlb.show() model = songlist.get_model() for song in songs: label = util.escape(song('~artist~title')) if wlb.step(song=label): wlb.hide() break status = device.delete(songlist, song) if status is True: model.remove(model.find(song)) try: self.__cache[device.bid].remove(song) except (KeyError, ValueError): pass self.__refresh_space(device) else: msg = _("<b>%s</b> could not be deleted.") % label if type(status) == unicode: msg += "\n\n%s" % status qltk.WarningMessage( self, _("Unable to delete song"), msg).run() if device.cleanup and not device.cleanup(wlb, 'delete'): pass else: wlb.hide() self.__busy = False def __eject(self, button): model, iter = self.__view.get_selection().get_selected() if iter: device = model[iter][0] status = device.eject() if status is not True: msg = _("Ejecting <b>%s</b> failed.") % device['name'] if status: msg += "\n\n%s" % status qltk.ErrorMessage(self, _("Unable to eject device"), msg).run() if devices.init(): browsers = [MediaDevices] else: print_w(_("No device backend, Media Devices browser disabled.")) browsers = [] �������������������������������������������quodlibet-3.0.2/quodlibet/browsers/__init__.py������������������������������������������������������0000644�0001750�0001750�00000005042�12167022430�021677� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from quodlibet import const from quodlibet.util.modulescanner import load_dir_modules from quodlibet.browsers._base import Browser browsers = [] def init(): global browsers this_dir = os.path.dirname(__file__) load_pyc = os.name == 'nt' modules = load_dir_modules(this_dir, package=__package__, load_compiled=load_pyc) user_dir = os.path.join(const.USERDIR, "browsers") if os.path.isdir(user_dir): modules += load_dir_modules(user_dir, package="quodlibet.fake.browsers", load_compiled=load_pyc) for browser in modules: try: browsers.extend(browser.browsers) except AttributeError: print_w("%r doesn't contain any browsers." % browser.__name__) def is_browser(Kind): return isinstance(Kind, type) and issubclass(Kind, Browser) browsers = filter(is_browser, browsers) if not browsers: raise SystemExit("No browsers found!") browsers.sort(key=lambda Kind: Kind.priority) # Return the name of the ith browser. def name(i): return browsers[i].__name__ # Return a constructor for a browser, either given by number, a string # of the number, or the name. Defaults to the first browser if all else # fails. def get(i): try: return browsers[int(i)] except (IndexError, ValueError, TypeError): try: return get(index(i)) except (IndexError, ValueError): return browsers[0] # Return the index of a browser given its name. Defaults to the first # browser if all else fails. def index(i): try: return int(i) except (ValueError, TypeError): try: return map(name, range(len(browsers))).index(i) except: return 0 def BrowseLibrary(): items = [] for Kind in browsers: if Kind.in_menu: item = "Browser" + Kind.__name__ items.append("<menuitem action='%s'/>" % item) return "\n".join(items) def ViewBrowser(): items = [] for Kind in browsers: item = "View" + Kind.__name__ items.append("<menuitem action='%s'/>" % item) return "\n".join(items) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/browsers/search.py��������������������������������������������������������0000644�0001750�0001750�00000013544�12173213426�021417� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2013 Joe Wreschnig, Michael Urman, Iñigo Serna, # Christoph Reiter, Steven Robertson, Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from gi.repository import Gtk, GLib from quodlibet import config from quodlibet import const from quodlibet import qltk from quodlibet.browsers._base import Browser from quodlibet.parse import Query from quodlibet.qltk.ccb import ConfigCheckMenuItem from quodlibet.qltk.completion import LibraryTagCompletion from quodlibet.qltk.menubutton import MenuButton from quodlibet.qltk.songlist import SongList from quodlibet.qltk.searchbar import SearchBarBox, LimitSearchBarBox from quodlibet.qltk.x import Alignment, SymbolicIconImage QUERIES = os.path.join(const.USERDIR, "lists", "queries") class EmptyBar(Gtk.VBox, Browser): """A browser that the user only interacts with indirectly, via the Filter menu. The VBox remains empty.""" __gsignals__ = Browser.__gsignals__ name = _("Disable Browser") accelerated_name = _("_Disable Browser") priority = 0 in_menu = False def pack(self, songpane): container = Gtk.VBox(spacing=6) container.pack_start(self, False, True, 0) container.pack_start(songpane, True, True, 0) return container def unpack(self, container, songpane): container.remove(songpane) container.remove(self) def __init__(self, library, main): super(EmptyBar, self).__init__() self._text = "" self._filter = None self._library = library self.commands = {"query": self.__query} self.connect('destroy', self.__destroy) def __destroy(self, *args): del self.commands def active_filter(self, song): if self._filter is not None: return self._filter(song) else: return True def filter_text(self, text): self._text = text self.activate() def __query(self, text, library, window, player): self.filter_text(text) def save(self): config.set("browsers", "query_text", self._text.encode('utf-8')) def restore(self, activate=True): try: text = config.get("browsers", "query_text") except Exception: return if activate: self.filter_text(text) else: self._text = text def finalize(self, restore): config.set("browsers", "query_text", "") def _get_songs(self): try: self._filter = Query(self._text, star=SongList.star).search except Query.error: pass else: if Query.match_all(self._text): songs = self._library.values() self._filter = None else: songs = filter(self._filter, self._library) return songs def activate(self): songs = self._get_songs() if songs is not None: GLib.idle_add(self.emit, 'songs-selected', songs, None) def can_filter_text(self): return True def unfilter(self): self.filter_text("") class SearchBar(EmptyBar): """Like EmptyBar, but the user can also enter a query manually. This is QL's default browser. EmptyBar handles all the GObject stuff.""" name = _("Search Library") accelerated_name = _("_Search Library") priority = 1 in_menu = True class PreferencesButton(Gtk.HBox): def __init__(self, search_bar_box): super(SearchBar.PreferencesButton, self).__init__() menu = Gtk.Menu() limit_item = ConfigCheckMenuItem( _("_Limit Results"), "browsers", "search_limit", True) limit_item.connect("toggled", search_bar_box.toggle_limit_widgets) menu.append(limit_item) menu.show_all() button = MenuButton( SymbolicIconImage("emblem-system", Gtk.IconSize.MENU), arrow=True) button.set_menu(menu) self.pack_start(button, True, True, 0) def __init__(self, library, main, limit=True): super(SearchBar, self).__init__(library, main) self.set_spacing(6) completion = LibraryTagCompletion(library.librarian) self.accelerators = Gtk.AccelGroup() if limit: show_limit = config.getboolean("browsers", "search_limit") sbb = LimitSearchBarBox(completion=completion, accel_group=self.accelerators, show_limit=show_limit) else: sbb = SearchBarBox(completion=completion, accel_group=self.accelerators) sbb.connect('query-changed', self.__text_parse) sbb.connect('focus-out', self.__focus) self._sb_box = sbb if limit: prefs = SearchBar.PreferencesButton(sbb) sbb.pack_start(prefs, False, True, 0) align = (Alignment(sbb, left=3, right=3, top=3) if main else Alignment(sbb)) self.pack_start(align, False, True, 0) self.connect('destroy', self.__destroy) self.show_all() def __destroy(self, *args): self._sb_box = None def __focus(self, widget, *args): qltk.get_top_parent(widget).songlist.grab_focus() def activate(self): songs = self._get_songs() if songs is not None and self._sb_box: songs = self._sb_box.limit(songs) GLib.idle_add(self.emit, 'songs-selected', songs, None) def __text_parse(self, bar, text): self._text = text self.activate() def filter_text(self, text): self._text = text self._sb_box.set_text(text) self.activate() browsers = [EmptyBar, SearchBar] ������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/browsers/filesystem.py����������������������������������������������������0000644�0001750�0001750�00000020477�12173213426�022341� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # 2012 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation # Some sort of crazy directory-based browser. QL is full of minor hacks # to support this by automatically adding songs to the library when it # needs them to be there. import os from gi.repository import Gtk, Gdk from quodlibet import config from quodlibet import formats from quodlibet import qltk from quodlibet import util from quodlibet.browsers._base import Browser from quodlibet.library import SongFileLibrary from quodlibet.qltk.filesel import DirectoryTree from quodlibet.qltk.songsmenu import SongsMenu from quodlibet.qltk.x import ScrolledWindow from quodlibet.util import copool, split_scan_dirs from quodlibet.util.dprint import print_d from quodlibet.util.uri import URI class FileSystem(Browser, Gtk.HBox): __gsignals__ = Browser.__gsignals__ __library = None name = _("File System") accelerated_name = _("_File System") priority = 10 TARGET_QL, TARGET_EXT = range(1, 3) def pack(self, songpane): container = qltk.RHPaned() container.pack1(self, True, False) container.pack2(songpane, True, False) return container def unpack(self, container, songpane): container.remove(songpane) container.remove(self) @classmethod def __added(klass, library, songs): klass.__library.remove(songs) @classmethod def init(klass, library): klass.__glibrary = library klass.__library = SongFileLibrary("filesystem") library.connect('added', klass.__remove_because_added) @classmethod def __remove_because_added(klass, library, songs): songs = filter(klass.__library.__contains__, songs) klass.__library.remove(songs) def __init__(self, library, main): super(FileSystem, self).__init__() sw = ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.IN) folders = filter(None, split_scan_dirs(config.get("settings", "scan"))) dt = DirectoryTree(folders=folders) targets = [("text/x-quodlibet-songs", Gtk.TargetFlags.SAME_APP, self.TARGET_QL), ("text/uri-list", 0, self.TARGET_EXT)] targets = [Gtk.TargetEntry.new(*t) for t in targets] dt.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, targets, Gdk.DragAction.COPY) dt.connect('drag-data-get', self.__drag_data_get) sel = dt.get_selection() sel.unselect_all() sel.connect_object('changed', copool.add, self.__songs_selected, dt) if main: dt.connect('row-activated', lambda *a: self.emit("activated")) sw.add(dt) self.pack_start(sw, True, True, 0) self.show_all() def get_child(self): return self.get_children()[0].get_child() def __drag_data_get(self, view, ctx, sel, tid, etime): model, rows = view.get_selection().get_selected_rows() dirs = [model[row][0] for row in rows] for songs in self.__find_songs(view.get_selection()): pass if tid == self.TARGET_QL: cant_add = filter(lambda s: not s.can_add, songs) if cant_add: qltk.ErrorMessage( qltk.get_top_parent(self), _("Unable to copy songs"), _("The files selected cannot be copied to other " "song lists or the queue.")).run() ctx.drag_abort(etime) return to_add = filter(self.__library.__contains__, songs) self.__add_songs(view, to_add) filenames = [song("~filename") for song in songs] type_ = Gdk.atom_intern("text/x-quodlibet-songs", True) sel.set(type_, 8, "\x00".join(filenames)) else: # External target (app) is delivered a list of URIS of songs uris = list(set([URI.frompath(dir) for dir in dirs])) print_d("Directories to drop: %s" % [u.filename for u in uris]) sel.set_uris(uris) def can_filter_tag(self, key): return key == "~dirname" def filter(self, key, values): self.get_child().get_selection().unselect_all() for v in values: self.get_child().go_to(v) def scroll(self, song): self.__select_paths([song("~dirname")]) def restore(self): try: paths = config.get("browsers", "filesystem").split("\n") except config.Error: pass else: self.__select_paths(paths) def __select_paths(self, paths): def select(model, path, iter, (paths, first)): if model[iter][0] in paths: self.get_child().get_selection().select_path(path) paths.remove(model[iter][0]) if not first: self.get_child().set_cursor(path) # copy treepath, gets invalid after the callback first.append(path.copy()) else: for fpath in paths: if model[path][0] and fpath.startswith(model[path][0]): self.get_child().expand_row(path, False) return not bool(paths) first = [] self.get_child().get_model().foreach(select, (paths, first)) if first: self.get_child().scroll_to_cell(first[0], None, True, 0.5) def save(self): model, rows = self.get_child().get_selection().get_selected_rows() paths = "\n".join([model[row][0] for row in rows]) config.set("browsers", "filesystem", paths) def activate(self): copool.add(self.__songs_selected, self.get_child()) def Menu(self, songs, songlist, library): menu = SongsMenu(library, songs, remove=self.__remove_songs, delete=True, accels=songlist.accelerators, parent=self) i = qltk.MenuItem(_("_Add to Library"), Gtk.STOCK_ADD) i.set_sensitive(False) i.connect('activate', self.__add_songs, songs) for song in songs: if song not in self.__glibrary: i.set_sensitive(True) break menu.preseparate() menu.prepend(i) return menu def __add_songs(self, item, songs): songs = filter(self.__library.__contains__, songs) self.__library.librarian.move(songs, self.__library, self.__glibrary) def __remove_songs(self, songs): songs = filter(self.__glibrary.__contains__, songs) self.__library.librarian.move(songs, self.__glibrary, self.__library) def __find_songs(self, selection): model, rows = selection.get_selected_rows() dirs = [model[row][0] for row in rows] songs = [] to_add = [] for dir in dirs: try: for file in filter(formats.filter, sorted(os.listdir(util.fsnative(dir)))): fn = os.path.realpath(os.path.join(dir, file)) if fn in self.__glibrary: songs.append(self.__glibrary[fn]) elif fn not in self.__library: song = formats.MusicFile(fn) if song: to_add.append(song) songs.append(song) yield songs if fn in self.__library: song = self.__library[fn] if not song.valid(): self.__library.reload(song) if song in self.__library: songs.append(song) except OSError: pass self.__library.add(to_add) yield songs def __songs_selected(self, view): if self.get_window(): self.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) for songs in self.__find_songs(view.get_selection()): yield True if self.get_window(): self.get_window().set_cursor(None) self.emit('songs-selected', songs, None) browsers = [FileSystem] �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/browsers/paned.py���������������������������������������������������������0000644�0001750�0001750�00000072500�12173213426�021236� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2013 Joe Wreschnig, Michael Urman, Iñigo Serna, # Christoph Reiter, Steven Robertson, Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import re import operator from gi.repository import Gtk, GLib, Pango, Gdk from quodlibet import config from quodlibet import qltk from quodlibet import util from quodlibet.browsers.search import SearchBar from quodlibet.formats import PEOPLE from quodlibet.util.collection import Collection from quodlibet.parse import Query, XMLFromPattern from quodlibet.qltk.songlist import SongList from quodlibet.qltk.songsmenu import SongsMenu from quodlibet.qltk.tagscombobox import TagsComboBoxEntry from quodlibet.qltk.views import AllTreeView, BaseView, TreeViewColumn from quodlibet.qltk.x import ScrolledWindow, SymbolicIconImage from quodlibet.util import tag, pattern from quodlibet.util.library import background_filter def get_headers(): # QL <= 2.1 saved the headers tab-separated, but had a space-separated # default value, so check for that. headers = config.get("browsers", "panes") if headers == "~people album": return headers.split() else: return headers.split("\t") def save_headers(headers): headers = "\t".join(headers) config.set("browsers", "panes", headers) class PatternEditor(Gtk.VBox): PRESETS = [ ["genre", "~people", "album"], ["~people", "album"], ] COMPLETION = ["genre", "grouping", "~people", "artist", "album", "~year"] def __init__(self): super(PatternEditor, self).__init__(spacing=6) self.__headers = headers = {} buttons = [] group = None for tags in self.PRESETS: tied = "~" + "~".join(tags) group = Gtk.RadioButton(group=group, label="_" + tag(tied), use_underline=True) headers[group] = tags buttons.append(group) group = Gtk.RadioButton(group=group, label=_("_Custom"), use_underline=True) self.__custom = group headers[group] = [] buttons.append(group) button_box = Gtk.HBox(spacing=6) self.__model = model = Gtk.ListStore(str) radio_box = Gtk.VBox(spacing=6) for button in buttons: radio_box.pack_start(button, False, True, 0) button.connect('toggled', self.__toggled, button_box, model) self.pack_start(radio_box, False, True, 0) cb = TagsComboBoxEntry(self.COMPLETION) view = BaseView(model) view.set_reorderable(True) view.set_headers_visible(False) ctrl_box = Gtk.VBox(spacing=6) add = Gtk.Button(stock=Gtk.STOCK_ADD) ctrl_box.pack_start(add, False, True, 0) add.connect('clicked', self.__add, model, cb) remove = Gtk.Button(stock=Gtk.STOCK_REMOVE) ctrl_box.pack_start(remove, False, True, 0) remove.connect('clicked', self.__remove, view) selection = view.get_selection() selection.connect('changed', self.__selection_changed, remove) selection.emit('changed') sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.IN) sw.add(view) edit_box = Gtk.VBox(spacing=6) edit_box.pack_start(cb, False, True, 0) edit_box.pack_start(sw, True, True, 0) button_box.pack_start(edit_box, True, True, 0) button_box.pack_start(ctrl_box, False, True, 0) self.pack_start(button_box, True, True, 0) render = Gtk.CellRendererText() render.set_property("editable", True) def edited_cb(render, path, text, model): model[path][0] = text render.connect("edited", edited_cb, model) column = Gtk.TreeViewColumn(None, render, text=0) view.append_column(column) def __get_headers(self): for button in self.__headers.iterkeys(): if button.get_active(): if button == self.__custom: model_headers = [row[0] for row in self.__model] self.__headers[self.__custom] = model_headers return self.__headers[button] def __set_headers(self, new_headers): for button, headers in self.__headers.iteritems(): if headers == new_headers: button.set_active(True) button.emit("toggled") break else: self.__headers[self.__custom] = new_headers self.__custom.set_active(True) headers = property(__get_headers, __set_headers) def __selection_changed(self, selection, remove): remove.set_sensitive(bool(selection.get_selected()[1])) def __add(self, button, model, cb): if cb.tag: model.append(row=[cb.tag]) def __remove(self, button, view): view.remove_selection() def __toggled(self, button, edit_widget, model): tags = self.__headers[button] if tags: model.clear() for h in tags: model.append(row=[h]) edit_widget.set_sensitive( button.get_active() and button is self.__custom) class Preferences(qltk.UniqueWindow): def __init__(self, parent=None): if self.is_not_unique(): return super(Preferences, self).__init__() self.set_transient_for(qltk.get_top_parent(parent)) self.set_default_size(350, 270) self.set_border_width(12) self.set_title(_("Paned Browser Preferences") + " - Quod Libet") vbox = Gtk.VBox(spacing=12) editor = PatternEditor() editor.headers = get_headers() apply = Gtk.Button(stock=Gtk.STOCK_APPLY) apply.connect_object("clicked", self.__apply, editor, False) cancel = Gtk.Button(stock=Gtk.STOCK_CANCEL) cancel.connect("clicked", lambda x: self.destroy()) ok = Gtk.Button(stock=Gtk.STOCK_OK) ok.connect_object("clicked", self.__apply, editor, True) box = Gtk.HButtonBox() box.set_spacing(6) box.set_layout(Gtk.ButtonBoxStyle.END) box.pack_start(apply, True, True, 0) box.pack_start(cancel, True, True, 0) box.pack_start(ok, True, True, 0) vbox.pack_start(editor, True, True, 0) vbox.pack_start(box, False, True, 0) self.add(vbox) ok.grab_focus() self.show_all() def __apply(self, editor, close): if editor.headers != get_headers(): save_headers(editor.headers) PanedBrowser.set_all_panes() if close: self.destroy() ALL, SONGS, UNKNOWN = range(3) UNKNOWN_MARKUP = "<b>%s</b>" % _("Unknown") ALL_MARKUP = "<b>%s</b>" % _("All") class SongSelection(Collection): def __init__(self, key): super(SongSelection, self).__init__() self.songs = set() self.key = key def all_have(self, key, value): """Check if all songs have tag `key` set to `value`. Used for filtering.""" if key[:2] == "~#" and "~" not in key[2:]: for song in self.songs: if song(key) != value: return False else: for song in self.songs: if value not in song.list(key): return False return True class PanePattern(object): """Row pattern format: 'categorize_pattern:display_pattern' * display_pattern is optional (fallback: ~#tracks) * patterns, tied and normal tags. * display patterns can have function prefixes for numerical tags. * ':' has to be escaped ('\:') TODO: sort pattern, filter query """ def __init__(self, row_pattern): parts = re.split(r"(?<!\\):", row_pattern) parts = map(lambda p: p.replace("\:", ":"), parts) is_numeric = lambda s: s[:2] == "~#" and "~" not in s[2:] is_pattern = lambda s: '<' in s f_round = lambda s: (isinstance(s, float) and "%.2f" % s) or s disp = (len(parts) >= 2 and parts[1]) or "\<i\>(<~#tracks>)\</i\>" cat = parts[0] if is_pattern(cat): title = pattern(cat, esc=True) try: pc = XMLFromPattern(cat) except ValueError: pc = XMLFromPattern("") tags = pc.tags format = pc.format_list has_markup = True else: title = tag(cat) tags = util.tagsplit(cat) has_markup = False if is_numeric(cat): format = lambda song: [unicode(f_round(song(cat)))] else: format = lambda song: song.list_separate(cat) if is_pattern(disp): try: pd = XMLFromPattern(disp) except ValueError: pd = XMLFromPattern("") format_display = pd.format else: if is_numeric(disp): format_display = lambda coll: unicode(f_round(coll(disp))) else: format_display = lambda coll: util.escape(coll.comma(disp)) self.title = title self.tags = set(tags) self.format = format self.format_display = format_display self.has_markup = has_markup def __repr__(self): return "<%s title=%r>" % (self.__class__.__name__, self.title) class Pane(AllTreeView): __render = Gtk.CellRendererText() __render.set_property('ellipsize', Pango.EllipsizeMode.END) __render_count = Gtk.CellRendererText() __render_count.set_property('xalign', 1.0) __restore_values = None @classmethod def set_restore(klass, selected): klass.__restore_values = selected @staticmethod def __count_cdf(column, cell, model, iter, display_pattern): type, songs = model[iter] if type != ALL: cell.markup = display_pattern(songs) else: cell.markup = "" cell.set_property('markup', cell.markup) @staticmethod def __text_cdf(column, cell, model, iter, markup): type, songs = model[iter] if type == SONGS: if markup: cell.markup = songs.key cell.set_property('markup', cell.markup) else: cell.markup = None cell.set_property('text', songs.key) else: if type == ALL: cell.markup = ALL_MARKUP else: cell.markup = UNKNOWN_MARKUP cell.set_property('markup', cell.markup) def __init__(self, prefs, next, library): super(Pane, self).__init__() self.set_fixed_height_mode(True) self.pattern = PanePattern(prefs) self.tags = self.pattern.tags self.__next = next self.__model = model = Gtk.ListStore(int, object) self.__sort_cache = {} self.__key_cache = {} column = TreeViewColumn(self.pattern.title) column.set_use_markup(True) column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) column.set_fixed_width(50) column.pack_start(self.__render, True) column.set_cell_data_func(self.__render, self.__text_cdf, self.pattern.has_markup) column.pack_start(self.__render_count, False) column.set_cell_data_func(self.__render_count, self.__count_cdf, self.pattern.format_display) self.append_column(column) self.set_model(model) self.set_search_equal_func(self.__search_func, None) selection = self.get_selection() selection.set_mode(Gtk.SelectionMode.MULTIPLE) self.__sig = selection.connect('changed', self.__selection_changed) s = self.connect('popup-menu', self.__popup_menu, library) self.connect_object('destroy', self.disconnect, s) targets = [("text/x-quodlibet-songs", Gtk.TargetFlags.SAME_APP, 1), ("text/uri-list", 0, 2)] targets = [Gtk.TargetEntry.new(*t) for t in targets] self.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, targets, Gdk.DragAction.COPY) self.connect("drag-data-get", self.__drag_data_get) self.connect("destroy", self.__destroy) def __destroy(self, *args): # needed for gc self.__next = None def __search_func(self, model, column, key, iter, data): type, data = model[iter] key = key.decode('utf-8').lower() if type == SONGS and key in data.key.lower(): return False return True def __drag_data_get(self, view, ctx, sel, tid, etime): songs = self.__get_selected_songs(sort=True) if tid == 1: filenames = [song("~filename") for song in songs] type_ = Gdk.atom_intern("text/x-quodlibet-songs", True) sel.set(type_, 8, "\x00".join(filenames)) else: sel.set_uris([song("~uri") for song in songs]) def __get_format_keys(self, song): try: return self.__key_cache[song] except KeyError: # We filter out empty values, so Unknown can be "" self.__key_cache[song] = filter(None, self.pattern.format(song)) return self.__key_cache[song] def __human_sort_key(self, text, reg=re.compile('<.*?>')): try: return self.__sort_cache[text] except KeyError: # remove the markup so it doesn't affect the sort order if self.pattern.has_markup: text = reg.sub("", text) self.__sort_cache[text] = util.human_sort_key(text) return self.__sort_cache[text] def __popup_menu(self, view, library): songs = self.__get_selected_songs(sort=True) menu = SongsMenu(library, songs, parent=self) menu.show_all() return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def __selection_changed(self, selection): if not self.__next: return self.__next.fill(self.__get_selected_songs()) def _remove(self, songs, remove_if_empty=True): self.inhibit() model = self.__model songs = set(songs) to_remove = [] for song in songs: if song in self.__key_cache: del self.__key_cache[song] for row in model: type, data = row if type == ALL: continue data.songs -= songs data.finalize() model.row_changed(row.path, row.iter) if not data.songs: to_remove.append(row.iter) if remove_if_empty: for iter in to_remove: try: del(self.__sort_cache[model[iter][1].key]) except KeyError: pass model.remove(iter) if len(model) == 1 and model[0][0] == ALL: model.clear() elif to_remove and len(model) == 2: model.remove(model.get_iter(0)) self.uninhibit() def _matches(self, song): model, rows = self.get_selection().get_selected_rows() if not rows or model[rows[0]][0] == ALL: return True keys = self.__get_format_keys(song) if not keys and model[rows[-1]][0] == UNKNOWN: return True for row in rows: if model[row][1].key in keys: return True return False def _add(self, songs): collection = {} unknown = SongSelection("") human_sort = self.__human_sort_key for song in songs: keys = self.__get_format_keys(song) if not keys: unknown.songs.add(song) for key in keys: try: collection[key][0].songs.add(song) except KeyError: collection[key] = (SongSelection(key), human_sort(key)) collection[key][0].songs.add(song) items = sorted(collection.iteritems(), key=lambda s: s[1][1], reverse=True) # faster... model = self.__model if not len(model): insert = model.insert if unknown.songs: insert(0, [UNKNOWN, unknown]) for key, (val, sort_key) in items: insert(0, [SONGS, val]) if len(model) > 1: insert(0, [ALL, None]) return # insert all new songs key = None val = None sort_key = None for row in self.__model: type, data = row if type != SONGS: continue if key is None: if not items: break key, (val, sort_key) = items.pop(-1) if key == data.key: data.songs |= val.songs data.finalize() model.row_changed(row.path, row.iter) key = None elif sort_key < human_sort(data.key): model.insert_before(row.iter, row=[SONGS, val]) key = None # the last one failed, add it again if key: items.append((key, (val, sort_key))) # insert the left over songs if items: if model[-1][0] == UNKNOWN: for key, (val, srt) in reversed(items): model.insert(len(model) - 1, row=[SONGS, val]) else: for key, (val, srt) in items: model.append(row=[SONGS, val]) # check if All needs to be inserted if len(model) > 1 and model[0][0] != ALL: model.insert(0, [ALL, None]) # check if Unknown needs to be inserted or updated if unknown.songs: last_row = model[-1] type, data = last_row if type == UNKNOWN: data.songs |= unknown.songs data.finalize() model.row_changed(last_row.path, last_row.iter) else: model.append(row=[UNKNOWN, unknown]) def inhibit(self): self.get_selection().handler_block(self.__sig) def uninhibit(self): self.get_selection().handler_unblock(self.__sig) def list(self, key): # We get all tag values and check if all songs have it. model = self.__model # If the key is the only tag, return everything if len(self.tags) == 1 and key in self.tags: return [r[1].key for r in model if r[0] != ALL] # For patterns/tied tags we have to make sure that filtering for # that key will return only songs that all have the specified value all = set() sels = (row[1] for row in model if row[0] == SONGS) for sel in sels: values = sel.list(key) for value in values: if value not in all and sel.all_have(key, value): all.add(value) # Also add unknown if len(model) > 0 and model[-1][0] == UNKNOWN: all.add("") return list(all) def fill(self, songs): # Restore the selection restore = self.__restore_values selected = (restore and restore.pop(0)) or self.get_selected() model = self.__model # If previously all entries were selected: select All if len(model) == len(selected): selected = None self.inhibit() self.set_model(None) model.clear() self._add(songs) self.set_model(model) self.uninhibit() self.set_selected(selected, jump=True) if not songs: self.__next.fill([]) def scroll(self, song): values = self.__get_format_keys(song) select_func = lambda r: r[0] != ALL and r[1].key in values self.select_by_func(select_func, one=True) def get_selected(self): try: model, paths = self.get_selection().get_selected_rows() except AttributeError: return [] else: if not paths: return [] if model[paths[0]][0] == ALL: return [model[p][1].key for p in paths[1:]] + [None] else: return [model[p][1].key for p in paths] def set_selected(self, values, jump=False): if not len(self.__model): return values = values or [None] def select_func(row): return (row[0] == ALL and None in values) or \ (row[0] == SONGS and row[1].key in values) # If the selection is the same, change nothing if values != self.get_selected(): self.inhibit() if not self.select_by_func(select_func, scroll=jump): self.set_cursor((0,)) self.uninhibit() self.get_selection().emit('changed') def set_selected_by_tag(self, tag, values, jump=False): """Select the entries which songs all have one of the values.""" # Like with self.list we can select all matching keys if the tag # is our only tag if len(self.tags) == 1 and tag in self.tags: self.set_selected(values, jump) return pattern_values = [] for type, data in self.__model: if type == SONGS: for value in values: if data.all_have(tag, value): pattern_values.append(data.key) break # Select unknown if "" in values: pattern_values.append("") self.set_selected(pattern_values, jump) def __get_selected_songs(self, sort=False): model, rows = self.get_selection().get_selected_rows() s = set() if not rows: return s if model[rows[0]][0] == ALL: for row in model: if row[0] != ALL: s |= row[1].songs else: for row in rows: s |= model[row][1].songs if sort: return sorted(s, key=operator.attrgetter("sort_key")) return s class PanedBrowser(SearchBar, util.InstanceTracker): """A Browser enabling "drilling down" of tracks by successive selections in multiple tag pattern panes (e.g. Genre / People / Album ). It presents available values (and track counts) for each pane's tag""" name = _("Paned Browser") accelerated_name = _("_Paned Browser") priority = 3 def pack(self, songpane): container = qltk.RVPaned() container.pack1(self, True, False) container.pack2(songpane, True, False) return container def set_all_panes(klass): for browser in klass.instances(): browser.refresh_panes() browser.fill_panes() set_all_panes = classmethod(set_all_panes) def __init__(self, library, main): super(PanedBrowser, self).__init__(library, main, limit=False) self._register_instance() self.__main = main keyval, mod = Gtk.accelerator_parse("<control>Home") s = self.accelerators.connect(keyval, mod, 0, self.__all) self.connect_object('destroy', self.accelerators.disconnect_key, keyval, mod) select = Gtk.Button(_("Select _All"), use_underline=True) self._sb_box.pack_start(select, False, True, 0) prefs = Gtk.Button() prefs.add(SymbolicIconImage("emblem-system", Gtk.IconSize.MENU)) s = prefs.connect('clicked', Preferences) self.connect_object('destroy', prefs.disconnect, s) s = select.connect('clicked', self.__all) self.connect_object('destroy', select.disconnect, s) self._sb_box.pack_start(prefs, False, True, 0) for s in [library.connect('changed', self.__changed), library.connect('added', self.__added), library.connect('removed', self.__removed) ]: self.connect_object('destroy', library.disconnect, s) self.refresh_panes() self.show_all() def __all(self, *args): self.__panes[-1].inhibit() for pane in self.__panes: pane.set_selected(None, True) self.__panes[-1].uninhibit() self.__panes[-1].get_selection().emit('changed') def __added(self, library, songs): songs = filter(self._filter, songs) for pane in self.__panes: pane._add(songs) songs = filter(pane._matches, songs) def __removed(self, library, songs, remove_if_empty=True): songs = filter(self._filter, songs) for pane in self.__panes: pane._remove(songs, remove_if_empty) def __changed(self, library, songs): self.__removed(library, songs, False) self.__added(library, songs) self.__removed(library, []) def active_filter(self, song): # check with the search filter if not self._filter(song): return False # check if the selection is right in every pane for pane in self.__panes: if not pane._matches(song): return False return True def activate(self): if self._text is not None and Query.is_parsable(self._text): star = dict.fromkeys(SongList.star) star.update(self.__star) self._filter = Query(self._text, star.keys()).search songs = filter(self._filter, self._library) bg = background_filter() if bg: songs = filter(bg, songs) self.__panes[0].fill(songs) def scroll(self, song): for pane in self.__panes: pane.scroll(song) def refresh_panes(self): try: hbox = self.get_children()[1] except IndexError: pass # first call else: hbox.destroy() hbox = Gtk.HBox(spacing=6) hbox.set_homogeneous(True) hbox.set_size_request(100, 100) # Fill in the pane list. The last pane reports back to us. self.__panes = [self] panes = get_headers() panes.reverse() for pane in panes: self.__panes.insert(0, Pane(pane, self.__panes[0], self._library)) self.__panes.pop() # remove self for pane in self.__panes: if self.__main: pane.connect('row-activated', lambda *x: self.emit("activated")) sw = ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.IN) sw.add(pane) hbox.pack_start(sw, True, True, 0) self.pack_start(hbox, True, True, 0) self.show_all() self.__star = {} for p in self.__panes: self.__star.update(dict.fromkeys(p.tags)) def fill_panes(self): self.__panes[-1].inhibit() self.activate() self.__panes[-1].uninhibit() def __get_filter_pane(self, key): """Get the best pane for filtering etc.""" canditates = [] for pane in self.__panes: if (key in pane.tags or (key in PEOPLE and "~people" in pane.tags)): canditates.append((len(pane.tags), pane)) canditates.sort() return (canditates and canditates[0][1]) or None def can_filter_tag(self, key): return (self.__get_filter_pane(key) is not None) def filter(self, key, values): filter_pane = self.__get_filter_pane(key) for pane in self.__panes: if pane is filter_pane: filter_pane.set_selected_by_tag(key, values, True) return pane.set_selected(None, True) def unfilter(self): self.filter("", "") def list(self, key): filter_pane = self.__get_filter_pane(key) if filter_pane is None: return super(PanedBrowser, self).list(key) for pane in self.__panes: if pane is filter_pane: return filter_pane.list(key) pane.set_selected(None, True) return [] def save(self): super(PanedBrowser, self).save() selected = [] for pane in self.__panes: values = pane.get_selected() # The first value tells us if All was selected all = None in values if all: values.remove(None) all = str(int(bool(all))) values.insert(0, all) # The config lib strips all whitespace, # so add a bogus . at the end selected.append("\t".join(values) + "\t.") config.set("browsers", "pane_selection", "\n".join(selected)) def restore(self): super(PanedBrowser, self).restore(activate=False) self._sb_box.set_text(self._text) selected = config.get("browsers", "pane_selection") if not selected: return pane_values = [sel.split("\t") for sel in selected.split("\n")] for pane in pane_values: try: if int(pane[0]): pane[0] = None else: del pane[0] except (ValueError, IndexError): pass Pane.set_restore(pane_values) def finalize(self, restored): super(PanedBrowser, self).finalize(restored) if not restored: self._text = "" self.fill_panes() def fill(self, songs): GLib.idle_add(self.emit, 'songs-selected', list(songs), None) browsers = [PanedBrowser] ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/browsers/_base.py���������������������������������������������������������0000644�0001750�0001750�00000016774�12173213426�021233� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import random from gi.repository import Gtk, GObject from quodlibet import app from quodlibet import util from quodlibet.qltk.songsmenu import SongsMenu from quodlibet.util.library import background_filter class Filter(object): # A callable that returns True if the passed song should be in the # song list, False if not and None if no filter is active. # Used for adding new songs to the song list or # dynamic playlist removal when a song ends. # def active_filter(self, song): ... active_filter = None # Deprecated: use active_filter instead def dynamic(self, song): if callable(self.active_filter): ret = self.active_filter(song) if ret is not None: return ret return True def can_filter_tag(self, key): return False def can_filter_text(self): return False def filter_text(self, text): raise NotImplementedError def can_filter_albums(self): return False #Do filtering base on a list of album keys def filter_albums(self, values): raise NotImplementedError # Return a list of unique album keys (song.album_key) def list_albums(self): albums = app.library.albums albums.load() return [a.key for a in albums] # Actually do the filtering (with a union of values). def filter(self, key, values): # for backward compatibility if self.can_filter_text(): self.filter_text(util.build_filter_query(key, values)) # Return a list of unique values for the given tag. This needs to be # here since not all browsers pull from the default library. def list(self, tag): library = app.library bg = background_filter() if bg: songs = filter(bg, library.itervalues()) tags = set() for song in songs: tags.update(song.list(tag)) return list(tags) return library.tag_values(tag) # Reset all filters and display the whole library. def unfilter(self): pass # Decides whether "filter on foo" menu entries are available. def can_filter(self, key): c = self.can_filter_text() c = c or (key == "album" and self.can_filter_albums()) return c or (key is not None and self.can_filter_tag(key)) # Do filtering in the best way the browser can handle def filter_on(self, songs, key): if key == "album" and self.can_filter_albums(): values = set() values.update([s.album_key for s in songs]) self.filter_albums(values) elif self.can_filter_tag(key) or self.can_filter_text(): values = set() if key.startswith("~#"): values.update([song(key, 0) for song in songs]) else: for song in songs: values.update(song.list(key)) if self.can_filter_tag(key): self.filter(key, values) else: query = util.build_filter_query(key, values) self.filter_text(query) def filter_random(self, key): if key == "album" and self.can_filter_albums(): albums = self.list_albums() if albums: self.filter_albums([random.choice(albums)]) elif self.can_filter_tag(key): values = self.list(key) if values: value = random.choice(values) self.filter(key, [value]) elif self.can_filter_text(): values = self.list(key) if values: value = random.choice(values) query = util.build_filter_query(key, [value]) self.filter_text(query) # Browers are how the audio library is presented to the user; they # create the list of songs that MainSongList is filled with, and pass # them back via a callback function. class Browser(Filter): # Unfortunately, GObjects do not play with Python multiple inheritance. # So, we need to reasssign this in every subclass. __gsignals__ = { 'songs-selected': (GObject.SignalFlags.RUN_LAST, None, (object, object)), 'activated': (GObject.SignalFlags.RUN_LAST, None, ()), } # The browser's name, without an accelerator. name = _("Library Browser") # The name, with an accelerator. accelerated_name = _("Library Browser") # Priority in the menu list (0 is first, higher numbers come later) priority = 100 # Whether the browser should appear in the Music->Browse menu. in_menu = True # For custom packing, define a function that returns a Widget with the # browser and MainSongList both packed into it. def pack(self, songpane): raise NotImplementedError # Unpack the browser and songlist when switching browsers in the main # window. The container will be automatically destroyed afterwards. def unpack(self, container, songpane): raise NotImplementedError # If true, the global filter will be applied by MainSongList to # the songs returned. background = True # A list of column headers to display; None means all are okay. headers = None # Per-browser remote commands. commands = {} # Called after library and MainWindow initialization, before the # GTK main loop starts. @classmethod def init(klass, library): pass # Save/restore selected songlist. Browsers should save whatever # they need to recreate the criteria for the current song list (not # the list itself). restore is called at startup if the browser # is the first loaded. def save(self): raise NotImplementedError def restore(self): raise NotImplementedError # Called after restore/activate or after the browser is loaded. # restored is True if restore was called. def finalize(self, restored): pass # Scroll to something related to the given song. def scroll(self, song): pass # Do whatever is needed to emit songs-selected again. def activate(self): raise NotImplementedError # Called when the song list is reordered. If it's not callable # but true, no call is made but the song list is still reorderable. # def reordered(self, songlist): ... reordered = None # Called with the SongList and a list of songs when songs are dropped # but the song list does not support reordering. Adding the songs to # the list is the browser's responsibility. This function should # return True if the drop was successful. # def dropped(self, songlist, songs): ... return True dropped = None # An AccelGroup that is added to / removed from the window where # the browser is. accelerators = None # This method returns a Gtk.Menu, probably a SongsMenu. After this # menu is returned the SongList may modify it further. def Menu(self, songs, songlist, library): menu = SongsMenu( library, songs, delete=True, accels=songlist.accelerators, parent=songlist) return menu def statusbar(self, i): return ngettext( "%(count)d song (%(time)s)", "%(count)d songs (%(time)s)", i) # Replay Gain profiles for this browser. replaygain_profiles = None ����quodlibet-3.0.2/quodlibet/browsers/iradio.py��������������������������������������������������������0000644�0001750�0001750�00000064717�12173213426�021431� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2011 Joe Wreschnig, Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import sys import bz2 import urllib2 import urllib import itertools from gi.repository import Gtk, GLib from quodlibet import const from quodlibet import qltk from quodlibet import util from quodlibet import config from quodlibet.browsers._base import Browser from quodlibet.formats.remote import RemoteFile from quodlibet.formats._audio import TAG_TO_SORT, MIGRATE, AudioFile from quodlibet.library import SongLibrary from quodlibet.parse import Query from quodlibet.qltk.getstring import GetStringDialog from quodlibet.qltk.songsmenu import SongsMenu from quodlibet.qltk.notif import Task from quodlibet.util import copool, gobject_weak, sanitize_tags from quodlibet.util.uri import URI from quodlibet.qltk.views import AllTreeView from quodlibet.qltk.searchbar import SearchBarBox from quodlibet.qltk.completion import LibraryTagCompletion from quodlibet.qltk.x import MenuItem, Alignment, ScrolledWindow from quodlibet.qltk.x import SymbolicIconImage, SeparatorMenuItem from quodlibet.qltk.menubutton import MenuButton STATION_LIST_URL = "http://quodlibet.googlecode.com/files/radiolist.bz2" STATIONS_FAV = os.path.join(const.USERDIR, "stations") STATIONS_ALL = os.path.join(const.USERDIR, "stations_all") # TODO: - Do the update in a thread # - Ranking: reduce duplicate stations (max 3 URLs per station) # prefer stations that match a genre? # Migration path for pickle sys.modules["browsers.iradio"] = sys.modules[__name__] class IRFile(RemoteFile): multisong = True can_add = False format = "Radio Station" __CAN_CHANGE = "title artist grouping".split() def __get(self, base_call, key, *args, **kwargs): if key == "title" and "title" not in self and "organization" in self: return base_call("organization", *args, **kwargs) # split title by " - " if no artist tag is present and # this is not the main song: common format for shoutcast stations if not self.multisong and key in ("title", "artist") and \ "title" in self and "artist" not in self: title = base_call("title").split(" - ", 1) if len(title) > 1: return (key == "title" and title[-1]) or title[0] if key in ("artist", TAG_TO_SORT["artist"]) and \ not base_call(key, *args) and "website" in self: return base_call("website", *args) if key == "~format" and "audio-codec" in self: return "%s (%s)" % (self.format, base_call("audio-codec", *args, **kwargs)) return base_call(key, *args, **kwargs) def __call__(self, key, *args, **kwargs): base_call = super(IRFile, self).__call__ return self.__get(base_call, key, *args, **kwargs) def get(self, key, *args, **kwargs): base_call = super(IRFile, self).get return self.__get(base_call, key, *args, **kwargs) def write(self): pass def to_dump(self): # dump without title title = None if "title" in self: title = self["title"] del self["title"] dump = super(IRFile, self).to_dump() if title is not None: self["title"] = title # add all generated tags lines = dump.splitlines() for tag in ["title", "artist", "~format"]: value = self.get(tag) if value is not None: lines.append("%s=%s" % (tag, util.encode(value))) return "\n".join(lines) def can_change(self, k=None): if self.streamsong: if k is None: return [] else: return False else: if k is None: return self.__CAN_CHANGE else: return k in self.__CAN_CHANGE def ParsePLS(file): data = {} lines = file.readlines() if not lines or "[playlist]" not in lines.pop(0): return [] for line in lines: try: head, val = line.strip().split("=", 1) except (TypeError, ValueError): continue else: head = head.lower() if head.startswith("length") and val == "-1": continue else: data[head] = val.decode('utf-8', 'replace') count = 1 files = [] warnings = [] while True: if "file%d" % count in data: filename = data["file%d" % count].encode('utf-8', 'replace') if filename.lower()[-4:] in [".pls", ".m3u"]: warnings.append(filename) else: irf = IRFile(filename) for key in ["title", "genre", "artist"]: try: irf[key] = data["%s%d" % (key, count)] except KeyError: pass try: irf["~#length"] = int(data["length%d" % count]) except (KeyError, TypeError, ValueError): pass files.append(irf) else: break count += 1 if warnings: qltk.WarningMessage( None, _("Unsupported file type"), _("Station lists can only contain locations of stations, " "not other station lists or playlists. The following locations " "cannot be loaded:\n%s") % "\n ".join(map(util.escape, warnings)) ).run() return files def ParseM3U(fileobj): files = [] pending_title = None for line in fileobj: line = line.strip() if line.startswith("#EXTINF:"): try: pending_title = line.split(",", 1)[1] except IndexError: pending_title = None elif line.startswith("http"): irf = IRFile(line) if pending_title: irf["title"] = pending_title.decode('utf-8', 'replace') pending_title = None files.append(irf) return files def add_station(uri): """Fetches the URI content and extracts IRFiles""" irfs = [] if isinstance(uri, unicode): uri = uri.encode('utf-8') if uri.lower().endswith(".pls") or uri.lower().endswith(".m3u"): try: sock = urllib.urlopen(uri) except EnvironmentError, e: try: err = e.strerror.decode(const.ENCODING, 'replace') except (TypeError, AttributeError): err = e.strerror[1].decode(const.ENCODING, 'replace') qltk.ErrorMessage(None, _("Unable to add station"), err).run() return [] if uri.lower().endswith(".pls"): irfs = ParsePLS(sock) elif uri.lower().endswith(".m3u"): irfs = ParseM3U(sock) sock.close() else: try: irfs = [IRFile(uri)] except ValueError, err: qltk.ErrorMessage(None, _("Unable to add station"), err).run() return irfs def download_taglist(callback, cofuncid, step=1024 * 10): """Generator for loading the bz2 compressed tag list. Calls callback with the decompressed data or None in case of an error.""" with Task(_("Internet Radio"), _("Downloading station list")) as task: if cofuncid: task.copool(cofuncid) try: response = urllib2.urlopen(STATION_LIST_URL) except urllib2.URLError: GLib.idle_add(callback, None) return try: size = int(response.info().get("content-length", 0)) except ValueError: size = 0 decomp = bz2.BZ2Decompressor() data = "" temp = "" read = 0 while temp or not data: read += len(temp) if size: task.update(float(read) / size) else: task.pulse() yield True try: data += decomp.decompress(temp) temp = response.read(step) except (IOError, EOFError): data = None break response.close() yield True stations = None if data: stations = parse_taglist(data) GLib.idle_add(callback, stations) def parse_taglist(data): """Parses a dump file like list of tags and returns a list of IRFiles uri=http://... tag=value1 tag2=value tag=value2 uri=http://... ... """ stations = [] station = None for l in data.split("\n"): key = l.split("=")[0] value = l.split("=", 1)[1] if key == "uri": if station: stations.append(station) station = IRFile(value) continue value = util.decode(value) san = sanitize_tags({key: value}, stream=True).items() if not san: continue key, value = san[0] if isinstance(value, str): value = value.decode("utf-8") if value not in station.list(key): station.add(key, value) else: station[key] = value if station: stations.append(station) return stations def sort_stations(station): bitrate = station("~#bitrate", 96) listeners = int(station("~listenerpeak", 20)) return (listeners >= 20, bitrate, listeners) class AddNewStation(GetStringDialog): def __init__(self, parent): super(AddNewStation, self).__init__( parent, _("New Station"), _("Enter the location of an Internet radio station:"), okbutton=Gtk.STOCK_ADD) def _verify_clipboard(self, text): # try to extract a URI from the clipboard for line in text.splitlines(): line = line.strip() try: URI(line) except ValueError: pass else: return line class GenreFilter(object): STAR = ["genre", "organization"] # This probably needs improvements GENRES = { "electronic": ( _("Electronic"), "|(electr,house,techno,trance,/trip.?hop/,&(drum,n,bass),chill," "dnb,minimal,/down(beat|tempo)/,&(dub,step))"), "rap": (_("Hip Hop / Rap"), "|(&(hip,hop),rap)"), "oldies": (_("Oldies"), "|(/[2-9]0\S?s/,oldies)"), "r&b": (_("R&B"), "/r(\&|n)b/"), "japanese": (_("Japanese"), "|(anime,jpop,japan,jrock)"), "indian": (_("Indian"), "|(bollywood,hindi,indian,bhangra)"), "religious": ( _("Religious"), "|(religious,christian,bible,gospel,spiritual,islam)"), "charts": (_("Charts"), "|(charts,hits,top)"), "turkish": (_("Turkish"), "|(turkish,turkce)"), "reggae": (_("Reggae / Dancehall"), "|(/reggae([^\w]|$)/,dancehall)"), "latin": (_("Latin"), "|(latin,salsa)"), "college": (_("College Radio"), "|(college,campus)"), "talk_news": (_("Talk / News"), "|(news,talk)"), "ambient": (_("Ambient"), "|(ambient,easy)"), "jazz": (_("Jazz"), "|(jazz,swing)"), "classical": (_("Classical"), "classic"), "pop": (_("Pop"), None), "alternative": (_("Alternative"), None), "metal": (_("Metal"), None), "country": (_("Country"), None), "news": (_("News"), None), "schlager": (_("Schlager"), None), "funk": (_("Funk"), None), "indie": (_("Indie"), None), "blues": (_("Blues"), None), "soul": (_("Soul"), None), "lounge": (_("Lounge"), None), "punk": (_("Punk"), None), "reggaeton": (_("Reggaeton"), None), "slavic": ( _("Slavic"), "|(narodna,albanian,manele,shqip,kosova)"), "greek": (_("Greek"), None), "gothic": (_("Gothic"), None), "rock": (_("Rock"), None), } # parsing all above takes 350ms on an atom, so only generate when needed __CACHE = {} def keys(self): return self.GENRES.keys() def query(self, key): if key not in self.__CACHE: text, filter_ = self.GENRES[key] if filter_ is None: filter_ = key self.__CACHE[key] = Query(filter_, star=self.STAR) return self.__CACHE[key] def text(self, key): return self.GENRES[key][0] class InternetRadio(Gtk.VBox, Browser, util.InstanceTracker): __gsignals__ = Browser.__gsignals__ __stations = None __fav_stations = None __librarian = None __filter = None name = _("Internet Radio") accelerated_name = _("_Internet Radio") priority = 16 headers = "title artist ~people grouping genre website ~format " \ "channel-mode ~listenerpeak".split() TYPE, STOCK, KEY, NAME = range(4) TYPE_FILTER, TYPE_ALL, TYPE_FAV, TYPE_SEP, TYPE_NOCAT = range(5) STAR = ["artist", "title", "website", "genre", "comment"] @classmethod def _init(klass, library): klass.__librarian = library.librarian klass.__stations = SongLibrary("iradio-remote") klass.__stations.load(STATIONS_ALL) klass.__fav_stations = SongLibrary("iradio") klass.__fav_stations.load(STATIONS_FAV) klass.filters = GenreFilter() @classmethod def _destroy(klass): if klass.__stations.dirty: klass.__stations.save() klass.__stations.destroy() klass.__stations = None if klass.__fav_stations.dirty: klass.__fav_stations.save() klass.__fav_stations.destroy() klass.__fav_stations = None klass.__librarian = None klass.filters = None def __inhibit(self): self.view.get_selection().handler_block(self.__changed_sig) def __uninhibit(self): self.view.get_selection().handler_unblock(self.__changed_sig) def __destroy(self, *args): if not self.instances(): self._destroy() def __init__(self, library, main): super(InternetRadio, self).__init__(spacing=12) if not self.instances(): self._init(library) self._register_instance() self.connect('destroy', self.__destroy) completion = LibraryTagCompletion(self.__stations) self.accelerators = Gtk.AccelGroup() self.__searchbar = search = SearchBarBox(completion=completion, accel_group=self.accelerators) gobject_weak(search.connect, 'query-changed', self.__filter_changed) menu = Gtk.Menu() new_item = MenuItem(_("_New Station..."), Gtk.STOCK_ADD) gobject_weak(new_item.connect, 'activate', self.__add) menu.append(new_item) update_item = MenuItem(_("_Update Stations"), Gtk.STOCK_REFRESH) gobject_weak(update_item.connect, 'activate', self.__update) menu.append(update_item) menu.show_all() button = MenuButton( SymbolicIconImage("emblem-system", Gtk.IconSize.MENU), arrow=True) button.set_menu(menu) def focus(widget, *args): qltk.get_top_parent(widget).songlist.grab_focus() gobject_weak(search.connect, 'focus-out', focus, parent=self) # treeview scrolled_window = ScrolledWindow() scrolled_window.set_shadow_type(Gtk.ShadowType.IN) self.view = view = AllTreeView() view.set_headers_visible(False) scrolled_window.set_policy( Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) scrolled_window.add(view) model = Gtk.ListStore(int, str, str, str) model.append(row=[self.TYPE_ALL, Gtk.STOCK_DIRECTORY, "__all", _("All Stations")]) model.append(row=[self.TYPE_SEP, Gtk.STOCK_DIRECTORY, "", ""]) #Translators: Favorite radio stations model.append(row=[self.TYPE_FAV, Gtk.STOCK_DIRECTORY, "__fav", _("Favorites")]) model.append(row=[self.TYPE_SEP, Gtk.STOCK_DIRECTORY, "", ""]) filters = self.filters for text, k in sorted([(filters.text(k), k) for k in filters.keys()]): model.append(row=[self.TYPE_FILTER, Gtk.STOCK_FIND, k, text]) model.append(row=[self.TYPE_NOCAT, Gtk.STOCK_DIRECTORY, "nocat", _("No Category")]) def separator(model, iter, data): return model[iter][self.TYPE] == self.TYPE_SEP view.set_row_separator_func(separator, None) def search_func(model, column, key, iter, data): return key.lower() not in model[iter][column].lower() view.set_search_column(self.NAME) view.set_search_equal_func(search_func, None) column = Gtk.TreeViewColumn("genres") column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) renderpb = Gtk.CellRendererPixbuf() renderpb.props.xpad = 3 column.pack_start(renderpb, False) column.add_attribute(renderpb, "stock_id", self.STOCK) render = Gtk.CellRendererText() view.append_column(column) column.pack_start(render, True) column.add_attribute(render, "text", self.NAME) view.set_model(model) # selection selection = view.get_selection() selection.set_mode(Gtk.SelectionMode.MULTIPLE) self.__changed_sig = gobject_weak(selection.connect, 'changed', util.DeferredSignal(lambda x: self.activate()), parent=view) box = Gtk.HBox(spacing=6) box.pack_start(search, True, True, 0) box.pack_start(button, False, True, 0) if main: self.pack_start(Alignment(box, left=3, right=3, top=3), True, True, 0) else: self.pack_start(box, True, True, 0) self.__filter_list = scrolled_window self.show_all() def pack(self, songpane): container = Gtk.VBox(spacing=6) pane = qltk.RHPaned() pane.pack1(self.__filter_list, resize=False, shrink=False) pane.show_all() pane.pack2(songpane, resize=True, shrink=False) container.pack_start(self, False, True, 0) container.pack_start(pane, True, True, 0) return container def unpack(self, container, songpane): container.remove(self) pane = container.get_children()[0] pane.remove(songpane) def __update(self, *args): copool.add(download_taglist, self.__update_done, cofuncid="radio-load", funcid="radio-load") def __update_done(self, stations): if not stations: print_w("Loading remote station list failed.") return # take the best 4000 stations.sort(key=sort_stations, reverse=True) stations = stations[:4000] # remove the tags only used for ranking for s in stations: s.pop("~listenerpeak", None) stations = dict(((s.key, s) for s in stations)) # don't add ones that are in the fav list for fav in self.__fav_stations.iterkeys(): stations.pop(fav, None) # separate o, n = set(self.__stations.iterkeys()), set(stations) to_add, to_change, to_remove = n - o, o & n, o - n del o, n # migrate stats to_change = [stations.pop(k) for k in to_change] for new in to_change: old = self.__stations[new.key] # clear everything except stats AudioFile.reload(old) # add new metadata except stats for k in (x for x in new.iterkeys() if x not in MIGRATE): old[k] = new[k] to_add = [stations.pop(k) for k in to_add] to_remove = [self.__stations[k] for k in to_remove] self.__stations.remove(to_remove) self.__stations.changed(to_change) self.__stations.add(to_add) def __filter_changed(self, bar, text, restore=False): self.__filter = None if not Query.match_all(text): self.__filter = Query(text, self.STAR) if not restore: self.activate() def __get_selected_libraries(self): """Returns the libraries to search in depending on the filter selection""" selection = self.view.get_selection() model, rows = selection.get_selected_rows() types = [model[row][self.TYPE] for row in rows] libs = [self.__fav_stations] if types != [self.TYPE_FAV]: libs.append(self.__stations) return libs def __get_selection_filter(self): """Retuns a filter object for the current selection or None if nothing should be filtered""" selection = self.view.get_selection() model, rows = selection.get_selected_rows() filter_ = None for row in rows: type_ = model[row][self.TYPE] if type_ == self.TYPE_FILTER: key = model[row][self.KEY] current_filter = self.filters.query(key) if current_filter: if filter_: filter_ |= current_filter else: filter_ = current_filter elif type_ == self.TYPE_NOCAT: # if notcat is selected, combine all filters, negate and merge all_ = [self.filters.query(k) for k in self.filters.keys()] nocat_filter = all_ and -reduce(lambda x, y: x | y, all_) if nocat_filter: if filter_: filter_ |= nocat_filter else: filter_ = nocat_filter elif type_ == self.TYPE_ALL: filter_ = None break return filter_ def __add_fav(self, songs): songs = [s for s in songs if s in self.__stations] type(self).__librarian.move( songs, self.__stations, self.__fav_stations) def __remove_fav(self, songs): songs = [s for s in songs if s in self.__fav_stations] type(self).__librarian.move( songs, self.__fav_stations, self.__stations) def __add(self, button): parent = qltk.get_top_parent(self) uri = (AddNewStation(parent).run(clipboard=True) or "").strip() if uri != "": self.__add_station(uri) def __add_station(self, uri): irfs = add_station(uri) if not irfs: qltk.ErrorMessage( None, _("No stations found"), _("No Internet radio stations were found at %s.") % util.escape(uri)).run() return irfs = filter(lambda station: station not in self.__fav_stations, irfs) if not irfs: qltk.WarningMessage( None, _("Unable to add station"), _("All stations listed are already in your library.")).run() if irfs: self.__fav_stations.add(irfs) def Menu(self, songs, songlist, library): menu = SongsMenu(self.__librarian, songs, playlists=False, remove=True, queue=False, accels=songlist.accelerators, devices=False, parent=self) menu.prepend(SeparatorMenuItem()) in_fav = False in_all = False for song in songs: if song in self.__fav_stations: in_fav = True elif song in self.__stations: in_all = True if in_fav and in_all: break button = MenuItem(_("Remove from Favorites"), Gtk.STOCK_REMOVE) button.set_sensitive(in_fav) gobject_weak(button.connect_object, 'activate', self.__remove_fav, songs) menu.prepend(button) button = MenuItem(_("Add to Favorites"), Gtk.STOCK_ADD) button.set_sensitive(in_all) gobject_weak(button.connect_object, 'activate', self.__add_fav, songs) menu.prepend(button) return menu def restore(self): text = config.get("browsers", "query_text").decode("utf-8") self.__searchbar.set_text(text) if Query.is_parsable(text): self.__filter_changed(self.__searchbar, text, restore=True) keys = config.get("browsers", "radio").splitlines() def select_func(row): return row[self.TYPE] != self.TYPE_SEP and row[self.KEY] in keys self.__inhibit() view = self.view if not view.select_by_func(select_func): for row in view.get_model(): if row[self.TYPE] == self.TYPE_FAV: view.set_cursor(row.path) break self.__uninhibit() def __get_filter(self): filter_ = self.__get_selection_filter() if filter_: if self.__filter: filter_ &= self.__filter else: filter_ = self.__filter return filter_ def activate(self): filter_ = self.__get_filter() libs = self.__get_selected_libraries() songs = itertools.chain(*libs) if filter_: songs = filter(filter_.search, songs) else: songs = list(songs) self.emit('songs-selected', songs, None) def active_filter(self, song): for lib in self.__get_selected_libraries(): if song in lib: break else: return False filter_ = self.__get_filter() if filter_: return filter_.search(song) return True def save(self): text = self.__searchbar.get_text().encode("utf-8") config.set("browsers", "query_text", text) selection = self.view.get_selection() model, rows = selection.get_selected_rows() names = filter(None, [model[row][self.KEY] for row in rows]) config.set("browsers", "radio", "\n".join(names)) def scroll(self, song): # nothing we care about if song not in self.__stations and song not in self.__fav_stations: return path = None for row in self.view.get_model(): if row[self.TYPE] == self.TYPE_FILTER: if self.filters.query(row[self.KEY]).search(song): path = row.path break else: # in case nothing matches, select all path = (0,) self.view.scroll_to_cell(path, use_align=True, row_align=0.5) self.view.set_cursor(path) def statusbar(self, i): return ngettext("%(count)d station", "%(count)d stations", i) from quodlibet import app if not app.player or app.player.can_play_uri("http://"): browsers = [InternetRadio] else: browsers = [] �������������������������������������������������quodlibet-3.0.2/quodlibet/browsers/audiofeeds.py����������������������������������������������������0000644�0001750�0001750�00000040646�12173213426�022265� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2005 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import cPickle as pickle import os import sys import threading import time from gi.repository import Gtk, GLib, Pango, Gdk from quodlibet import config from quodlibet import const from quodlibet import formats from quodlibet import qltk from quodlibet import util from quodlibet.browsers._base import Browser from quodlibet.formats._audio import AudioFile from quodlibet.formats.remote import RemoteFile from quodlibet.qltk.downloader import DownloadWindow from quodlibet.qltk.getstring import GetStringDialog from quodlibet.qltk.msg import ErrorMessage from quodlibet.qltk.songsmenu import SongsMenu from quodlibet.qltk.views import AllTreeView from quodlibet.qltk.x import ScrolledWindow, Alignment FEEDS = os.path.join(const.USERDIR, "feeds") DND_URI_LIST, DND_MOZ_URL = range(2) # Migration path for pickle sys.modules["browsers.audiofeeds"] = sys.modules[__name__] class InvalidFeed(ValueError): pass class Feed(list): def __init__(self, uri): self.name = _("Unknown") self.uri = uri self.changed = False self.website = "" self.__lastgot = 0 def get_age(self): return time.time() - self.__lastgot @staticmethod def __fill_af(feed, af): try: af["title"] = feed.title or _("Unknown") except: af["title"] = _("Unknown") try: af["date"] = "%04d-%02d-%02d" % feed.modified_parsed[:3] except (AttributeError, TypeError): pass for songkey, feedkey in [ ("website", "link"), ("description", "tagline"), ("language", "language"), ("copyright", "copyright"), ("organization", "publisher"), ("license", "license")]: try: value = getattr(feed, feedkey) except: pass else: if value and value not in af.list(songkey): af.add(songkey, value) try: author = feed.author_detail except AttributeError: try: author = feed.author except AttributeError: pass else: if author and author not in af.list("artist"): af.add('artist', author) else: try: if author.email and author.email not in af.list("contact"): af.add("contact", author.email) except AttributeError: pass try: if author.name and author.name not in af.list("artist"): af.add("artist", author.name) except AttributeError: pass try: values = feed.contributors except AttributeError: pass else: for value in values: try: value = value.name except AttributeError: pass else: if value and value not in af.list("performer"): af.add("performer", value) try: af["~#length"] = util.parse_time(feed.itunes_duration) except (AttributeError, ValueError): pass try: values = dict(feed.categories).values() except AttributeError: pass else: for value in values: if value and value not in af.list("genre"): af.add("genre", value) def parse(self): try: doc = feedparser.parse(self.uri) except: return False try: album = doc.channel.title except AttributeError: return False if album: self.name = album else: self.name = _("Unknown") defaults = AudioFile({"feed": self.uri}) try: self.__fill_af(doc.channel, defaults) except: return False entries = [] uris = set() for entry in doc.entries: try: for enclosure in entry.enclosures: try: if ("audio" in enclosure.type or "ogg" in enclosure.type or formats.filter(enclosure.url)): uri = enclosure.url.encode('ascii', 'replace') try: size = enclosure.length except AttributeError: size = 0 entries.append((uri, entry, size)) uris.add(uri) break except AttributeError: pass except AttributeError: pass for entry in list(self): if entry["~uri"] not in uris: self.remove(entry) else: uris.remove(entry["~uri"]) entries.reverse() for uri, entry, size in entries: if uri in uris: song = RemoteFile(uri) song["~#size"] = size song.fill_metadata = False song.update(defaults) song["album"] = self.name try: self.__fill_af(entry, song) except: pass else: self.insert(0, song) self.__lastgot = time.time() return bool(uris) class AddFeedDialog(GetStringDialog): def __init__(self, parent): super(AddFeedDialog, self).__init__( qltk.get_top_parent(parent), _("New Feed"), _("Enter the location of an audio feed:"), okbutton=Gtk.STOCK_ADD) def run(self): uri = super(AddFeedDialog, self).run() if uri: return Feed(uri.encode('ascii', 'replace')) else: return None class AudioFeeds(Browser, Gtk.VBox): __gsignals__ = Browser.__gsignals__ __feeds = Gtk.ListStore(object) # unread headers = ("title artist performer ~people album date website language " "copyright organization license contact").split() name = _("Audio Feeds") accelerated_name = _("_Audio Feeds") priority = 20 __last_folder = const.HOME def pack(self, songpane): container = qltk.RHPaned() container.pack1(self, True, False) container.pack2(songpane, True, False) return container def unpack(self, container, songpane): container.remove(songpane) container.remove(self) @staticmethod def cell_data(col, render, model, iter, data): if model[iter][0].changed: render.markup = "<b>%s</b>" % util.escape(model[iter][0].name) else: render.markup = util.escape(model[iter][0].name) render.set_property('markup', render.markup) @classmethod def changed(klass, feeds): for row in klass.__feeds: if row[0] in feeds: row[0].changed = True row[0] = row[0] AudioFeeds.write() @classmethod def write(klass): feeds = [row[0] for row in klass.__feeds] f = file(FEEDS, "wb") pickle.dump(feeds, f, pickle.HIGHEST_PROTOCOL) f.close() @classmethod def init(klass, library): try: feeds = pickle.load(file(FEEDS, "rb")) except (pickle.PickleError, EnvironmentError, EOFError): pass else: for feed in feeds: klass.__feeds.append(row=[feed]) GLib.idle_add(klass.__do_check) @classmethod def __do_check(klass): thread = threading.Thread(target=klass.__check, args=()) thread.setDaemon(True) thread.start() @classmethod def __check(klass): for row in klass.__feeds: feed = row[0] if feed.get_age() < 2 * 60 * 60: continue elif feed.parse(): feed.changed = True row[0] = feed klass.write() GLib.timeout_add(60 * 60 * 1000, klass.__do_check) def Menu(self, songs, songlist, library): menu = SongsMenu( library, songs, accels=songlist.accelerators, parent=self) if len(songs) == 1: item = qltk.MenuItem(_("_Download..."), Gtk.STOCK_CONNECT) item.connect('activate', self.__download, songs[0]("~uri")) item.set_sensitive(not songs[0].is_file) else: songs = filter(lambda s: not s.is_file, songs) uris = [song("~uri") for song in songs] item = qltk.MenuItem(_("_Download..."), Gtk.STOCK_CONNECT) item.connect('activate', self.__download_many, uris) item.set_sensitive(bool(songs)) menu.preseparate() menu.prepend(item) return menu def __download_many(self, activator, sources): chooser = Gtk.FileChooserDialog( title=_("Download Files"), parent=qltk.get_top_parent(self), action=Gtk.FileChooserAction.CREATE_FOLDER, buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.OK)) chooser.set_current_folder(self.__last_folder) resp = chooser.run() if resp == Gtk.ResponseType.OK: target = chooser.get_filename() if target: type(self).__last_folder = os.path.dirname(target) for i, source in enumerate(sources): base = os.path.basename(source) if not base: base = ("file%d" % i) + ( os.path.splitext(source)[1] or ".audio") fulltarget = os.path.join(target, base) DownloadWindow.download(source, fulltarget, self) chooser.destroy() def __download(self, activator, source): chooser = Gtk.FileChooserDialog( title=_("Download File"), parent=qltk.get_top_parent(self), action=Gtk.FileChooserAction.SAVE, buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.OK)) chooser.set_current_folder(self.__last_folder) name = os.path.basename(source) if name: chooser.set_current_name(name) resp = chooser.run() if resp == Gtk.ResponseType.OK: target = chooser.get_filename() if target: type(self).__last_folder = os.path.dirname(target) DownloadWindow.download(source, target, self) chooser.destroy() def __init__(self, library, main): super(AudioFeeds, self).__init__(spacing=6) self.__view = view = AllTreeView() self.__render = render = Gtk.CellRendererText() render.set_property('ellipsize', Pango.EllipsizeMode.END) col = Gtk.TreeViewColumn("Audio Feeds", render) col.set_cell_data_func(render, AudioFeeds.cell_data) view.append_column(col) view.set_model(self.__feeds) view.set_rules_hint(True) view.set_headers_visible(False) swin = ScrolledWindow() swin.set_shadow_type(Gtk.ShadowType.IN) swin.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) swin.add(view) self.pack_start(swin, True, True, 0) new = Gtk.Button(stock=Gtk.STOCK_NEW) new.connect('clicked', self.__new_feed) view.get_selection().connect('changed', self.__changed) view.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) view.connect('popup-menu', self.__popup_menu) targets = [ ("text/uri-list", 0, DND_URI_LIST), ("text/x-moz-url", 0, DND_MOZ_URL) ] targets = [Gtk.TargetEntry.new(*t) for t in targets] view.drag_dest_set(Gtk.DestDefaults.ALL, targets, Gdk.DragAction.COPY) view.connect('drag-data-received', self.__drag_data_received) view.connect('drag-motion', self.__drag_motion) view.connect('drag-leave', self.__drag_leave) self.connect_object('destroy', self.__save, view) self.pack_start(Alignment(new, left=3, bottom=3), False, True, 0) self.show_all() def __drag_motion(self, view, ctx, x, y, time): targets = [t.name() for t in ctx.list_targets()] if "text/x-quodlibet-songs" not in targets: view.get_parent().drag_highlight() return True return False def __drag_leave(self, view, ctx, time): view.get_parent().drag_unhighlight() def __drag_data_received(self, view, ctx, x, y, sel, tid, etime): view.emit_stop_by_name('drag-data-received') targets = [ ("text/uri-list", 0, DND_URI_LIST), ("text/x-moz-url", 0, DND_MOZ_URL) ] targets = [Gtk.TargetEntry.new(*t) for t in targets] view.drag_dest_set(Gtk.DestDefaults.ALL, targets, Gdk.DragAction.COPY) if tid == DND_URI_LIST: uri = sel.get_uris()[0] elif tid == DND_MOZ_URL: uri = sel.data.decode('utf16', 'replace').split('\n')[0] else: ctx.finish(False, False, etime) return ctx.finish(True, False, etime) feed = Feed(uri.encode("ascii", "replace")) feed.changed = feed.parse() if feed: self.__feeds.append(row=[feed]) AudioFeeds.write() else: ErrorMessage( self, _("Unable to add feed"), _("<b>%s</b> could not be added. The server may be down, " "or the location may not be an audio feed.") % util.escape(feed.uri)).run() def __popup_menu(self, view): model, paths = view.get_selection().get_selected_rows() menu = Gtk.Menu() refresh = Gtk.ImageMenuItem(Gtk.STOCK_REFRESH, use_stock=True) delete = Gtk.ImageMenuItem(Gtk.STOCK_DELETE, use_stock=True) refresh.connect_object( 'activate', self.__refresh, [model[p][0] for p in paths]) delete.connect_object( 'activate', map, model.remove, map(model.get_iter, paths)) menu.append(refresh) menu.append(delete) menu.show_all() menu.connect('selection-done', lambda m: m.destroy()) # XXX: keep the menu arround self.__menu = menu return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def __save(self, view): AudioFeeds.write() def __refresh(self, feeds): changed = filter(Feed.parse, feeds) AudioFeeds.changed(changed) def activate(self): self.__changed(self.__view.get_selection()) def __changed(self, selection): model, paths = selection.get_selected_rows() if model and paths: songs = [] for path in paths: model[path][0].changed = False songs.extend(model[path][0]) self.emit('songs-selected', songs, True) config.set("browsers", "audiofeeds", "\t".join([model[path][0].name for path in paths])) def __new_feed(self, activator): feed = AddFeedDialog(self).run() if feed is not None: feed.changed = feed.parse() if feed: self.__feeds.append(row=[feed]) AudioFeeds.write() else: ErrorMessage( self, _("Unable to add feed"), _("<b>%s</b> could not be added. The server may be down, " "or the location may not be an audio feed.") % util.escape(feed.uri)).run() def restore(self): try: names = config.get("browsers", "audiofeeds").split("\t") except: pass else: self.__view.select_by_func(lambda r: r[0].name in names) browsers = [] try: import feedparser except ImportError: print_w(_("Could not import %s. Audio Feeds browser disabled.") % "python-feedparser") else: from quodlibet import app if not app.player or app.player.can_play_uri("http://"): browsers = [AudioFeeds] else: print_w(_("The current audio backend does not support URLs, " "Audio Feeds browser disabled.")) ������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/browsers/playlists.py�����������������������������������������������������0000644�0001750�0001750�00000055735�12173213426�022206� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2005 Joe Wreschnig # 2012 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import urllib from gi.repository import Gtk, GLib, Pango, Gdk from quodlibet import config from quodlibet import const from quodlibet import formats from quodlibet import qltk from quodlibet import util from tempfile import NamedTemporaryFile from quodlibet.browsers._base import Browser from quodlibet.formats._audio import AudioFile from quodlibet.util.collection import Playlist from quodlibet.qltk.songsmenu import SongsMenu from quodlibet.qltk.views import RCMHintedTreeView from quodlibet.qltk.wlw import WaitLoadWindow from quodlibet.qltk.getstring import GetStringDialog from quodlibet.qltk.x import ScrolledWindow, Alignment, SeparatorMenuItem from quodlibet.util.uri import URI from quodlibet.util.dprint import print_d PLAYLISTS = os.path.join(const.USERDIR, "playlists") if not os.path.isdir(PLAYLISTS): util.mkdir(PLAYLISTS) def ParseM3U(filename, library=None): plname = util.fsdecode(os.path.basename( os.path.splitext(filename)[0])).encode('utf-8') filenames = [] for line in file(filename): line = line.strip() if line.startswith("#"): continue else: filenames.append(line) return __ParsePlaylist(plname, filename, filenames, library) def ParsePLS(filename, name="", library=None): plname = util.fsdecode(os.path.basename( os.path.splitext(filename)[0])).encode('utf-8') filenames = [] for line in file(filename): line = line.strip() if not line.lower().startswith("file"): continue else: try: line = line[line.index("=") + 1:].strip() except ValueError: pass else: filenames.append(line) return __ParsePlaylist(plname, filename, filenames, library) def __ParsePlaylist(name, plfilename, files, library): playlist = Playlist.new(PLAYLISTS, name, library=library) songs = [] win = WaitLoadWindow( None, len(files), _("Importing playlist.\n\n%(current)d/%(total)d songs added.")) for i, filename in enumerate(files): try: uri = URI(filename) except ValueError: # Plain filename. filename = os.path.realpath(os.path.join( os.path.dirname(plfilename), filename)) if library and filename in library: songs.append(library[filename]) else: songs.append(formats.MusicFile(filename)) else: if uri.scheme == "file": # URI-encoded local filename. filename = os.path.realpath(os.path.join( os.path.dirname(plfilename), uri.filename)) if library and filename in library: songs.append(library[filename]) else: songs.append(formats.MusicFile(filename)) else: # Who knows! Hand it off to GStreamer. songs.append(formats.remote.RemoteFile(uri)) if win.step(): break win.destroy() playlist.extend(filter(None, songs)) return playlist class ConfirmRemovePlaylistDialog(qltk.Message): def __init__(self, parent, playlist): title = (_("Are you sure you want to delete the playlist '%s'?") % playlist.name) description = (_("All information about the selected playlist " "will be deleted and can not be restored.")) super(ConfirmRemovePlaylistDialog, self).__init__( Gtk.MessageType.WARNING, parent, title, description, Gtk.ButtonsType.NONE) self.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_DELETE, Gtk.ResponseType.YES) class ConfirmRemoveDuplicatesDialog(qltk.Message): def __init__(self, parent, playlist, count): title = ngettext("Are you sure you want to remove %d duplicate song?", "Are you sure you want to remove %d duplicate songs?", count) % count description = (_("The duplicate songs will be removed " "from the playlist '%s'.") % playlist.name) super(ConfirmRemoveDuplicatesDialog, self).__init__( Gtk.MessageType.WARNING, parent, title, description, Gtk.ButtonsType.NONE) self.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_DELETE, Gtk.ResponseType.YES) class GetPlaylistName(GetStringDialog): def __init__(self, parent): super(GetPlaylistName, self).__init__( parent, _("New Playlist"), _("Enter a name for the new playlist:"), okbutton=Gtk.STOCK_ADD) class Menu(Gtk.Menu): def __init__(self, songs, parent=None): super(Menu, self).__init__() i = Gtk.MenuItem(_("_New Playlist"), use_underline=True) i.connect_object( 'activate', self.__add_to_playlist, None, songs, parent) self.append(i) self.append(SeparatorMenuItem()) self.set_size_request(int(i.size_request().width * 2), -1) for playlist in Playlists.playlists(): name = playlist.name i = Gtk.CheckMenuItem(name) some, all = playlist.has_songs(songs) i.set_active(some) i.set_inconsistent(some and not all) i.get_child().set_ellipsize(Pango.EllipsizeMode.END) i.connect_object( 'activate', self.__add_to_playlist, playlist, songs, parent) self.append(i) def __add_to_playlist(playlist, songs, parent): if playlist is None: if len(songs) == 1: title = songs[0].comma("title") else: title = ngettext( "%(title)s and %(count)d more", "%(title)s and %(count)d more", len(songs) - 1) % { 'title': songs[0].comma("title"), 'count': len(songs) - 1 } title = GetPlaylistName(qltk.get_top_parent(parent)).run(title) if title is None: return playlist = Playlist.new(PLAYLISTS, title) playlist.extend(songs) Playlists.changed(playlist) __add_to_playlist = staticmethod(__add_to_playlist) DND_QL, DND_URI_LIST, DND_MOZ_URL = range(3) class Playlists(Gtk.VBox, Browser): __gsignals__ = Browser.__gsignals__ name = _("Playlists") accelerated_name = _("_Playlists") priority = 2 replaygain_profiles = ["track"] def pack(self, songpane): container = qltk.RHPaned() container.pack1(self, True, False) container.pack2(songpane, True, False) return container def unpack(self, container, songpane): container.remove(songpane) container.remove(self) @classmethod def init(klass, library): model = klass.__lists.get_model() for playlist in os.listdir(util.fsnative(PLAYLISTS)): try: playlist = Playlist(PLAYLISTS, Playlist.unquote(playlist), library=library) model.append(row=[playlist]) except EnvironmentError: pass library.connect('removed', klass.__removed) library.connect('added', klass.__added) library.connect('changed', klass.__changed) @classmethod def playlists(klass): return [row[0] for row in klass.__lists] @classmethod def changed(klass, playlist, refresh=True): model = klass.__lists for row in model: if row[0] is playlist: if refresh: klass.__lists.row_changed(row.path, row.iter) playlist.write() break else: model.get_model().append(row=[playlist]) playlist.write() @classmethod def __removed(klass, library, songs): for playlist in klass.playlists(): if playlist.remove_songs(songs, library): Playlists.changed(playlist) @classmethod def __added(klass, library, songs): filenames = set([song("~filename") for song in songs]) for playlist in klass.playlists(): if playlist.add_songs(filenames, library): Playlists.changed(playlist) @classmethod def __changed(klass, library, songs): for playlist in klass.playlists(): for song in songs: if song in playlist.songs: Playlists.changed(playlist, refresh=False) break @staticmethod def cell_data(col, render, model, iter, data): render.markup = model[iter][0].format() render.set_property('markup', render.markup) def Menu(self, songs, songlist, library): menu = super(Playlists, self).Menu(songs, songlist, library) model, rows = songlist.get_selection().get_selected_rows() iters = map(model.get_iter, rows) i = qltk.MenuItem(_("_Remove from Playlist"), Gtk.STOCK_REMOVE) i.connect_object('activate', self.__remove, iters, model) i.set_sensitive(bool(self.__view.get_selection().get_selected()[1])) menu.preseparate() menu.prepend(i) return menu __lists = Gtk.TreeModelSort(model=Gtk.ListStore(object)) __lists.set_default_sort_func(lambda m, a, b, data: cmp(m[a][0], m[b][0])) def __init__(self, library, main): super(Playlists, self).__init__(spacing=6) self.__main = main self.__view = view = RCMHintedTreeView() self.__view.set_enable_search(True) self.__view.set_search_column(0) self.__view.set_search_equal_func( lambda model, col, key, iter, data: not model[iter][col].name.lower().startswith(key.lower()), None) self.__render = render = Gtk.CellRendererText() render.set_property('ellipsize', Pango.EllipsizeMode.END) render.connect('editing-started', self.__start_editing) render.connect('edited', self.__edited) col = Gtk.TreeViewColumn("Playlists", render) col.set_cell_data_func(render, Playlists.cell_data) view.append_column(col) view.set_model(self.__lists) view.set_rules_hint(True) view.set_headers_visible(False) swin = ScrolledWindow() swin.set_shadow_type(Gtk.ShadowType.IN) swin.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) swin.add(view) self.pack_start(swin, True, True, 0) newpl = Gtk.Button(stock=Gtk.STOCK_NEW) newpl.connect('clicked', self.__new_playlist) importpl = qltk.Button(_("_Import"), Gtk.STOCK_ADD) importpl.connect('clicked', self.__import, library) hb = Gtk.HBox(spacing=6) hb.set_homogeneous(True) hb.pack_start(newpl, True, True, 0) hb.pack_start(importpl, True, True, 0) self.pack_start(Alignment(hb, left=3, bottom=3), False, True, 0) view.connect('popup-menu', self.__popup_menu, library) targets = [ ("text/x-quodlibet-songs", Gtk.TargetFlags.SAME_APP, DND_QL), ("text/uri-list", 0, DND_URI_LIST), ("text/x-moz-url", 0, DND_MOZ_URL) ] targets = [Gtk.TargetEntry.new(*t) for t in targets] view.drag_dest_set(Gtk.DestDefaults.ALL, targets, Gdk.DragAction.COPY) view.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, targets[:2], Gdk.DragAction.COPY) view.connect('drag-data-received', self.__drag_data_received, library) view.connect('drag-data-get', self.__drag_data_get) view.connect('drag-motion', self.__drag_motion) view.connect('drag-leave', self.__drag_leave) if main: view.connect('row-activated', lambda *x: self.emit("activated")) else: render.set_property('editable', True) view.get_selection().connect('changed', self.activate) s = view.get_model().connect('row-changed', self.__check_current) self.connect_object('destroy', view.get_model().disconnect, s) self.accelerators = Gtk.AccelGroup() keyval, mod = Gtk.accelerator_parse("F2") self.accelerators.connect(keyval, mod, 0, self.__rename) self.connect('key-press-event', self.__key_pressed) self.show_all() def __key_pressed(self, widget, event): if qltk.is_accel(event, "Delete"): model, iter = self.__view.get_selection().get_selected() if not iter: return False playlist = model[iter][0] dialog = ConfirmRemovePlaylistDialog(self, playlist) if dialog.run() == Gtk.ResponseType.YES: playlist.delete() model.get_model().remove( model.convert_iter_to_child_iter(iter)) return False def __rename(self, group, acceleratable, keyval, modifier): model, iter = self.__view.get_selection().get_selected() if iter: self.__render.set_property('editable', True) self.__view.set_cursor(model.get_path(iter), self.__view.get_columns()[0], start_editing=True) def __check_current(self, model, path, iter): model, citer = self.__view.get_selection().get_selected() if citer and model.get_path(citer) == path: songlist = qltk.get_top_parent(self).songlist self.activate(resort=not songlist.is_sorted()) def __drag_motion(self, view, ctx, x, y, time): targets = [t.name() for t in ctx.list_targets()] if "text/x-quodlibet-songs" in targets: view.set_drag_dest(x, y, into_only=True) return True else: # Highlighting the view itself doesn't work. view.get_parent().drag_highlight() return True def __drag_leave(self, view, ctx, time): view.get_parent().drag_unhighlight() def __remove(self, iters, smodel): model, iter = self.__view.get_selection().get_selected() if iter: map(smodel.remove, iters) playlist = model[iter][0] playlist.clear() playlist.extend([row[0] for row in smodel]) Playlists.changed(playlist) self.activate() def __drag_data_received(self, view, ctx, x, y, sel, tid, etime, library): # TreeModelSort doesn't support GtkTreeDragDestDrop. view.emit_stop_by_name('drag-data-received') model = view.get_model() if tid == DND_QL: filenames = sel.get_data().split("\x00") songs = filter(None, map(library.get, filenames)) if not songs: Gtk.drag_finish(ctx, False, False, etime) return try: path, pos = view.get_dest_row_at_pos(x, y) except TypeError: playlist = Playlist.fromsongs(PLAYLISTS, songs, library) GLib.idle_add(self.__select_playlist, playlist) else: playlist = model[path][0] playlist.extend(songs) Playlists.changed(playlist) Gtk.drag_finish(ctx, True, False, etime) else: if tid == DND_URI_LIST: uri = sel.get_uris()[0] name = os.path.basename(uri) elif tid == DND_MOZ_URL: data = sel.get_data() uri, name = data.decode('utf16', 'replace').split('\n') else: Gtk.drag_finish(ctx, False, False, etime) return name = name or os.path.basename(uri) or _("New Playlist") uri = uri.encode('utf-8') try: sock = urllib.urlopen(uri) f = NamedTemporaryFile() f.write(sock.read()) f.flush() if uri.lower().endswith('.pls'): playlist = ParsePLS(f.name, library=library) elif uri.lower().endswith('.m3u'): playlist = ParseM3U(f.name, library=library) else: raise IOError library.add_filename(playlist) if name: playlist.rename(name) Playlists.changed(playlist) Gtk.drag_finish(ctx, True, False, etime) except IOError: Gtk.drag_finish(ctx, False, False, etime) qltk.ErrorMessage( qltk.get_top_parent(self), _("Unable to import playlist"), _("Quod Libet can only import playlists in the M3U " "and PLS formats.")).run() def __drag_data_get(self, view, ctx, sel, tid, etime): model, iters = self.__view.get_selection().get_selected_rows() songs = [] for iter in filter(lambda i: i, iters): songs += list(model[iter][0]) if tid == 0: filenames = [song("~filename") for song in songs] type_ = Gdk.atom_intern("text/x-quodlibet-songs", True) sel.set(type_, 8, "\x00".join(filenames)) else: sel.set_uris([song("~uri") for song in songs]) def __select_playlist(self, playlist): view = self.__view model = view.get_model() for row in model: if row[0] is playlist: view.get_selection().select_iter(row.iter) def __popup_menu(self, view, library): # TODO: Consider allowing plugins to expose themselves in playlist model, itr = view.get_selection().get_selected() if itr is None: return songs = list(model[itr][0]) songs = filter(lambda s: isinstance(s, AudioFile), songs) menu = SongsMenu( library, songs, playlists=False, remove=False, parent=self) menu.preseparate() def _de_duplicate(model, itr): playlist = model[itr][0] unique = set() dupes = list() for s in songs: if s in unique: dupes.append(s) else: unique.add(s) if len(dupes) < 1: print_d("No duplicates in this playlist") return dialog = ConfirmRemoveDuplicatesDialog(self, playlist, len(dupes)) if dialog.run() == Gtk.ResponseType.YES: playlist.remove_songs(dupes, library, True) Playlists.changed(playlist) self.activate() de_dupe = Gtk.MenuItem(_("Remove Duplicates")) de_dupe.connect_object('activate', _de_duplicate, model, itr) de_dupe.set_sensitive(not model[itr][0].has_duplicates()) menu.prepend(de_dupe) def _shuffle(model, itr): playlist = model[itr][0] playlist.shuffle() self.activate() shuffle = Gtk.MenuItem(_("_Shuffle"), use_underline=True) shuffle .connect_object('activate', _shuffle, model, itr) shuffle.set_sensitive(bool(len(model[itr][0]))) menu.prepend(shuffle) menu.prepend(SeparatorMenuItem()) def _remove(model, itr): playlist = model[itr][0] dialog = ConfirmRemovePlaylistDialog(self, playlist) if dialog.run() == Gtk.ResponseType.YES: playlist.delete() model.get_model().remove( model.convert_iter_to_child_iter(itr)) rem = Gtk.ImageMenuItem(Gtk.STOCK_DELETE, use_stock=True) rem.connect_object('activate', _remove, model, itr) menu.prepend(rem) def _rename(path): self.__render.set_property('editable', True) view.set_cursor(path, view.get_columns()[0], start_editing=True) ren = qltk.MenuItem(_("_Rename"), Gtk.STOCK_EDIT) keyval, mod = Gtk.accelerator_parse("F2") ren.add_accelerator( 'activate', self.accelerators, keyval, mod, Gtk.AccelFlags.VISIBLE) ren.connect_object('activate', _rename, model.get_path(itr)) menu.prepend(ren) menu.show_all() return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def activate(self, widget=None, resort=True): model, iter = self.__view.get_selection().get_selected() songs = iter and list(model[iter][0]) or [] songs = filter(lambda s: isinstance(s, AudioFile), songs) self.emit('songs-selected', songs, resort) def save(self): model, iter = self.__view.get_selection().get_selected() name = iter and model[iter][0].name or "" config.set("browsers", "playlist", name) def __new_playlist(self, activator): playlist = Playlist.new(PLAYLISTS) self.__lists.get_model().append(row=[playlist]) self.__select_playlist(playlist) def __start_editing(self, render, editable, path): editable.set_text(self.__lists[path][0].name) def __edited(self, render, path, newname): try: self.__lists[path][0].rename(newname) except ValueError, s: qltk.ErrorMessage( None, _("Unable to rename playlist"), s).run() else: row = self.__lists[path] self.__lists.row_changed(row.path, row.iter) render.set_property('editable', not self.__main) def __import(self, activator, library): filt = lambda fn: fn.endswith(".pls") or fn.endswith(".m3u") from quodlibet.qltk.chooser import FileChooser chooser = FileChooser(self, _("Import Playlist"), filt, const.HOME) files = chooser.run() chooser.destroy() for filename in files: if filename.endswith(".m3u"): playlist = ParseM3U(filename, library=library) elif filename.endswith(".pls"): playlist = ParsePLS(filename, library=library) else: qltk.ErrorMessage( qltk.get_top_parent(self), _("Unable to import playlist"), _("Quod Libet can only import playlists in the M3U " "and PLS formats.")).run() return Playlists.changed(playlist) library.add(playlist) def restore(self): try: name = config.get("browsers", "playlist") except Exception: return self.__view.select_by_func(lambda r: r[0].name == name, one=True) def reordered(self, songlist): songs = songlist.get_songs() model, iter = self.__view.get_selection().get_selected() playlist = None if iter: playlist = model[iter][0] playlist[:] = songs elif songs: playlist = Playlist.fromsongs(PLAYLISTS, songs) GLib.idle_add(self.__select_playlist, playlist) if playlist: Playlists.changed(playlist, refresh=False) browsers = [Playlists] �����������������������������������quodlibet-3.0.2/quodlibet/browsers/collection.py����������������������������������������������������0000644�0001750�0001750�00000062155�12173213426�022307� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2010, 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from gi.repository import Gtk, GLib, Pango, Gdk from quodlibet import config from quodlibet import const from quodlibet import qltk from quodlibet import util from quodlibet.browsers.albums import AlbumTagCompletion from quodlibet.browsers._base import Browser from quodlibet.parse import XMLFromPattern, Query from quodlibet.qltk.searchbar import SearchBarBox from quodlibet.qltk.songsmenu import SongsMenu from quodlibet.qltk.tagscombobox import TagsComboBoxEntry from quodlibet.qltk.views import AllTreeView, BaseView from quodlibet.qltk.x import ScrolledWindow, Alignment, SymbolicIconImage from quodlibet.util.collection import Album from quodlibet.util.library import background_filter from quodlibet.util.thumbnails import scale EMPTY = _("Songs not in an album") ALBUM_PATTERN = r""" \<b\><album|\<i\><album>\</i\>|%s>\</b\><date| \<small\>(<date>)\</small\>> \<small\><~discs|<~discs> - ><~tracks> - <~long-length>\</small\>""" % EMPTY ALBUM_PATTERN = ALBUM_PATTERN.lstrip() UNKNOWN_PATTERN = "<b><i>%s</i></b>" % _("Unknown %s") MULTI_PATTERN = "<b><i>%s</i></b>" % _("Multiple %s Values") COUNT_PATTERN = " <span size='small' color='#777'>(%s)</span>" PAT = XMLFromPattern(ALBUM_PATTERN) ALBUM_QUERIES = os.path.join(const.USERDIR, "lists", "album_queries") util.mkdir(os.path.dirname(ALBUM_QUERIES)) def get_headers(): result = [] headers = config.get("browsers", "collection_headers", "") for h in headers.splitlines(): values = h.split() if len(values) != 2: continue tag, merge = values try: result.append((tag, bool(int(merge)))) except ValueError: continue return result def save_headers(headers): headers = "\n".join(["%s %d" % (t, m) for (t, m) in headers]) config.set("browsers", "collection_headers", headers) class PatternEditor(Gtk.HBox): PRESETS = [ [("~people", False)], [("~year", False)], [("genre", False)], [("genre", False), ("artist", False)], ] COMPLETION = ["genre", "grouping", "~people", "artist", "album", "~year"] def __init__(self): super(PatternEditor, self).__init__(spacing=12) self.__headers = headers = {} buttons = [] group = None for tags in self.PRESETS: tied = "~" + "~".join([t[0] for t in tags]) group = Gtk.RadioButton(group=group, label="_" + util.tag(tied), use_underline=True) headers[group] = tags buttons.append(group) group = Gtk.RadioButton(group=group, label=_("_Custom"), use_underline=True) self.__custom = group headers[group] = [] buttons.append(group) button_box = Gtk.HBox(spacing=6) self.__model = model = Gtk.ListStore(str, bool) radio_box = Gtk.VBox(spacing=6) for button in buttons: radio_box.pack_start(button, False, True, 0) button.connect('toggled', self.__toggled, button_box, model) self.pack_start(radio_box, False, True, 0) cb = TagsComboBoxEntry(self.COMPLETION) view = BaseView(model) view.set_reorderable(True) view.set_headers_visible(True) ctrl_box = Gtk.VBox(spacing=6) add = Gtk.Button(stock=Gtk.STOCK_ADD) ctrl_box.pack_start(add, False, True, 0) add.connect('clicked', self.__add, model, cb) remove = Gtk.Button(stock=Gtk.STOCK_REMOVE) ctrl_box.pack_start(remove, False, True, 0) remove.connect('clicked', self.__remove, view) selection = view.get_selection() selection.connect('changed', self.__selection_changed, remove) selection.emit('changed') sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.IN) sw.add(view) edit_box = Gtk.VBox(spacing=6) edit_box.pack_start(cb, False, True, 0) edit_box.pack_start(sw, True, True, 0) button_box.pack_start(edit_box, True, True, 0) button_box.pack_start(ctrl_box, False, True, 0) self.pack_start(button_box, True, True, 0) render = Gtk.CellRendererText() render.set_property("editable", True) def edited_cb(render, path, text, model): model[path][0] = text render.connect("edited", edited_cb, model) column = Gtk.TreeViewColumn(_("Tag"), render, text=0) column.set_expand(True) view.append_column(column) toggle = Gtk.CellRendererToggle() toggle.connect("toggled", self.__toggeled, model) toggle_column = Gtk.TreeViewColumn(_("Merge"), toggle, active=1) view.append_column(toggle_column) def __toggeled(self, render, path, model): model[path][1] = not model[path][1] def __get_headers(self): for button in self.__headers.iterkeys(): if button.get_active(): if button == self.__custom: model_headers = [(row[0], row[1]) for row in self.__model] self.__headers[self.__custom] = model_headers return self.__headers[button] def __set_headers(self, new_headers): for button, headers in self.__headers.iteritems(): if headers == new_headers: button.set_active(True) button.emit("toggled") break else: self.__headers[self.__custom] = new_headers self.__custom.set_active(True) headers = property(__get_headers, __set_headers) def __selection_changed(self, selection, remove): remove.set_sensitive(bool(selection.get_selected()[1])) def __add(self, button, model, cb): if cb.tag: model.append(row=[cb.tag, False]) def __remove(self, button, view): view.remove_selection() def __toggled(self, button, edit_widget, model): tags = self.__headers[button] if tags: model.clear() for tag, merge in tags: model.append(row=[tag, merge]) edit_widget.set_sensitive( button.get_active() and button is self.__custom) class Preferences(qltk.UniqueWindow): def __init__(self, parent=None): if self.is_not_unique(): return super(Preferences, self).__init__() self.set_transient_for(qltk.get_top_parent(parent)) self.set_default_size(350, 225) self.set_border_width(12) self.set_title(_("Album Collection Preferences") + " - Quod Libet") vbox = Gtk.VBox(spacing=12) editor = PatternEditor() editor.headers = get_headers() apply = Gtk.Button(stock=Gtk.STOCK_APPLY) apply.connect_object("clicked", self.__apply, editor, False) cancel = Gtk.Button(stock=Gtk.STOCK_CANCEL) cancel.connect("clicked", lambda x: self.destroy()) ok = Gtk.Button(stock=Gtk.STOCK_OK) ok.connect_object("clicked", self.__apply, editor, True) box = Gtk.HButtonBox() box.set_spacing(6) box.set_layout(Gtk.ButtonBoxStyle.END) box.pack_start(apply, True, True, 0) box.pack_start(cancel, True, True, 0) box.pack_start(ok, True, True, 0) vbox.pack_start(editor, True, True, 0) vbox.pack_start(box, False, True, 0) self.add(vbox) ok.grab_focus() self.show_all() def __apply(self, editor, close): if editor.headers != get_headers(): save_headers(editor.headers) CollectionBrowser.set_hierarchy() if close: self.destroy() UnknownNode = object() MultiNode = object() def build_tree(tags, albums, cache=None): if not tags: return list(albums) tag, merge = tags[0] tree = {} cache = cache or {} for album in albums: cache_key = (album, tag) if cache_key not in cache: cache[cache_key] = album.list(tag) values = cache[cache_key] if merge and len(values) > 1: values = [MultiNode] for value in values or [UnknownNode]: tree.setdefault(value, []).append(album) for key, value in tree.iteritems(): tree[key] = build_tree(tags[1:], value, cache) return tree class StoreUtils(object): """TreeModelFilter can't be subclassed, otherwise this would be a mixin""" @staticmethod def get_path_for_album(self, album): """Returns the path for an album or None""" def func(model, path, iter_, result): if model[iter_][0] is album: # pygobject bug: treepath only valid in callback, # so make a copy result[0] = path.copy() return True return False res = [None] self.foreach(func, res) return res[0] @staticmethod def get_albums_for_path(self, path): return StoreUtils.get_albums_for_iter(self, self[path].iter) @staticmethod def get_albums_for_iter(self, iter_): row = self[iter_] if isinstance(row[0], Album): return set([row[0]]) albums = set() for child in row.iterchildren(): obj = child[0] if isinstance(obj, Album): albums.add(obj) else: albums.update( StoreUtils.get_albums_for_iter(self, child.iter)) return albums @staticmethod def get_markup(self, tags, iter_): obj = self[iter_][0] if isinstance(obj, Album): return PAT % obj if isinstance(obj, basestring): markup = util.escape(obj) else: tag = util.tag(tags[len(self.get_path(iter_).get_indices()) - 1]) if obj is UnknownNode: markup = UNKNOWN_PATTERN % util.escape(tag) else: markup = MULTI_PATTERN % util.escape(tag) num = len(StoreUtils.get_albums_for_iter(self, iter_)) return markup + COUNT_PATTERN % num @staticmethod def get_album(self, iter_): obj = self[iter_][0] if isinstance(obj, Album): return obj class CollectionTreeStore(Gtk.TreeStore): def __init__(self): super(CollectionTreeStore, self).__init__(object) self.__tags = [] def set_albums(self, tags, albums): self.clear() self.__tags = tags self.add_albums(albums) @property def tags(self): return [t[0] for t in self.__tags] def add_albums(self, albums): def _add(tree, iter_=None): # lowest level, add albums if isinstance(tree, list): for album in tree: self.append(parent=iter_, row=[album]) return # move into existing nodes and remove them from tree child = self.iter_children(iter_) while child: obj = self[child][0] if obj in tree: _add(tree[obj], child) del tree[obj] child = self.iter_next(child) # add missing ones for key, value in tree.iteritems(): _add(value, self.append(parent=iter_, row=[key])) _add(build_tree(self.__tags, albums)) def remove_albums(self, albums): # We can't get anything from the albums (they have no songs), # so we have to look through everything. def _remove_albums(albums, iter_=None): child = self.iter_children(iter_) while child: _remove_albums(albums, child) obj = self[child][0] if isinstance(obj, Album): # remove albums if obj in albums: if not self.remove(child): child = None continue else: child = self.iter_next(child) else: # clean up empty containers if not self.iter_has_child(child): if not self.remove(child): child = None continue else: child = self.iter_next(child) _remove_albums(set(albums)) def change_albums(self, albums): def _check_albums(tree, iter_=None, not_found=None): if not_found is None: not_found = set() if isinstance(tree, list): # save nodes that are not there anymore child = self.iter_children(iter_) while child: row = self[child] try: tree.remove(row[0]) except ValueError: pass else: # it's still in the same position, trigger a redraw self.row_changed(row.path, row.iter) child = self.iter_next(child) not_found.update(tree) return not_found child = self.iter_children(iter_) while child: obj = self[child][0] if obj in tree: _check_albums(tree[obj], child, not_found) del tree[obj] child = self.iter_next(child) # everything left over changed def _get_all(sub, found=None): if found is None: found = set() if isinstance(sub, list): found.update(sub) return found for v in sub.itervalues(): _get_all(v, found) return found not_found.update(_get_all(tree)) return not_found not_found = _check_albums(build_tree(self.__tags, albums)) self.remove_albums(not_found) self.add_albums(not_found) class CollectionView(AllTreeView): def __init__(self, *args, **kwargs): super(CollectionView, self).__init__(*args, **kwargs) self.connect_after("row-expanded", self.__expand_helper) def __expand_helper(self, view, iter, path): model = view.get_model() children = list(model[path].iterchildren()) if len(children) == 1: view.expand_row(children[0].path, False) def select_album(self, album, unselect=True): path = StoreUtils.get_path_for_album(self.get_model(), album) if path is not None: self.select_path(path, unselect) def select_path(self, path, unselect=True): path_idx = path if isinstance(path_idx, Gtk.TreePath): path_idx = path_idx.get_indices() for i, x in enumerate(path_idx[:-1]): self.expand_row(Gtk.TreePath(tuple(path_idx[:i + 1])), False) self.scroll_to_cell(path, use_align=True, row_align=0.5) selection = self.get_selection() if unselect: selection.unselect_all() self.set_cursor(path) else: selection.select_path(path) def get_selected_albums(self): selection = self.get_selection() model, paths = selection.get_selected_rows() model = self.get_model() albums = set() for path in paths: albums.update(StoreUtils.get_albums_for_path(model, path)) return albums class CollectionBrowser(Browser, Gtk.VBox, util.InstanceTracker): __gsignals__ = Browser.__gsignals__ name = _("Album Collection") accelerated_name = _("Album _Collection") priority = 5 __model = None def pack(self, songpane): container = qltk.RHPaned() container.pack1(self, True, False) container.pack2(songpane, True, False) return container def unpack(self, container, songpane): container.remove(songpane) container.remove(self) @classmethod def _init_model(klass, library): klass.__model = model = CollectionTreeStore() klass.__albums = albums = library.albums albums.load() klass.__sigs = [ albums.connect("added", klass._add_albums, model), albums.connect("removed", klass._remove_albums, model), albums.connect("changed", klass._change_albums, model), ] klass.set_hierarchy() @classmethod def _destroy_model(klass): for sig in klass.__sigs: klass.__albums.disconnect(sig) klass.__model = None del klass.__sigs def _refilter(self): if hasattr(self, "view"): self.view.get_model().refilter() @classmethod def set_hierarchy(klass): klass.__model.set_albums(get_headers(), klass.__albums.values()) for inst in klass.instances(): inst._refilter() @classmethod def _add_albums(klass, library, added, model): model.add_albums(added) @classmethod def _remove_albums(klass, library, removed, model): model.remove_albums(removed) @classmethod def _change_albums(klass, library, changed, model): model.change_albums(changed) def __init__(self, library, main): super(CollectionBrowser, self).__init__(spacing=6) self._register_instance() if self.__model is None: self._init_model(library) sw = ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.IN) self.view = view = CollectionView() view.set_headers_visible(False) model_sort = Gtk.TreeModelSort(model=self.__model) model_filter = model_sort.filter_new() self.__filter = None self.__bg_filter = background_filter() model_filter.set_visible_func(self.__parse_query) view.set_model(model_filter) def sort(model, i1, i2, data): t1, t2 = model[i1][0], model[i2][0] if t1 is None or t2 is None: # FIXME: why? return 0 # FIXME: order this deterministically if t1 is MultiNode or t1 is UnknownNode or \ t2 is MultiNode or t2 is UnknownNode: return -cmp(t1, t2) if not isinstance(t1, Album): return cmp(util.human_sort_key(t1), util.human_sort_key(t2)) a1, a2 = t1, t2 return (cmp(a1.peoplesort and a1.peoplesort[0], a2.peoplesort and a2.peoplesort[0]) or cmp(a1.date or "ZZZZ", a2.date or "ZZZZ") or cmp((a1.sort, a1.key), (a2.sort, a2.key))) model_sort.set_sort_func(0, sort) model_sort.set_sort_column_id(0, Gtk.SortType.ASCENDING) column = Gtk.TreeViewColumn("albums") def cell_data(column, cell, model, iter_, data): markup = StoreUtils.get_markup(model, self.__model.tags, iter_) cell.markup = markup cell.set_property('markup', markup) def cell_data_pb(column, cell, model, iter_, data): album = StoreUtils.get_album(model, iter_) if album is None: cell.set_property('stock_id', Gtk.STOCK_DIRECTORY) else: album.scan_cover() if album.cover: cell.set_property('pixbuf', scale(album.cover, (25, 25))) else: cell.set_property('stock_id', Gtk.STOCK_CDROM) imgrender = Gtk.CellRendererPixbuf() render = Gtk.CellRendererText() render.set_property('ellipsize', Pango.EllipsizeMode.END) column.pack_start(imgrender, False) column.pack_start(render, True) column.set_cell_data_func(render, cell_data) column.set_cell_data_func(imgrender, cell_data_pb) view.append_column(column) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.add(view) hbox = Gtk.HBox(spacing=6) prefs = Gtk.Button() prefs.add(SymbolicIconImage("emblem-system", Gtk.IconSize.MENU)) prefs.connect('clicked', Preferences) search = SearchBarBox(completion=AlbumTagCompletion(), accel_group=self.accelerators) search.connect('query-changed', self.__update_filter) hbox.pack_start(search, True, True, 0) hbox.pack_start(prefs, False, True, 0) if main: self.pack_start(Alignment(hbox, left=3, top=3), False, True, 0) else: self.pack_start(hbox, False, True, 0) self.pack_start(sw, True, True, 0) view.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.__sig = view.get_selection().connect('changed', self.__selection_changed) view.connect('row-activated', self.__play, main) view.connect_object('popup-menu', self.__popup, view, library) targets = [("text/x-quodlibet-songs", Gtk.TargetFlags.SAME_APP, 1), ("text/uri-list", 0, 2)] targets = [Gtk.TargetEntry.new(*t) for t in targets] view.drag_source_set( Gdk.ModifierType.BUTTON1_MASK, targets, Gdk.DragAction.COPY) view.connect("drag-data-get", self.__drag_data_get) self.connect("destroy", self.__destroy) self.show_all() def __parse_query(self, model, iter_, data): f, b = self.__filter, self.__bg_filter if f is None and b is None: return True def check_album(obj): if b is None: return f(obj) if f is None: return b(obj) return f(obj) and b(obj) obj = model[iter_][0] if isinstance(obj, Album): return check_album(obj) else: for album in StoreUtils.get_albums_for_iter(model, iter_): if check_album(album): return True return False def __update_filter(self, entry, text): self.__filter = None if not Query.match_all(text): tags = self.__model.tags + ["album"] self.__filter = Query(text, star=tags).search self.__bg_filter = background_filter() self.view.get_model().refilter() def __destroy(self, browser): klass = type(browser) if not klass.instances(): klass._destroy_model() def __drag_data_get(self, view, ctx, sel, tid, etime): songs = self.__get_selected_songs() if tid == 1: filenames = [song("~filename") for song in songs] type_ = Gdk.atom_intern("text/x-quodlibet-songs", True) sel.set(type_, 8, "\x00".join(filenames)) else: sel.set_uris([song("~uri") for song in songs]) def __popup(self, view, library): songs = self.__get_selected_songs(view.get_selection()) menu = SongsMenu(library, songs, parent=self) menu.show_all() return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def __play(self, view, path, col, main): model = view.get_model() if main and isinstance(model[path][0], Album): self.emit("activated") else: if view.row_expanded(path): view.collapse_row(path) else: view.expand_row(path, False) def __get_selected_songs(self, sort=True): albums = self.view.get_selected_albums() songs = [] if sort: for album in albums: songs.extend(sorted(album.songs)) else: for album in albums: songs.extend(album.songs) return songs def __selection_changed(self, selection): def idle_emit(): songs = self.__get_selected_songs(False) if songs: self.emit('songs-selected', songs, None) GLib.idle_add(idle_emit) def can_filter_albums(self): return True def filter_albums(self, album_keys): albums = filter(None, [self.__albums.get(k) for k in album_keys]) if albums: self.view.select_album(albums[0], unselect=True) for album in albums[1:]: self.view.select_album(album, unselect=False) def unfilter(self): model = self.view.get_model() root = model.get_iter_root() if root: self.view.set_cursor(model[root].path) def activate(self): self.view.get_selection().emit('changed') def restore(self): paths = config.get("browsers", "collection", "").split("\t") paths = [tuple(map(int, path.split())) for path in paths] if paths: if not paths[0]: return self.view.select_path(paths[0], unselect=True) for path in paths[1:]: self.view.select_path(path, unselect=False) def scroll(self, song): album = self.__albums.get(song.album_key) if album: self.view.select_album(album) def save(self): model, paths = self.view.get_selection().get_selected_rows() paths = "\t".join([" ".join(map(str, path)) for path in paths]) config.set("browsers", "collection", paths) browsers = [CollectionBrowser] �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/const.py������������������������������������������������������������������0000644�0001750�0001750�00000017063�12173213426�017432� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Constants used in various parts of QL, mostly strings. import sys import os import locale if os.name == "nt": from win32com.shell import shellcon, shell class Version(tuple): """Represent the version of a dependency as a tuple""" def __new__(cls, *args): # Support tuple or varargs instantiation value = args[0] if len(args) == 1 else args return tuple.__new__(Version, value) def human_version(self): return ".".join(map(str, self)) def __str__(self): return self.human_version() class MinVersions(object): """Dependency requirements for Quod Libet / Ex Falso""" PYTHON = Version(2, 6) MUTAGEN = Version(1, 14) VERSION_TUPLE = Version(3, 0, 2) VERSION = str(VERSION_TUPLE) PROCESS_TITLE_QL = "quodlibet" PROCESS_TITLE_EF = "exfalso" # expanduser doesn't work with unicode on win... if os.name == "nt": # the last 0 means SHGFP_TYPE_CURRENT HOME = shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, 0, 0) else: HOME = os.path.expanduser("~") if 'QUODLIBET_USERDIR' in os.environ: USERDIR = os.environ['QUODLIBET_USERDIR'] else: if os.name == "nt": USERDIR = shell.SHGetFolderPath(0, shellcon.CSIDL_APPDATA, 0, 0) USERDIR = os.path.join(USERDIR, "Quod Libet") else: USERDIR = os.path.join(HOME, ".quodlibet") CONTROL = os.path.join(USERDIR, "control") CONFIG = os.path.join(USERDIR, "config") CURRENT = os.path.join(USERDIR, "current") LIBRARY = os.path.join(USERDIR, "songs") LOGDIR = os.path.join(USERDIR, "logs") # Don't bother saving the library more often than this LIBRARY_SAVE_PERIOD_SECONDS = 15 * 60 DEFAULT_RATING = 0.5 # entry point for the user guide / wiki BRANCH_NAME = "quodlibet-3.0" DOCS_BASE_URL = "https://quodlibet.readthedocs.org/en/%s" DOCS_BASE_URL %= BRANCH_NAME if BRANCH_NAME != "default" else "latest" ONLINE_HELP = DOCS_BASE_URL + "/guide/index.html" SEARCH_HELP = DOCS_BASE_URL + "/guide/searching.html" # about dialog, --version etc. WEBSITE = "http://code.google.com/p/quodlibet" COPYRIGHT = """\ Copyright © 2004-2013 Joe Wreschnig, Michael Urman, Iñigo Serna, Steven Robertson, Christoph Reiter, Nick Boultbee, ...""" # Email used as default for reading/saving per-user data in tags, etc. EMAIL = os.environ.get("EMAIL", "quodlibet@lists.sacredchao.net") # Displayed as registered / help email address SUPPORT_EMAIL = "quod-libet-development@googlegroups.com" BASEDIR = os.path.dirname(os.path.realpath(__file__)) IMAGEDIR = os.path.join(BASEDIR, "images") AUTHORS = sorted("""\ Alexandre Passos Alexey Bobyakov Alex Geoffrey Smith Anders Carlsson Andreas Bombe Anton Shestakov Ari Pollak Aymeric Mansoux Bastian Kleineidam Bastien Gorissen Ben Zeigler Carlo Teubner Christine Spang Christoph Reiter David Kågedal David Schneider Decklin Foster Eduardo Gonzalez Erich Schubert Federico Pelloni Felix Krull Florian Demmer Guillaume Chazarain Hans Scholze Iñigo Serna Jacob Lee Jan Arne Petersen Javier Kohen Joe Higton Joe Wreschnig Johan Hovold Johannes Marbach Johannes Rohrer Joschka Fischer Josh Lee Joshua Kwan Lalo Martins Lee Willis Lukáš Lalinský Markus Koller Martijn Pieters Martin Bergström Michaël Ball Michael Urman Mickael Royer Nicholas J. Michalek Nick Boultbee Niklas Janlert Nikolai Prokoschenko Philipp Müller Philipp Weis Remi Vanicat Robert Muth Steven Robertson Tomasz Miasko Tomasz Torcz Tshepang Lekhonkhobe Türerkan İnce Vasiliy Faronov Zack Weinberg """.strip().split("\n")) TRANSLATORS = sorted(""" Alexandre Passos (pt) Andreas Bertheussen (nb) Anton Shestakov (ru) Bastian Kleineidam (de) Bastien Gorissen (fr) Byung-Hee HWANG (ko) ChangBom Yoon (ko) Daniel Nyberg (sv) Dimitris Papageorgiou (el) Djavan Fagundes (pt) Einārs Sprūģis (lv) Eirik Haatveit (nb) Emfox Zhou (zh_CN) Erik Christiansson (sv) Fabien Devaux (fr) Filippo Pappalardo (it) Guillaume Ayoub (fr) Hans van Dok (nl) Honza Hejzl (cs_CZ) Hsin-lin Cheng (zh_TW) Jari Rahkonen (fi) Javier Kohen (es) Joe Wreschnig (en_CA) Johám-Luís Miguéns Vila (es, gl, gl_ES, eu, pt) Jonas Slivka (lt) Joshua Kwan (fr) Luca Baraldi (it) Lukáš Lalinský (sk) Mathieu Morey (fr) Michal Nowikowski (pl) Mugurel Tudor (ro) Mykola Lynnyk (uk) Naglis Jonaitis (lt) Nick Boultbee (fr, en_GB) Olivier Gambier (fr) Piarres Beobide (eu) Roee Haimovich (he) Rüdiger Arp (de) SZERVÁC Attila (hu) Tomasz Torcz (pl) Türerkan İnce (tr) Witold Kieraś (pl) Yasushi Iwata (ja) Δημήτρης Παπαγεωργίου (el) Андрей Федосеев (ru) Микола 'Cthulhu' Линник (uk) Николай Прокошенко (ru) Ростислав "zbrox" Райков (bg) Сергей Федосеев (ru) """.strip().splitlines()) ARTISTS = sorted("""\ Tobias Jakub Steiner Fabien Devaux """.strip().split("\n")) # Default songlist column headers DEFAULT_COLUMNS = "~#track ~people ~title~version ~album~discsubtitle " \ "~#length".split() TBP = os.path.join(USERDIR, "lists", "tagpatterns") TBP_EXAMPLES = """\ <tracknumber>. <title> <tracknumber> - <title> <tracknumber> - <artist> - <title> <artist> - <album>/<tracknumber>. <title> <artist>/<album>/<tracknumber> - <title>""" NBP = os.path.join(USERDIR, "lists", "renamepatterns") NBP_EXAMPLES = """\ <tracknumber>. <title> <tracknumber|<tracknumber>. ><title> <tracknumber> - <title> <tracknumber> - <artist> - <title> /path/<artist> - <album>/<tracknumber>. <title> /path/<artist>/<album>/<tracknumber> - <title>""" DEBUG = ("--debug" in sys.argv or "QUODLIBET_DEBUG" in os.environ) MENU = """<ui> <menubar name='Menu'> <menu action='Music'> <menuitem action='AddFolders'/> <menuitem action='AddFiles'/> <menuitem action='AddLocation'/> <separator/> <menu action='BrowseLibrary'> %(browsers)s </menu> <separator/> <menuitem action='Preferences'/> <menuitem action='Plugins'/> <separator/> <menuitem action='RefreshLibrary'/> <menuitem action='ReloadLibrary'/> <separator/> <menuitem action='Quit'/> </menu> <menu action='Filters'> <menuitem action='FilterGenre'/> <menuitem action='FilterArtist'/> <menuitem action='FilterAlbum'/> <separator/> <menuitem action='RandomGenre'/> <menuitem action='RandomArtist'/> <menuitem action='RandomAlbum'/> <separator/> <menuitem action='PlayedRecently'/> <menuitem action='AddedRecently'/> <menuitem action='TopRated'/> </menu> <menu action='Control'> <menuitem action='Previous'/> <menuitem action='PlayPause'/> <menuitem action='Next'/> <separator/> <menuitem action='EditTags'/> <menuitem action='Information'/> <separator/> <menuitem action='Jump'/> </menu> <menu action='View'> <menuitem action='SongList'/> <menuitem action='Queue'/> <separator/> %(views)s </menu> <menu action='Help'> <menuitem action='OnlineHelp'/> <menuitem action='SearchHelp'/> <menuitem action='About'/> %(debug)s </menu> </menubar> </ui>""" try: ENCODING = locale.getpreferredencoding() except locale.Error: ENCODING = "utf-8" else: # python on macports can return a bugs result (empty string) try: u"".encode(ENCODING) except LookupError: ENCODING = "utf-8" # http://developer.gnome.org/doc/API/2.0/glib/glib-running.html if "G_FILENAME_ENCODING" in os.environ: FSCODING = os.environ["G_FILENAME_ENCODING"].split(",")[0] if FSCODING == "@locale": FSCODING = ENCODING elif "G_BROKEN_FILENAMES" in os.environ: FSCODING = ENCODING else: FSCODING = "utf-8" del(os) del(locale) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/devices/������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017342� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/devices/_gpod.py����������������������������������������������������������0000644�0001750�0001750�00000066516�12173212464�021026� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation """ctypes bindings for libgpod. Similar to the in libgpod included swig bindings except: - Functions for pixbuf handling are missing (itdb_artwork_*) - Swig wrappers (sw_*) from the swig bindings are mostly missing These are needed since the original bindings depend on pygtk which breaks in combination with pygobject. """ from ctypes import * try: _glib = CDLL("libglib-2.0.so.0") except OSError: raise ImportError("Couldn't find libglib-2.0") try: _lib = CDLL("libgpod.so.4") except OSError: raise ImportError("Couldn't find libgpod") gchar_p = c_char_p gchar = c_char guchar = c_uint8 guchar_p = POINTER(c_uint8) guint = c_uint gpointer = c_void_p gint32 = c_int32 guint32 = c_uint32 gint = c_int gboolean = c_bool gint8 = c_int8 guint8 = c_uint8 gint16 = c_int16 guint16 = c_uint16 gint64 = c_int64 guint64 = c_uint64 gfloat = c_float gdouble = c_double gshort = c_short gushort = c_ushort glong = c_long gulong = c_ulong gsize = c_size_t gconstpointer = c_void_p time_t = c_ulong g_strdup = _glib.g_strdup g_strdup.argtypes = [gchar_p] g_strdup.restype = gpointer g_free = _glib.g_free g_free.argtypes = [gpointer] g_free.restype = None class StructPointerMixin(object): """Access struct fields through the struct pointer""" def _get_type(self, name): """Returns the type of the field""" for n, type_ in self._fields_: if name == n: return type_ else: raise KeyError def __getattr__(self, name): if not self: raise AttributeError("NULL pointer access") return getattr(self.contents, name) def __setattr__(self, name, value): if not self: raise AttributeError("NULL pointer access") if not hasattr(self.contents, name): raise AttributeError("Invalid attribute: %r" % name) # copy c_char_p values and free old ones type_ = self._get_type(name) if type_ is gchar_p: old_value = getattr(self.contents, name) g_free(old_value) value = g_strdup(value) setattr(self.contents, name, value) class GList(Structure): pass class GListPtr(POINTER(GList), StructPointerMixin): _type_ = GList GList._fields_ = [ ("data", gpointer), ("next", GListPtr), ("prev", GListPtr), ] class GTreePtr(gpointer): pass class Enum(guint): def __str__(self): for a in (c for c in dir(self) if c.upper() == c): if getattr(self, a) == self.value: return a return "Unkown" def __repr__(self): return repr(str(self)) def __int__(self): return self.value class Flags(guint): def __str__(self): values = [] for a in (c for c in dir(self) if c.upper() == c): if getattr(self, a) & self.value: values.append(a) return " | ".join(values) or "Unkown" def __repr__(self): return repr(str(self)) def __int__(self): return self.value class IpodGeneration(Enum): (UNKNOWN, FIRST, SECOND, THIRD, FOURTH, PHOTO, MOBILE, MINI_1, MINI_2, SHUFFLE_1, SHUFFLE_2, SHUFFLE_3, NANO_1, NANO_2, NANO_3, NANO_4, VIDEO_1, VIDEO_2, CLASSIC_1, CLASSIC_2, TOUCH_1, IPHONE_1, SHUFFLE_4, TOUCH_2, IPHONE_2, IPHONE_3, CLASSIC_3, NANO_5, TOUCH_3, IPAD_1, IPHONE_4, TOUCH_4, NANO_6) = range(33) class IpodModel(Enum): (INVALID, UNKNOWN, COLOR, COLOR_U2, REGULAR, REGULAR_U2, MINI, MINI_BLUE, MINI_PINK, MINI_GREEN, MINI_GOLD, SHUFFLE, NANO_WHITE, NANO_BLACK, VIDEO_WHITE, VIDEO_BLACK, MOBILE_1, VIDEO_U2, NANO_SILVER, NANO_BLUE, NANO_GREEN, NANO_PINK, NANO_RED, NANO_YELLOW, NANO_PURPLE, NANO_ORANGE, IPHONE_1, SHUFFLE_SILVER, SHUFFLE_PINK, SHUFFLE_BLUE, SHUFFLE_GREEN, SHUFFLE_ORANGE, SHUFFLE_PURPLE, SHUFFLE_RED, CLASSIC_SILVER, CLASSIC_BLACK, TOUCH_SILVER, SHUFFLE_BLACK, IPHONE_WHITE, IPHONE_BLACK, SHUFFLE_GOLD, SHUFFLE_STAINLESS, IPAD) = range(43) class IpodInfo(Structure): _fields_ = [ ("model_number", gchar_p), ("capacity", c_double), ("ipod_model", IpodModel), ("ipod_generation", IpodGeneration), ("musicdirs", guint), ("reserved_int1", gint32), ("reserved_int2", gint32), ("reserved1", gconstpointer), ("reserved2", gconstpointer), ] class IpodInfoPtr(POINTER(IpodInfo), StructPointerMixin): _type_ = IpodInfo ITDB_SPL_STRING_MAXLEN = 255 ITDB_SPL_DATE_IDENTIFIER = 0x2dae2dae2dae2dae class SPLMatch(Enum): AND = 0 OR = 1 class LimitType(Enum): MINUTES = 0x01 MB = 0x02 SONGS = 0x03 HOURS = 0x04 GB = 0x05 class LimitSort(Enum): RANDOM = 0x02 SONG_NAME = 0x03 ALBUM = 0x04 ARTIST = 0x05 GENRE = 0x07 MOST_RECENTLY_ADDED = 0x10 LEAST_RECENTLY_ADDED = 0x80000010 MOST_OFTEN_PLAYED = 0x14 LEAST_OFTEN_PLAYED = 0x80000014 MOST_RECENTLY_PLAYED = 0x15 LEAST_RECENTLY_PLAYED = 0x80000015 HIGHEST_RATING = 0x17 LOWEST_RATING = 0x80000017 class SPLAction(Enum): IS_INT = 0x00000001 IS_GREATER_THAN = 0x00000010 IS_LESS_THAN = 0x00000040 IS_IN_THE_RANGE = 0x00000100 IS_IN_THE_LAST = 0x00000200 BINARY_AND = 0x00000400 BINARY_UNKNOWN1 = 0x00000800 IS_STRING = 0x01000001 CONTAINS = 0x01000002 STARTS_WITH = 0x01000004 ENDS_WITH = 0x01000008 IS_NOT_INT = 0x02000001 IS_NOT_GREATER_THAN = 0x02000010 IS_NOT_LESS_THAN = 0x02000040 IS_NOT_IN_THE_RANGE = 0x02000100 IS_NOT_IN_THE_LAST = 0x02000200 NOT_BINARY_AND = 0x02000400 BINARY_UNKNOWN2 = 0x02000800 IS_NOT = 0x03000001 DOES_NOT_CONTAIN = 0x03000002 DOES_NOT_START_WITH = 0x03000004 DOES_NOT_END_WITH = 0x03000008 class SPLFieldType(Enum): (STRING, INT, BOOLEAN, DATE, PLAYLIST, UNKNOWN, BINARY_AND) = range(1, 8) class SPLActionType(Enum): (STRING, INT, DATE, RANGE_INT, RANGE_DATE, INTHELAST, PLAYLIST, NONE, INVALID, UNKNOWN, BINARY_AND) = range(1, 12) class SPLActionLast(Enum): DAYS_VALUE = 86400 WEEKS_VALUE = 604800 MONTHS_VALUE = 2628000 class SPLField(Enum): SONG_NAME = 0x02 ALBUM = 0x03 ARTIST = 0x04 BITRATE = 0x05 SAMPLE_RATE = 0x06 YEAR = 0x07 GENRE = 0x08 KIND = 0x09 DATE_MODIFIED = 0x0a TRACKNUMBER = 0x0b SIZE = 0x0c TIME = 0x0d COMMENT = 0x0e DATE_ADDED = 0x10 COMPOSER = 0x12 PLAYCOUNT = 0x16 LAST_PLAYED = 0x17 DISC_NUMBER = 0x18 RATING = 0x19 COMPILATION = 0x1f BPM = 0x23 GROUPING = 0x27 PLAYLIST = 0x28 PURCHASE = 0x29 DESCRIPTION = 0x36 CATEGORY = 0x37 PODCAST = 0x39 VIDEO_KIND = 0x3c TVSHOW = 0x3e SEASON_NR = 0x3f SKIPCOUNT = 0x44 LAST_SKIPPED = 0x45 ALBUMARTIST = 0x47 SORT_SONG_NAME = 0x4e SORT_ALBUM = 0x4f SORT_ARTIST = 0x50 SORT_ALBUMARTIST = 0x51 SORT_COMPOSER = 0x52 SORT_TVSHOW = 0x53 ALBUM_RATING = 0x5a class SPLPref(Structure): _fields_ = [ ("liveupdate", guint8), ("checkrules", guint8), ("checklimits", guint8), ("limittype", guint32), ("limitsort", guint32), ("limitvalue", guint32), ("matchcheckedonly", guint8), ("reserved_int1", gint32), ("reserved_int2", gint32), ("reserved1", gpointer), ("reserved2", gpointer), ] class SPLRule(Structure): _fields_ = [ ("field", guint32), ("action", guint32), ("string", gchar_p), ("fromvalue", guint64), ("fromdate", guint64), ("fromunits", guint64), ("tovalue", guint64), ("todate", gint64), ("tounits", guint64), ("unk052", guint32), ("unk056", guint32), ("unk060", guint32), ("unk064", guint32), ("unk068", guint32), ("reserved_int1", gint32), ("reserved_int2", gint32), ("reserved1", gpointer), ("reserved2", gpointer), ] class SPLRulePtr(POINTER(SPLRule), StructPointerMixin): _type_ = SPLRule class SPLRules(Structure): _fields_ = [ ("unk004", guint32), ("match_operator", guint32), ("rules", GListPtr), ("reserved_int1", gint32), ("reserved_int2", gint32), ("reserved1", gpointer), ("reserved2", gpointer), ] class Chapter(Structure): _fields_ = [ ("startpos", guint32), ("chaptertitle", gchar_p), ("reserved_int1", gint32), ("reserved_int2", gint32), ("reserved1", gpointer), ("reserved2", gpointer), ] class ChapterPtr(POINTER(Chapter), StructPointerMixin): _type_ = Chapter class Chapterdata(Structure): _fields_ = [ ("chapters", GListPtr), ("unk024", guint32), ("unk028", guint32), ("unk032", guint32), ("reserved_int1", gint32), ("reserved_int2", gint32), ("reserved1", gpointer), ("reserved2", gpointer), ] class ChapterdataPtr(POINTER(Chapterdata), StructPointerMixin): _type_ = Chapterdata ITDB_RATING_STEP = 20 class ThumbPtr(c_void_p): pass UserDataDuplicateFunc = CFUNCTYPE(gpointer, gpointer) UserDataDestroyFunc = CFUNCTYPE(None, gpointer) class Artwork(Structure): _fields_ = [ ("thumbnail", ThumbPtr), ("id", guint32), ("dbid", guint64), ("unk028", gint32), ("rating", guint32), ("unk036", gint32), ("creation_date", time_t), ("digitized_date", time_t), ("artwork_size", guint32), ("reserved_int1", gint32), ("reserved_int2", gint32), ("reserved1", gpointer), ("reserved2", gpointer), ("usertype", guint64), ("userdata", gpointer), ("userdata_duplicate", UserDataDuplicateFunc), ("userdata_destroy", UserDataDestroyFunc), ] class ArtworkPtr(POINTER(Artwork), StructPointerMixin): _type_ = Artwork class PhotoDB(Structure): _fields_ = [ ("photos", GListPtr), ("photoalbums", GListPtr), ("reserved_int1", gint32), ("reserved_int2", gint32), ("reserved1", gpointer), ("reserved2", gpointer), ("usertype", guint64), ("userdata", gpointer), ("userdata_duplicate", UserDataDuplicateFunc), ("userdata_destroy", UserDataDestroyFunc), ] class PhotoDBPtr(POINTER(PhotoDB), StructPointerMixin): _type_ = PhotoDB class DevicePtr(c_void_p): pass class iTunesDB_PrivatePtr(c_void_p): pass class iTunesDB(Structure): _fields_ = [ ("tracks", GListPtr), ("playlists", GListPtr), ("filename", gchar_p), ("device", DevicePtr), ("version", guint32), ("id", guint64), ("tzoffset", gint32), ("reserved_int2", gint32), ("priv", iTunesDB_PrivatePtr), ("reserved2", gpointer), ("usertype", guint64), ("userdata", gpointer), ("userdata_duplicate", UserDataDuplicateFunc), ("userdata_destroy", UserDataDestroyFunc), ] class iTunesDBPtr(POINTER(iTunesDB), StructPointerMixin): _type_ = iTunesDB class PhotoAlbum(Structure): _fields_ = [ ("photodb", PhotoDBPtr), ("name", gchar_p), ("members", GListPtr), ("album_type", guint8), ("playmusic", guint8), ("repeat", guint8), ("random", guint8), ("show_titles", guint8), ("transition_direction", guint8), ("slide_duration", gint32), ("transition_duration", gint32), ("song_id", gint64), ("unk024", gint32), ("unk028", gint16), ("unk044", gint32), ("unk048", gint32), ("album_id", gint32), ("prev_album_id", gint32), ("reserved_int1", gint32), ("reserved_int2", gint32), ("reserved1", gpointer), ("reserved2", gpointer), ("usertype", guint64), ("userdata", gpointer), ("userdata_duplicate", UserDataDuplicateFunc), ("userdata_destroy", UserDataDestroyFunc), ] class PhotoAlbumPtr(POINTER(PhotoAlbum), StructPointerMixin): _type_ = PhotoAlbum class Playlist_PrivatePtr(c_void_p): pass class Playlist(Structure): _fields_ = [ ("itdb", iTunesDBPtr), ("name", gchar_p), ("type", guint8), ("flag1", guint8), ("flag2", guint8), ("flag3", guint8), ("num", gint), ("members", GListPtr), ("is_spl", gboolean), ("timestamp", time_t), ("id", guint64), ("sortorder", guint32), ("podcastflag", guint32), ("splpref", SPLPref), ("splrules", SPLRules), ("reserved100", gpointer), ("reserved101", gpointer), ("reserved_int1", gint32), ("reserved_int2", gint32), ("*priv", Playlist_PrivatePtr), ("reserved2", gpointer), ("usertype", guint64), ("userdata", gpointer), ("userdata_duplicate", UserDataDuplicateFunc), ("userdata_destroy", UserDataDestroyFunc), ] class PlaylistPtr(POINTER(Playlist), StructPointerMixin): _type_ = Playlist class PlaylistSortOrder(Enum): MANUAL = 1 TITLE = 3 ALBUM = 4 ARTIST = 5 BITRATE = 6 GENRE = 7 FILETYPE = 8 TIME_MODIFIED = 9 TRACK_NR = 10 SIZE = 11 TIME = 12 YEAR = 13 SAMPLERATE = 14 COMMENT = 15 TIME_ADDED = 16 EQUALIZER = 17 COMPOSER = 18 PLAYCOUNT = 20 TIME_PLAYED = 21 CD_NR = 22 RATING = 23 RELEASE_DATE = 24 BPM = 25 GROUPING = 26 CATEGORY = 27 DESCRIPTION = 28 class Mediatype(Flags): AUDIO = 1 << 0 MOVIE = 1 << 1 PODCAST = 1 << 2 AUDIOBOOK = 1 << 3 MUSICVIDEO = 1 << 5 TVSHOW = 1 << 6 RINGTONE = 1 << 14 RENTAL = 1 << 15 ITUNES_EXTRA = 1 << 16 MEMO = 1 << 20 ITUNES_U = 1 << 21 EPUB_BOOK = 1 << 22 PDF_BOOK = 1 << 23 class Track_PrivatePtr(c_void_p): pass class Track(Structure): _fields_ = [ ("itdb", iTunesDBPtr), ("title", gchar_p), ("ipod_path", gchar_p), ("album", gchar_p), ("artist", gchar_p), ("genre", gchar_p), ("filetype", gchar_p), ("comment", gchar_p), ("category", gchar_p), ("composer", gchar_p), ("grouping", gchar_p), ("description", gchar_p), ("podcasturl", gchar_p), ("podcastrss", gchar_p), ("chapterdata", ChapterdataPtr), ("subtitle", gchar_p), ("tvshow", gchar_p), ("tvepisode", gchar_p), ("tvnetwork", gchar_p), ("albumartist", gchar_p), ("keywords", gchar_p), ("sort_artist", gchar_p), ("sort_title", gchar_p), ("sort_album", gchar_p), ("sort_albumartist", gchar_p), ("sort_composer", gchar_p), ("sort_tvshow", gchar_p), ("id", guint32), ("size", guint32), ("tracklen", gint32), ("cd_nr", gint32), ("cds", gint32), ("track_nr", gint32), ("tracks", gint32), ("bitrate", gint32), ("samplerate", guint16), ("samplerate_low", guint16), ("year", gint32), ("volume", gint32), ("soundcheck", guint32), ("time_added", time_t), ("time_modified", time_t), ("time_played", time_t), ("bookmark_time", guint32), ("rating", guint32), ("playcount", guint32), ("playcount2", guint32), ("recent_playcount", guint32), ("transferred", gboolean), ("BPM", gint16), ("app_rating", guint8), ("type1", guint8), ("type2", guint8), ("compilation", guint8), ("starttime", guint32), ("stoptime", guint32), ("checked", guint8), ("dbid", guint64), ("drm_userid", guint32), ("visible", guint32), ("filetype_marker", guint32), ("artwork_count", guint16), ("artwork_size", guint32), ("samplerate2", c_float), ("unk126", guint16), ("unk132", guint32), ("time_released", time_t), ("unk144", guint16), ("explicit_flag", guint16), ("unk148", guint32), ("unk152", guint32), ("skipcount", guint32), ("recent_skipcount", guint32), ("last_skipped", guint32), ("has_artwork", guint8), ("skip_when_shuffling", guint8), ("remember_playback_position", guint8), ("flag4", guint8), ("dbid2", guint64), ("lyrics_flag", guint8), ("movie_flag", guint8), ("mark_unplayed", guint8), ("unk179", guint8), ("unk180", guint32), ("pregap", guint32), ("samplecount", guint64), ("unk196", guint32), ("postgap", guint32), ("unk204", guint32), ("mediatype", guint32), ("season_nr", guint32), ("episode_nr", guint32), ("unk220", guint32), ("unk224", guint32), ("unk228", guint32), ("unk232", guint32), ("unk236", guint32), ("unk240", guint32), ("unk244", guint32), ("gapless_data", guint32), ("unk252", guint32), ("gapless_track_flag", guint16), ("gapless_album_flag", guint16), ("obsolete", guint16), ("artwork", ArtworkPtr), ("mhii_link", guint32), ("reserved_int1", gint32), ("reserved_int2", gint32), ("reserved_int3", gint32), ("reserved_int4", gint32), ("reserved_int5", gint32), ("reserved_int6", gint32), ("priv", Track_PrivatePtr), ("reserved2", gpointer), ("reserved3", gpointer), ("reserved4", gpointer), ("reserved5", gpointer), ("reserved6", gpointer), ("usertype", guint64), ("userdata", gpointer), ("userdata_duplicate", UserDataDuplicateFunc), ("userdata_destroy", UserDataDestroyFunc), ] class TrackPtr(POINTER(Track), StructPointerMixin): _type_ = Track class FileError(Enum): SEEK, CORRUPT, NOTFOUND, RENAME, ITDB_CORRUPT = range(5) class Error(Enum): SEEK, CORRUPT, NOTFOUND, RENAME, ITDB_CORRUPT, SQLITE = range(6) class GErrorPtrPtr(c_void_p): pass _functions = [ ("itdb_parse", iTunesDBPtr, [gchar_p, GErrorPtrPtr]), ("itdb_parse_file", iTunesDBPtr, [gchar_p, GErrorPtrPtr]), ("itdb_write", gboolean, [iTunesDBPtr, GErrorPtrPtr]), ("itdb_write_file", gboolean, [iTunesDBPtr, gchar_p, GErrorPtrPtr]), ("itdb_shuffle_write", gboolean, [iTunesDBPtr, GErrorPtrPtr]), ("itdb_shuffle_write_file", gboolean, [iTunesDBPtr, gchar_p, GErrorPtrPtr]), ("itdb_start_sync", gboolean, [iTunesDBPtr]), ("itdb_stop_sync", gboolean, [iTunesDBPtr]), ("itdb_new", iTunesDBPtr, []), ("itdb_free", None, [iTunesDBPtr]), ("itdb_duplicate", iTunesDBPtr, [iTunesDBPtr]), ("itdb_tracks_number", guint32, [iTunesDBPtr]), ("itdb_tracks_number_nontransferred", guint32, [iTunesDBPtr]), ("itdb_playlists_number", guint32, [iTunesDBPtr]), ("itdb_musicdirs_number", gint, [iTunesDBPtr]), ("itdb_resolve_path", gchar_p, [gchar_p, POINTER(gchar_p)]), ("itdb_rename_files", gboolean, [gchar_p, GErrorPtrPtr]), ("itdb_cp_get_dest_filename", gchar_p, [TrackPtr, gchar_p, gchar_p, GErrorPtrPtr]), ("itdb_cp", gboolean, [gchar_p, gchar_p, GErrorPtrPtr]), ("itdb_cp_finalize", TrackPtr, [TrackPtr, gchar_p, gchar_p, GErrorPtrPtr]), ("itdb_cp_track_to_ipod", gboolean, [TrackPtr, gchar_p, GErrorPtrPtr]), ("itdb_filename_fs2ipod", None, [gchar_p]), ("itdb_filename_ipod2fs", None, [gchar_p]), ("itdb_filename_on_ipod", gchar_p, [TrackPtr]), ("itdb_set_mountpoint", None, [iTunesDBPtr, gchar_p]), ("itdb_get_mountpoint", gchar_p, [iTunesDBPtr]), ("itdb_get_control_dir", gchar_p, [gchar_p]), ("itdb_get_itunes_dir", gchar_p, [gchar_p]), ("itdb_get_music_dir", gchar_p, [gchar_p]), ("itdb_get_artwork_dir", gchar_p, [gchar_p]), ("itdb_get_photos_dir", gchar_p, [gchar_p]), ("itdb_get_photos_thumb_dir", gchar_p, [gchar_p]), ("itdb_get_device_dir", gchar_p, [gchar_p]), ("itdb_get_itunesdb_path", gchar_p, [gchar_p]), ("itdb_get_itunescdb_path", gchar_p, [gchar_p]), ("itdb_get_itunessd_path", gchar_p, [gchar_p]), ("itdb_get_artworkdb_path", gchar_p, [gchar_p]), ("itdb_get_photodb_path", gchar_p, [gchar_p]), ("itdb_get_path", gchar_p, [gchar_p, gchar_p]), ("itdb_device_new", DevicePtr, []), ("itdb_device_free", None, [DevicePtr]), ("itdb_device_set_mountpoint", None, [DevicePtr, gchar_p]), ("itdb_device_read_sysinfo", gboolean, [DevicePtr]), ("itdb_device_write_sysinfo", gboolean, [DevicePtr, GErrorPtrPtr]), ("itdb_device_get_sysinfo", gchar_p, [DevicePtr, gchar_p]), ("itdb_device_set_sysinfo", None, [DevicePtr, gchar_p, gchar_p]), ("itdb_device_get_ipod_info", IpodInfoPtr, [DevicePtr]), ("itdb_info_get_ipod_info_table", IpodInfoPtr, []), ("itdb_device_supports_artwork", gboolean, [DevicePtr]), ("itdb_device_supports_chapter_image", gboolean, [DevicePtr]), ("itdb_device_supports_video", gboolean, [DevicePtr]), ("itdb_device_supports_photo", gboolean, [DevicePtr]), ("itdb_device_supports_podcast", gboolean, [DevicePtr]), ("itdb_info_get_ipod_model_name_string", gchar_p, [IpodModel]), ("itdb_info_get_ipod_generation_string", gchar_p, [IpodGeneration]), ("itdb_device_get_uuid", gchar_p, [DevicePtr]), ("itdb_track_new", TrackPtr, []), ("itdb_track_free", None, [TrackPtr]), ("itdb_track_add", None, [iTunesDBPtr, TrackPtr, gint32]), ("itdb_track_remove", None, [TrackPtr]), ("itdb_track_unlink", None, [TrackPtr]), ("itdb_track_duplicate", TrackPtr, [TrackPtr]), ("itdb_track_by_id", TrackPtr, [iTunesDBPtr, guint32]), ("itdb_track_id_tree_create", GTreePtr, [iTunesDBPtr]), ("itdb_track_id_tree_destroy", None, [GTreePtr]), ("itdb_track_id_tree_by_id", TrackPtr, [GTreePtr, guint32]), ("itdb_playlist_new", PlaylistPtr, [gchar_p, gboolean]), ("itdb_playlist_free", None, [PlaylistPtr]), ("itdb_playlist_add", None, [iTunesDBPtr, PlaylistPtr, gint32]), ("itdb_playlist_move", None, [PlaylistPtr, gint32]), ("itdb_playlist_remove", None, [PlaylistPtr]), ("itdb_playlist_unlink", None, [PlaylistPtr]), ("itdb_playlist_duplicate", PlaylistPtr, [PlaylistPtr]), ("itdb_playlist_exists", gboolean, [iTunesDBPtr, PlaylistPtr]), ("itdb_playlist_add_track", None, [PlaylistPtr, TrackPtr, gint32]), ("itdb_playlist_by_id", PlaylistPtr, [iTunesDBPtr, guint64]), ("itdb_playlist_by_nr", PlaylistPtr, [iTunesDBPtr, guint32]), ("itdb_playlist_by_name", PlaylistPtr, [iTunesDBPtr, gchar_p]), ("itdb_playlist_contains_track", gboolean, [PlaylistPtr, TrackPtr]), ("itdb_playlist_contain_track_number", guint32, [TrackPtr]), ("itdb_playlist_remove_track", None, [PlaylistPtr, TrackPtr]), ("itdb_playlist_tracks_number", guint32, [PlaylistPtr]), ("itdb_playlist_randomize", None, [PlaylistPtr]), ("itdb_playlist_mpl", PlaylistPtr, [iTunesDBPtr]), ("itdb_playlist_is_mpl", gboolean, [PlaylistPtr]), ("itdb_playlist_set_mpl", None, [PlaylistPtr]), ("itdb_playlist_podcasts", PlaylistPtr, [iTunesDBPtr]), ("itdb_playlist_is_podcasts", gboolean, [PlaylistPtr]), ("itdb_playlist_set_podcasts", None, [PlaylistPtr]), ("itdb_playlist_is_audiobooks", gboolean, [PlaylistPtr]), ("itdb_splr_get_field_type", SPLFieldType, [SPLRulePtr]), ("itdb_splr_get_action_type", SPLActionType, [SPLRulePtr]), ("itdb_splr_validate", None, [SPLRulePtr]), ("itdb_splr_remove", None, [PlaylistPtr, SPLRulePtr]), ("itdb_splr_new", SPLRulePtr, []), ("itdb_splr_add", None, [PlaylistPtr, SPLRulePtr, gint]), ("itdb_splr_add_new", SPLRulePtr, [PlaylistPtr, gint]), ("itdb_spl_copy_rules", None, [PlaylistPtr, PlaylistPtr]), ("itdb_splr_eval", gboolean, [SPLRulePtr, TrackPtr]), ("itdb_spl_update", None, [PlaylistPtr]), ("itdb_spl_update_all", None, [iTunesDBPtr]), ("itdb_spl_update_live", None, [iTunesDBPtr]), ("itdb_track_set_thumbnails", gboolean, [TrackPtr, gchar_p]), ("itdb_track_set_thumbnails_from_data", gboolean, [TrackPtr, guchar_p, gsize]), ("itdb_track_set_thumbnails_from_pixbuf", gboolean, [TrackPtr, gpointer]), ("itdb_track_has_thumbnails", gboolean, [TrackPtr]), ("itdb_track_remove_thumbnails", None, [TrackPtr]), ("itdb_track_get_thumbnail", gpointer, [TrackPtr, gint, gint]), ("itdb_photodb_parse", PhotoDBPtr, [gchar_p, GErrorPtrPtr]), ("itdb_photodb_add_photo", ArtworkPtr, [PhotoDBPtr, gchar_p, gint, gint, GErrorPtrPtr]), ("itdb_photodb_add_photo_from_data", ArtworkPtr, [PhotoDBPtr, guchar_p, gsize, gint, gint, GErrorPtrPtr]), ("itdb_photodb_add_photo_from_pixbuf", ArtworkPtr, [PhotoDBPtr, gpointer, gint, gint, GErrorPtrPtr]), ("itdb_photodb_photoalbum_add_photo", None, [PhotoDBPtr, PhotoAlbumPtr, ArtworkPtr, gint]), ("itdb_photodb_photoalbum_create", PhotoAlbumPtr, [PhotoDBPtr, gchar_p, gint]), ("itdb_photodb_create", PhotoDBPtr, [gchar_p]), ("itdb_photodb_photoalbum_new", PhotoAlbumPtr, [gchar_p]), ("itdb_photodb_photoalbum_free", None, [PhotoAlbumPtr]), ("itdb_photodb_photoalbum_add", None, [PhotoDBPtr, PhotoAlbumPtr, gint]), ("itdb_photodb_free", None, [PhotoDBPtr]), ("itdb_photodb_write", gboolean, [PhotoDBPtr, GErrorPtrPtr]), ("itdb_photodb_remove_photo", None, [PhotoDBPtr, PhotoAlbumPtr, ArtworkPtr]), ("itdb_photodb_photoalbum_remove", None, [PhotoDBPtr, PhotoAlbumPtr, gboolean]), ("itdb_photodb_photoalbum_unlink", None, [PhotoAlbumPtr]), ("itdb_photodb_photoalbum_by_name", PhotoAlbumPtr, [PhotoDBPtr, gchar_p]), ("itdb_chapterdata_new", ChapterdataPtr, []), ("itdb_chapterdata_free", None, [ChapterdataPtr]), ("itdb_chapterdata_duplicate", ChapterdataPtr, [ChapterdataPtr]), ("itdb_chapterdata_remove_chapter", None, [ChapterdataPtr, ChapterPtr]), ("itdb_chapterdata_unlink_chapter", None, [ChapterdataPtr, ChapterPtr]), ("itdb_chapterdata_remove_chapters", None, [ChapterdataPtr]), ("itdb_chapter_new", ChapterPtr, []), ("itdb_chapter_free", None, [ChapterPtr]), ("itdb_chapter_duplicate", ChapterPtr, [ChapterPtr]), ("itdb_chapterdata_add_chapter", gboolean, [ChapterdataPtr, guint32, gchar_p]), ("itdb_init_ipod", gboolean, [gchar_p, gchar_p, gchar_p, GErrorPtrPtr]), ] def wrap_pointer_return(func): """If the returned value is a NULL pointer return None instead""" def wrapper(*args, **kwargs): ret = func(*args, **kwargs) if not ret: return None return ret return wrapper for name, ret, args in _functions: try: handle = getattr(_lib, name) except AttributeError: print_d("symbol not found: %r" % name) continue handle.argtypes = args handle.restype = ret # validate pointer return values if hasattr(ret, "contents"): handle = wrap_pointer_return(handle) globals()[name] = handle def sw_get_tracks(itdb_ptr): """Get tracks in itdb.""" if not itdb_ptr: raise ValueError tracks = [] node = itdb_ptr.contents.tracks while node: entry = node.contents track_ptr = cast(entry.data, TrackPtr) tracks.append(track_ptr) node = node.next return tracks __all__ = [] for key in globals().keys(): lower = key.lower() if lower.startswith("itdb_") or lower.startswith("sw_"): __all__.append(key) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/devices/storage.py��������������������������������������������������������0000644�0001750�0001750�00000012105�12173213426�021362� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2006 Markus Koller # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import shutil import copy from glob import glob from gi.repository import Gtk, GLib, GdkPixbuf from quodlibet import util from quodlibet import const from quodlibet.devices._base import Device from quodlibet.library import SongFileLibrary from quodlibet.parse import FileFromPattern from quodlibet.qltk import ConfirmAction CACHE = os.path.join(const.USERDIR, 'cache') class StorageDevice(Device): protocol = 'storage' defaults = { 'pattern': '<artist>/<album>/<title>', 'covers': True, 'unclutter': True, } __library = None __pattern = None def __init__(self, backend_id, device_id): super(StorageDevice, self).__init__(backend_id, device_id) filename = util.escape_filename(device_id) self.__library_path = os.path.join(CACHE, filename) self.__library_name = device_id def __set_pattern(self, widget=None): self.__pattern = FileFromPattern( os.path.join(self.mountpoint, self['pattern'])) def Properties(self): props = [] entry = Gtk.Entry() entry.set_text(self['pattern']) entry.connect_after('changed', self.__set_pattern) props.append((_("_Filename Pattern:"), entry, 'pattern')) check = Gtk.CheckButton() check.set_active(self['covers']) props.append((_("Copy _album covers"), check, 'covers')) check = Gtk.CheckButton() check.set_active(self['unclutter']) props.append((_("_Remove unused covers and directories"), check, 'unclutter')) return props def list(self, wlb): self.__load_library() wlb.setup() next = self.__library.rebuild([self.mountpoint], wlb).next while True: if wlb.quit: wlb.hide() break if not wlb.paused: try: next() except StopIteration: break Gtk.main_iteration() self.__save_library() return self.__library.values() def copy(self, songlist, song): if not self.__pattern: self.__set_pattern() utarget = util.strip_win32_incompat(self.__pattern.format(song)) target = util.fsencode(utarget) dirname = os.path.dirname(target) if os.path.exists(target): if ConfirmAction( songlist, _("File exists"), _("Overwrite <b>%s</b>?") % util.escape(utarget) ).run(): try: # Remove the current song self.__library.remove([self.__library[target]]) except KeyError: pass model = songlist.get_model() for row in model: if row[0]['~filename'] == utarget: model.remove(row.iter) else: return False try: if not os.path.isdir(dirname): os.makedirs(dirname) shutil.copyfile(util.fsencode(song['~filename']), target) if self['covers']: coverfile = os.path.join(dirname, 'folder.jpg') cover = song.find_cover() if cover and util.mtime(cover.name) > util.mtime(coverfile): image = GdkPixbuf.Pixbuf.new_from_file_at_size( cover.name, 200, 200) image.save(coverfile, 'jpeg') song = copy.deepcopy(song) song.sanitize(target) self.__library.add([song]) return song except (OSError, IOError, GLib.GError), exc: return str(exc).decode(const.ENCODING, 'replace') def delete(self, songlist, song): try: path = song['~filename'] dir = os.path.dirname(path) os.unlink(path) if self['unclutter']: files = glob(dir + '/*') if len(files) == 1 and os.path.isfile(files[0]) and \ os.path.basename(files[0]) == 'folder.jpg': os.unlink(files[0]) try: os.removedirs(os.path.dirname(path)) except OSError: pass return True except (OSError, IOError), exc: return str(exc).decode(const.ENCODING, 'replace') def cleanup(self, wlb, action): self.__save_library() return True def close(self): if self.__library: self.__library.destroy() def __load_library(self): if self.__library is None: self.__library = SongFileLibrary(self.__library_name) if os.path.isfile(self.__library_path): self.__library.load(self.__library_path) def __save_library(self): self.__library.save(self.__library_path) devices = [StorageDevice] �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/devices/ipod.py�����������������������������������������������������������0000644�0001750�0001750�00000035166�12173213426�020665� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2006 Markus Koller # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import time from gi.repository import Gtk from quodlibet import const from quodlibet import qltk from quodlibet import util from quodlibet.devices._base import Device from quodlibet.formats._audio import AudioFile # Wraps an itdb_track from libgpod in an AudioFile instance class IPodSong(AudioFile): is_file = False def __init__(self, track): super(IPodSong, self).__init__() self.sanitize(gpod.itdb_filename_on_ipod(track)) # String keys for key in ['artist', 'album', 'title', 'genre', 'grouping', 'composer', 'albumartist']: # albumartist since libgpod-0.4.2 value = getattr(track, key, None) if value: self[key] = util.decode(value) # Sort keys (since libgpod-0.5.0) for key in ['artist', 'album', 'albumartist']: value = getattr(track, 'sort_' + key, None) if value: self[key + 'sort'] = util.decode(value) # Numeric keys for key in ['bitrate', 'playcount']: value = getattr(track, key) if value: self['~#' + key] = value try: self["date"] = unicode(track.year) except AttributeError: pass if track.cds: self["discnumber"] = u"%d/%d" % (track.cd_nr, track.cds) elif track.cd_nr: self["discnumber"] = u"%d" % track.cd_nr if track.tracks: self['tracknumber'] = u"%d/%d" % (track.track_nr, track.tracks) elif track.track_nr: self['tracknumber'] = u"%d" % track.track_nr for key, value in { '~#rating': min(1.0, track.rating / 100.0), '~#length': track.tracklen / 1000.0, }.items(): if value != 0: self[key] = value self['~format'] = u"iPod: %s" % track.filetype # Disable all tag editing def can_change(self, k=None): return [] class IPodDevice(Device): icon = 'multimedia-player-ipod' protocol = 'ipod' ordered = True defaults = { 'gain': 0.0, 'covers': True, 'all_tags': False, 'title_version': False, 'album_part': False, } __itdb = None __covers = [] def __init__(self, backend_id, device_id): super(IPodDevice, self).__init__(backend_id, device_id) #In case we can't initialize the iPod and there is a rockbox directory, #the device is probably a rockboxed iPod. #FIXME: what if the device isn't connected? self.__itdb = gpod.itdb_parse(self.mountpoint, None) rockbox_dir = os.path.join(self.mountpoint, ".rockbox") if self.__itdb is None and os.path.isdir(rockbox_dir): raise TypeError def Properties(self): props = [] gain = Gtk.SpinButton() gain.set_range(-20, 20) gain.set_digits(1) gain.set_increments(0.1, 1) gain.set_value(float(self['gain'])) props.append((_("_Volume Gain (dB):"), gain, 'gain')) for key, label in [ ['covers', _("Copy _album covers")], ['all_tags', _("Combine tags with _multiple values")], ['title_version', _("Title includes _version")], ['album_part', _("Album includes _disc subtitle")], ]: check = Gtk.CheckButton() check.set_active(self[key]) props.append((label, check, key)) if self.is_connected(): details = self.__get_details() if len(details) > 0: props.append((None, None, None)) if 'model' in details: props.append((_("Model:"), details['model'], None)) if 'space' in details: props.append((_("Capacity:"), details['space'], None)) if 'firmware' in details: props.append((_("Firmware:"), details['firmware'], None)) return props def __get_details(self): d = {} sysinfo = os.path.join(self.mountpoint, 'iPod_Control', 'Device', 'SysInfo') if os.path.isfile(sysinfo): file = open(sysinfo) while True: line = file.readline() if not line: break parts = line.split() if len(parts) < 2: continue parts[0] = parts[0].rstrip(":") if parts[0] == "ModelNumStr" and parts[1] in self.__models: d['model'], d['space'] = self.__models[parts[1]] elif parts[0] == "visibleBuildID": d['firmware'] = parts[2].strip("()") file.close() else: # Assume an iPod shuffle info = os.statvfs(self.mountpoint) space = info.f_bsize * info.f_blocks if space > 512 * 1024 * 1024: model = 'M9725' else: model = 'M9724' if model in self.__models: d['model'], d['space'] = self.__models[model] return d def list(self, wlb): if self.__load_db() is None: return [] songs = [] orphaned = False for track in gpod.sw_get_tracks(self.__itdb): filename = gpod.itdb_filename_on_ipod(track) if filename: songs.append(IPodSong(track)) else: # Remove orphaned iTunesDB track orphaned = True print_w(_("Removing orphaned iPod track")) self.__remove_track(track) if orphaned: self.__save_db() self.__close_db() return songs def copy(self, songlist, song): if self.__load_db() is None: return False track = gpod.itdb_track_new() # All values should be utf-8 encoded strings # Filepaths should be encoded with the fs encoding # Either combine tags with comma, or only take the first value if self['all_tags']: tag = song.comma else: tag = lambda key: (song.list(key) or ('',))[0] title = tag('title') if self['title_version'] and song('version'): title = " - ".join([title, song('version')]) track.title = util.encode(title) album = tag('album') if self['album_part'] and song('discsubtitle'): album = " - ".join([album, song('discsubtitle')]) track.album = util.encode(album) # String keys for key in ['artist', 'genre', 'grouping', 'composer', 'albumartist']: if hasattr(track, key): # albumartist since libgpod-0.4.2 setattr(track, key, util.encode(tag(key))) # Sort keys (since libgpod-0.5.0) for key in ['artist', 'album', 'albumartist']: if hasattr(track, 'sort_' + key): setattr(track, 'sort_' + key, util.encode(tag(key + 'sort'))) # Numeric keys for key in ['bitrate', 'playcount', 'year']: try: setattr(track, key, int(song('~#' + key))) except ValueError: continue # Numeric keys where the names differ for key, value in { 'cd_nr': song('~#disc'), 'cds': song('~#discs'), 'rating': min(100, song('~#rating') * 100), 'time_added': self.__mactime(time.time()), 'time_modified': self.__mactime(util.mtime(song('~filename'))), 'track_nr': song('~#track'), 'tracklen': song('~#length') * 1000, 'tracks': song('~#tracks'), 'size': util.size(song('~filename')), 'soundcheck': self.__soundcheck(song), }.items(): try: setattr(track, key, int(value)) except ValueError: continue track.filetype = song('~format') track.comment = util.encode(util.fsdecode(song('~filename'))) # Associate a cover with the track if self['covers']: cover = song.find_cover() if cover: # libgpod will copy the file later when the iTunesDB # is saved, so we have to keep a reference around in # case the cover is a temporary file. self.__covers.append(cover) gpod.itdb_track_set_thumbnails( track, util.fsencode(cover.name)) # Add the track to the master playlist gpod.itdb_track_add(self.__itdb, track, -1) master = gpod.itdb_playlist_mpl(self.__itdb) gpod.itdb_playlist_add_track(master, track, -1) # Copy the actual file if gpod.itdb_cp_track_to_ipod(track, song['~filename'], None) == 1: return IPodSong(track) else: return False def delete(self, songlist, song): if self.__load_db() is None: return False try: for track in gpod.sw_get_tracks(self.__itdb): if gpod.itdb_filename_on_ipod(track) == song['~filename']: os.remove(song['~filename']) self.__remove_track(track) return True else: return False except IOError, exc: return str(exc).decode(const.ENCODING, 'replace') def cleanup(self, wlb, action): try: wlb.set_text("<b>Saving iPod database...</b>") # This can take a while, so update the UI first while Gtk.events_pending(): Gtk.main_iteration() if not self.__save_db(): wlb.set_text(_("Unable to save iPod database")) return False return True finally: self.__close_db() self.__covers = [] def __load_db(self): if self.__itdb: return self.__itdb self.__itdb = gpod.itdb_parse(self.mountpoint, None) if not self.__itdb and self.is_connected() and qltk.ConfirmAction( None, _("Uninitialized iPod"), _("Do you want to create an empty database on this iPod?") ).run(): self.__itdb = self.__create_db() return self.__itdb def __save_db(self): if self.__itdb is None: return True if gpod.itdb_write(self.__itdb, None) == 1 and \ gpod.itdb_shuffle_write(self.__itdb, None) == 1: return True else: return False def __create_db(self): db = gpod.itdb_new() gpod.itdb_set_mountpoint(db, self.mountpoint) master = gpod.itdb_playlist_new('iPod', False) gpod.itdb_playlist_set_mpl(master) gpod.itdb_playlist_add(db, master, 0) return db def __close_db(self): if self.__itdb is not None: gpod.itdb_free(self.__itdb) self.__itdb = None def __remove_track(self, track): master = gpod.itdb_playlist_mpl(self.__itdb) gpod.itdb_playlist_remove_track(master, track) gpod.itdb_track_remove(track) def __mactime(self, time): time = int(time) if time == 0: return time else: # libgpod >= 0.5.0 doesn't use mac-type timestamps anymore. check # if we're using a newer version by looking for a renamed constant. if hasattr(gpod, 'ITDB_SPL_STRING_MAXLEN'): offset = 0 else: offset = 2082844800 return time + offset # Convert ReplayGain values to Apple Soundcheck values def __soundcheck(self, song): if 'replaygain_album_gain' in song: db = float(song['replaygain_album_gain'].split()[0]) elif 'replaygain_track_gain' in song: db = float(song['replaygain_track_gain'].split()[0]) else: db = 0.0 soundcheck = int(round(1000 * 10. ** ( -0.1 * (db + float(self['gain']))))) return soundcheck # This list is taken from # http://en.wikipedia.org/wiki/List_of_iPod_model_numbers __models = { # First Generation 'M8513': ('iPod', '5GB'), 'M8541': ('iPod', '5GB'), 'M8697': ('iPod', '5GB'), 'M8709': ('iPod', '10GB'), # Second Generation 'M8737': ('iPod', '10GB'), 'M8740': ('iPod', '10GB'), 'M8738': ('iPod', '20GB'), 'M8741': ('iPod', '20GB'), # Third Generation 'M8976': ('iPod', '10GB'), 'M8946': ('iPod', '15GB'), 'M9460': ('iPod', '15GB'), 'M9244': ('iPod', '20GB'), 'M8948': ('iPod', '30GB'), 'M9245': ('iPod', '40GB'), # Fourth Generation 'M9282': ('iPod', '20GB'), 'M9787': ('iPod (U2 edition)', '20GB'), 'M9268': ('iPod', '40GB'), # Photo / Fourth Generation 'MA079': ('iPod photo', '20GB'), 'MA127': ('iPod photo (U2 edition)', '20GB'), 'M9829': ('iPod photo', '30GB'), 'M9585': ('iPod photo', '40GB'), 'M9586': ('iPod photo', '60GB'), 'M9830': ('iPod photo', '60GB'), # Shuffle / Fourth Generation 'M9724': ('iPod shuffle', '512MB'), 'M9725': ('iPod shuffle', '1GB'), 'MA133': ('iPod shuffle', '512MB'), # Video / Fifth Generation 'MA002': ('iPod video white', '30GB'), 'MA146': ('iPod video black', '30GB'), 'MA003': ('iPod video white', '60GB'), 'MA147': ('iPod video black', '60GB'), # Nano / Fifth Generation 'MA350': ('iPod nano white', '1GB'), 'MA352': ('iPod nano black', '1GB'), 'MA004': ('iPod nano white', '2GB'), 'MA099': ('iPod nano black', '2GB'), 'MA005': ('iPod nano white', '4GB'), 'MA107': ('iPod nano black', '4GB'), # First Generation Mini 'M9160': ('iPod mini silver', '4GB'), 'M9436': ('iPod mini blue', '4GB'), 'M9435': ('iPod mini pink', '4GB'), 'M9434': ('iPod mini green', '4GB'), 'M9437': ('iPod mini gold', '4GB'), # Second Generation Mini 'M9800': ('iPod mini silver', '4GB'), 'M9802': ('iPod mini blue', '4GB'), 'M9804': ('iPod mini pink', '4GB'), 'M9806': ('iPod mini green', '4GB'), 'M9801': ('iPod mini silver', '6GB'), 'M9803': ('iPod mini blue', '6GB'), 'M9805': ('iPod mini pink', '6GB'), 'M9807': ('iPod mini green', '6GB'), } try: from quodlibet.devices import _gpod as gpod except ImportError: print_w(_("Could not find libgpod, iPod support disabled.")) devices = [] else: devices = [IPodDevice] ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/devices/__init__.py�������������������������������������������������������0000644�0001750�0001750�00000031427�12173213426�021465� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2006 Markus Koller # 2012 Christoph Reiter, Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import ConfigParser from os.path import dirname, basename from quodlibet.util.dprint import print_d, print_w from gi.repository import GObject try: import dbus except ImportError: print_w(_("Could not import %s, which is needed for " "device support.") % "dbus-python") dbus = None from quodlibet import const from quodlibet import util from quodlibet.devices import _udev as udev from quodlibet.util.modulescanner import load_dir_modules devices = [] def init_devices(): global devices load_pyc = os.name == 'nt' modules = load_dir_modules(dirname(__file__), package=__package__, load_compiled=load_pyc) for mod in modules: try: devices.extend(mod.devices) except AttributeError: print_w("%r doesn't contain any devices." % mod.__name__) devices.sort() init_devices() DEVICES = os.path.join(const.USERDIR, "devices") config = ConfigParser.RawConfigParser() config.read(DEVICES) def write(): f = file(DEVICES, 'w') config.write(f) f.close() # Return a constructor for a device given by a string def get(name): try: return devices[[d.__name__ for d in devices].index(name)] except ValueError: return None # Return a constructor for a device given by the supported # access method protocols def get_by_protocols(protocols): # Try the storage protocol last if 'storage' in protocols: protocols.remove('storage') protocols.append('storage') for protocol in protocols: try: return devices[[d.protocol for d in devices].index(protocol)] except ValueError: pass return None class DeviceManager(GObject.GObject): SIG_PYOBJECT = (GObject.SignalFlags.RUN_LAST, None, (object,)) __gsignals__ = { 'removed': SIG_PYOBJECT, 'added': SIG_PYOBJECT, } _system_bus = None def __init__(self, bus_name): super(DeviceManager, self).__init__() self._system_bus = dbus.SystemBus() # raises DBusException if no owner is active or can be activated self._system_bus.activate_name_owner(bus_name) def discover(self): """Push out all existing devices""" raise NotImplementedError def get_name(self, udi): """A nice looking name like 'vendor' 'modelname' """ raise NotImplementedError def eject(self, udi): """Eject device""" raise NotImplementedError def get_block_device(self, udi): """/dev/sdX""" raise NotImplementedError def get_mountpoint(self, path): """/media/myplayer""" raise NotImplementedError def create_device(self, backend_id, device_id, protocols): """backend_id is the string that gets passed to the backend so it can identify the device. device_id should be a something including the device serial (so it's unique) and maybe the model name.""" device = None for prots in (protocols, ['storage']): klass = get_by_protocols(prots) if klass is None: break try: device = klass(backend_id, device_id) except TypeError: pass # rockboxed iPod else: break if device is None: print_w(_("%r is not a supported device.") % device_id) return device def get_device_from_path(udev_ctx, path): """A dict of device attributes for the given device path""" path = path.encode("ascii") enum = udev.UdevEnumerate.new(udev_ctx) if not enum: raise EnvironmentError # only match the device we want if enum.add_match_property("DEVNAME", path): enum.unref() raise EnvironmentError # search for it if enum.scan_devices(): enum.unref() raise EnvironmentError # take the first entry entry = enum.get_list_entry() if not entry: enum.unref() raise EnvironmentError device = udev.UdevDevice.new_from_syspath(udev_ctx, entry.get_name()) if not device: enum.unref() raise EnvironmentError entry = device.get_properties_list_entry() if not entry: enum.unref() device.unref() raise EnvironmentError attrs = {} for e in entry: name = e.get_name() value = e.get_value() attrs[name] = value.decode("string-escape") enum.unref() device.unref() return attrs class DKD(DeviceManager): __interface = None __udev = None def __init__(self, dkd_name): self.__bus = ".".join(dkd_name) self.__path = "/".join(dkd_name) super(DKD, self).__init__("org.freedesktop.%s" % self.__bus) error = False try: udev.init() except OSError: print_w(_("%s: Could not find 'libudev'.") % self.__bus) error = True else: self.__udev = udev.Udev.new() if self.__get_mpi_dir() is None: print_w(_("%s: Could not find %s.") % (self.__bus, "media-player-info")) error = True if error: raise LookupError interface = "org.freedesktop.%s" % self.__bus path = "/org/freedesktop/%s" % self.__path obj = self._system_bus.get_object(interface, path) self.__interface = dbus.Interface(obj, interface) self.__devices = {} self.__interface.connect_to_signal('DeviceAdded', self.__device_added) self.__interface.connect_to_signal('DeviceRemoved', self.__device_removed) def __get_dev_prop_interface(self, path): interface = "org.freedesktop.%s" % self.__bus obj = self._system_bus.get_object(interface, path) return dbus.Interface(obj, "org.freedesktop.DBus.Properties") def __get_dev_interface(self, path): interface = "org.freedesktop.%s" % self.__bus obj = self._system_bus.get_object(interface, path) return dbus.Interface(obj, "org.freedesktop.%s.Device" % self.__bus) def __get_dev_property(self, interface, property): return interface.Get("org.freedesktop.DBus.Properties", property) def __get_device_id(self, path): """A unique device id""" prop_if = self.__get_dev_prop_interface(path) dev_id = self.__get_dev_property(prop_if, 'device-file-by-id')[0] dev_id = basename(dev_id) return dev_id.replace("-", "_").replace(":", "_") def __device_added(self, path): dev = self.__build_dev(path) if dev: self.__devices[path] = dev self.emit("added", dev) def __device_removed(self, path): # only forward removed events if we have handled the device if path not in self.__devices: return self.emit("removed", path) dev = self.__devices[path] dev.close() def discover(self): paths = self.__interface.EnumerateDevices() for path in paths: self.__device_added(path) def __get_parent_disk_path(self, path): prop_if = self.__get_dev_prop_interface(path) prop_get = self.__get_dev_property if not prop_get(prop_if, "device-is-partition"): return path return prop_get(prop_if, "partition-slave") def eject(self, path): dev_if = self.__get_dev_interface(path) parent_path = self.__get_parent_disk_path(path) parent_if = self.__get_dev_interface(parent_path) try: dev_if.FilesystemUnmount([]) parent_if.DriveEject([]) return True except dbus.DBusException: return False def get_name(self, path): prop_if = self.__get_dev_prop_interface(path) prop_get = self.__get_dev_property num = "" if prop_get(prop_if, 'device-is-partition'): num = str(prop_get(prop_if, 'partition-number')) parent_path = prop_get(prop_if, 'partition-slave') prop_if = self.__get_dev_prop_interface(parent_path) vendor = prop_get(prop_if, 'drive-vendor') name = prop_get(prop_if, 'drive-model') return " ".join([vendor, name, num]).strip() def get_mountpoint(self, path): """/media/myplayer""" prop_if = self.__get_dev_prop_interface(path) prop_get = self.__get_dev_property if prop_get(prop_if, 'device-is-mounted'): return str(prop_get(prop_if, 'device-mount-paths')[0]) return '' def get_block_device(self, path): """/dev/sda for example""" prop_if = self.__get_dev_prop_interface(path) return str(self.__get_dev_property(prop_if, 'device-file')) def __get_media_player_id(self, devpath): """DKD is for high-level device stuff. The info if the device is a media player and what protocol/formats it supports can only be retrieved through libudev""" try: dev = get_device_from_path(self.__udev, devpath) except Exception: print_w("Failed to retrieve udev properties for %r" % devpath) util.print_exc() return try: return dev["ID_MEDIA_PLAYER"] except KeyError: return None def __get_mpi_dir(self): for dir in util.xdg_get_system_data_dirs(): path = os.path.join(dir, "media-player-info") if os.path.isdir(path): return path def __get_mpi_file(self, dir, mplayer_id): """Returns a SafeConfigParser instance of the mpi file or None. MPI files are INI like files usually located in /usr/local/media-player-info/*.mpi""" f = os.path.join(dir, mplayer_id + ".mpi") if os.path.isfile(f): parser = ConfigParser.SafeConfigParser() read = parser.read(f) if read: return parser def __build_dev(self, path): """Return the right device instance by determining the supported AccessProtocol""" prop_if = self.__get_dev_prop_interface(path) prop_get = self.__get_dev_property #filter out useless devices if not (prop_get(prop_if, 'device-is-drive') or prop_get(prop_if, 'device-is-partition')) \ or prop_get(prop_if, 'device-is-system-internal') \ or prop_get(prop_if, 'device-is-partition-table') \ or not prop_get(prop_if, 'device-is-media-available'): return #filter out empty partitions (issue 422) #http://www.win.tue.nl/~aeb/partitions/partition_types-1.html if prop_get(prop_if, 'device-is-partition') and \ prop_get(prop_if, 'partition-scheme') == "mbr" and \ int(prop_get(prop_if, 'partition-type'), 16) == 0: return #ask libudev if the device is a media player devpath = self.get_block_device(path) mplayer_id = self.__get_media_player_id(devpath) if mplayer_id is None: return #look up the supported protocols in the mpi files protocols = [] mpi_dir = self.__get_mpi_dir() config = self.__get_mpi_file(mpi_dir, mplayer_id) if config is not None: try: prots = config.get("Device", "AccessProtocol") except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): pass else: protocols = prots.split(";") device_id = self.__get_device_id(path) dev = self.create_device(path, device_id, protocols) icon = prop_get(prop_if, 'device-presentation-icon-name') if dev and icon: dev.icon = icon return dev def init(): global device_manager if not dbus: return device_manager = None print_d(_("Initializing device backend.")) try_text = _("Trying '%s'") #DKD maintainers will change the naming of dbus, app stuff #in january 2010 or so (already changed in trunk), so try both if device_manager is None: print_d(try_text % "DeviceKit Disks") try: device_manager = DKD(("DeviceKit", "Disks")) except (LookupError, dbus.DBusException): pass if device_manager is None: print_d(try_text % "UDisks") try: device_manager = DKD(("UDisks",)) except (LookupError, dbus.DBusException): pass if device_manager is None: print_w(_("Couldn't connect to a device backend.")) else: print_d(_("Device backend initialized.")) return device_manager �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/devices/_base.py����������������������������������������������������������0000644�0001750�0001750�00000012336�12161032160�020764� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2006 Markus Koller # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import quodlibet.devices class Device(dict): # The default icon for this device. icon = 'multimedia-player' # The used HAL access method protocol for this device, as defined in # 'portable_audio_player.access_method.protocols' protocol = '' # The UDI of this device udi = None #Backend device id bid = None # Set this to a hash with default values for user-configurable # properties. defaults = None def __init__(self, backend_id, device_id): device_manager = quodlibet.devices.device_manager self.udi = udi = device_id self.bid = bid = backend_id # Load default properties. if self.defaults: self.update(self.defaults) # Load configured properties. if quodlibet.devices.config.has_section(udi): for key in quodlibet.devices.config.options(udi): t = type(self.defaults.get(key)) if t == int: value = quodlibet.devices.config.getint(udi, key) elif t == float: value = quodlibet.devices.config.getfloat(udi, key) elif t == bool: value = quodlibet.devices.config.getboolean(udi, key) else: value = quodlibet.devices.config.get(udi, key) dict.__setitem__(self, key, value) # Sometimes a device shows up twice. The UDI identifies the right one. dict.__setitem__(self, 'udi', str(udi)) # Set a sensible name if none is set. if "name" not in self: self['name'] = device_manager.get_name(bid) or _("Unknown Device") # Store all changed properties in the ConfigParser. def __setitem__(self, key, value): if not quodlibet.devices.config.has_section(self.udi): quodlibet.devices.config.add_section(self.udi) quodlibet.devices.config.set(self.udi, key, value) dict.__setitem__(self, key, value) # Should return True if the device is connected. def is_connected(self): return os.path.ismount(self.mountpoint) # Eject the device, should return True on success. If the eject # failed, it should return False or a string describing the error. # If the device is not ejectable, set it to None. def eject(self): return quodlibet.devices.device_manager.eject(self.bid) # Returns a tuple with the size of this device and the free space. def get_space(self): info = os.statvfs(self.mountpoint) space = info.f_bsize * info.f_blocks free = info.f_bsize * info.f_bavail return (space, free) def get_mountpoint(self): return quodlibet.devices.device_manager.get_mountpoint(self.bid) mountpoint = property(get_mountpoint) def get_block_device(self): return quodlibet.devices.device_manager.get_block_device(self.bid) dev = property(get_block_device) # Returns a list of AudioFile instances representing the songs # on this device. The WaitLoadBar can be used to display messages. def list(self, wlb): return [] # Whether the order of the files returned by list() is meaningful. # If it is, refreshing will reset the song list sort order. ordered = False # Copies a song to the device. This will be called once for each # song. If the copy was successful, it should return an AudioFile # instance, which will be added to the songlist. If the copy # failed, it should return False or a string describing the error. def copy(self, songlist, song): raise NotImplementedError # Deletes a song from the device. This will be called once for # each song. This is not needed if the device is file-based, # i.e. the songs returned by list() have is_file set to True. If # the delete was successful, it should return True. If the delete # failed, it should return False or a string describing the error. # # def delete(self, songlist, song): ... return True delete = None # This will be called once after all songs have been # copied/deleted. Should return True if no errors occured, or # else False. The WaitLoadBar can be used to display messages. # # def cleanup(self, wlb, action='copy'|'delete'): ... cleanup = None # Returns a list of tuples for device-specific settings which # should be displayed in the properties dialog. # # The first value should be a string and will be used as a title. # Include an underline for changeable settings. # # The second value should be an appropriate gtk.Widget for the # setting. It can also be a string, in which case it will be # displayed with a Label and won't be changeable. # # The third value is the name of the object's key which should be # set when the widget is changed. If the second value is a string, # this will be ignored. # # Separators can be added by passing (None, None, None). def Properties(self): return [] def close(self): pass ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/devices/_udev.py����������������������������������������������������������0000644�0001750�0001750�00000017014�12173202073�021020� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation # Basic ctypes wrapper for libudev. # You have to call init() to make class methods available. # Versions: # The first API stable libudev version is 143. # The first API incompatible change (version bump) was introduced in 183 # http://cgit.freedesktop.org/systemd/systemd/commit/?id=20bbd54f603994a3 from ctypes import POINTER, Structure, cdll from ctypes import c_longlong, c_int, c_char_p, c_void_p, c_long, c_char c_void = None dev_t = c_long _classes = [] def init(): """Initialise the bindings. Raises OSError if udev isn't installed""" global _classes try: udevlib = cdll.LoadLibrary("libudev.so.1") version = 1 except OSError: udevlib = cdll.LoadLibrary("libudev.so.0") version = 0 for info in _classes: _wrap_class(udevlib, version, *info) def _register_class(base, ptr, prefix, methods): global _classes _classes.append((base, ptr, prefix, methods)) def _wrap_class(lib, version, base, ptr, prefix, methods): for method in methods: name, ret, args = method[:3] if len(method) > 3 and method[-1] != version: continue try: func = getattr(lib, prefix + name) except AttributeError: # don't fail on missing ones, just in case.. print_d("missing libudev symbol: %r" % (prefix + name)) continue func.argtypes = args func.restype = ret def add_self(f, check_null=False): def check(*args): # the first arg is the pointer to the struct, check for # null pointers before passing it... args[0].contents return f(*args) return check if args and args[0] == ptr: setattr(ptr, name, add_self(func)) else: setattr(base, name, func) class Udev(Structure): pass class UdevPtr(POINTER(Udev)): _type_ = Udev _register_class(Udev, UdevPtr, "udev_", [ ("ref", UdevPtr, [UdevPtr]), ("unref", c_void, [UdevPtr], 0), ("unref", UdevPtr, [UdevPtr], 1), ("new", UdevPtr, []), #("set_log_fn", None, ... ("get_log_priority", c_int, [UdevPtr]), ("set_log_priority", c_void, [UdevPtr, c_int]), ("get_sys_path", c_char_p, [UdevPtr], 0), ("get_dev_path", c_char_p, [UdevPtr], 0), ("get_userdata", c_void_p, [UdevPtr]), ("set_userdata", c_void, [UdevPtr, c_void_p]), ]) class _UdevListIterator(object): def __init__(self, start_entry): self.__current = start_entry def __iter__(self): return self def next(self): next_ = self.__current.get_next() if next_: self.__current = next_ return next_ raise StopIteration class UdevListEntry(Structure): pass class UdevListEntryPtr(POINTER(UdevListEntry)): _type_ = UdevListEntry def __iter__(self): return _UdevListIterator(self) _register_class(UdevListEntry, UdevListEntryPtr, "udev_list_entry_", [ ("get_next", UdevListEntryPtr, [UdevListEntryPtr]), ("get_by_name", UdevListEntryPtr, [UdevListEntryPtr, c_char_p]), ("get_name", c_char_p, [UdevListEntryPtr]), ("get_value", c_char_p, [UdevListEntryPtr]), ]) class UdevDevice(Structure): pass class UdevDevicePtr(POINTER(UdevDevice)): _type_ = UdevDevice _register_class(UdevDevice, UdevDevicePtr, "udev_device_", [ ("ref", UdevDevicePtr, [UdevDevicePtr]), ("unref", c_void, [UdevDevicePtr], 0), ("unref", UdevDevicePtr, [UdevDevicePtr], 1), ("get_udev", UdevPtr, [UdevDevicePtr]), ("new_from_syspath", UdevDevicePtr, [UdevPtr, c_char_p]), ("new_from_devnum", UdevDevicePtr, [UdevPtr, c_char, dev_t]), ("new_from_subsystem_sysname", UdevDevicePtr, [UdevPtr, c_char_p, c_char_p]), ("get_parent", UdevDevicePtr, [UdevDevicePtr]), ("get_parent_with_subsystem_devtype", UdevDevicePtr, [UdevDevicePtr, c_char_p, c_char_p]), ("get_devpath", c_char_p, [UdevDevicePtr]), ("get_subsystem", c_char_p, [UdevDevicePtr]), ("get_devtype", c_char_p, [UdevDevicePtr]), ("get_syspath", c_char_p, [UdevDevicePtr]), ("get_sysname", c_char_p, [UdevDevicePtr]), ("get_sysnum", c_char_p, [UdevDevicePtr]), ("get_devnode", c_char_p, [UdevDevicePtr]), ("get_devlinks_list_entry", UdevListEntryPtr, [UdevDevicePtr]), ("get_properties_list_entry", UdevListEntryPtr, [UdevDevicePtr]), ("get_property_value", c_char_p, [UdevDevicePtr, c_char_p]), ("get_driver", c_char_p, [UdevDevicePtr]), ("get_devnum", dev_t, [UdevDevicePtr]), ("get_action", c_char_p, [UdevDevicePtr]), ("get_sysattr_value", c_char_p, [UdevDevicePtr, c_char_p]), ("get_seqnum", c_longlong, [UdevDevicePtr]), ]) class UdevMonitor(Structure): pass class UdevMonitorPtr(POINTER(UdevMonitor)): _type_ = UdevMonitor _register_class(UdevMonitor, UdevMonitorPtr, "udev_monitor_", [ ("ref", UdevMonitorPtr, [UdevMonitorPtr]), ("unref", c_void, [UdevMonitorPtr], 0), ("unref", UdevMonitorPtr, [UdevMonitorPtr], 1), ("get_udev", UdevPtr, [UdevMonitorPtr]), ("new_from_netlink", UdevMonitorPtr, [UdevPtr, c_char_p]), ("new_from_socket", UdevMonitorPtr, [UdevPtr, c_char_p], 0), ("enable_receiving", c_int, [UdevMonitorPtr]), ("get_fd", c_int, [UdevMonitorPtr]), ("receive_device", UdevDevicePtr, [UdevMonitorPtr]), ("filter_add_match_subsystem_devtype", c_int, [UdevMonitorPtr, c_char_p, c_char_p]), ("filter_update", c_int, [UdevMonitorPtr]), ("filter_remove", c_int, [UdevMonitorPtr]), ]) class UdevEnumerate(Structure): pass class UdevEnumeratePtr(POINTER(UdevEnumerate)): _type_ = UdevEnumerate _register_class(UdevEnumerate, UdevEnumeratePtr, "udev_enumerate_", [ ("ref", UdevEnumeratePtr, [UdevEnumeratePtr]), ("unref", c_void, [UdevEnumeratePtr], 0), ("unref", UdevEnumeratePtr, [UdevEnumeratePtr], 1), ("get_udev", UdevPtr, [UdevEnumeratePtr]), ("new", UdevEnumeratePtr, [UdevPtr]), ("add_match_subsystem", c_int, [UdevEnumeratePtr, c_char_p]), ("add_nomatch_subsystem", c_int, [UdevEnumeratePtr, c_char_p]), ("add_match_sysattr", c_int, [UdevEnumeratePtr, c_char_p, c_char_p]), ("add_nomatch_sysattr", c_int, [UdevEnumeratePtr, c_char_p, c_char_p]), ("add_match_property", c_int, [UdevEnumeratePtr, c_char_p, c_char_p]), ("add_match_sysname", c_int, [UdevEnumeratePtr, c_char_p]), ("add_syspath", c_int, [UdevEnumeratePtr, c_char_p]), ("scan_devices", c_int, [UdevEnumeratePtr]), ("scan_subsystems", c_int, [UdevEnumeratePtr]), ("get_list_entry", UdevListEntryPtr, [UdevEnumeratePtr]), ]) class UdevQueue(Structure): pass class UdevQueuePtr(POINTER(UdevQueue)): _type_ = UdevQueue _register_class(UdevQueue, UdevQueuePtr, "udev_queue_", [ ("ref", UdevQueuePtr, [UdevQueuePtr]), ("unref", c_void, [UdevQueuePtr], 0), ("unref", UdevQueuePtr, [UdevQueuePtr], 1), ("get_udev", UdevPtr, [UdevQueuePtr]), ("new", UdevQueuePtr, [UdevPtr]), ("get_udev_is_active", c_int, [UdevQueuePtr]), ("get_queue_is_empty", c_int, [UdevQueuePtr]), ("get_seqnum_is_finished", c_int, [UdevQueuePtr, c_long]), ("get_seqnum_sequence_is_finished", c_int, [UdevQueuePtr, c_long, c_long]), ("get_queued_list_entry", UdevListEntryPtr, [UdevQueuePtr]), ("get_kernel_seqnum", c_longlong, [UdevQueuePtr]), ("get_udev_seqnum", c_longlong, [UdevQueuePtr]), ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/���������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�016673� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/maskedbox.py���������������������������������������������������������0000644�0001750�0001750�00000010745�12173213426�021234� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, Pango from quodlibet import util from quodlibet import qltk from quodlibet.qltk.views import RCMHintedTreeView class ConfirmMaskedRemoval(qltk.Message): def __init__(self, parent): title = _("Are you sure you want to remove all songs?") description = _("The selected songs will be removed from the library.") super(ConfirmMaskedRemoval, self).__init__( Gtk.MessageType.WARNING, parent, title, description, Gtk.ButtonsType.NONE) self.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_DELETE, Gtk.ResponseType.YES) class MaskedBox(Gtk.HBox): def __init__(self, library): super(MaskedBox, self).__init__(spacing=6) self.model = model = Gtk.ListStore(object) view = RCMHintedTreeView(model) view.set_fixed_height_mode(True) view.set_headers_visible(False) self.view = view menu = Gtk.Menu() unhide_item = qltk.MenuItem(_("Unhide"), Gtk.STOCK_ADD) unhide_item.connect_object('activate', self.__unhide, view, library) menu.append(unhide_item) remove_item = Gtk.ImageMenuItem(Gtk.STOCK_REMOVE, use_stock=True) remove_item.connect_object('activate', self.__remove, view, library) menu.append(remove_item) menu.show_all() view.connect('popup-menu', self.__popup, menu) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.IN) sw.add(view) sw.set_size_request(-1, max(sw.size_request().height, 80)) def cdf(column, cell, model, iter, data): row = model[iter] cell.set_property('text', util.fsdecode(row[0])) def cdf_count(column, cell, model, iter, data): mount = model[iter][0] song_count = len(library.get_masked(mount)) cell.set_property('text', _("%(song_count)d songs") % {"song_count": song_count}) column = Gtk.TreeViewColumn(None) column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) render = Gtk.CellRendererText() render.set_property('ellipsize', Pango.EllipsizeMode.END) column.pack_start(render, True) column.set_cell_data_func(render, cdf) render = Gtk.CellRendererText() render.props.sensitive = False column.pack_start(render, False) column.set_cell_data_func(render, cdf_count) view.append_column(column) unhide = qltk.Button(_("Unhide"), Gtk.STOCK_ADD) unhide.connect_object("clicked", self.__unhide, view, library) remove = Gtk.Button(stock=Gtk.STOCK_REMOVE) selection = view.get_selection() selection.set_mode(Gtk.SelectionMode.MULTIPLE) selection.connect("changed", self.__select_changed, remove, unhide) selection.emit("changed") remove.connect_object("clicked", self.__remove, view, library) vbox = Gtk.VBox(spacing=6) vbox.pack_start(unhide, False, True, 0) vbox.pack_start(remove, False, True, 0) self.pack_start(sw, True, True, 0) self.pack_start(vbox, False, True, 0) self.show_all() for path in library.masked_mount_points: model.append(row=[path]) if not len(model): self.set_sensitive(False) def __popup(self, view, menu): return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def __unhide(self, view, library): selection = view.get_selection() model, paths = selection.get_selected_rows() for path in paths: library.unmask(model[path][0]) view.remove_selection() def __select_changed(self, selection, *buttons): active = bool(selection.count_selected_rows()) for button in buttons: button.set_sensitive(active) def __remove(self, view, library): dialog = ConfirmMaskedRemoval(self) response = dialog.run() if response == Gtk.ResponseType.YES: selection = view.get_selection() model, paths = selection.get_selected_rows() for path in paths: library.remove_masked(model[path][0]) view.remove_selection() ���������������������������quodlibet-3.0.2/quodlibet/qltk/browser.py�����������������������������������������������������������0000644�0001750�0001750�00000010700�12173213426�020731� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig, Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, Pango from quodlibet import config from quodlibet import util from quodlibet.qltk.songlist import SongList from quodlibet.qltk.x import Window, RPaned from quodlibet.qltk.window import PersistentWindowMixin from quodlibet.util.library import background_filter class LibraryBrowser(Window, PersistentWindowMixin): def __init__(self, Kind, library): super(LibraryBrowser, self).__init__(dialog=False) self.set_default_size(600, 400) self.enable_window_tracking("browser_" + Kind.__name__) self.set_border_width(6) self.set_title(Kind.name + " - Quod Libet") self.add(Gtk.VBox(spacing=6)) view = SongList(library, update=True) view.info.connect("changed", self.__set_time) self.add_accel_group(view.accelerators) self.songlist = view sw = Gtk.ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.IN) sw.add(view) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.ALWAYS) self.browser = browser = Kind(library, False) if browser.reordered: view.enable_drop() elif browser.dropped: view.enable_drop(False) if browser.accelerators: self.add_accel_group(browser.accelerators) self.__container = browser.pack(sw) self.get_child().pack_start(self.__container, True, True, 0) self.__statusbar = Gtk.Label() self.__statusbar.set_text(_("No time information")) self.__statusbar.set_alignment(1.0, 0.5) self.__statusbar.set_ellipsize(Pango.EllipsizeMode.START) self.get_child().pack_end(self.__statusbar, False, True, 0) browser.connect('songs-selected', self.__browser_cb) browser.finalize(False) view.connect('popup-menu', self.__menu, library) view.connect('drag-data-received', self.__drag_data_recv) view.connect('row-activated', self.__enqueue) if browser.headers is not None: view.connect('columns-changed', self.__cols_changed, browser) self.__cols_changed(view, browser) sw.show_all() for c in self.get_child().get_children(): c.show() self.get_child().show() self.show() self.__set_pane_size() def __set_pane_size(self): sub = self.__container if not isinstance(self.__container, RPaned): for child in self.__container.get_children(): if isinstance(child, RPaned): sub = child if isinstance(sub, RPaned): try: key = "%s_pos" % self.browser.__class__.__name__ val = config.getfloat("browsers", key) except: val = 0.4 sub.set_relative(val) def __browser_cb(self, browser, songs, sorted): if browser.background: bg = background_filter() if bg: songs = filter(bg, songs) self.songlist.set_songs(songs, sorted) def __enqueue(self, view, path, column): from quodlibet import app app.window.playlist.enqueue([view.get_model()[path][0]]) if app.player.song is None: app.player.next() def __drag_data_recv(self, view, *args): if callable(self.browser.reordered): self.browser.reordered(view) view.set_sort_by(None, refresh=False) def __cols_changed(self, view, browser): for header in view.get_columns(): tag = header.header_name for t in util.tagsplit(tag): if t in browser.headers: header.set_visible(True) break else: header.set_visible(False) def __menu(self, view, library): path, col = view.get_cursor() header = col.header_name menu = view.Menu(header, self.browser, library) if menu is not None: view.popup_menu(menu, 0, Gtk.get_current_event_time()) return True def __set_time(self, info, songs): i = len(songs) length = sum(song.get("~#length", 0) for song in songs) t = self.browser.statusbar(i) % { 'count': i, 'time': util.format_time_long(length)} self.__statusbar.set_text(t) ����������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/session.py�����������������������������������������������������������0000644�0001750�0001750�00000002742�12173212464�020741� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation try: import dbus dbus except ImportError: dbus = None from quodlibet import app def init(app_id): if not dbus: return try: bus = dbus.Bus(dbus.Bus.TYPE_SESSION) manager = bus.get_object("org.gnome.SessionManager", "/org/gnome/SessionManager") iface = dbus.Interface(manager, "org.gnome.SessionManager") client_path = iface.RegisterClient(app_id, "") client = bus.get_object("org.gnome.SessionManager", client_path) client_priv = dbus.Interface(client, "org.gnome.SessionManager.ClientPrivate") def end_session_cb(*args): print_d("GSM sent EndSession: going down") client_priv.EndSessionResponse(True, "") app.quit() def query_end_session_cb(*args): print_d("GSM sent QueryEndSession") client_priv.EndSessionResponse(True, "") client_priv.connect_to_signal("QueryEndSession", query_end_session_cb) client_priv.connect_to_signal("EndSession", end_session_cb) except dbus.DBusException: print_d("Connecting with the gnome session manager failed") else: print_d("Connected with gnome session manager: %s" % client_path) ������������������������������quodlibet-3.0.2/quodlibet/qltk/logging.py�����������������������������������������������������������0000644�0001750�0001750�00000002472�12173213426�020703� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������from gi.repository import Gtk import quodlibet.util.logging from quodlibet import qltk class LoggingWindow(qltk.Window): def __init__(self, parent=None): super(LoggingWindow, self).__init__() self.set_default_size(400, 400) self.set_title(_("Output Log")) self.set_border_width(12) self.set_transient_for(qltk.get_top_parent(parent)) notebook = qltk.Notebook() for logname in quodlibet.util.logging.names(): text = "\n".join(quodlibet.util.logging.contents(logname)) view = Gtk.TextView() sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.IN) sw.add(view) buffer = view.get_buffer() buffer.set_text(text) notebook.append_page(sw, logname) close = Gtk.Button(stock=Gtk.STOCK_CLOSE) close.connect_object('clicked', lambda x: x.destroy(), self) button_box = Gtk.HButtonBox() button_box.set_layout(Gtk.ButtonBoxStyle.END) button_box.pack_start(close, True, True, 0) vbox = Gtk.VBox(spacing=12) vbox.pack_start(notebook, True, True, 0) vbox.pack_start(button_box, False, True, 0) self.add(vbox) self.show_all() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/completion.py��������������������������������������������������������0000644�0001750�0001750�00000014010�12173212464�021416� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig, Michael Urman, # 2011 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from quodlibet import formats, config, print_d from quodlibet.util import copool, massagers class EntryWordCompletion(Gtk.EntryCompletion): """Entry completion for simple words, where a word boundary is roughly equivalent to the separators in the QL query language. You need to manually set a model containing the available words.""" leftsep = ["&(", "|(", ",", ", "] rightsep = [" ", ")", ","] def __init__(self): super(EntryWordCompletion, self).__init__() self.set_match_func(self.__match_filter, None) self.connect('match-selected', self.__match_selected) def __match_filter(self, completion, entrytext, iter, data): model = completion.get_model() entry = self.get_entry() entrytext = entrytext.decode('utf-8') if entry is None: return False cursor = entry.get_position() if (cursor != len(entrytext) and not max([entrytext[cursor:].startswith(s) for s in self.rightsep])): return False # find the border to the left left, f = max( [(entrytext.rfind(c, 0, cursor), c) for c in self.leftsep]) if left < 0: left += 1 else: left += len(f) if left == cursor: return False key = entrytext[left:cursor] value = model.get_value(iter, self.get_property('text-column')) return bool(value and value.startswith(key)) def __match_selected(self, completion, model, iter): value = model.get_value(iter, self.get_property('text-column')) entry = self.get_entry() cursor = entry.get_position() text = entry.get_text() text = text.decode('utf-8') left, f = max( [(text.rfind(c, 0, cursor), c) for c in self.leftsep]) if left == -1: left += 1 else: left += len(f) offset = cursor - left entry.insert_text(value[offset:], cursor) entry.set_position(left + len(value)) return True class LibraryTagCompletion(EntryWordCompletion): """A completion for text entries tied to a library's tag list.""" __tags = set() def __init__(self, library): super(LibraryTagCompletion, self).__init__() try: model = self.__model except AttributeError: model = type(self).__model = Gtk.ListStore(str) library.connect('changed', self.__update_song, model) library.connect('added', self.__update_song, model) library.connect('removed', self.__update_song, model) copool.add(self.__build_model, library, model) self.set_model(model) self.set_text_column(0) @classmethod def __update_song(klass, library, songs, model): print_d("Updating tag model for %d songs" % len(songs)) tags = klass.__tags for song in songs: for tag in song.keys(): if not (tag.startswith("~#") or tag in formats.MACHINE_TAGS or tag in tags): klass.__tags.add(tag) model.append([tag]) print_d("Done updating tag model for %d songs" % len(songs)) @classmethod def __build_model(klass, library, model): print_d("Updating tag model for whole library") all_tags = klass.__tags model.clear() tags = set() songs = list(library) for count, song in enumerate(songs): for tag in song.keys(): if not (tag.startswith("~#") or tag in formats.MACHINE_TAGS): tags.add(tag) if count % 500 == 0 or count + 1 == len(songs): tags -= all_tags for tag in tags: model.append([tag]) all_tags.update(tags) tags.clear() yield True tags.update(["~dirname", "~basename", "~people", "~format"]) for tag in ["track", "disc", "playcount", "skipcount", "lastplayed", "mtime", "added", "rating", "length"]: tags.add("#(" + tag) for tag in ["date", "bpm"]: if tag in all_tags: tags.add("#(" + tag) tags -= all_tags for tag in tags: model.append([tag]) all_tags.update(tags) print_d("Done updating tag model for whole library") class LibraryValueCompletion(Gtk.EntryCompletion): """Entry completion for a library value, for a specific tag. Will add valid values from the tag massager where available""" def __init__(self, tag, library): super(LibraryValueCompletion, self).__init__() self.set_model(Gtk.ListStore(str)) self.set_text_column(0) self.set_tag(tag, library) def set_tag(self, tag, library): if not config.getboolean("settings", "eager_search"): return elif tag is None: return elif tag in ("bpm date discnumber isrc originaldate recordingdate " "tracknumber title").split() + formats.MACHINE_TAGS: return elif tag in formats.PEOPLE: tag = "~people" copool.add(self.__fill_tag, tag, library) def __fill_tag(self, tag, library): model = self.get_model() model.clear() yield True # Issue 439: pre-fill with valid values if available if tag in massagers.tags: values = massagers.tags[tag].options else: values = [] values = sorted(set(values + library.tag_values(tag))) self.set_minimum_key_length(int(len(values) > 100)) yield True for count, value in enumerate(values): model.append(row=[value]) if count % 1000 == 0: yield True ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/renamefiles.py�������������������������������������������������������0000644�0001750�0001750�00000016430�12173213426�021546� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import unicodedata from gi.repository import Gtk, Gdk from quodlibet import const from quodlibet import qltk from quodlibet import util from quodlibet.parse import FileFromPattern from quodlibet.qltk._editpane import EditPane, FilterCheckButton from quodlibet.qltk._editpane import EditingPluginHandler from quodlibet.qltk.views import TreeViewColumn from quodlibet.qltk.wlw import WritingWindow class SpacesToUnderscores(FilterCheckButton): _label = _("Replace spaces with _underscores") _section = "rename" _key = "spaces" _order = 1.0 def filter(self, original, filename): return filename.replace(" ", "_") class StripWindowsIncompat(FilterCheckButton): _label = _("Strip _Windows-incompatible characters") _section = "rename" _key = "windows" _order = 1.1 def __init__(self): super(StripWindowsIncompat, self).__init__() # If on Windows, force this to be inactive (and hidden) if os.name == 'nt': self.set_active(False) self.set_sensitive(False) self.set_no_show_all(True) def filter(self, original, filename): return util.strip_win32_incompat(filename) class StripDiacriticals(FilterCheckButton): _label = _("Strip _diacritical marks") _section = "rename" _key = "diacriticals" _order = 1.2 def filter(self, original, filename): return filter(lambda s: not unicodedata.combining(s), unicodedata.normalize('NFKD', filename)) class StripNonASCII(FilterCheckButton): _label = _("Strip non-_ASCII characters") _section = "rename" _key = "ascii" _order = 1.3 def filter(self, original, filename): return u"".join(map(lambda s: (s <= "~" and s) or u"_", filename)) class Lowercase(FilterCheckButton): _label = _("Use only _lowercase characters") _section = "rename" _key = "lowercase" _order = 1.4 def filter(self, original, filename): return filename.lower() class RenameFilesPluginHandler(EditingPluginHandler): from quodlibet.plugins.editing import RenameFilesPlugin Kind = RenameFilesPlugin class RenameFiles(EditPane): title = _("Rename Files") FILTERS = [SpacesToUnderscores, StripWindowsIncompat, StripDiacriticals, StripNonASCII, Lowercase] handler = RenameFilesPluginHandler() def __init__(self, parent, library): super(RenameFiles, self).__init__( const.NBP, const.NBP_EXAMPLES.split("\n")) column = TreeViewColumn( _('File'), Gtk.CellRendererText(), text=1) column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) self.view.append_column(column) render = Gtk.CellRendererText() render.set_property('editable', True) column = TreeViewColumn(_('New Name'), render, text=2) column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) self.view.append_column(column) self.preview.connect_object('clicked', self.__preview, None) parent.connect_object('changed', self.__class__.__preview, self) self.save.connect_object('clicked', self.__rename, library) render.connect('edited', self.__row_edited) def __row_edited(self, renderer, path, new): row = self.view.get_model()[path] if row[2] != new: row[2] = new self.preview.set_sensitive(True) self.save.set_sensitive(True) def __rename(self, library): model = self.view.get_model() win = WritingWindow(self, len(model)) was_changed = [] skip_all = False self.view.freeze_child_notify() rows = [(row[0], row[1], row[2].decode('utf-8')) for row in model] for song, oldname, newname in rows: try: newname = util.fsnative(newname) library.rename(song, newname, changed=was_changed) except StandardError: util.print_exc() if skip_all: continue RESPONSE_SKIP_ALL = 1 buttons = (_("Ignore _All Errors"), RESPONSE_SKIP_ALL, Gtk.STOCK_STOP, Gtk.ResponseType.CANCEL, _("_Continue"), Gtk.ResponseType.OK) msg = qltk.Message( Gtk.MessageType.ERROR, win, _("Unable to rename file"), _("Renaming <b>%s</b> to <b>%s</b> failed. " "Possibly the target file already exists, " "or you do not have permission to make the " "new file or remove the old one.") % ( util.escape(util.fsdecode(oldname)), util.escape(util.fsdecode(newname))), buttons=Gtk.ButtonsType.NONE) msg.add_buttons(*buttons) msg.set_default_response(Gtk.ResponseType.OK) resp = msg.run() skip_all |= (resp == RESPONSE_SKIP_ALL) # Preserve old behavior: shift-click is Ignore All mods = Gdk.Display.get_default().get_pointer()[3] skip_all |= mods & Gdk.ModifierType.SHIFT_MASK library.reload(song, changed=was_changed) if resp != Gtk.ResponseType.OK and resp != RESPONSE_SKIP_ALL: break if win.step(): break self.view.thaw_child_notify() win.destroy() library.changed(was_changed) self.save.set_sensitive(False) def __preview(self, songs): model = self.view.get_model() if songs is None: songs = [row[0] for row in model] pattern = self.combo.get_child().get_text().decode("utf-8") try: pattern = FileFromPattern(pattern) except ValueError: qltk.ErrorMessage( self, _("Path is not absolute"), _("The pattern\n\t<b>%s</b>\ncontains / but " "does not start from root. To avoid misnamed " "folders, root your pattern by starting " "it with / or ~/.") % ( util.escape(pattern))).run() return else: if self.combo.get_child().get_text(): self.combo.prepend_text(self.combo.get_child().get_text()) self.combo.write(const.NBP) orignames = [song["~filename"] for song in songs] newnames = [util.fsdecode(util.fsencode(pattern.format(song))) for song in songs] for f in self.filters: if f.active: newnames = f.filter_list(orignames, newnames) model.clear() for song, newname in zip(songs, newnames): basename = util.fsdecode(song("~basename")) model.append(row=[song, basename, newname]) self.preview.set_sensitive(False) self.save.set_sensitive(bool(self.combo.get_child().get_text())) for song in songs: if not song.is_file: self.set_sensitive(False) break else: self.set_sensitive(True) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/debugwindow.py�������������������������������������������������������0000644�0001750�0001750�00000012456�12173213426�021576� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import os import sys import time import traceback import platform from gi.repository import Gtk from quodlibet import app from quodlibet import const from quodlibet import util old_hook = sys.excepthook class ExceptionDialog(Gtk.Window): running = False instance = None @classmethod def excepthook(Kind, *args): dump = os.path.join( const.USERDIR, time.strftime("Dump_%Y%m%d_%H%M%S.txt")) minidump = os.path.join( const.USERDIR, time.strftime("MiniDump_%Y%m%d_%H%M%S.txt")) full_args = list(args) + [dump, minidump] Kind.__dump(*full_args) # Don't get in a recursive exception handler loop. if not Kind.running: Kind.running = True Kind.instance = Kind(*full_args) old_hook(*args) @classmethod def __dump(self, Kind, value, trace, dump, minidump): import mutagen from quodlibet.util import logging dumpobj = file(dump, "w") minidumpobj = file(minidump, "w") header = "Quod Libet %s\nMutagen %s\nPython %s %s\nPlatform %s" % ( const.VERSION, mutagen.version_string, sys.version, sys.platform, platform.platform()) minidump_data = ("=== SYSTEM INFORMATION:\n%s\n\n" "=== STACK TRACE\n%s\n\n") % ( header, "\n".join(traceback.format_exception(Kind, value, trace))) print >>dumpobj, minidump_data print >>minidumpobj, minidump_data minidumpobj.close() for logname in logging.names(): print >>dumpobj, "=== LOG: %r\n%s\n\n" % ( logname, "\n".join(logging.contents(logname)[-50:])) dumpobj.close() def __init__(self, Kind, value, traceback, dump, minidump): # This is all implemented a bit different than the rest of Quod # Libet's windows since I want it to be as stupid as possible, to # minimize the chances of something going wrong with the thing # that handles things going wrong, i.e. it only uses GTK+ code, # no QLTK wrappers. Gtk.Window.__init__(self) self.set_default_size(400, 400) self.set_border_width(12) self.set_title(_("Error Occurred")) desc = _("An exception has occured in Quod Libet. A dump file " "has been saved to <b >%s</b> that will help us debug the crash. " "Please file a new issue at http://code.google.com/p/quodlibet/" "issues /list and attach this file or include its contents. This " "file may contain some identifying information about you or your " "system, such as a list of recent files played. If this is " "unacceptable, send <b>%s</b> instead with a description of what " "you were doing.") % (util.unexpand(dump), util.unexpand(minidump)) suggestion = _("Quod Libet may now be unstable. Closing it and " "restarting is recommended. Your library will be saved.") label = Gtk.Label(desc + "\n\n" + suggestion) label.set_selectable(True) label.set_use_markup(True) label.set_line_wrap(True) box = Gtk.VBox(spacing=6) buttons = Gtk.HButtonBox() view = Gtk.TreeView() sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.ALWAYS) sw.set_shadow_type(Gtk.ShadowType.IN) sw.add(view) model = Gtk.ListStore(str, str, int) self.__fill_list(view, model, value, traceback) view.set_model(model) cancel = Gtk.Button(stock=Gtk.STOCK_CANCEL) close = Gtk.Button(stock=Gtk.STOCK_QUIT) buttons.pack_start(close, True, True, 0) buttons.pack_start(cancel, True, True, 0) box.pack_start(label, False, True, 0) box.pack_start(sw, True, True, 0) box.pack_start(buttons, False, True, 0) self.add(box) self.connect('destroy', self.__destroy) cancel.connect_object('clicked', Gtk.Window.destroy, self) close.connect('clicked', lambda *x: Gtk.main_quit()) self.show_all() filename = util.unexpand(dump) offset = label.get_text().decode("utf-8").find(filename) label.select_region(offset, offset + len(filename)) def __stack_row_activated(self, view, path, column): model = view.get_model() filename = model[path][0] line = model[path][2] util.spawn(["sensible-editor", "+%d" % line, filename]) def __fill_list(self, view, model, value, trace): for frame in reversed(traceback.extract_tb(trace)): (filename, line, function, text) = frame model.append(row=[filename, function, line]) view.connect('row-activated', self.__stack_row_activated) def cdf(column, cell, model, iter, data): cell.set_property("markup", "<b>%s</b> line %d\n\t%s" % ( util.escape(model[iter][1]), model[iter][2], util.escape(util.unexpand(model[iter][0])))) render = Gtk.CellRendererText() col = Gtk.TreeViewColumn(str(value).replace("_", "__"), render) col.set_cell_data_func(render, cdf) col.set_visible(True) col.set_expand(True) view.append_column(col) def __destroy(self, window): type(self).running = False type(self).instance = None window.destroy() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/textedit.py����������������������������������������������������������0000644�0001750�0001750�00000010671�12173213426�021107� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, GLib, Pango from quodlibet import qltk from quodlibet import util from quodlibet.formats._audio import AudioFile from quodlibet.parse import XMLFromPattern try: import gi gi.require_version("GtkSource", "3.0") from gi.repository import GtkSource except (ValueError, ImportError): TextView = Gtk.TextView TextBuffer = Gtk.TextBuffer else: TextView = GtkSource.View class TextBuffer(GtkSource.Buffer): def __init__(self, *args): super(TextBuffer, self).__init__(*args) self.set_highlight_matching_brackets(False) self.set_highlight_syntax(False) def set_text(self, *args): self.begin_not_undoable_action() super(TextBuffer, self).set_text(*args) self.end_not_undoable_action() class TextEditBox(Gtk.HBox): """A simple text editing area with a default value, a revert button, and an apply button. The 'buffer' attribute is the text buffer, the 'apply' attribute is the apply button. FIXME: Button text should changable (without poking the buttons directly). """ def __init__(self, default=""): super(TextEditBox, self).__init__(spacing=6) sw = Gtk.ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.IN) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.add(TextView(buffer=TextBuffer())) self.pack_start(sw, True, True, 0) self.buffer = sw.get_child().get_buffer() box = Gtk.VBox(spacing=6) rev = Gtk.Button(stock=Gtk.STOCK_REVERT_TO_SAVED) app = Gtk.Button(stock=Gtk.STOCK_APPLY) box.pack_start(rev, False, True, 0) box.pack_start(app, False, True, 0) self.pack_start(box, False, True, 0) rev.connect_object('clicked', self.buffer.set_text, default) self.revert = rev self.apply = app def __get_text(self): start, end = self.buffer.get_bounds() return self.buffer.get_text(start, end, True).decode('utf-8') text = property(__get_text, lambda s, v: s.buffer.set_text(v, -1)) class PatternEditBox(TextEditBox): """A TextEditBox that stops the apply button's clicked signal if the pattern is invalid. You need to use connect_after to connect to it, to get this feature.""" def __init__(self, default=""): super(PatternEditBox, self).__init__(default) self.apply.connect('clicked', self.__check_markup) def __check_markup(self, apply): try: f = AudioFile({"~filename": "dummy"}) Pango.parse_markup(XMLFromPattern(self.text) % f, -1, u"\u0000") except (ValueError, GLib.GError), e: qltk.ErrorMessage( self, _("Invalid pattern"), _("The pattern you entered was invalid. Make sure you enter " "< and > as \\< and \\> and that your tags are " "balanced.\n\n%s") % util.escape(str(e))).run() apply.stop_emission('clicked') return False class TextEdit(qltk.UniqueWindow): """A window with a text editing box in it.""" Box = TextEditBox def __init__(self, parent, default=""): if self.is_not_unique(): return super(TextEdit, self).__init__() self.set_title(_("Edit Display")) self.set_transient_for(qltk.get_top_parent(parent)) self.set_border_width(12) self.set_default_size(420, 190) vbox = Gtk.VBox(spacing=12) close = Gtk.Button(stock=Gtk.STOCK_CLOSE) close.connect('clicked', lambda *x: self.destroy()) b = Gtk.HButtonBox() b.set_layout(Gtk.ButtonBoxStyle.END) b.pack_start(close, True, True, 0) self.box = box = self.Box(default) vbox.pack_start(box, True, True, 0) vbox.pack_start(b, False, True, 0) self.add(vbox) self.apply = box.apply self.revert = box.revert close.grab_focus() self.show_all() text = property(lambda s: s.box.text, lambda s, v: setattr(s.box, 'text', v)) class PatternEdit(TextEdit): """A window with a pattern editing box in it.""" Box = PatternEditBox �����������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/prefs.py�������������������������������������������������������������0000644�0001750�0001750�00000055031�12173213426�020373� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2012 Joe Wreschnig, Michael Urman, Iñigo Serna, # Steven Robertson, Nick Boultbee # 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from quodlibet import config from quodlibet import const from quodlibet import qltk from quodlibet import util from quodlibet import app from quodlibet.parse import Query from quodlibet.qltk.ccb import ConfigCheckButton from quodlibet.qltk.data_editors import MultiStringEditor from quodlibet.qltk.entry import ValidatingEntry, UndoEntry from quodlibet.qltk.scanbox import ScanBox from quodlibet.qltk.maskedbox import MaskedBox from quodlibet.qltk.songlist import SongList from quodlibet.util import copool from quodlibet.util.dprint import print_d from quodlibet.util.library import emit_signal class PreferencesWindow(qltk.UniqueWindow): """The tabbed container window for the main preferences GUI. Individual tabs are encapsulated as inner classes inheriting from `VBox`""" class SongList(Gtk.VBox): name = "songlist" PREDEFINED_TAGS = [ ("~#disc", _("_Disc")), ("~#track", _("_Track")), ("grouping", _("Grou_ping")), ("artist", _("_Artist")), ("album", _("Al_bum")), ("title", util.tag("title")), ("genre", _("_Genre")), ("date", _("_Date")), ("~basename", _("_Filename")), ("~#length", _("_Length")), ("~#rating", _("_Rating")), ("~#filesize", util.tag("~#filesize"))] def __init__(self): super(PreferencesWindow.SongList, self).__init__(spacing=12) self.set_border_width(12) self.title = _("Song List") # Behaviour vbox = Gtk.VBox(spacing=6) c = ConfigCheckButton(_("_Jump to playing song automatically"), 'settings', 'jump', populate=True) c.set_tooltip_text(_("When the playing song changes, " "scroll to it in the song list")) vbox.pack_start(c, False, True, 0) frame = qltk.Frame(_("Behavior"), child=vbox) self.pack_start(frame, False, True, 0) # Columns vbox = Gtk.VBox(spacing=12) buttons = {} table = Gtk.Table(3, 3) table.set_homogeneous(True) cols = config.get_columns(refresh=True) for i, (k, t) in enumerate(self.PREDEFINED_TAGS): x, y = i % 3, i / 3 buttons[k] = Gtk.CheckButton(t, use_underline=True) if k in cols: buttons[k].set_active(True) cols.remove(k) table.attach(buttons[k], x, x + 1, y, y + 1) vbox.pack_start(table, False, True, 0) if "~current" in cols: cols.remove("~current") self.other_cols = cols # Other columns hbox = Gtk.HBox(spacing=6) l = Gtk.Label(label=_("_Others:"), use_underline=True) hbox.pack_start(l, False, True, 0) self.others = others = UndoEntry() others.set_sensitive(False) # Stock edit doesn't have ellipsis chars. edit_button = Gtk.Button(_("_Edit..."), use_underline=True) edit_button.connect("clicked", self.__config_cols) edit_button.set_tooltip_text(_("Add or remove additional column " "headers")) l.set_mnemonic_widget(edit_button) l.set_use_underline(True) hbox.pack_start(others, True, True, 0) hbox.pack_start(edit_button, False, True, 0) vbox.pack_start(hbox, False, True, 0) frame = qltk.Frame(_("Visible Columns"), child=vbox) self.pack_start(frame, False, True, 0) # Column preferences tiv = Gtk.CheckButton(_("Title includes _version"), use_underline=True) aio = Gtk.CheckButton(_("Artist includes all _people"), use_underline=True) aip = Gtk.CheckButton(_("Album includes _disc subtitle"), use_underline=True) fip = Gtk.CheckButton(_("Filename includes _folder"), use_underline=True) self._toggle_data = [ (tiv, "title", "~title~version"), (aip, "album", "~album~discsubtitle"), (fip, "~basename", "~filename"), (aio, "artist", "~people") ] # Turn on the toggles if the toggled version is detected in config for (check, off, on) in self._toggle_data: if on in cols: buttons[off].set_active(True) check.set_active(True) cols.remove(on) # Update text once to exclude ticked columns, munged or not others.set_text(", ".join(cols)) t = Gtk.Table(2, 2) t.set_homogeneous(True) t.attach(tiv, 0, 1, 0, 1) t.attach(aip, 0, 1, 1, 2) t.attach(aio, 1, 2, 0, 1) t.attach(fip, 1, 2, 1, 2) frame = qltk.Frame(_("Column Preferences"), child=t) self.pack_start(frame, False, True, 0) # Apply button vbox = Gtk.VBox(spacing=12) apply = Gtk.Button(stock=Gtk.STOCK_APPLY) apply.set_tooltip_text(_("Apply current configuration to song " "list, adding new columns to the end")) b = Gtk.HButtonBox() b.set_layout(Gtk.ButtonBoxStyle.END) b.pack_start(apply, True, True, 0) vbox.pack_start(b, True, True, 0) self.pack_start(vbox, True, True, 0) apply.connect('clicked', self.__apply, buttons, tiv, aip, fip, aio) # Apply on destroy, else config gets mangled self.connect('destroy', self.__apply, buttons, tiv, aip, fip, aio) self.show_all() def __apply(self, button, buttons, tiv, aip, fip, aio): new_headers = set() # Get the checked headers for key, name in self.PREDEFINED_TAGS: if buttons[key].get_active(): new_headers.add(key) # And the customs new_headers.update(set(self.other_cols)) on_to_off = dict((on, off) for (w, off, on) in self._toggle_data) result = [] cur_cols = config.get_columns(refresh=True) for h in cur_cols: if h in new_headers: result.append(h) else: try: alternative = on_to_off[h] if alternative in new_headers: result.append(alternative) except KeyError: pass # Add new ones on the end result.extend(new_headers - set(result)) # After this, do the substitutions for (check, off, on) in self._toggle_data: if check.get_active(): try: result[result.index(off)] = on except ValueError: pass SongList.set_all_column_headers(result) def __config_cols(self, button): def __closed(widget): self.other_cols = widget.get_strings() self.others.set_text(", ".join(self.other_cols)) m = MultiStringEditor(_("Extra Columns"), self.other_cols) m.connect('destroy', __closed) class Browsers(Gtk.VBox): name = "browser" def __init__(self): super(PreferencesWindow.Browsers, self).__init__(spacing=12) self.set_border_width(12) self.title = _("Browsers") # Search vb = Gtk.VBox(spacing=6) hb = Gtk.HBox(spacing=6) l = Gtk.Label(label=_("_Global filter:")) l.set_use_underline(True) e = ValidatingEntry(Query.is_valid_color) e.set_text(config.get("browsers", "background")) e.connect('changed', self._entry, 'background', 'browsers') e.set_tooltip_text(_("Apply this query in addition to all others")) l.set_mnemonic_widget(e) hb.pack_start(l, False, True, 0) hb.pack_start(e, True, True, 0) vb.pack_start(hb, False, True, 0) c = ConfigCheckButton(_("Search after _typing"), 'settings', 'eager_search', populate=True) c.set_tooltip_text( _("Show search results after the user stops typing.")) vb.pack_start(c, False, True, 0) # Translators: The heading of the preference group, no action f = qltk.Frame(Q_("heading|Search"), child=vb) self.pack_start(f, False, True, 0) # Ratings vb = Gtk.VBox(spacing=6) c1 = ConfigCheckButton(_("Confirm _multiple ratings"), 'browsers', 'rating_confirm_multiple', populate=True) c1.set_tooltip_text(_("Ask for confirmation before changing the " "rating of multiple songs at once")) c2 = ConfigCheckButton(_("Enable _one-click ratings"), 'browsers', 'rating_click', populate=True) c2.set_tooltip_text(_("Enable rating by clicking on the rating " "column in the song list")) vbox = Gtk.VBox(spacing=6) vbox.pack_start(c1, False, True, 0) vbox.pack_start(c2, False, True, 0) f = qltk.Frame(_("Ratings"), child=vbox) self.pack_start(f, False, True, 0) # Album Art vb = Gtk.VBox(spacing=6) c = ConfigCheckButton(_("_Use rounded corners on thumbnails"), 'albumart', 'round', populate=True) c.set_tooltip_text(_("Round the corners of album artwork " "thumbnail images. May require restart to take effect.")) vb.pack_start(c, False, True, 0) # Filename choice algorithm config cb = ConfigCheckButton(_("Prefer _embedded art"), 'albumart', 'prefer_embedded', populate=True) cb.set_tooltip_text( _("Choose to use artwork embedded in the audio " "(where available) over other sources")) vb.pack_start(cb, False, True, 0) hb = Gtk.HBox(spacing=3) cb = ConfigCheckButton(_("_Force image filename:"), 'albumart', 'force_filename', populate=True) hb.pack_start(cb, False, True, 0) entry = UndoEntry() entry.set_tooltip_text( _("The album art image file to use when forced")) entry.set_text(config.get("albumart", "filename")) entry.connect('changed', self.__changed_text, 'filename') # Disable entry when not forcing entry.set_sensitive(cb.get_active()) cb.connect('toggled', self.__toggled_force_filename, entry) hb.pack_start(entry, True, True, 0) vb.pack_start(hb, False, True, 0) f = qltk.Frame(_("Album Art"), child=vb) self.pack_start(f, False, True, 0) def __changed_text(self, entry, name): config.set('albumart', name, entry.get_text()) def __toggled_force_filename(self, cb, fn_entry): fn_entry.set_sensitive(cb.get_active()) def _entry(self, entry, name, section="settings"): config.set(section, name, entry.get_text()) class Player(Gtk.VBox): name = "playback" def __init__(self): super(PreferencesWindow.Player, self).__init__(spacing=12) self.set_border_width(12) self.title = _("Playback") # player backend if app.player and hasattr(app.player, 'PlayerPreferences'): player_prefs = app.player.PlayerPreferences() f = qltk.Frame(_("Output Configuration"), child=player_prefs) self.pack_start(f, False, True, 0) # replaygain fallback_gain = config.getfloat("player", "fallback_gain", 0.0) adj = Gtk.Adjustment(fallback_gain, -12.0, 12.0, 0.5, 0.5, 0.0) fb_spin = Gtk.SpinButton(adjustment=adj) fb_spin.set_digits(1) fb_spin.connect('changed', self.__changed, 'player', 'fallback_gain') fb_spin.set_tooltip_text( _("If no Replay Gain information is available " "for a song, scale the volume by this value")) fb_label = Gtk.Label(label=_("_Fall-back gain (dB):")) fb_label.set_use_underline(True) fb_label.set_mnemonic_widget(fb_spin) pre_amp_gain = config.getfloat("player", "pre_amp_gain", 0.0) adj = Gtk.Adjustment(pre_amp_gain, -6, 6, 0.5, 0.5, 0.0) adj.connect('value-changed', self.__changed, 'player', 'pre_amp_gain') pre_spin = Gtk.SpinButton(adjustment=adj) pre_spin.set_digits(1) pre_spin.set_tooltip_text( _("Scale volume for all songs by this value, " "as long as the result will not clip")) pre_label = Gtk.Label(label=_("_Pre-amp gain (dB):")) pre_label.set_use_underline(True) pre_label.set_mnemonic_widget(pre_spin) widgets = [pre_label, pre_spin, fb_label, fb_spin] c = ConfigCheckButton(_("_Enable Replay Gain volume adjustment"), "player", "replaygain", populate=True) c.connect('toggled', self.__toggled_gain, widgets) # packing table = Gtk.Table(3, 2) table.set_col_spacings(6) table.set_row_spacings(6) table.attach(c, 0, 2, 0, 1) fb_label.set_alignment(0, 0.5) table.attach(fb_label, 0, 1, 1, 2, xoptions=0) pre_label.set_alignment(0, 0.5) table.attach(pre_label, 0, 1, 2, 3, xoptions=0) fb_align = Gtk.Alignment.new(0, 0.5, 0, 1) fb_align.add(fb_spin) table.attach(fb_align, 1, 2, 1, 2) pre_align = Gtk.Alignment.new(0, 0.5, 0, 1) pre_align.add(pre_spin) table.attach(pre_align, 1, 2, 2, 3) f = qltk.Frame(_("Replay Gain Volume Adjustment"), child=table) c.emit('toggled') self.pack_start(f, False, True, 0) self.show_all() def __toggled_gain(self, activator, widgets): if app.player: # tests app.player.volume = app.player.volume for widget in widgets: widget.set_sensitive(activator.get_active()) def __changed(self, adj, section, name): config.set(section, name, str(adj.get_value())) app.player.volume = app.player.volume class Tagging(Gtk.VBox): name = "tagging" def __init__(self): super(PreferencesWindow.Tagging, self).__init__(spacing=12) self.set_border_width(12) self.title = _("Tags") self._songs = [] vbox = Gtk.VBox(spacing=6) cb = ConfigCheckButton(_("Auto-save tag changes"), 'editing', 'auto_save_changes', populate=True) cb.set_tooltip_text(_("Save changes to tags without confirmation " "when editing multiple files")) vbox.pack_start(cb, False, True, 0) cb = ConfigCheckButton(_("Show _programmatic tags"), 'editing', 'alltags', populate=True) cb.set_tooltip_text( _("Access all tags, including machine-generated ones " "e.g. MusicBrainz or Replay Gain tags")) vbox.pack_start(cb, False, True, 0) hb = Gtk.HBox(spacing=6) e = UndoEntry() e.set_text(config.get("editing", "split_on")) e.connect('changed', self.__changed, 'editing', 'split_on') e.set_tooltip_text( _("A list of separators to use when splitting tag values. " "The list is space-separated")) l = Gtk.Label(label=_("Split _on:")) l.set_use_underline(True) l.set_mnemonic_widget(e) hb.pack_start(l, False, True, 0) hb.pack_start(e, True, True, 0) vbox.pack_start(hb, False, True, 0) vb2 = Gtk.VBox(spacing=6) bayesian_factor = config.getfloat("settings", "bayesian_rating_factor", 0.0) adj = Gtk.Adjustment(bayesian_factor, 0.0, 10.0, 0.5, 0.5, 0.0) bayes_spin = Gtk.SpinButton(adjustment=adj) bayes_spin.set_digits(1) bayes_spin.connect('changed', self.__changed_and_signal_library, 'settings', 'bayesian_rating_factor') bayes_spin.set_tooltip_text( _("Bayesian Average factor (C) for aggregated ratings.\n" "0 means a conventional average, higher values mean that " "albums with few tracks will have less extreme ratings. " "Changing this value triggers a re-calculation for all " "albums.")) bayes_label = Gtk.Label(label=_("_Bayesian averaging amount:")) bayes_label.set_use_underline(True) bayes_label.set_mnemonic_widget(bayes_spin) hb = Gtk.HBox(spacing=6) hb.pack_start(bayes_label, False, True, 0) hb.pack_start(bayes_spin, False, True, 0) vb2.pack_start(hb, True, True, 0) cb = ConfigCheckButton(_("Save ratings and play _counts"), "editing", "save_to_songs", populate=True) vb2.pack_start(cb, True, True, 0) hb = Gtk.HBox(spacing=6) lab = Gtk.Label(label=_("_Email:")) entry = UndoEntry() entry.set_tooltip_text(_("Ratings and play counts will be set " "for this email address")) entry.set_text(config.get("editing", "save_email")) entry.connect('changed', self.__changed, 'editing', 'save_email') hb.pack_start(lab, False, True, 0) hb.pack_start(entry, True, True, 0) lab.set_mnemonic_widget(entry) lab.set_use_underline(True) vb2.pack_start(hb, True, True, 0) f = qltk.Frame(_("Tag Editing"), child=vbox) self.pack_start(f, False, True, 0) f = qltk.Frame(_("Ratings"), child=vb2) self.pack_start(f, False, True, 0) self.show_all() def __changed(self, entry, section, name): config.set(section, name, entry.get_text()) def __changed_and_signal_library(self, entry, section, name): self.__changed(entry, section, name) print_d("Signalling \"changed\" to entire library. Hold tight...") # Cache over clicks self._songs = self._songs or app.library.values() copool.add(emit_signal, self._songs, funcid="library changed", name=_("Updating for new ratings")) class Library(Gtk.VBox): name = "library" def __init__(self): super(PreferencesWindow.Library, self).__init__(spacing=12) self.set_border_width(12) self.title = _("Library") cb = ConfigCheckButton(_("_Refresh library on start"), "library", "refresh_on_start", populate=True) scan_dirs = ScanBox() vb3 = Gtk.VBox(spacing=6) vb3.pack_start(scan_dirs, True, True, 0) def refresh_cb(button): paths = util.split_scan_dirs(config.get("settings", "scan")) exclude = config.get("library", "exclude").split(":") copool.add(app.library.rebuild, paths, False, exclude, cofuncid="library", funcid="library") refresh = qltk.Button(_("Refresh Library"), Gtk.STOCK_REFRESH) refresh.connect("clicked", refresh_cb) hb = Gtk.HBox(spacing=6) hb.pack_start(cb, True, True, 0) hb.pack_start(refresh, False, True, 0) vb3.pack_start(hb, False, True, 0) f = qltk.Frame(_("Scan Directories"), child=vb3) self.pack_start(f, False, True, 0) # during testing if app.library is not None: masked = MaskedBox(app.library) f = qltk.Frame(_("Hidden Songs"), child=masked) self.pack_start(f, False, True, 0) self.show_all() def __init__(self, parent): if self.is_not_unique(): return super(PreferencesWindow, self).__init__() self.set_title(_("Preferences") + " - Quod Libet") self.set_border_width(12) self.set_resizable(False) self.set_transient_for(qltk.get_top_parent(parent)) self.__notebook = notebook = qltk.Notebook() for Page in [self.SongList, self.Browsers, self.Player, self.Library, self.Tagging]: notebook.append_page(Page()) close = Gtk.Button(stock=Gtk.STOCK_CLOSE) close.connect_object('clicked', lambda x: x.destroy(), self) button_box = Gtk.HButtonBox() button_box.set_layout(Gtk.ButtonBoxStyle.END) button_box.pack_start(close, True, True, 0) vbox = Gtk.VBox(spacing=12) vbox.pack_start(notebook, True, True, 0) vbox.pack_start(button_box, False, True, 0) self.add(vbox) self.connect_object('destroy', PreferencesWindow.__destroy, self) self.show_all() def set_page(self, name): notebook = self.__notebook for p in range(notebook.get_n_pages()): if notebook.get_nth_page(p).name == name: notebook.set_current_page(p) def __destroy(self): config.write(const.CONFIG) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/cbes.py��������������������������������������������������������������0000644�0001750�0001750�00000033440�12173213426�020170� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005-2011 Joe Wreschnig, Michael Urman, Christoph Reiter, # Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from gi.repository import Gtk, Pango, GObject from quodlibet import qltk from quodlibet.qltk.views import RCMHintedTreeView from quodlibet.qltk import entry class _KeyValueEditor(qltk.Window): """Base class for key-value edit widgets""" _WIDTH = 400 _HEIGHT = 300 def __init__(self, title, validator=None): super(_KeyValueEditor, self).__init__() self.set_border_width(12) self.set_title(title) self.set_default_size(self._WIDTH, self._HEIGHT) self.add(Gtk.VBox(spacing=6)) self.accels = Gtk.AccelGroup() t = Gtk.Table(2, 3) t.set_row_spacings(3) t.set_col_spacing(0, 3) t.set_col_spacing(1, 12) l = Gtk.Label(label=_("_Name:")) name = entry.UndoEntry() l.set_mnemonic_widget(name) l.set_use_underline(True) l.set_alignment(0.0, 0.5) t.attach(l, 0, 1, 0, 1, xoptions=Gtk.AttachOptions.FILL) t.attach(name, 1, 2, 0, 1) l = Gtk.Label(label=_("_Value:")) self.value = entry.ValidatingEntry(validator) l.set_mnemonic_widget(self.value) l.set_use_underline(True) l.set_alignment(0.0, 0.5) t.attach(l, 0, 1, 1, 2, xoptions=Gtk.AttachOptions.FILL) t.attach(self.value, 1, 2, 1, 2) add = Gtk.Button(stock=Gtk.STOCK_ADD) add.set_sensitive(False) t.attach(add, 2, 3, 1, 2, xoptions=Gtk.AttachOptions.FILL) self.get_child().pack_start(t, False, True, 0) # Set up the model for this widget self.model = Gtk.ListStore(str, str) self.fill_values() view = RCMHintedTreeView(self.model) view.set_headers_visible(False) view.set_reorderable(True) view.set_rules_hint(True) render = Gtk.CellRendererText() render.props.ellipsize = Pango.EllipsizeMode.END column = Gtk.TreeViewColumn("", render) column.set_cell_data_func(render, self.__cdf, None) view.append_column(column) sw = Gtk.ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.IN) sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) sw.add(view) self.get_child().pack_start(sw, True, True, 0) menu = Gtk.Menu() remove = Gtk.ImageMenuItem(Gtk.STOCK_REMOVE, use_stock=True) keyval, mod = Gtk.accelerator_parse("Delete") remove.add_accelerator( 'activate', self.accels, keyval, mod, Gtk.AccelFlags.VISIBLE) menu.append(remove) menu.show_all() bbox = Gtk.HButtonBox() rem_b = Gtk.Button(stock=Gtk.STOCK_REMOVE) rem_b.set_sensitive(False) bbox.pack_start(rem_b, True, True, 0) close = Gtk.Button(stock=Gtk.STOCK_CLOSE) bbox.pack_start(close, True, True, 0) self.get_child().pack_start(bbox, False, True, 0) selection = view.get_selection() name.connect_object('activate', Gtk.Entry.grab_focus, self.value) self.value.connect_object('activate', Gtk.Button.clicked, add) self.value.connect('changed', self.__changed, [add]) add.connect_object( 'clicked', self.__add, selection, name, self.value, self.model) selection.connect('changed', self.__set_text, name, self.value, rem_b) view.connect('popup-menu', self.__popup, menu) remove.connect_object('activate', self.__remove, view) rem_b.connect_object('clicked', self.__remove, view) close.connect_object('clicked', qltk.Window.destroy, self) view.connect('key-press-event', self.__view_key_press) self.connect_object('destroy', Gtk.Menu.destroy, menu) name.grab_focus() self.show_all() def fill_values(self): """Responsible for populating self.model (eg with values from disk)""" raise NotImplementedError def __view_key_press(self, view, event): if event.keyval == Gtk.accelerator_parse("Delete")[0]: self.__remove(view) def __popup(self, view, menu): return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def __remove(self, view): view.remove_selection() def __set_text(self, selection, name, value, remove): model, iter = selection.get_selected() remove.set_sensitive(bool(iter)) if iter is not None: name.set_text(model[iter][1]) value.set_text(model[iter][0]) def __cdf(self, column, cell, model, iter, data): row = model[iter] content, name = row[0], row[1] cell.set_property('text', '%s\n\t%s' % (name, content)) def __changed(self, entry, buttons): for b in buttons: b.set_sensitive(bool(entry.get_text())) def __add(self, selection, name, value, model): value = value.get_text() if value: name = name.get_text() or value iter = model.append(row=[value, name]) selection.select_iter(iter) class CBESEditor(_KeyValueEditor): def __init__(self, cbes, title, validator=None): # Do this before calling parent constructor self.cbes = cbes super(CBESEditor, self).__init__(title, validator) self.set_transient_for(qltk.get_top_parent(cbes)) self.connect_object('destroy', self.__finish, cbes) self.value.set_text(cbes.get_child().get_text()) def fill_values(self): for row in self.cbes.get_model(): if row[2] is not None: break else: self.model.append((row[0], row[1])) def __finish(self, cbes): cbes_model = cbes.get_model() iter = cbes_model.get_iter_first() while cbes_model[iter][2] is None: cbes_model.remove(iter) iter = cbes_model.get_iter_first() for row in self.model: cbes_model.insert_before(iter, row=[row[0], row[1], None]) cbes.write() class StandaloneEditor(_KeyValueEditor): """A key-value pair editor that can be used without CBES. Saves to disk in a single file of the same format with suffix '.saved' """ # Make this editor a bit bigger _WIDTH = 500 _HEIGHT = 350 @classmethod def load_values(cls, filename): """Returns a list of tuples representing k,v pairs of the given file""" ret = [] if os.path.exists(filename): fileobj = file(filename, "rU") lines = list(fileobj.readlines()) for i in range(len(lines) / 2): ret.append((lines[i * 2 + 1].strip(), lines[i * 2].strip())) return ret def __init__(self, filename, title, initial=None, validator=None): self.filename = filename self.initial = initial or [] super(StandaloneEditor, self).__init__(title, validator) self.connect_object('destroy', self.write, True) def fill_values(self): filename = self.filename + ".saved" if os.path.exists(filename): fileobj = file(filename, "rU") lines = list(fileobj.readlines()) lines.reverse() while len(lines) > 1: self.model.prepend( row=[lines.pop(1).strip(), lines.pop(0).strip()]) if not len(self.model) and self.initial: #print_d("None found - using defaults.", context=self) for (k, v) in self.initial: self.model.append(row=[v.strip(), k.strip()]) def write(self, create=True): """Save to a filename. If create is True, any needed parent directories will be created.""" try: if create: if not os.path.isdir(os.path.dirname(self.filename)): os.makedirs(os.path.dirname(self.filename)) saved = file(self.filename + ".saved", "w") for row in self.model: saved.write(row[0] + "\n") saved.write(row[1] + "\n") saved.close() except EnvironmentError: pass ICONS = {Gtk.STOCK_EDIT: CBESEditor} class ComboBoxEntrySave(Gtk.ComboBox): """A ComboBoxEntry that remembers the past 'count' strings entered, and can save itself to (and load itself from) a filename or file-like.""" # gets emited if the text entry changes # mainly to filter out model changes that don't have any effect __gsignals__ = { 'text-changed': (GObject.SignalFlags.RUN_LAST, None, ()), } __models = {} __last = "" def __init__(self, filename=None, initial=[], count=5, id=None, validator=None, title=_("Saved Values"), edit_title=_("Edit saved values...")): self.count = count self.filename = filename id = filename or id try: model = self.__models[id] except KeyError: model = type(self).__models[id] = Gtk.ListStore(str, str, str) super(ComboBoxEntrySave, self).__init__( model=model, entry_text_column=0, has_entry=True) self.clear() render = Gtk.CellRendererPixbuf() self.pack_start(render, False) self.add_attribute(render, 'stock-id', 2) render = Gtk.CellRendererText() self.pack_start(render, True) self.add_attribute(render, 'text', 1) self.set_row_separator_func(self.__separator_func, None) if not len(model): self.__fill(filename, initial, edit_title) self.remove(self.get_child()) self.add(entry.ValidatingEntry(validator)) self.connect_object('destroy', self.set_model, None) self.connect_object('changed', self.__changed, model, validator, title) def enable_clear_button(self): self.get_child().enable_clear_button() def __changed(self, model, validator, title): iter = self.get_active_iter() if iter: if model[iter][2] in ICONS: self.get_child().set_text(self.__last) Kind = ICONS[model[iter][2]] Kind(self, title, validator) self.set_active(-1) else: self.__focus_entry() new = self.get_child().get_text() if new != self.__last: self.emit("text-changed") self.__last = new def __focus_entry(self): self.get_child().grab_focus() self.get_child().emit('move-cursor', Gtk.MovementStep.BUFFER_ENDS, 0, False) def __fill(self, filename, initial, edit_title): model = self.get_model() model.append(row=["", edit_title, Gtk.STOCK_EDIT]) model.append(row=[None, None, None]) if filename is None: return if os.path.exists(filename + ".saved"): fileobj = file(filename + ".saved", "rU") lines = list(fileobj.readlines()) lines.reverse() while len(lines) > 1: model.prepend( row=[lines.pop(1).strip(), lines.pop(0).strip(), None]) if os.path.exists(filename): for line in file(filename, "rU").readlines(): line = line.strip() model.append(row=[line, line, None]) for c in initial: model.append(row=[c, c, None]) self.__shorten() def __separator_func(self, model, iter, userdata): return model[iter][1] is None def __shorten(self): model = self.get_model() for row in model: if row[0] is None: offset = row.path.get_indices()[0] + 1 break to_remove = (len(model) - offset) - self.count while to_remove > 0: model.remove(model.get_iter((len(model) - 1,))) to_remove -= 1 def write(self, filename=None, create=True): """Save to a filename. If create is True, any needed parent directories will be created.""" if filename is None: filename = self.filename try: if create: if not os.path.isdir(os.path.dirname(filename)): os.makedirs(os.path.dirname(filename)) saved = file(filename + ".saved", "w") memory = file(filename, "w") target = saved for row in self.get_model(): if row[0] is None: target = memory elif row[2] is None: target.write(row[0] + "\n") if target is saved: target.write(row[1] + "\n") saved.close() memory.close() except EnvironmentError: pass def __remove_if_present(self, text): # Removes an item from the list if it's present in the remembered # values, or returns true if it's in the saved values. removable = False model = self.get_model() for row in model: if row[0] is None: # Not found in the saved values, so if we find it from now # on, remove it and return false. removable = True elif row[2] is None and row[0] == text: # Found the value, and it's not the magic value -- remove # it if necessary, and return whether or not to continue. if removable: model.remove(row.iter) return not removable def prepend_text(self, text): # If we find the value in the saved values, don't prepend it. if self.__remove_if_present(text): return model = self.get_model() for row in model: if row[0] is None: model.insert_after(row.iter, row=[text, text, None]) break self.__shorten() ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/sliderbutton.py������������������������������������������������������0000644�0001750�0001750�00000014624�12173213426�021775� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig, Michael Urman # 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, Gdk from quodlibet.qltk import get_top_parent, gtk_version class PrimaryWarpsRange(Gtk.Range): """A GtkRange which behaves as if gtk-primary-button-warps-slider was always True. Adjusts key events depending on the current settings value. """ def __init__(self, *args, **kwargs): super(PrimaryWarpsRange, self).__init__(*args, **kwargs) self.connect("button-press-event", self.__button_event) self.connect("button-release-event", self.__button_event) @property def _warps(self): settings = Gtk.Settings.get_default() if settings: try: return settings.get_property("gtk-primary-button-warps-slider") except TypeError: pass return False def __button_event(self, widget, event): if not self._warps: event.button = event.button % 3 + 1 return False class PrimaryWarpsScale(Gtk.Scale, PrimaryWarpsRange): pass class _PopupSlider(Gtk.EventBox): # Based on the Rhythmbox volume control button; thanks to Colin Walters, # Richard Hult, Michael Fulbright, Miguel de Icaza, and Federico Mena. def __init__(self, child=None, adj=None, req=None): super(_PopupSlider, self).__init__() button = Gtk.Button() if child: button.add(child) self.add(button) button.connect('clicked', self.__clicked) self.show_all() window = self.__window = Gtk.Window(Gtk.WindowType.POPUP) self.__adj = adj or self._adj frame = Gtk.Frame() frame.set_border_width(0) frame.set_shadow_type(Gtk.ShadowType.OUT) self.add_events(Gdk.EventMask.SCROLL_MASK) hscale = PrimaryWarpsScale(adjustment=self.__adj) hscale.set_orientation(self.ORIENTATION) hscale.set_size_request(*(req or self._req)) window.connect('button-press-event', self.__button) window.connect('key-press-event', self.__key) hscale.set_draw_value(False) self.scale = hscale window.add(frame) frame.add(hscale) self.connect('scroll-event', self.__scroll, hscale) # forward scroll event to the button def foward_scroll(scale, event): self.emit('scroll-event', event.copy()) window.connect('scroll-event', foward_scroll) # ignore scroll events on the scale, the window handles it instead self.scale.connect('scroll-event', lambda *x: True) # handle all unhandled button events on the scale # so only events not on the scale hide the window def handle_all(scale, event): return True self.scale.connect_after('button-press-event', handle_all) self.scale.connect_after('button-release-event', handle_all) def _move_to(self, x, y, w, h, ww, wh, pad=3): raise NotImplementedError def __clicked(self, button): if self.__window.get_property('visible'): return window = self.__window button = self.get_child() frame = window.get_child() frame.show_all() window.size_request() dummy, x, y = self.get_window().get_origin() button_alloc = button.get_allocation() w, h = button_alloc.width, button_alloc.height ww, wh = window.get_size() sx, sy = self._move_to(x, y, w, h, ww, wh, pad=3) window.set_transient_for(get_top_parent(self)) window.move(sx, sy) window.show() window.grab_focus() window.grab_add() event_time = Gtk.get_current_event_time() pointer = Gdk.pointer_grab( window.get_window(), True, Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.BUTTON_MOTION_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.SCROLL_MASK, None, None, event_time) keyboard = Gdk.keyboard_grab(window.get_window(), True, event_time) grab_sucess = Gdk.GrabStatus.SUCCESS if pointer != grab_sucess or keyboard != grab_sucess: window.grab_remove() window.hide() if pointer == Gdk.GrabStatus.SUCCESS: Gdk.pointer_ungrab(event_time) if keyboard == Gdk.GrabStatus.SUCCESS: Gdk.keyboard_ungrab(event_time) def __scroll(self, widget, ev, hscale): adj = self.__adj v = hscale.get_value() if ev.direction in self.UP: v += adj.props.step_increment elif ev.direction in self.DOWN: v -= adj.props.step_increment else: # newer Gdk.ScrollDirection.SMOOTH return v = min(adj.props.upper, max(adj.props.lower, v)) hscale.set_value(v) def __button(self, widget, ev): self.__popup_hide() def __key(self, hscale, ev): if ev.string in ["\n", "\r", " ", "\x1b"]: # enter, space, escape self.__popup_hide() def __popup_hide(self): window = self.__window event_time = Gtk.get_current_event_time() window.grab_remove() Gdk.pointer_ungrab(event_time) Gdk.keyboard_ungrab(event_time) window.hide() #gtk3.8 bug: https://bugzilla.gnome.org/show_bug.cgi?id=700185 window.unrealize() class HSlider(_PopupSlider): ORIENTATION = Gtk.Orientation.HORIZONTAL _req = (200, -1) _adj = Gtk.Adjustment(0, 0, 0, 3, 15, 0) UP = [Gdk.ScrollDirection.DOWN, Gdk.ScrollDirection.RIGHT] DOWN = [Gdk.ScrollDirection.UP, Gdk.ScrollDirection.LEFT] def _move_to(self, x, y, w, h, ww, wh, pad=3): if Gtk.Widget.get_default_direction() == Gtk.TextDirection.LTR: return ((x + w + pad), (y + (h - wh) // 2)) else: return ((x - (ww + pad)), (y + (h - wh) // 2)) class VSlider(_PopupSlider): ORIENTATION = Gtk.Orientation.VERTICAL _req = (-1, 170) _adj = Gtk.Adjustment(0, 0, 1, 0.05, 0.1, 0) UP = [Gdk.ScrollDirection.UP, Gdk.ScrollDirection.LEFT] DOWN = [Gdk.ScrollDirection.DOWN, Gdk.ScrollDirection.RIGHT] def _move_to(self, x, y, w, h, ww, wh, pad=3): return ((x + (w - ww) // 2), y + h + pad) ������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/info.py��������������������������������������������������������������0000644�0001750�0001750�00000012125�12173213426�020204� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # 2011-2013 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from gi.repository import Gtk from gi.repository import Pango from quodlibet import const from quodlibet import qltk from quodlibet import browsers from quodlibet.util.dprint import print_d from quodlibet.qltk.properties import SongProperties from quodlibet.qltk.information import Information from quodlibet.qltk.ratingsmenu import RatingsMenuItem from quodlibet.qltk.x import SeparatorMenuItem from quodlibet.parse import XMLFromPattern from quodlibet.qltk.textedit import PatternEdit class SongInfo(Gtk.Label): _pattern = ("""\ \\<span weight='bold' size='large'\\><title>\\</span\\>\ <~length| (<~length>)><version| \\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people| %(people)s><album| \\<b\\><album>\\</b\\><discnumber| - %(disc)s>\ <discsubtitle| - \\<b\\><discsubtitle>\\</b\\>><tracknumber| - %(track)s>>""" % { # Translators: As in "by Artist Name" "people": _("by %s") % "<~people>", "disc": _("Disc %s") % "<discnumber>", "track": _("Track %s") % "<tracknumber>" }) __PATTERN_FILENAME = os.path.join(const.USERDIR, "songinfo") def __init__(self, library, player): super(SongInfo, self).__init__() self.set_ellipsize(Pango.EllipsizeMode.MIDDLE) self.set_selectable(True) self.set_alignment(0.0, 0.0) library.connect_object('changed', self.__check_change, player) player.connect('song-started', self.__check_started) self.connect_object('populate-popup', self.__menu, player, library) try: self._pattern = file(self.__PATTERN_FILENAME).read().rstrip() except EnvironmentError: pass self._compiled = XMLFromPattern(self._pattern) def __menu(self, player, menu, library): try: # Get a real sub-menu, unless there's no song, in which case an # empty one looks more consistent than None submenu = (browsers.playlists.Menu([player.song], self) if player.song else Gtk.Menu()) except AttributeError, e: print_d(e) else: b = qltk.MenuItem(_("_Add to Playlist"), Gtk.STOCK_ADD) b.set_sensitive(player.song is not None and player.song.can_add) b.set_submenu(submenu) b.show_all() sep = SeparatorMenuItem() menu.prepend(sep) sep.show() menu.prepend(b) # Issue 298 - Rate current playing song sep = SeparatorMenuItem() menu.prepend(sep) sep.show() rating = RatingsMenuItem([player.song], library) rating.set_sensitive(bool(player.song)) rating.show() menu.prepend(rating) item = qltk.MenuItem(_("_Edit Display..."), Gtk.STOCK_EDIT) item.show() item.connect_object('activate', self.__edit, player) menu.append(item) sep = SeparatorMenuItem() menu.append(sep) sep.show() props = qltk.MenuItem(_("Edit _Tags"), Gtk.STOCK_PROPERTIES) props.connect_object('activate', SongProperties, library, [player.info], self) props.show() props.set_sensitive(bool(player.song)) menu.append(props) info = Gtk.ImageMenuItem(Gtk.STOCK_INFO, use_stock=True) info.connect_object('activate', Information, library, [player.info], self) info.show() menu.append(info) info.set_sensitive(bool(player.song)) def __edit(self, player): editor = PatternEdit(self, SongInfo._pattern) editor.text = self._pattern editor.apply.connect_object('clicked', self.__set, editor, player) def __set(self, edit, player): self._pattern = edit.text.rstrip() if self._pattern == SongInfo._pattern: try: os.unlink(self.__PATTERN_FILENAME) except OSError: pass else: pattern_file = file(os.path.join(const.USERDIR, "songinfo"), "w") pattern_file.write(self._pattern + "\n") pattern_file.close() self._compiled = XMLFromPattern(self._pattern) self.__update_info(player) def __check_change(self, player, songs): if player.info in songs: self.__update_info(player) def __check_started(self, player, song): self.__update_info(player) def __update_info(self, player, last=None): last = last or {} text = ("<span size='xx-large'>%s</span>" % _("Not playing") if player.info is None else self._compiled % player.info) # some radio streams update way too often and updating the label # destroys the text selection if text not in last: self.set_markup(text) last.clear() last[text] = True �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/views.py�������������������������������������������������������������0000644�0001750�0001750�00000066470�12173213426�020422� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig, Michael Urman # 2012, 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, Gdk, GObject, Pango, GLib import cairo from quodlibet import config from quodlibet.qltk import get_top_parent, is_accel class TreeViewHints(Gtk.Window): """Handle 'hints' for treeviews. This includes expansions of truncated columns, and in the future, tooltips.""" # input_shape_combine_region does not work under Windows, we have # to pass all events to the treeview. In case it does work, this handlers # will never be called. __gsignals__ = dict.fromkeys( ['button-press-event', 'button-release-event', 'motion-notify-event', 'scroll-event'], 'override') def __init__(self): super(TreeViewHints, self).__init__(Gtk.WindowType.POPUP) self.__label = label = Gtk.Label() label.set_alignment(0, 0.5) label.show() label.set_ellipsize(Pango.EllipsizeMode.NONE) self.add(label) self.add_events( Gdk.EventMask.BUTTON_MOTION_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.KEY_PRESS_MASK | Gdk.EventMask.KEY_RELEASE_MASK | Gdk.EventMask.ENTER_NOTIFY_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK | Gdk.EventMask.SCROLL_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.POINTER_MOTION_HINT_MASK) context = self.get_style_context() context.add_class("tooltip") self.set_resizable(False) self.set_name("gtk-tooltip") self.set_border_width(1) self.connect('leave-notify-event', self.__undisplay) self.__handlers = {} self.__current_path = self.__current_col = None self.__current_renderer = None self.__view = None def connect_view(self, view): self.__handlers[view] = [ view.connect('motion-notify-event', self.__motion), view.connect('scroll-event', self.__undisplay), view.connect('key-press-event', self.__undisplay), view.connect('focus-out-event', self.__undisplay), view.connect('unmap', self.__undisplay), view.connect('destroy', self.disconnect_view), ] def disconnect_view(self, view): try: for handler in self.__handlers[view]: view.disconnect(handler) del self.__handlers[view] except KeyError: pass # Hide if the active treeview is going away if view is self.__view: self.__undisplay() def __motion(self, view, event): label = self.__label # trigger over row area, not column headers if event.window is not view.get_bin_window(): self.__undisplay() return # hide if any modifier is active if event.get_state() & Gtk.accelerator_get_default_mod_mask(): self.__undisplay() return # get the cell at the mouse position x, y = map(int, [event.x, event.y]) try: path, col, cellx, celly = view.get_path_at_pos(x, y) except TypeError: # no hints where no rows exist self.__undisplay() return area = view.get_cell_area(path, col) # make sure we are on the same level if x < area.x: self.__undisplay() return # hide for partial hidden rows at the bottom if y > view.get_visible_rect().height: self.__undisplay() return # get the renderer at the mouse position and get the xpos/width renderers = col.get_cells() pos = sorted(zip(map(col.cell_get_position, renderers), renderers)) pos = filter(lambda ((x, w), r): x < cellx, pos) if not pos: self.__undisplay() return (render_offset, render_width), renderer = pos[-1] if self.__current_renderer == renderer and self.__current_path == path: return else: self.__undisplay() # only ellipsized text renderers if not isinstance(renderer, Gtk.CellRendererText): return if renderer.get_property('ellipsize') == Pango.EllipsizeMode.NONE: return # don't display if the renderer is in editing mode if renderer.props.editing: return # set the cell renderer attributes for the active cell model = view.get_model() col.cell_set_cell_data(model, model.get_iter(path), False, False) # the markup attribute is write only, so the markup text needs # to be saved on the python side, so we can copy it to the label markup = getattr(renderer, "markup", None) if markup is None: label.set_text(renderer.get_property('text')) else: # markup can also be column index if isinstance(markup, int): markup = model[path][markup] label.set_markup(markup) # Use the renderer padding as label padding so the text offset matches render_xpad = renderer.get_property("xpad") label.set_ellipsize(Pango.EllipsizeMode.NONE) label.set_padding(render_xpad, 0) # size_request makes sure the layout size got updated label.size_request() label_width = label.get_layout().get_pixel_size()[0] label_width += label.get_layout_offsets()[0] or 0 # layout offset includes the left padding, so add one more label_width += render_xpad # CellRenderer width is too large if it's the last one in a column. # Use cell_area width as a maximum and limit render_width. max_width = view.get_cell_area(path, col).width if render_width + render_offset > max_width: render_width = max_width - render_offset # don't display if it doesn't need expansion if label_width < render_width: return dummy, ox, oy = view.get_window().get_origin() # save for adjusting passthrough events self.__dx, self.__dy = area.x + render_offset, area.y # final window coordinates/size x = ox + area.x + render_offset y = oy + area.y x, y = view.convert_bin_window_to_widget_coords(x, y) w = label_width h = area.height # clip on the right if it's bigger than the screen screen_border = 5 # leave some space space_right = Gdk.Screen.width() - x - w - screen_border if space_right < 0: w += space_right label.set_ellipsize(Pango.EllipsizeMode.END) else: label.set_ellipsize(Pango.EllipsizeMode.NONE) # Don't show if the resulting tooltip would be smaller # than the visible area (if not all is on the display) if w < render_width: return # reject if cursor isn't above hint x_root, y_root = map(int, [event.x_root, event.y_root]) if not((x <= x_root < x + w) and (y <= y_root < y + h)): return self.__view = view self.__current_renderer = renderer self.__edit_id = renderer.connect('editing-started', self.__undisplay) self.__current_path = path self.__current_col = col self.set_size_request(w, h) self.resize(w, h) self.move(x, y) self.show() def __undisplay(self, *args): if not self.__view: return if self.__current_renderer and self.__edit_id: self.__current_renderer.disconnect(self.__edit_id) self.__current_renderer = self.__edit_id = None self.__current_path = self.__current_col = None self.__view = None self.hide() def __event(self, event): if not self.__view: return True # hack: present the main window on key press if event.type == Gdk.EventType.BUTTON_PRESS: # hack: present is overridden to present all windows. # bypass to only select one Gtk.Window.present(get_top_parent(self.__view)) type_ = event.type real_event = None if type_ == Gdk.EventType.BUTTON_PRESS: real_event = event.button elif type_ == Gdk.EventType.BUTTON_RELEASE: real_event = event.button elif type_ == Gdk.EventType.MOTION_NOTIFY: real_event = event.motion if real_event: real_event.x += self.__dx real_event.y += self.__dy # modifying event.window is a necessary evil, made okay because # nobody else should tie to any TreeViewHints events ever. event.any.window = self.__view.get_bin_window() event.put() return True def do_button_press_event(self, event): return self.__event(event) def do_button_release_event(self, event): return self.__event(event) def do_motion_notify_event(self, event): return self.__event(event) def do_scroll_event(self, event): return self.__event(event) class DragScroll(object): """A treeview mixin for smooth drag and scroll (needs BaseView). Call scroll_motion in the 'drag-motion' handler and scroll_disable in the 'drag-leave' handler. """ __scroll_delay = None __scroll_periodic = None __scroll_args = (0, 0, 0, 0) __scroll_length = 0 __scroll_last = None def __enable_scroll(self): """Start scrolling if it hasn't already""" if self.__scroll_periodic is not None or \ self.__scroll_delay is not None: return def periodic_scroll(): """Get the tree coords for 0,0 and scroll from there""" wx, wy, dist, ref = self.__scroll_args x, y = self.convert_widget_to_tree_coords(0, 0) x, y = self.convert_bin_window_to_widget_coords(x, y) # We reached an end, stop if self.__scroll_last == y: self.scroll_disable() return self.__scroll_last = y # If we went full speed for a while.. speed up # .. every number is made up here if self.__scroll_length >= 50 * ref: dist *= self.__scroll_length / (ref * 10) if self.__scroll_length < 2000 * ref: self.__scroll_length += abs(dist) self.scroll_to_point(-1, y + dist) self.set_drag_dest(wx, wy) # we have to re-add the timeout.. otherwise they could add up # because scroll can last longer than 50ms GLib.source_remove(self.__scroll_periodic) enable_periodic_scroll() def enable_periodic_scroll(): self.__scroll_periodic = GLib.timeout_add(50, periodic_scroll) self.__scroll_delay = GLib.timeout_add(350, enable_periodic_scroll) def scroll_disable(self): """Disable all scrolling""" if self.__scroll_periodic is not None: GLib.source_remove(self.__scroll_periodic) self.__scroll_periodic = None if self.__scroll_delay is not None: GLib.source_remove(self.__scroll_delay) self.__scroll_delay = None self.__scroll_length = 0 self.__scroll_last = None def scroll_motion(self, x, y): """Call with current widget coords during a dnd action to update scrolling speed""" visible_rect = self.get_visible_rect() if visible_rect is None: self.scroll_disable() return # I guess the bin to visible_rect difference is the header height # but this could be wrong start = self.convert_bin_window_to_widget_coords(0, 0)[1] end = visible_rect.height + start # Get the font height as size reference reference = self.create_pango_layout("").get_pixel_size()[1] # If the drag is in the scroll area, adjust the speed scroll_offset = int(reference * 3) in_upper_scroll = (start < y < start + scroll_offset) in_lower_scroll = (y > end - scroll_offset) # thanks TI200 accel = lambda x: int(1.1 ** (x * 12 / reference)) - (x / reference) if in_lower_scroll: diff = accel(y - end + scroll_offset) elif in_upper_scroll: diff = - accel(start + scroll_offset - y) else: self.scroll_disable() return # The area where we can go to full speed full_offset = int(reference * 0.8) in_upper_full = (start < y < start + full_offset) in_lower_full = (y > end - full_offset) if not in_upper_full and not in_lower_full: self.__scroll_length = 0 # For the periodic scroll function self.__scroll_args = (x, y, diff, reference) # The area to trigger a scroll is a bit smaller trigger_offset = int(reference * 2.5) in_upper_trigger = (start < y < start + trigger_offset) in_lower_trigger = (y > end - trigger_offset) if in_upper_trigger or in_lower_trigger: self.__enable_scroll() class BaseView(Gtk.TreeView): def __init__(self, *args, **kwargs): super(BaseView, self).__init__(*args, **kwargs) self.connect("key-press-event", self.__key_pressed) def __key_pressed(self, view, event): def get_first_selected(): selection = self.get_selection() model, paths = selection.get_selected_rows() return paths and paths[0] or None if is_accel(event, "Right") or is_accel(event, "<ctrl>Right"): first = get_first_selected() if first: self.expand_row(first, False) elif is_accel(event, "Left") or is_accel(event, "<ctrl>Left"): first = get_first_selected() if first: if self.row_expanded(first): self.collapse_row(first) else: # if we can't collapse, move the selection to the parent, # so that a second attempt collapses the parent model = self.get_model() parent = model.iter_parent(model.get_iter(first)) if parent: self.set_cursor(model.get_path(parent)) def remove_paths(self, paths): """Remove rows and restore the selection if it got removed""" self.remove_iters(map(self.get_model().get_iter, paths)) def remove_iters(self, iters): """Remove rows and restore the selection if it got removed""" self.__remove_iters(iters) def remove_selection(self): """Remove all currently selected rows and select the position of the first removed one.""" selection = self.get_selection() mode = selection.get_mode() if mode in (Gtk.SelectionMode.SINGLE, Gtk.SelectionMode.BROWSE): model, iter_ = selection.get_selected() if iter_: self.__remove_iters([iter_], force_restore=True) elif mode == Gtk.SelectionMode.MULTIPLE: model, paths = selection.get_selected_rows() iters = map(model.get_iter, paths or []) self.__remove_iters(iters, force_restore=True) def select_by_func(self, func, scroll=True, one=False): """Calls func with every Gtk.TreeModelRow in the model and selects it if func returns True. In case func never returned True, the selection will not be changed. Returns True if the selection was changed.""" selection = self.get_selection() first = True for row in self.get_model(): if func(row): if not first: selection.select_path(row.path) continue self.set_cursor(row.path) if scroll: self.scroll_to_cell(row.path, use_align=True, row_align=0.5) first = False if one: break return not first def set_drag_dest(self, x, y, into_only=False): """Sets a drag destination for widget coords into_only will only highlight rows or the whole widget and no lines between rows. """ dest_row = self.get_dest_row_at_pos(x, y) if dest_row is None: rows = len(self.get_model()) if not rows: (self.get_parent() or self).drag_highlight() else: self.set_drag_dest_row(Gtk.TreePath(rows - 1), Gtk.TreeViewDropPosition.AFTER) else: path, pos = dest_row if into_only: if pos == Gtk.TreeViewDropPosition.BEFORE: pos = Gtk.TreeViewDropPosition.INTO_OR_BEFORE elif pos == Gtk.TreeViewDropPosition.AFTER: pos = Gtk.TreeViewDropPosition.INTO_OR_AFTER self.set_drag_dest_row(path, pos) def __remove_iters(self, iters, force_restore=False): if not iters: return selection = self.get_selection() model = self.get_model() if force_restore: for iter_ in iters: model.remove(iter_) else: old_count = selection.count_selected_rows() for iter_ in iters: model.remove(iter_) # only restore a selection if all selected rows are gone afterwards if not old_count or selection.count_selected_rows(): return # model.remove makes the removed iter point to the next row if possible # so check if the last iter is a valid one and select it or # simply select the last row if model.iter_is_valid(iters[-1]): selection.select_iter(iters[-1]) elif len(model): selection.select_path(model[-1].path) class DragIconTreeView(BaseView): """TreeView that sets the selected rows as drag icons - Drag icons include 3 rows/2 plus a "and more" count """ def __init__(self, *args, **kwargs): super(DragIconTreeView, self).__init__(*args, **kwargs) self.connect('drag-begin', self.__begin) def __begin(self, view, drag_ctx): model, paths = self.get_selection().get_selected_rows() if not paths: return MAX = 3 icons = map(self.create_row_drag_icon, paths[:MAX]) if len(icons) == 1: Gtk.drag_set_icon_surface(drag_ctx, icons[0]) return width = max([s.get_width() for s in icons]) height = sum([s.get_height() for s in icons]) layout = None if len(paths) > MAX: more = _("and %d more...") % (len(paths) - MAX) more = "<i>%s</i>" % more layout = self.create_pango_layout("") layout.set_markup(more) layout.set_alignment(Pango.Alignment.CENTER) layout.set_width(Pango.SCALE * (width - 2)) lw, lh = layout.get_pixel_size() height += lh height += 6 # padding surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) ctx = cairo.Context(surface) # render background style_ctx = self.get_style_context() Gtk.render_background(style_ctx, ctx, 0, 0, width, height) # render rows count_y = 0 for icon in icons: ctx.save() icon_width = icon.get_width() icon_height = icon.get_height() ctx.set_source_surface(icon, 2, count_y + 2) ctx.rectangle(2, count_y + 2, icon_width - 4, icon_height - 4) ctx.clip() ctx.paint() ctx.restore() count_y += icon_height if layout: Gtk.render_layout(style_ctx, ctx, 1, count_y, layout) # render border Gtk.render_line(style_ctx, ctx, 0, 0, 0, height - 1) Gtk.render_line(style_ctx, ctx, 0, height - 1, width - 1, height - 1) Gtk.render_line(style_ctx, ctx, width - 1, height - 1, width - 1, 0) Gtk.render_line(style_ctx, ctx, width - 1, 0, 0, 0) Gtk.drag_set_icon_surface(drag_ctx, surface) class MultiDragTreeView(BaseView): """TreeView with multirow drag support: - Selections don't change until button-release-event... - Unless they're a Shift/Ctrl modification, then they happen immediately - Drag icons include 3 rows/2 plus a "and more" count """ def __init__(self, *args, **kwargs): super(MultiDragTreeView, self).__init__(*args, **kwargs) self.connect('button-press-event', self.__button_press) self.connect('button-release-event', self.__button_release) self.__pending_event = None def __button_press(self, view, event): if event.button == 1: return self.__block_selection(event) def __block_selection(self, event): x, y = map(int, [event.x, event.y]) try: path, col, cellx, celly = self.get_path_at_pos(x, y) except TypeError: return True self.grab_focus() selection = self.get_selection() is_selected = selection.path_is_selected(path) mod_active = event.get_state() & ( Gdk.ModifierType.CONTROL_MASK | Gdk.ModifierType.SHIFT_MASK) if is_selected and not mod_active: self.__pending_event = [x, y] selection.set_select_function(lambda *args: False, None) elif event.type == Gdk.EventType.BUTTON_PRESS: self.__pending_event = None selection.set_select_function(lambda *args: True, None) def __button_release(self, view, event): if self.__pending_event: selection = self.get_selection() selection.set_select_function(lambda *args: True, None) oldevent = self.__pending_event self.__pending_event = None x, y = map(int, [event.x, event.y]) if oldevent != [x, y]: return True try: path, col, cellx, celly = self.get_path_at_pos(x, y) except TypeError: return True self.set_cursor(path, col, 0) class RCMTreeView(BaseView): """Emits popup-menu when a row is right-clicked on.""" def __init__(self, *args): super(RCMTreeView, self).__init__(*args) self.connect('button-press-event', self.__button_press) def __button_press(self, view, event): if event.button == 3: return self.__check_popup(event) def __check_popup(self, event): x, y = map(int, [event.x, event.y]) try: path, col, cellx, celly = self.get_path_at_pos(x, y) except TypeError: return True self.grab_focus() selection = self.get_selection() if not selection.path_is_selected(path): self.set_cursor(path, col, 0) else: col.focus_cell(col.get_cells()[0]) self.__position_at_mouse = True self.emit('popup-menu') return True def ensure_popup_selection(self): try: self.__position_at_mouse except AttributeError: path, col = self.get_cursor() if path is None: return False self.scroll_to_cell(path, col) # ensure current cursor path is selected, just like right-click selection = self.get_selection() if not selection.path_is_selected(path): selection.unselect_all() selection.select_path(path) return True def popup_menu(self, menu, button, time): try: del self.__position_at_mouse except AttributeError: # suppress menu if the cursor isn't on a real path if not self.ensure_popup_selection(): return False pos_func = self.__popup_position else: pos_func = None menu.popup(None, None, pos_func, None, button, time) return True def __popup_position(self, menu, *args): path, col = self.get_cursor() if col is None: col = self.get_column(0) # get a rectangle describing the cell render area (assume 3 px pad) rect = self.get_cell_area(path, col) rect.x += 3 rect.width -= 6 rect.y += 3 rect.height -= 6 dummy, dx, dy = self.get_window().get_origin() dy += self.get_bin_window().get_position()[1] # fit menu to screen, aligned per text direction screen_width = Gdk.Screen.width() screen_height = Gdk.Screen.height() menu.realize() ma = menu.get_allocation() menu_y = rect.y + rect.height + dy if menu_y + ma.height > screen_height and rect.y + dy - ma.height > 0: menu_y = rect.y + dy - ma.height if Gtk.Widget.get_default_direction() == Gtk.TextDirection.LTR: menu_x = min(rect.x + dx, screen_width - ma.width) else: menu_x = max(0, rect.x + dx - ma.width + rect.width) return (menu_x, menu_y, True) # x, y, move_within_screen class HintedTreeView(BaseView): """A TreeView that pops up a tooltip when you hover over a cell that contains ellipsized text.""" def __init__(self, *args): super(HintedTreeView, self).__init__(*args) if not config.state('disable_hints'): try: tvh = HintedTreeView.hints except AttributeError: tvh = HintedTreeView.hints = TreeViewHints() tvh.connect_view(self) class TreeViewColumn(Gtk.TreeViewColumn): def __init__(self, title="", *args, **kwargs): super(TreeViewColumn, self).__init__(None, *args, **kwargs) label = Gtk.Label(label=title) label.set_padding(1, 1) label.show() self.set_widget(label) def set_use_markup(self, value): widget = self.get_widget() if isinstance(widget, Gtk.Label): widget.set_use_markup(value) class TreeViewColumnButton(TreeViewColumn): """A TreeViewColumn that forwards its header events: button-press-event and popup-menu""" __gsignals__ = { 'button-press-event': (GObject.SignalFlags.RUN_LAST, None, (object,)), 'popup-menu': (GObject.SignalFlags.RUN_LAST, None, ()), } def __init__(self, title="", *args, **kw): super(TreeViewColumnButton, self).__init__(title, *args, **kw) label = self.get_widget() label.__realize = label.connect('realize', self.__connect_menu_event) def __connect_menu_event(self, widget): widget.disconnect(widget.__realize) del widget.__realize button = widget.get_ancestor(Gtk.Button) if button: button.connect('button-press-event', self.button_press_event) button.connect('popup-menu', self.popup_menu) def button_press_event(self, widget, event): self.emit('button-press-event', event) def popup_menu(self, widget): self.emit('popup-menu') return True class RCMHintedTreeView(HintedTreeView, RCMTreeView, DragIconTreeView): """A TreeView that has hints and a context menu.""" pass class AllTreeView(HintedTreeView, RCMTreeView, DragIconTreeView, MultiDragTreeView): """A TreeView that has hints, a context menu, and multi-selection dragging support.""" pass ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/delete.py������������������������������������������������������������0000644�0001750�0001750�00000010716�12173213426�020517� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig, Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from gi.repository import Gtk from quodlibet import const from quodlibet import util from quodlibet.util import trash from quodlibet.qltk import get_top_parent from quodlibet.qltk.msg import ErrorMessage from quodlibet.qltk.wlw import WaitLoadWindow from quodlibet.qltk.x import Button class DeleteDialog(Gtk.Dialog): def __init__(self, parent, files, asktrash=True, askonly=False): super(DeleteDialog, self).__init__( _("Delete Files"), get_top_parent(parent)) self.set_border_width(6) self.vbox.set_spacing(6) self.action_area.set_border_width(0) self.set_resizable(False) self.__files = files if asktrash and trash.can_trash(): b = Button(_("_Move to Trash"), Gtk.STOCK_DELETE) self.add_action_widget(b, 0) self.__askonly = askonly self.add_button(Gtk.STOCK_CANCEL, 1) self.add_button(Gtk.STOCK_DELETE, 2) hbox = Gtk.HBox() hbox.set_border_width(6) i = Gtk.Image() i.set_from_stock(Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.DIALOG) i.set_padding(12, 0) i.set_alignment(0.5, 0.0) hbox.pack_start(i, False, True, 0) vbox = Gtk.VBox(spacing=6) base = os.path.basename(files[0]) if len(files) == 1: l = _("Permanently delete this file?") else: l = _("Permanently delete these files?") if len(files) == 1: exp = Gtk.Expander(label="%s" % util.fsdecode(base)) else: exp = Gtk.Expander( label=ngettext("%(title)s and %(count)d more...", "%(title)s and %(count)d more...", len(files) - 1) % {'title': util.fsdecode(base), 'count': len(files) - 1}) lab = Gtk.Label() lab.set_markup("<big><b>%s</b></big>" % l) lab.set_alignment(0.0, 0.5) vbox.pack_start(lab, False, True, 0) lab = Gtk.Label("\n".join( map(util.fsdecode, map(util.unexpand, files)))) lab.set_alignment(0.1, 0.0) exp.add(Gtk.ScrolledWindow()) exp.get_child().add_with_viewport(lab) exp.get_child().set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) exp.get_child().get_child().set_shadow_type(Gtk.ShadowType.NONE) vbox.pack_start(exp, True, True, 0) hbox.pack_start(vbox, True, True, 0) self.vbox.pack_start(hbox, True, True, 0) self.vbox.show_all() def run(self): resp = super(DeleteDialog, self).run() if self.__askonly: self.destroy() return resp if resp == 1 or resp == Gtk.ResponseType.DELETE_EVENT: return [] elif resp == 0: s = _("Moving %(current)d/%(total)d.") elif resp == 2: s = _("Deleting %(current)d/%(total)d.") else: return [] files = self.__files w = WaitLoadWindow(self, len(files), s) removed = [] if resp == 0: for filename in files: try: trash.trash(filename) except trash.TrashError: fn = util.escape(util.fsdecode(util.unexpand(filename))) ErrorMessage(self, _("Unable to move to trash"), (_("Moving <b>%s</b> to the trash failed.") % fn)).run() break removed.append(filename) w.step() else: for filename in files: try: os.unlink(filename) except EnvironmentError, s: try: s = unicode(s.strerror, const.ENCODING, 'replace') except TypeError: s = unicode(s.strerror[1], const.ENCODING, 'replace') s = "\n\n" + s fn = util.escape(util.fsdecode(util.unexpand(filename))) ErrorMessage( self, _("Unable to delete file"), (_("Deleting <b>%s</b> failed.") % fn) + s).run() break removed.append(filename) w.step() w.destroy() return removed ��������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/songsmenu.py���������������������������������������������������������0000644�0001750�0001750�00000026133�12173213426�021273� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, Gdk from quodlibet import qltk from quodlibet.util import print_exc from quodlibet.qltk.delete import DeleteDialog from quodlibet.qltk.information import Information from quodlibet.qltk.properties import SongProperties from quodlibet.qltk.x import SeparatorMenuItem from quodlibet.plugins import PluginManager from quodlibet.plugins.songsmenu import SongsMenuPlugin from quodlibet.util.songwrapper import ListWrapper, check_wrapper_changed class SongsMenuPluginHandler(object): def __init__(self): self.__plugins = [] def Menu(self, library, parent, songs): songs = ListWrapper(songs) parent = qltk.get_top_parent(parent) attrs = ['plugin_song', 'plugin_songs', 'plugin_album', 'plugin_albums'] if len(songs) == 1: attrs.append('plugin_single_song') last = (songs and songs[-1]) or None for song in songs: if song.album_key != last.album_key: break last = song else: attrs.append('plugin_single_album') items = [] kinds = self.__plugins kinds.sort(key=lambda plugin: plugin.PLUGIN_ID) for Kind in kinds: usable = max([callable(getattr(Kind, s)) for s in attrs]) if usable: try: items.append(Kind(songs, library, parent)) except: print_e("Couldn't initalise song plugin %s. Stack trace:" % Kind) print_exc() items = filter(lambda i: i.initialized, items) if items: menu = Gtk.Menu() for item in items: try: menu.append(item) args = (library, parent, songs) if item.get_submenu(): for subitem in item.get_submenu().get_children(): subitem.connect_object( 'activate', self.__handle, item, *args) else: item.connect('activate', self.__handle, *args) except: print_exc() item.destroy() else: menu = None return menu def __get_albums(self, songs): albums = {} for song in songs: key = song.album_key if key not in albums: albums[key] = [] albums[key].append(song) albums = albums.values() map(list.sort, albums) return albums def handle(self, plugin_id, library, parent, songs): """Start a song menu plugin directly without a menu""" for plugin in self.__plugins: if plugin.PLUGIN_ID == plugin_id: songs = ListWrapper(songs) try: plugin = plugin(songs, library, parent) except Exception: print_exc() else: self.__handle(plugin, library, parent, songs) return def __handle(self, plugin, library, parent, songs): if len(songs) == 0: return try: if len(songs) == 1 and callable(plugin.plugin_single_song): try: ret = plugin.plugin_single_song(songs[0]) except Exception: print_exc() else: if ret: return if callable(plugin.plugin_song): try: ret = map(plugin.plugin_song, songs) except Exception: print_exc() else: if max(ret): return if callable(plugin.plugin_songs): try: ret = plugin.plugin_songs(songs) except Exception: print_exc() else: if ret: return if max(map(callable, (plugin.plugin_single_album, plugin.plugin_album, plugin.plugin_albums))): albums = self.__get_albums(songs) if callable(plugin.plugin_single_album) and len(albums) == 1: try: ret = plugin.plugin_single_album(albums[0]) except Exception: print_exc() else: if ret: return if callable(plugin.plugin_album): try: ret = map(plugin.plugin_album, albums) except Exception: print_exc() else: if max(ret): return if callable(plugin.plugin_albums): try: ret = plugin.plugin_albums(albums) except Exception: print_exc() else: if ret: return finally: check_wrapper_changed(library, parent, filter(None, songs)) def plugin_handle(self, plugin): return issubclass(plugin, SongsMenuPlugin) def plugin_enable(self, plugin, obj): self.__plugins.append(plugin) def plugin_disable(self, plugin): self.__plugins.remove(plugin) class SongsMenu(Gtk.Menu): __accels = Gtk.AccelGroup() plugins = SongsMenuPluginHandler() @classmethod def init_plugins(cls): PluginManager.instance.register_handler(cls.plugins) def __init__(self, library, songs, plugins=True, playlists=True, queue=True, devices=True, remove=True, delete=False, edit=True, accels=None, parent=None): super(SongsMenu, self).__init__() # The library may actually be a librarian; if it is, use it, # otherwise find the real librarian. librarian = getattr(library, 'librarian', library) if plugins: submenu = self.plugins.Menu(librarian, parent, songs) if submenu is not None: b = qltk.MenuItem(_("_Plugins"), Gtk.STOCK_EXECUTE) self.append(b) b.set_submenu(submenu) self.append(SeparatorMenuItem()) in_lib = True can_add = True is_file = True for song in songs: if song not in library: in_lib = False if not song.can_add: can_add = False if not song.is_file: is_file = False self.separate() if playlists: # Needed here to avoid a circular import; most browsers use # a SongsMenu, but SongsMenu needs access to the playlist # browser for this item. # FIXME: Two things are now importing browsers, so we need # some kind of inversion of control here. from quodlibet import browsers try: submenu = browsers.playlists.Menu(songs, parent) except AttributeError: pass else: b = qltk.MenuItem(_("_Add to Playlist"), Gtk.STOCK_ADD) b.set_sensitive(can_add) b.set_submenu(submenu) self.append(b) if queue: b = qltk.MenuItem(_("Add to _Queue"), Gtk.STOCK_ADD) b.connect('activate', self.__enqueue, songs) if accels is not None: key, val = Gtk.accelerator_parse("<ctrl>Return") b.add_accelerator( 'activate', accels, key, val, Gtk.AccelFlags.VISIBLE) self.append(b) b.set_sensitive(can_add) if devices: from quodlibet import browsers try: browsers.media except AttributeError: pass else: if browsers.media.MediaDevices in browsers.browsers: submenu = browsers.media.Menu(songs, library) b = qltk.MenuItem(_("_Copy to Device"), Gtk.STOCK_COPY) b.set_sensitive(can_add and len(submenu) > 0) b.set_submenu(submenu) self.append(b) if remove or delete or edit: self.separate() if remove: b = qltk.MenuItem(_("_Remove from library"), Gtk.STOCK_REMOVE) if callable(remove): b.connect_object('activate', remove, songs) else: b.connect('activate', self.__remove, songs, library) b.set_sensitive(in_lib) self.append(b) if delete: b = Gtk.ImageMenuItem(Gtk.STOCK_DELETE, use_stock=True) if callable(delete): b.connect_object('activate', delete, songs) else: b.connect('activate', self.__delete, songs, librarian) b.set_sensitive(is_file) self.append(b) if edit: b = qltk.MenuItem(_("Edit _Tags"), Gtk.STOCK_PROPERTIES) if accels is not None: key, val = Gtk.accelerator_parse("<alt>Return") b.add_accelerator( 'activate', accels, key, val, Gtk.AccelFlags.VISIBLE) b.connect_object( 'activate', SongProperties, librarian, songs, parent) self.append(b) b = Gtk.ImageMenuItem(Gtk.STOCK_INFO, use_stock=True) if accels is not None: b.add_accelerator('activate', accels, ord('I'), Gdk.ModifierType.CONTROL_MASK, Gtk.AccelFlags.VISIBLE) b.connect_object('activate', Information, librarian, songs, parent) self.append(b) self.connect_object('selection-done', Gtk.Menu.destroy, self) def separate(self): if not self.get_children(): return elif not isinstance(self.get_children()[-1], Gtk.SeparatorMenuItem): self.append(SeparatorMenuItem()) def preseparate(self): if not self.get_children(): return elif not isinstance(self.get_children()[0], Gtk.SeparatorMenuItem): self.prepend(SeparatorMenuItem()) def __remove(self, item, songs, library): library.remove(set(songs)) def __enqueue(self, item, songs): songs = filter(lambda s: s.can_add, songs) if songs: from quodlibet import app app.window.playlist.enqueue(songs) def __delete(self, item, songs, library): songs = set(songs) files = [song["~filename"] for song in songs] d = DeleteDialog(None, files) removed = dict.fromkeys(d.run()) d.destroy() removed = filter(lambda s: s["~filename"] in removed, songs) if removed: try: library.librarian.remove(removed) except AttributeError: library.remove(removed) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/ratingsmenu.py�������������������������������������������������������0000644�0001750�0001750�00000004021�12173212464�021602� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2011, 2012 Nick Boultbee # 2005 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from quodlibet import util from quodlibet import config from quodlibet import qltk class ConfirmRateMultipleDialog(qltk.Message): def __init__(self, parent, count, value): assert count > 1 title = (_("Are you sure you want to change the " "rating of all %d songs?") % count) description = _("The rating of all selected songs will " "be changed to '%s'") % util.format_rating(value) super(ConfirmRateMultipleDialog, self).__init__( Gtk.MessageType.WARNING, parent, title, description, Gtk.ButtonsType.NONE) self.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_APPLY, Gtk.ResponseType.YES) class RatingsMenuItem(Gtk.MenuItem): __accels = Gtk.AccelGroup() def set_rating(self, value, songs, librarian): count = len(songs) if (count > 1 and config.getboolean("browsers", "rating_confirm_multiple")): dialog = ConfirmRateMultipleDialog(self, count, value) if dialog.run() != Gtk.ResponseType.YES: return for song in songs: song["~#rating"] = value librarian.changed([song]) def __init__(self, songs, library, label=_("_Rating")): super(RatingsMenuItem, self).__init__(label=label, use_underline=True) submenu = Gtk.Menu() self.set_submenu(submenu) for i in range(0, int(1.0 / util.RATING_PRECISION) + 1): i *= util.RATING_PRECISION itm = Gtk.MenuItem("%0.2f\t%s" % (i, util.format_rating(i))) submenu.append(itm) itm.connect_object('activate', self.set_rating, i, songs, library) submenu.show_all() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/wlw.py���������������������������������������������������������������0000644�0001750�0001750�00000016415�12173213426�020070� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig, Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import math import time from gi.repository import Gtk, Pango, Gdk from quodlibet.qltk import get_top_parent from quodlibet import util class WaitLoadBase(object): """Abstract class providing a label, a progressbar, pause/stop buttons, and the stepping logic.""" def __init__(self, count=0, text="", initial={}, limit=3): """count: the total amount of items expected, 0 for unknown/indefinite text: text to display in the label; may contain % formats initial: initial values for % formats (text % initial) limit: count must be greater than limit (or 0) for pause/stop to appear The current iteration of the counter can be gotten as self.current. count can be gotten as self.count. """ super(WaitLoadBase, self).__init__() self._label = Gtk.Label() self._label.set_use_markup(True) self._progress = Gtk.ProgressBar() self._progress.set_pulse_step(0.08) self.pulse = self._progress.pulse self.set_fraction = self._progress.set_fraction self.set_text = self._label.set_markup self.setup(count, text, initial) if self.count > limit or self.count == 0: # Add stop/pause buttons. count = 0 means an indefinite # number of steps. self._cancel_button = Gtk.Button(stock=Gtk.STOCK_STOP) self._pause_button = Gtk.ToggleButton(Gtk.STOCK_MEDIA_PAUSE) self._pause_button.set_use_stock(True) self._cancel_button.connect('clicked', self.__cancel_clicked) self._pause_button.connect('clicked', self.__pause_clicked) else: self._cancel_button = None self._pause_button = None def setup(self, count=0, text="", initial={}): self.current = 0 self.count = count self._text = text self.paused = False self.quit = False self._start_time = time.time() initial.setdefault("total", self.count) initial.setdefault("current", self.current) initial.setdefault("remaining", _("Unknown")) self._label.set_markup(self._text % initial) self._progress.set_fraction(0.0) def __pause_clicked(self, button): self.paused = button.get_active() def __cancel_clicked(self, button): self.quit = True def step(self, **values): """Advance the counter by one. Arguments are applied to the originally-supplied text as a format string. This function doesn't return if the dialog is paused (though the GTK main loop will still run), and returns True if stop was pressed. """ if self.count: self.current += 1 self._progress.set_fraction( max(0, min(1, self.current / float(self.count)))) else: self._progress.pulse() values.setdefault("total", self.count) values.setdefault("current", self.current) if self.count: t = (time.time() - self._start_time) / self.current remaining = math.ceil((self.count - self.current) * t) values.setdefault("remaining", util.format_time(remaining)) self._label.set_markup(self._text % values) while not self.quit and (self.paused or Gtk.events_pending()): Gtk.main_iteration() return self.quit class WaitLoadWindow(WaitLoadBase, Gtk.Window): """A window with a progress bar and some nice updating text, as well as pause/stop buttons. Example: w = WaitLoadWindow(None, 5, "%(current)d/%(total)d") for i in range(1, 6): w.step() w.destroy() """ def __init__(self, parent, *args): """parent: the parent window, or None""" super(WaitLoadWindow, self).__init__() self.setup(*args) parent = get_top_parent(parent) if parent: sig = parent.connect('configure-event', self.__recenter) self.connect_object( 'destroy', WaitLoadWindow.__disconnect, self, sig, parent) self.set_transient_for(parent) window = parent.get_window() if window: window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) self.set_modal(True) self.set_decorated(False) self.set_resizable(False) self.set_focus_on_map(False) self.add(Gtk.Frame()) self.get_child().set_shadow_type(Gtk.ShadowType.OUT) vbox = Gtk.VBox(spacing=12) vbox.set_border_width(12) self._label.set_size_request(170, -1) self._label.set_line_wrap(True) self._label.set_justify(Gtk.Justification.CENTER) vbox.pack_start(self._label, True, True, 0) vbox.pack_start(self._progress, True, True, 0) if self._cancel_button and self._pause_button: # Display a stop/pause box. count = 0 means an indefinite # number of steps. hbox = Gtk.HBox(spacing=6, homogeneous=True) hbox.pack_start(self._cancel_button, True, True, 0) hbox.pack_start(self._pause_button, True, True, 0) vbox.pack_start(hbox, True, True, 0) self.get_child().add(vbox) self.set_position(Gtk.WindowPosition.CENTER_ON_PARENT) while Gtk.events_pending(): Gtk.main_iteration() self.show_all() def __recenter(self, parent, event): x, y = parent.get_position() dx, dy = parent.get_size() dx2, dy2 = self.get_size() self.move(x + dx // 2 - dx2 // 2, y + dy // 2 - dy2 // 2) def __disconnect(self, sig, parent): if parent.get_window(): parent.get_window().set_cursor(None) parent.disconnect(sig) class WritingWindow(WaitLoadWindow): """A WaitLoadWindow that defaults to text suitable for saving files.""" def __init__(self, parent, count): super(WritingWindow, self).__init__( parent, count, (_("Saving the songs you changed.") + "\n\n" + _("%(current)d/%(total)d songs saved\n(%(remaining)s remaining)") )) def step(self): return super(WritingWindow, self).step() class WaitLoadBar(WaitLoadBase, Gtk.HBox): def __init__(self): super(WaitLoadBar, self).__init__() self._label.set_alignment(0.0, 0.5) self._label.set_ellipsize(Pango.EllipsizeMode.END) self._cancel_button.remove(self._cancel_button.get_child()) self._cancel_button.add(Gtk.Image.new_from_stock( Gtk.STOCK_STOP, Gtk.IconSize.MENU)) self._pause_button.remove(self._pause_button.get_child()) self._pause_button.add(Gtk.Image.new_from_stock( Gtk.STOCK_MEDIA_PAUSE, Gtk.IconSize.MENU)) self.pack_start(self._label, True, True, 0) self.pack_start(self._progress, False, True, 6) self.pack_start(self._pause_button, False, True, 0) self.pack_start(self._cancel_button, False, True, 0) self.show_all() def step(self, **values): ret = super(WaitLoadBar, self).step(**values) self._progress.set_text(_("%d of %d") % (self.current, self.count)) return ret ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/information.py�������������������������������������������������������0000644�0001750�0001750�00000054315�12173213426�021605� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import time from gi.repository import Gtk, Pango from quodlibet import const from quodlibet import qltk from quodlibet import util from quodlibet.qltk.bookmarks import EditBookmarksPane from quodlibet.qltk.cover import CoverImage from quodlibet.qltk.lyrics import LyricsPane from quodlibet.qltk.x import Window from quodlibet.qltk.window import PersistentWindowMixin from quodlibet.util import tag def Label(*args): l = Gtk.Label(*args) l.set_selectable(True) l.set_alignment(0, 0) return l def Frame(name, widget): f = Gtk.Frame() f.set_shadow_type(Gtk.ShadowType.NONE) l = Gtk.Label() l.set_markup("<u><b>%s</b></u>" % name) f.set_label_widget(l) a = Gtk.Alignment.new(xalign=0, yalign=0, xscale=1, yscale=1) a.set_padding(3, 0, 12, 0) f.add(a) a.add(widget) return f def SW(): swin = Gtk.ScrolledWindow() swin.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) return swin class ErrorPane(Gtk.VBox): def __init__(self, song): super(ErrorPane, self).__init__(spacing=6) self.set_border_width(12) sw = Gtk.ScrolledWindow() view = Gtk.TextView() view.get_buffer().set_text(song.get("~errors", "")) view.set_wrap_mode(Gtk.WrapMode.WORD) sw.add(view) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.IN) button = qltk.Button(_("_Clear Errors"), Gtk.STOCK_DIALOG_ERROR) button.connect('clicked', self.__clear_errors, song, view) view.set_editable(False) self.pack_start(sw, True, True, 0) self.pack_start(button, False, True, 0) def __clear_errors(self, button, song, view): try: del(song["~errors"]) except KeyError: pass view.get_buffer().set_text("") class NoSongs(Gtk.Label): def __init__(self): super(NoSongs, self).__init__(_("No songs are selected.")) self.title = _("No Songs") class OneSong(qltk.Notebook): def __init__(self, library, song): super(OneSong, self).__init__() vbox = Gtk.VBox(spacing=12) vbox.set_border_width(12) self._title(song, vbox) self._album(song, vbox) self._people(song, vbox) self._library(song, vbox) self._file(song, vbox) sw = SW() sw.title = _("Information") sw.add_with_viewport(vbox) self.append_page(sw) lyrics = LyricsPane(song) lyrics.title = _("Lyrics") self.append_page(lyrics) bookmarks = EditBookmarksPane(None, song) bookmarks.title = _("Bookmarks") bookmarks.set_border_width(12) self.append_page(bookmarks) if "~errors" in song: errors = ErrorPane(song) errors.title = _("Errors") self.append_page(errors) s = library.connect('changed', self.__check_changed, vbox, song) self.connect_object('destroy', library.disconnect, s) def __check_changed(self, library, songs, vbox, song): if song in songs: for c in vbox.get_children(): vbox.remove(c) c.destroy() self._title(song, vbox) self._album(song, vbox) self._people(song, vbox) self._library(song, vbox) self._file(song, vbox) parent = qltk.get_top_parent(self) if parent: parent.set_title(self.title + " - Quod Libet") vbox.show_all() def _title(self, song, box): l = Label() text = "<big><b>%s</b></big>" % util.escape(song.comma("title")) if "version" in song: text += "\n" + util.escape(song.comma("version")) l.set_markup(text) l.set_ellipsize(Pango.EllipsizeMode.END) box.pack_start(l, False, False, 0) self.title = song.comma("title") def _album(self, song, box): if "album" not in song: return w = Label("") text = [] text.append("<i>%s</i>" % util.escape(song.comma("album"))) if "date" in song: text[-1] += " (%s)" % util.escape(song.comma("date")) secondary = [] if "discnumber" in song: secondary.append(_("Disc %s") % song["discnumber"]) if "discsubtitle" in song: secondary.append("<i>%s</i>" % util.escape(song.comma("discsubtitle"))) if "tracknumber" in song: secondary.append(_("Track %s") % song["tracknumber"]) if secondary: text.append(" - ".join(secondary)) if "organization" in song or "labelid" in song: t = util.escape(song.comma("~organization~labelid")) text.append(t) if "producer" in song: text.append("Produced by %s" % ( util.escape(song.comma("producer")))) w.set_markup("\n".join(text)) w.set_ellipsize(Pango.EllipsizeMode.END) hb = Gtk.HBox(spacing=12) cover = CoverImage(song=song) if cover: hb.pack_start(cover, False, True, 0) else: cover.destroy() hb.pack_start(w, True, True, 0) box.pack_start(Frame(tag("album"), hb), False, False, 0) def _people(self, song, box): vb = Gtk.VBox() if "artist" in song: if len(song.list("artist")) == 1: title = _("artist") else: title = _("artists") title = util.capitalize(title) l = Label(song["artist"]) l.set_ellipsize(Pango.EllipsizeMode.END) vb.pack_start(l, False, True, 0) else: title = tag("~people") for names, tag_ in [ ("performers", "performer"), ("lyricists", "lyricist"), ("arrangers", "arranger"), ("composers", "composer"), ("conductors", "conductor"), ("authors", "author")]: if tag_ in song: l = Label(song[tag_]) l.set_ellipsize(Pango.EllipsizeMode.END) if len(song.list(tag_)) == 1: name = tag(tag_) else: name = _(names) vb.pack_start(Frame(util.capitalize(name), l), False, False, 0) performers = {} for tag_ in song: if "performer:" in tag_: for person in song[tag_].split('\n'): try: performers[str(person)] except: performers[str(person)] = [] performers[str(person)].append( util.title(tag_[tag_.find(":") + 1:])) if len(performers) > 0: performerstr = '' for performer in performers: performerstr += performer + ' (' i = 0 for part in performers[performer]: if i != 0: performerstr += ', ' performerstr += part i += 1 performerstr += ')\n' l = Label(performerstr) l.set_ellipsize(Pango.EllipsizeMode.END) if len(performers) == 1: name = tag("performer") else: name = _("performers") vb.pack_start(Frame(util.capitalize(name), l), False, False, 0) if not vb.get_children(): vb.destroy() else: box.pack_start(Frame(title, vb), False, False, 0) def _library(self, song, box): def counter(i): if i == 0: return _("Never") else: return ngettext("%(n)d time", "%(n)d times", i) % {"n": i} def ftime(t): if t == 0: return _("Unknown") else: timestr = time.strftime("%c", time.localtime(t)) return timestr.decode(const.ENCODING) playcount = counter(song.get("~#playcount", 0)) skipcount = counter(song.get("~#skipcount", 0)) lastplayed = ftime(song.get("~#lastplayed", 0)) if lastplayed == _("Unknown"): lastplayed = _("Never") added = ftime(song.get("~#added", 0)) rating = song("~rating") t = Gtk.Table(5, 2) t.set_col_spacings(6) t.set_homogeneous(False) table = [(_("added"), added), (_("last played"), lastplayed), (_("plays"), playcount), (_("skips"), skipcount), (_("rating"), rating)] for i, (l, r) in enumerate(table): l = "<b>%s</b>" % util.capitalize(util.escape(l) + ":") lab = Label() lab.set_markup(l) t.attach(lab, 0, 1, i + 1, i + 2, xoptions=Gtk.AttachOptions.FILL) t.attach(Label(r), 1, 2, i + 1, i + 2) box.pack_start(Frame(_("Library"), t), False, False, 0) def _file(self, song, box): def ftime(t): if t == 0: return _("Unknown") else: timestr = time.strftime("%c", time.localtime(t)) return timestr.decode(const.ENCODING) fn = util.fsdecode(util.unexpand(song["~filename"])) length = util.format_time_long(song.get("~#length", 0)) size = util.format_size( song.get("~#filesize") or util.size(song["~filename"])) mtime = ftime(util.mtime(song["~filename"])) bitrate = song.get("~#bitrate", 0) if bitrate != 0: bitrate = _("%d kbps") % int(bitrate) else: bitrate = False t = Gtk.Table(4, 2) t.set_col_spacings(6) t.set_homogeneous(False) table = [(_("length"), length), (_("file size"), size), (_("modified"), mtime)] if bitrate: table.insert(1, (_("bitrate"), bitrate)) fnlab = Label(fn) fnlab.set_ellipsize(Pango.EllipsizeMode.MIDDLE) t.attach(fnlab, 0, 2, 0, 1, xoptions=Gtk.AttachOptions.FILL) for i, (l, r) in enumerate(table): l = "<b>%s</b>" % util.capitalize(util.escape(l) + ":") lab = Label() lab.set_markup(l) t.attach(lab, 0, 1, i + 1, i + 2, xoptions=Gtk.AttachOptions.FILL) t.attach(Label(r), 1, 2, i + 1, i + 2) box.pack_start(Frame(_("File"), t), False, False, 0) class OneAlbum(qltk.Notebook): def __init__(self, songs): super(OneAlbum, self).__init__() swin = SW() swin.title = _("Information") vbox = Gtk.VBox(spacing=12) vbox.set_border_width(12) swin.add_with_viewport(vbox) # Needed to get proper track/disc/part ordering songs = sorted(songs) self._title(songs, vbox) self._album(songs, vbox) self._people(songs, vbox) self._description(songs, vbox) self.append_page(swin) def _title(self, songs, box): song = songs[0] l = Label() l.set_ellipsize(Pango.EllipsizeMode.END) text = "<big><b>%s</b></big>" % util.escape(song["album"]) if "date" in song: text += "\n" + song["date"] l.set_markup(text) box.pack_start(l, False, False, 0) self.title = song["album"] def _album(self, songs, box): text = [] discs = {} for song in songs: try: discs[song("~#disc")] = int( song["tracknumber"].split("/")[1]) except (AttributeError, ValueError, IndexError, KeyError): discs[song("~#disc")] = max([ song("~#track", discs.get(song("~#disc"), 0))]) tracks = sum(discs.values()) discs = len(discs) length = sum([song.get("~#length", 0) for song in songs]) if tracks == 0 or tracks < len(songs): tracks = len(songs) parts = [] if discs > 1: parts.append( ngettext("%d disc", "%d discs", discs) % discs) parts.append( ngettext("%d track", "%d tracks", tracks) % tracks) if tracks != len(songs): parts.append(ngettext("%d selected", "%d selected", len(songs)) % len(songs)) text.append(", ".join(parts)) text.append(util.format_time_long(length)) if "location" in song: text.append(util.escape(song["location"])) if "organization" in song or "labelid" in song: t = util.escape(song.comma("~organization~labelid")) text.append(t) if "producer" in song: text.append(_("Produced by %s") % ( util.escape(song.comma("producer")))) w = Label("") w.set_ellipsize(Pango.EllipsizeMode.END) w.set_markup("\n".join(text)) hb = Gtk.HBox(spacing=12) cover = CoverImage(song=song) if cover: hb.pack_start(cover, False, True, 0) else: cover.destroy() hb.pack_start(w, True, True, 0) box.pack_start(hb, False, False, 0) def _people(self, songs, box): artists = set([]) performers = set([]) for song in songs: artists.update(song.list("artist")) performers.update(song.list("performer")) artists = sorted(artists) performers = sorted(performers) if artists: if len(artists) == 1: title = _("artist") else: title = _("artists") title = util.capitalize(title) box.pack_start(Frame(title, Label("\n".join(artists))), False, False, 0) if performers: if len(artists) == 1: title = _("performer") else: title = _("performers") title = util.capitalize(title) box.pack_start(Frame(title, Label("\n".join(performers))), False, False, 0) def _description(self, songs, box): text = [] cur_disc = songs[0]("~#disc", 1) - 1 cur_part = None cur_track = songs[0]("~#track", 1) - 1 for song in songs: track = song("~#track", 0) disc = song("~#disc", 0) part = song.get("part") if disc != cur_disc: if cur_disc: text.append("") cur_track = song("~#track", 1) - 1 cur_part = None cur_disc = disc if disc: text.append("<b>%s</b>" % (_("Disc %s") % disc)) if part != cur_part: ts = " " * bool(disc) cur_part = part if part: text.append("%s<b>%s</b>" % (ts, util.escape(part))) cur_track += 1 ts = " " * (bool(disc) + bool(part)) while cur_track < track: text.append("%s<b>%d.</b> <i>%s</i>" % ( ts, cur_track, _("Track unavailable"))) cur_track += 1 text.append("%s<b>%d.</b> %s" % ( ts, track, util.escape(song.comma("~title~version")))) l = Label() l.set_markup("\n".join(text)) l.set_ellipsize(Pango.EllipsizeMode.END) box.pack_start(Frame(_("Track List"), l), False, False, 0) class OneArtist(qltk.Notebook): def __init__(self, songs): super(OneArtist, self).__init__() swin = SW() swin.title = _("Information") vbox = Gtk.VBox(spacing=12) vbox.set_border_width(12) swin.add_with_viewport(vbox) self._title(songs, vbox) self._album(songs, vbox) self.append_page(swin) def _title(self, songs, box): l = Label() l.set_ellipsize(Pango.EllipsizeMode.END) artist = util.escape(songs[0]("artist")) l.set_markup("<b><big>%s</big></b>" % artist) box.pack_start(l, False, False, 0) self.title = songs[0]["artist"] def _album(self, songs, box): noalbum = 0 albums = {} for song in songs: if "album" in song: albums[song.list("album")[0]] = song else: noalbum += 1 albums = [(song.get("date"), song, album) for album, song in albums.items()] albums.sort() def format((date, song, album)): if date: return "%s (%s)" % (album, date[:4]) else: return album covers = [(a, s.find_cover(), s) for d, s, a in albums] albums = map(format, albums) if noalbum: albums.append(ngettext("%d song with no album", "%d songs with no album", noalbum) % noalbum) l = Label("\n".join(albums)) l.set_ellipsize(Pango.EllipsizeMode.END) box.pack_start(Frame(_("Selected Discography"), l), False, False, 0) covers = [ac for ac in covers if bool(ac[1])] t = Gtk.Table(4, (len(covers) // 4) + 1) t.set_col_spacings(12) t.set_row_spacings(12) added = set() for i, (album, cover, song) in enumerate(covers): if cover.name in added: continue cov = CoverImage(song=song) cov.get_child().set_tooltip_text(album) c = i % 4 r = i // 4 t.attach(cov, c, c + 1, r, r + 1, xoptions=Gtk.AttachOptions.EXPAND, yoptions=0) added.add(cover.name) box.pack_start(t, True, True, 0) class ManySongs(qltk.Notebook): def __init__(self, songs): super(ManySongs, self).__init__() swin = SW() swin.title = _("Information") vbox = Gtk.VBox(spacing=12) vbox.set_border_width(12) swin.add_with_viewport(vbox) self._title(songs, vbox) self._people(songs, vbox) self._album(songs, vbox) self._file(songs, vbox) self.append_page(swin) def _title(self, songs, box): l = Label() t = ngettext("%d song", "%d songs", len(songs)) % len(songs) l.set_markup("<big><b>%s</b></big>" % t) self.title = t box.pack_start(l, False, False, 0) def _people(self, songs, box): artists = set([]) none = 0 for song in songs: if "artist" in song: artists.update(song.list("artist")) else: none += 1 artists = sorted(artists) num_artists = len(artists) if none: artists.append(ngettext("%d song with no artist", "%d songs with no artist", none) % none) box.pack_start(Frame( "%s (%d)" % (util.capitalize(_("artists")), num_artists), Label("\n".join(artists))), False, False, 0) def _album(self, songs, box): albums = set([]) none = 0 for song in songs: if "album" in song: albums.update(song.list("album")) else: none += 1 albums = sorted(albums) num_albums = len(albums) if none: albums.append(ngettext("%d song with no album", "%d songs with no album", none) % none) box.pack_start(Frame( "%s (%d)" % (util.capitalize(_("albums")), num_albums), Label("\n".join(albums))), False, False, 0) def _file(self, songs, box): length = 0 size = 0 for song in songs: length += song.get("~#length", 0) try: size += util.size(song["~filename"]) except EnvironmentError: pass table = Gtk.Table(2, 2) table.set_col_spacings(6) table.attach(Label(_("Total length:")), 0, 1, 0, 1, xoptions=Gtk.AttachOptions.FILL) table.attach( Label(util.format_time_long(length)), 1, 2, 0, 1) table.attach(Label(_("Total size:")), 0, 1, 1, 2, xoptions=Gtk.AttachOptions.FILL) table.attach(Label(util.format_size(size)), 1, 2, 1, 2) box.pack_start(Frame(_("Files"), table), False, False, 0) class Information(Window, PersistentWindowMixin): def __init__(self, library, songs, parent=None): super(Information, self).__init__(dialog=False) self.set_border_width(12) self.set_default_size(400, 400) self.enable_window_tracking("quodlibet_information") if len(songs) > 1: sig = library.connect('changed', self.__check_changed) self.connect_object('destroy', library.disconnect, sig) if len(songs) > 0: sig = library.connect('removed', self.__check_removed) self.connect_object('destroy', library.disconnect, sig) self.__songs = songs self.__update(library) self.set_transient_for(qltk.get_top_parent(parent)) self.show_all() def __check_changed(self, library, songs): changed = set(songs) for song in self.__songs: if song in changed: self.__update(library) break def __check_removed(self, library, songs): gone = set(songs) old = len(self.__songs) self.__songs = filter(lambda s: s not in gone, self.__songs) if len(self.__songs) != old: self.__update(library) def __update(self, library): songs = self.__songs if self.get_child(): self.get_child().destroy() self.__songs = songs if not songs: self.add(NoSongs()) elif len(songs) == 1: self.add(OneSong(library, songs[0])) else: tags = [(s.get("artist"), s.get("album")) for s in songs] artists, albums = zip(*tags) if min(albums) == max(albums) and albums[0]: self.add(OneAlbum(songs)) elif min(artists) == max(artists) and artists[0]: self.add(OneArtist(songs)) else: self.add(ManySongs(songs)) self.set_title(self.get_child().title + " - Quod Libet") self.get_child().show_all() �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/mmkeys_.py�����������������������������������������������������������0000644�0001750�0001750�00000005264�12173212464�020724� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import GLib __all__ = ["init"] def do_action(player, action): print_d("action: %s" % action) if action == "prev": player.previous() elif action == "next": player.next() elif action == "stop": player.stop() elif action == "play": if player.song is None: player.reset() else: player.paused ^= True elif action == "pause": player.paused = True else: print_d("didn't handle: %s" % action) def init_dbus_mmkeys(window, player): try: from quodlibet.qltk.dbusmmkey import DBusMMKey except ImportError: # no dbus return False if not DBusMMKey.is_active(): return False sigs = {"Next": "next", "Previous": "prev", "Play": "play", "Pause": "pause", "Next": "next", "Stop": "stop"} keys = DBusMMKey(window, "quodlibet") keys.connect_object("action", lambda p, a: do_action(p, sigs[a]), player) return True def make_keybinder_cb(player, action): return lambda keystring, user_data: do_action(player, action) def init_keybinder(player): try: import gi gi.require_version("Keybinder", "3.0") from gi.repository import Keybinder except (ValueError, ImportError): return False Keybinder.init() signals = {"XF86AudioPrev": "prev", "XF86AudioNext": "next", "XF86AudioStop": "stop", "XF86AudioPlay": "play"} for sig, action in signals.items(): Keybinder.bind(sig, make_keybinder_cb(player, action), None) return True def init_pyhook(player): try: import pyHook except ImportError: return False signals = {"Media_Prev_Track": "prev", "Media_Next_Track": "next", "Media_Stop": "stop", "Media_Play_Pause": "play"} def keyboard_cb(event): key = event.Key if key in signals: GLib.idle_add(do_action, player, signals[key]) return True hm = pyHook.HookManager() hm.KeyDown = keyboard_cb hm.HookKeyboard() return True def init(window, player): print_d("Grab multimedia keys") if init_dbus_mmkeys(window, player): print_d("dbus mmkeys: ok") return if init_keybinder(player): print_d("keybinder: ok") return if init_pyhook(player): print_d("pyhook: ok") return print_d("grabbing failed..") ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/bookmarks.py���������������������������������������������������������0000644�0001750�0001750�00000017521�12173213426�021246� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2006 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation # FIXME: Only allow one bookmark window per song. from gi.repository import Gtk, Pango from quodlibet import qltk from quodlibet import util from quodlibet.qltk.views import RCMHintedTreeView def MenuItems(marks, player, seekable): sizes = Gtk.SizeGroup(Gtk.SizeGroupMode.HORIZONTAL) items = [] if not marks or marks[0][0] != 0: # Translators: Refers to the beginning of the playing song. marks.insert(0, (0, _("Beginning"))) for time, mark in marks: i = Gtk.MenuItem() # older pygobject (~3.2) added a child on creation if i.get_child(): i.remove(i.get_child()) i.connect_object('activate', player.seek, time * 1000) i.set_sensitive(time >= 0 and seekable) hbox = Gtk.HBox(spacing=12) i.add(hbox) if time < 0: l = Gtk.Label(label=_("N/A")) else: l = Gtk.Label(label=util.format_time(time)) l.set_alignment(0.0, 0.5) sizes.add_widget(l) hbox.pack_start(l, False, True, 0) m = Gtk.Label(label=mark) m.set_alignment(0.0, 0.5) hbox.pack_start(m, True, True, 0) i.show_all() items.append(i) return items class EditBookmarksPane(Gtk.VBox): def __init__(self, library, song, close=False): super(EditBookmarksPane, self).__init__(spacing=6) hb = Gtk.HBox(spacing=12) self.time = time = Gtk.Entry() time.set_width_chars(5) self.markname = name = Gtk.Entry() add = Gtk.Button(stock=Gtk.STOCK_ADD) add.get_image().set_from_icon_name(Gtk.STOCK_ADD, Gtk.IconSize.MENU) hb.pack_start(time, False, True, 0) hb.pack_start(name, True, True, 0) hb.pack_start(add, False, True, 0) self.pack_start(hb, False, True, 0) model = Gtk.ListStore(int, str) sw = Gtk.ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.IN) sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) sw.add(RCMHintedTreeView(model)) render = Gtk.CellRendererText() def cdf(column, cell, model, iter, data): if model[iter][0] < 0: cell.set_property('text', _("N/A")) else: cell.set_property('text', util.format_time(model[iter][0])) render.set_property('editable', True) render.connect('edited', self.__edit_time, model) col = Gtk.TreeViewColumn(_("Time"), render) col.set_cell_data_func(render, cdf, None) sw.get_child().append_column(col) render = Gtk.CellRendererText() render.set_property('ellipsize', Pango.EllipsizeMode.END) col = Gtk.TreeViewColumn(_("Bookmark Name"), render, text=1) render.set_property('editable', True) render.connect('edited', self.__edit_name, model) sw.get_child().append_column(col) self.pack_start(sw, True, True, 0) self.accels = Gtk.AccelGroup() hbox = Gtk.HButtonBox() remove = Gtk.Button(stock=Gtk.STOCK_REMOVE) remove.set_sensitive(False) hbox.pack_start(remove, True, True, 0) if close: self.close = Gtk.Button(stock=Gtk.STOCK_CLOSE) hbox.pack_start(self.close, True, True, 0) else: hbox.set_layout(Gtk.ButtonBoxStyle.END) self.pack_start(hbox, False, True, 0) add.connect_object('clicked', self.__add, model, time, name) model.set_sort_column_id(0, Gtk.SortType.ASCENDING) model.connect('row-changed', self.__set_bookmarks, library, song) model.connect('row-inserted', self.__set_bookmarks, library, song) selection = sw.get_child().get_selection() selection.set_mode(Gtk.SelectionMode.MULTIPLE) selection.connect('changed', self.__check_selection, remove) remove.connect('clicked', self.__remove, selection, library, song) time.connect_object('changed', self.__check_entry, add, time, name) name.connect_object('changed', self.__check_entry, add, time, name) name.connect_object('activate', Gtk.Button.clicked, add) time.set_text(_("MM:SS")) time.connect_object('activate', Gtk.Entry.grab_focus, name) name.set_text(_("Bookmark Name")) menu = Gtk.Menu() remove = Gtk.ImageMenuItem(Gtk.STOCK_REMOVE, use_stock=True) remove.connect('activate', self.__remove, selection, library, song) keyval, mod = Gtk.accelerator_parse("Delete") remove.add_accelerator( 'activate', self.accels, keyval, mod, Gtk.AccelFlags.VISIBLE) menu.append(remove) menu.show_all() sw.get_child().connect('popup-menu', self.__popup, menu) sw.get_child().connect('key-press-event', self.__view_key_press, remove) self.connect_object('destroy', Gtk.Menu.destroy, menu) self.__fill(model, song) def __view_key_press(self, view, event, remove): if event.keyval == Gtk.accelerator_parse("Delete")[0]: remove.activate() def __popup(self, view, menu): return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def __edit_name(self, render, path, new, model): if new: model[path][1] = new def __edit_time(self, render, path, new, model): try: time = util.parse_time(new, None) except: pass else: model[path][0] = time def __check_entry(self, add, time, name): try: util.parse_time(time.get_text(), None) except: add.set_sensitive(False) else: add.set_sensitive(bool(name.get_text())) def __add(self, model, time, name): try: time = util.parse_time(time.get_text(), None) except: pass else: model.append([time, name.get_text()]) def __check_selection(self, selection, remove): remove.set_sensitive(bool(selection.get_selected_rows()[1])) def __remove(self, remove, selection, library, song): model, rows = selection.get_selected_rows() if model: map(model.remove, map(model.get_iter, rows)) self.__set_bookmarks(model, None, None, library, song) def __set_bookmarks(self, model, a, b, library, song): try: song.bookmarks = [(r[0], r[1].decode('utf-8')) for r in model] except (AttributeError, ValueError): pass else: if library is not None: library.changed([song]) def __fill(self, model, song): model.clear() for time, mark in song.bookmarks: model.append([time, mark]) class EditBookmarks(qltk.Window): def __init__(self, parent, library, player): super(EditBookmarks, self).__init__() self.set_transient_for(qltk.get_top_parent(parent)) self.set_border_width(12) self.set_default_size(350, 250) self.set_title(_("Bookmarks") + " - %s" % player.song.comma("title")) self.add(EditBookmarksPane(library, player.song, close=True)) s = library.connect('removed', self.__check_lock, player.song) self.connect_object('destroy', library.disconnect, s) position = player.get_position() // 1000 self.get_child().time.set_text(util.format_time(position)) self.get_child().markname.grab_focus() self.get_child().close.connect_object('clicked', qltk.Window.destroy, self) self.show_all() def __check_lock(self, library, songs, song): if song in songs: for c in self.get_child().get_children()[:-1]: c.set_sensitive(False) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/dbus_.py�������������������������������������������������������������0000644�0001750�0001750�00000007411�12173213426�020347� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Federico Pelloni <federico.pelloni@gmail.com> # 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of version 2 of the GNU General Public License as # published by the Free Software Foundation. import dbus import dbus.service from dbus import DBusException from quodlibet import util from quodlibet.util import dbusutils from quodlibet.parse import Query from quodlibet.qltk.songlist import SongList class DBusHandler(dbus.service.Object): def __init__(self, player, library): try: self.library = library bus = dbus.SessionBus() name = dbus.service.BusName('net.sacredchao.QuodLibet', bus=bus) path = '/net/sacredchao/QuodLibet' super(DBusHandler, self).__init__(name, path) except DBusException: pass else: player.connect('song-started', self.__song_started) player.connect('song-ended', self.__song_ended) player.connect('paused', lambda player: self.Paused()) player.connect('unpaused', lambda player: self.Unpaused()) self._player = player def __dict(self, song): dict = {} for key, value in (song or {}).items(): if not isinstance(value, basestring): value = unicode(value) elif isinstance(value, str): value = util.fsdecode(value) dict[key] = dbusutils.dbus_unicode_validate(value) if song: dict["~uri"] = song("~uri") return dict def __song_started(self, player, song): if song is not None: song = self.__dict(song) self.SongStarted(song) def __song_ended(self, player, song, skipped): if song is not None: song = self.__dict(song) self.SongEnded(song, skipped) @dbus.service.signal('net.sacredchao.QuodLibet') def SongStarted(self, song): pass @dbus.service.signal('net.sacredchao.QuodLibet') def SongEnded(self, song, skipped): pass @dbus.service.signal('net.sacredchao.QuodLibet') def Paused(self): pass @dbus.service.signal('net.sacredchao.QuodLibet') def Unpaused(self): pass @dbus.service.method('net.sacredchao.QuodLibet') def GetPosition(self): return self._player.get_position() @dbus.service.method('net.sacredchao.QuodLibet') def IsPlaying(self): return not self._player.paused @dbus.service.method('net.sacredchao.QuodLibet') def CurrentSong(self): return self.__dict(self._player.song) @dbus.service.method('net.sacredchao.QuodLibet') def Next(self): self._player.next() @dbus.service.method('net.sacredchao.QuodLibet') def Previous(self): self._player.previous() @dbus.service.method('net.sacredchao.QuodLibet') def Pause(self): self._player.paused = True @dbus.service.method('net.sacredchao.QuodLibet') def Play(self): if self._player.song is None: self._player.reset() else: self._player.paused = False @dbus.service.method('net.sacredchao.QuodLibet') def PlayPause(self): if self._player.song is None: self._player.reset() else: self._player.paused ^= True return self._player.paused @dbus.service.method('net.sacredchao.QuodLibet', in_signature='s') def Query(self, query): if query is not None: try: results = Query(query, star=SongList.star).search except Query.error: pass else: return [self.__dict(s) for s in self.library.itervalues() if results(s)] return None �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/quodlibetwindow.py���������������������������������������������������0000644�0001750�0001750�00000111662�12173213426�022477� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import sys from gi.repository import Gtk, GObject, Gdk, GLib, Gio from quodlibet import browsers from quodlibet import config from quodlibet import const from quodlibet import formats from quodlibet import qltk from quodlibet import util from quodlibet import app from quodlibet.formats.remote import RemoteFile from quodlibet.qltk.browser import LibraryBrowser from quodlibet.qltk.chooser import FolderChooser, FileChooser from quodlibet.qltk.controls import PlayControls from quodlibet.qltk.cover import CoverImage from quodlibet.qltk.getstring import GetStringDialog from quodlibet.qltk.info import SongInfo from quodlibet.qltk.information import Information from quodlibet.qltk.logging import LoggingWindow from quodlibet.qltk.msg import ErrorMessage from quodlibet.qltk.notif import StatusBar, TaskController from quodlibet.qltk.playorder import PlayOrder from quodlibet.qltk.pluginwin import PluginWindow from quodlibet.qltk.properties import SongProperties from quodlibet.qltk.prefs import PreferencesWindow from quodlibet.qltk.queue import QueueExpander from quodlibet.qltk.songlist import SongList from quodlibet.qltk.songmodel import PlaylistMux from quodlibet.qltk.x import RPaned, ConfigRVPaned, Alignment, ScrolledWindow from quodlibet.qltk.about import AboutQuodLibet from quodlibet.util import copool, gobject_weak from quodlibet.util.uri import URI from quodlibet.util.library import background_filter, scan_libary from quodlibet.qltk.window import PersistentWindowMixin class MainSongList(SongList): # The SongList that represents the current playlist. class CurrentColumn(Gtk.TreeViewColumn): # Displays the current song indicator, either a play or pause icon. header_name = "~current" __last_name = None def _cdf(self, column, cell, model, iter, data): PLAY = "media-playback-start" PAUSE = "media-playback-pause" STOP = "media-playback-stop" ERROR = "dialog-error" row = model[iter] song = row[0] if row.path == model.current_path: if model.sourced: name = [PLAY, PAUSE][app.player.paused] else: name = STOP elif song("~errors"): name = ERROR else: name = None if self.__last_name == name: return self.__last_name = name if name is not None: gicon = Gio.ThemedIcon.new_from_names( [name + "-symbolic", name]) else: gicon = None cell.set_property('gicon', gicon) def __init__(self): self._render = Gtk.CellRendererPixbuf() self._render.set_property('xalign', 0.5) super(MainSongList.CurrentColumn, self).__init__("", self._render) self.set_sizing(Gtk.TreeViewColumnSizing.FIXED) self.set_fixed_width(24) self.set_cell_data_func(self._render, self._cdf) self.header_name = "~current" _activated = False def __init__(self, library, player): super(MainSongList, self).__init__(library, player, update=True) self.connect_object('row-activated', self.__select_song, player) # ugly.. so the main window knows if the next song-started # comes from an row-activated or anything else. def reset_activated(*args): self._activated = False s = player.connect_after('song-started', reset_activated) self.connect_object('destroy', player.disconnect, s) def __select_song(self, player, indices, col): self._activated = True iter = self.model.get_iter(indices) if player.go_to(iter, True): player.paused = False def set_sort_by(self, *args, **kwargs): super(MainSongList, self).set_sort_by(*args, **kwargs) tag, reverse = self.get_sort_by() config.set('memory', 'sortby', "%d%s" % (int(reverse), tag)) class SongListScroller(ScrolledWindow): def __init__(self, menu): super(SongListScroller, self).__init__() self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.ALWAYS) self.set_shadow_type(Gtk.ShadowType.IN) self.connect_object('notify::visible', self.__visibility, menu) def __visibility(self, menu, event): value = self.get_property('visible') menu.set_active(value) config.set("memory", "songlist", str(value)) class TopBar(Gtk.HBox): def __init__(self, parent, player, library): super(TopBar, self).__init__(spacing=3) # play controls t = PlayControls(player, library.librarian) self.volume = t.volume self.pack_start(t, False, False, 0) # song text text = SongInfo(library.librarian, player) self.pack_start(Alignment(text, border=3), True, True, 0) # cover image self.image = CoverImage(resize=True) gobject_weak(player.connect, 'song-started', self.__new_song, parent=self) gobject_weak(parent.connect, 'artwork-changed', self.__song_art_changed, library, parent=self) self.pack_start(self.image, False, True, 0) def __new_song(self, player, song): self.image.set_song(song) def __song_art_changed(self, player, songs, library): self.image.refresh() refresh_albums = [] for song in songs: # Album browser only (currently): album = library.albums.get(song.album_key, None) if album: album.scan_cover(force=True) refresh_albums.append(album) if refresh_albums: library.albums.refresh(refresh_albums) class StatusBarBox(Gtk.HBox): def __init__(self, model, player): super(StatusBarBox, self).__init__(spacing=12) self.order = order = PlayOrder(model, player) hb = Gtk.HBox(spacing=6) label = Gtk.Label(label=_("_Order:")) label.set_mnemonic_widget(order) label.set_use_underline(True) hb.pack_start(label, True, True, 0) hb.pack_start(order, True, True, 0) self.pack_start(hb, False, True, 0) self.repeat = repeat = qltk.ccb.ConfigCheckButton( _("_Repeat"), "settings", "repeat") repeat.set_tooltip_text(_("Restart the playlist when finished")) self.pack_start(repeat, False, True, 0) repeat.connect('toggled', self.__repeat, model) repeat.set_active(config.getboolean('settings', 'repeat')) self.statusbar = StatusBar(TaskController.default_instance) self.pack_start(self.statusbar, True, True, 0) def __repeat(self, button, model): model.repeat = button.get_active() DND_URI_LIST, = range(1) class QuodLibetWindow(Gtk.Window, PersistentWindowMixin): SIG_PYOBJECT = (GObject.SignalFlags.RUN_LAST, None, (object,)) __gsignals__ = { 'artwork-changed': SIG_PYOBJECT, } def __init__(self, library, player): super(QuodLibetWindow, self).__init__() self.last_dir = const.HOME self.__update_title(player) self.set_default_size(550, 450) main_box = Gtk.VBox() self.add(main_box) # create main menubar, load/restore accelerator groups self.__library = library self.__create_menu(player, library) self.add_accel_group(self.ui.get_accel_group()) accel_fn = os.path.join(const.USERDIR, "accels") Gtk.AccelMap.load(accel_fn) accelgroup = Gtk.accel_groups_from_object(self)[0] GObject.Object.connect(accelgroup, 'accel-changed', lambda *args: Gtk.AccelMap.save(accel_fn)) main_box.pack_start(self.ui.get_widget("/Menu"), False, True, 0) # get the playlist up before other stuff self.songlist = MainSongList(library, player) self.songlist.show_all() self.add_accel_group(self.songlist.accelerators) self.songlist.connect_after( 'drag-data-received', self.__songlist_drag_data_recv) self.song_scroller = SongListScroller( self.ui.get_widget("/Menu/View/SongList")) self.song_scroller.add(self.songlist) self.qexpander = QueueExpander( self.ui.get_widget("/Menu/View/Queue"), library, player) self.playlist = PlaylistMux( player, self.qexpander.model, self.songlist.model) top_bar = TopBar(self, player, library) top_align = Alignment(top_bar, border=3, bottom=-3) main_box.pack_start(top_align, False, True, 0) self.__browserbox = Alignment(top=3, bottom=3) main_box.pack_start(self.__browserbox, True, True, 0) statusbox = StatusBarBox(self.songlist.model, player) self.order = statusbox.order self.repeat = statusbox.repeat self.statusbar = statusbox.statusbar main_box.pack_start(Alignment(statusbox, border=3, top=-3), False, True, 0) self.songpane = ConfigRVPaned("memory", "queue_position", 0.75) self.songpane.pack1(self.song_scroller, resize=True, shrink=False) self.songpane.pack2(self.qexpander, resize=True, shrink=False) self.__handle_position = self.songpane.get_property("position") self.song_scroller.connect('notify::visible', self.__show_or) self.qexpander.connect('notify::visible', self.__show_or) self.qexpander.connect('notify::expanded', self.__expand_or) self.qexpander.connect('draw', self.__qex_size_allocate) self.songpane.connect('notify', self.__moved_pane_handle) sort = config.get('memory', 'sortby') self.songlist.set_sort_by(None, sort[1:], order=int(sort[0])) self.browser = None main_box.show_all() try: self.select_browser( self, config.get("memory", "browser"), library, player, True) except: config.set("memory", "browser", browsers.name(0)) config.save(const.CONFIG) raise # set at least the playlist before the mainloop starts.. player.setup(self.playlist, None, 0) def delayed_song_set(): song = library.get(config.get("memory", "song")) seek_pos = config.getint("memory", "seek") config.set("memory", "seek", 0) player.setup(self.playlist, song, seek_pos) self.__delayed_setup = GLib.idle_add(delayed_song_set) self.showhide_playlist(self.ui.get_widget("/Menu/View/SongList")) self.showhide_playqueue(self.ui.get_widget("/Menu/View/Queue")) self.songlist.connect('popup-menu', self.__songs_popup_menu) self.songlist.connect('columns-changed', self.__cols_changed) self.songlist.connect('columns-changed', self.__hide_headers) self.songlist.info.connect("changed", self.__set_time) lib = library.librarian gobject_weak(lib.connect_object, 'changed', self.__song_changed, player, parent=self) player_sigs = [ ('song-ended', self.__song_ended), ('song-started', self.__song_started), ('paused', self.__update_paused, True), ('unpaused', self.__update_paused, False), ] for sig in player_sigs: gobject_weak(player.connect, *sig, **{"parent": self}) targets = [("text/uri-list", Gtk.TargetFlags.OTHER_APP, DND_URI_LIST)] targets = [Gtk.TargetEntry.new(*t) for t in targets] self.drag_dest_set( Gtk.DestDefaults.ALL, targets, Gdk.DragAction.COPY) self.connect('drag-data-received', self.__drag_data_received) if config.getboolean('library', 'refresh_on_start'): self.__rebuild(None, False) self.connect_object("key-press-event", self.__key_pressed, player) self.connect("delete-event", self.__save_browser) self.connect("destroy", self.__destroy) self.enable_window_tracking("quodlibet") def __key_pressed(self, player, event): if not player.song: return def seek_relative(seconds): current = player.get_position() current += seconds * 1000 current = min(player.song("~#length") * 1000 - 1, current) current = max(0, current) player.seek(current) if qltk.is_accel(event, "<alt>Right"): seek_relative(10) return True elif qltk.is_accel(event, "<alt>Left"): seek_relative(-10) return True def __destroy(self, *args): GLib.source_remove(self.__delayed_setup) # The tray icon plugin tries to unhide QL because it gets disabled # on Ql exit. The window should stay hidden after destroy. self.show = lambda: None self.present = self.show def __drag_data_received(self, widget, ctx, x, y, sel, tid, etime): assert tid == DND_URI_LIST uris = sel.get_uris() dirs = [] error = False for uri in uris: try: uri = URI(uri) except ValueError: continue if uri.is_filename: loc = os.path.normpath(uri.filename) if os.path.isdir(loc): dirs.append(loc) else: loc = os.path.realpath(loc) if loc not in self.__library: self.__library.add_filename(loc) elif app.player.can_play_uri(uri): if uri not in self.__library: self.__library.add([RemoteFile(uri)]) else: error = True break Gtk.drag_finish(ctx, not error, False, etime) if error: ErrorMessage( self, _("Unable to add songs"), _("<b>%s</b> uses an unsupported protocol.") % uri).run() else: if dirs: copool.add( self.__library.scan, dirs, self.__status.bar.progress, cofuncid="library", funcid="library") def __songlist_drag_data_recv(self, view, *args): if callable(self.browser.reordered): self.browser.reordered(view) self.songlist.set_sort_by(None, refresh=False) def __save_browser(self, *args): print_d("Saving active browser state") try: self.browser.save() except NotImplementedError: pass def destroy(self, *args): self.__save_browser() super(QuodLibetWindow, self).destroy() def __show_or(self, widget, prop): ssv = self.song_scroller.get_property('visible') qxv = self.qexpander.get_property('visible') self.songpane.set_property('visible', ssv or qxv) if not ssv: self.qexpander.set_expanded(True) self.__expand_or(widget, prop) def __expand_or(self, widget, prop): if self.qexpander.get_property('expanded'): self.songpane.set_property("position", self.__handle_position) def __moved_pane_handle(self, widget, prop): if self.qexpander.get_property('expanded'): self.__handle_position = self.songpane.get_property("position") def __qex_size_allocate(self, event, param=None): if not self.qexpander.get_property('expanded'): p_max = self.songpane.get_property("max-position") p_cur = self.songpane.get_property("position") if p_max != p_cur: self.songpane.set_property("position", p_max) def __create_menu(self, player, library): ag = Gtk.ActionGroup('QuodLibetWindowActions') actions = [ ('Music', None, _("_Music")), ('AddFolders', Gtk.STOCK_ADD, _('_Add a Folder...'), "<control>O", None, self.open_chooser), ('AddFiles', Gtk.STOCK_ADD, _('_Add a File...'), None, None, self.open_chooser), ('AddLocation', Gtk.STOCK_ADD, _('_Add a Location...'), None, None, self.open_location), ('BrowseLibrary', Gtk.STOCK_FIND, _('Open _Browser'), ""), ("Preferences", Gtk.STOCK_PREFERENCES, None, None, None, self.__preferences), ("Plugins", Gtk.STOCK_EXECUTE, _("_Plugins"), None, None, self.__plugins), ("Quit", Gtk.STOCK_QUIT, None, None, None, self.destroy), ('Filters', None, _("_Filters")), ("PlayedRecently", Gtk.STOCK_FIND, _("Recently _Played"), "", None, self.__filter_menu_actions), ("AddedRecently", Gtk.STOCK_FIND, _("Recently _Added"), "", None, self.__filter_menu_actions), ("TopRated", Gtk.STOCK_FIND, _("_Top 40"), "", None, self.__filter_menu_actions), ("Control", None, _("_Control")), ("EditTags", Gtk.STOCK_PROPERTIES, _("Edit _Tags"), "", None, self.__current_song_prop), ("Information", Gtk.STOCK_INFO, None, None, None, self.__current_song_info), ("Jump", Gtk.STOCK_JUMP_TO, _("_Jump to Playing Song"), "<control>J", None, self.__jump_to_current), ("View", None, _("_View")), ("Help", None, _("_Help")), ("OutputLog", Gtk.STOCK_EDIT, _("_Output Log"), None, None, lambda *args: LoggingWindow(self)), ] if const.DEBUG: def cause_error(*args): raise Exception actions.append(("DebugCauseError", Gtk.STOCK_DIALOG_ERROR, _("_Cause an Error"), None, None, cause_error)) actions.append(("Previous", Gtk.STOCK_MEDIA_PREVIOUS, None, "<control>comma", None, self.__previous_song)) actions.append(("PlayPause", Gtk.STOCK_MEDIA_PLAY, None, "<control>space", None, self.__play_pause)) actions.append(("Next", Gtk.STOCK_MEDIA_NEXT, None, "<control>period", None, self.__next_song)) ag.add_actions(actions) act = Gtk.Action("About", None, None, Gtk.STOCK_ABOUT) act.connect_object('activate', self.__show_about, player) ag.add_action_with_accel(act, None) act = Gtk.Action("OnlineHelp", _("Online Help"), None, Gtk.STOCK_HELP) act.connect_object('activate', util.website, const.ONLINE_HELP) ag.add_action_with_accel(act, "F1") act = Gtk.Action("SearchHelp", _("Search Help"), None, "") act.connect_object('activate', util.website, const.SEARCH_HELP) ag.add_action_with_accel(act, None) act = Gtk.Action( "RefreshLibrary", _("Re_fresh Library"), None, Gtk.STOCK_REFRESH) act.connect('activate', self.__rebuild, False) ag.add_action_with_accel(act, None) act = Gtk.Action( "ReloadLibrary", _("Re_load Library"), None, Gtk.STOCK_REFRESH) act.connect('activate', self.__rebuild, True) ag.add_action_with_accel(act, None) for tag_, lab in [ ("genre", _("Filter on _Genre")), ("artist", _("Filter on _Artist")), ("album", _("Filter on Al_bum"))]: act = Gtk.Action( "Filter%s" % util.capitalize(tag_), lab, None, Gtk.STOCK_INDEX) act.connect_object('activate', self.__filter_on, tag_, None, player) ag.add_action_with_accel(act, None) for (tag_, accel, label) in [ ("genre", "G", _("Random _Genre")), ("artist", "T", _("Random _Artist")), ("album", "M", _("Random Al_bum"))]: act = Gtk.Action("Random%s" % util.capitalize(tag_), label, None, Gtk.STOCK_DIALOG_QUESTION) act.connect('activate', self.__random, tag_) ag.add_action_with_accel(act, "<control>" + accel) ag.add_toggle_actions([ ("SongList", None, _("Song _List"), None, None, self.showhide_playlist, config.getboolean("memory", "songlist"))]) ag.add_toggle_actions([ ("Queue", None, _("_Queue"), None, None, self.showhide_playqueue, config.getboolean("memory", "queue"))]) view_actions = [] for i, Kind in enumerate(browsers.browsers): action = "View" + Kind.__name__ label = Kind.accelerated_name view_actions.append((action, None, label, None, None, i)) current = browsers.index(config.get("memory", "browser")) def action_callback(view_action, current): self.select_browser(view_action, current, library, player) ag.add_radio_actions( view_actions, current, action_callback, None) for Kind in browsers.browsers: if not Kind.in_menu: continue action = "Browser" + Kind.__name__ label = Kind.accelerated_name act = Gtk.Action(action, label, None, None) act.connect_object('activate', LibraryBrowser, Kind, library) ag.add_action_with_accel(act, None) debug_menu = "" if const.DEBUG: debug_menu = ("<separator/>" "<menuitem action='OutputLog'/>" "<menuitem action='DebugCauseError'/>") self.ui = Gtk.UIManager() self.ui.insert_action_group(ag, -1) menustr = const.MENU % {"browsers": browsers.BrowseLibrary(), "views": browsers.ViewBrowser(), "debug": debug_menu} self.ui.add_ui_from_string(menustr) # Cute. So. UIManager lets you attach tooltips, but when they're # for menu items, they just get ignored. So here I get to actually # attach them. self.ui.get_widget("/Menu/Music/RefreshLibrary").set_tooltip_text( _("Check for changes in your library")) self.ui.get_widget("/Menu/Music/ReloadLibrary").set_tooltip_text( _("Reload all songs in your library " "(this can take a long time)")) self.ui.get_widget("/Menu/Filters/TopRated").set_tooltip_text( _("The 40 songs you've played most (more than 40 may " "be chosen if there are ties)")) def __show_about(self, player): about = AboutQuodLibet(self, player) about.run() about.destroy() def __browser_configure(self, paned, event, browser): if paned.get_property('position-set'): key = "%s_pos" % browser.__class__.__name__ config.set("browsers", key, str(paned.get_relative())) def select_browser(self, activator, current, library, player, restore=False): if isinstance(current, Gtk.RadioAction): current = current.get_current_value() Browser = browsers.get(current) config.set("memory", "browser", Browser.__name__) if self.browser: container = self.browser.__container self.browser.unpack(container, self.songpane) if self.browser.accelerators: self.remove_accel_group(self.browser.accelerators) container.destroy() self.browser.destroy() self.browser = Browser(library, True) self.browser.connect('songs-selected', self.__browser_cb) self.browser.connect('activated', self.__browser_activate) if restore: self.browser.restore() self.browser.activate() self.browser.finalize(restore) if self.browser.reordered: self.songlist.enable_drop() elif self.browser.dropped: self.songlist.enable_drop(False) else: self.songlist.disable_drop() if self.browser.accelerators: self.add_accel_group(self.browser.accelerators) container = self.browser.__container = self.browser.pack(self.songpane) # Look for a paned if the container is none sub = container if not isinstance(container, RPaned): for child in container.get_children(): if isinstance(child, RPaned) and child is not self.songpane: sub = child # Save position if container is a RPaned if isinstance(sub, RPaned): try: key = "%s_pos" % self.browser.__class__.__name__ val = config.getfloat("browsers", key) # Use a minimum restore size val = max(val, 0.1) except: val = 0.4 sub.connect( 'notify::position', self.__browser_configure, self.browser) sub.set_relative(val) player.replaygain_profiles[1] = self.browser.replaygain_profiles player.volume = player.volume self.__browserbox.add(container) container.show() self.__hide_menus() self.__hide_headers() self.__refresh_size() def __update_paused(self, player, paused): menu = self.ui.get_widget("/Menu/Control/PlayPause") if paused: key = Gtk.STOCK_MEDIA_PLAY else: key = Gtk.STOCK_MEDIA_PAUSE text = Gtk.stock_lookup(key).label menu.get_image().set_from_stock(key, Gtk.IconSize.MENU) menu.set_label(text) menu.set_use_underline(True) def __check_remove_song(self, player, song): if song is None: return if not self.browser.dynamic(song): iter = self.songlist.model.find(song) if iter: self.songlist.remove_iters([iter]) def __song_ended(self, player, song, stopped): self.__check_remove_song(player, song) def __song_changed(self, player, songs): self.__update_title(player) for song in songs: self.__check_remove_song(player, song) def __update_title(self, player): song = player.info title = "Quod Libet" if song: title = song.comma("~title~version~~people") + " - " + title self.set_title(title) def __song_started(self, player, song): self.__update_title(player) for wid in ["Jump", "Next", "EditTags", "Information"]: self.ui.get_widget( '/Menu/Control/' + wid).set_sensitive(bool(song)) for wid in ["FilterAlbum", "FilterArtist", "FilterGenre"]: self.ui.get_widget( '/Menu/Filters/' + wid).set_sensitive(bool(song)) if song: for h in ['genre', 'artist', 'album']: self.ui.get_widget( "/Menu/Filters/Filter%s" % h.capitalize()).set_sensitive( h in song) # don't jump on stream changes (player.info != player.song) if song and player.song is song and not self.songlist._activated and \ config.getboolean("settings", "jump"): self.__jump_to_current(False) def __refresh_size(self): ssv = self.song_scroller.get_property('visible') qex = self.qexpander.get_property('visible') if ssv or qex: return # Handle more later if needed.. if not isinstance(self.browser, Gtk.Box): return # If a child expands the browser will take the new space for child in self.browser.get_children(): if self.browser.query_child_packing(child)[0]: break else: # no expanding child, make the window smaller instead width, height = self.get_size() height = self.size_request().height self.resize(width, height) def showhide_playlist(self, toggle): self.song_scroller.set_property('visible', toggle.get_active()) self.__refresh_size() def showhide_playqueue(self, toggle): self.qexpander.set_property('visible', toggle.get_active()) self.__refresh_size() def __play_pause(self, *args): if app.player.song is None: app.player.reset() else: app.player.paused ^= True def __jump_to_current(self, explicit): """Select/scroll to the current playing song in the playlist. If it can't be found tell the browser to properly fill the playlist with an appropriate selection containing the song. explicit means that the jump request comes from the user and not from an event like song-started. """ def jump_to(song, select=True): model = self.songlist.model if song == model.current: path = model.current_path else: iter = model.find(song) if iter is None: return path = model[iter].path self.songlist.scroll_to_cell(path, use_align=True, row_align=0.5) if select: self.songlist.set_cursor(path) song = app.player.song model = self.songlist.model # We are not playing a song if song is None: return # model.find because the source could be the queue if song == model.current or (model.find(song) and explicit): jump_to(song, select=explicit) elif explicit: self.browser.scroll(app.player.song) # We need to wait until the browser has finished # scrolling/filling and the songlist is ready. # Not perfect, but works for now. GLib.idle_add(jump_to, song, priority=GLib.PRIORITY_LOW) def __next_song(self, *args): app.player.next() def __previous_song(self, *args): app.player.previous() def __random(self, item, key): self.browser.filter_random(key) def __filter_menu_actions(self, menuitem): name = menuitem.get_name() if name == "PlayedRecently": self.__make_query("#(lastplayed < 7 days ago)") elif name == "AddedRecently": self.__make_query("#(added < 7 days ago)") elif name == "TopRated": bg = background_filter() songs = (bg and filter(bg, self.__library)) or self.__library songs = [song.get("~#playcount", 0) for song in songs] if len(songs) == 0: return songs.sort() if len(songs) < 40: self.__make_query("#(playcount > %d)" % (songs[0] - 1)) else: self.__make_query("#(playcount > %d)" % (songs[-40] - 1)) def __rebuild(self, activator, force): scan_libary(self.__library, force) # Set up the preferences window. def __preferences(self, activator): PreferencesWindow(self) def __plugins(self, activator): PluginWindow(self) def open_location(self, action): name = GetStringDialog(self, _("Add a Location"), _("Enter the location of an audio file:"), okbutton=Gtk.STOCK_ADD).run() if name: if not util.uri_is_valid(name): ErrorMessage( self, _("Unable to add location"), _("<b>%s</b> is not a valid location.") % ( util.escape(name))).run() elif not app.player.can_play_uri(name): ErrorMessage( self, _("Unable to add location"), _("<b>%s</b> uses an unsupported protocol.") % ( util.escape(name))).run() else: if name not in self.__library: self.__library.add([RemoteFile(name)]) def open_chooser(self, action): if not os.path.exists(self.last_dir): self.last_dir = const.HOME if action.get_name() == "AddFolders": chooser = FolderChooser(self, _("Add Music"), self.last_dir) cb = Gtk.CheckButton(_("Watch this folder for new songs")) cb.set_active(not config.get("settings", "scan")) cb.show() chooser.set_extra_widget(cb) else: chooser = FileChooser( self, _("Add Music"), formats.filter, self.last_dir) cb = None fns = chooser.run() chooser.destroy() if fns: if action.get_name() == "AddFolders": self.last_dir = fns[0] copool.add(self.__library.scan, fns, funcid="library") else: self.last_dir = os.path.basename(fns[0]) for filename in map(os.path.realpath, map(util.fsnative, fns)): if filename in self.__library: continue song = self.__library.add_filename(filename) if not song: from traceback import format_exception_only as feo tb = feo(sys.last_type, sys.last_value) msg = _("%s could not be added to your library.\n\n") msg %= util.escape(util.fsdecode( os.path.basename(filename))) msg += util.escape("".join(tb).decode( const.ENCODING, "replace")) d = ErrorMessage(self, _("Unable to add song"), msg) d.label.set_selectable(True) d.run() continue if cb and cb.get_active(): dirs = util.split_scan_dirs(config.get("settings", "scan")) for fn in fns: if fn not in dirs: dirs.append(fn) dirs = ":".join(dirs) config.set("settings", "scan", dirs) def __songs_popup_menu(self, songlist): path, col = songlist.get_cursor() header = col.header_name menu = self.songlist.Menu(header, self.browser, self.__library) if menu is not None: return self.songlist.popup_menu(menu, 0, Gtk.get_current_event_time()) def __current_song_prop(self, *args): song = app.player.song if song: SongProperties(self.__library.librarian, [song], parent=self) def __current_song_info(self, *args): song = app.player.song if song: Information(self.__library.librarian, [song], self) def __hide_menus(self): menus = {'genre': ["/Menu/Filters/FilterGenre", "/Menu/Filters/RandomGenre"], 'artist': ["/Menu/Filters/FilterArtist", "/Menu/Filters/RandomArtist"], 'album': ["/Menu/Filters/FilterAlbum", "/Menu/Filters/RandomAlbum"], None: ["/Menu/Filters/PlayedRecently", "/Menu/Filters/AddedRecently", "/Menu/Filters/TopRated", "/Menu/Filters/TopRated"]} for key, widgets in menus.items(): c = self.browser.can_filter(key) for widget in widgets: self.ui.get_widget(widget).set_property('visible', c) def __browser_activate(self, browser): model = self.songlist.get_model() model.reset() if app.player.go_to(model.get_iter_first(), True): app.player.paused = False def __browser_cb(self, browser, songs, sorted): if browser.background: bg = background_filter() if bg: songs = filter(bg, songs) self.songlist.set_songs(songs, sorted) def __filter_on(self, header, songs, player): browser = self.browser if not browser: return # Fall back to the playing song if songs is None: if player.song: songs = [player.song] else: return browser.filter_on(songs, header) def __hide_headers(self, activator=None): for column in self.songlist.get_columns(): if self.browser.headers is None: column.set_visible(True) else: for tag in util.tagsplit(column.header_name): if tag in self.browser.headers: column.set_visible(True) break else: column.set_visible(False) def __cols_changed(self, songlist): headers = [col.header_name for col in songlist.get_columns()] try: headers.remove('~current') except ValueError: pass if len(headers) == len(config.get_columns()): # Not an addition or removal (handled separately) config.set_columns(headers) SongList.headers = headers def __make_query(self, query): if self.browser.can_filter_text(): self.browser.filter_text(query.encode('utf-8')) self.browser.activate() def __set_time(self, info, songs): i = len(songs) length = sum(song.get("~#length", 0) for song in songs) t = self.browser.statusbar(i) % { 'count': i, 'time': util.format_time_long(length)} self.statusbar.set_default_text(t) ������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/downloader.py��������������������������������������������������������0000644�0001750�0001750�00000013063�12173213426�021411� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005, 2009 Joe Wreschnig, Steven Robertson # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import urllib from gi.repository import Gtk, GObject, Pango, GLib from quodlibet import qltk from quodlibet import util from quodlibet.qltk.views import AllTreeView class DownloadWindow(qltk.UniqueWindow): downloads = None def download(klass, source, target, parent=None): if klass.downloads is None: # source fileobj, target fileobj, I/O watch callback ID, source uri klass.downloads = Gtk.ListStore(object, object, int, object) win = DownloadWindow(parent) win._download(source, target) download = classmethod(download) def __init__(self, parent=None): if self.is_not_unique(): return super(DownloadWindow, self).__init__() self.set_title("Quod Libet - " + _("Downloads")) self.set_default_size(300, 150) self.set_border_width(12) self.set_transient_for(qltk.get_top_parent(parent)) self.__timeout = None view = AllTreeView() view.connect('popup-menu', self.__popup_menu) view.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) view.set_model(self.downloads) view.set_rules_hint(True) render = Gtk.CellRendererText() render.set_property('ellipsize', Pango.EllipsizeMode.START) column = Gtk.TreeViewColumn(_("Filename"), render) column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) column.set_expand(True) def cell_data_name(column, cell, model, iter): cell.set_property('text', model[iter][1].name) column.set_cell_data_func(render, cell_data_name) view.append_column(column) render = Gtk.CellRendererText() column = Gtk.TreeViewColumn(_("Size"), render) column.set_sizing(Gtk.TreeViewColumnSizing.GROW_ONLY) def cell_data_size(column, cell, model, iter): if model[iter][2] == 0: size = _("Queued") else: size = util.format_size(model[iter][1].tell()) cell.set_property('text', size) column.set_cell_data_func(render, cell_data_size) view.append_column(column) sw = Gtk.ScrolledWindow() sw.add(view) sw.set_shadow_type(Gtk.ShadowType.IN) sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) self.add(sw) self.connect_object( 'delete-event', DownloadWindow.__delete_event, self) self.show_all() def __update(self): for row in self.downloads: self.downloads.row_changed(row.path, row.iter) return True def __popup_menu(self, view): selection = view.get_selection() model, paths = selection.get_selected_rows() if model: iters = map(model.get_iter, paths) menu = Gtk.Menu() item = Gtk.ImageMenuItem(Gtk.STOCK_STOP) item.connect_object('activate', self.__stop_download, iters) menu.append(item) menu.connect('selection-done', lambda m: m.destroy()) menu.show_all() return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def __start_next(self): started = len(filter(lambda row: row[2] != 0, self.downloads)) iter = self.downloads.get_iter_root() while iter is not None: if started >= 2: break if self.downloads[iter][2] == 0: url = urllib.urlopen(self.downloads[iter][3]) sock = url.fp._sock sock.setblocking(0) self.downloads[iter][0] = sock sig_id = GObject.io_add_watch( sock, GObject.IO_IN | GObject.IO_ERR | GObject.IO_HUP, self.__got_data, self.downloads[iter][1], iter) self.downloads[iter][2] = sig_id started += 1 iter = self.downloads.iter_next(iter) def __stop_download(self, iters): for iter in iters: if self.downloads[iter][2] != 0: GLib.source_remove(self.downloads[iter][2]) if self.downloads[iter][0]: self.downloads[iter][0].close() self.downloads[iter][1].close() os.unlink(self.downloads[iter][1].name) self.downloads.remove(iter) self.__start_next() def present(self): super(DownloadWindow, self).present() if self.__timeout is None: self.__timeout = GLib.timeout_add(1000, self.__update) def __delete_event(self, event): self.hide() if self.__timeout is not None: GLib.source_remove(self.__timeout) self.__timeout = None return True def _download(self, source, target): fileobj = file(target, "wb") self.downloads.append(row=[None, fileobj, 0, source]) self.__start_next() def __got_data(self, src, condition, fileobj, iter): if condition in [GObject.IO_ERR, GObject.IO_HUP]: fileobj.close() src.close() self.downloads.remove(iter) self.__start_next() return False else: buf = src.recv(1024 * 1024) if buf: fileobj.write(buf) else: fileobj.close() src.close() self.downloads.remove(iter) self.__start_next() return bool(buf) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/tracknumbers.py������������������������������������������������������0000644�0001750�0001750�00000015120�12173213426�021747� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from quodlibet import qltk from quodlibet import util from quodlibet.qltk.views import HintedTreeView, TreeViewColumn from quodlibet.qltk.wlw import WritingWindow class TrackNumbers(Gtk.VBox): def __init__(self, prop, library): super(TrackNumbers, self).__init__(spacing=6) self.title = _("Track Numbers") self.set_border_width(12) hbox2 = Gtk.HBox(spacing=12) hbox_start = Gtk.HBox(spacing=3) label_start = Gtk.Label(label=_("Start fro_m:")) label_start.set_use_underline(True) spin_start = Gtk.SpinButton() spin_start.set_range(0, 999) spin_start.set_increments(1, 10) spin_start.set_value(1) label_start.set_mnemonic_widget(spin_start) hbox_start.pack_start(label_start, True, True, 0) hbox_start.pack_start(spin_start, True, True, 0) hbox_total = Gtk.HBox(spacing=3) label_total = Gtk.Label(label=_("_Total tracks:")) label_total.set_use_underline(True) spin_total = Gtk.SpinButton() spin_total.set_range(0, 999) spin_total.set_increments(1, 10) label_total.set_mnemonic_widget(spin_total) hbox_total.pack_start(label_total, True, True, 0) hbox_total.pack_start(spin_total, True, True, 0) preview = qltk.Button(_("_Preview"), Gtk.STOCK_CONVERT) hbox2.pack_start(hbox_start, True, False, 0) hbox2.pack_start(hbox_total, True, False, 0) hbox2.pack_start(preview, False, True, 0) model = Gtk.ListStore(object, str, str) view = HintedTreeView(model) self.pack_start(hbox2, False, True, 0) render = Gtk.CellRendererText() column = TreeViewColumn(_('File'), render, text=1) column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) view.append_column(column) render = Gtk.CellRendererText() render.set_property('editable', True) column = TreeViewColumn(_('Track'), render, text=2) column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) view.append_column(column) view.set_reorderable(True) w = Gtk.ScrolledWindow() w.set_shadow_type(Gtk.ShadowType.IN) w.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) w.add(view) self.pack_start(w, True, True, 0) bbox = Gtk.HButtonBox() bbox.set_spacing(12) bbox.set_layout(Gtk.ButtonBoxStyle.END) save = Gtk.Button(stock=Gtk.STOCK_SAVE) save.connect_object( 'clicked', self.__save_files, prop, model, library) revert = Gtk.Button(stock=Gtk.STOCK_REVERT_TO_SAVED) bbox.pack_start(revert, True, True, 0) bbox.pack_start(save, True, True, 0) self.pack_start(bbox, False, True, 0) preview_args = [spin_start, spin_total, model, save, revert] preview.connect('clicked', self.__preview_tracks, *preview_args) revert.connect_object('clicked', self.__update, None, *preview_args[1:]) spin_total.connect( 'value-changed', self.__preview_tracks, *preview_args) spin_start.connect( 'value-changed', self.__preview_tracks, *preview_args) view.connect_object( 'drag-end', self.__class__.__preview_tracks, self, *preview_args) render.connect('edited', self.__row_edited, model, preview, save) prop.connect_object( 'changed', self.__class__.__update, self, spin_total, model, save, revert) self.show_all() def __row_edited(self, render, path, new, model, preview, save): row = model[path] if row[2] != new: row[2] = new preview.set_sensitive(True) save.set_sensitive(True) def __save_files(self, parent, model, library): win = WritingWindow(parent, len(model)) was_changed = [] for song, track in [(r[0], r[2]) for r in model]: if song.get("tracknumber") == track: win.step() continue if not song.valid() and not qltk.ConfirmAction( win, _("Tag may not be accurate"), _("<b>%s</b> changed while the program was running. " "Saving without refreshing your library may " "overwrite other changes to the song.\n\n" "Save this song anyway?") % util.escape(util.fsdecode(song("~basename"))) ).run(): break song["tracknumber"] = track try: song.write() except: util.print_exc() qltk.ErrorMessage( win, _("Unable to save song"), _("Saving <b>%s</b> failed. The file may be " "read-only, corrupted, or you do not have " "permission to edit it.") % util.escape(util.fsdecode(song('~basename')))).run() library.reload(song, changed=was_changed) break was_changed.append(song) if win.step(): break library.changed(was_changed) win.destroy() def __preview_tracks(self, ctx, start, total, model, save, revert): start = start.get_value_as_int() total = total.get_value_as_int() for row in model: if total: s = "%d/%d" % (row.path.get_indices()[0] + start, total) else: s = str(row.path.get_indices()[0] + start) row[2] = s save.set_sensitive(True) revert.set_sensitive(True) def __update(self, songs, total, model, save, revert): if songs is None: songs = [row[0] for row in model] else: songs = list(songs) songs.sort( key=lambda song: (song("~#track"), song("~basename"), song)) model.clear() total.set_value(len(songs)) for song in songs: if not song.can_change("tracknumber"): self.set_sensitive(False) break else: self.set_sensitive(True) for song in songs: basename = util.fsdecode(song("~basename")) model.append(row=[song, basename, song("tracknumber")]) save.set_sensitive(False) revert.set_sensitive(False) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/controls.py����������������������������������������������������������0000644�0001750�0001750�00000031506�12173213426�021120� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, GLib, Gdk from quodlibet import config from quodlibet import qltk from quodlibet.qltk import bookmarks from quodlibet import util from quodlibet.qltk.ccb import ConfigCheckMenuItem from quodlibet.qltk.sliderbutton import HSlider from quodlibet.qltk.tracker import TimeTracker from quodlibet.qltk.x import RadioMenuItem, SeparatorMenuItem SIZE = Gtk.IconSize.LARGE_TOOLBAR SUBSIZE = Gtk.IconSize.MENU class TimeLabel(Gtk.Label): """A label for displaying the running time It tries to minimize size changes due to unequal character widths with the same number of characters. e.g. a time display -> 04:20 """ def __init__(self, time_=0): Gtk.Label.__init__(self) self.__widths = {} # num-chars -> (max-min-width, max-natural-width) self.set_time(time_) def do_get_preferred_width(self): widths = Gtk.Label.do_get_preferred_width(self) # If for same number of characters, the needed width was larger, # use that instead of the current one num_chars = len(self.get_text().decode("utf-8")) max_widths = self.__widths.get(num_chars, widths) widths = max(widths[0], max_widths[0]), max(widths[1], max_widths[1]) self.__widths[num_chars] = widths return widths def set_time(self, time_): """Set the time in seconds""" self.set_text(util.format_time(time_)) class SeekBar(HSlider): __lock = False __sig = None __seekable = True def __init__(self, player, library): hbox = Gtk.HBox(spacing=3) l = TimeLabel() hbox.pack_start(l, True, True, 0) hbox.pack_start( Gtk.Arrow(Gtk.ArrowType.RIGHT, Gtk.ShadowType.NONE), False, True, 0) super(SeekBar, self).__init__(hbox) self.scale.connect('button-press-event', self.__seek_lock) self.scale.connect('button-release-event', self.__seek_unlock, player) self.scale.connect('key-press-event', self.__seek_lock) self.scale.connect('key-release-event', self.__seek_unlock, player) self.connect('scroll-event', self.__scroll, player) self.scale.connect('value-changed', self.__update_time, l) m = Gtk.Menu() c = ConfigCheckMenuItem( _("Display remaining time"), "player", "time_remaining") c.set_active(config.getboolean("player", "time_remaining")) c.connect_object('toggled', self.scale.emit, 'value-changed') self.__remaining = c m.append(c) m.append(SeparatorMenuItem()) i = qltk.MenuItem(_("_Edit Bookmarks..."), Gtk.STOCK_EDIT) i.connect_object( 'activate', bookmarks.EditBookmarks, self, library, player) m.append(i) m.show_all() self.get_child().connect_object( 'button-press-event', self.__check_menu, m, player) self.connect_object('popup-menu', self.__popup_menu, m, player, self.get_child().get_child()) timer = TimeTracker(player) timer.connect_object('tick', self.__check_time, player) player.connect('song-started', self.__song_changed, l, m) player.connect('seek', self.__seeked) def __check_menu(self, menu, event, player): if event.button == 3: return self.__popup_menu(menu, player) def __popup_menu(self, menu, player, widget=None): for child in menu.get_children()[2:-1]: menu.remove(child) child.destroy() try: marks = player.song.bookmarks except AttributeError: # song is None pass else: items = qltk.bookmarks.MenuItems(marks, player, self.__seekable) items.reverse() for i in items: menu.insert(i, 2) time = Gtk.get_current_event_time() if widget: return qltk.popup_menu_under_widget(menu, widget, 3, time) else: menu.popup(None, None, None, None, 3, time) return True def __seeked(self, player, song, ms): # If it's not paused, we'll grab it in our next update. if player.paused: self.scale.set_value(ms // 1000) def __scroll(self, widget, event, player): self.__lock = True if self.__sig is not None: GLib.source_remove(self.__sig) self.__sig = GLib.timeout_add(100, self.__scroll_timeout, player) def __scroll_timeout(self, player): self.__lock = False if self.__seekable: player.seek(self.scale.get_value() * 1000) self.__sig = None def __seek_lock(self, scale, event): self.__lock = True def __seek_unlock(self, scale, event, player): self.__lock = False if self.__seekable: player.seek(self.scale.get_value() * 1000) def __check_time(self, player): # When the song is paused GStreamer returns < 1 for position # queries, so if it's paused just ignore it. if not (player.paused or self.__lock): position = player.get_position() // 1000 if (not self.__seekable and position > self.scale.get_adjustment().get_upper()): self.scale.set_range(0, position) self.scale.set_value(position) return True def __update_time(self, scale, timer): value = scale.get_value() max = scale.get_adjustment().get_upper() value -= self.__remaining.get_active() * max timer.set_time(value) def __song_changed(self, player, song, label, menu): if song and song.get("~#length", 0) > 0: self.scale.set_range(0, song["~#length"]) self.scale.set_value(0) self.__seekable = True else: self.scale.set_range(0, 1) self.scale.set_value(0) self.__seekable = False for child in menu.get_children()[2:-1]: menu.remove(child) child.destroy() menu.get_children()[-1].set_sensitive(self.__seekable) self.scale.emit('value-changed') class Volume(Gtk.VolumeButton): def __init__(self, device): super(Volume, self).__init__() self.props.size = SUBSIZE self.set_relief(Gtk.ReliefStyle.NORMAL) self.set_adjustment(Gtk.Adjustment(0, 0, 1, 0.05, 0.1, 0)) self.connect('value-changed', self.__volume_changed, device) device.connect('notify::volume', self.__volume_notify) self.set_value(config.getfloat("memory", "volume")) self.show_all() replaygain_menu = ReplayGainMenu(device) self.connect('popup-menu', self.__popup, replaygain_menu) self.connect_object('button-press-event', self.__volume_button_press, replaygain_menu) def __popup(self, widget, menu): time = Gtk.get_current_event_time() button = 3 return qltk.popup_menu_under_widget(menu, widget, button, time) def __volume_button_press(self, menu, event): if event.button == 3: menu.popup(None, None, None, None, event.button, event.time) return True def __iadd__(self, v): self.set_value(self.get_value() + v) return self def __isub__(self, v): self.set_value(self.get_value() - v) return self def __volume_changed(self, button, volume, device): config.set("memory", "volume", str(volume)) device.volume = volume def __volume_notify(self, device, prop): self.set_value(device.props.volume) class ReplayGainMenu(Gtk.Menu): __modes = ( ("auto", _("Auto_matic"), None), ("track", _("_Track Mode"), ["track"]), ("album", _("_Album Mode"), ["album", "track"]) ) def __init__(self, player): super(ReplayGainMenu, self).__init__() item = None for mode, title, profile in self.__modes: item = RadioMenuItem(group=item, label=title, use_underline=True) self.append(item) item.connect("toggled", self.__changed, player, profile) if player.replaygain_profiles[0] == profile: item.set_active(True) self.show_all() def __changed(self, item, player, profile): if item.get_active(): player.replaygain_profiles[0] = profile player.volume = player.volume def popup(self, *args): gain = config.getboolean("player", "replaygain") for child in self.get_children(): child.set_sensitive(gain) return super(ReplayGainMenu, self).popup(*args) class StopAfterMenu(Gtk.Menu): __menu = None def __new__(klass, parent): if klass.__menu is None: return super(StopAfterMenu, klass).__new__(klass) else: return klass.__menu def __init__(self, player): if type(self).__menu: return else: type(self).__menu = self super(StopAfterMenu, self).__init__() self.__item = Gtk.CheckMenuItem(_("Stop after this song")) self.__item.set_active(False) self.append(self.__item) player.connect('paused', self.__paused) player.connect_after('song-ended', self.__ended) self.__item.show() def __paused(self, player): self.active = False def __ended(self, player, song, stopped): if self.active: player.paused = True self.active = False def __get_active(self): return self.__item.get_active() def __set_active(self, active): return self.__item.set_active(active) active = property(__get_active, __set_active) class PlayControls(Gtk.VBox): def __init__(self, player, library): super(PlayControls, self).__init__(spacing=3) upper = Gtk.Table(rows=1, columns=3, homogeneous=True) upper.set_row_spacings(3) upper.set_col_spacings(3) prev = Gtk.Button() prev.add(Gtk.Image.new_from_stock(Gtk.STOCK_MEDIA_PREVIOUS, SIZE)) upper.attach(prev, 0, 1, 0, 1) play = Gtk.ToggleButton() play.add(Gtk.Image.new_from_stock(Gtk.STOCK_MEDIA_PLAY, SIZE)) upper.attach(play, 1, 2, 0, 1) safter = StopAfterMenu(player) next = Gtk.Button() next.add(Gtk.Image.new_from_stock(Gtk.STOCK_MEDIA_NEXT, SIZE)) upper.attach(next, 2, 3, 0, 1) lower = Gtk.Table(rows=1, columns=3, homogeneous=True) lower.set_row_spacings(3) lower.set_col_spacings(3) self.volume = Volume(player) lower.attach(self.volume, 0, 1, 0, 1) seekbar = SeekBar(player, library) lower.attach(seekbar, 1, 3, 0, 1) self.pack_start(upper, False, True, 0) self.pack_start(lower, False, True, 0) prev.connect_object('clicked', self.__previous, player) play.connect('toggled', self.__playpause, player) play.connect('button-press-event', self.__play_button_press, safter) play.add_events(Gdk.EventMask.SCROLL_MASK) play.connect_object('scroll-event', self.__scroll, player) play.connect_object('popup-menu', self.__popup, safter, play.get_child()) next.connect_object('clicked', self.__next, player) player.connect('song-started', self.__song_started, next, play) player.connect_object('paused', play.set_active, False) player.connect_object('unpaused', play.set_active, True) self.show_all() def __scroll(self, player, event): if event.direction in [Gdk.ScrollDirection.UP, Gdk.ScrollDirection.LEFT]: player.previous() elif event.direction in [Gdk.ScrollDirection.DOWN, Gdk.ScrollDirection.RIGHT]: player.next() def __play_button_press(self, activator, event, safter): if event.button == 3: return self.__popup(safter, None, event.button, event.time) def __popup(self, safter, widget, button=3, time=None): time = time or Gtk.get_current_event_time() if widget: return qltk.popup_menu_under_widget(safter, widget, button, time) else: safter.popup(None, None, None, None, button, time) return True def __song_started(self, player, song, next, play): play.set_active(not player.paused) def __playpause(self, button, player): if button.get_active() and player.song is None: player.reset() button.set_active(not player.paused) else: player.paused = not button.get_active() def __previous(self, player): player.previous() def __next(self, player): player.next() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/menubutton.py��������������������������������������������������������0000644�0001750�0001750�00000003601�12173213426�021450� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2011 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from quodlibet import qltk class MenuButton(Gtk.ToggleButton): __menu = None __menu_sig = None def __init__(self, widget, arrow=False): super(MenuButton, self).__init__() bbox = Gtk.HBox(spacing=3) bbox.pack_start(widget, True, True, 0) if arrow: bbox.pack_start(Gtk.Arrow(Gtk.ArrowType.DOWN, Gtk.ShadowType.IN), True, True, 0) self.add(bbox) self.connect("toggled", self.__toggled_cb) self.connect("button-press-event", self.__press_cb) self.connect("destroy", self.__destroy) def get_menu(self): return self.__menu def set_menu(self, menu): if self.__menu: self.__menu.disconnect(self.__menu_sig) self.__menu = menu self.__menu_sig = menu.connect("deactivate", self.__menu_deactivate_cb, self) def __destroy(self, *args): if self.__menu: self.__menu.disconnect(self.__menu_sig) self.__menu = None def __menu_deactivate_cb(self, menu, button): button.set_active(False) def __press_cb(self, widget, event): if self.__menu and event.button == 1: qltk.popup_menu_under_widget( self.__menu, widget, event.button, event.time) widget.set_active(True) return False def __toggled_cb(self, widget): menu = self.__menu if widget.get_active() and menu: time = Gtk.get_current_event_time() qltk.popup_menu_under_widget(menu, widget, 0, time) elif menu: menu.popdown() �������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/__init__.py����������������������������������������������������������0000644�0001750�0001750�00000006140�12173213426�021010� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig, Michael Urman # 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import gi from gi.repository import Gtk from gi.repository import Gdk def get_top_parent(widget): """Return the ultimate parent of a widget; the assumption that code using this makes is that it will be a Gtk.Window, i.e. the widget is fully packed when this is called.""" parent = widget and widget.get_toplevel() if parent and parent.is_toplevel(): return parent else: return None def popup_menu_under_widget(menu, widget, button, time): def pos_func(menu, data, widget=widget): screen = widget.get_screen() ref = get_top_parent(widget) menu.set_screen(screen) x, y = widget.translate_coordinates(ref, 0, 0) dx, dy = ref.get_window().get_origin()[1:] wa = widget.get_allocation() # fit menu to screen, aligned per text direction screen_width = screen.get_width() screen_height = screen.get_height() menu.realize() ma = menu.get_allocation() menu_y = y + dy + wa.height if menu_y + ma.height > screen_height and y + dy - ma.height > 0: menu_y = y + dy - ma.height if Gtk.Widget.get_default_direction() == Gtk.TextDirection.LTR: menu_x = min(x + dx, screen_width - ma.width) else: menu_x = max(0, x + dx - ma.width + wa.width) return (menu_x, menu_y, True) # x, y, move_within_screen menu.popup(None, None, pos_func, None, button, time) return True def is_accel(event, accel): """Checks if the given keypress Gdk.Event matches an accelerator string example: is_accel(event, "<shift><ctrl>z") """ if event.type != Gdk.EventType.KEY_PRESS: return False # ctrl+shift+x gives us ctrl+shift+X and accelerator_parse returns # lowercase values for matching, so lowercase it if possible keyval = event.keyval if not keyval & ~0xFF: keyval = ord(chr(keyval).lower()) default_mod = Gtk.accelerator_get_default_mod_mask() accel_keyval, accel_mod = Gtk.accelerator_parse(accel) # If the accel contains non default modifiers matching will never work and # since no one should use them, complain non_default = accel_mod & ~default_mod if non_default: print_w("Accelerator '%s' contains a non default modifier '%s'." % (accel, Gtk.accelerator_name(0, non_default) or "")) # Remove everything except default modifiers and compare return (accel_keyval, accel_mod) == (keyval, event.state & default_mod) gtk_version = (Gtk.get_major_version(), Gtk.get_minor_version(), Gtk.get_micro_version()) try: # no public way pygobject_version = gi._gobject.pygobject_version except AttributeError: pygobject_version = (-1,) # Legacy plugin/code support. from quodlibet.qltk.getstring import GetStringDialog from quodlibet.qltk.msg import * from quodlibet.qltk.x import * ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/msg.py���������������������������������������������������������������0000644�0001750�0001750�00000005724�12173213426�020046� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig, Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from quodlibet.qltk import get_top_parent class Message(Gtk.MessageDialog): """A message dialog that destroys itself after it is run, uses markup, and defaults to an 'OK' button.""" def __init__( self, kind, parent, title, description, buttons=Gtk.ButtonsType.OK): parent = get_top_parent(parent) text = ("<span weight='bold' size='larger'>%s</span>\n\n%s" % (title, description)) super(Message, self).__init__( parent, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, kind, buttons) self.set_markup(text) def run(self, destroy=True): resp = super(Message, self).run() if destroy: self.destroy() return resp class ConfirmAction(Message): """A message dialog that asks a yes/no question.""" def __init__(self, *args, **kwargs): kwargs["buttons"] = Gtk.ButtonsType.YES_NO super(ConfirmAction, self).__init__( Gtk.MessageType.WARNING, *args, **kwargs) def run(self, destroy=True): """Returns True if yes was clicked, False otherwise.""" resp = super(Message, self).run() if destroy: self.destroy() if resp == Gtk.ResponseType.YES: return True else: return False class CancelRevertSave(Gtk.MessageDialog): def __init__(self, parent): title = _("Discard tag changes?") description = _("Tags have been changed but not saved. Save these " "files, or revert and discard changes?") text = ("<span weight='bold' size='larger'>%s</span>\n\n%s" % (title, description)) parent = get_top_parent(parent) super(CancelRevertSave, self).__init__( parent, flags=0, type=Gtk.MessageType.WARNING, buttons=Gtk.ButtonsType.NONE) self.add_buttons(Gtk.STOCK_SAVE, Gtk.ResponseType.YES, Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_REVERT_TO_SAVED, Gtk.ResponseType.NO) self.set_default_response(Gtk.ResponseType.NO) self.set_markup(text) def run(self): resp = super(CancelRevertSave, self).run() self.destroy() return resp class ErrorMessage(Message): """Like Message, but uses an error-indicating picture.""" def __init__(self, *args, **kwargs): super(ErrorMessage, self).__init__( Gtk.MessageType.ERROR, *args, **kwargs) class WarningMessage(Message): """Like Message, but uses an warning-indicating picture.""" def __init__(self, *args, **kwargs): super(WarningMessage, self).__init__( Gtk.MessageType.ERROR, *args, **kwargs) ��������������������������������������������quodlibet-3.0.2/quodlibet/qltk/queue.py�������������������������������������������������������������0000644�0001750�0001750�00000017711�12173213426�020403� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from gi.repository import Gtk, Gdk from quodlibet import config from quodlibet import const from quodlibet import util from quodlibet import qltk from quodlibet.qltk.ccb import ConfigCheckButton from quodlibet.qltk.songlist import SongList, DND_QL, DND_URI_LIST from quodlibet.qltk.songsmenu import SongsMenu from quodlibet.qltk.playorder import OrderInOrder, OrderShuffle from quodlibet.qltk.x import ScrolledWindow QUEUE = os.path.join(const.USERDIR, "queue") class QueueExpander(Gtk.Expander): def __init__(self, menu, library, player): super(QueueExpander, self).__init__() sw = ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS) sw.set_shadow_type(Gtk.ShadowType.IN) self.queue = PlayQueue(library, player) sw.add(self.queue) hb = Gtk.HBox(spacing=12) hb2 = Gtk.HBox(spacing=3) state = Gtk.Image.new_from_stock( Gtk.STOCK_MEDIA_STOP, Gtk.IconSize.MENU) hb2.pack_start(state, True, True, 0) l = Gtk.Label(label=_("_Queue")) hb2.pack_start(l, True, True, 0) hb.pack_start(hb2, True, True, 0) l.set_use_underline(True) clear = Gtk.Image.new_from_stock(Gtk.STOCK_CLEAR, Gtk.IconSize.MENU) b = Gtk.Button() b.add(clear) b.set_tooltip_text(_("Remove all songs from the queue")) b.connect('clicked', self.__clear_queue) b.hide() b.set_relief(Gtk.ReliefStyle.NONE) hb.pack_start(b, False, False, 0) l2 = Gtk.Label() hb.pack_start(l2, True, True, 0) cb = ConfigCheckButton( _("_Random"), "memory", "shufflequeue") cb.connect('toggled', self.__queue_shuffle, self.queue.model) cb.set_active(config.getboolean("memory", "shufflequeue")) hb.pack_start(cb, True, True, 0) self.set_label_widget(hb) self.add(sw) self.connect_object('notify::expanded', self.__expand, cb, b) targets = [ ("text/x-quodlibet-songs", Gtk.TargetFlags.SAME_APP, DND_QL), ("text/uri-list", 0, DND_URI_LIST) ] targets = [Gtk.TargetEntry.new(*t) for t in targets] self.drag_dest_set(Gtk.DestDefaults.ALL, targets, Gdk.DragAction.COPY) self.connect('drag-motion', self.__motion) self.connect('drag-data-received', self.__drag_data_received) self.model = self.queue.model self.show_all() self.queue.model.connect_after('row-inserted', util.DeferredSignal(self.__check_expand), l2) self.queue.model.connect_after('row-deleted', util.DeferredSignal(self.__update_count), l2) cb.hide() self.connect_object('notify::visible', self.__visible, cb, menu, b) self.__update_count(self.model, None, l2) player.connect('song-started', self.__update_state_icon, state) player.connect('paused', self.__update_state_icon_pause, state, Gtk.STOCK_MEDIA_PAUSE) player.connect('unpaused', self.__update_state_icon_pause, state, Gtk.STOCK_MEDIA_PLAY) # to make the children clickable if mapped # ....no idea why, but works def hack(expander): label = expander.get_label_widget() if label: label.unmap() label.map() self.connect("map", hack) def __update_state_icon(self, player, song, state): if self.model.sourced: icon = Gtk.STOCK_MEDIA_PLAY else: icon = Gtk.STOCK_MEDIA_STOP state.set_from_stock(icon, Gtk.IconSize.MENU) def __update_state_icon_pause(self, player, state, icon): if self.model.sourced: state.set_from_stock(icon, Gtk.IconSize.MENU) def __clear_queue(self, activator): self.model.clear() def __motion(self, wid, context, x, y, time): Gdk.drag_status(context, Gdk.DragAction.COPY, time) return True def __update_count(self, model, path, lab): if len(model) == 0: text = "" else: time = sum([row[0].get("~#length", 0) for row in model]) text = ngettext("%(count)d song (%(time)s)", "%(count)d songs (%(time)s)", len(model)) % { "count": len(model), "time": util.format_time(time)} lab.set_text(text) def __check_expand(self, model, path, iter, lab): if not self.get_property('visible'): self.set_expanded(False) self.__update_count(model, path, lab) self.show() def __drag_data_received(self, expander, *args): self.queue.emit('drag-data-received', *args) def __queue_shuffle(self, button, model): if not button.get_active(): model.order = OrderInOrder(model) else: model.order = OrderShuffle(model) def __expand(self, cb, prop, clear): cb.set_property('visible', self.get_expanded()) clear.set_property('visible', self.get_expanded()) def __visible(self, cb, prop, menu, clear): value = self.get_property('visible') config.set("memory", "queue", str(value)) menu.set_active(value) self.set_expanded(not self.model.is_empty()) cb.set_property('visible', self.get_expanded()) clear.set_property('visible', self.get_expanded()) class PlayQueue(SongList): class CurrentColumn(Gtk.TreeViewColumn): # Match MainSongList column sizes by default. header_name = "~current" def __init__(self): super(PlayQueue.CurrentColumn, self).__init__() self.set_sizing(Gtk.TreeViewColumnSizing.FIXED) self.set_fixed_width(24) def __init__(self, library, player): super(PlayQueue, self).__init__(library, player) self.set_size_request(-1, 120) self.model = self.get_model() self.connect('row-activated', self.__go_to, player) self.connect_object('popup-menu', self.__popup, library) self.enable_drop() self.connect_object('destroy', self.__write, self.model) self.__fill(library) self.connect('key-press-event', self.__delete_key_pressed) def __delete_key_pressed(self, widget, event): if qltk.is_accel(event, "Delete"): self.__remove() return True return False def __go_to(self, view, path, column, player): self.model.go_to(self.model.get_iter(path)) player.next() def __fill(self, library): try: filenames = file(QUEUE, "rU").readlines() except EnvironmentError: pass else: filenames = map(str.strip, filenames) if library.librarian: library = library.librarian songs = filter(None, map(library.get, filenames)) for song in songs: self.model.append([song]) def __write(self, model): filenames = "\n".join([row[0]["~filename"] for row in model]) f = file(QUEUE, "w") f.write(filenames) f.close() def __popup(self, library): songs = self.get_selected_songs() if not songs: return menu = SongsMenu( library, songs, queue=False, remove=False, delete=False, parent=self) menu.preseparate() remove = Gtk.ImageMenuItem(Gtk.STOCK_REMOVE, use_stock=True) remove.connect('activate', self.__remove) menu.prepend(remove) menu.show_all() return self.popup_menu(menu, 0, Gtk.get_current_event_time()) def __remove(self, *args): self.remove_selection() def set_sort_by(self, *args): pass def get_sort_by(self, *args): return "", False �������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/edittags.py����������������������������������������������������������0000644�0001750�0001750�00000103616�12173213426�021063� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2012 Joe Wreschnig, Michael Urman, Iñigo Serna, Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import sys from gi.repository import Gtk, Pango, Gdk from quodlibet import qltk from quodlibet import config from quodlibet import formats from quodlibet import util from quodlibet.util import massagers from quodlibet.qltk.completion import LibraryValueCompletion from quodlibet.qltk.tagscombobox import TagsComboBox, TagsComboBoxEntry from quodlibet.qltk.views import RCMHintedTreeView, TreeViewColumn from quodlibet.qltk.wlw import WritingWindow from quodlibet.qltk.x import SeparatorMenuItem from quodlibet.qltk._editpane import EditingPluginHandler from quodlibet.plugins import PluginManager class AudioFileGroup(dict): class Comment(unicode): complete = True def __repr__(self): return '%s %s' % (str(self), self.paren()) def __str__(self): return util.escape(self) def paren(self): if self.shared: return ngettext('missing from %d song', 'missing from %d songs', self.missing) % self.missing elif self.complete: return ngettext('different across %d song', 'different across %d songs', self.total) % self.total else: d = ngettext('different across %d song', 'different across %d songs', self.have) % self.have m = ngettext('missing from %d song', 'missing from %d songs', self.missing) % self.missing return ", ".join([d, m]) def safenicestr(self): if self.shared and self.complete: return util.escape(self.encode("utf-8")) elif self.shared: return "\n".join(['%s<i> (%s)</i>' % (s, self.paren()) for s in str(self).split("\n")]) else: return '<i>(%s)</i>' % self.paren() class SharedComment(Comment): shared = True class UnsharedComment(Comment): shared = False class PartialSharedComment(SharedComment): complete = False class PartialUnsharedComment(UnsharedComment): complete = False def realkeys(self): return filter(lambda s: s and "~" not in s and "=" not in s, self) is_file = True multiple_values = True def __init__(self, songs): keys = {} first = {} all = {} total = len(songs) self.songs = songs for song in songs: self.is_file &= song.is_file self.multiple_values &= song.multiple_values for comment, val in song.iteritems(): keys[comment] = keys.get(comment, 0) + 1 first.setdefault(comment, val) all[comment] = all.get(comment, True) and first[comment] == val # collect comment representations for comment, count in keys.iteritems(): if count < total: if all[comment]: value = self.PartialSharedComment(first[comment]) else: value = self.PartialUnsharedComment(first[comment]) else: decoded = first[comment] if isinstance(decoded, str): decoded = util.decode(decoded) if all[comment]: value = self.SharedComment(decoded) else: value = self.UnsharedComment(decoded) value.have = count value.total = total value.missing = total - count self[comment] = value def can_change(self, k=None): if k is None: can = True for song in self.songs: cantoo = song.can_change() if can is True: can = cantoo elif cantoo is True: pass else: can = set(can) | set(cantoo) else: if not self.songs: return False can = min([song.can_change(k) for song in self.songs]) return can class SplitValues(Gtk.ImageMenuItem): tags = False needs = [] _order = 0.0 def __init__(self, tag, value): super(SplitValues, self).__init__( _("Split into _Multiple Values"), use_underline=True) self.set_image(Gtk.Image.new_from_stock( Gtk.STOCK_FIND_AND_REPLACE, Gtk.IconSize.MENU)) spls = config.get("editing", "split_on").decode( 'utf-8', 'replace').split() self.set_sensitive(len(util.split_value(value, spls)) > 1) def activated(self, tag, value): spls = config.get("editing", "split_on").decode( 'utf-8', 'replace').split() return [(tag, v) for v in util.split_value(value, spls)] class SplitDisc(Gtk.ImageMenuItem): tags = ["album"] needs = ["discnumber"] _order = 0.5 def __init__(self, tag, value): super(SplitDisc, self).__init__( _("Split Disc out of _Album"), use_underline=True) self.set_image(Gtk.Image.new_from_stock( Gtk.STOCK_FIND_AND_REPLACE, Gtk.IconSize.MENU)) self.set_sensitive(util.split_album(value)[1] is not None) def activated(self, tag, value): album, disc = util.split_album(value) return [(tag, album), ("discnumber", disc)] class SplitTitle(Gtk.ImageMenuItem): tags = ["title"] needs = ["version"] _order = 0.5 def __init__(self, tag, value): super(SplitTitle, self).__init__( _("Split _Version out of Title"), use_underline=True) self.set_image(Gtk.Image.new_from_stock( Gtk.STOCK_FIND_AND_REPLACE, Gtk.IconSize.MENU)) spls = config.get("editing", "split_on").decode( 'utf-8', 'replace').split() self.set_sensitive(bool(util.split_title(value, spls)[1])) def activated(self, tag, value): spls = config.get("editing", "split_on").decode( 'utf-8', 'replace').split() title, versions = util.split_title(value, spls) return [(tag, title)] + [("version", v) for v in versions] class SplitPerson(Gtk.ImageMenuItem): tags = ["artist"] _order = 0.5 def __init__(self, tag, value): super(SplitPerson, self).__init__(self.title, use_underline=True) self.set_image(Gtk.Image.new_from_stock( Gtk.STOCK_FIND_AND_REPLACE, Gtk.IconSize.MENU)) spls = config.get("editing", "split_on").decode( 'utf-8', 'replace').split() self.set_sensitive(bool(util.split_people(value, spls)[1])) def activated(self, tag, value): spls = config.get("editing", "split_on").decode( 'utf-8', 'replace').split() artist, others = util.split_people(value, spls) return [(tag, artist)] + [(self.needs[0], o) for o in others] class SplitArranger(SplitPerson): needs = ["arranger"] title = _("Split Arranger out of Ar_tist") class SplitPerformer(SplitPerson): needs = ["performer"] title = _("Split _Performer out of Artist") class SplitPerformerFromTitle(SplitPerson): tags = ["title"] needs = ["performer"] title = _("Split _Performer out of Title") class SplitOriginalArtistFromTitle(SplitPerson): tags = ["title"] needs = ["originalartist"] title = _("Split _Originalartist out of Title") class AddTagDialog(Gtk.Dialog): def __init__(self, parent, can_change, library): super(AddTagDialog, self).__init__( _("Add a Tag"), qltk.get_top_parent(parent)) self.set_border_width(6) self.set_resizable(False) self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) add = self.add_button(Gtk.STOCK_ADD, Gtk.ResponseType.OK) self.vbox.set_spacing(6) self.set_default_response(Gtk.ResponseType.OK) table = Gtk.Table(2, 2) table.set_row_spacings(12) table.set_col_spacings(6) table.set_border_width(6) self.__tag = (TagsComboBoxEntry() if can_change is True else TagsComboBox(can_change)) label = Gtk.Label() label.set_alignment(0.0, 0.5) label.set_text(_("_Tag:")) label.set_use_underline(True) label.set_mnemonic_widget(self.__tag) table.attach(label, 0, 1, 0, 1) table.attach(self.__tag, 1, 2, 0, 1) self.__val = Gtk.Entry() self.__val.set_completion(LibraryValueCompletion("", library)) label = Gtk.Label() label.set_text(_("_Value:")) label.set_alignment(0.0, 0.5) label.set_use_underline(True) label.set_mnemonic_widget(self.__val) valuebox = Gtk.EventBox() table.attach(label, 0, 1, 1, 2) table.attach(valuebox, 1, 2, 1, 2) hbox = Gtk.HBox() valuebox.add(hbox) hbox.pack_start(self.__val, True, True, 0) hbox.set_spacing(6) invalid = Gtk.Image.new_from_stock( Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.SMALL_TOOLBAR) hbox.pack_start(invalid, True, True, 0) self.vbox.pack_start(table, True, True, 0) self.get_child().show_all() invalid.hide() for entry in [self.__tag, self.__val]: entry.connect( 'changed', self.__validate, add, invalid, valuebox) self.__tag.connect('changed', self.__set_value_completion, library) self.__set_value_completion(self.__tag, library) if can_change is True: self.__tag.get_child().connect_object( 'activate', Gtk.Entry.grab_focus, self.__val) def __set_value_completion(self, tag, library): completion = self.__val.get_completion() if completion: completion.set_tag(self.__tag.tag, library) def get_tag(self): try: return self.__tag.tag except AttributeError: return self.__tag.tag def get_value(self): return self.__val.get_text().decode("utf-8") def __validate(self, editable, add, invalid, box): tag = self.get_tag() value = self.get_value() fmt = massagers.tags.get(tag) if fmt: valid = fmt.is_valid(value) else: valid = True add.set_sensitive(valid) if valid: invalid.hide() box.set_tooltip_text("") else: invalid.show() box.set_tooltip_text(fmt.error) def run(self): self.show() self.__val.set_activates_default(True) self.__tag.grab_focus() return super(AddTagDialog, self).run() TAG, VALUE, EDITED, CANEDIT, DELETED, ORIGVALUE, RENAMED, ORIGTAG = range(8) def is_special(string): return string.endswith("</i>") def is_different(string): return is_special(string) and string.startswith("<i>") def is_missing(string): return is_special(string) and not string.startswith("<i>") def strip_missing(string): try: return string[:string.index(" <i>")] except ValueError: return string class EditTagsPluginHandler(EditingPluginHandler): from quodlibet.plugins.editing import EditTagsPlugin Kind = EditTagsPlugin class EditTags(Gtk.VBox): _SAVE_BUTTON_KEY = 'ql-save' _REVERT_BUTTON_KEY = 'ql-revert' # Translators: translate only to override the text # for the tag "save" button _SAVE_BUTTON_TEXT = _('ql-save') # Translators: translate only to override the for the tag "revert" button _REVERT_BUTTON_TEXT = _('ql-revert') handler = EditTagsPluginHandler() @classmethod def init_plugins(cls): PluginManager.instance.register_handler(cls.handler) def __init__(self, parent, library): super(EditTags, self).__init__(spacing=12) self.title = _("Edit Tags") self.set_border_width(12) model = Gtk.ListStore(str, str, bool, bool, bool, str, bool, str) view = RCMHintedTreeView(model) selection = view.get_selection() render = Gtk.CellRendererPixbuf() column = TreeViewColumn(_("Write"), render) style = view.get_style() pixbufs = [style.lookup_icon_set(stock) .render_icon(style, Gtk.TextDirection.NONE, state, Gtk.IconSize.MENU, view, None) for state in (Gtk.StateType.INSENSITIVE, Gtk.StateType.NORMAL) for stock in (Gtk.STOCK_EDIT, Gtk.STOCK_DELETE)] def cdf_write(col, rend, model, iter, (write, delete)): row = model[iter] if row[CANEDIT]: rend.set_property('stock-id', None) rend.set_property('pixbuf', pixbufs[2 * row[EDITED] + row[DELETED]]) else: rend.set_property('stock-id', Gtk.STOCK_DIALOG_AUTHENTICATION) column.set_cell_data_func(render, cdf_write, (2, 4)) view.append_column(column) render = Gtk.CellRendererText() column = TreeViewColumn( _('Tag'), render, text=0, editable=3, strikethrough=4) column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) render.set_property('editable', True) render.connect('edited', self.__edit_tag_name, model) render.connect( 'editing-started', self.__tag_editing_started, model, library) view.append_column(column) render = Gtk.CellRendererText() render.set_property('ellipsize', Pango.EllipsizeMode.END) render.set_property('editable', True) render.connect('edited', self.__edit_tag, model) render.connect( 'editing-started', self.__value_editing_started, model, library) render.markup = 1 column = TreeViewColumn( _('Value'), render, markup=1, editable=3, strikethrough=4) column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) view.append_column(column) sw = Gtk.ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.IN) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.add(view) self.pack_start(sw, True, True, 0) # Add and Remove [tags] buttons buttonbox = Gtk.HBox(spacing=18) bbox1 = Gtk.HButtonBox() bbox1.set_spacing(6) bbox1.set_layout(Gtk.ButtonBoxStyle.START) add = Gtk.Button(stock=Gtk.STOCK_ADD) add.set_focus_on_click(False) add.connect('clicked', self.__add_tag, model, library) bbox1.pack_start(add, True, True, 0) # Remove button remove = Gtk.Button(stock=Gtk.STOCK_REMOVE) remove.set_focus_on_click(False) remove.connect('clicked', self.__remove_tag, view) remove.set_sensitive(False) bbox1.pack_start(remove, True, True, 0) # Revert and save buttons # Both can have customised translated text (and thus accels) bbox2 = Gtk.HButtonBox() bbox2.set_spacing(6) bbox2.set_layout(Gtk.ButtonBoxStyle.END) revert = (Gtk.Button(stock=Gtk.STOCK_REVERT_TO_SAVED) if self._REVERT_BUTTON_KEY == self._REVERT_BUTTON_TEXT else Gtk.Button(label=self._REVERT_BUTTON_TEXT, use_underline=True)) revert.set_sensitive(False) # Save button. save = (Gtk.Button(stock=Gtk.STOCK_SAVE) if self._SAVE_BUTTON_TEXT == self._SAVE_BUTTON_KEY else Gtk.Button(label=self._SAVE_BUTTON_TEXT, use_underline=True)) save.set_sensitive(False) self.save = save bbox2.pack_start(revert, True, True, 0) bbox2.pack_start(save, True, True, 0) buttonbox.pack_start(bbox1, True, True, 0) buttonbox.pack_start(bbox2, True, True, 0) self.pack_start(buttonbox, False, True, 0) UPDATE_ARGS = [ view, buttonbox, model, add, [save, revert, remove]] parent.connect_object( 'changed', self.__class__.__update, self, *UPDATE_ARGS) revert.connect_object( 'clicked', self.__update, None, *UPDATE_ARGS) revert.connect_object('clicked', parent.set_pending, None) save.connect('clicked', self.__save_files, revert, model, library) save.connect_object('clicked', parent.set_pending, None) for sig in ['row-inserted', 'row-deleted', 'row-changed']: model.connect(sig, self.__enable_save, [save, revert]) model.connect_object(sig, parent.set_pending, save) view.connect('popup-menu', self.__popup_menu, parent) view.connect('button-press-event', self.__button_press) view.connect('key-press-event', self.__view_key_press_event) selection.connect('changed', self.__tag_select, remove) selection.set_mode(Gtk.SelectionMode.MULTIPLE) self.show_all() def __view_key_press_event(self, view, event): # We can't use a real accelerator to this because it would # interfere with typeahead and row editing. ctrl = event.get_state() & Gdk.ModifierType.CONTROL_MASK keyval_name = Gdk.keyval_name(event.keyval) if event.keyval == Gtk.accelerator_parse("Delete")[0]: self.__remove_tag(view, view) elif ctrl and keyval_name == 's': # Issue 697: allow Ctrl-s to save. self.save.emit('clicked') def __enable_save(self, *args): buttons = args[-1] for b in buttons: b.set_sensitive(True) def __paste(self, clip, text, (rend, path)): if text: rend.emit('edited', path, text.strip()) def __menu_activate(self, activator, view): model, (iter,) = view.get_selection().get_selected_rows() row = model[iter] tag = row[TAG] value = util.unescape(row[VALUE].decode('utf-8')) vals = activator.activated(tag, value) replaced = False if vals and (len(vals) != 1 or vals[0][1] != value): for atag, aval in vals: if atag == tag and not replaced: replaced = True row[VALUE] = util.escape(aval) row[EDITED] = True else: self.__add_new_tag(model, atag, aval) elif vals: replaced = True if not replaced: row[EDITED] = row[DELETED] = True def __popup_menu(self, view, parent): menu = Gtk.Menu() view.ensure_popup_selection() model, rows = view.get_selection().get_selected_rows() can_change = min([model[path][CANEDIT] for path in rows]) items = [SplitDisc, SplitTitle, SplitPerformer, SplitArranger, SplitValues, SplitPerformerFromTitle, SplitOriginalArtistFromTitle] items.extend(self.handler.plugins) items.sort(key=lambda item: (item._order, item.__name__)) if len(rows) == 1: row = model[rows[0]] value = row[VALUE].decode('utf-8') text = util.unescape(value) multi = (value.split("<")[0] != value) for Item in items: if Item.tags and row[TAG] not in Item.tags: continue try: b = Item(row[TAG], text) except: util.print_exc() else: b.connect('activate', self.__menu_activate, view) if (not min(map(self.__songinfo.can_change, b.needs) + [1]) or multi): b.set_sensitive(False) menu.append(b) if menu.get_children(): menu.append(SeparatorMenuItem()) b = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_REMOVE, None) b.connect('activate', self.__remove_tag, view) keyval, mod = Gtk.accelerator_parse("Delete") menu.__accels = Gtk.AccelGroup() b.add_accelerator( 'activate', menu.__accels, keyval, mod, Gtk.AccelFlags.VISIBLE) menu.append(b) menu.show_all() # Setting the menu itself to be insensitive causes it to not # be dismissed; see #473. for c in menu.get_children(): c.set_sensitive(can_change and c.get_property('sensitive')) menu.connect('selection-done', lambda m: m.destroy()) # XXX: Keep reference self.__menu = menu return view.popup_menu(menu, 3, Gtk.get_current_event_time()) def __tag_select(self, selection, remove): model, rows = selection.get_selected_rows() remove.set_sensitive( bool(rows and min([model[row][CANEDIT] for row in rows]))) def __add_new_tag(self, model, tag, value): if (tag in self.__songinfo and not self.__songinfo.multiple_values): title = _("Unable to add tag") msg = _("Unable to add <b>%s</b>\n\nThe files currently" " selected do not support multiple values." ) % util.escape(tag) qltk.ErrorMessage(self, title, msg).run() return iters = [row.iter for row in model if row[TAG] == tag] row = [tag, util.escape(value), True, True, False, None, False, None] if len(iters): model.insert_after(iters[-1], row=row) else: model.append(row=row) def __add_tag(self, activator, model, library): add = AddTagDialog(self, self.__songinfo.can_change(), library) while True: resp = add.run() if resp != Gtk.ResponseType.OK: break tag = add.get_tag() value = add.get_value() if tag in massagers.tags: value = massagers.tags[tag].validate(value) if not self.__songinfo.can_change(tag): title = _("Invalid tag") msg = _("Invalid tag <b>%s</b>\n\nThe files currently" " selected do not support editing this tag." ) % util.escape(tag) qltk.ErrorMessage(self, title, msg).run() else: self.__add_new_tag(model, tag, value) break add.destroy() def __remove_tag(self, activator, view): model, paths = view.get_selection().get_selected_rows() # Since the iteration can modify path numbers, we need accurate # rows (= iters) before we start. rows = [model[path] for path in paths] for row in rows: if row[ORIGVALUE] is not None: row[EDITED] = row[DELETED] = True else: model.remove(row.iter) def __save_files(self, save, revert, model, library): updated = {} deleted = {} added = {} renamed = {} for row in model: if row[EDITED] and not (row[DELETED] or row[RENAMED]): if row[ORIGVALUE] is not None: updated.setdefault(row[TAG], []) updated[row[TAG]].append((util.decode(row[VALUE]), util.decode(row[ORIGVALUE]))) else: added.setdefault(row[TAG], []) added[row[TAG]].append(util.decode(row[VALUE])) if row[EDITED] and row[DELETED]: if row[ORIGVALUE] is not None: deleted.setdefault(row[TAG], []) deleted[row[TAG]].append(util.decode(row[ORIGVALUE])) if row[EDITED] and row[RENAMED] and not row[DELETED]: renamed.setdefault(row[TAG], []) renamed[row[TAG]].append((util.decode(row[ORIGTAG]), util.decode(row[VALUE]), util.decode(row[ORIGVALUE]))) was_changed = [] songs = self.__songinfo.songs win = WritingWindow(self, len(songs)) for song in songs: if not song.valid() and not qltk.ConfirmAction( self, _("Tag may not be accurate"), _("<b>%s</b> changed while the program was running. " "Saving without refreshing your library may " "overwrite other changes to the song.\n\n" "Save this song anyway?") % util.escape(util.fsdecode( song("~basename"))) ).run(): break changed = False for key, values in updated.iteritems(): for (new_value, old_value) in values: new_value = util.unescape(new_value) if song.can_change(key): if old_value is None: song.add(key, new_value) else: song.change(key, old_value, new_value) changed = True for key, values in added.iteritems(): for value in values: value = util.unescape(value) if song.can_change(key): song.add(key, value) changed = True for key, values in deleted.iteritems(): for value in values: value = util.unescape(value) if song.can_change(key) and key in song: song.remove(key, value) changed = True save_rename = [] for new_tag, values in renamed.iteritems(): for old_tag, new_value, old_value in values: old_tag = util.unescape(old_tag) old_value = util.unescape(old_value) new_value = util.unescape(new_value) if (song.can_change(new_tag) and song.can_change(old_tag) and old_tag in song): if not is_special(new_value): song.remove(old_tag, old_value) save_rename.append((new_tag, new_value)) elif is_missing(new_value): value = strip_missing(old_value) song.remove(old_tag, old_value) save_rename.append((new_tag, new_value)) else: save_rename.append((new_tag, song[old_tag])) song.remove(old_tag, None) changed = True for tag, value in save_rename: song.add(tag, value) if changed: try: song.write() except: util.print_exc() qltk.ErrorMessage( self, _("Unable to save song"), _("Saving <b>%s</b> failed. The file " "may be read-only, corrupted, or you " "do not have permission to edit it.") % ( util.escape(util.fsdecode( song('~basename'))))).run() library.reload(song, changed=was_changed) break was_changed.append(song) if win.step(): break win.destroy() library.changed(was_changed) for b in [save, revert]: b.set_sensitive(False) def __edit_tag(self, renderer, path, new_value, model): new_value = ', '.join(new_value.splitlines()) row = model[path] if row[TAG] in massagers.tags: fmt = massagers.tags[row[TAG]] if not fmt.is_valid(new_value): qltk.WarningMessage( self, _("Invalid value"), _("Invalid value: <b>%(value)s</b>\n\n%(error)s") % { "value": new_value, "error": fmt.error}).run() return else: new_value = fmt.validate(new_value) tag = self.__songinfo.get(row[TAG], None) if row[VALUE].split('<')[0] != new_value or ( tag and tag.shared and not tag.complete): row[VALUE] = util.escape(new_value) row[EDITED] = True row[DELETED] = False def __edit_tag_name(self, renderer, path, new_tag, model): new_tag = ' '.join(new_tag.splitlines()).lower() row = model[path] if new_tag == row[TAG]: return elif not self.__songinfo.can_change(row[TAG]): # Can't remove the old tag. title = _("Invalid tag") msg = _("Invalid tag <b>%s</b>\n\nThe files currently" " selected do not support editing this tag." ) % util.escape(row[TAG]) qltk.ErrorMessage(self, title, msg).run() elif not self.__songinfo.can_change(new_tag): # Can't add the new tag. title = _("Invalid tag") msg = _("Invalid tag <b>%s</b>\n\nThe files currently" " selected do not support editing this tag." ) % util.escape(new_tag) qltk.ErrorMessage(self, title, msg).run() else: if new_tag in massagers.tags: fmt = massagers.tags[new_tag] v = util.unescape(row[VALUE]) if not fmt.is_valid(v): qltk.WarningMessage( self, _("Invalid value"), _("Invalid value: <b>%(value)s</b>\n\n%(error)s") % { "value": row[VALUE], "error": fmt.error}).run() return value = fmt.validate(v) else: value = row[VALUE] value = util.unescape(value) if row[ORIGVALUE] is None: # The tag hasn't been saved yet, so we can just update # the name in the model, and the value, since it # may have been re-validated. row[TAG] = new_tag row[VALUE] = value else: # The tag has been saved, so delete the old tag and # add a new one with the old (or sanitized) value. row[RENAMED] = row[EDITED] = True row[ORIGTAG] = row[TAG] row[TAG] = new_tag def __button_press(self, view, event): if event.button not in [1, 2]: return False x, y = map(int, [event.x, event.y]) try: path, col, cellx, celly = view.get_path_at_pos(x, y) except TypeError: return False if event.button == 1 and col is view.get_columns()[0]: row = view.get_model()[path] row[EDITED] = not row[EDITED] if row[EDITED]: idx = row[VALUE].find('<i>') if idx >= 0: row[VALUE] = row[VALUE][:idx].strip() return True elif event.button == 2 and col == view.get_columns()[2]: display = Gdk.display_manager_get().get_default_display() clipboardname = ["PRIMARY", "CLIPBOARD"][sys.platform == "win32"] clipboard = Gtk.Clipboard(display, clipboardname) for rend in col.get_cell_renderers(): if rend.get_property('editable'): clipboard.request_text(self.__paste, (rend, path.get_indices()[0])) return True else: return False else: return False def __update(self, songs, view, buttonbox, model, add, buttons): if songs is None: songs = self.__songinfo.songs self.__songinfo = songinfo = AudioFileGroup(songs) view.set_model(None) model.clear() view.set_model(model) keys = sorted(songinfo.realkeys()) if not config.getboolean("editing", "alltags"): keys = filter(lambda k: k not in formats.MACHINE_TAGS, keys) # reverse order here so insertion puts them in proper order. for tag in ['album', 'artist', 'title']: try: keys.remove(tag) except ValueError: pass else: keys.insert(0, tag) for tag in keys: # Handle with care. orig_value = songinfo[tag].split("\n") value = songinfo[tag].safenicestr() edited = False edit = songinfo.can_change(tag) deleted = False renamed = False newtag = "" if value[0:1] == "<": # "different etc." model.append(row=[tag, value, edited, edit, deleted, "\n".join(orig_value), renamed, newtag]) else: for i, v in enumerate(value.split("\n")): model.append(row=[tag, v, edited, edit, deleted, orig_value[i], renamed, newtag]) buttonbox.set_sensitive(bool(songinfo.can_change())) for b in buttons: b.set_sensitive(False) add.set_sensitive(bool(songs)) def __value_editing_started(self, render, editable, path, model, library): try: if not editable.get_completion(): tag = model[path][TAG] completion = LibraryValueCompletion(tag, library) editable.set_completion(completion) except AttributeError: pass if isinstance(editable, Gtk.Entry): editable.set_text(util.unescape(model[path][VALUE].split('<')[0])) def __tag_editing_started(self, render, editable, path, model, library): try: if not editable.get_completion(): tags = self.__songinfo.can_change() if tags is True: from quodlibet.formats import USEFUL_TAGS as tags completion = qltk.EntryCompletion(tags) editable.set_completion(completion) except AttributeError: pass ������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/window.py������������������������������������������������������������0000644�0001750�0001750�00000015143�12173212464�020564� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, GObject, Gdk from quodlibet import config from quodlibet.qltk import get_top_parent class Window(Gtk.Window): """Base window class the keeps track of all window instances. All active instances can be accessed through Window.instances. By defining dialog=True as a kwarg binds Escape to close, otherwise ^W will close the window. """ instances = [] __gsignals__ = { "close-accel": (GObject.SIGNAL_RUN_LAST | GObject.SIGNAL_ACTION, GObject.TYPE_NONE, ()) } def __init__(self, *args, **kwargs): dialog = kwargs.pop("dialog", True) super(Window, self).__init__(*args, **kwargs) type(self).instances.append(self) self.__accels = Gtk.AccelGroup() if dialog: self.set_type_hint(Gdk.WindowTypeHint.DIALOG) self.set_destroy_with_parent(True) self.set_position(Gtk.WindowPosition.CENTER_ON_PARENT) self.add_accel_group(self.__accels) if not dialog: self.add_accelerator('close-accel', self.__accels, ord('w'), Gdk.ModifierType.CONTROL_MASK, 0) else: esc, mod = Gtk.accelerator_parse("Escape") self.add_accelerator('close-accel', self.__accels, esc, mod, 0) self.connect_object('destroy', type(self).instances.remove, self) def set_transient_for(self, parent): """Set a parent for the window. In case parent=None, fall back to the main window. """ is_toplevel = parent and parent.props.type == Gtk.WindowType.TOPLEVEL if parent is None or not is_toplevel: if parent: print_w("Not a toplevel window set for: %r" % self) from quodlibet import app parent = app.window super(Window, self).set_transient_for(parent) def do_close_accel(self): #Do not close the window if we edit a Gtk.CellRendererText. #Focus the treeview instead. if isinstance(self.get_focus(), Gtk.Entry) and \ isinstance(self.get_focus().get_parent(), Gtk.TreeView): self.get_focus().get_parent().grab_focus() return if not self.emit('delete-event', Gdk.Event.new(Gdk.EventType.DELETE)): self.destroy() class PersistentWindowMixin(object): """A mixin for saving/restoring window size/position/maximized state""" def enable_window_tracking(self, config_prefix, size_suffix=""): """Enable tracking/saving of changes and restore size/pos/maximized config_prefix -- prefix for the config key (prefix_size, prefix_position, prefix_maximized) size_suffix -- optional suffix for saving the size. For cases where the window has multiple states with different content sizes. (example: edit tags with one song or multiple) """ self.__state = 0 self.__name = config_prefix self.__size_suffix = size_suffix self.connect('configure-event', self.__save_size) self.connect('window-state-event', self.__window_state_changed) self.connect('map', self.__map) self.__restore_window_state() def __map(self, *args): # Some WMs (metacity..) tend to forget the position randomly self.__restore_window_state() def __restore_window_state(self): self.__restore_size() self.__restore_state() self.__restore_position() def __conf(self, name): if name == "size": name += "_" + self.__size_suffix return "%s_%s" % (self.__name, name) def __restore_state(self): print_d("Restore state") if config.getint("memory", self.__conf("maximized"), 0): self.maximize() else: self.unmaximize() def __restore_position(self): print_d("Restore position") pos = config.get('memory', self.__conf("position"), "-1 -1") x, y = map(int, pos.split()) if x >= 0 and y >= 0: self.move(x, y) def __restore_size(self): print_d("Restore size") value = config.get('memory', self.__conf("size"), "-1 -1") x, y = map(int, value.split()) screen = self.get_screen() x = min(x, screen.get_width()) y = min(y, screen.get_height()) if x >= 0 and y >= 0: self.resize(x, y) def __save_size(self, window, event): if self.__state & Gdk.WindowState.MAXIMIZED: return value = "%d %d" % (event.width, event.height) config.set("memory", self.__conf("size"), value) if self.get_property("visible"): pos_value = '%s %s' % self.get_position() config.set('memory', self.__conf("position"), pos_value) def __window_state_changed(self, window, event): self.__state = event.new_window_state if self.__state & Gdk.WindowState.WITHDRAWN: return maximized = int(self.__state & Gdk.WindowState.MAXIMIZED) config.set("memory", self.__conf("maximized"), maximized) class UniqueWindow(Window): """A wrapper for the window class to get a one instance per class window. The is_not_unique method will return True if the window is already there.""" __window = None def __new__(klass, *args, **kwargs): window = klass.__window if window is None: return super(UniqueWindow, klass).__new__(klass, *args, **kwargs) #Look for widgets in the args, if there is one and it has #a new top level window, reparent and reposition the window. widgets = filter(lambda x: isinstance(x, Gtk.Widget), args) if widgets: parent = window.get_transient_for() new_parent = get_top_parent(widgets[0]) if parent and new_parent and parent is not new_parent: window.set_transient_for(new_parent) window.hide() window.show() window.present() return window @classmethod def is_not_unique(klass): if klass.__window: return True def __init__(self, *args, **kwargs): if type(self).__window: return else: type(self).__window = self super(UniqueWindow, self).__init__(*args, **kwargs) self.connect_object('destroy', self.__destroy, self) def __destroy(self, *args): type(self).__window = None �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/scanbox.py�����������������������������������������������������������0000644�0001750�0001750�00000007331�12173213426�020711� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2013 Joe Wreschnig, Michael Urman, Iñigo Serna, # Steven Robertson, Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk import os from gi.repository import Pango from quodlibet import util, config, const from quodlibet.qltk.chooser import FolderChooser from quodlibet.qltk.views import RCMHintedTreeView def get_init_select_dir(): scandirs = util.split_scan_dirs(config.get("settings", "scan")) if scandirs and os.path.isdir(scandirs[-1]): # start with last added directory return scandirs[-1] else: return const.HOME class ScanBox(Gtk.HBox): """A box for editing the Library's scan directories""" def __init__(self): super(ScanBox, self).__init__(spacing=6) self.model = model = Gtk.ListStore(str) view = RCMHintedTreeView(model) view.set_fixed_height_mode(True) view.set_headers_visible(False) view.set_tooltip_text(_("Songs in the listed folders will be added " "to the library during a library refresh")) menu = Gtk.Menu() remove_item = Gtk.ImageMenuItem(Gtk.STOCK_REMOVE, use_stock=True) menu.append(remove_item) menu.show_all() view.connect('popup-menu', self.__popup, menu) remove_item.connect_object('activate', self.__remove, view) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.IN) sw.add(view) sw.set_size_request(-1, max(sw.size_request().height, 80)) render = Gtk.CellRendererText() render.set_property('ellipsize', Pango.EllipsizeMode.END) def cdf(column, cell, model, iter, data): row = model[iter] cell.set_property('text', util.unexpand(row[0])) column = Gtk.TreeViewColumn(None, render) column.set_cell_data_func(render, cdf) column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) view.append_column(column) add = Gtk.Button(stock=Gtk.STOCK_ADD) add.connect("clicked", self.__add) remove = Gtk.Button(stock=Gtk.STOCK_REMOVE) selection = view.get_selection() selection.set_mode(Gtk.SelectionMode.MULTIPLE) selection.connect("changed", self.__select_changed, remove) selection.emit("changed") remove.connect_object("clicked", self.__remove, view) vbox = Gtk.VBox(spacing=6) vbox.pack_start(add, False, True, 0) vbox.pack_start(remove, False, True, 0) self.pack_start(sw, True, True, 0) self.pack_start(vbox, False, True, 0) self.show_all() paths = util.split_scan_dirs(config.get("settings", "scan")) paths = map(util.fsdecode, paths) for path in paths: model.append(row=[path]) def __popup(self, view, menu): return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def __select_changed(self, selection, remove_button): remove_button.set_sensitive(selection.count_selected_rows()) def __save(self): paths = map(util.fsencode, [r[0] for r in self.model]) config.set("settings", "scan", ":".join(paths)) def __remove(self, view): view.remove_selection() self.__save() def __add(self, *args): initial = get_init_select_dir() chooser = FolderChooser(self, _("Select Directories"), initial) fns = chooser.run() chooser.destroy() for fn in fns: self.model.append(row=[fn]) self.__save() �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/cover.py�������������������������������������������������������������0000644�0001750�0001750�00000015101�12173213426�020364� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2011 Joe Wreschnig, Michael Urman, Iñigo Serna, # Christoph Reiter, Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, GLib, Gdk, GdkPixbuf from quodlibet import qltk from quodlibet import config from quodlibet.util import thumbnails # TODO: neater way of managing dependency on this particular plugin ALBUM_ART_PLUGIN_ID = "Download Album art" class BigCenteredImage(qltk.Window): """Load an image and display it, scaling down to 1/2 the screen's dimensions if necessary. This might leak memory, but it could just be Python's GC being dumb.""" def __init__(self, title, filename, parent=None): super(BigCenteredImage, self).__init__() self.set_transient_for(qltk.get_top_parent(parent)) width = Gdk.Screen.width() / 2 height = Gdk.Screen.height() / 2 pixbuf = GdkPixbuf.Pixbuf.new_from_file(filename) pixbuf = thumbnails.scale(pixbuf, (width, height), scale_up=False) self.set_title(title) self.set_decorated(False) self.set_position(Gtk.WindowPosition.CENTER) self.set_modal(False) image = Gtk.Image() image.set_from_pixbuf(pixbuf) event_box = Gtk.EventBox() event_box.add(image) frame = Gtk.Frame() frame.set_shadow_type(Gtk.ShadowType.OUT) frame.add(event_box) self.add(frame) event_box.connect('button-press-event', self.__destroy) event_box.connect('key-press-event', self.__destroy) self.show_all() def __destroy(self, *args): self.destroy() def get_no_cover_pixbuf(width, height): size = max(width, height) theme = Gtk.IconTheme.get_default() try: no_cover = theme.load_icon("quodlibet-missing-cover", size, 0) except GLib.GError: return else: return thumbnails.scale(no_cover, (width, height)) class ResizeImage(Gtk.DrawingArea): def __init__(self, resize=False, size=1): Gtk.DrawingArea.__init__(self) self._dirty = True self._path = None self._pixbuf = None self._no_cover = None self._size = size self._resize = resize def set_path(self, path): if self._path == path: return self._path = path self._dirty = True self.queue_resize() def _get_pixbuf(self): if not self._dirty: return self._pixbuf self._dirty = False if self._path is None: self._pixbuf = get_no_cover_pixbuf(256, 256) return self._pixbuf try: self._pixbuf = thumbnails.get_thumbnail(self._path, (256, 256)) except GLib.GError: pass else: return self._pixbuf def _get_size(self, max_width, max_height): pixbuf = self._get_pixbuf() if not pixbuf: return 0, 0 width, height = pixbuf.get_width(), pixbuf.get_height() return thumbnails.calc_scale_size( (max_width, max_height), (width, height)) def do_get_request_mode(self): if self._resize: return Gtk.SizeRequestMode.HEIGHT_FOR_WIDTH return Gtk.SizeRequestMode.CONSTANT_SIZE def do_get_preferred_width(self): if self._resize: return (0, 0) else: width, height = self._get_size(self._size, self._size) return (width, width) def do_get_preferred_height(self): if self._resize: return (0, 0) else: width, height = self._get_size(self._size, self._size) return (height, height) def do_get_preferred_width_for_height(self, req_height): width, height = self._get_size(300, req_height) if width > 256: width = width return (width, width) def do_draw(self, cairo_context): pixbuf = self._get_pixbuf() if not pixbuf: return alloc = self.get_allocation() width, height = alloc.width, alloc.height if self._path: if width < 2 or height < 2: return round_thumbs = config.getboolean("albumart", "round") pixbuf = thumbnails.scale(pixbuf, (width - 2, height - 2)) pixbuf = thumbnails.add_border(pixbuf, 80, round_thumbs) else: pixbuf = thumbnails.scale(pixbuf, (width, height)) style_context = self.get_style_context() Gtk.render_icon(style_context, cairo_context, pixbuf, 0, 0) class CoverImage(Gtk.EventBox): def __init__(self, resize=False, size=70, song=None): super(CoverImage, self).__init__() self.__song = None self.__file = None self.__current_bci = None self.add(ResizeImage(resize, size)) self.connect('button-press-event', self.__show_cover) self.set_song(song) self.show_all() def set_song(self, song): self.__song = song if song: self.__file = song.find_cover() self.get_child().set_path(self.__file and self.__file.name) else: self.__file = None self.get_child().set_path(None) def refresh(self): self.set_song(self.__song) def __nonzero__(self): return bool(self.__file) def __reset_bci(self, bci): self.__current_bci = None def __show_cover(self, box, event): """Show the cover as a detached BigCenteredImage. If one is already showing, destroy it instead If there is no image, run the AlbumArt plugin """ song = self.__song if not song: return if event.button != 1 or event.type != Gdk.EventType.BUTTON_PRESS: return if not self.__file: from quodlibet.qltk.songsmenu import SongsMenu from quodlibet import app SongsMenu.plugins.handle("Download Album art", app.library, qltk.get_top_parent(self), [song]) return if self.__current_bci is not None: # We're displaying it; destroy it. self.__current_bci.destroy() return try: self.__current_bci = BigCenteredImage( song.comma("album"), self.__file.name, parent=self) except GLib.GError: # reload in case the image file is gone self.refresh() else: self.__current_bci.connect('destroy', self.__reset_bci) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/tracker.py�����������������������������������������������������������0000644�0001750�0001750�00000010302�12173213426�020677� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import time from gi.repository import Gdk, GObject, GLib import quodlibet from quodlibet import const from quodlibet import config from quodlibet import util from quodlibet.qltk.msg import ErrorMessage MAX_ERRORS = 10 class TimeTracker(GObject.GObject): """Emits tick every second (with up to one second jitter) as long as the player is activly playing. Uses timeout_add_seconds, so multiple instances of this should sync and not produce more wakeups. """ __gsignals__ = { 'tick': (GObject.SignalFlags.RUN_LAST, None, ()), } def __init__(self, player): super(TimeTracker, self).__init__() self.__player = player self.__id = None self.__sigs = [ player.connect("paused", self.__paused), player.connect("unpaused", self.__unpaused), ] def destroy(self): map(self.__player.disconnect, self.__sigs) self.__source_remove() def __source_remove(self): if self.__id is not None: GLib.source_remove(self.__id) self.__id = None def __update(self): if self.__stop: self.__source_remove() return False self.emit("tick") return True def __paused(self, *args): # By removing the timeout only in the callback we are safe from # huge deviation caused by lots of pause/unpause actions. self.__stop = True def __unpaused(self, *args): self.__stop = False if self.__id is None: self.__id = GLib.timeout_add_seconds(1, self.__update) class SongTracker(object): def __init__(self, librarian, player, pl): player.connect_object('song-ended', self.__end, librarian, pl) player.connect_object('song-started', self.__start, librarian) player.connect('error', self.__error, librarian) timer = TimeTracker(player) timer.connect("tick", self.__timer) self.__errors_in_a_row = 0 self.elapsed = 0 quodlibet.quit_add(1, self.__quit, librarian, player) def __error(self, player, song, error, librarian): newstr = u"%s: %s\n\n" % ( util.decode(time.asctime(), const.ENCODING), error) self.__errors_in_a_row += 1 if self.__errors_in_a_row > MAX_ERRORS: self.__errors_in_a_row = 0 ErrorMessage(None, _("Too Many Errors"), _("Stopping playback because there were %d errors " "in a row.") % MAX_ERRORS).run() player.go_to(None) player.paused = True song["~errors"] = newstr + song.get("~errors", "") def __start(self, librarian, song): self.elapsed = 0 if song is not None: if song.multisong: song["~#lastplayed"] = int(time.time()) song["~#playcount"] = song.get("~#playcount", 0) + 1 else: config.set("memory", "song", song["~filename"]) song["~#laststarted"] = int(time.time()) librarian.changed([song]) else: config.set("memory", "song", "") def __end(self, librarian, song, ended, pl): if song is None or song.multisong: return elif self.elapsed > 0.5 * song.get("~#length", 1): song["~#lastplayed"] = int(time.time()) song["~#playcount"] = song.get("~#playcount", 0) + 1 librarian.changed([song]) elif pl.current is not song: if "~errors" not in song: song["~#skipcount"] = song.get("~#skipcount", 0) + 1 librarian.changed([song]) if not ended and song and "~errors" in song: del(song["~errors"]) self.__errors_in_a_row = 0 def __quit(self, librarian, player): config.set("memory", "seek", player.get_position()) player.emit('song-ended', player.song, True) return 0 def __timer(self, timer): self.elapsed += 1 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/pluginwin.py���������������������������������������������������������0000644�0001750�0001750�00000030167�12173213426�021273� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, Pango from quodlibet import config from quodlibet import const from quodlibet import qltk from quodlibet import util from quodlibet.plugins import PluginManager from quodlibet.qltk.views import HintedTreeView from quodlibet.qltk.entry import ClearEntry TAG, ALL, NO, DIS, EN, SEP = range(6) class PluginErrorWindow(qltk.UniqueWindow): def __init__(self, parent): if self.is_not_unique(): return super(PluginErrorWindow, self).__init__() self.set_title(_("Plugin Errors") + " - Quod Libet") self.set_border_width(12) self.set_transient_for(parent) self.set_default_size(420, 250) scrolledwin = Gtk.ScrolledWindow() vbox = Gtk.VBox(spacing=6) vbox.set_border_width(6) scrolledwin.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) scrolledwin.add_with_viewport(vbox) failures = {} failures.update(PluginManager.instance.failures) keys = failures.keys() show_expanded = len(keys) <= 3 for key in sorted(keys): expander = Gtk.Expander(label="<b>%s</b>" % util.escape(key)) expander.set_use_markup(True) if show_expanded: expander.set_expanded(True) # second line is always the __rescan line; don't show it message = failures[key][0:1] + failures[key][3:] failure = Gtk.Label(label=''.join(message).strip()) failure.set_alignment(0, 0) failure.set_padding(12, 6) failure.set_selectable(True) vbox.pack_start(expander, False, True, 0) expander.add(failure) vbox2 = Gtk.VBox(spacing=12) close = Gtk.Button(stock=Gtk.STOCK_CLOSE) close.connect('clicked', lambda *x: self.destroy()) b = Gtk.HButtonBox() b.set_layout(Gtk.ButtonBoxStyle.END) b.pack_start(close, True, True, 0) vbox2.pack_start(scrolledwin, True, True, 0) vbox2.pack_start(b, False, True, 0) self.add(vbox2) self.show_all() close.grab_focus() class PluginWindow(qltk.UniqueWindow): def __init__(self, parent): if self.is_not_unique(): return super(PluginWindow, self).__init__() self.set_title(_("Plugins") + " - Quod Libet") self.set_border_width(12) self.set_default_size(655, 404) self.set_transient_for(parent) hbox = Gtk.HBox(spacing=12) vbox = Gtk.VBox(spacing=6) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS) tv = HintedTreeView() model = Gtk.ListStore(object, object) filter = model.filter_new() tv.set_model(filter) tv.set_rules_hint(True) filter_entry = ClearEntry() filter_entry.connect("changed", lambda s: filter.refilter()) combo_store = Gtk.ListStore(str, int) filter_combo = Gtk.ComboBox(model=combo_store) cell = Gtk.CellRendererText() filter_combo.pack_start(cell, True) filter_combo.add_attribute(cell, "text", 0) filter_combo.connect("changed", lambda s: filter.refilter()) combo_sep = lambda model, iter, data: model[iter][1] == SEP filter_combo.set_row_separator_func(combo_sep, None) fb = Gtk.HBox(spacing=6) fb.pack_start(filter_combo, False, True, 0) filter_entry.enable_clear_button() fb.pack_start(filter_entry, True, True, 0) render = Gtk.CellRendererToggle() def cell_data(col, render, model, iter, data): row = model[iter] render.set_active(row[1].enabled(row[0])) render.connect('toggled', self.__toggled, filter) column = Gtk.TreeViewColumn("enabled", render) column.set_cell_data_func(render, cell_data) tv.append_column(column) render = Gtk.CellRendererPixbuf() def cell_data2(col, render, model, iter, data): icon = getattr(model[iter][0], 'PLUGIN_ICON', Gtk.STOCK_EXECUTE) if Gtk.stock_lookup(icon): render.set_property('stock-id', icon) else: render.set_property('icon-name', icon) column = Gtk.TreeViewColumn("image", render) column.set_cell_data_func(render, cell_data2) tv.append_column(column) render = Gtk.CellRendererText() render.set_property('ellipsize', Pango.EllipsizeMode.END) render.set_property('xalign', 0.0) column = Gtk.TreeViewColumn("name", render) def cell_data3(col, render, model, iter, data): render.set_property('text', model[iter][0].PLUGIN_NAME) column.set_cell_data_func(render, cell_data3) column.set_expand(True) tv.append_column(column) sw.add(tv) sw.set_shadow_type(Gtk.ShadowType.IN) sw.set_size_request(250, -1) tv.set_headers_visible(False) bbox = Gtk.HBox(homogeneous=True, spacing=12) errors = qltk.Button(_("Show _Errors"), Gtk.STOCK_DIALOG_WARNING) errors.set_focus_on_click(False) bbox.pack_start(errors, True, True, 0) refresh = Gtk.Button(stock=Gtk.STOCK_REFRESH) refresh.set_focus_on_click(False) bbox.pack_start(refresh, True, True, 0) vbox.pack_start(fb, False, True, 0) vbox.pack_start(sw, True, True, 0) vbox.pack_start(bbox, False, True, 0) hbox.pack_start(vbox, False, True, 0) selection = tv.get_selection() desc = Gtk.Label() desc.set_line_wrap(True) desc.set_alignment(0, 0.5) desc.set_selectable(True) selection.connect('changed', self.__description, desc) prefs = Gtk.Frame() prefs.set_shadow_type(Gtk.ShadowType.NONE) close = Gtk.Button(stock=Gtk.STOCK_CLOSE) close.connect('clicked', lambda *x: self.destroy()) bb_align = Gtk.Alignment.new(0, 1, 1, 0) bb = Gtk.HButtonBox() bb.set_layout(Gtk.ButtonBoxStyle.END) bb.pack_start(close, True, True, 0) bb_align.add(bb) vb2 = Gtk.VBox(spacing=12) vb2.pack_start(desc, False, True, 0) vb2.pack_start(prefs, False, True, 0) vb2.pack_start(bb_align, True, True, 0) hbox.pack_start(vb2, True, True, 0) self.add(hbox) selection.connect('changed', self.__preferences, prefs) refresh.connect('clicked', self.__refresh, tv, desc, errors, filter_combo, combo_store) errors.connect('clicked', self.__show_errors) tv.get_selection().emit('changed') refresh.clicked() self.connect('destroy', self.__destroy) filter.set_visible_func( self.__filter, (filter_entry, filter_combo, combo_store)) self.show_all() filter_entry.grab_focus() restore_id = config.get("memory", "plugin_selection") def restore_sel(row): return row[0].PLUGIN_ID == restore_id if not tv.select_by_func(restore_sel, one=True) and tv.get_model(): tv.set_cursor((0,)) def __filter(self, model, iter, widgets): row = model[iter] plugin = row[0] if not plugin or not row[1]: return False entry, combo, model = widgets plugin_tags = getattr(plugin, "PLUGIN_TAGS", ()) if isinstance(plugin_tags, basestring): plugin_tags = [plugin_tags] iter = combo.get_active_iter() if iter: enabled = row[1].enabled(plugin) tag = model[iter][0] flag = model[iter][1] if flag == NO and plugin_tags or \ flag == TAG and not tag in plugin_tags or \ flag == EN and not enabled or \ flag == DIS and enabled: return False filter = entry.get_text().lower() if not filter or filter in plugin.PLUGIN_NAME.lower() or \ filter in getattr(plugin, "PLUGIN_DESC", "").lower(): return True return False def __destroy(self, *args): config.write(const.CONFIG) def __description(self, selection, label): model, iter = selection.get_selected() if not iter: label.set_markup("") return config.set("memory", "plugin_selection", model[iter][0].PLUGIN_ID) name = util.escape(model[iter][0].PLUGIN_NAME) text = "<big><b>%s</b></big>" % name try: version = util.escape(model[iter][0].PLUGIN_VERSION) text += " <small>(%s %s)</small>" % (_("Version:"), version) except (TypeError, AttributeError): pass try: desc = model[iter][0].PLUGIN_DESC text += "<span font='4'>\n\n</span>" + desc except (TypeError, AttributeError): pass label.set_markup(text) def __preferences(self, selection, frame): model, iter = selection.get_selected() if frame.get_child(): frame.get_child().destroy() if iter and hasattr(model[iter][0], 'PluginPreferences'): try: prefs = model[iter][0].PluginPreferences(self) except: util.print_exc() frame.hide() else: if isinstance(prefs, Gtk.Window): b = Gtk.Button(stock=Gtk.STOCK_PREFERENCES) b.connect_object('clicked', Gtk.Window.show, prefs) b.connect_object('destroy', Gtk.Window.destroy, prefs) frame.add(b) frame.get_child().set_border_width(6) else: frame.add(prefs) frame.show_all() else: frame.hide() def __toggled(self, render, fpath, fmodel): render.set_active(not render.get_active()) path = fmodel.convert_path_to_child_path(Gtk.TreePath(fpath)) model = fmodel.get_model() row = model[path] pm = row[1] pm.enable(row[0], render.get_active()) pm.save() model.row_changed(row.path, row.iter) def __refresh(self, activator, view, desc, errors, combo, combo_store): fmodel, fiter = view.get_selection().get_selected() model = fmodel.get_model() selected = None if fiter: iter = fmodel.convert_iter_to_child_iter(fiter) selected = model[iter][0].PLUGIN_ID plugins = [] failures = False model.clear() pm = PluginManager.instance pm.rescan() for plugin in pm.plugins: plugins.append((plugin.PLUGIN_NAME, plugin, pm)) failures = failures or bool(pm.failures) tags = [] no_tags = False plugins.sort() for plugin in plugins: it = model.append(row=plugin[1:]) if plugin[1].PLUGIN_ID is selected: ok, fit = fmodel.convert_child_iter_to_iter(it) view.get_selection().select_iter(fit) plugin_tags = getattr(plugin[1], "PLUGIN_TAGS", ()) if isinstance(plugin_tags, basestring): plugin_tags = [plugin_tags] if not plugin_tags: no_tags = True tags.extend(plugin_tags) tags = list(set(tags)) active = max(combo.get_active(), 0) combo_store.clear() combo_store.append([_("All"), ALL]) combo_store.append(["", SEP]) combo_store.append([_("Enabled"), EN]) combo_store.append([_("Disabled"), DIS]) if tags: combo_store.append(["", SEP]) for tag in sorted(tags): combo_store.append([tag, TAG]) if no_tags: combo_store.append([_("No category"), NO]) combo.set_active(active) if not plugins: desc.set_text(_("No plugins found.")) errors.set_sensitive(failures) def __show_errors(self, activator): PluginErrorWindow(self) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/x.py�����������������������������������������������������������������0000644�0001750�0001750�00000024407�12173213426�017526� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig, Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation # Things that are more or less direct wrappers around GTK widgets to # ease constructors. from gi.repository import Gtk, GObject, GLib, Gio from quodlibet import util from quodlibet import config from quodlibet.qltk import is_accel from quodlibet.qltk.window import Window, UniqueWindow class ScrolledWindow(Gtk.ScrolledWindow): """Draws a border around all edges that don't touch the parent window""" __gsignals__ = {'size-allocate': 'override'} def do_size_allocate(self, alloc): if self.get_shadow_type() == Gtk.ShadowType.NONE: return Gtk.ScrolledWindow.do_size_allocate(self, alloc) toplevel = self.get_toplevel() top_window = toplevel.get_window() window = self.get_window() if not window: GLib.idle_add(self.queue_resize) return Gtk.ScrolledWindow.do_size_allocate(self, alloc) dummy, x1, y1 = top_window.get_origin() dummy, x2, y2 = window.get_origin() dx = x2 - x1 dy = y2 - y1 ctx = self.get_style_context() border = ctx.get_border(self.get_state_flags()) # https://bugzilla.gnome.org/show_bug.cgi?id=694844 border.left = border.top = border.right = border.bottom = 1 # Don't remove the border if the border is drawn inside # and the scrollbar on that edge is visible bottom = left = right = top = False value = GObject.Value() value.init(GObject.TYPE_BOOLEAN) # default to True: https://bugzilla.gnome.org/show_bug.cgi?id=701058 value.set_boolean(True) ctx.get_style_property("scrollbars-within-bevel", value) scroll_within = value.get_boolean() value.unset() if not scroll_within: h, v = self.get_hscrollbar(), self.get_vscrollbar() hscroll = vscroll = False if h.get_visible(): req = h.size_request() hscroll = bool(req.width + req.height) if v.get_visible(): req = v.size_request() vscroll = bool(req.width + req.height) placement = self.get_placement() if placement == Gtk.CornerType.TOP_LEFT: bottom = hscroll right = vscroll elif placement == Gtk.CornerType.BOTTOM_LEFT: right = vscroll top = hscroll elif placement == Gtk.CornerType.TOP_RIGHT: bottom = hscroll left = vscroll elif placement == Gtk.CornerType.BOTTOM_RIGHT: left = vscroll top = hscroll width, height = toplevel.get_size() if alloc.y + alloc.height + dy == height and not bottom: alloc.height += border.bottom if alloc.x + alloc.width + dx == width and not right: alloc.width += border.right if alloc.y + dy == 0 and not top: alloc.y -= border.top alloc.height += border.top if alloc.x + dx == 0 and not left: alloc.x -= border.left alloc.width += border.left return Gtk.ScrolledWindow.do_size_allocate(self, alloc) class Notebook(Gtk.Notebook): """A regular gtk.Notebook, except when appending a page, if no label is given, the page's 'title' attribute (either a string or a widget) is used.""" __gsignals__ = {'size-allocate': 'override'} def do_size_allocate(self, alloc): ctx = self.get_style_context() border = ctx.get_border(self.get_state_flags()) toplevel = self.get_toplevel() top_window = toplevel.get_window() window = self.get_window() if not window: GLib.idle_add(self.queue_resize) return Gtk.Notebook.do_size_allocate(self, alloc) dummy, x1, y1 = top_window.get_origin() dummy, x2, y2 = window.get_origin() dx = x2 - x1 dy = y2 - y1 width, height = toplevel.get_size() if alloc.y + alloc.height + dy == height: alloc.height += border.bottom if alloc.x + alloc.width + dx == width: alloc.width += border.right if alloc.x + dx == 0: alloc.x -= border.left alloc.width += border.left return Gtk.Notebook.do_size_allocate(self, alloc) def append_page(self, page, label=None): if label is None: try: label = page.title except AttributeError: raise TypeError("no page.title and no label given") if not isinstance(label, Gtk.Widget): label = Gtk.Label(label) super(Notebook, self).append_page(page, label) def Frame(label, child=None): """A Gtk.Frame with no shadow, 12px left padding, and 3px top padding.""" frame = Gtk.Frame() label_w = Gtk.Label() label_w.set_markup("<b>%s</b>" % util.escape(label)) align = Gtk.Alignment(xalign=0.0, yalign=0.0, xscale=1.0, yscale=1.0) align.set_padding(6, 0, 12, 0) frame.add(align) frame.set_shadow_type(Gtk.ShadowType.NONE) frame.set_label_widget(label_w) if child: align.add(child) label_w.set_mnemonic_widget(child) label_w.set_use_underline(True) return frame def Alignment(child=None, top=0, bottom=0, left=0, right=0, border=0): align = Gtk.Alignment(xscale=1.0, yscale=1.0) align.set_padding(top + border, bottom + border, left + border, right + border) if child: align.add(child) return align def MenuItem(label, stock_id): """An ImageMenuItem with a custom label and stock image.""" item = Gtk.ImageMenuItem.new_with_mnemonic(label) item.set_image(Gtk.Image(stock=stock_id, icon_size=Gtk.IconSize.MENU)) return item def Button(label, stock_id, size=Gtk.IconSize.BUTTON): """A Button with a custom label and stock image. It should pack exactly like a stock button.""" align = Gtk.Alignment(xscale=0.0, yscale=1.0, xalign=0.5, yalign=0.5) hbox = Gtk.HBox(spacing=2) hbox.pack_start(Gtk.Image.new_from_stock(stock_id, size), True, True, 0) label = Gtk.Label(label) label.set_use_underline(True) hbox.pack_start(label, True, True, 0) align.add(hbox) button = Gtk.Button() button.add(align) return button class RPaned(Gtk.Paned): """A Paned that supports relative (percentage) width/height setting.""" ORIENTATION = None def __init__(self, *args, **kwargs): if self.ORIENTATION is not None: kwargs["orientation"] = self.ORIENTATION super(RPaned, self).__init__(*args, **kwargs) # before first alloc: save value in relative and set on the first alloc # after the first alloc: use the normal properties self.__alloced = False self.__relative = None def set_relative(self, v): """Set the relative position of the separator, [0..1].""" if self.__alloced: max_pos = self.get_property('max-position') if not max_pos: # no children self.__relative = v return self.set_position(int(v * max_pos)) else: self.__relative = v def get_relative(self): """Return the relative position of the separator, [0..1].""" if self.__alloced: max_pos = self.get_property('max-position') if not max_pos: # no children return self.__relative return (float(self.get_position()) / max_pos) elif self.__relative is not None: return self.__relative else: # before first alloc and set_relative not called return 0.5 def do_size_allocate(self, *args): ret = Gtk.HPaned.do_size_allocate(self, *args) if not self.__alloced and self.__relative is not None: self.__alloced = True self.set_relative(self.__relative) # call again so the children get alloced ret = Gtk.HPaned.do_size_allocate(self, *args) self.__alloced = True return ret class RHPaned(RPaned): ORIENTATION = Gtk.Orientation.HORIZONTAL class RVPaned(RPaned): ORIENTATION = Gtk.Orientation.VERTICAL class ConfigRPaned(RPaned): def __init__(self, section, option, default, *args, **kwargs): super(ConfigRPaned, self).__init__(*args, **kwargs) self.set_relative(config.getfloat(section, option, default)) self.connect('notify::position', self.__changed, section, option) def __changed(self, widget, event, section, option): if self.get_property('position-set'): config.set(section, option, str(self.get_relative())) class ConfigRHPaned(ConfigRPaned): ORIENTATION = Gtk.Orientation.VERTICAL class ConfigRVPaned(ConfigRPaned): ORIENTATION = Gtk.Orientation.VERTICAL def ClearButton(entry=None): clear = Gtk.Button() clear.add(Gtk.Image.new_from_stock(Gtk.STOCK_CLEAR, Gtk.IconSize.MENU)) clear.set_tooltip_text(_("Clear search")) if entry is not None: clear.connect_object('clicked', entry.set_text, '') return clear def EntryCompletion(words): """Simple string completion.""" model = Gtk.ListStore(str) for word in sorted(words): model.append(row=[word]) comp = Gtk.EntryCompletion() comp.set_model(model) comp.set_text_column(0) return comp def RadioMenuItem(*args, **kwargs): """RadioMenuItem that allows None for group""" if kwargs.get("group", None) is None: kwargs.pop("group", None) return Gtk.RadioMenuItem(*args, **kwargs) def SeparatorMenuItem(*args, **kwargs): # https://bugzilla.gnome.org/show_bug.cgi?id=670575 # PyGObject 3.2 always sets a label in __init__ if not args and not kwargs: return Gtk.SeparatorMenuItem.new() return Gtk.SeparatorMenuItem(*args, **kwargs) def SymbolicIconImage(name, size, fallbacks=None): """Gtk.Image that displays a symbolic version of 'name' and falls back to the non-symbolic one. """ symbolic_name = name + "-symbolic" gicon = Gio.ThemedIcon.new_from_names([symbolic_name, name]) return Gtk.Image.new_from_gicon(gicon, size) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/tagscombobox.py������������������������������������������������������0000644�0001750�0001750�00000004537�12173212464�021751� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from quodlibet.util import tag import quodlibet.formats class _TagsCombo(object): __tags = sorted(quodlibet.formats.USEFUL_TAGS) def _fill_model(self, can_change): self.clear() render = Gtk.CellRendererText() self.pack_start(render, True) self.add_attribute(render, 'text', 1) if can_change is None: can_change = self.__tags can_change = sorted(can_change) model = self.get_model() for t in can_change: model.append(row=[t, "%s (%s)" % (tag(t), t)]) self.set_model(model) if len(model) == 0: raise ValueError("TagsCombo boxes require at least one tag name") def __tag(self): return self._tag() tag = property(__tag) class TagsComboBox(Gtk.ComboBox, _TagsCombo): """A ComboBox containing a list of tags for the user to choose from. The tag names are presented both translated and untranslated. The 'tag' attribute is the currently chosen tag.""" def __init__(self, can_change=None): super(TagsComboBox, self).__init__(model=Gtk.ListStore(str, str)) self._fill_model(can_change) self.set_active(0) def _tag(self): iter = self.get_active_iter() return self.get_model()[iter][0] class TagsComboBoxEntry(Gtk.ComboBox, _TagsCombo): """A ComboBoxEntry containing a list of tags for the user to choose from. The tag names are presented both translated and untranslated in the menu, but always untranslated when editing. The 'tag' attribute is the currently chosen tag.""" def __init__(self, can_change=None): super(TagsComboBoxEntry, self).__init__( model=Gtk.ListStore(str, str), entry_text_column=0, has_entry=True) self._fill_model(can_change) def _fill_model(self, can_change): super(TagsComboBoxEntry, self)._fill_model(can_change) comp = Gtk.EntryCompletion() comp.set_model(self.get_model()) comp.set_text_column(0) self.get_child().set_completion(comp) def _tag(self): return self.get_child().get_text() �����������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/chooser.py�����������������������������������������������������������0000644�0001750�0001750�00000003230�12173212464�020711� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from quodlibet.qltk import get_top_parent # Choose folders and return them when run. class FolderChooser(Gtk.FileChooserDialog): def __init__(self, parent, title, initial_dir=None, action=Gtk.FileChooserAction.SELECT_FOLDER): super(FolderChooser, self).__init__( title=title, parent=get_top_parent(parent), action=action, buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) if initial_dir: self.set_current_folder(initial_dir) self.set_local_only(True) self.set_select_multiple(True) def run(self): resp = super(FolderChooser, self).run() fns = self.get_filenames() if resp == Gtk.ResponseType.OK: return fns else: return [] # Choose files and return them when run. class FileChooser(FolderChooser): def __init__(self, parent, title, filter=None, initial_dir=None): super(FileChooser, self).__init__( parent, title, initial_dir, Gtk.FileChooserAction.OPEN) if filter: def new_filter(args, realfilter): return realfilter(args.filename) f = Gtk.FileFilter() f.set_name(_("Songs")) f.add_custom(Gtk.FileFilterFlags.FILENAME, new_filter, filter) self.add_filter(f) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/about.py�������������������������������������������������������������0000644�0001750�0001750�00000004015�12173212464�020363� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk import mutagen from quodlibet.qltk import gtk_version, pygobject_version from quodlibet import const from quodlibet import formats from quodlibet.util import fver class AboutDialog(Gtk.AboutDialog): def __init__(self, parent, player, name, icon): super(AboutDialog, self).__init__() self.set_transient_for(parent) self.set_program_name(name) self.set_version(const.VERSION) self.set_authors(const.AUTHORS) self.set_artists(const.ARTISTS) self.set_logo_icon_name(icon) def chunks(l, n): return [l[i:i + n] for i in range(0, len(l), n)] fmts = ",\n".join(", ".join(c) for c in chunks(formats.names, 4)) text = [] text.append(_("Supported formats: %s") % fmts) text.append("") if player: text.append(_("Audio device: %s") % player.name) text.append("Mutagen: %s" % fver(mutagen.version)) text.append("GTK+: %s" % fver(gtk_version)) text.append("PyGObject: %s" % fver(pygobject_version)) if player: text.append(player.version_info) self.set_comments("\n".join(text)) self.set_translator_credits("\n".join(const.TRANSLATORS)) self.set_website(const.WEBSITE) self.set_copyright(const.COPYRIGHT + "\n" + "<%s>" % const.SUPPORT_EMAIL) self.get_child().show_all() class AboutQuodLibet(AboutDialog): def __init__(self, parent, player): super(AboutQuodLibet, self).__init__( parent, player, "Quod Libet", "quodlibet") class AboutExFalso(AboutDialog): def __init__(self, parent, player=None): super(AboutExFalso, self).__init__( parent, player, "Ex Falso", "exfalso") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/notif.py�������������������������������������������������������������0000644�0001750�0001750�00000024225�12173212464�020375� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2010 Steven Robertson # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. """ This module will provide a unified notification area for informational messages and active tasks. This will eventually handle interactions with active tasks (e.g. pausing a copooled task), and provide shortcuts for copooling or threading a task with a status notification. It will also provide the UI for the planned global undo feature. Of course, right now it does none of these things. """ # This module is still experimental and may change or be removed. # TODO: Make copooling things with notifications easier (optional) # TODO: Make Ex Falso use this # TODO: Port WaitLoadWindow to use this (and not block) # TODO: Port Media browser to use this # TODO: Port Download Manager to use this # TODO: Add basic notification support # TODO: Add notification history # TODO: Add notification button/callback support (prereq for global undo) # TODO: Optimize performance (deferred signals, etc) from gi.repository import Gtk, GLib, Pango from quodlibet.util import copool SIZE = Gtk.IconSize.MENU class ParentProperty(object): """ A property which provides a thin layer of protection against accidental reparenting: you must first 'unparent' an instance by setting this property to 'None' before you can set a new parent. """ def __get__(self, inst, owner): return getattr(inst, '_parent', None) def __set__(self, inst, value): if getattr(inst, '_parent', None) is not None and value is not None: raise ValueError("Cannot set parent property without first " "setting it to 'None'.") inst._parent = value class Task(object): def __init__(self, source, desc, known_length=True, controller=None, pause=None, stop=None): self.source = source self.desc = desc if known_length: self.frac = 0. else: self.frac = None if controller: self.controller = controller else: self.controller = TaskController.default_instance self._pause = pause self._stop = stop self.pausable = bool(pause) self.stoppable = bool(stop) self._paused = False self.controller.add_task(self) def update(self, frac): """ Update a task's progress. """ self.frac = frac self.controller.update() def pulse(self): """ Indicate progress on a task of unknown length. """ self.update(None) def finish(self): """ Mark a task as finished, and remove it from the list of active tasks. """ self.frac = 1.0 self.controller.finish(self) def __set_paused(self, value): if self.pausable: self._pause(value) self._paused = value paused = property(lambda self: self._paused, __set_paused) def stop(self): if self._stop: self._stop() self.finish() def gen(self, gen): """ Act as a generator pass-through, updating and finishing the task's progress automatically. If 'gen' has a __len__ property, it will be used to set the fraction accordingly. """ try: if hasattr(gen, '__len__'): for i, x in enumerate(gen): self.update(float(i) / len(gen)) yield x else: for x in gen: yield x finally: self.finish() def list(self, l): """ Evaluates the iterable argument before passing to 'gen'. """ return self.gen(list(l)) def copool(self, funcid, pause=True, stop=True): """ Convenience function: set the Task's 'pause' and 'stop' callbacks to act upon the copool with the given funcid. """ if pause: def pause_func(state): if state != self._paused: if state: copool.pause(funcid) else: copool.resume(funcid) self._pause = pause_func self.pausable = True if stop: self._stop = lambda: copool.remove(funcid) self.stoppable = True # Support context managers: # >>> with Task(...) as t: def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.finish() return False class TaskController(object): """ Controller logic for displaying and managing a list of Tasks. Also implements the full Task interface to act as a pass-through or summary of all tasks in flight on this controller. """ parent = ParentProperty() default_instance = None def __init__(self): self.active_tasks = [] self._parent = None self.update() def add_task(self, task): self.active_tasks.append(task) self.update() @property def source(self): if len(self.active_tasks) == 1: return self.active_tasks[0].source return _("Active tasks") @property def desc(self): if len(self.active_tasks) == 1: return self.active_tasks[0].desc return _("%d tasks running") % len(self.active_tasks) @property def frac(self): fracs = [t.frac for t in self.active_tasks if t.frac is not None] if fracs: return sum(fracs) / len(self.active_tasks) return None def __set_paused(self, val): for t in self.active_tasks: if t.pausable: t.paused = val def __get_paused(self): pausable = [t for t in self.active_tasks if t.pausable] if not pausable: return False return not [t for t in pausable if not t.paused] paused = property(__get_paused, __set_paused) def stop(self): [t.stop() for t in self.active_tasks if t.stoppable] @property def pausable(self): return [t for t in self.active_tasks if t.pausable] @property def stoppable(self): return [t for t in self.active_tasks if t.stoppable] def update(self): if self._parent is not None: self._parent.update() def finish(self, finished_task): self.active_tasks = filter(lambda t: t is not finished_task, self.active_tasks) self.update() # Oh so deliciously hacky. TaskController.default_instance = TaskController() class TaskWidget(Gtk.HBox): """ Displays a task. """ def __init__(self, task): super(TaskWidget, self).__init__(spacing=2) self.task = task self.label = Gtk.Label() self.label.set_alignment(1.0, 0.5) self.label.set_ellipsize(Pango.EllipsizeMode.END) self.pack_start(self.label, True, True, 12) self.progress = Gtk.ProgressBar() self.progress.set_size_request(100, -1) self.pack_start(self.progress, True, True, 0) self.pause = Gtk.ToggleButton() self.pause.add(Gtk.Image.new_from_stock(Gtk.STOCK_MEDIA_PAUSE, SIZE)) self.pause.connect('toggled', self.__pause_toggled) self.pack_start(self.pause, False, True, 0) self.stop = Gtk.Button() self.stop.add(Gtk.Image.new_from_stock(Gtk.STOCK_MEDIA_STOP, SIZE)) self.stop.connect('clicked', self.__stop_clicked) self.pack_start(self.stop, False, True, 0) def __pause_toggled(self, btn): if self.task.pausable: self.task.paused = btn.props.active def __stop_clicked(self, btn): if self.task.stoppable: self.task.stop() def update(self): formatted_label = "<small><b>%s</b>\n%s</small>" % (self.task.source, self.task.desc) self.label.set_markup(formatted_label) if self.task.frac is not None: self.progress.set_fraction(self.task.frac) else: self.progress.pulse() if self.pause.props.sensitive != self.task.pausable: self.pause.props.sensitive = self.task.pausable show_as_active = (self.task.pausable and self.task.paused) if self.pause.props.active != show_as_active: self.pause.props.active = show_as_active if self.stop.props.sensitive != self.task.stoppable: self.stop.props.sensitive = self.task.stoppable class StatusBar(Gtk.HBox): def __init__(self, task_controller): super(StatusBar, self).__init__() self.__dirty = False self.set_spacing(12) self.task_controller = task_controller self.task_controller.parent = self self.default_label = Gtk.Label() self.default_label.set_alignment(1.0, 0.5) self.default_label.set_text(_("No time information")) self.default_label.set_ellipsize(Pango.EllipsizeMode.END) self.pack_start(self.default_label, True, True, 0) self.task_widget = TaskWidget(task_controller) self.pack_start(self.task_widget, True, True, 0) # The history button will eventually hold the full list of running # tasks, as well as the list of previous notifications. #self.history_btn = Gtk.Button(stock=Gtk.STOCK_MISSING_IMAGE) #self.pack_start(self.history_btn, False, True, 0) self.show_all() self.set_no_show_all(True) self.__set_shown('default') def __set_shown(self, type): if type == 'default': self.default_label.show() else: self.default_label.hide() if type == 'task': self.task_widget.show() else: self.task_widget.hide() def set_default_text(self, text): self.default_label.set_text(text) def __update(self): self.__dirty = False if self.task_controller.active_tasks: self.__set_shown('task') self.task_widget.update() else: self.__set_shown('default') def update(self): if not self.__dirty: self.__dirty = True GLib.idle_add(self.__update) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/remote.py������������������������������������������������������������0000644�0001750�0001750�00000032161�12173213426�020546� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import re import sys from gi.repository import GObject, Gdk, GLib import quodlibet from quodlibet import browsers from quodlibet import config from quodlibet import const from quodlibet import util from quodlibet.util.uri import URI from quodlibet.qltk.browser import LibraryBrowser from quodlibet.qltk.properties import SongProperties from quodlibet.util import copool from quodlibet.util.library import scan_libary class FSInterface(object): """Provides a file in ~/.quodlibet to indicate what song is playing.""" def __init__(self, player): player.connect('song-started', self.__started) player.connect('song-ended', self.__ended) quodlibet.quit_add(1, self.destroy) def destroy(self): try: os.unlink(const.CURRENT) except EnvironmentError: pass def __started(self, player, song): if song: try: f = file(const.CURRENT, "w") except EnvironmentError: pass else: f.write(song.to_dump()) f.close() def __ended(self, player, song, stopped): try: os.unlink(const.CURRENT) except EnvironmentError: pass class FIFOControl(object): """A FIFO to control the player/library from.""" def __init__(self, library, window, player): self.__open(library, window, player) quodlibet.quit_add(1, self.destroy) def destroy(self): try: os.unlink(const.CONTROL) except EnvironmentError: pass def __open(self, *args): try: if not os.path.exists(const.CONTROL): util.mkdir(const.USERDIR) os.mkfifo(const.CONTROL, 0600) fifo = os.open(const.CONTROL, os.O_NONBLOCK) f = os.fdopen(fifo, "r", 4096) GObject.io_add_watch( f, GLib.IO_IN | GLib.IO_ERR | GLib.IO_HUP, self.__process, *args) except (EnvironmentError, AttributeError): pass def __getitem__(self, key): key = key.replace("-", "_") if key.startswith("_"): raise ValueError else: try: return getattr(self, "_" + key) except AttributeError: raise KeyError(key) def __process(self, source, condition, *args): if condition in (GLib.IO_ERR, GLib.IO_HUP): self.__open(*args) return False commands = source.read().rstrip("\n").splitlines() for command in commands: try: try: cmd, arg = command.split(' ', 1) except ValueError: self[command](*args) else: print_d("Running %r with params %r " % (cmd, arg)) self[cmd](arg, *args) except KeyError: commands = args[1].browser.commands try: try: cmd, arg = command.split(' ', 1) except ValueError: commands[command](*args) else: commands[cmd](arg, *args) except: print_w(_("Invalid command %r received.") % command) except: e = sys.exc_info()[1] print_e(_("Error running command %r, caused by: %r.") % (command, e)) return True def _previous(self, library, window, player): player.previous() def _force_previous(self, library, window, player): player.previous(True) def _next(self, library, window, player): player.next() def _pause(self, library, window, player): player.paused = True def _play(self, library, window, player): if player.song: player.paused = False def _play_pause(self, library, window, player): if player.song is None: player.reset() else: player.paused ^= True def _stop(self, library, window, player): player.stop() def _focus(self, library, window, player): from quodlibet import app app.present() def _volume(self, value, library, window, player): if value[0] in ('+', '-'): if len(value) > 1: try: change = (int(value[1:]) / 100.0) except ValueError: return else: change = 0.05 if value[0] == '-': change = -change volume = player.volume + change else: try: volume = (int(value) / 100.0) except ValueError: return player.volume = min(1.0, max(0.0, volume)) def _order(self, value, library, window, player): order = window.order try: order.set_active( ["inorder", "shuffle", "weighted", "onesong"].index(value)) except ValueError: try: order.set_active(int(value)) except (ValueError, TypeError): if value in ["t", "toggle"]: order.set_active(not order.get_active()) def _repeat(self, value, library, window, player): repeat = window.repeat if value in ["0", "off"]: repeat.set_active(False) elif value in ["1", "on"]: repeat.set_active(True) elif value in ["t", "toggle"]: repeat.set_active(not repeat.get_active()) def _seek(self, time, library, window, player): seek_to = player.get_position() if time[0] == "+": seek_to += util.parse_time(time[1:]) * 1000 elif time[0] == "-": seek_to -= util.parse_time(time[1:]) * 1000 else: seek_to = util.parse_time(time) * 1000 seek_to = min(player.song.get("~#length", 0) * 1000 - 1, max(0, seek_to)) player.seek(seek_to) def _add_file(self, value, library, window, player): filename = os.path.realpath(value) song = library.add_filename(filename) if song: if song not in window.playlist.pl: queue = window.playlist.q queue.insert_before(queue.get_iter_first(), row=[song]) player.next() else: player.go_to(library[filename]) player.paused = False def _add_directory(self, value, library, window, player): filename = os.path.normpath(os.path.realpath(value)) for added in library.scan([filename]): pass if window.browser.can_filter_text(): window.browser.filter_text( "filename = /^%s/c" % re.escape(filename)) else: basepath = filename + "/" songs = [song for (fn, song) in library.iteritems() if fn.startswith(basepath)] songs.sort(reverse=True) queue = window.playlist.q for song in songs: queue.insert_before(queue.get_iter_first(), row=[song]) player.next() def _toggle_window(self, library, window, player): from quodlibet import app if window.get_property('visible'): app.hide() else: app.show() def _hide_window(self, library, window, player): from quodlibet import app app.hide() def _show_window(self, library, window, player): from quodlibet import app app.show() def _set_rating(self, value, library, window, player): song = player.song if song: try: song["~#rating"] = max(0.0, min(1.0, float(value))) except (ValueError, TypeError): pass else: library.changed([song]) def _set_browser(self, value, library, window, player): Kind = browsers.get(value) if Kind is not browsers.search.EmptyBar: window.select_browser(None, value, library, player) else: print_w(_("Unknown browser %r.") % value) def _open_browser(self, value, library, window, player): Kind = browsers.get(value) if Kind is not browsers.search.EmptyBar: LibraryBrowser(Kind, library) else: print_w(_("Unknown browser %r.") % value) def _random(self, tag, library, window, player): if window.browser.can_filter(tag): window.browser.filter_random(tag) def _filter(self, value, library, window, player): tag, values = value.split('=', 1) values = [v.decode("utf-8", "replace") for v in values.split("\x00")] if window.browser.can_filter(tag) and values: window.browser.filter(tag, values) def _unfilter(self, library, window, player): window.browser.unfilter() def _properties(self, value, library, window, player=None): if player is None: # no value given, use the current song; slide arguments # to the right. value, library, window, player = None, value, library, window if value: if value in library: songs = [library[value]] else: songs = library.query(value) else: songs = [player.song] songs = filter(None, songs) if songs: SongProperties(library, songs, parent=window) def _enqueue(self, value, library, window, player): playlist = window.playlist if value in library: songs = [library[value]] elif os.path.isfile(value): songs = [library.add_filename(os.path.realpath(value))] else: songs = library.query(value) songs.sort() playlist.enqueue(songs) def _enqueue_files(self, value, library, window, player): '''Enqueues comma-separated filenames or song names See Issue 716 ''' songs = [] for param in value.split(","): try: song_path = URI(param).filename except ValueError: song_path = param if song_path in library: songs.append(library[song_path]) elif os.path.isfile(song_path): songs.append(library.add_filename(os.path.realpath(value))) if songs: window.playlist.enqueue(songs) def _unqueue(self, value, library, window, player): playlist = window.playlist if value in library: songs = [library[value]] else: songs = library.query(value) playlist.unqueue(songs) def _quit(self, library, window, player): from quodlibet import app app.quit() def _status(self, value, library, window, player): try: f = file(value, "w") except EnvironmentError: pass else: if player.paused: strings = ["paused"] else: strings = ["playing"] strings.append(type(window.browser).__name__) strings.append("%0.3f" % player.volume) strings.append(window.order.get_active_name()) strings.append((window.repeat.get_active() and "on") or "off") progress = 0 if player.info: length = player.info.get("~#length", 0) if length: progress = player.get_position() / (length * 1000.0) strings.append("%0.3f" % progress) f.write(" ".join(strings) + "\n") try: f.write(window.browser.status + "\n") except AttributeError: pass f.close() def _song_list(self, value, library, window, player): if value.startswith("t"): value = not window.song_scroller.get_property('visible') else: value = value not in ['0', 'off', 'false'] window.song_scroller.set_property('visible', value) def _queue(self, value, library, window, player): if value.startswith("t"): value = not window.qexpander.get_property('visible') else: value = value not in ['0', 'off', 'false'] window.qexpander.set_property('visible', value) def _dump_playlist(self, value, library, window, player): try: f = file(value, "w") except EnvironmentError: pass else: for song in window.playlist.pl.get(): f.write(song("~uri") + "\n") f.close() def _dump_queue(self, value, library, window, player): try: f = file(value, "w") except EnvironmentError: pass else: for song in window.playlist.q.get(): f.write(song("~uri") + "\n") f.close() def _refresh(self, library, window, player): scan_libary(library, False) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/filesel.py�����������������������������������������������������������0000644�0001750�0001750�00000035047�12173213426�020704� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import urlparse import errno from gi.repository import Gtk, GObject, Gdk from quodlibet import const from quodlibet import formats from quodlibet import qltk from quodlibet import util from quodlibet.qltk.getstring import GetStringDialog from quodlibet.qltk.views import AllTreeView, RCMTreeView, MultiDragTreeView from quodlibet.qltk.views import TreeViewColumn from quodlibet.qltk.x import ScrolledWindow def search_func(model, column, key, iter, handledirs): check = model.get_value(iter, 0) if check is None: return True elif not handledirs or os.sep not in key: check = os.path.basename(check) or os.sep return key not in check.lower() and key not in check def filesel_filter(filename): IMAGES = [".jpg", ".png", ".jpeg"] if formats.filter(filename): return True else: for ext in IMAGES: if filename.lower().endswith(ext): return True return False class DirectoryTree(RCMTreeView, MultiDragTreeView): def cell_data(column, cell, model, iter, userdata): value = model[iter][0] if value is not None: cell.set_property('text', util.fsdecode( os.path.basename(value) or value)) cell_data = staticmethod(cell_data) def __init__(self, initial=None, folders=None): super(DirectoryTree, self).__init__(Gtk.TreeStore(str)) column = TreeViewColumn(_("Folders")) column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) render = Gtk.CellRendererPixbuf() render.set_property('stock_id', Gtk.STOCK_DIRECTORY) column.pack_start(render, False) render = Gtk.CellRendererText() column.pack_start(render, True) column.set_cell_data_func(render, self.cell_data) column.add_attribute(render, "text", 0) self.append_column(column) self.set_search_equal_func(search_func, True) if folders is None: folders = [] if os.name == "nt": try: from win32com.shell import shell, shellcon as con import pywintypes except ImportError: pass else: if folders: folders.append(None) try: desktop = shell.SHGetFolderPath(0, con.CSIDL_DESKTOP, 0, 0) except pywintypes.com_error: pass else: folders.append(desktop) folders.append(const.HOME) try: music = shell.SHGetFolderPath(0, con.CSIDL_MYMUSIC, 0, 0) except pywintypes.com_error: pass else: folders.append(music) if folders: folders.append(None) drives = [letter + ":\\" for letter in "CDEFGHIJKLMNOPQRSTUVWXYZ"] map(folders.append, filter(os.path.isdir, drives)) else: if folders: folders.append(None) folders.extend([const.HOME, "/"]) # Read in the GTK bookmarks list; gjc says this is the right way try: f = file(os.path.join(const.HOME, ".gtk-bookmarks")) except EnvironmentError: pass else: folders.append(None) for line in (l for l in f.readlines() if l.strip()): folder_url = line.split()[0] folders.append(urlparse.urlsplit(folder_url)[2]) def is_folder(filename): return filename is None or os.path.isdir(filename) folders = filter(is_folder, folders) if folders[-1] is None: folders.pop() for path in folders: niter = self.get_model().append(None, [path]) if path is not None: self.get_model().append(niter, ["dummy"]) self.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.connect( 'test-expand-row', DirectoryTree.__expanded, self.get_model()) self.set_row_separator_func( lambda model, iter, data: model[iter][0] is None, None) if initial: self.go_to(initial) menu = Gtk.Menu() m = qltk.MenuItem(_("_New Folder..."), Gtk.STOCK_NEW) m.connect('activate', self.__mkdir) menu.append(m) m = Gtk.ImageMenuItem(Gtk.STOCK_DELETE, use_stock=True) m.connect('activate', self.__rmdir) menu.append(m) m = Gtk.ImageMenuItem(Gtk.STOCK_REFRESH, use_stock=True) m.connect('activate', self.__refresh) menu.append(m) m = qltk.MenuItem(_("_Select All Subfolders"), Gtk.STOCK_DIRECTORY) m.connect('activate', self.__expand) menu.append(m) menu.show_all() self.connect_object('popup-menu', self.__popup_menu, menu) def go_to(self, initial): path = [] head, tail = os.path.split(initial) while os.path.join(head, tail) != const.HOME and tail != '': if tail: def isvisibledir(t): joined = os.path.join(head, t) return (not t.startswith(".") and os.access(joined, os.X_OK) and os.path.isdir(joined)) try: dirs = filter(isvisibledir, sorted(os.listdir(util.fsnative(head)))) except OSError: break try: path.insert(0, dirs.index(tail)) except ValueError: break head, tail = os.path.split(head) if initial.startswith(const.HOME): path.insert(0, 0) else: path.insert(0, 1) for i in range(len(path)): self.expand_row(Gtk.TreePath(tuple(path[:i + 1])), False) self.get_selection().select_path(tuple(path)) self.scroll_to_cell(tuple(path)) def __popup_menu(self, menu): try: model, (path,) = self.get_selection().get_selected_rows() except ValueError: return True directory = model[path][0] delete = menu.get_children()[1] try: delete.set_sensitive( len(os.listdir(util.fsnative(directory))) == 0) except OSError, err: if err.errno == errno.ENOENT: model.remove(model.get_iter(path)) else: selection = self.get_selection() selection.unselect_all() selection.select_path(path) return self.popup_menu(menu, 0, Gtk.get_current_event_time()) def __mkdir(self, button): model, rows = self.get_selection().get_selected_rows() if len(rows) != 1: return row = rows[0] directory = model[row][0] dir = GetStringDialog( None, _("New Folder"), _("Enter a name for the new folder:")).run() if dir: dir = util.fsnative(dir.decode('utf-8')) fullpath = os.path.realpath(os.path.join(directory, dir)) try: os.makedirs(fullpath) except EnvironmentError, err: error = "<b>%s</b>: %s" % (err.filename, err.strerror) qltk.ErrorMessage( None, _("Unable to create folder"), error).run() else: self.emit('test-expand-row', model.get_iter(row), row) self.expand_row(row, False) def __rmdir(self, button): model, rows = self.get_selection().get_selected_rows() if len(rows) != 1: return directory = model[rows[0]][0] try: os.rmdir(directory) except EnvironmentError, err: error = "<b>%s</b>: %s" % (err.filename, err.strerror) qltk.ErrorMessage( None, _("Unable to delete folder"), error).run() else: prow = rows[0][:-1] expanded = self.row_expanded(prow) self.emit('test-expand-row', model.get_iter(prow), prow) if expanded: self.expand_row(prow, False) def __expand(self, button): selection = self.get_selection() model, rows = selection.get_selected_rows() for row in rows: it = model.get_iter(row) self.expand_row(row, False) last = self.__select_children(it, model, selection) selection.select_range(row, last) def __select_children(self, iter, model, selection): nchildren = model.iter_n_children(iter) last = model.get_path(iter) for i in xrange(nchildren): child = model.iter_nth_child(iter, i) self.expand_row(model.get_path(child), False) last = self.__select_children(child, model, selection) return last def __refresh(self, button): model, rows = self.get_selection().get_selected_rows() expanded = set() self.map_expanded_rows( lambda s, iter, data: expanded.add(model[iter][0]), None) needs_expanding = [] for row in rows: if self.row_expanded(row): self.emit('test-expand-row', model.get_iter(row), row) self.expand_row(row, False) needs_expanding.append(row) while len(needs_expanding) > 0: child = model.iter_children(model.get_iter(needs_expanding.pop())) while child is not None: if model[child][0] in expanded: path = model.get_path(child) self.emit('test-expand-row', child, path) self.expand_row(path, False) needs_expanding.append(path) child = model.iter_next(child) def __expanded(self, iter, path, model): window = self.get_window() if window: window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) Gtk.main_iteration_do(False) try: try: if model is None: return while model.iter_has_child(iter): model.remove(model.iter_children(iter)) folder = model[iter][0] for path in util.listdir(folder): try: if not os.path.isdir(path): continue for filename in util.listdir(path): if os.path.isdir(filename): niter = model.append(iter, [path]) model.append(niter, ["dummy"]) break else: model.append(iter, [path]) except OSError: pass if not model.iter_has_child(iter): return True except OSError: pass finally: if window: window.set_cursor(None) class FileSelector(Gtk.VPaned): def cell_data(column, cell, model, iter, userdata): value = model[iter][0] if value is not None: cell.set_property('text', util.fsdecode(os.path.basename(value))) cell_data = staticmethod(cell_data) __gsignals__ = { 'changed': (GObject.SignalFlags.RUN_LAST, None, (Gtk.TreeSelection,)) } def __init__(self, initial=None, filter=filesel_filter, folders=None): super(FileSelector, self).__init__() self.__filter = filter if initial and os.path.isfile(initial): initial = os.path.dirname(initial) dirlist = DirectoryTree(initial, folders=folders) filelist = AllTreeView(Gtk.ListStore(str)) column = TreeViewColumn(_("Songs")) column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) render = Gtk.CellRendererPixbuf() render.set_property('stock_id', Gtk.STOCK_FILE) render.props.xpad = 3 column.pack_start(render, False) render = Gtk.CellRendererText() column.pack_start(render, True) column.set_cell_data_func(render, self.cell_data) column.add_attribute(render, "text", 0) filelist.append_column(column) filelist.set_rules_hint(True) filelist.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) filelist.set_search_equal_func(search_func, False) self.__sig = filelist.get_selection().connect( 'changed', self.__changed) dirlist.get_selection().connect( 'changed', self.__fill, filelist) dirlist.get_selection().emit('changed') def select_all_files(view, path, col, fileselection): view.expand_row(path, False) fileselection.select_all() dirlist.connect('row-activated', select_all_files, filelist.get_selection()) sw = ScrolledWindow() sw.add(dirlist) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.IN) self.pack1(sw, resize=True) sw = ScrolledWindow() sw.add(filelist) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.IN) self.pack2(sw, resize=True) def rescan(self, *args): self.get_child1().get_child().get_selection().emit('changed') def __changed(self, selection): self.emit('changed', selection) def __fill(self, selection, filelist): fselect = filelist.get_selection() fselect.handler_block(self.__sig) fmodel, frows = fselect.get_selected_rows() selected = [fmodel[row][0] for row in frows] fmodel = filelist.get_model() fmodel.clear() dmodel, rows = selection.get_selected_rows() dirs = [dmodel[row][0] for row in rows] for dir in dirs: try: files = filter(self.__filter, util.listdir(dir)) for file in sorted(files): filename = os.path.join(dir, file) if (os.access(filename, os.R_OK) and not os.path.isdir(filename)): fmodel.append([filename]) except OSError: pass for row in fmodel: if row[0] in selected: fselect.select_path(row.path) fselect.handler_unblock(self.__sig) fselect.emit('changed') �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/sortdialog.py��������������������������������������������������������0000644�0001750�0001750�00000010517�12173213426�021423� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from quodlibet.util import tag class SortCriterionBox(Gtk.ComboBox): """A ComboBox containing a list of tags for the user to choose from. The tag names are presented both translated and untranslated. The 'tag' attribute is the currently chosen tag.""" __criterions = [ (_("Track Headers"), """title genre ~title~version ~#track ~#playcount ~#skipcount ~#rating ~#length""".split()), (_("People Headers"), """artist ~people performer arranger author composer conductor lyricist originalartist""".split()), (_("Album Headers"), """album ~album~discsubtitle labelid ~#disc ~#discs ~#tracks albumartist""".split()), (_("Date Headers"), """date originaldate recordingdate ~#laststarted ~#lastplayed ~#added ~#mtime""".split()), (_("File Headers"), """~format ~#bitrate ~filename ~basename ~dirname ~uri""".split()), (_("Production Headers"), """copyright organization location isrc contact website""".split()), ] def __init__(self): super(SortCriterionBox, self).__init__(model=Gtk.TreeStore(str, str)) render = Gtk.CellRendererText() self.pack_start(render, True) self.add_attribute(render, 'text', 1) model = self.get_model() for (group, items) in self.__criterions: group_row = model.append(None, row=[group, group]) for t in items: model.append(group_row, row=[t, "%s (%s)" % (tag(t), t)]) self.set_active(0) @property def tag(self): iter_ = self.get_active_iter() row = self.get_model()[iter_] if len(row.path.get_indices()) == 1: return return row[0] class SortCriterionChooser(Gtk.Table): def __init__(self): super(SortCriterionChooser, self).__init__() self.set_row_spacing(0, 6) self.set_col_spacing(0, 6) label = Gtk.Label(label=_("Tag:")) self.combo = SortCriterionBox() optbox = Gtk.HBox() self.optasc = Gtk.RadioButton(label=_("Ascending")) self.optdesc = Gtk.RadioButton(group=self.optasc, label=_("Descending")) optbox.add(self.optasc) optbox.add(self.optdesc) self.attach(label, 0, 1, 0, 1, xoptions=Gtk.AttachOptions.FILL) self.attach(self.combo, 1, 2, 0, 1) self.attach(optbox, 0, 2, 1, 2) @property def order(self): if self.optasc.get_active(): return Gtk.SortType.ASCENDING return Gtk.SortType.DESCENDING @property def tag(self): return self.combo.tag class SortDialog(Gtk.Dialog): sort_keys = [] def __add_criterion(self, *args): vbox = self.box hbox = Gtk.HBox(spacing=6) vbox.pack_start(hbox, False, True, 0) cc = SortCriterionChooser() hbox.add(cc) del_btn = Gtk.Button(stock=Gtk.STOCK_REMOVE) del_btn.connect_object("clicked", self.__remove_criterion, cc, hbox) hbox.pack_start(del_btn, False, True, 0) hbox.show_all() self.choosers.append(cc) def __remove_criterion(self, cc, hbox): self.choosers.remove(cc) self.box.remove(hbox) def __init__(self, parent, critcount=1): super(SortDialog, self).__init__(title=_("Custom sort")) self.set_transient_for(parent) self.box = vbox = Gtk.VBox(spacing=6) vbox.set_border_width(10) add_btn = Gtk.Button(stock=Gtk.STOCK_ADD) add_btn.connect("clicked", self.__add_criterion) vbox.pack_start(add_btn, False, True, 0) self.choosers = [] for cc in xrange(critcount): self.__add_criterion() self.vbox.pack_start(vbox, True, True, 0) self.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK) self.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) self.show_all() def run(self): resp = super(SortDialog, self).run() self.sort_key = [(cc.tag, cc.order) for cc in self.choosers if cc.tag] self.destroy() return resp ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/exfalsowindow.py�����������������������������������������������������0000644�0001750�0001750�00000021713�12173213426�022145� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from gi.repository import Gtk, GObject, Pango from quodlibet import config from quodlibet import const from quodlibet import formats from quodlibet import qltk from quodlibet import util from quodlibet.plugins import PluginManager from quodlibet.qltk.ccb import ConfigCheckButton from quodlibet.qltk.delete import DeleteDialog from quodlibet.qltk.edittags import EditTags from quodlibet.qltk.filesel import FileSelector from quodlibet.qltk.pluginwin import PluginWindow from quodlibet.qltk.renamefiles import RenameFiles from quodlibet.qltk.tagsfrompath import TagsFromPath from quodlibet.qltk.tracknumbers import TrackNumbers from quodlibet.qltk.entry import UndoEntry from quodlibet.qltk.about import AboutExFalso from quodlibet.qltk.songsmenu import SongsMenuPluginHandler from quodlibet.qltk.x import Alignment, SeparatorMenuItem from quodlibet.qltk.window import PersistentWindowMixin class ExFalsoWindow(Gtk.Window, PersistentWindowMixin): __gsignals__ = { 'changed': (GObject.SignalFlags.RUN_LAST, None, (object,)), 'artwork-changed': (GObject.SignalFlags.RUN_LAST, None, (object,)) } pm = SongsMenuPluginHandler() @classmethod def init_plugins(cls): PluginManager.instance.register_handler(cls.pm) def __init__(self, library, dir=None): super(ExFalsoWindow, self).__init__() self.set_title("Ex Falso") self.set_default_size(650, 475) self.enable_window_tracking("exfalso") self.__library = library hp = Gtk.HPaned() hp.set_border_width(0) hp.set_position(250) hp.show() self.add(hp) vb = Gtk.VBox() bbox = Gtk.HBox(spacing=6) about = Gtk.Button() about.add(Gtk.Image.new_from_stock( Gtk.STOCK_ABOUT, Gtk.IconSize.BUTTON)) about.connect_object('clicked', self.__show_about, self) bbox.pack_start(about, False, True, 0) prefs = Gtk.Button() prefs.add(Gtk.Image.new_from_stock( Gtk.STOCK_PREFERENCES, Gtk.IconSize.BUTTON)) prefs.connect_object('clicked', PreferencesWindow, self) bbox.pack_start(prefs, False, True, 0) plugins = qltk.Button(_("_Plugins"), Gtk.STOCK_EXECUTE) plugins.connect_object('clicked', PluginWindow, self) bbox.pack_start(plugins, False, True, 0) l = Gtk.Label() l.set_alignment(1.0, 0.5) l.set_ellipsize(Pango.EllipsizeMode.END) bbox.pack_start(l, True, True, 0) fs = FileSelector(dir) vb.pack_start(fs, True, True, 0) vb.pack_start(Alignment(bbox, border=6), False, True, 0) vb.show_all() hp.pack1(vb, resize=True, shrink=False) nb = qltk.Notebook() nb.show() for Page in [EditTags, TagsFromPath, RenameFiles, TrackNumbers]: nb.append_page(Page(self, self.__library)) align = Alignment(nb, top=3) align.show() hp.pack2(align, resize=True, shrink=False) fs.connect('changed', self.__changed, l) s = self.__library.connect_object('changed', FileSelector.rescan, fs) self.connect_object('destroy', self.__library.disconnect, s) self.__save = None self.connect_object('changed', self.set_pending, None) for c in fs.get_children(): c.get_child().connect('button-press-event', self.__pre_selection_changed, fs, nb) c.get_child().connect('focus', self.__pre_selection_changed, fs, nb) fs.get_children()[1].get_child().connect('popup-menu', self.__popup_menu, fs) self.emit('changed', []) self.get_child().show() self.__ag = Gtk.AccelGroup() key, mod = Gtk.accelerator_parse("<control>Q") self.__ag.connect(key, mod, 0, lambda *x: self.destroy()) self.add_accel_group(self.__ag) def __show_about(self, window): about = AboutExFalso(self) about.run() about.destroy() def set_pending(self, button, *excess): self.__save = button def __pre_selection_changed(self, view, event, fs, nb): if self.__save: resp = qltk.CancelRevertSave(self).run() if resp == Gtk.ResponseType.YES: self.__save.clicked() elif resp == Gtk.ResponseType.NO: FileSelector.rescan(fs) else: nb.grab_focus() return True # cancel or closed def __popup_menu(self, view, fs): view.grab_focus() selection = view.get_selection() model, rows = selection.get_selected_rows() filenames = sorted([os.path.realpath(model[row][0]) for row in rows]) songs = map(self.__library.get, filenames) if None not in songs: menu = self.pm.Menu(self.__library, self, songs) if menu is None: menu = Gtk.Menu() else: menu.prepend(SeparatorMenuItem()) else: menu = Gtk.Menu() b = Gtk.ImageMenuItem(Gtk.STOCK_DELETE, use_stock=True) b.connect('activate', self.__delete, filenames, fs) menu.prepend(b) menu.connect_object('selection-done', Gtk.Menu.destroy, menu) menu.show_all() return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def __delete(self, item, files, fs): d = DeleteDialog(self, files) removed = d.run() d.destroy() removed = filter(None, map(self.__library.get, removed)) self.__library.remove(removed) fs.rescan() def __changed(self, selector, selection, label): model, rows = selection.get_selected_rows() files = [] if len(rows) < 2: count = len(model or []) else: count = len(rows) label.set_text(ngettext("%d song", "%d songs", count) % count) for row in rows: filename = util.fsnative(model[row][0]) if not os.path.exists(filename): pass elif filename in self.__library: file = self.__library[filename] if file("~#mtime") + 1. < util.mtime(filename): try: file.reload() except StandardError: pass files.append(file) else: files.append(formats.MusicFile(filename)) files = filter(None, files) if len(files) == 0: self.set_title("Ex Falso") elif len(files) == 1: self.set_title("%s - Ex Falso" % files[0].comma("title")) else: self.set_title( "%s - Ex Falso" % (ngettext("%(title)s and %(count)d more", "%(title)s and %(count)d more", len(files) - 1) % ( {'title': files[0].comma("title"), 'count': len(files) - 1}))) self.__library.add(files) self.emit('changed', files) class PreferencesWindow(qltk.UniqueWindow): def __init__(self, parent): if self.is_not_unique(): return super(PreferencesWindow, self).__init__() self.set_title(_("Ex Falso Preferences")) self.set_border_width(12) self.set_resizable(False) self.set_transient_for(parent) vbox = Gtk.VBox(spacing=6) hb = Gtk.HBox(spacing=6) e = UndoEntry() e.set_text(config.get("editing", "split_on")) e.connect('changed', self.__changed, 'editing', 'split_on') l = Gtk.Label(label=_("Split _on:")) l.set_use_underline(True) l.set_mnemonic_widget(e) hb.pack_start(l, False, True, 0) hb.pack_start(e, True, True, 0) cb = ConfigCheckButton( _("Show _programmatic tags"), 'editing', 'alltags') cb.set_active(config.getboolean("editing", 'alltags')) vbox.pack_start(hb, False, True, 0) vbox.pack_start(cb, False, True, 0) f = qltk.Frame(_("Tag Editing"), child=vbox) close = Gtk.Button(stock=Gtk.STOCK_CLOSE) close.connect_object('clicked', lambda x: x.destroy(), self) button_box = Gtk.HButtonBox() button_box.set_layout(Gtk.ButtonBoxStyle.END) button_box.pack_start(close, True, True, 0) main_vbox = Gtk.VBox(spacing=12) main_vbox.pack_start(f, True, True, 0) main_vbox.pack_start(button_box, False, True, 0) self.add(main_vbox) self.connect_object('destroy', PreferencesWindow.__destroy, self) self.show_all() def __changed(self, entry, section, name): config.set(section, name, entry.get_text()) def __destroy(self): config.write(const.CONFIG) �����������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/songmodel.py���������������������������������������������������������0000644�0001750�0001750�00000014404�12173213426�021242� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, GObject from quodlibet.qltk.playorder import ORDERS def check_sourced(func): # Validate sourced flags after each action that could lead to a changed # iter (only ones triggerd by the order, no iter removal!) def wrap(self, *args, **kwargs): res = func(self, *args, **kwargs) if self.q.current is not None: self.q.sourced = True self.pl.sourced = False else: self.q.sourced = False self.pl.sourced = True return res return wrap class PlaylistMux(object): def __init__(self, player, q, pl): self.q = q self.pl = pl player.connect('song-started', self.__check_q) def __check_q(self, player, song): if song is not None: iter = self.q.find(song) if iter: self.q.remove(iter) self.q.reset() def get_current(self): if self.q.current is not None: return self.q.current else: return self.pl.current current = property(get_current) @check_sourced def next(self): if self.q.is_empty(): self.pl.next() elif self.q.current is None: self.q.next() @check_sourced def next_ended(self): if self.q.is_empty(): self.pl.next_ended() elif self.q.current is None: self.q.next() @check_sourced def previous(self): self.pl.previous() @check_sourced def go_to(self, song, explicit=False): print_d("Told to go to %r" % getattr(song, "key", song)) self.q.go_to(None) return self.pl.go_to(song, explicit) @check_sourced def reset(self): self.q.go_to(None) self.pl.reset() def enqueue(self, songs): for song in songs: self.q.append(row=[song]) def unqueue(self, songs): map(self.q.remove, filter(None, map(self.q.find, songs))) class TrackCurrentModel(Gtk.ListStore): __iter = None __old_value = None def set(self, songs): print_d("Clearing model.") self.clear() self.__iter = None oldsong = self.__old_value print_d("Setting %d songs." % len(songs)) no_autoconv = (long, float, int, basestring, bool, GObject.Object) if not songs or songs[0] is None or isinstance(songs[0], no_autoconv): for song in reversed(songs): iter_ = self.insert(0, row=[song]) if song is oldsong: self.__iter = iter_ else: insert = self.insert_with_valuesv columns = [0] for song in reversed(songs): iter_ = insert(0, columns, [song]) if song is oldsong: self.__iter = iter_ print_d("Done filling model.") def remove(self, iter_): if self.__iter and self[iter_].path == self[self.__iter].path: self.__iter = None super(TrackCurrentModel, self).remove(iter_) def clear(self): self.__iter = None super(TrackCurrentModel, self).clear() def get(self): songs = [] def func(model, path, iter_, user_data): songs.append(model.get_value(iter_, 0)) self.foreach(func, None) return songs @property def current(self): return self.__iter and self.get_value(self.__iter, 0) @property def current_path(self): return self.__iter and self.get_path(self.__iter) def __set_current_iter(self, iter_): if iter_ == self.__iter: return # emit a row-changed for the previous and the new iter after it is set # so that the currentcolumn icon gets updated on song changes for it in filter(None, (self.__iter, iter_)): self.row_changed(self.get_path(it), it) self.__iter = iter_ self.__old_value = self.current def __get_current_iter(self): return self.__iter current_iter = property(__get_current_iter, __set_current_iter) def find(self, song): for row in self: if row[0] == song: return row.iter return None def find_all(self, songs): return [row.iter for row in self if row[0] in songs] def __contains__(self, song): return bool(self.find(song)) def is_empty(self): return not len(self) class PlaylistModel(TrackCurrentModel): order = None repeat = False sourced = False def __init__(self): super(PlaylistModel, self).__init__(object) self.order = ORDERS[0](self) # The playorder plugins use paths atm to remember songs so # we need to reset them if the paths change somehow. self.__sigs = [] for sig in ['row-deleted', 'row-inserted', 'rows-reordered']: s = self.connect(sig, lambda pl, *x: self.order.reset(pl)) self.__sigs.append(s) def next(self): iter_ = self.current_iter self.current_iter = self.order.next_explicit(self, iter_) def next_ended(self): iter_ = self.current_iter self.current_iter = self.order.next_implicit(self, iter_) def previous(self): iter_ = self.current_iter self.current_iter = self.order.previous_explicit(self, iter_) def go_to(self, song, explicit=False): print_d("Told to go to %r" % getattr(song, "key", song)) iter_ = None if isinstance(song, Gtk.TreeIter): iter_ = song elif song is not None: iter_ = self.find(song) if explicit: self.current_iter = self.order.set_explicit(self, iter_) else: self.current_iter = self.order.set_implicit(self, iter_) return self.current_iter def set(self, songs): self.order.reset(self) map(self.handler_block, self.__sigs) super(PlaylistModel, self).set(songs) map(self.handler_unblock, self.__sigs) def reset(self): self.go_to(None) self.order.reset(self) if not self.is_empty(): self.next() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/properties.py��������������������������������������������������������0000644�0001750�0001750�00000015216�12173213426�021451� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # 2012 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, GObject, Pango from quodlibet import qltk from quodlibet import util from quodlibet import config from quodlibet.qltk.edittags import EditTags from quodlibet.qltk.renamefiles import RenameFiles from quodlibet.qltk.tagsfrompath import TagsFromPath from quodlibet.qltk.tracknumbers import TrackNumbers from quodlibet.qltk.views import HintedTreeView from quodlibet.qltk.window import PersistentWindowMixin class SongProperties(qltk.Window, PersistentWindowMixin): __gsignals__ = { 'changed': (GObject.SignalFlags.RUN_LAST, None, (object,)) } def __init__(self, library, songs, parent=None): super(SongProperties, self).__init__(dialog=False) self.set_transient_for(qltk.get_top_parent(parent)) default_width = 600 config_suffix = "" if len(songs) <= 1: default_width -= 200 config_suffix += "single" self.set_default_size(default_width, 400) self.enable_window_tracking("quodlibet_properties", size_suffix=config_suffix) self.auto_save_on_change = config.getboolean( 'editing', 'auto_save_changes', False) paned = Gtk.HPaned() notebook = qltk.Notebook() pages = [] pages.extend([Ctr(self, library) for Ctr in [EditTags, TagsFromPath, RenameFiles]]) if len(songs) > 1: pages.append(TrackNumbers(self, library)) for page in pages: notebook.append_page(page) self.set_border_width(12) fbasemodel = Gtk.ListStore(object, str) fmodel = Gtk.TreeModelSort(model=fbasemodel) fview = HintedTreeView(fmodel) fview.connect('button-press-event', self.__pre_selection_changed) fview.set_rules_hint(True) selection = fview.get_selection() selection.set_mode(Gtk.SelectionMode.MULTIPLE) self.__save = None if len(songs) > 1: render = Gtk.CellRendererText() c1 = Gtk.TreeViewColumn(_('File'), render, text=1) render.set_property('ellipsize', Pango.EllipsizeMode.END) c1.set_sort_column_id(1) fview.append_column(c1) sw = Gtk.ScrolledWindow() sw.add(fview) sw.set_shadow_type(Gtk.ShadowType.IN) sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) sw.show_all() paned.pack1(sw, shrink=False, resize=True) # Invisible selections behave a little strangely. So, when # handling this selection, there's a lot of if len(model) == 1 # checks that "hardcode" the first row being selected. for song in songs: fbasemodel.append(row=[song, util.fsdecode(song("~basename"))]) self.connect_object('changed', SongProperties.__set_title, self) selection.select_all() paned.pack2(notebook, shrink=False, resize=True) csig = selection.connect('changed', self.__selection_changed) s1 = library.connect( 'changed', self.__refresh, fbasemodel, fview) s2 = library.connect( 'removed', self.__remove, fbasemodel, selection, csig) self.connect_object('destroy', library.disconnect, s1) self.connect_object('destroy', library.disconnect, s2) self.connect_object('changed', self.set_pending, None) self.emit('changed', songs) self.add(paned) paned.set_position(175) notebook.show() paned.show() self.show() def __remove(self, library, songs, model, selection, sig): # If the handler is unblocked, then the selection gets updated # with some half-gone rows and we get a null-type error. So, # block the changed handler. Instead, track changes manually. # We can't just unconditionally emit a changed signal on the # selection or we risk voiding edits on a selection that # doesn't include the removed songs. selection.handler_block(sig) if len(model) == 1: rows = [Gtk.TreePath((0,))] else: rows = selection.get_selected_rows()[1] to_remove = [] changed = False for row in model: if row[0] in songs: to_remove.append(row.iter) changed = changed or (row.path in rows) map(model.remove, to_remove) selection.handler_unblock(sig) if changed: selection.emit('changed') def __set_title(self, songs): if songs: if len(songs) == 1: title = songs[0].comma("title") else: title = ngettext( "%(title)s and %(count)d more", "%(title)s and %(count)d more", len(songs) - 1) % {'title': songs[0].comma("title"), 'count': len(songs) - 1} self.set_title("%s - %s" % (title, _("Properties"))) else: self.set_title(_("Properties")) def __refresh(self, library, songs, model, view): view.freeze_notify() if len(model) == 1: rows = [Gtk.TreePath((0,))] else: rows = view.get_selection().get_selected_rows()[1] changed = False for row in model: song = row[0] if song in songs: row[1] = song("~basename") changed = changed or (row.path in rows) view.thaw_notify() if changed: view.get_selection().emit('changed') def set_pending(self, button, *excess): self.__save = button def __pre_selection_changed(self, view, event): if self.__save: if self.auto_save_on_change: self.__save.clicked() return resp = qltk.CancelRevertSave(self).run() if resp == Gtk.ResponseType.YES: self.__save.clicked() elif resp == Gtk.ResponseType.NO: return False else: return True # cancel or closed def __selection_changed(self, selection): model = selection.get_tree_view().get_model() if len(model) == 1: self.emit('changed', [model[(0,)][0]]) else: model, rows = selection.get_selected_rows() songs = [model[row][0] for row in rows] self.emit('changed', songs) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/playorder.py���������������������������������������������������������0000644�0001750�0001750�00000020315�12173212464�021253� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import random from gi.repository import Gtk from quodlibet import config from quodlibet.plugins import PluginManager class Order(object): name = "unknown_order" display_name = _("Unknown") accelerated_name = _("_Unknown") replaygain_profiles = ["track"] priority = 100 def __init__(self, playlist): self.playlist = playlist # Not called directly, but the default implementation of # next_explicit and next_implicit both just call this. def next(self, playlist, iter): raise NotImplementedError # Not called directly, but the default implementation of # previous_explicit calls this. Right now there is no such thing # as previous_implicit. def previous(self, playlist, iter): raise NotImplementedError # Not called directly, but the default implementations of # set_explicit and set_implicit call this. def set(self, playlist, iter): return iter # Called when the user presses a "Next" button. def next_explicit(self, playlist, iter): return self.next(playlist, iter) # Called when a song ends passively, e.g. it plays through. def next_implicit(self, playlist, iter): return self.next(playlist, iter) # Called when the user presses a "Previous" button. def previous_explicit(self, playlist, iter): return self.previous(playlist, iter) # Called when the user manually selects a song (at iter). # If desired the play order can override that, or just # log it and return the iter again. If the play order returns # None, no action will be taken by the player. def set_explicit(self, playlist, iter): return self.set(playlist, iter) # Called when the song is set by a means other than the UI. def set_implicit(self, playlist, iter): return self.set(playlist, iter) def reset(self, playlist): pass class OrderInOrder(Order): name = "inorder" display_name = _("In Order") accelerated_name = _("_In Order") replaygain_profiles = ["album", "track"] priority = 0 def next(self, playlist, iter): if iter is None: return playlist.get_iter_first() else: next = playlist.iter_next(iter) if next is None and playlist.repeat: next = playlist.get_iter_first() return next def previous(self, playlist, iter): if len(playlist) == 0: return None elif iter is None: return playlist[(len(playlist) - 1,)].iter else: path = max(1, playlist.get_path(iter).get_indices()[0]) try: return playlist.get_iter((path - 1,)) except ValueError: if playlist.repeat: return playlist[(len(playlist) - 1,)].iter return None class OrderRemembered(Order): # Shared class for all the shuffle modes that keep a memory # of their previously played songs. def __init__(self, playlist): super(OrderRemembered, self).__init__(playlist) self._played = [] def next(self, playlist, iter): if iter is not None: self._played.append(playlist.get_path(iter).get_indices()[0]) def previous(self, playlist, iter): try: path = self._played.pop() except IndexError: return None else: return playlist.get_iter(path) def set(self, playlist, iter): if iter is not None: self._played.append(playlist.get_path(iter).get_indices()[0]) return iter def reset(self, playlist): del(self._played[:]) class OrderShuffle(OrderRemembered): name = "shuffle" display_name = _("Shuffle") accelerated_name = _("_Shuffle") priority = 1 def next(self, playlist, iter): super(OrderShuffle, self).next(playlist, iter) played = set(self._played) songs = set(range(len(playlist))) remaining = songs.difference(played) if remaining: return playlist.get_iter((random.choice(list(remaining)),)) elif playlist.repeat and not playlist.is_empty(): del(self._played[:]) return playlist.get_iter((random.choice(list(songs)),)) else: del(self._played[:]) return None class OrderWeighted(OrderRemembered): name = "Weighted" display_name = _("Weighted") accelerated_name = _("_Weighted") priority = 2 def next(self, playlist, iter): super(OrderWeighted, self).next(playlist, iter) songs = playlist.get() max_score = sum([song('~#rating') for song in songs]) choice = random.random() * max_score current = 0.0 for i, song in enumerate(songs): current += song("~#rating") if current >= choice: return playlist.get_iter((i,)) else: return playlist.get_iter_first() class OrderOneSong(OrderInOrder): name = "onesong" display_name = _("One Song") accelerated_name = _("_One Song") priority = 3 def next_implicit(self, playlist, iter): if playlist.repeat: return iter else: return None ORDERS = [] def set_orders(orders): ORDERS[:] = [OrderInOrder, OrderShuffle, OrderWeighted, OrderOneSong] ORDERS.extend(orders) ORDERS.sort(lambda K1, K2: cmp(K1.priority, K2.priority) or cmp(K1.name, K2.name)) set_orders([]) class PlayOrder(Gtk.ComboBoxText): def __init__(self, model, player): super(PlayOrder, self).__init__() cell = self.get_cells()[0] cell.props.xpad = 1 cell.props.ypad = 0 self.__plugins = [] if PluginManager.instance: PluginManager.instance.register_handler(self) self.refresh() self.__sig = self.connect_object( 'changed', self.__changed_order, model, player) self.set_active(config.get("memory", "order")) self.emit("changed") def plugin_handle(self, plugin): from quodlibet.plugins.playorder import PlayOrderPlugin return issubclass(plugin, PlayOrderPlugin) def plugin_enable(self, plugin, obj): if plugin.name is None: plugin.name = plugin.PLUGIN_ID if plugin.display_name is None: plugin.display_name = plugin.PLUGIN_NAME if plugin.accelerated_name is None: plugin.accelerated_name = plugin.display_name self.__plugins.append(plugin) self.refresh() def plugin_disable(self, plugin): self.__plugins.remove(plugin) # Don't safe changes from plugin changes # so that disables on shutdown don't change the config. if self.__sig: self.handler_block(self.__sig) self.refresh() self.handler_unblock(self.__sig) else: self.refresh() def refresh(self): name = self.get_active_name() self.get_model().clear() set_orders(self.__plugins) for order in ORDERS: self.append_text(order.display_name) if name: self.set_active(name) else: self.set_active(ORDERS[0]).name def set_active(self, value): try: value = ORDERS.index(value) except ValueError: if isinstance(value, str): for i, Order in enumerate(ORDERS): if Order.name.lower() == value.lower(): value = i break try: value = int(value) except ValueError: value = 0 super(PlayOrder, self).set_active(value) def get_active_name(self): try: return ORDERS[self.get_active()].name except IndexError: return ORDERS[0].name def __changed_order(self, model, player): Order = ORDERS[self.get_active()] model.order = Order(model) config.set("memory", "order", Order.name) player.replaygain_profiles[2] = Order.replaygain_profiles player.volume = player.volume �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/entry.py�������������������������������������������������������������0000644�0001750�0001750�00000015225�12173213426�020416� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig, Michael Urman # 2011, 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, GObject, Gdk, Gio from quodlibet.qltk.x import is_accel from quodlibet.qltk.x import SeparatorMenuItem class EditableUndo(object): """A simple undo/redo implementation for gtk widgets that support the gtk.Editable interface""" def set_undo(self, val): if val: self.__enable_undo() else: self.__disable_undo() def reset_undo(self): self.__history = [] self.__re_history = [] self.__in_pos = -1 self.__del_pos = -1 self.__last_space = False def undo(self): self.__do(self.__history, self.__re_history) def redo(self): self.__do(self.__re_history, self.__history) def can_undo(self): return self.__can_do(self.__history) def can_redo(self): return self.__can_do(self.__re_history) def __enable_undo(self): self.reset_undo() self.__handlers = [ self.connect("insert-text", self.__insert_before), self.connect("delete-text", self.__delete_before), self.connect('populate-popup', self.__popup), self.connect('key-press-event', self.__key_press), ] def __key_press(self, entry, event): if is_accel(event, "<ctrl>z"): self.undo() return True elif is_accel(event, "<ctrl><shift>z"): self.redo() return True return False def __disable_undo(self): for handler in self.__handlers: self.disconnect(handler) del self.__history del self.__re_history del self.__last_space del self.__in_pos del self.__del_pos def __popup(self, entry, menu): undo = Gtk.ImageMenuItem(Gtk.STOCK_UNDO, use_stock=True) redo = Gtk.ImageMenuItem(Gtk.STOCK_REDO, use_stock=True) sep = SeparatorMenuItem() map(Gtk.Widget.show, (sep, redo, undo)) undo.connect('activate', lambda *x: self.undo()) redo.connect('activate', lambda *x: self.redo()) undo.set_sensitive(self.can_undo()) redo.set_sensitive(self.can_redo()) map(menu.prepend, (sep, redo, undo)) def __all(self): text = self.get_chars(0, -1).decode("utf-8") pos = self.get_position() return [text, pos] def __add(self): self.__history.append(self.__all()) self.__re_history = [] def __insert_before(self, entry, text, length, position): self.__del_pos = -1 pos = self.get_position() if pos != self.__in_pos or (self.__last_space and text != " ") \ or length > 1: self.__add() self.__last_space = (text == " ") self.__in_pos = pos + 1 def __delete_before(self, entry, start, end): self.__in_pos = -1 text = self.get_chars(start, end) length = end - start pos = self.get_position() if pos != self.__del_pos or (self.__last_space and text != " ") \ or length > 1: self.__add() self.__last_space = (text == " ") self.__del_pos = end - 1 def __inhibit(self): for handler in self.__handlers: self.handler_block(handler) def __uninhibit(self): for handler in self.__handlers: self.handler_unblock(handler) def __can_do(self, source): return bool(source) def __do(self, source, target): if not self.__can_do(source): return self.__del_pos = self.__in_pos = -1 self.__inhibit() now = self.__all() last = source.pop(-1) if now != last: target.append(now) text, pos = last self.delete_text(0, -1) self.insert_text(text, 0) self.set_position(pos) self.__uninhibit() class Entry(Gtk.Entry): def do_get_preferred_width(self): # 150 min width since GTK+3.2 is way too much minimum, natural = Gtk.Entry.do_get_preferred_width(self) return (30, natural) class UndoEntry(Entry, EditableUndo): def __init__(self, *args): super(UndoEntry, self).__init__(*args) self.set_undo(True) def set_text(self, *args): super(UndoEntry, self).set_text(*args) self.reset_undo() class ClearEntryMixin(object): """A clear icon mixin supporting newer Gtk.Entry or a separate clear button as a fallback. """ __gsignals__ = { 'clear': (GObject.SignalFlags.RUN_LAST | GObject.SignalFlags.ACTION, None, ()) } def enable_clear_button(self): """Enables the clear icon in the entry""" gicon = Gio.ThemedIcon.new_from_names( ["edit-clear-symbolic", "edit-clear"]) self.set_icon_from_gicon(Gtk.EntryIconPosition.SECONDARY, gicon) self.connect("icon-release", self.__clear) def __clear(self, button, *args): # TODO: don't change the order.. we connect to clear and remove all # timeouts added for text change in the searchbar self.delete_text(0, -1) self.emit('clear') class ClearEntry(UndoEntry, ClearEntryMixin): __gsignals__ = ClearEntryMixin.__gsignals__ class ValidatingEntryMixin(object): """An entry with visual feedback as to whether it is valid or not. The given validator function gets a string and returns True (green), False (red), or None (black). parse.Query.is_valid_color mimicks the behavior of the search bar. If the "Color search terms" option is off, the entry will not change color.""" INVALID = Gdk.RGBA(0.8, 0, 0) VALID = Gdk.RGBA(0.3, 0.6, 0.023) def set_validate(self, validator=None): if validator: self.connect_object('changed', self.__color, validator) def __color(self, validator): value = validator(self.get_text()) if value is True: color = self.VALID elif value is False: color = self.INVALID elif value and isinstance(value, str): color = Gdk.RGBA() color.parse(value) else: color = None if color and self.get_property('sensitive'): self.override_color(Gtk.StateType.NORMAL, color) else: self.override_color(Gtk.StateType.NORMAL, None) class ValidatingEntry(ClearEntry, ValidatingEntryMixin): def __init__(self, validator=None, *args): super(ValidatingEntry, self).__init__(*args) self.set_validate(validator) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/getstring.py���������������������������������������������������������0000644�0001750�0001750�00000004636�12173212464�021270� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig, Michael Urman # 2013 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, Gdk from quodlibet.qltk.entry import UndoEntry class GetStringDialog(Gtk.Dialog): """Simple dialog to return a string from the user""" _WIDTH = 300 def __init__(self, parent, title, text, okbutton=Gtk.STOCK_OPEN): super(GetStringDialog, self).__init__(title, parent) self.set_border_width(6) self.set_default_size(width=self._WIDTH, height=0) self.set_resizable(True) self.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, okbutton, Gtk.ResponseType.OK) self.vbox.set_spacing(6) self.set_default_response(Gtk.ResponseType.OK) box = Gtk.VBox(spacing=6) lab = Gtk.Label(label=text) box.set_border_width(6) lab.set_line_wrap(True) lab.set_justify(Gtk.Justification.CENTER) box.pack_start(lab, True, True, 0) self._val = UndoEntry() box.pack_start(self._val, True, True, 0) self.vbox.pack_start(box, True, True, 0) self.get_child().show_all() def _verify_clipboard(self, text): """Return an altered text or None if the content was invalid.""" return def run(self, text="", clipboard=False, test=False): """Shows the dialog and returns the entered value. If clipboard is set, the initial value will be pulled from the clipboard and can be verified/altered by _verify_clipboard. In case the verification fails text will be used as fallback""" self.show() if clipboard: clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) clip = clipboard.wait_for_text() if clip is not None: clip = self._verify_clipboard(clip) if clip is not None: text = clip self._val.set_text(text) self._val.set_activates_default(True) self._val.grab_focus() resp = Gtk.ResponseType.OK if not test: resp = super(GetStringDialog, self).run() if resp == Gtk.ResponseType.OK: value = self._val.get_text() else: value = None self.destroy() return value ��������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/songlist.py����������������������������������������������������������0000644�0001750�0001750�00000115134�12173213426�021117� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig # 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import datetime import time from gi.repository import Gtk, GLib, Pango, Gdk, GObject from quodlibet import app from quodlibet import config from quodlibet import const from quodlibet import qltk from quodlibet import util from quodlibet.parse import Query, Pattern from quodlibet.qltk.information import Information from quodlibet.qltk.properties import SongProperties from quodlibet.qltk.views import AllTreeView, DragScroll from quodlibet.qltk.ratingsmenu import RatingsMenuItem from quodlibet.qltk.ratingsmenu import ConfirmRateMultipleDialog from quodlibet.qltk.songmodel import PlaylistModel from quodlibet.util.uri import URI from quodlibet.formats._audio import TAG_TO_SORT, FILESYSTEM_TAGS, AudioFile from quodlibet.qltk.sortdialog import SortDialog from quodlibet.qltk.x import SeparatorMenuItem from quodlibet.util import human_sort_key DND_QL, DND_URI_LIST = range(2) class SongInfoSelection(GObject.Object): """ InfoSelection: Songs which get included in the status bar summary. changed gets fired after any of the songs in the selection or the selection it self have changed. The signal is async. Two selection states: - 0 or 1 selected row: all rows - 2 or more: only the selected rows The signals fires if the state changes. FIXME: row-changed for song lists isn't implemented (performance). Since a library change could change the selection it should also trigger a this. Since this would happen quite often (song stat changes) and would lead to a complete recalc in the common case ignore it for now. """ __gsignals__ = { # changed(songs:list) 'changed': (GObject.SignalFlags.RUN_LAST, None, (object,)) } def __init__(self, songlist): super(SongInfoSelection, self).__init__() self.__idle = None self.__songlist = songlist self.__selection = sel = songlist.get_selection() self.__count = sel.count_selected_rows() self.__sel_id = sel.connect('changed', self.__selection_changed_cb) def destroy(self): self.__selection.disconnect(self.__sel_id) if self.__idle: GLib.source_remove(self.__idle) def _update_songs(self, songs): """After making changes (filling the list) call this to skip any queued changes and emit the passed songs instead""" self.__emit_info_selection(songs) self.__count = len(songs) def __idle_emit(self, songs): if songs is None: if self.__count <= 1: songs = self.__songlist.get_songs() else: songs = self.__songlist.get_selected_songs() self.emit('changed', songs) self.__idle = None False def __emit_info_selection(self, songs=None): if self.__idle: GLib.source_remove(self.__idle) self.__idle = GLib.idle_add( self.__idle_emit, songs, priority=GLib.PRIORITY_LOW) def __selection_changed_cb(self, selection): count = selection.count_selected_rows() if self.__count == count == 0: return if count <= 1: if self.__count > 1: self.__emit_info_selection() else: self.__emit_info_selection() self.__count = count class SongList(AllTreeView, DragScroll, util.InstanceTracker): # A TreeView containing a list of songs. headers = [] # The list of current headers. star = list(Query.STAR) CurrentColumn = None class TextColumn(qltk.views.TreeViewColumnButton): # Base class for other kinds of columns. _label = Gtk.Label().create_pango_layout("") __last_rendered = None def _needs_update(self, value): if self.__last_rendered == value: return False self.__last_rendered = value return True def _cdf(self, column, cell, model, iter, tag): text = model[iter][0].comma(tag) if not self._needs_update(text): return cell.set_property('text', text) self._update_layout(text, cell) def _delayed_update(self): max_width = -1 width = self.get_fixed_width() for text, pad, cell_pad in self._text: self._label.set_text(text, -1) new_width = self._label.get_pixel_size()[0] + pad + cell_pad if new_width > max_width: max_width = new_width if width < max_width: self.set_fixed_width(max_width) tv = self.get_tree_view() if tv: tv.columns_autosize() self._text.clear() self._timeout = None return False def _update_layout(self, text, cell=None, pad=12, force=False): if not self.get_resizable(): cell_pad = (cell and cell.get_property('xpad')) or 0 self._text.add((text, pad, cell_pad)) if force: self._delayed_update() if self._timeout is not None: GLib.source_remove(self._timeout) self._timeout = None self._timeout = GLib.idle_add(self._delayed_update, priority=GLib.PRIORITY_LOW) def __init__(self, t): self._render = Gtk.CellRendererText() title = util.tag(t) super(SongList.TextColumn, self).__init__(title, self._render) self.header_name = t self.set_sizing(Gtk.TreeViewColumnSizing.FIXED) self.set_visible(True) self.set_clickable(True) self.set_sort_indicator(False) self.set_cell_data_func(self._render, self._cdf, t) self._text = set() self._timeout = None self._update_layout(title, force=True) class DateColumn(TextColumn): # The '~#' keys that are dates. def _cdf(self, column, cell, model, iter, tag): stamp = model[iter][0](tag) if not self._needs_update(stamp): return if not stamp: cell.set_property('text', _("Never")) else: date = datetime.datetime.fromtimestamp(stamp).date() today = datetime.datetime.now().date() days = (today - date).days if days == 0: format = "%X" elif days < 7: format = "%A" else: format = "%x" stamp = time.localtime(stamp) text = time.strftime(format, stamp).decode(const.ENCODING) cell.set_property('text', text) self._update_layout(cell.get_property('text'), cell) class WideTextColumn(TextColumn): # Resizable and ellipsized at the end. Used for any key with # a '~' in it, and 'title'. def __init__(self, tag): super(SongList.WideTextColumn, self).__init__(tag) self._render.set_property('ellipsize', Pango.EllipsizeMode.END) self.set_expand(True) self.set_resizable(True) self.set_fixed_width(1) class RatingColumn(TextColumn): # Render ~#rating directly (simplifies filtering, saves # a function call). def _cdf(self, column, cell, model, iter, tag): value = model[iter][0].get("~#rating", const.DEFAULT_RATING) if not self._needs_update(value): return cell.set_property('text', util.format_rating(value)) # No need to update layout, we know this width at # at startup. def __init__(self): super(SongList.RatingColumn, self).__init__("~#rating") self.set_resizable(False) self.set_expand(False) self._update_layout(util.format_rating(1.0), force=True) class NonSynthTextColumn(WideTextColumn): # Optimize for non-synthesized keys by grabbing them directly. # Used for any tag without a '~' except 'title'. def _cdf(self, column, cell, model, iter, tag): value = model[iter][0].get(tag, "") if not self._needs_update(value): return cell.set_property('text', value.replace("\n", ", ")) class FSColumn(WideTextColumn): # Contains text in the filesystem encoding, so needs to be # decoded safely (and also more slowly). def _cdf(self, column, cell, model, iter, tag): value = model[iter][0].comma(tag) if not self._needs_update(value): return cell.set_property('text', util.unexpand(util.fsdecode(value))) class NumericColumn(TextColumn): # Any '~#' keys except dates. def _cdf(self, column, cell, model, iter, tag): value = model[iter][0].comma(tag) if not self._needs_update(value): return text = unicode(value) cell.set_property('text', text) self._update_layout(text, cell) def __init__(self, tag): super(SongList.NumericColumn, self).__init__(tag) self._render.set_property('xalign', 1.0) self.set_alignment(1.0) class LengthColumn(NumericColumn): def _cdf(self, column, cell, model, iter, tag): value = model[iter][0].get("~#length", 0) if not self._needs_update(value): return text = util.format_time(value) cell.set_property('text', text) self._update_layout(text, cell) def __init__(self): super(SongList.LengthColumn, self).__init__("~#length") class FilesizeColumn(NumericColumn): def _cdf(self, column, cell, model, iter, tag): value = model[iter][0].get("~#filesize", 0) if not self._needs_update(value): return text = util.format_size(value) cell.set_property('text', text) self._update_layout(text, cell) def __init__(self): super(SongList.FilesizeColumn, self).__init__("~#filesize") class PatternColumn(WideTextColumn): def _cdf(self, column, cell, model, iter, tag): song = model.get_value(iter, 0) if not self._pattern: return value = self._pattern % song if not self._needs_update(value): return cell.set_property('text', value) def __init__(self, pattern): super(SongList.PatternColumn, self).__init__(util.pattern(pattern)) self.header_name = pattern self._pattern = None try: self._pattern = Pattern(pattern) except ValueError: pass def Menu(self, header, browser, library): songs = self.get_selected_songs() if not songs: return can_filter = browser.can_filter menu = browser.Menu(songs, self, library) def Filter(t): # Translators: The substituted string is the name of the # selected column (a translated tag name). b = qltk.MenuItem( _("_Filter on %s") % util.tag(t, True), Gtk.STOCK_INDEX) b.connect_object('activate', self.__filter_on, t, songs, browser) return b header = util.tagsplit(header)[0] if can_filter("artist") or can_filter("album") or can_filter(header): menu.preseparate() if can_filter("artist"): menu.prepend(Filter("artist")) if can_filter("album"): menu.prepend(Filter("album")) if (header not in ["artist", "album"] and can_filter(header)): menu.prepend(Filter(header)) ratings = RatingsMenuItem(songs, library) menu.preseparate() menu.prepend(ratings) menu.show_all() return menu def __init__(self, library, player=None, update=False): super(SongList, self).__init__() self._register_instance(SongList) self.set_model(PlaylistModel()) self.info = SongInfoSelection(self) self.set_size_request(200, 150) self.set_rules_hint(True) self.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.set_fixed_height_mode(True) self.__csig = self.connect('columns-changed', self.__columns_changed) self.set_column_headers(self.headers) librarian = library.librarian or library sigs = [] # The player needs to be called first so it can ge the next song # in case the current one gets deleted and the order gets reset. if player: s = librarian.connect_object('removed', map, player.remove) sigs.append(s) sigs.extend([librarian.connect('changed', self.__song_updated), librarian.connect('removed', self.__song_removed)]) if update: sigs.append(librarian.connect('added', self.__song_added)) for sig in sigs: self.connect_object('destroy', librarian.disconnect, sig) if player: sigs = [player.connect('paused', self.__redraw_current), player.connect('unpaused', self.__redraw_current)] for sig in sigs: self.connect_object('destroy', player.disconnect, sig) self.connect('button-press-event', self.__button_press, librarian) self.connect('key-press-event', self.__key_press, librarian) self.disable_drop() self.connect('drag-motion', self.__drag_motion) self.connect('drag-leave', self.__drag_leave) self.connect('drag-data-get', self.__drag_data_get) self.connect('drag-data-received', self.__drag_data_received, library) self.set_search_equal_func(self.__search_func, None) self.accelerators = Gtk.AccelGroup() key, mod = Gtk.accelerator_parse("<alt>Return") self.accelerators.connect( key, mod, 0, lambda *args: self.__song_properties(librarian)) key, mod = Gtk.accelerator_parse("<control>I") self.accelerators.connect( key, mod, 0, lambda *args: self.__information(librarian)) self.connect('destroy', self.__destroy) def __destroy(self, *args): self.info.destroy() self.handler_block(self.__csig) map(self.remove_column, self.get_columns()) self.handler_unblock(self.__csig) def __search_func(self, model, column, key, iter, *args): for column in self.get_columns(): value = model.get_value(iter, 0)(column.header_name) if not isinstance(value, basestring): continue elif key in value.lower() or key in value: return False else: return True def enable_drop(self, by_row=True): targets = [ ("text/x-quodlibet-songs", Gtk.TargetFlags.SAME_APP, DND_QL), ("text/uri-list", 0, DND_URI_LIST) ] targets = [Gtk.TargetEntry.new(*t) for t in targets] self.drag_source_set( Gdk.ModifierType.BUTTON1_MASK, targets, Gdk.DragAction.COPY | Gdk.DragAction.MOVE) self.drag_dest_set(Gtk.DestDefaults.ALL, targets, Gdk.DragAction.COPY | Gdk.DragAction.MOVE) self.__drop_by_row = by_row def disable_drop(self): targets = [ ("text/x-quodlibet-songs", Gtk.TargetFlags.SAME_APP, DND_QL), ("text/uri-list", 0, DND_URI_LIST) ] targets = [Gtk.TargetEntry.new(*t) for t in targets] self.drag_source_set( Gdk.ModifierType.BUTTON1_MASK, targets, Gdk.DragAction.COPY) self.drag_dest_unset() def __drag_leave(self, widget, ctx, time): widget.get_parent().drag_unhighlight() self.scroll_disable() def __drag_motion(self, view, ctx, x, y, time): if self.__drop_by_row: self.set_drag_dest(x, y) self.scroll_motion(x, y) if Gtk.drag_get_source_widget(ctx) == self: kind = Gdk.DragAction.MOVE else: kind = Gdk.DragAction.COPY Gdk.drag_status(ctx, kind, time) return True else: self.get_parent().drag_highlight() Gdk.drag_status(ctx, Gdk.DragAction.COPY, time) return True def __drag_data_get(self, view, ctx, sel, tid, etime): model, paths = self.get_selection().get_selected_rows() if tid == DND_QL: songs = [model[path][0] for path in paths if model[path][0].can_add] if len(songs) != len(paths): qltk.ErrorMessage( qltk.get_top_parent(self), _("Unable to copy songs"), _("The files selected cannot be copied to other " "song lists or the queue.")).run() Gdk.drag_abort(ctx, etime) return filenames = [song("~filename") for song in songs] type_ = Gdk.atom_intern("text/x-quodlibet-songs", True) sel.set(type_, 8, "\x00".join(filenames)) if ctx.get_actions() & Gdk.DragAction.MOVE: self.__drag_iters = map(model.get_iter, paths) else: self.__drag_iters = [] else: uris = [model[path][0]("~uri") for path in paths] sel.set_uris(uris) self.__drag_iters = [] def __drag_data_browser_dropped(self, songs): window = qltk.get_top_parent(self) if callable(window.browser.dropped): return window.browser.dropped(self, songs) else: return False def __drag_data_received(self, view, ctx, x, y, sel, info, etime, library): model = view.get_model() if info == DND_QL: filenames = sel.get_data().split("\x00") move = (Gtk.drag_get_source_widget(ctx) == view) elif info == DND_URI_LIST: def to_filename(s): try: return URI(s).filename except ValueError: return None filenames = filter(None, map(to_filename, sel.get_uris())) move = False else: Gtk.drag_finish(ctx, False, False, etime) return to_add = [] for filename in filenames: if filename not in library.librarian: library.add_filename(filename) elif filename not in library: to_add.append(library.librarian[filename]) library.add(to_add) songs = filter(None, map(library.get, filenames)) if not songs: Gtk.drag_finish(ctx, bool(not filenames), False, etime) return if not self.__drop_by_row: success = self.__drag_data_browser_dropped(songs) Gtk.drag_finish(ctx, success, False, etime) return try: path, position = view.get_dest_row_at_pos(x, y) except TypeError: path = max(0, len(model) - 1) position = Gtk.TreeViewDropPosition.AFTER if move and Gtk.drag_get_source_widget(ctx) == view: iter = model.get_iter(path) # model can't be empty, we're moving if position in (Gtk.TreeViewDropPosition.BEFORE, Gtk.TreeViewDropPosition.INTO_OR_BEFORE): while self.__drag_iters: model.move_before(self.__drag_iters.pop(0), iter) else: while self.__drag_iters: model.move_after(self.__drag_iters.pop(), iter) Gtk.drag_finish(ctx, True, False, etime) else: song = songs.pop(0) try: iter = model.get_iter(path) except ValueError: iter = model.append(row=[song]) # empty model else: if position in (Gtk.TreeViewDropPosition.BEFORE, Gtk.TreeViewDropPosition.INTO_OR_BEFORE): iter = model.insert_before(iter, [song]) else: iter = model.insert_after(iter, [song]) for song in songs: iter = model.insert_after(iter, [song]) Gtk.drag_finish(ctx, True, move, etime) def __filter_on(self, header, songs, browser): if not browser: return # Fall back to the playing song if songs is None: if app.player.song: songs = [app.player.song] else: return browser.filter_on(songs, header) def __custom_sort(self, *args): sd = SortDialog(qltk.get_top_parent(self)) if sd.run() == Gtk.ResponseType.OK: # sort_keys yields a list of pairs (sort header, order) headers = sd.sort_key if not headers: return # from this, we have to construct a comparison function for sort def _get_key(song, tag): if tag.startswith("~#") and "~" not in tag[2:]: return song(tag) return human_sort_key(song(tag)) def comparer(x, y): for (h, o) in headers: c = cmp(_get_key(x, h), _get_key(y, h)) if c == 0: continue if o != Gtk.SortType.ASCENDING: c *= -1 return c return 0 songs = self.get_songs() songs.sort(cmp=comparer) self.set_songs(songs, sorted=True) sd.hide() def __button_press(self, view, event, librarian): if event.button != 1: return x, y = map(int, [event.x, event.y]) try: path, col, cellx, celly = view.get_path_at_pos(x, y) except TypeError: return True if event.window != self.get_bin_window(): return False if col.header_name == "~#rating": if not config.getboolean("browsers", "rating_click"): return song = view.get_model()[path][0] l = Gtk.Label() l.show() l.set_text(util.format_rating(util.RATING_PRECISION, blank=False)) width = l.get_preferred_size()[1].width l.destroy() if not width: return False count = int(float(cellx - 5) / width) + 1 rating = max(0.0, min(1.0, count * util.RATING_PRECISION)) if (rating <= util.RATING_PRECISION and song("~#rating") == util.RATING_PRECISION): rating = 0 self.__set_rating(rating, [song], librarian) def __set_rating(self, value, songs, librarian): count = len(songs) if (count > 1 and config.getboolean("browsers", "rating_confirm_multiple")): dialog = ConfirmRateMultipleDialog(self, count, value) if dialog.run() != Gtk.ResponseType.YES: return for song in songs: song["~#rating"] = value librarian.changed(songs) def __key_press(self, songlist, event, librarian): if event.string in ['0', '1', '2', '3', '4']: rating = min(1.0, int(event.string) * util.RATING_PRECISION) self.__set_rating(rating, self.get_selected_songs(), librarian) return True elif qltk.is_accel(event, "<ctrl>Return") or \ qltk.is_accel(event, "<ctrl>KP_Enter"): self.__enqueue(self.get_selected_songs()) return True elif qltk.is_accel(event, "<control>F"): self.emit('start-interactive-search') return True return False def __enqueue(self, songs): songs = filter(lambda s: s.can_add, songs) if songs: from quodlibet import app app.window.playlist.enqueue(songs) def __redraw_current(self, player, song=None): model = self.model iter_ = model.current_iter if iter_: path = model.get_path(iter_) model.row_changed(path, iter_) def __columns_changed(self, *args): headers = map(lambda h: h.header_name, self.get_columns()) SongList.set_all_column_headers(headers) SongList.headers = headers @classmethod def set_all_column_headers(cls, headers): config.set_columns(headers) try: headers.remove("~current") except ValueError: pass cls.headers = headers for listview in cls.instances(): listview.set_column_headers(headers) star = list(Query.STAR) for header in headers: if "<" in header: try: tags = Pattern(header).tags except ValueError: continue else: tags = util.tagsplit(header) for tag in tags: if not tag.startswith("~#") and tag not in star: star.append(tag) SongList.star = star def get_sort_by(self): for header in self.get_columns(): if header.get_sort_indicator(): tag = header.header_name sort = header.get_sort_order() return (tag, sort == Gtk.SortType.DESCENDING) else: return "", False def is_sorted(self): return max([c.get_sort_indicator() for c in self.get_columns()] or [0]) # Resort based on the header clicked. def set_sort_by(self, header, tag=None, order=None, refresh=True): if header and tag is None: tag = header.header_name rev = False for h in self.get_columns(): if h.header_name == tag: if order is None: s = header.get_sort_order() if (not header.get_sort_indicator() or s == Gtk.SortType.DESCENDING): s = Gtk.SortType.ASCENDING else: s = Gtk.SortType.DESCENDING else: if order: s = Gtk.SortType.DESCENDING else: s = Gtk.SortType.ASCENDING rev = h.get_sort_indicator() h.set_sort_indicator(True) h.set_sort_order(s) else: h.set_sort_indicator(False) if refresh: songs = self.get_songs() if rev: # python sort is faster if it's presorted. songs.reverse() self.set_songs(songs) def set_sort_by_tag(self, tag, order=None): for h in self.get_columns(): name = h.header_name if self.__get_sort_tag(name) == tag: if order: s = Gtk.SortType.DESCENDING else: s = Gtk.SortType.ASCENDING h.set_sort_order(s) h.set_sort_indicator(True) else: h.set_sort_indicator(False) def set_model(self, model): super(SongList, self).set_model(model) self.model = model self.set_search_column(0) def get_songs(self): try: return self.get_model().get() except AttributeError: return [] # model is None def __get_sort_tag(self, tag): replace_order = { "~#track": "", "~#disc": "", "~length": "~#length" } if tag == "~title~version": tag = "title" elif tag == "~album~discsubtitle": tag = "album" if tag.startswith("<"): for key, value in replace_order.iteritems(): tag = tag.replace("<%s>" % key, "<%s>" % value) tag = Pattern(tag).format else: tags = util.tagsplit(tag) sort_tags = [] for tag in tags: tag = replace_order.get(tag, tag) tag = TAG_TO_SORT.get(tag, tag) if tag not in sort_tags: sort_tags.append(tag) if len(sort_tags) > 1: tag = "~" + "~".join(sort_tags) return tag def add_songs(self, songs): """Add songs to the list in the right order and position""" if not songs: return model = self.get_model() if not len(model): self.set_songs(songs) return tag, reverse = self.get_sort_by() tag = self.__get_sort_tag(tag) if not self.is_sorted(): self.set_sort_by_tag(tag, reverse) # FIXME: Replace with something fast old_songs = self.get_songs() old_songs.extend(songs) if not tag: old_songs.sort(key=lambda s: s.sort_key, reverse=reverse) else: sort_func = AudioFile.sort_by_func(tag) old_songs.sort(key=lambda s: s.sort_key) old_songs.sort(key=sort_func, reverse=reverse) for index, song in sorted(zip(map(old_songs.index, songs), songs)): model.insert(index, row=[song]) def set_songs(self, songs, sorted=False): model = self.get_model() if not sorted: tag, reverse = self.get_sort_by() tag = self.__get_sort_tag(tag) #try to set a sort indicator that matches the default order if not self.is_sorted(): self.set_sort_by_tag(tag, reverse) if not tag: songs.sort(key=lambda s: s.sort_key, reverse=reverse) else: sort_func = AudioFile.sort_by_func(tag) songs.sort(key=lambda s: s.sort_key) songs.sort(key=sort_func, reverse=reverse) else: self.set_sort_by(None, refresh=False) # Doing set_model(None) resets the sort indicator, so we need to # remember it before doing that. sorts = map(Gtk.TreeViewColumn.get_sort_indicator, self.get_columns()) self.set_model(None) model.set(songs) self.set_model(model) map(Gtk.TreeViewColumn.set_sort_indicator, self.get_columns(), sorts) # the song selection has queued a change now, cancel that and # pass the songs manually self.info._update_songs(songs) def get_selected_songs(self): songs = [] def func(model, path, iter_, user_data): songs.append(model.get_value(iter_, 0)) selection = self.get_selection() selection.selected_foreach(func, None) return songs def __song_updated(self, librarian, songs): """Only update rows that are currently displayed. Warning: This makes the row-changed signal useless.""" #pygtk 2.12: prevent invalid ranges or GTK asserts if not self.get_realized() or \ self.get_path_at_pos(0, 0) is None: return vrange = self.get_visible_range() if vrange is None: return (start,), (end,) = vrange model = self.get_model() for path in xrange(start, end + 1): row = model[path] if row[0] in songs: model.row_changed(row.path, row.iter) def __song_added(self, librarian, songs): window = qltk.get_top_parent(self) filter_ = window.browser.active_filter if callable(filter_): self.add_songs(filter(filter_, songs)) def __song_removed(self, librarian, songs): # The selected songs are removed from the library and should # be removed from the view. if not len(self.model): return songs = set(songs) # search in the selection first # speeds up common case: select songs and remove them model, rows = self.get_selection().get_selected_rows() rows = rows or [] iters = [model[r].iter for r in rows if model[r][0] in songs] # if not all songs were in the selection, search the whole view if len(iters) != len(songs): iters = model.find_all(songs) self.remove_iters(iters) def __song_properties(self, librarian): model, rows = self.get_selection().get_selected_rows() if rows: songs = [model[row][0] for row in rows] else: from quodlibet import app if app.player.song: songs = [app.player.song] else: return SongProperties(librarian, songs, parent=self) def __information(self, librarian): model, rows = self.get_selection().get_selected_rows() if rows: songs = [model[row][0] for row in rows] else: from quodlibet import app if app.player.song: songs = [app.player.song] else: return Information(librarian, songs, self) # Build a new filter around our list model, set the headers to their # new values. def set_column_headers(self, headers): if len(headers) == 0: return self.handler_block(self.__csig) old_sort = self.is_sorted() and self.get_sort_by() map(self.remove_column, self.get_columns()) if self.CurrentColumn is not None: self.append_column(self.CurrentColumn()) for i, t in enumerate(headers): if t in ["tracknumber", "discnumber", "language"]: column = self.TextColumn(t) elif t in ["~#added", "~#mtime", "~#lastplayed", "~#laststarted"]: column = self.DateColumn(t) elif t in ["~length", "~#length"]: column = self.LengthColumn() elif t == "~#filesize": column = self.FilesizeColumn() elif t in ["~rating", "~#rating"]: column = self.RatingColumn() elif t.startswith("~#"): column = self.NumericColumn(t) elif t in FILESYSTEM_TAGS: column = self.FSColumn(t) elif t.startswith("<"): column = self.PatternColumn(t) elif "~" not in t and t != "title": column = self.NonSynthTextColumn(t) else: column = self.WideTextColumn(t) column.connect('clicked', self.set_sort_by) column.connect('button-press-event', self.__showmenu) column.connect('popup-menu', self.__showmenu) column.set_reorderable(True) self.append_column(column) if old_sort: header, order = old_sort self.set_sort_by(None, header, order, False) self.handler_unblock(self.__csig) def __getmenu(self, column): menu = Gtk.Menu() menu.connect_object('selection-done', Gtk.Menu.destroy, menu) current = SongList.headers[:] current_set = set(current) def tag_title(tag): if tag.startswith("<"): return util.pattern(tag) return util.tag(tag) current = zip(map(tag_title, current), current) def add_header_toggle(menu, (header, tag), active, column=column): item = Gtk.CheckMenuItem(header) item.tag = tag item.set_active(active) item.connect('activate', self.__toggle_header_item, column) item.show() item.set_tooltip_text(tag) menu.append(item) for header in current: add_header_toggle(menu, header, True) sep = SeparatorMenuItem() sep.show() menu.append(sep) trackinfo = """title genre ~title~version ~#track ~#playcount ~#skipcount ~#rating ~#length""".split() peopleinfo = """artist ~people performer arranger author composer conductor lyricist originalartist""".split() albuminfo = """album ~album~discsubtitle labelid ~#disc ~#discs ~#tracks albumartist""".split() dateinfo = """date originaldate recordingdate ~#laststarted ~#lastplayed ~#added ~#mtime""".split() fileinfo = """~format ~#bitrate ~#filesize ~filename ~basename ~dirname ~uri""".split() copyinfo = """copyright organization location isrc contact website""".split() all_headers = reduce(lambda x, y: x + y, [trackinfo, peopleinfo, albuminfo, dateinfo, fileinfo, copyinfo]) for name, group in [ (_("All _Headers"), all_headers), (_("_Track Headers"), trackinfo), (_("_Album Headers"), albuminfo), (_("_People Headers"), peopleinfo), (_("_Date Headers"), dateinfo), (_("_File Headers"), fileinfo), (_("_Production Headers"), copyinfo), ]: item = Gtk.MenuItem(name, use_underline=True) item.show() menu.append(item) submenu = Gtk.Menu() item.set_submenu(submenu) for header in sorted(zip(map(util.tag, group), group)): add_header_toggle(submenu, header, header[1] in current_set) sep = SeparatorMenuItem() sep.show() menu.append(sep) b = Gtk.MenuItem(_("Custom _Sort..."), use_underline=True) menu.append(b) b.show() b.connect('activate', self.__custom_sort) custom = Gtk.MenuItem(_("_Customize Headers..."), use_underline=True) custom.show() custom.connect('activate', self.__add_custom_column) menu.append(custom) return menu def __toggle_header_item(self, item, column): headers = SongList.headers[:] if item.get_active(): try: headers.insert(self.get_columns().index(column), item.tag) except ValueError: headers.append(item.tag) else: try: headers.remove(item.tag) except ValueError: pass SongList.set_all_column_headers(headers) SongList.headers = headers def __add_custom_column(self, item): # Prefs has to import SongList, so do this here to avoid # a circular import. from quodlibet.qltk.prefs import PreferencesWindow PreferencesWindow(self).set_page("songlist") def __showmenu(self, column, event=None): time = Gtk.get_current_event_time() if event is not None and event.button != 3: return if event: self.__getmenu(column).popup(None, None, None, None, event.button, time) return True widget = column.get_widget() return qltk.popup_menu_under_widget(self.__getmenu(column), widget, 3, time) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/ccb.py���������������������������������������������������������������0000644�0001750�0001750�00000003255�12173212464�020005� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Joe Wreschnig, Michael Urman # 2012 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from quodlibet import config class ConfigCheckButton(Gtk.CheckButton): """A CheckButton that connects to QL's config module, and toggles a boolean configuration value when it is toggled. It is initialised to the current config value if `populate` is set True.""" def __init__(self, label, section, option, populate=False): super(ConfigCheckButton, self).__init__( label=label, use_underline=True) if populate: self.set_active(config.getboolean(section, option)) self.connect('toggled', ConfigCheckButton.__toggled, section, option) def __toggled(self, section, option): config.set(section, option, str(bool(self.get_active())).lower()) class ConfigCheckMenuItem(Gtk.CheckMenuItem): """A CheckMenuItem that connects to QL's config module, and toggles a boolean configuration value when it is toggled. It is initialised to the current config value if `populate` is set True.""" def __init__(self, label, section, option, populate=False): super(ConfigCheckMenuItem, self).__init__( label=label, use_underline=True) if populate: self.set_active(config.getboolean(section, option)) self.connect('toggled', ConfigCheckMenuItem.__toggled, section, option) def __toggled(self, section, option): config.set(section, option, str(bool(self.get_active())).lower()) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/lyrics.py������������������������������������������������������������0000644�0001750�0001750�00000011363�12173212464�020562� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Eduardo Gonzalez, Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation # FIXME: # - Too many buttons -- saving should be automatic? # - Make purpose of 'Add' button clearer. # - Indicate when the match was fuzzy in the buffer text. import os import threading import urllib from gi.repository import Gtk, GLib from quodlibet import const from quodlibet import qltk from quodlibet import util class LyricsPane(Gtk.VBox): def __init__(self, song): # Commented code in this method is due to Lyric Wiki's disappearance. # See issue 273. super(LyricsPane, self).__init__(spacing=12) self.set_border_width(12) view = Gtk.TextView() sw = Gtk.ScrolledWindow() sw.add(view) refresh = qltk.Button(_("_Download"), Gtk.STOCK_CONNECT) save = Gtk.Button(stock=Gtk.STOCK_SAVE) delete = Gtk.Button(stock=Gtk.STOCK_DELETE) add = Gtk.Button(stock=Gtk.STOCK_EDIT) view.set_wrap_mode(Gtk.WrapMode.WORD) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) lyricname = song.lyric_filename buffer = view.get_buffer() refresh.connect('clicked', self.__refresh, add, buffer, song) save.connect('clicked', self.__save, lyricname, buffer, delete) delete.connect('clicked', self.__delete, lyricname, save) add.connect('clicked', self.__add, song) sw.set_shadow_type(Gtk.ShadowType.IN) self.pack_start(sw, True, True, 0) bbox = Gtk.HButtonBox() bbox.pack_start(save, True, True, 0) bbox.pack_start(delete, True, True, 0) #bbox.pack_start(refresh, True, True, 0) bbox.pack_start(add, True, True, 0) self.pack_start(bbox, False, True, 0) save.set_sensitive(False) add.set_sensitive(True) if os.path.exists(lyricname): buffer.set_text(file(lyricname).read()) else: #buffer.set_text(_("No lyrics found.\n\nYou can click the " # "Download button to have Quod Libet search " # "for lyrics online. You can also enter them " # "yourself and click save.")) buffer.set_text(_("No lyrics found for this song.")) buffer.connect_object('changed', save.set_sensitive, True) def __add(self, add, song): artist = song.comma('artist').encode('utf-8') util.website("http://lyricwiki.org/%s" % (urllib.quote(artist))) def __refresh(self, refresh, add, buffer, song): buffer.set_text(_("Searching for lyrics...")) refresh.set_sensitive(False) thread = threading.Thread( target=self.__search, args=(song, buffer, refresh, add)) thread.setDaemon(True) thread.start() def __search(self, song, buffer, refresh, add): artist = song.comma("artist") title = song.comma("title") try: sock = urllib.urlopen( "http://lyricwiki.org/api.php?" "client=QuodLibet&func=getSong&artist=%s&song=%s&fmt=text" % ( urllib.quote(artist.encode('utf-8')), urllib.quote(title.encode('utf-8')))) text = sock.read() except Exception, err: try: err = err.strerror.decode(const.ENCODING, 'replace') except: err = _("Unable to download lyrics.") GLib.idle_add(buffer.set_text, err) return sock.close() if text == 'Not found': GLib.idle_add( buffer.set_text, _("No lyrics found for this song.")) return else: GLib.idle_add(buffer.set_text, text) GLib.idle_add(refresh.set_sensitive, True) def __save(self, save, lyricname, buffer, delete): try: os.makedirs(os.path.dirname(lyricname)) except EnvironmentError, err: pass try: f = file(lyricname, "w") except EnvironmentError, err: print_w(err.strerror.decode(const.ENCODING, "replace")) else: start, end = buffer.get_bounds() f.write(buffer.get_text(start, end, True)) f.close() delete.set_sensitive(True) save.set_sensitive(False) def __delete(self, delete, lyricname, save): try: os.unlink(lyricname) except EnvironmentError: pass lyricname = os.path.dirname(lyricname) try: os.rmdir(lyricname) except EnvironmentError: pass delete.set_sensitive(False) save.set_sensitive(True) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/dbusmmkey.py���������������������������������������������������������0000644�0001750�0001750�00000011666�12173212464�021263� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2007 Ronny Haryanto <ronny at haryan.to> # 2011,2012 Christoph Reiter <christoph.reiter@gmx.at> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. import time import dbus from gi.repository import GObject class DBusMMKey(GObject.GObject): DBUS_NAME = "org.gnome.SettingsDaemon" # Work around the gnome-settings-daemon dbus interface # changing between 2.20 and 2.22 by connecting to both # the old and new object. DBUS_IFACES = [{"path": "/org/gnome/SettingsDaemon", "interface": "org.gnome.SettingsDaemon"}, {"path": "/org/gnome/SettingsDaemon/MediaKeys", "interface": "org.gnome.SettingsDaemon.MediaKeys"}] __gsignals__ = { 'action': (GObject.SignalFlags.RUN_LAST, None, (str,)), } @classmethod def is_active(cls): """If the gsd plugin is active atm""" bus = dbus.Bus(dbus.Bus.TYPE_SESSION) # FIXME: check if the media-keys plugin is active return bus.name_has_owner(cls.DBUS_NAME) def __init__(self, window, name): super(DBusMMKey, self).__init__() self.__interface = None self.__watch = None self.__grab_time = -1 self.__name = name self.__key_pressed_sig = None self.__grab() self.__enable_watch() self.__focus_sig = window.connect("notify::is-active", self.__focus_event) window.connect("destroy", self.__destroy) def __destroy(self, window): self.__disable_watch() self.__release() window.disconnect(self.__focus_sig) def __update_interface(self): """If __interface is None, set a proxy interface object and connect to the key pressed signal.""" if self.__interface: return self.__interface bus = dbus.Bus(dbus.Bus.TYPE_SESSION) for desc in self.DBUS_IFACES: try: obj = bus.get_object(self.DBUS_NAME, desc["path"]) iface = dbus.Interface(obj, desc["interface"]) # try to call a method to test the interface iface.ReleaseMediaPlayerKeys(self.__name) except dbus.DBusException: pass else: self.__key_pressed_sig = iface.connect_to_signal( "MediaPlayerKeyPressed", self.__key_pressed) self.__interface = iface break return self.__interface def __enable_watch(self): """Enable events for dbus name owner change""" if self.__watch: return bus = dbus.Bus(dbus.Bus.TYPE_SESSION) # This also triggers for existing name owners self.__watch = bus.watch_name_owner(self.DBUS_NAME, self.__owner_changed) def __disable_watch(self): """Disable name owner change events""" if self.__watch: self.__watch.cancel() self.__watch = None def __owner_changed(self, owner): """This gets called when the owner of the dbus name changes so we can handle gnome-settings-daemon restarts.""" if not owner: # owner gone, remove the signal matches/interface etc. self.__release() elif not self.__interface: # new owner, get a new interface object and # resend the last grab event self.__grab(update=False) def __key_pressed(self, application, action): if application != self.__name: return self.emit("action", action) def __grab(self, update=True): """Tells gsd that QL started or got the focus. update: whether to send the current time or the last one""" if update: # so this breaks every 50 days.. ok.. t = int((time.time() * 1000)) & 0xFFFFFFFF self.__grab_time = dbus.UInt32(t) elif self.__grab_time < 0: # can not send the last event if there was none return iface = self.__update_interface() if not iface: return try: iface.GrabMediaPlayerKeys(self.__name, self.__grab_time) except dbus.DBusException: pass def __release(self): """Tells gsd that we don't want events anymore and removes all signal matches""" if self.__key_pressed_sig: self.__key_pressed_sig.remove() self.__key_pressed_sig = None if self.__interface: try: self.__interface.ReleaseMediaPlayerKeys(self.__name) except dbus.DBusException: pass self.__interface = None def __focus_event(self, window, param): if window.get_property(param.name): self.__grab() ��������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/searchbar.py���������������������������������������������������������0000644�0001750�0001750�00000016462�12173213426�021213� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2010-2011 Christoph Reiter, Steven Robertson # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from gi.repository import Gtk, GObject, GLib from quodlibet import config from quodlibet import const from quodlibet.parse import Query from quodlibet.qltk.cbes import ComboBoxEntrySave from quodlibet.qltk.x import Button from quodlibet.util import limit_songs class SearchBarBox(Gtk.HBox): """ A search bar widget for inputting queries. signals: query-changed - a parsable query string focus-out - If the widget gets focused while being focused (usually for focusing the songlist) """ __gsignals__ = { 'query-changed': ( GObject.SignalFlags.RUN_LAST, None, (object,)), 'focus-out': (GObject.SignalFlags.RUN_LAST, None, ()), } timeout = 400 def __init__(self, filename=None, completion=None, accel_group=None): super(SearchBarBox, self).__init__(spacing=6) if filename is None: filename = os.path.join(const.USERDIR, "lists", "queries") combo = ComboBoxEntrySave(filename, count=8, validator=Query.is_valid_color, title=_("Saved Searches"), edit_title=_("Edit saved searches...")) self.__refill_id = None self.__combo = combo entry = combo.get_child() self.__entry = entry if completion: entry.set_completion(completion) self.connect('destroy', lambda w: w.__remove_timeout()) self.__sig = combo.connect('text-changed', self.__text_changed) entry.connect('clear', self.__filter_changed) entry.connect('backspace', self.__text_changed) entry.connect('populate-popup', self.__menu) entry.connect('activate', self.__filter_changed) entry.connect('activate', self.__save_search) entry.connect('focus-out-event', self.__save_search) entry.set_placeholder_text(_("Search")) entry.set_tooltip_text(_("Search your library, " "using free text or QL queries")) combo.enable_clear_button() self.pack_start(combo, True, True, 0) if accel_group: key, mod = Gtk.accelerator_parse("<ctrl>L") accel_group.connect(key, mod, 0, lambda *x: entry.mnemonic_activate(True)) self.show_all() def __inhibit(self): self.__combo.handler_block(self.__sig) def __uninhibit(self): self.__combo.handler_unblock(self.__sig) def set_text(self, text): # remove the timeout self.__remove_timeout() # deactivate all signals and change the entry text self.__inhibit() self.__entry.set_text(text) self.__uninhibit() def get_text(self): return self.__entry.get_text().decode("utf-8") def changed(self): """Triggers a filter-changed signal if the current text is a parsable query""" self.__filter_changed() def __menu(self, entry, menu): self.show_menu(menu) def show_menu(self, menu): """Overwrite this method for providing a menu""" pass def __mnemonic_activate(self, label, group_cycling): widget = label.get_mnemonic_widget() if widget.is_focus(): self.emit('focus-out') return True def __save_search(self, entry, *args): # only save the query on focus-out if eager_search is turned on if args and not config.getboolean('settings', 'eager_search'): return text = entry.get_text().decode('utf-8').strip() if text and Query.is_parsable(text): # Adding the active text to the model triggers a changed signal # (get_active is no longer -1), so inhibit self.__inhibit() self.__combo.prepend_text(text) self.__combo.write() self.__uninhibit() def __remove_timeout(self): if self.__refill_id is not None: GLib.source_remove(self.__refill_id) self.__refill_id = None def __filter_changed(self, *args): self.__remove_timeout() text = self.__entry.get_text().decode('utf-8') if Query.is_parsable(text): self.__refill_id = GLib.idle_add( self.emit, 'query-changed', text) def __text_changed(self, *args): # the combobox has an active entry selected -> no timeout # todo: we need a timeout when the selection changed because # of keyboard input (up/down arrows) if self.__combo.get_active() != -1: self.__filter_changed() return if not config.getboolean('settings', 'eager_search'): return # remove the timeout self.__remove_timeout() # parse and new timeout text = self.__entry.get_text().decode('utf-8') if Query.is_parsable(text): self.__refill_id = GLib.timeout_add( self.timeout, self.__filter_changed) class LimitSearchBarBox(SearchBarBox): """A version of `SearchBarBox` that allows specifying the limiting and weighting of a search.""" class Limit(Gtk.HBox): __gsignals__ = { 'changed': (GObject.SignalFlags.RUN_LAST, None, ()), } def __init__(self): super(LimitSearchBarBox.Limit, self).__init__(spacing=3) label = Gtk.Label(label=_("_Limit:")) self.pack_start(label, True, True, 0) self.__limit = limit = Gtk.SpinButton() self.__limit.connect("value-changed", self.__changed) limit.set_numeric(True) limit.set_range(0, 9999) limit.set_increments(5, 100) label.set_mnemonic_widget(limit) label.set_use_underline(True) self.pack_start(limit, True, True, 0) self.__weight = Gtk.CheckButton(_("_Weight"), use_underline=True) self.__weight.connect("toggled", self.__changed) self.pack_start(self.__weight, True, True, 0) map(lambda w: w.show(), self.get_children()) def __changed(self, *args): self.emit("changed") @property def value(self): return self.__limit.get_value_as_int() @property def weighted(self): return self.__weight.get_active() def __init__(self, show_limit=False, *args, **kwargs): super(LimitSearchBarBox, self).__init__(*args, **kwargs) self.__limit = self.Limit() self.pack_start(self.__limit, False, True, 0) self.__limit.set_no_show_all(not show_limit) self.__limit.connect("changed", self.__limit_changed) def __limit_changed(self, *args): self.changed() def limit(self, songs): if self.__limit.get_visible(): return limit_songs(songs, self.__limit.value, self.__limit.weighted) else: return songs def toggle_limit_widgets(self, button): """Toggles the visibility of the limit widget according to `button`""" if button.get_active(): self.__limit.show() else: self.__limit.hide() self.changed() ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/tagsfrompath.py������������������������������������������������������0000644�0001750�0001750�00000024501�12173213426�021751� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import re from gi.repository import Gtk from quodlibet import config from quodlibet import const from quodlibet import qltk from quodlibet import util from quodlibet.qltk._editpane import EditPane, FilterCheckButton from quodlibet.qltk._editpane import EditingPluginHandler from quodlibet.qltk.wlw import WritingWindow class TagsFromPattern(object): def __init__(self, pattern): self.compile(pattern) def compile(self, pattern): self.headers = [] self.slashes = len(pattern) - len(pattern.replace(os.path.sep, '')) + 1 self.pattern = None # patterns look like <tagname> non regexy stuff <tagname> ... pieces = re.split(r'(<[A-Za-z0-9~_]+>)', pattern) override = {'<tracknumber>': r'\d\d?', '<discnumber>': r'\d\d??'} dummies_found = 0 for i, piece in enumerate(pieces): if not piece: continue if piece[0] + piece[-1] == '<>': piece = piece.lower() # canonicalize to lowercase tag names if "~" in piece: dummies_found += 1 piece = "<QUOD_LIBET_DUMMY_%d>" % dummies_found pieces[i] = '(?P%s%s)' % (piece, override.get(piece, '.+?')) if "QUOD_LIBET" not in piece: self.headers.append(piece[1:-1].encode("ascii", "replace")) else: pieces[i] = re.escape(piece) # some slight magic to anchor searches "nicely" # nicely means if it starts with a <tag>, anchor with a / # if it ends with a <tag>, anchor with .xxx$ # but if it's a <tagnumber>, don't bother as \d+ is sufficient # and if it's not a tag, trust the user if pattern.startswith('<') and not pattern.startswith('<tracknumber>')\ and not pattern.startswith('<discnumber>'): pieces.insert(0, re.escape(os.path.sep)) if pattern.endswith('>') and not pattern.endswith('<tracknumber>')\ and not pattern.endswith('<discnumber>'): pieces.append(r'(?:\.[A-Za-z0-9_+]+)$') self.pattern = re.compile(''.join(pieces)) def match(self, song): if isinstance(song, dict): song = util.fsdecode(song['~filename']) # only match on the last n pieces of a filename, dictated by pattern # this means no pattern may effectively cross a /, despite .* doing so sep = os.path.sep matchon = sep + sep.join(song.split(sep)[-self.slashes:]) match = self.pattern.search(matchon) # dicts for all! if match is None: return {} else: return match.groupdict() class UnderscoresToSpaces(FilterCheckButton): _label = _("Replace _underscores with spaces") _section = "tagsfrompath" _key = "underscores" _order = 1.0 def filter(self, tag, value): return value.replace("_", " ") class TitleCase(FilterCheckButton): _label = _("_Title-case tags") _section = "tagsfrompath" _key = "titlecase" _order = 1.1 def filter(self, tag, value): return util.title(value) class SplitTag(FilterCheckButton): _label = _("Split into multiple _values") _section = "tagsfrompath" _key = "split" _order = 1.2 def filter(self, tag, value): spls = config.get("editing", "split_on").decode('utf-8', 'replace') spls = spls.split() return "\n".join(util.split_value(value, spls)) class TagsFromPathPluginHandler(EditingPluginHandler): from quodlibet.plugins.editing import TagsFromPathPlugin Kind = TagsFromPathPlugin class TagsFromPath(EditPane): title = _("Tags From Path") FILTERS = [UnderscoresToSpaces, TitleCase, SplitTag] handler = TagsFromPathPluginHandler() def __init__(self, parent, library): super(TagsFromPath, self).__init__( const.TBP, const.TBP_EXAMPLES.split("\n")) vbox = self.get_children()[2] addreplace = Gtk.ComboBoxText() addreplace.append_text(_("Tags replace existing ones")) addreplace.append_text(_("Tags are added to existing ones")) addreplace.set_active(config.getboolean("tagsfrompath", "add")) addreplace.connect('changed', self.__add_changed) vbox.pack_start(addreplace, True, True, 0) addreplace.show() self.preview.connect_object('clicked', self.__preview, None) parent.connect_object('changed', self.__class__.__preview, self) # Save changes self.save.connect_object('clicked', self.__save, addreplace, library) def __add_changed(self, combo): config.set("tagsfrompath", "add", str(bool(combo.get_active()))) def __preview(self, songs): if songs is None: songs = [row[0] for row in (self.view.get_model() or [])] if songs: pattern_text = self.combo.get_child().get_text().decode("utf-8") else: pattern_text = "" try: pattern = TagsFromPattern(pattern_text) except re.error: qltk.ErrorMessage( self, _("Invalid pattern"), _("The pattern\n\t<b>%s</b>\nis invalid. " "Possibly it contains the same tag twice or " "it has unbalanced brackets (< / >).") % ( util.escape(pattern_text))).run() return else: if pattern_text: self.combo.prepend_text(pattern_text) self.combo.write(const.TBP) invalid = [] for header in pattern.headers: if not min([song.can_change(header) for song in songs]): invalid.append(header) if len(invalid) and songs: if len(invalid) == 1: title = _("Invalid tag") msg = _("Invalid tag <b>%s</b>\n\nThe files currently" " selected do not support editing this tag.") else: title = _("Invalid tags") msg = _("Invalid tags <b>%s</b>\n\nThe files currently" " selected do not support editing these tags.") qltk.ErrorMessage( self, title, msg % ", ".join(invalid)).run() pattern = TagsFromPattern("") self.view.set_model(None) model = Gtk.ListStore( object, str, *([str] * len(pattern.headers))) for col in self.view.get_columns(): self.view.remove_column(col) col = Gtk.TreeViewColumn(_('File'), Gtk.CellRendererText(), text=1) col.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) self.view.append_column(col) for i, header in enumerate(pattern.headers): render = Gtk.CellRendererText() render.set_property('editable', True) render.connect('edited', self.__row_edited, model, i + 2) escaped_title = header.replace("_", "__") col = Gtk.TreeViewColumn(escaped_title, render, text=i + 2) col.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) self.view.append_column(col) for song in songs: basename = util.fsdecode(song("~basename")) row = [song, basename] match = pattern.match(song) for h in pattern.headers: text = match.get(h, '') for f in self.filters: if f.active: text = f.filter(h, text) if not song.multiple_values: text = u", ".join(text.split("\n")) row.append(text) model.append(row=row) # save for last to potentially save time if songs: self.view.set_model(model) self.preview.set_sensitive(False) self.save.set_sensitive(len(pattern.headers) > 0) def __save(self, addreplace, library): pattern_text = self.combo.get_child().get_text().decode('utf-8') pattern = TagsFromPattern(pattern_text) model = self.view.get_model() add = bool(addreplace.get_active()) win = WritingWindow(self, len(model)) was_changed = [] for row in (model or []): song = row[0] changed = False if not song.valid() and not qltk.ConfirmAction( self, _("Tag may not be accurate"), _("<b>%s</b> changed while the program was running. " "Saving without refreshing your library may " "overwrite other changes to the song.\n\n" "Save this song anyway?") % ( util.escape(util.fsdecode(song("~basename")))) ).run(): break for i, h in enumerate(pattern.headers): if row[i + 2]: text = row[i + 2].decode("utf-8") if not add or h not in song or not song.multiple_values: song[h] = text changed = True else: for val in text.split("\n"): if val not in song.list(h): song.add(h, val) changed = True if changed: try: song.write() except: qltk.ErrorMessage( self, _("Unable to edit song"), _("Saving <b>%s</b> failed. The file " "may be read-only, corrupted, or you " "do not have permission to edit it.") % ( util.escape(util.fsdecode(song('~basename')))) ).run() library.reload(song, changed=was_changed) break was_changed.append(song) if win.step(): break win.destroy() library.changed(was_changed) self.save.set_sensitive(False) def __row_edited(self, renderer, path, new, model, colnum): row = model[path] if row[colnum] != new: row[colnum] = new self.preview.set_sensitive(True) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/_editpane.py���������������������������������������������������������0000644�0001750�0001750�00000014001�12173212464�021175� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2006 Joe Wreschnig, Michael Urman, Iñigo Serna # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk, GObject from quodlibet import config from quodlibet import util from quodlibet import qltk from quodlibet.plugins import PluginManager from quodlibet.qltk.cbes import ComboBoxEntrySave from quodlibet.qltk.ccb import ConfigCheckButton class EditingPluginHandler(GObject.GObject): __gsignals__ = { "changed": (GObject.SignalFlags.RUN_LAST, None, ()) } Kind = None def __init__(self): super(EditingPluginHandler, self).__init__() self.__plugins = [] @property def plugins(self): return list(self.__plugins) def plugin_handle(self, plugin): return issubclass(plugin, self.Kind) def plugin_enable(self, plugin, obj): self.__plugins.append(plugin) self.emit("changed") def plugin_disable(self, plugin): self.__plugins.remove(plugin) self.emit("changed") class FilterCheckButton(ConfigCheckButton): __gsignals__ = { "preview": (GObject.SignalFlags.RUN_LAST, None, ()) } def __init__(self): super(FilterCheckButton, self).__init__( self._label, self._section, self._key) try: self.set_active(config.getboolean(self._section, self._key)) except: pass self.connect_object('toggled', self.emit, 'preview') active = property(lambda s: s.get_active()) def filter(self, original, filename): raise NotImplementedError def filter_list(self, origs, names): return map(self.filter, origs, names) def __lt__(self, other): return (self._order, type(self).__name__) < \ (other._order, type(other).__name__) class EditPane(Gtk.VBox): @classmethod def init_plugins(cls): PluginManager.instance.register_handler(cls.handler) def __init__(self, cbes_filename, cbes_defaults): super(EditPane, self).__init__(spacing=6) self.set_border_width(12) hbox = Gtk.HBox(spacing=12) self.combo = ComboBoxEntrySave(cbes_filename, cbes_defaults, title=_("Path Patterns"), edit_title=_("Edit saved patterns...")) hbox.pack_start(self.combo, True, True, 0) self.preview = qltk.Button(_("_Preview"), Gtk.STOCK_CONVERT) hbox.pack_start(self.preview, False, True, 0) self.pack_start(hbox, False, True, 0) self.combo.get_child().connect('changed', self._changed) model = Gtk.ListStore(object, str, str) self.view = Gtk.TreeView(model) sw = Gtk.ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.IN) sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.add(self.view) self.pack_start(sw, True, True, 0) filters = [Kind() for Kind in self.FILTERS] filters.sort() vbox = Gtk.VBox() for f in filters: vbox.pack_start(f, True, True, 0) self.pack_start(vbox, False, True, 0) hb = Gtk.HBox() expander = Gtk.Expander(label=_("_More options...")) expander.set_use_underline(True) adj = Gtk.Alignment(yalign=1.0, xscale=1.0) adj.add(expander) hb.pack_start(adj, True, True, 0) # Save button self.save = Gtk.Button(stock=Gtk.STOCK_SAVE) bbox = Gtk.HButtonBox() bbox.set_layout(Gtk.ButtonBoxStyle.END) bbox.pack_start(self.save, True, True, 0) hb.pack_start(bbox, False, True, 0) self.pack_start(hb, False, True, 0) for filt in filters: filt.connect_object('preview', Gtk.Button.clicked, self.preview) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) vbox = Gtk.VBox() self.__filters = filters self.__plugins = [] self.handler.connect("changed", self.__refresh_plugins, vbox, expander) sw.add_with_viewport(vbox) self.pack_start(sw, False, True, 0) expander.connect("notify::expanded", self.__notify_expanded, sw) expander.set_expanded(False) self.show_all() self.handler.emit("changed") sw.hide() @property def filters(self): return self.__filters + self.__plugins def __refresh_plugins(self, handler, vbox, expander): instances = [] for Kind in handler.plugins: try: f = Kind() except: util.print_exc() continue else: instances.append(f) instances.sort() for child in vbox.get_children(): child.destroy() del self.__plugins[:] for f in instances: try: vbox.pack_start(f, True, True, 0) except: util.print_exc() f.destroy() else: try: f.connect_object( 'preview', Gtk.Button.clicked, self.preview) except: try: f.connect_object( 'changed', self._changed, self.combo.get_child()) except: util.print_exc() else: self.__plugins.append(f) else: self.__plugins.append(f) vbox.show_all() # Don't display the expander if there aren't any plugins. if not vbox.get_children(): expander.set_expanded(False) expander.hide() else: expander.show() def __notify_expanded(self, expander, event, vbox): vbox.set_property('visible', expander.get_property('expanded')) def _changed(self, entry): self.save.set_sensitive(False) self.preview.set_sensitive(bool(entry.get_text())) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/qltk/data_editors.py������������������������������������������������������0000644�0001750�0001750�00000027641�12173213426�021724� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012-2013 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from gi.repository import Pango from quodlibet import qltk, util from quodlibet.util.dprint import print_d from quodlibet.qltk.entry import UndoEntry, ValidatingEntry from quodlibet.qltk.views import RCMHintedTreeView, HintedTreeView from quodlibet.util.json_data import JSONObjectDict from quodlibet.qltk.getstring import GetStringDialog class JSONBasedEditor(qltk.UniqueWindow): """ Flexible editor for objects extending `JSONObject` (held in a `JSONObjectDict`) TODO: validation, especially for name. """ _WIDTH = 600 _HEIGHT = 400 def __init__(self, Prototype, values, filename, title): self.Prototype = Prototype self.current = None self.filename = filename self.input_entries = {} super(JSONBasedEditor, self).__init__() self.set_border_width(12) self.set_title(title) self.set_default_size(self._WIDTH, self._HEIGHT) self.add(Gtk.HBox(spacing=6)) self.get_child().set_homogeneous(True) self.accels = Gtk.AccelGroup() # Set up the model for this widget self.model = Gtk.ListStore(object) self._fill_values(values) # The browser for existing data self.view = view = RCMHintedTreeView(self.model) view.set_headers_visible(False) view.set_reorderable(True) view.set_rules_hint(True) render = Gtk.CellRendererText() render.set_padding(3, 6) render.props.ellipsize = Pango.EllipsizeMode.END column = Gtk.TreeViewColumn("", render) column.set_cell_data_func(render, self.__cdf) view.append_column(column) sw = Gtk.ScrolledWindow() sw.set_shadow_type(Gtk.ShadowType.IN) sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) sw.add(view) self.get_child().pack_start(sw, True, True, 0) vbox = Gtk.VBox(spacing=6) # Input for new ones. frame = self.__build_input_frame() vbox.pack_start(frame, False, True, 0) # Add context menu menu = Gtk.Menu() rem = Gtk.ImageMenuItem(Gtk.STOCK_REMOVE) keyval, mod = Gtk.accelerator_parse("Delete") rem.add_accelerator( 'activate', self.accels, keyval, mod, Gtk.AccelFlags.VISIBLE) rem.connect_object('activate', self.__remove, view) menu.append(rem) menu.show_all() view.connect('popup-menu', self.__popup, menu) view.connect('key-press-event', self.__view_key_press) self.connect_object('destroy', Gtk.Menu.destroy, menu) # New and Close buttons bbox = Gtk.HButtonBox() self.remove_but = Gtk.Button(stock=Gtk.STOCK_REMOVE) self.remove_but.set_sensitive(False) self.new_but = Gtk.Button(stock=Gtk.STOCK_NEW) self.new_but.connect('clicked', self._new_item) bbox.pack_start(self.new_but, True, True, 0) close = Gtk.Button(stock=Gtk.STOCK_CLOSE) close.connect_object('clicked', qltk.Window.destroy, self) bbox.pack_start(close, True, True, 0) align = Gtk.Alignment(yalign=1.0, xscale=1.0) align.add(bbox) vbox.pack_end(align, False, True, 0) self.get_child().pack_start(vbox, True, True, 0) # Initialise self.selection = view.get_selection() model, iter = self.selection.get_selected() self.selection.connect('changed', self.__select) self.connect('destroy', self.__finish) self.show_all() def _find(self, name): for row in self.model: if row[0].name == name: return row[0] def _new_item(self, button): current_name = name = "New %s" % self.Prototype.__name__ n = 2 while True: if self._find(current_name): current_name = "%s (%d)" % (name, n) n += 1 continue break self.model.append(row=(self.Prototype(name=current_name),)) def _new_widget(self, key, val): """ Creates a Gtk.Entry subclass appropriate for a field named `key` with value `val` """ callback = signal = None if isinstance(val, bool): entry = Gtk.CheckButton() callback = self.__toggled_widget signal = "toggled" elif isinstance(val, int): adj = Gtk.Adjustment(0, 0, 10000, 1, 10, 0) entry = Gtk.SpinButton(adjustment=adj) entry.set_numeric(True) callback = self.__changed_numeric_widget elif key.find("pattern") >= 0: print_d("Found Pattern type: %s" % key) entry = ValidatingEntry() else: entry = UndoEntry() entry.connect(signal or "changed", callback or self.__changed_widget, key) return entry def __refresh_view(self): model, iter = self.selection.get_selected() self.model.emit("row-changed", model[iter].path, iter) def __changed_widget(self, entry, key): if self.current: setattr(self.current, key, str(entry.get_text())) self.__refresh_view() def __changed_numeric_widget(self, entry, key): if self.current: setattr(self.current, key, int(entry.get_text() or 0)) self.__refresh_view() def __toggled_widget(self, entry, key): if self.current: setattr(self.current, key, bool(entry.get_active())) self.__refresh_view() def _populate_fields(self, obj): """Populates the input fields based on the `JSONData` object `obj`""" for fn, val in obj.data: widget = self.input_entries[fn] widget.set_sensitive(True) # TODO: link this logic better with the creational stuff if isinstance(val, bool): widget.set_active(val) elif isinstance(val, int): widget.set_value(int(val)) elif isinstance(val, basestring): widget.set_text(val) def __build_input_frame(self): t = Gtk.Table(2, 3) t.set_row_spacings(6) t.set_col_spacing(0, 3) t.set_col_spacing(1, 12) empty = self.Prototype("empty") i = 0 for i, (key, val) in enumerate(empty.data): field_name = key and key.replace("_", " ").title() or "(unknown)" l = Gtk.Label(label=field_name + ":") entry = self._new_widget(key, val) entry.set_sensitive(False) # Store these away in a map for later access self.input_entries[key] = entry l.set_mnemonic_widget(entry) l.set_use_underline(True) l.set_alignment(0.0, 0.5) t.attach(l, 0, 1, i, i + 1, xoptions=Gtk.AttachOptions.FILL) t.attach(entry, 1, 2, i, i + 1) frame = qltk.Frame(label=self.Prototype.__name__, child=t) self.input_entries["name"].grab_focus() return frame def _fill_values(self, data): if not data: return for (name, obj) in data.items(): self.model.prepend(row=[obj]) def _update_current(self, new_selection=None): if new_selection: self.selection = new_selection model, iter = self.selection.get_selected() if iter: self.current = model[iter][0] def __select(self, selection): self._update_current(selection) self.remove_but.set_sensitive(bool(iter)) if iter is not None: self._populate_fields(self.current) def __remove(self, view): view.remove_selection() def __popup(self, view, menu): return view.popup_menu(menu, 0, Gtk.get_current_event_time()) def __view_key_press(self, view, event): if event.keyval == Gtk.accelerator_parse("Delete")[0]: self.__remove(view) def __cdf(self, column, cell, model, iter, data): row = model[iter] obj = row[0] obj_name = util.escape(obj.name) obj_description = util.escape(str(obj)) markup = '<b>%s</b>\n%s' % (obj_name, obj_description) cell.markup = markup cell.set_property('markup', markup) def __finish(self, widget): # TODO: Warn about impending deletion of nameless items, or something all = JSONObjectDict.from_list( [row[0] for row in self.model if row[0].name]) all.save(filename=self.filename) class MultiStringEditor(qltk.UniqueWindow): """Dialog to edit a list of strings""" _WIDTH = 400 _HEIGHT = 300 def __init__(self, title, values=None): super(MultiStringEditor, self).__init__() self.data = values or [] self.set_border_width(12) self.set_title(title) self.set_default_size(self._WIDTH, self._HEIGHT) vbox = Gtk.VBox(spacing=12) hbox = Gtk.HBox(spacing=12) # Set up the model for this widget self.model = Gtk.ListStore(str) self.__fill_values() # Main view view = self.view = HintedTreeView(self.model) view.set_fixed_height_mode(True) view.set_headers_visible(False) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.IN) sw.add(view) sw.set_size_request(-1, max(sw.size_request().height, 100)) hbox.pack_start(sw, True, True, 0) self.__setup_column(view) # Context menu menu = Gtk.Menu() remove_item = Gtk.ImageMenuItem(Gtk.STOCK_REMOVE) menu.append(remove_item) menu.show_all() view.connect('popup-menu', self.__popup, menu) remove_item.connect_object('activate', self.__remove, view) # Add and Remove buttons vbbox = Gtk.VButtonBox() vbbox.set_layout(Gtk.ButtonBoxStyle.START) vbbox.set_spacing(6) add = Gtk.Button(stock=Gtk.STOCK_ADD) add.connect("clicked", self.__add) vbbox.pack_start(add, False, True, 0) remove = Gtk.Button(stock=Gtk.STOCK_REMOVE) remove.connect("clicked", self.__remove) vbbox.pack_start(remove, False, True, 0) hbox.pack_start(vbbox, False, True, 0) vbox.pack_start(hbox, True, True, 0) # Close buttons bbox = Gtk.HButtonBox() self.remove_but = Gtk.Button(stock=Gtk.STOCK_REMOVE) self.remove_but.set_sensitive(False) close = Gtk.Button(stock=Gtk.STOCK_CLOSE) close.connect_object('clicked', qltk.Window.destroy, self) bbox.set_layout(Gtk.ButtonBoxStyle.END) bbox.pack_start(close, True, True, 0) vbox.pack_start(bbox, False, True, 0) # Finish up self.add(vbox) self.show_all() def __setup_column(self, view): def cdf(column, cell, model, iter, data): row = model[iter] if row: cell.set_property('text', row[0]) render = Gtk.CellRendererText() render.set_property('ellipsize', Pango.EllipsizeMode.END) column = Gtk.TreeViewColumn(None, render) column.set_cell_data_func(render, cdf) column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) view.append_column(column) def __fill_values(self): for s in self.data: self.model.append(row=[s]) def get_strings(self): strings = [row[0] for row in self.model if row] return strings def __remove(self, *args): self.view.remove_selection() def __add(self, *args): dialog = GetStringDialog(self, _("Enter new value"), "", okbutton=Gtk.STOCK_ADD) new = dialog.run() if new: self.model.append(row=[new]) def __popup(self, view, menu): return view.popup_menu(menu, 0, Gtk.get_current_event_time()).show() �����������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/__init__.py���������������������������������������������������������������0000644�0001750�0001750�00000032546�12173213426�020046� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import __builtin__ _dummy_gettext = lambda value: value _dummy_ngettext = lambda v1, v2, count: (count == 1) and v1 or v2 __builtin__.__dict__["_"] = _dummy_gettext __builtin__.__dict__["Q_"] = _dummy_gettext __builtin__.__dict__["N_"] = _dummy_gettext __builtin__.__dict__["ngettext"] = _dummy_ngettext import gettext import locale import os import re import sys import quodlibet.const import quodlibet.util from quodlibet.util.i18n import GlibTranslations from quodlibet.util.dprint import print_, print_d, print_w, print_e from quodlibet.const import MinVersions, Version class Application(object): """A main application class for controlling the application as a whole and accessing sub-modules. window - The main window which is present as long as QL is running library - The main library (see library.SongFileLibrary) librarian - The main (and atm only) librarian (see library.SongLibrarian) player - see player._base quit() - Quit the application """ window = None library = None player = None @property def librarian(self): return self.library.librarian def quit(self): from gi.repository import GLib def idle_quit(): if self.window and not self.window.in_destruction(): self.window.destroy() # so this can be called from a signal handler and before # the main loop starts GLib.idle_add(idle_quit, priority=GLib.PRIORITY_HIGH) def show(self): from quodlibet.qltk import Window self.window.show() for window in Window.instances: window.show() def present(self): # deiconify is needed if the window is on another workspace from quodlibet.qltk import Window self.window.deiconify() self.window.present() for window in Window.instances: window.deiconify() window.present() def hide(self): from quodlibet.qltk import Window for window in Window.instances: window.hide() self.window.hide() app = Application() def _gtk_init(icon=None): import gi try: # not sure if this is available under Windows gi.require_version("GdkX11", "3.0") from gi.repository import GdkX11 except (ValueError, ImportError): pass gi.require_version("GLib", "2.0") gi.require_version("Gtk", "3.0") gi.require_version("Gdk", "3.0") gi.require_version("GObject", "2.0") gi.require_version("Pango", "1.0") gi.require_version("GdkPixbuf", "2.0") gi.require_version("Gio", "2.0") from gi.repository import Gtk, GObject, GLib # Make sure PyGObject includes support for foreign cairo structs some_window = Gtk.OffscreenWindow() some_window.show() try: some_window.get_surface() except TypeError: print_e("PyGObject is missing cairo support") exit(1) # We don't depend on Gst overrides, so make sure it's initialized. try: gi.require_version("Gst", "1.0") from gi.repository import Gst except (ValueError, ImportError): pass else: if not Gst.is_initialized(): try: ok, argv = Gst.init_check(sys.argv) except GLib.GError: print_e("Failed to initialize GStreamer") # Uninited Gst segfaults: make sure no one can use it sys.modules["gi.repository.Gst"] = None else: sys.argv = argv # some code depends on utf-8 default encoding (pygtk used to set it) reload(sys) sys.setdefaultencoding("utf-8") # blacklist some modules, simply loading can cause segfaults sys.modules["gtk"] = None sys.modules["gpod"] = None sys.modules["glib"] = None sys.modules["gobject"] = None sys.modules["gnome"] = None GObject.threads_init() theme = Gtk.IconTheme.get_default() theme.append_search_path(quodlibet.const.IMAGEDIR) if icon: Gtk.Window.set_default_icon_name(icon) def _dbus_init(): try: from dbus.mainloop.glib import DBusGMainLoop, threads_init except ImportError: try: import dbus.glib except ImportError: return else: from gi.repository import GObject GObject.threads_init() threads_init() DBusGMainLoop(set_as_default=True) def _gettext_init(): try: locale.setlocale(locale.LC_ALL, '') except locale.Error: pass unexpand = quodlibet.util.unexpand # Use the locale dir in ../build/share/locale if there is one localedir = os.path.dirname(quodlibet.const.BASEDIR) localedir = os.path.join(localedir, "build", "share", "locale") if os.path.isdir(localedir): print_d("Using local localedir: %r" % unexpand(localedir)) gettext.bindtextdomain("quodlibet", localedir) localedir = gettext.bindtextdomain("quodlibet") if os.name == "nt": import ctypes k32 = ctypes.windll.kernel32 langs = filter(None, map(locale.windows_locale.get, [k32.GetUserDefaultLCID(), k32.GetSystemDefaultLCID()])) os.environ.setdefault('LANG', ":".join(langs)) localedir = "share\\locale" try: t = gettext.translation("quodlibet", localedir, class_=GlibTranslations) except IOError: print_d("No translation found in %r" % unexpand(localedir)) t = GlibTranslations() else: print_d("Translations loaded: %r" % unexpand(t.path)) t.install(unicode=True) def set_process_title(title): """Sets process name as visible in ps or top. Requires ctypes libc and is almost certainly *nix-only. See issue 736""" if os.name == "nt": return try: import ctypes libc = ctypes.CDLL('libc.so.6') # 15 = PR_SET_NAME, apparently libc.prctl(15, title, 0, 0, 0) except: print_d("Couldn't find module libc.so.6 (ctypes). " "Not setting process title.") def _python_init(): import sys if sys.version_info < MinVersions.PYTHON: actual = Version(sys.version_info[:3]) print_w("Python %s required. %s found." % (MinVersions.PYTHON, actual)) # The default regex escaping function doesn't work for non-ASCII. # Use a blacklist of regex-specific characters instead. def re_esc(str, BAD="/.^$*+?{,\\[]|()<>#=!:"): needs_escape = lambda c: (c in BAD and "\\" + c) or c return "".join(map(needs_escape, str)) re.escape = re_esc __builtin__.__dict__["print_"] = print_ __builtin__.__dict__["print_d"] = print_d __builtin__.__dict__["print_e"] = print_e __builtin__.__dict__["print_w"] = print_w del(_dummy_gettext) del(_dummy_ngettext) _python_init() _gettext_init() def exit(status=None): """Call this to abort the startup""" from gi.repository import Gdk Gdk.notify_startup_complete() raise SystemExit(status) def init(library=None, icon=None, title=None, name=None): print_d("Entering quodlibet.init") _gtk_init(icon) _dbus_init() from gi.repository import GLib if title: GLib.set_prgname(title) set_process_title(title) # Issue 736 - set after main loop has started (gtk seems to reset it) GLib.idle_add(set_process_title, title) if name: GLib.set_application_name(name) # We already imported this, but Python is dumb and thinks we're rebinding # a local when we import it later. import quodlibet.util quodlibet.util.mkdir(quodlibet.const.USERDIR) if library: print_d("Initializing main library (%s)" % ( quodlibet.util.unexpand(library))) import quodlibet.library library = quodlibet.library.init(library) _init_debug() print_d("Finished initialization.") return library def init_plugins(no_plugins=False): print_d("Starting plugin manager") from quodlibet import plugins folders = [os.path.join(quodlibet.const.BASEDIR, "plugins", "editing"), os.path.join(quodlibet.const.BASEDIR, "plugins", "events"), os.path.join(quodlibet.const.BASEDIR, "plugins", "playorder"), os.path.join(quodlibet.const.BASEDIR, "plugins", "songsmenu"), os.path.join(quodlibet.const.BASEDIR, "plugins", "gstreamer"), os.path.join(quodlibet.const.USERDIR, "plugins")] pm = plugins.init(folders, no_plugins) pm.rescan() from quodlibet.qltk.edittags import EditTags from quodlibet.qltk.renamefiles import RenameFiles from quodlibet.qltk.tagsfrompath import TagsFromPath EditTags.init_plugins() RenameFiles.init_plugins() TagsFromPath.init_plugins() return pm def init_backend(backend, librarian): import quodlibet.player print_d("Initializing audio backend (%s)" % backend) backend = quodlibet.player.init(backend) device = backend.init(librarian) return device def enable_periodic_save(save_library): import quodlibet.library from quodlibet.util import copool from quodlibet import config timeout = 5 * 60 * 1000 # 5 minutes def periodic_config_save(): while 1: config.save(quodlibet.const.CONFIG) yield copool.add(periodic_config_save, timeout=timeout) if not save_library: return def periodic_library_save(): while 1: quodlibet.library.save() yield copool.add(periodic_library_save, timeout=timeout) def _init_debug(): from gi.repository import GLib from quodlibet.qltk.debugwindow import ExceptionDialog print_d("Initializing debugging extensions") def _override_exceptions(): print_d("Enabling custom exception handler.") sys.excepthook = ExceptionDialog.excepthook GLib.idle_add(_override_exceptions) def _init_signal(): """Catches certain signals and quits the application once the mainloop has started.""" import os if os.name == "nt": return def signal_action(): app.quit() import signal import gi gi.require_version("GLib", "2.0") from gi.repository import GLib SIGS = [getattr(signal, s, None) for s in "SIGINT SIGTERM SIGHUP".split()] for sig in filter(None, SIGS): # Before the mainloop starts we catch signals in python # directly and idle_add the app.quit def idle_handler(*args): print_d("Python signal handler activated.") GLib.idle_add(signal_action, priority=GLib.PRIORITY_HIGH) print_d("Register Python signal handler: %r" % sig) signal.signal(sig, idle_handler) # After the mainloop has started the python handler # blocks if no mainloop is active (for whatever reason). # Override the python handler with the GLib one, which works here. def install_glib_handler(sig): def handler(*args): print_d("GLib signal handler activated.") signal_action() if hasattr(GLib, "unix_signal_add_full"): print_d("Register GLib signal handler: %r" % sig) GLib.unix_signal_add_full( GLib.PRIORITY_HIGH, sig, handler, None) else: print_d("Can't install GLib signal handler, too old gi.") GLib.idle_add(install_glib_handler, sig, priority=GLib.PRIORITY_HIGH) # minimal emulation of gtk.quit_add _quit_add_list = [] def quit_add(level, func, *args): assert level in (0, 1) _quit_add_list.append([level, func, args]) def _quit_before(): for level, func, args in _quit_add_list: if level != 0: func(*args) def _quite_after(): for level, func, args in _quit_add_list: if level == 0: func(*args) def main(window): print_d("Entering quodlibet.main") from gi.repository import Gtk def quit_gtk(m): _quit_before() # disable plugins import quodlibet.plugins quodlibet.plugins.quit() # stop all copools print_d("Quit GTK: Stop all copools") from quodlibet.util import copool copool.remove_all() # events that add new events to the main loop (like copool) # can block the shutdown, so force stop after some time. # gtk.main_iteration will return True if quit gets called here from gi.repository import GLib GLib.timeout_add(4 * 1000, Gtk.main_quit, priority=GLib.PRIORITY_HIGH) # destroy all open windows so they hide immediately on close: # destroying all top level windows doesn't work (weird errors), # so we hide them all and only destroy our tracked instances # (browser windows, tag editors, pref window etc.) from quodlibet.qltk import Window map(Gtk.Window.hide, Gtk.Window.list_toplevels()) map(Gtk.Window.destroy, Window.instances) print_d("Quit GTK: Process pending events...") while Gtk.events_pending(): if Gtk.main_iteration_do(False): print_d("Quit GTK: Timeout occurred, force quit.") break else: Gtk.main_quit() print_d("Quit GTK: done.") window.connect('destroy', quit_gtk) window.show() Gtk.main() _quite_after() ����������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017373� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/monkeysaudio.py���������������������������������������������������0000644�0001750�0001750�00000001324�12161032160�022446� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from quodlibet.formats._apev2 import APEv2File extensions = [".ape"] try: from mutagen.monkeysaudio import MonkeysAudio except ImportError: extensions = [] class MonkeysAudioFile(APEv2File): format = "Monkey's Audio" def __init__(self, filename): audio = MonkeysAudio(filename) super(MonkeysAudioFile, self).__init__(filename, audio) self["~#length"] = int(audio.info.length) self.sanitize(filename) info = MonkeysAudioFile types = [MonkeysAudioFile] ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/_id3.py�����������������������������������������������������������0000644�0001750�0001750�00000037043�12173213426�020575� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2012 Joe Wreschnig, Michael Urman, Niklas Janlert, # Steven Robertson, Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import mutagen.id3 from quodlibet import config, const, print_d, util from quodlibet.formats._audio import AudioFile from quodlibet.util.massagers import LanguageMassager def isascii(s): return (len(s) == 0) or (ord(max(s)) < 128) def encoding_for(s): """Returns ID3 encoding ID best for string `s`""" return 3 if isascii(s) else 1 class ID3hack(mutagen.id3.ID3): """Override 'correct' behavior with desired behavior""" def add(self, tag): if len(type(tag).__name__) == 3: tag = type(tag).__base__(tag) if tag.HashKey in self and tag.FrameID[0] == "T": self[tag.HashKey].extend(tag[:]) else: self[tag.HashKey] = tag class ID3bug(mutagen.id3.ID3): def load(self, *args, **kwargs): # Work around Mutagen bug by throwing away unknown 2.3 frames on load # see http://code.google.com/p/mutagen/issues/detail?id=97 super(ID3bug, self).load(*args, **kwargs) if self.version == (2, 3, 0) and mutagen.version < (1, 21): del self.unknown_frames[:] # ID3 is absolutely the worst thing ever. class ID3File(AudioFile): # http://www.unixgods.org/~tilo/ID3/docs/ID3_comparison.html # http://www.id3.org/id3v2.4.0-frames.txt IDS = {"TIT1": "grouping", "TIT2": "title", "TIT3": "version", "TPE1": "artist", "TPE2": "performer", "TPE3": "conductor", "TPE4": "arranger", "TEXT": "lyricist", "TCOM": "composer", "TENC": "encodedby", "TALB": "album", "TRCK": "tracknumber", "TPOS": "discnumber", "TSRC": "isrc", "TCOP": "copyright", "TPUB": "organization", "TSST": "discsubtitle", "TOLY": "author", "TMOO": "mood", "TBPM": "bpm", "TDRC": "date", "TDOR": "originaldate", "TOAL": "originalalbum", "TOPE": "originalartist", "WOAR": "website", "TSOP": "artistsort", "TSOA": "albumsort", "TSOT": "titlesort", "TSO2": "albumartistsort", "TSOC": "composersort", "TMED": "media", "TCMP": "compilation", # TLAN requires an ISO 639-2 language code, check manually #"TLAN": "language" } SDI = dict([(v, k) for k, v in IDS.iteritems()]) # At various times, information for this came from # http://musicbrainz.org/docs/specs/metadata_tags.html # http://bugs.musicbrainz.org/ticket/1383 # http://musicbrainz.org/doc/MusicBrainzTag TXXX_MAP = { u"MusicBrainz Artist Id": "musicbrainz_artistid", u"MusicBrainz Album Id": "musicbrainz_albumid", u"MusicBrainz Album Artist Id": "musicbrainz_albumartistid", u"MusicBrainz TRM Id": "musicbrainz_trmid", u"MusicIP PUID": "musicip_puid", u"MusicMagic Fingerprint": "musicip_fingerprint", u"MusicBrainz Album Status": "musicbrainz_albumstatus", u"MusicBrainz Album Type": "musicbrainz_albumtype", u"MusicBrainz Album Release Country": "releasecountry", u"MusicBrainz Disc Id": "musicbrainz_discid", u"ASIN": "asin", u"ALBUMARTISTSORT": "albumartistsort", u"BARCODE": "barcode", } PAM_XXXT = dict([(v, k) for k, v in TXXX_MAP.iteritems()]) CODECS = ["utf-8"] try: CODECS.extend(config.get("editing", "id3encoding").strip().split()) except: pass # Uninitialized config... CODECS.append("iso-8859-1") Kind = None def __init__(self, filename): audio = self.Kind(filename, ID3=ID3hack) tag = audio.tags or mutagen.id3.ID3() for frame in tag.values(): if frame.FrameID == "APIC" and len(frame.data): self["~picture"] = "y" continue elif frame.FrameID == "TCON": self["genre"] = "\n".join(frame.genres) continue elif frame.FrameID == "TLEN": try: length = +frame // 1000 except ValueError: continue # ignore TLEN <= 0 [issue 222] if length > 0: self["~#length"] = length continue elif (frame.FrameID == "UFID" and frame.owner == "http://musicbrainz.org"): self["musicbrainz_trackid"] = frame.data continue elif frame.FrameID == "POPM": rating = frame.rating / 255.0 if frame.email == const.EMAIL: try: self.setdefault("~#playcount", frame.count) except AttributeError: pass self.setdefault("~#rating", rating) elif frame.email == config.get("editing", "save_email"): try: self["~#playcount"] = frame.count except AttributeError: pass self["~#rating"] = rating continue elif frame.FrameID == "COMM" and frame.desc == "": name = "comment" elif frame.FrameID in ["COMM", "TXXX"]: if frame.desc.startswith("QuodLibet::"): name = frame.desc[11:] elif frame.desc in self.TXXX_MAP: name = self.TXXX_MAP[frame.desc] else: continue elif frame.FrameID == "RVA2": self.__process_rg(frame) continue elif frame.FrameID == "TMCL": for role, name in frame.people: key = self.__validate_name("performer:" + role) if key: self.add(key, name) continue elif frame.FrameID == "TLAN": self["language"] = "\n".join(frame.text) continue else: name = self.IDS.get(frame.FrameID, "").lower() name = self.__validate_name(name) if not name: continue name = name.lower() id3id = frame.FrameID if id3id.startswith("T"): text = "\n".join(map(unicode, frame.text)) elif id3id == "COMM": text = "\n".join(frame.text) elif id3id.startswith("W"): text = frame.url frame.encoding = 0 else: continue if not text: continue text = self.__distrust_latin1(text, frame.encoding) if text is None: continue if name in self: self[name] += "\n" + text else: self[name] = text self[name] = self[name].strip() # to catch a missing continue above del name # foobar2000 writes long dates in a TXXX DATE tag, leaving the TDRC # tag out. Read the TXXX DATE, but only if the TDRC tag doesn't exist # to avoid reverting or duplicating tags in existing libraries. if audio.tags and "date" not in self: for frame in tag.getall('TXXX:DATE'): self["date"] = "\n".join(map(unicode, frame.text)) # Read TXXX replaygain in case we don't have any (from RVA2) for k in ["track_peak", "track_gain", "album_peak", "album_gain"]: k = "replaygain_" + k if k not in self: for frame in tag.getall("TXXX:" + k): self[k] = "\n".join(map(unicode, frame.text)) self.setdefault("~#length", int(audio.info.length)) try: self.setdefault("~#bitrate", int(audio.info.bitrate / 1000)) except AttributeError: pass self.sanitize(filename) def __validate_name(self, k): """Returns a ascii string or None if the key isn't supported""" if isinstance(k, unicode): k = k.encode("utf-8") if not (k and "=" not in k and "~" not in k and k.encode("ascii", "replace") == k): return return k def __process_rg(self, frame): if frame.channel == 1: if frame.desc == "album": k = "album" elif frame.desc == "track": k = "track" elif "replaygain_track_gain" not in self: k = "track" # fallback else: return self["replaygain_%s_gain" % k] = "%+f dB" % frame.gain self["replaygain_%s_peak" % k] = str(frame.peak) def __distrust_latin1(self, text, encoding): assert isinstance(text, unicode) if encoding == 0: text = text.encode('iso-8859-1') for codec in self.CODECS: try: text = text.decode(codec) except (UnicodeError, LookupError): pass else: break else: return None return text def write(self): try: tag = ID3bug(self['~filename']) except mutagen.id3.error: tag = mutagen.id3.ID3() # prefill TMCL with the ones we can't read mcl = tag.get("TMCL", mutagen.id3.TMCL(encoding=3, people=[])) mcl.people = [(r, n) for (r, n) in mcl.people if not self.__validate_name(r)] # delete all TXXX/COMM we can read except empty COMM for frame in ["COMM:", "TXXX:"]: for t in tag.getall(frame + "QuodLibet:"): if t.desc and self.__validate_name(t.desc): del tag[t.HashKey] for key in ["UFID:http://musicbrainz.org", "TMCL", "POPM:%s" % const.EMAIL, "POPM:%s" % config.get("editing", "save_email")]: if key in tag: del(tag[key]) for key, id3name in self.SDI.items(): tag.delall(id3name) if key not in self: continue enc = encoding_for(self[key]) Kind = mutagen.id3.Frames[id3name] text = self[key].split("\n") if id3name == "WOAR": for t in text: tag.add(Kind(url=t)) else: tag.add(Kind(encoding=enc, text=text)) dontwrite = ["genre", "comment", "replaygain_album_peak", "replaygain_track_peak", "replaygain_album_gain", "replaygain_track_gain", "musicbrainz_trackid", ] + self.TXXX_MAP.values() if "musicbrainz_trackid" in self.realkeys(): f = mutagen.id3.UFID(owner="http://musicbrainz.org", data=self["musicbrainz_trackid"]) tag.add(f) # Issue 439 - Only write valid ISO 639-2 codes to TLAN (else TXXX) tag.delall("TLAN") if "language" in self: langs = self["language"].split("\n") if all([lang in LanguageMassager.ISO_639_2 for lang in langs]): # Save value(s) to TLAN tag. Guaranteed to be ASCII here tag.add(mutagen.id3.TLAN(encoding=3, text=langs)) dontwrite.append("language") else: print_d("Not using invalid language code '%s' in TLAN" % self["language"]) # Filter out known keys, and ones set not to write [generically]. keys_to_write = filter(lambda k: not (k in self.SDI or k in dontwrite), self.realkeys()) for key in keys_to_write: enc = encoding_for(self[key]) if key.startswith("performer:"): mcl.people.append([key.split(":", 1)[1], self[key]]) continue f = mutagen.id3.TXXX( encoding=enc, text=self[key].split("\n"), desc=u"QuodLibet::%s" % key) tag.add(f) if mcl.people: tag.add(mcl) if "genre" in self: enc = encoding_for(self["genre"]) t = self["genre"].split("\n") tag.add(mutagen.id3.TCON(encoding=enc, text=t)) else: try: del(tag["TCON"]) except KeyError: pass tag.delall("COMM:") if "comment" in self: enc = encoding_for(self["comment"]) t = self["comment"].split("\n") tag.add(mutagen.id3.COMM(encoding=enc, text=t, desc=u"", lang="\x00\x00\x00")) # Delete old foobar replaygain and write new one for k in ["track_peak", "track_gain", "album_peak", "album_gain"]: k = "replaygain_" + k # Delete Foobar droppings. try: del(tag["TXXX:" + k]) except KeyError: pass # Add new ones if k in self: tag.add(mutagen.id3.TXXX(encoding=0, text=self[k].split("\n"), desc=k)) # we shouldn't delete all, but we use unknown ones as fallback, so make # sure they don't come back after reloading for t in tag.getall("RVA2"): if t.channel == 1: del tag[t.HashKey] for k in ["track", "album"]: if ('replaygain_%s_gain' % k) in self: try: gain = float(self["replaygain_%s_gain" % k].split()[0]) except ValueError: gain = 0 try: peak = float(self["replaygain_%s_peak" % k]) except (ValueError, KeyError): peak = 0 # http://code.google.com/p/quodlibet/issues/detail?id=1027 peak = max(min(1.9, peak), 0) gain = max(min(63.9, gain), -64) f = mutagen.id3.RVA2(desc=k, channel=1, gain=gain, peak=peak) tag.add(f) for key in self.TXXX_MAP: try: del(tag["TXXX:" + key]) except KeyError: pass for key in self.PAM_XXXT: if key in self: f = mutagen.id3.TXXX(encoding=0, text=self[key].split("\n"), desc=self.PAM_XXXT[key]) tag.add(f) if (config.getboolean("editing", "save_to_songs") and (self("~#rating") != const.DEFAULT_RATING or self.get("~#playcount", 0) != 0)): email = config.get("editing", "save_email").strip() email = email or const.EMAIL t = mutagen.id3.POPM(email=email, rating=int(255 * self("~#rating")), count=self.get("~#playcount", 0)) tag.add(t) tag.save(self["~filename"]) self.sanitize() def get_format_cover(self): try: tag = mutagen.id3.ID3(self["~filename"]) except Exception: return else: cover = None for frame in tag.getall("APIC"): cover = cover or frame if frame.type == 3: cover = frame break if cover: return util.get_temp_cover_file(cover.data) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/trueaudio.py������������������������������������������������������0000644�0001750�0001750�00000001106�12161032160�021736� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2006 Joe Wreschnig, Michael Urman, Niklas Janlert # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation extensions = [".tta"] try: from mutagen.trueaudio import TrueAudio except ImportError: TrueAudio = None extensions = [] from quodlibet.formats._id3 import ID3File class TrueAudioFile(ID3File): format = "True Audio" mimes = ["audio/x-tta"] Kind = TrueAudio info = TrueAudioFile types = [TrueAudioFile] ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/mp4.py������������������������������������������������������������0000644�0001750�0001750�00000011027�12173213426�020451� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2005 Alexey Bobyakov <claymore.ws@gmail.com>, Joe Wreschnig # Copyright 2006 Lukas Lalinsky # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from quodlibet import util from quodlibet.formats._audio import AudioFile extensions = ['.mp4', '.m4a', '.m4v'] try: from mutagen.mp4 import MP4 except ImportError: extensions = [] class MP4File(AudioFile): multiple_values = False format = "MPEG-4 AAC" mimes = ["audio/mp4", "audio/x-m4a", "audio/mpeg4", "audio/aac"] __translate = { "\xa9nam": "title", "\xa9alb": "album", "\xa9ART": "artist", "aART": "albumartist", "\xa9wrt": "composer", "\xa9day": "date", "\xa9cmt": "comment", "\xa9grp": "grouping", "\xa9gen": "genre", "tmpo": "bpm", "\xa9too": "encodedby", "cprt": "copyright", "soal": "albumsort", "soaa": "albumartistsort", "soar": "artistsort", "sonm": "titlesort", "soco": "composersort", "----:com.apple.iTunes:MusicBrainz Artist Id": "musicbrainz_artistid", "----:com.apple.iTunes:MusicBrainz Track Id": "musicbrainz_trackid", "----:com.apple.iTunes:MusicBrainz Album Id": "musicbrainz_albumid", "----:com.apple.iTunes:MusicBrainz Album Artist Id": "musicbrainz_albumartistid", "----:com.apple.iTunes:MusicIP PUID": "musicip_puid", "----:com.apple.iTunes:MusicBrainz Album Status": "musicbrainz_albumstatus", "----:com.apple.iTunes:MusicBrainz Album Type": "musicbrainz_albumtype", "----:com.apple.iTunes:MusicBrainz Album Release Country": "releasecountry", } __rtranslate = dict([(v, k) for k, v in __translate.iteritems()]) __tupletranslate = { "disk": "discnumber", "trkn": "tracknumber", } __rtupletranslate = dict([(v, k) for k, v in __tupletranslate.iteritems()]) def __init__(self, filename): audio = MP4(filename) self["~#length"] = int(audio.info.length) self["~#bitrate"] = int(audio.info.bitrate / 1000) for key, values in audio.items(): if key in self.__tupletranslate: name = self.__tupletranslate[key] cur, total = values[0] if total: self[name] = u"%d/%d" % (cur, total) else: self[name] = unicode(cur) elif key in self.__translate: name = self.__translate[key] if key == "tmpo": self[name] = "\n".join(map(unicode, values)) elif key.startswith("----"): self[name] = "\n".join( map(lambda v: util.decode(v).strip("\x00"), values)) else: self[name] = "\n".join(values) elif key == "covr": self["~picture"] = "y" self.sanitize(filename) def write(self): audio = MP4(self["~filename"]) for key in self.__translate.keys() + self.__tupletranslate.keys(): try: del(audio[key]) except KeyError: pass for key in self.realkeys(): try: name = self.__rtranslate[key] except KeyError: continue values = self.list(key) if name == "tmpo": values = map(int, values) elif name.startswith("----"): values = map(lambda v: v.encode("utf-8"), values) audio[name] = values track, tracks = self("~#track"), self("~#tracks", 0) if track: audio["trkn"] = [(track, tracks)] disc, discs = self("~#disc"), self("~#discs", 0) if disc: audio["disk"] = [(disc, discs)] audio.save() self.sanitize() def can_change(self, key=None): OK = self.__rtranslate.keys() + self.__rtupletranslate.keys() if key is None: return OK else: return super(MP4File, self).can_change(key) and (key in OK) def get_format_cover(self): try: tag = MP4(self["~filename"]) except Exception: return else: for cover in tag.get("covr", []): fn = util.get_temp_cover_file(cover) if fn: return fn info = MP4File types = [MP4File] ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/_apev2.py���������������������������������������������������������0000644�0001750�0001750�00000006224�12173213426�021130� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2005 Joe Wreschnig, Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from quodlibet.formats._audio import AudioFile try: import mutagen.apev2 except ImportError: pass class APEv2File(AudioFile): # Map APE names to QL names. APE tags are also usually capitalized. # Also blacklist a number of tags. IGNORE = ["file", "index", "introplay", "dummy"] TRANS = {"subtitle": "version", "track": "tracknumber", "disc": "discnumber", "catalog": "labelid", "year": "date", "record location": "location", "album artist": "albumartist", "debut album": "originalalbum", "record date": "recordingdate", "original artist": "originalartist", "mixartist": "remixer", } SNART = dict([(v, k) for k, v in TRANS.iteritems()]) def __init__(self, filename, audio=None): if audio: tag = audio.tags or {} else: try: tag = mutagen.apev2.APEv2(filename) except mutagen.apev2.APENoHeaderError: tag = {} for key, value in tag.items(): key = self.TRANS.get(key.lower(), key.lower()) if (value.kind == mutagen.apev2.TEXT and key not in self.IGNORE): self[key] = "\n".join(list(value)) self.sanitize(filename) @staticmethod def __titlecase(key): if key.lower() in ["isrc", "isbn", "ean/upc"]: return key.upper() else: return key.title() def can_change(self, key=None): if key is None: return True else: return (super(APEv2File, self).can_change(key) and key.lower() not in self.IGNORE and key.lower() not in self.TRANS and mutagen.apev2.is_valid_apev2_key(self.__titlecase(key))) def write(self): try: tag = mutagen.apev2.APEv2(self['~filename']) except mutagen.apev2.APENoHeaderError: tag = mutagen.apev2.APEv2() # Remove any text keys we read in for key in tag.iterkeys(): value = tag[key] if (value.kind == mutagen.apev2.TEXT and key.lower() not in self.IGNORE): del(tag[key]) # Merge all case differing keys together and titlecase them for key in self.realkeys(): value = self[key] key = self.SNART.get(key.lower(), key.lower()) if key in self.IGNORE: continue key = self.__titlecase(key) if key in tag: old_val = tag[key] if old_val.kind == mutagen.apev2.TEXT: tag[key] = list(old_val) + value.split("\n") else: # FIXME: We overwrite data here. tag[key] = value.split("\n") else: tag[key] = value.split("\n") tag.save(self["~filename"]) self.sanitize() ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/wma.py������������������������������������������������������������0000644�0001750�0001750�00000011201�12161032160�020516� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Lukas Lalinsky # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import struct from quodlibet import util from quodlibet.formats._audio import AudioFile extensions = [".wma"] try: import mutagen.asf except ImportError: extensions = [] class WMAFile(AudioFile): multiple_values = False mimes = ["audio/x-ms-wma", "audio/x-ms-wmv", "video/x-ms-asf", "audio/x-wma", "video/x-wmv"] format = "Windows Media Audio" #http://msdn.microsoft.com/en-us/library/dd743066%28VS.85%29.aspx #http://msdn.microsoft.com/en-us/library/dd743063%28VS.85%29.aspx #http://msdn.microsoft.com/en-us/library/dd743220%28VS.85%29.aspx __translate = { "WM/AlbumTitle": "album", "Title": "title", "Author": "artist", "WM/AlbumArtist": "albumartist", "WM/Composer": "composer", "WM/Writer": "lyricist", "WM/Conductor": "conductor", "WM/ModifiedBy": "remixer", "WM/Producer": "producer", "WM/ContentGroupDescription": "grouping", "WM/SubTitle": "discsubtitle", "WM/TrackNumber": "tracknumber", "WM/PartOfSet": "discnumber", "WM/BeatsPerMinute": "bpm", "Copyright": "copyright", "WM/ISRC": "isrc", "WM/Mood": "mood", "WM/EncodedBy": "encodedby", "MusicBrainz/Track Id": "musicbrainz_trackid", "MusicBrainz/Album Id": "musicbrainz_albumid", "MusicBrainz/Artist Id": "musicbrainz_artistid", "MusicBrainz/Album Artist Id": "musicbrainz_albumartistid", "MusicBrainz/TRM Id": "musicbrainz_trmid", "MusicIP/PUID": "musicip_puid", "WM/Year": "date", "WM/OriginalArtist": "originalartist", "WM/OriginalAlbumTitle": "originalalbum", "WM/AlbumSortOrder": "albumsort", "WM/ArtistSortOrder": "artistsort", "WM/Genre": "genre", "WM/Publisher": "publisher", "WM/AuthorURL": "website", "Description": "comment" } __rtranslate = dict([(v, k) for k, v in __translate.iteritems()]) def __init__(self, filename, audio=None): if audio is None: audio = mutagen.asf.ASF(filename) self["~#length"] = int(audio.info.length) self["~#bitrate"] = int(audio.info.bitrate / 1000) for name, values in audio.tags.items(): if name == "WM/Picture": self["~picture"] = "y" try: name = self.__translate[name] except KeyError: continue self[name] = "\n".join(map(unicode, values)) self.sanitize(filename) def write(self): audio = mutagen.asf.ASF(self["~filename"]) for key in self.__translate.keys(): try: del(audio[key]) except KeyError: pass for key in self.realkeys(): try: name = self.__rtranslate[key] except KeyError: continue audio.tags[name] = self.list(key) audio.save() self.sanitize() def can_change(self, key=None): OK = self.__rtranslate.keys() if key is None: return super(WMAFile, self).can_change(key) else: return super(WMAFile, self).can_change(key) and (key in OK) def get_format_cover(self): try: tag = mutagen.asf.ASF(self["~filename"]) except Exception: return else: for image in tag.get("WM/Picture", []): (mime, data, type) = unpack_image(image.value) if type == 3: # Only cover images return util.get_temp_cover_file(data) def unpack_image(data): """ Helper function to unpack image data from a WM/Picture tag. The data has the following format: 1 byte: Picture type (0-20), see ID3 APIC frame specification at http://www.id3.org/id3v2.4.0-frames 4 bytes: Picture data length in LE format MIME type, null terminated UTF-16-LE string Description, null terminated UTF-16-LE string The image data in the given length """ (type, size) = struct.unpack_from("<bi", data) pos = 5 mime = "" while data[pos:pos + 2] != "\x00\x00": mime += data[pos:pos + 2] pos += 2 pos += 2 description = "" while data[pos:pos + 2] != "\x00\x00": description += data[pos:pos + 2] pos += 2 pos += 2 image_data = data[pos:pos + size] return (mime.decode("utf-16-le"), image_data, type) info = WMAFile types = [WMAFile] �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/mod.py������������������������������������������������������������0000644�0001750�0001750�00000004152�12161032160�020520� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2005 Joe Wreschnig, Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import ctypes from quodlibet.formats._audio import AudioFile extensions = [ '.669', '.amf', '.ams', '.dsm', '.far', '.it', '.med', '.mod', '.mt2', '.mtm', '.okt', '.s3m', '.stm', '.ult', '.gdm', '.xm'] for so_version in ("libmodplug.so.1", "libmodplug.so.0"): try: _modplug = ctypes.cdll.LoadLibrary(so_version) except OSError: continue else: _modplug.ModPlug_GetName.argtypes = [ctypes.c_void_p] _modplug.ModPlug_GetName.restype = ctypes.c_char_p _modplug.ModPlug_Load.argtypes = [ctypes.c_void_p, ctypes.c_int] _modplug.ModPlug_Load.restype = ctypes.c_void_p _modplug.ModPlug_GetLength.argtypes = [ctypes.c_void_p] _modplug.ModPlug_GetLength.restype = ctypes.c_int _modplug.ModPlug_Unload.argtypes = [ctypes.c_void_p] _modplug.ModPlug_Unload.restype = None break else: extensions = [] class ModFile(AudioFile): format = "MOD/XM/IT" def __init__(self, filename): data = file(filename).read() f = _modplug.ModPlug_Load(data, len(data)) if not f: raise IOError("%r not a valid MOD file" % filename) self["~#length"] = _modplug.ModPlug_GetLength(f) // 1000 title = _modplug.ModPlug_GetName(f) or os.path.basename(filename) try: self["title"] = title.decode('utf-8') except UnicodeError: self["title"] = title.decode("iso-8859-1") _modplug.ModPlug_Unload(f) self.sanitize(filename) def write(self): pass def reload(self, *args): artist = self.get("artist") super(ModFile, self).reload(*args) if artist is not None: self.setdefault("artist", artist) def can_change(self, k=None): if k is None: return ["artist"] else: return k == "artist" info = ModFile types = [ModFile] ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/__init__.py�������������������������������������������������������0000644�0001750�0001750�00000006237�12161032160�021506� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2005 Joe Wreschnig, Michael Urman # 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import sys from quodlibet.util.modulescanner import load_dir_modules from quodlibet import util from quodlibet import const from quodlibet.util.dprint import print_w from quodlibet.const import MinVersions mimes = set() _infos = {} modules = [] names = [] def init(): global mimes, _infos, modules, names import mutagen if mutagen.version < MinVersions.MUTAGEN: print_w("Mutagen %s required. %s found." % (MinVersions.MUTAGEN, mutagen.version_string)) base = os.path.dirname(__file__) load_pyc = os.name == 'nt' formats = load_dir_modules(base, package=__package__, load_compiled=load_pyc) for format in formats: name = format.__name__ for ext in format.extensions: _infos[ext] = format.info if format.extensions: for type_ in format.types: mimes.update(type_.mimes) names.append(type_.format) modules.append(name.split(".")[-1]) # Migrate pre-0.16 library, which was using an undocumented "feature". sys.modules[name.replace(".", "/")] = format # Migrate old layout if name.startswith("quodlibet."): sys.modules[name.split(".", 1)[1]] = format modules.sort() names.sort() if not _infos: raise SystemExit("No formats found!") init() def MusicFile(filename): for ext in _infos.keys(): if filename.lower().endswith(ext): try: # The sys module docs say this is where the interactive # interpreter stores exceptions, so it should be safe for # us to do it -- if we're in the interpreter this does # nothing, and if we're not it lets us access them elsewhere. # WARNING: Not threadsafe. Don't add files from threads # other than the main one. sys.last_type = sys.last_value = sys.last_traceback = None return _infos[ext](filename) except: print_w(_("Error loading %r") % filename) if const.DEBUG: util.print_exc() lt, lv, tb = sys.exc_info() sys.last_type, sys.last_value, sys.last_traceback = lt, lv, tb return None else: return None if sys.version_info < (2, 5): def supported(song): lower = song.key.lower() for ext in _infos.keys(): if lower.endswith(ext): return True return False else: extensions = tuple(_infos.keys()) def supported(song): return song.key.lower().endswith(extensions) def filter(filename): lower = filename.lower() for ext in _infos.keys(): if lower.endswith(ext): return True return False from quodlibet.formats._audio import USEFUL_TAGS, MACHINE_TAGS, PEOPLE �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/xiph.py�����������������������������������������������������������0000644�0001750�0001750�00000023446�12173213426�020731� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2005 Joe Wreschnig, Michael Urman # 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import sys import base64 import mutagen from quodlibet import config from quodlibet import const from quodlibet import util from quodlibet.formats._audio import AudioFile # Migrate old layout sys.modules["formats.flac"] = sys.modules[__name__] sys.modules["formats.oggvorbis"] = sys.modules[__name__] class MutagenVCFile(AudioFile): format = "Unknown Mutagen + vorbiscomment" MutagenType = None def __init__(self, filename, audio=None): # If we're done a type probe, use the results of that to avoid # reopening the file. if audio is None: audio = self.MutagenType(filename) self["~#length"] = int(audio.info.length) try: self["~#bitrate"] = int(audio.info.bitrate / 1000) except AttributeError: pass for key, value in (audio.tags or {}).items(): self[key] = "\n".join(value) self.__post_read() self.sanitize(filename) def __post_read_total(self, main, fallback, single): one = None total = None if single in self: parts = self[single].split("/", 1) if parts[0]: one = parts[0] if len(parts) > 1: total = parts[1] del self[single] if main in self: total = self[main] del self[main] else: if fallback in self: total = self[fallback] del self[fallback] final = None if one is not None: final = one if total is not None: if final is None: final = "/" + total else: final += "/" + total if final is not None: self[single] = final def __post_read(self): email = config.get("editing", "save_email").strip() maps = {"rating": float, "playcount": int} for keyed_key, func in maps.items(): for subkey in ["", ":" + const.EMAIL, ":" + email]: key = keyed_key + subkey if key in self: try: self["~#" + keyed_key] = func(self[key]) except ValueError: pass del(self[key]) if "metadata_block_picture" in self: self["~picture"] = "y" del(self["metadata_block_picture"]) if "coverart" in self: self["~picture"] = "y" del(self["coverart"]) if "coverartmime" in self: del(self["coverartmime"]) self.__post_read_total("tracktotal", "totaltracks", "tracknumber") self.__post_read_total("disctotal", "totaldiscs", "discnumber") def get_format_cover(self): try: from mutagen.flac import Picture except ImportError: return try: audio = self.MutagenType(self["~filename"]) except EnvironmentError: return None pictures = [] for data in audio.tags.get("metadata_block_picture", []): try: pictures.append(Picture(base64.b64decode(data))) except TypeError: pass cover = None for pic in pictures: if pic.type == 3: cover = pic.data break cover = cover or pic.data if not cover: cover = audio.tags.get("coverart") try: cover = cover and base64.b64decode(cover[0]) except TypeError: cover = None if not cover: if "~picture" in self: del self["~picture"] return return util.get_temp_cover_file(cover) def can_change(self, k=None): if k is None: return super(MutagenVCFile, self).can_change(None) else: return (super(MutagenVCFile, self).can_change(k) and k not in ["rating", "playcount", "metadata_block_picture", "coverart", "coverartmime"] and not k.startswith("rating:") and not k.startswith("playcount:")) def __prep_write(self, comments): email = config.get("editing", "save_email").strip() for key in comments.keys(): if key.startswith("rating:") or key.startswith("playcount:"): if key.split(":", 1)[1] in [const.EMAIL, email]: del(comments[key]) elif key not in ["metadata_block_picture", "coverart", "coverartmime"]: del(comments[key]) if config.getboolean("editing", "save_to_songs"): email = email or const.EMAIL rating = self("~#rating") if rating != const.DEFAULT_RATING: comments["rating:" + email] = str(rating) playcount = self.get("~#playcount", 0) if playcount != 0: comments["playcount:" + email] = str(playcount) def __prep_write_total(self, comments, main, fallback, single): for k in [main, fallback, single]: if k in comments: del comments[k] if single in self: parts = self[single].split("/", 1) if parts[0]: comments[single] = [parts[0]] if len(parts) > 1: comments[main] = [parts[1]] if main in self: comments[main] = self.list(main) if fallback in self: if main in comments: comments[fallback] = self.list(fallback) else: comments[main] = self.list(fallback) def write(self): audio = self.MutagenType(self["~filename"]) if audio.tags is None: audio.add_tags() self.__prep_write(audio.tags) for key in self.realkeys(): audio.tags[key] = self.list(key) self.__prep_write_total(audio.tags, "tracktotal", "totaltracks", "tracknumber") self.__prep_write_total(audio.tags, "disctotal", "totaldiscs", "discnumber") audio.save() self.sanitize() extensions = [] ogg_formats = [] try: from mutagen.oggvorbis import OggVorbis except ImportError: OggVorbis = None else: extensions.append(".ogg") extensions.append(".oga") ogg_formats.append(OggVorbis) try: from mutagen.flac import FLAC, FLACNoHeaderError except ImportError: FLAC = None else: extensions.append(".flac") ogg_formats.append(FLAC) try: from mutagen.oggflac import OggFLAC except ImportError: OggFLAC = None else: extensions.append(".oggflac") ogg_formats.append(OggFLAC) try: from mutagen.oggspeex import OggSpeex except ImportError: OggSpeex = None else: extensions.append(".spx") ogg_formats.append(OggSpeex) from mutagen.oggtheora import OggTheora extensions.append(".ogv") ogg_formats.append(OggTheora) try: from mutagen.oggopus import OggOpus except ImportError: OggOpus = None else: extensions.append(".opus") ogg_formats.append(OggOpus) try: from mutagen.id3 import ID3 except ImportError: ID3 = None class OggFile(MutagenVCFile): format = "Ogg Vorbis" mimes = ["audio/vorbis", "audio/ogg; codecs=vorbis"] MutagenType = OggVorbis class OggFLACFile(MutagenVCFile): format = "Ogg FLAC" mimes = ["audio/x-oggflac", "audio/ogg; codecs=flac"] MutagenType = OggFLAC class OggSpeexFile(MutagenVCFile): format = "Ogg Speex" mimes = ["audio/x-speex", "audio/ogg; codecs=speex"] MutagenType = OggSpeex class OggTheoraFile(MutagenVCFile): format = "Ogg Theora" mimes = ["video/x-theora", "video/ogg; codecs=theora"] MutagenType = OggTheora class OggOpusFile(MutagenVCFile): format = "Ogg Opus" mimes = ["audio/ogg; codecs=opus"] MutagenType = OggOpus class FLACFile(MutagenVCFile): format = "FLAC" mimes = ["audio/x-flac", "application/x-flac"] MutagenType = FLAC def __init__(self, filename, audio=None): if audio is None: audio = FLAC(filename) super(FLACFile, self).__init__(filename, audio) if audio.pictures: self["~picture"] = "y" def get_format_cover(self): try: tag = FLAC(self["~filename"]) except EnvironmentError: return None else: covers = tag.pictures if not covers: return super(FLACFile, self).get_format_cover() for cover in covers: if cover.type == 3: pic = cover break else: pic = covers[0] return util.get_temp_cover_file(pic.data) def write(self): if ID3 is not None: ID3().delete(filename=self["~filename"]) super(FLACFile, self).write() types = [] for var in globals().values(): if getattr(var, 'MutagenType', None): types.append(var) def info(filename): try: audio = mutagen.File(filename, options=ogg_formats) except AttributeError: audio = OggVorbis(filename) if audio is None and FLAC is not None: # FLAC with ID3 try: audio = FLAC(filename) except FLACNoHeaderError: pass if audio is None: raise IOError("file type could not be determined") Kind = type(audio) for klass in globals().values(): if Kind is getattr(klass, 'MutagenType', None): return klass(filename, audio) raise IOError("file type could not be determined") ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/_audio.py���������������������������������������������������������0000644�0001750�0001750�00000077222�12173213426�021222� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2005 Joe Wreschnig, Michael Urman # 2012 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation # Much of this code is highly optimized, because many of the functions # are called in tight loops. Don't change things just to make them # more readable, unless they're also faster. import os import shutil import time import re from quodlibet import const from quodlibet import util from quodlibet import config from quodlibet.util.uri import URI from quodlibet.util import HashableDict from quodlibet.util import human_sort_key as human from quodlibet.util.dprint import print_d, print_w # Used by __init__.py from quodlibet.util.tags import STANDARD_TAGS as USEFUL_TAGS from quodlibet.util.tags import MACHINE_TAGS MIGRATE = frozenset(("~#playcount ~#laststarted ~#lastplayed ~#added " "~#skipcount ~#rating ~bookmark").split()) PEOPLE = ("albumartist artist author composer ~performers originalartist " "lyricist arranger conductor").split() TAG_TO_SORT = { "artist": "artistsort", "album": "albumsort", "albumartist": "albumartistsort", "performersort": "performersort", "~performerssort": "~performerssort" } INTERN_NUM_DEFAULT = frozenset("~#lastplayed ~#laststarted ~#playcount " "~#skipcount ~#length ~#bitrate ~#filesize".split()) SORT_TO_TAG = dict([(v, k) for (k, v) in TAG_TO_SORT.iteritems()]) PEOPLE_SORT = [TAG_TO_SORT.get(k, k) for k in PEOPLE] FILESYSTEM_TAGS = "~filename ~basename ~dirname".split() # tags that should alone identify an album, ordered by descending preference UNIQUE_ALBUM_IDENTIFIERS = ["musicbrainz_albumid", "labelid"] class AudioFile(dict): """An audio file. It looks like a dict, but implements synthetic and tied tags via __call__ rather than __getitem__. This means __getitem__, get, and so on can be used for efficiency. If you need to sort many AudioFiles, you can use their sort_key attribute as a decoration.""" # New tags received from the backend will update the song fill_metadata = False # Container for multiple songs, while played new songs can start/end multisong = False # Part of a multisong streamsong = False # Can be added to the queue, playlists can_add = True # Is a real file is_file = True # Multiple tags for the same tag possible multiple_values = True format = "Unknown Audio File" mimes = [] @util.cached_property def __song_key(self): return (self("~#disc"), self("~#track"), human(self("artistsort")), self.get("musicbrainz_artistid", ""), human(self.get("title", "")), self.get("~filename")) @util.cached_property def album_key(self): return (human(self("albumsort", "")), self.get("album_grouping_key") or self.get("labelid") or self.get("musicbrainz_albumid") or "") @util.cached_property def sort_key(self): return [self.album_key, self.__song_key] @staticmethod def sort_by_func(tag): """Returns a fast sort function for a specific tag (or pattern). Some keys are already in the sort cache, so we can use them.""" def artist_sort(song): return song.sort_key[1][2] if callable(tag): return lambda song: human(tag(song)) elif tag == "artistsort": return artist_sort elif tag in FILESYSTEM_TAGS: return lambda song: util.fsdecode(song(tag), note=False) elif tag.startswith("~#") and "~" not in tag[2:]: return lambda song: song(tag) return lambda song: human(song(tag)) def __getstate__(self): """Don't pickle anything from __dict__""" pass def __setstate__(self, state): """Needed because we have defined getstate""" pass def __setitem__(self, key, value): dict.__setitem__(self, key, value) if not self.__dict__: return pop = self.__dict__.pop pop("album_key", None) pop("sort_key", None) pop("__song_key", None) def __delitem__(self, key): dict.__delitem__(self, key) if not self.__dict__: return pop = self.__dict__.pop pop("album_key", None) pop("sort_key", None) pop("__song_key", None) @property def key(self): return self["~filename"] @property def mountpoint(self): return self["~mountpoint"] def _album_id_values(self, use_artist=False): """Returns a "best attempt" conjunction (=AND) of album identifiers Tries the (probably) most specific keys first, then gets less accurate but more verbose (eg artist="foo" AND album="bar"). if use_artist is True, the track artist will also be used as a key if necessary. This breaks compilations, but does well for overloaded album names (eg "Greatest Hits") """ ret = HashableDict() for key in UNIQUE_ALBUM_IDENTIFIERS: val = self.get(key) if val: ret[key] = val break if not ret and "album" in self: # Add helpful identifiers where they exist for key in ["album", "albumartist", "album_grouping_key"]: val = self.get(key) if val: ret[key] = val if use_artist and "albumartist" not in ret and "artist" in self: ret["artist"] = self.get("artist") return ret """Returns a dict of tag:value items that together identify this song's album""" album_id_values = property(_album_id_values) def __cmp__(self, other): if not other: return -1 try: return cmp(self.sort_key, other.sort_key) except AttributeError: return -1 def __hash__(self): # Dicts aren't hashable by default, so we need a hash # function. Previously this used ~filename. That created a # situation when an object could end up in two buckets by # renaming files. So now it uses identity. return hash(id(self)) def __eq__(self, other): # And to preserve Python hash rules, we need a strict __eq__. return self is other def __ne__(self, other): return self is not other def reload(self): """Reload an audio file from disk. The caller is responsible for handling any errors.""" fn = self["~filename"] saved = {} for key in self: if key in MIGRATE: saved[key] = self[key] self.clear() self["~filename"] = fn self.__init__(fn) self.update(saved) def realkeys(self): """Returns a list of keys that are not internal, i.e. they don't have '~' in them.""" return filter(lambda s: s[:1] != "~", self.keys()) def __call__(self, key, default=u"", connector=" - "): """Return a key, synthesizing it if necessary. A default value may be given (like dict.get); the default default is an empty unicode string (even if the tag is numeric). If a tied tag ('a~b') is requested, the 'connector' keyword argument may be used to specify what it is tied with. For details on tied tags, see the documentation for util.tagsplit.""" if key[:1] == "~": key = key[1:] if "~" in key: # FIXME: decode ~filename etc. if not isinstance(default, basestring): return default return connector.join( filter(None, map(lambda x: isinstance(x, basestring) and x or str(x), map(lambda x: (isinstance(x, float) and "%.2f" % x) or x, map(self.__call__, util.tagsplit("~" + key)))))) or default elif key == "#track": try: return int(self["tracknumber"].split("/")[0]) except (ValueError, TypeError, KeyError): return default elif key == "#disc": try: return int(self["discnumber"].split("/")[0]) except (ValueError, TypeError, KeyError): return default elif key == "length": length = self.get("~#length") if length is None: return default else: return util.format_time(length) elif key == "#rating": return dict.get(self, "~" + key, const.DEFAULT_RATING) elif key == "rating": return util.format_rating(self("~#rating")) elif key == "people": join = "\n".join people = filter(None, map(self.__call__, PEOPLE)) if not people: return default people = join(people).split("\n") index = people.index return join([person for (i, person) in enumerate(people) if index(person) == i]) elif key == "peoplesort": join = "\n".join people = filter(None, map(self.__call__, PEOPLE_SORT)) people = join(people).split("\n") index = people.index return (join([person for (i, person) in enumerate(people) if index(person) == i]) or self("~people", default, connector)) elif key == "performers" or key == "performer": performers = {} for key in self.keys(): if key.startswith("performer:"): role = key.split(":", 1)[1] for value in self.list(key): try: performers[str(value)] except: performers[str(value)] = [] performers[str(value)].append(util.title(role)) values = [] if len(performers) > 0: for performer in performers: roles = '' i = 0 for role in performers[performer]: if i > 0: roles += ', ' roles += role i += 1 values.append("%s (%s)" % (performer, roles)) values.extend(self.list("performer")) if not values: return default return "\n".join(values) elif key == "performerssort" or key == "performersort": values = [] for key in self.keys(): if key.startswith("performersort:"): role = key.split(":", 1)[1] for value in self.list(key): values.append("%s (%s)" % (value, role)) values.extend(self.list("performersort")) return ("\n".join(values) or self("~performers", default, connector)) elif key == "basename": return os.path.basename(self["~filename"]) or self["~filename"] elif key == "dirname": return os.path.dirname(self["~filename"]) or self["~filename"] elif key == "uri": try: return self["~uri"] except KeyError: return URI.frompath(self["~filename"]) elif key == "format": return self.get("~format", self.format) elif key == "year": return self.get("date", default)[:4] elif key == "#year": try: return int(self.get("date", default)[:4]) except (ValueError, TypeError, KeyError): return default elif key == "originalyear": return self.get("originaldate", default)[:4] elif key == "#originalyear": try: return int(self.get("originaldate", default)[:4]) except (ValueError, TypeError, KeyError): return default elif key == "#tracks": try: return int(self["tracknumber"].split("/")[1]) except (ValueError, IndexError, TypeError, KeyError): return default elif key == "#discs": try: return int(self["discnumber"].split("/")[1]) except (ValueError, IndexError, TypeError, KeyError): return default elif key == "lyrics": try: fileobj = file(self.lyric_filename, "rU") except EnvironmentError: return default else: return fileobj.read().decode("utf-8", "replace") elif key == "filesize": return util.format_size(self("~#filesize", 0)) elif key == "playlists": # See Issue 876 # Avoid circular references from formats/__init__.py from quodlibet.util.collection import Playlist playlists = Playlist.playlists_featuring(self) return "\n".join([s.name for s in playlists]) or default elif key.startswith("#replaygain_"): try: val = self.get(key[1:], default) return round(float(val.split(" ")[0]), 2) except (ValueError, TypeError, AttributeError): return default elif key[:1] == "#": key = "~" + key if key in self: return self[key] elif key in INTERN_NUM_DEFAULT: return dict.get(self, key, 0) else: try: val = self[key[2:]] except KeyError: return default try: return int(val) except ValueError: try: return float(val) except ValueError: return default else: return dict.get(self, "~" + key, default) elif key == "title": title = dict.get(self, "title") if title is None: basename = self("~basename") basename = basename.decode(const.FSCODING, "replace") return "%s [%s]" % (basename, _("Unknown")) else: return title elif key in SORT_TO_TAG: try: return self[key] except KeyError: key = SORT_TO_TAG[key] return dict.get(self, key, default) @property def lyric_filename(self): """Returns the (potential) lyrics filename for this file""" # TODO: Use better filesystem sanitisation for lyrics file path. filename = self.comma("title").replace('/', '')[:128] + '.lyric' sub_dir = ((self.comma("lyricist") or self.comma("artist")) .replace('/', '')[:128]) path = os.path.join(util.expanduser("~/.lyrics"), sub_dir, filename) return util.fsencode(path) def comma(self, key): """Get all values of a tag, separated by commas. Synthetic tags are supported, but will be slower. If the value is numeric, that is returned rather than a list.""" if "~" in key or key == "title": v = self(key, u"") else: v = self.get(key, u"") if isinstance(v, (int, long, float)): return v else: return v.replace("\n", ", ") def list(self, key): """Get all values of a tag, as a list. Synthetic tags are supported, but will be slower. Numeric tags are not supported. An empty synthetic tag cannot be distinguished from a non-existent synthetic tag; both result in [].""" if "~" in key or key == "title": v = self(key, connector="\n") if v == "": return [] else: return v.split("\n") elif key in self: return self[key].split("\n") else: return [] def list_separate(self, key, connector=" - "): """Similar to list, but will return a list of all combinations for tied tags instead of one comma separated string""" if key[:1] == "~" and "~" in key[1:]: vals = \ filter(None, map(lambda x: isinstance(x, basestring) and x or str(x), map(lambda x: (isinstance(x, float) and "%.2f" % x) or x, (self(tag) for tag in util.tagsplit(key))))) vals = (val.split("\n") for val in vals) r = [[]] for x in vals: r = [i + [y] for y in x for i in r] return map(connector.join, r) else: return self.list(key) def exists(self): """Return true if the file still exists (or we can't tell).""" return os.path.exists(self["~filename"]) def valid(self): """Return true if the file cache is up-to-date (checked via mtime), or we can't tell.""" return (self.get("~#mtime", 0) and self["~#mtime"] == util.mtime(self["~filename"])) def mounted(self): """Return true if the disk the file is on is mounted, or the file is not on a disk.""" return os.path.ismount(self.get("~mountpoint", "/")) def can_change(self, k=None): """See if this file supports changing the given tag. This may be a limitation of the file type, or the file may not be writable. If no arguments are given, return a list of tags that can be changed, or True if 'any' tags can be changed (specific tags should be checked before adding).""" if k is None: if os.access(self["~filename"], os.W_OK): return True else: return [] try: if isinstance(k, unicode): k = k.encode("ascii") else: k.decode("ascii") except UnicodeError: return False return (k and "=" not in k and "~" not in k and os.access(self["~filename"], os.W_OK)) def rename(self, newname): """Rename a file. Errors are not handled. This shouldn't be used directly; use library.rename instead.""" if os.path.isabs(newname): util.mkdir(os.path.dirname(newname)) else: newname = os.path.join(self('~dirname'), newname) if not os.path.exists(newname): shutil.move(self['~filename'], newname) elif os.path.realpath(newname) != self['~filename']: raise ValueError self.sanitize(newname) def website(self): """Look for a URL in the audio metadata, or a Google search if no URL can be found.""" if "website" in self: return self.list("website")[0] for cont in self.list("contact") + self.list("comment"): c = cont.lower() if (c.startswith("http://") or c.startswith("https://") or c.startswith("www.")): return cont elif c.startswith("//www."): return "http:" + cont else: text = "http://www.google.com/search?q=" esc = lambda c: ord(c) > 127 and '%%%x' % ord(c) or c if "labelid" in self: text += ''.join(map(esc, self["labelid"])) else: artist = util.escape("+".join(self("artist").split())) album = util.escape("+".join(self("album").split())) artist = util.encode(artist) album = util.encode(album) artist = "%22" + ''.join(map(esc, artist)) + "%22" album = "%22" + ''.join(map(esc, album)) + "%22" text += artist + "+" + album text += "&ie=UTF8" return text def sanitize(self, filename=None): """Fill in metadata defaults. Find ~mountpoint, ~#mtime, ~#filesize and ~#added. Check for null bytes in tags.""" # Replace nulls with newlines, trimming zero-length segments for key, val in self.items(): if isinstance(val, basestring) and '\0' in val: self[key] = '\n'.join(filter(lambda s: s, val.split('\0'))) # Remove unnecessary defaults if key in INTERN_NUM_DEFAULT and val == 0: del self[key] if filename: self["~filename"] = filename elif "~filename" not in self: raise ValueError("Unknown filename!") if self.is_file: self["~filename"] = os.path.realpath(self["~filename"]) # Find mount point (terminating at "/" if necessary) head = self["~filename"] while "~mountpoint" not in self: head, tail = os.path.split(head) # Prevent infinite loop without a fully-qualified filename # (the unit tests use these). head = head or "/" if os.path.ismount(head): self["~mountpoint"] = head else: self["~mountpoint"] = "/" # Fill in necessary values. self.setdefault("~#added", int(time.time())) # For efficiency, do a single stat here. See Issue 504 try: stat = os.stat(self['~filename']) self["~#mtime"] = stat.st_mtime self["~#filesize"] = stat.st_size # Issue 342. This is a horrible approximation (due to headers) but # on FLACs, the most common case, this should be close enough if "~#bitrate" not in self: try: # kbps = bytes * 8 / seconds / 1000 self["~#bitrate"] = int(stat.st_size / (self["~#length"] * (1000 / 8))) except (KeyError, ZeroDivisionError): pass except OSError: self["~#mtime"] = 0 def to_dump(self): """A string of 'key=value' lines, similar to vorbiscomment output.""" s = [] for k in self.keys(): k = str(k) if isinstance(self[k], int) or isinstance(self[k], long): s.append("%s=%d" % (k, self[k])) elif isinstance(self[k], float): s.append("%s=%f" % (k, self[k])) else: for v2 in self.list(k): if isinstance(v2, str): s.append("%s=%s" % (k, v2)) else: s.append("%s=%s" % (k, util.encode(v2))) for k in (INTERN_NUM_DEFAULT - set(self.keys())): s.append("%s=%d" % (k, self.get(k, 0))) if "~#rating" not in self: s.append("~#rating=%f" % self("~#rating")) s.append("~format=%s" % self.format) s.append("") return "\n".join(s) def from_dump(self, text): """Parses the text created with to_dump and adds the found tags.""" for line in text.split("\n"): if not line: continue parts = line.split("=") key = parts[0] val = "=".join(parts[1:]) if key == "~format": pass elif key.startswith("~#"): try: self.add(key, int(val)) except ValueError: try: self.add(key, float(val)) except ValueError: pass else: self.add(key, val) def change(self, key, old_value, new_value): """Change 'old_value' to 'new_value' for the given metadata key. If the old value is not found, set the key to the new value.""" try: parts = self.list(key) try: parts[parts.index(old_value)] = new_value except ValueError: self[key] = new_value else: self[key] = "\n".join(parts) except KeyError: self[key] = new_value def add(self, key, value): """Add a value for the given metadata key.""" if key not in self: self[key] = value else: self[key] += "\n" + value def remove(self, key, value): """Remove a value from the given key; if the value is not found, remove all values for that key.""" if key not in self: return elif self[key] == value: del(self[key]) else: try: parts = self.list(key) parts.remove(value) self[key] = "\n".join(parts) except ValueError: if key in self: del(self[key]) # These should remain outside the loop below for performance reasons __cover_subdirs = frozenset( ["scan", "scans", "images", "covers", "artwork"]) __cover_exts = frozenset(["jpg", "jpeg", "png", "gif"]) __cover_positive_words = ["front", "cover", "frontcover", "jacket", "folder", "albumart", "edited"] __cover_positive_regexes = frozenset( map(lambda s: re.compile(r'(\b|_)' + s + r'(\b|_)'), __cover_positive_words)) __cover_negative_regexes = frozenset( map(lambda s: re.compile(r'(\b|_|)' + s + r'(\b|_)'), ["back", "inlay", "inset", "inside"])) def find_cover(self): """Return a file-like containing cover image data, or None if no cover is available.""" if not self.is_file: return # If preferred, check for picture stored in the metadata... if (config.getboolean("albumart", "prefer_embedded") and "~picture" in self): print_d("Preferring embedded art for %s" % self("~filename")) return self.get_format_cover() base = self('~dirname') images = [] # Issue 374: Specify artwork filename if config.getboolean("albumart", "force_filename"): path = os.path.join(base, config.get("albumart", "filename")) if os.path.isfile(path): images = [(100, path)] else: get_ext = lambda s: os.path.splitext(s)[1].lstrip('.') entries = [] try: entries = os.listdir(base) except EnvironmentError: pass fns = [] for entry in entries: lentry = entry.lower() if get_ext(lentry) in self.__cover_exts: fns.append((None, entry)) if lentry in self.__cover_subdirs: subdir = os.path.join(base, entry) sub_entries = [] try: sub_entries = os.listdir(subdir) except EnvironmentError: pass for sub_entry in sub_entries: lsub_entry = sub_entry.lower() if get_ext(lsub_entry) in self.__cover_exts: fns.append((entry, sub_entry)) for sub, fn in fns: score = 0 lfn = fn.lower() # check for the album label number if "labelid" in self and self["labelid"].lower() in lfn: score += 20 # Track-related keywords keywords = [k.lower().strip() for k in [self("artist"), self("albumartist"), self("album")] if len(k) > 1] score += 2 * sum(map(lfn.__contains__, keywords)) # Generic keywords score += 3 * sum(r.search(lfn) is not None for r in self.__cover_positive_regexes) negs = sum(r.search(lfn) is not None for r in self.__cover_negative_regexes) score -= 2 * negs #print("[%s - %s]: Album art \"%s\" scores %d (%s neg)." % ( # self("artist"), self("title"), fn, score, negs)) if score > 0: if sub is not None: fn = os.path.join(sub, fn) images.append((score, os.path.join(base, fn))) images.sort(reverse=True) for score, path in images: # could be a directory if not os.path.isfile(path): continue try: return file(path, "rb") except IOError: print_w(_("Failed reading album art \"%s\"") % path) if "~picture" in self: # Otherwise, we might have a picture stored in the metadata... return self.get_format_cover() return None def replay_gain(self, profiles, pre_amp_gain=0, fallback_gain=0): """Return the computed Replay Gain scale factor. profiles is a list of Replay Gain profile names ('album', 'track') to try before giving up. The special profile name 'none' will cause no scaling to occur. pre_amp_gain will be applied before checking for clipping. fallback_gain will be used when the song does not have replaygain information. """ for profile in profiles: if profile is "none": return 1.0 try: db = float(self["replaygain_%s_gain" % profile].split()[0]) peak = float(self.get("replaygain_%s_peak" % profile, 1)) except (KeyError, ValueError, IndexError): continue else: db += pre_amp_gain scale = 10. ** (db / 20) if scale * peak > 1: scale = 1.0 / peak # don't clip return min(15, scale) else: return min(15, 10. ** ((fallback_gain + pre_amp_gain) / 20)) def write(self): """Write metadata back to the file.""" raise NotImplementedError def __get_bookmarks(self): marks = [] invalid = [] for line in self.list("~bookmark"): try: time, mark = line.split(" ", 1) except: invalid.append((-1, line)) else: try: time = util.parse_time(time, None) except: invalid.append((-1, line)) else: if time >= 0: marks.append((time, mark)) else: invalid.append((-1, line)) marks.sort() marks.extend(invalid) return marks def __set_bookmarks(self, marks): result = [] for time, mark in marks: if time < 0: raise ValueError("mark times must be positive") result.append(u"%s %s" % (util.format_time(time), mark)) result = u"\n".join(result) if result: self["~bookmark"] = result elif "~bookmark" in self: del(self["~bookmark"]) bookmarks = property( __get_bookmarks, __set_bookmarks, doc="""Parse and return song position bookmarks, or set them. Accessing this returns a copy, so song.bookmarks.append(...) will not work; you need to do marks = song.bookmarks marks.append(...) song.bookmarks = marks""") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/wav.py������������������������������������������������������������0000644�0001750�0001750�00000001647�12161032160�020544� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import wave from quodlibet.formats._audio import AudioFile extensions = [".wav"] class WAVEFile(AudioFile): format = "WAVE" mimes = ["audio/wav", "audio/x-wav", "audio/wave"] def __init__(self, filename): f = wave.open(filename, "rb") self["~#length"] = f.getnframes() // f.getframerate() self.sanitize(filename) def sanitize(self, filename): super(WAVEFile, self).sanitize(filename) self["title"] = os.path.basename(self["~filename"])[:-4] def write(self): pass def can_change(self, k=None): if k is None: return ["artist"] else: return k == "artist" info = WAVEFile types = [WAVEFile] �����������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/mpc.py������������������������������������������������������������0000644�0001750�0001750�00000003004�12161032160�020513� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2005 Joe Wreschnig, Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from quodlibet.formats._apev2 import APEv2File extensions = [".mpc", ".mp+"] try: from mutagen.musepack import Musepack except (ImportError, OSError): extensions = [] class MPCFile(APEv2File): format = "Musepack" mimes = ["audio/x-musepack", "audio/x-mpc"] def __init__(self, filename): audio = Musepack(filename) super(MPCFile, self).__init__(filename, audio) self["~#length"] = int(audio.info.length) self["~#bitrate"] = int(audio.info.bitrate / 1000) try: if audio.info.title_gain: track_g = u"%+0.2f dB" % audio.info.title_gain self.setdefault("replaygain_track_gain", track_g) if audio.info.album_gain: album_g = u"%+0.2f dB" % audio.info.album_gain self.setdefault("replaygain_album_gain", album_g) if audio.info.title_peak: track_p = unicode(audio.info.title_peak * 2) self.setdefault("replaygain_track_peak", track_p) if audio.info.album_peak: album_p = unicode(audio.info.album_peak * 2) self.setdefault("replaygain_album_peak", album_p) except AttributeError: pass self.sanitize(filename) info = MPCFile types = [MPCFile] ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/mp3.py������������������������������������������������������������0000644�0001750�0001750�00000001042�12161032160�020433� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2006 Joe Wreschnig, Michael Urman, Niklas Janlert # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from mutagen.mp3 import MP3 from quodlibet.formats._id3 import ID3File extensions = [".mp3", ".mp2"] class MP3File(ID3File): format = "MP3" mimes = ["audio/mp3", "audio/x-mp3", "audio/mpeg", "audio/mpg", "audio/x-mpeg"] Kind = MP3 info = MP3File types = [MP3File] ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/remote.py���������������������������������������������������������0000644�0001750�0001750�00000002077�12161032160�021240� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2005 Joe Wreschnig, Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from quodlibet.formats._audio import AudioFile from quodlibet.util.uri import URI extensions = [] class RemoteFile(AudioFile): is_file = False fill_metadata = True format = "Remote File" def __init__(self, uri): self["~uri"] = self["~filename"] = str(URI(uri)) self["~mountpoint"] = "" self.sanitize(uri) def rename(self, newname): pass def reload(self): pass def exists(self): return True def valid(self): return True def mounted(self): return True def write(self): raise TypeError("RemoteFiles do not support writing!") def can_change(self, k=None): if k is None: return [] else: return False key = property(lambda self: self["~uri"]) info = RemoteFile types = [RemoteFile] �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/wavpack.py��������������������������������������������������������0000644�0001750�0001750�00000001332�12161032160�021372� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2005 Joe Wreschnig, Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from quodlibet.formats._apev2 import APEv2File extensions = [".wv"] try: from mutagen.wavpack import WavPack except ImportError: extensions = [] class WavpackFile(APEv2File): format = "WavPack" mimes = ["audio/x-wavpack"] def __init__(self, filename): audio = WavPack(filename) super(WavpackFile, self).__init__(filename, audio) self["~#length"] = int(audio.info.length) self.sanitize(filename) info = WavpackFile types = [WavpackFile] ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/midi.py�����������������������������������������������������������0000644�0001750�0001750�00000011670�12161032160�020666� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import struct from quodlibet.formats._audio import AudioFile class MidiError(Exception): pass class MidiFile(AudioFile): format = "MIDI" mimes = ["audio/midi", "audio/x-midi"] def __init__(self, filename): h = open(filename, "rb") try: if h.read(4) != "MThd": raise MidiError("Not a Midi file") h.seek(0, 0) try: self["~#length"] = read_midi_length(h) except Exception: pass finally: h.close() self.sanitize(filename) def write(self): pass def reload(self, *args): title = self.get("title") super(MidiFile, self).reload(*args) if title is not None: self.setdefault("title", title) def can_change(self, k=None): if k is None: return ["title"] else: return k == "title" info = MidiFile types = [MidiFile] extensions = [".mid"] TEMPO, MIDI = range(2) def var_int(string): val = 0 i = 0 while 1: x = ord(string[i]) i += 1 val = (val << 7) + (x & 0x7F) if not (x & 0x80): return val, i def read_track(chunk): """Retuns a list of midi events and tempo change events""" # Deviations: The running status should be reset on non midi events, but # some files contain meta events inbetween. # Offset and time signature are not used. tempos = [] events = [] deltasum = 0 status = "" while chunk: delta, i = var_int(chunk) deltasum += delta chunk = chunk[i:] event_type = chunk[0] if event_type == "\xFF": num, i = var_int(chunk[2:]) size = 2 + i + num data = chunk[size - num:size] # TODO: support offset/time signature if chunk[1] == "\x51": tempo = struct.unpack(">I", "\x00" + data)[0] tempos.append((deltasum, TEMPO, tempo)) chunk = chunk[size:] elif event_type in ("\xF0", "\xF7"): chunk = chunk[1 + sum(var_int(chunk[1:])):] else: # if < 0x80 take the type from the previous midi event event_num = ord(event_type) if event_num < 0x80: offset = -1 event_num = ord(status) elif event_num >= 0xF0: # garbage... better stop break else: offset = 0 status = event_type events.append((deltasum, MIDI, delta)) if event_num >> 4 in (0xD, 0xC): chunk = chunk[2 + offset:] else: chunk = chunk[3 + offset:] return events, tempos def read_midi_length(fileobj): """Returns the duration in seconds. Can raise all kind of errors...""" def read_chunk(fileobj): info = fileobj.read(8) chunklen = struct.unpack(">I", info[4:])[0] return info[:4], fileobj.read(chunklen) identifier, chunk = read_chunk(fileobj) if identifier != "MThd": raise MidiError("Not a MIDI file") format_ = struct.unpack(">H", chunk[:2])[0] if format_ > 1: raise MidiError("Not supported format %d" % format_) ntracks = struct.unpack(">H", chunk[2:4])[0] tickdiv = struct.unpack(">H", chunk[4:6])[0] if tickdiv >> 15: # fps = (-(tickdiv >> 8)) & 0xFF # subres = tickdiv & 0xFF # never saw one of those raise MidiError("Not supported timing interval") # get a list of events and tempo changes for each track tracks = [] first_tempos = None for tracknum in xrange(ntracks): identifier, chunk = read_chunk(fileobj) if identifier != "MTrk": break events, tempos = read_track(chunk) # In case of format == 1, copy the first tempo list to all tracks first_tempos = first_tempos or tempos if format_ == 1: tempos = list(first_tempos) events += tempos events.sort() tracks.append(events) # calculate the duration of each track durations = [] for events in tracks: tempo = 500000 parts = [] deltasum = 0 for (dummy, type_, data) in events: if type_ == TEMPO: parts.append((deltasum, tempo)) tempo = data deltasum = 0 else: deltasum += data parts.append((deltasum, tempo)) duration = 0 for (deltasum, tempo) in parts: quarter, tpq = deltasum / float(tickdiv), tempo duration += (quarter * tpq) duration /= 10 ** 6 durations.append(duration) # return the longest one return max(durations) ������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/formats/spc.py������������������������������������������������������������0000644�0001750�0001750�00000004032�12161032160�020523� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2007 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os from quodlibet.formats._audio import AudioFile extensions = [".spc"] class SPCFile(AudioFile): format = "SPC700" def __init__(self, filename): h = open(filename, "rb") try: head = h.read(46) if len(head) != 46 or head[:27] != 'SNES-SPC700 Sound File Data': raise IOError("Not a valid SNES-SPC700 file") if head[35] == '\x1a': data = h.read(210) if len(data) == 210: self.update(parse_id666(data)) finally: h.close() self.setdefault("title", os.path.basename(filename)[:-4]) self.sanitize(filename) def write(self): pass def can_change(self, k=None): TAGS = ["artist", "album", "title", "comments"] if k is None: return TAGS else: return k in TAGS def parse_id666(data): #http://snesmusic.org/files/spc_file_format.txt tags = {} tags["title"] = data[:32] tags["album"] = data[32:64] tags["dumper"] = data[64:80] tags["comments"] = data[80:112] # Artist differs based on binary or text mode, which is implicit. # Instead of detecting "perfectly", we'll just detect enough for # the "artist" field. This fails for artist names that begin with # numbers or symbols less than ascii value A. if data[130] < 'A': try: tags["~#length"] = int(data[123:126].strip("\x00")) except ValueError: pass tags["artist"] = data[131:163] else: tags["artist"] = data[130:162] for k in tags.keys(): if k[:2] == "~#": continue tags[k] = tags[k].replace("\x00", "").decode("ascii", "ignore") if not tags[k]: del tags[k] return tags info = SPCFile types = [SPCFile] ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/���������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�016675� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/i18n.py��������������������������������������������������������������0000644�0001750�0001750�00000004543�12161032160�020026� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import __builtin__ import gettext import os class GlibTranslations(gettext.GNUTranslations): """Provide a glib-like translation API for Python. This class adds support for qgettext (and uqgettext) mirroring glib's Q_ macro, which allows for disambiguation of identical source strings. It also installs N_, Q_, and ngettext into the __builtin__ namespace. It can also be instantiated and used with any valid MO files (though it won't be able to translate anything, of course). """ def __init__(self, fp=None): self.path = (fp and fp.name) or "" self._catalog = {} self.plural = lambda n: n != 1 gettext.GNUTranslations.__init__(self, fp) def qgettext(self, msgid): msgstr = self.gettext(msgid) if msgstr == msgid: try: return msgstr.split("|", 1)[1] except IndexError: return msgstr else: return msgstr def uqgettext(self, msgid): msgstr = self.ugettext(msgid) if msgstr == msgid: try: return msgstr.split(u"|", 1)[1] except IndexError: return msgstr else: return msgstr def install(self, unicode=False): # set by tests if "QUODLIBET_NO_TRANS" in os.environ: return if unicode: _ = self.ugettext _Q = self.uqgettext ngettext = self.ungettext _N = unicode else: _ = self.gettext _Q = self.qgettext ngettext = self.ngettext _N = lambda s: s test_key = "QUODLIBET_TEST_TRANS" if test_key in os.environ: text = os.environ[test_key] def wrap(f): def g(*args): return text + f(*args) + text return g _ = wrap(_) _Q = wrap(_Q) _N = wrap(_N) ngettext = wrap(ngettext) __builtin__.__dict__["_"] = _ __builtin__.__dict__["Q_"] = _Q __builtin__.__dict__["N_"] = _N __builtin__.__dict__["ngettext"] = ngettext �������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/logging.py�����������������������������������������������������������0000644�0001750�0001750�00000001676�12173213426�020712� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������import os import quodlibet.util from quodlibet.const import LOGDIR LOGS = {} MAX_LOG_SIZE = 1000 GENERAL = _("General") def log(string, log=None): if isinstance(string, unicode): string = string.encode("utf-8", "replace") log = log or GENERAL LOGS.setdefault(log, []).append(string) while len(LOGS[log]) > MAX_LOG_SIZE: LOGS[log].pop(0) def names(): names = sorted(LOGS.keys()) if GENERAL in names: names.remove(GENERAL) names.insert(0, GENERAL) return names def contents(name): return LOGS.get(name, [_("No log available.")]) def dump(path=LOGDIR): try: quodlibet.util.mkdir(path) for name in LOGS.keys(): filename = os.path.join(path, name + ".log") fileobj = file(filename, "w") fileobj.write("\n".join(LOGS[name]) + "\n") fileobj.close() except (IOError, OSError): print_w("Unable to dump logs.") ������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/library.py�����������������������������������������������������������0000644�0001750�0001750�00000003613�12161032160�020710� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2012 Joe Wreschnig, Michael Urman, Iñigo Serna, # Christoph Reiter, Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from quodlibet import app from quodlibet import config from quodlibet import util from quodlibet.qltk.notif import Task from quodlibet.util.dprint import print_d from quodlibet.util import copool from quodlibet.parse import Query from quodlibet.qltk.songlist import SongList def background_filter(): bg = config.get("browsers", "background").decode('utf-8') if not bg: return try: return Query(bg, SongList.star).search except Query.error: pass def scan_libary(library, force): """Start the global library rescan If force is True reload all existing valid items. """ paths = util.split_scan_dirs(config.get("settings", "scan")) exclude = config.get("library", "exclude").split(":") copool.add(library.rebuild, paths, force, exclude, cofuncid="library", funcid="library") def emit_signal(songs, signal="changed", block_size=50, name=None, cofuncid=None): """ A generator that signals `signal` on the library in blocks of `block_size`. Useful for copools. """ i = 0 with Task(_("Library"), name or signal) as task: if cofuncid: task.copool(cofuncid) total = len(songs) while i < total: more = songs[i:i + block_size] if not more: return if 0 == ((i / block_size) % 10): print_d("Signalling '%s' (%d/%d songs)" % (signal, i, total)) task.update(float(i) / total) app.library.emit(signal, more) i += block_size yield ���������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/titlecase.py���������������������������������������������������������0000644�0001750�0001750�00000003517�12161032160�021224� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2007 Javier Kohen, 2010 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import unicodedata def iswbound(char): """Returns whether the given character is a word boundary.""" category = unicodedata.category(char) # If it's a space separator or punctuation return 'Zs' == category or 'Sk' == category or 'P' == category[0] def utitle(string): """Title-case a string using a less destructive method than str.title.""" new_string = string[0].capitalize() # It's possible we need to capitalise the second character... cap = iswbound(string[0]) for i in xrange(1, len(string)): s = string[i] prev = string[i - 1] # Special case apostrophe in the middle of a word. # Also, extra case to deal with Irish-style names (eg O'Conner) if u"'" == s \ and string[i - 1].isalpha() \ and not (i > 1 and string[i - 2].isspace() and prev.lower() == u"o"): cap = False elif iswbound(s): cap = True elif cap and s.isalpha(): cap = False s = s.capitalize() else: cap = False new_string += s return new_string def title(string, locale="utf-8"): """Title-case a string using a less destructive method than str.title.""" if not string: return u"" # if the string is all uppercase, lowercase it - Erich/Javier # Lots of Japanese songs use entirely upper-case English titles, # so I don't like this change... - JoeW #if string == string.upper(): string = string.lower() if not isinstance(string, unicode): string = string.decode(locale) return utitle(string) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/songwrapper.py�������������������������������������������������������0000644�0001750�0001750�00000006554�12173213426�021633� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2005 Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from quodlibet import util from quodlibet import qltk from quodlibet.qltk.wlw import WritingWindow class SongWrapper(object): __slots__ = ['_song', '_updated', '_needs_write'] def __init__(self, song): self._song = song self._updated = False self._needs_write = False def _was_updated(self): return self._updated def __setitem__(self, key, value): if key in self and self[key] == value: return self._updated = True self._needs_write = (self._needs_write or not key.startswith("~")) return self._song.__setitem__(key, value) def __delitem__(self, key): retval = self._song.__delitem__(key) self._updated = True self._needs_write = (self._needs_write or not key.startswith("~")) return retval def __getattr__(self, attr): return getattr(self._song, attr) def __setattr__(self, attr, value): # Don't set our attributes on the song. However, we only want to # set attributes the song already has. So, if the attribute # isn't one of ours, and isn't one of the song's, hand it off # to our parent's attribute handler for error handling. if attr in self.__slots__: return super(SongWrapper, self).__setattr__(attr, value) elif hasattr(self._song, attr): return setattr(self._song, attr, value) else: return super(SongWrapper, self).__setattr__(attr, value) def __cmp__(self, other): try: return cmp(self._song, other._song) except: return cmp(self._song, other) def __getitem__(self, *args): return self._song.__getitem__(*args) def __contains__(self, key): return key in self._song def __call__(self, *args): return self._song(*args) def update(self, other): self._updated = True self._needs_write = True return self._song.update(other) def rename(self, newname): self._updated = True return self._song.rename(newname) def ListWrapper(songs): def wrap(song): if song is None: return None else: return SongWrapper(song) return map(wrap, songs) def check_wrapper_changed(library, parent, songs): needs_write = filter(lambda s: s._needs_write, songs) if needs_write: win = WritingWindow(parent, len(needs_write)) for song in needs_write: try: song._song.write() except Exception: qltk.ErrorMessage( None, _("Unable to edit song"), _("Saving <b>%s</b> failed. The file " "may be read-only, corrupted, or you " "do not have permission to edit it.") % util.escape(song('~basename'))).run() if win.step(): break win.destroy() changed = [] for song in songs: if song._was_updated(): changed.append(song._song) elif not song.valid() and song.exists(): library.reload(song._song) library.changed(changed) ����������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/trash.py�������������������������������������������������������������0000644�0001750�0001750�00000007230�12173213426�020375� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2011 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import stat import sys import errno import urllib import time from os.path import join, islink, abspath, dirname from os.path import isdir, basename, exists, splitext from quodlibet.util import xdg_get_data_home, find_mount_point class TrashError(EnvironmentError): pass def is_sticky(path): return bool(os.stat(path).st_mode & stat.S_ISVTX) def get_fd_trash_dir(path): """Returns the right trash directory for the given path.""" path = abspath(path) mount = find_mount_point(path) xdg_data_home = xdg_get_data_home() xdg_mount = find_mount_point(xdg_data_home) if mount == xdg_mount: trash_home = join(xdg_data_home, "Trash") return trash_home else: root = join(mount, ".Trash") uid = str(os.getuid()) if isdir(root) and not islink(root) and is_sticky(root): root = join(root, uid) else: root = join(mount, ".Trash-" + uid) return root def trash_free_desktop(path): """Partial implementation of http://www.freedesktop.org/wiki/Specifications/trash-spec No copy fallback, either it can be moved on the same FS or it failes. Also doesn't work for files in the trash directory. """ path = abspath(path) if not exists(path): raise TrashError("Path %s does not exist." % path) trash_dir = abspath(get_fd_trash_dir(path)) # to make things easier if path.startswith(join(trash_dir, "")) or path == trash_dir: raise TrashError("Can't move files to the trash from within the" "trash directory.") files = join(trash_dir, "files") info = join(trash_dir, "info") for d in (files, info): if not isdir(d): os.makedirs(d, 0700) info_ext = ".trashinfo" name = basename(path) flags = os.O_EXCL | os.O_CREAT | os.O_WRONLY mode = 0644 try: info_path = join(info, name + info_ext) info_fd = os.open(info_path, flags, mode) except OSError, e: if e.errno != errno.EEXIST: raise i = 2 while 1: head, tail = splitext(name) temp_name = "%s.%d%s" % (head, i, tail) info_path = join(info, temp_name + info_ext) try: info_fd = os.open(info_path, flags, mode) except OSError, e: if e.errno != errno.EEXIST: raise i += 1 continue name = temp_name break parent = dirname(trash_dir) if path.startswith(join(parent, "")): norm_path = path[len(join(parent, "")):] else: norm_path = path del_date = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime()) data = "[Trash Info]\n" data += "Path=%s\n" % urllib.pathname2url(norm_path) data += "DeletionDate=%s\n" % del_date os.write(info_fd, data) os.close(info_fd) try: # We only move to the same file system.. so this is ok. os.rename(path, join(files, name)) except OSError: # In case something failes, remove the info file and raise again os.unlink(info_path) raise def can_trash(): """If the current platform supports moving files into a trash can.""" return (os.name == "posix" and sys.platform != "darwin") def trash(path): if os.name == "posix" and sys.platform != "darwin": trash_free_desktop(path) else: raise NotImplementedError ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/massagers.py���������������������������������������������������������0000644�0001750�0001750�00000017757�12161032160�021247� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2011 Joe Wreschnig, Michael Urman, Iñigo Serna, Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import locale import re class Massager(object): """Massage a tag value from various 'okay' formats to the 'correct' format.""" tags = [] error = "Metaerror. This should be overridden in subclasses." options = [] def validate(self, value): """Returns a validated value, or False if invalid""" raise NotImplementedError def is_valid(self, value): """Returns True if a field is valid, False if not""" return bool(self.validate(value)) class DateMassager(Massager): tags = ["date"] error = _("The date must be entered in 'YYYY', 'YYYY-MM-DD' or " "'YYYY-MM-DD HH:MM:SS' format.") __match = re.compile(r"^\d{4}([-.]\d{2}([-.]\d{2}([T ]\d{2}" "([:.]\d{2}([:.]\d{2})?)?)?)?)?$").match def validate(self, value): value = value.strip().replace(".", "-").replace("/", "-") return self.__match(value) and value class GainMassager(Massager): tags = ["replaygain_album_gain", "replaygain_track_gain"] error = _("Replay Gain gains must be entered in 'x.yy dB' format.") __match = re.compile(r"^[+-]\d+\.?\d+?\s+dB$").match def validate(self, value): if self.__match(value): return value else: try: f = float(value.split()[0]) except (IndexError, TypeError, ValueError): try: f = locale.atof(value.split()[0]) except (IndexError, TypeError, ValueError): return False else: return ("%+f" % f).rstrip("0") + " dB" class PeakMassager(Massager): tags = ["replaygain_album_peak", "replaygain_track_peak"] error = _("Replay Gain peaks must be entered in 'x.yy' format.") def validate(self, value): value = value.strip() try: f = float(value) except (TypeError, ValueError): try: f = locale.atof(value) except (TypeError, ValueError): return False else: return (f >= 0) and (f < 2) and str(f) class MBIDMassager(Massager): tags = ["musicbrainz_trackid", "musicbrainz_albumid", "musicbrainz_artistid", "musicbrainz_albumartistid", "musicbrainz_trmid", "musicip_puid"] error = _("MusicBrainz IDs must be in UUID format.") def validate(self, value): value = value.encode('ascii', 'replace') value = filter(str.isalnum, value.strip().lower()) try: int(value, 16) except ValueError: return False else: if len(value) != 32: return False else: return "-".join([value[:8], value[8:12], value[12:16], value[16:20], value[20:]]) class MBAlbumStatus(Massager): tags = ["musicbrainz_albumstatus"] # Translators: Leave "official", "promotional", and "bootleg" # untranslated. They are the three possible literal values. error = _("MusicBrainz release status must be 'official', " "'promotional', or 'bootleg'.") options = ["official", "promotional", "bootleg"] def validate(self, value): return value in self.options and value class LanguageMassager(Massager): tags = ["language"] error = _("Language must be an ISO 639-2 three-letter code") # Lovingly adapted from http://www.loc.gov/standards/iso639-2/ ISO_639_2 = [ 'aar', 'abk', 'ace', 'ach', 'ada', 'ady', 'afa', 'afh', 'afr', 'ain', 'aka', 'akk', 'alb', 'sqi', 'ale', 'alg', 'alt', 'amh', 'ang', 'anp', 'apa', 'ara', 'arc', 'arg', 'arm', 'hye', 'arn', 'arp', 'art', 'arw', 'asm', 'ast', 'ath', 'aus', 'ava', 'ave', 'awa', 'aym', 'aze', 'bad', 'bai', 'bak', 'bal', 'bam', 'ban', 'baq', 'eus', 'bas', 'bat', 'bej', 'bel', 'bem', 'ben', 'ber', 'bho', 'bih', 'bik', 'bin', 'bis', 'bla', 'bnt', 'bos', 'bra', 'bre', 'btk', 'bua', 'bug', 'bul', 'bur', 'mya', 'byn', 'cad', 'cai', 'car', 'cat', 'cau', 'ceb', 'cel', 'cha', 'chb', 'che', 'chg', 'chi', 'zho', 'chk', 'chm', 'chn', 'cho', 'chp', 'chr', 'chu', 'chv', 'chy', 'cmc', 'cop', 'cor', 'cos', 'cpe', 'cpf', 'cpp', 'cre', 'crh', 'crp', 'csb', 'cus', 'cze', 'ces', 'dak', 'dan', 'dar', 'day', 'del', 'den', 'dgr', 'din', 'div', 'doi', 'dra', 'dsb', 'dua', 'dum', 'dut', 'nld', 'dyu', 'dzo', 'efi', 'egy', 'eka', 'elx', 'eng', 'enm', 'epo', 'est', 'ewe', 'ewo', 'fan', 'fao', 'fat', 'fij', 'fil', 'fin', 'fiu', 'fon', 'fre', 'fra', 'frm', 'fro', 'frr', 'frs', 'fry', 'ful', 'fur', 'gaa', 'gay', 'gba', 'gem', 'geo', 'kat', 'ger', 'deu', 'gez', 'gil', 'gla', 'gle', 'glg', 'glv', 'gmh', 'goh', 'gon', 'gor', 'got', 'grb', 'grc', 'gre', 'ell', 'grn', 'gsw', 'guj', 'gwi', 'hai', 'hat', 'hau', 'haw', 'heb', 'her', 'hil', 'him', 'hin', 'hit', 'hmn', 'hmo', 'hrv', 'hsb', 'hun', 'hup', 'iba', 'ibo', 'ice', 'isl', 'ido', 'iii', 'ijo', 'iku', 'ile', 'ilo', 'ina', 'inc', 'ind', 'ine', 'inh', 'ipk', 'ira', 'iro', 'ita', 'jav', 'jbo', 'jpn', 'jpr', 'jrb', 'kaa', 'kab', 'kac', 'kal', 'kam', 'kan', 'kar', 'kas', 'kau', 'kaw', 'kaz', 'kbd', 'kha', 'khi', 'khm', 'kho', 'kik', 'kin', 'kir', 'kmb', 'kok', 'kom', 'kon', 'kor', 'kos', 'kpe', 'krc', 'krl', 'kro', 'kru', 'kua', 'kum', 'kur', 'kut', 'lad', 'lah', 'lam', 'lao', 'lat', 'lav', 'lez', 'lim', 'lin', 'lit', 'lol', 'loz', 'ltz', 'lua', 'lub', 'lug', 'lui', 'lun', 'luo', 'lus', 'mac', 'mkd', 'mad', 'mag', 'mah', 'mai', 'mak', 'mal', 'man', 'mao', 'mri', 'map', 'mar', 'mas', 'may', 'msa', 'mdf', 'mdr', 'men', 'mga', 'mic', 'min', 'mis', 'mkh', 'mlg', 'mlt', 'mnc', 'mni', 'mno', 'moh', 'mon', 'mos', 'mul', 'mun', 'mus', 'mwl', 'mwr', 'myn', 'myv', 'nah', 'nai', 'nap', 'nau', 'nav', 'nbl', 'nde', 'ndo', 'nds', 'nep', 'new', 'nia', 'nic', 'niu', 'nno', 'nob', 'nog', 'non', 'nor', 'nqo', 'nso', 'nub', 'nwc', 'nya', 'nym', 'nyn', 'nyo', 'nzi', 'oci', 'oji', 'ori', 'orm', 'osa', 'oss', 'ota', 'oto', 'paa', 'pag', 'pal', 'pam', 'pan', 'pap', 'pau', 'peo', 'per', 'fas', 'phi', 'phn', 'pli', 'pol', 'pon', 'por', 'pra', 'pro', 'pus', 'que', 'raj', 'rap', 'rar', 'roa', 'roh', 'rom', 'rum', 'ron', 'run', 'rup', 'rus', 'sad', 'sag', 'sah', 'sai', 'sal', 'sam', 'san', 'sas', 'sat', 'scn', 'sco', 'sel', 'sem', 'sga', 'sgn', 'shn', 'sid', 'sin', 'sio', 'sit', 'sla', 'slo', 'slk', 'slv', 'sma', 'sme', 'smi', 'smj', 'smn', 'smo', 'sms', 'sna', 'snd', 'snk', 'sog', 'som', 'son', 'sot', 'spa', 'srd', 'srn', 'srp', 'srr', 'ssa', 'ssw', 'suk', 'sun', 'sus', 'sux', 'swa', 'swe', 'syc', 'syr', 'tah', 'tai', 'tam', 'tat', 'tel', 'tem', 'ter', 'tet', 'tgk', 'tgl', 'tha', 'tib', 'bod', 'tig', 'tir', 'tiv', 'tkl', 'tlh', 'tli', 'tmh', 'tog', 'ton', 'tpi', 'tsi', 'tsn', 'tso', 'tuk', 'tum', 'tup', 'tur', 'tut', 'tvl', 'twi', 'tyv', 'udm', 'uga', 'uig', 'ukr', 'umb', 'und', 'urd', 'uzb', 'vai', 'ven', 'vie', 'vol', 'vot', 'wak', 'wal', 'war', 'was', 'wel', 'cym', 'wen', 'wln', 'wol', 'xal', 'xho', 'yao', 'yap', 'yid', 'yor', 'ypk', 'zap', 'zbl', 'zen', 'zha', 'znd', 'zul', 'zun', 'zxx', 'zza', ] options = ISO_639_2 tags = ["language"] def validate(self, value): # Issue 439: Actually, allow free-text through return value def is_valid(self, value): # Override, to allow empty string to be a valid language (freetext) return True tags = {} for f in globals().values(): if isinstance(f, type) and issubclass(f, Massager): for t in f.tags: tags[t] = f() del(f) del(t) �����������������quodlibet-3.0.2/quodlibet/util/thumbnails.py��������������������������������������������������������0000644�0001750�0001750�00000013006�12173213426�021420� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2009 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import tempfile import hashlib as hash from gi.repository import GdkPixbuf from quodlibet.util import mtime, fsnative, pathname2url from quodlibet.util import xdg_get_cache_home, mkdir from quodlibet.const import USERDIR def add_border(pixbuf, val, round=False): """Add a 1px border to the pixbuf and round of the edges if needed. val is the border brightness from 0 to 255""" c = (val << 24) | (val << 16) | (val << 8) | 0xFF w, h = pixbuf.get_width(), pixbuf.get_height() rgb = GdkPixbuf.Colorspace.RGB newpb = GdkPixbuf.Pixbuf.new(rgb, True, 8, w + 2, h + 2) newpb.fill(c) pixbuf.copy_area(0, 0, w, h, newpb, 1, 1) if round: m = (c & 0xFFFFFF00) | 0xDD p = (c & 0xFFFFFF00) | 0xBB o = (c & 0xFFFFFF00) | 0x70 n = (c & 0xFFFFFF00) | 0x40 l = -1 e = -2 mask = ( (0, 0, n, p), (0, o, m, l), (n, m, e, e), (p, l, e, e) ) overlay = GdkPixbuf.Pixbuf.new(rgb, True, 8, 1, 1) overlay.fill(m) for y, row in enumerate(mask): for x, pix in enumerate(row): for xn, yn in [(x, y), (w + 1 - x, y), (w + 1 - x, h + 1 - y), (x, h + 1 - y)]: if pix == l: overlay.composite(newpb, xn, yn, 1, 1, 0, 0, 1, 1, GdkPixbuf.InterpType.NEAREST, 70) elif pix != e: newpb.new_subpixbuf(xn, yn, 1, 1).fill(pix) return newpb def calc_scale_size(boundary, size, scale_up=True): """Returns the biggest possible size to fit into the boundary, respecting the aspect ratio.""" bwidth, bheight = boundary iwidth, iheight = size scale_w, scale_h = iwidth, iheight if iwidth > bwidth or iheight > bheight or scale_up: bratio = float(bwidth) / bheight iratio = float(iwidth) / iheight if iratio > bratio: scale_w = bwidth scale_h = int(bwidth / iratio) else: scale_w = int(bheight * iratio) scale_h = bheight return scale_w, scale_h def scale(pixbuf, boundary, scale_up=True, force_copy=False): """Scale a pixbuf so it fits into the boundary. (preserves image aspect ratio)""" size = pixbuf.get_width(), pixbuf.get_height() scale_w, scale_h = calc_scale_size(boundary, size, scale_up) if (scale_w, scale_h) == size: if force_copy: return pixbuf.copy() return pixbuf return pixbuf.scale_simple(scale_w, scale_h, GdkPixbuf.InterpType.BILINEAR) def get_thumbnail_folder(): """Returns a path to an existing folder""" if os.name == "nt": thumb_folder = os.path.join(USERDIR, "thumbnails") else: cache_folder = os.path.join(xdg_get_cache_home(), "thumbnails") thumb_folder = os.path.expanduser('~/.thumbnails') if os.path.exists(cache_folder) or not os.path.exists(thumb_folder): thumb_folder = cache_folder mkdir(thumb_folder, 0700) return thumb_folder def get_thumbnail(path, boundary): """Get a thumbnail of an image. Will create/use a thumbnail in the user's thumbnail directory if possible. Follows the Free Desktop specification. http://specifications.freedesktop.org/thumbnail-spec/""" width, height = boundary # embedded thumbnails come from /tmp/ # and too big thumbnails make no sense if path.startswith(tempfile.gettempdir()) or \ width > 256 or height > 256 or mtime(path) == 0: return GdkPixbuf.Pixbuf.new_from_file_at_size(path, width, height) if width <= 128 and height <= 128: size_name = "normal" thumb_size = 128 else: size_name = "large" thumb_size = 256 thumb_folder = get_thumbnail_folder() cache_dir = os.path.join(thumb_folder, size_name) mkdir(cache_dir, 0700) bytes = path if isinstance(path, unicode): bytes = path.encode("utf-8") uri = "file://" + pathname2url(bytes) thumb_name = hash.md5(uri).hexdigest() + ".png" thumb_path = os.path.join(cache_dir, thumb_name) pb = meta_mtime = None if os.path.exists(thumb_path): pb = GdkPixbuf.Pixbuf.new_from_file(thumb_path) meta_mtime = pb.get_option("tEXt::Thumb::MTime") meta_mtime = meta_mtime and int(meta_mtime) if not pb or meta_mtime != int(mtime(path)): pb = GdkPixbuf.Pixbuf.new_from_file(path) #Too small picture, no thumbnail needed if pb.get_width() < thumb_size and pb.get_height() < thumb_size: return scale(pb, boundary) info = GdkPixbuf.Pixbuf.get_file_info(path)[0] mime = info.get_mime_types()[0] options = { "tEXt::Thumb::Image::Width": str(pb.get_width()), "tEXt::Thumb::Image::Height": str(pb.get_height()), "tEXt::Thumb::URI": uri, "tEXt::Thumb::MTime": str(int(mtime(path))), "tEXt::Thumb::Size": str(os.path.getsize(fsnative(path))), "tEXt::Thumb::Mimetype": mime, "tEXt::Software": "QuodLibet" } pb = scale(pb, (thumb_size, thumb_size)) pb.savev(thumb_path, "png", options.keys(), options.values()) os.chmod(thumb_path, 0600) return scale(pb, boundary) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/json_data.py���������������������������������������������������������0000644�0001750�0001750�00000010320�12161032160�021177� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import json from quodlibet.util.dprint import print_d, print_w class JSONObject(object): """ Base class for simple, named data objects that can be edited and persisted as JSON. """ @classmethod def _should_store(cls, field_name): """Decides if a field should be stored""" return not field_name.startswith("_") def __init__(self, name): if not name: raise ValueError("%s objects must be named" % type(self).__name__) self.name = str(name) def _data(self, fields=None): """A list of tuples of the persisted key:values in this class""" if fields: return [(k, self.__getattribute__(k)) for k in fields] else: print_d("No order specified for class %s" % type(self).__name__) return dict([(k, v) for k, v in self.__dict__.items() if self._should_store(k)]) @property def data(self): return self._data() @property def json(self): return json.dumps(dict(self.data)) def __cmp__(self, other): return cmp(self.data, other.data) def __str__(self): return "<%s '%s' with %s>" % (self.__class__.__name__, self.name, self.json) class JSONObjectDict(dict): """A dict wrapper to persist named `JSONObject`-style objects""" def __init__(self, Item=JSONObject): self.Item = Item dict.__init__(self) @classmethod def from_json(cls, ItemKind, json_str): """ Factory method to building from an input string, a JSON map of {item_name1: {key:value, key2:value2...}, item_name2:...} """ print_d("Constructing %s containing %s" % (cls.__name__, ItemKind.__name__)) new = cls(ItemKind) try: data = json.loads(json_str) except ValueError: print_d("Broken JSON: %s" % json_str) else: for name, blob in data.items(): print_d("Loading %s '%s' with data %s" % (ItemKind.__name__, name, blob)) try: new[name] = ItemKind(**blob) except TypeError as e: raise IOError("Couldn't instantiate %s from JSON (%s)" % (ItemKind.__name__, e)) return new @classmethod def from_list(cls, json_objects, raise_errors=True): new = cls() for j in json_objects: if not isinstance(j, JSONObject): msg = ("Incorrect type (%s) found in list of objects" % j.__class__.__name__) if raise_errors: raise TypeError(msg) else: print_d(msg) else: if not j.name and raise_errors: raise ValueError("Null key for %s object %s" % (cls.__name__, j)) if j.name in new: print_w("Duplicate %s found named '%s'. Removing..." % (cls.__name__, j.name)) new[j.name] = j return new def save(self, filename=None): """ Takes a list of `EditableData` objects and returns the data serialised as a JSON string, also writing to file `filename` if specified. """ print_d("Saving %d %s(s) to JSON.." % (len(self), self.Item.__name__)) try: obj_dict = dict([(o.name, dict(o.data)) for o in self.values()]) except AttributeError: raise obj_dict = {} json_str = json.dumps(obj_dict) if filename: try: with open(filename, "w") as f: print_d("Writing this to %s: %s" % (filename, json_str)) f.write(json_str) except IOError as e: print_w("Couldn't write JSON for %s object(s) (%s)" % (self.cls.__name__, e)) return json_str ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/tags.py��������������������������������������������������������������0000644�0001750�0001750�00000011651�12161032160�020203� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Important constants for tag handling. # Every tag should be listed here, as the canonical translation copy. # If machine is true, then the tag will not appear in some contexts, # as it is not intended to be human-readable. If internal is true, # the tag will not show up for editing, as it is generated internally # by Quod Libet. def T(name, translation, machine=False, internal=False): return (name, (translation, machine, internal)) def MT(name, translation, internal=False): return T(name, translation, machine=True, internal=internal) def IT(name, translation, machine=False): return T(name, translation, machine=machine, internal=True) # Fake out gettext for some convenience. def N_(name): return T(name, _(name)) TAGS = dict([ N_("album"), N_("arranger"), N_("artist"), N_("author"), N_("composer"), N_("conductor"), N_("contact"), N_("copyright"), N_("date"), N_("description"), N_("genre"), N_("grouping"), N_("language"), N_("license"), N_("location"), N_("lyricist"), # Translators: Also e.g. "record label", "publisher" N_("organization"), N_("performer"), N_("title"), N_("version"), N_("website"), T("albumartist", _("album artist")), T("bpm", _("BPM")), T("isrc", "ISRC"), # Translators: This used to be called "part". T("discsubtitle", _("disc subtitle")), T("part", _("disc subtitle")), T("discnumber", _("disc")), T("tracknumber", _("track")), T("labelid", _("label ID")), T("originaldate", _("original release date")), T("originalalbum", _("original album")), T("originalartist", _("original artist")), T("recordingdate", _("recording date")), T("releasecountry", _("release country")), T("albumartistsort", _("album artist (sort)")), T("artistsort", _("artist (sort)")), T("albumsort", _("album (sort)")), T("performersort", _("performer (sort)")), T("performerssort", _("performers (sort)")), # http://musicbrainz.org/doc/MusicBrainzTag MT("musicbrainz_trackid", _("MusicBrainz track ID")), MT("musicbrainz_albumid", _("MusicBrainz release ID")), MT("musicbrainz_artistid", _("Musicbrainz artist ID")), MT("musicbrainz_albumartistid", _("MusicBrainz album artist ID")), MT("musicbrainz_trmid", _("MusicBrainz TRM ID")), MT("musicip_puid", _("MusicIP PUID")), MT("musicbrainz_albumstatus", _("MusicBrainz album status")), MT("musicbrainz_albumtype", _("MusicBrainz album type")), # Translators: "gain" means a volume adjustment, not "to acquire". MT("replaygain_track_gain", _("track gain")), MT("replaygain_track_peak", _("track peak")), # Translators: "gain" means a volume adjustment, not "to acquire". MT("replaygain_album_gain", _("album gain")), MT("replaygain_album_peak", _("album peak")), MT("replaygain_reference_loudness", _("reference loudness")), IT("added", _("added")), IT("lastplayed", _("last played")), IT("disc", _("disc")), IT("discs", _("discs")), IT("track", _("track")), IT("tracks", _("tracks")), IT("laststarted", _("last started")), IT("filename", _("full name")), IT("basename", _("filename")), IT("dirname", _("directory")), IT("mtime", _("modified")), IT("playcount", _("plays")), IT("skipcount", _("skips")), IT("uri", "URI"), IT("mountpoint", _("mount point")), IT("errors", _("errors")), IT("length", _("length")), IT("people", _("people")), IT("performers", _("performers")), IT("rating", _("rating")), IT("year", _("year")), IT("originalyear", _("original release year")), IT("bookmark", _("bookmark")), IT("bitrate", _("bitrate")), IT("filesize", _("file size")), IT("format", _("file format")), ]) def add(tag, translation): TAGS[tag] = (translation, False, False) def readable(tag): try: if tag[0] == "~": if tag[1] == "#": tag = tag[2:] else: tag = tag[1:] except IndexError: return _("Invalid tag") else: return TAGS.get(tag, (tag,))[0] def sortkey(tag): """Sort key for sorting tag names by importance. tags.sort(key=sortkey) """ # last one -> most important order = [ "album", "artist", "title", ] try: return (-order.index(tag), tag) except ValueError: if tag in MACHINE_TAGS: return (2, tag) else: return (1, tag) STANDARD_TAGS = [key for key in TAGS if not (TAGS[key][1] or TAGS[key][2])] MACHINE_TAGS = [key for key in TAGS if TAGS[key][1]] del(key) # Other things put here as a canonical translated copy. _("lyricists") _("arrangers") _("composers") _("conductors") _("authors") _("artists") _("albums") ngettext("%d second", "%d seconds", 1) ngettext("%d minute", "%d minutes", 1) ngettext("%d hour", "%d hours", 1) ngettext("%d day", "%d days", 1) ngettext("%d year", "%d years", 1) ���������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/__init__.py����������������������������������������������������������0000644�0001750�0001750�00000074276�12173213426�021031� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2009 Joe Wreschnig, Michael Urman, Steven Robertson # 2011,2012 Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import random import re import sys import traceback import urlparse import unicodedata import urllib import tempfile import subprocess import webbrowser # title function was moved to a separate module from quodlibet.util.titlecase import title from quodlibet.const import FSCODING as fscoding, SUPPORT_EMAIL, COPYRIGHT from quodlibet.util.dprint import print_d, print_ if os.name == "nt": from win32com.shell import shellcon, shell def strip_win32_incompat(string, BAD='\:*?;"<>|'): """Strip Win32-incompatible characters. This only works correctly on Unicode strings. """ new = u"".join(map(lambda s: (s in BAD and "_") or s, string)) parts = new.split(os.sep) def fix_end(string): return re.sub(r'[\. ]$', "_", string) return unicode(os.sep).join(map(fix_end, parts)) def strip_win32_incompat_from_path(string): """Strip Win32-incompatible chars from a path, ignoring os.sep and the drive part""" drive, tail = os.path.splitdrive(string) tail = os.sep.join(map(strip_win32_incompat, tail.split(os.sep))) return drive + tail def listdir(path, hidden=False): """List files in a directory, sorted, fully-qualified. If hidden is false, Unix-style hidden files are not returned. """ path = fsnative(path) if hidden: filt = None else: filt = lambda base: not base.startswith(".") if path.endswith(os.sep): join = "".join else: join = os.sep.join return [join([path, basename]) for basename in sorted(os.listdir(path)) if filt(basename)] class InstanceTracker(object): """A mixin for GObjects to return a list of all alive objects of a given type. Note that it must be used with a GObject or something with a connect method and destroy signal.""" __kinds = {} def _register_instance(self, klass=None): """Register this object to be returned in the active instance list.""" if klass is None: klass = type(self) self.__kinds.setdefault(klass, []).append(self) self.connect('destroy', self.__kinds[klass].remove) @classmethod def instances(klass): return klass.__kinds.get(klass, []) class OptionParser(object): def __init__(self, name, version, description=None, usage=None): self.__name = name self.__version = version self.__args = {} self.__translate_short = {} self.__translate_long = {} self.__help = {} self.__usage = usage self.__description = description self.add( "help", shorts="h", help=_("Display brief usage information")) self.add( "version", shorts="v", help=_("Display version and copyright")) self.add("debug", shorts="d") def add(self, canon, help=None, arg="", shorts="", longs=[]): self.__args[canon] = arg for s in shorts: self.__translate_short[s] = canon for l in longs: self.__translate_long[l] = canon if help: self.__help[canon] = help def __shorts(self): shorts = "" for short, canon in self.__translate_short.items(): shorts += short + (self.__args[canon] and "=" or "") return shorts def __longs(self): longs = [] for long, arg in self.__args.items(): longs.append(long + (arg and "=" or "")) for long, canon in self.__translate_long.items(): longs.append(long + (self.__args[canon] and "=" or "")) return longs def __format_help(self, opt, space): if opt in self.__help: help = self.__help[opt] if self.__args[opt]: opt = "%s=%s" % (opt, self.__args[opt]) return " --%s %s\n" % (opt.ljust(space), help) else: return "" def help(self): l = 0 for k in self.__help.keys(): l = max(l, len(k) + len(self.__args.get(k, "")) + 4) s = _("Usage: %s %s\n") % ( sys.argv[0], self.__usage if self.__usage else _("[options]")) if self.__description: s += "%s - %s\n" % (self.__name, self.__description) s += "\n" keys = sorted(self.__help.keys()) try: keys.remove("help") except ValueError: pass try: keys.remove("version") except ValueError: pass for h in keys: s += self.__format_help(h, l) if keys: s += "\n" s += self.__format_help("help", l) s += self.__format_help("version", l) return s def set_help(self, newhelp): self.__help = newhelp def version(self): return ("""\ {title} {version} <{email}> {copyright}\ """).format(title=self.__name, version=self.__version, dates="2004-2012", email=SUPPORT_EMAIL, copyright=COPYRIGHT) def parse(self, args=None): if args is None: args = sys.argv[1:] from getopt import getopt, GetoptError try: opts, args = getopt(args, self.__shorts(), self.__longs()) except GetoptError, s: s = str(s) text = [] if "not recognized" in s: text.append( _("Option %r not recognized.") % s.split()[1]) elif "requires argument" in s: text.append( _("Option %r requires an argument.") % s.split()[1]) elif "unique prefix" in s: text.append( _("%r is not a unique prefix.") % s.split()[1]) if "help" in self.__args: text.append(_("Try %s --help.") % sys.argv[0]) print_e("\n".join(text)) raise SystemExit(True) else: transopts = {} for o, a in opts: if o.startswith("--"): o = self.__translate_long.get(o[2:], o[2:]) elif o.startswith("-"): o = self.__translate_short.get(o[1:], o[1:]) if o == "help": print_(self.help()) raise SystemExit elif o == "version": print_(self.version()) raise SystemExit elif o == "debug": from quodlibet import const const.DEBUG = True if self.__args[o]: transopts[o] = a else: transopts[o] = True return transopts, args def mtime(filename): """Return the mtime of a file, or 0 if an error occurs.""" try: return os.path.getmtime(filename) except OSError: return 0 def size(filename): """Return the size of a file, or 0 if an error occurs.""" try: return os.path.getsize(filename) except OSError: return 0 def mkdir(dir, *args): """Make a directory, including all its parent directories. This does not raise an exception if the directory already exists (and is a directory).""" if not os.path.isdir(dir): os.makedirs(dir, *args) def escape(str): """Escape a string in a manner suitable for XML/Pango.""" return str.replace("&", "&").replace("<", "<").replace(">", ">") def unescape(str): """Unescape a string in a manner suitable for XML/Pango.""" return str.replace("<", "<").replace(">", ">").replace("&", "&") def escape_filename(s): """Escape a string in a manner suitable for a filename.""" if isinstance(s, unicode): s = s.encode("utf-8") return urllib.quote(s, safe="").decode("utf-8") def unescape_filename(s): """Unescape a string in a manner suitable for a filename.""" if isinstance(s, unicode): s = s.encode("utf-8") return urllib.unquote(s).decode("utf-8") def parse_time(timestr, err=(ValueError, re.error)): """Parse a time string in hh:mm:ss, mm:ss, or ss format.""" if timestr[0:1] == "-": m = -1 timestr = timestr[1:] else: m = 1 try: return m * reduce(lambda s, a: s * 60 + int(a), re.split(r":|\.", timestr), 0) except err: return 0 RATING_PRECISION = 0.25 RATING_SYMBOL = u'\u2605' BLANK_RATING_SYMBOL = u'\u2606' def format_rating(value, blank=True): """Turn a number into a sequence of rating symbols.""" steps = int(1 / RATING_PRECISION) value = max(min(value, 1.0), 0) ons = int(round(steps * value)) offs = (steps - ons) if blank else 0 return RATING_SYMBOL * ons + BLANK_RATING_SYMBOL * offs def format_size(size): """Turn an integer size value into something human-readable.""" # TODO: Better i18n of this (eg use O/KO/MO/GO in French) if size >= 1024 ** 3: return "%.1f GB" % (float(size) / (1024 ** 3)) elif size >= 1024 ** 2 * 100: return "%.0f MB" % (float(size) / (1024 ** 2)) elif size >= 1024 ** 2 * 10: return "%.1f MB" % (float(size) / (1024 ** 2)) elif size >= 1024 ** 2: return "%.2f MB" % (float(size) / (1024 ** 2)) elif size >= 1024 * 10: return "%d KB" % int(size / 1024) elif size >= 1024: return "%.2f KB" % (float(size) / 1024) else: return "%d B" % size def format_time(time): """Turn a time value in seconds into hh:mm:ss or mm:ss.""" if time < 0: time = abs(time) prefix = "-" else: prefix = "" if time >= 3600: # 1 hour # time, in hours:minutes:seconds return "%s%d:%02d:%02d" % (prefix, time // 3600, (time % 3600) // 60, time % 60) else: # time, in minutes:seconds return "%s%d:%02d" % (prefix, time // 60, time % 60) def format_time_long(time): """Turn a time value in seconds into x hours, x minutes, etc.""" if time < 1: return _("No time information") cutoffs = [ (60, "%d seconds", "%d second"), (60, "%d minutes", "%d minute"), (24, "%d hours", "%d hour"), (365, "%d days", "%d day"), (None, "%d years", "%d year"), ] time_str = [] for divisor, plural, single in cutoffs: if time < 1: break if divisor is None: time, unit = 0, time else: time, unit = divmod(time, divisor) if unit: time_str.append(ngettext(single, plural, unit) % unit) time_str.reverse() if len(time_str) > 2: time_str.pop() return ", ".join(time_str) def fsdecode(s, note=True): """Decoding a string according to the filesystem encoding. note specifies whether a note should be appended if decoding failed.""" if isinstance(s, unicode): return s elif note: return decode(s, fscoding) else: return s.decode(fscoding, 'replace') def fsencode(s, note=False): """Encode a string according to the filesystem encoding. note specifies whether a note should be appended if encoding failed.""" if isinstance(s, str): return s elif note: return encode(s, fscoding) else: return s.encode(fscoding, 'replace') """ Path related functions like open, os.listdir have different behavior on win32 - Passing a string calls the old non unicode win API. In case of listdir this leads to "?" for >1byte chars and to 1 byte chars encoded using the fs encoding. -> DO NOT USE! - Passing a unicode object internally calls the windows unicode functions. This will mostly lead to proper unicode paths (except expanduser). And that's why QL is using unicode paths on win and encoded paths everywhere else. """ if sys.platform == "win32": fsnative = fsdecode # Decode a filename on windows else: fsnative = fsencode # Encode it on other platforms def split_scan_dirs(s): """Split the value of the "scan" setting, accounting for drive letters on win32.""" if sys.platform == "win32": return filter(None, re.findall(r"[a-zA-Z]:[\\/][^:]*", s)) else: return filter(None, s.split(":")) def decode(s, charset="utf-8"): """Decode a string; if an error occurs, replace characters and append a note to the string.""" try: return s.decode(charset) except UnicodeError: return s.decode(charset, "replace") + " " + _("[Invalid Encoding]") def encode(s, charset="utf-8"): """Encode a string; if an error occurs, replace characters and append a note to the string.""" try: return s.encode(charset) except UnicodeError: return (s + " " + _("[Invalid Encoding]")).encode(charset, "replace") def iscommand(s): """True if an executable file 's' exists in the user's path, or is a fully-qualified existing executable file.""" if s == "" or os.path.sep in s: return os.path.isfile(s) and os.access(s, os.X_OK) else: s = s.split()[0] for p in os.defpath.split(os.path.pathsep): p2 = os.path.join(p, s) if os.path.isfile(p2) and os.access(p2, os.X_OK): return True else: return False def capitalize(str): """Capitalize a string, not affecting any character after the first.""" return str[:1].upper() + str[1:] def split_value(s, splitters=["/", "&", ","]): """Splits a string. The first match in 'splitters' is used as the separator; subsequent matches are intentionally ignored.""" if not splitters: return [s.strip()] values = s.split("\n") for spl in splitters: spl = re.compile(r"\b\s*%s\s*\b" % re.escape(spl), re.UNICODE) if not filter(spl.search, values): continue new_values = [] for v in values: new_values.extend([st.strip() for st in spl.split(v)]) return new_values return values def split_title(s, splitters=["/", "&", ","]): title, subtitle = find_subtitle(s) return ((title.strip(), split_value(subtitle, splitters)) if subtitle else (s, [])) __FEATURING = ["feat.", "featuring", "feat", "ft", "ft.", "with", "w/"] __ORIGINALLY = ["originally by ", " cover"] # Cache case-insensitive regex searches of the above __FEAT_REGEX = [re.compile(re.escape(s + " "), re.I) for s in __FEATURING] __ORIG_REGEX = [re.compile(re.escape(s), re.I) for s in __ORIGINALLY] def split_people(s, splitters=["/", "&", ","]): title, subtitle = find_subtitle(s) if not subtitle: parts = s.split(" ") if len(parts) > 2: for feat in __FEATURING: try: i = [p.lower() for p in parts].index(feat) orig = " ".join(parts[:i]) others = " ".join(parts[i + 1:]) return (orig, split_value(others, splitters)) except (ValueError, IndexError): pass return (s, []) else: old = subtitle # TODO: allow multiple substitutions across types, maybe for regex in (__FEAT_REGEX + __ORIG_REGEX): subtitle = re.sub(regex, "", subtitle, 1) if old != subtitle: # Only change once break values = split_value(subtitle, splitters) return (title.strip(), values) def split_album(s): name, disc = find_subtitle(s) if not disc: parts = s.split(" ") if len(parts) > 2: lower = parts[-2].lower() if "disc" in lower or "disk" in lower: return (" ".join(parts[:-2]), parts[-1]) return (s, None) else: parts = disc.split() if (len(parts) == 2 and parts[0].lower() in ["disc", "disk", "cd", "vol", "vol."]): try: return (name, parts[1]) except: return (s, None) else: return (s, None) def split_numeric(s, limit=10, reg=re.compile(r"[0-9][0-9]*\.?[0-9]*").search, join=u" ".join): """Separate numeric values from the string and convert to float, so it can be used for human sorting. Also removes all extra whitespace.""" result = reg(s) if not result or not limit: return (join(s.split()),) else: start, end = result.span() return ( join(s[:start].split()), float(result.group()), split_numeric(s[end:], limit - 1)) def human_sort_key(s, normalize=unicodedata.normalize): if not isinstance(s, unicode): s = s.decode("utf-8") s = normalize("NFD", s.lower()) return s and split_numeric(s) def find_subtitle(title): if isinstance(title, str): title = title.decode('utf-8', 'replace') for pair in [u"[]", u"()", u"~~", u"--", u"\u301c\u301c", u'\uff08\uff09']: if pair[0] in title[:-1] and title.endswith(pair[1]): r = len(pair[1]) l = title[0:-r].rindex(pair[0]) if l != 0: subtitle = title[l + len(pair[0]):-r] title = title[:l] return title.rstrip(), subtitle else: return title, None def expanduser(filename): """needed because expanduser does not return wide character paths on windows even if a unicode path gets passed.""" if os.name == "nt": profile = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, 0, 0) if filename == "~": return profile if filename.startswith(u"~" + os.path.sep): return os.path.join(profile, filename[2:]) return os.path.expanduser(filename) def unexpand(filename, HOME=expanduser("~")): """Replace the user's home directory with ~/, if it appears at the start of the path name.""" sub = (os.name == "nt" and "%USERPROFILE%") or "~" if filename == HOME: return sub elif filename.startswith(HOME + os.path.sep): filename = filename.replace(HOME, sub, 1) return filename def website(site): """Open the given URL in the user's default browser""" if os.name == "nt": return webbrowser.open(site) # all commands here return immediately for prog in ["xdg-open", "gnome-open"]: if not iscommand(prog): continue status = subprocess.check_call([prog, site]) if status == 0: return True # sensible-browser is a debian thing blocking_progs = ["sensible-browser"] blocking_progs.extend(os.environ.get("BROWSER", "").split(":")) for prog in blocking_progs: if not iscommand(prog): continue # replace %s with the url args = prog.split() for i, arg in enumerate(args): if arg == "%s": args[i] = site break else: args.append(site) # calling e.g. firefox blocks, so call async and hope for the best try: spawn(args) except RuntimeError: continue else: return True return False def tag(name, cap=True): # Return a 'natural' version of the tag for human-readable bits. # Strips ~ and ~# from the start and runs it through a map (which # the user can configure). if not name: return _("Invalid tag") else: from quodlibet.util.tags import readable parts = map(readable, tagsplit(name)) if cap: # Translators: If tag names, when capitalized, should not # be title-cased ("Looks Like This"), but rather only have # the first letter capitalized, translate this string as # something other than "check|titlecase?". if _("check|titlecase?") == "check|titlecase?": parts = map(title, parts) else: parts = map(capitalize, parts) return " / ".join(parts) def tagsplit(tag): """Split a (potentially) tied tag into a list of atomic tags. Two ~~s make the next tag prefixed with a ~, so ~foo~~bar => [foo, ~bar].""" if "~" in tag[1:]: if tag.startswith("~") and not tag.startswith("~#"): tag = tag[1:] tags = [] front = "" for part in tag.split("~"): if part: tags.append(front + part) front = "" else: front = "~" return tags else: return [tag] def pattern(pat, cap=True, esc=False): """Return a 'natural' version of the pattern string for human-readable bits. Assumes all tags in the pattern are present.""" from quodlibet.parse import Pattern, XMLFromPattern class Fakesong(dict): cap = False def comma(self, key): return " - ".join(self.list(key)) def list(self, key): return [tag(k, self.cap) for k in tagsplit(key)] list_seperate = list __call__ = comma fakesong = Fakesong({'filename': tag('filename', cap)}) fakesong.cap = cap try: p = (esc and XMLFromPattern(pat)) or Pattern(pat) except ValueError: return _("Invalid pattern") return p.format(fakesong) def spawn(argv, stdout=False): """Asynchronously run a program. argv[0] is the executable name, which must be fully qualified or in the path. If stdout is True, return a file object corresponding to the child's standard output; otherwise, return the child's process ID. argv must be strictly str objects to avoid encoding confusion. """ from gi.repository import GLib types = map(type, argv) if not (min(types) == max(types) == str): raise TypeError("executables and arguments must be str objects") print_d("Running %r" % " ".join(argv)) args = GLib.spawn_async(argv=argv, flags=GLib.SpawnFlags.SEARCH_PATH, standard_output=stdout) if stdout: return os.fdopen(args[2]) else: return args[0] def fver(tup): return ".".join(map(str, tup)) def uri_is_valid(uri): return bool(urlparse.urlparse(uri)[0]) def make_case_insensitive(filename): return "".join(["[%s%s]" % (c.lower(), c.upper()) for c in filename]) def print_exc(limit=None, file=None): """A wrapper preventing crashes on broken pipes in print_exc.""" if not file: file = sys.stderr print_(traceback.format_exc(limit=limit), output=file) class DeferredSignal(object): """A wrapper for connecting functions to signals. Some signals may fire hundreds of times, but only require processing once per group. This class pushes the call to the mainloop at idle priority and prevents multiple calls from being inserted in the mainloop at a time, greatly improving responsiveness in some places. Example usage: def func(widget, user_arg): pass widget.connect('signal', DeferredSignal(func), user_arg) """ __slots__ = ['func', 'dirty'] def __init__(self, func): self.func = func self.dirty = False def __call__(self, *args): if not self.dirty: self.dirty = True from gi.repository import GLib GLib.idle_add(self._wrap, *args) def _wrap(self, *args): self.func(*args) self.dirty = False def gobject_weak(fun, *args, **kwargs): """Connect to a signal and disconnect if destroy gets emitted. If parent is given, it connects to its destroy signal Example: gobject_weak(gobject_1.connect, 'changed', self.__changed) gobject_weak(gobject_1.connect, 'changed', self.__changed, parent=gobject_2) """ parent = kwargs.pop("parent", None) obj = fun.__self__ sig = fun(*args) disconnect = lambda obj, handle: obj.disconnect(handle) if parent: parent.connect_object('destroy', disconnect, obj, sig) else: obj.connect('destroy', disconnect, sig) return sig class cached_property(object): """A read-only @property that is only evaluated once.""" def __init__(self, fget, doc=None): self.fget = fget self.__doc__ = doc or fget.__doc__ self.__name__ = fget.__name__ def __get__(self, obj, cls): if obj is None: return self obj.__dict__[self.__name__] = result = self.fget(obj) return result def xdg_get_system_data_dirs(): """http://standards.freedesktop.org/basedir-spec/latest/""" data_dirs = os.getenv("XDG_DATA_DIRS") if data_dirs: return map(os.path.abspath, data_dirs.split(":")) else: return ("/usr/local/share/", "/usr/share/") def xdg_get_cache_home(): data_home = os.getenv("XDG_CACHE_HOME") if data_home: return os.path.abspath(data_home) else: return os.path.join(os.path.expanduser("~"), ".cache") def xdg_get_data_home(): data_home = os.getenv("XDG_DATA_HOME") if data_home: return os.path.abspath(data_home) else: return os.path.join(os.path.expanduser("~"), ".local", "share") def find_mount_point(path): while not os.path.ismount(path): path = os.path.dirname(path) return path def pathname2url_win32(path): # stdlib version raises IOError for more than one ':' which can appear # using a virtual box shared folder and it inserts /// at the beginning # but it should be /. quote = urllib.quote if path[1:2] != ":" or path[:1] == "\\": if path[:2] == "\\\\": path = path[2:] return quote("/".join(path.split("\\"))) drive, remain = path.split(":", 1) return "/%s:%s" % (quote(drive), quote("/".join(remain.split("\\")))) if os.name == "nt": pathname2url = pathname2url_win32 else: pathname2url = urllib.pathname2url # See http://stackoverflow.com/questions/1151658/python-hashable-dicts class HashableDict(dict): """Standard dict, made hashable. Useful for making sets of dicts etc""" def __key(self): return tuple((k, self[k]) for k in sorted(self)) def __hash__(self): return hash(self.__key()) def __eq__(self, other): return self.__key() == other.__key() def sanitize_tags(tags, stream=False): """Returns a new sanitized tag dict. stream defines if the tags of a main/base song should be changed or of a stream song. e.g. title will be removed for the base song but not for the stream one. """ san = {} for key, value in tags.iteritems(): key = key.lower() key = {"location": "website"}.get(key, key) if isinstance(value, unicode): lower = value.lower().strip() if key == "channel-mode": if "stereo" in lower or "dual" in lower: value = u"stereo" elif key == "audio-codec": if "mp3" in lower: value = u"MP3" elif "aac" in lower or "advanced" in lower: value = u"MPEG-4 AAC" elif "vorbis" in lower: value = u"Ogg Vorbis" if lower in ("http://www.shoutcast.com", "http://localhost/", "default genre", "none", "http://", "unnamed server", "unspecified", "n/a"): continue if key == "duration": try: value = int(long(value) / 1000) except ValueError: pass else: if not stream: continue key = "~#length" elif key == "bitrate": try: value = int(value) / 1000 except ValueError: pass else: if not stream: continue key = "~#bitrate" elif key == "nominal-bitrate": try: value = int(value) / 1000 except ValueError: pass else: if stream: continue key = "~#bitrate" if key in ("emphasis", "mode", "layer", "maximum-bitrate", "minimum-bitrate", "has-crc", "homepage"): continue if not stream and key in ("title", "album", "artist", "date"): continue if isinstance(value, (int, long, float)): if not key.startswith("~#"): key = "~#" + key san[key] = value else: if key.startswith("~#"): key = key[2:] if not isinstance(value, unicode): continue value = value.strip() if key in san: if value not in san[key].split("\n"): san[key] += "\n" + value else: san[key] = value return san def build_filter_query(key, values): """Create a text query that matches a union of all values for a key build_filter_query("foo", ["x", "y"]) => foo = |("x"c, "y"c) build_filter_query("~#foo", ["1"]) => #(foo = 1) """ if not values: return u"" if key.startswith("~#"): nheader = key[2:] queries = ["#(%s = %s)" % (nheader, i) for i in values] if len(queries) > 1: return u"|(%s)" % ", ".join(queries) else: return queries[0] else: text = ", ".join( ["'%s'c" % v.replace("\\", "\\\\").replace("'", "\\'") for v in values]) if len(values) == 1: return u"%s = %s" % (key, text) else: return u"%s = |(%s)" % (key, text) def limit_songs(songs, max, weight_by_ratings=False): """Choose at most `max` songs from `songs`, optionally giving weighting to ~#rating""" if not max or len(songs) < max: return songs else: if weight_by_ratings: def choose(r1, r2): if r1 or r2: return cmp(random.random(), r1 / (r1 + r2)) else: return random.randint(-1, 1) def rating(song): return song("~#rating") songs.sort(cmp=choose, key=rating) else: random.shuffle(songs) return songs[:max] def get_temp_cover_file(data): try: fn = tempfile.NamedTemporaryFile() fn.write(data) fn.flush() fn.seek(0, 0) except EnvironmentError: return else: return fn ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/copool.py������������������������������������������������������������0000644�0001750�0001750�00000005555�12173212464�020560� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Joe Wreschnig, Alexandre Passos # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation """Manage a pool of routines using Python iterators.""" from gi.repository import GLib __routines = {} __paused = {} def __wrap(func, funcid, args, kwargs): for value in func(*args, **kwargs): yield True remove(funcid) yield False def add(func, *args, **kwargs): """Register a routine to run in GLib main loop. func should be a function that returns a Python iterator (e.g. generator) that provides values until it should stop being called. Optional Keyword Arguments: priority -- priority to run at (default PRIORITY_LOW) funcid -- mutex/removal identifier for this function timeout -- use timeout_add (with given timeout) instead of idle_add Only one function with the same funcid can be running at once. Starting a new function with the same ID will stop the old one. If no funcid is given, the function itself is used. The funcid must be usable as a hash key. """ funcid = kwargs.pop("funcid", func) if funcid in __routines or funcid in __paused: remove(funcid) priority = kwargs.pop("priority", GLib.PRIORITY_LOW) timeout = kwargs.pop("timeout", None) next = __wrap(func, funcid, args, kwargs).next if timeout: src_id = GLib.timeout_add(timeout, next, priority=priority) else: src_id = GLib.idle_add(next, priority=priority) __routines[funcid] = (src_id, next, priority, timeout) print_d("Added copool function %r with id %r" % (func, funcid)) def remove(funcid): """Stop a registered routine.""" if funcid in __routines: GLib.source_remove(__routines[funcid][0]) del(__routines[funcid]) if funcid in __paused: del(__paused[funcid]) print_d("Removed copool function id %r" % funcid) def remove_all(): """Stop all running routines.""" for funcid in __routines.keys(): remove(funcid) def pause(funcid): """Temporarily pause a registered routine.""" func = __routines[funcid] remove(funcid) __paused[funcid] = func def resume(funcid): """Resume a paused routine.""" if funcid in __paused: old_src_id, func, priority, timeout = __paused[funcid] del(__paused[funcid]) if timeout: src_id = GLib.timeout_add(timeout, func, priority=priority) else: src_id = GLib.idle_add(func, priority=priority) __routines[funcid] = (src_id, func, priority, timeout) def step(funcid): """Force this function to iterate once.""" if funcid in __routines: __routines[funcid][1]() elif funcid in __paused: __paused[funcid]() else: raise ValueError("no pooled routine %r" % funcid) ���������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/fmps.py��������������������������������������������������������������0000644�0001750�0001750�00000032451�12161032160�020213� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2010 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. # Free Media Player Specifications 1.1 by Jeff Mitchell # http://freedesktop.org/wiki/Specifications/free-media-player-specs FMPS_NOTHING = u"FMPS_NOTHING" LIST_SEPERATOR = u";;" ENTRY_SEPERATOR = u"::" def _split_left(val, sep): """Split a string by a delimiter which can be escaped by \\""" result = [] temp = u"" escaped = False index = 0 left = True for c in val: left = False temp += c if c == sep[index] and not escaped: index += 1 else: index = 0 if c == u"\\": escaped ^= True else: escaped = False if index >= len(sep): left = True index = 0 result.append(temp[:-len(sep)]) temp = u"" if temp or left: result.append(temp) return result def _split(val, sep): """Split and filter invalid segments. Entries seperated by ::: for example need to be set invalid because they could be split in two ways. """ invalid = [] inval = [] valid = [] vals = _split_left(val, sep) c = False # Look if a segment starts with :/; # and mark it and the next one as invalid (except the last one) for i, v in enumerate(vals[-1::-1]): new_c = v.startswith(sep[0]) excp = i == len(vals) - 1 if c or (new_c and not excp): inval.insert(0, v) else: if inval: invalid.insert(0, sep.join(inval)) inval = [] valid.insert(0, v) c = new_c if inval: invalid.insert(0, sep.join(inval)) return invalid, valid def _unescape(val): return val.replace( ur"\;", u";").replace(ur"\:", u":").replace(ur"\\", u"\\") def _escape(val): return val.replace( u"\\", ur"\\").replace(u";", ur"\;").replace(u":", ur"\:") def _escape_inval(val): if val.startswith(";"): return u"\\" + val return val class FmpsValue(object): _data = None def __repr__(self): return "%s(%s)" % (self.__class__.__name__, repr(self._data)) def native(self): return self._data def __unicode__(self): return unicode(self._data) def __str__(self): return str(self._data) class FmpsFloat(FmpsValue): def __init__(self, data): if not isinstance(data, basestring): self._validate(data) self._data = unicode(round(float(data), 6)) else: data = unicode(data) self._validate(data) self._data = data def _validate(self, data): return float(data) def native(self): return float(self._data) class FmpsPositiveFloat(FmpsFloat): def _validate(self, data): num = super(FmpsPositiveFloat, self)._validate(data) if num < 0 or (not isinstance(data, basestring) and num > 4294967294.999999): raise ValueError("Value not in range.") return num class FmpsRatingFloat(FmpsFloat): def _validate(self, data): num = super(FmpsRatingFloat, self)._validate(data) if not 0 <= num <= 1: raise ValueError("Value not in range.") return num class FmpsPositiveIntegerFloat(FmpsPositiveFloat): def _validate(self, data): num = super(FmpsPositiveIntegerFloat, self)._validate(data) if int(num) != num: raise ValueError("Value not an integer.") return num def native(self): return int(super(FmpsPositiveIntegerFloat, self).native()) class FmpsText(FmpsValue): def __init__(self, data): self._data = unicode(data) class FmpsInvalidValue(FmpsText): pass class FmpsDict(object): _kind = None def __init__(self, data=None): self.__dict = {} self.__invalid = [] if data: self.__load(data) def __load(self, data): if not isinstance(data, (list, tuple)): data = [data] data = map(unicode, data) vals = [] for seg in data: i, v = _split(seg, LIST_SEPERATOR) vals.extend(v) self.__invalid.extend(map(_escape_inval, i)) for val in vals: inval, fields = _split(val, ENTRY_SEPERATOR) if len(fields) != 2 or inval: self.__invalid.append(_escape_inval(val)) continue key, value = map(_unescape, fields) try: value = self._kind(value) except ValueError: value = FmpsInvalidValue(value) if key in self.__dict: self.__dict[key].append(value) else: self.__dict[key] = [value] def iterkeys(self): return self.__dict.iterkeys() keys = lambda self: list(self.iterkeys()) def iteritems(self): for key, values in self.__dict.iteritems(): for value in values: if not isinstance(value, FmpsInvalidValue): yield(key, value.native()) items = lambda s: list(s.iteritems()) def get_all(self, key): if key in self.__dict: return [f.native() for f in self.__dict[key] if not isinstance(f, FmpsInvalidValue)] return [] def remove_all(self, key): if key in self.__dict: del self.__dict[key] def set_all(self, key, value): key = unicode(key) if not isinstance(value, (list, tuple)): value = [value] value = map(self._kind, value) self.remove_all(key) if key in self.__dict: self.__dict[key].extend(value) else: self.__dict[key] = value def append(self, key, value): self.extend(key, [value]) def extend(self, key, values): key = unicode(key) values = map(self._kind, values) if key in self.__dict: self.__dict[key].extend(values) else: self.__dict[key] = values def to_data(self): fields = [] for key, values in self.__dict.iteritems(): values = map(_escape, map(unicode, values)) key = _escape(key) for val in values: fields.append(ENTRY_SEPERATOR.join([key, val])) return LIST_SEPERATOR.join(fields + filter(None, self.__invalid)) def __repr__(self): return "%s(%s, invalid=%s)" % ( self.__class__.__name__, repr(self.__dict), repr(self.__invalid)) class FmpsNamespaceDict(object): _kind = None def __init__(self, data=None): self.__dict = {} self.__invalid = [] if data: self.__load(data) def __load(self, data): if not isinstance(data, (list, tuple)): data = [data] data = map(unicode, data) vals = [] for seg in data: i, v = _split(seg, LIST_SEPERATOR) vals.extend(v) self.__invalid.extend(map(_escape_inval, i)) for val in vals: inval, fields = _split(val, ENTRY_SEPERATOR) if len(fields) != 3 or inval: self.__invalid.append(_escape_inval(val)) continue namespace, key, value = fields if not namespace or not key: self.__invalid.append(val) continue namespace, key, value = map(_unescape, (namespace, key, value)) try: value = self._kind(value) except ValueError: value = FmpsInvalidValue(value) if namespace in self.__dict: if key in self.__dict[namespace]: self.__dict[namespace][key].append(value) else: self.__dict[namespace][key] = [value] else: self.__dict[namespace] = {key: [value]} def get_all(self, namespace, key=None): """Will return a list of values if key is given, else a dict""" if namespace in self.__dict: if key is not None: if key in self.__dict[namespace]: return [f.native() for f in self.__dict[namespace][key] if not isinstance(f, FmpsInvalidValue)] else: return [] else: new_dict = {} for key, values in self.__dict[namespace].iteritems(): new_dict[key] = [f.native() for f in values if not isinstance(f, FmpsInvalidValue)] return new_dict else: if key is not None: return [] return {} def remove_all(self, namespace, key=None): if namespace in self.__dict: if key is not None: if key in self.__dict[namespace]: del self.__dict[namespace][key] if not self.__dict[namespace]: del self.__dict[namespace] else: del self.__dict[namespace] def set_all(self, namespace, key, value): """value can be a list or a singe value, or a dict in case key is None""" if not namespace or (key is not None and not key): raise ValueError("No empty namespace/key allowed.") if key is None and not isinstance(value, dict): raise ValueError("You have to pass a dict in case key is None.") if key is not None and isinstance(value, dict): raise ValueError("You can only pass a dict in case key is None.") namespace = unicode(namespace) key = key is not None and unicode(key) if isinstance(value, dict): value = dict(value) for key in value.iterkeys(): if not isinstance(value[key], (list, tuple)): value[key] = [value[key]] value[key] = map(self._kind, value[key]) self.__dict[namespace] = dict(value) return if not isinstance(value, (list, tuple)): value = [value] value = map(self._kind, value) if namespace in self.__dict: if key in self.__dict[namespace]: self.__dict[namespace][key] = value else: self.__dict[namespace] = {key: value} def append(self, namespace, key, value): self.extend(namespace, key, [value]) def extend(self, namespace, key, values): if not namespace or not key: raise ValueError("No empty namespace/key allowed.") namespace = unicode(namespace) key = unicode(key) values = map(self._kind, values) if namespace in self.__dict: if key in self.__dict[namespace]: self.__dict[namespace][key].extend(values) else: self.__dict[namespace][key] = values else: self.__dict[namespace] = {key: values} def iterkeys(self): return self.__dict.iterkeys() keys = lambda self: list(self.iterkeys()) def iteritems(self): for namespace, sub in self.__dict.iteritems(): for key, values in sub.iteritems(): for val in values: yield (namespace, key, val.native()) items = lambda self: list(self.iteritems()) def to_data(self): fields = [] for namespace, sub in self.__dict.iteritems(): namespace = _escape(namespace) for key, values in sub.iteritems(): key = _escape(key) values = map(_escape, map(unicode, values)) for val in values: fields.append(ENTRY_SEPERATOR.join([namespace, key, val])) return LIST_SEPERATOR.join(fields + filter(None, self.__invalid)) def __repr__(self): return "%s(%s, invalid=%s)" % ( self.__class__.__name__, repr(self.__dict), repr(self.__invalid)) class FmpsNoEmptyKeyDict(FmpsDict): def set_all(self, key, values): if not key: raise ValueError("No empty key allowed.") super(FmpsNoEmptyKeyDict, self).set_all(key, values) def extend(self, key, values): if not key: raise ValueError("No empty key allowed.") super(FmpsNoEmptyKeyDict, self).extend(key, values) #All simple Formats class Rating(FmpsRatingFloat): pass class Playcount(FmpsPositiveIntegerFloat): pass class Lyrics(FmpsText): pass #All Dicts class RatingUser(FmpsNoEmptyKeyDict): _kind = FmpsRatingFloat class PlaycountUser(FmpsNoEmptyKeyDict): _kind = FmpsPositiveIntegerFloat class Performers(FmpsDict): _kind = FmpsText class LyricsSources(FmpsDict): _kind = FmpsText #All NamespaceDicts class RatingCritic(FmpsNamespaceDict): _kind = FmpsRatingFloat class RatingAlgorithm(FmpsNamespaceDict): _kind = FmpsRatingFloat class PlaycountAlgorithm(FmpsNamespaceDict): _kind = FmpsPositiveFloat # AlbumsCompilations needs checks for unique # Application(case sensitive)+Type(case insensitive)+Identifier(case sensitive) # and should check if the keys are album/compilation only... # but I don't care atm so that's left to the user. class AlbumsCompilations(FmpsNamespaceDict): _kind = FmpsText �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/dbusutils.py���������������������������������������������������������0000644�0001750�0001750�00000025265�12161032160�021271� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012, 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import xml.etree.ElementTree as ET import dbus import dbus.service def dbus_unicode_validate(text): """Takes a unicode string and replaces all invalid codepoints that would lead to errors if passed to dbus""" if isinstance(text, str): text = text.decode("utf-8") # https://bugs.freedesktop.org/show_bug.cgi?id=40817 def valid(c): return (c < 0x110000 and (c & 0xFFFFF800) != 0xD800 and (c < 0xFDD0 or c > 0xFDEF) and (c & 0xFFFE) != 0xFFFE) cps = [] for c in map(ord, text): if valid(c): cps.append(c) else: cps.append(0xFFFD) return u"".join(map(unichr, cps)) def list_spec_properties(spec): """Parse a property spec and return a dict: {'Metadata': {'access': 'read', 'type': 'a{sv}', 'emit': 'true'} 'access' can be: read/write/readwrite 'type' is the dbus data type (dbus.Signature instance) 'emit' can be true/false/invalidates (see dbus spec) """ ANNOTATION_EMITS = "org.freedesktop.DBus.Property.EmitsChangedSignal" def get_emit(element, fallback): for anno in element.findall("annotation"): if anno.attrib["name"] == ANNOTATION_EMITS: emit = anno.attrib["value"] break else: emit = fallback return emit root = ET.fromstring('<?xml version="1.0"?><props>' + spec + '</props>') props = {} root_emit = get_emit(root, "true") for element in root: if element.tag != "property": continue attrs = element.attrib attrs["emit"] = get_emit(element, root_emit) attrs["type"] = dbus.Signature(attrs["type"]) props[attrs.pop("name")] = attrs return props def filter_property_spec(spec, wl=None, bl=None): """Remove properties based on a white list or black list.""" if wl and bl: raise ValueError if not wl and not bl: return spec root = ET.fromstring('<?xml version="1.0"?><props>' + spec + '</props>') if wl: to_rm = lambda e: e.attrib["name"] not in wl elif bl: to_rm = lambda e: e.attrib["name"] in bl strs = [] for element in root: if element.tag != "property" or not to_rm(element): strs.append(ET.tostring(element).strip()) return "\n".join(strs) TYPE_MAP = { "b": dbus.Boolean, "n": dbus.Int16, "i": dbus.Int32, "x": dbus.Int64, "q": dbus.UInt16, "u": dbus.UInt32, "t": dbus.UInt64, "d": dbus.Double, "o": dbus.ObjectPath, "g": dbus.Signature, "v": lambda x: x, } def apply_signature(value, sig, utf8_strings=False): """Casts basic types to the right dbus types and packs them into containers with the right signature, so they get validated on sending.""" # dbus properties are variant, but have a signature defined, so # we have to convert manually here. if sig in TYPE_MAP: return TYPE_MAP[sig](value) elif sig.startswith("a{"): return dbus.Dictionary(value, signature=sig[2:-1]) elif sig.startswith("a("): return dbus.Struct(value, signature=sig[2:-1]) elif sig.startswith("a"): return dbus.Array(value, signature=sig[1:]) elif sig == "s": if utf8_strings: if isinstance(value, unicode): value = value.encode("utf-8") return dbus.UTF8String(value) else: if isinstance(value, str): value = value.decode("utf-8") return dbus.String(value) else: return TYPE_MAP[sig](value) # Unknown type, just return as is return value class DBusIntrospectable(object): """Simply collects all introspection data from other mixins and provides the Introspect DBus method returning all combined. All classes need to call set_introspection with their interface and provided signals, properties, methods in the introspection xml format. The dbus bindings allready provide a Introspect method, but it doesn't understand properties, also having them in text format in the class is a nice documentation. """ IFACE = "org.freedesktop.DBus.Introspectable" ISPEC = """ <method name="Introspect"> <arg type="s" name="xml_data" direction="out"/> </method> """ def __init__(self): self.__ispec = {} self.set_introspection(DBusIntrospectable.IFACE, DBusIntrospectable.ISPEC) def set_introspection(self, interface, introspection): self.__ispec.setdefault(interface, []).append(introspection) @dbus.service.method(IFACE) def Introspect(self): parts = [] parts.append("<node>") for iface, intros in self.__ispec.iteritems(): parts.append("<interface name=\"%s\">" % iface) parts.extend(intros) parts.append("</interface>") parts.append("</node>") return "\n".join(parts) class DBusProperty(object): """A mixin for dbus.Object classes to support dbus properties. Register properties by passing the XML introspection to 'set_properties'. The class needs to provide 'get/set_property'. In case the base Object is a FallbackObject, 'get/set_property' also need to handle an additional realtive path parameter. Whenever a property changes, 'emit_properties_changed' needs to be called (except if the annotations disable it). In case of FallbackObject, with a relative path to the real object (defaults to the main one). """ IFACE = "org.freedesktop.DBus.Properties" ISPEC = """ <method name="Get"> <arg type="s" name="interface_name" direction="in"/> <arg type="s" name="property_name" direction="in"/> <arg type="v" name="value" direction="out"/> </method> <method name="GetAll"> <arg type="s" name="interface_name" direction="in"/> <arg type="a{sv}" name="properties" direction="out"/> </method> <method name="Set"> <arg type="s" name="interface_name" direction="in"/> <arg type="s" name="property_name" direction="in"/> <arg type="v" name="value" direction="in"/> </method> <signal name="PropertiesChanged"> <arg type="s" name="interface_name"/> <arg type="a{sv}" name="changed_properties"/> <arg type="as" name="invalidated_properties"/> </signal>""" def __init__(self): self.__props = {} self.__impl = {} self.set_introspection(DBusProperty.IFACE, DBusProperty.ISPEC) def set_properties(self, interface, ispec, bl=None, wl=None): """Register properties and set instrospection for the given property spec. Provide a black list or white list, for optional, not implemented properties.""" ispec = filter_property_spec(ispec, wl=wl, bl=bl) self.__props[interface] = list_spec_properties(ispec) self.__impl.setdefault(interface, []) self.set_introspection(interface, ispec) def get_properties(self, interface): """Returns a list of (interface, property) for all properties of the specified interface and subinterfaces""" result = [(interface, p) for p in self.__props[interface].keys()] for sub in self.__impl[interface]: result.extend(self.get_properties(sub)) return result def get_value(self, interface, prop, path="/"): """Returns the value of a property""" interface = self.get_interface(interface, prop) if self.SUPPORTS_MULTIPLE_OBJECT_PATHS: value = self.get_property(interface, prop, path) else: value = self.get_property(interface, prop) prop_sig = self.__props[interface][prop]["type"] return apply_signature(value, prop_sig) def get_interface(self, interface, prop): """Returns the real interface that implements the property""" if prop in self.__props[interface]: return interface for sub in self.__impl[interface]: if self.get_interface(sub, prop): return sub def implement_interface(self, iface, sub_iface): """Set a sub interface. All actions on that interface will check the sub interface in case the property is not found.""" self.__props.setdefault(iface, {}) self.__props.setdefault(sub_iface, {}) self.__impl.setdefault(iface, []).append(sub_iface) def emit_properties_changed(self, interface, properties, path="/"): """Emits PropertiesChanged for the specified properties""" combos = {} for prop in properties: iface = self.get_interface(interface, prop) if iface is None: raise ValueError("Property %s not registered" % prop) combos.setdefault(iface, []).append(prop) for iface, props in combos.iteritems(): values = {} inval = [] for prop in props: emit = self.__props[iface][prop]["emit"] if emit == "false": raise ValueError("Can't emit changed signal for %s" % prop) elif emit == "true": values[prop] = self.get_value(iface, prop, path) elif emit == "invalidates": inval.append(prop) if self.SUPPORTS_MULTIPLE_OBJECT_PATHS: self.PropertiesChanged(iface, values, inval, rel=path) else: self.PropertiesChanged(iface, values, inval) @dbus.service.method(dbus_interface=IFACE, in_signature="ss", out_signature="v", rel_path_keyword="path") def Get(self, interface, prop, path): return self.get_value(interface, prop, path) @dbus.service.method(dbus_interface=IFACE, in_signature="ssv", out_signature="", rel_path_keyword="path") def Set(self, interface, prop, value, path): interface = self.get_interface(interface, prop) if self.SUPPORTS_MULTIPLE_OBJECT_PATHS: self.set_property(interface, prop, value, path) else: self.set_property(interface, prop, value) @dbus.service.method(dbus_interface=IFACE, in_signature="s", out_signature="a{sv}", rel_path_keyword="path") def GetAll(self, interface, path): values = {} for iface, prop in self.get_properties(interface): values[prop] = self.get_value(iface, prop, path) return values @dbus.service.signal(IFACE, signature="sa{sv}as", rel_path_keyword="rel") def PropertiesChanged(self, interface, changed, invalidated, rel=""): pass �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/modulescanner.py�����������������������������������������������������0000644�0001750�0001750�00000015175�12173213426�022122� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import os import sys import imp from os.path import join, splitext, dirname, basename from traceback import format_exception from quodlibet import util def load_dir_modules(path, package, load_compiled=False): """Load all modules in path (non-recursive). Load pyc files if load_compiled is True. In case the module is already loaded, doesn't reload it. """ try: entries = os.listdir(path) except OSError: print_w("%r not found" % path) return [] modules = set() for entry in entries: if entry[:1] == "_": continue if entry.endswith(".py"): modules.add(entry[:-3]) elif load_compiled and entry.endswith(".pyc"): modules.add(entry[:-4]) loaded = [] for name in modules: try: mod = load_module(name, package, path) except Exception: util.print_exc() continue if mod: loaded.append(mod) return loaded def get_importables(folder): """Searches a folder and its subfolders for modules and packages to import. No subfolders in packages, .pyc, .so supported. returns a tuple of the import path and a list of possible dependencies """ is_ok = lambda f: f.endswith(".py") and not f.startswith("_") for root, dirs, names in os.walk(folder): if "__init__.py" in names: yield (root, filter(is_ok, [join(root, name) for name in names])) else: for name in filter(is_ok, names): yield (join(root, name), [join(root, name)]) def load_module(name, package, path, reload=False): """Load a module/package. Returns the module or None. Doesn't catch any exceptions during the actual import. If reload is True and the module is already loaded, reload it. """ fullname = package + "." + name try: return sys.modules[fullname] except KeyError: pass try: # this also handles packages fp, path, desc = imp.find_module(name, [path]) except ImportError: return # modules need a parent package if package not in sys.modules: sys.modules[package] = imp.new_module(package) try: mod = imp.load_module(fullname, fp, path, desc) finally: if fp: fp.close() # make it accessible from the parent, like __import__ does vars(sys.modules[package])[name] = mod return mod class ModuleScanner(object): """ Handles plugin modules. Takes a list of directories and searches for loadable python modules/packages in all of them. There is only one global namespace for modules using the module name as key. rescan() - Update the module list. Returns added/removed modules failures - A dict of Name: (Exception, Text) for all modules that failed modules - A dict of Name: Module for all successfully loaded modules """ def __init__(self, folders): self.__folders = folders self.__modules = {} # name: module self.__info = {} # name: (path, deps) self.__deps = {} # dep: mtime of last check self.__failures = {} # name: exception def __remove_module(self, name): del self.__modules[name] path, deps = self.__info[name] for dep in deps: del self.__deps[dep] del self.__info[name] if name in self.__failures: del self.__failures[name] @property def failures(self): """A name: exception dict for all modules that failed to load""" return self.__failures @property def modules(self): """A name: module dict of all loaded modules""" return self.__modules def rescan(self): """Rescan all folders for changed/new/removed modules. The caller should release all references to removed modules. Returns a tuple: (removed, added) """ print_d("Rescanning..") info = {} # get what is there atm for folder in self.__folders: for path, deps in get_importables(folder): # take the basename as module key, later modules win info[splitext(basename(path))[0]] = (path, deps) def deps_changed(old_list, new_list): if set(old_list) != set(new_list): return True for dep in old_list: old_mtime = self.__deps[dep] if util.mtime(dep) != old_mtime: return True return False # python can not unload a module, so we can only add new ones # or reload if the path is the same and mtime changed, # but we can still pretend we removed something removed = [] added = [] # remove those that are gone and changed ones for name, mod in self.__modules.items(): if name not in info: self.__remove_module(name) removed.append(name) continue path, deps = self.__info[name] path, new_deps = info[name] if deps_changed(deps, new_deps): self.__remove_module(name) removed.append(name) # add new ones for (name, (path, deps)) in info.iteritems(): if name in self.__modules: continue try: # add a real module, so that pickle works # http://code.google.com/p/quodlibet/issues/detail?id=1093 parent = "quodlibet.fake" if parent not in sys.modules: sys.modules[parent] = imp.new_module(parent) vars(sys.modules["quodlibet"])["fake"] = sys.modules[parent] mod = load_module(name, parent + ".plugins", dirname(path), reload=True) if mod is None: continue except Exception, err: text = format_exception(*sys.exc_info()) self.__failures[name] = (err, text) else: added.append(name) self.__modules[name] = mod self.__info[name] = info[name] for dep in deps: self.__deps[dep] = util.mtime(dep) print_d("Rescanning done: %d added, %d removed, %d error(s)" % (len(added), len(removed), len(self.__failures))) return removed, added ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/uri.py���������������������������������������������������������������0000644�0001750�0001750�00000007454�12161032160�020052� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation # TODO: # * netloc separation (user/passwd/host/port using urllib) # * Coerce a URI to Unicode (via an encoding for the path and # Punycode for the domain) and back. import re from urllib import url2pathname, quote_plus, unquote_plus from urlparse import urlparse, urlunparse from quodlibet.util import pathname2url class URI(str): """A full URI string. This object provides several convenience attributes to access data from the urlparse and urllib modules. URIs inherit from str, and so any method that works on a str works on a URI. URIs are not closed under concatenation, slicing, and so on. Neither are these URI objects; such operations will return strs.""" def __new__(klass, value, escaped=True): """Create a new URI object. By default, the URI is assumed to be escaped already. Pass escaped=False if you need the URI escaped (this is imperfect now). The URI returned will be equivalent, but not necessarily equal, to the value passed in.""" # URIs like file:////home/foo/... are valid, since # //home/foo is a valid path. But urlparse parses this # into a netloc of home and a path of /foo. Lame. value = re.sub("^([A-Za-z]+):///+", "\\1:///", value) values = list(urlparse(value)) if not escaped: # FIXME: Handle netloc # FIXME: Handle query args values[2] = quote_plus(values[2], safe="/~") value = urlunparse(values) obj = str.__new__(klass, value) if not obj.scheme: raise ValueError("URIs must have a scheme, such as 'http://'") elif not (obj.netloc or obj.path): raise ValueError("URIs must have a network location or path") else: return obj @classmethod def frompath(klass, value): """Construct a URI from an unescaped filename.""" # windows unicode path chars may break pathname2url; encode in UTF-8 if isinstance(value, unicode): value = value.encode("UTF-8") return klass("file://" + pathname2url(value), escaped=True) @property def scheme(self): """URI scheme (e.g. 'http')""" return urlparse(self)[0] @property def netloc(self): """URI network location (e.g. 'example.com:21')""" return urlparse(self)[1] @property def path(self): """URI path (e.g. '/~user')""" return urlparse(self)[2] @property def params(self): """URI parameters""" return urlparse(self)[3] @property def query(self): """URI query string (e.g. 'foo=bar&a=b')""" return urlparse(self)[4] @property def fragment(self): """URI fragment ('foo' in '#foo')""" return urlparse(self)[5] @property def unescaped(self): """an unescaped str (not URI) version of the URI""" values = list(urlparse(self)) values[2] = unquote_plus(values[2]) return urlunparse(values) @property def filename(self): """a local filename equivalent to the URI""" if self.scheme != "file": raise ValueError("only the file scheme supports filenames") elif self.netloc: raise ValueError("only local files have filenames") else: return url2pathname(self.path) @property def is_filename(self): """True if the URI is a valid (not necessarily existing) local filename """ return self.scheme == "file" and not self.netloc def __repr__(self): return "<%s %r>" % (type(self).__name__, self.unescaped) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/dprint.py������������������������������������������������������������0000644�0001750�0001750�00000012662�12161032160�020550� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2011 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import sys import time import os import re import quodlibet.const import quodlibet.util.logging from quodlibet.const import ENCODING def _format_print(string, prefix=""): """Inserts the given prefix at the beginning of each line""" if prefix: string = prefix + ("\n" + prefix).join(string.splitlines()) return string def extract_caller_info(): """Returns a string describing the caller of the caller of this function. It currently checks if the caller got arguments that have an attribute with the same name as the caller (so it's probably the class of a method) or returns the module name for everything else. """ try: raise ZeroDivisionError except: try: info = "" # The frame of the calling function frame = sys.exc_info()[2].tb_frame.f_back.f_back f_code = frame.f_code co_name = f_code.co_name co_varnames = f_code.co_varnames # the calling function got arguments if co_varnames and co_varnames[0] in frame.f_locals: # the first one could be the class cls = frame.f_locals[co_varnames[0]] # the arg has an attr that is named like the function if hasattr(cls, co_name): # If it's an instance get the class if not hasattr(cls, '__name__'): cls = cls.__class__ info = cls.__name__ # else, get the module name if not info: info = frame.f_globals.get("__name__", "") # append the function/method name if info: info += "." + co_name except (AttributeError, IndexError): return "" else: return info class Colorise(object): @classmethod def __reset(cls, text): return text + '\033[0m' @classmethod def magenta(cls, text): return cls.__reset('\033[95m' + text) @classmethod def blue(cls, text): return cls.__reset('\033[94m' + text) @classmethod def cyan(cls, text): return cls.__reset('\033[96m' + text) @classmethod def white(cls, text): return cls.__reset('\033[97m' + text) @classmethod def yellow(cls, text): return cls.__reset('\033[93m' + text) @classmethod def green(cls, text): return cls.__reset('\033[92m' + text) @classmethod def red(cls, text): return cls.__reset('\033[91m' + text) @classmethod def black(cls, text): return cls.__reset('\033[90m' + text) @classmethod def bold(cls, text): return cls.__reset('\033[1m' + text) @classmethod def gray(cls, text): return cls.__reset('\033[2m' + text) def _strip_color(text, reg=re.compile("(\x1b\[\d{1,2}m|\\x1b\[0m)")): return reg.sub("", text) def _print(string, frm="utf-8", output=sys.stdout, strip_color=True): if os.name == 'nt': return if output: if strip_color and not output.isatty(): string = _strip_color(string) if isinstance(string, unicode): string = string.encode(ENCODING, "replace") else: string = string.decode(frm).encode(ENCODING, "replace") try: print >>output, string except IOError: pass def print_(string, output=None): if output is None: output = sys.stdout string = _format_print(string) quodlibet.util.logging.log(_strip_color(string)) _print(string, output=output) def print_d(string, context=""): """Print debugging information.""" if quodlibet.const.DEBUG: output = sys.stderr else: output = None context = extract_caller_info() # strip the package name if context.startswith("quodlibet.") and context.count(".") > 1: context = context[10:] timestr = ("%0.2f" % time.time())[-6:] # Translators: "D" as in "Debug". It is prepended to # terminal output. APT uses a similar output format. prefix = _("D: ") string = "%s: %s: %s" % (Colorise.magenta(timestr), Colorise.blue(context), string) string = _format_print(string, Colorise.green(prefix)) _print(string, output=output) # Translators: Name of the debug tab in the Output Log window quodlibet.util.logging.log(_strip_color(string), _("Debug")) def print_w(string): """Print warnings.""" # Translators: "W" as in "Warning". It is prepended to # terminal output. APT uses a similar output format. prefix = _("W: ") string = _format_print(string, Colorise.red(prefix)) _print(string, output=sys.stderr) # Translators: Name of the warnings tab in the Output Log window quodlibet.util.logging.log(_strip_color(string), _("Warnings")) def print_e(string, context=None): """Print errors.""" # Translators: "E" as in "Error". It is prepended to # terminal output. APT uses a similar output format. prefix = _("E: ") string = _format_print(string, Colorise.red(prefix)) _print(string, output=sys.stderr) # Translators: Name of the warnings tab in the Output Log window quodlibet.util.logging.log(_strip_color(string), _("Errors")) ������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/util/collection.py��������������������������������������������������������0000644�0001750�0001750�00000046624�12173213426�021421� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2004-2013 Joe Wreschnig, Michael Urman, Iñigo Serna, # Christoph Reiter, Steven Robertson, Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import GLib import os import random from quodlibet import util from quodlibet import config from quodlibet import const from quodlibet.formats._audio import PEOPLE, TAG_TO_SORT, INTERN_NUM_DEFAULT from quodlibet.util import thumbnails from collections import Iterable, MutableSequence, defaultdict ELPOEP = list(reversed(PEOPLE)) PEOPLE_SCORE = [100 ** i for i in xrange(len(PEOPLE))] def avg(nums): """Returns the average (arithmetic mean) of a list of numbers""" return float(sum(nums)) / len(nums) def bayesian_average(nums, c=None, m=None): """Returns the Bayesian average of an iterable of numbers, with parameters defaulting to config specific to ~#rating.""" m = m or const.DEFAULT_RATING c = c or config.getfloat("settings", "bayesian_rating_factor", 0.0) ret = float(m * c + sum(nums)) / (c + len(nums)) return ret NUM_DEFAULT_FUNCS = { "length": "sum", "playcount": "sum", "added": "max", "lastplayed": "max", "laststarted": "max", "mtime": "max", "rating": "bav", "skipcount": "sum", "year": "min", "originalyear": "min", "filesize": "sum" } NUM_FUNCS = { "max": max, "min": min, "sum": sum, "avg": avg, "bav": bayesian_average } class Collection(object): """A collection of songs which implements some methods similar to the AudioFile class. The content of the collection can be changed by changing the content of the songs attribute. """ _cache_size = 6 songs = () def __init__(self): """Cache in _cache, LRU key order in _used, keys that return default are in _default""" self.__cache = {} self.__default = set() self.__used = [] def finalize(self): """Finalize the collection. Call this after songs get added or removed""" self.__cache.clear() self.__default.clear() self.__used = [] def get(self, key, default=u"", connector=u" - "): if not self.songs: return default if key[:1] == "~" and "~" in key[1:]: if not isinstance(default, basestring): return default keys = util.tagsplit(key) v = map(self.__get_cached_value, keys) def default_funct(x): if x is None: return default return x v = map(default_funct, v) v = map(lambda x: (isinstance(x, float) and "%.2f" % x) or x, v) v = map(lambda x: isinstance(x, basestring) and x or str(x), v) return connector.join(filter(None, v)) or default else: value = self.__get_cached_value(key) if value is None: return default return value __call__ = get def comma(self, key): value = self.get(key) return (value if isinstance(value, (int, float)) else value.replace("\n", ", ")) def list(self, key): v = self.get(key, connector=u"\n") if "~" in key[1:] else self.get(key) return [] if v == "" else v.split("\n") def __get_cached_value(self, key): if key in self.__cache: self.__used.remove(key) self.__used.insert(0, key) return self.__cache[key] elif key in self.__default: return None else: val = self.__get_value(key) if val is None: self.__default.add(key) else: self.__used.insert(0, key) self.__cache[key] = val # Remove the oldest if the cache is full if len(self.__used) > self._cache_size: self.__cache.pop(self.__used.pop(-1)) return val def __get_value(self, key): """This is similar to __call__ in the AudioFile class. All internal tags are changed to represent a collection of songs. """ # Using key:<func> runs the resulting list of values # through the function before returning it. # Numeric keys without a func will default to a reasonable function if key.startswith("~#"): key = key[2:] if key[-4:-3] == ":": func = key[-3:] key = key[:-4] elif key == "tracks": return len(self.songs) elif key == "discs": return len(set([song("~#disc", 1) for song in self.songs])) elif key == "bitrate": length = self.__get_value("~#length") if not length: return 0 w = lambda s: s("~#bitrate", 0) * s("~#length", 0) return sum(w(song) for song in self.songs) / length else: # Unknown key. AudioFile will try to cast the values to int, # default to avg func = NUM_DEFAULT_FUNCS.get(key, "avg") key = "~#" + key func = NUM_FUNCS.get(func) if func: # If none of the songs can return a numeric key, # the album returns default values = (song(key) for song in self.songs) values = [v for v in values if v != ""] return func(values) if values else None elif key in INTERN_NUM_DEFAULT: return 0 return None elif key[:1] == "~": key = key[1:] keys = {"people": {}, "peoplesort": {}} if key in keys: people = keys["people"] peoplesort = keys["peoplesort"] for song in self.songs: # Rank people by "relevance" -- artists before composers # before performers, then by number of appearances. for w, k in enumerate(ELPOEP): persons = song.list(k) for person in persons: people[person] = (people.get(person, 0) - PEOPLE_SCORE[w]) if k in TAG_TO_SORT: persons = song.list(TAG_TO_SORT[k]) or persons for person in persons: peoplesort[person] = (peoplesort.get(person, 0) - PEOPLE_SCORE[w]) # It's cheaper to get people and peoplesort in one go keys["people"] = sorted(people.keys(), key=people.__getitem__)[:100] keys["peoplesort"] = sorted(peoplesort.keys(), key=peoplesort.__getitem__)[:100] ret = keys.pop(key) ret = (ret and "\n".join(ret)) or None other, values = keys.popitem() other = "~" + other if not values: self.__default.add(other) else: if other in self.__used: self.__used.remove(other) self.__used.append(other) self.__cache[other] = "\n".join(values) return ret elif key == "length": length = self.__get_value("~#length") return None if length is None else util.format_time(length) elif key == "long-length": length = self.__get_value("~#length") if length is None: return None else: return util.format_time_long(length) elif key == "tracks": tracks = self.__get_value("~#tracks") return (None if tracks is None else ngettext("%d track", "%d tracks", tracks) % tracks) elif key == "discs": discs = self.__get_value("~#discs") if discs > 1: return ngettext("%d disc", "%d discs", discs) % discs else: # TODO: check this is correct for discs == 1 return None elif key == "rating": rating = self.__get_value("~#rating") if rating is None: return None return util.format_rating(rating) elif key == "cover": return ((self.cover != type(self).cover) and "y") or None elif key == "filesize": size = self.__get_value("~#filesize") return None if size is None else util.format_size(size) key = "~" + key # Nothing special was found, so just take all values of the songs # and sort them by their number of appearance result = {} for song in self.songs: for value in song.list(key): result[value] = result.get(value, 0) - 1 values = map(lambda x: x[0], sorted(result.items(), key=lambda x: x[1])) return "\n".join(values) if values else None class Album(Collection): """Like a `Collection` but adds cover scanning, some attributes for sorting and uses a set for the songs.""" COVER_SIZE = 48 cover = None scanned = False @util.cached_property def peoplesort(self): return util.human_sort_key(self.get("~peoplesort").split("\n")[0]) @util.cached_property def genre(self): return util.human_sort_key(self.get("genre").split("\n")[0]) date = property(lambda self: self.get("date")) title = property(lambda self: self.get("album")) def __init__(self, song): super(Album, self).__init__() self.songs = set() # albumsort is part of the album_key, so every song has the same self.sort = util.human_sort_key(song("albumsort")) self.key = song.album_key def finalize(self): """Finalize this album. Call after songs get added or removed""" super(Album, self).finalize() self.__dict__.pop("peoplesort", None) self.__dict__.pop("genre", None) def scan_cover(self, force=False): if (self.scanned and not force) or not self.songs: return self.scanned = True song = iter(self.songs).next() cover = song.find_cover() if cover is not None: s = self.COVER_SIZE try: round = config.getboolean("albumart", "round") self.cover = thumbnails.get_thumbnail(cover.name, (s, s)) self.cover = thumbnails.add_border(self.cover, 30, round) except GLib.GError: return def __repr__(self): return "Album(%s)" % repr(self.key) class HashedList(MutableSequence): """A list-like collection that can only take hashable items and provides fast membership tests. Can handle duplicate entries. """ def __init__(self, arg=None): self._map = defaultdict(int) if arg is None: self._data = [] return self._data = list(arg) for item in arg: self._map[item] += 1 def __setitem__(self, index, item): old_items = self._data[index] if not isinstance(index, slice): old_items = [old_items] for old in old_items: self._map[old] -= 1 if not self._map[old]: del self._map[old] self._data[index] = item items = item if not isinstance(index, slice): items = [items] for item in items: self._map[item] += 1 def __getitem__(self, index): return self._data[index] def __delitem__(self, index): items = self._data[index] if not isinstance(index, slice): items = [items] for item in items: self._map[item] -= 1 if not self._map[item]: del self._map[item] del self._data[index] def __len__(self): return len(self._data) def insert(self, index, item): self._data.insert(index, item) self._map[item] += 1 def __contains__(self, item): return item in self._map def __iter__(self): for item in self._data: yield item def has_duplicates(self): """Returns True if any item is contained more then once""" return len(self._map) != len(self) def __repr__(self): return repr(self._data) class Playlist(Collection, Iterable): """A Playlist is a `Collection` that has list-like features Songs can appear more than once. TODO: Fix this crap """ __instances = [] quote = staticmethod(util.escape_filename) unquote = staticmethod(util.unescape_filename) @classmethod def new(cls, dir, base=_("New Playlist"), library={}): if not (dir and os.path.realpath(dir)): raise ValueError("Invalid playlist directory '%s'" % (dir,)) p = Playlist(dir, "", library=library) i = 0 try: p.rename(base) except ValueError: while not p.name: i += 1 try: p.rename("%s %d" % (base, i)) except ValueError: pass return p @classmethod def fromsongs(cls, dir, songs, library={}): if len(songs) == 1: title = songs[0].comma("title") else: title = ngettext( "%(title)s and %(count)d more", "%(title)s and %(count)d more", len(songs) - 1) % ( {'title': songs[0].comma("title"), 'count': len(songs) - 1}) playlist = cls.new(dir, title, library=library) playlist.extend(songs) return playlist @classmethod def playlists_featuring(cls, song): """Returns the list of playlists in which this song appears""" playlists = [] for instance in cls.__instances: if song in instance._list: playlists.append(instance) return playlists # List-like methods, for compatibilty with original Playlist class. def extend(self, songs): self._list.extend(songs) def append(self, song): return self._list.append(song) def clear(self): del self._list[:] def __iter__(self): return iter(self._list) def __len__(self): return len(self._list) def __getitem__(self, index): return self._list[index] def index(self, value): return self._list.index(value) def __setitem__(self, key, value): self._list[key] = value @property def songs(self): return [s for s in self._list if not isinstance(s, basestring)] def __init__(self, dir, name, library=None): super(Playlist, self).__init__() self.__instances.append(self) if isinstance(name, unicode) and os.name != "nt": name = name.encode('utf-8') self.name = name self.dir = dir self._list = HashedList() basename = self.quote(name) try: for line in file(os.path.join(self.dir, basename), "r"): line = util.fsnative(line.rstrip()) if line in library: self._list.append(library[line]) elif library and library.masked(line): self._list.append(line) except IOError: if self.name: self.write() def rename(self, newname): if isinstance(newname, unicode): newname = newname.encode('utf-8') if newname == self.name: return elif os.path.exists(os.path.join(self.dir, self.quote(newname))): raise ValueError( _("A playlist named %s already exists.") % newname) else: try: os.unlink(os.path.join(self.dir, self.quote(self.name))) except EnvironmentError: pass self.name = newname self.write() def add_songs(self, filenames, library): changed = False for i in range(len(self)): if isinstance(self[i], basestring) and self._list[i] in filenames: self._list[i] = library[self._list[i]] changed = True return changed def remove_songs(self, songs, library, leave_dupes=False): """Removes `songs` from this playlist if they are there, removing only the first reference if `leave_dupes` is True """ changed = False for song in songs: # TODO: document the "library.masked" business if library.masked(song): while True: try: self._list[self.index(song)] = song("~filename") except ValueError: break else: changed = True else: while song in self._list: self._list.remove(song) if leave_dupes: changed = True break else: changed = True return changed def has_songs(self, songs): # TODO(rm): consider the "library.masked" business some, all = False, True for song in songs: found = song in self._list some = some or found all = all and found if some and not all: break return some, all def delete(self): self.clear() try: os.unlink(os.path.join(self.dir, self.quote(self.name))) except EnvironmentError: pass if self in self.__instances: self.__instances.remove(self) def write(self): basename = self.quote(self.name) with open(os.path.join(self.dir, basename), "w") as f: for song in self._list: try: f.write(util.fsencode(song("~filename")) + "\n") except TypeError: f.write(song + "\n") def format(self): """Return a markup representation of information for this playlist""" total_size = float(self.get("~#filesize") or 0.0) songs_text = (ngettext("%d song", "%d songs", len(self.songs)) % len(self.songs)) # see Issue 504 return "<b>%s</b>\n<small>%s (%s%s)</small>" % ( util.escape(self.name), songs_text, self.get("~length", "0:00"), " / %s" % util.format_size(total_size) if total_size > 0 else "") def has_duplicates(self): """Returns True if there are any duplicated files in this playlist""" return self._list.has_duplicates() def shuffle(self): """Randomly shuffles this playlist, without weighting""" random.shuffle(self._list) self.write() def __cmp__(self, other): try: return cmp(self.name, other.name) except AttributeError: return -1 def __str__(self): songs_text = (ngettext("%d song", "%d songs", len(self.songs)) % len(self.songs)) return "\"%s\" (%s)" % (self.name, songs_text) ������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/�������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017165� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/README�������������������������������������������������������������0000644�0001750�0001750�00000000752�12161032160�020043� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������License ------- All icons not starting with "quodlibet" or "exfalso" are taken from the Gnome Icon Theme (LGPL v.3 or Creative Commons BY-SA 3.0) [1] and Gnome Colors (GPLv2 or later) [2]. Gnome Colors: 16x16/devices/multimedia-player 48x48/devices/multimedia-player 16x16/places/user-trash Gnome Icon Theme 24x24/actions/media-eject 24x24/status/audio-volume-* [1] http://ftp.gnome.org/pub/GNOME/sources/gnome-icon-theme/ [2] http://code.google.com/p/gnome-colors/ ����������������������quodlibet-3.0.2/quodlibet/images/hicolor/�����������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�020624� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/16x16/�����������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�021411� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/16x16/devices/���������������������������������������������0000755�0001750�0001750�00000000000�12173213432�023033� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/16x16/devices/multimedia-player-apple-ipod.png�������������0000777�0001750�0001750�00000000000�12171345056�035352� 2multimedia-player.png�������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/16x16/devices/multimedia-player.png������������������������0000644�0001750�0001750�00000000717�12161032160�027164� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<��LIDAT8*q?gfwjOfR<wܬ/U*7nHB^#x Bֲc~Dž,kg~~ߧ#J/}?vv77N"yJ шf!I-R..ϖVT@TPUoE#'MVB~*_Uo?@lnTn cFF<wnm88Xk}g2gE$u]Լԁ`<KS'*"Ŧ-D@Z뎏Ot\ec "</}rz15^����IENDB`�������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/16x16/devices/multimedia-player-ipod.png�������������������0000777�0001750�0001750�00000000000�12171345056�034253� 2multimedia-player.png�������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/16x16/places/����������������������������������������������0000755�0001750�0001750�00000000000�12173213432�022660� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/16x16/places/user-trash.png��������������������������������0000644�0001750�0001750�00000001743�12161032160�025462� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������a���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<��`IDAT85Ou�R ] =�]a@:!Z0[v\D7Cg ޛtH6!&F8R۲~_@�"S-2a¼0NYQ.TE9Ua4_t#)5?nmm�OwoͶHv٢X*q^(k Tbگ+ftLmUe=hqrggܞFۋ0ajrN}Bm>z@:"$L '%1ML!BXT*uM BܞGu**BEQPI)n7if%gx^TJ7 t8ZrE @e26ujxdjqz|>O>ZbXZ,@46'|HEz>޽@~5XXC+)LGޢfXIK$-˦aR)0|?,GF,%$ϵtؽJ%M7ttI$6Ow.WWƢlmn244!g3M_^(ri''Y[_#:D\LRi*f<¢�.k_v^G�LvvvwfC"a4 \mBu8QTvA&ap`�'tԪj$KK+ bEt q{T*\NB Bz ~Yya"!��_]]}>n׋IIeB21/>| )輩H7 Rꡌ׫"C0*����IENDB`�����������������������������quodlibet-3.0.2/quodlibet/images/hicolor/64x64/�����������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�021417� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/64x64/status/����������������������������������������������0000755�0001750�0001750�00000000000�12173213432�022742� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/64x64/status/quodlibet-missing-cover.png�������������������0000644�0001750�0001750�00000013760�12161032160�030224� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs��t��tfx���tEXtSoftware�www.inkscape.org<���tEXtTitle�Missing Album Cover Art{��DIDATxy$y{UtťZR*fC/[I9%qYNDzs86c $@0# #$8H]NOu只홝YБBWWMWՈf~o~'njϭmlz|?ԙ51;ٜ~?L={ A& z_ۥ^Q̛.p_:7k:ܼ MMo\siAڏwhSD6 8FQܱ low�0`k,Gn96Ќ15Pwvluz,>9*Ja" 1AS82kZ`>�}'C?tda q2{MY]Yc}}hf0Z8rxvkfI1CV' C0$s8Ȳ4Mz]Z\{OY,a`o|0fqeP7k�oI*Kˬ,pؑ4M,!MSdDAHZ5ĉ8ճ v:ciϴi1??ϭJբRL�*yeqƥK];z]./- uyVC-1ӧOov �dS x֒$ RTi48$iB%amL Vw4)k &a1 Z o뱲7M8};o^8Ǚ8<P�G}Y�\5k-(FKab{1iZjEL& G �h,L/ "0*:{<ZK}{~x"?<v\^^ D (&ߵk~y@&8_3!൰$Ms`WT*U Uk P8< tP֨U43 DU%2 ;ӼT*_˯:'ST��6v WݴnHpP+fNLd٨EzzNf&bV�CF>A1 TUǕ6^olh43>pIկn/qiiik(4`�9�$Is<ȭ-fG APשT*qhTDqHj4M1ø`g8CU1bhX UW.ИݚjsQ|I򕯠ҟ +[z((ܣTM0H4K'o-T3 FJJBĤi+Uy:>4ڴgM=;;Fsxmpi?pa_xMNz 3<9Ul�6�$40r!"TJJZ!M3Dбg[j@1l٦?Oh2l28ΓvV_aWHF}M�Yuοk"Bw8W V""T2q%LvC晛;<ass^waG+ AD8<qy7 z׵ti0c5̐;OZA"sG*k!HE�Rׂjip0"I>ck50dcs%�&5 �$! RH;yPE$I:y`CEXkW1<i z XВ~ϕMcgK 7̋I\q(N7PS7pOTf:Y*~?1=hD$xA)ݤjBۥg9;eMx{e*g}? =@EyK‹aLXh51 0F3l)*F@ՠ5c�#BYgY܌ a{4=q2,=hLTz5iH!ITLSN1??s8 \b0Fq{* #dr{ea~.IP0qAZK$!4EP)νj87a4qY677 KdkWXZ^ӧ9}#x_ZKFZd -vNQ͋KUh 眦7 #; cPh)KE0Vq//sαD<JV#T$%s.]Dĉ ^uߵ(rKqg T J  4EmT8c � k3w֖ǻ,K&M3*0VgskqRv~(LNPK:_8c}FFap]�Y ]Se_'"dYNdADA`qa!EK8Q-x$mG,˰` yP+|qR�@_ιkk jUj*qRdWrfEZ�F ki +xX?R])�叺%!w~˯Rrf[M4CT)i($eĉhic ޗῄ@{8uT'B+ alF9(s)e+[M{ݕv۩2__!N$Zww<wbnq "cOTd:֢ힻe02( !Xu]GWwBQrF]H+Wԝ1~2i!}{YXX0&Ǐh4H<w\MT�S1nH:9ugu'I)wUe0ݙn3& I, 9vǏ+2;SԬeٮZclZj [{ Cz>QYYu9.PQYR\~3OHS} ݝS0Y' \kRh fv'h:A5l`&4ʞ[$,//R]$VZۯL IYME3c F9F1$=X o$iQa1cs\r,tF8ݾLhLoO8Nv |<Gfonl1}'� Ӹ[QCU,--M ;齡q:DU>r$<wvoXD"!'6'mr&`Jj.՝JaKV'*8y7&~}M"߭t]vvvHӔ^GVVL�4y &S7�c-AКibh4^ۥ ~7z}666dYps|9 ۻ"|C�E=Pv|\\ €f+lmmoi۝k`:;;xUϱeXt!?HFNt^k-@ciklnY^]#sFO.v;#'"lootغBy>SSȁu5_H>2]-�K6DQHQ'w.]feegϲXt-(9:NUV7HӌFru54Xr5] f(1լ$onekkk;vI8hw oe4t V% lԊBjX} "Ԋ�lA)^{)� ZC{A7/E^c4vzXD!Nh`01~+W ŚdN4K^sTDyi C,/8NQ) bƌ*E!AXX .s[[Z]UPV'4neY62JӔniB% V# RtǑȫ;Yq$01�j駟`˱7xnoH/*+V 0C:>FuŕRRTl^aRT%BDZY9M k 5)"`9kX8:Ϲ˼~~qyQpĪ,/^ZܹѷϼV# 1ƤHOU{iU⽷^UVUިzo@`qE#^8kWcqo:ouFJF|IĤsDO! -U__}g<pʹfN F;$<ljGQ @ l{X5A"% -axc38k7:kMnuZaxH/7 ޳']U5ɉH)V63<COڭDkCN8I1CĚu;Q<*7%(*"E%}h_Ge8V1Ƌ?cfi/_ѯRtZrrU'g ZS{εD 1l{M?xc0 MzopZ맻`oEQcL ÎA4Otv?[OHUî ` d뮻Z_}䭷~X3jV?<7@?M3ia$ c?ZED0̧Ґ ˫hIzkŗeye=+kyCEo+(!X NV*/ٟT*b#T58VD}$?㽿bA`1A A8kEQ䬵~GėbDT@A//_g}}?W�LS?ԝß}HQceaaVs8z/$N乻dq.+nH. 1S1j jExs{#zw@ A{ݟɿephv yi$}-KEdXhU> ( sroT@m`KNw<vwbn~ (4g8z8Á IAuc/b@ ԋQ"Fj@/noȃ?=0” 4yg~93sJRj5z{eٷ]1y؉I 1V*&PcQ]^}o|\5<~_X8c]8F{v$N4IbQ%k֋8cP:PoVtՏ&qG<7�c�0n'o?i8p, Tx/X ƪ1EQ_~?>�EԸ&(�~Ň/Dat+(,'߂C&e|;r^8cX 0V~</?czSn<#*\-FvA�O<SU8v zn5T^s޼k]%7?f?'~0y`acsC@>0> aF,,ݞg8 jrϢ=ƛ?_x�v=Њ&Xvv;W_9c̬Kk0Ҝ`<7Hu}'?ȁl5c~ަ`@Qx)=ByģQ<~eBv~`sTUƪz0<}_z +omJ u 8h+}<ƂO3kJ^"i||~=-w+gW�~g}6�^/�/p68@wh4s.����IENDB`����������������quodlibet-3.0.2/quodlibet/images/hicolor/64x64/apps/������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�022362� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/64x64/apps/quodlibet.png�����������������������������������0000644�0001750�0001750�00000004216�12161032160�025055� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<�� IDATxpT?w7aChHJ) ['  2#PȥCbDpb2? Ai-(H:2:P*!hLH$ HwOx%Iy/<GNv6w}w93BA_4 5馩%钩|pboIPDBy("p5qۣ.G*PVGl\ڀVBr{&_tS)0-o\eF*R*11"Cg. Gx lf(Tء<éM3{SZJ/m '+ΰd~TҊ zhߛwy#:pȡj7D�.Gá3'<2ͫzn/"r'�ݺÛBuKee=POt%%H[((8iO$ԉfjϻ˯6@k]- 4DzxV?ᅇx K_G{U�)m9^U㄂1$-Z腇x`٢weetCDhnnfk9S]}w[sӵ1ub1�+,˺ '0~cO"]@yK~ew3Zs-F2s'K,Jz)hŲE;\yڼ44F9U^T}I47WFo1$B}<q(V`"vu~C[oFΑg׮Wv"1•+Wr1R"b )E$1 #U$|/x@kmqUV~d{f!"q0;wc_!ueY)ƌ<nyz>[gk?m/7oٱ3ioAB 0Vkc,˚/8jG2$m}wBkmYV?@/K w:b3& _sVTBVZbn4W=:9c;I  F6uϒG{32.m^\z~q*˲7B ~_жTCw?eYY~2 D�clCԥDJD =xqeY%`O~/\ӕ۴%XGTV1OtIN+b6e`<X]D #BcC[mjY�Tحn-oLK%8!$Ž PWq4x ϲ ^أ#80QD̽^tZ-U@".2.\ȴMw%hmAL3CP  5 qo9=]K@t{@|[TVf&8 s^#q}%OcD�/TIⶁڮkFqԔTY9`.y�}?ʼnYAV +V-/R=z.B%0nu&ŗ^E"_l|fL;M^"F;/Wa78Xvh agut>1X=z$۶K09�P()//G"oiSa:IHHp^3q#`Gc0lUq:Džl|VkTJe;J ˖ \=0/*AmJ0x%u2sֳ8n (Z`KOPJ([L4.@O�־~APJ!ưz͚x/ta[Rϟٳ㇏�Sv6Bĸq(** Z7_c/tRb^!)`jg КȔR2hРsb7t xSku`J}Əz컑\t>_t=ˍP@vvvauF }`"|̙`_Lxb֬Y Æ Z7B� 4 hAtԑ`%����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/64x64/apps/exfalso.png�������������������������������������0000644�0001750�0001750�00000007434�12161032160�024533� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���@���@���iq���sBIT|d���tEXtSoftware�www.inkscape.org<��IDATx{p\u?wZ,$O #!-cI8<e2eI6\L0&mH I%?R0X<,d 0z!=cڽ{weM{f99*J/r_.i钥7^.0U7j-YJn.k6Yyh3j?.< r%K sMji VQ칃oA u \o zX]fQ֢]"T9" <,u p,^<M5DJ&Ê"خޒg>Ij* nTDEDA8{ݲckܪgP�Q@D@~bB'"# ʑ;Bק"Yk}tM]r-x)BVDdY or3[ܑ//C"$A)HyZ#( 2LL=|w2i׻P3ɟƭ DJ$',R_V̚�n�D 2H=QΊHXA^={oO6iQxH`)]"JC㑴%v ĭzIa@yCA'0$u-($/&YU4gkakt($qS9i+A(fau n/~C1i$vm0*m֌764wND8zJ]%|I95!z\6 13UVۼk3W޹V +4-7c~g'#}fcMo7a8m @:jU 3bd&!c86+6< v2M3>- }<>>"g"RODOp#uuI}#@|KP3g]lLSTX.DWR[ȤP-yƭ #ݧ?-I3 D%wUl6[pM\KhA}"c 7984> }%c ); zZr2ޕIG'M@{~ѴD |6X,G]�d"bOM^b{M^/ėm&�@ND4�AfW)Ri,63tE98�\DY1_!OD2k$gg�0*%1iʖsR|sWTpROsRAz" 1ߟt=3$ꛂncZz<m 6% 1z&դ%O $}!^qJUHF#wk/׭zNN ?@l6rD=H2' �%dҴGH6V7&og$ĭ4=Q2p|$D>im恢!ISXj~I)! ޺7B�qeFmɂ'+7dŰiin/좡 <V=맜�ۜځAFFG 22%3@g^g*Ewm@VقjT|l\ VkJ'kܪ'rQ�}˽T=t:ɮnz>p(D0 #l-rt8P*ex1cz33ZZOJ;0pXV=_Ǥ H� mG~ϖ f]#ɗȦX-9KU'`ízBs -9`0hʁyöqI{֯Kw8 @7! NUdpO 3Nџx2GĖ*l:ɧׇ:ns`۔)ze1UeF-Q_J\%xG/m}n/mpX/�sUubEPL&D8A2WjH�! n P@blIBOj[ՈD{ TX]KXo׷ȌV*(EC +eؼM1- 3ޞH0c!TQIQ8g|tbhm#jg;"SW<-sV.z?H^()Qٴaoڈ4RGr;˝g7^4,@B-Yܷl͵ybl61pEY)'<j YѾ8 cT7<tݷrpYgH4ʱc*>r(٧�xt�0"BW/K~nF =|αw6ON-ȊB%?{{݆%�pTj e%k$yݴL큠of|&Dr?}ĶҲk MTtttM 1Q-"2a"´iFS/."݅HnٳgL�A$ %R [Shq$<SKw^@raԕ_?U#ɋ\ǘ&f͜ޝ@Df>mxxj``YAW!}]bAUU IRVɧ~?�^iEPzyH"Vd1 32 #l$y#D"=z2\Ohs:td(.;ѴJ:::�Փ&�hK K>}LΝc@Wf(MB㩩P(n6GN 48O?sm?QRY8&,P%B,[=/bZ Wͫ\NgbD8tᡬq 4YHiz8M1n7X#mzS`QLGrzJ&"y{n�Wb;nH4РߪZ@Q7}a11ҭzr}5>sƶ6S$-<|խzv9(''QY:ӯwɕW{< <\76nE 蛻dɒ';::޽{Hd\7B!:;;̙�E@NHwGP$.W v;EEv^/-.y˘j/(}vd\x{ھѣG蠧p8L$/3AEaڵlٲ}޷!Rj2{F2)**2}e",Y(ySoC@/ /ݪg2I~ ^%>_Fioo_P(D @Db߾} #Ls+c?~tٳE|"~_K&~-ʤsYbw5>xwe;w䥗^ʫ|Zclw]c۶�^3,ۀ\'0/%B+U֭<x{ƍg(kȏ,_}&;/F{[n͛˟K3uLL6|G'[b?477j޼? } bZ MbU�~;ߐͯD����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/index.theme������������������������������������������������0000644�0001750�0001750�00000000704�12161032160�022752� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Icon Theme] Name=ql Comment=qltheme Hidden=true Directories=16x16/devices,16x16/places,24x24/actions,24x24/status,48x48/devices,64x64/apps,64x64/status,scalable/apps [scalable/apps] Size=48 Type=Scalable [64x64/status] Size=64 Type=Fixed [64x64/apps] Size=64 Type=Fixed [48x48/devices] Size=48 Type=Fixed [24x24/status] Size=24 Type=Fixed [24x24/actions] Size=24 Type=Fixed [16x16/devices] Size=16 Type=Fixed [16x16/places] Size=16 Type=Fixed ������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/24x24/�����������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�021407� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/24x24/status/����������������������������������������������0000755�0001750�0001750�00000000000�12173213432�022732� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/24x24/status/audio-volume-muted.png������������������������0000644�0001750�0001750�00000001616�12161032160�027160� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���bKGD������C��� pHYs���H���H�Fk>��.IDATHՕoUǿ^'ujHM JRK"z�P=rB^8". *HX%@R$b$BV&x_,8n8"zH+YxOhƲgU̷^}gOP[dD%f}/sk (_bbb‚;Q?H2_J ,�A=W޼r'cO:v*c$I0s;[EDgleߌ<ӧoMq Xƀ3Pcɷ& "Kz쥋0|$O>QTlf$`tX;חϦw|Y~�&`4|7!|TO V!LyC�C$r4N#S�V B3PV# ) sQkc= fc.hͺ)א1!fgg_0&@Daѭ;KMBa`XMZPlh &QD0&ifr2o}.`�EY A"5%e_m׊w>s߄ Bqm)r1<"+a�Q]BS|H*&lD"_x9 bFȅ\J-Hi`z3sSZk0GE XRjQDZ_v �^�S[ �NIm;�("ZZww~>j﫜-�D�{+5V;{$)^YY;k1)y����IENDB`������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/24x24/status/audio-volume-high.png�������������������������0000644�0001750�0001750�00000002524�12161032160�026760� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���bKGD���Ԃ��� pHYs�� �� oy��� vpAg�������xL��XIDATHݔ]LW3;3TX[61j-E*T"EcF͖@oE#Z[iVcCc B+Tc(.UX@W3{^xپ7_r<9}Kmo-{˺�_WsN&ѕ$9=OxK#xsa:�` 24n>)'@mm ^w=(F3r[L0 w�_<(gK~�LSt7aK|j-;;d啽Y �KnPy�u5_^if6>]\"1&@$DS�{Wa}QZQ)HD][©FgJd23@dB$pnN]Ntoiuo;?ڒ>NM^�"rU ʊu@FL-|Bׯ#C4'!=# �^9#�yN%/GQ�G dee!'8z. #x HLu%TT^^ �-k~R�HJO%G;Q\ �n4e K{hn 5/b�FK��� �;c,10Fv(BT!0DP#㕈utbo>& z5\ ,��ZTa %DdZ|088M3S-&c a8GĹshO^x�VGN@4-F~uu5vtvpNt֍Et/x~;ś߯ _F#G&�ϩMBD�QN,P ?Ι}?qQMջ쵘ToӎDU}%mS�󼳗wۃ@ \kv8%� TgTeotEy>;Kv.Yg~"))lzw؂ɛl�H`&YdNd7myvR;QU_{[#H� �'Nݝ?`@(& yqNK�~4�+x�NԔG..zҿZ���%tEXtdate:create�2009-11-23T23:27:35+00:00:Jo���%tEXtdate:modify�2009-11-23T23:27:35+00:00K���tEXtSoftware�www.inkscape.org<����IENDB`����������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/24x24/status/audio-volume-low.png��������������������������0000644�0001750�0001750�00000001760�12161032160�026643� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���bKGD���Ԃ��� pHYs�� �� oy��� vpAg�������xL��IDATHݕkQƿٝMUf/ 1X)bBBSKP/F"TLb!>vU"Fu}NdUds" JOs;=z)>uR[e yA�QhY 3c+:::_G$ݵ- r"Y4pN9}*@{DI>}*[@*R%V\@8@�&3uM4Uoٴ!z>TU 0ݍa{î9[B55  .hm<vs& мm3Um&m+cq u\X$]�P:2_lD"%D"*_ }0 pxAԴ�._pzي%;}e@Dqq4- ǡ!04@.{��\f{kH\l6GuX6dIcL'iv"J?fh/x{^RKF$<~ĶEXn߽#$I8H#�(м/>y| _+6CPm3.fsY3Ucm�нk=7xl{^gs9F\0MXm6KT iH&/#ej4 pN0qJ&^LHoaG0 ,�1�U�_d2H,P*=b KyŞ]1}`;𘋙�fV׭o4 >~�~Ï΀���%tEXtdate:create�2009-11-23T23:27:34+00:00A���%tEXtdate:modify�2009-11-23T23:27:34+00:00g���tEXtSoftware�www.inkscape.org<����IENDB`����������������quodlibet-3.0.2/quodlibet/images/hicolor/24x24/status/audio-volume-medium.png�����������������������0000644�0001750�0001750�00000002214�12161032160�027315� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���bKGD���Ԃ��� pHYs�� �� oy��� vpAg�������xL��IDATHݔOleƟٝneK,"X$d A)`&dӴ^ M ̶i%nݭY :̷xhkbݣ<~ux޺N9�QY7 ;PC?/ "D[8#A Vt9i8'ʙ(Aws ",'Dk' ǻk[ݺۭ:nۭSᾇc A/)�vΘPUhŀw},+b]_<?q`x`r`]sl6"UU׭o;Z;WoAPQ::;^,pŤvkBa.0MI�x{vmT0�Օ$8C$m<ɩH f:8 q'= �O?M�PTW6̀199 0ğ33` l,B�`T娶�P<~0$IΘ[f K2+0 p"B'ĵߵ#_yo&?[�0(jpQ* 4342,$IӂE  �fW~w PQS?ZC:e1<;nh)gnJw#w7Gށ] ?IQf#.D7=I\xtXe|OIy!9VMZݞ\ΝJ$ �D,>ysjUc�uNƯ!s]#>|s.|`SE"VnE< � >N$Bre=Kb �pt}է!lV^S9%܋[T\5h-W ٰTZ�Z���%tEXtdate:create�2009-11-23T23:27:35+00:00:Jo���%tEXtdate:modify�2009-11-23T23:27:35+00:00K���tEXtSoftware�www.inkscape.org<����IENDB`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/24x24/actions/���������������������������������������������0000755�0001750�0001750�00000000000�12173213432�023047� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/24x24/actions/media-eject.png������������������������������0000644�0001750�0001750�00000001225�12161032160�025716� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���������w=���bKGD������ pHYs�� �� ~���tIME3}��"IDATHUKoQ={3tHaS R(ĥB5ʶEEѥĄӝIY21M[4"H @Mcj5=#kش0> DX,P1}:Ǩ[* g&a8y--}ڙE�$�aHdty*#g60x|[v^l.t`d PpZ-1!XQ%lf00̨Tmz!;`^x6xy]CF07 `aX/11f?~E4|>_ Dz3l6naXy=xGnŢNiԂ#cK,+Dw#kr <~JUU!PJA  àV!BZIRj:8XRz�%MeP_\#7zo_RP0$vȅEwCv:L`a~@ �Ջ?1}^pz6 ӽr4/|ʬwM����IENDB`���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/scalable/��������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�022372� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/scalable/status/�������������������������������������������0000755�0001750�0001750�00000000000�12173213432�023715� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/scalable/status/quodlibet-missing-cover.svg����������������0000644�0001750�0001750�00000104272�12161032160�031211� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="48.000000px" height="48.000000px" id="svg3077" sodipodi:version="0.32" inkscape:version="0.45+devel" sodipodi:docbase="/home/jimmac/src/cvs/gnome/rhythmbox/plugins/artdisplay" sodipodi:docname="rhythmbox-missing-artwork.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape"> <defs id="defs3"> <linearGradient inkscape:collect="always" id="linearGradient4623"> <stop style="stop-color:#888a85;stop-opacity:1;" offset="0" id="stop4625" /> <stop style="stop-color:#888a85;stop-opacity:0;" offset="1" id="stop4627" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient4452"> <stop style="stop-color:#888a85;stop-opacity:1;" offset="0" id="stop4454" /> <stop style="stop-color:#888a85;stop-opacity:0;" offset="1" id="stop4456" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient4428"> <stop style="stop-color:#eeeeec;stop-opacity:1" offset="0" id="stop4430" /> <stop style="stop-color:#ad7fa8;stop-opacity:0;" offset="1" id="stop4432" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient4420"> <stop style="stop-color:#729fcf;stop-opacity:1;" offset="0" id="stop4422" /> <stop style="stop-color:#729fcf;stop-opacity:0;" offset="1" id="stop4424" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient4401"> <stop style="stop-color:#eeeeec;stop-opacity:1;" offset="0" id="stop4403" /> <stop style="stop-color:#eeeeec;stop-opacity:0;" offset="1" id="stop4405" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient23419"> <stop style="stop-color:#000000;stop-opacity:1;" offset="0" id="stop23421" /> <stop style="stop-color:#000000;stop-opacity:0;" offset="1" id="stop23423" /> </linearGradient> <linearGradient id="linearGradient3435" gradientUnits="userSpaceOnUse" x1="12.2744" y1="32.4165" x2="35.3912" y2="14.2033"> <stop offset="0.0000000" style="stop-color:#ffffc8;stop-opacity:1.0000000;" id="stop3437" /> <stop offset="1.0000000" style="stop-color:#9a91ef;stop-opacity:0.0000000;" id="stop3439" /> </linearGradient> <linearGradient y2="14.2033" x2="35.3912" y1="32.4165" x1="12.2744" gradientUnits="userSpaceOnUse" id="linearGradient3421"> <stop id="stop3423" style="stop-color:#ffffff;stop-opacity:1.0000000;" offset="0.0000000" /> <stop id="stop3427" style="stop-color:#b8c04c;stop-opacity:0.0000000;" offset="1.0000000" /> </linearGradient> <linearGradient id="linearGradient3406" gradientUnits="userSpaceOnUse" x1="12.2744" y1="32.4165" x2="35.3912" y2="14.2033"> <stop offset="0.0000000" style="stop-color:#b307ff;stop-opacity:0.82178217;" id="stop3408" /> <stop offset="1.0000000" style="stop-color:#f0ff8b;stop-opacity:0.64356434;" id="stop3410" /> <stop offset="1.0000000" style="stop-color:#ffffff;stop-opacity:0.0000000;" id="stop3412" /> </linearGradient> <linearGradient y2="14.2033" x2="35.3912" y1="32.4165" x1="12.2744" gradientUnits="userSpaceOnUse" id="linearGradient3394"> <stop id="stop3396" style="stop-color:#fff307;stop-opacity:1.0000000;" offset="0.0000000" /> <stop id="stop3398" style="stop-color:#166eff;stop-opacity:1.0000000;" offset="0.50000000" /> <stop id="stop3400" style="stop-color:#ffffff;stop-opacity:0.0000000;" offset="1.0000000" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient6036"> <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop6038" /> <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop6040" /> </linearGradient> <linearGradient inkscape:collect="always" id="linearGradient6028"> <stop style="stop-color:#ffffff;stop-opacity:1;" offset="0" id="stop6030" /> <stop style="stop-color:#ffffff;stop-opacity:0;" offset="1" id="stop6032" /> </linearGradient> <linearGradient id="linearGradient4236"> <stop style="stop-color:#ffffff;stop-opacity:0.32673267;" offset="0.0000000" id="stop4238" /> <stop style="stop-color:#ffffff;stop-opacity:0.60396039;" offset="1.0000000" id="stop4240" /> </linearGradient> <linearGradient id="aigrd2" gradientUnits="userSpaceOnUse" x1="12.2744" y1="32.4165" x2="35.3912" y2="14.2033"> <stop offset="0" style="stop-color:#FBFBFB" id="stop3043" /> <stop offset="0.5" style="stop-color:#B6B6B6" id="stop3045" /> <stop offset="1" style="stop-color:#E4E4E4" id="stop3047" /> </linearGradient> <linearGradient id="aigrd1" gradientUnits="userSpaceOnUse" x1="14.9966" y1="11.1885" x2="32.511" y2="34.3075"> <stop offset="0" style="stop-color:#EBEBEB" id="stop3034" /> <stop offset="0.5" style="stop-color:#FFFFFF" id="stop3036" /> <stop offset="1" style="stop-color:#EBEBEB" id="stop3038" /> </linearGradient> <radialGradient inkscape:collect="always" xlink:href="#linearGradient23419" id="radialGradient23425" cx="23.334524" cy="41.63604" fx="23.334524" fy="41.63604" r="22.627417" gradientTransform="matrix(1,0,0,0.25,0,31.22703)" gradientUnits="userSpaceOnUse" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient4452" id="linearGradient4458" x1="37.288559" y1="2.8677347" x2="37.280708" y2="2.0962129" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,0.672613,0,1.682891)" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient23419" id="radialGradient4605" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,0.25,0,31.22703)" cx="23.334524" cy="41.63604" fx="23.334524" fy="41.63604" r="22.627417" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient23419" id="radialGradient4689" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,0.25,0,31.22703)" cx="23.334524" cy="41.63604" fx="23.334524" fy="41.63604" r="22.627417" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient4452" id="linearGradient4691" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.860177,0,0,0.672613,45.32049,-18.210616)" x1="37.288559" y1="2.8677347" x2="37.315113" y2="2.0962098" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient4420" id="radialGradient4693" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.847481,-0.205074,0.48358,1.798528,-14.84867,-45.28409)" cx="36.003681" cy="42.525311" fx="36.003681" fy="42.525311" r="5.3406065" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient6036" id="radialGradient4695" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.482928,3.885323e-2,-0.143595,1.606302,9.779125,-38.08456)" cx="10.935528" cy="31.069784" fx="10.935528" fy="31.069784" r="7.4477844" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient4428" id="radialGradient4697" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,1.667014,0.505147,-33.1019)" cx="37.341717" cy="16.156126" fx="37.341717" fy="16.156126" r="5.9520255" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient4401" id="radialGradient4699" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.381742,1.422698,-1.000931,0.891366,3.744765,-33.94369)" cx="10.172584" cy="7.9383407" fx="10.172584" fy="7.9383407" r="5.2316146" /> <radialGradient inkscape:collect="always" xlink:href="#linearGradient4623" id="radialGradient4701" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.405467,0.575716,-0.698805,1.380855,-70.56949,-34.99677)" cx="92.223236" cy="-47.475407" fx="92.223236" fy="-47.475407" r="0.23405507" /> <linearGradient gradientTransform="translate(0.5,-0.353553)" gradientUnits="userSpaceOnUse" y2="11.669628" x2="15.889072" y1="24.919628" x1="25.985928" id="linearGradient4415" xlink:href="#linearGradient4409" inkscape:collect="always" /> <linearGradient y2="34.3075" x2="32.511" y1="11.1885" x1="14.9966" gradientTransform="matrix(1.190476,0,0,1.190476,-4.308944,-3.833323)" gradientUnits="userSpaceOnUse" id="linearGradient3526" xlink:href="#aigrd1" inkscape:collect="always" /> <linearGradient y2="14.2033" x2="35.3912" y1="32.4165" x1="12.2744" gradientTransform="matrix(1.190476,0,0,1.190476,-4.308944,-3.833324)" gradientUnits="userSpaceOnUse" id="linearGradient3523" xlink:href="#aigrd2" inkscape:collect="always" /> <linearGradient gradientTransform="translate(-8.452e-2,-1.333323)" y2="54.698483" x2="48.798885" y1="3.6100161" x1="10.501720" gradientUnits="userSpaceOnUse" id="linearGradient3519" xlink:href="#linearGradient6036" inkscape:collect="always" /> <linearGradient y2="18.366575" x2="17.742729" y1="31.494707" x1="28.702885" gradientUnits="userSpaceOnUse" id="linearGradient3515" xlink:href="#linearGradient6028" inkscape:collect="always" /> <radialGradient r="22.627417" fy="41.63604" fx="23.334524" cy="41.63604" cx="23.334524" gradientTransform="matrix(1,0,0,0.25,0,31.22703)" gradientUnits="userSpaceOnUse" id="radialGradient3507" xlink:href="#linearGradient23419" inkscape:collect="always" /> <linearGradient y2="34.3075" x2="32.511" y1="11.1885" x1="14.9966" gradientUnits="userSpaceOnUse" id="linearGradient4961"> <stop id="stop4963" style="stop-color:#EBEBEB" offset="0" /> <stop id="stop4965" style="stop-color:#FFFFFF" offset="0.5" /> <stop id="stop4967" style="stop-color:#EBEBEB" offset="1" /> </linearGradient> <linearGradient y2="14.2033" x2="35.3912" y1="32.4165" x1="12.2744" gradientUnits="userSpaceOnUse" id="linearGradient4953"> <stop id="stop4955" style="stop-color:#FBFBFB" offset="0" /> <stop id="stop4957" style="stop-color:#B6B6B6" offset="0.5" /> <stop id="stop4959" style="stop-color:#E4E4E4" offset="1" /> </linearGradient> <linearGradient id="linearGradient4409" inkscape:collect="always"> <stop id="stop4411" offset="0" style="stop-color:#ffffff;stop-opacity:1;" /> <stop id="stop4413" offset="1" style="stop-color:#ffffff;stop-opacity:0;" /> </linearGradient> </defs> <sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="0.25490196" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="8" inkscape:cx="18.98193" inkscape:cy="24.255085" inkscape:current-layer="layer1" showgrid="false" inkscape:grid-bbox="true" inkscape:document-units="px" inkscape:window-width="872" inkscape:window-height="945" inkscape:window-x="357" inkscape:window-y="89" inkscape:showpageshadow="false" inkscape:object-points="false" inkscape:object-nodes="true" /> <metadata id="metadata4"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> <dc:title>Missing Album Cover Art</dc:title> <dc:creator> <cc:Agent> <dc:title></dc:title> </cc:Agent> </dc:creator> <dc:source></dc:source> <dc:subject> <rdf:Bag> <rdf:li>cdrom</rdf:li> <rdf:li>missing</rdf:li> <rdf:li>artwork</rdf:li> <rdf:li>inlay</rdf:li> </rdf:Bag> </dc:subject> <cc:license rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" /> <dc:contributor> <cc:Agent> <dc:title>Jakub Steiner</dc:title> </cc:Agent> </dc:contributor> </cc:Work> <cc:License rdf:about="http://creativecommons.org/licenses/GPL/2.0/"> <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" /> <cc:permits rdf:resource="http://web.resource.org/cc/Distribution" /> <cc:requires rdf:resource="http://web.resource.org/cc/Notice" /> <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /> <cc:requires rdf:resource="http://web.resource.org/cc/ShareAlike" /> <cc:requires rdf:resource="http://web.resource.org/cc/SourceCode" /> </cc:License> </rdf:RDF> </metadata> <g id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer"> <path transform="matrix(0.988381,2.280278e-2,0,0.675773,2.525222,2.657421)" inkscape:r_cy="true" inkscape:r_cx="true" d="M 45.961941 41.63604 A 22.627417 5.6568542 0 1 1 0.70710754,41.63604 A 22.627417 5.6568542 0 1 1 45.961941 41.63604 z" sodipodi:ry="5.6568542" sodipodi:rx="22.627417" sodipodi:cy="41.63604" sodipodi:cx="23.334524" id="path4603" style="opacity:1;color:black;fill:url(#radialGradient4605);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:type="arc" /> <path sodipodi:type="arc" style="opacity:0.33146069;color:black;fill:url(#radialGradient23425);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" id="path23417" sodipodi:cx="23.334524" sodipodi:cy="41.63604" sodipodi:rx="22.558737" sodipodi:ry="5.6568542" d="M 45.893261 41.63604 A 22.558737 5.6568542 0 1 1 0.77578735,41.63604 A 22.558737 5.6568542 0 1 1 45.893261 41.63604 z" inkscape:r_cx="true" inkscape:r_cy="true" transform="matrix(0.903955,0.343558,2.8045e-2,0.891465,-5.675046e-2,-7.309531)" /> <path id="path3311" d="M 6.5498913,30.647672 L 41.326175,30.647672 L 43.339294,2.5694122 L 4.358146,2.5694122 L 6.5498913,30.647672 z " style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" sodipodi:nodetypes="ccccc" /> <path style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 43.029653,2.7781408 L 30.036566,2.7781408 L 30.228815,3.6246195 C 30.228815,3.6246195 42.382213,6.7900143 41.896077,17.96323 C 41.409941,29.220297 30.798484,31.174451 30.798484,31.174451 L 41.702189,31.217838 L 41.807688,31.71488 L 43.84062,3.6246195 L 43.029653,2.7781408 z " id="path4332" sodipodi:nodetypes="ccczccccc" /> <path style="fill:url(#linearGradient4458);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 30.790233,3.0928289 L 42.711515,3.1224216 L 43.32768,3.7542939 C 43.32768,3.7542939 32.195041,3.7561996 32.140545,3.7317632 C 32.086049,3.7073267 31.002868,3.3275533 30.657727,3.2298075 C 30.312585,3.1320616 30.790233,3.1050471 30.790233,3.0928289 z " id="path4335" sodipodi:nodetypes="cccssc" /> <g inkscape:label="Layer 1" id="g4981" transform="matrix(0.7279725,0,0,0.6404786,7.6647474,2.3832427)"> <path transform="matrix(1,0,0,1.066291,0.91548,-4.218429)" inkscape:r_cy="true" inkscape:r_cx="true" d="M 45.961941,41.63604 A 22.627417,5.6568542 0 1 1 0.70710754,41.63604 A 22.627417,5.6568542 0 1 1 45.961941,41.63604 z" sodipodi:ry="5.6568542" sodipodi:rx="22.627417" sodipodi:cy="41.63604" sodipodi:cx="23.334524" id="path4983" style="opacity:0.55;color:#000000;fill:url(#radialGradient3507);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:type="arc" /> <path style="fill:url(#linearGradient3526);fill-rule:nonzero;stroke:none;stroke-miterlimit:4" d="M 24.262486,2.8333435 C 12.714866,2.8333435 3.4291519,12.119058 3.4291519,23.666677 C 3.4291519,35.214297 12.714866,44.500012 24.262486,44.500012 C 35.810106,44.500012 45.095821,35.214297 45.095821,23.666677 C 45.095821,12.119058 35.810106,2.8333435 24.262486,2.8333435 L 24.262486,2.8333435 z M 24.262486,28.666678 C 21.524391,28.666678 19.262486,26.404773 19.262486,23.666677 C 19.262486,20.928582 21.524391,18.666677 24.262486,18.666677 C 27.000581,18.666677 29.262486,20.928582 29.262486,23.666677 C 29.262486,26.404773 27.000581,28.666678 24.262486,28.666678 z" id="path3040" inkscape:r_cx="true" inkscape:r_cy="true" /> <path style="fill:url(#linearGradient3523);fill-rule:nonzero;stroke:#808080;stroke-width:1.46450281;stroke-miterlimit:4;stroke-opacity:1" d="M 24.262486,2.8333431 C 12.714866,2.8333431 3.429152,12.119058 3.429152,23.666677 C 3.429152,35.214297 12.714866,44.500012 24.262486,44.500012 C 35.810106,44.500012 45.095821,35.214297 45.095821,23.666677 C 45.095821,12.119058 35.810106,2.8333431 24.262486,2.8333431 L 24.262486,2.8333431 z M 24.262486,28.666678 C 21.524391,28.666678 19.262486,26.404773 19.262486,23.666677 C 19.262486,20.928582 21.524391,18.666677 24.262486,18.666677 C 27.000581,18.666677 29.262486,20.928582 29.262486,23.666677 C 29.262486,26.404773 27.000581,28.666678 24.262486,28.666678 z" id="path3049" inkscape:r_cx="true" inkscape:r_cy="true" /> <path sodipodi:nodetypes="csccssccsc" id="path3531" d="M 23.410538,3.4587825 C 12.648847,3.864693 4.1109275,12.676135 4.1109275,23.541217 C 4.1109275,28.466722 5.858051,32.943607 8.7777601,36.427697 L 19.895113,27.017403 C 19.173772,26.174062 18.845878,24.974235 18.845878,23.791217 C 18.845878,20.400827 21.150167,18.223842 24.413253,18.223842 C 25.897178,18.223842 27.38434,18.897269 28.271719,19.97014 L 39.639072,10.684846 C 35.963901,6.2606919 30.394797,3.4587825 24.163253,3.4587825 C 23.902492,3.4587825 23.668819,3.4490406 23.410538,3.4587825 z" style="fill:url(#linearGradient4415);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-miterlimit:4;stroke-opacity:1" /> <path style="opacity:0.51098902;fill:#eeeeec;fill-rule:nonzero;stroke:none;stroke-miterlimit:4" d="M 24.262486,13.562512 C 18.6199,13.562512 14.15832,18.155315 14.15832,23.666677 C 14.15832,29.309265 18.751124,33.770843 24.262486,33.770843 C 29.905072,33.770843 34.366652,29.178041 34.366652,23.666677 C 34.366652,18.024091 29.773848,13.562512 24.262486,13.562512 L 24.262486,13.562512 z M 24.262486,29.178041 C 21.244359,29.178041 18.751124,26.684806 18.751124,23.666677 C 18.751124,20.64855 21.244359,18.155315 24.262486,18.155315 C 27.280613,18.155315 29.773848,20.64855 29.773848,23.666677 C 29.773848,26.684806 27.280613,29.178041 24.262486,29.178041 z" id="path3051" inkscape:r_cx="true" inkscape:r_cy="true" /> <path sodipodi:nodetypes="cccccc" id="path5264" d="M 24.262482,3.8690421 C 13.288938,3.8690421 4.4648511,12.693131 4.4648511,23.666674 C 4.4648511,34.640218 13.288938,43.464305 24.262482,43.464305 C 35.236026,43.464305 44.060113,34.640218 44.060113,23.666674 C 44.060113,12.693131 35.236026,3.8690421 24.262482,3.8690421 L 24.262482,3.8690421 z" style="opacity:0.54644811;fill:none;fill-rule:nonzero;stroke:url(#linearGradient3519);stroke-width:1.46450281;stroke-miterlimit:4;stroke-opacity:1" inkscape:r_cx="true" inkscape:r_cy="true" /> <path transform="translate(3.868e-3,-1.244934)" d="M 30.405591,24.930641 A 6.0987959,6.0987959 0 1 1 18.207999,24.930641 A 6.0987959,6.0987959 0 1 1 30.405591,24.930641 z" sodipodi:ry="6.0987959" sodipodi:rx="6.0987959" sodipodi:cy="24.930641" sodipodi:cx="24.306795" id="path6026" style="opacity:0.67213111;color:#000000;fill:none;fill-opacity:0.31638417;fill-rule:nonzero;stroke:url(#linearGradient3515);stroke-width:1.3627764;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:type="arc" inkscape:r_cx="true" inkscape:r_cy="true" /> </g> <g id="g4658" transform="translate(0,20)"> <path transform="matrix(0.129981,0.103616,-0.5612,0.268864,26.58925,-1.48946)" inkscape:r_cy="true" inkscape:r_cx="true" d="M 45.893261,41.63604 A 22.558737,5.6568542 0 1 1 0.77578735,41.63604 A 22.558737,5.6568542 0 1 1 45.893261,41.63604 z" sodipodi:ry="5.6568542" sodipodi:rx="22.558737" sodipodi:cy="41.63604" sodipodi:cx="23.334524" id="path1986" style="opacity:0.33146069;color:#000000;fill:url(#radialGradient4689);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" sodipodi:type="arc" /> <path sodipodi:nodetypes="ccccc" id="path4318" d="M 38.802485,24.124906 L 37.830213,25.718084 L 5.3232208,11.518327 L 6.301098,10.350715 L 38.802485,24.124906 z" style="fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> <path sodipodi:nodetypes="cccczccccc" id="path4460" d="M 6.0617664,11.73142 L 9.373287,11.678174 L 9.4294145,11.198955 L 19.644613,11.145708 C 19.644613,11.145708 9.4013505,8.336953 8.7558849,-1.952941 C 8.1104193,-12.296081 19.532359,-16.382753 19.532359,-16.382753 L 19.700741,-17.394437 L 4.6585798,-17.394437 L 3.8727952,-16.542492 L 6.0617664,11.73142 z" style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> <path sodipodi:nodetypes="cccssc" style="fill:url(#linearGradient4691);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 18.724475,-16.904252 L 8.2883053,-16.800678 L 8.0382993,-16.324167 C 8.0382993,-16.324167 17.887911,-16.218687 17.934787,-16.243124 C 17.981664,-16.26756 18.569815,-16.58075 18.866698,-16.678496 C 19.163581,-16.776242 18.798457,-16.847645 18.724475,-16.904252 z" id="path4464" /> <path sodipodi:nodetypes="ccccc" id="path4462" d="M 8.8681398,11.784686 L 9.5416694,11.09248 L 7.3526982,-17.500929 L 6.7352961,-17.394436 L 8.8681398,11.784686 z" style="fill:#2e3436;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> <g transform="matrix(1,0,0,0.948672,3.739989,-16.860039)" id="g4585"> <path sodipodi:type="arc" style="opacity:1;fill:#555753;fill-opacity:1;stroke:none;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path4489" sodipodi:cx="25.253489" sodipodi:cy="17.17557" sodipodi:rx="0.032515224" sodipodi:ry="2.9372084" d="M 25.286004,17.17557 A 0.032515224,2.9372084 0 1 1 25.220973,17.17557 A 0.032515224,2.9372084 0 1 1 25.286004,17.17557 z" transform="matrix(99.66666,0,0,0.992191,-2495.288,-1.842986)" /> <path style="fill:#2e3436;fill-opacity:0.75;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.41067854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 22.02833,14.787463 L 23.033644,13.685554 M 20.273948,16.689852 L 21.258989,15.653691" id="path4474" sodipodi:nodetypes="cccc" /> <path sodipodi:nodetypes="cccc" id="path4485" d="M 22.191832,15.275256 L 23.681792,15.511897 M 19.669153,14.91233 L 21.024988,15.081918" style="fill:#2e3436;fill-opacity:0.75;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.41067854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> <path style="fill:#2e3436;fill-opacity:0.75;fill-rule:evenodd;stroke:#2e3436;stroke-width:0.41067854;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" d="M 21.86607,15.714554 L 22.285687,17.092161 M 20.978551,13.312538 L 21.436053,14.664751" id="path4487" sodipodi:nodetypes="cccc" /> <path style="fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 21.198562,13.955481 C 20.982043,14.015832 20.873411,13.877366 20.804693,13.780445 L 20.136399,12.665506 C 20.136399,12.665506 20.384913,12.537625 20.726323,12.446217 C 21.067733,12.354809 21.382815,12.348701 21.382815,12.348701 L 21.434849,13.690847 C 21.447845,13.774314 21.418364,13.894217 21.198562,13.955481 z" id="path4499" sodipodi:nodetypes="ccczccz" /> <use x="0" y="0" xlink:href="#path4499" id="use4523" transform="matrix(-1,0,0,-1,43.32922,30.3955)" width="48" height="48" /> <use x="0" y="0" xlink:href="#path4499" id="use4533" transform="matrix(0.882543,0.423639,-0.52195,0.882543,10.47522,-7.385998)" width="48" height="48" /> <use x="0" y="0" xlink:href="#use4523" id="use4535" transform="matrix(0.882543,0.423639,-0.52195,0.882543,10.47904,-7.399771)" width="48" height="48" /> <use height="48" width="48" transform="matrix(0.529188,0.76443,-0.941825,0.529188,24.50813,-9.400688)" id="use4537" xlink:href="#path4499" y="0" x="0" /> <use height="48" width="48" transform="matrix(0.529188,0.76443,-0.941825,0.529188,24.51908,-9.410888)" id="use4539" xlink:href="#use4523" y="0" x="0" /> <use x="0" y="0" xlink:href="#path4499" id="use4541" transform="matrix(3.403775e-2,0.900393,-1.109342,3.403775e-2,37.7791,-4.824278)" width="48" height="48" /> <use x="0" y="0" xlink:href="#use4523" id="use4543" transform="matrix(3.403775e-2,0.900393,-1.109342,3.403775e-2,37.79425,-4.828188)" width="48" height="48" /> <use height="48" width="48" transform="matrix(-0.470233,0.795096,-0.979609,-0.470233,46.73221,5.117049)" id="use4545" xlink:href="#path4499" y="0" x="0" /> <use height="48" width="48" transform="matrix(-0.470233,0.795096,-0.979609,-0.470233,46.7475,5.120499)" id="use4547" xlink:href="#use4523" y="0" x="0" /> <use x="0" y="0" xlink:href="#path4499" id="use4549" transform="matrix(-0.848505,0.476752,-0.587391,-0.848505,48.96846,17.75954)" width="48" height="48" /> <use x="0" y="0" xlink:href="#use4523" id="use4551" transform="matrix(-0.848505,0.476752,-0.587391,-0.848505,48.9798,17.7694)" width="48" height="48" /> </g> <path sodipodi:nodetypes="ccccc" id="path4316" d="M 6.5407377,-16.123826 L 8.4096557,12.430772 L 37.830213,25.718084 L 39.863145,-7.906376 L 6.5407377,-16.123826 z" style="fill:#eeeeec;fill-opacity:0.53072623;fill-rule:evenodd;stroke:#babdb6;stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> <path id="path4275" d="M 3.2620499,-16.964062 L 39.964687,-7.91652 L 41.157199,-8.984633 L 4.8520557,-17.718024 L 3.2620499,-16.964062 z" style="fill:#eeeeec;fill-opacity:1;fill-rule:evenodd;stroke:#babdb6;stroke-width:0.99999964;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> <path sodipodi:nodetypes="ccccc" id="path4337" d="M 27.472505,20.684343 L 37.354444,25.227271 L 38.153718,10.635069 L 37.572427,10.547341 L 27.472505,20.684343 z" style="opacity:0.16853931;fill:url(#radialGradient4693);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> <path style="opacity:0.74157302;fill:url(#radialGradient4695);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 20.37171,17.272429 L 8.8487475,12.132083 L 8.0192873,-3.736998 L 8.8904575,-1.523718 L 20.37171,17.272429 z" id="path4355" sodipodi:nodetypes="ccccc" /> <path inkscape:transform-center-y="4.1404464" inkscape:transform-center-x="2.8597408" style="opacity:0.61797755;fill:url(#radialGradient4697);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="M 27.680483,-10.92165 L 39.584534,-7.804756 L 38.473694,8.922561 L 35.747222,7.435952 L 27.680483,-10.92165 z" id="path4367" sodipodi:nodetypes="ccccc" /> <path id="path4399" d="M 6.9789685,-15.595712 L 18.171855,-12.841799 L 8.0671658,-1.90058 L 6.9789685,-15.595712 z" style="fill:url(#radialGradient4699);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> <path transform="matrix(3.211811,0,-0.443887,1.817612,-312.5037,69.01838)" d="M 92.577782,-47.368439 A 0.23405507,0.19804659 0 1 1 92.109672,-47.368439 A 0.23405507,0.19804659 0 1 1 92.577782,-47.368439 z" sodipodi:ry="0.19804659" sodipodi:rx="0.23405507" sodipodi:cy="-47.368439" sodipodi:cx="92.343727" id="path3319" style="opacity:1;fill:url(#radialGradient4701);fill-opacity:1;stroke:none;stroke-width:0.03583033;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" sodipodi:type="arc" /> </g> </g> </svg> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/scalable/apps/���������������������������������������������0000755�0001750�0001750�00000000000�12173213432�023335� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/scalable/apps/exfalso.svg����������������������������������0000644�0001750�0001750�00000014325�12161032160�025516� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="64px" height="64px" id="svg7149" sodipodi:version="0.32" inkscape:version="0.42" sodipodi:docbase="/home/bene/src/quodlibet" sodipodi:docname="exfalso.svg" inkscape:export-filename="/home/bene/Desktop/exfalso.png" inkscape:export-xdpi="90.000000" inkscape:export-ydpi="90.000000"> <defs id="defs7151"> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient3614" x1="7.9840488" y1="6.4300642" x2="16.909092" y2="53.272732" gradientUnits="userSpaceOnUse" gradientTransform="translate(90.44897,-28.04676)" /> <linearGradient id="linearGradient2854"> <stop style="stop-color:#0a0a0a;stop-opacity:1.0000000;" offset="0.0000000" id="stop2856" /> <stop style="stop-color:#224354;stop-opacity:1.0000000;" offset="1.0000000" id="stop2858" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient5100" x1="7.9840488" y1="6.4300642" x2="16.909092" y2="53.272732" gradientUnits="userSpaceOnUse" gradientTransform="translate(90.44897,-28.04676)" /> <linearGradient id="linearGradient3616"> <stop style="stop-color:#000000;stop-opacity:1;" offset="0" id="stop3618" /> <stop style="stop-color:#ffffff;stop-opacity:0.99170125;" offset="1.0000000" id="stop3620" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient3622" x1="39.500000" y1="73.000000" x2="-3.0000000" y2="12.849862" gradientUnits="userSpaceOnUse" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient4356" x1="39.500000" y1="73.000000" x2="-3.0000000" y2="12.849862" gradientUnits="userSpaceOnUse" /> </defs> <sodipodi:namedview id="base" pagecolor="#120a14" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0000000" inkscape:pageshadow="2" inkscape:zoom="4.0000000" inkscape:cx="46.614169" inkscape:cy="26.385804" inkscape:current-layer="layer1" showgrid="true" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:window-width="836" inkscape:window-height="539" inkscape:window-x="15" inkscape:window-y="45" /> <metadata id="metadata7154"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> </cc:Work> </rdf:RDF> </metadata> <g id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer"> <path sodipodi:nodetypes="cscscscscscscscsc" id="path2106" d="M 5.2258620,5.2258619 C 12.293855,12.670378 9.2267731,17.432756 13.104821,26.200907 C 16.703646,34.337760 24.537595,28.247279 29.900824,34.000012 C 24.537619,39.752698 16.676989,33.635631 13.078188,41.772482 C 9.2001631,50.540657 12.293833,55.329622 5.2258620,62.774138 C 12.670379,55.706145 17.459344,58.799838 26.227519,54.921813 C 34.364394,51.322988 28.273891,43.489039 34.026646,38.125811 C 39.738415,43.489645 33.672151,51.353995 41.799117,54.948423 C 50.569221,58.827332 55.327994,55.704587 62.774138,62.774138 C 55.704611,55.327994 58.827308,50.569198 54.948424,41.799117 C 51.353996,33.672151 43.516256,39.711805 38.152422,34.000012 C 43.516256,28.288196 51.353996,34.327851 54.948424,26.200907 C 58.827332,17.430802 55.704587,12.672006 62.774138,5.2258619 C 55.327971,12.295390 50.569198,9.1726917 41.799117,13.051577 C 33.672151,16.646005 39.738415,24.510379 34.026646,29.874213 C 28.273914,24.510961 34.364394,16.677012 26.227519,13.078187 C 17.459344,9.2001627 12.670379,12.293855 5.2258620,5.2258619 z " style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.65200000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1.0000000" /> <path style="fill:url(#linearGradient3622);fill-opacity:1.0;fill-rule:evenodd;stroke:url(#linearGradient4356);stroke-width:0.75200000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-opacity:1" d="M 3.225862,3.2258619 C 10.293855,10.670378 7.2267731,15.432756 11.104821,24.200907 C 14.703646,32.33776 22.537595,26.247279 27.900824,32.000012 C 22.537619,37.752698 14.676989,31.635631 11.078188,39.772482 C 7.2001631,48.540657 10.293833,53.329622 3.225862,60.774138 C 10.670379,53.706145 15.459344,56.799838 24.227519,52.921813 C 32.364394,49.322988 26.273891,41.489039 32.026646,36.125811 C 37.738415,41.489645 31.672151,49.353995 39.799117,52.948423 C 48.569221,56.827332 53.327994,53.704587 60.774138,60.774138 C 53.704611,53.327994 56.827308,48.569198 52.948424,39.799117 C 49.353996,31.672151 41.516256,37.711805 36.152422,32.000012 C 41.516256,26.288196 49.353996,32.327851 52.948424,24.200907 C 56.827332,15.430802 53.704587,10.672006 60.774138,3.2258619 C 53.327971,10.29539 48.569198,7.1726917 39.799117,11.051577 C 31.672151,14.646005 37.738415,22.510379 32.026646,27.874213 C 26.273914,22.510961 32.364394,14.677012 24.227519,11.078187 C 15.459344,7.2001627 10.670379,10.293855 3.225862,3.2258619 z " id="path7057" sodipodi:nodetypes="cscscscscscscscsc" inkscape:export-filename="/home/bene/Desktop/path7057.png" inkscape:export-xdpi="90.000000" inkscape:export-ydpi="90.000000" /> </g> </svg> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/scalable/apps/quodlibet.svg��������������������������������0000644�0001750�0001750�00000022037�12161032160�026044� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="64" height="64" id="svg7163" sodipodi:version="0.32" inkscape:version="0.48.1 r9760" sodipodi:docname="quodlibet.svg" inkscape:export-filename="/home/lazka/Desktop/afaf.png" inkscape:export-xdpi="90.000000" inkscape:export-ydpi="90.000000" version="1.1"> <defs id="defs7165"> <linearGradient id="linearGradient2854"> <stop style="stop-color:#0a0a0a;stop-opacity:1.0000000;" offset="0.0000000" id="stop2856" /> <stop style="stop-color:#224354;stop-opacity:1.0000000;" offset="1.0000000" id="stop2858" /> </linearGradient> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient2092" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.802232,-1.7937)" x1="22.892284" y1="53.865356" x2="6.6690922" y2="2.7937005" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient2094" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.802232,-1.7937)" x1="22.892284" y1="53.865356" x2="6.6690922" y2="2.7937005" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient2832" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.802232,-1.7937)" x1="22.892284" y1="53.865356" x2="6.6690922" y2="2.7937005" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient2834" gradientUnits="userSpaceOnUse" gradientTransform="translate(-0.802232,-1.7937)" x1="22.892284" y1="53.865356" x2="6.6690922" y2="2.7937005" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient2807" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.25988,0,0,0.25988,0.03158064,-0.587767)" x1="22.892284" y1="53.865356" x2="10.679447" y2="8.5585861" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient5092" x1="5.9066291" y1="13.653723" x2="2.6446903" y2="1.5526923" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.973,0,0,0.973,0.233667,0.125665)" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient5104" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.25988,0,0,0.25988,0.03158064,-0.587767)" x1="22.892284" y1="53.865356" x2="10.679447" y2="8.5585861" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient5106" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.973,0,0,0.973,0.233667,0.125665)" x1="5.9066291" y1="13.653723" x2="2.6446903" y2="1.5526923" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient5109" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.25988,0,0,0.25988,0.09824731,-0.587767)" x1="22.892284" y1="53.865356" x2="10.679447" y2="8.5585861" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient5111" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.973,0,0,0.973,0.300334,0.125665)" x1="5.9066291" y1="13.653723" x2="2.6446903" y2="1.5526923" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient5118" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.25988,0,0,0.25988,0.09824731,-0.587767)" x1="22.892284" y1="53.865356" x2="10.679447" y2="8.5585861" /> <linearGradient inkscape:collect="always" xlink:href="#linearGradient2854" id="linearGradient5120" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.973,0,0,0.973,0.300334,0.125665)" x1="5.9066291" y1="13.653723" x2="2.6446903" y2="1.5526923" /> </defs> <sodipodi:namedview id="base" pagecolor="#5d5d5d" bordercolor="#555555" borderopacity="1.0000000" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom="3.609375" inkscape:cx="25.114542" inkscape:cy="27.205567" inkscape:current-layer="layer1" showgrid="true" inkscape:document-units="px" inkscape:grid-bbox="true" inkscape:window-width="836" inkscape:window-height="645" inkscape:window-x="420" inkscape:window-y="139" showborder="true" inkscape:showpageshadow="true" borderlayer="false" inkscape:window-maximized="0"> <inkscape:grid id="GridFromPre046Settings" type="xygrid" originx="0px" originy="0px" spacingx="1px" spacingy="1px" color="#3f3fff" empcolor="#3f3fff" opacity="1.0000000" empopacity="1.0000000" empspacing="5" visible="true" enabled="true" snapvisiblegridlinesonly="true" /> </sodipodi:namedview> <metadata id="metadata7168"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> </cc:Work> </rdf:RDF> </metadata> <g id="layer1" inkscape:label="Layer 1" inkscape:groupmode="layer" transform="translate(0,48)"> <g id="g5114" transform="matrix(3.6029398,0,0,3.400543,0.36001876,-43.177329)"> <path style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.48575303;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" d="M 6.1798534,1.0573299 C 5.0141243,0.99673022 4.2895164,1.7840048 4.5668343,2.7286013 5.2308964,4.5646865 7.6934008,4.8480274 8.879635,3.9863485 c 0,3.9000804 -0.3928676,7.8451175 -0.3928676,11.7451985 0.9727608,0.02685 0.9829249,0.04966 1.1466624,-0.754613 C 9.8010183,12.729655 11.131473,12.715028 12.174375,11.503639 13.027983,10.51549 13.723642,8.6636809 12.85172,7.4969664 12.429953,6.9326025 11.290195,5.281491 11.393597,5.5231395 c 0.461358,0.9920821 1.520618,2.7726382 1.241082,3.8974712 -0.35437,1.3489113 -1.644544,2.2098273 -2.9673493,2.4194113 -0.3380747,0.05118 -0.1529459,-0.05205 -0.1865746,-0.613626 0,-2.7877165 0,-5.2983777 0,-8.0860965 C 9.037773,2.0020309 7.3838694,1.0202791 6.1798534,1.0573299 z m 0.4398794,0.060979 C 7.7397822,1.0637596 8.990187,2.2003597 8.849463,3.4249919 8.5590767,4.5084177 7.0138286,4.2199527 6.2621211,3.6887805 5.4266258,3.2837657 4.6752007,1.8548689 5.6866184,1.2917715 5.8802378,1.1849157 6.1333655,1.1317278 6.6197328,1.1183093 z" id="path5094" sodipodi:nodetypes="ccccccsccccccccccc" inkscape:connector-curvature="0" /> <path sodipodi:nodetypes="ccccccsccccccccccc" id="path7097" d="M 5.7731025,0.24514103 C 4.6073734,0.18454132 3.8676444,1.5940457 4.6049796,2.5134553 5.3363552,3.664692 7.0866499,4.3691719 8.2728841,3.507493 c 0,3.9000803 0.01599,8.288006 0.01599,12.188087 0.7062515,0.194054 0.3803181,-1.08504 0.5464968,-1.533432 0.3310208,-1.693166 1.9508431,-2.573594 2.9937451,-3.784983 0.853608,-0.988149 0.966553,-2.4982017 0.21844,-3.5923875 C 11.835657,6.4748534 11.150111,5.2026355 11.253513,5.444284 11.714871,6.4363661 12.307464,7.5502555 12.027928,8.6750885 11.673558,10.024 10.383384,10.884916 9.0605786,11.0945 8.7225041,11.14568 8.7442001,11.04245 8.7105714,10.480874 c 0,-2.7877167 0,-5.5754342 0,-8.363153 C 8.2675893,0.97945235 6.9771185,0.20809023 5.7731025,0.24514103 z M 5.9129819,0.60612042 C 7.0330313,0.55157074 8.3834361,1.4548375 8.2427121,2.6794697 7.9523258,3.7628955 6.4724508,3.6822227 5.7207433,3.1510505 4.885248,2.7460357 4.2684498,1.34268 5.2798675,0.77958257 5.4734869,0.67272679 5.6932813,0.61953887 5.9129819,0.60612042 z" style="fill:url(#linearGradient5118);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient5120);stroke-width:0.48575303;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" inkscape:connector-curvature="0" /> </g> </g> </svg> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/48x48/�����������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�021423� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/48x48/devices/���������������������������������������������0000755�0001750�0001750�00000000000�12173213432�023045� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/48x48/devices/multimedia-player-apple-ipod.png�������������0000777�0001750�0001750�00000000000�12171345056�035364� 2multimedia-player.png�������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/48x48/devices/multimedia-player.png������������������������0000644�0001750�0001750�00000005565�12161032160�027204� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������PNG  ��� IHDR���0���0���W���sBIT|d��� pHYs�� �� B(x���tEXtSoftware�www.inkscape.org<�� IDATh}lu3u{w:")R%>R젶`BI4±p"&jZ.(` ]IZцRvj'RE-H<;>wogǒ'RI")80,p~}3sBkYo[c`>kGӞJ^!n"ZR ۱lf>?wAzV[O75}}~)p(Iϴ!Ok"� ޳*8axA@86^x{�b>C^NvޱAZ[S,o͊�!,gtE9t(ҏ�87 tZiޜh&+�ٵK &B�":څﲲ8tX"d #X&ѤpckX0]a# Dh5oxb.]c Oz{n>e0|a"i`bU&�_e}KcqT&F@)PeT+XV}_ZX<PQB?GG嗖�㟿'Z0B^%l+aSǗBFC& Sh* ,ʼrrPt0qB |d @@y:>؇zHDE6BJRC!BgAu�xsD6tv! h X}>�4B00AE @x >bĮ;o~ s2&tckZsj'㏟|&J[s.m;a �+M8N׍LNL&фNP߀ҘhPS*]M9:Zu'Zu[Aހx eDhii<`&nEA4ò,ٹu9p�^^z<+uo( !i:B7gUGrHEykjfY6%o9:-z<ZĶ[wx$HR \׍V0 .. } LzzouJ׍R.0U`?pсGz$J|{k4122B*B)E*lY- u3i )1$Iֱ_P(*ضS߾}=_?/^rDn˲I&RFD[kKՁCCeY }!vl@rjTL2bv,۱:-@ w_T�{[7\N1 P 57319y �Q�s8m;fP.H)sx^w=뺴VY{۶oepp?00Nz:mY*$o,us稭!! 1LRSSS`9B;{5~o[qX q( .FN Lˊh.n*JRi__ n3 Cf2>҂ P(Jշ)L{y]]=B4D97 ݛbA29I6?itv܂ilE,Khv5bq�F/6fco~q!e:&Sh@S)Kj_E6tt`HҚ PK+1 Ô;b5U ]s[m;nf*!WJQGlmk]`ͦH)I44plٴز�Wq"Hd[t15uP,٬kn%n~<^C<NѹY;u6>y(P}(l.7w�e476)pal];wSD]4~M'B!O4<m{ɴ86B[K;03sDR'vCeA"<LM} ClӚfUfv̧?y7(="L^ڮReYK�\>"L+W){Nes7E BJ #͞){syq1d5~i*5yWI˲sc'Oɤ+ZᕢX,P.RV9s)g*5IsS `& !'p#Qjkr9\G.p=M \%&@_oi׾皚wxM=ԐOz5#(X|ߧPcYAWW7�\HEn;N\<-رıof%:Bwtiϱi6gs-3D<2)ÂXɅڽDٹ 5u$Bhh䓟)e_MJ5�Q[!˜la/ٶ;#ߜyΎ5H!(kZ/ɩ.jV p $D/<TcSA9hZ!m[ܱ6mbY8�hإ'O=Ī�;j )2+/mowhm<7;;{~l89'~晿|]Eѕ�  Ym 8{-ow"NT:_(Nf^}?!noy`ٝX"XN2܃ye߯7[-*+gN�UM%|nԊ\����IENDB`�������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/images/hicolor/48x48/devices/multimedia-player-ipod.png�������������������0000777�0001750�0001750�00000000000�12171345056�034265� 2multimedia-player.png�������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/plugins/������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017401� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/plugins/songsmenu.py������������������������������������������������������0000644�0001750�0001750�00000006323�12173212464�022001� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk from quodlibet.util.songwrapper import check_wrapper_changed class SongsMenuPlugin(Gtk.ImageMenuItem): """Plugins of this type are subclasses of Gtk.ImageMenuItem. They will be added, in alphabetical order, to the "Plugins" menu that appears when songs or lists of songs are right-clicked. They provide one or more of the following instance methods: self.plugin_single_song(song) self.plugin_song(song) self.plugin_songs(songs) self.plugin_single_album(album) self.plugin_album(album) self.plugin_albums(albums) All matching provided callables on a single object are called in the above order if they match until one returns a true value. They are not called with real AudioFile objects, but rather wrappers that automatically detect metadata or disk changes, and save or reload the files as appropriate. If the wrappers get changed after the above methods return, call self.plugin_finish() to check for changes. The single_ variant is only called if a single song/album is selected. The singular tense is called once for each selected song/album, but the plural tense is called with a list of songs/albums. An album is a list of songs all with the same album, labelid, and/or musicbrainz_albumid tags (like in the Album List). To make your plugin insensitive if unsupported songs are selected, a method that takes a list of songs and returns True or False to set the sensitivity of the menu entry: self.plugin_handles(songs) When these functions are called, the self.plugin_window will be available. This is the Gtk.Window the plugin was invoked from. This provides access to two important widgets, self.plugin_window.browser and self.plugin_window.songlist. All of this is managed by the constructor for SongsMenuPlugin, so make sure it gets called if you override it (you shouldn't have to). """ plugin_single_song = None plugin_song = None plugin_songs = None plugin_single_album = None plugin_album = None plugin_albums = None __initialized = False def __init__(self, songs, library, window): super(SongsMenuPlugin, self).__init__(self.PLUGIN_NAME) self.__library = library self.__songs = songs self.plugin_window = window self.__initialized = True try: i = Gtk.Image.new_from_stock(self.PLUGIN_ICON, Gtk.IconSize.MENU) except AttributeError: pass else: self.set_image(i) self.set_sensitive(bool(self.plugin_handles(songs))) @property def initialized(self): # If the GObject __init__ method is bypassed, it can cause segfaults. # This explicitly prevents a bad plugin from taking down the app. return self.__initialized def plugin_handles(self, songs): return True def plugin_finish(self): check_wrapper_changed(self.__library, self.plugin_window, self.__songs) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/plugins/editing.py��������������������������������������������������������0000644�0001750�0001750�00000012250�12173212464�021402� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2005 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import Gtk class RenameFilesPlugin(object): """Plugins of this type must subclass a GTK widget. They will be packed into the RenameFiles pane (currently a ScrolledWindow hidden with an expander, but that might change). The 'filter' function will be called with the song's original filename as a string (probably in the local filesystem encoding) and the proposed new filename as a unicode object. It should return an appropriate-transformed filename, still as a unicode object. The plugin must provide either a 'changed' or 'preview'. 'preview' causes the entire display to be re-previewed. 'changed' causes the Preview button to made sensitive, and Save to be disabled. If the 'active' attribute is false, the filter will not be called. This is particularly useful for gtk.CheckButtons. The '_order' attribute decides the sort order of the plugin. The default filters have orders between 1 and 2. Plugins have order 0 by default. Plugins with equal orders are sorted by class name.""" _order = 0.0 active = False def filter(self, original_filename, value): return value def filter_list(self, origs, names): return map(self.filter, origs, names) def __cmp__(self, other): return (cmp(self._order, other._order) or cmp(type(self).__name__, type(other).__name__)) class TagsFromPathPlugin(object): """Plugins of this type must subclass a GTK widget. They will be packed into the TagsFromPath pane (currently a ScrolledWindow hidden with an expander, but that might change). The 'filter' function will be called with the tag and proposed value as a unicode object. It should return an appropriate-transformed filename, still as a unicode object. If you need to work on a set of filenames at once, you should instead overload the 'filter_list' function, which takes two lists; one of original filenames, the other of proposed new filenames. The default filter_list function calls filter on each item. The plugin must provide either a 'changed' or 'preview'. 'preview' causes the entire display to be re-previewed. 'changed' causes the Preview button to made sensitive, and Save to be disabled. If the 'active' attribute is false, the filter will not be called. This is particularly useful for gtk.CheckButtons. The '_order' attribute decides the sort order of the plugin. The default filters have orders between 1 and 2. Plugins have order 0 by default. Plugins with equal orders are sorted by class name.""" _order = 0 active = False def filter(self, tag, value): return value def __cmp__(self, other): return (cmp(self._order, other._order) or cmp(type(self).__name__, type(other).__name__)) class EditTagsPlugin(Gtk.ImageMenuItem): """Plugins of this type are subclasses of gtk.ImageMenuItem. They will be added to the context menu of the EditTags tree view. The 'tags' attribute is a list of tags this plugin should appear on, or false if it should appear for all tags. This must be a class attribute, as it is checked before instantiation. The 'needs' attribute is a list of tags that must be editable in the currently selected songs for the plugin to be sensitive. The constructor is called with the tag and value for that row. This can be used to set the sensitivity of the menu item, or change its text. When clicked, the 'activated' function is called on the object, again with the tag name and value. It should return a list of (tag, value) tuples to replace the previous tag/value with. The '_order' attribute decides the sort order of the plugin. The default items have orders between 0 and 1. Plugins have order 2.0 by default. Plugins with equal orders are sorted by class name. How to Handle Submenus ---------------------- If the menu item is given a submenu, magic happens. In particular, the callbacks are proxied to the submenu's items, and are attached, via connect_object, to make sure activated is called on the original item. So, to handle submenus, 1. Make a submenu and attach it to your menu item.2 2. To each item in the submenu, attach its 'activate' signal to something appropriate to prepare the original item's activated method, 3. Because that method will be called after the subitem is clicked on, and your activate handler runs. """ tags = [] needs = [] _order = 2.0 def activated(self, tag, value): return [(tag, value)] def connect(self, signal, callback, *args, **kwargs): if self.get_submenu(): for item in self.get_submenu().get_children(): item.connect_object(signal, callback, self, *args, **kwargs) else: super(EditTagsPlugin, self).connect( signal, callback, *args, **kwargs) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/plugins/__init__.py�������������������������������������������������������0000644�0001750�0001750�00000030305�12161032160�021505� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2012 Christoph Reiter, Nick Boultbee # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import sys from quodlibet import config from quodlibet import util from quodlibet.util.modulescanner import ModuleScanner from quodlibet.util.dprint import print_d from quodlibet.qltk.ccb import ConfigCheckButton def init(folders=None, disable_plugins=False): """folders: list of paths to look for plugins disable_plugins: disables all plugins, but does not forget which plugins are enabled. """ if disable_plugins: folders = [] manager = PluginManager.instance = PluginManager(folders) return manager def quit(): PluginManager.instance.save() PluginManager.instance.quit() PluginManager.instance = None class PluginImportException(Exception): desc = "" platforms = None def __init__(self, desc, platforms=None): """platforms is a list of platform names where this error should be shown. In case it is None it will always be shown.""" super(PluginImportException, self).__init__() self.desc = desc self.platforms = platforms def should_show(self): """If the error should be shown on the current platform""" if self.platforms is not None: sw = lambda x: sys.platform.startswith(x) if sum(map(sw, self.platforms)): return True return False return True def migrate_old_config(): active = [] old_keys = ["songsmenuplugins", "eventplugins", "editingplugins", "playorderplugins"] for key in old_keys: key = "active_" + key try: active.extend(config.get("plugins", key).splitlines()) except config.Error: pass else: config._config.remove_option("plugins", key) if active: config.set("plugins", "active_plugins", "\n".join(active)) def list_plugins(module): """Return all objects of the module that satisfy the basic plugin needs: id, name and don't start with '_' If '__all__' is defined, only plugins in '__all__' will be loaded. """ try: objs = [getattr(module, attr) for attr in module.__all__] except AttributeError: objs = [getattr(module, attr) for attr in vars(module) if not attr.startswith("_")] ok = [] for obj in objs: if hasattr(obj, "PLUGIN_ID"): if not hasattr(obj, "PLUGIN_NAME"): obj.PLUGIN_NAME = obj.PLUGIN_ID ok.append(obj) return ok class PluginManager(object): """ The manager takes care of plugin loading/reloading. Interested plugin handlers can register them self to get called when plugins get enabled or disabled. Plugins get exposed when at least one handler shows interest in them (by returning True in the handle method). Plugins need to define PLUGIN_ID, PLUGIN_NAME attributes to get loaded. Plugins that have a true PLUGIN_INSTANCE attribute get instantiated on enable and the enabled/disabled methods get called. If plugin handlers want a plugin instance, they have to call get_instance to get a singleton. handlers need to implement the following methods: handler.plugin_handle(plugin) Needs to return True if the handler should be called whenever the plugin's enabled status changes. handler.plugin_enable(plugin, instance) Gets called if the plugin gets enabled. 2nd parameter is an instance of the plugin or None handler.plugin_disable(plugin) Gets called if the plugin gets disabled. Should remove all references. """ CONFIG_SECTION = "plugins" CONFIG_OPTION = "active_plugins" instance = None # default instance def __init__(self, folders=None): """folders is a list of paths that will be scanned for plugins. Plugins in later paths will be preferred if they share a name. """ super(PluginManager, self).__init__() if folders is None: folders = [] self.__scanner = ModuleScanner(folders) self.__modules = {} # name: module self.__plugins = {} # module: [plugin, ..] self.__handlers = {} # plugins: [handler, ..] self.__instance = {} # plugin: instance self.__list = [] # handler list self.__enabled = set() # (possibly) enabled plugin IDs self.__restore() def rescan(self): """Scan for plugin changes or to initially load all plugins""" print_d("Rescanning..") removed, added = self.__scanner.rescan() modules = self.__scanner.modules # remember IDs of enabled plugin that get reloaded, so we can enable # them again reload_ids = [] for name in removed: if name not in added: continue mod = self.__modules[name] for plugin in self.__plugins[mod]: if self.enabled(plugin): reload_ids.append(plugin.PLUGIN_ID) for name in removed: # share the namespace with ModuleScanner for now self.__remove_module(name) # restore enabled state self.__enabled.update(reload_ids) for name in added: module = modules[name] self.__add_module(name, module) print_d("Rescanning done.") @property def _modules(self): return self.__scanner.modules.itervalues() @property def plugins(self): """Returns a list of plugin classes or instances""" items = self.__handlers.items() return [self.get_instance(p) or p for (p, h) in items if h] def get_instance(self, plugin): """"Returns a possibly shared instance of the plugin class""" if not getattr(plugin, "PLUGIN_INSTANCE", False): return if plugin not in self.__instance: try: obj = plugin() except: util.print_exc() return self.__instance[plugin] = obj return self.__instance[plugin] def register_handler(self, handler): print_d("Registering handler: %r" % type(handler).__name__) self.__list.append(handler) for plugins in self.__plugins.itervalues(): for plugin in plugins: if not handler.plugin_handle(plugin): continue if self.__handlers.get(plugin): self.__handlers[plugin].append(handler) if self.enabled(plugin): obj = self.get_instance(plugin) handler.plugin_enable(plugin, obj) else: self.__handlers[plugin] = [handler] if self.enabled(plugin): self.enable(plugin, True, force=True) def save(self): print_d("Saving plugins: %d active" % len(self.__enabled)) config.set(self.CONFIG_SECTION, self.CONFIG_OPTION, "\n".join(self.__enabled)) def enabled(self, plugin): """Returns if the plugin is enabled. Also takes an instance.""" if type(plugin) in self.__handlers: plugin = type(plugin) return plugin.PLUGIN_ID in self.__enabled def enable(self, plugin, status, force=False): """Enable or disable a plugin. Also takes an instance.""" if type(plugin) in self.__handlers: plugin = type(plugin) if not force and self.enabled(plugin) == bool(status): return if not status: print_d("Disable %r" % plugin.PLUGIN_ID) for handler in self.__handlers[plugin]: handler.plugin_disable(plugin) self.__enabled.discard(plugin.PLUGIN_ID) instance = self.__instance.get(plugin) if instance and hasattr(instance, "disabled"): try: instance.disabled() except Exception: util.print_exc() else: print_d("Enable %r" % plugin.PLUGIN_ID) obj = self.get_instance(plugin) if obj and hasattr(obj, "enabled"): try: obj.enabled() except Exception: util.print_exc() for handler in self.__handlers[plugin]: handler.plugin_enable(plugin, obj) self.__enabled.add(plugin.PLUGIN_ID) @property def failures(self): errors = {} for (name, (exc, text)) in self.__scanner.failures.iteritems(): if isinstance(exc, PluginImportException): if not exc.should_show(): continue errors[name] = [exc.desc] else: errors[name] = text return errors def quit(self): """Disable plugins and tell all handlers to clean up""" for name in self.__modules.keys(): self.__remove_module(name) def __remove_module(self, name): module = self.__modules.pop(name) plugins = self.__plugins.pop(module) for plugin in plugins: if self.__handlers.get(plugin): self.enable(plugin, False) self.__handlers.pop(plugin, None) def __add_module(self, name, module): self.__modules[name] = module plugins = list_plugins(module) self.__plugins[module] = plugins for plugin in plugins: handlers = [] for handler in self.__list: if handler.plugin_handle(plugin): handlers.append(handler) if handlers: self.__handlers[plugin] = handlers if self.enabled(plugin): self.enable(plugin, True, force=True) def __restore(self): migrate_old_config() active = config.get(self.CONFIG_SECTION, self.CONFIG_OPTION, "").splitlines() self.__enabled.update(active) print_d("Restoring plugins: %d" % len(self.__enabled)) for plugin, handlers in self.__handlers.iteritems(): if self.enabled(plugin): self.enable(plugin, True, force=True) PM = PluginManager class PluginConfigMixin(object): """ Mixin for storage and editing of plugin config in a standard way Will use `CONFIG_SECTION`, if defined, for storing config, otherwise, it will base the keys on `PLUGIN_ID`. """ @classmethod def _config_key(cls, name): try: prefix = cls.CONFIG_SECTION except AttributeError: prefix = cls.PLUGIN_ID.lower().replace(" ", "_") return "%s_%s" % (prefix, name) @classmethod def config_get(cls, name, default=""): """Gets a config string value for this plugin""" return config.get(PM.CONFIG_SECTION, cls._config_key(name), default) @classmethod def config_set(cls, name, value): """Saves a config string value for this plugin""" try: config.set(PM.CONFIG_SECTION, cls._config_key(name), value) except config.Error: print_d("Couldn't set config item '%s' to %r" % (name, value)) @classmethod def config_get_bool(cls, name, default=False): """Gets a config boolean for this plugin""" return config.getboolean(PM.CONFIG_SECTION, cls._config_key(name), default) def config_entry_changed(self, entry, key): """React to a change in an gtk.Entry (by saving it to config)""" if entry.get_property('sensitive'): self.config_set(key, entry.get_text()) @classmethod def ConfigCheckButton(cls, label, name, default=False): """ Create a new `ConfigCheckButton` for `name`, pre-populated correctly """ option = cls._config_key(name) try: config.getboolean(PM.CONFIG_SECTION, option) except config.Error: cls.config_set(name, default) return ConfigCheckButton(label, PM.CONFIG_SECTION, option, populate=True) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/plugins/events.py���������������������������������������������������������0000644�0001750�0001750�00000007524�12173212464�021273� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- coding: utf-8 -*- # Copyright 2005 Michael Urman, Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import GObject from quodlibet import util from quodlibet.util.songwrapper import SongWrapper, ListWrapper from quodlibet.util.songwrapper import check_wrapper_changed class EventPlugin(object): """Plugins that run in the background and receive events. Event plugins, unlike other plugins, are instantiated on startup and the same instance is used even when the plugin is enabled or disabled. Callables: obj.plugin_on_song_started(song) obj.plugin_on_song_ended(song, stopped) obj.plugin_on_added([song1, song2, ...]) obj.plugin_on_changed([song1, song2, ...]) obj.plugin_on_removed([song1, song2, ...]) obj.plugin_on_paused() obj.plugin_on_unpaused() obj.plugin_on_seek(song, msec) """ PLUGIN_INSTANCE = True def enabled(self): """Called when the plugin is enabled.""" pass def disabled(self): """Called when the plugin is disabled.""" pass def list_signal_names(type_): """List of supported signal names for a GType, instance or class""" type_ = getattr(type_, "__gtype__", type_) names = [] if not type_.is_instantiatable() and not type_.is_interface(): return names names.extend(GObject.signal_list_names(type_)) if type_.parent: names.extend(list_signal_names(type_.parent)) for iface in type_.interfaces: names.extend(list_signal_names(iface)) return names def _map_signals(obj, prefix="plugin_on_", blacklist=None): sigs = list_signal_names(obj) if blacklist is None: blacklist = [] sigs = [s for s in sigs if s not in blacklist] sigs = [(s, prefix + s.replace('-', '_')) for s in sigs] return sigs class EventPluginHandler(object): def __init__(self, librarian=None, player=None): if librarian: sigs = _map_signals(librarian, blacklist=("notify",)) for event, handle in sigs: def handler(librarian, *args): self.__invoke(librarian, args[-1], *args[:-1]) librarian.connect(event, handler, event) if librarian and player: sigs = _map_signals(player, blacklist=("notify", "error")) for event, handle in sigs: def cb_handler(librarian, *args): self.__invoke(librarian, args[-1], *args[:-1]) player.connect_object(event, cb_handler, librarian, event) self.__plugins = {} def __invoke(self, librarian, event, *args): args = list(args) if args and args[0]: if isinstance(args[0], dict): args[0] = SongWrapper(args[0]) elif isinstance(args[0], list): args[0] = ListWrapper(args[0]) for plugin in self.__plugins.itervalues(): method_name = 'plugin_on_' + event.replace('-', '_') handler = getattr(plugin, method_name, None) if handler is not None: try: handler(*args) except Exception: util.print_exc() if event not in ["removed", "changed"] and args: from quodlibet import app songs = args[0] if not isinstance(songs, list): songs = [songs] songs = filter(None, songs) check_wrapper_changed(librarian, app.window, songs) def plugin_handle(self, plugin): return issubclass(plugin, EventPlugin) def plugin_enable(self, plugin, obj): self.__plugins[plugin] = obj def plugin_disable(self, plugin): self.__plugins.pop(plugin) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/plugins/gstelement.py�����������������������������������������������������0000644�0001750�0001750�00000002365�12161032160�022122� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2012 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation class GStreamerPlugin(object): """GStreamer Plugins define an element that gets inserted into the GStreamer pipeline before the audio sink and after the playbin. The method setup_element should return a new element instance or None: self.setup_element() One optional method can be implemented: self.update_element(element) update_element should apply all settings and will be called after queue_update or on pipeline creation etc. All plugin elements will be sorted by their priority attribute (higher priority elements come first) To notify setting changes, call queue_update. """ _handler = None priority = 0 @classmethod def setup_element(cls): """Return a new element instance or None""" return None @classmethod def update_element(cls, element): """Apply settings to the instance""" pass @classmethod def queue_update(cls): """Call if you want to update settings""" cls._handler._queue_update(cls) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/plugins/playorder.py������������������������������������������������������0000644�0001750�0001750�00000005674�12161032160�021762� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2007 Joe Wreschnig # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import quodlibet.qltk.playorder class PlayOrderPlugin(quodlibet.qltk.playorder.Order): """Play order plugins define alternate play orders for Quod Libet. They appear, when enabled, in the combo box in the lower left of the main window, as well as in the tray icon context menu. Play order plugins must define at least two methods, next and previous. def next(self, playlist, iter): ... def previous(self, playlist, iter): ... 'playlist' is a GTK+ ListStore containing at least an AudioFile as the first element in each row (in the future there may be more elements per row), and iter is the GtkTreeIter for the song that just finished, if any (if the song is not in the list, this iter will be None). They can also define 'display_name' and 'accelerated_name' attributes which are used as the strings for display in the combo box and menu; both default to PLUGIN_NAME. Finally, they can specify an integer 'priority' to sort the list, and a 'replaygain_profile' list which is a list of Replay Gain profile names that this mode should fall back to (e.g. a shuffle mode should not use the 'album' Replay Gain profile). There is also def set(self, playlist, iter): ... for when the user manually selects a song from the list. In this case, iter is the song they selected, and playlist.current_iter is the current iter, if any. If iter is provided and this function returns None, the currently-playing song will not be ended. If explicit "next song" button presses should be handled differently than reaching the end of a song, use: def next_implicit(self, playlist, iter): ... def next_explicit(self, playlist, iter): ... def previous_explicit(self, playlist, iter): ... def previous_implicit(self, playlist, iter): ... There is also set_explicit, but no set_implicit. Finally, there is def reset(self, playlist): ... which is called when the playlist changes and state should be reset. """ name = None display_name = None accelerated_name = None priority = quodlibet.qltk.playorder.Order.priority class PlayOrderRememberedMixin(quodlibet.qltk.playorder.OrderRemembered): name = None display_name = None accelerated_name = None priority = quodlibet.qltk.playorder.Order.priority class PlayOrderInOrderMixin(quodlibet.qltk.playorder.OrderInOrder): name = None display_name = None accelerated_name = None priority = quodlibet.qltk.playorder.Order.priority class PlayOrderShuffleMixin(quodlibet.qltk.playorder.OrderShuffle): name = None display_name = None accelerated_name = None priority = quodlibet.qltk.playorder.Order.priority ��������������������������������������������������������������������quodlibet-3.0.2/quodlibet/player/�������������������������������������������������������������������0000755�0001750�0001750�00000000000�12173213432�017214� 5����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/player/_gstutils.py�������������������������������������������������������0000644�0001750�0001750�00000016763�12173213426�021623� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2009-2011 Steven Robertson, Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import collections from gi.repository import Gtk, GLib, Gst from quodlibet import util from quodlibet import config from quodlibet.plugins.gstelement import GStreamerPlugin from quodlibet.plugins import PluginManager def link_many(elements): last = None for element in elements: if last: if not Gst.Element.link(last, element): return False last = element return True def unlink_many(elements): last = None for element in elements: if last: if not Gst.Element.unlink(last, element): return False last = element return True def iter_to_list(func): objects = [] iter_ = func() while 1: status, value = iter_.next() if status == Gst.IteratorResult.OK: objects.append(value) else: break return objects def GStreamerSink(pipeline): """Try to create a GStreamer pipeline: * Try making the pipeline (defaulting to gconfaudiosink or autoaudiosink on Windows). * If it fails, fall back to autoaudiosink. * If that fails, return None Returns the pipeline's description and a list of disconnected elements.""" if not pipeline and not Gst.ElementFactory.find('gconfaudiosink'): pipeline = "autoaudiosink" elif not pipeline or pipeline == "gconf": pipeline = "gconfaudiosink profile=music" try: pipe = [Gst.parse_launch(element) for element in pipeline.split('!')] except GLib.GError: print_w(_("Invalid GStreamer output pipeline, trying default.")) try: pipe = [Gst.parse_launch("autoaudiosink")] except GLib.GError: pipe = None else: pipeline = "autoaudiosink" if pipe: # In case the last element is linkable with a fakesink # it is not an audiosink, so we append the default pipeline fake = Gst.ElementFactory.make('fakesink', None) if link_many([pipe[-1], fake]): unlink_many([pipe[-1], fake]) default, default_text = GStreamerSink("") if default: return pipe + default, pipeline + " ! " + default_text else: print_w(_("Could not create default GStreamer pipeline.")) return pipe, pipeline class GStreamerPluginHandler(object): def init_plugins(self): PluginManager.instance.register_handler(self) def __init__(self): self.__plugins = [] self.__elements = {} def __get_plugin_element(self, plugin): """Setup element and cache it, so we can pass the linked/active one to the plugin for live updates""" if plugin not in self.__elements: element = plugin.setup_element() if not element: return plugin.update_element(element) self.__elements[plugin] = element return self.__elements[plugin] def plugin_handle(self, plugin): try: ok = issubclass(plugin, GStreamerPlugin) and plugin.setup_element() except Exception: util.print_exc() ok = False if ok: plugin._handler = self return ok def plugin_enable(self, plugin, obj): self.__plugins.append(plugin) self._rebuild_pipeline() def plugin_disable(self, plugin): try: self.__elements.pop(plugin) except KeyError: pass self.__plugins.remove(plugin) self._rebuild_pipeline() def _remove_plugin_elements(self): """Call on pipeline destruction to remove element references""" self.__elements.clear() def _get_plugin_elements(self): """Return a list of plugin elements""" for plugin in self.__plugins: self.__get_plugin_element(plugin) items = sorted(self.__elements.items(), key=lambda x: x[0].priority, reverse=True) return [p[1] for p in items] def _queue_update(self, plugin): # If we have an instance, apply settings, otherwise # this will be done on creation if plugin in self.__elements: plugin.update_element(self.__elements[plugin]) class TagListWrapper(collections.Mapping): def __init__(self, taglist, merge=False): self._list = taglist self._merge = merge def __len__(self): return self._list.n_tags() def __iter__(self): for i in xrange(len(self)): yield self._list.nth_tag_name(i) def __getitem__(self, key): if not Gst.tag_exists(key): raise KeyError values = [] index = 0 while 1: value = self._list.get_value_index(key, index) if value is None: break values.append(value) index += 1 if not values: raise KeyError if self._merge: try: return " - ".join(values) except TypeError: return values[0] return values def parse_gstreamer_taglist(tags): """Takes a GStreamer taglist and returns a dict containing only numeric and unicode values and str keys.""" merged = {} for key in tags.keys(): value = tags[key] # extended-comment sometimes containes a single vorbiscomment or # a list of them ["key=value", "key=value"] if key == "extended-comment": if not isinstance(value, list): value = [value] for val in value: if not isinstance(val, unicode): continue split = val.split("=", 1) sub_key = util.decode(split[0]) val = split[-1] if sub_key in merged: if val not in merged[sub_key].split("\n"): merged[sub_key] += "\n" + val else: merged[sub_key] = val elif isinstance(value, Gst.DateTime): value = value.to_iso8601_string() merged[key] = value else: if isinstance(value, str): value = util.decode(value) if not isinstance(value, unicode) and \ not isinstance(value, (int, long, float)): value = unicode(value) merged[key] = value return merged def bin_debug(elements, depth=0, lines=None): """Takes a list of gst.Element that are part of a prerolled pipeline, and recursively gets the children and all caps between the elements. Returns a list of text lines suitable for printing. """ from quodlibet.util.dprint import Colorise if lines is None: lines = [] else: lines.append(" " * (depth - 1) + "\\") for i, elm in enumerate(elements): for pad in iter_to_list(elm.iterate_sink_pads): caps = pad.get_current_caps() if caps: lines.append("%s| %s" % (" " * depth, caps.to_string())) name = elm.get_name() cls = Colorise.blue(type(elm).__name__.split(".", 1)[-1]) lines.append("%s|-%s (%s)" % (" " * depth, cls, name)) if isinstance(elm, Gst.Bin): children = reversed(iter_to_list(elm.iterate_sorted)) bin_debug(children, depth + 1, lines) return lines �������������quodlibet-3.0.2/quodlibet/player/_xine.py�����������������������������������������������������������0000644�0001750�0001750�00000021636�12161032160�020672� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006 Lukas Lalinsky # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import sys import ctypes _version = 2 try: _libxine = ctypes.cdll.LoadLibrary('libxine.so.2') except (ImportError, OSError): _version = 1 try: _libxine = ctypes.cdll.LoadLibrary('libxine.so.1') except (ImportError, OSError), e: raise ImportError(e) class xine_event_t(ctypes.Structure): if _version == 1: _fields_ = [ ('type', ctypes.c_int), ('stream', ctypes.c_void_p), ('data', ctypes.c_void_p), ('data_length', ctypes.c_int), ] elif _version == 2: _fields_ = [ ('stream', ctypes.c_void_p), ('data', ctypes.c_void_p), ('data_length', ctypes.c_int), ('type', ctypes.c_int), ] class xine_ui_message_data_t(ctypes.Structure): _fields_ = [ ('compatibility_num_buttons', ctypes.c_int), ('compatibility_str_len', ctypes.c_int), ('compatibility_str', 256 * ctypes.c_char), ('type', ctypes.c_int), ('explanation', ctypes.c_int), ('num_parameters', ctypes.c_int), ('parameters', ctypes.c_void_p), ('messages', ctypes.c_char), ] # event listener callback type xine_event_listener_cb_t = ctypes.CFUNCTYPE( ctypes.c_void_p, ctypes.c_void_p, ctypes.POINTER(xine_event_t)) # event types XINE_EVENT_UI_PLAYBACK_FINISHED = 1 XINE_EVENT_UI_CHANNELS_CHANGED = 2 XINE_EVENT_UI_SET_TITLE = 3 XINE_EVENT_UI_MESSAGE = 4 XINE_EVENT_FRAME_FORMAT_CHANGE = 5 XINE_EVENT_AUDIO_LEVEL = 6 XINE_EVENT_QUIT = 7 XINE_EVENT_PROGRESS = 8 # stream parameters XINE_PARAM_SPEED = 1 # see below XINE_PARAM_AV_OFFSET = 2 # unit: 1/90000 ses XINE_PARAM_AUDIO_CHANNEL_LOGICAL = 3 # -1 => auto, -2 => off XINE_PARAM_SPU_CHANNEL = 4 XINE_PARAM_VIDEO_CHANNEL = 5 XINE_PARAM_AUDIO_VOLUME = 6 # 0..100 XINE_PARAM_AUDIO_MUTE = 7 # 1=>mute, 0=>unmute XINE_PARAM_AUDIO_COMPR_LEVEL = 8 # <100=>off, % compress otherw XINE_PARAM_AUDIO_AMP_LEVEL = 9 # 0..200, 100=>100% (default) XINE_PARAM_AUDIO_REPORT_LEVEL = 10 # 1=>send events, 0=> don't XINE_PARAM_VERBOSITY = 11 # control console output XINE_PARAM_SPU_OFFSET = 12 # unit: 1/90000 sec XINE_PARAM_IGNORE_VIDEO = 13 # disable video decoding XINE_PARAM_IGNORE_AUDIO = 14 # disable audio decoding XINE_PARAM_IGNORE_SPU = 15 # disable spu decoding XINE_PARAM_BROADCASTER_PORT = 16 # 0: disable, x: server port XINE_PARAM_METRONOM_PREBUFFER = 17 # unit: 1/90000 sec XINE_PARAM_EQ_30HZ = 18 # equalizer gains -100..100 XINE_PARAM_EQ_60HZ = 19 # equalizer gains -100..100 XINE_PARAM_EQ_125HZ = 20 # equalizer gains -100..100 XINE_PARAM_EQ_250HZ = 21 # equalizer gains -100..100 XINE_PARAM_EQ_500HZ = 22 # equalizer gains -100..100 XINE_PARAM_EQ_1000HZ = 23 # equalizer gains -100..100 XINE_PARAM_EQ_2000HZ = 24 # equalizer gains -100..100 XINE_PARAM_EQ_4000HZ = 25 # equalizer gains -100..100 XINE_PARAM_EQ_8000HZ = 26 # equalizer gains -100..100 XINE_PARAM_EQ_16000HZ = 27 # equalizer gains -100..100 XINE_PARAM_AUDIO_CLOSE_DEVICE = 28 # force closing audio device XINE_PARAM_AUDIO_AMP_MUTE = 29 # 1=>mute, 0=>unmute XINE_PARAM_FINE_SPEED = 30 # 1.000.000 => normal speed XINE_PARAM_EARLY_FINISHED_EVENT = 31 # send event when demux finish XINE_PARAM_GAPLESS_SWITCH = 32 # next stream only gapless swi XINE_PARAM_DELAY_FINISHED_EVENT = 33 # 1/10sec,0=>disable,-1=>forev # speeds XINE_SPEED_PAUSE = 0 XINE_SPEED_SLOW_4 = 1 XINE_SPEED_SLOW_2 = 2 XINE_SPEED_NORMAL = 4 XINE_SPEED_FAST_2 = 8 XINE_SPEED_FAST_4 = 16 # metadata XINE_META_INFO_TITLE = 0 XINE_META_INFO_COMMENT = 1 XINE_META_INFO_ARTIST = 2 XINE_META_INFO_GENRE = 3 XINE_META_INFO_ALBUM = 4 XINE_META_INFO_YEAR = 5 XINE_META_INFO_VIDEOCODEC = 6 XINE_META_INFO_AUDIOCODEC = 7 XINE_META_INFO_SYSTEMLAYER = 8 XINE_META_INFO_INPUT_PLUGIN = 9 # statuses XINE_STATUS_IDLE = 0 XINE_STATUS_STOP = 1 XINE_STATUS_PLAY = 2 XINE_STATUS_QUIT = 3 XINE_MSG_NO_ERROR = 0 # (messages to UI) XINE_MSG_GENERAL_WARNING = 1 # (warning message) XINE_MSG_UNKNOWN_HOST = 2 # (host name) XINE_MSG_UNKNOWN_DEVICE = 3 # (device name) XINE_MSG_NETWORK_UNREACHABLE = 4 # none XINE_MSG_CONNECTION_REFUSED = 5 # (host name) XINE_MSG_FILE_NOT_FOUND = 6 # (file name or mrl) XINE_MSG_READ_ERROR = 7 # (device/file/mrl) XINE_MSG_LIBRARY_LOAD_ERROR = 8 # (library/decoder) XINE_MSG_ENCRYPTED_SOURCE = 9 # none XINE_MSG_SECURITY = 10 # (security message) XINE_MSG_AUDIO_OUT_UNAVAILABLE = 11 # none XINE_MSG_PERMISSION_ERROR = 12 # (file name or mrl) XINE_MSG_FILE_EMPTY = 13 # file is empty XINE_MSG_AUTHENTICATION_NEEDED = 14 # (mrl, likely http); added in 1.2 # xine_t *xine_new(void) _libxine.xine_new.restype = ctypes.c_void_p # void xine_init(xine_t *self) _libxine.xine_init.argtypes = [ctypes.c_void_p] # void xine_exit(xine_t *self) _libxine.xine_exit.argtypes = [ctypes.c_void_p] # void xine_config_load(xine_t *self, const char *cfg_filename) _libxine.xine_config_load.argtypes = [ctypes.c_void_p, ctypes.c_char_p] # const char *xine_get_homedir(void) _libxine.xine_get_homedir.restype = ctypes.c_char_p # xine_audio_port_t *xine_open_audio_driver(xine_t *self, const char *id, # void *data) _libxine.xine_open_audio_driver.argtypes = [ctypes.c_void_p, ctypes.c_char_p, ctypes.c_void_p] _libxine.xine_open_audio_driver.restype = ctypes.c_void_p # void xine_close_audio_driver(xine_t *self, xine_audio_port_t *driver) _libxine.xine_close_audio_driver.argtypes = [ctypes.c_void_p, ctypes.c_void_p] # xine_stream_t *xine_stream_new(xine_t *self, # xine_audio_port_t *ao, xine_video_port_t *vo) _libxine.xine_stream_new.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] _libxine.xine_stream_new.restype = ctypes.c_void_p # void xine_close(xine_sxine_event_create_listener_threadtream_t *stream) _libxine.xine_close.argtypes = [ctypes.c_void_p] # int xine_open (xine_stream_t *stream, const char *mrl) _libxine.xine_open.argtypes = [ctypes.c_void_p, ctypes.c_char_p] _libxine.xine_open.restype = ctypes.c_int # int xine_play(xine_stream_t *stream, int start_pos, int start_time) _libxine.xine_play.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int] _libxine.xine_play.restype = ctypes.c_int # void xine_stop(xine_stream_t *stream) _libxine.xine_stop.argtypes = [ctypes.c_void_p] # void xine_dispose(xine_stream_t *stream) _libxine.xine_dispose.argtypes = [ctypes.c_void_p] # xine_event_queue_t *xine_event_new_queue(xine_stream_t *stream) _libxine.xine_event_new_queue.argtypes = [ctypes.c_void_p] _libxine.xine_event_new_queue.restype = ctypes.c_void_p # void xine_event_dispose_queue(xine_event_queue_t *queue) _libxine.xine_event_dispose_queue.argtypes = [ctypes.c_void_p] # void xine_event_create_listener_thread(xine_event_queue_t *queue, # xine_event_listener_cb_t callback, # void *user_data) _libxine.xine_event_create_listener_thread.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] _libxine.xine_usec_sleep.argtypes = [ctypes.c_int] _libxine.xine_set_param.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int] _libxine.xine_get_param.argtypes = [ctypes.c_void_p, ctypes.c_int] _libxine.xine_get_param.restype = ctypes.c_int _libxine.xine_get_meta_info.argtypes = [ctypes.c_void_p, ctypes.c_int] _libxine.xine_get_meta_info.restype = ctypes.c_char_p _libxine.xine_get_status.argtypes = [ctypes.c_void_p] _libxine.xine_get_status.restype = ctypes.c_int _libxine.xine_get_pos_length.argtypes = [ctypes.c_void_p, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int)] _libxine.xine_get_version_string.restype = ctypes.c_char_p _libxine.xine_get_file_extensions.argtypes = [ctypes.c_void_p] _libxine.xine_get_file_extensions.restype = ctypes.c_char_p _libxine.xine_get_mime_types.argtypes = [ctypes.c_void_p] _libxine.xine_get_mime_types.restype = ctypes.c_char_p _libxine.xine_list_input_plugins.argtypes = [ctypes.c_void_p] _libxine.xine_list_input_plugins.restype = ctypes.POINTER(ctypes.c_char_p) _libxine.xine_check_version.argtypes = [ctypes.c_int, ctypes.c_int, ctypes.c_int] _libxine.xine_check_version.restype = ctypes.c_int # copy functions from the library module = sys.modules[__name__] for name in dir(_libxine): if name.startswith('xine_'): setattr(module, name, getattr(_libxine, name)) _callbacks = [] def xine_event_create_listener_thread(queue, callback, user_data): cb = xine_event_listener_cb_t(callback) _callbacks.append(cb) _libxine.xine_event_create_listener_thread(queue, cb, user_data) def xine_get_pos_length(stream): _pos_stream = ctypes.c_int() _pos_time = ctypes.c_int() _length_time = ctypes.c_int() result = _libxine.xine_get_pos_length(stream, ctypes.byref(_pos_stream), ctypes.byref(_pos_time), ctypes.byref(_length_time)) if result: return _pos_stream.value, _pos_time.value, _length_time.value else: return 0, 0, 0 ��������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/player/xinebe.py����������������������������������������������������������0000644�0001750�0001750�00000023636�12173212464�021056� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2006-2007 Lukas Lalinsky # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import GLib from quodlibet import config from quodlibet.player import PlayerError from quodlibet.player._base import BasePlayer from quodlibet.player._xine import * class XineHandle(object): def __init__(self): _xine = xine_new() xine_config_load(_xine, xine_get_homedir() + "/.xine/config") xine_init(_xine) self._xine = _xine def list_input_plugins(self): plugins = [] for plugin in xine_list_input_plugins(self._xine): if not plugin: break plugins.append(plugin) return plugins def exit(self): xine_exit(self._xine) def open_audio_driver(self, identifier, data): return xine_open_audio_driver(self._xine, identifier, data) def close_audio_driver(self, driver): xine_close_audio_driver(self._xine, driver) def stream_new(self, audio_port, video_port): return xine_stream_new(self._xine, audio_port, video_port) class XinePlaylistPlayer(BasePlayer): """Xine playlist player.""" __gproperties__ = BasePlayer._gproperties_ __gsignals__ = BasePlayer._gsignals_ _paused = True def __init__(self, driver, librarian): super(XinePlaylistPlayer, self).__init__() self.name = "xine" self.version_info = "xine-lib: " + xine_get_version_string() self._handle = XineHandle() self._supports_gapless = xine_check_version(1, 1, 1) == 1 self._event_queue = None self._new_stream(driver) self._librarian = librarian def _new_stream(self, driver): self._audio_port = self._handle.open_audio_driver(driver, None) if not self._audio_port: raise PlayerError( _("Unable to create audio output"), _("The audio device %r was not found. Check your Xine " "settings in ~/.quodlibet/config.") % driver) self._stream = self._handle.stream_new(self._audio_port, None) xine_set_param(self._stream, XINE_PARAM_IGNORE_VIDEO, 1) xine_set_param(self._stream, XINE_PARAM_IGNORE_SPU, 1) self.update_eq_values() if self._supports_gapless: xine_set_param(self._stream, XINE_PARAM_EARLY_FINISHED_EVENT, 1) if self._event_queue: xine_event_dispose_queue(self._event_queue) self._event_queue = xine_event_new_queue(self._stream) xine_event_create_listener_thread(self._event_queue, self._event_listener, None) def destroy(self): if self._stream: xine_close(self._stream) xine_dispose(self._stream) if self._event_queue: xine_event_dispose_queue(self._event_queue) if self._audio_port: self._handle.close_audio_driver(self._audio_port) self._handle.exit() super(XinePlaylistPlayer, self).destroy() def _playback_finished(self): self._source.next_ended() self._end(False, gapless=True) return False def _update_metadata(self): if not self.song or not self.song.multisong: return False if self.info is self.song: self.info = type(self.song)(self.song["~filename"]) self.info.multisong = False changed = False meta = [ (XINE_META_INFO_TITLE, 'title'), (XINE_META_INFO_ARTIST, 'artist'), (XINE_META_INFO_ALBUM, 'album'), ] for info, name in meta: text = xine_get_meta_info(self._stream, info) if not text: continue text = text.decode('UTF-8', 'replace') if self.info.get(name) != text: self.info[name] = text changed = True if changed: self.emit('song-started', self.info) if self._librarian is not None: self._librarian.changed([self.song]) return False def _event_listener(self, user_data, event): event = event.contents if event.type == XINE_EVENT_UI_PLAYBACK_FINISHED: GLib.idle_add(self._playback_finished, priority=GLib.PRIORITY_HIGH) elif event.type == XINE_EVENT_UI_SET_TITLE: GLib.idle_add(self._update_metadata, priority=GLib.PRIORITY_HIGH) elif event.type == XINE_EVENT_UI_MESSAGE: from ctypes import POINTER, cast, string_at, addressof msg = cast(event.data, POINTER(xine_ui_message_data_t)).contents if msg.type != XINE_MSG_NO_ERROR: if msg.explanation: message = string_at(addressof(msg) + msg.explanation) else: message = "xine error %s" % msg.type GLib.idle_add(self._error, message) return True def do_set_property(self, property, v): if property.name == 'volume': self._volume = v if self.song and config.getboolean("player", "replaygain"): profiles = filter(None, self.replaygain_profiles)[0] fb_gain = config.getfloat("player", "fallback_gain") pa_gain = config.getfloat("player", "pre_amp_gain") scale = self.song.replay_gain(profiles, pa_gain, fb_gain) v = max(0.0, v * scale) v = min(100, int(v * 100)) xine_set_param(self._stream, XINE_PARAM_AUDIO_AMP_LEVEL, v) else: raise AttributeError def get_position(self): """Return the current playback position in milliseconds, or 0 if no song is playing.""" pos_stream, pos_time, length_time = xine_get_pos_length(self._stream) return pos_time def _stop(self): xine_stop(self._stream) def _pause(self): xine_set_param(self._stream, XINE_PARAM_SPEED, XINE_SPEED_PAUSE) def _play(self): if (xine_get_param(self._stream, XINE_PARAM_SPEED) != XINE_SPEED_NORMAL): xine_set_param(self._stream, XINE_PARAM_SPEED, XINE_SPEED_NORMAL) if xine_get_status(self._stream) != XINE_STATUS_PLAY: xine_play(self._stream, 0, 0) def _set_paused(self, paused): if paused != self._paused: self._paused = paused if self.song: self.emit((paused and 'paused') or 'unpaused') if self._paused: if not self.song.is_file: xine_close(self._stream) xine_open(self._stream, self.song("~uri")) else: self._pause() else: self._play() elif paused is True: # Something wants us to pause between songs, or when # we've got no song playing (probably StopAfterMenu). self.emit('paused') paused = property(lambda s: s._paused, _set_paused) def _error(self, message): self._stop() self.emit('error', self.song, message) if not self.paused: self.next() def seek(self, pos): """Seek to a position in the song, in milliseconds.""" if xine_get_param(self._stream, XINE_PARAM_SPEED) == XINE_SPEED_PAUSE: xine_play(self._stream, 0, int(pos)) xine_set_param(self._stream, XINE_PARAM_SPEED, XINE_SPEED_PAUSE) else: xine_play(self._stream, 0, int(pos)) self.emit('seek', self.song, pos) def _end(self, stopped, gapless=False): # We need to set self.song to None before calling our signal # handlers. Otherwise, if they try to end the song they're given # (e.g. by removing it), then we get in an infinite loop. song = self.song self.song = self.info = None self.emit('song-ended', song, stopped) # Then, set up the next song. self.song = self.info = self._source.current self.emit('song-started', self.song) if self.song is not None: self.volume = self.volume if gapless and self._supports_gapless: xine_set_param(self._stream, XINE_PARAM_GAPLESS_SWITCH, 1) xine_open(self._stream, self.song("~uri")) if self._paused: self._pause() else: self._play() if gapless and self._supports_gapless: xine_set_param(self._stream, XINE_PARAM_GAPLESS_SWITCH, 0) else: self.paused = True xine_stop(self._stream) def setup(self, playlist, song, seek_pos): super(XinePlaylistPlayer, self).setup(playlist, song, seek_pos) # xine's declining to seek so soon after startup; try again in 100ms if seek_pos: GLib.timeout_add(100, self.seek, seek_pos) @property def eq_bands(self): # These are taken straight from Xine's API return [30, 60, 125, 250, 500, 1000, 2000, 4000, 8000, 16000] def update_eq_values(self): from quodlibet.player import _xine as _xine_module bands = self.eq_bands need_eq = any(self._eq_values) for band, val in enumerate(self._eq_values): param = getattr(_xine_module, 'XINE_PARAM_EQ_%dHZ' % bands[band]) # between 1..200; 100 is the default gain; 0 means no EQ filter # only negative gain seems to work val = (int(val * 100 / 24.0) + 100) or 1 val *= int(need_eq) xine_set_param(self._stream, param, val) def can_play_uri(self, uri): for plugin in self._handle.list_input_plugins(): if uri.startswith(plugin.lower()): return True return False def init(librarian): try: driver = config.get("settings", "xine_driver") except: driver = None return XinePlaylistPlayer(driver, librarian) ��������������������������������������������������������������������������������������������������quodlibet-3.0.2/quodlibet/player/__init__.py��������������������������������������������������������0000644�0001750�0001750�00000001705�12173212464�021334� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2007 Joe Wreschnig # 2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation class PlayerError(Exception): def __init__(self, short_desc, long_desc): self.short_desc = short_desc self.long_desc = long_desc def init(backend_name): """Imports the player backend module for the given name. Raises PlayerError if the import fails. the module provides the following functions: init(librarian) -> new player instance """ modulename = "quodlibet.player." + backend_name try: backend = __import__(modulename, {}, {}, "quodlibet.player") except ImportError: raise PlayerError( _("Invalid audio backend"), _("The audio backend %r is not installed.") % backend_name) else: return backend �����������������������������������������������������������quodlibet-3.0.2/quodlibet/player/nullbe.py����������������������������������������������������������0000644�0001750�0001750�00000004742�12161032160�021050� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004 Joe Wreschnig, Michael Urman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from quodlibet.player._base import BasePlayer from quodlibet.qltk.songlist import PlaylistModel class NullPlayer(BasePlayer): __gproperties__ = BasePlayer._gproperties_ __gsignals__ = BasePlayer._gsignals_ version_info = "Null Player Backend" name = "Null" def __init__(self, sinkname="", librarian=None): super(NullPlayer, self).__init__() self._set_paused(True) self._source = PlaylistModel() self._position = 0 def get_position(self): """Return the current playback position in milliseconds, or 0 if no song is playing.""" return self._position def _set_paused(self, paused): if paused != self._paused: self._paused = paused if self.song: self.emit((paused and 'paused') or 'unpaused') elif paused is True: # Something wants us to pause between songs, or when # we've got no song playing (probably StopAfterMenu). self.emit('paused') def _get_paused(self): return self._paused paused = property(_get_paused, _set_paused) def do_set_property(self, property, v): if property.name == 'volume': self._volume = v else: raise AttributeError def error(self, message): self.emit('error', self.song, message) if not self.paused: self.next() def seek(self, pos): """Seek to a position in the song, in milliseconds.""" if self.song: self.emit('seek', self.song, pos) self._position = pos def _end(self, stopped): # We need to set self.song to None before calling our signal # handlers. Otherwise, if they try to end the song they're given # (e.g. by removing it), then we get in an infinite loop. song = self.song self.song = self.info = None self.emit('song-ended', song, stopped) # Then, set up the next song. self.song = self.info = self._source.current self.emit('song-started', self.song) if self.song is None: self.paused = True self._position = 0 def can_play_uri(self, uri): return False def init(librarian): return NullPlayer(librarian) ������������������������������quodlibet-3.0.2/quodlibet/player/_base.py�����������������������������������������������������������0000644�0001750�0001750�00000011765�12173212464�020655� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2007-2008 Joe Wreschnig # 2009,2010 Steven Robertson # 2009-2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation from gi.repository import GObject class Equalizer(object): _eq_values = [] @property def eq_bands(self): """read-only list of equalizer bands (in Hz) supported.""" return [] @property def eq_values(self): """The list of equalizer values, in the range (-24dB, 12dB).""" return self._eq_values @eq_values.setter def eq_values(self, value): self._eq_values[:] = value self.update_eq_values() def update_eq_values(self): """Override to apply equalizer values""" pass class BasePlayer(GObject.GObject, Equalizer): """Interfaces between a QL PlaylistModel and a GSt playbin. Attributes: paused -- True or False, set to pause/unpause the player volume -- current volume, 0.0 to 1.0 song -- current song, or None if not playing info -- current stream information, or None if not playing. This is usually the same as song, unless the user is listening to a stream with multiple songs in it. If you're going to show things, use .info. If you're going to change things, use .song. """ name = "" version_info = "" paused = None song = None info = None volume = None # Replay Gain profiles are a list of values to be tried in order; # Four things can set them: rg menu, browser, play order, and a default. replaygain_profiles = [None, None, None, ["none"]] _volume = 1.0 _paused = True _gsignals_ = { 'song-started': (GObject.SignalFlags.RUN_LAST, None, (object,)), 'song-ended': (GObject.SignalFlags.RUN_LAST, None, (object, bool)), 'seek': (GObject.SignalFlags.RUN_LAST, None, (object, int)), 'paused': (GObject.SignalFlags.RUN_LAST, None, ()), 'unpaused': (GObject.SignalFlags.RUN_LAST, None, ()), 'error': (GObject.SignalFlags.RUN_LAST, None, (object, str)), } _gproperties_ = { 'volume': (float, 'player volume', 'the volume of the player', 0.0, 1.0, 1.0, GObject.PARAM_READWRITE) } def __init__(self, *args, **kwargs): super(BasePlayer, self).__init__() def destroy(self): """Free resources""" self._source = None def do_get_property(self, property): if property.name == 'volume': return self._volume else: raise AttributeError def _set_volume(self, v): self.props.volume = min(1.0, max(0.0, v)) volume = property(lambda s: s._volume, _set_volume) def setup(self, source, song, seek_pos): """Connect to a PlaylistModel, and load a song.""" self._source = source self.go_to(song) if seek_pos: self.seek(seek_pos) def seek(self, position): """Seek to absolute position in milliseconds. If position is larger than the duration start the next song """ raise NotImplementedError def get_position(self): """The current position in milliseconds""" raise NotImplementedError def remove(self, song): """Make sure the song isn't played anymore""" if song and self.song is song: self._source.next() self._end(True) def stop(self): """Stop playback and reset the position. Might release the audio device """ self.paused = True self.seek(0) def reset(self): """Reset the source and start playing if possible""" self._source.reset() if self._source.current is not None: self._end(True) if self.song: self.paused = False def next(self): """Move to the next song""" self._source.next() self._end(True) if self.song: self.paused = False def previous(self, force=False): """Go back if standing at the beginning of the song otherwise restart the current song. If force is True always go back. """ if force or self.get_position() < 1500: self._source.previous() self._end(True) else: self.seek(0) if self.song: self.paused = False def go_to(self, song, explicit=False): """Activate the song in the playlist and play it. explicit if the action comes from the user """ print_d("Going to %r" % getattr(song, "key", song)) res = self._source.go_to(song, explicit) if explicit and not res: return False self._end(True) return self.song is not None def can_play_uri(self, uri): """Whether the player supports playing te given URI scheme""" raise NotImplementedError �����������quodlibet-3.0.2/quodlibet/player/gstbe.py�����������������������������������������������������������0000644�0001750�0001750�00000057365�12173213426�020715� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2004-2011 Joe Wreschnig, Michael Urman, Steven Robertson, # 2011-2013 Christoph Reiter # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation import gi try: gi.require_version("Gst", "1.0") gi.require_version("GstPbutils", "1.0") except ValueError, e: raise ImportError(e) from gi.repository import Gtk, Gst, GLib, GstPbutils import os import threading from quodlibet import config from quodlibet import const from quodlibet.util import fver, sanitize_tags from quodlibet.player import PlayerError from quodlibet.player._base import BasePlayer from quodlibet.player._gstutils import * from quodlibet.qltk.msg import ErrorMessage from quodlibet.qltk.notif import Task from quodlibet.qltk.entry import UndoEntry from quodlibet.qltk.x import Button STATE_CHANGE_TIMEOUT = Gst.SECOND * 4 class GStreamerPlayer(BasePlayer, GStreamerPluginHandler): __gproperties__ = BasePlayer._gproperties_ __gsignals__ = BasePlayer._gsignals_ _paused = True _in_gapless_transition = False _inhibit_play = False _last_position = 0 _task = None bin = None _vol_element = None _use_eq = False _eq_element = None __atf_id = None __bus_id = None __info_buffer = None def PlayerPreferences(self): e = UndoEntry() e.set_tooltip_text(_("The GStreamer output pipeline used for " "playback, such as 'alsasink device=default'. " "Leave blank for default pipeline.")) e.set_text(config.get('player', 'gst_pipeline')) def changed(entry): config.set('player', 'gst_pipeline', entry.get_text()) e.connect('changed', changed) pipe_label = Gtk.Label(label=_('_Output pipeline:')) pipe_label.set_use_underline(True) pipe_label.set_mnemonic_widget(e) apply_button = Gtk.Button(stock=Gtk.STOCK_APPLY) def format_buffer(scale, value): return _("%.1f seconds") % value def scale_changed(scale): config.set("player", "gst_buffer", scale.get_value()) if self.bin: duration = int(scale.get_value() * 1000) * Gst.MSECOND self.bin.set_property('buffer-duration', duration) duration = config.getfloat("player", "gst_buffer") scale = Gtk.HScale.new(Gtk.Adjustment(duration, 0.2, 10)) scale.set_value_pos(Gtk.PositionType.RIGHT) scale.set_show_fill_level(True) scale.connect('format-value', format_buffer) scale.connect('value-changed', scale_changed) buffer_label = Gtk.Label(label=_('_Buffer duration:')) buffer_label.set_use_underline(True) buffer_label.set_mnemonic_widget(scale) def rebuild_pipeline(*args): self._rebuild_pipeline() apply_button.connect('clicked', rebuild_pipeline) widgets = [(pipe_label, e, apply_button), (buffer_label, scale, None), ] table = Gtk.Table(len(widgets), 3) table.set_col_spacings(6) table.set_row_spacings(6) for i, (left, middle, right) in enumerate(widgets): left.set_alignment(0.0, 0.5) table.attach(left, 0, 1, i, i + 1, xoptions=Gtk.AttachOptions.FILL | Gtk.AttachOptions.SHRINK) if right: table.attach(middle, 1, 2, i, i + 1) table.attach(right, 2, 3, i, i + 1, xoptions=Gtk.AttachOptions.FILL | Gtk.AttachOptions.SHRINK) else: table.attach(middle, 1, 3, i, i + 1) vbox = Gtk.VBox(spacing=6) vbox.pack_start(table, True, True, 0) if const.DEBUG: def print_bin(player): if player.bin: map(print_, bin_debug([player.bin])) else: print_e("No active pipeline.") b = Button("Print Pipeline", Gtk.STOCK_DIALOG_INFO) b.connect_object('clicked', print_bin, self) vbox.pack_start(b, True, True, 0) return vbox def __init__(self, librarian=None): GStreamerPluginHandler.__init__(self) super(GStreamerPlayer, self).__init__() self.version_info = "GStreamer: %s" % fver(Gst.version()) self._librarian = librarian self._pipeline_desc = None def destroy(self): self.__destroy_pipeline() @property def name(self): name = "GStreamer" if self._pipeline_desc: name += " (%s)" % self._pipeline_desc return name def __init_pipeline(self): """Creates a gstreamer pipeline with the following elements For newer gstreamer versions: playbin2 -> bin [ <- ghostpad -> queue -> volume -> capsfilter -> equalizer -> audioconvert -> user defined elements -> gconf/autoaudiosink ] For older versions: playbin -> bin [ <- ghostpad -> capsfilter -> equalizer -> audioconvert -> user defined elements -> gconf/autoaudiosink ] """ if self.bin: return True pipeline = config.get("player", "gst_pipeline") pipeline, self._pipeline_desc = GStreamerSink(pipeline) if not pipeline: return False if self._use_eq and Gst.ElementFactory.find('equalizer-10bands'): # The equalizer only operates on 16-bit ints or floats, and # will only pass these types through even when inactive. # We push floats through to this point, then let the second # audioconvert handle pushing to whatever the rest of the # pipeline supports. As a bonus, this seems to automatically # select the highest-precision format supported by the # rest of the chain. filt = Gst.ElementFactory.make('capsfilter', None) filt.set_property('caps', Gst.Caps.from_string('audio/x-raw,format=F32LE')) eq = Gst.ElementFactory.make('equalizer-10bands', None) self._eq_element = eq self.update_eq_values() conv = Gst.ElementFactory.make('audioconvert', None) resample = Gst.ElementFactory.make('audioresample', None) pipeline = [filt, eq, conv, resample] + pipeline # playbin2 has started to control the volume through pulseaudio, # which means the volume property can change without us noticing. # Use our own volume element for now until this works with PA. self._vol_element = Gst.ElementFactory.make('volume', None) pipeline.insert(0, self._vol_element) # Get all plugin elements and append audio converters. # playbin already includes one at the end plugin_pipeline = [] for plugin in self._get_plugin_elements(): plugin_pipeline.append(plugin) plugin_pipeline.append( Gst.ElementFactory.make('audioconvert', None)) plugin_pipeline.append( Gst.ElementFactory.make('audioresample', None)) pipeline = plugin_pipeline + pipeline bufbin = Gst.Bin() map(bufbin.add, pipeline) if len(pipeline) > 1: if not link_many(pipeline): print_w("Could not link GStreamer pipeline") self.__destroy_pipeline() return False # Test to ensure output pipeline can preroll bufbin.set_state(Gst.State.READY) result, state, pending = bufbin.get_state(timeout=STATE_CHANGE_TIMEOUT) if result == Gst.StateChangeReturn.FAILURE: bufbin.set_state(Gst.State.NULL) self.__destroy_pipeline() return False # Make the sink of the first element the sink of the bin gpad = Gst.GhostPad.new('sink', pipeline[0].get_static_pad('sink')) bufbin.add_pad(gpad) self.bin = Gst.ElementFactory.make('playbin', None) self.__atf_id = self.bin.connect('about-to-finish', self.__about_to_finish) duration = config.getfloat("player", "gst_buffer") duration = int(duration * 1000) * Gst.MSECOND self.bin.set_property('buffer-duration', duration) self.bin.set_property('audio-sink', bufbin) # by default playbin will render video -> suppress using fakesink fakesink = Gst.ElementFactory.make('fakesink', None) self.bin.set_property('video-sink', fakesink) # disable all video/text decoding in playbin GST_PLAY_FLAG_VIDEO = 1 << 0 GST_PLAY_FLAG_TEXT = 1 << 2 flags = self.bin.get_property("flags") flags &= ~(GST_PLAY_FLAG_VIDEO | GST_PLAY_FLAG_TEXT) self.bin.set_property("flags", flags) # ReplayGain information gets lost when destroying self.volume = self.volume bus = self.bin.get_bus() bus.add_signal_watch() self.__bus_id = bus.connect('message', self.__message, self._librarian) if self.song: self.bin.set_property('uri', self.song("~uri")) return True def __destroy_pipeline(self): self._remove_plugin_elements() if self.__bus_id: bus = self.bin.get_bus() bus.disconnect(self.__bus_id) bus.remove_signal_watch() self.__bus_id = False if self.__atf_id: self.bin.disconnect(self.__atf_id) self.__atf_id = False if self.bin: self.bin.set_state(Gst.State.NULL) self.bin.get_state(timeout=STATE_CHANGE_TIMEOUT) self.bin = None if self._task: self._task.finish() self._task = None self._in_gapless_transition = False self._inhibit_play = False self._last_position = 0 self._vol_element = None self._eq_element = None def _rebuild_pipeline(self): """If a pipeline is active, rebuild it and restore vol, position etc""" if not self.bin: return paused = self.paused pos = self.get_position() self.__destroy_pipeline() self.paused = True self.__init_pipeline() self.paused = paused self.seek(pos) def __message(self, bus, message, librarian): if message.type == Gst.MessageType.EOS: print_d("Stream EOS") if not self._in_gapless_transition: self._source.next_ended() self._end(False) elif message.type == Gst.MessageType.TAG: self.__tag(message.parse_tag(), librarian) elif message.type == Gst.MessageType.ERROR: err, debug = message.parse_error() err = str(err).decode(const.ENCODING, 'replace') self._error(err) elif message.type == Gst.MessageType.BUFFERING: percent = message.parse_buffering() self.__buffering(percent) elif message.type == Gst.MessageType.STREAM_START: if self._in_gapless_transition: print_d("Stream changed") self._end(False) elif message.type == Gst.MessageType.ELEMENT: message_name = message.get_structure().get_name() if message_name == "missing-plugin": self.stop() details = \ GstPbutils.missing_plugin_message_get_installer_detail( message) if details is not None: message = (_( "No GStreamer element found to handle the following " "media format: %(format_details)r") % {"format_details": details}) print_w(message) context = GstPbutils.InstallPluginsContext.new() # TODO: track success def install_done_cb(*args): Gst.update_registry() res = GstPbutils.install_plugins_async( [details], context, install_done_cb, None) print_d("Gstreamer plugin install result: %r" % res) if res in (GstPbutils.InstallPluginsReturn.HELPER_MISSING, GstPbutils.InstallPluginsReturn.INTERNAL_FAILURE): self._error(message) return True def __about_to_finish(self, pipeline): print_d("About to finish") # this can trigger twice, see issue 987 if self._in_gapless_transition: return self._in_gapless_transition = True def change_in_main_loop(event, source): source.next_ended() event.set() # push in the main loop and wait for it to finish event = threading.Event() GLib.idle_add(change_in_main_loop, event, self._source, priority=GLib.PRIORITY_HIGH) event.wait() song = self._source.current bin = self.bin if song and bin: bin.set_property('uri', song("~uri")) def stop(self): super(GStreamerPlayer, self).stop() self.__destroy_pipeline() def do_set_property(self, property, v): if property.name == 'volume': self._volume = v if self.song and config.getboolean("player", "replaygain"): profiles = filter(None, self.replaygain_profiles)[0] fb_gain = config.getfloat("player", "fallback_gain") pa_gain = config.getfloat("player", "pre_amp_gain") scale = self.song.replay_gain(profiles, pa_gain, fb_gain) v = min(10.0, max(0.0, v * scale)) # volume supports 0..10 if self.bin: self._vol_element.set_property('volume', v) else: raise AttributeError def get_position(self): """Return the current playback position in milliseconds, or 0 if no song is playing.""" p = self._last_position if self.song and self.bin: ok, p = self.bin.query_position(Gst.Format.TIME) if ok: p //= Gst.MSECOND # During stream seeking querying the position fails. # Better return the last valid one instead of 0. self._last_position = p return p def __buffering(self, percent): def stop_buf(*args): self.paused = True if percent < 100: if self._task: self._task.update(percent / 100.0) else: self._task = Task(_("Stream"), _("Buffering"), stop=stop_buf) elif self._task: self._task.finish() self._task = None self._set_inhibit_play(percent < 100) def _set_inhibit_play(self, inhibit): """Set the inhibit play flag. If set, this will pause the pipeline without giving the appearance of being paused to the outside. This is for internal uses of pausing, such as for waiting while the buffer is being filled for network streams.""" if inhibit == self._inhibit_play: return self._inhibit_play = inhibit if inhibit: self.bin.set_state(Gst.State.PAUSED) elif not self.paused: self.bin.set_state(Gst.State.PLAYING) def _set_paused(self, paused): if paused == self._paused: return self._paused = paused if not self.song: if paused: # Something wants us to pause between songs, or when # we've got no song playing (probably StopAfterMenu). self.emit('paused') self.__destroy_pipeline() return if paused: if self.bin: if self.song.is_file: # fast path self.bin.set_state(Gst.State.PAUSED) else: # seekable streams (seem to) have a duration >= 0 ok, d = self.bin.query_duration(Gst.Format.TIME) if not ok: d = -1 if d >= 0: self.bin.set_state(Gst.State.PAUSED) else: # destroy so that we rebuffer on resume self.__destroy_pipeline() else: if self.bin: # don't start while we are buffering if not self._inhibit_play: self.bin.set_state(Gst.State.PLAYING) else: if self.__init_pipeline(): self.bin.set_state(Gst.State.PLAYING) else: # Backend error; show message and halt playback ErrorMessage(None, _("Output Error"), _("GStreamer output pipeline could not be " "initialized. The pipeline might be invalid, " "or the device may be in use. Check the " "player preferences.")).run() self.emit((paused and 'paused') or 'unpaused') self._paused = paused = True self.emit((paused and 'paused') or 'unpaused') def _get_paused(self): return self._paused paused = property(_get_paused, _set_paused) def _error(self, message): print_w(message) self.emit('error', self.song, message) if not self.paused: self.next() def seek(self, pos): """Seek to a position in the song, in milliseconds.""" # Don't allow seeking during gapless. We can't go back to the old song. if not self.song or self._in_gapless_transition: return if self.__init_pipeline(): # ensure any pending state changes have completed and we have # at least paused state, so we can seek state = self.bin.get_state(timeout=STATE_CHANGE_TIMEOUT)[1] if state < Gst.State.PAUSED: self.bin.set_state(Gst.State.PAUSED) self.bin.get_state(timeout=STATE_CHANGE_TIMEOUT) pos = max(0, int(pos)) gst_time = pos * Gst.MSECOND event = Gst.Event.new_seek( 1.0, Gst.Format.TIME, Gst.SeekFlags.FLUSH, Gst.SeekType.SET, gst_time, Gst.SeekType.NONE, 0) if self.bin.send_event(event): self._last_position = pos self.emit('seek', self.song, pos) def _end(self, stopped): print_d("End song") song, info = self.song, self.info # set the new volume before the signals to avoid delays if self._in_gapless_transition: self.song = self._source.current self.volume = self.volume # We need to set self.song to None before calling our signal # handlers. Otherwise, if they try to end the song they're given # (e.g. by removing it), then we get in an infinite loop. self.__info_buffer = self.song = self.info = None if song is not info: self.emit('song-ended', info, stopped) self.emit('song-ended', song, stopped) # Then, set up the next song. self.song = self.info = self._source.current self.emit('song-started', self.song) print_d("Next song") if self.song is not None: if not self._in_gapless_transition: self.volume = self.volume # Due to extensive problems with playbin2, we destroy the # entire pipeline and recreate it each time we're not in # a gapless transition. self.__destroy_pipeline() if not self.__init_pipeline(): self.paused = True if self.bin: if self.paused: self.bin.set_state(Gst.State.PAUSED) else: self.bin.set_state(Gst.State.PLAYING) else: self.__destroy_pipeline() self.paused = True self._in_gapless_transition = False def __tag(self, tags, librarian): if self.song and self.song.multisong: self._fill_stream(tags, librarian) elif self.song and self.song.fill_metadata: pass def _fill_stream(self, tags, librarian): # get a new remote file new_info = self.__info_buffer if not new_info: new_info = type(self.song)(self.song["~filename"]) new_info.multisong = False new_info.streamsong = True # copy from the old songs # we should probably listen to the library for self.song changes new_info.update(self.song) new_info.update(self.info) changed = False info_changed = False tags = TagListWrapper(tags, merge=True) tags = parse_gstreamer_taglist(tags) for key, value in sanitize_tags(tags, stream=False).iteritems(): if self.song.get(key) != value: changed = True self.song[key] = value for key, value in sanitize_tags(tags, stream=True).iteritems(): if new_info.get(key) != value: info_changed = True new_info[key] = value if info_changed: # in case the title changed, make self.info a new instance # and emit ended/started for the the old/new one if self.info.get("title") != new_info.get("title"): if self.info is not self.song: self.emit('song-ended', self.info, False) self.info = new_info self.__info_buffer = None self.emit('song-started', self.info) else: # in case title didn't changed, update the values of the # old instance if there is one and tell the library. if self.info is not self.song: self.info.update(new_info) librarian.changed([self.info]) else: # So we don't loose all tags before the first title # save it for later self.__info_buffer = new_info if changed: librarian.changed([self.song]) @property def eq_bands(self): if Gst.ElementFactory.find('equalizer-10bands'): return [29, 59, 119, 237, 474, 947, 1889, 3770, 7523, 15011] else: return [] def update_eq_values(self): need_eq = any(self._eq_values) if need_eq != self._use_eq: self._use_eq = need_eq self._rebuild_pipeline() if self._eq_element: for band, val in enumerate(self._eq_values): self._eq_element.set_property('band%d' % band, val) def can_play_uri(self, uri): if not Gst.uri_is_valid(uri): return False try: Gst.Element.make_from_uri(Gst.URIType.SRC, uri, '') except GLib.GError: return False return True def init(librarian): # Enable error messages by default if Gst.debug_get_default_threshold() == Gst.DebugLevel.NONE: Gst.debug_set_default_threshold(Gst.DebugLevel.ERROR) # the fluendo decoder is twice as slow as mad, but wins # at autoplug because it has the same rank and f < m # -> put it slightly behind mad or leave it if it already is flu, mad = map(Gst.ElementFactory.find, ["flump3dec", "mad"]) if flu and mad: flu.set_rank(min(flu.get_rank(), max(mad.get_rank() - 1, 0))) if Gst.Element.make_from_uri( Gst.URIType.SRC, "file:///fake/path/for/gst", ""): return GStreamerPlayer(librarian) else: raise PlayerError( _("Unable to open input files"), _("GStreamer has no element to handle reading files. Check " "your GStreamer installation settings.")) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������quodlibet-3.0.2/NEWS��������������������������������������������������������������������������������0000644�0001750�0001750�00000155640�12173212464�014446� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������3.0.2 (2013-07-22) - LATER, THE OCEANS BOIL AS THE EARTH TURNS TO FIRE ---------------------------------------------------------------------- General * Device backend: Correctly detect udisks1 if it isn't running [1200] * mmkeys: Really make libkeybinder work again [1203] (Hans Scholze) * Fix play button not starting playback if no song is active [863] * Don't forget newly created bookmarks in some cases * Fix "Refresh" in the file tree browser [1201] * Fix menu separator drawing with PyGObject 3.2 (Ubuntu 12.04) * Various fixes Plugins * Forward library events to event plugins again * Fix bookmarks plugin, playlist export plugin, HTML export plugin * animosd: Handle multiple monitors (Nick Boultbee) 2.6.2 (2013-07-22) - 256 Pictures of Cool Bugs ---------------------------------------------- 2.6.1 skipped to keep in sync with the 3.0 branch. General * Device backend: Correctly detect udisks1 if it isn't running [1200] * Fix play button not starting playback if no song is active [863] * Don't forget newly created bookmarks in some cases * Various fixes Plugins * Fix HTML export plugin * Fix Bookmarks plugin 3.0.1 (2013-07-08) - *gasp* --------------------------- * Fix a crasher with some PyGObject versions [1211] 3.0.0 (2013-06-15) - THE NEMESIS HYPOTHESIS ------------------------------------------- Requirements & Packaging Changes * Python 2.6+ * GTK+ 3.2+ & GIR (instead of 2.x) * GStreamer 1.0+ & GIR (instead of 0.10) * PyGObject 3.2+ (3.4 highly recommended) (instead of PyGTK) * PyGObject cairo support * libgpod 0.5+ (instead of python-gpod) * libkeybinder-3.0 & GIR (instead of python-keybinder) * HAL support removed * New `operon` script + man page * New .ini file for registering QL as a GNOME Shell Search Provider Translations * New: Czech translation (Honza Hejzl) * Russian translation update (Anton Shestakov) * Lithuanian translation update [1079] (Naglis Jonaitis) * Swedish translation update [1117] (Daniel Nyberg) * Spanish, Basque and Galician translation update (Johám-Luís Miguéns Vila) * Greek translation update [1175] (Dimitris Papageorgiou) General * Improved rating visibility [1070] (Nick Boultbee) * File system view: DnD directories to external targets (Nick Boultbee) * Support GNOME Notification Sources * Bayesian averaging for set (album) ratings [1085] (Nick Boultbee) * New command line tagger: operon (see `man operon`) * Hide songs on not-mounted drives on start without library refresh [984] * Preferences UI for managing masked mount points [984] * Support all patterns as song list headers [507, 1121] (Nick Boultbee) * Save/restore queue position * Documentation is now Sphinx/reST based and hosted on readthedocs.org Fixes * Fix unwanted re-filtering of all open browsers if the search history changes * Fix crash when re-adding devices while QL is running [1120] * Remove EF directory mime type again (too many problems with file managers) Tagging * APEv2: Add disc<->discnumber mapping Plugins * New: Custom Commands plugin (Nick Boultbee) * New: GNOME Shell Search Provider plugin [1147] * ReplayGain plugin: Parallel processing [807] * CD burn plugin: Add Xfburn support [1173] Known Regressions * GStreamer output device selection is no longer supported. (GStreamer 1.0 has removed the property probing interface) * No multimedia keys support with non-GNOME DEs in some distributions due to missing packaging: * https://bugzilla.redhat.com/show_bug.cgi?id=963476 * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=710254 * Animated On-Screen Display plugin is missing transparency support * No Windows build (work in progress) 2.6.0 (2013-06-15) - Someone's attacking us from... space? ---------------------------------------------------------- 2.6 is the last PyGTK/GTK+2 based release of Quod Libet / Ex Falso. It contains most of the changes that went into 3.0 and will only receive bugfix releases from here on out. Requirements & Packaging * Python 2.6+ * PyGTK 2.16+ Everything else * See 3.0.0 NEWS with a few exceptions 2.9.92 (2013-06-05) - alternatetimelinemetarhyme ------------------------------------------------ General * Fix the main song list resetting while working with multiple browsers * Fix various widget redraw/positioning/jumping problems * Various fixes regarding GTK+3.6+ (seek slider, tv hints) * Nicer about dialog * Fix one-click ratings [1170] * Fix various crashes with PyGObject3.2 [1172] Plugins * New GNOME Shell Search Provider plugin [1147] * Support Xfburn in the CD burn plugin [1173] * viewlyrics plugin: Fix key handling [1171] * Fix musicbrainz plugin [1162] * Fix replaygain plugin in Ex Falso [1163] * Fix fingerprint plugin [1174] 2.9.91 (2013-05-13) - welcome to a place where incredibly terrible things can happen to you and your friends for no reason! --------------------------------------------------------------------------------------------------------------------------- General * Spanish, Basque and Galician translation updates (Johám-Luís Miguéns Vila) * Tag editor: Fix context menu not showing * Album collection: Fix crash with PyGObject 3.2 * Fix search bar text color * Fix DnD to closed queue * Fix hangs during unix signal handling * Fix 100% CPU in some cases * Fix library refresh pause/stop handling * Some speed improvements and fixes Plugins * ReplayGain plugin now processes albums in parallel * New dark theme option in the theme switcher plugin * Fix GStreamer equalizer * Fix theme switcher plugin * Fix GStreamer mono plugin 2.9.82 (2013-05-02) - One day Marty McFly got bit by a werewolf! ---------------------------------------------------------------- PyGObject/Gtk+3.0/Gstreamer1.0 Port - Alpha 2 release: * Fix lyricsview plugin (Nick Boultbee) * Fix replaygain album gain/peak writing. * Fix crash on one-click ratings in the song list. * Fix crash when playing a song while editing its tags. * gstbe: Increase operation timeouts (for spinning up disks etc.) 2.9.81 (2013-04-27) - Because my hypothesis is: it's rad -------------------------------------------------------- PyGObject/Gtk+3.0/Gstreamer1.0 Port - Alpha 1 release 2.5.1 (2013-04-23) - Yes: MY COMPUTER IS A PERSON. -------------------------------------------------- * Fix various widgets not showing with pygtk/pygobject trunk * Fix QL refusing to start in some cases [1131] * Improve web browser discovery and fix on Windows * Fix various problems with playlists + masked files [1095] * Reduce debug output if loading a file fails [1080] * Plugins: * notify: Don't set notifications to transient [1103] * lastfmsync: Fix loading/saving of cache [1093] 2.5 (2012-12-19) - Reading on the floor: literature! ---------------------------------------------------- * Greek translation update (Dimitris Papageorgiou) [1064] * Russian translation update (Anton Shestakov) [1072] * Lithuanian translation update (Naglis Jonaitis)[1079] 2.4.91 (2012-11-23) - hello and thank you for installing an internet! --------------------------------------------------------------------- News for packagers * setup.py will install png and svg icons into hicolor and a png icon into pixmaps. It will also try to call gtk-update-icon-cache if it's in the target prefix/root (make sure the icon cache gets updated on package install) * C extensions removed. QL is now Python only. * PyGTK 2.16+ * Python 2.6+ * Support for libudev.so.1 (>= 183) * New: python-keybinder needed for multimedia keys * New plugin directory: gstreamer * Optional plugin dependencies: * Removed: python-indicate (Ubuntu sound menu), lastfmsubmitd (old last.fm plugin) * New: rygel (DBus UPnP MediaServer), python-zeitgeist (Zeitgeist) News for translators * QUODLIBET_TEST_TRANS=xxx will append/prepend "xxx" to all translations so you see what is translatable and for devs to check how, long translations will affect the UI. * "setup.py po_stats" to see how much is translated for each po file. * "setup.py check_pot" to see if a file containing translatable strings is missing from POTFILES.in General * Search: Handle non-ascii values for filesystem tags (~filename, ~dirname..) [227] * New internal tags: ~originalyear ~#originalyear. [966] * New internal tag: ~playlists (Nick Boultbee) * Shortcut: alt + left/right -> seek +/- 10 seconds [981] * Support startup notification spec * Support newest thumbnail spec (v0.8.0) * Basic Unity quicklist * New --stop switch to stop and release the audio device [1018] * List tooltips: work with gnome shell, never shift left, support trees [778] * New --no-plugins switch to start without plugins * No wakeups if nothing is playing. * Directory mimetype for Ex Falso * Shortcut: ctrl+left/right, left/right for treeview navigation * Some UI cleanup, less padding in the main window * Remember window size & position for properties, info, browsers [106] * Device selection for the gstreamer back-end * Use lyricist for finding lyrics if available * Click on default cover icon launches album art plugin [2] (Nick Boultbee) * Fix: Work with Compiz window placement plugin [871] * Fix: Queue widgets not clickable in some cases * Fix: Double-click on album will plays song from queue [231] * Fix: Filter on album in album browser now uses the album key * New: PluginConfigMixin added to core to simplify plugin prefs (Nick Boultbee) * Fix: --status (carlo.teubner) [1045] Formats * New: Monkey's Audio * New: Ogg Opus (needs mutagen 0.21) [1012] * New: MIDI * Basic SPC tag parsing [282] (David Schneider) * Add m4v to valid mp4 extensions Tagging * Limit path sections to 255 chars instead of tags to 100 [915] * ID3: Write foobar style replaygain tags. [1027] * VORBISCOMMENT: Write totaltracks/totaldiscs [929] (Michael Ball) * Shortcut: ctrl-s for saving changes, and configurable standard accels per locale [697] (alex.geoffrey.smith, Nick Boultbee) * Updates to tag splitting (originalartist, performer) (Nick Boultbee) Translations * New: Greek translation (Dimitris Papageorgiou) * German translation update (Rüdiger Arp) * British English translation update (Nick Boultbee) * French translation partial update (Nick Boultbee) Plugins * Removed: lastfmsubmitd * Removed: DBus mmkeys (moved to core) * Removed: Ubuntu Sound Menu (no longer needed) * New: UPnP AV Media Server plugin (needs rygel) * New: ViewLyrics plugin (Vasiliy Faronov) * New: Filter on directory [922] * New: Zeitgeist plugin [717] * New: Mac OS X mmkeys plugin (Martijn Pieters) [967] * New: Telepathy/Empathy status plugin [478] (Nick Boultbee) * New GStreamer plugins: Compressor, Crossfeed, Pitch, Mono * New: Filter on multiple tags [1014] * New: Squeezebox Playlist Export (Nick Boultbee) * Browse Folders: Use the default file browser [983] * Equalizer: add presets * MPRIS: various fixes (for the GS plugin) * Notify: Dismiss notifications after some time * Duplicate Browser: expand/unexpand all button * CD burn: now menu-based * Updated: Auto Library Updater (Nick Boultbee) Browsers * New: Album Collection - provides a tree-like view of albums similar to Paned. * Playlists: * Delete shortcut [942] (Johannes Marbach) * Shuffle playlist (Nick Boultbee) * Remove duplicates [685] (Nick Boultbee) * Album list: more filters Windows * Make Browse folder plugin work [993] * Multimedia keys support 2.4.1 (2012-07-27) - Man! If I were a robot, a lot of things would be different ------------------------------------------------------------------------------- * Fixes: * Fix skipping one song during a song change [987] (This also broke the random album plugin in some cases) * Windows: Crash in file system view if 'My Music' folder is missing [1008] * Fix --quit [958] * Fix playing of files that don't match the file system encoding [989] * Workaround for mutagen ID3v2.3 update bug [mutagen 97] * Various fixes [1013, 1002, 962] * Plugin fixes: * lastfmsync crashes [957] * Various Duplicate browser fixes [999, 954] * Notification crash [975] 2.4 (2012-03-18) - He decides he must become... Abe Atman! ---------------------------------------------------------- * Fixes: * Support xinelib 1.2 [904] * MP3/ID3: fix some rare crashes; prefer main embedded cover * Vorbiscomment: * Ignore coverart and use it as cover art source [910] * Fix deletion of metadata_block_picture * album art: update coverparadise, disable discogs (API changed) * squeezebox fixes (Nick Boultbee) * German translation update (Rüdiger Arp) * Various fixes [890, 909, 899] * Fixed regressions: * Python 2.5 / PyGTK 2.12 compatibility * Restore saved play order [891] 2.3.91/92 (2012-01-16) - Players only love you when they're playing ------------------------------------------------------------------- * Fixes: * Don't remove periods from tag values in patterns [368] * Don't jump to playing song on stream changes * Fix wrong path encoding in the exfalso file selector under Windows * Fix error when controlling playback during startup [810] * Handle invalid header patterns * Don't lose the radio libary randomly [645] * Handle non utf-8 and invalid filenames in the song list [798] * Fix a crash when the song list changed during a gapless transition [799] * Tray icon doesn't appear in KDE panel [881] * xine backend: Fix equalizer value range * Plugin Fixes: * Fix "&" in notifications (xfce4-notifyd) (Anton Shestakov) * Fix animosd config again * Fix Amazon cover search (API change) * General * Improved startup speed * GNOME session shutdown fixes * Hide all windows on shutdown * Handle signals during startup * Correctly push signals into the gtk+ mainloop (no more segfaults) * Cyclic saving of all libraries not just the main one * Rename the process to "quodlibet" or "exfalso" [736] (Nick Boultbee) * Queue keyboard shortcut is now Ctrl+Return not just Q [747] * Add new songs that match the active filter to the song list * Focus search entry with ctrl+l [666] * Fix reverse sort (sort by album first) * Custom sort dialog [820] (Philipp Müller, Joschka Fischer) * Make the paned browser the default one * Focus the first row in all automatic list selections [835] * Select next song in the song list after song removal [785] * Speed up song removal in long lists [785] * Delete keyboard shurtcut in the queue * Add menu entry to rate current playing song (Nick Boultbee) * Make it possible to override quodlibet/exfalso icon, by placing an icon in the current icon theme [614] * Close buttons in all dialogs (since GNOME 3 has no close button in the window decorations for dialogs by default) [772] * Make main window resizeable with only the queue showing [657] (Florian Demmer) * Make the paned browser prefs resizable * Search bar: No delays for any keyboard/mouse actions except typing * Estimate FLAC bitrate using the filesize [342] (Nick Boultbee) * New ~#filesize tag: requires library reload (Nick Boultbee) * Enhancements to the ways album art is detected (Nick Boultbee): new tab in prefs, new option for forcing art filename [328], new option for preferring embedded image over external ones * Allow numeric ~#replaygain_xxx tags (Nick Boultbee) * album browser: Restore search on start * album browser: Move sort order in the preference button sub menu * album browser: Load all visible covers before showing the album list * album browser: Fewer redraws after filtering * album browser: Add sort by genre option [340] * radio browser: Genre filter list * radio browser: Use the default search bar (with history) * radio browser: Remote station list with 4000 stations * radio browser: Properly sync the song list play icon with song changes * radio browser: Prefill new station dialog with last URL in the clipboard * radio browser: title falls back to organization and artist to website (for the song list) * radio browser: Buffer process shown in status bar * search: Stricter numeric value parsing (only allow valid units) * search: Don't require a space between number and unit: #(added<1day) * search: Support GB/KB/MB/B units for ~#filesize * Gstreamer: * Fully support playbin1 again (QUODLIBET_PLAYBIN1 env var) * Allow setting of stream buffer duration [696] * Sync replaygain volume change with track change [652] (use track-changed signal in newer gstreamer) this needed the removal of the 500ms queue. Can be enabled if there are problems with gapless (QUODLIBET_GSTBE_QUEUE env var) * Don't add equalizer if the plugin is disabled: No unnecessary conversions to float (flac, mp3 decoder), less CPU * Don't use the fluendo mp3 decoder if mad is available, less CPU * No video decoding/playing (mp4 files for example) * Properly emit song-started/ended for radio stream songs (so they get counted as auto started by the new notify plugin) * Add button in the prefs to print the currently used pipeline including format conversions (only in --debug mode) * No more jumping of the position slider during song changes * Better parsing of stream metadata [750] * Translations: * Russian translation update (Anton Shestakov) * German translation update (Rüdiger Arp) * Italian translation update (Luca Baraldi) * Tagging/Ex Falso: * Improve support for language tag, with ISO 639-2 suggestions (Nick Boultbee) * ID3: handle TLAN [439] (Nick Boultbee) * Ignore zero TLEN id3 frame [222] * Allow performer to be split out of title (Nick Boultbee) * Ogg Theora support * Ex Falso about dialog * CLI: * --debug (colored output, yay) * --enqueue-files=file,file [716] (Nick Boultbee) * --print-query=query [716] (Nick Boultbee) * --force-previous [441] (go to previous not depending on the current position) * Plugins: * Removed old plugin import fallback code: In case loading a third party plugin fails, set the QUODLIBET_OLDIMPORT env var. * Show an error message instead of the stack trace for common plugin loading errors (import errors) * Improved notification plugin [588] (Felix Krull) * Improved scrobbler preferences with account data verification * Trayicon: Use custom theme icons [614] Prevent the main window from showing on startup * Musicbrainz: Only write sort tags that are different * Titlecase: New prefs switch to allow all caps in tags (Nick Boultbee) * NEW: Website Search (Nick Boultbee) * NEW: Inhibit Screensaver while playing (GNOME) * NEW: Pause while the screensaver is active (GNOME) * NEW: Acoustid.org fingerprint plugin (only for submitting atm) * NEW: Duplicates browser (Nick Boultbee) * NEW: Mute radio advertisements (di.fm only atm) * NEW: Watch directories for file changes (using pyinotify) [270] (Nick Boultbee, Joe Higton) * NEW: Theme switcher plugin * NEW: Squeezebox plugin (Nick Boultbee) 2.3.2 (2011-10-17) - It doesn't matter! My beats are great! ----------------------------------------------------------- * Fix crash in album browser [781] * Plugins: * DBus multimedia keys: Make it work with gnome-settings-daemon 3.x * Album art: Remove darktown, fix discogs. * MPRIS: Various fixes [776, 817, 827] * Translation Updates: * Lithuanian (Naglis Jonaitis) 2.3.1 (2011-07-16) - YES It works in BOTH temporal directions ------------------------------------------------------------- * Absolute path renaming on Windows [506] * Fix dynamic song removal of songs not matching the query [713] * Fix "--print-playing <~#rating>" [730] * Fix search not working with an active pattern column * Fix hang with newer GStreamer versions and sinkless pipelines * Some minor fixes [682, 724, 704] * Plugins: * Fix MPRIS not handling invalid dates (Nick Boultbee) * Some OSD fixes (Nick Boultbee) * Translations: * German (Rüdiger Arp) * Italian (Luca Baraldi) * Lithuanian (Naglis Jonaitis) 2.3 (2011-04-01) - I THOUGHT THAT WAS PRETTY CLEAR --------------------------------------------------- * Various minor bug fixes * Some small translation updates (Anton Shestakov) * Update of the 2.2.99 news entry 2.2.99 (2011-03-13) - I can imagine that one day there could be aperson who would read that -------------------------------------------------------------------------------------------- * Quod Libet now needs Python >=2.5 * Drag and drop in paned browser * Speed up adding many songs to the queue * Smaller volume, seek controls * Ask for playlist name on creation * Output playing progess when using --status * Use current icon theme icons everywhere (for DAPs etc.) * Floating point custom tags * Audio streaming fixes (buffering etc.) (Andreas Bombe) * Treeview hints in paned browser * Cover art now only uses the available space * Support embedded covers art in WMA/Vorbis files * Set composer, albumartist, sort tags when copying to an iPod * Natural sorting in the song list * Many song list speedups (sorting, filling, scrolling) * Split up pattern results in paned browser with multi-value tags * Only consider a song played after half has elapsed * Undo/Redo support for all text entries * New framework for showing running tasks, notifications in the status bar * Text markup in the paned browser * Restore maximized state * Restore window position (Felix Krull) * Make size of the queue adjustable (Florian Demmer) * Mouse scrolling over the play button now changes songs * Support alternate home directory using $QUODLIBET_USERDIR (jkohen) * Make the default rating changeable (library reload needed) * Drag and scroll in the song list * Faster context menu opening * Display playlist size (library reload needed) (Nick Boultbee) * Support queries without specifying a tag name * All queries in the album browser use a standard operation (avg, sum etc.) * Support ~rating, ~#bitrate in the album pattern * Support separate song collection patterns in the paned browser * Don't jump to a playing song if it was selected from the songlist * Faster local cover search * Support FreeDesktop trash spec * Lower case option for file renaming (Nick Boultbee) * Various bug fixes, speed improvements (Jacob Lee, Johannes Rohrer, Tshepang Lekhonkhobe) * Bug fixes: * Treeview hints now work with GTK+ >= 2.20 * Search history now gets properly shared between browsers * Fix udev crashes * Paned browser leaks * Respect global filter in all browsers/filters * Don't lose tag values with differently cased tag names (APEv2) * Fix --set-browser (Carlo Teubner) * Properly handle the case where a playing song gets deleted * Fix redraw errors using compiz * FSync on library save * Fix crash when ~/.gtk-bookmarks contains empty lines (Felix Krull) * Correctly identify rockboxed iPods * Windows (Uninstall any previously installed version!): * Fix translation under Win 7 * Fix cover art plugin saving * Add all partitions to the file selector * Fix various crashes with wide char user names * Fix icon under Win 7 * Support multi-user installations * Fix freezes after opening certain folders * New plugins: * Follow cursor play order plugin * Equalizer plugin * MPRIS 1.0/2.0 plugin * Ubuntu sound menu plugin * Rating reset plugin * Track repeat plugin (Nick Boultbee) * Plugins: * Go to bookmark plugin now menu based * Fix some album art plugin backends (Aymeric Mansoux, ..) * Improved "human" title casing (Nick Boultbee) * Fix queue only plugin stopping the current song. * Only use allowed HTML in the notify plugin. * musicbrainz: allow writing sort tags (Michaël Ball) * Translations: * new Latvian translation (Einars Sprugis) * new Basque translation (Piarres Beobide) * French translation updates (Nick Boultbee) * Brazilian/Portuguese translation updates (Djavan Fagundes) * Russian translation updates (Anton Shestakov) 2.2.1 (2010-03-27) - Fewer than four out of ten people respect my promises -- and possibly more! ------------------------------------------------------------------------------------------------ * Fix for importing some mp3 files. [220] * More fixes for the device backend (iPod, multi partition DAPs). [410, 412] * Fix editing keys with multiple values. [440] * Fix weighted playorder algorithm. * Save songlist column patterns. [447] * Some small fixes here and there. * Plugin fixes: * Title case: Improved title casing for English text. (Nick Boultbee) * Random Album: Algorithm improvements. * QLScrobbler: Fix preference pane ordering. * Album art: Some images weren't displayed. (Tomasz Miasko) [429] * Last.fm Sync, Musicbrainz: Minor fixes. * Translations: * Galician, Spanish (Johám-Luís Miguéns Vila). * German (Rüdiger Arp). 2.2 (2010-02-02) - I know you are enjoying that song but a woman DIED --------------------------------------------------------------------- * Saved searches extended to Album and Paned browsers [41]. * Human sorting is now used in Album and Paned browsers [190]. * Windows is now supported (for real this time). * foobar2000's broken TXXX:DATE now supported [220]. * Warnings are now printed for many missing dependencies. * Fixes for device backends. * Lyric downloading disabled until it can be fixed [273]. * Editing both key and value with multiple keys fixed (extruded) [393]. * Plugin changes: * AnimOSD: major update (Andreas Bombe, Christine Spang) [387]. * MusicBrainz: major update. * Random Album: Changed algorithm to increase fairness. * QLScrobbler: Custom patterns for title and artist. * Last.fm Sync: new plugin to sync stats from Last.fm. * Notify OSD, Album Art: Minor fixes. * Translations: * Galician, Spanish (Johám-Luís Miguéns Vila). * French (Bastien Gorissen). 2.1.98 (2010-01-04) - How are you going to convince people to use it? --------------------------------------------------------------------- * Christoph Reiter is now a maintainer. * The GStreamer backend is now gapless [49]. * Win32 is once again supported [248]. * ID3 tags are removed from FLAC files upon saving [124]. * File extensions are converted to lowercase upon renaming [66]. * Thumbnails are now generated for artwork [140]. * Inline searches in the album list can now match people [239]. * Embedded album art is now supported in FLAC files [255]. * Bitrates are now reported in kbps. Library reload required [79]. * Additional ReplayGain settings (Nick Boultbee) [132]. * Tag splitting setting is now order-sensitive [74]. * Paned browser now supports patterns for panes [45]. * Numeric columns have been given a few tweaks (Johan Hovold) [81]. * New ratings column options (Johan Hovold, Bastien Gorissen) [82, 83]. * Renaming when symlinks present no longer raises error (Philipp Weis) [353]. * Xine backend uses software volume control (Markus Koller) [370]. * Song positions are now saved and restored when quitting [218]. * DeviceKit-Disks (UDisks) supported for device discovery [252]. * Plugin changes: * New playlist export plugin [30]. * New queue only playorder plugin [43]. * New Python console plugin. [229] * Updated trayicon plugin [158]. * Updated album art plugin (Eduardo Gonzalez) [139]. * Updated qlscrobbler plugin (Nicholas J. Michalek) [376]. * Updated lastfmsubmit plugin [292]. * Translations: * Russian (Anton Shestakov) [274]. * Turkish (Türerkan İnce). * German (Rüdiger Arp). * Many bug fixes and performance improvements. 2.1 - My God, Utahraptor, that's THE PERFECT SOLUTION. ------------------------------------------------------ * Bug fixes: * Installer fixes [15, 27, 88] * Right-click on menu causes crash [14] * Removing a pane from the paned browser causes segfault [131] * Null bytes in tags are now stripped on load [177, 242] * zh_CN translation updated [156] * Support .oga file extension for Ogg Vorbis files [52] * Support libre.fm scrobbling in qlscrobbler plugin * Get Internet Radio channel listing from yp.icecast.org [18] * Ignore errors during playback for ~#skipcount [37] * URIs supported for --play-file and --enqueue [17] * Many minor fixes and enhancements. 2.0 - Once upon a time there was a radical guy! ----------------------------------------------- * Make Escape a synonym for Ctrl+W in QLTK Windows. (I#8) * Actually fix playlist error. * Fix Xine backend "Stop" behavior. 1.999 - It has been a memorable day ----------------------------------- * Fix playlist error when loading songs. * Unlock device when "stop" mmkey is pressed. (Javier Kohen, I#6) * Restart song when rewinding and > 0.5s in. (Javier Kohen, I#7) * Updated Galician and Spanish translations. (Johám-Luís Miguéns Vila) * Make requirements consistent across all documentation. 1.99 - It is impossible to know if my dream came true ----------------------------------------------------- * New distutils-based build/test/install system. * Multiple audio backend support. * Xine-based audio backend. * "Null" backend for Ex Falso. * Tag Editing: * Tags From Path: "<~>" will eat a string but not save it. * Track Numbers: Allow numbering up to 999. * Show image files in Ex Falso. * Direct output to console and to a debugging window. * Functions are accessible to plugins as print_d, print_e, and print_w. * default_rating configuration option. (Robert Muth) * Many bug fixes and performance improvements. 1.0 - Yeah they just showed up one day -- staring. -------------------------------------------------- * Use Mutagen for ASF/WMA and MP4 support. * Add IsPlaying and GetPosition to the D-Bus API. (Mickael Royer) * Default "No Cover" image. (Jakub Steiner) * Add --unfilter to reset browser filters. * Sort --enqueued files, and add --unqueue. * Basic SPC (SNES ROM audio) support. * Paned Browser speed improvements. (Robert Muth) * Errors when playing a song are now logged to a special ~errors tag. It is visible from the Information screen, and can be reset. * APEv2 tags can now override Musepack stream Replay Gain settings. * Numerous bug fixes, especially in media device handling. * Translation Updates: * Hungarian. (SZERVÁC Attila) * Finnish. (Jari Rahkonen) * Galician and Spanish. (Johám-Luís Miguéns Vila) * French. (Guillaume Ayoub) * Dutch. (Hans van Dok) * Japanese. (Yasushi Iwata) 0.24 - One wonders if our conversation today would be an appropriate epitaph. ----------------------------------------------------------------------------- * Media device (iPod and UMS so far) support. (Markus Koller) * Delete removes songs from the queue. (sciyoshi) * Per-browser window memory. * Use Mutagen for WavPack and Musepack support. * Keep filenames when given invalid patterns. (Markus Koller) * Don't duplicate performers in ~performers. (Martin Bergström) * Python 2.5 and GTK+ 2.10 compatibility. * Fix Rename Files support on MP4 files. * New Romanian translation, by Mugurel Tudor. * New Slovak translation, by Lukáš Lalinský. * Updated translations: * Traditional Chinese, by Hsin-lin Cheng. * Japanese, by Yasushi Iwata. * Galician and Spanish, by Johám-Luís Miguéns Vila. * Finnish, by Jari Rahkonen. * Hebrew, by Roee Haimovich. * Polish, by Tomasz Torcz * French, by Guillaume Ayoub. * German, by Rüdiger Arp. 0.23.1 - UNPOPULAR LIFE GOALS ----------------------------- * Multivalued tag renaming. * Fix crash when ~/.gtk-bookmarks is not present. * Disable 'title' completion. (hopefully temporarily) * Parse "performer:role" tags and offer a ~performers synthetic tag. * Updated Swedish translation, by Erik Christiansson. 0.23 - THE NARRATIVE OF LIFE. ----------------------------- * Bug Fixes: * Updated files no longer incorrectly appear in the paned browser. * Disambiguate 'filename' string for translation. * Hide unreadable files in Ex Falso. * Avoid (harmless) race condition when filling album list. * "Select All Subfolders" menu item when browsing directories. (thanks to Alexandre Passos). * Scan the library in the background when starting. * Ogg FLAC and Speex files can be loaded. * Plugin configuration IDs can be different from their names. * Rewritten library code, many resulting UI improvements. * Scan directories are used as File System roots. * Replay Gain mode is chosen based on browser/play order. * Internet Radio M3U support. * Ex Falso runs on Win32 (thanks to Ben Zeigler). * Song list headers can be changed via a context menu. * True Audio (TTA) support. * New Japanese translation, by Yasushi Iwata. * New Traditional Chinese translation, by Hsin-lin Cheng. * Updated Translations: * German, by Rüdiger Arp. * Polish, by Tomasz Torcz * French, by Guillaume Ayoub. * Galician and Spanish, by Johám-Luís Miguéns Vila and Javier Kohen. * Korean, by Byung-Hee HWANG and ChangBom Yoon. * Hebrew, by Roee Haimovich. * Portuguese, by Alexandre Passos. * Dutch, by Hans van Dok. * Hungarian, by SZERVÁC Attila. * Swedish, by Fredrik Olofsson. 0.22 - Man, forget television, books, films, short films, to a lesser extent plays and other theatre, and the remaining popular media! -------------------------------------------------------------------------------------------------------------------------------------- * The tray icon is now an optional plugin. * A D-BUS interface is available. (thanks to Federico Pelloni) * Tag editing values are autocompleted. * Library Browser windows have more useful titles. * New "~lyrics" synthetic tag. * Python 2.4 is now required. * Updated Translations: * Galician and Spanish, by Johám-Luís Miguéns Vila. * Italian, by Filippo Pappalardo. * Hebrew, by Roee Haimovich. * Finnish, by Jari Rahkonen. * Dutch, by Hans van Dok. * Polish, by Tomasz Torcz * Portuguese, by Alexandre Passos. * French, by Guillaume Ayoub. * Bulgarian, by Rostislav Raykov. * Hungarian, by SZERVÁC Attila. * Korean, by Byung-Hee HWANG and ChangBom Yoon. 0.21.1 - Dude! It's not like you can't just make your own! ---------------------------------------------------------- * MP3s with POPM can be loaded again (Thanks, Hans van Dok) 0.21 - Faith, AND the possibility of weaponized kissing?? --------------------------------------------------------- * Bug Fixes: * Queue behaves correctly when randomizing two songs. * GStreamer error messages are properly localized. * Tray icon is more resiliant to panel crashes. * "Jump..." distinguishes between identically-named albums. * application/ogg is recognized in audio feeds. * .pyo files are removed on clean. * util.unexpand caches the value of $HOME. * Fix plugin function call ordering. * UI Changes: * Improved tooltips in Preferences. * The Paned Browser shows song totals, and has a button to reset all selections. * Saving play count / rating tags can be turned off, or adjusted to a different email address. * The last-entered directory is used for Scan Directories configuration. * pyvorbis is no longer required if you use Mutagen 1.3. * Event plugins were redesigned, incompatibly. * Test coverage data can be generated using trace.py. * New Simplified Chinese translation by Emfox Zhou. * New Hungarian translation by SZERVÁC Attila. * Updated translations: * Finnish, by Jari Rahkonen. * Korean, by Byung-Hee HWANG and ChangBom Yoon. * Galician and Spanish, by Johám-Luís Miguéns Vila. * Norwegian Bokmål, by Andreas Bertheussen. * Italian, by Filippo Pappalardo. * Polish, by Tomasz Torcz * Lithuanian, by Jonas Slivka. * Dutch, by Hans van Dok. 0.20.1 - Thanks for the eye-opener, dinosaur zombies! ----------------------------------------------------- * Vorbis/FLAC tag editing works again. 0.20 - Feelings are boring. Kissing is awesome! ----------------------------------------------- * Bug Fixes: * --play-file will use the queue. * Audio Feeds remember download locations. * Song changes don't revert tag edits. * Browser song activation takes precedence over the queue. * Albums drag-and-drop in listed order. * Only reset relevant parts of Information windows on song change. * Deleting files not in the library removes them. * Non-numeric disc/track numbers sort properly. * Paned Browser no longer adds incorrect entries. (Debian bug ) * Ex Falso no longer loads WAV or MOD files. * Allow more headers in Internet Radio and Audio Feeds. * New process launching method, util.spawn. * UI Changes: * Indicator to show when songs come from the queue. * Rating submenu always appears in the song list. * Album covers hide when clicked again. * Select current song when jumping to it. * New translations: * Norwegian Bokmål, by Andreas Bertheussen. * Swedish, by Erik Christiansson. * Updated translations: * Polish, by Tomasz Torcz. * Dutch, by Hans van Dok. * Finnish, by Jari Rahkonen. * French, by Olivier Gambier. * Galician and Spanish, by Johám-Luís Miguéns Vila. * Hebrew, by Roee Haimovich. * Portuguese, by Alexandre Passos. 0.19.1 - It's our secret! Our secret IDENTITY! ---------------------------------------------- * Work around broken Fedora/Mandrive GNOME bindings. * Fix global plugin directory scanning. * Add originalartist to ~people. * Updated Italian translation, by Filippo Pappalardo. * Updated Korean translation, by Byung-Hee HWANG and ChangBom Yoon. 0.19 - i'm really thirsty you guys ---------------------------------- * Simple X session management. * Require Mutagen 1.0; drops Pymad. * WAV support. * New plugin types can be enabled/disabled. * Album List can search and display any tags. * "Bookmark" time offsets within songs. * Song menu plugins require minor but incompatible updates. * Searches, tagging patterns, and file renaming patterns can be given aliases and saved. * Tag Editing: * MusicBrainz TXXX, artist/album/albumartist support. * Added albumartist, originalartist, originalalbum, originaldate, recordingdate. * Ratings, playcount Ogg Vorbis format changed. * COMM tags in Ex Falso are deleted properly. * UI Changes: * Drops from e.g. Nautilus add to playlists/queue. * Clear button in Album List. * Horizontal scrollbar when absolutely necessary for the song list. * "Random" options use filtered lists. * Album sort is once again and forever default. * 'Add to Playlist' resorts playlist properly. * Enter in 'Add a Tag' moves from tag to value. (Debian bug ) * Standard context menu for all browsers. * 'Delete' key works in Edit Tags. * Type-ahead search works in the Album List. * Bug fixes: * Double-appearances in the filesystem view. * FIFO misses some commands. * Stupid 'refresh' signal finally gone. * Error when seeking and keyboard can't be grabbed. * Updated translations: * Finnish, by Jari Rahkonen. * Galician and Spanish, by Johám-Luís Miguéns Vila. * Polish, by Tomasz Torcz. * Dutch, by Hans van Dok. * German, by Rüdiger Arp. * Lithuanian, by Jonas Slivka. * Hebrew, by Roee Haimovich. 0.18 - "Babies Sporting Monocles"? ---------------------------------- * MP4 iTunes metadata can be written. * Alt+s switches between search entry and song list. * GStreamer 0.10 port. * Album covers can be switched off in the Album List. * The Album List text can be changed with a pattern. * "Limit" in the Search view can take ratings into account. * UI Changes: * Alt+Enter / Ctrl+I shows tags/information for selected songs. * DnD to playlists/the queue from the File System view. * F2 renames playlists. * "Add a Tag" autocompletes tag names. * RSS links can be dragged to the Audio Feeds sidebar. * Bug Fixes: * ID3v1 tags no longer interfere with APEv2 tags. * Playing albums with one song no longer skips forwards. * 'totaltracks' Vorbis tags are read properly. * Adding songs to a playlist doesn't unsort it. * "Tags From Path" patterns are no longer greedy. (thanks to Decklin Foster) * Internet Radio supports the ~people tag. * Word-wrap in lyrics pane works properly. * Ex Falso properly opens an initial directory. (thanks to ch.trassl) * '~format' is usable from --print-playing. ([2810]) * Plugin errors are captured in a dialog. ([2817]) * New synthetic numeric tags, ~#tracks and ~#discs. ([2828]) * Ex Falso no longer depends on GStreamer. ([2837]) * New Lithuanian translation by Jonas Slivka. ([2780]) * Updated translations: * Bulgarian, by Rostislav Raykov. * Finnish, by Jari Rahkonen. * Korean, by Byung-Hee HWANG and ChangBom Yoon. * Galician and Spanish, by Johám-Luís Miguéns Vila. * Hebrew, by Roee Haimovich. * German, by Rüdiger Arp. * Polish, by Tomasz Torcz. * Russian, by Sergey Fedoseev. * French, by Joshua Kwan. 0.17.1 - I'd like to have some nightmares, please! -------------------------------------------------- * Updated German translation, by Rüdiger Arp. * Updated Russian translation, by Sergey Fedoseev. 0.17 - the grizzly icing on the prospector cake! ------------------------------------------------ * Lyrics plugin merged into Information dialog. * "Edit Tags" now correctly removes all copies of multiple values, and displays "(missing from...)" for all missing values. * More FIFO commands (song list and queue visibility). * FLAC support no longer depends on pyflac. * Load audio feeds without author information. * ~#year, ~year internal tags. * Numeric searches are rounded to two decimal places. * New plugin architecture for tag editing dialogs. * Korean translation, by ChangBom Yoon and Byung-Hee HWANG. * Updated translations: * Russian, by Sergey Fedoseev. * Finnish, by Jari Rahkonen. * Portuguese, by Alexandre Passos. * Italian, by Filippo Pappalardo. * Dutch, by Hans van Dok. * Galician, by Johám-Luís Miguéns Vila. * French, by Joshua Kwan. * Polish, by Tomasz Torcz. 0.16 - would it make a difference if it never really came up often? ------------------------------------------------------------------- * Context menu plugins can make themselves insensitive. * More command-line and FIFO options. * Read-only M4A support. (thanks to Alexey Bobyakov) * Wavpack support. * Audio Feed (Podcast) support (requires http://www.feedparser.org). * "One Song" (and repeat) play mode. * Improved and configurable tray icon. * New install system that is more FHS-compliant. * ~laststarted internal tag. * Accents are stripped when renaming to ASCII filenames. * UI improvements: * Ex Falso lists are searchable in GTK 2.8.8+. * ^W closes transient windows. * More DnD support. * HIG-compliance for strings. * Double-click files in browsers to enqueue them. * Rename Files error dialog has a "Continue" button. * Ctrl-Left/Right changed to Ctrl-,/.. * Playlist imports have a progress bar. * New icon that is not all black. (thanks to Tobias and Fabien) * Paned Browser entries have context menus. * Volume icons follow GTK+/GNOME theme. * More memory and CPU optimizations. * GStreamer error handling. (thanks to Zack Weinberg and Bastian Kleineidam) * Musepack, MOD support migrated to Mutagen/ctypes modules. * Updated translations: * Galician and Spanish, by Johám-Luís Miguéns Vila. * Italian, by Filippo Pappalardo. * Dutch, by Hans van Dok. * Finnish, by Jari Rahkonen. * Portuguese, by Alexandre Passos. * French, by Joshua Kwan. * Polish, by Tomasz Torcz. * German, by Rüdiger Arp. * Hebrew, by Roee Haimovich. 0.15 - Maybe I will. -------------------- * An 'artist' tag can be stored in the library for MODs. * 'All Albums' remains on the album list after a search. * The Play Queue displays its total time and has a clear button. * Songs can be enqueued multiple times. * '~people' includes more people. * Files can be added from remote URIs (e.g. HTTP). * "Dumb" searches match any visible tags. * Ratings are now searched with values of 0.0 to 1.0, and the number of visible notes is configurable. * Useless columns are not displayed in Internet Radio. * A single album cover can be refreshed in the Album List. * Playlists have been rewritten: * Songs may now be in a playlist multiple times. * Playlists can be reordered directly, without a special window. * Songs can be added to playlists directly from the context menu. * M3U and PLS playlists (along with their songs) can be imported. * The interface is much more attractive. * Drag-and-drop is generally more usable, faster, and attractive. * Many optimizations, especially during startup. * Updated translations: * Russian, by Sergey Fedoseev. * Galician, by Johám-Luís Miguéns Vila. * Dutch, by Hans van Dok. * French, by Joshua Kwan and Fabien Devaux. * Hebrew, by Roee Haimovich. * Finnish, by Jari Rahkonen. * Polish, by Tomasz Torcz. * Italian, by Filippo Pappalardo. * New translations: * Spanish and Portuguese, by Johám-Luís Miguéns Vila. 0.14 - I'm almost certain! -------------------------- * Internet radio / Shoutcast browser. * Album List separates albums with different labelids. * Ex Falso displays all available plugins in its menu. * Useful ~#lastplayed/~#added/~#mtime display thanks to Lalo Martins. * New Album List search keys and sorting options. * New translations: * Galician, by Johám-Luís Miguéns Vila. * Italian, by Filippo Pappalardo. * Updated translations: * Finnish, by Jari Rahkonen. * Polish, by Tomasz Torcz. * Dutch, by Hans van Dok. * Hebrew, by Roee Haimovich. * German, by Rüdiger Arp. * Russian, by Nikolai Prokoschenko. * Many bug fixes. 0.13.1 - People will fall for this for sure! -------------------------------------------- * Fix playlist creation. * Unplay when no song is playing. 0.13 - So, um... let's- fletcherize? ------------------------------------ * The GStreamer backend is cleaned up, and is now the only backend. This results in lower background CPU usage and many fixes to our audio processing. Gapless playback is gone. * A play queue was added. * A file system browser has been added. This can view, edit, and play files outside of your library. * The Paned Browser has a search entry. * Search Library lets you limit the number of results. * ``~/.quodlibet/browsers`` is now scanned for custom browsers. * Synthetic tags ('''~dirname''', '''~basename''', &c.) can be searched. * Similarly, synthetic tags can be used in the Paned Browser. * New synthetic tags, '''~people''' and '''~playlist'''. * If the tray icon is visible, closing QL's main window will minimize it. To actually quit, choose '''Quit''' from the Music menu or icon. * Search Library and the Album List search entry have tag completion. * Ex Falso supports plugins. * Updated Russian translation by Nikolai Prokoschenko and Sergey Fedoseev. * Updated French translation by Joshua Kwan. * Updated Finnish translation by Jari Rahkonen. * Updated Dutch translation by Hans van Dok. * Updated Hebrew translation by Roee Haimovich. 0.12 - focus ENTIRELY on the sexy bits. --------------------------------------- * New Mutagen ID3 reader/writer. * Experimental GStreamer backend. * Drag-and-drop to playlists. * Weighted random playback. * MP3 and Musepack ReplayGain support. * Larger plugin manager window. * Automatic mount point detection. * Support for multiple soundcards. * Localization enhancements. * Translation updates: * Dutch, thanks to Hans van Dok. * Finnish, thanks to Jari Rahkonen. * French, thanks to Joshua Kwan. * German, thanks to Rüdiger Arp. * Hebrew, thanks to Roee Haimovich. * Russian, thanks to Sergey Fedoseev and Nikolai Prokoschenko. * Polish, thanks to Witold Kieraś. * The usual round of interface tweaks and bug fixes. 0.11 - spicy burnsauce with a side of ZING! ------------------------------------------- * Plugins (either appearing in the right-click menu, or triggered on a player event); see http://www.sacredchao.net/quodlibet/wiki/Plugins. * Browse songs by album, with a cover display. * "Library Browser" added to search/edit files without disturbing your playlist. * Played songs are automatically removed from dynamic playlists. * "Background filters" for the paned browser and search entry. * Create/remove empty folders from within Ex Falso. * '0' to '4' keys or mouse clicks can set song ratings. * Depends on PyGTK 2.6 (as well as GTK 2.6). * --status to print the player's status. * Russian translation, thanks to Sergey and Andrey Fedoseev. * Partial French translation, thanks to Joshua Kwan. * OSD moved to a plugin. 0.10.1 - What if I said I'm not really kidding? ----------------------------------------------- * The main window stays hidden when the song changes. 0.10 - As it turns out, my life is NOT THAT INTERESTING! -------------------------------------------------------- * --seek supports +/- prefix to seek relative to the current position. * Added Ex Falso, a tag editor based on QL (without audio playback). * Switched MP3 genres from TIT1 to TCON. * The library is saved automatically every 15 minutes. * Tag by Pattern/Rename Files save patterns used. * Adding tags with specific formats ('date') is less prone to error. * Several display bugs and non-HIG windows were fixed. * Pane-based (Rhythmbox/iTunes-style) library browser. * Tag by Pattern/Rename Files previews can be manually edited before saving. * Kind of browser (none, search, playlists, paned), song list sort order, and what you were browsing are remembered when you exit. * At least one lockup-causing bug was fixed. * Song ratings, on a 0 to 4 scale. * Masked directories work again. * No more dependency on Glade. * A new icon and website. 0.9 - I don't want any trouble, cephalopods! -------------------------------------------- * Major updates to the Properties dialog: - A new detailed 'Information' tab was added. - Middle click pastes current PRIMARY clipboard text in 'Edit Tags'. - Text in the 'Rename Files' dialog can be conditionalized. * Non-UTF-8 filesystem encodings support (via CHARSET/G_BROKEN_FILENAMES). * New numeric keys "added" and "skipcount" can be searched on. * The --print-playing format string syntax has changed to match the one now used in 'Rename Files'. * New query language enhancements (ternary relation operators, string comparisons, and Lynx-like case-sensitivity). * The tray icon now pauses/unpauses on middle click, adjusts volume with the scroll wheel, and skips forward/backward on buttons 6/7. * This release depends on GTK 2.6 for its new media icons. * PMP support was removed. * Updated German translation (thanks, Bastian!) 0.8.1 - Our story takes a sudden dive... ---------------------------------------- * Fix a crash when encoding information is not available. 0.8 - I make jokes about whomever I please! ------------------------------------------- * New/reloaded libraries take 20% less disk space. * Double-clicking an album cover displays it in a larger window. * --shuffle, --repeat, and --volume (--volume-up and --volume-down are deprecated and will be removed). * Any tag name can be written to (and read from) an MP3 file. * Playlists containing arbitrary songs can be created. * The libmodplug Python wrapper must be downloaded separately. * The MPC/MP+ format is supported (with a separate wrapper). * FLAC supports ReplayGain. * Internal changes made some things faster and others slower. * Polish translation, thanks to Michal Nowikowski. * German translation, thanks to Bastian Kleineidam. 0.7 - I'm going to ho-ho-hoard all these nuts! ---------------------------------------------- * Default to proper 'alsa09' driver (rather than 'alsa'). * "Random Foo" searches are now anchored with ^...$. * Tag By Pattern values can be edited before being saved. * Right-clicking on the status icon brings up a menu. * --play, --pause, --seek-to, --query, --play-file. * OSD (gosd) support, thanks to Iñigo Serna and Gustavo J. A. M. Carneiro. A library reload is needed to use it. * FreeDesktop-style .folder.png files supported for album covers. * Playlist/search UI elements can be hidden. * Dragging playlist columns reorders them. * Library rebuilds no longer lose play counts. * Configurable menu accelerators when gtk-can-change-accels is set. * Delete songs (or move them to the trash) from the player. 0.6 - People laugh at typos in heaven?! --------------------------------------- * Many new filtering options (top 40, not played in X days). * Mass-set track numbers. * Tag by Pattern can replace or add new tags. * Maskable mount points. This lets you add files from an NFS share or portable device and not have to readd them if you unmount and remount it. * Support for sending files to PMPs from the context menu. * --next, --previous, --play-pause, --volume-up, --volume-down. * MOD/IT/XM/etc. support, using libmodplug and an included C extension. * Right-clicking the status icon will pause/unpause. * Seeking in FLACs. * Bug fixes (including at least one crash). 0.5 - Everything's fine, CEPT YOU GOT NO LEGS! ---------------------------------------------- * The ao audio backend is back; see the "AUDIO BACKENDS" section in the manual page for instructions on using it. This should let ALSA users use software mixing. * ID3 APIC (embedded picture) support. * VorbisGain (http://sjeng.org/vorbisgain.html) support. * A context menu for common operations was added to the properties dialog. * Tag values can be set from filename patterns, or vice-versa. * Dates can be saved in MP3s now. * --print-playing option, with a format string. * More UI tweaks. * Translation template update. * Many bug fixes; please reload your library. You can now reload your library from the "Music" menu. 0.4 - The Power of Language --------------------------- * Many bug fixes, primarily due to unit testing. * Tweaks to cover detection to pick 'frontcover' over 'backcover'. * Tweaks to song display, including proper support for the 'author' tag. * Remember size between invokations. * A freedesktop.org-compatible system tray icon, using the Egg status icon code by Anders Carlsson and Sun. * Multimedia key support, provided they're mapped (e.g. by Acme), using the MmKeys object from Muine by Lee Willis and Jan Arne Petersen. * UI tweaks to the main window. * Button to link to a song's website, or a Google search. * Infrastructure is in place for i18n/l10n, but I'm totally new to this, so I could've done something horribly wrong. 0.3 --- * Handle mono MP3s correctly. * Crash less, especially when editing tags. * Many smaller bug fixes. 0.2 --- * Song properties dialog, featuring mass tag editing/addition/removal. * Build/installation scripts. * Interface tweaks for HIG compliance and accessibility. * Try to save the library when ^C is pressed. * ~/.quodlibet/current interface to currently-playing song. * Save current query and song on exit. * An icon. * FLAC support. Writing to FLAC tags could be *very* buggy, so if you value your tags, please back them up. 0.1 --- * Initial release. ������������������������������������������������������������������������������������������������quodlibet-3.0.2/COPYING�����������������������������������������������������������������������������0000644�0001750�0001750�00000043110�12161032160�014754� 0����������������������������������������������������������������������������������������������������ustar �lazka���������������������������lazka���������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This 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 Library General Public License instead of this License. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������