deepin-music-6.0.1.54/000775 000000 000000 00000000000 13703317554 014317 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/.clog.toml000664 000000 000000 00000000164 13703317554 016217 0ustar00rootroot000000 000000 [clog] repository = "https://github.com/linuxdeepin/deepin-music" from-latest-tag = true changelog = "CHANGELOG.md" deepin-music-6.0.1.54/.gitignore000664 000000 000000 00000000116 13703317554 016305 0ustar00rootroot000000 000000 *.pyc .#* *.mo *.pyo *.py# *po~ *INFO# *.sw* *.user *.qm build/ dist/ .vscode deepin-music-6.0.1.54/.transifexrc000664 000000 000000 00000000260 13703317554 016646 0ustar00rootroot000000 000000 [https://www.transifex.com] api_hostname = https://api.transifex.com hostname = https://www.transifex.com password = 1/fed29a347a3f79abfe438d15d1af9dceac2ba39d username = api deepin-music-6.0.1.54/.tx/000775 000000 000000 00000000000 13703317554 015030 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/.tx/config000664 000000 000000 00000000723 13703317554 016222 0ustar00rootroot000000 000000 [main] host = https://www.transifex.com minimum_perc = 80 mode = developer [deepin-music.deepin-music] file_filter = src/music-player/translations/deepin-music_.ts source_file = src/music-player/translations/deepin-music_en_US.ts source_lang = en_US type = QT [deepin-music.deepin-music-desktop-ts] file_filter = src/music-player/translations/desktop/desktop_.ts source_file = src/music-player/translations/desktop/desktop.ts source_lang = en type = QT deepin-music-6.0.1.54/.tx/ts2desktop000664 000000 000000 00000000336 13703317554 017057 0ustar00rootroot000000 000000 DESKTOP_TEMP_FILE=deepin-music.desktop.tmp DESKTOP_SOURCE_FILE=src/music-player/data/deepin-music.desktop DESKTOP_DEST_FILE=src/music-player/data/deepin-music.desktop DESKTOP_TS_DIR=src/music-player/translations/desktop deepin-music-6.0.1.54/CHANGELOG.md000664 000000 000000 00000023120 13703317554 016126 0ustar00rootroot000000 000000 ## 3.1.18 (2019-06-01) #### Bug Fixes * no longer build netease meta search plugin ([903b7f7a](https://github.com/linuxdeepin/deepin-music/commit/903b7f7a65df87c397bc464bb88c0ae6e0772c65)) * should showNormal() when onRaise triggered ([848474b3](https://github.com/linuxdeepin/deepin-music/commit/848474b31bfd0f4abe1a6cf9a1ccba1aedc6a962)) ## 3.1.17.1 (2019-04-19) ## 3.1.17 (2019-04-10) ## 3.1.16 (2019-03-27) #### Bug Fixes * do init MPRIS first ([08b8e06e](https://github.com/linuxdeepin/deepin-music/commit/08b8e06ef99c88bbcba3271192244755fce22f61)) * shuffle is not random ([fc9b6fa0](https://github.com/linuxdeepin/deepin-music/commit/fc9b6fa0fad1960ef5ddd6f25898649bd1f663e7)) ## 3.1.15 (2019-02-25) #### Bug Fixes * wrong path when last import path is empty ([1b489a52](https://github.com/linuxdeepin/deepin-music/commit/1b489a52b88015b392fd76916d9c3c6cd5fb33d7)) ## 3.1.14 (2019-01-25) #### Bug Fixes * avoid using dpkg-parsechangelog ([d730e277](https://github.com/linuxdeepin/deepin-music/commit/d730e2778b925a0f4323d9a224321bc66572106c)) ## 3.1.13 (2018-12-27) #### Bug Fixes * last opened path check ([5def1504](https://github.com/linuxdeepin/deepin-music/commit/5def15043cc3355771ae2e091e801a1a925d039b)) ## 3.1.12 (2018-12-21) #### Bug Fixes * multiple duplicated items when open via associated file ([d4bf361c](https://github.com/linuxdeepin/deepin-music/commit/d4bf361cfe9364233d8afa20aef5da6d90f185e2)) ## 3.1.11 (2018-11-27) ## 3.1.10 (2018-11-26) #### Bug Fixes * avoid set a empty path to QFileDialog ([c6c46e6a](https://github.com/linuxdeepin/deepin-music/commit/c6c46e6a6eb78225874582adba247087989b8be2)) #### Features * support X-Deepin-Vendor ([9731274c](https://github.com/linuxdeepin/deepin-music/commit/9731274cf48febb6cad1b0568524fd3635f637f7)) * support the recent file spec. ([b4c128f6](https://github.com/linuxdeepin/deepin-music/commit/b4c128f60a25343f4443231be69ab670d1c05e6f)) ## 3.1.9 (2018-11-08) #### Bug Fixes * pull tx failed ([0457b68a](https://github.com/linuxdeepin/deepin-music/commit/0457b68ac8fe40e3c976c9097f49ac3c66068c1f)) ## 3.1.8.6 (2018-11-07) #### Bug Fixes * write datebase error ([4fa4ef03](https://github.com/linuxdeepin/deepin-music/commit/4fa4ef03ba64599486d8a16ecda72a351bc3765e)) ## 3.1.8.5 (2018-10-26) #### Bug Fixes * extrend close button area ([07149b51](https://github.com/linuxdeepin/deepin-music/commit/07149b51a27354cce215586884155e7c8d9cf590)) #### Features * disable keyboardSearch ([46c2fecb](https://github.com/linuxdeepin/deepin-music/commit/46c2fecb7b7b2f3b68930241499a95a361ad6344)) ## 3.1.8.4 (2018-08-12) #### Features * refactor ([4c70ffdb](https://github.com/linuxdeepin/deepin-music/commit/4c70ffdb51296201e7be025cf73f4182d6851747)) ## 3.1.8.3 (2018-05-14) #### Bug Fixes * update mpris status ([87934402](https://github.com/linuxdeepin/deepin-music/commit/8793440212a8e5677462d8feaf4d2c4b51aedc3a)) * dock not support group ([03de3cdb](https://github.com/linuxdeepin/deepin-music/commit/03de3cdb5cb5da89ddc87981eca99653a45ff6bd)) * fav status disappear ([2feb298c](https://github.com/linuxdeepin/deepin-music/commit/2feb298cae2ab898d0552e4e60441f344d010262)) #### Features * trash file with dde-file-manager dbus in flatpak ([91f664a1](https://github.com/linuxdeepin/deepin-music/commit/91f664a1b8e027fcf3627a63f19581970bff8ffc)) ## 3.1.8.1 (2018-03-12) #### Bug Fixes * add missing depends gstreamer1.0-fluendo-mp3 ([5065d227](https://github.com/linuxdeepin/deepin-music/commit/5065d227292d882926d5cfbd28ae1c31cbcbb6f9)) * shortcut not work ([145883f9](https://github.com/linuxdeepin/deepin-music/commit/145883f93a3f3d462ade584bfbeda69f5154029e)) ## 3.1.8 (2018-03-06) #### Features * support sliber animation ([5088cd98](https://github.com/linuxdeepin/deepin-music/commit/5088cd9848fbda3ecaafa0a6823b398de6937d53)) * auto resize progress ([b4869ba9](https://github.com/linuxdeepin/deepin-music/commit/b4869ba99dff452a8c1cf90e0b508e58601e5a43)) * hide custom sort from menu ([ddc4b609](https://github.com/linuxdeepin/deepin-music/commit/ddc4b60934f2692eb9e3870f59f2726bd8bc1a05)) * keep sound hint when clicked ([d1a7c9ad](https://github.com/linuxdeepin/deepin-music/commit/d1a7c9adacd8ce1f23c6c58a84d1ecc7c15198fa)) * sync progress on close ([3a0ff320](https://github.com/linuxdeepin/deepin-music/commit/3a0ff320a014e81b5eedec65c3a32b359fcd6f1c)) * use DThemeManger ([f3e9659e](https://github.com/linuxdeepin/deepin-music/commit/f3e9659e8c4997c16314e9239eb6dcdefeb14612)) * add manual id ([d21100f9](https://github.com/linuxdeepin/deepin-music/commit/d21100f941a4e11d3ff5b3fda4e0e44e9d303784)) * add VERSION configure option to define app version. ([ae4c1fed](https://github.com/linuxdeepin/deepin-music/commit/ae4c1fed06ae0cd8ea1c681ed022cd2b333d0540)) #### Bug Fixes * hide dock icon when close to minitray ([18459921](https://github.com/linuxdeepin/deepin-music/commit/184599216faa3c9945cf0f1ed0792f9ab9c76b82)) * try hide/show to make windowFlags change effect ([7ce74ffd](https://github.com/linuxdeepin/deepin-music/commit/7ce74ffd6b14527805d8c68d2b9035e50b987e69)) * network changed reset cover data ([2fb24abb](https://github.com/linuxdeepin/deepin-music/commit/2fb24abb333d32d230d402708e142064cae43306)) * qss not work for CloseConfirmDialog ([76c10c2c](https://github.com/linuxdeepin/deepin-music/commit/76c10c2ce04511fb51069a4e7537b31a9b627067)) * add missing depends libqt5sql5-sqlite libqt5multimedia5-plugins ([c338d86d](https://github.com/linuxdeepin/deepin-music/commit/c338d86df98236362b77d34f9a87a60812d46c9b)) * add missing depends ([972ea100](https://github.com/linuxdeepin/deepin-music/commit/972ea10011f361faa32ef6ccc105b0bd36f5dd66)) * add depends gstreamer1.0-plugins-ugly ([b0a28734](https://github.com/linuxdeepin/deepin-music/commit/b0a287348638831e7c0d4afd728f5663068c90bc)) * Adapt lintian ([fe242955](https://github.com/linuxdeepin/deepin-music/commit/fe2429559e7c95e17e6c42f9eb8b38a89723744c)) * work for qss repaint in hidpi ([49f5b1ba](https://github.com/linuxdeepin/deepin-music/commit/49f5b1ba3c6023b564cf721e8d8d87203c48b285)) ## 3.1.7.2 (2017-11-23) #### Features * change default shortcut ([62b2b2e1](https://github.com/linuxdeepin/deepin-music/commit/62b2b2e16a333dd9227f8e4c9e4673a28af884d2)) ## 3.1.7.1 (2017-11-23) #### Bug Fixes * showNormal not work ([bb22dc99](https://github.com/linuxdeepin/deepin-music/commit/bb22dc999db0c6e3d72b5062b5c061c4a45bba35)) * crash when selectNext on qt 5.9 ([bed9d856](https://github.com/linuxdeepin/deepin-music/commit/bed9d85682d9edf7a20d78801c6ec4b4cd076ad9)) ## 3.1.7 (2017-11-23) #### Bug Fixes * fix hidpi playing state ([84783418](https://github.com/linuxdeepin/deepin-music/commit/847834182e7c699a3fa267e40017eee9362e1d18)) * fix lyric text cut ([1dbf4dc2](https://github.com/linuxdeepin/deepin-music/commit/1dbf4dc27657ae0c71a6a4c6ca628a4ec7793381)) * move qmediaplayer to main thread ([3ce0ca3c](https://github.com/linuxdeepin/deepin-music/commit/3ce0ca3cc855ef4d2c549e6007f0f00c558f6f1d)) * fix dialog style ([cfc0db93](https://github.com/linuxdeepin/deepin-music/commit/cfc0db93060cb89770ba9335ff9a5bead30c8989)) * use deviceRatio in musicitemdelegate ([f3a65085](https://github.com/linuxdeepin/deepin-music/commit/f3a6508583585c620b5bc13e60ecbcb8e92f2e33)) * enable drag progress bar ([22f8916e](https://github.com/linuxdeepin/deepin-music/commit/22f8916e95ab232399d05aef467f00255228161f)) * fix border pos ([6fa9cc9e](https://github.com/linuxdeepin/deepin-music/commit/6fa9cc9e4e510f1bc7ecee8a70f90b5fac9eff92)) * set dialog flag error ([ef200472](https://github.com/linuxdeepin/deepin-music/commit/ef200472746005b230bc5bc01d51cfcbf530031f)) * change footer bar cover mouse cursor ([a4837dce](https://github.com/linuxdeepin/deepin-music/commit/a4837dce12ffd8495feeec9d9b534ab4c8ee65af)) * fix libdmusic install path ([2d86199a](https://github.com/linuxdeepin/deepin-music/commit/2d86199a688bb738f1981aeca08cd503d6eb46d3)) * make dropdown show full text on ru locale ([fcc58c97](https://github.com/linuxdeepin/deepin-music/commit/fcc58c97acd642409ae58f69d899bc9628b319ca)) #### Features * stop next after continue error count >= 5 ([e6127596](https://github.com/linuxdeepin/deepin-music/commit/e6127596456e17f3712245521864669cee839793)) * call dbus trash ([b5d6fcb4](https://github.com/linuxdeepin/deepin-music/commit/b5d6fcb40b4b8b991d4ffaf505b6e7a062572ed9)) * extern footer progress ([3459625e](https://github.com/linuxdeepin/deepin-music/commit/3459625efaec034844fb3dbdeadba4fc6b8ee43c)) * all use svg ([a942c308](https://github.com/linuxdeepin/deepin-music/commit/a942c30887a32242c07c39997aac1e7ea5e59302)) * use dbus call filemanager ([e276e636](https://github.com/linuxdeepin/deepin-music/commit/e276e63639ed928a8e2519b8ff9985ba68c9803f)) * remove dtk2 workaround ([0eb1ee32](https://github.com/linuxdeepin/deepin-music/commit/0eb1ee3234a635496dd9abbc6c6a2dd60253e10a)) * use dtk DWaterProgress ([6109ffee](https://github.com/linuxdeepin/deepin-music/commit/6109ffeefa5894d8a5b8f9aaba35364f56ca8e43)) * **hidpi:** add hidpi support ([107e5987](https://github.com/linuxdeepin/deepin-music/commit/107e59879f0959ce7364a5833a150feec3d2479c)) deepin-music-6.0.1.54/COPYING000664 000000 000000 00000104374 13703317554 015363 0ustar00rootroot000000 000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . deepin-music-6.0.1.54/LICENSE000664 000000 000000 00000104513 13703317554 015330 0ustar00rootroot000000 000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . deepin-music-6.0.1.54/README.md000664 000000 000000 00000004410 13703317554 015575 0ustar00rootroot000000 000000 ### deepin-music Deepin music is a local music player with beautiful design and simple functions developed by Deepin Technology. ### Dependencies ### Build dependencies _The **master** branch is current development branch, build dependencies may changes without update README.md, refer to `./debian/control` for a working build depends list_ * pkg-config * libtag1-dev * libicu-dev * libcue-dev * libtag1-dev * libavutil-dev * libavcodec-dev * libavformat-dev * libdtkcore-dev * libdtkgui-dev * Qt5(>= 5.6) with modules: - qt5-qmake - libqt5svg5-dev - qttools5-dev-tools - qtmultimedia5-dev - libkf5codecs-dev * Deepin-tool-kit(>=2.0) with modules: - libdtkwidget-dev ## Installation ### Build from source code 1. Make sure you have installed all dependencies. _Package name may be different between distros, if deepin-music is available from your distro, check the packaging script delivered from your distro is a better idea._ Assume you are using [Deepin](https://distrowatch.com/table.php?distribution=deepin) or other debian-based distro which got deepin-music delivered: ``` shell $ apt build-dep deepin-music ``` 2. Build: ``` $ cd deepin-music $ mkdir Build $ cd Build $ qmake .. $ make ``` 3. Install: ``` $ sudo make install ``` The executable binary file could be found at `/usr/bin/deepin-music` ## Usage Execute `deepin-music` ## Documentations - [Development Documentation](https://linuxdeepin.github.io/) - [User Documentation](https://wikidev.uniontech.com/index.php?title=音ä¹) | [用户文档](https://wikidev.uniontech.com/index.php?title=音ä¹) ## Getting help - [Official Forum](https://bbs.deepin.org/) - [Developer Center](https://github.com/linuxdeepin/developer-center) - [Gitter](https://gitter.im/orgs/linuxdeepin/rooms) - [IRC Channel](https://webchat.freenode.net/?channels=deepin) - [Wiki](https://wiki.deepin.org/) ## Getting involved We encourage you to report issues and contribute changes - [Contribution guide for developers](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers-en) (English) - [å¼€å‘者代ç è´¡çŒ®æŒ‡å—](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers) (中文) ## License deepin-music is licensed under [GPLv3](LICENSE)deepin-music-6.0.1.54/debian/000775 000000 000000 00000000000 13703317554 015541 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/debian/changelog000664 000000 000000 00000001575 13703317554 017423 0ustar00rootroot000000 000000 deepin-music (2.99.0-1) stable; urgency=low * Pre-release for deepin music 3.0 -- TagBuilder Mon, 23 May 2016 14:20:26 +0000 deepin-music (2.3.2-1) stable; urgency=low * Autobuild Tag 2.3.2 -- TagBuilder Mon, 23 May 2016 14:20:26 +0000 deepin-music (2.90.0-1) stable; urgency=low * Autobuild Tag 2.90.0 -- TagBuilder Thu, 21 Apr 2016 14:51:38 +0000 deepin-music (2.3.0-1) stable; urgency=low * Autobuild Tag 2.3.0 -- TagBuilder Fri, 03 Jul 2015 10:03:54 +0000 deepin-music (2.90.0-1) stable; urgency=low * Autobuild Tag 2.90.0 -- TagBuilder Wed, 01 Jul 2015 16:57:13 +0000 deepin-music (0.0.0) unstable; urgency=medium * Unstable release. -- 宋文武 Mon, 22 Dec 2014 14:10:51 +0800 deepin-music-6.0.1.54/debian/compat000664 000000 000000 00000000002 13703317554 016737 0ustar00rootroot000000 000000 9 deepin-music-6.0.1.54/debian/control000664 000000 000000 00000001553 13703317554 017150 0ustar00rootroot000000 000000 Source: deepin-music Section: sound Priority: extra Maintainer: Deepin Packages Builder Build-Depends: debhelper, pkg-config, qttools5-dev-tools, libqt5svg5-dev, qtmultimedia5-dev, libtag1-dev, libicu-dev, libcue-dev, libavutil-dev, libavformat-dev, libavcodec-dev, libdtkgui-dev,libdtkwidget-dev,libkf5codecs-dev, libvlc-dev,libvlccore-dev Standards-Version: 3.9.8 Homepage: http://www.deepin.org/ Package: deepin-music Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, gstreamer1.0-libav, gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-plugins-bad, gstreamer1.0-plugins-ugly, gstreamer1.0-pulseaudio, libqt5sql5-sqlite, libqt5multimedia5-plugins, gstreamer1.0-fluendo-mp3, gvfs-bin,vlc-plugin-base Description: Music software for UOS Music is a local music player with beautiful design and simple functions. deepin-music-6.0.1.54/debian/copyright000664 000000 000000 00000001654 13703317554 017502 0ustar00rootroot000000 000000 Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: deepin-music Files: * Copyright: 2018 Wuhan Deepin Technology Co., Ltd. License: GPL-3+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". deepin-music-6.0.1.54/debian/rules000775 000000 000000 00000000371 13703317554 016622 0ustar00rootroot000000 000000 #!/usr/bin/make -f include /usr/share/dpkg/default.mk export QT_SELECT=5 %: dh $@ --parallel override_dh_auto_configure: dh_auto_configure -- DEFINES+="VERSION=$(DEB_VERSION_UPSTREAM)" override_dh_auto_install: dh_auto_install -- PREFIX=/usr deepin-music-6.0.1.54/debian/source/000775 000000 000000 00000000000 13703317554 017041 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/debian/source/format000664 000000 000000 00000000015 13703317554 020250 0ustar00rootroot000000 000000 3.0 (native) deepin-music-6.0.1.54/music.pro000664 000000 000000 00000000064 13703317554 016161 0ustar00rootroot000000 000000 TEMPLATE = subdirs CONFIG = ordered SUBDIRS += src deepin-music-6.0.1.54/snap/000775 000000 000000 00000000000 13703317554 015260 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/snap/gui/000775 000000 000000 00000000000 13703317554 016044 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/snap/gui/deepin-music.desktop000664 000000 000000 00000000174 13703317554 022023 0ustar00rootroot000000 000000 [Desktop Entry] Type=Application Terminal=false Exec=deepin-music Name=Deepin Music Icon=${SNAP}/meta/gui/music_icon-24.svg deepin-music-6.0.1.54/snap/gui/music_icon-24.svg000664 000000 000000 00000040307 13703317554 021144 0ustar00rootroot000000 000000 深度音ä¹-256px Created with Sketch. deepin-music-6.0.1.54/snap/snapcraft.yaml000664 000000 000000 00000002047 13703317554 020130 0ustar00rootroot000000 000000 name: deepin-music version: '0.1' summary: deepin-music description: | This is deepin-music snap application grade: stable confinement: strict apps: deepin-music: command: desktop-launch $SNAP/usr/bin/deepin-music plugs: - network - unity7 - x11 - home - opengl - pulseaudio - browser-support - network-bind parts: app: source: . plugin: qmake qt-version: qt5 build-packages: - libtag1-dev - libcue-dev - qttools5-dev-tools options: - DEFINES+= SNAP_APP stage-packages: - overlay-scrollbar-gtk2 - libgail-3-0 - libatk-bridge2.0-0 - libatk-adaptor - unity-gtk2-module:amd64 - libcanberra-gtk-module:amd64 - fonts-wqy-zenhei - libqt5sql5-sqlite:amd64 - libqt5multimedia5 - libqt5multimedia5-plugins - libqt5multimediawidgets5 - gstreamer1.0-plugins-base - gstreamer1.0-plugins-good - gstreamer1.0-plugins-bad - gstreamer1.0-plugins-ugly after: [desktop-qt5] deepin-music-6.0.1.54/src/000775 000000 000000 00000000000 13703317554 015106 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/config.pri000664 000000 000000 00000000420 13703317554 017063 0ustar00rootroot000000 000000 DEFINES += QT_MESSAGELOGCONTEXT ARCH = $$QMAKE_HOST.arch message("Build arch:" $$ARCH) #isEqual(ARCH, x86_64) | isEqual(ARCH, i686) { # CONFIG += ENABLE_LIBAV #} CONFIG += ENABLE_LIBAV PROJECT_ROOT = $$PWD BUILD_DIST = $$PROJECT_ROOT/dist APP_TARGET = deepin-music deepin-music-6.0.1.54/src/interface/000775 000000 000000 00000000000 13703317554 017046 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/interface/interface.pri000664 000000 000000 00000000167 13703317554 021526 0ustar00rootroot000000 000000 INCLUDEPATH += $$PWD HEADERS += \ $$PWD/metasearchengine.h \ $$PWD/plugininterface.h \ $$PWD/searchmeta.h deepin-music-6.0.1.54/src/interface/interface.pro000664 000000 000000 00000000000 13703317554 021516 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/interface/metasearchengine.h000664 000000 000000 00000003350 13703317554 022522 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "plugininterface.h" #include #include class MediaMeta; namespace DMusic { namespace Plugin { class MetaSearchEngine : public QObject, public PluginInterface { Q_OBJECT public: explicit MetaSearchEngine(QObject *parent = 0) : QObject(parent) {} signals: void lyricLoaded(const MetaPtr meta, const DMusic::SearchMeta &search, const QByteArray &lyricData); void coverLoaded(const MetaPtr meta, const DMusic::SearchMeta &search, const QByteArray &coverData); void metaSearchFinished(const MetaPtr meta); void doSearchMeta(const MetaPtr meta); void contextSearchFinished(const QString &context, const QList &metalist); void doSearchContext(const QString &context); public: virtual QObject *getObject() = 0 ; virtual void searchMeta(const MetaPtr meta) = 0; }; } } deepin-music-6.0.1.54/src/interface/plugininterface.h000664 000000 000000 00000002331 13703317554 022375 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include class MediaMeta; namespace DMusic { namespace Plugin { enum class PluginType { TypeMetaSearchEngine = 0, }; class PluginInterface { public: virtual ~PluginInterface() {} virtual PluginType pluginType() const = 0; virtual QString pluginId() const = 0; }; } } QT_BEGIN_NAMESPACE Q_DECLARE_INTERFACE(DMusic::Plugin::PluginInterface, "com.deepin.dde.Music.Plugin"); QT_END_NAMESPACE deepin-music-6.0.1.54/src/interface/searchmeta.h000664 000000 000000 00000002573 13703317554 021342 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include namespace DMusic { struct SearchAlbum { int id = 0; QString name; QString coverUrl; }; struct SearchArtist { int id = 0; QString name; QString avatarUrl; }; struct SearchMeta { QString id; QString name; SearchAlbum album; QList artists; int length = 0; SearchMeta() {} SearchMeta(const QString &id): id(id) {} }; } Q_DECLARE_METATYPE(DMusic::SearchMeta) Q_DECLARE_METATYPE(QList) deepin-music-6.0.1.54/src/libdmusic/000775 000000 000000 00000000000 13703317554 017061 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/libdmusic/libdmusic.pro000664 000000 000000 00000003350 13703317554 021557 0ustar00rootroot000000 000000 #------------------------------------------------- # # Project created by QtCreator 2016-12-16T10:38:25 # #------------------------------------------------- include($$PWD/../config.pri) QT += network KCodecs #QT -= gui TARGET = dmusic TEMPLATE = lib CONFIG += c++11 link_pkgconfig DESTDIR = $$BUILD_DIST/lib #unix { PKGCONFIG += icu-uc icu-i18n taglib QT += dtkcore CONFIG(ENABLE_LIBAV) { PKGCONFIG += libavutil libavformat libavcodec } else { DEFINES += DISABLE_LIBAV } #} DEFINES += LIBDMUSIC_LIBRARY # The following define makes your compiler emit warnings if you use # any feature of Qt which as been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ mediameta.cpp \ metadetector.cpp \ util/cueparser.cpp \ util/pinyinsearch.cpp \ net/geese.cpp \ util/encodingdetector.cpp \ util/basetool.cpp HEADERS +=\ libdmusic_global.h \ mediameta.h \ metadetector.h \ util/singleton.h \ util/cueparser.h \ util/pinyinsearch.h \ net/geese.h \ util/encodingdetector.h \ playlistmeta.h \ util/basetool.h unix { PKGCONFIG += libcue INSTALLS += target isEmpty(PREFIX){ target.path = $$[QT_INSTALL_LIBS] } else { target.path = $${PREFIX}/lib } } deepin-music-6.0.1.54/src/libdmusic/libdmusic_global.h000664 000000 000000 00000002135 13703317554 022526 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef LIBDMUSIC_GLOBAL_H #define LIBDMUSIC_GLOBAL_H #include //#if defined(STATIC_LIB) //# define LIBDMUSICSHARED_EXPORT //#else //#endif #if defined(LIBDMUSIC_LIBRARY) # define LIBDMUSICSHARED_EXPORT Q_DECL_EXPORT #else # define LIBDMUSICSHARED_EXPORT Q_DECL_IMPORT #endif #endif // LIBDMUSIC_GLOBAL_H deepin-music-6.0.1.54/src/libdmusic/mediameta.cpp000664 000000 000000 00000006456 13703317554 021526 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "mediameta.h" #include #include #include #include "util/pinyinsearch.h" #include "metadetector.h" using namespace DMusic; void MediaMeta::updateSearchIndex() { for (auto &str : PinyinSearch::simpleChineseSplit(this->title)) { this->pinyinTitle += str; this->pinyinTitleShort += str.at(0); } for (auto &str : PinyinSearch::simpleChineseSplit(this->artist)) { this->pinyinArtist += str; this->pinyinArtistShort += str.at(0); } for (auto &str : PinyinSearch::simpleChineseSplit(this->album)) { this->pinyinAlbum += str; this->pinyinAlbumShort += str.at(0); } } void MediaMeta::updateCodec(const QByteArray &codec) { QFileInfo cueFi(this->cuePath); if (cueFi.exists()) { MetaDetector::updateCueFileTagCodec(this, cueFi, codec); } else { MetaDetector::updateMediaFileTagCodec(this, codec, true); } } QByteArray MediaMeta::getCoverData(const QString &tmpPath) { if (!loadCover) { coverData = MetaDetector::getCoverData(localPath, tmpPath, hash); } loadCover = true; return coverData; } MediaMeta MediaMeta::fromLocalFile(const QFileInfo &fileInfo) { MediaMeta meta; meta.hash = filepathHash(fileInfo.absoluteFilePath()); MetaDetector::updateMetaFromLocalfile((&meta), fileInfo); return meta; } namespace DMusic { QString filepathHash(const QString &filepath) { return QString(QCryptographicHash::hash(filepath.toUtf8(), QCryptographicHash::Md5).toHex()); } QString lengthString(qint64 length) { length = length / 1000; int hour = static_cast(length / 3600); QString mmStr = QString("%1").arg(length % 3600 / 60, 2, 10, QLatin1Char('0')); QString ssStr = QString("%1").arg(length % 60, 2, 10, QLatin1Char('0')); if (hour > 0) { return QString("%1:%2:%3").arg(hour).arg(mmStr).arg(ssStr); } else { return QString("%1:%2").arg(mmStr).arg(ssStr); } } QString sizeString(qint64 sizeByte) { QString text; if (sizeByte < 1024) { text.sprintf("%.1fB", sizeByte / 1.0); return text; } if (sizeByte < 1024 * 1024) { text.sprintf("%.1fK", sizeByte / 1024.0); return text; } if (sizeByte < 1024 * 1024 * 1024) { text.sprintf("%.1fM", sizeByte / 1024.0 / 1024.0); return text; } text.sprintf("%.1fG", sizeByte / 1024.0 / 1024.0 / 1024.0); return text; } QList detectMetaEncodings(MetaPtr meta) { return MetaDetector::detectEncodings(meta); } } deepin-music-6.0.1.54/src/libdmusic/mediameta.h000664 000000 000000 00000005700 13703317554 021162 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include "libdmusic_global.h" #include #include #include #include #include class QFileInfo; class LIBDMUSICSHARED_EXPORT MediaMeta { public: QString hash; QString localPath; QString cuePath; QString title; QString artist; QString album; QString lyricPath; QString pinyinTitle; QString pinyinTitleShort; QString pinyinArtist; QString pinyinArtistShort; QString pinyinAlbum; QString pinyinAlbumShort; QString filetype; qint64 timestamp = 0; // addTime; qint64 offset = 0; //msec qint64 length = 1; //msec qint64 track = 0; qint64 size = 1; QString editor; QString composer; QString creator; QString searchID; QUrl coverUrl; QByteArray coverData; bool favourite = false; bool invalid = false; bool loadCover = false; QString codec; //save codec public: void updateSearchIndex(); void updateCodec(const QByteArray &codec); QByteArray getCoverData(const QString &tmpPath); static MediaMeta fromLocalFile(const QFileInfo &fileInfo); }; typedef QSharedPointer MetaPtr; typedef QList MetaPtrList; inline QDataStream &operator<<(QDataStream &dataStream, const MetaPtr &objectA) { auto ptr = objectA.data(); auto ptrval = reinterpret_cast(ptr); auto var = QVariant::fromValue(ptrval); dataStream << var; return dataStream; } inline QDataStream &operator>>(QDataStream &dataStream, MetaPtr &objectA) { QVariant var; dataStream >> var; qulonglong ptrval = var.toULongLong(); auto ptr = reinterpret_cast(ptrval); objectA = MetaPtr(ptr); return dataStream; } Q_DECLARE_METATYPE(MediaMeta) Q_DECLARE_METATYPE(MetaPtr) Q_DECLARE_METATYPE(MetaPtrList) namespace DMusic { QString LIBDMUSICSHARED_EXPORT filepathHash(const QString &filepath); QString LIBDMUSICSHARED_EXPORT sizeString(qint64 sizeByte); QString LIBDMUSICSHARED_EXPORT lengthString(qint64 length); QList LIBDMUSICSHARED_EXPORT detectMetaEncodings(MetaPtr meta); } deepin-music-6.0.1.54/src/libdmusic/metadetector.cpp000664 000000 000000 00000033561 13703317554 022255 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "metadetector.h" #include #include #include #include #include #include #include #include #include #include //#ifndef DISABLE_LIBAV #ifdef __cplusplus extern "C" { #endif // __cplusplus #include #include #ifdef __cplusplus } #endif // __cplusplus //#endif // DISABLE_LIBAV #include #include #include #include #include #include "util/encodingdetector.h" #include "util/cueparser.h" #include "util/pinyinsearch.h" static QMap localeCodes; void MetaDetector::init() { //#ifndef DISABLE_LIBAV av_register_all(); //#endif // DISABLE_LIBAV localeCodes.insert("zh_CN", "GB18030"); } #if QT_VERSION >= 0x040000 # define QStringToTString(s) TagLib::String(s.toUtf8().data(), TagLib::String::UTF8) #else # define QStringToTString(s) TagLib::String(s.utf8().data(), TagLib::String::UTF8) #endif QList MetaDetector::detectEncodings(const QByteArray &rawData) { auto icuCodes = DMusic::EncodingDetector::detectEncodings(rawData); // auto localeCode = localeCodes.value(QLocale::system().name()); // if (icuCodes.contains(localeCode)) { // icuCodes.removeAll(localeCode); // } // if (!localeCode.isEmpty()) { // icuCodes.push_front(localeCode); // } return icuCodes; } void MetaDetector::updateCueFileTagCodec(MediaMeta *meta, const QFileInfo &/*cueFi*/, const QByteArray &codec) { Q_ASSERT(meta != nullptr); DMusic::CueParser cueParser(meta->cuePath, codec); // TODO: parse may be failed for diff code for (auto cueMeta : cueParser.metalist()) { if (meta->hash == cueMeta->hash) { meta->title = cueMeta->title; meta->artist = cueMeta->artist; meta->album = cueMeta->album; } } } void MetaDetector::updateMediaFileTagCodec(MediaMeta *meta, const QByteArray &codecName, bool forceEncode) { Q_ASSERT(meta != nullptr); if (meta->localPath.isEmpty()) { qCritical() << "meta localPath is empty:" << meta->title << meta->hash; return ; } QByteArray detectByte; QByteArray detectCodec = codecName; auto mediaPath = QStringToTString(meta->localPath); #ifdef _WIN32 TagLib::FileRef f(meta->localPath.toStdWString().c_str()); #else TagLib::FileRef f(meta->localPath.toStdString().c_str()); #endif TagLib::Tag *tag = f.tag(); if (!f.file()) { qCritical() << "TagLib: open file failed:" << meta->localPath << f.file(); } if (!tag) { qWarning() << "TagLib: no tag for media file" << meta->localPath; return; } TagLib::AudioProperties *t_audioProperties = f.audioProperties(); if (t_audioProperties == nullptr) return ; meta->length = t_audioProperties->length() * 1000; bool encode = true; encode &= tag->title().isNull() ? true : tag->title().isLatin1(); encode &= tag->artist().isNull() ? true : tag->artist().isLatin1(); encode &= tag->album().isNull() ? true : tag->album().isLatin1(); if (forceEncode) { encode = true; } if (encode) { if (detectCodec.isEmpty()) { detectByte += tag->title().toCString(); detectByte += tag->artist().toCString(); detectByte += tag->album().toCString(); auto allDetectCodecs = detectEncodings(detectByte); auto localeCode = localeCodes.value(QLocale::system().name()); for (auto curDetext : allDetectCodecs) { if (curDetext == "Big5" || curDetext == localeCode) { detectCodec = curDetext; break; } } if (detectCodec.isEmpty()) detectCodec = allDetectCodecs.value(0); QString curStr = QString::fromLocal8Bit(tag->title().toCString()); if (curStr.isEmpty()) curStr = QString::fromLocal8Bit(tag->artist().toCString()); if (curStr.isEmpty()) curStr = QString::fromLocal8Bit(tag->album().toCString()); for (auto ch : curStr) { if (DMusic::PinyinSearch::isChinese(ch)) { detectCodec = "GB18030"; break; } } } QString detectCodecStr(detectCodec); if (detectCodecStr.compare("utf-8", Qt::CaseInsensitive) == 0) { meta->album = TStringToQString(tag->album()); meta->artist = TStringToQString(tag->artist()); meta->title = TStringToQString(tag->title()); meta->codec = "UTF-8"; //info codec } else { QTextCodec *codec = QTextCodec::codecForName(detectCodec); if (codec == nullptr) { meta->album = TStringToQString(tag->album()); meta->artist = TStringToQString(tag->artist()); meta->title = TStringToQString(tag->title()); } else { meta->album = codec->toUnicode(tag->album().toCString()); meta->artist = codec->toUnicode(tag->artist().toCString()); meta->title = codec->toUnicode(tag->title().toCString()); } meta->codec = detectCodec; } #ifdef true // qDebug() << "convert to" << detectCodec << QTextCodec::availableCodecs(); const size_t buflen = 1024 * 10; char buf[buflen]; UErrorCode err = U_ZERO_ERROR; int32_t len = ucnv_convert("utf-8", detectCodec, buf, buflen, tag->title().toCString(), -1, &err); meta->title = QString::fromUtf8(buf); // qDebug() << len << QString::fromUtf8(buf) << buf << u_errorName(err); err = U_ZERO_ERROR; len = ucnv_convert("utf-8", detectCodec, buf, buflen, tag->artist().toCString(), -1, &err); meta->artist = QString::fromUtf8(buf); // qDebug() << len << QString::fromUtf8(buf) << buf << u_errorName(err); err = U_ZERO_ERROR; len = ucnv_convert("utf-8", detectCodec, buf, buflen, tag->album().toCString(), -1, &err); meta->album = QString::fromUtf8(buf); // qDebug() << len << QString::fromUtf8(buf) << buf << u_errorName(err); Q_UNUSED(len); #endif } else { meta->album = TStringToQString(tag->album()); meta->artist = TStringToQString(tag->artist()); meta->title = TStringToQString(tag->title()); meta->codec = "UTF-8"; } if (meta->title.isEmpty()) { QFileInfo localFi(meta->localPath); meta->title = localFi.completeBaseName(); } //empty str meta->album = meta->album.simplified(); meta->artist = meta->artist.simplified(); meta->title = meta->title.simplified(); } QList MetaDetector::detectEncodings(const MetaPtr meta) { if (meta->localPath.isEmpty()) { return QList() << "UTF-8"; } QByteArray detectByte; if (!meta->cuePath.isEmpty()) { QFile cueFile(meta->cuePath); if (cueFile.open(QIODevice::ReadOnly)) { detectByte = cueFile.readAll(); return detectEncodings(detectByte); } } #ifdef _WIN32 TagLib::FileRef f(meta->localPath.toStdWString().c_str()); #else TagLib::FileRef f(meta->localPath.toStdString().c_str()); #endif TagLib::Tag *tag = f.tag(); if (tag) { detectByte += tag->title().toCString(); detectByte += tag->artist().toCString(); detectByte += tag->album().toCString(); } return detectEncodings(detectByte); } void MetaDetector::updateMetaFromLocalfile(MediaMeta *meta, const QFileInfo &fileInfo) { Q_ASSERT(meta != nullptr); meta->localPath = fileInfo.absoluteFilePath(); if (meta->localPath.isEmpty()) { return ; } meta->length = 0; updateMediaFileTagCodec(meta, "", false); if (meta->length == 0) { //#ifndef DISABLE_LIBAV AVFormatContext *pFormatCtx = avformat_alloc_context(); avformat_open_input(&pFormatCtx, meta->localPath.toStdString().c_str(), nullptr, nullptr); if (pFormatCtx) { avformat_find_stream_info(pFormatCtx, nullptr); int64_t duration = pFormatCtx->duration / 1000; if (duration > 0) { meta->length = duration; } } avformat_close_input(&pFormatCtx); avformat_free_context(pFormatCtx); //#endif // DISABLE_LIBAV } meta->size = fileInfo.size(); auto current = QDateTime::currentDateTime(); // HACK how to sort by add time meta->timestamp = current.toMSecsSinceEpoch() * 1000; meta->filetype = fileInfo.suffix(); if (meta->title.isEmpty()) { meta->title = fileInfo.completeBaseName(); } meta->updateSearchIndex(); } QByteArray MetaDetector::getCoverData(const QString &path, const QString &tmpPath, const QString &hash) { QString imagesDirPath = tmpPath + "/images"; QString imageName = hash + ".jpg"; QDir imageDir(imagesDirPath); if (!imageDir.exists()) { imageDir.cdUp(); imageDir.mkdir("images"); imageDir.cd("images"); } QByteArray byteArray; if (!tmpPath.isEmpty() && !hash.isEmpty()) { if (imageDir.exists(imageName)) { QImage image(imagesDirPath + "/" + imageName); if (!image.isNull()) { QBuffer buffer(&byteArray); buffer.open(QIODevice::WriteOnly); image.save(&buffer, "jpg"); } return byteArray; } } //#ifndef DISABLE_LIBAV if (!path.isEmpty()) { AVFormatContext *pFormatCtx = avformat_alloc_context(); avformat_open_input(&pFormatCtx, path.toStdString().c_str(), nullptr, nullptr); QImage image; if (pFormatCtx) { if (pFormatCtx->iformat != nullptr && pFormatCtx->iformat->read_header(pFormatCtx) >= 0) { for (unsigned int i = 0; i < pFormatCtx->nb_streams; i++) { if (pFormatCtx->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC) { AVPacket pkt = pFormatCtx->streams[i]->attached_pic; image = QImage::fromData(static_cast(pkt.data), pkt.size); break; } } } } if (!image.isNull()) { QBuffer buffer(&byteArray); buffer.open(QIODevice::WriteOnly); image.save(&buffer, "jpg"); image = image.scaled(QSize(160, 160)); image.save(imagesDirPath + "/" + imageName); } else { image = QImage(":/common/image/cover_max.svg"); image = image.scaled(QSize(160, 160)); image.save(imagesDirPath + "/" + imageName); } avformat_close_input(&pFormatCtx); avformat_free_context(pFormatCtx); } //#endif // DISABLE_LIBAV return byteArray; } QVector MetaDetector::getMetaData(const QString &path) { QVector curData; if (path.isEmpty()) return curData; AVFormatContext *pFormatCtx = avformat_alloc_context(); avformat_open_input(&pFormatCtx, path.toStdString().c_str(), nullptr, nullptr); if (pFormatCtx == nullptr) return curData; avformat_find_stream_info(pFormatCtx, nullptr); int audio_stream_index = -1; audio_stream_index = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0); if (audio_stream_index < 0) return curData; AVStream *in_stream = pFormatCtx->streams[audio_stream_index]; AVCodecParameters *in_codecpar = in_stream->codecpar; AVCodecContext *pCodecCtx = avcodec_alloc_context3(nullptr); avcodec_parameters_to_context(pCodecCtx, in_codecpar); AVCodec *pCodec = avcodec_find_decoder(pCodecCtx->codec_id); avcodec_open2(pCodecCtx, pCodec, nullptr); AVPacket *packet = av_packet_alloc(); AVFrame *frame = av_frame_alloc(); while (av_read_frame(pFormatCtx, packet) >= 0) { if (packet->stream_index == audio_stream_index) { int state; state = avcodec_send_packet(pCodecCtx, packet); av_packet_unref(packet); if (state != 0) { continue; } state = avcodec_receive_frame(pCodecCtx, frame); if (state == 0) { quint8 *ptr = frame->extended_data[0]; if (path.endsWith(".ape") || path.endsWith(".APE")) { for (int i = 0; i < frame->linesize[0]; i++) { auto valDate = ((ptr[i]) << 16 | (ptr[i + 1])); curData.append(valDate + qrand()); } } else { for (int i = 0; i < frame->linesize[0]; i += 1024) { auto valDate = ((ptr[i]) << 16 | (ptr[i + 1])); curData.append(valDate); } } } } av_packet_unref(packet); } av_packet_unref(packet); av_frame_free(&frame); avcodec_close(pCodecCtx); avformat_close_input(&pFormatCtx); avformat_free_context(pFormatCtx); return curData; } deepin-music-6.0.1.54/src/libdmusic/metadetector.h000664 000000 000000 00000003024 13703317554 021711 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "util/singleton.h" #include class QFileInfo; class LIBDMUSICSHARED_EXPORT MetaDetector { public: static void init(); static QList detectEncodings(const MetaPtr meta); static QList detectEncodings(const QByteArray &rawData); static void updateCueFileTagCodec(MediaMeta *meta, const QFileInfo &, const QByteArray &codec); static void updateMediaFileTagCodec(MediaMeta *meta, const QByteArray &codec, bool forceEncode); static void updateMetaFromLocalfile(MediaMeta *meta, const QFileInfo &fileInfo); static QByteArray getCoverData(const QString &path, const QString &tmpPath, const QString &hash); static QVector getMetaData(const QString &path); }; deepin-music-6.0.1.54/src/libdmusic/musicmeta.h000664 000000 000000 00000003131 13703317554 021217 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once //#include //#include //#include //#include //#include //inline QString lengthString(qint64 length) //{ // length = length / 1000; // QTime t(static_cast(length / 3600), length % 3600 / 60, length % 60); // return t.toString("mm:ss"); //} //inline QString sizeString(qint64 sizeByte) //{ // QString text; // if (sizeByte < 1024) { // text.sprintf("%.1fB", sizeByte / 1.0); // return text; // } // if (sizeByte < 1024 * 1024) { // text.sprintf("%.1fK", sizeByte / 1024.0); // return text; // } // if (sizeByte < 1024 * 1024 * 1024) { // text.sprintf("%.1fM", sizeByte / 1024.0 / 1024.0); // return text; // } // text.sprintf("%.1fG", sizeByte / 1024.0 / 1024.0 / 1024.0); // return text; //} deepin-music-6.0.1.54/src/libdmusic/net/000775 000000 000000 00000000000 13703317554 017647 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/libdmusic/net/geese.cpp000664 000000 000000 00000006267 13703317554 021456 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "geese.h" #include #include #include #include #include namespace DMusic { namespace Net { Goose::Goose(Geese *geese) { m_geese = geese; } void Goose::get(const QUrl &url) { QNetworkRequest request(url); m_geese->prepare(request); auto reply = m_geese->get(request); reply->connect(reply, &QNetworkReply::finished, this, [ = ]() { Q_EMIT arrive(QNetworkReply::NoError, reply->readAll()); reply->deleteLater(); }); reply->connect(reply, static_cast(&QNetworkReply::error), reply, [ = ](QNetworkReply::NetworkError error) { qWarning() << "Goose: get" << reply->errorString(); Q_EMIT arrive(error, reply->readAll()); reply->deleteLater(); }); } void Goose::post(const QUrl &url, const QByteArray &data) { QNetworkRequest request(url); m_geese->prepare(request); auto reply = m_geese->post(request, data); connect(reply, &QNetworkReply::finished, this, [ = ]() { // QMimeDatabase mdb; // auto contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString(); // qDebug() << mdb.mimeTypeForName(contentType); Q_EMIT arrive(QNetworkReply::NoError, reply->readAll()); reply->deleteLater(); }); connect(reply, static_cast(&QNetworkReply::error), this, [ = ](QNetworkReply::NetworkError error) { qWarning() << "Goose: get" << reply->errorString(); Q_EMIT arrive(error, reply->readAll()); reply->deleteLater(); }); } class GeesePrivate { public: QMap rawHeader; }; Geese::Geese(QObject *parent): QNetworkAccessManager(parent), d(new GeesePrivate) { } Geese::~Geese() { } Goose *Geese::getGoose(QUrl url) { auto goose = new Goose(this); goose->get(url); return goose; } Goose *Geese::postGoose(const QUrl &url, const QByteArray &data) { auto goose = new Goose(this); goose->post(url, data); return goose; } void Geese::setRawHeader(const QByteArray &headerName, const QByteArray &value) { d->rawHeader.insert(headerName, value); } void Geese::prepare(QNetworkRequest &request) { for (auto &headerName : d->rawHeader.keys()) { request.setRawHeader(headerName, d->rawHeader.value(headerName)); } } } } deepin-music-6.0.1.54/src/libdmusic/net/geese.h000664 000000 000000 00000003371 13703317554 021114 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include "libdmusic_global.h" namespace DMusic { namespace Net { class Geese; class LIBDMUSICSHARED_EXPORT Goose : public QObject { Q_OBJECT public: explicit Goose(Geese *geese); void get(const QUrl &url); void post(const QUrl &url, const QByteArray &data); signals: void arrive(int errCode, const QByteArray &data); private: Geese *m_geese = nullptr; }; class GeesePrivate; class LIBDMUSICSHARED_EXPORT Geese : public QNetworkAccessManager { Q_OBJECT friend class Goose; public: explicit Geese(QObject *parent = nullptr); ~Geese(); Goose *getGoose(QUrl url); Goose *postGoose(const QUrl &url, const QByteArray &data); void setRawHeader(const QByteArray &headerName, const QByteArray &value); signals: public slots: private: void prepare(QNetworkRequest &request); Q_DISABLE_COPY(Geese) QScopedPointer d; }; } } deepin-music-6.0.1.54/src/libdmusic/playlistmeta.h000664 000000 000000 00000002556 13703317554 021752 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include "mediameta.h" class PlaylistMeta { public: QString uuid; QString displayName; QString icon; MetaPtr playing; QStringList sortMetas; QMap metas; QMap invalidMetas; int sortType = 0; int orderType = 0; uint sortID; bool editmode = false; bool readonly = false; bool hide = false; bool active = false; bool playStatus = false; }; Q_DECLARE_METATYPE(PlaylistMeta) deepin-music-6.0.1.54/src/libdmusic/util/000775 000000 000000 00000000000 13703317554 020036 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/libdmusic/util/basetool.cpp000775 000000 000000 00000023603 13703317554 022361 0ustar00rootroot000000 000000 #include "basetool.h" #include #include #include #include #include #include static float codecConfidenceForData(const QTextCodec *codec, const QByteArray &data, const QLocale::Country &country) { qreal hep_count = 0; int non_base_latin_count = 0; qreal unidentification_count = 0; int replacement_count = 0; QTextDecoder decoder(codec); const QString &unicode_data = decoder.toUnicode(data); for (int i = 0; i < unicode_data.size(); ++i) { const QChar &ch = unicode_data.at(i); if (ch.unicode() > 0x7f) ++non_base_latin_count; switch (ch.script()) { case QChar::Script_Hiragana: case QChar::Script_Katakana: hep_count += (country == QLocale::Japan) ? 1.2 : 0.5; unidentification_count += (country == QLocale::Japan) ? 0 : 0.3; break; case QChar::Script_Han: hep_count += (country == QLocale::China) ? 1.2 : 0.5; unidentification_count += (country == QLocale::China) ? 0 : 0.3; break; case QChar::Script_Hangul: hep_count += (country == QLocale::NorthKorea) || (country == QLocale::SouthKorea) ? 1.2 : 0.5; unidentification_count += (country == QLocale::NorthKorea) || (country == QLocale::SouthKorea) ? 0 : 0.3; break; case QChar::Script_Cyrillic: hep_count += (country == QLocale::Russia) ? 1.2 : 0.5; unidentification_count += (country == QLocale::Russia) ? 0 : 0.3; break; case QChar::Script_Devanagari: hep_count += (country == QLocale::Nepal || country == QLocale::India) ? 1.2 : 0.5; unidentification_count += (country == QLocale::Nepal || country == QLocale::India) ? 0 : 0.3; break; default: // full-width character, emoji, 常用标点, æ‹‰ä¸æ–‡è¡¥å……1,天城文补充,CJK符å·å’Œæ ‡ç‚¹ç¬¦å·ï¼ˆå¦‚:ã€ã€‘) if ((ch.unicode() >= 0xff00 && ch <= 0xffef) || (ch.unicode() >= 0x2600 && ch.unicode() <= 0x27ff) || (ch.unicode() >= 0x2000 && ch.unicode() <= 0x206f) || (ch.unicode() >= 0x80 && ch.unicode() <= 0xff) || (ch.unicode() >= 0xa8e0 && ch.unicode() <= 0xa8ff) || (ch.unicode() >= 0x0900 && ch.unicode() <= 0x097f) || (ch.unicode() >= 0x3000 && ch.unicode() <= 0x303f)) { ++hep_count; } else if (ch.isSurrogate() && ch.isHighSurrogate()) { ++i; if (i < unicode_data.size()) { const QChar &next_ch = unicode_data.at(i); if (!next_ch.isLowSurrogate()) { --i; break; } uint unicode = QChar::surrogateToUcs4(ch, next_ch); // emoji if (unicode >= 0x1f000 && unicode <= 0x1f6ff) { hep_count += 2; } } } else if (ch.unicode() == QChar::ReplacementCharacter) { ++replacement_count; } else if (ch.unicode() > 0x7f) { // 因为UTF-8ç¼–ç çš„容错性很低,所以未识别的编ç åªéœ€è¦åˆ¤æ–­æ˜¯å¦ä¸º QChar::ReplacementCharacter 就能排除 if (codec->name() != "UTF-8") ++unidentification_count; } break; } } float c = static_cast(qreal(hep_count) / non_base_latin_count / 1.2); c -= static_cast(qreal(replacement_count) / non_base_latin_count); c -= static_cast(qreal(unidentification_count) / non_base_latin_count); return qMax(0.0f, c); } QByteArray BaseTool::detectEncode(const QByteArray &data, const QString &fileName) { // Return local encoding if nothing in file. if (data.isEmpty()) { return QTextCodec::codecForLocale()->name(); } if (QTextCodec *c = QTextCodec::codecForUtfText(data, nullptr)) { return c->name(); } QMimeDatabase mime_database; const QMimeType &mime_type = fileName.isEmpty() ? mime_database.mimeTypeForData(data) : mime_database.mimeTypeForFileNameAndData(fileName, data); const QString &mimetype_name = mime_type.name(); KEncodingProber::ProberType proberType = KEncodingProber::Universal; if (mimetype_name == QStringLiteral("application/xml") || mimetype_name == QStringLiteral("text/html") || mimetype_name == QStringLiteral("application/xhtml+xml")) { const QString &_data = QString::fromLatin1(data); QRegularExpression pattern("<\\bmeta.+\\bcharset=(?'charset'\\S+?)\\s*['\"/>]"); pattern.setPatternOptions(QRegularExpression::DontCaptureOption | QRegularExpression::CaseInsensitiveOption); const QString &charset = pattern.match(_data, 0, QRegularExpression::PartialPreferFirstMatch, QRegularExpression::DontCheckSubjectStringMatchOption).captured("charset"); if (!charset.isEmpty()) { return charset.toLatin1(); } pattern.setPattern("<\\bmeta\\s+http-equiv=\"Content-Language\"\\s+content=\"(?'language'[a-zA-Z-]+)\""); const QString &language = pattern.match(_data, 0, QRegularExpression::PartialPreferFirstMatch, QRegularExpression::DontCheckSubjectStringMatchOption).captured("language"); if (!language.isEmpty()) { QLocale l(language); switch (l.script()) { case QLocale::ArabicScript: proberType = KEncodingProber::Arabic; break; case QLocale::SimplifiedChineseScript: proberType = KEncodingProber::ChineseSimplified; break; case QLocale::TraditionalChineseScript: proberType = KEncodingProber::ChineseTraditional; break; case QLocale::CyrillicScript: proberType = KEncodingProber::Cyrillic; break; case QLocale::GreekScript: proberType = KEncodingProber::Greek; break; case QLocale::HebrewScript: proberType = KEncodingProber::Hebrew; break; case QLocale::JapaneseScript: proberType = KEncodingProber::Japanese; break; case QLocale::KoreanScript: proberType = KEncodingProber::Korean; break; case QLocale::ThaiScript: proberType = KEncodingProber::Thai; break; default: break; } } } else if (mimetype_name == "text/x-python") { QRegularExpression pattern("^#coding\\s*:\\s*(?'coding'\\S+)$"); QTextStream stream(data); pattern.setPatternOptions(QRegularExpression::DontCaptureOption | QRegularExpression::CaseInsensitiveOption); stream.setCodec("latin1"); while (!stream.atEnd()) { const QString &_data = stream.readLine(); const QString &coding = pattern.match(_data, 0).captured("coding"); if (!coding.isEmpty()) { return coding.toLatin1(); } } } // for CJK const QList> fallback_list { {KEncodingProber::ChineseSimplified, QLocale::China}, {KEncodingProber::ChineseTraditional, QLocale::China}, {KEncodingProber::Japanese, QLocale::Japan}, {KEncodingProber::Korean, QLocale::NorthKorea}, {KEncodingProber::Cyrillic, QLocale::Russia}, {KEncodingProber::Greek, QLocale::Greece}, {proberType, QLocale::system().country()} }; KEncodingProber prober(proberType); prober.feed(data); float pre_confidence = prober.confidence(); QByteArray pre_encoding = prober.encoding(); QTextCodec *def_codec = QTextCodec::codecForLocale(); QByteArray encoding; float confidence = 0; for (auto i : fallback_list) { prober.setProberType(i.first); prober.feed(data); float prober_confidence = prober.confidence(); QByteArray prober_encoding = prober.encoding(); if (i.first != proberType && qFuzzyIsNull(prober_confidence)) { prober_confidence = pre_confidence; prober_encoding = pre_encoding; } confidence: if (QTextCodec *codec = QTextCodec::codecForName(prober_encoding)) { if (def_codec == codec) def_codec = nullptr; float c = codecConfidenceForData(codec, data, i.second); if (prober_confidence > 0.5f) { c = c / 2 + prober_confidence / 2; } else { c = c / 3 * 2 + prober_confidence / 3; } if (c > confidence) { confidence = c; encoding = prober_encoding; } if (i.first == KEncodingProber::ChineseTraditional && c < 0.5f) { // test Big5 c = codecConfidenceForData(QTextCodec::codecForName("Big5"), data, i.second); if (c > 0.5f && c > confidence) { confidence = c; encoding = "Big5"; } } } if (i.first != proberType) { // 使用 proberType ç±»åž‹æŽ¢æµ‹å‡ºçš„ç»“æžœç»“åˆæ­¤å›½å®¶å†æ¬¡åšç¼–ç æ£€æŸ¥ i.first = proberType; prober_confidence = pre_confidence; prober_encoding = pre_encoding; goto confidence; } } QString m_codecstr; if (def_codec && codecConfidenceForData(def_codec, data, QLocale::system().country()) > confidence) { m_codecstr = def_codec->name(); return def_codec->name(); } m_codecstr = encoding; return encoding; } deepin-music-6.0.1.54/src/libdmusic/util/basetool.h000775 000000 000000 00000000350 13703317554 022020 0ustar00rootroot000000 000000 #pragma once #include #include "libdmusic_global.h" class LIBDMUSICSHARED_EXPORT BaseTool { public: static QByteArray detectEncode(const QByteArray &data, const QString &fileName); private: BaseTool() {} }; deepin-music-6.0.1.54/src/libdmusic/util/cueparser.cpp000664 000000 000000 00000013372 13703317554 022541 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "cueparser.h" #include #include #include #include extern "C" { #include } #include "encodingdetector.h" namespace Libcue { void time_frame_to_msf(long frame, int *m, int *s, int *f) { *f = frame % 75; /* 0 <= frames <= 74 */ frame /= 75; *s = frame % 60; /* 0 <= seconds <= 59 */ frame /= 60; *m = static_cast(frame); /* 0 <= minutes */ } } qint64 timeframe2mtime(long frame) { int m, s, f; Libcue::time_frame_to_msf(frame, &m, &s, &f); auto a = m * 60 * 1000 + s * 1000 + f * 1000 / 75; return a; } #define CHECK_RETURN(msg, condition) do{ \ if (! (condition)) { \ qCritical() << (msg); \ return; \ } \ }while(0) namespace DMusic { class CueParserPrivate { public: CueParserPrivate(CueParser *parent) : q_ptr(parent) {} void parseCue(const QByteArray &data, QByteArray codeName); MetaPtrList metalist; QString mediaFilepath; QString cueFilepath; CueParser *q_ptr; Q_DECLARE_PUBLIC(CueParser) }; void CueParserPrivate::parseCue(const QByteArray &data, QByteArray codeName) { if (codeName.isEmpty()) { codeName = EncodingDetector::detectEncodings(data).value(0); } auto codec = QTextCodec::codecForName(codeName); if (!codec) { codec = QTextCodec::codecForLocale(); } Q_ASSERT(codec != nullptr); QString cue = codec->toUnicode(data.toStdString().c_str()); // WARNING: libcue need empty line at last cue.append("\r\n"); QString album; Cd *cd = cue_parse_string(cue.toStdString().c_str()); CHECK_RETURN("parse cue failed", nullptr != cd); Cdtext *cdtext = cd_get_cdtext(cd); CHECK_RETURN("error getting CDTEXT", cdtext != NULL); const char *val; val = cdtext_get(PTI_TITLE, cdtext); CHECK_RETURN("error getting CD title", val != NULL); album = val; int ival = cd_get_ntrack(cd); QMap fileMetaCache; QMap fileExist; QFileInfo cueFi(cueFilepath); for (int i = 0; i < ival; ++i) { auto meta = MetaPtr(new MediaMeta); meta->track = i + 1; Track *track; track = cd_get_track(cd, int(meta->track)); if (nullptr == track) { continue; } val = track_get_filename(track); if (nullptr == val) { continue; } meta->localPath = cueFi.path() + "/" + val; meta->cuePath = cueFilepath; if (!fileMetaCache.contains(meta->localPath)) { QFileInfo media(meta->localPath); // if (media.exists()) { auto mediaMeta = MediaMeta::fromLocalFile(media); fileMetaCache.insert(meta->localPath, mediaMeta); fileExist.insert(meta->localPath, media.exists()); // } } if (!fileExist.value(meta->localPath)) { continue; } auto trackPath = QString("%1.%2").arg(cueFilepath).arg(i + 1); auto hash = DMusic::filepathHash(trackPath); meta->hash = hash; // TODO: maybe multi mediaFilepath = meta->localPath; cdtext = track_get_cdtext(track); if (nullptr == cdtext) { continue; } val = cdtext_get(PTI_TITLE, cdtext); meta->title = val; val = cdtext_get(PTI_PERFORMER, cdtext); meta->artist = val; meta->album = album; meta->offset = timeframe2mtime(track_get_start(track)); meta->length = timeframe2mtime(track_get_length(track)); // TODO: hack track must < 1000 auto cueMediaMeta = fileMetaCache.value(meta->localPath); meta->timestamp = cueMediaMeta.timestamp + meta->track; meta->filetype = cueMediaMeta.filetype; meta->size = cueMediaMeta.size; meta->updateSearchIndex(); // TODO: fix last len if (meta->track == ival && meta->length <= 0) { auto total = cueMediaMeta.length; if (total > meta->offset) { meta->length = total - meta->offset; } } meta->filetype = cueMediaMeta.filetype; metalist << meta; } cd_delete(cd); } CueParser::CueParser(const QString &filepath) : CueParser(filepath, "") {} CueParser::CueParser(const QString &filepath, QByteArray codeName) : d_ptr(new CueParserPrivate(this)) { // TODO: check cue invalid Q_D(CueParser); QFile cueFile(filepath); if (!cueFile.open(QIODevice::ReadOnly)) { return; } QByteArray cueByte = cueFile.readAll(); cueFile.close(); d->cueFilepath = filepath; d->parseCue(cueByte, codeName); } CueParser::~CueParser() { } MetaPtrList CueParser::metalist() const { Q_D(const CueParser); return d->metalist; } QString CueParser::mediaFilepath() const { Q_D(const CueParser); return d->mediaFilepath; } QString CueParser::cueFilepath() const { Q_D(const CueParser); return d->cueFilepath; } } deepin-music-6.0.1.54/src/libdmusic/util/cueparser.h000664 000000 000000 00000002520 13703317554 022177 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "../mediameta.h" namespace DMusic { class CueParserPrivate; class LIBDMUSICSHARED_EXPORT CueParser { public: explicit CueParser(const QString &filepath); explicit CueParser(const QString &filepath, QByteArray codeName); ~CueParser(); MetaPtrList metalist() const; QString mediaFilepath() const; QString cueFilepath() const; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), CueParser) }; typedef QSharedPointer CueParserPtr; } deepin-music-6.0.1.54/src/libdmusic/util/encodingdetector.cpp000664 000000 000000 00000004351 13703317554 024065 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "encodingdetector.h" #include #include #include using namespace DMusic; QList EncodingDetector::detectEncodings(const QByteArray &rawData) { QList charsets; QByteArray charset = QTextCodec::codecForLocale()->name(); charsets << charset; const char *data = rawData.data(); int32_t len = rawData.size(); UCharsetDetector *csd; const UCharsetMatch **csm; int32_t matchCount = 0; UErrorCode status = U_ZERO_ERROR; csd = ucsdet_open(&status); if (status != U_ZERO_ERROR) { return charsets; } ucsdet_setText(csd, data, len, &status); if (status != U_ZERO_ERROR) { return charsets; } csm = ucsdet_detectAll(csd, &matchCount, &status); if (status != U_ZERO_ERROR) { return charsets; } if (matchCount > 0) { charsets.clear(); } // qDebug() << "match coding list" << charset; for (int32_t match = 0; match < matchCount; match += 1) { const char *name = ucsdet_getName(csm[match], &status); const char *lang = ucsdet_getLanguage(csm[match], &status); // int32_t confidence = ucsdet_getConfidence(csm[match], &status); if (lang == nullptr || strlen(lang) == 0) { lang = "**"; } // qDebug() << name << lang << confidence; charsets << name; } // qDebug() << "match coding list end"; ucsdet_close(csd); return charsets; } deepin-music-6.0.1.54/src/libdmusic/util/encodingdetector.h000664 000000 000000 00000001750 13703317554 023532 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "libdmusic_global.h" namespace DMusic { class LIBDMUSICSHARED_EXPORT EncodingDetector { public: static QList detectEncodings(const QByteArray& rawData); }; } deepin-music-6.0.1.54/src/libdmusic/util/pinyinsearch.cpp000664 000000 000000 00000004323 13703317554 023240 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "pinyinsearch.h" #include #include #include namespace DMusic { namespace PinyinSearch { inline bool isAlphabeta(const QChar &c) { QRegExp re("[A-Za-z]*"); return re.exactMatch(c); } inline bool isNumber(const QChar &c) { QRegExp re("[0-9]*"); return re.exactMatch(c); } bool isChinese(const QChar &c) { return c.unicode() <= 0x9FBF && c.unicode() >= 0x4E00; } inline QString toChinese(const QString &c) { QString pinyin = Dtk::Core::Chinese2Pinyin(c); if (pinyin.length() >= 2 && isNumber(pinyin.at(pinyin.length() - 1))) { return pinyin.left(pinyin.length() - 1); } return pinyin; } QStringList simpleChineseSplit(QString &pinyin) { QStringList wordList; bool isLastAlphabeta = false; for (auto &c : pinyin) { bool isCurAlphabeta = isAlphabeta(c); if (isCurAlphabeta) { if (!isLastAlphabeta) { wordList << c; } else { wordList.last().append(c); } continue; } isLastAlphabeta = isCurAlphabeta; // if (isNumber(c)) { // wordList << c; // continue; // } //除了中文外,其它字符ä¸ä½œç‰¹æ®Šå¤„ç† if (isChinese(c)) { wordList << toChinese(c); continue; } else { wordList << c; continue; } } return wordList; } } } deepin-music-6.0.1.54/src/libdmusic/util/pinyinsearch.h000664 000000 000000 00000001670 13703317554 022707 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include namespace DMusic { namespace PinyinSearch { bool isChinese(const QChar &c); QStringList simpleChineseSplit(QString &pinyin); } } deepin-music-6.0.1.54/src/libdmusic/util/singleton.h000664 000000 000000 00000002257 13703317554 022217 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include using namespace std; namespace DMusic { template class DSingleton { public: static inline T *instance() { static T* _instance = new T; return _instance; } protected: DSingleton(void) {} ~DSingleton(void) {} DSingleton(const DSingleton &) {} DSingleton &operator= (const DSingleton &) { return *this; } }; } deepin-music-6.0.1.54/src/music-player/000775 000000 000000 00000000000 13703317554 017520 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/build.pri000664 000000 000000 00000003544 13703317554 021341 0ustar00rootroot000000 000000 win32{ DEFINES += STATIC_LIB DEFINES += TAGLIB_STATIC INCLUDEPATH += $$PWD include($$PWD/../vendor/libcue/libcue.pri) LIBRARY_DIR=D:\Develop\Library\thrid DTK_INCLUDE = $${INCLUDE_INSTALL_DIR}\libdtk-1.0 DTK_DEPEND = $${INCLUDE_INSTALL_DIR}\libdtk-1.0 DTK_LIBRARY = $${LIB_INSTALL_DIR} #dtkwidget INCLUDEPATH += $$DTK_INCLUDE\DWidget DEPENDPATH += $$DTK_DEPEND\DWidget LIBS += -L$$DTK_LIBRARY -ldtkwidget #dtksettingsview INCLUDEPATH += $$DTK_INCLUDE\DSettingsView DEPENDPATH += $$DTK_DEPEND\DSettingsView LIBS += -L$$DTK_LIBRARY -ldtksettingsview #dtksettings INCLUDEPATH += $$DTK_INCLUDE\DSettings DEPENDPATH += $$DTK_DEPEND\DSettings LIBS += -L$$DTK_LIBRARY -ldtksettings # INCLUDEPATH += $$DTK_INCLUDE\DUtil DEPENDPATH += $$DTK_DEPEND\DUtil LIBS += -L$$DTK_LIBRARY -l # INCLUDEPATH += $$DTK_INCLUDE\DBase DEPENDPATH += $$DTK_DEPEND\DBase LIBS += -L$$DTK_LIBRARY -l #taglib INCLUDEPATH += $$INCLUDE_INSTALL_DIR LIBS += -L$$LIB_INSTALL_DIR -ltag -ltag_c -lzlibstatic # icu ICU_ROOT = $${LIBRARY_DIR}\icu INCLUDEPATH += $$ICU_ROOT\include LIBS += -L$$ICU_ROOT\lib -licuuc LIBS += -L$$ICU_ROOT\lib -licuin # ffmpeg FFMPEG_ROOT = $${LIBRARY_DIR}\ffmpeg-3.2.2-win32-dev INCLUDEPATH += $$FFMPEG_ROOT\include LIBS += -L$$FFMPEG_ROOT\lib -lavcodec LIBS += -L$$FFMPEG_ROOT\lib -lavformat LIBS += -L$$FFMPEG_ROOT\lib -lavutil } LIBS += -L$$BUILD_DIST/lib/ -ldmusic INCLUDEPATH += $$PWD/../libdmusic DEPENDPATH += $$PWD/../libdmusic LIBS += -L$$BUILD_DIST/lib/ -ldbusextended-qt5 INCLUDEPATH += $$PWD/../vendor/dbusextended-qt/src DEPENDPATH += $$PWD/../vendor/dbusextended-qt/src LIBS += -L$$BUILD_DIST/lib/ -lmpris-qt5 INCLUDEPATH += $$PWD/../vendor/mpris-qt/src DEPENDPATH += $$PWD/../vendor/mpris-qt/src deepin-music-6.0.1.54/src/music-player/config.qrc000664 000000 000000 00000000156 13703317554 021476 0ustar00rootroot000000 000000 data/deepin-music-settings.json deepin-music-6.0.1.54/src/music-player/core/000775 000000 000000 00000000000 13703317554 020450 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/core/AudioBufferDevice.cpp000664 000000 000000 00000005463 13703317554 024477 0ustar00rootroot000000 000000 #include "AudioBufferDevice.h" #include AudioBufferDevice::AudioBufferDevice(QAudioDecoder *decoder, QObject *parent): QIODevice(parent), _decoder(decoder), _isFinished(false) { connect(_decoder, SIGNAL(bufferReady()), this, SLOT(onBufferReady())); connect(_decoder, SIGNAL(finished()), this, SLOT(onFinished())); connect(_decoder, SIGNAL(error(QAudioDecoder::Error)), this, SLOT(onErroe(QAudioDecoder::Error))); } bool AudioBufferDevice::atEnd() const { return _isFinished && _queue.empty(); } qint64 AudioBufferDevice::readData(char *data, qint64 size) { if (position == _abuffer_queue.size() && position == 0 && _abuffer_queue.size() == 0) { Q_EMIT againMedia(); return 0; } if (position == _abuffer_queue.size()) { //qDebug() << "æ•°æ®å·²æ’­æ”¾å®Œæˆ"; Q_EMIT endOfMedia(); return 0; } if (_queue.empty() && _abuffer_queue.empty()) { return 0; } if (_queue.empty()) { //QAudioBuffer *buffer = _abuffer_queue.first(); QAudioBuffer *buffer = _abuffer_queue.at(static_cast(position)); qint32 *data = static_cast(buffer->data()); int len = buffer->sampleCount(); QByteArray retpcm; for (int i = 0; i < len; i += 1) { qint32 pcm = data[i]; retpcm.append((char *)&pcm, sizeof(pcm)); } auto qb = new QBuffer(); qb->setData(retpcm); _queue.push_back(qb); //_abuffer_queue.removeFirst(); //delete buffer; } QBuffer *buffer = _queue.first(); if (!buffer->isOpen()) { buffer->open(QIODevice::ReadOnly); } //qDebug() << "éŸ³ä¹æ’­æ”¾ä¸­....." << _abuffer_queue.size(); qint64 n = buffer->read(data, size); Q_EMIT positionChanged(position++); if (buffer->atEnd()) { _queue.removeFirst(); delete buffer; } return n; } qint64 AudioBufferDevice::writeData(const char *data, qint64 maxSize) { Q_UNUSED(data) Q_UNUSED(maxSize) return 0; } qint64 AudioBufferDevice::bytesAvailable() const { if (_queue.empty()) { return 0; } else { return _queue.first()->bytesAvailable(); } } void AudioBufferDevice::sliderReleased(qint64 value) { position = value; //qDebug() << value << "-" << _abuffer_queue.size(); } void AudioBufferDevice::onBufferReady() { QAudioBuffer buffer = _decoder->read(); _abuffer_queue.push_back(new QAudioBuffer(buffer)); Q_EMIT durationChanged(1); } void AudioBufferDevice::onFinished() { _isFinished = true; //Q_EMIT durationChanged(_abuffer_queue.size()); } void AudioBufferDevice::onErroe(QAudioDecoder::Error error) { qDebug() << error; } void AudioBufferDevice::clearQAbuffer() { position = 0; _queue.clear(); _abuffer_queue.clear(); } deepin-music-6.0.1.54/src/music-player/core/AudioBufferDevice.h000664 000000 000000 00000002067 13703317554 024141 0ustar00rootroot000000 000000 #ifndef AUDIOBUFFERDEVICE_H #define AUDIOBUFFERDEVICE_H #include #include #include #include #include #include class AudioBufferDevice : public QIODevice { Q_OBJECT public: explicit AudioBufferDevice(QAudioDecoder *decoder, QObject *parent = nullptr); virtual bool atEnd() const override; virtual qint64 bytesAvailable() const override; protected: virtual qint64 readData(char *data, qint64 size) override; virtual qint64 writeData(const char *data, qint64 maxSize) override; signals: void positionChanged(qint64 value); void durationChanged(qint64 value); void endOfMedia(); void againMedia(); public slots: void sliderReleased(qint64 value); void onBufferReady(); void onFinished(); void clearQAbuffer(); void onErroe(QAudioDecoder::Error error); private: QAudioDecoder *_decoder; QQueue _queue; QQueue _abuffer_queue; bool _isFinished; qint64 position = 0; }; #endif // AUDIOBUFFERDEVICE_H deepin-music-6.0.1.54/src/music-player/core/AudioPlayer.cpp000664 000000 000000 00000002052 13703317554 023371 0ustar00rootroot000000 000000 #include "AudioPlayer.h" AudioPlayer::AudioPlayer( QObject *parent) { Q_UNUSED(parent) format = new QAudioFormat(); format->setSampleRate(44100); format->setChannelCount(2); format->setCodec("audio/pcm"); format->setSampleSize(32); format->setByteOrder(QAudioFormat::LittleEndian); format->setSampleType(QAudioFormat::SignedInt); decoder = new QAudioDecoder(this); decoder->setAudioFormat(*format); qDebug() << "isvalide: " << format->isValid(); _output = new QAudioOutput(*format, this); _buffer = new AudioBufferDevice(decoder, this); _buffer->open(QIODevice::ReadOnly); } void AudioPlayer::play() { _output->start(_buffer); } void AudioPlayer::suspend() { // æš‚åœ _output->suspend(); } void AudioPlayer::reset() { // åœæ­¢ _output->reset(); } void AudioPlayer::setSourceFilename(const QString &fileName) { //qDebug() << "setSourceFilename" << fileName ; _buffer->clearQAbuffer(); decoder->stop(); decoder->setSourceFilename(fileName); decoder->start(); } deepin-music-6.0.1.54/src/music-player/core/AudioPlayer.h000664 000000 000000 00000001255 13703317554 023042 0ustar00rootroot000000 000000 #ifndef AUDIOPLAYER_H #define AUDIOPLAYER_H #include #include #include #include #include #include #include "AudioBufferDevice.h" #include class AudioPlayer : public QObject { Q_OBJECT public: explicit AudioPlayer(QObject *parent = nullptr); void setSourceFilename(const QString &fileName); void play(); void suspend(); void reset(); signals: public slots: public: QAudioFormat *format; QAudioDecoder *decoder; QAudioOutput *_output; //音频播放 AudioBufferDevice *_buffer; //éŸ³é¢‘è§£ç  }; #endif // AUDIOPLAYER_H deepin-music-6.0.1.54/src/music-player/core/mediadatabase.cpp000775 000000 000000 00000065550 13703317554 023736 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "mediadatabase.h" #include #include #include #include #include #include #include #include "util/global.h" #include "util/threadpool.h" #include "medialibrary.h" static bool createConnection() { QDir cacheDir(Global::cacheDir()); if (!cacheDir.exists()) { cacheDir.mkpath("."); } QString cachePath = Global::cacheDir() + "/mediameta.sqlite"; QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(cachePath); if (!db.open()) { qCritical() << db.lastError() << Global::cacheDir() << cachePath; return false; } QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS music (hash TEXT primary key not null, " "timestamp INTEGER," "title VARCHAR(256), artist VARCHAR(256), " "py_title VARCHAR(256), py_title_short VARCHAR(256), " "py_artist VARCHAR(256), py_artist_short VARCHAR(256), " "py_album VARCHAR(256), py_album_short VARCHAR(256), " "album VARCHAR(256), filetype VARCHAR(32), " "size INTEGER, track INTEGER, " "offset INTEGER, favourite INTEGER(32), " "localpath VARCHAR(4096), length INTEGER, " "search_id VARCHAR(256), " "invalid INTEGER(32), " "cuepath VARCHAR(4096) )" ); //Smooth transition query.exec("CREATE TABLE IF NOT EXISTS musicNew (hash TEXT primary key not null, " "timestamp INTEGER," "title VARCHAR(256), artist VARCHAR(256), " "py_title VARCHAR(256), py_title_short VARCHAR(256), " "py_artist VARCHAR(256), py_artist_short VARCHAR(256), " "py_album VARCHAR(256), py_album_short VARCHAR(256), " "album VARCHAR(256), filetype VARCHAR(32), " "size INTEGER, track INTEGER, " "offset INTEGER, favourite INTEGER(32), " "localpath VARCHAR(4096), length INTEGER, " "search_id VARCHAR(256), " "invalid INTEGER(32), " "lyricPath VARCHAR(4096), " "codec VARCHAR(35), " "cuepath VARCHAR(4096) )" ); query.exec("CREATE TABLE IF NOT EXISTS ablum (id int primary key, " "name VARCHAR(20), localpath VARCHAR(4096), url VARCHAR(4096))"); query.exec("CREATE TABLE IF NOT EXISTS artist (id int primary key, " "name VARCHAR(20))"); query.exec("CREATE TABLE IF NOT EXISTS playlist (uuid TEXT primary key not null, " "displayname VARCHAR(4096), " "icon VARCHAR(256), readonly INTEGER, " "hide INTEGER, sort_type INTEGER, " "sort_id INTEGER, " "order_type INTEGER )"); query.exec("CREATE TABLE IF NOT EXISTS info (uuid TEXT primary key not null, " "version INTEGER )"); return true; } static const QString DatabaseUUID = "0fcbd091-2356-161c-9026-f49779f9c71c40"; int databaseVersion() { QSqlQuery query; query.prepare("SELECT version FROM info where uuid = :uuid;"); query.bindValue(":uuid", DatabaseUUID); if (!query.exec()) { qWarning() << query.lastError(); return -1; } while (query.next()) { auto version = query.value(0).toInt(); return version; } return -1; } int updateDatabaseVersion(int version) { QSqlQuery query; query.prepare("INSERT INTO info (" "uuid, version " ") " "VALUES (" ":uuid, :version " ")"); query.bindValue(":version", version); query.bindValue(":uuid", DatabaseUUID); query.exec(); qWarning() << query.lastError(); query.prepare("UPDATE info SET version = :version where uuid = :uuid; "); query.bindValue(":version", version); query.bindValue(":uuid", DatabaseUUID); if (!query.exec()) { qWarning() << query.lastError(); return -1; } return version; } void megrateToVserion_0() { // FIXME: remove old QSqlDatabase::database().transaction(); QSqlQuery query; qWarning() << "sql upgrade with error:" << query.lastError().type(); query.prepare("ALTER TABLE music ADD COLUMN cuepath VARCHAR(4096);"); if (!query.exec()) { qWarning() << "sql upgrade with error:" << query.lastError().type(); } query.prepare("ALTER TABLE music ADD COLUMN invalid INTEGER(32);"); if (!query.exec()) { qWarning() << "sql upgrade with error:" << query.lastError().type(); } query.prepare("ALTER TABLE music ADD COLUMN search_id VARCHAR(256);"); if (!query.exec()) { qWarning() << "sql upgrade with error:" << query.lastError().type(); } query.prepare("ALTER TABLE playlist ADD COLUMN order_type INTEGER(32);"); if (!query.exec()) { qWarning() << "sql upgrade with error:" << query.lastError().type(); } query.prepare("ALTER TABLE playlist ADD COLUMN sort_type INTEGER(32);"); if (!query.exec()) { qWarning() << "sql upgrade with error:" << query.lastError().type(); } query.prepare("ALTER TABLE playlist ADD COLUMN sort_id INTEGER(32);"); if (!query.exec()) { qWarning() << "sql upgrade with error:" << query.lastError().type(); } QStringList list; query.prepare("SELECT uuid FROM playlist;"); if (!query.exec()) { qWarning() << "sql upgrade with error:" << query.lastError().type(); } while (query.next()) { list << query.value(0).toString(); } for (auto uuid : list) { auto sqlStr = QString("ALTER TABLE playlist_%1 ADD COLUMN sort_id INTEGER(32);").arg(uuid); query.prepare(sqlStr); if (!query.exec()) { qWarning() << "sql upgrade playlist with error:" << query.lastError().type(); } } updateDatabaseVersion(0); QSqlDatabase::database().commit(); } void megrateToVserion_1() { // FIXME: remove old QSqlDatabase::database().transaction(); QSqlQuery query; query.prepare("ALTER TABLE playlist ADD COLUMN sort_id INTEGER(32);"); if (!query.exec()) { qWarning() << "sql upgrade with error:" << query.lastError().type(); } updateDatabaseVersion(1); QSqlDatabase::database().commit(); } typedef void (*MargeFunctionn)(); void margeDatabase() { QMap margeFuncs; margeFuncs.insert(0, megrateToVserion_0); margeFuncs.insert(1, megrateToVserion_1); int currentVersion = databaseVersion(); QList sortVer = margeFuncs.keys(); qSort(sortVer.begin(), sortVer.end()); for (auto ver : sortVer) { if (ver > currentVersion) { margeFuncs.value(ver)(); } } } MediaDatabase::MediaDatabase(QObject *parent) : QObject(parent) { } void MediaDatabase::init() { createConnection(); margeDatabase(); // sqlite must run in one thread!!! m_writer = new MediaDatabaseWriter; ThreadPool::instance()->moveToNewThread(m_writer);//将读写耗时æ“作放到å­çº¿ç¨‹æ“作 connect(this, &MediaDatabase::initWrter, m_writer, &MediaDatabaseWriter::initDataBase); Q_EMIT initWrter(); bind(); QSqlDatabase::database().transaction(); PlaylistMeta playlistMeta; playlistMeta.uuid = "album"; playlistMeta.displayName = "Album"; playlistMeta.icon = "album"; playlistMeta.readonly = true; playlistMeta.hide = false; playlistMeta.sortID = 1; if (!playlistExist("album")) { addPlaylist(playlistMeta); } playlistMeta.uuid = "artist"; playlistMeta.displayName = "Artist"; playlistMeta.icon = "artist"; playlistMeta.readonly = true; playlistMeta.hide = false; playlistMeta.sortID = 2; if (!playlistExist("artist")) { addPlaylist(playlistMeta); } playlistMeta.uuid = "all"; playlistMeta.displayName = "All Music"; playlistMeta.icon = "all"; playlistMeta.readonly = true; playlistMeta.hide = false; playlistMeta.sortID = 3; if (!playlistExist("all")) { addPlaylist(playlistMeta); } playlistMeta.displayName = "My favorites"; playlistMeta.uuid = "fav"; playlistMeta.icon = "fav"; playlistMeta.readonly = true; playlistMeta.hide = false; playlistMeta.sortID = 4; if (!playlistExist("fav")) { addPlaylist(playlistMeta); } playlistMeta.displayName = "Playlist"; playlistMeta.uuid = "play"; playlistMeta.icon = "play"; playlistMeta.readonly = true; playlistMeta.hide = true; playlistMeta.sortID = 5; if (!playlistExist("play")) { addPlaylist(playlistMeta); } playlistMeta.displayName = "Search result"; playlistMeta.uuid = "search"; playlistMeta.icon = "search"; playlistMeta.readonly = true; playlistMeta.hide = true; playlistMeta.sortID = 0; if (!playlistExist("search")) { addPlaylist(playlistMeta); } playlistMeta.displayName = "Music"; playlistMeta.uuid = "musicCand"; playlistMeta.icon = "musicCand"; playlistMeta.readonly = true; playlistMeta.hide = true; playlistMeta.sortID = 0; if (!playlistExist("musicCand")) { addPlaylist(playlistMeta); } playlistMeta.displayName = "Album"; playlistMeta.uuid = "albumCand"; playlistMeta.icon = "albumCand"; playlistMeta.readonly = true; playlistMeta.hide = true; playlistMeta.sortID = 0; if (!playlistExist("albumCand")) { addPlaylist(playlistMeta); } playlistMeta.displayName = "Artist"; playlistMeta.uuid = "artistCand"; playlistMeta.icon = "artistCand"; playlistMeta.readonly = true; playlistMeta.hide = true; playlistMeta.sortID = 0; if (!playlistExist("artistCand")) { addPlaylist(playlistMeta); } playlistMeta.displayName = "Music"; playlistMeta.uuid = "musicResult"; playlistMeta.icon = "musicResult"; playlistMeta.readonly = true; playlistMeta.hide = true; playlistMeta.sortID = 0; if (!playlistExist("musicResult")) { addPlaylist(playlistMeta); } playlistMeta.displayName = "Album"; playlistMeta.uuid = "albumResult"; playlistMeta.icon = "albumResult"; playlistMeta.readonly = true; playlistMeta.hide = true; playlistMeta.sortID = 0; if (!playlistExist("albumResult")) { addPlaylist(playlistMeta); } playlistMeta.displayName = "Artist"; playlistMeta.uuid = "artistResult"; playlistMeta.icon = "artistResult"; playlistMeta.readonly = true; playlistMeta.hide = true; playlistMeta.sortID = 0; if (!playlistExist("artistResult")) { addPlaylist(playlistMeta); } QSqlDatabase::database().commit(); } QStringList MediaDatabase::allPlaylistDisplayName() { QStringList list; QSqlQuery query; query.prepare("SELECT displayname FROM playlist"); if (!query.exec()) { qWarning() << query.lastError(); return list; } while (query.next()) { list << query.value(0).toString(); } return list; } QList MediaDatabase::allPlaylistMeta() { QList list; QSqlQuery query; query.prepare("SELECT uuid, displayname, icon, readonly, hide, " "sort_type, order_type, sort_id FROM playlist"); if (!query.exec()) { qWarning() << query.lastError(); return list; } while (query.next()) { PlaylistMeta playlistMeta; playlistMeta.uuid = query.value(0).toString(); playlistMeta.displayName = query.value(1).toString(); playlistMeta.icon = query.value(2).toString(); playlistMeta.readonly = query.value(3).toBool(); playlistMeta.hide = query.value(4).toBool(); playlistMeta.sortType = query.value(5).toInt(); playlistMeta.orderType = query.value(6).toInt(); playlistMeta.sortID = query.value(7).toUInt(); list << playlistMeta; } return list; } static MetaPtrList searchTitle(const QString &queryString) { MetaPtrList metalist; QSqlQuery query; query.prepare(queryString); if (! query.exec()) { qCritical() << query.lastError(); return metalist; } while (query.next()) { auto hash = query.value(0).toString(); auto meta = MediaLibrary::instance()->meta(hash); if (meta.isNull()) { continue; } metalist << meta; } return metalist; } MetaPtrList MediaDatabase::searchMediaTitle(const QString &title, int limit) { qDebug() << "search title" << title; auto matchReg = QString("\"%%1%\" ").arg(title); QString queryString = QString("SELECT hash, localpath, title, artist, album, " "filetype, track, offset, length, size, " "timestamp, invalid " "FROM music WHERE " "title LIKE " + matchReg + "OR py_title LIKE " + matchReg + "OR py_title_short LIKE " + matchReg + "LIMIT " + QString("%1").arg(limit)); return searchTitle(queryString); } MetaPtrList MediaDatabase::searchMediaMeta(const QString &title, int limit) { auto matchReg = QString("\"%%1%\" ").arg(title); QString queryString = QString("SELECT hash, localpath, title, artist, album, " "filetype, track, offset, length, size, " "timestamp, invalid " "FROM music WHERE " "title LIKE " + matchReg + "OR py_title LIKE " + matchReg + "OR py_title_short LIKE " + matchReg + "OR py_artist LIKE " + matchReg + "OR py_artist_short LIKE " + matchReg + "OR py_album LIKE " + matchReg + "OR py_album_short LIKE " + matchReg + "OR artist LIKE " + matchReg + "OR album LIKE " + matchReg + "LIMIT " + QString("%1").arg(limit)); return searchTitle(queryString); } MetaPtrList MediaDatabase::searchMediaPath(const QString &path, int limit) { auto matchReg = QString("\"%%1%\" ").arg(path); QString queryString = QString("SELECT hash, localpath, title, artist, album, " "filetype, track, offset, length, size, timestamp " "FROM music WHERE " "localpath LIKE " + matchReg + "OR cuepath LIKE " + matchReg + "LIMIT " + QString("%1").arg(limit)); return searchTitle(queryString); } void MediaDatabase::addPlaylist(const PlaylistMeta &playlistMeta) { QSqlQuery query; query.prepare("INSERT INTO playlist (" "uuid, displayname, icon, readonly, hide, " "sort_type, order_type, sort_id " ") " "VALUES (" ":uuid, :displayname, :icon, :readonly, :hide, " ":sort_type, :order_type, :sort_id " ")"); query.bindValue(":uuid", playlistMeta.uuid); query.bindValue(":displayname", playlistMeta.displayName); query.bindValue(":icon", playlistMeta.icon); query.bindValue(":readonly", playlistMeta.readonly); query.bindValue(":hide", playlistMeta.hide); query.bindValue(":sort_type", playlistMeta.sortType); query.bindValue(":order_type", playlistMeta.orderType); query.bindValue(":sort_id", playlistMeta.sortID); if (! query.exec()) { qWarning() << query.lastError(); return; } QString sqlstring = QString("CREATE TABLE IF NOT EXISTS playlist_%1 (" "music_id TEXT primary key not null, " "playlist_id TEXT, sort_id INTEGER" ")").arg(playlistMeta.uuid); if (! query.exec(sqlstring)) { qWarning() << query.lastError(); return; } } void MediaDatabase::updatePlaylist(const PlaylistMeta &playlistMeta) { QSqlQuery query; query.prepare("UPDATE playlist " "SET displayname = :displayname, icon = :icon, " "readonly = :readonly, hide = :hide, " "order_type = :order_type, " "sort_type = :sort_type " "WHERE uuid = :uuid;"); query.bindValue(":uuid", playlistMeta.uuid); query.bindValue(":displayname", playlistMeta.displayName); query.bindValue(":icon", playlistMeta.icon); query.bindValue(":readonly", playlistMeta.readonly); query.bindValue(":hide", playlistMeta.hide); query.bindValue(":order_type", playlistMeta.orderType); query.bindValue(":sort_type", playlistMeta.sortType); if (! query.exec()) { qWarning() << query.lastError(); return; } } void MediaDatabase::removePlaylist(const PlaylistMeta &playlistMeta) { QSqlQuery query; QString sqlstring = QString("DROP TABLE IF EXISTS playlist_%1").arg(playlistMeta.uuid); if (! query.exec(sqlstring)) { qWarning() << query.lastError(); return; } sqlstring = QString("DELETE FROM playlist WHERE uuid = '%1'").arg(playlistMeta.uuid); if (! query.exec(sqlstring)) { qWarning() << query.lastError(); return; } } void MediaDatabase::deleteMusic(const MetaPtr meta, const PlaylistMeta &playlistMeta) { if (meta.isNull()) { return; } QSqlQuery query; QString sqlstring = QString("DELETE FROM playlist_%1 WHERE music_id = '%2'") .arg(playlistMeta.uuid).arg(meta->hash); if (! query.exec(sqlstring)) { qWarning() << query.lastError(); return; } } bool MediaDatabase::playlistExist(const QString &uuid) { QSqlQuery query; query.prepare("SELECT COUNT(*) FROM playlist where uuid = :uuid"); query.bindValue(":uuid", uuid); if (!query.exec()) { qWarning() << query.lastError(); return false; } query.first(); return query.value(0).toInt() > 0; } bool MediaDatabase::mediaMetaExist(const QString &hash) { QSqlQuery query; query.prepare("SELECT COUNT(*) FROM music where hash = :hash"); query.bindValue(":hash", hash); if (!query.exec()) { qWarning() << query.lastError(); return false; } query.first(); return query.value(0).toInt() > 0; } QList MediaDatabase::allmetas() { QList metalist; QString queryString = QString("SELECT hash, localpath, title, artist, album, " "filetype, track, offset, length, size, " "timestamp, invalid, search_id, cuepath " "FROM music"); QSqlQuery query; query.prepare(queryString); if (! query.exec()) { qCritical() << query.lastError(); return metalist; } while (query.next()) { MediaMeta meta; meta.hash = query.value(0).toString(); meta.localPath = query.value(1).toString(); meta.title = query.value(2).toString(); meta.artist = query.value(3).toString(); meta.album = query.value(4).toString(); meta.filetype = query.value(5).toString(); meta.track = query.value(6).toLongLong(); meta.offset = query.value(7).toLongLong(); meta.length = query.value(8).toLongLong(); meta.size = query.value(9).toLongLong(); meta.timestamp = query.value(10).toLongLong(); meta.invalid = query.value(11).toBool(); meta.searchID = query.value(12).toString(); meta.cuePath = query.value(13).toString(); /*----------INSERT INTO musicNew------------*/ QSqlQuery querys; querys.prepare("INSERT INTO musicNew (" "hash, timestamp, title, artist, album, " "filetype, size, track, offset, favourite, localpath, length, " "py_title, py_title_short, py_artist, py_artist_short, " "py_album, py_album_short, lyricPath, codec, cuepath " ") " "VALUES (" ":hash, :timestamp, :title, :artist, :album, " ":filetype, :size, :track, :offset, :favourite, :localpath, :length, " ":py_title, :py_title_short, :py_artist, :py_artist_short, " ":py_album, :py_album_short, :lyricPath, :codec, :cuepath " ")"); QString uuid = QUuid::createUuid().toString().remove('{').remove('}').remove('-'); qDebug() << "uuid : " << uuid << endl; querys.bindValue(":hash", meta.hash); querys.bindValue(":timestamp", meta.timestamp); querys.bindValue(":title", meta.title); querys.bindValue(":artist", meta.artist); querys.bindValue(":album", meta.album); querys.bindValue(":filetype", meta.filetype); querys.bindValue(":size", meta.size); querys.bindValue(":track", meta.track); querys.bindValue(":offset", meta.offset); querys.bindValue(":favourite", meta.favourite); querys.bindValue(":localpath", meta.localPath); querys.bindValue(":length", meta.length); querys.bindValue(":py_title", meta.pinyinTitle); querys.bindValue(":py_title_short", meta.pinyinTitleShort); querys.bindValue(":py_artist", meta.pinyinArtist); querys.bindValue(":py_artist_short", meta.pinyinArtistShort); querys.bindValue(":py_album", meta.pinyinAlbum); querys.bindValue(":py_album_short", meta.pinyinAlbumShort); querys.bindValue(":lyricPath", meta.lyricPath); querys.bindValue(":codec", meta.codec); querys.bindValue(":cuepath", meta.cuePath); /*-------------querys.exec----------------*/ if (! querys.exec()) { qCritical() << querys.lastError(); QString queryStringNew = QString("SELECT hash, localpath, title, artist, album, " "filetype, track, offset, length, size, " "timestamp, invalid, search_id, cuepath, " "lyricPath, codec " "FROM musicNew"); QSqlQuery queryNew; queryNew.prepare(queryStringNew); if (! queryNew.exec()) { qCritical() << queryNew.lastError(); return metalist; } while (queryNew.next()) { MediaMeta meta; meta.hash = queryNew.value(0).toString(); meta.localPath = queryNew.value(1).toString(); meta.title = queryNew.value(2).toString(); meta.artist = queryNew.value(3).toString(); meta.album = queryNew.value(4).toString(); meta.filetype = queryNew.value(5).toString(); meta.track = queryNew.value(6).toLongLong(); meta.offset = queryNew.value(7).toLongLong(); meta.length = queryNew.value(8).toLongLong(); meta.size = queryNew.value(9).toLongLong(); meta.timestamp = queryNew.value(10).toLongLong(); meta.invalid = queryNew.value(11).toBool(); meta.searchID = queryNew.value(12).toString(); meta.cuePath = queryNew.value(13).toString(); meta.lyricPath = queryNew.value(14).toString(); meta.codec = queryNew.value(15).toString(); metalist << meta; } } } QString queryStringNew = QString("SELECT hash, localpath, title, artist, album, " "filetype, track, offset, length, size, " "timestamp, invalid, search_id, cuepath, " "lyricPath, codec " "FROM musicNew"); QSqlQuery queryNew; queryNew.prepare(queryStringNew); if (! queryNew.exec()) { qCritical() << queryNew.lastError(); return metalist; } while (queryNew.next()) { MediaMeta meta; meta.hash = queryNew.value(0).toString(); meta.localPath = queryNew.value(1).toString(); meta.title = queryNew.value(2).toString(); meta.artist = queryNew.value(3).toString(); meta.album = queryNew.value(4).toString(); meta.filetype = queryNew.value(5).toString(); meta.track = queryNew.value(6).toLongLong(); meta.offset = queryNew.value(7).toLongLong(); meta.length = queryNew.value(8).toLongLong(); meta.size = queryNew.value(9).toLongLong(); meta.timestamp = queryNew.value(10).toLongLong(); meta.invalid = queryNew.value(11).toBool(); meta.searchID = queryNew.value(12).toString(); meta.cuePath = queryNew.value(13).toString(); meta.lyricPath = queryNew.value(14).toString(); meta.codec = queryNew.value(15).toString(); metalist << meta; } return metalist; } void MediaDatabase::bind() { connect(this, &MediaDatabase::addMediaMeta, m_writer, &MediaDatabaseWriter::addMediaMeta, Qt::UniqueConnection); connect(this, &MediaDatabase::addMediaMetaList, m_writer, &MediaDatabaseWriter::addMediaMetaList, Qt::UniqueConnection); connect(this, &MediaDatabase::updateMediaMeta, m_writer, &MediaDatabaseWriter::updateMediaMeta, Qt::UniqueConnection); connect(this, &MediaDatabase::updateMediaMetaList, m_writer, &MediaDatabaseWriter::updateMediaMetaList, Qt::UniqueConnection); connect(this, &MediaDatabase::insertMusic, m_writer, &MediaDatabaseWriter::insertMusic, Qt::UniqueConnection); connect(this, &MediaDatabase::insertMusicList, m_writer, &MediaDatabaseWriter::insertMusicList, Qt::UniqueConnection); connect(this, &MediaDatabase::removeMediaMetaList, m_writer, &MediaDatabaseWriter::removeMediaMetaList, Qt::UniqueConnection); } deepin-music-6.0.1.54/src/music-player/core/mediadatabase.h000664 000000 000000 00000004624 13703317554 023373 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include "mediadatabasewriter.h" class MediaDatabase : public QObject, public DMusic::DSingleton { Q_OBJECT public: explicit MediaDatabase(QObject *parent = nullptr); void init(); //! music meta query interface bool mediaMetaExist(const QString &hash); QList allmetas(); static MetaPtrList searchMediaTitle(const QString &title, int limit); static MetaPtrList searchMediaMeta(const QString &title, int limit); static MetaPtrList searchMediaPath(const QString &title, int limit); //! sync query interface static QStringList allPlaylistDisplayName(); QList allPlaylistMeta(); bool playlistExist(const QString &uuid); signals: void initWrter(); void addMediaMeta(const MetaPtr meta); void addMediaMetaList(const MetaPtrList metalist); void updateMediaMeta(const MetaPtr meta); void updateMediaMetaList(const MetaPtrList metalist); void insertMusic(const MetaPtr meta, const PlaylistMeta &playlistMeta); void insertMusicList(const MetaPtrList metalist, const PlaylistMeta &playlistMeta); void removeMediaMetaList(const MetaPtrList metalist); public slots: static void addPlaylist(const PlaylistMeta &playlistMeta); static void updatePlaylist(const PlaylistMeta &playlistMeta); static void removePlaylist(const PlaylistMeta &playlistMeta); static void deleteMusic(const MetaPtr meta, const PlaylistMeta &playlistMeta); private: void bind(); friend class DMusic::DSingleton; MediaDatabaseWriter *m_writer; }; deepin-music-6.0.1.54/src/music-player/core/mediadatabasewriter.cpp000664 000000 000000 00000016603 13703317554 025163 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "mediadatabasewriter.h" #include #include #include #include #include #include #include #include "util/global.h" #include bool MediaDatabaseWriter::createConnection() { QDir cacheDir(Global::cacheDir()); if (!cacheDir.exists()) { cacheDir.mkpath("."); } QString cachePath = Global::cacheDir() + "/mediameta.sqlite"; db = QSqlDatabase::addDatabase("QSQLITE", "writer"); db.setDatabaseName(cachePath); if (!db.open()) { qCritical() << db.lastError() << Global::cacheDir() << cachePath; return false; } return true; } void MediaDatabaseWriter::initDataBase() { createConnection(); } MediaDatabaseWriter::MediaDatabaseWriter(QObject *parent) : QObject(parent) { } void MediaDatabaseWriter::addMediaMetaList(const MetaPtrList metalist) { QSqlDatabase::database().transaction(); for (auto &meta : metalist) { QThread::msleep(1); addMediaMeta(meta); } db.commit(); } void MediaDatabaseWriter::updateMediaMeta(const MetaPtr meta) { qDebug() << "updateMediaMeta begin"; QSqlQuery query(QSqlDatabase::database("writer")); query.prepare("UPDATE musicNew set " "invalid=:invalid, length=:length, search_id=:search_id, " "title=:title, artist=:artist, album=:album, " "py_title=:py_title, py_title_short=:py_title_short, py_artist=:py_artist, " "py_artist_short=:py_artist_short, py_album=:py_album, py_album_short=:py_album_short, " "lyricPath=:lyricPath, codec=:codec " "where hash=:hash"); query.bindValue(":search_id", meta->searchID); query.bindValue(":invalid", meta->invalid); query.bindValue(":length", meta->length); query.bindValue(":title", meta->title); query.bindValue(":artist", meta->artist); query.bindValue(":album", meta->album); query.bindValue(":py_title", meta->pinyinTitle); query.bindValue(":py_title_short", meta->pinyinTitleShort); query.bindValue(":py_artist", meta->pinyinArtist); query.bindValue(":py_artist_short", meta->pinyinArtistShort); query.bindValue(":py_album", meta->pinyinAlbum); query.bindValue(":py_album_short", meta->pinyinAlbumShort); query.bindValue(":lyricPath", meta->lyricPath); query.bindValue(":codec", meta->codec); query.bindValue(":hash", meta->hash); if (! query.exec()) { qCritical() << query.lastError(); return; } qDebug() << "updateMediaMeta end"; } void MediaDatabaseWriter::updateMediaMetaList(const MetaPtrList metalist) { QSqlDatabase::database().transaction(); for (auto &meta : metalist) { QThread::msleep(1); updateMediaMeta(meta); } QSqlDatabase::database().commit(); } void MediaDatabaseWriter::removeMediaMeta(const MetaPtr meta) { QSqlQuery query(QSqlDatabase::database("writer")); QString sqlstring; sqlstring = QString("DELETE FROM musicNew WHERE hash = '%1'").arg(meta->hash); if (! query.exec(sqlstring)) { qWarning() << query.lastError(); return; } } void MediaDatabaseWriter::removeMediaMetaList(const MetaPtrList metalist) { QSqlDatabase::database().transaction(); for (auto &meta : metalist) { QThread::msleep(1); removeMediaMeta(meta); } db.commit(); } void MediaDatabaseWriter::addMediaMeta(const MetaPtr meta) { QSqlQuery query(QSqlDatabase::database("writer")); query.prepare("INSERT INTO musicNew (" "hash, timestamp, title, artist, album, " "filetype, size, track, offset, favourite, localpath, length, " "py_title, py_title_short, py_artist, py_artist_short, " "py_album, py_album_short, lyricPath, codec, cuepath " ") " "VALUES (" ":hash, :timestamp, :title, :artist, :album, " ":filetype, :size, :track, :offset, :favourite, :localpath, :length, " ":py_title, :py_title_short, :py_artist, :py_artist_short, " ":py_album, :py_album_short, :lyricPath, :codec, :cuepath " ")"); query.bindValue(":hash", meta->hash); query.bindValue(":timestamp", meta->timestamp); query.bindValue(":title", meta->title); query.bindValue(":artist", meta->artist); query.bindValue(":album", meta->album); query.bindValue(":filetype", meta->filetype); query.bindValue(":size", meta->size); query.bindValue(":track", meta->track); query.bindValue(":offset", meta->offset); query.bindValue(":favourite", meta->favourite); query.bindValue(":localpath", meta->localPath); query.bindValue(":length", meta->length); query.bindValue(":py_title", meta->pinyinTitle); query.bindValue(":py_title_short", meta->pinyinTitleShort); query.bindValue(":py_artist", meta->pinyinArtist); query.bindValue(":py_artist_short", meta->pinyinArtistShort); query.bindValue(":py_album", meta->pinyinAlbum); query.bindValue(":py_album_short", meta->pinyinAlbumShort); query.bindValue(":lyricPath", meta->lyricPath); query.bindValue(":codec", meta->codec); query.bindValue(":cuepath", meta->cuePath); if (! query.exec()) { qCritical() << query.lastError(); return; } } void MediaDatabaseWriter::insertMusic(const MetaPtr meta, const PlaylistMeta &playlistMeta) { // qDebug() << "insertMusic begin"; QSqlQuery query(QSqlDatabase::database("writer")); QString sqlstring = QString("INSERT INTO playlist_%1 " "(music_id, playlist_id, sort_id) " "SELECT :music_id, :playlist_id, :sort_id " "WHERE NOT EXISTS(" "SELECT * FROM playlist_%1 " "WHERE music_id = :music_id)").arg(playlistMeta.uuid); query.prepare(sqlstring); query.bindValue(":playlist_id", playlistMeta.uuid); query.bindValue(":music_id", meta->hash); query.bindValue(":sort_id", 0); if (! query.exec()) { qCritical() << query.lastError() << sqlstring; return; } // qDebug() << "insertMusic end"; } void MediaDatabaseWriter::insertMusicList(const MetaPtrList metalist, const PlaylistMeta &playlistMeta) { // qDebug() << "insertMusicList begin"; QSqlDatabase::database().transaction(); for (auto &meta : metalist) { QThread::msleep(1); insertMusic(meta, playlistMeta); } db.commit(); // qDebug() << "insertMusicList end"; } deepin-music-6.0.1.54/src/music-player/core/mediadatabasewriter.h000664 000000 000000 00000003070 13703317554 024622 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include class MediaDatabaseWriter : public QObject { Q_OBJECT public: explicit MediaDatabaseWriter(QObject *parent = nullptr); QSqlDatabase db; private: bool createConnection(); public slots: void initDataBase(); void addMediaMeta(const MetaPtr meta); void addMediaMetaList(const MetaPtrList metalist); void updateMediaMeta(const MetaPtr meta); void updateMediaMetaList(const MetaPtrList metalist); void removeMediaMeta(const MetaPtr meta); void removeMediaMetaList(const MetaPtrList metalist); void insertMusic(const MetaPtr meta, const PlaylistMeta &playlistMeta); void insertMusicList(const MetaPtrList metalist, const PlaylistMeta &playlistMeta); }; deepin-music-6.0.1.54/src/music-player/core/medialibrary.cpp000664 000000 000000 00000031370 13703317554 023624 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "medialibrary.h" #include #include #include //#ifndef DISABLE_LIBAV #ifdef __cplusplus extern "C" { #endif // __cplusplus #include #include #ifdef __cplusplus } #endif // __cplusplus //#endif // DISABLE_LIBAV #include #include #include #ifdef SUPPORT_INOTIFY #include "util/inotifyengine.h" #endif #include "player.h" #include "mediadatabase.h" const static int ScanCacheSize = 5000; class MediaLibraryPrivate { public: MediaLibraryPrivate(MediaLibrary *parent) : q_ptr(parent) { losslessSuffixs.insert("flac", true); losslessSuffixs.insert("ape", true); losslessSuffixs.insert("wav", true); auto suffixList = Player::instance()->supportedSuffixList(); for (auto suffix : suffixList) { supportedSuffixs.insert(suffix, true); } #ifdef SUPPORT_INOTIFY watcher = new InotifyEngine; #endif } MetaPtr createMeta(const QFileInfo &fileInfo); MetaPtr importMeta(const QString &filepath, QMap &losslessMetaCache, QList &cuelist); void startMonitor() { auto metalist = MediaDatabase::instance()->allmetas(); QMap dirs; for (auto &meta : metalist) { QFileInfo metafi(meta.localPath); metas.insert(meta.hash, MetaPtr(new MediaMeta(meta))); dirs.insert(metafi.absolutePath(), metafi.absolutePath()); } #ifdef SUPPORT_INOTIFY watcher->addPaths(dirs.keys()); #endif // for (auto meta : metas) { // qDebug() << meta->title; // } } private: QHash losslessSuffixs; QHash supportedSuffixs; QMap metas; #ifdef SUPPORT_INOTIFY InotifyEngine *watcher; #endif MediaLibrary *q_ptr; Q_DECLARE_PUBLIC(MediaLibrary) }; MetaPtr MediaLibraryPrivate::createMeta(const QFileInfo &fileinfo) { auto hash = DMusic::filepathHash(fileinfo.absoluteFilePath()); if (metas.contains(hash)) { return metas.value(hash); } auto meta = MetaPtr(new MediaMeta); meta->hash = hash; MetaDetector::updateMetaFromLocalfile(meta.data(), fileinfo); return meta; } MetaPtr MediaLibraryPrivate::importMeta(const QString &filepath, QMap &losslessMetaCache, QList &cuelist) { QFileInfo fileInfo(filepath); auto suffix = QString("*.%1").arg(fileInfo.suffix()).toLower(); if (!supportedSuffixs.contains(suffix)) { qWarning() << "skip" << suffix << filepath << supportedSuffixs; return MetaPtr(); } if ( fileInfo.suffix().toLower() != "wav" && fileInfo.suffix().toLower() != "mp3" && fileInfo.suffix().toLower() != "ogg" && fileInfo.suffix().toLower() != "vorbis" && fileInfo.suffix().toLower() != "flac" && fileInfo.suffix().toLower() != "wma" && fileInfo.suffix().toLower() != "m4a" && fileInfo.suffix().toLower() != "aac" && fileInfo.suffix().toLower() != "ape" && fileInfo.suffix().toLower() != "amr" ) { cuelist << DMusic::CueParserPtr(new DMusic::CueParser(filepath)); // TODO: check cue invalid #ifdef SUPPORT_INOTIFY watcher->addPath(fileInfo.absolutePath()); #endif qWarning() << "skip" << suffix << filepath; return MetaPtr(); } AVFormatContext *pFormatCtx = avformat_alloc_context(); avformat_open_input(&pFormatCtx, filepath.toStdString().c_str(), nullptr, nullptr); if (pFormatCtx == nullptr) { avformat_free_context(pFormatCtx); return MetaPtr(); } if (avformat_find_stream_info(pFormatCtx, nullptr) < 0) { avformat_free_context(pFormatCtx); return MetaPtr(); } int audio_stream_index = -1; audio_stream_index = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0); if (audio_stream_index < 0) { avformat_close_input(&pFormatCtx); avformat_free_context(pFormatCtx); return MetaPtr(); } AVStream *in_stream = pFormatCtx->streams[audio_stream_index]; AVCodecParameters *in_codecpar = in_stream->codecpar; AVCodecContext *pCodecCtx = avcodec_alloc_context3(nullptr); avcodec_parameters_to_context(pCodecCtx, in_codecpar); AVCodec *pCodec = avcodec_find_decoder(pCodecCtx->codec_id); avcodec_open2(pCodecCtx, pCodec, nullptr); AVPacket *packet = av_packet_alloc(); AVFrame *frame = av_frame_alloc(); int readCount = 0; int sendCount = 0; int receiveCount = 0; while ( av_read_frame(pFormatCtx, packet) >= 0 ) { if (packet->stream_index == audio_stream_index) { int ret; ret = avcodec_send_packet(pCodecCtx, packet); av_packet_unref(packet); if (ret != 0) { sendCount++; } ret = avcodec_receive_frame(pCodecCtx, frame); if (ret != 0) { receiveCount++; } } av_packet_unref(packet); if (readCount++ > 300) { break ; } } bool invalidFile = false; if (sendCount != 0 || receiveCount != 0) { if (sendCount == receiveCount) { invalidFile = true; } } if (readCount < 65) { if (receiveCount > 2) { invalidFile = true; } } if (readCount == 33 && sendCount == 1 && receiveCount == 2) { invalidFile = true; } if (invalidFile) { av_packet_unref(packet); av_frame_free(&frame); avcodec_close(pCodecCtx); avformat_close_input(&pFormatCtx); avformat_free_context(pFormatCtx); return MetaPtr(); } av_packet_unref(packet); av_frame_free(&frame); avcodec_close(pCodecCtx); avformat_close_input(&pFormatCtx); avformat_free_context(pFormatCtx); auto hash = DMusic::filepathHash(filepath); if (MediaLibrary::instance()->contains(hash)) { // FIXME: insertToPlaylist; //Q_EMIT insertToPlaylist(hash, playlist); qDebug() << "exit" << hash << MediaLibrary::instance()->meta(hash); return MediaLibrary::instance()->meta(hash); } auto meta = createMeta(fileInfo); if (meta->length == 0) return MetaPtr(); //check is lossless file if (losslessSuffixs.contains(fileInfo.suffix())) { losslessMetaCache.insert(meta->localPath, meta); return MetaPtr(); } metas.insert(meta->hash, meta); #ifdef SUPPORT_INOTIFY watcher->addPath(fileInfo.absolutePath()); #endif return meta; } MediaLibrary::MediaLibrary(QObject *parent) : QObject(parent), d_ptr(new MediaLibraryPrivate(this)) { } MediaLibrary::~MediaLibrary() { } bool MediaLibrary::isEmpty() const { Q_D(const MediaLibrary); return d->metas.isEmpty(); } MetaPtr MediaLibrary::meta(const QString &hash) { Q_D(MediaLibrary); return d->metas.value(hash); } bool MediaLibrary::contains(const QString &hash) const { Q_D(const MediaLibrary); return d->metas.contains(hash); } MetaPtrList MediaLibrary::importFile(const QString &filepath) { Q_D(MediaLibrary); qDebug() << "import file" << filepath; QMap losslessMetaCache; QList cuelist; MetaPtrList metaList; auto meta = d->importMeta(filepath, losslessMetaCache, cuelist); if (!meta.isNull()) { metaList << meta; } for (auto &cue : cuelist) { losslessMetaCache.remove(cue->mediaFilepath()); metaList += cue->metalist(); // insert to library for (auto meta : cue->metalist()) { d->metas.insert(meta->hash, meta); } } for (auto &key : losslessMetaCache.keys()) { auto losslessMeta = losslessMetaCache.value(key); #ifdef SUPPORT_INOTIFY d->watcher->addPath(losslessMeta->localPath); #endif metaList << losslessMeta; d->metas.insert(losslessMeta->hash, losslessMeta); } qDebug() << "importFile" << "with media count:" << metaList.length(); Q_EMIT MediaDatabase::instance()->addMediaMetaList(metaList); return metaList; } void MediaLibrary::init() { Q_D(MediaLibrary); d->startMonitor(); MetaDetector::init(); } void MediaLibrary::removeMediaMetaList(const MetaPtrList metalist) { Q_D(MediaLibrary); for (auto meta : metalist) { if (meta.isNull()) { qCritical() << "invalid meta" << meta; } d->metas.remove(meta->hash); } } void MediaLibrary::importMedias(const QString &jobid, const QStringList &urllist) { Q_D(MediaLibrary); qDebug() << "import form" << urllist << "to" << jobid; int mediaCount = 0; QMap losslessMetaCache; QList cuelist; MetaPtrList metaCache; for (auto &filepath : urllist) { QFileInfo fileInfo(filepath); if (fileInfo.isDir()) { QDirIterator it(filepath, d->supportedSuffixs.keys(), QDir::Files, QDirIterator::Subdirectories); while (it.hasNext()) { QString filepath = it.next(); auto meta = d->importMeta(filepath, losslessMetaCache, cuelist); qDebug() << "process file" << filepath << meta; if (meta.isNull()) { qWarning() << "create meta failed:" << filepath << meta; continue; } metaCache << meta; if (metaCache.length() >= ScanCacheSize) { mediaCount += metaCache.length(); Q_EMIT MediaDatabase::instance()->addMediaMetaList(metaCache); Q_EMIT meidaFileImported(jobid, metaCache); metaCache.clear(); } } } else { auto meta = d->importMeta(filepath, losslessMetaCache, cuelist); if (meta.isNull()) { continue; } metaCache << meta; if (metaCache.length() >= ScanCacheSize) { mediaCount += metaCache.length(); Q_EMIT MediaDatabase::instance()->addMediaMetaList(metaCache); Q_EMIT meidaFileImported(jobid, metaCache); metaCache.clear(); } } } for (auto &cue : cuelist) { losslessMetaCache.remove(cue->mediaFilepath()); metaCache += cue->metalist(); // insert to library for (auto meta : cue->metalist()) { d->metas.insert(meta->hash, meta); } if (metaCache.length() >= ScanCacheSize) { mediaCount += metaCache.length(); Q_EMIT MediaDatabase::instance()->addMediaMetaList(metaCache); Q_EMIT meidaFileImported(jobid, metaCache); metaCache.clear(); } } for (auto &key : losslessMetaCache.keys()) { auto losslessMeta = losslessMetaCache.value(key); #ifdef SUPPORT_INOTIFY d->watcher->addPath(losslessMeta->localPath); #endif metaCache << losslessMeta; d->metas.insert(losslessMeta->hash, losslessMeta); if (metaCache.length() >= ScanCacheSize) { mediaCount += metaCache.length(); Q_EMIT MediaDatabase::instance()->addMediaMetaList(metaCache); Q_EMIT meidaFileImported(jobid, metaCache); metaCache.clear(); } } if (metaCache.length() > 0) { mediaCount += metaCache.length(); Q_EMIT MediaDatabase::instance()->addMediaMetaList(metaCache); Q_EMIT meidaFileImported(jobid, metaCache); metaCache.clear(); } qDebug() << "scanFinished" << jobid << "with media count:" << mediaCount; Q_EMIT scanFinished(jobid, mediaCount); } deepin-music-6.0.1.54/src/music-player/core/medialibrary.h000664 000000 000000 00000003346 13703317554 023273 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include "util/singleton.h" class MediaLibraryPrivate; class MediaLibrary : public QObject, public DMusic::DSingleton { Q_OBJECT public: ~MediaLibrary(); MetaPtr meta(const QString &hash); bool contains(const QString &hash) const; bool isEmpty() const; MetaPtrList importFile(const QString &filepath); signals: void mediaClean(); void scanFinished(const QString &jobid, int mediaCount); void meidaFileImported(const QString &jobid, MetaPtrList metalist); public slots: void init(); void removeMediaMetaList(const MetaPtrList metalist); void importMedias(const QString &jobid, const QStringList &urllist); private: explicit MediaLibrary(QObject *parent = nullptr); friend class DMusic::DSingleton; QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MediaLibrary) }; deepin-music-6.0.1.54/src/music-player/core/metabufferdetector.cpp000664 000000 000000 00000015201 13703317554 025025 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "metabufferdetector.h" #include #include #include #include #include #include #include #include #include //#ifndef DISABLE_LIBAV #ifdef __cplusplus extern "C" { #endif // __cplusplus #include #include #ifdef __cplusplus } #endif // __cplusplus //#endif // DISABLE_LIBAV #include "util/global.h" class MetaBufferDetectorPrivate { public: MetaBufferDetectorPrivate(MetaBufferDetector *parent) : q_ptr(parent) {} QString curPath; QString curHash; QVector listData; bool stopFlag = false; MetaBufferDetector *q_ptr; Q_DECLARE_PUBLIC(MetaBufferDetector) }; MetaBufferDetector::MetaBufferDetector(QObject *parent) : QThread(parent), d_ptr(new MetaBufferDetectorPrivate(this)) { } MetaBufferDetector::~MetaBufferDetector() { Q_D(MetaBufferDetector); d->stopFlag = true; while (isRunning()) { } } void MetaBufferDetector::run() { Q_D(MetaBufferDetector); QString path = d->curPath; QString hash = d->curHash; if (path.isEmpty()) return; #if 0 QFileInfo fileInfo(path); if (fileInfo.suffix() == "ape") { QString curPath = Global::configPath(); QString toPath = QString("%1/.tmp.ape.mp3").arg(curPath); if (QFile::exists(toPath)) { QFile::remove(toPath); } QString fromPath = QString("%1/.tmp.ape").arg(curPath); QFile file(path); file.link(fromPath); QString program = QString("ffmpeg -i %1 -ac 1 -ab 32 -ar 24000 %2/.tmp.ape.mp3").arg(fromPath).arg(curPath); QProcess::execute(program); path = toPath; } #endif AVFormatContext *pFormatCtx = avformat_alloc_context(); avformat_open_input(&pFormatCtx, path.toStdString().c_str(), nullptr, nullptr); if (pFormatCtx == nullptr) { avformat_free_context(pFormatCtx); d->curPath.clear(); d->curHash.clear(); return; } avformat_find_stream_info(pFormatCtx, nullptr); int audio_stream_index = -1; audio_stream_index = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0); if (audio_stream_index < 0) { avformat_close_input(&pFormatCtx); avformat_free_context(pFormatCtx); d->curPath.clear(); d->curHash.clear(); return; } AVStream *in_stream = pFormatCtx->streams[audio_stream_index]; AVCodecParameters *in_codecpar = in_stream->codecpar; AVCodecContext *pCodecCtx = avcodec_alloc_context3(nullptr); avcodec_parameters_to_context(pCodecCtx, in_codecpar); AVCodec *pCodec = avcodec_find_decoder(pCodecCtx->codec_id); avcodec_open2(pCodecCtx, pCodec, nullptr); AVPacket *packet = av_packet_alloc(); AVFrame *frame = av_frame_alloc(); QVector curData; bool flag = false; while (av_read_frame(pFormatCtx, packet) >= 0 ) { //stop detector if (d->stopFlag && curData.size() > 100) { av_packet_unref(packet); av_frame_free(&frame); avcodec_close(pCodecCtx); avformat_close_input(&pFormatCtx); avformat_free_context(pFormatCtx); resample(curData, hash);//åˆ·æ–°æ³¢æµªæ¡ d->stopFlag = false; d->curPath.clear(); d->curHash.clear(); return; } if (!flag && curData.size() > 100) { resample(curData, hash); flag = true; } while ( av_read_frame(pFormatCtx, packet) >= 0 ) { if (packet->stream_index == audio_stream_index) { int state; state = avcodec_send_packet(pCodecCtx, packet); av_packet_unref(packet); if (state != 0) { continue; } state = avcodec_receive_frame(pCodecCtx, frame); if (state == 0) { quint8 *ptr = frame->extended_data[0]; if (path.endsWith(".ape") || path.endsWith(".APE")) { for (int i = 0; i < frame->linesize[0]; i++) { auto valDate = ((ptr[i]) << 16 | (ptr[i + 1])); curData.append(valDate + qrand()); } } else { for (int i = 0; i < frame->linesize[0]; i += 1024) { auto valDate = ((ptr[i]) << 16 | (ptr[i + 1])); curData.append(valDate); } } } } } av_packet_unref(packet); } av_packet_unref(packet); av_frame_free(&frame); avcodec_close(pCodecCtx); avformat_close_input(&pFormatCtx); avformat_free_context(pFormatCtx); resample(curData, hash); } void MetaBufferDetector::onBufferDetector(const QString &path, const QString &hash) { Q_D(MetaBufferDetector); QString curHash = d->curHash; if (hash == curHash/* || true*/) return; if (isRunning()) { d->stopFlag = true; } d->curPath = path; d->curHash = hash; start(); } void MetaBufferDetector::onClearBufferDetector() { Q_D(MetaBufferDetector); if (isRunning()) { d->stopFlag = true; } d->curPath.clear(); d->curHash.clear(); } void MetaBufferDetector::resample(const QVector &buffer, const QString &hash) { QVector t_buffer; t_buffer.reserve(1001); if (buffer.size() < 1000) { t_buffer = buffer; } else { int num = buffer.size() / 1000; float t_curValue = 0; for (int i = 0; i < buffer.size(); i += num) { if (i % num == 0) { t_buffer.append(buffer[i]); } } t_buffer.append(t_curValue); } Q_EMIT metaBuffer(t_buffer, hash); } deepin-music-6.0.1.54/src/music-player/core/metabufferdetector.h000664 000000 000000 00000002721 13703317554 024475 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "libdmusic_global.h" class MetaBufferDetectorPrivate; class LIBDMUSICSHARED_EXPORT MetaBufferDetector : public QThread { Q_OBJECT public: explicit MetaBufferDetector(QObject *parent = Q_NULLPTR); ~MetaBufferDetector(); void run(); public slots: void onBufferDetector(const QString &path, const QString &hash); void onClearBufferDetector(); signals: void metaBuffer(const QVector &buffer, const QString &hash); private: void resample(const QVector &buffer, const QString &hash); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MetaBufferDetector) }; deepin-music-6.0.1.54/src/music-player/core/metasearchservice.cpp000664 000000 000000 00000020713 13703317554 024654 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "metasearchservice.h" #include #include #include #include #include #include #include #include "util/global.h" #include "pluginmanager.h" #include static QString cacheLyricPath(const MetaPtr meta) { auto cacheLyricDir = Global::cacheDir() + "/lyric"; return cacheLyricDir + "/" + meta->searchID + ".lyric"; } inline QString cacheCoverPath(const MetaPtr meta) { auto cacheLyricDir = Global::cacheDir() + "/cover"; // TODO: key is what? return cacheLyricDir + "/" + meta->searchID + ".cover"; } static QString cacheLyricPath(const QString &searchID) { auto cacheLyricDir = Global::cacheDir() + "/lyric"; return cacheLyricDir + "/" + searchID + ".lyric"; } inline QString cacheCoverPath(const QString &searchID) { auto cacheLyricDir = Global::cacheDir() + "/cover"; // TODO: key is what? return cacheLyricDir + "/" + searchID + ".cover"; } class MetaSearchServicePrivate { public: MetaSearchServicePrivate(MetaSearchService *parent) : q_ptr(parent) {} int searchCacheLyric(const MetaPtr meta); int searchCacheCover(const MetaPtr meta); DMusic::Net::Geese *m_geese = nullptr; MetaSearchService *q_ptr; Q_DECLARE_PUBLIC(MetaSearchService) }; void MetaSearchService::init() { Q_D(MetaSearchService); d->m_geese = new DMusic::Net::Geese(this); QDir cacheDir(Global::cacheDir() + "/lyric"); if (!cacheDir.exists()) { cacheDir.mkpath("."); } cacheDir = QDir(Global::cacheDir() + "/cover"); if (!cacheDir.exists()) { cacheDir.mkpath("."); } qDebug() << "load meta search plugins"; auto plugins = PluginManager::instance()->getPluginListByType(DMusic::Plugin::PluginType::TypeMetaSearchEngine); for (auto plugin : plugins) { auto engine = dynamic_cast(plugin); qDebug() << "load meta search engine" << engine; connect(engine, &DMusic::Plugin::MetaSearchEngine::coverLoaded, this, [ = ](const MetaPtr meta, const DMusic::SearchMeta & search, const QByteArray & coverData) { if (coverData.length() > 0) { QFile coverFile(cacheCoverPath(search.id)); coverFile.open(QIODevice::WriteOnly); coverFile.write(coverData); coverFile.close(); } Q_EMIT coverSearchFinished(meta, search, coverData); }); connect(engine, &DMusic::Plugin::MetaSearchEngine::lyricLoaded, this, [ = ](const MetaPtr meta, const DMusic::SearchMeta & search, QByteArray lyricData) { if (lyricData.length() > 0) { } else { // can not found lyric, write empty qWarning() << "no lyric for this song"; lyricData = " "; } QFile lyricFile(cacheLyricPath(search.id)); lyricFile.open(QIODevice::WriteOnly); lyricFile.write(lyricData); lyricFile.close(); Q_EMIT lyricSearchFinished(meta, search, lyricData); }); connect(engine, &DMusic::Plugin::MetaSearchEngine::contextSearchFinished, this, [ = ](const QString & context, const QList &metalist) { Q_EMIT contextSearchFinished(context, metalist); }); } } MetaSearchService::~MetaSearchService() { } MetaSearchService::MetaSearchService(QObject *parent) : QObject(parent), d_ptr(new MetaSearchServicePrivate(this)) { } QUrl MetaSearchService::coverUrl(const MetaPtr meta) { return QUrl::fromLocalFile(cacheCoverPath(meta)); } QUrl MetaSearchService::lyricUrl(const MetaPtr meta) { return QUrl::fromLocalFile(cacheLyricPath(meta)); } QByteArray MetaSearchService::coverData(const MetaPtr meta) { // Q_ASSERT(!meta.isNull()); // QFile coverFile(cacheCoverPath(meta)); // if (coverFile.open(QIODevice::ReadOnly)) { // return coverFile.readAll(); // } QByteArray byteArray; if (meta) { byteArray = meta->getCoverData(Global::cacheDir()); } return byteArray; } QByteArray MetaSearchService::lyricData(const MetaPtr meta) { QFile lyricFile(cacheLyricPath(meta)); if (lyricFile.open(QIODevice::ReadOnly)) { return lyricFile.readAll(); } return QByteArray(); } int MetaSearchServicePrivate::searchCacheLyric(const MetaPtr meta) { Q_Q(MetaSearchService); QFileInfo lyric(cacheLyricPath(meta)); if (!lyric.exists() || lyric.size() < 1) { return -1; } Q_EMIT q->lyricSearchFinished(meta, DMusic::SearchMeta(meta->searchID), MetaSearchService::lyricData(meta)); return 0; } int MetaSearchServicePrivate::searchCacheCover(const MetaPtr meta) { Q_Q(MetaSearchService); QFileInfo cover(cacheCoverPath(meta)); if (!cover.exists() || cover.size() < 1) { return -1; } Q_EMIT q->coverSearchFinished(meta, DMusic::SearchMeta(meta->searchID), MetaSearchService::coverData(meta)); return 0; } //! //! \brief LyricService::searchMeta //! \param meta //! void MetaSearchService::searchMeta(const MetaPtr meta) { Q_D(MetaSearchService); bool needlyric = false; bool needCover = false; if (0 != d->searchCacheLyric(meta)) { needlyric = true; } if (0 != d->searchCacheCover(meta)) { needCover = true; } if (!needCover && !needlyric) { return; } auto plugins = PluginManager::instance()->getPluginListByType(DMusic::Plugin::PluginType::TypeMetaSearchEngine); for (auto plugin : plugins) { auto engine = dynamic_cast(plugin); Q_EMIT engine->doSearchMeta(meta); } } void MetaSearchService::searchContext(const QString &context) { auto plugins = PluginManager::instance()->getPluginListByType(DMusic::Plugin::PluginType::TypeMetaSearchEngine); for (auto plugin : plugins) { qDebug() << "search by " << plugin->pluginId() << context; auto engine = dynamic_cast(plugin); Q_EMIT engine->doSearchContext(context); } } void MetaSearchService::onChangeMetaCache(const MetaPtr meta, const DMusic::SearchMeta &search) { Q_D(MetaSearchService); qDebug() << "change" << search.album.coverUrl << search.id; connect(d->m_geese->getGoose(search.album.coverUrl), &DMusic::Net::Goose::arrive, this, [ = ](int errCode, const QByteArray & coverData) { qDebug() << "onChangeMetaCache received: " << errCode << coverData.length(); if (coverData.length() > 0) { QFile coverFile(cacheCoverPath(meta)); coverFile.open(QIODevice::WriteOnly); coverFile.write(coverData); coverFile.close(); } Q_EMIT coverSearchFinished(meta, search, coverData); }); // TODO: call plugin to do this QString lyricUrl = QLatin1String("http://music.163.com/api/song/lyric?os=pc&id=%1&lv=-1&kv=-1&tv=-1"); lyricUrl = lyricUrl.arg(QString(search.id).remove("netease_")); connect(d->m_geese->getGoose(lyricUrl), &DMusic::Net::Goose::arrive, this, [ = ](int errCode, const QByteArray & data) { qDebug() << "onChangeMetaCache received: " << errCode << data.length(); auto document = QJsonDocument::fromJson(data); auto lrc = document.object().value("lrc").toObject(); auto lrcData = lrc.value("lyric").toString().toUtf8(); if (lrcData.length() <= 0) { lrcData = " "; } QFile lyricFile(cacheLyricPath(meta)); lyricFile.open(QIODevice::WriteOnly); lyricFile.write(lrcData); lyricFile.close(); Q_EMIT lyricSearchFinished(meta, search, lrcData); }); } deepin-music-6.0.1.54/src/music-player/core/metasearchservice.h000664 000000 000000 00000004051 13703317554 024316 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include #include #include class MetaSearchServicePrivate; class MetaSearchService : public QObject, public DMusic::DSingleton { Q_OBJECT public: void init(); ~MetaSearchService(); static QUrl coverUrl(const MetaPtr meta); static QUrl lyricUrl(const MetaPtr meta); static QByteArray coverData(const MetaPtr meta); static QByteArray lyricData(const MetaPtr meta); signals: void lyricSearchFinished(const MetaPtr meta, const DMusic::SearchMeta &song, const QByteArray &lyricData); void coverSearchFinished(const MetaPtr meta, const DMusic::SearchMeta &song, const QByteArray &coverData); void contextSearchFinished(const QString &context, const QList &metalist); public slots: void searchMeta(const MetaPtr meta); void searchContext(const QString &context); void onChangeMetaCache(const MetaPtr meta, const DMusic::SearchMeta &search); private: explicit MetaSearchService(QObject *parent = nullptr); friend class DMusic::DSingleton; QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MetaSearchService) }; deepin-music-6.0.1.54/src/music-player/core/music.h000664 000000 000000 00000001450 13703317554 021741 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include deepin-music-6.0.1.54/src/music-player/core/musicsettings.cpp000664 000000 000000 00000003442 13703317554 024060 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musicsettings.h" #include #include #include #include #include "util/global.h" #include "util/threadpool.h" #include QPointer MusicSettings::m_settings = nullptr; MusicSettings::MusicSettings(QObject *parent) : QObject(parent) { } MusicSettings::~MusicSettings() { qDebug() << "destory"; } void MusicSettings::init() { m_settings = Dtk::Core::DSettings::fromJsonFile(":/data/deepin-music-settings.json"); auto configFilepath = Global::configPath() + "/config.ini"; auto backend = new Dtk::Core::QSettingBackend(configFilepath); m_settings->setBackend(backend); } QPointer MusicSettings::settings() { return m_settings; } void MusicSettings::sync() { m_settings->sync(); } QVariant MusicSettings::value(const QString &key) { return m_settings->value(key); } void MusicSettings::setOption(const QString &key, const QVariant &value) { m_settings->setOption(key, value); } deepin-music-6.0.1.54/src/music-player/core/musicsettings.h000664 000000 000000 00000002530 13703317554 023522 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include class MusicSettings : public QObject, public DMusic::DSingleton { Q_OBJECT public: explicit MusicSettings(QObject *parent = nullptr); ~MusicSettings(); static void init(); static QPointer settings(); static void sync(); static QVariant value(const QString &key); static void setOption(const QString &key, const QVariant &value); private: static QPointer m_settings; friend class DMusic::DSingleton; }; deepin-music-6.0.1.54/src/music-player/core/player.cpp000775 000000 000000 00000112562 13703317554 022462 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "player.h" #include "AudioBufferDevice.h" #include "AudioPlayer.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "metasearchservice.h" #include "util/dbusutils.h" #include "util/global.h" #include #include #include "vlc/Audio.h" #include "vlc/Error.h" #include "vlc/Common.h" #include "vlc/Enums.h" #include "vlc/Instance.h" #include "vlc/Media.h" #include "vlc/MediaPlayer.h" #include "vlc/Equalizer.h" #include "core/musicsettings.h" DCORE_USE_NAMESPACE static QMap sSupportedSuffix; static QStringList sSupportedSuffixList; static QStringList sSupportedFiterList; static QStringList sSupportedMimeTypes; static const int sFadeInOutAnimationDuration = 900; //ms void initMiniTypes() { //black list QHash suffixBlacklist; suffixBlacklist.insert("m3u", true); suffixBlacklist.insert("mid", true); suffixBlacklist.insert("midi", true); suffixBlacklist.insert("imy", true); suffixBlacklist.insert("xmf", true); suffixBlacklist.insert("mp4", true); suffixBlacklist.insert("mkv", true); suffixBlacklist.insert("avi", true); suffixBlacklist.insert("mpeg4", true); suffixBlacklist.insert("3gp", true); suffixBlacklist.insert("flv", true); suffixBlacklist.insert("ass", true); QHash suffixWhitelist; suffixWhitelist.insert("cue", true); QStringList mimeTypeWhiteList; mimeTypeWhiteList << "application/vnd.ms-asf"; QMimeDatabase mdb; for (auto &mt : mdb.allMimeTypes()) { if (mt.name().startsWith("audio/") /*|| mt.name().startsWith("video/")*/) { sSupportedFiterList << mt.filterString(); for (auto &suffix : mt.suffixes()) { if (suffixBlacklist.contains(suffix)) { continue; } sSupportedSuffixList << "*." + suffix; sSupportedSuffix.insert(suffix, true); } sSupportedMimeTypes << mt.name(); } if (mt.name().startsWith("video/")) { sSupportedMimeTypes << mt.name(); } if (mt.name().startsWith("application/octet-stream")) { sSupportedMimeTypes << mt.name(); } } sSupportedMimeTypes << mimeTypeWhiteList; for (auto &suffix : suffixWhitelist.keys()) { sSupportedSuffixList << "*." + suffix; sSupportedSuffix.insert(suffix, true); } } QStringList Player::supportedFilterStringList() const { return sSupportedFiterList; } QStringList Player::supportedSuffixList() const { return sSupportedSuffixList; } QStringList Player::supportedMimeTypes() const { return sSupportedMimeTypes; } class PlayerPrivate { public: PlayerPrivate(Player *parent) : q_ptr(parent) { // qplayer = new QMediaPlayer(); // qplayer->setVolume(100); // qProbe = new QAudioProbe(); /*-------AudioPlayer-------*/ // ioPlayer = new AudioPlayer(); qvinstance = new VlcInstance(VlcCommon::args(), nullptr); qvplayer = new VlcMediaPlayer(qvinstance); qvplayer->equalizer()->setPreamplification(12); qvmedia = new VlcMedia(); // qvplayer->audio()->setVolume(100); } void initConnection(); void selectPrev(const MetaPtr info, Player::PlaybackMode mode); void selectNext(const MetaPtr info, Player::PlaybackMode mode); // player property bool canControl = true; bool canGoNext = false; bool canGoPrevious = false; bool canPause = false; bool canPlay = false; bool canSeek = false; bool shuffle = false; bool mute = false; // unused QString sinkInputPath; Player::PlaybackMode mode = Player::RepeatAll; Player::PlaybackStatus status = Player::InvalidPlaybackStatus; // QMediaPlayer *qplayer; // QAudioProbe *qProbe; /*-------ioPlayer----------*/ // AudioPlayer *ioPlayer; // qint64 ioDuration = 0; VlcInstance *qvinstance; VlcMedia *qvmedia; VlcMediaPlayer *qvplayer; bool isamr = false; PlaylistPtr activePlaylist; PlaylistPtr curPlaylist; MetaPtr activeMeta; int volume = 50.0; bool playOnLoad = true; bool firstPlayOnLoad = true; //外部åŒå‡»æ‰“开处ç†ä¸€æ¬¡ bool fadeInOut = true; double fadeInOutFactor = 1.0; qlonglong m_position = 0;//åˆ¤æ–­éŸ³ä¹æ’­æ”¾çš„ä½ç½® QPropertyAnimation *fadeInAnimation = nullptr; QPropertyAnimation *fadeOutAnimation = nullptr; // QFileSystemWatcher fileSystemWatcher; Player *q_ptr; Q_DECLARE_PUBLIC(Player) }; void PlayerPrivate::initConnection() { Q_Q(Player); /*----------ioPlayer connect-----------*/ // q->connect(ioPlayer->_buffer, &AudioBufferDevice::positionChanged, q, // [ = ](qint64 position) { // //qDebug() << position << "-" << ioDuration; // Q_EMIT q->positionChanged(position, ioDuration, 20); // }); // q->connect(ioPlayer->_buffer, &AudioBufferDevice::durationChanged, q, // [ = ](qint64 position) { // ioDuration++; // }); // q->connect(ioPlayer->_buffer, &AudioBufferDevice::endOfMedia, q, // [ = ]() { // qDebug() << "AudioBufferDevice::endOfMedia"; // ioPlayer->reset(); // selectNext(activeMeta, mode); // }); // q->connect(ioPlayer->_buffer, &AudioBufferDevice::againMedia, q, // [ = ]() { // //! 釿–°åŠ è½½èµ„æº // if (playOnLoad && (!activeMeta.isNull()) && QFile::exists(activeMeta->localPath)) { // ioDuration = 0; // QString temp = activeMeta->localPath; // if (temp.endsWith(".amr1")) { //// qplayer->stop(); // ioPlayer->play(); // ioPlayer->setSourceFilename(activeMeta->localPath); // } // } // }); // q->connect(q, &Player::sliderReleased, ioPlayer->_buffer, &AudioBufferDevice::sliderReleased); /*--------------END ioPlayer------------*/ //vlc timeChanged to show q->connect(qvplayer, &VlcMediaPlayer::timeChanged, q, [ = ](qint64 position) { if (activeMeta.isNull()) { return; } // auto duration = qvplayer->time(); auto duration = position; if (position > 1 && activeMeta->invalid) { Q_EMIT q->mediaError(activePlaylist, activeMeta, Player::NoError); } if (activeMeta->length == 0 && duration != 0 && duration > 0) { activeMeta->length = duration; Q_EMIT q->mediaUpdate(activePlaylist, activeMeta); } if (position >= activeMeta->offset + activeMeta->length + 1800 && qvplayer->state() == Vlc::Playing) { qDebug() << "WARN!!! change to next by position change"; QTimer::singleShot(10, [ = ]() { selectNext(activeMeta, mode); }); return; } Q_EMIT q->positionChanged(position - activeMeta->offset, activeMeta->length, 1); }); //vlc stateChanged q->connect(qvmedia, &VlcMedia::stateChanged, q, [ = ](Vlc::State status) { switch (status) { case Vlc::Idle: { /************************************** * if settings is mute ,then setmute to dbus * ************************************/ if (MusicSettings::value("base.play.mute").toBool()) q->setMusicMuted(true); break; } case Vlc::Opening: { break; } case Vlc::Buffering: { break; } case Vlc::Playing: { Q_EMIT q->playbackStatusChanged(Player::Playing); break; } case Vlc::Paused: { Q_EMIT q->playbackStatusChanged(Player::Paused); break; } case Vlc::Stopped: { Q_EMIT q->playbackStatusChanged(Player::Stopped); break; } case Vlc::Ended: { if (qvplayer->time() != 0) { // qDebug() << qvplayer->time() << qvplayer->length(); selectNext(activeMeta, mode); } break; } case Vlc::Error: { if (!activeMeta.isNull() /*&& !QFile::exists(activeMeta->localPath)*/) { MetaPtrList removeMusicList; removeMusicList.append(activeMeta); curPlaylist->removeMusicList(removeMusicList); Q_EMIT q->mediaError(activePlaylist, activeMeta, Player::ResourceError); } break; } } }); q->connect(qvplayer->audio(), &VlcAudio::volumeChanged, q, [ = ](int volume) { if (fadeInOutFactor < 1.0) { return; } if (volume >= 0) Q_EMIT q->volumeChanged(volume); }); q->connect(qvplayer->audio(), &VlcAudio::muteChanged, q, [ = ](bool mute) { if (q->isDevValid()) { Q_EMIT q->mutedChanged(mute); } else { qDebug() << "device does not start"; } }); q->connect(qvinstance, &VlcInstance::sendErrorOccour, q, [ = ](int err) { Q_UNUSED(err) /***************************** * force stop and play * ***************************/ PlaylistPtr pl = q->activePlaylist(); MetaPtr meta = q->activeMeta(); q->stop(); //play q->playMeta(pl, meta); }); // q->connect(qvmedia, &VlcMedia::durationChanged, // q, &Player::durationChanged); /* q->connect(qplayer, &QMediaPlayer::mediaStatusChanged, q, [ = ](QMediaPlayer::MediaStatus status) { switch (status) { case QMediaPlayer::LoadedMedia: { //wtf the QMediaPlayer can play image format, 233333333 if (activeMeta.isNull()) { qplayer->pause(); qplayer->stop(); return; } QMimeDatabase db; QMimeType type = db.mimeTypeForFile(activeMeta->localPath, QMimeDatabase::MatchContent); if (!sSupportedMimeTypes.contains(type.name())) { qDebug() << "unsupported mime type" << type << activePlaylist << activeMeta; qplayer->pause(); qplayer->stop(); qDebug() << "===========> QMediaPlayer::LoadedMedia"; Q_EMIT q->mediaError(activePlaylist, activeMeta, Player::FormatError); return; } if (playOnLoad && QFile::exists(activeMeta->localPath)) { ioDuration = 0; QString temp = activeMeta->localPath; if (temp.endsWith(".amr1")) { // qplayer->stop(); ioPlayer->play(); ioPlayer->setSourceFilename(activeMeta->localPath); } else { // qplayer->play(); } } break; } case QMediaPlayer::EndOfMedia: { if (!isamr) selectNext(activeMeta, mode); break; } case QMediaPlayer::LoadingMedia: { break; } case QMediaPlayer::UnknownMediaStatus: case QMediaPlayer::NoMedia: case QMediaPlayer::StalledMedia: case QMediaPlayer::BufferedMedia: case QMediaPlayer::BufferingMedia: case QMediaPlayer::InvalidMedia: break; } }); */ /* q->connect(qplayer, static_cast(&QMediaPlayer::error), q, [ = ](QMediaPlayer::Error error) { qWarning() << error << activePlaylist << activeMeta; if (error == QMediaPlayer::ResourceError) { if (!activeMeta.isNull() && !QFile::exists(activeMeta->localPath)) { MetaPtrList removeMusicList; removeMusicList.append(activeMeta); curPlaylist->removeMusicList(removeMusicList); Q_EMIT q->mediaError(activePlaylist, activeMeta, static_cast(error)); } else { QFileInfo fi("activeMeta->localPath"); if (!fi.isReadable()) { MetaPtrList removeMusicList; removeMusicList.append(activeMeta); curPlaylist->removeMusicList(removeMusicList); Q_EMIT q->mediaError(activePlaylist, activeMeta, static_cast(error)); } } } }); */ /* q->connect(&fileSystemWatcher, &QFileSystemWatcher::fileChanged, q, [ = ](const QString & path) { if (!QFile::exists(activeMeta->localPath) && !activePlaylist->allmusic().isEmpty()) { qDebug() << "change " << path; qplayer->pause(); qplayer->stop(); Q_EMIT q->mediaError(activePlaylist, activeMeta, Player::ResourceError); } }); */ } void PlayerPrivate::selectNext(const MetaPtr info, Player::PlaybackMode mode) { Q_Q(Player); if (!curPlaylist || curPlaylist->isEmpty()) { return; } MetaPtr cinfo = info; if (cinfo == nullptr) { for (int i = 0; i < curPlaylist->allmusic().size(); ++i) { cinfo = curPlaylist->music(i); if (cinfo != nullptr) break; } } bool invalidFlag = cinfo->invalid; if (invalidFlag) { for (auto curMeta : curPlaylist->allmusic()) { if (!curMeta->invalid) { invalidFlag = false; break; } } } switch (mode) { case Player::RepeatAll: { auto curMeta = curPlaylist->next(cinfo); if (QFile::exists(curMeta->localPath)) { curMeta->invalid = false; } if (curMeta->invalid && !invalidFlag) { int curNum = 0; while (curNum < curPlaylist->allmusic().size()) { curMeta = curPlaylist->next(curMeta); if (!curMeta->invalid) break; } } q->playMeta(activePlaylist, curMeta); break; } case Player::RepeatSingle: { q->playMeta(activePlaylist, cinfo); break; } case Player::Shuffle: { auto curMeta = curPlaylist->shuffleNext(cinfo); if (QFile::exists(curMeta->localPath)) { curMeta->invalid = false; } if (curMeta->invalid && !invalidFlag) { // int curNum = 0; while (true) { curMeta = curPlaylist->shuffleNext(curMeta); if (!curMeta->invalid || QFile::exists(curMeta->localPath)) break; } } q->playMeta(activePlaylist, curMeta); break; } } } void PlayerPrivate::selectPrev(const MetaPtr info, Player::PlaybackMode mode) { Q_Q(Player); if (!curPlaylist || curPlaylist->isEmpty()) { return; } bool invalidFlag = info->invalid; if (invalidFlag) { for (auto curMeta : curPlaylist->allmusic()) { if (!curMeta->invalid) { invalidFlag = false; break; } } } switch (mode) { case Player::RepeatAll: { auto curMeta = curPlaylist->prev(info); if (QFile::exists(curMeta->localPath)) { curMeta->invalid = false; } if (curMeta->invalid && !invalidFlag) { int curNum = 0; while (curNum < curPlaylist->allmusic().size()) { curMeta = curPlaylist->prev(curMeta); if (!curMeta->invalid || QFile::exists(curMeta->localPath)) break; } } q->playMeta(activePlaylist, curMeta); break; } case Player::RepeatSingle: { q->playMeta(activePlaylist, info); break; } case Player::Shuffle: { auto curMeta = curPlaylist->shufflePrev(info); if (QFile::exists(curMeta->localPath)) { curMeta->invalid = false; } if (curMeta->invalid && !invalidFlag) { //int curNum = 0; while (true) { curMeta = curPlaylist->shufflePrev(curMeta); if (!curMeta->invalid || QFile::exists(curMeta->localPath)) break; } } q->playMeta(activePlaylist, curMeta); break; } } } Player::Player(QObject *parent) : QObject(parent), d_ptr(new PlayerPrivate(this)) { initMiniTypes(); } void Player::init() { Q_D(Player); qRegisterMetaType(); qRegisterMetaType(); d->initConnection(); } void Player::setActivePlaylist(PlaylistPtr playlist) { Q_D(Player); d->activePlaylist = playlist; } void Player::setCurPlaylist(PlaylistPtr curPlaylist) { Q_D(Player); d->curPlaylist = curPlaylist; } Player::~Player() { qDebug() << "destroy Player"; Q_D(Player); // d->qplayer->stop(); // d->qplayer->deleteLater(); // delete d->qplayer; delete d->qvmedia; delete d->qvplayer; delete d->qvinstance; qDebug() << "Player destroyed"; } void Player::loadMedia(PlaylistPtr playlist, const MetaPtr meta) { qDebug() << "loadMedia" << meta->title << DMusic::lengthString(meta->offset) << "/" << DMusic::lengthString(meta->length); Q_D(Player); d->activeMeta = meta; if (playlist->id() != PlayMusicListID) d->activePlaylist = playlist; //int volume = -1; d->qvplayer->blockSignals(true); d->isamr = true; d->qvmedia->initMedia(meta->localPath, true, d->qvinstance); d->qvplayer->open(d->qvmedia); //volume = d->qvplayer->audio()->volume(); d->qvplayer->play(); d->qvplayer->audio()->setMute(true); if (!d->activePlaylist.isNull()) d->activePlaylist->play(meta); QTimer::singleShot(100, this, [ = ]() {//为了记录进度æ¡ç”Ÿæ•ˆï¼Œåœ¨åŠ è½½çš„æ—¶å€™è®©éŸ³ä¹æ’­æ”¾100ms d->qvplayer->pause(); d->qvplayer->blockSignals(false); if (!d->activePlaylist.isNull()) d->activePlaylist->play(meta); }); } void Player::playMeta(PlaylistPtr playlist, const MetaPtr pmeta) { Q_D(Player); MetaPtr meta = pmeta; if (meta == nullptr) { if (playlist == nullptr || playlist->isEmpty()) return; meta = playlist->first(); } if (QFileInfo(meta->localPath).dir().isEmpty() /*|| access(meta->localPath.toStdString().c_str(),F_OK) != 0*/) { Q_EMIT mediaError(playlist, meta, Player::ResourceError); return ; } /************************* * mute to dbus * ***********************/ setDbusMuted(); MetaPtr curMeta = meta; if (curMeta == nullptr) curMeta = d->curPlaylist->first(); qDebug() << "playMeta" << curMeta->title << DMusic::lengthString(curMeta->offset) << "/" << DMusic::lengthString(curMeta->length); if (curMeta.isNull()) return; if (playlist->id() != PlayMusicListID) d->activePlaylist = playlist; // if (d->activePlaylist.isNull()) // return; d->activeMeta = curMeta; // d->qplayer->setMedia(QMediaContent(QUrl::fromLocalFile(curMeta->localPath))); // d->qplayer->setPosition(curMeta->offset); d->isamr = true; d->qvmedia->initMedia(curMeta->localPath, true, d->qvinstance); d->qvplayer->open(d->qvmedia); d->qvplayer->setTime(curMeta->offset); d->qvplayer->play(); if (!d->activePlaylist.isNull()) d->activePlaylist->play(curMeta); d->curPlaylist->play(curMeta); DRecentData data; data.appName = Global::getAppName(); data.appExec = "deepin-music"; DRecentManager::addItem(curMeta->localPath, data); if (!d->activePlaylist.isNull()) { Q_EMIT mediaPlayed(d->activePlaylist, d->activeMeta); } else { Q_EMIT mediaPlayed(d->curPlaylist, d->activeMeta); } if (d->firstPlayOnLoad == true) { d->firstPlayOnLoad = false; QTimer::singleShot(150, this, [ = ]() { d->qvplayer->play(); }); } if (d->fadeOutAnimation) { d->fadeOutAnimation->stop(); d->fadeOutAnimation->deleteLater(); d->fadeOutAnimation = nullptr; } if (d->fadeInOut && !d->fadeInAnimation) { qDebug() << "start fade in"; d->fadeInAnimation = new QPropertyAnimation(this, "fadeInOutFactor"); d->fadeInAnimation->setEasingCurve(QEasingCurve::InCubic); d->fadeInAnimation->setStartValue(0.10000); d->fadeInAnimation->setEndValue(1.0000); d->fadeInAnimation->setDuration(sFadeInOutAnimationDuration); connect(d->fadeInAnimation, &QPropertyAnimation::finished, this, [ = ]() { d->fadeInAnimation->deleteLater(); d->fadeInAnimation = nullptr; }); d->fadeInAnimation->start(); } } void Player::resume(PlaylistPtr playlist, const MetaPtr pmeta) { Q_D(Player); MetaPtr meta = pmeta; if (meta == nullptr) { if (playlist == nullptr || playlist->isEmpty()) return; meta = playlist->first(); } if (QFileInfo(meta->localPath).dir().isEmpty() /*|| access(meta->localPath.toStdString().c_str(),F_OK) != 0*/) { Q_EMIT mediaError(playlist, meta, Player::ResourceError); return ; } /***************************************************************************************** * 1.audio service dbus not start * 2.audio device not start * ****************************************************************************************/ if (d->qvplayer->state() == Vlc::Stopped || (!isDevValid() && d->qvplayer->time() == 0)) { //reopen data d->qvmedia->initMedia(meta->localPath, true, d->qvinstance); d->qvplayer->open(d->qvmedia); d->qvplayer->setTime(meta->offset); } if (d->fadeOutAnimation) { setFadeInOutFactor(1.0); d->fadeOutAnimation->stop(); d->fadeOutAnimation = nullptr; } qDebug() << "resume top"; if (playlist == d->activePlaylist && d->qvplayer->state() == Vlc::Playing && meta->hash == d->activeMeta->hash) return; d->activeMeta = meta; if (d->curPlaylist != nullptr) d->curPlaylist->play(meta); setPlayOnLoaded(true); //增大音ä¹è‡ªåŠ¨å¼€å§‹æ’­æ”¾æ—¶é—´ï¼Œç»™setposition留足空间 QTimer::singleShot(100, this, [ = ]() { d->qvplayer->play(); }); if (d->fadeInOut && !d->fadeInAnimation) { d->fadeInAnimation = new QPropertyAnimation(this, "fadeInOutFactor"); d->fadeInAnimation->setEasingCurve(QEasingCurve::InCubic); d->fadeInAnimation->setStartValue(0.1000); d->fadeInAnimation->setEndValue(1.0000); d->fadeInAnimation->setDuration(sFadeInOutAnimationDuration); connect(d->fadeInAnimation, &QPropertyAnimation::finished, this, [ = ]() { d->fadeInAnimation->deleteLater(); d->fadeInAnimation = nullptr; }); d->fadeInAnimation->start(); } if (!d->activePlaylist.isNull() && d->activePlaylist->contains(d->activeMeta)) { Q_EMIT mediaPlayed(d->activePlaylist, d->activeMeta); } else { Q_EMIT mediaPlayed(d->curPlaylist, d->activeMeta); } } void Player::playNextMeta(PlaylistPtr playlist, const MetaPtr meta) { Q_UNUSED(playlist) Q_D(Player); // Q_ASSERT(playlist == d->activePlaylist); setPlayOnLoaded(true); if (d->mode == RepeatSingle) { d->selectNext(meta, RepeatAll); } else { d->selectNext(meta, d->mode); } } void Player::playPrevMusic(PlaylistPtr playlist, const MetaPtr meta) { Q_UNUSED(playlist) Q_D(Player); // Q_ASSERT(playlist == d->activePlaylist); setPlayOnLoaded(true); if (d->mode == RepeatSingle) { d->selectPrev(meta, RepeatAll); } else { d->selectPrev(meta, d->mode); } } void Player::pause() { Q_D(Player); /*--------suspend--------*/ // d->ioPlayer->suspend(); if (d->fadeInAnimation) { d->fadeInAnimation->stop(); // d->fadeInAnimation->deleteLater(); d->fadeInAnimation = nullptr; } if (d->fadeInOut && !d->fadeOutAnimation) { d->fadeOutAnimation = new QPropertyAnimation(this, "fadeInOutFactor"); d->fadeOutAnimation->setEasingCurve(QEasingCurve::OutCubic); d->fadeOutAnimation->setStartValue(1.0000); d->fadeOutAnimation->setEndValue(0.1000); d->fadeOutAnimation->setDuration(sFadeInOutAnimationDuration); connect(d->fadeOutAnimation, &QPropertyAnimation::finished, this, [ = ]() { d->fadeOutAnimation->deleteLater(); d->fadeOutAnimation = nullptr; d->qvplayer->pause(); QTimer::singleShot(50, this, [ = ]() { setFadeInOutFactor(1.0); }); }); d->fadeOutAnimation->start(); } else { d->qvplayer->pause(); setFadeInOutFactor(1.0); } } void Player::pauseNow() { Q_D(Player); d->qvplayer->pause(); } void Player::stop() { Q_D(Player); d->qvplayer->pause(); d->activeMeta.clear(); //æ¸…é™¤å½“å‰æ’­æ”¾éŸ³ä¹ï¼› d->qvplayer->stop(); } VlcMediaPlayer *Player::core() { Q_D(const Player); return d->qvplayer; } Player::PlaybackStatus Player::status() { Q_D(const Player); Vlc::State status = d->qvplayer->state(); if (status == Vlc::Playing) { return PlaybackStatus::Playing; } else if (status == Vlc::Paused) { return PlaybackStatus::Paused; } else if (status == Vlc::Stopped || status == Vlc::Idle) { return PlaybackStatus::Stopped; } else { return PlaybackStatus::InvalidPlaybackStatus; } } bool Player::isActiveMeta(MetaPtr meta) const { Q_D(const Player); return !meta.isNull() && ! d->activeMeta.isNull() && (meta->hash == d->activeMeta->hash); } MetaPtr Player::activeMeta() const { Q_D(const Player); return d->activeMeta; } PlaylistPtr Player::curPlaylist() const { Q_D(const Player); return d->curPlaylist; } PlaylistPtr Player::activePlaylist() const { Q_D(const Player); return d->activePlaylist; } //! //! \brief canControl //! Always be true bool Player::canControl() const { Q_D(const Player); return d->canControl; } qlonglong Player::position() const { Q_D(const Player); return d->qvplayer->time(); } int Player::volume() const { Q_D(const Player); return static_cast(d->volume); } Player::PlaybackMode Player::mode() const { Q_D(const Player); return d->mode; } bool Player::muted() { //Q_D(const Player); //return d->qplayer->isMuted(); return this->isMusicMuted(); } qint64 Player::duration() const { Q_D(const Player); if (d->activeMeta.isNull()) { return 0; } return d->qvplayer->length(); } double Player::fadeInOutFactor() const { Q_D(const Player); return d->fadeInOutFactor; } bool Player::fadeInOut() const { Q_D(const Player); return d->fadeInOut; } bool Player::playOnLoaded() const { Q_D(const Player); return d->playOnLoad; } void Player::setCanControl(bool canControl) { qCritical() << "Never Changed this" << canControl; } //void Player::setIOPosition(qint64 value, qint64 range) //{ // Q_D(Player); // if (d->playOnLoad && d->activeMeta && QFile::exists(d->activeMeta->localPath)) { // QString temp = d->activeMeta->localPath; // if (temp.endsWith(".amr1")) { // if (value != 0 && d->ioDuration != 0) { // // qint64 position = (value * d->ioDuration) / range; // qint64 position = (value * d->ioDuration) / 1000; // Q_EMIT this->sliderReleased(position); // } // } // } //} void Player::setPosition(qlonglong position) { Q_D(const Player); if (d->activeMeta.isNull()) { return; } if (d->qvplayer->length() == d->activeMeta->length) { return d->qvplayer->setTime(position); } else { d->qvplayer->setTime(position + d->activeMeta->offset); } } void Player::setMode(Player::PlaybackMode mode) { Q_D(Player); d->mode = mode; } void Player::setVolume(int volume) { Q_D(Player); if (volume > 100) { volume = 100; } if (volume < 0) { volume = 0; } d->volume = volume; // d->qplayer->blockSignals(true); // //d->qplayer->setVolume(d->volume * d->fadeInOutFactor); // d->qplayer->blockSignals(false); setMusicVolume((volume + 0.1) / 100.0);//设置到dbus的音é‡å¿…须大1,设置æ‰ä¼šç”Ÿæ•ˆ } void Player::setMuted(bool mute) { //Q_D(Player); //d->qplayer->setMuted(mute); setMusicMuted(mute); } void Player::setLocalMuted(bool muted) { Q_D(Player); d->qvplayer->audio()->setMute(muted); if (isValidDbusMute()) { QDBusInterface ainterface("com.deepin.daemon.Audio", d->sinkInputPath, "com.deepin.daemon.Audio.SinkInput", QDBusConnection::sessionBus()); if (!ainterface.isValid()) { return ; } //è°ƒç”¨è®¾ç½®éŸ³é‡ ainterface.call(QLatin1String("SetMute"), muted); } } void Player::setDbusMuted(bool muted) { Q_D(Player); Q_UNUSED(muted) if (isValidDbusMute()) { QDBusInterface ainterface("com.deepin.daemon.Audio", d->sinkInputPath, "com.deepin.daemon.Audio.SinkInput", QDBusConnection::sessionBus()); if (!ainterface.isValid()) { return ; } //è°ƒç”¨è®¾ç½®éŸ³é‡ if (MusicSettings::value("base.play.mute").toBool() != d->qvplayer->audio()->getMute()) ainterface.call(QLatin1String("SetMute"), MusicSettings::value("base.play.mute").toBool()); } } void Player::setFadeInOutFactor(double fadeInOutFactor) { Q_D(Player); d->fadeInOutFactor = fadeInOutFactor; // qDebug() << "setFadeInOutFactor" << fadeInOutFactor // << d->volume *d->fadeInOutFactor << d->volume; // d->qplayer->blockSignals(true); // d->qplayer->setVolume(/*d->volume*/100 * d->fadeInOutFactor); // d->qplayer->blockSignals(false); // d->qvplayer->audio()->blockSignals(true); // d->qvplayer->audio()->setVolume(d->volume * d->fadeInOutFactor); // d->qvplayer->audio()->blockSignals(false); d->qvplayer->equalizer()->blockSignals(true); d->qvplayer->equalizer()->setPreamplification(12 * d->fadeInOutFactor); d->qvplayer->equalizer()->blockSignals(false); //setMusicVolume(d->volume * d->fadeInOutFactor / 100.0); } void Player::setFadeInOut(bool fadeInOut) { Q_D(Player); d->fadeInOut = fadeInOut; } void Player::setPlayOnLoaded(bool playOnLoaded) { Q_D(Player); d->playOnLoad = playOnLoaded; } void Player::musicFileMiss() { Q_D(Player); /*--------Remove the usb flash drive, the music is invalid-------*/ if (d->activeMeta != nullptr && access(d->activeMeta->localPath.toStdString().c_str(), F_OK) != 0 && (!d->activePlaylist->allmusic().isEmpty())) { stop(); //Q_EMIT mediaError(d->activePlaylist, d->activeMeta, Player::ResourceError); d->activeMeta = nullptr; d->activePlaylist->play(MetaPtr()); } } void Player::setEqualizer(bool enabled, int curIndex, QList indexbaud) { Q_D(const Player); if (enabled) { //éžè‡ªå®šä¹‰æ¨¡å¼æ—¶ if (curIndex > 0) { d->qvplayer->equalizer()->loadFromPreset(uint(curIndex - 1)); //设置放大值 d->qvplayer->equalizer()->setPreamplification(d->qvplayer->equalizer()->preamplification()); for (int i = 0 ; i < 10; i++) { //设置频率值 d->qvplayer->equalizer()->setAmplificationForBandAt(d->qvplayer->equalizer()->amplificationForBandAt(uint(i)), uint(i)); } } else { if (indexbaud.size() == 0) { return; } else { d->qvplayer->equalizer()->setPreamplification(indexbaud.at(0)); for (int i = 1; i < 11; i++) { d->qvplayer->equalizer()->setAmplificationForBandAt(indexbaud.at(i), uint(i - 1)); } } } } } void Player::setEqualizerEnable(bool enable) { Q_D(Player); d->qvplayer->equalizer()->setEnabled(enable); } void Player::setEqualizerpre(int val) { Q_D(Player); // qDebug() << "setEqualizerpre" << val ; d->qvplayer->equalizer()->setPreamplification(val); } void Player::setEqualizerbauds(int index, int val) { Q_D(Player); // qDebug() << "setEqualizerbauds" << index << val; d->qvplayer->equalizer()->setAmplificationForBandAt(uint(val), uint(index)); } void Player::setEqualizerCurMode(int curIndex) { Q_D(Player); //éžè‡ªå®šä¹‰æ¨¡å¼æ—¶ if (curIndex != 0) { d->qvplayer->equalizer()->loadFromPreset(uint(curIndex - 1)); //设置放大值 d->qvplayer->equalizer()->setPreamplification(d->qvplayer->equalizer()->preamplification()); for (int i = 0 ; i < 10; i++) { //设置频率值 d->qvplayer->equalizer()->setAmplificationForBandAt(d->qvplayer->equalizer()->amplificationForBandAt(uint(i)), uint(i)); } } } bool Player::isValidDbusMute() { Q_D(Player); readSinkInputPath(); if (!d->sinkInputPath.isEmpty()) { QVariant MuteV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", d->sinkInputPath, "com.deepin.daemon.Audio.SinkInput", "Mute"); return MuteV.isValid(); } return false; } void Player::readSinkInputPath() { Q_D(Player); // if (!d->sinkInputPath.isEmpty()) // return; QVariant v = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", "/com/deepin/daemon/Audio", "com.deepin.daemon.Audio", "SinkInputs"); if (!v.isValid()) return; QList allSinkInputsList = v.value >(); // qDebug() << "allSinkInputsListSize: " << allSinkInputsList.size(); for (auto curPath : allSinkInputsList) { // qDebug() << "path: " << curPath.path(); QVariant nameV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", curPath.path(), "com.deepin.daemon.Audio.SinkInput", "Name"); if (!nameV.isValid() || nameV.toString() != Global::getAppName()) continue; d->sinkInputPath = curPath.path(); break; } } bool Player::setMusicVolume(double volume) { if (volume > 1.0) { volume = 1.000; } Q_D(Player); readSinkInputPath(); if (!d->sinkInputPath.isEmpty()) { QDBusInterface ainterface("com.deepin.daemon.Audio", d->sinkInputPath, "com.deepin.daemon.Audio.SinkInput", QDBusConnection::sessionBus()); if (!ainterface.isValid()) { return false; } //è°ƒç”¨è®¾ç½®éŸ³é‡ ainterface.call(QLatin1String("SetVolume"), volume, false); if (qFuzzyCompare(volume, 0.0)) ainterface.call(QLatin1String("SetMute"), true); } return false; } bool Player::setMusicMuted(bool muted) { Q_D(Player); readSinkInputPath(); if (!d->sinkInputPath.isEmpty()) { QDBusInterface ainterface("com.deepin.daemon.Audio", d->sinkInputPath, "com.deepin.daemon.Audio.SinkInput", QDBusConnection::sessionBus()); if (!ainterface.isValid()) { return false; } //è°ƒç”¨è®¾ç½®éŸ³é‡ ainterface.call(QLatin1String("SetMute"), muted); Q_EMIT mutedChanged(muted); } return false; } bool Player::isMusicMuted() { Q_D(Player); readSinkInputPath(); if (!d->sinkInputPath.isEmpty()) { QVariant MuteV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", d->sinkInputPath, "com.deepin.daemon.Audio.SinkInput", "Mute"); if (!MuteV.isValid()) { return false; } return MuteV.toBool(); } return false; } bool Player::isDevValid() { Q_D(Player); readSinkInputPath(); if (!d->sinkInputPath.isEmpty()) { QVariant MuteV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", d->sinkInputPath, "com.deepin.daemon.Audio.SinkInput", "Mute"); return MuteV.isValid(); } return false; } deepin-music-6.0.1.54/src/music-player/core/player.h000664 000000 000000 00000020721 13703317554 022117 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include #include #include #include "playlist.h" #include "vlc/MediaPlayer.h" class QAudioBuffer; class PlayerPrivate; class Player : public QObject, public DMusic::DSingleton { Q_OBJECT Q_PROPERTY(bool canControl READ canControl WRITE setCanControl NOTIFY canControlChanged) // Q_PROPERTY(bool canGoNext READ canGoNext WRITE setCanGoNext NOTIFY canGoNextChanged) // Q_PROPERTY(bool canGoPrevious READ canGoPrevious WRITE setCanGoPrevious NOTIFY canGoPreviousChanged) // Q_PROPERTY(bool canPause READ canPause WRITE setCanPause NOTIFY canPauseChanged) // Q_PROPERTY(bool canPlay READ canPlay WRITE setCanPlay NOTIFY canPlayChanged) // Q_PROPERTY(bool canSeek READ canSeek WRITE setCanSeek NOTIFY canSeekChanged) // Q_PROPERTY(Mpris::LoopStatus loopStatus READ loopStatus WRITE setLoopStatus NOTIFY loopStatusChanged) // Q_PROPERTY(double maximumRate READ maximumRate WRITE setMaximumRate NOTIFY maximumRateChanged) // Q_PROPERTY(QVariantMap metadata READ metadata WRITE setMetadata NOTIFY metadataChanged) // Q_PROPERTY(double minimumRate READ minimumRate WRITE setMinimumRate NOTIFY minimumRateChanged) // Q_PROPERTY(PlaybackStatus playbackStatus READ playbackStatus WRITE setPlaybackStatus NOTIFY playbackStatusChanged) Q_PROPERTY(qlonglong position READ position WRITE setPosition NOTIFY positionChanged) // Q_PROPERTY(double rate READ rate WRITE setRate NOTIFY rateChanged) // Q_PROPERTY(bool shuffle READ shuffle WRITE setShuffle NOTIFY shuffleChanged) Q_PROPERTY(double volume READ volume WRITE setVolume NOTIFY volumeChanged) Q_PROPERTY(qint64 duration READ duration NOTIFY durationChanged) Q_PROPERTY(PlaybackMode mode READ mode WRITE setMode NOTIFY modeChanged) Q_PROPERTY(bool muted READ muted WRITE setMuted NOTIFY mutedChanged) Q_PROPERTY(double fadeInOutFactor READ fadeInOutFactor WRITE setFadeInOutFactor NOTIFY fadeInOutFactorChanged) Q_PROPERTY(bool fadeInOut READ fadeInOut WRITE setFadeInOut NOTIFY fadeInOutChanged) Q_PROPERTY(bool playOnLoaded READ playOnLoaded WRITE setPlayOnLoaded NOTIFY playOnLoadedChanged) Q_ENUMS(PlaybackStatus) Q_ENUMS(PlaybackMode) Q_ENUMS(Error) public: enum PlaybackStatus { InvalidPlaybackStatus = -1, Stopped = 0, Playing, Paused, }; enum PlaybackMode { RepeatAll = 0, RepeatSingle = 1, Shuffle = 2, }; enum Error { NoError, ResourceError, FormatError, NetworkError, AccessDeniedError, ServiceMissingError, MediaIsPlaylist }; static const int VolumeStep = 10; explicit Player(QObject *parent = nullptr); ~Player(); public: void init(); void setActivePlaylist(PlaylistPtr playlist); void setCurPlaylist(PlaylistPtr curPlaylist); void loadMedia(PlaylistPtr playlist, const MetaPtr meta); void playMeta(PlaylistPtr playlist, const MetaPtr meta); void resume(PlaylistPtr playlist, const MetaPtr meta); void playNextMeta(PlaylistPtr playlist, const MetaPtr meta); void playPrevMusic(PlaylistPtr playlist, const MetaPtr meta); void pause(); void pauseNow(); void stop(); VlcMediaPlayer *core(); PlaybackStatus status(); bool isActiveMeta(MetaPtr meta) const; MetaPtr activeMeta() const; PlaylistPtr curPlaylist() const; PlaylistPtr activePlaylist() const; QStringList supportedFilterStringList()const; QStringList supportedSuffixList()const; QStringList supportedMimeTypes() const; signals: void mediaUpdate(PlaylistPtr playlist, const MetaPtr meta); void mediaPlayed(PlaylistPtr playlist, const MetaPtr meta); void mediaError(PlaylistPtr playlist, const MetaPtr meta, Player::Error error); public: bool canControl() const; // bool canGoNext() const; // bool canGoPrevious() const; // bool canPause() const; // bool canPlay() const; // bool canSeek() const; // Mpris::LoopStatus loopStatus() const; // double maximumRate() const; // QVariantMap metadata() const; // double minimumRate() const; // PlaybackStatus playbackStatus() const; qlonglong position() const; // double rate() const; // bool shuffle() const; int volume() const; PlaybackMode mode() const; bool muted(); qint64 duration() const; double fadeInOutFactor() const; bool fadeInOut() const; bool playOnLoaded() const; signals: void canControlChanged(bool canControl); // void canGoNextChanged(bool canGoNext); // void canGoPreviousChanged(bool canGoPrevious); // void canPauseChanged(bool canPause); // void canPlayChanged(bool canPlay); // void canSeekChanged(bool canSeek); // void loopStatusChanged(Mpris::LoopStatus loopStatus); // void maximumRateChanged(double maximumRate); // void metadataChanged(QVariantMap metadata); // void minimumRateChanged(double minimumRate); void playbackStatusChanged(Player::PlaybackStatus playbackStatus); void positionChanged(qlonglong position, qlonglong length, qint64 coefficient); void sliderReleased(qint64 value); // void rateChanged(double rate); // void shuffleChanged(bool shuffle); void volumeChanged(int volume); void modeChanged(PlaybackMode mode); void mutedChanged(bool muted); /************************************************ * local mute operation * *********************************************/ void localMutedChanged(); void durationChanged(qint64 duration); void fadeInOutFactorChanged(double fadeInOutFactor); void fadeInOutChanged(bool fadeInOut); void playOnLoadedChanged(bool playOnLoaded); void audioBufferProbed(const QAudioBuffer &buffer); public slots: void setCanControl(bool canControl); // void setCanGoNext(bool canGoNext); // void setCanGoPrevious(bool canGoPrevious); // void setCanPause(bool canPause); // void setCanPlay(bool canPlay); // void setCanSeek(bool canSeek); // void setLoopStatus(Mpris::LoopStatus loopStatus); // void setMaximumRate(double maximumRate); // void setMetadata(QVariantMap metadata); // void setMinimumRate(double minimumRate); // void setPlaybackStatus(PlaybackStatus playbackStatus); void setPosition(qlonglong position); // void setIOPosition(qint64 value, qint64 range); void setMode(PlaybackMode mode); // void setRate(double rate); // void setShuffle(bool shuffle); void setVolume(int volume); void setMuted(bool muted); /********************* * local mute * *********************/ void setLocalMuted(bool muted); /********************* * to dbus mute * *********************/ void setDbusMuted(bool muted = false); void setFadeInOutFactor(double fadeInOutFactor); void setFadeInOut(bool fadeInOut); void setPlayOnLoaded(bool playOnLoaded); void musicFileMiss(); void setEqualizer(bool enabled, int curIndex, QList indexbaud); void setEqualizerEnable(bool enable); void setEqualizerpre(int val); void setEqualizerbauds(int index, int val); void setEqualizerCurMode(int curIndex); /*********************************************** * if player stat is stop state or * device does not start * **********************************/ bool isValidDbusMute(); private: void readSinkInputPath(); bool setMusicVolume(double volume); bool setMusicMuted(bool muted); bool isMusicMuted(); bool isDevValid(); private: friend class DMusic::DSingleton; QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), Player) }; Q_DECLARE_METATYPE(Player::Error) Q_DECLARE_METATYPE(Player::PlaybackStatus) deepin-music-6.0.1.54/src/music-player/core/playlist.cpp000775 000000 000000 00000065040 13703317554 023025 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "playlist.h" #include #include #include #include #include #include #include "../core/metasearchservice.h" #include "util/pinyinsearch.h" #include "medialibrary.h" #include "mediadatabase.h" static QCollator collator; Playlist::Playlist(const PlaylistMeta &musiclistinfo, QObject *parent) : QObject(parent) { playlistMeta = musiclistinfo; shuffleSeed = static_cast(QTime::currentTime().msecsSinceStartOfDay()); } const MetaPtr Playlist::first() const { return playlistMeta.metas.value(playlistMeta.sortMetas.value(0)); } const MetaPtr Playlist::prev(const MetaPtr meta) const { if (0 == playlistMeta.sortMetas.length() || meta.isNull()) { return MetaPtr(); } auto index = playlistMeta.sortMetas.indexOf(meta->hash); auto prev = (index + playlistMeta.sortMetas.length() - 1) % playlistMeta.sortMetas.length(); return playlistMeta.metas.value(playlistMeta.sortMetas.at(prev)); } const MetaPtr Playlist::next(const MetaPtr meta) const { if (0 == playlistMeta.sortMetas.length() || meta.isNull()) { return MetaPtr(); } auto index = playlistMeta.sortMetas.indexOf(meta->hash); auto prev = (index + 1) % playlistMeta.sortMetas.length(); return playlistMeta.metas.value(playlistMeta.sortMetas.at(prev)); } const MetaPtrList shuffle(MetaPtrList &&musiclist, int seed) { auto size = musiclist.size(); auto mid = size / 2; // Preprocess: reorder musiclist with seed // to make sure music in the first half and second half is different every playlist // and same in the same playlist: for shuffle uniformity for (auto i = 0; i < size; ++i) musiclist.swap(i, seed % size); for (auto i = 0; i < mid; ++i) musiclist.swap(i, std::rand() % mid); for (auto i = mid; i < size; ++i) musiclist.swap(i, mid + (std::rand() % (size - mid))); return musiclist; } const MetaPtr Playlist::shuffleNext(const MetaPtr meta) { if (0 == playlistMeta.sortMetas.length() || meta.isNull()) { return MetaPtr(); } if (shuffleList.isEmpty()) { shuffleList = shuffle(allmusic(), shuffleSeed); } if (meta == shuffleList.last()) return shuffleTurn(true); auto offset = shuffleList.indexOf(meta) + 1; // just ignore removed music for (auto i = shuffleList.begin() + offset; i < shuffleList.end(); ++i) if (contains(*i)) return *i; return shuffleTurn(true); } const MetaPtr Playlist::shufflePrev(const MetaPtr meta) { if (0 == playlistMeta.sortMetas.length() || meta.isNull()) { return MetaPtr(); } if (shuffleList.isEmpty()) { shuffleList = shuffle(allmusic(), shuffleSeed); } if (meta == shuffleList.first()) return shuffleTurn(false); auto offset = shuffleList.length() - shuffleList.indexOf(meta); for (auto i = shuffleList.rbegin() + offset; i < shuffleList.rend(); ++i) if (contains(*i)) return *i; return shuffleTurn(false); } const MetaPtr Playlist::shuffleTurn(bool forward) { std::swap(shuffleList, shuffleHistory); switch (shuffleHistoryState) { case ShuffleHistoryState::Empty: shuffleList = shuffle(allmusic(), shuffleSeed); break; case ShuffleHistoryState::Prev: if (forward) shuffleList = shuffle(allmusic(), shuffleSeed); break; case ShuffleHistoryState::Next: if (!forward) shuffleList = shuffle(allmusic(), shuffleSeed); break; } shuffleHistoryState = forward ? ShuffleHistoryState::Prev : ShuffleHistoryState::Next; return forward ? shuffleList.first() : shuffleList.last(); } const MetaPtr Playlist::music(int index) const { return playlistMeta.metas.value(playlistMeta.sortMetas.value(index)); } const MetaPtr Playlist::music(const QString &id) const { return playlistMeta.metas.value(id); } const MetaPtr Playlist::playing() const { return playlistMeta.playing; } bool Playlist::playingStatus() const { return playlistMeta.playStatus; } void Playlist::setPlayingStatus(bool status) { playlistMeta.playStatus = status; } int Playlist::index(const QString &hash) { // FIXME: improve performance return playlistMeta.sortMetas.indexOf(hash); } bool Playlist::isLast(const MetaPtr meta) const { Q_ASSERT(!meta.isNull()); return playlistMeta.sortMetas.isEmpty() ? false : playlistMeta.sortMetas.last() == meta->hash; } bool Playlist::contains(const MetaPtr meta) const { // qDebug() << meta->hash << playlistMeta.metas; return !meta.isNull() && playlistMeta.metas.contains(meta->hash); } QString Playlist::id() const { return playlistMeta.uuid; } QString Playlist::displayName() const { return playlistMeta.displayName; } QString Playlist::icon() const { return playlistMeta.icon; } bool Playlist::readonly() const { return playlistMeta.readonly; } bool Playlist::editmode() const { return playlistMeta.editmode; } bool Playlist::hide() const { return playlistMeta.hide; } bool Playlist::isEmpty() const { return playlistMeta.metas.isEmpty(); } bool Playlist::canNext() const { return playlistMeta.invalidMetas.size() < playlistMeta.metas.size() && playlistMeta.metas.size() > 0; } bool Playlist::active() const { return playlistMeta.active; } int Playlist::length() const { return playlistMeta.metas.size(); } void Playlist::play(const MetaPtr meta) { if (contains(meta)) { playlistMeta.active = true; playlistMeta.playing = meta; } else { playlistMeta.active = false; playlistMeta.playing = MetaPtr(); } } int Playlist::sortType() const { return playlistMeta.sortType; } uint Playlist::sortID() const { return playlistMeta.sortID; } void Playlist::setActive(bool active) { playlistMeta.active = active; } MetaPtrList Playlist::allmusic() const { MetaPtrList mlist; for (auto id : playlistMeta.sortMetas) { mlist << playlistMeta.metas.value(id); } return mlist; } PlayMusicTypePtrList Playlist::playMusicTypePtrList() const { PlayMusicTypePtrList mlist; for (auto id : playMusicTypePtrListData.sortMetas) { mlist << playMusicTypePtrListData.metas.value(id); } return mlist; } void Playlist::reset(const MetaPtrList metalist) { playlistMeta.sortMetas.clear(); playlistMeta.metas.clear(); playlistMeta.invalidMetas.clear(); for (auto &meta : metalist) { playlistMeta.sortMetas << meta->hash; playlistMeta.metas.insert(meta->hash, meta); } } void Playlist::changePlayMusicTypeOrderType() { playMusicTypePtrListData.orderType = playMusicTypePtrListData.orderType == 0 ? 1 : 0; } void Playlist::setSearchStr(const QString &str) { searchData = str; } QString Playlist::searchStr() const { return searchData; } void Playlist::setViewMode(const int &mode) { viewModeFlag = mode; } int Playlist::viewMode() const { return viewModeFlag; } void Playlist::clearTypePtr() { if (playMusicTypePtrListData.sortMetas.size() > 0) { playMusicTypePtrListData.sortMetas.clear(); playMusicTypePtrListData.metas.clear(); } } void Playlist::appendMusicTypePtrListData(PlayMusicTypePtr musicTypePtr) { playMusicTypePtrListData.sortMetas.append(musicTypePtr->name); playMusicTypePtrListData.metas.insert(musicTypePtr->name, musicTypePtr); } void Playlist::load() { QMap sortHashs; QSqlQuery query; query.prepare(QString("SELECT music_id, sort_id FROM playlist_%1").arg(playlistMeta.uuid)); if (!query.exec()) { qWarning() << query.lastError(); return; } QStringList toAppendMusicHashs; while (query.next()) { auto musicID = query.value(0).toString(); auto sortID = query.value(1).toInt(); if (!sortHashs.contains(sortID)) { sortHashs.insert(sortID, musicID); } else { toAppendMusicHashs << musicID; } } // remove invalid meta auto sortIDs = sortHashs.keys(); qSort(sortIDs.begin(), sortIDs.end()); playlistMeta.sortMetas.clear(); for (auto sortID : sortIDs) { playlistMeta.sortMetas << sortHashs.value(sortID); } playlistMeta.sortMetas << toAppendMusicHashs; QStringList toRemoveMusicHashs; for (auto hash : playlistMeta.sortMetas) { auto meta = MediaLibrary::instance()->meta(hash); if (meta.isNull()) { toRemoveMusicHashs << hash; continue; } playlistMeta.metas.insert(hash, meta); if (meta->invalid) { playlistMeta.invalidMetas.insert(hash, 1); } else { playlistMeta.invalidMetas.remove(hash); } } for (auto removeHash : toRemoveMusicHashs) { playlistMeta.sortMetas.removeOne(removeHash); } if (!toAppendMusicHashs.isEmpty() || !toRemoveMusicHashs.isEmpty()) { QMap hashIndexs; for (auto i = 0; i < playlistMeta.sortMetas.length(); ++i) { hashIndexs.insert(playlistMeta.sortMetas.value(i), i); } this->saveSort(hashIndexs); } } void Playlist::setDisplayName(const QString &name) { playlistMeta.displayName = name; QSqlDatabase::database().transaction(); QSqlQuery query; query.prepare("UPDATE playlist SET displayname = :displayname WHERE uuid= :uuid"); query.bindValue(":displayname", playlistMeta.displayName); query.bindValue(":uuid", playlistMeta.uuid); if (!query.exec()) { qWarning() << query.lastError(); return; } QSqlDatabase::database().commit(); } void Playlist::appendMusicList(const MetaPtrList metalist) { MetaPtrList newMetalist; for (auto meta : metalist) { // TODO: Get called multiple times, maybe because multi-thread. Should find out why. if (playlistMeta.metas.contains(meta->hash)) { qDebug() << "skip dump music " << meta->hash << meta->localPath; continue; } newMetalist << meta; playlistMeta.sortMetas << meta->hash; playlistMeta.metas.insert(meta->hash, meta); } Q_EMIT MediaDatabase::instance()->insertMusicList(newMetalist, this->playlistMeta); Q_EMIT musiclistAdded(newMetalist); } void Playlist::updateMeta(const MetaPtr meta) { Q_ASSERT(!meta.isNull()); if (!playlistMeta.metas.contains(meta->hash)) { // qWarning() << "no such id in playlist" << meta->hash << meta->localPath << listmeta->displayName; return; } playlistMeta.metas.insert(meta->hash, meta); // TODO : check and update; if (meta->invalid) { playlistMeta.invalidMetas.insert(meta->hash, 1); } else { playlistMeta.invalidMetas.remove(meta->hash); } } MetaPtr Playlist::removeMusicList(const MetaPtrList metalist) { MetaPtr next; QSqlDatabase::database().transaction(); for (auto &meta : metalist) { next = removeOneMusic(meta); } QSqlDatabase::database().commit(); Q_EMIT musiclistRemoved(metalist); return next; } MetaPtr Playlist::removeOneMusic(const MetaPtr meta) { // Q_ASSERT(!meta.isNull()); if (meta.isNull()) return MetaPtr(); if (meta->hash.isEmpty()) { qCritical() << "Cannot remove empty id" << meta->hash << meta->title; return MetaPtr(); } if (id() == AlbumMusicListID) { QString albumStr = meta->album; if (albumStr.isEmpty()) { albumStr = tr("Unknown album"); } if (playMusicTypePtrListData.metas.contains(albumStr)) { playMusicTypePtrListData.metas[albumStr]->playlistMeta.sortMetas.removeOne(meta->hash); playMusicTypePtrListData.metas[albumStr]->playlistMeta.metas.remove(meta->hash); if (playMusicTypePtrListData.metas[albumStr]->playlistMeta.metas.isEmpty()) { playMusicTypePtrListData.sortMetas.removeOne(albumStr); playMusicTypePtrListData.metas.remove(albumStr); } } } else if (id() == ArtistMusicListID) { QString artistStr = meta->artist; if (artistStr.isEmpty()) { artistStr = tr("Unknown artist"); } if (playMusicTypePtrListData.metas.contains(artistStr)) { playMusicTypePtrListData.metas[artistStr]->playlistMeta.sortMetas.removeOne(meta->hash); playMusicTypePtrListData.metas[artistStr]->playlistMeta.metas.remove(meta->hash); if (playMusicTypePtrListData.metas[artistStr]->playlistMeta.metas.isEmpty()) { playMusicTypePtrListData.sortMetas.removeOne(artistStr); playMusicTypePtrListData.metas.remove(artistStr); } } } if (!playlistMeta.metas.contains(meta->hash)) { // qWarning() << "no such id in playlist" << meta->hash << meta->localPath << listmeta->displayName; return MetaPtr(); } if (!playlistMeta.playing.isNull() && playlistMeta.playing->hash == meta->hash) { playlistMeta.playing = MetaPtr(); } MetaPtr nextMeta; auto nextPos = playlistMeta.sortMetas.lastIndexOf(meta->hash) + 1; if (playlistMeta.sortMetas.length() > nextPos) { nextMeta = playlistMeta.metas.value(playlistMeta.sortMetas.value(nextPos)); } int ret = playlistMeta.sortMetas.removeAll(meta->hash); Q_ASSERT(ret == 1); playlistMeta.metas.remove(meta->hash); playlistMeta.invalidMetas.remove(meta->hash); MediaDatabase::deleteMusic(meta, playlistMeta); return nextMeta; } inline bool startWithHanzi(const QString &text) { const QVector list = text.toUcs4(); return !list.isEmpty() && list.first() >= 0x4e00 && list.first() <= 0x9fbf; } bool lessCompareByString(const QString &str1, const QString &str2) { // if (startWithHanzi(str1)) { // if (!startWithHanzi(str2)) { // return false; // } // } else if (startWithHanzi(str2)) { // return true; // } QString curStr1(str1), curStr2(str2); QStringList strList1 = DMusic::PinyinSearch::simpleChineseSplit(curStr1); QStringList strList2 = DMusic::PinyinSearch::simpleChineseSplit(curStr2); QString endStr1 = strList1.join(""), enStr2 = strList2.join(""); return collator.compare(endStr1, enStr2) < 0; } bool lessThanTimestamp(const MetaPtr v1, const MetaPtr v2) { Q_ASSERT(!v1.isNull()); Q_ASSERT(!v2.isNull()); return v1->timestamp < v2->timestamp; } bool moreThanTimestamp(const MetaPtr v1, const MetaPtr v2) { return !lessThanTimestamp(v1, v2); } bool lessThanTitle(const MetaPtr v1, const MetaPtr v2) { Q_ASSERT(!v1.isNull()); Q_ASSERT(!v2.isNull()); if (v1->title.isEmpty()) { return false; } if (v2->title.isEmpty()) { return true; } // qDebug() << v1->title << v2->title << collator.compare(v1->title , v2->title); return lessCompareByString(v1->title, v2->title); } bool moreThanTitle(const MetaPtr v1, const MetaPtr v2) { return !lessThanTitle(v1, v2); } bool lessThanArtist(const MetaPtr v1, const MetaPtr v2) { Q_ASSERT(!v1.isNull()); Q_ASSERT(!v2.isNull()); if (v1->artist.isEmpty()) { return false; } if (v2->artist.isEmpty()) { return true; } return lessCompareByString(v1->artist, v2->artist); } bool moreThanArtist(const MetaPtr v1, const MetaPtr v2) { return !lessThanArtist(v1, v2); } bool lessThanAblum(const MetaPtr v1, const MetaPtr v2) { Q_ASSERT(!v1.isNull()); Q_ASSERT(!v2.isNull()); if (v1->album.isEmpty()) { return false; } if (v2->album.isEmpty()) { return true; } return lessCompareByString(v1->album, v2->album); } bool moreThanAblum(const MetaPtr v1, const MetaPtr v2) { return !lessThanAblum(v1, v2); } typedef bool (*LessThanFunctionPtr)(const MetaPtr v1, const MetaPtr v2); LessThanFunctionPtr getSortFunction(Playlist::SortType sortType, Playlist::OrderType orderType) { switch (orderType) { case Playlist::Ascending: switch (sortType) { case Playlist::SortByAddTime : return &lessThanTimestamp; case Playlist::SortByTitle : return &lessThanTitle; case Playlist::SortByArtist : return &lessThanArtist; case Playlist::SortByAblum : return &lessThanAblum; case Playlist::SortByCustom: return &lessThanTimestamp; } break; case Playlist::Descending: switch (sortType) { case Playlist::SortByAddTime : return &moreThanTimestamp; case Playlist::SortByTitle : return &moreThanTitle; case Playlist::SortByArtist : return &moreThanArtist; case Playlist::SortByAblum : return &moreThanAblum; case Playlist::SortByCustom: return &moreThanTimestamp; } break; } qCritical() << "show not sort by invalid typr" << sortType << orderType; return &lessThanTitle; } void Playlist::sortBy(Playlist::SortType sortType) { if (playlistMeta.sortType == sortType) { if (playlistMeta.orderType == Playlist::Ascending) { playlistMeta.orderType = Playlist::Descending ; } else { playlistMeta.orderType = Playlist::Ascending; } } else { playlistMeta.orderType = Playlist::Ascending; playlistMeta.sortType = sortType; } MediaDatabase::updatePlaylist(playlistMeta); resort(); } void Playlist::sortPlayMusicTypePtrListData(int sortType) { QList sortList; for (auto id : playMusicTypePtrListData.metas.keys()) { sortList << playMusicTypePtrListData.metas.value(id); } if (playMusicTypePtrListData.orderType == 0) { if (sortType == 0) { qSort(sortList.begin(), sortList.end(), [ = ](PlayMusicTypePtr p1, PlayMusicTypePtr p2) { return lessCompareByString(p1->name, p2->name); }); } else { qSort(sortList.begin(), sortList.end(), [ = ](PlayMusicTypePtr p1, PlayMusicTypePtr p2) { return p1->timestamp < p2->timestamp; }); } } else { if (sortType == 0) { qSort(sortList.begin(), sortList.end(), [ = ](PlayMusicTypePtr p1, PlayMusicTypePtr p2) { return !lessCompareByString(p1->name, p2->name); }); } else { qSort(sortList.begin(), sortList.end(), [ = ](PlayMusicTypePtr p1, PlayMusicTypePtr p2) { return p1->timestamp > p2->timestamp; }); } } playMusicTypePtrListData.sortMetas.clear(); for (auto i = 0; i < sortList.size(); ++i) { playMusicTypePtrListData.sortMetas << sortList[i]->name; } } void Playlist::resort() { if (playlistMeta.uuid != AlbumMusicListID || playlistMeta.uuid != ArtistMusicListID) { collator.setNumericMode(true); collator.setCaseSensitivity(Qt::CaseInsensitive); auto sortType = static_cast(playlistMeta.sortType); auto orderType = static_cast(playlistMeta.orderType); if (sortType != Playlist::SortByCustom) { QList sortList; for (auto id : playlistMeta.metas.keys()) { // qDebug() << playlistMeta.metas.value(id) << id; sortList << playlistMeta.metas.value(id); } qSort(sortList.begin(), sortList.end(), getSortFunction(sortType, orderType)); QMap hashIndexs; for (auto i = 0; i < sortList.length(); ++i) { hashIndexs.insert(sortList.value(i)->hash, i); } saveSort(hashIndexs); } } } void Playlist::saveSort(QMap hashIndexs) { QSqlDatabase::database().transaction(); QMap sortHashs; for (auto hash : hashIndexs.keys()) { QSqlQuery query; query.prepare(QString("UPDATE playlist_%1 SET sort_id = :sort_id WHERE music_id = :music_id; ").arg(playlistMeta.uuid)); query.bindValue(":sort_id", hashIndexs.value(hash)); query.bindValue(":music_id", hash); if (! query.exec()) { qDebug() << query.lastError(); } sortHashs.insert(hashIndexs.value(hash), hash); } QSqlDatabase::database().commit(); playlistMeta.sortMetas.clear(); for (auto i = 0; i < sortHashs.size(); ++i) { playlistMeta.sortMetas << sortHashs.value(i); } } void Playlist::metaListToPlayMusicTypePtrList(Playlist::SortType sortType, const MetaPtrList metalist) { playMusicTypePtrListData.sortMetas.clear(); playMusicTypePtrListData.metas.clear(); if (sortType == SortByAblum) { for (auto meta : metalist) { QString albumStr = meta->album; if (albumStr.isEmpty()) { albumStr = tr("Unknown album"); } QString artistStr = meta->artist; if (artistStr.isEmpty()) { artistStr = tr("Unknown artist"); } if (playMusicTypePtrListData.metas.contains(albumStr)) { if (playMusicTypePtrListData.metas[albumStr]->playlistMeta.metas.contains(meta->hash)) { qDebug() << "skip dump music " << meta->hash << meta->localPath; continue; } if (!playMusicTypePtrListData.metas[albumStr]->extraName.contains(artistStr, Qt::CaseInsensitive)) playMusicTypePtrListData.metas[albumStr]->extraName += ("&" + artistStr); if (playMusicTypePtrListData.metas[albumStr]->icon.isNull()) playMusicTypePtrListData.metas[albumStr]->icon = MetaSearchService::coverData(meta); if (playMusicTypePtrListData.metas[albumStr]->timestamp < meta->timestamp) playMusicTypePtrListData.metas[albumStr]->timestamp = meta->timestamp; playMusicTypePtrListData.metas[albumStr]->playlistMeta.sortMetas << meta->hash; playMusicTypePtrListData.metas[albumStr]->playlistMeta.metas.insert(meta->hash, meta); } else { PlayMusicTypePtr t_playMusicTypePtr(new PlayMusicType); t_playMusicTypePtr->name = albumStr; t_playMusicTypePtr->extraName = artistStr; t_playMusicTypePtr->icon = MetaSearchService::coverData(meta); t_playMusicTypePtr->timestamp = meta->timestamp; t_playMusicTypePtr->playlistMeta.sortMetas << meta->hash; t_playMusicTypePtr->playlistMeta.metas.insert(meta->hash, meta); playMusicTypePtrListData.sortMetas << albumStr; playMusicTypePtrListData.metas.insert(albumStr, t_playMusicTypePtr); } } } else if (sortType == SortByArtist) { for (auto meta : metalist) { QString artistStr = meta->artist; if (artistStr.isEmpty()) { artistStr = tr("Unknown artist"); } if (playMusicTypePtrListData.metas.contains(artistStr)) { if (playMusicTypePtrListData.metas[artistStr]->playlistMeta.metas.contains(meta->hash)) { qDebug() << "skip dump music " << meta->hash << meta->localPath; continue; } if (playMusicTypePtrListData.metas[artistStr]->icon.isNull()) playMusicTypePtrListData.metas[artistStr]->icon = MetaSearchService::coverData(meta); if (playMusicTypePtrListData.metas[artistStr]->timestamp < meta->timestamp) playMusicTypePtrListData.metas[artistStr]->timestamp = meta->timestamp; playMusicTypePtrListData.metas[artistStr]->playlistMeta.sortMetas << meta->hash; playMusicTypePtrListData.metas[artistStr]->playlistMeta.metas.insert(meta->hash, meta); } else { PlayMusicTypePtr t_playMusicTypePtr(new PlayMusicType); t_playMusicTypePtr->name = artistStr; t_playMusicTypePtr->icon = MetaSearchService::coverData(meta); t_playMusicTypePtr->timestamp = meta->timestamp; t_playMusicTypePtr->playlistMeta.sortMetas << meta->hash; t_playMusicTypePtr->playlistMeta.metas.insert(meta->hash, meta); playMusicTypePtrListData.sortMetas << artistStr; playMusicTypePtrListData.metas.insert(artistStr, t_playMusicTypePtr); } } } sortPlayMusicTypePtrListData(playMusicTypePtrListData.sortType); } void Playlist::playMusicTypeToMeta(QString name, QStringList sortMetas) { //removeMusicList(allmusic()); playlistMeta.sortMetas.clear(); playlistMeta.metas.clear(); MetaPtrList mlist; for (auto meta : playMusicTypePtrListData.metas) { if (name.isEmpty() || name == meta->name) { for (auto hashCode : meta->playlistMeta.sortMetas) { if (meta->playlistMeta.metas[hashCode] != nullptr) { mlist << meta->playlistMeta.metas[hashCode]; } } } } // appendMusicList(mlist); MetaPtrList newMetalist; for (auto meta : mlist) { // TODO: Get called multiple times, maybe because multi-thread. Should find out why. if (playlistMeta.metas.contains(meta->hash)) { qDebug() << "skip dump music " << meta->hash << meta->localPath; continue; } newMetalist << meta; playlistMeta.sortMetas << meta->hash; playlistMeta.metas.insert(meta->hash, meta); } if (!name.isEmpty() && sortMetas.size() == playlistMeta.sortMetas.size()) { bool allFlag = true; for (auto curStr : playlistMeta.sortMetas) { if (!sortMetas.contains(curStr)) { allFlag = false; break; } } if (allFlag) { playlistMeta.sortMetas = sortMetas; } } Q_EMIT MediaDatabase::instance()->insertMusicList(newMetalist, this->playlistMeta); } deepin-music-6.0.1.54/src/music-player/core/playlist.h000775 000000 000000 00000012417 13703317554 022472 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include class PlayMusicType { public: QString name; QString extraName; QByteArray icon; qint64 timestamp = 0; // addTime; PlaylistMeta playlistMeta; }; typedef QSharedPointer PlayMusicTypePtr; typedef QList PlayMusicTypePtrList; class PlayMusicTypePtrListData { public: QStringList sortMetas; QMap metas; int sortType = 0; int orderType = 0; }; Q_DECLARE_METATYPE(PlayMusicType) Q_DECLARE_METATYPE(PlayMusicTypePtr) Q_DECLARE_METATYPE(PlayMusicTypePtrList) Q_DECLARE_METATYPE(PlayMusicTypePtrListData) class Playlist : public QObject { Q_OBJECT Q_PROPERTY(QString displayName READ displayName WRITE setDisplayName NOTIFY displayNameChanged) Q_PROPERTY(bool active READ active WRITE setActive) public: explicit Playlist(const PlaylistMeta &musiclistinfo, QObject *parent = nullptr); enum SortType { SortByAddTime = 0, SortByTitle, SortByArtist, SortByAblum, SortByCustom, }; Q_ENUM(SortType) enum OrderType { Ascending = 0, Descending, }; Q_ENUM(OrderType) public: //! public interface QString id() const; QString displayName() const; QString icon() const; bool readonly() const; bool editmode() const; bool hide() const; bool isEmpty() const; bool canNext() const; int length() const; int sortType() const; uint sortID() const; bool active() const; void setActive(bool active); const MetaPtr first() const; const MetaPtr prev(const MetaPtr meta) const; const MetaPtr next(const MetaPtr info) const; const MetaPtr shufflePrev(const MetaPtr meta); const MetaPtr shuffleNext(const MetaPtr meta); const MetaPtr music(int index) const; const MetaPtr music(const QString &id) const; const MetaPtr playing() const; bool playingStatus() const; void setPlayingStatus(bool Status); int index(const QString &hash); bool isLast(const MetaPtr meta) const; bool contains(const MetaPtr meta) const; MetaPtrList allmusic() const; PlayMusicTypePtrList playMusicTypePtrList() const; void play(const MetaPtr meta); void reset(const MetaPtrList); void changePlayMusicTypeOrderType(); void setSearchStr(const QString &str); QString searchStr() const; void setViewMode(const int &mode); int viewMode() const; void clearTypePtr(); void appendMusicTypePtrListData(PlayMusicTypePtr musicTypePtr); public slots: void setDisplayName(const QString &name); void appendMusicList(const MetaPtrList metalist); MetaPtr removeMusicList(const MetaPtrList metalist); MetaPtr removeOneMusic(const MetaPtr meta); void updateMeta(const MetaPtr meta); void sortBy(Playlist::SortType sortType); void resort(); void saveSort(QMap hashIndexs); void metaListToPlayMusicTypePtrList(Playlist::SortType sortType, const MetaPtrList metalist); void playMusicTypeToMeta(QString name = "", QStringList sortMetas = QStringList()); void sortPlayMusicTypePtrListData(int sortType); public: void load(); signals: void musiclistAdded(const MetaPtrList metalist); void musiclistRemoved(const MetaPtrList metalist); void removed(); void displayNameChanged(QString displayName); private: Q_DISABLE_COPY(Playlist) enum class ShuffleHistoryState { Empty, Prev, Next, }; PlaylistMeta playlistMeta; PlayMusicTypePtrListData playMusicTypePtrListData; MetaPtrList shuffleList; MetaPtrList shuffleHistory; ShuffleHistoryState shuffleHistoryState = ShuffleHistoryState::Empty; int shuffleSeed; QString searchData; int viewModeFlag = 0; const MetaPtr shuffleTurn(bool forward); }; typedef QSharedPointer PlaylistPtr; Q_DECLARE_METATYPE(PlaylistPtr) Q_DECLARE_METATYPE(QList) extern const QString AlbumMusicListID; extern const QString ArtistMusicListID; extern const QString AllMusicListID; extern const QString FavMusicListID; extern const QString SearchMusicListID; extern const QString PlayMusicListID; extern const QString AlbumCandListID; extern const QString MusicCandListID; extern const QString ArtistCandListID; extern const QString AlbumResultListID; extern const QString MusicResultListID; extern const QString ArtistResultListID; deepin-music-6.0.1.54/src/music-player/core/playlistmanager.cpp000775 000000 000000 00000024335 13703317554 024362 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "playlistmanager.h" #include #include #include #include #include #include "mediadatabase.h" const QString AlbumMusicListID = "album"; const QString ArtistMusicListID = "artist"; const QString AllMusicListID = "all"; const QString FavMusicListID = "fav"; const QString PlayMusicListID = "play"; const QString MusicCandListID = "musicCand"; const QString AlbumCandListID = "albumCand"; const QString ArtistCandListID = "artistCand"; const QString MusicResultListID = "musicResult"; const QString AlbumResultListID = "albumResult"; const QString ArtistResultListID = "artistResult"; const QString SearchMusicListID = "search"; const QString NewMusicListID = "new"; static PlaylistMeta emptyInfo; class PlaylistManagerPrivate { public: PlaylistManagerPrivate(PlaylistManager *parent) : q_ptr(parent) {} inline uint indexUUID(const QString &uuid) { return static_cast(sortUUIDs.indexOf(uuid)); } QStringList sortUUIDs; QMap playlists; PlaylistManager *q_ptr; Q_DECLARE_PUBLIC(PlaylistManager) }; PlaylistManager::PlaylistManager(QObject *parent) : QObject(parent), d_ptr(new PlaylistManagerPrivate(this)) { } PlaylistManager::~PlaylistManager() { } QString PlaylistManager::newID() { return QUuid::createUuid().toString().remove("{").remove("}").remove("-"); } QString PlaylistManager::newDisplayName() { QMap existName; for (auto &name : MediaDatabase::allPlaylistDisplayName()) { existName.insert(name, name); } QString temp = tr("New playlist"); if (!existName.contains(temp)) { return temp; } int i = 1; for (i = 1; i < existName.size() + 1; ++i) { QString newName = QString("%1 %2").arg(temp).arg(i); if (!existName.contains(newName)) { return newName; } } return QString("%1 %2").arg(temp).arg(i); } void PlaylistManager::load() { Q_D(PlaylistManager); for (auto &playlistmeta : MediaDatabase::instance()->allPlaylistMeta()) { PlaylistPtr emptylist(new Playlist(playlistmeta)); emptylist->load(); insertPlaylist(playlistmeta.uuid, emptylist); } QMap sortUUIDs; for (auto playlist : d->playlists) { sortUUIDs.insert(playlist->sortID(), playlist->id()); } QSqlDatabase::database().transaction(); if (sortUUIDs.size() <= d->playlists.size()) { qWarning() << "playlist order crash, restrot"; d->sortUUIDs.clear(); d->sortUUIDs << AlbumMusicListID << ArtistMusicListID << AllMusicListID << FavMusicListID << PlayMusicListID << MusicCandListID << AlbumCandListID << ArtistCandListID << MusicResultListID << AlbumResultListID << ArtistResultListID << SearchMusicListID << NewMusicListID; QStringList sortUUIDs; for (auto playlist : d->playlists.values()) { sortUUIDs << playlist->id(); } sortUUIDs.removeAll(AlbumMusicListID); sortUUIDs.removeAll(ArtistMusicListID); sortUUIDs.removeAll(AllMusicListID); sortUUIDs.removeAll(FavMusicListID); sortUUIDs.removeAll(PlayMusicListID); sortUUIDs.removeAll(MusicCandListID); sortUUIDs.removeAll(AlbumCandListID); sortUUIDs.removeAll(ArtistCandListID); sortUUIDs.removeAll(MusicResultListID); sortUUIDs.removeAll(AlbumResultListID); sortUUIDs.removeAll(ArtistResultListID); sortUUIDs.removeAll(SearchMusicListID); sortUUIDs.removeAll(NewMusicListID); d->sortUUIDs << sortUUIDs; saveSortOrder(); } else { for (auto sortID = 0; sortID < sortUUIDs.size(); ++sortID) { d->sortUUIDs << sortUUIDs.value(static_cast(sortID)); } } auto album = playlist(AlbumMusicListID); auto trAlbumName = tr("Albums"); if (!album.isNull() && album->displayName() != trAlbumName) { album->setDisplayName(trAlbumName); } auto artist = playlist(ArtistMusicListID); auto trArtistName = tr("Artists"); if (!artist.isNull() && artist->displayName() != trArtistName) { artist->setDisplayName(trArtistName); } auto all = playlist(AllMusicListID); auto trAllName = tr("All Music"); if (!all.isNull() && all->displayName() != trAllName) { all->setDisplayName(trAllName); } auto fav = playlist(FavMusicListID); auto trFavName = tr("My favorites"); if (!fav.isNull() && fav->displayName() != trFavName) { fav->setDisplayName(trFavName); } auto search = playlist(SearchMusicListID); auto searchName = tr("Search result"); if (!search.isNull() && search->displayName() != searchName) { search->setDisplayName(searchName); } auto play = playlist(PlayMusicListID); auto playName = tr("Play"); if (!play.isNull() && play->displayName() != playName) { play->setDisplayName(playName); } auto musicCand = playlist(MusicCandListID); auto strMusic = tr("All Music"); if (!musicCand.isNull() && musicCand->displayName() != playName) { musicCand->setDisplayName(strMusic); } auto albumCand = playlist(AlbumCandListID); auto strAlbum = tr("Albums"); if (!albumCand.isNull() && albumCand->displayName() != playName) { albumCand->setDisplayName(strAlbum); } auto artistCand = playlist(ArtistCandListID); auto strArtist = tr("Artists"); if (!artistCand.isNull() && artistCand->displayName() != playName) { artistCand->setDisplayName(strArtist); } auto musicResult = playlist(MusicResultListID); auto resMusic = tr("Music"); if (!musicResult.isNull() && musicResult->displayName() != playName) { musicResult->setDisplayName(resMusic); } auto albumResult = playlist(AlbumResultListID); auto resAlbum = tr("Albums"); if (!albumResult.isNull() && albumResult->displayName() != playName) { albumResult->setDisplayName(resAlbum); } auto artistResult = playlist(ArtistResultListID); auto resArtist = tr("Artists"); if (!artistResult.isNull() && artistResult->displayName() != playName) { artistResult->setDisplayName(resArtist); } QSqlDatabase::database().commit(); } void PlaylistManager::saveSortOrder() { Q_D(PlaylistManager); qDebug() << d->sortUUIDs; for (int sortID = 0; sortID < d->sortUUIDs.length(); ++sortID) { auto uuid = d->sortUUIDs.value(sortID); QSqlQuery query; query.prepare(QString("UPDATE playlist SET sort_id = :sort_id WHERE uuid = :uuid; ")); query.bindValue(":sort_id", sortID); query.bindValue(":uuid", uuid); if (! query.exec()) { qDebug() << query.lastError(); } } } QList PlaylistManager::allplaylist() { Q_D(PlaylistManager); QList list; for (auto &uuid : d->sortUUIDs) { if (d->playlists.value(uuid) != nullptr) list << d->playlists.value(uuid); } return list; } PlaylistPtr PlaylistManager::addPlaylist(const PlaylistMeta &listinfo) { Q_D(PlaylistManager); PlaylistMeta saveInfo(listinfo); saveInfo.sortID = static_cast( d->sortUUIDs.length()); d->sortUUIDs << saveInfo.uuid; insertPlaylist(listinfo.uuid, PlaylistPtr(new Playlist(saveInfo))); MediaDatabase::addPlaylist(saveInfo); return d->playlists.value(listinfo.uuid); } void PlaylistManager::onCustomResort(QStringList uuids) { Q_D(PlaylistManager); Q_ASSERT(uuids.length() == d->playlists.size() - 1); uuids.push_front(playlist(SearchMusicListID)->id()); d->sortUUIDs.clear(); for (auto sortID = 0; sortID < uuids.length(); ++sortID) { d->sortUUIDs << uuids.value(sortID); } QSqlDatabase::database().transaction(); saveSortOrder(); QSqlDatabase::database().commit(); } PlaylistPtr PlaylistManager::playlist(const QString &id) { Q_D(PlaylistManager); return d->playlists.value(id); } void PlaylistManager::insertPlaylist(const QString &uuid, PlaylistPtr playlist) { Q_D(PlaylistManager); QString deleteID = uuid; d->playlists.insert(uuid, playlist); connect(playlist.data(), &Playlist::removed, this, [ = ] { qDebug() << "remove playlist" << deleteID << d->playlists.size(); Q_EMIT playlistRemove(playlist); d->playlists.remove(uuid); d->sortUUIDs.removeAll(uuid); PlaylistMeta listmeta; listmeta.uuid = deleteID; QSqlDatabase::database().transaction(); MediaDatabase::removePlaylist(listmeta); saveSortOrder(); QSqlDatabase::database().commit(); }); connect(playlist.data(), &Playlist::displayNameChanged, this, [ = ] (QString displayName) { QSqlDatabase::database().transaction(); playlist.data()->setDisplayName(displayName); QSqlDatabase::database().commit(); }); connect(playlist.data(), &Playlist::musiclistAdded, this, [ = ](const MetaPtrList metalist) { Q_EMIT musiclistAdded(playlist, metalist); }); connect(playlist.data(), &Playlist::musiclistRemoved, this, [ = ](const MetaPtrList metalist) { Q_EMIT musiclistRemoved(playlist, metalist); }); } deepin-music-6.0.1.54/src/music-player/core/playlistmanager.h000664 000000 000000 00000003301 13703317554 024012 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include "playlist.h" class PlaylistManagerPrivate; class PlaylistManager : public QObject { Q_OBJECT public: explicit PlaylistManager(QObject *parent = nullptr); ~PlaylistManager(); QString newID(); QString newDisplayName(); QList allplaylist(); PlaylistPtr playlist(const QString &id); PlaylistPtr addPlaylist(const PlaylistMeta &listinfo); void onCustomResort(QStringList uuids); void load(); void saveSortOrder(); signals: void musiclistAdded(PlaylistPtr playlist, const MetaPtrList metalist); void musiclistRemoved(PlaylistPtr playlist, const MetaPtrList metalist); void playlistRemove(PlaylistPtr playlist); private: void insertPlaylist(const QString &id, PlaylistPtr); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), PlaylistManager) }; deepin-music-6.0.1.54/src/music-player/core/pluginmanager.cpp000664 000000 000000 00000004703 13703317554 024011 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "pluginmanager.h" #include #include #include #include #include #include "plugininterface.h" using namespace DMusic::Plugin; PluginManager::PluginManager(QObject *parent) : QObject(parent) { } QList PluginManager::getPluginListByType(DMusic::Plugin::PluginType pluginType) { // qDebug() << int(pluginType); QList list; for (auto plugin : m_plugins) { // qDebug() << int(plugin->pluginType()) << int(pluginType); // qDebug() << plugin->pluginId(); if (plugin->pluginType() == pluginType) { list << plugin; } } return list; } void PluginManager::loadPlugins() { auto relativePath = QString("../lib/%1/plugins/").arg(qApp->applicationName()); auto appDir = QDir(qApp->applicationDirPath()); auto pluginsDir = QDir(appDir.absoluteFilePath(relativePath)); if (!pluginsDir.exists()) { pluginsDir = QDir(QString("/usr/lib/%1/plugins").arg(qApp->applicationName())); } qDebug() << "load plugin from:" << pluginsDir.path(); for (auto libraryFile : pluginsDir.entryInfoList(QStringList() << "*.so" << "*.dll")) { qDebug() << "load plugin so file:" << libraryFile.absoluteFilePath(); auto loader = new QPluginLoader; loader->setFileName(libraryFile.absoluteFilePath()); auto instance = loader->instance(); auto pluginInstance = dynamic_cast(instance); qDebug() << "load plugin instance:" << instance << pluginInstance; Q_EMIT onPluginLoaded(pluginInstance->pluginId(), pluginInstance); m_plugins.push_back(pluginInstance); } } deepin-music-6.0.1.54/src/music-player/core/pluginmanager.h000664 000000 000000 00000002761 13703317554 023460 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include "util/singleton.h" namespace DMusic { namespace Plugin { class PluginInterface; enum class PluginType; } } class PluginManager : public QObject, public DMusic::DSingleton { Q_OBJECT friend class DMusic::DSingleton; public: explicit PluginManager(QObject *parent = nullptr); void init() { loadPlugins(); } QList getPluginListByType(DMusic::Plugin::PluginType pluginType); signals: void onPluginLoaded(const QString &, DMusic::Plugin::PluginInterface *); public slots: private: void loadPlugins(); QList m_plugins; }; deepin-music-6.0.1.54/src/music-player/core/qplayer.h000664 000000 000000 00000006007 13703317554 022301 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ ///** // * Copyright (C) 2016 Deepin Technology Co., Ltd. // * // * This program is free software; you can redistribute it and/or modify // * it under the terms of the GNU General Public License as published by // * the Free Software Foundation; either version 3 of the License, or // * (at your option) any later version. // **/ //#pragma once //#include //#include //#include "music.h" //#include "playlist.h" //class QPlayer : public QMediaPlayer //{ // Q_OBJECT // Q_PROPERTY(PlayMode mode READ mode WRITE setMode NOTIFY modeChanged) //public: // enum PlayStatus { // Invalid = 0, // Stop, // Playing, // Pause // }; // Q_ENUM(PlayStatus) // enum PlayMode { // RepeatAll = 0, // RepeatSingle = 1, // Shuffle = 2, // }; // Q_ENUM(PlayMode) // static QPlayer *instance() // { // static auto s_app = new QPlayer; // return s_app; // } // QStringList supportedFilterStringList(); // QStringList supportedMimeTypes(); // const MusicMeta playingMeta(); // void setPlaylist(PlaylistPtr); // void setMode(PlayMode mode); // void init() {} // inline PlayMode mode() const { return m_mode; } //signals: // void progrossChanged(qint64 value, qint64 range); // void modeChanged(PlayMode mode); // void musicPlayed(PlaylistPtr playlist, const MusicMeta &meta); //public slots: // void playMusic(PlaylistPtr playlist, const MusicMeta &meta); // void resumeMusic(PlaylistPtr playlist, const MusicMeta &meta); // void playNextMusic(PlaylistPtr playlist, const MusicMeta &meta); // void playPrevMusic(PlaylistPtr playlist, const MusicMeta &meta); // void changeProgress(qint64 value, qint64 range); //private: // ~QPlayer(); // void setMediaMeta(const MusicMeta &meta); // void selectNext(const MusicMeta &meta, PlayMode mode); // void selectPrev(const MusicMeta &meta, PlayMode mode); // explicit QPlayer(QObject *parent = 0); // MusicMeta m_playingMeta; // QStringList m_historyIDs; // PlaylistPtr m_playinglist; // QMap musicMap; // qint64 m_duration = -1; // PlayMode m_mode; //}; deepin-music-6.0.1.54/src/music-player/core/util/000775 000000 000000 00000000000 13703317554 021425 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/core/util/dbusutils.cpp000664 000000 000000 00000003273 13703317554 024154 0ustar00rootroot000000 000000 #include "dbusutils.h" #include #include #include #include #include #include #include #include static QMutex mutex; DBusUtils::DBusUtils() { } QVariant DBusUtils::readDBusProperty(const QString &service, const QString &path, const QString &interface, const char *propert) { // 创建QDBusInterfaceæŽ¥å£ mutex.lock(); QDBusInterface ainterface(service, path, interface, QDBusConnection::sessionBus()); if (!ainterface.isValid()) { qDebug() << qPrintable(QDBusConnection::sessionBus().lastError().message()); QVariant v(0) ; return v; } //调用远程的value方法 QVariant v = ainterface.property(propert); mutex.unlock(); return v; } QVariant DBusUtils::readDBusMethod(const QString &service, const QString &path, const QString &interface, const char *method) { // 创建QDBusInterfaceæŽ¥å£ QDBusInterface ainterface(service, path, interface, QDBusConnection::sessionBus()); if (!ainterface.isValid()) { qDebug() << "error:" << qPrintable(QDBusConnection::sessionBus().lastError().message()); QVariant v(0) ; return v; } //调用远程的value方法 QDBusReply reply = ainterface.call(method); if (reply.isValid()) { // return reply.value(); QVariant v(0) ; return v; } else { qDebug() << "error1:" << qPrintable(QDBusConnection::sessionBus().lastError().message()); QVariant v(0) ; return v; } } deepin-music-6.0.1.54/src/music-player/core/util/dbusutils.h000664 000000 000000 00000000625 13703317554 023617 0ustar00rootroot000000 000000 #ifndef DBUSUTILS_H #define DBUSUTILS_H #include class DBusUtils { public: DBusUtils(); static QVariant readDBusProperty(const QString &service, const QString &path, const QString &interface = QString(), const char *propert = ""); static QVariant readDBusMethod(const QString &service, const QString &path, const QString &interface, const char *method); }; #endif // DBUSUTILS_H deepin-music-6.0.1.54/src/music-player/core/util/fft.cpp000664 000000 000000 00000001767 13703317554 022723 0ustar00rootroot000000 000000 #include "fft.h" #include static const double pi = 3.1415926535898; void CFFT::process(complex *Data, int Log2N, int sign) { int i, j, step, length; complex wn, temp, deltawn; length = 1 << Log2N; for (i = 0; i < length; i += 2) { temp = Data[i]; Data[i] = Data[i] + Data[i + 1]; Data[i + 1] = temp - Data[i + 1]; } for (i = 2; i <= Log2N; i++) { wn = 1; step = 1 << i; deltawn = complex(cos(2.0 * pi / step), sin(sign * 2.0 * pi / step)); for (j = 0; j < step / 2; j++) { for (i = 0; i < length / step; i++) { temp = Data[i * step + step / 2 + j] * wn; Data[i * step + step / 2 + j] = Data[i * step + j] - temp; Data[i * step + j] = Data[i * step + j] + temp; } wn = wn * deltawn; } } if (sign == 1) for (i = 0; i < length; i++) Data[i] /= length; } deepin-music-6.0.1.54/src/music-player/core/util/fft.h000664 000000 000000 00000000270 13703317554 022354 0ustar00rootroot000000 000000 #pragma once #include using namespace std; class CFFT { public: static void process(complex *Data, int Log2N, int sign); private: CFFT() {} }; deepin-music-6.0.1.54/src/music-player/core/util/filesystemwatcher.cpp000664 000000 000000 00000001460 13703317554 025674 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "filesystemwatcher.h" deepin-music-6.0.1.54/src/music-player/core/util/filesystemwatcher.h000664 000000 000000 00000003661 13703317554 025346 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef FILESYSTEMWATCHER_H #define FILESYSTEMWATCHER_H #include #include #include #include #include #include #include #include #define RichDirPrefix ".deepin_rich_dir_" #define EVENT_NUM 16 #define MAX_BUF_SIZE 1024 class FileSystemWatcher : public QObject { Q_OBJECT public: explicit FileSystemWatcher(QObject *parent = 0); ~FileSystemWatcher(); bool addPath(const QString &path); bool removePath(const QString &path); // QStringList addPaths(const QStringList &paths); // QStringList removePaths(const QStringList &paths); void addWatchFolder(const QString &path); signals: // void directoryChanged(QString path); // void folderChanged(const QString& path); // void fileChanged(QString path); // void fileCreated(int cookie, QString path); // void fileModify(int cookie, QString path); // void fileMovedFrom(int cookie, QString path); // void fileMovedTo(int cookie, QString out); // void fileDeleted(int cookie, QString path); // void fileAttribChanged(int cookie, QString path); private: }; #endif // FILESYSTEMWATCHER_H deepin-music-6.0.1.54/src/music-player/core/util/global.cpp000664 000000 000000 00000002474 13703317554 023400 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "global.h" #include #include DCORE_USE_NAMESPACE; QString appName; QString Global::configPath() { auto userConfigPath = DStandardPaths::standardLocations(QStandardPaths::AppConfigLocation).value(0); return userConfigPath; } QString Global::cacheDir() { auto userCachePath = DStandardPaths::standardLocations(QStandardPaths::CacheLocation).value(0); return userCachePath; } void Global::setAppName(QString name) { appName = name; } QString Global::getAppName() { return appName; } deepin-music-6.0.1.54/src/music-player/core/util/global.h000664 000000 000000 00000001731 13703317554 023040 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include class Global { public: static QString configPath(); static QString cacheDir(); static void setAppName(QString name); static QString getAppName(); }; deepin-music-6.0.1.54/src/music-player/core/util/inotifyengine.cpp000664 000000 000000 00000012337 13703317554 025006 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "inotifyengine.h" #include #include #include #include #include #include #include #include #include #include class InotifyEnginePrivate { public: QMap m_paths; QMap m_dirs; QMap m_descriptors; int m_inotifyFd = -1; }; InotifyEngine::InotifyEngine(QObject *parent) : QObject(parent), d(new InotifyEnginePrivate) { d->m_inotifyFd = -1; #ifdef IN_CLOEXEC d->m_inotifyFd = inotify_init1(IN_CLOEXEC); #endif if (d->m_inotifyFd == -1) { d->m_inotifyFd = inotify_init(); if (d->m_inotifyFd == -1) { qDebug() << "Fail to initialize inotify"; return; } } auto m_notifier = new QSocketNotifier(d->m_inotifyFd, QSocketNotifier::Read, this); fcntl(d->m_inotifyFd, F_SETFD, FD_CLOEXEC); connect(m_notifier, &QSocketNotifier::activated, this, &InotifyEngine::readFromInotify); } InotifyEngine::~InotifyEngine() { } void InotifyEngine::watchAllDirectory(const QString &path) { QDir dir(path); if (!dir.exists()) { return; } if (watchDirectory(dir)) { return; } if (!dir.isRoot()) { dir.cdUp(); watchAllDirectory(dir.absolutePath()); } } void InotifyEngine::addPaths(const QStringList &paths) { for (auto &path : paths) { QFileInfo fi(path); if (fi.isDir()) { watchAllDirectory(fi.absoluteFilePath()); } else { watchAllDirectory(fi.absolutePath()); } } } void InotifyEngine::addPath(const QString &path) { addPaths(QStringList() << path); } void InotifyEngine::readFromInotify(int /*socket*/) { size_t buffSize = 0; ioctl(d->m_inotifyFd, FIONREAD, reinterpret_cast(&buffSize)); QVarLengthArray buffer(static_cast(buffSize)); auto readSize = read(d->m_inotifyFd, buffer.data(), buffSize); char *at = buffer.data(); char *const end = at + readSize; QHash eventForId; while (at < end) { inotify_event *event = reinterpret_cast(at); if (eventForId.contains(event->wd)) { eventForId[event->wd]->mask |= event->mask; } else { eventForId.insert(event->wd, event); } handleInotifyEvent(event); at += sizeof(inotify_event) + event->len; } QHash::const_iterator it = eventForId.constBegin(); while (it != eventForId.constEnd()) { const inotify_event &event = **it; ++it; if ((event.mask & (IN_DELETE_SELF | IN_MOVE_SELF | IN_UNMOUNT)) != 0) { inotify_rm_watch(d->m_inotifyFd, event.wd); } } } void InotifyEngine::handleInotifyEvent(inotify_event *event) { int id = event->wd; QString filepath = d->m_paths.value(id); if (filepath.isEmpty()) { return; } if (d->m_dirs.contains(filepath)) { auto dir = d->m_dirs.value(filepath); filepath = dir.absoluteFilePath(event->name); } else { return; } if (event->mask & IN_MOVED_FROM || event->mask & IN_DELETE) { // qDebug() << "fileRemoved" << filepath; //Q_EMIT fileRemoved(filepath); } } bool InotifyEngine::watchDirectory(QDir &dir) { uint32_t dirMask = 0 | IN_ATTRIB | IN_MOVE | IN_CREATE | IN_DELETE | IN_DELETE_SELF | IN_MOVE_SELF; uint32_t fileMask = 0 | IN_ATTRIB | IN_CLOSE_WRITE | IN_CLOSE_NOWRITE | IN_MODIFY | IN_MOVE | IN_MOVE_SELF | IN_DELETE_SELF; auto isDir = true; auto filepath = QString::fromLocal8Bit(QFile::encodeName(dir.absolutePath())); if (d->m_descriptors.contains(filepath)) { // qDebug() << "skip filepath" << filepath; return true; } auto mask = isDir ? dirMask : fileMask; int wd = inotify_add_watch(d->m_inotifyFd, QFile::encodeName(filepath), mask); if (wd < 0) { qDebug() << "inotify_add_watch failed" << wd << QFile::encodeName(filepath); return true; } // qDebug() << "inotify_add_watch " << wd << dir.absolutePath(); d->m_descriptors.insert(filepath, wd); d->m_paths.insert(wd, filepath); if (isDir) { d->m_dirs.insert(filepath, QDir(filepath)); } return false; } deepin-music-6.0.1.54/src/music-player/core/util/inotifyengine.h000664 000000 000000 00000002724 13703317554 024452 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef INOTIFYENGINE_H #define INOTIFYENGINE_H #include #include struct inotify_event; class QDir; class InotifyEnginePrivate; class InotifyEngine : public QObject { Q_OBJECT public: explicit InotifyEngine(QObject *parent = 0); ~InotifyEngine(); signals: void fileRemoved(const QString &filepath); public slots: void addPath(const QString &path); void addPaths(const QStringList &paths); private slots: void readFromInotify(int); void handleInotifyEvent(inotify_event *); private: bool watchDirectory(QDir& dir); void watchAllDirectory(const QString &path); QScopedPointer d; }; #endif // INOTIFYENGINE_H deepin-music-6.0.1.54/src/music-player/core/util/inotifyfiles.cpp000664 000000 000000 00000005562 13703317554 024645 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "inotifyfiles.h" #include #include #include #include #include #include #include class InotifyFilesPrivate { public: QStringList paths; QTimer timer; }; InotifyFiles::InotifyFiles(QObject *parent) : QObject(parent), d(new InotifyFilesPrivate) { connect(&d->timer, &QTimer::timeout, this, &InotifyFiles::scanFiles); } InotifyFiles::~InotifyFiles() { } void InotifyFiles::start() { d->timer.start(1000); } void InotifyFiles::clear() { m_mutex.lock(); d->paths.clear(); m_mutex.unlock(); } void InotifyFiles::addPaths(const QStringList &paths) { m_mutex.lock(); d->paths.append(paths); d->paths.removeDuplicates(); m_mutex.unlock(); } void InotifyFiles::scanFiles() { QStringList allFiles; for (int i = 0; i < d->paths.size();) { if (i >= d->paths.size()) break; QStringList strlist; m_mutex.lock(); auto curtFile = d->paths[i]; m_mutex.unlock(); if (QFileInfo(curtFile).dir().isEmpty()) { /**************************************************************** * deal with cd ejecting while Optical drive is still connecting * or directory did not exsit * **************************************************************/ m_mutex.lock(); d->paths.removeAt(i); m_mutex.unlock(); allFiles.append(curtFile); } else { /************************************** * to kown whether the file exists * ************************************/ if (access(curtFile.toStdString().c_str(), F_OK) != 0) { m_mutex.lock(); d->paths.removeAt(i); m_mutex.unlock(); allFiles.append(curtFile); } else { i++; } } } if (!allFiles.isEmpty()) emit fileChanged(allFiles); } void InotifyFiles::addPath(const QString &path) { addPaths(QStringList() << path); } deepin-music-6.0.1.54/src/music-player/core/util/inotifyfiles.h000664 000000 000000 00000002551 13703317554 024305 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef INOTIFYENGINE_H #define INOTIFYENGINE_H #include #include #include class QDir; class InotifyFilesPrivate; class InotifyFiles : public QObject { Q_OBJECT public: explicit InotifyFiles(QObject *parent = 0); ~InotifyFiles(); void start(); signals: void fileChanged(const QStringList &files); public slots: void clear(); void addPath(const QString &path); void addPaths(const QStringList &paths); void scanFiles(); private: QScopedPointer d; QMutex m_mutex; }; #endif // INOTIFYENGINE_H deepin-music-6.0.1.54/src/music-player/core/util/lyric.cpp000664 000000 000000 00000012163 13703317554 023256 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "lyric.h" #include // Check square element exists in |lrc| or not. bool HasNoTimeTag(const QString &lrc) { return lrc.indexOf("[00:") == -1; } Lyric parseLrc(QString &rawLyric) { Lyric lyric; QString lrc(rawLyric.replace(QString("\\n"), QChar('\n'))); if (HasNoTimeTag(lrc)) { lyric.hasTime = false; // lrc_type_ = LrcType::kLrcTypeNoTimeLrc; return lyric; } lyric.hasTime = true; // Parse each line of content. foreach (const QString & line, lrc.split(QChar('\n'))) { if (line.length() == 0) { continue; } // Match [*] tag. QRegExp square_reg("\\[([^\\]]*)\\]"); // To store time tags of current line. QList lrc_time_tags; bool ok = true; // Match and capture tags. int pos = 0; while (square_reg.indexIn(line, pos) > -1) { // Removes left square bracket. int tag_start = pos + 1; // Removes right square bracket. int tag_len = square_reg.matchedLength() - 2; QString tag(line.mid(tag_start, tag_len)); if (tag.startsWith("al:", Qt::CaseInsensitive)) { lyric.m_meta.album = tag.mid(3); } else if (tag.startsWith("ar:", Qt::CaseInsensitive)) { lyric.m_meta.artist = tag.mid(3); } else if (tag.startsWith("by:", Qt::CaseInsensitive)) { lyric.m_meta.editor = tag.mid(3); } else if (tag.startsWith("co:", Qt::CaseInsensitive)) { lyric.m_meta.composer = tag.mid(3); } else if (tag.startsWith("cr:", Qt::CaseInsensitive)) { lyric.m_meta.creator = tag.mid(3); } else if (tag.startsWith("offset:", Qt::CaseInsensitive)) { lyric.m_meta.offset = tag.mid(7).toLongLong(); } else if (tag.startsWith("ti:", Qt::CaseInsensitive)) { lyric.m_meta.title = tag.mid(3); } else { // Parse time tag. Like [03:21.428] int colon_index = tag.indexOf(QChar(':')); if (colon_index > 0) { auto minutes = tag.left(colon_index).toLongLong(&ok); if (ok) { double seconds = tag.mid(colon_index + 1).toFloat(&ok); if (ok) { auto time_tag = static_cast(minutes * 60 * 1000 + seconds * 1000); lrc_time_tags.append(time_tag); } } } } // Go forward. pos += square_reg.matchedLength(); } // If end-square-bracket is not the end of line, assumes that // remaining content is words of song. if (pos < line.length() && ok && lrc_time_tags.length() > 0) { // Add lrc_element. QString words(line.mid(pos)); // Store all time tags. foreach (int time_tag, lrc_time_tags) { LrcElement lrc_element; lrc_element.start = time_tag; lrc_element.content = words; lyric.m_lyricElements.append(lrc_element); } } } // Sort lrc_elements. std::sort(lyric.m_lyricElements.begin(), lyric.m_lyricElements.end()); // TODO(xushaohua):Add durations to lrc_element. for (auto iter = lyric.m_lyricElements.begin(); iter != lyric.m_lyricElements.end(); ++iter) { if ((iter + 1) != lyric.m_lyricElements.end()) { (*iter).duration = (* (iter + 1)).start - (*iter).start; } else { (*iter).duration = 0; } } // Add offset to each lrc_element. if (lyric.m_meta.offset != 0) { for (auto iter = lyric.m_lyricElements.begin(); iter != lyric.m_lyricElements.end(); ++iter) { (*iter).start += lyric.m_meta.offset; } } // FIXME(xushaohua): time tag is incorrect. LrcElement title_lrc_element; title_lrc_element.start = 0; QString title_and_artist(lyric.m_meta.title); if (lyric.m_meta.artist.length() > 0) { title_and_artist.append(" - "); title_and_artist.append(lyric.m_meta.artist); } title_lrc_element.content = title_and_artist; lyric.m_lyricElements.prepend(title_lrc_element); return lyric; } Lyric::Lyric() { } deepin-music-6.0.1.54/src/music-player/core/util/lyric.h000664 000000 000000 00000004035 13703317554 022722 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include struct WordElement { // Sustain time. qint64 time; QString word; public: bool operator<(const WordElement &other) { return this->time < other.time; } }; struct LrcElement { // Start time of current sentence, in milliseconds. qint64 start = 0; // Set current time. Used in translations. // Used in krc. int line_number = 0; // Duration of current sentence, in milliseconds. // This value is 0 if current element is the last one. // Used in lrc. qint64 duration = 0; // current lrc sentence, without any time tags. QString content; // Time to keep displaying current line before switch to next one, in // milliseconds. // Used in krc. qint64 sustain_time = 0; // Each word and its time delta. // Used in krc. QList words; // Translated to Simplified Chinese. Default is empty. // Used in krc. QString zh_cn; public: bool operator<(const LrcElement &other) const { return this->start < other.start; } }; class Lyric { public: explicit Lyric(); bool hasTime; MediaMeta m_meta; QList m_lyricElements; }; Lyric parseLrc(QString &rawLyric); deepin-music-6.0.1.54/src/music-player/core/util/musiclyric.cpp000775 000000 000000 00000014153 13703317554 024323 0ustar00rootroot000000 000000 #include "musiclyric.h" #include #include #include #include #include #include "util/basetool.h" MusicLyric::MusicLyric() { } int MusicLyric::getIndex(qint64 pos) { //采用二分查找 //æ—¶é—´å¤æ‚度O(logn) int lt, rt, mid; lt = 0; rt = postion.count(); while (lt < rt - 1) { mid = (lt + rt) >> 1; if (postion[mid] > pos) rt = mid; else lt = mid; } return lt; } qint64 MusicLyric::getPostion(int index) { if (index < postion.size()) return postion[index]; else return 0; } static QString getFileCodex(QString dir) { QFile fin(dir); QString code; if (!fin.open(QIODevice::ReadOnly)) return code; // unsigned char s2; // fin.read((char *)&s2, sizeof(s2)); // int p = s2 << 8; // fin.read((char *)&s2, sizeof(s2)); // p += s2; // switch (p) { // case 0xfffe: //65534 // code = "Unicode"; // break; // case 0xfeff://65279 // code = "Unicode big endian"; // break; // case 0xefbb://61371 // code = "UTF-8"; // break; // default: // code = "GB18030"; // } QByteArray data = fin.readAll(); fin.close(); code = BaseTool::detectEncode(data, dir); return code; } void MusicLyric::getFromFile(QString dir) { qDebug() << "Lyric dir:" << dir << endl; this->filedir = dir; //this->offset this->line.clear(); this->postion.clear(); //先使用暴力的字符串匹é…,还ä¸ä¼šæ­£åˆ™è¡¨è¾¾å¼ //æ—¶é—´å¤æ‚度O(n) QString codeStr = getFileCodex(dir); QFile file(dir); if (!file.exists()) return; if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream read(&file); if (!codeStr.isEmpty()) { read.setCodec(QTextCodec::codecForName(codeStr.toStdString().c_str())); } qint64 mm; double ss = 0.0; QMap ans; while (!read.atEnd()) { QString lineStr = read.readLine(); if (lineStr.isEmpty() || lineStr[0] != '[') continue; QStringList curLineList = lineStr.split('['); for (auto curLineStr : curLineList) { QStringList lineList = curLineStr.split(']'); if (lineList.isEmpty() || lineList[0].size() < 3) continue; QString str; if (lineList.size() == 2) str = lineList[1]; QString t_timeStr = lineList[0].remove(0, 1); QStringList t_timelist = t_timeStr.split(':'); if (t_timelist.size() != 2) continue; bool flag = false; mm = t_timelist[0].toLongLong(&flag, 10); if (flag) { ss = t_timelist[1].toDouble(&flag); if (flag) { qint64 curtime = (qint64)(ss * 1000) + mm * 60 * 1000; ans.insert(curtime, str); } } } } QMap::iterator it; for (it = ans.begin(); it != ans.end(); ++it) { this->postion.push_back(it.key()); this->line.push_back(it.value()); } } /* #标识标签(ID-tags) æ ¼å¼ï¼š"[标识å:值]"。大å°å†™ç­‰ä»·ã€‚ [ar:艺人å] [ti:曲å] [al:专辑å] [by:编者(指编辑LRCæ­Œè¯çš„人)] [offset:æ—¶é—´è¡¥å¿å€¼]å…¶å•使˜¯ç§’,正值表示整体æå‰ï¼Œè´Ÿå€¼ç›¸å。这是用于总体调整显示快慢的。 #时间标签(Time-tag) æ ¼å¼ï¼š"[mm:ss]"或"[mm:ss.fff]"(分钟:秒)。数字必须为éžè´Ÿæ•´æ•°ã€‚ 时间标签需ä½äºŽæŸè¡Œæ­Œè¯ä¸­çš„å¥é¦–部分,一行歌è¯å¯ä»¥åŒ…å«å¤šä¸ªæ—¶é—´æ ‡ç­¾ã€‚ */ void MusicLyric::getFromFileOld(QString dir) { qDebug() << "Lyric dir:" << dir << endl; this->filedir = dir; //this->offset this->line.clear(); this->postion.clear(); //先使用暴力的字符串匹é…,还ä¸ä¼šæ­£åˆ™è¡¨è¾¾å¼ //æ—¶é—´å¤æ‚度O(n) QFile file(dir); if (!file.exists()) return; if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream read(&file); QChar ch; bool flag; qint64 mm; double ss; QVector muli; QMap ans; QMap::iterator it; QString sign; QString val; QString str; while (!read.atEnd()) { for (;;) { read >> ch; if (ch == '[' || read.atEnd()) { if (muli.count()) { for (int i = 0; i < muli.count(); ++i) ans.insert(muli[i], str); } str = ""; muli.clear(); break; } str = str + ch; } if (read.atEnd()) break; for (;;) { read >> ch; if (ch == ':' || read.atEnd()) break; sign = sign + ch; } if (read.atEnd()) break; for (;;) { read >> ch; if (ch == ']' || read.atEnd()) { mm = sign.toLongLong(&flag, 10); //判断signæ˜¯å¦æ˜¯æ•´æ•° if (flag) { ss = val.toDouble(&flag); if (flag) { qint64 curtime = (qint64)(ss * 1000) + mm * 60 * 1000; muli.push_back(curtime); } } break; } val = val + ch; } sign = ""; val = ""; } for (it = ans.begin(); it != ans.end(); ++it) { this->postion.push_back(it.key()); this->line.push_back(it.value()); } } bool MusicLyric::getHeadFromFile(QString dir) { QString codeStr = getFileCodex(dir); QFile file(dir); if (!file.open(QIODevice::ReadOnly)) return false; QTextCodec *codec = QTextCodec::codecForName(codeStr.toStdString().c_str()); while (!file.atEnd()) { QByteArray arr = file.readLine(); QString str = codec->toUnicode(arr); this->line.push_back(str); } file.close(); return true; } QString MusicLyric::getLineAt(int index) { return line[index]; } int MusicLyric::getCount() { return line.count(); } deepin-music-6.0.1.54/src/music-player/core/util/musiclyric.h000775 000000 000000 00000000722 13703317554 023765 0ustar00rootroot000000 000000 #ifndef MusicLyric_H #define MusicLyric_H #include class MusicLyric { public: MusicLyric(); void getFromFile(QString dir); void getFromFileOld(QString dir); QString getLineAt(int index); int getCount(); int getIndex(qint64 pos); qint64 getPostion(int index); bool getHeadFromFile(QString dir); private: QString filedir; double offset; QVector postion; QVector line; }; #endif // LYRIC_H deepin-music-6.0.1.54/src/music-player/core/util/threadpool.cpp000664 000000 000000 00000003123 13703317554 024271 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "threadpool.h" #include ThreadPool::ThreadPool(QObject *parent) : QObject(parent) { } ThreadPool::~ThreadPool() { qDebug() << "destroy ThreadPool"; quitAll(); qDebug() << "ThreadPool destroyed"; } QThread *ThreadPool::newThread() { auto thread = new QThread; // qDebug() << "add <<<<<<<" << thread; m_pool.push_back(thread); return thread; } void ThreadPool::moveToNewThread(QObject *obj) { auto work = newThread(); obj->moveToThread(work); work->start(); } void ThreadPool::manager(QThread *thread) { // qDebug() << "manager <<<<<<<" << thread; m_pool.push_back(thread); } void ThreadPool::quitAll() { for (auto thread : m_pool) { // qDebug() << thread; thread->quit(); thread->wait(2000); } qDebug() << "all thread quit"; } deepin-music-6.0.1.54/src/music-player/core/util/threadpool.h000664 000000 000000 00000002310 13703317554 023733 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include class ThreadPool : public QObject, public DMusic::DSingleton { Q_OBJECT public: explicit ThreadPool(QObject *parent = 0); ~ThreadPool(); QThread *newThread(); void moveToNewThread(QObject *obj); void manager(QThread *thread); void quitAll(); private: friend class DMusic::DSingleton; QList m_pool; }; deepin-music-6.0.1.54/src/music-player/core/vlc/000775 000000 000000 00000000000 13703317554 021234 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/core/vlc/Audio.cpp000775 000000 000000 00000013166 13703317554 023013 0ustar00rootroot000000 000000 #include #include #include #include #include "Audio.h" #include "Error.h" #include "MediaPlayer.h" /*! \private */ class VlcAudioCallbackHelper { public: static int volumeCallback(vlc_object_t *obj, const char *name, vlc_value_t oldVal, vlc_value_t newVal, void *data) { Q_UNUSED(obj) Q_UNUSED(name) Q_UNUSED(oldVal) VlcAudio *core = static_cast(data); emit core->volumeChangedF(newVal.f_float); int vol = newVal.f_float < 0 ? -1 : qRound(newVal.f_float * 100.f); emit core->volumeChanged(vol); return VLC_SUCCESS; } static int muteCallback(vlc_object_t *obj, const char *name, vlc_value_t oldVal, vlc_value_t newVal, void *data) { Q_UNUSED(obj); Q_UNUSED(name); Q_UNUSED(oldVal); VlcAudio *core = static_cast(data); if(oldVal.b_bool != newVal.b_bool) emit core->muteChanged(newVal.b_bool); return VLC_SUCCESS; } }; VlcAudio::VlcAudio(VlcMediaPlayer *player) : QObject(player), _vlcMediaPlayer(player->core()) { var_AddCallback((vlc_object_t *)_vlcMediaPlayer, "volume", VlcAudioCallbackHelper::volumeCallback, this); var_AddCallback((vlc_object_t *)_vlcMediaPlayer, "mute", VlcAudioCallbackHelper::muteCallback, this); } VlcAudio::~VlcAudio() { var_DelCallback((vlc_object_t *)_vlcMediaPlayer, "volume", VlcAudioCallbackHelper::volumeCallback, this); var_DelCallback((vlc_object_t *)_vlcMediaPlayer, "mute", VlcAudioCallbackHelper::muteCallback, this); } bool VlcAudio::getMute() const { bool mute = false; if (_vlcMediaPlayer) { mute = libvlc_audio_get_mute(_vlcMediaPlayer); VlcError::showErrmsg(); } return mute; } void VlcAudio::setVolume(int volume) { if (_vlcMediaPlayer) { // Don't change if volume is the same if (volume != VlcAudio::volume()) { libvlc_audio_set_volume(_vlcMediaPlayer, volume); VlcError::showErrmsg(); } } } void VlcAudio::setTrack(int track) { if (_vlcMediaPlayer) { libvlc_audio_set_track(_vlcMediaPlayer, track); VlcError::showErrmsg(); } } bool VlcAudio::toggleMute() const { if (_vlcMediaPlayer) { libvlc_audio_toggle_mute(_vlcMediaPlayer); VlcError::showErrmsg(); } return getMute(); } void VlcAudio::setMute(bool mute) const { if (_vlcMediaPlayer && mute != getMute()) { libvlc_audio_set_mute(_vlcMediaPlayer, mute); VlcError::showErrmsg(); } } int VlcAudio::track() const { int track = -1; if (_vlcMediaPlayer) { track = libvlc_audio_get_track(_vlcMediaPlayer); VlcError::showErrmsg(); } return track; } int VlcAudio::trackCount() const { int count = -1; if (_vlcMediaPlayer) { count = libvlc_audio_get_track_count(_vlcMediaPlayer); VlcError::showErrmsg(); } return count; } QStringList VlcAudio::trackDescription() const { QStringList descriptions; if (_vlcMediaPlayer) { libvlc_track_description_t *desc; desc = libvlc_audio_get_track_description(_vlcMediaPlayer); VlcError::showErrmsg(); descriptions << QString().fromUtf8(desc->psz_name); if (trackCount() > 1) { for (int i = 1; i < trackCount(); i++) { desc = desc->p_next; descriptions << QString().fromUtf8(desc->psz_name); } } } return descriptions; } QList VlcAudio::trackIds() const { QList ids; if (_vlcMediaPlayer) { libvlc_track_description_t *desc; desc = libvlc_audio_get_track_description(_vlcMediaPlayer); VlcError::showErrmsg(); ids << desc->i_id; if (trackCount() > 1) { for (int i = 1; i < trackCount(); i++) { desc = desc->p_next; ids << desc->i_id; } } } return ids; } QMap VlcAudio::tracks() const { QMap tracks; if (_vlcMediaPlayer) { libvlc_track_description_t *desc, *first; first = desc = libvlc_audio_get_track_description(_vlcMediaPlayer); VlcError::showErrmsg(); if (desc != nullptr) { tracks.insert(desc->i_id, QString().fromUtf8(desc->psz_name)); if (trackCount() > 1) { for (int i = 1; i < trackCount(); i++) { desc = desc->p_next; tracks.insert(desc->i_id, QString().fromUtf8(desc->psz_name)); } } libvlc_track_description_list_release(first); } } return tracks; } int VlcAudio::volume() const { int volume = -1; if (_vlcMediaPlayer) { volume = libvlc_audio_get_volume(_vlcMediaPlayer); VlcError::showErrmsg(); } return volume; } Vlc::AudioChannel VlcAudio::channel() const { Vlc::AudioChannel channel = Vlc::AudioChannelError; if (_vlcMediaPlayer) { channel = Vlc::AudioChannel(libvlc_audio_get_channel(_vlcMediaPlayer)); VlcError::showErrmsg(); } return channel; } void VlcAudio::setChannel(Vlc::AudioChannel channel) { if (_vlcMediaPlayer) { // Don't change if channel is the same if (channel != VlcAudio::channel()) { libvlc_audio_set_channel(_vlcMediaPlayer, channel); VlcError::showErrmsg(); } } } deepin-music-6.0.1.54/src/music-player/core/vlc/Audio.h000775 000000 000000 00000006166 13703317554 022462 0ustar00rootroot000000 000000 #ifndef VLCQT_AUDIO_H_ #define VLCQT_AUDIO_H_ #include #include #include #include "Enums.h" #include "SharedExportCore.h" class VlcMediaPlayer; struct libvlc_media_player_t; /*! A group of audio controls functions. */ class VLCQT_CORE_EXPORT VlcAudio : public QObject { Q_OBJECT friend class VlcAudioCallbackHelper; public: /*! \brief VlcAudio constructor. This constructor creates a new audio manager. \param player media player (VlcMediaPlayer *) */ explicit VlcAudio(VlcMediaPlayer *player); /*! \brief VlcAudio destructor */ ~VlcAudio(); /*! \brief Get current mute state. \return current mute state (const bool) */ bool getMute() const; public slots: /*! \brief Set current audio level. \param volume new audio level (int) */ void setVolume(int volume); /*! \brief Set current audio track. \param track new audio track (int) */ void setTrack(int track); /*! \brief Toggle mute state. \return new mute state (const bool) */ bool toggleMute() const; /*! \brief Set audio channel. \param channel new audio channel */ void setChannel(Vlc::AudioChannel channel); /*! \brief Set mute state. \param mute mute state (bool) */ void setMute(bool mute) const; public: /*! \brief Get current audio track. \return the number of current audio track, or -1 if none (const int) */ int track() const; /*! \brief Get number of available audio tracks. \return the number of available audio tracks, or -1 if unavailable (const int) */ int trackCount() const; /*! \brief Get the description of available audio tracks. \return list with description of available audio tracks (const QStringList) */ QStringList trackDescription() const; /*! \brief Get the ids of available audio tracks. \return list with ids of available audio tracks (const QList) */ QList trackIds() const; /*! \brief Get available audio tracks. \return dictionary with available audio tracks (const QMap) */ QMap tracks() const; /*! \brief Get current audio level. \return current audio level, -1 if media is not playing (const int) */ int volume() const; /*! \brief Get audio channel. \return current audio channel, -1 if error */ Vlc::AudioChannel channel() const; signals: /*! \brief Signal sent when volume has changed. \param volume new volume (float) */ void volumeChangedF(float volume); /*! \brief Signal sent when volume has changed. \param volume new volume (int) */ void volumeChanged(int volume); /*! \brief Signal sent when mute has changed. \param mute new mute state (bool) */ void muteChanged(bool mute); private: libvlc_media_player_t *_vlcMediaPlayer; }; #endif // VLCQT_AUDIO_H_ deepin-music-6.0.1.54/src/music-player/core/vlc/Common.cpp000775 000000 000000 00000001305 13703317554 023172 0ustar00rootroot000000 000000 #include "Common.h" QStringList VlcCommon::args() { QStringList args_list; QString args = qgetenv("VLC_ARGS"); if (!args.isEmpty()) args_list << args.split(" ", QString::SkipEmptyParts); else { args_list << "--intf=dummy" << "--no-media-library" << "--no-stats" << "--no-osd" << "--no-loop" << "--no-video-title-show" << "--drop-late-frames"; } return args_list; } bool VlcCommon::setPluginPath(const QString &path) { if (qgetenv("VLC_PLUGIN_PATH").isEmpty()) { return qputenv("VLC_PLUGIN_PATH", path.toLocal8Bit()); } return false; } deepin-music-6.0.1.54/src/music-player/core/vlc/Common.h000775 000000 000000 00000000731 13703317554 022641 0ustar00rootroot000000 000000 #ifndef VLCQT_COMMON_H_ #define VLCQT_COMMON_H_ #include #include #include "SharedExportCore.h" namespace VlcCommon { /*! \brief Common libvlc arguments \return libvlc arguments (QStringList) */ VLCQT_CORE_EXPORT QStringList args(); /*! \brief Set plugin path \param path plugin path (QString) \return success status */ VLCQT_CORE_EXPORT bool setPluginPath(const QString &path); } #endif // VLCQT_COMMON_H_ deepin-music-6.0.1.54/src/music-player/core/vlc/Enums.cpp000775 000000 000000 00000007177 13703317554 023046 0ustar00rootroot000000 000000 #include "Enums.h" Vlc::Vlc(QObject *parent) : QObject(parent) {} QStringList Vlc::logLevel() { QStringList list; list << "debug" << "debug" << "notice" << "warning" << "error" << "disabled"; return list; } QStringList Vlc::audioCodec() { QStringList list; list << "none" << "mpga" << "mp3" << "mp4a" << "vorb" << "flac"; return list; } QStringList Vlc::audioOutput() { QStringList list; list << "default"; return list; } QStringList Vlc::audioOutputHuman() { QStringList list; list << "default"; return list; } QStringList Vlc::deinterlacing() { QStringList list; list << "" << "discard" << "blend" << "man" << "bob" << "linear" << "x" << "yadif" << "yadif2x" << "phosphor" << "ivtc"; return list; } QStringList Vlc::mux() { QStringList list; list << "ts" << "ps" << "mp4" << "ogg" << "avi"; return list; } QStringList Vlc::ratio() { QStringList list; list << "" << "ignore" << "16:9" << "16:10" << "185:100" << "221:100" << "235:100" << "239:100" << "4:3" << "5:4" << "5:3" << "1:1"; return list; } QStringList Vlc::ratioHuman() { QStringList list; list << "" << "" << "16:9" << "16:10" << "1.85:1" << "2.21:1" << "2.35:1" << "2.39:1" << "4:3" << "5:4" << "5:3" << "1:1"; return list; } QSizeF Vlc::ratioSize(const Vlc::Ratio &ratio) { switch (ratio) { case Vlc::R_16_9: return QSizeF(16, 9); break; case Vlc::R_16_10: return QSizeF(16, 10); break; case Vlc::R_185_100: return QSizeF(185, 100); break; case Vlc::R_221_100: return QSizeF(221, 100); break; case Vlc::R_235_100: return QSizeF(235, 100); break; case Vlc::R_239_100: return QSizeF(239, 100); break; case Vlc::R_4_3: return QSizeF(4, 3); break; case Vlc::R_5_4: return QSizeF(5, 4); break; case Vlc::R_5_3: return QSizeF(5, 3); break; case Vlc::R_1_1: return QSizeF(1, 1); break; case Vlc::Original: case Vlc::Ignore: default: return QSizeF(0, 0); break; } return QSizeF(0, 0); } QList Vlc::scale() { QList list; list << (float)0 << (float)1.05 << (float)1.1 << (float)1.2 << (float)1.3 << (float)1.4 << (float)1.5 << (float)1.6 << (float)1.7 << (float)1.8 << (float)1.9 << (float)2.0; return list; } QStringList Vlc::videoCodec() { QStringList list; list << "none" << "mpgv" << "mp4v" << "h264" << "theora"; return list; } QStringList Vlc::videoOutput() { QStringList list; list << "default"; #if defined(Q_OS_LINUX) list << "x11" << "xvideo" << "glx"; #elif defined(Q_OS_WIN32) list << "directx" << "direct3d" << "opengl"; #endif return list; } QStringList Vlc::videoOutputHuman() { QStringList list; list << "default"; #if defined(Q_OS_LINUX) list << "X11" << "XVideo" << "OpenGL"; #elif defined(Q_OS_WIN32) list << "DirectX" << "Direct3D" << "OpenGL"; #endif return list; } deepin-music-6.0.1.54/src/music-player/core/vlc/Enums.h000775 000000 000000 00000014570 13703317554 022506 0ustar00rootroot000000 000000 #ifndef VLCQT_ENUMS_H_ #define VLCQT_ENUMS_H_ #include #include #include #include "SharedExportCore.h" /*! \brief Common enumerations */ class VLCQT_CORE_EXPORT Vlc : public QObject // LCOV_EXCL_LINE { Q_OBJECT Q_ENUMS(LogLevel) Q_ENUMS(ActionsType) Q_ENUMS(AudioChannel) Q_ENUMS(AudioCodec) Q_ENUMS(AudioOutput) Q_ENUMS(Deinterlacing) Q_ENUMS(FillMode) Q_ENUMS(Meta) Q_ENUMS(Mux) Q_ENUMS(PlaybackMode) Q_ENUMS(Ratio) Q_ENUMS(Scale) Q_ENUMS(State) Q_ENUMS(VideoCodec) Q_ENUMS(VideoOutput) public: /*! \brief Dummy enums constructor. This constructor creates a new dummy enums object. \param parent object parent (QObject *) */ explicit Vlc(QObject *parent = 0); // Enums /*! \enum LogLevel \brief libVLC log levels */ enum LogLevel { DebugLevel = 0, NoticeLevel = 2, WarningLevel = 3, ErrorLevel = 4, DisabledLevel = 5 }; /*! \enum RenderFormat \brief Frame format used for custom rendering */ enum RenderFormat { YUVFormat }; /*! \enum ActionsType \brief Actions types identifiers */ enum ActionsType { AudioTrack, Subtitles, VideoTrack, Other }; /*! \enum AudioChannel \brief Audio channel options */ enum AudioChannel { AudioChannelError = -1, Stereo = 1, RStereo = 2, Left = 3, Right = 4, Dolbys = 5 }; /*! \enum AudioCodec \brief Audio codecs list */ enum AudioCodec { NoAudio, MPEG2Audio, MP3, MPEG4Audio, Vorbis, Flac }; /*! \enum AudioOutput \brief Audio outputs list */ enum AudioOutput { DefaultAout }; /*! \enum Deinterlacing \brief Supported deinterlacing modes */ enum Deinterlacing { Disabled, Discard, Blend, Mean, Bob, Linear, X, Yadif, Yadif2x, Phospor, IVTC }; /*! \enum FillMode \brief Supported fill modes (QML only) */ enum FillMode { PreserveAspectFit = Qt::KeepAspectRatio, PreserveAspectCrop = Qt::KeepAspectRatioByExpanding, Stretch = Qt::IgnoreAspectRatio }; /*! \enum Meta \brief Supported meta types */ enum Meta { Title, Artist, Genre, Copyright, Album, TrackNumber, Description, Rating, Date, Setting, URL, Language, NowPlaying, Publisher, EncodedBy, ArtworkURL, TrackID }; /*! \enum Mux \brief Recording output file mux */ enum Mux { TS, PS, MP4, OGG, AVI }; /*! \enum PlaybackMode \brief Playlist playback mode */ enum PlaybackMode { DefaultPlayback, Loop, Repeat }; /*! \enum Ratio \brief Supported aspect and crop ratios */ enum Ratio { Original, Ignore, /*!< QML aspect ratio only */ R_16_9, R_16_10, R_185_100, R_221_100, R_235_100, R_239_100, R_4_3, R_5_4, R_5_3, R_1_1 }; /*! \enum Scale \brief Supported scales */ enum Scale { NoScale, S_1_05, S_1_1, S_1_2, S_1_3, S_1_4, S_1_5, S_1_6, S_1_7, S_1_8, S_1_9, S_2_0 }; /*! \enum State */ enum State { Idle, Opening, Buffering, Playing, Paused, Stopped, Ended, Error }; /*! \enum VideoCodec \brief Video codecs list */ enum VideoCodec { NoVideo, MPEG2Video, MPEG4Video, H264, Theora }; /*! \enum VideoOutput \brief Video outputs list */ enum VideoOutput { #if defined(Q_OS_LINUX) X11, XVideo, GLX, #elif defined(Q_OS_WIN32) DirectX, Direct3D, OpenGL, #endif DefaultVout }; // Functions /*! \brief Log level strings \return log level strings (QStringList) */ static QStringList logLevel(); /*! \brief Audio codecs strings \return audio codecs strings (QStringList) */ static QStringList audioCodec(); /*! \brief Audio outputs strings \return audio outputs strings (QStringList) */ static QStringList audioOutput(); /*! \brief Audio outputs strings in readable form \return audio outputs strings (QStringList) */ static QStringList audioOutputHuman(); /*! \brief Deinterlacing modes strings \return deinterlacing strings (QStringList) */ static QStringList deinterlacing(); /*! \brief Mux strings \return mux strings (QStringList) */ static QStringList mux(); /*! \brief Aspect and crop ratios strings \return ratios strings (QStringList) */ static QStringList ratio(); /*! \brief Aspect and crop ratios strings in readable form \return ratios strings (QStringList) */ static QStringList ratioHuman(); /*! \brief Aspect and crop ratios converter to QSizeF \param ratio aspect or crop ratio (Vlc::Ratio) \return two-dimensional object using floating point precision (QSizeF) */ static QSizeF ratioSize(const Vlc::Ratio &ratio); /*! \brief Scale floats \return scale floats (QList) */ static QList scale(); /*! \brief Video codecs strings \return video codecs strings (QStringList) */ static QStringList videoCodec(); /*! \brief Video outputs strings \return video outputs strings (QStringList) */ static QStringList videoOutput(); /*! \brief Video outputs strings in readable form \return video outputs strings (QStringList) */ static QStringList videoOutputHuman(); }; #endif // VLCQT_ENUMS_H_ deepin-music-6.0.1.54/src/music-player/core/vlc/Equalizer.cpp000775 000000 000000 00000005414 13703317554 023710 0ustar00rootroot000000 000000 #include #include #include "Equalizer.h" #include "error.h" #include "MediaPlayer.h" VlcEqualizer::VlcEqualizer(VlcMediaPlayer *vlcMediaPlayer) : QObject(vlcMediaPlayer), _vlcMediaPlayer(vlcMediaPlayer), _vlcEqualizer(libvlc_audio_equalizer_new()) {} VlcEqualizer::~VlcEqualizer() { if (_vlcEqualizer) { libvlc_audio_equalizer_release(_vlcEqualizer); } } float VlcEqualizer::amplificationForBandAt(uint bandIndex) const { if (_vlcEqualizer) { float ret = libvlc_audio_equalizer_get_amp_at_index(_vlcEqualizer, bandIndex); if (!std::isnan(ret)) { return ret; } } return -1.0; } uint VlcEqualizer::bandCount() const { if (_vlcEqualizer) { return libvlc_audio_equalizer_get_band_count(); } else { return 0; } } float VlcEqualizer::bandFrequency(uint bandIndex) const { if (_vlcEqualizer) { return libvlc_audio_equalizer_get_band_frequency(bandIndex); } else { return -1.0; } } float VlcEqualizer::preamplification() const { if (_vlcEqualizer) { return libvlc_audio_equalizer_get_preamp(_vlcEqualizer); } else { return 0.0; } } uint VlcEqualizer::presetCount() const { return libvlc_audio_equalizer_get_preset_count(); } QString VlcEqualizer::presetNameAt(uint index) const { const char *name = libvlc_audio_equalizer_get_preset_name(index); if (name == NULL) { return QString(); } else { return QString(name); } } void VlcEqualizer::loadFromPreset(uint index) { if (_vlcEqualizer) { libvlc_audio_equalizer_release(_vlcEqualizer); } //18:The custom mode if (index < 18) { _vlcEqualizer = libvlc_audio_equalizer_new_from_preset(index); if (_vlcEqualizer) { emit presetLoaded(); } } else { _vlcEqualizer = libvlc_audio_equalizer_new(); } // VlcError::showErrmsg(); } void VlcEqualizer::setAmplificationForBandAt(float amp, uint bandIndex) { if (!_vlcEqualizer) { return; } libvlc_audio_equalizer_set_amp_at_index(_vlcEqualizer, amp, bandIndex); libvlc_media_player_set_equalizer(_vlcMediaPlayer->core(), _vlcEqualizer); // VlcError::showErrmsg(); } void VlcEqualizer::setEnabled(bool enabled) { if (enabled && _vlcEqualizer != NULL) { libvlc_media_player_set_equalizer(_vlcMediaPlayer->core(), _vlcEqualizer); } else { libvlc_media_player_set_equalizer(_vlcMediaPlayer->core(), NULL); } } void VlcEqualizer::setPreamplification(float value) { if (!_vlcEqualizer) { return; } libvlc_audio_equalizer_set_preamp(_vlcEqualizer, value); libvlc_media_player_set_equalizer(_vlcMediaPlayer->core(), _vlcEqualizer); // VlcError::showErrmsg(); } deepin-music-6.0.1.54/src/music-player/core/vlc/Equalizer.h000775 000000 000000 00000006664 13703317554 023365 0ustar00rootroot000000 000000 #ifndef VLCQT_EQUALIZER_H_ #define VLCQT_EQUALIZER_H_ #include #include "SharedExportCore.h" class VlcMediaPlayer; struct libvlc_equalizer_t; /*! \class VlcEqualizer Equalizer.h VLCQtCore/Equalizer.h \ingroup VLCQtCore \brief Audio equalizer \since libVLC 2.2 */ class VLCQT_CORE_EXPORT VlcEqualizer : public QObject { Q_OBJECT public: /*! \brief VlcEqualizer constructor */ explicit VlcEqualizer(VlcMediaPlayer *vlcMediaPlayer); /*! \brief VlcEqualizer destructor */ ~VlcEqualizer(); /*! \brief Get the amplification value for a particular equalizer frequency band. \param bandIndex index, counting from zero, of the frequency band to get \return amplification value (Hz); -1.0 if there is no such frequency band */ float amplificationForBandAt(uint bandIndex) const; /*! \brief Get the number of distinct frequency bands for an equalizer. \return number of frequency bands */ uint bandCount() const; /*! \brief Get a particular equalizer band frequency. This value can be used, for example, to create a label for an equalizer band control in a user interface. \param bandIndex index of the band, counting from zero \return equalizer band frequency (Hz), or -1 if there is no such band */ float bandFrequency(uint bandIndex) const; /*! \brief Get the current pre-amplification value from an equalizer. \return preamp value (Hz) */ float preamplification() const; /*! \brief Get the number of equalizer presets. \return number of presets */ uint presetCount() const; /*! \brief Get the name of a particular equalizer preset. This name can be used, for example, to prepare a preset label or menu in a user interface. \param index index of the preset, counting from zero \return preset name, or an empty string if there is no such preset */ QString presetNameAt(uint index) const; public slots: /*! \brief Load from preset \param index index of the preset, counting from zero */ void loadFromPreset(uint index); /*! \brief Set a new amplification value for a particular equalizer frequency band. The new equalizer settings are subsequently applied to a media player by invoking libvlc_media_player_set_equalizer(). The supplied amplification value will be clamped to the -20.0 to +20.0 range. \param amp amplification value (-20.0 to 20.0 Hz) \param bandIndex counting from zero, of the frequency band to set */ void setAmplificationForBandAt(float amp, uint bandIndex); /*! \brief Enable or disable equalizer \param enabled toggle flag */ void setEnabled(bool enabled); /*! \brief Set a new pre-amplification value for an equalizer. The new equalizer settings are subsequently applied to a media player by invoking libvlc_media_player_set_equalizer(). The supplied amplification value will be clamped to the -20.0 to +20.0 range. \param value preamp value in (-20.0 to 20.0 Hz) */ void setPreamplification(float value); signals: /*! \brief Emitted when preset is loaded */ void presetLoaded(); private: VlcMediaPlayer *_vlcMediaPlayer; libvlc_equalizer_t *_vlcEqualizer; }; #endif // VLCQT_EQUALIZER_H_ deepin-music-6.0.1.54/src/music-player/core/vlc/Error.cpp000775 000000 000000 00000000776 13703317554 023046 0ustar00rootroot000000 000000 #include #include #include "Error.h" QString VlcError::errmsg() { QString error; if (libvlc_errmsg()) { error = QString::fromUtf8(libvlc_errmsg()); libvlc_clearerr(); } return error; } void VlcError::showErrmsg() { // Outputs libvlc error message if there is any QString error = errmsg(); if (!error.isEmpty()) { qWarning() << "VlcError libvlc" << "Error:" << error; } } void VlcError::clearerr() {} deepin-music-6.0.1.54/src/music-player/core/vlc/Error.h000775 000000 000000 00000001635 13703317554 022506 0ustar00rootroot000000 000000 #ifndef VLCQT_ERROR_H_ #define VLCQT_ERROR_H_ #include "SharedExportCore.h" class VLCQT_CORE_EXPORT VlcError { public: /*! \brief A human-readable error message for the last libvlc error in the calling thread. The resulting string is valid until another error occurs. \return error message (QString) \warning There may be no output, if there is no error. */ static QString errmsg(); /*! \brief A human-readable error message displayed into standard output for the last libvlc error in the calling thread. The resulting string is valid until another error occurs. \warning There may be no output, if there is no error. */ static void showErrmsg(); /*! \brief Clears the libvlc error status for the current thread. This does nothing. */ Q_DECL_DEPRECATED static void clearerr(); }; #endif // VLCQT_ERROR_H_ deepin-music-6.0.1.54/src/music-player/core/vlc/Instance.cpp000775 000000 000000 00000013656 13703317554 023522 0ustar00rootroot000000 000000 #include #include #include "../util/global.h" #include #include "Enums.h" #include "Error.h" #include "Instance.h" void logCallback(void *data, int level, const libvlc_log_t *ctx, const char *fmt, va_list args) { Q_UNUSED(ctx) VlcInstance *instance = static_cast(data); if (instance->logLevel() > level) { return; } char *result; if (vasprintf(&result, fmt, args) < 0) { return; // LCOV_EXCL_LINE } QString message(result); free(result); message.prepend("VlcInstance libvlc: "); switch (level) { case Vlc::ErrorLevel:{ qCritical(message.toUtf8().data(), NULL); if(message.contains("cannot write")) { /***************************************** *vlc write error. we need to stop * player then start it * **************************************/ instance->catchPulseError(0); } break; } case Vlc::WarningLevel: qWarning(message.toUtf8().data(), NULL); break; case Vlc::NoticeLevel: case Vlc::DebugLevel: default: qDebug(message.toUtf8().data(), NULL); break; } } VlcInstance::VlcInstance(const QStringList &args, QObject *parent) : QObject(parent), _vlcInstance(nullptr), _status(false), _logLevel(Vlc::ErrorLevel) { Q_UNUSED(args) // Convert arguments to required format // char *argv[args.count()]; // for (int i = 0; i < args.count(); ++i) // argv[i] = (char *)qstrdup(args.at(i).toUtf8().data()); // Create new libvlc instance // _vlcInstance = libvlc_new(args.count(), argv); _vlcInstance = libvlc_new(0, nullptr); libvlc_set_user_agent(_vlcInstance, Global::getAppName().toStdString().c_str(), "");//name libvlc_set_app_id(_vlcInstance, "", "", "deepin-music");//icon qRegisterMetaType("Vlc::Meta"); qRegisterMetaType("Vlc::State"); VlcError::showErrmsg(); // Check if instance is running if (_vlcInstance) { libvlc_log_set(_vlcInstance, logCallback, this); _status = true; qDebug() << "Using libvlc version:" << version(); } else { qCritical() << "VLC Error: libvlc failed to load!"; } } VlcInstance::~VlcInstance() { if (_status && _vlcInstance) { libvlc_release(_vlcInstance); } } libvlc_instance_t *VlcInstance::core() { return _vlcInstance; } bool VlcInstance::status() const { return _status; } Vlc::LogLevel VlcInstance::logLevel() const { return _logLevel; } void VlcInstance::setLogLevel(Vlc::LogLevel level) { _logLevel = level; } //QString VlcInstance::libVersion() //{ // QString version; //#if defined(LIBVLCQT_VERSION) // version.append(QString(LIBVLCQT_VERSION)); //#else // version.append(QString("Unknown")); //#endif //LIBVLCQT_VERSION //#if defined(LIBVLCQT_VERSION_VCS) // if (QString(LIBVLCQT_VERSION_VCS) != "0" && QString(LIBVLCQT_VERSION_VCS) != "") { // version.append("-" + QString(LIBVLCQT_VERSION_VCS)); // } //#endif //LIBVLCQT_VERSION // return version; //} //int VlcInstance::libVersionMajor() //{ // int version = -1; //#if defined(LIBVLCQT_VERSION_MAJOR) // version = LIBVLCQT_VERSION_MAJOR; //#endif //LIBVLCQT_VERSION // return version; //} //int VlcInstance::libVersionMinor() //{ // int version = -1; //#if defined(LIBVLCQT_VERSION_MINOR) // version = LIBVLCQT_VERSION_MINOR; //#endif //LIBVLCQT_VERSION // return version; //} QString VlcInstance::changeset() { // Returns libvlc changeset return QString(libvlc_get_changeset()); } void VlcInstance::catchPulseError(int err) { Q_UNUSED(err) emit sendErrorOccour(0); } QString VlcInstance::compiler() { // Returns libvlc compiler version return QString(libvlc_get_compiler()); } QString VlcInstance::version() { // Returns libvlc version return QString(libvlc_get_version()); } //void VlcInstance::setAppId(const QString &id, // const QString &version, // const QString &icon) //{ // libvlc_set_app_id(_vlcInstance, id.toUtf8().data(), version.toUtf8().data(), icon.toUtf8().data()); //} //QList VlcInstance::audioFilterList() const //{ // libvlc_module_description_t *original = libvlc_audio_filter_list_get(_vlcInstance); // if (original == NULL) { // return QList(); // LCOV_EXCL_LINE // } // libvlc_module_description_t *list = original; // QList audioFilters; // do { // VlcModuleDescription *module = new VlcModuleDescription(VlcModuleDescription::AudioFilter, list->psz_name); // module->setLongName(list->psz_longname); // module->setShortName(list->psz_shortname); // module->setHelp(list->psz_help); // audioFilters << module; // list = list->p_next; // } while (list->p_next); // libvlc_module_description_list_release(original); // return audioFilters; //} //QList VlcInstance::videoFilterList() const //{ // libvlc_module_description_t *original = libvlc_video_filter_list_get(_vlcInstance); // if (original == NULL) { // return QList(); // LCOV_EXCL_LINE // } // libvlc_module_description_t *list = original; // QList videoFilters; // do { // VlcModuleDescription *module = new VlcModuleDescription(VlcModuleDescription::VideoFilter, list->psz_name); // module->setLongName(list->psz_longname); // module->setShortName(list->psz_shortname); // module->setHelp(list->psz_help); // videoFilters << module; // list = list->p_next; // } while (list->p_next); // libvlc_module_description_list_release(original); // return videoFilters; //} deepin-music-6.0.1.54/src/music-player/core/vlc/Instance.h000775 000000 000000 00000006204 13703317554 023156 0ustar00rootroot000000 000000 #ifndef VLCQT_VLCINSTANCE_H_ #define VLCQT_VLCINSTANCE_H_ #include #include "Enums.h" //#include "SharedExportCore.h" //class VlcModuleDescription; struct libvlc_instance_t; class VLCQT_CORE_EXPORT VlcInstance : public QObject { Q_OBJECT public: /*! \brief VlcInstance constructor. \param args libvlc arguments (QStringList) \param parent Instance's parent object (QObject *) */ explicit VlcInstance(const QStringList &args, QObject *parent = NULL); /*! VlcInstance destructor */ ~VlcInstance(); /*! \brief Returns libvlc instance object. \return libvlc instance (libvlc_instance_t *) */ libvlc_instance_t *core(); /*! \brief Returns libvlc initialisation status. \return libvlc status (bool) */ bool status() const; /*! \brief Returns current log level (default Vlc::ErrorLevel) \return log level */ Vlc::LogLevel logLevel() const; /*! \brief Set current log level \param level desired log level \see Vlc::LogLevel */ void setLogLevel(Vlc::LogLevel level); // static QString libVersion(); // static int libVersionMajor(); static int libVersionMinor(); /*! \brief libvlc version info \return a string containing the libvlc version (QString) */ static QString version(); /*! \brief libvlc compiler info \return a string containing the compiler version (QString) */ static QString compiler(); /*! \brief libvlc changeset info \return a string containing the changeset (QString) */ static QString changeset(); /*! \brief Sets the application name. libvlc passes this as the user agent string when a protocol requires it. \param application Application name (QString) \param version Application version (QString) \see setAppId */ // void setUserAgent(const QString &application, // const QString &version); /*! \brief Sets the application some meta-information. \param id Java-style application identifier, e.g. "com.acme.foobar" \param version application version numbers, e.g. "1.2.3" \param icon application icon name, e.g. "foobar" \see setUserAgent */ // void setAppId(const QString &id, // const QString &version, // const QString &icon); /*! \brief List audio filter modules \return audio filter module description list */ // QList audioFilterList() const; /*! \brief List video filter modules \return video filter module description list */ // QList videoFilterList() const; /** * @brief catchPulseError catch the exception of pulseaudio * @param err error level */ void catchPulseError(int err); signals: void sendErrorOccour(int err); private: libvlc_instance_t *_vlcInstance; bool _status; Vlc::LogLevel _logLevel; }; #endif // VLCQT_VLCINSTANCE_H_ deepin-music-6.0.1.54/src/music-player/core/vlc/Media.cpp000775 000000 000000 00000023503 13703317554 022765 0ustar00rootroot000000 000000 #include #include #include #include "Error.h" #include "Instance.h" #include "Media.h" //#include "Stats.h" VlcMedia::VlcMedia(const QString &location, bool localFile, VlcInstance *instance) : QObject(instance) { initMedia(location, localFile, instance); } VlcMedia::VlcMedia(const QString &location, VlcInstance *instance) : QObject(instance) { initMedia(location, false, instance); } VlcMedia::VlcMedia(libvlc_media_t *media) { // Create a new libvlc media descriptor from existing one _vlcMedia = libvlc_media_duplicate(media); VlcError::showErrmsg(); } VlcMedia::VlcMedia() { } VlcMedia::~VlcMedia() { removeCoreConnections(); libvlc_media_release(_vlcMedia); VlcError::showErrmsg(); } libvlc_media_t *VlcMedia::core() { return _vlcMedia; } void VlcMedia::initMedia(const QString &location, bool localFile, VlcInstance *instance) { _currentLocation = location; QString l = location; if (localFile) l = QDir::toNativeSeparators(l); // Create a new libvlc media descriptor from location if (localFile) _vlcMedia = libvlc_media_new_path(instance->core(), l.toUtf8().data()); else _vlcMedia = libvlc_media_new_location(instance->core(), l.toUtf8().data()); _vlcEvents = libvlc_media_event_manager(_vlcMedia); createCoreConnections(); VlcError::showErrmsg(); } void VlcMedia::createCoreConnections() { QList list; list << libvlc_MediaMetaChanged << libvlc_MediaSubItemAdded << libvlc_MediaDurationChanged << libvlc_MediaParsedChanged << libvlc_MediaFreed << libvlc_MediaStateChanged; foreach (const libvlc_event_e &event, list) { libvlc_event_attach(_vlcEvents, event, libvlc_callback, this); } } void VlcMedia::removeCoreConnections() { QList list; list << libvlc_MediaMetaChanged << libvlc_MediaSubItemAdded << libvlc_MediaDurationChanged << libvlc_MediaParsedChanged << libvlc_MediaFreed << libvlc_MediaStateChanged; foreach (const libvlc_event_e &event, list) { libvlc_event_detach(_vlcEvents, event, libvlc_callback, this); } } bool VlcMedia::parsed() const { int parsed = libvlc_media_is_parsed(_vlcMedia); VlcError::showErrmsg(); return parsed; } void VlcMedia::parse() { libvlc_media_parse_async(_vlcMedia); VlcError::showErrmsg(); } QString VlcMedia::currentLocation() const { return _currentLocation; } //VlcStats *VlcMedia::getStats() //{ // libvlc_media_stats_t *coreStats = new libvlc_media_stats_t; // VlcStats *stats = new VlcStats; // stats->valid = libvlc_media_get_stats(_vlcMedia, coreStats); // stats->read_bytes = coreStats->i_read_bytes; // stats->input_bitrate = coreStats->f_input_bitrate; // stats->demux_read_bytes = coreStats->i_demux_read_bytes; // stats->demux_bitrate = coreStats->f_demux_bitrate; // stats->demux_corrupted = coreStats->i_demux_corrupted; // stats->demux_discontinuity = coreStats->i_demux_discontinuity; // stats->decoded_video = coreStats->i_decoded_video; // stats->decoded_audio = coreStats->i_decoded_audio; // stats->displayed_pictures = coreStats->i_displayed_pictures; // stats->lost_pictures = coreStats->i_lost_pictures; // stats->played_abuffers = coreStats->i_played_abuffers; // stats->lost_abuffers = coreStats->i_lost_abuffers; // stats->sent_packets = coreStats->i_sent_packets; // stats->sent_bytes = coreStats->i_sent_bytes; // stats->send_bitrate = coreStats->f_send_bitrate; // return stats; //} Vlc::State VlcMedia::state() const { libvlc_state_t state; state = libvlc_media_get_state(_vlcMedia); VlcError::showErrmsg(); return Vlc::State(state); } qint64 VlcMedia::duration() const { libvlc_time_t duration = libvlc_media_get_duration(_vlcMedia); VlcError::showErrmsg(); return duration; } QString VlcMedia::duplicate(const QString &name, const QString &path, const Vlc::Mux &mux) { return record(name, path, mux, true); } QString VlcMedia::duplicate(const QString &name, const QString &path, const Vlc::Mux &mux, const Vlc::AudioCodec &audioCodec, const Vlc::VideoCodec &videoCodec) { return record(name, path, mux, audioCodec, videoCodec, true); } QString VlcMedia::duplicate(const QString &name, const QString &path, const Vlc::Mux &mux, const Vlc::AudioCodec &audioCodec, const Vlc::VideoCodec &videoCodec, int bitrate, int fps, int scale) { return record(name, path, mux, audioCodec, videoCodec, bitrate, fps, scale, true); } QString VlcMedia::merge(const QString &name, const QString &path, const Vlc::Mux &mux) { QString option1, option2, parameters; QString l = QDir::toNativeSeparators(path + "/" + name); parameters = "gather:std{access=file,mux=%1,dst='%2'}"; parameters = parameters.arg(Vlc::mux()[mux], l + "." + Vlc::mux()[mux]); option1 = ":sout-keep"; option2 = ":sout=#%1"; option2 = option2.arg(parameters); setOption(option1); setOption(option2); VlcError::showErrmsg(); return l + "." + Vlc::mux()[mux]; } QString VlcMedia::record(const QString &name, const QString &path, const Vlc::Mux &mux, bool duplicate) { QString option1, option2, parameters; QString l = QDir::toNativeSeparators(path + "/" + name); parameters = "std{access=file,mux=%1,dst='%2'}"; parameters = parameters.arg(Vlc::mux()[mux], l + "." + Vlc::mux()[mux]); if (duplicate) { option2 = ":sout=#duplicate{dst=display,dst=\"%1\"}"; } else { option2 = ":sout=#%1"; } option1 = ":sout-all"; option2 = option2.arg(parameters); setOption(option1); setOption(option2); VlcError::showErrmsg(); return l + "." + Vlc::mux()[mux]; } QString VlcMedia::record(const QString &name, const QString &path, const Vlc::Mux &mux, const Vlc::AudioCodec &audioCodec, const Vlc::VideoCodec &videoCodec, bool duplicate) { QString option1, option2, parameters; QString l = QDir::toNativeSeparators(path + "/" + name); parameters = "transcode{vcodec=%1,acodec=%2}:std{access=file,mux=%3,dst='%4'}"; parameters = parameters.arg(Vlc::videoCodec()[videoCodec], Vlc::audioCodec()[audioCodec], Vlc::mux()[mux], l + "." + Vlc::mux()[mux]); if (duplicate) { option2 = ":sout=#duplicate{dst=display,dst=\"%1\"}"; } else { option2 = ":sout=#%1"; } option1 = ":sout-all"; option2 = option2.arg(parameters); setOption(option1); setOption(option2); VlcError::showErrmsg(); return l + "." + Vlc::mux()[mux]; } QString VlcMedia::record(const QString &name, const QString &path, const Vlc::Mux &mux, const Vlc::AudioCodec &audioCodec, const Vlc::VideoCodec &videoCodec, int bitrate, int fps, int scale, bool duplicate) { QString option1, option2, parameters; QString l = QDir::toNativeSeparators(path + "/" + name); parameters = "transcode{vcodec=%1,vb=%2,fps=%3,scale=%4,acodec=%5}:std{access=file,mux=%6,dst='%7'}"; parameters = parameters.arg(Vlc::videoCodec()[videoCodec], QString::number(bitrate), QString::number(fps), QString::number(scale), Vlc::audioCodec()[audioCodec], Vlc::mux()[mux], l + "." + Vlc::mux()[mux]); if (duplicate) { option2 = ":sout=#duplicate{dst=display,dst=\"%1\"}"; } else { option2 = ":sout=#%1"; } option1 = ":sout-all"; option2 = option2.arg(parameters); setOption(option1); setOption(option2); VlcError::showErrmsg(); return l + "." + Vlc::mux()[mux]; } void VlcMedia::setProgram(int program) { QString option = "program=%1"; setOption(option.arg(program)); } void VlcMedia::setOption(const QString &option) { libvlc_media_add_option(_vlcMedia, option.toUtf8().data()); VlcError::showErrmsg(); } void VlcMedia::setOptions(const QStringList &options) { foreach (const QString &option, options) { libvlc_media_add_option(_vlcMedia, option.toUtf8().data()); } VlcError::showErrmsg(); } void VlcMedia::libvlc_callback(const libvlc_event_t *event, void *data) { VlcMedia *core = static_cast(data); switch (event->type) { case libvlc_MediaMetaChanged: emit core->metaChanged(Vlc::Meta(event->u.media_meta_changed.meta_type)); break; case libvlc_MediaSubItemAdded: emit core->subitemAdded(event->u.media_subitem_added.new_child); break; case libvlc_MediaDurationChanged: emit core->durationChanged(static_cast(event->u.media_duration_changed.new_duration)); break; case libvlc_MediaParsedChanged: emit core->parsedChanged(static_cast(event->u.media_parsed_changed.new_status)); break; case libvlc_MediaFreed: emit core->freed(event->u.media_freed.md); break; case libvlc_MediaStateChanged: emit core->stateChanged(Vlc::State(event->u.media_state_changed.new_state)); break; default: break; } } deepin-music-6.0.1.54/src/music-player/core/vlc/Media.h000775 000000 000000 00000021713 13703317554 022433 0ustar00rootroot000000 000000 #ifndef VLCQT_MEDIA_H_ #define VLCQT_MEDIA_H_ #include #include #include #include "Enums.h" //#include "SharedExportCore.h" class VlcInstance; struct VlcStats; struct libvlc_event_t; struct libvlc_event_manager_t; struct libvlc_media_t; /*! An abstract representation of a playable media. It consists of a media location and various optional meta data. */ class VLCQT_CORE_EXPORT VlcMedia : public QObject { Q_OBJECT public: /*! \brief VlcMedia constructor. This constructor creates a new media instance from a media location. \param location location of the media (QString) \param localFile true, if media is local file (bool) \param instance main libvlc instance (VlcInstance *) */ explicit VlcMedia(const QString &location, bool localFile, VlcInstance *instance); /*! \brief VlcMedia constructor. This constructor creates a new media instance from a remote media location. Provided for convenience. \param location remote location of the media (QString) \param instance main libvlc instance (VlcInstance *) */ explicit VlcMedia(const QString &location, VlcInstance *instance); explicit VlcMedia(); /*! \brief VlcMedia constructor. This constructor creates a new media instance from an existing one. \param media libvlc media item (libvlc_media_t *) */ VlcMedia(libvlc_media_t *media); /*! \brief VlcMedia destructor */ ~VlcMedia(); /*! \brief libvlc media item \return libvlc media item (libvlc_media_t *) */ libvlc_media_t *core(); /*! \brief Get parsed status Know when it is OK to read metadata and track information \return parsed status (const bool) */ bool parsed() const; /*! \brief Parse media information Parse media information: metadata and track information. This call is async. \see parsedChanged */ void parse(); /*! \brief Current media location \return QString media location */ QString currentLocation() const; /*! \brief Get media stats \return VlcStats media stats object */ // VlcStats *getStats(); /*! \brief Get media state \return current media state */ Vlc::State state() const; /*! \brief Get media duration \return duration */ qint64 duration() const; /*! \brief Duplicate (provided for convenience) Apply duplicate options with desired mux but without transcoding. \param name output file name (QString) \param path output path (QString) \param mux output mux (Vlc::Mux) \return QString output file \sa record() */ QString duplicate(const QString &name, const QString &path, const Vlc::Mux &mux); /*! \brief Duplicate (provided for convenience) Apply duplicate options with desired mux and transcoding (experimental). \param name output file name (QString) \param path output path (QString) \param mux output mux (Vlc::Mux) \param audioCodec audio codec (Vlc::AudioCodec) \param videoCodec video codec (Vlc::VideoCodec) \return QString output file \sa record() */ QString duplicate(const QString &name, const QString &path, const Vlc::Mux &mux, const Vlc::AudioCodec &audioCodec, const Vlc::VideoCodec &videoCodec); /*! \brief Duplicate (provided for convenience) Apply duplicate options with desired mux, transcoding and some other options (experimental). \param name output file name (QString) \param path output path (QString) \param mux output mux (Vlc::Mux) \param audioCodec audio codec (Vlc::AudioCodec) \param videoCodec video codec (Vlc::VideoCodec) \param bitrate video bitrate (int) \param fps frames per second (int) \param scale video scale (int) \return QString output file \sa record() */ QString duplicate(const QString &name, const QString &path, const Vlc::Mux &mux, const Vlc::AudioCodec &audioCodec, const Vlc::VideoCodec &videoCodec, int bitrate, int fps, int scale); /*! \brief Merge Apply merge options with desired mux but without transcoding. \param name output file name (QString) \param path output path (QString) \param mux output mux (Vlc::Mux) \return QString output file */ QString merge(const QString &name, const QString &path, const Vlc::Mux &mux); /*! \brief Record Apply recording options with desired mux but without transcoding. \param name output file name (QString) \param path output path (QString) \param mux output mux (Vlc::Mux) \param duplicate also duplicate on screen (bool) \return QString output file */ QString record(const QString &name, const QString &path, const Vlc::Mux &mux, bool duplicate = false); /*! \brief Record Apply recording options with desired mux and transcoding (experimental). \param name output file name (QString) \param path output path (QString) \param mux output mux (Vlc::Mux) \param audioCodec audio codec (Vlc::AudioCodec) \param videoCodec video codec (Vlc::VideoCodec) \param duplicate also duplicate on screen (bool) \return QString output file */ QString record(const QString &name, const QString &path, const Vlc::Mux &mux, const Vlc::AudioCodec &audioCodec, const Vlc::VideoCodec &videoCodec, bool duplicate = false); /*! \brief Record Apply recording options with desired mux, transcoding and some other options (experimental). \param name output file name (QString) \param path output path (QString) \param mux output mux (Vlc::Mux) \param audioCodec audio codec (Vlc::AudioCodec) \param videoCodec video codec (Vlc::VideoCodec) \param bitrate video bitrate (int) \param fps frames per second (int) \param scale video scale (int) \param duplicate also duplicate on screen (bool) \return QString output file */ QString record(const QString &name, const QString &path, const Vlc::Mux &mux, const Vlc::AudioCodec &audioCodec, const Vlc::VideoCodec &videoCodec, int bitrate, int fps, int scale, bool duplicate = false); /*! \brief Set program \param program program PID (int) */ void setProgram(int program); /*! \brief Set media option \param option media option (QString) */ void setOption(const QString &option); /*! \brief Set media options \param options media options (QStringList) */ void setOptions(const QStringList &options); void initMedia(const QString &location, bool localFile, VlcInstance *instance); signals: /*! \brief Signal sent on meta change \param meta new meta */ void metaChanged(const Vlc::Meta &meta); /*! \brief Signal sent on subitem added \param subitem subitem that was added */ void subitemAdded(libvlc_media_t *subitem); /*! \brief Signal sent on duration change \param duration new duration */ void durationChanged(int duration); /*! \brief Signal sent on parsed change \param status new parsed status */ Q_DECL_DEPRECATED void parsedChanged(int status); /*! \brief Signal sent on parsed change \param status new parsed status */ void parsedChanged(bool status); /*! \brief Signal sent on freed \param media freed libvlc_media_t object */ void freed(libvlc_media_t *media); /*! \brief Signal sent on state change \param state new state */ void stateChanged(const Vlc::State &state); private: static void libvlc_callback(const libvlc_event_t *event, void *data); void createCoreConnections(); void removeCoreConnections(); libvlc_media_t *_vlcMedia; libvlc_event_manager_t *_vlcEvents; QString _currentLocation; }; #endif // VLCQT_MEDIA_H_ deepin-music-6.0.1.54/src/music-player/core/vlc/MediaPlayer.cpp000775 000000 000000 00000025312 13703317554 024142 0ustar00rootroot000000 000000 #include #include "Audio.h" #include "Error.h" #include "Instance.h" #include "Media.h" #include "MediaPlayer.h" #include #include "Equalizer.h" VlcMediaPlayer::VlcMediaPlayer(VlcInstance *instance) : QObject(instance) { _vlcMediaPlayer = libvlc_media_player_new(instance->core()); _vlcEvents = libvlc_media_player_event_manager(_vlcMediaPlayer); VlcError::showErrmsg(); _vlcAudio = new VlcAudio(this); _vlcEqualizer = new VlcEqualizer(this); _media = 0; // connect(&timer, SIGNAL(timeout()), this, SLOT(timeoutSlot())); // timer.start(1000); createCoreConnections(); VlcError::showErrmsg(); } VlcMediaPlayer::~VlcMediaPlayer() { removeCoreConnections(); delete _vlcAudio; libvlc_media_player_release(_vlcMediaPlayer); VlcError::showErrmsg(); } libvlc_media_player_t *VlcMediaPlayer::core() const { return _vlcMediaPlayer; } VlcAudio *VlcMediaPlayer::audio() const { return _vlcAudio; } //VlcVideo *VlcMediaPlayer::video() const //{ //// return _vlcVideo; //} VlcEqualizer *VlcMediaPlayer::equalizer() const { return _vlcEqualizer; } void VlcMediaPlayer::createCoreConnections() { QList list; list << libvlc_MediaPlayerMediaChanged << libvlc_MediaPlayerNothingSpecial << libvlc_MediaPlayerOpening << libvlc_MediaPlayerBuffering << libvlc_MediaPlayerPlaying << libvlc_MediaPlayerPaused << libvlc_MediaPlayerStopped << libvlc_MediaPlayerForward << libvlc_MediaPlayerBackward << libvlc_MediaPlayerEndReached << libvlc_MediaPlayerEncounteredError << libvlc_MediaPlayerTimeChanged << libvlc_MediaPlayerPositionChanged << libvlc_MediaPlayerSeekableChanged << libvlc_MediaPlayerPausableChanged << libvlc_MediaPlayerTitleChanged << libvlc_MediaPlayerSnapshotTaken << libvlc_MediaPlayerLengthChanged << libvlc_MediaPlayerVout; foreach (const libvlc_event_e &event, list) { libvlc_event_attach(_vlcEvents, event, libvlc_callback, this); } } void VlcMediaPlayer::removeCoreConnections() { QList list; list << libvlc_MediaPlayerMediaChanged << libvlc_MediaPlayerNothingSpecial << libvlc_MediaPlayerOpening << libvlc_MediaPlayerBuffering << libvlc_MediaPlayerPlaying << libvlc_MediaPlayerPaused << libvlc_MediaPlayerStopped << libvlc_MediaPlayerForward << libvlc_MediaPlayerBackward << libvlc_MediaPlayerEndReached << libvlc_MediaPlayerEncounteredError << libvlc_MediaPlayerTimeChanged << libvlc_MediaPlayerPositionChanged << libvlc_MediaPlayerSeekableChanged << libvlc_MediaPlayerPausableChanged << libvlc_MediaPlayerTitleChanged << libvlc_MediaPlayerSnapshotTaken << libvlc_MediaPlayerLengthChanged << libvlc_MediaPlayerVout; foreach (const libvlc_event_e &event, list) { libvlc_event_detach(_vlcEvents, event, libvlc_callback, this); } } bool VlcMediaPlayer::hasVout() const { bool status = false; if (_vlcMediaPlayer) { status = libvlc_media_player_has_vout(_vlcMediaPlayer); } return status; } int VlcMediaPlayer::length() const { libvlc_time_t length = libvlc_media_player_get_length(_vlcMediaPlayer); VlcError::showErrmsg(); return length; } VlcMedia *VlcMediaPlayer::currentMedia() const { return _media; } libvlc_media_t *VlcMediaPlayer::currentMediaCore() { libvlc_media_t *media = libvlc_media_player_get_media(_vlcMediaPlayer); VlcError::showErrmsg(); return media; } void VlcMediaPlayer::open(VlcMedia *media) { _media = media; libvlc_media_player_set_media(_vlcMediaPlayer, media->core()); VlcError::showErrmsg(); } void VlcMediaPlayer::openOnly(VlcMedia *media) { _media = media; libvlc_media_player_set_media(_vlcMediaPlayer, media->core()); VlcError::showErrmsg(); } void VlcMediaPlayer::play() { if (!_vlcMediaPlayer) return; libvlc_media_player_play(_vlcMediaPlayer); VlcError::showErrmsg(); } void VlcMediaPlayer::pause() { if (!_vlcMediaPlayer) return; if (libvlc_media_player_can_pause(_vlcMediaPlayer)) libvlc_media_player_set_pause(_vlcMediaPlayer, true); VlcError::showErrmsg(); } void VlcMediaPlayer::togglePause() { if (!_vlcMediaPlayer) return; if (libvlc_media_player_can_pause(_vlcMediaPlayer)) libvlc_media_player_pause(_vlcMediaPlayer); VlcError::showErrmsg(); } void VlcMediaPlayer::resume() { if (!_vlcMediaPlayer) return; if (libvlc_media_player_can_pause(_vlcMediaPlayer)) libvlc_media_player_set_pause(_vlcMediaPlayer, false); VlcError::showErrmsg(); } void VlcMediaPlayer::setTime(qint64 time) { /***************************************** * add enum Opening to set progress value * ***************************************/ #ifdef QT_NO_DEBUG if (!(state() == Vlc::Buffering || state() == Vlc::Playing || state() == Vlc::Paused || state() == Vlc::Opening)) return; #else if (!(state() == Vlc::Buffering || state() == Vlc::Playing || state() == Vlc::Paused || state() == Vlc::Opening)) //because debug modle may be Opening state return; #endif libvlc_media_player_set_time(_vlcMediaPlayer, time); if (state() == Vlc::Paused) emit timeChanged(time); VlcError::showErrmsg(); } //void VlcMediaPlayer::setVideoWidget(VlcVideoDelegate *widget) //{ // _videoWidget = widget; //} bool VlcMediaPlayer::seekable() const { if (!libvlc_media_player_get_media(_vlcMediaPlayer)) return false; bool seekable = libvlc_media_player_is_seekable(_vlcMediaPlayer); VlcError::showErrmsg(); return seekable; } Vlc::State VlcMediaPlayer::state() const { // It's possible that the vlc doesn't play anything // so check before if (!libvlc_media_player_get_media(_vlcMediaPlayer)) return Vlc::Idle; libvlc_state_t state; state = libvlc_media_player_get_state(_vlcMediaPlayer); // VlcError::showErrmsg(); return Vlc::State(state); } //void VlcMediaPlayer::timeoutSlot() //{ // if (!_vlcMediaPlayer) // return; // emit timeChanged(libvlc_media_player_get_time(_vlcMediaPlayer)); //} void VlcMediaPlayer::stop() { if (!_vlcMediaPlayer) return; libvlc_media_player_stop(_vlcMediaPlayer); VlcError::showErrmsg(); } int VlcMediaPlayer::time() const { libvlc_time_t time = libvlc_media_player_get_time(_vlcMediaPlayer); VlcError::showErrmsg(); return time; } //VlcVideoDelegate *VlcMediaPlayer::videoWidget() const //{ // return _videoWidget; //} void VlcMediaPlayer::libvlc_callback(const libvlc_event_t *event, void *data) { VlcMediaPlayer *core = static_cast(data); switch (event->type) { case libvlc_MediaPlayerMediaChanged: emit core->mediaChanged(event->u.media_player_media_changed.new_media); break; case libvlc_MediaPlayerNothingSpecial: emit core->nothingSpecial(); break; case libvlc_MediaPlayerOpening: emit core->opening(); break; case libvlc_MediaPlayerBuffering: emit core->buffering(event->u.media_player_buffering.new_cache); emit core->buffering(qRound(event->u.media_player_buffering.new_cache)); break; case libvlc_MediaPlayerPlaying: emit core->playing(); break; case libvlc_MediaPlayerPaused: emit core->paused(); break; case libvlc_MediaPlayerStopped: emit core->stopped(); break; case libvlc_MediaPlayerForward: emit core->forward(); break; case libvlc_MediaPlayerBackward: emit core->backward(); break; case libvlc_MediaPlayerEndReached: emit core->end(); break; case libvlc_MediaPlayerEncounteredError: emit core->error(); break; case libvlc_MediaPlayerTimeChanged: emit core->timeChanged(event->u.media_player_time_changed.new_time); break; case libvlc_MediaPlayerPositionChanged: emit core->positionChanged(event->u.media_player_position_changed.new_position); break; case libvlc_MediaPlayerSeekableChanged: emit core->seekableChanged(event->u.media_player_seekable_changed.new_seekable); break; case libvlc_MediaPlayerPausableChanged: emit core->pausableChanged(event->u.media_player_pausable_changed.new_pausable); break; case libvlc_MediaPlayerTitleChanged: emit core->titleChanged(event->u.media_player_title_changed.new_title); break; case libvlc_MediaPlayerSnapshotTaken: emit core->snapshotTaken(event->u.media_player_snapshot_taken.psz_filename); break; case libvlc_MediaPlayerLengthChanged: emit core->lengthChanged(event->u.media_player_length_changed.new_length); break; case libvlc_MediaPlayerVout: emit core->vout(event->u.media_player_vout.new_count); break; default: break; } if (event->type >= libvlc_MediaPlayerNothingSpecial && event->type <= libvlc_MediaPlayerEncounteredError) { emit core->stateChanged(); } } float VlcMediaPlayer::position() { if (!_vlcMediaPlayer) return -1; return libvlc_media_player_get_position(_vlcMediaPlayer); } float VlcMediaPlayer::sampleAspectRatio() { if (!_vlcMediaPlayer) return 0.0; #if LIBVLC_VERSION >= 0x020100 float sar = 0.0; libvlc_media_track_t **tracks; unsigned tracksCount; tracksCount = libvlc_media_tracks_get(_media->core(), &tracks); if (tracksCount > 0) { for (unsigned i = 0; i < tracksCount; i++) { libvlc_media_track_t *track = tracks[i]; if (track->i_type == libvlc_track_video && track->i_id == 0) { libvlc_video_track_t *videoTrack = track->video; if (videoTrack->i_sar_num > 0) sar = (float)videoTrack->i_sar_den / (float)videoTrack->i_sar_num; } } libvlc_media_tracks_release(tracks, tracksCount); } return sar; #else return 1.0; #endif // LIBVLC_VERSION >= 0x020100 } void VlcMediaPlayer::setPosition(float pos) { libvlc_media_player_set_position(_vlcMediaPlayer, pos); VlcError::showErrmsg(); } void VlcMediaPlayer::setPlaybackRate(float rate) { libvlc_media_player_set_rate(_vlcMediaPlayer, rate); VlcError::showErrmsg(); } float VlcMediaPlayer::playbackRate() { if (!_vlcMediaPlayer) return -1; return libvlc_media_player_get_rate(_vlcMediaPlayer); } deepin-music-6.0.1.54/src/music-player/core/vlc/MediaPlayer.h000775 000000 000000 00000016636 13703317554 023620 0ustar00rootroot000000 000000 #ifndef VLCQT_MEDIAPLAYER_H_ #define VLCQT_MEDIAPLAYER_H_ #include #include #include #include #include "Enums.h" //#include "SharedExportCore.h" #define LIBVLC_VERSION 0x020200 class VlcAudio; class VlcEqualizer; class VlcInstance; class VlcMedia; class VlcVideo; class VlcVideoDelegate; struct libvlc_event_t; struct libvlc_event_manager_t; struct libvlc_media_t; struct libvlc_media_player_t; class VLCQT_CORE_EXPORT VlcMediaPlayer : public QObject { Q_OBJECT public: /*! \brief VlcMediaPlayer constructor. This is mandatory to use libvlc playback functions. \param instance instance object (VlcInstance *) */ explicit VlcMediaPlayer(VlcInstance *instance); /*! VlcMediaPlayer destructor */ ~VlcMediaPlayer(); /*! \brief Returns libvlc media player object. \return libvlc media player (libvlc_media_player_t *) */ libvlc_media_player_t *core() const; /*! \brief Returns audio manager object. \return audio manager (VlcAudio *) */ VlcAudio *audio() const; /*! \brief Returns video manager object. \return video manager (VlcVideo *) */ // VlcVideo *video() const; #if LIBVLC_VERSION >= 0x020200 /*! \brief Returns equalizer object. \return equalizer (VlcEqualizer *) */ VlcEqualizer *equalizer() const; #endif /*! \brief Get the current movie length (in ms). \return the movie length (in ms), or -1 if there is no media (const int) */ int length() const; /*! \brief Get current media object \return media object (VlcMedia *) */ VlcMedia *currentMedia() const; /*! \brief Get current media core object \return media core object (libvlc_media_t *) */ libvlc_media_t *currentMediaCore(); /*! \brief Open media file or stream. Any media should be playable and opened. \param media object (VlcMedia *) */ void open(VlcMedia *media); /*! \brief Just opens the media file or stream, do not starts playing the media. \param media object (VlcMedia *) */ void openOnly(VlcMedia *media); public slots: /*! \brief Set the movie time (in ms). This has no effect if no media is being played. Not all formats and protocols support this. \param time the movie time (in ms) (int) */ void setTime(qint64 time); public: /*! \brief Get the current movie time (in ms). \return the movie time (in ms), or -1 if there is no media (const int) */ int time() const; /*! \brief Set video widget. Set video widget to be able to play video inside Qt interface. \param widget video widget (VlcVideoDelegate *) */ // void setVideoWidget(VlcVideoDelegate *widget); /*! \brief Get video output status \return video output status (const bool) */ bool hasVout() const; /*! \brief Get seekable status \return seekable status (const bool) */ bool seekable() const; /*! \brief Get current player state. \return current player state (const Vlc::State) */ Vlc::State state() const; /*! \brief Get current video widget. \return current video widget (VlcVideoWidget *) */ // VlcVideoDelegate *videoWidget() const; /*! \brief Get media content position. \return current media position (float) */ float position(); /*! \brief Get sample aspect ratio for current video track( vlc >= 2.1.0 ). \return sample aspect ratio (float) */ float sampleAspectRatio(); /*! \brief Get current media playback rate. \return current media playback rate (float) */ float playbackRate(); public slots: /*! \brief Set the media position. This has no effect if no media is being played. Not all formats and protocols support this. \param pos the media position (float) */ void setPosition(float pos); /*! \brief Set the media playback rate. \param rate the media playback rate (float) */ void setPlaybackRate(float rate); /*! \brief Starts playing current media if possible */ void play(); /*! \brief Pauses the playback of current media if possible */ void pause(); /*! \brief Toggles pause of the playback of current media if possible */ void togglePause(); /*! \brief Resumes the playback of current media if possible */ void resume(); /*! \brief Stops playing current media */ void stop(); // void timeoutSlot(); signals: /*! \brief Signal sent on backward */ void backward(); /*! \brief Signal sent on buffering \param buffer buffer status in percent */ void buffering(float buffer); /*! \brief Signal sent on buffering \param buffer buffer status in percent */ void buffering(int buffer); /*! \brief Signal sent when end reached */ void end(); /*! \brief Signal sent on error */ void error(); /*! \brief Signal sent on forward */ void forward(); /*! \brief Signal sent on length change \param length new length */ void lengthChanged(int length); /*! \brief Signal sent on media change \param media new media object */ void mediaChanged(libvlc_media_t *media); /*! \brief Signal sent nothing speciall happened */ void nothingSpecial(); /*! \brief Signal sent when opening */ void opening(); /*! \brief Signal sent on pausable change \param pausable pausable status */ void pausableChanged(bool pausable); /*! \brief Signal sent when paused */ void paused(); /*! \brief Signal sent when playing */ void playing(); /*! \brief Signal sent on position change \param position new position */ void positionChanged(float position); /*! \brief Signal sent on seekable change \param seekable seekable status */ void seekableChanged(bool seekable); /*! \brief Signal sent on snapshot taken \param filename filename of the snapshot */ void snapshotTaken(const QString &filename); /*! \brief Signal sent when stopped */ void stopped(); /*! \brief Signal sent on time change \param time new time */ void timeChanged(qint64 time); /*! \brief Signal sent on title change \param title new title */ void titleChanged(int title); /*! \brief Signal sent when video output is available \param count number of video outputs available */ void vout(int count); /*! \brief Signal sent when state of the player changed */ void stateChanged(); private: static void libvlc_callback(const libvlc_event_t *event, void *data); void createCoreConnections(); void removeCoreConnections(); libvlc_media_player_t *_vlcMediaPlayer; libvlc_event_manager_t *_vlcEvents; VlcMedia *_media; VlcAudio *_vlcAudio; VlcVideo *_vlcVideo; VlcEqualizer *_vlcEqualizer; QTimer timer; }; #endif // VLCQT_MEDIAPLAYER_H_ deepin-music-6.0.1.54/src/music-player/core/vlc/SharedExportCore.h000775 000000 000000 00000002212 13703317554 024626 0ustar00rootroot000000 000000 /**************************************************************************** * VLC-Qt - Qt and libvlc connector library * Copyright (C) 2012 Tadej Novak * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . *****************************************************************************/ #ifndef VLCQT_SHARED_EXPORT_CORE_H #define VLCQT_SHARED_EXPORT_CORE_H #include #if defined(VLCQT_CORE_LIBRARY) #define VLCQT_CORE_EXPORT Q_DECL_EXPORT #else #define VLCQT_CORE_EXPORT Q_DECL_IMPORT #endif #endif // SHARED_EXPORT_CORE_H deepin-music-6.0.1.54/src/music-player/core/volumemonitoring.cpp000775 000000 000000 00000011277 13703317554 024604 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "volumemonitoring.h" #include #include #include #include #include #include #include #include "util/dbusutils.h" #include "util/global.h" #include "musicsettings.h" class VolumeMonitoringPrivate { public: VolumeMonitoringPrivate(VolumeMonitoring *parent) : q_ptr(parent) {} QTimer timer; int oldVolume = 0; bool oldMute = false; bool bUpdate = true; VolumeMonitoring *q_ptr; Q_DECLARE_PUBLIC(VolumeMonitoring) }; VolumeMonitoring::VolumeMonitoring(QObject *parent) : QObject(parent), d_ptr(new VolumeMonitoringPrivate(this)) { Q_D(VolumeMonitoring); d->oldMute = MusicSettings::value("base.play.mute").toBool(); d->oldVolume = MusicSettings::value("base.play.volume").toInt(); connect(&d->timer, SIGNAL(timeout()), this, SLOT(timeoutSlot())); } VolumeMonitoring::~VolumeMonitoring() { stop(); } void VolumeMonitoring::start() { Q_D(VolumeMonitoring); d->timer.start(1000); } void VolumeMonitoring::stop() { Q_D(VolumeMonitoring); d->timer.stop(); } bool VolumeMonitoring::needSyncLocalFlag() { Q_D(VolumeMonitoring); return d->bUpdate; } void VolumeMonitoring::syncLocalFlag() { Q_D(VolumeMonitoring); d->bUpdate = true; } void VolumeMonitoring::timeoutSlot() { Q_D(VolumeMonitoring); QVariant v = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", "/com/deepin/daemon/Audio", "com.deepin.daemon.Audio", "SinkInputs"); if (!v.isValid()) return; QList allSinkInputsList = v.value >(); QString sinkInputPath; for (auto curPath : allSinkInputsList) { QVariant nameV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", curPath.path(), "com.deepin.daemon.Audio.SinkInput", "Name"); if (!nameV.isValid() || nameV != Global::getAppName()) continue; sinkInputPath = curPath.path(); break; } if (sinkInputPath.isEmpty()) return; QDBusInterface ainterface("com.deepin.daemon.Audio", sinkInputPath, "com.deepin.daemon.Audio.SinkInput", QDBusConnection::sessionBus()); if (!ainterface.isValid()) { return ; } if(d->bUpdate) { /************************************* * sync local mute or volume to dbus * ***********************************/ //è°ƒç”¨è®¾ç½®éŸ³é‡ QVariant muteV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", sinkInputPath, "com.deepin.daemon.Audio.SinkInput", "Mute"); if(muteV.toBool() != MusicSettings::value("base.play.mute").toBool()) ainterface.call(QLatin1String("SetMute"), MusicSettings::value("base.play.mute").toBool()); //ainterface.call(QLatin1String("SetVolume"), MusicSettings::value("base.play.volume").toInt(), false); if (qFuzzyCompare(MusicSettings::value("base.play.volume").toInt(), 0.0)) ainterface.call(QLatin1String("SetMute"), true); d->bUpdate = false; } //获å–éŸ³é‡ QVariant volumeV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", sinkInputPath, "com.deepin.daemon.Audio.SinkInput", "Volume"); //获å–éŸ³é‡ QVariant muteV = DBusUtils::readDBusProperty("com.deepin.daemon.Audio", sinkInputPath, "com.deepin.daemon.Audio.SinkInput", "Mute"); //å–æœ€å°æ­£æ•´æ•° int volume = qFloor(volumeV.toDouble() * 100); bool mute = muteV.toBool(); if (volume != d->oldVolume) { d->oldVolume = volume; Q_EMIT volumeChanged(volume); } if (mute != d->oldMute) { d->oldMute = mute; Q_EMIT muteChanged(mute); } } deepin-music-6.0.1.54/src/music-player/core/volumemonitoring.h000664 000000 000000 00000002467 13703317554 024247 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include class VolumeMonitoringPrivate; class VolumeMonitoring : public QObject { Q_OBJECT public: explicit VolumeMonitoring(QObject *parent = Q_NULLPTR); ~VolumeMonitoring(); void start(); void stop(); bool needSyncLocalFlag(); signals: void volumeChanged(int volume); void muteChanged(bool mute); public slots: void timeoutSlot(); void syncLocalFlag(); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), VolumeMonitoring) }; deepin-music-6.0.1.54/src/music-player/data/000775 000000 000000 00000000000 13703317554 020431 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/data/com.deepin.dde.music.service000664 000000 000000 00000000000 13703317554 025674 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/data/deepin-music-settings.json000664 000000 000000 00000021636 13703317554 025554 0ustar00rootroot000000 000000 { "groups": [ { "key": "base", "name": "Basic", "groups": [ { "key": "play", "name": "Play", "options": [ { "key": "auto_play", "name": " ", "type": "checkbox", "text": "Autoplay", "default": false }, { "key": "remember_progress", "name": " ", "type": "checkbox", "text": "Remember playback position", "default": true }, { "key": "fade_in_out", "name": " ", "type": "checkbox", "text": "Enable fade in/out", "default": false }, { "key": "sort_type", "hide": true, "reset": false, "items": [ 0, 1, 2, 3 ], "default": 0 }, { "key": "geometry", "hide": true, "reset": false }, { "key": "state", "hide": true, "reset": false }, { "key": "media_count", "hide": true, "reset": false, "default": 0 }, { "key": "to_open_uri", "hide": true, "reset": false }, { "key": "playmode", "reset": false, "hide": true, "combox_list": [ 0, 1, 2 ], "default": 0 }, { "key": "volume", "reset": false, "hide": true, "max": 100, "min": 0, "default": 50 }, { "key": "mute", "hide": true, "reset": false, "default": false }, { "key": "theme", "hide": true, "reset": false, "default": 1 }, { "key": "theme_prefix", "hide": true, "default": ":" }, { "key": "last_playlist", "hide": true, "default": "all" }, { "key": "last_meta", "hide": true, "default": "" }, { "key": "last_position", "comment": "by ms", "hide": true, "default": "0" }, { "key": "last_import_path", "hide": true, "reset": false, "default": "" } ] }, { "key": "close", "name": "Close Main Window", "hide": false, "options": [ { "key": "ask_close_action", "hide": true, "default": true }, { "key": "close_action", "name": " ", "type": "radiogroup", "items": [ "Minimize to system tray", "Exit Music" ], "default": 0 } ] } ] }, { "key": "shortcuts", "name": "Shortcuts", "groups": [ { "key": "all", "name": "", "options": [ { "key": "play_pause", "name": "Play/Pause", "type": "shortcut", "default": "Space" }, { "key": "previous", "name": "Previous", "type": "shortcut", "default": "Ctrl+Left" }, { "key": "next", "name": "Next", "type": "shortcut", "default": "Ctrl+Right" }, { "key": "volume_up", "name": "Volume up", "type": "shortcut", "default": "Ctrl+Alt+Up" }, { "key": "volume_down", "name": "Volume down", "type": "shortcut", "default": "Ctrl+Alt+Down" } ] } ] }, { "key": "equalizer", "name": "Equalizer", "reset": false, "hide": true, "groups": [ { "key": "all", "name": "All", "options": [ { "key": "switch", "default": false }, { "key": "curEffect", "default": 0 }, { "key": "baud_pre", "default": 12 }, { "key": "baud_60", "default": 0 }, { "key": "baud_170", "default": 0 }, { "key": "baud_310", "default": 0 }, { "key": "baud_600", "default": 0 }, { "key": "baud_1K", "default": 0 }, { "key": "baud_3K", "default": 0 }, { "key": "baud_6K", "default": 0 }, { "key": "baud_12K", "default": 0 }, { "key": "baud_14K", "default": 0 }, { "key": "baud_16K", "default": 0 } ] } ] } ] } deepin-music-6.0.1.54/src/music-player/data/deepin-music.desktop000664 000000 000000 00000025620 13703317554 024413 0ustar00rootroot000000 000000 [Desktop Entry] Categories=Audio;AudioVideo;Qt; Comment=Play your music collection Exec=deepin-music %F GenericName=Music Icon=deepin-music MimeType=audio/musepack;application/musepack;application/x-ape;audio/ape;audio/x-ape;audio/x-musepack;application/x-musepack;audio/x-mp3;application/x-id3;audio/mpeg;audio/x-mpeg;audio/x-mpeg-3;audio/mpeg3;audio/mp3;audio/x-m4a;audio/mpc;audio/x-mpc;audio/mp;audio/x-mp;application/ogg;application/x-ogg;audio/vorbis;audio/x-vorbis;audio/ogg;audio/x-ogg;audio/x-flac;application/x-flac;audio/flac;audio/3gp;audio/imy;audio/midi;audio/xmf;audio/x-wav;application/x-wav;audio/x-ms-wma;application/x-ms-wma;audio/aac;application/aac;audio/ac3;audio/AMR; Name=Music Type=Application StartupNotify=false X-Deepin-ManualID=deepin-music X-Deepin-Vendor=deepin # Translations: # Do not manually modify! Comment[am_ET]=የእርስዎን የ ሙዚቃ ስብስብ ያጫá‹á‰± Comment[ar]=تشغيل مجموعة الصوتيات الخاصة بك Comment[ast]=Reproduz la to coleición de música Comment[az]=Musiqi kolleksiyavı oxut Comment[bg]=Изпълнение на Вашата музикална ÐºÐ¾Ð»ÐµÐºÑ†Ð¸Ñ Comment[ca]=Reproduïu la col·lecció de música Comment[cs]=PÅ™ehrávejte svoji sbírku zvukových záznamů Comment[da]=Afspil din musiksamling Comment[de]=Musik verwalten und abspielen Comment[el]=ΑναπαÏαγάγετε τη μουσική σας συλλογή Comment[en_AU]=Play your music Comment[eo]=Ludi vian muzikojn kolekton Comment[es]=Reproduce tu colección musical Comment[es_419]=Reproducir tu colección de música Comment[fa]=پخش کردن موسیقی های منتخب Comment[fi]=Toista musiikkikokoelma Comment[fil]=Magtugtog ng musika Comment[fr]=Lire votre collection de musique Comment[gl_ES]=Reproduce a túa colección de música Comment[he]=נגן ×ת ×וסף המוסיקה שלך Comment[hi_IN]=संगीत संगà¥à¤°à¤¹ चलायें Comment[hr]=SluÅ¡ajte svoju fonoteku Comment[hu]=Zenegyűjtemény lejátszása Comment[hy]=Õ†Õ¾Õ¡Õ£Õ¥Õ¬ Õ±Õ¥Ö€ Õ¥Ö€Õ¡Õ®Õ·Õ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ°Õ¡Õ¾Õ¡Ö„Õ¡Õ®Õ¸Ö‚Õ¶ Comment[id]=Mainkan koleksi musik Comment[it]=Esegui la tua raccolta musicale Comment[ja]=音楽コレクションã®å†ç”Ÿ Comment[ko]=ìŒì•… 컬렉션 ìž¬ìƒ Comment[ku_IQ]=Li koleksiyona xwe ya mûzîkê bixe Comment[lt]=Groti savo muzikinÄ™ kolekcijÄ… Comment[mn]=Хөгжмийн цуглуулгаа тоглуул Comment[ms]=Main koleksi muzik anda Comment[nb]=Spill av din musikksamling Comment[nl]=Speel je muziekverzameling af Comment[pl]=Odtwarzaj swojÄ… kolekcjÄ™ muzyki Comment[pt]=Reproduzir a sua coleção de música Comment[pt_BR]=Reproduza sua coleção musical Comment[ro]=Redă colecÈ›ia ta de muzică Comment[ru]=ВоÑпроизведение музыкальной коллекции Comment[sk]=Prehrávajte svoju zbierku zvukových záznamov Comment[sl]=Predvajaj svojo glasbeno zbirko Comment[sr]=Слушајте вашу музичку колекцију Comment[sv]=Spela din musiksamling Comment[ta]=உஙà¯à®•ள௠இசைத௠தொகà¯à®ªà¯à®ªà¯ˆ இயகà¯à®•வà¯à®®à¯ Comment[tr]=Müzik koleksiyonunuzu oynatın Comment[uk]=Відтворіть твори вашої музичної збірки Comment[zh_CN]=为您播放本地åŠç½‘ç»œéŸ³é¢‘æµ Comment[zh_HK]=播放你收è—的音樂 Comment[zh_TW]=播放存於電腦的音樂 GenericName[af]=Musiek GenericName[am_ET]=ሙዚቃ GenericName[ar]=موسيقى GenericName[ast]=Música GenericName[az]=Musiqi GenericName[bg]=Музика GenericName[bn]=মিউজিক GenericName[ca]=Música GenericName[cs]=Hudba GenericName[da]=Musik GenericName[de]=Musik GenericName[el]=Μουσική GenericName[en_AU]=Music GenericName[eo]=Muziko GenericName[es]=Música GenericName[es_419]=Música GenericName[fa]=موسیقی GenericName[fi]=Musiikki GenericName[fil]=Musika GenericName[fr]=Musique GenericName[gl_ES]=Música GenericName[he]=מוזיקה GenericName[hi_IN]=संगीत GenericName[hr]=Glazba GenericName[hu]=Zene GenericName[id]=Musik GenericName[it]=Music GenericName[ja]=ミュージック GenericName[ko]=ìŒì•… GenericName[ku_IQ]=Mûzîk GenericName[lt]=Muzika GenericName[ml]=സംഗീതം GenericName[mn]=Хөгжим GenericName[ms]=Muzik GenericName[nb]=Musikk GenericName[ne]=संगीत GenericName[nl]=Muziek GenericName[pam]=Musika GenericName[pl]=Muzyka GenericName[pt]=Música GenericName[pt_BR]=Música GenericName[ro]=Muzică GenericName[ru]=Музыка GenericName[sk]=Hudba GenericName[sl]=Glasba GenericName[sr]=Музика GenericName[sv]=Musik GenericName[ta]=இசை GenericName[tr]=Müzik GenericName[ug]=مۇزىكا GenericName[uk]=Музика GenericName[vi]=Âm nhạc GenericName[zh_CN]=éŸ³ä¹ GenericName[zh_HK]=音樂 GenericName[zh_TW]=音樂 Name[am_ET]=ዲá•ኢን ሙዚቃ Name[ar]=موسيقى دييبن Name[ast]=Música Deepin Name[az]=Deepin Musiqi Name[bg]=Deepin Музика Name[bn]=ডিপিন মিউজিক Name[ca]=Música del Deepin Name[cs]=PÅ™ehrávání hudby Name[da]=Deepin musik Name[de]=Deepin Musik Name[el]=Μουσική Deepin Name[en_AU]=Deepin Music Name[eo]=Deepin Muziko Name[es]=Reproductor Deepin Name[es_419]=Reproductor de Música Deepin Name[fa]=دیپین موزیک Name[fi]=Deepin Musiikki Name[fil]=Deepin Music Name[fr]=Deepin Music Name[gl_ES]=Música Name[he]=נגן מוסיקה Deepin Name[hi_IN]=डीपइन संगीत Name[hr]=Deepin glazba Name[hu]=Deepin zenelejátszó Name[hy]=Deepin ÔµÖ€Õ¡ÕªÕ·Õ¿Õ¡Õ¯Õ¡Õ¶ Õ†Õ¾Õ¡Õ£Õ¡Ö€Õ¯Õ«Õ¹ Name[id]=Musik Deepin Name[it]=Deepin Music Name[ja]=Deepin音楽プレイヤー Name[ko]=Deepin ìŒì•… Name[ku_IQ]=Deepin Mûzîk Name[lt]=Deepin muzika Name[mn]=ДÑÑпин Хѳгжи Name[ms]=Pemain Muzik Deepin Name[nb]=Deepin Musikk Name[nl]=Deepin Muziek Name[pl]=Muzyka Deepin Name[pt]=Deepin Music Name[pt_BR]=Música Deepin Name[ro]= Player-ul muzical Deepin Name[ru]=Музыкальный проигрыватель Deepin Name[sk]=Deepin Hudobný prehrávaÄ Name[sl]=Deepin glasbeni predvajalnik Name[sr]=Дипин Музика Name[sv]=Deepin-musik Name[ta]=டீபà¯à®‡à®©à¯ இசை Name[tr]=Deepin Müzik Name[ug]=Deepin ناخشى قويغۇچى Name[uk]=Deepin Музика Name[vi]=Trình nghe nhạc Deepin Name[zh_CN]=éŸ³ä¹ Name[zh_HK]=音樂 Name[zh_TW]=音樂 #[X-Next Shortcut Group] #Exec=dbus-send --print-reply --dest=org.mpris.MediaPlayer2.DeepinMusic /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next #Name=Next track # ## Translations: ## Do not manually modify! #Name[am_ET]=የሚቀጥለዠተረኛ #Name[ar]=المسار التالي #Name[ast]=Pista siguiente #Name[bg]=Следваща пеÑен #Name[ca]=Pista següent #Name[cs]=Další skladba #Name[da]=Næste spor #Name[de]=Nächster Titel #Name[el]=Επόμενο κομμάτι #Name[es]=Siguiente pista #Name[es_419]=Pista siguiente #Name[fa]=قطعه بعدی #Name[fi]=Seuraava raita #Name[fr]=Piste suivante #Name[gl_ES]=Seguinte pista #Name[he]=הקטע ×”×‘× #Name[hi_IN]=अगला गाना #Name[hr]=Slijedeći zapis #Name[hu]=KövetkezÅ‘ szám #Name[hy]=Õ€Õ¡Õ»Õ¸Ö€Õ¤Õ¨ #Name[id]=Lajur selanjutnya #Name[it]=Traccia successiva #Name[ja]=次㸠#Name[ko]=ë‹¤ìŒ íŠ¸ëž™ #Name[ku_IQ]=Strana pêşve #Name[lt]=Kitas takelis #Name[mn]=Дараагийн дуу #Name[ms]=trek seterusnya #Name[nl]=Volgende nummer #Name[pl]=NastÄ™pna Å›cieżka #Name[pt]=Faixa seguinte #Name[pt_BR]=Próxima #Name[ro]=Melodia următoare #Name[ru]=Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ° #Name[sk]=ÄŽalÅ¡ia stopa #Name[sl]=Naslednja skladba #Name[sr]=Следећа нумера #Name[tr]=Sonraki parça #Name[uk]=ÐаÑтупний трек #Name[zh_CN]=下一首 #Name[zh_HK]=下一首歌曲 #Name[zh_TW]=下一曲 # #[X-PlayPause Shortcut Group] #Exec=dbus-send --print-reply --dest=org.mpris.MediaPlayer2.DeepinMusic /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause #Name=Play/Pause track # ## Translations: ## Do not manually modify! #Name[am_ET]=ተረኛ ማጫወቻ/ማስቆሚያ #Name[ar]=تشغيل / إيقا٠المسار #Name[ast]=Reproducir/posar pista #Name[bg]=Изпълнение/Пауза на запиÑа #Name[ca]=Reprodueix / pausa la pista #Name[cs]=PÅ™ehrát/Pozastavit skladbu #Name[da]=Afspil/pause spor #Name[de]=Titel abspielen/pausieren #Name[el]=ΑναπαÏαγωγή/ΠαÏση ÎºÎ¿Î¼Î¼Î±Ï„Î¹Î¿Ï #Name[es]=Reproducir/Pausar pista #Name[es_419]=Reproducir/Pausar Pista #Name[fa]=پخش/توق٠قطعه #Name[fi]=Toista/Pysäytä raita #Name[fr]=Lire / Mettre en pause la piste #Name[gl_ES]=Reproducir/Pausar pista #Name[he]=נגן/הפסק קטע #Name[hi_IN]=गाना पà¥à¤²à¥‡/पौज़ करें #Name[hr]=Izvodi/pauziraj zapis #Name[hu]=Szám lejátszása/Szüneteltetése #Name[hy]=Õ†Õ¾Õ¡Õ£Õ¥Õ¬/Õ¯Õ¡Õ¶Õ£Õ¶Õ¥ÖÕ¶Õ¥Õ¬ #Name[id]=Mainkan/hentikan lajur #Name[it]=Play/Pausa #Name[ja]=å†ç”Ÿ/ä¸€æ™‚åœæ­¢ #Name[ko]=트랙 재ìƒ/ì¼ì‹œì •ì§€ #Name[ku_IQ]=Li stranê bixe/Stranê Bisekinîne #Name[lt]=Groti/Pristabdyti takelį #Name[mn]=Дуу Тоглуулах/Түр ЗогÑоох #Name[ms]=Main/Jeda trek #Name[nl]=Nummer afspelen/pauzeren #Name[pl]=Odtwórz/Wstrzymaj Å›cieżkÄ™ #Name[pt]=Reproduzir/Pausar faixa #Name[pt_BR]=Play/Pause #Name[ro]=Redare/Pauză melodia #Name[ru]=ВоÑпроизведение/Пауза дорожки #Name[sk]=PrehrávaÅ¥/PozastaviÅ¥ skladbu #Name[sl]=Predvajaj/Zaustavi skladbo #Name[sr]=ПуÑти/Паузирај нумеру #Name[tr]=Parçayı oynat/duraklat #Name[uk]=Відтворити/Призупинити трек #Name[zh_CN]=æš‚åœ/ç»§ç»­ #Name[zh_HK]=æ’­æ”¾ï¼æš«åœæ›²ç›® #Name[zh_TW]=æ’­æ”¾ï¼æš«åœ # #[X-Previous Shortcut Group] #Exec=dbus-send --print-reply --dest=org.mpris.MediaPlayer2.DeepinMusic /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous #Name=Previous track # ## Translations: ## Do not manually modify! #Name[am_ET]=ያለáˆá‹ ተረኛ #Name[ar]=المسار السابق #Name[ast]=Pista previa #Name[bg]=Предишна пеÑен #Name[ca]=Pista anterior #Name[cs]=PÅ™edchozí skladba #Name[da]=Forrige spor #Name[de]=Vorheriger Titel #Name[el]=ΠÏοηγοÏμενο κομμάτι #Name[es]=Pista anterior #Name[es_419]=Pista anterior #Name[fa]=قطعه قبلی #Name[fi]=Edellinen raita #Name[fr]=Piste précédente #Name[gl_ES]=Pista anterior #Name[he]=הקטע ×”×§×•×“× #Name[hi_IN]=पिछला गाना #Name[hr]=Prethodni zapis #Name[hu]=ElÅ‘zÅ‘ szám #Name[hy]=Õ†Õ¡Õ­Õ¸Ö€Õ¤Õ¨ #Name[id]=Lajur sebelumnya #Name[it]=Traccia precedente #Name[ja]=å‰ã¸ #Name[ko]=ì´ì „ 트랙 #Name[ku_IQ]=Strana paÅŸve #Name[lt]=Ankstesnis takelis #Name[mn]=Өмнөх дуу #Name[ms]=trek sebelumnya #Name[nl]=Vorig nummer #Name[pl]=Poprzednia Å›cieżka #Name[pt]=Faixa anterior #Name[pt_BR]=Anterior #Name[ro]=Melodia anterioară #Name[ru]=ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ° #Name[sk]=Predchádzajúca stopa #Name[sl]=PrejÅ¡nja skladba #Name[sr]=Претходна нумера #Name[tr]=Önceki parça #Name[uk]=Попередній трек #Name[zh_CN]=上一首 #Name[zh_HK]=上一首歌曲 #Name[zh_TW]=上一曲 deepin-music-6.0.1.54/src/music-player/dman/000775 000000 000000 00000000000 13703317554 020437 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/000775 000000 000000 00000000000 13703317554 023021 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/000775 000000 000000 00000000000 13703317554 024311 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/deepin-music.svg000664 000000 000000 00000040307 13703317554 027420 0ustar00rootroot000000 000000 深度音ä¹-256px Created with Sketch. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/icon_commoncoperat.svg000664 000000 000000 00000003310 13703317554 030705 0ustar00rootroot000000 000000 常用æ“作-64px Created with Sketch. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/icon_commoncoperat_small.svg000664 000000 000000 00000003345 13703317554 032105 0ustar00rootroot000000 000000 常用æ“作-24px Created with Sketch. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/icon_guide.svg000664 000000 000000 00000005617 13703317554 027150 0ustar00rootroot000000 000000 ]> deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/icon_guide_small.svg000664 000000 000000 00000005332 13703317554 030332 0ustar00rootroot000000 000000 ]> deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/icon_localmusic.svg000664 000000 000000 00000002354 13703317554 030201 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/icon_localmusic_small.svg000664 000000 000000 00000002263 13703317554 031370 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/icon_optionsetting.svg000664 000000 000000 00000003067 13703317554 030756 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/icon_optionsetting_small.svg000664 000000 000000 00000003101 13703317554 032133 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/icon_overview.svg000664 000000 000000 00000001367 13703317554 027717 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/icon_overview_small.svg000664 000000 000000 00000001466 13703317554 031107 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/icon_playlist.svg000664 000000 000000 00000002410 13703317554 027700 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/common/icon_playlist_small.svg000664 000000 000000 00000002526 13703317554 031100 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/000775 000000 000000 00000000000 13703317554 024032 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/icon/000775 000000 000000 00000000000 13703317554 024762 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/icon/Enter.svg000664 000000 000000 00000004160 13703317554 026561 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/icon/attention.svg000664 000000 000000 00000007670 13703317554 027522 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/icon/close_icon.svg000664 000000 000000 00000002511 13703317554 027617 0ustar00rootroot000000 000000 ]> deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/icon/collect-active.svg000664 000000 000000 00000003110 13703317554 030374 0ustar00rootroot000000 000000 collect-active Created with Sketch. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/icon/collect.svg000664 000000 000000 00000003626 13703317554 027137 0ustar00rootroot000000 000000 collect Created with Sketch. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/icon/icon_menu.svg000664 000000 000000 00000001666 13703317554 027470 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/icon/launcher_icon.svg000664 000000 000000 00000005654 13703317554 030326 0ustar00rootroot000000 000000 deepin-launcher Created with Sketch. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/icon/list_icon.svg000664 000000 000000 00000002335 13703317554 027471 0ustar00rootroot000000 000000 show_playlist_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/icon/music_icon-24.svg000664 000000 000000 00000040307 13703317554 030062 0ustar00rootroot000000 000000 深度音ä¹-256px Created with Sketch. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/icon/notes.svg000664 000000 000000 00000007200 13703317554 026632 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/index.md000664 000000 000000 00000022661 13703317554 025472 0ustar00rootroot000000 000000 # Deepin Music|../common/deepin-music.svg| ## Overview|../common/icon_overview.svg| Deepin Music is a local music playing application with brand new UI design and extreme playing experience developed by Deepin Technology. It's featured with local music scanning and lyric sync functions, etc. ## Guide|../common/icon_guide.svg| You can run, close and create a shortcut for Deepin Music by the following ways. ### Run Deepin Music 1. Click on ![launcher_icon](icon/launcher_icon.svg) or move the mouse pointer to the upper left corner of the screen to enter Launcher interface. 2. Locate ![music_icon-24](icon/music_icon-24.svg) by scrolling mouse wheel or searching by "deepin music" in Launcher interface. 3. Right click on the Deepin Music application icon, you can - Click on **Send to desktop** to create a desktop shortcut. - Click on **Send to dock** to fix the application on dock. - Click on **Add to startup** to add the application to startup, it will automatically run when the system starts up. > ![notes](icon/notes.svg): If Deepin Music has been fixed on Dock, you can also click on its icon to run. ### Minimize to System Tray 1. On Deepin Music interface, click on ![close](icon/close_icon.svg), select **Minimize to system tray**. 2. Deepin Music will be minimized to tray; 3. Right click on the Deepin Music application icon in the tray, you can: - Click on **Play/Pause** to play/pause the song; - Click on **Previous** to play previous song; - Click on **Next** to play next song. - Click on **Exit** to exit Deepin Music. ![0|ask](png/ask.png) ### Exit Deepin Music - On Deepin Music interface, click on ![close](icon/close_icon.svg), and select **Exit** to exit Deepin Music. - Right click on the Deepin Music application icon on Dock, select **Close All** to exit Music. - Click on ![Settings](icon/icon_menu.svg) and select **Exit** to exit Deepin Music. ## Main Interface|../common/icon_localmusic.svg| On the main interface, you can do common playing operations, view playlist and song info. ![1|main](png/main.png)
1 Search box Users can search music quickly by search box.
2 Main menu Users can add playlist, add music, set options, view manual and information, and exit the application by main menu.
3 Sort options Users can sort the list by time added, title, artist or album name.
4 Play box Show seek bar, cover and album name.
5 Play/Pause button Click to Play/Pause music.
6 Previous/Next Click to switch to Previous/Next music.
7 My favorites Click to add music to my favorites, click again to cancel.
8 Lyrics Click to switch to the lyrics interface, click again to close lyrics.
9 Play mode Click to switch the play mode, including repeat playlist, repeat song and shuffle.
10 Volume Click to Mute/Unmute, move on to show the volume bar to adjust.
11 Playlist Click to show/hide playlist.
## Common Operations|../common/icon_commoncoperat.svg| You can add, delete and view info of the local music in Deepin Music. ### Add File On Deepin Music interface, you can: - Click on **Add folder** to add a music folder. - Click on **Scan** to scan music directory. - Click on ![menu](icon/icon_menu.svg) > **Add folder** to add a music folder. - Click on ![menu](icon/icon_menu.svg) > **Add file** to add a music file. ![0|add](png/add.png) > ![notes](icon/notes.svg): You can also drag and drop music file to Deepin Music interface to add. ### Search Music 1. At the top of the Deepin Music interface, click on **Search**. 2. Enter the keywords in search box, then the result will be shown on the interface and you can locate the music quickly. ![1|searchmusic](png/searchmusic.png) ### Add Music to My Favorites On Deepin Music interface, click on ![collect](icon/collect.svg) to add music to my favorites. > ![notes](icon/notes.svg): You can also right click on the music, and click on **Add to playlist** > **My Favorites** to finish this task. ### Display in File Manager 1. On Deepin Music interface, right click the music. 2. Click on **Display in file manager**, you can view the the music file in Deepin File Manager. ![0|infile](png/infile.png) ### Delete Music On Deepin Music interface, right click on the music, you can: - Click on **Remove from playlist** to remove from the playlist, but the music file will be still on the local disk. - Click on **Delete from local disk** to remove from the playlist and delete from local disk. There will be a prompt to confirm the operation in the popup window. ![0|remove](png/remove.png) ### Encoding 1. On Deepin Music interface, right click the music. 2. Click on **Encoding**, you can select the encoding you want. ![0|encoding](png/encoding.png) ### View Music Info 1. On Deepin Music interface, right click the music. 2. Click on **Song info**, you can view the detailed music information. ![0|info](png/info.png) ## Playlist Management|../common/icon_playlist.svg| On Deepin Music interface, you can create, delete, rename playlist and add music to the playlist. ### Create a New Playlist 1. To create a new playlist, you can: - Click on ![list_icon](icon/list_icon.svg), then click on **New playlist**. - Click on ![menu](icon/icon_menu.svg) to select **New Playlist**. - Right click on the music and click on **Add to playlist** > **New playlist**. 2. Enter a name of the playlist. 3. Click on the blank area or press **![Enter](icon/Enter.svg)** key to confirm. ![0|addlist](png/addlist.png) ### Rename Playlist 1. On Deepin Music interface, click on ![list_icon](icon/list_icon.svg). 2. Right click on the playlist to select **Rename**. 3. Enter the name of the playlist. 4. Click on the blank area of the Deepin Music, or press **![Enter](icon/Enter.svg)** key to confirm the name. ![0|renamelist](png/renamelist.png) ### Add Music to Playlist 1. On Deepin Music interface, select a music you want to add. 2. Right click to select **Add to playlist** > **Playlist name**. > ![notes](icon/notes.svg): You can also select ** New Playlist ** to add the music to a new playlist. ![0|addtolist](png/addtolist.png) ### Remove Music from Playlist 1. On Deepin Music interface, select a music you want to remove. 2. Right click to select **Remove from playlist**. ![0|remove](png/remove.png) ### Delete Playlist 1. On Deepin Music interface, click on ![list_icon](icon/list_icon.svg). 2. Right click on the playlist to select **Delete**. 3. In the popup window, select **Delete** to confirm the operation. ![0|deletelist](png/deletelist.png) ## Main Menu|../common/icon_optionsetting.svg| You can add new playlists/songs, set the options, view or exit Deepin Music. ### Basic Settings 1. On Deepin Music interface, click on ![menu](icon/icon_menu.svg). 2. Select **Settings** > **Basic settings**. 3. In the option **Play**, you can: - Check the box of **Autoplay**, the music will be played automatically when Deepin Music runs. - Check the box of **Remember playback position**, the music will be played automatically from last position played when Deepin Music runs. - Check the box of **Enable fade**, the music will fade in and out when Deepin Music runs. 4. In the option of **Close Main Window**, you can: - Select **Minimize to system tray** to minimize Deepin Music to tray. - Select **Exit Deepin Music** to exit. ![0|settings](png/settings.png) ### Shortcuts Settings 1. On Deepin Music interface, click on ![menu](icon/icon_menu.svg). 2. Select **Settings** > **Shortcuts**. 3. Then you can set the shortcuts of Play/Pause, Previous, Next, Volume up and Volume down. > ![notes](icon/notes.svg): You can also click on **Restore Defaults** to restore all settings. ### Switch Theme The theme of Deepin Music is light, you can click on **Dark theme** to swith. 1. On Deepin Music interface, click on ![menu](icon/icon_menu.svg) in the top right corner. 2. Click on **Dark theme** to swith the theme of Deepin Music. ![0|theme](png/theme.png) ### About You can click on **About** to view the introduction of Deepin Music. 1. On Deepin Music interface, click on ![menu](icon/icon_menu.svg) in the top right corner. 2. Click on **About** to view the introduction of Deepin Music.s ![0|about](png/about.png) ### Help You can click on **Help** to view the manual. 1. On Deepin Music interface, click on ![menu](icon/icon_menu.svg) in the top right corner. 2. Click on **Help** to view the manual of Deepin Music. ![1|heip](png/help.png) ### Exit You can click on **Exit** to exit Deepin Music. 1. On Deepin Music interface, click on ![menu](icon/icon_menu.svg) in the top right corner. 2. Click on **Exit** to exit. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/000775 000000 000000 00000000000 13703317554 024616 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/about.png000664 000000 000000 00000053624 13703317554 026450 0ustar00rootroot000000 000000 ‰PNG  IHDR¢púýKtEXtSoftwareAdobe ImageReadyqÉe<(iTXtXML:com.adobe.xmp ³"û{TIDATxÚì`E߯Ÿ½šÞ •N½÷Ž€i‚ ;Ê+(¯Ø±"úbETlØÅWDÞOŠ"R¤‰Š¨€ €Jï$„ô\¿ýv÷Jî’»K!žLînËìÌìî<ûŸ™¿ ü!Šb‰eB !„\ñHÚ!–G*JÓ¡ŒË!„·•q™‚¦ äë»@q"„âC`D§&ˆ>–ù$Mòõ)$Š!„\¹"$úø,‹H•"âã/P€!„Ÿâ¡¸y‰‘Æ*?ß‹[J„B®<*.Dv?ß}‰R@‹ÈSxT¢(†KŸÑRv.#„BŠ# A Y‚ äy,ƒ/ò¢â}=ž"¤–D(î¶ÛnkÿŸÿügzbbb7µZʲ&„R›ÍVpî\ƯO=õä[~øánIŒÎ#OR¾»†oûjŠs‰Pø”)Sz.X°`¡$@á,fB!e¤¼éÓ§ßöî»ïþì´ŒlN1*ÞTçSˆò¢:'Ož|»nݺX´„BÊJZZú¦ÄÄ„{$9í!D¶âbT¼¯Ç— ËÍq,RB!å!..¶»ôâaÜu­ ò#BžÍs*ö B)/*•*¤˜žøz¨ÄPl!%!„ Õ¤bbäe²ˆ !„J"!ET !„\á¼÷Þ{øòË/}®[°`–.]z!BTbeq*.H„B®0Fމ… –#Y„6mÚ„–':_]@(«ED!"„+¤¤$|ðÁ^bä¡÷ßÑÑÑ"Ÿº"8_$’ƒkx<Û‚Öt¢(&HaO !„\yœ9sS¦LArr2RSSË-B’Ät–BšôÕ,‹3XQôN‘¨iŽB-#ôë×?þø#† V^K(…䆃!„øEnŽÛ¾};-Z¤ Pð7€áBДGµ!„\Y"äÙ'$÷ÉÍt2×_}…- âÐ""„RyBñ žV­ZUiÇ*>XÁ\ƒô¢(Æs°!„\Y9rD _}Bò•J…„„„²ˆŒ·.eYiÖÓÅß?Ou?FMÆhÝ1E„\Áe1ùj¶£( !—@Œd!²Z­D¨f"eKÉÓk¿ßŠ:1M‘•‚æuº#>¢Q Ab_¡r -"Ù’Ãå$Bîi±ãÈZÜûi',Ù6&‹Ai¶”-ÆËáe_B!"„\"!’‘È=Ê[Ñ¡"q²™5’5Eá¶¾°¦ÖÅfÂ?ÏÁcÿ€Ô¬Ãîž‚D1""BH™ˆÕ#D¯…ZP):$ÚEE„\ŸnÁ’›u0ýÓ…;»B4á`êN<ðyl;ø•—QŒ…ˆRfrò0˜,ÐiUˆ BTX04j‡()ÍsNKÉ-Jò²ìnï[N Œ9x雉Xµë-å}+e¨;ňPˆ!eÅ® O·K‚bAv~!²ò P ¢Ã‚$qR»EHt÷!9‚hÖð«+,©u”ån~‹¶Î*zïŠbD(D„²R4jN;Lf+Îç*Mm²•¤Q ž[9¾ËÛÚÿjÓf¤Ë~{…bD(D„rŠ2Jnqq4Ç9¾›,6ÅBR«Tˆ’I% `p}*Âu¢! ÿlï£ow¿M1""BHùl"»ÝÙüæ´xà!NÉB’IÔ V­öØßœ Ãþå×Gß?‚_}åsh7!"Bˆ!AP žn$\#æ#åÜV“ô=·Ð ­Z€^«–~;–¹¶—÷—-#ó™$eÙ[ë§!-û‡u !$0¹FèuZÄ„‡:GÌ©Ý}A£Èe)9–ͰI¤u¬s®rXOµ€5;RM7oÍ-0[îi’(F„BD),y…Fdää#+¯:Z¥`·ÀØÝ3/ˆn Éd±*Íu!:µ×H:e{›€Â]í`7áPÚïX¾ýŸïB!"„ÀÓ qY*ù#Îç¢Gx°Îk;Ïæ:«Í‹Õ®4Óyî/oe3ëPðgkeÎ9YˆR³³‰ŽPˆ©9ÈcÏ.Þ<ÀE¼‰„,9ùLÊûDîáÚ¢÷n“Õ¦ì§ൿüi9 㩘­&|òÃ#´Š…ˆšÂèÄõ¸½Á ©rºXJä@/‘>­’õ“•oD„d©U‚{¹<ÂÎî´ŒŒfôTòAÅö/ü§‰d:9&Jý'u­"B!"¤&­kPM"âô/Êñrs²œâ`/²äßpX9òºì‚uEŒŠ7åÉÿòMVIŒPb»YƒÂ£u”å+vΣUD(D„Ô$ÚFÜsQ޳Ï.üñÛOH=y\ «Ã2rHŠ{Z9äÊb¤†sxœ‡˜8,)¹¿È1C÷þ†cu›Fñet4㎠#"Bj MÃ' aȈ‹r,«Å‚ÓÇ`ïÎ_‘y.Ý)2(ác(Ï`A¨d‰ž‘3˜m"ôjÁÃâq®·ha8‘¨l¿é¯O½f[  !Õœ!ñ_ ^ßõ¢Ïb6áèþ}Š(¹Ü£»2ÈÈË ÍVkU%,y£di}Ižë 'â•ï[,s¿WD""Bj:UÆ$mBƒaõ¸é§Oàè¿<ĨÈú‘‡mËË…V EP ö5/–œ0É¢ÊÂîßqСR“ЪB12azļP%úUjß˳3Ï!õä±"1ò¦`´Ø¤Üë<É"©‘29ª×6ÆÓqÊçïÇ×y X  !5ùÅÐÎÑ↺¿"JÛ´Rãî}ßÊ¿e$ ’÷lÛŽYdËHö[T|vm«¤;j”ôÔj>­|ÿóÄ÷%,B!"¤âê—ñ$NßãëîDýà¡•vœà ý$ ™¥àãN”û‹\ <-“Eî*ÞO$zTð|Á5'v³çrOâlîQã&"Bª;‹N¶Äê´±ø'ol¢É½\î7‘¸É¡ã*õx ûM—\.`ÈH;­|÷À :-O’‘_„…k€ƒÇ ³¦ŒåÛ¡³;–ňPˆ©¾˜í¹8\°ëÏÞŒÕÅoççH¼QY§´÷™d!u©t1òÕLw6õ´—à(ŸNÁQ %­Y‡Tð˜,չܚ¢l“šsˆMs„BDHuGpKŒö üšõ>?Ù éÆÊ2*ÃV@+„Wêqå&ºâlV òrÝ‚§5d•G´û"xÎ=ç[^°Cˆ²q°¡RɵÁ²3}p¬`ò;LS£®ÔcÈ}Fq-K.ÏÉÊtϨ`w‹ÜMp2vkÉÓÑžk[KASˆsä¡RS±‰F¬I‡ ÓŸÊïQ@¯Š©Ôcø"ca¾×„¦® ^ý<¢SŒdëÇf/ÚÆåÂè~^`ʦ !5«XˆçîP¾ËïÕT©ñGÖ)¹Ìb6»›æ¼šèPdñˆ(ꔡÝ1r52Ú­Ž6¿Bs_f%"Bª?BÀµgM;jüYù^/äêJ=²ÞG·“Õbö²ˆdÙQ<³ÚJú3Rúƒl6·P¹¼¼Ú-Ž[Ý`Ê£ !—ûr?T>ãô.΋½Ôêhг;m"Á݇ËÉi>¹›îÜQ›P•K†E@HùI3þ¢|êT•¯Ó`ñ¾Iµ:ź\‘sØ6\ð•68ÁåOÜ!>òoApï#h¬J\ÁúpžP9šëBt"B!"¤ ”º…òŒ ¢$HG+õÈgÿ*¹,(8.ÓF±‹<_d•‚àšwÎi5)ä\ç@u°Å)D‘<½„BDÈeqã!RE¯BšsÐBe`8ï[ˆB#£ÂM‚êøã´œ&œMwðÞFÞHjPÖ'D5v”Kr'“Pˆ©‰¸fâ>Rðu¥Å¹­dÌØ¼—©5Å"ò€ :3Ö£iÎ%(§]<ü‰PhD4¢ãKÌ '¿Kd1äCæ!™¢²\Ö›Å( ‘Úm¹ö op^ùl[g "D.1"„!UL»ÈC-èÊ'¢Mé3ºdâY;1qI^–c¤œ —Íýb«ëeUÀá?I´YµV™þGùíüÔ„@Sˆ° (´Nà!Oˈ !UDBPrï“c9|Á}?A`P+±.£œƒ œDÌËBHd­û*3<   ‹ôÚOþŒHvXC½šŽ…V­÷²ˆ(B„BDH#z8Ž++òh¸‹‰J­Ad­XDÄÄA%8ûu”®w«ŠÉƒÂœóŽˆv[:ž#ælÔú`Gb-9öWi,ˆjš©lÖ³Ñ P«Õlš#"B.&gŒ? >¨s™·7ØÎaGÖ‹-}‰ š@¯Lß㜜Ôý*Üä_…¹ç¡‰€ëE"»s–—µd1UbÿèæÔ6tl8õ¢[»…ˆƒHuƒƒÈeË®ìyeîï1Ø2±*õZXÄÜ‹–>,BNÑð˜àvûm·!?ëtAaŠåäž¶Eî ŒùÙЇ•Ø_­·"¦Å9eÙ°6ÿv‹§)ÆňPˆ©: lg°ôto¤ ¸ÝiÃÒv=‘fÚv‘S(ºý ¹^Puù^µ[­È“DHnŽ“EÈ)?ŽÁ vÇvc>Ôº`*u‰ýc;ž µ¡ƒd 5ŠéFSB„©.°iŽ\Öd[öK"Ó )aP'¸ôÝB…¶³8kÚ®8¸Ë0ï¾$isOd W¿¼ÌCn¶b%…Gǹ|Þ9Ý<Íôc5a—I«×*Ûºö—;ˆBb Õ$[œ0¡Ól·ÉÍr„BDÈ¥¨ðaÃüÏ•P½(t p+ÌÍQ„F×RÞ}Rú‚\£æœ$ÿ±JÖ’ÅXˆ ðh¯ý•™ôôV$õ=¡,Ùaj‡5ð²†Ø,G(D„7v» ¦‚|˜$Q$ ‚:<¢H ”Qt)u”³šM°º'xyg•¶QÙP§ÿqhC-HŽkAÍî‚V«-Ñ,G""BˆB~v&BÂ"¡ wÚG.]q¹|‹–KÿL…yŠèèÃSÿxù(’Hê~!q…ÕGàŽ^oB¯ öj–£5D(D„/B#k9½48¬¥)N~}Èîj†sHüzPaN&ôÁaPëôpõ*‰î¶Z­2•’­Ìí½æ!>¢­!B!"„”Ž(Y>FÓ"²Ãl(„ÙX€ˆZP©Õû8| ÉßÃëå"±kº²ÏM=þƒvu†¸EÈ×h9Š¡Bœ‚R$@‚‡Y',&#Œù¹‹DhT¬×ö®A òïÚ’%”Ôí¬b#lÿoôi|3t:"Dr 5D(D„ÒM"×Ô>Ò³ÉSa>tA!‹‰óຠÿT‹¨Ó# 1M³•¥#ÚMLjVú!ZC„BDñ£AvØíŽæ7ù½ ™ Ð„EÕv6»½;ç”?² iBlh0ðBã Š°Lì:ýšÜZB„Ø$G(D„€ä?FàèCÂàÒ × ¬¢K<¢‡¥â˜¦Çé{HA'YE’Å$o£ ¶!±ë9Ôj–«l'¿'4¹çˆ kàe yZCžýB$B!"„”À58ÁsЂçoùS­³!¶MâÚdC¥µ)Óö k;šÜ‰`}¨—ùšÊ‡"D(D„ÿBä9jΣOH&8ÚŒ˜f9ˆm™Aãð«$O`z]›ÇÞÐËò¦M""BHEÉŽ ("꜋Ø"/±\Á-¦¡at·èø²‚ŠÓ¦ !$ Q’àEšcFx’š ›{]XPº'F÷ãÑÂ-@ÅCñ!Ú!B!"„”™FÓ¼~ÇFÔEˤ>hØMk÷Vúƒ\bS\|<­ â£ã(B„BDH%áz·ڥŠXe»¬ò&ç©GÊHć7FlXCÔjƒè ºnañ›ââãÏ ¢ !•(>žMLFsé]6b$‹œ§ m_,!,ž.½ý}—ËDþî)< B!"¤ ÉU9Šz«3æ Ûœê±Þk®P÷oÏåÅG¢yÇéöÒ%Jy𠽍/aåxŠ’çoWyøò°J"—Áý®\ÅrP{­3è¥)^ ;XTäb WÜò´7r°X,J0›ÍJ=“ÊA^çO ª»¥ç¯Ù­¸µãO|(@¤ŠLg)¤K_å¡ g°y‘©¶•¶\1Ë¢#S–‘+e¹â®éBäâ£ÞŠ÷ûøG"—"Rm+n—ð¸~»„É1NÍ"W>|5à ¡r‘+m—T\”d!’©‰Bä™_ÍoB!"¤šŠ‘«²vYB5M„Š[Ežù*.@B!"¤TÖnO¤•³èåN»æ ‘/ ‰Ö¡RM+lÑé ÁW%]S›æÊ»Ž !¬¼ !UŒŠE@!„BD!„BD!„Pˆ!„Pˆ!„ !„ !„B!"„B!"„B(D¤Æbùá´¯›„¤$G¨S·’[t@Ÿ‘·áÑwÖá`^ušªGDöºЭYL_y••2ËæÐZ.ƒz]ñÄÏ&ÿÛíz}ëKÛÕiŠ{ÖškT ¹8ŹhÑîÖçp[{-`7#?ãþÚ¶_½0ÿ[4Ï}ò:&5 ª&Z$Ân³U~-„",( «WlÓ=¯Bp‰ ÌØ¹|%ŽéBb¬¡y$„BDª³á]·ÇXŒåQýþûQ<úÓ\Üqç[xlrmÔ_;½Ã/u:D } ÛUE4Dß¾…X¿v9~˜u†ÏkáV,[•ŽV gí53„T¸† ä’ Flï‡ñÖÌžÐ[Œ×¿< »ÇZkÚOx{Æhôl•Œ†[ ûˆixmã)ÅÙ=ʵ æA£žÏâ—“?âÍ{F [‹Æh˜ÒýÆ?ŽÏ÷äzYùËoG£z=ñÌ‹÷þ½ç`û韰àþëЫu24jŽ.×LÁ+N—H“o,h8hšä®ÇòÍÙ%¬‘Ü-˰6·3Æ\“è½ßv@ÝFwâëBï}ìg>Á¸õqõ¼¿au-;¿ÿ}â& êÜ4DJ›Îè7êNÌZô;rEytJ¹{ñåœ)Ù³ R6D“VÐïÚãóýV^®„BD._1ª7fGò]ÖíÜWzb‹]îª4j,Y$gp¶´æ0iÛ¤„b6J µ¥<­Ì7\Â5ÓSƒ+¾ÁQy7Û1¬\¾CÆ¢_Ä…¶o´ÂôßÄää#øèž¡èÜu8¦>·[O–2 O*Ëc§mP7LA#¶‘K/;riu(s/þ”E?°9”Ö5“vIBúÎÄÇ÷v)yª"ÐPnÒ˸»¡Ë›³¥ìÇ5ÐVÆÝ"ÄbÈuý0û¾øêÀTÌÀ ,Û‡áOôRš-å‰Ëj)±½¾áH<³l(îùs–.^„EŸ>Š>zc^^„ׯ5„Ö­&Êe#´†…ˆ\i˜ñ÷ç‹ð‹%ý÷‚2¢Y]õ“Ô°hQ¯[O4ò×ñb-ãvî§þ4œJ•D©‡Ud;CÇ PÅ'!ᢵ ˆ8ÂîÆÊ»ÐǾ‡ëÂ+uþ­(•àÒb†—-í Ò% +±‡qmGàn)Lyà'̽c2ÞyzF{C|u„©QW*KÛ±C8fZ²V 6Í‘K„‡–=‚©oîªÕxàÚXÇÓ¸¦ jñ/ðá¶\ÿ/]–u;w­ŠßüŠ|Ïü¹Ëþ´#¶W_4¿˜•oÄU38 Ç–=…YËN!yôuh£õ‹ÖŽ« µí þ:àiÿ`û7ëqº”VAm\ŒéßêÂ,d›ü”’º1L,óù¢+¡ED.Gì8¹õXœ¯ƒÝ\€¬3ñû–uØ´7úæ7bþ‡3ÐN_ô4ßñžgqóú;ðé#‘zÓ$ j 1Ç÷þŒ-¶±Xòò„–y;WeÓšc¢q2&ömý¹íøâí…ØÞ/Nëåc¦ƒª$}Æ Eí¥Ÿaª#Ý4À¨Fòàah1.>¾o‚§ŽD³°ùá |ò“ñZÆ´Üø÷¨Ï¡<›ÕGB„€¬ƒñé‡ÿ ¬ïè)ø­ZM™[W߆Oîº7OÄÀ¦‘0Ÿ?…;¡þŒ·1­ « B!"5 þüìq<ô ¨4ŠL@Ö=1å…qÛøÞ¨«÷ÞZˆîÿ,ÿÍ^›E+_ÃãÂzͺ`àäfЕs;G}Þ÷~t#ÒÞzóÙ [$u¾óžz74¼øïÉuƒáuã³:×aT)튚–÷à½wxæÕ¥øà‰õ0Å£EŸëñÒ½ñ«$[\·@ïîÁX¸jV¿—ƒ¨CTÝè6ñUÌ1u´Q}ñ̲¥JY~¶r>žJ/€=¤6·†^Ñl8!U‹ #*^EAë zQ㥰ƒEEj&òÌÃ0èÕpÌÞö¸=‰•*!Yd:K!]új‚c<ŽŽQD® ò®$„rI¡B¡B¹ra!„ªöB©ÞPˆ!„Pˆ!„Pˆ!„ !„ !„B!"„B!"„B(D„B(D„B…ˆ|3ç |ñÅk™å¯ExlÎ*œ²WÎ1ÄÂøà‰°½ ò}—Úsöcý_Ãì™áᇖÒýÖÌ÷ã%U„ñø¼ñȽøàw+O>¹l cORu: þ}ì>:MS4’í¾ v¸Kñ‹-¢ðÈ&,ùr çÙ¥#ÐlÐ$ŒïSzëŸøäéh<:Û—oÅÉ„±˜ý¯úؽx 6ɇM´I›·ÅuÓ& Cм;ó´}n:z†ŠÈÞ÷-/ÿÇóíBê¢Û˜›pmÛh¨ ¿bÁœ?ØÉŒ=¿ŸBŽQ‹únÁפ 8c3^e:=òoô­åKÑDXrObǪ­Èë8MµÅ+'Þ…Ž(Ä/ëxÞ …ˆê¤DhßV‡wÇu) pt÷>èÛþ ²‰†=XúÙßhô¯'p{¢bî.|úÒ§Xßè1ŒHö-܉ïvÅ3ç¢a¤¶Ý᛬.xbÎ@Ôì(<ŸDH¢aö‹œ_ðù§{QwêS˜Ö8¦kñö[ ñÃ#÷áªPyýß8õ“!í;¼öÒìêÝ=Ãê£}wêù0«Ä¬ŸðÞÜ•8XP1¶;ÆÝÞ´J¬/B(D„T¡n‡¶Ð|´'F»÷jÑöÎ:J³œõøìË<†ý žÃf÷¯C˜lÉB$$ Çð~håhêRzãªï?ǯF—îÝЭcSÄëÑ¿q8¶ Æ7 QœxÕëƒîõÖa÷ÁBôk/-P7@§Î Š3/Ä6D½ß‘W(J‡JFÿ1É>s D÷ÆÔç{KŠdAæÞåX0ÿcOC(ª¡R3¤¨n{´UŠÝ¿iÚⶺÎ>Q¢zàÎÙcѨx·ŠÜ§¤ F¨Ç!¬9FÝ?Nÿ?¯Ã›ßnÀàÓÐ;²¸  1‚:mDТV«îhºGÒl’ñö$WÊã$!5þ*®‡mEì\÷;жê9¯juƒ6hnú k:£"vž;‡\?úÅÜt¤æauZãªq·apüì;aö~rkÜÍÎoÇÖ£…Š™NmÅ/'ë£eŠÃBò‡h8Œï¿únjފfL=„#™&§¶Y‘µïgü™WÕ~ö!„!Õòyª^‡vЬ߅v깟®„¶?- K¿\€YßÈ•½ ¡I}pãôáJ×Oqlç¶ãó…?!Ã.Y5j5Â_‹‰m‚¼–ˆ.˜x[/~OJЦKD§I·¢om)BC€$œÀ®m{ êÓ ƒŠn=¿+¿|'òDh5jèj5Eï)7£G¤´M†ï}¹ÜdäOùÒ#hA/Šb¼v°¨!„T@d:K!]n@€ü¢Ÿ#Ø<‚Ȧ9B!—¸MƒB¡B¡B!"B!"B!„BD!„BD!„Pˆ!„Pˆ!„ !„ËNzJ.nZcÇÉ<@¯¾% D[ó' ]°Ë†%ùxº»€õ9ù)¡EDHµ%Ûäø4Ù£íòÈÓŽ]g Ú~+rÍ<Ç„BD¹È˜ò ‘õËn˜3²¡cyË6ÍRYto3¡R8™'bOal~<¬šl¾–‰Øv8˜Ki® ’î†Æ‘@—@%õÅ¤æ‹Øžœ7:¼ûEÚ%ZtŽê†íFÚÿ·4 ËäÞ¬ønˆ”ök´õ>öÞ  V€ÑhÁÝC’` Æ?çý'A«’€á@rû“…ˆ &Ï,âåí"~8]þ}ÏŠ˜±YÄ™‚òí×¶60¯ S øöˆˆWvа‹eß_®þìŒLp KÄ=›ÄREÐER(ðD7 um‡ˆ¬>*bgn²~ù±‘:Ä7­‹¯—-®‰"ê, v0‰ToØGDª-vÉüxü§Š‰ÌÂ}å!™?%Ëkí1À`ñú®ò‰Œ¼ù»E¥ýW*)B‚G(ŽœÞ·ˆ8’StP}B,ô‰±¾Í©lKæü*òB"´ˆ©(¿¤:DÁn¶Àpò ú6 ý¢Ð(F#Y+%+ÿQ_‹(°-Û}®èûôöƦ”¬Ç]Õ´ÕÅòYw̵¯ˆºa‚[D䦳÷®â[xdÒ%ù×QÝ&ï÷÷yGsž‹G$ëdxã’J’/Y}»¤´¾ñ‹ gm:eÄß§’ˆ>Ó³hÛÆõ¥¿…E“¸§€ë›zÇ%÷ƒ­¹øxS‚ÖÅ®³ÁØ—)¢U-ZE„!åfÕ¦s瑱ñg42áÕëbÑ2^‹`­µÊ;h¤P¼ªõì3êW×Ñ÷" *g›áz&Å`´zïß,H -¹¿g‰’p¥DíS|y„Þw>ÃtúÔðpŒGŽ+Ë~”¬À,£‡Uƒà ­·e% DZôÓûE"Ì\€ÌMÛPxìŽåðZ"´ˆ©ûΘýÛ-VÜ?²Þŵô€ˆmàmd+ÈgòVJ †.¹)ñ@vÅÓØµq(Ô0èô®›€CÅ⊉ †µŒqÕO EúñsÈÝý7övŠ”,±H^P„BDHyI?ž¡ˆLJ¼þ‚âúßùoÙûKŠ¿³sJ¢÷•¯¿¥xbvÖ"õïʹ^ÐuQ+&閲ŧÕ5v;ž%ý¥‘ê ›æHµE]X4ÒàDæÅ™V@§rŒš›Üºâ}*‘’ÝÒê—ÉË3ÂVPsV¢ŠioH°¶Bé1›­¼˜-"B*Bb´Îïo¯9ƒ¦5©p\_ŽR>a8œ]drtK^î[µÏm_íÌFî¹\å»`6#9 Ø|Òÿö ,‘ƒå-"B.œëºÅ¸¿oý馼w»N`²–|£53ß ³Í»ö ÷0 ¾Ý ›]”*hïˆp¦µC©9g*±¿XŽß"¥Ïh±»ƒœùó@šO}y ¿õ»;¾nÉ¡ˆ âH7B‹ˆKÊÄ®‘x·A¬Òé.WÐ?l9¤_¨CC;¨—ò]n^ •D¨}pÔa`àõåGñâ[ée:® RaÉó½Ñ,)aR<ùàœEkîÛRfS#¾AmüðB'¯e÷¿±¦Ôs¥î\'Ó{†^`éÑ$"´ˆ¹`äáÈ+žl‹FÍ•ïþ¯b"ÚÍÉv]Šì BÀäVšG;–…µL–Ôªl—»<ÛuZŽÁu¤Oé:B›6*sÚ *Ö§žƒ÷îmíz±lRæ9B‹ˆJ¢V¨kgµÅîMðíïÙ8sÞ‹GÓœünMãÆµ y X«ZŽùÚd"ôÞèx)ö¯Ì0d6ë…Ï)󶕨¬…¢š]¯U¡K#Ç›«½ëøßpÇ˵魛àðá(¤¦æÂîœnÁ_…ß¶qx‰e]Ú%@H‰ô’—ÀFIùl]?“zÅ@ë!˜Ã ˆ v¤¯k‚ü>“€è ù( {¢ÿr»±_4ÎxnìÏ ‰T÷‡NÁ5ÛˆÚ#hA/Šb¼v°¨)?3´+"&ó\/A6B®0‘é,¹]\~!Áâ 6 ²iŽBÈ%…BD!„BDÈåJ´ó¥T¹O'JÏò Äì#"„R•"Ã>"B!Õ !„ !„ !„B!"„B!"„B(D„\j,ûr<5[mUw 1߀‰S³°$åM®l8é)!—!D‡»nV£I(Ë‚Pˆ!%Tâ"C¥ÆU½Ô,krÅæ9rIùð™4 \mƒâØA´aÁ¬T=V€£NO gÖf"ú™¼Z©Û"½˜û†Âã…¸sf:¢Æ§"qúy<½ÇO‰01`Æ“gQ{b*â§eâñ6ØJ[g3ãixt}Fß+džzgã½#΃ ;!¯¤:¶½wj&fmÎÃØûÒ-¥#áÞó˜ûݧß!k¦ ϼxõnLEø¤tt™›ÍÙΕ#n¹í<Þû#£¦¥!jvNK‘Nâ®™rÜiH’âžµ!WÝ]µÍ„PˆHµçª¶ü¹ÏŒ|Y7²Mø6]ƒ¦F|—¥( ~ÞcAËvzŒ¨Ôítˆõ´x¬<7/´ŠÂþʼn8>' ÚÝFu¹=²YðÂÜüÙ. >OÄÞ©|3?Ÿf–²Î¹ï{ßü'ÙŸÇbak f¾’‡Ÿ-¾ÔÅŒ7¿fÌŽCÖñøª›s>*ÄâžÑíV¼>7 +cñõ“Dä|\ 3C 1þÕvmk1ã?Kl˜43A’]J§”Ç]RÿYœ€cÏ„Aµ±[­¼ …ˆ\á4l«Cü3vHb¦TùÿÑ$3R¬Xý‡d Hóæjôo£AãJÞÎó·ž0be†ŒÕ#^2ƒtQ:<8<¡N±²1àÿ2ô˜1R‡iÇØÖ!cª}bÀu ‚€AÃÂÐ3RŠL£ÆÀëÃ0([:Þ1_¥!`ðˆ0ô•½³ªTèÜ]zç¬E‚èÒ¶S|qBJïø Ô×I›i0ö¦0t9hÀÒ´¢íú] Õˆ“2b;nÄŠ³Ò>ãœyŒÖá¡‘A§{$R `¹´`}=ú"[NÚ‘±Ý‚Ž]¢0ÜfĬ&œo`ÅVA‡×HÛ‰•»—‘kÃùP5ê- ŽR!ÚYIÛ²íH+0âλÒ0Õã®—Åk€u¢S\j‡yL¯FR¨”¶< n’hÅGz?&j¤ÍŠDrzΫ‘è‘^!DJ¿Þ†ÔliÙC­ Fr¼P"I3€ë¥<ÆPˆ…ˆ\ñhu¸º¹ oï6àØ FNQ!ΦGó%&,ÿƳ-BÑE¹J+{;ú>\èB+ÒͲ9[¶ ìȽDêH)Žˆ`¼ö~®ÑkM;àlrç‹$T9"Ü£Œ6œÌW¡™SD(ƒ0¨c$+§ÐŒ“é‡Ó#¹X`Ã)“ý¢û*pm…¢”G*¹ô°iŽ\bôn§Ã¾ ø¥n†FIeŒ×Ô6cþ :KëBª`;1ÇˆÇææa]žô4Ö@áQ&Ì_aÆ9I;¬y¼½Ú„\§Ñ¢iŒ ÑF¼°Ô„Sfy „Çš±ßxC!DlX]€e1’Ömü2c‚pmÃò•’gzÕ’é69ÅŒy‹8j’Ö™lXþy>¶'cl‚Ÿ'N)#¤<¾¹ÒŒó’‰e+°`Á·Fd‰¼ …ˆÔn­Crš ‚$? «4ÚAÀ4 ¶V¹Ÿì+s;Q²LvþmÆ £\KëðÔƒáhò{šLJCýÇó×3]]–“F‹ÇgF¡Ç¡tº9ÁÏbð§F³–²Žch+â…ÇÓ9)·íÕbîCáè®-§y¦WÐ`êƒ1¸)?WMNEää ¼‚%†¢‰¿;ZÊã“E yG’o”ò83i)zÔc @ªÃã(ãREÈ÷ï΂yzÞjSýšÀL;³ÑèS5V½ŽŽ|‰TÈÐ1!—±š¤âŸ}&ü•#*ƒ¬¹fÌ_i„¶¹Í(BäÃÁ „\!¤þ‘é¯Xp¢P„ Q¡U§0|q‹œaˆT«‰Ms„BªLdØ4G!¤zC!"„B!"„B!"„B(D„B(D„B…ˆB…ˆB¡B¡B!"B!"B!„BD!„BD!„Pˆ!„Pˆ©d÷ÚSÓ1cß%ôkj4`ì„ ¼’Zþ]-ûr<5[m<•„PˆHõ@´cáœTD¿`À9‘ÅQ]9·á<†­¶)nÄ ¡‘Ë û9>;­EÓã…XšydX¨‘O ضע¸Ï$„BD.;þÙRˆÓÃñ|>Ûb…g‹•ñ´÷Í:‹ØëSvËYLÜTò‰<ÿP>L9‡Gþ´C´™qïÔLÌÚœ‡±÷¥#z|*î=¹ÿHëœÛ[3MxæÅs¨wc*Â'¥£ËÜ|lÎvXf>“†®§~ц³RôXŽ:w>³6ÑÏ"½˜åf:cÀŒ'Ï¢öÄTÄOËÄã;mî|J{çÌtDIiIœ~Oï±Cí±¯ád!îš)§5 IRZgmÈÅUw5Ýù[Îë]xr}†Ý“†HiÿfÏæaãQ#žxö,¥í£ïÊÄc¿ÛÝe0.¿å&bËâLL“´uQêONGÓ÷L0[­øâ½ ¤Ü"{b>˜……gx= ©iHàÆУ_ÿ`~0`·«·ZðŸ—rð[“Hìø,©¯EcvGµ×i8^€ñ/Ðbj-¼ØVå06¬f¼ù0cv²¾ˆÇWÝì˜óQ!ȵ±ÝŠ×çfael8¶~’ˆœkafh!Æ¿Z€Ã¢ WµÕàÏ}fäË:”m·é4Í0â»,‡Uðó Z¶Ó!ÖÓª±YðÂÜüÙ. >OÄÞ©|3?Ÿf:òðܼ\üÑ* û'âøœ0hwqÔ´~—´þŸÅ 8öLT °ÕZ†¸ëßÛ*๗õI ÆçæcÄÓ›X'¥ø¾$â…øÃV†¸ü–›€~cðt+=oªÇãÀ]zØwåcÆ>>y79‹ãñãÝaèÇKšPˆH ð׀åáÁ¸¥! iŒC øôo‡¹a=jÀ²l=¹AAÂkiÑ,ª¨}KZ‡‡F!\(=nGV Š¡R^B´ÖZ ]«LOQA#­kÕYF™Vœ°—!®åæ MŒ‰’uùñŽ™ÔKÖ¢†×4©xi‘*ÂŽu› 8¼ÏŽ&£sÝK6™ð\ë è²íÈ “*;­]E;–ü7³ÿŠRy?-Ip|¤÷£”F„ÒŽÆ$gej?_ˆ‘bU^Æ…Kv¾ ii…Ê­ßí±xÞ˜ƒ¾¯ç ûKQí¥E>QKOñq…fœ4H?œÇ l8eR£Ÿl hu¸º¹ oï6àØ FNQ!ΦGó%&,ÿƳ-BÑEã-DêHi›ˆ`¼ö~®ÑyÏzXèB+ÒͲ9–Y ìÈR…—\o+¥õB©qÃf ˜×y¿À¸¥qÒ›„–¡˜?+ÿ‘ túóÙ¸'.ß d# aÓ©!œÜZˆßšc´ôø¤s„ø LllÆÂŸmP7¨0æ.7+bdȶbwšè~zOª¥BÊ (¼ÝÒ„»ß,À¡2¼—£–L“É)fÌ[lÄQ“T±šlXþy>¶'cl‚£ºíÝN‡} ðKÝ ’n€=®©mÆü t–Ö…RkŒ ÑFÉ20á”Yã`DZƒfì—ÄNÓ@áQ&Ì_aÆ9)}Ö< Þ^mB®³F—×Ö¿¹ÒŒórÓa ¾5"K,=îr?Q^H\Ry× pø€R:E)}Ö436H–£Eú§EK©¬,6Ž¿'"Rƒø|“ýûêÝÍPŽ Okûèð»Üd§Ñá™™hµ' -&¦"fúyÌ?h÷~*Tó¯(LÊÈÃMK-(,µBÕ`êƒ1¸)?WMNEää ¼‚%†¢‰óJ¯ÝZ‡ä4:!IN›Jƒ¡HÓ``kUÉÑ×-Ÿ…‡rÐéæTO<‹ÁŸqL¶š¤<<õ`8šüž…&“ÒPÿñ<äõ AWW;ƒ´þɇ"¼# É7Jëgæ"-Ezª2Ä]n%º¸ ½.Ýe£±”&o‘“mÂóÏŸEméwì¿ÎãÛ:˜Ûír¤jdœ–¹Ú#hA/Šb¼v°¨¹pL;³ÑèS5V½ŽŽ¬×É•!2¥._þR°8ƒÍ#ˆ´ˆ©2Dü³Ï„¿rDeP€5׌ù+Ð6סEˆ"ƒžE@HÕ‘úG>¦¿bÁ‰B‚F…VÂðÅ-z„²hñ´šØ4G!¤ÊD†Ms„Bª7"B!"B!"B!„BD!„BD!„Pˆ!„Pˆ!„ !„ !„B!"„B!"„B(D„B(D„B…ˆB…ˆB¡B¡B!"B!¢êe éÐ zõEß>½Ð£÷0Üñü78d¨üC‰¹ßàîžSñu–XŽômÅcë#åÆÏ‘n÷Œì,–ÜÜõ;>†­–*N‹õwÌéÓízJeÔ»'z\5/ÚƒŸ‚–ú‹”MKLûl¦6TÃtüKÜ{Ãx¯Ã<ÔèâŸ®Š–ã•Âå^>^ù³üƒù éâù¸FWî˜På%T,}^isðý¿BÝÇ·`þàP^¸W´ET<ãáMqݳO¢×ïàË#6i‰‡—Íĸ!ƒ1xà@Œyh)™á¹ô¤5eð½xéñ›1jØ@ôê=-=eÃz<=îel³8·z?^yRÞnúô,UôÿÀäë)ÊÚC¯1㛕GaS–Øpäëo!HÇNpnc?ñÆ]ý"þ°:˜×cFû©øV:°=u-ž¾~®2Wº¯þfôN øûóû0R²ûôîƒñïü k€2Ò7ŠÁ­Rqô„½XBsðãË7aÔð&•ɸÙpÖzŒíŒ{¾Í…ëù5ý}è<üM´ù)C)í÷›…/—<бý{ çÔ¥Èð|øõH»Ï¼•–&{ +À†ÔM/áÖkbà 0| ÞØ–éL»r*wüEØÏ|‚‰£ÆK÷MÀˆ=Ñs䓸¿oÞÀÔ±Ã0 {OŒš½ çÄ*>·®×‹}n%+Ñ1c½£9ÂúÇ‹¸ªQ/<»Ó‘bÃÆÐõÆE8[èÌŸù6͉…;¾Ç܉ã0ñÅ-(åEHź§oÁ˜× ß¡¸ÛÏ}%¨NcÕÌ0|ØP 8,;‡Áá'í~εßócò‘>×¹1gà§·Åû;²ñók·cÒKpè˜ÿóL!º iÉDZÿ° öãŸáÉÅ xæëïð݆¥¸Óð*ž_™ ›Ÿåò=e=ºYCÞÂ׫7bËâ 8÷Ò,üïLÉÚÉzhÒ®š¯V¯Ç÷K&"óõøÁè«ÆÐpÔèV…ýòEjý+ÖEbÔÐx”ÞøbÇ™o?Äm_ÂÚuë°aͧ˜Ú!È»ê=øyO{¿ú?þ´‹¦4 `‹0^‰5ÿ´@Ç–šâ¦:üë-,ûvV¯›‡Ž?¾‡oÒê⺛:à·%ßâ¬Ò‘…_nA£qcÐè”ÿ2´Ÿø ÷ÆÛßmÃÏïŽCm¡byó™¦3þ•žþ%{r?†¾·×oÄš×»bÛCOaÕyÑw9•3þÌûþ„ꎅXµqæ4[‹'>ÒâÁ%«±iý³H^û>V§Û«üÜ–éz½çV¨>}ëá÷­{$±´âŸï~Dí‰øyÃ>å÷Þw n¿>ÛÇbÀCSÑ3ª7þb)¾x´d»Âžy–«çcùª5ØøÅDœý]üèC‰ìçvàLÇW¥|¯Åú%“‘?OÊwªÝï=/–÷\ûIŸ+¯½§?‹[Ú%àš§cñ«И=óWxÓœÊÖ.ª ’.Œ‚?cב£x|§Ÿ„Fö|äûY.ßhBX ê©,×Ô…‘­_Æ{­¸¹w±ë4¬÷‰q¨~bs4 Ú‚,£CPÉZW]o$®¹+öÌ@ërl®7ŸÇ°¦ Ï ýÇ"åÎû0©ðfL™<Sä°(¯¹»¶ãLç[ѯ–JÙ^«õõ/,˜Ô‹Õv‘-1jÎ븵´}¡Ç6¦#ØôÆ øü/3ÂÂl8–™Qù@­!7cà+¯bűpWèZ,ÝÞ7ÊÉtØwü1e|â‹ë†>-dñÐ!9¥>ÆöF#9^Uc¤$ä!;GŠ+¸jÏm™®×‹rnU¨#Yn!oÃasÖ}‰á³ûcíì8x¿?ýŠ>¯Ö•¶Ú¸Á-¬+õŠVŽ+Ä7E“ Í8oެ/v_iš¢wï$GeÛW·x[öXqm¾Ÿ´›²}Ÿë …¨*d(ïwl?Øm›j n·CÓe½-Â=¶É]ê{9òvHØa‹*ù¿àë‰^§‡Þã)HÖX:º>Æ/ÿ],?£ù˜%¬ölî–Ž#YH6ŒVÇ/MòD¼¿n v¯úó&ÇÚ'Wà•>ùµKOuªRÚË=úˆü=§}ùæœÕ‹¯Emq?Þõ€#=!=qó˜çpß—{1´örüÝë6¼-=ÖÊÇõY†ærm‚ˆðÒ[ð}æmH-g^¤)à`÷ØF”‹ÕQ¼%Ê©‚ñ{µsêàÙµ¡ÕjŠ?Uý¹-õz½xçVÓ´z¼Š­?Ûñ}ØÕXС?Lúû°~[~1ôÄ#MÔ@iMUe¾¯Dg(:Ï®2+™v© Ýä» œŸrvYUN^%bã[«q¦ÛU(q ²èd!3»¶õ ~øáŒÒgf?»þiÎÒ|§Ýî· Ÿò¤/`<´ˆ®õÙŽ¹×öû*+¬êxtó,¾¸{bä'”†·â•YÇððäþX(è  n†;ßx7¥øYž ©xíÆV߃ÑóÒ‘†Þ¾†‹5cU¤BЏ cºÌŸÑס›ÜšãÑŸ$DÁ´É+ñèèø(:±í»¡[ý“ÊõýÜ6ÿO X²ð‚Ûàž¹­¥|¼¨Ù¯ÙxéöGðèȾxV£CÝIoã“)ÍËy¨Ñpô]èsÇL ‹ØºÝѦKÑH UѸ±é<Üóç8,íéhkRû+Ûe=¦¿¼•-M>Ë8n4æ<Ý3 ŸÙU° õ0âå0BºTÑ%Ëé£rÆ_¡ó^Åç¶ôëõbžÛ tê×}™Šû_‘›áThtu?Ìûíï舃D5]pƒ”§F_eW?Œ*{¹jÛŒB«Ý÷cÔ’|˜LAèøÀ<ŒORI¹õöI~ÊÀÿùñ‘¾™9ÏW.‚ŒÓXT{­3èEQŒ—¶bC~?aào¸mëKè«eqQ€ ÷÷ÅKu?Ú[^é—ÙõÊsK*$2¥.}•í>‹3Ø<‚Èké‚!²¼Î+°ð§æ¸õ«æ¬¨.³ë•ç–°iŽTolðßéà“}º<þ&&ÔáUž[BÊl5±iŽBH•‰L©Ms|´!„rI¡B¡B¡]~˜×àž6åŸH°Ò]\ä¼\z× å˜òþ¹¸çJDææ—0¾G š÷½oýZpEW•UöÕÅÕÇE¹–.‘KŠšGÍ£¦O­ÉÓ/æVÝ”÷¦Ú¯ú’E­þâ±QßaVÄlLëz® .•”æÊ*ûêr¿Ñå-¢J„ýKîÇÈ~ý1tøµ¸yÖœuˬïéÞKŸZ_ÞïaŒêÛW› ÷¾Ça™”Õ½ƒ?÷÷”—"JKYÝ”ÙE€_W®¼–sÊû€ePÜ­ÁÏXïoª}å\pëà8¥º—ð+¸¾]:7Ü<<ÏO€|—pÅð V¼ìæ¼@ù·ÆÛ#»à¾õEV­ìþ¡ËÈ·q8¿ø}Rìº0•ÓÕC©.SÜ‹¾°p]aðᢢ0°K s r*«[ 1ëŠîfÊèF¦f[TRÐJ!H ¡Rˆ’B¬êJ›tk¶cŠãºýK\žf•~YÅôoî;$ÿK\er¬›pÝ«â^ƒ´Ê~^\uwñö/ÏŠ'>+^õìNÑ"G`) ÌÒgÁW┎÷‹¥ï¶Ÿˆã»O—žqÄ™öÕT±½3N1w©x[r7ñÁõ™¢M^{âcñúŽ÷ŠßЧÌ.æee‰få»ÄçŒ?EÙ=+~vc/ñ©mG*¿/Žø‚¸Ûâ\oúN¼·Ý]¥–¡õÀ›âˆ>ˆßeÈk,¢Ù,}šV‹w·»[\í*Ï´¥}!ÞÚãvqñq¥¤Eã÷Å =§‰+3íŽã§ ýbw=?@ùÖ!Ѫä¥XzJ97¥–…¿s`]À|Ëñ·j.›½QLuåË+Í¥åß&¦~6Iì8e…xÞî8ç+¦toü,U´•z]œ¾;Zìýô¯RÜqÏËÃıÇŠC^Ü­üþíé>â˜÷ŽyÅðžt/zâŽÏ.f,¿Sì|Ób1Í™ö¯¦´Ç}|R´ù*t”¼ö,¥–Ó±²äUÉ_wñ¡ç•óh;µPßq†¸ÞàÞ*s=S}‘5DÖ§¦D95&È©9*E€.{hÏoØßn†Ä;^…Š0V9\<|ƒÇ'ŒÆè1·ãƒÓIˆ´"^žZÓ}˜ôØXÔ† bSŸ˜þø·…kqƺ]<&Áòtï VÜ;ä8Ü;xE"O«ÿnšp î˜:3ó‘ïtOàoÿ@yñ4fJI¿²•Ûý@¨Ãý@§û÷ðå"`¶ïõv›ç»ó/èm}ße`wº5îtk VøRu¹uååÖáW|ï4?|G(SV¤¡¡"ñ:þÖ•–ïÀn6JK§ ñ#'¢ÛîeX#=΋g×`Ùîn˜02Þ«)Åßý•$»zØ.»z8àpõpÿDþ°͇®úÖ-Ñ$ã÷ž(å^ôÙ”*»®8ò?¬8f“ X§ëŠuÇô[.¢kOSj9Õ)c^=]W¨×ÙŠëŠ@÷V™êöU“ÎSÙìU©Š¦Á—¾«UŽ_~§ªGƒÀSëËSµ Së«4Ш<ÚK†¾÷~ö”¯“WŠkGÍT÷ŽB*Õ¥…ÿr XžòÞ_”Å­A‰‹À·[‡@Ç ì^ân,ñ¾Ü²”²tJYç7ߥ¸Ù(-ÿBä@LðÞXy=±GÌÀÀHÁkb_¿×…µ®üޥ܋¾ðãºBy2@¹øºöJ+§2¹µ0¾Þýº›)ö]Z‚ÚvFÊk°I逑ýó÷Øå|jð7U}à©õq6ýs 6ºãÜ쎳Œ5c…ÜÊ‹WM)é/W^—™ò¿bSÞûqk`ª}ÿn?kù,CìYô•–Îéñ¯½”²tü­+w¾‹¥¹ôk(='ŽDΪwñî799±G ÿ}~¯‹òºz(åž(ÿ½èÛuEE®½RËéóZ®RhUEmpæÜ³Ž€7#£']¸ë;º}OUÿýxj}Uƒ›1gú^š·£ú]&õTóß¿Š¾9šÙXÐù]LïZ,=Ï u¸ñ¯629`Yø=yþ× o_ù^î  7àþ7ü¹×pîÒú\'Â+xë}Ô¨þ¯‹rºzxOTì^ô庢ü×Þ[x1îCÜ9?P9]X^ý–a•!Dœk®<¾Å´k0ê··jÎpݲ@—Õûðü\À½H×Õ@d8×Ü!æ!#Ãèl·âÔê•ø½^ 0jrféÒ¢ZŸƒ+üüTð^t»®˜@×lš«©ØNãë‡ïÅ¢v¨í˜B:bÚ ·¢‰šECHµ¾麢¦YMlš#„Re"æ9B!Õ !„ !„ Ñ•M§Ž—¹dn#ªSš/ -%¾*æ¢_tqòÿìÝ{ˆTeÆñߌ«Ùz‰M#lÃ#óR¦™ii…àše%Z¦­™„®¸¦â…`5-Ê{$ÉRDš”(‰¦‚V”mä"R»jyKÓÜõ23osÖÙݳgß÷œwö2íÌ|?0°Ž;3gÞ3gŸ}ÏÞ'cǧ1Ÿ×c[d A×—Ÿ/ÃÓhùøtÜfÆ3Eœšˆü×囫Ù7>ÛÙØ±i†±ÍÙsù¶³œú˜Ý’×ïœì;xBÎ^ȕӗ˒ü¼:k±UÕ6O•âÝç%r¹RrÍ–•EwÉæqcäà„òþ¨ŽU—:KÊYq§|òéíRœ¿[žÙÿŽ ½±{¥G¿3òÝOɹBÒkò{²â…»å†ªeÞçÈïŠÜŽÒµÏ ¹åÇ2±õÕ&ƒ¶¹ª–`©o—c‘ø¦µé.£‹Þ–‚Dý¹ML[&û.Äÿ‰u”‘‹7Êôn»êÝ7£W_ÿãÛ0Wf­ýY.D¢ÒîþW¥xI¾t?kù\ÚÖ<“S‹ñÜ”CÒûŽrÙók™ü;T¦¿ÜEvnØ&‡Ÿ—ö-’ç •Nåëäé geî¶B©Z)Ç©k°I†¿Z×¼îŒ^N…@b<[;³eæêä¼ Ëmã×JÉ”{j4ݾzk˜t¹ä·œZBysÕA¹Ö¾£t¾7O.kÜú¯½ñ‰½2Þö½,Z.½¿uj"~—›ŸÍ—ûÈúÂå‚iZŽgçÊêñY&}v-”ÉkJ%â,Ósô‰ûR¶Ïê!höq^›Ô µÃW»‡œ±›Á¢_'Eó™]+YõÛ\†Ô@²¬:Ð×6DÌKÊ7õ2öé¸ÍVu ÍRúUÖÁ•¶µ溆àíÕÖW¤¤DÿÚI¿Oµ…_Í„uÍHÏjõó~¡^6ImrÆÛ¦^$ÇBÍ×vcãWI£}?žÇV2ƒdS „UèZTèkÄIù:¯ÑTËØ§ç6›k bš¥ôƒëì+<š¶Ãt&Ûÿ5Tp}E³Õ‚¨$«3ìÆ+¨f¢Aã;)[æ­’ÐÔ…2ºkغ^$ÇB2ccb÷~TÒU'œšËU>µ ¦%å+=¯Ñ”ËØ§ñ6ëj ôKéûWY$Uá1¢ÒÁ¦çº"¨zÿ¾¢ykA´¯ì{yØ~Z§g Nn™/«Z½&ŸºÞkd]/’Šc¡ú£íØh7Óð~® Þ_\¬9XuàWÛÐ%åkù-c¯N—Èøž/Êçš«uZê6›øÕè–Ò¯ X^?™ Ê&ªÅð«®ð¯0ÔWXí+ÿý\ ¢í¤ß‹§&¢¡õ&±S_É‚59R0ïIéößÇÿç±`36¦ãÖø~ê<ÞðY±­ aF”Æ©Xuà_ÛÐ%åk볌}ôèa9Þûyà¦PÚl³ñ‡¸±ŽAÉéÍÞj„žrq×lß* û Ós5 ˆŒÕÁÕÚúŠIÕ n6g-ˆ©:#É÷’Sé©¶ð©™8‘ìÈF¤tý2Ùqª­œœ2V6Äï¹ñ¡YòÑ4»z‘Ô vc³f¤þ¸5V:äyjCæ×ß_ëÝ«© áb…ŒºXá¥þ3Õî«y’ÕŽé}Ô°¥¿©kÝžŠ­jò}SÕ×W¢ªlÝójâg§êþq¶Eo³²ûøU>Ç-¸X!àä\£–ÒoÔ’òÆeìÃÒmâFY7¶³á\qKÜfÎi#ËŽ_Í_5ü[pj®©5Å’ò©®”HÇmZê±€æ?3'Ô@š'd¨´l€ DD‚‚@@""AA ˆ ˆ€ € DD€Ì "ÅI1#¤ÍŒˆ ¥3¤°á?”ë@cƒGirF;#ò>€ 4eÕË¿Ss5ŠF£—G@2b±XEÐlÈfF‹ß®;vìC HFyyù~'CYb5#Rš[, ]***ZŸ]dX6œÌp²ÃÉMÕ ¤Vñoªþ:d¸ÅJKK/9rd_ß¾};wèÐáÖp8Üšah¨¢¬¬lOAAÁœ’’’CñŒq&1Q×­^(…AT:áÄ­Uâ–“¸9Á“«”j—øwˆáh8áIÌ„œ¿]sþ¸¹Ã¨&r4OàþûPÔRñ'¾â ©V‰ÐrÏžÙ:ÞÌpß">3¡9†'Ž%¾%žÀ}õ‹…]³(wHùäÍ oFD53 ˜h.VÈ xboê¹CÈ4"ˆ »‚Hy‚ÈH1ÃŒHyƒH¹Äý 1Ï}ºâ´dw(©€@2–SÞ‘;Üßó̒žð!ˆ€ Oé¾Vš•„\—o‹'\DÌ—t‡4ß ÈÞ02ÍŽL!¤LAd #1„H A£|þ¯†éª9ïé9÷ýºÐ!„€02…òù~íŒ((`@2ádºÏ8#ª}Tœ&¹b€ov$“ÿ 0 µÉh-8hIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/add.png000664 000000 000000 00000024532 13703317554 026062 0ustar00rootroot000000 000000 ‰PNG  IHDRåR qotEXtSoftwareAdobe ImageReadyqÉe<(iTXtXML:com.adobe.xmp ʲ³§%ÈIDATxÚì ”e¶Ço%Ý 4²4‹ì;BsDPhÙDZEQ76QåøDÅDt—Q˜ñ £èxÞCÁ‘}¤uØ÷' tC7 M'õê~Š•êJRÙ+ÉÿÇ©C’JW%©úÕ½ßWU÷“È$’§8N9^>«€€Ä3r¼ˆ*ù‘Q2x,AVgʯËV•Sò"¤dð¿ÑcH ¬,¤lð¿Ñk–ÓHJ½|Þ& âANÙÏd91%BÚ4Ú ^3ŠšXEH½”N/=µ‚˜)^DuK(Ërmåÿ lgǰ„W•)O‰?š×´KmјK©OOm®)C3ÛÄ+‡ãò™3g¶LŸ>ý÷ß›"æY˜n!m6›ëh©M_õ2Ú]‘²9¤ "gÁĉGÌ›7o“+b:\bz¤³V“R+¤˜!›BJ(œ:ujU:uÆ*»üÏ)Z1c-eŠ.Jê#¦]$ܲŒ­ ‚5jtPþKwíÛ²¦=i™6¥ÍKôÔö¶0(mÆt]VhtªÏ2Rzëè !ýÔ‰éö€;{¬)Ä Q¥”¬)É‹ $ƒ”–ú`ä'ZˆXöî/ÒCJô¾‚–2."%É&¥¥¢¥ÍÄ Y$E¤@J,Ÿ¦˜y:z@¤ iIÁO^²²²¼ÎËÉÁÍ6f˜?>eddÐÀKÍûàƒ¨Zµjtÿý÷CJ`ŽDÏ×Á&Üßýž{î¡'Ÿ|R<ÖŠÉB®ZµŠþò—¿ RàO:3Òš¥víÚB<­˜Z!9ŠBJ¢ŒVÌ 6ÐéÓ§“BHÓR¢÷Õ<íÚµóûž­[·Fe=Lß¾}éå—_Ëwó·„{?©U«Ý~ûí´xñb7nU®\9)öEDÊ0᬴žXÂ)+§ÌÿûßiÊ”)tÝu×%t¤–rõêÕôþûï‹”•Ÿ?ñÄb^¢‹ )AØSæPY¸p¡‡j*Ëbr³lÙ²¢‡6Q‘4…³ìš)Õ5•Qrø×®]à 6‹µ)™£GŠö£Q§wøð.[³fÍ —Ÿššš¥,ãŒòð7eºæšš)¦í %H:¬.%z_°¸öH €”@J@° £€x”à@•`H~&s$œûŠ×å÷AÔ!eÈBÊÄ–2¬+3Ï—¨Ò¤ŒFõ¿+D´ã°ªƒÆzlJ ~X<Ùà¹~˜=YúÝTR(¤ÑÿÞæA̸’Ò®“3RÊeË4RšÒ×ãí%¥N/²„²Aõ"ê'½b¢÷Õ‡úÉét>†”qGŠkrêÚ™jä 5}ÕKéôòØHPDJ³b²„<R~~>]¹rE<qI]e›–£’ Ñ‹]“CÓ¾ 5Rjáå]U¦<¥Y yÍk kJÊ‚‚‚¤”Q ;wNÈØ´iSªR¥ ¥¤¤µü~ƒ@ž–FÒ? CG¤®çQ ø™ÿf~_~OQQÑÇÁ) ÷(ûÍå .lyíµ×Þ™7oÞ6eÞY˜Z!%µÈï­[Ê”“,REG’L¹¹¹”™™Iv»=$é!el¥ íëHA½GÙ‡ ^xá…sæÌÙ䊘F‘YL¸ÌÎÇÆS¥ä‰SÖºuë-d>q€šYÚÉaëY²Û+Lš4i¬ò°²¦íj3:N¡Mé'bª‘òêÕ«¢pS¨©qˆ,dïBÓL¤(õ™5#-9ZÇÛÁ·µÑïTµjÕÊé®lTÖü·)“UH}´ &J#£•{rÝŸMòLF%¿bê{6¤„ӛ͖Nž½¼Nò¼’H|I¤¯:½¥¯ÑŠŽqsjE&¦_iBL¥8¿ØÏvô–¾ 9!¥m«6ZFû ?b Z¨mV9ôN«MòqÍ-ÒW“íÊHD¼„¸à@/š$ûŽjºF%‹oQ0Rz)½ˆJ‹vyÿð…),‹¢IR`S >BÆ!’AÚ )4‰¢/¤\ªO%,Ë ñœ¥·H³4…$òs«Ú”>¤ TÊøÒ`Ѳg4 ´ ð÷MžÓ¢’¯h‰H­ô2^ÎS†Úf¤Ò©iHmF)¼_”£·Ûò"eô-x¿úõ×_éÁ¤‘#GŠ d×29B ¢¼üü¨}ü¼ü<êÝ»7ù›|‡ä`䥗_¢úõê™ îgñ(¦¯Ò<2€ ΂I¡ Ì£K=ôÐC´`Á:sæLrOïmF¿J/©i ð¦u«Ö”––æ3K7v,íÛ»7€]9q"&¤Œ~³Ì´?|~ôÖ[o¥o¼‘>üðCó¥êÛ9’:”î¸ãêÖ­ýío;õ3ÏÿÌý>½ÿ}ý=nýs§²Ð¥K—è…^£5ßvÛm”M{•Ï:sÆ úöÛoé±Ç£gŸ}–Š‹‹#´]¬Ù³„Ž+täøh|Ïæ˜1cÄß«W/¾¨ÙcŸ5kMœ8‘²Ú¶¥3gÏÒèÑ£©yóæÔ¾}{Úº5Gˆ¶iÓ÷Ô¬Ù Š$ë©k×®b(¾[Ú´¡2eÊx|ìóçÏÓõ×_O+y;J£ŸM7ß|³8(hiß¡½©RåJJ4ÛG“&M¢=z(ëêOŸ~ú)e÷ËŸ{é²¥b}*T0üÚÛ·o§}ûöÑòåË©|ùòtVùüU2hÒäI”ócÍ3—2[dFD +_K‹Hëw\5jÔˆLóæÍ7Y«i×áÇi×®]BŠ®JÄzàDô¹xñ"µnÝšŽ?.:VX‡z˜:,žsteiõk.W®œ%»ˆ¾QÃFb¼|-µÖ¬^#äúàPzñÅ…ÌüzÇŽÅçãÈüË/¿Ð¶ÿlQÑÛ÷fÙ«U«FǧþóŸ"¥MMMBæbís/ˆ”NsÕŽ–pÈ!ôÝw߉NµÝËók×®M‹-¢*Ï=¶¼ƒoܸQ¤ :ÝFß|ó ­_¿^¤“MƒiwmÙ²…>úè#š¿`>Õ©S‡Ž;N?þ¸˜W±REêÞ½;}õÕWÔ¬y3ªW¯5nܘ._¾l¸l®ÞÀi9\>ûì38p Í™3‡5n”Ôû"eœP±bE;v,}þùç"2¼ÃsÇÉâÅ‹©Øá¯q„âöwq$âyñ*V¬¤´Û‰ŸoÖ6%™£ÜªU«DÛõÈ‘#"½¼é¦›<ÞSx¹PD´ ×U÷™._±\œ2QéÕ»—ˆÄÿû?ÿ+Ú¾"ß8Î)k“&MhòäÉÔ²eKÚ±s‡»Ã#pìû2±;sB„ÓCîÌQ;_ª*‘æ×_Ñçq§§²,-ïØœ¢îß¿_iÿuϹóæðáCâ}F½Ìœ¾òÐæ¼Ž‡~˜  Þëñ:té4§¥}z÷¡Ó§NSà ÝóëÔ®£´_›‰aйóÆ×osâÄ Ñ»Ü©S'ºûî»Eäçó¡Ü¾d¡'L˜@OOxškê$®ì5zÔTP-¥N¼óóÄ‘‡OIÜrË->ÿÞÌk¾vSm92­£óÎÓÃJ»ó½÷Þҕ캥ô ¥?žS¦éÓ§‹ÇS§N-•þú= !…&S¤ïÎ ô4Šþý)))~‡vG¤Œãp,Gèà ‡”HÌ‘»ÿ€þÆch`+¢£'Æiˆÿ\sm§ßËâc=—|Ì;~ü˜¨­Ó¹sgú\SôJ×âA¢ö«~ÝË—¤¢d©ê–š2˜üàÑ,°éuAʨ#)¸¿Q¦S§O‹âR¹¹¹â†eu‡/5…¯ko½ÌãëÓOK*¬[·Ž –cKÔ–1¨xÉuBJ+‹©Àå9¸Lßé¿lÙ2ÝHÊ¡Áe?¸|H‹-"TïVJH!ѦL(/%w*fæê®™ÃŲž|òIQZ’k¤æåå‹‚S¼3rªÙ³g ¹ø¶2m}T_ó~ÎE«Ö¬Y#nJ^±býéOoÓ®]»EÙJ.çÁu&LxŠúö½·”_ÍËÓpù;v줙3gÒÏ?ÿ,jôpÉ®XÇßçÑG¥~ýúÑüùó©F´páBQO@Ê û’i¡üí©oGûÝ»w‹k¯r±*Þ‰¹š×±9yâ½ýöÛ4cÆ Qƒ•£è¦M›Äßð1O Ø©©)ôÄ‹”˜Û“ƒR¢æš6mMž4^{í5Q+(++K܇Ê5k333E®sçωèÿñÇ ©nÝz±­H)KÎpÖÕFP5ŽrâJä?þø#µmÛÖ-/¿—‹L9z”*W®,v|~‹Oq U~|Ô˼Ò)¥gzyèÐAJOO§ŽK ^ef6ñ~úé')=¢,?CT]×/_­EËSj[Öf·¹+𥥦ѨQ£¨~ýØ‘ ¥µÅô<"Qnî9QZƒÓÊ&‹WO+í?Þ¡¹È²*¨ºãkÇAñ5/í?ëæZ´Ÿ|ò‰H³µp/0WN¯P±v tôD6 «˜®iý†õT½zu%¢ÔwçœÕ•hÄi ³Á5_¹n*×fe¸ :W?g¼Íó××tà ÍDé“ï¿/IE8(Rè6mÚx¼¯Q£ÆâÉöíÛ\ËÿÁcÝ\‹–‡/PÛ™§9-jø„½“'A;…)ƒh–Š˜aÞØ\ç”SW>/è.f¬•¢<æ1;¸ $×e7nœ(bÌpªª–†lР¾—y¾­ä6+·)¹-úÒK/Sz¹r4fìXѦÍw‡)‰å7 ñãÇ+ˮԺ«V­":˜¸£‡*‘ýÑ庲AÙ”DBº2ÎR7š¿ÂYúˆaíîý–9Rë!%z®óê·/ À÷ pVtnÖëRé,9ê†ØšÐ¦L&¬™E¶°VÌ“ó u´)VH_&ÊÞžF ºÈa0è)!d\$Ûž{ºï§1ކɷO!}M:!¤L`¬×¹ßmNDI¤¯3ðë|üRZ—Óñ#¤¯@J¤@J %R)A¸‘(ûŽ2´©³2|nI½> •Ll^J;Íê•F+û¦Ñ+Mì4§o*õ)Ã3lôÖý©”†-mpžÒêGÍò6º·‚“ŽI6ê‘î ÅW»ü¬ævjòó5ê½S¦k’DM/9)÷7숔À+Ø©Æ)ýég‰îm …yƒIT»¼DGód*¢’kyæÊ„ë–)”´_¢å›”CN*ÓÞN™û‹i³dvÓÆ)4½¥ª+Ïq’ÓùûŸúšWâ£D·ß”B¨FTµR}ÑÈAÏo–il?;­ùê-ѽ¿bU;½ÐÆN­Ë{ië¾bšuX¦+ØJˆ”ÉD™ê6êVä /•ÐåÈwÐÒk6ÊvUŠ´]g§ÿj-Ñê EÔýë"šš«¤ž©þç¹QÄZ¿£˜þû¼Lë~*¢û×;è— À¥TMºÕFÛ·Qey÷¬t½E*=RÛ‘2ÉèÔÈFµªHôÅý)j¶I…ÊkóÎ:É‘a£æôB^ÉͧþÏA?µ±‹·¥ù˜ÔNRÅF”4·Ýíi4T}Q‰¤ù(l)“ ©¬î»^¦©KŠhY‘ëµrvz¯‡î,ã¤Õ®ûªÜÁMž¨™©×yA6=‰®:éùeÅ´·"}MVjÖ³Ñç´¾H“q*b,Ï“(»žD×.8é`%õªX2ïúÚ6ºÙ ó1/Š•åmN±Ñ¨&•w½Vá:‰ªJØNˆ”I&%º§¡D[÷:©À³!HëNÈôlSÕ9ì é;$šqg=ä :~ÆI?º2ËBïó‚A.rÒ,¥Í9ù–TúªeIà¼tÑAÓÖ9è¼›+ü›u_]ýþë¾Î<Õ÷S‚Øõ`YÔ}mJ¤R %pž2þÕ7I.öÔU~—cþqäæû^5Þƒˆ” ¸½ÍcTiÝÓ¨WN÷·óÇ¥zDʰrúôiüÞbj˜Gó2åÂ9^ûþš5kBÊXP«V­¤–-Ú©­/‰ä(ê©ô˜Ùý<']jk•T6šil$×…Hi‘ íˆZÀJ5A£•ªÛ!؈ÊßFk?€”Iñ~)2ãkš^/”õ{“+ÒÅúÀŒô‘?nןh½®$„˜¦¢ué•Zz› }.1t ÈÑSæ”äáÁ¬4º_‘„]bLBþRÖ)A‚‹)ÅYš )ArŠ +AJ EEE4|øpjÖ¬Ýxãbêß¿?-[¶ŒœÎà Fž={–ºwïN'Ož4¡FÉtþüºûî»éÈ‘#¢íçuÒý UL)äèè±ò“GËzýu!#ðZ»v-ýñr1ÂzVÖ>•”§r´Wë-ýõãxû[DJ`ŠÔÔTå¦NJü1;w."ëùõ×_i̘1´wï^ÝN.™3„<ÅLÔh)›6mÚˆÿ9d¾üòKêÙ³'ÝqÇtçw aùŠ–K—.ÑÀÅóÎ;‹Ç\*SåÂ… ô‡?üAü½6ež>}:­X±‚FE'N¥69]ž?>uéÒ…Ú¶mK³fÍ‘›Ù±c <˜n»í6±þ]@ÅÅÅbý÷ö»W,_çÏ=gÎzë­·Äç¹å–[hîܹâ½êr† B:uëY° d9æÎcâÖ-CÒÒÒ¨lÙ²TXXR]¹cÇŽBÈÊ•+‹èöÌ3ÏIù=MW®\I‹-¢zõê¹£ëÅ‹iƌԧOêׯŸÇ²Ÿ{î9ÊÉÉò´hÑBiSž§«W¯Š»aV­ZEÇŽ£‘#GRvv¶¸5‰—3yòdj×®¨ûØcQff&µjÕJüm¹råhõêÕ´gÏ:t¨øÛuëÖÑîÝ»iìØ±4`ÀªT©Íœ9“&Mšä^Îã?.–Ãû»tΧ!e2À‚ðÄ;2Gå‹/¾pG:A>,Ù£>J 4pÿ=G½iÓ¦Ñ 7Ü „0Czzºèìá6n5¨Zµj"òaçÎâ@ F4»Ý.¤gXHN¹ù5þ ,¶ú¼aÆT¡Bº|ù2åææŠåpd6ZŽ™`¤¯y…”À+[¶l¡””jܸ1mÞ¼™þú׿ÒG}DuêÔQŒÓN÷ÆUÞW±bÅRmFŽbÜi´}ûv‘FúM•ž×·/Y^ïâÅ‹©J•*ÃÒ²ÄeÊ”ñè¸â¶±·å|úé§¥–ã ­Ú5ƒ6eRÂ2-Y²D¤y,^FF†ˆT, Gnû}óÍ7”——ç7êñ©–Ñ£G‹öžþý, ËÃ×Mš4í“O>qGg®ÄÀŸÕtg޲>u9,e°Ë” *pªùüóÏ‹s”ÜÖâ–ÛpܱÂpç GÌnݺQ=èÔ©S"-4#·%¹ÍÆ/ªLùòå©oß¾4~üxzê©§Ü:FT­ZUüý† Äçã¨ûôÓOëÒNÿp:üæ›oŠåÜzë­¢SˆSâ@—“(`€føážGÙmà{>ùL_þ>œ•ð´)w°ïWšàÄU„ð3é+R %)€”H ¤@J %R)€(‰JѨn)- —úèÝ»75oÞœnºé&Qÿ&Ô*vü÷\²òСCø-*&ÊX.˜üꫯҔ)SD!¬‚‚:xð ¨Í \±à•W^¡úõëãGQL ¯…™§`«‡¾ëžkìðÝü¼ñ¹Ößd­­qc„¾n«þ9—ÝhݺµGÍ€6%0—õà"RÕ>\j~©z« Е+W<ê¶ri®¨®­ãÊé+W¦;pà€¨ÃÃeA¸ºÝí·ß.jMW>@-]ºT,?++‹&L˜ ÖÇëå¢XÁy^ûöíéÞ{ïQ„ ©›2¥*SYe*¯L••©º2ÕUÞÒVN‡\\\,+‘E¾zõª\XX(çååÉgÏž••TRÎÉɉúgR’aä›o¾Y4hüÃ?ˆ×/\¸ +‚¸ŸÿòË/²"†¼~ýzY‰°²’îÊ{öìóôÏùo»wï.ïß¿_,¿C‡òܹsÅwWÄ’9Å{?.wéÒE^¹r¥¬dò’%KäV­ZÉÛ·o—×®]+ggg‹ßˆ9sæŒ\TT–ïÌëò5ñvò6ñwÐNÊÁÅïÄŸ;ØÉÌòõŸ‰}b¯\~UvùVÖåŸMȈÒuáÂT/½ômܸQ´+¹Õ®]»D'Zo•#W?çèL¡)®n׫W/‘Ör]ÖêÕ«‹eqtæö«"­HŸ¹à3×|eZ¶l)Š] 6LzæTØ_Z ÐÑ“P°8<òˆ“+sjë«Þj€™’ך®\jR}ÎY\†×Éé2ø3po.WTW":6Ú”‰ ¬Åªå9B*)¥¨‘ê«Þª¾nk u\µpéJ® Ëà 0ÿùÏHI“Åãüü|ñùš6m*J`òénkDÊ„†KZrzʧFXªºuëŠô•k¢²h\o•;u8b1<Žå¼yóDú©ÖmåÔö7Þðxþâ‹/šZ?3ÀëãÎ"^?§¬|:…9qâ„x;–8Êro.KÂØÏC¨û*N…pÊÆ‘G­ÿŠº¯¿ÃÑ‘{_9MåâБ"”:­úyfNò‡r!€™ó”¨û ”8"ª+{„X×_=~¤¯ V™IÉç8ù1÷Äò¹INÒW¤¯IÒW¤¯XH ¤@J % XpJ$Døò6>é 5ÛÛÊ2C$¶fÍš2ð zRÆÛ)¤¯ M €”@J¤R %R)2Q(**¢áÇӒ%K<^ß¼y³¨jÎc‹ø‚+Ñ©•Ф@J %°Fý¨šU¸3ÂÃC tîÜYÔŽå±\XÜ%ba¸x=~öÙgݯq/.¼¬¶g̘A“'O¦víÚ‰â^<°lfff©Ú¬,&²nÝ::räˆx²Åš¤&á¡ Þ~ûmÊÎÎv¿Æ=3gεý¨·ñß ôS®\9ºë®»Dµs’€Çýà¿…”„¾ÐÛ@?Eý©ûÚ”I‹¯~ôð¸ß}÷Hy˜»mÛ¶Q«V­ð#BJNxüJègÆ ¢MÉmDnƒzK_¹-ÉãL>ðÀbLK…XTH×t $j…tîä2d}øá‡¢=iõ”<Øù¨â² ¾½¯IÒöäN€H €”@J¤R %)H €”@JIøV2¾GrèС¢¬ ߎս{wqÃ2€” Šœ:uŠöíÛG¹¹¹´ÿ~ü Äš•+WRË–-©W¯^´téÒR÷Dr!¬pÁeDÆŒC{÷îÅ)\Wçßÿþ·¨f×§Oúþûï= b± ï¾û.uéÒ…²²²èÏþ³»VϦM›¨oß¾¢Æk×®]ÅðüþãÇS=D-†‡?à÷ýðÃ4}útZ±b5Š&NœXª~,ˆ¸ŸÒÂìÚµKˆÁµwÒÒÒDÝV.1É‚2\¤wïÞôæ›ozÔrmÚ´)½üòËôÜsωñDvïÞMO=õÕ¯_¿TÕ;÷Ž’"ÞŸ““Co½õµhÑR-,ÜW_}%$á­jdäš/é–Œ#$Ó°aCQŽ+¦óûÒÓÓEÕtF-Îüã? IÒWܱÃe 9}å¢Ë]2{ölºçž{h„ 4sæÌRb¢†+¤jSrÛPžò‹/¾ ‹/Òˆ#ÄX"µjÕ¢>øÀ£\"j¸Æ/¨ûê‚whNQ÷5öÛ!Øù¨û @úÃt?kB)@¤Dd ØÈ )}ÉÕ €0K(ëd”!¥ 9!%ˆ‚”2Ò×¢%Ÿ& XœNçQRšŒ”|e ßUPP€Íùóç7+ÿñUNDÊ`õ©+¿ÆWÈœ)ƒ”$ ²É)<+ 0…‚”RLr Û"ãè³uã.,¤R %)€”H ¤@J %R %)€”H ¤@J %R %)€”H ¤@J %R %)€”H ¤@J %R %)€”H ¤@J %R %)HT)eüD A‘ãUJ@ ¥”5GY÷€DŒ”Fû¼%#¥ )A’Ii©ýÜfâCÈRZ¾M©?z8±í@‚â´j´´ùR‚D–Ò’b¦x ëN—°ü¡$IY؆ (Ôé4’QÙçcöá$×\m®É®™R4“úܦ™Ô¿ÀjíE§f*V&‡ëÿbÍsurGNÆJ‘Rûe$­¸š×.9%”1…„$]thö]C­Ô¦Lñs”!×EÖ¥µM„„”ÀªRELK ©—R6hW꿬¤KY‘º«§°².j:uS\vôȯi£#¤V–’¼ˆ©Í2¸…’~ïnÒ çmBÊ â1••½DGñ¬;y|EJI÷a%Ñb+ é-j’ÁÿÖŠ”ºhi4ß[t„”ÀêRzÐã=Vˆ’^…’ŒÏœB>ˆ²ZFF»i{%8 ÀH‹ hÄÿ 0Ÿf­[B1¾IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/addlist.png000664 000000 000000 00000016241 13703317554 026754 0ustar00rootroot000000 000000 ‰PNG  IHDRúLˈëtEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp ,ÆOIDATxÚì °ՙǿsg.oD Xk\Á(ÑÄĨ¨Q*¢eb¢‰ÀnªbE¥‰¸®‰Æl*¦JSµ»î&jLPƒq /h©h¬hD¸‚à”çå}ïÌÙþúÞzfú93wîë÷£š™ÛÓgºÏÿ|ßùúœÓÆ#DîmŽ Û˜Ž!n"z*€¶³+út€p½ŸAß mïý´aA:@äÅK]Ñ߈ íEž[²>b·-µAÝ+îâÅøj+ôb‘/݈<5cÆŒ×^{í¿õéÓg¢1¦o99Û´i“ 2„[PMÅ[Û°oß¾Esçνýšk®Ùà1¾Ùâ]MKÔÝÏŠ§çÍ›wü¸qã–8ûô«$C U¿ó¹çž;oìØ±ï8fZ–¬×¥÷ =oÅ[–úÝ»wÏîիׄJ3‚ÐZ—½{÷Îw¼î«¯~bO¸í®Ø{öìy— ýãhõœÝf=m÷|,­8êîµêérÛäP[­önÑsΊ׉'WW¼‘Ø ã’Â'dR,ô ¨;t<¡—<÷³è ƒzðEB?×Ýøˆ:Å"7amtz¾t\‹nÂ,º 8:–Ð}×ážtŸ: t@è€Ð¡B„¡B„: t@è€Ð: t@è€Ð¡B„¡B„: t@è€Ð¡ t@è€Ð¡B„:B„: t@è€Ð¡ t@è€Ð¡B„: t„: t@è€Ð¡B@è€Ð¡B„: t„: t@è€Ð¡B„€Ð¡B„: t@è: t@è€Ð¡B„€Ð¡B„: t@è€Ð: t@è€Ð¡B„¡B„: t@è€Ð: tèÀ¤;JF÷íÛç.{÷î•=zpç Ó åºoß¾’N§¥OŸ>]Wè›7o–úúz9üðÃeÀ€” èt455Éž={äƒ>cŽ9¦ë ]k;9‡NíZ;Ö¼_¿~’J¥Ü2ß³gÏ®ÕF×­– +ЫW/·ÌW›v/tm“×Õ3„®–u-ó]NèÞ «ÑeS Ð<.B„vÿÝZë.]…Ö(ïXt\w@èÐe™1c†œvÚimv< ôNË)§œ"Ǽìß¿?¿N¿koª¿ýíoöw­\¹R†*»ví Ü'›ÍÊý÷ßO!@èŸE‹Icccè>k×®•_þò—êw¯¾úªÌœ9“B‚Ð;>ãÇ—;w†îó­o}Kî¹çYµj•ïöõë×Ë…^莄=z´+$¡Ý*,Xàîó׿þÕõ~ó›ß¸ôÑGîßo¿ývAZãÆ“ï}ï{®‹­éwÞynú~ÜrË-2lØ0w<õ˜1cÜ4{ì1÷ïÝ»wç÷ûÎw¾#]tQÁ±ï¾û®û›4Ÿ[¶l‘‹/¾X;ì08p \qÅòúë¯Ë„ dÆ n>5}@èšóÏ?ßà÷¿ÿý’Ç0ú÷e—]æq\²d‰+ˆI“&I&“‘3Î8C^|ñEw¿yóæ¹,\¸Ðý{éÒ¥2hÐ 9餓JÎ7wî\ùÕ¯~åº×šîäÉ“}óuä‘Gʃ>(/¿ü²lݺU¦OŸ.—^z©[Á<ùä“ùfÆÓO?íZï î»ï>÷ø—^zÉ=N+¿Q£FÉwÞ)C† ‘7ºy„Þ¡xä‘G\åÆk[U¿¹©*Ú_ÿú×n›ü¡‡*ض|ùrw½ óÔSO•_üâòé§ŸÊ+¯¼"çž{®¼ð y¡«`Ÿþy·© ëu»1¦ä|j]¿öµ¯ÉÑG-·Ýv›[YhšÅüøÇ?–±cÇÊÉ'Ÿì£MŒîݻ˷¿ým™={¶»OΣ˜8qbàõP1¯[·Îý-_þò—eÊ”)n:êQ¨5W7Ÿ¹ z‡C-î›o¾é.ŠZbý>uêÔÀcTt?ÿùÏeÚ´i²mÛ¶üzu—›Zlu}µbÐõêv«Ë®n²¦óÍ7K·nÝ\Ë©B×í~xE¥"StÆ/;vìpó«3£èxjuÃõ¼Š®_¼x±ëv?þøã®Ç¡ûqà 7ÈM7Ý$·Þz«ÛP÷*'Í%h[ÔRé’cĈ®@£¸îºë\KùÓŸþ4?^_+E…Õ¿ÿü¾ê–«¸ÔSÐ â _ø‚+Ê .¸@~øaY³fM Ðs•‡òÞ{ï>Ç]wÝ%ùË_Ü ãØcu­û[o½ånÓsiÅ£y?¾<õÔSá–Çù-zü7Þèz.W_}µÛ\Qoƒ’Xô®wãAh›xÖ¬Yî£'eäÈ‘nN]vµºêb«{®"Ñ©ŠÎ:ë,™3gŽëZç‚m*ÀáÇ»õCÅ©û,[¶Ln¿ýv9çœsäˆ#Ž(ØGç:S÷zûöín»?çªçP÷ûÞ{ïug Š ¤éïÑv¼V*ºNÜZ¹lÚ´É­ÄŠƒ†€Ð;*Ø8Ö<‡>WWW×+~ `é§ŠY-¶7p¥íp„0'tmSë¾AÖ\Ñ4Ô²j$_#èS(æG?ú‘›ŽV$ê1xó¤hðM#ïÚ^š-èÀrýõ×»^€vªQC+Í£÷4b¯±H†1͘TËRï,Ýœ¥»³ôt ÞÚjœDkb ²”Ã'Ÿ|’¨ðCõP‹¯^‚¶¹+AɩנBMÂQOLŸb”áå w>t¹ÎrÐY´S†K2´Ñ!”JÚÅZ`?üðC¹ãŽ;\—‘ãºC'DŸ©Ÿyæ™®WöÛßþ– Ò†`Ñ!\‡šrÑç娄Þêî#ຠt@è€Ð«Ck¼‡  «•ùv/tœ¡½¹ºZÖµÌW›Ð¨{µ¢Ý•LÙ¬}´µû¤wà@gåàÁƒn™¯ö“¦voѵµƒÔç±¹ÁÑ’«Ë®kh™¯©Eo/wÜqÒÐÐà >7-@gj“«¸S©”;L¹5è0=ã´Ý¢ã©uè¢NjÀ;Ó¡3 ^ªÎ cË´LûÍòÓ¥„žk¯{? “´Ñ¡B„€Ð¡B„: t@è:t@j2ÞS_á íTè§Ÿ6ºª'3bÂ6ÆJ!ÿÍ”q.“$=sèSN~Là_ùÉLY!Ï=fçѾ3œ)]W´"ì$¨!x²-ÍsŒômÐ6’Tñ [š[r.[™Ðu6—J”imŒ‘žI l}R²)øÓÄȉ}1Ý Ö™M¤5+ƒ‚ßl£ë[²“¬­ªl¢„eïAY3¸Ø2Äì÷[[¶Ùßï£óÒ<[¿ôlùB×9ÚzyB7]@è¶“ =HXVè] SÃô —»#ÝÁ²[œÅ.w©«]RQXŸŠWæZA&~™J—ݦ.ë‚™ w3 #ݰôL‚l›Ðã«|y’7«£vµ`6¤-kÛájAmaá¶exn¡Ç$m£WãÒ™˜Ûl ?Ëú¬¬K>í9׺­ìº×ÒEm w¼3ºÿ¦2)Òªf«diM‚üaÑ°è ¬Y…Æ-V44AÛÌĉºÇH/lm¹ù‰ƒ¨ž£a#ÍShxÚÄeÀxÂæÖ]3ã™´µe5‰ã\S”£ð„Æ_lòÌÕ%±½¾íñº’ÓØJ„^í½A[-ô$‡Ç;&8ªëQ^ Ë]9g2!Y «xlãcK; =¥Zfh“ÒïjwÖV5E[¥{N¶¤‘UBi£ÐF¯´ozymlÒ³)~›ÜÄh‹Æë³l’bä§Â^…UŽ¥„6ÑLð½±AËãR–z&òwZ“ÀΚ¤W/º‹K’k_œÕÂæ{ÀÆÐ¾î¥Æ»ôjø¤k±è]„€ëÞY!¸£dÚX{GGãÔPE„6L?h…ß16ÑYËzBChuª1 ²íSóÙAžüÆÒIJ÷·\áæÎ&ò¶FL|~•©ð”WÜâòÜD•Ü€i#l‚Â_ñ¯±Õ/ÌeY°e^f‡,É4¸ÛÏO&êúÉPÓM¶J“¼žÙ+Èn—=6S³šlGÛ>Ja \tñ%²`þ<Éf}†D†Yt½!zžGXnëêŒ\~Å2rä(ùÉ¿þkÍ®{T›8Iäçì³Ï–¥K—¶s×=ÁL­6{ßÝùvOýÑ2Ìqަ»Ü˜>JŽ3ÝÝý.Išjz°ÔËÅ©~rzª·ÜÜø¡48bÏ=N3îžï´î6øš gq]ÜDN\%&É1 Ëþé§Ÿ.G1@ì1Ù·o_üÓäÅZ?'5à>¹ƒÄK/½ºô—L¼Tzõì6É®QEc4š¿]yå•r Ÿ(FV¬\!|â‰üº¥K—4M¨FŠóúvv7ûZSást›`€$|£~€cê}E\âÚ¿@ˆ ’”LI ”šjóæ—[¦M“{î¾Ûw}îBïÚµKV8nå²W^Î[Ä~ýú¹VrðàÁî5\ç¸k æÏ—Ô$ß?»ë®d6ÞÉãç>7\&]v¹üþÑÙíÂe;nœ 4Hf=ü°Üö“Ÿluòɲü­·Ú,oÍ™líúc´o‹ÞJœR׫l‡ëtçØ:çbÖâúõîÝ'pýÌ{ïqoêa‡õ“ñãÇK}}Z–.Y"Ý»÷ÉS§Ê³Ï<+ï¬^íî–ã¾M¼ôR×bÖÄ»w.ÎwÜÛÜßù³»ä½÷ÖÊ“sÿØfqò”©Ò³W/÷{Êi—765É#=$Ì‹eÔ¨Q²|ùr¹ìòË[Uè¶’}mé½8TVmâøŽ´±öj{¡vN›-S©=+z”MË&§Ý^q#†`üjd]§–\…®ŸsLžWP¾Žq®ÏþÇ¿çÛ¶m›4:"÷þžIŽÀßrþûªßF/ñH¿ñMù‡NtÝ_}õUyöÙg<¿×VÙ'®ºE7…=ü¦ÅQ>´n›¼šœT>Q‘GÌáçÝkQ¹uƒ5%%Ù»îÀþý’®ïæî9ìØcåùçž+IëýÞ?t~S^Kb‚g*=‹6+¤(âá‡(§MkÞVâw­7ü±oBºÍ} WôYNöLpaˆÌcŽÇŸx<$ýCíg›/CE7ÞÓ¦Ž÷AÿøQaìJÞÔ’ ’ä‚/Ïì•Ï¥º•Uˆÿn÷KS ,£{é ç÷³¼–¯>– ÇŽ•Õ«V¹—ZÛçjlƒeIÑüÙDîa+zIò±­ø³² µ~ÊçÕÚØWÅ/\Ð,¬ÌÛá+™žÌl—³R}¥¿¤[ó‡³[kSx­·®+Mí¦›ov?{ôè!«W¯’… ¸;755EW’­ìÁäÙ¶¦<ãn“f<|[ñgÙîFù7á»ß½FŽ:´dýŠ·—ËŸŸþsÇ ÆÙ$…!ÁïÑgá÷üXþ¥Û·Í·ìüwæSù s Ùý¬À¤7[îÒ:U×ÿ׃:îzZ®ºêjyñ…Ý ‘¢/¦<¼ùxÓ¦6»©Öf¥£á(ÚVüÙU˜Ëï~÷»XåÎÆKlEùµ¾Ú«dôšf0p‘Â%!«³ûäge»#z Ì…-œåþ¦-ùÎ4Õt­Â=wÐú] ²}ÛvY´h¡ŒŸ0Ám×é ]óî»râ‰'æopî&å+_ÍïÓÚKÎ]¬ùãš.ÎñG:*¿¤ÓõÛ|?ËX<‰–¿„Ÿ¡6ݪD²6º©–È¢‡)êœå½Ì~™–ýH~P?HþÑôðÝïcÛ(d>‘÷³ÂkÖ§£„ïSÎðé” môæÑݶ{³¥_óî9餑rÚ—¾$¯-[&o¼ñ†\3eŠŒ8~„¬]»VR©”œ}ö9’v>smþÓNVd§ WŒ¡O‰zƇ½7Ùú]ó”‚z™½¿~½Lœ8Ñý®×ì`c£<:{–è´-{êOr?m^pI ©Ê%šVá³G•Ï~æ3²aãF×(”¼%Û&›wÀ{?µ7uæm´G)ôâƒý~ öE.ëµ|Ýa›dzã&™Tw¸LJ^pŽev<”Ù*ûjàŠÚ€ßÃX°îî/ =³h‘L™:UþoõjÙ¶}»<:k–Œ9ï\ùêWÏt —¶á_íµÐÇNÕ̽¨¼S‡Îfb«s•Ù³þ§`Ÿ¯ýëòo^)s~ÿ¨d2wÝŠo»ÛŸúÓ“eÆÔZ¿½|êèÑòÅÑ_”5kÖÈøqãœ{‘)˜Ä¤¸>ŒÔRX¹Ú–.ÃI›Æ4W ©–¥ÞY4®Ï¾zŽ9rmt%iªRêc„SR½åúô@§ö1òDf‡üÙYÂ*ç°ÔÃ^Éä—g¿ôúôéS²­a÷néë¬×Oï95(—u ¤Z¢àó·VT®ð&O»õÖÄe½° W|bXU#&Ô¢û¥a[îÑØqãݧÚáîÓ+.zSL¯mNrÎkpÌùÃïe»Sá÷ïß_¦þÓ?Ë}3ï-<Άx¦~CçÌ¡wÍK;Ñên/¿üÊpçCû0«û«A#-Œ:8$Sã.°áC?ßÌì‘YR'Ÿ5õ¡"¯¸nŽéö544øÞøÜz/û#úˆ×Ò¹{úôDΘ2§6°õ! MCËÞ3 È„K.)ßU/»n5e—=›‹´ü†=ŽA°á‘µØAnãùWPš¨áÄ®{œÚ2Épo´0¨M½8³+2ASÔÎiΫ-icæÖ§·… kŠ–ñÂkLL}ßJv/SDåÌ“R:ø(ø%‹Ú™ÿ¿OË;_Uáœ,ÞxÈ_eÕ€öŠÓ1k×}øˆîߦ¤c\°I·!³6W övZLys'¢J‚q1,zXç>k„yâ£àfµ{LÆhct+œl2zl^Íž–ÚVÝ=aÚ¶â`#*žŒÍÈ;לּQÞ2jLô¤6Žˆ#ÞøêÿÈûÍ7ÞÍ›7ËÁƒÝØÍÆ J~ס/1j ¯²ë1Ÿžš¦‚‰'¿Ê8a›<±KUp£Úäqf‰ûJ¥Öy…’i'SÚ™VM;¼uäËM4ešbí_•J-Ækœ£ØðÑGîØÝ7I@ÓÚªÜ,:½Ý[tïåò‹žt‚© ó¿Föæ±U{ÕaÍ#…+ªòx ‹ŽEu+z[˜Ç–NX¹îqJbñ3B,:‹ÞŽ*ÚèXt,z´è­áºÓFÇ¢cÑÛ™Eo ׋ŽEÇ¢·3‹^&¼©  €ëŽëŽëÞ‘\w¯áºãºw×ÇkXt,:×¢„nýuJ0‹ŽEï@×ÇÇ¥}Vzfð¡ŽEÇ¢w ÇkóZ¥}®y~j4ç`]¡‹ŽEo÷ìU͉ܵÑó"×Ϧ¦¦WR©ÔXt,:=¹E ’™–[ä·ÛØ;G«/yµdÑK&:Õk¼sçΙ 8Ã9I_,:‹ž4©ðaª%"nƒxó¶áÓ­[gJó´QY?>Õ2gœ.u-Ÿ¹ïu ;‹¾¸{·nCœÝŽ2ÍóÉŶèÕ.É&ôåÄ ÄhâdÕ´©@°èR`s‹„,¦‹Gù%aQb÷–c_{0Åb?ô}cÉ_ܲeËëßÿiž#®ÉGðùÉ!óân±òº¨¨s“Evó¬OU P»j>ïq·ˆZ—ÜD[–ÜúlNði¿ œ'ok6·.å© ¶d=zôŠ=ÈšÛœÐýj ÓrxÖ‹‹ÐvÝ+öŒŸ—ˆ¨{Öçï”ǵGäíCìYžñ|ÏJHÔ½Ø=(N´Î'Nm#t?Ág% êîgÑ‹Û~"„ÐfB±‡¾ñÑÿÆÞO°Ú^ìâ#îX=ãŠÿ6> x€6¸ßß6d¿Àaª6ázh_•@ÿ/ÀàÆGxù”ßIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/addtolist.png000664 000000 000000 00000042273 13703317554 027323 0ustar00rootroot000000 000000 ‰PNG  IHDR´@þÁ3tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp ù¢< A+IDATxÚìœUÛÅŸÙdwé©Ò{‘ªÒ»J± X>TÄWi¢b± ‚AŠ¢ MA± /‚ˆŠJi"½·-I¾9ww²“ÙIÙžìž?¿K²™vg2¹gÎsŸ™«iš&i$Í B!éÀ“–™é/ !„°9ÍCÓ‚¼×(r„B²P¨<6Ÿ{ ›3€˜Ù½j„¢F!$£bæ±yµ;Íú¹31 T(d„B2[Ø<~ŠUÌ|DÍéG̬%ÊÏ{«s#„BÒ+fVAsûyo'nšYÀ¬ÅŸ[#„B2"h‹ˆEL¯È¡YûÂÌbæÀkå1Kk¨Óúé¨è|íEÓ óØBÉ:yóœu'\ZwáÏïŸÞ;±ç“N¹MZå1¿7²5?® bæ¨2vyí‚õ;|¡ YQeB!Ù(l§Ïoûúš=Ïwß®ÿåJ.†kóqtQ6‹[ÃŒŽü5¯~ŠbF!$ÛѵGiPr´P|»¾|°ëC³†Q1ùÛñ¨BÉ t ê¬GfGfh•·-ʘù†ÙgF!$ç\ZA‹C³MJtJê,ÅT!LjÚq‡_>‰¤*!¡-r™´ÉmÑ­T÷¡ùsi2B²ã¼¥Àâ@·yÄXEŽ ¡10аäÖR:¿È–›c䚊Z–¬¿CyMJå“t-{o½(ÑØ‘yõñžÏ„Í7V‹„ûMÓ»çVš'³QÈ-ô®%.·Gn¬%«÷»2uÝ8¹‡_á1äèÅ´Ÿ3+÷¹$:*ýç[ꇃ'÷uc}tk„HMÒ šˆ}Ø1 ÅÌ#žÄqÇ×_ãÅãvÙ‡pHÄŸÁ­òGËkß¹åæê)— ‡/x$¿~æ.ê#Ë÷º¤E™(qêgé‡;\²t[¢ô…žhæ”F¥4ý½&«tÑ™¾Í%ÕŠhº›rJ¥ÂšœKðÈÛúg­ËEIì¹(™TW” Ý¹6An«%½ª:¤€S“ßOºåÙåB¢H…‚š<ÔÈ!u‹Eé{äɉҩp”ŒyyOR=×wH™üš<ï‘I?%Ê_gB<õzjQÑœ1[PNÖ6Š!&‡ð UZòÕ(F D.:¹Äè%¶þÜ‹…›˜¹ã.HQÏ9¹¡^ ©V2ŸŠqðëα ø™fcûµÔóú¼jöó§z¶fs™¦'¤U<>óØ<Üà‘áž”÷Ö¿×óñ.Ù}ü’,úí„œÔ éÂV y§(j„l»-uý%N/ñzIH.ú¥¦J£ñ83ø›Ï1åÌŠ¸ÏÉÈöå%4…Œä êe Ë”¥òÉįÊéÄh:5BÒp]1Õ6%~¸.ž•ë— ˜eÓÙlì o1ý¡i–ù´ îL Ýivóiþ£&iŸ&~¦iþœ¤øîwªõk–Ï4ûã‹ÿp^÷mPBç)v¡tB‚á ±= g–ôÖ£úÌj”ŒU}%$ .‹¬Ÿiþç $X~? Öï7ä ø(ˆnxlê”Jk4“™~DÍwEØWeÅÆ,ÕJÄ&õ ë+OêðЩ6;AôÈ9ûâIÊ$ó¸E܉R(Öɯ7;KKû2©þÖìÅ/Ððçš8jD2Ñ a'<ÖL‚cͯµMT4 že…AÅM§H>§:Ïq¾{$Ê&’y‚fd4šî9ó¸Ýtga.zZZ…-7æO0µ Û÷[gÍF„ì¬W§üˆ›h½~Üœ¸yßêç¹÷ü7Ž]!*hÓÀ¤ó§nþ¦sB°B™7Äp£Y¨‰^("4ÌŠ[Ól\™Ed¼¦YDÌcyBªe½>.MK-†>áFqK4Í,— =¹ML7­Â%ÿÈéÐÂOäBš¦…îØü¥û§ÇiéØ7O… §æ±)ͤ=b³ïžäå­Úäž4_Ä o´&$rÍìμW¦)ž(~w9/liì§ èȬ;Ôi¶¯¥Õrнå2 ’ßý÷¤L×,NÎwxÝÔÑI3–j7t,%A„±Í*t:´°µPÝš¦¥mz ðe(B™æýÓj[ªÌDʼnùˆ—ÇæsEÌ’göØD&,JG‰DAó¤zX«‡!ÇpµEÁv9-xˆÐšÈjŸY–œ"6ý]«{³:ͦß-U_œå}Š˜™ß3…ŸÜãÐ’ 'A;rp¿Üߣ¥Lx±Ômr--‚¢ ÙÍ“V7–‘ˆ£]_]*!KþÏêì4m YÌ!¹UÐ<9&hÏ<0@¶¬ÿZ½/X¸ˆT¨RCnxŸ´º¦îJ®“–'cz„$X_˜†œì¡eŽ;Ól#©§{üìS*1ÓRŸÍæ{Ü»£¿åØCFHäéBæU\ËÞ ,(UkÖ–†Í®–!c'¨_wý¶Å;ݘ÷§ïÖÊȽ¤«Ú2 Ã2ãù±¢yÜòöÄ'dp÷–ê½1ïü/Ë­mëIBÜÅlß§ŒGrÉÐz$eLã½yºf™_ ðÝk¦b·þôkl·a­ƒø¯¿¹NÞº8çèÒÉ -›/g½ ™.FgN”å g«Ï«×©ï½ú6¢üùóK—ž}¥A³ràï]òüˆû¤ñÕm¤ç-wʲùÿ•­ÿûNš¶j§–ùjÙbéÐýµL˜±t³´¬3-­ÒB\qfœ&þƒåwÞ Ù‘ž Bò˜ 9²9à [ûî‹åÒ£q%õw©2ådøS“¤Aãærøà~oŽz5¾ª•* šîèÞ)[^îÛ-í®í!W\ÙJV-ž+W¶n/¿mÙ(ÿîß#Ýošžíû“•JKÃ1 I¤´4Þ,­eþwªèÙ†-ŠåÑ‚‹!„-KiÚ¢­Ü?ê))Z¢¤/YÚ{“«·5BSŸÎ›)+Í“Cÿì—„¸8IHHQÓzÝ2P&Ž&gN“µKIͺ ¥V½†‘®a™"|ÁJËÌígâÛõëóëܨl„d­ ýzKl¶WÌ“|µ¹¸\.Uˆwv‡õR¨p©^»nêi¦ã¯?®—ižQ¦J‡ëzJlþürSÛFÞ~•v]ºÉ[ÅJÈÚe‹ä›ÕËäî‡FEdf¤–Á…Ó+NY‘ø‘îs4ù?-˜`…èȼáÊä‰K{ÄHÅŠ±âp8TÁTTTTò9§ñ©!$Ou[.vhŽìþ-kFHÑ¿[Äë…KÔû‚ Êñ#ÿʺ ;uâ˜wYG´SzÞ|»Ì}gšÄëîíšëûdÿ¾„£ †(JÁÆ7ËŽCé ²­P2ý¹1ëà !™ìÐÂR­sÀ¡ùÛn”©1nѶ£\ß÷6™üÄ£ê³NÝzIçî½½ ôºy€ÌžþªtéÑGŠ)B1K£Ëʬy2EÈB?JnÌn;.¶O„¤­mÑ4c{q˜JtrA¬1ÖívïÊîŠ9èrµ"ö ïÞ¹]öì$oÌY,š_·…,,½¢•ódÆüžô¯;þßR±bE† !ˆŠª¡¿Ä%—„äâ2o¬ÎFÿûœ;{F^™0N6i.Mr«˜e ˜ÖÌÅL[0'–‰ó§G, !Á‰\A‹@E[ôáLùhöûR·A#yîå7"r²Â•eÉ2ZÖ×ÙúâPW–ѧ‚xøŒG’™¿Ñ\äô#6äX°B-ž‰‘&hZ–ÍÀÆ3ºž´„3Ó;àrLºcÈ‘äMËÝ!Gþ–#VÙ²ºï+[\f:+r¤Í…Ý¡°†‚FÂC ²IP²6¬ü£PÄL3‰™YÔ¬ Åd…pçZ$ŽNA#'pu}Y¬aiÞ7»q× ‹—K—.Ibb¢¸Ýnr4†If BÛ111R¨P!‰ŽŽŽ8§±‚6äËS<Iîb¦ÿ{òòKrüä))\¼¤Í—?©MK ÀhlŒaxÌŸ'ý­¥z*KÊr¾r«Ù¨/å2ï‹&\@8qB ., ˆ(QsFòÁßq¾Ï@’ëÄL½$êÎì²x©Z®¢8Bu!Ù"±|ùòÉáÇ•K‹$§ž¿iö ¼*fIÅuñ¬T¨\Í›ÕHHv [Ñ¢EåÌ™3Þ69ÚeþZ #gæm‰W"óº˜ ªã”WÑÅtM¼üqÒ£ D´!;ªê뇣¼ie‚ Y— +DÉІö×/çôÍMû5QŸ7^Vìs˸æN)©‹æ‚].¹îr‡¾¯Ióa[Í.‹Rûï÷ Ißæd½Á†€Þ¸"^û!Q~8äö»_y ˆÚ˜’œÚAœš]ÄÑ÷ÑU©¹ºy³\wÚG}$—_~y†Ö±ÿ~)_¾¼lܸ‘ Y„ ZR«˜&KE)çrAo—WísÉÍ5R¤n•õizC†|Û ¼°Ù×Á›n¨_ÄŸOj÷åt¼(g†SêÝu}¬o{¥.8êb6ñ§D9«»ŸÞUý…oþæ’SúòØÞâÝInͬ íÞ³õý=B¼á&¯¯œ´Ÿ=«D©õ­=à?´ˆú½è‘&¥5)«É†ÃnUgû•9Ÿ‚,cÛ„°_iø<ËÜ~ÛmR­jUÙ±c‡ÏçÓ§O—V­ZåªïàÙgŸ•ûî»/è|+W®”?ÿü“¢FAË]Ü’,^w‘Ÿ“³¯.%U 'µ—å×äŸó)_üዾ v°éÁ(§»£ƒ¦åÑ þ{Á#åü$§x”p¤Ì‘)•OKÕ–Á%¢_kùõ1²±o¬|Ú=©•uè3^Ð5wéß.oŸOÏ*¿¡R3w­Mç<2£C´Z_«²<Í ZèçÌ´vÑúÅF¢ÌüÃòrZµ,½ÄÅÅÉ~X ¤››i×®tïÞ=àýôSõy¿~ýdðàÁÞùyäæû÷ßÕßÛ¶mSoÙ²Åg})b=O?ý´4iÒD6l(#GŽ” ìOî5kÖÈõ×_/5kÖ” Èc=¦ÄçñÇ—«¯¾Z½7˜2eŠÔ©SG µ™%K–ÈܹsÕ{ì/ö§FjÞþýûË¡C‡T8 C† Qõ6ö“.-|á“BB §Þ˜Ã}¸Ã%q¦vá¹ÿÓáU]èVíw+'óó1·jÐï¬ã{hƒM77@A€³ûH–ÿ«ç”ßOºe÷Jâ(£Ég{ü7Œcš:eƶDÕ÷…þš;SÏ‹úD}çÜR£¨¦úúÌì:í‘MGÜòHc‡J@ùëLàÂ5¨ŽCÖrËI½ 9›ÒˆÚí×ÅÄÙí–¡ EºWv¨¤ ˆÃ3W9Å©·@KþvÉŽS)°éfð1OŸaW8å~]iú¯N™ºTÂÅ#œJÈvžvË}_'…öì@&â¾³å`×釯Ôʬí.©WB“Ù]bTFâ»zc[·„o :_Ó—ZEë5xCŒÚàfëAµ£‹Û½|— —\öûu11oô¤á‚¨Û²xÕ™!ó§i?ü¸Ù'yäj]à6nÚœœñšwÓ,a¶ƒ)zøá‡åóÏ?÷½0[µJŽ;&“&M’bÅŠ)Á›={¶7ˆÌøñãå·ß~“S§NÉùóçeÀ€²|ùr%hëÖ­“:øA® ‚‡rë­·Ê‚ l ýyFŸ^íÚµ•{Ú½{·r—øüÃ?T‚†={öÈŒ3î… dýúõÊyvíÚUš6mšE)^\½b°KÔ‰PÐr}VÄÛ~ŽÄ†¦¥„2ÊþÌöë€ 4ÝÊó›U13c›K•P@ØK?'ê%õ´Ou1E1\ÓÝk|¦ÏÝá» $wœ×«²r_ÊçèÏk8?e߯[šrŒ ´iÙ¯¼BZÄ,ñ±Þ,­1-¡É)/¿,tÇõúë¯{yÿüór`Í›7÷~†!ñ9Ä­\¹ròý÷ßËÞ½{•¸ ŸjÖ¬Yjl- ÜŽ½xkJ Ê”)#Gµ uÁ…!\'‡P"žoôù ÒÅxèСJt?þøc¾DÁ¼þ˜0a‚r–p¥_6,¤„BA#ÙDftS¡Ï éû¸ÿ "w1‘Ç5Ç¿K-c}h¡ž'&dÂ5ÝvÛmÞÏá†0à#ÂsÆÀÀ=8#Úï¿ÿ.>ú¨ Ù!ì!ƒøÀ¡Ù:{]¸<(+VTÃYAÔ¬÷9ÁI¡¯ì•W^‘ž={ªðãW\áŽÐ ÜBË–-“Ñ£G=Xê GŠåðо9ô箕DL !þÝT §Lo­Rïßúj–BÈt¥'“?-Ü|óÍÒ¹sg™3gŽ÷³k¯½V åĉªÏiëÖ­rüøq5ýhèWƒ»BøCtéÒEæÍ›§úÎ…îà°.„91?ú¾¬‰"è_C² „nÌ{…îtª0'œ%ÔnVÞyç%ÂHøBD!biô›¡_!M¸LBA#٠‰Äex=·‘ W}'c7$MÕ'9oÁñúÏ2ô•aäb4ø .T#C8n¸áyë­·$!!ÁëÐ Hð0Ä ÂÖ©S'¿ÛAÒK2DØï¦›nR®É Ž”pcGŽ‘Þ½{û̃z>}Zõ©¡¾Á€0>øàƒ*«Ñ;¶mÛVM{î¹çT’ dxSvü,´$Oâ0•èä‚Ô XýÝ••²>? ? 8‡xýØ—ÉŽóø ’ÈÅ:RjÜ.ñè%áø?òóк¾ú¥™nõÐ §ùü2¯˜§Z>Où$ÐØÙuwÒöGŒ!ûöíË”õá¾1ß'Ÿ|¢ÒøIÆŽ%ÂÀpÚ( #©ï³óÑWúvkè/qÉ%!¹¸LÅÃ>4B"ÄŒåæA>3ã>'\èÂ9" I+³¼CŽ„„±iN "z™!¢‘²‘U‰(²IüÍDjȱVíÚüöHÄ»kAú9 *W­nþ¡šÞ›EGKý™).™JèB9òýÄ ÒBŽth„D˜kK%f¹Èe’œ‘þÃ6c<3ŽHshxÔ’q^L×ׂü&Òðôýìzà1!´t€›A ‰DA³Kа† ý&‡héE† !${ÐÒ/JZ§‰°¸P2)V„’m„rß•P2ú‰ýÞ8í»”°ß,ð¼$o‘ºl(h„D†9S”MntŒüÆT‚â“@4 É…0äHH$)Z0 çïÏ@ýq~ïà&$pt!ÜF²¦C#$L¹måY’£<_+²êKA#$Œá¸ † !„PÐHÖ€Q~1€b¸0}út58#ž^n*ÜêJÉZ´0΢ …Äðó(•+W–-Z¨a*Œ‘z†¬¿ï¾û®î+W®Tbd ˜ðÜñãÇ«aéQ€!nÛ¶mãIA +؇–0ïSO=¥Æ\úóÏ?U¿jÕ*5d|éÒ¥Õˆ·)7ܨS§Žäèèè4/»sçN5ÊFÆè¿/^TëªP¡Oˆ ^å†[†!‘îÖèÐÒ@¡B…”8 Ì6pà@ùì³ÏäÔ©SòÚk¯©éK–,‘¹sçª÷çΓaÆI½zõ¤zõêrÝu×Éÿþ÷?5 ËÃõ`ˆøš5kªáÝ1Ì»»wïVÛjРš÷öÛoWÃÎCD!*{öìñλ~ýzå 7mÚ䳄 _zé%ïߨ>Üåõ×_/5jÔV­ZɧŸ~šjÛICÓ¢ˆzbèžW_}UÕËŽåË—K§NT]{õê%¿þú«í|p|wÞy§ôïß_ªV­*Mš4‘÷Þ{Ožy浯µk×VÛ†# tŒzâbb̘1Ò¬Y3µì=÷Ü£¾€u`DdLö°æc„‡ZßqÇR«V-¹òÊ+U=p÷ï߯¦ãâ¥oß¾j:¶c>VØÇ\{ì1u,ñJ¡ E¸³¾sçβnݺTÓÞ}÷]Ù°aƒÌ›7O–-[¦à*Uªx§ÏŸ?_ž{î9ùñÇ•  q7h3E‹•úõëˇ~( .T+‰'´cýü±jt1Zo0-Z$ãÆ“ŸþY¹/4Ìpžfzöì©Â¨†(b™@lÙ²E,7Þx£ûJ•*):þ¼íü«W¯–[n¹E~ùåUˆìßÿ-_}õ•º8€û]°`AÀã`°k×.5ŽÖ¹bÅ µ_Æ ±±±R¦LuáñÅ_H©R¥dÔ¨QÞe&>tèºyùå—eÖ¬YÞi¸0è–,YR ¾Çx@¶nÝêËAè!„øIhô®ê­ýcy -\@CyòäÉTŸÃ=8qB‰„ ;æõþ˜{÷–¦M›J±bÅ”³@ÿ[+hHG­ú­7n,­[·VnÅétªÐ| zŠP \Û­·ÞR½ážàÔà:ûôé£\ŒÕuåÏŸ_MÅ‹W!Ç@@làH‡*uëÖUÎåðáÃòÃ?ØÎñŶ .¬F6Äá[,Wˆg ã`"…ùªU«¦ú8ÿøãï´‘#Gªeà¢pìÿúë/õù¾}û”[úq!жm[%îÕcǎɤI“TP?¸<³K+X° 3„¤ksàÙL£SÅ(YÕ3Fœl¥Hˆ°-ƒ ,…ØJ¿~ýÔëÛo¿-'NTŽ "J”(á# ¸+EÂYÀ‘À-@¼àèÀ€”KùòË/• ]ºtÉ»ÝP„ØÀè[‹Ïб€KA=!ÖÏí07Œ†k§÷äÔEÛ¨S ã ®Ì¢¢|Ö‡}2–…hM˜0A ÂXý‚À8æp“¡×\wôu™]/޳yŸ ¼ééŸ$ÙuÊ#‹þrI¢›Ç‚Pв8„µkת0›4¤èÓˆÀ)Bh€FÅúpPˆœÂrï¼óŽrspFßÖ×­[7jDãݵkW¡ DVtæ¢þpPÓ¦MóùÜ_Œ¡Üƒì8ÛŸÿüç?ÊÂU¡olöìÙòÄOøûÁƒ•cpd˜b…0¦Y´ (JŒ#ûê;¤ou‡”ȧɑ ™µÝ%ówºdcßX™º5Qæít©ùê—Ðdþµ1ÒgE¼ì:í‘ñW;¥HŒ&ý+h\*JÜùôo·ZÆpZÃ:¥RaMÎÄ{䛃nyjcÒ´x]¬F5qJ¯ªµüúCnyúÇ9«_‹4)%ê˽ý»KÊÔ”[{ã×Dé^Ù!åô¿wê‚÷ì¦ùódRrM¢šŒmæ”z%¢äèE¼©Ï»bÕ0/A3ŸÐÇ„tuô™¡ÑFØ)ü±YA¿B€=4x111>Ym˜þÉ'Ÿ¨¤ „»àÒ®½öZŸuÀI ‰o4ÈkÖ¬ñ™gРAª>p0Aæ$pŒè[Zºt©œ={V…\Q¯P…Ë¡‡@ Ç¢0ƒøþœ;ïCÓ·‹Îù¸ä’\\¦âaZ‘Ñ›jzC_úƒ.\¸ B$} ½Y©ÈŽDxrÊ”)* $+Å,ùYwdCÖ¹¥œ.([:•¸Ü© œ›9Ó°tþ´5b‡tCŸÙd]Ȇ7rÊkm£¥Í⸔ßB&ÔýÐQõ¼eu¼OÉ…Džßy Z„‚ûÂCCŒÐe¨É ĤåãkôÓÁñâï¼DÝâšÔ/%[»Å¥ ÂyýÚ·`rÌ_gÜÒ¾|”,Ûã–z‹qgÐÃxè#¤ÏGvR×°³ Y3èWÿ¸ä?qÝa:åÃ.•˜R¹°&»ÏxäØ%žß4’¥b”Q¬€›IÆAŸšµ_-¯áÒmR¿ê•qƒó˱”LÄç7'ʸæÑòE¯Õöù^·4-b$B’NÕvJŒ.n{Îzä‘ïä’+së¾»{¾J‘òfûh%¤öÈ3›nÌK°"Üúбi}hÌr$„’+  B¡ B!4B!A8RMA#„B‡Fá•0á9Žð>4B¤HÏé’O¢£þ¤Mg !¢x’@à©={"ëY˜th„„Á°Y\ðCÕœ>}:ðrY±b…rÝ[¶l‘²e˪uC0q¡Ð­[7ï±ÉÎYÔÔ•grÃbçèèÌHzÏ7«HÙ]PY!Ç\ÂòåËU’2€J–,©û¦M›ª>\õ¿ÿþûêoZ²d‰WÐ "h`A÷îÝÕ(É ³téÒªÀ! # A…=ôÐCêo¸Âï¿ÿ^fÍš¥Ä /\¸P Òúõë•@èV­Z¥Äâ1­[·®Ñâf4¤„/^Ü+æÁA!O<ñ„÷oˆ,Ömô>÷Üsê8àóG}T}†~©+®¸B½‡Sƒ íâJËAаov‚ ~¨Ê­·ÞªÖm'h·ß~»Ï{„M1ºt«V­äÃ?TõÇö÷ìÙ£„8Ç®¶k×®ÞïÎ86È4ÌÎS­á£Q±kPìB@4’‘У¨™]Z¸»3 ZA( æ³Ï>“wÞyG €3peÆ—ð_Ñ¢E½ËB´ Œ«n£áT_„Þø™lXŸ5»á<#¼ yþùçeüøñªñGƒ±€Ó@£†¿ .]ºä­_( ìgÆZœÜó:/»ì2Ÿý@h¯æ}Åñð÷ã‚ø”)SFŽ=šªq†+F÷‹/¾#GŽxÓÙ0ã Aƒ”«„ Cô±({L˜0A]X ¿ aSˆ0.2rª‘1öÇûew•ìï ›Ì¸2_PER¨‘‚–pÅ'…¾!ˆBV!–+WNM饗T_¹ñ·{ ¬®Á œúsœÞ³Ï>« Ü„ `:Ü„ ¯ „>H¤!@Á™EB1ëØ±c¦4ªhÄ<è _ÂYAÔ¬ë„ðÀ•"ä‰0/Fë6‹¡A¸)„ч‡pd0Å— ‰åðŠuß¡¹O.;s½µq1Š¿¤B2êÔÌÂ)bFAK' Ê€äË/¿”.]º¨¾.$-Œ;V9„!ÑàTªT)Í뇻ñÆU2úÙ~úé'%Rè{p4[Â¥á„C¢À¼hÔÑw…~0Ôs÷îÝ*ÜivQi}Z¯¿þºr;X 0H¦È,à†®1æÍ›§¶iåüùóÞÎêíÛ·«¤ŸYŸ†ïuE_¢Þ \6úã ¦p•øÁBÄp€P,úõªEŸD6»EͲ šÕÙ’^!³sk‘äÌ(hY‚2ô7!© é /¼ <òˆ {!,‡+þô€„„·ß~[5Ú¯½öš ùÁ…™iˆ²ш 2\ ²'ñ9v„"'OžœîýDR 2±}<Š ¢ƒhf€¤ $­ d1¹é¦›¼}sf DÈâ AGxñ×_õ™û 1Çq±.:ƒ—!X;âÖ €¾B„$q!u¢O4'«¨ErcC"Gè"õüÒ´¤Ú¢8L%:¹ E,Vohveg¥Ì÷Ü W„¼G"¤í1BöíÛ—)ëƒsC(B4þHag\YS¨­ !Y)há‚~þ×Ð_â’KBrq™Š‡ä(™.Ãî£CŸ&brƒ˜YÝ™¿ÇQÐHV [$ž[4ñà4ܨŽþ.$äæ«æH{r‰ìs.ëÎ#!áB¨HX±»Á•‚Fòš1äHH.kp(h„=B!4B!„‚F!„PÐ!„ !„ !„BA#„B(h„BBd $pnܸ1Ë·…qÅ0„ "½æšk²}¼¬ìØW<©ß:ªw 0/– Çï‹BAËV0þ8ŒÖ¢E õt÷ãÇgú¶ðäxÉgÅøj„ Zž¥}ûö²víZ5ˆ&¾\¹r¥tëÖMŽ=š©ÛY¾|y†mÇŽÒ¦M©[·®4mÚ”_œ…víÚ©¿ !´ƒXÏŸ?ß».,sçwJÿþý¥jÕªÒ¤I5D FÃF0ÚÁƒ>¨FÅê‰ãÒ²eK5‚6FÞ´i“w:ŽÑðáÃÕ6P—~ýú©‘vïÞ­Ž3¶‡ån¿ýv9räHÐí]¼xQíãW\¡Öùüóϋәòî%K–¨ãlˆß¾}Õvña1⸕?þX9sOBHx§íg€råÊIçÎeݺuêï3fÈ[o½%¯¾úª“GyD Ã|jÙ¡C‡ªap0 :Ä¡X±b2hÐ ùõ×_Õ:!8FCìoþûï¿ß»Îèèh™={¶j !ª#GŽ”Â… «F xÛ¶m•(•-[Võ Ý{ï½2f̵›7oVBZ°`AéÙ³§ZßêÕ«å7ÞPâˆ}BˆõÚk¯•¯¾úJ5ú˜oÁ‚Jt1mÚ4ulþ„p .ì#†G2dˆüûï¿òâ‹/ªúÂñb¸”¢E‹JýúõåÑGUý€÷ÜsªÇ„ nâ‰Q«ñŠï¯þ„û”/_>Y±b…œ={V] ”*UJõ¡,]ºTÕûѵkWžø„PÐr'eÊ”‘ï¾ûN½Ÿ3gŽÜzë­* :¢óçÏû,ƒÆ¡Ë÷ßß„8À9@ òçϯ„¬D‰!ÍoË`ü,¬ÃX@¨ f=±Å€˜=ôúÂñý÷ßˬY³¼‚V«V-•\¢Ãà™p¥K—VŽfçÎAD}½{÷V?÷Üs*¬ŠÏo¹åùöÛo•PwéÒÅg¹’%K*‘5hݺµrmÁ€˜a{Æ÷„8ÛQ¡BY¿~½üùçŸJ¬¬!ZÔ BQ4Ž !„‚–+Á•<wõßÿþW>üðCõ7BààÁƒÊ`>CðŒ„ „ áHìHëüv@| 13ÖiÍDHí—_~ñþmì€H‚âÅ‹§œ<ºèÆÇÇݶu[p_|±v‹„s!6çÎS¡ËV­ZÝÞáÇվ˜´¿Äˆ„zܸq*L‰°®9aÛ‡;„“$„PÐr-p pNƒV#¼…>©»ï¾;• 8tèO ^zé%ÕÇcnè Ї”–ùƒa’y 3{÷îUûžõ!NsB1ëØ±£r¸Æ…yrôƒ!” ÷Î;ï¨ð*„}‰Á€™¨þn]€“E8¡áE‹©WôÙUªTIMå•WäË/¿TÛ^µj•\vÙe<ñ S˜’N¿mÛ6Õ÷ƒ0’àVwÜq‡,^¼X~úé'Õ CÄ6lØà㌠C¿ÕôéÓ•ˆ`^ˆ£¾C#Ï‘8í›?= $÷Ûo¿©P¶¾7ô# 0 Ó„ ®¡@l n„¾>83$ÙÀ)á¸bŸ‘á 7ŠP)æýôÓOeÍš5!mß Â¿è;DäÓO?íw^ˆ%B­¸w¯H‘"ÊÉ™/&pìÑ·‡iïZq!th B`p`±±±JÈÐøCÌýpWƒûÀà8à*Œ~#+¯¿þº¼ð ª/ h8á&à í‡~,8ƒ@ó§ˆÈÛo¿-S¦LQa5Ëøñã½}f™ nq€`ý¸?áÏyóæyÂHèàXB¬‘ y×]w©¾6$ ïõEòH(7:#!Ê#F¨íâxâ;òDâËÉ“'Õ…ÂŽHž1;Ê ¨ÄôÉ!c‚L ?4-©sÅa*ÑÉ%E¿bÝ••2ÂCx5 ®šQÐ@!œdO’Ù¾}»ê»C¸J(ø¹%ùÌEòúù_C‰K. ÉÅe*† !„äÑã! „BA#„B(h„BB¡ B¡ B!4B!$«ÈUO 1tKH¤a<¯“BAc£@!y† !„PÐ!„ !„BA#„B(h„B(h„BB¡ B!´\Äå—_.}ôD’˜˜Èƒ@-ç¹í¶Û¤|ùò>åî»ïÎÑ:=ûì³rß}÷ñˉ<tîÜY>ùä B²'Aè´nÝZžxâ ïßE‹ÍÑú´k×NNŸ>Í/&Ð4Mž|òI;v¬ú»OŸ><(„PÐrŽbÅŠI£FR}~ÕUWÉu×]'[¶l‘?ÿüS.»ì2=z´ôîÝ[MG¨éõ×_—… ª(W®\YþûßÿJÅŠÕç!;vLêÖ­+ãÆ“æÍ›«å.^¼¨\ØçŸ.‡Cúõë'NgÊW¶dɵ>lë˜6mš´jÕJ¾øâ 9wiÓF¦L™¢ê fÍš%Ó§O—#GŽ(q† c½¯¼ò ¿Ül K—.ê•¢FHÖÀc&±hÑ"%F?ÿü³ÜtÓMòðÃË™3gÔ´7ÞxCÞzë-:t¨µ{ï½Wõ…A€f̘!cÆŒQâÔ°aCéß¿¿8p@-7uêT¢š4i’À;vH\\œß:ìÚµK\.—¬^½ZV¬X¡êòæ›oªiëÖ­“Ç{L $Ÿ}ö™ÚêL²_Ôžþyyá…~$„‚–sÀ)™ûÐàv zõ꥜Z¡B…Ô•7„g÷îÝjÚüùóeÀ€ªî ¯pF ,Pïá°êׯ/Ï=÷œ)RD}Ðàaz·nÝ”3œ0aBÐ:Ž5JJ–,)ÕªU“-ZÈü¡>_¼x±ZÇý÷߯¶5räH©R¥ ¿ÔçHTT”œ={–ƒL„!Ç4жm[å ʖ-ë}_¦Lïûèèhõ¯^<¨™•þùÇçs4r*TPŸƒÃ‡«ð¤†ÇA_Œß«}ùÒ¥KûÔèáC‡¤R¥J>óÛÕ‰d-6lPîýò€BAËàžànì$4»ýû÷§ú‚hþáBˆYÇŽÕß'CÜÀñãÇU¶œ?‚ÕÁpŒè·ãr3B(hyS§NÉÖ­[½#©"”°]ß¾}å½÷Þ“zõêI5TâHûöíU£†¤ôgÕªUKæÎ«¶ù˜sæÌ‘¦M›*çfq¦¬ Û›9s¦Jùæ›oT8Û&Y.D楘BA ¾ÿþ{ÕŸeеkWyÿý÷ƒ.7|øpå¾&Ož,GUý[_¢qCäøñãUú}:udÞ¼yÞ0#@d+Ž1B͇„dB¦$# I(ÈœD6d“&Mø¥fpÏ胅Ë'„dÙïLÅ©P¦\bQÜn÷®ì¾š5^¢×A4ìÃÕ®]›ß^éÔ©“tèÐÁ§_„Û·oW·v ý£(ø¹ÅJBòúù_C‰K. ÉÅe*:´<ÂÎ;Õ­¸7­xñâ*µ¡Ï§žzЇ’+  åòçÏ/7nT}h¸a}r'NT}y„BA#BW¸©›Br+¼±šBB¡ B!4B!„‚F!$qYŽn$ÅØ`„D"|¦&!yPÐØ(B±#bBŽ|ÄÉËðü'$ !„BA#„BA#„B(h„L…}i„PÐ!„PÐxJ'„PÐ!„ É8>}úHõêÕåšk®ÇÃB¡ åe0Úó 7Ü 5kÖ”:uêÈõ×_/ëÖ­Ëöz<ûì³rß}÷…<ÿË/¿,§OŸ–e˖ɤI“¦"„äZ8bu\¸pAn¿ýviÛ¶­|ðÁ'›7o–R¥Je{]Úµk§*TvìØ!mÚ´‘ºuëò‹$„Сåu:$çÏŸ—»îºKZ¶l):tG}Têׯ¯¦Ÿ8qB†.7– ÈàÁƒ½JÞ¿¿”/_^¦NªÄ¡¿=zȶmÛ¼ëǼwÜq‡ÔªUK®¼òJyï½÷Ô2XÖÊ’%KdîܹêýG}¤Ö9fÌiÖ¬™Ô®][î¹ç9uê”$$$¨ílÙ²EÞ}÷]µ¾•+W¬+!„PÐr9•+WVâõÄOÈ—_~).—Ëgú!Cä×_•7ß|S98ˆÆ€$11Ñ;Ïš5kÔ´üQŠ+&£GöNC¢ ¡BˆpÖ¬Y!×m×®]ª>«W¯–+VÈÏ?ÿ¬ê-³gÏV"7hÐ ùí·ß¤sçÎ!Õ•B(h¹‡Ã!‹-’öíÛËСC¥yóæJÜn·üóÏ?òí·ßÊØ±c¥U«VÒ´iS™8q¢üñÇJ¼ à„ªT©"%J”îÝ»«é`ß¾}²iÓ&%pX/š?üpšê7jÔ()Y²¤T«VMZ´há]7¶…ºçÏŸ_½?räHHu%„ Z.¦H‘"*!cëÖ­J|दM›¦ \~ùåÞy+Uª¤^i lÙ²Þ÷pOñññê=œ™yP±bÅпÀ¨()]º´íº­„ZWB¡ åbccå–[nQ}Wp5Ælæþ®½{÷ªWô[øË.,S¦Œz=xð ÷³cÇŽ…\Ÿ´d-†ZWB‰D˜å "T‡œBtøÉp;H™0a‚ í¡Œ?Þ›àa80  “'OV}kèËzõÕW³d?‚Õ•BèÐr9hø‘Ôäo¼QõŸ¡/íPÓñw£FT†áÀ•0Í™3G…ÿBaÆŒR¼xqéׯŸÚ„3­î+T2ZWB W4-©ÕDq˜Jtr‰Eq»Ý»²»bx¢…µ ›O¿@ö^nåóÏ?WI$È`,P ÏÒ<ÊöíÛU*{PðSEŸ©q±Ã›äIžr_QQ5ô—¸ä’\\¦âaÈ1 €kªP¡‚ÊRÄýnS¦LQ3B  Z˜€ÇRáç‚ ÊUW]%Ï<ó  !„¤† Sr$$…PBŽL !$ü¯:y Eôx!„PÐx¥JÏyB(héý |˜.ÉÍàüÆyNÉE‚fíüÆ{ÜŒ1ÊÉ­àüމ‰¡[#$·;´B… ÉáÇS ãBHnç5™†[8(b„äA³sfÆ+®\qÓñÎ;½ƒYéà<ÆùŒóbf84»ß…ŽÔDÔÕæ1~ð¸'N-..Nõ9˜ïY³b÷YV]Û!Ywneçv qBq:j4<Ï¥p’  ?j…ñ‡apMüø1p%B4˜ŽÏ Qñ',.‚iŽ:àœ6^‘ büm5Š!,hÆØ3€:þÆÞ,Næy¬ŸSÐH¸ š5„h˜!fF±5 !êÐ쳨?pk¸‘BFÂý|¶Š”qnri„4»¿ùyv3ZŸùh„ãšUÐÌ¢fvitg„äA30úÏÌ}ÁÜ!‘p¡f¾`c¨‘<àÐ V†¨Ù…éÈH¤;5»HÅŒ\$hv¢fˆ–ÙÁY¡°‘p2;·FgFH.4«¨Y;ØíÄ‹‰4¡£˜’G-=¢FH¤ !$— šÝÝ~$$ÒÏkžÇ„ä!A³:26$·95BH4sÀP#¡BAcƒ@!$â‰â! „BA#„B(h„BB¡ B¡ B!4B!„‚F!„PÐ!„PÐ!„ !„BA#„B(h„B(h„BB¡ B!4B!4B!$— š'¹B!9IP=¢C#„’+Ý!„Hrm¶‚æ±±v 9B ñ²Ó%?‡f·›Ç‘BHãf¶…½ ¹Ýîs<–„BrDÉÜî ÁÜY( Šè>{öì÷<¤„Br]ƒ¾5ô(T‡æûp£{áÂ…“u…<ÃÃJ!$›ÝÙhAó6‡¦iÆ{Í_Yºté©’%K®­U«VÙØØØ²ú21<Ì„B²PÈΟ:uêë÷Þ{oøƒ>¸]ÿ(Q/.SI%nZ² â•\ÉÅ™\¢M¯S1æ7–'„BÒŠOTÐ"\ Ébf¼&ZDÍ+lN?+õ˜Vj+ i4B!™ hAsÙˆ˜m?šÓÏŠT}-yb£žQ&Wg3 !„P…̪=þœšÙ‘¹Å&)ÄdÅvvÐ3F!$=‚f =š…ÍíÇ¡y¬‚æß°¢1ƒÛò™1ÜH!$3ÄÍDØü…=V‡f6óŒn‹k³&PÐ!„d– ‰EÐìÞ{lžh¦´}±ˆ”H€T~›y !„ŒŠš?·æOÌ<þÍŸ¨‰cß!„Ì2ñ#XžÓ$ *®ŒbF!$³DÍŸhyÌïWÐ Å‹BHNˆœ¿ÏÎt¬ŒBÉ)AóËÿ 0‚«Ç7Sö*IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/ask.png000664 000000 000000 00000026450 13703317554 026111 0ustar00rootroot000000 000000 ‰PNG  IHDRŽ«q{MtEXtSoftwareAdobe ImageReadyqÉe<(iTXtXML:com.adobe.xmp ÷î)L)–IDATxÚìxÕÞ‡»›B©¤QB I j¨RBoÒ¤½úéUô"pÅ®HET@ -t*A¤é$ @¤—Ýùf6Ù°Ùìn²e“üÞ<çÙÍÌ™rÎΞwþçÌÌÊd2 !B‰i2c B©pz{cM}i•q!„ ìŽ2N3*Y)ïe” !„T Iz¦ Æ¢O2#¯2#¡<!¤âHCÐó*™gP†da(Q„Rq"”’ôÊC[Æd!7ð^7!„bþÒЇÊÀ{½Ñ‡æ]QÈAp_ÅdS8BHÅGE–˜RD¤þ¯+’bÂшC7zk½*Di¸;6äƒ>ø———W˜B¡°c]BHÅG©Tfܽ{÷ÈŒ3DEEpOš¬%•nԡЇn×”F‘‘‘--Z´ÌÉÉ)X.—[±ª !¤r µéÕ«W÷íÓ§O„$'Nܽgl™q¨…¡%Žš·nÝúºV­ZYÅ„Ry‰‹‹ÛW»ví—E/ÜÖŠ:”:Q‡ +¹–8¤d!ŠÃ7??ÿ »§!¤r£R©2Ŷ¾½è…kâ¿ù…ÒЈ£Hڃ܆º«ä”!„T~är¹­Nû¯ïŒ—ÖBW¬JB©zÑ‘G±ÃXÄ!£8!¤ÊŠCf,âÐ…â „ Æwß}‡õë×ë÷Í7ß`Æ #Ž3u¥¡+B!fNŸ>}UB’4öíÛ‡.]º˜²:}C(kÄAqBHÀÛÛ‹/.&4-ZggçòˆC¯d…×ãJIs˜, “• žb:Î…BÌŸ;wî 22þþþ¸{÷®ÉÒ•*¦xñm®˜ò “ti®æžÁXW!„ ytèÐDDD„©‘†±¤~BH%Bêž:vìV®\©74`þ8X˜bB!æ- í1 iÌCê¶’2dH¹# ]qBH%@××0ß¾}ûÛ–îà¸&iÇ­Aðàà8!„˜7×®]S Cߘ†4`.—ËáééY)Hƒã âÛ<Wj%â „b’8ØUE!Ä$(B!!„ŠƒBÅA!„â „BqB!!„ŠƒBÅA!„â fEÞx+жNnpsu‡_kŒøl?îI?×’±ƒœz!*Y¨Xeª¨û]ARÖb˜ÿP¬NbýR¤ê¢ðÇ+»ã‘˜tW~…Ì/ŸÇ;»3Y/D/2§.˜5Ý\ø‹ !PÀ±ñóú1W“Ô¿Y5£°óø$¼–ÜãµÞú¹¡Qû†p¥7(B¤ŸN>…µÇk!¬¥‡Î! åùx¾u0üàÜŸAºzž—¢Æ#¼q‚ë!@œ71:Fý8Máá1|5²‚ýàW×õZ½ŒMwU¥¬Ok«¹¼ñ|Ò¼¯0¶?<ÝÜàæQ#WBÔ„aøüð>ÌìÐÍþµišU)¯`v»:½åAÑÚÓ¶ŽEí°OpQ©Äÿ½‹~M|P³VMÔi©ÛoüHóõ/î5;s Ê݉ñ^áøâºXŽœmã?߬~ á>ÕQ½ûw¸SÌW†×‹+1 î@¼ýV/„ø×„»wc<÷ÅQ<J)·Þmø •1X¦[źKÙ?¿ç0í?½PèùÑA¤ÒÇ•$ô,@.&K1U“˜œÄTCLµÄ,ÍR9É=,L©g%Ø8º ®.®BÍÆÂë«.Ò¼ôÕÂ@Çai’JP¥nÆ7ì%|u!]P‰³òã7 £ýš ïÉW¯&óÖ%áÚC¥ú}Ωÿ Mý^öç BÖÆa‚KøÂuõ¬:xuÄ*åµyB{ÏqÂŽœÂÕäìÆy¶æ] •½Uåd#ø ùJ8t;CÈS*‹oÑÈz…ÔB_W¡×7W…lé3¸0_èæÞDx÷tžñú1°MCŸa‰úЮßR÷ÏIxvþuýæ\œ%´sê!,‰Wñ{gæHm¾Ôö:À©Ð Õ !¹BfAuVõ*iŒã,>kiøPÈ;¾»®Ãþͱ@3ÑÊn Jñ”:§¶ÌÇ'ëÿDºÂŠÜ8ÜLi‰‡â µux$^þzzv=‹á£ŸÇÈAá/Oº­Oýs0”kyÿ²íwÞ½Ÿð‹ëPlïW6Òt;w¸«ÏÈ žbÁcÀ$ôxמּ> ¯ZoÄòßC1æë:È;¼‡ü‡á‹0'u¤æÐ4£C>Ãæƒ©˜^ZýaÌŒÉhí­(1+çˆáõ¾Ô_œ`Šþƒüa-e®?χÍÀÊ£IÈM4R?Az¶©J4ø£ôýkÁCƒ ê׿Bœ7â~ЏR¿wŠƒ”ŽJY­1ˆ>7 a:GLÆö)ò­¢=€Îr¨bç ¼õ™ÂîðÎxÿçóxõÏ=X·t">˜‡)»6c´‘õkªË³|FÙö;w· *é÷ËLé«·ïŒIÃÿƒÈågá´ ç:½Š~î…+C¾QÏ+š«ÌBf®V^¹\œŒì„`¬oGŠX,«úwÙŒÕONÉmfì4ü–бý“ÙÀ¶š¬¨"dá©:X†F Kz4>]riBÁxHjl,òä¦$#ÃÞžöruôq$jNç¶Ûñ—q1pk—æ,Å”ÀÃØu2ÓÈút|õ˜ËËgÙüY´KX‹…;ã ~ȹ¸„,±}³F5Ëû¸£»²‚5"d¸l…÷ÖÞB¯±=!µ¿Ö­{¡ã͵øáHªZég¾ÇòÓÍЭ½x&^ÝÎÙçpâR¶á¯Mëp°Œ­[¯º Î;†Íc ­9ëBV @Û0WX•±~4ò1ö«R÷P¤ê"sî‹ù›ß˪òö†—§/Ú¼+y28õŸŠi5¢ÐÅ/ šôÀlYts/8¬òc×`bÔñ“]»"ÊãCLïí`d}Å·û¸ËË'sŒ¯ÖŒÅƒÚÃÇÃn>í1õçd¨,ÛbÌ‹¶XÜ5M"×á¾Î µÜg"÷b}âŒîh[°aøzY_\|¹9|}}Ðpä/h¹ðLò“«÷᭷ݱª»/ê6ÇøCþèä_¶®cë-è~ª÷s/¡e@-øt‚ëŒEx½‘¢Ìõ£‰Œ}†0R¥î©¼msœSHö1Á˜á»Çg6yz}½V¢ŸÏ ùëG<_Ÿ y¢R(õ7Ç9ÆAˆ dÿs÷6ÂäÃÌ`€Pxy+y 0¦$¤,äŸÅìn赟/Àø:üê*•<½®*AçŠ AžveýŸBª€Ì·«J# éU¥R©_ÍAÚ‰!„’<ÕnZIRÚ“Û¹?›…8jYwE'Ë­ËåêD‘Bˆ™ˆCiäççãZâ^f1È' V¾›v7…‡£/ê¸ÖGýZmРf;8ظ‰„!„POAšˆ#//ÏL¤Q¸o* 枈µIÄa»PT_ §ñ G§#ѺÞT³²UKC B¡8þáˆC©Tš]¥™öê„$õHP®\…#—ãqüä¸Õ™Šþ¡¯¡g“acm_$ „RUxj×jGf'ŽÂú¢¤”!ÿžrþl‰»°xÃ<¼º¬9ŽÆìPwµ™Ëà>!„Tjqh7Ðf/­¤Ls@ιf¸~À ï­/~š€Œ¬‡”!„â¨ÊG‘@’]‘u¼-vïÛ‡iëžEâÃÛên7ʃBqP“*Oìóqî÷4L]Û·“c(BÅAq”žroøâúÖxoco$¥Ý¡<!•>äP¯8L_&÷VmܰˆÅÖðñs?ÃÎÆ¡B]®›““ƒC‡áÒ¥KHIIQOsqqAPPÚ´ikkë ý™jÊwùòe$''WºòòOòTžU¥#ÏÊsss‘™™‰Õj˜U¥D¿Ð­ÜËÚ6úýzôÅ‹¿€…… …Ù‹ãÚµkغu+üüüЬY3Ô¨QðyÜ¿'OžTÏïׯ|}}+äA~ýúulÙ²¥Ò–',>V½¼b+/™‚±Ýq9šûöD¨_¢ÍUR£¹yóf 0@ݰjS«V-uŠÅÆ1hР ׸JÒö}àÀË'ÕAE-!OƒJ3Æ‘¯²@zŽãGy“4`žq¾>–ìY9f}™®Ô}#Eú¤¡¿¿¿:tÖ.-S&T×0·5,mìao_˜ªâß¿æ®÷”µæ?«“„'V>iŸõICiž”Ǥò)ÿÄûM­ ð‡íé:óÒ¶a¬‡V¡㢲ìå*oùŸt½ReÄácÛÿ ¼ 6Ô_¤Ç‡”òqóÒCì>÷}Ñ@¹9òûï¿«¥`¬QÕ–‡”O'({Ìë„듞ž^^ÁÜpK#Ù»`ZÔ tsy2Ñ™´¯Ò>kÊ'ݬùå—_¢[·nê$½—¦iäarù~vÞèÿ¥j=Hùi~u ‚·Â´r•·üOºÞ©2â°¯æ o8[özìuÅ^:‡¤û ¢„”å–GfŒ/6›‹Ìì4³:¤â¦M›–9¿”WZæoCæ†FíÂUjÿòÎã“ð~Xr¯üu& ôKc.\ˆ¥K—ªÇ6¤$½—¦iòšT>QŒÝú‡à`ôNì ÷±-ú4: lK}å*kùË[o˨w³ßþÓ.#ÅaF~iú×úÊüÚµªdQ×Dyœ;q)‰÷Ê%ŽüvH¸‘‹£×¶›mÔ!]]äîî^æüÒ ²æŠ«ò£ÂµÃ> æJ_⋘۹FmŒ‡±ƒœz!êþU,›0 ŸÞ‡™¡Ù¿¶"­[’öU3.±}ûöy´§Iy5W\•16…KÄ´>º[ !ÕíÍX}¥†·µB¾&›¦\É‚ú·Âø=‡iÿé€ÚððDÏ"UÐÉ—³ÃjÀÔýѼž˜Ïë œ³ëþÓMükÂÍ=}çEºÎúó~û/Ú7nˆ† ¥ä7k Û˜U ý1Ï·†@üƒÛaÂâ3(Ö˦ŒÑSïJÜùß»è×Ä5kÕD†˜ºýÖ£²ijâá1|5²‚ýàW×õZ½ŒMq—0»]ŒÞòàQ/ÞÖ±¨ö .¤èËEÏöì·)ud¬Œ9Û0Æ ¾YýÂ}ª£z÷ïpGPâRÔx„7Bpý ˆÛƒ<åƒeº¨¤8*,Õ-jcxÝ¢<š<öSws²³ÔÑGÜõq]*“å‘ç‰_/¯Q‹ÃŸÉõ·#¤bÍ0899$ÏQؘ)‡÷s_avàrLšuÇçMÆò 9˜?ÐE'ÌŠŒYü>zTo‹™þÄÉ}á`ž„̹'†w8ƒÕ›n‹JTáÆ†5¸Ýg$ÚV3ü{àªø=8æý9ÇÜ­‘HŸý16ê9ûU%íçpðê-\ßÚ±SÇb±ç޽›;#î£ÙøIǨ–íÞÇÁ³âIÏ¹ÓØòï&pÓ{Û@x°oFîA«N &&W¼üOÇcîY­ÖNO½Ûß]Iãv¡ñ·gp+.ç—·ÇáÇá»kÅ眽s13n8v]Áµ±8¶n*:× Â¨‰Í±ÿ‡‘ OH¶å»QoÔÔýE_þÀ’Û/e¿M®#Ç–¼³7à³ÃñHþ)Þ2|º¾e¿_Ä¥‹—qaM›ñ%©ê,S‚â¨ÐxX7Ä‹õöÀ^6JÁôO3 +`e÷èÿ„;·pûÆ5“Å‘ïŠS±¿àaf²YvWI÷1Ü»w¯Ìù¥îggg“ºr†­I@jjjAŠ_A¶]+½æ|‰Ðu=Ñ}usÌÿ¬;þŽîyi_¥}Öлwïy´§Iy¥:1ñTÝFvÃÕ5p3÷2Ö®}ˆÛÃÒØ"–-0xh0lÄ·Vþ-✂û)zN,,CÐH}HUfÛ8ÏØ7EÿÁÁêÿíµD‹$¥ z…öà·>ÏŸ¬x ­ÅÀîøìº~ ó4Gýà`4è0G¬Ä| ÆO“sŽìÁ!ÿaæ$6284ÄèãØu0µ˜­Ã#ñ²Å×èÙuÞ:ˆ$çšp’Éà1`zœ_ŠÕ×E­Þو忇bÌ:°Ñ›_O¯Riû]î:ÒA„13&£µ·-,¤û¯T‰8µe>^íÓºtEÄ+kq3%U†ËT•de 9ͳ•×À8ÿ häðr•V&­Å¿Ðþ Q@ ‹Ë#5)Ñ´+¬òeÈI´ÇåøÃEâ0'¤›ßN:UæüR^i™'òIe&â~®ìòî#1óï)_°ØÐH÷ihx饗0nÜ8u—””¤÷Ò4 R^ÓË'ƒ]Çሸ½Ñ›Vb=cX£R®r—ÙÀ¶š¬hyƒWj—Ègk+­ÿ½QòÆJ¼ùúE-@?ÏÂüâñ'«5Ñç.©Ç~ÔéâIÌy¶ ß2·2·Îxÿçó88ÜÎÎBDH?,¹*6îö1iø¬X~1ëWá\§1èç.3œ¿DØUÊ~—³ŽJ¶„NpÑ2WÆÎ)ò­5ÞÜ|¿ü¼»£"Q_ó±(Ç8*(ùÈDtJ-ΙŒdÕiñ ‘£‹ÇhçºJ•i‘‡…x–2¬¸kÊ'Ýùꫯb÷îÝê$½—¦Ihò•«|6í1¼o"æ½ü=†}º]ià½áÃâ¿ÑøOsÛGÁKhº¤GãÓ%ç&|[RÅÏ´DõêÔ»uë^èxs-~8Ra¤ŸùËO7C·öNë~»Œ‹‰€[£¼4g)¦Æ®“Ò%B&L€ËÖYxoí-ôÛSY̯³ý2ï·I®/íØ¿·)ÉȰ÷„§½}¤àHÔ:œ.º’\™(Ž LRòûëî6ïY£‘‡‡s?ÛWÊq€ >ê¶ÊÍÉÆƒdӢ޼‡6¸“rÅ,»ª¤ÇlôíÛW} 1yhn”î®6éÑB*¢‡¸êÜÇ‘‰‹ "1Ûz:Ž€ï¨xÇêsD.¸„bwxX¶Å˜m±¸kšD®Ã}¡|å“öyÓ¦M¥–OÊcrùаBØðÁpÏk„áƒë>Å/•W¾y ³N§àäg}Ð<$!!-¹6pî‹ù›ß˪òö†—§/Ú¼+º·ÕèÔ{¢û0|½¬/.¾Ü¾¾>h8ò´\ø&ù/e~ìLlã:~Ò`rWDy|ˆé½ F¦ä>#¸ë`tG[ãùu·ïTÆý6…R-œúOÅ´QèâˆMz`¶¬ º¹?*³¾2U%*Í#G‚œ' ³Ë||k_¬á¯åÒ½÷C%¨°(öÈä¥÷éïX«s¶ý ³·à½“k Ô¦2G.Yhö\æ ;‚jÕªÁÒҲدššGŽH÷jH—Üò‘#ä ‡AØ6&3|wâøÌ&•äy•±LER¨âÏ$â’Îâw‹¡“ý*:ÅÕ´¯L^M GâÈÊH7)jPe+–•l–c¤uòäÉê›ß¶mÛVâ!‡Ò¼Šü@IšòI—ßê>ä°¢—ÏÜÉ:ÿæîm„ɇUš¶2–ɪD™/&®EK»OàçС\â°u}ô>OŒ’L€2_ŽÌœ‡Åº¯Ì©áìÔ©“:UF*{ùÌ’ü³˜1ó®¸ âóhŒ¯#g™(ŽŠƒÔ-v#gjX6qœ‰A,ÌËßæ U¯uiŒ7wÇàM–©ÒQÉtiøÒ†ÔÜ›ÈÒ˵ÖÌ$­ãÆÒʤÁq™\ [ëêlD!Œ8*‚`‰¤üsåZöþ¥Gï«ÙØš=Ȭra_Í™G!„âxª“tS_^¾¥xF/ÀZ‘[ê2.–ˆÉ\nò¶ò³¿?úßÎÑ*Ä¡°ÏFMçÀ ñ+€„R)Å‘gŸjиF/Ô°ñW[äfÆ)äÉî]îJÎ׈{hâUÅâºÏm%Uxg³¥•5ìMŠ8,3áé ‡&BÅñ‘—ç…!u6 ®mñ»{]­ü ¢~vÅ­äc&G’4Î?šææU«À'&ˆÃ¦F=ÂÌúW !¤RŠCzXá Ÿ ð±ió·o+v_A÷T®–‡œjxÀÖÄhC®PÁÖ#5ZP„ŠãŸÆÍªu©ÒȞȶb~.þ¿“›\ܽM¾¤Ö¶f*šúv„­Uõ"qP„ŠãÂÅÖ³Ô<ñy¿?ÑmJc.Þ&Gªû%¡µÿ õƒô$q˜Û£F!¤R‹ã~îïP" è4„ô0ã©ï>‘mIWNÙÚ;ŠÂ¨®ŽÊ# kç,Ôªg&5»A¡P°«ŠRi¨0§À³îâ·Ìñ¢<²JÎ.c[j8’Ò®=‘m¹yÕVKC¢¼¿9îÚ8½›¼k»¢ˆƒ]U„Fÿ0&DãŽãÔ±ëWE3u”q7ç ®?ØÜ¬'÷[ût;ï46ª¶~ÃÔÒÐD„BqüâSn‹i)dò¥ üßð¨Çy®”ÜJ ¯°ÛÙj™:Ú£.‰ƒ‘!„â0‰ümë~ qx…ÝAŸ¶cñŒg8¬¬¬ØME¡8ªå‡{È}„¶ @ÿÆo«¥ÁhƒBqPq­ŸŒÆì19|1l«Ù«ÿÑ!„â 8ôR£qš>kÿë´.öžjih¢ ^†K¡8(Ž"–*ÔlmêaRûEpuðRÿ®¸öØ!„P‡‡Ú¨Ý6]CṦ3agS½„4ØEE¡8(غåÀ³Y‚C<0¬ÅR»·S CêžÒ7Wiäççcÿþý8sæ ÒÒÒŒ ÒÁMš4AÇŽÕB$„¶e‡ÜB€SÝt¸>DÝúNèÑðm„Õ\4. Ci˜»4$$iÄÇÇã…^€£££Ñ¼<À¶mÛÔËtíÚ•!„âÐG5§\X;åÁÆ%^YbÊES¿NhY·?xtF5+Û"Yh„Q‘º§¤H£,ÒòôéÓK–,¡8!O_šFV¥’ž«2‹ Q rt›\ žŽÏ¨¹Ïϵ9|œBÔF—ä uEi’FÚ©cR÷TY¤¡-Òº´ÔäŸÆ›†á» ¥8½~¼ «ByéS´{î!¾:ù1B+À©Š…Þ~;1.a[ÿƒÛMY‹á¡›Ðïè w娡8ôJCBjp0w³ö@ø;žbÊ>‰^V]ñVçÕ2ÐNIhËB÷r[„K¨3„ƒÓ0}g,éåÖˆ ÇŸSL‹joÖ¡8 ŠCjt¥Æ··ã×ÈÎÎVÚ*•ʧ¾?1hºŸt%¢ùm Cßõ &¾íeS>ÀÁónÏ*)ûAè†FíÝXÄüÏŸv´!uùH̶¶¶êdooÿT’]‰¤Ù'í«¦tÀ) Ýþ–\8D|Œ™~kñúç']2Rþ˜ç[Ã? þÁí0añ¤+/ã³Öu0vÛ£.±´mcQ§õg¸¬4°Œ”)gÆøÁ7«_C¸OuTïþî \•¸5áƒ\?â²£c'íÉÃcøjd+ûÀ¯®êµz›îï2’öá­ðvx}÷=Ÿcx½âNáòÊH´ªíŸgÐiòtŒ 銷TÆ—ËXƒAN½•,àÁJ ð{ÓþÓ!µáሞDªÀCŒ0âP7ÄÒ{éU¥R=ÖÛ¢…‘„vÒ'ÊÂJ±­ƒÑ³ßIJޝãëáûðšvCü`ތ܃VëN`E};¨6c|›ñ˜ö&Œ{aË·#©÷p¸" Û—íEƒq! }^Ô»ÌQü7H“XÙ›gaåáx´ð¬‹b>]߯²Aõàë GîéwÑjЗ84äK„í‹™qÃqâêÿ¡®<©Åžâ¹TJᾦÂû#g }Ê,èæ®s–ex½ío/ÁKÿ>Û¯áÝ–Ö¸5m¢”hQÊrtjR¿ǼápL}(.}Ž.­?ÆÆvb‚?REÅ¡i¨µ»ˆž¦44BÐME9¬à—0wâ*ô~cΖ5ºyÇw`×õcØ? 9h2[ÙÂ-A€÷ hÿÑRl¾; °+ŽµÇøÅÞPÿÐÀ2J Hj‹ƒ0fÆd´öV”ÜU"Nm™OÖÿ‰t…5¹q¸™ÒÅ“ëðH¼üõ$ôìzÃG?‘ƒ:Â_Vð¤~™"+ž‚ØÐM8ÕÇ«dhnd½ÙÇ~Å©g†aihuõïsÃÐá¯K]®–-0xh0l¤÷þ-â¼÷SÄŒ `¤êF’(4 ´$s‡±ÿ‰)TCó)s1´Å(¼³s,5U)F•²Zc}nÂJ}½0>â|´.±W#¦£—³Ìø29Òˆ\œôV;§`È·Nˆþõ:8Ë¡ŠƒðÖg >_·ÎxÿçóxõÏ=X·t">˜‡)»6c‚«(ì{pì4N‹fâû¶ar€E™×+bä,W<’–òÒ—+y@ÚÀ¶š¦\Ò÷„G1žêÔtÏîõuý“I_´AûpÌø¬ ºò O¢C#Ð%=Ÿ.9‡4õyB>Rcc‘ žo‹Ž† uýlÌ^—Š!:ˆSJ[ÆrS’‘aï O{ñPW¥àHÔ:œÎÓt]ÆÅDÀ­Q^š³Sc×ÉÌÂm†~ÿž…eSe˜5nÎæ”}½6ÍÛ¢Ñù±éjŽºëîÞî­ø=£ôå¡8ˆÙ"=FDº#¼¬Hy¥eÊqj×Þâƒö²¢A]™s_Ìßü\V @·7¼<}ÑæÅh\)l<-›ŽÅHa9–c$Æ6µ,Ó2ƶïÔ*¦ÕˆB¿@4hÒ³e]Ðͽà°Ï]ƒ‰müQÇO¨îŠ(1½·V9eˆ\‚Ok-Ƹ÷ Æ—a½rÿ‰Xø‘7–w€ýæ¾ ðu•º!™¬àÔZJ ­dY˜¬AðÓqVUåaïÞ½êGŽHw„—õ‘#žžž¼s¼¼d®ÇÐZ‹ÐéünLòb$KÌ^ ¡bJ@AGp^aRj%©‚H,”ž=%=FÄ”‡’2"¤âÆÕlxz¢šøÝ‹]ƒ.ðŠ¥AqBô¡ºŽåcaæþ$¨„<(Ã0iþ"¼Ó©ï¤'•"â 8!„˜$ŽÊB1 ŠƒBÅA!„â „BqB¡8!„P„BÅA!„â „BqB¡8!„P„B(B!„â „BqB¡8!„P„B(B!!„BqB¡8!„P„B(B!!„BqB1‹²dº{÷.kŠBHÙÅáååÅš"U鄉Ç>!%aW!„ŠƒBÅA!„â „BqB¡8!„ŠƒBÅA!„â O‚¬ÿáÍv£±ü–ŠuA¡8Ì%¯Â“£k»– k‡gOÄÜý÷Áæ›b¯#Vîs€jb ß äh2ÀÂÕ@ç“(úÞ(Ó€ ‹~§µò‘ VÁ“F@Ò1nÚ ½0ß|/‹¸yöR}]hjBDn:ìzt~xÊ€s¢4þ½¸Ð XU¿äY­ LÝüÕø1°f5R•†üóXõÅ.8Ž]ŽOÆÖƒ¥z¢t¨U˜A…Û»?Çû‹÷#ö~òmýÑýµñV·šPäŸÀg¿…ÃÄ0\[¾Gã2`U³FM£;@ün!÷Æ.Ìÿô;ì<}9¶^ý|ÜÇ ùíÆ~…R pk‚þo¾‹—Û¹STÄüÇ/~Ú߉PNnÓXŸ4úø#Pü_ëàrÏ7‰’ñv¶ìX‹O¶+Oú;që(ŽÄ×Gžþ…Ò(Yå.õžÅĹëñ¿ý¿`ídì»'ò gçÆšMù±p;~=¸ó:&`ñì ¸)Åêyç±è­Oqî™·½ï ö¬þ“Úx@ž ?¼= WÃ>Æ–_ņ©>øõ¿bk;ƈù¡Lô x$ 5ý€¦â¼©ZÒe²d]ØÒpbR•NSñPæ‚.†«ÖÆ·šÕ¶¿4 ÔhѾé÷˜[4­‡B3WQ;òêx¦S+xÞý w”âîò^üœØc_h /[+ØyÔC]W¹8}7vLJaĈFp”Ëá:]kœÄÁ“Yü@ˆÙ!äÄ×6z$qš‹øš”ýhÚé?€ïŠÓ2€õg°«êI›ØÁÂy$§Šgû6zä¡JÅ™õ ñýŽ3¸—o e2näBŠV­Þ[… q¦;(““êè7Î]eR"’ÒÁ{}ºâ£¢©ÉÍ¿gÄÜYD ‰Òyᬧ%‹¯¡ÕMózFŒPZWãO;šÁ@4O(ŽŠ*ŽZMâòö#k—é²~›‡7–æàõV —·Tq+0~Ø í¯d2ëvrBõ÷‘”«L¹ÅÙ.NÝñæŽwÑÖJwƒüLˆy¡­ÑÎØ ¼Ò¼xwÕíkÀ)qÞGΦyŠ!ˆSuàÛ Íà3o`º'ëñ©¶s¬‚'ŒUFF†âÆ7oà½õÇðWjr2’wñ$®$)‘—öÙ–Žp«.ž3å%â躟p)¯Œ–¿aYÔ Q*ä$]Ãå¸ Èƒ»¡»ÛAü°ä(ÄX^ÈOÇsgq#ƒñ1ÏVçÿÚWÿ: ÜÈÏor€#çç=ÂVzZ&W_`…(š¹;€¼׬ÅÁ–§UZ³ÿ§X<£Ò|£º·G›N}1þÝ•8)Æà' ÒÿÞîÑ]þ;¼"ÐÝ£Œþ¥4yÖëð?þ.´Cø 7}>‚e}Løü4¾8 #:·B«ö½1ù˸“ÏOƒ˜'µûÅ"õ ºpÓó'ž½€eõ 7L-ÛïÛãö÷X'FÛ~™„º¤ bÔ$ËÂd%‚§˜Ž³IUƒ?Kª"¢BÅ/¾•:Åó “R+ rF„BL‰@äfZ‰BHÕ… Ç %Ä¡oŠƒBª¶8JxÀXWUÑBJ¥2ƒõH!••J•YZ´Q–ˆCºï,7..î«”B*7·nÝúƒâª²F‚ž¤’ÉdÓ§O_(Fi¬VB©œHm¼ÔÖKm¾qˆBöè6e™¤:{ölZLLÌïÍ›7¯áààà!—ËyÇ?©ô¤§§C<ÞY¤² #ó¯¿þ:øÊ+¯L[µjÕÑ R }ùm ‰ÞÆQ$ yaÒÜÏaQ˜$QØ ‚`Wø¿ŒÕM!•Iù…‘†4Æ!Ý·‘_˜´å¡2$™–8ä:ò°@ñ›5y´—%„bÞ’ÐÃVê¤|i¨ôEúÄ¡/òÐ' ¹V^miP „b~ÂÐ~¯ÒzÕ'½‘†>q@Gú¢¹NÒmP„bÞâtġ҉.”:rÑ/t ×}»©!¤bID(E *yÚËAW0 ¹÷ 8!¤BŠ:rÐ÷^Г¿˜8tåaH"2=â „R±äa(úÐ+ ­×â0$Ç6!¤â Ä ™câ0&CQ¥A!O†ä ÉoPÆ„@IBHå–‰¡i¥‹CÓ „Rñ¬¡§±7ÖÔÿ¿Öus‘Y†B­IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/delete.png000664 000000 000000 00000022611 13703317554 026570 0ustar00rootroot000000 000000 ‰PNG  IHDRÎÑ„ŸŠtEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp ;%ö-!ùIDATxÚì ”UºÇ¿$ÝÍÒ4ûŽlÂÊ*;" àCdQQ„ƒË¨ Žp|£0# Ž¢Ð<ÐTfä ¢pY( 3ˆl*‚<ÖÇ" H³5[7ÐN½û¿ ÕÕ•ªJ: IúûS'•Zï­ºÿ{¿{+õÃápP€¼ÃÄJ@"°Žƒ…Ãbá( Ça1ï`11q$Å`¹b& #á8L>&bñ0±&ÅàS1YçW8þÄâobÁ0±. Åb2V8fbqú™×·D +¢Ñ ÇãgÞPDzá¨_ôBÁ”"¦2b*æýÎ0ñ„r]Lébºêý®RÁ©ÂÑ·NͧKL_}õÕfbz©\¹rm\.W2_k&^ÈÉÉɸpáÂö)S¦ÌÓ.±è,kÄãÑ·:.p­ D“òÚk¯µ~÷Ýw禤¤4p:I|©™xe:99¹v—.]z¸Ýîí›7o†p²ÍöqGŒúYíÌ™33+V¬Ø…/1ïœ={vCåÊ•ÿ$fOiZ}¿G/mKƒ)ALµ³³³¿ãðŒ)'3!!¡ƒ˜=*&·W49ú~¶“ï/\s²h˜B¶ו£G0ù†–I/¾”LaÕNNT1dÈZ´hýðÃTµjUš2eŠßmÑ"]ºt‰o51¢þ9Mbb"uéÒ…Ž?n¸þÝwߥ»ï¾›:wîLMš4¡M›6Éå=öÍ;×·ÝÅ‹©~ýútòäI¾ëLü lß¾4h`¸nàÀ´{÷núùçŸiðàÁ4yòd¹¼W¯^´xñbßvß|ó Õ©S‡ªW¯Îw‰_á,[¶Œ†N÷ß?;vŒ^yåÃí §ÓIG¥råÊÑéÓ§åò>}úо}ûè×_•ßW¯^-—1L$n@ˆöÔSOQ«V­ÈåråÛFQ7n­]»V†i7nÜË@É’%éÁ¤¥K—Ò /¼@›7o¦I“&ñgâ[8-Z´ ˜nƒþ̪U«hëÖ­T¼xqúꫯèõ×_ÏÆ?žêÕ«G÷Üs¥c˜BÓÇñGFF)R„’’’ÈívÓ—_~™g}‡ähú:¦1,/å*Uª$C¹N:QÇŽI뇾ϣ>Jÿú׿¨gÏž|·™áð¾;É¥™½S1UòxÉ¥áPÍhÓ¦Î~àøN3ªÙáæÍ›ò§8mc˜P‡j ñšyŒ¶1 ‡j ÃÂaðp†aá0 ‡aX8 ÃÂaÃÄxå¤P ç§Ÿ~’¾jV¼õÖ[ôᇽ>\ÔÿM»ÿG}D§NbÞîÚµ«|¿PÇãñÐóÏ?O£G¶ÜöÊ•+”™™Ôz¼r°gÏž°ä¡ þoÚýñ¶+¼æÌg^büoOœ81¤â‰Zá ¦…ŸÚ¹s礇ª—šöåµ@ÖƒO>ùÄðøx%âµCvv¶ÜÞŠ‚ø¿Á¯“«À_‚¼vðëø &„T-ð4ÀÛ§xó0Š7"TþoÕªU“­ÉgŸ}&û?8.cͶmÛèå—_¦_|1$oG¥pš8p€š6mJÍš5“E ×Ðç)V¬XžÔ*T¨à›·Zo†ha¨hÑ¢Òä]âQ ¹)))¾ù²eËÊóìŒ;V†Pï¼ó‰–ÃÐÿ !üß~øa¿çC…²dÉy="š‰š h¢R8(¼ðI[¹r%­Y³FN"|‘ži(X(œ"ä‘c•Ë—/ç)¼fëF]Tໆý´ýˆÖÌ }í¼‘HUÿ7|Ι3Çתà5ﯿþZ ÊŽÿ›]åöˆÙápŠ~™Õ HaŽ5jTHE•ÂAÍÛºukÙ1¯R¥ŠœÚµk'=ŸQXš \Á?t¢µÏJ¬Öë)Uª”+¨U«–`C§µ?:ÿzBéÿ†ü¨Â†%Z}Õ"~Kf.û¿Åf¨–À—)x.öãPaX8 ðp&¤ÝÇùý÷ßùê11~™Qá{B†áPaX8 ðp†…Ã0,†aá0 ‡aðp†…cÎÎ;iݺu´~ýzÚ±c‡4»Ð ò‚š¢‡"=0yüñÇ¥»ç¤I“ò'”écBKT¾“šš* ÆáVWÌ9RN*°Z‚ù¶ –‚š¢k 6= .”.5ðS0ûPÊô1…@8Ž-ø·€VïãÃCËLȵÀ …ÌÈÑÖMxÓRk4hÞļzõªô}zÔóBf.+0;lРo£ãhAú´&ˆþÀµ€ˆš| å†…T ù6ˇپ8'öó—^³¼àœXŸ<Õ‚n20”ÓþÇ• ¹ºM¤MÑÕù3fH'¤–OF¦ˆpÈÖŠ+|FéÚãhé < ` wSV»ê¹‘g´\H?lu1»,Ck¢è/ßvòa¶ïìÙ³åý€O,´nÕÕ,/8'¾ãœ°ÌŠZ¢Ñt}À€>Ót•-[¶(UªTQijmBnSt½»Ö ½oß¾òx8wïÞ½•™3gæu̘1ÊèÑ£ýó0ƒïÖ­›"Â:¹ËDUD%`˜!y^\«Æ+íÛ·WÒÓÓå2¤ýïÿ»o{ù¶“ûŠ @©^½º"Blù}ذaÊôéÓ}ÆöfyÁ9q½E?ï¶™³Ç¬éºj( ºVªX™GÚ]î5°i¹QûÃ>X°ïÞ½{©víÚò_ê2¡å„¿¶jž±Ý]wÝ%[ Õš 5ù‰',óm'þöÅ»ZXßmó|õO±ìäETvò¿‘¸0Ò„›§yUrü/Ì|@ãÆ“ÿ0 b×ûáÿer ¿ddŠŽxŒ~YQ¾|ù[9!¡@ÿC‰‚3"íy!hMD\.WžþÒ‚~‰U¾­òa¶/úl(øo¾ù¦4Îǵƒ³ªÝ¼Ä»^1#ÄÇè¿Y1©&äh †.oâjµO¢íŸ˜™¢Ãì6MðÆ5ikÝñãÇË¿ ±cŠî C–wØçâßá`ZhÇlÐî¹­òmv,³}á‘ 3xxd£ÕÁ?Åáž“—h%ªÿµšð×^{M†X¨áô˜™ƒH›¢‡˜Á£Žg<*w ŠU¾ ²ïüùó嵯 Z<µ• W^X8^ðOш¡¯£¥@†x]™ 9ˆ´)zXn’8ÿÇLß~û-5jÔH†BÚgZÁb•ï`÷E_­òôéÓeG‰õðòW^xT-0¢vþüy9ò£a¨FrŒF ô¨#OF̘1C2dÈmÏ+ò¿z %fùf_ŒŠÐ6ÏýBSD_'ìyáQµ@:j&&ä·Ã=œ ¡¶Ëõ—ï`÷Åšv¿€›ü£pç…¢ ìÙ³GþG›¢Û«GŒ!û=Íð·òXf6“‘Å©é:›¢ß^ÐRc8ÿÉSÿÂnºÎ¦è·«ßÆ2ü>ðp†…Ã0,†aá0 ‡aðp†…Ã0,œp¢úªáœýû÷ûÞåˆEô¾iÑFA½Û´û‡Âë.Vˆj_5¼ÓwÔñëgü:/AÅzß´h£ ÞmÚýíxËmß¾]þîOûη8!þi‹-¢mÛ¶QÆ ¥•’ønù7omªà-E#‹&ü oŠY€Ö7MëK†7Rµ¯uÛIC yÒ‚óù³ÆÒ‚Ö]{Ž@€'^TÁ¼øe´¼F sÕ ~¼ O´ß~ûÍ·ÌÊ—+_1«{÷îÒ 9s¦o–/[¶Ì÷i€§ ?ìøœùóMÓû†™¥!˜<é÷´·œ?¯;xÀÜÆ*êõˆY¢ÝWMÔèÒÏKÜTÛ¾\v}Åp¬®]»*S§N•ßÓÒÒQc*âæÊïð`{öÙg}é1¼Ò¯_¿€|ÎŒ|Ó´¾aViÆ+Mÿl8½åŒ|à̼îpœåË—GõÅ1ý(j]¼§wL£F’ËíørÙõ;vì˜ôL:t¨üGXK©Æ0æ€ÏBW¼Ð¨Ï™­o˜UÍ“‘ö–³òºãÁ0òÄOÈaðàÁ² ¨/£Ùñå²ë+&jwiQ¤}owË–-rF5kÖ”! B—_~ùE†, ÈçLÖ7Ì* æÉˆH{ËYyݱpÂn0jt˜ÚýùÏ–Þ0]·ãËeש£v( h-Ô‚‹šR뛆šCã¨}Ex$ÓJo0;i$Oþ†Äµó‘ð–óçuJ¿905†.'L˜ ¿‡Ò— ÇBg|Μ9¾B…Á­B3„k(X˜¿i((‘ö–3óºÃ¿% •eáD€·ß~[MãÁh(}¹PûÍš5KÖŒðdÃMŸ@|ÑÂà!Z=yÑ"œ†‚io93¯;~‰D¢Œì["hWÉI»Î+ò¾™;щ}N8X|$‡>;˜ã+à3:$Ò%QNÎÉwó®eÛ»Éúí×sÑú“9ù„cuÌÊ¢V=|YÉ·M‚¨¤S”~óÖñ’ž.’ìñSN’Ä>ÅÄ6—½t‰2•,Î%@MZëEA75—å7%ñÖ¹íR*)wEw®þ÷‚qA$öî ' ì<ç¡ÿ>à¦gD(  §vIM¾7‘Êyß…z}»›6ÿžßÌÏßvmž@]ª9©E‡·ˆž\ŸM)¢@Xó¥Æ Ô»–‹ð›ò6¢†Å~ÿì’HS~vÓ;m„hˆú®Î’çMm›HU’!}²ßMsöß*µË{$ÑÊc9R¼ÉBl{.xhÁÿåÐØ ¢¶wÐQk?¿1;°:O±~‚Xg)‡å;?ºiéÑúϦ ôX]—lq±ü¯ÛÜ´õŒ¹!ã=å4¥}‚ÙL¢s×:{]É“§ÔŸÜô£¸_HS»ÊNÙ®\y°6Kœ+ïñ†5tQû*N™Ï›9,œ°ð³F6qÈÂ}MÔv“Ú%Êi…(|÷‰‹?±m=¸2‹257¿íRwºe¬=_¬[}Â#·Õ)Éò˜3ö¸©¤HC‚ØáísW5ëðF.øM¶,ð8ˆÖ죽9T¾¨ƒtK¤cWÚxÊãÛ§­(X8~QqV‰B‡Â ÑeˆÃ~ö@õ»Ó)„à¿DY-Ê{b=ÄÿÄ:· /]Þ®Ë2!žYÿë–ý´—»L…ƒcM×ãÓ¹‘¹¨{í½x+}ÈZÝ6¢„kÛqÙMÊÊ©•âÈ#´TèÃB¸ƒÖÅžhbjTír–â½9ª^ÂAõK;èä5E$ ¬A­]·TÞìØÝ.ÐmXzÔ#Ej¤äK 5ÏßPhÕ¯êU+oÇaå1e‹²zUœëýÖôÈÈ-–í:ï¡;J˜w¢­Îƒ<Õëÿ)Z!„p¨®zò_¯*²×ÇHûU*f~.~¤gÉ‘ÜsâÜ‘f,4ôqÊ‹ãAEq.-•нÑJˆuS6¥eÆf_'fZŒÖ !tiZ>·0h|« î>Ÿÿ&VôŽðXmè¶Fh @QhP‹fhjYêVó΋š0,Çs«rP¿;-îŽÕyÔõW³ò·T¯‰°³U÷]Td_Äʵ©œhÍnˆci[Ž 7Œ ýQ!ªg7dÓ_D8üÜÝ.š¶;GúV³òj³ÜpïÜuîã„Gj»h{Zn Ø7Q³fÞîvnkŽ…Âˆ¹Z¨F qA±: ¶~½ý!b·êNzhUn¿ã?Ä<ú|f ÂB¨‡ã©×§d’ƒNg‹-æßdQ×;œ2\Ü{Ñ#CHðŽèµiø[ëÜV'‰ÚPÍá•©+:µãZ&ÈNäíνû§¦+yž!4(“¿Ê´ÚáXyoˆb÷˜v8!B“âXƒê¹¼C°êQÓIë m0oužãb=¤!õ]¾~JY!,<CáÏÊÉÅëUÓzìÇA† TMvPëJÆÅë’½:Ü"úMÙ¹¢Ó^÷iâ^âÞö½Ó“‰Ú×^Fd~8+ ‡¨½Žzk,Äë¯nÉ–UŒJ%8rŸùô_“7&±ÚnÑá9âô¸ˆÅÿ$j>;Ç´Rù—­Ù4QûÑ:.9ܼ䈇V÷„ôYù-ó”(Å…ç'¨|þçX=s—Bß<œ$[œù‡r¨aYóŒ~רmnJm— G7ñh`í ㊠QYý­U]÷C×kNxò ù£¿õæ7M¿/‘¶ qýc}[f}W\ø1Z_dCí‰K®ê´»]oyцgvi«ç+¡ÂꃊeøGž ÃÂaðp&ž` \†Ñ·&6,p¹Åa˜ z8ÿÅÉ0±ŽöÿX#"œ`OÈ0<8À0,†aX8 ÃÂaðp†…Ã0 ‡aX8 $nwèß&Œº7@·lÙBù–ßqÇt×]w…ü|;wî¤ .äYÖ©S'JJJŠXžßzë-ªX±" >\~ÿ裨wïÞT­Z5.õDQêÚµ+½üòËÔ·oßøÎçŸN¿ýö›Ïþýû©eË–ry·nÝ‚ÎöíÛ©xñâÔ¸qã|ëRSSéĉT©R%ß²V­ZET8W®\¡%Jø¾oÚ´I¦…Spðãÿ×_ÆŒ#¿‡JKÏ?ÿ¼ßý³³³éúõëT²dIÃõ×®]£ÄÄD*R¤H¾å¬Ói_ºt‰J—.Mà_|PŠ`] פ0ñÀÈÏPŠ'¦ú8‡–¡C‡Ô¬Y3Ú¸q£\¾fÍj×®,¨`öìÙôðÃSNNެmÖ®]Ko¼ñÝ{ï½töìYÛç»ÿþûiÆŒ²ÕkݺµßåË—}ë:DÝ»w§¦M›R½zõhÁ‚¾tbyÛ¶m©aƾÊ@å‡~ æÍ›Ë|<øàƒùÒ„ó~÷Ýw¶Ò€¼â<}úô¡ºuëÊc.^¼˜Õb ž &ÐĉiÙ²e!iÊ€SL‰b**¦d1•S1Ý!¦Êm`×®]JÍš5}ß="Â5eáÂ…òû† ”»ï¾[b‘ߟyæEˆC9}ú´R¿~}E´X¾}EaS–/_nxž(Æ SDˆ(§•+WúÖ‰pIµ“"js%++KýEˆ@®¢Tºt颌?^Î#¢@ËtŠ˜Z™:uªÜ.--MiÑ¢…"Ä+¿‹ÖA]^~?xð Ìç”)Sòœù³JƒœR½zuåÌ™3ò;ò1}út…1fëÖ­J›6m”¹sçšn‡2ï-û¼ZHöj#Ñ«GÌØC?~œöîÝKµkצŸ~úI†,ha8@¢`ʾ :èì?ýôÓÔ¤IÛÇFgÇŽrô^½zùÖ 8ŠÍýßqÑe:Ôô †Ú ¡Xrr²\~ôèQÚ·o ¡úŽ×¿úòË/e? ë±ïàÁƒåz´TíÛ·7MŸ¿4à(œç5jÔ !"n^ ضm› xñÅéÉ'ŸŒ¿>Ž?PHИ4i’o™:p P„góæÍ£O?ý4 c#æõ×Ç)_¾ü­‹•àÚDEaÖ÷9D #—k;ûHF Á¹sç¨X±b²ï£R¡BÓôùKCƒ ¨jÕªôæ›oÊpqéÒ¥4mÚ4VI˜ESÂÁ¨—ƒä¨›Zûj9räˆH@kÖgòäÉyFV 2*c û7d«§IåÊ•ó-GËAÙ²eeGÛ¨ù@ŸE„\§#¯¼òŠlÍ N ‚@@LÞáèQ£F…T4158P«V-}ùŒC¡À j”—^zI FôhóæÍ¾íJ•*%[ cHXÅÚ!c:udç\MÃùóçe:1 0gιüâÅ‹2œC§` 3/Z´H~?yò$}ÿý÷A_—ùóçSçÎeç#tH“·ÒùꫯB*š˜bù?þ˜¾ýö[jÔ¨‘ SFŽ)×ayff&=÷Üs²–ûí·eM¬>H2d‰ÎºìK;v,ß±1Ò‚ã©Â)+\.}øá‡´jÕ*™ˆeõêÕòFÍš5‹¾þúk9 †‡©ýúõ“CëÃÖï¿ÿ¾ ©0(:ôòag0deeÉ–lúôé4hÐ ÙÇëØ±#¥§§³b4ø{ŒPàA5Š1{(ÉÖö¬¸yó¦lIŒÂ¼‚‚çJ„þØVÏqPÀË”)ôyÇŽ+ûKãÆ“ßÑ÷Áð6ZÞP>%/lÄ­=F° ÀÃÉpˆàÁ£Ñ±Ñúù (ˆhÔ ô™TðÓ!„‹fý%¦·8L.–1b„lu PôÏþøÇ?Êð o‹Ã‰¢Ï1‘N_¦ØG;ÎDH\| †…Ã0,†‰VØt)Ô°é:Ãp¨Æ0,†aá0 ÃÂaðp†…Ã0,†aáð%`˜8üÑ`w´~ýzii` rêÔ)[ÛÂãñÇ—^nZû*&~‰Ê÷q`å›X ÂZ vJ0ˆ$Ÿ/\¸P¦Që¬Ã°p" œ.W®\I¿üò‹ï|ø©é±2Â(¨Iy Æç§OŸ–î8úåVid8T  Ühð*°/‘š‚geh*“r»Æçï½÷-Y²Dš!ª¦îVidâ€h4]8p 44_·n]žåV†æ¡4)·k|ÆŒ£Œ=Úv™èÆŽézTÆsçΕ~0|衇¤¹9€™ ͇*¿k ͵¨&åð: •I¹¿cê±›F†CµOdˆF €³?¬]ýš£¡ÅŽI9 2Fízôèa+MþŽ©ÇnNØ€ñ d«£=­¡¹ŠÖÐ\~ú$¬qÑAë“rôql†´¶¶³›F†…R`BŽ‚ 0HÃl:ÔÚV†æv·Iy(ÒÈD?Q7?y‚y:†}QËßyç²ePk|šÃ½À6ãTCs+´&å0L‡ó%þ>Æéµ£Õ¶LI#CƒjeNžhi0Ü‹ÐÊŸGt0ÏH"mRÎÏqb4 éºr›Ô,Ã(3cu+Cs#"mRL™¨A)H‹“„þn¼xG³I9@‹ƒçYdÃtÝéM‚wJŠ7áhC(6)gl “Û;A4øý—©éºr»BµpÃ&åŒÍPÍoùwšì·Âa˜„c¨§I‡HÝÁsýúõ³|™Â€(ëÕpÌ@†ÂQ ”†dŠNõB¾¤La@”õù(ó:ñ(zñxǤ€´ê Y«T©R#GŽ,-^¼8F3qKffæïuêÔé—––v‚n¨©ƒ91yœ&!šÚâ䈥〛6mú@ü<_b&ÎseÛ+štH C6µÅÑIk[õ™Ž:<ᨢÞm&žnˆéÝ~Ö?»ñhŤŽ?ñ$h&u™S39XLL ‰DÑÁ£‡›ò>³1‘pH'}ŸÇ¥[îÐÇ×oâ{ÃD©`´óªrtrFÈH8úMßú8MZkÂñ×òx Zýð´O8úVÇHÏtEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp Î*I0IDATxÚì |ÕöÇÏ$ÝèBK¡e+ ;È&XE ¨ ²>Á•'*>Dõ)P‘n€ ‚‚‚²ÊŽOT €Oö}—Evd‡.´Éüï¹iB’&i’&ͤý}ý\“N&“!3ß9çÜ™¹QE!ñø §¨žÌâ…œ€Iâ†¨Žž+€|‹¨æ¸£:˜æPܲ:zT\ˆ ipOVÕÁ£;2çÖ™¤ÎDÀ;qU'Í^ViCœÈjßtNžÛG^€kYí…5:yîH^—ÖZPnQ¢ÅŠ‘ó7 ° ¢]í¦Õ4§iqˆ“ZÔZV½h%‡Zÿ•W^X¢D‰¦z½> ß5ùÃ`0ܼ|ùòÆO?ýtü¨Q£vŠIí¤µ–U>×眇UœDU–5jøðáÉo¿ýöwÑÑѵt:]¾jò»Y%%%¥“xþûš5k΋ÉÙ®Þ£8Ö,ªù±ô¹sç&•*Uê~|Åø‡¿ÿþ{eéÒ¥_OÏqð͉²ûºÖQ k/nD\\\SUUñ­à'D©ÙL<ËqNµª_mjXY­ÓbjVüžGÚyçèj®S4d/+¾J Ö];imª««@X"¬³‹”œ^šh#¬wô|#l®íeµPp8*QÉÝ+gF1.lžÖÙÕN€À›ËMW)1@;­aFç‰Ý€‚¨ö„¸³t:  Bð’““¾¶yóf|An0yòd¾î—ºwïžëµ/¿ü’J•*Eݺuƒ° ÿV)]ˆ|ýoïС½øâ‹ò¹µ´,ëªU«hÒ¤Iˆ°äGHw„v—råÊI)­¥µ–•£/„@CXKûÛo¿Ñ™3g DV‹Ö/©£»­S§N4|øð •6%%…fÏžMýû÷/YݽąƒM›6ȶvçs|½oåµ_ïÜó¿súôé4xð`ŠŽŽökg",ùuõêÕ4qâDYùï¾}ûÊ×ü--„…‚ÆÈç|ûí·6²2eË–•ÒrM!{’ý…’3 7½U Íiá¢Åߺukv‰¢±S{’ÎEŽ=JqqqkVî|bÊ”)ãղȇK¢eŠ–•Ó VM…°hw„ÅÅÿè% ˆ@„ ,, Ó DX„ ,ÂP”A/1ˆ°€€EØëׯã› X„åÁ‘H‰ €°wñë0§ÙÙÙ”‘‘¡¹ó¸<îG‚Q^„µÀ²jQ ó„Gk)qYµÅxpõ€° €°@X„@X , ,A„&/¦å«† F¥K—¦jÕªQõêÕ©R¥J¸ö@X­ {ãÆ ÙŽ9B+V¬²ÞqÇ6ëõzlAaµ_°øðaÙ~úé'þyy‹ÀÜX`>€°šäÖ­[tðàAÙ¾ófäȑآ PShB§Ï@Ø@­˜HoŸ}öYJII¡råÊɛ΃1cÆPrr²|¾qãFùoÀÊ”˜wîzõêÉÆ¤¥¥É(s{æÌMÝÓz÷ÝwSÙ²eiÙ²e½ïÊ•+T¢D Yƒ=zÔæÀ´fÍjݺ5uèÐÁãåšÙ³g=øàƒ´wï^*^¼8öx[0DFFæøÏ?ÿ´|êÔ©€­ÛÎ;¥»ví’×SΟ?OëÖ­“…™o¿ýVŽØ‘Ê”)CO>ù$EEEaoGJXëÖ­KÿøÇ?èõ×_èºL:•~øajÒ¤ ͘1ëep$µ~ozz:ÍŸ?Ÿî¿ÿ~Ë4î·/ ’’’hÚ´id4iàÀ” ;àš7o.#ö¡C‡èƒ>Ëcø Çë+ÏsÏœ9@Ø¢CVV}÷ÝwôÌ3ÏÐSO=Eß|óWËéѣ͛7OŽ5Å,Z´ˆjÔ¨A•+Wvëý,3‹»páB™J?úè£RfkXj>Àñ)2žïóÏ?—©<@JìÇŽ£ .È#°°téRùÈu"§éå6lØ@Íš5óh9-Z´µ,/eãtøé§Ÿ¦¸úò秦¦R¿~ýŠÈ©;§í|0¨R¥ ö~DXïà¨2iÒ$úä“Oèûï¿§qãÆÍÈéðßÿ-Stþ "þ·xe9ÕåZ“Óâ³gÏÊ(ùøãçù>sÇ[£Fè‡~#ëàÁƒsuÊ™ë|îàÖk,X+’Ãi‹SQ–dÓ¦M²?žæÌ™#£§pJÍËãW»vírýYhh¨|4 ò‘S[>X˜éÔ©mÛ¶MFé &ÐâÅ‹sEaæÄ‰Øó‘{ÏŽ;rM+Y²¤æ¿+V [@X›…‡„È1r¨a€° €°@X€Fñi/1~¬çøâŒIˆÖV€” €° @ðã×k‰ù®­^üÏ7&ðµÎ@ØXV-Ša> W %¶‚#«£¯“Ö¢>¨a€° €°@X„@X , ,aÎÐÜ•ùéééôÓO?ÑÎ;å n‰‰‰Ô´iSjÑ¢…¼Ëæ×_¥mÛ¶Ñ•+W¨D‰”œœL÷ß?éõzlMPèQ~MoÕBsZ¸hñF£q‡7 ¿~ý:ÅÄÄx$ëøñãéüùó¹^«U«]»vNŸ>뵚5kÒ /¼@:Îoë€ßÓ]®x¸$Z¦hY9Í`ÕTM¥ÄYÉÊì߿ߡ¬Ìèÿû_¡Øh/^¤¶mÛRdd$uíÚ{±©7;5,Ãip Þ›îºë.9‚ÅŸþi3ýæÍ›2‚{z“üĉ鯿þ¢uëÖÑÛo¿í÷õçû‚«W¯N«V­’?~œ,X+µ…µ´2ùˆœ <ªÆÌ™3m¦ñNïÍGïÛ·î½÷^ºûaÆQQ¯^½¨jÕªòïï¾ûÂBX÷(Y²¤×ïØz·iÓ†f̘a3íÛo¿¥x@>çTžG¹X½zµåõ)S¦Èu¾uë–e×ásçÎ¥¯¿þZŠ´qãF¹Ü:uêÈ ®]»¶\ÆÉ“'e'Ûš5kl"s©R¥(++KFû‡~˜bcc©Zµjò53=ô½ÿþûry™Ü7zôhÚµk—œoذaRZþüwÞyG¾‡û*W®L 4`ÀùÌÔ©S©J•*–uûñÇ‘"%a9½ Ä{ó ËqöìY)sêÔ)Z¿~=uîÜYþ]®\9zðÁm¤ž3g=úè£f™Æâ°PO?ý49sFFY–áÿþïÿhóæÍòï—^z‰’’’(%%…fÍšeyïìÙ³é±Ç“"wéÒENc†J¯½ö-^¼Ø2/‹ÈÑû‡~ 5jX¦s¤íÖ­›lüù¯¿þ:-\¸P~>K>þ|ù˜;ížþyzë­·è?þ Áƒ˃„,B¶nÝÚ«žÛ *Pƒ ¶Þ,w™…äô˜%æÓNfž}öY¹ÃsOø… d¤|ê©§reáááryeÊ”¡ÐÐPêÞ½»‰£,‹|äÈ‹\¼°ôèуZµjE½{÷–ó|œ!¬\¹RÎÿÌ3ÏØÈŠ€°¼áŸ|òINÏð{xÇ7 ¼59]dqy¶†£-¯+G:2,T^Bï½÷žrO³îù-_¾¼Í÷æªÊzDIN¿{öìIÛ·o—mÏž=´víZùG}^Gî(;zô¨¥æE \„„e8ò˜ë?W²rz¦•4Œ³‚'žx‚F%YP{úôé#¯ÔâÞ,˜+8‚r$㨽eË3fŒÍë¼ îÑåÒ¼<ŽžuëÖ¥—_~Yž›æôœ#°}úí N…7lØ ;¡8ýæïxÑ¢EôÛo¿É W<(¥åóÅ\sózqš1ž FxÍ^K̽˜iE!–kBÞ1µKa4e­éŽH|Åwøp&‘ÜùÃUIy™œMX\ƒòëž{–á×—-[&%ç¨?|øpyáÔ^|ñEŠ‹‹£ÆËèÍ©.×»,góæÍ©_¿~²ç _èÂý-[¶”—Äy㢎¦.Mt÷Žr e®Ý¸³ã¹çž“§òC .MäT“{R(# Ðn„ÜõX¸Ïþö KËóÒDÍÿ¸ _ÜÏ=™Ó¦M“6}ûö•§I‚ ŽvÜs˽«œJÚwHPh"¬uÇ ×Iù¹¸"P–SHÎøÂ†/¿ü’Úµk‡=Îk†OM+Ü‹Íò-5¾ ,Âaa€° €°@X„‰°|_7C}ú-®îà׋ÿùv¸ŒŒ ›!G´Hø¾Z ¬õÂCB0t¨a€° €°@X€–ñi/q~~.€ÂŽ/Θ„hm…H‰€° €°?~½–˜ïŠÑêÅÿ|c_ë „ÍeÕ¢æ zµRb+8²j1Šñ:i-ê€ €° „@X„ ,Âaa(hâVšAƒy4ÿ¸q㜾Ïüˆ°€À¢˜Ð‰*Z„hQ¢Å‰– Z’hõU/¹víšêO([ ×mÍš5jbb¢:räHË´«W¯ª/¿ü²Zºti5&&Fíܹ³zæÌùÚŠ+Ô6mÚ¨%J”PÔ—^zIÍÊÊRAц]Ëq.!ÇÁ¨'CsUaóÉ„ ¨cÇŽ¤×ëm¦§¦¦ÒÎ;iÒ¤I´dÉ:v쉃‹|méÒ¥Ô¢E 9}Ê”)ôý÷ßËåP¨kX- ")‰ˆIC‡µ™."ªlfžxâ š9s¦|þÙgŸÙÌÛ¼ysÚ·oöFÂ3C† ‘F£Ñå|6l &MšØLã±¥V¯^M"¥¦éÓ§ãËÁ!laïÙ5k­\¹R¦Èfžyæš1c†|Þ»wo›h €3PÃú™åË—Sß¾}é‡~ Ê•+[¦5жlÙBóæÍ£õë×ÓóÏ?/ ŽÖ ƒì¨Ù´i“[XëüôÓOÔ«W/)e»víl^KJJ’­aÆtøðaÙù@¡ªaYÖµkןþúë¯ÔµkW=z4•/_žvïÞ-§W­Z•ÞyçJII¡²eËÒ‰'hòäÉÔ²eKì pÕ°YƒŽ˜ééé–S9f¸óéÊ•+Ô§Oº|ù2%&&Êúu̘1ØAžÈ«&øQ4½U Íiá¢ÅÆÞ,üúõë㳕åS'iii6Ó"##e=èu ¿ètºâá’h™¢eå4ƒUSƒªÓ)99Ù­i %ÖæS›7o¶ÈŠÓ!)±FSb_‚” %øWj|@X„ ,Âaa€°€¢-,_¦Ìi -®îà×»u"""(##ƒTUÕÔ?š$ÅŠÃÖÖfá!!oÔ°@X„@X ,@«ø´—øÆøFp‚/Θ„hm…H‰€° €°?~½–˜ïŠÑêÅÿ|c_ë „ÍeÕ¢æ zµRb+8²j1Šñ:i-ê€ €° „@X„ ,Âaa(hâVšAƒy4ÿ¸q㜾Ïüˆ°DØüFE-DÕK—.Q:u¨C‡4eÊ9-,,Œ²²²,ó 0€Æ/Ÿ=z”Þxã Z¹r%effÒôéÓ©{÷îØ#ö…- ¼üòËtåÊYÖ9sæPbb¢œ–””$¯]»F­Zµ¢† Òüùó©dÉ’”€/îV+,Z´ˆRSS©[·n–içÏŸ—;w–ÃäX3uêT*^¼8-X°€ôz=öB€¶ Sáýë_4yòd µL¿pá‚|¬P¡‚Œ ,î±cÇä4–»R¥JÔ¢E *]º4uéÒ…NŸ>/6ôïß_Ö­íÛ·§¹sçZ¦7oÞœ/^,ÓaN‡ F]»v¥­[·ÒÉ“'éÈ‘#4iÒ$ªV­½úê«ô /вe˰GÔ°þbáÂ…´nÝ:Ú±c‡‰‘vãf0dªËQÕ §ÀÍš5£sçÎÉ¿ûöíK={ö”Ïß|óMÙáÄïå!XêÖY„%K–ЦM›4±cOœ8QFKNy­Y¿~=íß¿ßf÷ó:GEEɨj§§§ËeÈ U„eY×®]«™õùüóÏeºkfĈ2²Ž5ЦM›&{›6mJW¯^¥ÁƒSÇŽåXȽ{÷–Ï[¶lIµjÕ’ówêÔ {#(\5,GV-Q£F ›¿9Òò˜Ç|>–#èØ±ciÈ!'kÜ>ø@Î÷ÐCÑ'Ÿ|Bï¾û®Þü7y¡(¦<Œ›Þª…æ´pÑâFão~ýúuЉ‰ñÙÊ:”ÒÒÒl¦EFFÊèu ¿ètºâáWP¢eå4ƒUSƒê´Nrr²[Ó@J¬̽®›7o¶ÈjÝ Rb ¥Ä¾)1@J ð¯Ôø €° „@X„ ,ÂaE[X¾L™‡NÑZ\'ÜÁ¯wëððžr¬"-Á’bÅŠaëk³ð9$ 5,a Ð(>í%¾qã¾Qœà‹3&n [gV¦åùÜÃ\Ì…­€3.åÿz¤Ä †@X , XðïOu³©tH&…ëµuñ¦A¡sÙáâp…ß³ÖË!oÐÅøöºtÎaRb Yµ&«Û«Q¼mÙ …úÕV©ß 6h–¨RK!݈­ ÙÇ$þ{ÀEˆEô¤IÑ+""TS¤Ü|Á¡RÏE מ5ý½IˆNTÍAªËËÌ2šRÒÇ*]Ì”[#„JŠ"šÐB•…ŸNýrЍë*mùÛta¶_$:Ÿ!6œÿûF Yë‰Ä\Õ‡‰ƒM‘æw§¶åM-µƒJ½k`?@ $p”z—Jñ˜íÎð*Ñþ+D㛪R jÅUšqX‘¢4MP-‚¦žQè•D-|\DD!ãBä{‰%œ¿Ÿ#j¸ÐôJµâ¦eçÚ°âPüj½ÛÓ¹–æÔý¡$ÓA€ÓÙjý$êT>ˆ$sþïã×v_6EíÖeoOçƒxJE@¤"%la€£Ü+uTúx—B÷–¹- §¶Ì#¿*6‚óô¦BȉûˆŽß0Iý‰o¹h«y³ˆ‚ÏÕTÖ°o‰‹ÂÍ‘Ô| +ÖeXîÍ,SDæÔ›á(;çOE.ÿguÔu]«Ž©ôg{zq½"SúÑ¢v®‹mŽ6l0hÉ’%´iÓ&Ríuv<^•h‰ˆ\¼së”Û"3ߤ˜ê>3œî 1E©‰ûYÓ–$j^Ú”æžs„u×°µóè}²Y¡ª¢ž^ÚN•ér•·¿¯ŽXfÒ]Ë2¥µ®àº•ëîuMuñM ý jk^¢ŠÁ'QÃ:ƒe]»v-¥§§SZZšö¾L±¿ÓH¥¥'LQ”©.RÖ;Eý÷¥ò¢H)/ß"Úx^DE1¯^´»Kñé‘jæôȦˆè¼L¼¿‚HŸËGz¿.éÙ¦´øoQŸÎ>""øÕÛ¯•7¥¶ŸïUè¾r¦ÚÙ|~w³¨©/f˜jc3Ý·_":tÕ”nÔ°6pdÕ:ùz‰H;íÐm‰?m¦ÊŽ›~ëMMõã¹GÙ$hÓDSk® [”6½§ibþÖãßõM=Â+O‹ZXÔ¨Üaûú#"-þå”B*æ"O§)4í 8L§{¸·™éQE¥õçê¹J¡—îT©OMåoÅ”[rÓ[µÐœÎÙ[íïÒw˜ßàú÷am©zƒbbb|¶²C‡ÍY###iÔ¨Q/ëúõët"+ºÈnøÅÇIÖÛ«;¨2ÒƒÀS¯”¾x9 ñ2gå4ƒUSƒ*%NNNvkpŸÎÙvÑT7óùTÈŠ”ØotîÜY>nÞ¼Ù"«yZaAõs/Îìà Í5mQ3÷©¡ÙN#-vZº”Ø—h-%VÑÝZäv'%ÆyXH a!n¡K‰ £¬NE…Àþ63×ö`YÍØìܲ³³(íÆ ÊʺEFƒ‘6@U§×ShhEFGSHH¨¦#-„ ¬éi”yó:%•Š¥˜¨x Ñã>Œ@‘m0Òõ´t:yá…GÅPD±HÍJ asdeYï¬T†ô5ðˆmP"&ŠŠG£½ÇÎRHh¨f#-ö–ެÜn^»&#+dÕzŽ’båö±Þfˆ°E4²æü!k֘Ȓ„k´GL±±}.›:ýr:¡´i!lAJ+šÑh)q6…ò•ùT˜:˜ Çá'4D/·o'ˆ¸¤±”ÂP*LV)±*v†Bø/-4Òòö1o+Åê°ª…(‹"ª dµ®aÉe 鿸Pü+xûÈ-ewa‹êYDØ‚1÷öFÏÙ oýü‘Ö,«ùQK=Å~6Ó P1Q„„hë¸À5 ßà]PÑÕò7åquSQ‰´Š¶ë^s cY½œ¨B/ì¹ìp¢®×ÖÊ’ †ˆ€ÖµQ‘DÑ~4¶”1E-Â’.„ÎÅGh±dÓØÖÏ}‘‘½§-¸úëç9ŃN'@7n\§o¾þŠÎ;›!]5Òg%€MËTt: Õ D´ùù¿?Ò©S'åó°°0Š£ºõëÓ•«Ø®’Ö˳Ũš ÉZíg€°Az¶S•/ŸDMîiJ™™™tèàJ]µ’:w)NaáaÚÊZózžs»ñÚãw„††R‰xÓò”J(E‡¤ ÎSù¤$›ùþ:q‚vlÛJ—¯\&½^O•EnÚ¼ýoÃïô×_'¨{Ç,uܶ­[hÏî]ôؽlÎ(^Šª¹ŒH°ÀKá|µffdÐþýûå¾_Ò®ÄT¥xÕjÔ 2eÊÒÕ+WhÕÊ_¨\¹òTûÎ;ißÞ=tæÔ)‹äG¢ªU«Q¨7§îw¿'DY¿›vó¾Q+1l.Iä+œ 2Œ”ž–Và» ÞñcGiÚ×Säß‘QQÔüÞ{©téD9¾Yuº”+WV6¦D‰8ŠŠŽ¦k×®Šz÷*[¶<°_[žÎ;Gׯ]£š÷×rpRò9‡·‚ùÖxû¤Ý¼)ï¦â›ÛþOgêŸåÌÂÛ^âȨè‚vÏãáî-->¦Ú kÝ RX¤¨€¬GÉ{š6¥ðˆ9ž³³¨ÏQôÀþ²÷Ø¼ÎæË)k‰(»fõ*ÊHO§#‡Q©R¥¨dÉ’„S­‹Qf%þ—¶^Ù(JJŠ–å79*…„EJ <‚{‡KÄÇ»œçÌéÓ´á÷ß©e«V²våôxÖw3-2WªT‰"„ð‡¦£Gÿ¤»“;}Šû‚!é…° WtRó”Åmºf3,$T¦…‡EÊ¿ed†oò®U«íܱ]FÞªU«:‘ÕuTô™  „TSº£˜{]¾`Ÿ«»\‹òI¨fÍš´nÝù7GÙ*UªØtLÕ¬U›¶mÛ&;›8jçúw)ÎÖÍw'y‹jD†°xJŽå‡zØé:ÄDGSŸ>ÏY¦Þ{oKÙlWàö·23¥øµj×ʽžŠw5¨ûË@Jì7ø®˜ŒŒ Í]5Â\‡ií.¢|¸í¿ÏµJmoÞ¸A·nÝ¢6Pbb"•)]Æë…*^§y¼Âz˪E1Ì’èèèB"¡· S<’vïÞ½´wÏn*U*ÚÜw¹<•ãrª“÷¹êÚEjÂúf7RUMF1^§@G}Å…dª†Ž2–åøÑ¤IÙò^žâ¶G¦š×›WÕÜxK¨a‹(J3b§ÑPu¿ÐTòèdr¾'5®ÓIEï*(D«.«ëšÖþ]J©«âÍú  ªͬFUgY¯e‚¥HÍ5=é"R<š)1ÐPýèlGU l]·¢m®ô4×U‰nžÎñh-Šfè…°š÷U-iuϺ¾È"w¿«S.ž¥ÇН2 òTÌ­hU[G7·äUœ¤ÀdÕ³ì‰nŠ[3*EZc[d’i÷–ëxL#Å”V¯9”Ö‘Bvõ¬âh.×§kÜ–R°@KÒ©ùYšâ*Ëu,‘EJ''TiµeÄÅýÔXɧ{~ºÎØz¸Ó@} a—7þp¡:ßëùgrÍyô4½®8ÝJ^µ®»/á‹ÿ1Ì)pRÓ:?Y½ýDupËžbÿÕY z•Í*¤éS³ˆ°Eº’Uò®iÍZGNgMy~Òíùœ]©äê &Å&Õ.šÚ"ÂXì(Âä§y¶”Þ½{SÕ*UdkРuéÜ…–-]šçòmSxÕÅñBušî+jþHJ€J ­Ýiaƒ1°ª·³VOünÞ¢-]¶Œ&5™êÖ­K ;vº¸SÞQz«ºQ»þ(NÄTœ/úò5ò?Rb× 4È£ùÇçô}æ×‚'Òz—{³”â11T»öòy½úõhöìY´{÷.ª_¿>]¹r•F¾;‚Ö¬YCáááÔµkW0püEòÿûßtíúu9|Ì–-[)44„º?ú(½ñÆ›rEŽ;JïIÛ¶o—7·''7¦>úˆiþüy4ñ‹/¨qãÆ´L,¸wµCÇŽÔ°aCš0a]8^<ÆŠívG¥;äºñpo¿ý6íÚµ“Ê”)Cƒ^}UfùOò‘ƒ`)W­ÈÈH§Ù³fÉçwÞiøÕWÑž½{iÊ”¯é½÷Þ£ogÌ iß|cyÏ/?ÿLmÛ¶£5k×ÐGL_NšDkפšÅ‹ËåLŸ6¾ÿ~8°Ÿ>ûü3Ë{9"Giüý÷ 4~üxùÙ,ëÔ¯§Ši¿Szz}øÁÒ¶7nÐã?F%KÆÓÂ…‹è‰'ž þ/½D;vîÈÓN\8Q@ä7*2ªÞu×]r'Û½{·¼Yß$D†ÜA·lÙ"ëEÿI¨z4ëŠ+¨fêrð´øøx;v5¸«!9{–Ö¤¦Ò$!!ÿ{xÏïо=-]º„žÞ4t ¶Ö³gOù<¥e %$$ÈÁÈ[µjM%ãKÒk¯¿ž#BÍ›7§£µY¿þ/¿L±q±Bú¶2‚w¼FͦåµJ¡U«VÉç?¯ø™þþûo3æ}Šó×®]›fΜIK/¦õx/«aU5jiaÀ¦´hq/ 2„–/_NÓ¦}CMîi"×ãÌéS–Ã|A@VV–ŒœfxHëÞ[þÙ[·²äóõë“óÀÁƒrÑ£i³f·Ó8Îfìbë7Þj¸Uþ;;Ë´¬Ób]¸lhÒ¤±UFA§N.ò²} «üqú@¤tœ¾qD°çøñãÔ·o_úã?ä„,MÅŠóõ™ÞÜ%£Z•*•éÇ—‹šõ]š êK®™ÿügôíŒ@!ËàÙféÁC öéÓ‡}´Mœ8QDÅ8zI¤°W¯^½ÝùãÁ)þe>,_þ£|4Ëfø¼ËŠÖGpš÷ðÃK)í;•øïnݺQ±bÅègQ¦¤¤P¿~ý|ò¹Þî‹!B„·Þz[¦È«W¯¦²åÊQëÖ­Eý:™NüuBָǎ¥#‡繬lC¶ŒÆQQ‘²ãjéÒ¥r™î®¯ý´víÚÊèûÉ'ãéÒ¥KògDvîØA/^ôüß_‹ÚBQî ?ÿüsÙñ2uêTiÍìÚµ‹vˆnΜ9rÔüêÕ«Ó"ªù ÷#­í\­Z·¢6mÚл#FP³¦Íèã±cé£?¢Áo¾)å('$~©ÿ<—CÇ—ÿþiÓ¦Éâ^x6oÞì•/œ†Ï™3—ÞÑÿé§Ÿ’?ÉßÙû￟/Y ‹»ŠbÊW¸é­ZhNãÕ‰7;¼Y8cbü÷{;æTÚá}µnÜIÓ_ìØÏ=÷}úé§4B°sçNJJJ’N§N¢Î;‹e‰¸iücK¢ùÕKÙNQò¸q\±½fIqpaðíiŠÝòìßãlŽÍSòR1Ÿ²8p@n?®­¹àfþMszï‹ÿÅçp=rI´LîFÈi«¦E k’#Ù’%KhÓ¦MýA"g°¸3fÌ aÆYj¾¤œŸeät866VþøWß|~äõPZÅŸˆWT#kPÖ°,ëÚµkeG‡¯#”ŽôÕW_IiÍ¿öÆ4jÔˆFMçÏŸ—é&Ÿ{ôKºDù¹šG±Yˆâ‰5y9Å»eäN‹¶¬AWÃrdÕ:|Ï+¯¼Bü±EâùóçÓÀé‘G‘§<øÊ¢7D­è»üWÍ¿êîÜÚ¦Ø}¦8–ÛÆ,ßhY5$¬w®iŽç´àؾ}{®i~ø¡læß…­P¡Í›7OF]–ëZßæ¿ÞŽò¤äoGW¼ú£+d Ò”899Ù­iZ>Øø¬öVå ªäŽªŠÖ(N£­» b¨—"vybPEXîmeø”YVó´`ÿêã]Ö‘˜Š“‘LWòšGQ\¦àîDŠŠ¬A',w³sÈ-Øyò—tÚä?5\—a¶ˆrðf$¾PxkXÝaGcP·/„aAÀ(¥Ð®Ç©Qv™@‚Ó:E„I­B©EY“lÙF¢sé*­9e¤I{ t9Ó·ÃÕÄ„u¬¤§Y‡ øâa·l8k¤Gþ{‹ž]•ES÷¨M’Žf· ¥’¾íDy IOOÔÐã G„ùáFÑ᫦À·ýM”*"ì’aôÂz½5›tÂ[~þH=Å„*ô»|Ô–l‡8VDÑÁBdÔÎ{ñQ#MØ•Mÿï}ëî ¡€Sèc×Uê´ü–Óù *¶ „nq^¤ÅëN©yNªÜ»–žzס¡³èlšJï6 ¥‘÷„PÿµY¹Þ;¦Y(•‰TÄkÙNô¾øûê-•æˆ4¸Vœ"—Ùë—,ÊÎãÊÙüÓ÷#mÖLJÌç«øv2­¡Åu ¤´ý˜îUõ´àˆVž4ÒžKªH›³©U9EÚÖK ñîB~º3›v^4ÒZ!ýŠj_QO¿LÑŒÂSŽÌ×o¹žh(ÂòÀÚ<¦¬Ö~Pˆ$<Š! *¥ÐÅ ÓsŽ€U×KqåÑ\¹==Ã*–4½ðaóP)&*ý×n9ÞΞÎ$lHHEGGã[Ö(•bL‘oæA“çDœ*¢ß¬ƒ¶iê1=¡ØíŽ)N—™adÑî‹·¥3XýF–u7V^ó¤Ä@[ðé–Z%jVFG}jëiæ¡tò¦J_ï3•óD:ܱ’Žê•T(BÊYR>ïše´] ȵoïZ!”mš·¢¿J¬IÓ "Í® ¦ßUJG5E=›×ü@#h‹¦¥u4ïÁ0Yc²¨óŽéë½Ùt3§¤Ÿ¶ß SÖÕ ‘JpÊúßÂÖ£¹—5xc ¬";¥J„›¤ür)2/:j QûNiJ^S©ÇŠ[.ç•sþ—¸(cÏɺñ§ÜNž¨a‹xíjÿ7ï|ªàÂ… òRE®Ì?m> ä­ÝªŒ)ºuæÃÛ€ûÂÃÃ)66VÞvé(²BØ"¶Ã°hæw–“wîxâTÌþœm -èÏ+hìËóyVëë†í›VÒa[€QÖzái¼sX¿Æ[ËŠ[0Ö|µoZÂx‡±¾jÆÜÑaޏ®ÒႵ°FXGÛÁ>ÊšÓckau>AØ"$®µ¬ÖÑÕ<¶à"¬;Q6Ø",ö?¤ÆæÄú9D L$·¢öép¢«Š«¡†Å³N͵l^MÖÿµ¬}É¢Å:65pÒšEutù"-øšÖºdѬª3aU»ç*ö¯´öµ”ýy[P°âjäŽ#÷TW)± aµ!-L¤ ðÁÒ¥®RbË› ÃMQkEaóúoG±?_ ³=õýÆ´¼¢«LÙó0œ{F²._¾¼›Ôÿé˜; xþ{ÒÅ¥K—6i”D£««sŠÍ¦ñÅŸ‰({›ß;”¿vÀ¢Þ|ýýûv‹c×k#®Þje'MMMM½¦ÓéÖÕ­[71""¢´xOT l$@+¡ýœß¼xñâº?þøÍ#Fì“n’í8ĹäÍGÜ"§.§™Éi|Go„hÅçnð%Ù9‘5#'%ÎÎiÖÒZÄ É£~5XÉl^ õ/èì¢1À1ŽÜ²nÙ."«g§uŒVi²ÁnºùÃtVQÙZVˆ €­OönÙ»dpQ”ÇiÕ‰´äàÈ s]!,νR턵×è¬vµÖú'=­g0ÚMs$*Òa p$ر^ªIDATxÚì|eÆçR]Z¤HïH/J—.½XA:X@”¢‚ €tQQ¤*E‘""•^?, €" RÐ{'õ¾}&ÙsïrI.!„äòüó{w¹­·»7Ï;3ïîØl6›Ä“x/@!ä¾bÏÌ~  !„x±Xøy îÞÛ(„’" ¾=ÊFÛÝ|æV übw¯¶X‚â@!ÉGìn^=h“ÄÔ(„’|ÂCs'qð‹A\›O ï]= B!÷_\…!"†÷îD"VÁ*®-&ïBHò»‹˜M,¯›Çàš+°Š‚/^W­ZU¼V­ZÃÓ¦M[Çf³eâ±'„ vûõ;wîlýñLJ7oÞüÅÞGXl¾ÝúÞuƒ-/¢à»víÚõêÕÛ`Ìû3!„¤H¸ºeË–FMš49hüÕL/ÂÉÃp' /!êÕïÊ•+óÒ§Oßœ‡–BR.·nÝZ•%K–NÆÛ0‹0„»Šƒ«08y jò þ‡á#BIñ^ÃÍ€€€‚Q“çàcY&ÆpEBR>†-Ï ÿE„Ü $R\‡žŠD‰äËÃI!^ƒ¯Deêä øÅâ18¢â’pJBñb»íÀnÎÍÛèá$B!Þ+ ÑfpwA!Ä;pgÛm± ƒˆûp!„ïñlžz ¶XÄBˆ÷y n½†ØBI„BRXHLÂ@!$•—00”D!ÞçØîF!„Ðc „Ba „B( „B( „B( „B( „B( ÷žÓÙdOÛy<ß½9dõò‘ivËHÒ¾2 ¢O!IÄó¥|eSë4òã“úÞ•6…|åÏv’?£ûßt­Ü>ºl‹‚ÎËÖÈå#_?žFv= ‹§¹oßÖÄCÚò‘»ÈSE|eý‰ˆD]7.×ÊûÉ›ÛCåÂø/¿öx„øSâ I`Ô»–ô•¶„êÿŸ×O#;ÎEÈŸµ”ŠÁ+e}%8†26‹ûêò7BíNŸ—Ìj“ µüeä®0Ù.¾÷ïÞb ƒ‡†ûICf“nÆ Í“^äÔM»¤7ŽÞ÷†ê/ý;\êäñQã<}_¸,:.>ÆBãjøË#ÚPU– —w‡Iñ,6ù¨¿~À&×BìòñïaR/¯¯Ì$2¯¿œ¹e—–«BäŇ}¥m1_Éèo“ß/DÈ?†ÊͰȋnÈ#~R.»^X}~•¦ù}$“ѹ¾#L÷ãµ ~’'ƒMN\·ËÛ?‡ÊÁ+vžÄTyáò¡÷‚ÇŒßØæ“ŽßÕÆáÒ$¿á!\ ?Ã|`üîÇ¿ëw«ù;–éSÎO g¶I?ãwüëùí\~\ËÙü¶+ê++ ;±òßHE¹vÿ~·ìgz@Uø?˜Vdöþ09d\ m ÿçþ¥1Žàå`»4ù.DÞø)LUò3”^Ô»˜ùW˜4ú6DÚ¬ ‘¶ÆI/É&ŒÞ¾KRuq°tÝ*;ÏÙ¥ÿO¡b8!6†¨(\8OË=¶,Ø‘¦"·9¶º¿½f—¦Æözþ/Tþ¾ê|ñì»d—^[Cuý?Ÿn¥¨ý©»Ý¹‘DaetàLNïs¥áÞeýäðÕYcxñ~ëºÛèÜýp:2Ò°ÿ²]ÎÝŽ~>ÎNþ®yÙÜ:Fè1$ÇUOB°ít¸\5zøëއɳ†‘Ÿ¶×5›]VƒÂÛnx~’Í‘;ap}¤´q²á=øÙì’5?\Þ7züüd‘áiüv>±»VÕ³ëüÍ !¨ÿ¤1ô ‡q!fMc7–±K™l"ý·…©]¶}#U ñ)á+¤±© ¾¹NB—=‰»8›Ë£†-¨šÓGs…mׇD[æ‡Sq‡Ÿñ{Åo¿ý†ã·n“ùü ïÂG¾?‘äߑ«(À˜Û¤^^ýMýôd€ ì—Ö×.ÕsÚԨàß1\>5ìöH7½ËøJ&ãè¶]¬±F,k3Öò£q’›¯ŠÖ…|äƒê¾òù~‘¯…;–Ãk“ü>Òº M/ wì2±–qÅØ" ¼u¾ÿv7rÛ¦Ã}õ“î›Cµ‡Òш:¹}œæ%©)’ds£ ¶Èë›â`à-äLÿßÿ¹ oá¬ñ¿e´½ýÇ´EMÒHßBå—³q÷KÆo}ËɹnèÊu£zÐð,e ÇlDÁ0´a¡|Sêä“ýÿмþc˜„GØ×Ê7ƒÈ/‡ÂäÔ©4|)T ×ÐÇèÝ›ÿ_ò•“Ƽ¡—äžaœ¯÷“[ä¤Ñ³8eœðYgŒù¯ùJ~Ãu 3æùû¸¿ä —#×#$âŠô•B¥€qÑ=î/ÛÎ…É•sò¿¿ü¥e–™g¼Ïf\×CE®½ŠPC;| öÌi¹x6T2ÞD•4~rþ¬]×ORµBˆÍ¸8m~iÄ' ƒñꥇ„°Áðú§>æ/_f‰ôÇ·~“éûìê᛬k™F^ý>Tþ¼¡y‰@ÃóG>2&6EHûb¾*" Ë\>‡|¶?ü~u*læ#X}-Í?ªAúJuûHj…ˆà[’Mnȳe³I‰À´àç<¤,¾?'[|g°{ˆÏt{3Øã³>: )Ž›F§ãï‹wdéÞKrI2‘>ò£8$ˆ— ï KI?¹nWÿs7ÃU›¯ ‘ã7ìÒ»œŸ4zÿoü꘎PтÎd3rÈQbë­P»Ì;._H|aØ×>]Qã%8ª…FµpK³S\ÂGö°ÉvY†ÔÏ#éü}fè) $™r;,\ÞÝrJ®úeô(©O„¡$‹§Âo_—v•³IúDÁcão» 1±Ån¤mnŒ´=BdwýÈ~wûGíHÞ ³óŒá OÿíšøeÊy¦V".P\“¸†ÇP4G€Óï$!?[BŒÃÚFs.l±ï£“á·Ç"._Ö¡±ßvûD±ìzãz P…Á­‰‹í!&™üÝà%ÊOÎÝÇGìqˆ=ŠqÝ$š׷qãz·‹›ÑK„Âê½…ÿ†€ê0Ј‡ÁóäçbKâî²-–®zL½ü8½ »Ët[ì͈\úÆuî¸þMg^IõÂ`É+8ÞGy >w“0—¹W¿/{ô²ÇáØbQ˜làíÊu?ƒõL3¤Dè1DiÂâ`ú±øØ§§|O~^6ÏÁSãnççžÏ@RDÇÈ|¥T/ v×ÇDØîvö±%ž±¿ùç¸×mClžÙw{\_Œâ’QÉçÿ:HÌ5z 1†Ý»0ܰÇs=È)Ø<ìÕÇëž{"~)’lÔ‰, „P<7§>nzK÷²ÿôV²ë§ÿéû ™2KþBEåé®=ä±Ç[8D »ä#¶{w×±uˆªýnŽI‰×C† ráìiYûÍR¹|ñ‚#1íãï'O´í s§OQo¢I«'<þ.öÄP8B…Â8‚a‹e»>–×Õ“Ö϶—Qo½¡Ÿ5jÞJoÞZP’Ü\öÉveÖ'¥qË'$³á…xªt!ÿE*<¨ùáU5Ÿc®$™ó¿÷>>ûyÿ>tPžmV_>[°L*>Rõ®WJÁðN®’¼yór¸jjìøúø°æs‚\R©²‡†Ù“ùΜ>)ׯ]“F½#å+U‘ʱ‰B<”‰Â@HêƒÂàÖº»þýð,Λ-_Íù\J—-/ïM˜ê–²'Áö !ÞdJŠJÊ^ Ä}5ò콓{ÍÅcJJ¥0””З\Uœ§†’PÜ C*´ÀôF!†Øzæ©PèB( ÷ØHÞ+CËž=!„ÂpHΡ$öì !†Äîq{PÒÐëBIt3!öÊéfB( ´£„ܵ7mÞ¿`}O( DRç¨$B¡0Ðc „·øð¸÷’{+Z0Ÿ,]¼(ÁÓïUÃ6±í»YÇÉ R(_ÙµsGŠ8É¡…‡‡Åk~B( qàÉH¥¤`ì˜ÑR¤@>9súô=ÝάÏfÊ­›7SŒçÖ¦Es™;û ¯ù^÷âúmÚ¨|»byоþ …!Ù¤¤n!ÁÁ²dÑBI—.,˜ÿeœó;<›xN?q옌>L è=ù.¶Ä9†ÖsñäÓOK¥J•cÿž¯dÜ|Œƒþö¡òÁ{cUâs| ¡0xØsº?îÕ«VJHHˆô{íuùzÁWæ˜vçömòö[R¹B9y´rEyì»âçççØ×¸¦›mßÞ?¥eó¦úy•J¤@Þ”ßvÿ.5kÕ’îݺÊmC€Ü}¯Ô„Czõ’N†(r7ð·û B)©tíÚMG$™tèØQ&Oš$ƒ½%-[µ’ù_~)•*VÒžüôéÓœÖ×t+ ¾_³f-õ`H¦Lž,eË”•bŋˣåÊíÁÇİaïHŸ>}ådPÑë_àÖݼyS“àø~”ñã?rš^¢D ©^½ºŒ=ZªT©"ÅmÇß­Nº.B¸+¶ï•>}úTq A ß|s@¤(t¢( CŠgîœ9Òæ‰'œD´}¶­|ðþû²bÅré߀zô—°°0y¶m[)Uª”cÞ¸¦[)[¶¬tíÖM×&ÍDzfÍZ =`¹1cFËÕ«W¥dÉ’òÕW 4d㎀€õhºuí¢a!„„^ýhóõx©‡üùÇÒ¦u+ý¿òꫲ÷Ï?Bðzöì¡“»ð‘“{ëã#;wìÓ§kr½hÑ¢2cÆL=vî¾Wjxj+W®’L¡$ä.¯)›#´liþQ-Íøññ¦Þ•ùj674GÄÛ‹=Yâä?ôï/ÿ?ž(ë›ýÅòÞØ±òÛï¿§Cž8lxpyóæUo‚‹ ´ý—Ÿb–Ú+1ÎuQã%8ª…FµpK³Ócp§–<qŠëÝ#ä°F¸¬[÷î’¢@H²Â@î }ûô‘H³fÍä7Þà!$9uŽJŠJ*ÎPñr1””jñ$”Ä᪄Bœ`(ÉÅC@IÍ^!„ !„ !„Ï`ŽÁCNßãªj„Ü+rçÎ̓@( üqBHÂa(‰B…B…B…B…B…B…B…B…Ü}ôQ™0aB²ÙŸiÓ¦Iùòå¥jÕª²cÇŽd½¯„PH’Ѿ}{É“'¶ HµjÕdèСrñâEÇ<#GŽ”=z$»}_»v­õÐÐÐx/$£G–~ýúÉäÉ“%88XEbß¾}¼(¹ð‘É„:uêȰaÃäÚµkZò†rݺu²jÕ* ”Ç{L®^½šìö»dÉ’*lþþþñ^öðáÃZ9ï©§ž’Ì™3ËíÛ·u]=ô/Bè1Œ3ª‘Eø¤sçÎòí·ßÊ•+WdÒ¤I:}ÅŠòÕW_éû7nHïÞ½åᇖ"EŠHãÆå—_~ÑiX½ðæÍ›K±bŤQ£FòÃ?¸Ýæ?ÿü£Û*S¦ŒÎÛ¡C9wŒó¿ÿþë˜wÛ¶mêÑìÚµËiÿ|øá‡Žÿ±}x;-Z´¢E‹J5ä›o¾‰¶íE‹É+¯¼âì'ʪNœ8Q÷Ë«W¯–úõëë¾¶jÕJþüóO·óÁéÚµ«´mÛV *$+V”Ï?ÿ\FŒ¡ßµD‰ºmx(±s?!ʃ ’Ê•+ë²Ï?ÿ¼ž€uôïß_§a[øÖc„‡/vêÔIŠ/.<òˆîŽã‰'t::O?ý´NÇv¬Ç ßcðàÁòÖ[oé±Ä+!†T Ú× AÙºuk´iŸ}ö™üüóϲ`ÁY¹r¥²‚ :¦ýõ×2jÔ(Ù¹s§fIÓÐYyà¤téÒ2þ|Y¼x±)fM®\¹tý&K–,QãU¥J•8÷}éÒ¥òÎ;ïÈï¿ÿ®Þ Åv´÷äãã´>|'sYÿ1cƨ ¼„e‘7æ1‡wc’7o^§}·ÛíN^޳õ;AÀ’¿!„Âà… Çºyóf Ÿ¸F  1ocô\MA1±Bs­'cOá–™3gªw«;Çúš6mª!$Á&Mš8 NlØl¶{ZC~Ê”)NŸÇ´O0æž×qˆëû¼öÚkê¡—ÜÁ¼yódÈ!NyêÔ)õ`<Ì£ð”Õø§OŸ>š¨ÂPR*1x ÓDNÆá ]EèÄäÚxÀp¤I“F{žÖéË—/×ä,Âðüq§u g‹B0‚0l›6mrš§K—.º?èQ#´t?ƒØûwß}'ׯ_×PöËSˆ OŽCl Çã ñDhaœ?„¦>øàÍK@Ä­¹ œîÕÀ÷Á÷Âw´S&„Š‘È$ÑK‡!„w{‡!CøÉiôv»¶ Öƒ5bì¹sçjRÔ bï?a[õêÕÓ$çË/¿ì4Â)èÕ"Œ‚mÜO3ùâ‹/tdR›6mT¨ðþnñä8ÄÆðáÃ5±eß~ûmM[™>}º†°àÝÁÁ÷0½œ[$»Ñ)ÀùÆ÷úôÓOtO!‰‰Íé'£ùZšT @‹ˆˆ8â-_ØìYãÕlˆ £¡÷ˆønJNò!é‹Ñ-}ûö½ëuÁ@™Ãg2!w<=„1ÒÉ2Jj<¨ùxœðºÐ` ÌfŠñBoÀljºà¨ÕÂ-Í΃b +%„T G¼üÖ­[R" ÃZ1Š £™vúè£4Ù|?E¸ 0h྄=`Ð’ò4éLÜƒá¨¸Ñ y x`¸ÑŽä CI^J"ÄJJ½xJbò™Bˆ³xðB¡0B¡0B¡0B¡0B¡0B¡0B¡0B¡0B¡0¯¯U«––ªLŽEì-Z$ùò廫u  KŽgKBa ‰ j ÀÀ á9M¨–f­û›AäÊ•+kM T˜K 4oÞ\kFÄÅÚµkµŒ(!+(„³aÙ3gŽ”+WN ¾ êWJå2;¦¥AK—.­N³·òôÓO«ÆÖøÎ;ïèCì¡0XA5/ÑjÕªéc™ñÔ×?þøC§¡>BïÞ½¥L™2jxÞ{ï=},èׯŸV}kÛ¶­†m*V¬¨å%±Ìä•W^ѺÄ&èÅ£Ê v:uä믿ÖÏ $Õ«Wwªç0nÜ8]Šö — ã‡úÅ=ö˜[¯åIëׯ¯ï»wï®^*”áqÓ¨$gî'Jâ;|üñǺÍbÅŠi9S”¿4Á2CÕ­[WËdb›Øw¬·H‘"nk@› T„ùQa ǤlÙ²Zõ%Ü1mÚ4û†í¢’ 6L 4¾GÍš5Õ¨£ô% û‰iØ § *žMš4IvïÞ->ø î;æÃÿ0Úï¾û®>|Øí±D•4ì7j8ã˜â8¡þ²;°a^”ØÄ19þ¼Š.r È™˜,]ºT˦ÄxqÒ¦M+kÖ¬Q‘A}ç\¹r9Ž ǦY³f¼èIòÉÑü–ÖhŒ–ÅhFËk´"v/Âèùi ·=V»Ñ¶ÆÃndûõë×íF¯8É÷é¹çž³½G{Þ¼yí¹sç¶‚`7ŒN;uê”~fÇüo¼ñ†½qãÆú¾oß¾v£×ï˜ö믿êüÛ¶ms|Ö¼ysû!Côýk¯½foÒ¤‰Óö ck7Eß7lØPç?þø£®ËèýÚ Ð}¼|ù²c9Ã¸Û Ï$Ú÷¹zõª.·aÃÇg<òˆ½K—.NóÞ‘Óò8'*T°øá‡Že ÑpLŸß! ‡Ü‹ ’è(oŠr3ÅEºtéÄðìTè±^±nóZs„0Ç@bF†FyãÆÚƒnР&GaÀÑ»ýçŸbŒ«Ç<Ķ‘ôE¢xÞ¼yjì;vì¨ÓÑÃFܱ{Â1rÇ &È¥K—äúõëš_¸xñb‚¿kçÎeþüùšˆÆ¾ wD;’¶‰Ö‰ýD®bÁ‚*|®Ü¼yS½F ;Ö¹÷dLÃñ™>¸±(8ª…FµpK³3Ç@¼×$sB@G^r>H¼{ƒ(§xð3¸g9x“HR’`(‰¡$’ a(){„’è1BqB!B!B!B!B!B!B!B!B!’ Pì…t’âΨ/€Gt£ ªKnßOfu­r˜Ë$ÇóE…!…‚ú0h¨EP­Z5}šçÝÁ‰ <)†K(ãÇ׺¨çðþûïóy:. Èê;Ba w JInÞ¼Y‹á €ÍÚµkµ¤$j'&¨ w7ÂpèÐ!©U«–”*UJ*UªÄç óài¬„PÈ]cÖ|F…5”¼DÝg”¹œ4i’NG=d”ãD=̇^)ª¬¹ËõîÝ[k W®\YÞ{ï=}r,j£^ñ‘#GÔ;‹m~+¨Ô†êe»wïÖZÔXâ…ZƃÖ eE‹ÕW¡&|Ñûúë¯ëÂ2]»v•¶mÛJ¡B…´òçŸ.#FŒÐ}ÀÓmQý e4ãû‰ãR½zu)V¬˜VaÛµk—c:ŽQß¾}uØ—gžyFŸ¤‹²š8ÎØ–ëСƒœ;w.Îí¡¢¾c¹råt(ŠÒŸ&¨•ãlŠ(Ê”b»8gø¾.\ˆ¶Î%K–¨§ˆãIHr€…z’)¹sçÖZÏ[·nÕÿ§OŸ®¥4'Nœ¨Fe>a`çÎmÙW_}UŽi0Œ0²¨åŒ—þù§®†Û4h1Íß³gOÇ:Q‹õ¡aè N ÐÚÅ0f0„([ ãž+W.¿ôÒK2hÐ ý¿þú« R† ¤eË–º¾õë×ËÔ©SUdð:C]é-[¶¨ñÄ| .TãS¦LÑcƒ° 0öß•FéP”Ù7nœî/<0aÂÙ¸q£n{ݺuòàƒòÂ'É&Ÿ“ Fºoß>#¼€$*z¦N:ɲeËä·ß~SÃ1øùçŸzê¦P ®?mÚ45Ƙ"c†e`,ñ9´Ø^\ó'„ZöîÝ«!l¹ ÄÙ;vì˜èÇ ^B<Øzç0ðÈ…ÀS@2=wW|gŒÈ‚w¯!0ÌûÍ7ßȦM›<ÚÎ ÂzÈ­ _3|øðç…è „†{?2gάž…U”qì‘ûÀ4„í\þ„ÐcHå ´ @F¢€ÑJ½Jô²qzÀèåšquW&Ož,cÇŽÕX?¹0@è­$fÑKÅèÄùÑSmþ„cü'vˆo^óòþ€ý®ïjg()0­Ž¿ÔÌíüËÞr2Búüzßöé ~’;½Múo å JæøØDþ×&@Æï “¥‡G÷"?°…!5ƒõÿø[¥0$~9!?l“k!÷w~>!™Ó𼤈ÐaFì •÷ªGŽ]wˆƒ{«ÁÇ]¤a° DBîe 0$ û.EÿÁ®k™Fþgxe²Û¤Ø>ráŽ]&ÿ&kŽGƉ}sþâþҪ¯<˜Î&A7íÒçûP9i¼âs„†²¥µÉ¡+òáïá²çBär¾"ý ¯àñ|>flö»#$ÔznZÀGr¶ƒu¼`¬k‡!^uòøH› Ù;;BÖ¶¨¯t-é+é"§] ±K¸±Þ!¿„ñä&ëOàäYÄáHØF“ç@¼]¬s ^Fó‚¾ò‘aÔë­–•†UÕ_2EõæŸ/eäR~òÙ_áòü–P™{ \ņ¼KI?™hˆH—M!²ÿ²]>«ç/y2Döz•ñ“æ|eä®0 YÎlS±ˆ‰‚™l²xf]¨´["e²ÙŒmGö+jäò‘!Uüdá‘pé¸1Dþ2¶Õ¢ s÷Cm•Á•ýäÉ"<þ…„CaH&42zî¶ p4ô¾^Ãñpùí|„Ü4:«Ž…«/1ÒÀ?QØW–yÙ?‘Þ^Zhcôò—ü.kÿÃP¿÷[˜\7zñ­ ù8<‚¥Æ¼›‚"ÔSûkÜ=û)†Ëå`»»n—_ÏÛ Æ%\>ºŽÙ†(a[Sÿ “ã7Ø+½_ž'ÎÿnÀ÷çœÌ™3G¿‘'O)Z´¨œ?^cÿÒK/I™2e¤H‘"R§N™1c†c™Û·oË»ï¾+5jÔ ÈÃ?,]»v•}ûöź­åË—Kݺu¥P¡Bòè£ÊäÉ“Óð,¡—_~Y×U¼xqiÛ¶­:tH§ýûÖÖ¢E Dz»ví’V­Zéþ?òÈ#òÉ'ŸÄù½gΜ©û¾téÒ' %%~>axÿç³·þ›vîö'Ù ÷¤A Éø¡#܃°‘+¹ Ïà”ås‹Ó·ìšP;Y—;{Û«ÙÀòïX÷õÑ×Nߤ0$5ÕrúÈ”Çü哽aòÅþðd³_]ºtÑg÷ôïß_þøã}®ÏÓO?­1aÂÉ!ƒ8p@räȡ󇇇KûöíeÿþýÒ¯_?)W®œõY³f©q^¶l™”/_>Úv`Ü{÷î-”–-[ÊîÝ»õó¦M›Êˆ#䯿þ’¯¾úJŸ+4lØ0ŠM›6ɹsçt ,pÜŽý2¥cÇŽ*cÇŽU1†ûÂtdÒ«e}%{Z?9~Ý®CM¿8.~>"¯—÷SA8|5Bzü/T‚¢ÄfÊŸa’Þ8û#õ?›MV WqIߟŠÐF—’¾zÿÃÎsòçEz IÂ|MW†È•àÄ9æIñîQ£F©Ñž:uª†xZ4hdÉ’EC1wàspôàÑ{7{Å ôÔ_xᄉnݺ%ï¿ÿ¾#$„Þ{µjÕ´§ÍU®\YsàÙgŸUÈ•+—.7mÚ4 gmÙ²EEÞöïÍ7ßÔPÃ|:-„ĺÞðs C2 çÖ˜ ñwÎ74 oPöë`Çÿ!F‡#&þ}Ùéûµ¹ãvƾ‡Íýv­ÃL¿1D-¦é`þ¡pm&Ë›¦‘ËÁ<·IEb‰B’y9QFüùçŸ×Þ7zçèå#ÆŸ5kVÙ¹Óý…‰zK¡WŽÜ<ðÞ{ï©ÐôèÑCÎÈ1|÷ÝwòÆoHhh¨†|àI`»X7–C˜ ÈæÍ›5ïñøã;¶ƒ5û/áÕW_Õý3‹!Ç€PpÝÎ;SÁPצ|õþ¨zùHÑlòÁn>“‡Äí dÃÞ=¨U«–Ì›7O~úé'§pzæß|óT­ZUÃHÈE˜¡34ƒÞºuký ¯èñc>x$È[Ì;W= €\F.íÝ»W_­@LàXC\ð ð(V­Z¥¹ àºÞ…Ü5w G¡R Mž+æ/éü"G$Ú&ÛÏPH$¦áÄëõë×5 T/áÓ8#ÿãÿâ‹/Ê믿î•ôùçŸË‰'dâĉ:zôVþâ‹/T<&:zô¨lݺU‡¥"œ„„4„Cg1*iúôéjø1tuÒ¤Iòàƒê:aøñ?<S˜0š b„÷G}¤á,xîöƒÂ@ˆD†·žßÌg*÷à>†!C†è{y$qa´‘6s 4Ð8¾Ù3ÇR$™‘ >yò¤vÇ·ß~«à$™q<¼b½!œfÏž­¹'Ÿ|R=¬‚„¼<xØr¸WaáÂ…²x}Â~@,Æï5ÞA žœfJÐ|-Í?ª!í`¨üoù®ÏAC/ ½\oz5ŸIJ¿ÐÅ©îR‰»ÑB/ž”¿ú”r 縆w< %Æ<$ñÁýðŠ °f2ÜL”ã½ñYQãmpT já–fçÏ„Bœ 0Bq‚97,m™•¤h\‹µ aTZPŸ§Nè1B¡Ç0bK–a”!)ÑcÀݼ„PîÞ<4x·0°b‰/ % ‡ÕB…B…ÔCG„Â@I0 ¹ë™P!^*z‘BH¼¼‡»Ðc𺋟B( „B…Ü AAAú¼û"EŠH£F8&s?Ï ê1à1ÐyòäÑ2˜çÏŸ×' ¼ôÒKR¦L½~êÔ©#3fÌp,sûömy÷Ýwµ&s´2[×®]eß¾}±n 5êÖ­«e>Q¿e>MPìå9±.çAŸC‡é´ÿýW÷ÏÚZ´háXv×®]ÒªU+ÝÔjøä“Obý]ôë×OÊ–-«ó£þßþ™¢Î;ï|NìØ±C¸èñüt\L ÐKR2räH­GÊVž€b%W¯^••+Wê™a:â”íô÷÷—þýûk%4ÔWF©MÄ„ ´øÍ$GŽ:?ô×¾}{Ù¿¿X³‚ŠöÀ8/[¶LÊ—/m;0î½{÷ÖúѨù¼{÷ný¿§¦M›Êˆ#䯿þÒ‚;¨à6lØ0 Be6€šÓ(Ô°_¦ tìØQ…bìØ±*&¨ùŒéøn®¬X±BnÞ¼©…xà-Qƒ¸¤”ß…á>ƒ2‚:tÚµkkÙAÿõ×_?’¤ä±ÇSCï)ø <£7–6¤çȆÆ/ÒÔ ãþþûoi×®4lØPÿ¯^½ºc^ÔPF}æÅ‹;Õ|†q¯W¯žÖjÆ4W`ÜQp µ˜QÆ¥9ßzë- pæÌõP*T¨ ÿã77sæL}yPºÓ]gì÷ß×Js¨0‡ªp¨üBõ7wÂ`–ü´ c÷îÝõ·…jq %‘8ÁÅŠÞE·nÝôÇ7¥Íò…è­ôíÛW/f\Ô¨ƒk>Ðõoáò¢"Œ:\rü(¬î6æíÔ©“ºÎpQ7Ë`Yw=ô¦À¢E‹tƒ Òú¹%J”çŸ^®\¹¢e±ôÈ>ûì3]ßÚµkcÝWB¬ ®3<€yóæÉ7œ¦ýðÃ’3gN'Q0E¡Kˆ:P®T©RECø-}ýõ×ÚËGH %?AÏž=Õ»…§0mÚ4íÑ¿óÎ;:íÂ… ZÁž®ÝgžyF{øÀ|N< SD¶mÛ&GŽxVØóÂkI)¢@aH ~ @MÜ7ªm®.Ⓢi£0ÝZ\Ä&¸`1mçÎzñÁ•6éÑ£‡Š >B?ˆ÷z .|ìÏúõëeÍš5ÚsÂ~ ,€4Ľ¡½{÷jÍ^Oö•¤l+‚ÚË—N:U;耠Óð ap>Çõ„<®M¼Gƒ'„ò•/¼ð‚öæaüaÑ)2CB+V”jÕªiO̘1R²dIÍa€gŸ}V;M¸®ÑÙÁ2g!´ ÞöBƒká&³\¦ë~XÁoëÄöRÚ‰>Fó7ZZ£e0Z£-¯ÑŠØ½ ÃÝ´'ÓnœH»Ñûµ‡„„Øoß¾m7z.ö$ùþ.¦}èСvÃÐÚ‰Ýø±èþÙÞŠ}Æ Žy:¤Ÿ½ýøñãúÞèé;¦½½páÂúþرcÑ–_ºt©~†e]1zûvã¢ï.\¨óî¹cz¯^½ì†¡wüß°aCûˆ#ô}\ûJ’öúv½Æ¶^ãׯ_×kŸ[æõ¤™ëö¤Y1¯§;wîDÛ×üÑnxövíÚégo¾ù¦þÜatnìùòåÓõ,XP׉ftxìßÿ½NÃïûŠW˶Ϟ=[—mÓ¦ýÉ'Ÿ´_¼xÑ~êÔ)»Ñ©±W­ZÕnxìn“†'l7ø@s¸˜ÍUb×¾’Ô+ 0”ð‚ŒöAƒé2æ:bË1X×ã:Ý5Ç×¾’”ŸcˆONÜ?#Ç @ Ô–æÕÐŒ•ñ¦^kÙC4Ä/Ñp×¢ ñF…‹ŽG¸ÑˆxæÈëõ¼FôŠ1|2>aCOмÁ1ypðàA —ÁóBžÍ|š.šñ9N~pT já–fg(ÉËÁÐQÄJ .¬÷K >ŠñÞBƒNb‚ 0c®fœ B( ©”^½zi#„OáÏ„B( „Ïa؉ÂÀ‹ŸÂß…XÁ/>ôx3®j¤( ƒË…o½øñÏÂ-ñ„x+(ª”Ø¢@¡0x5xv žÝâi¯Š”æ-Äõ¼,ŠI•ÂàÎS0_Ó¤I£7>|ØQ”†”®cTCå4<ÇŠ¢@bƒ÷1¸¹Àq#n#‡ç€JQf³¹’TåïgAw’8×VRlÇz˜ŸázF˜ˆ‹É¦( ƒåâÆÉô"ðÂ3eðˆ]<?"óY3æ.&MÃM’ƒð˜×³y=Z§›Ó( „ÂGïÊÚ«Âÿ™d5òÖy\?§0äê‘X…Á,}‰ŽY’’FžP<øA™ƒ)¦áF¢ ”ÐÙq׉‰zºf’‹A£F´æˆY¥Í¤^½zR»vm)_¾¼ôîÝÛí²xÚ1þØ¢E‹hÓ6lØ­>Ä…€-Z¤~ð$YÔ—N‰•Ô( Éàe ƒù˜ëã¹cë™’\„Áwk†D]=†ä õ¬Y³Fß/]ºTæÏŸ/Ë–-ÓÿQm O(•‰Jl&xj°+„3fè¼(…ªmxÔü¯¿þšb*¨Q’ÁÉüY]m«÷›·@Hrç`vr¬Ÿäª¨¡íÛ·ë~‹0ùí·ßÞCÉ’%c] ?ذaCý®ð4¦M›¦£ ) †õ´LqpB¢‡@Rš@˜Íz=ßm)¹ç$ž}öY-ãÙ¥KiÞ¼¹ÖoîÔ©S´âD„ÂoqpMÜÅÕ3#$9]îÂ` #Åǰ'7¨_¿¾ã=î7B%Bë#lüüü$gΜZÿ^ÂÏ?ÿ¬ÃÏÛ¶mË „Âp÷?,×à܉Gs”r]›^ðýkg˵sŸÐÖÌ™39,‡“5)ýý÷ßËòåË5OÄtdêÔ©*ß~û­”-[–…áÞ‹!)庶¶¤öòçϯ½{+xfj¬*TÈãõ)RÄ)Ç€u@LòåË'›6m’'žxBJ•*¥ŸaDÒ’%KdóæÍ ÃÝ‹ƒµWC¤T\¯ß¸®ã{qwèÐAÚ·o/Ç—¦M›Ê;wtäÏѬY³¯Ë»W-S¦Œ¬]»V7n¬õÎáEœ:uJ*T¨À‹Âp÷â@A ÞÖÙ‰íZ¾—×yݺueÖ¬YšÆPTä*W®¬!ŸÀÀÀDÝÖ;ï¼##GŽ”ž={êH$x+¸¢N:¼<¿^ôj@óµ4ÿ¨€q„=.BRÖõjQ‡µ'OžÔñýI% $i9xð äÍ›WodDÆp`6ãs Ï Žj¡Q-ÜÒìôâÑÛ"„’`=BØñáA NÐc „b@=B!B!B!B!B!B!B!B!B!B!B!BHª¦Q£F2pàÀhŸ×«WOë' .Cž`Ê”)Žu£\¹råäå—_–óçÏ;–EÅ9×ýÀ¶¼ >DrßiР¬Y³Fßã˜Ï²eËôÿ´iÓÊÍ›7õý§Ÿ~ê¨ù .m](ÎÓ§O­Kàˆ@=´ :T«ÀåÈ‘Ã1=sæÌ²bÅ —þùG… åAgϞ혧W¯^Ò²eKÇÿ¨Ga „D$K–,ÚÀöíÛõé¯åË—wL‡ÇJ”(áTóÙmÄÇGræÌ)&LŠ+F›þî»ïª(¼ýöÛŸc(º{÷nY¹r¥Ó<ëþy %B¼ ôøÇ'Ù²eÓªuVP½îÈ‘#rûöm-7Šò¢;wÎíº‚‚‚ä‡~ªU«¦ªcHa „¤êׯïˆë-ZT?C¹R³Å„ìÙ³Gë@#7¡xíµ×ó\ºtIó (ùè£JHHˆ†œ¬ <Ø)Ç€õy %Bî}ÔÇÇm‰Q|†ižCnæ°BL-Z´pLÿþûï‚cÆŒ‘²eËê{x SXÌö žÄ¤I“¤M›6²iÓ&ÍG€W_}UZ·níXŸ»\…Bb!þüÚ3·‚pB5åã)EŠqÊ1`6lpüž~lÀ€#qúôi‡0`È+øúúFEKŽ¡T©R*:u’Çë(%;wnÍ?x+BÈ=§C‡Ò¾}{>|¸4mÚTîܹ#3fÌÐx³fͼ^,ÑGØFÁ3€W€‘NMš4q”;…8p@§]¸pA¦NªóZ½„¤¬á#$£­#›( „HôΚ5KÃ2Šš>}zMübhj```’îËøñãeÈ!ÒµkWõ6l¨‚eríÚ5ÍeF-X°@2fÌè˜ç“O>Ñf2bÄyñŽæ|Ùl‘2‰ækiþQ--""â/mBRf,¯fÃè4ô†ÑÛŰOâàþ $ÎC fÞlÆçHÂGµÐ¨nivŽJ"„â…B…B…B…B…B…B…B…B…B…B…B…B…B…BL5j$Œöy½zõ´hê2Xk([æA OwÓöíÛã6Q´@ºnW¶lÙ"O<ñ„+VLŠ/.k×®ÕϧL™"eÊ”q»>Lsݾµšœ7ÁB=„ûNƒ dÍš5ú†Å|–-[¦ÿ§M›VnÞ¼©ïQmͬù ÜÕZ¾råŠôéÓGë¸"УGmC‡Õ*pžV_Cáž… þg@ý¼Ó„R!÷,Y²hÛ·oׂ2¨œf ÀP\½t¦É™3§L˜0A*V¬mú»ï¾«¢ðöÛoÇß`B`Ý/o…¡$BˆW^ý¸qã$[¶lZµÎ ª×9rDnß¾­åFQ^ôå—_–sçÎñÀQ!)Ôb6ãûE‹ÕÏP®Ôlqa{öì‘÷ß_óŠ×^{Í£í_ºtÉ)Çйsg¯<Î %Bî}ÔÇÇQ‹Ú >Ã4O!7s X!¦-Z8¦ÿý÷Áˆ1cÆHÙ²eõ=<ƒ'ÂoÄšÌΔ)…BBþüùµgnᜠ  )T¨Çë)R¤ˆSŽëذaƒãÿ|ùòź<’ÕÈ_œ>}Ú! Xr¾¾¾qLc¾Ò¥K{ýù¢0Bî9:töíÛËðáÃ¥iÓ¦rçΙ1c†ŽjÖ¬Y‚׋åãc¨1úÛÃYôþá±`¤S“&MT0<3ÙmR©R%Ç4„¡¼](( „{½³fÍ’I“&éPÔôéÓkâa™ÀÀÀ$Ý—ñãÇË!C¤k×®jØ6l¨‚eríÚ5§ð<‰'N8¦AØL .ðºóe³EÊ$š¯¥ùGµ´ˆˆˆ#¼´ I˜±|¼š £sÐÐãEÃ>‰w‚û7òæÍ«‚†< ٌ̼ϑ„ Žj¡Q-ÜÒì•D!Ä !„ !„ !„ !„ !„ !„ !„ !„ !„ !„ !„ !„ !„ÄÀ£>*&Lðxþ~øAjÕª¥~Þzë-@ !$%²cÇiÓ¦+VL+°¡ÞÁÖ­[=Z¶yóæòÅ_8þóÍ7µ–ÃÊ•+åù矗µk×zTaäÈ‘R£F }ržfÝf³¾ªº½ôÒKR¦L­W§N-&”a¡BÈ=åÖ­[ZÁ­víÚ2wî\ –_ýU«©yÂÓO?­BP†óرc2lØ0­œ†¨ 7xð`§’Ÿqªm(Òƒr£kÖ¬ÑÏz÷î-çÏŸWï%C† *6žî#…BâÁ™3gäæÍ›Ò­[7©^½º~†ŠnVöïß/7–C‡ÉC=$”–-[:Œ8Œ? ϼð úY÷îÝõµ@Z7æmݺµGû…õYë<ÿý÷ßÒ®];­èÌ}M0”D¹§Àx£wrš7n”ðððhólÚ´Izõê%ëׯWÏ¢OŸ>ZFÓJñâÅå믿Ö÷S§N•½{÷ÊâÅ‹õÿqãÆéÿwS?Ë¢üè¼yó䯩úœQ!÷ôÊQÛ1ûW_}UªT©"Ÿ|ò‰†L@O9ˆ_|QÃMÿüóÓzüýý%kÖ¬ú>S¦L’-[6Çÿ3fÔÿ1OB5j” 0@E§B… 2hÐ ¹rå …Bî™3gÖäïž={4L4~üx™2eŠc:ÂGV!!!Ik }|4Tµ}ûv™3gŽüøãž¢0BÈ=$ @ãø=ö˜ìܹÓñ9ŠÔ's9«÷q·`5kÖ”.]º8ícj‚ÉgBÈ=e×®]zïA¥J•Ôs@¢ÿ÷íÛ÷®×>}z +!GQ¾|yM”3gN–…˜˜‚rýúuÍSàþˆÀÀ@9{ö¬|ùå—z…B™téÒ©áž>}ºæ6B®ɿĹ1cÆè°S 55G3¹b·Û5\^yåY¾|¹¾GÒ9£GêgHz#_Ñ Ayûí·Så9³Ù"}14_Kójh†ªáåMHÊÐ|5›Ù; ““'OJ‰%RÍñ¸té’¤I“F‡¼Âc'àÍ]•rÏyë­·´*Úºuë´¢› ÄÂÉ ùùIÉ’%õ}éÒ¥e÷îÝj¬ÄàÎ;²bÅ =zt´mœ9sF½x víÚ2sæL}¿lÙ2©Zµª£jÜØ±cµl'„ªaƲpáBÇzJ•*%Ÿ|ò‰ÃÛˆkY !„Ä“+W®È¶mÛÔ š¢`­·UU,ÚrAAAj|a”M†îXÞ•ž={J×®]%GŽê… 4¯ÃôX*V¬è˜åE³fͪ†Õ¸£vêU«´.õk¯½¯e) „â!çÎÓW”›4yá…4\s@Íe€<ò f9ÒbÅŠÉСC=ÚŒwµjÕ´tgHHˆæ ªÈ#X=)S&-àc‚üÂC(æÓ¥KiÔ¨‘ÇËzÌ1Bî)è]$ŸMÇ_³fÔ©SÇi^ä6lØ  yôþ‘ FO>.@ÂxçβcÇÍ<ñÄjØQ¼Çu(ù™>}zÇÿªÕ«Wk"ú»ï¾“×_]?÷dYz „5n?oÞ+O>ù¤&•nš0a‚ Vݺuå§Ÿ~ÒDsùòåu~¼_¾|¹ÔªUK×Û²BI 5kÖÔÑD¢Š¡ŸˆÏÃ#ŸÐ¢E Ç|×®]“úõëë{Œ5BJ˜7.fÏž-£FR#ª£šo€WÏáÃ?”ñãÇËûï¿¯ÓæÌ™£¹„Ca‘›È•+—†¯Ìû$b[Ö[±¼Í×Òü£¤< ""â/mBRèm›¯f3G¡G~òäI¯ƒ¤vpó¼&„ì|||´ÁÌ›Íø¼¨1[pT já–fgò™BˆB!B!B!B!B!B!B!B!B!B!B!B!B!B1A‘ž ü'<²eËʾ}ûdÑ¢E<1BHJdóæÍ’={v'QH(·oßÖ*gk×®Õ2$:Ì1B’„U«V9å¦M›æñ².\ÐebÂ,[І÷1zÒÈO ÎtñâŵŽ3¡Ç@¹OÔ®]Û)™œ+W®ÈÞ©£Nµ|†iùˆ3gÎĸîŽ;Êÿþ÷?}¯!'w y]ªT)ÍK¤K—Ž'…Â@¹ŸdΜÙmè&þüš ¶‚pOPP*THÿGâúË/¿ÔðF¹2vìX¹qã†CDbÞBáÂ…y2( „äÀ•+WdÏž=ŽÿaÀ‘ îСƒg>|¸4mÚTîܹ#3fÌÐ}³fÍtÞæÍ›K•*Uä•W^‘^½zÉ£>ªÞÄ¡C‡T(0•P!) ÜoÃoƒŽ¡¢uëÖÕ×I“&Éüùó%}úôR¹reYºt©F*??Y°`|üñÇ:’hâĉ ÅŠ“ ¸Ýž5E⇠àÕh¾–æÕÐ"""ŽðP’20ãõx5²f‚öäÉ“R¢D ¯ýþ¸iíæÍ›Ò°aCéÛ·¯z© Œ¸Ê›7¯øúúª0¢ÁÌ›Íø¼¨1[pT já–f§Ç@ñ*Ê”)£¯åʕӤ4‰?BˆW±wï^¹uë–Þá!BHª&[¶lÚHÂaf†B…B…B…B…B…B…B…B…B…B…B…’Ú@!k½g´îÝ»ë´FÉÀ£-S¯^=§R áááZšó£[É’%¥U«VZç!¦m¾øâ‹ŽÿQá õ Ú´i£Ù³îCŽúß|ó O–ð!z„$å9‡ âø?¶œîèÑ£‡lÚ´Izöì)5jÔÐÚÛ·o×úÍqR¡]ºtÑ÷óæÍÓb@À¬C}ýúuY¶l™Ön@5¸ *P!ä^“%K)_¾|‚–… ¬^½Z>ýôSiݺµ“W¡¡¡òÒK/ɵk×dñâÅ’)S&Ç4kjìêJÿñÇ^®„äÎæÍ›%{öìN¢à ?½úê«rìØ1Y¾|¹ŠSLD˜…~( „rYµj•ÆóMÂAXÈ.\¸à´¬+féR`–³6lÐ÷7ùûûG[^H¾|ùT@ øá‡eË–-êôéÓ'Úv{ì1Ý—~ýúÉ;w¤zõêú¨z‡Òa¦IU«VÕÐÕˆ#4T¡±‚0ÓÈ‘#Õóظq£4lØÂ@!÷ÜoÃoƒ>kÖ,©[·®¾Nš4IæÏŸ¯CI+W®,K—.•ÀÀÀHCåç' ,?þX-Z$'N”€€)V¬˜4hÐÀ£í¿ð òûï¿ËË/¿,ëÖ­‹6½~ýú*R á€0¥Vl¯Fóµ4ÿ¨€q„—5!)3ŽŽW³™ÉYŒý?yò¤ÞÐE¼“ƒJÞ¼yÅ××בˆ‡™7›ñyQc¶à¨ÕÂ-ÍÎ!„'( „B( „B( „B( „“È1&ÿ½Ba „Ba „zŠ ó) „B( „BÏÂ@!„Â@{‡„P!„P!„P!„P!)âAÍf4Õ©V­šŒ=Zk-ÉéÑ£‡ÇëC½s}f æN$X¨‡’$Ô©SG† ¦ÚvîÜ)£FÒB<Ô^¾zõªÇëºpႼýöÛR£F ÇgiÒ¤áA¦0BRf}eP¡B­Ð¶ÿ~ýÅŠrúôiiݺµþÿË/¿h)NÔ‚FÍæFÉ’%KdÇŽréÒ% UQ@™N’ø0”DIR>Úµk—}Ônv†¿sçÎZ¶‚Rœ¨mrñâE}íÚµ« Då> =BH cõêÕ’/_>-1Šr£-Z´¶mÛF›oýúõrëÖ-;v¬dÊ”IÊ–-+Û¶m“ï¿ÿ^§C0Pÿ5™>Z»v­ôë×O2gάu¤ =BH y„ 6¨áŸ>}ºìÞ½[úôém¾³gÏJ–,YTLPÃØ òð6’4hŠÖKè1BRÖCéÒ¥eÏž=2gΜhóåÌ™SÑðÒ§O¯Ÿ™á£˜ ‘ 2ð S!)‰7nÈ4ÇpôèQY¾|¹öø]iذ¡†ˆ† "/½ô’?~\Õ€Ô?ÿü£C@@€®çï¿ÿ–ñãÇó S!)‰­[·JýúõõYN¦ŠÐŒ¿+9räPObøðáÒ´iS•T»vmùý÷ßÓ§L™"“&MÒu•(QBæÍ›'+VäAN$l¶È'n¡ùZšT @‹ˆˆ8ÂCEHÊÉ]׆ž:ZPPÓ”ÄàÁƒå·ß~“5kÖðäÆÁÁƒ5'ãëë« &ÞÇÇÇ4øø¬¨ñ68ª…FµpK³Óc „$K!hРÞÑ|øðaY¼x±tïÞ&‰ 0B’¸—á7ÞÐW„Ž0¬µoß¾<0BHjåÓO?åA¸Kî¦.ïc „Ba „=HÂsMa „Ba „¸ë9bcXXŽ‚óêççw×Þ…T†¿¿¿>n‚x8¯8¿ô!±z Ö#ÞãÑxPY=x8ŸgΜÑgFá<›Ízî=õ( „¤"¡ø?{g›6…ahY²`“p9½GïÀ X²¯*E9D¯ÀÊ m7MfÂC4<¿Á†¤à‰¿OA›…-½/ÿ3Ëuˆdq:¹q¬ªªÃCo _äüÉy”ó)Røˆ'ÙqÀ'•€,ƒ‘ú[ ˆ,“°ÝnÏJ–Þ´<'AKhX¤æáÿ¦¾T”s(׌d1ÁÙlvxF…•4Š‚ôP0¤˜ˆ¤˜È…JiAèu•î%‚ÜÄsëŸëö œËzý£ãºHzÄi1 …c¡ ‰ÌI‰? OU s$†<C½—Š1 ¸°Ä+m ’B‚…ß*þ·‰¡ûyÔ©!´•b1X¡4ƒž)„yC>‰¡Kj 1@²¸Äm£PHâ÷!Ïd¢Sn#]ÛRB *,RàãÖQ¸ÖÐvÁ1ô79hÄå¹65 €Ê!Aÿ”ä' Ý*äâ3\%Ý«Ö÷=@^‚xoûè1øzÀÀäy&‡Rh­ë$ Jã~Èó|~Ôù›&€“K…@¢¸¯Àß»]KŠ0Åà¨A+ `…§kÁ'Qä)CV}÷©Ä`íä8üø4¸¶þGgâÄq'çÜoŽ%@æFpîo[Z°ÄPiÁív»')@Þìkùc¨ë]ƒ/ì6’[¯×ß÷¦yæ°d›ž¥–'Äp"ˆqÔ[,Sc³ÙTóùüÇb±x˜N§û}¾r˜²Ÿªª~®V«oËåò×~êe?^£ÑDY‹!H`Tq=&õø½Ž£¶ûÀý8éö(ü«¥^_”Ž‚˜$¾ÔG_}oˆ¡D ½ƒ7ÄðjÈÀ¼Îú¹jø‰jYAaXh¥ŒX àöBÐ5<•â„à ãâó¤å‹­x¤J ˆà¾bÐ-¥X.‘7¸ùâ´]6pjÎm$€~I·"ÕFò:1Ä‚ˆ7t*Eè‹Íˆ b(”¬÷ÞHVR©6,£¹ðÞb€~É!•RRH®•ä•,I ) €~¡H~æ³"%+9èyKH rHfû¢lYU±ì8ùÈ"5—L v€¬ÅäM€2/q‹ ›’IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/help.png000664 000000 000000 00000063641 13703317554 026266 0ustar00rootroot000000 000000 ‰PNG  IHDRf@î pHYsÄÄ•+ IDATxœìÝw|Wº7ð3j–eËr/¸wãN3¦Øt †PB °Ù´-ÙMr7›Mv³ï½›º{ÃnzBKB¨CB€PŒÁ•â†ƽɶdÕ™÷!ºŠ\p—~ß?øHGgf i4ÏœF1 C~FÓ4ó3Bˆá¿0±Peø/‹ÃáUãéÑ¿DLdF)‡Ãár¹„£¬à^JÀ¦Z­V§Óét:ö)R€‰Ë0`ó†ax<ùeVÀ#ù€Z­V«ÕF«Õ곤‘¾§‡Ãáñx|>_ BŒ²ža> P(º»»•J¥Z­6Ì Ú &£ö'„B¡¥¥¥þUòsVÀÓçr¹\*•Êd²ŽŽ…Ba˜B ‡Àø¤FL~N Ø|ÀÊÊÊÆÆF"‘°—ô@ßVÀÓ·H¥Òúúú†††¿þíï&þ;`¤ýí¯¯»ºº²y‚>s`†£ÓéÔjuww·L&kllD>ð@zã¯o644H¥ÒîînµZÍÎ*t/%Ðh4J¥²££ã¿¾iê8`´¼ñ×7;::Ø”€n”¦iŽN§Ó÷2u„0ºär¹~Ø0;Z˜CÓ´>+0ux0ºzN.Êa3vÞ!S‡£Ëh 2†a8„6%Ðét¦F—~™½{)Ö0†í÷:é_CJ`†î¥h%˜@¼½<ý|½¹\®a!—ËõóõöòôègÞ]„x£#üRxØä~^½Up{à»âr9"‘È×ÇûnE%;*˜Ëåúúx …ƒ]]€sÿ*0ÎTVÕ(•*¡ÐÂ×Ç›Ëår¹\__o¡ÐB©TUVÕô³aÏÎAh%S=[úo=è•N§»[QÉ6 øúxŠ-,”J•¾Ñ`àôÉËÓÃÆFÜO…ŽŽÎªêþîÊì€2´|€ ãÀpPeê† ­}2U À@èÇ+•*BÛƒ‡Æ»!ŒèéÞxâŸÇBôã › ãÀÄãíåa8ž˜WÀÎAäíÕߺ=¡•`Œ jåþiµ:…BQYU£o`³o/­‡t½rÐétåw+»+t0kœž«—€ù@+€YãBÐP`n˜Ÿ¡•À¬ÝK ØüÀ´¡À0ºøùIH—¾Üà9E1R{«Î{Çu¤öc€a˜Ö–æŽÎVkêXL€ËãÙˆm(Š2u,2ò)AÈé¶7„,PÜÒêTDÕ"”W‰Õí#¶k­-Í …ÜÞÎŽÃAe0G4MwttâèälêXzѳsÐȧ#Ûÿˆas{>‡«µ’´ÙÌh`„Õ¢ŽB;Z‹S À8ÕÙÙaoo|Ì—Ë•H$mmmã3%èi¬^Ì0„hyºVg]«3!ŒµsÍÃeí·­ºÊlÚÔÁ@Z­ù˜9‡£8ç&@JÀŽÐ?Ñ6º‘f[÷ kïšÆËn´škÂÈ Wýt¡f_¼&ãÇH „|{VQi´ZM!:J]å˕غ/ËoLqVK1À`¼£(jñâÅ ,pss#„444$''Ÿ;w¹€ÉM€” «[Å>àq9V|…J«£iBÝn«ížá2ïfÃ%GM‡À¤1À/µØÛÛ?ûì³jµúÛo¿½{÷.!ÄÇÇ硇ŠýðÃ[[[M&¢_—`<£Ã04ÃЭ¶C¡äs‰ÏaKènª0Ò9®‘ÃǨ€qŠ¢¨gžy&//ïwÞ¹uë–\.—Ëåï¾ûnNNÎ3Ï>þ»ï¾#}Œ9>sæÌêÕ«/\¸Ð×®RRR233ÙÇÍÍÍ}5)<üðÃׯ_¯®®Z´&_RŠú™iÃód²”à¡I2[ÿÙ©M»oMš¦Ù¯Gg·ŠÏãXYðº”BˆR£ãs)µ–&„(Ê|ì¢ot×YÈ¥ÆÆF†aØ eÃBCÃBC7oÚøî{ïÿðÃéØû`444¼õö;:nÈù€!@°,a鑣njÊ-,,–%$ ÿF.^ºäâê’=œŒqÌ0\]]+**úzµ¢¢‚pÜ—ÖÖÖ²²2ýÓeË–…„„h4šÀÀ@…Bqüøñk×®=ùä““'Ož}úêÕ«„?üpß¾}‰‰‰"‘èøCÏ=ôÐC ,xûí·[ZZ-Z´hÑ" ‹¬¬¬£GnܸÑÍÍí½÷Þ#„PõüãÖ­[sæÌùýï¯T*—,Y²nݺ¿üå/MMM3gÎܰaÃþð‡µk×:;;7449r¤´´´g [·nuuu½{÷.ŸÏooo'„øùùmܸqÒ¤Ir¹<99ùÇâû0`&K „ž³þëǺÕJ×ÍìŒ;Gg7O……JC«µZ‘€'WiiáêÞ¥j®®ÍÅʧ£ë®ÍðcÛ°q³Z­&„p8œààà-›7-\¸àϯþIÙ­¼pñâð÷?('OöÒÌ:2™L"‘$&&ö¼¼^´p¡µµ5[aDŽÅR*•{öìÎÆ>f)†w»Ùm}ÝÿæñxjµºŸ»ã‡Ë½7ç8{£pòäÉüꫯfÍšµuëÖÜÜÜC‡^¸p!++K¡P¬Y³&$$ä“O>qppضm[mm-›“lÚ´éĉ½65Ì™3'!!áý÷ßomm2eÊêÕ«÷îÝÛÙÙ¹cÇ©Tš––öÊ+¯8::¶¶¶úûûÛÚÚž={666600ðÖ­[‘‘‘J¥2""ââÅ‹ÁÁÁEEEöööÏ=÷Ü¥K—8ý /¼ñÆR©Ô0.—ûÌ3ÏÔÔÔÖÊ•‰ Ã\¹ruÅŠ‡õ…ÞÞÞßøº­­mEâ*ÃÊ¿ýÆËËkÇ“;‹ŠŠ!îîîmÙÛ¾m[tt”••USsóùóç¿ürF£a«}*ÉÞÞ~ÓæÇ*++õ{~ù¥?>òȪÿ|øÑßäX WSSãããÃÞïÉÛÛ»®®®ŸÍW­ZµjÕ*BˆV«}þùç !R©499™’‘‘±fÍ{{{¶…_©TvttBbcc=ZVVVVVͦ—.]JIIéyˆ   yóæ}üñÇl¿£ØØØ›7oÞ¸qƒ’žž}îܹººº˜˜˜üqúôéÅÅÅ---åååååå)))ááá/^ :wîÜ”)S:;;?Î0ÌÝ»w§M›6}úôóçÏÆàíííèèø¯ý«µµµ¢¢"66– F&“ùøøˆÅâ¼¼¼!¾ãƒdâáųíŸ]éñ£ëo0PÈC„'$´NW^\Ð!mcF­ÕqMaF«£ÙµÌtJ>ß’ËáÊÔCŸ}þ…T*µ··Ÿ5ëÞ×ÕÉÉéË/>[³ú Á;åB¡påÊÄÝ_~îääÄVàp8ï¾óÖ3¿~ÚÍÕµ¢¢¢»[9gÎìO>þ0fÆ Ã=¯]»öo}ƒÏç_½šZU]=uêÔ]»þwîœ9ý# ÷ïÛ³|ùòªÊªääËjµ:aéÒÿü{WÿC-,,Nüž²2q…a¹¯Oddĵë×¥2Ù`ßGGÇÝ_~¾jÕJ¡PxçεFþøÖ­:mï-?sæÌþâóO-\hoo×ÕÕåàà×ÏÍ!ÄüÜsÏnܰÞÉÉ©ººZ*•FFF¼óÎ[±±3 ëDFF|öé'áááyùù©©i¶Éã[·¾ú§ÿìŸ?c˜-Ê@JJÊŠ+؆#\.wÅŠ—/_îù’¾c}rrò[o½õÖ[o½ûî»lIGGû*ÛW€ÇãéM(Š …"‘hÓ¦M|ðÁ|àëëkggÇV¨®®îõ‹-¢(J*•²%vvvÓ§Og7_²d »yZZZll,‡Ã™:ujVVEQEEEAAAááá---©©©...NNNÅÅÅvvvmmmú÷¡­­­g lCw{{;ûTÿ૯¾ª¨¨xþùçÿò—¿xzzöõÎÀøgšïÞ˜²• JwÜ‘3Ó_´ð ÿ«ûË—Òœ¢^«yÏ!.$û+ÒQÇT”Þž=ƒÃ媴„CQ:†Ñè‡bh†"„¨ší-ÝòjëU­V_»v}É’Åááá—.%Bþðâï]\\:üáGkµZ@ðÚk¯.^´èé§wþ¿ÿ÷?„uëÖÆÄÄdgçüùϯ±W®6¬ÿío^xù•—Ö¯ßHÓ÷R{ÃѱÛßúôÓ¿zé¥?¤¥§ëëô¤R«wþê×µµµ„@°ß//¯¸¸¹/^êk.wî§Ÿ^xá¹%KïÚõïîŸÛ:V­ZIIJ:1Ø·%>>N,_¼xéõ7þÊFëâââéé¡ß¹!K¡ðµ?¿Êçó;öÉ'Ÿ) @U\\2‚1ÿçÃ?ÿâ ý>7nXÿ›ß¼ð躵™ú:"‘(++ëO¯¾ÖÝÝMñòòújÿÞ¥K—ìú÷úºƒÕ« !W¯^1cƆ >¬Óýßm#‡³aöå¹/R©Ô°Ù¶/ ða*•ª»»ûäÉ“ìK*Õ½5Žúúm=tèPHHÈ“O>ùöÛokµZ©TÚØØøý÷ßn•••µzõêøøx‘HÄŽ”+..^±bETTT^^^MM\.øá‡ÛÚÚš››e2™~ÿöööùùùF1° ¶¶¶ì¯X,f{Éåòƒ&%%mÚ´iÛ¶mÿýßÿ}ß¿`˜LÙJÞôÏýu^åË;§(Ƶ¯šB¹žpùD«Ñ´4Ö34£Ó1D§eh†¦Ù% †f4íV|[Õ(EÛØØH±·³#„ØÛÛÇÅÍmkkû÷>Ôjµ„µZýÅ» !úü¬ZEyïýêïd:t¸µµm’››¯¯~·r¹ü›oèŸ~ýÍÆ¦&''§¨¨þ&Hþî»ãl>À:5-âãíÝÏ&Š’Ëå/]‰D -d ù|þ²e R©ôÊ•«CÈeUJ%!ÄÕÕÕÆæ^­ÆÆÆë×oôZ9.>N"‘Ü­¨ø×¿>P(läY×®lÌ•†9Æ•«©„ãë>ÿb7›BªªªÊËïRåí=¸©ëx,ódt»ôË/¿tvv~íµ×bcc]\\\\\bccÿò—¿,\¸Ëå¾òÊ+¶¶¶}Ýguppø™……[hX}ÐÑÑ6iÒ$±Xœžž>oÞ>>ñññìƒE-[¶,((H"‘°?Uƒ½3 ã‡é¾ƒfâÕ‹5J]AázqÚZ§ë1NÎly¡¯šVNÄ-šÔ\#²¶VG—I„šÖ1EaC¸„­’/´×ŽR¨‡¢Õé!ÁÁÁEÙÛÛ_½rÙ¨š@ àr8>>Þ„o¾ÞßsWNNNwëêêô]Ø !:®¤¤ÄÅÙÙÏÏ/;;§¯`îܹcø”£ÓÂÂâ¾Å©S?<´|ùÊÄDvö¤… ØØØ|sà[6±¬KÉ—7mÚ:ù»cG~:þäÉïõ÷cz  "„\¿v}° ×*æ¨ÈÈ5kV‡……::: ÷Ö´ ß™ò¡¾C8B:;;wíÚ;o޼͛7k4šººº³gÏþñôôô|å•WÞ~ûmYo½Xãââââî©ûŸÿùŸ¾ñÃ?<öØc¯¼òÊþ󟤤$BÈ–-[D"Qccã7ß|sßårù¾}û^xá…¼¼¼£G.[¶ÌÞÞ¾££Cß\žž>eÊ”¬¬,ö)MÓ¥¥¥ìïò­[·fϞͶx´µµ}ôÑGk×®]´hQCCÃÇÌö#2DÓôgŸ}¶eË–_|±²²R?Ѫ½½ýâÅ‹Ammí@">§¬¶Îê«¿™-þ ³å·„ôÙ[FâNj®•RA3 !DÇš0„BÓ4{½ÞÍçZŽVJàîîNimm!„ØˆÅ„ŽŽŽ¾ÆÅZ‹Å„†anܸÙóÕÎŽÿ›eŸ½_þ‹W;; !–––ý£ìî¥gÎ@’ÑÜÜܪªªˆˆpJ¶ÎÉ“'ï»a¯ ÅÎ_ýzÃúGW¯~$qÅŠÄ+ŠŠ‹ß…=+[Y[BÕ3g°1?´|ùŸÿü'Š¢rssSÓÒ …••ˆ]»ÀH¯]›•ÍüX —‘‘‘‘‘aTøî»ï¾ôÒKžžž ‡6zµgPSSsöìYöqWW׳Ï>Ë>.,,|õÕWõÕŽ=zôèQà ó›ßô•¾¼¨¨è¹çžc§¦¦¦ö˜1ÂÚÚº³³³Ðàgî“O>Ñ?ÎÉÉÑC)..î¼Q ÕÕÕo½õ–Qo¿ýöÛo¿í5T€Q2.RBHIûw %ûy\±V×ç W5!„Ð:š¡iBˆ–ÖE¡iš!4!„VŠ?*Ë­­­§OŸFÉÍÉ#„ÈårBH[[ûo~û»^ë³(Šzã¯ëÿ"X,•8:8BrùHÞ‹S§¾î¹g“N$EGGÝÌή®®øæF¹Jww÷Þ}û÷õõœ9³·lÞñïðØÖm=çŽèV(!¶¶¶£ó3Ïmþ¼yìÓ¤I„_?ý+ÃEýýýŒn$óx¼?ýéöÖ;ŸÏùå—D"Q}}Cþ­[#ø‡jooOMM³µµ]·vMGG;ROMMÍÝÝJ ‹3¦³%\.÷×OÿÊðÂ}Ú´©qsçòx÷Þs>Ÿ/±‘BärãÞP„Ë)W …ŸŸßóÏ?Çö¼çr¹13fxzzB¢"#:wf÷î/zJu 1«Õj¶›¦~dv@€ÿÓOÿj`ïÊ/TUUBæÎ«/Y¶,Áßßo4Žð 2Å`ÎQtâĉ_|qÏž=:ÎÔ±À„aêoá Œ]Ç!­Î‘ÿˆŸxž×úng‡úÅ(LŠPùò]ýl^q…tÔBˆ½CÓ„0 ¡ØD Ú&„p-•Ú‘h%8tðÃ0‰„UÜÕÕõÿþû23³ôuÞ~û]ß}¾ùæ«¶¶6µZíààÀçó>’|ù2!äÐá#S¦N™;gÎ;ï¼%—ËÙe ,--ËÊÊŽû¿µx;::æÏ›7göìúúzggg¡P¨ÓéÞy÷Ý~f ¾“§¾Ÿ7/ž¢¨ž›¬¥¥%ëÚõÓ?þx/lšþ¯ÿzuÕÊ•=¼ÜÏ××ÍÍ­££ãúõ?œ>m¸ŸÂÂÛI'O>öØ–š¦oܸùÅ—»sss‡ÿWô#33³©©ÙÙÙ©¯^C¬>þ¤®®nÕª•Ó¦M¥(ª¤´ôã?™:mо¡#55ÍËÓsÊ”)®®®„ÆÆ¦'’¾=xHÞÇ@ˆóç/466>öؖȈ[[ÛÖÖ¶ÜÜ\¶‹TZZúš5«++«jjj‡óÞ½ûÔ*õŠùùùÊd²¤“'?ûì ÖœJMMûíï~¿mÛã~¾¾aa¡µµµ}üICCÛûëˆ à$‘ض¶¶:::"+ó¤ÓéZ[[%’¡ ¡4 ª©©I&“555ÿã­w†¿ÇN÷²ÚH”í›ñ1*ÀmŶބv¶QE§T$¶%„ÃÐŒF)ç Å ÍB¬Ü;µí|mW/“Õ@?Æ(%ÐétYuï]ç½Gq­%´npÛj5jšÖ2:ÚÒÆ–!Ã0¥œË·`a†âÒŽ‘çÝG-|€ÖØMÄ0D7¤öCyG›@(â[XRÅ0 !ŒJÞÁ³°¤8¶ËûœY¾=­ž`sdddΞgê(ÀÜM€ÙREb;BaÃ0ZµRÕ-ÙØSÅvrŠnÑIŠjkG 01M€”€fZ§Ó¨º Ãð,„–6öl!B×iM––ºætWSÇ0QM€”@Ñ)åñ|¡ˆÈŒaB‡O{Í«Ó6‰šsœL À6R ‘˜°sŽ2 !„â0ÁŽ“eÒ§îZ+SG0±M€”€Í!|+­­Ü1¨CQiÓpÆ›Ñaõ€áš)sd;ßJgí¤$jž¢Úºñ¼­á˜:(€Äȧ²Nk++åHíM¡°àu µ­¼¦>>?þø˜ÌV«=vìXqqq?uÊÊÊ>ýôÓµk׎Y`†á_?X[[GFF.X°€ËåŽll`rH &žK—.¥¥¥™: €vþüùþó–Z­>räȶmÛÜÝÝÇ *€áëîî>räH}}}ÿÕ(Š‹ÅQQQ³fÍ¢(jlb³2ü뇮®.v‹/¡ `¼@J0ñäååBž|òI\Á£¡¡áÚµkF…“&M²··ïêꪫ«S«Õúr­V{úôé§žz —M0þµµµ8p ­­m ••Jåùó熙3gÎhfˆ½~‘ý %xð %˜xØö>äð ÉÉÉaFÿT lÚ´ÉÛÛ›}ÚÕÕuìØ±ÊÊJ}…úúúÊÊJŸ1Ž`Pªªª:ÔslLÿ²³³‘Àh©þÆcÙoÆ R3òæ›oöóê믿>f‘)++3|:þ|}>@±¶¶~ôÑGwíÚeØVPZZŠ”Æ@VVÖÍ›7;:: ³ÖR«ÕCت££c°› R01FcÔ­"$$ĨŽH$ (,,Ô— °'Àpdee9sfŒ:„,`˜LTýßòïUÿíýï3Áè‘ËåF%‰¤g5çƒíŒ07oÞ4uc) HEE…©C€YDD„þ1ÇëuܰL&3|*F=,0{èÃf)˜˜­­íêÕ«û¯£T*Æ`Á2/¿ü²©C Sp Ü8qB£Ñ˜*€ Z `¼»páBII‰a‰»»;0†ÑCÓtJJJNNŽ©:988Ìœ9súôé&9:˜!¤0~Ñ4}þüùŒŒ £r¬’£êòåËW®\1a­­­§OŸ¦(jÚ´i& $µµµ¦Æ5¤0Nutt=z´¦¦Æ¨<..ÎpÕ€—““cê!$33) „N§»téR^^Þ‹‹‹›={vZZši“a0!Œ%€ñèÎ;Ÿ~úiÏ|`Ö¬Y ,0IH`>:;;M!„´´´˜:˜.]º”––6œE…çÎkaa1wîÜŒ &´À¸såÊ•K—.òùü+VNWÚÝÝ}çÎŠŠŠÆÆÆîîn¥RÉår---œœ<==쬬Æ6pÈËËæø|¾þß¾¸ºº†‡‡»¹¹¹ººóp0!%€qD§Ó}ÿý÷¹¹¹Få...kÖ¬qrrbŸvww§¦¦^»vÍh"BHgggSSSAAÁ¹sç"""-Zdmm=¡üRPP……E~~¾©ßpÚÂßßáÂ…nnn£z0-¤0¦õ×ñÖÖÖ¶¶¶ú—”Jå‘#GîÞ½k´ÉìÙ³,XÀårÙ§MMM”J¥ýˆ¦éÜÜÜâââ7zyyÜ_0 ‹-’H$H `B‰‰‰aaa„îîîüüü²²²†††_|‘òþûﻸ¸DFFŠD"S ”ÆÃ0{÷îU©TìÓ™3g&$$°5Íþýû ë‹Åâ5kÖ&nmmݳg~÷¥T*¿þúë-[¶`D2Œ1>Ÿ/KKKM ÀPXYYmÙ²ÅÕÕU«Õ¦¤¤dddhµZà r¹¼¼¼¼¼¼üÂ… ±±±óæÍãñpa9Qax1Œêêê¾®æOžŸÿøã»ºº¶··úé§W¯^5Ê étºÔÔÔO?ý´½½},ƒ„„”ƈR©LJJêõ¥ÒÒÒ‚‚Ã’I“&mÛ¶ÍhÀ­[·{nîíí=wîÜE‹M›6­×!Å2™,33s± ‘ÍO<jê@Ž ºoµ+V899µµµíÙ³§µµu {nmmݽ{÷+Ãxƒöu Ô””œ;w®¯H©©©F%E;v̨°¢¢Â¨„Ïç?úè£ú’%K–;v¬gW‚‚‚¸¸¸!0L|>ݺu™™™çÏŸ×ét¦Ì—P(\µjUpp°F£ùÇ?þÑOMÿˆˆFsøðáA]–Ëå‡~ê©§úŸ¼Æ!¤0* Err²Z­îêꪯ¯ïîîî§fuuµQáÚœ?¾a>@«W¯þßÿý_£žBMMM]]]˜}ÆXKK‹££#!dæÌ™ÞÞÞ_ýµB¡0uP`Ž<<<Ö®]+‘HÈý&%„Ì›7’’’ÒÔÔ4Ø577_¹reáÂ…C‹L‡`T(•Êëׯçåå•——÷“Bªªª†Â!(ŠŠŽŽîY. {í§1NÖŸ³òñÇïÝ»7??_§Ó¹ººnÙ²ÅÂÂÂÔAÙ™5kÖöíÛÙ|à¾ÜÜÜ<<< EVVÖЗ••…ÔwÂAJ`¦†égœÀX’ËåCÛÐÉÉÉÒÒ²×—zöŸ™Œ’ªªªãÇùå—R©ÔÍÍ->>ÞÔ±´´Ü¸qã’%K8œ^.ù¨ŸB {.ü2@jµúöíÛCÛL‡ÌÔÙ³g;;;}ôQS0ô” Ÿi°{í±mcc3´ QÛWCCÃ矾}ûöéÓ§§¥¥ ùc0pÎÎΛ7oîõÔ÷úë¯÷µ•¯¯/!¤¬¬l8‡.--6mÚpöc )9º~ý:Ûxùòe¶¿ Àˆ“H$Ï?ÿ¼Qá‰'jjjŒ ãããrß”a£k,£;[†Œæ3e+ÛÙÙÝ÷(#ËðCÛÝÝ}êÔ©'žx"88øæÍ›&Œ ÌÄ´iÓ†p+„í_ÔÜÜ<œCss{H ÌÎ;wΜ9Ã>¾|ù²““fǃÑÀårííí ‡3EÏÖí¾455•””†‡‡ë×?0•ššš»wï:;;›:0 iii^^^...¬Ïööa§aæà«AÍSãRóÒÒÒrôèQš¦õ%IIIöööXI Ô——Ÿ:uÊðCN¡( 3Â8QWW×OŸ7€$“ɾüòË„„„ž}xÞ|ó;¶bW ~õÕWï»ÿ~zÁ„ƒ”ÀŒ(Šo¿ýÖhåWFsèС§žzÊTQ SGGÇÕ«WÕjuwww}}}¯·¦V¯^ÍN `r*•j€í]çÕjøá‡ŠŠŠÄÄD@`êp`üBJ`F>ÜëBQ2™ìðáÃcÀˆP(ׯ_ïëU‡åË—ûùùeHý°²²ê9¢`TÔ×ׯ[·n hšæp8ÿû߇6=´Þk¯½Öë4G0>á¿ÊŒTUUõõRÏ…¢ ¿I06,,,|}}ÃÃÃ}||úY|ÀÍÍm˜s¹ A[[ÛîÝ»oܸAQ*•¦Æ´Àƒ¬¾¾~ÿþýÑÑщ‰‰è­£ÄÚÚzÞ¼yS¦L1Ì?ûºÃzçΣ¥µÆÛ‰¨¨¨h )EQÃl%€‰)<ørrr„BáÒ¥KM<€œœœ¶oßÞsÕ¼¾RЫW¯Ž~P}ºs玩C€ñ)Ll[·nU©TJ¥²¾¾¾¢¢¢×ù°322BBB¼¼¼Æ<@xñùüÍ›7÷µŠ6ÀD”&6>ŸÏ®µI‰ŽŽ&„”””œ8q¢gËxff&RY!!!ìºN½æÌî&þBæ £îàA´nݺžåEEEèà #«ÿɬ0ŒÆ»¸Àp %€ŸŸ_Ϲö†‘J¥&‰Tý|¢ärùÅ‹Ç20[‘‘‘#¾OÌÇ`nÐq&­VÛ󆫓““ƒƒC_›8;;744Êd2ggç‘ÌUFFFTT”­­­Qy{{ûär¹I¢s³`ÁBH^^^¯k5 R˜hšî¹ ^\\ûC8pZ­vä‚ *•jÿþýñññaaa|>_§ÓÕ××^»vM§Ó™::0\.wñâÅ‹/6u 0!%€ @ ðù|FcXØÿ-ØÖÖÖž…èq #N*•ž>Þ„#OÄbñܹs.\hª!3fÌè9ˆë¾&Mš4k֬шFZ &žÈÈÈ´´´±?è WË–-‹Å.\`}Š¢,X0gΜQ 0gþüùóçÏ7u ¦ÄápÖ¯_ÿå—_¶··p› 6ðx¸¼œxð6ñŒñ"…ÖÖÖ‘‘‘ƒ] `ôÌ™3gÒ¤IçÏŸ7XÜ“——ׂ ¼½½Ç&0€ŒH$zòÉ'9RYYyßÊîîî6l@·‚ )ÁăE |}}wîÜYSSSTTT[[ÛÜܬ_RG$ÙÛÛûøøzzzš6N€‰N$mݺõæÍ›—/_îkHKK˹sçÆÄÄp¹Ü1F R˜¨<<<<<<ØÇ Ãh4>ŸOQ”i£xÀp8œéÓ§GEE•••777³SrY[[;:: S‡ ”Eá `ôðùüÉ“'cvÑf0kH ÌR³†”À¬!%0kH ÌR³†”À¬!%0kH ÌR³†”À¬!%0kH ÌR³†”À¬!%0kH ÌR³†”À¬!%0kH ÌR³Æ3uð†¹yófnnnss³V«•H$ÁÁÁsæÌ‰Dc@IIÉwß}·aÃ__ß±9"˜•ââ✜œúúz¹\niiioo4sæL.—Ûÿ†ý2;VPPðꫯòx8¡™‘k×®ýøã„ßþö·‰Äð¥òòò¯¿þšòØcùùùõ³“ÎÎÎO?ý4&&&>>~à‡þá‡nܸÁ>vqqyúé§ý i4š3gΔ””¨T*OOÏ­[·Žöa¤Èåò¬¬¬¢¢"©TÊårmmmƒƒƒgÍš%LÚp)•Ê´´´âââööv‡ãèè1cÆ ·›'$ü‚Ž Ã™Ðüüü¹sç–äåå p[š¦5J¥Ôããã­¬¬RRRBCCçÍ›wßúJ¥ò½÷Þ{ê©§\]]u ½ôôôìììððp—1»IÃ×ÔÔôÍ7ßtvvº¹¹EFFªTªÚÚÚüüüA¥ ãSggçÞ½{ÛÛÛ]\\"##i𮬬<{ölIIÉæÍ›ï{£Æ!¤ãEzzziiihhèêÕ«õߥüüüãÇŸ8qbûöícCXXXHH¾É0â.]ºTPPºråJý½1†a Å@6Ç'úbgg———g˜¨ÕêÛ·o;88´¶¶Þws‰DòòË/ö£%‹}||RRRÜÜÜœœœî[¿´´”¦éAÂH]]‡ÃY½z5EQÃÙŒ%NwôèÑ®®®Gy$22R_.—Ë€ÿÇï¿ÿ¾½½}éÒ¥±±±l Ã0§OŸ¾qãÆ•+WæÏŸoÒè`(ŒYYY 11ÑðÇ)""âöíÛEEEõõõ×®]ËÉÉùÕ¯~¥¿ÏTYY¹oß¾Y³f-Y²D«Õ^¼xñÖ­[*•ÊÁÁ!66–=I¥Ò]»v=úè£ÍÍÍYYYZ­V$©Õê_|Qß´—’’’œœ¼iÓ&…B‘””´~ýúBˆL&ûé§ŸîܹCQ”««ëÂ… =<<ÒÒÒΟ?¿eËBHQQÑáÇýüü{ì1vo»ví¢(ê…^ËwÆ3•J•™™éàà`˜îB(в²²b§¦¦^¸paûöí^^^lÉ©S§²³³ÿøÇ?ŠD¢ÜÜ\ÃOf]]ÝO?ýT[[+&Ož¬Óé WYYyñâÅúúzKKKooïÅ‹ÛØØŒÕß c-000++«¾¾ÞÍÍ-¹}û¶F£ JOO×WknnNOO¯¬¬ììì´¶¶ŽŽŽfoÓ²gÈ™3g&$$B>øà++«ÜÜ\…Bagg7{ö쨨¨û†Á~D7mÚ”‘‘Q]]maaáíí ‹SRRRRR!Ÿ}ö!$,,líÚµ„›7ofdd´··K$’°°°¸¸8¶çÛ|ìíí}ñâE™L¶dɒªª*†aþþ÷¿B~÷»ßñx¼ÌÌL¶Ã†………¿¿ÿÒ¥K---Ù`*++/_¾\WWGqrrJHHðððèë7FOIIIKKË´iÓŒÞjýyO*•^¸p¡¼¼\­V;88Ìš5KÿaKJJª««›9sfZZšL&‹Å±±±ÞÞÞçÏŸ¯ªª B¡p°•ÉÏŸÚÚZBˆ»»;ûãN~þ:,[¶¬¶¶¶¬¬Œ¦i—Å‹³¯joo/--õööÖ焊¢–-[V\\œ••Ïáp’’’jjjæÎ›ššÚÞÞnmm=mÚ4þ¯ÓuRRR}}ýš5kNŸ>]WW7uêÔeË–èôý½Æ™LÖÑÑáëëkaaaôRPP!¤ªª*::šü²As8Ãcnn®»»»Ñè¹\ÞÞÞº`Á—äääììì^wxóæM¶?ÛŠ+,,,’’’ªªªÌÁƒmmm§OŸ^TT”””DqwwgO‰ñññ‰‰‰Ó¦M#„ddd|ÿý÷...óçÏ÷òòºzõ*[™u÷îÝ£GÚÚÚ†……9::FFF:88p¹ÜÄÄÄÄÄDKKK‡s÷î]Ÿùó燆†æåå9s†Ý¶²²ò«¯¾jhh ‹ŠŠÒétìhÿ¿0ÊËËÉÏ¿Ñ=)Š={öܾ};88˜½°NJJÊÈÈÐWhnn>þüÔ©SÁ™3göìÙcaa±bÅŠðððÜÜÜ . ¡2û innž:uêÔ©S›ššöíÛWSS£ßÕ™3g:;;—,Y²hÑ¢¶¶¶ƒ*•J£àÙ/Epp°Q9—ËõóóS*•MMMlIkkëÙ³g###/^¼¨ÿû?]wuu}ýõ×jµ:<<ÜÝÝ}0o< Z Æ…ÎÎNBˆÑo‹-ìèè˜9s¦Ý­[·–,YBQ”N§+,,tsssvv®ªª*..NHH˜å0qEFF–””ܹs' //Ë冇‡0®¯¯OII©®®Ö_éîîîuob±X1ÍÎëÀÞ²ÃSŸþˆ½ð2TWW§R© Ë[[[Ù”ÀÒÒrúôéýH.—'''—••utt°çyöŽ¦éššOOOÃ|€ôûë­ÑÃæ¥úF*++)ŠÒß­`?·ÉÉɵµµú’>eïÍyzzê7—H$úŸ¾jö¿-{úíu[öŒ=eÊ£~ú‘Ê666ý\ 1 Ãvü˜;w®···P(üé§ŸØŽìW€Í+z±Ÿß 쩯½½½×áLJ¥²×S™á¤ FŸd£ßV£O×@*«Õj†aôçLýq†Ñ÷ÈW Ÿ‹¶mÄðO6Œ„ÏÐÕÕ% ï{ºîµFR‚qA"‘H$’ŠŠ µZm4W1ÛYßÛÛ›ü|ƒ¿¨¨hÉ’%oü×¶ IDAT%%%AAAì)€ý×ÚÚší Ô“ÑyòäɧOŸ¾uë–X,–ËåF_H–P(Ôh4=Ïl¿ ÊÊJ¶×P( ***ÊÏÏïêêêÿæ˜!öÓ[PP0kÖ¬¾êô¼4ék2"kkëææfû›ú_2@@Q”Z­îë‹$7yòä‚‚‚òòòÖÖÖE‹U(..Öh4=ôÛªÓéL;¼„½*âñxCû 666655EEE-X°€-Ñ÷’b¿r¹Üh“ûþFÀhðòòÊÉÉÉËËcÏF¬¬¬š››išÖgloœQdV(r8£O;û£O–(²M%%%†Ã‹ !:îÎ;–––†÷år¹þbïrZ[[ãt=axñx£R©~øáÃ.°·oßöõõÕ÷É‹ŠŠR©TçÏŸ×étúÞ>lÙÌÌLéWzþ*èñùüÉ“'WTTäæær8œ^»Y³ —©©©ú†aئv‡âââ––v˜ÀÀ@Š¢®\¹BÁØb0"‘HBCCëêêÎ;××TŒì}Möö!D«Õw3äêêJÓ´~H±R©Ô×är¹^^^ÍÍÍ¥¥¥úújµº¯†{x`DFFj4š“'OZZZ½Ê^âèï¶üÆÿˆàóù„ýêîîî //ϰ?F?gl#FN{{;;¹!„ËåNš4©ººÚ°QŽ þ7FDhh¨H$ÊÉÉaoíñóóc†í»KÑét|>T‡ÒRåççgø ioo¯ªªòòòÔôvvvׯ_×2 sîܹ®®®™3gæ·oßf¨Õꢢ"+++‰D2ØÓuww÷7جI§ÓeggëG0ê§<á@+ÁxQ‘ŸŸ_]]íïïÏçóëëë+++mmmW®\©¯úã?æääˆD"ý/ŸOpppqqñçŸÀ^N999­Zµª¯ÃEEEåæææç燄„ôzO"&&&777==½©©ÉÍÍM¡PܹsgþüùlâççwíÚ5òó„VVVîîî555B¡pÒ¤I#ûÎÀࡇjiiÉÈÈ`S\¡PØÙÙ©¿Ž!„øøøðùü‹/jµZŠ¢²³³ûj%˜9sfVVÖ‰'ªªªø|~aa¡áU΢E‹öíÛwèСððp©TZZZúôÓOÍb`*>>>‰D&“MŸ>½ç•¯¯/EQçÏŸokk“J¥999ÃìÜØÙÙÉN±ÐÐÐÐÜÜ|ߥ Ø¡\?ýôShh¨@ ˜>}úüùóÏ;÷ÙgŸ…††òùü¦¦¦¶¶¶çŸ~ Gwtt”H$999B¡a˜ììl§_Èoþüùؽ{wXXEQµµµsçÎ ìo Ÿ@ X³fÍÁƒ<èåååââ¢ÕjÛÚÚ,--ׯ_?cÆŒ›7ož:uªªªJ,³3–.^¼x´W5^°`ÁÝ»w÷ìÙÃkfGÝ,\¸p°ûY±bÅÞ½{OŸ>ÍÎñEÓôÝ»w[[[ýýý–¼|ùr[[›­­ííÛ· EBBÛ02¨ÓuzzúÕ«WkjjV­ZU\\|êÔ)77·;w¶µµ=z”ÃáüéOÂÚ5ÄV‚ñ‚¢¨7>üðÃÖÖÖùùù×®]ëììœ={öÎ; »Ó±7ø !†}×­[7oÞÛwÈÍÍMß_mûóóóCçTèI$=ùä“ .´´´,((ÈÌÌ,++ …±±±ìå”͆ D"Ñ?þxöìY›¾Vº±¶¶Þºu«««ëõë×oܸáïï¯ï>Añððؾ}»ŸŸ_qqqzzzuuuXXV{5ìÀª^OhNNNì"_ÉÉÉ+W®ìÿôx_)))—/_&„|÷Ýw÷­ïïï'“É’““Ù[›±±±«W¯¶±±ÉÎξvíZGGG_ÓõÄårׯ_ïââ’žžž““½téRÃcmÞ¼ÙÁÁ!;;;''‡Ãá°3Þ ö7F„ŸŸßÎ;###ÛÛÛoܸQPPÐÝÝÍ6Ú‚;vDDD”””¤¦¦Ò4½råʬæ>LnnnO<ñ„««ëÍ›7¯_¿îää´mÛ6ñÈ$‹wîÜ9wî\•JuóæÍÜÜ\ ‹åË—oÚ´ÉhÃÄÄĺºº«W¯ªÕêE‹Íœ9“-ÔéÚÕÕUß„âàà  ÙÕ¬¬¬lmm'Mš„|`ø¨¦¦&™LÖÔÔT\\üÄO˜:˜ð’’’rss_yåL:2íÞ½;$$ÄÙÙY"‘…B@€VcÚ¿ÿdÎB €[KGGGš$hllìèè˜ÌùÀ”çöâÛÉw¿ûÝööö ‹ŠŠžþù/vC”””<ûì³±fÂÑÛÛ»}ûö3flذaþüù#>íîîÞ±cG"‘¸Ú¯'‰;v<óÌ33fÌñQ{{û{ï½wñâÅ­[·Æãñ?u˜¢$ÁídÌýÑ '¨"‘H[[Û­™@ôöö¾øâ‹'OžŒD"üñÂ… ï¿ÿþÒÒÒX,ÖßßßÜܼk×®ÞÞÞô+9uêÔ¿þë¿VWWWTTdee =z´®®îرcÉ/¾øâ¶mÛTŒ“$&ÉðH:vìØ±cÇ¢Ñhvvv___š“£WµcÇŽ×_}Ì_]†oÑ€IÒÜÜœþª¡-[¶lÚ´éj=F7mÚô;¿ó;iÆ$‰æææk™%„G“¡»»{×®]i¬_¿~õêÕã_á½÷Þ»nݺ4víÚÕÝÝ=þ@°$0á:::^zé¥4w$ïø²«Ý´iÓœ9s®öiooïK/½ÔÑÑñeW ¡q/0ÚÚÚÓ_2”æþ4¢ÑèÆ_yå•« 8uêÔw¾óªªª•+Wz«\$¸|÷»ßmoo±°¨¨hÄ‹ÆvC”””<ûì³±f¦ž7ß|óàÁƒ.\øÂ‘¹¹¹ååå×¶•òòòéÓ§§y2i"‘hhhhhhÈËË[¾|ùæÍ›¯mC0…¹pèv2æþè…Ô‘H¤­­m‚ÖÌÔ³gÏžñô@$Y¼xñ5œ"HŠF£ã̉ .ìÙ³çÚ¶S›$n²‚‚‚ëùõ¹sçÞ¨™@˜$p“%ßO|Íf̘q£fa’4IÜd/^¼ž_÷ò¸N’¸ÉN:u=¿ÞÙÙy£fa’·“1¬>záÄ=½¨¨h‚ÖÌÔ³nݺ¼¼¼ñŒliiIÿÖ‚4‰DKKËxFæåå¥Û1Ë{ n'ã|'€Wp+ؼyóæÍ›?¾ÿþô¯*ëééiiiY²dÉ5l¥¥¥%ÍK "‘H4­ªªZµjUqqñ5¬B € T\\\\\|ß}÷íØ±#ÍB555ååå_öí‰D¢¦¦&Í€‚‚‚'Ÿ|²°°ðK­BãÂ!`Â>óÌ3ñxüjºººÒÜi÷îÝ]]]Wû4?óÌ3z¾$&ÃŒ3ª««Ó ¨­­­¯¯ÿ ëëëÓ¿¸ººÚ+ `<$0I***Ò_´sçÎ7ß|ó o5N$o¾ùæÎ;ÓŒ‰F£×2K{ €I’•••““séÒ¥4cöìÙóÉ'ŸlܸqÌ[ ’Ϫ©©Is½PRNNNVVÖõΠ€I244ÔÛÛû…úºº^yå•éÓ§———Ï;7yñOwwwggç>_(¥··whh(s"¾˜$&ÉÑ£G‡††Æ9¸§§gß¾}×¼­¡¡¡£G.^¼øš×á·“üàmmm#–””ŒxÁ˜Ãnˆ¢¢¢çŸ~"ÖLêêê&ss|ð$€ñpVýv2æþè…Ô‘H¤½½}‚ÖÌ”×ÞÞ~ìØ±ÉÜbkkëÉ“''s‹p›’Àd¨­­ü¾÷Þ{“¿Q¸íH`2tww²Q¸íH`2lݺuþüù“¹Åùóçoݺu2··)IL†x<¾mÛ¶1« ‹åä䤋٘¢ÑèwÜ1æGóçÏß¶m[<ÿÒ€ðxâ0I’Uðâ‹/¦îú]´hÑÚµkKKKc±Xssó®]»Æóî‚x<^]]]YY9mÚ´K—.?~üW¿úUkkkòS=_Š$¸”””ŒùÒñ »!ŠŠŠ&bµ„#YÛ·oŸ1cƆ †Ÿ4ÈÊÊZµjUiiéK/½têÔ©4+™;wîÖ­[“¯0‹D"wÜqDzeË–-[vòäÉ÷Þ{¯»»{ëÖ­zÆ/ÚÙÙyþüùÎÎÎÇ?÷Üs7{>@è:::¾óï$‰1?F£Ï?ÿü$ß–SÉ /¼°téÒ¹sçæççÇãñ¬¬,÷·–ªªª«}ºbÅ =7–$n9i’`ÕªU“9$n9%%%©[†ËËË}ó p$pˉF£•••£—/_¾|ò'Sž'·¢êêêêêê›= ‚³4IA“4IA“4IA“4IA“4IA“4IA“4IA“4IA“4IA“4IA“4IA“4IA˼Ù¸Í|ôÑG?ûÙÏ’?O›6mΜ9+W®\³fM4=wîÜ¿üË¿¬]»ö±Ç»¶•ûÛߎÇãôG‰DvïÞÝÐÐðÇüÇwÜqǵ­í'?ùÉ¡C‡fÍšõgög#>úå/ùî»ïF"‘¿ýÛ¿Åd!ãòOÿôO—/_^µjÕ“O>9â£ï}ï{'Nœ¸û{î¹ô+¹¶;õÿÝŸÿùŸçççÿ¨µµõÅ_ŒD"Û¶m[´hÑø× ¤8¼ëÖ­[¶lÙÙ³gö³Ÿý⿸á›èëëëïïJ3¦¥¥åþáÒ¯çìÙ³'Nœ±°±±ñzçG¨:4888|ɘûØÕŒgÇNãÀ#–Ø™àúI‚kQUUµyóæo|ãò'’››ûÑG ÜØM<ñÄý×›››fÌáÇӯ$///##cÄ1S[[Ûùóçï¼óÎ0K3kÖ¬¾¾¾;^CCCffæˆ/ï¯f<;vš­Ø™ûûû:dg€ëä¡ërÇwÜsÏ=ÍÍÍÝÝÝ#®Àéêêzÿý÷?ÞÝÝ››»jÕª|ðÂ… ßþö·KKKŸyæ™ÔÈíÛ··¶¶þå_þåð_íµ×þæoþ&wvvîÞ½»½½}`` ??ñâÅ›6múÑ~tôèÑH$òw÷w‘Häk_ûÚoýÖo˜ÞÐÐPyyyssóã?ž‘‘‘\ØÐÐ0cÆŒyóæ>}:¹$‘HìÝ»÷àÁƒ]]]‘H¤°°°ººº   9øµ×^ûƒ?øƒººº'Ndgg?öØc3f̈D"—.]úàƒ>|öìÙìììÒÒÒêêꜜœäj›››ß~ûí3gÎ̘1cíÚµŸ}öÙ¹sçžþùä§õõõuuugÏžÍÏϯ¬¬|à23í·ºÂÂÂþþþTVV¦8p`É’%Ÿ~úijIšcøŽýÚk¯}ã7º»»}ôÑM›69sæå—_îíí½¶ ˜2|/{†††º»»÷íÛwâĉE‹åääôõõ PRRRRR’üù¾ûîûÇüÇÖÖÖÕ«W¯^½ú“O>ill\·n]$ijjJ$Éo1ÇtñâÅžžžµk×>üðÃׯ\¹²¾¾¾§§gõêÕi&¹xñ✜œ,]º4‰|üñÇýýý+W®¬©©>òé§ŸNþH$222jjjΞ=›º£¢¢bË–-ÉŸ?ÿü󦦦ÁÁÁÌÌÌx<þ­o}+µ­Ó§O;v,ùÇwÞy'‹}ó›ßœ9sf$)++ûñœüh``àí·ß®¬¬|ôÑG“Kúûû›šš{ì±k»ž„I344TUUõÁ455}å+_‰D"¹¹¹¥¥¥‰D"5,ÍŽ1ZuuuòWeeekkë'Ÿ|’úž~„œœœ²²²ƒVWWG£ÑóçÏ·µµ}õ«_ž¯Ÿ~úéáÇ{ì±eË–E"‘+V|ÿû߯««KCËËËÛ¶m[òœ^4ýŸÿùŸöööÒÒÒëü—€Ûš$¸/¿ürêç’’’o|ã£Çttt¼óÎ;'NœH}ŸzùòåH$R^^ž››ÛÐÐL‚ƒfgg/Y²äjÛÊËË+,,üðÃ/^¼¸fÍš1Ϥ‹Å*++÷íÛ×ÛÛÇ çÌ™3|ÌÐÐО={ûì³{ï½7ýeôÏ>ûlmmm}}}SSÓܹsŸxâ‰{î¹gü³­ªªÚ»wossóâÅ‹;V]]=bÀo¼±wïÞŠŠŠ7NŸ>½©©©®®nø—¾ÃŸ™<øK$‰Dâ‡?üaWW׆ Š‹‹ãñø/~ñ‹äå}}}Ó§O¾•ÔJ’´zõê!4"T¸eUUUÕÔÔœ>}º£££¯¯oåÊ•Ã?M³cŒiÄÓH‡ïx£•——ggg766&“ ylø€äÞõøã§r4)-£~zµ-¦Ÿ L%’àZTUU•——§pøðá'žx"y´tåÊ•áWZß{ï½µµµLŒ8¢-;;{ãÆ=ôÐvïÞ½}ûö¿ø‹¿}÷ÂÕ,X° ù¨–Ë—/G£Ñ+VŒpàÀ™3g¦®úÂ%:uª³³såÊ•<òHrIêúìììÌÌÌäY‘”Ô…Uñx<‰dff¦ÿ7ä–µbÅŠššš´··$ïDOI³c\¿ÌÌÌeË–555µ¶¶ž>}zÓ¦M#$ÿ¿ÈÍͽÚÞ5â„Fšå©ó{0å¹½xB$/²²²’lnnþã¬Y³.\ØÒÒrøðáY³fÝ}÷ÝiV544”<¢ÊÈÈXµjÕoÿöo œ;w.¹þÁÁÁñoUUU}úé§~øaYYÙèoI£ÑhjªCCCÃïÿßñìÙ³'OžL}ZXXxâĉÔ]Ô'NœèïïOþ\TT”••ÕØØ8ü‚žžžH$ÒÕÕµoß¾äÅK/^Ü»woò°lpp°¾¾>õˆ$n®üüüâââúúúÖÖÖÑ·Á¤ß1®_UUÕÀÀÀŽ;rrr/^<âÓä <|ðÁðè“{Wzɇh?>µ$Íý0Å8K0!.\Fß|óÍ3gΜ;wnÿþýÙÙÙÃÜ{ï½?ýéO£ÑèC=”~UgΜùÿø%K–Ìž=»¯¯¯¾¾>777yMaaáÑ£Gÿó?ÿsÞ¼yóæÍ+++»ÚJV¬XñöÛowwwùfåÒÒÒ¦¦¦×_}æÌ™‡ç¥ÕwÝuW~~þþýûãñx"‘Ø·o_fffê¸ÿÁܾ}û÷¾÷½ªªª¾¾¾ýû÷§¾…ÍÊÊzøá‡wíÚõoÿöoÓ¦MëììüïÿþïeeeƒƒƒŸ}öÙœ9s¾þõ¯§_m^^^AAÁfÏžŸŸäÈ‘Ôsº`Ês–`BÌ™3ç©§žŠF£o½õV[[Û“O>™|àOÊÒ¥KsrrÒ?k()77wÑ¢EGŽùå/Y__÷Ýw?ûì³É{Ö¯__QQqôèÑÚÚÚô9Ìž={Á‚ñx|Ìû˜¿úÕ¯VTT477ïÙ³göìÙÛ¶mÏß1##ã÷~ï÷ Þÿýýû÷¯Zµjø] ¥¥¥O=õTFFÆ»ï¾{èС|pø“"ï¿ÿþ§žz*//oß¾}}ôÑ… ’ÏMš?~<OÏ´iÓ’O Ÿ3gNvvö˜·mpSTTTdff–––޾#<ýŽqC$;äjWÜ=ýôÓ=ôÐÀÀ@]]]cccffæˆÿû®æw÷w.\X[[»cÇŽóçÏ?õÔS7rÒp ‹vvvž?¾³³óðáÃÏ=÷ÜÍžO(ÿùŸÿyÞ¼yá|íý÷ÿ÷ÅÅÅÃßÑÀä{á…–.]:wîÜüüüx<ž••å,Áͱoß¾¾¾¾Ñïž2.^¼8übî#GŽ ¤žj À­Ã½“êÊ•+ï¾ûîààà‡~XPPPYYy³g4Q:ôÎ;•Íœ9óòåËÉ Êï»ï¾›=/F’“*‘HÔ××÷õõ-\¸ðk_ûÚÕž‡8,X°`Á‚­­­—.]ÊÈÈ(**zðÁgÍšu³çÀH’`RefEi^/IDATfþÕ_ýÕÍžÅd(,,üýßÿý›= ¾˜{ h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& h’‚& ÑhtÄIAûuD£ÑѹL=#þ%€ Å"c]NLm©sÎ@ÐbN@°¢Ñ¨³4IA“4IA“4IA“4IA“4I‰F£#–HÚ¯“ ŽÎ`ЉþFjIløg7cJÀÍ‹Œ À”ýÿ".€ Äb±Gþ±h4‹Åb±XFFÆÍš09’ÿÃOüú±X,33ófO˜XÓ¦MKUArɯÏdfffggßÜÉ-;;;33sø¹‚ÿëéÓ§ßìékúôéÉ*ø¿Û‹322²²²rrròóó_}õÕ›=C`¢¼úê«ùùùñx|Ú´iÉsÑh4Ú××700ÐÛÛÛÝÝýù矟;w®§§§¯¯oppðÊ•+CCC‰D"‰$ÿûe]ÛoI×ö\Ðäo¥ž$”™™ǧOŸžŸŸ×]wååå%« ###‹efdd$‰x<žüÜÜÜþþþ¡¡¡d\O“/•ë yqPnnn<ÿ¿SÑhf4ÍÈÈHÅGVVÖàààÐo¤V* àv1üÜB² ’·O›6-y~ ö‘H$š<044488˜ºX(uŠ`Ī…ÜÊF_h”L‚Ô‹233“× %{ ’L‚H$2ôÿ%~cÄê$ÜÊÆL‚áW ??ðë©£ü乂äÅBW»@À­lÌ$ˆŒºáøÿ ~”ÏnMÓ`äG#Žþ%L=ÃÏŒð¿šn¬Cj,IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/infile.png000664 000000 000000 00000031356 13703317554 026602 0ustar00rootroot000000 000000 ‰PNG  IHDRö•tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp õ± ú/^IDATxÚì|Så÷ÆOÒ´Ê, {È(È-2dÈF–Êý ¢(*Š(*‚8@QT@‘!ÊR–¢(NEeÉO¶ Ù:’ûŸ·½émHÒÚÒ¤Ï÷ó¹mr÷zŸ÷œsoαÙl6I'é^€té™Ùq¢A!!„â’Z|X$¶4>Û(.„„¬@^ÆþÅáGD¼ý·ùŠ !Á-"†—ÿÞDÆæ9Þ€ˆø( „„– >OI%&"â9Ø}|ö´T!Á)"žBâòñÙ›¨øµH¬Âá9ø²N!Á+$†‡x˜ƒXþ‹?‹Ä3Öa‘0ü/÷䲘ÜBHrMn›ü~g¤ÜZ&sšß-¥ìR$WÀ6‚Ï «‰#k$8,ÃàÝG‚¨÷߬º\k—º¥»W “Õû]n^ï!Ÿ(¹+&L¶pIÏÕ‰RJ‰B¼šoÅÞÙtG¤Üõe¼l?™´áUÊê ]P›™Ñ2\Ú• “…J°Æ7 —ÏØý@R-Ú²§ˆ>&SXH0x66/JbÓ÷weüø¯KNÇ£;åÎJaòîÖ”9WîMruþ:釖¹lZúV “ÑvmÀZ‰Ž´i·è%QÊÒ€°l:v©›„ù;–“–¥ì&RD‰Xt¤K¢”:Ô,l H‚Ë"1’ÞÐ5Ä«þÇ‹árÒÅ!A+±ÙÃÄæˆ{d”DGEÈ-¥lzüÝ#•›"’[µÒÆÊ2ù5Y.:/]ÍëÃ$¿‹;VÅkëËB«¾;ì’öÊuAÌåµ&yÿO§|´3õ Ú•UVšÞs5b&†¼yS¸^6=yáÁ&"®¸óRHÎI÷ZÑR¡p.‰Šà‹·$¸‰UþÆžÿ.Ê¢m'¤M±râb¸ÜûU¢8“€Ñ :èúë1ßAWÄ6Lé\±Ž¤Ïu‹ÚeßYCfmwJ´²\ê(wB›`H•‚vÙ{Ö©—MP«ŽsRµM\c×îйQÿ’dk–HA㜌h^Rr‡S@Hh€Î°f‰(©T$—ä¹pT¦ý.ûÏ%?qUfÁä-‰2»e„_Lÿ+Q^m.ëºDj·è·ãI¢ƒà뤦Éå°É®S†<»!AOY&OÕsÈýÕ”%/m”U²¶s¤ì:í’µR,–?&êªÙLÿ'Ì2„'‘ªÏ½°ûj[" ñì P'¿\_"Šw Iþ8+Ó~;#Ž|ÑfMŸ‘ lë»’ú—<$$NË`82¥ágÔ[â¢"&R©päÕ>¯„d¸¿uìOÝïI}¼‘‡ÍÞ7}¸6FÒ“C™j®DÉéàÝFB}«û÷»!v±I¯™±­Ò°æ=ɘu%‰HÒ`¸\úQ!¡ îs÷ýo#ÙÜ*É8!1¼ÕÒÉ€u™Ÿ“­ ÉJ’"°vÊÙÛÅÉp?!ɷ˸u™bb$Ÿ\ }!±tžbH0zà™².#ÕÛ¬ü)2ÉJ’ªCN ¼†ºd‘Jã„Ú©$$ä ‹[oË ˜c0 ‰;0š)ëJúN!9ƽ±Y?gïGÁ#$Éï´eÅñe§ÉÑCäÞv7Ê+3—Hµ: xó“ t qmŒ«&$Ï ºK6}¿NŽÊ—_Ê\[IºÝ=Pš¶îàNìƒÀ$³îy I&–Å ›«×¸™ xâY9{攬Z2_Æ$oÎ[!ù rÏF!!9˜  9˜½V OT”Tˆ©"µê7”‡G—Ë%;·üv‰E²qýWòhŸÎÒ¥a¹ãæëeòØ‘ú€wÆ’~m¹ßƒÁ0ç݉ҭq5‰»åÇÄ!{Áh•d‘lé™…î¡qÉàt:õpà@„¸®‚E¢%§Ož”eŸ|¨ÇWº®ºû¢›7@îܹåÖÛzÈõõo”}{vË ”º ›J—Þ÷ÈgófÊæŸ¿“ú“ªŸ®]¾XZvè"yÔ2„XYÖ!BJ—Ž”°°0=àѯ=ùq%>gõ£`{ïtm춬W’o׬”V5Ëê¯E‹•¡Ï½,5ëÔ—îO¾¸IûU§ac=€ •«È»ÅKÊÁ}{¤y›Rû†Æ²rá\¹¡I3Ùòë9´ïé8qJÖ!Œ‘\¥I£›dðˆÑR0º°D)êîÜIò~-þh†,_8O L||œ$ÄÇ‹¡,)LëÚ«ŸŒþ°œ9q\Ö,]$1ÕjJÕê5y’KpRH²&F’ÕB’/_~©\õ:Ÿ&ìÓæ ?È/Ž’‘/½.-Úv’\ÊeéÔ¤V²µ"Ò¬u;y«P´¬Y¶H¾Yµ\ît8Ÿô IN’×Å÷¾àÜÅóúsTT”üwô°|¡¬Ž“ÿOªu¨¦G„;ä¶;úȇÓ&K|\œ´éÔ•BBèÚä‹Äæ{»æ8ÌÓøæ[¤óí½eÜÈ¡z\«ö¥u‡Û’eÉóuíy—Ì|w’ܪD$þü¼ûHÈPªE—Ë•e©ý?µ9 Q¥b‚ödïÙµCzvh!Óæ.–Úõòî#^‰=¸SJ—.}žÚØíW!Õbº6WÊ¿‡ʹ³gäÕ1ÏÊõuëKÝB׆B’NÌ™)ófO—j5kÉK¯¿ÍØ¡ksµ]›BecxÕHHsr]Z$„е !á5#„Brå¾/!’+vm¨$„PH®Ô"á5#„Bâ#€s ¶B!¡EB…$ •„ä@¬µm²cZ$„Z$„«Oнße ‚¡rù2²xÁ'—==³lÛ¾’u<°_*”))›~Ù×"; ÎÄÄtÍO!É$ß0;Éøq/J%Õü{8àár¦Ïxÿ=9›)ÇQçкž®:ȇ3g¤¹LfWvPìªý­-eé§K.KHŒ )–|‰-ëä_]øÉÇ:KüÜæ¤9¿»±¦súþ}{å…çGËùó±™s,pS‰‘úÓ­G©[¯žße2ý¸²ñ`·ÛdäÓÏÈ«/¿$K?[’®sL‹$-“«Ñ«¬\±\‰I¼<úØãòñ¼¹©LÕ‹.Ȩ‘OI½Ú×Ë õêÈË/‡Ã¡'2ݶnÙ":´ÓÇØ nm)Wº¤;zToëÍ7^—›š4’jU*K·.å×½îçB庴h~³Œyþ9½­ºµjʓÇɅóç“DÄ–Ú"yoê=LÅk¥ñ7È|ulߦuKyüÑ!©Ö}çíÝ¥oï^)b”9BŽ;&}ûöÓâ‰cØÖÏ?ý$={÷¾äF7¿'$$ÈàI›6mõúÞxó-izÓM>+§Ñ²ej1a°5‡±}û_²IY½T#Ê“'tìØI ‹ n LÛ¶íäúZµÔÍ26UKkºIxx¸nØ `¡‚­ßX \*,ß¹ómR­zuyþ…1:ß+Æ‹FýİazylïΞ½dÙÒϼn³Wï>Ò¡CG¹¶BéݧÎù²O¹!Ý•h"Æ’Å‹ô|‹-”B… i‘He’xìñâÅeãÆ_äøÇ¥iÓ›ô>û:®œHÞ¼yu^‘³gÏRHrÚS›Ù3gêí¶½µµT(_V(÷á‡ï¿—=ïÖÓ9"åÊ•sÏ_¢x wC dzZуJ™2)OZÂÔX²T)9¤Æ{[ë.X  {\±bÅ´•a­poº\/<7ZnnÚXªÆT’–·4Or!]. ¿[·î2/ÙÕ@\"”(xº6ÖÏŸ,X(åÊ–“¾}z«õ5“õß~“áÞ`6üü“ }ìQy`ЃÚâ£k“ƒ‚­±±çdÉ’ÅòôÓ£dÅÊÏÝCùòå•U2[Ï3]7êäeNœø/%žÀt¯A6ýæbÒ8ôòöïww¹œz}¥”˜x[ë>|ø{ÜÞþÑbb·üH ã§¼ûŽ,\¸@&¿ýŽüù×vùbÕêTÓï¾çùsÛ6ùäãù²gÏm‘y©‚¯ê3öéÕ×^“_Û,Mš4•{ûß#/^ðz\9iøY‰ÈãJD)éׯ_H[B|²xÑ"mâßÓ¿¿~bcÒ§Ï]òÖ[oÊ“O=%:u–>š#uëÖÕ–ÂÔ©SRYþiM·‚V,_.Mš6Õ–z¯É“ß’š5kJ嘙7w®œ:uJº÷èáÓµ=úYyä‘!rðÀ™?ž^‡ç6cccuÐÇ·cÇ™8qBªuU©RE5j$cǾ(õë×—˜ÿ)./( gê”)Ò¬ysí¾XËmx;.¸‰9ûˆáôˆôí×/d“Bâ‡Ù³gI—®]S‰¸ãÎ;å•W^–O?]¢ãç”å2lØ’˜˜¨§]wÝuîV›Öt+ ˆÖñÆë²òó/dЃJ¢3Q7èÓ§OëàåGsçiwÉ›’DFFj‹©ÿ=w+ëÅ%ݺw—LJ½$®1`à@ùcËÒå¶ÎR°`Ayhð`ý„ÅÊÝwß#<0Pž5*M¾ÿ†_6È´iSu°·R¥Jêó{úÜy;®œ"$p5—-_òuŒ²UògÓä·&~FcÀ€FˆxAå˜*T8 ~3ì‰'䟽û2d}3gÎñ/½¤]•œÒð³»vîp'†@c0“>»ãkYè…dògþÖ&m1¾Òs„˜´o½ù¦ô¿÷^‰Š¢ˆº6$ yäÙ¾}»´oß^†šn!¡äÚÄT¡kCB›;‚ϵá i„+žB…„B!!„?ÌÙJÉyBâÇóJ’ ¤D‰^ B`Œ„’ó,’îËNòª‘f\ …$KØËß~B׆B!!„ !„BB¡B($$³XÕ)BVË6ûswÕ0Y×%BïWÝ¢öl½¯äê ii0¥Y¸4)‘Ôˆ]"G.òÍA—LÙæ”“qI‰˜†ÖvH‰<6y⇄lµï-JÛeD‡tX¯÷==”Œ²Éãµ2þ×DÙ~ÒH¥•ëdÇ)ƒ7¡¤—ÿuÉ+¿%J¾p›T.h“ÿ«&ÍKÙ¥÷šùï¢!?©éù#²ß~ïV ~ÑßÎt‹¨ß&(…³|¯SÎÆ‹’E{\òïyŠ¡\甡±û4!¿W=³²H–vˆJP^R=v»rv)®,’Ï÷¹$JÑQõrSÉ0ÝøþwÆÐ½ú¯Ç\ÚøBÍÓà»T,`“ýç yM ÔOG.méåòÙd˜²&j¶ID˜M/ÿÌωR§¨M&4 —Ëãõòëû E¸Üõe‚ü~èÔV,?Ž«šš/:Û-’ËäFe^/h¡]ÈÕp¦ÿ™¨ã —œPuÓ®éÐOb ùæ+•à¬SßïŠqè'ðéú6AN\LÝâ;@@&=n~Ä4flOÔÁæ=zY¸6Þžúd%ˆù<¼>A¬áÐ =8Æ­üçÊ.óà<²¶C–´‹}J8flwÊs–`ëÐ;dz‹µ-C úu…ÂÜÛ¾ïëVÛ!ï4 ×çùoåÊ<¿1  AWioäÎk‚6 ¿Âz0Ç^Q ÚÒjµ¾w;eê6'ïä –äÄ&árÃÂ8mÉ\5 ¯Î?,"NÒRî+[qø lÞ¼9(åÂ… ²wï^i×®T¯^]*Uª”#®a=´xúyož}öYÙŒo„QH²?ùóç×îÆo”çŸ^'\úã?ô´S§NÉÃ?,5jÔÐ7êøñãu&ðè£Ê=÷Ü#wÞy§v#êÔ©#Ó§O×ëÀü°pzè!‰‹Kù5/¬„Ö­[ëÞ¬Y3™?¾ÿä“OJ£FÜÉŸÀ«¯¾ª×“ {Q4–˜˜¹ù曽ZMÛ¶m“-ZèÏ÷Þ{¯¶²Îœ9#7ÜpƒÌž=Û½ŸK–,ÑÇðúë¯ëmV®\Y:wî,7nt¯ ËÀ-jÞ¼¹”+WNoûŽõV¬XQjÕª%“'Oöéº`þçž{NŸ“š5kʰaÃäüùó^çŸ2eŠžû†íÎ;Wúé§¥aÆZL&L˜ U«VMuNÁ»ï¾+_}õ•þ¼sçN}®pŽ1/ŽûßÿÕÛ8pà€ 4HŸ›`·<³[v5„«!—¢ÔPP EÕPZ ,BÝzp:†º‘ Õ@ uCª5Ξ=k¨Æbd5½zõ2þïÿþOV7º1mÚ4£D‰ƦM›ô¸>}úª1éïÊj1TC6ÔM«§ 2DÏ»xñbC5Xc̘1úûÝwßm=zÔøóÏ? Õè eéèùþùg=}Ò¤IÆÖ­[õø²eËK—.5~ÿýw=í‡~pŸ+Õ¨ Õõ¹Q–’1`À½NÕð Õ e5¥:–øøxãŸþqïÓÿý§×Ó A£|ùòzÿ¾ýö[ãÈ‘#†C ñé§Ÿê}9r¤Q¡Bcÿþýz]XF €Þ/¬§{÷îz½'N4NŸ>m|üñÇú»j´—œSsšG½,öû?zôh÷ôÒ¥K»çŸ3gޱlÙ2ãï¿ÿ6ÆŽ«§áüaÝXϺuëÜó*áÓëÝ·oŸž†sjî/Ž ÜqÇúºay\·÷ß_DZalû…óu5À}~îÜ9}ßãþG;@{@»0ÛHV HÖ‚¢ÉÚ•¬áÉÚa£ $h”¸yq“) ÀX´h‘žvèÐ!=îóÏ?wÏ?tèP£M›6n!QV…{nZ«å»£FÒŸ{ì1£mÛ¶©¶q@#­ZµÒó€ï¾ûÎÝP.\¨÷ñäÉ“îåš4ib(Ëç’ãA#Çr=42ˆ›e}¥ZפvíÚÆk¯½æ^ Öä­·Þ2Ê”)£¯¸xñ¢ÞΊ+| «ÉK/½¤×ïMH¬˜BøË/¿èï87÷ß*!VÖ¢_!Á9T–Œh«X ñbˆçÕ$…„®MÀäEŒ®Šj ÚÜÈ! àžÀLư`ÁQã^¶hÑ¢îÏÈÁ Jùá¡Ãáu3»×çù´nƒ¹~UϬ]ÕØ¤~ýúÚíÀt¸<ønî‡jpîåî…Ï}AÞÐR¥J¥Zç5×\“ê8àâ¿õXávù°„¥`Á‚îïÅŠ“cÇŽ¥rÝÌ˜Ž²T¤qãÆú¸àJ™ñ  PV­Z%Ç%¨ú8<ÅeÕÈí·ß®ã!p­¦NÊ›ü a†´È›7¯ö¥áû«^LžyæQæ°¨ÞKOW½´¾!­ÎÛç´Àú<Ÿ 0 tíÚU^xáQ=¦¬\¹R^|ñE=ÓÃÃÃEYFú¿Iž<'É6¾IñâÅõ#TÕj¹å–[R‰ÁåÁ€à"É1€ðAL<×ùÎ;ïhqF\ñ ÿýï:vd‚ qtt´(+QÇhFŒ‘æ¶sçÎ-ÊrԖìۼ†Ö˜ a°5ÃA#ECF#þòË/uݲeK DƒGï¹gÏÙµk×e­ÇÖ­[uÑ?üP‹Ã]wÝ¥§£oß¾½Œ7N  àÖ[oÕé7Þ'Nˆrå÷ßå:\ö±öë×O>úè#xž ÷F`AÊŒëÄ~*÷GæÍ›§…Ò“ØØXmå@èð4E¹@©{B5 çG¹V:Àêmž¼÷Þ{òý÷ßëÀ*¬(ˆÄ›/_>Y»v­¾ŽGŽáMO!ÉðÔ£U«V2jÔ(-¸•o/?þ¸~Çã/·ã‰Ä´iÓtÏÚ±cG}ÃÃê°6ˆ Ä¢K—.n‹½6žÀ QažRør+¸ñôÛ¿í¶ÛtƒGc‡«•DFFJùòåµk‚§?Ý»w×V‚'ÔO¢ š8¶&Mšh·‚ñ§OŸÖïŠà\¤Åáǵ; —b†íã?3fŒ~aOÎø2[:ÚHÕµÁ#SÜàñïOôzÈbæ _up“ùFwïÞ­­Üôþæ·‚LhÈöÛo¿é\²Xb‡\¤¨ý‚ `Hœl–çôU;\N-_¤UçhÈ!zØ$dÆ/½‘æçÛÃr}úô‘£G¦¹=d¬Ã1¢ˆÖ‰””f2j€\·fMoµm@Ú$”†%ŠóI|ÃÄF—’4#Wë7ß|£¿# 9RNš4I7b¤]DƒDÑ)O¬Ó!`%r±"åà–-[ô:ÑÐÍàkþxÀ½Nä’E~W4 ˆŠM!÷(n~4¤„ ¡3|ÿè‚[8†M›6i‹ŠŠ’N:éõ­^½ZÞ~ûm-J8&¸rÈ ûõ×_ëÆ†ùÅÝ(…s7 û‚‹cÄÏä‘ÊiQè û ?™/P €.H†Ô‹ˆó ¬(öÙßýÑB–4üÇuÀ_‚‡cÊ•+—Ή‹·á"EФJxŒýØÒh I†ƒŒçß}÷þº$3a†4?œ?^úôé£3¿Ïž=[WÑÛ´i“)R$Ë÷%½…ÃQæyZ/7û‚X Š€|¯U«–~b‚Jó„9sæh7#PØe4o¿ýv½ Vz­@¹Ò}%$ 9ûÖâæ€§ð¶f(GÕzgñD&Ož<¼;s(Ö"âÐD3;™¬~¹Eij9°P‹O]ð¾Ê„ ôŠaŒ„¤ ¼¾Ž⢢ä†n矞'…е¡kCHÎsml%$ûöòA³¯BHÎþžÐ¡dðù#3ÊàþÆ}N‹$ÙªÊøŒ—§#„P÷wDDDÐY'Ae‘äÍ›WŽ9rÉÏù p_ã§x€®M&X"æ(5^ÖÚµk—;‰!ÁîcÜϸ¯!"¦Eâ­-dW ŠÒ¬''ÏÔa™ õ!|Jë;'ždUÒc&WN²ªaznÇ ‡Cÿº? Åﻲ³`¥àd¢š'‚¤B8éHØSÓ1Îl̾4:É.Beµ²qO›ÿd5¿[Å$DÅ‘O¾)"ÚS'ßq²­¢`Çs<…„d7!ñtULá0Eļ‰IvG0]«˜˜'ÖÓ­¡€ì~?{Šƒyoû³Jh‘dÐðü½ÜÏßäÐ¥!Áæâx«U ÖHÐÄHL×âaõ)Ó²F †ÒÓÍ &—&è,ˆ„)&Þ\Z $Ø-o–7]›LS,¬ ]lâ+fl"4Bâ)&ž+o¢Áú‘`˜`‘ ’ËB‚UH‚ G0Ÿx« C „„‚ ë}ìÖ“N!¡j™PH®’›C${ ‰‘<ðB’sIS˜³•rÅØ½(!„b¥xË)“í]BH–¹6†ðéÚx.äây$$GãJ˸ðçÚ¸r¹\çx. É ârOË Ä"¹Îž=û=O)!9Õö×›:¨Ebøpk\ ,xE)ÓžVBr”5rm߇¤”0Ë{6_òeËN.\ø«˜˜˜â‘‘‘ÅÕ2<Í„„¬€Äž:ujÝôéÓ‡<ôÐC;Ô(T¥³ ¿DTlÉBbІ=yKÉC¸å˜e0ç7—'„©¼ÁHH󢇘¸Å‘F|Äé!†!±QH z!1¼‰Ó‹xx“8|¬ØeqwœãÍÙ-VŒUD((„‡€x¶y_–‰Õq‰—`«#{3œ^\ !Á-$ž.ŽUP\¾b#žBbx¸/æ .qÞ„n !¡ãÞø_ná͵1Å:£ËÃJñ ®RH !ñô>¼}6¼X4bóø¾ÍË]BBËÕ1ÒÄ›˜Ø¼äó°¥!*âCD((„¬Ä›¨ˆ?ñ%$þ—B!$4ÄÄ—X~æ÷)$þ‚¢AHÎ_ã4ŽËX!$g ‰Oþ_€ ;™úR©IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/info.png000664 000000 000000 00000204325 13703317554 026265 0ustar00rootroot000000 000000 ‰PNG  IHDRRçêÒÕ)tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp ðSâçEIDATxÚì½”dWy.úT9vWçÜzº'GM”4J(!Y€„ˆ&˜ 6<ž—íwñ½pñuxöÃöãúbc\“„A–@å43šÜ3ÝÓÓ9§êÊ9óþ½Ï©ê!°}—½àýÍ*UuÕ©söÙ¥ýíïûß’$IøWâ_ýŸ1ÿšƒÕÿ ÒD* ÈõZRü1ŠTúg^K‚\~N Òx“÷ŸD¨êO Ñ7{–~¡ 2øY&QãMžßŒd¥7¾¯þ Hô'= ü<ªñco$ÑëÈTý1$úƇüc^¿Q© ü,’è‰Tÿ1¯ßŒT¢"½–8ÙÃM?=Öß?`Ä™§G‚™kÞû±æ½ú&æùIT¡Gýg>ó™Ÿüä'5 TÅ-úZ@@àç•J%‹ÅN~á _ø“ßû½ß¤·"o ÓkI”¿V¬¨½ôcT(#Q÷oýÖoíûìg?û5dzE–e›èjŸW0Žs¹\½7Þxã[éõk/¾øâ*½]þIߑބH«Z}nZ]]ýR(ºUt±€€À$¬­­=ÛØØø1z¹ÂĪ¥J«Ï5¿é}oF¨f΋.ø†ºººCôä¼F\¾1kÉT±?†D¯5ïeáøjæ»ÞÀ‡o–ú#©Lx#‰Š®¸Ž$8ÿ“©$ˆT@@@àGDç›*Ò7B©€€€ÀO&Òùð$úFBøŽ7sâ_ªH‘ ü3¼(ÿ3jT©€€€À›s¢ô/1í~&ð—ù—øö·¿ý¦ŸýÅ_üyä‘bý‰¦½€€€ÀÏÞúÖ·â+_ùÊ)#Ñçž{·Þúï»0óŸ#R¡P~êÑÚÚŠ¿ú«¿ºŽL«$úå/Á`ðßTþȇÖb{öP®yhÖÃN:]×/ŠŸJ@@à§‹‹‹øÈG>‚ 6`iiéß„DeYÞIOQzèQ²•k†0í~®”éM7Ý„—_~wß}÷¿…ý71í~fÀÌùÓ§Oãïÿþïy€éÇ þ­¡Š®øy!Ñk}¢ÌgÊÌ|†|P(RŸdzc`éÚÔã?þïz}lø™Çää$'Ð7󉲔,ËhnnþßS›ÿ‚`“0í~æÑÛÛûc?cÊôß´D* ˆT@@@@©€€€€ RA¤‚H‘ "D* ˆT@@@@©€€€€ RA¤‚H‘ "D* ˆT@@@@©€€€€ RA¤‚H‘ "D* ˆT@@@@©€€€€ RA¤‚H‘ "D* ˆT@@@@©€€€€ RA¤‚H‘ "D* ˆT@@@@©€€€€ RA¤‚H‘ "ø UtÁOÞÿÿ‡,™óš$†a>dz-+ú¨\Ö¡dz-Ñ?:‚þÑ+ƒÞ—z“ýEïIì=ðÏÙq†a^ƒŸžŸX2¯Áþ’uƒ_ßà‡ðÿ²oðû[6_Bש=Ô€ ½0èºì0Ö¾õóJæ7%Xí«¶•71¬?öÚûå핪G³kÑß²d¶QÒÍ{Ñ«ç¶`½aX§•Ø=èæÅ ɺvõ3ß—¬~ÐÍ?Yÿ2?g¥zNº Ný`þn:o'?‹¤[ç0ŸxË« ¤Æ•é8•õV¡÷%ú[gÏÕû¦*}\Fµc óžé:•r¥Ú‘üØo}|¿<‚HªÐT™‹bvsœ¢Ê>•¦*D`Še6p-zb˜^ë†Å" ¹¢ Bo+0ÇšÁF+Ä2?§,™ƒZçä)›äÉ™ÇäF¥ºnj„(Õx•‘8#…3«R£sF®0iÜ:—ίiX¤ÄÏï#󓚤gsõ:ìü.øû:TE®šA纆?jí…¤Ö‹›XRÕÎ’Qe&‘0#[‹Ù9É{žrªª!M JâÌw¿Œ®½Gá uÒ€T,ÿgÚÊ(\‘«˜¼:„‘å,ö¿÷×`sû¹™É.ƈ„ TØ“‹Ð/at>‚ 7ý$››[Ó]gpÓŸ» Œu©X SV,­›ª³ê¨šÐœøˆl¹Y ó>ef¦Ê&yJU枓Թyò’U6ÉT]t ªÔ”÷QZnã:s_2éY¶üÎU÷/#j‰»Pó§°óñI5g-W†Z¥möüåTÍŽ\IÆÚÒ f_?׃†-‡à 5CW]ܧ­Hìlw¡œ\ÃÿùÐ1üßß~¡Ü4ì6vMC½jÃbZBÀ ‰„”§jÀF«"m.NC¯wÑypJI\ZœÃÔɳð·õÂÕÔƒPûº€M œŸˆ)í§\ñ)ë?{McËT‹DˆZ9D åP ا_†»ÄHÔÕîA‰LKO]*™¯=mZ¸/”Ux Ž• Ä9e„WW0å5¼ð¥ß3U-#Îbt\zÈùh©E ÿ«xå« U2MH ¦_”µ‡ùhÙƒ)0þžR%´UâÏfÛÍI‚«l¹ 8qUý¤²aSª™ïÕ ›y=ëZ²´~}Å&õ¯L¿Oq ŠÝ߃ºÖzôíîACsˆ¬¿Á!çêRWéx‘£¾ Ò5'²¤\Ï>_ð£§Þ¿Ç §Ã†€Sámª*efÖWèefòz[=œ×š$U‡ -­4ù0òôWQ?÷,ò§¿ŽRtQ A¤×i• dÓd6£õ '-Ÿ„mâHWÃÒþÞéçáAšÍ; ÊÞþ|ô×ïïÿÎC¸áæ>Ìœ{HSçêQÍÅ!Ïœ°HÆ"Ø&kX9‰•Á“ÑAôñ—a”²ÈåKHëELœzáñKV H²ˆÙ$D•˜J¶|¥&Á1ÂQ¸¹®Ò Ùƒ)Wö·\½'C‹Ôd¦6Á•_2]œ«äÊÏ+[,“,UzOSÌ6(V6o3¯ râ7°,)ÖDa*dÓl‡Õ&“4Å$jö=Õ:—ªü\ì²L«¤,Ù³ðd– ‰ölèÀ ·uáæû›¨ÏïÁû>zÁ:;žzâ1|ümÇ¡, ™I'(“j¼á†ƒ8ýúë(ç㯬 `+Òé ‚7» w³ÈLñ2Å^H¡S]ÅòÒ|¾ ¤t÷íÃ/ÿ×›p×Ã;ávÐo“ˆâ÷~óÙ‹bà"¸ŽH¹qmFÑe®œL;”)¡òäKD¦1#¼Ðˆ.7<Á vî߈ͻ2÷ÂØ´G%Rm„T#Y5£üã§H¥¡)Ú³¥ ïþÈ=8vÏ^CŒ¼ö”I†,ÕfqJ6JÚv"Š­Û6ÁëÓpáÉ€<7£Å²¬ÔDœ¨$K·Yk¹EÍT(˜þY‰›ñJ-Ø%Y¦=LO®¥é\ŠjM(VF‚ép5IS¶ú†Žc ×Lk’­~«ªY‰ÿ-æç²å&1jëYüHÖϤUž1afM ê¸&JO‘ƒæô`ËÎ^l;ì…˜BVž@ɾ€77`ËŽ.D#a|ç‘oã#wïBay’¾+£;WÌíííƆ qqø*Êå2B. z>Ç;,ŽsŸCqf­;JEšTNì:°›ÈÛÇÑÜKJØ£ ¥­+KËðÙD´IøH®61"©UXÚ‹¥ºô… pd×`Ø5Ô5·€lsh ^¿Û÷uÁßGSÈW⨨Y´vס¹=ˆå‘‹èÞÐ 95ÅåÅæ­½Ø~È‹’œE°m] ‡ç_ä¦{¥˜Ce~v»½¸áöf´ì8Žo~AÆë'Ï£\ÈBvù¸ÂåLg`=?Ô¸&Ý©6)XyªzÕ_Y=Vº•„²ü¡<•Èʵäç‘T¯À¾«Kë:Ìh<óYš¡uv„beÌVƒUÖ5 ÓÔ‡•?+ ªM®¦RUªqzÅ0ÓÃXÔ\×yÒk‹”Ï 2sª&cã@76î±!- £d$èà2)Ù½º6ÖÃ^®`lbugNà~šˆ¾?¥ßFC>Ÿ…¯} &ÏŸGc³gˆ4wºbؤêÜG»¶¶†s“OÀ½çÐ¥D±´’ åëÀÆþ´m-"…!äÊ1Tˆ|eúÿ O žŒÂG©ÀuÁ&UªÓd–3ç/BÓ4´µ o¯óã¤ÈÂÀÎ.¸W‘6fHõ$ˆˆ+tMí.ôô†põÔ£èµß ™”hCs#Ô¡ Ž"¯GP×®£kKMç猑¹…Ly‡¿n+ Ç<Ú6Ièbdxáé´í¸Á$öªÒ´‚OŒÌà˜E~Òzn#SdUeW{Ï¢G¦y®¨•2P%æZÒ~U>r¢5jé[ÕWóšf>ìzr©Q[h`&Tó@¯_ÀÓ®°ž%a.8PøûVäša&ôçÇ/À®gÐÚÑ‹­7x‘•Q–’¨¶˜÷‰TD Þ…Áð8œ¾fœ8yÇŽjØbsãÃÌt[°¹žøÎËO£qß­˜| ³>,ÜØ¸ÿøÒ%œ=[qn§¡–M|~d¤ t½,òÙ òé2ŒJ™»}ΟD<G©ÀuDjù «{YÎŽž A\‚ÍÂîƒÝp´NÓ`w£¹¡ši}e$k>Aæ? 6©Ø°¥ƒˆ±„ S†ê ïîá\ ]¢A_¡ïPßäDK«ÑÓO¢ÝKÿ#¹e ®æ8bÆt5ž­uh;â~ÒŽ9qº¬Fá¥j>©±žaP˜|>°VäÜÌ2¬è¼-20—Xs¹8Z_%$Õ¦l™ð×®’„D%Ë_%Y¤.YÑ|ž0d³ª'SµVïI±d*?Sê™8WêÎ:öÝØŒmŒ÷7kI™Ô'ËÁÕlfPÊN}O®áþ^ lߎzôŸ°çÀ!„æàhnÅÙçHÕúê‘Lç°ð=E‰Ìú€Ï‡?xú[44Ãí÷¡{sìnöÝ€²s’sŒwZ2’‡‘WJQ eˤð}X á#¸Ãz€§÷TR1d®ò=›:ÈÏý…Qßlƒæ‹ S™áƒZæK'M“™E÷NÝÍhn BV5tol§ïæ‰D‰Êüxv '×Kƒ¶QÉ >@Ss 6ï ’)ºH¤S$ëºB*؆&V&FÌ%ŽÔ>£b­ðay®• ϫ䬩›¦èLq?ª×tó{²uX¯Ùb™¥%æµøõÙêI]²Îa˜ õœ¹u~-~ nây²×ÝJ¼7¬‡EɬÝôwnâ4ìtÀÀ®^ØëWP6VøçåbÉÕ<" 9è…û™?–M†-€'ÆrXÒ:ñÈó±GÙ$£¯×oÀ‡ÃCª2€¢;‘kÈÔ$iÖÚWǼŽÔ,)YUÂÿñ+ÃÛßö6ŒML`ó¦Møíh6› ‹‹ <Ë¡©± ýèÂèè$ ÅM^mèßç£_ú,µ¥Èg墎\ ˆ†“ÈdK(:0®u!è™G©Àu¦A•“d>Œ‘^áÊi÷¡ ¨¸fÉœ[ãǰg3·\â>ÈJÅÿ<òÌh Ìr( Øœv´w7ÂXCÆHšæ,ýÜ|=™¥ª¢’Yjƒ¢6Ô¡©—hšT«,W¸éÊV¥“E"c Ùt„«O1¯=_Ÿn˜)Jæê#ÙZ Zu‰J¦ o_A5…ŠÞt°%“¥¤ E!l, —FÇ8}(¹ê‡ËZ*opunX+–ŒoRô¤ZØÃZGeè¦+@•­ãM¿,kŠFW©˜ÄÏJœG%kµ–ÌUóò¹Wéø¶íê¢þŸ§÷òø{C˜š™Çêê2&†¨Ôw¢~`)@õÚÚ#µµ÷²EÒÕ•a-›µÓ}—t«â”!Õ¾XMþ__¶ÊÔ¶ÂÕ*_$ ±^eVÂ'¦ù‘‹H ¿†ÎÞNtns‘JŸ kTØrw¬Ì¦‰üxù…sÈæ4h’©\”ú½'Y·¾å.œÅÈè¶o߆…H§³³³8tìþéŸç¾æd:¹H[û7á¹gžB‰Ôòæ=hì)`-=‡l¼{›ƒî£Ì©L횎`ï¾;ðÞoYZÀ7þ^˜ö‚H®ÇµK-õré(<}õ(ډದo“¥äÐS™È¢Bæ^6j ¶’C°ÎÔ1_"‘VYå”ÓÐZ»?J:Š>Oû‘­Â 75ÍÆÏÑÖÕŒ@k9=Âá9Y“ L'J(‘ ʦ 5/TRUláÕ†’kլȣ9I¯•æ3ˆìSWDd~!¿ ½]mØ»gzº:ár8H±ÙÐØÐ€ËD@ùbc“ƒ˜IÆÑsôVSëkæ«îón˜z×yÁž\Ï”fÙ¼²lyÿkÊÙáš´,“ûåÚ²TÙ°ÒŸ¨«:©]ãƒtml†â£DÊ”}‡™ô™„„ùñE<ÿý!ÜûÐÝœˆs™Ê"rº:¯O<ú zzzðÂÅ»ÞõNÜtü(*vò¾a¬-%ºÏSKãè =Œù‰)xCAl=ØDVÁ%,ÏFás´ñs3rŽ&Ë ýK‹QšÕ²øÆßþ~øÝøÓ/ü‰7‚H®W¤&‰1uWL%yš‹ÛoCAZ#‚+ñrqŒàtN¢Dt‘"" Rad³Ü2½®8Á‹º9to’’šµ*YF˜?•b˜zµqxôöc()¤¸P0ý­Ló’ú‰.¸ š›ó(2S¦•ªÕnf”Z~NݪjÔ\’¡"9;Äè$Wç¹Ù¾‘È36“G¨®{ö  Þ@™H6–Âa³ñ šÛãF è‡Ï#Ò¸Šðp[wYªšó××jåEB,·ëUSyD½¦WM™|]ýQI^_Z Ë×jÔ”«øê"ìô{ô‘—¦¸£”Â,¸”³áѯŸ uj sS#}·BDJt™t{7àÿ8汓i[k ¾ñõ@¹RÂî={ñŸ?õ) âÊÐöØ‹§ž} ÷Qo„­nó «¨¤Ýð„êé¾¢ü:eºöìäM:nlß±_sßž=Èd³bà"¸.ØTË¥$µ’Ipp¹™ÞÊYé9àQf¶â%ÑIÙ`S|¯% “jêr‚T• <Áœþ,iž+%F|ªÓ¬ôÄlWú‹H¬§× osE=cŠd>Hó9R@q™¾[ÀØÈ:vì4KÇÕ’•ÌuI’a•޲•üî‡ðÕ¯|©dÍ]­èÝaC<;‹Èb^[=ln;«åReèESc+xÛâWõWá°;ðäSObèò >õ›Ÿƒç§A‰.øi1í× )ÓI3•ÉËæ9s=µÎI´‚d¸„…‰4”+‹køî#/Âïoƒbhœ$ì6‚ >”('•|†ˆ¥bçù£l 3µ©Hlµ»8„2O±©ÔÖé¦v ÐK2gbX[M¡uóþ)_“ÎÖÈóåšàv°d½gм ÎÄØKOCÑ$R²NØÊ¤ÓD<Üñ–›±mÛ€i××aÛÖº§. ]ÅЕ1¤R”èø"‹®³T¢|щKõõú¬J­Ø‰|2×é›KóéÏbaq¯¼ü}ô11n„"¸N‘2£Z61ŸáêÑá±ÌNÈ…”ej­„ù«Ehð`9²†ï}ã%29ëÑÚQG±Hæ;}â ‰•P!5Z*Ȥ ‰. è6”2/ÈÑÙÑ OC†H¢ÀÊê£ZŸùMãá"$ä—ÏÍI9°qïa«ÌŸb’nUÕYä[K*—põÕç ‘²+¦€$]ÕaW‰èݤÎúÑÓÝ„…™°Ö8ít.2å·m¬‡ÓH¡IQưµ7‡‘ÁD:Œ,n.º?'¼Þ&ä D¨¤dm %"ñ¥…I ]ülJ÷ß¹7î‡}íÌðjM¼«J%D––™ŸGlzç^{ùÃ?…ìò¢jå¯×ʯu°•4eå¤êeHŠûT}-XŠö¡>q…Ƚ€dnŲƒæî˜_F&UA2‘G}S:6xP,-" Ïf–P.A>µ†¹Å×W.aËÝxû‘áü¿»êÄö½›Ñ·OBt9Ø>°Æ'Àºz/Zë7áÐQ9bf%‘úC6 ðaz¤ Wr¹t¯›C,µŠwtíC¥ìÁÈø$¾ô_Â׿ñu1x‘ ¬+Òõ,ýD$ù &ϸàiô£b¯`pd—__&¥Yäé36ÕŽžVÔ5+Ö tÓY‘¸ežÄ2©Çw6u©*üN'œšÆI¯X*Ò£„µ)<èí;*Y%øTE3·aË[+eºžJ‰ŠF .ÍŽL‘m×Q$k¿²¾i Q >ÕBL¦[ÀªKÚÜÖ…\!†“§Nr¿ñæÍ}8ÜåÇç¾ôÔ¸zq¡³­Xšš@Wk'.ž¼‚2ïëë±mo'Êú’‘â‘,R‘$dŸƒ›ŽâÒò9JsØ×¹‰ÚÅKÏ ìFÓ† ²F˜×2jÙ¦·wÝ_kf ðº™ò– kä³&G–ñÞ‡!ä¬àLjÑ˳ØÕÒ!Ž R7úHÍDrRu­[ö`ŠTS2MĘÉñÀ¢ÚñîÿüûH\=Kƒ_Ç¡·Ó7MÒ€Yþ-Ÿc¥ëØZî"ÜA'½A5ÎmV/ó`'Ù¬l¯Óß©8)]æç»8‡T2;>ø‘“ʧJÇÒY2]ŸEÀë#õ¤qÉ>×ø¾I:V/Í`øÌ«XŒ$°´0C¤V2Ëׯu÷²ÛÑj@¨>ÄXŸç‘æI}çrË%„ ¥ZEýêWËÌWam"[Ûƒ”©ñ±B‘Ua…YQTŸÎ+a½˜I5ÈăpìÃìãUR®ÈÆQ?p€®©#:5ˆÜð®\FoÐãà7N¼€K'æÐ¿»ËcçqþÕ9>!umèEC‡„‘~:^ÁìÄ­^´oéElïj‚¡”Ðéiƒê9ŠGæÃŽö!¯NS_æ-ÿ²µJK77(Ruß(S7³‚+lÕW&¶LÂÀÒܱ$vö0y ƒ/ÍÂîrb*WG©ÀuŠ´º²I2õé±·¿#§žGf5Ç×׃ÔÛÛ>ùÛhîÞ€üø´v¶¡m£“›ƒfúR…W~ʧu¾¥ÆÒR ûúT^à„1­nX¾Ð øúmÕ¦r…É—„iÀ²Ä³'Çàp±çÖ»xIÖ¹Vš¾ˆ_ý" `\N;¯uÊR–Òù4âᾺ§XÉsͪ3Gë5[¬«nÀå°ó-M¸Ò¤{bA*f ²}ä}¤RóÔ¶t¥ÂÏs}ÿ˜›é1_.+‡ÇÌãB™­±×ÍÝB7©è¾Ú¬d iÝÜ‘ÔÚçží.Êj›ÆÇ.¡Õˆâ–½½˜_Kb›°O"e¥U<ñô‹pºÜˆ.$0˜K¡P`kì‹fu¦ƒ}¨hq$I“…07Åí· àøp»pÓÍøÝ°ë ,Ì òuøÎæ$r¥l6“ÜÙïTÊ›µ\e^¥J¦>‘¡Ù+ææÙô{DW²¤â³(fÊZÄŽþlêÔñòfpç±ØqCÂ¥°8?5¥ÀO4E†í*™•î»öâŸø,<¡øšZðîÿë÷qàÞŸâ•:7’âqF­œN³Lg'„ù Ô¢ ²–¼Æ7ž®T.™U®z ©ÌýpYì:}gq!†©Ñì:v;¼Ázs d""¶’É®°{HõÑCS‰Dò ¡.%“fJ•ùºwãe$æ!Ò¬ózP禇ͯMƒ]SørPV°Äëvñí‰}?B~ZÔÛ\_‹ )°z§ƒ®m³Š¥èÖæuà5;7nß?Ȳfm‰gc[†X;j¼<¡Y€9IÄ_Êgñçÿóózí9ôªi<°£·îß[K/&¦'ð¿ûßÑÐÄêbŽ/P`×tS[Ý‚‘äÚrН[š ÃCê´EÂOíipn†&uþÝ'‘_iF,‘ÁðèEŒ O£R‘øj³øZ3ÃqÌ^I`n4Åé 2éBí^s™"Q˳y\º8Å­„Ã-ÍÅ›ñ™Oþ¸å:ÜÀ™1p„"¸î‡¨î÷fH5ÓôÀ½oÇî;îå>M›LêBÉùqxÜvlØBIµ¾DæzYæõC¡;qñì ÞxŒ> [~7‰W/bKóÙ2‘ É&Ŭ;ÊR€x´žTÒ¹㼂Աû$â±TVÒ}K{DàL¥:]ŒL+fÅ{ú,—/Ê-ñÔ«k•häMûvé,¡@&|"ã¹¢l{ VÜØasò¶Y¿XÂj6†B©Ý_Ñ(#΢Q0ƒd•J]ím@4h"ɯ¢H,Û@ƒÓ¡áøƒ¿Èëh\˜KDMIÕC*Yû3ÉØ{×Û°ôÊ÷°m`· YÃùË—QÈd!i^4¹m¸ýöÛqü–[ñþ÷¿Lþ+PT›·nEW¿ÙâF_|Ÿÿ£Š™QpjÐÞÛîƒJJ2“ÍsbÎärÈó<âÎT³&›EE˜Šõy0Ó~bj …lmAÊD 3ÓÓXZ\dÁŽ\ŠŽÛÍ-õ˜eqaf# +œ`\²RëÖÜñ™Y‰œ·ôvñ%µ†¤b×wàÈ}ó~“¹¼šµµL$ÏJ2w s ?÷(nlQð«ÞŽ#Go„ÓíÅ×ÿáïàÈEá°<=…P}«`öèìlÇ–¾p‘Yß³¥Ž”rœÌý4MZ^hùž{ó-Y²ážþê)<úGqàÁâ–|O>?Цæt´õàÀÁƒÐ©£—&iÌ•ñÌ÷.az(‚Ù«dÖÇ\èînパ­Çg‹´Ê†ûoÚÍë(léêÆèù†N”qv‰ú<áD×ñ𠬈#ˆTàZH’T+ïÆ+-ɰö2Ó‹Ò‘edéáöxбÙÉýtf„W2ZʬÇ9xv»oè¦÷s±Èy™/Çd ØPR‹|÷M­Ï¦Øû:.ž™†ËåB߆nîOL$∭,áìóOZqqÛŽF¨sRé÷ée29ärE”Ȭï 5¢žÈ¦ÎåÀÆ–&Ø…®™å7ÁH4•%EɶDq:øýÄ£¼ý=ïÀÑ㇑¤sèªÍ>?º›Ðîñ¡)Ô7‘¶]Q¯é#ú^2Iäk ÎëÅ w܉÷ÿ×ß%’×̈·b•…²òFyY?«OÙ£’Ïbzð$¾ðÇ„ÏýÁïcèÒE8lâ% JçVj—‚žŽF ¿eK?–——±cçn¾@ÂEÞÜ­¡PÊ"¾BŠq)…äZ›C2¢ ÃXXRÀôsÿ-ýÐLN‡qe4·?€=ûámL¯!7péõiÌÏÆ¸O[' £gs'>3··X.ð¶ßppÞù±èÛÑŽ•ùYÜ|×.Ü÷žcÔoI¼ôú8TšßrÚ´8´¸úº/ Q«°Ä°22U•ÐÞÓ»?ŽœT°xÒàE…²ŠÅù8¼žfx‚²šËÜOX-ÔœM³|RØ'·¼ÈH™­É—ydy~*ŽÍ›6# r%çkl€?èÁè…×qüÞÍUmYvষ¿ûûÿ‰p„[>_&3(hs½‡Ú‘G‰ï÷”â粑Ï-®`¹P†×î@}]n—‚c‡·cÇ‘ƒ¨èé~B˜›¡csü:+«1R®3XYSa&<ýó¸Í€Ã(òà[ïÆDæ=xéìE¼zvÝd³½”¾õÍorŸ+óͲӴvµBñĉfIA#KØ>ÐŒ|y ‘« žyñ. ¡˜/ââÆ9H-it±e[76ïU.Ma~4I}-ãä £piNlëè@œúbÿ‘êÛ$©š"ßÞ¹©±¶` Ë£ °©ÏbP5RÛZ™Lý(ÒZÙüå1l‘ \÷CX™äz-F"ÕG^„ÍîäA¦¢4c&r³jø¤&Ù¶ r9{z7ß~7*rÔ 1³žH-O¦d9/¡D’Ðæg SäéRL±”'fªÚTÚÛÛ hv,†—ñ¾_;†\e’Ì×9³@s7ùÞÚ·ïþßÂ_ÿΧI±.ò ,íÇcçn½¢baŽˆ„¿Óé„N*PUlØrcóÆN:¼Û÷î…—óŸÍ®bïþ]¸éÎ; Ú‰ˆIñÒa,à·çÏ05”†‹î{O_¶mêÆä¼Y‘Šm·2qá$)ä.k?©êÞõFmƒ<ÙÊT`~gæ*õëpà¡RÌanü*VóX½2‹. CýY™Ç§ÿôàü¹Ó˜šž¦þ)aeéÞ‚èé«CAžåUšJ9'çßq¸^ÆJ]Tù$Ú‡«u;¶â‡ÏÍ££«7xÏ“C*ÆJÎae1†·z/zÕeôö5ѯ±Ê“ØTêCw³„±Ñ«4Yå035}Á’‹£ˆf½HgSô{—qζ†cûšÄÀ¦½Àõ¦½i†ª<Áݬ´¤2?)±AdnF>…@}]Ì3šâþQ–SY̳`‘ăMËKEôí rSÞàLHuVˆ y±Z„·^ãA(F4,‚Ï”ïÜTõõõpyÜŸšÆ¶½=(ÛáöºJ„‰Üò| ÕÚE´wûnüÊïþ!——·sçÎm<‰ƒŽaQxUUáq8ËdH5ïyè-øÍßý4úè'ÐÚ݆\6Ií/Ñá6”¨=©è* V|S1—ž²¬€F¦^Iv6Ö£·5§• ð`™‡Ônbf‚ï٤ʦ”%µ³ I±ö¿bE?XêÍ“ùþÚîtaö=Ø~Ë[Ñ×{áè?‚Œ;„L*P(€x<ަ¦&\º|™×U6R²ÊÈ Oê=È!¶–Á¡}­Ð#*¾õg£¡!„ÛÞ~µ¹/==ÂL{t"kF2·„™‘Š© μ2·¤BKN#[*ð•õκ2M Esƒ=ä°ÁìD„LúÆ./“RoE›¿vƒúBŽ»6´c-]/Ž RkaWe8X~%ËÙd¥îØN Dì±xå/6Ò»©†=JGøOÇJ¶¥4Ë2&FÃØ¶}+‘[œ¸®lÕádÛ†”PÈè<À1?KêО3‹›Reï±­Kæg"ðû½8sæ,‘Œ†½7¶c–U’ËH©TXu&ÉÜ“ÞÆŠ¥È6ìÄ}ïù™é.RÅEnr³ã½Ìëš²œË¦ÆÌDch ø±}K¼>;QÙd”o5R&‚fŠ‘¥A1…œ‰­¢XC6º„ù‰Dc1øˆ»;êýˆ­†±¶–$òaUª p(K©åy3WT6ûŠùwm,'WaÁ%ó¡YiQš¢óöÒ1¬L\Fdì"Ôµ ꬃ£R@úÀét£`+ææfqÏ=¤îË,K"Å›äŲ³išÆDòõN8ÓtNšÙØòÚúͤʻ °ÕËÉèènA #Œ¾„Å©82Q—HÆWÓ8¼a?¯Áê4ò2‚%)·4)–óÈ%ó»´„|ÒÀéçF¸²ËÁ&L®ââk#x×{߃ãGïÅS?ƒŸ?-Ž0í®…&[>=kw7¾u‘W1“D|f.¿½¢Ð!«ü™±dѳ¥Fʼn+—ñð‡Ž…­G%žšÄÔh©¤Ð žF ÔCN›~S]ç¥ß2©<Ο&³_áÛ^<ôþ»‘W¦±:— b,“"³Ãé°›*ÙÚœO‘ÊøÁ#ÿˆWÿ/6œH$àr¨< 335ηIq’ÄcÈKX"2­­!¹6EDÝÀ7Ó‹…cXžš@¨)×_|` z¶™.cuz §^9Ë•j{C=R®Ó «ØN틦²ØÈw'-ÐwCÓõ;{Ø–ó¼}²TíBs#;T+Tѿٳ¯`CsÛB~4îÝ€‘«Ãxå•§ñÜÊìÁ&Ô‘jŠŠC‡¡¹¹ËË‹¸::Ž`+MòŠÅRkš¼’øð³ ‡Á0ê|AÌ\ BWêðäw/ DÙ·« iy ¹TÓWâ($U\<5 /l¸uà z»ZÔ ¼pâÖ’a¸ó2ß&{úJ‚Lzcà !B=BÇÅWxiú2ŽÞ}{oJcjÄ™ªêÃW©Àl{Ôª»³=Ìm= ,“ò,¡©5WCŽŒË 7]YA‹)ÍR–ôi¦À ”´l`•„ Ð2Ù+2)7¶‰[úYÁk/Œá¿ÔÇâÂfeyR:ŒH#«)äÒ%¸}n8²ÛÔáêÂyž‹fùætv"EÙ*¬Q̦ñÌwÁKÿô]úŒ!µJÏAŸ‡Lâ eR†v•XÁÌâ<_a4ºÇ“OŸ"s_Gó¦>š{ñÜS/cùïCSC|~7þð‡ùäÁªçO]Àô<+Zl‡ÍNf6‹H, ¯Û޾¾j[>·΀É•yêŒ2)O¶=GukekŸ?®ÛÍ ‰-E½|â‡(÷öàd,J÷!EXèÊzÏû1¸’ÅØÅsxâé'°wï<óÌ3¼ßÃ4ä¥edË%:–™ôe¬,Åп¡…”uã¸ó£wB¦Iç;ø%„Ý pµv ®»ˆL%Œ™ Ràk6 _œE2’Ň޼7ß|Ü\áTŠ!Aí=çç5`‹qñeÙX/?}™&Ê2¶†:qöôU2ï³(O^Űs–’TȰXŽˆÂδxiµœžbœtÌM\á‘ì }(©lž2§fÖ³-Ë% £Cóعo;$[”ûÙx(½Ä+9ò¦£˜š#ÔÂLhËJ&+ó›®­¤¡‘â ±e¨¼YiŠÌÈ%èy`‘¾ç¯o€¬h¼’R:ŹgžÄN2…ÚMJÌEfm*©8Y•yI<…%òbt|&W0÷p'üÄkƒxìû§ˆÌÎajhøðûpˆÌß¾P=î?t‰ËpöÙg0zé rd*;<L.­@–UĈDíÒÙIU³ÜZ¶«¨ÝFæµj‚‡YR@â\˜7,?iu?'‰©sšpXÁÕ†P7Ý| ؇“mùaƒFíž$u;;3Ã3 ØJ­W_{ç¡N-`r4ŒÑóaR˜–æ"hk´ó éò¬îkY‹”÷úÔ~xºœð„(i HÆH=^Jñš¥ÏÌ£+Â/?ðÚ; Ї?¨‘>UpåD §Åò4Ûd/ƒgŸ8Ør[è^ tÏÙBõdø4¤âi¾{>t#:ê6Š#©Àç4Ùª_-ñÎH!¼8G„¡ ½ÏMZrlÓ¢ŠÎ¶#1·1Šn\º°‚êN” "©b’Ûhmˆ¶¨âÕG ²Õ5~¹º‹‘µuq©d†a÷?xZ6•1±0E¦%#é4fb8zçm¼êôüØ ¦Ïœ†RN"j¸ÐÞÖ[7cqaóWG‰ J¤KDÓ 4§‡ï3Å–c:³ t‚Hv…®Å¶9ñOAZ˜A›?€¥ø,â‹‹H‘"s´·£­§ÑxËñ"Ù"z."ÎÜNR¸¤R›û]ô­ k‰ )['\¤RW&&ÐÒ»’¦˜•°äê>öºÑ'½@÷ë{?†Å±+¨Ä–Pž™â“Q6Á+/>‹±Õ4Ž>Œûî»—‡.âàÁغmñÅ¿ÄøÙYäHá;$¢s+|}gƒ¥œ“gf0ôí—pë}Íè¼ÿÓŸþ,*Zs««;·„|TÃå‹“¤2óxçýï%E¿Bd¬ÐûYÜô76â• CÔÔ,O\Æòl )^7àø½ûQŠ®ÂUiAW7îúø» …œ|o¬çû!™ø‹bØ"¸^‘®›ø¯Zdª¨Øê2võÞ%T¤ ÷²Ä{–òTÊ(ˆ¯&%B­ã{°³JóL­Ü\Ï¥*4€K8wju4`GÑ\Fim´$ñȶÛ÷lÇ[Ú‹Tñ"&GVøÎ£ãÃ+<`÷þÃ;{c§_Gs£¹²ÎKñÕýð¹íÞM¦æÌ4´àr:Îd­%š™Û :Iqæ ,'˜šà¦Ãïß‚e£€»·²hyçΜCóm$#5 Žcdv ]M!žÊÌxÇÍ•\НjbÓóU6´¶¢M`~ô*º·m5'"N Õ½ë­,RVƒ´sZ;7 Lí_›ÆÂø:ûXm>¯¥bß}ä ]¹/ý½oß>&rý£Ï¿›§ª–Áð™i´6ùÑ\§!“nÓ˜åeý\]\ —3QšXrˆV UH­¥qùü"ü’ û7߀…lós=DÊ«pæâ¸qûøÁÙó>½@ÍÎ!• ­MFÇÝ7À¦Ã‡0ùÌ30Ò8þK p…½·!ÿâ71ôȨu’8‚HÞà"åÄÃ\êhV¼¯ JAWH9¨Ü¬—ÈìTYI‘*%µs~Ž¥º-Nß+qâ`9äѵ¡ÊƒL©XMm6J‘Ÿ“û mlït•ˆ¥¾ëHž2å騰„T<‰ÑÁUhd: :fÏ ¡ÁCfl†Ì`™?šZ‚ðz\¹r¾æ62a/À®±`T…×µ9]°)¶lhGx-‘ÕT,§ž=…·ß} ©z/¾ðÝÇàuy"ú¡{î@]s=¦G'12½ˆ¥dý›ÚK¤á¦ë0¢+‚–U¶mµBf~†x+ĸfW0wu=[·š„´®¼«5 dk­½Y—Tåå[z6ñ gF/c‘&ƒçO¼L*3…³çɼ¯ãä{Ï=oå¹!"PÕ!#²HÊu×føœ~DÓ)¼ç7Þ‰ôð2xÒÔ2B4˜ £[©G!¿ŠÑ‹K($ ØÓ´“Ô¼šÃ”sï.Z÷7cC1€Žà{’/õuQß¾ãÀ­d{pîë3Г­èpfaKe‘¾tή<Š‹“hó©h8¸_ A¤oT¤¦z²TßpNáȖ*ði™õàiK±p‰Ô™„¡ó3hêè@IJÒÉrG ¾­qtµˆRVÇé×®òÀS¢ž6e*RÙ&¡¹Í‡¶»·ÁÛÃjz“W¢|ßû‘ H'sؾ Åx¿‹§6¥ÓI"F2éwö“I?KÃW±w÷N$ÉÿîÕ ôÖy øP,Dù¤à uÙÙÞLJ¯„€‹Lðtg§çÑué n;~ýÛ6ó Tíºˆ´mX[\Æs§.âìÌ<œšJ„MwT.!Hæ¬×ç"ó¿€™¹YdË44’Ò-J§y&A*ºÆ«LÕ·¶XõG×7¬nÁÌ*-Åâ$W– É],Mâêð%8xO‰ÎÏë|M|–ˆÚãñ ±¾-õ›15}†/Çu¸TÜ~S–ãqtmëAß¾ &øöŸOÁAõñÂÜßQ_…Q¢ bÔdcK?¶ÿ2p¢­’#EGç­[y¢°j4ã+ÿ׸íニ+#ƒ¸¿?ˆ…^Œ¶¥ ª.7ý?01‡É¹1´&æÈÊ("¾RÎÝ.¼öÊc¸ó“ŸƒG©@ÍC*U+Éë¦IÊkg°»<ˆ,g‘ϰ4$"WR£‰µ< iáY2#g¢6†Pª¤ø>éßž‚ާÏWçÖ05¶l.ïdËAië0Kã1Ñëð:aóå,¯bfb 夊µ•†Î.òÊJöAwgˆÎkÇÂÌêüNìÞ±««KpQ»öî݃MD‚¥bÄöQ"epÙxÉ<»Mƒ‡ˆjŠÔe’ÈÎMf)žFŒTד¯ òú«{÷ô“ íÄòì<«1¼rê¾æ ¯•Êê˜Vò9tJmà÷û ¥3˜"ëèéçIòR¨ŒU•®Eêzôü9i¹ËÜrùºýBÙMxá{_ÃCDà¶’É8ÝÇ4ìÔ'u.'g§¸Ëàæ[#¼²Œ›6 o„/àÇæ}‘ÙMjÜÇ{î=Œ¾.•+ÙèÂ8νêÆìå:öïÂ…ÕðúÝhnÚ™é³<êÎ*øw“r^yõ‡˜ØsZ·ÀÙâ"Y\¢ßÙce=TðÁÝGê“úöµaœ¤>õ·ÈÂ…H6 Ù¸ßC]~Ԧѳ7„ŽP7½~^ A¤×B±êfrß/4bî,¨¯§A~Ñå \Þ"PT±4›$’qãKD)³ “î±€ˆ)C&ªŠó§¦@‚Ž›µ…Bû*uN2,)‰ô’¼FærËË,M¦IéÊD Èfòغm7ŽÝtˆ+bF”‘pïxð,,.!ÔP›Ý†Ö–ØíÔDdëD&_D*—ÃVÁS{;ƒ±µõ…Wob.¶Ò˦‘*tj|)m¥Tâká%Eá[L¯ÎLàÒ©“Øuè(ÏL°6nªíŽÄrC¿ý­o ¥µ» tÙÆcöæ,Gpû‚¼p‹f³#X×€¦¦f|îsÿòk~´6÷bçŽExü³Ð\ÈÇ H&*H«Ãp„váÀ-호ЌøÔ  c3óSD„ylî8Ÿ-_÷”]æ'Çб­™Ú•7Ý,:Û¼/MgQNDñêÿ:¬c°i²Ô×öb•Ô ¯îkÀÒXªÖ½Ãoà^1p‘ \oÚW¦Y¯ÉÜÇƶ.2¹/`f¤o#‘`ZCt©ŒR*‹±¡y®ÊØ’Å=6©5›ýùXW.΢­§]mHdV‘LePrð*GÜ—ªg‘¦ã&/G 호:‰ñ¡U¾ÙÜ?ø4…êø^÷Ï>ó)-.^ºÄS†˜jfä 8Û§³y¾4´PÔ1N¦»DÁV:iDž^Ÿ3³³DP¸Ie¶†êɼNÀ¡|‰kŒi6?mìÞé9DÊ·±.@jÜŽÎö\¼8B—¬#qò´óh»ª™%öØVΛ~·q%‰Ë'N ¡{ °ÊVëôöï‚Ó >A£s¥"+¨wkÒ9ÇG†p嬊¾¾~ú̆ÿŸ½÷«ººÆ×ô>#ÍhÔ{µU,÷Šm0˜bÀôJ€$$¤÷„ÀKÚ—yI $$ô@B ƒqŒ{‘-Ùê½K£é½ýö>wF– %ÿ|Ï/ÏóÍ!“±F3sϽWgµÛÚ—\r ~þóŸ!–d-Ô1äÕàŒf3ªëràpO`z*.òZŸ|æJ+5ÈÊ­EËÁÃðŽ´£ÙZ‚‰¢fhkW¡ùŠ+`žœBßsc¢÷-¨4fh¢˜*/EvCŒÎÝ-zA9÷bÏ tµûïD¼é|¬üáu8öÖxö¼ •¿•åèè Ã?9ŠŠk΀©jofád€43Nc¤lŠÊRPéˆ3ÙäåuõØþâÓèo!ÓÒFœ€4С»s Ži¯`‚>¨dqŒt„ ( DûàqEpÉ-×)º÷Þ~“ýØ ©”¢‘(—;ö¶9ò¨à˜˜Á{;:ˆÑF±iÓEXJ€01ìÀÄÔ êj«P_ˆlK–ÈoµçØ{æ&w@dDÄ^  tÓÓ34MzªÊK184ˆ†šrÌ8ƒè'ðO’IÍ® ›èB…* 5k (ÈcMìlw.DÈÇðkïˆ|R¥:ˆ¤9R¹Dª©w•‹’Tö+âìÛ¹EeÅP ³-®ùÊÚò 0Ñ× KÜ<³ ‹#Cè ¹9=š‹»vîü©Ñ¨xŽE™÷!·i9îðu|êʬX•¨Õ„ÉénXóa&Ð݉±1:ƒXwý|X\NÎãèû»¾Žã0ɦaÔèáÔÚqøð›úÚ æ¯®…ÆÓ ¿i!·mÃT^3üÍçÁ۲ɖí88< Û…¡rõW:²ýÎN>r¡Ò$̯¶¡¢~afáü·¸æ2—à¿„‘rÿxH¢¢†(U-Z9¯‘˜^ýÇfÐ}(„±þü¾(Žïï&ƧÁúó7“I¯CïÁ0îÀÌhOG÷÷CA&êÅÜ¢bDìúŽ…8¼"1ý¨Ý­“pŽ«ó…±{Ç 8ǰyû¥/Ý“QG ÇÉí"õ(?ÏF@j# ìv;™×z©H,†ÁÁ!Ñ ™Uò¹9'æCh‡zinZ™ÎŠùM µ¸tó:”äš¡WKýÜ9P£÷ËÉd—ˆš ZXM:ØlfQÝå&@ÒhU„BGS¥±ÜŽ}°ì‹5èÔ³XÜÄç˜Æ‰£-H;1©è=× t?„m¯<ûïû=N¶Zª~šn~ã*Üòµï @õžŸüÙÙV”––‰ ­óK‘äó(+"³?‰‚’r„ýQØJ‹±riÍ×›®„—_s+ÜÉr\wÆb4h”Ht¿yrÜâΫ+nÝÅðsj^ŠÖn?ö¾?ŒñœJ8Š*áž$`Þ´úó®ƒ'†bâ&Ÿ}ÎýLjåÚ…ä_Na%ÔV5¾¿Ÿ~fùfif|ÀGzªçúl´™þgµç¢¤ªƒ'`ÉË#s׉C˜öañš ¸ñKß¾x=ú[݈@ž=޶£=Ä0ÝX}Î%Ä@K„¹ìñy1ÐâÖš„¯(°7‰ W 91Ó½»[ÑÕ6%èð׿öe’ÉíÆÐà01Ë)dã*** SÞ-•Z«DÓÓxë­­B$šçï„¡dñZã3n©‰þȰçZÑ×׉%Šò¬"">LßϾ]Ñ6…¨Ë ÆîÍÄÉõ-':é˜FÚEÿ¾Á1X³ó(ª5*hèaa…(£Aî·D,5 ÀËXïíÄ’•KE"þìÆD϶â hý:Ô(q_­)@óüZ¸\SØþF+¦½ÄziCàs»ísŸCwOmcøñŸ¶Â\´Gð?ïFÛñ~•±qEº‹ðØßžÂ]¿þ,–®÷aë“rT´ÃÙħ\B–Ðå£ìÜK0Ýs IšcÞ™Íè{¢•˜øœÀ9ãE‚UŸþø(–üàËÄnÏ޾ µëšýyxåŸmÐè"˜r2ëo‚*Ї°{QSfñd€43N™©t” ©üTofœyþ¥xèèt€Á® “Ñ+Ò 6]}- Ë+H²0Ü3L¦¯ýƒè:Æ Pl¾áÓt²sr¡Õ[0Ø;Œ¬â8g¤´$2§lÅñ}#ˆ…X±l)>uý§È”ŸÂÃÇ19îBv{6=¬bÙ0YÌ’ÜŸRb’ûöîÃèØ˜ðw*•±ˆ´-a …‰í|(ηÂ?6ö®>¨ Øôj™¨¦bn0š`$ó>D ÓШÊáóù1@fí°Ãƒž¡q”äg#7?Ç;z‘•Lù=sV6²mìïäÀ–‘xX—8(æ Íɳ£¯³CteæËÑsቿ>ƒBË >uC3,Ž“\`t!&¢çX ôº³Ñ²o7N&Z±r٠ȉyïÙ߃hÝbäÔæ!ôî PXupŒô  |Š27ä Lõóàžè„ÉÛ‡ñ¶N4^s>:'†qÍ /æ-ÏÂ4±Ü陃Xµn#–5û°ïÝ03]™…“Ò̘;TªSU*Ry£lVÈdý¦ ñäC÷‰RÊ©©(’‘ª±ê¬sEþåê ñü£Fo[P_ÐÅ‚åëд ß}íÇÃn³£»}‡ûPRƒƒÃ-ð9‰¥vèý 2e³p×ÝwbÊ1…í]ƒÄb]Äh­˜ßP,‹f“Ib8áh(Ä[[^…ßï>L5™Ù,”¢'†¨ˆ…EB~”ØÀ´¬¼CCD¹ÇS’Øê LZNëRcÜ™ C™ô“N'Ü/²²L$®ª° Ácv”S5µ(«(†%ËJ`¡÷N‹¨hŒö謩jYýÝí˜ßÜ”RÊNIÂÐuµçöuá¦Oß„Gÿú0T:š›Âl”¡š6˜—_ëV¯Â‰' ÓëáÞ²kV-À®ÑqX®Â‹G±~C F‡cHøå0Ò¼¿t˧à"ÐýÓoïM_˾þ3bï´Àü  ë tÕaäå~¬¿7ü+\rÏUˆLŽáÝGNB£*@€˜¹,æ…ëÍ-XXùY˜« ±û GŽ;ˆAÇ`µ`x<få(ö· ã%Íif̽éV)Ù7Ìæ•‚Ì`nûúwðË} _PT }ýG´P‰Ý%e \NÌó¥¿?Ǹ‹ÌÒ$ä*>ó•¯ãÀöm˜žÆ‚Š|”ÛÏÁ½Ça|€ƒLA‘N43AÐ]@¿öµ/ 1ãÎÎ.ø„ž~Î=ûc+Ȃ؊ZkŽÈ t6Cfád€43>¤‰dò””Þœß1¤nÜ|ªjçaÛë¯âŒ³7ÓZ:›'™cÏÅ?û ~{÷há;qÉ5· ³­vTåÖ ö¸°±›Î%³õe„ü’DR<À}ݵWãâ‹/„ƒØh_¯ÑøÝN4J4ÔV£ /W´ ò{‰¸ä‚ Ï9°—XªÁ`·h"Dè}¨ƒ’Lý d.áâó°}ÇAxfÈŒ¥?¹’\üAb¦ñ8füè™$Ó˜Ï]n@Anœî·-E.±à‰é 1Þúú‡a!k6f ÀžÚ€h4œVÑ8Ìz£È›e_)§%$#IŒõõ náb¤¤IE»æœ;î¾çnä “qš—%·«kPØÛ…—žz?ÿÙÏðƒ;ïÀ™ë7ÿÞßýyNlÁLV!ü3¬š8Î8«%ùó Ó+?‰ç8J 9æ¸z:€¡—a³¯@ÕÚȵ¡¡XM°Yr#Íi‰p;JLlZ\‰hEzO>ƒ.ÚjâgÂç÷Àá "VBoH¤šËó!7;ñÒýðÇ3 '¤™1w$DlI–b|é¦m‰S •³bÞ|ÜV7_R¸çw$’©ºÎØx¡P­ö±§ÐK¦¹sr–J$é›È$gæ/}é‹èíí#vwX|'ë‰^uÕåøì­7†Dp)Š ‘™ZS9%Å%d‚›„éžn+Ç Ä ËšžœCá¨;ý^Ëjùá ”%Ƨ QšãÁÃmðz|†e˜tøPZȾÅú§ý˜ŤC’ ’Ù&Xslt]”"Úï£Ï!B"Ns¡×¢¨!ŒöãÇ0À\nK,•·¬¦ÅóšQC׳²f²¬6¨É¤n;¸Ë›p°¸Ý=Ýxù¥WPQ^³Ù ¿/@×îbJ/jo¹ ÙM‹ñ½+Uä58yhQÏdq.>{rçC–'¼€Æ¸9E‹`¨(¤ééPº² ÃGüðtèµÄƒØ˜îv¿(ƒ¤¡å¸3A?ŽímƒË=†éÉ<ÎüëÙçqÅÆ&˜ì£˜ UaÒÙ,£GšÒÌø7 åO¦ Ójù©@>'ЃûKéQâ=É_%–uhßA<ý×§à›)=¬žoÐka·Ya0à&S}hh›.8Ÿ¹ùfá¯ÌÊÎBSC=±J³êèí@0 jµe£šÌz“Qò‹ò\âü½qnšÄŒc†LY+ö=_0(Þ§ 4k•´ÀcĵXº¸Ç[»á %È<.Gk÷ ¨Öê€Û„;÷UâÞRŽ@MÍó‘;:‚¼|F†§ G0u‰`\Qi!ÂÑ0ŠŠi^Ö¡Kêöx¥9ûÜ^¸„#©SKQzz  b€EååÒ6ÅÍðhžWÞô9¡±šî7zð@ V.hÂïù æÍ«CcÓ|<ñÄÓøô§?’’º?1Ì£M,©Ðc÷ ¯ãÒÛ>‡ñÉ·PäéCa‰“˜r=w¦b=læ“îµÃTU†å ÷å}˜zm1è*d/¹¶øIô<üŠŽíô*t¼Ó€¸žÎ±¤ c]êIÚ²aÏ5àhk'r ÙXÝ @^Ù4þþr*ÝX, ´Ù„3 '¤™1wÈS™OÉ´]/ÐS>›OÊ0*Ôße§Z sЇó8ŸzôïØóæër!Ä£1vl+JØH'tõ  ohz‹å5UÇ"ÈÏËCUU5± …?À?¢ù…h `Ñh5ëTÑD¸R) ‹ö!ÿxî<÷üKpyý¢JŠküÕZ™ôÄP ÔÖWÒçkàòyq¼ccÓ3d›á512á@DA¶ÕDßGàœ”CM¬’úø‰(É\_±zî½ÿy‘鬔GEO&]–Tjiʲ!ÊìX [¡BÀ¥c’)O¯qÐ.‹‹ss#<š[Oë1,¨*N«¢Ï(…ŸÔªZˆá̃õKñì?ÿ!\Ë–.G{{ .\€––cX²d Ö¯?›ÀëÆÆÇE°jûS/Byí…¨ÐoG}Õ9èÚG@U;bÊA¬wÞ1{Ì•aÄW«n‡9 ²ÖÛ`«Y ÏÉÄ¢ aßXËj#Þÿãѿ߇/ݱŽ$þùÐdqøqé¦sQ`;†`,ŒÑ©òòã¥mbq}%Õ ™…“Ò̘;d©²Mù]RYº_»U…H:õh4Ž?Þû´íÛ/Øb”+†„^(›c£S¨«©!³X޾IÁ‹K 1@fsNn1jkkÑr²€‡aZIÇÓB¥‰£š^_¾¸&ƒY(Ýë ü¸ú¨¥¥ o½õ6^zé%tuö –Ä›Y' ¶´f D€¨§¯•••ð©&ì>Ú%ÜYˆÁN9Fè;ÉWiÉÚVÃj2‰’ÔX< ½Y-DP^{·-'ˆé+u̸%3æQPTsQ%BdG¹(ßà&~aq31ob¦²m(ŒÀô½2辎>üó{qëg¯E,ÌþWeJ®P†ÝCXZß„^xž6“!cûöm(++€ùÄã#  ´¬K–.ì”7Ÿo|÷>ìú×Û0]sv?ðO”èèœk*áó4cÇ[Ïà†›æC¦îÈ ÐÉê0´µykª_RŠÁmC˜|þ0Ê/ɦM¯î¡âþ,hƒ^ïCöL kš‰AG»P˜Û…mF¡‘ù`/¨ƒYŸ„ÍT„}c,>¯6³p2@šø@@IžBQIF/ýªLÐÕSÑò¤Ä¤0¼ÿo8ºw/’‘ ZT$~‹ K‚ABE@:Šp8"@Úçö!BŸñøBÈJ Jœìê-B~Û×py|(-ÍGA~>ÊÙ&VÇÚ¢»wÄo~ùp²½SäÏ•Z3¶[42Ì+³£¤0;ßÝCŒR‹h8Ž‘¡ Œ9ÜBøØf1Âã¢khZè‰ÊT1ÇxB&|—Ü÷)7Ë€7w¼¶/1`.õŠ¡ÜjA BS}Í›£ø!U5~aš«ÓçG$ç˜He+( ֙Ѹ¨*A_$"@nÐáA æLpy}È"@ŽFB6O§Ñˆ^KzƒŽ˜œJ­f–Û#€åf~JŠÎSF€+Ç»´|ù‹ßÇääLªWƒ²Ò2ì~g'1N/Š‹Š0<ÜOóÂËfúüW¾òE(é­_¿‡„ÛåÆ}¿»ûB$Äꅹг¨Ë¯â­è<ѪÁ +>kq>zûš°åî?Â7Ö¹®AbËêb+²Öh`©Eþ5 `Z`FéfŠÎÒB§uAf1` ÍIsÈ…"áC ìGU±î›;z§ÑŸ£ƒú¬"@¯@nE†‘f€43N K‰| Â$ªLÔÞ+eRåJø=‘@ïnÙB&y‰hd–rJR‚‰Ù*‹9÷ö ó—ÙžÙDÀBL,L 1¢Y׺scQb€Uõó±pÍ:DtVÌÄ”ˆÊ¤¦w½5dÒæZm¢§§ÅÄ~ùct>zŽŽaþO=tœŠ”—G¯e3tâÍŸƒ{f­½Žÿƒ¶–ö”®pË-·¢n^-4×ãÌÕ+qåå—à‚s7b^mvìÚE,¼ ut]êjkDgÑúú2ùsPY]AŒ´g,ÍA¡Q†Ý/Ä€.«ñȪ¢ç¤ ¯>ú;Œ Dvu <½Ð(L´ ¨aªXˆˆ¢SÏ´Âw²ººæîì¡3='0*EÒ{Å´uƒ/Ü‚üõ•¨ºí8«m+c(·cG»3 'cÚgÆé;š<@’aŽ›4õ¹`šéJ'­NC Sçô”h`#¶,™õéPû††EjKÞU–btxL4NSÛ ã3ƒãÖÆ'{:pþ•—£¼¦VøDÂd—TåÐ;„Ò=‚õKêñæ.œj$Ü¢_§ˆêä#t,…Ë“D<É` DmUº÷ºEWN0eÓ÷ Fˆ&c1q^µÄ^pøœÐé´Eb츂jØé…Þ¨¥¢¶ìl”—Ub|꘨ý·Ùm"ÀÄQ|V¢R©”ÂTßùö›šGiòóÊĘpºðÝü_øÂ Ø|ñFT×T_1{‰ÿ|ϰ罽pÓFsÝ—¾†æÆ…8~ü(Ü µèììFkk6.¹ôÌ««CuU5&Æ'qå•f̸•xµmC}ÃÔ­†O> W½uQ”y5ˆ´…úÌÐæadÏ^XV®&æé=> uå$Sj´Ï@ß×MɵèÜyYNè5pU]RޏgZbßM%kqà@n:o}fád€43N6¥4ÕW(@šÎ+åÖ²TŸié5×_‰û}ŸdÊÇ) MŠÜR6·¹qSÀïB:ûSÏÕ=ÄLYž™+‡MÊpù7ÁLl“u’©Ü!ôÁõò¾F{N® A/ “9ÛˆŽÀ ¥„’B1J¡P öˬÐ ÀA¯ûÃôìpXŒÌèB».)c.*‹É á—«PnÍFÿ¤@,I j€ÇëAI‡úŠ" LÒFP µ. …¥0eeÓñ£PÌð¹]صó]ø½.¸\´)œ<—“ÿ=C—@J²ÙKĦ'`Óf“€ üÃãðÑn¼ùÑËi±Íó/¿ˆXoJ¬„×ïÃQQu’@¿¼ŒØr6ü(†zŽãÛßú&Î9o´ØìÞÐè ±°ÌNL žj´LŽbdøìd¶‡ëñF÷A²ÄË4Õ£o,‚`ÑRD§hé}ë6¨Ä<âã-ïÁÓ¡+D®½­–  tU«bŠÔ¬WbiåRLÒ5 º“¸ûÚ«PDKfd€43æÞ¹ÄF™X¦q4íyI¦SõÓâPô|îæ °}Ë[h9rLø>YL™K=PYbŽS‰T²ÆÇÆ`µZÉóßF ¤S«à˜v¡¤f>ªê…Â<Ò-էΦcy\nLM #Aæs±1Š|úÎ š㥃ûDðŠçlæ’̤L¸ ØOë Å $X& ñ¸Èôæâ€ýŽÏÇb_iE¹6äj4(ÏU£(?@.F澊®‡*šg+™ô—Ýt®üôDÕ•±x"´IèŒ 4­´A§‘cÛÛ[ñæË/IÌ<™˜Ã–AŒU…RM×(*+¢*áO¨’xüÉç †~ã-×À31nzß‚õçãXë º>°Õ0šrPVÛ„m;¶Ó\­¸øìÕxî_¯âßýÎ<ëL!ÈóüÁ÷¿5«—á,­¯oñà‘®\¨r¬8v²–æPÖ_ˆd”®°YJÉŠ<ˆ݈àc! ‡ÜXüÛ/CkÖbx¨ Fåbô;·¼ç_x †=í˜"¶›ï,ÂOüC¥;pÆºÕøÔu7dOH3ã#•Ly…üT~Ú¶Ÿe¨Ì“²”‡_ùÖWqÛMŸ¡Å§ÅIŽ )3TVfŠ›:N °dù2¡Å~I‹Å“-µMPiõ©¾FsXñœ$u~ÎË·Ããv¢©¢Ã]­¨¶Ê±pýZÄív¼ôÚ ô~•ä—•3@H,:ObÌDŽEw8.”¢â¡T¾)}§š« 4:„jŒÏé3~œwÆZ¼öÆn(U:ÄÃ!5äðá‹ßú6nûæ· „Ѽx‰P¼gŸ/“…òÿû2ù ðÄæóޤ+˜tfá[æb« Æ%%(îCúÔ3¯B­Qàœ³ÏÀ‰î~üî¾{Ѽ åy3JkðÊ«o dÙÂ5xùíí¨*."f«Çûï¿‹òŠ*|óëßÄÁ„.+ûO—-[ÇÔ0âÜ*fùÅpÚª0@÷hæØaT¨"(3hPA [Rl­±±h ΆÚüB¢ÕIî^:G·Ë…Þ~ o=¹ ×n¾ªÜxæ,^¸˜ÀvHä»fFH3cÎH¦þ_jÅ| ÞÒý†8¥I–.i¦· eÕU¸åó·â‘û½Ž¤B§¤ð—²ŸÝ·lÙŠëoøœÎ”TW¢~Ñ2hÉ$N¦‘N$‰9x=«–¤ ïijnµð±¤3¡JÈ_»|%Ƨ¦qèð>Â!h•JĉsëæœþXá/ä %bdÎkŒجè¢ãÅ9ñéDEÐ*,»#Nø‰I+Èàå×Ѐ?ÿEáŠàȼÐ"@€—•¡¾û?w!7/ÿûË_ ”|¸BU_Á 4N£ïVŠïHàFéß^bòyüy8ÉÌ¿öÚ‹på¦ Ðˆ±puvQþñì ¨««EiI ¶¾µF³ J½–6§ -:=z?ùÉO„^kgGæÏ¯ƒ×ãÅúuëàœq¡v~-þø—¿A®6à—7]‡ìl‹ØPvíØ{~û+¼÷þ ô‰^º{lnn.^zåe,n^„Ï\yöìÝ‹Çó'lÜx6~ö³ŸÁCßÏVFGGjj2kç¿#Æ‘ÿ%7B ðˆDqÈf›_¦E d²ÓwöÅko¸+ÎbÎ7ßüéÌÂÉif|؉ŽHÉY[ŸA/JŒ,@ÏnZYÂg‚~8J KLðΟþ*ª*D’93BN Jp*çlzXsÆFüíá'ð›ŸüXòBJµR¤²$“^ž–íü·G àà ™™'ºza z|Ú#"ô¥v-î¸ýó8sňXªSi1QS.ÅQXU‡% 5"å)*‹‹¿Ÿ5ƒ^ƒÅ(Ò½6áæ+ÏÄ÷î¾5óD6ƒ4?HlT.åÜÎÎO.f• òô¼é¢ q߯&”¢äà¬;g¥]ƒ7ñàÞRtâ îa=}òE¼±å=ávX4¯\€o¶^«A…… BM¯×ÕÖaçÎw092„•u8oã¹hhlÀ 7݈»ô¸Óxíõ7„±vÍ:!=h5eáà¡H7㫬¬@a^Ái{âÜÁÌ{ÛÛoÓwÄg¹wó¢ÅÅÏþ Ù¢¤ _üÂm™…ó_2èoW–Ú÷ÄZN?©ÿêî¾ûîÛ3—êÿî˜ô‡02 at„˜OWL‰c19Z£r´E8W¢+©BwB©H •dœýn~Ì««Á–7^%¶’˜ûJ9‚/"þr‘’ÔCì”>ÍK—ž’ë“á´t+Y*—òt>« o½ò*N¶¶a` ÅyyBŸ´¼² åvf–3X¾z9 –¡ãäI‘†ä ú%MAƒae±>½#@(‚û-c‘ætËÕq ¥o¾—]ÜŒéÑT,>ÖüQŒ ¹d³sMÏK–z]Ò#Hù |*óL¨©®Â¶íÛ‘¤ù¨¸ü6µ)‰GR ªÉR•Y逷ªnkë@®= ËÏÇ‚Æy¨¯+G6™ó¥Õõxg×!x x°jÕ ˜-´A”ÍÃ;ヌsÏÝHµú¥rÛwlÃëo¾I 3ƒÁˆþþ>œÁ¦T³>Z޵àèÑ£ù÷àñzñéOß,”»x°R×_þüª „¿ò•Û±sÇ»¨ª®@óÂ%™ÅóyÜsÏ=¢§ =â)›-Ñœ5Û2>Òÿ"Ó>™òMn $0¥Ð‹ÞAá±AÈ<3È"úX¢’ÁD‹?[)#³U†™Ë…׿˜Q“»ÇìÁäÔ$zzzñÞ{»ñôߟµç,3Çð …pßo‹‚âbl$æ†9,²Sy<y2má'mÍ3 E‚8H€*ykÓ .‡±(q¥gžw>Šh.Ï>ûºF'àðÅæx éôX¹œÀ~çX³²PRX ³ÙˆuKš±jY¾ð-&õ6´î}ýN6æå¤&ÀéZ ñ2ü»CÁiM":§ p§|ÄqlX¿Š˜éOñÍ;î‚/†ž“û•t•t2«e.)eö.§ Š? –ú§‡ŸEaA¾0ñ¹3©Ãé¢kıãmX¹l jJs…þÀó/¼Š¯}ã\Ñùt;vA~.&g|HÒf¶lÉbÐwŒMLattXä Lâ±aÃ<öØc‚)Øðù|غu«PŸâQSSƒ¦¦ÄÞõèêéú g£³£-³p2Á¦Ìø·pW-Ñ¿¼\KÞz‹ÂÓ8ù"çVB•JQâÁeƒcÓìÃè T½ÄÌ匵k‘O‹wÁ‚¸ì²KpÞyqÍÕ7;•‹ŠÖÖ‹"¸ó;wˆ ÉªuëNEéSÙ³ú|2)Šfàeö–ŒËàø±ãX;öžèBùoc>1¿â<;|Î ô÷ aÊá›ÑÍ»²Š ¬9s J*JñXóJ«ŒPú#HªÔðǼ0Û-:Žò†¦“Xuþ¥°åÚEçM™,t6­,U°€”jÿKG—ÅÂéžkN™ÿr‘µ~í Ü÷Ë{ðÍïÜ o(L¦¹V”|JifÒµß.ÜÌeˆ%CĨ‡|¿úõ÷E™n)mO>úò ÜçWØa%=6á9Ì.9‹€]*“ÓÈÏÍÝ¢‚7G\¡ÃÐð0à¥k244„ºº:q|Rnèñx>ܼ§{úÜsÏᦛn¥´\xÀ`ÊÌ´µí$6_м¼l\uéFb›£´y¢¦º’6ƒA•I,_Ôˆ7vÅɶVÑù´‘Ô —α­µUiRðò±Ž6²W_}õ#ÿ&víÚE…ÙÙÙâg.{å–/3N'3SȲdeÎYŒ#3þÿ棲„7‹äòùµ‚/1üáþ?ફ®ÂC=„C‡ ³;)Gyù¡V«…Ä›Lv*/ô0½—}•27 +.‰ïKˆ²R—c _ÿÌm#P`PbГ˓"š} LéuúDë¡Ã¢üôž>ÂôýþHô4Mû/yDÉÔ~ꉠ¿å}üëá¿â½·w¡¥ýz‡NÀVZŽ}‡†ðÈãOc"üð翘Í`ÏúB1++˜–Lσm6›ED‡Ã!‘ÓÚÚÞ‹§ÿù2îýßñÞ;»ðÔcÁn½æ¤MÈx8 t 8u!JA:2ñEAB‚…Xxùµ·!TUd’+ ¶º‚®S:I$ÿ+Ô&b¥ãðû½¨#'£Ø¸~FFưù’ËD3À@˜î m²ºº»ç¸;d¸øâ‹èÔƒâ~§ÇÊ•+ƒåVØ, ÿό fÆ)ã…—˜”{°—XLYÚ{‰ÞÞœ7²²²f™Kz°"¾Ao ¯‰‹>ðìËã4$™¨Ý'¦9=ï|ù«ØòâK.ô´ptºÇƒ§Ù¨B¡=û?:•\ £V/æK&f½ñ3>èÍEøÇ3/à'÷?ˆÿó÷gpß#á•^Äÿí#£°‹þõò¹Yi`N] 0 ²²^?zÛ=ËÕ:œììÄ{{ßEßè¸põ÷¢“˜1k¨†‰©{#„b!øÃ>1ÄҸؔÄjc±(:û‡…t €u¹"å3–Ó÷Ë`6ç`ÂáÇž={ Ämb6×^}d°þHƒÃC´±D¡]W˜¦kÍÌ™÷š5kf-ŠÝ\ Ô÷îÝ;û3kìØ±gŸ}6öïߟY4 ÍŒŽ´4D Ö71&³ _-¦Î®Oî_Îú¡ÌJÓƒYK^q1þððC¢·˾)åP2˜ 0"[ßÑ×…ßÿÏ=¸õ²kpÃåŸÂÓ?ƒ bTÉTuPÈÀøèÊòl°èµ§LkaºË¡'àÒ(ÔЫtÈËʅ͘³ÎJ ‰Õr/¥HÀMbtÂibr?¸ã6<øè¿0ãò‰ Ñ~2e9P4Ûê´GrP1÷Y&ýs‹¡MÀjR*-òŠ a²Âëcë;»qùŸÁ–m»ˆµƒUkŵb)@‰ÕKéZì a@l?õ»‰‰éY@OJÊÚt ®æŠ"Çd§cé ]¸ô²+„!gèMVŒCBÝt<¾l–OOM¶!r+îÜúQƒäÈ‘Ù{Á®ÖC5»e°ŸvÌdNÆGš§ÝˆX@¬VwD M$(Z VG vxxø?Ïfý\3qll ¶,šÔãé§Çí·ßŽî®)͇»‡r‰¥N-jÕ“ .›ŒÁÕ{Oý¾ýí¯aàÏ.Z‡Ã ¯' ě󳳈qº1ã XËÒÐk ÚT ÆéE¢d5 ½‡}§¢¶>¦ ¡ Õe˜q´¢¡ª»·½‡ §R~¥ %ùy"ÝI6Çüjÿ<[Y2Ý4U$µCÈà%E»XŠý£}]˜ìëDoߎjÍJVâÏÊ™u ¨d ¶J¡ÍÊUPüÝPHR‚,øÂµ ì±ͨª.¹¸œ#Ëe›£†®‡ Ë¥«— ~q£-ääÄ#†C°Xspìd—®†"Cèëí@ͦ¹Ä`!À¼¹¹ùcïïÉ“'ørŒGeEvî܉¢",_µ*³p2@š§ÝˆDXôòŵ°*’³ èõz1ELæ“FÍj;É´­(+†,D~¾¿¿ï×øì-ŸÅä¤Sb,d®çÚ²D~)«äKe¨,Íý‘È$÷DppûvÄ•j©~À‚Û3—V¡w‡©bÜ D©!S9">«#všˆ'fÛx“Y|gj/NÀ¿~ó*”X¸ó®[qÅ wÃM@ÃuHMå…¨*.}—dÀ¬€hP—˜êúyyâzš÷὇Ð;åƒnÛáôا‹LsÙ½‡«›*¡GÀ®PrUSLOáë¢óãÊ,y\!"r‘Xk–.À¿þelßs>B݇[6®¿j3ûúQ¸° ‡öu °2~2ã ²UІñük¯chdËV¬ ‡DeU9±Ë£åéQ__×_}–u~pp0Ëår‰.°<,hÆû{ö ¾y¡pdFH3cî ¶#° û°jsüœC™"3ë ÖÇfâtÆuÂdÎŠÊ ¼ñÖëxÀñ‰€ž+‹ˆYF”Za’ ‘东@3.|ªNdWÉ N†AÔR°8®7h,(+°âʯÀı#Øñ~‚qL¹ôÙ„Hlgf DÙwÄÌ40qca} V¬¨Ã=÷<„ξ hésuf е¸§F¡$`W¨äR©RBrÔJœTŽ_ÞñCìE¸ðê+Ðrð†»;Ñu¼…æDW×Iœ³¼7^|þø}ˆr›èHHê*":Ä…x ³Gá@\ˆFÇEåSBT?™:,\¶~Ë—,í¥'§fÐÝÛ ³% jyBÌcjb ]Bjlf2b‹ùF=â´f›uøìµ#”PbØ„ÃéYÇÎ=ï\´w´c1ý4ãnhhHU}8úióééé@š~ÿ?Ÿ}U5µˆEb™…“Ò̘;X~.H·Ãïõ£Ävбô÷÷ä"û tîàô“ɧ?«d°àîœ/ºµåeøýOîF$,)Ô³PJT!"'"Ÿ‘hBR£ci„f¥ˆCo°@a6`z:H mBŽZ†b2Ós48ÞëÀ ?€ÑÁi¸#0±Ü”Rˆ3¸ ÑdBë±øË?·ÁJ Ÿm‘=•:%4-f¦gpxë+X»q­("H+âqÎ:7¦SëTØ¿{ÞzóMh#.øö, Œ'šóTøÕ/?þâ~n˜§²‚qšÔÇ*!Xi<*µea¦Ìx ¦]/--À#ü™¸>ðgÌ8¦1ÒßG‡ø’µ@›‘BfN ‹$‰)Ž¡¤¶:ö¹jµð9Ýȶ)…p5×ÿëÔJÚå(ÈÏAnŽŽY-˜}Gûéþnf¤s3->ÌOÚÕÕE›Ï ñ³Ùl aBQ+™Y7 ÍŒÓ-&g8çô8Væ̾ÜKlèo"1¢ŠŠŠÓ÷ƒçdrfˆÌ8¹o<‹‰0@•‘yxëW¿Ž¿þï}Â…TÉ$ôEøô~^Ü 4z­Nøiýa/áæ«ÎÇú3V`Ô; ‡.‚­‡z°¤¶Ÿ9s!œoìÅÁ€n›;ví…Ä–ŽðQRhChº‹.»W{¦Œ›ðöö=ˆúCðÍÀRdC€@î±Gþ†‚’|`}‡s´ [ßÞƒ>wʤ®éÚ4–ÂÙÕ•Å“E‰+/X %±é¤Ì‹Ö S–!§W±\‘$FMóDXJ“"Ð Xµ|%1M ™ã'²lv8ƒadÙ²`$–«TIJ\¹ù¹PêŒÂíÀ:½Icn©ðײâ•/…qÖCM50d@å, ѳ@)å.¨¤gffþmäb 6ß?tƒ%àîšläû®N×â@Vfd€43æ ®\òÒÃ9<„šeµ³æ^ww÷G–¦/Ätƒ,ûUMF£ØD\ª)çî™lÞrí9wõ\¸n¾—‹¿ýî—˜žp‰Ö#IZ˜ô+¨ Z5Ì%iá3Ðfå硾¢Þ°òऑ3hJPœWЉ±XÚ„k—¢¬°šy5h¾ />ÿ.Y¹o¾¸ë×Ôcå9›QP^‰É 7:Nt`„Lýêò"|ül9VäМÞ{í9,_¹'Þ Ø|ñ<õÂbŸJäd«á˜öaþ¢&x&¸úês±tÝJL¼ø‰(’ØtÖRlºêr2o=ðõaÀ통¼Cïï€*0‚êÒTä#1îD^DiCÈ*«À·¿ù=¨ýB³ÜÎô¡cb¹YIšk¡ÓeÚÎ#­X±~ ._&Z9gY³U—Úaɲ#2ãCÌ=Mn@c± ½ñê˳±ñªyèêE[o=šj4xíã¨n®@v2@su“YG!§AYL˜_W‡»~|zèzFcI¸]8ÈWp«DDI!·G 89< ™ûJnëÌ~Hº&Y&#~ ¢å:­ ËkQQ[.e+ƒÕ{8]± @Ä ‰‘ÊS¾Ï˜TÿÏج4å÷€Š ”îãÇY}}}³Z¥</Z„GŒþN 3 '¤™1wÄBLÆ }.XR‹Œ™hw÷'wŠäDí´l3ÒÖ¶6ÔU—£¯»ï½» ­j2=]n/ sópÎÆóÉbˆt!­A…¾ñM,[>ð FÆgD ¥ŒXViU ‹‹°ýÍ­ÄætXB,6aÌF¡Uƒ ÓÞ$|ÈÅ£3¨l "J ¥hh@œÌqgÿ8\&3VÕTÂ6²´è>ô. jz]ê.ź mè<Ö‚¡mȳ¡Ï2Bc°ˆª¡°ßU¶†<Z޵¡võjX’]ý0«üÄkÐw´ ˆÊ°íèS0_Ó€mº1Í‚ÊËVW#wÁhmAžÍsb¢,JAçC mµ‹Ô"µR=±lµF)D©7lXƒÐÌ$ág‚6=mÙÐkth¬ŸGÀ§>åãGàðá¢#«Ýž‡ÅË— <ß‚pÔ‹$·\áûA —E¥C\õåšÀÄ@|CýÄÄGf”ïéÇ 8 S>•ÉQV^.ZCÇ?ÁRÉŒ þ?7 5™Ç*’LB@¨q>èÇ»VeÿhÄÚ ÐJåñpd×.èŒjÔÕ.Àû;±áÜ „z¼è[J`š$ U·b%¾_^ïÞþUúŒKø W—äcÝÙgbõÚxô©᜞ÁÆ«oÀŒkÙ9F„>Dt6èòsa/©DtÒ…€Ù‚Üüd+sà5j¤´"Y E•ËÐsduÅó0â™FË‘ ööáµ7ßEEŽ–Ül|)r¯Rh¾YXqþE¢ ‡Òr˜SŽ©*ŠìÐh5r<²k%Äšg4@ëû¹(#ÀÞ°ùBü DªS4Ê‘y)¿•} nÇ$r,bäRƒ@6±—.hÄ¢úyR{fbEMóë0Ò+GkËäëÔ ÙÑNCižUQ+ÕjtìØ.ºŸº| bðÈ6Üô¹[E¹ªðÅ2Cel¦C^˜•Z ½®qT,l-¯½õbÈ}=h;Þ³& ÷´§sf <É5å1?ÖIf½ ~¯ÙyåB­já²FDÞ=€“ûßÁÆë.ÇåW\çŸ|;_ÛÝ;vã¢ëo"°JB¦RˆàNBÔËÇS¹£qq] ŠKñµ{îÁ±Ã‡Dà-Žó• ¾`¹ùE’ —{µÑñÙOUöK¥±|írËj¤J+VÝOH½¡¤Ó¨Èé•qj¤® 9§é Ôà#€7 Á£S0iFúQƒï[&s-› žPeFHÿŸA¥“N–¥Ú"ÿg@Ê —Íì÷ƒeŸ(G˜,Y¹ÂÈÕKâf+¥VÄÜe”U“¤âd:+èuÖhíè@{÷º:;pÁ™Ë¡ÕF±~ý*ìyå_X{ùU(,®„b‰.}><˜!À›_Z §Ï ¯—X] ´F‚>'’*”¬håžÄÁ·ÞB^#d¶ã²MMÐxÛÍzl¼ø\Ü–EqÇÏîó˜?.ØqÈëÂH÷1É_³Õ‹× ?'ŸÛ~t'οòr„"1‘ÞÅz¢R÷Õ˜£¹£©Í…•ý‹&« ëλ@bŒÂ q-ø˜ ¸î™)È¢‚«Š\P.‹ˆ%$­R±é¹½¸¨SåœÛ¨L(eH¡Ÿ6… RŸ\°Œ6ÚH܉ß&,Aúz§ ç ûf5_yp½ýÇ)ÿŽ­“ô{ø¼ p¬õdfád€43æG(W_/j–UÏÊ‚p´ö“RŸØoÆÚ–é166šµ  HêB‚iqµR$Õ<.!z+q ƒH4ÂmIÄÔ¸ý+7bôD+‚r²Kë3µÝr~ó›Gð£;r>™º¹˜—eÅÙŸÞ…ˆÉ„Š „»Oˆ7ÀE as»`)©B„¥*ó!Ö²“® äÆ&"ž}æ% :<0™5øÎ7>ƒ ßƒŽ–CȳÛD½ÁΓPÑÓ°fôÖÂYv–úJæÏ'“[’“¥1œëÉÁ$¡¨Ï•Li9?þY.uÐY“’6«hÇÂÊúµ§ÏÅéI(AW abš,"ãeÿ5eH¡Í^z6îBÊr{aÚ¼B>/dÄHÕôo£* f`UÉ¡%€¶i”Ð7T£Ä܈M×zƒiN7Cˆ®¡|Ÿ>NáËápœösQQvï9Y8 ÍŒ¹ÃM æDÉeëfE;H?ipé`º}À(/+‘Ä>HÄŒ@„ïN=³”BøÌJ˜˜•“Ò£R)åØ|Å9ëèÅlA<à±®ŸýÂõ¸ëÞ? ±Ä„†Eµh‹[Ð4Ÿ€Ò ù__Ü‹µõU÷8ᬬÆùdï$šõì}uZ¶ìÄ’æ*ÌÏ-ƒÇÆ£ù&ô5nºnt*5v¼ôZö´à»¿û±èĹkç|ýÇ¿ÆdTæ$K —g”¥\¢jB_’iÑ>ÑÇ^ê•Ú€œ«€+L&¿V ?]ë0ýì#Vé£ó³—Þæ×f#¬e¦I› ]—h$‚01í°ÇMÒ]Ò…,G»T¥€V!CŽV#Ü1ÙùÙÈ2…\!W“¥…§ÓÄ“] Ú¢Û+¤ŒŒt~îýû°Áïe ›Å¨Û1í3@š§ OB],£É2»x„Fè'Œ²²²Ó4-‡††Q_W"Eª(ãR7Ñt{å„0{å’UwHÆâè@/|ÎAd«5P0ô*Œ ¯§Ó7êë‹ñ½ï~Šè4t:^muãå^dWߊÜEË¡'ÖvB©æþ¤œ‘11]צ{påg#È¢Ï(ýa¼ü‡¿áW}Zƒ«W4bñâyX¸p¶¼ø&^ym6­_Œ€ß…ןù´ áéGÇ­_ûªÄÒeÉTó:ao 姘œ€‘Lí0±È ÚhS˜VÚ,‹ôɈ=ÊT# z@Ž@ˆLm¿²pDƒ¡§ï#+Ù´‰ä*’¢/–I«¦×”(.µ#ÛœƒFb½²ó_rЊ]*Çää¤HqbðcÑŽºó½äßsí<(P|õ«_=™XŠ‹*8¨ôQƒ‹,æ½Î@ 6lÊifœ6PÁ”ŒJl† ‚Õ"ŸÇ¦¹þ58ɱçV*Sþ5)¨!Ú-§²T?%!}'…R½' "4¦Å.ÏAñŠ&è5 ’18BIVù©†ØÉ@2« ð¹¦hÁèÈ(¡ý¢‰+ŽX¬™A|Ýùø|ßÒà:lçN_â›ô’ïZI›“îYéìw Å~92i¤ ÍŒúÀ"1ä´R4˜þc6óIªO  ì+›;xk5š”Œ¯4¹xŽ„üÐh i÷¢$!—Òûää'n‰Ñs¬eÕ…PX³ˆ9¹õEˆD14GݟÖ¸–Ú‹@5ÂTe–pxºŽ£,B­I¥Å(n\Š‘áttt¢åh'úº{áõ{Å⯮¬ÂwÞŽâÂb„‚<÷Ìãxø¥÷p÷ßıñ$ÚjÏGOa¥—Üj6y‰Q>Çàè%ör#ÀH&·AAŒ7A±NK¦vvb&51=£yåe0èRîÒ`–ò;§Û³øLIì‘prr ããÄèárÌ`phnºþü{G¡ Å F!¢Êü³¨j¢sbFÉ Ò5óÌJ?j455‰>M|ßÒ¦=?§õF?l¤ÛGÏÌl³²¬™…“Ò̘;f!”f[ffÓÜ}ÜàøAR™0éS¦>™¹œlÏ&çô„”â£TI ˆâ’¢<Ûø\ºX·x1?r ó`2ê!W顦ßç¸Ì8Qµzk"l¼39§ o?ŒUv3Î"yÜk¯¾†Ÿ>ü'ì~w·'feÂ'(“€Âb1ã‚M ¦Ç ¬"ò£8낳±3l€zùrôŒº`Õ)¡Ÿö¦RB£`&©AnN6² 6˜ ¡Ö$O™Ù²9@ÃÁÇ ß¾^¸f\ˆƒ Ù¬fétº0L Ž„…9În±±$$Vv“ð3Ã@À\]]…,K6ªkªE;—ââbX­6 ¸¤H4¡cåó¹õ–[ðä“O~ä=cS? À”¼ÏéàÔ® ¢øö¼ÜÌÂÉifÌNZ늊f[hpYà’CÊ‹yî ã´yªusœno‚]”nv>Üd +’*èä©÷¦òñùý£v{rõ¼ýì+¸øóŸ†w´=ÆJ U­G‚…ÁÊ3Äá=¸¨"®¸½}=¸ëÎ;ñüCt¼œkÒòàŒ‚Ïþó¸ð E5€P)½~ý\}Í5Df’*¾ ©& B ŸU¨˜é £>ÃþF§Ó)®›Ö¼éðƒýˆ ˜ÌÓŒq.X¥fÐc@äMˆçg·ÛE ³Jî4À< ,­b¾*Þ|œãýT¥Td‰ÔýýïÿÈl >g¾|½¸3ôt?§²<ªªªNMåx[«pdFH3cÎp¢byíl?ø*þ|Ø`Ö4W>ÁÉ•a{P‹L=Bà5— Ú Ê¡ˆ&¡MÆ`¤‡MF¡,‚ Ó}œHF]˜o×Âd¶¡ÕÇüÕ"ÝG™ˆÁ½ÿœ­—ãÒkɼ's÷®ÿ¹üÃÀ>úÌ@¯!€üÅ/~!ãðáÃxøá‡2+sù¬#ó»n^-îøÞ÷S¥•§TñY¹‰[P?÷â 8°o¿ø ›³ROúÄiLŽÅæ5?3rD›Mç4r@ŽŸùwäaåH9¿ÿãºxÎÝ $ÆG„Î;È~SvNˆÅBpÌ8qî¦ÍPÐwÝBŒôå—_ÆÖ­[?r#ä¶Ú—\r }ôQ1',ù¸@ ›¬^½zöœ…FiOV®9#³p2@š§-UÇ$Š ×#½ôH?)‡”s;‡2añÉ5h‹›áþìÄI½cP’n#Ù®–Á¤’ÃDo4i4P*$Øî£E,—™P Ãï‚/©…¼{GK7 ¤Ô!13…äûoâG—œ‡¢ü÷9|÷»ßųÏ>; ¶d¬o¼¡ÂmŸýüií7xN‡Âõ7Þ ZOÜ`ÐdŸ# 0Óäkòq9?ÌÿÈ9«~:ƒ£ÛåÄÀаúzLNM`ŒîǼ²<œuöÐÒ1¸BIGàÏš¥Þ¸yð¸õ¶Ï‹ã3Ûäsá…>ôò1¹(‹5ÿð‡?nË!½òŠ+EUS˜·ïØNù?Ü2#¤ÿ/ݯ[$Ò§Ç'‰•¤ÍffV§LXJ4IÌk߉°B ΈæŠR57K­L¢QÀâ‹?3è™r¬°ÖV æÈº™¬§9DÇŸh;‚oyA¾ø™k Qjq´å6o¾ä#3 Ę…rjÏ·¿ýmÁB?nC`¥N¯“jÍSÛ›óË–-Ç]wÝ…ï}ï{ëâàÂ,ÿÿØ{8¹êr}ü™ÞËÎÎöšì&›lz!@zADEõJSï~D¯Š‚b»€RE‘Žô€”BHïÉfÓ6Û{›Þg~ïûžÙÍ&‚×û÷Þ¿þ>÷ûÀdËÌœsæœ=Ï÷yûD¢â`X4!•ÆÈð}–ÕÜŸ”Ë@SDžY®`Je00Ð-½=ù\nß²¿zøIúK…¨Š ý2¹§¿sëJP[SIªº¿{öYx <°’Ùïñr£en½ù+øÆÿù.ŠJŠðØcá·¿ý-¾ûÝáƒ>¥¾ò•¯|h=ïÁ‚¸ó®;ǯ1Ÿ÷ŸÐù½ð£WHg)E¤ P ÏÀ4!rû·ô!å&'–Þtýu2Û‰óð‘Cxë•—°iëìßß$å™cå‰äÆÛ`a3sîܹX¹r%Î9çl\yÖ*\™Okç$©ÖöV\FêèÃH”·sÍ5×ছnºuëpï½÷þ§ªš „MWm+ÔböìÙB&'ªØ‰DæôXW¤12br~ðßbx Þ'êk«QW] £Îˆ¬Ë. ûz½Sú £9ĈL=¾X-FTTÒëh»££Ã2ë* rÌF³Iú™ƒdÃÄ F´·vÀl° Ú ‹É ƒ?÷ùO᳟ý<.¸à\à ôõüüç?—ûuOü,'þ<ˆb¿-¶[n¹E”6cÛÖm¸ñ¦ëhˆ!Ë9ÀŠG‘* NzÌ“"›y'–~‘œ‡ŒqÎaçöøú-ß@(’ÄüpðX 惈‰Uê¾}ûäñÄOHå²^ŽÛ¿{*+*å˜>ÿ¹ÏýUß-i¾ÿýï‹ÏdúŸe`‚ãÄùî|<¼­#Q&_6Ÿïºë®ã~ÏŸïx#}()+î=»ÂÔêªc•Où?}«Á¢#Å@{ÇF¬ùdQÙüyöï߇ûî»Ï<ý4OBºòëõ\òªI‘*‡2¿ãÁ.OÌ7ùkà¦Ïì×›hÖŽõ)š7>ÞøóÇ)?&Òõë×ãùçŸÇ3Ï<ó¡þG&/&²G~Þ7nÄo¼…wÖ®û«fö¥—^*„xã7bïÞ½³òOú-Z4N„L6ì[ݽ{÷º˜l¾÷½Û%@7áœCA<ýÔÓ˜?oÒ±>”•ùau.…ÇáÄø=dóÅièuX­6dH™þòÇw`Æ´¤œ6Á“L­&¤qÄ3Zçü$©Ö§rqi'©Ò‘Ñ~$21:‡"Ð8l¤f3‰$2DðF³§,jD+-†¿¾ç×¢ôçÌœ-ççò+®ÐÎ1-LIڗM&³ÌØb„Caìkj®۱sËFhÞ‡‘pzCn»SLzÎdàãWPDª0‘HË+Æl;‰&³ºãHõ_ã×¾ö5Ü}÷Ý¢ ÅÌ×éða}„8b}á…йyÝu×É÷œøá$ITç™L?þG™7ôa`‚;餓$Í~ÑÜßhwòë~õ«_¡¡¡AT/›ÀLÜìûœ¨¼9*ÏJU(·47Î;˜è6mÚLʶ—\| m3³ð’¹^=¥.‘e [#Siô¬Uxiú4ƒs.¸OýþéÌÏcBrmh “ºÉfD6š>©tBssá…IM2 †ƒCtÊmˆÆ8i?‰¡á(l<–>—×çA&KËÂõÞÃko¼.íï8Hårz`¶Z4~ÏeI‘HfÄüñùçÄ8á ¤±Ð( }^z­3§OÅÀÀ :{z¥ `N•6)"U8=Ý]ã*ù&â “Ý_K‹az衇ðꫯbÕªU2r„MDÎ×ä(/“1Ðù2.\(9/¼ð‡ú;Y]rÀ„ï©ÃMê§žz ï¿ÿþߤ¦'‚»¿3AŽ¥öèò‹ ¿xüùçŸ/ä\.e~Ÿ»víÅ6cF#Î<ëTp-Bšìr§Û —×/J²g¤‡d^? F‘˜«Öc”sKÁÙvœ|Ú™¢ç dî³Ò“Ô(64ó<ùõ©tFÊQùtlÉ`ˆ3]»Aéîo·ëex^2•–ê'®³’B½óÇ?Æy矋ŠÚÉðû °yÝ»xå™çPZV&‰ög^t!ì>ΓÏ\àó¡£­±à(xFžÎh&ªG<–¢÷T`rC£Œ¶¶Ú,êÆQDª0ñhû›ö¡±q†üÌÍ,8àÀŠ-[¶ÙŒ™ÝÕÞXÓßÇ\nð1Ÿ+6Nb³’sM9᜿çß11nÚ´ «W¯þ òä1Â%Å%¸êª«ðe"óŠòr!,® ÿkó£ø8þüç?¨Z1c££<Îw:v¬ìóäcde:gÎI båc=ÑÌ>Ø­[9·´ µÕeXrÒ\˜m™˜‰…HÙEP];£°|nq§'óÛ¨ÏÁBLKtбþâ ÑgÉœƸåŠð8:eI…sg7nNI³RR­&)Ï óèæ?}ž4©ýºFðZlÚâÅͳiÅE%Xµb9ô¤¶™¤Yus0ïŸþG÷íçn¥˜T7³—­@oç!DF#È’Úl EqtxRæáX‡ý½ýð“z­¬ªA!³^§nE¤ ññ]‚÷7nCË‘#Xºt|…~ñž{î¹âeãFÏÍonn–Ÿ9¹}ppˆ`Rëˆ$*M+•ä'°s„}Æ ã„6F˜bÚæ8SÀ@dà[Fû]¹j%N9ùØÅU ™ÎLd·ßþ]|⟔ œìß`Rò¾,«âõ7\/æ8û‡È4íê’YLÒl™”•ß_(•M«5ß#@Û¯öE'‹G_onA€Sšˆˆ'Óâ0³Xë,"“É8™È1ùülž»Šk%ŠÞ¼w‘SJ¼VR£6Rq-!ß‹€Ï«M§ÝAæ2Oú ke£Ù RÜéžÏ­GViV;çd¤5'àóð»\V 7æQÍœyÁmýtDÄtzûqÑ•WÒµˆ§´ùhQºäÒ ðÎó/` EŠ/ûHíV3î¸ã›¸úú/¢¾±Q\*ÁÑtDòYË£•ô5†rZ3Y]÷´ºq‘*LDšnÚ¥K’¹ºs“Ü´V«CÈ¥È_„)õu˜7w®DàÇòùF’”I–ý\*Éê•UÛXÉ$§7qÒ;§ ñƒ]\ýÃ’R2U'ä£:|õ“ëe43“îi§}„TàVüþ÷¿—dò;wв+½äû`YUr0ˆÕä©§®BmMM¾³RNn~ž¸ÉûÓ¦½çŽuZ"’åèx8”K"Ü®ŽúŠ0ÚÛ‚#½}X´ê"dInxîþÑÒðÂË?Ši³çA:ÅG§ç t̃}è8ÔŒd””°Ó†YÓáιpVZ H?,ñQ‚iBŠ ü¾B%•[œ‹šàvœ.HR&á\¶Y³Q"Ú@(ŒÒê9þT޶JŠ”sO3º º{ú`µÛÄ'Ê}2¬T‰4?võ'aêÃco¬A0 ÒNcÖü…øøµŸD!™üOÌ™,œt<&ƒæ†àÊ*%Ãó¡Xi§sJ‘*"U8™tNRZ¸ÚhÚ´z ¢'S0à GH‘65u qJƒ ú‡ýzÜrÏFÊ‘G ¯\y²¨:V6F£Àßz“iåì‹íîî@×áCèê<ŒîöC(,*Dí´%X¼ô"‡ï­·Þ*±âe(5Wô°¿obUÑIvwtbÓnt4ïÃe€§´‚>§… ;Öox͇ºdÎüM_ü ^ýu4̪ÅÔŠÉxïOoà+_ÿ,²öZ¼ñþ¸*£õh’D N_ú»ÚðüãafçÞ"¸„ÂI”ûè„„êƒÅn&rsc$©Çº½-¨$b›7½žÎ™Er?³ÐáùKŠ$ø£ËOȱñ¸ã”ÔíCˆ1‰JN)O’ùM¼¿Ütd47‘w*¢}ºd–ϲ:\âãäF1ü;¡onâb¶ÀîäÞzÄ’19O‡Ú»±ðôóµ®ÿ<½ZÓ—ò ¢ùwúœŒ/áíh=‘*»rSèD±°IÊ„$ú'§5.òKE+ßhœ¦Ã¦sŠ,—7ö÷vâðÁàx'v¶Ë™h¹Ôø¬îОÕ:ñï8…†ÛÒŃôþ6TÖ×ÓÁÂÆ2<Þ´KfåàLîÀš×z'ñ×4 ®~:_|šœv5>GHÛÁ;B*¸«»“ÌRúz`}íǬ…³ášZšdÅu•hÚº N=]=ÕhëÄ´™S‰=˜ÖPšŠ9¤ÃD†QÄ0Z}DÆ-¨²M·«¥US140BŸ7Ï/Ážh`[ß]ê) ˆ„úá·¤PZ¤MeGè ±;™ÆÁ¸èœ•(/ñj#HÀÁ-+ñ$ ¤\™8³Â\´@ÙyV½\HSl.„(ð µ­fs™hEµ–ua òŒFbr.ôD|&"L>Nk¥M› Å}a‰TMf,ÜÏUoB6•‘†Ø2…g˜ò -öÓ×x[£ª<‘hšþÆÆ—° fËeâRE¤ cDÊ3” †ñ¿¬>ØÜÓˬtm$ÈX‹9­°–Ö”&53ÖňMNÌHÉeùïù9ƒíÏf4Ó[H8'‰à‰XBnGV¹æT±D9“›ß|'ÍŸÂê:Ù¶Á#s؈bã |¤²ÒÙAtìéÃ¥޾È0"^#fMoÀîWßÀÓo¾…CÝ=˜RS…åsf¢Ú^ƒ¾þAX‹Ê`"mävy¤¬‚£#(­ð`V]vŒ ׿ÎF­p›uôZ3é}å6’H™HHšŠŒ°9l0éÍôÈ ÷èa"ºTWOÁžÍ›1<&Sß‹§s–/ƒÕ”AqY%zŽì…»ÀƒƒGÛPH¦¸Ãí¡SŒŒD¦)QðšŠ×Ãë.@û‡P>Û‰ÃýijéÂå‹0:ІîÖ™2Zæ6`F½ Ó¦I²¼Ù¨Ç›Ûö£¬,oq9ʪkµ¦ÐF½\Ϭ,Žl $$0Æ×ÏÈŠS76ãIØÇ%©<ZÃdµ'eA$%Ê®‡¬Ê#UDªp"‘j( ’Bâ&—Ön™‘.Ö¦^KçêVO¬,¹rVS¬LzÍÕHùÞœùÞ£lžf•Ir¾£žÙI¦²a°ƒT¢];F`$…TdŽÃn¡io3g¦a°Ú3»QV? Ön@‘Íj6‡£°Lãá;îÆ==,î +Ë;ñÎË«ñùU 1ç¦Ï!”‰KR7)êRz¿ËåIJé^y-è$ÒšÞ0 ³¦VŠ Û7£¯{¥õ•`Ç›ÌV]C­‡ÀÓ¡fúÝò{4“Ó… ™ö Å.˜I:§jMЬfèˆ0­v+\^¼ºF„‡IFñÞúÍXqÊr9_(ÀS]™`9X––Zúœ\W“A—%òÔå'È´T("UDªp<ô&ñÃq•Ž4Õ`?ëV|CÉ ¤q fNÚ×é„dE™pÚÈ/iì¢B%”Õ*qdŽ;G«‰¨Yqà¢ts0J¬™ÚÀÎdéµC£´F}xëÑM˜=£©X„›}]½ê%‚²áHÚIDÂÑMHFQ•5àÝgŸC1mÛDDà ›Ýj$KÇá/ªÀÖ‡ÁÔ[oÅNR}¾H“ÈôììCáœìÙÄÔ*üf' }•˜:ÝŽ!"±Xï^Äã´`ÄÒp‰)¾Q:¾ó++F°·W|¦Ñ‘AÄú{â¨9m¿ ¤õó`Ù¥—"µo¾ðÞл±ܤYG „R«¿ûš[QPÚŠÀh€>ˬ]»…Η±)^»]Tíòå `³‰W°-j@Eu ¾"”WOÇÒKà()Â{?G¡0Ð?Š`ÈŠEËNBCQ-ZŽĽ{iAÆÆõï#c挩8mÞTxÜ…Ò|„³ØGªå0õfë"EWË DÊ×2K‹N:™Ö®¹A[l¡W]K‘*>ßIg¢dEÂʃM8c~\7ÐÐEz1!µ”oö­Ž)Q­}œ^o§²º3Ÿî»L*#¯æ™ïì6†ù J"‘B¦¬™dFFGÉ,Þ°q3¾qóuˆ†cB¤™K?Šllßõ†ö@UÃ$¸cqVD»ÛQeÎÀé0ÀIdgá*":—§Ó—,ƒ%ÐlÜŸ8)ñÄXº)Ž}µêöãªÁÌZ¼¶Î."m'.œ±‘#ZùFƒèFÓ>äR!lߺWòE§NŸA&j¦-FaE^"Üšê2ÔÔÕH>§Û“·d Œ¤luÉæ/_…>^èü}ç[7“I¯y-³*´ =>¤âqŒ†‚HÎuo¯ÇºWVcZbNO‰fau‘á¶~i¤té%GÕ(ms)­6OHÛC^Ëåì ³AùH‘*oÚ³¨ÔiÊRbLœ˜ÃÓ19ø@7•޾òÍÎíñtBŸ:‰ÜkþM­§k²Â‘ȰNëÕÉUCüsŠMEž>Ɇ$íÃÈÛ¤›2)¹›£¢nRÑ™Ì ‘ÉùѳWbL]ÃdD†6äïØODžAA|S QSê!ÓÔ‰Ž®쥸ö®_£ýýõèØòLDô5õ (>i)víÛ‚P™>2uu&ŒþIð»¼0UUÁÎÈŒ¦µÛÚà¤}O›DvÓzì{çüróì ÑED•”!}ÇóÃÀœÙÓ¦àë?ù)ì]mhj>€tíT”Ÿy>&¯Ý€RWvW=©»6¼¿È¬çœ{&Z´£§½§Ÿq2Ün»œûò2?"á¨ZÆ¥‡·°݃#H’·™Hñèk¼ «&Yà*s’²/…s€9U-EDïu;Ù÷‚d¦“ª«°dñ4ïܧݴ`ål« ÉÒb¥·p‰ªäÈ53è2’ž•JÄéƒg¤ ŠÛ°[GÇm Quã("U8ÞGšï™ÜjóÛ%¨3Ѧ„HMùfÕ7$/Á Hh-ø ‹Zh#…Y}rÀŠ*â$Èi~½Ž”“HÕ¢³ÀF¦oÝÜ•hô#£3Ñ{Rd;ënAÒ¤‡±Ä#Ƕ·×`OkõNŒ܃‚Ù³0iÎJüòæ¯ã×\Ónº‰®NŒnÚ€v¤Q}þE$‡PL¦{iS þü›?â©–£è$9iw9°pJ=λè<Œ=ŒÛ?y ÖmCK,%îŒ1âÔåƒ5¤ÕÄŸ9ùËÎUZX>wé%øö×#´e#|ùeT]r9–Ó¶{H1Ç’qLšÚ Y˜I2•Ï¿ä"¼·î¬[»ófMÇä²RÈ99烕È-@jQ«cÞ Ž ÀI߸HyçŒI8I!†ßz¾å· Ùz¶©Vèìn @ñžN9I¢7! ÙFmE ßEÃS6†(% M›Õ¨%ݳ𥡏0€‹"øZô9Q¥\9Å/zeÚ+"U8Lx’Î”Ï ÌH™gRÊ !¤Ç~±´˜uÒ¼HR—²’6ÅÏéóÁª\†“¹µJ"›Ð"¾ù5JäW‘¯óiûýÝ=8´}7ö8€–‡Ð7ØÐ@?Òdr»h×E%%8ý¬spñç¾´DÄÃÀ`Å~7¼N†Òð8 QXàÅ÷þãWØ·ßûòÍ’Š]QT„y_ø¢ôHuÅŒ8øâëøê£=NŸ-(áOÛÔÖFǰëFÐÍn† çÅFäXSZ‚sÎ:ËgÌÄÞÍ›ñÈ[o©.ÿoÕ„¿þ:\væháy<»¿ ý…~$‡ƒ°­cï<û ~rϽð—–ÉÀ?6™Á>lß´ Éð0â´°¢ÏJ³i2£9žæ.úY©âêècRý4º&)ñhÚYøçÏ£×[¡Ï;¼¹¾E§Â@dj2ò‚g:¶põT[3°ùŒ¬YšÆ2i2½délx }p;­°9Ì’êÆjXSµ˜Ìlfh¹¥¤ËÅ¢0ó­¢öŠHާ÷ÄãQIW2™,’wiä®ëùœQ1çˆTXYÆ1"\“øÁge¾5­¡ ‘C<,ïã ’m2 +´Óá–$þæM±þ¹?açF2Ã;ºÐK7í(©¢F’¶çÐÝøVR€å£a”nÅÌÚJø9 ÜŠ~#š[zH™-„­b)ÓyÈôõ£ù¥?áÝŸGûÈÚÂ)l:x óyje þõ³ðúš5è!EÅk…u‚os”~÷R·VÃo“¥B/î“§áóW^³Ï9ñƒñƒþÏì?„£#O¢¼-¯Çƒÿøæ-X¾h v?þÖŽŽ`Å¿|o½½÷l'µ=Cš<—VûqÇmÿGT0.ú=¨k˜‚‹fáÈž¨­'“ŸÎ-›ÓœÓ™ÍdaËÐÖÕÞ…Õ¯¼†ó.ý(j§Ö#J&- §œ‹ì´9°JšZ!®ÃIÑëòýOµ€Ÿž·žUçÃ:ÿd,ä„û)dí„“3 lvy-dpïSî¯:ÑõÔÚ÷¥X-9¢Ï‰´ÕÝ«ˆTáx0éqÞ$ßDì5™3ryXÙdÈœ6êòf<—VH¡pŠædíL¾Á†VibÂ%ˆ\BÈjÊVX€èÈ(^ºï·xóÉÇHqöa”ˆ¤/C÷µÌ‰Î•›ž§§›µòz踒ÏOU5^ÿó›øxUÌ §ë×à×UD ‡ßy«¿õ ìÞ¹ »G"d’s3dÍŸ©M}f³´ !R¾ë·ÂÅå‘\7ÎM—ØïÉ~[&–•À?s’úµ×^‹>sµ|æÎÇÃ#¯­ÆkÍGa¦Ïiä„yjóx½xðç?ÅLRŠ»þ Ù´UËO¢'°pá|ë¿Ãº7_ª“W vr%¦N›!}Ò¤ÜMvŠ«¦"K£¯£>‘¡C|ÕZÐT ½Ž³)‹y fHÿQ£1»L2dzG ‘z5KB?ç†&%@”?l*—ˆ»–ÞF׈Îw”LÐûÊuø ‹$5KRÙ²cW!-™E>/Š =‡9H§%HÄÊõý:(Ó^©Â >ÒcuØcRó sy2’ÀR¾i³Ö¼I/>P1âóPR#I3¸.üh ’¤šžxõU¬!s—Ó¤N{¢QÄØG÷éµÛ1Ë›cÃ1£•—êµÌp$†G"xú‚ðuŒXUÒˆMü^¸åè s|0ˆá„±ÑVìú|ãd:._Q1~r÷Ï0øÒsH“²+2äd¸ÖÇŒ ´ÏÅc˜sô9¿úÝïâJ"Ò`ó>ì¿çxûðQ¼{¸ }–zQˬø¸Rêî‡~‡éEh~à~DæÎ¿}úRR­¤0é (+.’Nôm-­èìèÀîÍMX´p!Õ×¢°ítG;×[P'¥œH Íù™´å¤®T½¸E¢/ºüShÚ³‡T½ƒÔ½ …‘ÒõùŠ%ÏSêó¹ÉIÞìf•´%’¿¬4³’yAª?C<Â)g»5)5þVzð{%&ŸNÂj±KÚS$‚Ûí‚NéÒpÐ~‹-6ÉCÕå”i¯ˆTá8D£1Q’6{FK_¢…‡Ø±JáÜH6Õ¥ä3ÍêÔ"Ä)5õBÀZ¥ §ÒpŸ3›,¤d·“|à®;‘ Ž .æ{Bünâ O>âop8иp6N;ï ¬m ¶­Y'6LVcþG;™žs–,ÃSO<‰¾ûjÚC*.„–p±TV8½ÈdRL}¾C“}åô™øÑÃÃÔ¼{;:QÂC9Mu …ê&(*!o=.½ñKøäõ7"¼w'š~ü]"é8¶l&Â'"2òg#%®O“â¶á{>„ieÅ8úÛ{i¨Ç¤Ó>"­èü5Ó¤{=»=½¼LvÃÇc Ça¡cîÙü.ú·¼‡®Ã‡adÂ#ÕØ`µ"ºN‡ ×‡hy%Ò¥ˆÙ°º|¤Mdv»`wû$ÍL–C<s{ ¯0 ›Úu Òæ’N>)L¨¼8q 0#ª4ß銮³ÏcÇP"Œò²©RÀÀZ”[ü‰œ®_<—D}ŒÄe¼8%i1äŒ Q‘ºq‘*L„ÓéÖú`²a'µØZU‹x ó¹ƒ1i`aOüà„z©Å§§#}ظîuÔ‘y[Q1%Ååxù7÷âÉ;HD‘“ô½¿ØlÔòNé_ƒÍ‚ùgœŠKnúWèíz„ºãµßA©Y¯° Ë'ÿëPëvaÍê—Ñôä`!¾è ‡‘Hà¢cpǦŒæ$?<ÍÍR迲Æ9øÎŸ€ÃhFËk/"E™ESÛbÎOl'»Ë¢jÖIøÜÿùíG±ïî;È|¶bKóNrʼnLz6¥×§Ÿúþ˜>y2úy£Üºïêk‘L`0q'“¶¥bÐád¹8€Î€10„Ǿz#F‡{0šÌj9·dnÛ¹ºH„ÏhBQ8‚ʾ^$u[ÑNz€LüR  +VbÎâ娮¯CA‘ϼü'ìÙA J4Œâ’éŽÅ‘õòÒ2!ÍòšjlnÆÈPÕ“kàty$§·ÈçÀ‚…óQ@&»Û;f:?RÏi:V³I/ûL2…8§C ’¬Ï#²-ÜÀþFRé¸4Ž'LcÓ§‘*Œ 2®6ÒRæÅ¤7›­šïRæò~T“øÒ¤’Iº;%Úb'µô‘³.“÷ÛŒV¬yøA¼û‹»Pa$õÂ=Þ¬¼]C¾^_É+OÇ…_½Þê*q´7mAÛš ° Ãf3K#G÷µ>£zxÈ4ÝûÊK° …mÎG7Ƭ§T…ç ù²Òäþr|ù¾ûá*ðbàáûÑÞÖŠ¡n”ZMã}6ô9­Ëx÷(½Ÿ¿ý{Ðéw>r¯ø7ìÞŽ"cšþJù5fäòe®ó/ýN9ï\ >ú0º“QÌúì—èý¼³DµuìsÍÑy#UŸ’r¤…ÇVàÇÈKÏ"”¢6:ælþó‰S"«G*-Öê¥&9l¨×'0H*¶íÕ8àóa”Îåô™˜2}.~õ›Ç`#òk9ÒA¦¾CòrK‹ i1+E]] vn݉ÝûÓYÓÊ:+]f¬\Nêå"úüi˜¬Qå&"j-;C'+]{©\m Š¡‘¬ÕFDM‡´ú³ÙLЩ¦%ŠHN@67.ÎòÔ*Á ý„)™Ì¬¹|‰¨öÚœ4cç@† Í£ÿ"½ƒØûÜ“¨&eã´(“YóAæK _û4|âJÉ”ݬ´1ŽàÈsO£ÜjÔ|—9cžµýv½ó ‰ HqùŒzh5Þ¬nÓЦ鎳>…3?õØH6‡¶mCÛÛ¯¡©µf sÇúgjª—´+í‹¡zÑJLš= C/¼€¡æýØÕÞ¯‘9ÔÌœN‡n”Ï﬌ où&‚^pw+¦~å«`ê3%#!©œ2q°.A¬·#G¡çðAô¿¿fR^:§N".’ªtîxßÙ±3¬ Ìin ² °3†›±ŸD^]|¾™³o˜†=Û6Àí0IÓ˜$™ðÑxLªË:ºzÐÝ݇;÷ÁDï©*ö!ÁŠ˜ž«.ràâË?Nû¶ÑqÚ4"¤ý™òMgØt7Ž[´‘Óì7k…Qù‰ú|E“jZòO$„tcs'´"í±‡)ÿàd8]°]êTýÏ¢·§]ˆqÌ\ç›,%Ý ¡Ïæ´&¬VóÒLL?ä`0½ÙÒ:t¬[‹ÈÚWqðÝ5ZÐ|(G:]’yyÁ‹ohéMÜ“ÌÞÞ—žÇ®…™’ÂXº ŽyGÇ‹û'˜àbÄÃhb_Ÿ^ÈtìI~•³~VÜò$†1üþ»ØõâãÚ¶D°fÇ WªwèO-«ÏJÐdöÙ…‹£“ª-N±÷(LlæJp)'Ç•5Ú±â¾'HšúãCÀégÓèØp؈v´cp×N lÛŠ¡Ã͈õ ·«Óg4ÿ-W ‰§8—Ïñ4 ©d^V+»Íå zmœ¾ïáT4ºõ‹–£oט&×cÁmw –IJ=ßB&³ILpí\é¥Õ!W›q~0wÆg•̳œtF}¾÷¨Në÷'Kƒ)÷ÕšÌhãN´h¿\ë|¿6ý o8*kêÕÍó? :ïsèË08Òg›™ œR¤ÿ,¦©’)&žZ)”C7``t6»MT–$(ÑÍA)¾!³ù@ß`|3çÒi8í.ømV" ÊmcëaöØì÷lC«_‚Á_ŒÈ¾ÝZû&Ò}í¨àç¹KR¾_‹§çUìqÖ#џņ²‹¯Aè§‘Ì¿@c&)ÿÂÅ8ºwº×½…Àö÷Pi3ØÓçY8w¬É´N‹ˆ³‚ÕÕ¡ìÜ‹Ñóê‹tv8ºšá³éE…Ž·$x.ûãlDw5¡ë½·Ð¿y ÃppScu,ðœfù;×iý•Äì—â[RÆi—®Ù á[y:šîù%0Ô·Ù(©Yc~伯Æ»=7‚åu˜^èÇð¶õHwµÂZ×0á3å$ÊÎ$©—îö:ÉB Ë_/"¹´Ÿ^ŸWÈ×åç4âÔåIX»yyÕiøÌê3“Óžg,ûQUB¾2íþÒ8ÐR3¯ S+*)Êe‚ÜÇ“N.ÕÆpS‹tRf8Y‰4“¤ÊL67ô>ª¯þ<Œ-MЇ†'Ƶ7óàÝtã’B£'*8µÇî{æx=ÿŽ±ïø–M×LGÉ_GtÓ»0Ñͬãr]6ëëÄçx`çVìÛ³ ÜL+ðÉsºRò¯†–¼•õ¼+a›9ÿñ3”‘™\ê°åŸ# î)FÍ•Ÿ@ÓÏ~ˆ¾5¯a(@û7¾Œ"£Aü™ÕÑ÷:ÇIs|ñÐiÄ™u8aª©ƒaÖ8æÏƒµr’ƒÙºûFŠäpQe!\<æZÔq”ÜåÂÜ+‰ÄO]…á_ÿN"Ðáè ü˜"Mdø|²kF–B*0Šèð0b< 4D&A"¢çS’Q ÊžýÜìzáÆ2n/lDÒþò 8++` ë˜³:ÄGž“FßYmöU~h«fi­ L{…cèïëD,%µi“æ#Ò”9?~„çª[lV¹HQº­¤8à&Ó\H•È$ÁM íý÷Q9—ˆ"Fàчm:@7\Zó¯±&ãŽñzMuqù£ž?g1î8F¦yŸ'¥sÎ >Š@qþøÜ³¸Üc…õÐ)3ÍM iŽÆñp¹lƒ.ŸçhfYq¸&üåicT’¤ÎÊï½›× ýÎ;0·tñ€$í½cšLø'/ÇÞ¦mÜGªÛ‹“!Ÿ-`¼R}Þ™!Nƒªj˜«*a®¯‡®¦ÑX§Öâ2d†‡Û±ÝÍMøÍëo¢Î`Å%å5påó2u’@Û!Õl:e9\ž…tp”Ô{«_À~]†åóQj-ƒ1Gº§±®DzB6Iç;­ù·åöbžÙ¬TɺЙ,Z³l^FØž¡sA È]3. µó ,—%Ó`›³¶“–@_VÆsLòvNhûUÊ´W¦½Â1Äq­+¾1+¦ ç”rY(“i"ÑÊ=‘Ÿ³”ÑÌunŠÁ~9œÇ)Sm;¶á•Ÿþ‰P¯ÿÖ÷pòí?‚™“ïwíCª«e· áݸ{÷¡¤enüè„ð±z™”ÑÓ’y(¸è,|ûEt<û²ñ Z«ª0É1[Ü›'Û|z=}SÄ Ð0ÖàÏ U:)»zîÄŸw´æ}”¤Œ§ÖÂXVŠá­›Qj´‡I"|¾á¦FéF=†¶F]Ò [ÙÉ¢üŸªLÊš ¹ÓaŸ3z·Ã-h9ÐŒî§ÅgŽšZ¼ºv#Ο;KêñÞ¡x{{>YµõV§›>L¬±³U%p_y:@‹Æð–÷€æýD¦ìÞ³Q>•©i?ަu$uè£k7H#A$˜Êè¢m%éZ&yL3‘§ÐHÖ„•03-j&DÀN;-€V«¥´ ÛL(t—ÁnæYMF˜éï]ˆþ‚OÜÌÔ™pwœsæ"ÉÁ5#w‡RQ{¥HNP¤]cëŸDë9‡4 iŽûá'3Ÿ»ÛëóA¦1cY:9I$× ¾Ò®Ý»ðÄïÃ;kß…“^L¾üI‹Ö“gÃuöRlkÆ¿þ)Š|V̼ö¼y߯Ð>lÂOî¾á·¶!þ~ ô£q"£$Ôgi±NqàĘ'UÂñ‘…ˆÙ…Ìê£ãÄ8´â¯ÖO~ÞKcë箂Oï}¸ZÈÇbéyŸ¥^[Ü9­?i5Â6«æÙµÈù 8ºñm´nX‡h8„¢y‹P8gÊ,µ¨YR¡V½í¿¹O¾¹>Táb"Q«øaÇ*­ôH˜ô°Ÿ1™r sÓÛèÙ²ñÁNI‹ %2Dbx-";+f\–8Ln8ég+-zg âÔiS`õR¦×H_wÌ7:î>É!Ø‚Ö'!—B4A8À`¼½éaDÒ#(2¥QaÎÁ5ƒ¶O(*§Å7󖨛çŸ@‘*"ý'A_W~`–rÄ\ÂsÒyÄ1«ÑTB†òŠOTKM‹âf´þ¢ÒÍ(+S'9‚#SöÀîÝtv¡´ Ïüêç8zp?JÍ~\Qwê]5’¬¯‘•æÌÚÍ0ž1ž•Sq õ þpÏ/‘j݋埸‹óÎÆÃÿ~/6nÜ‚«>~%®»í;’ž”j#åtð©Õ fìµ0Ty9MˆîoBðOÁÜ3=ï3I][õ(þÁ…ÈÙ³è¹ó l[‡Ï©´ÔËŸaŽ#Õ¹±î‚z¤Y…•9`œRóô~=ެmÖ F ¾zé)(]º…ÓfrôNΕG¤ `§ó¸ú;ßÄú5›pþ”+1Í^s\$Mf$ùÑÊíX‡DÇ -N"M?f,/‘¤&E†ÓiçL7–@1î‹'J].ïâÕ¿`Üw«­'øÇÇtú±¯Ú{³ˆ’‚mÜm}ï£ÚÁÒêRØ?óEtbŪ›G©Â¸"ííÄxdZ9aˆLq§Ó%„Å¥dTª]¸u‘L˜4Jý¶h)é¢Oæ%™™V3‘/§ù:Ý<ßàÙ»îÆÊ²e8wÒ¤©¬yýi)¤2tÍ‚ýlº£]øÝ“Ob×¶¸êS—¡q>ÎŒSN¥àw⡇žBè` z;{1eÖ<\ô…/`áÉ«àôy¸“´tƒïooÃÑ]»1ÐÞŽ™“k‘Þ¾>ßHuñÓйH­VXà¼t.¢#‡ñ‹ï| et4}ö3pOšŠ¬ÁtsrQ"³¹Ì…˜Ê\HGGpäÝ7кþ]Œ ¢úä•(\tü BžÜ;”{¨ær$"AxéýqRô¿½ñè~\Þp œ:»F]9Œ“{ÆA<€žä´Åè’꬜Äb'0en, ˜¯æÊçœjê’t-ôˆ‘Y¢ýÇ¥Æ>•ånRi-)—’÷dÇ2db)7,qÀañ‘YÏó]ù< }>ÄwÌå’F ;ºW£À´¦L þ»S/»FÝ<ŠHưwÇ!½L”4IªL4‘yí|ÇÇ£QéëÉ7!—|²2ÕruR›­Ë¥‘MG¥2ÆH¦¥Ó]€ýÛwâÞÛ¿‡â®$.iø*]Ó%À3Vâ›ÚHÛš–i±/½ô,ž|úiÌœ?ÎIõ¸îëÿ‚Ö­o è¨FOÏ l±†6m@Èî§cLâ¥'_цî‘rôÓ±Ìñº°®=¤tmº,|´}M5n¹û—¨..†¹¼JÌpí9©ÅÖWŸÇ¶Gîžp BtT']x –/^†Z)Ïà²V»,"#íG1¸{Ú@ÅŠU˜tÞÙ(_´9“Ñà¨d5p5XŒÎ“ÍîÞ3©¶nÞ„Goþ6–T\‰“ÊÎ"nÈ¡î5¨Ï«À¬’j­Œä»æè¾Ñó<ùL™Ó]´X )QŽ ‘"+`‰Lé\JË•±1©˜JKÖ€f5¤ó>M}¾˜jº¬–f6L‹žf4ú'£À5v÷9ЛÊò}þ˜èýÎQ„ŠŸGfãëÐMk@ã=Ϫ›G›ÆÀÝŠ|œò’ŸpÇét¹ Ië4§Ë)©0 R|Üno¯p0—Û%e£I"#¾˜.—»·nÇ£¿º‘¦|¼á˜µt…t„ÊåôãGܾl«Œ82¼ÝüSdÈ´?íÊóQ\7 ;›[ŒúÕ¡¢v2lþì[»»3.”Ûí8ùôy¨š; »×þ^tÐæçÎjÄòB/ŠkJN›ñêSÏáº+.ÇÂÆi¨œNæ½Ãƒi#]=°OLoßü¹øÚ·¿Üòï( õãð[ºÇÅé~¯¬äɼ¨h˜†Ú“W`öí߇£¬L:(qY('¬‡éÜé‚ýp‘ ÃBäê0:D÷CãŠY?A¹s¦6}`Â9ç¼×1¯%+ʤ> £5“- ƒ¡™À!èˆ(u9"ÌÑ#Žö!I·M*“@”³‘d£DÌý´xõÅ$µÜ‡l:A¯Ë!I JŒвYÅEÁ)O´_»ÍlBÕŠb‡>»…f"úX¯ gèu^ ‡w2z+"Ñn‚; ¼«.HïÏÂXT nœ("ý'Ùd›Œ«pdd¯#é&"ƒŒã•NPù:{.)Ôq_N®ÃOVRcÙt ï¾ú ^}âi¸†]8§îã˜wÚé0å,ǵªsÑ„iAÁâ<ñð½8tô0æ-Ÿ‰E—]€H€—±ý‘tIRX)2UCƒ°p*G<’@ˆLj·})&7ÖÃYP†¢Òr$H=3QÛNbxxˆÈÆ€òZ:[»Ñ¶óÖ¯~v“ñš*”-^‚S>q9þrèzÔ¯š«1gtÊêOBÓÎm(-)ÂʺF”ÖLA4‡ó-u&FzHà-¬‘™Sƒ½Dÿqŧ„<ôÝ ý‰ÎE<ˆ"td®³©ža…iŠܧ5 }1mÒŸ g†aŒõ"Ú¹Á–9€p$‚P” êxHZF‰ I Ò1y›Û ' ÛëE)h³·N¿G&:¼EpÂ]X³ÍIW'…Ò”$ÂP_ìÜ„¡®nR»z †RxÿAdBQp6ìªâB¸Â"2ô[ô'2è!Ò.¥}ñ§-¶…gŸƒ-B ŠH&Àá´!Gæcˆn$=Ï&âZl2M-Y³ØFiW§“&#ƒM¬¼`hkþü6þù ôîíÆI¥Áµ?CÙœ™¤¢ÌÐFèéµ€tWÀ27„Ä”¼ôÔo±Ý;Xvùå¸è¶[Ñ}t )žAxm#ˆ&ýdöga!õÙÖ3B*Ì;íÿ#“2rXG$n#rà¼WåªR_X6#©´¶TN©GÊeCÙ¤bL]8 Ãí‡P¼ì"‹ *IýYˆ|ZölEãòå8r¨ nóg4€vŠ­GûpAC"¡£>é÷™LDˆ@#H'Fá°ÈXîžTZ>…ȵ[r2)2Æ[:°÷ÑGZÿ²#G1úøOºÎ3/†Îe!I9„`÷ttÂðú6ŒÒqqò|2Õ5Óg!uë+©Dim%ªJË஬†®Àƒ(GÕÅ´Cg±A rRÀƒƒ]$¶‹PFÇ’!µlµ¹åì;œ"R®•׉•Û#Š…oËÂÚiA‰» ³£ñ¤³±é?Á ÂÌâõß="[ U¢0‡{ Ñ0ŠæÍƒwåGО‰ÁGê^A©Â°¹ž!’0êÓ0íoƒsÒ"„tQlxû-mmÇp”*7þ%ÅÕßr±¾ sE˜Q¼——~ •g̃^gÏwUÊçWê´ FÊ„cq†”`?ž}ò·Ø÷ë×1oÕ |ì'?„‘ÔT0!î²¢·»/ýi+nøìé´]&F½ä§ºKÊÐ?CM¥OlØs’R‰L‡´KFIÁYxL°I‡µë¶`§Ùè˜èØGGÉõW¢eÇvLš½Ìh"ôþ‚b/c…¤¶WͯÂþÎ0Š+LXxR=!œÖ#ÕÑOa ÂaiÖ©×gd$ˆÍ]‡«…epñØã´›×¯Æ–ÿ¸¾ø(<=<o“ô2ƒ$ÍËL,hS\\E”ÓKawËO*ìA×ѰÛÝ8Ø´ 2íË«k¥ÿ)wjJÄRAyéT9nÈm²ÃLÊUšÍèrù†Ï9¸}å((ª‘†Ü^$˜È‹Ôéë’HÐgs͘…d<€ªš¸¼¥€ÞŒx8—Û+þs«cŽºo‘*LD &Ó5‹ÞíۑڲϿú¾8ûz,©¿†œ5_=”;Ö‘)ï÷Ęß3ßa$mLÀ4=ß)tÆ›ñàoîÁ–5Æ’•§âº;~;©Ëí+ˆrtz!3Ù §ŸÇg8ÑÙÇþ–,üU´OÝØœ%DÚ^X£ŠG1Ù«ÇŽM{`+¨C2–ÅÞÝÛa!bõy02'ó5ƒ“O?]õS ‘jõÖbVÕ,X²Aô'‚Ž£8l·£ÑÅã5èé<Š·Þ݇Æ9“ð‘Sæb°'€`$‰"·VN rú ²âȼ6G‘©_«€’QÔF Äñ÷‰xR|Æ& ü¤bÙﬗ@½^ÆQóŒx´%éåvgáxÏÕH,!Ãäxè«jé÷j`Ò5#!s›¶L„I‰ê‘1ñÜk+RQî‰`A ·›T±Ÿ/ú:Úi?tE踼>Ð܈;›oX¢õMÄÈò0›‘ÈÄå ²ÏÛNçÞÈ>`αå¦&Ùiè<ÚªºF–ø‰@C킯¸ýÝ2 ÊhEMƒJÈWDª0ŽL"%½CÞ"ìâìË?†S—^ŽèšrãœtJ2¡ª.#ÃñŒ5€e6è¬,ví\ƒ'¿ó6ïØ†3/¸ßô1 ŽŒÂì+À虊¼Ÿ$7Œ6I')Ÿ1Úß·—ˆ…Èr’?½GbDî)IôaÏŽ]X¾x^Ã)Äu.ˆ\[Z;ÉL×K@o{z;Ûa'qJþ«Çë‚ÓãG˜¶ÛOÚYRŒÂò:R›‰€[Œv$u&̘1åµ~R¨.ìÞ½=£¸ò¹pø<ðVÔ±ÔiIó©4‘›N†LuXâNY&n„´¤†edTuFêÖ¹i²Ö)‹þOe$w6Eç‹_/½@Édg5ËÃí¸+“Ao–mf2ùic_€p$Àñ&"µ2Rï…ôùÊiA EKè+¡ó™‚·¸”b)ÛãúyŒ2§9qc2YxÀ¡É(·žtAä㤑á¹PùÒ_í‡_W\QBÊÕ+V‡Õ]¯Á.#¹û;»%rOD"8ùÌ©›G©Â8‘¦#tãÙeîÐËo¿‹æW_FÍ’“1볈n¦çÜȆóÔBtP@æ'ݳæ*Ì5tvíÇ‹¯¾ˆ·¿ù"bÑ>ráøô×n‚ÅéBÿà LVÚ†£ ºC¬¢Œ8€å"9‚œ”ǧÞ<ˆ–îN‹„QÀå¨D5óÎ@,—Äšý½È™XÉÁâ È 8Ï iNb³I¥¥@"’þ¢<©¯«ƒY C4tŽ!¤Ó•8©f2܉ ŠK*ÑÖÙŠi³ qèÐ ôÓ Ø¸açÕ³2¹cOû!1‚(¯¬¦c§… B,‘æqZúºÑ âLzmâfšŽÏ¬'>Mqq~nœ³èØxL2!ÄH…š¥ç«^zÎHÈ~a^¾­×ªÃa!Â,QÙ1Z†‡»dá©ÍàÈ0©cÊ**ÉÔ.„Ñb˷у֭ Ïݵ˜mHsïX6Ñ“i!~›…ý¥v©bã\`ƒ¸r’[âæ|Ø ú{»ÈôÃH¯s8ܨm˜QZùz*("U˜€H8HAЧÀŽýá·ñ‡Ÿý _ÿÒ¿ ~RN[´Us  ª–ÌV¢Ñ(úúúÐ{è:_9€#û÷athµófáã×ÿ N:õ¾Çe‚%ç’¼Â@¿•LpÞ–ˆŽŠÐf5ÁDŠ4è‚Îâ#eAoO]pzzPZf'bˆ£uó›¨ZÎ 3â¨w¡çÀ.$rTÖÌæ¦FZàÅìAãü¹xæÑG±xÙ TW—ˆOÏH„QPR„úÆZD’QŒzÉì¶X°wý&”žË*øVÕš‘ê$B*‚Ó™ƒÓìÄÆ7Öbå¹§ÁDÊ9› Áëa2J‰ œ!eš#’ŒGR0[í0q?·§còJóŸuFJKÌ&nŠ’¼\b±¼:Ô Ú-Fé6¯å‘¦¥:Œ¿rÿÏ8-6v»UÈ5•ÎÒ1ÙeaH&‹P9i -V!Zˆè5—f!pW­±®UYm!KX.Xà) œ Òf’ÌÐqï˵ Ò‚Ã…lþó±³;¯ñ)¬f:ŽEhx‡ö7Ád7ж å3è¼­êÆQDª0œ£éõØéæÐÃëµâÓ_¹ËVÎÄÚ7Öãý=[P}h¶· Á“@9î÷¡®°s¦`Þ©K1mÑB¸|>‰úŠ›IBOš.Àùœ¡Qĸ’Ó‹Í$M¤¹'°™ƒ0tSròxÜWNê,†éõŘ\eB+×èûÝp̘ŽH<€y+W!Kæï²I%¤úbp–” —Lg§Ë*>F6‹MÌ(´\ñ©«ðð½÷¡yO μà\”TUHE“Tbdß^Xˆ]:ÔÖMç¹›xá…M8ï”r\~î)ˆÓy8û¼‹1й‰D˜ a*d’Yt“:m˜9ƒ­‡›á+©FgG,V³ŒäàEÂBªÒÎC$˜ÍiÝä3¤¦ÍfNñ7KšT*¡õråÎö&RŠa:?fZX’t~¹l–Õ'g%„C!!¼á~mBGïN¸÷ Íæ"¹©@á&ËF&å|AE6Âä}F3’CjurȆP`HˆVfrñèfé-ª¹ØügWD&™£cËå…™X×árÓ¢C[Ëô´u¡·7LV†JRDªpü…0zävv:›¤yˆ(‹kjpæevؼ~©ý^I7Ô¤)s@|$ù<0K"9bÜÝÚŽæCG's·LmËN7¯Ž”h/"¡\v \DÔ.Ÿ‡öaB 0ªù¹y©ÐŽGQUh!b®A.F¼Ýý0ÚÝ0E†%O“çÖ7.š„ûžÜˆÅ®bT5V‰‹€ƒ(Üd:Gö²ÁœCqe Î:ÿ,tµFpxPü¥"§P4†"À©áAÚ§ŸTfŠÈ¥ uó&IÁpˆç@ÇðÚk«qÑy§Á’2 Áî/Ó·¯»“Tu´}½Ñ‚x(kY,IÄ8’ ˆ¿˜Ó—Jý^qå+M)ÅÌÈ1pU“Hhœ“D–ÉDTŽ="ó™“è=f"c.Œ°sY.½·¿{×½GÇÆŠÓNAIE5 Nö©²šÍŠÂe"D¾§©Ñ(Íöx(‹fÐu ŒË4Q 0Y,ã]ñeZlN›è'´mÑgàkÃÛ¶{¼((*’d~nNóæ‹o£¼r F††ÕóOUk¯   ðWð·ÔÚëÕiRPPPø;ÉVE¤ ŠH‘*(((("UPPPPPDª    ˆTAAAA©‚‚‚‚"RE¤ ŠH‘*(((("UPPPPPDª    ˆTá#>ó™Ïà›ßüæÿȶ¯ºê*|ï{ßS'YA©Â?^{í5”——Ë£¶¶K—.Å]wÝ%c9þ;‘J¥ðë_ÿ§žz*&Ož,SG¯¸â ìÚ¥õÿÒ—¾„»ï¾[]…Ô¨…¿<êäÅ_²cbcåWUU…}ì¿gT0Kþô§?íÛ·ãºë®ÃìÙ³‹Å°aÃËkV­Z5þ½‚‚"R…ÿçÀÓjæÌ™#ß/\¸Ï?ÿ<š››åç;wâöÛoÇÞ½{áp8pÓM7áÚk¯•çšššðµ¯} ‡¼yód°+ÛñòË/cݺu¢~Y‰ŽáÜsÏÿþ™gžÁ´iÓ°bÅ Q®€ÝnÇÓO?ýî‚mÛ¶Éïø5âRàãRPP¦½Â?lÎ3921Ο?_~gµZqæ™gâ…^À 7Ü€Ûn»MFI§Ói!ÔÒÒR<õÔS8ãŒ3°yóæÜîo¼eË–“(+T~??øû“o{{;î¿ÿ~ÙÿD|ûÛßâ~ýõ×ñãÿX®‚‚R¤ ÿP$“I1å™H™ØÎ;ï¼qµÈ*‘Œ)S¦‘vvv¢··mmmB¢üÞ¹s犪ü  ¢¢büç[o½¿ÿýïå{V“?øÁ>P%?øàƒ¢JODII‰(å¡¡!!p¥Hþá`)«F~<üðÃØ½{÷¸9ýÊ+¯©2™2‘22™ úûûåû‰YVVöÛ÷x<¢bÇÀ¥Õ«WcÁ‚zLuuuH¢ J±"ýä'?‰ÓO?]T´‚‚"R…(Xý1QNŸ>gu.¸àlÚ´ £££øâ¿ˆK.¹D ûIÇPTT$_'$+Ä›õëׯGkkë8ù²OÖår}è1 †}Îëõâ‡?ü!vìØ††!feÚ+üCÁ&ý¾}ûäkGG‡øC9èÃÁ#VŸz½^HMí1Ìœ9SLzDq$žU,fÍšõÛç4'Vº_|±…˜üÂá°¸&Mšô_>^F±šå(?«]E¤ ÿppÚÓ˜¯Ñï÷‹¹Ìév»qóÍ7ãÎ;ïòºì²ËƉÒh4â¨=$›ÚL˜›Í†çž{wÜq‡l‡•+gp>éâÅ‹ÿËÇËdï½÷"Jë§?ý©ºˆ ¯UFv}ekhÂÔXèáËf³»Ô©RPPøß²¨8·o˜ Ö ùGfÂ#§|¤ /ÙªS     ˆTAAAA©‚‚‚‚"RE¤ ŠH‘*(((("UPPPPDª     ˆTAAAA©‚‚‚‚"RE¤ ŠH‘*(((("UPPPPDª     ˆTAAAA©‚‚‚‚"RE¤ ÿþ[çÚ÷ôô¨3ª  ðÿÊÊÊþ9‰ô¿óÀ”i¯    ˆTAAAAA©‚‚‚‚"RE¤ ŠH‘*(((("UPPPPDª    ˆTAAAAA©‚‚‚‚"RE¤ ŠH‘~(n¾ùf|æ3Ÿù‹Ç¡C‡ð¯ÿú¯òº;vŒŸH$ä5###ÿ£Çæ÷û¡Óé`4¥Uáç?ÿyÄb±ÿÒ6jkkñÚk¯ýÅï#‘n¹åÔÕÕÁb± ´´W^y%²Ù,Þyç,Z´èC·¹páBüáP< ÿëaT§@Ã÷¿ÿ}är9¬]»Û¶mÿýÛ¿Éï­V+®¾új¸Ýnyþé§ŸÆ¿øEx<žÿ_ïÕW_ÅÊ•+qôèQœuÖYøÝï~'Çñ÷ “ÉàœsÎR¾ÿþû1}útttt ¹¹z½óæÍÃwÜ¡þ8”"ýÛ`³Ù`·Ûa6›…Dø{~¤R)üò—¿Äèè(î¹ç™ðƒü·Þzë_lcõêÕBÀ7Þx#yä!ªP(„¯|å+hiiù»ŽÏd2ÉñÔÔÔȱº\.ù=Kee¥üÌËûcìܹ ,àüóÏõüAÇ»k×.!éÓN;MÔ.+P^8ë֭þð…qÅΟcÉ’%²ÿx<>¾Vè]t‘,.>ŸO¼‚‚"R…Ä 7Ü æõ7¿ùMüèG?:î¹½{÷býúõ¸ýöÛqçw¢µµUÔ-“ÎâÅ‹…`þ\qÅ())‘íL™2ûØÇä÷—_~9vïÞÁÁA!´Ç\~ÏdÈäØßßk®¹½½½±ÍÍ›7 qýMÇpß}÷áË_þ2Ž9"J} /¾ø¢,| ‡׃‚‚"R…ÿ2öíÛ‡¾¾>|ãßÀW¿úU!®îîn!Þüãðz½×öó›ßˆÊdrfóž]ìÇ|ì±Ç°jÕ*Ìž=MMMBݳg(c&¼~ô£(..þ@•Ëê{ ¬\ù8ùÁ¾áqæ™gÊg)//?î÷ìr‡Ã8ãŒ3Ä;uêTõ¡ð¿ ÊGúßöŸ²)ý÷ú-? bzóãâ‹/ÆÆE}>ôÐCزe‹‰ø÷|ã«ä’4 ±Í™3gâ¿ø‚Á ¸xà!áiÓ¦‰[âD|3ª««qàÀ<óÌ3¸ë®»ðì³ÏÊCAA)R…›ê9ÑçÈŠ#ú¬ ù¹¶¶6Q¥étZ}¬ØWË~I&¬W^ysçÎdŸ.«NV«eg°¯’I’}ºÑhTLïšðzá…¢¢¢—^z©3+Ôÿ¯jœM{V«¬”ß{ï=õ‡¢ ˆTáÃÁæ/§üÜvÛmÇý¾±±QÒ†8ÈÄ&õ‰1ù±/òïM‘:÷Üs…Ä—/_ŽùóçãÛßþ6®ºê*Qƒlb%ÌŠt Õýõ×E©>üðÃâ§=ÿ—½s·©Nÿÿé˜ðJJŠ’¡!Dw'…ˆ!iR¤)¥q‹Ê%I‘1.c÷\bDå垦0Ln5‘"„qëBBÿÖo½ŸÎÚÿu¶½ÏÍAÎù¼_¯ïëì³ÖÚë¶÷þ¬çy¾k}?D©t4Q{­_¿¾-[µjU«­§—/¿üÒÒ~:è¡6L_‘£Èüåwjy“[‚ß ?~ü3*!DŽŒ6sç¾Æÿ³ßo¤¡IÉíX¨yŠH…B©½BHH…BB*„R!„R!„ !„„T!$¤B!$¤B!!B ©BHH…BHH…BB*„R!„æp?~|šËa!‚—`#‚ÝpðZËg‘Þ´iÓNɹ˜5kVL§Ñôлwo³¡BBšÃÀ%×O¼Š~þùç¸Ëa&‡x˜`Vǘťgù¬»Ìì0¨ËjØççŸ>ÓBŠ5t‹-ôkÒœ¶Æxº#Œ+W®ŒLóÍ7ݤI“ÌÄ­uëÖnøðáf×§O×¥K‹H_~ùe3³Ãû6mÚXD¶bÅ ój /ÿÃ?¸Ž;š9ÜÉݘ1cÌæyÁ‚f¬X c|‡GTÉ’%Í&ù•W^±y¸€bÃ|ÑE™ÿï…5kÖ¸o¼ÑåÏŸß¼ž°s¾ÿþûÝ_|án¹åW¶lY[Žýg~Á‚]ݺuí8ßzl—™ŽqÞªU«Ì*zðàÁ6îܹæ_Åú1üì3¹Ôˆ@®_Èí·¼~Ëç·ü~+ä·"~»Ìo•¼lÆáÇ=_$=?÷|Ñôúöí™7eʯU«Vž©z°iüï‹—½þé§Ÿ¼fÍšyû÷ï÷|qó^ýuïøñãÞž={b.Ÿ””dÛæe†ùóç{yóæõöíÛç]{íµ^÷îÝmº/nx/{=zô°ÿ—-[fË9rÄþçø8Ö;wz¿ùÍo¼7z~äèùÂoû¼eËï›o¾±eý Š-À²lãMLLô|±´éþÅÇó…ÛÛ»w¯·víZÛ–/Ò^Ë–-m¾ñ¶mÛfë÷/ Þƒ>è q6ƒ&ka‘dmÌŸ¬•y“µ3WŽôµ'§ÞˆeqÜûï¿oi-.šÀôX®›ÑÜtÓMnäÈ‘ÎW³fÍH4†í`S|2Œ=Ú¢ÀÂ… [ôHÔv1 Ö»(¶Í”,pô4hyÞû¢få _ü\ãÆmy¬œq­^½ú Ûcy"Õ3fXN„Í{‰JqD:uªEº´h°„2dˆó/4VÞ¨X±¢¢¡Ô>»¦õØ$wèÐÁ 8Ц-Y²$2?^ý3D⥗^²´qó#Ç,ß×ï¾ûÎÍœ9Ó-\¸Ð*TÈRnJ X- šÑ¥€^xÁ, I½IÛ¹`0ýŽ;î°ôÑ¥¶I™"šÉ“'»±cÇÚÆLÍž™÷ÒRã믿v=ôëß¿¿½ºkZïBBzB}öÎ;»ž={ZkР[ºt©Eb±ÀOñ": ³iÓ&«ERC¤¾ˆ@E/ôèQ&jª™aܸq®H‘"nݺuîÓO?uŸþ¹yȧÕéDĉÀâ¶Í:‚Î/.D­ÔL›6mê–-[¹xPÏúè#óhŒâzôèáúõëçž|òIó>Â$Ž¿¸“Ž5Ê C¸Ž;º­[·ž”ÐáÝ„aÝ‚ ÌÀ~üñG3¨c¿ñr*V¬˜¹™¦|÷ÝwŸyR]pÁö^X³fØåÏŸß<™ð`Ââ§Q üKiÜJ™‘ÞL`ð‡54Ó‹/n.¥ëàÁƒmþܹs]ùòåmý•*U²ó$„„ô,¿y|ÝR<è?øàƒ¸Ëâ‰;&žïˆVນ¸‘6jÔÈD±BD0â·OÄ GÑÄÄDó¤Ï,X1cuŒÈ#NX%PšÀetûöíî­·Þ2QÇp/Ož<&ú¸™®_¿Þ×S<çRD˜óAå.4Ë—/7?hܸ±‰.vМ œP»å«®ºÊmÛ¶Í,¡+T¨b_Y÷¼yólýµjÕ²s!Dvçœì|p¤óÔ×L|ÚI_qÖŒ¦Zµj&&ø½m¥'‚<ÿüó]©R¥ì5Ñïc;@$ˆ3ÛGœO†Ñ£G[ˆ="ŠaGÓ`ýì;VË”2°b4h]H°H¦¬±wï^H–Çr‡ÐêÕ«Ÿ°=–'R1c† õ®]»ì½D¥DëS§N8°FCTŽXï߿߸bÅŠú• éÙžÖ‘jà뎘ÄJŸÃB‹è+Þï)Næ9Y:‰gΜiþô… rG5ïy¢AÄÍècÁ^™4Ro¢bÞËô;î¸ÃÒsj®Ô6±zŸ ú$êE„¹è`ÇÌ{Ãç(DÍD¬DºØ1©¥ ¡Ôþ,…:"©wçÎ]Ïž=­5hÐÀ-]º4¦Pòã'úBxHK‰4I׉¬(Psd^FAø&¢ÓÌ0nÜ8KÝ×­[ç>ýôS+Ô©S'ÍN'"NfA©‚ Q+5Ó¦M›ºeË–EJÔ3iÞËE‚ú+Û$Ê –!u§²oß>Û'î& båÜ™ïÙ³ÇMš4I¿0¡ˆôlFo¸áW®\¹È´zõê¹E‹¹Õ«W§X–Ž‘@\ˆÞZµjei;ÂÁ:èÑfzÆg"bÒá›o¾Ù¢ÂŒB½–¨±téÒ‘i½zõrU«V5±ŠµZRx"ÊÚµk[„œ—{ï½×.”l=ø&Lp•+WÖ‡,„„ôÔC:Œ0Þzë­)¦ÓDúþöÛo»V­ZY²|ùòî°N&:›FŒaÂõÓO?Y‡ÔNË>S%2®Y³¦u0‘êÓáÕ¼yswÁؼË.»Ì 0@°YD޾ý)-6oÞìì† bµN"MRw:š¥_ôÚ?õÔSÒ7[ˆ¬Š6Óqû“j¤1 G4ßyç‹JϦ{JÃõR!„Rû3½ÛDvIII‘Þr!„Pj/„§(µWD*„Jí…BB*„R!„ !„ !„„T!$¤B!!B!!B ©BHH…BB*„BBz20ék¯½f£Ü3ˆ3~÷{÷îu_|ñ…ëÙ³çÝ7ö‹Áºþûßÿž0'Ñ%J˜žLŒÌÆ ³÷àv×S¦7kÖLºÒ¬Ûb„ª[·n&¢µjÕ²Ñð¯¸â ׸qã3¶_ìÓŸÿüç&xŒŸÚ¹sg7mÚ4³FAôûöí™ß(aV,R„Ò,‡Hî¼óÎ3ï#üëo¾ùf!Ó¦M1êÞ½»E«4¼–/_nÓ1›ëÔ©“E³,‹Ã(~IøÐoݺ5ÓûÄÓX:ÿýïOá`ðñǻ믿Þ%&&ša~RŸ=0Ê?fxA$Ëú0ä«_¿¾>p!$¤Y®›ˆß‹/¾èæÏŸI‘Ãâ9Ò=üðîhÑ¢f(GªŒS'ÎýúõsÛ·o7Oy"H®pá™Þ'¢ãŠ+š¹"Í•W^i‘(Ûdßg̘aN¢øÜM¿ñÆöÿìÙ³m}—^z©>p!$¤Yi|ïÞ½]½zõL‰>'j¡ãƳ×ÔZ[´h¡[ˆ,Bæw±NŠ/~U«V5aBHW­Z•"¢<~ü¸uîÜyç®dÉ’±"2EX³jÛ¶msÅ‹LC,‰:©ß†£ä 3¬k×®Ø#¤X–Ò>¾÷}ô‘{뭷츄ŠH³œÏ>ûÌ}ùå—îСCnÇŽ–*G§åÓ§O7Q"j ¨T©’[½zµ¥Ø8ò^¢RjšÔ#¿ÿþûLíÏ„ ¬óˆ%Ì™3ÇD¾ÿþnéÒ¥‘™HtÖ¬YÖSO6šGyÄ"WÒü|ùòéÃBé©á믿¶Ô÷Ç´t¼N:îšk®1ÄjÞ¼yVwlÛ¶­MkÔ¨‘E‡Ô0éd:pà€‰o›6m¬ÆúŸÿüÇ:­2“Þ_rÉ%'L#:¥öJÊ =ÓqD‡RùòåM|«T©SHéùWZ/DÖ"Q!„H-m—‹¨Bœ±Õ)B ©BHH…BB*„R!„R!„ !„„T!$¤B!$¤B!!B ©BHH…BHH…BB*„ÒSÂðáÃÍþ˜öÄO¸š¥GV³xñâÈkl>/¤3Å{ï½çÊ•+g6ÑMš49ÁÙtÆ 6ïÕW_ù~l˜å¿U«V'LÿÃþ`FyxÜã „È)–ÏaJW¬X1÷׿þÕíÚµ+ËÖ·ÆpW\q…y)öíÛç6lh![¶l1#¼—_~92(\Jq?Å’%KÌßéÜsÏM1ýðáÃfR¶lY[ïW_}ÓÖD‘ …wLD=Ixº¿ÿþû6+äO>ù$²l—.]ÜÊ•+Mlp÷$²#’9s¦™ÅõéÓÇÌà:uêä>üðCócŠã;–Ç»iÓ¦MæÃˆÓÚ·oï:vìh‚‹{(àgo<ÛìСƒ;v¬ÍÃû¬ùAU¨P!2 QÄðpÂÛ©víÚ)Ö‹ )‘h¿~ý\‘"Eì5î©BˆŒsÖÿr®ºêªˆ1]j ‚xÏÙ!ˆqÓ¦MÝe—]fïÇóABX àFŒaï ¯A"úE€Y¥…‹.ºÈÕ¨QÃæ÷Ýw®W¯^.))ÉD”»L™2.11ñ'ÒôòÍ7߸Ë/¿ûÎ;ïÄíÁ¸çž{ܬY³ì(Iú³!DˆH ÒQn÷¡>Ú­[7K£ƒÔΠÿûßV»,Q¢DÜõÜÿýnÊ”)¶>¢º W›4Aa½Ô¯¿þúÈ{î¾ûn7qâD÷üóÏ›ÑÝvÛm©î/‚M¤Èº *”áãÍ—/ŸÕoN•Û•zôèa‚^ËQ åb‚8nܸñ„ÛÂT®\ÙRyÎ=ø 4pO?ý´~Bd‚\¹~ÉMiyB-or#W-ìGŸéT !rdÚž;÷5þŸý~#EMJnÇBÍÓ“MBq²b«S „R!„ !„„T!$¤B!$¤B!!B ©BHH…BHH…BB*„R!„ !„ !„„T!$¤g .tÍ›7·öä“OºQ£F™%sjàó„|žOŒLªÀ«‰QñÙ.cq‡}œN'Á~ìß¿?ÅtÌÙ/²>‡bÅŠ™ÍJzhÙ²¥{æ™gܰaÃlh¸àz¶±>UtîÜ9Ug‚ŒR²dI÷Ïþ3Íå~÷»ß™ÛÃ}÷ÝgÇŒ!$Ž wÜqGŠïizÀ~G!!Í0˜À! Ø(ãЉg}j`ƒœÑ/èÉðÆo˜WÓ™¶Kö#³öÒ%þüfTˆY_Z`™2mÚ4׬Y3û—×#GŽ˜·UëÖ­MdÇŸí¾»K–,1óCD°Âá\`%ލvíÚU?p éé/¾MD?ø&zsæÌq:ur=ö˜ùÝqÍŸ?ß}ðÁö£e:FxðÉ'Ÿ¸gŸ}Ö=ñÄæ…‹è?ü`N¥[·n=©ý÷)Àèq¹ä’KÜÈ‘##Óû÷ï﮸â ós— c» Rº÷Þ{ݵ×^k"ˆÿTŸ>},’Á¢zÈ!‘u`ÉŒS) ”””s?0õ#bb¹èk¼u¼ÿþû®B… æèZ§N‹°ˆ±M›6vA㘸 QßÎ;ÍzËk즋/nž]açÓ·ß~Û•-[ÖÖ|¦D£ìûÐ¥K×»wïÈz‰ñö§ë…^0cEÎ+ÛÎvÚ´ÿ1 ı6­ýˆ· àܳ_ tuëÖµï `dȺ9?\°F ñÕ:ÿüóíó{ê©§RD?ü°Ë“'ýÏ_Ž›mrþÙpáÇgŒu³íI“&Ùt¾§|?ØO¾;Ø”‹Œ äö[^¿åó[~¿ò[¿]æ·J^6gÁ‚žÿŶ×þÚëÛ·¯7qâDû×®]žÿƒð|!ðzöìé-Z´È¦û‚å½÷Þ{‘uôèÑÃÖáá=ÿèµmÛÖ[¿~½½ÏÿÂzÈôþù¢íùââ=zÔöï~‡ìõìÙ³½¼yóz¾À{óæÍóüƒçÿm{5òxà[ÇÓO?í•(QÂÛ·oŸwðàA[Î Û?_lþÖŽÉ"oÏž=Þ÷ßï]ýõÞðáÃOØ_ؼ„„ÏÿÑy~ôãù Û/?Œ»΋/þÞªU«l»¾pz7¶uûâáùÂáýüó϶n¶Ãºƒãõ×ó/jö:ø 8ßU«Vœ§Ûo¿ÝóSz{=tèPÏçÑÜìýœ+ÿ‚gó¿ýö[ϯL™2žAò–/_îùbeÇ8fÌϯzõêöþvíÚyþ…3Õýà<û‘¯½Ž· ظq£}ìKbb¢çgC6½bÅŠž/jvý µmçÝwßõü ˜wõÕWÛùá}ëÖ­³å:äùBé}þùçö?Ÿ¹Å{þÅÑ;ï¼ó¼Ò¥K{;vì°y¼wõêÕvl3gÎô|¡µéþÈ+R¤ˆíŸÇÂ>‰_@“µ°H²6æOÖʼÉÚ™Ki2\­}ñ³è‘«>ÑWê?üÐýíos/¾ø¢EEAä‹*UªØÕž(€(:"̓>˜)Ñx<þøã®@®víÚíQCô/Å`ÍöˆZüaä=þÄ¢""IÙ¿J•*Ù:ˆ¬‰7oÞl‘*ËàFºaÆögT"¢7j¦D|ñÖX?c1MôCDļ"._Ðm½Di¸ÁFü5jØk^ƒZ1µ[_í\ǃc ꇜ«G}Ô>§R¥J¹GyÄÎÙó}ÁqÓ§O7gUŽ•ýæ=Aúo?ÂÄÛQ)n´¼Ÿsï_píÜu®]»Öc‰(©w% Üj‰p±§fê‹rÌ(Ø&‘-ûÍú›6mjÓ׬YcQ1ËòÝ2)Jõë×·uòÝmÒ¤‰!ƒœ£Sð üàñ„Gù!?|RxÒ=Äõå—_Nu|ùà Ä'KP÷‹îÈBDƒô5ØV8~°Á|@ðÂÔáý¥5lØÐÒöÔöƒå‚ó¤“áõÄZeD… R,üˆ)Åëð¾`Ãë§§vKIÆøL¬ã+Ž£V­Z–¾û§;v¬Ù¿úê«Vžá"€ÀÇÛhᎵ Î ëýøã­ŒÁÅ(üþXçkq.:Ôî)ß  4.ná’OPWf½4Ê%”qÀÏN\‹-¬SŠú)å”´>K¡iÆ®(~dFþBQe:?<"ž/¾ø"…(QGõÓ$kñ`??ÅÍÔ~ÅŠ8âATX°=êžDv¡^½zV äNz̉Ì6mÚtÂ~ud¶‡È" i­ƒˆe©5ÙÓÓO@”¶gϋʈ܈Â2[C‚Î&š-µN.ŠÁ¹úÇ?þa‘ü¶mÛÜ„ "犨“^Ž‘ˆHù¥—^²Î« Þ˜âmãàÁƒvãÂËgµxñb[ž‹µŸ¾»#FØyš={¶Ûµk—ÍóSy;"î^½z¹¥K—ÆÂ;fß]¶Kçuq`»\€©»ÒP­Z5»XðyŸŽ»$¤9n!Õ¡³‰ˆ‡.€¨…|ûöí#:±à MŠuàÀLíÛˆxð#¥Ó‡06 :4CÛ£T€Ð‘ÝÑa…(GïrDi¤¡DKá7Þ:HçXRzŠóûùçŸGÖÉ4:ZjÖ¬i¥,= *á^ëD†È‘ôQâb@¤ Ý»wwåË—·t$*dƒó¸o߾Ȳìû½þ´ˆ· RgÎ>tV[ÁçýÞ{ïY4I‡ebbb¤tAçÇÃ-z=XQ8¥(.ôtÜ!¦,töìÙÓÊ EЉDÕ'bÌ…Ž(•ÒÈD_‰èC-orKð[a?%ùL§JœJøS·{衇t2į+ÚÌ›+ 7Ns ERr;jž"Rñ«!+jÊB(µBˆ³õÚ‹_+W®ÔIŠH…BB*„BB*„Rnìæ>VžZa(nVç†ö´†™ã¶"n?pó;÷Nrß$÷(rO(Ø !!gn²G ¡‡§«¸Ñ¼Q£FvCwF†™;ÕpC>ûÁSI<¡ÄC Œ„%DvG½ö¿rø„g«y2'ü¸g¹råìo0ÌÃÑñ¸!O¼ðOñðøfb0h#ò,õŸþô'7hР¢Wžb žìáé"Qä™s“3fŒ ´ óÈ#½0Ÿ§vxD”H™'€çÌyÌ‘Á=„PD*Î(ˆ#ŸñØezàñÂË/¿Üž›æꄘgµyœ•ŽƒÇ!c 7Q/Ï^ó|9ÂÊ㉠Š<§<öÊ 8åñäñFžI'2k!$¤â´C$XfÏQ3¸ g±£aà  FL"Óã à Ïé±2x0œ ¨áQ›XÏk“Îóìx0äÏx#þ«V­²‘’ªOO, ©8£Â“&Ã×1ÈBÅHíÁèéaHëÃ#Xð‘®S*øãÿs{© µÄxCÞñ—ˆ”Q¢¨íS&BB*Î#âI}“š'âI”XV¤—Xð¢¼Î ‘ÇÈM L픕õ32#]1dÃÁ1ÒÇ „„TœQ’Ž¡èèÈ¡§ž¡ÙSÆM/±†aj§ŒšQØRz„’Û¯¸«€ˆ•Ò>FDÀ¬wæÌ™úE¶GÃè‰ C¯=wŒ=Z'CdÿhSÃè‰S…:„Pj/„Jí…B©½B(µB!!B ©BHH…BB*„ÒÔÑ]×B‘†*"Bˆ,ŽH !D#ÔÜqfx¡&„Î5ÑK-µ÷$¤B‘~]L-µ¼é¦®¦&M!DN×xÓŒs2±2!„ȉB—ÿ`²:^¢ÿbNIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/main.png000664 000000 000000 00000155102 13703317554 026254 0ustar00rootroot000000 000000 ‰PNG  IHDR@º9&) tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp hƃÖ²IDATxÚìÝœåýÇñßÞí½÷"Mš¢ *MEŠÄ^Pì½Æ¨ÑÄcLòW“Ø#–hlØPP‘"XDPAQªTé½^Ùÿ~Ÿ»Yö–Ý»½ãàîæ>ï×kàvvfvwvŸ™y~Ïïy&¬ ½@1 fá`Ï’œPÒE@üÈgy€âŠó83ß›où¸@>ÿ'z.öo€âŠówôÿÉGö €$ z$𢗨_bƒ±“÷\ÀâA¢ ù=Rüm1·Ø ‡¦ìÇ †ä›ðˆeƒ·xÙQ“Eýï-7$v,èàGªþÿøãÛöîÝû¾Š+ö ÕØ÷ $„B¡-;wîœ4eÊ”û ð³í‰kxAèà‡û;æ=ˆ—õ¡àGê¸qãÚõíÛw\xÙìfP„B¡M&LèöSøaVîäe…äɉ‰d}äþܺuëÿ*W®|2»”&Û·oÿ°jÕªCÂfÚžˆ÷ÂHžÌËé"ÌÌÌ\H·PÚ„B¡mÁ`°…å@¼ È^™ )Që$ìCð”F@ ŠíéÉïÆ-Nì-mÍö¾óK*»”bÑ/Öáqqü2@¢!¥U¢ìH $g% €RaçζcÇ le+Vd‡HŠŽU«Vµ`0èþ” ñ yÄ@öJ‰·ûÛêÕ«---ÍjÖ¬iµk×f‡(”ÌÌLÛ¶m›-Y²Äš5kÆÿ‹ÃÈÏ((Äe„B!v%à€Q懂>•²?jÔ¨a©©©.‹¬R¥Jì𷄃ŸF/àI”ýAà€Rúº2?`_U®\ÙU¾—(Ž‘p b vdgg»H»þ/Œ””w’Òÿ€òKç:uê°#ʸõë×ÛO?ýdË—/7e“kÒ¤‰µk׎ì0º®Ô1¥V­Zì ( ìS,®Ï-¯iié…ë:“±;`ç×ZaÕ«Ww©Ï:aéb P¾0àiÙ¦©S§Ú_|asçε͛7ÛÆ]VÎñíÛ··=zØ1ÇC£8¦˜‚ Eê£ ŸÂ?Dë\öb3«]©™ý¶Ëïí¤®ºAÊŽùóçÛgŸ}f“&MrwàèÝ»·Õ«WÏÖ¬YãæOœ8Ñ]+Ô­[×Ú¶mËÅ¡ÀøER …u_MÝ1£»­¬½ÊžÝzƒúö1ûûù¬fõÚ´PìÞ½Û>>ÿüsëÔ©“=ôÐCy2®¿þzûÃþàžW—„-ZXzzz©ü,Ë–-³Æs â ê–¶7”±±ŠÙ¦V–±²‰-mÿ­]ù|;{ââï­~í†\€PÊiÌu©R¥ŠÝu×]{eqê±æ_}õÕn9uƒQ ¤ ‹/¶wÞyÇ6lØ`5²SO=u¿ßÚôŒ3ΰ‘#GZƒ øb œ;òÈ#>÷õ×_³ƒ’0lØ0×øqæ™gîõÜþó—ªsïþTê Y85²¬mA˘q¤…º|mzs€=vÉWܾ €RNžjÌã?Þ÷æ÷êÕËu…Ñò@6mÚd—\r‰]zé¥îtÁ‚¶mÛ6v6à€ñk#¿ÀNqö“O>Ù5€HtDÁ &Ø3Ï<³ß?o‰@ú×ÝÆ¬>/îs?ÍžeÍZµ¶´ôœÁª¶Íno+jN³I³ß³~]Îv÷r¥ÓÖ­[mË–-Ö²eË|—ÓóÊ®ÐòQV‰Æ2dˆ{ܧOŸÈsKä£>²¥K—ZÏž=í°Ã‹¬£ñFvíÚå²Lºtéâæøá‡vì±ÇÚo¼á/zNÛ;v¬Í›7Ïe—œ~úén0vY·n=ÚuŸ%m«k=jÿͶw0£n—U6{ÖTÛ¹c»eeeYÆÖtÛ>¿© ÿê~ËÈÈà× @) æ´­dff滜÷¼·|~Zµje+V¬pw•‰õÇ?þÑ]¸)pq÷ÝwÛ—_~éæ+Сn8ºÝî 7ÜàîF#“ä¾ûîsרQÃý¯1IFŒaõë×w”èÆ–þóŸîî5äºë®ã `xA—_~Ùn¾ùæüp×%õÁ[V9Õj¦µµV)õ%{Ïücõo–-ýz¾5oÝÞÍÛ±²–­kÿ}S di¼Œ *Ø?ü`§œrJÜ;¹)›BÏk¹dÆ×PŸ`.î½÷^7î‡ÊèP°búôé6fÌ7N˜®Þ|óMëÞ½»Ýzë­‘õ ùþûïÝíwÕ˜2pà@;ñÄÝs¿üò‹Ë?~|Ü®¶êz£[öžvÚi.[D]oX”/ª«H² KçŲñ²158úÌ®,±»ÀL^{“ n<Κoéo¿lç¹&G˜-œ°Ñe€è.6Ù›Ó-;;Ó=foð?ŽõeW›6m\PCwyQ6†‚±4_Ï7lØÐ-Ÿ ÝJ÷ƒ>°÷Þ{Ï~÷»ßÙŸÿüg÷;Ù¸q£ hˆº»è¢JÞÿ}×uEó–,YbGqDd[‡zhäo@š6mšpœ±æÍ›»ÿ`QÀfçÎ@Êè1…ã €}¡€û¸~IæuŠûz© í÷ñSÝ^ô9_zé%»óÎ;­jÕªû}ðÓB@ö‡¥;ÆÛ‚­#¬A…£÷ €äìdË x„/:Ù”8Êek(óC©­/¼ð‚»-®×²£ÁL5ÞÆ+¯¼ân}«å´|²€8çœsܸ!ãÆscutÐAöî»ïæYnÚ´iöÜsÏÙ‹/¾è¶ûí·çy>º‹‹ j$¼P ùR(& ~hô§Ÿ~Ú]èñUW]åž;AzV¯•v¨…,+òxʺ[­z°Å^Ë-ŸiV¹j5ËÌÊY6Xy‡¥¤¹ .e€ <ÿüóö÷¿ÿÝZ·níÆÑøõ×_ÝmlwìØá234¾ÆðáÃí_ÿú—ä4‘µk׺@…2/@Ñ`¥|°ëÒ¢ ÊìÙ³­cÇŽ®…JÛ×x!DÁ È:kÖ,ëܹsÜmkëׯ·ï¾ûÎ  ª€Þ;×€ò¢[·näuÔ8ü¯ÑÀ¨+VtwŠÙŸXäÈšwY÷:º¿C¡œŒŽ-™‹ÝmÑd³S¬IóF–•™¥0V©áz«]±­0” è6¸ .hpQ÷¡®&Ò¤Iëß¿¿ëþrÿý÷»`…A{üñÇÝ€¥ñÌ™3Çþô§?¹YekèBMw„Ñ…’ÆÑ@¨ÊêÐø—_~¹õíÛ×þûßÿºÑå5°éqÇ—ð½V«VÍxà»ãŽ;¬råʶ}ûv{çwÜß&HP˜î+¥Å|ÏêΪ±KbÇüPD¡Æ7¬¸9¯¢)5jJË*hÚ½{÷üÂltóæÍöê†:yæ]Ýr«¥¥äô™·õMûxÕ9q×½óˆšV«^C ¦¥»w•V5ÃZ:Ïnè÷·Á€rB-òª¸¢lS–‡24TuaQÀAÙêÆ¢àˆº¯(Kãâ‹/¶¡C‡&Ü–2?´Ž²@â] (ø¡íFgn(Ó$ÑØñè}hûdøÏêÕ«ØþžžÞZ—¹SFî”5…XJÅœÍÏYÇêWÚÚÝßÙ§k®O¸\í†MöŒÿ~Üô˜¥Ö¤V[ëÓq0ÁÊ<²ªW¯nýúõsAÅ‹'ì¢âQPBë$o`ÒÂ?DÁà_ì.0SÖÝ즂dfæŒû‘^5Ó:v¥Õ;(h>k´,Ñ»ð% ª;Ì AƒìÛo¿µE‹å¹S PܸŽ”ºA5*ÔÚa5šoµ†‡o´&µÚÙC玷šÕk“Ž åˆ×eþתU+7EWRD`”/êÛçPþ”ºH‡3WX­ŠÙoŽxÀúu¹À pÆ…”/ì233“Á¯ì3KtL`¿\Y*[#cwÀÒÒ —j¨už½h‘ëã›––æ¶CðÊù¤±!tëT”/œ÷QÜ222Gàì—ˆnwIÃunÄöÂPÀCëÒÝÊ7µÖ.Y²Äô7ç…¥Ì?–.]j-[¶d‡’» îÎ;糫šúíkÒíTÕ%’=v(xªÌxwøOøZ±ôÜ€ÂÒmL {+S`ÀS@<äß#|ð= À÷’5 ±§@™Eð½¤2@¶lÙžeVRºuë²§@™Eà{@€ï¾Gøà{@€ï¾Gøà{@€ïKú lÏ0›·ÁlÊ2³oV™­Ú–3¿A³. Ìz75kSˬr_(š€èÿð”5¥åN4eggÏß/¾r«Ù˜f£…,#%`Ù©! 俤„²ÍR²––²S[¬ÿÁfªò…€¼RRRZ‡ÿÛ•;eäNYQS¨Ä2@üx}¶Ùç«B¶-Uï,d™™fÙÞ›OÁ”ÃÏú%dëw켎A@á•È êö2f¾Ùä•!ÛÙ¶,³Ýá);~ÒM¡ðß¡ð¼mO󦄗ýx^κ…µpáBËÊÊÚ¯Ÿ)ú5ÄëO(\Ÿž?~¡Ÿ+ÊöÊ’éóí¯fš²Mé!‹„ Bf5ï¶33þøc·ÌìÙ³>—è5Õ;"Ñ:ÉA®½öZ7І¥(-Á €4¬°ùÔ#5‰käü0ÌÝùå³!±@]`B– ìY S·Á $Ü®RˆZµjeÇsŒKÕ‰×=åÅ_tã…ìØ±ÃæÍ›çÒ…zöìé2F¦OŸîRvùR%–"m›6m²Ë/¿Ü6oÞl|ðû_Ñ7âQQÀCƒ‰*øá=VOQ·'¢ú¨¨‹KóæÍ“ªÓêN¤z +¤]»v‘åó{.Ñkæ·N²A;î¸Ãe¾”–àG‰@Žll¶dqŠíJÉ{«ØUÛÍ^ú1Û>Xh¶fG$,‰TÈLµ#J¼]«t¢D&L˜`>ø ËîÐîì³ÏŽx½?(ÝêUâ Àð=Òìðº{.A?¾¤}jäñåásúv© ×WÀãOG¦Eß~DÐN<(ÕêTÜû\ ¿Ì ‡í£SÒmÌ©éöj¿4kP9ô¶¢b.Z£NNÏ3¯W£»·[ð€¿•å;ºíu{„ßsß&©|¡(·~Ó*ÕÆ–nãÃÓùmsÊ‚êÕÿî•fï HwÓi-ö.#ÕÂÅÿî®A{;ü¼¦›¦äyî¾ð±`ÄÀœsqI úåKÔ<Õf­ Ù/[B‘y§†¿”™kB¶8j(YK·†¬{Ã@ø¼mV1|ýÔ¡vÀTN±çf¹ç{‡+Ã~ÈJz{j©}pF¦ý°~ïóým‡­YÕ€]0.Ã6ì Yë[µë`PhQå-Zåpm£> @™Q=Ýìê©vîØ Ë Ÿ.ß8)Í>Y–mÛ3Í^ú)˾Y“mu+ì½Aé6qE–mÙüÌådWèù¿†ÏÉjlP äÓ»,3ÛìoǤٌðs÷Mß]¢Ÿ¯T@Ô%¦Ó»öëkèKÐ,ÅZUO±9ë³mâòì½–Qkêªl[½#ç¨Uõ€Ë*‰·,(š¯ÂçZ]\=mYÖ¥^Š}¾ êP+Ū„¯Jv…O¹í³&Ã-«ö«;Mgf]8ýý›Ì<ÛR¶ÈÁ5R\‹Ók?gÙ‡¿ì9gת°Ó[¦Ú v»à‡Ìß´'øQж-“¾Â{âØ4×èÒ©NŠ…ÂOÞ0%Ãîé´gfgÚìÜ@Ì‹}Óìþé™4ĹðŒWv6ïEæž¿1üøÍùY.¬A¥€==;ËÞ[”ýW¯4×}]Ç MµœÊú£=ƒV³BN·öß‘a˶î)wÚæÍSíúÉÖ§qŠ]vhÐu‘^÷y9ÛÕkÛ&ÕÖ„ë«¶[žFU <éÞ0ŧ×íÌ)ª «aâíY‘z²ÊlfvÈ<W ¸¬Ž“Fî²M»ÍF/É9ÿº=dYáB®r_½RN½úúÉY%þùH˜Ò0æÇ_ ÚÀf©î`¨4ž[:ïûéR/`g¼g—\>¶­IÄ€â4sM¶µ«™âRÔnb_¯¹ È‘õSìZ[°)§¥I­ÆJa¿lb†ññn×*uvë¼)·Ïýe¿lÙ_gæ ~HËêW‰ñ‚Ñ’Ùv¢eTÁÒû»4ÛγÛ>û5ÛÎ<8Õ¾ ÿJnJ°ZÁë†×'øDU<”o¾ÊðYáùÛ2Ì#†~’aW~ša7¶§l*¨xf¸<^ž}§œù}›¦ØÂðqà7£wÛ9áõä:Õz­–ê?´ÃLj*i»®SÐ.·Ûλۆ¶OµF•Ö$\»ôT·îe2¬ae¾+”_:÷­Ù¹çñêí!«W)çoeQª㟽Òìßße¹€‡‚"÷MS 3ïvlü~]ȶ†Ë³ÎíÊþ| \_è›f¿?"Xbcpúj”¯gK³gWˆLMsSðmêÓ8Õnû"ÃE÷y†]Ð6ÕE‹£½¿(ÛNnž9@×$Å>^BöÅiwøÔ:gC¶u®“â*=ʾԤ¿5O9¬NÀæ¬ßÀ®4Ó ùK—`@¯?‘̶ó[&#;'“E…+^u*𫼮ˆéBÿôK_6#^Ùñæ+u^¸üê×l—R¯¿£Ç÷QEL‹sZ§ZôœùÚÞ1 Sìw‡­rZÀ>¼m>Ú+hÃædÚ‚Í!W¦U>oê´›;çTÀÔØyhí@¤¢¦u¿ø•ë”o¡¨Sg¶«ç”55N,ßf9ÇV)V5Í\÷e}DŸmUWSã„T —K!ò33íÒ .0Ùÿ ’ Eø*rõ¤ ;ê­]‘ÉK}S þÞ•{¢è”RzbH¹6ç`×1|Ôàl+I`¿˜®`(ÍVY “cÚªœ ç1}uÎùX•“è‹0ý™Zˆ+µ6é\Œ³N2ÛÎo™]1± ]QlÜr“£ÂŸCÑ¿P‰Bù¢€…œiQe©BjÀ<ñÊN¼ù»³÷^¦søúü=ÒlÞÆ½»pÏ ºÎWVˆÒòßêŸfír3¸Õ}æÇp™<573KÝ^ÔÅe²l7Ý=5Ó¾[ró³Byƒ4@y¥zr­¨ @®Ííú²b[ÈF-βGfe†çYÜÁ‚µü?{¦Ù½Ó2]7Y>?Î ×µ7åf‰|¿.ÛZÕðQ¤¤º¼è ›5ytЭ3Ðl¥ Ù¶Ì½ƒï/ʲþÍRÃ_&-7ì/j±íßLÙÙ‘sõ®ðÉ»c”H+°ÆÒPËl¥Ü^«Ý¤¸ ¨d­ _xi`Ôk;#(/å6™måõ•izzË”pî/(ô‹ÿvm¶»–öÊ›º§Ì\[<ep(Xúù¯ÙV--d1Û‘inðä1K²ÝØB²iwÈú&ÓtÉVëTW¦U ز] u¦«…ìç!7sznÍH™h@ù=?‡ì¨ðùNcw¨lÛ8ÅeEE÷žPYQ’Áª!Wλæ–9u}¼wš |·nO¹W†•Æý©–{“¨Žá²¼hsÉDKå]`Š{PÔ×ë ™3ʼZf”¾ª(³Òîb\œí¾4}ÙWLÌ °ü°!äÒ×§®ÊÎsÑÕ½aNŠ­¨¥é?s²ìµ~é®eW-Gº¨*L¿á{¦eÚƒÇmâàt[»ÓÜÀ‰'¸;©måõ§¬È¶?´W~¢å“RÞ:&Í P¬ ”ÆÆyk~ñ”‡Éáò¥.ï-«§ÙâðuüÒÜlï³NuYN†FžÕív¼´Yùè”twÀÓÅ•ÒlïêtÑáôð'¼?|AäE£5^ˆFˆ÷n‹÷tŸœˆú'€’¥€ƒRêwíCJ±´ð´ewá·]˜×ä^èb%·ÛE9¦2§n,Ù¡sjuêÔÉóÜîÝ»mÀ€öÃ?ð«”{Æ ³;vD2ÄFe't’5lØÐÍSãÁsÏ=gÁ`и×ü*UªX¯^½¬Y³fnþŒ3lË–-vÜqDZƒÊ6€"š9s¦}úé§®LöìÙÓŽ>úè<Ï;Ö¶oßîêÆÑvîÜiŸ|ò‰-]ºÔ=îÓ§rÈ!¶víZ?~¼mذÁÍïÑ£‡uîÜ™HQ¥§§Û3Ï<ã‚2fÌw ¼ýöÛ÷i»7n´ /¼Ð.¿ür;ꨣlÞ¼y¶uëք˧¦¦ÚÉ'ŸlÕªU£Ô]]{íµV±bÅÈ9T• 5x•!eNkÒ¤IÜù‡~¸}ñÅ®’”mŸ}ö™]tÑEì\€²  ˆÀœ4i’]qÅ–’’ₚ bT¯^Ý=¯•ÕªU«FÖQ DeWÿ+Y`РA¶yófWGoÛ¶­«¯+è¡2­úô“O>iíÚµ‹'$_t9ÿüómÚ´i¶bÅ ÷ø…^°ë¯¿Þ0?üðC{ì±Çlâĉy¾ W_}Õý/ÊÜÐãÌÌÌ<Ûýé§Ÿ\É%—\bǼ]yå•Ö¡C÷ÜܹsíÙgŸµÇÜ[¢·­í‰"`Ú®~4«W¯¦4E­¿Þ¤ §C=Ô~üñÇÈóú[çÝDóuA¦ÆŠuëÖÙ÷ßo-Z´°Zµj±cÊ6€"Z¸p¡µlÙÒ8*W®ìJ]»vÙ¸qã¬{÷î‘åUVzè!8©T©’uìØÑ•û5j¸ÿUÇVðÄËèRÐCQ¯.N¤ôÅ(½îå—_vÑbíÐÞ½{ÛwÞi}ô‘tÐAöÊ+¯D2DyðÁÝÿ¢/EÕM%Z«V­lÙ²e.êkäÈ‘.=¯víÚvÕUWEÞúò7mÚäþ¾æšklÖ¬Y®;Ì<@i ŠÒa?þøc÷¿4mÚÔ222\¥GÔØ  R¢ùº°ÒùþË/¿tÓ±ÇËN(Ûöº›E÷hÐßš'êi¡îi tD?Úi§í•ÍñóÏ?»2^¡B÷X Ê,Ñð'œpBžmHA¿|Q\p~úé.J¬ì_~ùÅõ[šPÖG4u…STutŽ 5kÖtY$cDugºÀìech Æ¢ˆ±¾Eœ¼ª´ek,^¼¸PÛÕÀ-Šti€¦o¼ÑE­dĈvÙe—¹1BÔ&6{D™#êרà‡w"{´nÝÚõ Öÿ¥¿« ªZ‚½n§ùÍ×…™2=5 lØ7 DªNíÙ¶m››§O5~‡28T'^¾|¹=z¯õµÌðáÃ]VHtâ‚øT"k{*÷%ÁW·ÁUÀÁD)ö‹õKR ÄãE·òØTDÑ8#_|± †|õÕWn@—¿ýío®kM·nÝ⮉_Ä?—ëbK©³je*h>Ê6€â£ñ?”4 îiªÃªl|ðÁ.Ù@=*Ž9æ—½¡ä X¬:µz_xõí×_Ý9”Œà‰®—k›º+Œ7¨êô맨³gÏv)9ê?¨þGJ¯SšŽÆåð´Ñ¤F[³f뛤`Š6õ¾|ew(O]dÔJ)üðCkР¿.xá…lÇŽ‘Ç矾ժU‹ø l_xá…–žž^à²k×®µºuëî5Μ9öå—_Z… ¬ÿþV¿~ý„ËÊÎ;mìØ±6þ| …Bîº}À€V­Zµ"½>PÞÍš5Ë&OžìþîÞ½»uëÖÍÖ­[g&Lpud9æ˜cì°ÃÛkÝ—_~Ù¶lÙâþ®Q£†;x¦Nj‹-²óÎ;¯Ä>›/2@6nÜh]t‘;8ê Y©R%Ûºuk¾ë<üðödÉ’}ÞVJJŠ 8°À,ØCPC‡µ«®ºÊM?ÿ”íd³¡ß{クó;tèà®Å?üp÷~ËÊG}diiivã7Ú-·Üâ o¿ýv‘_(ÏPüì³Ïì²Ë.³+®¸Â¾úê+Û¼y³ j*èqå•WºF‹qãÆ¹eEGÏš5k"çöè@Lj#\EÛ*I¾ÈùùçŸÝÁñâ‹/vûôéyN`ed,]ºÔzöìi;w¶o¾ùÆ>øà«X±¢µiÓÆ:’ÙÖܹsÝa×®].Ö¥K—Èž••Ei RSS-̹ÉÈÈp•‘ÚµkÛ÷ßï²+Gí&vïÞí.ººvíê–>|¸Ëº\¾|¹;ûì³]CÄ?ü`Ÿ~ú©;÷«UêØcu-É_|ñ…›§õ<òHÛ¾}»½óÎ;îÃûÛßF*YŠ_¼r¨–äU«VÙ«¯¾ê®Ï;vì˜pýü–UC¥Z”oºé¦Èñäè£vÇ‘_~ùÅêÕ«çÊû!CÜsjÙÖ::®$ûú@y²páBkÑ¢…U©RÅ=nÛ¶­-X°ÀŽ8âˆH£¿’” s¨ÎÓÏ>û¬Ýpà .©@‰W£õîÝÛ=÷úë¯ÙW-[¶tAŸþ¹ rD»ë®»ÜŽVùøƒýñt<€Ñ”ì¶4iÒ¤‰û1\{íµößÿþ×Ú·ooÿøÇ?\ D?œ•+Wºs´.¢И7ožrÊ)vóÍ7»çO>ùd«\¹²kQ~ñÅ]ÅI[ꪪs´20ð˜9s¦»03fŒ œè-33ÓUr&MšäZ°(yæ™g\Ç.î”ö®õPQ Àþ‘¨öíÛצOŸn\pAÛÈoÙõë×»Àil…«aÆ®‹‹Ž-ÑÙܪ¨ÕúÄOLúõòVf«V­y¬sª×¥EÙJ P}ùøãwõ_uUÓùÚë9¡î­:gk¾T_w,)i¾€(²û÷¿ÿÝî¹ç;è ƒ\ú›v¶º¸èÀ¦ô]\)KC­Fÿþ÷¿ÝÕ 'œàÉlKn»í¶ÈrÚîwß}ùB@á(­VçgA ä*GÑý‰u!¥s­wAåQÀÂ;«r£ÈW¬Xa7Ž´N©2¤ 4L&NœèæéïÕ«W»–-/0~üx—Ñéµr(~‰Ê¡Æ(jÔÔq$–æqc ð¢»³ˆÎÍÞ<¯kÖ¬ézD|ûí·vÈ!‡¸@‡º­‰'ª?k9 ßxã WÖ5®fiá›AP•æªþê[¤–£¿üå/î‹R«ÑI'ä–QÄ7™o[š§Ô\Í×®”:/0 O‡{™˜:GG·à*¨¡ÌË~ýú¹ÖbK"/1-½^WÔØJ*?ºk×®{¬ÿÕСFµFO›6Íž{î9;÷Üs¼ØO•Ãâ¢ñƒ”¢ã€*jU¾ôZÑóDY_S£€Ê”gÛ¶m.è! ftêÔÉMgç§Ÿ~Úk Tï¼®®¥j¬PýDÑ']Ĩ¥H#AëÂJƒ e€£Ømé‹6l˜ëö¢ƒvt6(^º`R¦ÆÁìZ ¢twe|*¢–'U†tÁ¥ÁÖôœÎ몈©2¤î1ꧬn4º°Ó8a@€ý#Q9t‘`Ð/“醖hYUÈ´meuõèÑÃÍS¥Lcü´jÕʽžþöÖUpU™c…}} ¼PÐbÊ”).X¨²ªî©çœsŽ+Gj@• hZ½zuw¾ÕyTõn% è¬õ´Œººj(ŠÒÄõERŸ#E—uÓ@¦º`RJŽúÍž=Û läe„¨Ÿ ¾¼x#Ð&Ú––:€+ø¡>Pêo\Ú¾Lü¢uëÖöÚk¯¹ UY)è.1:·k T5Vè¯ 1uuíÕ«—=ÿüónž‚#ä\i» Qç{u­ñ*MŠÇÓO?ù[e.^9T0äÐCu·ÍÕ-6£¯«uí®±z4H©Z‘ L´¬hì ‘#GÚ×_í‚*Ûgœq†«„é±9U¶—Z¶£»Þä·M ¼R9Q™ÑÀ¦¢î-:+SeLõd% ¨ü¨¡BÙ"ºõí­·Þê‚"£FrÛPƒêàV¢4 rB°šR£¦´Ü©‚¦ðj~iþ’4°’;U¿_]ÈuÔQöÀ¸¬ ¥·êoExõEé¶=gu–½òÊ+öÒK/¹”Gy¤Àm)⥃µ¶£ƒpÓ¦MÝ®ûk$kÝiFó£ÿEçum‰7š|~먂¥ÊU4µJEÏÓv• »€ý'¶Š—µ•Œ‚–U‹µŽñ–QyW0$¶KLa^(OTfTž”1}ŽU9޽‘HtvH¢e„pYn­CM;eEM!_@DÙ p(Ú/MÏéK‰î¬ ½Ñç“Ý–‚"Üí€Ò£\@@ù”L$…ÝüŽð= À÷€ß#|ð= À÷€ß#|ð= À÷‚I- ²§@™Eð= À÷€ß#|ð= À÷€ß#|ð= À÷€ß#|Ï×Í›7ÛŠ+ø–£,]ºÔ²²²ØGûiŠ.;;Û¾ÿþ{v@Ù€ý"è‡1qâDûüóÏÝ߇~¸rÊ)6yòd»ûî»­U«VvË-·¸ù‰–µ~ýz{÷ÝwmÞ¼y–––fmÚ´±3Î8êV­º_Þÿ³Ï>kvÝu×å™?uêT?~¼þùîs‡SO=Õ>þøckذaÂ}ôä“OÚ† öZWËT©R¥À×X´h‘½ùæ›n?6nÜØlÍ›7/Ó¿1}G«W¯Ž<îܹ³Û—Ñûœÿþ÷¿.­S§NÖ³gOûðÃÝßE¡€ô¤I“löìٮ¥óöÙgŸmÕ«Wg§e¸l6Ì.ºè"«P¡Â~{ïo¿ý¶}ôÑvÐA¹Ço½õ–»ŽÕ{—)S¦X0´îÝ»óEÃ÷fΜiŸ~ú©…B!WT6Ö®]ëê¦^=±G®N-™eÆŽkÛ·owuD E¤/D_ЦM›¬OŸ>nÞèÑ£í²Ë.³¡C‡¸l´üÑ.¿ür;á„Ü´{÷nûòË/ÝoùàƒlÕªU®2ݬY³<{]ÄwÜqʼn–hµhÑÂêÖ­kÓ¦Ms þHjjjÛܸq£]xá…nuÔQ.ˆ´uëÖ2ÿÓw¤Â¯}#õë×çÈE¤ó„¼ÿþûîü¦JQJJŠeffîÓvuQ¥à»Îm Ø+pMð(ûe[•)UÄö§ZµjÙ‚ \D “ÊV0Ç €èšöØcåK†ïíØ±Ã5&\qÅ®üªNzÈ!‡Xzzº h¨¾ªúÍÛµkg+Vtå3仌¨¡|É’%û-± Ü@*W®ì*¤ÊÖ¨V­šýôÓO6wî\פÖù$\6–2".¸à»öÚk#ó¢³D´]eNìÚµË}¹]»vucKtཾ:HªjÔ¨Q.ЫW¯H–E,/2~Í5׸Ǻ€Ó6¼À‡N$Š8{ï… ÚâÅ‹­oß¾6cÆ ûì³ÏÜKÁýÈ zÝüöÑÉ'Ÿìþ÷NVçœsŽû_ÛÔ{ÔÉA'´ã?~¯Ï¡íê=^rÉ%îqô2Z_A—xë¿÷Þ{nŽ9ÒµØé3*cGÑwa¼L¢ÏVÐöµµ}-§íÕ®];ßíÅÒöÔI¤(ß”G^£‚Ž÷:¶G72hž‚ÎË—/wŸ{î¹.ˆ¡cu\íÖ­››¢©5iÖ¬YvÓM7¹s½D«çÌ™ãÎߢ¬D÷t|çw¬N:öí·ßÚUW]å.Ìâ-÷Úk¯¹åbß×ðáÃ]åL×:Ïyä‘¶mÛ6×z¬÷¤‹Â3Ï<Ó4hÀÊvÊv"‰Êt¼²ªk~]K«¡N•2e’èºL•:®¹UéÔè¥ ˆÊ¶>‡®Ë½†Êxå^¯«ÆÕ&Mš¸e” £:„²Du°–-[F‚ªÓ(¨z¯×¨ úŽÊ¸Îq*WO=õ”ë- çã-#*/ãÆse¦$»Äùr ¬­RË6%»ž‚J±KDhµ*©ò¬ %eŒè`© ‚ç™gžq?¹óÎ;]&E£FìŽ;îˆt¿‰¥@†‚ ž1cÆØI'_B•k]LytPU°A½†¶¯ˆ›.à’yÝ¢ì#mó£>r‘ñW^yÅy䑽–ÑÉcÙ²eîDV˜õï¿ÿ~7é„õõ×_»ïàñÇw'4˜žxâ‰<Û‰÷Ù Úþ]wÝe5kÖtïOß]AÛ+Œ¢~€¼Ôòt衇ºãtëÖ­í›o¾±-[¶¸€¸2;®¼òJûâ‹/\&g4¥Ýêâ?¢i}W/¾øb×аsçNw®ÑE™.êêÕ«g·Ýv[äüo9µZž/QöæÕW_íÎ[z¢ó³*=jLÑûÕöÊvÑÊv<ù•éxeUó”Í¡¬çZ5ò?D׿þú«kÔu¼®A5ýòË/n¾Ê±®ñ•ûƒ>ؾûî;÷·2h!ø²Hå+:Q@kž(³Ru_ w €J•*¹çO;í´H2Þ2ÞùUGïqI úñKSK½ZtŽ8âן,ÜØð¢]ªÄ*VŒPÿ¥Ûo¿=²¼*¶ZFRrÞyç¹°*ÿªì*züÕW_¹£‚ f¼þúë‘Tºh:P+ÝN˜öíÛ»Šü½÷ÞëúŠúH);Eã„(B®mª’ÿóÏ?»€Œ²6¼ñ9’yÝÂî#üÕuH‘vý¸õcÖzÊôð2)D'‡‡~ؽWEÉo¾ùf-,h}°tQ¥Ž;Úé§Ÿî Ž¶§Ï¥ÏšßgkÚ´iÛ×IR…Nû²K—.®…nݺuIG:Áz-ú|*èÑ¥¢|€¼ÔZäe?ªò c©×:ŽòÉ'n¾ÎƒjU%Æ£cl¢îªZ_Ù„^pD¿½¬<¯r~ËÅ{_Þ…¢2OTÙQOÔr¦k]Cè˜ŸÌøYe;~Ù.l™Ž÷:Ú®&ïX¡Ì½*Eáㇶ©¬]LtMªkJCÔ€æuƒNTî•}üŸÿüÇú÷ïïHu= ”E±ÝÍT^¼y ª<(›Cㄨ쩜DÿÞã-£2«à¢ê¼^¢R@Ñ(¥«F?VÊêˆ#\e^Hú[é{úBÕE•{eo(Ã@C \ª4! Š© ¹ÒãT­£k" ¤( DvPµö¨Â®ŸÒ5.‰2 •VšÆ(ÑÁVƒ¥^zé¥îGU˜×M†¶© ƒÙSj“Þ§öAtD”þ§Ÿ‚B7Þx£ýõ¯u'‚Ö÷Ru2Ór^‹™{'—DŸ-™÷ç¸tbÔrÚfaöÕÓO?° ŒJâ{¿Sfb,o@S5ˆþͪб^AmUnbǬŠw1çU†ôz^e¨ åb©¢¤ÌPûÛ¶më®D]bÕ:¬ ¸²BÕµ–Á²AÙ.ZÙN¶‚–_YU@dúôéö /¸ë{5lÆ£åtý¦Šš®%U‘Sƒœ8½ ^¢r¯ëU]çéÚS šjÌÊ"•IO=j4V@Cô¿÷·2<”ñ;Èi¼e”¯íê±¶§,) ] ú/äE‹Õ¡C‡î ¦ÉKsõ.d” ƒ³ú9‰*ÓÊ,Pö¦Aƒ¹ùjñQàD“d({@LJá“ãÌýP¼eÝ Ú=÷ÜcC† ±¿ýío®›‡2Q óºÉ„èà(€¨UKûDr ùÍo~Sàú±ýDãI´OuR+Ìö Ú^¡ Òú {ôÑG#R/Êì¥Û)ø¡l¥ô¨ ‰è ¨A]V÷QŠ…Ñ /J‹Óv”›1áÑívU!×-W5¸R,u¹Pe(‚-Šž©¥I?TÔ«l‹Â¾n2´M3”¢¸²´¿bïN£“‹"ë ˜è௣“H²ë'ó>â}¶¢n¿¸öÕú «W¯¾_>ǾOöõuŠãófffÚØ±cíCÉ3_A—ºuëæ»®ÞÓOkmÛ¶u˨Ü·¾~¯7Ýt“ûÛ›§ç­K¤~þùg«_¿¾]|ñÅîqŸ>}";ú7Þ°sÏ=×í|]h >ÜÎ:ë, ƒ6räHëÑ£‡}ðÁîñoû[w-ûᇺ(UÏž=­sçÎn¾èÇwœ½þúëÖ©S'Óvô¿žÓëœyæ™¶hÑ"åjܸ±ýæ7¿±ÔÔT·þܹsÝj×®]n.]º$Ün´Ï?ÿÜ*T¨`GydÜ÷öÍ7߸ϡV›6m¬ÿþ”^@™¢ÖÎ/¾øÂçºvíêÎyòÕW_ÙŒ3¬jÕª®P»ví„ó•¶­ |ýýý÷ß» }µ^ª±DÁŒcŽ9Æm;ÚöíÛí»ï¾³ë®».rP¯^½Èóº@Ó6–/_îÎójlPv¦2Oc·«××µ†Ö×yZçe]_èÂQóëԩ㺸êu´¼>ƒ.=öØÈµF~ÛÕú±ï(-¼ë]ý>Unt}]P9JTî“)ŸñÊ»ÊÝ”)SÜój<餓ìÝwßu×ÌÊ×ké=¨>••eÏ=÷œ]yå•6mÚ´½Ž'zíwÞyÇý¯z…ʲêÑ [^Ï’=©[KìçÓ¾ýá‡\ÝCûñ°ÃsïÅ£÷0aÂkذ¡ëróꫯºã²:½eé]}õÕ{½·‚öÊ>e&µhÑÂe‰ ,°#Ž8Â5E¿]ýîô[Ù±c‡ hÜpà î\§ÌÎè²/•*UŠ»®ê·š/ÆiÙ²¥+Ø DÓࡇŠ´0i'ë±×šóÀØ_þò«Y³¦;h\sÍ5‘uïºë.›>}º;PüápKÑú÷Üs+ôJéñ¶£I0Ð.½ôR{òÉ'­yóæî ñÔSOE¶« …~LZöÚk¯u‘DÛõ耬÷©í%zoºxÒçÔ…–&ÊenNš4ɆêZ¦Nj›6mræ_~ù¥›§4ZÍ“DóuU&¨* 7ß|³«dœ|òÉvÅW¸Öi½F¬uëÖ¹ó²WÙˆ¥‹;¥êªruðÁÛÌ™3ÝüxÛÕë«[®*Z¾I“&®áÛ¯ @­£ į¿þÚe°^pÁ®ââÉo»ñÞPÄ+G‰Ê}²å3¶¼ë±º}蘠 †Z²ÕH¨@Ä’%K"•;UàÕ¹bÅ WÓkÆ;žüôÓO®»ÈUW]åž‹×u¤0å5Ñq+ÙÏ«nñ>Ÿæ3Ɔ b×_½kàõ‚NÚÇjh8p õë×ÏULuÌñº´$zÿ^†hÉìøã|¬s§G»ØßƒÊúÀPÒïHAý&UÖ_|ñE{íµ×"uÝDë–_d€è ÷÷¿ÿÝ”Z£”-/³"?*Ü:€(Ò|Úi§ÙñÇï!úÂ`Pú™Š+Š«ƒ‰‚'ƒ rØí¨û&І~òÉ'î}éà¥/ߣ¾t½†"¼:8ÆÛ®¨Ÿž>׿ÿýo·=¼ã½7=¯×:á„\@€²D :Ÿjì+ïܺzõjwž‹¾PRZ½žûõ×_ã嶪4úbNç[ý¯ ³XzØÖªhjÕöέ^G~ÛÕ¶øÖ­[Ûøñã#Ûñº©j; ‚轪²³mÛ¶ßo¢÷”ñ~¿‰Ê}tc`Aå3º¼k{Êòð‚ÿBeI×ú zè¡®¡PeNÙÚëׯw Œ‰Ž'jWÀBeXÙÙ^‹xle1Ùòšßq+™Ï›è󩂪ízaZ_u ½5ÆöêÕ+a°¢ ãc´döʾØß¤ÊXôúÈõ+RØ´¥ :Xx_œ‚':8逨/G)e'žx¢=þøãî€åñ¾àhÞ…ŽH:¨y©jz}0Qšž"¶ê®£qtßâØíê=ÝqÇ.°¢~WRÐ{ ,R£.œt¾Ó¤† [5?º°—bŸh¾wñïÑy]éï:/+}7žZµj¹V×Dc’ÄVFt!˜ßv£/£/c·ýØ[&¿íÆ{@Yï÷›¨Üµ|FC}lÑ5¾º~(_•x&” ¢€‚':žèµ•¡–mu•‰½cKaËk~Ç­d>o¢Ï§ I¼±”!®ŒquŠ'™ãcì{ËoÀØŠ®¿*@ïe„èï·ß~ÛN9唄ãÒ(ȨߣºG©¬)Ó*Ùu €’ïCé¤J‹tEâ Œýå*eG }éj¡QtS“‚)ʲÈï`ÛÇ1ue6l˜=øàƒöÒK/íÕÇ1v»: )ÅL]\™õ~ù½7Ê"µyëj‘U…EÙº€Z¹r¥»ÀUX$ÑüXºðRG)è:ÏÇãµNEw)(¸ßvõž¼Š27½–¯d$ó~¿—û¢–O5lê¸àÝÂU ‡M›6u×éªp)õ^Yº–VUm;ÑñDƒ·jL¢l ïE-¯É·òû¼‰>ŸöŸÞ‹×°ê-¯}©qU7QëWgñ^¿°ï¿ ýPÐB]¸ô;Ówî•ýFTïT#|t R¿7¯‹™º–y¿?ýÎô{Õï>Ѻ%Á]`4Ò¬ ¸"S hPTdv¥œéKS!×ïWýrµ¬ °¢ JS E}ôtÏkuiÑ—¨¬‹ØAŠ KÛ×MQVõ£R_ÀÃ?<ßu”ý¡1?î¾ûn1ÓçHôÞ¼‰½õ¥ÕÓO?ù[™‘JÓÖhó:ŸéB^ó”¶­s³Z•Þí¥x'šK]PÔUƒþéš@-˜ñ¨EJƒšÿóŸÿt×z}Õ•H~ÛÕûWã…Z»tѧÁ“•ìûü@ãðÅ+÷±c$[><Ðö4€§êj‰V÷pQ€E ŠÞõ¼žWc©¦DÇ ”=¡eÕhê­QÔòšìq+ÑçMôù”ЦjhÕ~T€G·õ¨›½ÆdP%V¯¯õu[Ó¾ÿ‚öüA î$W›Šz)è·¡ñ68TOß¾}]àR·¾½õÖ[]ö’ÆœÑ6tT}UÏ'Z×üû@ rÒ$4¥FMi¹“Ž>Â…n~iþ’ØP@F 4(© ê÷¦ûX+bª»«h€ ÝAEe` <ئ¬/Dƒé±([CÛP”T™#궢ѢµŽÖ¾_wô×wÞé~xê“è½½òÊ+.³Dý yäJ/ LR RlH­PÊ”ŒMÿN4?š GÀ£/-›Ì€âñ¶«ŠÊc=æÆüÒ¶T1)¬Â¼_ÀÏ徨峨e(ÞñDÛÑüDï­(¯•Ìq+¿Ï›è55_Ç ‚ö£–Ñ Eyÿíø‡¾gý>’9i`aol­£ò\7æÿ®[ëp’;eäNYQSÈQ懂Š6Åv%ITP`и! ,hx]W´M}™ÅybibÓûŠ"Þ{SK“h%qOeÊ;U,40ùïÿ{vP2ß4-¨ÂŸh07âÛ!Eµ¢oT\Š#ø‘è½q \JŽ®7¼ÛK€R7(Ï^ý‘F K×dGP ù¦ (Ÿ’éÃ@À÷€ß#|ð= À÷€ß#|ð= À÷‚I- ²§@™Eð= À÷€ß#|ð= À÷€ß#|ð= À÷€ß#|H) …lÉ’%|6@¹µ{÷n÷vv¶Í™3‡`¿[³fýúë¯yŽAü!è—òì³ÏZÿþý­yóæ‘yO>ù¤ 4ÈZ¶lYbïiõêÕ‘Ç;w¶SO=µP} °~øÁ²²²ìÒK/µG}ÔêÔ©sÀ÷¥G þóŸmèС֢E‹"î’úl€ÒaذaÖ¸qc;ùä“#ó6nÜh/¿ü²uëÖͺwïn;vì°Ç{Ìî¸ãËÌÌ´1cÆX‡Øy@)/Û]t‘U¨PÁ=þñÇí—_~q×}ú}èâ2dˆÕªU+©u,X`;wî´5jDŽA@y2sæLûôÓO]£uÏž=í裶µk×ÚøñãmÆ n™=z¸z^´DË$³.BúàƒìðÃÏSi9r¤uéÒ¥Ä zOúÁx‚úõëy[©©©î"±Zµj%²/=S§NµÑ£G[ÕªUí¶Ûn+–ÏûÙþñعçžkÍš5ãè>¥Êżyó\@<==ÝÍ›={¶;'x•–J•*Ù-·ÜÂÎÊUpTiòìڵ˶nÝZ"ïãÚk¯µŠ+F®7 ‹cÊ#ƒ'MšdW\q…¥¤¤¸`â!‡âÎÕ \¨Ž¦2­dƒvíÚ¹2¦2.“ߺ@ö“¹sçÚäÉ“ÝAX;¿k×®nþ{ï½g½zõrÁ’`0hgžy¦U®\9ßçÞÿ}×2åUì.\h‹/¶¾}ûîõºÇ¼uÔQyæi» h»Ê¨8ãŒ3¬víÚ‘ ÂwÞyǶoß¾W¤\?,eK´+VبQ£Üß TÈ\P,ûQ¯wÍ5רK/½äN‰N&ñ>w2ŸmÆŒî5TÚ¶m{À[ †2:Ú´ic?ýô“uêÔ)r®Ö±ß“‘‘á.¼®»îº<ë.[¶Ìµ$þù6bÄWÑÑù]çÅ#<’ ”bÇ̪߫¬¿öÚkîÚZ]¤u¨ënUšâÍ×µxŸ>}¬I“ÿgï>२îÿÿŸ‹XQ@Š‚½EņX¢ ÑDÔˆbÁšo{Œ¦ùÕÿßÄ–öýFÅúµÆKlØ ¨EQP°ƒA‘²?ÞÎ:»wfvf˽{¯§îƒ½»³³ufμçsÎl`çyã7š<ÐtèСpGgiû]—ð:EóSÅñ¬Y³ì›ºµk×μð 楗^²äô·¦ ¯ƒâ«éõzTÁ¦;U¾hÿA;Œ@K¤}[¸ýH:`¡ýg-¢eQûÚ‡Óoÿÿø‡Ý7ÔýQÓÄÝÞV˜1@´S½Új«ÙओN²åxrÁØ‹JâÔ·øÄOÌ?&î>í¤ßu×]ùé´ÒU.-Íó¼óÎ3íÛ··8½GáÂ+¯¼bW®^xaÁã.¾øbóå—_&Îcîܹ¶A¸þúëÛ²½Ë/¿ÜtêÔ©*Ÿ¡Ò@…H [6ÜpC»¡È"Í{ûꫯl ££9A@ÓPè½Å[˜I“&Ù¿gÏžm·Ó®l^Ô8ÒvÍчv0´³¡ÊAí©‹åÉ'ŸlKîŸ~úi>X ( 9r¤½¸e܉Zfµ¬¿ûî»6 U›VíÌçŸ>ööž={š‰'ÚÇΙ3Ç®ŠÃðëпáçÙl³ÍìüzõêeÆo™Ñ£GÛ¶þ°aÃòííð:(MíWu8p m~ %Óo>Üë@×Ýr aTrçwš½÷ÞÛVIéþAƒå÷Ý¢¦Iº½©yU2|øp[¦ã(©uÎ9çœüõ_|Ѽúê«v夕™VÀêo¬/Ni²Âõ1Ž»oðàÁæüóÏ·i°vÖµò¾å–[bwú]ò¬Çh>š¯V®J‡5/uÓ™7ož­ÜИ£F2mÚ´±GÆt=JÜ<ì(°ÑóÈ 7ÜPµ.@?þ¸}ýȵñR¨¤çOó¾õY§yoªQ•Í>ûìczôèÁ<¦®–ªhTe º¿hÛ«#IqtÄH §Ýwßݬ»îºù†šÂuí…ûûh>ªÌP{OTí¥*àðÎUÔ2«v£Q;ñ±Ç‹½½_¿~æê«¯¶cÖ©í«05Šºc+( ïh=âÚ˜ MTYòá‡Úçp;p X¢ŽNG=Vûºˆ‚]µ@KVüÛ×oÚݦåIàUÁ¥qB´§å&¼ ÆMw;H4ø¦Â G :*‘ÕØúÀÕ]Åuq+i·RëÒ¥‹­¨pƒ¬Eݧ•­~j¬©ï²ª-¢ÆË+¯¼²QW·BvóÕ¯ €æÞ`Ä 2š4 (§Q«ßzë-ûÚt[qˆ›HN¢ôíÛ7Õç«ÀC­ßþö·v£¥Oÿºò¨¤÷­(Ë{øOÛÒ>}úØ€\•”:‚ª±¦âè(«v€täw«­¶23f̰Û&m—Õu&鱚NxÇFÈÔ©Síõ¤e6¼ÓÞኺ]ËÔæU›^]ç:è Èס*â,× S€.Ô¶Öë.õX"ê:sýõ×Û#Úûî»/?´hÚ·SU¦£ƒì .Dÿºë: ¡mwñ`¦qÓ¤ylS𪠌Ò]­°ÜÅ7nœ¹êª«ÌÿøG[©IDGž%Ôn ¤ûTu¡Á@Ÿ|òÉ‚ìS'O ³'­ Ã§ÚŠZñ–š‡Òë¡C‡šßüæ7¶Ÿ¢úc…ßh€S ¢KÚê•,©jFgkÑ‘7•ø©Ñ)¥d}o€ƒŽ©"P"7jmÏ´ýÑöþå—_¶ýðµÓNNø3€ú”´ÌªzÂzVgÑƤÛÕžU%‰îêþ’EÇŽm%¶kŸê d–ý6Wg™9âˆ#8£!Z<-£ Õ›BË„¬«**¼_¬Ûufë¡PRËfñ¾sxš¸Û›Ã 1ªVbJ‰U.« •Ül»í¶ùûÕ—P+b¥Òº„O±wŸº˜¨ Œ*J”øVƒŽ‚©OÏ(MÖ©‡ÊñÐCÙ15T•uÖU_d­ÀÐ<û÷ïoûð†êöÛo·c‚T󽩸ŽòüçJÛãJØ£¨æµ×^kFè²RÚéH{ŠKÍC\7ß|sä2«€Sãp¨ºXáˆÂ„¤Û5/µOuzÎ8ÿûßó•:ˆUµ,ÚGÐ:HÕäj;g9ë¢ötPò¯ý«ý[;u/î¹€z§ß®FUô»í³ÆÑtë~íSëv…%‡GÃ.hÈ 0š&î±Í!–­tiº´Y~ÑHdm—,Y2µÞ¿(ªzw»ÐÎúþð;r­ª"´rR«®, 4¾‡¾ÜC9Ä–ß~üñÇæ¿ø…9øàƒíã“î ”¤ª ‚÷š´ÃïV¼*ϻ袋ì|5 “뚢·VàJ¯ï¹ç{¾q¥ÛoC»ÁFË›‡~TC%EJ¤•¶qÆöýgù,‹_·Æ>ùå/iCG!Uƒ¨{‘kÀ&½ï´ïí¦›n² ‘J¢þò—¿°ÄÒ‘'MŠ*MÐ2–Yµ§¯¸â sî¹çÚ£ÎÛÝ|Ô®T×9 ôÐC›õµ+Q¥¹Æ=ÑÙct@R§êÕAWM+M²Bí]ÆjG ²’­â€#î>¥Ã*ïÑépuÎñjÓs•~ˆJŠÜXú×uá©iß›’A€b§ÅŽ-—övU&뮺Ã57K¤#åËhÚ´i¶zœð¨_+TH­8ÕÝ"jð¤¸û4ö‡FÆ=ýôÓû6ŽëòË/·ãm(lPÿ*u‰Q >¢ ð]`–"Þ#Þ#Þ#Þ#Þ#Þ#Þ#ÞkH3Ñ¢E‹ø¤@‹Eðððððððððððð¨ K–,1¯½öš×¯9<}K|¿@µ-\¸°¬û  ¾¼‘éÓ§›»îºË|þùçfýõ×7téÚµkbdøðáæÒK/5묳Næû@yn¾ùfóÕW_ܶÅ[˜wÞÙ<òÈ#öz9ž}öYóú믛\.gÖ[o=ó“ŸüÄA`>ûì3Ó¡C‡š¼—E‹ezÍáé³>h â–Ã(ß~û­ùŸÿùsÖYg•¼¯–Ë1€B¯¼òŠyî¹çìum›wØa3{ölóÔSOÙýméÛ·¯Ùj«­-·Ï<óŒ™1c†ý{÷Ýw7}úôIõX ¾øâ sôÑG›ã?Þì¸ãŽæí·ß6_ýuâcZµjehÖXcT÷_vÙefÈ!‰¡ (í§?ý©Ý9zàL=Ìæ›on·» Êõþûï›·ÞzËœp ¦M›6fΜ9ù®ûî»ÏÔ¨•¸;`E“´FYyå•Í/~ñ‹T÷Õz9ð}ˆ1jÔ(»o­móu×]gz÷îmVZi%\téÒÅîk_}õÕf“M6±Ëª¶éZÖõ¯î0`€=Ð1bÄ;MÒc @Ê ­æaÆٿ÷Øcü}ÿþ÷¿Í.»ìb|ðAÓÐÐ`9ä³êª«Úûô-^¼Ø^W#¬ÿþæöÛo7[n¹¥MºÜýãÇ·×´ñÆ›ýöÛÏÞ6zôh{[¿~ýì”Öºuë|p Æ•¶ÏŽþVUĬY³ìý:ø ƒ:¢ú¨=â¥×àÚ¥^s1U²ê ŽÞ‹ŠzÌüùóÍ¿þõ/û¯Ú%š·Ú<@=Š[Õ•EËÓºë®[°œhºë¯¿Þœ|òÉvšð²yÌ1ǘþóŸö¾âåXÁ)ËPï¼óŽÙh£Ìj«­fÿVP1mÚ4³í¶Ûæ‹VYe»½Öò§í–‚ŽŸÿüçövÔvíÚÙi´lëqQm^ŒÒ½{wÛPR Qì /4]t‘iß¾½™P’–èå$‹ðrÌrÔŽª0ÕkB´¬©+‹º·i[^¾uf 3µL»}m÷£#úÇ=¶9x1ªú©Q¡dJG\”6«ᨡþÖÊQ ›â..i(4qã…(ÉVùŽ*êw¨î7 6´ÍÝm·ÝìHôÚ«ä]]PÝŽ•¨öä“OÚ£Jj€izwÀCÛ} ´¨Óø·tðCƒ*ê(²ëÆË¢cÇŽv°SõÒskàV5ì¢^sÜ1Ô%@ã&hGu·ÑnQ·^5¦vŽèh`w ^Å-‡úýëßâå$‹ðr¬ù±\µ¡åWÛE l*ê%¡m’×XXÚçV—M-“ÚÖÙžnºé&sÆgØq»tj@cGcøh™zls‚e[b]Z‡.m–_Ô²h»t%3µž¿$ ¦AI5@‹V‚:®?ÕQ¸®ñ?Þxã ûeü×ý—ý[tßC=d.áëNø¶[n¹ÅV|¨¤Oi³º¾èv“üÌ3Ï´)¨-aa:âÎBQL·«ÿqåRRÉ)mu´Ìý"íksgŸ+î ÛôúÒÌhnQË¡þþÛßþfÎ:ë¬Øå$ðrÌrÔ––/m—ÂË«þÖ6­x;« ¸^¥[MK×½´Ù]~Y¸ü²8tÉy€¸•­Ò$%Vá®, 146ˆR+Ý^É IJ®´ÒÕ<´ÒU‚­Ð¥’Æà3ýë_ÍÙgŸÍ‡ fÒ ¾¼Y…qýˆŠ“«r…Ó*…)ÍÕo h)ÔnÖ™a ¹yÎ( :–vpSÕ¥¶øÀù 4;oºÀ€Sš.0­ø˜€ï@€÷@€÷@€÷@€÷@€÷@€÷@€÷@€÷RMÔÐÀ'Z,*@€÷@€÷@€÷@€÷@€÷@€÷@€÷@€÷@€÷@€÷@€÷@€÷@@]Y²d‰™4iR]¼–O?ýÔ|ôÑG|)@|÷Ýw|šLƒ/odĈæ“O>1­Zµ2ë®»®ùáh6Úh£Øé/^lŽ;î8sÅW˜uÖY‡_MèÛo¿5<òˆyûí·M.—3ݺu3ûï¿¿i×®Y´h‘y衇̖[nûø»ï¾Ûì´ÓN¦K—.öï»îºËtîÜÙìºë®öïçŸÞ444˜wÞ¹¢×9mÚ4ûZ;uêÄ—¤pÍ5טo¾ùÆ´nÝÚ¬·Þzf·Ýv3믿~ä´šîoû›ùÕ¯~ÅÔ‘ &˜gžyÆnŸµ]Õöö³Ï>3O<ñ„ùüóÏí4»ì²‹Ùzë­#?fÌóî»ïš#<²`»ÿØc™™3gš•VZÉ >¼YÞ›7 >ø Y}õÕMïÞ½Íìٳ͡‡jî¿ÿþØéµR>à€Ìk¬Á/€fØn«túé§›³Ï>Û wÞygêǯµÖZ6œ… š>øÀ¼ùæ›ùû¬è€€¦¥£O<Ñüñ¦OŸ>æ–[n1sæÌ‰œv•UV±ëõCÁä³Ï>kN8ásòÉ'›±cÇš¯¾úÊn³zœrÊ)樣Ž2#GŽ´¡†((qþõ¯Ù°äË/¿,˜ï=÷ÜcÖ^{msê©§6[ø! >}YúBvÜqG{}Ï=÷´_˜«:˜ÿûßö¶[o½ÕlµÕVvZ}QªÑQ¤½÷ÞÛ6¦dÊ”)æã?6ýúõ³e¸<ð€™1c†M°·Ùf– *0wî\^œyæ™¶JCT©1qâD3}út[É IfÍše¯~øá¶:ÄéÑ£‡m Éûï¿o«>‚,X°ÀÎSÛñ®]»Úû_ýuóÜsÏÙë Z `·ÿ·Ýv›­-~Ž^xÁ¼ôÒKö ‰þv•¢¯½öš5j”mì°Ãö¢ðE=Móꫯš“N:‰ƒ+ÀR+¯¼²­âÒI-ƒn´¼¨ûöÛo7?ûÙÏÌ 7Ü` ”_ÞTÝ}Øa‡Ù6xñr vÞyçÓ½{w[\ *0ÐA…í·ß>¿Öò­‚íOñÅæÿø‡ 3jjZa‰ö»M£uÁGÑìïÏÛ1@\Y¬J`墋.2矾ý’Ö\sM{ÛÅ_l“)5 ”`9W]u•ýâåÜsÏ5/¾ø¢-ÝSyÞèÑ£Y*¨€Žk'Ç…޶µ:j$:µÙf›Ù@¡W¯^füøñÓj¯±9Ô]FÛlº¼÷Þ{övU¨¦°åÑG5Æ ³G­t´êå—_¶í•ç?‡Ž^k[¯#ØzŒ;‚¥ù<ýôÓö¨¶îSy¯îÓ|\µÉYgEøѲª@RŠ—í`iÙ–o¼ñ†½®0SÓªk{Ôr v´L†·eºî–S 9¡}gUlª€@‡îWx©PD´|‡+BäÃ?´Õê¡qã7Úírñ4 U #H¼L4ÀÒh?›o¾yÁt4O>ù¤½®†‘RfÒ¥qãÆ™ /¼ÐüøÇ?¶+_¥Ô |:’«›F’¥·é>Ñ‘%Uyˆ*9¿þúë‚ižh;¯£Ã 24­. Ct›L}5ݪ«®jÿÞtÓMó9¢žC´ 7ÜÐ6äôzzö왟kj/¨´^§Û©“¸~ÐÀŠNÕU *â–µÏ]7¶É“'›-¶Ø¢är úŠƒ -Ãî6Xhß¾½Ýfjœí;k[ªåUÓÅQu¦pì·ß~æ˜cޱÛ[Ug6‡Ÿ¿<•Ú¬¶Új+Ö({íµ—¹à‚ l²¥>N*óÑ`gøEG‚”n¹/N(P>RHq¢ƒ3@Ú´iSr>.ðÐΕÊrÕ0Ó‘)5ÈÔ‹kȹ%ê9t_¸§†æ¯Ûu´Ú½>ýëÆÑ|’~ÀŠLÕ;vÌÿ·¼¨í­¶¶Úã B†j»§Å-wjCËœº«8óæÍ³¡‡è_w]U :"Íí“«L#²Áä šš· ú@ßzë-³ÝvÛ4b¢è(Æ÷PÿD¥Ë…Þ}Q*ÇSé.*»Óx! |ꊪmWíðÌŸ??_‘‘†ú(ë’º¾¸í¹*C´ÓäÆÿÐ Uu¸Smjìwæ˜(ÚQÓ›;b­#Ю±¦Ò{uÓQu‰æáªJDÓ˜>:¸Ø·oßTÓë`¥ÆßѲ¬,–; éiÛªeWcöh[¨}jUCjíèvUtèàƒ4¨ûi-ËÚ6»ASµUIsð®DƒšM:Õv[Ñ,*uMC¡Çã?nWÒîT\ê¬*’I“&ÙAœôåª"DG®@ùÔ_ø¾ûî³;;:@¡£B:ƒ[Tט8 74VH84Ñu…ªíD©=píµ×ÚçÐeß}÷í{¬£ËªÑŒê×ìúAk>{챇½];` T4€#•@cW_}µÝyÒ Ô\ÝÊÒpËžª³“–»¶mÛò!5¢ øãÊ+¯Ì/—Úÿu„»±{t»ÂUtjãsÎ9'6 Ôíýû÷·§ÉÖöYó‹ëQkA°lË­KëÐ¥Íò‹Ö.m—,Y2µ%4¤”*©A£Æ‹þÖ fn€5}‰èTGœœðmZ¡î³Ï>fã76×]w]~¢î1jœ©¯’Æ2dKU $u/©õÚ:b•¦khZmû‹ÍGeún°7µÇr4ÏöYÂÛMm¯Ý²Þ>ª:$MuVÖmqV­ZµêµôŸË/ —_‡.9oZSø¡£FqÝh@óH€4ð1¥ã΃ ZžV|Àw À{ À{ À{ À{ À{ À{ À{ À{ À{ À{ i&Z´hŸh±¨Þ#Þ#Þ#Þ#Þ#Þ#Þ#Þ#Þ#Þ#Þ#Þ#IaæÌ™fÉ’%|´P ¾¼‘k¯½Ö|òÉ'ù¿·Új+sàVeÞƒ6=ô騱#¿ªàúë¯7ß|óiݺµYwÝuÍ®»îj:uêTóç:t¨Yi¥•ø–m1^yåóÜsÏÙë;ï¼³Ùa‡ îâ‰'ìrþ£ý¨àöo¿ýÖ<óÌ3fÆŒöïÝwßÝôéÓ'ÿرcÍ»ï¾kŽ8âˆf{oÞ (vÙeÓ­[7û÷zë­Ç/€:õù矛Ÿýìg&3uêTsûí·›cŽ9ƬµÖZ5}N*:–mñbŒ5Êüñ¦U«Væºë®3½{÷6íÚµ³÷OŸ>Ý«­¶Zþ1¹\Î.óú·K—.fÀ€櫯¾2#FŒ0›l²‰Ï½÷ÞkCJÝÞœ|ú²ú÷ïß(ÒÊPሾ$%Ð[o½µ½ýÍ7ß´_ì‚ lªµÝvÛÙÛxà;­¬·ÜrK{_šù?ÞŒ=Ú¬¼òʦ_¿~öGuø^Û¶mÍæ›onfÏžm·ËîhÒ]wÝe¾øâ óÝwß™¾}ûší·ßÞ,\¸ÐÜqÇfuÖ1³fͲ­!C†˜5ÖX#rú4Þxã óüóÏÛë]»v5û¹çž{ì6~ýõ×7cÆŒ±Ïu衇šÅ‹ÛŠÓc=ÖÜÿýfíµ×6“&M2Ç7ï½÷žVí=÷~ðûZuô«sçÎvþ7ß|³ÙÿýíëX¶Y¶zôÎ;ï˜6Ú(p(À˜6mšÙvÛmírøä“OÚÂ-#¢åSAÇÏþs³Ê*«Øå^˜(øÐò­õ– ÚÏnNÞrÞyç™—^zÉ–Þýú׿¶+0yðÁ헪ܩ§žj¹øâ‹Íï~÷;›^­¹æš©æ7yòd{»V¦úRõcˆº DÛpà ÍÇœÿû€0'œp‚ùéOjž}öY{›¶Í:ò¤rZí˜ôìÙÓL˜0!vúRæÎk{ì1[:â‰'Ú£^:x¡˜÷ß?ßœ?¾=`òÁ䀽ýöÛ¶¼ÿ´ÓN³ë9u”[GÌTâûå—_š=zä·ÿsæÌ1_ý5;H`ÙfÙêš~Ï«¯¾zþo‘Z¦äñÇ·á‡ð;Zv´œ*üÓ²¤Pá‡tèС.*µ¼ª¹é¦›ÌÈ‘#íuÿ¡‘ }QJŸ”î*±Õ—vÖYgå§i&NœhWºJµ”àþð‡?l4­0£æ§D[aÊÀóI™úEߢéˆï¢E‹ `Ú6ë_õ3v4®@÷îÝíumç5PyÒôItôW*V]uUû÷¦›njç¡#¼ÚYÚl³Íl#OKÔgY;:®«­^¯ÆsóÑÜÓO?ߙӸd[l±…¹æškì‘ç)S¦äŠ,Û,Û@½Òï¼xÖmªѲ¬åIË£ýââe@ÝÒžzê©fë#ŽW ZiêÃ×Eý õÅèÃ×ÊiŸ}ö1ÿûßÍG}d§½ï¾ûl"³}þv„½øâ‹6µ½ñÆí 5\ "J ã~ Qó“ßüæ7¶Ìî’K.±×/½ôÒÈÛ@!õ±×¶Y}ñEåèÚQ¼vLJÉ:½£Ò\Uuªr›6mì•ëkH6•ïî½÷Þ¶K¬FµWå§vz4}˜nÓ nê«R_í4¹¯m¶ÙÆyÖc)‘Ë6Ë6Pï *àÐò ß»–—Ã;Ì.W®šKᇆÐx˜ 5>¦ö“ÕÝL=$T, °°5øü婸`;èhñY`”:_xá…6ñUÉŽº½h¨•—nëØ±£M„T¨ZC}u–Ýî„o‹šŸ*FÔÍE÷«êäÌ3Ï´iqñmJÂ@i:È #«ÅeñÕš¾Z-¦.¯nÀ7çÿ÷m#jpu€e›e¨G 9´ ©Šª (ìÆÜiN+­´R/-®Ë/ —_‡.9oRVèKÑ -Žú6V[îü´rU'’ëä¨ÛÀŠáÓO?µU£ª =äCø@–m5”&iXQ>Œð©|œrèù© ¤x—¨ÛÀŠaòäÉöˆN€e@ó[a*@€ŸÒT€´âc¾#Þ#Þ#Þ#Þ#Þ#Þ#Þ#Þ#ÞkH5QCŸh±¨Þ#Þ#Þ#Þ#Þ#Þ#Þ#Þ#Þ#Þ#Þ#Þ#)ÓŒ3ÌâÅ‹ù ¨’%K–˜I“&•ýøO?ýÔ|ôÑG| Rƒ/odĈæ“O>1A˜5×\Óì¶Ûnf›m¶©ÙóýèG?2#GŽ4:uâW@F×\sùæ›oÌÊ+¯lºtéböÚk/» 衇̖[nYÖ<§M›f¾ýö[¶Í@3/ÛG}´iÛ¶­ýû7Þ0ï½÷ž0`ÐBL˜0Á<óÌ3&—Ë™]wÝÕì´ÓNæ³Ï>3O<ñ„ùüóÏí4»ì²‹Ùzë­cçñØc™ùóç›ÁƒÛ¿ÇgçÛªU+³ûî»›M7Ý´YÞ›7 >ø Y}õÕÍ[la wÜqæÅ_¬Úü/¹äóþûï³4Pj@xâ‰æ¨£Ž²¡ÅSO=Ňx²lk§ÉY°`ùúë¯ù`€B'ž}öYs '˜“O>ÙŒ;Ö|õÕWf¥•V²¡Ç)§œb·Ý*Ðö[Â˼¼ûî»vßÙÝÿá‡Ú ÏáÇ›¡C‡Úmþ_|Ñ,ï¯Á§/K_ÈŽ;îh¯üñÇæ…^°ÿûßÿ6{î¹§¹õÖ[ÍV[me§SHòÀØ®,áj‘7ß|Ó<÷Üsve­é¶ß~{óŸÿüÇÎCG©6Ùd“|‚­LGª4¯ÿøÇfíµ×¶·ÇÍZe•UìQ —^zÉþ­*Ô˜5k–½~øá‡›víÚ™×_ÝnŸ¥[·nv[¬£HÚÖë±k¬±†nuÖ±Ó¼öÚkfÔ¨Qv›¼Ã;ØË¼yóÌ]wÝeH©±ö“ŸüÄtìØ‘/hBQ˲º•ßvÛmvù9s¦YuÕUÍ~ðƒüŽ×{ìa¶ÝvÛØe@õ¼óÎ;¦{÷@z÷îmÞ~ûm»_¬í¬h¿¸uëÖv[ª ãÿø‡9ýôÓí6]ûÑ?þ¸­qÝZ?øà³ÑF™††{QÑÂ[o½•ßwoJ^Ž2wî\[n§°C.ºè"sþùçÛ/HÝcäÜsϵ"믿¾ùÕ¯~eFmoWбÚj«Ù0㤓N²óÑŠW+Y}Ѻ8—]v™iß¾½]QkZ'nÞà{:ʤƒ /¿ü²=ÀànÛl³ÍìvµW¯^füøñv»þ裚aÆÙ#O:¢¤ÇèH³¶±ª$Ñ}_~ùe¾ðôÓO›ã?ÞÞ7fÌ{ß”)SL‡Ì©§žjo_wÝuù€P™¼Žë×'nYV]GŒÕýMGœÕ}FÁæ1Çc4kyNZ¶Tw_Z]×m¢!'Trçwš½÷ÞÛºРAùýd-ã*Ð}Ž‚mïEË»Æërólj^U€(uR¢¤Jå5ªúï¾ûÎxàfß}÷µ«G}´ÕÑ#¥Î·ß~»M©Î9çœüüb¼úê«öè“’è}öÙÇôèÑ#¿žC_®ú5m·ÝvöÈÒìÙ³cç ¾wÿý÷Ûí¦Žìª±¶×:¢ä¶µ +´ÍÖ†Î;Ûm±¨bDÛgÚpà ó®ž={Ú†•¦×¿O>ù¤½]1Tª#Z:r¬~ÉÚ.뀀êÛ`ƒ L›6mìõE‹åËàã–eUKkÙWEˆ¨DåöjKëºëB·l»œ*WÜEÕ˜î6-—*P•‡ÆóÐ2¬m°*:dêÔ©v™× U’8: 1qâD;F¦×<Ý:‚¤þóŸmÍœ9sÌ™gži®ºê*›"Ëæ›ožŸN_†Ž)µ}Z˽÷ÞkKouÛôéÓm©O•ñˆVØú"uÔ*iÞà{:À £@<òˆéß¿¿½-ªAÕÓŽ.ºîh{¬†—nW8Ò§O{»þUµ‡µ t Bm„#<’Sp;E.ÑNQÒ²µìë f±¸e@õhÓÁ Gùzˆþu×U¢ÊÊð@¨:À Çë>=NûåÚÆ8Сõ–m M±Þzë€T‹º¯üð‡?´å7.Q£ÈQ¨k×®6ès ¢[n¹Å®LUQ’øáE¬˜ãæ ÓÁáÕ68î ƒ$h›® }ÒÙ^tæß¡~Æ®A¥£Ã 4tôYeñꊪRzUcêH²¦Óã5ú¼fª.!šNܲœVܲ  zT-©n. .´!¥Æê8âˆ#ìøY®zKÛSuiÑ< 6µ=U—zFè>ѸN"<¦¶Õ:+”*·TµIR%*“Si\Ü©uT’£n2ꓨ¾†úÒTµáÊò~¨O’ÊzÜ€K 64H)qóv¤€Bꢪ²X7H1mêׯŸ¹öÚkmŸb]ô1VÙíˆ#ld×gYÓkÐDݮƚv¶tv8m×U‚«Ç«j“î©@ÓŠ[–‹+C’µl»S*8Z\yå•öomgµ/ë×ýÚWÖí KTåqà 7Ø¡$Â=„¨G…KQO M«ÛUÚ\]`‚`Yí¨.­C—6Ë/Z›´]²dÉÔzÿ¢4ðŠFŒWªäÎ-üÛßþÖ6†ôj¦ðQiºà‚ leˆ Ĥ1>tZÍCG•”HëÈ”Îe~ÓM7Ù/V%>ùË_ÍS}—uFõWŽš÷!CXš¨€v’Ôp*n4é6msÃÝaÜôêŠÀ\Óê¨1;L@ý-ËY_¼l¨.U€Hx9U74·ì…·¹áê8 ,µìÖrûÛªU«^KÿY°ü²pùeqè’ó&)— ¥Ïá.2:*µÖÑNn@¦rç ª+MÒ°¢HîüÆaQá‡dM™£æ š£ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï€ï5¤™hË.à“€ºÝü“Ëåšìùªõ\qóIšÔ}¥nKº?nºâû“¦×¿q×ÓNþ»øþ¸ùEÝ5MÒsYÁòÛ–,½méú_·Eͳào;iÌwqŸæ~¾ð´ùÛÜu÷Ð f:3\‰ùg½-Å}Adº=í4Yæ›e>Õš¶š©Ås…ï+õY–šoÜßIï#iåÜ—æöâÛÒÜWÎüËù\ªý{)gš4ª5Ÿm|MΠÖmÔ×÷˜ ¬G5zî Ŷ>öµ‘÷-{méfÖÀOª§]»v^ YÓÔH\ æß¤ ¤ÔãJ½¾´ósÛò¨ #ò9\„Â…ÈÏ,¢Aaï Ý9mÚ†H®¨]÷¸RÁF."T11LÊ’ÏH9ï¿Vï»Ò÷”æó,õÙ–¸¤ ;*™.k€’ô˜4!J%H­Â#IABRØP"¼d1ÉÛú¤$ëëK€¬téî6éü~™/ýá•»ÒŠ\®d#(ÿØ %Rø¦® +€¯ÖëØ$ë”æ¬üÈ€4Uø‘6àH 3’*3Ê.î9ÃÛÒ|¨º^pÛòð"W´t {Pâ;ŠLRq iW*11óÏ|4ÅN[= õjdý,²„¥¦©FõFµçhd¦Ú!HµÇÕø¶øöÍ €°Ÿ´b}öå…± í÷Á‡‰ØîßVfR“ u;¬W´ç¢WF¹èÛsE©ÕÊ­üÇÖàÇ•Kÿ…&6ƒ ƸFi©£lA|#wÙç˜~µD¶\ATw£_͆@TP“¤ ?’ž'?mhu™ÿ»xÕYT©‘_#‡§ b6aåTuD=6Hh¬”Þ($o£‚Û4Veu·<&m_¢¦‰»Íý‹h7?&<}ñ<¢¦uÇͧ)ç—ôÙ?.j>q¯±Ô¼ >6)nËÒ¶Jûô©»À(Uq ° heò¹Â”'(±ƒœ‹¬wñì‹¢²%ˆ¤yäJÌ3®qÄ„(ÅÉu_Gº¥Û¼_…géû¨I¸%dHªòHÚù»?ítiŸ¯œjj}N‰U'AÌ㋪; *>¢>Ÿœ)œ¶hÕ϶ìð(*l J´;ÒT&ýçêI;°I;ÎÅ¡A5æ›ôûN ,’›j$#¥Â‡¨!Í}qAG5ç—&¨(ž&êßâù%….¥nÏòÝWã÷[«`&Íï¯ö;s¹FMm_Ûà{¨ø=‰;‘Ñ·qŸM¶0ã‘“ÊÆÉØ77ûÞv­Zª5[\ÅFñ[*58\ò³Nz5^ ZÂn¸íå †‹€¯ŸÐì m.ÅÂr/)ÑHˆÚ)7½¥%q+… Å *îõäR¼þ¸ç¤¸@óìÅ¥n—%)w^2ŽÿQmÕ9 n®VK}3¬Jr%¾¬¬ ÇâKšl.Cƒ5WØÝ^BÿUÿ7jšö§ØóLßkŽïõÒ&-}v–â鳌š$êuäo /`cv„§ ã‘£¤—Úö¦ =â¶EqÛœ a;˜+±PÄT&üIïð£n—ÁRYJUo¥Y~cϘd’» •§Vó‹ú7iiß;š0ð_2î籪Ú"i5AK½.ΓïR“¸JÉ%<¾ÂÕMÐpËÒí$©ËI\à‘fð·:8Õ¡Gù‹az9RíTë§Îg^ýϯ% ~Zë×SI÷—¬gX)ޤýüJí¬”T5ü#‰Ü¹‰:íò®.gi)îþ5€©›&´‰*7Íw­IZPJlòlÜkUªËG{/ÙàIsªÜZùQi÷“jÎ/ê÷Õ¥T{ªÒ×f¬‹RÝSŠ_{\¨Ç¦í’R­ùEMWj¬´·¥é÷=gù~³üVÓtתZ›½Äº<óüsUÛój´ÍÕɺ|æÍúä"þÛn¢=ò+@J%ªjZSãSÆŠ‹ÄÃèQóRÌÛUr˜\ã›9ø2 ý-p¨ÅbÈgΆ³TX’&¤(ž&ë!©7Á÷a„‚Fgm‰ r§£ÚáOSc”˜.Í cÅÛ¸ Ä´¥”¨ª“¨ÇæX [Òò·Œ$-;i—³RÓ”ªÐˆ[N³VuT:¿,§ÑN³ŽcǪʂ Ú}®¡*ˆX=ªÝÒ„ JC¶×„F¢/jÍäßLþðWéyÔͤÿðƒpËÕ¤?sKRã¹n«A™¿p`Å .j½\×ú”·iŸ£ƒŸ–*Ï2ï´ÁIš÷“e°Ô\Ñiáui‰¨äß_pf—â ‹ D%LDEGñmùÇ-)±€Uä«M¢‚ŠðôÕ(±ƒ­ê­µ*±­áXÚ-åìåže%Ëãã–‹¨£þi>¿riMSÐÒÏSNÅKÔ¨IÏ•ôzËùÜ’¾»jT‚4ëö8TáÑœ¯«VU!c-·m×4¿»¦ûÍ \ê@NŠ1-“N{ýþÒ¿×Vü¼«ðm‡/ÆÄŽÇÑÎäL„M»²µa’æhs–ÓݦI–W|ä"Ά–x†™¨à h߯‰jÄçÊ\©V>ÅU¹„|šÑ“ƒømeäëa¥Øb–³¬Ëb9óMš¾’ µÖóKó7;·5ýá6I…G9m>ªB°ÂìÔ¤Ùæ7ÓQCM–ìàÛõm£”­â£z_tš9%U†ûñ¹¯8‹›oßabEEïµÚë—Jæ—µ²¢œ ¤ÁËû#í{HšwÒ)lÃ_p¸ª#òõÚ¶x\Èç3§½ Ou:ÝâS›G­`"V¦n`ÖFýq£N[<ß,§ªMs†´Œ+Åz¨î(÷´œ•)OSa‘å5¥§¡œS熧OsºÔ¬§Æz|Òitãª$ª=¿rNí[ª²£Ô¼ãÞSšñD²þN*]îÊù¦ <*Ü6Åú¤œÞ„aÍ׎CÆÏ-·3¢˜Ÿø#ãI_«ñµªÆÜèŽ\Es©Ý´\ÜÅxw„*{ÅGPÅ玊—*nWmµÌð$×_³{ݹú] Tô V ßbsn|ÓŽï‘4vAq(Rðp,Y^ÿQb„Ôá3¾Tu&zPÓ¨/>D”:[XÜ*) ˆë[n • ÚCŸ-z¹KS½×P-gì,ÏYª%é9ÒÎ/iœ¡¤éÒ Úœö3ŒzÞjG®‚3µÔ[»Â”Xý-öžËð¸&þñ7TüþŠ’ž /üƒYk­µL«V­ÌüùóÍÂ… MëÖ­í¿k®¹¦ùüóÏMûöíÍ’%KÌ·ß~k:tè`,X`VZi%óõ×_›††»oÓ¦YmµÕì4mÛ¶5_~ù¥éÑ£‡™9s¦Ÿ¦[´h‘Ml5­nûæ›oìóºÛ4ž¯cÇŽæÇ?>4ú]”¹Þlγ¢T«+M« U•õAſ堙–׿ÞðTºì·ÔfÐÄŸS¥¯-¨ÓÏ¥ABµç“µ1Ÿ¦ $ËkOt$î…ΰâü|uûY‰‘$( < æçÂS„Rð˜âñE‚ˆ³ÏäRþ ÂÏ5»1ÑU YÂŽ Îè0ä?æ Çóˆ[ª1ßð4¥æ—åL'áù•;VGñcË­êHz-IãD=.n|¬g|I;îHÒkLûÝ•3ÆKÖßF¶æk«š•!AŠU_A¯Aªšµ]Ó¼íã N?Û¢_jÒ éQÕ ¹ä¯Âï.Hµj(ç“jUµ¥yùk×®ýSÅ*«¬bƒ … :f(”X¼x±ýW!… …â‚ ý­û4½nÓeõÕW7|ð½îîS¨òÝwßå§sóÖEá‹æ­ëz-+B%G–…ªÖ VТ>^ßZJƒ&ë™&·—<’Z´Q(èRü¸ :L‰­ŽÈ…B câS×âÒ®¸ ¤Ç¤¹×Ï•x-i‚T/—¿¬ã|”š¦ÒShGÝŸæ¬.•œ ;íü² *½ÂVq”Ú«©Óq<š²-ÃêuÿCŽß+—²«Þê¢é¢bÞ¼y6Àpa„¬¼òÊù*º]Õ 5t» ý«J­üu»ª;bèï¹sçÚi\0âþUÀ¢duÖ±áˆæ¡¤V• úW=·¦Amƒ«hT¹í4éF<ˆ¹^ü£,qZÛÄÖm\£ n~i|ÔĤxî¨ëq­ï¸ÓÓ• 6rI;.)[ûl6ä×þMšMúc "Ú,Åc¤m?4¡†ìï9®vÙ‘/U{(¸PС ¢[·n¶ÛŠ‚U‡¬ºêª¶«Ë¬Y³Ìzë­g»Ã¸ªŽ/¾øÂ#}ô‘íF£ Dá…ºÎè>!z¼…z¬’O>ùÄN§ûtYc5ÌÇœH¬4¥N:ÙפϢVAFUÖšÕ<Õ Û*x¶¡oª#qÍ1ài¹Ó”ÓG=üwÖÛÝõJŽ´–< Lñ)dÃãz„»«Ùb͘]4Ïâq@½Î%…óù~3óÒ¶¸ÑÑèô¹iG Ž w¢Ê[c^½>uEíÕ«—éÒ¥‹Ý¶k[/j¨M0cÆ 3mÚ4»íög®éNm[Îsæ×·eÌ?êqå ¦7¿¨î(QKsZÛ¸®+µš_šn+iº÷d™_Üw_ê´·•ÿKuJúåRÿnšu9nÖÆPÐhµ[O;‘õ¶®-{? Ú£Aôo0Mÿ®¸Ç”Ý.é½H©ÏDa…4z‘ê¢âÆéPõ‡ݧ°CÓ)(qt]·+äPEÇôéÓmÀ¡Çº`DÁƇ~hƒï½÷ž}º_Ó«Û‹ª>4ž_×ËqØá‡™QϲAóÓ#jž{ö9è$¹zÄUæøã†›Ï>û¬v{‡£jßHb‘kÚ uRP[&îºbBãv,ÉE¡Å_¬»¾¤0X(£#*¬ˆØnœÕ%n»¾Ä4.ú±AERW—´gp R¶3búýöîÝÛì¶ûnvû¬í©¶Ûê–ª¶€hÛ­ö€–ôíÛ×Þ7jÔ(3eÊ~ä<µ ‡¢¦ÍZD=.ÍYXJ7’&¬Hº”zÕ˜vŠüðÑ¢™~wYÎÜT%¯¨úz¦!ÛR¶|e]0Øea«G œ>}úØ* êºâVÄjð¨êC눺Â(¼P×ÑuUp(ðPcI!†­Ì5UT(Hq¦Ù³gÛJݯ@Dቦ×|5O;2gΜe!HÒÆ "uêß¿¿™íikK­JuË+ç½d u³~~uò͛ƣ!¢É.4^Pí†pñhQc“Å…pYÆkÂÝÐVÙŸ$—?Í_®èÌ*úO … (T•ñÕW_Ù* Ue(QˆáÆ Q@¡àBa‚º«(¼ÐÅÍCqá‡ý«ÐDÁˆîW—ÝîOÕôODÏ«`E'ªB)¹Q]|1Ë+] n ò·uöY¶JDÏ3hÐ sìqÇ6ší[laö°_þïƒ9ØtïÞ½îWxáÆKËÜåÿÖ«ñ›¯Ú|ƒÒ—|5BŠi²Lõبi“¦ ß5ÿ¸é“ž#iÚï/Á² âòõvø„Æ|¿>Ïÿ½üz®èCw÷»Çä®)°P¸¡Ê ªæP· &P(ìP8¡Ê7P¨Â ªêÐ4 9˜¨âC¡‡BUh>šÖï¡ÀDóR¥‰§Ûôœ Zôüš\+ÇEÿß…¸æ+tîlvÚiGóÓ#Ž´ïé…1/˜[n½ÙÜó¯{–rw¹ÇÜœqÆéæ¶[o³!sÎÙ¿ªM:ÀÏä} ¦²Oä7öIóI¬)óµ¤ÌuE jÎÁdÆŽkFSño`ÌÒm« |¹ùæ[š¤; Ò/s•teHÛõ"©[KÔýiº¶”ÛU&îµ%u¡‰{Å{Íå~n5ü°´Ô¶_¿ƒ¸`"êwÄÅÝXr ÷×q[¶¡œ¥hY ²ìÝ#6ŒPð ÐC!…‚O?ýÔN§î-ú[†ª54*8TêªPCá†JfŠhŒ… zœîSˆ¡¿Âݯ‹æ¥€CAŠîsg‡qŒ›¯ž§¿ûíïͤ×^Ëÿ=bÄÕöß 7ÜÐ|ôÑÇùÓëêyÔ0ë¼Aç‚äÉoØ7Þdcû:>ýô³‚1EZÒÎQbC¾Œ•*}@ÓÆ|VÍ·ƒÝló ªó\å– —zl¹¡@ÒõâéÓpjCŽ4GÒ<ÜtY?Ç,ŸK¥ßaS;ðÀÌû3ÞÏÕð cͺë®k8`së­·µˆõJÒÙQÒìðgY÷WrF—4¿›jM&nÚ¸q/¢¦‰{\5ÎSI@Rê¬2q§= LR¨÷9Tòþ ¿‡\ªßsÖk³þf›?øñ(©bBuNí?ôîÓ;¿OYQð5€iÜÙÜŠïOûÛ)ªöسÿ‚ÏæÝw§›éïMOÕà-5>HÐhÚôë‡2ÆÉ%¾hUIèËÒEá†*4lèv#ºÝOá…2…úÛUŒhM¯140¨D§—U…ˆª<ˆ¨{‹‚6OóÑô "Üóê¹4mš¾ÇQ²(¨qG¯uå• O­÷ˆ L¢"€\LÑ=¦ßýêò;o(ïSÌÅþ­ Ba…uÚ´iöèª%T«ª­Ì^(ìXVñ©m,¸àÃ… DT-¢î-SD×]Õ…º»(Q¥ˆD?7‚(¸P5H5M]úžô¼o¼±y{êT³í6ÛØçš9sÖ÷g›YÞïúÉ'Ÿ2¿ÿýïìë9ï¼ó“ÏFSVÕÜ­£òUå¬VD•6~|ÿÜšóDMž;¨ìy²¾¦J¦/µÓWE‘eǧ0„÷‡Ï•ìâ’4MÜNH9-ÆUĽ×+®¸|iÃöØÈiµý8`€?*¼íª´"§œÇdYwì¾ûîæÅ_¬É ãšçK/½dŸcÊ”·j¶Wk]¹õÖ[›ž={šG}ÔŒùhAjø¹®¿þ:sÜqǧþŽšª"$íï%ËYeÒœ %}U‚g©´›LÒÙ_’»äT÷L-µ®Ô¨ôŒEõBl=öXóþ{ï™›nºÉîÏtÙpÃ¥ëýö`¯ôîÓÇ<:r¤™1s¦=è»sß¾ö1×_}þì™Umoäš¿MÕ\vØa{Àýî»î¶³ëá3ÐV?t Ý÷-ø²’N¸”µÊ'ªº#ˆ ABó;ìð!öŒ¯q&¿>ÙÜu÷ÝùÏñ©§ŸNÊDöAtQÁ÷ÔPùS‚tíÚÕVN(èPw–6Ú(ß­E?*­ ´àª«ŠþÖt:#Œî×8 xh¼(ê6£Æƒ‚ KÜ©q5½ºÛh¥¡`EótgÑŠBA‰ëSmšï¥—\fÎ>çlÒ(ÜøÓ/‰ìj£ GïAÓ¸jH~ f ì¡M7íc† f>ùäsÁÿm.»ìÒñºUÑ©ÓÞNxå•Äé>úèƒüõN:ÇÞe„Wl%¥žKŸO½ûïÿ¾Ð z¤Ùe—]ìΛoNa1F¨ñéÊn»îj>˜5Ë<ôðÃùÛ¦½óŽ 7N<ñDû÷ˆ#ògÃÔþ‘¦=hÐ ûØ'ŸzªI6³gžu¦¹ü²ËMªÛíã½öÚkfì cóã:j?nàþóaÎ;KßÛÈGFæb×ÚïÿðûÌéÑ£‡|ð`sûm·×Åod¿ûÚ‚›oºÅüú¼s á­¶ÚÒLœ8©ñnx.!¼Ltw—¨0$—’,uÇw&)-@CeoüŽUB4cÆŒ|…£CA…ºª(ÀЂ¡`@grQz£jý­ÇjáÐõð ©úWÓ¹ò$7–ˆJÁ:(øÐü]0¢q8–è1nÀÔ¬N9åÔF·üðüõñ&,]I”rÂ:èà‚¿õ9èÔ~@øQÝà#í).³tw)¾?MW˜Jh›xøa‡™Mzobn½õVóŸÿŒoQßÒÆ÷23gÍ,»»iš·ÆÐêÕ«g‹@TÙúç?ÿÅl·Ý¶føðáæí·ß6ÿüçㄵø]é&—¡œ1TÒŽíQ½æ‹‰žCU¥Æ¼P÷«%·s:~üóúë“ÍAKÿ]t¡¹ï¾ûÌÓO?“?RZ‹ï#ë÷^é60M·›,Ħ=óJÒcÒž&KW˜´óK3øhR(’&|Iê£vyT7˜¨Ï'M—œäïÃÄ<>ýo+ê'ZÞ`¾-§}§ýšÏ?ÿ"²ýÖÛScØzŒ›¶ñ]^;&ˆoc…vrçÎý:ÿï}÷ÝoŽ:j¨yö™çlw’É“'_õ¶ô1Ï>ûœéÖµ«Éï,šUSÆNxLÛ0·$ÝûW÷Í‘‡\|PÔèzʱ<Ž=öÓ­[·F·O|u¢¹çÞ{«»í©Ñï7UbûP.}Î%ÆTªÔP¡pB]S^¨úCGˆT¥ë.$Q`¡B!ˆ.:‘F:Ö4ªòÐ)mõ8…(zŒ… U÷¹APõœáÐEaŠîÓ´šæ›y£“¸$úee A¾ÿ¾ƒz{}•Î'mpöö4·•û#îþRACš®,QóÊ:MÖ¥Ô)pã>U}Üpöoô1Æ™=öègÿÖ)ß³~/M¹\¸çh´ÊßæNI_kË*M浸@ã¢=ì(Û.ùÛßþnÞ}çݪ •ü&*92Ÿu>qcwD=>íiqãÆ²ˆë>’4G9ÝQÒ\›GñürEMþe§z4‰§½m4˜Sâf}¿ÕúΪ‚ÕºÍÔëQíÇÜ»tGqÈ!æŽ;î(‚hðçƒ>ØÜyçv©(ˆÑ~–ºõ=÷ÜófÁwËÆ¯Òêö:›çüo’÷fƒ;õiºsD ú$ìÆ¥}Œ‰ÙŒ dJí2Æu©êND‰Ð&ˆ\£êޝMm•øT¸LEUüEW~4®\N¿ÏÞ*S“bž ´‘ïÒ¥‹]0NØ2Ïå/TÝXÜY]z¨á¤Š=F÷]zé¥fܸq6AT|hšÎ]× @ӨߙëÞ((Ñ¿z :ûLýeO°âQåvíˆ BÒœ&Ë™bÊû£œAIU ý‡ þ{×lWQ¥»o®8ÊTETÃ# …*´†„œ!(”èøý3–úËšFÅ)_¯ÁÒÁB˜)!(!€ „„(MB ’ð(d4œžûõ9½w?V¿öÞçÜsozÝ:uÏÙ»w¿v?Öúz=.a<°ž]tÑ…’!–¶ÔcLö 4öqhf›¤ýûŸÿ•‰$aŽB‚+"t)TQbs!¦A×þ=ì8ÿ`XÀÀ/‡Šà€J N—/_.'ìÛn€ÙùÎw¾#¯á¾ «@å\'B:˜( œ¸¨|• Ít²‹³Ó.¼Œ¤×ö2ˆÂÜ”wÖE~m5R…‹9éR‹˜PÒVû#Ô†ßa‡;Â"ìw·ß~»ôDÞÇ?Îþã[ßbW]}u§ïu8ÐGŸpz9þ!Òóû0 e<õÔ¶¡ÏçXèÑ”ýé¨)æŸ8O ÿvñW'±!óŠQï…9ã'GË#ô\J¤*¿”¨,TZõ;Uƒ$ä5Ç1ª/j‹ëǃ5îŸX´‰R«SŠïßûh;¾GáhØô»ßmeW^ùcvÎÇ>ÊærûùÍ·TAp€¼üÌ3¤æÛ÷¿ÿƒ¡9šÎ !o_GŽ<òH¶té1líÚûdä«óÏÿ¬ŒÚ2Û‰'ž å´*¯XÈVJ€E-aŒvæiƒŒ¥ùäÀ%¥>A`jà÷”SU ÀWžµà¾hÑ"iÛ‡~Áä‡íêýxËÓŸ~Þ §òÞR¤ÏB… J`îÚ„ìmj ÚH±÷Q„ýìò©½ðð×f1Ý2,¢u>öbë|Ì1Kä>?¬ˆgÈ Õ]¿¼{FŒ»sÎù»âŠï³Í›6ϺùÔ¥pÙÆ¿G(lmnÚú‰³Ñ®ÿ#mÂ׳=…º#DÆüÞ]ÁN?íTvÁùŸeW¯¸FÊ3ÿüÉOH9â'×^×÷«1M¤|}(úö·/uÒ¬^}+ûüç?'evÔùà)'³O8Aޱ›6É(XÉ~+B ‹!¾çC@Jˆ„:ú4ABà 'Ê"ô™ž÷iSãá¼ó>nD {ä‘Gä!ãJÇ,Y–³˜=ºy [¾üÌi¨A—NPy «/üæ7¿‘¿ Q ÀÌ L`€¸†ïX|q"XÎ;ï< œ`âuÔQlíÚµì°Ã“@ ´?°çq ù"Ò L``Œ2ÿð‡?Hÿ Q`ú‚ï*¤n*vê©ì¡‡fÏ<óLõ{ÇTý|ðAù1®‘'™‘:9ÉN:ñ„ ¤xÿûÔí)'-ÚºdÉÑlÑÂEòû«ÿ÷*»ùæÕ^5ß~Þ'¤P¡B…f(}éK_Þ߸q#»èâ‹Ùé§ŸÞ•Ø:4ð„½û1´î[{ßPú y£ ”5îBÛʕ׳շ¬ŽòŸýÌùe2ÌRÅ|ºPá°÷g7¬’ZŸùô§äwϽ÷² œÖz]zéeI×!»}÷»ß«€á«n¼)M6¥œuRNOcŽ=­2¾öµ¯fµõ’¯#|VàÓ &! ÅWÆ ýê[oeg|øÃìÜsÏq’) déø)™÷?ø!ûãÿÄÖoXϾð…éÊÛq˜Ê¦þ7ðÌd3"& ¢47Àà;&45  ó<‡û*ôí¿øEöÍo~“-X°@pô³xñâÊÔš:˜ €ÐðÀ€(ùÁDpÀò~ÿ09Ä)ÜÁ\åýöýß.Û¥C¦î­ß°!ÐW¦Q@˜»îº{ªÏ»åøc¥9^ôÑܹû%Ú8Ï~Ô~ØZÝåä£P=ÖD‡Âb(ïéÉ·k»úTíˆT‡¨!S“¹ ~¦„Áõµ¯‰óSʬ%ÖΔëöoìu7Üpô›¾ðˆšªZG׬¹GžX=üÐÃÕlÓû¿ÃY{ÿþ€yÑ:Àÿ×ÑGÿƒ{ÖYawÞy—|… *4“L¡bL"ä+Ä'úùu(ôÓÎîSÞœ0·[Ý"÷»S>x »qÕ3ØÓ‘'x-EóqÆÍóaP±h+Ão[s¼Â|F°d`&Ö¦€f”À^¡Ñøøá÷?ÏB MßZºòúë¥ ÑL!†Àÿ,;l[ó«{²€•QÑDê 0­Š/åÚ½~£àÛ`€ ˜# Åm øñPÑ]TH[ÜÃh"ÌV>ô¡Iê=·Ýv›Ô Á}åe^9WE9È_i@Ї&…`æÏŸ/”ר0Ýoßþ´_æÌ™”6ÇD¶?ý´CpýOü“,õ<þ¸c§çOÙŠÿ-’#Žxq€Ã‹;_dwÜq'Û´i³qï-où;y ~Ÿ~ÞDZ•+ýyWå[i@ΛǶlù»æšÿ‘ŽuÞóžÃ¥ #žE_¾ùMo–¾Sì²§ã3] ËliËÞ¸) ïñäO_!üÑÓsëy¸g—ÃùÆê”Òßo£~ƒz¨ï\ûÓïÙ÷í´±ký¼„õ;\ž{ݾÇÈg©zS÷BåQõç‰}¦§¡ò÷µ/%m»¿‰þ»çƒþ]ÿ­‘Ÿßt‹Ôž\¶l™›ž»é½yké–.]*ó¼ùç«éôv=¸çwjZ5˜Òv%êm§Š%òÌ3_û¯‡ºýQk‘¯-ž¾´ó0þë×™õ™×©¶R}Kc¬'ܺ®¯·{N½´¾¯ž!úK]³Û¤§­êÇ­g¬ëøôDöèUZÅV=¬ï¾ßB0ò{pý\·ó¡þûÖy*ÿ”=Á”|@t|ÿÎÙãg¯èû@‹šè£á5yáÇ\€LýÛßþ¶å;Îåi›·óþû×±ŸýìöÊ˯Èÿ÷¯[Ǩ0>¾ü¨ @þ2íµ¨c„€¾½s`Èa¦‚–~Cë4ðÚÊ×`ƒ°P¸i/¿ürvã7J0ùá:TbA¸<Šày䯜¤â?îçúÁ3°3F¢ƒ:Hz‡Ö BûÙ¶}»ì€:ð ¢´7{ìñ)Fí äE@ϱÊÞñüOÞzº|ä«¼å¿øâNÙ_Ð>yׂ²o,8”=ºeËX/L… å0L3¢ß"óYòä.Á{¶ÝŸ1¶ˆŠ>ׯ©hN>A0>ÒŠ)ï2 îì&+TaLuw0Hv¾´“Ý0Åð,9f‰ ÝXbŠ~ Eˆg—-[*óBžÒq¬^û;•'Ô™…9ó‡3ô9½‘{"ðDHL=Ê‚¬÷à/´.¤šÝ…ÖËœÐÚ9áq˺V(M@.T¨B¸æ{×®M Ûì‹|œÏ]ç­m“©S£FЀxµq™6Œ*|LPB(ß@° ”CkO•VÎ'Ÿ|Rjj@  ÒB»épi6mÚÄV®\)¯#64@ ‹ûÈ^‡¡Í&I ÊG@‘\‚ÖN” Ú²dñböÂT9PëáZ¦Ô„ñeóóÈ­ž[\ÉË/½"µVæLÌ‘m¶{½6+åfÞ i@»w»À @¢gŸ{Žtйýö;Æ^èÉÒß±ªaa0f&À2ÓêA öš‘¿ÀWù$0ämü~ØL|JÈÛ”Ð|¡º¶ ƒTb}‘*äødéžftˆABÈ•‚áÔöÅ'ú¼_û“kÙ™ËÏdsß:—ýbjŸ‘6À>a—šØŸrÊÉr¾îÚëä~¬—ï¨éœã)Á• î¸4Ñ„jÎ"`·êE…bLA2!¼[u6ꉼ)€Áç4º|vìžÆØC¹§­¸ ø$ àõ— 0‘cKX}ÌŸê}‰zÛO£U=Ñ%*6ǧHj>1óª~¾çC¦5)>YbiSx­¶i‡ÅËí@Èøñ¯{/OÝ•1íuNñïnSJ¾yN\&º~/8à/šîaÖM˜’à7ÀøÁoëˆò? HG£0yè† Úï{ßûäuh9¬Y³FFS ß*d.|_ _K`^ƒ4À@!M6òÔSlÑÂ…Òô„üwïÙÍößÿíì™§ûÑažßñ¼ü 0í‹gžy6¹ >Ð^A¸ µpóºTç½›÷àpîù/ô5m¦Òp™æ`™¦`˜£b¿qãfb}¼óÅ)ë¸ vÃ{T–øL¬Œ®”ÁYüX‹º°ë?ª:ó_Ò´t¾ÍçG¿¹çj¶ðÄíŽg”Ïlù/ñ4²-s2Œ-B rõÕ+¤Fèç>Ôä¨"lMÓß¼‰-[º”]pÁùrß¿úª}MF߀ޅ+ôñ~>m A×ËxŽªCDèw"ðJI•‹À}"˜?Äc¨ÿB<4á¬Ïëø/Ñia8©“Œäoh„楞š"Ž|×ϼ"À‘^GŽ Û˜£v|Ü&O>F¥¿ÏǬ^3ë“Î/²ÏÅ2å–À—î]o£P|åa¬‰öh2§¨ª˜"¯.*'70` €„n0D<”?H™ /¼PjZ`1¨ÏŒ>+¦òØ¡Ìh Èã9üøkÈÀʳÏ>+Á!ûí·_¶uDlØ‚²•1¨#ü×­[Ï>vÎÙ²=»v½ÆîYs¯…Bs€Óÿþ‹ÛïdüÇ“Ùù|F‚>h÷•?ºJÚÿÝÿUÞýë.¶æWk4Ûb*ÍN"Í=_oðêóû'ž`øÀ‰ì׿~¨ºŸ‚ÖmA!‘gŒ¥/Ä3§‚h¸d„NÒcB&žÜ>ŠÔ+¤=œÝ×än‹ S›<"ÓVêÆ~=E ÌØÊêQ¿žÝÇm˜KÞÀ›µ`i*È Œ8…ôj•q÷$Ø2iPþŸLáƒWB‘´±ü¯®1Ïéá ­²»¯˜údW裀3Óæ“›§ÄµÍ:3Ošµ>zþV[ÌzpW¸âÜéM¬²òÕúSåg}×…I}´ !œöOöy`2^žvˆâ]ÀÍ>Ú¹ó%é›ê°E‹ØqÇË–.[ʶoÛÎ~ÿû'ÙK/¿Ä^ýó«2)öyìïóçÂÞ1ïrï»uõmµ‰¦}ªk—ÉS7Þj³:¯‰N`ûèõžL§€ÜSæ]RLg6€&§é"p‘ëïŠ×ýI•éD ±ÚÎ+Ÿ–Ƴ4H¬r+-M‚k/­¯EbiWZ=ëƒÿÎÔÑîÛeð@ùܾ(³I1@”å›W9Z"MöÍ®£&u5öÇ…† ¼‡—ˆ/ÈXš2š¢!Úòæ½7¾éryϦ}DoŠ´ï>ß=ï<¯<<ÍÑ>o| :ñÆSN>m«ƒ3Õ¿þõ‹äâà€Ì[ éš`n@H\('œÐæX±bÛ¸q£ü -h“À¤$0­A>K.»ì²Êgò€ù ¾«¨/0AþÊQ)êsñE_ó c¾xí<ñE«öÖ¾Fb"§Ë¡öÂNH%œ·›?ÍÄÀì%,ž!í§>ýI¶òºŸzÃ[¥Ô7KÐåiçê©Bn*ïڠꉿéFÚHxyu± –HäÖe@Ð0òò½“®6½ahWÄòµ×CCEÝú¯î)µs'Í„@ ö¤9 ¦]>«Ol+@¢'j›üí¾º¦ß7Òö̼ û~ÛFEˆÌ8AZ䘔6èíwüè}¥ŸRkƒ¨òK@¥açÈÍ ¿ˆö³%¶Öí?µ§#j´?÷ýÛ}%ðÂ~ 0‡ [·>ÆžÛ±c(‚JWBM“|f²@5Ê~³Ó„ž1µf}÷…+è[Ϥ|•éË;ö_}§îë×C÷BiRëœÚ7¹irÞá¸Í¥€¤ñB¾Ã°T^5¶…¶º”-¯ Ã9BOu¥ñ6}ñƒ#wÜyË»5 >¯>{´˜Ì©¹((&mÀÔAãÂ<@ €ÐÌxç;ß)™0<äV /hƒ$/œ$ʃ_hZ4F€hw5ˆ  €YÏY@ƒfô„ãŸT%·ý0胨C­÷GÛŽ8(ÐUöõ:Tõï1M“„dtÀB¿¦ƒ3ö€«òPeØK«oòdLº`¬‰Á§¬Ž ÂØé.€ Üh#l49Qn+Ü8'[-O¤Ç]ØÊÕžmÓo¹>'Hߢ§–í`HZê^jhÝP:Ÿª¾!¿z?¥øò êk‡¯þTýBχÞ}($r“9™»_6Òd*~Ü‚@Åÿ¾„ƒü;lk,À›Å¬þÊ»Ì3rxÙÈ!:™[ÔšFqÝvÔ—<Ž|²I7ŠÀ Ù¾}»4Ç€6€Í›7³… J!dUØ[hr<öØcÈ@Z,RJ;ß^@C ´:ŒT`‚gp ü{üàš7ožE`ƒ{È …6R“7T1=ÖÔBb`Š¿æƒÓ7Ðwü’53>é;ã‰- ©‹bΘLÕ6Èi9Ïêô|S6ž½ŒÅÓ…6˜ÔòyFù<&ñFs/¿Ž<±ž)§<ó=ŽÝ>(Â4@x}ˆ„É–ú&äAdîq>³^B>¾zs7!ˆ™ ˆ„r¹‡ã¤êFµSê]•QlŒ ÍÉLÌÄ•¸P¡+B§¬ùx$‘ȇ†4®g,ÿ5C®[S®÷§å4ÑuÕ }M øà€†ÆI'$5@\Ô€h‰<þøã €Ö@|GÄ C4Täh{ÔÀu|ÇÿC=T‚Q|ð€–®A¹I`Sܧ"Ò Që6_ž˜Æãtÿ÷ß·Ž­½÷>Ù·aîê)×ózlxòÌaœ”Ô¼ÏÀq&Õ'³ùz-&«åÈs¢e»Ë ’ňFn¨nMüˆÈ C\Nó;Ï …‡Mã×» é›”OÈ¡cˆC!:[Ôá©Ü(:Wq¼¢"2èõ1ÌN4“–ê¾îQåÓ#úÒÒÔPÏyÍI"ŽÉ[–æGãJ9àŒ-Ë+zxop¦š[_î½*D:{3™3ÌÅNÝÑ"M}_¤Uæ*J ZÊ'4B^ü€æ´B áZ°`¼‡40m0䩜¬âºÒþ€£SüÖ}‚ÌŸ?_–ùº?mÊ‹f“’‡ûåˆâ~P –äØr§€ ÄX ê^-âœ'/ºMA†¦Ú1ù§ùr2\H/ò Êô]€C™[£˜¿û1Û)Ý_…fwf€øÁ\ßò·ðƒN½¬ˆ:°a§«Xn–çe¤Áä š!¶Mpt“š  ¡ÀA÷·àøÞ™sûÜö«bp”Ök¤õhêóéE¦)!5û”ùÓUÙMòëÊÄd|y ºîéÎ2±6ô’òÉ1÷ ÌmºJ—~Ö—Ö.—ºç Ó›ZçÔ~ó¾+»lG6°7lå`Úʯ2©´÷yžÎ¤ÔmE,k–«9™b§›‡`‚Þ#r¼ÆóÌú‰4>JdþΕ!¢²ãÑòš(•Îvù0Åcû}-f6çW‰õZugÌŸ$'¨8éÔ­ÞŒ¹5ƒl&×”T/î#±‘4¼õ(a…FŒŽ)óWbÏH0Úzó±è+$hoÎ)f(Ä#õ=ååœÔwÏñÍÁy:Yô•;ѤÊÌionßwçDŒ&’×­h '‡Ûnºrž¢Ö¯“[~\ªð×¹™¤Äùpօʱ§·b’LÊ9-o0XDJJqº)¼kùŒ5ô¼ùV–êh0NZÏ=»=~*;Å©*—t†ê¹§æ0ŸàFñ[¯—ü­Õ9Çq«w~hùÆ€Ü`Ì«hô³‡•®+]xˆÏõàÙ%?˜¶´ºZ”)ë~‚ϨÆKÞ ƒö)®Ë¨…ÍóÉ=ëŒë‘¨ T¿¸£#'¨n8>íŸÂ’ üCøG–V1cñp©¹¸Š/QòŽfMê"×Â[À—¡ Î];Å+´7%>muqœ†òfe øHb@ˆ.åZ(­/P Õ«I{›‚!]Œnq¿þSú˜·jü×{®Î¼˜kkª{‮“}u¦„hã µ™Då1_§irÊ£çås# .™âØGxÆHÌ3–ö5Þ—xhÂ<5Îù 4µ"Wi®©g+ †JvFpÇq©ÆŸŒŸÕïP~ö5ã¾¥)ÇUØFÞ¯»Qoít_µ†ëކˆUoý·ªgHS¦J‹~p<*WfFýì±9pú¬÷#s"ˆÓ‘”¦·Ãƒù=‡ÀÊL3Õ1Z„Ï'p§LjjÛ÷âø¢»ÌòÌ6å,K3\%bzBêú_BNèØqzhþ#_Þ̇žàj_ŠÃ˽¯'_–[¥§ôpZ¡7>¾ƒ¹iÁ3]"4YŠvÇl¿x3ŒOK[H—!Ö!%mNš˜ÆD è’z¤€£{Ó± ue—Ý,äº.æÒNdäºÞÔõt÷Œmûu#Å9z ¢b6ä׳fD• œl¬X='4f‡7KÔxbtÂHô@@{¯Á^×çPŠX  ~$EŸáÌ-¨®«êäѰŸ.Ëðv¿zÞƒXð‰ SøP× ž»Þº}É F÷‡ç7µT“ãƒ'ðè¹@@ü¨ìÜk¼£¥'«íc´W’š/ªÈì h£«úl)øˆóôïsÜ2<ÉAå&†°w&aÙ.sV‡#%"s É3™nÂÆñ ‰ È4ùåÐèÂ8€]µm&Ûnï}ij“eõo÷ù8°NýC ¨žFgöSÓP÷ìÿº AÝ#ËÌ-G6¾žëŽ€¢÷‰ˆ·7T×Xû\ ‚¨ ¡÷Úõü÷1ÊÍœÿ(/L-Ó„êöRF›pµÍÖk>´µ6¿O†É¼ò„6X cõ^‘‡ÛNRøµ…è H`–æC]¥m‚þß—/•Ž™é|õ¢þW€…õ]JvŸÔåq£oÌ:ò*¬uU–7gdÝ¢ýjõ­­iBÑt/ÃÛ Ûò4å¬ÉÚ Æ§*Ìö%â2Ü^Λþ7º€imÔ"!¼ æ#ŽÄâL¶àœXЄ»Š]Æ©ìtÕ2Ä_º÷êz¡ï"hè -®º’Æ_ŸMm)4ÞY‹}¾ÙXð‹º]khÄži%!·oš˜¶ÄÌsºn_¡Â- ŒÑ qêÒÄ¥MÒàˆ<Ó¶þ¹ùyÍ[<ŽQ©ô5(ã7RërPÜÖrs:ù¶q¯_JÝÓË]/(Ýù.IgÍö–Ž"$‚ð¼8áF*ÀØÆ ZEžô %"¼ÈÐ R¡#êð€^Ü–ÇgÃ|†F„Ú‰æ£×·HŸ9,'5ÓÇ뎋Ž‚øÏ`Pb öÝ-‹âÙ}ÐI¹—ãÛ"æ[Ã(ºôýKsz«J»rúq\Æ|‘Yšæ7,¡f”§Î³rÝKA¿©–Hìžx µ%5mnÙMú&Z¶°Á/Ýã'ÇŒ4 ÔL”³VC’°ÌkS x³|²èÿõò¨{N8rÏ ádÉfý|ò¹Ý6³Xéö L»‘vše ϪÀ½ýIåJ׿6‘¾N Sa¿«ÉÝ>sÌÅÄU|ûDL–¦f£Åè0j&á\ñsº^µ¶ò†á@„õéµSl‡ËÙ UÄw÷¾(_îLyúeû­ØÛT‹ŒP¨È Cœ\Ü(B” W¨Ð^ ,Œë†^Ö¤B¡qQ|á”í õaÀ€€³æå.°!,AžURJ}Ÿ‚ „qÔK<>Àî¨##€Á숛Ü.\Ä}ÞìA´ƒ{?Xb§ó9.¼à¸T<æ†%ò…ò ì`’êž9¡m¥«6Á,ð#H=Ï ‚BvíÚóÜ>ûLìVWs;Øi²NÓÍË_H]÷„tb‚{%xŒ¥…Õ {ZçAtÌ'त)lH£Mx]ÃÉqŠšiyÏíw¹.•}BñÑEÂÛ$¾ºmß_F?S_sSŽ­Ì{<)_…îëy ᦂ®¯þ,õœ]?³,ß\¢Û¯çç^§ó̱³MIkž&7X+w,,nª=á;ùŽìÚCÒº šndñ»ž“¬È;×üšÿÙ¾V9þuN²¡!0át•m6ãM‚x?•³Ü ÃÒ¹ï>ŽAìh(*² ×|Äõ5DÍesnh!L¨z2Õµêü¸+4*Lg©ÌL+ÖPÓ’Öòã¶"\œ{"[8õÓú­.CQ_ôÙê½¢ôpÁö{VȰœ`=áú°£ð¨ú Æ ^YÊs Pà† AÌJNÔ­HÂ!JÍù¢úßz.^h‚–¬ôŒk6ÀÄ @1A³¸VsÊÐ+S¿…U¹qkv»yÎÞóÓªýCýik‹4 ŒPZî,X’\L;)¥0†˜?5M‡J9YæÎrl­ f)Þóµ]{^ð€Ø62JûcÏ«¯ìþá>sßø¯a{L3›þÂO}LJ‰nw8ṸÙD^{O¦f~±0r@"" O|Ñ"4a-‡ÞOn/1ļÆjêSoŒMË4,1ªŠfÌ|*ÓìÓ/J…,ÒrpY‡¡Œ‚žÞwžß…gU¬ïÝ—fï=<κ ›°t™o[s' )~6¨t!–X½»2iâ—#ÅÌgzÐüaX»Fl=H=È Ú:|´y_Žªî­öB!±†G=Â9½g,~Ú« púÁ˜Ú«¸Ó*ýfYº˜;E ^ÀäW¹¥AÜ,&ª›•àXñ½5ƒnƒ =ÑÓÀ¡1ð@¥o ®—&÷S€ ™`ÜqXŠ2T ’p*êUO“ü'ò p!XÔäÇ8 ÔU áuõÛ(A=ªc®ùyÀäÝŽôD'ïºÊÍ”äX$d aƒÜ_&Ågp‰Ï2îUèç¹£•î« ‹ÖÙMÏ q–“%…x-ȇj[óc"xŠ^A)W\”Ü^z[f`{K‰§,ˆû¼á-û.^¼ø®Éɉy>áÀ]ì(;G‘$<ù…kdúºcrØ´a°•¹lŒlô=Oï'2²mA;§×„·q ³Ô^æûÂ5û¾ùm™œœ³hΜ‰}}dÄ$¦á’Ñxæ©vS‡YœÅÏšâÚ"¦zàÑŒH´Â“>æA—BsDQáhaÆØ&‘ˆÐL@âò2E}½F¥›Ð´OìžÊÑn N,}¸kʨb‰o˜%öO¼æ«S*HÚ¼Œ¥ÛsZ#2g:Ox÷Þq—~´?é'z;´ïZ߀Au–&ˆ‡vxȰ˰üVéikmk˦º'L E˜ý&<ªø¡}¯0"®!¼cí<©>­òÔóÐú¡Ê3ÅGW µ¸7ý¤8ˆÒñÈD±–jiÉwdï@êS½é>† €t!äw‚„@ˆØ½¨’jÄ@™Ôvvù>Ú¾ûTÌL ¾ïD"UBóåio¢""7¤È”ÙyV%RK à–ر+÷3#Î=`Brô,9aU~^šÿyù,ài8sM]ÜLvíÚýüK/îúχ^ÿå×v¿ô ðè1BDi€è ‡®‚´@&µÿ“Ú½ ()«K¡B… *T¨P¡B… *T¨kÒÝtHWƒÏîÁçuíÿæ‚!òùÉ@¦ ÔØmÝÇ=ü(H¡B… *T¨P¡B… *ThXd ²›ÑÚù_ø[1(@i‰è¦2Š R¨P¡B… *T¨P¡B… jK¶Í6tí‚Ø>?‚ˆ%É@Ô5¥õ±‡ùŠ *T¨P¡B… *T¨P¡B…Úå4…ÒÑÿÛÚU“ÚÝëŠ:zDaºÖGªOšB… *T¨P¡B… *T¨P¡¦d{ôî1 éY÷ôgIÎ\Äö ¢›½¤&.T¨P¡B… *T¨P¡B… Ê%*¼ªUØßõô’¸žˆ5B=m¡B… *T¨P¡B… *T¨Ð°ˆŠDL}ñß@ä5ë¿úNÅ÷G¡B… *T¨P¡B… *Th˜$ˆïâK#‰@äõÌïÔïB… *T¨P¡B… *T¨P¡¶$¿S¾Kò ÕýÄk… *T¨P¡B… *T¨P¡B£$‘xMÒdÃÌ R¨P¡B… *T¨P¡B… š.¹ü¿áòÐAœxOlIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/main0.png000664 000000 000000 00000220505 13703317554 026334 0ustar00rootroot000000 000000 ‰PNG  IHDR@º9&) tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp 5l’ϵIDATxÚì €\U™¶¿ª^’N:KgßIBBBû‚¬aÕT”ñWŒ8": Ž :#3Š#"âŒÂ ˆ‚²Ê®d !„„ìûÖIºÓKÕ_ïé>•Û·ouWwz­~¸©[w9·úÞ{ÎùÎ{¾óX,³&7€ö%Ñ”ƒóÙÏr@{“Q‰eð‰7²oàx€–$‘á{"Ã1õ„(xŸ™ö…×Z‚(a#ø%ŽÄÃÛÃH&Ñ#Ó< µ‹áÅï‹[„@=òëyV_A€Ö",rh©¬WYÃbHƒ AñCK^`=¸?f ÐzHÄHZ]‘£ªv©®=¦*t|¤H8–GPü(L-yÿòïŸô1S~TZº³oeeeŒ{íAAAA²¸¸×öy¯¼ýÍŸþìæ¿Ø>]Ë AñíçÕÎã½8‚Ã\¼øQpÃõ?¼pÂÄ‘¿Ü½{WQ"‘@ü€vCÚDyyYÑÐaÎà¡Î7{©ÕhÉÀâqߣ†®„‡½qäÄ›ñú€Ž„´ŠcŽ;äf«½buCwÔ!*HÐ Äy€ìÚUÚ'™Lrg UØ•Wbïu?Þ¶åæf@«RRµÁ&•ϵâêmÜ ì6·?(ƒZ‡ÒÒÒ¾©«Äké ™b½@ +**ðþ€VñÚ •5*sÚÃþ  j*++õ!ލ‰[ÒºG¾ÕŸÆ6DŸÜNhmc@<ø ªh].¹¿ÁÚÍþ  jUô +¬FËP Ô°ÎÑ HÐ  £’Éû£ŽH˜°’Ç}€ö ¼¼ÜÊÊÊlÏž=Ö½{wnd…ÊââbËÏÏwŸQ1-“ɚЉDÂjgGMþ?’¥žðበ‚\<  µÙ¸q£æw·¾}ûZ¿~ý¸!Ð$ªªªl÷îݶråJ5j7 Ðoø4½ Qç‰úBH§&Jè£g4ä«]mjøÈóCâÂ4yôéÓÇòòòœYQQ7 “Ø-ž>ãñxz=½=Qí>««köIìðKÔwèøE¿íÓ1"9â ¬…€6CîëòüØ_zôèáDUèZÅ!/¿h›ûLT¹EcÕÕÕu/”èð…H­£¡!0ûõ²UTT¸—ª)H•+,,Daè⨷¶ÿþ܈NÎÖ­[mñâŶfÍg¨~>|¸M˜0ïh3d_ªL)))áftpZJhŠ~QY5ÕnêTÓ ªª£tŒ_\kºv[ºuM;µSVÁ/­2¼EâÇœm×Z^~Ó^àꪘÓó?] ;¹+ânÐ5!àiçF óæÍ³W^yÅ-Zd;wî´íÛ·;¯žÞ½{Ûĉí„N°ãŽ;®Ža @™еi $,~øuïýQ•j¯êy˜mí>Öòóû¸ý7¾’°CTÚÙ£+­GaܵEµø: $whLiVT½XM?„ιçåoZÏÂ~vø¨Ù¤QǺ1à¼d‡¥K—Úœ9sìÅ_t3pœ|òÉ6pà@Û´i“ÛþüóÏ;[aÀ€vÐAqÃÀÑRHpØ‹?$bl-fKKN·½y½Ý~ßÊ\Ušç–yë í3“Êlò€ªtzj‹†©B‡¥Qý"¿­^Äl©\9ÖvôÜi/íý£½³z–]|ÌuÖ£{O^6 èÈ TÂÇË/¿l‡rˆýÇüG:üšk®±o}ë[n¿†$Œ=Ú 투^½Ú† †—JŽ–/”7¹g„=>‚žÛ»°w\äDÍ‹æØ’¿ÜjÛ>|Ã_2öHþufO²Ÿ¾ÙÓ®=|—MPY'=y„øÙbZ¢mJÔ>t¸^ª÷t3+hÕ;JlÛUvïœïÙ?ÿ}ëÕ³7"@G1?4ü¥gÏžöío;r:Am¿úê«Ýq#¡¤1V¬Xa>ø m۶͆jçŸ~«OmzÉ%—Øc=fƒæÁ´M!Ù¸àÅ4­LæÙÒ¾§;ñcñ#?²÷¸Q¥_ÿæ¶þ­'mÒå7Ú„ß´ß½ßþ{ÌN+®¢ºë˜cŽÉØ}ýõ×yxY /P¦>âˆ#êí›={¶óÚ×’t8$¡1¡%nÕ¶ä¨öè?³Ožð-7:. xª˜§vš‹÷…¶ŸtÒIn(ŒŽoLÙ±c‡}îsŸ³«®ºÊŽ:ê([¶l™íÞ½›› u¨à40ëËêâÃmo~oçù?'»}ý'žäúè#ç)ò·¿ýÍŠŠŠê][Co$º\pÁÎ[DCo$ª@îR£ºE4$~´D,l=.äñ¨z¶³Š šNu¸†Ì¶•øÑjH6îAKvÝo‡õ½ÖúN¶­ïÖÙ×w¤Ù¦E{Ò‚‡¼@’É@04²­G c2~üx'jh–—¹sçÖóØÚ®ýC† qÇgƒ¦Ò}üñÇí‘G±¯ýëöÃþ°Æ­yûv'h w‘ׇxôÑGÝÐm[¹r¥~øáé´&Mš”^—2bĈHñCpÀîS‹›òòrN܈€öσAQAÛxÕ{kâ;´ñ×iÏ?ëŠó¾?Õ§Äñƒ.·Š^¸Ù^ð´!tŒЭªÎoU½%A¤¹íàÆh©x {QpóÏ~ö³öðûúµµƒŸ¶ª’ Û*ß·M{ß²Þùcê 5oOê¹¹—œ  3 o õHýö·¿µ»îºËM‹ëãfÈÍUƨÜ^5lEÇéøl‘ô‰O|ÂÅ ùë_ÿêbuŒ9Òzè¡:ǽöÚköë_ÿÚî¾ûn—þõ×__gpˆ‹„‰ ¥ü|*@[«+zd@2‰ ^€ˆÕÎÞ¢ïúì[¾Ü6ö:ÀMu«Ù^2ÆIç¦ÃM1¥_yk3ì¥åÄÅüøÇüGסŽ ’SH¼¡– ÄüX²ëOV”׿ÞqÛW™vïnÕÉšcó +S/\œ—  aCÂânÜrË-6nÜ8ëÛ·¯­_¿ÞMc[VVæ<3_ãþûï·ÿþïÿvAN3±yófëž² d(I@Q°RÅ‘û¬<@ÞyçÐT†®Ò×Ì2 f*ñCYß~ûm›:ujdÚ³uëV—†Ü‰%Øè·s  =X &µO¾k¾í(9Â7ÕT·‘3Á¤Ž×>Ó¯[µ9²nc{Îpë^™Û›Øâ–:FγM‹cÖ·_KT'L“5öÞm= úÕ鱀މ N镸 ×VÅûÐP1|øp;묳Üð—üà.¸éµ×^k?ÿùÏ­_¿~õÒ’Íðî»ïÚ÷¾÷=g,É[ãè£vÆ“D‘›nºÉ¾ûÝï:Añ9>ÿùÏ»kßsÏ=v饗ڠAƒìÔSOÍø[{õêeÿöoÿf7Üpƒƒ¼gÏ{ðÁÛt<2x "ž®GÂC`‚ÂFc"„ê„t8…T=R¬¶Ñ›Ÿ±EC.³ 3¾é¦ºÕl/>੆½ÈóCâ‡øÄ¸íVT«3í­ÒÙеÓ¢³Ñ–Cn4ìU ᡤ^i ÚTñlªÈ}wÛ²Ö»oo÷òëeÍ+¬¶CKí¨1W"€t4´Db‡¦®•¨ 4„E‚ƒöi‹†³høŠDM‰«±ÀañC‹â<÷ÜsΛC„7Š5¾[î²úÓŸœø¡}²dœJÄX¢mAcõÕW_­÷[%hQú2Ê|úác_zé%,@ë* ìÊÎ CûüL-~Q¹^R±Æ&®û“-ð1'tx±#Hß‚*ûä¸vpIuª>)¨#€Ì›7/½ÎÈ„æÑаW?3[Î kËæØð¢SlWÕj[\úÇŒÇõìÝ×ÅýH$Î+©ïØ­Ö·ç`;hSàt&$xÈ#ŠÞ½{Û™gžé„B Q žó‹Ä }JøГ!*o¿Ï»~[Ðpn‰3ÐŽú‡Õ9š$,„½HT”T®±âµ¿µµ½´=ÆÙîšá—ÃzVÚä¾evƈ2ëQwC!%¨û §ˆ¹CVHKD³]ºû·4Fu­«R~·„õ¿Ãz•Äí‚#ÿÙ½„DïÈm(绑›2$å!rÎ9çØüùómùòåé™Z‚¢‡\˜ýgp ÞÐ »M;O0^)_(oÚ/ÿeš¦N~ ”ÓÍÍ£>í(OQ¨¶‘;æÙˆísmvŸOºmןP#rxÑ#JüðiµTùAÔ¶¤ G¥õ/·Þ#ÊœçÇEG}ÍzõÄhèBø!û(˜©–°á=äÙ¡eOEžZžoó7ÚÆ=5¶Á I›:°Ò>>¦ÒõÜ W ¼ëg#€L¬e<@¼`რúï~_z†˜üš6hA]=J¡þ@i†±Ýz”Øa£.´I£Žuž¼l]‹ââb«ªªb Ò.JX‘ð¡÷áÝMf÷,,²-åu‡Ä®*¥–n6wm]9¹Ü¦ ¬ªgûuèzèÝQ™ŸØ~Nƒ,÷ýgp o‹ç¸s ãõ< ½ø’[ä·Î‹³êª˜åå7Í­Gç|úø›Ý˜]ÄŒ—  ë¡:@±!4u*t=áC=?¼øqë53³l^4'2z¿M<ÉsÝ‘{Ò"ˆ·#ôN!„tM*++ ¤ÐÅYѧꔠ(  ®È%|Pwä­"€Ú }nmò¸&½T:——  k£ÞÚ•+W:ãCëÁîZ„½?vï­¶{ÖL™·ø‘Ù{Üh°1Ö¿ù„­ëI›tùnzÃ{v·ßmÅ6hC×@™ÄU«VÙ˜1c¸!]Œ°'ˆ·%‚Þ ±xMs8?¿®çI&ïèü´ZT ûcø@×løzFŽéÆíoܸÑöîÝë¼!÷Ÿ0Zž^Ý˶”÷ržañ#p²Û×_Ó¦–VØÙ#¶¸aTZÂ.ÍÛ¨ìx*ÏÑ£GGÚ–Ø›m[¾g ‚ˆÚÒù3*­´ÀÏ«ý^wšÝàgk•”A탫 ÃRTTäè:r0à©zïµ,ÙÝÇí×°kÈ`LíÓ1&žäι¬—Üš Üh¹ OÀž¹¥N–]x$uEn‚‚¨A "›Êkzè|̆ðÇèœðt¹A·gèZD•ý>è*#m» Ðîô­ZoÛó‡Ø'â^teœN‘H}&’nIT§–*³Â^陳foê¼/<‘2jóä.i±¸Y¹MO r³Ìh/ûƒ2¨ý@ë€vgâî—1 #ÉDÍŒ.ší¥1ü1Éê*ndlx¨Ìhûƒ2¨}ÁÚâêmvÔÎǹ]œà°—`,ª±u%'¸©n5ÛKÆ8 ±XÍt¸)†—þÝ(}­Nìà”†Ø]<@ ÃœzpØÎ7¬[åÜTSÝFŽaImÓ>£cuÓ@<@ C!ÁÂ+Õ’oUvÀæglñÐËmÂŒoº©n5Û‹xªa/òüø!ß«sb±¼Èé  k’•R^^΀V%8[‹ã‡Â•/³1÷Úš¡ç9¡CK˜‚Ší6|Ýã©cWYE<^gèKpú[Ä€¶/߃e|p[p_°ýöâ ~RŽCsÉJ)..æN@«È‹úîã€h)¬Þ`}VÝmk‹µEZEïÑîø‚ÒVR¾Ü†ïzÇ ã ‹÷葎ýŽÿ4¢ íÊ÷(á×ùazöìéÊm_f‡…Êqh. €ú"døÊ(ö°ß^hÕ6j×›–,}ÃÞì}½ÛvȆÜq^ðP:^øÐºOÃ_º& СÇñÁýÁð§GÔŒ/€† øü4Â^ùùùéýÞ$¼ø´ ë‚Š((QÄã½?ü¾ @‚øÍeW¼ÄgÛòs3Z™’ê 6¹lž'¶µêuâÜjèh„…‹ðЖ Hp[p¸ âìˆm‡î³îwkƒtHÂÃaYÈÍhe.þcE›ˆM Ðañ†ò%hDM‰ˆða@ ÃÓGGØãñ¢ ä< ó´û˜Šj³{Ì–l3[¹ÓlgEÍöÞ…f£z›/1Ôì0‡Í£]{Ín2{gsÒªé=ž´xm€ÝÒ¤Ù{Ûc¶xkÒ³ÉÍútã@Ói7DâÇßט--MZEܬڒV0KÖîWø²¼XÒ4«Ý;[’¶§"fGG€¦Ó.1@4ìeáF³v$­,õ}o¬Jâ‡ÔÚEëÚV‘ZtÌ’Ô±:Gç6•Í›7["‘hÕ¿)x¶¸@š>~éÒ¥MÞלô:í"€lÜmöÖ†¤íI­WÖ ZŠòÌòcû¾ûEǤN±·Ö'ݹQ<õÔSö‡?üÁ|ðA{饗¬¢¢"½ïûßÿ¾íر£Å^¤{ï½×6lØPg{ð-y=èxüà?°k®¹¦Þ²}ûv;õÔSëµÛ’½{÷Úøñ㛼¯9éu&ÚEY²ÙLòDØGbj³£™XÚÄ£c+b5çFñÚk¯YQQ‘ 4ÈÞxã »å–[¬ºººÅû¢E‹ìõ×_·9sæãº(tM™2ÅxõÕWݺ–nݺÙ?üÃ?Xß¾}»Ôýxÿý÷í _ø‚íÚµ«Þ¾Ÿþô§vÏ=÷´ûol— +¶'­R+ɺÛ5óËä~fº›½½Ùluê¾%’û¬tçj-™î¤I“ÜKxüñÇÛ¿üË¿Øêի퀨s̪U«ìÝwßµÊÊJ;øàƒŠ5oÞ<›8qbú]·nmܸѦNZï:ö¼óγ¿ýíovÑEY<ÎLÂ] ‰¢ªªÊ}^}õÕé}9 íCÔð?óÌ3íw¿ûÅb1'¨cý±Ç³Ñ£GÛUW]eùù5Ms…RЈƒeË–ÙÙgŸíÚ¶aÞ~ûm{òÉ'­¼¼Ü¥{òÉ'»í{öì±ßüæ7¶{÷n»ì²ËêœÓоL×lèœ(FåúÈ©S¢¢‡4lذzÇ•«Å‹Û‡~h'œp‚ýßÿýŸ{ÀRêÞyççAF/Ö¸qãÜP›c=Ö‰)á!@ÇDm̯~õ«6}út;úè£íC±µk×ÚСC—„:æ…‚Œ>ÿüó®3^# äA"AácûXô~ò“Ÿ¤ÓÕñ)$:¼ùæ›¶~ýz+,,t£#ž~úiwŒF@hŸF9hŸ†éh_C×T[:Ó9Ùˆ 3gδ3f¸‘Eüh7¤w·˜mJ&ëi53¿$mé³·7%÷ I‹!š7–1ÝùóçÛÀmìØ±ö™Ï|&rxÊ+¯¼ââ…(Hª¦†ÀxàÎcdÅŠî÷ë×Ï (a$x”••Ùoû[çn$¡DŸò(ˆb̘1îS‚‡:Ô%~øïêÄ£x"òÄjk†C:ˆ»îºËM¢¶©F3h„‚†¯h8„ iñKµ®N]¿  À "&LH§•éšþ‰"xN¶"È 7Üà<_:’Ó@» £û˜mݳªüº.;+Ìæ®OÚ‚Mf¥•õÏËKÄ쀒Ìé^pÁÎ(z¸+%ïŽ>}úØÿüÏÿ¤÷iœ“‚§ê…*F‘|—/_%B.=:G/@<™âH*LƒF¼÷Þ{Óyî¹çìæ›ovCV$¢|ò“ŸtmXuÊK¼ð(|ƒ@ü>­«-œ15Ó5BçxäÉÑ$‚Ü~ûíî9´K ñŠí¡ç¢©]!@ÞÞ˜´×Ö™•VX½Y`t¬ÎѹÍeË–-λC⇺H%ówÜq.¦‡ÜƒŽ:ê¨zçÊkD®JGy¤qÄn™6mšs7ØÔÆT›UmO!aC£<ú®Nù‘#GÚ!Cܱ/¿ü²Û®!*Æ"!C£üqw޵cûR:Öïk蚇vXú<§3Ó.È b³#‡˜Uûá,5jGYUÒ ©C­¢cuΠâæ_÷ÐCužš¯YÁf‚³¼”””¸@2RÀ¢¦+Ò´FÇsLm:_/…\†š‹Ú¢Ú¢ ¤6¢a) ê… -çž{®­Y³ÆµE¯¸â ÇR"‡Ú²·Ür‹ Šª «š¼Cm\‰!jß*nˆfŒÑèuúË1@éeº¦&ý¸í¶ÛìôÓOw£%ü9XŠx­RXŠj—^©¥øÎ;ïœÕÒÖL0¯.OÚ¢ífey‰º3ÛÆ_5âÇľfÇŽ‰YŸ¢ý¿¶Ü4QMÕ£`1~!h{¼‘\÷ßå¾ëy~àÝçi›~•v'–k¯_‚߀r½©<Ýû³îó¡O¶ù=Û¹s§F¢™Mƒ÷L÷K‹Â1hh‹Ä= {jy¾ÍßT`öÔÜ›Á=’6u`¥}|L•õ(Œ§gHÕ¹ŠA¢û¾·Ákz”¾ŸÎ·5¹ø5ÃrÎÞùÍNãꫯžžúØ•ZJSKYíRXùí• $dHÐ(^“´7ÖÆ­"/iUñd£ÌÊù‰¸örä0³ÉÃ[Füᇧ‡ªd÷³Ÿý,%´òèA$~H˜xw“Ù= ‹lKyÝÁ«Jc©¥›Í][`WN.·)«\€TÕ PA1)|M!1$(ˆtvòÛóâ4޳QýÍ–l0[¹5f;víÛ§íãÇlP/³ÂVü¥òüÚõOÿôO­®ldCØ[F‹÷Êøqë=Ü¾Í‹æØ’¿ÜjÛ>|Ã}/{¤?ÿ:³‰'¹c®;rA„=¼wIp[®“ßÞ?@ÂÆˆ-íwÃ5G1@G$èý!d÷Þj»gaO·oñ#?²÷¸±f$E-ëß|ÂÖ¿õ¤MºüF›0㛩c»ÛÇï¶âX,=üEéuµa¢q^%€ŽIT §W¸a/òü‹Ý>£cuŽ??‹¥«€Ð x*4ìÅ1RûÜ1)tNXéjäó*Ô¥¤zƒmËœž¡¤=H& þá>“ÕU–¨®´DU…ö*v“§ú˜ áYU·Ï jW †Š@'(T””-sŸnªÛ†Ä‹Ô>wŒÎ)_V/®@Ç òÚ^ú¦u«Úi&žä¦ºARÛ´OÇèXÓÕ<>Â0 #ÁBCa¼xQ«¶1[Ÿµ÷]jf|ÓúO<ÉÍöâžjØ‹ìw¦:´„)¬Üac·þÕúU®µx^^4º¢'@ÆB EÕÒkÏGvð®»lmñ¡¶£è@«è=Ú_PºÂJÊ—Ûð]ïXawæ!ùöówªlg/@kséyöꆄ­Ú•L_·;i/¯O¸ï'¦êôªdÒ^]—ˆ‘ÚW‘:í7ïU·Ëß–3È”þ±”!³-åû2ÏTm+Ùæò$o1@aëÞ¤ísˆ¼7†õ4ë]KY5ûǧö½´.û†Çàž1{vUµ­Ûcõ‚è12ný»Çœ¡µ»ÊlP‘ÑáЊôëV7æ™õ* õ ¶OìH Õµëéí¡cë®PÛ†¢|³S†ÆìSõf"õxþߤ<[´Íœh1wCÂV–&­¸@bg¾-Þ‘°òªñ3Qû(µÿ©©zÝìêÉùöÁö*«Ní»xLž}”ª÷ÿ²¢º]ÿ¾!€hHÌþÞº=-Þ]v@ÊZ»;i‹·×E¦öÛòÒDÚ0’û› ñ¨c y,ß™´iÃâöbj}T¯˜}”2–†õˆY·TC©*Q#hxï¹°Ÿ<$ž2¬’Ψúëªú†“êö³FÅíõ {wÛ¾í=SVÎaâ®7zw­™±±lß~¥=mhÜ™â+S×{ze}Ñ%êy•üÃø<×é2\½\©\Zí…5ñOL­ÿoê\åwå}h’5ÿ$“Zn±DhñÔ~÷Çé—ºT«Ó«0–?„ÁâÚ.Ïž[“t‚‡öÿeyµE‚Ô7fkv™•§òóÐT›Zíð Syñʉy®Ó¢½bpæÔ,0ŸžgÿzT~zé[ë‚׿»@Ü©ÁRõyìà¸S‹ƒÌßœ2\jƒ%éLH=´…[ûÐ’T¥ ص{’6¢gÌ5z>Ü™pâÖGöŒÛG;k,Üá©ýëv[ZÀP/”D’lIµuœÛmJ{m mQÖõ³=Fé.¯ý›Ëj¼MlI¸X²!N5ÈlÅR•wüvyy —Ëw$€¡ø~=ó÷åM5ÄN·£Å­(¯fûòT¢augŽŒ;ÏDr_šj¨½´6áD•9ÊŸòÑ"áECSÛå¹¥†šÎ]¶“¼Û†ŠH -þd·= 4 fû^³M©SDðIITT{⣯Ín©¼ª6ù3«vÏ¢j+NåéI%í£€ä”"…ø?Þ¨J/Ûk]×ä»-µ^Y«eH©ÚU™tc‚ƒ¬Üå ®W9¹íl¡ç ÅQH *ÔÐS0u =Ì ‰jœ0­6¥ÇHu¿ ®¼ˆs²I»¡cªBý#Ú,·} &£SÇÄ”a·p (ÐõM8ƒy® •‘öF®Eå¨íUÉúÇŒLÙç—˜gË’öÖæD ¯›óQô'ç¥gpé]s–§Özf)O«·zѶ¤[ù0akRö¿ö&’uEh=Í#ÖŒ1-îžK›°;ÕNîp•÷‘ø¡À§]•pÛ&ô­/'èx |¼£6´ÄîT†ÖÐÖ²Ú…5©|9°(‡öò¢B7X<*t¥Ñ÷½‰ú¹H^ “úÅmbß=7­&€$\l./v¨çU  a©ŽïPÌ®¡=÷ÕáVïξn–á%Í çÍ,/`(ía´5æÙÇñdsLyšNs @†¿@lÛÚêT™Ü/žÎoJöåéýEqC$–.Ý‘´îyu§ÂÖ°O^˜²ßG×\¿¬:iO­L8AãÈAq—§ûtÓì.I[QZÛ K·¡¬&¯{GyŠ@+átŒdæÆ\Æw+I,6«Ÿk¼•¯´ŒOµ‹—íHÔ=¡¼¢†•I—Ͻw¦âð|r|žHVò½„FyUv¯MCù­½&*é³À´tPÔu{’Î=G7Z=32`ddm.«¬-=4=l-€–G3¶È}]BHÐè’WHEmõ»c¯4IûÜÄ<+«¬é9šµºi“¢Í_86ß¾~Xžë­’˜¡ ¨êÅš½6iÿtpžë5V#HVƒ“ÈdsL˜%©†Ù¹£ãöêz:Q k"—÷‹ÆæÙIÃRöt*¯hx›‚'¶K¶'ìSå¹aï&³µÖÛûÈq;´ÌöT«\QpÔêz¿IùøÃ5yúó“òœÇV·”½÷¢š˜!ïnIÚÿ›œg¥©rbWù·u5Ú)p-8#LЉ5Ïkš‡êÊ·6'íKSjÔ oÙšª VŒ.‰ª·óJA¿üV•‹§9¤GÌ.»ÏÏâo«k‚kJÜϧò¡†ÑÈk«½BMäw…‡(‡>L¤DÍ —»íƒË‘îmrÃÝ]ii—\hyä„yË[u;;ž_“H-u{3Õpz;eˆå¥ŒäJߦI{ëÛUvÜÙ5_ï^”°LÓ#ª.W‡†:6òâV'H›eom®qׯ Øa?z³ªIǼ³%‘ZjZ²Æ“å]bˆAEÃÇ`Ty®:ä•-q3SÞ nÿÛêºù燯W¥Óþù‚êzùqÞ†„½¾±Æ~/h·¾].~:¿f}›òô&sQƒÇêš/®­ÿ›º"/¯KØkjÖ}^›»>a¯n¨Í;Uû¤+‰#?/kNê¼9¦±_°%iïn©vù´²«Èœ@õ9ÌmïìÛ¶lGÒõø¨ç§"tèM¯×5Àô@4.:†X²¿ ÕíQW6ig{}EÇŸÒ?î¼MwЉ]œÖjàdÊŠR•¥ó¶N/¯n»ß áûŸ¡@mÀ½NçàÒþyXy¯,b Æîªìó^{ç³xW{ ŒR“ütT±Ùzn  ø¸š¦B-ßzÂGè{d ˆs视ý U<@Âñ;ö÷{[qÙ¸<ëY`öà‡‰…€0—|nÁ>þ¸Õ UÈ佑Lfw.£``?‰s ×A€œrÈy@ çA€œrÈy@ çÉÏæ ïÏ€6!™Lº%¸î¿'‰ôqÏ×~~ëˆ<‹Çkútb±Xz ~ÊuîanßëÓø1x€@΃9ä< ó €@΃9ä< ó €@΃9ä< ”X,–Õ6@i3’ɤmݺ•ÐäçÂñ /ؤI“lРAî{"‘°¿þõ¯v 'X¯^½ö+íÍ›7Ûo¼a»wï¶>}úØa‡fýû÷Éô=Ó9 }bÕªU¶xñb·~àÚ˜1cêìï½÷\}«¶qåýE‹Ù¶mÛÜ÷ñãÇÛСCm×®]öþûïÛž={ÒiŽ1¢]îaNx€äççÛ‹/¾XçÈÚ_ñCè®»îréLž<Ù ]á›ñfÆãvÈ!‡¸B®cO<ñD;õÔSÝRTTäAk×®M#ÏIjê€n—a6àd.[¶¬Ý *hzÞîÛ·oäö‘#GºüìóöÒ¥KÉÛˆ Ù‰‘ˆñÁØÉ'Ÿl§œrŠ}øá‡V^^žÞ/åÕ Ðaä, s>úh'~ÊI@íu‰Ó¦Ms¢èÂ… ëœÒDŽ9æ[±b…mß¾Ý}ùå—]«±`Á›5kVZÁòèÕW_M?(=}×g 68ñCž$&LprذanßúõëÂýüóÏ;U:l„ù—Géê¸ÒÒRr*@ЉÇÓ‹ 3õ©~õh]õ®¶«NVýªEëC† Q…ëyiª5`ÀëÞ½;7 åí¨íÊßeee.o¯Y³Æåí=zpcš(‚4Uü›6mryNúrP~T½+ªªªœ'ÇØ±cÓÇKô|úé§]Û·  Àåa]Oâ§ok«nö]:¦=ã“ä„¢#%iÞ¼yN-Va+w›‡zÈÞ}÷]+))qB„†Åxâ©§žª#€è»h=xõ2Iu3þ|w]Æ¿ÿýïmݺun»ÒQ-î»ï>[½zµÛOSýîE"â´Þö=Ë>¿6´}É’%.oãý‘»Ôªk×ÃÛ)¿£…`ýüFšóœÔ¾•ã€ò¦†Áxä|àGIxä"ôØcMoS™ ¼,§…«P½Þ"HÎ *0„EAW¤kÈ‹'Se()0©„‘¦Œ!T°¥¯~õ«öÖ[oÙý÷ßo3fÌpÛô]ÃkôõxaÄ#Ï]_Zd œ ÐU8p`ãG– +?6Ø s©Ý®uS º&ï ¡,5’2þBÚ/o 5”·e;K™¶+ŸÊ–VÞ†Ü<2yèÉ«/Óy •ï–Õð—lî›ÚÕ ZêQ½+aRq6Õ¦–‡¶ÉsK£-È8ˆ¼EtŒ¼B‚?¼˜©ýòiØ>ù¹ô2¨€ôQ¤õàô`‚È˜Š PÚP`S¡\&:N^ßgÏžmW]u•óyà"Ï © Ç€ú†­êr¹ßª§éÈ#Lï“È¡í›|øá‡×ωzFuÐÀËÔ{ˆÐ>vºliåmGll;ä¦ðÑh=òÉTNSŽ[Æú.¼¿©÷HÞXI¡ái:WB…ò¦òªoÓÊóR^™ X¬k+(ª:üÕÞ~íµ×ܬO0ƒ"Š6£4$°´WÌ®ü\}Ôƒ$CIÃP¤&kü ÆéÊMGÞ z˜:. 5ˆÆ)éAI4уÒñR´åÝ¡@⇮¡i‚FUç\õTíØ±Ãy‡èš™®ÐUQ q†¨ú)äU‡ª®UÏ‘ê_opi8©Œ.MÚædÀ`öÆ•7ú‚Æa”G"@ëæmÍ•·ÃvsÔvÈ á£1A$jL¦óñì³z4úŒêl—€áïQc÷Jm_ ~–Uµ¥}öèzY¡Î y‚¼òÊ+.D„&Ù¹s§½ùæ›écŠBˆÂF(mµŸ‡îÚÈ -ˆnî%—\b>ø 1ä¡x~HÊôéÓíÞ{ïuB†@ø¡ ‰' ¤*CKMóË@“‚¥™f~ñ‹_8ÍFî=çœsŽÝsÏ=îÅ@B¡Pƒ ¥dCWÆ’>‚¢†êÛ  bµŸ:^F^ØãÃ…ÞŒ2”AZ>ogB½ÂMÙ~衇rCsHøˆ<ž!Aa;Ê‹Ͼè{ÚP æÔs tª¶¯ðíç /¼€¡v´ò½ÚÜ E‘)h±ÒS›\N íùœR׎i&-…¥¨vé•ZŠï¼óÎYùźÜñFT8bmø¥’[žÎ—ÄOõÓÙ\ «ÇaÃ8êS^˜2 Ô¥Ö|ç…zŸäN«Ž‹åË—»a2™z¼2õ€!‚´žø´½ô^Ðú‹?ïÖ§múuºáôèÓåÕÐÊó(oÇdDÐØç~Ñ}Nßü?uî“oËfë Ò¹úê«§§>À¤4µ”Õ.%Ñ%ZåQâ‡ðó“7„^ŒL㓲‰Z›Í5?¢]¢eà©'êøãÏ QÛµ(˜šbvi˜ÌܹsÝìkQu°ï)àmÊ÷`,ßÃe¿…„‘pO<û¢ïs¶çPÏåðèùä“íÔSOuÇüãwÇ?óÌ3.¦WÐx®c ´N£<\¦G}Wl§±cǺ*ó¿Ü«Fè.+½Êyö­Y³ÆÅr”g_¦á]QÔþ͉!¹ìñÆ@Î$~¨wOưbiÉ SBÇwÜa>ú¨ êFC`\MÂÈ-·Üb^x¡Íœ9Ó !ŸøÄ'ìÉ'ŸtFtTaÐHFh=ñ#¸íÀtrƒ3…éžÚ®}·;î8çÙ§@›K–,É8ìÏ>ÈhW£9Jü˜1c†,äññ­o}ˉÙ k €.Ï›o¾ÙN;í4—Ö#<’Q€–-×Ãå»/o÷dzO¢8ž}uïqSÏ¡Î3Ë‹ÕÜ-y¥ vé–Z Ï;ï¼+ÉÊÐR[To¡ÄÍ®vÑE¹8[¿ÿýïí»ßý® fÞTÀüÙgŸuéM:ÕOULM¿¨ç ç ‘Í/Û3‰Û*ß³IBÇý×¹2~öìÙ¶råJçå¡I&´h]Û$ŒÜwß}NøÐlAƒ¶‰'ºïšn5XŽËï\-Ó“L,Vô<Ê}ŽÙóFû®ór±®{üñÇï±}O«j—êÀ’$:'´‹å­žA {Q †³hÈKø8¿È¾à‚ lÊ”)‘ié\¥¡´”¦Ÿž3“K6´LŸÉ³Ï—ï*»å­'¯½Le¼_¼gŸ†7úò\i)ÍL3¡dÚLôÈ´Í —›³zo¸á†´a)dkxËþð»é¦›ìüóÏo°×ñ›ßü¦KSië y¢dÚÖh9Þç=û4|ECåÙwíµ×f=¬1ˆ†½è\¥¡´”¦ÒŠ Ùü®®XÇÂ>@ ÝŒ5o ëSSÝŠÛo¿ÝǙܪ¯¸â ×{¨1â~[C‹fPšB×^# eËôæzö}úÓŸv1Ÿ´àÙ SFr‰Šø¯qÝ?üpƒ‚Æ¥—^êÆ‚«0*í(c\i*m]à 'ý&h¼ ¨ƒeýÂ… Ýz¯^½ðìƒ%?›ƒäNÐ\ƒ8øéí ﮬO¹? õæùý™bzDm‹:'ŒÒºVðxÍ& üg,«ó Ñåº_.¾l6l˜Û¯øÙ'U™«sõ9räH·mçÎõÎóŸ:Ni+fˆ®å¯«²\û´®Ï`YÞ™Ëõð= ~j¯·ùû¬ßºj—Oö€öE2ÖMMÓt~=h(g:>x´L/ï ±zõêŒår°üõâ‡>'L˜à¶IàÈ„Žói{OÊrh †À@»£àx"<Ž»)ƶÿÌä-âÓö×€ý#“w†zö5æÅ\¿øâ‹múôénÌüùóŒôìËæ7 €@»SZZê>GÕนÆxgs¼Ò^ ZŽÆ<û²Y4+Ìu×]çι÷Þ{Lšò´;ÞyÚ´i­v Ÿ¶¿´ÍñìûÅ/~áŽôÑGíÁtÛð샖Úœp ÑeË–¹Ï3Î8ðËTïk_ûš›&QËYgåÎѧߖ©WQi*íàµv Ðz4ճü¥Mž<Ù }Ñ´¸xöAk€mBXp 6l°mÛ¶9÷çK.¹$r¸‹ª'Y‹ïùÓ§ß–ÉHVšJ[×е²ùMÐ|šâÙwçwÚé§Ÿn+V¬°™3gf} <û © €@»â§ã›3gŽû~íµ×¦Ú…o¼Ñ<ðÀŒKÅÅÅ.M¡ktåéÿZ³,~fãÙ§ékå½'ñCH ¾ãŽ;Ò^}xöAKƒmbG}«|ð­[·Î d·Þz«3n=áàwÙ.J÷'?ù‰KSiëQrC¿²=šêÙwÜqÇ9ï=ϱÇ›öèó@ § çðòøã[yy¹ëÕûö·¿]G ’Í´·:÷;ßùŽKKi*í¨k@ë”ïyöýéOjЫÏ>hi@ MâàgxßÎ;]ô¹FîsŸsãÂ{ôèQ'j”à¡}þS‹ŒcûÙÏ~Ö}WšJ;Óu3ý&È\–G}dz:2 ÐnƳ>eûÞ;­+˜zËÊÊœ÷ÆsÏ=g—_~¹åççg4ˆ½——gŸøÄ'ìoû›;Wi(-¥¾Â@Ë—íxöAG&/Vó†hÉ ,µK·ÔRxî¹ç^É­€ý<²EÞ‹/v㻵œyæ™vÙe—¥§S”бwï^+,,´‘#GÚÔ©SÇÈM7Ýd]t‘óY»v­=øàƒ¶iÓ¦zBK”±Œ Ð2å{P¸P!OI“&ÙGá>%lWTTÔ9.* ¥íÍvûí·ÛÅ_ì<ûzè!W¾7T¶7ä’KïãGÅG»ÏÑ»_¯S¯…ë»\¼O<ñÄ=©ŠÚ¥ªv©,Ié’à´–¢Ú¥Wj)¾ãŽ;f‘µ³CAxúôé“QÙ誄{òügpF€(ïŽñãÇÛ)§œb%%%Y×ųg϶%K–DÃac9l#€4¯L÷ÃÃeºÖGŒa\p¹ ¥#‘ºªªªÁëHð¾ôÒKíºë®³Áƒ;ϾÇ{¬AÏ>ßË¥²=ìüîï»xqð—Üç´ ¿¬sº‚2sæÌé©]©¥4µ”Õ.%‘Ÿ+ìæÍ›í7Þ°={ö8â°Ã³~ýúµzZzÙ~÷»ß¹(ÄêmÒ´M_ùÊW¬wïÞ”Š|Ožxå•WêôþuÔQ.Ö‡7âü±ú.!CËÀ"#Z=ªwÅ®]»¬´´ÔÃ:N=‚>ðP—à÷(£ñ`ÿxùå—ÝL²ÖÊ»>‘÷Ö‡~èÒ·€ìêLÇŠÊÊJ{ï½÷lãÆî»ìvÍÒ½{÷f]š^¦Gm —­*£ï½÷^;÷ÜsÝô··Ür‹ dúì³ÏÚ¬Y³lÕªU¶~ýzw¬„yüvÚiö±}Ìyúwã‰'žHÇtÊÖÓƒ²½ièY¨>cÇŽµÑ£G»ü"ÏÌÝ»w§·«>3wî\çõ#$vi¦òµÚÚÇsL»ým9!€H¨¸ûî»í¤“N²1cƸÂÏßôL(£ÉØ MMK†Ô”)S-` n}{òÉ'§ãzø^*}{²ôÝ÷rIØðâF”Ñ\2ŒÃb1@ëä톆5yûí·ÍFcåõ¤;3+,Xà†ÃMŸ>Ýåë>úÈufžxâ‰Íº>4_ —«a1DÂÅ}÷Ý—öì“°qå•Wº¥!2yöe*÷=šÅ¥K—ºü£{(QS‚”êkµÕ~Vûø¥—^rÛ ê<{ %Ê‹ágðÖ[o¹4k§#€d\¨ÔtüñÇ»ïtPzŸŒ(ŠÊ4šFIã„W®\iï¼óŽ{XŠœ{º¡´¤HêeÐK¡´¤JúŒ4Ö q#YnÍZ„\ çÏŸïz‹Ö¬Yãêaõèª1¥}p€«Ã«««íÍ7ßtÓ)îØ±Ã+OMuD¨ž^¶lYº5nÜ8·mùòån›êm¥£z\ ïrøá‡»FÆ2@ë ^{åMå7åCõ&/Z´È5†_}õU׋<|øðŒç7t¬S[¶lq ._ž¨‘¦rDÛe׫Ìð½ÐêÙVü •+Ù^/ÓÃëþ{PÔÆ³¯s {Ý¿ëÖ­›û.‘CÛ”w}§¿Gÿl)äá!/±pü 5¾Ô8 7€åõm#ˆ„E¿/è ’P6ÂåäƒòD‰›znÊWjwkø‹ê`/t©.×ÕŽDN rgUêÇüJ‰R@E–ˆÜg¥Rù -RŠõðTg›–ª p‰2¦H5jÚhžÑ4b%|(PÚk¯½æêm-™ `CDÃYäÑ!’’7Æ_ñ¼4å®ê}y™(Fˆì-Ú&ƒNç@Ëñâ‹/¦×•甕7ƒùPö¶lumWPÔ`#IùSq!4TF¶·ŽLÇŠC=ÔQ–§˜Ê]çˆ#ŽH—²ÙHÛƒCoJZG òiH‰DººøFT»!r{¶÷Du¨òŒâõ oQ«¡£òœT;Yíam—X"!DSßžyæ™ÎóJq3•† tLxÖÕðžÆ$Ái) ,Eµ‹üÓŠï¸ãŽYù¡«ÇGNõ0¤:©Ó°¬zPš+Z ¯”¦[:òÈ#mÞ¼yîAéá^vÙe¦%IÓã*Ä2¬Ô3¥ˆÒ7Ýt“2£Â9¸M3âÂß›Ú;«sÔÀ’ 4öT§{·\ß3¥Þ­p0th=‚ùУüªãlhìXåi•QÇh_Ôl!M¹>4¯,o«×`Ïp^&A¤±¹*~c¦„㧇½8øj÷9mÃu† …;«[½H0Àp°Ž ôÉtL[0sæLÍ¿»+µ”¦–²Ú¥"°$rBñÝG¬z˜?ôP‚ûTÇ g“Vðá@ÛÏÙìoÌèÅ cˆ ám•ëÙ ¹\Ϋš yw¿>»V9¥ViJÐØÎN6HÎÈz¸ E“ösɤJ5”â@ë’iµ–¢Ú¥Wj)¾ãŽ;fñ´,á8þ3¸®¸Ç·óÎ;Ϻwïn7n´_üâöè£ZuuuƒéçååÙ…^h_þò—Ý™òòr{üñÇÝð ¤Vˆœš¸³"3gΜžúØ•ZJSKYíRXq^7€ŽA&ñãâ‹/vâ‡<>.¸à{衇¬ªªªÑô$èX£s•†ÒRšJ;JtÉU@Ú(ïàw ö"ÏykÜ{ï½öÕ¯~ÕvíÚµ¡Eçè\¥¡´”¦ÒŠ Ùü®Î 1@Ú‘Lb†PÌïùqË-·d$>ó™Ï¸Ù`´ÿå—_vqA‚1=¼ ¢4äýqÚi§¹´xଂ¢æ mL”ö¼7nœ :ÔÅü¸á†êxkx‘bÆŒöµ¯}Í>õ\qÅ6kÖ,ûÊW¾âÎñÇk]ŸJKq@”¶®±téÒ:BIXøÈ1$+Dî1Ð2„Å-j{ûu šêVÜ~ûí¶{÷n·Pú©O}Êzöìi¿ÿýïmáÂ…nê[yƒLŸ>Ý ·Ýv[½k+-¥ùÃþÐ]cÙ²eéôÂKðZ<@Ú‰àð— òè())qS×>üðǾHä˜0a‚½ð u¶_}õÕn\/€„¯£4gΜé¦ÈÕµ6oÞ\ç7åâ0\;:ÁøcÇŽuÛ4”ÅÏö%‚¬[·Î‰AcåÊ•õÒ Ÿ¯4•¶ÐµÂÇæ" mH6³®(P©ðžÍú&OžìÖ7mÚdkÖ¬itH‹Ò^Ëÿ† ¸’KÂC`Ú™¨!*íwñÅ»`¨?úÑÜ´¹_úÒ—ì?ÿó?›týLYs€†ŸöVÃY¢„‰L1Aîºë.ûò—¿ì¼@.¼ðB:thƸ!J;x­\ ƒ±k×.÷9räH÷Ù˜Hµk×:/qÜqÇe¼†OÛ_+×Aè`¬^½Ú}N›6-£‡–_þò—6uêÔ:ÛN;í´têñZ³f 7€¼ ó„ņà÷àú’%Kܰ–AƒÙ­·ÞšöÒˆâí·ßvÂG&ñÃ{–(ýŸüä'.M¥­k4ö;¢¾wFrÂdñâÅnÌ’1b„zè¡î!>òÈ#6`À7®ÉG·:6ŒT5“’ÆEéÅ8âˆ#¬[·n­òû_zé%7žëÔSO­³ýÃ?´E‹Ù1ÇãþŽ–àöÛo·¯~õ«Ö»wïŒ÷è…^p.SaäR•Í=ؼy³½ñÆî>öéÓÇ)‘ýû÷ïÔQiiiú»w‚÷²ã•W^q|áÇÛh ,pëÍA‚ô|à"ßËÈSuÔQGY÷îݹé8oËS|ƒüüÖkº¼ùæ›6fÌ+))qßeËöíÛ×ývßU»`ìØ±[Š=zئM›œ¢ß+i5½"›vüøñ}e¥Þ3ŸqôU9¨BÓµÂ(]ýF/ªÑù]¢ÎWE©Ì¢¿S™çÈ#tŸÊ´úÛï½÷ÞFÓk Í}`õ„ŒaÆ91B+W®t½°ÄåÙ¡í*Ke¼‘Û­^ü¢óU¯ª~WGƒ-ªWeʨÓyûØÇÒõoÔqåÿK¨£m:G¿Q¨~VšêL9ùä“ñؼECy:*¯nٲţº)S¦8{0(~Ùœ9d{+ }—°¢sµ]ùØÁ‰Ê÷ºÖêիݺ:2%´ ~@6‚GCۂ„A|TBÆ~ô#7DìÆotyA£ÔNÕ¢uÕCÚ'/«st®ÒðâGpè‹Ï_A zŸµ_ž•jûJ<øàƒ];Rû§NšÎQǵ—%FÕÓmINÎ#1Af©TQÃ\2¡ÂM/‹à*ÄT¸ ‰¿tÖYg¥WC]Ǩ Õõ¤0«Vãÿì³Ïv걿šzH/ŒW¥½+]ÔRî$ÀHe“¢h¿^ÙÖ)5àõ«pWa{ÕUW9ÃM/‘¼6üïÎæºM½G*üõ"ãßp/±^æÿøÇ®"ñžB•ƒ\³ô[Uq¨'Nªxcçëo’Û¤2ª¼7î¸ã÷û•žþ.  ýmRÛK_•”2î¥ÆÍ)#«‚Êö© ð=çœsŽËèž;v4ë9@]TÎúaŸj<¨,•°®r\c…ÖUgûž(¡26ÓPM/!Ú]ªgUûqÉþ³¡ã¢~—7%z«Nñ:N¶€l•ùíéê ÐÙóvSótÔuT>øNE}F5:užìI/D6©lJ­ë÷ãÙEå{Ù¯³gÏvž(²ç›ïº¶Œ×á ÆóðÃ}÷ÝçFHd—˜wå•Wº¥±|#±Dí˰è[¢¶ùß Îsµ—åÍ!qQyOùDmYOÔ1~âýVå)‚ž/Äüw¹¬* ªó*Tµ.qBTO{‰ r!Ra¨¯²ÎSƒ\.AŠÖ+tŽw‹‹BBŠÒVƒ]ª‚¯z$Tèå“§ÒQ¡¯‚XÞRËö³Ÿ¹¡;RÐõ»šrÝlPšº–Wð¤ôéwJØ B‚Šƒê^Ýÿý6cÆ —i;ßÿFUfR}™¾ûç’éoËæ÷ùŠK^éK¬jʽRà¡Ln™zÚâ9ä:2œÂø€¦ª_}c'ܳª²^¢vCBHØÈô×ËÕ>|\”1)ÏPu’¨WM1Ä ?õË&PƒèØce ·›™·›ÒpÌtygÈCDS}Ê®TžB‰ì7uJÊ–”í({^ù×7ð2å{¥+;O¶§`G@¶ïo8HÔP_ÏIh—˜¡6£:y%º©ýäó<#%–ÈÓCǪã<èñ²æ· åIÕ§þ»Úa^”ôÞ%Bòx 9:F×÷ÃF•žÒ—ç¾Ú¿ 툷!‘A…œ 5-ÞÍÕ2ò¼ÐËõÀ¤…½tzµø©‚PÂÉ5×\“Õõå= /qÁ˜y.èEñÇúƼ}útw¾ÄÖùjÔ¨÷6i?Ûã<ê$™7ož3ðT¶ûò]¢¼Ê~¯ßÀÐG€ýËÛ"NÇ4%¯ú@¦ )$˜ÊæwäIXQž ÚZWÓÿ¦LùÞÛòòæÖð€¦  M]댰wˆ ›%)(vøïa!į+_HœPÇ¿PÛJï¹ÚWªß´_í.µo”?ÔR|Jµ5-ê˜ úÍò”R~Ci&Š(­¡R©ÔØ–BÕÜc½VÁ7ï¼óNW˜ê8¬Šà®‡/×¹_üâ®''8ˈ<@hSŸ/õàmWÁ/ÿ?{÷lGu~ü¨ TAI HˆÞDG 0Åà"Û`;1Ž!N2Ù€ËLœ8NùÇf2Žmdy2ŽM ž`Ó „b$Dï½KBI‰"Ô’øë{¬ó²oµ{ß}Mï¾}ßÏ›{ßÞ½{÷–³çœß)Ë‘çtU•"RYÅæ5‰&sOÃC˜ „Ë ñ'b~xmyÝ–°Ï3Î8#\uÕUMs}ä£è xÝTð$`>Ëzž_Ïq”½·¶ì¿5ŸÕ¥—^ÚtŸ(æ”)SšþßR߃$UÉÁܼP²±‚ÁZ ÝjS×Z(q~/›¼›¼‡žxäݰ²Û1d•}°>›7d_¯Þí²ÇE€%¿-WmcÈdê "™¶Û—¶³sð%”·ëM«ôê @’†—ó?-æùh*ù×¢¼Ÿ-óóºEé>»ì|R{"ù H6ð‘ hä/w›|äo³lð#ݧn›y)#oc]êy•¶'Mn¨ƒ•m“E@¤µàüÙöâݳôË,6-Ô²OŸ>}FOûÑñã¡K•ØüÉŠ}k®.†‚ðœ–Æ%·„a7ü°²•hÝ8Öü¬£^7+Ûµ©ì³ãuÙ¦èu[z~{?ӶŸÕ–þ$I’Ô2´6Ó;—ò=½4:úòÔi®ZÃ=ôP?tµ¹Zô­ÛìsÊ EAŽZ·EÏïÎ=÷Ü7Þ¬ In\VoZÖf– ÖÆJðeÓ-¯(²ÛÚ਷§òKåš.ELàÄ¥·²Ø/­^E?Ðö¾n‘–‚ ÇSöºu飲÷ÖÖý·÷³ÚÒ߃$I’ZÆÜzô c"F†³ÐC¥£çå¡4òåt©µuТÿˆ«¤¡1Ù‰M³Kþñ²}T!øQ/ûev\M…¡ ëèêk'K’$IÝ QÌ5Ò™²Ãd¤ö(º Ò0˜ôxþ’¹Es1Š.u[´MUé&þüÏÿÜA’$I’*®,˜‘(5I·µ‚õ:ªü€I’$I’H>À‘]—]_+ÀQk¿õ®¯ ’$I’$5 ¢@Hv}Rv)Ü–=%ð‘‘$I’$©•Bò·v=I’$I’ºz{~´ô¼žÊˆ$I’$IÝÖéíG I’$I’ªÎˆ$I’$Iª< ’$I’$©ò €H’$I’¤Ê«kÔ 6øII’$I’¤nË ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ìwÞ 6lðƒ$i“+V„eË–Õ½¾½È‡-Zä/õ tÔYç“-ù:|毽öZ›Ÿ¿~ýzϪ¤¾Uy#o¾ùfxä‘GªU«Â¶Ûn&L˜¶ß~ûnýž¦M›¾ño„þýûûK•$UÊ=÷ÜŽ<òÈзoëŠ"K–, ï¿ÿ~Øf›mêZßšÊÂìٳ믾ÿïׯ_8äCÂV[mž~úé0jÔ(¿4©÷ßX½zu³u¤qãÆµ+•¥ÏtÊûhïù¤½¯Óï—}<ûì³açwn¶ž ËàÁƒk>—cš9sf8å”Sâ~<ö< ,ˆ¿A~wÛm·ø»xá…b#=öØc°ÓN;möÜûî»/¬Y³&Þç7{ÔQGÕý\ u"èñ«_ý*{ì±aìØ±añâÅMzOrë­·†Ã;¬Û~$IÕGÞýÁ4Ìñ<÷Üsñ˜Ž9æ˜XÙX¾|y,¸­[·Î/KªÓGÓõ“O>vÜqÇ0räÈЫW¯v÷h.KŸUÕ™ï÷ñÇu¦Züžxâ‰þ {(‚sæÌ‰¿?Ò/ #FŒ}úô‰õÌý÷ß?:ïºë®0|øðлwï˜îÙÙÒï'­ãñ²çiƒ7Þx# 2$Lœ81þ¿çž{6}Ð=ôP8üðÛN¾?üp8ôÐCãøÄO„Ýwß=ž¤ùð‰¬r’Û>õÔS1JÅ6cÆŒ‰ëyÎ^{í|ðÁ å1Öc?`ÿôHyñÅco”ƒ>¸éË}ýõ×ãŠÏÝe—]J÷›Åsh%#úVtl¯¼òJ|}NXü˜öÛo?S¯$©[¡µsîܹ1ÿ&$ÏüyóÂË/¿¶ÞzëX 8p`ézºmSÀç>ݶ)è?óÌ3±2A0ƒüz×]wmöºk×® . 'œpBS9€rEBN èÒ¥Kãÿ46Ð;3õ<Íî—×§ìÁóɧɻ)_Pî`=-¯¬çuØž÷@aÖ°TÖ¨µ_žŸ?©Q¤ò.ånîó»Oåê²tT–îëIŸEéô•Z®©pí»ï¾á±Ç ãÇår^‹c ¼ÎqÝ}÷Ýá¸ãŽ óçÏßì|Âk?úè£ñ–ã£LŸï­ÑÚôZv>«÷|İ–üûã³ås¤îÁq¦^7 Ÿ ­ï;Cnxà0zôè¸]ÙñS齃a¤«I“&ÅJ=¯C âí·ßnªÜq,4FRàÁkO(§ó\öÅq iMz-;oÕû~ù¼ŠÞ_v=•ÐÔJ%“ǨÐòž‚%¼vÒRvüE½éëù<Ôý½÷Þ{MÁp?ÿ{ Ý :4Ö;S>Ëo–tÅB†ýT×-{nW¨DNzŸúÔ§b ]nRÏŠZHÜœˆ4xàáâ‹/ŽÑS¾D %_ýêW›ºôÐs„“ 'štÉï‡á7l¦OŸ¾öµ¯Åãâ‡À—Ÿ0–.á5ˆðrr,Úo: ò¾>ûÙÏÆýqò.:6çµöÞ{ï’$©;¡"BžF+eÊ[i©ä6[P"K­O…~Z7³•ò[ uÌòhηVe‘ߦ¼5õਵ_öEàT|èΞö“†©RÁ!±rŸ}´t¼eÇ!uE¿ß²tŸm l)}fÓ;û£—G PƦg½0ç ÒŠ•+WÆƲó ½ôÒK1 Ó;"[)lKz­uÞªçý–½?ê.¬O=Âx>u Ž!õ~) V´t~̪çóPõ¤a, é†4Ë(‹ô[O½;ø Rç7H=–z*é™ßgÑs»ä\T•/†a/çŸ~úqÅW¶ðá$”¾8 +œX¾B„öÇ?þqøÑ~f̘Þ}÷ݦç¤/¸h?œ(Ф®j)–ÐMï7¿ùMœ³„qvlq~¿üØ®¾úêXI“Ä´tl’$uGT(8ÑÕ–å ƒŠù2•lá+u—-[Ÿ¿O¥ƒ ùrb’Geˆ‚ZÙ<ù.ºk­ýf+4eÇXôKÇ[tRw €ä¿eé¾­é3;A6 À> >¤®ý¸O¹ŸÿËÎ'¼6½#X0T&Å–Ö¦×Zç­zÞoÙûKCŒŠ‚ô/»ŠK=çÇü±Õú\ºí̲­+IöËå~ `ÐB3uêÔºNàÈFjó'¦„n}Œ:çœsâ‰æÊ+¯lñDÉI†á1Df‰ns|µŽM’¤îˆÖ!ºƒS`"?Oþþùç› ø¤ÈCËÖç¥ =1ÊzL¤Ö)ÆÕ3WYE£ÞýrLT 8Fzn¦–¯zÔs¼RÕÓ}[Ó' ’ôN`¸;es ~pŸ@ J ·4û¤šý°oÊþEç“´ê ›!=gç¼hmz­ç¼Uëý–½?¶g= «¼—T÷á3¥q˜ùHhx¥‡<Ï˾~kŽ¿¥ÏCÕ@€¡›iÚÒ sØPW¦GÇ>ûìÓ,P™¨£²MêÝÈz‚keÏ5ÒFÌŒœÆñA3®ˆ„LÂ&RÉ—F—·¢^!|¹lKæ$Àv|iô² ZÊø8¾Tþg_íÁƒ':"²œˆ²]t‹Ðûã´ÓN‹ó~|éK_ŠÇWvlGŠÆJ’ÔˆfÍšÕtŸ‰Ì)T3n˜üŒ‚<ëè¶MÞGk#ù|j…*[ŸÇÄà EeÒ?òÊü„ƒ Ca™üücܯüñÇ—{­ýrüŒó§á…ý0Ùb½ê=^© ø}¥ûüÜõ¦O‚ii^<*\ ¢Oƒb*ϧa$TÔÊÎ'”Õ)s³-þìÄ¢mI¯õž·ÊÞoÙû#(Á±ÑКK™X9¡ÅýÞ{ï[^Ÿç3@k¿¥ÏCÕÀoŽ:êwÞÿg”¿êÍ÷Ѥã÷Æ¥oO>ùäØ{‰9gØy Ïåñ²çÖÓó¨£mLó½èvÀÒ/³ Ø´’ø ¼ýöÛ¾7IRµnݺ¦|ãÕW_õ‘Ôé–/_–-[Öì$©úôÚhã-KŸÌ²Õ¦eëK¿~ô£g7ú¹ë®»ÂàÁƒÃÀ›ÖÝqÇ›­ÛÒÇôÌ3τٳgÇeõêÕaĈu?ýúõáûßÿ~8þøãÆ ¯ýë°çž{†~ýúmñÏ2¡zà 7„wܱôs­ç}wÕ{“$5N¾M#›?¬Zµ*®'¯Ùn»íÂûï¿f̘Æó‡z(Œ7ÎOjð´=jԨл÷ŸÚY_{íµðÊ+¯„áÇoñã˜;wn˜7o^\8×lµÕVu=wÑ¢Eñü´Í6Û4ƒ¤ždÁ‚1Ï}饗áòä+V„'žx"Ì™3'¼üòË¡oß¾1d•mSÏs;ÂÆzê¥oÖnZÖmZÖg–úVåKzòÉ'Ø1cÂ;ìдŽy—]v‰•õ®:&N˜é˜† Òæ}‘‰pÀaë­·î’Ï2!<ýôÓñ8N9å”yßù÷vË-·„Ã?áCiê…Pöÿ³T±óÍ7ã²÷Þ{oöº{íµWØm·Ýš­c¿üÐûý4¨é÷è£ÆÂßþûï¿ÙþR†RkK—.ë‘‚ Gyd‡|޼÷É“'‡ûî»/œtÒIMÑýzÞw=ïˆ ¯Ab Qì·ß~ž…$©‚èÑA‹ðo¼[‹S^íÂ6wß}w¬Äd½óÎ;á¹çž GqDÌ©èÇg§ü]Rczøá‡7K³¤õ|0–­"M9²-•¦¢õ”é9Ö¬Y~ùË_†m·Ý6>vÛm·ÅûŒŠ Ý È(Z£ž÷Æñ!atEDP’´e¼'ðAWs¬\¹2¶Ro/dQÁ O§ç ÛRé™4iR˜8qbxá…ü`¥@€’áÐ,)'Ei–´Nc"磜IWù²õÆ ‹eÊtîà¼~dƒÛìëŒ92îý0<‡ û¥Å›ãJåíì9¨ì¹o½õVÜæè£Ž |”¿ ~¨;ã÷œu@à"õâb~z‡ÈÜgŸ}b}Ç:è ¦ü»h›Zë·´JõùïÿþïfÑ$"µÉ©§žÚtŸè.'MNNœÌŽ:ê¨Ø[/î?øA vpr+{l„ 1ø@4˜m8yñ‹_,<&‚-)ò|úé§ÇýðN®D‡Ù×E]Tï¾ûnÜÿßþí߯'´Œq2.R¶ZÏØð:)8ÓQC€ž}öÙ8¤ˆ9™в1‘ù÷Íg]Ï{£ç*EW ]’$mt…¥=©$‘W¤ŠGò Nä=©&5Æ*“¦¡3’º Ê{©<žH´,Ͳ=ÏåDÊeë÷Øcpçwƞ”}S/²<Ê’0È^‰¤ì1z]0(è†ÛZE'PNÐÙyщ·¥}d`¾‚?÷¹Ïmve&8MÝëíeA—%zÍL™2¥)ƒ Ë!†Ä´¤µïM’Ô3ÐàÀüPð³Ã_ŠŸÑÅœqøT8¨X‘‘ßQ±’ÔØH§ei–²aºò 4„»l=åYz’ðxÑð—Ö ~ÀröE]‚c«w9åbÊÉÌ‘WT6—ºÒ( Ýä±ü¾ T0ß õâT¯$­$adDzCÑÀ]¶MÙú®Ð#&Aå$F”˜“[êvÇPŽ„¡éDœíýQë1"ÍÌiA¥þì³;æ*ÁDËé‚G~xmËLO—O~ò“±ÇJÑ‹gk{`°O†§d'%åÇËå‘ê €´æ½u¬ÕZ’T©k{Yö" ÃdbB#hä  ÅÄ„i2pI‰^÷ßaš¥rD¹›ÞÅ4:2Éq­õ”Ï)ŸŽ;¶ôõfΜÙtÿ˜cŽ)½š"uÎA4˜f'k¬u‚&·ß~{üŸ–rŽqK\¹Qê üv 02±)¨ÿ’VÓDÁùäV_&Ü ÷É_ŒÏñúë¯oºÓÒû®÷½P¡— ï3ŸùŒg!Iª ì¥Ô³ù cû› )}û†øÃM÷™aTNÒýO<1ämy•CvÞ=Pžcåè²4K+2e@ZÓc”³‹Ö'”u³ —µŽ#IçÐý>uÁgþ9ʶì3;&{*z.=ØöB@üÏ%¾Ó{–º#æÚJÁÅ”î˜6uéòõ)®Io+˶)[ß6¾v/ÆŒ°ôË,6-ÔìOŸ>}F¾H‚ùq€ßùÎwÂ…^¿8¾ˆìšZJ:_æa‡Ö¡Ç™&Sj©+p†¾QKÇDo—k®¹&\pÁ ñÔûÞø®º:qH’$©óQ)úãÿØ,ÀPk=CN˜ ˆ–çC=´K= áK“8Ó+…€M~>IïÜsÏ=qã ˜,߸¬Þ´¬Í,z÷¤¤Ö,³D¶Šæ)zŒ <Ý{L7ÜŽ–&5m º¥«ßi¤K…5Šzß[W_Z’$I[®|X4 ®l==“ÑåðÖbx8eoÊÜLözðÁüXßžþ0OFYà£ì±+®¸"Ž]<óÌ37›`´«1Üå¶Ûn‹3lsìt üøÇ?î/]’$I ‰2kÑEÊÖ燳w%æ4ØsÏ=ý¥n¢G ‘$I’$IÕãI’$I’¤ð§ž’$I’$I•fD’$I’$UžI’$I’Ty@$I’$IRå‘$I’$I•gD’$I’$UžI’$I’Ty@$I’$IRåõ­g£ 6øII’$I’¤nË ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ’$©!lذ!,Z´¨Òǜݾ;¾_©£­_¿¾MIR[ô­ÊyóÍ7Ã#<V­Z¶ÝvÛ0a„°ýöÛ×,€üæ7¿ gœqFvÜqÇ0räÈXA" ÐVo¿ývxã7ÂqÇúôé Y©ÒõøãÇ2Bg)«ÜI=M­tXd«­¶ 'žxb]uv:–ôAŒ9sæ„cŽ9&¦ß{î¹'Œ1"ôíÛ7Öµ©S׾뮻âzÒ*y:ÛrËãÔ£iè`›áÇ×|®6àD;dÈ0qâÄøÿž{îÙôØO<vß}÷XÈ"¨Aº_¿~ñ1¾ TØb»½öÚ+<øàƒ±%†ç¤Ç_y啸|¾ ¾ÀýöÛ/®ã‡ÁºÙ’$I-#?NîSQy.ÿÓ+béÒ¥q4FТÓÐWZ²9.žËýlЄui;‚6Tüê9æ< ˜/½ôR,Ç„­pÌsöÜsÏŲJê=#5jú-K‡ôö ð‘M'mM›¦ iËÉc£1€ŽäÏ .Œyé/_føyõåZÏ5Ò&Î?ÿü8<åŠ+®hÖ2Cä)”9ñ¦nµyù/®ÖkÑíõ§?ýi˜5kV—}y’$U±•Eà€…&ºá²tÐAM©¢Ê½(hyJ“­ÕzüüÙ«N䥬’•ÝGº_ï1'T{ì±Ø¨“†Ö¤À »ï¾»Å ŠÔ•¥¢t˜íî^6/H½ Ó…ÔyhøÏÖo³=B)A/¬}öÙ'nGÏc{†¨Ñ+$¬¨÷¹@Z‰“àá‡{e<ûì³Më³_ ÷˺ÛÔ{Ò%‚ý‘|$œsÎ9qøËu×]gJ‘$©“0ä”á#Œñ§å—@B~â´l^Ÿæ÷JÛo—M°Ê6ô2IµJ·„ç¦ “@r¼õs3lGËxö½áøÇ‡Ù°©QÕJ‡Eé¤5²éØt!uz;2j‚tÆÂFXG^™Mß7 ôÜLisÀÃ?ƒÙ Ùs»B%&Ae<'W>D>P¢I Æò?_  N”­EÐ$Ýå £û?Æõ2Wˆ$Iêä¹Tt˜,‘ü˜.ï4vd И(‘V* `lŸ<È÷y.“æË4~ÐZM+2Ûg[«êEƒÉNiõâØË~ŠŽ¹¬å›IÖ™7IiÝæ=ƒá04¶° LŽ*5ª²tÈïŸÛ|:il:æù¦ ©s~Éï¼óÎø?£$È—˜Ëй°¨s3d“õÔ‡©ßwß}áä“OŽyN&4N˜N‚4[ôÜ®°1îE·–~™eÀ¦eÈÆeð´iÓf4ò—Äp&%åådˉ‘ù>(]tÑEqþ&KâË`vZþ1l†‚Kö~’]wÿý÷Ç/–WˆáÁz®iÌ—M”K’$u.òù²ž4‚ÐZUô8…/Æ—áyCÚsIÛÔ*ÝšcÎJWŸËï£Öû’MÑï•ô7cÆŒpÊ)§”¦“zdÓ±éBê\iHh6½’O¥«=eˆliRÓ²çv¤©S§ríì—å—Õ›–µ™eC% é$˜Æ'e‡²¤ Q«t¹½öºø°ôz]ÚSX’$I’ªŒJÏí·ßN=õT? I¦žHߪ¼Y‚µº­¶5Òœ•Vµôz’$I’þTnfòCIêòóQÕß —¥óÒX’$IRU86–ų—Ô¤®Ò·êoð¼óÎó[–$I’$©‡³k„$I’$Iª< ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª¼¾õlÔ»·qI’$I’Ô}Ù$I’$I•gD’$I’$UžI’$I’Ty@$I’$IRå‘$I’$I•gD’$I’$UžI’$I’Ty@$I’$IRå‘$I’$I•gD’$I’$UžI’$I’Ty@$I’$IRå‘$I åƒ>‹-jˆcY¾|yX¶l™_ŠÔIÖ­[ç‡ i‹é[•7r×]wÅBJ¯^½ÂàÁƒÃ¾ûîvØa‡Òí7lØ.½ôÒð™Ï|& 4È_‚$I[Ðû￞~úé°xñâøÿöÛo8à€Ð¿ÿ°~ýúðÔSO…Q£F•>ÿÑG cÇŽ Ûm·]üÿ‘G C‡ »ï¾{üöìÙ¡OŸ>aܸqí:Î%K–Ä Ú6Ûlã—&ÕY&'}÷îÝ; 2$Œ?>l»í¶¥ç3f„SO=ÕNj ,/¼ðB¼O¾J~»bÅŠðÜsÏ…U«V5­=ztáóçÎÞ|óÍpä‘G6KïÏ>ûlxçwBß¾}ñÇÛ%ï­2=@ž|òɰõÖ[‡#F„•+W†_üâá‰'ž(ãOÊ´xŽ$IÚ²pP:餓Â)§œ-~øáºŸ?pàÀœ“¥K—†×_½éq+4ˆHÚ²¨wÜqá˜cŽ ;í´SxàbÙ¼ÈV[m>ô¡ù¡I „@Å‹/¾Óñ¤I“ÂK/½Ö¬Yól‚“'OGuTxæ™gâ¶ çfBÁ’Õ«W7Ûïc=;üñ]ü@ß*}Y|!»í¶[¼¿×^{…Ë/¿<®£D0„u>ø`lQJ-D|Y|I{ï½w,Lá7ÞˆÝ]÷Øcø8Á•·ß~;F°ÇŒcª$©(H¼8ùä“cƒ話páÂðÖ[oÅÖbzt’ÿØàþá‡{‡$;î¸c, í¹çž1æ¶¥·û$§W ^}õÕØ#ZöÛo¿Ø”2…±ükPØ›?~¼Ï’)ìgΜ9ñ¹”7X¾PŽ`ZÌ(,fSê©nPæ&øAú›0aÂfé… ÉC=+D÷Þ{o8è ƒšzfÓ“ä°Ã‹­Åùt'©ó?“§¦Ž2©ïºë®Mùé›|=gÍš4XOš` ÁÏ„m8ÏvµÊÎ’ºÅ¦ÏM7Ý®½öÚÐ0`@\÷¿ÿû¿12EŠV˜Z•®¾úê0oÞ¼Xã>Ýy$IRÛQ¢’“‚ y-­FX»vm9rd ( 6,¼òÊ+Ͷ%¸AƒJÝlùŸàÖÓõžÁºÜNœ81¶ZÑZõòË/ÇòÏË¿…4*[´|ñœÔ‚Å~èL…í)ðûI½MèÉbðCjŽòxšG'Ÿ^¨`‘¶Rš~íµ×â}‚’lK«(ÝIê<¤Éì( òµ÷Þ{/ÞgÊ êÎôØÜgŸ}bÀƒÇ ^’ç‚ü7Û#ï¾ûnìl@§‚Ô½óÛéŒN)Z„<ðÀXø¡°“µÿþûÇñL `DÁ‡u´(ü˜2eJ8äCâÉ—Ö"I’Ôv©b“ǺT "8B ¨,¥JRSfããäóäÕ2`°=÷Y—æ£õ˜ÀJ¿~ýâÿ´d¥FŽ¢× F…-µn±ß´ŽíùçŸeîg'G--õt¤#•YEé…òyÆF „Þ#-¥;I[.ßskÈ Ï¤Ñ Í÷Cú-Ê×êâÔËéyôÑGÇ€J xni}«üEÑŠ“ <éÄZ„¡1øÃbÁ‡€…#&;#ºÅ>.¾øâ¦/ŽÂ–$Ij;zÐ $¡pDœ Y-IºÕÓEЃ¼›<¼,ÏÏYŠ^#L쨼±ž±t|ܦ¡1ì§VÁOêÉèÍ‘D¸,½° emÊãB˜<‘ç–¥;Iƒ4—:€™iÁ4m½@SOû¤—  NMo ˆ”/d—]viVˆ)ÂÁü —a¡÷žðE}å+_1%H’ÔA(HÑ+ƒîìä¿ ÂC!‹4êA„ùR/ òs*WTšR^ÎëÐÕ–ŠÝséý‘®S„®»<Ÿ å†Ôƒ„Â]ï¹Ï~xœJ\½Ç*õD IcNzÇý¸dþÒrªd¥;I'ͱEþFz£NM&N H‹Ih|  Ûó²yhš4•ôMoËáÇé|nn¼ñÆ81ÚÎ;ï\×ó¸" c„9I§Kqñ\z€,Z´(vÃãËå/›+IRû0^øñÇ• ˆ=ôÐVUn¨Q˜JÃXRÁr@‹L%Š Ùî¾ûîXpãuöÝwßÒ±Ç@Èóï¼óΦIPÓ~(W01#û! ÂÐXI›#ýPy¢ÌÌ0òZAÇ|„4FïìZé.¥oIÞ\øƒy1Sº$-§ ÂÓÜ=ä•ä¹ôèd^êÐÙÑY¬'-“ÓPÁþÊzjv¶åŒ^t‹`é—YlZ†l\OŸ>}F£Q—\rIÓ„I^(X1YRêõñï|'\xá…ͺàe×qBýÿø‰ú¾д Cbn¸á†¸¾hæaFjI’Ô~T’È»;»BÃkÐHRÏФ–æ|@†ýPfHÝx%u>ÓÔ5ù3²ùfJ‹äÙÙü1Û;¤#óâÖ:÷ÜsOÜxÃøÆ×¬Þ´¬Í,*élLÔÂI·l$I’$Iêõ@ì?V§ì¥€$I’$IR÷bwI’$I’Ty@$I’$IRå‘$I’$I•gD’$I’$UžI’$I’Ty@$I’$IRåy\I’Ôé>øàƒº¶ëÕ«—–$Iê@$IR‡«7àÑÒó ˆH’¤ŽbD’$u˜–e—:ÒöB$IR{‘$IíVب·'HK=? „H’¤ö2"I’Ú¬(ÀQk]K=@Òmv»lÐÃ@ˆ$Ij«º 6lð“’$IÍ´üà~=’¢`ë²ë˶‘$Iª—=@$IR«åƒµe÷³ëòÁŽ´)êù‘ž$IR-@$IR«”?jÝ6,Œ7.Œ5* <8 4(>¶råʰbÅŠ°hÑ¢ðÒK/…%K–4í7øÈþoD’$µ…I’T·ZÁ|àƒ!´{ì±G8úè£ÃСC ÷Çz–Ñ£G‡#<2,]º4Ü{ï½aöìÙ¡wïÞ›moD’$µ•I’Ô&eÁ–m¶Ù&|øÃ;í´S\ÿú믇™3g†;ï¼3,\¸°©§=CÆŒ&MšŽ?þø¸ýé§Ÿ·¿ùæ›Ã²eËâvùa0=$IRkm,;ô¢y…¥_f°i²qƒôøøøÇ?®¾úê°nݺ÷G€„myÏeì‹}²ï¢ ‹$IR½ €H’¤Õº’K ~0ì…žôÖ¸ì²ËÂ…^'8Í.ZZxÏeì‹}²ïl¤žã’$IÊrI’T·²`˜ó#õüøÞ÷¾W`=ó}09*âr饗6 aIöAïN8!îûw¿ûÝfût>I’T/ ’$©¦¢@F¾çÅøñãÃÎ;ïçüøæ7¿Ù¬·F6HÁ6?ùÉO¾ûîÛlôò8ÿüóÃk¯½·ãùܲ/æáy¼Æœ9sšJòƒ!’$©ŒC`$IR«äçýà6õæøÙÏ~ÖlØK~ûüxðÁ÷¾õ­¸Ì˜1# 4¨p{öÅ>Ákd_3»­$IRKì"I’êRtàR¶Ûm·]¼t-“˜–%Î9眦àÇÙgŸÝÔSãÚk¯=<èý‘öŸ½ì-ûœ:uj¼D.¯õæ›o6;&‡ÁH’¤zØD’$µZvþ†¦àöÛo¯y©ÛÃ?<ÞþêW¿Úl¯¾úêfW•IØ'û¯•Ÿ{D’$©@êðÎ;ïÄî¶’$õ4õ\ueäÈ‘ñöŽ;î¨yu—qãÆ…U«V5m÷ÉO~2N†ÚÒUbÒ¾³¯ÕÒUi$I’ò*3æî»ïË–-kúôèÑáÀì}O›6-NÌÆ%ø$IÒÿ!Ø0dÈxáÂ…Më²CXÒýÝvÛ-<óÌ3á‚ ._øÂšæýX²dIøö·¿fÍšUø4B¤}óZmîrÏ=÷„#<2ôíë`©³ÎÖ®]/aMzÝ}÷ÝöÛnÛé¯iÚ–:΂ ÂìÙ³ã}/È¿³ž{Î:è fëßÿýð /ÄØc=âðÕ䥗^ŠÃX8âˆ.{o•9K<õÔSñËÙa‡š H’$©c䇦d{Y¤@s€=ž½?vìØ¸üþ÷¿¨ý÷ß?|þóŸ_|q8ýôÓã>ФõùÉR³ó´¡÷‰½C¤ÎE:£gn>ôÐCaâĉÍÒng¼¦i[ê1¸âÚ1ÇóTŒ#FŒ ˆÀxûí·ÃÖ[o]˜o¿ýö1o_½zu¸ë®»ÂðáÃc@ô±Ç‹AÊ5kÖtéû«T˜t¯½öÚ,:E«Á¢PD ÇŒÓTâ‹å fý.»ì×?ñÄq?LÐ6jÔ¨øX=û{å•Wâþ¶Új«¦HWÑ:I’ª )z¬–¯ýë᪫® C‡œ‚ È)§œþû¿ÿ»éê/ÌýÁ} ]ŒÛ±îÙgŸ½>)lvØa¡ÿþá‘G‰…­uëÖÅüy×]w­ë½0ñjjå¢ÐÆ$­Ò˜k„Vë¹s熥K—†C=4–èqÊÕh(/pL‹- Ç{l, ²-ÇK™‚ò?òÞ'î¿ÿþX(¿ ¢Ñ¿ýío›Z–n¾ùæpýõ×7}iõì‰Û¸ÏÉ”¨?†¢u’$UÑÊ•+ã-Whi©PŶ\ö6,yúé§ã-ÃWÓ:* ä¡ôè¤p•öýÖ[oÅÂ-ʬ£±p@¬¬Ð­öÅ_¬ë¸i…"˜rÔQG…I“&Å‚û£C¥'3Ý|i0¡²D… o¼ñF<¶“N:)þÏkRy¢ÅlÞ¼y1Ãñ¥üŸ÷ýÞ{ïYARâ–/_Þô?iõ¸ãŽk–VI÷¤m IÇù´ßÞ´-u~ÏÙÞÜO½6è¹IðƒgBÚ!R·Î"-$LÛ’F¡§V¥z€Üwß}qlq:Yò!ÏŸ??|õ«_Q'>ð‡~8~i´2%lÃØbNºœ ‰à%Îã„Y´?æá‡ÁóÒ…G~$IUDå†B­CTÊ0ö—qú\ò6.›À”Y aܲ¤žšT’ÒpW1Þ}÷ݦ žC…¦Tz²¤BåöA 3•%Ž“‚¯ÃëRÑI¯M«›´Ž›qÏé=ÐC…V0Z•)SÐÐÂþ¤ž&µgƒ”»ói•²õŽ;îØTQJ爲íMÛÒ–Kà hHZæ÷ž½=i7õúHHS¤›tõ·FR© œ4ùBXh9â‹¡ÕèÇ?þqøÑ~[œRAéñÇ¿ùÍoâ¥ø8øHò_`R¶¿=÷Ü3…ùéO'pãä\´N’¤*J”Nž<¹ævteÇßüÍß4»Â ½9ÀS'Ómž®²©!í;5td&TRÈש4¥¡©õ(š3„` -ÖTrR7`ÊÜçuR%‰_v?´€Ñ3……®þìƒÊ•0*X´„••/¤*£¬œææ#¨Á0þϧÕlšJéªÖö¦m©sðûÎÖ]Sø¹O^Îð2Òv>ONÛ?ú裱CBÑˆŠ®V© Œ+ÊÎBá‰1S§Nm¶­SŒS:çœsâ õÊ+¯¬yÎþŠö‡|ä#±UëÖ[o ×]w]8óÌ3 ×I’ÔÝå'e8(A ºŒ÷»ßmÖÚ›­Œüð‡?Œ2ßA S¦L™ófòc†Rð▅턤îèôödÕlå†Ê ù3ÝÒÓüõ × ÇÀñò4tP¹á>•žÅ‹‡½÷Þ;àhÉâ}PéÉ¿?ÖÑ-žá±´*SÑJÇGK2"ÖÙE^= Ò6ól¤´J ´šzxÔÒÚíMÛRûdÞž”H/ÌÉCºJë~Ðû) ]%}’“3BbŸ}ö‰i®UúZQô¡Ç]ޘД/‡ÿù‚Ò¸bºÕÑ$uukËþ@~,Œ¼å–[b·Ÿü:I’ªôÈ^æ–PòVòÉ3Î8#\qÅ›=?mËåoþóŸÇFˆ„9@¾ô¥/ÅÊ ÛQÑ ƒ¡54JœuÖYqßi2B é˜À ó¸˜ÀœŠHš0µHöR»m˜‘îyM m ÒEå&]¹"u¥/ºÊ ¯—öÃvmØ7û£âÆûËOÒ.UÃC¨(‘6&L˜ÐT"­’Nxà˜¶j¥ÕÖnoÚ–:½=¨ßyçñz8å¯âDà'ujê½4Nœ|òɱ^M/+ze&\`¤5=¸¶@y¦ÝXúe–›ú« ž6mÚŒFÿ¢(LvÚi›„ˆ:ßxã±PE°ƒ‰ˆø2ô…uA8)s2d¢¤‹.º(œþù1Ò›d×í&?§ÀÆ—O´8¿.x%Iê.ò—³Í.€Ò-½0?ö±Å–"zkP JÏ-ºD-•"*´2e Jù×&Ÿ¾í¶ÛbEèøCìvKP„}¥Û´_¶'.«ÌÔz¼‡ôÜö õ+;9fΜËØXêŠsJkÒ[{Ò§i[j»ÔÛ£žôÄÂùIP»ÂÔ©SOÜx³bãÂÌË«7-k3ˆÊ@ZB°‚/%;¼¥=_T~i²6ºÕ¥BWÑ:I’ºk$;AiQäsŸû\ì©ñÇ?þ1œwÞy›u'o-òØéÓ§Ç€ —´äªmEÁ”§¼¶Qò\z°pU8‚A‡rˆ?$©"LÛRcª'Ò»§|!òs{´'J•ß÷ÓµŽk­“$© Rð!»Üpà ±€€Å·¾õ­Ò9µ²•|p%Ýç¹ßþö·ã¾Ø'û.zÍFFÐÌs"©:LÛR÷ÕÛ@’$Õ£V Ö1î—I¿é ò—ù—±÷cè³=EŠ<–nÓ„‚<—yBøŸ}²ï²×-;¦®Æáûœï6/©{3mKÝ—I’Ô*Ù C~( “ þþ÷¿saÑ{ãöÛoŸùÌgâ]òsˆä"Œ3þìg?‡Ðð\öÁ¾Øgþu9ð!I’¶ Ó3æ‘$Im—ï¹QÌH==˜œËÁ3{<è2Îeág̘,X/ŸGðbĈa—]v 'œpB8å”Sâ"`|=“ާžÙHÑ0"’$õlõÌÒ×I’$Õ«èŠ.È^ñ.˜´”«ÃpÅ4gŸ}v\járº\E«½ÍõQ+ø!I’T‹I’Ô¢øÈßOÿÓC#Íå‘ç,Æ ‹ÁÑ£GÇKÛ2ϸT‹†Ûä«è¾$IRžI’Ô&)àz„¤ HÑerC#¹wØ9ñöè%¿nv[æ) jäƒ!;$IRk‘$Iu)ê’‚䇦d{†¤@GÜ6ôÈ@ŠþÏï³hè‹I’Ô ’$©Mê ‚ü  ‘2ó§HŸx?Û³#?ÑiöÿôzÎû!I’Úʈ$Iª[ÑüùIQ‹z€ä{ôêõÔã#<Šz€ä÷›?&I’¤–‘$I­ÒR¤èd{‚¤ µ.m›}<ûþX$I’êaD’$µZQÙa0Ù¹?²ëãóJæÉ߯5äÅà‡$Ijº ©0"I’”• ‚ øHÁŽ´4ïÉñ§²Eß¾}k=Ê®øbðC’$µ–=@$IR›e{~ä×e×o>”¥÷f닆¾8äE’$u ’$©ÝŠ!Ùõé~Óã {|H’¤ÎdD’$u˜²@HþñPpiÛšÛK’$µ“I’Ôáò‹Íz†„^¥Ï«5ñ©$IR[‘$In³ž=@ xH’¤Îäå]$I’$IRå‘$I’$I•gD’$I’$UžI’$I’Ty@$I’$IRå‘$I’$I•gD’$I’$Už6zçw† ü $Iê |ðAxõÕWÛüüåË—‡eË–ùAJ’¤B}«òFîºë®XðÁ€ÂøñãØ1c:íõ~ö³Ÿ… /¼0l³Í6þŠ$Ij£{ï½7l·Ýva¯½ö ½zõ O=õT5jT›öµdÉ’°nÝ:óf©‹Ëä'N }ûþ©šñÚk¯…·ß~;ì·ß~~8R7±`Á‚ð /Äû»ï¾{;vlX±bExî¹çªU«šÖ=ºtÏ>ûlX»vm˜0aBüÞ¼yq¿äõÔÕwÞyç.yo•éòä“O†­·Þ:šhAºôÒKÃüùó;lÿ·ÜrK|xüŸÖ" F´< 6,FȇéJK·zZžØ†Æ ]T„Ø–ÇV¯^ÝT ué˜cމ­WäÃÛóxê•Éÿ{ì±G,˜Ñ#Ôˆ´å”¥åz•¥mI‡Þ’ sI½2 r0"‚|3õÞ"í$!ØA`’ü”Î4jðÈŸ™–";&yõ[o½‡Ò¤^›@:CQèWviÖÓKƒ1‰éª1üOÁ‰+*ºÚ1&9ƈ„Õ3ưlßi‚TI’Ô\7µêæ !hq÷ÝwÇÂ-Ë k¥!‚¼–Æ‹4 jÚž%tµe{*[Ì@w]ògžO¯M‡§J[VYZÎ_A¢Öó‹Òvš{@RûQï%hÁĦ`$uÙ4é8SW&ÿ%XB/òp¦’ÈŽ| B°ƒ€%iA½˜ÀÊa‡ÖeC`zmD×–~™eÀ¦…~)ƒ§OŸ>£Ñ¿¨K.¹$F™ˆ*±07ÇG>ò‘XúÎw¾.¼ðÂf­<ôö¸á†â¶|LÄDì¿þë¿â:¶%"Í—ÊäK÷߸çž{â¡6ù}þÛ¿ý[8ÿüóc7¼¢}ó%K’TuihJö~ú?µ aæ°/ÅÛ–ü¢©—&-MiÉþŸÝ7ûÈšR+p¾%˜í© e'0gÛÔDR×'ŠÒrkžŸOÛ’: dÓiJ{iŽž$Û;¤Lš ¨3óßsÏ=÷Ä7ŒßY¾qY½iY›Y6T&ÒVôáä™"C«PÑ •õù/»µû–$ÉHÛ ’$Ieê €ôøæ¢àˢɭ2;»¼$I’$IÁ® ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ’$I’$©ò €H’$I’¤Ê3"I’$I’*ψ$I’$Iª< ’$I’$©ò €H’$I’¤Ê3"I’$I’*¯¯$I]ëƒ>¨Ô{Iï'ÝÏþÿÛmØlûªêÕ«—?rI’€I’ºXO €„Ü6UfD’¤Æ`D’$myzH’¤ÆcD’¤.Ö#‡À„žÓD’$5 ’$u±ª@J6¬ôç I’I’ºXOé²aÆÌv6[ç\’$©3‘$I[ž½=$IÒfD’¤.–íÑÝ函”_¦ü2¸éz„Ø+D’$u ’$©SÔœµÆ@’mÍc]Qƒ ’Ô3ôêÕ;IC`òù„=@ºÓwé÷$IR£2R"Ĩø(»Ÿ]—Ëö‘ µE=? ‚HR©5oV‰6Ròƒ$Ij@ê(¼ä{oÝ6,Œ;6Œ92 <8 4(>¶råʰbÅŠðꫯ†yóæ…%K–4+àæ‡ÂäƒA$©úz…^ÎRµïÔïK’¤†c$§Vð#ø`†÷ñãLJ‰'†¡C‡îõ,£GGqDXºti¸ï¾ûœ9sšuuΘ ‚HR«-ûH’$u2 5”?X† N=õÔ°ÓN;Åõ¯¿þz˜9sf¸ë®»ÂÂ… ÃâÅ‹cЂž!cÆŒ Çw\8þøããö§vZÜþ–[n Ë—/ßTöm> Æ ‡$õ ½ìR½¯ÔïK’¤Fc$£h.|ðƒ^£F §Ÿ~zèß¿ tL›6-\wÝuaýúõ›í“!0óçÏ‘ï}ï{aÊ”)aêÔ©1òÙÏ~6ÜtÓMaÑ¢E±7H­ ˆIªreÙËàVï;õû’$©Ñôö#(WüøÄ'>ƒôøøøÇ?®ºêª°nݺ¦í˶a[‚ <—}°/öɾ‹‚.’$I’$©ý €lRëJ.)ø±Í6ÛÄžôÖ¸üòËÃW¿ụ́ͯµöÂsÙûbŸì;©ç¸$I’$IR} €ää{ad{c0çGêùÁp†¼Ôêñ1bĈØC„%¿/žË>ROö]öº>$I’$Ijç ņ|Ï‹Ýwß=ÎÛÁœßüæ7›õÖ(›´ôþá 'œï3GH~{öñw÷wáøCÜ7¯1wîÜšó~8ˆ$I’$I­gùy?¸åR·øÙÏ~‡½Ôš0•…^)ø‘,»¬X±"î¼Fö5³û–$I’$Img$£,èÀ¥l·Ûn»xéÚk®¹¦ÅÉNY¾öµ¯…%K–„gŸ}v³}æ&ì“}ó¼V=Ç$I’$I’êg¤D6˜1nܸ¸nÆŒñJ.éñ2 }!qå•WöÉ?Ÿ}²oðZùm%I’$IRûôøH=W]á2µ¸ãŽ;š­/êùqÀ„³Î:+¼üòËá'?ùIÍ×Ì9Ò¾ÓkµtUI’$I’T?{€´€`ÃàÁƒãý 4­K·ùÿôOÿoñ‹_Ô} [Kûæµ pH’$I’Ô±¼ Ì&ù@F61hРxûÆoÄ J¹ KºEºÁ„ýöÛ/^ñ媫®Úlÿµì;ûZé9Ù+ÌxI’$I’ÚÆH¢e';ï¼s8ûì³ÃªU«ÂüÇ´ûõ zH’ª–¯¶ÄüN’çÆÆ=7z¼oòv uಷC‡›rÙÚ|`‚ûõWÿŸ9sæfûxá…Â3Ï<>ùÉO¾Fºú ¯%IRO(Ô·ô<"’<7vݹÑãõx«˜·©A cÆŒ óæÍ+ìòôÓO‡Ë.»l³çžzê©1¸ÁcË–-+} ö^K’¤*îË/+ ¥í „HòܸåίÇ[å¼ÝH.\F&OžfÍšU¸ s~äçýÀÁ ÿïÿý¿š¯Á¾ÓkI’T…Â}½­E-µ‘ä¹±óϯÇÛòv¯S } ܲÌ;7þÒI'…Þ½{^þ¶lÉ~Áe ûdßàµÒëZØ“$5zá¾èRíey “†-µòÌ–^O’<7¶ïÜèñz¼=)o7RôÈ/^Þyç8ÑégœÑá¯Í>Ù7¯ÁkÕsL’$uu¿Öºl¡(Ùø|!(_ˆjé2òA$ynì˜s£Çëñö´¼ÝH–{î¹'þÿÕ¯~5NvZoüãa÷Ýw/}œËÞ²OðÙÞ’$u‡~¾À“-èdó¼l©l]­}‘ä¹±ãίÇÛóö?Hº¢KÑÿÙû³gϯ½öZì©qñŇóÎ;/~m=9¦@ÇøÃ0|øð¸o^£¨·G> b€D’ÔHü–n™ kìØ±aäÈ‘aðàÁ1ø®|Æä߯¾újœd|É’%-æÏÙ<ÐKÅKòÜØ¶s£ÇëñöÔ¼}ã¾{Ñ „¥_f°i²q<}úô=á„•nS`#¥âvÈ!ᬳΠýû÷¿úÕ¯ÂE]TI_Z>’½lnŸ>}·¿ýípÎ9ç„5kÖ„Ë/¿<,_¾<ÎÂvéÜÏ>,ìIR÷È[ŠZJ²ù fûR¼=aÉ/šïóóA5¹¿V©(/?~|˜8qb¼’Z=–.]î»ï¾0gΜ¼¯,ìªÏ¦Šß±¤êŸ=^·ªyû¹çž{âÆ.«º|ã²zÓ²6³lð*0¹9¼È>Æel¯¿þúpæ™g†¿üË¿Œ—®eø Q®Z?¤ü‡Ù~ô£8ñ)?"öɾӢ苷P$IjÄQ€.¿ÓN;Åõ¯¿þz˜9sf¸ë®»âÕΘïŠ|Ö#òÒãŽ;.üñqûÓN;-nË-·Ä†lþœÏ«%ÉscûίÇÛÓòv{€”+Êzp;jÔ¨ð±}, 0 ¼ñÆ1˜qå•W†õë×—î?õêøô§?¾öµ¯…#F„Õ«W‡?üáaÑ¢EÍz}Ôêýa0D’ºOÞR¥ÞeýüØ^òÈÓO?=ö–¤04mÚ´pÝu×•æ‘ =#§L™¦N‡†Ò;ò¦›nŠyd6_,k-êŠÏÇ ’ºÛ¹Ñãõx«œ·×Ó¤O¯?í•¥OfÙjÓ²5‘~ô£gWùÄUï›¶£·Æ /¼ç!¢EODºÒem×®]¶Új«0zôèpÐAÅ# ™ùä'?{€0çÇUW]Þ|óÍfA¢%ûÚŽ$©Zæùƒ‹·cW=²YA ‘+Çe¤O|â1ÿ£Uè¯ÿú¯ÃOëxŒnC\êö¶Ûn ³fÍ ï¿ÿþfÁŽ| ¤½Q0I’Ž<Þ¢±Âp¶Ùf›䧀ļVÿøÿZ‹üõÖ[oû£ Ö7L«Q­‚FË# €H=ë\ÞίÇÛ×H'>Š>ä²H·o¿ývxì±ÇÂܹsêU«š~,}ûö·D¶˜ùöÙgŸ wÜqG¸ûî»c$?Ü%?ô%ÿ#0ø!I@å¸ó—»—}gB4Z‡˜ä»¨eˆn°´ü䆅Ο?¿ÙëÜ{ï½aï½÷Ž­Eô¶$-Ë»±—¤©çÓÛrn,;/¦… $¹¢FGžÛ{.Çþê¯þ*Îó@e–EŸK£ï¾ð…ð‘|$/Ÿ)Ó4ÚñòzúЇb°¡èøxœ h0ú€ÏüñÇoèãÍþÆÙ–+ÂtvÞ^OÄIPëŠdçð`œSѵŒéÆÃä/iý=;þ)ftÌ›—ƱOiecÊÖK’Ô(ù¢uܧ[+Æó›ßlÊSž–òQ†‚IÙíÙÇßýÝߏ²Ø7¯AcC>oΗù§¤îtn,;/&ßúÖ·â\ í=7¶ôZs.ç˜>÷¹Ï5Û×g?ûÙa˜GœË;êx™²à—¿üeØu×]›žË±OŸ>=üìg?Ûlû®8^GuT¼² £ ~ûÛ߆§žzªÙ¾&Mš~ðƒ„nö™7âñî¿ÿþ1xrÌ1ÇÄÏ>åó·÷öôµyÀ#qÊÞÏQÉöäÈ.½6-½K–¢}½^ѱI’ÔÕ…þl#… P˜äÊhµ®„F¯HºÑf—;ï¼s³–'Z=Ù'xìkÖ*ÄIRw97æÏ‡,\!2/xàN97¶õx©ˆ@xùå—ßýÙŸ…ýöÛ/3•\#u.oëñþä'?‰ÇÆ1r¬3Ç~î¹çÆ z#ïç?ÿùx,ÒsòËW¾ò•üà}ð9Ϙ1#¾/æ™lÄãå‚!üN²§FÉÛ €Ô)ꢚdlv¿wŸ¸”m“ÿ¿VðC’¤F*ÜgQÚn»íâåí®¹æšÂ‚Pj1JzZ<³ Ô¢×aaŸì›×H…­–ŽI’ºË¹1>dI—ýçþç¦unlïñÒ¢ÿùŸÿ‰ó!¦÷@PáÄOìðsy{Ž—Ïqß}÷ >ø`—ÇCšÃ£¥B…äóÏ??N¦Ædn-¢²ûN¯ÕÒÌõ’Ô]Îù øYgïg[×Û{nÌŸ‡Ûs¼ixοøÅ8*<ðÀ8¼äþûïo¨ã­õ½1(Ž?þø†?^æ1AþóMóOŽ3¦á>ßFÎÛ €´"R4Hü‹®ä²ñ6\é¥lEŸü$5z%`ðàÁñþ‚ J 9Ün»í¶ñ>ã†Ï;ï¼XÈgR5æÿHв×Hûæµ pHªÒ¹1ûÎ…hOÃK¶Ä¹±5ÇËqýüç?î¸âŠpÉ%—„ï}ï{qÌw¾ó†:Þ«¯¾:ÞžrÊ)MÊÒçÌÐ0£QŽ·,`À•ÒÀE7²Þ}÷ÝxË¥eéxëÂÒ•y»Wi!’ÿ2²ëR#ûÿÿ3z7 Ž=j: ~H’©0_t‹AƒÅ[.Ç$fä_ééþÍ7ß/}G …Òƒ:(NBǘqÆ2§®°EÒåõÒk¥cÈ^•À+ÀHêŽçÆìeE?üáÇ[æ¬HëkU ë=7vôñ2$wabÌ4ïçð|½Ž—+è0Õï~÷»pË-·„‘#GÆ+˜pe“ÝvÛ­iÎF8Þì~ʆ”½K#oÑ>óŸsWåíö©#RÖ$•–æKïMK¯·oéõ$IjÄkZ(3ñ\j‘{â‰'bO Ñ´x©÷õüTRUÎYé2üiii;’¤nŒ@к¬[w¶p“_æÍ›ÏO‚–]Ò ñéµ$©ŠçFz$LX´hQéù°³Îõ/½'"ÐC媫®Šë~ô£…OúÓñ¸éiÁ|r¼éö_ÿõ_ãD¢{î¹gñ|ðÁñqz®4Òñæ,sæÌ‰ë˜k%»>ÍýÁ\ t¼es€5JÞn¤ƒ!›=¾i©{{I’º!&5E*ˆµ¶•(u}]ºtié6ißéµ$©jçÆ4”„¡õêÈsc=Ç›®ªòâ‹/6{.=üR¯†—4Êñ–å=rèyÈ•`éó-³|ùòx{衇6[Ÿ&?~CoWü~ €lÁ@HiŽM­}ž$IÝIš…~òäÉ5[€¾ÿýïÇîÝÙuŸúÔ§b‹'Ã`n¿ýöÒç²ïìkIRUÎi:thSe°ží;úÜXÏñÎ;7nCï‰ücéJ%lÓ(ÇËB¾“­˜5kVC}¾YÙõÌc‚}ìcÍ>ï“O>9ö¼Iùg£o½ÛtUÞî$¨ɬØl½IRò»4) …]ZüN:é¤ðÝï~7¬_¿~³çœyæ™±k4…µûî»/¼öÚkq=þÇüãÒ¥>}úÄ}§‚µùª¤ªœ³ößÿx;{öìºZØÛ{nlËñ>öØc±×½'®½öÚxI\®D¹üCúP|Œmåxñ/ÿò/aìØ±á¶Ûn‹=)Þpüôš¸øâ‹»üóýú׿Þ>|x¼=õÔS›†èwò™äà3f>~#Ì¿2pàÀðë_ÿ:¾N#/ÇyÁÄÿS/O¾~3øÉO~/ÛUy»I’TwÁ(?“<ݵ™DŽÖ¨3Î8#δŸwå•WÆÛ¿ø‹¿ˆ£„žÓ¦M ¿üå/K_›}²o^ƒ×âjjÙ’ÁIÝõÜØ­97f¯XÙÞã:uj¬SÑ%PAg®F;^‚4^xa<ÞzuK/—°Í~Ž`nŒ4?FÂñr)_†!¥¡HCR§‘Ž—K ç·!X“ÖñxWæí÷¯×ÊÒ/³ Ø´ Ù¸ ž>}ú Oq’W–ý?{iŸ™Ã¾oOXò‹f_h>ºeM’Ì/5¿¨5yï!ÝŽ?>|ô£…ZtjMhƘå‰'6 Œ”™.¼ðBÚ}÷ÝiùòåÊc<›+ëoˆ¢oÆtšÖIbú s»™´X€4)nD¿C·˜Ø„ð^ÇÚ5Ä{ èýºéEz»½­ƒHAt«]ÌèëëK…ãm\ôpÑot†€ÖS ¶áϺÚghý³aõ³Á6gþ÷mȪ:JÄèSÿÉÚÿª›Ö¨o’¼]ýAý¼ ~ÿ ?«ær5{Y烈õAƒê¶7ÕÿUÔä+=Âð~S­ÚháU’5™,¿m—õÚu 8ODz|‰x¢ý!á¥L„‹Â8ãÓâ2ÃX÷›iÑΣ§ÁF¦âaúŸùêûÎÏlÓh¤0òR:ò<¾@Ï=´Ü—("a‰NG‡ G8rÄa„‘RÆÛ¿èµíŸÜ¼úSøÓA9ö9v„¼lð9Ž)+ÏC/\¨¾ïà{'r3ì}‰(麋'|Í€ëAñš×Ôø)UÒÌeË–*CTDZذ½mÔóN„µU¹Ú;ŸHÈqŽßzš–-[–Ž?·ðQÎéVZ€D,]º,Çà´½bNk„ÿÜðc|aB —ˆ-µÎßAAûDì²#J-g­êÛvT—¹I Ó7`ª/±b…5+•öºotù24Y¾|yǤ7$—/_ÑeémgþŠæÓ—_‘°8­D³"¤å”m~¨HiȆlèìÐ áèWõC%U¼Â•¹ ªY†ŽÙ‹¶=î;´Î&Û&¯¿í.ê³å^'ÑükÏ¡å³Ò3¡7}Ù&ÀÒ($P:£éN®( °e-’?ÿ ²e¢5.‹ø‘dÅßi¤n9ï3ÛaµêYÕ®¯íÈÛ #þ¼M‚;Ço„lmZWe|M¦O0ýzkßÝt‘Ù*XÜÇþãô·€zQo—@ºÂ$·“Q{œi'ÉófùíÈòý‘åTU ü#‡¥ü¤OÆÛ7Üq"MøÐù4d³íTðÊàuÕwßšUª^ùÚ<š~éèõ™÷6¢–ù.ÒîÿÃþFO†ì¬Bîò×Aþvs“ñÐ퀆:®yEõš§]|-šqO£=î_t†¢¿¥Úxü~´Ó©?θÇ_¤7ž¾/ާû°üõ'â÷‹"‚âôöËr * ‰ >aCkw¬ ¤mˆlMz½YUÔ¬ÈßA[ý Zg“m¬uÅš7Ò‚ëÏ¥sŠ&—9èuY€$ßæ÷ÕÓ]Kï6Ç|Ó›Þù×}·šÞ‡[æñ_žL‹¦ßk¯›õY.Òw/dñ%ž¾âh'¤ÝYü¢ ¯¶wÓ ÐÛÎú[Ð5?úó“hÑ´{ÒmbÁA~»½s¸Éøýé­ÿqyà=>…Þ˜y_?Í!åˆ"E…¼"HH_¤˜5H§©!Pó‰v1F´À Ä%j„¯ÂSvÙj‡(RHia³-H©‘CFïE#OýµÍ[WTÿͽô3´¼>è ðÊf^”¤Ò+«é}úð¯‚ÒûÂ%ŸÎÞò…þL¯l2½¦÷ßZ˜¿¢üü½ØÈ_Ý $ã…JÞ)0!Ëà@ª‰Yo˱´åÑgÓБ{ôþ ŠÕ®¾>õ-×®¡¾µ«•ºµî†›«ü¸ñÓ£iåë ½q¬·ÉÖtô…sÔ\µø¥’U­CbÐàšª[©x—Äë–¿ð½tÓiÕËÏ`´¤#„  $€˜óK-aƒWmÉ7Ì8l~; DZÅí¸ø|ºøQÛÀÓ^öüÚ­4døHšqÍÑ´¿}×êla—÷‹ÆŸðUZñê ô็ÒÚ•K¢ ‹"2,?B,;+¾8rûŠˆ§½¬7ŒöùÖ44ðš—W¯yò·¢µ«–æèÌuŽÂ×»××oËuþþ;Õ*qÙií$ìœÍ !y¦Å”!‚ø…b"ˆ]l°O‡ µÉŠH`zÛùFQ£O{yZ›60”Fâ/jñ„ºbõëóiÎE§TëŠå‰Ao«Fz×§1ŸÌ—ÞÙ¿áô. NoHÿ§W6‘ÞËs¦÷äå¯h]þ®\¦ ò¤·H%_vˆÄE ñ#Ýi—%Õ Ñ+B9 ²ËÌ–ïþ³ÛÔÙÂGKÅ)Ÿækÿ9’Ñ”ø¡Eâ‹Ë•Ös‹9Is™â‡= úqÒâ‹£q%Û¾óS4dóQôÊŒ{í…úy¦V÷½:ý^:||×§µóÔÎ, Ë‹¤Ðb´-’‚üEE–q —Qä\ûôãø3ê]Ÿ¡¡9®yýê5:ò3%†D[æqGŒ<üÓ¹ïñv‡*ðñv?Áùªi|’×b[ö2ß9Ýý¤ô1é°é%7݃ w|¾x|«5¹Ób?—-}2°2­Š“uŠý\2#½þ˜ûZ|÷£HÙêßnzâÓW³FSi²¿Ò$S~B6Ùç#´Î¦#‚ëŠu7A›ìû‘´°¢^ÎJë§Œ:-bÓ}?œ;½›Nüp©¢LûÓ+ëÓ=dŽOÑô~¤@z?·(ðiqþÎ~ÝÝ:©ùÕò½È¿tÜàf \$~,ûÉie×SÀÍl³“vx¾5•¯¾¾µª2üÞ_Ò á;¨Õ^²¦Àpfí«ÏÒŠ«þC¥»¢¬>Z¯Œæ„¶Ú e½^9ð„3@é½\ékc¤}ùXsúJVwE:µÏOŒ-Ddº3´Å[Rß³®ÿiæ3OWðéèo}7;þÇÍy*Î?ZÈ–o;:÷5oùÖ£é¹ëÎïÊbÉ÷+ïõn¾û»iÎ tèc¾bL‘•lDÈÉD«À„­ã_ƾrŒ;ŽF8Û¹ºïžô*0a–¡á€SÑê(úêíßÒ w:4w]±á„Céµ».J•¯V?ÿT4½ã£Wï¼(õ uOz©ÃÓ{h5½¿é®ü½£ž¿}2½"jëºÁåæ WÚÛ…ê¿U³ï£¡ÃwPKÝ.|ôF¯TìžsGˆéþ±Àî²’(æ~¾žu²Jî¼É’“â½n—õ‡t¿u:4Õ·9|e›ãÍ„ÓoH*2½:Jõ{ým'Ðïÿm´Ã^FÔŽ)“ W–”‹žýWf¾«¥Ô«mÄÛíJûŸ÷dДÉ×gM¦—}‰–ÌŸf>LSŠÚ#v¦N=Ÿ6ÙqŸÖ]óÈ·Ð?ž–óš§·äQ¶íN4áƒçÑÆ­¼Þê=žø£)A×ûÆ3Ҭ˿JKãëÞ¢ÖÍ™ªY‘¥sMA [ñ/MkB’K店Ñõ ”&’éÖ<È^f—ƒ3½2‘>Ÿ@ã^ú6×5„ KE„®bƒ¨Òú²ø›÷²Ò±îci‹£¾JCŒ|eÖëm5žÆ|î– º"kº9§—­±‡¶2½[§íÏšÔÃéýAFzÏnqz'TÓ{kwåïçsäï? •Öô6ßG.÷U¿È“®NÉ” hôÀ«¶Toæª)WRß╲µËÉß¶· <ªºÃpX>Æî•»òDä^ÒâGçˆVeUíOsRNìL±¦ü*·õ‚Å@ʈ Zµ%å¼Ô&ìHÓzD6¦‡È¤ß›ø‘î”'&FÙS&Y”˜pêùÎC˨ºmâGG^sIØÄþ¼ÞÇîM;žò£þ{îrš×Û§‡ÈŒpöi(2Ð?‘”Ùƒ_×÷ÓŽÇ—f=N{xw¸¬ç¬7#‘¢Rý×Ǫؚ•´ôΟÒÇþ&œðU¾ÓôôuÔÔ.ªM{aËÈ .‡ÕcÔôaL ì–õÖ¹RêTãÍd’~z5Ýí,W¢ó¹­÷³¬Î£ÍyiHg>c9[o½S-ýiu9>µ¯æë¦u+ŠHüxâ›oIN“ì“ ¿ü›Û‹]?­¿íι¦L.7žøñѵ·¶úrú@¨þ`Lüél»8!Ò¿‹Þö(þ{?7Êžµ}R;‡¤=¿:‰†Ø%ç5O¥ÇÎ;Êê(Òl×\‘øñàŽõª#séݾxcî{¼lþ4zê§ïIM‡µ]óž?š¡DwI™H1«÷¼ð¬—7öi’²§Å¸­|– ésÚ-AÒçtYQXú8)‹ ­F“Â2EÆLwcꌾü2ÃIçu¸ã±çcö½“™eÊ}x3sö\ѵVèp P¡/'#ñcõ¥ïsÖµ)ô}ª=Xç„_Ø,ïúçhÕ5Ÿ šB¿ÞGüÓÍ£}+/yofzù{p5½ù§ü÷Ozù3øÄ_JïÊ«Ã\ ùèUAé]qñ‰aù[0½«®ÌßæïÅþü]»¶žÞ÷++¯ÒÒkq†oèiQþ¶¦G\Þ8ên´‘úÉ‚ÅСC•0Á7—…3X”X»v­úf‘‚ Î&6ø7ïãð¼?l°ÍŸ?_ýícQeÕªUq¸(nþ°øÂqóßœ–´W¤æëÒhé²¾ùShÉu_£µoÖ,Ax©[^í…?ü7oã}†Ã Ñ¿Ó_DýäBèœ+¿˜a¤eyZépT›rlêØ/2D}‰tÏl‚EOݪ¾ÕtH_ M™\ôä¤Ú’°•Êœ ø»¼ÔH‹–žW¦Üœûš_}â–.}â½öĤü÷¸Z.:ßσÏkQ‡©!Ò;PõY˜¸ÎçO«ô¤;Ä$®¬’¶Uὓ/jìPý·zöý¹ëŠ5Ï· }t®hú~·¤wUüíͤwÍœ.Ì_Ñx‰ÓŸuéS`–.]ªŒHŒP*Ù!±• ¼­;XÔàí,`ð7[zpåÏÛÙºƒE þ½xñb&F¢oXX>|¸G8¾1l ©`|nÓ’ LÔzzüÝ·` -ùû§iù×*'§rõrõYóÊ3jïã0ú1íAZ)|H MA ÆR´©rLþís(2v²ˆÜ\÷¾xÇoiÕkó‚§L®|m.Í¿ý¢ú`@øÓ!bD¶{‡òRmß¼þF]G®k¾í¢.ÔÔ¾Üñ¿¹®—ËËwþŽ ï4ü½+xØXýÄU$sN¡_ýÄ•¹ÎQnzóOùï¯ôò¦¢éµëÜôR¤·RMo«§ÔóW¶.½¡äž#œ¯Ÿjo¾ØÚƒ… :X¨=z´š¶ÂÂ[‡¬¿þújªË¼yóhË-·TÓa"«Ž×_] # .TÓhXañ‚§Îð>Bøx8XüàcY y饗T8ÞÇŸ 7Ü^|ñÅX aa¥¬BÐ0c¬Ý=¾F¾f¾wríJZõ¯?ÑÆ/ÜJ¯¼òŠÚ®‹%5ÅKÄ/úMÏsós‹"çö"yƒ+hÑx´ÿD˜6êþpx8—>8O²¦¿8Þ”:ššsÜ=ÎOó¬tmHiÒ^Fÿioe³×‰ß 'Þè֦ͬY¹”ž¹ü+´Ó¿]’=e’=§ÿùK´¶zL\ï×-Ù¥´¼‰–é&YsJ· ×Ï¡YØ«ö‘dÜ©ãôO¿ì ´û\4MtÆe_Œ¯¹?;GEk­¾UKiÖå_¦]þí² {Ìa׬X›/ÛÊR¾ëÏžzPÌQª­ÜÛÓë»wî©+ÉøìSXaÜIõc„su3o³‡º£¦§ädO[ñ§¹qŽÐøqº¥úËE‘•|ò·ÖÂoH¹éß¾@óᥖ¹2º)kWв»Fëýƒ ºqy5¬¨Ž3D½®ˆ¦Ñg ²Æ ®ýQ]ÞWýÇç’kVÒò»ªé=&0½Õ°µ)ÿ­Oom™á†#JÁï÷«ç^VMðÀô.ÓÒ[Qã¶J ‹‚æòWå°,–^ª»Tˆf”ñÜHé·ºSã])ê. ~F–Þ¥õô’“6.vŸ7ûéryzo’U·±XÁb_OQ‰üt°õ7ð¼ÅÇBIÿÍÛYä`‹ŽÙ³g+ƒ„6,X „6æÌ™£ÎÃBïçð<í…­>8 ŸŸÿ.Â)8…î¹û%ÔD|ðC¤»î¼K :ú\%¾®¨“Ë›/øéOè¬Ï}ž^{í5­AAó{su<»a -ŽR+ÉXœŸ¦„ÑP¤åØT;*ÚáÈAª^‡ú`eñ¬ûiÚ¯?LcOù¯Ú¨ÕÉŠ×æÒ¬?©ö¾ºÏ€6^8ÒÞªv@’ÝsB´ãŽciïwŒ!zöš»õ1ÎkË^¥‘ o Ñ{¦åKôÌ3Ït‡X«½‰2`ñÓÕ{|á©4öç9¯—­DX ãò²êšuO‹ûy[7\ )"‚èFˆ`àÚç^fWdøáðû)Ú±ï\/lxS–ÝØzü ZvÃÙ4ô ³œu¿9g1¡oáªjÄÛžÛ¬ð¢@zhémky¬ JZ˜?…–^ïO/»(¨¥wŠæ“éõàÚK»€8›Ö?ØŸÞeõôV¢ôFå·%UUX=38ôæd7vµ+aÁ`§vRVlÁSW¢‡Å¶úàßlÂSaX¼à©+ ÿÍ,x°˜Á" (ܸp4ò>¯B”íP4˹ªðÜ£|ÎGýäXÒ–,6‡®!ùW¬ú÷/›ë¤ö°¢—96–^ñZg÷÷Ò:£'Re£mkÛßœ¯|&ð´Z»Òëà2ß*œÒKZzÔÓ»[5½cŒôξ¿6-cÍÊ„PSæ¸"ËR@ÔçXˆz»Éï¥W|Zåïºcö‹Ó»öyüÒK¢í~Ûž^Yà ºÖÆ×Þé×=W(v±.§wûtzWié¥ú1± &l÷SäO_Îp¹ Õ“²À1}út7nm¶ÙfÊ ƒÅ vDÊ[p°%Lj#”€Á¿9,wrX´`á„-AX,‰œ¦²€M¡aAƒgŸ,p°ØÁ™Ç,>WäK„Å>'‡UNP[ ÞxÐ4räHš9s&=8ùÁxä§äÐÃ¥'¦<¡ÒÌÇl·Ýv4b»‰°¥>dýÕ¦@Ô´³±YwH™ÝÀG¸6 FŸ¢BQXW“éh$Šˆ(.þ£¯Qï÷­^Fónù9ͽùg‰x⎦ò°ÝXùEWÉëpÛwÓDºÎíâ{Þóe¥yíµ×ªv=êð¿pÓO«Ÿ ŒoíàÕÏC=HO>ù$vØaô¡}ˆ®»îºø¥C§hÌÁMߪÚ=ž?éÞ¾DS/D:þiÁ´kžJìƒ"ûê0>$}¼Kxp Ù×ÒXÆõº³è*-]]‹XÑÃ,k5õ`%­~ôÏj½y\í¿HZ8겄Tz9âJ£ cA&(½•†õG‘)ÿEÓ[s7Ànêy²v­þW5½ØÒË×VKg¥Ò°¦@z} >—ê›D¢«µâP·P•Õô®ª–‡•\4 ÔèþG}šJd­"Z›¿!TòWo–µ{ëN‹Ôœ¯jG‡E(Ø*ãÍ7ßT ,ˆ°ˆù aa‚… ¾øH¼ˆDŽƒañ#²ªào¶aa„÷³ÐÀÛ#穞ý‰ðyÙ‹&l…’9¯(6ljukf_ú6oûÏ/ý§²a_#Ç<~ÆéqÁdц¿wÛm7õ,Ú~â{OTKù–ÞÑ)Ùú)òè®èÍA·û_“‘ûSäÙö|ÂÜÅÉä'$¾ø·/OdâéÙoƧï'AéßZxCêHÆi«Õ«è·HÜ}t$µ„I™ŽHJ"sYÌ8¬H¶!QX™ŠW4Î]ŸW\Û_©µ)ñöÑG¥“N:‰FŽ•8GãXá|XòM3õ=d9ÆÄuè×i¦«‘þè»q¿ÜñZº]¹ÒUFU–ï|éüó•Ëô9\Ú§ý¾¤5Ðt:\ÛÍãýaÍt¤Ó`^‡™ît8s+,åÂZÙy®=¼¼èéq‡mŸøÑË}Paˆ5‹ñJü7jkŸJ\_èVåAu›hAz©&h§Wüf/•-3ûeyÓKu ò=¥]ÿDSH*¢‹ íX¤ÂV¶kº‚.¥ËŠˆßˆ„àë»ÉúTáä#d´Ýæ}z•mõXÔõ)-µ|¬Dù8¨RÏÏÈ—ŠP}•¿Úµä{¶ËwŒ<8ìFõë¾,X°¸Á–,L°ÀÓRXè`a‚ ;XœØf›mbG¡,f°ðÁV†EL8Yô`…­E8ù÷`Á„ãbŸ"|oãs²ÐÂççxØ™j¾÷ýs7‡ãeFl»-í»ï>ô¡žª®éû K.½˜®¾êj%êDÖm·ÝFgõ9ºü/—«›ÍÇ|åË_í «@‹{IX˜’¡á¤1€‘Añ$Ãå™TãÏ꜔Ò~"m€ÔRÓf’›ØéX‡ÃSW?î8šüàdº¿Ú.Ú:¦é|u_×LVÇüqt饗µe:L3ƒÛïèí^Êbݺ€è‚gS–’Þ<þ=liП!—¥ˆõM;¹¶Û­DüSVdl¾î›¶âË3®4g§¿m%Ï&ê³<Ù¶ÙÊœkúKP9(hbMoÝ@›¥#½¢1@/”Þó7j[ã6TåP,|ôz“û„5½%¸Tð5¿æ¾Èš#JoݲCYE–ªµ\n¤W›æRóa&:Îâ±Ð«ÇæúÿYŒ`áE)Xyùå—ÕE²ƒRþÍ‚[kp¶à` ,j°¸Á~/‹+¼Ÿ? ,¤ð¾hu˜H€‰âåóá[ß<‡žxòÉø÷EýF}óT–… _Œ—×åkæ´òô¶x‰Vy™>mºú{ü„ñ*¯¼òª²ŒéÆÁ‘W¥ƒHIÝ ‡Ot6Ú–×m¹—ð|‡JNº_™÷Öm¾¡°Å!e:¼6á#så3¼ ®ß¤ô§[fù(ñˆ L$úëcsdæo·¼=öØcè…¹/$Ä´“ÐìB®wŠXa‹ÏcŽ9š.»ìO]9èÉ#|ä²|l´³_à?·}ž·M ™þ‘ ã^µÅ'‚ØE9ûT™l1EZ®K¦î­K¸IÇiæ“+.Ý—I#ÝyÓknyä»—¢€ •ÎwN ÊôF÷#k0œõwî~…l2½u!ÄV΄Qf]/Ú™¿É— -Ê_Gƒí»fwzðËýqãÇÑŒé3Š¥W89驊ûUû´ô’%+ÉÈ9øàDúfÏžC³çÌ6DªÐú"ËŸgø=«”]øØJ"²€`qƒ-4XØàí,ŒD+¦lµÕVJ¼`? ‹‘ÏÈñ)‡çaXÈ`k­·ÞZYˆ°• "<½……ž†Âñpx~C—ÏÅaY)wTY¨‰>œÖ!C’Kë²ðG7U»í¶Ûé ƒ¢‰'ÒwÞYÎÀãa Ÿ³Å¬Ž´´¬ ›ŽCæŽ7+=Ü.p›èïÄ‘jëØ‚°[˜0a|sºõÖXÆYfÅ®0ÇÉùÁçè>÷¹Ïªô†tÖ{Ééx3Ó¬ËnçŠË½D¶/Û3* û,ʲ„äKÄ,äkµêÏ^=³Ô>GÁ0+Ïû래Ӊ²Ò²×^{©ñã¿"vÚÝÎ~ -½•Ê :ö=Ǩñ&ÿ]óE†»áªNà uÝ »ZËsÊNV+¾ºú8Ó¦N£¿_q…úÍâÇíwÜa¹"Ç3.JÏûÁå==µDŒ5JYN°ÐÁÓYÆŒOkáBÅÏnd1Áá¶Ýv[µŸý|ðfÁƒý}°€ÂÓf¸óÀAîFKãrxžz• +' 'üÍ %Ñ”˜²áxÏ?ïÇô¥/I‰4,nü×γvrXèákà0‘µ „Š`à°ÓNÔ¿—^z‰¾ûÝséüóÏëŠt³E'/{ûècyÃ-X0/îàl»ívêïùóçÆ¢m¶á<öÑGS–”|.ΟNçÜs¿G§žú!Úo¿ýèâ‹/n‰p@R~ä€ý÷§óçÓ7Ýo{ö¹çèø}ò“ŸT¿/ºè¢Xèàq‡eK|ì?o»­uýmLùÅÿü"ýäÇ?I ¸¿ðÅ/ÄÛxŒÇ+w±?ÄhðÊ㸣Þ}T,æ<ûì³tóM7Ç/±[Í9ß>Ç:˜ö 8¼HÅ 'ž@þÓŸû¯ ¨¥çÈ£ŽPÓ?/¹øRúê×¾’Ø¿ûî»Ñ”)O$cI‰X\÷”e»ò‘~‘ä¯ý›UH)býÙ_”nÂJÏ /¼Oqa±€*xª ü`°0À7–3‹­9ø7Ëÿ­;MåïHEŠ*DXAeÑ…Ž?FØ‹%|Lä05/ŸþôgRÛô75ÿzôÑj%õ©ÄÔ—ˆã?1ñ›óá¾ûîC€øÑlÌl§ NQ±™ª'ƒØ;Ne[˜n?pÊ)Ê_Ôe—]F<ò/k¸Neܸiî¼¹™ÓMmNТv= Ž{Þ¼y´ãŽc;^áëcËÖŸýìç´çžo£O|âôôÓOÓ_þr¹êŸ¸ÊÈ~v³óÌíÛ¢¨HvX[ܾ@Òñ‘ÃP¶”°2Ç¥[w\yå•©í,xÜróÍñß&LžLï}ï{[#€Xú"®E$x vÁO.Pó¸ŽÅ~Ñ{çwª±Ùi§ŸF“&M¢¿ÕÊt wüqô÷¿ý½myüo'—`Â" /fÑ_pžE/í£C.þã%ê;šB <-fÊO¤ýtÈâ†)žøª ééŽéËÞ[¶u‹R«™3*áZðò³,x°"È7ýrpg%òÂÓX¢ŠÅŠh©\¾¹|ãy´ ‹låÁ<•…-(øAã/òÏÁóv>&š ­üÂqFU[å@É×ácafDZci×]w¡Ÿþôg½9Rj&)óPôú(…r¬Ó DºCÜÊ;2Í#ëÙŽHmqº¦›˜óîõ–Ü%Bd¯Þ’Çùi¾ýÒ6kú‹9˜{ça‡Ññ'Owß}7}íkgÇ^›ãÕ¢âO«ÙnÄv4{öì–Ÿ‡ÏÁV¥D÷wÅ ïï¿þõ(=õÔTµ’Í÷¾w.]}õÕtûíwÄÎp‹ ¡S BÊH;:¨î>X>‡šáSPd©"ˆÍAh¾•a|NLEîre¿îhŒ¹ªLZj\Ý$Gþ.[³SiŠ´ë¶¢Þ?ÝÌì“ò¸fÑ¢×­ag>=ËÃÇæ+3y÷ w&jÅuñâ%ñ÷ÕW_CùȇéÎ;îRÓI¦NJÓëN;ù˜;+FE¤ùp-³šymzá"‡YðôÍ›oº…ú¢UO]ç°ZT¿@ ïw9#­~sÛö›_ÿ&Þõêk¯ÑêU««±(áƒ-?\ÙeA\×á«z¤ãšë~(ù…Í„&8ósò“馺—uo³Û(G=[°¼ç@»Þ¢>è,/X¬ào@Ø ,xð›‘h¹\†-AXè`á‚Eþަ“DSYx?O‰‰Žásp\¹òñÑqÜ©àsFfVlMÂçíÎ>ûkJô9ï¿Î/ìˆý¦·Éì å„uö|f±2·¸:gZÿ{ûí·§~ô#Jðøá¤¬º• 6Ü aÙÐ*øE—µïOø³Éð½÷Þ§ p]|ñ%ói÷¾Œr ÒÃDwÏ´Y„ȵDnsK7D^¢Ó–¶†€!2–×…§Ônbé’%ñ Ü<ð¸jÉâÅÓ_©7Û<þâÞj ¿ýúÇ­ÿH>‚Õï9sžOÇS¤Ù—¢„«káøûÆoò‡ÉJg–  2~×ãæFSiȺ^WZ³OIQú]ZÎUÝþ—Ë/Ï!`ôWŸ²,$à „jK+ Žhõnô£i)‘•ÿùìàLcÓ_,ØzƒE‹hùÚh%ÞÇ–!üa«ÞÏÇrÁçš;w®ªøx¸sÄçäJ…§á°ÁûCnTÙoAx7è¦F¬¸çF׆@yýÖüÓ€§eN Lü=ô›jûÑ8íNJ³D ™iA‘Ïùiع}V æß¼R·uçw¾øÝéêì ;YævwéÒe¹.ÛÂfÏçàöcóÅUä:s‡7Þ‚ÏŸ7Ÿþû—ÿ£æsóýçþ |S.«² xe)ÕK¾ü“Ùõld `½c°Ç/Óu¸0Žæ[hÛ}",=¶tHãÜú9SiÖ¸¥Џ¯m^„QëÎPÉa­âwJ˜v›¿¬æ]Ö9{”›·-PVÛÐÅãé{ìñVµPBö|Û4kÖ¬ÎhêÍ:×cGyM›6MýŽ­[²naÁw2pÚŽÕ¹ZûX!â‰ôYÅUºÓD"C° -ê!‚GH|!‚öÝ\Ÿ5¤ï^Ÿç³nQW’Hã„‘£Óh5¶Ìˆ,0¢ådYÄ`‘‚ÿŽœ£rG§±°µH4 †÷³(ÂâÃÛø ‹&ü¶Œ÷±U¶ áåouùüòvNOËÐá²TÆê-Y cˆˆáo½}¢F¹×Ê«‚½ÿý'Ñøºüò¿Ò½÷ÞÛu÷K@ ÎÅÄý&ªå }ôQºâïWÒ/ÿû]ôp6'„D«u‰BSƒèÀ¾®7˜ôô¦EQ ããñIkß ©=eõ:ˆ„§ó/áS¦‹¸çÞûèã?“f̘Q[A2€vØžvÛ}wºè¢ÿíˆkøbÝ*¿ðfñƒ§páä±[¬íI‹8Ýì‹/©©>krüÎ&d âóÁ!,ñ¸„Wše`¾Ù¬7|ïµdž ³ÆgœN£GNmŸòøºòª«ºâ @&‹ËÓ°¥‹,NðÔ/Øúƒß±yÿ‰$,X°HÁ"†®V‚á0låÁKñq,¢ð1,¨°ÂNPy_ä•Ï©‹.,¦ð>Ëñp¼yÙt©í=ÐX6Û,8úû”5—]“wY0>é\–YE¸eD>ëS8 ñ’ÇúÕn¶úøýïÿ æFŸ~ÚitðÁ©ß¼ä»/R¶ôl´$}«©Yš,í×g©H»É~Ñ>zÚGT¿ä¿ø%=÷ìs¥ÆßlëœYfày…=}¦=K´©~´ú€M`ÑLã$SPÑv&â1DĸJO‡q|âÚ„pnTX™L_CêZ}æ\Ðô+b.‰k»×YËÙè¤Zø ù2”ý¬·þ™ãqÌUÕâÉ'ŸL—_~y¦ÂΟO<ñDúë_ÿªÆH 1<Îâi}wÝu7­\Uó_Å/ª7áÕ<—-÷ßF§ ÂxáÆ…“U¿‰¼×”!B”=„ð‰6–߉>‘naã€û*îDˆBÏ„÷f8,?ìþkÂÎUiºþ1`Áù‘#GªƒÅ eæYϞƭê¢wœØâƒá}çŸ>Mž8ý͇áygÑ”½`a„¿9 ¼úL¯´`ÀÈ^ÿaÖ’²¬?Ê2ÏÌ–M¡¿ýïЃ>D_ÿúÙªC¬æRwÜŽ³ef«Qóß—,éš|áûxÒûORS^zèaúîwεŠ½ó€6ÙejxAÎ÷œÉðä•™¦D:´k—f•Q?HåxQÖþyÏ…þh/1kÖ3tíµ×Ò>ðzÛÛöp†Ûÿýè¸ãŽSBIÂF?Ãc6rnºé¦júÞÃxÅ«·ìö–ät¯Š <@}{­/ô1tˆ@!ÈíO$ÑgJDñY¹IÇ7 6Æq[o½Uü‰§HZ¦£8Å ,ÑÄäšÓPÆÝM‹.v°8ÁßÜaáŽûåˆVpá)*,nDV ìàô„NPÏocqƒ;;^x¡ÚÆû£åq#$r®Êo„Xè`Á$² á7.Q¼Ñšþ£E«T4=˜è߯4ëüÏB›îË®JSXróû °[D¤ã ñÅaÛÖ.ëWØPßéã’½$)í+p{wë­·*Oô§~èCôÃü€.¹ôÒ÷µË!¿½3f´òüÞJø/¼0·õU°È.YíÓÕ͇?|ª |óßJ9‰õ9álw[˜§üö)"\ýIÇÛ>‹åEb“a ’ˆÛa ’ˆÇ¸÷VK•èE›>¦ñ¤C·"ѧÂèy)3,Þܾ;Bn‚(¸zý¦ÙVƒ)bÕa–·âå» ÎkZÌÓOÏ¢?þñb:åä÷Әѣé†oŠqàÈ'œ²|ûÝïþ¯eަ³Ú·Õ¦Œ¯a·Ýv£‰÷¥ûî»_­|uæ™S«v±ÈÃc¶C9XÓâ¸B–l õ»aŠ!Ò#z…ùä!#$=6ñÆ6UG Çùu‰'¨¿ãep/¾$^DƒóîÊ+¯jô/HºÏ#Ò|Ad–¥Ñ£GÑvÛm§ütæ'-pËÀ¾l¾g½t üÀ²Áâ?´ÑÔ–hš ‹ü³hÁSeø­_, ¬$²å‹%3gΤ .¸@U,v°˜Â⋆ Fä„§Ú°ðÁû"§ª‘€Â¾Bø¸¶ÊÕë?~¼šÛÇùÂ?ÏÝãt?ÛäÛŸZÜãªqÏÄè2;w!åæ}dw*û¹í³ÁíÙ¯ªmáÎ;ﬦÅt ³ªà}÷ÝGµó­ZñŒãæÕ·ßÙyrÊ)'Óoû;š>mz=OEZºž ‹`8Êw‰E®)LØ‘MxÈ”¤/Ü(¼bDrº‰miÞ¨^ ™:^ó¢ÿý-ýî£èãg~Œ.½ìOj<óÑ|X#þú·¿×üjô‘¯ˆŸüä‚T˜›o¾…>ùÉO¨± ¿ìfQç]‡¿“9ø`U§N›¦VÁ¢•åCœ§Š:Xˆb%|¾@²Æß>k a9oÎ3ý¸wWËé§~(±bØ”)SÔ7 !ʾûìCûì»7͘>“N8áø~HA[ 6Nöä“OªÁ´D- ÜÙcÁ‚`-xÿÍ5og ®N=õT%œðƒ¿Ç{Ð}÷ÝG&LPB [DÂÏÛ8^^é…§Àðüc>çóÏ?¯üƒ°ˆÂS_øïhIÝPÞ}ÔQôØãÓ‚ âß/UÓ÷È#¨ß¼Æ5ÇɎ̬™:x0zÈÁ±HqÐAÔÓöB*,_ë>ûìEãÇW/]¶”n¼ñf§™o-îC!€@—ò¹ÏåÝ?uêTúú7¾AG}tW\·µÜ³ÕÃý÷Ýß’spÜ|>W§ð®¸âJºù¦›3û;ãL< =Œßj€ü²÷êk®UVgœ~šªãî¹÷^zøáGú5]\ðÓ íðSRÁ"!¤9°:æý¿ÿû=½úêkôÐÃÑ¿ÿûÿkk­[²’¼³>±… ¶‰,7¸ÀóÃÀ–lÊÓSøáæýÑÒ·Ÿýìgéûßÿ>;V ìègï½÷ާº°e ,˜p<,N°…³(ÀçáxXá‘Ùzë­Õþ,3góŠø-ܨQ£â¸·ÜjKu]‘2ººï¡‡öäUrR‹0wÜqgõ:^N”÷WÓXáå<>|³À9νФf½ÝiñÙñ–ÄeMf´Æžf*áY*{êK2N¿ãPmÈàœNbK£ûÚB¦Ñ”áüÔÜžåü4tz·u×\sMÇN}1Mßï¾ûõÆêñÇÛ`“­·Ú6U÷n³õˆÌs±ÿ¯½öz‡zËX4}­¾~ëmÿ&Òg}v: gà*Îek3êtêpD¥!eRàšÆâR㘠ÇcL…‰§µoõ4Ù–º¦¦¸;ð.ǧfžûœ¡ºâ±o·>“~k…ëV÷ýlŨ»ûgÅÓ~ÿý“ã…~ø_2Ý ø@1vAº½°õŸláa¾óïO‡h"ýÂÒ¦SÆr¼Žé+²OÒ5×^K'½ï}Y†CË_º? ÇrJX¶——YµŠ–+-Vù›­1ØGG䃃E ¶ÔàÌà0<å…§§ð4ÿå/™.¹ä%x°øÁÂ[~ð¾Èa*›Ár¼l-ñÜsÏ©exXDá7C‘3Tî8Fûø\úò¸!¼0w.í½×^ij™y™ÝùóæÇ+Úð5l¾Åæ±§þqãÆ©°œá¼íÎ;ïN”dî´ ßl8zè!ôøãShúôñyøZvÙyúÃ/Ž+VÌ"ÆÛ±š{©B‘Œ›¼aØÊæ¸ãŽ-dxßõ×ßXMÃÁÊÑÞ‹/¾¤Ž}ßûN¤Ûn»CÝèŸt¾™[¬’Ÿæ+$Ybºá³Gg挙ª½;ü]‡Óu×^WZþp›Îqr_`&,»ä™.wšŒ»Çéзjy[£î‘ µ%!˜qÕ~Sæ€6.¤VA!$žV { =p?¾õùûÛ-uéW^©¦u ü2„ý_ñL… ÆÓÝwÝÓ‘å.p¿÷éZ…Y»(öíÁb ¬b²ÁVlÁ~<¢Õ]¢%myXMäi+ÇsŒIؼgÒ¤IÊ2„÷G^æ#çª|Ž?² á>[RD̘1c” Âçȶ¨‰Ï¼yó•ø2hÐ`5瘑yóç+1„·¿öêk꼜ÎØ¿Z8¯¢Ë.û³HÞò–]µU ¤½¾ˆþùÏÛhÚ´é‰}›l²±ÚÇ"¾?µ¸ +®pÇŸßÃl7bÍœù4ýéOQŽuvÝug5‡ #Ëy¹þÐõ•ïóÜ­þ¤Ë•ì·Š¥µ×ºåÞùêÿ§"lX<Ô’lO“4Â…Éäñf¼"íŰ¾µ¾OFÛȘé.â°öã£ðF8ÙÓ¨"„eãx}_"Þø<écõ´øÎkVS"q•<п“ù"¬y¦‡1÷Ûþù–ßAö•yQ5>7\“²žÜo¿ýûÍ—¾Ínâĉ*Îo¸ÙÞL¯y3é¶Õ̾™õœ%íúóV…=¬íú©f`{f¥-C¬EJúØ®5–ì0‰:ȺZƒ#Ol7Ⱥø‹HZuˆt9vƧ_¯hœÛØ¡¥KÖï—4êHSД½¬…­~¶?gRÚ÷ëç2ãiì3ÏeÖóöûàº>W[쾦RÞÆ„þ [ѳ%:úšÝÑolõ}á1õSO=UB[ֶמáâc˜LW_} -~s±ú~`òdGýgÏVë¸ë•tý\²‹,8° Árž¦Â°•ÿf«(Øâ³µG4†·ñô^Š·±ÈÀaõ«_Ñu×]§ÄŽ·³I,Ãû9EøxŽ?r’Êß¼?¯>†çó2D£FŽT^çÙê„—öedî¼y*³YÔaß ‘õÆ3Ï<[í¨ V¹Xr96âs¿ôòKޏõ0öós¼‘·üE‹^WùÅÖ';Ž«òvìØhÆÌNz›&ƒE€†k 6ü2 Ì¢™!±ð4FY‰‘éµiÊ}/¥´.1)µóXã®çkÕ>ÙDÚz ‘¯PÖ Éëo¼N×T;<ûì»Zº1~‹™5»È²!»ß~U\§r+ qBfÄéòîŸ%„èqøa)ˆ¾}2CŒÉóÀ·³(ÈŒüÆ}±\—ªžú,÷õÐ=…N»™o*bÞ6gPèA ¼\ó½÷Ý´ls9¯ó×kåL"®T£å›x ‹‘ïV°xPÎVìð4² a¥sΜ9ÊRƒ­@Xà°lÝÀáx;‡™6m]qÅj;¯‡Í lËû9ö:ÌÖ ÜIŠ„…ÈG‹"ya«~ëYðµì³÷ÞôJõfúC®ÁwÝTàØ"çlö_3iîäùÊ ­,¶_ôÈ7U%;•2G3 ¿ALŽÿdnñ£4éI–›ÁY†‘¹ 'eXg¤;;i"ÿÍ³Ì cäÒK/S¡ŸøäÇ•%Gü"´øÐ‚¡C†Ò~'ÒÇ?~¦j÷/½ä²š%£«@ OºDޱ•iUâò!iÈô›–2I Ï­(ꔯ(VGyï™Ãb#Š_J鮇ôB³6¾^tÒªPæªÛÂ#ç­ÔBÎÛ_»¯å,sÂh‘Þ\…µh'|Š¥7¼¿H}.ÊÑÿôMÑèÔ±CvzšM/È.µÅ)Å„=ÕFx~sÃÓGX0`ƒE>ts‡ˆÈ Ž§Èœ}öÙÊÒ‚+¸Äǰ¡|VTãf±#šFÃy>޳øÁÛ8nV.\¨ÄB6Ûl³\Q¾^±…Å>wd…Á1"8Üqü“'?D'Ÿr’ºž•+WÑ=wßk¨ÐÂãÿ‚è·ÞFï:âtæÇÏP¢_÷ÿp‰šÿ÷ÀÆq¯X±’#Uâò7^·„¹ÇPà“Sf?÷vØ!ôè£YWUp5°k’Þ¹æÝøÈZMó›È Ëc¨¹Ë&ó0ËR¹Üë ;§Ì Û‚];Mö.EC¥¥œåØ'Æ ÂqŒ1‚´ *£yâ’fæ±u °\™Vš¡Y‡hOŒ>GêUòŹq2Òg¬H“ôͪ¿á–µ´ aÜ'‘ÌÃz¼Rw€ jí¥ío½=ÕÓ-¥‘NAiSŸÔ‹;цr/ŒC’V¯¿þ†òM5aüx:àÀýiâ~iÞÜy4{özãÍ7hé’¥*(·óܾ3š¶±­jûn¹yRcЦùV×sNï%yãÉΒز@ˆÌsIC q¾™úMåÔ»¦ÅG$PXHç“pU+Ö0‰öEhõ¤0D ­#ô›&Dú¬6+íŒæÊ0‰Té+ËøŠÔXúX¶xêçŽ0ÁiKežL· 9–xÉ´Î ,Z®¶+È×Q³"H[’XÇ:Ó¨ò>ßÒ¡û´eo“e¤Çc Ø¡v*Íçow‰ù®Y”š?Â3nÁÏÿàRóBÔ¬xš <˜çé-¼E¶üàÎ ÿf„…‹È '[sðo<ø7‹lÉÁ[ðt—hÙ%þÍ–µec‡«é/lIÁ«¾°øÁÓc¸CÅÓqx¿ õÐ6³š\W?¿þõo¡ï¿ïõÑË'Ÿx’žzò)•‘ê±^‡úËŸÿjy”kßK–,¦«®¼¦î¶¢D”ŽwêSS¸×Vãn¤«¦RŸöR‹W?ÿŒé3Ô'ºIœ·OÏœ•kH-k=þTµ4Ðb@i™æ²y"ß#ä²*QjæïdYfËa{¯È^+Ôiós‘qCÍê"µä­/¬Þ–¥ iIGbÅ©ksJéh7…+ îù5v!UÚl™¡RÚz‰2Cñlª’m] ÍB¶ÚrKµj Ã6¦„†ÛkC¸­¿ýö;èÅ—^"Ð)}¿(/AÕ«kŒjŽÕe}•ÁTÙ\"×ó8ƃ2«BÁ".¼X/Âó¶Â9E¯2Ì•g<"ˆ5ά70ý „€ÎëdÝF—›%òt„§Ëakþ²º õ"G{{Tú(bp®s‰ŒÁ‘¬y«åÁ<‹샅í·ß^ur¸ÃÃy.¸Rdk¶ê`qƒ IxpÎ'ûõ`K MXÔ˜:uª²îx¹îô“­/XháxYhásÎ;W‰,ްõ‹,,¸°b{p…qËåyßÈÖ¬ñõh}ÕAí›ó¥G²çËmHÚ‰kÚHÃç‡pV[› ßL­ÃËà.^ü&QL]]P%$ZËt4CH&¯³[Ðf¬d‰>‰òÅ ™»Îh­Vâ-kY"…eíúÔÜ|iì’É„y>iYu$ü3Èäß®ÞLû$ЭEádF^ˆ¤oix=t;C•i‘Ä Yuhß©AhøÍHU­®B%<ÏZ¥¥Ù-í²dù `aÃ&n43o¿ˆóÇfý¤Þl‰ææiw¾ß‚<”®ç¬ãâÔ=rw>ݾ+¤^ådô]¢D¨"M‹Øßˆ!JH‹ðÂ}£ú ¢„_Žº?’(£iáG[ø… oú(c a ùä»óÞ%‘ !yûT…^¿5;­³}TØü Ëo× GòïC„CxÉTÚ{/:ý~‡ÎC Û/ƧD ^B6Zö–§½<óÌ3JÈà°\1²XU’,^°Å‹$<5„…UX0ácx ,ì߃Å<˜#F(Q„§Æð>Ž‹Ûf{E¡B%r¶ÉY^â|ÕŠ;~ûÆÜöÏÛ)lòt:}µÆ4ìŠó¶m¶û@'v‚ºNmmnWuä{Ó*5NT“E¯¿¯`« ¶ú`‘ƒ­=xÅ–ÈÿG´r [{pxVøo¶"Ùa‡TXCXì`á„E:XaËžzÃNAÙÿ‡É²$n®:hU5“WDI‡ÑÕ¶îŸ LîêCx•0¿i¿p!R‹ÌäÛi¯á 4ݱ–Þ§L”mýV­¸–锃hcŸÔ—‹túþ ÷4éI·æëÃ5—Ù½´¤¿¶‘}9‡!&‘>áZBÅ™£Z6ï§-ýÞ õ#h™ÑâòÕPõUølÖ^K£ µ±E.¾ÑBhþóÈ\ýçuÓWšAÆŒ£ÎÇ" Ç›vøY¯´õÞ|ý€2¨‡ïì¡ç**^Ó%Y@¯2æ*ûžBPé:¡¢W“’)xHÇ ÙΜòAæÀ^¦w¥§Ë˜ÍAº°ú×Ч߸|„HË æò Zúdbªž´´]öé/Ö©3ñ‡yã™iã±{Ó^çÏì˜2øú¬ÉŽJXêkîtpü›ì¸íÿóç:êšCÝX—ãóôƬê=ÞqoÚç'OwÌõr¹ë!ÄÝRûîWr ,Óu’k€›G1êIŸB¾8„?ÑRÛΩ3zX)c§­æÀÝŒ'1 FõeE2š×Õ,Ç*š¸®-Tsäs|;…q«Zl©Öª¦YÏ·å/ý8i9¿ÌyÞd<ÑöaÛîDã?øC%‚tŠ0ý²/Ñ’yÓ3{Ek­ FìDN=O‰ rÍ3.û -?ÝÑ¿{„{Jè°mw¦ ü‘A:Eü˜ùç¯V¯w†ãö½Su©£"ðøüôû?ΤñŒŠþ_˜ˆÞEv|¾xRqÄéÞ´D¿ÍÕk’ñ™aD*.¡;”ç¿-BL$¨ž½¶dŽ÷º¬éóäOÐ#e÷+b+JB„tå;¿ŸµÞciË£¿¦‘2Ø}éÆÒÊ—ŸAz‘ÞîKïóÑÂ@+_zÆÝ]µM ®2}úS‡U¿–°DÁQÕ?«´O_.ÄdçHùí ~ó·”©u™ÁdjÙY{‡^”#|ö§œa˘´ÖåâKQúèE F–q¢™ëm…ð‘%~„ ¦h‘ dʲOGÜñ¦µ7Kü çê2Ò™‡2ÀaW¾²™×A¥¿*½*>ï­Éí¢%§M¤·UƒÖ\o{LŸ ÖéI†w,Û8½È݇LŠ fExúr´"LDQâEBƒ Q…"!@XËnJÑÎé[lbŠïÚ‰K;ó‰)¡¢H`Øúøf.C‚ÎèøÞ§³œæY:¶—úÑ2ødYL#Âé3²B>@„'ñ©) ÒÒVzbÈï©]X;Õæß*¾þ(Myï¶rÀÔ¢‹.W|±€:Ò!÷¨w,®dYV´'!YŸ/Œß$+îôtF²ˆiá¢øè…²WÊZ¹-JC»üiµÚe^Ñ™ëÝÚ`FS)BWHZ¡Èf²2z‘æ¹Ç'VZѧàˆäA^!R&¦¥òŸÇÌ:!ŒDŠìã|zS¢Ï\ŸÆçœ~’qm #náÏÇT)ÀJ'OÓÏÚÓÓZ¨ê@®‹z7mhƒd¤¡ÛKjxX·4üg }dqåE½ìùÇhýQ{ÐF¿Ï=È…s^W‡Ue ¼»EH‘˜ÚU¨>.?Û¼ª\n5"Ý\‰Ìã…—¥w½©¨Ç,¼ûñHýÜæ¶x` ¢7¤RsaQ_ܲmcIŠÝ]$]jñÆç‘óTúD*¼ã:l×oÉÁB*ŸD꞉\%B´¤Ô‰\Ì.‹B´àÜùê² :8Gz›½²e1÷‡⿺†ñ@X«/u}Åy‹ì–¿)}Ʋ_¤V­µ9wO•Iú 9^Ä¿ÍôKK:SÇšµR✦@ ‹ìá\çÔ‹¾ôŠ"à‘‘ÙBˆÈÿçïW5Ó8C<é>Áwÿek‹KÖ—•¥Ü "2,VuGð‰È¥W¿È#€xYxÃhëcÎV"yÄž×5 :ˆº·!hYPäÀlÁ¢œF'»ÌÊÐs(óR[†¤ÃÊÃqžÔt“Œãd@ºñÔ¢·º¡däñK’µ°Šôˆ ö}I«Šü–F¡é)’´I‡È"‚†Û";ïâåÜ¢žiÞDîg©ué9Ò+Ò‡Ú„‚ 6nuŸõ¶K{ÚØ1ɜߟPRDðƒ¢Ï‡ô®gäó%ÒóÓdï¶É{&ÛVM ·òtödù%2£¡*"v„6„Ò%–øD)ÇêÛRáô0–y0Î…m¤ô_§~¬™GÚ¬×aîe²ò±SÊ|é‹™°)»NÎ5½V6a5 ë½ìˆ™¥ölLÒ]aÓ÷3]j“Çûú±$I: n¤‘žZSd° Éù-R «øP;¶OÃÿ]T׈Dõß.Æ%‚ø¯Í¯Âî/y-ú˜ĵ×:·›GÔyÓž³ÿ2íͮڒ.6yëú÷h»O.Hú–l&y2»¸H÷¦>}÷`Ç1‘Òž4Ÿ:˜ÕÒ”ë­ÎŽ,êЀ¡/VvF–ä³:Xr‰ho{­½²V”&KGA†Ç!›½¦ŒÎ£Ìˆ£ ñ#$.ë¬N¯”þ’ ë,:­Sí\‹¦}Ùú>$ÏhÍŒÇ6å&ŠÃígÄ´. k|ìÓ{šË›°™‡²mú}£ArÄ-ùLé!G¼"cpœµ2ú‚•pŸ€¡—1éA„#|‰™cÓõd®’µF»«?ÁñÃBúÖö‘¬)Rž¥­ùæ¶‘™xãïôÂ.2%Vè¥ôÍŠÎ?í€¡Í ¥§-5d{s·% ž 1òå–;iÔ¯RfžS: ÓÝ´îè¦)¤Í4R$ÃJ#œ4Úiwæš:Ör\¢5•Ñ­‰wy‰‹u]¯‘§éíkòçi“÷Y†×c®7&a )ˆV=YÎô؆•Vµù-ŠWä¿MXÕÊÀή¯Ã,Óm•´­f+²Ë‹ööU¦’"ìÇ¥–žMw/+ˈċÓ-õsh.Œ¥­/*œCäÄÙˆDŸ²"í»t? ñ5y\$KmùYm[ÓÒÂåïTÖÃ𳯀#(u¥§™‹e Çô™*m"ýìhÖ„Nû‘,m‘¸!-½&iy*Í¥™#d‰ÅuÁR»®Æ°*-ñÈÔ¹¢¡—.¶HC`A¤q­Ò¸Bi‘'ÒaSSÄö-RËt<ét$E^í‘J½\Ëv¶ ¡Y–B¾1»M}Y¼ï.<͇WMÓ·Vè¢GŸCã°NÑbeME }‘hùÖÞ9´2Õ:å±dwÆ­Fu2¼˜¶uÞ®,r€h"\«ÔV™'ùlwJûcPíàBŒE@~f \ìñˆ–”L3ÊQÞš±¼~IC¦ÔÈ̸²Â4¦¾HcÀ“6R´†µÄç;6Ïq2cªt,±ëÊãŽEñ纓ªaáèú êî÷‰¢yXä|2HU³½U)I2 ížók>+Œ!šHøÎ ÃÙ'õ_R«¹Ä"ˆL·ßš}øØWŸ¦"R6Úõ0ê·L ´ù˜Š&¶èú‹ÔêËFi“‘ª›û#uHžÛÖfiÓI’ןüšéÄåä;OV·¤–÷q/ÏõºÔZ-S,M™@Ä"˜o9R‘ú[äzª…CVqi„ãìfZ(3ÍéðÂ2œÖ3‘3ö|Ö\^aÉW_ù†ó"pœ:ÌÏš”wâOÂ>@RÆ™¥§¥³•`á©}j‚ôä”ƬkKê×ÈIu=À¡Ñö­ób¤_X„øÐAõÊ ¢Õ…•úgPô=˜65d˜8Æ—ëÉ¥¶Œ,Ê꾈‚Šæ½UçkìES×nHÎŽBHç\dÎG™SW®ef‰}írøÜY½daÍG_>Y+imŠàLSN¼Ná^ûn¼å4Ž鳞J #’?V”_PvB–èÍè„gŒáó€à‡Ø&èøšL‘1Ž =¦qAv_zêJÛøOdŠÂёΎf†C²®Wö ùâ‚¥_Z¹zÑ ÕŸ+«ŸÕõ.ˆ( ‘AÚÃ[Ñ„]´tù˯TäðLJòI}ÃDÃ.@ñ5n¡½·¼½<™1Ètä+’AONAhñ% !‚^ |Hòºqý/Dä}ƒ™ÇIRsn„d)žzEñrÙþšHŸ'S¤ïZ¤UÍ´ËÂÆ[Ý>OܦÒ„“Tý˜¤‰³.&覦Ò§£lÄoSiЖš)" Ðø¦Ê†‡|/Ò›®¸Dó”8ÈïàAG¿ eÖ³Ó7É@ÂŽó–!2oœÂ#Üxâ0>áÅVg|Âq].!%—@“!=‹ÏfÑ{ߥ1„ŽŒç9Ô]kè¨ÑÙMÊXâ^z~ËŒmÒs½7"ùÛ&‘ÝÊÓý1é[[톮]祅óßüÊâåÏ=RÝ´ªþ1Åþ¬å(…fŸÁõϺÕÏ:ÕÏzÕÏêghý{ˆ¶oH ÑŽ(]ÈàOdåÁ‚ÇŠúgyý{¥¶/!„ öDZ©Y…Dûy›)€DV#eÙ›ˆ.‚DÖQ˜ÔJ0¦yNåÀ¦µ‘ÔNYŠDV#ºå „4‹.`°&Ys¬Ñ>«´O´-@3iW(¹Œ~¢HDIÄ´þ€€f1—´´ ]èОFß}FxÅ`-¢Šö÷Úúß‘b ºßL@+Ñ ÝÈí{¶ÏOÈæ¤b\CID_"—(¹„.@™D‹îDZ….rèbˆ)~$|€cy¢ŠåÛ÷Ñô ]Øð}Èò@S؈¬;l¢| •ôYþ6ÅÈJÄFa@˜JÆßæ”L@+ÐÅ ó·M1ÿV¸ˆJà6€vÒ¸M1¸@d¬²ÀÚý…i’Éÿ`…BÎx³êºIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/musicinfo.png000664 000000 000000 00000020425 13703317554 027323 0ustar00rootroot000000 000000 ‰PNG  IHDRÎÑ„ŸŠtEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp  Î•}…IDATxÚì Õ½Æÿ;3»²¬øâ­.Hù€h0¾ñm„T” šAs%E…È-ÀÄ(qYÂrÁðИ’ h¢EŒ`@%@$äáA®"”Š(*àT\}LßóÝ{{û5³3³Ó³ß¯ªk{ûyNÏùúüÏé>_Ç $I’Þ`$³q,‘P8¤Õ‹)@0NóÉ#A eØpXæ( ˜‡hœþxˆâ!aáð7ˆ¨šÇM,nCÂ. Ãe²‹¦‘xb.¢±O—y{MDHXDcNÜeÞIDž5ŽU(˜Ú©éD57üOH¾¡QÓA5²,s ×b.m«h¢jêôË_þò<5Ýݾ}û>Ñh´„ךä uuuUØTQQ1WM[Ô¢ý6ñXE£ç£ Ïq \jˆ¦Ý¤I“.yðÁ¶k×®W$)â¥&ùÊtIII¾}û¬­­Ý´nÝ:§ÆkŸᘂ1ÿž²wïÞy:uêËKLòýû÷¿Ø¥K—ÿV³£2j¨uêì히CÇ. b„g¼¤¤5СC‡KÕŸ¶–ÊÃÞ‹\_K¹ˆÆ®Eئ!­(lkk+ÿN`št-‹]4¼”¤µjÈ&žFŒWS@áV.œ¯G|Ú9„P8+í¢± ˆÖˆSF‚Ö8iíÂñ­qÜÞ ¤µ §‰F¼B5BH¡Z‹³yófYµj•¬Y³F¶oߎw‰­ÿþ÷¿//¿ü2JÒb¤2t:ã”——ËÞ½{¥K—.²sçN9öØcå/ù‹tëÖM¯?pà€TWWó×#Y«a¼Ú89ŨQ£dñâÅòꫯÊÉ'Ÿ,®Û¢FúüóÏùS“¬‘óÏi ¥oß¾²{÷nÇõ>ø œ}öÙríµ×ʹçž+/½ô’^þÃþP.\˜Øî?ÿùôìÙS>úè#þê$ÿ…6mÚ$½zõr\7bÄÙºu«¼ñÆ2räH™1c†^>xð`ùë_ÿšØnåÊ•rúé§Kii)u’¿ÂY²d‰Üu×]òÝï~WvíÚ%&LpÜbˆD"òþûïKûöíå“O>Ñˇ*o¿ý¶|ðÁúÿ^xA/#$-:¢Ýzë­rñÅK4m²arï½÷Ê?þñ¦}ýõ×z8î¸ãäºë®“gžyFî¼óNY·nLŸ>¿8Éoá\xá…2|øpÏmОY¾|¹lذAÚ¶m+Ï=÷œüêW¿jÆM:UÎ:ë,9ÿüóu/!­¦ãFUU•sÌ1RTT$µµµò·¿ý­Ñú«®ºJ÷¶¡­Ã0P8 ”ëܹ³容æ¹úê«Åê…¶ÏM7Ý$ÿú׿dРAüµIÚ(h0ÀµL… Ó1jêÇ_ËåL V)))Ñ]×væÍ›§{å-ZÄ_›«M"‘‹ÔŸ}j:*õ¦˜ê,“‘ãmN8áGÑ|õÕWòç?ÿYFÍÒ@ª}úôÑÝÙßûÞ÷øK†jA8zô¨~½m„¤;T‹åkæÑÛFC5B(B(B(B…C…C…C…C…CH^!'­J8¯¿þºöUóãþûï—‡~8åõ™¢¹þoÖýyäùøã©‚$Áˆà~ýú顸­B8ñx\î¸ã™8q¢ï¶_~ù¥>|8¥õr°mÛ¶Œä¡¹þoÖý1Ú^s^d2/a¯bbTð´iÓÒ*žœî´ðSûì³Ï´‡¦—šuðZ2ëÁc=æx| I€xƒPSS£·÷£9þo0dÄprø+à†$/­¼_VV–Vñä¬p0ÜyàÀºšµÚ<˜^pÁzh4 9öïߟÔz܉`ôñë_ÿZ.¿ür½Ý»ï¾+ K/½TÎ9ç=Î Y@ˆá 8Æý¸ ¨¹þo8×ÚµkµHa>¤ñÊ+¯Ôµ©S^HÅSPODM…jj£¦5 ¦Žj:UMY¦ªªÊ8ãŒ3ŒÝ»w*ü0.ºè"CÝýõ:ÕÐ3T1}ôQýÿŽ;ŒîÝ»ÖÛ4h±téR=s(¡3gÎÔÿïÛ·ÏPwyCHÇ}/¾øbã–[n1T8e¨@kƌֿøâ‹z^ Ò8r䈞///7¬ç•hô~&O>ù¤¡Ú6Mö7ç׬Y£ç•€ÇuÊ iʆ  u“Ó×Ü ”ù†²ß±A % Ú(lÐJANÖ8ð@;óÌ3µEüj­_¿^¯C(WO˜8Ø\qʼn}ýÖ{ÿ6x±3Fÿß©S'¹ñÆ›˜€X§FŸbæaïDºüßN9å]›<þøãºýƒã6nÜ(ãÇ—Ÿýìgiœ“ÂAhöÎ;ïÈw¾ó9ï¼ótA1Ã5´yŠ‹‹ PëØ±cbÞo½ª†‘6mÚh“wˆÇ,äN´k×.1ÒI'éó;õìL™2E‡P¿ýíoEÕŽþo¹àÿöƒüÀõ|¸¡<ýôÓúz Dô5ÉŒhrR8(¼ðI[¶l™¬X±BO*|Ñži(X(œ*äÑc“/¾ø¢QáõZïÔëbß5ìgm§@´^~lh“XçDjú¿áï‚ µ¡ †y?ÿüóZPAüßT誷ĠS´Ëü:AZswô=÷Ü“VÑä¤ppç½ä’Ktük×®zºì²Ë´ç3 B„+ø’@#Úú¬Äo½ã?^‹œvÚiú¼(ܦÐô²–Rm ý€ vÜýÑø·“Nÿ7äÇ6,±PãáFaÏ ùæÆˆ›nº [rN8C† Öd9–A hO<ôÐC2kÖ,-¨±cÇÊ!CÛù­·ƒÏ‰Ìœ9S·ƒÐΘ?¾(Ä‹‚yà 7Èõ×_ïºÿgœ¡ýÜÐU ·ôxÙI§ÿÛ–-[t±!ëz÷îÝ$/h¯I„ÃdxÍ:<('žxbÊëM`ì*íÜÕÑNB¡v÷w¿ûÂHx»y‘.ÿ7ÔZ?Q ìÇrÊ I²6Éw_5?Q @e/hè ð5†Æ½ÇO4 ]þo±XL÷Ì9Ë)/$ââ%hYèÿÚ¶S~úªe¼Kæ.%ýߪÅx™RáRs¡ÿC5B(B…CHZI¹óé§Ÿòê‘Ѓ7S²*œTOHC5B(B…C…C…C…C…C¡p¡p¡p¼Ù¼y³¬ZµJV¯^-¯¼òŠ6»°“ò暢§#=0ùÑ~¤Ý=§OŸÞè8éLI/99§¼¼\ŒÃ­®.˜ÿùÏ®'X-ÁüÛ¤JsMÑ­¤šž§žzJ»ÔÀO ÀìÃú¨þ=à -¤ÛtcõÊ Î‰ÿqNXfå,¹hº>|øð„iºÉúõë®]»ê‡ lBžiSt»»Õ }ذaúx8÷!CŒyóæ9æuòäɯĉ]ƒy˜Á÷ïßßPa^ŽeªÀê&à˜%}^\«Þ½{W\q…qðàA½ iŸ3gNb{·|ɇ۾ê`”––*ÄÖÿ;Ö˜={vÂØÞ+/8'®·j絘9{hM×0CÓµÒÄÏ„<Û¦è&p¯Mλ?ŒàSû¾õÖ[Ò£Gý•:„L¨9á¯í„™gl÷­o}Kצ5îä~ø¡o¾ƒäÃm_ŒÕÂrøn˜ç›Å ’u³ÓßFb'  § ?ž=æ5MÈñ]˜ßÿþ÷rï½÷ê/ ˜5EÇ~ø¾ B´—œLÑ¢Þ/?:tèðÍEŽÅšõJD˜YÏ ¸a5‰F£ÚH Ú%~ùöˇ׾h³¡àßwß}Ú8×ΪAó†±^¡âc´_œ¬˜LrÔwÝu—þ±W›mkûÄËfï°i‚×0>Ôd½ëN:U2$ˆ)zCœ¶¼Ã>_‡ƒia³Á çöË·×±¼ö…G6Ìàá‘Z_ŠÃo’J^r•œþ(îb¨Â'Mš¤C,Üáìx™ƒl›¢g˜Á£Žg<&wš‹_¾›³ïO<¡¯5:P㙵\¦òBá4€/E#†F¼Žšw4Äëv¼LÈA¶MÑ3ò#©óÿáþóŸòío[‡BÖgZ©â—ïT÷E[µòìÙ³u{Ÿ£Äzxyg*/ìUKô¨UVVêž{zÝГãÔeÇìyrbîܹƨQ£Z<¯È>õ˜N¼òʾè)T¡m£ßG ÍPmŒç…½jÉ4Ôgv¬¾a~iH6ONdÛ[ÎÏëŽäæ›oÖ!ÂÈ‘#uA1£ñå ê+¦îîÚ¢È:nwýúõzFÝ»w×! B—7ß|S‡,;vìHÊçÌŽÕ7Ì/ ɿɉl{ËùyÝQ8?0îè0µûÅ/~¡»=aºÄ—+¨S zíP@P[˜wJ«oî¬èÇÝW…G:]éô ’†dòäÖ%nφ·œ›×]:ýæØ9àîtèº,++Óÿ§Ó— ÇBc|Á‚‰B…ΫB3„k(X˜o‰44—l{ËyyÝák ¨e)œ,ðÀè®i<M§/î~óçÏ×wFx²áGVÿ„@|QÃà!j=}Ѳœ†æ’mo9/¯;bNæêA1ÑQëÁæâ³~IÀÍÐÜÏ=¨yy4 ¯8ÏСCµáŽ óFÒTxðàĺ#F$¼ÈðI¤ÃLÚ`¸{™†ææä0BWBMÏ4BG;-ór¿4`LÎs€nݺi¿hÒ”7ê|.fôèÑùׯqÃÏ…áÙ¢E‹äOúSRÇFÌëÖÆéСÃ7+Ktmºšû¡'c^î—¸â ÷ÝwŸŸyæí´I2+šP ÇÏý½÷ÞÓ ¨-Pû̘1£QÏJszeœp34÷3BOÖ¼Ü+ èù›0a‚®Í Nt‚@@¤qw4ÌÝÓ)šPux™¢£w”»ï¾[ Fµ}ŸÓj®î„ùÉ=sòûäp34÷3BOƼ<O<ñ„þª¿è¡óû4Hk쎆ïx:E*áx¨c9>•÷ÓŸþTßåxà}'6¤ZÍÕñ1&;èiÁñÌ á”n†æ~Fèɘ—û6¡&Ã'ña+´ñ` ogò nšÝ©&!óŽNÅÝÉ\=]8š¿ç8AÌ˽À§2Ð^2?‚¶º·Qó¦ó)yk#o½£Ñƒ•ì—ðp2¢xðètlÔ~^_)hŽhÌ ´™LðêÂE¯öiÅ5©ÝòãÆÓµŠöÙO~òþ‘ÌÖ8N€m.ˆdG81^¦ðcí'Y/!!!¹ M×I«†¦ë„0T#$Bµ—ñÝ'BR ÕvVµåÕ"„¡!!!!!„Â!$ß„snûˆ ê‘«OŽÈñEÙ?ÿ­½¢Òµm0wœ)?^[(ÿZ$ãÎåHÖ@NþÊÓ/+”ó;ÈÖJC:‹´‰ÆdÄÊꬦá²ÎÙ¢ÎÿéaÇ›¡="*"ƒž«f‰¢pZ†îí d@·ˆ\³´Z>?Z_h#7þ•ò#u"q—r]¨êÒ6j›Ce9ªŽW¬Ö}U㞎;ÿ]ø˜]TÍôîF“ãù¥‘P8é‹DRgñ6³¼ÇHù¥…Òµ(Ƕ×Ê‚íßx‰-X$ËvÕɨžQ)Rûà¡DP-_6v,­&ü_zlì;bÈߪ“¿ÐØ Ç)½V6î‹{óîÞ1rZT0½ª¥F¯®‘v*´ôJ#a'íìúÒÐ…uaß"ݾ±M͸¼PÖ|\'W/©–럯–›ÏŒÊµ§|³]± ™®Rû]·¬Z®^zT ð¦Ó£z]û62ἘŒ\U#7®¨–—>‰kAØEc'ñ?æÜmµ²|w¼ ¦Ë«åÀ׆o …“ƽT#/|X'eê®ýTÿ"9ó„új¨› ãzªùÇwÔôJUH——Á§Eí¿äý¸U›ÔÆE6fÈ©%õûwn‹šLä³#õUØž*C:ìp;¦ i$NÚ©V…óo×Iÿ¿•­•qyäšBÂu,.Ð…·ÊòIGÌÎ6sÜõMjÕl´!—ï~nÈ^ÕØŸxALdôÚ­þ((MnÇ´4„ÂɇUᛣB¡Nª0"ÌBMqL´¾ÑmÒA-ß$¸ þ¿:é¡jäñëjtX˜Nš›FBá¤ÄÉ*B€Ù¦é_U…ÎJ5}¨åï4ä–³êÃhœ£Kùé÷âªa¬Ö(R·‰}êÎ?æì¨ÜÖ+*í ´(ÿkuM¢ë»¹ÍL# œ<‡={àµldCbŽ+ª­Ž¸|¢>•g$“/ŒÉ×jŸÿÝRP<ÏY|]‘î.~>›ÏqÂÉ[·7Ût½E~rœa”›hßÉH´•¬5ËImÐvù¤*3ùH%$g0Bªe<„œvYLuêZ ˶T2Œ"ÍkãäõýñÍq´¼Z‡Pxžó5Ûë$Å(æ²Â°LyGU-K $ÃAšˆÏŒÐ …ã k¯Z¤aŠY&Œ„9¹¦¦æ¥h4ZÂkIòx<~8‹]¥f?Q^ ®µLñ†Éð«q°Qõ6ñ’’Ö@eeåÆÁĽjœˆGÕd §jΜ9óëêêñ²’|eeeÞA8­ÔêÃ6—)¾víÚCµµµ/÷îÝ»c›6m:G"‘B^f’G‚9¬jšµåååSÊÊÊÞV‹PIXx6QCGìíó ³­¡àÕ’†ÿ x¹IžuÔ6Ô4‡¥þM³]cOB@1ŸöMET8àQiüjNÄV;‘ØË¸uªõ¨iÄ\·„ou¶åæÉ"–ZÊ* ˆäª`ìeÜ^¦ëj˜¸Sç@ÌçÀv•ZEãVÛP8$ Â1l± (îÖ¶± ǰxëqÛ2'Á0L#a×Üä¦N¡š) ë†q[-±‰…Â!aŽ=šrš7j¬&¡ZmÃ˲D÷´ƒp kèføLâ$¯ÇMDâ" ˆ„±­ã$"ñ“pÜÂ5{;È.І„UÿïÏeÆ9IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/play.png000664 000000 000000 00000026247 13703317554 026304 0ustar00rootroot000000 000000 ‰PNG  IHDRåÿ˜tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp ˆ Oy)IDATxÚì ”ÕÕÇouϾ°3ƒ ,¢"B *qA…ˆŠÆ B\£&ùTŒ5Qƒ{àc¢çh0~1‰; IüD5jA1F AE¶a™}뮯þ¯ûö¼®©êéž™ž®î¾¿sÞéêW¯ª««ê_÷¾û^½g†A ’ð‚嘉Îi‡E”‚D¡æÄ!F§eC„*q‰Í ëÃtÈsgN A:}1Ä)ÂD­—õÏxÛJ”nBtK"FAp§é’삌fŽ‹ íÉç²l· ‚ ‚l-ʠ˲“@cZJ]„H¥Vêi¥ÂðwAÚ"¬³Ò>+Uiy®.lŽKÝP¤ßJe7ß|ó+ÍêÝ»÷±~¿¿Xε ´M ¨©¨¨XùÀ —âââ!“&MšÚÜܼrùòåeS¬m Q²ùsÀŽ;~[VV6IN± ´Ÿ]»v½Ý¯_¿k­Åm0¢ak°×3}uJ»8 á²Ê)„ŽÑ§OŸ ÖG‘fôì-!ëê"HÝ…õIR:Å•-²iË©‰±UóÙ)§R:_Ÿ6aFÆX–ÒQ BÒDiIJ”ÔF½R„䊒Üê”DÎí•‚ t.NUÆ9mXʉ²¹¹™êëëÉ4Moà‚‚ÊÉÉ‘ÛCH¥(5–Ó†•ì(!H/Þüü°())‘ÛCHµ([é/–ûÚa`!½hpL^³ÞBÖ‹ÔµN)BŠñ%¢`A:ß2&*JABr¨ªªR78Î3\Z,#áæDòù|êF‡ !îK|àÀõ ¡a¹[·nÑéÂ~qÓC½zõR×ËØ/Êã7ub­sûÍXÛ8ãéÞ½»Ú ³¦¦&"È®0 iczðdݰaƒJ¯½öš:É,R$ˆ'_H°Ž8ï°BÔ·o_uÎq#³¥…8Õ:ëì¢,--,£<€ m±OõZ¾þnëÜ~Çæ¶M¼ÂDy‰®dZ‰Ò.Â_|¡ÀSú¾ûîå$öLإ㇠¾³« ñ 8´{÷îˆ×ãäÑÀRòk}D‹O¶ž\ßeb­sûÍXÛÄ+LX×âââ.­:eL% ®®Ðu¸€!ôéÓ'æ.!\Vn¢]Üö:m[ëœ~¿ã¶M"Âìj<ëïáb]qÅtâ‰'RÿþýÓ2 ¸qãÆH»˜¾œÉÀµåH.coVa †k¬—…5BYX>€@PÄzÄXçö›±¶é£žoHê9ô¬¥„G¥×ôázå×_í™w"q᯾újºé¦›hذa‘ü#%ZˆMw•ÝÖÅúM·m¼LÚ¸¯2ØE ëÃ"ݶm[ÊŽ ‚pcÜÿý mûÜsÏÑÖ­[éâ‹/V+fÞ¼y´jÕ*:묳%nÀ™3g&¾×›B]Ðú2ö_VV%2@ý®$Äá$Ìm=„„Äëô€P¬un¿kÏz‰é <ꨣèÜsÏ¥›o¾9¥ÇòôÓO«vÕ ´ËE2eŠÚ–AÀB>|xäÉÿÈ#D<ü¾³»¶lÙ2š={6Í™3‡Ö­[Ù†Ý6XrìÿöÛo§Ç{,éLU½3žõ½.™²³ÝYiCè pÖ,YBW^y% 2„Þ|óÍ„÷qÎ9çD‰rÑ¢E4}úôˆ¨ Âë®»."xˆßQGZ½z5]zé¥4pà@Õf¸råJUæ†nPn€Õ|üñÇiÀ€Ê«NÞªCzÚ}Ý´i“²]]êýë_iâĉÊu… úÔSO)Ë—cÇŽUÖkíÚµ4fÌzþùçéÑG¥¥K—¶¹íæÍ›•Ká9¹fh2ÂCcÇŽ*´/xOˆíUO<ñ}þùçQõ–t®+ W]u•jÓzå•WÔ'z”$Â…^¨¬%êjØßÈ‘#ãÚîì³ÏVÖyèС4kÖ,ºå–[¢‚*%Ö‰ ÓO¸¯°6º “]è,¶oßNï¿ÿ¾ªÓ~ûÛߦ .¸€Æ¯ÜÏD¥ƒ…DÂ~œÎ×)9ÊQœ?¾ªWâX.¿üò¨m!Æ®èD-îj†‰’ƒ:½{÷öüÅCäÑÑóÏ?_Õ‘Ð46Q´‚û‰&’3fD­ƒ×—~ýúõêûË/¿‚X8âºõÖ[#=œ˜o|㘑V¬XñJRù:–ˆ:MDé$ÀxêeˆP~ôÑGªÍ2U®ë÷¾÷½¨¼iӦњ5kèË/¿Lx#‚Ep7í  áÔ©Si„ ôñÇGêÝ‹/Vý~?þxe%ï¸ãލíÐ,òä“Oª}Ã%†xÅrz#<•3’_K¹á„Ƨrëɺª=;Ç[ñ´ AT .TÁÜl§Ÿ~zÌ:¢ŽÏ<ó }òÉ'Qù>ø`§›—@4Éþ òðôWœ@w6Ôu¥ã~Û–nýŒüNûe}¾qÖÇNÜÆšf) %Óžƒ:ˆ®¿þú¸ËÃ:Ø™ 7¿€ì”ß³gÏ6·ïŠw… ©S& \V;ñÜ”‚v+×ÑïY!J¼]`gòäÉr7 b)SéуnÞ ¹ì²ËTS„ džô¤‚t ô`ãôHNCD)ñ€`Lž?ToDÂrc dÝô:¥ß X•ñE ¢mÒúGc./ïnp (ÑWAˆÓR"(CÔ« ¤ ÔañP×,Ì ­‡¸£©¤¢¬õ¦ª7BpÝòZ\ÓdíÏÚêˆØ² ÌM%i%Ê` ™ ‚ žìŽÎò>¿<“2´KÖ5G×/9A‹óQ¿Ü޼¢]²ÆåÅ&Ô;Âþl2ïè¤Þ•dIQã¤4©D½NV[ïÙÎòBç`ºä™¦³umï>ÓªN é5Aª'‘uL^³Þ‚Ð%¢AD)"JAD”‚ ¢AD)"JAD”‚ ˆ(AD)‚ˆRÒ›¸:¦–¶ïeΪ*oÿùöþ/AH¹(»’ºº:zíµ×èã?¦êêj*++£ &Ð 'œ ÞîxóÍ7iÍš5´ÿ~êÙ³'7ŽN=õTòûýr5…ŒÀ~[K¹á”o¥ò`0¸ª}–²ŠJKKäC=D»víjµnøðáTYYIÛ·ooµîˆ#Ž þð‡äóù’vl‚Ð)õEŸoœõ±ÓJ Vj §€–LOÕ)a! >ûì3GA‚Ï?ÿœV®\™mß¾}´yóf¹{³Y¸^:¸¬©Ø¶#Ì;—î¾ûîVùo½õÍš5‹þýïǽ¯%K–Ј#è²Ë.£+V$õ¸|òÉ´sçNQˆÒê æ\SS“’c~î¹ç”˽aƨüyóæÑ³Ï>›Õ{á…è§?ý)ýãÿ ãŽ;.©Ç:øÌ™3©GêûM7ÝÔê?"JêÝ»w»·íÕ«WÊŽ{Ê”)´`Á‚È÷Ý»wÓÖ­[U=<õÔSQ®7¬çK/½µuëÖÑÚµkiõêÕ´páB•‡ï°ÄwÞy'-[¶Lå=þøã´gÏž(XuuwÜq-^¼8jÿO?ý´ Žýâ¿ ¿ýío*Ï4M<þŸyæzòÉ'#¿}á¸ïºë®(«²³gϦ9sæ¨c2\”cÆŒIɶåœsΉå¢E‹húôé‘©åq#ÿþ÷¿¬ÿÍo~ÓÊ݆E…õÊÏϧ¢¢¢ˆºuë¦"ÐS§NUQçW_}5"‘¡¾ .½ôRu‡z(=üðÃô³Ÿý,R®ôW\¡„Ȱn¸AÕa‘àÎâwù·/¹äe±H_|1½ñÆêß@^AAAÆÔ㽆§¢¯õõõÊ2T%ØÀyÈ!‡Ð7ÞH¡¿’œcsã¨£Ž¢?ÿùÏtÖYg©O<N<ñDzôÑGUÝ¢Áï|ÿûß§/¾øBY þýû+¡~øáQû:÷ÜsÕ~®ºêªV¿óÝï~—N;í4Õ ôÇ?þQ‰ÑêòòrúôÓOÕ2š‡vìØA………Jh PbïÛ·¯¬! òà²|ðÁ4xð`hƒuGþ¬="Ú=ö-]ºT õçwß}W"×íµ‚é}ÅMrÑE%Ô´mðTODÉà /TV nêhäÈ‘‘uhcÅñ}øá‡ôÞ{ï)Kc¤úÓŸèôÓO§‰'ÒòåË©¡¡¦M›¦öWB=z´¬%,$ ^XX<ˆ6°/¸È8Nìûç?ÿ9mÙ²…Î>ûlu,C‡¥{ï½W=„ÎÇsÐæxÞyç)«O°– Õ hræ™g*ËuÁ´Z« ·î#ʶÅÛo¿­êm°¨tPdŸp/Q‡… Q—œ1c†Ê‡›k”!ø¥[´xGÄ6‡v˜²ÀvæÏŸO×_½òL.¿ürœ2¸N©[X„¶‰›bذaž8f¸±¸™á~³Ptàú¡™B‚Um‹/¿üRY*V.#ƒýC”Øßù矯òÆŽ«,ôªU¡šz>Ájr°)!Âåå}UTTÐ| ¡ý,,ãÁyë­·FYa!ƒ-%sÊ)§¨'û‹/¾¨nÜÜ\%È#<ÒSÇ ± ª ÷ÎÜ@XQÔ›Q§l ¸Š÷ß¿;ê†&1gœq]}õÕj\Tš`”)..V¿w:///®c¿òÊ+•5F—Fª°-ª¸èI…ˆ+–ï¹çõ_Pw}àDA™èqOþçŸ^Ežþ„ þÔRÑÍA–É“'«.ñ"K¸±%í˜+´¶¶VÕÑõ:=‰ßç¾Åˆ(ãÜ¡}3ÕõøL ôx~Ü~'pS<ñÄê†ùÑ~—¥ñMMMª9ÁüDHT ¤“÷rsˆêªQ®•e-DJ‡sŽÀ€·`÷°î)äa4Qá?#jŽ||ò>á±e•ûªƒ®g×\sºÙ:ÒÁ UÀB¢;zÿ”Èl×IÂjllŒ<Ðà@@lÙ!8$7KB¬ ¶Å5CYöå’á-¤Í 7ƒ JÛ›ÄÞ{GH.ÄÂxàvC˜l !0XSÀ⃈± G©ÙÇ6Èg>Ùn»L;%d™.,³ÛÉ‚Ô×C|°Œv±AȺ¸±äAôpk“%NDȸۣS{­=럄ÃÊš¦)¢„x€ptÁ`Bâ@ z"q0‡ƒAö:)ÊØ#ÑX† ÌV’E.¢„¶êd–ÕƒàX˜ì†BdÜW”ÈØBr´U¤>ÄŒÝ*B܉t•:¥õ– Á©“€8 ¤GYá–"_ï× !C”XÇVXM<œ¤q¡D”BF¢·#:d (î¼ÁêÍn½ Ï‘ؤZz¹|B&[ÌÎ.Û½˜¤N)CD)"JAD”‚ ¢l©'«µ#xñ˜Ijô °xÙ6YÝ‘:ò°àp¸ d•(ÑÀ*¯* ‚Ô)AD)‚ˆRD”‚ ˆ(!+éÔèkG¦²„L'Þ–ˆ¸D9rAËÛÙ §ÄÜ·Xμ ¸±7¾özq_Aꔂ ˆ(AD)B{Iîp Áf*Ïi |¿·:¤7 ÚÙœo=’d4!ËD Aö()ˆ{²Ò®¢¯nU×ÓΠˆRÈ2÷Òk‚TO"똼f½Aꔂ ¢AD)"JAD”‚aH›€‘`ÄBL±0§&òÁ$=<,òœZôÁÞ0È€cx{û¼•"JAˆÏų3CdáÚ¢ ¦¶cÑñ2—ƒe!²•e ›lÄR Y[P'–Ùb\Wžñ™§dïÒã“K$dö9$õú"O©Î–‘§U·oÄeʈ(!AK!q‘똺[‹eX@ò°5Ôë•ú¶]‰Ô)…Œ%,× 9胈,\V"ò9„²p[‘ÏQV.ÃÁ¡¬å7Þ˜Pù|Ðu;^'d7z¤”]W§<½Én+·K:M¥ÎeÅR B'Ô-Ýòìùne²ÊRvÔº¥Ò:þþ3¢]õ-qt/“Îè^>hUW®XfЯ5©w¾Gpp¿åtŒW·”kÅû™*•µáÙø,ýN=ؤÒ\9wBÖ)»‚6'¼µVŸÜϤoöÕ·!zi3ÑñåD¯|²Žç &ê™ß²MsÀªã¡u¯m%ÚXiÐHËÊžrP¨Èbkû Ööeán—«ˆ6YiRqGÅRfO$)…9äß·†hö*¢î¹&m©!úŸw[ö?oQechùv«Ì’-DŠ‚´`Ñoևʭ® úóÆ–ý=ù¢/ö›í:ÆLNb)=Z§ìLku¡µö*§Oµ0èÚåDþðCüg£­:å!V~³AßbÒ eDg °¬Þbƒ*ëM*Æ·¶i˜´ñÑ?·ôæ&åû‰N²,ãä¥]r¨Ig[Ûܵڠn*kúOËMþÃIÖr ;¬…Ý*rÙ2z_UeYÇ(¡iß9/Ò°Lâ ôÐx“ŽÑÜ×@0”?°Ð -[ä[7Me |¡uAˆr¿e! Ê1BåŠ-aö²|Ú/˜4º·u£YåÖW˜Ôh¹ºý :XíÏÈA†O¯AF”èôNâ¦Mœ™"Ì´¨S²%EïŠÅ‹Ó‡~Ø)ÀI,F"Tß±ì`%Õ÷°ÀͶ[ù¾`K¾*×þ^.²þBm£aåµì³®É B#Tnªe-_ß‚Š'Ñé…òºº!Û ÖR}ò[fËÛFheD™"Ì´²”ä;ï¼ÓùÒVO * ² u ªwP¶ÜÔæ&“šm?`å7!ßoûîkYZLTUgÐ'»LÞƒèƒ=Dy–`ûç‡ö7¹Ÿåh(KùÐq¡<_wùJ© mÖ‘;’#ßgø¢^¯23ÈbFè ùµ”Nˆ–x¶no{*¼hæVSiii§ìí·ß®Þ{ëŒ:iee%mn,[±`‹…4ƒ–Ej¦Êû¨¾¶–êëj»ü-Á!"i ² °ˆJ»÷¤â’2ðn¤.Lí=I/‹rTÿ8ëc§•0¿dS8´dæ¤Ù¤U^QQQ‡;Q.«%È å"ï«ØM5U•4l`?ÜïP*ÎÏU¤˜š†FÚ´c/}ñÕ×Öƒ²õêS¦Ì‡/Ü€`hA t·–iUA7n\\yq ÓA5ÕUJSƤ‘ƒú‰ =®®® ®®®®[$(—!Í$ie)§M›¦>W­Z$çu¤n©.l¸þXu`¿²EùÒ寋àºàú|¹c‡F ðQ$” ¤•(ñÍw¾ó•:+ØÃOXÔ±ž¼õõu–Ë:Tî~3¸¼7ýûËmêz©1x‰¾¦9‘h+µ4¨H«•.}£µ¹û=ÌŒ’ðKÊá±ø:¶"Ê4c”ûlq_™/jŠäÎ÷2%¡N¾ðuSÑWC‹PúöòÉÚ¾¯zûcK¥4}¤×¶u'=>¹°Ñ½x„ô{°fZçt_V ÑÖ—5Sß:Èšª™"ÊL¹°”á¯e¼(ÅRf£–[ú· isCöÑÌ,Ç—Ý×TD(×SD)8ptoÔßGòѰ†ÇGçùÉy4¾L.U¶ CLzàIûã£ýTVhЮ:“†v7¨¦‰èGÿh¢m5¡ãÁØ>y~¹>ÙâéÈã×#,úo€®ú{M^ÜH;jMºv”» aI»K?ùŒ%©¢l„f6ò8¦ºfo^¦ Ѳ¯ƒtp‰so”GçлçåÓ‹gäÑ?ÏÍ£ãú….áã§äÒ…‡µ¹g¾A+¾›Oý‹ ¹ËÅ}mag³åwU×S¾ß;n\žº&“ö <ë'Ó×Gö;Ÿ³7hþ'ÍÖ躣sh–eQWìÒ[‚tν°!4CÔÉ|´©Ê¤í5ÌQFÙáÚÌQcÌxI”ªçަÒ;7ìÔA~Õ;è÷~èlÊ!´<ëa2¨Ô }õ&•†ž,K¿ ÐO¿‘C- ûUµI“,Q.ÙÈÚÞ&ô˜C ×yÜsËifæxÊ46†Æ~Átzé'J!n¶ZBZ¾=H/üǤ5{‚jXI;ëmÇäÐ)–à>Ý–’û\WY÷ÉÛÛ‚–¸}ôäçš`¹µ÷­jÎÊs‰/„Åñ`F- Ô!2õV <¦º:õ: }‘Xeøm¢dvvQz„+‚´xSlˆúãäC|tÆ+ªN|ºµ|ëØ–Kø–kû“19´±Ò¤õÖþÍÍF ]HXÆHˆ,LŸ^ž§ÂÓÇøqš|V¢Mf¬DD™FåªKbt; þ|Ö èíû;ƒ**;mˆßr]³·s½Ý’©Ñ Âî(>!P|òlÎH˜N]·†ö2Ö‚Lö+aÒ$’F *»ÇªG¾1-^ššG+v£zÂå}ySN°,ê›[å7Xˆ°vÜÖiŸ­Ù^†§XïŠYÅRz´OÆbÊË-ƒÊ^ô·&e k,ï©ÙÒÝóÿ‰vy«›LzoGö7˜Y-:»ÛɃXã“—1c3»µQ–Ê¡ ¬$ö‹ï,„+›Œ`O§Š²¶¦:-‚!÷¤Yuh‚ÖÓ°‰š­“Þdäz‡qe½ÆFç|ÌS2}¨Ÿæ}”=žÚšÊQÒ\ËŠù¨¤´;5Ô×)Á4‡ëˆÖ°{ª –ó!À +bç‡Ëè@¤HdsScüÕâ’Îå¿fÆ9»i¯Ò´¥î–à)ˆ„§àNýßöô»9ÿ÷ä\ÑÓ ×¾ Ò;Û3ßu=´›Aå=P,‰4yÀµô[•m_Ÿnêúr0&'§»„Êמóq?ÔXâ.))‰Ü ö2vQb_Éšf]Ü× áºeMªû]]³œ +Æ®%[>γ[CXHynet þd RD™A4ä´U·Œ•ï4õ^ªè« x ±”üåìžr<ÎêÕ™ûßÄR ‚ˆ2µÈ ‚ˆR¥ ¤³G$¢¥ "JAH#¤Ò|ôÑGTQQ¡ÞVèׯ 6¬K^D”‚ óæÍ£;v(AnÞ¼Y‰óÙgŸ¥ÁƒËÉ÷UH—\r -\¸Þÿ}9r$Ýÿý­ÊTUU¹n7*++×á­†ýû÷»n‹7ôõx»âÀ®åc‡ ¢Ì8ÐzìØ±´uëÖHÞ† è´ÓN£o}ë[4fÌúûßÿYwòÉ'Ó#H³fÍRïÿÚÚZzûí·iåÊ•´~ýzU…ëË̘1ƒÖ­[GkÖ¬¡‹.ºˆ~õ«_EÖaÛeË–Ñ|@«W¯¦Ï>ûL‰bÃ6x…é¹çž‹ë8e§Àã®xßþö·tâ‰'ÒèÑ£Uºå–[T>ê˜ÿú׿hÈ!J8ݺuSÂ…€tá¨}aõ° 3tèPõ¾àÆ©wïÞ´}{ôÜÓ§OWÛa¿#FŒP–¶G*Ö÷«¯¾Šû8 ôd3gÎTî#¬ÄQ€¯¿þZ¹´¿üå/#e!>}ú´\МœÈ÷°n³gϦ×_]¹®FÑÞÓBe`e!H}_üàŠç8eFÑ«W/e…îºë.úÉO~BgœqõìÙ“ÊËËÕppIa Ýê¡N þøÊ+¯ÐŠ+¨¨¨ˆ^}õUºãŽ;âÚÖN<Ç!ˆûš‘L™2…FEsçÎUßÑ,‚@Íï~÷»H¸‘ñ€úÆ—QÚYÔhv;wÒ1ÇãÉc‡åÃå‚+šhƒ,..ŽÔSSu ‚MxàÀˆÍί 8>»ÕSVÐçCE|§•pë…S@K¦Ô)Ó«=èÁ›T‡ î« ˆ(AQ ‚ˆR‹’çñK<oG¶ïŒýBWÓ¡è+O’c!—g¼å&„§Ñ $Ñ5š(ìa|ž©-Aò„-nû2næúü <µ@sŠ}<€ŽúüP禟x·M¹(c‰  ¤³ÚŒ05Y[!yü¦„í³6 ¸p/@d<µ:  îÈç2ú„>Xçtÿ¸m›QÂê`–!KŸNÌ©–æõÖ-)¶Å>8Ÿç ÔóqõÉ8!jåù„pƒ1DÊSgã;?ù¤Ù ù<~G†ÝÈʺm›²:¥.8X$X™X½ðÙìc¸~Bq}‚àíÙm`¡p>þ´èÁþ8‚†ÄuG,ãÉ…ïØw[O/&ñÉöJ3 ûŠÿŽa60š]"Ñc¼N8áQ¤í>å˜Ç#Ø»Òï-Üo(‹&4Žað߃nÛ&ãŠK”zÔŠ_šus_u7Q·x ¶å}µ•ÏíŒ<'=vtw„ƒ>ú¾°Ìåõe2N<¿øëxÜ×Ж-[Ô2ÞUŒ÷}EZ÷LÜÀàZ8_x‰:Óá¶IýÞÐóìàaƒàtOÅÚ6¥î«Ýçno¹DóÊ%ºM{Ëw÷uÁ‚´|ùr5‚Üüùóéé§ŸnU.Þ1WÊýáPhµwŸéX·Œ÷Zwäžò„(…ä‚ñ[¯¹æzôÑG#yñ޹êVcó`­;3Ž?þxÚµk—ŒãêU÷[N7Á›6mR£žÇ;æj¬r÷ÝwŸr[1ÔÈ{ï½G}ûö•q\E”B"ðhdÅ;æj"c³Ê8®ÞE†ñ(Û¶mS/ =¹jÕª¸Æ\MdlVÇUD)$È¢E‹hâĉJ˜ñ޹ÚV9=x!㸊û*´·Á}¼í¶ÛTÐm Þ1WÛ*×½{w5Z_"ûD”YË=÷Ü£æýÀÜ˜é £™cúu‘âsµ­rhvùõ¯­: N)ã¸z“¬÷•;֧㸯 Þ1WÝÊqg|ÝeõÂ8®‰ÒÖ¸¯<ö«ç¬ ŒûšðÊóÇo÷;·rNo7¤ë á™ú–¸¯‚ ¢”'­ ×SDÙÆ侎"Òô»†öë– ×Ð'ÖQʵQzæÏkï_êJÁ»à5µLµ’b)mbä—°ñ~¢à]vïÞ·I,e†YI»ûÃ&¡­2ž—†…ÔXI¼v†ëät 3A Y×NÉM›yĸ¯èrVVVF}úôIêÈeB|àšìÙ³G #Íñð2NÒ]˜YÙyÀþDÕ…‰!è#Š"pca5ã”KHþ5ÃP.xÅ ‚´÷ÜÉ$76«{ôðx¶,JµŒ§\€…Ä`IœxèL}Ä3!ùõ|î>lj³Ò§RϤzeN6_x]@Ÿ¬Èn=Yö1mEœ{Môeœ~ôäæ¾fº(ÍL¾ì–Òþ¤Öéf%E”É¥~ôÄ‚t²”i"NS,¥‹•´ôix^ »ÅuízÖMœn®k¦E_Íl§Ýbò².J.'¢ì:QÚ=ý©¯Os1šn¢4mËf¦»¯ºÙ•å<^ÖóÅ]M;ëd5y¾É4¦“¾ÌXî«™ ¢´ Su]¥.D©K¦¦né$P·uid]5Ë}lj¬Juq¦ 3–ku’D]*L7á¥[=Òr¹kÛ²’ñXJÌ ÙXQQ±²¬¬lR¦ßvqº Vð†PÓ­¹gÏž÷¡§°®\-¥/†IeQÖ<üðÃó-kY• ]Rz¥túŽ 'QF‰Ó¯ý1Ã%—-[VÕÜÜüî¨Q£ú”û|¾Ülz:Kv@Œµ–…\6oÞ¼ŸÏ;÷S+ ÆM(«•@ÃÙEè 'Õ.'œ B uVþ.þœ ÄÔi[HÔ)›Âß›mÂŒˆ3§úd@,vØ@ÑCQúlVU²]€výè©9†…l3ÐÔ\Ú€-Ÿ̧YW]"N!Åh×]/ˤ6šDLa’ƒú}1¬¤ˆRÈvQš6Qêâ ºÕ%í¢451é‚¶<'1Šë*΢t§›ëj:¹¯,N½`Ðf=}6!Š(¡µ(í¦Ó²é`i[¹¯†­ ¡åEšHD)BkwÖl#‘“0cYJ7’‹ Eœ‚ˆÑY˜Ô†㊾Ú]X{½Ó.@¤ 8ÌExfŒòd´ÑSˆ3O„ø…ê–çj)ãÚP„‰Ò•ÿ`Žžç£ºp±IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/playcontrol.png000664 000000 000000 00000052761 13703317554 027705 0ustar00rootroot000000 000000 ‰PNG  IHDRFZµãSætEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp VñŽ©RaIDATxÚì} Ø%EynÕ?¿¨ †e`Ü"˜°Ê2à¦,*Ë ( hžÜ›GMŒF1щxŸ$וD•UTd ‹ 2Ì‚¢Ã¾Ì  È6€Àœºÿ[ÿ©>ÕÕµ|ÕÝgûç{‡ŸsNwm]Ý]õÕ[ß"¥”b@XE ƒÁ`0 ƒÁ`0Æj•ÈLb¤ ¹ÁăÁ`0 ƒÁ`0 *Ô òRˆI'mè{ªý¡:¨×žsbu­Ic^¿s¾(e—á*eÆoóXÉH?…ÎEX¾h—¤Ê‹¥„ò¬Ïb[/<µILŒðD6Êu´MŒ´±è‘±4>â„B€˜ï±òrÊÊ!^RDLŠI&­#9c±rœÁS%æˆ@¾Ê˜çQË•2YŸ4ó¸§>iÏñÖy]®¯âø\‡ÀhJlô{ÁKYdç¦I¥ÏÕðpÓã½À1ó~˜óöoß9s11±fʈ²(JiWÄì¸süv„¥X¹±Ý5IlGŸ'}9ÓlüŒçø×ÆÚgÔëã^GíibF“ã;„BšPû/µˆ¡šÉÄ=9>URýX׬Æ;vG^>]FÀ‡KSëã’@¬ä)¾A&¥Í‘Ê+#¤¯ý±Á»\fS3–œ<©ò|÷ßg“š‡š¶âK#eæâ¶=dJâËK5mi«<_º”/ê1Š9Mè>çÜßœg•böÕ¶¬ÛÖ8›œ9—ékœŒ6ô>­ íÏ–º,ä†LøwÈ ég‚(FÔWÑç¥ZHE7¤&,yRŒ˜[¦ ¤¡¶“²zô ”!£”<ª «ªÎ óô>ò Éù`¾–9¢±½'£ T¤vTS¤IŽH]¿#9ÄÍHQ¾í•rµ=” ™J WvU‘ô¡:c/E@K1JüÇ®o ²Ðô9*¦¼;Ô÷,Ç sŽ£ç\-¦å¥2SËKc¬‘«Îò_æ°Ï²c¨ªoÍ,Û+žÈa”ŽOÖel¬ÖÖˆ#`YÇ“eäŸï9"éäCAŽ(¿£¹”? I‘Òø.ÇJÄ'ø¥¢ÅÄ´\doötÍdHýDöé­•2‡µ˜o³Ï©åËå Êé*%ä-µl*¡B¹ž'­TÕûÐ5¶z8§ïR‰ò9ÌQ¥Qߣ-QŠè¢"&Ÿ”È5©902÷Qc|åªyBÑÊlÑ×HŽCÔ¦š(!Ǫ©sÔ:c m†”6‡}¬í(2m”WGCÆçx5VW¬½uú-vïÚЕùx,µIThÊ—?|K†hµoG ƒ\)_¤T%›ë Y ž×ÍXÃÛf Búr›…—Œ‰Yí-Ž´Fo òlq®áªPƼðSG ÔC’©¡‘UžŒwa×߇ê—ÞGÞ Oéy ˜)DÄÐdîó‘X(»Ó”°¿uȓԎ7eGçøžŠÍ1)SKQ£ž”ƉHHçVw.¤:dMõ…äA1—J”ÅzN)s£sPym:_ •—êC* ÂÙi,d>¦ Ù²‡òÈ¡ùSµ·ØhRÄdÊ‚òŽÃú|þóŸ¯xÅ+ÄÄÄ„xúé§ÅóÏ?/fÍš¥?×]w]ñ‡?üA¬·Þz¢ÓéˆgŸ}V¬¿þúâü£Xk­µÄSO=%&''õàþ¢½H¬³Î::Í‹_übñøã‹¹sçŠåË—ëòî…^ГÒâØ3Ï<£ë5ÇõÍž=[¼÷½ïµ&6ºUjÛe´U+ãsÄfËTO;ÅêÃŽr4W,rÇ„¶Ïi"¨cwµ «'©€¸ï ÆhÍ#DÚ“\)%ÍdyYib"hp×ÚÖâ¼®jÔJY9çrL^êFÂÉ šóÝ{,3ŒÏˆWÉ!Pb/‘¤ ¡¨mny>í™ñr§Ÿ·èO¤mâ!6¯× BÙÕ§jäD^I‘_ 9äAL $Ö–˜_¾ÿÜ4T¿&)Â¥‰O›ºQnƉôk]V®9Ïz#³Ž•ä8ÝËñ’¿åˆö­õt¤üSŠ yðÊ÷NÖzns1ÑDNíâüÉŸü‰þ‘ñÒ—¾T A@€€äY±zõjý òÄÈ ÀøsHcø{ÙË^&xàýÝœÙòÜsÏéLÙø)ƒ²ñmiû™žhz†Š0F%/äÒ/ 'U½mÃê.ùá‹ò¢f ¿+³õ¬d‹u‡åÿËËcwgÇqBõÝïQm»jøŒÈ1{SDFŒpHE‚•Ku.;Ô(4Räi7¨ÀƒM!ET ,Ÿ#R•ñÀ¤LQSÞëÝHq*óW-¾3uüˆ¤Ò4 õí;O‰2Ó$d7µ¼œ± w aŒÅ S;r̨É"1ü2ÖP„œ˜ÇæcÙŸ‡©©¬>Ñê›ã\ܪU«4±aH à%/yI¡Ç¡ ²ÇAlàš!˜pÚ 7ðûÉ'ŸÔi ab>A¼€yÕ«^¥I”fš#Ó&7R×4mÃh‰ ¡¬’}'›Üu53É!ÒcÚN,÷aL jˆu·µ–cû æµ] ¸mÃêgŽFìáô-ìUâ! … ÷9euËuÛ DÜŒ4õÐø4I\¢&Ö–œºr$(^£2 ²Œ>~DHj­Ë #‹ ñ>™c„ÐÌÇHŽ×ý=½â‡v  06Ûl3mþÂÚ$k¯½¶6™Y±b…Ø`ƒ ´YÑyì±Ç4a²råJmŽ‚¤Lpp òƒø)‚¼ Nzè!çð÷ò—¿\<øàƒqÂ¥¸W0}jaÃçÁÖ)Ìiºƒá†ÎÖmê”ô2«„7þéÝ£¾×#_l -âad_¶Ö'-9¶ ;ÉmŽœÓ ^¿ëiZ^Ý4¹æ1îïÜã½ñ°þÎlnTš\Ÿ%¡ú¨!w³úF›UVÃäzÍ'e Bþ¯¨!hSþK|f;Sÿfo0[lµÕVbΜ9znÇ\@6€L°lÙ2q×]wé¹»bJ㋦Ci‹;ÏX¢dÞ:uöÄ:Yk|©c¶Cõâ3kñå£„ß ™Àô«<Šù ÅL(§¼Ð½O…çmþ¦Ì¨ÒÏ™×gô™àø‡ú­ì†ÔÙ.©Ô°ïQÖI,÷&žIß…«±êÛ4ñlÞÔ“Ke+ë”v¯:m‰A‡©‹ñm%8é@ à;Žƒü€Ƚ÷Þ«‰ä5„ ßýîwš`áqß}÷éz@€à<ÒÃ|Z"HƒúñÝÏlØ“Nù~ã÷á‡&~þóŸ‹å+VçŽ8â/ÄÕW_­‰ž &…¿ñ¯‹c=Nüþ÷¿ï•ÙY¶hWAˆ¬)»V<Ž1ÆeòàÇu$&pj(Ýœ¨4u‰6HÒØ(#$EÈG.y yB\T¸=óçϻžŸ±!‚yûñÇ«ž^¥“­³ö:bÝõÖÕ›(;í´“6}ÅÜ{Ûm·•ËŒ…æÍ‰DC$sxNj‡„éiäK›KføòQ¢Â¤ü™PH “º¾6Ò2,xṈ±æ¼ ®ÖhhÍM‰D7$Læ?ïÝ_¨*[¤,)cê;Ÿm¶ÙFku€€ Œ AŠ@K¿±C“0ð B Dܱ‚Aå@‹¦ÖYG<òÈ#Z³çA”€TAz”‹2á×äÑGÕäȬYSÇUÑdü6ßmÍŽ®’†ØcÁâÖ¥KÄŠV“Ì^{í)–üv‰&FoB³#¢«)£<ì—Õ‡²ç\U¥û»(ßâ;ƒa>¡òüÍc ­÷®_ïó G©ß”ãMBòúÎ:* …$ɉVSø¥2š!ª<ÏN¿#‰÷z)aÞSÑc|»?Vžõ^±žØÿýõ<|à 7ˆ›oºY<ûÇgƒmX´h‘–¶Ûn;±÷Þ{‹?û³?]t‘–H™ò(¾k‘‘9oì[" rœ®6 aÓ@¡:‡i5Ô ¯›"GBù¨NX©Qi¨÷2'DoФ©ž¸ßÏæø9då~#Iõgd  Ý9‘*ü¦ü›yæÙ˜HŠ™ðîÉÔxL&úÙá >–.]ª ŒW¾ò•Z3ä5¯yMaæm´‘þ ³ È h|À?‰ñ=€Ø@Ç(Ö 4GàS—éT$ 8Ÿ°°ó„´ÐF1¤ˆé4üÆŸk¦‚߆²C—œ vÀÝvÛ]qä‘bûíwð:Ÿyë[÷ÒÚ/ºœ©r7Þh½#VÔµºL’à·žÀ&¦ë[½ºS´q¬Ø™‘ŽIc "ب‹9B¼ D±I”öPÛI-³BŠGTÒ³ÈE‘žqU9‚H*cL6‘‘ñ[UÇó9›ÌGN͘ë¿ùÍoŠ… Šgž}¦Úçz°¡‚´ßúÖ·ôæ Ê€éMÒàÝ7Ÿø®×ç$. ¬1š½Ë¹ZXGȧ©1'¯¹NWcí«s-9cJ-6F“Y2äšQk-Àrþ̸‡ARFæ×Ö®*oÀººè+1Áäˆ hq<ñÄZkZ J@n?$ .@h`ѳø3e !E@´àd œ‡é ާ­H%¨„ 4T µ’ž\¤çÏíi)Œ;Pü÷wÿ;±`Á]Ï ŽùÀ1•Rßð†×ë/ƒƒß}°Øb‹-˜´ž!U˜÷ C¨©59«ÌÁ¾Ñ3ßB¹²a]IAxm!­‰¨„ËFÍoû¸.”>T†[ŽwèöœOµÏW>µn÷Z|iCù{Ǥ%CL'šîÚ^c¦Êž¿àÜÕ‹”V¤‘Ý?û»tòIçS~‹øù9s6‡z¨Öùñ/œšëŸ©¦÷Õe}Gä½é¦›Ä!‡"ælºi© )'ô_¬mr¢›ÆwÍR†ûE ç¯ç³1¦ìã1¿Žœ2šÔç»®X9¾´¾4¡rbyí|¡:cå…ÊÏ©ÇíÏÔ5æ´/Õ¶Ôý µ/ýŒfnf"d†-°3d¦™HR®·µ?Qö ì+ósä¦|ЏCDÀ|5ç¾VÓÊV“&ûy³Ad€ô€¦ hÀ¼  A@Z@“ʱ€ä!-¤ù"" C@®@Ûå ­ñ"eA3ùp u‚€Aý(ŽÞâ«w¿¡ô?}áó¥r7ÚXì¸ãâ/þ×úš®[x8ãÌÓÅùç¯ÉƒË.»\üíßþ8ãŒ35ùƒ<Ÿøøß“ XNô˜±™0( ‹ áùŽÁèï{=$•Ù\ǪÔ4¹m¡8‘­A±?€öçA(-^$®]¸°ñ3°pjn:ð@qúgÄÍjè‹§·&+Õ¬"fã;O1‘©krj[Ì't nþP›ëöƒ…Á‘^ð­ΣŠ ã:8÷‰'>-LXR«þ?FmVј)MŒNSAR€òÉÃ?¬q˜Éà7ˆhw 4> 2 ²¤ToA–À‡HäÃ9¨¤ ÎãeøÁ‚s&Z!fL¹¨‡&–}æO¿þÍoŠß§œò ý¹É&›ˆ•+,£lm¼Q‰¹uÉ­úsÞ¼yº?ü{íƒ%Ý¿¦•‡¾0ÔÆ@È“:½¹¯FìyB¹MìuI†dZ™Gľ§|pôÓ±*¥þPºÜ~œþ-IýÒôï|çþâþûï/6pÝu‹Ä«_ýj±ÿþû‰3ÏüîXŒ+±h-" gìoa†òÜ´Ý&”6äW×&”¯¨4Mˆ“T”›ÐojTšÙê‡&×_çy®ãk¤Îsž÷|óê{,d)Å}æo3¿XS6êߘ“vßq—‰ˆ8Z÷+Sß÷ÜsA©oî¹ç^qï}÷&Ö㡾Œù©¡¯¦4ЪÀMÄHht€ðÀq&8ŽÆÏž=[“p  €ÌÀo£a‚4H  =²á†jh…€(™ „÷C9H‚ÂÔ‹º„I€|cþ ÐÖ—¼äÅ¥´¡z.¿ü ±ûwÞY\uÕUdA:ÿƼ¦g0f&FÐA%ű*ÅAŒ0¡@¡ ÝüaNLsÝß|ô£có8ÌŸ¿µXÿUëkMÉ6C”…2Qöü­·‹¾øèG?Rø@› B~}uçf‹‰¦¤ 5x(õ\]b“Ú_ìk$w8¦1X7ìýŽwLŸüä'ÅÑG-^ÿº×çñÇpiÖis&ÈC–'öÛ?½f¹®‘R¼û=ïÖæ©­Èj1‡¨>%¦á#I,öb÷=voý o»¨ß·Ntšé»fFný‚$†q¾z×]wéÝhW@ÍZ$äAj€™Ö¤xX †1äˆh—ÀL>KðÝhiÀl„ 4KŒÿ<@¦CŽ€Ð€öH›¸sêšP/4Aî¸óN±Ý¶Û꺖/_Ñë®ÖW\)N8á3º=Çÿ錘䮎R ÜMîË¡8е<ѯ©šM…¢™ÞoÃUw?µj¥—´ÅL,r uAD “JO)Ÿ²‰åñVw`O>ùËSï1Þ<˜ÿöÝwíŸÊž»rG¶ußsÆŽÝvÛM\ýõzã m Ìn¼Aì¶ûnâ¶ÛoïÛûÕÖXù¦7½Il¹å–âÒK/—\riIkÕ®ëÔS¿->ðcÉ÷hP$Ôç%'Ê %:K-†™•¦©¹M, Õ´§w¡ß¦>ÕgKµþ¬ØÈ=æ˜cÄý÷Ý'N;í4½ž™³É&bï}öÑ›ÀÀüm¶—^r‰X¶|¹Þ Þy§tžSO=µˆæ9£dª!†üÝ~ûíõFü¹çœ«7¹GŒ„¬wðN½ö-Ö•) ŸÖGÌÑz,ª](í;ìP6Dp=çÜs‹~¼ò§?%/ý}/ýKÚ–îS_}Œlºé¦ZÓÌb6ß|óÂ<.¼Ð0yÁo¤C„œ‡ BàOÄ Ìo T@@‰bBø"=Ìv0˜€pA™&š (Æ´¦m Ü“¾ôoâãŸø¸&o@züë¿|Ék²×€4F;¦9Å7B4[&!Â`0kòÃ×¾vqÔQG‰‡zHœxâçÄ¿ýÛIcq¥Ð]oÝõÄÍ¿üe4ÝÊ•ß7Üp£à1n¾ù—S ƒu]èŸQÇç>÷yqä‘Gˆ]vÙE/|–.½_ c,Ùþc×·¼E<°b…øÉEÇîºûnMz|èCÒ¿O9å”":'ÖGH{àè¼W\yå@Úù±}L|ùË_ö7Àï·¿ù¸nÑ¢Âo$Öqûî»oAòÜ3um_rI±¹Mž>kÞî>{Bvž¹s犃>H|ï»ß‰gdï}Þ¡ N?ý ñ©O}²ÔúÆ7Š[nùuøõ™ÅÄH“á:Uú}Ö÷Ï“1¬ÚúJŒ@iÙ²e…© Hø“xa@ ² Øhà7òâ¥ÁwÛY+>‘Ψ9_%P)BåÂ~>@¢ qÔš‹¿ú«ÿ]9vì±Çßoºùæ©Áë/ ‚ÇÆ\ú~XØÐÝ \ðÊ`ð»Þü'†âÌ1›qÏSLjštæÄÃ?Ll½õÖâÌ3Ï¿øÅMcõHÌ›·•X¾bym³U PöŠVˆ­¶Úr,ˆhÂ~å+ÿW¼ùÍÛ‰ãŽ;NÜqÇâûß?«ä‡lì—¨rZÇG Õwˆ›&ô;–6vžâX5¤’ºÞT;˜]l=¾8ÿüó+DZ^¸äâ‹‹ï.-^,ÞýîwŒñ¯˜>~òÉ'ëïX×í³Ï>z½uÕÕWëµþËþçÄÙ] ?h‚ÔAmy#óQ8ñ³'f)wß}·¸à í™8ê裊Í|¨ä´ÓNï‘I²Gˆ Êé-¿þu˜ðˆ½B2Á8ÈÈñ!:\íçˆÐ*1¢:Ó”Óôà¬tøZ!`qS¡.!ÆøJðAb˜¾ =ð@༉Jƒ— Z!ÐI 4.ð‚1þ?ðǑǘԘH4(Ó8rí×AØlµå–âõ¯Ú[˜¬©&%}ZçÍtS“¿P—}yÐÆÍD§-s›è9Q/šKÊŒ†âÜ´‰CÕºi¨VmgªÔk5cÏ[ߺ—8ðÀÅ5×\#>õ©ã iŠyO¿³RÍ'àüÞ{îíû{:6ßbó©o×ü°d­7Ýt³øío—LÝãÄ?ýÓçÅ\ ~úÓ«ŠÕ~ÜÜûÞt¤˜ï´åÈ3ÇÙ)…É1©¡–Gqz#K(¤LÌÄ&dNãëŠiOT~V{®2ž-e¸uÉŒçp|ä;¬kþð‡Ç¼×wûw¯y—Ú/õäIZI?ùäSÅçüP¼ÿ}GŠ«®þ™6K¹uÉq«¥%wõÔñÍ6ÛT4ÚY‘áÖ«½`½o*¾È‡(Ì;«;Ýc2Nă”0а€…Å7¾þâ÷#<*žáùùQ"!á^EÈû\¬/ –,‡v˜vÂâE‹µ†Pú&ÖÛlŠËm#F”UYøn€ 0š 1ð bê@ (@„`'Å„õ 9„È|³cƒó0­1yPÊÀ ‡ü&„ Ôi6hŸ Þaàøã?¥É /ýëI}ÝIc0ŒþPýaÙÚvÔ™«’"qR“v¹bßb‹-Äûßÿ>M„|ñ‹ÿBŠX6ªÀFÄãOô_u„v0G¸ÇgŸ}ޏöÚ…â}S‹‡]wÝUïÎTÄ4òa=×}éK'iâ?Fä †lªÏ|aÞ]µê龿·¨cµënt¤ã»ÅRäF‡Óé]óV< þó?þŸøä§þ^ßÈ7Y;ë1Á¿É|E›µ/K£À>§Âi¤¬öq96€'"_°N•QžJ|ZùÌsežsÌ~Þìs¡vé#u‘¿‡îQäžQ5‚ñkˉð¨:ú‡Ùƶ۾IhÈÁ›·ÛVÜyç#µÅ8¶ÏÞïKo'ÛÓ†‚ìÔ™žÊô\ÝQq¢$åp4äçDy›<ðùôpóºâ† ¤‰R$EÆøHåé)ªÚ75X¬¦Ïm1Îyˆz!{ûêcÄ8X5Ñe Éa46LØ[ /ðÝ8e…€sh—sœYÒÀ1Øç‚LÁîÎÁq+´H¦×öàÇј÷0 Æè03ܱI/'RL™è E”¡ \tß"ù7QÊ9ä½â‹_ügqÖYg‹k¯½¶¥^¤Cäö ”Ö.¯uJd0Øy—Å¡‡"n¾ùfqÞ¹ç‹ÿøÏ»wsÑJB(u5G(çšø±ÓÔÑ*Éñ©’ÛÙêxÂsñókŠãŽ;VÜvÛmÓ- ˜;w ñÆ?ýSqÊ)߉køØÇþVb#¤ÈÅ—\Z¬õFf~ði{(Žäâ#=TbêK)‚EeÔç»>™(?dî£D­pÉÇs´Øl³Í*ÇoùÕ-âüü`ìÞÇ|{BS1šKhÍ -`âRÚ"ØQ‚¿|7ä ˆ  Gð‡PIð¼Œ4Ð Aè]乂< Z@ŽÀù*Î竨Ó&c@²àÒ¢”›;­ `͇f"ß™wF­}m±ëuÒ¤ÂÜÆÈ„:Ÿ" (&1¾²rÓä’+ñP½áþ–Èý×kÛë£:Jì±Çîú7BÓ—ó•%žp(;åÑbi‡Ä)·¿S¯0çÂduZ3eÕPH‘& {ø]{ÿQïÓrÉ¿ÿûˆ{î¾§uâ¡ÉSgS­Ûo_~jøÞ¯ŒJÌÏG³Ê÷P¡ºR¤ÅÇ庨Îasî™*K«¤îs7¸Àíë˜L- =ôPqÖYg%É8>øàƒÅÙgŸ­×H£4XgÁ·ÈÕ?»¦ð… ìõÖCtÑ!»‘""A`„ˆ • +|#2ОÐtLq”"o$¡?|mò=ó‰W²J¸Ùð’Õî hŠ”å$!êú°™è3'¦mi1ùÏ™3G¿0 -´ºh÷`c¢Ì€ @ äÁ¹“N:I,^¼X3Ž0¥1„Ê@:óÒÀ®Í˜ÖØ“|¢ ˆ†Ã`0ŒÑ 뚈„JTšœÈ5u·Öq† •êÏžx¢¸þúħ?}¼”_ܵզ“Ã% 1C“³ßÐöõO=5pR¤.pß{È{µéÌ 7Ü(>wâ罤ÈLšŽ uÈ\jm9¾òRŽ£cõLj܇ÓC¹çbÚOˆýAÃwÞ%~ô£‰Ã?\l·Ý¶ÁtoyË.â€ÐJë~:k6<]|±8ð€wë°Ûï¸C¼ñ o¨X»í¶ëà7¥ðkL¸f$B¤ý”ÄÈŠ€Ï éòuÒý¾á†³‹?ÛÔ2ºæ6c¼ßª˜«¶)MŶGU8 ÒŸd À(SFkŽU:è ý¢Á~¤„ ¯}íkúΛ0¾†1N]±ƒDŠÑ8Á)טâ0Ú[Ô d<[Ã4(Ö4%¾gý)¯nÄ™ÜEGŠDHi‹PÅÈØ"¦IšØ¢$Gk†Ú—˜ï.»ì2íÿˆ#þB|ñŸÿYœ~Æ­Þ×~»›o¾™X´hQ_ëAË–-ï)B ‘J™Ÿ¶Zèyä:Lï?þÃg*azcÚƒž sžYÇÿ‘ÈwÂêÓÔ°ÓS£¾¸uQ5NbŽ`s²†¢È„ò×éŸT4‰šS;…ㆊà[$t?š>߃ˆ¸ÔoÜqÇâ;ß9Mvè!bóÍ6?¹èâ"x6–:ð­)÷íoŸÚ·Pß¹¡îÝ㸄‘ÝyçÄÂ…×éH\Çû1ïÞ{5ùƒ5Ûž öÐë´¡ÎU>ó˜Øº:eq ]ë’1BĪçÞ©þ:èàƒô!;\¯ Þ¾;ÿüäc©/S>MúÒ‘ág ˆ6Ùx±|Åòìr*ãC4l…šl¥OÄH ¼ÌÆDƘ»€¤ÀË 2&7Øe‚óM(·ß~»Ž‘$H" ?Œñ9“"8gœ¹b¾HoÐ ú­·ÞZÛêŸæÎ«ÛÝÁÆeÏ›'nëÆg0 †ÈìR$O’»¸ÄÜç泯~õkⵯ}­8úè£Æ¦±øßiÇõ<߯l(a궤HÛ8ì°CÅ·¾õm±ôÖ¥3î}jsÑÙÄH,¼nnšú*©{í)â£I˜ÝÖ®›´eΨ Dê<å›ßûí»&Î8ó»z=¬#Î>çÜ¡úí0¾D ¾üå“+ià_ä/?ôÁ©öÞ®7Áÿû;§‰·¿í­bÁ{èglÉ­·ê¨\#Ÿ†‡Ktä„âMù ÕaûΟVʳï>ûè;‚Ù-·Ü¢?AŒ*vÚiG±ãŽ;ˆÛ–Þ.:èÀ±x›#–ì7¿ù&L(]!AdàÅ™cøŽAÇ¡Q‚áˆ#ŽÐ„ „m·ÝV,\¸PÌŸ?_,Ð1„òãÊEä˜ÒÀ¾uÞÿýÚÿȘÐà» ýKÆ_þêWâw¿û]ñû¡©öýâ¿Ð¿£eš·ƒ''Å‚{ÄÈî»í6ݶeË*iq­;î°ƒ˜·õ<ýýéUOkµ´º°.{ÏLŒ0 Ƙâ#ùhôü’%Kħ?ýb¿ýö°¤Xo{ síc?&¶Ûn;=o÷(û±?<¦ë /æFÃÍêyç/.¹ø’¤ìñcŽå—1’`“˜Á›ÀüðGZë☣ÒcÜϯ½VÜxã/†Ú®“Oþ é8Ön_ÿÆ)‚üG?¾p¨m?á„Ïd¥?ñ³Ÿ«N‡1RÄçr3ì‚3ìÄu€Ú=É¥—ŠÞõ.qøá‡Uª6É(&S§žú_â‘G7Üxƒøë¿þ?31¢†²ýKëưͽ; Â#FÓ‚¾ã%fv–`æ‚|8oBô~øÃ_øÂÄ–[n©‰8Úa‡ “h‚€‘‚r@Z@#Ÿ PÊQ‚Øpà õùrHÇÐÓÝví6ÝtÓ¢ì fo ¯Ë#›M»áÆÉýr檫¯Ö×Qy€vÝU›sιº ]“cCÝŽ0<¢sŸçevvÊè=k1ïWm–=œrÛ¶Û§jSP±ÆLVRö÷)5ߨõÕqºJ-§®yù¹î‡?üáMhT­çÏŒ£×\óóéM…_þ²˜ƒ]ÌžýšÊØ»á†%IøÛþÏÿ\ ŠiIÅß¾~½¾ò/$,rÚ×¶©K¿Ç ˜i%MH["”&æ Õ—6fš“r4ês®J5§q¯5ǪïZCySõ{¯¡ë¼9Ö×¾{)åDI^‹›¡‰@yý{ŽÛ"ùN]wÝâ"`Ä7Þ$(f ý\<ùäSÞôÓÇËùžyæÙÖí\Ó‰'~®y7ä:3•‰û’2ËqOw”øá~$Þûž÷ A*no^ªÊf¤Á4a¯´u^‹ÉÖûΉÆŸÐÞ€ããä4;ÐIHÓ˜¹ÀÜé?ñ‰OˆÓO?] E@(@S猣V¨Ó¢\hWÜsÏ=:\Èh'¬(Í9Ôe‡ñ¥`Ùòåb‡í·‹§¾#ð+("ìàÖõúEä€yóæé´¸Y8võÏ~V* Ú%¯|Õ+Åž ˆ_Ýr‹Xº´§V‹kyíë^«í ú1TÐ Re‡Ò@+,£Ñ¨Á¹ ò݆ëo¸¡ëŒVŠ÷¼ç`qå•WéûÀ`0ÃXHÑÃáÖ#Cê>Ã$¼ÆÐÜ~û?oûÛµCÁ¼þ‰G:A™ŒfŠaŒÎ{ÞOb*ý¥axCyrjYâ¦þòS5&ìýÁÕW_³÷ÿÃÁàXzÞùç‹%Kn›6c“þµ`V5þÖúwáÒœÌÉ~j‡ë­²iÝAZõQø1XOØíT,È‘çMè]h„à;çÐ$ÙÿýÅ…^8Õ‘×è2àîë_ÿzáõä‡qêŠòÆ Ê2 H—Í7ß\§Ãñ´FùÂV¬x@¬¿ïúSy'µM3ˆ’ç§Ú’DË£<ªë…É®»¾E|ï{ß×ÄÆÞïx‡xÃÞ n½õÖB ‡3½-çÎW\y¥6²M¨ûv×(eÇÒl¼ÉÆšA½;ï´“xýë^§Myð®\ù ¥µöK×Ö¾YFb(Â$ÀawgÖ»ýÁµ­vÈ>]¯lœ¶œ^z‡Ò*'t»¿œêw“¢£ª:ªZøŸú×)iùÉBëçT‰ô(³ÇËż%dé{iaàœsÓ¹m¶¿»Çìò¤ÓgEÙÄ%~NÚÁˆ±½6üä‹đï;Rì²Ë.baÄž<§Ý;ï¼³Öà<ãô3Š|2ÇáÆc‘¿]ÕfUÞqªŒçŽÜ®,9LNH¿]º Ëþ±!¤¨Û×VŸ(#å¹e$ÚX©;G•Õþ i èãÒ =R w®üþtûÜ|·ë(n…´ŠvÒJQ=gç±Ê·ó)û~[yJmRfìªþ6×Q|ï–Yh`K»sæ™vʶÛ6­Ò«Ã*ʾ¯V«Àýqû¿®–OjŽ¢hÍDY1„Q Ç;ÓÈ‘qÝÌÀÚö·K~;`™¶~_-Z´X[\Àùêü°I)ãϺw½ H©Ž~¸^Oû@R€ˆ€¦˜» >ðZ .°Çoh‡³9‚Ý&ù€´_ýêWÅücM² <Ùà<Ê ‚ü(ß8gÅ'ÎçúA8—´éœ9Ú >´T‚äÈòÓñÆaªóðCÚwÝ}·NO¾A‡J”²ciPî²®O“?<ö˜X{µÅÒ¥·‰­¶ÜJ÷í–[Î)?%v8ÍQ KÇçƒî£Üþ¬3­R™Êbñï˜ÐDʉ•Üñ´¹ã\K±|ðD¶i3\/£ h)^pÁb§v»¼e—F‹äÝy—uY(Óï°V–ÐX(ÆÐƒ¦<²¸4»r8ç³K—‚Bê“/…4Çü*B°¤òù®AˆxDåHæýJ©««HÔÍ{$“ª”Us®C·ÇäuTÚ•PåçC Îq%”C ©Ò5•´4dµÆœÅí·J?™ŽxÞÐLj-Σ˜ @û“!Œ%¹€–v©ŒÆ ®NR?UÏ´:¯´º¤Ç”£îiž^Š”ðøãOh­‘‰‰imwWË-Pzi„EõÒƒ8(Ç$‘Üh®7Ö&ßuå|Ý«QWÜâåË–kat6‡½ü²Ëƒ>GBÀÆÇÛÞþ6=ŸsÎ9ºÌjRÈØ4«z àÊ8#/TYÖ1‹d[sÀK’+­«2áÓô)fÙÚ$³¨WŽ–…Œ-Ž`ÈIé!¤‡D2y:¢¬Å!‰uN“ÂÒØè¨RóS¾túØN'T‘Æë—dªÜ¿¢<%KIá‡cB–®¿È#D©ö9W³F§Ÿè¦5$‹´~KÕë7· ‹*]»ýžÙy² È´¶‹9Ÿöc3ÑÉщùfIÉZMÓöK–cŒA2­ °¦’CmÈjèm¦ø‰_S¬\—õÏjjŒ¨DçNŸñÐüÀ¢Ña “üI¿#øE<¢ÎÀÏÒÁ4NXAF@‚vÆ›ßüf}Z0¯AtømBû·Ê¦9H²‚Òd#Ë–é°¸+º¾DP>ê›=um<0­æ¡‡Ö¿AòÚaëÊ•ä:@AÛ¡Ì€n>ceÒE§™={*ÍZúw/ÔåÈA3ýmÉ’¥:$úf<¾T½ß¡s2N&ÊpËòReˆÀ÷^ºPkëü‘«¥öH¨—!¬ÑàZ(½.Zè³&åÔ¹IèÛÒ. •§gÐ Ëaj”ˆçxÇÑòˆú©1eJQ?ô­$îä†ëmJ.1A:MŽÀô¤üеæeƒiö¸§ç}”á’"ö†ŒW4ñ}w·£RÑ|ä‡G «9¡ß}eÊD›Eä!÷i¸i¥G„‹S‘ü-–Ò;¦},=}ëv>­ÑQ~í CH8\.†é¨`¿c˜“¦øíÑ”1å}u8öVn{*„“ô´]9ií6‰ž†‰ù7Œ9B¢»A+G¬]ü×ô¯ºr95WÖNÉë±zbmjñ‰f$GžêÄR‡¬ßˆò§¬QÝ,è±Ó3 6@N€°‡ "Ú Æ¤é`jsüñÇkÍ Ò  !H hž l Æ |äÃo"8†²A¸¬\¹R“$ Hàß$׫;H0ˬ»Z‹dÎÝFå/¾þzqØ¡‡èëùãsÏi'3>'`!áü²Ë¯ïxûÛtìrA¸nÄÿFdœE‹e?;ÕŸ?ûÙ5%6>”f¢ä%¼l‚pï=÷нöZ n¾ù—Óæ“žê8P“‘ï1i0$1ÉÀ¶›Œ¶A¶,tDÜê±$o:}%‹: /ªDP>KÊó†Vf´/T‡ª9”Û kI¼ŽÔƧa=u+>$Èܽ¿-&õiU޶FîSîÖ-…'ÒB@ š6ä##äoÃ-CºåØ>=Üv¨²/Ñퟮñ¼£Öî%G%_$½óÒ!zÌ.³ô¨·Ëò¢ÌÚõµóôÌìm{·¼<·*ç‰ë-eØ"f‘2¡pÓú~‡¾—^ŒòÎùc=.Î<ã»Ú¯Õ®»íªýŽ,ŸšCï»÷>=wAëÀ<ù}³Í7o¼±>wé%—jÇm¹‡eß  (8xIÚ  •;¾Ë¤ˆž?ë¸fQ#tapJ „£aC˜@” ×áö›ò´§oœßå1§çC£dùœ›Öî7¯O ûœ¨æÊ“OVýz¸í¨–Y~ÐìóByÒ:þV´æ‹,½=mGKDUµF¼é<Ç+÷ÌÕ);áñÏ­’:rYÛQœêÖ1ª˜É„|Ìe“ ¡JÐ- eb•"DÚÊ̼ùï ¬ÝGþ »œ§|G:Uç—6%5Ñý›eý½¨K às­·½u¿;DW¥É鳟ý´T@h€È€™ 4#@N@SBâ„Ì_pÐÆ8óÌ3Å’%Kôoh@û¦1Ð8‰Ê‰ò•¯|¥ðI‚2`Fƒï& .”<0½A{þáÓ':Mãµ›ëÍõeRb«ºÎhÑîܲMšÕówIˆ´Gý~qÞ¹?Ðý&r†–ðRrúq y{“„á*§î¼°ã”Å~“E±-èµ1ÕÖiOSCÙRæ 'øH—QNr®%·œ ÍI4Óˆ«¶7’×Gû¾»Ÿ%’Ù¶¯WÂ{ÜÞe.ÂÍwüu™ôÅ¢§cÙýwœ¶²Â2°ý'»Éî.ºc:Pä±ËRª4\zÍ)D‚¤ˆ ³>ÒDøç E†HŠnÚÙ³7[ÍÛJk‹‚ Á€ùØ„¸ëλăk”FeíL[‹:åŒóBkýVÙTˆäqµlceÅÊ¥|Õ*;õi¾ûÎOÿõ¢ê¹p;ìó”6Sû&7MÎ=µw‰‰‘1¼nVD«»é–"bb›qã?d£\í™…§ˆ‘*…sW\yñ¼©ðíM†ºŸ«­¿N÷OkÔŽJS,ìºî¯Î´÷\,òAf€Ô€&Ç[l¡…BXàƒÄ@YÐy_!Ø1y­Ô¿!ÐÌ™ &Ðß䇶H”k"Û`7 dÌK í’D –˜¿4³“«/JYðoBŠÈï+ƒTöTšÕ/¬´¶wµ¯œêìÞ=øàC]R$üÐÑ_呲m½cii¦ø†÷;EÇ9¦É¢¢;é2s8hB°¸/|}ɱ D±^§’EM Š\ªK5è*å–¤ç–Мz¾|ÖÆ•ð+"BBõUòÚNmUóéL)ê… :/´–ÍŒ¬vÚŽ…‡qR¤ä`ѽñÊóp©¼ÌgÖàÕ‘%"ò`+¿–|qx$IÌ;øs%ÖÂw‡J ¼íì@7sJˆ¨‘#øú",WÛ¶I¿åú´ˆ…¯…ó £†¦”û4í­úý˜–ç”Ñ€~Ÿ ¾ãÔk§ô¯}±ü±{ Ý\çÌ]hÖy¿ØOÜx/ãK.“,ù-¥U,M¹²ã™²sýe“ähó'êo®•w˯)è»kJ Vg¥c²y'‡u,V¬X¡Í: ½ÂcéÒ¥bÞ¼yšÜ€#6øƒæÇ]wÝ¥ ¤Åàe´Ið¤ï O Âd ˆäÁ1/ðRDU\%0±Á9”b$¶PL-š„ç…G]’—ôóæm¥?¯¼âÊŒ%pj¹&‰<*užÛËñ%;eL&9¬ÖYÈ˽Q‡t-Àe_¥S¦\föA»|uŒô?e¹Fb¾¼¹„[,ðBîµÇîçŒïd@ª1Î CBJJ½¼áuÎé}ñqСli©Èõ„,!}7?ej#"aHÇXЏi†Ï±§ŠH¤!²†í­3&6´õ’°Q£‘ ,ˆ¤EJþŠqõJDÝ%M·‡ÝO9â–©»Ûd¨¿¦šlµS'Ú .àãZ {î¹§&B é²Ÿ /î¾ûnM\@Kä´CAÆø1‘l ‚ô \ðZ'sçÎÕiA’€¡rh’À„ÎHáßÄØ2‡äQ‘C/›­•@%XdBŒÑåöQˆe±lÓÇ]·¸xxü¯®Œ,…édD¾WØŠ!ñ,–ØÂNé ‘ÄÁ‰JXPH•\òCwJZ*ÝÔ†Ø%#ëžœ1„ÒžšMÛ¡"×P´/¢)"3ÊtïŸñûщW"±†—ÎK jM#5Çÿ–ŒF¹º¡=-Ó“ÂŒ¥ûg›Ò”Ê2&+ÒÉg:_y¤'Ÿ ò/âu}Yá:>â†J`¤&*Ê E‘äBm2d‚õK…®U‰éB1)2v “–´rrê««AIW'O(50•üˆæGª 9é}Ú8MîSŽvOêùˆi•ŒÛ3Éþb?ä¡Ð·ö‹Ér’°ê‘„)¯>I"kåP}ê×þÍÆÔíÔ¸·@¥ê7r²n£m“ˆŠ#²® b6ÄHkÌ^ŒÖ´>ŒÏh@ˤˆ !жÜrK}i@®Àö$ Ê4Î]qÜh‹À>¿mŸ#›o¾¹®äŠ.×ê1K Ç+ÓÆdÒ˜œê»u›z;"¼9J‰zèTÐs›"¼¾*#mÆ&)JÆËY,RYÓÒ=·mj3 ÙpˆÈÕÀ­ ±í¶µn[’„» &Þcjºœ'2¡E%Ê#û„Tq¯H;t.…xjÙ§Hˆ<¡!¥tÊòñá„1-ùÞ°‰»n'_©.a™Áb¨_¿ÛlÅ6Ï)÷¥wò:CªëÇ$LTý’øìÒõt,“™1¤K¤Gq⪪–tœ·Ššêõ©PNhк_¿LÆeqG铺¡_cåä#1¢ iºÒñN§«RvÞ2˱˾ï1’"EüPú-|¯Dq}¾ßÁ¹Wù+gúÓ•»Í²¼4“å:®Õâ»IkŸ³ŽQ¬V>íºíW2âÈÖCrHŸ¾º*_¯7]䱨㘷ñcšûø AÒÚK^KnlƒHú /­¶Á5I×´^Šº`?ÜÏf·¥³^99›¡5{ÈR•'¸üŠ|ç«™ 'Ó óª©8»—Ò}]•XUÏYÈñJo‚Ró"ÁÝÅâúnNù·,1’¶ãOe‰wvØÉêw7]©~™ì ^P™Ø`G]ü, £-y çðÔÛB$IÈpG­±c±´¡4±h8”óuI‘a"±¼m%MÕâem雮ҟΓ=\^ÛóNOkWFdªw©:¢zÈü‚®GÓ mžÙ¦áN…´H™ŠÎM…åèÔÍ~a5Ïik/¾#N™p5AŒl(«}Qh}tÉVÙ!{UQ’ŽrBwC wëVRY!ËNꃚ#Ò·qÃüŠ’¦_å¾Ú‘}…ŸÜðé@JYvÊ\2­ ˆî¾v%×f* ò§èíè»zuÝvuj.öÛ +$‘¤‘5ÛD1Ç´Ó¥xiº¥ÅHÃh?+òH:|ÒÅÿ¬çký‡ß™^YÕ ¥á¶´,΋¢Qi"A+6 x^eé> ÁÉò8¥…e…ŒMݰÐ[ë  #dLÌ … ,’ôF¨:ƒQ?_èQјPu_î1¸6&2ú0 ziçZòóW‰ß¶ßä4²õ%•¿)’c*4ê$ÚL‡Ì6Σ†|oÛÍu¬muôÇë¦V’˜¯Mâ‹f'P–õbñ½ü+\þjebcZó¹§Š21éí>öêq®_Z„Šð°H‰YáÖç˜ÄåÉ*yà5eé8ĉ/t¶iÄ'ƒÛt¯JP…Ÿ ï9—Ë‚2˜ŒÈr¡h\”rrm‘›Úˆe¶‘¯ißÔ)#'재Ñ>9y®íµ˜ì—s¸Éϵi¡Èo`C|k8ÇD%Îo˜¬¿"p4GºYðs¢`Æ= U0~¶_ YÎØnx;Ð810ô¬v ä­NE_žØ ?oj@/b†ÚÞ £@J´umãl¾&.ÏúÛo²ay>Œ ŸG¨MLeÁ_Y0ýšªXEDò+k·Ñ^´Yù ^“•]N÷Xì¸oá⦵!ÕVßqû˜oá_iC?²mEµ<^å”YüÕ‘ž•³J"5´1Ó†Dïהȟ?†»‚ŠS¾ð¼2RFȧ…Œ"¢ä·£'B†5lÒÃȆ2F\ã‹È5÷*×ï.ä“þâÓ“®ðÇa¥såÕi ê9×g‰Ò¹¦jÝå>p}žˆh¿VÒÈø;“ãC¦î3Ö4ÿL‘Û±û_sL±Èk%ϱ“1ìÊׂÆôþl†MllÒ]“{:©[L§£„íê”&‘¤‰‘˜â˜Gw%àcìÜ<–ª‹1GÈ#z$„:ÄI\ ‘ö"´ë‘±[%ûùúIö¿ ƒX¤úÆ„Ã8N¨j,Ê –'sêLiVÄ}jxíA•md¨²®¥Ž‰LÊ̇ª9ÒVÔFù­3ÆðGjï"Þ}§ý&1÷_¦óÕ‰dCmõ\ε†L|émR)DzPÛDuœÛÆÜׯˆ6­f#Þ>JÛÇsN ° M¢ÈŒµ7%¸gáp\EB%6½þ¦„H›÷!dSæ·×r \‹Z­³†ÿFMZâ|ìv•N)+"‚ôe° ÷¨—T<Ó»*}´;XÄB‰¥‰¨,írß›­ÚI2B\+~>ÔðÛÁX³ ¦A´/UGSÓ—fQiªZ)ß.qѦo‘Tš”³ÕTû)וӣòÌ·â²þ±j؆ª&Ó v©×´qÒ7”ElNXJÚ˜o û\Gû,)ËbmD¥ }†H†qŠJ÷¿g”Åv}<£+ó3Ñ>36 †G´åÖÂ…¢@Íõ]à û¹§õá£ʪ7*º¦wÛºD¹TFµ¼FeÁ>™Ñ“*N•©›àÞ`סLØVУ=!Ãa^ŠçÛ ï'Òa Í@Ù„™›y‹÷¦]ÞžÏ$ÊhOŒƒès5ôëmìDæ—KuÂêÿmQä5HJ[r’œ4¬2£G-î‚1žk(ázs˵Ícbä@]-ŽT9”k¡†ÊÍ­;'/¹nÏZGvÿÙëé.†L0†.ùé3‰´W½è:B83Žg%â,”¬ ^dzI³p\+”gIa;ÖŠ靖߯: |åmµ›N9vûªýR]4Ú×^éá8ëµjtWw”>öµ³ºˆUÁU¤¬¬5ýåŠ@_»÷»×IÖ`MÉ yZ4-Ê®‹Â“O:Å-æWSU9+ÒL‰/긦±¾±U&8Œ*& DˆÊ-4F›Ø±³ ¹øâ#ÌÙ$âcËp¾ ŒÕàid­ƒ1tî¨ùî‰ä€â c,(2&ÉúÕ¯†)È&gí’$®î.ˆ} |é,w‹ rÚ\>"'ÊÄ‚ª/¾|e/2Ói&<³¢êþsûF:»¼ÒéG:á-ÇGTI ^[}×-œû“dàþÛWîkWµÍ²Òê2q6µ0íDvKeéY í”§¼§êfб,)Ç*)’$džCi-*^4rEÜ,Nc2³ÀÎóÏ­~jòE/‹«½U;¼òX+åÙ"e¥ Šéº±»² (…óò™&©Q #$W邤ÿy =c²Ê˜{áWs‘<Á§Ø¦4mÙ·eL$¨«Î¸ûkêúˆšÐ׋íôÝ´eٵמ !à8϶¯Ã,þ{×P]'t¦þ•×Óî|Ôs·(+A]u{·þégb¢D°øÈ—ˆ bů-aÓ.=ÇÝ*@¸ý`>}ZÕëªje¨¢¯Â;Àª{¶LŽø—¶ªëÔ¾VUªµLh(s?”Ó×Õ+d„p®½÷©*uûׯ²Ô?Â*C•Ž ëœD’biÔäQ)ün(dDd¬úšõis¤f^^Ȧ/&}'²Ð¦õ• Ì÷YŒÆÚ¢{Ò'{>ÿÜê§» #+xL†ù™ «¢ ~æé‰k_¾®Ü;nïY.ª—FEàö„mwŒö T2T§{ªÂ+H%ÓÏ€$±§4Ç|Z©Gvéy B¡*†›*QB º°ÐÅSD=IÅ|Åe†ÐN¹Îp[U¢·J9] ´Ëó zE²8í•'lZA?"ª”iE¨XÙ–sž¾:çÒ$²Ì¸”ÛÖœ‰r”´J™Î›ëÓ"DÂPüxøÒÅLaRínËŒ¦Žß”cWFÞ3{ÿd±ÔU@­CHB¹M£æä Í;9í5êè¡"ˆR„ž ;Rt,ié+”ïË´ýûô"Z–ƒ;JC’X‹»îIÕ=7MDØL_X)ÏÒ-ÓC’j±v¢4Ǻ~C¦y U©Ã®ý£²Buˆ]â§—§·Dú‰‚ ²vïMŸ(‹°Î«Â‹ÒD†Y˜OTÂõV× %²ÆGjUþ÷mh—)…ßLIø"ˆçIr5*b‹T~A*Ó×öعpr–Õ´6z¶[¢}žúê·œë¤ögN:YÑVòÑKéq8D'ÄÆ­Ð¶¸áíòÔêJØóŽ ¹âtk_­R©’$ÍJ¾M8{ݧTÕµŠM†øePÕ#¿=wå™Uò›Ãð$ÊÓi÷!þ&¬¿YÝ¿Ió·Á+w™¿Íë^öƒ‰Y»ÀÐRÌ&Iê.½½ùd*œPÎ*ñ”SÈç·$ûi37üêôàTÓ”ï‹í,gó‘†ËGï Ý†0ÖÆ‚[d>ãÒ³»˜H½ügç¢ ÑÓÖ.§h© Éu¤ÍuŸèÐŽRÝ·­L¦ëÎ%c¼Z ÎXé.ŠçOõÊÚö1ѵ•åÏ‚œ0QrT™àPvôœ©ÏNGyý˜(kÁbʱÛ`ûÐÝoNïzJå:í,úÂÙµBÂ7±{Òº7Õ-·D¸«ò> qà„ "íÇKE¤=‘Ôìù#¤ÊëÔv1–ÿ6 Ò¿Ó0}IÍd?V±k£œ3wLs$t¬´hœ‹•C-ÏM¯I O^ßùXÞTºØgεPû3vÏ(ÏpÝç|ÞvØ?sÛ>N²0µê -3cmè(ÝL"ö£íKŸ¬Ha˜\­Yœ"ZÂTß /¬~b鯟8ø¡Ç݆ŸÖßêî_Çú+“YbÄ”<á%úûªg–=öô“¯¾ü%/YkÃY³ÄÔßÄZÁ¦KérW4åª]þ*@—²Ÿ7hYm‘Ö§ï¯H£UâÕ Ï…Ž©¬^“¥mîr²“‹ôV‘ê5¨›2¹Oxü5 »ÁIÝŠþWŠËµI&&™h+E—'Jд´Ó®÷\e–å\â ³<Ñà-2¤Š"Ü캑NüùdÙx±¹¨ª }‡˜+·]dq§ãh[Ȉ戴UkE7p—D*LØäŠÓ†ñ‘R'‹iªÄ#=SLŠp§hº…ŽÔÀPRW—‘zœúŠiPÈð€æôklxgb„‰ʹòΣÊ*'wñß9#'Rçbd …ìH‘5Ôë̽WM‰~=óL`0y”«Ýé \Ù<”†ºRS"íí!%rÄä}£%gÆ„òòŸ (D×ÌÆ‚Î^7ç>¶–™è.É |jðÜs/¬zê uÕ]·=úᇿþŽÒñu§ #>­[sd–õ9ËJ7á)MWá ƒÁ`0 ƒÁ`0ÖlØüMr¬¶>ñ÷‚õikеEð7é©LŠªoC˜¬>_=ÓDHGT‰&E ƒÁ`0 ƒÁ`4EÉÿ©(«=!"DGcdÒ©ÄUâ ‘#vœ›%Ê„ˆñÀÄăÁ`0 ƒÁ`0Œ¦°#’؉M‚ä"92™¨Ð&E:Îy£)2a¥q5EØœ†Á`0 ƒÁ`0 F]ø˜æˆýé‹NSÁ¤UpÌ_LÇÓ0›qI&D ƒÁ`0 ƒÁ`´— ‘#îŸþ°½E™!#nÅ>mŸ™ # ƒÁ`0 ƒÁ`0Ú†q¹ 7MŒøÊÒVè$Ÿù‹ï/¤!#E˜ a0 ƒÁ`0 ƒ‘ ŸUKŒñ™ÏDýŒH'¦4•¡"L†0 ƒÁ`0 ƒÁh !#Ô?_AbÄþ.Eœ(ñ¥ •É`0 ƒÁ`0 ƒ‘ƒ)Œq’Ä—¦R¦KŒècžï1DŠ´Ù “# ƒÁ`0 ƒÁ`0r¡ÇBÚ A ñ1R:žøNñ#ÂdƒÁ`0 ƒÁ`0Œ¶s¢J%B*DKˆÑç2~Kb ƒÁ`0 ƒÁ`0¹P„ã*‘Ç[FŒ)ÒÕIÃ`0 ƒÁ`0 ƒAª™&šBŒ”Ò7¸&J ƒÁ`0 ƒÁ`P¡‘7—i&F ƒÁ`0 ƒÁ`P¡QÉÿ`¢‰'yÞúBIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/remove.png000664 000000 000000 00000035052 13703317554 026626 0ustar00rootroot000000 000000 ‰PNG  IHDRÁiBìtEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp û]âü6šIDATxÚìxSÕÿÆß$”=¡ìR¶È™²dod£Ee#‚,Š€ CAd²· AEDQ@@¦üXE6”i›&ùßïInHÓ¤-«4ÍûyžóÜäÎsϽ9ïy¿ç܃Á`À}rßB!I„í~VxÁ£BIÂñóôÙ@a$„’ÌÄÍæÐ#›‡yÅ0 ô45Ä#†BB!OBm¦‰È8"èMø¼%Š!„ä †6/É]c a€tOF/ŸÝ"!„’”è.‚V/Ÿ= b¼NÐUôÜ“7WH!„$µÚÜ„OOp™">'èÞ·ç*€&™æ¸6øc“68¢}³8’îc9G£‡ÍÝC ¦BÏ £Bñ 4½Rºåˆd"vW^,<õ º‡BMÆ j,UB!¾‚¦[/84ÌÕùéúæì4zÀØ!QöBñ-7˜ÆÍ zÌéþ¸à!ÊÒ$„âƒÄUÚŸtCB!Ä×Hð±>oc(‚„BR¢ÆYÁ]=‰!!„âkxÒ1C|"x‰B!¾è ‰u‚†x„Ðïx*Ä€}m‚ñbîÇÓ¨‘ˈ¬©¬h»7¡_éÞÞ„°®`]‘x'èÑ Æõkšå7ÂjZ4=–«òN©d y°í7ž¶bå /!¬+XWÿ»aC=íxÝ~4ãŸÈØ7íÁ«6tßfVûßyÁŠWŠ>†vˆøú}ûï_Ö>áiâÕ0:A´ÒZv¿ž·"2Zn8‹ºI§¸·üÛSö’ºfE€v£gIeÀ]­%Ö±° %2UKOZ~™ƒ جݰ㵛3Öj[¢µÿ¸dÛÑÖo”Ï„Z¹ŒÒîç¬Ú*s°i´«S2‹}±¨Óµ¨¸y•Ödí¸‚ êq,Òöè*{_xS ŠÞ!²®ð}(‚ndÒnÆš¡Fõ{ùµe0LÚM¢•R¥Füé¸)ÿóbïõŒ éµ›÷¥Mш²Ø·•ßÚÏÿZÑ@kÁI¿ÁÇ•0ëo ¾>{õóÑ\[Þv³—ÿ³áÓªjÛ„~«ÙST믋ÖjÜsÙª~Xòxthó²˜?â ÎÈñêH¹²® ¦Hç3ª–”Ü,G]?¬|€êôþÓCËLGâóú ß$ŸIµ´„2ÙŒ8}Ó†¹‡-ȬµKg5ªû¶Ù†Â8uÓ¢¶5k»Ž²ÚP$“Ak±UXä–ÙÂè¬Ý°ÓZ5p#úÞ1¥õ'-ÃÛ16µïyMj¿/€6Øb̰FÝ֦ѰY-Ü!!>£†0M0ÁœF›:ôÐÀº‚PÝ‘Nni¹u?ój©›Ç³Åà£Jø±Y° HkKAL®€T»nÃÐ]f5ÿ íƒÊàµb&­UºZ ok“`‹´bëÙ{­¿¿šÕë»&Aª³¼çOfç²7lXtÌ‚ùµƒT«pË+Šg~ˆ¶C­Qw ·ÐêÙÌ(˜%Òòõ±Ä·¹m¶àŸ+ÿaù«¸jI«‰aê‡B¿®+RVÄÀ wš\R #K*¾ðîqU ÇáòÄùeˆ¹†Á5r"$€âGRwc,øð‡sˆ Èdw„0$É(Ròd8Ø.$L›D9’Ù‘,.ÉÆ 0q:@I–»7ñRÉÌ÷ç镳LL>œä¾n­ÝßrŸ;n~†ùý†C)€.mÊ †e Vý„¤D i÷·êëÖîw{ ÌöHú Eø®ÚG|Ú¬€5é‚y[”‹º¿µû\îwŒF‘Š ñ#¨  =Ù¬Vº@’òo}í>wÞÿº ¤¤ÿÀXŸn"Hü@Ï :ž´Ï¤R‰ÿiá=!´9*Ž–"~ÓÔ§>Š ñSèlß{K ñƒc`Ì½Æ û)‚„â¨*Š Iù·ºKW@¬(¡ÿªlq!EøK£ï^w íÞèö R‰“œDð¹³èZ¯">ž»ÅJ—çÅ!N ¡’X.Ð)‚I«‚ï½ÑìøQ}N“.=rçC«ÎÝPåÅFNA–,Ù:'éž'ABœ˜’Xkäpe+UG·~Cq3ò:6­\ŒûuÇ”Üy>C&»0?|B(‚ŠýmƒYR)©ýëãš,‹JgÏÁúD0uÚ´(^D}/Râl^½G÷ïA…ª5îÔž~ûi+æOŸ„“Ç (8Õë6ÆÛïÂÔ1ïcç¶­X°ñŒö‡<æM›€åófaÉ"8U/Ï”.‡#ÎØ…Ù‘¯²ÏURI(X¨0¦åȉˆS'P£nC”®P ë—-ÄsUªã¯?v!âôI Ÿ8ƒaT ‹€PIrq‚r¸rÏWÅ[‡!cæ,Èœ5›3etÉ“¤å_ÏÁº¥‹”8FGGÁ ùç{YÖüåNÑÿ-D^½ŒÍk–#¼XI)^’”P E܇>c¦KŸ… õ*È2Ý»ëL9CÆLDÍú‘*UV.¥DTò\ãÅúøtLfl^»?nZ‡×{÷ç+à!ArŸ"˜ÄÊ¡Aðt\×>Á¨»wÔç4iÓàò…±Qs{×®\¶÷% Y›ö˜?sªr‰õ7Oòs!„P àý ¡—ã: –*U¯¦­ÛaÔ >j^MP§aSm[ƒsÛm;`δɨ« `zÍ]BHüp{ç‹$“K t$y6"ØjµgQ¥âDâ,Ò…†ûì¹8v/5¨‰/­@érÏñbÜ<{¡¡¡|D"¥7èÆ0måHfG²¸$ ñê¾|‰óç"pëæ Œ1¥Ê”CÙò@BHÂPIŠÁ% ¾Â¹³Q¼d)Œô_NI ‡ú! …C³ä-ÌB")š+§Ž0ê z†CÉÝ8,BˆŸ@$Â,BEø«¤B(‚Äo ‹€B$t‚„B$) J'H!AâM©‚„Š ñ[d?D¢$úó®Ÿ EÐ BEÐ BHJ‚/!`rOaùrcùÒ%¼üq%9¦ûaöqö òçΉݿïò‰k‘’Ås_ëB$N3b4)3z æÍóÿþûXóå¬/pçömŸqäÍ5¤˜óz÷oý:µ°fÕJŸ¾ÿ E$£Ê7©StT–-YŒ,úzA‚ë;ë}.?sêF|0L‰Åc9ã)C×kÑ¢U+”)S6Þõûy%ãdÔ }ð÷1~ì%„÷S¾„PIœñ“¨È¾]¿ÑÑÑèýλøfÑBXbbœËþ»{CBÙgŸA…²¥1ṅpæ5¡åz:x`?7¬¯æ—+ó,ò†æÄ¥KÕ±>4U+?b… ¡E³&øóÝó¹léÔ|¡Fÿ@«L©’Ø¿îÞ¹G¼$}1s†Z?¼`~T®X‹µs“ùu5çÒ§w¯XûnÓº%:¶ùž:DüóÓñã߫ϛ7mÄ‹µkªý•×Îa@¿¾^ÏËŸ„°V­Ú9úÃD !!A’¬˜?o.Z´l…—_n‡7n¨Ê^g²&P«µŠmÌØq˜=ç+;vQšs4$r¹NáÂE0rÔhõyë?bßþÈ–5¦}6_|> Äò•«P¢DI´kÛg=ºäŽWÎuó–­˜;¶|·4>VS']ºtèׯ¿Z·IÓf4p._¾„Ž;a½&ü7µsäX¿íÜ©Îßf³={tGݺõÔþ&}:U«Võz^þ†á(MÇiB¸úC£„"HH’j8|øþؽ/·k‡ÔiR£QãÆ˜§‰¢¾\*4‡zõë£T©RÎ _ÏkBËõ¨DIȘ1#2gÎ £Ñ€¥K«í›4mŠâÅ‹cÄÈ‘HŸ>=–,^ìu@EŸ~ýÔör¼6m_ÆÚ5«c-××o×¾=6j„ ¨ÏòŸ§OBËV­ÔÿØ­X±Ü> fÙ2dÊ” uëÕ‹í&]ö)ùÏ‘#vïþW._V(yöv^þ8@&mÚ´êoÞ¼É1„"HP“8Í›û•:n½ë Þ<š(-Á/;v(Ç%Ë/\¸€¼yó:×ÏùôÓΙ³Ü[_›ž""";wnçw“V‰æÌ• çÎExék4 “&6ú¼Ù³ãÒ¥KO޵ Ó6 U+WBáBa¨UãµÌjµ"mš4šóm©B¿²îŠåËÐRsÂAqòéšß%K—©síоj¾P?mÛæõ¼ü-‰“~÷ÞèÞ½:uêÄp(¡’äÏ­[·°rÅ ¼7dÖ»Á™òåˇùóç©u²eˆMt®\¹âx£µDÅuD ¸«3gÏ8¿‹[;§ c.M=¹dÙöܹsÎy'ODvMíÿH~oÝéÓ§aÙ²¥˜úÙ4ü}è06nÚk_;wÁÁƒ±xñ78qâ„rÂñ¶L4$O}ô1þܳ•«TÁ+]»à®&¶žÎËŸp `è¨ !‰…Ë“'Š„%,Ø¥KW52T§}‡˜òé§8p7i‚¯,@™Òe”C›9sF¬}$´Ü•§4±¤?®rå*ÊJ¥9uÊ”,Q…ÂñHsgׯ_WÎÌÆ ÅÛo÷BÄÙ³š›[ä±â½}û¶ #çwäÈ|òÉ„XË .ŒçŸ£GB¹rå®;>DìäܪWA…<%dßy¥NÚ/î!þþýûÙ°#P‰1oî\4kÞ<– m^jƒñãÆaÕª•èÛ·ŸrŒýúõELL ^jÓE‹u®›ÐrWJ–,‰.]»ª}MĆ UøL¶=z"##Q¤H,\¸H…=¬œj×.UhSšï¾Û'ÎzÝ^ï†ýý…fM›¨¾º7{öÄýûc…ãÄ ¾ñF7å„Ýݪ»‘•¾®ßwíÂç3gª?aaaøüó/TÙy:/AqàëÖ­G:—F!÷qÿœ]!.)Б‚%i?ôã,ª”ÓjÖ§z’Š\’ôÒ ñŒôWöëÛ'OŸ~$ûûjÎŒ3îÝë7¢•8¦9óÐÐPåÒ¥q!ÉÎ6ÜëOæŸG»®aÚ$ʑ̎dqI6:A·eÄ"H°!ñ°e$}€2˜FB¾]_yi(€„<(‚„<z½ý6>Œ  OŸ>,BžT£ŸáPÿs1úÔ[84œáP’Â9Êp¨_˜p(‘ „â·0Jâ†X„q‹,B!AB!„"H!„øì$‰âßÇüoï„<.ž~úi¡V$„âá„B(‚„BEB¡B!AB!„"H!„P !„Š !„B$Ä'¨P¡&Mš”lò3cÆ ”*U Ï=÷víÚ•¬óJEÇ@»ví3gN•òæÍ‹Š+âý÷ßÇ•+WœëŒ1ݺuKvy߸q£0³Ù|ßÛž={£FBïÞ½1eÊDEE)A*q$ºxêHÅ,ÉýÿEØÄAJÈð‹/¾P®QœˆÞ×%û«_¿¾ ƒJ…_¯^½Xâƒá‘—‡ä_œÚÔ©ScÍ÷–'®ÄP9$t>ï¼óŽrºâÞ¤¯oþüù2dH¬ÆÀ¹sç”3ÄùéÈú"pbuºÔ©SÇpB ‡’dô™É£Ò(½„åq ÿ¹#ý€ž¡”J2((H9 ×å+W®TG$'nðÅ_Œµq,&•p›TøR‰oݺ5Ö:;wVù§$áÑ'‰8Sé+[»v-nÞ¼©ÂÁ’¯ÄŠ7Sñ!}’R¾ÒPð´„.uäúIxuüøñªQ,®}rMDÄåYH99/9G×Gc¡¿@*tY(ƒÄ}I¥/b橯L*m ÁÉÀq1Ò×ä*–²<#}b"”óæÍS6\‘¾2 ¡Ê±jÔ¨¡`tïÞ=Ö:·"¡@9Æ“Dú8çÌ™£Fˆ6kÖL‰²|~XSññÁ¨AG²íàÁƒÕÀWfΜ©Â°âÚÅaÊyèîR®­ Ä‘\o9¯éÓ§?Ð3—„<(ƒ=Ö!Éä’)X’Õj=΢JèŽI¦z’>Iâ ¤?Æ— È€eØ«W¯‡Þ—TÆú#ö#8x qˈS×°gRsäÈÕ?)‘qÓ’¤*Ô“.ÔÄÇ]žÑ(èQŽdv$‹K²±O¤X¡P$,(}WÒ¿uçÎ%† ‡B¡B!AB!„"H!„P !„Š !$qTÌnĺ†Aøã¥`¼W6ù Ânšß„}m‚j9Ó°¿m0Êdc5B|>"Až83ª¢òÓöŠô–8}Ó†¯Ç`Ãi«ÏžÓ°òøó²}vXeñ븰NÖž´`ѱøO¸f¨Q]ãã‘6Þü„Naç+ZoŠFÏŸÌøûšã*¢Dfß|q° MkÀÖ³V¹nÃÉ›þQÙ‹î»ÃŨ]Ò¥P(_NMè qr38|MĆW­hUЄb™Úg 2Ë(·hÖêØÕÿ³â³ý1°h«z.éƒ H­ÝÉ¥³eÃìCªkœÏˆ@­ÖýéœïÿfF´£~~1·¯@M¨þ½#®Ó‚•',x¿\*å0¢Áºhè²õfÉ´ 3¢ÖêhäMgÀà²*_—îÚ0m\·Z$“+ªÏ“«Ø§•VDaYÝ •¯:Ú±%|(ùÙ¤mûZ1“ MfNeÀÑëV|¼W’Ëö}nj¤ò^>»Qåõì-¦jÇl˜×„JZYÜ6Û0ïˆ_Šë¼dŸ¯5aû¿VÔË#å%Êã÷ÄànLÜòïRÄ„LªÜ®ügÃç[°ü‹:ßê9¨¯•‰ÕQ(=J caÚ}g+Nk׬`zÞÓʳ„VV1ÚéHÃfðo1ø²F :Æx­‘3¾Ðÿ³O;~B'HÈ#%•æ¢^ 3©ÏvQÆ>¨‰‹Qs‰1þ{ ^.dB‡Â&ç65rµÊׂê+£47bU‚)¢Ñ|ƒ¶F«åÍ Ø×š ‰Ô¦ÓtܯZ0T«¬E—kûWö)ûÏB¼JMHeŸAÚ¬YZ~õ? “¶ÝÒãåV‹»¹U ñ½ö£Y}ð«ÕVFã–C+úkèï«6¼¹ÍŒ]lø?M; Àä¿bÐYËç!í|g9DBGò5x§55¾¬‰“ä]¥æê(LÜgÁ;¥P ½gW•_›/ùn¹ÑŒîÚ1¥z–ôÜî•0´lËÑJ”¤L²hÂüÍ1{ƒBú8uie²þTüaÞAšxÊò¶›£ñ†vì"¬¸¨58^w”\G)›-g)€„"Hjk•½ Ôø½u°rG5ùëŠÙSPEs=ŸjB!ßʼn€5ÈsOÿ¹a÷§¬ª"ßê¨TçjIͱëZŠ´*g"4ËoÄAMˆ¾ÐœŽ„*—hb&Û´Õ„UJ„·i~ûÏ¢‚Vñ‹ˆ#ªjwk#v›5Çfw`Ò¯Uß%‚¸žÈh»xßÖòsMs¦º«üõ¼U®úAk¦¹µeÚ¾7j¢#ÇûgŒæˆï_Ø|ƪòu]ÛÏÍÕ‰û¥å]œóÆÓvò&‚´µ­œóŠvWè ɇë”vNòYÂ–Ò 8¡•íï­hYð^#"wZ{™Ä‡8lá° %ÚÒØ$/ö²±©²1SɆáP’,ØyÞª«§‰Š„Úv_²W–O§¶Wði®KÇIhïFô½~¶Ëwï}¶8þ4X¯líóìÛ"j·c÷ÑÉ÷â™í+ˆ£ì­¹«ÿˆQb´÷²U A­P»3ÜÒäÞˆJéûË‘:ñ}["®<­ååœK^äüD<žvÙ§ˆ¥ëyˆHZl÷W/OÈj‘.å$!ܬš»çXΣ×3xAsвÜäØŸÉ±¢¸Áqš—F€„˜Å±Jru¬îŒÚƒW‹`€æÊ‡”³ ·4¡âqqJœy0F¹ i¾ó³çïØ+ñ¡»Ì8p%¶ <²¿Bb«†8ý8æëól€rxµ5÷'bhßʵHx/ÆEËîÄ$þØV·<_ÐŽ™ËEHÄ}‰îø÷Ñ ¤‘=‹HëB+NDÕ}ï"VÒ‡ØíG{HVú>W7r.§|UkT4ÊkÄ‹¹M˜²?á“–Pè´1˜qšpšTß­¸ÝýWí…Ç?m'ɆCI²B„F‚µC¨–Ó¨Äiû9+º Pb•Jk¶åÑ*é8ºpù?V5x¥[q g4 u˜IsyF,u„÷nDÛ+ýÞ¥LêzÓûü"ìaÅnÅ1Ø€4@±ÌÍ=ø¹J(VÂŒ 4q‘<‰ðË Ÿ5'c’}J¿¥ Èi¡kÝɸñGTcµ;L _Š+tEæK¹I¦¸Æu‰ÈŸ¸ùçáä›f»ðŠðÉ iðȵ±}*„jHè ‰ÅÏÿZ±M>™øÛ…h ÜiFo­b©¹‰LÁv×6óàƒ ÅõìžYp|­X€rIâö¤OQGB¢ òª¾1}$¥Tܯþ`F?Í%N«¨ðü£9×á»Í|žs[ 5Cß-e?é»ìö£Y}ÈhXé·œZ-PµvE¼Ä¹#ý§"èók©0ó¬Cuð#e! qÊ·qÊ"n¯5!ƒv^†´/F»–ö2–FÎ;¥ìN[ýl>Ãçɓà 8"'&—èHÒlµZ³¨R6GŸ™Lõ¤]_•bbbÁGŸâÿ ú8Þ^!Ï.Žz$û‡¸²~:o5ãÏK¾?šeYé“ …Éd‚ÑhTIªB=9*GÞH>Žv]ôI”#™Éâ’lt‚„¤Ôî#؇ô)¦ • Pƒ„R‚K(Y„o´ 7aQ 5RtÀ¯1,’â $$²ú•–OöƨD !„B$„B(‚„BˆOÃ>A‡å3±HŠæÈ–¡$„B$„B(‚„BEB¡B!AB!„"HH²ãÌ™3È™3'víÚõØuöìY4oÞ D:uœÿÊ‘’ÎuÉ’%È;w¢×—ue›äx½¡’dO»víT¥()oÞ¼¨X±"Þÿ}\¹rå‘ëÆ˜3gÎoÿÉ'Ÿ 22ë֭øqãøw;nŒ1ݺucAŠ !÷CõêÕñý÷ßcéÒ¥èÑ£6n܈úõëãÒ¥Kô8ß~ûíC‰àÑ£GQ¥J-ZeÊ”á…s£ZµjhР ‚P ¹Ò¦M‹"EŠ B… èÔ©Ö¬YƒëׯãÓO?UË- &Nœˆçž{N­'nãêÕ«÷%Û½õÖ[(Q¢Ê–-‹±cǪ? ^¸p! €ãÇ+×)v|ë»b6›Ñ°aCìÙ³³fÍRÛ‹P÷îÝï½÷ „°°05Ä)J¸Tæ‰ÀóÍ7Î}É6]ºtA›6m?~”.]³gÏÆðáÃU .Œ7ß|QQ ÿ!®äSÊåùçŸG¡B…ФIìÞ½Û¹\ʨW¯^ê’—Ö­[«?P>qâ„*g9žl×¾}{\¼x1Áãݽ{Wã3Ï<£öùá‡" àÞ‹§V­Z¥ÊYo0´jÕJW®™œïåË—ãìsÙ²e* åIHRÃצ‘dÉÓO?ZµjaÛ¶mêûÌ™31}útLžFïñDpW®\©¦rdêM¬åœR¥J… 6àæÍ›ª‘5kVÕ'¨³víZ•9zõêñÆ'ABt²gÏŽŸþY}^°`^~ùe"D¨D¼nß¾k©ð%¬úå—_:Õ"(âPDÔBBB”øeΜ9Që»"Û˜L&µ}{AÄMP„R.UªÞ~ûmõ]ÄfÇŽ˜;w®SÃÃÃÕA‡ӦMSî6[¶l*‰s:vìX‚e$B)}ªM›6UßGŽ©B¾2¿m۶ؾ}»÷ÚµkÇÚ.K–,J˜u*W®¬ÜaBˆÊñôë ¢)‚î‰\¹rá—_~ÁáÇ•À¹‡%o"~"¤z¹B$Ä8AœÚW_}…¯¿þZ}—ð¨pîÜ9å6td=]$õA+Êçã‰û]ß"Xºêût])᾿þúËù]?/A„UÈ”éÞ‹ËE¨£££<¶û±Ä剸È|xÁÓHO 5‹@ݺuK…U+Uª”àñ.\¸ ÎÅÕ±{$)â>tèPB•³ë 9¾¸Pq¬„P qA\‰8´×^{M}—Лô±½òÊ+qÜÆùóçcUÊÂǬú¬\ÅAGúÄîgý„ÐEÌuŸ".®œ:uJÃì?>$üê^”Æ`5”“ÖÒϨ#ýzf§øÅ_¨Ð¯ˆ“ô&„ˆ·Þpd¯·ÇDÄ1K¨SÂÖË—/WSéƒÌ“'Z>iÒ$lÙ²E{Ó¦Mxê©§xã“$‡cH²@]8xð êË’™ ðÇ!!O¡cÇŽX±bþüóOU‰‹ðíܹ3–ÓEQúáf̘¡„GÖAÕC‹" 2_ÈñZÿApáT˜OŽ!}‰Ò/Ö¡C‡G^n"fâŽ%L)Ç×%b&}—âe ‘82)W9g+®OÜ®„qeÝÕ«WcëÖ­‰:ž\ MK_¨ô¯~ðÁ^ו0°<[™>}zå] RöÒW)Ë$ôì>‰:Aâ7HxNœ^pp°? @5*ˆ[÷$Ï鉳÷¢÷ƒ¹3eÊŒ3FõÍÉ ©lÅ…2hD܇Œ’”~9q ñ­ÿ ˆð|þùç˜0a‚ ù‰5ÊÙø(‘ÇID$$*ˆ\kêÔ©Õà éc”‘¦"â„$%ƒ= /Éä’)X’Öz;΢Jè¡+™êIZç’¤R“P—k茔ȑ#GT_¤„²¥q%IªB=9*G”£]×0måHfG²¸$á„BüW(Y„B(‚„BEB¡B!AB!„"H!„P !„߇oŒ!‰B3!¾†þ~XB(‚„ !„¸Àp(!„Š !„B$„B(‚„BEB¡B!AB!„"H!„P ñyrçÎ%K–° |˜˜¡ߤ]»vÈ™3g¬ôÊ+¯<Ñ<1ݺuãÅñl6jÕª…•+W²0È}Ãצ‘dAåÊ•1dÈç÷ 2<ÑüT«V ‘‘‘¼0>€Á`Àûï¿Áƒ«ïÍ›7g¡Š ñ-2f̈R¥JÅ™_¡BÔ­[{öìÁáÇñÔSOaÀ€hÚ´©Z.a°)S¦`éÒ¥ê%ßyóæÅW_}…ÐÐP5_›—/_FÑ¢E1tèP”+WNmw÷î]åöÖ¯_“Ʉ֭[# àÞÏaÕªUjrÙÇÔ©SQ©R%|÷Ýw¸uëªT©‚ &¨| sçÎÅŒ3pñâE%è"â²ßI“&ñâ&µk×VS !¹_%ÉžåË—+Û»w/Z¶l‰Þ½{ãÆjÙgŸ}†éÓ§£gÏžJ_ýuÕ·'¢5sæL 8P ZÉ’%ѦMœ={Vm7qâD>7nœÍ£G"**ÊkŽ?‹Å‚Í›7cÆ */Ó¦MS˶mÛ†Aƒ¡sçÎX³f:–ä™$½~øá‡3f C£„"H| qd®}‚âªtš4i¢aÚ´iU _ÄêĉjÙ7ß|ƒ:¨~Eqy2¶xñbõYœ\ñâÅ1räH¤OŸ^ͤ’”åõë×WtôèÑ æ±ÿþÈ’% (€Š+âСCjþŠ+Ô>Þxã u¬~ýú!_¾|¼¨O¹GŒF#n޼ɠ‰‚áP’,¨Zµªr{:9räp~Ξ=»ós`` šFGG«é¹sç”ós'"""Ö|©såÊ¥æ .\P¡Sù«(é[òÚZÔ¶Ï–-[¬|èy8þ<òäÉk}Oy"—;wª(A=ЩS'¡ßA\š¸(OÄ'N"gΜ‰3_DÔu¾„2EkÔ¨¡¾‹ é‚(\¹rE2ôFByЩŽôCò?)€„"HH¢¸~ý:öíÛçü.KRlÕªfÏžbÅŠ!,,L ž©^½ºªe`ŒôÏ…‡‡cáÂ…ê²¾ !Ö  L™2Ê!º†_ïÙ—oΜ9jPÌO?ý¤B¥rlòø‘Æ‹„ )€„"H|–;v¨þ9zõêáË/¿Lp»^½z)—7~üx\ºtIõ×IhU*D9:jÔ(õ¨C‘"E°hÑ"gT*MåÙ·o_µž 𑤂 È>Gˆ##NeiéÒ¥yQ“qéÒ§,ÑBàþQqI&—èHÁ’¬VëqUÊi5ëS=i×W% .\˜õÔ¬Y/¼ðB¬~N’|8räˆzŒFQI¯$© õ¤‹+ñm´ë¦M¢ÉìH—d£$ä!9vì˜z CžÌ”)“zŒB²Æ cá’Ì¡ò„„„`×®]ªOP—>ƱcǪ¾IBE„ÕäA}BˆïÁ‡å !„P !„Š !„B$„B(‚„BHŠ„£C‰“ø–ÿÖ#Äá;\ E°"!„0Jøz(ÂûŸP !„Š !„B$„B(‚„’âaß EB¡¶v áï„P !„Š !ijgÏ¢yóæ(X° êÔ©›ÍÆB!„"HÈý!ÿÊÞ¬Y3*TEŠA£F°mÛ¶$ÏLj#Э[·D¯ÿÉ'Ÿ 22ë֭øqãB#ÄákÓÈåÎ;hß¾=ªV­Šyóæ!** üñ²fÍšäy©V­šµÄrôèQT©RE‹å…$„Nûçüùó¸}û6ºvíŠçŸ/¼ðúôéƒâÅ‹«åW¯^E¯^½ðì³Ï¢D‰xíµ×œ/ó>sæ ræÌ‰‰'*“°dÆ qðàAçþeÝŽ;"<<åË—ÇìÙ³Õ6²­;«V­ÂÂ… Õç%K–¨}8eË–EáÂ…ñꫯâúõë0›Íê8{öìÁ¬Y³Ôþ6nÜo^ !ABâ7o^%xC† Á–-[`±Xb-ïÞ½;öïßiÓ¦)§(BÓ¡CÄÄÄ8×Ùºu«Zöûï¿#cÆŒ0`€s™„7EhEÜ$|9wîÜDçíøñã*?›7oƆ °wï^•ÀÀ@ÌŸ?_ cçÎqàÀÔªU+Qy%„P qb2™°|ùrT¯^={öD¹r唈X­VDDD`ûöí‹tÝF MüÃhD¶lÙ<îÛÄæ•B$Ä#ÁÁÁhÛ¶­ê‹÷¤ÿ‡¡kÿÝ©S§ÔTúát¼ÊÌž=»šž;wÎ9ïòåˉÎÏýŒöLl^ !É Ž%O WJQ‡â%|(ße€‰¸*(3zôhv”4jÔ(ç ÝéyCúeÊøñãU_¡ôÍMž<ù±œGBy%„Ð  Ø"XZ´h¡ú¥o°Gj¹|/Uª”™Ù©S'%f ,P¡ÉÄ0sæLdÊ” ­[·VDZ½_——X6¯„¤Ç`°×’L.)Б‚%Y­Öã,ª”ƒ¼ÙÄ=É(HIòõ˜RY¿~½H##?S§NÍ›ÁO9räˆê–ÁM’¤”>`½Ä¤—g4†i“(G2;’Å%Ù%)qg¹råR£;åyÄ &¨‘¢@Bˆ@$)y¥™<´ž&MT¨PÇg¡BtçÏp¨¿áÏáPB†CýƒÄ„C90†âÏ.€…àïBÉ" „B$lÂ{žP‰?#ý#|á3IÉÈý-÷9!A¶„cµ†å³<Ø-ÿñGHJEîï   ºBB$qI›6-.\¸ç/I È}-¯Û“Çe(|„"H«,Si!˃äÇŽsþ,!¾ŽÜÇr?Ë}-¨;AO¿Š£Á‡åI,!¤’g¦ÄFEE©>×g Ýñ4ïqTÇ!ïÞJÊãè‚&) @ýK‰¼¤]ÞWK±#Aâ¬(D\ôJAÄOþÐV* ù³X Ér™§ ‘71¢H‘ä"²®Ñ ¹§õ© ˆÑ¿» !‘"Hü´âÐPÊA¾KEá*h®ë¸Ï§’ä&‚îáM]ôtÔ“'!¤R‰ŸW®B¨W î¡PŠIî÷³»°é÷v|nP‰ŸWîïO”¨û;F=A$ɱQç.‚®Bèêé)‚ÄÏ+]Äôþ@×>”„\ !¾Ð¸smä1 J(‚Äce!§ ¡§0(ñuGè*†@B$^…P:W§èÅ$wñóä é E$(„îƒ < +âkâH$AòH…_AB(‚$ÁJCDV$¥Ü×¼ E$ªÂ ø‘”ܸ#„"HUi0 J(~„"HX‰BH ƒ¥D!„"H!„P !„Š !„B$„B(‚„BEB¡B!AB!„"H!„P !„Š !„B$„B(‚„BEB¡B!AB!„"H!„P !„Š !„B$„B(‚„BEB¡B!AB!„"H!„P !„Š !„B$„B$„B(‚„BEB¡B!~,‚6G"„B|5ŒNB ‹jB!)ÙzA› Ép(!„_è%IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/renamelist.png000664 000000 000000 00000030621 13703317554 027471 0ustar00rootroot000000 000000 ‰PNG  IHDRìŸ\>ÏtEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp èâw.IDATxÚì xåöÿÏ$ÝhKW(û.*²È*UDQV¯(î n€ W¯rá'ÊUþ".à "Š T¯¯"›\P ‚,Š ²”­@[º'óŸó6 “4iÖ&“ôûyž÷I2™L§“ùÌ9çw&’$Iä&nàÙ™Ã< ‰Ã\ÕÞs ൈ²ÉÙÎ4»â†U#«½G©q!-®É*ÛytEæ*Â:’ÔQƒ¨x&®ì ÙÊj%m˜Ym›ÎÁsÛÈ ¨^V[ažÛ“·Ú«”[¬Òê*-Êôà,h‰Ò.(í¢jšÃ´8ÌA-ª–U¯´z“&MºòÉ'Ÿ—˜˜ØM¯×Çb[àƒáâ¹sç¶¼õÖ[3§NºK™tÖFZµ¬â¹ÞtVrUYÖØÉ“'w~î¹ç>‰m£ÌM €÷°K111Ͳ²²étºÿ­_¿þ”2¹ÂÉg$GQÕü˜–››;;99¹615Ù3gÖ¤§§RžžäàkвÛºVg§†µ7ŠÓ`lRjޤ¤¤îÊC´*XÚžèȪN‹u¨Y¨Y””8ÆÆ;{§PE§“­ÅV²šòflQü䮪m¼¬6ÂJ„Ó7BXGƒ”ì aÐŽ°ä¨†%²>à?앨¤®a«‹°bfY–±ð¯°N#¬£ÑN€À[ÅÍêRb€6vXÃ4ŒÎ»þ¨¶„¹²t:  ° j;wvø^NN6 Ì™3‡éöÛo¯òÞûï¿OÉÉÉtÛm·AXà=¡*eu"_ÿï  Q£F‰çjiYÖï¿ÿžfÏž €7Bº"´«Ô¯__H©–V-+G_ €†PKûÃ?Љ'ü"+„E [#©£«mРAôüóÏ­´YYYôÙgŸÑèÑ£ý"«Ë¢—84غu«_¾kWþޝ÷-gËñõ>Ìi0ÿŸ ,  &P\\\v6!Âà…¬k×®¥Y³f‰ÈʯGŽ)Þ«ii!, ®¾új¿ü?þØJV&##CHË5mTT”èI®)$Ó]ظéU-ÜÔ"•–TVV¶»DíØ©ÝIgk#‡¢„„»5+w>±Nééé-;""¢½ò§´R¥•›šAÕd €FpEX þ ˆ@/1A",a€°€`N  ,a€Ú z‰@„,Â`K,ÂòÍ‘H‰ €°W©ÑÛœVTTPII‰æÎãò}çøv”aa¸Ë+€°XV-Ša>ðÝÚ@Jl‚#«£¯Fo €° „@X„ ,ÂDhr0-BšaµbJzûÐCQVVÕ¯__\tlL›6:wî,žoÙ²Eü8°€L‰yç¾âŠ+DcŠŠŠD”¹Ž=qΩ®iíÔ©eddÐW_}åÖçΟ?O‰‰‰¢?tèÕiýúõtÝu×Ñ€Ü^®™={öÐM7ÝD¿þú+Õ©S{<„õ111Uþã?,;v,`ë¶k×.!Æ/¿ü"$,®»œ:uŠ6nÜ(2 3ü±¸c‡7¤§§Ó½÷ÞK±±±ØÛ‘VàË/¿œþö·¿ÑÓO?Ðu™7oõë׺téB .ôhIÕŸ-..¦eË–QŸ>},Ó¸wܶ4ÈÌ̤ùóç“Ñh¤qãÆQJJŠè€ëÑ£‡ˆØ¿ýöMŸ>],ჯkݺuÅyîE‹Á[{(//§O>ù„† F÷ß?}ôÑG-çŽ;î Ï?ÿ\ÜkŠY¹r%µjÕŠš6mêÒçYfwÅŠ"•:t¨Y KÍ8>EÆó½óÎ;"•H‰=âðáÃtúôiqä¾üòKñÈu"§éå6oÞLÝ»wwk9={öµ,/eãtø ýû÷»œúòß_·n=þøãvEäÔÓv>4kÖ {?"¬gpT™={6½ùæ›ôé§ŸÒŒ3‚fr:|æÌ‘¢óoñÿâI”åT—kMN‹sssE”¼ûî»~ÎÜñÖ±cGZ¾|¹hY'L˜P¥SÎ\çs€°óÅ_T‰$Áp‡ÅâT”%Ùºu«h3gΤ%K–ˆhç.œRóòøÀÕ·oß*?B. ƒxäÔ–f D;vìQúÝwߥU«VU‰ÂÌ‘#G°ç#%öœ;wV™V¯^=Ío?ÍNÁßzë-1â‹Ù´i“8èuíÚUˆÍC7máes]Ì)óĉ)//âããéú믇 ˆ°®cONÞ!qôèQÚ¾}»8•8õ娨&22’î¼óN‘*{//!!Aœ{µ¥Q£FôÚk¯ÑSO=%ÆOs=j®Uùâˆ7ÞxC Ôà˜ÜrË-ÖGgeŽº,yÿþýiÔ¨QtöìYXDHReîÉM¯jᦩ´$£Ñ¸Ó“…óAóÜ,ÜÒ¥KEŠÉN7Þx#µk×Îáü¥¥¥âtÄîÝ»­¦»Sûººnø-zêt핇<ÞÅ•VnjU“5‘ó@ƒ±cǺ<vvvYq¥@J¬Q8 ¶…O‰a5HRRR•iÜ« „Õ ÷ÝwŸè€áN¾’‡Gñ°@BMt:t:ÍEO:ÐSRb„ ,Âaa€°5¢â»"h -®®P£—×ñ=uùGZºá·ù@o@X«…‡…‰{äPÃaa€°âÓ^büX1ŽñÅ“0­­)1a€à§FÇóU1ZüÏ&ðXg ¬ –U‹b˜$èÕH‰UpdÕbãuÒZÔ5,a €° „@X„ ,Àš™_\\L«W¯¦]»v‰›º¥¦¦R·nݨgÏžâ*›ï¾ûŽvìØAçÏŸ§ÄÄDêܹ3õéÓ‡ôz=¾MòH ?*M¯jᦩ´$£Ñ¸Ó“…P||¼[²Îœ9“N:Uå½6mÚP~~>?~¼Ê{­[·¦#FN§«±u ÆÓ]®½ò§´R¥•›šAÕdM¥ÄYíÉÊìÛ·Ï®¬ÌþýûéÇ ‰/íìÙ³tã7RLL 2{±¹â³RÔ° §Áø¬7\uÕUâüñ‡Õô‹/ŠîîEò³fÍ¢¿þú‹6nÜHÏ=÷\¯?_ܲeKúþûïÅë?ÿü“¾øâ X©Õ(¬¥•ñæFä,H à»j,Z´ÈjïôžüpôÞ½{éšk®¡N:Q‡üQÑ}÷ÝGÍ›7¯?ùä a]£^½z6)))`ëÝ»woZ¸p¡Õ´?þ˜n¸áñœSy¾ËÅÚµk-ïÏ;W¬sYY™e×áK—.¥?üPˆ´e˱ÜvíÚ‰ nÛ¶­XÆÑ£GE'Ûúõë­"srr2•——‹h߯_?ª[·.µhÑB¼gææ›o¦W^yE¬3/“;ð^~ùeúå—_Ä|“'OÒòßá…Äg¸_¡iÓ¦”’’BcÇŽƒ™7o5kÖ̲n_ý5RäÚ$,§—ø¬·°¹¹¹B0æØ±c´iÓ&ûÙgŸÑ]wÝ%D¾å–[Ä4hÒ¤IôÔSOѪU«,󲈽—/_N­Zµ²LçH{Ûm·‰Æÿé§Ÿ¦+Vˆ¿Ï’/[¶L|†æN»G}”þïÿþ~úé'š0a‚88@ÈZ$ìu×]çQÏmÆ ©}ûö[o–Š;ˆÌBrzÌói'3=ôØá¹'üôéÓ"RÞÿýU2ŒÈÈH±¼ôôt §Ûo¿]ˆÄQ–E>xð E.^§Ý|€àš—§q-¿{÷nzï½÷Ä©°|PˆÌQÛL—.]è7Þ þýûSll¬e:o{þÛœâóßçú›3>°ÜqÇtíµ×ÒðáÃ…Ä<gkÖ¬ó6ÌJ~P „å/þÞ{ïuëô †wüʳSƒ×£&§‹,.ïÀj8Úòºr¤cÑø ÃB9ëz饗Äi+–gàÀd0Ä{,2×íß~û­ø»\ƒòùjN—™FY–Ó¸qcËt¦cÇŽ.ÿ_ü9ŽÞü÷¹½úê«b§øëÖ­‘–ÓaŽê|nÔ"aÞ9]=ÁéG®­Íõ×_/¢ã‹/¾H'OžV GKŽ€\£²°üÜÙA&;;[,£#ËÀ騮OY`^ÖçŸ.–ÇdddˆGîi6Ã=¿ 4°ÚnÕuB©ï(Éé÷wÞI?ÿü³h{öì¡ 6ˆ÷8êó:rGÙ¡C‡,5/RàZ$,ÑÇ\ÿU'+§gZIÃ8+¸çž{hêԩ⑵åá‡#µx‡7 VA9’qÔÞ¶mM›6Íê}^÷èr i^GÏË/¿œÆŒ#ÎMszÎØ6ýv§Â›7oPœ~ó6^¹r%ýðÃbàÊ„´|¾˜kn^/Nóqgÿ¯Ù±Ä܋ɑÖ^b¸&äSK°F£QÔšöàˆÄ#¶¸Ã‡3 gpçwVq$åer6¡Þ\ƒò«k×®–Ó2üþW_}%$ç¨ÿüóÏ‹ƒ× ®0jÔ(JHH «¯¾ZDoNu¹Þe9{ôèA?þ¸¨Áù@Â]¸ß¡W¯^b©?Î×v454ÑÜ;Ê5”¹vãÎŽGyDœNð†@ MäT“{RÇ'" Ðn„üå®HŸ½v#Ks:4Qó?.Ãû¹'sþüù¢ÓfäÈ‘â4I0ÁÑŽ{n¹w•SIÛ)B&ª;N¸NòfpE ",§œðÀ†÷ߟúöí‹=„f„5ç&‚îÅæ^KM„@X , ,a €°€ –¯+ðäVŸ5× W¨ÑÁÿ|9\II‰Õ-G´HøºZ ¬záaa¸u¨a€° €°@X€–ñi/±7? @¨ã‹3&aZ[!Rb , ,ÁOŽ%æ«b´:øŸ/Là±Î@X,«Å0HЫ «àȪÅ(Æë¤µ¨jX , ,a €° „@X„ ÐÄ¥4ãÇwkþ3f8üœù=aEªD§´p¥E)-Vi JKQZ¦Ò®”=$??_®IÆ'Z ×mýúõrjjªüâ‹/Z¦]¸pA3fŒœ––&ÇÇÇ˃–Oœ8!Þûæ›oäÞ½{ˉ‰‰rJJŠüÄOÈååå2¨Ý°k&çRLÆšœ 79*!ÂzÉ»ï¾K$½^o5}ݺu´k×.š={6eggÓáÇI9¸ˆ÷¾üòKêÙ³§˜>wî\úôÓOÅréV (‘””ˆI“&M²š®DTÑÌÜsÏ=´hÑ"ñüí·ß¶š·G´wï^ì 8„ f&Nœ(FcµómÞ¼™ºtéb5ï-µvíZRRjZ°`6&aC½gwñâÅ´fÍ‘"›6l-\¸P<>|¸U4À¨ak˜ÿûß4räHZ¾|95mÚÔ2}êÔ©´mÛ6úüóÏiÓ¦Môè£bcШaÍØ`0ˆŽš­[·Š{ kÕ«WÓ}÷Ý'¤ìÛ·¯Õ{™™™¢uèÐ~ÿýwÑù@HÕ°,ë† ‚b]¿ûî;2d½üòËÔ AÚ½{·˜Þ¼yszá…(++‹222èÈ‘#4gÎêÕ«öFZ5,GÖ`#fqq±åTŽî|:þ<=üðÃtîÜ9JMMõë´iÓ°7§ˆQü¨4½ª…›Z¤Ò’ŒFãNO^PP@ñññ>[Y>uRTTd5-&&FÔƒ^7¼E§ÓµWò”Vª´rS3¨šTN;wviH‰5€ùÔGNNŽEVœH‰5šû¤Ä)1 f¥Æ& ,a €° „Ônay˜2ßhLkhqp…½Z'**ŠJJJH–eMýÓ| ‰ŽŽÆ· ¬ÕÂÃÂ(..[Ô°@X„@X ,@«ø´—¸°°[øâŒI˜ÖV€” €° @ðS£c‰ùª­þç x¬3Ö˪E1Ìôj¤Ä*8²j1Šñ:i-ê€ €° „@X„ ,Âaa4q)Íøñãݚƌ?g~DX"¬·QQ Q5//ÚµkG  ¹sçŠiT^^n™gìØ±4sæLñüСCôÌ3ÏК5k¨´´”,X@·ß~;öH }aC1cÆÐùóç­fY—,YB©©©bZff¦xÌÏϧk¯½–:tè@Ë–-£zõêQJJ 6"íV+¬\¹’Ö­[G·Ýv›eÚ©S§ÄãàÁƒÅmrÔÌ›7êÔ©C_|ñéõzì…5¬?SáÇ{ŒæÌ™Cááá–é§OŸ 6”Å=|ø°˜Ær7nܘzöìIiiitË-·ÐñãDZ1Aí¨aÉèÑ£EÝÚ¿Zºt©ez=hÕªU"æxòäÉ4dÈÚ¾};=z”Ëô7Þ ‰'RBB‚¨q§OŸ.æ»ùæ›éÍ7ߤýë_Bxókœ!I•y7½ª…›Z¤Ò’ŒFãNO^PP@ñññ>[ÙI“&QQQ‘Õ´˜˜¡½nx‹N§k¯<äq¥´rS3¨šT§u:wîìÒ4ks¯kNNŽEVuO,H‰5”û¤Ä)1 f¥Æ& ,a €° „Ônay˜2ß:Ekhqp…½Z‡oïYRR"îU¤%ø@o@X«…‡…‰[¢PÃaa€°âÓ^âÂÂBlQà‹3&. Ûnq©åùÒ›"ª™3ß ŽÈó~<RbPà ,,ÔìOu+(-¬”"õÚü_jèdE¤r¸ÂïYkeMˆ‹h‰h¾¼®°„N!,@Jl#«ÖdG)e´õ@ „@X€ór›@ûhí;¡JåO%CXQƒr{kQ`«áÂ"òBØ Õ¡¨¸¦Í¬ò}°¬æG ¬vnåTTXHååed4iQuz=…‡GPL\………k&ÒBX ÉZR\DÅ…”V¯.ÅE'Q˜ÞI'¾ û·»˜T͉<ûû’—+ám* F*(*¦cgò(*6ž¢¢c4!-„ÕH\Y ¨eÃtÒëp¶-à‘L9X&ÆÇR|L4í;’Kaáᚈ´Ø34Y¹]ÌÏ‘Õ-Yý)ËÕLk‰¸ ’ëŠïGýAØZYM/DÍ壪¾­n>‘¶–%¾Ru JZ¤Ä–ViF£Qü@Wx˜¾ÆRÏêNf'«kGùR1)û©¦ $ü½ð÷Ãß“Ž3 ¦ÄšvüøñnÍ?cÆ ‡Ÿ3¿ ©0©RbYÙ¼=fKn¯¹Õ‰TENm FÉÅ÷cú®$õ1ËÏò"%”¬ê–*£¬ÏëM¤¾>Ã(¨r•-þN5a½ŠŒª·}'QQÑÊeŠ4e´¥¢N+%ZÖG¦6 Õ…7REWß|ñnG¯„;)@Ÿõn»^:¸r "¬øë"Ñûœ¶Gdó`©g}¶s¹ÙÙäM”%dm.al¸¨a5QíÑ¿!ѼD5‹¯úþ±"¢¶I´ë,Q£8¢IWÉÔºQl‰^ï¢<¦Èôûy™:Öh„pa‡×hq©…U²”1ˆ°ÁO÷T™z¥MÙ.U Tüzìf‰¢”tyÞµ2]¬¼þQ…Q¦+ëm;S9VõÇÓ¨ ƒ¡ÿ¡ŠÀ~®cC¢† x‡„\5ÿW¢‡•HÛðÒ{.í;O4³›L bˆšÇË´èw¢yD]“eÚx¢r¾ŸN×ìÛ¥a„ª™ hÅÒÅtÓÀÁ”š–^»ÃkS`M  ¤E=ÙN¦×‘èšôK_îÉâÊÇ[¿“,u¢Qùòyz×T¢÷•éH!Ñùþßç×|ó5?vT<ˆˆ º tÙåWRã¦ÍüïNœçÑÂEAQÚ#°Á` ììlÚºu«&/.¾»9Qö¢·÷H¤“.‰Ì|”%S|Ø¥s¯‰$Òdns÷Kvk_xP?3“:]ÝJËJéàý´aíP§Ž"p¤ÿ< õ‘µ5²¬6lÐìú±¤/t”éîµ’H“™–uˆ.KT"é^‰l%‹NƒýJŠÜ/“H¯ÌßA©cÿ«¹;Så€8ÀÚ’’ÄüÉÉ)ôÇoèÌ©SŠÈ ­æ;ö×Úõóvºpþéuz…»vïI?mùŸxïÖ¡wY¢;wl£½»¡¡wßWå6·R»,¢¬TË…uµ†åȪuÚ&ݧDÚù¿]’ø­î2½ü³DOl’È |ßW$²°•‚vQDýA©c»¤øo‡•TO$S}V\RB¿íß+&'Ö«g5£D•÷rnÞ²¥§g(Òž§õßK P›¶íhÿ¯{èÄñcT¿A¦˜ÿߣ¦Í[XÉ*¹h¤TÃ(DXö?ØIƒcbbºNËo¨Ÿ¾RVÚ¥×éJZüfwÙfHbe?ƽ-”Tº©RÓ÷b§“<ŸíÈáC´hÞœÊmKÝzö¢”Ô4*,,°š/=£¾hLBb"ÅÆÅQÁ… Ô¸IS1ý·ýû„°§NæRa~>µ¼¾Mõ«QC_ØÎ;WI‰yZ­Fòn§MW¢äÕ]ºSdTE›~ö)ìß»GHɽÇF£Aô'˜‡S¶n{m\÷=•‹èš”œLõê%»,+Ä Qa,srr,²š§Õ2G}²ó"ø6(æÖ‘$¹'ŽÓO›7QϬëDíÊ©îÒOZækÔ¸ E)³¬úƒ:tºÚg‘¢±°z½žn½õVÑBRDÉÏÒ›þ¦äd>ƒ¡B<§¢‹…˜MÍÑ]Òé¨U›¶´{×Ï"ò6SêWg²BÔZ ,ð^PW£·zþ™ ©eë6ô¿ëÅë&J”mÚ¬¹Õ<,ì®ÛEgŸÓu´^‰ ‹!l(ËWÝxÒ7÷wø‘¸øxzàá–×ݯÉÍÑß.+-j,®'u¶äó­‰èìsRÍ­›ùõÅ‹…TVV&ÎǦ¦¥Qší0Æjd•jzÃ@X*5¬§nؾ¿ï×=´wÏnJNI¡¬Þ}œÖ©¾Ê ,@4÷`¾NWw¥N]ººŸòJ¨Âùgy’ç7÷eÔ” ,©Ö×ëæ‹¨(AR‹¨é³?$ùz]qî†*~{A£<”a\ŒÁFÁ=ü~2h^ØRƒ$~â@kð:Wà˨a­8YITXB‘zmE>œ6D!¿Þ¦M–Ñ.þºõiÍÖ°º0:iTþ„Qƒ²¤Ä ðCJ œ”@­íg_N=3*Ù…åDG dš¿¯‚þsĈ/ÇÉ÷¨ÛìBØZΖ“Fzýç Š “h`½Ò#œþ*,£Ýy8 … 4i ʈö«üùºÝyFº½¹ž.KÒ)Ï T7‚hBÇ0…Ë• »ê‘Þý¥Bܪõ¥®aT'B÷V¾*™ß—Åû3vVž/k/Ñ?:„QûzE(3m?m¤ç~¬ 3%2ÝÒTO\¦Ónj¤­ß1Ю³2=ªLO‰–è×sFš´¥B9xTn›u%šØ)L¬Ûéb™Þû¥vf>¶èb!ìs"¥ú—ײQü6lE…Š‹Šº~ü C[TþÀm¥ÀDÓº‡SzŒD£7TPB$Ñ+Êë e2-Øgï÷n £çª g7—+bêhÖuá´õ”‘~8a¤ü2¾aºL³vWˆ1Âoö §íôôÿ¶U ÝDšïÇÜ7»”:¥èè-åý®i2ÙXNy¥•éú“W†Ñ?þW®D¢¹½Ã)ç”L|WFÝÒ*3#J&°ÇO™?|?+½^'îa¥“t•i±ÒÌé±³49&6Î?Âî¹;Òµ¥%ÅÃL„57¾M¨Q[AǤXZ\àÿõº¡¡ŽvÞ)nx~®T¦ Š|»Î)Mõ%²>¹±ò5ÃQ°¿ÍÂÊ—é‹?*ŸoÊ5ŠÈײn¥ˆ¼¬·w]ò£’zsÔUóÁƒ{í1£øììÃúýBåvÚ¬,¯—©¾î©§¤(‰þ•S&æ?pÞ@w(—~ʺìÉóϘ+2b)33NÜPÇÂê*…•Ü)1ð¾†Uƾ£‚nVvþû[ë)Çô³—1•;ß«J$3ÿìH¸âO~Ù¥ˆvªØ:ºU(^G˜~…¾«9¢²À±á)%²ˆ¾fx™,µúõùRÕ²”×á¦eeÄT^ÉóÝàKƒí>=¦ö]ßak9Ü;ÌQíý=,­NÔ¬ã(§Ü¢J™&ÿTN»Ï^ËàBÊ2½›N+”èûweY”¨øš"~B¤g똫T \Cßõß2qP°”`µpx)Îà 1m{Ý©£¬ú:!ìÆãFÞ&Œ2ã$ŠRí””¶Y]çQ#1·b%Í厩~*—é)k”è+ÓÈvaŠô±‰.K’”4‚Z w­W$åÞXŽ’¶pt5Ò‹]Ãè³¾bzR¤sa9j³üƒšèheÿÒ\Oíó<òò^[NñЍï]N oˆ •IX-Ü{%©²Ræ¦WµpSã$&Éh4îôdáÜ™RRR¢¹KËø_柖°ý)Ä€v:;F¤âzX²¬ÃaÊÌ̬ÑN'e™í•‡<¥q5_njU“kteYý-†;’¸¸8ì‰)±:ªhMV†× ” €°pü9B@X€ŸÁH' ±è¦ª½Ö½’ësU{ƒrɥؑ$‡ŸöÏÏô9ààoU3#[۱鹖|-žG ”Ê,©guø»9öÞ”«.Ãˇ@åakÏÑà’{>‹rUÝl¼”lH’ä|Ud•«µM"™ñsxˆ´VÛŠÕ̾æì´Û¡I¶ž¯Ú·~Óõ{¶¿PÉÙÖ ±ß—…°þª•£±'ƒ5<Þ!y{¤¨’뺲tÕÝÖõôØ™ìŽÃ»ä‡ïÂÖòÖ·ÑÙƒÖ¡§²‹â:›Ç^z,¹ôŸ9“:TÏ”á´Nˆ§ÔÖ5¬ìÝAA¶]¨\} Û±^ö.ÈyU(ŸÖ†°µJZU$·×ȶU/îÑ¿ŽRÓ&MhëÖ­Nä“«IÛe‡¯Ý5Ø TŒzyÛ\_êðáèY³¦¢µnÝŠ®ÍÊ¢)S¦ÐÙ³y®EPç!Øò2?ÿ}¼`¾G5¥K¢z"«äFÓš¨aÇïÖü3fÌpø9ó{A%_,Ä9½zõ¢‰'QAA>í?p€f½÷}÷í·ôÅŠ”’œb½L©šzT®¾Æ]½z5-X°€6ÜNùj[»:ï€òú«œÁ6¨rYß'¢kçÎéÞ{î¡eË–Ó… è=E\Æ`0ÐÛo¿MYY½èªöWÒèÑOй¼<»+yþüyú»ríØ±#uïÖ^{u:U*è³Ï>£I'ÒÁƒ©IãFÔçúÞ–ùÇG®ºŠºvíBÓ§¿âÒÏ“z+«Æ‚fðEXo£b £êUÊÎVXXH»wïë3|q|tt4íØ±C¼ï•´~Þ³ÒÓÓèºë®£6n¯?üp.Í™ó½öÚk”‘QŸž}öúÇ?ž¦¹Ϋš))ò?~œæ}ø!å;GãÆŽ¥º tÿý÷ÓeûlذV®ZEaúÊÝŽßç;mÌûè#qxòÉ')A™ÄÈ‘Öÿ¼ˆìé† öÖpä˜:ujÍ–µ~ å©©itNŽY¼x1 ½ãêÛ÷&ºâŠ+häÈQôý÷ß‹›j«ÉÍ=AëÖ­£§ž~š®êÐA‰¢×SÿèËìlŠŽŠVfÑâÆ‰‰‰_§8q‚Ö®]«ÈÿêÀó÷éC¤UŠÐ¾NÃ¥hí¬aµÂÝwß­¤sÓé%¥lÛ¶m•÷>L#FŒ -[¶P‹-èwÞ;rr2-Y²„n¼ñFÚ³g5jÔÈñ®éÇh{ôèQJII”#梅 i‰’ÖšSdæÄ‰ãué¶…Ç”ùÌQÓ<ˆ ¼¼œêÔ­k÷o?V9?GUõüuy~ËÿZ{#©¦… vX¸¢¢"%úŒ¤õë×[{&Ëtë­· 9¢|òÉ'4dÈÚ·ouSê¼JêÉŸç÷úõëØ|XáСÃÊÿ°Ž|ðAñ:##CD¿feBƒúõ)÷äIËç2ÒÓÅã´iÓ¨½ª Ðët–(Î7œ«\„Lé•ó¿òÊ+JÙÐÁ²ÜÊù½C a›C¢† 4u8j^vÙe4oÞ<º÷Þ{-ïíÚµ‹~þùgZ¾|95mÚTÌóÖ[oÑæÍ›©wïÞôõ×_‹ùXØj÷*ïdæÅЯ¿þJgÏžQ~Μ9âà2jÔcâ}ÎÞÿ}ºòÊ+©M›6t!?ŸþüóO:t¨Õ*Õ¯ß@ü?üùgž}–R•}"7Wœßmذ!¥¥¥Ò‘#Ghû¶m¢¾¿ì²vt½’6ðÁ4aÂJIM¥\%MæÓÁ M™†¥çXªfHµGVDX·À|饗è™gž±Š”œ^2¼Ã«çÎÞa¹öåxïÞ½äéHuoöÁM›6Ñ@¥vŒŒŒ¢rz?ê±Ç(.6V¼ÿðÈ[zòA†ÿNY d·§–¼Ó§¿JÏ(u)ê+Qx̘1âmœk_^~Ë–-éßÊjæÌ™"Âr{æÌªß URd—ÿ'g²J¡çnÞ—˜ÞññÎ ËY kŽÀ¼£ggg‹‘5¼ÚE¦_|ó$B»ºnÎà^àÑ£GÓ#<"R¾®]» 9çÏŸOÛ”hÂëÉóüôÓO¢Ô|Ob®9Ò¤¥¥Ñ€D$ÎÉÙæWY=J0%;c”mf³ mΫJγJ’õXGÑU’ªYKÉç²îß¿ßr_bnü½êLé»úÞÄÞàÊ}‰ƒª—˜eåSÅÅÅYµœâ-\¸ÐR¯qçR§NDô=©Ô|IÖ¬Y#¾`î5½æškhÙ²e"Úºü!$çi©W²VwM¬;ò…`d ʶr̪¶áSÜóùúë¯[$^±b…˜Æ©$ èÒ¥‹H ®ûþóŸÿa57h½Ú(VÕ`É I$W’²†v «”ØU&MšT%²ÆÄÄxtÔ×ëæ êŸé07Nó¹q}ظqã Õ Y%›Ká$Ç—ÆY§•N.‘«f9Ž#¸ç˜SbΊÌ?Ó”Ø <|ΕiÀAUÍé`ÉÇ‘•ª^!I5»ÊàÁƒÅcNNŽEVó´ Nq4E½ûLU ýó¿J¡ö]«°Ü;ǃ¸û=>R ËíªØ’;{ ÄF„.©mïïÄ#®eýãa^Éâ Uõ©€™; m¿—@T0ø_#„‡‡ûîT•mMêFóXTeõ$ºú[þ^øûÑ6@L½còsþ­Ú¼¼<Ëàz¯DõãÎ-¹ÐÌð÷‘››K±±±vl¾ê!FJDs‹ˆˆÒò•=|Ÿ®ÒÊQ½6ÂW]¼xQÈʧÿøûA [ËkWÛ×|çs{|'ŵ“yÄ”ù¼­=ðãÔÞ×éê̇¿îSàñÕ´´ý!¬wwEEöîÀèí|;”[""Fh "¨\ @áÓË¿“ °/Θ„im…H‰€° €°@X„@X , ,  aqe4þEF„ D#,"*ޏ:oȪ卿¦Ä2„@ÂÊî¤Ä– †‹ØŽÔF£±ÈYtu%Âò½”Ÿ;wn 6)5G^^ÞfvÍäœKV¶ÓøÃÅï½÷ÞÛJ”-ÀfÀ÷°[ì»fGX+qõª[iJš¼nݺ|N·ñòË/OŠŠJS>Í €×iðųgÏn|ýõן2eÊ^e—žU«"¯dÖ,§ÎÔô¦fjáJ‹RZ4á^Æø’ Sd-1¥Ä¦¦–Ö"n˜“úÕ ’Ù¼@½ªél¢1À>öÜR·Šj"«…0 6ªÒdƒÍtóÓ©¢²ZVˆ €µO¶nÙºd°Qd§Ó)ÌÉ‚mjYEW €c¯daÕâÕ®¶ÂÊ*ÑÔ3m¦Ùé0î§ÅŽÄu”ËöRb³¸ê6QWg#)„À=am³V{Ïe;ºJJ,ÙÌ(©¦™Ÿí p/E–4²'muÖ‘¼ä@Vˆ €ëµ¬=y©:Yí ë(-¶­sm儬¸'­#)åjæ'ÉÉK.NøFbGÓFX—>¨1aòÿÇãu¨?ÙÈIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/scan.png000664 000000 000000 00000060770 13703317554 026262 0ustar00rootroot000000 000000 ‰PNG  IHDR—B‰tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp Ù+Ì^hIDATxÚìÝ œ$w]7þowOÏ=³;{ÉæÎ†H!Äp*—\r(<¨ "`äññùËõQò""ä}ÔAD®JH@ IÈ}ífï¹û|¦jv6½³Ý53;“ÙÙ÷;–UÝ]U]U3ìÖë³ßß·r¹\.æhΰ¤Ôç²rÛ ŸçfùG·–¡R«)7Ãr.c}–Žz“×¹iïO½×lý¦R.cÞê³éËyõ&ËóÙ„K‡H­B£VSãº,MÓC£éÓÔg¹h"5HY¡Q¾ÅrL[`i™%S­År³0)³©10J¦ž‰iÅÄÔ¹ÿ5GŸ$0›˜öNLà ïMiY4½—QcxT˜˜V¿å-oyôë_ÿú7 \X(z\k€£OµZÞ½{÷w®¸âŠ÷¼óïüáÄ[;÷4"5†Gér!—ËM½hVu”„G=o~ó›Ï{ÛÛÞö‰ÞÞÞ3òù|»K ptJ²îîî“/¹ä’gW«Õÿæ7¿¹}âíJÖ6¹&ÒTp45_¿mÛ¶®Y³æÉ.1À±cÇŽ_Y¿~ýk'·MLÕ˜¬Bššè‹4½—Q³ ©3¶æ’[V­ZuÑĬ+*&j̆h Z cËëypìÉçóÝqp4=JµÅ¡©ÒAá‘K ÀÑhll,FGGcdd$:;;]`V’?7z{{£­­-À2Ò˜5>‘-͌ڦ½Ñ¬ Ž*Û·ob±+W®LJr]`N*•J Ç]wÝ[¶lqAX.šUx[[“  êõºËÀQ!©l4}([Îõàh’ ?I*æ«»»; ¥`™hÖâ耙*+@ªÕjé¿Ö$ó¹Èçóé_ÔÉGò÷ÏêÕ«]`Þ’{ÒäÏ”€å 3šÞ©ÙF‡uóþá{WF±}nCßÊ¥\üâÀ}Ñßߟ?HþÒÎåA0{fþL€ÃÒ, :è)lÑìƒùH*æ%’m^}å–XÕµ%žî§=öeé_ÚB$X^®½öÚ¸ýöÛÓå“N:)Î;ï<`qÍ8„ísm¢=Ÿ¦Û£ß»(î_µ->4ô[ñ¯»"þø¿+ûWÖË@òô«—¼ä%188OxÂÒ÷þöoÿ6N9å”xÇ;Þ‘67^Ê®¼òÊøò—¿Ÿüä'ý0!(3H‹^úSÞÓ±÷ä(ß¿9î>ãºøµ¿Úï{Åbݪ B$8ƽõ­o“O>9þèþèÀßûIeóïýÞï¥ÁÒç>÷¹Yí窫®Š÷½ï}qçw¦OÓ:ÿüóãío»{ 8²*‰“ªcfö—ù—iO¾¾ð…‡|öñ±fÍšxÁ ^0߯ÉÌ€–Ü?ãU“ÆÛõzT‡Û¢ü½ó¢~îµñÖÏþl\ñª«=BŽaÉ ä­·ÞŸùÌg z’å$Pú¹Ÿû¹t™†³íܹ3Þô¦7¥7XÉ|ûöíqï½÷ àþ,šÍû…:÷g>ó™ñÚ×¾6]n ‘’ðè«_ýj|ðƒ|ØÏ÷ˆHO_÷©øÒö—6ýì'×ÿ ¶œ|jÛ'_FÜ·ò»ñëÿ!žzî‹¢P(ø_ƒî¸ãŽxä#Ù4èIÞK†´%}‘fºY»ï¾û¢\.Ç«_ýê¦OäûÄ'>‘1Kú‘„R—_~y:4î†nˆ?û³?‹›nº)ýG«dû—¾tò~å‚ .ˆ·½íméÍÙ¾}ûâk_ûZ\}õÕñÞ÷¾7n»í¶X·n]ºmb||< ®¾õ­o¥ßÿ†7¼!žö´§ùÀ1(+ ZÈŽ›6mJïCC¤Æðh1žzDþ)îô¾—ÄãWýQäâÐ0h͹Ûâú|'ÆFG¢Z­Fy¨=Fn=.>sõÿŸÞ dÞgœ~z¬_¿>wã7ôYr“uÅW¤¡ÎŸþéŸÆW¾ò•4PJtttÄ¥—^šö1zÕ«^•~¾cÇŽÛþáþa¼üå/O«¡xàxýë_yÌcâø@¼ò•¯Œã?>]/ ”¶lÙ’îç©O}j<•J%?`^¦B¤}ìcñÆ7¾qQãÄÂvRϳceñôøÂ¶¤ôªöÐû—$ÿ¿w_{kœpêé{£÷ÄÎ3~”6ÖŽM'žxb|èCJ{M¯BJÞ»þúëãÏxÆŒûI‚ |ä#iEÐË^ö²8묳â-oyKlݺ5>ÿùϧ¡ÎTEÐsžóœôæë¯xEœzê©é”ÞœtR %ÕLIODR4U2ž„N«V­J+’§Åž{î¹¾?©:ú­ßú­ôýdÛ~ô£qÿý÷Ç 'œà‡ À²´XC½f[ñóìg?;þàþ਼–IˆtÉ%—ħ?ýéxÝë^·háQâˆ=…íªoˆçnúrœ0øô¸sä‹}¶ù1·}uOZ”ôpªíkŸ¸q¬¤¯=€…ü;‹¥usÙßߟ6ÌnÖD{ãÆ³¾1Ln®’(éô®w½+-÷þ¾۶m‹›o¾9 É?NM sKª‘’ª¡»îº+†–˜¼™ôˆG<âÀr²ßä;’hºµk×x¿X,¦sUÔG÷Ÿ)þ\˜Ÿk®¹fQîáfó= }Ï8Ó~úïdØZržÉ?P%÷G½½½ Ñ<{VŽXÒÝ£ÿ?ú?±¾ã‚C¤É‹û£ˆ|®æq° $ÿš– ={ñ‹_œöCJ|ûÛßNƒ¥ /¼0¾÷½ïÅcûØYï/éMô»¿û»ñ”§<%í±” mKª‹^óš×X'鯸wïÞt½¤RRe”KO|âÚWcUTRY”T%7…ÓC¤f¡À|%áQÒ‡ñÏÿüÏÓÊ£äõÔ=Íb„H‹ ÏŒz<ô/yßÜyyô·xÈz÷þgDwo_Töÿ«_[÷èÄM[›§§À1.ifôJÊØ“À'‘±- Î8ãŒCçî¾ûîøÔ§>•yœ—]vYÚK)i¢ý¤'=)î¼óδ°¼<îq[”ïIú5†G‰¤:; ‘’JëÎÎÎôžéa½O[¬‹zÞÊ7ÇE«ß™.×ë“Eƒ•;Ò©ÑíWEüôkùØ|ÂÆ¨VªÉ¶èÚ°+VunIo*€c_M®–4¦N£¤ïPR¶¼n&¹J†¨ýõ_ÿuZ ”ô>zßûÞÝÝÝñ3?ó3ñ;¿ó;i¤¤‚(¾–Üt%ÃÎ~ý×=½)K>{Ö³žuеéŽ;î¸th\²ß$lJ†³½ç=ïñƒ€&f²ÌeøÙR±˜Ç|ñŧ½›¦÷î»cóÀéqé#Ÿ+<ÒákséƒÀü-ÚSؾ¹óé4“Je²ïQ{o%Ž¿äþX{|[¼ý¾˜¤až€À¢s Gð)l­t ŒÆŠ†bÃ9{bóÀÖøÃ—ü[¬ì_¥6³222â" fttô~°-¹é¬ÞÇÇóóŽx깿”6Âô8\f«··7}»/ó•üY’ü™·rßd›ýòíé£v“Çî&û0I¿¼¡¡¡X¹r¥‹ÌK¹\Öƒö{X¤ä1¹¯Ú°3jµÚœ¶K£d[ÃÕ8\IµÀ]wÝ•þ]’,û;˜«¤ò( î¾ûî8餓\ˆ‡©‰vR5ÔÓÓsØ¥Q!óqüñǧ}K’Ço§Ã¡f#ù³# Ÿ“Ê£O<Ñ})ì§AǤ®®®t˜ ³ 9uýd I€@&™–§°pìP@¦YU ºRËÔ¬¤5kÖ¸RË”!ld I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@&™Hd I€@¦6—˜«z½î"Ì —˹À1C€Ì(+0&Mš5^ap´ ™¦D¯§–—{ˆ”DS×`*,j ’Ï„HÀÑL€´Ô,úWcMßq‘ÏçIÀ’’ËMÞ}$S¡a*îŸ:&¦U7Š×¹T°¼4GIÕQ2•Ëå¨T*ñ‰Ý«]  ÷›Ïšù&¬k$ ëîI§d9Ñ–/Æ“ù²xÞy¿›NMC¢Æ0izh$DÂÄýÆÙ³]ÓøÄTÞ?U¦zÞe²LU¼4V!±×u´;*wžã×<)J?xBT·•j%þõ‡WÆo^yv¼ë ¯ˆûvÿ4 î¦*¿’©±7ÕÔÏàá&@f¥±"‰…UÛ7埜ã×\Õû·D­V«nüL¼þ£çÆg¾ó?c¼ùí·Ç>v^üàί‘€#F€°ÄÔÇ;£tÓÙ1~Ý…Qî‹{wÝð¹gÆ•Wý·(•ÇIÍB$Aðp ,°Õ}ÝÑßÝÝÅ(ò‡]‘Tݽ*Æ®}b”oÛQÏÅ?^{E¼ù³O‰öÜžHYAÀB ,°Îö¶èëêˆÞ®X·²76¯îÕý=Ñ;ñ^! ”&Ö™õTÏEé®Sbô?/ŠúXWÜ|ÿ5qùÇ/Œkoûâ!͵…HÀÃE€°Àvì޽Ãc1Ù²±¶~HÀ|X}ŽS¥V]C£±cßHÚt;é‘´¶¯;Ï´myÛÆ»ùËõxß—^ß¿ã_›6ÔNKˆ&ÀÛ¼fE¬[Ù+º;££­¹YV$—+ñà¾áôémÉȳU½ÑÛQœq»Ò]ÇÇøí'GµV‰wñU±mï‡üõËc¼ã4V*Ç»cpd,¿V÷uÅŠžŽÈªDÚ;RŠZ­Ýí…(fT-%ÿ7rãÖôH>÷Ýÿì½]Cm`^HÀQíüUoŠ?zìñÌMˆÚ©Dš¡×õC=‹’Ê¢¡±Ø¹o$ ˆz:б²§s2jÖ©ZÁ±rõv&Î6׺ÒοoC”*cñéï¼ã ðHCm`®HÀQíÌU?“ÎÏ]ýœ¨”×.‘£ªÏi/ÅŽ½ÃQ­Ö¢«½-ú:“h¨éºã•jŒ–«“OvëÈgîwôæS"jùøÖO>÷ï¹U$à° €£Z¡0†´åºbK÷ –Ä1=pÏ]16::ëJ¤d/WcûÞÉ'µµòÑßÝÑrÝá±J”+ÕHF±󭫪£1våZüã÷ßsà‰lÓ‡² ”€™€cÆk_{ÇVñã¸ûö[ãG×þGÜðý«ãÞ;o‹JyHCã•4ìé*FË*¤¤RR…TȵÞ×è=ëÒïýέÿ¥ÊxÓàH´"@Žig¯zfüÆÖŽZéÒØ7Þ·(CÚ.úˆ‹;bã"3HJB¤î¹3s_I8”ôDJvÓ^h¾³Ru²§Q[®Ör?Õᮨ vÇhi(îØñƒCª²€cÞ†®­ñÛgýs<¢ç±kxÍ¢|g÷ꈳ_qák&–Wµ^/ΖIY•H£¥É°§£Ð¼ ©\‹´Z)ŸÖk½ŸÒŽ•éw6ëƒ$D²€cD}â¿Ö8m¹öxþ oglzìÞ¸h}‘VqáoD¬:¹õ:wß~kú¤¶VʵzTªçV¯E‹"¤¨Ô&Ã¥BFUiÇ@:ÿÑ=ßs"@Ž £õíñÙ±uñÍÒ/ÆmÕG%†š®wþšÅ/l¹2öŽlX´'´»"Î{Uë©R.ÅöûïɬBjl–Ýìó©)µŒ ¤þ$g‹›îýN”*cM+J@3$à˜ñàý;ã†ŸŠ¯íyy|vds\]~]ì«ßrÈz\ùôxúÆwÇàXÿ¢[nâ®ëœ_Œèj1œ- Êårj5›JÕH‡¥Q“Ï+õ\úy®^m¹j¹-*CÝQ®ŽÇö}·ëÌš 8fÔkåш‘=»¶í‹ëv¾?þa謸¦üÆ(Õ÷´îùk^gõýö¢>-©D:ûEÑ´±v2„mç¶ûÒ§©5›¦ž¸SÃÔš}^ß_…T¯µÜOe¨+ý¾û÷ÞÚ´J  pLJ2”ñሽ–ãû;ßÿ4öÈØQ»æ u~~Ëÿíõ‹õ¸’žHÎjþÙÞÝ;[V%SÚ,;©2jQ…TÛ ¥´[ì£Y€0pl«G”†#¶m»'¾0tIÜUý?>ÊMÜ =mã[c¬Ò±¨‡tÚÓ¢iÒØÈp”ÆF[V%HSÃÔš}> EfRgú]÷í¹Eõ0k$à‘ýTµZ5bøê¾—Ƶ¯xkÿSbUágõH»WGôojþYVR5©-J*ŒêÍ+Œ’!lIÀ}*ÓÒ¶½wh  Ìš 8&äf³R=bp÷x|mðc¼¾óÀÛ—lx}Të‹{[´îÍßÊèƒ4ÕkÍ+êû¦¨µ®@ª•ÚÒï) €Y ËK=b×®mñýÒ?ðÖ)½—D¾¶qQcàÄæïg=‰­±ÏQ´ês4UUÔjûòäíßXiHxÌš Xv’ïþd”cßþ¢¶ØÐ¹¸Í´;û›¿_.·¬šìs4Ù©Y•ÑŠ¢¬íË…ô{FKƒé|zx$Lš ËÒèèpü´ü7^oì}Ô¢~G_ó÷+¥*jµÉalM?Ïíÿ¼u¤Ze2@š–ÐH˜‰ X–’•Ý<òé¯{ÛW/¡ƒ«gôAÊ®2šMÒÁ_%4fÖædžܜ·xp覈“ËùžE=ÚñÁ7gÅbdE:õ¤ú¨^‹ZóO÷B¹–ûȫ鼻½Ï¯ 0k$`Ù+íLû £?J±kq¿{_‹›³bû!UBÒþGõýý¦ÇDõÉám‘Ë·ÜG¾PIç]$`HÀ²U«Õc¬¶#Šùþ©>°¨ß½ûŽ7g3T Em²‚( ‰šixB[3¹¶Éí;Û{ý³&@–­$d)äºÒååkõ»·ßØüýήžÖH FùfëT«“CØr¹ÖHÅÉ $CØ€¹ ËVµVŒöèZ”ãþÑ«í{GvF컯ùg½+ZVÕk“Q.Ÿo¾N½:åZ?'¥Ð;–Î×õŸà˜5°luåN‹¶\OÜSý|Œ,Ú÷Þò¯Í ŽÎ®(¶·îT/—Ò ¤|[>rMÖ©W+i“í\ò_‹}÷H›Vž–Îs¹œ_`F$`IªG.FËQª´G©ZŒj­¹\= ùjtÆ£»8mûBOš{r|ߣÓùÍcWF,ÒÓì÷ÞñÀ Í?˪>JT+¥4 ÊÚš®W«VÒð©e…Ò„bßd€´¡ÿ”áQ2Ÿšš KJ­ž½c}1<>§ö][V=&6tž½Å5Q©ÇpewÜ6ôݸiï×£?™×wåo»«ÿ·îýü¢œ[y4âºÏFÓ°*ŸÏÇÊÕëZYõ¤ÿQ¥œö7Ê勇®W¯§Hiÿ£\[ËýLHëûNNçÓC#!ÐŒ X2Æ*±oô¤¸xÝkã ë^=m«š®wîêŸzÔ⚟‹ÎüêÃþ¾m£×Æ—÷ý|”Æþs«×"~ðɈÑ]Í?X»!òmm-ŸŸV-¦Ã× í]MשWKûû#µÞG¾Xbßh ±¦÷„ƒ*²€%a¸ÔýùgÅkÏzô×̸~.òqþšÍë;«å‰ïÝõðŸ[Ry”„G»nkþy¡­+×lÈFWM¢|±£ézµýý‘ ÅÖÕG]ëÓ‘~[7]mùöƒ†­ ‘€,$àˆ¯tÄæöWÄ/ò¿#…cêÜ’žGɰµÑŒ jíæ-‘ËçZW•Ç'¦Rä m‘k+6]¯Z›l¾ÝâóDçú}éü¬ÍÔ÷HˆÌD€QIæÑ{jüÒÉï=¦Â£‘“O[KfgT­Z·)zûVf®SL«‹:º»›Wío®+#—+dT MH[×]tH€$<²€#j¼Ò/:ñ#Ÿ+Îk?¹X:È| bß}1ã“Ý’§® ¬Ûвb(Q-E¥4¹B! ÍûUÆGÒ€©­³½å¾Š}ãѾb,:‹=±eàQ‚#`NHÀµ¡ó©Ó™óÞO%†—Ì9í»wæuzûbݦ²C¦z=Æ÷¤áPWï@Óuëµj2%O_+´u¶Ü_ß “cè.8õ9QÈÓ§¾©BfK€Q[W>eAö3\»÷¨9çuÓ§®%²ªÆ‡÷FµR޶öÎ(tt6]·<6”6×nëèŽznrÍô4 ]xÒó„E!@pD­êܼ ûy ò%®…¶¶X³áøèé_9ãð¶òØpŒ í\.½+[VUÆFÓ'«:º[î³síp{Çcußæ8mÍipÔ¬)!Lš GT9œ÷>ª1׽ɞcÖ¬X½.ú'¦d¹>Cz”JÔg¨<ªU«1´k[úTµŽžþÉ¡iM¶©–Ç£<6¹|! }-÷[ì-Eÿ‰»£-_Œ'žüÒÕG­*š GÔ-ß‹ó{ÿ0ºsÇÖö;j×Ä÷÷üIÔªKçœV­ßݽ+¢­½½áÝúŒÛ%áÑà΢Z.G{WOtõ4ß®^ÒО´÷Q{w_ä2z­~䶈\=.9ã%±ªgóA’HÀlå]àH‹¯½$ª1>çmï©þs|qø²ZRçÔ7°6 Åö´*h¶Sy|<ön¿'*¥ñhë茞•k[®;>4Ù\;_ìˆB{WËõ ]åè?yWÚGéixíŒÁ‘ hE€Yõˆ;v|;¾4vi ×ïšÕ&IÏ£VþGüÛàscïŽá¨×–àIÍaœ Êå(vvGߪõicìfëVÆGÒõë+tô®ÈÜïÚÇܹ|=žpú bMÏ–48* M‡°d1„ 8⪥ˆ;¼:þ~`kœÞñê8©ð’X›|äþ­«c±«öý¸³ú÷q[å±w𚹧Б0ÛcJ† ìÝ#ûv§¯»ú¢w`Íä`´&û¨UÊ1:±~²]²nä -¿«{ýp¬8yw´·uųy¹ð˜°$TJ{¶ÅuÝïºÞíííѓۅ\GTëc1T»3ÊåJTÆ’§Å¬:j4s‚T‰Á]ÛÓ¡h¹|>úW¯ŽîÞ–ÛÖª•Þ½}²¹vïŠ(´w´\7©:ÚpádSñç=öòXÕ½ùðhj~`AA€,IŸáÉi$Wн…[ú¨º4«šžFÆq–F‡cxï®(¤¯;ºz¢oõú(´[n—„Fû¶§!R{wïÄÔŸù«ÏÜ+ÆcóªÓâgN}ÕðHp¸HÀ’”6‚®µGЫ$øÚ#ƒ{Ó&Ù‰$0ê_½.:{úšnÓ¸íPUÊQìê‰Î¾ÈªpêZ3kÏÙ–.ÿÒïŒb¡# Žš…G³%@X`åR)*åñ(¦CÕÊã£Ý|Û£wåšèêíOÆeV%ÃÛ†w=µj5Š=ÑÝ¿:sýB{5Ž»ôîtÛ³ÎùÍ8uõ£¬I˜ÌD€°À¶ÝyËA¯“À& ŒºûVF{WwÃ'­Ó d¨ÛÈž¤av-:zú¢{Åê·ÙüÄ{¢Ø[ŠÓ6œÏ8ó·3Ã#€¹ ,°|[1ŠÅöhï쎎îžhïèJ«3õqšz2Ûøð¾ôuWÿ@úĵ™¶[îöèÛ2=+âÕ¿"Š…öC£ƾGª€¹ ,° 'œÚäÝ™;€'C݆wïH‡®å …è]µ.ŠIø4ö«±+Öžý`òmñšKߟ>u­­­-ô?‚ `ÍõiqI£ì´êhd(}]ììŽÞuiˆ4Ó¾Vž¼/6^ø@ºüêKþ,N_ó„Yõ=J’€Ù ,¸Ù%HI¥ÑèàžLS§$0êY¹&:º{gµŸ$<:î’ûÒå—^øqî¦g¨»×ŽÅ Oº7ÚûÊÑÓ±"~õâÿ6Ìn +¦7Ï>p,‚$à0XÚÚ£­81µ·G±½3In|^ŸÃcÚrùz¬{ôîØðØéòi΋W]øžèÚtHÕÑTxÔªêHx.À[¹nó‚ì§wãH÷„mÑ9PJ_?ëœßŒ§o}} íM{e ]ó!@X`s©0j¦ØS‰MçïˆU§íK_o85^ú¸wÄÉ;(,jVy¤ïðp ,ýåXήXuú¾t¸Z{[g<÷ÜËã‰'¾<Úòí‡T5ö<Ê IÀ| Ø\+zÖÅÚ3÷ÄÀiƒi«¤\.?íñ³güV¬êÚ| )öôÐhjÈZ²œ„DÂ#àá"@8:V”Ó!j«NL+Ò³|1.Þúâxòé¿+; ަHÓôª#áðp ,‚B{-ú6DßæÑ‰iä@cìÄê¾Íñ„S_ÿÂXѹá@UQÖÔ8d-™Â#àá"@X`½GÓ £Î¥èX99ï\YŠhÈtºÚ{ãq'=+Î?á¹±¥ÿœÈç ‚£¬iz¯£©y#á°ÐHÀœÕ#7ñ_Ý…hqmNÎ=‡¼Ÿ4ÄÞºñ‚8cÃããÔ5çÇúž­Qȵ5†GÓC¤éG†¬‹I€ÌhzH1^îˆÎ☠ÓÄX©#ÎØtN¬íÛWœk{NŒ5Ý'ÄŠŽMQ,t}¦W5 çÕF†¬‹M€ÌJcÅKoî©1XþrtÇU"í—T•;¢/ÿ´xí…|PP4}¹qÞ¬©ÙÔxý Y› È4N4† O[ñÎøÒîÞ¸}÷ÕQ­W\¤ Ép´“z.ˆ‹;ÞmÕ¶¦aQVxÔª·Q«áj?€E¸'Lï<’©Ð0÷OÓªZ­vKËK½>YY4qNÕj5*•J:•ËåtJ–“÷§ÖI¦Æmᨃ–›UÍM_w¦ÐHx<\&î=Ξ˜íš˜Æ'¦òþ©Ú0ÕU 3šÞ·'j5%¯§B¤c=8jv]¦æ‡5æ&8–") ,’`¨1ìH¤©Ï’ð(y/Yg¹HS× Ucìf!R«©q_SËÓ¿àH MMGSËOÿšzo* ™ H‡K›~íæµz`± €LSFcx4õ:¶6½úh¹„HÓ éS«'§µš7Û7ÀR!@f4=DšªNjV}´Ü¤©åÙ O›¾]«ý,5$`VC¤Æ°húеå MÍg Œ€£‰ h©±ÒÔëÆùr«:ʺN­®Q³uŽ6$ S«©ñ3áHv@äúG;0£éH«@‰p]€c’ ˜3áÀò’w È"@ “ €L$2 È$@ “ €L$2 È$@ “ €L$2 È$@ “ €L$2 È$@ “ €L$2 È$@ “ €L$2 È$@ “ €L$2µ¹°¼ —#¾soÄýC#e׃‡t#6öF\¸9¢§èzÀr&@€e, þþ'ZqÑqÝãA½^\.—ÎSËÉ|98ϤqóÎÉß‘ço"Àrf,cIåQ³~æðh*øHæË³5”$óÆå‡Ë|×ùOþN$¿ÉïHò»,_$X¦’(!¶vúêÙ­?ßd®ÆR l–óù'¿#ÉïJÝÿl`Ù À2–ô<ê*,Í@c®ë?ÜÍr>ÿ¤i¸$>€åL$X¦’¬ ±ÏL=z¦ÏgZ®=¦¯?Ýáì¿qy¾ÇëüséïÌ2iYL#@€e¬YØÐ*Ph¶mV`1×Àe.U9­ÖŸK`âüçv¼“3é,W$XÆ&‡/M.ÏT!3ß —ÙË\*df:¾…„œ4=W`ù À2·X9ÓMﻳÐCÀæ9ÿCÏ_,_$ 5ß •ù;¦&ÐsYßùÏÿü€åK€45ß!T‡3$«qy®=ó dœÿÌûSË— –±ù<•ëÐ&ˇ> ~¾13í£ÙwÍ6™ïSÉ–ãùË— –±¹3™oÀ2ß!bó­øqþ €Ç–¼KË[*d=~êóÆ"+lhõy³ïÍÚÿô)ëûKõèøË\|àúzËýý·«s±ñc­¿ÿh>ÿÆmg{¼‡sþÀò%@ššk 2ÝLÅLûÇ÷" …®ypvûkÜï\÷ÎÁÉïêøPă‡ßÍ{&ªö‰Ïïžÿùw{Ä–Gܶïð§¹^Ï…øùË— –¹… 0šíw.ûoT›Xí¯2¹ï¿º1×tÓ+nöМÎ{úñå'6ÿè͇îãʉc)æcÁο¿=âôÝmqØÇÛìüsó<ÿÙüü€åI€ËØb‡püËÝ÷ G¼ì´ˆÏþ4b°|ðç·îxÚç#ú?’‹>qÅêSy`w]qâ'ré:Oÿç\Ü=3Ï6DüÍ͓֔J-âã·D\¼1:ÿ_ùF.ÎøôÁÇ•TMuø¡}fâØó¹\¬˜8†-ÇòÒ¯äbOi²òèªû#¶>´í§o\·ï¯&ÎibÝ?þÁÒùyÌ´oàØ'@€el1‡Ã©@úËsqÆÊˆ·W‘JħnmØïÄô¢/çâÇ»#Þýøzüþcëi…P£ÏÝñæïæâ²M¾´§öGüÝm1ãñ¼ðäz4}í¾‡Îõ_îΞRÄ3¶Ì-@¹c_=^ùµ\<~}Ä'ž\ÿ~N=V#V¶ºî×îxÅĺ'õE\ñÄzüú™õغòáùYÏ'p–/Oašjõô°VOùZ(I¡/ÝñöÇÕãøÞˆK6McûµGL~ïU÷Eܰ{2”yáɓۜØ[g~ñ¡ãøà'¨+/›ÜæE§Ôãúݹ¸eoöw'NR…” Ÿ{òæÉm?rSÄóNŒèi{èºL^‚ìóNª¦’J¦³VÕãY'¸ªM×ý“ëri`ôwO¯GnIÿüI°\©@fe¾I³•6ÕzÄ%'ä§WìŒøÞþfÚ?Ù]¸þ¡mÎ^sð>~²çàÏ笞Ý÷ÿòéõø§;"jöÀHÄ—î‰xÕ?½l6ç}Öªˆß8+âòÏÅÙ›‹÷]i5U3I5ÕEë—v<£ –7,s³Ò´ÐOùj¦±yöÅÿ˜‹“?™K‡¢%þꦃŒÆWíùC37íøŠùYœODZÕTÈMö$Jú!mé}¨ÿÑôõ§­æ:¾dˆÝ~¡—mŽøýkrqé?åb¸IˆT[ ŸãÃùóÔ –7CØ`™›ª,i|²×ÔûCÔ¦ÏgZ¦Ï§K>Kú %ͳßúØzœ»f²'v²úûo˜lHý¿.Œ8­rýkŒØÜ3¹Ýõ;ÓoH dÿ§­ˆøÞŽƒ«f®ßÝü¼'+Šö¿ÉPµz<ÿäˆþ$ûʯÜz𰲩õû‹õ*|~7î~h˜×Ô¹n]Qw_T’‹Ëþ)ÿñÀ¡ç¾uâx¿³mÿ·9\¯™®oVÕÐ\ž*`y ©Ã Z‡³¿¤yv ýÞ97) C+;êiøòéŸFü—­‘ö zã¿çbçØäöv].m¦¾ý5gÖã—¿š‹×\5ÙË( g¾q_óÖÍ®Ã+NxÊç'+‘^vjóžGç¯K‚­ˆ+®Ï¥Ãí’ý'ØÔZÿ¾-š8Ÿ§lŽXÓñwLîï„Þzܼ÷¡k’ì÷òG×ã¹_Ê¥ÍÁŸ¹eòélɺo:{öÐôå¹x3ý¼ô?€åÍ6XƦ†/-Ä´ùq»g¨ž6Ï~í™õ(äÞ>y’ÙãÖN6ÓNêŒ>ó”ZœÒñ†oçâíßËůŸUÓžZöâS&Ÿàö…»"~õ¹¸iO.þÇãêiåPã9rþû·O†¬%ûêq›zšï‹O¸üÑïúáäд¿»=—¾ž:îÝI¥zü×ïäâ¥_ÉÅ÷ÌÅÇŸ\SWº¯ŸÛñÁ‹ëqãîˆ×}+—6ïýìÝy]Õ}'ðÓ‹„!a$¶³Øƒ1klo˜ÛñWÈÌà?âeâªTe<©™ü1555S“IÕÔ$SždRqœ?&å%Ç€ÙBØ dc³a›,!$„¤îžþ^éÉWOݧ»%^ë}>U·ºûõ{w9÷>éoÿιsvl¿Ý½‹Z;šôø S&ÿl1ÐùƒÝPk™³mÙo|Y<::z¿¦€}KæúÚŠ±ò…Svíõ»2Dm&Ͻ÷çÞÞl?þ¿\QÊçO(ƒ ‘`Ÿ388xòø—ÕãËkãËæmËHk3„ úXûÖì;YÚÑîΉ4}™Éög:ÐLçlrü;í7 ô1Иj²ä==Évm[»òü©ö·ó˜ãßõã"@ÿ @Û»¨M]±2õmá÷dEОRæøwþ=пH@c¢‰”g2©òL‹©Ö?õ]Á/?°o @ÛÝŠ›ÉîVÛ^ÇîVôtoïõ®àqü†°@? šiEÊL+pf€Lõû=]AãøÇv{À¾C€}nW’éµmín…Ï®TðL´/ŽfCê€þ$@€>¶pî`Ù°e´,˜Æ'‚7"p™IµËT¯ß•9‰ÿÄ6l)eÁïègƒšúײýKyô¥‰מÄyª[¼O¤pL§:gw·7Õö»—×{ö¥ãlõÀøµ¢ ú™ úØ)KKyèÅòÃç¶V™´Í4Ù]{;pÙÝýÙ?×ÄŠUcåÁ¶^+@ÿØúI#ËPk™³mÙo|Y<::z¿¦€}K¢‰×¶”òòk¥Üÿ|)Ï­/eÃfíÂ/eØÚÒ…¥œ|h)Ž*ÜoØ}Ø`_488xòø—Õùx8¾lÞ¶Œ´–1s @›3TÊÂ9¥œµ\[PùP9°õZú— úT*I Ì›SÊæ‘RFF·V%AûÜåZQ}ýK€}¬"ehÒ˜ôˆ‰®‘_^+@ÿ @Ÿë&á.lT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• zÌ_ÿõ_—Ÿþô§b–µÉµ×^[n»í¶¾ò‘òö·¿½Üwß}åŸþéŸ\£»è[ßúVyæ™g¼!è9Ú€½aÕ+¥|êï¶”/:Xþׇ†Ê3ëÆÊ“kJ˜Ýǵ`Á‚rì±Ç–9sæì‘õ½ùÍonÖ¹§<÷Üså‡?üay×»Þå"ì’䥗^*]tQyì±Çšj¢·¾õ­}×3½æ~ñ‹_”ý÷ß¿~øá[?\ïV€Úï×hþý8ðÀ½!è9$öŠ•kÇʦ‘Rþð}CeÙþydÇäèOï-ÿçžÑò캱ròÒrëç†ËŠUcå+×4_÷Ÿ»õµ¿wÆÖbÚyÿ}sùý³Ë?k^sÞ‘ƒåÿ}|¨,š·ãv3¤¦ó×ýù—) .,gžyfyä‘GšÇ8à€òþ÷¿¿,[¶¬üüç?/ÿøÿX¾ô¥/m}ª‹Î8ãŒrÜqÇ•; ¶lÙR–,YR>øÁ– 64ßSO=µ ‘^~ùåfxO:ÅCCCåW~åWš×¶=þøãåî»ï.¯½öZyÛÛÞV~Ù>úhY¼xqÓ9Ͼ,_¾¼Ù¯¬ï7~ã7Ê~ûíWn¹å–æçƒ:¨œsÎ9eéÒ¥ÍkŸ~úéòý↓Y³¦9ÎÓO?½üó?ÿsÓ¹ÿ‹¿ø‹f]ûØÇvØÇyóæ•“O>¹¼óïlÖѽͬ'ܬ+Ö®]ÛTL|ò“Ÿ,‡zèöýÞ¼ys¹óÎ;Ë“O>Ùüœã:묳šp!ç ¡C¾Ïñ¥ý»Ã‚Z›|ík_kÎÑ~ðƒæ÷ŸûÜçšm=ñÄeãÆÍ~|àhö5Õ,÷ÜsOEŽí®»î*—\rIs¬mƒƒƒÍvòúïܹs«×p¦´}Ž%mžë AÊDí–s•óSk“\Ù‡TôdßÏ>ûìí¡L[Ž?핶˹<ú裛ë5UCù9ë=÷Üs›c¹âŠ+Ê[Þò–rÚi§mÉR!ôÛ¿ýÛÍ~%$KÕ\ÚâÄO,§œrÊ×\Ž)×ùÊ•+›szüñÇ7ûÕ‘õå˜:×TÎåúõëË+¯¼ÒìG· KuQÖ•ë(ï‡sÇ /¼P¾ûÝïît¶¯åƒ>¸¼÷½ï-‡vØNëϾ§-sM罜÷C§ k×T®›œËœƒœÃ¼Ÿ' ·®»îºrÔQG5ÛÊ{ú=ïyO³½ÎÏië¼2”/ç*ûŸãˆo¼±9ÞóÎ;¯üä'?iÎYþÍȾæ˜r®²ÿozÓ›šÇ¦j °ÏK(tÄå’«¶”?:¼vØ/;s÷ðhù7Ž”?ùÈP9áòó—ÇÊðxsþøÿZ;n°|õ‚róʱòûß)Ÿ9a°¶µÏ^®y|¬\ù›CeîP)|s¤|õžÑòŸÎÙy´v:£ 2$P¹þú뛎|:u n¿ýöò©O}ªºÿ :]xá…M§±F¥3Ø‘ð"C¢RÍ‘á=餦cÞ–&ÊNé<>üðÃMw2 MÒ9}÷»ß]-ZT®¼òʦÃûñ¼éÀf{_|q³ŽÌGs '”÷½ï}MÇ;•% ~ÒAýô§?Ýìwg³ï9–òÈ#wÚæ‹/¾Øt|;RB›ìG;<ŠtöÓÎçŸ~ósªtœÓIî¼.êøÃM 0Ó6É>&¬èTjÌŸ?¿ MÒÖymB’„ øZä|çw ;rÌIç<áÆe—]V^}õÕòÑ~tÒó0::Ú Ò¡O°ëæC™ô\eÛµ6Éïr Ù×sÖŸ '!a·gŸ}¶|âŸh‚šø‡(Ï?ÿ|S9•Ð"×DŽ©ª§²¿9oÙŸ í §#ûœk=m™ «ºÄ1ÇÓ\×¹&r &t˹ŸH‚³¼¿²½œ¯œ§\giŸŽ¼?º¯Ñc®å„fÙ„) è~ë·~«yýlÇ÷1!XÎCÖ‘ë䳟ýì”×TBš9ç0i²*¬¼Çs eûù7 ¯M •í¤­òoJÚ%û2™„AÙFÎwÎA‚³‰ªŽ¦j °ÏKtë%Cåßß0ZÎøú–rúòò/*ï^6P¾ñÐXùÍw–{j§C»µÓtâ¡Íï8d  V®+‡í¿õ±/Ÿ6Ø<8r üøÅ‰ƒ‚t:3WK¤3™Z§›Žw©¤s™ê€T,¤r#ÝR¡’êŽ .¸`Ò!)é 'êTˆ$LIg|2élv‡¬?NB˜¬?¯M’ –t†ÓIOxjtðÓ ítŽóúìc:ΩxH%KgN›N€ÔÞfŽ3ÁHž“禪#•$ÝÜä5 ­"Ç—Î|g=Ù‡„ju²§Ó&ió„cí"ÁIŽ«T¥sŸ}$œH…ËD2çQÂìÛG±= Ê|>9Æv5PÚ>¡Ë¯ÿú¯7í–6J€7Ù¹šN›ä˜ßñŽw4ß§ª%•l¹¾RaÔ-Çžsž%ç2×s'ˆË×&Ó¹†<%,›,lêìsÞI•]–ö55™´OÎE§2)]B¥ö¹K`Ô}&¤É÷ y#Õ^9¯YN:餶Ñn«TúuÞËS]SÙ÷I®ïü»0™ìsö)ÛK(–ʶü»’cËõ²nݺ‚Ѷg‚Áœßl3m±+í$ú‘‹ÊeŸÎüGƒåß}o´|è[ÊÊß›Sžyy¬œtÌÎi¿üÇ£åï-­+¯nÞúØH+#Z¶ë?¸ÁÒ ‘›0¼š?û÷©ºhWxäçT—L%áB J¥Cª#RÓ–¡<‘€a2 ,:Þ:òÚЩvP•ÊŒhß-*•Ùn–Úv»÷±½ù¾Àto3m—Ð-a@†=u§¶TWdR{ûYgëÌ“ŠœÉ*4¦Ó&í}J%Iª@RÁ“ꑜ¿Î¡¬«]Ô^o[:ü7ß|sSé‘`,U=7ÜpCSÍÒ®¸jïc÷úº«aÚû86é¾Ӿ튶é^à _ÚwB›L*î2¤+Z†×¥2¨=t+i÷>ïŽ\¯ Þ:w>ËyšÎ\K¹F»Ï[~î\ÿm–k3¯Éú;Õfµk*ç&Kí\NÖþª­Nûw~žªýó¼ mKøôío» ðr>ÚçqO·?˜õ?` üï •Ãþd´<òâX=ÕU@±úÕR>{ùHùŸ*_æûvº»½Rí’*‹¼6aK÷±uªRÚÛÏ÷íN{íL§MÚ¯OhJš éʾ$LJPÑYW;„IÀ4‘1ÖÌgô‡7”ƒç•rÜ’ò›' –K-__1Zîxz¬üÉ]£eã–±¦Ú(wi{bõÖÉ´_o©ÊH'0ôҡLç´S”!.©LIN:Áu„SÍ‘udN”Ì‘”n÷í¹3L,ÄT1e”ÌK3Ù=ÝÒM•KæûI°•}Ìú³Ïò’qæ£Éü<”!WéŒçñš 7ËäÑ ‚2œ°Ôå¼dbðLXœýÉþv:ñmi¯ áJÀ”mæÜwîf–¶MuN~ß©*É1¥}³Þl7û7Ù<6Óm“ì{æ®z衇šígn«©î7•Ì¥”}ÿæ7¿Ù¬3á_ˆH rÿý÷7ÁKÂÎLÞÝ-óïäúÊ:r}µçš©„8Y_‘TåZëÌIÔ6Ù5š°.×\®üÜ=¬-óex\ÎWgrӹ¦ò¾LU]&çÎ~e.ªÎÝòvǯþê¯6ïÿRiãÎ\F9ÿ9i‹\Sù·¥]™õz´?ì®­Ÿ„² µ–9Û–ü9jñøX÷k* #óe~–„(³I‚¥„¿ó;¿3­áSo”T£$ü˜êñÏE'IipnSºyÛ2ÒZÆT Ó–!E©’É0·_ûµ_ëùýͤ LõUþf–áO™·©—Â#€Ù@€L[†ùdØ^îJÖ¹ÓY/˰Á Eê J”‰£˜CØúØt†°©ß J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT ¨ P%@ J€@• €*U$ªHT OçI_üâµ@ŸšV€´ÿþûk)€>5­é•W^ÑR}ÊHT ¨ P%@ J€@• €*U$ªHT ¨ÞÓ+\´hQOèš5kœm€]  €*UÚègtPY¶lYY²dIÙo¿ýʼyóšÇ7nÜX^{íµòÒK/•U«V•µk×j, o €¾´|ùòrüñÇ—… –Õ«W—^x¡lذ¡ "aÒ‚ Ê›Þô¦rì±Ç–õë×—Gy¤<ûì³è;$ ¯$zÏ{ÞS8à€òÄO”•+W–M›6MúüÇ{¬Ì;·yä‘åä“O.G}t¹ï¾ûš°  _˜ è¦vÎ9ç4ÃÓnºé¦òè£VãŽ<'ÏÍkòÚ¬#ëè$ /$ð9묳ʓO>Yî½÷ÞíCÕf"¯Ék³Ž¬Kˆô °Ï˰µÓN;­Ž–J¢±±±]^W^›ud]YgÖ °¯3°ÏËœG¹›ZBŸ=%ë:ðÀ›ußvÛmzÄàà`9ꨣš¹g£3Î8c‡ŸŸyæ™fÙÛz.@ʱãŽ;®¹ãÉâŋ˜9s&|Þ/~ñ‹rÕUWygU¹ÛZ&̾çž{v«ò¨[Öõàƒ–óÏ?¿Ù†»³ÐOÎ=÷Ürë­·–ÑÑÑžÚ¯ò¡}¨sÌ1åÏþìÏfeÛž~úéÍç–^ÓSÒüùóËE]ÔÜéd*ÊÅ€é8þøã›¿@N5çQþ€•¡i3‘ufÝÙ† €~râ‰'–E‹•k¯½v—æ|=$<:ï¼óʼyóz®½>úÑ6wrÌã?^®»îºí?ß}÷Ý=w = ~øáÓ :@ÍAT.\XV®\9ås¿ò•¯”+V”Ë.»¬¼øâ‹ÓÞFÖð)ÛZ»v­F`Vúò—¿<ã×qÄMµÏw¾óž8†³Ï>»|ðÁåꫯ._øÂvøÝ®ü¡hOºæškfý5ÒSÒtB¡—_~¹ 7 @ͲeËÊêի˦M›¦õüSN9¥¼ë]ï*7ÜpCóAoãÆS¾&ëÎ6²-³ÙL†|%pzúé§Ëõ×_¿×ö÷ŸøÄöj£¡¡¡²yóæfª›|íèG ºöf€´/試=/AÆQæCX>eÒËü%0ßoÙ²¥zè¡ÍɨY²dIyá…föáhx¸\pÁå½ï}oùû¿ÿûrçwN9wR¶‘ù _<ôÐC{}¤ŒbúÛ¿ýÛí?¯Y³¦É Úz%8ºð ›‰½'óÀ4íÙËz®Œ'ß7ÞXV­ZUFFF&|Îd´í·ß~eÆ »ôÚÜØã’K.)ïÿûË¥—^ÚÌM0™l#Û€~qË-·ôÄ~ÌdØùÞôÝï~wÖŸóÁ^Ú™üu/wWËíéj!Qžg$`*)kß݉=ßúÖ·–?øƒ?(Ÿÿü益¦‰d½8a'ÀžÒ³Cئ"@ÞH™)fï͹€Ù铟üd9ì°Ãvzü‘Giæ^œ z.@šNˆ”an3 ›€þôꫯNû¯“}¶ÈãwÝuW¹òÊ+›¹&’ákÙÌVúد¯+®¸bÖCÏÍ4ÝÊ"HÀT2´lÁ‚»üúŸþô§ÍäœO=õTõyóçÏßí¡rÀÌrÈ!Û¿ŸhmöœaMì«r'×Ü­6öD2'cîÀvÏ=÷Lë/²ÙF¶¼q2ò?øÁæû¡¡¡²yóærÕUWíðGÙ2ô|ùòåeéÒ¥å¹çžëÙ}œuR*Þüæ7{§Sʇ°c=¶ƶiÓ¦)ŸŸž×]w]ùÞ÷¾7­çGÖ½xñâòðÃkpxexyÛ9çœS.ºè¢rõÕWoìÑGm¾örtÒI'5Ë“O>YÎ?ÿüžÝÏž ’Næío{ópÑ¢EeppÐøL`Jk×®-ëׯoî¤öØcUŸ›j£ÌO꣙Ⱥ³l f³ßýÝßÑóÿüÏÿ¼§öÿ¶Ûn+çw^¹ð wú]'HêE§žzjSùœ!x?úÑÊÅ_Ü“ûÙ3R*‹Rþ=‘N8¡œ~úé;=`*ùÀ˜¿êýìg?«ÎSôõ¯}ÆëÎäÙo{ÛÛÊ< ¡˜Õz- Ú)4¹ùæ›Ë‡?üáY}½zc޽ ¥’(•EG}t9øàƒ›ŸW¯^½Óó&²–s€©<ûì³å¨£Ž*'žxb¹ï¾ûöXsþ˜•u®[·®Ù°÷åÿù W›éü‡{Ó½÷ÞÛ ½Ë¶|fÉϽhponüì³Ïn*‹–,YÒ„G122²ÓóòÁ¬ÛTeè+V¬h>osÌ1{lYWÖ™u½ctt´<ñijfSÉ|ÓM7• 64_{µ²y¯V ½å-oÙé±W^ye§Çî¿ÿþrà6UJiФr>ø w0-ùü¿æyæ™ÍÏù«ä®V"¥ò(áQæf¼ë®»šuìŽT3÷zEó^ òë€Øá±§žzj§çebÊk¯½Öì²—^z© |2Qeþ0õÐCUçDšHæ<ʰµTe]Y'@?Ø«CØî¸ãަâ(åeùúƒü` `OHà“;´Ì›7¯¹KKªˆæÎ;åëòœ<7¯Ék³áÐOöjÒªU«Êå—_î,o˜T@ß~ûíeùòåå¸ãŽk–ÜÄã…^h~·iÓ¦æy ,XÐÜ%vñâÅMEtæ$0a6І5Ð:s tÐAeéÒ¥MP”!j©0Š76CÜRiôð×µk×j4 o €¾–`H8P7¨ ¨ P%@ jÏ´fÍ­ °Q@• €ª©¤1M°Ï«f@*¨êT°CF4<É/ÆZK“+{×ÀÀ€Fxýìµk NñÉÀ¾¯šÕ†°mÑ«_[¯€½)#¤j 3·aÓè†2EõQLU4:¾l^õâKßפû–g^Úpçø—Íek4­ ¤± –¼øÕüáW7mÞ¼N³½JEÒ̼¶etÝÝ÷ÿè«ãß¾Zvv’†ZP L²Œ­_·îå•«ž¿uáÂý;wÎÒ9ÃÃs53ÐËLº=± ›Fׯ|þ•[o¸óþÿ°áçüxü¡L]4ÒZv “¶5f',ܶ m[†·-sÆ—yãËü²ãÛ˜}¶”­•GËÖ!l[¶-íi{Ôu_Ë :áRg…C­e°ìX­@ï˜(ëi/ݡфó O²âÑmßl[AûñÎÆ:áQçki½€½§ûŽj£eçl§{ØZ»êhÃS¬¸ýs;©ê u›¨úH€°wuç<íl§½Œt}píáÖŠºVZÊ/C¤ÎcG†¯ô®‰î®6:Á2Ñðµæû‰æ@èzb;DÊ÷í©@/k‡Bíi¢ïÛÏÛ®{Û@×Zu¾-;Hô®îi²¥LðµZ4Y˜TÊÄá‘  ·ŒMð}w˜T*_“Ý…­{[ûñRv‹„G½il’ŸÇ&yÎNwaWÛÀÀ4`ö›æcá]X³ÛŒ2Ÿÿ/À“SÏ 4 y,IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/searchmusic.png000664 000000 000000 00000011546 13703317554 027641 0ustar00rootroot000000 000000 ‰PNG  IHDRF\ÆrŠtEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp ’¹8–ÖIDATxÚìÝ lUÇñÿÜÞ^-Ж‡ÕòØ‚²¨ Á(ÑõBtQÜu7¸FŠk4ñ±j|»Ñ˜˜OVÔìF£¢",B°¨«¢  %…­ °€…¶ûšíÿÐ[¦Ó™{çöq_|?É8·÷1-S;s~sÎÿŒeY–$IÒ¾p²“ñMÂI  ÃÃGau0 €ä±: lÏÚ V_[„ mØ>mq;Æ{ÜaÂ3HX>5VœÇV€AxR"b…¯u¬ÇF8`xp®c=ç@òCƒW ˆö<8×Î×Ϲ_o üƒû±åó¼WX <© ¶+<8ûßáW+0ÄZ$Fü áü¿!^ B®u¼ A˜’‚‡&ÇÚo[í†:Åêð &4”••<묳ŽD"S,ËêÃï È„aÛUuuueëÖ­{pÊ”)å-mý&Ÿ Ñ®Â9 “WMCÈBkÖ¬5yòäÕÍŸëÇî26H\»víùS§NÝêÎ^ ¯š‰Öá7l) r¢¢¦¦æ½zõº”]d¶ÚÚÚeyyy¿s„‡FÑ&Høˆv=-!"§¡¡a'Ö€ÌgÛvM8Ú%@ODÈñùXEÔ­A‚ðd‡æ¶}ž´í4ˆ;êß} <Ãí…=´ï®Íí¦s y‘8!@öÒÑ*‘É ´säÈ-À’ÇKÏž=Ù!ÑãF~~¾„Ãa³¢É#<ØñD›È€±wï^ÉÍÍ•‚‚)**b‡HHCCƒÔÔÔÈwß}'C‡e‡© ñnmûˆX!Âlضmv1Óó áà £´÷¡_¿~’““cz1{õêÅNRÃò íÂC4mÙ =ÚÐáÚóÕ»wosQ@ÊxÕ>ø‡ÿ¡ÁJdƒnMMM檂®úW„B怢kéGÿ®û÷ïÏŽÈp­[·Ê®]»t.pó;1b„ 6Œƒäµ\šÏõzL),,dg©‘PÛ?Ü&ÜÈX´«@r#‰ }ª¯³äšÂÝÒ·o_3LB.-7½(˜ÎlzQç“O>‘>úHvìØaz”ªªªÌkzÜ;v¬ÜvÛmfh À18®DüÐïú ¸>Ø¡Ðà>I%”~拇ÊÏž.Ë>~ÞtmR]cÛ¶m&<|öÙgæøzæ™gÊ•W^)Ó¦M“N8A6mÚ$·Þz«)n—aÂ7#øÍÂä›JmÄw¦Ñ_»a¢üP´Gž­ž+oozBþrÍ)è[İ&脺º:Y»v­|ñÅrꩧʃ>ØÚëÇl}þõ×_—o¾ùFüqyôÑGÓ¶'âûï¿—“N:‰óB–àB!òÐ+ Äœ…)^˜HšúÊ<‘ƒÃ¥þ‡©½Inøû(ùÛ6Ë ¢bNÐAZó !!//Oî¸ãŽ6ÃCõñ˜1c¤¾¾ÞôBhØxë­·dæÌ™q·»sçNyíµ×ä§Ÿ~’OhÐ )--5ËçŸ7@\vïÞm ³Ýî¿ÿ~s’Õ†ÿ}÷Ý'üqkPÐaTz3¹sçšš µ`Áy衇Ìc½É˜º÷Þ{å7Þ0=#Dœ´NCïI¢õ·Ür ¿`Y)"^zé%¹ýöÛSŽGÒa‡”æM—‚ÜSdùí’9v¿ˆÒIúßF©X¿M†<ÚKU™"¢=´:S^ªz\Ý1 Óûûþ$3NZ%ê.”o¯hóZÉ8‘ÿ®©4=ÚkÒt("MM ækfkR‡¿¿Ì5räHsÕÆ ¦7@ßNZ¿PVV&ùùùòõ×_›aAAœwÞy²lÙ2Yºt©ÜyçòÈ#˜ÿO*++M P:\IO€êÍ7ß4Cô9.vܸq­ÛÒBî( ƒö­}‹ÅÒ€Ò£G3--"3)W²“^DHÆ9%È÷éêsX¼ítõÿÓ:lIÿ/¾ø¢ÜsÏ=æ8Ý ÅÓ] ºCEíjÙ^ý†œÐã¬vâèΗ–ÀÐ|‚°šøK€NÐÞ‚ .¸ÀLÕúòË/›™–¢W±´ZCÖ-[LOÀž={ÌMå‚ÒüUW]eê,V­Zej† b¾—Ó§Ÿ~*‹-’Å‹›Ÿç®»îjóºsˆ’ ¾'²p˜_*€¬§áá½÷Þ“§žzʳõëo¼Ñ¼–쑲£naî±¥±õëöß!}ÿh÷¾]_ˆôÎï# Gßî]+¡P˜i\ .½ôRS„¬âÉ'Ÿ4|½’õã?š;RkѲ]kWÿüùó¥ÿþ¾ÛÛ·oŸièë•ýŒ;1 IÒP¢Dƒˆ^Ói^µ^B‡FixÐï·qãF9ãŒ3<·­Û8pà€|ùå—¦[†ÎRMo™ Z÷à J¡"´°ZgÏÓ™š²:@L(ø³Lì?ß<¶í£= U ;Íâ´ã}‘íï…¤dØ‰ÒØÐhê¾{¢žC¹â ï)S¦È¨Q£L1³6øuè’*))1¯iãþ±Ç3½Zü¼páBS¬ì嫯¾’xÀ„è­uF&=©im„Rk¯‚Ö'\ýõ2uêTyá…ÌL"Z­ßÏÎ5oÞ<¹ûwïÞf)½ß„>ìD†¥‹dþÌ:DTk7Ü5"´Ú«–­;YÖÑï]B-KŽcÉm ºŽÔÕÕ•'ò :$ÿü©íU«›J«%7tt|jyõù÷ž«ç××SÛ ŽÑiöæï7³s$<ô³ WÒ“^-Ô»ëߨ>æo@¢´çAÃCEE…”––²C€ ‘ð4®GŽ)g·ˆÒq˺èt :Ì‚;ôâƒöÂî2&8ÔTVV–-^¼ø¶›o¾¹¼ù©Æ–¥É±D{%ÚË'@„KŽc ·,9ŽuŽã}!WàÇ@÷sö8Ã@£c­KƒcÝàxÞ+L´.aofIûÚ‡h°ht‚è{B-ïsšáM®$08‰áw#¹x!B\©&Ç¢µ 5B\Âv……DÂCÜɹ»=,96Ê™h¢ÃœšÄ»çaL@òƒƒ{r$¿žçÚ–Sº†¶Üé•\$F€p‡‚A"Vˆp/±n&g;„x ¿áuK¼gr"@é Ümø&PáÕóà[áû&Gˆˆö:$@ò‚CÐáw¹¸C˜¢vQ‹Op¾Ï/8€Ô‡‰xA"ÈMäQ[ &Voƒ_p HÉâ $N`°}¶ã ÜÅÔ~=¶Oxð „ ùáÁýœ_ï‚oƒøÜ‰:Vƒßëq:B>a¯>"V`hHüD@¤Hš¤>< vmÄ ±B@`@xÒ/DÄ{OÌÏ…ܨՉ†@¤60tú³á$þPÒ3@öt>.¾;8IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/en_US/png/settings.png000664 000000 000000 00000105323 13703317554 027170 0ustar00rootroot000000 000000 ‰PNG  IHDRâe"(KtEXtSoftwareAdobe ImageReadyqÉe<(iTXtXML:com.adobe.xmp £îæ‡AIDATxÚìÝ | çðgv7‰KD"„Aˆ$’ÈI ¢MgÿRªŽºÏª–jµZÚ*ںﶔŠDÜwW´q×UWäF’ÝÿÎFˆÈI¨ãùö3µÇì¼3o6»Ï¼ùÍŒ J©Ô/ """"z݉…è2·â)B7ƒ8Q Âv1á\(.€t[`8'"""¢7˜XÈ}±yžäŠ"BxAÿ Er†q""""zÓB¸XÀ¿…t!ÿ㊄ð¢&p""""zÓ¹XÈ”?„?Æ…„ðü“¬ÛÈw›ˆˆˆˆèM áùƒ¸ºÛ…ò"GÄóo™(Іš+j&ýQ)xßÓLI‚ ¤åy …ð¼A<­wÞ.ׄpóž={67nÜkkkråÊU`_Óë.!!–––ì"""*Öýû÷3._¾|xòäɳ–.]zLÆoæ ãyC¸ö¶üÁYS *EÉ á†½{÷vŸ7oÞ¯v …B—]Mo‚ôôt²#ˆˆˆ¨XRF633«õ–Ƶk×ÇÅÅÝÔäìì¢^SP‰IÞ .M&cÆŒ¬§§ÇDBDDDDT)3KÙYÊÐù2µP\¢,E3éKå(ìV""""¢âi²³§æŸò²´ Ožuð‰ ^XyŠŒ5áDDDDD%£ÉÎåóåé‚NþÄ©'KSˆˆˆˆˆ¨ô +MÑæï¢FÄq""""¢g â…]³Ðƒ5ĉˆˆˆˆÊ6ˆ?ñdþž?QéT^h :'""""¢§ âÅŽˆvuM"""""z¶ þDæ.ª4…ˆˆˆˆˆÊ6˜£° NDDDDôFøàƒ0vìØŸëÛ·/Æ÷\Û/.ˆs„œˆˆˆˆ^KÄöíÛŸãRÿóÏ?ѯ_¿gmBx– NDDDDôZrvvÆÂ…  ã¹!|åÊ•¨U«Ösm_¨Þ´:EÔÍ‚Ä$,éîª-…Ñï»õQ¸˜Žc¡ß£kT´vE…z~hÐa,~<šV¯ÑëÄÕ™HˆYÕÇ•€ GíÆ añ`+tÔ—±z?bnÊPÕ®-íÀ·?À°íiÚÀ¬¾†÷{NÃ//ã®± ¬ËãîåãX¿éîêV‡¢Düü¡ð±þ¼Ž4QuÚ-œ:z·õôÁê""""*­W¦F\ue)šZ-ͳ a‡à¡X2ÌþáF(꼃_×zÀ°aTÕÓÄcufvzânbÝÆc˜ÓÊøû4Ndh"¹Ü}ç,ÃtO}¨R/ãÐ¥rÐÜDÃÛéû1ef,RÔš€ÿöØ3'µqÇŽÞ„EC9ßEDDDDôúqA®##}(Äl¤§ÞE¦:g£¶âíàâg¦ÚWÝ>‹ÈËñû˜xœ¾zÉ÷‘©TkÓuFJ²4·ÊÛÚÃÙ@ÀµÔKø±[{ÄvzCûvDG©³ÏÄâ`’f9ò*èØ7uÊIšÃÅÇœï "¢”J%öìÙƒãÇ#--­Èy áää___( v1ˆ¿ÌdÕºacÔGh¢£ Æ·áÛ¾1á` ¦}²AQcÐ4;wì‡ég³!7k€.݃áV]ñ+¦añŸÊ‡#Ý2ËöX¸ø&ú¼/&`ïò¹r Üú}ƒõ|P¥€:1%9ç€PyET1ã8QA¤~ýúuôíÛÆÆÆEΛ’’‚ 6h_ãïïÏÎ#¢7Ò+yZ3Gtó·ÑîE¨®_Ä™TY±›±ò|D¹úÌþ+&ôÃÈ÷߆·¹ì‰M¶lÖáû¶"vÑ0„8C¦NÁ‘…“ðÝQeí  ` tu2nÜVó]CDTi$<((¨Ø.‘æ‘æ•^CDÄ þª•H¾°óÂÏBŠÍ2Ãʨ*¥d¥Ù6IG7g³îŸÀŠ|áZ}íO슿ƒL… œûaÙï#à§#=q×n© lRQ×Îå5m¨n`Íâ 8'¦E™ŽSÛ× ü<ƒ9‘D*G)IÏÆ‹+ayüóÿBß«»Þkø¢OWuw=úÚõ@h2Ï“EDeçÕ=XS"À³ÿÿÐBÐqpCS£0„%'`n¯`²Õǵ“ç‘,è@@æÃ—(Ï…!ä0¤U¶†] cˆ çpL“àCWø;ëضPÑû×ÄÆq-bì¶NF9dážÊ W·C;[žoœˆèyS_Ý€5×AmõˆHÆ{UùÙKD¯¶WïSLA§¼)l·ÆÇ3Áæaõ!;)T ÀŒÙ}ðVcè¤_éD¸ô†£¿½Ûû"÷cï<›²ÑêZèÜÃQ¿oÁ-i^LÂö?ö¦s0j3„ƒ8½zR±'tþ=6þuma[¯¦øWE"½”KÊŠ‹D´u{ts6Ò| 0h‚.ö'°çpjÎYnuœð¶5t57ËÕé‚NÎÿ :.éñk½©ïà¯-‹ðÙ{ѹkW„|ºW“S‘. ¨Ü¶'Zœ ź+j¨olÄGÑ%°¿l‰¨@¼Š½ÔÄÛÛzÈ?ÆÎG“œ‹=ˆ7V GÛUØ‘ävÒCbž #«îã^V5ábQõâ"Ôê¼÷Axüww~…~ËŒ0gm¼ŒeP_š‡à “9OVh‚ž&aôê“ð3 Ãiï>0øC$¢q'ˆˆ^j×6¬Âq× ´4~hóVr8‚Ј +Â8ó4Nœ—JU²ñï¦ 8|/wF]èé$âú­œò]Wx_ ÇʸœðŒ“¿ãx4÷0‚véÙǰyã%í¹¶îŸ Å긚ps®!O4ÏNI½ æ0/¯ù U§ nÕÄgç>¯ûÿu‡ÉÖÙ˜~ þÝZˆ9œˆĉˆèy’.[/]1³¤¤y¥×'lõ9x·÷}<Ð fhÕή ÃÖ<Ø aÿó€{“ŒŒ¶F“šвnèú®>–wó†ßèpÜ1kÉ?µÆ¹±màáᆃÀù›éèaýàëP·ÌÎ|‚·¼]àÖ-G~êç-ð`0ÃLCÑų |ý»c®ÐÍÍ}ʬ‚b³‰mÑÅ[Ÿo "*” äüÍMšäy&“ž(Šš)š]Eoš„„XZZ²#ˆJhÇŽÚKÜ—äêš¹—¸¯R¥ÊËs‰ûÔ5èå £?£“á³,(Û‡ûà»˱åì%zsCvcÍtCs3çÏu9“*Ï$òóˆˆÊ„¯¯/öìÙƒE‹{ÅLi$ÜÉÉIûš—KÞbó§sÿÌ2̬÷"쉨HüŒ "¢²ùBQ(´£Û/Í÷‹¦<…¹ïöÁ‚ &ðû|Þ©ÆêO"*Z‰JSâÕ,M¡7B·mYook~‡¥)DDDô´!»ØÒî®ýĉˆˆˆˆĉˆˆˆˆĉˆˆˆˆˆAœˆˆˆˆˆAœˆˆˆˆˆĉˆˆˆˆĉˆˆˆˆˆAœˆˆˆˆˆAœˆˆˆˆˆ4¯í–‰"–ÈÆ–,@OÐìq(4´’㽚2«Õ˜¶W W|uø& """¢ïõ¸êbQ ]üØHŽÌ+*¬L䈈ˆˆÄ_˜ò†2x‰¸~W„ÈŸ;1ˆ¿éi*D¥ °5 ä{îßkJLˆÊÆÈÙ¦™&ˆP‰"6ÉÆì›æ»wK‰A‡Uø—Ižˆ¨L$$$°ˆè¥x­·N¦·Äda·&y딓Á«®5«Ÿ­²©ƒÍ˜kzC© ìŸSãL9šY û¯)æ2H/‹¹&¢Š¥U¾qˆˆòS*•سgŽ?Ž´´´ç?~<Šœ¯žÕ«WcêÔ©Xºt)êÖ­Ë$"ñ׊¶F\!ÆE…uàÒ-Ö^q_3¿L-â¶RÀ=ÍãÆ24º Â{2´•©™, yý'GÔ‰ˆÚ~ýúuôíÛÆÆðªÕjí¿ñññ˜2e <==‰èõÆŸ¾0ó¶ÓÿÔH+0¾¡ Õr“¶\†VU€Èk¢æËE…*ÊÐX—o"¢‚H#áAAA…†pí—ŽL†¤¤$Œ=˜4i;ŽˆÄßTÊlM—&ÒßDàÜ55.©=_³š 7UX}pÑÜ®À÷ Q¤r”¢B¸D;v,’““1mÚ4¿àìƒïfZuí`gg¯öùËq¤½ŒÇ뤮A/»^X“úÛ¼»}íz 4Y|)ÖYLE»þˆÈzq] ¦„c€×¬KKõƒø¬¼¹Áºj|µ/ÌÆM—8åõôåð« ÆÁlšU䆈èYÌš5 ‡Ƹqã´%)¢XÂp¤¨‹ÁëþÂéÓñØ7§.}7‹Î¨Ø¡”ó]mÔÃæ&B©ž#ú¯½¾5â‚€&…\­G.Ç-s÷A´sÖA»¼ÏÛ>>»®L€•¥ ¶¼)ÑS“jÈþùgtéÒE[Â"ùòË/ñÅ_”b)r˜8´FÓjKpå_5`' ·TÙ+÷}ñ*®sÞï|SÔ÷0͹}3»~ƒJ Fw3áñçˆ^ºß<*RVº ‰ZW gw•HTTÔc÷¯\¹‚Ï>û 3fÌÓ/X•"Wa{’;|æÔ¦Ä, xy{Ã˧=F-?‰ íx¸öÆä)+5GŸy[>)~^ΰwðÁ{óâræ-³åH’ùÝ»ði 'g? X|ébqmlÇp¯áøuÝçv«‹ºÿ[†yÿXº½Ýûàë¯{À_Ó¦ƒf¹ýÆPž£ÂùБök ŸfMá­icÌÚKÈV]ÀÜö1lë£ú“ôm#àúöLœSµÎ…,ïaŸ-Áˆö^p²·‡½£7‡Ý@žêNˆIûñup{LØ{û±Ç‹Þn왊^~npvqFãïbòökPJËK;†%ƒáãå Ow7xŽÃ¦êGå9‰±êØsS;¶DëO·!ý±Ò—­]'ÏþøvROøK?gÇ&ùé0RYÑB âÿé<â1Ù§F•ºr´(Ç.!"*‰ 6`ðàÁ˜={¶öþýû÷1jÔ(èêêjOW˜{úÂRQžÅÜŽN°·w@³/î ÷o? ØB€˜º_~ ×é[µáبfÄüSªAðâŒ>Áº¨þ%—¾Žåæq0G DÂOó°+e¶œ™°ì8›÷EãÈšžÈ˜ùœV–  ˜·¹ÆGÇÉå!°ÈWI¡¾}gk|…MR›«º#UZî)e¾Ž’êÙü´>û"÷cï<›²ÑêZèÜÃQ¿oÁ-QÛ¶ÿ±6ƒQ[Vø:º¼l©Ï¶áóþ¿@þÁ*ŽÇŸ‡Âñeó‡ÁBL‰ÆôþS1h&47{"p¶=âÕ3r7LÙ‰˜ØXì™á˜1#°ì²YûæcjB¬8…CGbËü¡hjžgÉòšè:õ#´0pÃè°]Ø6©5 ò~µ±lí:ÝÜ‹cU>C„æç‚Œ¹3°ñ6“8=? vA!A®:bO•J`` ö *‹-BJJŠö ÎK—.aîܹ077Êo«º¶£kìØvKmTA{*Ùì;±ûÊ1ìÝKrçÕчé-M°ª-ݶG@PèK7pBÝòp´Í¹_ßõ±HÊ¡•ù7qb'"¢WbCÐ^¸ÇÄÄ‹/Ö>6|øp¸¹¹=û š¡—ñþÌýhÿm3è©Õ,»böîñpÉÿ&µC(}½Ü¤&hÖMz:yî? °e´œ\yQÅe)Ŷ!3FEã¢R¥µúñ&¤¾ÎëîίÐo™æ¬ ƒ—± êKót2çÉ MгÃ$Œ^}~Fa8íÝR uZáë\äò4+£ÎÙü'×43ÆMÚÃè·iXò+Þ«©(Ýör¯`Ú­Úƒ>§":ïþ¸ƒV,Aw‹R¼‡Š:@ø‰Ÿ3Ÿéùbi =C† Ñž/ÜÏϽzõ*£¥ÊaÓ} 홊¥ç”P8ùÁ'# ³Vœ~PÓ¬Dê¥K¸¥,ÝRËj9ÚWžßŽð©Ú`™ù÷¬‹«ÆÎ¡ó¬mdÃæ—©¹yÿl(VÇÕ„›f¹Bž(›’„{Ìa^^óõ®NAܪ ˆÏÎ}^öÿë“­³1-üü»µ„‘PÔ:›@YÄòŽÍà~;¿ìJÈ©ÏJD­ûšr@›þã1c¨€9#æãTVÉ·GÏÕÞWñ2.g}2NþŽ?âÐÜÃâÍ¿qî`Z_óžšðÙÄ`÷Ÿ÷ò…i]ÍNR"®бºE,›™›ĉˆè•%\*EÉ+$$ßÿ}óKó”ºÁØ»eaÑ´MH4j¯– ƒIXoø8;£‘“‚ƬÅei—Y6ËÑî*TµÖD€Ü:ÿƒaߣ}ų·¡[fg>Á[Þ.p늊#¿Çõó–L0 Ša¦¡èâÙ¾þÝ1WhŠæf¾êeVÁ±Ù‡ˆÄ¶èâ­_Ì:ë¹<¡b &Íí†Ô:ÀÍÑön0yò£ƒ2j†Lç–Ë1bZLžƒY‹Þ¡r{Lþ©5Îm7´|ÎßLGkT—×aL{JvChå1Â?ß{Hᆮïêcy7oøGbžð¢–Mô_„œ¿ Úa†G“΃IOE‹øDu4»ŠÞݶ=¶ÙÖü,--Ù)D%´cÇí%î‹»ºfn—ê”®®ÙªU+v^q¤‹î¸G èèÏèdø, JÇöá>ø®Ærlù°ÁWŸZfÛCôR‡ìÆšé ýÃOöƒI•gY#NDDeÂ××W{®pé MéÍ¢H£çNNNÚ×PI‰Õq?ûg–a~d}¼a÷$öìÛCôªc'"¢²ùBQ(àïï¯è%£<…¹ïöÁ‚ &ðû|Þ©ÆR ¢—A‰JS4KSè“ÀÒ"""zÚ]li w‰‰ˆˆˆˆþ âDDDDD âDDDDD âDDDDDÄ NDDDDÄ NDDDDD âDDDDD âDDDDDÄ NDDDDÄ NDDDDD¯Wávôr|5 3ZùxÁÓ³)üƒûàûÝ·¡¾·£}†"‡ï¸ÁÕ"ïæ{.c/>÷s…[÷Ÿ¨.z1bêV|ô1¶”t}ÅD¬ä‹)È}…2n*ÞöÁ’K¹‰HZ7¾C×áNJ)—Ÿ+kÆ6×Õüm""""*Åë»i"÷~ÞÿFÓÑ_!tF}˜Ê3pýt<îX˜¾Ø=™jÄæƒihægøpýRlF¬±5*Ë‹_„`è>_Ö†¹‘P²6…Šhä\ ãâ‘è ]ÍNÉ…ÃÑÈ4LÂáC7Ñ«fMdá¯cgPÃe4LŒŒK·|""""z¶ˆøÚn™2ËÜ›áS1º­&„ëj“W@{w40{Á›-«E=ÄmÞ‡Îb"7Ÿ«ŸsÉö†Ôq±…±Pò­µ‹tþ<† *Í]õuÎF«Nî¸zð0’¥õPGÜŸåÑÈ¥d¥^~Þuã/ƒøêŽàp¢+Zš—`#Õ¸5#º¶Eë6­Ñ¶ó̈¼)¿ŠñX9®'‚ƒ‚øV[´ëù vÞ–Ê0D¤þ¹Ÿö Fæ¹ à÷ñeØYÜ-pù"Œ›¶…ã_[°çNNWßÜ…Í—=ÐHGÛNîz\ ÿ}ºv@ppí2¿Þü”ÒSyKiÒ7bTàÌš1 Ý‚àç׃Å"-_U‰Â®1ìã„f}ÅähIpD“ÎÞ¨ö b2¤uÐ<—ê×zŠR,? ¯›€€–hÔ|·I ¡è~ocÍà|¶÷¾v.ÕÉ™èèÑÓOh· ÷÷}¶ƒ×à¶È_H¢7MBB;ˆÞX¯miŠ:5iLaªWü¼âíLš…ºÓVaº£îúÇMÀêŸç"øÌ2Ì»€뻣ªL…´ë·J2ˆé‘øaâ!8LY¯kéCLÜ… ½¾Ào¿áƒ:²'‚8Œš Àu&þØuA]*ãÚŽ­¸Õ|éFàa·f—ÁÒ£&úÕ@µ 2dŸ™‹ž£Wàx«ášûnB|å_±tC-È.ýŠþ=cg°3:TÊ3<]Þë~ƒè¿îámÂÙ¾pªä‚ëµf"êø}x¥Çá¢]8J}t¿dËowo ¾ùé2|çl@ßúº¸1="DøÙ³Ñij*–=esGœßs•\Íy*Ǻ8}ä8ªzö…)GÖ‰^iJ¥{öìÁñãÇ‘––Và<ãLJB‘óÕ³zõjL:K—.EݺuÙDÄ þºÃàîu$giîè=oöŸ‡p¬zŒnh¨=¯`×õ~Æî¸4tñ鈮«&að€shøÞòk +M`Ì>¹þGô¨î}Ø›åP1QÔ)h Þ^oybÚ’Hèàm[3ÐâÓP¤FäI¿É8½g–l?»rȲo"!Õé©°‡ëšÐîgXÙ£žÑN$ICÖyƒ¸P NÎæXv,Ç3ÿ‚LJ0™ÂÝCóXÔ ü¥>j.C .G)dùYçâp¶v|]¯‚¶"ÅÒ¯œ§üQL?f “‡ô'FãrVì‰2‚ßè&Ø=u.| ƒ#±úðø¢*OáCôŠ“Bøõë×Ñ·o_è»ýsô\C#Ôjá/Ó[ÏÖ úNp©yǬ=`›»^: àé$ÇÚD—œúðÒôªU'|2ä& y¿ë™¢†{S4²ºUl?jzN^õq.âú}n©Ùvjøxá°ÿŸtù»HôF˜5k>Œ‰'jKR¤¿² B Œ¼ ?µzY?-²phþ÷8ÓæWã ­ˆäa/DTìG›ó (Mò<“΃IOó!i¡™¢ÙUô¦‘Îæ`iiÉŽ *¡/¾øB;Fª!9r$ºté‚qãÆ•è5ZÒˆxÇ œ\†A\w߈öÑKlï9iDÜe5ZZŠn&%ŒÓb"~ב!q˜ûV)G8¤ñF‹á¶cÞ¯Ê2=¢×(d7ÖL747¥Úì“*Ï$ò7žˆˆÊ\TTÔc÷¯\¹‚Ï>û 3fLÙ5¤ Ô½=ûãÛI=áïí GÇ&ùé0R” ž‰`¿¦ðiÖÞ>í1fí%<*hIBäwï"À§1œœý0`ñq¤?QO""%f†ùÀËÛ^šeŒZ~í(ÜÄÎï†avt:vOh¿÷ጪ¨¶3qfåH´uu€³WKtùt'u…’·GD¯ q""*S6lÀàÁƒ1{ölíýû÷ïcÔ¨QÐÕÕÕž®0÷ô…¥"¦`Ý@GØÙÙåLNC±ñ^nÞ‹cU>CDT bÂB1w6j/L ‡U³!øi}$öEîÇÞy>86e¢&ñLXvœ‹Íû¢qdMOdÌü N?~`Ž˜º_~ ×é[µ;ûÃ@5k$æŸÊs@Ì~ÿˆ.†ðûjvþÚõä…·­¾üÆ}ý7Zÿ|±·â÷Tœypµ·µGD¯ "GDDe*00P{•E‹!%%E{ç¥K—0wî\˜››?ÝBct˜[@iŠªu!°-ÊI÷­ÁÞdSÔ@¥üµefFœB†\²¬\Mv~8ê­¨í‡ GCmm¦žM0Ú7šŒ5±É­-^yb'v_9†ƒ½Û`Iîƒ:ú0½¥Y~ý"N™¥¾ShÛ™'Ž ¾^{Ìhh mÛêí@¸¶ôÙÚ#"q"""éÐ#éÂ=&&&X¼x±ö±áÇÃÍÍí95XúyN·š{ìçÝ_¡ß2#ÌY/cÔ—æ!8èäã¯ÍSŠ’söÕ|µ)j5Ë®˜½{<\JñYTÛ9§•=:˜S&‡Lx¶öˆèÕÄÒ""z.† ¢=_¸ŸŸzõêõ‚[‘’„{Ìa®=%l âVm@|ž3*ÏoGø‰TmôÎü{ ÖÅÕ@cçŠíDá䟌0ÌZqúÁHº©—.á–òéÛ.çè†úg6býÙûÚåÝØ¾Ñ™ÏÒ1ˆÑM:'¸TŠ’WHH¾ÿþûç—æ500(a®NÁÚ”â<⌆b˜i(ºx6¯wÌš¢¹Ù£¯=yU[`í@ø¸Á­óo0ö=ú×|Z0n¯– ƒIXoø8;£‘“‚ƬŅ"ƒqÑmËj¾‹ÉŸTź4nÒCTûƒ K<]{Dôªâé ‰ ÁÓ•ÎŽ;´—¸ *öÂ>R—ê”®®ÙªU+v½Ž!»ØÓ²ˆˆÊ„¯¯¯ö\áÒAšÒšE‘FÏœœ´¯!"zƒÃ:Gĉ Âq"""z†Í ú½ŒĉˆˆˆˆĉˆˆˆˆĉˆˆˆˆˆAœˆˆˆˆˆAœˆˆˆˆˆĉˆˆˆˆĉˆˆˆˆˆAœˆˆˆˆˆAœˆˆˆˆˆĉˆˆˆˆĉˆˆˆˆĉˆˆˆˆˆAœˆˆˆˆˆAœˆˆˆˆˆĉˆˆˆˆĉˆˆˆˆˆAœˆˆˆˆˆAœˆreâòöÞÉNukÁ¦¾ |;üCI³¶c˜]5XÌÀ9Õs^ìio…ªU­ÐhônÜôŽwGõªUQµVDd·9Qø²i]ØwûK³ÎÊX|ݤ:¬ŽÄŽÜÆSסoÝj¨V·/Ö¦ˆ9Ýß‘ ­P½É׈Íxʶ¶yß4¯+ç±ØŸÍw"1ˆ½AÔ¸¶v‚{‡uÁ«K/tp€þåsH«`á?X#A‘¸o7ŽçÓìر;jA(Ùú(Ìaçéo7•æSEÑžî&šð‹£g”9™>î¢ïŠïFã@\΀òl4âRwO4(÷”m½dì¢,ëæ~» 7ô½ðÅšßѯ¶Îƒ|®†Z¦I–Y/z…T¬W:Gb÷)%<PžÞ‰]×jÀÞîâ/”`r[t›ú+º•ºm=¸z» Üª½ˆ‰½µSeœŽ:Œ$ƒ*°P'âð“Pú:ávl,.©ôÐÜËzrÓ§lëÑøƒŒžˆˆ^ü:"zÁ”çö#*A =¯®èb£“ç·QVÈ/d.ELDHsGÔ¶¶}“.z šgÄ;Q˜Ñ·œëXÃÚ¶!<ßú‹ŽgB*-ùgë$ôlé[kkÔuiƒ~Ú[ê‚–/BiëŽ&&—°wïE¨4ÿý½s.UõESkežÙî rj´r³×,³&ìÜ1ì—?µë|å4br(zÔ´F›±³ñyWoÔ×Ü®ã„1k/!;ßN€±›(²ñב8ÜSý‹C‡.õƒÑ±påÐ!\UÝDZè?‘ý`ô\(u[÷pzå(ºÔAMGø}°çÅô¯ú:–v³Uƒ!Ø¢ÙHñÆRt«U Õ¬;bñUMGÞÛ‘ŽV°ygnˆ|_ƒ8ÑKOLºƒ$µƒÊæ¨P‚ºÕ©¹0t>(]Ñ{ô@´Ð?ŽeõÁ·Qwqsضé ßš€i#°ž ªWÓ…êüB 4'mGbù–MXð®öMˆ/·¦õGøz•éݑHȾ‚;Ï¡²o ÔD<̘‚ jÙ{¢Ýè±tÕBôªzk¾ü «¯« Yólü¹lŽVíˆAýZÂ<1+&ÌÀ¾Ì|BVð¨!GƱ#ˆO<‚¨xÕ]и:Ä“Q8|û¢ãÒsæ³’•º-ÕÙEõI(ŽeÕCpÿÞhmüWß¿‡ Ñ¢•äiQØ—‰Ô¨½8n\uã±ÿp*2ãvc’έ[ ²À÷5•KSˆ^0ÁÈF2W“’µGê9·×ìÁ©L4ü=Æu7Ãýzÿ`WïµØ¹ãÆ7…ƒaâÖý€¹)ÁèÞ«𛉏±'î©1Á~ÝOÅ_…²mƒ'~ñE±<[ºA1n7öþ%bg¼ šØºKóÌt÷ îÂúms0ãvîe© ÊqûŽ&ˆ›¼örëîøúûÑp•ÿ‹ ±»0>æ6nÝÓD{½<ÉUÑ^î&˜»ú¢·¤ .Ó­¼àw˜ÌߎCÛãÊU&=Ñ@Zñ¬Ò´¥FRôAœÌRÀmø\LëW2U*œi‰oŠëßÓø4Ä ¿úû÷Æ êÖžãÐWõ%¾Ûq•÷á†Ì}ZVåˆ=~½è½_[W8›¸h6%¨Kü:QÌ›~a57t†!lï:ü4¬ÊÿŸ¿„á·¡ÖΫסض};¶k§-XÐӦнoÓ&¾pTAèä0Ä•÷¿[¹Çvþ ý ÿ²*ÿ©Øx( º˜j?@ŠªÊ™[ÂB.­«.tu…BæÖ…‹— Ê©NbóÚH)ç o=è¹4k¹Tüµ~;N©ô´óè=E[¹ý&WÈvœL(YÿÊ­[¢¥-p%f5¶ÆÜ…ƒWs4ó²GFÜf„º ¡~+øUçÇ(=e&`½`å}ñAlœ¼Ÿ´ëŒo¹Â\ˆ‹'oÀaü¯aÿø¾rU8èÁÁ9cðMRC\ߊT¡*:´¨‡Ûá_cZ¼9Üì[£gû‹8µð®\IƒY@K8éGáøêù·è;M ½xì_Ø úµ ²–>𵛈o‡QÐx•°3ÏóÙ™Yš€(3®#~û<¬Ø¤‰çæEok‰Îº"ÀÈÝöòíˆ> Yãwàn$½ÎÞ ‰‡£¡–7Ê©/u[L]ÜQW'Gf ÃøTXÞÚ‰%'”€Yqý[: ]øùYcÆÒmØ–Y }Ü-`™ÕÕ'¯ÀNͧ§m_Ô’ó-MDDO‡C9D/œêú+'÷€G… ØüË,ùc7ΉÕP£â“QR^ïÌ3Íôb±äû™Ø–ZÝ&/Ƹ& Ð¹‡ø5Óðñàýû5Ô~û#|Öݺ¶ý0oá‡0;ƒ¥FbÄØiXs0,WD”•Û Y³Påáá߆ÂãÖF [%\[?ŸÎ?§wÞBÕ2ú‘Uõ€§µ*•OOXÊ´{ðô¬A©*¦>¼hòú`ú—šu,–Ï\€­÷Z¢K“G§‰,¼ËkÇ*ìý[Â2ãR+ºÃÃVE=78—KÂí»5ÐÒ¿.G3ˆˆè© äü5VžgÒy0鉢h¡™¢ÙUô¦IHH€¥¥%;‚ˆˆˆž&d7ÖL7 ]ÅÚyI“*Ï$¾#âw±¢WcÐïŽdþ܉ˆˆˆèðòñìØ1{ÄÈy»q*'ï%""""ñç »¾ì‹·¿Z=çn#-K‰Ì´Û8sxfÎÄ•'N}ð‚N櫺Œ)m] pû²_ƒvˆˆˆˆè…{¹3JÂü•—‘8öýkǸÀ(íNÞ}b3ø•Ï7¿\þB6Hua;þøS“Œ-_vˆˆˆˆèÅ{©GÄÅô$$fJå'úhàå c˜YÕEËN½1¡³m¾Ð-@¡w‡æ| /”³rƒEÓ0tÕùœKp?”‰s›gãoü–+ôë´„}ç ˜º'áÑuB´#Ñάz`Úß7±cú04¬ïó‘øgÿtì11š|¬º²M­ X¸¢íФœ³‹é8ú=Úù·FEkWT¨ç‡ÆâÇ£éÅD,èæª™ßýw 3{N¨1î(²¡Æõ"ÛÑ<õ+Þn‡*µ] WÓÕ›ö@§ñ¡ˆºÃr"""¢WÁK=".Tª+v^HÃ걃a‘ö!Æuv€y!—"ÌÚó#:†§AiPr17ÏÄì‘Ã!·Zƒ½¥‹“¨qaÅhøŒÞ‹*@®«rÊDœÚ†1âØÜß°´ù£½åY¬üh$¾Š:Q†Z†ú¸pè0.ÜÏ)t+¡ž*:¨c*u¥ñó‡Â÷Ëh¤¨Èõô “v §ŽžÆm=}Í®Bf ·\¿‹hG}- ï÷œ†-é «Öƒa.^8Žõ›êaà§¼Ö6Ñ«àå®×qÀ˜Éï ¡¾&âÞŒÁO#ßEífCñ٦˸ûÄÌ"²Ò Áþ“0Ê·ÊCô {ðuŸÿÁêq¤å¯uƒ0êíªÆ¾õmýdŸ3àŸ””¦-Qž9Š}·Ôš­®Œï¿ [ÍŒ‚¾ Þ¯9*izBõïì<¯~¬}£V£±î›ÿ¡SóÆp·6(òpÐì3±8˜¤y½Üû¢Žfù²ræpñiˆjeØÓ [{8kv2 ¼„»µ‡ï¨%XwÕžŽàEþˆˆˆˆÄË,ŒÛaZèœßðz74€L†C3¦cñõcsÊ«UƒÕÃ$ª=m ‹¨¤ÿ«S’!ådÈL`^ñѦ+Ì*ÂTº«NÅõcÝcm_¦%¬ö¥åK É*¢ŠYi"± *u)~h–í±pñ`Ù”‡™€½Ë@ÿ@xO؇ëj¾©‰ˆˆˆÄË”,ݺbÁ¼ÞpÖl1û"âÿV=Ùe2È‹Í2“ŠÐæounÜy”X•·ï@{Wf ³Šw‰L^ò.*@¨†:7n« Ù­È¡ÎΆòa¿Ë êRýØ,›õGø¾­ˆ]4 !Æš“Y8 ßUò]MDDDÄ þl²c–à#çâçݧp%9 Êì$œØ{ÿHù[nêUJWˆ¡¨çšMV߯º%8w_óàýËXºl¥Š’ªákS|—èééjµ:å*.$k^(f"5] E]{8—´ÁzÍâ 8wOÔ¤ütœÚ¾áRÉ‹Pu4¯‘»¯«´uèñË—cí-u‰ÛQ_û»âï Sa§À~XöûøI£ÿê;¸vKÅw5Ñ+à¥>kŠx?ûV®ÄÊsB¡JëžèU¯”ûåÜðñ8?¬¶×6N@ýºßA_¼‡Œ¬œºîÎc߃·hUEï»X95€¥ü8.§ìÆû®M0T– Û¡8<Âû×ÄÆq-bì¶NF9dážÊ W·C;Ûrðiã Ó ;‘˜°ï4Þ‹úJ$§ËQ©¢>„Ä̵³Ï9 !ï„!­²5ìjCL8‡cÙšn1t…¿³ßÕDDDD¯€—zD\Q§F¾Ûîµ*ÁPG¹®,뺣Ç'?bÿœ Ô•~sktþû~†÷¼kÂL'Y Ôñ ÄÄ_—bi°E‰:DÏkò…}%]Êl¦¶hlcÐü³ùXÿñ[ð®i =1 J=38·í„ iô^€EðçX=®-Ü«U€ŽTœbÚïN˜ƒ½Ÿ¹C_(Y;Šênèì[¦™×p<æâS+ AÓNøá·IèSMÆw5Ñ+@ §tYžgÒy0鉢h¡™¢ÙUô¦IHH€¥%/kJDDDO²k¦€öB2Ù&UžIäð)Ñ€AœˆˆˆˆˆAœˆˆˆˆˆAœˆˆˆˆˆĉˆˆˆˆ^ v•µÌÌLDEEáÌ™3¸sçŽö1SSSÔ«WÞÞÞÐÓÓc'ƒ8»€ˆˆÊÒÅ‹±~ýzØØØ 00•+WÖ>~ëÖ-ÄÆÆbîܹhß¾=jÕªÅÎ""q""¢² ákÖ¬AÇŽµAƒ™Á½°âö4ºþ"Úÿ¯·‘ˆAœˆˆ^wIIIÌ”DDD<1OÞǤysϨR2"Lü‚Ñ8n¶=uêë›±îBstpÓ…*w¶»ëÑ×®B“5ó¤®AoÏþøvROø{»Âѱ B~:ŒT1ß|YàÚ“§¼6Ò|š£Ï¼­Ÿ?/gØ;øà½yqÈÈ·üì#ߣƒ_ ´h!Mž°·®ƒïk×5%f†ùÀËÛ^>í1jùIG°[]Ôýß2ÜU8:Á~MáÓ¬)¼5íŽY{ Ùª …nÓ9çˆAœˆˆè!·D¯x¬ÝtjÍÿD¬ÇõVá¦'JOH}s/ŽUù Q1ˆ AÆÜØXÀ謘tqFŸ`f¾Ã¿àÒ7ñÜ|"ÆáèoHøiv¥?þ÷°nçnìÞ½?÷o3Ï0¢U9ˆ©;ðåG‘p¾U[~³?lT³Fbþ©<éQ^]§~„n¶ Û&µF…«1fän4˜²1±±Ø3Ã1cF`Ùeõcíf훩 °â@9ˆ-ó‡¢i•ÚèÜÃQ¿oÁ-Q»AØþÇ^ØtFõÍoódûŬw©û¨€m4Ð.gæm®…ñÇqry,9¬š ÁOë#±/r?öÎóÁ±)‹­®Uè6Õ–ó7‚ĉˆˆ´*V¬¨-AÉ%º0¿¼IóJç/4ïØ×GàjößOCÛ`GèõFlg‹rÒMëF°7IAbŠº€ùìTúš›ú œP·¼mµ÷Ë×wF=E2’2ÄwRLÁ Æ7³ìt剨}åônƒf>>ðí8±:"Òn©‹Üº¬¸HD[·G7g#Í´ƒ†!èb{§>¶Ÿ¡ë‚÷?#¤Û(L=Œ;ÆU`$¨Ü¶'Zœ ź+šÝ”ñÇQGt ¬†rÎÿdûÅ®÷S÷Q>òÚè2¢'\-ô¡i¢ˆúþÚ²Ÿ½×»vEȧëq59ébáÛÄC¯ž¾ˆˆÊ„ö<áÒ) %ƒ Òþ›[Ž"…ðÜÇ$Ò¼Ò~JG@yï`øÿk7%b#1ÛNóUv¨¨—”ƒ¾žððõ‚PÒùt §“ç~!/Sý³£GA›Y¿£ùƒ¹Ôj–]1{÷x¸”ö›V,>È ¦MñѪ=ès*á¡sðî 0hÅt¯Õ=;LÂèÕ'ág†ÓÞ}`&mK!óWË·à¢Ö;ëéûè 2cT4~4÷Ý_¡ß2#ÌY/cÔ—æ!8èdΓ Þ&¢×w(‰ˆ¨LHWÌ”Î.M…BaÆaÛ¶mÚIº-=&ÉOzM©•ó@‡Ö‰X0öw´k÷ß–(¤Ç`ú šƒ!ŽúV8ùÁ'# ³VœFº6W+‘zénå/öt5A6×<¡ëêï«áX—3žqòwüï€æF…\õÍ¿qî`Zß½&ü€A61Øýç=Í3:°ÿ_w˜liá×àß­¥vä»Ðùóµ_âõ.Õ¾Óãm°çì”$Ü«`óòÒèx âVm@|vîóoƒ8ÑÒeë¥+f†……= 㑞“æ‘æ}ºKÝëÀ¹C Ì”vèXý?ü"SáÂÒ ˜ýW þœÕmüýáïߣÃoÆ­ñÕ’a0 ë gg4rò@Иµ¸?‹*ÜÐõ]},ïæ ¿Ñá¸cÖ“jscÛÀÃà -€ó7ÓÑÃúñ­T]^‡1A^hì)ÜØ ¡•?ƃœ/v«`„ØìCDb[tñÖ/zþüí•p½K#_‰O ø 0 Ša¦¡èâÙ¾þÝ1WhŠæf¶¹ m"zío Ï3é<˜ôDQ´ÐLÑì*zÓ$$$ÀÒÒ’ATJy/q/¢0ÿ%î¥ ÎKÜ?OéØ>ÜßÕXŽ-6xMjP_Çm¢7 d7ÖL747¥+—e?˜Ty&‘ïe""*SRÀ8p ö¬R}xî) ¥3¥špé¹§ §’¸fæGÖÇ{v¯M`}·‰HÂ÷3•9)hçœ[»;ãEQžÂÜwû`Áø}>ïT“q›ˆ^r,M!*KSˆˆˆèBv±¥)ܵ$""""ú0ˆ1ˆ1ˆƒ8ƒ81ˆ1ˆƒ8ƒ81ˆ1ˆ1ˆƒ8ÑkEÁ. "¢²–™™‰¨¨(œ>}IIIÚÇLMMQ¯^=x{{COODD âì""*K.\@xx8lll„Ê•+k¿uëbcc1wî\´oßµjÕbgƒ8QY…ðµk×"88XÄó²²²ÒNÿý7Ö¬YƒN:1ŒÑ5âDDT&¤ri$¼ žWíÚµµó¬_¿^ûšQ_ÆüöÖ¨Q˶¶¦ºMðÅ¡ìB_"¦„c€×¬K‹^¶êæÖD­zö°·o€ú œÑ¬óÌÚ}Ùϱ¿J¼~­ë)Loe +§‘Øž‘ï¹ôíáhë€8§zëDDO#âDDT&8  ÙE…ð¼a\šOª#oÑ¢EÉŒ¼ ?µÒ-ÙìFM1üǺ¨b"”`択wÓ[èÙÉ8³s>>Œ¿¾Çœö–ÏeÔªTë——¼l÷`ížT´zÛ(7B#eתXòÿ`ˆè©pDœˆˆÊÄ™3gàìì\âù¥y¥×<7‚)ê{Ø¡¢”)³Ï`fp/¬¸]‚‘^Ô ƒy]qhÊÄf¿€õ+ÕëŒÑ< !¯Ý‰‡×b"¶­‡×[îÏ6Âö´ëDD âDDôß¹sçÌÍÍK<¿tgîUžž7ÂÂ'xNI9ûæwñÅÐ7!Þ]¾v=šx«>ˆ910µcK´þtÒ‹O¤0õ @ãÄ#8|Eªó‘³C‚|àåí /Ÿöµü$rªCŠx.u z»÷Á×_÷€¿—3œýÐaÒ¤»~ÉbÎ|žýñí¤žð÷v…£c„üt©î7ˆ0ñ Fã¸uØö`ÇB}}3Ö]hŽnºÈ­JQ_YˆàF#±3wG"{'F6 ÆÂ+jˆiǰdp |¼¼áéîïÀqØtCýø:i·k F´÷‚“½=ì½18솦ljˆAœˆˆÞ,b Ö t„]Îä4ïÉ`4 ŸÛügÇâøÂOðGí øê-s<Ô•×Dש¡…F‡í¶I­aP’öÊUDEýt$kR³˜º_~ ×é[µå4ûÃ@5ëÿìÝ|ÕÂÆáw7=¤R EŠt„z‹ˆ Eº ŠˆzmWO@QQE±‚•&¢"RDŒ ¦4Q)BH $¤'»óÍ&AC ÅÝÔÿÃot³åœ³'{2ïÌž™©wwÙò|,+Çþ¤½WOÐÒÈ-Ú¸àv%¼1J3vež»Iqlµ¶^õ”–¬ß¬Í‹)éí×õÍy÷à²Þ >­ÓKšÁØ®CK¾ÒÑoVs/ÃñðE¥ÿø®^‰ê£9ëÖë§Ÿ#µüÝÿS»ògF#á[=ýßäöÀmøí7íøi±žíRžà8sÄNá8Oø±cDzΌr)§3 ¾ô ,êóöù戗V§g&hMßAh½Mï/º^Θâl$Ç(&%H5ƒ­ÊܾJ·*òž.šuú >*cWæñ ?¦JŽÛ¡êÚ½ª²Z]ëõ ›¬Ï·ÄɨvV…Õ£WMy;nWm¬AKu<Þ,£Üù&}û©ýÍí5~úýïöëµxñ)u{±‘{J÷LܧÎß«kÍ|ëÚQáI‹4}În%feÙL%ìß/Gqy=–Ô·jÙ7ûå8QcêÞùZ¸¥šš‡ÿû|ëÝR}:׌'æÊ¯W/]sÖŽs‹°Óvkû>GÍ:¼ôkmHÉyÇþÐï'¤Òõ:êîg^Õ›±#åŒ×»7ºN-bëƒï£²Oã˜~\Q1©|Ђ8 °q\¶¾—ôÉ+ŒŸ¾èãêš—u©{#^_=T6³®úô¨rÎ ÝÑ®¡CËjÑÀ–jѶ«Fnªª¶Õ²ëµøR£{¶V³Ví~Ý­š_nŒFt:sæ¼%¸‡žûV%¼ÚGÍ54û¥&­=ÉÁš€Y,Ùß9·\‹GÎâeFsÙDW¡¤‰ŠŠRHH\¦Ó—¸wœ+ÜqŠÂ³/qïx¼Ä\â>ásÝÝb‰znœ­~þ|6€²›™K´y3ûk©ìÅ–k1˜#p*Ç…zz衬3ˆ|ýõן¢Ðq0§cN¸ã±ËÚ^ä]Ú™L”<q€Ó9‚¶ãŠ™—|ÕL ˆ§ è§v÷£œkq€ € ÄÄ‚8‚8@@âAA ˆ ˆÅKÆj ­¬ŠUoÒô}6ú‚8gIûë½po75¯W]U¯i f×÷ÖýÏ| ŸcíùR¿ýðlõ¯VMƒæ—QÊ€ àßKýI“î¢éËwè¤o Õ­¨ôC›µ|ñvò¶ž1<­.¡†b~øV¿d•r ˆp‚ÌßWkõ¡ Y¯º]3\¥«ÖkûN3ˆÏ£ëýr?ÓS ‘/iP»úª^­ŽZô¥{Óþy8åw-žx·:7«k>^K ÛõÓÈ·~ÔÑÌœÇÓWêẕTcð\ý¾öUÝѦŽê>ð¥~]øˆî˜ð£ÒŒtE<ÚP•*VU÷7ÿcŒ·Y³í¯v ¯Qµuvý­š¸ò˜ì9eU¬ÚSoïÏž.c?8S}ªVT¥ºkez¦þ¸P¹Fœ~~÷ÿÔ³u}Õ¨Z]u·UÏû&jé¦ÝJ6wºÈç­ßÒåUÖÍ¢ßc×é³E[Õð¶Æ*ãUA êœØ7ëñ©vÓPÕNZ¯_7ÍÑã£k©Å¢TMÑZüÈ ý꘬åê©eÛÝò³-¿{fkÓTÙÛbÞÓJ}—ªªÙgŒžXFŽ{3w¼§J:ëÅ¥³5 ‚yoFº2<<Ì4±w婆GŸ·Üä¯cuÒ.Yüªêº;×­ ¡ß&¹Y.¹Ï\õ€ÍtÏ,þj1ús­øàIÝVN™×èýÑ}ÕåùÚŸ™ëynUÕªue9²¹GÕªbÞ0ìiJÏlûvé÷LCî×´U›ìôîY»Z”³ÊHÙ­ûräÑZ÷Œ8Â/,uß9f‹¸Õk§6åržëá) ¾âÒÇôi;@ý«{Ê~h±Fui®vÆê£­'9˜@§ €‚à£j†jÚ’H­ùàA…ùeêÈ·/kæÆ\G:Z|å盈-Ö Ös­E–Ü™Ûâ'ÿ‹ï}6ìöìÂÌ[òßFΉ]Œ”d%_ÊvGéŽzaé Ís‹š”ËÐÁµhì€Áš¾+“€  ÿdìùN_ütP‰YÖ[Ww «¹KöDJ¼´ýÄîµ¨Ž»E™ûÖjý‘ìƒ3~_¯1vY¼ë¨Á5îy{7kv¨NOËø;È{W©¦ n’m÷zýt<çÞ´£:rÜ1¯ÄCžžf<·Ñÿ96ì:¶qƒþʼx¹Fzš2ê¨ûðiúzÝ må-¥ìÔÚŸóa”hÌòYæžùzä¡¥RpUÕª^V–˜½Úy(Sn:ë¦f—¶]õ éû¾ølÆ÷ºIß6 Rô/‘Úé®w= ›ÊXò˜×í¥ª5Bä¦úùµ»u×¥åÓúI½uÏÍêWû½¶k¹FßÔC ëø*æ·ªþìÍìYOMùhî÷Ñš7¼7ôÐÞÈJ?cž÷ùË\nš:¼vB-ZÔW%ŸãÚð{º ·ŠªU3ˆ Dc8Ï<êuÕíBu•ŽiÏÖ­Úw*H¡7 Ó› ^R×àK<€ÑRF]_úL3FöÔµ^‡ôÓU*T½G ùOµ•_Þ-PØÏê¾Vå·Sk7ìWº——,4bÖ;zc]œüUkܦ“;ª}-s{ÝRA·L˜¬ÁÍ+ÉûÄnmÚã®?ÒØV-׳j˜yï×ê…³5ãÃå:ØB·>÷ŽF·ñâÃ(Ñ,Žÿ›‹[®Å#gñ2 £‚¹l¢«PÒDEE)$$„ŽW²›™K´yÓqŒœÅ–k1Ø#‚8@ââAA ˆ ˆqq€ ĸŽ;]ø7ÒÓÓ•œœ¬ÌÌL:(ìÁÏÝ]¾¾¾òôô¤3•µ‚P¸96˜ãããåïïO/˜š¸bŽ=á„p èpŒÕÀÀÀ¬± ‚8 sì]#„E/Œ3•¬ü.耳ÙÌåèI›ŽœLWrºÝ%uøzZU1ÈCW¹Ë-ÛàÊz/V6‚8yŠ6ƒèÁéf¨ô’‡k¾|MɰëÀñ´¬Û•‚Üó­ ®¬÷be(^˜špºÃ']ÂeWöÒ‘øŒ|mƒ+ë½XÙâäÉ1%Õ!ü4o³Žä4{¾·Á•õæU6‚8gËØ¬‰m«ªFÝjP¿žµê©!o®W¬c]œü•î«;XóOÿªŠÌí/ªëàOW]€ ”8nÕtÏÜmúmç¯Z;»ŸRÞ¦V§8©ðLíùvJwºAå\^·´C«ôñ„¡zâÑ!;âAM]¶?ëÇ<¥FhÚˆÚgsV+Òµó½;õÈì_•á²:Î’ü¦Üq›žxb„žõ žyy¾ö$| ‚8€B”ÈP¯Ÿz„&jÿ_qrÊŽjÛ>}ûƒŸ:u¬pÖ wA]@^R~Ñœ—?—¥×D=?å-Mzuš†t¸Zn¶?õÅK3µ×–OíHݪÈÃuTýP„v§o̸¦=Ö27èÞ‰¯éÙ—_ÕÀ2+5ÿû£"Šq…F¦Nþº@‹·…(¬q¹³©MûæTߎí~];µ ï­Ñ_ìW†ÞîÝL¯Høû™‰ßŽPÓîoèw›#S¬T„w'u¬h½H](ß|¦ýàLõmÌX¥‘ûjæA»ŒS[5kh…·n£V-š«M±Zíˆõ†â7¿§a=ÃÕºMµ6Ë{äÓJâ—\b¥íX©-UèæÐàì϶ÅKÞÞiÚ÷ÍLEl_«y“ŸÖ´…Û”²ÿ#MœZ±î>U±f*ápŒTÞ*#a¥žµFMß]¡7jùʳLô©w›,Õ#õ8KrÉc(%.N^å+ÈëŒû}T³[wÕù~‡nýj»9>¢[•´7JU^rì9¶fMq^3âõ˺8…ª¡Êjª“ó6(±yùåÑg±ÿ^ïÛ)/»M^Õhp‡r²ðÁâ XÖ¼íU–ǰ´ŸÐ¯ËßÓKv)ÉÍSÖô(ýïd˜ ‹Êu»S¦¾¡/ö×½^ßè³tˤJ²Újå÷6ÝðÂÕÿ\ äBu]°ü¼›îÙjþóÁ ºu§úôï§›»·Q53]dl_¥ˆƒ[yOÍ:ýd•ޱKñÈ"ŸÀ¥ý›õ-‹ÛE‡Ds5*íü/nkµ~ïQÅO¦õæÆAr|mŠ¿^×{»¾²§¦< š|üÄ¢%yÕÝÿq€Þúb‘ZZeßÿŽúöÜ™ý`©¶º³ÏózláNu X¤ÝmîUײÙ¯Òwiô\ ·W¾c·¡æ³ÚR•’žý“¥t;ZðƒîݵF‹ç¿¥;^›¡!sfé»]–z3bœšð×޶ש· µdO˜úÕñËþXŽ—UÖÌte]ˆòôGÕjuÁÞbC1‘?ÊmÀTMìTÚ,ßбÅc4ký1µ¿áŒÈ|n{ÀÙçtPTʈSJ©ò*ïk]{¼¶,øZ¿ý}Ê5x»‚V¼©)‹¨Ó­7(ÀbWôªï”ؾË%ìË»|‹°Óvkû>ÇlÙ ^úµ6äœhÅ~ìý~B*]¯£î~æU ©±Y;RäÚQáI‹4}Îê™JØ¿_1™ü6K*‹[Ý5¼¢gÐãÕS£Fhvdœ ÷újÕøO}2nŒ¦ÎÙ¨$WÁh?¨È ÞjÑ<8'ä[T®m¸¬?­ÖÑÜužÕNnÀØG£€®ÿ§‡¿©[ZÍQ@`jvk§öe£ÿÙ²®ÜWƒjLÑÿm¿E Ûø˜Ù:ZßwBת} ƒ=ïò-5tèW9°¥æ•*£jí;©mµ˜¬Çl¾ÔèsuÈæ-•n:F“:ùÉâÛYfEiüø{>5E†aU`;4ù£‘*Ç_Ÿû9ö«Û_C_ìÎ#a÷MSØß?5×ı¹ôî á¯uø÷Õ[«ª÷„ñg¶¨LO~.ûö?uÕ'ðí¤‘ÓøÈõ÷ÇAÙ_:»åZ[Úp¹ØØX•-[öœûWïMR½RùÒ†]QIj_»T¾·Á•õ^¨lÀÕcN ÙÍÌű7+û«äìÅ–k1XOÅHêžõîšzºkI]B8…sÄâ s—Þ¾­ZþZÕžž¤Û*1´Q°|=­JÉpý%¢RÍ:|½¬ùÞWÖ›WÙŠvšÅb$×ÓCóÖë!z…DÅ 8ž¦ÊÁ^òöpM¨tÖCqiªZÚ3_ÛàÊz/V6‚8yº*({õr$>MÉi®Ù+íØkì¬!ÁnùÚWÖ{±²ÄÈ“#FV2i¥ ÷׆ÂðÞ LB\1wwwefrbx (qŒYÇØAP„ùúú*>>ž0¡ž5vQðØ\1OOOùûû+11‘0…àçî.??¿¬± ‚8 „qVêpù˜šÄ‚8aŽ8à_IOOWrr2kE!ø¹»g1…ã:â€bÂgL à¼Ä@àØ`vœrÔq¶#ÂxÁcj àŠ9ö„¢Ã1V³Æ.â€"Œ+ôE3Œ3•¬ü.耳ÙÌåèI›ŽœLWrºÝ%uøzZU1ÈCW¹Ë-ÛPPõ^I[Ä%L´DžH7C¢—|<\óåkJ†]ާeÝ®äžom(¨z¯¤- 7¦¦œîðI×QGÙ•ƒ½t$>#_ÛPPõ^I[Ä%ŒcJF~Qo³Žä4{¾·¡ ê½Ü¶ ˆ¸˜ŒÍšØ¶ªjÔm õë©Q«žòæzÅ:qÝjÄ/Öƒ­Ô—qý AÀßܪ鞹ÛôÛÎ_µvv?¥¼7L/¬NqZñ–€vþÚµ²Ð×(Pi‡Véã CõÄ£C4văšºlÖŽyJд3´Ïæ¬V¤kç{wê‘Ù¿*Ãeuœµ1|âk½8úcº” l#VÞü?=9n¼¾Ú•Ƈ ˆȧD®€zýÔ#4QûÿŠ“ÓvŠ[J«^˺ &‡£ ¥ü¢9/.K¯‰z~Ê[šôê4 épµÜlê‹—fj¯-ŸÚ‘ºU‘‡ë¨ú¡í>_ÎÍïöœÓOÛ¹/T÷<;^½k.ض ˆ%G¦Nþº@‹·…(¬q9YÓWjxëáúð˧շymÕø±¢ Cñ›ßÓ°žájݦZ‡÷Ö#ŸîT’í½Ù³™F¬Lü»´Ä•#Ô¬ç›úãÔWº¯î`Í?阚bSô¯èîŽÍÖ$LÍ:Ü¡I+ÈqVYûÁ™êÛx¤VÞM˜±J#÷Õ̃v§¶jÖÐ oÝF­Z4W›cµ4𹩏ti;VjK•º948{dñ’·wšö}3SÛ×jÞä§5má6¥ìÿH'ÏÐÜIÃõÌë+ãäUÉ["]ïVõnpD‘Ûξ°IÊ9íqÙ>iã”ö|1Až¥IãFè¥Yk›yBÛ¿\ª}±ë5ÿݯ¹$ŸÚ ßq®# °°í׬¡šk¦¯&êõô{z´‰‡ãtq_ëeOiú’m -ç%·SßéÑQkÔôÝz£–¯ì1ËôH¯‘z·ÉÝ~kmÝôÙwŠëÔGÁŠÓw ֨έ«ºÛ†ÖýÑ 5zd„¼·J³šú+yÇtÝuç}üå<Ý•ÇóôßÕ+Q}´bÝ}ªbÍTÂá©<Ûó¸äÔ©”¸8y•¯ ¯3î÷QÍnÝUçûºqôCªíæ[•´7JU^zUËX³¦8¯ñúe]œBÕPe5ÕÉy”ؼƒüòhˆýïóôÑoMõÈÄ›TÆ’¤Í¯ÐÛ§ë¾^7ªú¶cð`OU±ë—×·A(¹²æˆ¯Ò¸°ó K·ktˈ;Õ´BöZ8cû*EܪÈ{ºhÖéçxø¨´™‹+ô¨–ÓækÙ±Þ¨eZ¸µ¥n{¥Â_¥oY£MU{ë¹°€¬ûý®¤[¼©etg« 7Ñ³Õ ýçƒ1tëNõéßO7wo£jLuÁ%³È'0@i¿ÅfÍËv»èh®F¥¿¡gœX«õ{*~Ê0­77’ãËhSüõºÞ;ÿ7L’íWÌ‘zÿùuÊJÍ1•!©â k ‚s%^»]–z3bœšœ3Š;i`Ç4mñµÑçú³ãur¼öìoß ãBYÉ‘þ ¶T¥¤gÿd)ÝN£ü {w­ÑâùoéŽ×fhÈœYº½:»épi<\§:.Ô’=aêWÇ/ûãf8>vVY3Ó•u!ÊÓ'«UÎßÎ3ù£ÜLÕÄN¥Íò [ÊÞζ›ÃÛ|ßÉùݲz§ €"¸ÚQáI‹4}În%feäL%ì߯Ç$où¨õÀžŠÿúm½½8^=¶2ï9+ 5í¤6ÿ[¬y[²wÒιúì·†jß2@Vÿ`¦íÖö}Ž™¨:¼ôkmÈ9y‹ýØúý„Tº^GÝýÌ«Rc³"v¤ð Á¥GOÿ¶ºkx;EϡǪ§FÐìÈ8îõÕªñŸúdÜM³QI®Ú%l?¨È ÞjÑ<8'ä[T®m¸¬?­ÖÑÜužÕžD'µÇ~d‰^=DO>6DO¿õƒkÔ½a;5cìM÷ˆ&ŒŸ¦õ±gU梶(”½Ì-×⑳x†QÁ\6ÑU(i¢¢¢’?•9Î#ÞñiÚy¦¦¤¯ÔÃMßUØŠúOÅÓÛΆ¶~¨ñãg(bŠ ÃªÀ:whòG#ÕÒñõºíO½Õ§“^ÑcúîË!ªáÕÉ_é¾& uãOéÖ C1kßÐÏÍÓöx3½ûÔR¯Ç_Ò˜®Uäa$hãô¡ùþ¥—*£jí;©|ä&…~ø™îŽ~UFÌÕ!›·|<ž0TO<:DcG<¨©Ëögà˜§ÔM1CûlÎjEºv¾w§™ý«2\VÇ™Œø¥ziðm3æÿôÔ£èé)_ê¯Tó¤ÕšþÐóŠL¼ðÈ·íÿPã&-×)þ8q.à^[ƒ‡6Ñš ¯jC’“ÊÌØ£7úÞ­9±¬½QH¤ü¢9/.K¯‰z~Ê[šôê4 épµÜlê‹—fj¯-ŸÚ‘ºU‘‡ë¨ú¡íN;_òuM{,ºjȤ74á•)êa]¨Å›’¥Ráºêcjåg¹üó»ß8wÕO…„‘.¿ŽOè±u½õÌÛý´ø±Fg PCñ›ßדã?ÔæãæZ×­œZ?ø‚& ª«ÄÅCÕvCÍX0Dõô»Þ½ý~ýzç…¯¥·6’ÏÍ7èƒð'´èùÎò£§Q€Òv¬Ô–*ôbhpöž ‹—¼½S´oñLEl?¢“)°V?=Ðl›¦,HÕ5™¿i·ßMv¿s¯˜¼%BÑõnÕnïkù¶d5lá›{kAû¾9³=ö•—ó»2OÖá¸R*[Ö|_©«õο«û”TS‡µî—µä ‡‚‚®R@Úa•ü²nv3_ub½æN^£Ø¸ ê®í¢Œe®l'‚8PbØÍ•Ôÿéµ ß3šÝç3ÝŸ{ÕðžµFMß]¡7jùʳLô©w›,Õ#=Ÿ×Ó«ûiÌ›­4Áóy}vÍ3ZØ£©‚ºŒÒß}¬v‹>Õíe-t1 zkS)qqò*_ᬰ裚ݺ«Î÷;tãè‡TÛÍ1c«’öF©ÊK¯j`kÖ´ç5#^¿¬‹Sè ª¬¦:9oƒ›wȵ‘zn{œVuô ½3n³ÒŽ$©ÞC“tw]s5œúÏã©›?Ñ©}õô‹í¹KsGMÕéC-íÉåÔvøÿ©W¼V¿ð¨ÖþÙCƒ\ÔNq dÊšwküàEºóÙÏtÓÓVŽÏ™ÛW)âàVEÞÓE³N?ÙÃG¥cÌÕt½ÒêôÌ­é;H­·éýE×+ˆÜBÇ"ŸÀ¥ý›5/ûb¹Ñ­Zs5*íü”ƉµZ¿÷¨â§ Ózsã 9¾Œ6Å_¯ë½ó¡*tуïR©ïžÒ[eiuæ†J|T´kÖ’¿cüzTWµJn:xº?*ÖTÇŒÅWe¤ó‰âœÌK¯^ÝþO/¬ê/ÓwÛí²„ ЛãÔä<#×H9¡ãé¾òu?®)æþô$ Ïש· µdO˜úÕñËÚÐ4 GD·Ê𙮬 QžNèÖ6DÃù£ÜLÕÄN¥Íò [¶¡°Ö € €¢Í zðDº½äãáš/_S2ì:p<-ëv¥ ÷|kCa­@ÑÃÔ€Ó>éÚîà(»r°—ŽÄgäk k½âdMÉpe?ÍÛ¬#9Ížïm(Œõ ˆ¸\™»4åÆV»6팻SWVóÎS´+¯ãi’¿Ò}ukþIƒ~€ ಸ×R·.þŠX¶Yéß™¦ËV+¨K7Õb*(Š™´C«ôñ„¡zâÑ!;âAM]¶?ëÇ<¥FhÚˆÚgsV+Òµó½;õÈì_•á²:Îd?7~Š>ž2N“ÆÜ¯§^]¦Ã“ ÄäG¯«®½µjÙVe˜ÿ¶,O—nªkæp#z¡FŒPýÉ«´ù—_ôÃë-µyô}|àòØ2âÖiKÀãúrýfmø «ö¿0\Ÿ–FK"·hã'=5í}Ÿh>/á;=;jšN]¡õë×kí¢e›>Rï]ƒöØŸ´÷ê Zê(ÁíJxc”fìâ%›¡”¸8y•¯ ¯3î÷QÍnÝU§\+Ý6ú9 ï*Oó¹I{£T忯êÙ‡»¨œÅ™Íˆ×/ëâ^C•Í Ó“ë6(ÑÈ»=^ùÐ7©'üÔòÿ&jì‹SÔ˺@‹~Nâ#ÄäCW½nåõýrmOÞ¦åß{«s·ºYÓRÒ·¬Ñ¦ª½ukX€9`-ò»vni°]?lHÐeí$ôh ®=k™ÃŒõCUÛ·¡ºö¨™õ³o½0Õq?©¸$C™ÛW)âàV͸§‹® ×õ7OÒ/†NÅ\æ™·hµçz­^®ái\BH°d­×ÿYÉÛR•’žëuoùxYþ~²Åâ!/\?Ÿ~ž,!ôfÄ85qÿõe…ŒÜ?™/±XøE—pž ®SjÉž0õ«ã—ý12'3¤f¦+ëB”nÿWçb ÅDþ(·S5±Si³|CÇѬõÇÔþ†3Ró¹íù·9¼tuUŒûZ;b{êúrn²ŸØ¤1UÔ®¬¹±qÌBQêiR}¯ýù{¬J· foPÌ1ÆB“Äë«['CKÞ\"uê¦ú9!سi'µùßbÍÛ’½0@q_õÓ@ᎠnºQžï.Ó75ø{pZÊõÖ¤iõÄ]Ô2ÞLÃ>µÔë…©\ÕÜŽÎuŒ™%°³†ýJ#¶Ô¼ReT­}'µ­sùAÉ,g¬(§¦È0¬ ¬s‡&4RåÜ/£>ÏZ*»çqÝÔæwK)­¶#§êznüš‰âò«Û_C_ìÎ#a÷MSØß?5×ı¹ôî á¯uø÷Õ[«ª÷„ñg¶¨LO~.ûö?uÕç¼÷ Æwk”¹œ÷ѲáüxWù±µ ”œ¿ˆ–ì[®Å#gñ2 £‚¹l¢«PÒDEE)$$„ޏ ŸëîKÔsãlõó§;Š³ØØX•-[öœûWïMR½üÙ£»+*Iík—Ê÷68³^ÛþõÌœ óDWù[®¬^ÀcN ÙÍÌ%ZRöWÇÙ‹-×b°G€‹äž@ /nÕî:ó%sÄNçëiUJ†ëÏù‘jÖáëeÍ÷6ÆzÄ@ è§v ~tEIU1ÈC‡ãÒ²‚£+Cø!³ŽÏ|mCa­@ÑÃÔ€Ó]”½z9Ÿ¦ä4ׄqǞ᪥=ì–¯m(¬õ ˆuÔ%3V r/qm( ï@ÑÀÔÀswwWff&!Ž1ë» ˆŠ0___ÅÇÇÆ"²Æ. ›C€+æéé)%&&Æ¢üÜÝåçç—5vAƒ0ÎJ.SS‚8@à"Ìü+éééJNNæ`M (?w÷¬3¦p\AP B¸ãŒ)œ—(ÌŽSŽ:ÎvD/xLM\1ÇžpB8Pt8Æj```ÖØAP„q…> h†q¦’’ß]p6›¹=iÓ‘“éJN·»¤_O«*yèª w¹åc ª^WµAPŒD›Aôà‰t3zÉÇÃ5_¾¦dØuàxZÖíJAîùÖ†‚ª×UíPp˜špºÃ']DeWöÒ‘øŒ|mCAÕëªö ˆŠÇ”Œü¢ÞfÉiö|oCAÕëŠö ˆ%Wæ.M¹±•Æ®M;ãîÔÕ£Õ¼óíÊëxšä¯t_ÝÁšÒ(ø÷‘¾LCêõ×ì#¬ì¸L |ÖR·.þºwÙf¥·k£ì³º¦iã²Õ ê2[µ¥(fÒ­Ò‚i§¹i±ÙU¶ËãÞ­ZÞ¦FhÚã¿«û”TÓ)G¦kç{÷é=·Ñzé?×ÊÃ%uœÉˆ_ªÉÃ>ÖÉÊäeO—­T}Ýx×½º®ª €   †aínUêþeÚœÞF­I<}“–ÿà¯.ï×.ZƒÔÂo‘ò‹æ¼ü¹<î}^χËj¤)5ÍCn¶?õÅ+«Ôà±ûU;?N푺U‘‡ë¨º%B»Ó®UC¯³wQ{,ºèÁ‰w«ª›¡ä½ŸjÊÔ7åÿü£ ócð%SS€ÂÅëtSßïµ|KöÁTé›—)¢Tu­ãˆá6EÿðŠîîØ\aMÂԬÚ´òˆÎž±b?8S}ÔªÓÇce¬ÒÈÆ}5ó Ý,p‰lz&Mþº´iªFÛëÞwVhñóƒÔ±u˜4 ×]ïlQRÖ Åo~OÃz†«usà ¼·ùtgÎc¹¥iϼ‘êÖ´¡ÂZß [ž\¥ãž§ÃÄÚlDë“Û›jøÊ”¬gen{Aí«µÑs›³òÝH5¿ýE'|®{ZýW/>§:9ÚÛ¨­MÛ ƒÏJQ—¶c¥¶T ›!<+™zÉÛ;Mû¾™©ˆík5oòÓš¶p›Rö¤‰“ghî¤ázæõŠqòï>yK„¢ëÝªÞ Ž(rÛÙ6I9§=i.Øjõ­}‹zÔܦµÛÍñ`ÄjËGOjü“£ôüØázù£Ÿt«Ï÷;Nˆ˜¤Ÿ_í¯§¬–£µ¶¿>ÔSÏ-Ññ¿>Òsã'ëƒÉOjÒã÷뉾ЎÉâ.'‰×U×ÎÞZµl«2Ì[–GȧK7Õ5s¸½P£GF¨þäUÚüË/úáõ–Ú>pys±¸uÚð¸¾\¿Y>èªý/ ×§åŸÑ’È-ÚøIEM{Gß'šÏKøNÏŽZ£¦SWhýúõZ»èAÙ¦Ô»»lgÿŸhìÄ?Ôyv¤~‰\¡W[$hO|vZº`›–Q»ëªhóÚæ»ÌÔîoT¹Ö!Z·r§ùS†~]»I•Û‡«œ£üc«µõª§´ÄlïæEƒ”ôöëú&–$^´J‰‹“Wù :s´jvë®:åZé¶ÑÏixÿPyšÏMÚ¥*ÿ}UÏ>ÜEåœ¹ÃØˆ×/ëâ^C•Í ½“ë6(ÑÈ»=^®ø *SJ‰ñÉJÛò‘æë¤G&¾¬'ŸNíbÞÓ‚M> óÖ®íѲ'mÒÆ¸j©É6ÅlÛ&Ÿ¦Íh1ûô˜š?ü¼Æ¾ðŠºßhíŸ\¨ ˆ¸¬r½nåõýrmOÞ¦åß{«s·ºYÓRÒ·¬Ñ¦ª½ukX€9`-ò»vni°]?lHÐeÅRêÚ³–³Q}ꇪ¶oCuíQ3ëgßzaªã~RqI†2·¯RÄÁ­šqO]®ëož¤_< Š93ø§mÿY¿Õé­×ú™­òPåî=Ô"'­\¸Í‰ªt];ùn\¯?Ó÷jED º?ÒUk¾Óïéûôã†R ¿®rö&ÆêÑ«¦¼7«6Vƒ xç@ТÍ"ŸÀ¥Õ¥ì´u«Ö\J;5eœX«õ{jý”azjÊ*Eí\¥Mñ±‘—®1É ,í§SQGUªF-eÍP±¨FÍEŽSp“f²ïØ¢¨Í?êøµ}Õ¥Á1mÚrH;¶K ÃÊgÍs«TSUcÏâ«€‹2Òù¤Egí p ÆzÝt£ÇH-ûÜ¢Õž7êµz¹†§q !Á±F6ôO8·¥*%=×ë,Þòñ²üýd‹ÅC^¹~>ý<»]–z3bœšäñÂp´ÉbýçuV7Y-ºh›ÝkµW›¤)Z·Þ®ünÔÛ;(Õk¸¾ ÔO)m5Æq”\ÊùÚËg¤8ðlpê|¸PKö„©_¿ì­ã£dn~Y3Ó•u!ÊÓs²­Vv`(&òG¹ ˜ª‰J›å:¶xŒf­?¦ö7ä~ÞyÚãT6%ìøT‹ÿj¦þ÷{+p_e¥®Ø£SFeê¤þØ{RÚ—–ûUÍÕ ñC}™ªÐÛ¯ÑÕ¶Æ:1ïSmMm¢Û®27R:†‡…Ã3€"Š=â@¡IâõÕ­“¡%o.‘:uSýœìÙ´“Úüo±æmÉÞž´s®>û­¡Ú· 8cåkñV`Únmßç˜Íš¡ÃK¿Ö†”+hFhG…'-Òô9»s¾®ÏTÂþýŠ9ëÛnïFÍUoÏ7újojÖs¢W.צ´Kh³GC]ßâù>OçNªèqµ:u0´jú7:Òêz]ëÁG¡8³ø·Õ]ÃÛ)zö=þèP=5j„fGÆÉ0?ÿ­ÿ©OÆÑÔ9•äªÔöƒŠÜà­̓sÆEåÚ†ËúÓj5ιۓè¤öÑ+ôθzfô0MYbW×QÿUC_É£á` ª¼FÓžrÌF?–»O·4óu|- Ðz‡´9®‰ZT²Ê­J[Õ?©˜ú-T‘58PôWýtPx†cƒ›n”ç»ËtãM þœ–r½5iÚA=ñDµŒ7Ó°O-õzaªW5×¹Ž1³vÖС_iäÀ–šWªŒªµï¤¶Õb.?(™åL˜¥ñãïQøÔ†UuîÐäFª\®¿ÖjwhÒã;4bPK½ï]V5ÂoP‹ªÑo³¼Õ´}Cíü,J#_qLC±ªz§ë•4å}5¾·‰‹æâ¢EqùÕí¯¡/ö?ç‘°û¦)ìkâØÜ[~4üµÿ¾zkUõž0þÌ•é©ÑÏeßþ§Ž ³Úã„wx“Æ||Ó ÖµŸÕµç<চwÎÖ¬¿¾Fý¦.Q¿Ó?V»+W?y(lØL§¶€‹ÿ":(ûKm·\‹GÎâeFsÙDW¡¤‰ŠŠRHHä!66VeË–=çþÕ{“T/¤T¾´aWT’Ú×.•ïm(¨zÝ^0vá²ÝÌ\{¨²¿ªÎ^l¹ƒ/¶€@8¯§U)®?ËMªY‡¯—5ßÛPPõº¢½â€b¤b‡Ç¥e@W†ËCf!žùÚ†‚ª×UíPp8XàtWe¯^ŽÄ§)9Í5Ô±‡·jiO…»åk ª^WµAPŒ8"_%3V r/qm( ï@ÑÀÔÀswwWf&—TŠǘuŒ]ÄE˜¯¯¯âãã ã@ á YcÍ!Àóôô”¿¿¿ ã@Q~îîòóóË» ˆŠAg¥—©)A ˆ ˆqq€ € ÄÄ‚8@@ââAA ˆ ˆq€ € ÄÄ‚8‚8@@âAA ˆ ˆqq€ € Ä‚8‚8@@ââAÀYÜé%ÁŽcÒ¶hiïq©rý h8/5 ‘ÊûJí®¦?âPļö“tu°ts]É׃þP´Ä&K[¢¥±Ò¤ôAŠÇžð¬^‡¾P4•õ•n¬.ùyH;c¤úåè“â‚9âŠ5Çt”®5èE_hé—£ôCqÂqÅÚÞXC>æ_:à/mŽ¿e{c·,tF1ÁqÅZ%ÌÀß4ÄÄ‚8@@ââ3†´ôg‹|dQ°¹Ü¾G²;¡Øy+Í27Hô0PhpAÅ?×p5ŸBãûuVõÜ•,­V)ÐWjYÕÐø¦†B=ÿ}ùqû,º9ÁÐÊ&ù¿‚û|•Uwü•}ûô{k^ÙЈ0CJ]z9iG,zx§t_7»†IÉÉbdåó9,YW¶2rÊ*Ⱦ¿ÁÅ|Šöˆò•×Õ†v²ë[íú¦­!ßCõYoQœÊ^÷?‹’ 𽕯mè¯;ìÚ›]+®3Ô8É¢þ_Y4;á26&âÍ%ÐP¯r’Ÿ¹qRÞÃ5m-è¾@ä3‹›.}¤«JIaU ½ÚÈÐÉÃÒ¦Óó/lÒ—, ûĪ ¬jºÂ¢%§þyýö=uù̪2³¬*ÿ©Uí¾³hc¦ùš­ºïOé×­V]e¾®ú¥™Ï7Ò¥k¬ª÷±YÞ‡æó#,ZŸšS˜!½ùU÷¾ÙhQÃÌ2Wæl\¤ç]©šï­´·TÎWjXÑг7Úõ\ EOšåÓÅßßòŸ­ºág3 ·¨ÙÖ«[´ÓlcÂ1‹î_jUœ×„.³èëÄœòÌ~{îs«ºï>s¯ùÖÍV•5Ë>~žv^¨¯.Ô·\ƒo£Ì‹ùŸÓ;~×n´jä Cöµ«•§7˜¡q•ôm/C â-ú¯b{t±ëËrRJ’i¦æk̵Yóp»Ž'Z5£‚]ërM·X´Îª Ɇ>êc¨‰UúÈüù–i]WCÕrÂø:3´þUÁÐôv]eÖt‘v4ºÔÝXæóî¬ohâiµ¹Ap‹gÞåvmaWC?‹B÷™ï«§¡Z9³læ†Kûúv ‘ª˜eÎúÁª!›¤ë¯7ä}Þç<}e‹»pßp öˆ „a—ŽÄX4öW‹ª]c¨…c”aÑ;¿Kƒšº®”äi¦óÞafð=iÑf(4lRšœmf@õ4Ÿ_ÚL¡Ý¯6ÿ:ìI½@l–×Á|n Yæ–†®‰¶hîÉžwÔÓÐÌ6†Ú›Õñ37 .ÒŽËáh†gâÉâæoès«¡º—šÍ×ô«j(Õlÿa'þp¹} àßc;¯Rÿ²¨ô{9»zÍÿukf蛆’¯ùcf‚´;Cúr±U¯å~‘ù¼ziæJ«¢¡)×J,µê³ †î®k.f@-sã×l§¤}2400w¨•ê›k¿Ž ”}_M³Ü*¹Ê¸X;./áfœêf¹òrã[ôÊvi…¹á’àß™fhö5äÌY#îe/¯oÄEŒwUC;ÛòJµhè×2 •±æ ­æíûÙ5ìs.:45ôk=C_ïµhz¤hwš·»jìžg>÷ç\ÓËí¬sQ\B;.U¢ø¹ºÆ±¥ùå:öêß³Ô¢´††> ·«ªù>cöXTogޯ˴]þ™V®¤o\9¦¦ò}Íà˜‡`è¥æ†þÜfÕÛ9ÓD{«k›¯;–wˆô2CmÿƆ¾ïc¨õ ‹fç i5Ó´-× Ý¥º‹~Í5 ű—|W¦T?ðÂå_j;.Ê Ã3~³È§ŠtÇ••›#ýh>û!3ˆWÍ Ä‡,Ž¢³Y²7$R2Ï,so|Þç?»¯.Ö·â€b¤r-CO——^\oÑ>3Z¼ ­-­ØhÑG¤˜4é°(—þaÑ~Çüe3€~z@:–"ÄeÏ“¾Ú7§¼RÒÁ(‹~K—W®ñ1t_5é³¼ˆDó¾éݟͺ*º-èÂíºX;.Än¦ã©Rt’´ñ E#—YõRª¡©æGЖëf¾§Š™fûJif²þëÝ›+d›ºqiiÛï}knd¤šïû—½½vä"}V_e^¤o8_6(ö¸ Oaú]dý7ëwrú·òŸVv-XlÕ#»íZTWj×ܦO<¬š¸Úª§’%o©iU»¦W7²(\¹ÅªQfHtÌ•.hh@[› Ì.»}C»zGXuý'•®i×–pCÝ[Ûõ¼|þªCfzmPÅ®ùí²Ï˜òÏG㟠ݜ–g;Î÷ÞÌ嘀«›‹»›TÆÏPÛ«íZÞÈP3ïêºX¹ÆßÞÉþÙ­¬¡×B­þ½U3Í÷_ý*s㥡ÛŒìç™ÏéÔÔ®áë,zàs«âÍ—‡šåMl* þß?幯ƒãöÙ}µ©¡‘gߢ°`Ò~±úm:äüVÝr-9‹—9`+˜Ë&º %MTT”BBBèˆ"îÝ͆îkl§# ïmµê¿M ãE$d73—hó¦ãP쌜Ŗk1˜š‚8@ââAA(Z¸ €bí`<ôP¼þ¦¡ø`8€b­Iˆ›L?(úbÌ¿eM¹ÎAŠŠ ¥,ÚvŒ«Ð(ú;*øÓq("Ú]-­>ä¦ G¬JΠ?=Ž=á»b¤76¹©mev,'ÌPìMê 팱jñ>«öƪ@Ÿ(sÂÓQ{Âgô „Ä ª_.{‘X‘ ¦¦q€ € ÄÄ‚8‚8@@âAA ˆ ˆqq€ € Ä‚8‚8@@ââAA ˆqÄ º¸"Æ¿ â\Àz9©À3.ijnsà_oã<9ûœ ~¾Ä€ÄÏÉÕyMMùûE6›-‰~..Ù¤‹ì ?_?;¹ÛÍ%ýرcèRàâöîÝû“#CçdéKÚ#nœg±[,–¤±cǾe³ÙNÑ­À…¥¤¤œz饗Þrdèóñ3¹›ù¤Ó·-Xì[·n=õ×_­ûöî 5 Àhf:ÝX\–ѹì¼FÏ`O"…ÒÖÔ(?ibí¶óÇ8D˜ÕGˆ¸ÙlW«ÕÓ8Ž÷3ÿÝápHëõÚƒn醷ý~ÿ²ÝnŸw»Ý멱çMì¯0~DùPBüÝcweLeÌá½Ê9?”÷ƒÇ s\–ðùŒøÇü¾Œã— Ÿ Äóá_!ÒßN ¿‡H¿+ÑwÏ` Ñ]7su|7ωO…åz( Äùó—#|¬"\ð_¼n溑ëã(q<õB >1¡Ÿ&MIDATxÚì |åùÇŸÙÝr„Cî›rü9… 7äŒ(‚€Š¢P¼@¹„Z±@©‚¨U«b/ZD´ý´Q±€bbå¾Ãªœ@8“ÍΞ7;qvvö¾fwßÏg’ÝÝÙcæ;Ïó¾3ó¼ù‰¤@Ä!²‚—íÚãëGL>¯-!%ˆKœÛ³ˆ¬±ÄæCFÉà¶Y™£‡ûz1eÍö.›RJ’Á£Û˜YJÙà¿:i…”Ì$¦ÍKš*ù˜ $ˆ9e“d61mº(©ýoÑh1xÌ(j`&Õÿ„F·M%¦§HY*¡Ò®­üOǺqL±2å+±'ÏyÛáœ,bš*}Õ§§ç”®ˆ™õ â•¢¢¢3;vìø 33óý³gÏžRä<뜥“Ì §¤I_õ2Z‘²9¤‰À7N6lØpøéÓ§÷*w횈©NÚ6hÌŽSZ $Õ‹ @BP¦L™Z«W¯¾O 2UÕ Cî—1Gò%9µµ)_ ‘²Ç@¤‰’ÊžWä¼MÙì:ۗźv¦é"%‘{o+ CJJJgÐ1Š”¦ˆ–ƒÔU5HD<¥®’™¤ô$&‰*¥…ܽÇ\LoÒáÄl‘Òté«§h @"bÚs¸m>¤‹”&½Â€pHiºàƒ6#@¤4a^íëƒèršJRDJâ,RèÒtØüy:z@¤ i±á'/çegã¼~Xºt)¥§§Óˆ#Üæ½óÎ;T­Z5ºûî»!%ðDÏÛÎ&ÜßýöÛo§Ç\ÜÖŠÉBnذÞ~ûmDJ|Iç´þR»vm!žVL­E!%QF+æ¦M›èäÉ“I!¤ßR¢÷Õ:uêäó9Û¶m‹Êû0C† ¡9sæ„å»ùÚ½ԪU‹zöìI+W®¤I“&QåÊ•“b[D¤ 3áÎLïK8eå”ù/ù Íž=›nºé¦„îà”ÀôB~ñÅôûßÿ^¤¬|ÿ±Çó]LH ž2‡Ê²eË\„TSY“Û˜eË–=´‰Š¶p–U3¥8§2J_£¨¨ØLÖ¦LdŽ=*ÚF:ÜáÛlÍš5ƒ^~JJJ†²ŒÓÊÍÊT䜴E´Dñ¬X΂” é0»”è}ÀdàÜW %R)Á‚ŽâQJ€U‚!ù˜JÒH‹%\ÛŠÇå§AÔ!eÈBÊÄ—2lof ž7Q!¥Ÿ2ÝÖÿ®5nÐù¨0¶tURð£9Ë÷õ£CËÒO¦Ê2@!þ{š1ãJJ+y9X)eƒÛ²—e )ýÒÛãí)¥²„²Bõ"ê'½.b¢÷Õ‹ú‰Ï…4º )ã›srèÚ™jä 5}ÕKéðpÛHPDJÅd yº|ù2åççÓÕ«Wc6ü6™ºÊ:-G%'¢Û“áëa€—wM™.(ÍÈÍcSX¿¤,((HJµÑ°¸¸˜Î;'dlÚ´)U©R…l6[PËà7ä®;’þn:"u=RÀßÈÿ/áÏïËÏ),,ükð_G è9Êvsåüùóß.\¸ð×^{m»2ïŒNL­’Ú äóÒ-eÊN)¢# É;¦³gÏR‹-Èjµ†$=¤Œ­”¡})¨ç(ÛPÁ¯~õ«±‹-Ú⌘F‘YL8ÍÎËÊS¥ä‰SÖºuë-d>q€ú³´“ÃÖ³dµV˜>}úÊÍÊä>´»[ƒx‰˜j¤¼víš(Üjjâ Ù»PÅô'R¸}fÍkä£%GëxÛ9ðº6úªV­ÚEù—æÌFeÍÏx›2Y…ÔGË`¢d02š¹'·ô³I®É¨äSL}φ”Ðba±XÒȵ—×A®g‰/‰ôU'£§ô5ZÑ1n­ÈäÒò)Mˆ©±gãûXžÒW!'¤ô)U9£½Sˆ1-Ô6«z'ŒY‚&y9ç髟íÊHD¼„8á@/š${jºF%‹oQ0Rº)}ÈL‹vyÿð…),‹¢IR`S >BÆ!’AÚ )McÍ+¤ìÖ§–e…xÌÒS¤¿4…$òq©Ú”~DIEŠo! -»F³@Û€ßä9,*y‹–ˆ”ÑJ/ãå8e¨mFrOMCj3Jáý¢½MØ–—)£oyÀÛÕõë×é¾ûî£qãÆ‰dç2rŽ¡#GÒ…üü¨}ü ùhðàÁtèС’6c€õ… hàÀtðàAqþ0Ðs8'Çïì.ܽªf聾”‘Žœ§préÄ'+ìÚµ‹Ö¬YÂru—ò©Ë'_“÷ìoÂãƒ>zë­·R«V­èÝwßu9^ª>#éèÑ£©W¯^tÛm·ÑÿøG±QO:•þþ÷¿‹çìÝ»—22:ѺõëÅý-_McÆŒ¡ë7n”.//ï< 6œæÎ}‘z÷ogzã7©¨¨Èí£~üñÇb(º¾}úRß¾}éoûÝP–ÅãG~øÑ‡¥ÏãaчÝ5ÌåÒ¿ÒTöÐAºté=óÌ3b´ænݺÑСCiŸòYÌŸOŸþ9=òÈ#4}út²ÛíZ/æìYBG:r¼4¾fsâĉbƒ4hŸÔì²/\¸¦M›F;Òé3gh„ Ô¼ysêܹ3mÛ–-DÛ²åkjÖìgŠ$YÔ§O1ß-:P™2e\>v^^Ý|óÍ´^‘÷è±£4áñ Ô¾}{±SÐÒ¹Kg!R¥Ê•”h¶Ÿf̘A PÞk}ðÁ4ôΡâs¯ùdx¿ *~í;vÐþýûé³Ï>£òåËÓåó§WI§3gPöwÙôÊâW¨EËÈÌçÒ"RƺƒÇ+®5jD£F¢×_]\d­¦]999´{÷n!E%bÝ{ï½"ú\¼x‘ÚµkGÇ+,áý÷?@‡çˆû]YZý;—+WN‰’½E½ÓF ‰eðòµpÔúò‹/…ü£ïMÏ>û¬™ïÚµ«ø|™O:EÛ¿ß.¢¢§ïͲW«Vzè!zÿý÷EJ›’’…ÌÅÜÇ^)Mœæª,á=÷ÜCëÖ­>j‘`ž_»vmZ¾|9UIOwy=÷Øò¾yóf‘‚vïÞ>ýôSÊÊÊé$GÓ`Ú]ß~û-ýéO¢¥ï-¥:uêÐñcÇéÑGó*VªHýúõ£Õ«WS³æÍ¨^½zÔ¸qcºråŠá²¹z§å¼sùðÃiĈ´xñbjÔ¸QRoˆ”qBÅŠé‰'ž >úHDB†7xî8Y¹r%Ù‹‹Åc¡¸}ÇD‰xG¼Š+)íÄNbã狵FIæ(·aÃÑv=räˆH/Û´iãòœËW.‹ˆVᦠâ:ÓÏÖ~&™¨ 6:cú Ú¾};M˜8Z·jþ÷‘“f»Aú©ôUÝüOKå·=9²QTÒ‹ä;}õuòyP髨zŒd&€ô5΢¢çíLò[€ £‰o_bA¹C&R@J³J¥( ésç#a½BJ3DË€ŠœJAŠ)¹æšžïú½8÷¯âk!!“PdtôD ÂÉ¡™í¾Mú}=¦7qä€*­ö6Ža¾ÐRBÌ’È#‡PPXU ¹ê€¾/‹”5‰ÄDúESCÚ>%לR¢dv!Ó ¹”d’¤²ˆ”áoXŠtÓpÇ®‰xr(Ë÷”’Fòä_‡GÂa:‚ e°;j9€çË^¤ ]WA}Ü !"†fOà)n’5"!eš7Nñ|‰ŒèÁšÚ oRŸ*!“[L´)#Õ¼ñÕþ q0Õð|) Ïñ3Óǯœ$Ž"R‰ìïVéí´.íVë©ûÝ‹9~eÎTŒB=×€+¿#RF~‘Çßèì]•ÔÉ©K±Ý.ŠGq¡+£"V*—.Qff¦¸ÀXÏ%/óŽ?&jëôèу>Ò½ÒÃõ€¸F¨ýªï‚—åKRQÒ­º¥¦ f?x4 ,Gú½ eT‚‘Ük”éÇ“'Eq©³gÏŠ –Õ Þm0 oçÞz˜Ç×”T&øê«¯häÈQaÙ·D}gƒŠç‘|OHif1¸<—Éà+ý?ùäÝHÊ¡Áe?¸|HË–- +ÄCjœà ¢MK/¥ÒTÌŸ³{¸fËzüñÇEiI®‘záB¾(8Å#¨zùå—…\|Y™¶>ª·y ßç¢U_~ù¥¸(yíÚµôÚk¯ÒîÝ{DÙJ.çÁu¦Ly’† ¹ÃM„?æå/2\þλhÁ‚ôÃ?ˆ=\òƒ+Öñ÷yøá‡éÎ;拉K—R5hÙ²e¢ž€”Aî÷%¿…ò<´‡ <íí÷ìÙ#6v®½ÊŪx#æjr\ÇæDn.½úê«4þ|Qƒ•£è–-[Äër½ÌSvJŠ{ìQ‘s{rÔ¨‘JÔùúë’TôàÁC"…îСƒËó5j,‘ìØ±Ý¹ü­.ï͵hyø5Ã:yꤨáöNžíB¤ ¢=è1ü²¹Î)§®|\°´˜±b”M¹ÍcvpH®Ë:iÒ$QĘáTU- Ù A}ó¼[ÉmVnSr[ôùççPZ¹r4ñ‰'D›6ß9¦$–߀&Ož¬,ÿi·÷®ZµŠè`âŽl¨DöŸ‰6(ו ʦ$Ò™yø.œUTT”èmJ gé#†¹WºçKFäH½G)qÐïá:¯>û| gEwïfî°.¹gÉQß1Ä~ׄ6e2aÎô(²…µb.˜œ˜g¨£M™°Bz3Qöt7ÑE“€A¯H !ã"ÙvÝÒ½ßq4L¾m ékÒ ec¾Îøns"J"} ›˜ñ1½® ¯‘T@ʘGÌø5rmLȈô©-€”Àÿ&[Ò( )!&„„”bÉ!!%Äøéa¼lèqKìi eŠÉ O:U\?É×Yz‚¯êçÚ=žê¾Šy;wºÍ;vìÝu×PQÒãÍ7ߤáÆÓáÃ9â"f® wPWçU Ydà §4¹˜\UŽ‹[ñõŧ ßCÒÝ–Æ0Ñ5ÿDÝר]»ö4gÎQˆ‹hqµƒ+W.»¾Îë æ=—‘„õë×—Ö}]³f—“Ÿ%déÕº¯|Ñ:fæÊy‘ˆ€ˆš2îQë¾rTà›o¾i¥åV­Z%Òή]»Ò/ùËÒš8%óþ-¢^·nÝ4ó$—´øí·ßu_-ZDãÆŽ©¬HY•ˆ¬‡k¹Þsï½Ô£gOêÓ·/ýáðXåBÊ„…K5ò†ÏÅŽ›4i"jè°˜ ×v]²d‰¨…Ã5W¹Í¨¯ÊÍ=ñӼ͛…Ðê¼Òv‹Í&ê±öêÕ‹ž~úiúÓŸÿL•*U2ü¼#àeq-×MYYôÁŠôïÕ«E ÚûŽÚ”ñ§–\å<;;[H©F@>}‹g9r„ÒÓÓ©S§’Ú«¹úS:ÏY÷U;/¸ãG_Ë•+Ö©µ\Ã%&®”¦†ôá‘\N’£¤ÚéÃu_9Í ÝWÏðòêÔ©M+Þw­ångÜ:’tÜX¤¯&%+KS÷Õ ß纯\ ™ë«rZÉ›™­[· ‘™Òyκ¯Úy5KiÒÄYËuåJM-×Stí–kôJrAJUÔº¯<žGiÝWg;SW–’#×^åvwöpÏlcg%u®ûZ:OI]×(ËRç.ăùlÚ´‰:wéB•´˜rú*yÔ[ JR E¨ûªMÑB©ûjÂo‚X²ß³ä­£h¼&y~ê¾&5RLßNŠ‘H_Ùó ·"Ì¡›'ÅTÌdR&CÄÔ4ï³zi3FXÌ`$‹71qH$ SY×mTC›Ð›‰²w1ƒxß`Š•ÅS3H aú'»VN—#°Cð:[Öß•“RL¤¯ÀS~›P— ûÿ3Q;~ %0—˜º&«/ñQL¿Ò×D: ü3šƒ…–vÆAl´)à Ÿ <¨f‘ý/A}=7ÐH¬}~Íš5!e,¨U«VRËíøäM"9Ê£:G*uF›ÖÈ‹ÈqÏðˆÍöe$ß ‘2F|œ Mi6^IÃ" ÒW %R)H €”É„$Ñ/ú—¡ì»S)kXÚ<<•þÝ×FãkI”ì"S­ôÖÝ)4 µžb¥×•× IÁ*‰8NijdúdK!=²d÷Ù´¶fßšB-¾/¢Y¹29ð!R‚¢xøvšù_™2ÚX©m¤ÖœE¢‡oK¡»Ëâ'G¤~qáT1mïd£剶5jd£š[¨Š"©U’éÛÝvš\&»ÅBó3-´sQf;+5¿d§¡[4©l Mía%Û;-:区JÊ%âïWžëm9ˆ”Àôå+S%gïÇÓÅô̺Bºã“BE:™Z)Q´½å§6äØº2½òŸÔ}c1Q—‘j¡Ç»Y)m¿FH*‘aÕV;m*rÐ[ iÔwº"¶ Õºb§1k iÀ†b*ßÂJý•H*¥XhÆ­Úñm!e~\H·¯/&kKEÞÊÎK¿M‘Tæ üÊAõڦЈëvº_¹?`£ƒjüŸzØ|/‘˜»ÿÇ&QU›LG K"[Ë:VzX‰Vá&%’x©a¸–ƒH ¢‘¬Rf·Tê£HbQâÊyúçæ"Zy¶¤øbÁÿŠéÝz6úÃ+ýŸƒ¶Üðc±Ê‹ssì´äæš×Z¦±;?u¨()窙öN¥þ?Øéáí^£„½…YÅ4ó–Zݺ$à]ºXLs¿*¦¼"ž×å'áZ÷g€eÊNôŸ~üØ×S‚Ø}_Y ðÚ”H ¤@J % &à8eüãŽtüÆWó@+¤‡²<#BÆ@w"%H_H €”@J¤ ¬DbÈõh ã)M̆ hðàÁÔ¼ysjÓ¦ =òÈ#tîܹ–ɯ6l>|?°IÅÄÉ&åĉôâ‹/ÒìÙ³iàÀTPP@‡¢J•*…´Üôôtzá…¨~ýúø‘Cë'/^$›ÍF·Ür‹Xù+V¤Ž;RJŠ÷Råׯ_§‰'Ò¾}û ï[­Vj×®¥¦¦âGF›BÆ ©J•*"ªåää¸Íß¹s'5ŠºuëF?ÿùÏé½÷Þ£«W¯Ò¼yóhíÚµ4~üxzê©§è׿þuéýiÓ¦‰ôµÿþtðàAÊËË£;3æÎK={ö;€… Šj  Ö¬Y#–Ÿ‘‘AS¦LïÇï{éÒ%Áy^çÎéŽ;îQ„ ©‹2¥(SYe*¯L••©º2ÕUžÒQN‡\\\,Ê×®]“/_¾,_¸pA>s挬¤’rvvvÔ?“"¬#·oß^9r¤¼uëVñøùóçeEÒû§N’1䬬,Y‰°²’îÊ{÷îóô÷ùµýúõ“8 –ߥKù•W^‘ív»¬ˆ%+rŠç?~\îÝ»·¼~ýzñÛ¬ZµJnÛ¶­¼cÇyãÆòСCÅoÄœ>}ZünáZÞ&^Gž&þÚIÙ¹øœøs;ù³|ýgbŸØ+§_•¾•uúg2b·d^ªV­JÏ?ÿû¬_ïß Añ~ÜYÄïÏ)+NarssÅãܱÄQ–{s333±ÒÂÙÏC¨ûêWÝW>$‘¬ptäÞWNS[µjÑõì|ý<ò‡r"€?Ç)Ý.r¶ÙP÷ï”8":±ánܸQ¤Ê7ß|3~¤¯ °ŒK—.Ç8ù6÷Äò±INÒW¤¯IÒW¤¯˜H ¤@J % XpH$Døô6>é õ··5”e†R½fÍš2ð• zRÆÛ!¤¯ M €”@J¤R %R)2Q(,,¤‡zˆV­Zåòø7ß|#ªšóØ"ÞàJtj%t)H L‚Ñ@?jf.Ä̃ðð=zôµc¹F,׿W‰˜.ÞÅE§OŸ^úW–ãÂËj»qþüù4sæLêÔ©“(îÅ˶hÑ­6+‹Éc|õÕWtäÈñ<e‹ 4H ü„‡&xõÕWièС¥qGÏ‚ Ämí@?êeDü£~Ê•+G}ûöÕÎyH÷ƒ_ )!%#|- §~8Šú"R×´)“oýèáq?Ö­['Ò_ænûöíÔ¶m[üˆ„¿’úÙ´i“hSr‘Û žÒWnKò8“÷Þ{¯Ó’GaæÒ5©`¢VHçNž{Þ}÷]Ñž4ûzv>*¤ƒ¸Üñ¤¯€Aïk’´=¹“ R %)€”H ¤@J¤R %D¾x™¯‘=z´¨«Â—cõë×O\° %ˆ"?þø#íß¿ŸÎž=KÀ)A¬Y¿~=µnÝš DkÖ¬q»&’ a… .#2qâDÚ·o~xH Œàº:ÿùÏD5»ÌÌLúúë¯] b± o¾ù&õîÝ›222èw¿û]i­ž-[¶Ð!CD×>}úˆáøùǧˆZ> ÀÏÛºu+Í›7Ö®]KãǧiÓ¦¹ÕÑ×Sš˜Ý»w 1¸öNjjª¨ÛÊ%&YP†‹` <˜-ZäR˵iÓ¦4gÎzúé§Åx"{öì¡'Ÿ|’êׯïVõ®tC°ÙÄó³³³iÉ’%Ô²eK¬H ´°p«W¯’pV52rÍŽt KÆ’iذ¡¨NÇÓùyiii¢j:£gþî»ï„¤é+îØá2œ¾rÑež¸j]nn.;v,¤ekÛ¥,¿¶W@Jବ,ª^½ºˆ†*|Ÿ£·ûnnÛ¶MÜfQwìØ!¢%kÀø¸]ÉðpxœÂr5>Ž œ«‡R6oÞ,*õ1…¹ãˆ·H 4päâÔ•SÍ””—vßÀé³Ï>£Ë—/SµjÕèË/¿=#Gޤ»îº‹ºté"Úž/¾ø¢èøáڮܣʧÁ\¯g̘1âØg÷îÝéóÏ?mP¦|ùò¢ÓgòäÉ¢ ŠP÷U“Ò%jÝ×x[ÁÎGÝWÒW %R))€”H ¤@J %R)ø€/7n5jÔH\ïÈ×Íák)=qîÜ96l˜¨RâÔè11V«•^zé%q³?¤§§Ó /¼àR­ R‚KÜ®];Qù5\!%ˆ"\ÂcÔ¨Q”ŸŸ/ª"L˜0–/_.jª%%QÃé+ˆ\’döìÙôÜsωû•*U¢>úˆn»í6Q<ù7Þ ºuëRÙ²e…¤\·‡áº>¨á )A„ÒÑ… ¶)'Mš$¢àÆiÙ²e.¶ÒW8må‰ë¶^¹r?¤±„—¼üòËtûí·Ó”)ShÁ‚nb¢†+¤jSrÛPœòÿø]¼x‘ÆŽ+Æ©U«½óÎ;.åQÃ5~AÝW'¨ûjžõì|Ô} }a:„5!€” R"2lä„”^„äÛê@˜%”u2ÊÒ9!%ˆ‚”2Ò×¢%& XÇU_QRú)ù̾ª  ? š¼¼¼o”|‡‘2„´U•’Ï9qâ¢% e»)X´hÑ[ÊötÅ@JmJ/2jﳌꔖ–&®Äàkù:FÈ ü”ñê™3g6Ìš5kìâÅ‹÷(]uJéÐÈéÒÖÄ¥[>"¥*%_FÅ×3^½z•rssÅEᜢbGFFÆÎ&©ä7»s*Ö‰®•Ë˱s„T¦«ÞÇåý ¥íIR=7–#f™2e\Αå˧Ôù5.¸¡¬ÛëôÓ¹§v§$Å!J©L]žv²kn{lWBJ/b²â—VDc1õi-?¦ ©þ/];ÓÌj&»SÌP¤Ô§ Í#9=¥¯Ò“ŒFbj#¨VHOQRÆ”E^"X°RÊ:):é‹‘¾ ¤*“¶ãGS}ÌHF¤®qE‘SÈšH©&”6¥Q¯ªÃ`òx¼Rz‘S5µbòm­”jd„”qƒ]!‹"$%é¤4º-DZHéKHõ¾ú˜z›ÅÔK âJJ»®£ÇåBc ­÷Uö5= ‰ôÕ_1= ªmɸ£ØÇJï+yÍ›ˆˆ”Á¦°úvg0å'€)Ðv¶8Â(%¼Nö"¬Ñó!¥/1UÙô½²F‚¸’ÒH鯨¼ýÈÚm R)'Hd?§ð¼Y€)¤„¨Ò`’cØ”xØéòa¯X€«D0H €”@J¤R %)€”H €”@J¤R %)€”H €”@J¤R %)€”H €”@J¤R %)€”H €”@J¤R %)€”H €”@J¤ Q¥”ñEŽW)1”RÖì=dÝ}1Rm󦌔2¤I&¥©¶s‹€D–ÒômJýÞÃu‡Y£¥Å‡$²”¦Óæ!¬;œÂòÿË’$e`‚â²FH‡ÙÒXIüQpÞ¶8'«f²i&õ¾E3©¯ÀlíE‡f²+S±ó¿]s_ô‘“ŽØ$Š6/_FÒŠ«y¼Ø)§¤‘’ &0‘¤‹‚Åšm׫ˆfN_µ deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/icon/attention.svg000664 000000 000000 00000010130 13703317554 027473 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/icon/close_icon.svg000664 000000 000000 00000002511 13703317554 027607 0ustar00rootroot000000 000000 ]> deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/icon/collect.svg000664 000000 000000 00000003626 13703317554 027127 0ustar00rootroot000000 000000 collect Created with Sketch. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/icon/icon_menu.svg000664 000000 000000 00000001666 13703317554 027460 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/icon/launcher_icon.svg000664 000000 000000 00000005654 13703317554 030316 0ustar00rootroot000000 000000 deepin-launcher Created with Sketch. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/icon/list_icon.svg000664 000000 000000 00000002335 13703317554 027461 0ustar00rootroot000000 000000 show_playlist_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/icon/music_icon-24.svg000664 000000 000000 00000040307 13703317554 030052 0ustar00rootroot000000 000000 深度音ä¹-256px Created with Sketch. deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/icon/notes.svg000664 000000 000000 00000007365 13703317554 026636 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/index.md000664 000000 000000 00000024373 13703317554 025464 0ustar00rootroot000000 000000 # 深度音ä¹|../common/deepin-music.svg| ## 概述|../common/icon_overview.svg| æ·±åº¦éŸ³ä¹æ˜¯æ­¦æ±‰æ·±ä¹‹åº¦ç§‘技有é™å…¬å¸é‡æ–°æ‰“é€ çš„ä¸€æ¬¾ä¸“æ³¨äºŽæœ¬åœ°éŸ³ä¹æ’­æ”¾çš„应用程åºï¼Œä¸ºæ‚¨æä¾›å…¨æ–°çš„界é¢è®¾è®¡ã€æžè‡´çš„æ’­æ”¾ä½“éªŒï¼ŒåŒæ—¶è¿˜å…·æœ‰æ‰«ææœ¬åœ°éŸ³ä¹ã€æ­Œè¯åŒæ­¥ç­‰åŠŸèƒ½ã€‚ ## 使用入门|../common/icon_guide.svg| 您å¯ä»¥é€šè¿‡ä»¥ä¸‹æ–¹å¼è¿è¡Œã€å…³é—­æ·±åº¦éŸ³ä¹ï¼ŒåŒæ—¶è¿˜å¯ä»¥åˆ›å»ºå¿«æ·æ–¹å¼ã€‚ ### è¿è¡Œæ·±åº¦éŸ³ä¹ 1. 点击桌é¢åº•部的 ![launcher_icon](icon/launcher_icon.svg) 或将鼠标指针移到å±å¹•左上角,进入å¯åŠ¨å™¨ç•Œé¢ã€‚ 2. 上下滚动鼠标滚轮,通过æµè§ˆæ‰¾åˆ°Â ![music_icon-24](icon/music_icon-24.svg) 进行点击è¿è¡Œã€‚ 3. 将鼠标指针置于深度音ä¹åº”用程åºçš„图标上,å³é”®ç‚¹å‡»å›¾æ ‡ï¼Œæ‚¨å¯ä»¥ï¼š - 点击 **å‘é€åˆ°æ¡Œé¢**,在桌é¢åˆ›å»ºå¿«æ·æ–¹å¼ã€‚ - 点击 **å‘é€åˆ°ä»»åŠ¡æ **,将应用程åºå›ºå®šåˆ°ä»»åŠ¡æ ã€‚ - 点击 **开机自动å¯åЍ**ï¼Œå°†åº”ç”¨ç¨‹åºæ·»åŠ åˆ°å¼€æœºå¯åŠ¨é¡¹ï¼Œåœ¨ç”µè„‘å¼€æœºæ—¶è‡ªåŠ¨è¿è¡Œè¯¥åº”用程åºã€‚ > ![notes](icon/notes.svg):如果深度音ä¹å·²ç»é»˜è®¤å›ºå®šåœ¨ä»»åŠ¡æ ä¸Šï¼Œæ‚¨ä¹Ÿå¯ä»¥ç‚¹å‡»ä»»åŠ¡æ ä¸Šçš„ ![music_icon-24](icon/music_icon-24.svg) æ¥è¿è¡Œã€‚ ### éšè—到系统托盘 深度音ä¹ä¹Ÿå¯ä»¥éšè—到系统托盘中。 - 在深度音ä¹ç•Œé¢ç‚¹å‡» ![close_icon](icon/close_icon.svg) 关闭主窗å£ï¼Œåœ¨å¼¹çª—中选择 **最å°åŒ–到系统托盘**,然åŽç‚¹å‡» **确定**。 - 您也å¯ä»¥åœ¨ **![icon_menu](icon/icon_menu.svg)> 设置 > 关闭主窗å£** 中进行设置。 ![notes](icon/notes.svg):在弹窗中勾选 **ä¸å†æç¤º**,å¯ä»¥ä¸å†æ˜¾ç¤ºè¯¥å¼¹çª—。 将深度音ä¹éšè—到系统托盘之åŽï¼Œæ‚¨å¯ä»¥å³é”®å•击托盘中的 图标选择: - æš‚åœ/播放 音ä¹ã€‚ - 播放 上一首 音ä¹ã€‚ - 播放 下一首 音ä¹ã€‚ - 退出 深度音ä¹ã€‚ ### å…³é—­æ·±åº¦éŸ³ä¹ - 在深度音ä¹ç•Œé¢ï¼Œå¦‚果您设置关闭主窗å£çš„æ“ä½œæ˜¯é€€å‡ºï¼Œå¯ä»¥ç‚¹å‡» ![close_icon](icon/close_icon.svg),退出深度音ä¹ã€‚ - å³é”®å•击系统托盘中的 ![music_icon-24](icon/music_icon-24.svg),选择 **退出**,退出深度音ä¹ã€‚ - å³é”®å•击任务æ ä¸Šçš„ ![music_icon-24](icon/music_icon-24.svg),选择 **关闭所有**,退出深度音ä¹ã€‚ ## 界é¢ä»‹ç»|../common/icon_localmusic.svg| é€šè¿‡ç•Œé¢æŒ‰é’®å¯ä»¥è¿›è¡Œå¸¸è§„的播放æ“作,查看播放列表和歌曲歌è¯ä¿¡æ¯ã€‚ ![1|main](png/main.png)
1 æœç´¢æ¡† 用户å¯ä»¥é€šè¿‡æœç´ æ¡†å¿«é€ŸæŸ¥æ‰¾éŸ³ä¹ã€‚
2 主èœå• 通过èœå•æ æ‚¨å¯ä»¥æ–°å»ºæ’­æ”¾åˆ—è¡¨ã€æ·»åŠ éŸ³ä¹ã€è®¾ç½®æ·±åº¦éŸ³ä¹ã€æŸ¥çœ‹å¸®åŠ©æ‰‹å†Œã€å…³äºŽæ·±åº¦éŸ³ä¹ã€é€€å‡ºæ·±åº¦éŸ³ä¹ã€‚
3 æŽ’åºæ–¹å¼ å¯ä»¥å¯¹åˆ—表进行排åºï¼ŒæŽ’åºæ–¹å¼åŒ…æ‹¬ï¼šæ·»åŠ æ—¶é—´ã€æ­Œæ›²åç§°ã€æ­Œæ‰‹åç§°ã€ä¸“辑å称。
4 播放框 æ˜¾ç¤ºå½“å‰æ’­æ”¾æ­Œæ›²åã€å°é¢ã€ä¸“辑å。
5 播放/æš‚åœæŒ‰é’® 点击å¯ä»¥å¼€å§‹æ’­æ”¾/æš‚åœæ’­æ”¾ã€‚
6 上一首/下一首 点击å¯ä»¥åˆ‡æ¢åˆ°ä¸Šä¸€é¦–/下一首音ä¹ã€‚
7 æ”¶è— å°†å–œæ¬¢çš„éŸ³ä¹æ·»åŠ åˆ°æˆ‘çš„æ”¶è—åˆ—è¡¨ä¸­ï¼Œå†æ¬¡ç‚¹å‡»å¯ä»¥å–消。
8 æ­Œè¯ ç‚¹å‡»å¯ä»¥åˆ‡æ¢åˆ°æ­Œè¯ç•Œé¢ï¼Œç‚¹å‡»æ­Œè¯ç•Œé¢ä¸Šçš„图标å¯ä»¥å…³é—­ã€‚
9 æ’­æ”¾æ¨¡å¼ ç‚¹å‡»å¯ä»¥åˆ‡æ¢æ’­æ”¾æ¨¡å¼ï¼ŒåŒ…括:列表循环ã€å•曲循环ã€éšæœºæ’­æ”¾ã€‚
10 音é‡è°ƒèŠ‚ 点击调节播放音é‡å¤§å°ã€‚
11 播放列表 点击å¯ä»¥æ‰“开播放列表èœå•。
## 常用æ“作|../common/icon_commoncoperat.svg| 您å¯ä»¥åœ¨æ·±åº¦éŸ³ä¹ä¸­å¯¹æœ¬åœ°éŸ³ä¹è¿›è¡Œæ·»åŠ ã€åˆ é™¤ã€æŸ¥çœ‹ä¿¡æ¯ç­‰åŸºæœ¬æ“作。 ### æ·»åŠ éŸ³ä¹ æ‚¨å¯ä»¥é€šè¿‡å¦‚下方法添加音ä¹åˆ°æ·±åº¦éŸ³ä¹ä¸­ï¼š - 在深度音ä¹ç•Œé¢ï¼Œé€‰æ‹© **![icon_menu](icon/icon_menu.svg) > 添加文件夹**ï¼Œé€‰æ‹©æ–‡ä»¶å¤¹å°†å…¶ä¸­çš„éŸ³ä¹æ·»åŠ åˆ°æ’­æ”¾åˆ—è¡¨ã€‚ - 在深度音ä¹ç•Œé¢ï¼Œé€‰æ‹© **![icon_menu](icon/icon_menu.svg) > 添加文件**ï¼Œé€‰æ‹©éŸ³ä¹æ–‡ä»¶å°†è¯¥éŸ³ä¹æ–‡ä»¶æ·»åŠ åˆ°æ’­æ”¾åˆ—è¡¨ã€‚ - ç›´æŽ¥å°†éŸ³ä¹æ–‡ä»¶/文件夹拖拽到深度音ä¹ç•Œé¢ï¼Œæ·»åŠ éŸ³ä¹æ–‡ä»¶åˆ°æ’­æ”¾åˆ—表。 - 如果深度音ä¹ä¸­è¿˜æ²¡æœ‰éŸ³ä¹ï¼Œæ‚¨ä¹Ÿå¯ä»¥é€šè¿‡ç•Œé¢ä¸­é—´çš„ **添加文件夹** 或者 **扫æ** æŒ‰é’®æ¥æ·»åŠ éŸ³ä¹åˆ°æ’­æ”¾åˆ—表。 ![0|addmusic](png/addmusic.png) ### æœç´¢éŸ³ä¹ 1. 在深度音ä¹ç•Œé¢é¡¶éƒ¨æ ï¼Œç‚¹å‡» **æœç´¢**。 2. 在æœç´¢æ¡†ä¸­ï¼Œè¾“入关键字åŽè‡ªåŠ¨åŒ¹é…,快速定ä½åˆ°è¯¥éŸ³ä¹ã€‚ ![1|searchmusic](png/searchmusic.png) ### æ”¶è—éŸ³ä¹ 1. 在深度音ä¹ç•Œé¢ï¼Œç‚¹å‡» ![collect](icon/collect.svg)。 2. 将音ä¹é»˜è®¤æ”¶è—到我的收è—列表中。 > ![notes](icon/notes.svg):您也å¯ä»¥å³é”®å•å‡»è¦æ”¶è—çš„éŸ³ä¹æ–‡ä»¶ï¼Œå°†å…¶æ”¶è—到我的收è—列表中。 ### åˆ é™¤éŸ³ä¹ 1. 在深度音ä¹ç•Œé¢æ’­æ”¾åˆ—表中,å³é”®å•击è¦åˆ é™¤çš„éŸ³ä¹æ–‡ä»¶ã€‚ 2. 点击 **从播放列表中删除**ï¼Œå°†è¯¥éŸ³ä¹æ–‡ä»¶ä»Žæ­Œæ›²åˆ—è¡¨ä¸­åˆ é™¤ï¼Œè¯¥éŸ³ä¹æ–‡ä»¶ä»ä¼šä¿ç•™åœ¨åœ¨æœ¬åœ°æ–‡ä»¶å¤¹ä¸­ã€‚ 3. 点击 **从本地文件删除**ï¼Œå°†è¯¥éŸ³ä¹æ–‡ä»¶ä»Žæ­Œæ›²åˆ—表和本地文件夹中一并删除。 ![0|delete](png/delete.png) ### 查看音ä¹ä¿¡æ¯ 1. 在深度音ä¹ç•Œé¢æ’­æ”¾åˆ—表中,å³é”®å•å‡»éŸ³ä¹æ–‡ä»¶ã€‚ 2. 点击 **属性**,您å¯ä»¥æŸ¥çœ‹æ­Œæ›²çš„æ­Œæ‰‹ã€æ‰€å±žä¸“è¾‘ã€æ–‡ä»¶ç±»åž‹ã€å¤§å°ã€æ—¶é•¿ã€å­˜å‚¨è·¯å¾„等信æ¯ã€‚ ![0|info](png/info.png) ### è°ƒæ•´ç¼–ç æ–¹å¼ 当æŸäº›éŸ³ä¹æ–‡ä»¶ä¿¡æ¯æ˜¾ç¤ºä¹±ç æˆ–者错误时,å¯ä»¥é€šè¿‡è°ƒæ•´ç¼–ç æ–¹å¼æ¥è§£å†³é—®é¢˜ã€‚ 1. 在深度音ä¹ç•Œé¢æ’­æ”¾åˆ—表中,å³é”®å•å‡»éŸ³ä¹æ–‡ä»¶ã€‚ 2. 选择 **ç¼–ç æ–¹å¼** > **一ç§ç¼–ç æ–¹å¼**。 3. 查看音ä¹ä¿¡æ¯æ˜¯å¦å·²æ˜¾ç¤ºæ­£ç¡®ï¼Œå¦‚æžœä»ç„¶æœ‰é—®é¢˜è¯·é‡å¤ç¬¬2æ­¥é€‰æ‹©å…¶ä»–ç¼–ç æ–¹å¼ã€‚ ![0|code](png/code.png) ### 在文件管ç†å™¨ä¸­æ˜¾ç¤º 1. 在深度音ä¹ç•Œé¢ï¼Œå³é”®å•å‡»éŸ³ä¹æ–‡ä»¶ã€‚ 2. 点击 **在文件管ç†å™¨ä¸­æ˜¾ç¤º**,打开并定ä½è¯¥éŸ³ä¹çš„存放文件夹ä½ç½®ã€‚ ![0|infile](png/infile.png) ## 播放列表管ç†|../common/icon_playlist.svg| 您å¯ä»¥åœ¨æ·±åº¦éŸ³ä¹ç•Œé¢è¿›è¡Œæ–°å»ºåˆ—表ã€åˆ é™¤åˆ—表ã€é‡å‘½å列表ã€å°†éŸ³ä¹æ·»åŠ åˆ°æ’­æ”¾åˆ—è¡¨ç­‰æ“作。 > ![notes](icon/notes.svg):**所有音ä¹** å’Œ **我的收è—** 是默认列表,ä¸èƒ½åˆ é™¤ã€‚自定义的播放列表都是 **所有音ä¹** 列表的å­é›†ã€‚**我的收è—** 列表既å¯ä»¥ç›´æŽ¥ç®¡ç†ä¹Ÿå¯ä»¥é€šè¿‡ä¸»ç•Œé¢ä¸Šçš„æ”¶è—按钮管ç†ã€‚ ### 新建列表 1. 在深度音ä¹ç•Œé¢ï¼Œç‚¹å‡» ![list_icon](icon/list_icon.svg) 打开播放列表界é¢ã€‚ 2. 点击下方的 **新建列表** 。 3. 输入列表的å称。 4. 按下键盘上的 ![Enter](icon/Enter.svg) 键。 ![0|addlist](png/addlist.png) ### 删除列表 1. 在深度音ä¹ç•Œé¢ï¼Œç‚¹å‡» ![list_icon](icon/list_icon.svg)。 2. 在播放列表中,选择è¦åˆ é™¤çš„列表。 3. 点击鼠标å³é”®ã€‚ 4. 点击 **删除列表**。 ![0|deletelist](png/deletelist.png) ### 添加音ä¹åˆ°åˆ—表 1. 在深度音ä¹ç•Œé¢ï¼Œé€‰æ‹©ä¸€ä¸ªéŸ³ä¹ã€‚ 2. 点击鼠标å³é”®ã€‚ 3. 选择 **添加到歌å•** > **æ­Œå•åç§°**。 ![0|addtolist](png/addtolist.png) ### ç§»é™¤åˆ—è¡¨çš„éŸ³ä¹ 1. 在深度音ä¹ç•Œé¢ï¼Œé€‰æ‹©ä¸€ä¸ªéŸ³ä¹ã€‚ 2. 点击鼠标å³é”®ã€‚ 3. 选择 **从列表中删除**。 ![0|remove](png/remove.png) ### é‡å‘½å列表 1. 在深度音ä¹ç•Œé¢ï¼Œç‚¹å‡» ![list_icon](icon/list_icon.svg)。 2. 在播放列表中,å³é”®å•击播放列表。 3. 选择 **é‡å‘½å**。 4. 按下键盘上的 **![Enter](icon/Enter.svg)** 键。 ![0|renamelist](png/renamelist.png) ## 主èœå•|../common/icon_optionsetting.svg| 您å¯ä»¥å¯¹æ·±åº¦éŸ³ä¹çš„å¯åŠ¨åŽæ’­æ”¾æ–¹å¼ã€æ­Œè¯å­˜å‚¨ã€çƒ­é”®è‡ªå®šä¹‰ç­‰è¿›è¡Œè®¾ç½®ã€‚ ### 切æ¢ä¸»é¢˜ 1. 在深度看图界é¢ï¼Œç‚¹å‡» ![icon_menu](icon/icon_menu.svg) 。 2. 点击 **浅色主题/深色主题**,æ¥åˆ‡æ¢ä¸»é¢˜é¢œè‰²ã€‚ ![0|mode](png/mode.png) ### 常用设置 1. 在深度音ä¹ç•Œé¢ï¼Œç‚¹å‡» ![icon_menu](icon/icon_menu.svg) 。 2. 点击 **选项设置**。 3. 在 **播放** 选项,您å¯ä»¥ï¼š - 勾选 **自动播放** å¤é€‰æ¡†ï¼Œåœ¨æ·±åº¦éŸ³ä¹å¯åЍåŽè‡ªåŠ¨æ’­æ”¾éŸ³ä¹ã€‚ - 勾选 **继续上次播放进度** å¤é€‰æ¡†ï¼Œåœ¨æ·±åº¦éŸ³ä¹å¯åŠ¨åŽæŽ¥ç»­ä¸Šæ¬¡è¿›åº¦æ’­æ”¾ã€‚ - 勾选 **开坿·¡å…¥æ·¡å‡º** å¤é€‰æ¡†ï¼Œå¼€å¯çª—å£ç‰¹æ•ˆã€‚ 4. 在 **关闭主窗å£** 列表中,选择 **最å°åŒ–到系统托盘** 或者 **退出深度音ä¹** æ¥è®¾ç½®å…³é—­ä¸»çª—å£çš„默认æ“作。 5. 点击 **æ¢å¤é»˜è®¤è®¾ç½®**,å¯ä»¥å°†æ·±åº¦éŸ³ä¹çš„设置æ¢å¤åˆ°é»˜è®¤çжæ€ã€‚ ![1|contorl](png/contorl.png) ### 热键设置 1. 在深度音ä¹ç•Œé¢ï¼Œç‚¹å‡» ![icon_menu](icon/icon_menu.svg) 。 2. 点击 **选项设置**。 3. 在 **å¿«æ·é”®** 选项,勾选 **å¯ç”¨å¿«æ·é”®** å¤é€‰æ¡†ï¼Œå¯ç”¨å¿«æ·é”®æ“作。 4. 自定义所有的快æ·é”®ã€‚ ### 帮助 您å¯ä»¥ç‚¹å‡»å¸®åŠ©èŽ·å–æ·±åº¦éŸ³ä¹çš„帮助手册,通过帮助进一步让您了解和使用深度音ä¹ã€‚ 1. 在深度音ä¹ç•Œé¢ï¼Œç‚¹å‡» ![icon_menu](icon/icon_menu.svg) 。 2. 点击 **帮助**。 3. 查看关于深度音ä¹çš„帮助手册。 ![1|heip](png/help.png) ### 关于 您å¯ä»¥ç‚¹å‡»å…³äºŽæŸ¥çœ‹æ·±åº¦éŸ³ä¹çš„版本介ç»ã€‚ 1. 在深度音ä¹ç•Œé¢ï¼Œç‚¹å‡» ![icon_menu](icon/icon_menu.svg) 。 2. 点击 **关于**。 3. 查看关于深度音ä¹çš„版本和介ç»ã€‚ ![0|about](png/about.png) ### 退出 您å¯ä»¥ä»Žèœå•æ é€€å‡ºæ·±åº¦éŸ³ä¹ã€‚ 1. 在深度音ä¹ç•Œé¢ï¼Œç‚¹å‡» ![icon_menu](icon/icon_menu.svg)。 2. 点击 **退出**。 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/000775 000000 000000 00000000000 13703317554 024606 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/about.png000664 000000 000000 00000071173 13703317554 026437 0ustar00rootroot000000 000000 ‰PNG  IHDR¢hxÿ½tEXtSoftwareAdobe ImageReadyqÉe<(iTXtXML:com.adobe.xmp XáX(néIDATxÚìÝ€åÿðgûºàîàèînIQ@D‘‘PDð/*"èO¤%D@)ƒnén®¸®½Í÷?3·W”´ÏG‡ÛÙ˜g¿ï¼;£R©T¸E·<ýwIžá‘OÞho#tDDD”pä8ù…“szÕ(¯Ë*†É“Ïu‘Ï4âf*"Õuþª®H #"¢ÿn‰<þæRªœãµ7B×@DD”3|r9C([ió ¡œƒ:ŸË9+%""úï…PÎ ²çs9¯PºnEä!yŸ‘ÜL'ëÑ£ÇmW@9±"""¢\äN 9;&xv`X»ví{¬œ\ƒ«³‚AÎÎ DDÿ-çÎS(¯}BrµZB… ÝLÈÈb¤‹&duV°y BËÅMDD9•.]:ßÛäÊèNbÓÝW """bƒˆˆˆˆADDD """"1ˆˆˆˆDDDÄ """bƒˆˆˆˆADDD """"1ˆˆˆˆDDDÄ """bƒˆˆˆˆADDD """"1ˆˆˆˆDDDÄ """bƒˆˆˆˆADDD """¢l´\ô BÜÖm"•Ju[·1ˆˆîs¹.ç5îaã8®Ëò_×ëa ƒˆè ¡ü†‡5ˆ\a£V«s“üºFÄ "z€Iìv;¢ñ+vÛ"Ív¹·ÓòWÕçí®ºëvåVÛïïü¾êb¨‡Y(„6JðÈ¡t3Uƒˆè>„ÍfÃ_Æ—‘˜aÏsꌻQõtïçOU_ÆßA}ÐYA !×ઘòj¶c(ƒˆè>„‘DV«õ:!ôp’^–òš>ÝßEBÊ#"¨*iˆð€R¹‰û’ˆADt+"¹’‡G)„ܯQzM[Oþ˜m\h@1Ô(ñ8ê•n‡:¥ÚB§1äL $bÝã0zTYŽ×‚Ê7jŸ¨p-å2~;ü2ø{£I…îhU­Ê„ÕrïKb ƒˆè‘Ü4'*[l”Ž ptlPI¤ Žƒ&ì*R‘ˆ ç+CÒmнþhTŠx &[ö¶#Ñ]ª„òúýУÇBŽ×)ý“Kz,WJK¡” MáËÐE\ƾs•¡né§Ð÷ñé(TFY.9ÈÕ=¬xˆzàCé‘}ÂY »ûº=ÝÖ3•‘¹ãqX.”•Ê'öžûþ®ƒ¥;&Ãd1*Í–rÅø(üØ—DDtŸ‚H&»—·’CYád3k¥ *ŒÍ`*‹Í„%Û'ãíe-•xÖÝ¡Ã3FÄ "¢›àk€AJ­ä° %„\Ý%_7ëa:QûêC˜¼p:jF~×;N¯ÎD #bÑMKNË„Ñd^§F ¯‚ü¼¡Õ8BIižsVJîP’Ç%… cO#Ø’ƒž™ŒÖ<µf*¿·Rºº3ŒˆADD7Ë®tO·KbARZÓŒP«Töó’ÂIã!áÞ‡ä„Ùãú°DQÆ/Øò&o›õ»+†1ˆˆèfeõš“ÃÓي„Ô ¥©M®’´j•çTŽËò´62UƒéT¨¤ÿ~Ü=aD ""ºÅRzÉÁ.Žæ8Çe“ŦTHµAR ©UY\•àºT‡jºÃhÝÁY #bÑ­ÕDv»³ùÍYñÀ#œŒR…$’Ò©A£ÎºÙc~sL(Œ'Ë)×¾üc4vžYg×n"eàãÊó4®sŽžrîªIºœ’a†N£‚A§‘®;ƹ¦—ç—+#sd„2næ¦AˆN:ÇnÝÄ "¢ëKIÏ„A¯Cˆ¿¯³ÇœÆ½/ÈQ¹*%ǸôL3lRðøzéÜ=ëœ79ª§c•`M TzÓMßðÌÖL÷a’FÄ "¢\ä€HÍÈD\rS3 ×j¤PòvŒÝ}äá®L«Ò\ç£×dëI§LoS!ã@ Ø3½p&z?Vî™–çoŒˆDDÏ‚ÆU©¤3‘j„ŸþÞúlÓy6×YmvX¬v¥™Îs~y*›YôCU•cÎÉA•t–MtÄ "zxÈ}ÏîÝq€³ðšr`$§‘n4)¿'rw×Ù»p›¬6e> Ùæ—ÿZ‘y¥ÌVý5šU1ˆˆ oÂ+%.Iw¯{•DîÌÒ_«Tý$¦e"@ªŒ4j•{¼ÜÃÎ2Í6´j¨åCå˜?ãDY©tr(õDÔVEÄ "zë+ÁW[a†º÷äñR’á`ϪäëpT9òmIé&xëµJålÊ“ÿK3Y¥0B®ùíf-2ÎQƯÚ7U1ˆˆ&ՆܓÇ9yøþÙ½Q—/JAauTFŽHqÖGR2ä0ÒÀÙ=Î#L•”¼¿Èq„ºìó/lZå\Fçãþa:b=,Êû?‡’>íïÉcY-\½xGöíBüµgÈ ×9†RøJ•‘𬈜ƒÙ&`Ш<*ç팗 +Óo>öu¶£-0„ˆADô€k¾á†ú÷ìñ,fΟ<ª„’ëô讎 2y\†Ù o:WE#O“)UE:ç¾$Ïۗ•ËÛNýèþ]CˆDD½Ú]"6£„O»{ú¸1W/áü©ca”UýÈݶåñª\U EP«ì¹*kª/,É~RE•ˆƒ—~e§b=Ltj_t(´B>¼+ݺ՚¼Ç'Å_CÔå YaäÑM!Ób‡—Nå¾Í3,R)GurM“y5Lù»ÿâÆlBÄ "zÈ? ­<ÏÝ… ]ù;zßM†áUò¯Œä@Ê~´mÇQäÊH>oQΣk[¥ÜÑ ÷™ZÍׂ•ˇ.ý‘«ÃƒˆèäÚ/ã)ÌPÏ݇âÞOݱÇñj¾TîR•Ç'QÞ_äê`àYù˜,òþ œû‰DöŽ ž?pMö†Ý¬Ãµ”ˈM9ÏnÜÄ "zÐ-¾\룻áDêbØ„É=^ÞoÔ¾ðÏ(ãÛýŽ>^ɦ@ùÖ¹ÇË⢯*—³u`ÿ:+Ï’É?„…«ƒƒÇfMqÊ¥3±û•ÈDD.³=gÓWbSl/,¼P»&KøLå6J‡ÖaßJR½;Fy5ÓÅF]Í8Ê_gà¨U¹«9‡Ôð8Xªs¼5ÕG™&*ù ›æˆADô S¹û¥™ö8ìJï.WALæ^eœVí…§ ­‚NåGWn¢ËÙÁfµ =5Å(pVCV9p„=Ï ‚ç±çœ¡cKõvQÒvV ÑÃ(Åz?F6Å…ô Êu?mÔzóŽ>†¼Ï(¬rîñɉñî#*ØÝ¡wœÌîQ-yžhÏ5­%ÝËDgÙsŽDD+›ÈĆ˜îˆ3R®×  ƒ:äŽ>F^A”™‘–퀦® ÙöógÉÕÍž5ëô™Žîçé¦$1ˆˆfV‘߯½ª\–gTܻսÿÀ"¹ÇYÌfwÓ\¶&:dU<Yû„TJ×nG¹íVG›_†9•?f%уOuÝ[cM{•¹]¹\ÌçÉ;úȆyÞî­)ˆF&ßâ½ g‡…Û'ï’›ãòª„d ‡£‘ÍÑÌæêŒ`Í4B­órWG*×žZÖ<Òx}°4½ÁŠÐ€b(à[jµÚF $bÝeý^Âa ¡Vin)dî…­ÿ˽OÈEn’ó r_—¼*‡†ÍnWŽÈ­Ö{9Oà§Rª!¥B’Æ«4zÇ´ÎS‚6ÜÑżjÑf !z ñÈ ôÈ ÒU@˰ù·B÷N~!äŒà°Â¹Ž 'ÿ–ÈbLƒÎËÏ#2…2^Λ%S "»"rÍç_"Aù[½ÈJ¹ÂˆˆÑ]V#ð5hTú[ aSöÝ·ð,ްˆl•£§œJ .›û‡­®«Žó' ›Ðè”Ãÿ(×µþé0„dÀÏ+U#ZºCȳ2"bÝ%…¼Ýò<É–³ÿzßÏí;(\~þAÎNÎÂ# SáX ׼ʌéÐûf›OþPÆQ 5.ß :![EÄ"Ñ]&ò8Œ)IJ•äæ:çó4YGú±š3a—IgÐ)Óºæ—wù„f ¨l’Ò9á¹:“Ü!$l–#ÑýØàÆSiß)Ã%«ÓÜÃ-#%Yéxà\@ù퓲/ÈÕkÎ@ò?V©Z²dfÀË?8ÛüÊ‘ô VD4»¤ŒïPëuô+‘­b³1ˆˆÈÍn·Á”ž“**) |ýƒ ñÈ (¥#J]=å¬f¬®Î ÙÎÎ*M£¶¡Èã¡óµ LXM´ª0:.W³ˆDD¤HKЇ_ ¾þÎúÈ•+®S>ˆ¬ñÒ¦ŒT%t ~ŽCÿd;G‘$¢a$|Â2àkÀ«?‡Aç­YŽÕ1ˆˆ(ßÀγ48ª¥)NþùÝÕ çˆ ùçAÉñ0xûA£7ÀµWI¸° ¨ rIJÀ¼Òx:ÂJ±"ݘY•G䬈ì03`ÎL‡O@¨5yç’/ûKAáú1Ê<=½‡EÚ¸C(¯Þr #b‘3P²Håq9',¦Ld¦¥ÀÛ/¾A¡Ù¦wuZ¯”*¡ˆ±JÔ¡ækhZºôz½DòÀjˆDDtã’Èuhé³ÉSFô^>ð ËÞ!ÁÕuA¾ª(Ò(!å“”±ík Eû*£ò !VCÄ "¢|2È»ÝÑü&ÿ.Hæå¿ ‚Îf·¬ßÁyÈ9…´>6”xâ |ÃJ°<_š—í+„Ø$G ""º®Ô„kÐj¥ððöÁÇ®œpý€U¸ÂÃ㈠¾á(Þ2z_«Ò;Nî˜P­p+%„\AÄ£(ƒˆˆnŠ\ùJÅq˜繇”tRU$ULò4:o ׿†R”éäß õylBýJd«„<«!ÏýB $bQ.®Î ž<¯Ë5zB«%"¬ZÔ:›rØžvÕ‡¢eÙ¾ð6øf ¡¼åÃ"åDž½æ<ö ɼƒÍ©ŒÐÊÉPiçU’`ÚµÚX„ú—ÌVyvÓfƒˆˆn3”ìð 2! ¸ÁeRàšu–ØZ%žDëJƒP2¸–;tòª‚rvÓfƒˆˆ®+H ¯@3¼BÌð0Bëesßæç„†e:£a‰îˆ¨ä œCÎ.Ú !bÑM+õDt¶ë¡EQ9¢)ª~å 6Qö¹Â&gøxVA9{Ç1„ˆADt‡¸¾á[íÒ†Xm{¤^›üš•ë€pÿÒõ+‰âAÕìUÔ,ža“3|ò«‚BÄ "ºƒáãÙÄ”i. /ý™G&Œä’_ÓsÕ§ä ÏSzçwY^&òeÏàaƒˆè.’kãÜ*hÖÇMF’9ÊãölÇ u_÷Ÿ³'Zöû¿óé K¯é-„!W•ãJž×]Ë#¯3¬2„èø¼+k± zC¦®4ÄHå® ç`ó+"z`7Úò†Y¹›²LÞ(Ëî‡=ˆ\¡“³×[Îý>ùõ‚cÑ£†ADì†Û<®ë®`r çá "×ëÈ«îzáÃ"Ñ=Þh»* œ¡$‘ìa "Ï×’WóÇDDh¹6Ö®Jèa ¡œU‘çëÊ@ b=k÷™H=6Î"Ûé´Þ Ê«BbõC "¢tƒ-œ§BÈk#ý°6ÍÝêmD ""n¼‰è.SsƒˆˆˆDDDD """b1ˆˆˆˆADDDÄ """ÑId 5ínž±UàÚ–éÐûÿ°)áöâ ®ýŽ©}{aâ/q¸óÇ‚° åÊl]¿ ‡“× zhñÈ ôPJÝúÚ =‚ÇÇOŘn•àgŒÂÉ3±0Ýp{¬‚®@iT*êÕ ¦ )Œ„í3ðÁÜhöv-nãyªBÊ 8~f~8]ž‹šº›I¯\:r‘É)HMIEJj RRœ—“uW®\Æ•K—™d‚ТX>¼úm=G¢ûgh¥‡’-~?–L€–…O³×0¥W:Æ÷ûç¬7ni vOiª¬à°ÃìNcò~Ë­? ]Œÿs5•Ô@Ä|ƒgŒÁVó-Þ‡¦$¬úëz$TÊ ô®1 ¿Ytðòõƒ¿üü(ý @`H8Š—.‡r奡\9”-?~¥¤7dx†Vz4i ÔFÏV£UûÏ0|Zì^^ÒȪýë ¯¨É'½NcÆÓ­°(¯L©;sF</ùS‘z{öG#¸fC” tÕMé÷aï%Tn\¡r£¶:eÃ5ÎÊç)üߊŠH±Ûû÷LûÙ =ßïƒêúœÏá ¾}c*ŽÕŒq½jÂOe@¡ŠÙ?†ö´¤Ùõh:e7–ô ªG:=Ô«oxÓQXÒ°œìŒÌ#s0âã«xê݉èXð|Þï=\xþs|ôôu꤂•ÑìñÇá+]¶Ú…ÿ{m5š.{ýº*N}ö†|[sÆ Áã9F†ŠuÔ‹&±ÌX‰½ àÕŽ!Ù‚Ävr;Þ¹’ ß^­Ð¼~)ä™öèHÄ ‹{Ì+¿¤'êŒ1aâŽåx%‚»w‰ADôÕþÒŠ\±­!»ðá3Sð«ï¼¡…JWMi0çõç`Ç·;ÿwt4DäZñ…% ‘.(Íu¶Èd˜aEjôE\¸ uÑÕD3„=1Òtä Rû!¼xAxç¸/CîèTê+Ìÿñw$vèwšXpdåjœô}Ÿõ(‰|ê6/_@4Š¢dQ† 1ˆˆHö¨1lÀ0ƒÛ•ƒŸ¼¡÷GÙ"0oðP,Š{ ÿ÷å`TVª?Ôzm!¦?—†÷CÁïWa\Cï\Í]ö³‹Ð»Ù8\ðØÇtap3,Ïõè'1¶Å&Gú"¾Ûû1š‹?t©v×4f÷i߬Ü^Õ]E•õ8.?ŸÚÏ äìì>ë*ÇüQ¢z%„+Ï׊óÇÏÀâ_ •Šiøfƒˆè,€|+£yµ¯ðî '±´ÞKxkÂHt Ù†±½G`Y|m¼ýÍô.£Aôþ_°?­š4­€†£çbòéxsÈhT]3 #<6òÐT‰MÛ;;›æ¦àÉ+ÑtÙ6¼—­i®ZÍ,ƒ9Gg£­GÓœýÒÏx»ÛDìÎÕßáLèñKî3Ïmö¸®«wÿ^‰~Å¥ H$àð?нQYÇ÷šDDfTB÷W¡y‡/1aÌ<ütðUtëV åjtÅǃÞÅså½”ªdÿü¡xr6üú&ªh‹¡Ç´ÿáÊgçQÊϳÉË«M*Jtº+Ò㣕D±©ywÉSï‡ÕûÝ¡joVï0Ãb‡:EÇå9͸ºE‘×-ú–Ÿ`ÿ·Ïy41ˆˆîêªÖpælzf­š¤3¨ó|7Ø“a÷nùv NÇÛ ŒWqdÏn¤+š<]Öøˆ€@Góœ°Â"å‹Þ ÏÞ\'¢±´_C,ÍUU¸Îs²`û¸FxvQ$næ§¶º&`×Ò—QÈ#ÕáÍñÂax2¼‚| Ðz<©´³1a¹' C³àÜi£)TÇÑLIÄ "º‡¬Wqöj”>: Ïôÿ™¹~к#ºyîéQ!èÙ¯qðÓ'¡´® ù£@`p ;ˆ´ÕÇàKc®S¶Ø! Î·[µ:¼ ¦.èÊù}ºD<ÖŽ}óòºMS]Þ|K µô4;|ü ÎLj7¯ÄÄL¨Ù®+º)½æL™fè½ ìâM "¢ûÃŽËËÆ ë·õñÃÆ98wuŽ3œÎbþ³m1iGšrXMxW©rúOÌcsmOD|Zà2>hÜ sÏ߸–Q©CÐúÓßðeBy#ËвÕk F~ûxìÑ8àwýÇ0îÿŸYŠ2Ó7â‹Nyý–ÈŽ˜ÕƒÑvB<ú.ùƒ«xsu ‡û‡ÒÃ+s/Îß…àÆMPÖý•Ê„“ ߯'Ǫ¢IM=´%š ±ß:Lš´1ö<2!>Ñ& k×–ÿ퇕tð«1‹6oÇöíYöõŸ¢[I´%;á•6áùxliˆ‹–÷/å3DÇ Åtו¶ ú«ôÃðvùý Uðv£0¬Ú |ôòH¬¾båú@¬ˆˆî-˜ŸgaiLŒêS_9"‚ÜÁ rݼòái4œ² ]¶´ÃŽÌºþAmLìùú~Rߪ‹-»åø!œeзrBŠ@Jâí/&áD×I÷aA|1½?êT#ýì:L}gÖ˜[â½ï' Y@þaö«ßãÕßßðèšäb‘X;n8¾Œ¬ƒqóú¡âõzÎéË¡÷ÌÙ8×­7Þè÷?”øñ ÔòášA¬ˆˆî ã|1ãxµ„gJH«±=æ÷E§!P`ð\|öLIçŽ~üëŽÂÜ÷#òóñÌÄ_qÕÝÍÚ†‹GŽ#%°*ª—Èêέ/ÿ ¾\9 Í®|ŠîOtÁ°‘/ e«!X8ßoX€—Ê_ÿТêâýñÓÅHDFæ3\Ùšä‘0ökØ2±^_-ÐqÚçxµÜûo«‚›bÜçÃQéÌçöþßàA¸‰Ñ=aÃùÅSð]TMŒz­%üâ¶`r¿˜@‹ï,Ç̾Õá¯ò<ú¨%Ÿeâuôó*žÜ7 _/{õ}®âÏ-' ¯õ*j8d7'#òôAìüë¬APŸØ‡•Ë¥úKS "¬8wà0Š7ªŠ¢þ×ùèXpñÔ øç÷{T‡Ø Èø²±ž_‹¹?Å¢Î¸åø¸C„ãÈ Â»PA¥°ÉýÌ冺Ř¡Ê |úÖßèøù¬ØÏã÷KbÝ庌ͿEHùèYFµ½*š´~å&÷Gªù”ù”}n66”ûßœ 5üä¬Àò<öqc\šÓ =À…¨D픨‹–í`Öø¶hVΊ#WbÅ+0ùÕOð–] ÿðâ(U¶.^š<Ï—Ï^¹Ø£V`X«7|9›æ´e^Á7v„9¸€³©QzŽ'>ÅSOMÇ1‹£ºó©ü:ªÈù u(Ûgv>çƒ?†=|xz(ÙãOâ´­*„å·áµâŸE£±0²%Þ|»=ò:l›H9ŽU v"bÀ˨senË@‰ •P±b9/à•g YR.ãÔáÃ8, G“+£ßP\“õ˜Ç¿6À¸é=Q!ߊ( |ò6–áY|8²‚®×÷Úƒ›ö Ò¦‡oÁb¨T­"½ÙY›ª¹ái DDDt_ƒˆu<ÝW """bƒˆˆˆˆADDD """"1ˆˆˆˆDDDÄ """bƒˆˆˆˆADDD "¢ÿk öoü Gâm\D "¢ìf¿> ö=ÆØquíd ¼‘ö;ó"í<öþµ‡"M¸ãgâ¶ÄáŸ5ó1uü(¼>òL_¼WLyMhGìÕørÚ8¼>d2Öß©GÄ "úwj•·áÄ?§áÞvÛãpôH4ÂkÔ@¡;´v«‚¢ÿû“ðB5ÜéSÒežÿ›Î¡Yï70fÈÓ=ó=æ­= kî8„ÕªE"Ýgo%zTðTáôP«R³,–þ|g,ÕQE'Ÿüô(G†¢ú Ê·,kü!¬]² ÛΦÀ«X}têÙuä »0{Ì߈è^—6ýË¥zcrï"8öãb¬Üqéިܤ#º·©„ “4í›+0äCô¬¤…åÚ¬Y¶;Ï$B^-º÷À“å Vîó„w«Œ¸mÛq⚥ï…>íËÃ7õ0V}· m{áÉ’÷ó÷*ß o”w] Eݲ+±'úÌ(“ãéAD½öèXâWœÜ¾›o<±""zPøW­…2Æc8|ÞªT ©ÇãRHuÔÏ n95³¿Áé¢]0bÜh¼Pþ –-ü-«ÉÎv›~GÕgaèÓåaÛ¿ßî÷GÛ‘ãñvß–(>g ”y «f~ƒcZcàèQèÕÀŠ?gÏÃæ(çþ#Ûyü¹%:À°ç+ ~ã2üqÕaLÄÕ+WlÉ£yÏSz""nÂïGÔ¨Z¯"¼ùÖ+"¢‡ƒ* *j–^ŽM‡.ÁV.ÇG`µ(¦Hß»eÖÇàöÕ!­é­š¡Ì¦_q0º "‚å¹ ¨Öáy<^ÕWirËŒõ‚>3 W¢3P­f=´.•óѤ Û¿[3j¢o׆(-6…ŸEëÞÁúͧТ«<êu-ªHhMG™e»q5ÚuÝfxíýfy¿ã|ùÖBücQ#¸^¼Y'èŽ71ˆˆîZ¢Z­RXñÇa\y*‡Îø¡Z›bÐH¡‘‹Ìøƒøäµ-má7»®èáçopoô½ª<‹×{mÄO?ŠwV•B³®Ï¢cpè<‚().öÀÒ(è©òCÁ‚^H‡QÈ#UP¹Û4Ðjì°ZlJ”o¸x×Ç€Oª!%ö,v¬\Œ©_o÷«‡ ¦1ˆˆŠ$BPµš(ñã6ìû;§¼«¡ ­þþІµÂȉÝPJ“³ Éë® (\»#Öjè½Ë1û«Eð+2m³+0$êäx$X¥ K/?L2á /UÚ­?}! T*hô>.Z ­[TĦpÖ\u |wé¿ûˆèá¢àê¨Y< ›Öì‡N ¥RZghÔm…ú¶X¹ö"“R‘y Û÷^Dž½£aEäßâÛߎ"2Ù ­¿Ÿ,h4ªl¡ç_§yÀšŸöãòµXœÝ¶¿ž/Ž'Ÿ¨àQ9å‘7)‡±ò‹ùØtÞóÑM8µâ#LýîO½ƒ˜‹‡ðûÖS@‰²(ªsͳ¿]æÓÓža†MØaÊ.§›À_6+"¢"‰BP£f ¬<›€ª5K¹Wj•oU<;ì9¬Y¾ŸMŒƒÕ¿*6jÊBÞ;”û;Y@ÉÒЯY…™ëbaô)†:Ï¿ˆæ¡ªlÕ“Ê»º¿Ö ?/]ƒ““  ¯Œæƒ •¼Êx ÊLDäÕH§Z¥ZÍÕh@¹¶=Pÿ§ X³à'D¦IY•æðb „K_íÎÉØ“ö`ö;KqÊÙ¯ûâÇobc@S û°'*óSLûGXGóµÆcÐ9ƒ"\örQÑm„L]iˆQš‹s°y ‚MsDDt_1ˆˆˆˆADDD """"1ˆˆˆˆDDDÄ """bƒˆˆˆˆADDD..‘=7Øq90h€ÕUðÑ=ü'ôù†KO;^ÇĆ*´,Γ+"¢V’ó &ùˆœaïH»ãÜæ)f¾ÇÄ "¢{Ì”–ÄaŽKD€žËƒMlš#z€-V DD‚Ë©‡ã€8#`³çS=Øò'°#¸š˜oÐ\ç%}Jõ jUÖ¾˜¨4=1@B¦rfïüI³€ºá@Qÿ¬ù#¥ùwG‰&÷d9gC 4_É zhöÇ>'ðÅÚKÈÌ´`p›˜½¼q"!ÿ§ S~@  L÷'ƒˆè_K5 LÝ#ð×Õ[Ÿ76Càõ-‘é·6_õ‚Àôæ€^£ÂºsÓö ØÅÍÏ/oþGÕ:”QáT¢ÀÍâ†!èá ŒkT-è‘õçö¥x!qç „ê^¾(VŸ½¹ûjTXàº*ôf уûˆèe—ʱ[o/„d_½õ’’*¯_.F«ÀÿÜZÉäÉgÈ”æ_u&w©<†œäç;êOsÉYj( Cáм˩ëØLÞ%¸"+"¢Ûµ3Ê v³ÆË‘hVÁ}¡TˆVªVroü;þ$nÉwðZÖå¡5UèV.÷vܵ™¶Ú¡T>/¸æ(ê§r‡ˆÜt6÷I ùä<²)Dúÿ&”Þmò|ÇÍy.£¥êäéÒ¹“$MªúHÏuÆNbmz¥Çß×Rˆ¾ûXÖ´>¥‹Kÿfd=˜dH z”Ï~_òãÎß–‚…›£á]²(Äzãh¼@•¬ŠˆÑ-[{NÀt-q¿oGi/>éŠÊá:xëTШ³Ziȹ©õÜgÔ¼¨cß‹*Ç vr3Üc…³î!Óš}þ Á@aßÜó{ÞGa)¸ÊeÍ“³ y€!ï×é§W¡iÞ¬eC湋ʸ¿¥*01Ó£* ·—.{e¥B®çbЪ0´y üÌéˆß¼®àB2×%bEDt[ŽFš´û‹#:ûW÷µâ”€îúÓÈUP~"ÓUÊõºä¦ÄSI·ÿë—ö…&.F½ÞE áLŽû ñ†õ&ï«xa_Ä\¼†”ƒÇq¤N T‰r…"Ñ­Š¹§„¬\¸á_ÝײSò¿7¿¿$çov®HA´ðè­íoÉyâ&f÷öÖ!êøY%ˆ\?Ðu)âƒËÍÝŸN›ÕØqáb¢ô/ƒˆ\lš£–&#«§Á¥ø{sX½ÚÑk®OÕÛß§(ÐK•q[ûeRS3aKÏ€91A9²×Ç[w[ÏÇl¶re"VDD·£p°qÎ˳6DâËAeoû¾~h¯B˜Ï­ÃÙ¤¬’£A!`j³»û½mõ¾$¤\KQ.«Ìf” ¶\ÎúëX‚åˆѿ׵Aˆûò¶­çÐoîY¸d„Éšû­ñiV˜mÙ·¾þĺƒ)°Ù…´Î>\¿GÓÚ™(#Î]3åš_ÜÂß"=¿L‹Ý=ȯCþ{*:㸂±3÷»ï¯A_„x±§±""º¯ž¯ˆ9%B•îòú¯?Ï(C^4¾>mÕX¹,7¯ùJ!T3 8ï(0ð¿•ç1efÌM=®J­ÆÒš B„ü¤ûI³×,´þçM—á% â¯ëd7bÆA˜¢®Ýp^ï"aú˜ï¿\z,‰ˆÑ¿&wG^õNu”ªXX¹œÿZ¬F@õ¬c²u-'Ÿ B…>UT¨ìçW¹Œ”V7·ºËG»ŽN¶À[«ÂÛõUÒ_é!ôzø–/uÓÏ=#ýööiù ÁÜaUó?<¸¹¨aÓ±""ºC øjñË„ê8x©,ÖíOBd‚ ¦9ù·5¥KDP°7äŽbU 8Ž×& 0¨0û ÇbÅû!¾Bcœ:}M9n[®µ*kËnЩQ¯”ã—«MЍ°ìiÇkcª–ÅÙ³AˆŠJÝy¸…ü6øÕKûçW¯F!¨Êf‹WÀI¯³jq_¼Ð8:ÀlWJ…PoÇó«_Hþ=“ Á^òo¢€†…ó_n/6/­ó~^lΉô/*×ÑF4ƒÎ9„áÒ°—‹ŠèÖ½õ·] 1ÙûUJ°ýÇB¦®4Èíâò,ÎÁæ16ÍÑ}Å """Ñ£*Øù£TyŸN˃(/ÜGDDDw3d¸ˆˆˆl """bƒˆˆˆˆADDD "¢ÿP4hPÓ€ˆ’j~$Qޏ¢×áå¾A\ØD`ÓÝ'ß¾… ©F$+×~™ ÝKIXorÜžº=z&`øÿÝÉé±Ê˜û¹ØÓ̘5#åzE#|p<Æì·Ãó°"Ý‚y³ãPá¥h„ŠÃ€M¤ˆÜf5apŸhtÿ!C&Å¢ð Ѩ0._^Ž“@È·¿…–ëmŽÇR¦Á+›Œ˜ðQJ¾Rc“ñclþËОfÁÜÙñ¨Ü;ú_C¥™¸hqÞ輿~Òýš‹±4ȸlÄkÒõ‚="¡î • Æ+!\'‰ADÿ1…jP3ÝŒM笗MØ m ðû+¬ÒFö÷#vÔ«¥G…Zwvºàín™‡ÒñÁ1 F¾ˆþR86¯ç‹·škÝmÖÆÒ0ù¸cú¢U -ªÕðÃÒý.ßlBÂuns^*<Ö-SZy¡y5/¼ÑÏ30~§O•¦> :z¡U o j¤EÊ9 ÎæÑi"}>8©Åè×ð²ôºÌ _õFÚo©ø2*ëþJµÄ¢nÞè\[‡h36ÇiÑù)o4,¡Cǧ½Q[Z6‘5|¹% ýçV¼0/´-jÃæ¬8}Є©ZQW‡+ÒåSQR\Ó¡M ´wxºœ+|ì â4ZTÉçl§Ñ—­ˆË4aÀ«QðîáZ­·!Ã(põ:·YòŠ? ¤„»–”½éÏ“Îc¯­A'¥¦Y ÖDÄFY‘bТRÁ¬q>E´(+NÅd]á0rôb™¶°ÍBlX¿EZ&‰6lÝ’‰Ãz4-Ìõ‘î/vV û”DZ´©¥Áÿñ­ÆŠOèQ¢² 5dbÙßÀÑÂÌ ¿ Ó娆ÎjÃ¥$éJXîÛCB4ðññ¢ù!xÁ/ûmÉ[3ó½MÞG““5Ê‚jþ÷=å Jãk²âLBÖóÎŒ¶â24èšOw ƒ]j«±ô$4Y/àS “Æ µWGbEDÿQ5jv"ÓNêЪšš‚´Ž0ãã•f„Õ0 ²æÎO'RMñæ5tùŪ>°Ž/^*hÁ´yiXyÌŒ-[S1r­Å]ÑÖ÷ÃÈ"fŒû, ?Ÿ–ª­+f¬ù%ëã®›ƒÀ¡?Ò0oŸ;þÉÀ³Òq¶¢?Þ¬yëýòr>oÿºþx«œSf¦bù1 vîKÇ …FZø£o‘|îÄdÆ‚?Z=Œĺ×üÐ>\ÁU‘Dô_¥/ï…'¤Í`1ZËk£­jj`±¨ñD-»IéŽNgH3Ú‘jvv(ð1`ê;AèbÎÀ ÷ÐoµéàÊ ½cLJ`T  o½ µÇ&áýlÈ0‰ëߦP¡€¯+& ÍÔTìŠðÆ·|QAs +çóÖj1êíŒ 5aü”8´ý"©‚ñ[/Ì/礊¨e;V-ˆGý×cQuH,Š÷ŒF•O3pÚÆõ‘îžèn»O÷KÀ‰aø­æøÆ—¸3U©±è“@´ö•FØ¢¤ É3zOÅ„|Ûè®„Ì OŒÇ}DDÿ£ª5Žœ·¢rI5l1ü²ÓŒä¢<ÎåC÷ƒˆè?"¬EV%%c¬8LŒðÖ¢^=ü<ÉyqùÐ}­šØ4GDDw-dnØ4ÇÎ DDt_1ˆˆˆˆADDD """"1ˆˆˆˆDDDÄ """bƒˆˆˆˆADDD """"1ˆˆþ³D† ã§¥à‡èÜ·eD[qÉšuÝv%}§§c9k\úñt \aB<ÏÍMÄ "Ê—] !ÉŽèDÇgÌJ Ó #¾* ˪$¼îÿ*Ø9!DÄŠˆèvh4hQN þ‡É,ï‡×‹8F×~1 –g2ñBïTç„‘U Ë‚kXQ)«ƒ¸‰DDÿR‰¶Ó6ÿÛ…°K[ô Æ–f¼ðJ:ªUÓbÎFoËåGÄ "ºM~Žƒþ眒“> ÅÄ’Y£.®MÀ¤íæí1ÐÏ•?azœÇQ ºá王€(‹*È “†ú¢‘.ïÛ…ÙŽD£@j”W4(¬qŒ?üK:¶ðÆðšv¬8®Á{ãÑ1Ž£1ôL£MÈ=»‰ˆÑí³Ee óÄ4j4è„êÎ ªòDV6Ô£±Ý„ÇÚPýPÂÆZ\Ú£ýÌ58ßšÔ¨ßEp†Qö/€28¾§i<s0!Â¥a/ÑíB9<Ñ1dêJC äÊç`ó›æˆîɇ‘Ë€(? """bƒˆˆˆˆADDD """"1ˆˆˆˆDDDÄ """bƒˆˆˆˆADDD """"1ˆˆˆˆDDDÄ """bÝ«Vq3 X-ÖGçuÛ¬Ê9yïÎ2MEªQä•‚tÛƒ¹(„àÿ®­ëv+ÌÉE¬¼6ëͽ¶Gy90ˆ$–“øyáœ3ÞÎÆøæõhˆ+co¸‚XNA›ãñWzþ^›) I×¢pñì 9°¿¯ú3?|C{?‡K/º7ü¦-“ðTË–h™×ðDG|´ÃzÛØï{¡æ°_`V®›±ù­ÆèùÍeسM—Ž­Ú¢ãø_©œ!>ßõªŒråÊ9†*ñSªû„Øß¦cÊê‹ð|V–¿ßA“öŸâH®§jGÔú1èøÜ4ìIu,U‘ø&vn‡±cs<{öm;Þ}]gžÈ¾öèåèÛôe,ضÇcí°™…5‡ã7y ÓÝë†HZƒaÄŠhç«°]À‚^m0éïŒìwšv‹¦-ÇIÏuRÄcEÿøcbëš{>h‡ŽŸt,c‘ŒUƒÃàUq×]/EÜÚòuü”˜÷TÖýŸá…×–à’ÇB·˜Ž­>À~ë½Y×-¾…Ï|‰K6;Ì©×pùÌQìÛöV}=ÿ7ª/^±¬î7+tßÝÒpzýX¼õÍj´/¶?lK…—^•íCc6¡ç²mø¿ øî¥˜´Ó’õÁ4aÞßåÇhœc4(úòblmÆä'¥Î5#ÒŒjøùJ›ï$#^©³ZS ,†øø¶Á';¦£µ^Úäÿ:5úm€>¼ ‚(  £TÙòhص*T poTì©‘¸P°7þXÚ…<£ßvŸ¶{Òí·¼¡ÝýáÓ²"֌ě Ñ¶qЖm‹æé(ðdXŽo¾xlø›¨Øi8†D¬Äò°˜4h;ë >«¿/5Üà:jø†ê±÷0B,Á§]Š;V«éé¦lvùƒÛçÉIØa¶Ã”žîµ¾„·Ö1mšI Ÿ‘ͰqL#LúmJÎnŽž_G)ó »e»µ…ïªÕ8fð†ã°Àhn‰G棓ÏÍ/‡]ï>Ž—G»O[c46,{&i=IóÙ7ì"[¦ÍÀù'§`رÐç‹XüŽvS ö|ÿ–/ý GB_żùýQÕ+ÿ̉5gÏbóÓõð¡´\üJ„Á¼ï5Åùuª¼Ðjê|X_ë?Sñl¯+˜38«•€ÎLKBš9÷Ö~ûwG¡äÀ²Že›¹Ûöx£ä ¨®ûE*×®Æå[iŠ´Hœ:§‚Iع|8^¿Ô ß¶3#ÓhÎÈ–í˜t—Öu÷K¼ô=õxi+ º×yõn…Þ%.á’o¼Ý«Z(ªU˜úÓN¼Õ¸¼E’ÊA—ã äìNO`Ú_ø¨ÍH5=Ž?WüöŸà¬¯´–t¤W}[xEþÍWkaAFjÆM¶˜8gI¹ˆÃ'µÒ2Ï'îàr°î›‚v};¾LJkN…Á˱|pyççdžôøh$Á ºTÁ0jÙ&4ûáwìÛ{ÕF.Ä{Å"¡z[Øý3¢ÔDZ¨¬%vXMv<>ýæµÝƒ1?E©å?b@Is³» ËÉ×°ç³VÐ;ï{ÒŸ‡0zËh´x7s~}µå¬rXtÅþ>›ñÍsaÎ …@ZBì ßÁ¯K_B¸¸‚uSç"µóDmÕý¿ ©òRhQiøX1¨4¡­0nBW¼ç µHEJz0 „äý©õ­1óg¥àµ%»Ý©8ŠæóáV…=‡E‡žËúPÆ|‹çšoÆ3¡›މ'þ†oxÁßÏŠ?Þlˆ÷l:¨½ÛãkÛáÈ7FtéoÄø–Ýòrh0ñoœû'F7˜Œ°ÅðFe­jçljÊcÃ.-«ŸÇ`Ôò8øT›†wvD#ñøÇ˜²®+ì–‹8Ó}go’ÞóÄÙlˆùi$ú¯ŽÀ;«ÞCÊøáˆñ)Â?{WçîÆ8Í<ýIq,\3•”7´:ú}¹a|‚i]Ëaß»³uÆû¶º(=Öñ\Ë]ŸÚl@Ç®_ଔüê×k£\@7|ö® ¿_;ƒ$iÃó…ô<íV-ÚÍ=†/Úéo¿á ñÎÆ¸ª;3bö~1³þBÕ‰³Ð³ìcwa]7aýkuðúºT­*´êÐÏé‰sïjðüS*LoŠ"W ^·¦Óš°NZG‡®Í€Åj‡Zû *ÿ Aá]Pæ@:¶ínŒò“÷ª|*v~QCZXèùÕŸx·ÔiÛêXÿ ¿ˆE½‡:¿ Eí·¾ŒÌ¿ Eµ¾«–#D¶V)ŠîCÏï¶ ÉÒ&ùK*2-* «8þIkQcøo¤LtDL}¢Žý§9ÏçœñS?Q¾í{â×½ûľ}ÃîÅ›MªŠa›L·¼Œ¿ŒõjÔ5ÜCMÑ YCQ½Ý'bû‰ƒâlÜ1¿k51x]šÇ\vé?ééžž%:Õ}]ü*ß”üƒx©B±2Å"L&kŽG± ›Õ",‹Èøm„¨Ñü}±?ÓqÝjSîIù¬“¨åzÕ*ˆEKŠ Õ³žSë÷HSIïÕÏE£gŠs¦ bNÇŠâÕÙŸ‰n•¤÷mÿÇ¢U£wĶË߈g*ô«Óoc¥0ÿ!Þ¬õ¤øøh¦8<õ Q²X1Q´HQ¤h1QLº\¬HqñÔg§„9j¿Ø¸é/±ûÐ)q)6EÄï[-¾_:Q´­:Lüª¼6qq^7ÑtÒnaɸ$Žoœ"ÚÕ{A|ú~/Q¥JQ¹BQQú[¥JyQ¦LEQ­ÙD±ÍlW6~.>ùn›¸”á¹èbÅ·Ï—/~§,sË?ÒúÔòCqÐ"=ÚÅy¢KÍî¢W§ZâÅo/;ÖAÛE1¯KM1ü÷Lqi~Q""BD\w(!:Ì9.V÷¯ J/&½æâ¢D¹Nâí·Ú‹Z¯-Ûæ½,j+.*7o'šWm$&î²x,·;¿®›75;ÏÇÖŽjW¥¥õ¡lÙ¢x™²ÒåÒ¢r­z¢ý´Ââü\Tèñ•ˆr¼pqå«gDÙRϋű6‘¶v€¨Òyž¸(ßf» ¾|¾¦òÈCÅ íĘycE§J%E±R”q5{+"mÿnÛb–ÖÁò=ŲD{Þ¯mÛÛ¢A»ÏÄ)kŽ×Û~–8k½ûËÁ²c¼hÔæq\úLn×P´ž~Lãㄲ9´] ºV֚ăFÎ9Kœ™äÌ/gæÈÙ£zÈ*"+άçÚðôhé™ÿLÿô0š~ºUÎoCr«Ï1ëê³èÿýi<Ù¶©òmNZMÝyOíÂèFŸ ôŠ•X8;«#:|;f´–*"+ö¾ÿ¸ô늣 Cú–cz®"–èÔ®°ÆÐ:ë¥ûr6ã«„3'¯ dí²7URj‹7A—ʇ°qÉ÷¹olØœí Vc*2,7nPi}àS³;†õ/…$÷סìúæk$to„³ï=‹…mÆÃ~¶ÚÔWcíÀr¼>v][L[Ö›GÌ‚õ¥ÑÂW~ÐhÕü ¼×¸¾î;μ€~?¦BhŠâ•Ïûãôð ØêÑìܾô,å¯á©™8üeT¶û‡å¨ˆ¶æ®ˆ‚[@çÏ_Æ;s“¡;]µGzã/w­r§hPõÍßpþ8|÷blì¼_?ã ƒkáK_©ô>u&a«ÉõÆ”BŸYÃñx…·1¦~5Œ¾•Z¥ï^/Í« ­îgÓNòIœÒµÁ‹¶Ã8k.Šr#2ŒøxiP¬ïJ\èëXB kã‰I{€8é} ÀÓ³6áƒ&¾÷tíþz >*‚oµÀþ‰ý±xÝ$Œ>k‘ÞørCwüÙ~(Ly]ou×Öu×;ªn< [¶ ÄŠ¡¯`ÊöH˜t(T¡ÞÿjZ„ª±–]ÿ‡•?”fñ‡¯O Œ–`ì?œêGÏ ¤V_D(“–@Ÿï UÛÌ.Ýñ‡j¾ý&}F¬AÁ^àƒ~õ¬ºG[¡}ï£Å pÑ–õz/ù„ZŸ§>þ¹­,wz9ÈëÝ,t©ñ%DFŠ :…}_ÆÑW7`fÛ‡»³‚öa{º•,Å/Uçbêo— m[ ½fBÏÇ2° ëìïwsFÎÀ{+c r´›ÚìZôÎwÑz3ŸiŠo¤WmM‰†µeÖýÖ·'ÆÝl»ÇìÜŸŠ=kC±w=Æ?_‹Ýiá‡. bDÜé±37/'Þ솿Ÿû­ÿjÁëL7|xC«Ï°jq Ü» ‚Q½ÓX4y¡(Žÿ)÷ +ƒŽ† io„Ì9§•Ø ½ˆ‡©æ»˜9°¢£ýY[=çþޤ²^­V+´+ŸìÇä–Caïeç_u¼ä-£PÿÿBñÕ¦1¨áØi„#ÿk\Èzmv3RÓÌ8ذ*&ª²ö9…>3›&4ÂàIðÔóÓq¥ÌPŒ(©U‚Hdaòöƒï܈Øbu;P‰t¤¥Úáãë#]6"!¡6&ìŸNúßô¤Jý²m'âÇ—ŸDIç{‹~߇rK>CçýвYÖ~F]µ¡X4Ô£ÇO`et›üšÆX>G{\g#vMZLçæãÙš‹¡µ›Ð_;WúuÁkQaøñ Ò3 ðöö˜)c?æ|¶õöDâ´]¨ßW‡ï?^„—êEÅ\­w6œûáS|̈àî³±±ï~téŸ&Å¥v)\´š»µ®ÆçM£°}ç¤ÿ³ mk~…ò¤›êO¼312fæTZ†×:õ@Óïat÷ÊÒ°A×ä=üý?`x£éøöΜªíýãßã Í¥éR„Ò`J¥2„Jƒ&)$u”JÒH/Í¥ÁÐ|›'MRQn"•fE¥AH‘¡8æsÎúï3àÅï—ûûwïú<ÏzΰÏÚk¯ý~×»Ö»×›Ú×+•NÃçæe(?΄¶SæÎä"ÚËS _JPÀaî9yÔO°€N<)ÈnœˆðÍRh3áB=zÕܨñ°}¸9|žr«œšcÕÓ‚ûå pOAòK¸(I» ߣæØÿú2k½Ã&ã³ç-¬ë+’÷?½ \Çewž áÔœ!¼Ø0Þ©/†ý± L¦BôwWY±ßLÅcÄ_5½°Z0O[Ä\¦ûjP©/ ¶TKØüv«û0F¨@1VÆë¿Áú 7P¡¾H‡´âKÄPF¿ŽŒ²×ÃXh Ð@´æQ|+ÌûÂEÈJk‡¬;8´õ5Ùè 7t?ü.sa㳆òâ+#ÃBþÇ ¨M9WÆò”ÄlƤó_ðMá"Öw6î›Dʼå-¬ø¶¬þr\9hV‚ë¤2'®.F÷Ô@Œ“ÀX%جuÆÅážØ;ÄyòP,Uf’ƒèõî8ÕÖ ç‡s±p#m­W`ö-k¸n1À w=(°*.¸ËëM…s~–¦K‰º¶`­”ËAn~´‘gÕM_çÄAÛáØÂb5xãàâÙ0¤Þ\‹ùÙ)H-YˆY­  ‡L¦V2,‚¯œ<°* >7 %ò†X¶e:Lâ3±Ùa öÈ ÂVC‘ÇgàÇŽ·à¿d‚:Â×gº2']œtë]½qGÙ®3ÆÂH½ií [ Î! 0Û:Scp*`~ F˜>sÛkfÄÅp5ia”iÈ2,=,…~Pîþž]:â…„GÄçrAl5b½s“W" Ú¡Š¹46uÁÔÝ–ð>2ƒ~a!ú%Ÿ#â%§ëQ4\ñ¯â¯b¹ËÒìzí`¹- /_ÞÆê~2Â验/ x0ÚêÊhß± tôô '(:šPQê»?“*†ËôGx,ž={V^î­‡y½ BËÏá=~<ÖÝü"1µDº#F.ÆÕtÑQe›)AU9¯¤@®ƒÔU[CÿÆ`Ô¨QÂb½ì¸k±0ÍjŒ[bN_L«Š=Ì` Ÿ‹ ›|÷>q‘zªŠä¬g ï“nÐVÿoñîu$¼M[£‡õt—þvtÇ)¨vêŒ{Ç ý5ÔÊÂÀÕ­÷ )å ÆwR- Wë«€wB¯‰ûê<‚žñÁ¹Œ(™Xî?܈;øò4[£u±x×lô7/9«f¹aïÜïLÝñ‘ÿéƒBÇy€±úârQ—ƒÓÁ†‚EÆ#ÊÍoŒæMÅ1V†ÝÆíˆ°Vwÿ‚¬47ÂÄÝ P¶ M…JîãIÅÂÏÏÁñ(¨¢B¼7ŒÀK££2……ݰèF^¼x!,÷×õEQ~Ñw§ ÙJã±ÀF/ãÁ)R@ÓÆ‚ºs0³®uÃÆH–Þ­Òª˜´ÉÊAÓ0}×#¢£ðÛѯ»sVœÇë‰^]…5£ãAç‘0Vb×M_—j ë=ÑøkõÈ7h‹³=§©Z‹®àÈÌnP™€ëǧ ƒ”Fì 9¦G$¿KE[%È–ƒ[OrL³KwS…Ô4¢™Ç|<Þ=ýúÛÂûz>ÜôÆx#ì Ùˆ1– püy2bO¬„ƒ™ÌäKâ9,5ÆfÖÌuN«Áã²èê´v>p\ŠÔâ/x0 ®a]°rÓ$¨š‹Õº}´ÛmÚöÁ˜ÉÞ¸½#ôìqà±àº‚yŒeì%m´‚M´CuGãæüÍÆ%àR!úaF+ùîE®õ ”KBˆç,Ê;bš®<ÌfZá½×,l½“) Îz„üΰßu"vc\‡–è9ÓÁ—÷À¥´2Y†ÕvJ¡$>Ãú wïÞåÅÄá’F›„³K–ãvï•Xj&rËB3‹•ø£ÿ=¸ÍÞ‹WâA>'ò$.&ç!òô%Q襴„<)»ù˜.ê𵉊z„#qÍ "0¦ìvhǺ€Çã}ø>\ §&ááS¥±˜¹‘÷áL®¼íS±òwlvÿÛá‚-3*®¼®ÛFÁxúI|ªæn–îã…È— HHHÀËèݰú­% †õƒb+øÞŒ¾ž3ŽÁæ}@Іýøbµîj¡¼L "ÿj _¬zmÑ­ÉU¸.»†/Œµãg&à^Ä)øÞBõ“•ŸËxšëÎå¡ÿ’8v÷OãÎÎ;Кh Uáè6Y9M¡X!Xæšö›…“¥'&­û}‘¸Õ®*q8v3¹ÒMÍEÖ»§xòä ž¾ËªÂúŒà{˜>錑Šÿé-%ý¥Çá;¨²¸ÍѼQ žùÚÂî rçàØS íu#’ójµ‡rŸ9¸¬ÐõM€•wÎ-‚ÁM1eÇD…xò½¨CIµìÉÎ+‰óÖñp÷¾‚:éë¯SlVÅëî9öþÏ‘xÜ fc·áI©ãËM@DT>´ô;Aª¨Ųr¨Çâ!åœΦ|¾„[Â祠Ë(O¸h}›ˆ´f¼< ¯…=ŽÄ¾B„‡ZŒñÅÅåúxàë 2÷ÂOÛâƒÿwŸŸ*œõÀ܃;ax.†ô3…ÝQE¬8µc”ÊñP종v ˯-«E W ƒç–{•&uÕâO¼/Fví†ßOç¢>ãʲ„^‘+VŽUƒì/,D¿ÜÔ7á ¶þÕ3¥ÀËr nk¸!`CD:ìÂGÍ™ðó)„£Ó0¼ö<5ÒŒw¤Þ]¸éxÿI¦c»àuc ¿J@0KVv+;ÜV ËBF‹‚c¢¢DOLcè(ëTO·9beŠö„f„ O«°šÂÔc;ì­àh„³“8ð]w­ç®Gïk^먋%SRÉxXwJý£¬øÍrÅ•Žî8e©€¼übÈ~zŒØeL̹”ã`±:Ü–2w±Âx9XRÌÍ,£UUÁ´AÎë«ØÕ ŽF=Ðan`Ó€òšð^n+û»èÞNøÜÖÆüUÚ¨‡$¦‹Ä`©&|ÊÚ©EZýÊý¸7þ°îv@8’j1NØ÷ ³R’¹ íÕ¡"+ uÛM8m« –ìò`£+uv-D}…ŸóÉÜöhQxF­”Ð\Zä)ÈÉ‚_âæ&°›$òn“?&#§˜UÞž?»¯;©O*zV]ÅÂDLÍZkSŸÂÎâ±Ð›ÊþkNqa­6 ÏS‘Ù¨÷ÏÛÖ7º÷<º·é±mç|µQA[¹ÜRŒ'ÁôßFe‘‘üi­RðµAÈïkü¤¿‰Åã˜(\;w¡™a8 ’n\Åj>âFš¡V7tÕPBÙJœûÜÙÝ›,Ò¸ÒÀ„_'íЗ- yW:3ìòY.—ÏX"ˆ4ëWU¢_-|›ópYäÿ”ó2È“;/H_Þ0º q ….æ¿}Dâ²òI”§)±ßyˆ¸™ô!¦#ì‰ÓÒÍäpØS’ø&†\ð[AfÙ%†ÚšdàºûDy›wŽLSQ&Ý%â™ÒCƒtTEÞ‹âCy™¯È«4®0|ùáZ¢¦Ñè™Ï'ç%âGK>½!‰¹yä®— é5ù ‰/ „›õˆ]éH¬LõI.êDµcGÒ¡C¦¨C¯;¤°6¡¦y$þÀ4bÐw™uô-áò?“`—!dêá7DXËÏ%vO$V+"˜6â’·û§«E§ÉÓÈddo#2fŽ9õ(|M¼AüÙs=]båûTX‡’—d¾gù éîFtL½É“²× Ƀ?†’ÞmÉÜÕûÈw‰0e>á¼û‹ì÷šIÆšö!c¶>!©·’ ¸Q@pâ>bgâ@|£?.á‘ä‹ËÉøÁÆÄØÜ†x3Ã?>É#w¼-ˆÁØmäA¿† ò•\_hBÌœ!¯ ¡È›ÈPMuÒIM‹ Yu“|aÃÏ>Aì5¦‘ÓOv+m]b0Ü‹„§=&Ó-Hïn‰†Fg¢©gIþ¸#ˆ¿% õ­H@b ))È#¥‘íüô3Ä©.éÕטŒ\r™|\ò‚—$äj¼(¼¹à&Yk½˜\L/¯w~ä&2uÕò™y‰›pˆÌ™}°B°€œë^dÄ@3bj1ž,¿˜D¸Õ†Û‘#ŸÜ&ÜÄ3d¾…>éÞEp^D£s¢m4™ì‰‡]ÿô¾Î%É퉎n?b½í)b®Ç©I*D]·?144-Ò©³3¹V˜NÎ:$óBÞ‘…ý‰¶ž ±²µ }Lg“À{Ÿ…çÎÏ''܆AK#H.Ó£#i%uæ\:%¦~»Î­"ý•;0õÑ ê*JDS^Îÿúˆì_hOÆMö 'ã¿÷,@¹íaD4û %®ëH`p,ù\Ú·‹ÓÈãKÄÛ}3@ Zy›$üé@ôô ÈHïÛDò¨9—f‘êšDÇÌ\J£:l‡ªbÊcÈÊþ*¤s]t˜ïJäý’áÛB„þ$„è–q©ÇG‘)÷I•%\pyÒ–þQ°©¨˜á%’_eC¾“2šJ~‡Ÿ‹o²Ñ £RÅ×kB¶<äÿßSàYýpTÄE W2•ëÃ/F_õþ™6›UíÉII¿ 3­Í”¥`AæbW ¼§Q'´-]sãqð9­ m›Aî›kUU¿$ŒgÁ‚‹  = Y²íЮ Y©9i$…ì,•šƒ›Žô’FhÛL®–Ud<)©:î ?³~Yg§'SÒÖ¢y‰ag./äŸ-D …Bù/D4 …B¡Pþ§P!¢P( "Šà™ÒBäådãsÚ$%¾Gzþ÷7¾!œxù6E_ÿ÷ùUj“¦bkýb¹¥¸ÈÏÿõ¶óÿÛûdmëG“Q!ú·A2Îcþå¸^Õ¶ì¼÷84Å}zëCOWšªJPÕ1ÇØÉs°tívì;q×}dÌ÷½CG[Ú’Ew$|v­ÂX·sHçW4¸¹ïñ¹ÒýÈ3#¬Ãp_¼äd^p…†—ŒX¯Ê‡ú~f¾ÿXZžùÂn´7n×`›þ¼HO˜^‰ÈÜ*3>œ˜†kbÊŒ?—“‹ÂÊÏ}?†ÏÈ‘Øö¤Rëp`«í z[ÝÙåãê"3¸\|µ¶}RÔ¾™×–ÂnqˆÄ{ňÝn›­1È—ø\Nè ¿§,çùŒ¹†SpücMR¥üœVNE×}ÝP–~ªèl?‡×qW0®×næ[Eøš‘‹b¾ ‡ëcƒ¨!Ðar dÍÁïu’‡Šš.*D¿,̈óؼț3 lEª+c|}qC³¡<å‚ÝUê>«#EA$_R À}3 ývIhUš‰ÎüÌî±÷[ÕÇ×¼~®)¸É³ðàn²cœÐãóoQš9œDäÊÞ°ß½Ù3Üáï5¾-ÿµ|$)Õ¢’6»â}­Î­óÌŒ†Wt¼J=ÁîÑëÚàpðpã  „…aÝcà4™ñÌ"Wc°Ñ¡[_œý| ñÇeúÖin©šRpÁ]g…€[w{úÊKÅZ†ë„¸vaþæ¯4箕n([¹{1‚m<\¾È¨7nÁÇC焎òŰß,1¶óœÍ„…a(ŽG´‡¥«š¸¿|½·.;¹˜}ödÖÚcÚÚßprF b®?AWžFÙĈÒïÇ;1[FLÁ³Þè©Ô=™kÿ`îu›…é/À+,ן€f æÖ¸OöÄëݶ˜´ç O:ÛÙw<ë~ÁgOgáæ¨í¸â¡Ø-óqª½7.ü~ n7Ìp`ÒSL´¹‡q×öB9†ŸênœpRŸ[]ä¡*{ƒB…è×lÆî®—ñÌ•©gDcçüå¸Þ¤rC>As¤4r†b÷4è7g‹¦ÏÞÅ þO¬˜ùû»0ï´>–¬³F©Š³¦œH[ÁæÆ†˜¿]A3ãDÞÀÇË8Û ³—teFà怓j…q÷¬Æ=á|$N½cû溸uÇÈmaÑD±>xn¼Û…{ñ‘é ‡YÁè¸ê8¦hþÖ6oÄv†³Âˆ*¦{ ŽÈMÂ&ÍLÜ{œ#Üí:-ü´·x›÷¼9|ÈM·Ö¼O”äfAÚr7zõ‚Tê~ŒÛû‚T!¥ž¬`¾úÐYx7Ú`ÆÚT¦~Q•¬â"ì;õY|p; JÛŠ«^ý+í¶Áó °ô}ň5ó9Ö tÜ$û®îa¸0n&Öï³GSÅÖhݺ5&ßÀÕ„Gø³¾>ìçÛÂP–¤À)˜˜º7VèS£H…èö‰²žãÊáøŸŠGÇí8<ð!¦…F`àªÍ˜äE£-Ñ~ÈDL¶·Äo/o"$, ܼ—¸q9*ƒ•ð<$Ï+š´¤ÝöŠè¡Ïŵí÷ Ð·še†àö‘Ãàš/ǼŒÍpÓ¼8%,T@˜‹&¦qÀ“ÒÂò¿‚0¶é;,ØyW´=[SŽûÄs–?3¿ ÑË 0~j%£xÚíUäVâž·¡D5r<0<#*.‹³¸9Ô Ö×u¾Z¬k=\3 ߌ³yÅÅPuŸ¡Ò@ÆÃ‹Å>“J⋦PùD´ý ÎÍL0Ãy&ŒKwkg5‡…›]‚æ'áªÝÜ×X}²O  *ÉÁ‹¨Dðä3p}ùh-Uy(V÷Tı½é•Fá¿íÒS"±àðPfßÅÝ,F„>sÁùz¥²ÁU±Ý€öâ§×°O6m=ÃHÚÇã3Ð/DVô0g~^2^×z¦ž%9éà/íò Ñ{ÑEÜ_~Ñ–F×`~ãš|ÏSù‰y¨¨)£BôëRˆçG7ãd†> ºÄ#üÐ<Œ9ÀA)€ÏÈ1Â\;Ò:#a^ÿ>Î…õ€×ï á38¡n–8ÍgîŽgÑøRáx²Ðw?ƒùƒäpk½;®g‰—øóÂp=¾yô7Ѓt\cà;bÒ¶õh¬R­¶ÅáýÆpíµU4Ö/ÌA¡Ñz<جˆÍƒ]‘ÏÅ7^HäG°³óOϯ">«îàWé|~cDLàˆü¨=¸µªOYçdI±…Þ^!— ^Z(ÖLxˆœô h-{€moáBzWŒë+ËxiÕQ¾µ_W“Ñ]Šk?ðˆ¤Úb¢C/ôå ·Æ,Ø´ ‚­Àß­ÞK«LƦÅQ=gz±ÅS×Ý(™rSÔÅ­Æj‚~‹vbYv_üÑö.:w§}ã`7C4Rp¬òåôàq3sOM†áuS¬ýs×ôpÆ<Ú6‹i"6n©aŸdC”EG mlüqSÒ#º.鉆/-3Áü`‰ ~!¾0¢õÄXëÊš…ú›pÓÛôÛM>F* ¢_9hÍÙ‹C$ Ç6ã¶ñ6,2–/ó"²®­ÁÂäÖ6?)/çÂ’ Zq‰¹ß9È+b~û’ zE°‘÷µ%¦IÔñÃÙY˜|Rëç@Gá;7Ÿ8ÏÌø˜0ðäW±üÃ`„Y_ùf7aQ~.ž•åWùT)¿ŠÎU•_…‹WîŃžvX«äW!Ò¯8- YMÛ@}¸ökŸÃï{U0z¸6ž·mNš4kÊפ*ÜA¾ïí.-ü0ß΂a`­¾‚&åB-Ì·³V«ÎnÄàV`ÚlvÍÚLRö¬…±êßLÍñy|¨K$ä§ßEôë WŸ Œ!5‚ÏÝïOI忾‰°çù¨ß°ów$¢c|ùo—Û cà=̧?5¥wk¦[É£µRK4ø » ÚĮǮįÐZäo Jˆ©k­ú$gŸÁƒÙâï–zDU¤“/‰ô„鬳È.Êc~¹!Ê”¯ärÀwÒÁUiY¯½ ½Sp7B”‡êÜX}î0^‰ÂãB…袑ÿXÞ}¹Ù_@º•þ'ýI[pÒEš\°1çFs$_ ²!úMÒw)úˆg1ÙÈ"-Ê wÒ©½WYˆMÝOcG@ìÖ–‹YÉcü1Pçz¨ ápæ¦Ú>H4Ræ½Å.ñºK[Ó)°<6“xØÀ=UgðDùUJªÈ¯ò¤$yN0 )ƧcqÕÄùU ò«D|“_%K˜_¥/Ì$FžœÇ»°d?ŒBë ~¼¶ì«î°|愨õf`…_C6»BSú6^ä@Ì=o]£®h)i5ÄùvvHN½d«¢WÙÅ)Í·³ Á‚|;¼eç-Ì·sÓ.³÷¢ãÑéP«q›IȜ޲NÍ S4_Äc¶4Øû¶"¬w÷ï;O™±ùs¶|…Î.nß/Ü0Ïj®OsÅœ‰C¡ÕRÂsÓÇâà{ŒwÅE´§f~9‚ÀÑ*¹‰à²Ïô…ÝÈBŒÜ¯ÏÑÇ=N¸ÖWø%Ñæè¹QJè™õ^z¾5í“x±fl÷¥”¯ ³ÅÄôè7 ï®Í¤ÃˆðZ…[O=ñÊlΨaUàZ W–®Â#*DøR¬Kì3F,VšC«ñC,·8­¹kDy¨¸Uç¡ZÇ*Æ—ô&fÆæ¡òÃô.MÇÇáw³Ô/‹óé^ÅÌqþxh≞ÔJR!ú¥`5ƒÍŸoaó£‰<µ^К#æt›Ž}'§¢]™¡BËb Ø Ð¢ûd,?á méb\Ÿß mܰLXïk5D^Šå—cÓ°v(yñ%Ê ãè?°ÝÃØ B"‚h""Z¬.€7ÑÇÜýûÀµµÃT·ó…–Õn†]7ùUŒãuc.<E“pѪ‡g—¤„i—ùbý%;òÅ/¯)æ ¡Šâ6z gŒ/Vk†c¹{ØãþÀTÉçv¾Yµh³R-¬A°ÉÇö½oa¾é2Æ=p‚³Ã 拪ð) œ†M!/Ãb. fExâ7N»Þ ý°iX´:4»÷¬}1>€í;`ßo5º/Øý3º§8yÜÒ1ŠñõKdê7î<-ÙÀ *â_墙|,Î< ç ®ÐSQ@ÌÜ ¿1MË=¢´ZôI[xí!1L«5WµIRwÜ¿¯˜>uZ_\‚ž2¨U]Wy¨šcGÓZä3¢üDÛù‹å#úÿJA°3Ñä}ùnéAf}-ûNQÈl¢ÑQ“èõêEz•}Ò]µ#ÿg©u†û–šnA†ŽžH¦Z &öÏD9”9šm%¿;Ÿ&x|ò5z;Y¶ãɬ–„GýFunD×Ì™œI.“—þœ<•L<ô u•_å:¹³u8Ñ5I|ÓE¹|˜3Ή\O¬ûv!JíÚ’¶íÚ‘ZcÉ®g…$)Њ¨vÒ"æ‹/‘»“ˆ…½'9•R–éäÓ-²e‚±ðy,:ÖOϷïE›‰36…-!æ3Ž1×¥ò;%äÎF2÷È;¦MDyqú:‹rñsI|qoJô4ÕIG¥v¤][¦-ÚþF VÜ%Ùï‘Øôïý6Ÿä¾»Ož~¶6ù¹™LÔ›ôèÖ•tíÖƒô±†Dd&’}6ÝI7ÞÄxüfr7·€<òL &"ñy™äéy_²t¦=±fFúõìN4ÔÔH§N˜¢AŒWD•çã©QŸ¬Ô›>ì#Vê“Ééœ4/<މ#aËú“.]µIOóŠý¶®òPÕ<Ÿ…æ#ú‡@rSð2³T;4“˜šã#'ù²å;A¹º„0ßäQdyeõ·ŒÞ~^~Va.òd~^®&R‚bžŒ(ÑlçÛù‰å"—¥…ÿe®ç’B ²œþ§dÿË>ùÏCõË;;4…B¡Pþ  P( å " …B¡P!¢P( " …B¡P¨Q( … …B¡P(Tˆ( …B…ˆB¡P(*D …B¡BD¡P( " …B¡P!¢P( … …B¡P¨Q( …B…ˆB¡P(Tˆ( …B¡BD¡P(*D …B¡P!¢P( " …B¡P¨Q( … …B¡P(Tˆ( …òÏ"B›ˆB¡P(ÿ%„zD …Bùe<"êQ( åoõ¤ªyƒH …B¡Pþ[á!UèL•Qå/P!¢P(ÊÏ¢otå{Sse_âñxy´) …Rø|~þ¼¡šxD|¦gffÞ¥MJ¡P(”Ú‘‘qG !b-©‘GDª(|‹•çã㳋ñŠri³R( ¥&4C  ©Bˆ*›ùPé߬j ?:::7'''JWW·¥œœœ¢””” mf …B¡T!@ùŒ'tËÓÓsÙ–-[â81<‰ò(±ÄBT*:RâÂiqOBHCñÿ,ÚÜ …B©¸pÅž`¨Dð¿¸HŠQ™ IWqÉõ!ž„Hå3.’)¶X´$½' …B¡ü»D§²fHîw<¡2¤«90_ü7K|É×KLJ‹’!*H …òÏ ÊšQY#xUx@|T¬ ýƒWV=IªÎ¢BD¡P(ÿ.!"•„HRøÕxD¤² ‘ü¿ÒkU –£P(”·(‘RuÓr¤²G$)H’äWò’¤*‰" …B¡B„JBTÕߤ ꛩ9V¥²$^+ ç®Bˆ( …òï£ê¼£êDˆT%D•Ũ:QB5"D‰B¡Pþ„j„†|ç=T'DUyF•_¯Jt¨Q( £êĆ|çó`Iì¬P¬¾F¡P(JµbCªÓéÚŒB¡P(”ï Cm>ÿ /î\·:IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/addlist.png000664 000000 000000 00000061154 13703317554 026747 0ustar00rootroot000000 000000 ‰PNG  IHDRëÙgÏÌÇtEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp º”¥R^ÜIDATxÚì]€$Uµ=¯r÷ÌY`XD$ J– &>Š ˆbI "Š ˜ù  ~DE$¢ "Q$ H\$/° f:TzÿÞWÕ3Ý3Ý==³—{¤ÝéêªW¯Þ»çž{_u×UJ)Œ#:H 4@ggg¤¢ @`§’vò·X 蜄ºŽ3·«V¤uÚu 1U“Ï”U QëÿÕMöHäAdmFÆv/!©@0|Òê¯Dm ¬3Q­ä´ü !­@Ð1Që ™ j:àïA„m§¬VÝ¿õ¯f$¢ ‘u Ak/Ôýk lÛœU ª½ýöÛûçœsÎfΜy°eY«ËØ ËÁ\­—U«Õk®ºêªc=ôÐê/­ãaÃB”Êï³6ST»FÔâúÛó޹öž‹ÿ'XS†Y UÒ.ùûß®ÙéÐïö½MòWÚ$LÖÖPŠÊ¯¹_üͧ ,!ª@0Ê ±œ±Õöï:®NëÓÍ8mBàim»{ÖÇeX‚±Þ“µ^IÕÀœÕj‘³6(+,{R`ÌÔµk€²6]¼µ†PÕZî*ÆíÂ`ÃI§îM³p8;PëáßšIc¬êTáÛzRH5Qx)öéª1ÁdB+Um¸ÏÚêk…õ,6˜¨3»8Îä"E!Žž ^J…¬‚IOÖA;`€ºfö”•u²Õx'êÓdS{ IU+²¶ ‡-G`\”Uuª¬h©¬`<•µ©ºZ,&ŽÀ脬­Bc@0Aq²@ ˜vÓ§yPF-[J-ª¥ â¾ç,¤,¸(õÆP.µçÖ’:rº‡H™óŸE8UˆÄÞ °ò"d nà£JRV±ºá9‘%EØC’V¤TUÐSRðŠ쾯Ù("BjîÚ[ôw:ôª%2ލM–nr>1Òƒ•‘0­˜0¸Øíg!mÕ–Âò§¡Û°3E•<@Úáu%äJ¥)t7>O›·[Ô÷ „¬ý‘ƱÇ‹UW]ë®».Þüæ7cÞ¼y“òÛP¯[bvOwILˤ¦DÊ2·€BZ%Å ÐåS¨»¬×Úw>•#þQøÛ¹Ä¥º?hM8G廤Ðjˆ|:ª¨êŒ¬,úZ“‘±lÙ2L›6­°LÔ0 Í6QÖdíéé1¯'žxùË_ Q×^{íòÚ¶ühbÓV(J‡ËPUÊ/ĽeÄv„œa%DLsçå9l’hØZœ²¨Š“crôÖ °—i‚éð;8Ö²²ÅUKE_‘“U•m¯FØr¹ÜGÔ‰¶¹)!WqãñÇ7¯k®¹ÆLb¼übòּ⊌˜”É™,—I¡gl‘rR‡,¢S%r2c"r•øoRÙÔç•Ùþ¼3N,8öÈ’G³ „¨šAh¿øe9.\7SVJ…‡µ¨TOØ¥K—ñ˜ D²9+{ºÇ{̼<¸'œpÂÄE1ð÷'þæh³Nÿ€yûÕOÒ¶7 ™&¹¸äiàë«u`¿ltGݦ°ãÛ5vëê¼o$vxô5àþWþþ ð‰4ÞçŽWiàtÃ%íY–ÀFa$І¦“¦QOÎô¢YÖqˆˆXèŒ=ä J½½™‡ÊûkÝ(šÏÚ‡Áq¥=a' \w˜Ž!'l/¿P(Lš(n…HÙ Nˆ¸-ñÂM‹5W×8`‘ö>…_AæÐÈr¾´Îjï°2â>Wí_¥,½¨ð³—46žCš£l çêdaO>­ðëEY;µ¡hûE÷+ÜIq`µ×EÎá}áýþcÿBŸ_JÃÁÆ/JñÆé뮪ñíõ€µÝѸòU"ƒÛ­RÔ£‚.øVÆU³òD¨ Ë]«Q —®%ªD°ýBÿ}Ѿp¡ŒeK+† yòH¡sà (С…ê0îŒZ~Ý›G DÖ8Ñwðj„L˜”dåv¿ýöë }.\˜ß³›\HˤV”»Í0=7ˆ¿’Ån½¡Æfa‰@ùj†sï3À¼9 ~b .³fkì¿}žÆQ$K=§ñ“ÍûøÅg>¿PãW[+ èÓ K€í·ÔøL®¾ÏÓû3€Ñ4;Í 8d:Ó-^k*¢‹rªU/ÉAPJáo1‹yÌ¿i؃rêc%¯iu÷&pH%mò\…nÊqÍ}žQ¬²á!.æ¼…W¨Q8sRhެR+h^5Ív댚Cb‡šQ¦þ‘þ/÷wg?~mˆ wö„¬õ^m“M61¯Új/6MFò–_SøÞ=ÔG"ãjil•ÿ®¿šÔ7+‘÷«3³>÷,R8`±Æ·6V­Ÿ š™fd:)ö¾Ï*œôŒÆéóx0€)úÿÜöƒ‰jìœÎåׄˆÈsö ïÛIc‡QÌu• »kÀwUi>˜€^“óX^¦»9ýi˜U·BÔ·¿²)ÏìàܬÊÊGwÑ«#ž ÏkgO|÷ÇG)îT^Ù˜ap±XDÞ'Ÿ|²¼Ï?ÿü„õ­ë ß%Õ[ð ÂEIFÔ[ÿ­°˜ ïÖ`Âܵ)=dNfÜœ«ž~/Œ_þh]`Id¿o%KÞ’å¼·<¢p]9 e™âÏSNüÿR8I¡÷Kpç£ weÁJj6§®žI|xv_Ê7Šlå…¢: m)¦Ôh9 …VkqèÝ.Tóàû˜ò˜’9+“wã76/ÆG1q+´”nÝMyå³å>»Ä»Ö×8˜â¿¯RzȦΪþE¥ŸÝ®pCDûPˆ{P]¨\Y¨ð`¹ÿýJï0‚þ°R]zåÑ9sŸ r?r›ÂoêöY‹Îýµ5äW£ñ ‹å›Ë›·òØÊ¯F™rÞæ6aAïRàûw*¼ÈyhQá^Oåä·»€“¶#E'ŸêÒ¿³å‰BÖà²Ë.k j¶@25LéNÊU7[?¯ÏGŠvÊÀ.[3†8ŽÉºÎêÀ>uADå9àê%M×fðvRÖÃg5n¾á…'(ê(~b ÓÖên½f¹ì4 Ã·Öø<…â—ï@¡rQŒ²‡½“ެ÷ßÿ m+¯¼ò¤ŸÔ×^Tøm¢ñ#bæCOQ^ù8°…™ŸžÞÏþ2CÒ\,Q©ûà1"ê_éUXy°â¥¤Žw8¡ýf2ÌÉGo‘vÖ XxO‹"™«®Òøeˆ5Éßìß⃭·ÞZfR 9ëdç¸ù]`@”U Y!«@ ² !«@ dBV@È*C YÁT k5Q¦FÍd÷©ËÄ ¦Æìë†/Å\ã¡ßž\OÒg'²( $¦Yû5ÛÁK©ƒŽ+ÙJð/ˆÙ BV@0yÉ: ‹¹MzŒÇ˜É¼HÎÚ€4M¡ã‰íÁ««`†„é`?àúì ~pÊÕt•ÝWuù‘ ¬¦púª‘åïý6ÕÉtLûh¸­*˜Ñ˜¦ôɰ#ÅýkçÕæ)†Íæ%??¦}½¶žyÌç0P-xž=ú×)â(6Ë#ÊvàØVÿ9è³$Ž‘hó!§½-è45ÇsúÇ«®ýNÚ˜d]Hb¹pôÔòX”´ßG9p]k¹'“ëq†©ŸÚâŠÛ‰S€7ƒ«šlh"iì ú6ÓDsY$NLéGs”brfoˆjˆ¹Š¸ËDë”±ºñ´-楶/[ÙPÂÛÑŽœ©ˆBb9“4Ijƒ{TtǵaCh?‡.?‰ªµßTSÎÆÖŒMö!ª¡†ï;ÍÍUD¤Lê›çôÛm%×”ä î\¶Joƒ±p:£IVË¡ëÆ’‚l5l¥ÞæÕÇûŸ®Ÿ)@+ð ÇÊA ²Vˆ¬ ‘5!ÅHœñrØ…&ò%¦ïìa5ìj­äµé½¢÷ܼe‘XIµB×⢞{QX›û©1©F#)—Pu›¨˜8à™ZWY­“~µÖ:¤s6 „åvêÁnC·#s« †xV¿Êp䥬ΖÆ($Õ7Ñ aΜK˜Xo¹Šs%±$qV±„¼R-#*PÛ)}YDÎ8غæ¡FÅ ÙHh•t"vLÊ Úë(/m´n¥õí—¼aåÅ®îñ!ëí»…n¯‰çÖˆóŠ×(ºƒ>ã k^WÁx¤¶WPŽŠ ÍBE2þˆÌ56yTMX™ÂÎó”HÁ5*Új¯DÆYô,úÓ&ÒáÛCÎ:µK.Óõ…’%i-üÔYˆ¤²÷ÅŽ¶çš÷ŠÈjYã2Óëjz΄&:rèZí ‘HéýF¢‘!•‰€õÓr½ŠÚ7¨ôÒu9\Üo&óV²9l2öƒæÆ¿RIᑱ*ç sÁTDNP-S¸øý‡µØÓôÍ;3"“]@à,¿6¥Õ^TTÁÌuÍ9U{«P…"œ¸„Šf‰§Ú¤õ//ê[…905luR%bÓ¼ ao›®Ùi˜ ¥©ï±mûu×3É”Õõ;­”Q¦ÉnT>E¹P¡y#tñ¥ÈÆàù`uJMùx3WQüBë¼Os(YSe­3®óBÃ&ÌÌ”Aõ…¡º¥4;ŸÉm’¬’ñ"1 |ç8¦\ÑÍÃ(:oD’íÒûú1Õ*”§s¢8<­2e" ¹… …"ÒØ»69£fóÒl_— »Œ9½ ! ærªb•I5‘ˆPû6sÊÎJÕòhí4’’#‹0%çêN©›\kýÔ§”¯jò\au±óãÐA£¦H¥Àó˜´µA­ó09Ã`2V‹ã|“dk»ƒ‡4_ñ›\yxEÞ™”ÁqÈ«ÇL¿M›lLÅþŽr•ë:·½ •˜ Énb Ú„0Ò$ r Ôn¡»ƒáõ!#/¸YΠkdãoAP˜ÅçQíKX"M9wÑk;.ìDü‚ÕÙ¼P¸ê °)$5a5ò9´éúìÚÜ8Ù˜GGvãà¶"EÍ?³‰§ÝM£'¿«Ð|:§aÍÛŸ|9k'f{(ûÃ&êò’b,çN¤»{¤Ké‰Ï}îsæñã‰è‰?â”Ó~ƒ«¯»÷?¿öþÉøîÞó`éâ¾[ÁÛØw¶>úÔpáÁõ=æsé_‚nüvÿL¾!¾|-6yÿ›Ÿ(yœvfïCdÕÿÆÅßú¼ß~˜ÈZïãÎó…¿¿b™P)¾ÿŸXðʹø‰5ªúO<üäbœ{z/–>Ñ‹y뮊•·þ4ö{Çl(±!ëHÀŠZOÔz<úè£-[°`î¸ãl»í¶ã;p3ÖÀæú&ö9᜹ó/ðŽOî€y>}PuàVzÛA8÷Ú98ö„›ðïp#l¢_ÁSÿù7~ÿË{°åÇ¿†ç<ÙëÌÃŒ7áï¡…iýgÓ”¿>pÀŽ˜~ëÏpAü|a{×üÈ…¢_½w–7Ç¡ÅExñŬiBÇ®6[úó˜óÀ³(l¼¦?¾Ö^²5>²å,¨pÖ›{)®¼úyTžz•ÿŒý·(ˆå YG}—çØñ%kŠ…O<…Þ^…{® ÿ^ü œ?^Ž„G3ºÏ,}·\q9ž§°sËgã…ÇcƒäLìuàØ}¯ý±É‹—ã;û¶úý_ðÎ ®ÁœCO‡·ë"}gr>ÖÚ÷½Øô_Àï«Fo_wÎ+.Áϼû»!Vyù¸äÙØs—ñ‰ï…Vzù=¼ùWïÕ_ºko7½¦¦Þáö;–àÝ{lŒE—ž‹›Ö<ïš-º*d!8G)z{{Ç?UM³~k˜G¡ò#/ÍS9ãÄ<*•sìXg¯…Àî{à¨oì ‹ñ›»nÄóo_·=Ž¿ù]Ø’w¢V ®ÿ`ÜuIM».5¾§ù fÌÙŸù3¼÷ºqÓe{á¬ÿÛ5{ê^Ê}·^z˜¾ ÞõÊCxlºƒç—®…ívÚÞæâð#¶Ç¿ÎÅBÔ)‰I³¼òÊ+øØY³fû°ÍÝö#Øûc{a¯=߃õWš‡ívß•Ô}G|ä#ô~úØfϽðÁ ŸÇ¹g=„•Ö98?LžÄÙ‡ýþ†áÄ“ïD©­g¨à¾~Wlq ŽÛò<øt„…?Õ6xsÿƒ¾¬µpà¹çà Û½ 3­2ž}èY$ÑÓxpQ76\w5óÔ¾ÅWG_±pR–ÌL!²nºé¦rìò†Ã½Ï?ç_½ g~ñX\ðà2¤ö<¬]x>ð{|þã¿Â_9[åÒÞs6;ärÈ‘8÷¡Õ°ç™W⼟‰ ¯ø¾}Ó²+YühÕ ìõÅÏNú(>¸ÓtÜtõ¿pãM¯a›Öî#kúô5øÁWÆ.º/qQgU¼õó¿ÆEÛÿ ?º>„¿ˆko\ˆwîü8b÷/Þýîwãÿø–-[6¬ãÖ\sM¼ímoçø5ÜrÚ‘øþåÃÞhC”½mð¥3ˆú†’Øa«ÇñáݾýßU8c·Õ•H¢0x³pêé¦0x ÎÿøÞxmýu0cÆ›qÜ™»cßßÿK¶«EåÒ2,8÷@ìò§¥x"z¾ú±}°%ÏÖîûaÎ.ŸÄIúS¸d‹þ鳿mõ*ó‘ð?xú¤%Ô§pó¿ˆùO­=¾¼^»ðXüßs‡âÏÛxbõ¢¬Ë~â§>õ©aÝ‚ácöÙgŸñ<¤šµ·ù¾ûûëqå`óiùùãE¸ýgŸÇW®.cÚš»âÀÿ™ƒÿüüúîeY¹~Ò!õ9àz+u÷<»¶=—þpÌPýÓ²ê;¿„Ïü ®ºò[ØÞ¯;wqlR|½oÚ«Öß7M^žYxCÚÝÕ+Ø»¾gUx[|o·fz%løÉý°æ#×âÆ§B±|!ëòaýõ×Çž{îÙѾüEˆý÷ß«¬²Ê„ ÛšÛíŠ-f»F3¹ÂÜk·žŠn¾%¾åm8ý–qé‡nÆ¡‡_Çî»çÞô²!«)ßQ©Ð«Š¡ª_·Ø û¾c.ª€TÇ…‡ì…sÖ= 'L;»øk<°Ô´Œ×n< ׬¾ Ö¼åïð¶z7Þ¹ç<<ü¯Õðöž“±ýÜ­qÑ[öCá’3qÃugàä«_Ô^–0x¹ÁßVâC_yå•m‰ºß~ûa½õ֛о†wŸ‚½ýœõ%´Ñ¶˜û«}ñ®-ggƒúÍ ñݯï…ýOyë}¯•Ä(ÝýK|åË7Ðç!þýPŒ]ëÚŠŸ¾¿½ârü½wv©w¡\¤ô2î:ÿ|ï”ßâ¹Oǧî޵ìݰÎÉŸÃÞ[\€}~s¾ºÉÁøþûÏÃQ¿Øÿû‡Mðö®M°Ícó±ÿÞ—`Î7®Â¯ßå«Ç?{V>QBá©¥²Rå*kçvóϪOjp³çys‡Ó0çžÓ¦MqÇn¹åüáôŒ_¾¥ÁDÝh£FÜöòö­å…xìY`£«iŒâ…[ÿ„ÇÖøÞÜŽßݵ2>ºÛ4¨!\ý'”¶Û›å±¯^tÎþù½˜õþ}ñÑÍfõ¯G pÕÿ!ÎÞ—68û½cNÃ׫/=‡%³Ö‹¼î} /ëÙXµ»–/ÄãÏNÃ›ÞØÝWOöµû¯Ã£oØ ÛΕ¯…OªײÖåéÌ_QþJê^zÒ’•q÷Ýwã /D’WË. 8è ƒ°Î:ë,W»£FV`É:©Wñù‹ú]]]˜?¾Y˜9øàƒ1gΙYAø‹)1WW×\¡Ð…ë ®Ócêî˜BçmÊžèÔTTnÿ>\8,¢m ñ—/qXã¼®9éo¹m¸á†8ôÐCMmšåùâ„`Eej‚¨\Ej*Ös©Ê2*º`*“«º}B"sœ™™¬Myš˜êyabÁwû÷QÊ2%@jdå»ÑÆ›ò%ÇóæÍ£´àj„H¹(ºYM!×'u,GHZÕ:$ ¡]v5¨hd &ûp-"s%‚âÚ±•hÀª‘5/hkVó) |{B~±$« ‚©LUSYÕýžYq1,pÑd“9«£ëÛƒÍÿ3a-W…o_8šIe¶&è«ÕòÍ3ÁŠUþV¹ˆ3WŽìCygPOr ÝÍgVÕ0%Uµ&îG¢¬‚)ÍJÎ)oïñ/¡²ZªIX1Kª©)h#å$ }ãt¸_ ¡6c"»íLhV!«`jÓÕq`%¼\Ó‰Í?ÖW°Üß55y›œh›Í…­U_Ý)o:e« }º†„Á‚©MVËï%¨”ˈøi¤?~mȲûW~I}ù+Yó¹\º(´Q­Æ¬ŸF}“J™‚f ./8YÙ±,ÞS¢ò¹@0™CaË P´u¾XÔBýå›]Nãûîîü‹ à¶óðŠ]~¥BVÁ ÂYµÂ?NrV@È*„¬U ¼îÈÊËäü8ÎɆɨ' ŒÙj0ÿ¤a2ðÇã v"ü»X@ÈZkØqÌÏÚä¬U YÁdËYA#¸`/º2xv¸5…EY‚qBµZ5„åÿ=aʺ<%‚|g„IZ¯²FV¹M#´GýwFòý ƒ‚)!«@ dBVàuˆ1»ÏÊ¿n™¬_äç{\üÝe@ÈJ`¢NFRÔœˆ¬^ $ ÎÁŠ:Õ‹û4ÙÔ^ œU ² !«@ ² BV@0曂© ¹’×½qá:Ö R\!=Œ¹2ºÛV¡ší§ÓQ›Šs\Ëu )¨,Ê*˜âH–«¦Ì£ç‘öDeT¢t™C"sÌ„‚ôƒöÓ1*åˆd̓ïûpß§07ÿ„¬‚©-ªqˆÈ""96,ˆGЍYeû÷@†$•lÕHò¨ZE?¯[ì—&H•Õwå’‘t¥S!«@0ü8¡Ð´.ì55Y$iíó¡&ÕušT™Ëë®¶Ý[E(“z‡a•þayÞ„GÈ*˜Úd´Eõ=æ°¶ª)ÿtš”ƒ´à<{ˆýøÆ±ÓÔ|ûͼ&àZeI0¥ÁÓ©n`WªH ‘†D¤³*"Õ¤°7¡ð5åP—òO§N¦ÚígÅü™B!¯¦Î9l‰¶ÙEx–U èÊq`•y%Ø6¹¦Ž#¤ºš¼Ó P¨³pÊ>aÛv¾’K¤æX™ÂfÕf?ó=òúBÍÊêWnQÖ©‚ ÿ~>. —&O#!#‰(§©”z±lÉ«xñ™ã¡ç7Å®ÿ>Þåµháù¿ãâ{ll¾Ñʈ–¼ˆ'ÿù'\~ §|á­¨¢—ÜŽó/Wxÿ¾oÇ,6½·ÍŸe;†×”,†˜ßKP)— ‰4…·^‡³&­Sa•Ð&;Ïýx¹ Ýœ6ûyœj¥²¢íÊ„ÂÊñÇ]U'Y8âˆaíÚi§µ<®öÙx¥û«¬½fßr2¾÷8騷à¶o‚>z¾½{€‡~ô)<ýñŸa/óâ/ÿöØé‚•±ÇÖøÓƒØáü?ã Ï]€o»{~èmxÃʳ1gÞûqÈ¡žÛKÿúœpã'°ûgò ñ}¸èäk±Éû¿(D­Í„ èd‹Eª¥ìÙð» ?“°Ÿ²‰¯òb¨öEY'5œ5ÞŽ~ žÚý\ºøœòí÷cÇsžÅ*Û>޳|?NøñÚ}+xii Ô¦_Á1ßY?¹éèX|ÌÚö³øßïîŒAâ[}Oýçßøý/ïÁ–ÿž[ð4f¯33Ü„¿‡¦]ôSœI+|à€°¶ýº—Ø1O&§“ƒ¬Ë«†ã«¦uyÍ‚ópÔ©·"ômè56AÏ…_Âá¾·u݀ü¯ÌÞó0\X6ÿâiØ­•*¨æñTüè™ØëÀ'°û^ûc“/Çw>ö7lõû¿à\ƒ9‡ž„o×Exgr>ÖÚWÈúº‚f¬/݃;‹{ㆿ®~¿Ùó=ø×Q÷àÔí\úô¬åðÏcwÂÙ/¤-Ȫ±ø¯'àSŸœï¿âÞž5°éš>fîrÛ…7î¢Z†V+í| ÎÿéNЗï¾çpüæ„ÍͤÄ÷”ò'qöa?Ç&ï\'ž|'.>vkÅ~…¬‚5æí‚ƒö¡?öIñôY»á¾5~…ó¾¹q߀*e×}\ãŇŽðž³qØ!×ÂFˆ?´ö<ó||ç ñ¿ïý¾ý®[ð£íe„¬S(gðpøù‹ðÍùÌŒwÃÖ÷}ï³ÒÀ%ηpïÄV¿Êò÷X+•*âÚWáÊeèBÁÜfhöw³pêé¦0x ÎÿøÞxmýu0cÆ›qÜ™»cßßÿK¶[Y,øõ$2#GøÔð¥½ÎÀ?¸ W^~:¶.U±ÕžoG´d}|ç‡ûÖ5ÏOï½??ûÜöbjÎÇî|s6Y¯¥ÇT–kž>ܺ¤®mÃ¥?Ü3”Ì(ë$ÊYkÊ›$ ®¼òJÜu×]z¯+×S<÷Ç£°÷—oÆæ§ýß{÷L U?Œoìþ¼c‡}0÷ð?â×qrÓî-÷Á7ßô^¼cÛ®´Êå pÜ•àÀ¿¾­®F§QöìeT%b¬BÖ)&êÍ7ߥR©a[±Xĉ'ž8ì¶F»oA'Xp¼¾*„eYëÒ?Õü寤Lµå–[v´M 0x‚ñ¡}Èü{÷Ýw÷µ¶M 0x…Á£ ƒ ‚1ƒU ² !«@ dBV@ d„¬@È*„¬U ¬€då¯Çq<é.x2öI ècö«~vy$‰Ö“ê‚Ù‰ ™yµ¯aÇiøUÁ@pñÚ*—¶=ønVÿ2B ¬0o9\{üž¹¤“1 ŸS§1".YÏ5N,Úæ:Ye1Þž(zocø=ÓH¢ÚváXj¹ûi®cuÔVý6Ûc.úítx=£w £2g:AÌÕÎ5W&w›ŽUsGvë‡^!Ž(wÀ>f;Ù‚Eãí¶ic…ËY5—ˆa¹>ü¾JÓô¯í’›F'Ðjœû&È£Z‘Z.<ž`D(W"C\.¾%#øyKÉh:^?Zô›£ 5LÒÚ5,¿wET®"1ódƒÞ B_Ø'$2Çìx[N=íS¡cÃû°MÐv®ßê’8äÊ+5;˜ŒÊÊìÄU„,{+¡)!{+òDšÞÙ®oÔH ðÀfŸ01¥øTÒÒ¦4bDWk‘’*Þ–¤úJôiÄB»Ú_õ·3à\0JAÜJi"ßS™­?ß0\ ?M'=0ê™r•Nr&YNË  âúiL‘p^‹KÖ¢ƒ˜=x’Uã¨ÁËÇ*³ñ³Ý:Ù||ú½;yô°ö7«KC¯_ Éëó¸x¹ª´¯6ýÖiÿ°úZ<¶\¾”Úôjm6½†‰æ*õW¹(æÑ‚ëÓx”‰Ltmv^‡5 C²%v pÌ\0™ÆÆb¢FP¾§ ²‰ uÔJ@Z)&¤H•Õ2ΩCµÔ[ µ?𠢌h3ÐÕ_@X¦ºF2ñ,:oÒ·Ž+Ôoó253d¥Nù”sÓ^åˆÎgý‰ˆÄ©—ÀKé"sCIsþ27E€ŠéÌý×|íUÊRxºÒ¼¿aÖ&§AÁ£P”"‚Ô‚_ vë}]o‰®?)p)£ã¹IZi=^ÍúMá>_ZSšÃÇFN‹k| ‘=±ôͪô"*Ɩ̼QßyÈ0ˆ 1gG¹Ê’#¥¼Ô¥ñ°”6 ê£Ú·Bù®MÇÕyÖ~‰ÚÈr`c+š;:6Æ¥·»32ædeeòº8¢-¼â Æ0MSYÍò0¥-f¬Ly…Ó4(ŽE¯bÐOVc¬¼Ó¨–KŠØÕߟËÎÏ¥Ò*,2Öb!sZoˆ!®Øð»)$jè|Šä™yeÑ(µYœÑeò8ö$}1'CD9SJÊí+Š(DÒä ät2z»€‚ÓÅOCÌJ@CÞ=ÈÉû[]-úK†D¡[YûvQ¼I×W"™Ô yü„ãm¢kÚ,r.4º«õx5é7“•¢iã˜TJÇó¹^›Õâì‰ÖZ®b•œ­6¶§aÖto°r2KtÅBFD~ßKÎ1 ±²8õŠÍ"_¡èpBY”ŠqD’·_MM´¢­f¬\ ŸÇ9ŽhñtC~yèàé†YÒ®„»†® —ï~ÚPçþùúUµÅ=F·§:-S_;ÿÀý‡Ú¾ã“§ïl¼†GŒæ×0Öšòôj¬BõQhyŸnèŒÛ;È+Fͳt˜Ç c5‘rAÎ U›ümxýoµÿp·k`šöô xMB’1S¦ý1]`Z!@9·À†@0ù!¿º¦8Y¥L¯@ Ê*„¬U YU ² !«@ ² BV@ dBV@È*„¬U YU ² !«@ ² BV@ dBV@È*ÆŽ `Ê#/p!.ÇÍ«¿×›\×u´«öÈuzC.Çê÷WwçÚ¸Q›ú_´!Ê*4W¬"±]xiOT6•ÿ2–qå¸*RúÌ÷<Ø\òÒT‹kMúH31û¶ee ¹èµÏå"½¯D˜€ZÊBVÁÕ8Dd‘–eÃ#EÔ¬²ü¡©^_ Ï¸Š»‡‹T'IN´QµŠ¨Ÿ•¦Ž-\ Õ¹Æ+µã˜jñ¬Ü¶©¥;d•0X0Å#à„ˆèõ‡½DX¤´DBÛâÊå¼O'qËóûJ÷—ÛÔIˆP»…°®7®õT岆kƒÚH©`BTNÈ*˜Úd´epYJMJ˜¦ÚÔ«ÕµZ¶\,9úÃß*‘ÑåNŸ€‹cóñ mŒ H!«`JÃ""éT7°+Õ N“,Ê7½œ”œÃFN^4¦a鱊H])³‰§ÝMZ³áwêœM|¥·iBV`$Û&«„¤˜*'²ŠXQ3ÂÏ âÆÕF–0X $ž°0“ß×/"ÙL0Ê;c"\©IüÊáoÀûQHÝ•‡ÐfAIeí+RÖr®Þ¼H²ÊM@­V!«`j“•sU+ {Aá\&T.š.±j:±¯7̈ª„ÐLº$ÏC9lŽÒL]yU™ ¯éM¤T_Ê•Ï9JN$ †“êõÄ ÓH :SŸÞ(#/>Ít³œ–W…kè­fêÈ«¼Þržšêþ Ú§à7Ikꜵ?ÝW}*Ρt!«@0l$$s‹“ŒHÄÝþÅ&Ú¾¨Üú¸eÝÑvnÿµ&í Y‚åÈ_§rû’³ +„¬U Y!«@ ² !«@ dBV@ d„¬@È*†@G_ä_¥ àyJFK Xô$ê. S¢¬„Á@È*YU Y!«@ ² !«@ dBV@ d„¬`1vå3t‚(¦¸ö Z™\š+Ž"S©KY\×T¶¯³sè¬ðf~¾0\¯Éù–ë2¨Ÿ4L®=¸U‡µ ÏÝsÖaÓkâ±4ÏéÛžF!RÛ3•Ñ&:F[4.Vg×3¶F 'ZÁr\¸4ªÉ<†d®ï6W¨¾6¸ µAsjÕ®%LëÛ(šóº±Ÿäʪ‘Ù’t(²6Û!ET)#w=6"”ËáʾǨ”†:œÖ¨*;•ÄÐmzD¨Žiù¿¦×dÈÚh@i"N19fs¯;½žåœ£°\EBc!*£¥ƒ1&õH[ØjµDmXÜ‘9­¢\‰óþ[°m»ïeѾ &æç¢)+]|êyDÐŒ3g¨¦ óÚµ’Âñ¤taŽë5U¡>ð¾ÚE6óæ$´chžÕùE&‰†®(ò–ž¹.íg£®OäSU×§”¼dJÞ7è:hh»ßNŠXUõµ)Wcš4ŸŽ'’[G#¦ó)—Ê\ú[Ó¿›aÑõŽ<¿º^»f#t|Y;<{BèÚ=<DztTA%µá `FlºÒ„—«d¬~Á0­VévN—gË®;1‘-(äDå­ Z“6èJ¿r¥QUã5­,œQŽ™S…šŒ"®I}Þ'›Ú ¨á¤’÷‰ §Êá"MLà@‡Õ6}Õy¨i·¸b»C“I™Ä¬rz¥ìÌtÞ×(óÀ|κ$㬓™ŒÅ‰Ç‚P¦¾4oª¦¨oÃ55sX!;¤ìÕ§ª:2¡¦™‚+®’³èô|-Ž%ÇWá°¶g˜+T«ý8Õ´6ßm¯g¤0G>ua¯E H#_;ÎÅÁ##QMÒ(ΤÈkÖG)µi °‡˜.ÖòÜ [èéè¼Y]JÝ7(ý«Ó,Ìa£Ô”7¦q”…½ŠBÇX·Ï3Û¦¡©)_Û7¥óô¿Í>3oU>øJ5Q“,+‹s˜º>YYþ©(ï°•nÝ+•Û¢=9>€MŠAo˜£6åÞqé|¬ªöþ—Že…RƘɃ“úš~Yº³ò‚<æU¿ÍÍÍGhHUwC¯Ý±¤ÌYNG;È ¶Ýþô.át‡öñì±Ó¡ÁÃT7þ’Óvýfù%ÍO`/¦ë¬TIS涤ªaê =§“aÉ"¡øeRWžY=°òð0‰­Œ<…µÍÔ7”Lô8#\ßâM¶¶9|äð¬Øß)öxE·ß¶=òà­;éAyfŸ©F«[˜@LRã´ wH¥xq dŒ±i;ÉCaRÚjhˆšSèüI8jð;=hó`csû J±s©…jåØ(€c³S%':è*[œ¯Õ±‰ tÍäˆbRñ m¡Ha¦ns.N!| 1c^Hd'1V9=ŸW7̇äìdSŠÒ"ÒYE!<¯Š$ìì9$vš/Äé¤JDMér ƒL&Á„Þ>éáþ Ã#²Ñ±ªZ­ò$š8v…üåÛ¹¢Úd´”£Vrnv¿sÐy4`H=Æ ±4þ¼*ì“Êó5§Ã¨ÜêX%#³ H!t¡ߢëÐCœ+ß9³jáÊqLžô™SD}ÊÖ ”Ðܸ}¶ÉnÚ,åÞ‰m$ë2§_$D¡2¡þàH€÷ÕÆ1L‰[7n±§*GuË×D\ÇñáÇ•ÌÃrÄ OV.¹ÍG—¨„D©„§°äœaG¾Q[®£ôTÌ,˜˜>E†(ìæNÒ™à…"ÛóZ}nœ¬j4˜CaRV2P–¸WMØ2%± =-{l'”¡ñjf–²p$3´J·?V±C¦·¤ø H8üµØ&ÚKõÍ…‘‘ºzcrÁdoÛSÙt¼vàyØkò×út.1ŽÜê[E.A7|­`([“=Å}öåû©RÝ6`(F>²²…:&°›¿x|ýJ¥t3¹Ò¹Š¼Ž«jk8%ºÄÅÚ.«‡RÃZ%Óù}Ò‘Až#µjÃ(šÞ óâTh™\lD·~c^ˆóP°´mBóqœíåÛVÇêl°çòÏãèd¯Y7&ïS8{zzÞwwwׇóëÒ?Õü寤î¥;TV ö:eÊÅTæiRNЭÆÅŽá{Šåõ5í‰8‚>%qÚFU‡ºÄ«ËìÙ­1¸ÖñÛVÇwû8ëÔ þ´ÜÎÉJ9ZÑ«­ö­¸c{ÁïZæ” `‚sÖ׋÷&+ä‹üU Y!«@ ² !«@ dBV@ d„¬@È*„¬U YU ² !«@ ² BV@ d„¬@È*ƬÖ)ÑZU$N Œ%Y«Q'å4’j å(…ðU ?²6ðM‡Õ(N[“” $k.³çû°L"mªÃUÊý…‚±‚6E²+¨Tªãæb¡“ÕjÔÒÛ¶¡SÄa•>£ÏÃhÂlº#eå®ÇÕ2ÊåÚ«‘„\‘<4e¶¸BœG)SËÊücËT"Y¹ŠÄráqe䨌ÊÀ莋*Éâ(n^ܰ]šk•MW—ëЂD¨!ÂvT>C)Ç …Äã¢UVælÛTÕV¦28—Ðs¥Ü†`Œ¹šÕÒ-ºYák×',™v^‡5 Ch׃F j™ÂÊ$.ºuW<Wt2eóÚ61åGe5˜IÉ’ã¾Éä©×µDYcIUS™¢_X¸&kB‘_!èP»ðí&™žÎ ¾·iCóg–BLêZ*õ¢·T5QåDØuGÊÇaÄÅjkJʹ©kÕW/¶(D°P8¦¸ž+_[BUÁ@Õ…¿UmlR!¨0pM…mŽ[·Áw8R®ž(ÚùË•V±¦Ü“Œ¬Žã¹­ÃàÚµsµqŠõÃ*æhÁUŒ9+ …n¸_¨Íb'ëDV²\3ª¢jª—SªF¡¯r)ì’vm(.r ÊóàæÌT”×:ªbT×çXØͳiÈ•UuDUãAW‡rɤ…–6N˘hn€‚OÓ>ŽÍ)m£p×Rª/„ÎÖE[µCT;Mú”´¦Ï´5îDíXYkáÀà…'ÕŸ;D!ª[AN\¥PÁç¹BZÁØ’Õrà{ 8M‹[¢ßÏ£:Ëî/ŒMöËöš‘5‘Ëè  §]üY•RÉä®L‡Bb{̺ÃÕà$«ÕÁa¯•P>›WJáO¡²!§S€y+% ?lxœãÚBZÁ؄–Ãù¤Înµ(Õ<ýR‚.§ñ}wwˆÙ²ÛŸ,d- ¾çyµ–拉p ]°­è“Çò )~ÐrÿF0朵kcI:ì0¸¹Gó8C,XJš‚Q€üêF ˜âd1DYU ² !«@ ² BV@ dBV@È*„¬@È*YU ² !«@ ² BV@ dBV@È*„¬@È*YÁŠDV.¨%hZÍ]§ˆÃ**• ªa<ò’ïõŲL)úç[®Ëˆ%Í[Õ\Ï'ýsyM<¶4nõÛ¹0XœN«Ò1Â(íüzFÃÖª²§*BÝb«Õióݰ_KµJÛê^Æ~’“U#‰"$éØÔzRD•2BmÃõ\؈P.‡¾Å¨”B$õ3ꮇœJ”U¾nzD¨"ÙkzMMašL"²¦ÙÜëN¯g9ç(,WM‰FÏs€¨ŒÊ@GaœDDs··³¦ûY°m»ïei®ï41ÏÀï¨Ö ]|êyDÐŒ3g¨æªqNíCò¤ ] ÇõÚWŒËËÆè`3o^@B[1†æYOPT ³2ò×÷Ì…¤Ô†º>‘OU]ŸRò’©‚•²ZÒ4ÐvßisRò²±¢¾6åjL“æÓñDb«ãhŠS¨×\>yä(±àZdLô¯çZ}NN;Ô_÷…•;åjòì44ФèsÏÍJÖ_SÇ£CŠÅ\S”ë¹Y[i‡çkv¬éw˜ÇÓ£ñÌXóý: ÛËæ{$×Ó^Äéü–‡¢“×ó]”Ê$$®ŸŸ'³[RºÞ¨Ñ†HAÉx`¦¦Õ~t½vÍFh{Y;¼‰)Þ=<DztDaFj›²ŽìÀ4²êÒ  /s)x¿`˜R8évN—gË®;1‘-(äDÕ¦Zuµ&lЕ~åJ¹‚µñšDšK9frœ¼Þf\“ú¼O6µPÃI%ï“ —HÅmAà@S(Þº¯Ú™ãÙ-®#á’ðôµ'¦¦§Jþ9åȃ§”ÏY‚pÉ{ö3™ÉX4Kà± ”©/äÍêW:àšš9¬RöêSU‘ÍGÁƒSh˜tz¾Ç’ã«Ääp ùx†¹ò´Ú€SMkóÝözFsäcõ“ÇÔdMú¢>‹ƒç4)ÆÎ^w°_n1]¬EÑàD-ôtt^&%S® —n×iæ°QrIÇ4޲°WQèëÎò̦§ä}ûÊLÓßi]Õé쳆:™MÊI2!HN ‰¹¬¼ëÔõÉÊJÎ+E“ªtëîpX©rGÐ, àSðÄÚ\5;6Åvœ¸t>VÕ¡jÒÒ±¬PÊ3yprñ¦_–î,ç10¯úmnæˆh>BCªºkê|íŽ%eŽB®N;È ¶Ýþô.át‡öñư6o“ßýãÁa-9m—DD51}7`|qÛýú(2q&´ÎpÇ%-RŠ/P&uå™åÐÓ«‰¬¾ÒŽ…µhS•÷ÕqF8ÕgDxÛ5¥ß¿Øß)"ZPtûmÛ#ÞѺ“”göÑ€:›º•%©qZ…;¤R1[7clÚNòP˜”¶¢&伎çU ~§1Dy026·ßË+v.µP­plvªäD]e‹óµ:–"‘b‹fÓu’ŠWÈh E 3u›sq ÁE´inc6ò1’£L8tÃÜqHÎN6¥(-"UÂóªHÂΞC]NCêúÓÉ~™zû¤c²rg…;“yóþ¨ƒÉ“|«<î×Në¬D±âqîK¤÷Œdój[§Ž”ËãW³>٦гvÙSÒà'loÃðˆlt¬V«<‰.˜‡«òȳŒŸÉj§¨Tˆ¸ßïtîœ ©G7g’ÂÙõÍÎ_ªz¹å1B¶€CÿoBhT¬vç¢í>?TŒ2©®8c’ç)s«œ)¾mÌ)¢>åën€B…óªŠY$ʽ“IÉ(lVm÷«íK‰Ž;±w:;&+”=P¹–{Søä‘çt~\É<,‡A¼ðdå’Û|t)ŒJH”J(ñhp KNÀöLrøF9l¹BÐoP1³`bú¢°G l3 9^(²=¯uîbœ¬j4˜Ca"+(n£?ì‘ٌŶ1¦`ghSZ®d) G2C«tûc;d"hIñêäŽL©vçR}sáD¤\¤®Þ˜\0Ù›ÇöT6¯x5Ç`ò×út.1ŽÜê[E.A7 P»ýjjÝ6`(•ɤÊóW;'°›¿x|ýJ¥t3¹Ò¹ªP@.&DÜ*P¬-á²z ³”;‡«ËWþ=Ï‘ZµaM oyq*´L.6’~é˜âHm,m›Ð|g{yƶձ:ìAã¹üó8:ÙkÖÉ[Z¸§§§á}www}8¿.ýSÍ_QþJê^ºCeU°M*V¦\Lež&åÝj\ì¾§X^_Óžˆ#èS§mTu¨ÛI¼ºÌžÝƒk¿±muìp·³î@­à%À;'+åhE¯¶Ú·âŒí#Ì)-s Ê…@0Á9ëëÅ{ “òE~@È*„¬U YU ² !«@ ² BV@0rÔ‡z$ß§² 㥌uO‹³Fðä8!«@0Nð}ß”_ü÷páÈ 㧬ÅbQrV`…'» @ dBV@È*„¬@È*YU Y!«@ ˜0Œéwƒ5×ôŒ²âÁŠ 4¹¬IþpÓç˜ `£ÖNGQVRÙtl^Ål|{Þ¾îÏ SrÓԎͪ¯»N^\™ç…·×í«ìºÏ¦01s˜4±ÕvŸ­ʪcTË!R‹K’ñ"B¹uV$xaŠg&È B.¬³z©ŽŠQáëïë$ƒ­–ÂI?¾cqÝQ¹ŠÄØ™Í%ÝQ‰Ò¼hjêærE8»ö²šU@g[ÍÚ0DäâdÕ8k#ÿŒËH;ÖuŸMVe5…rò\¬<\ÖÒõే"cLáY¿¡*´©RNõ¬Î%YVqÚ§iÂ%îSåÍv³c¹¾+V¹Ö©)¾—×}BSY]+ ;;WÞN˜˜RŽ—moÙ×–í P¨tˆkn°jO»(pùzþÀö鸪QY¶áö/Cî—Ô̺ÙX™Jä$µÅÚÙÀ®šWå¨Ào(¼bs5«¥[t³Â×®O-“(=Ú<—4Ž×ßuÔÙ­ÃuGi\ý¼ ®÷æ%<¹†Q!0¿˜1广o9!§èŒ{ôÔÑ”Fì®Ùƒ…<ß!£¨š‚ºfôà²ÆŠIE¤2T¹v)eN\àJUÓ8y[cÜ‚Ò)hÜVREHžQÓ¿•˜«³ÑþžE„ËBë¬4oÇB\©´ík«vC*öÆiR¶¼æzbçyUÿr*I9ìþ…¨„\8 '—¢Z‰ Q›tV…<¶ˆèdd®ÏÎÂ6éí×ÍJ;넜ºÝ`w6¾ì¸Ì$e¬ BÑO¹·lì©vlÍnY‚º*÷<§)ÿîÔ4h5æBÓ1 I5«ô>apGÊÊÕºMy4Ž×mö0äá- ¹Øhh Ü IÝ5V†Bv~‘<`š +¨!z¯ÉrñØì›šspéû4Ð<(:«û™æÑT#² ë>¾R¤’yéø,´qˆ ¤JÔŽQ•f}E³v†rgÍ®¹>‚Ð- ë¾ÒööÏT—wi̸S¤Ð>]£ŽËMÇŠÛЊÚÌ ½Aÿÿ^ç¨ æÊÉÉ¥9¼¥Å.’êªævËQOµšs,4’#Å$«`ŸÕ©¤9«Öy`8ŒçÆda0×u¥P–”¦X,À¡x?J2§Æy¡ÉUÚqÈÈÅù^++oåû’ç+ž ¹ã°ŒÞRIMÕLRß@6ékëvÚ&±m­‚Ã#£® $åŦá÷O×W(çq±U˱ªã뻪‰5€<¼Ð–Ø™ùý*˜©.Ûe+çJ‘E3ÕoˆqyáŠ"ß'±!û‰ªY„4ÉJFc Š ê;…tƒ”²’‘—½×LdÇä*M²$6‰<å&ôÈÖdü‘¶óÁ¢S%† ¦$é³tþÓn“H4ogù]9.“ƒê¾Õä*/@Ð…·¼šd‹#ì¸ÊeZŒU«á×]i\¬$êsº®&6/ôñ|WƒxU7QyxÛ`·47!…Ê‘¢h00)L߈F”*õ JÚ¬LDüÒQìå‹9­VãBqƒ.œº§·Q⤔K½™—#c5Ûx!É"uH*Æ-³@êËÊAƒlG¡ñnÊ(Jî#X½(ç(EÙ"”¶\&´¤vbn‡÷çð40í7¬Õ7°¡y;Ëi-&t¯TJ(©L mÊ/y(”=¼þ±÷v+d`ål¼¸€µm;MÇjðtpn•Pž[AÊêë¼>$—o¥ø¹ŒÈ ?ß(Ï?™´4þ¥§¼bïûYSg·h|«œûjJ×âšDq}r4'<þÔ†Ê##^,ˆ<¥²g"ª\eíœÀnþòèåW*•›=Ï›;›`ý÷ÿÔ ðƒ 4·ª®®ëöWMöïôñŽ­ÚYÞµŽšªµºžáôop;ÍǪÙXë×gx\ÿ&÷™kaòòÌw}ú2CKéÔºôO5Eù+©{igÜAKÃi>x­öWÃÜ¿]ž£Ææ:[žo¸ýët¬šõë4‰mC¢Ñ“É0®òuC`Š@È*YU ² !«@ ² BV@ dBV@È*„¬@È*YU Y!«@ ² !«@ d£Š1`Z¹\6¯R©„ dÄ+ Ø®§M›ÇqÐÝÝ=µÉúÒK/™’3gÎĬY³dv+â8Foo/žy欵ÖZS“¬ìu˜¨BRÁ š’ªÎ˜1Ô{a›/ S/g厳¢ ¯‹Ecóc‰1#+稖%ëW‚רÖÙæ§$Ye1IðzÃXÛ|gÅ”¹Ò:ŽS™`¢Ô»3‰GV­[È*L:Z î/W©‡£´–ëÁÏëÞé$DqÝP mwm%#+LhÎjŠû(tµŠˆ«àqé÷ª6eÝ ¾ƒ´Zɶ ‚ñWÖ~j;¹jÚ°­ÐTN£Z¹”ÒFYEn•"޳:¡åãc‡˜Æœ+£ËHL$ÆÚÞ‡§¬Í Õ"«PÎ/^¾v¼Æ2ï‚l”þ{ýOqÊÕÏ`PÖß{/.üåx±ÍrÀâß>í‘–Ýã‡NÅv9·.Ö}çKn0Eå¿ÿÁWÝ„'b *-ŲžôÔ¿–-Eo˜âå{oÁ#K[[x?~üùãqýû?ÿ}Nüå½è•ɤÊÚŒí¶M†ÀßàPl$aíØ2² \}Wœö-÷Ÿ‡±Ñfgà«õûH]¹¿ûå³xËþ; ç‚¯á„¿üE'ÁVŸÇ76¾óox ÕnŽ‹]œ°t6”ÿV|â¨=°qò0~wü/pW¯…µV~ ¿üúçñÛ`Þ¶Ç6xàаpûm°Æô™Xe­­±W%ÆS×ÿ—>õzÉmóqí´Ïà›ß8ÖOÆsÇo §7q´ÞúxÏ:7cïCÎǵ~k&âÌCOÂ#Ÿý+ 2»“4gm&¶Ž”·–+¨Ð+Ô6ä»RýÇÏù/ˆ3ö_ÞýܼXן ×¥–R‹u?ùCœûëï`ëEc¥-߆9oû öýÌg°Ï{Þ„U·Øû|z+¼vù± ζ7»z¸ë?ãèß]Œ£Ö~®q>·]°êpôYÿ‡3~xŽ=|wlÔíàÍÿóV¼rݽxñ¹»pKuðÞ7â-{|{m¸ ­…õWk2qés¸å¼óqçôwàÍ÷ŸŽã~ôsœzðÇqÒ·ÁfKþ„ù—܉E’íL2eµ}tõ ¦‚[(öñÝ Šp8GmS*þõ«ª¯ášS~‡U¼ û² õìŠ}÷ù%®8þEôÝ9¸l¾ß.¿zåw1µ¯á’òøì—†¢”"yê!<»ì,œðr‚ûŸzÿ:ð+XvÜÉøäº6‚m¾Š£VÞßûm‚e—o„¯ýe=¢ýÓ-úÒƒWœmð­ý–àKçU gòº ÿßqÏ«‹ðÊqßÄz)º9Æþל=¦s¼û/üæ‡7b«ÓÆ×Îy/ýùa¸â-?ÆexWߎS¾v6Ú}k¬âÊTOú0¸]>+ÐxéʯàÈ۶±Ÿy ·ßNäØñÛøÁ¶oÄ\ÿRÊó4ØxùœzÜíØàs{àÉÕ>‡Ÿ¸Ï÷*„W/ÂCψ£ ñ³‡ÿˆÏù!>HOŸþ#N>ëV,YéíˆæŸ„»f킵~ð Ü<§ Ë^¾?=úëPÝ‹Ê:›b³÷_Ùq.6›÷7üê¢ëo2ék°„ç_…Ùßú&ÞúïExïnãðWÖÆ{¦Õ]Eé?¸ýÚ¿àY+ÅÂÿ,ÆsÑuøKyîä <­%Ó<åÈ*DÔ%·Ÿ€½~›Í~ç\´v{£Æ\Œy¿¼¢\ßààt© ï9þ$,ºñ{8báª8«[p%å˜ÑÏ`^+ÿ¸ ÖøäžØ0Ÿ5kÞñïþŠpã÷aõOœ·¦Ãkqèe8ñÛxæÀã™#¾/Ï{:õJ,š½’qîS—àçO>zŽîÝ §|9Â9>Žíößß=öM˜Y×1kƦøðgÆfNŒû—ü½›„ƒw"e oÀ®H¦ZÈ:Õ¹º ݹ úÅ9Xïœà¦Gnãâ».ÅÃ&Lé¿”(ÝŸ'&ÏÞ„«žÛ¯îbõi3ðê3ÏaáK´ë’ ¢žWðÒK)±lʵ±r7Î9îûàcD(ÎtœÂ¢°2ª_X{.–tŽïޱíë`«µŽÆ[RÕËŸÅÝÿ9ǹTâ »6kÁ–8ð›¯à˜o=ƒ÷¼}M,í 1gï“ðÅ ¯Åþÿ÷ ó’èüô”Ûð±#«øÁ/}|oåúü<÷àM¸aA‚wl\·šo­Ž-÷>ï>ö“X׎q÷1÷ãçÛüg|€âðø>üü„G±²,( YW,¥íÁ­gƒ»7=-¼n{4n¾”Ø´ä¼~~Ïü ¾¾ç÷±ÕyïÅáKξt?,ÏBôĽøÏ²Sñõ…3¡Ò馇ág_ÜŠÂÙýꇸaöÿâØÅcÝ­§ã÷Ÿ?o=cž™³.Ö$Î-ØÊ«xæÙ¡n Ù_ûëÿ³w>0ruÿ¾yÿöÚT<¸Cm›BÃQ©”PD#m”@B)5ÒB †˜4!QD (ø‡ÔDSE)(ôHSi¤°IE¡±D(’h•XÔöiwÚ“Kwß¿™ñ7oßÞ¾}·»·-{õîø}s/ûnwÞ̾™ùÌï7oß›ßo`Ýþ¼ùóW¬X…’Áóƒ_Áî•@_¯}išnôà¼ñú—ñ…çë„þqó>|p̓غé|^Ô‹a" µiû ØD®ãÃk¿ˆá•k±Â\mUæžêª Ôc0´¯„¯øîzðrÜõoâæÕKîX7†ïÅöû.mh0yäI|ý+ðÀ¯.ƒæ}| ]ü4~ý³ÇÑ·v¿ƒ=€ko½答ظx ì?g¨žø-îÌÇçw݃øÞÍøîË;0¸ªë ¼zϕؾê'øé:ŸÛ”ak²±p±ùzɸŽÿÀsï,Ç÷ÎÖ8þÜ ¶lÿ%‘»û¡Ê+øö†¯áí;ŸÆ“7/Ä(³í‡·cÕæw`õž‹¾[ðÙë=x¾Ò>…;t7z÷þ«¿Îõ üàu…EwØð‡÷cçðMx|c? d!N23ê\‚Û¾z Ñ9ŠÒžgñìÁ1”íÀÝßzç îÄšÞ³€Á;ðÂM0øÀN ^ÕW¸Â¯GeÄ1·êÿefed^Q½AÂÎv³Í£Í‚à%ÏóJÆ###èëëãN Òí?ˆá“’º»÷#—áêËBÀ¾¿ÏÇ'>})>Lå ¼y=WR¢2öoüçÝ“BótS„Pž… V,Á‚”$…ã/îÀÞÊjlZ³ ¥·ÿ†úËpaz97Æá½{ðß+6â“gç±;‰×žzæ]ƒ+K‡pä‚ ¸á£óë%Žü‡õEX~nÑ©UxëwCøÓ¢ÏẠù.µ¢FGGÑßßzŽ—ôf[œm2·i†•Åš%°òõk¶\öà*`±V‹ÕEMëÕ`~øœÅbËÊb1¬,‹ae±X3ÖéŽûÁbÍ4ÍÚX7&n¥ ‡Çb½dúºéó³VîÑÄ­d±ÞŠã8íó³V zll,Ö Ùnóè…)IDATxÚì}œdEñu¿7»88rÎ9 ‚d( ‚#??# *Dý)A ‚ŠD<”##I¤äpd„#—væuÿ»ª«úõ›°3³;»·{÷ú>s;áÍ›ººê[á[J)]Ž®¿PŽrŒ‘a»šèm„C•ÂQŽ…\8l·Â¡ÚxÝýÍ· ÏÂöø°îµ»®74&ÜÙFç tdt4ÖäSS…£åc6aÂþ]¼öxø^ ¹ŸîZΪV«×?øÀNüη¿ñ0 C ˆ©×I$ª‰¶À+‘œxâw7Ødó-§ë4ÙÌAÚÐ~’ɉÊÍc±€Äòj™ü|Aèâ †L­|î5ÝtÃÛò~åfËYhå…&\wQÒ$ñOáÄÑnb˜pLŒÅ¬µŸ\:ÁóðÛ(/²|šš®Ò D¦ ŸŸì7I>ÿü=+ó‰Œ{ Bj½Ôàñ+oƒ—®§²þseóIÍçŸ NüN’¨p]³°ø€¿641q—ZV ^¬l¸áÑ‘²`ÉäÆw¬ ÷ØF÷Œ±sÇë&¿Š¯³¦¯{AÒþ~‰øY>6Þwø m§ø¾ð5 ×Í ^ ýâ’ñ (¢dI ½épî|nýîùz+®¸Òal´ñ´®»æ•vªG·pãÆ&T²îºëŸà~` ¹@'Brã< «¯¿1(ì~•‰´„eíblᦅFíàV¸ \~öû“EVKù-‰™ >Læ5vÇY³&ÚŸ-h<—4MAÔL­ê'†1¸ òÜ«j~Õâh£•Õ¯ ·|¾t-øfÖ²*íÏ-™P™?6ÁHh´Xi šÓ ÕT&/-f¨ei7Æ/Ž(ø¤}kn¿^ÐäÅûi¼6À¯gî=E¿[ÄÌ~ÐA;⃼Ÿl•¦·UÒyš®oâ>íχ·Ï²,´¿×°Ä:ë¬w‚XDuP¡0Ò&‚¡êLª¤2¡ç„¯²fSÀ«r¼¼: X«IÐ*@¶iúž{/ Uù’.FF«E&ß_XßíÛ Œæ‰‚·öÿä¢Ò ð¾yÑõ+H¤Ýd;Ô4ÀÛ¦©fÍÁ¦’õ+ O. Ѻ B¦¢É f‚!mÃûây ¦ˆeí¨è7 ¬ÖÖ??‰mnNÅå6ù…É ^¿vGf‡ 棘¾r^J³6/ðxu0ñr­# +$/<*ZdØ †'í×Df3ÈÝ ¦©›‚4µl¿a‚vÒVömÂbjY#jY”Èôå9’$þ~ðüÃïY€£{Žþþþ·óÜŽñˆ *²‰p fZMÉW[ž´Êß<ÐŒÎЯV`"›8Z=uâ-^©lÂ"P¢^ÙÔ Iªs5/¢ÑS‘ þbóÒÔ(ÛÄüê-¿k‚™$˜kšÕ²âóùÆf‡Ÿ\<ßxu£Ée¼Œ“„¶±EHGûà•Ø4“U&±­‘æÂ‰C¿Ä A®-ÄÄÒˆL"±Ú"-#&ž±PÀ.šM«uzËÀx<¢4C…è7Åä{ƒ÷53~¡ÐѱÈ}ù`X`ƒÆçYf„}‹‰+&9ðq[6«-MXmè5}G3¦4aÁÃÅ Í\¯5Tµ@÷`2ÏkÃsÜÔÍ}+¡šó f•_y ÛÏþÂS4q”…†ƒÙ+“‘/Þt›ø““íÝ2‘™Œ¤ö+©VáÂ*^! 2§Ð€Æ‚&U TAVw­ 6£á —º ZͲŠ<áÑó÷As‚hYy¼¦ó“O©°M>™c¤éÂ:3ÔÑc2ýzH؇—4»þØa(Éü¢‚oØq Ù ÀÂc½’">´Œó²O8ïtHŒ_\è¸#ƒUšý„ÍÄŒãkfÀwÉ|lÀOL,´³iïŒQ~.É}òZUåf>w¦# ËZ#3¢XóÅÙ+þ;i~®š-“kÔ„¹Ž¤ÖLs!ñ4‰@£-€îÜ› ‚†²ü[ò¹æIOj2wßðäÔdr‰ eXÇ(¾ˆ6_zmxf±¶ò›6WÇ[Ÿ*Ÿ(r¡c@›+ÜäíöÖ¨`B)e#5 ù¶‰÷’µ-4—U„‚Å‹¯„xWÅÌÒ ò•3ò¨Õ,OVÒ¸ÞD!1Þö÷WΡ‘Eȯ¾^#ççΖ›¬ÎÖß5ñ,âßÄw¾¬zPl#/[]C²ëÝ?Ã̲@hiðøº Éu66hjMœ óâàW^$l°Ã ^.¼ÈhÁ¤:)z3uBnÙJð§¡MXÂ6ÃÍp‡Æ _Û S28=ù~öHjUî ÓJl\~Kly/¹Y˜øŠ¿kÙüðû5îµõ7÷YsàŽLª$¥}3‚ï²÷òär‹ÒJeÉeõ¶{f‚Ê6|Èb»z¡ð!Ú„V‰¿Ì@ºq*÷nÐdÔÀç¶¹es¿“y/ãË^4fíµ$~¯¢+jUX*Tn2±ùiÙÛgE ÃDçã Y”Ô™e:xᬸ_ùŒÄ2¸¶4ÂP¨Ùt®½7;kt¾šù8·MfªMt dEð¤%G…@3áh È„Ä"^0ì:#µï^£=GnHï­r† I­\ìyXâuêÁ*K5zdжö(!3+ÇnÎæ&{ßÐMòÖ•»-䍸ˆ»èøÛ‰ÒACîœv¿]ãHØŒð¶l¸H6·^ÄÖ¦Õ‹¼fbg?eØÎ6w²Ì»9ÑæÕâBùDXB ¼÷œiÖ&²•µ–բ؄7‰ñúó'®Œ´è$ ªñ²° sxÇŸSÍ›ŽF…µÃÝMæ«Ä}ƒfÏR§IÄ”µ°ã¶‰û ;£Úz!{=¾T´€b¬ÆªÔŸ›È™ò$ïÖŽ#¡ šàñ‡…I5 Jpì$:X,uùO„-4ƒþ X#û{ŸàÄÈc@оhšØNsÐ}ÍxXýÊÈ,9  ]€0Z^mO>•Å6 p­Î.Å5–ÌkÁ†¡U@ÌW’òTTÁk¡"/LAµo?ƒÊÞU)òãW+¦ Øpìš5³ž(ø&çÀ ;x½ø»¸BÚÜb?XÆ®NãÅ+íM´›G&˽yÖææ«8 Ä}I&›tx…k,t®ÚO*Å&°f„LÞŒ¯€Vyψ¿‘Éu3»ˆºWAX½·ÎW¬¥Tð@[8Ý΂fÔóH¬ÁÓEøJàK#šÜlÎl¬í9›{ …IÕ2Ρ)EI4ì—ô‹+èØ® Ðî>ÃÓ£æmòœFçž-ºì6D;‘n¾Öl›z¯P&þì×&L÷½„VJã“4M–¯rÑÊC7#ЉL%>vÒ|Y0SÐlêâeÉx²Æž¢à(`:Lfš\ÙœòóÛàÝÞ^H(nSI AQÙêtIÙ,@]îT9/r£kËÑèü:ø d~¶FâD‘§Q²"rSOœ¢A=˜÷¬×>I˜¤ åñÞ¯àLÞÞSÅ4µ|Œ*»Ü¥tǰù¯—ƒÁ̪¤‹'0p ŒVkƒD³:f·¦€(+€O€­•ØÚû~eѾÄXËhŠ}¹Ð~E÷ÂiŠq 6HüdËrL|,bËr #ÆVÛ|"?yRˆ½A,¢ê&’^AÑŒaldqåÖÂÉÏ9±*L -»œžE~ÒxЛ…ÉŒó| ÝÔŒO —q– µbŒ¦8jíÁhß1´xx¡1dZ“xG€Û)¤ Ý ^€ðúê¢kUŽ;wÂxQÆNŽ—z­Í¦˜róņø”.d øK˜@d‘_G±vIU~, k0@2ìÀPìt Ä€Î2¯½q,@®Mëú¦vfUãàž¨YQ›úüEW”¶Á‘.:G~t‰ºXïW•+.+.QÅ‘U¨XÒMHk€#dðb yJˆØËÁ¿Î¿mmìóÎS;г§ ÌÛÕäþïRÛñ?¯!†=òž«‰ìŠG-ß—? Í«ŸOu‘ãÒa[N³ˆ¼~¸q-ó8„"ÕÁ|„°š5dä§ä•9W´6Xì…€Y‚ÓDÒmT]vC}1„/±w2Ün(zº$\*‘îÜ=Wqd]…8‰¯²¹sÈh0åµoÂ×1€ù6£p( 3«ØÛÁ>ì|¨(^[òuKò!Jj¥ d ºB¶_D㵂ä±)eØ–Ö&ÚˆâÊÍÒì¦Ìr\Á.Ñ I’Ó>ÏvÙÝšs¸2¹cÌBâäÁ0Ib;WܦlnÙ8w‹ÍËö°É¼Ç —/¯ÑÁý,Qá€k«èÈ.çÕ”Ì$ÖÆ”jþ†ÇI‚tŒ:;w»ŠÀj$¬ãµâôvƒÍ ã äŠ!§ƒjÁ.ŒƒÐñmA—³¶’GÇš‚5‚kͰ‹î5¯è:2/Ù㯞kÆs·ÄìKÅS¨"sÉ’U#6Ý[Ž_Ù0çlG¥iíÃò *äCeœÑšrnîVLësuü¼®… šÇ£‚ ùQ-y¿üjhX$¬ŠcF^¶s):M^ ŸpXËj!ùOÅëãÅ«Mð6ˆ“rŽR^µÊœ¸(Q|ÉÙ©«ˆÉcO š@”V’»vñ=ÂɼfP,(ìn•h¼¿Æç;E/•'aéÇ+"-1cГ0¹@Ù#›9¢5/¹cñ{iâ­¸H2ï½£³¯y%ìíÍE+ö1ß”]Õ>«ÚDYèʬѽÖÂxÎâ.–ó´¼âãüBÏy«hÞdlÁ S€óÔŒÊ%èÅ< ãM)´˜¦ÚC6›è ‚@tíj†3GÅ©Á7Á«•¥!ŸµŠìuïUµÁ´¢UËØ £É{£TA_K¶eˆ¢B°âBêF®Â½{Q^ØÝ“ûÂuÂi:6æƒÑœçil!õ=ÇïyŒ à±(5#^©E˜MÈ<-žòÉTšJ]•¼š{a…³ÖxÕªRïð(:@Ž8%H'øKÌEY;ɬ²yúOÀ,V¶3_P¬‘€çyˆ¢ÕbM*I–œu “Ük2w8‰“4·ª[|ÙZ°âyc˜æP‡78€U¡¤Ÿ`”/œ^„Ÿ§|]$«¢'Â-˜ùA˜Øûc¡hõ§Yˆ¯Üð…Ë dœâ@Z«šœÒTväŠm楒lXÃÀ.‘§=‹[SĈY(+}4k%0%é)> ”± ~òIÎPlåIwbŠ„¬c\=9U%×6òsOÁ¶ÀÂÄõ“ç€Élai¾”5´Äh[ÃZ•44™ØÆŸƒÏbÓQûÕʲXNd4Q›þ<'‘±Nœ ¨‹]q9CÈ&VªŽ"âLŠ8m^ë¨f†ËH#æsÒÇlÉ"IAÕ<²¯c÷¿Þ ‡Ä9L!f©²b tÄD€È­Çä Éb£‰‰ê²–‘yE¾v,ÒÑ:ª‰ÈW`¹˜_Œb—)¸HäÜàIÛ„ŽªŠ6ºD§%ak3(fcM®â OÇ—!OôóDZI”$IHÖ‹'…êG|8Þ4$š(PþfQºNl^J†´ú³ë93‡Áç 0ÇCxFÕøz±ß-™ À _‚—¬õµ7Ƭ‰"ûY„Õpî™ŽŠº¯Q\ÃÍŠØTÒKœE“‹k¿ÊMÁ`æ:3S{í¦l„OAõЬ’Ü"¶SMlÙºÌüikëb.ì9ÐQ D4Í­ ¬I8æ%ÊäU‘&°qqCÈûÒ…¼/|]v£P°/VÕ"|¢D‹ðÝQ‘ÎÙäÙ¨QÎVn‚yÀÆÈsSŠIÉ0²\ÄÕ‰âßW:¯$AÓ.Ž[ˆWˆð´8$¶d}ÝÛâ%U:òý6˜h¸P‹bX&˜i¢E|F…Ôz¨7²CFk^P³Ðbœ1`KÅÙÏÀxJŦ¶ÍÍsÉ]›WoJþT@vZÓÝ™æ`Á @ÿ“«g–ƪ4\W›»Ne2hW¾™¢pIA‘$·‰_\lYkB•·'ór°ç-§C°‰”&lÞp %„t{¼?&šÜ¾Ä#cÔ¡dÄÖUH÷@߆Õ-à3¥&‰!`(õ1yI­$Ö´R-¢ènõ–h6šŽ‰´O×Ö›UòIæ³ ¦3AÁ*÷Š«î¸>ÃWØ©pp‹¢'(ÁlWË÷ޝ³¤¥CHã€Ñ–ç> F¼âÓú-›èг‹$rˆA\áJâ:‰òÀ#ÅÌaÆÕx°‰­´$‘&ÞÊ‚lÃýï ×l9±]¯ó<ÿ¨F·¨úë*Ý!òÕûáÃ~¤ÃBaÂß?aönÈ5R7’GŒ‰êØÏ™$Oú qVL¥r\àµO%¸]ý¹¥‘¶Õ¹0 LUçâV1+L¨ÉS„Q‚¦ÕÑ$‡"¶³±;BN–¤Žª(ƒÀF• ÇÌ™/sz¶ÍËDEÚ@‰ç¡`Z…@_Ñ” ² Ý ­ÚÁC!£WÅ&¨ónð2[ã<¥x…’¼ZYTRy«­ ìÅà_|ø¡MIˆnÆe勱~^«ÕB@.”«¢«SEYÚyF…Šò›TSazŠ%Ì’‚Þ(öÅØ_‡I‘›uVª9§=ð`ÄŽv•çy‚^p’4…‰'þˆÃ͉aê%ˆXc"ê!2Y±p¯7wÉg²HJÕ_Î[ qÍEIfrÄ #q,Ãr'G‡ñ½5J¢G…ýøp7ïÑ’#¬±e0{ö¸úšëaö›sa„ ¡2´m(d„Z|„U< úìQ¾((ÆSò2åâ⥵jˆy‰†3±é Qí{ïÀ÷YÇ=›Ï*?²èauy«ËÑíÀɹØb“á]ì “'O"3L‚–ZªÁ„4÷$² ¼'?'¤úa¾Ó‚¿LÀtJÊ¡ÑDSR,Æ„:/5Ñ?Ä›ŒÁéL|[À®ƒR8Ê1¬±ûî;ì9³9"o}E$ÓÁyàÝç>‰Ì‹XˆfÕlQÊ<,­/˜#l—xo£‰R® €ÝOzqdìÝÌð»ã%£Aʸó¨zƒ€ÖÚr”£é˜4i¢›ˆµ;R:uP¼H…*/ŽÊ3&¨“`£w²$Ì?•Ï9Ž“E‰ÁÛ)1-AJ_ñò\#Ü!LuœxXjŽr ÛÄÂLhrg3ÆøŒc-:1qЬ-Bi$XÒn¬½P.±Zw–wøHFBŒÍ=bQ`ZJ:œõ¥p”£|Ñ!n¢lžÿœEôFŸEõ÷¤q8C9Q>ÿJKy¤Ý3ÙžOÈ…@rÚTä¡ ÄÔV’^Á· K(-ïl9†ï¾âŒeNÏÑIž©³ºGÁÙ¨ô¶ŠX- (¥ãˆgn€oŸs|ùðJN¦§™{ .ËóI™wÌ(…£=qÀª$/nÒ1e*ƒkáåRœÎ/ôJBu¥”Ö£|ú}¢ó4‘¯¨à’ò6Jc±¶If’nNïSšUåA³Jž˜BÌ3âSÁbÕÆÈ½ÖYRá¥ç01…0 '–g'ÊÓp{ÏAÆÚ+JA¸{mNª cá(½Uåö ¬ZÈkzbÊUª &g,,:pìæm)âš©äËi—}šOàìä¼5)«Åx‰¹Yæ^.ÏIí»Íz'å(Çà‹'?2_¼VŸcƒÙeC/)¥ŠÖ¿U9™ZVJìc-%$tž-&OŠK ¥lÂ~+®EŠDKá(Ç( ˆ_Ó¤ØCs®}”JŒ&Rw¢™$ºÐÖÃú IK&·QîUžH™g-Çd‚ÿ:{•ÂQŽÑQyQZhOZ9D,õ:g2‹ù¤,!ŸØ*4'Ê%±`ÕØ+/U•’_®8Íéb Sù(y9†=¤}š§Š5A`¤›¬êB·äyÁ²<lj¿§mžåùx³B)„Ô¡„ÆA’ɬuÈR¶DVp?AEu8&¦{U¶PPòrŒèÐ\ÿ­U^²L=C$6Á$uT—‚•z!Ýœe'ÑžO+€tÞG"ô¡œŠ" 6cP ‚à éïáÃ08Urz<é"!œNÊ `9FKspת<'<'†PQ³”„Ïi…û÷ID€Ð5Ë›7ž"gêˆ; {oYÂí׌ÁŒk~¸ M2s­^8„c«­¶jùÙwÜQÎÌÆgœK.¹$rÈ! ŸvÚi°Ì2ËÀÁ< Ì!í0²Àu÷  C«µ¨a(¤âNV!2ª²ôq ’=±„w]“ÍÛÒåeÒ*4JŠ B‰{Ù,±° À`Bßësç;ß Ÿþô§éy, (×\s üêW¿¶§Ê7‰‘T&¯Uš‰}]‡–:}!{“:ûPïÏ%º™‰à,W¢š°(%ËÀl-†cM‘ûJƒ å¸R6Ò!§[iVUÁïDx:+­´ @, ±` VÎ0&oWíé>ß±‰Ù,=˜p™†²iÅŒù¡¦bóÌD¼ÇQ7c­¢®^§Yäí’´•œ.JRWJá(G ¹é¦›àùçŸï‰`ˆ]¥xIö˜4M \ILù Q­……"6 ÜiJÄõ¸™¦¢I%}íe?1÷.qX±I% ˆº×qŽé­Úzë­ÛnóÏþsT~Ç~ûí'œpBOέÝuíõu_qÅa§v‚ .¸>ûÙÏÂÔ©S{ò~R"Ƀ YèK™™ ‘Js,D³w‰RAÒ$â:³9Ó$çXîçHµ‰±™KÁ;ÆT¬á¸l±ŸŒ´´°½Ž9z1ñÇÒï,Ȧšrçœs}ôѰØb‹ ˆ‹Y% ×꫌gS'êÄÆí«ô™^éÅE«ÄÏ•zH*J"íïò†6¹ñ•“äÙÀ¤"vLº€ßK<Ãe§ÒQšU‹È@Á¸öÚká—¿ü%™RøúSŸú}6\‘´ ‰C9•ÕœIT‰dš¼òòÆ2*tOJQSl3âà6§hÊ¡F`²Ë»Oñ÷ ~|;E5î,…cÌNM¹áŽsÏ=· bb¡€ Ajôh Ù¬‚< =ót{þiü©Qs¤!ò  #଩õ3"lé·†Lí*§(!šÏDå=^Bª;7ß }B¿eò¬ÜaGG¼UŽå ´(˜DÃO<ñá‹fà9NVXaÈûÿÙÿûL]r©`!øÖÜyª|Í·šƒ&'Z›üBš;n ©C³è`¨›• -¾¥—;7Ù±bdåM|Bì„uÔ‰ì¿ÿ;ÚòV•˜ck®¹æ  }¸ƒ"äÜòس.rûdåÁƒg#”ª¿ŠÏ±29sˆ]Ð~¤yi¢åØ7Ñwv²¾]§¬SV/yi ŠûJ±”6õ¤ÑR€¥s&øNy«ÊܪrôÀíÙ›XJ,"©è¨“°O5Ï æVÿ n"g…š à–Iªƒ­æñ33ÆkÏ–è½O)dˆˆã7ñ“Ýr:‰væ5hZèïlLÍ~¨>0)1G9FO8hÑÖBh`ó†XÔØ“§™eó(©yÀÌ5’%Â"Ý®(ÂÍ\¾–{®"j¡¡hõѶ:×Zf€ÖF†3z;åÊ-SÖËÑáP›¥þ)ÑV^4ç=iŠ‚*Œcq¡  µ¦¶I[n¡ ôûy õF ~ÙÐ]¹æK{ Ÿ œb, ¡ÌÊ-Çh ¡%‚²¯ÐÌ~o`ÛN¨$x‹(±õ.¬„¦›ÒDKŸ@³¤sÿg¦•–&o*ôfi Á-••ç͵@èn[ G9F|Pݸ¤ý¦ ]]HD3O7B–¿ç”6QÇÂ^½ÖÑLÊÕÄ}Ëí´ä¬H¼ÃBC[‹ú²ØBÃÑ—cÄ…CâÀ6Ž–[nj„Þ¬þÄ{©°íEh.­Í´äýÃCxã©7Å<²öØ‚„&®ëàfŸ*¯a…!’’·ª£6(ïÉx&BìÜ%Xq-Fâ&r•Wxúœ9t ×° ’–n&oSÇÝd‰mÝTCµ8•¤ ·Dc—nÆSuZ!Öq7][I—côT‡$xdyƬ5¡ZVK«f!{ãÜ‘27•`ŸLlɼî[@há[:± ¨¨ü¸¦æ)͸qæ¬2\…ÇêÐlh{,"`¶@ÔnzÞ¢ŒÛeûÌ[3%FB£UÞR@È$m]ò¶lÝç]øÆ–P”‚1NÄ6®ÚFÌ#“EY·Q×[˦”ÁղжŒú0ª¼$òåbäC’cy*I± +ý×.œYÙ8)“­·Ë1lC³™À —²‚')4•*¿B×`Ȥê¨Q¤ÚODûPÐê¥ê½T.À•§ù•b‰0‡,¥¼žë¸Âœï%%4R¿)ºÊûˆ[89Œ5@.’Œ'<¦£î‰í\:º›uÍÅ—¶ÐÓ.Ûögì`P©±¦a„„EÕɶíâÉ¥@GÄ;íCƒùŠf†‡œèAxÜzY"öc©›l=7‚aŸävˆ“¦ñÛªÅK[üŽmÏdžñ¥šËiׇ[˜7¨!H0Üs­BOåvå}A„9±P3é#Í< #%½ ;ˆ¦îô³ƒ Jssªõ^Ôà(ÆvyPve÷•掯V¢Žpbn²§LV-Û©è»âé ¡c­y|‚âM]“®óÉQï^lj^ ,«a`«Zɉí`úM(¨§:<-¦=43£Ó$ òð®§Iáéjò7ÁG!¥<'øjÁÂõ dq¶¡' 'žîÞ1»@Ç\‚¡mP Ó&P´‰¥/< ÍCqÛÂÛ-¾ñ× ½¼Ç‡kjøó…ÒܹGs¹3y-G=žïË…Xc¬Øi0 ² ´Fì)³m0F³‰k»œ¥O?ó4<ûܳMæ{þýö24!éæ:Û !mw¦áP”I;±™ çšq‚OQ1Ò׃IáˆL)‚¸_GÞ¸SjC8]~Q+v²ú¯¾újxï{ß ¯½öZ˜¼þúëᔜÇ<Ì|yfSÛ ÿ<ÿÜspè{'gÌ(ìý׿ù5l°Áú°Þzëø[?8ùdøã4=ªçÜþ>~ÄððÃ…_œýæløŸ#„K/½´#MÐêÜ['tvÔíˆ Hó=5î9á¼*ÅMp¸O OFÊé(yZyM{¾ŒÙ2Ù‘ÐÆå—_ë®».|üã‡Ûo¿6ß|sØhà á#9vØa{øÉO~óæÍƒ½÷ÞŸ²8\yå߈)põÕVƒM6Ù¾ñãa«·né>üë_ÿ‚ضÜr øÊW¾L+Ø;xðAxèá‡éqþù¿ƒ7Ù~úӟ‹/¾k­µV( ¯ÁòË/ï„h=øæ7¿ sf¿IÛüéO—Á£> Ûm·tª,Zv¶×yXñœÞZr¾[mìv°¡Ï >„M„ù¬‹õâ=‰šƒ{Þªê…ßWcæÌ™pï½÷Â÷¿ÿ}8ꨣܤߪµ*Qb~ç»ßj,¼Ã Ác??ÿùÏáûïwån žyæ¨ÓO?n¾ùf¸å–›éfÍu‚õ•/ î»ï>ÊB!ûùÂ_€Ç ¾øÅ/ÒoÐᇾ~Ü×áºë®ƒ/|þódæÍŸ?ÞúÖ·Ò瘩Œc×]w%¢çÏá -ÖÔVÞ;z3w°97.ˆŽÖmaù¦KúeâOì–p‹4I•·uõ#qùBoVµ··‹a³Í6sæË#ðØcÁ#< ;í¼S.M\QO?õ4L¿ê*jø²ýöÛ»ïo ûì³73£æ8é¤oÃUîóŸ:­ƒª|Ö¬YpÊ)§À†N#a>Ž[n¾Åi µàÔSÿüå/—Þ{î «9m$ r¨Íî¸ãNwLÃ>ðA8ðÀááGzÞñŽwÀ Êà8¤ oÙHÉ…1»‹Òá)¼n[¦ Éä–»I)Y»ZRÙEX0B3±àÊ]@.§¦ãG?úµùµ®Öt%?¾òÊ+pÞyç…U?ÿÑì&ô©pÏ=÷À“O> _ÿúqtq_yõ8óŒ3à#ý( ÙÜ9sà N Í›;æÌ™ ŸûÜçH‹ôîw;,ó:\|ñEpÈ!ïK.¹¶Ùf[Ò<o¼q8®ÿûß°ãŽ;ÐsLáÇߘ6mZxý‰O~²  ì Äöôšu °mw{Tƒyüžôÿ êÂ4åŠè,Œ¸o}V.ÖpØ(î+¥3­YÔ¨yÚß’/}éKN[<7Þx#a‰üãð[?æ°Â{ß÷>¸Ç™[Ûl³ üøÇÿÿç4A?üð‡?„ëPÇÔiÄ ;,ñ¸3µp5Gí±ôRKÁn»ïN«Ö|ñK_tßý) !þ "j Ô(Œxsßö¶·ÁÚë¬O›8\rÓMÿp8æ.øà?DdðùwÞ ûî»ïèLô1êé ýi¸?Gb%EÝsUyÅa󇣖J<¿N³§àSK´U‹Šæ°™¿øÅ/ÜÄÿqHzÜyç ¬´òʰóN;C__]ÌJ¥B—^z þÏm¿óλv¹ßáŽiý+™O³ß|®»öZÚ~µÕV‡ÝvÛðÃôéW ŒZ½`R˜ó²ÓNø¿~ÜñMÞ¶ 4Ú6ðb ±pt<<òHX}õ5àÙgŸ…óÏ?öÚk/g>í]t,µÔ’0Žc±É‹ÁSO? ¿ûýïH ï&õ ß8býÈGà´ÓO'”˜‡v<ýôSð_§AÐF~ËoË.»Ìÿ“aöœÙðâÿëÀú½PsZ'uÂ'ÝT|àØÂm‹Cìâ‹Ý1‰‰÷™ÏÙÑU¿—bˆ+~¢s€ñÃܸ§’BÐ*€÷ЭVºCñs»°÷ìÖU‰&Î…þ‘)çz":#ic56£l1˜0‘GJRϵ Þ(`Î*¼Ÿ–±ÞªM§*Aj7B´¨»ÔB‰9Úgß6¾wë­·Á³Ï=Ûn»-y,ОGüÝU1ÞÑLᬺêªÞÄšùL»òJø—›ä—_q¬±ÆpÉ¥—Â]wylðîwD¿9Ïèþð¸ûî»Ã®Þ˜õiªO|â°Ã;@¢ivÎÙgSpÝu×uÁÇYgý.øÃè½uÖ^;ûîÿuvÿ?øAXq…œ,¼ë]TŸ(®©-ÖbÚÎ~µÜ¸2§ä)Òð¶ã„J!dkö<þp/êSÙ¢‹{õ´«`§ñ1ا¹Sm‚N ¾¶qº¤apAÜ™Yjñ,÷‚5‰m»¾s÷qÚM¶]½s½X­‚ë»ÂJãÒ,>æ‘€dçîç!å·†"æÆ9¨æXоû–¶n[pQ—T·Þ†¤ª®¾·°¹q›{‹òç†ÒFLÞÓ<~PÔw ¦•‡Òô w•õ홥ݲ²ÚxˆsrùkPŽ…b¨¸î‡“]û^üKtžtHL†î½>ìXK`5„ζ„O¸õ€a5¿Ày«:Õ ÏžTέr nûkî.K+¿a-ž°©d}ô{*Ÿš®Zý'aN:DÜaæô‘r,ZCxZ¨ùŒô;·&2i#‡‰Š¶œçŠÒ×¥ÈÂ!/Ç"j´ 0ö>å­ãøy¤¸Åš7.§µKMOÌ Já(ǃ̅ Z"â’µŒµÆ÷FcSÊ„z ­òòIßÁV•}È˱0Â}Ú'K«eC…dš‚~Zú–Cp‡nRŠkË»”Â1Ò`²¼ÃØlFqM{“oI¶–DK[Ür€^[obQy­ƒšcAÇ56[3ݧp»]å©ì›=⋲ë¶}pá& ºîX˜h8jï>øöÊm²¢R _Ø1…]',7 (7è=oKá°©œÏ¦}ð—·jÊ]¨9õ2Ï{ƳÈädU~[SW¯A*ÎÔåJ—˜£Án4QÃgwOàÐWÞº¢¢”ãÆeÊÂÏþ6§½¹Ýj‹)#}ºØ+£j¼ë°02—ΰpÁ¦ üöù<Ø¢ãÂâ+&pðnÐ |w ûkë,ïÌ„Üaa÷Ýûá’%£étï¶ÅÉ»ß=UØåûoß{¿0GÍLà7»(ÈÜ=¨½\ƒƒ§gðô¤ÎÚÇÏÖûî€îXe œµ’ÞA Žv7çÈ=*°ÉãðÙÇ,Ô2·÷örî˜>º”_ÞlaóM4,5EÁ9± íÒïáÉþÕK«0mnŸû“…nŸÀb÷×àL§ýÞ¶EŽ558ä «®ŸÂ }üÏ}fV®{§B݈‰êHÀW*ïĵJê8„0Ô䌇̘h¤ ªôVÇì7-,¾v.ÝEÃôéóa«?Wá §=nºc¶¾p¾ý¼…Va÷ çÃþwZ­ßt“¬â–×ÜŠ> ×h'óZF7áßxø ÿZ<ý˜5àvi {M0p™ÓN¯»×³Ý¶¦&pÒ–°‰õ§"_ÙÂ©ÓæÃ¦¬Âïf[øÃ5îùÜãB'L ?w¾›f:m³®3|JÄ›óñغ†‚›Ÿ4àäj Ù½3ÔóESÜ0SpƒU!~¡)9M-ηrBP#~be‘-1ÕIï„yžzýȸ/ôh7^ÉหàãwxÜ¡îöNaÇ73¸{ §Q–²pñ<¶r ßÛHÃÔHë.Q±ðš›p˜ï6Ñò¼6‹Žq+ü¯Ÿ8`“VcäІ ÌÈà¯sóíÖ]UÓ{PB…¿ÞYƒó^o¹ï<¹¤†·ô)XÞø™nŸk¯›Â[^¨Áé3Î…JcÝ„îsš"ÁÜ*œâ™/—•ÚpmR c2T“‹K¹íû¨Þ\S^oÊõå5ÓÙÜ[´‚€NLœ¢áøíSØÕÙ6'ÝœÁrΤÚìE÷ÑÌ Î|PÁWœYtv_vB4×MìU&`þ—»‹;@ï4ÇÜ~æ®ÿÔào{VठœlSøô¤ ޹ɾ{ß}Uøüdg–­­`âò |å­¾ïd·~x/?ñÀ|n~ —¼%÷Lm!æ×r}pc›×öoÝ~ç|â f!¹mIJî°BFTH)÷®ñÔ –7Ú^Êp¾´U¡î›ùÕ}Ù,Ûc ”é#jÒ Æ—˜¾Çቯ;SæNK\âÞŸ²J.XÁÀ•‹i¨>Q…Ï>î'²ž¨`ewy¯rÂÑ¿”»ÈΔy£ƒ¬5;`à'·gpþÛûà,w3.»± 7ÌD«=Y…Ÿ`'Œ[%¿´w Ú™{§¼0? ¨*ì9#w O^1…ßn¥)µbúmUøy¤5ªÕ…G0¼yƒŽÍéTÔ¥´´i ý6lèä!zîŠSt¿»•WÒ°ú+Ît¶ÿÖÎæ¹ñ)/³_sWRðÌ–]GÃÊl´/¾Œ†5ß4ðˆ»)“qÉvæÕþÖï&¸³¤Ú‹ &LnÿsÝoÎáG Aôzžñ˜æegÓÍćÃB»¯¥aæCUøø,ìæÌ¶•jü™{¼ž-\÷Í"W•2ÜÍÇ6ÎÀMóiŒX#Á‚¦Ì§´ "å^eTÏÏ•.yËCÁn«hxè9K®—ÂAÕ ~++³Àÿа©3µ.ž­á°Uý ½å f¾hàw-—¤`Žæs9[q:»/i¼€&køÐv}ð[gÝ~ûv»Õ7ëƒßïÀv“‡“ÐkºMŽÐ58þ?z¨§ÌÑð“Øv!Íþ§äíÌ8³–ÕCn1sÅ¡ž§‘ hOÙÐÒ\4[šU“jß©þt‹…§“ ŽÞÀÓb"¹¥ûŠ»kP™eáÅû2xa¾[]&$pàŠ×Ü„ZCÁË8ÍòŒ%OPºT —’›ç/hú/›À×OàÝN½ùß ¾þ÷L“Üða§­>¿u §î—Âó/dpÑCüáÛ•W©’†Ý×p‚»N+¼ZƒÏÞÁ2oZ\~k²-*ð£½øçã\æ׿1ÞÛdÆšUqç2ïBV˜Ðk¼O…5…ÝP7°ðZÁt3Es8¼pÅ¿3˜>Ç™0Nþ±t œÀ’s üì5€Gg±•þbwÖqxdýjðÓÅR¸zw·Í1ðmŽ©ªGÝâ„h‚†c·uæûjº˜‚ ä_e`ú«bËfžÛ÷®€3–ÔpȺ 8¸àÃÝ£™NkÕ{ÀfÍóÙ¦ñ˜º¬†÷. 0ÝíKŸ³0Ë+Lsåž§øÀzNNð±Ð(}íMÏÌ]µ4­¸õ(#A+䦎ULK 3ŽX•‰é˜Ý®#R·®IÝb‚0y… ·ÀF‘Ç?¶âØ­tWÄYH“(Ç‚_}ã§™—!aP:ñlëèÞE^±ÐWðÎKiE³’0Ÿ˜¨`ç½ö§¤ncB——‚1vFJ˜ÁçXaCšÄ“´ yÓØ ¸¬ƒé’$ŸŠ± OÊ(} çV•£Ý­SœM‹‚¡=i‚g¬…~ã ™»ÂW¬àVBÓÓ¹K¤,7(Ç8Ž*êÖ_C¹S6o_cóÀß‹ï–C°¡A§Y¹¥p”c rÃ=þ€q„§ê12ƒµñægîJý8»¸ Ô2 ¨.ë9ʱÐȆ›¦:ñ) à#P‡;,5ôé"ÈžŽ!ã”õbY„åˆzÂÚeÇ÷Ò‚»ÄÌ#p'TÝ鱉ÐëZk¿&¶µ*·ˆÿæ& ¿ŽZä­¸"/tHŠZ@±5@ñý±„ßTÑü|p\ýw¿ E¹3'*•Ô™LYP q­e=B^èÄ,•¶ón…›Uv<÷Äó>BÜÑö/ÁÍçž Þ5‹eà•0ãÉ»áO¿¿ž«õ#,M~¢Ç¶y—5‚EgjHÛ7?“ï™ØD¤¦ÐWÙ¨~\šcîäL¬nŒíjêX8ì¬'à¶Ëσ³ÿt7¼ÔÑävªÐÌ£SÏ»õúƒpÕµ¯ÂJSîyuìEoGA0FR@l—ŸØÑNÛæýޝ75Ë8NÁ½ÈWÆ(|Nñ¦ñ‘›ilÂófB=µøÆð®Ãß ë¾z5œûÛ¿ÃïLj>yäxñÅaÞܹðÝï~î¸ãޱ*l®Ùa省¡Ó®Ÿ²¦Ž¼M&|}ô;”n´FWš#›û2<ûä ˜ñÄãððCÃS6„íþ(l½æâ­ÙÇÐâˆÿ…^€“N: ÖXc ¸õÖ[é½ú1iÒ$8묳`ûí·÷çí„%MÓªV«áÆàÅ®T* û™¿óï„_ÿú×°çž{Â’K.ÙT@Pþõ¯Áûßÿ~øÔ§>'Ÿ|2½÷–Í7Ëú£øfÎèàÖwáÁæCe å°9[tâk ƒ´º¦:rPæ§§Â1ÿ©ÀåWÍ„eÖYÞºÿn°ÑZKCÿ BXƒš¥ رŒ¨á Õ`Æ Nà#>vtÐA0gÎXy¥•aî¼¹pÄGÀ{ìûØÇ Û_~ùåðÙÏ~6h’ÓN;&øç?ÿy0yÊ”)pÑEÁÕW_ ?üá›æílæpV|£=ôP8å”SHÈþð‡?ÀÛßþv˜5k áRK-ÒúæÏ§IÑ××7èÄìf¦gGêqÏò€«ÐV92—l. d‰¦aWn7oë9ª0çµ7`  X¼_5­çXýõFäª7ÛüÚk®…Ç Þýîwþð¸á†ZN6œ¼hÚ }ýë_‡5×\vÛm78ꨣà#ù\zé¥ð»ßý^}õUøÐ‡>¿üå/auÖyóæÁ%—\BÓO?´޹ÎTúô§? Ûn³ |æÈ#i²O˜0®¼òJ8öØcáœsÎ?ÿùÏôzáZb‰%HPW_}õö¦G ¯“mõž­‹LÇq€†x'‘r‰‚ÛhGÐ „·‘ñf÷îê+§ÁòË-i’¹•†#à“Zå*K‘sÝtY<‚×xç½öi[Ï1‚‰‡)Lšº,1A²ªåÿ`°‡êç0MâL…»îº>ó™Ï8 ±là9ša«­¶i 4톔°Øl¨.¯¹ ü=¥%E]z8A¢(6x`C‹{’@ØHXo iÍ8%XI9cÆ Âˆ÷ VÀ¿×_=Ü|óÍô\À9NdÄøÞŠ+®HZeâĉm4‡?ƒ%—\Š ÷ƒ µT3ÓHV°½öÚ ?üpÄ9(8øM4ÜI:ZíT'äC¸ÂvæËÍlÃöª¦)E=ÕòP‰P…òý6„eˆt½ZL§}‰,V"ñDÓã¡Øi0ˆÑâãá \‘—_~y2{£‹';®Ðˆ öÝw_Ò(8r¸A5z©GàóÁûŒûÛ:[÷=yò$ú‹ M-|>q⤶ڪkíÑp-;Í ±­­©áH‰M²Ö³T’GPsßП‹‰ò¨Ä9€Ÿ#Ém“ •Ø&É8Ž!ØXC\ÁÑݺÝvÛÁW\AfºPq I….Tœ¤™6m­â¨MÐ ‹Àü¿ÿý/mƒ?C³ õæzá0¨‡Áï~õ«ð£ý~ýëßÀ'>ñI ô >qG)j¯FàlýĶ­…À6n3˜‹ËcM0¥4±R¡,{@C7'ßg€I<>Œ­2בÌí«–uÆ6¶+ÛÄ=º ‹ Ö@ÛÿsŸûì-·Ü’b8Ð{„1µÖZ‹ð®Ü( èÑúÒ—¾¯¿þ:Ü}÷Ý„puú÷¿ÿ ›sNöq×]wÁgœÓ§O‡-¶Ø‚ä‰Bl³û™Ù̲ꕩÚz?]§ÿvõ¶× Ï0ѵVz§«Í‰ÞlÞœªÿÐÔÊ<\bLÇ:a|Ô·±­T4pRâG퀀ZÍ)ôdaD5NlœøƒÀøÆ(PÐ¥Š`1§Ep’£É…^®]wÝ•ÌÔ¨yP(„‹`àÀß;ûì³(^±îºëÂo¼<_hæÅfN„¥—^&ô÷Yƒ¨!¯Bo¡º;N<”šr¯¡LnRÕ­6Rb u¥´¥pŒ/ƒi:u0Dn<ÆÐ¾Ç5¦‰`4 æBbC®Uñ}NU"Ü‘õ¶ÕrûÀWw˜CÌÕ¿Çø’‘0™†b\Ù¡‡-ºÂM]–ß§ÙĄ̂YzψŸ ûÿ h1‡x°Ð¡e±DaÄ‹FÉ1µèh‘¡z™Æ¨"°-fù rb[¾ÄH¸—/ ž@A±iå½S¡~Cœ 9Ì÷VR†2Óºµ ¨Zôä£íç9]Õð®§59ê´O†ß:˜VÜÓK ©Û€5 ŠÎ3˜,$mÏÔüÝ‘HaéöÚ©®¦ôð¶³í7³Ç'Í/1œŽîk7Œ­ùÔB‡§¼ÆÃƒõ¢¹?>y“ƒÄ Ù…l¶rÛ¶&/èvrÙfÛÖnëR6B¢Åß(^žÅ3ꊛêè?!Ž…È¯Fn[[çZ]n¹åO.°§âÍÍëÁ5“.ä¶œüNÆp~[Ãæ—ßÞ*Ì€¿²`‡°Î¶ ÛõÂÛøõ™® ÁøoA8ZqâæA>þŒ­«Ì¿_/\ñï6V6ž™¤¥j‰˜Aмö`2µ„Їj̹~ÜZ`£‹¿=Þ„c|ã5æXGÇ f;x«‰Š³.Þi›ÖñVI 篧äâU CTÞ—ÄZ.xJ½ê˜L¯ìÏQŽžB&5Áj½öÓ_C²5gàæz‡ÃÖgßz–;Àê'h­íxµ(5Ç"=lÃvQ7n»;y™y|aµôô-€=V6ԙ碒ó˜È”SÐ ÿH)å„ï‘áe» &Ú6Þ„È5%br!- ãºü~ÜöÌ·or7piV•c ª¶€ÖægP?Ù@•Ë\RÐ ð¥ŽýÐãiw¦8F’Œh9:3ÀǬ±cùàœT½7o>Ø*R¸fäJ65A0n,$(¾ƒ,@Ì‚Øp,P³j8TKv”ï×ÄŽAûÉÜÐxÂ:üÄYFº¯Tšx6ÄX*›i@Cö×aNu£íbÞ[Í¡Æü oÂkŠ&®ð´¢É=…Þ&Lʪ5¨U}¸[›ÕEÉâÈåÛ€ ]Ò×íB.ÝÎ=¬ê»è‹¨±Û>ðÀpÀµO§ã¦›þßÿþÉTfÛl 9ÃÿþïÿÂŽ;î'ôÞ4ÔTC¼Pj u«ÃÒ>3…(ñ°VèÏ!€t$Ç/š^YÎ[e9Þ‹Šptsq2ÞvÛm°ÿ~ûà ß8Ö[w=XmÕÕë­·m'ùoðƒú;ì+¯¼2Qù 3â`)D‘å™Hp‹¥…—_~™˜oºéFbYÿÇ?n‚m·Ý–jÚ±îˈ7Þx8æ˜c› ]ˆ³Â$ÕÈY…õ–€€'UðQyOÇ¡ãb#n4÷ëÐÜ#Ðm`¼rÕ“G'ÿ›¼1›#U2Œ¬¿þúÄO‹-î¹çøùÏNB±öÚkGŒÝ–úk +â¿î¼“Lôó„Ö§^;!å>Ö\s øÉO~ÿüç?é;ò>n¼0µ±.î²ËÛ‰Å}ýõ7 Ö_|‘ÒuÝñ] ÿùÏ¿á{ßûnÑ-Ù‰`¨Qš¹£bvyL×5uorב({°ÏJ¨ Iꡃˆçº2”jBÂ.²:"Xp?Üs‚$VÆ :Zéuðw‘Ùãµ×^#A¸øâ‹éõ1Ç'œpÌœ9;ì0b"AŽª«þþwøß/~¾öµ¯ÁûÞû^˜=g±"ƒNjIlÿȩ‹ììHá3Ø@æCdiGöôO|âD^ý®w¿øÅ/‰Ñ‹À7 ‰зûþË_þ«¬²r+“¼µ>±u­Ër­lÁA“¾áuÌêõ¹Uá3SÌ¡jƼތu]NjÐ>äWü–#–®ëgJO$vC’=b\çêÀß%@\ì2‹íyCçíöØ·-ÁÂ"#8!¿÷½ïÑäǦ2H Š™Î‡ 9…ž8QÃüÝ š<Øyi•¾ðùÏÃW¾úÕ¦“16ÌA¬¾½/šy_þò—áöÛoûBZPdVDá{饗ˆPáÏ>ûì! G4õGV8,¯ðš$*6 Gx¯á¸öïÓ`9·ˆ ¨ö‚HÉèÖÉ+N@’¾‰N£Ø\h óÕ|¾>Ï*ó\¹îöÚoA¶ [ûr`O Ô xÃP@æ_#Ã9gÔ{ï½7Mdä°BÎZ´ý¯»öZxÎ 3rÞbŸl €tŸ¨)†:pÅÉë­·Ðã–[n†O<~'ÇÅ-ØÆ®ïO “6ÉYxèQ«RCʰu× ½Q¸’£÷ÊTçCæœêü¹n»ùH·î¶` î÷amNFÝ‘ ¡ f>úÑÒÄCªNôÉ@&BHІÁ7 6•Á ‹ÚNj“ó2Íâ…Fs[—ÕOjÔZ¢P!ã:6ªAœƒûE“ )GÑ”BŽÜUW]…ð öò3HÚvòþÈäÏ›õ&Ì4Rg>¥XÃÞ(è¤I4›MjDžA’&žNûÈ8eæÒvIWYÓ‹”pà„Cí€Zã±Ç# fþE,€šeÕUW-ðUa;²Ý÷Ø£°dBŒÍ*h=øàAh~ðƒSˆVÍ4ùÂnøÉO~’öÔgŸ}ŽÆåÐ~ ^|ñ%Ún饗áÙÞýdn.=ŠºÝe¡(KƒÑ*ø€z…Ÿ;­€m jÎ䪲‰TŠLëó=YªÉ$ )í¥pÒw¢ ì¼óÎdó£™´Ê*«F@Ì=ý~üã„Wï þðú<¶èñ† í'^i:\ñ…-]Npô®sz<ð7±ê÷?sæËdÎ!eé~û½®¿þÚþè£!ž]l¾¹À”Dæ}³ýª³Çµáb*e@³·Ê·€Ph‘QÝ:1B15Й‚ŒcԲÙdÞ‚…P‹Hœ£Ó.Ôßþö·4 qG“ ñþEû ¦‘7û¢7«7¼ï}ïƒ7fùVÉr!Å€?šTh’a¿'ž˜A¯Ñµ‹ž,t3?öØ£cÐãÚ†¿ÅVj°¤6¯ µùUSó¼SØÝɱBFì$x?HCh_ôDÅÝsïMt¦¢B}G§Xn‘l>ƒýþ°vJÂÕí~d\Çå¹ó@3H0b¼¸ø^³ Šf°+Ój«­ 矙d+¯¼JxàdÇ}aÐ5>p›o~ó›ä!îQ[o½5ý½æš«á¶Ûn…·¾õ­ð›ßü†b)Ø ÝÈÍ(|TçvçAõá•6 eTÞHœ®)àÖf8ÉÑc¨3–ϸ%_­Ó,Ô€ƒzp`’â¼ysˆŸsœ`Õ(»¥Y œ”¨Ð}Œ®UÔ¸Ò Ùƒ‚Ï‘ñM%1«0Öñ|ŽrÚ]«qßr4¥©ý}ï{?ÅKÞõ®¡RümlW°ãŽ;±Çÿüçpá…“;ÆZ£ˆ0Jµ-·Ü¢!²» ˆàzm»ÅçÐê|Ð<íŸÐG&Uâ¸þÂ"ÀVYÀs>Ž¡É(JŽž*Ì%‚rÖ™NXdâC]3wƤNýÙ݇•JÚfûn :‰sä/Ь u1‰zö@¨`|K1°…û[lÃ\ϰž3˜Ömýñ5ÿß/ÿ,»ÌR0!éãzrf©ôA_ʼn >° 3—ÉâÏTçaýöT0qR9 hÁ±ž áíï:¸dY«#§Xµ#·,wðéPµOCF«4ýNTC«xŸôJ)ïš%¹Ë<Óa"uâò]²·€L-‹î\`°î"!-¢ˆ¥½Óž€¥p”£s!ëP’š:Š .ßA„¡‘IêÛkdR°Ä¬‡ß@~ª =W) 5ðX‡7½|ž¢…¾Ô' ›•ÂQŽÑ‘™am[·MÓ¶m¤%tÀX"KLëÈb%Ü·5ô¾aaI™mDÛœ"5“å¥pŒM¼Ñá×N©ê$þX/0}N ôUŒ#Ö AAó #à™-ìOY_×™º‰öÚEº’W‹ò±Êþ£,0ò‚aǦ,Åp£“9ß‹I´YG˜’ ‘´eöE‚Ú±¡ù„R£= Ö:!.ÑÌÈn,Ç:`‡µ ËRiGU0ì8§á˜NÁTj5ZtÀ-î%–iyŒÏ™Bþ1ˆ²^¬röUÒG+T<(T™¯çÀβ¥æ(£íÏõDÐzžsRü¾1h§š<³ô)á×™'t£7|lÍpý¸ŠúZJqW™š£ )‘eßÚ.°Eë 5gׯ5ãRC.­ÐĦ„ ×úü+êÝ!¹X^Ô:>R8u9è÷b÷âÑõI‡ù§¦Uñ³ŒÿúåsH˜‘òvʆ&>÷å°†ˆ%óN0¼ÁíÓ:MƒëH8â´‰nñD«ùèò”‚1¤ÙUñ^/SÇ_ 3FE ´µÈˆR§‘xZñmÝeâž—”u›ÓzêB©j ‹ZÙØ©^Ðç€)f<´à“k¶V Gý@²,I»GIm10¸“¢$|ÿÛßú\5}ú ûÄ BLMﺤµÁf¬¥½ÈØ‘•N§ 0©/„Â4‘JEsý¸|IG-ЬŒc''é2…í4µï͑ټÿ¸¶ IÃÌ^¬Ç¥|^ce §áÇB Û^ð™/¿ úЇ`Ú_ÿJ“«Ï:ë,ªó¸è¢‹¨’ðÅ_ ¬#%C2½l‡¯[¾o;–….,§Î·eü ÐGëÆ†˜Š¯ŒöTܯúÌ*Š`íº|³¬êþv)5GÝÀzq,MEJœóÎ;´¦ÍŸþùDº€Ô=õN$A@Â,x:òÈ#)»ÙL°šù§FZ0†ªì%ið·;N®íÊÎÔ 5÷ä  N 4óRY¬á Z#ímЙïò”¨¼#­î°Nv‘,šA,`ÂI}ÇwÆÀ²Ô¼5¯7©°.YB°|Ö{L Rõà÷s°ˆ¤ }= Ã4ul/„eRÐ9G9¡ ð“<  œ 9¦¥³4U©× ˜ÖN± t•¤”Ò^ G4N:é$â©Â: ä¾EÞ)4/à{XÊŠ°ùæ›ÃÿüÏÿ?.ÈÅÆ¿R©÷ðÇýöõU¨}‹-¶ì9X¶=ßcog¼Šd¹«\Á-*[i‰Ž[æ­8÷-I+Q‹3|Ô»AQA·MJïePòÂÀZìOúÓDÔ†k¸‘íp“M6¡¸ rT]vÙe¡PšSÈ­‹,ëU.ÖŸ8q"a¨E\A^÷r W0l¦{«È„aØÁD,ÈM›0 «)H"3ŠÊf–2Åj¡ÙfR¦¬7šTH‘ƒ'3Ö‹~øáW ^p$8@þ*4µP[ ÷íâS¦8Ͱ¼ímo Û"ï’D£Ðt#£+½×.Ís;¤}µŠ;új[Î pc ‡V….4š¹ m ñTÜñ ÙÕQ[$¤A´±7¯Y$ã(Gu<þøãð–·¼…4 2‰ ±ó6ÛlC‚!b¨o$Foc,;GûŠ'?åK)2˜(UÝ@ÄÄbØw%<½h:a>“¸o.FË1ÆaJ@Þr ¶xõÕW‰º:šV¨/]·õ«G}Þ˜5«ð>öÖèÔë1’:côeÁúƒ­j6Z¾_§-ši& 2S:Ö€DD¡ Ke—XÆ%hØeñ œ]Â$ܧ¼ŽÆøA8â ŒY €qÄDÃsî¹çë`ý@ÏëßCü1~£uà#Ÿ vt޽ö¨Õ|Ó™šK•€:ªRà3¯mæÀ·šà½Sþ3£ì\i`b/…#èezâ‰'ˆP5rT¡@l¸á†Ô*[ æØi§Bĵºt9侦OŸÞ¶»Ó¢1šâ k† Þ;Ïä2‹¢|¯‘¸Êl÷i_B$mh0Q˜ÃºÉŽ ñåY%^p²jÈÁ" Ž¹ÒP«ÄØn”ÅN‹”T ˜ç[Dëšx¸TS¯WlRÙAíJ¬òÃ6ØwC©·M•À9hü9ÁüBìˆ Xž7— g(G탒HÜ&µ’}d=5 ËQÛnϯ™ö°m=Võ‚Ò’wÁÚ¦ïqµbLCì:(N;@Ÿo£Œ¤8ô"”;Q2EÆG OU×—ÿ–š£‹sQ:ÏúÕ^µÕPõ©¿6LöÁ‚áÍ®¡WˆWDë™ÿó[*ªîó½‰w!ó¦RjOšÕœ^É|=º7¿JáX„Duoqµ[Q[XGÊÚAu½ ¨–&YñèÅ6<ט.‚mÏ´å´)åÛ d†@úüÚ<2«|Ò‚oS ˜dÜfˆ„ì¯Ue)¥iÔ¶ÕêÞîzØŽöã“ÖøÅÆxBÄ@ÀÛ A5«RsŒŠS5Ó´ÜEVQƒ…2·j‘v«µ*4z{ Û{Ô'+Úæß·íÁ‹Š§þ3e=½3ÄQvrFQK~ZÄ žØ ½Uy©¨Œ\G „©–ÂQ H"„&ÀÛ³ƒÚ: §‡Ä¿ˆ9r®-¦¨ÛÜäSÅ—0|[eOö‰]:¸@ƒ{üå)ˆ–„ó®#¶¨f5rûb—§*Æ;0})³·Å.…£í„.-fqº Æ ;´Ÿkß°~µ×¶‹_h!w,HÍ3u‹æ]½ÖQ –­¯êC ž±¶H˜\A„KŸ –ÏöaCüVb!YU©9@žzR†f…k¥p W@êo\WXdÁ ÈÐö`;€–ÛÇš$h&Û7 þE)ñbNYÏK%Íh_(Ô¸‡´¢¹[,P[fÄ53r3ã÷H0ôNFéÊíÀ4wkîøl¬cnü\u=½;ÿTu¼í lpS*Ú€Cò|¶°oe£}D¿« ûÍ…CþJõ¥0HwÚüyô½$é'Ž*¤KB¶CÔÔ˃úv—e] ÇX±Ñ!D¾‰Ùo¦l à]Ð6Ú®QÃÄB†ØB´GA»Ö fÀt‘± U f0P­ÂÀüMó$QD²AÕ²%æX0 ¸k ÒÆÂïÚÄäx:"WDHl¦UóílŽ3X(lþ( ],8Š:Äæäm¡vŸøq3jŽ™¦ºV5'HHù9¯j 0äÉÊ0¯Ö&ã`aÙÙ©6Ç×誵u^¤Aqzqµ·¶Pw®$Î!ûªwýFÅLªÞ \w²X‡æ‘°«‹‰Uq¸"sSå°5§‘ÎN'5ÐиÍçÍ«Am ƒ¹sÜvi™²Þj 1Rð ÛaÓ5²ƒYxÁÙ›µv&P;“LÞíƒt¼qgõEñàI‰ª û‰µLlJA¨, « ÌŠ’k•:ÍQq‚e³úú¡/Õ¤Hâ´õ½yÕ?Á}>¡ÏiŒ4쓪«¦ŽxÜxãDõ‰¤mW]u{챰馛Â{ÞóØxã‰m´Q éAR…•W^™«®º*œ}ÖY´¯gŸ}–èD‡>!;áî(J°uaS<™›weë'£–QuZ*æ*˜hcóvÊÏð¸ÁFuè”O•U¡V€šñI‡‰S•~ “›‹/±L™2™„Eës2ŠÜsÏ=¤9>ö±Á~ûíGí‘éy®¸â bTGºd7D&þ¾>¢ïAÂäÏÍo–é’³jZpC³¸ê¤H†Ðüó:³I°»`óàŸ­kZc›Ç9"­Œ|…ÔˆFša"kº3k(«™*4sïU_`~Ž®ÜÍ1w«ú&x¬1nµcµ#áè4hÒÌG!¹õÖ[I£àù¢p`‹äÖ•ó¸îºëà¸ãç†æz@N=õT8à€ýÇ€tjQs¡²¶9@·­0N]ŠH”XUzDz7U[Hb#5òK•ïINõâ3¨{ý”è”´ öç *ôX-Vq‹^‰9 ‰¢¯¾újŠ­¶ÚŠhwî½÷Þ ÈzxöÙg–@ ƒ5Ç™gžI¼¸ûì³|õ+_G}ÞûÞ÷R¯d]ßrË-¡¿¿h5ÑÄ5Û „tãCÅmlšÅæTÑ,S¶‰ieÛHãKÛ¡Œ ’ÀWWxMÈ Ž==mš>·ü¢ç¶€L‘¤!f9)´ ¨#~¨;É+.ŸË.¹$• ´O ô%g#ÈÆŒ]Us¸Â«j¾~œ·†- ú½ÙŒqíL®ö;´dYï% ‰õ{ô5ÆðܾÐÄuÛè¹j(¬ÓXªnUqžT`Wæ@Zu‚1a’›ä –ùQT"jsëyÚ‡I&©[xÑì šìU€LëI¢‰p!Á®O¶J¹Z¥YUŽa Y#QB«}5 J>é ±ú@`¬¹ èÖ•÷*óæ‹:F¿q^W¸ÐÉå'‚ò T5a ôG¡†1Î:!šª”_yPÔ4Ös”€¼hÉHh;.ÉÆµÍ'·ì«X{ªêJoãà{L¨:ÍQ«BÍiëym¾3Í«èÆ­ÑdOûúœ¸÷) žPîT’jßDÓJ’ Tœ¶Á¬_w>NIÝÊ1´‹…ŽÝ4ÔGÁϨKT1bâ8°±†hÖš ±0y΋0±:j§BuêânòO ÛSíR‚¤=žÀÍk“ë3jÏ\#"j ®Pe%`9ü]˜_ ‰PG«Ó¡p…841± ¸pë£ä‰Ü©É@WgÁ<\øg¹çÎl˜<¦’d†bDæ†^+e˜èMQóÌÌÅf7`›Õî—ÂQŽ¡pÛ.+±ÀYÛ˜µ[W2ÛÔýnŠ5â4Á}x=ŸÎÔª¼™€íw<ÁŸ¦¦5*U¾3:]±‡Mæ×}hÐú&6¶Œs”c$»­àÍ7ˆãÞl‚B-‡²õñb0° 9ì<¨@?dN8*/ 8­íÏÔÜW@Í«€Yb°(ÚPîUŠEOD¤àL©¾$ª¾µÄ¾®¡4«Ê1b²ÓšËJÙfÄõ¶yÛåzA,AiçÔ©ÉMxg:ìígçûvX¦QñÀ[s~K%­@ÆMo¼€a Ý÷ïP%‘t9F·4ayoå‘¶©ƒ#1KISlÀë R]›ô¥z‚?äÅíO©žƒd€RÙ}Q‘¾©„Jf±»ÆÎû+ý`Rg^Õ:#’.]¹åè‘Fi¦2š ‰­ótÕ±›4©±M }艢®± *nrWæÏq“·æ÷¼Y æÏ÷ÍÌl”IñoàQûã»@é’+·Cšè¶[¡€–‘ðfà¾Pý O‘G·¨qúÜÄ®hŸŠ‚Ì";‡L«šžU̶Å̤ͪ¾†z”çÍ%®øH´'£V%©[9z‰ÃaÐ>~¶äØA„0hç”TµùPAOlæôy£Rgbù–fÖ¦>×Ëi›bóÌŒDÓXŸöc­§Õ qHF…¥YÕd A’(`¹« ,ZB&’¿üå/¥¬t¤]ìàßnKš6̬/@¯÷ZQ®¯ÃHÜß>;—þ‡'¬îc ž„:ÖˆkšÒÞ”B"iê'Hi&šÀ Æÿ*%ãaó1eʘ6m\~ùåá½'žx‚RÙcb\‰¾úÕ¯ÂJ+¯\x¬=VYeJu¸ùPÃü| ‰RCLÛ$.Ø$PØŒáÄÆ“Ôp2“°+ %0Ž„Ñ 7¬1ý 4‰4EÆM2=ÖP„5Px|³M[PQ¥YUÐX˜tÐAèn»íFÕ€HɳÙf›Qqj,{E5|â‰'ÂÑ_ûZøþyçŸỎHþ&Ü­XLS$xSÝÚ+0ŠçžÌkÛ»}ÙL­Ö›´L‘r&“ršb€iÜ5²Îyà F?èþ  ÈF„á9Ö´_ö-×›#eOÄZb@—AÀfãä“O†_þò—ø! h<ЬÚyçá¼óΣ‹Œ…P“&N Ÿãk|ÉÚÝ©±) vˆû·mv3èç¶5±u‰Mj:,y¥0í£J¶0Ã7Ò>JÉ0aŠê4<+bNkª3÷é%ŠÁxIÚ0Ž;î8zÈ@œñàƒR™ìÈÐ{ŽQªÒh›¹Ûム´'šÍ!ßP‹ó }Qñ®Îÿÿì]Mˆ$Õš½÷FDfUõŸ?óf£nüÙ¸QAÑQ"£‹Aó6Š«'(¾¥ý6ºFeTÆ•8ðDGÞ4‚¢ƒ‚:c눈bÛmwUeFÜ;÷œïFfDdDdd½¬®¬î¸’VUfDdvÕ=ñ}çû9ŸŠÖ/ðĈT(8ˆÌ˜ §‡|¾3¡W½ÇÜ•E©[P:„[UÇ'.½ôÒévõçÿö·¯~÷»§f®åž%è–¹•—â6Íû'¸y¦£©*d*…£Á7Pigܶ™õÝó ½=b©H2”¶YÂÀÈ8Yg„¯ KQxGÚ©£Å®ðàƒ’wTˆõ„üù»¤BòÇþ­ç&“v_ÿø× çÈÁݪ•†["‚\·–§¦`}S «ä ]kØ öCæ“Õ·ž”íò.”[v÷i¬E~?³:!ãy¤­£øÈނù³×zà 7P!ÏüQ=üðÖ>zô¨ºí¶Û&›ýÀ”ÞTô¨66Ö8GÙ¿pËܘKaÌ ~ж.×Wqn×­)‡Ï¶"5µ™ˆÿ:Âk&X„L©Ü3. R³&‹©¿ˆXÁèe×Kó”¢JØÔ]t‘:räõ§p÷G(.¢Tx Ç;ÝØ+ŒŽ‘¨®Ú®f;·³Oéù÷ä÷3 ÒºUCÿ¾—°%¨³J†ÞµòÞë¥,“‚™óD¨ªÃ…¢ »†¦U¤{ú„üñÇW—_~¹zä‘G¨šÞ¯®ƒúìæâT«–ù8µÏ“s Âʪ«ˆÔÈ»TcïÎ"ÇÁæ¦ñˆ¼ûžÕ¹ÈŒÛ,TåêPse¦?÷à˜®Ÿ~ú‰\áöÛo'Àn¹å†g’o¼‘ã{ì1ªæîH;ä@ñ€uq.Ýn»8Ëf-]C;IµŸoA6÷Íýý^m{`ŒýÆ{"žy`lo\¬¶]¤\2&¸^WˆÖ›È:p¨&¸&¢ã­HÖ×V•ÊF hˆá4wß}wÉu@0Žàž{îQ/¿ü2î¦:A_âm˜Ë±ÛƒwÜ.ß¼Ñ]+év ¼ŸSº ‹Uÿ~n^„+çÕˆN7f¨¶âCj¬c–¯pŠ ½£ jh$9 ihX‰Ž´ˆºEÔx3ÞCëÆ9öTÔ ¢Îû-—s¸Å²kõÉ6Wfr…QEà`ÒtTi+‹µ)g'¢nHªMÅÝlÃsr wù­¼ø^®ª2âÊD¦BÈÿë_žSqø€Š= FƒCêô…źªlã Ì'Gcà2åþ±ï¢^•aÁ‰£ø4TÙS-`¹î¯ïëEÝúµ,«û4Á’õ¨™VÞ|lŒâyŠeê ޤcC¥ëCºTèÍ@"r@KQÖ.¢·8Q*¡[€ ~ßCÖginîô˶ùtž~íÊ“6 z¹šs‹ p ×uun[×¶u=ð?a]ÔæpM¥‰·(O¬QÈL ?ï*·6Õhk[ nÐ[K ý)ê“è1êßU”öò~e¾ãÚ€0ñòê,Pñ¨‚Õ˜$`­yp¸dƒ½àöÌI¦l¨¾…añ_³±X‘ÓgØ&‹êÝmÖ\A[7aé»ãÈ‚QŽ~µß½»mú‚5hš¸ìš&»Êóew©x%×èº!Z5T#ÔEeZÅvÛ[‹3*;p!G p 3:þFd‡‚ê¡Aw”’ÿŒ³-ÃÊDÞb$ž¤Û´ÓJI}Îl·Ý%ã qóÅ߯·¨nê*‡hæ"®”®5BU>>…u°2ùn¨¦;7RöÄ562åIÇ#N‰E²j%Ù¦ÿy‰B­ 9˦JÞz ½¨Ûù¥jˆTU_m«urõím!ݪEª=¯E¤D•¬“Rõ=¤bÑp›èmÿýÖiïJ$ZÅc¼+5úmÈ+Ðÿ‘"œ»®fþ|Ï[ÆÛýðšÕÂnc‡¢õuÝÁVbïJ.•*uU!î-a®ðþLò9NkŠÚ&·ÐZ„£·Íh!ü¡ÈAQŽ'ƒº›$&Ò0Ç|<ò<$VªAp>£ƒÕ(ýìšOû‰Èv•Ÿ4‚ªyæÓÔ¼•Á36”‹–9N)zÕßR‘$Bž)#: ·iö–;,ætÀºŒÑóᓎ·¦ŠsV¯[µBC»_›«K% í2 ºrN5úTµ$ºåzzª3U,Èï„ñÕt£P‚ËDŸ"nŠî”ưš8hæz dZØä#˜Q{…cP{Õ[Ž\&×8®Õ¢¸™È“ª±$å(Öì¤ópŽÖ«†{xDo®”å?S:UÜô©7 Ù8„xy¾·"q(ó±!S/™{\±=´çNDêü°;{Ÿ&«Q¸ž®£8ôlzœ+M4×3÷pIr›0jPj¦œEÍUJw+㜎 äæ-K:ò„‰B#dÈ lÆ Ù¾ðð<†[àÕšb¿Vâ­+÷}]˜äêæp )×®¾£Pj¢@=ûy2ë!³Ü,&ôn“1‰XŒ<óï°–0;NUˆ¶ACcœxˆÃ51LSD¬´Hˆöœ£¼Ð"ûçt=ú 4œµF·Êo¡§_t¾‚M© COž<çJ߇‡ªiG $T5´šé?å’¡Ê<0l‚0n"õUPDÔ"îf#¾ÉŒò U»6í;«ëĉì×xõÕW¹¹Qš~Ùe—±Ñ)àg<Ÿ/ô}<ûìïÕéÓ§JD£Ô/¿üÂó4('¾óÎ;«±kÝ/¡»]Ò•€Pg]ª\0è’kUš0®»õ­dlv‚"®¦‘I¡Eå$:• üæÇ4;bbÓt¥´te·= 6½%ÉÈO ºà2׃£¸Ð‹ñè£rC¿ÿþû| NŸþ¹úꫯÔgŸ}6é#Ïú: ¨0®©âDáäG}¤¾þúë•´ _B·«K–ÁÍåuy]ãâ©Yë¡ ÖC˃#7XY‘Lƒ=@ó–œ#•×ו>°®ÔÚóB¾3¡?Ú»d!ä¡×ÃöIÀ™u×]w©S§NMÜ«?üP]wÝu“×ñT÷'©;ÇíôÒº«jà ³*Õ”é.ºbÒSÒTÊ^‰¦1„›ˆ~•i„lUS4}‰ö[9(5XWÖÿ}M ½2a\çØ¢{-hZõ–£ô Æã`«,¢i×_=ïþŸ~ú)rë­·ÖžwæÌºVÊíñ3²Ø‡˜³éÜž`k!_«é=‹–GÏZ”¦’@•»_uïœúÄ£0• bn$zL˜½x•‰EeĈšìZ¢b룣AçHêyc9^|ñEÏžå/îùçŸçs|ðA©¿´«®ºŠ.S²¨p¹ŠÖ+WcGÿwþÍ®c7Å—‚Rt©hEÊ…‰e`¸òsºø»Ñ39¬s9ØYHZ-A'X“4#ï0 "T'6A”Uº­¬8z9Å„Y€%1$÷ÊîB^l„ÚíÔE¾üòKuóÍ7OÞÿ¦›n¢ ɽ÷Þ«Þ{ï=rl|7öâçŸVo¾ù¦úöÛoÕ7ß|CŸûî»O?~œÏáœuïëÇ,ËVÙì=Úɷ®EMÑjTÒAøC7ŒÙlÉ Û0Ü[X ücGŸ?i´µåy÷ûÉ¢QèépNô¤¡°>ô˜Íp]%Uì½[Õa]yå•KpÇw¨O>ùD½öÚk´p¡^ýuõñÇ7ž «ÝÍÍÍ¥cÙ&ÁíüÔèšï« ÉA2 ß6Õ‰Oú9 ª¡]ÍÌ7*lShRiNdÖ[0žp àh3•œɘýâ #VÌ»çí ÃD¦> =P†k=8ZÃƒÞ Ã2 ¸ó?ôÐC ÷î¤%xO—^Ê!3aØb¨µ Te (Ýú ¦–G¢_õa]W´:ðý¡:þR×´ µp¡‹kQO ‘×_±˜ f#¥øV*{=P8Ž`ôà¨sãrB ™ž/¾ø‚®ô«ž|òIõ'žx‚ùŒ³·yõ.¼‡^2úôLŽ£9d[„n¶TÅëi=SRR<†Õ©ODŸÀ–ÙÈ9ŽÆL4(‚ŒÓëÊø†i&sº×,{OýèH9o9M\¸B/¼ð‚ºæšk8‡ãÚk¯%±Æëˆd]}õÕê»ï¾S—\r ¡Ï<ó Å)Ñ¢[¶ÝÑÝÞÃ-úrµèÏ;T{b¹Oc2Ö)U_ZÒä>–‹'oV!ä6<®Áf{,ž0V¸5Y&¤†pÙ3ò xÕ«Y±k³¾Ÿ£´Þ~ûmõý÷ßÓRàë+¯¼¢žzê)õÃ?¨-Oè(í˜êtÿý÷säÙK/½Ôêf;vŒë<Ûcn ÷2çoÌ“ÒéŒ:@è¡6]ô·\; *°˜×'"É;K÷ V„â5è+w¢kuò¦#ÑËŠ82“#€…4JU2ŒU„R“t»Ûo°‹¨Ûh4úïüyê¢Fðõñ€¨ˆïÙŽŒíΚîtx~Ÿ¸ÛyoøLÏ“›ù«ÿÜDTmú}~Œ›wsSQ·à¢ð8kë_wS17gËBn¥k石 åTý‡üñŸÿIýåáÃ~ÃsP2ñ‰5¢ w Yòuÿ Täãy…qÁ]óü$õnÖÚú… ô·ýÝý¨[á.°eô]Œ‡^Xþ¿|Õö÷èjšŽ+WÙÖWú¸„›Z›™{EÅx9Wy!g‚³ÔI¹”¡`4 ­çš"ìŽúTN8¸eއ®nžèDØ··üÇé‡×¬t€i.@Ô¢-¹eTé&ïf!ï­#Òº”È«GA%ÒUz¦ÀKJ×*€lå j´(‘pšìh¬ô0d¾E‰ ’~†ÝI ôáÚYOÈ÷7@Tý>Ùõ7mÝÜ5D{Ò§!àt5;­|ž¹êü<©Ñ ‡!§a4Ç ÄQÿ$ì ¡ZšX¬· e'kžÄ›5÷ü16¦3¯;ë¡Ü¾Cp^ÀUÿyAY½ƒsõ¢Àź¨RT¡êV×tVò$uÕlÍ8¨ºcYM…~ð±ÿ=j¬¢1{5´ÌH£º¡Bêfýó ÆMÕvÇ’¸ÞrœmÑùîívÀA ¾º«½T{8·í³Mü4Õã]ß•ƒVºàÒLÌá¬0œ+™Ë‚ì *"ø9v,1œ0+ œ÷g¦óÈQ²Žm44œ@Ë6ðº0ÃsµBœC~aùÚí«i#Ü΢vâb麬Ãý»Z,Xó›"À¥çkÊ?p×ðu•$~Ž¢»ÿÐIž)†æÀØ‘ßèàëolHÔ ¥"ø·%1KMŒG†N´Šýó êš\eÅ9Çü!÷ç¸Y 9Hõ¨#í­I¾9§%E2¿¸ªTúwéÂóÞ;ŠÖ×Už(ñ,Èi2øMÌ”ëÖb’¡ùŒø‚œ;ê20Ò•¨Áj€#·Eëï<Èæ"ýõ׊¾Ï<ÍXÙÈÖ¬PCw“„íòÝñÿUÃuO¨ý |c¿Ë# 4<­sª^ãØ¦XÎ!–ËbÜ"UøãbÖ[iª“¬¤åÈó ÈF£Ð A´°ö«_UPýßñ¯Õÿ|ò±ZÃÔ&$õج$Óa“dÈf'ä8” j¬BX¼!šI†\ ¦c¡¢™ä»÷U®Qýó¾Ña‡Y਌E$Á†FWÌ VqÎõ»g…Ö›ÿöŠºàð!†> 6o„R'¿1!„`änl5sZB©ÌšÛ’$ e¢˜i²µ6¨ÃÂ5½ãî‘OÿšÉó°"Äpþ¤ Â0kG¢KåꓬP´*ßæî(ãPËþ R-5Ù+0œïà[4Ü~Á¡êÂ#‡ø75a`e^”Î{] :”?o¤ÒdLA‹ dTîéØQŒz*C>~ŒÈrˆHckÇÑ©29ç7AÊ Ë 7YȺ0w\‡ù€jUFT¹ñlÂAœ ¯Q¶±ŒÞrìeÑÜKß¶ãŒ#r(£ão‹›Ÿ ®"²uæÙ©Èv"‰Ç’ÇY~1•F<Øüf×cžL¨6‚d  P’î7üГñ4Õ{Ó˜ö ‚&®–Y(7qÔ¯Êh‰–ŽeD–ª³ |-Zy.ÕÙEo9³º<ïôôöu˜æŠ»ø÷kLTJ8B$9ÿí&a Å ($Ì0ª, ‘ÄšûC °àÚþ:ÈyH˜Ö˜´|m 󯕏oš…ð-<,Ç:--q`æ²éÕÊØÜjäÏ÷–c-üÙb•sŠ˜>?þ¦ ü)’cFŠD=ME$"!z®˜³2{#ü°‘Ió5Dœ „ïB6—qŒ³ËU>'ƒlTäB`ÚZcò"HÝyÿÄgE*çÅï{PìSKc 7+eqpÇ×ò½M’æ!Të7tê9‡Q6JI ãaBÑ™å‡mmU‚gApÀ"aÞÜ6¥Ÿ#2<*ˆGkv â½É+Ðü2òÓ”Jè YÅ$`‘˜ç„+çóHxŽÕ\±7†78ƒ€¿1yoë° åc !@Aê!tÇ6Œ¤&B_\#¸\Læî‘âm”Ô¡C+—ò;Zòyñ!_·¢º’¹‘È%üLVXúRÀ±t•˜*@rPÔ•˜ô`Ø?~•æC\«(€%ŠDÌÙ„³Öà˜zDÀØ,–o¦Y1Äe‚;¥ÃØÙ‚&ÔuáÚls¥‚lQºppcDHšµXAF4ð1"º¸¯æîí=©á¨†vë\¯Ã~í6Ž5¢6h&we=Q:çT%ÿ|tn£aΊ‘Ü8€Dn6A#×»[ŒÒ²jÐ ±æBrBÄáB¾ãRv.T¢ÉCôöéî÷û¸ÆR¬@úµ ‡‘`Ø­’ïÜ…¸[!”Š^ ³çí¬Ê»Yœ¹Aîz9Œ ÒPK—rCÖâNñh$»g,dÌ8œE¢N$ß ò4(:4'ÙI¿ˆâ œ×!NšX¹¶=îÚܪêIv·©‹‚¢·,«µ¨%¥ÃU²aóN·“Vyù<\)4=à“h’΢Å5ÓAúS‡êZ–©;‘øŒCx‘'ȄˀLúhíÔ­£õJ¥8ß ©0»ÆÎ3mnÕä$kí¯ÞLÜí»N×Mß[–U³‘Œ Ú‡EMɲÜÏ çl¡ (aø~(aYÎó‹’hÒ'S‘Ú ‡¨ùštè D'“†U.8‡•¨–dã-gq˜ÐHåCÑë=3Ïjt±”Ì:uêÔ±#GŽÜy¶Ms¿ö 8Ìt¸ŒV®!ɘk=ÕÁE’Ïå 8Ü.r—ƒMHwH=­C±a0ö °Vì‘·ÀG¦ÂÏ6÷¿þºù'5ÕŠk´¦Åš€ã7ÞxÎ[“ý6èW­[…»2„ÕÔ˜›Pi3qmrþ!9­Lòì¨,jcB‚ÏDA¨ADP0˜Á£Šôtšl”†Ëý[§&–†%Hù·’=gÍ–Ê£f” =ù=׎H¢ÂÝZ7=Þzë­_|ñ»W\qÅo†Ãáoü9ƒ~Kô+_}ðŸjccƒåä,/FyÜ奄<”‚ð9 ¹"ÿïX­Ë+e!©g'2RÒ½Çá—Èg„ÛxL*5™ÿÇ>ŽP>Â|KpëŒÈ¼áÛÓ'Oþÿã»ÿðÜóÿøCWe· Áà Lxäʇqx$…¯EeÄüø™á~õkbϧ‚qFþ5­Ä6CÀa*‰+Àˆ*ÀèÁѯU‡«GVEZÅŒõ¨G‰Z,†QËQ>êW¿–Šâ÷¶Å‚dM£U÷ªÎŠ˜Ê£Îjôàèת€£ê^ÙŠ•È**ò 8Te“›+ÒŠÞ¥êת»VM ±j6Ù]r«gæVé7«î{Õƒ£_+Ž*A¯ûÞÕ_G M@Ñ5àèW¿VÙÍrsªæë 8š¢Ñs~íîQÕŒ&p´mú&kÑ£_« &¸–ãÁѶé{ ôë\LÓsÀ¡zpôëGãúÙ#D7ÇÐIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/addtolist.png000664 000000 000000 00000101172 13703317554 027305 0ustar00rootroot000000 000000 ‰PNG  IHDRɾ71¬tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp ++¢@~êIDATxÚìxÕׇߙÝMo$Ð{ï½÷*JWD¤Š4AštAª€‚ˆ‚" €€Ò{o¡—ГÒ{vwæ›ÝM !àç_ŠÜ÷yæÙdwfvæÎÝ{~çÜ{Ï•$Iâoò·@ð\QÿÎÎúÿ‡áb@ ‚ÿ@Ð?ƒÈèoI@ ^J#¯&Ûe5ƒ÷2úL„@F¯R&¢@@ ^œP3x}¡ð˜x’xÒ&D€@ /(PŸ°¥iþ B ý&?áïô@ Ï_¤ÊþÎHdHmüÓoOŠ@ x1b@M'R6R½’Yd }ßj! ³¼æ¹©¨SñZdƒC=$ÉU”½@ /£4P£cÂÞ¸Ë'ÜžÖòj*¯¤²ójê¿¥ä<Ò¢! Ë?zK1çRõ·k"À]”²@ ¯„(ˆŒ½°§É­©o^Ñþ3'o)Ñ‚4‘9ƒÃÓw è‹TûL@ ^!4»mµßÉ~Òvõ§!£1é»t²c]Qª@ ¼Zhö»~²-O H±óÇ ÈOi» Ä@ ^Åè€sºÈ@†ƒÿÓO„ º Di @ðÊ’Y7UdH- @ ¼š<5-À“ 1 ÁW ¤áII‡@$zýPUQ‚I4%Á‹úõ‘ñ€'Šȸ«àå”:N:¦W„¯š¹ýŒvLv”y7'üu]!<£tµ³Ãù•ˆg8_™‚zê9¥Êä«°Ã(Ñ$‹„’|M²¢°é’Â]{‰*î’m§öá•Gßa¹®æî*©Ö‰ OjL߬¬Ç纑ea–û—iᦲ9³c„¼lbSˆàED¤g H™‚—wG og cŠáÕ®6*N%JÉx/ݽÍlºžñçzƒ ¨ô°™W¯ì:úä–ÒŽ¢Ôµ_O™¹¤}ç¥Û&®I2ýëÊÚoâŒö½Fm—»¡:¦V…™Ì<ЮÉr}Ž>zfSX-Ó'¯Â¤ã*ñ¨x8H¸æÐó±£™ÕfØñ æìzÚ¸kBCk<ËJf:ŸT¹¨ÒUW)©¤§Ú=#GBá¾ñŸ!ÏSˆh@ð#F2ë&øÇœ{Ïž2?'þ»Ž†fHÛÓóPþ¨ì¾`æ`‚­¡©VDGU‡GÇxeÓnÑ,Ó³¬ü°MR4Ãûó5ͦ’Ë[ÂŽÊkE#©økgôÐ,íð;¯éÉ#ÙÄ€·&:yËTp‘È^ZO•03+âdzç•)ì=ÊJÄG™™{Ýöm¡a ÷Ýd|µk õ10ÝMá» hGe§¯jÒ©—,C;%Ž\ÕÄ…å ƒŽ/+jÂ'¯ž/}6ÝÖö¯­Gïo樫ž9%Í|à«`úÛB@}ÂÇBþ‡­Ðc?UTK]‚@ xQ'‰Ws¬ÂBÍK÷‚ýª’_"ò¸‰ýw[/3¬„ã}•­·’§NæÓÊž~š¡ÖÊæœ°ä‰õñ¶ãó•i’MGƒ3§<ô|å¦r2Õùƒî™™¤2ÐCæàY'Ì–¦ÎÌŒÈîßœ1s?9Fc°`/ó¾‡v;p'ÔÌï¹Áß^G©$•Óvyì L{[„5Y4ù³€‹ö”Ü,ÑEÛ7ÈÌ7%ÚhÄpÝÌzW‰êÞê³ûöª-ç„j2¢$Æj¯I¨Š9ƒh@ð?W¶Y‡¤·C¶wÖ^ É)P„ ^$O/U7AÙ:j:¥^fI&öÇ’•n߈…_C \%0Jå¦fïòÕ¼ü[fNjF:R{ï¾U ¨œ —ˆÓþtÍ¡£•\ª` \‚JL‚Â>í˃̀*»enø1e—6n-Êè(dù; j•ÑÓ+Žj•?o*FÂåôÚnš€¸ªyñ–ý’ŽÅêÈ¡•üD…ßÃu|]]²v ìTHÈ®gRv…ía*’‹ÌRû5ñrC%Q»¶|yõôu†âšÐÓãm/áýŒþd! $Æá#Ç2¬ž'Us9ÕI/~ ‚çÆƒ8ǘq8”û‰.š(p‚@ ø÷£Ò?ÿSþi·AfØh†/e`žä R/;œ V VÓ: IñªÕöývÜ<· 6ü¤€Ê÷{Íä­¦£´vç{41ѯ†ŽÄÓF´rê^BfçQ#¥ô(§M¬‰×Œoq‘A&–g30'«BM`ÔNe\7ú&çe‰úeõT~`bhˆDÍ[ÿå”™S ®Ë9«Õ³ÙÆk"¢¦&2²F›™vÄÌðj2- I˜5#¯OÙhÐþN 4³îºÍówÉ·L,²D²H®˜øÍUÏ|ïgPlÉ^¿%"à-Çð{‡<¸Ù‹Y£‚çE|¾YÄ…ÚyhýË]BL!^òÈÀs5öOã~„bóæ“‘4ÞAÇÀJÏ™ø1Ð2 /4CÝ¡ª›FvkÍX÷-ª£±æÅ®™`Ò¯²ÓO¡Sn 4#¬–ԓǬb9¨t“¢‰‰òNŸÞ;›Ž~eu¸𨤓q 61,LÇðÚÝ×¼ÿ;fÎD?Ú?.D!)/|§yû³rÃxÛ¸…·µ÷}$*$?7‰|Yu u…ÈMh=k.=CÝ¡°»„N-ù, ¢ž-"`ÁÍð^B^8–:8¼†CwG¢wõ´ÕQ!‚W_ ¼ͳwÞ*k`}1…šG¿9"UØ\kXV2Ð×Kâ¸f|-“ nÞTpxCÇýƒFfÜÔß~綉/îH¼§Z墉_5#§¸LÃ\Í >£5^tÖ1·-Æ:»Ž%u”6+|ÚȶH7o™©Ú1{O™™¸O¡Hn™öåôä÷5±õáEÃM x¥nó4£^Pû^£&6¤$Û[þWtõ‹Ž ù%¢Î˜øà¶-âÓV,† ¶èųDlªÖ1–®àe JN­N† * ’, A 1ðÿçÁ3Svš)œWÏðZvä?œÄ×aZ{¢Ø·«è.™ùüšŽ¦)¶8ÞÌâk2#òHx†¨„fÐánï"3¬„ÄÍØ–Ì!±rŸ‰ƒá QqËØ&FÄ«ì=cdR¸Ö¨ÕñQn[;v6Q;¶‘žâAFÞ9«‰‚Û¶s:{&¿j1mÏU)Á}íENTÙÿ@¥¢§- a½Ní5^Ûd“v^í^:WÔ“M±}GJd ¯Év¼1ÌÌüÛ*ϨTm3TKxÃ$Æ^²9ë­u2¥ŽJB¯žø·»þ.~wL|ävɱLI=mLô>£à¬yðo£°æ©wÎ/yËÌÊ\z¾­®kÍ‹?—ê6,Óúº–‘uÀDPA™#š×ÿM˜Í¨ž»Õ“÷KŒTØ‘ü÷¡+&%ÿmñäçy+|~1ƒd@Z[W¿€Ä_—Ji¯Y=d*êv@’N¢ QaæÇºjRùñŒ9yúà3FRfX…€m³x`ÁË„µN¦ÔÕ” €ˆ¯Odà‹ Éš00mB ­]I޲sö¬‘.ÉíJYíNk—7 û™˜wÄÈm‹U 0TTϸ&2›Y‘œ0R3ò_iÆý¸v¢|Úù ròÂÏšwÞ°€Žª•óO¼&‰·+È\ÑÄ©tÿ- ‘,ÛæÓ&J•1Ð%ÂD™ÑÕô¸'¨Tò± ŽTÉSNÇ:ÍðŸ2jßELjÒ2Î÷Mi‚å¾õÒÓ…@š¿S¢ÏåG·ú“¿y|R UPÑ„øsçÖuü®'R´};*º¥¾)#F£ƒ!Õ[‰w8åk¦H•¸ [ñ_Q¶ÍbüS«!‚×C üã6$Iá—kžÉ¼º”ünšè{EáL|Zƒy抑÷ü4£k~ôÞ–TV<"ØÌoæäóh¯:½ÊoGŽ*O6ÂÛOšˆ{ü#SŒÂaÙvEçω-'Áàíf¼4Ë–ÃÎ’ªXÅ2íÿVrFAS¬Â–K WCSG T|o˜Ñ?CÖÁ‡ „,QUy1¹Ì×ÙøíNZ7­‚˱9 œ{ ÕÅîä¬CcÞ­“gçÂ8¤{r›‡ðÎÚš,YܑɂÀx~ƒ'{±ü·~¸ŠÅµÿ#b ¹‹@$ ^¯ôrÕ¨²íŽúÔÁôâ"Ó ÔŽ«f|ŸŸˆ SØ™ÊÐ_2³%ìI}ó6ÂãԇщÔÄ?0óÓýG%µYV9ªpN3ú"Tb •STbÒÙðkþ —ŒÏHù¦§düwÑ¡wÐ[#8ÎUßãͬ:ª ýšÙ”#ã>ô©ÆæÃ1VA”:ìãÑt(Ý”ÙôŸsЏä°Oð_’J—%·ÿ!- <ìÆJ#`Öe@ "‚ÿ¹öüˆáÄŠÙl¾ÀÑ›w ™<°ûÑ …;mÇ-£j;m—ØãÌz7¿ƒO²0ßù“yËŽ­y‰ªG"¶ÔØ\ämØ÷½çqp=Åò%—l·dVÈÝ o3ˆçûߨ¤ˆ…R‚ç$Ù†ïJغÞS6CòfoÙJ­Š÷Eõjý4- ¬¢ *&Œ¡\Ræ¹5ìÆøX“ŽóE}4_ÜžË×s>>š[§.v“« ÙÈ›¯ µÊfCVsÓlÐT± çî½0ŽÎèÌ–«˜XÏ`M™,ÅïfDë¥äœ<“wó™9>çCvWZÄçÔ¦D6*xU):ë¯\H²æ›X¦JrªY’è:þ!Þw,Œ-nٌɛ9Õ¦ŠÈ€àßÔš]0èÐëô8:á­¡ciõ`/;ÁT ¹oœ)F›}(û°›À“<ù]¹å*?ô%=÷6ýÂeG…,Ne¨Z%žk²ÅjÔB@ þ!B ¼>á‚öÍæèpÂïíãÛ¯ Ò¥a«'üˆÔs Ó¥éô͜«ò~ʽߋN-jß5e(‹‰»V°ìz$'7óÖÒ¹¬)»’!ûN“ØXåÜbT*!ªð®ŽŠ„ÁsGä¤ü‹mûþÛš}àªKº7¿Ï÷‹÷p;ֽ߯|³õ7·/bùÑì#ïqëÒI®Å=2 ‰‰öTþ`,ãÇ~D½ì\r¥pƒT¼°‘{¶r¤HSêz£!B ^^$/ªöžÏ/+QÍU娆 –}×—Ê^eh?b Ÿ¶+I®º½5ª7µ³ç¤ñi’’ˆ@à^ˆ9³§«¢vUèÜô:c†î£R—·ðZ@ þ1"Æ*ø7ÕYòæc@š÷ˆóå×Ù_qÀï*Ë™mÔqÊßLëԇƞâx@IÚå|<€}L f çwãÎ@D¯¢@]ÊÑ~ðPµ(JÎZÝ<¤õÒ$Pð_¿’ 5ÛP=9‘mF¤‰€?ÇÐc‘3#fTfKßOÙxÇ(Šô¿€È' ˆÈ€à¿‹~ƒ3Np=ÑGk–Y#I¾¬›7‡ã ^”4mdþÜXN˜i™8ÿ-C—ØÑûçê˜÷O¦Õ¸ÜŠ)D³/Ú1ëXn†}?›÷Šèià0ž^ï÷"|Ùº±…-B ^J‡/ò+¿½Hé¾£)f©mfª½ó!%úµ¦HJ0@à˜÷lA»œuòÍ{TÍ¥íàÑ“¯¾kÏÕe£Y©ëŠÍí)•¼~A®æSXWé>ælBˆhà?‡˜Qòœ‹[$ú6¢é“™­‰{žoÒ!àéX“yæDÒY’é¬ÕU’Sz0EÒ!a¥Äóÿ§ˆ¤CàÕ°ê‹^CCðrÖ ! žÏ$,K ^¥vU}l3›ÍÖÍß_„Ô/ß4+—=:κY‚•rrd@ÿk2}_Ô‰¿üþÿH Á¿)\“’’HLLÄd2¡(ŠU X—5Ö~Ñø¿Þ¢À"íììpqqÁ`0Að"#‚ÿoo … x”€ed ãò$‰··7ŽŽŽÖÆ_ HÁÑ´۰0\]]qrr‚@ˆÁÿŠ«±N¢/TX_LI$z'’/_>!b©ààà@pp°5: "ÿ{DÒ!Á¿Ž³‹„Ïÿ£¦É®:F—“ÿÇ)‡%Šf—Éñ ×ãá¹Z.˜OGS—tÇxÉTwÏüéBÀ¶™ã£)X° ‚§·²Œ»»;QQQÉÕ(yÆ”@D¯ŠøÔ`¢Ïû|zzù€Ù SÍUåd¨jã¢Ó þîs&vÆ¥2Û‰ŠYáY†<–+a —˜´•Õ^ýï«h§F/«l8®7!¥E‘hSQÇ• rêy;‹v-ê£ÏЏCÀ3˯ÀÀZ w™¹ñ„öƬ—ZS"h—‰³&ízd†×Ðq,‰#±â¹gxؘ›’ððÈ&ÊEðLØÛÛžf\‰ˆ1 xE8pʈWu==s(L¾ebÌ-pÉg`™ Ç’«•ƒ.á¤yÝÚߥ³iž¼övx¤‚”KO)yM•¸ûf¦\Wñ½däcí¢% L‹1Óÿ¤BLªSz{ë(Ÿdf[¤J’Fmó»mæ ½LYMt(Ú›ïJŒ®ߟWtÕ‘M!™8·¯›˜æe _~‰~סUe=¹oùü¾xæOQÉ90´‡ ˜¬ƒÃ‚gÁA² 2M‰  Ä€àÁÍS¦p¼Â†CF6¹È ©&ãb¶„Ó%tf“ªËÄk^µªý¦õš±ŸtUÁ¬y÷¥|d|ì5A Ù‰ ÙeÜsÈ.%±ÞK;>ÄÈ÷Àà£gq6í<š°dÍ0¸ëžSåó= . Ìu73èŒMdÏ¡£MŒÂöH«-²M]Ö’Úù$ŽîShPGû¾»,¿K™ìö*ï•СX1«l»¦à¯ÚŽû ¡V&•;Ú—ÓÀÎ2pMS¡Yô|Ñ@¢’ÑÄâDHH• ËÒ +Š(ÁßÂȨ‹@ƒ†3 øWñöÒ1¥®žšöÚX3Æ_51ÑW!R3±S÷›¸á(qù²‰IÇMŒ×„€Éb.VŸ51ÿšJH´ÂÒs&~}tÎøD•ÀX•{ *)¦Äàh:Âî(xh†¿–#øÑ3:·-Š`ÔÚ “’Üx¤n3dMxhbòR²EÈÖ%êæ‚Ì Rø+jhç1¤3lNrÐÈÐãf.G›™vÐöÿ°³J¦…× ƒœV¤ù;%:ð"ˆ=ÈäncØl~’É!*(˜¸Ìž£âφISÙüwï!ðhŒ™|~í·%üqË”&š~ò/ößMb@é? "‚Çœ¯—ëáwM3Z5«•UÆU3ÆÛî©T*¥#÷m{5£~PóÜçVÓóàˆ‰éúÙ%­vÚkmuÂ3Ü’«›DÂ=34‹ÞºœŽÛ'|r@ÇÄÒ2ÅÍ'´Ó”Ž‚viì;ªr]‘¸¥)‚,:Úaf´ªãó< c#%n_3q+]&´Ö• T°´×:‰â®0¢–L¬%•®D6£ðx5Åž6öÌò5±ÎÏ”¶~Zoåù¯? ðmó¿çHd"7o­auHÚWóFr(OûW˜¼ènîv˜ã#‰±¯Ë°9}(|cÛ.Æ`Ƀ$é|¨Ð°‰×H9¶w?ö5š“Ó[FrÎIñÂÙ°Ó$í•uÓùé¼ÙÒãeÃÌ¥«&òVnIßLLûð.C×}üh}Ž4èÐÇàó¾áäX÷)•œ´bzð>žN–¯jQ'ýk߯‰n!¯ —4Cz7·žžš)g`¤»Âà›2ójÔƒfFøê˜\׎Nášq>gbO²(Ð9HØ%*Ä?Ãw„iÞÜ`›‘vÊ/¡âo¢k˜4{S"µO6æ 4Q¢Ùó‡:A²—hæ¥y³Z#ó³æÝ?pµf]å&\&?Þ"Y#+µk•u,¬3Úê¼ô¬).ž»%3ñ¸‘/ªë­Ýëo˜z¹/,í°œ“z­J³LØ:žìñû™6ø ç¼AÞý[ˆ¬4œ†–HÕ0ªDépr6º}³£ògCgN<@ÅÝø(äãØ/Ÿæ×C•Yö[? êôkÛ•ú¡k8­,÷J¼Û21¢é7´¹ýæ”-7>Oœ@a @§Y|~ª=_ýú>?v2óëˆÉÜî°i5\D½Ê *" „@b@ð’S%»DWo˜Ì ?¤M{Žz¬aþ¨f†íPÈã)‘˜Êòçvƒ(Ûx€§‘5§Žþ¹$­é–(á,‘TNOqË“ _%m×@²1ß}ÑŒ]%´6EÖ˜u·$Ê•Tùê¤b]ÍC¯ydyÜeÜ´+x,M“ˆ <Ûî*Öe«§V·55ë®›Ò<ƒÿo$«B… œ>}úÿ£°Ï]–ü»2ac%>‹ÿŽY{1ØÃŽŒm³„[±z¼•ëcffáÃÙ8¸b/¶$šaÒjœÙ„I«?¦à¬˜ïI«n¨ä|—Ýë¨ýCþ걟{- =1çÏq/ü>Ë¿¾gë–r,A‹nÈg¹å6ß¶kï.•)àXç=©ø¥‘â5Jíü|>~÷2G\‡pti[Ä Vaü_s1`&ú¶/§®<@ÉRXk âa¹ 5‚›¾7OÓÛã]¬$¹“UcÌ].øÉU¦ %üôs¦|u‹3'¯nÈE™Ê¥ðqH‘¨áÜð½ ùËPðá ºˆ]á‚xêž~î×£–ÉÔÕ+Ì8¦¥“ù¢ŽŽ¹ÇmB –Å Þ×ʨ¸ŽðcF+áŠÙ$Î_|4. 3Âï+,³”¶D7­àÃ/™Ù` Ukž%2` (§,ÐùÈ —ñC»5ɘÖ0¹¹Hxxbl7¦§üLœ T¸`|<2 ;Ê´öRŸ%ñ 5YXºÖ_W2ˆ<'îqéb4å»¶ãêñ¥ŒÛIã‰^Ü8}û…˜GصÝÿa-q-R‹êù \ú~:GëccÉܨ (jÐ#)÷ˆÚ~]&4Ö%±{ ÕëV ·còÑÆ@|÷Ÿ!0IÒöU¬ÂAUÂØ±-†öƒ>¦v¼7óé´+4ÓÄÀ£ßKa:Lý–óʨÁ?ÐùÃ&|;ÐÚ¥`:=™f …ÈHD að:‰5†S ú0jwVêÕɇrë;¾œY™1‹†SÛå {OænõJäJé%{Q¿qM X%7ëGÓeÆ}:®øƒO+ž~NÍDÿšcwá^«ù’V3kš;=çÍàí‚Úñ‰‡™Ûs'jLbýü¶¶Ä:æ;¬ÿl.9¾ýš¶n±™œûõ©´n9tx‡›¸í4!`¾mäš"[mÁ1Íz¾WUfá9•Aš±ðÝaâ¨f`eg™fΠ߆>~>;½D{0¤‡¶Ù¤òÀd³õñš­‰KR ×Γ'‹Œ‹I!(ÈÌÆ$Õ9Hã÷i^}Ý‚2u{þrÂòËÐ$¯ÄÎëQ"Ñ ¼žv.¶‰äN>(]d …zàÞ-3î>› ù/e´u¸¿àY„jRþ×ýˆ’óSQú‰½ÅÓ2ö~×õxÇ[”œ¬=Î[¬™´›bc?¤ž& -ýõß® FŸg}ƵbÒ&V.;I¢Ë¥{ÈëV%]%Ⱦ Åʳ…ÿÕÒôž;œû‰*çd§¨/…Š:Â…å¬æ]æÉ뼩sŠÝ¡`·±J]ÿL~ü2ú#Ži»“x‡ ׌ÿèš6E¼L°k)a¹¯¹ˆÝÇk³i?¢Ù¼ájy£?×–Êâ=Ôla¹›tø|&mÝ30´J{öëiÑʉ};/0¤byÛÍgvÎæþÌ·’“W3²Š‹f ÌtZ7ΟýD¥åÝÈoÑy›P?n ö7bb=·´¦&³s·ËýzLåÐŒjÓ—Ïk ­æ133MJr6äÄ03Kƒu¸Fš˜t×@]M€ †*Åu8k¢áT²uÐó°{¹ta=s[’üH8D%Ç€ì$²;Käu“(¥yfžô”Ô\ó;¡ EÀý`3Úž‘æI½n&<@å¬*¬>zz9òéio¦ï5•Îu4pßÈÚh•ÝgŒìN‹é"‚´T×Tò<­ ž7²ìRªq/¢:ºæ¡t9‰H­^™¢²àQ€R¥JjÀ·ó[qÉ_•zõâ8ì~…r PÉê3¼ÉŒÝo ]›K‹ÑÁ(ù;3`X}íý@V^¹‡¡÷Þó‘fçj‹*þü5w ‡£uãjøi6vÃ(—¡Û¨Vd»Qkd²µ›ÉµÊ"2ð¬x]Å€Îó5õ§~ãÜ8`G‘ns˜aù,ér¦‡*Á{ا6dÌ{¡ ½“KƒËSFŸù9ö.b‡Gk–WtI6 :r¾õ5¿^ÀŽ;]è•ݪx{H!¦O\ʹjƒ)kxÆë}?šòÈÜeÚ{(̰ ü™z¼×LŒŽS8«½“Lg“ötÚU7ÐQRØOaÅ#¾QêcS·œ,¼DAƒÊiÕ&ö]³•MP¨Då2®š_¡¨Or«L߯«ågæ×4`wÜÈê°Ç͘¥2Èé¦  ù!p.µøûXÆ<í½gC Fàwâ~šÇεbï]àØÑ­e¥´^µ>ËôfÅta­'ge^盄ç~ ׋ñý%t†nÞ¼ŽôåXÎÙ1æz›iZ’]ÎM³ÝIœ¹Œó:G¹,ï¿ãƉù7¥–^Fc`·/_%J­ÀcAB1ðëÒÜÆLmCÝ©ù)W¹*5·æíÆÅp³þˆÎ±â“Øjm• ”í>ƒ5,.¨BÈž=˜êŒ#O‰pj«cÙyùÊ”ÖerÎ"Dß¾ƒ)_cr¥ár“ß'ˆ;–DÙmoÙ•èÆàòøêç6|ßå¯÷5Éð %h†ô(œI'7i^|e'í}ß æiD?03p·Š’5{=ƒ7š‰OÂ6P³Î) þMü•œÕgݾ$Ö>åZÌÎ2ýJÉܾ`âH:»¤:HT²W˜­‰ƒò9Æï7s5YM$†›rT¥HRÆþ¬%!Ñ®»*Q¢=IƒeˆÆìÚ[Dà²ù+½¡ÿ Ô u·K²«õ7êRW¿Kü±73¿mŽóÏ«qrµÿ´©¢ôÅ[óVlo>YH™c°/SƒÙód$å.Ë»O@?v-‹]¨ ª&Vq²ŒŒ áÌDê­nÈÖŽ{ nê–ºÆyë.ag#9Ý·R$e¡Z·Ï¨Þ°5åܤÇ"Jð!֜ΊÈÙ(x½Å€v¹yšŽæ‡ÆC¸íGîdý´.ü~v?´¸¡Åx{Üš»ÙŠÙ»:&[öî§ð{q\¿i `ñhVì¼ÂÇ¥KZfô>ᜠ™“C¶xJk’H4ÚaoŸz š3ÕúöæWÍëßܬ߳]ï°J8¾S‚Ê„´ïE™™”‰Ñ6©ÜM5è<æFâ=ËCÌôÞ•±Qzhfr íï=!¡ð$ÓcI’´ê’hL‹Æi¥ùID$¼L#&Ö}ÍŽÂø(Û~*Õ‰÷ƒ¦1ì»òô½L7|I—OZW„.}J²¨ÿÞ,u—uSVsNÕĀͥ~èfÎugÛ gm<˜oå±v¨ñרñ³kñéšYå[·ëéÛWÏhÞ9²Æ_S³ê¦v–ƒ7oNV¢i#)l_D®w¾dBK‘9Nðú‰Ä€“,@­’žx«IKmkZZ¦Õø\êWÉ2§ ¯¬dM7f@ ÝÇžûdÝ·šŸ¬?Fo"öìäÚ€’zÒ9wòYœ×œÃÏ܈RÉÑ5ò"çïáBiGœI^Íøä½u XpšZ#˜ãi×ûI%*Љ‚ÿ8‰/× %ø¦,•è·¼9ž—wh†>;­&ÏÆaÏ~VÿV.ã3ð¹c}Y¶ô25º–cS¯)”ï5„~íjQØÅÙ-Gá0r}ó§3ɺÔêÔ¯fù©¨ %‡î|ŠÔ%à·I¬ÍÑŸºy°¤ûV×ZH§ž4»‚fé…fºÈ€àÅ96ÿùHÞ«t±º˜cÌÿt›ï¤¸š‰^½I|ŽÜ™,‘«ºoImÇ3aÂÛ6mMã÷°ÓÏœé9sUjÏ;ް`í-Û415ŠßýÈݦiôXGŸŽ<í‡ÐäÊ÷üæ¯þƒëÿF®ý±“,C§ÓjP‘J ³ÏÅc»Òµ[O>ü¨ýGýÈyK’ 97»·¥BβԬ à»óQjÇ— ×ªBŒQ »Òô]‘MÚqߟʸ Êd˜d´Í^Dd ùb‹}ÈÌ3Û«9ó]½qO #Ê£6Ã'½C.y¿ö[?Ê—­2ï¡¶£Öè¥TÚMÕÁ9)»ò¼Q?ži»nЧo&ç´³§çŒO™>ª/mÖyã™tŸø¢Ýøjb 2ÌfWŠnƒ›²q@à3\¯¨|Áÿ—ÿ_Â!ÅzÎeŠEœÝÅM¯.LéQƒK5. [õä>²7ÕÚÖ%å—r|ðõ:zûdÅš8wzM±l&b‚ý xIlBF£f°“I´ËG~»´þ–z#áUÛÝã»2kù;”pµ5R¥ú°dî.{8‘ÑxxÉ©8o´ŠÅ]´‚I²Íɬ®í£Í¼Y꿽¢(~/WŒ(‰èÐ’ì=ðtµCú×Ïi&!2œ8ö™‹þå¸Þ'}Uº…;,[Ê–¥?(V¬˜¨ù‚ç÷sMUS6³ÙlÝüýýE}ü-®\¹B®\¹ÐëõÖ%-&L–åƒ&¦f€V>…ÁšXÕ²“7sªM}5{­%;\³z?ÇsêppÏŠÃËt½@ üCØVîÝ»' Að¯G²gÏ. D b@ð²’#GQ‚] ˆQàÁˉ–"@ ^gD7@ xécXD÷¥‚ÿ, !¾{¹îQ•jùœŸiš¥â¿‘ cø`Âû~jRö$ø‡ã”Ó§”¸WÜuöˆ¡dãrdÍ –qŸx'o<ì]ン{¸ãSŸŠOË•p“ž"8ƒ,ǺUx«f^ÛFñÚ~ÛÏšÜe.ç¨Dó*Î\Ù¹¿äu%Ç‚Ôl\&Ãk´Ìþ¹µn"?>bl«\™„ôÂüNáö¤À9JP&Kª²7M’¤{Ây-Seœ³¸>·œøÂB þÓZ € °¿Ã^«xälÅ(p»#ÝÇúðûôFxe¦ ’ŽñÕ»ßPæ·å4ØÅ5Ï:Ôp<ÀÂ)·Ö 1 ³¶s6WžB÷Ò–ŸƒŒWñœ2”­å>¥]¡”(T§׿YÁ™Ø8¢Ug\²Öä£n,\p‰Ÿ·ÅûöjFü’ƒ‰#ëãxg c¾Sh˜,Ô˜C,þ1ˆ>ãßÀ5h=cWhZ1/[¿ù“ìãúSó,ž´‘\ ž$Tâoã„C×§¬ÃÄ/{°@׎Z9?QâÕ¿ØWl»ÆUz´Ê¢ÙŸM“ư!X‡>£ïVÍåª þnUÅÒŒÁßFàÆ)?ÂSüа­¬¿P˜úÙnsêäítûj†¸hyò»¥³ööÅè¶`wúoàðý´ÈÄ[7žÞα¢-’õ>|<‚S=P³šö=zéqoûÞæÉ,§CW3v~I&OzýùïYç0€©Í¢™6` ¹FÎghuO²øPyÒtZmìÏÀ„QÌׂ@rÉC™*UÉë¶—mù¨Tµ*În‡pÚšú—¦}¿K.Š—*…‡Ë~\´ë‘4O\çàIþ’¥(E4Yncx¢Ð‘ÐYÎaI²’yk»ºP²y7ºWx<™}ôæ‹L¿“.?¾ú‰¢¶ B ÿN$àölã¼É‚6qsÛ Tì€r|;Ò1ÅìD…¬% ^ø#·'j\Æ…ÉÑ Çd»v¸k¾ŒŒGvqÃA2’ ÔbÂÖIÔ·ºß‘ìúùUº}Šgжøf%ðŸ¬ßt’ ¨ûìþm×eí{ty©Ýª2òÖQ ÜX‚© úRÅí]\}γs]và“µã)“ODzÕÞŒøx.{«-äÝ'ÄÈÍÛ˜7!×ðS\rcêøsÂOsOù Õ^>”ñÜΩבÌ1ødwãØY7r5ò×ôÉìÕî%¾Hœ“-½q÷* :AþYÿ„{W¹-÷¡íVû‡e~3Ú‹3µÖ#—]U"9þã4¦lÉ@,ùûaª&ª¥@ b@ð<ѦåÐÑ´´©û軹ÃæLâ]Í»7]@ÏÕù˜=µiÖ}¹‰Ý#­¦‹““[²´Ü¯,léj3tVÓ¹öFÞܸŠNÙ¤4b"rÿ—LÙSŒ‰Óí¸ºàWBµå¦8³--³Yû[Ñ^UíMšø4úÞ¡8ÿÛrRÖ”S ùÈa:ÃÉ+P’׌-Ó¦ 1þo›–”óxÜ/×åjÊÀ ýÈ{e&'¿ÊÇèIíq¾<‡33RùõYê3xfý…DðÊδý¹;G5àX÷¿¨2­r§ý9Ú×ÉÚ…o&÷Ó›¹:·5#í¿fmŸüÉ}û lìÓ#E²PÐ&T{üç¹®'ï\M%dnm`êÜ=„ËòSÇo¨ŠB®£Ò(Û3§Ô~©ó (ÑÜ:´‰_;Ñ~Hk¼Î­g}T5š¸Ü&¦hMŠº¤»K5†›§®ãPª9’Ó‘ª±78vÆLñšEpϰP’¾t™ÄÜeÈkY 1L¦ödÍæœy㵋/&ÜãÝ(¤S¸·~³•L{'—˜&b@ð cºÈwý§ÞíGÚ%‡ùÕ„ûÜÌš‰a1Pº~%üÖ"ºe3,r áô1.äªÈ¨,iŠ»°„¾Ã7aÿ®çËßó2xm_Zk‚A€­?Ý ñ;(—ºÆË~l\q…7÷¡ÄÈz¶J‰ìúl»«U'lÅ 6<Íye#b»3ùM•§š;Ó-ö¬9H`ʪÑ]~Žunñ›æ½çð8ÌgC§Ùº :—â4kY·ÿwAk×c~ÀæñïrÎÌe?3yKzqññ9ËS@¹ERªuru>5èÔ·’þÑs0ž`FÇß(¿r MSÙNSr^åÌïjB0—Žbÿž¿øcã.n¸×¡Ã½°×DbœïZ–ßv'<“aÃË1ù‡)¼™ëQ…Q£vòE¯ßiºó{MdÚJÁtf)¿ÈÁª šÈh‰a%„ÍŸ "pÄ6ÆV2`<>“ÖÓs³ú÷~L½¿ÅÉ5KÙ{O²ûÄ üµ;œè¹!xËšÐ=¹ý81×ßMXÚ>šÈò®ÛŽ•_íç!b@ð:aièæŽä«ù¿Ð ÿ3'5K˜¯…`Œ¾ËùS'µfN3b.y)WÌ›ÔcÔ쫵£î”ùl nJŸxÿ¹¯7VP\t”·ÜgÍáRôZW2mÅ•sò΢ ¼m:Áçß˸–¬ƒi\ÞY¬³ Ô®áÒxF¿ËüËñÙÚÎ`~—â´éUÜjTO&ØQöƒ~ (‘ª•NÚƒÿÞã$©z*µëž±žðéÀ¢-íñðqCºø¨›À5ö­®;h"ë€>Ÿ|:îÞÎÏß.foÖOøvD}rh_U`Á2ŠhBiÌø¼ûÑ´¨šÅºT¨Ñj¸N°usºd1~%œPýn6Ü’ ³™ë÷ÌäJ!90•ÁÔ`ÉÚ z͸Ùa÷°]”ÐÙ…òçøÑœœ³EóTíSÝë¾ûr5Ñ]»á,]Øì\T3L²&,0„{/ù^‘Fr©,.BmÇh¶AP÷‰”>@žŠ*~XÆë~Å(´ŠY§KRæÎL†OqeÂЖ”rFOðÅ€eé[Á«£ŠS^3ZÂØ²lìó#³sº2ðPmæüØœC]æ"éóÑìãÑX"ÕÆ üY’A#Úg—ÉóÞ(Þxw0=ú˜0u^Ä;L™Ã²téÃC²ÓæËu´I)“ˆ_èþÎ ¯•¶› Ëø€Ã+faÊš¶qõ~«¦Õh?NnÝÅàêÏßï"P±cÜ»rޝ¦\µöóë‹¶¡|Ylø„Vcþàn„Bͻӭlib¡ºÄ± GÈÕŒÖÊn¾ø6óœªðÉÏ h_y«VºQ<ï#ÃuîqnÛ`ÜÃ1š7ßµ#1^nÊ©| šÊÒË øÄÒ‰êvÔÄ‹|Ó÷:/ãËÔB@{N¾óGð£ëǬy'‡vîëŃ{íq|3àÞë3ëÇPÕõU6>&|¿éË´ý ´gvé>÷.öàƒ•¶ÒL 8íÄqt?gËÁ äë8›‰•ƒ¸W‹¯vþd íǬïEË QDî[ïÎ}Y¹¨+¹-§ˆÛ@ïæ§­å¦·3 Ó¥­lÆË«Xy(‘¬¬Þù¸<·=“¾â‡ž…q³vÇèˆ "ÆÈ®ï}Bg|BãST1®Æ\xfy›/æÒDµÇ×SXÚ°›”H½Ùš!’Dd@ðá@™¾«Ù=À/‡l6ûï#¹Q¨`³w壑9ÿ•Jk]Ý·tB#î§®×#gµ»ãÆÁÝìÜîÇÕ°9¬²ëD÷·ÊÒ¦WTŒùŠÊ¾ÐÜôèÛ WU_z,=ñ^M'±©\y åãOÛಞO«4,g`ù ?º~ÕEî³åxV¬êANEØä¦„ëS¯÷|ÅqOý–K-útwå½Å»é9,õìŸ<¨b_ðKï<’‰øý<ˆ~Š2eMOŠ’ÃB3é6—ÏOµæ“ñUÙ8«)Y¥W·¹+×g «û`‹ «Ï†fß3;¹› tUW:ÞβeÐ'ÝâäGÊUðAÌ@t‡ïcÚÄC×Ę}FÖ H]Ùͬñ#öëa ÅÅÍ•„ˆ(|JÄËÃåaYg/™ý«Wr#ÔÀfómT+òïÞHÖ‘Ãié쀣»q»¦±@7˜í½D#b@ðj 9iBÀæ”ÙÚĸpBÌš¤Ù\ST"fS,áaa¶³¶¿'Yœ’]qs~»dδ%œ/9’ß~ŽfÞàtk3šq½›RØõÇU«Â£¤´™ä}{"}³ncÞ;8ºï ~ö5é>êW¦·,líïÿ~CE~œ65&’§F]ªTjB§žÉo°)c¢‘Ç:B’’0šL˜Ô'7Ö&S0G~œÇ\o9Š=‚R4ÅÎf§Å§ã~j¼¶…%Ý %ñ¯|Œà~,ù:8Y(hž{…wèTËG³»&’ü÷³lA .Ñ'TÞ@5›1`å#‰g¹­TËTјŒI˜tÆŒ…fÀöÌÈú[©V‹óãê 3S†žãÁ%p)sœ¯‡ŸxXÖyZapë¯ØôvV¼R¦Ê…û²yãVÎ':ÑP—:8S›qþ@qu|õ«bb0öma£o('l¡n¿Ž´ð”1.†çâclš5—ég›³è§ÎÐY‹ åæ:Æ~tÚšÂx÷v‹Ø0¶ òM:Œ`EUôÌþx½Š¸€_¨¦[|Á=œÈîÃ÷¾ü±×ŽCѵYøQ¬„fZ¡œ*Z]¨Bs­yÎQµ#[„²¬çRB4Q™tw ;¯V£UuGѦ„¼‚ÈY©Ü¶)ÙZueHçÌ•¼é’#ö9kÑsîxšÔ(dÄõð4žùàËtüô‡÷á¼Ñ“‡]æ’ ùJL6·àP„&m³>!ͯÍhçªþÝ~B‹4ü5ÏìB9λé2þñd¯@³7K “Sî§­z¦¶f͈zX³êXœæÝKÒ®kuÜ¢O’í/=Žvfšvû&=ê’-é,ÙKâÉ]ò:r4ý„:ïŒ=BɃÚý¦Q]•žmÔ¿Å;×Û#ë%R›%ûXnŸæ3‡S?]üÛàêú?­Ï=B F±{b>ýSOÍ÷»Q4Ÿ'J‡´¯šœM*oJùwá³ÃƒYöã *§Ê„)x›ÉßöK5f@¶vyé vaÚ§l ŒDÉþ¨ÞÄÅÆpoÍ't¼S¯x•²:røX*ªou+Fë>_ã4`=åSÉ”½«S¯tìÛwBw}¹v~…û¾«±tYzæíâ×púx:7ºÿBWѤ„¼ŠèòóÖ'Ýž­R–x‡‘%2ßǵuÛj[šËÐkv™Çí¤{uºÊìlöTê64C‘àVª 5Ÿ$!\sPèe)KMº§Ü¾[%Þkoûóý^)‚¥,ïtÌô x–{“f™|®·søç?h§šôŸ]ó¿Y%W*t™ÅïZåÊå`30 ?›üäÁ©Ÿ™1~'¼ ’%gQò»™8¹d4'ÊOäÃ\™7¡ÚÁZ½â= ¯ÃY^³5 ÆóS—J%0qtFJPqu”¬Q,]ªèÎÝ{Žød‹Ñ®Ë•|²ŒOùº”¼éGÎæð¼EÊM£V%¸·k%W t¤IÑ„ þGþš(@ð\mò ñ-áQÈ"lÿ™Í*jÌ ¾éÙˆ†}6âÖ5›7|GÐi XäKÈýì¾më–QL$%&’hÙŒÊÓµoîJÔ*ä’.Jc&ìè\z ØOƒofQj]W:ÏØC Ñ&¢O,a©5ïíÆ7OUjÔ|ªÑ§04.˵QoRùí?©Ð·4{f¯ãÜ¡•ü|2NT&ˆ Áÿ%èwFöû†}7sУ j¸O¦y:äKî†ïº`&½û1ôl$•+:"$Ýùƒ/†_µvã˜îžÇX9Í >¹…}§vâç4SÿUFc"a—v°xÙBíÐÑaîJ>­› ©º+F æ­Æ«¸`.] ·cBÏÌžp‰–³G’»¸~åÂ88«Ã/`èªyô./qrV7ú- ¤ât;ñ0ÿK‘n•ç–M—j3$o–^Cû¤¤$?QT¯OË3HÉ’%EA ^X}´l–¹â–ÍßߟbÅŠ=ß‹2sîÈ슕¥X6ûŒ÷1sô×MDÖîNçÃ,]k¢å‡õ±dÒNº°ŽåAÕéÕ(×Ã|Qû¿fâ–xªvèÍ»åS¥V#8¼|N*.yÑ©_G*{§öÁŒÜ?…¤b¥Émiq“îr%À“¢œ“Ï¡ðàüqÂòV¥èÃ1 ±\ݲ‘Àr¨Ÿëõ î^¼x‘œ9sZDé,«xŠ<OÅÎή0–yĶ͘¼™SmªB ¯—1 ÄÀcb@ŒÁ+0þÿœÿˆP¸±ývÝy<Õ®zcW£xÖILwÿt~a[Æ1ä—;d8ÄHáȼQ|{&Æz~åÁq~ýn1‹?Ú–ü¸Ÿ%ýagùcã9"ÕGçñýý'=i S"7íä’u…°°íJ /4Õ‹Á…íÛ8ñè*Œ§—0hþaâÛ×ÒÏjNw½ª5=¬)õ-«‘\9p‚;‰OúÊ=Ìž¸ž[ÏœÙÌ­uã™´1€Ì†ˆ)þ‡Y·æ~ùåW¶»ÌÑõ«Yµj?o_ïÇDЏ‰qÃ~á¶d$Ð÷4±ùªQÔC{_ÍNë)3防ö«ùë'Ì!ïê•tÊ&aŠ "0JÁ “’«ÌEï½Gùž5°O™¿¥š1<ÉÍ)ƒç§ë'ºf*œL¾?0y]>>É¿‡Y7ZQbÃn|†—áðŒ«j^‘l²MXÜÞ0‡õµ—1:~õ§†R½¬×wï"ÛøÃ,iãd™÷>«ÝÀ¾_{ÚòÛÿ=¶—)ã @D ¯º²P³×Xj*wùyÀHº åÝNäÉ£5ªq»óSAê4c`É#®*È.>dw׃gžlÈ– nQpið1uv/ ÊÉ=s:Ö>Å7¡¶¬nZ³õ÷ö×<Ó 'óÛh"£ðôГ䉛¦/yÑE±ä(WPò´bôÇõ°¬Žë\æ#¦ üž=÷cQí%í:½É_ €uaL¡¸éÏ<ºç¤n³mÝEJ5ïNð­@yyX•˜sX²Õ)% PÒ5î†F³öÛERðZÄc™ÎŒéP"ƒÊ/¡Ók×ié‡Ì´.Ê8¨I³r—øå–å>rR±Q9nÌ;m7wm%ªr3ìtvØÖª‘ÈÖpÓ:¦ÛÕ||ü–m€Yâù%̻؈Šÿ΄_±¨c~ ¯a#ôö¦pÑ ž™Ï ‰2x½Å€Í'ãÖ/3Ù[q,³ œgbïµ”™ù5mvãë(ShןÙ¶Š›%Þ£u‹V¿¹œ~»Ê½œãøøh3äÍüÜ—ÖÏbÅ3ïoiãÝ©ÝU|gÓeºAóú‘{Ë †EÊm®2þÃý4ý~õ\Ò˜:r6é…ŧ7_Ö¼Ù»X¾ô¶-ñˆÀŨ“¸¹š!ŸÝ¥a“6y°›…ÃŽPjÖ·TÞrlÒ ¼£vÌ Ö|¾™-51`Q‰X±øM&ŒÁ]õgÍü}äjö6¦üÍfÂB.j;uxª=#žéºJÐ)NÅçåÝèË\¸`YçÀ‡Â²~dË)G«²¶±¯ÉC†ð¨õcË„mÔaÑjäï\?áO§(n+`̲3^ŽVbÜ=„JƒNhb,ËCãŸpï*·å>´Ýjÿð"ÃoR{Ña¦Ö2¤h†L0smÓjnjFÔ7«ÆpèÛ5¸öø²ÚiÌÁÛ7l/õ¦ýÂÐâ×YüQzcr¿Æ§¸½N\u­±@ ÄÀ³ poç†~NÉæ[Y´\ GóãgÓ¹i·ƒ`çÁ´ìÚš‹7wãÙ®;íJi­…~Ô÷Gׯ›íGs’ùê«zJ´û;û?Â¾ì‡ -Ó¹k[1ÍÒ¦)Ø7ç[š~N‡B ;Çp5ZFgŸ“r5l«Íé½KR§^u›G¨„âiˆ&Wªì·ú éÖ³1vD³éÂq‚oýÊü#åé·¬2¥ì­¶/»cÉvèÛ'äû«E™œÃÌõŸ&±ÊµKz6"fãTÖº}Dë¼ñ/ÏML .à.Ú=Ò=nTolúƒB%¹ºa—ïd]Dv®z½z“œM6qmãl–ûš­ !‘t¿àh–ψ%‹d‹©ù[3¦omÜ“¶¯=’µ ß´Ef¬Ë·f¤ý׬}¸Lpû4äH:E“YÕõzät;¨Ê}.ßÉGÃÁYˆ8õÃ,ÁÜw9£ ‰6å¥ãW3È2w"ëG×å?ðQ 1‡üßÂÁQ¢€ƒM„ÊÚ³4hÚN«Zkèj'áí"QLR˜vV!2“óx8KèTBÍ6˜Ç[G9Mpo~Vàæó’HˆP N»"é%*x‚ß}•(ñ8B ümŸ×bøb©>ŽWøåW3]§÷çƒm“²¾-oëÏs!®.A÷=É“Òán¾Åu©o<¸‚!G~¹Æ5Ãb¢ýæ­'ävË´_îuófÎwø²ÒßÙ¿'9/eñ¾›·›X Ÿ+ùúŽ·cç0ç¾fà¬cæT›÷›µv'L˜’î°qÁAìG5‹Wë’ §[û8”íÞ+W˜ÂE3s:ýY;u-E*ågɲóÌìS‡‡–5„“ûòu|}šåBÕ áñ›%øxhcͪ„=¸Î-“VŠj½°¨Ž)á*›Wåƒq5qÓÛ`ÿ@â®%q.V++·´{ý~`ì‚k¿˜±¼ [Ý•=WŠZzP†e“HLœ‘mÇ0±m²Ž\Çÿ±wð5Ýïß{s³b'öÞjïY£J·–ªÕÚUªÔ®Uµg­ê@Ñ¢T¢ö¨Y{…"2ˆHdIrÇùŸ{3\Öïo?o¯órîÉ™ßó=ßçó<ßr&®Ãúb;¡Í'·ÇÈüf®­ØŸÊ SjšÆÃåþ— `ÒÈb46fÐ2W[€ûxÓgþ"¯î ï§]q:ý ãöœdóIwÕ+€S±lÚR›'‰IµþÍ‹h©¢äcAfâÜt´õPøõ²™h3”ñÑbÞDbŠØ÷Ò1¢†ˆµÀTU{B¨‰× Uu{ÚiÍ\ŒWÏ©~㑱fh°•{-}jëØ¹ÉÀºd1 óÔñ]y…n[MDIs AÄÀ£‹½ƒ=Jämn„æàDÊ5ÉKöBm7ÚÍú,Ù¶‹hCYz%Îa¾qšž%ˆ¿|†‚ kòf«¢œÖvµ¶ÐöiÉá‘!|Øô(óŒoPÆÎÒÆíQöW‹û*mèUN“ä…ªÀíÇÓuÝMâµï>oZæJ2 fнîNù)l<Æ™%’í£Åη\ZvêJÀ€™ ¬wïD4†³0nÌ~tðÏN£!ãéQ)ŒºŒbVå… ¨˜bl¼¨Õ}e=cXÑé'4%øpDQ®þÚOû3X«Eg¾ÀïÃ~fìšßžA ŠÈÂþø’U×3­©ž£‡¯á+šÝãx«ÉÝ0±áÚ:všƒþ­Æ\›2’õõGrgóeªv*—iº9h3Ó§lå¦&)õŒÁ‡øû°™â…ãéÚ.º…ïîkv¡V¯Ñ¼cY¸ÄÑ#G’Ï«GŒýu[x²÷ŸÈ刔[K®&ýc¥Õ®VŒ(¿”žU(¶ñ<ÇÔcM›´ÿ² ßm¶<8Y¨žg¥w(7k)¥\J·d{o<;™3Sò3jÂû¸KyôT0D™˜vBá‹úvO4Óï¨Bî&:bƒL¬q¶ã]“™Q—•Ô^.vê÷\Og¢áq3…ËÚ3*‹‰™ê 6¨û­:là‡û¸÷žyt”¸ab´M—üÙµÄÜ0rC›4‹¥}¥¥‡‰èAÄÀC¡æÏ©³Ñh‚‰Ž1à{ò$îê—äQ·úÍjs½ýlâ;,¦@²55\ àò… VêÝiÖQ‹é  }ò#M˜´º{ ï#î¯utÇ#ÙÆ¯­eäÂx>ìX•ÚfÝ6“µ•&Ѿ¸c¦^æõSgq*Ü2 ˜>;#ûvcxÜ,F5Ï—úbìJ¼ÅW¨Æ*† U ®®>ôÒ¡[NSáî}Žy¼q0ž³y  ¬Û”Hí‘>èv©¿õª×ÚX÷lÞÞm.ißdܸ8ÆÅŸšüyº_Îʼ¿vp»ñÉ¡ûx.¬ÿ‹Èwç0»O)Îéß OÏÏq¹Ýœ)5!“NZŸV ›‘ÔÝ"áòj~v†wç,bl|4>;§~„ý¾IôYàÁ7?u§¸šÀ†`KÏ…ÿظáVòd1 ç#·ÛÁ5$‰þ!&R檱sRß¹‹:;GœÔü ºŠ:õŸƒ“#vZ{\Ý1i2ʽ—°•¼8¼g5[WüC˜^½‰¨sœua`ï]ê;·LSœ—·Ç¦©—´ˆ~"è4pS¿ÂæS&\rh)élfëE…|:¾.§ÅÏ×H¼êP”P_Ú­h…ØLK¤Ì ¸ÆQËÀj:J¹h0'èYGGBˆ‘!þP7ܹ£SE±ÎZ½PÑSaÐßFŽ™åõ"*2¥TÞ+e1,:vÿO‹·[bwéAΪº¶GcÒ‘-×ÝÉAª}Í\û)´B¥›ìƒcñª‘4̧9ü·³äH­;~œýS¸ã¿šo†¬§ð i´¼<Œ]Ñè1†ÀÏýGÓ±bÖ{ÃÆŠ‰›¾çÇ?sñÉ|ëßò¿ÉØ9NŒíó9CŒ3øöͤí­öØ«ªÞÆŽ;•ïÁÔò[u&3ÿ‡Ë+g°¿|Of´#lW’gëU¿Ë3rQûvs±|K궨ÅÄÀïùgÂ÷·žC³zö\œ9ŒeþMéaÛÝ‘ÒÝä—ä#«öøŒÂµ§mÆÜäé^Uƒ™hÀ¨Š‚´±w•ÝK¦0nÎz.—ù–Íò¨žWºy¶£_ÏõžvàãiÓ(–œëí*ɲ_Ý)ás×ð_˜q˜‡Þ Om3 p»ÃGÄd³ùTÌf´úÌ?³Q½»t7§¨gÒ5«š®oòÍÄ"l;éN5Ï?h35?ãGátpaj•uGdÀÔn:&V×°ù²ÙZ pÍNËÌZ~õ7sÇ.\4©CC•Šøèˆ>–ÈÜû”I¥½u¼ïÖØH3[î¨ÇÛ™±ÑD€š\òëY’U-Ãriie0ÑkŸ‰`KQ¯?åuûMxö¼P¹0!ü gïdÝ{ ¼¶‹füÄÆ‹ZÜâ÷2qÀJò ì‹Û¯#Xv1%&—@À?J¾›µcF³äH~ª—Qý/ÅLð¾hÊ–ÅEc[j?âþ†0Ž,B‡/·R\=*Þ-ÈõùT/xÒ{DÌìDû¡ 9dÆÉñßWp&ÞŸû\øpâêg½[ôër7føÜá¼áí–:­©’:[Z"Óç•’p‘ýAµܻʽ§hs>ýg¼Ìï OQû½ú¸k³P²Èmö\­ÏˆåÐëKо‹ËF/'ݘQ† Ö÷×ߟÊèæÙ’ÓV‹Gµv´¯f+°Ì\[Ý—†5Z3ñ\FÍìjÓ Ñ†_÷"çÉ›¼¡ ŠžUòZÇ’¸iG9UÄŸYÍ䉇“Û ˜¨m[¨bÝŽí»ãJ-íÝt2™Ì˜õ%i; Šé:‡×maÏ‘8µÖ?¯3ŽÓóð‹sVÔÓ°~ŸŽ¤ÝÂ…ÔInÛ‘½åº­|Ÿ¾s˳´w,=ëŒ7ðÀþüîÚE#ësW3©ÞõkïñžUd§jÚí3h*ý[$³Žl–úÛûŽ‘£Übïž òÕäˆïu”ÐsœÏU ŸÄxÔ÷§UßT¡Æ–ê #çÒDj®nߊ¹ãPœKçíÕ»²&Î!û­Ïä^} ú}Êû½&SzÕ`*»HáôD„@”‘>ÿi(›_K!õ[«Süü5ÔË›Á—nb¥ŽÀ%óÌrA [£ &ä7³-¹±ˆ6ƒ æ™[GÉ ûòëùV1Ð뢂I^‰ bàуÞïŒdª8ˆ1Ü ”*|ýóÊ&‡qJ´gêoëNì*Èç£ÞÇÇÞ·ˆV9r{ü6ý¤ ‹Ybð{­¯ÔÌÃ:€P@è#ì¯^«p§y,KãEº”—ïö[GëF‘Z¯%­·ÿžt:«×_«Ûj}Cè•+‡Çb°Žb”ÔeMã”›¢.êzŽÚtÐ’×ëD¯“+{wïy·ÐÒ:iIŒËLJ߾I¥”7©ñ tÃjdOñŒ5è ±dm>œ6uI¸þ4ß™BÔá™ YS€!ò±¾w œ)ÎW‹~¡]I›Îô:ÚNÁáú3¥ÚÞ:;о3ãÝy2«»×¸û,¶¦õº/'ýr>ÊÒz5-Ü‹S&åªwîµoýܾdÜÔ¼æi9Aoýœ—±ý> Á‚fŒ˜5’7òéÒݯшQgȤ.XáÖ®)Ì jÉpç5̾R€Ü¡'1µmœ–£ k=—¢Ö÷OÈÙ£ò‹Å±‘%¨zZŠ}òcÎ0–ÏAÉKëYµí‘%±ÓØ‘ÿéÌÏy‰¼R0=AŸ‚°; Û}MÌiÇ[ñfÖÜT³yáFõï‡"•ÔÖ).™îÛêOë¦c°ªÒãK#D QF>9®Šu7˜×ÀޝXzG^‰ð| ³¾d<³*É#1Fq|ËÜk7¤P&n¹!>£#\?Ë9SaÊæÉÜ*OÍåÓ‘Èõö†\æž[‰:ÂúýYiÜ´éÆï1GsåX ÎK‘C›±?±‘úZ¼^&KÆÃýÇ©¸ÒT-êl=—ß¾ó8U¯HNEƒ^¯MœÒÙ·ÞcäÈwð>>‹§2©siõ­¾}:v;ѬKzë_êgZ•ôçÊÖ°JyÚXº ~YËŽ\ |yI¡„IOÿl°$^Ká[Fz*é~NCg…lú»Q¹ŠZ…ÙñwWŒü`½1\Âsò]H‚ðªà•ÛŽ)U´„Ÿ50H/Ý÷² ÿz¦9›ùa·Bx%abæ9…­Á ñ&"TûÝÀ2/Æ%g•ûê`k u{é0 ˆAx>T þ3îZÞ/­¡€§–*î û} ¼u[C›Òz6Tƒh…ó—ŒP0D™ù-y`¡ø…Üåõ´0­ S"û–1ÈîibâØEǪð°´AÔ¹hÐßL#L²i©‘]K!“B¬Œ8ôHHU€ˆA„ÇÆ|ÇÌÞx ÕÝ5x%*ìQEÀ´›Jê°Àßí21Q¯ŠW0ÝQÒ qoPE°‘ΗÍܲ1à¡×Íük3:‘bPØâkdó³µq¢}V:Ý{¾x; ¯¹Á¢Ã&üD "Až"ŠÂ‹¦{'Ÿ²Á¤rÿLfU6Ç›Yu)ýö‹Fl[Y+ f–œ¿ûÛRÕ°8Í9£¯›øæº¼áù@j²AAÄ€ < o,’3[þátäÝx¨áؾ˜µŸ‡éjm¾¾‘o‡.Çÿ>£´(1çØ¼Å7ÝùŒ'¦_&×1_ÛϪËY¾|%ÿœòåàêßX¶l¿¯=JXjLW!Êï?ÎYâ–!-#B& i÷5^ÝÏ–aÈ‚Fê|AÄ€ð*baóÔ©l¹k=•ð3ì>qãáfk3süÀ%b”û‰ƒ,^r$Ý>J¤/ÿžÌø:Æ‹»ê2ñGbêúíü>q5W.òÛ¤µ\I&þšÎŠ F »Qÿî ò%Ô(Oµ‘IçU¢Ø1µ'ÝF¯åºôáCÚ O-«ÙÙéÑØä8ef&½"5HP ±N{×{T´ZõxuO“ãÝ­(ªáÕèõÖîÚõüvÉ#Þô™¿†È«;ÈûiWœNÿ¸='Ù|ÒFõ àTl ›¶”@ç&B 3q`Yìíí­Uǧ`Á‚¸¹¹Y· B ƒ˜˜ë¼*ñhÉ)ùGŒÿS¢Ø_î7Q‘KÁûlÂQDÆ8öÇ—Œ¨ºžiMõ=| ï\Ñì>Ç[M2˜¨F¹Í¿ãûñg±¬lBß%‰x·CÛ.]²®$³Zå̸¬’ˆ¾p#jīק´΄£é,:¹šôcŒ9”V»Z1¢üRzV¡ØÆó4S5mNÐþË$|·™kéÎŽ•ޡܬ¥”þq)Ý’m—eêä3Sò3jÂû¸KVLÈì·¥€·x{–ÂÞRð[òªíßS" ™åuáÅÍ÷ŠÖ¯T«µ–Y–6%žžž899Y§LRdù»LR$‘áE)·ý¹¤}“qãâ;||jòçéZ|=:+óþÚÁíÆoÜõô­ÄprnWújÂÜMðŠYœôÁë Ð~R_þk×™Q®?3¢aNÒÊgEZ4ËÊÕŸùÜñpq@g爳ƒZ°Øé±4?tprÄNk«»3¦ Ê« Ò¡’w‡÷¬fëŠÓ«ŸRÔ9κ0°÷.õòL‡œ—·Ç¦©—P¶…Šq·mÎRØ;::fjà3j|ø´„µ¼7ÍS¿–­çoY,†ßv†B1ü"„S µo7Ë·¤n‹ZL üž&|Opë94«gÏÅ™ÃXæß”E’³£ñ:;'våËrÓ®c>ü7®ârô1®GÞf럫8‡‘:]_gë7oÓñÔD&õ¬M®ä¦ûÊÕLDƒÞ­mKus ‡Áê gÉÒÀónDAõBµúÌ?³ÑˆYIg%Ô'Ò5«ú\®oòÍÄ"l;éN5Ï?h35?ãGátpaj•uGŠ«ôÆÜÖë³l³õðÒ`Û¶b¬_È€­ HÉ)Q‚”u[A â@Ä€ð"`¼Ìï OQ»÷dܵΔ,r›á+ê3vV9ôªoßÅ‹·G/ç_ÚᣋçÄ´ô;X‡i¿uÃãÐ:ŽEÐÆ%b2ˆ%Ž%>döêª,˜¸Ýùȹå÷'}èûQe¼´—îkH$Ѥ'{Á¢¼ÖémÜAÏçùnBsCÂðÈá•$”õ®¸¤*EÞhƒWÖômìÖR¸m"GgÉÈØQüÝ6IøÄ\ØÀè/ÎÓî·ŸéPX:fVøÛô)U‘™u³ýý´D€ˆ§°½Žm>H1ü)Ñ[! mD / qœž?€_œ{°¢žž€õCøtt í.¤Ž{Òœ½åº­|Ÿ¾s˳´wʾ‚]_¸ãn©‹o݉ –‚ùºÂæµ7hùñ'”N͵9é9©†ut×áóyc¨ä™\i`ß·«6U%ñÉåFIõwâ¶_9g.‚·økOùêGrÄ÷:Jè9Î窆Ob< ÕH©b PãV5ù{žÉÀÕí[1wJƒ³cé¼½cWÖÄ9d¿¥øÂ½ú ôû”÷{M¦ôªÁTv‘\Q¡ŸRE`ëù¥õò$2ðêF2‹H5ˆá…C!êðL†¬)À ùXß» Îç«E¿Ð®¤M|m'àðý™Rm긧k€§$H42êWãA­ÚÞ»Më‰Ož,üé' é“BûÖ%€Í»Éþz_nïšÂœ – w^Ãì+ÈzSÛ&Ìi9š°Ös)jý:â 9{”C~±86R S„‘£–bŸ|ǘ„3̤åóŸFPòÒzVm;F¤CIì4väÿp*ós^"¯Œ¥“® ·­.H)è3òø2‹ˆxuÄAZï?%H£Á'’þÖ”´,:›EŸ¼XŠ2³Ù|Q’ê1¿÷éM`½+((ˆâÅ‹?UA`éÈ ÕDq|ËÜk7¤sÆ{âãÑ8:f¨P•ð½ü´,–¦½šâýƒh+ÑþìÞz˜à;æ{6Òè²S¡yc DáT\iªUoÈß¾ó8U¯HNEƒ^¯MœÒÙ·ÞcäÈwð>>‹§2©si›ûTß> »hÖ¥ ½¥jàaòiJ^=wîœuÐ!KUAf¡_¯žȨ=€ÇCM³"ê É‹!y1Ù,Šˆ‚ðL¯¯/yóæÍ´>8³jáÕE „ÿ?1 Õ‚ <óB?m(X ~!£<"'‡ˆAžiaŸYßò´@xµ#"D ‚ð ‚ŒÚ ˆ2k;"ˆá%/ð3‹Ø" _>ÏÿÿsáJL g.È[¶Yï;Ô¾‰è€=sÖ"T¬X'ýÄÆ›œÙ{˜@m!ª×)ŽÇ#ç_…¸`_üù(ãã–4‚˵sÁàj$‚´ÛCp*V„l"ë„—$B ÆA÷,bà!0´zí'Ýà£EëXIŸ™bàèìî Þ‘zuòc¾ò#'WfèÜÔöü_3—‚ÑhÆÎ.­1pbV7F¿Îû5=¹£:..4è£v0æ‹>ûmoѼt6²j“¢é¯¯^Gƒ›].ð.å‹MY§/Ñ‘õ?`ÔÜCÔìïÂϳi5ny½2ÜžCû¿'ëÃÒ‚ ‚ˆçC \ßÉn¥!C? ç‹!Û8ׯe3z #Ž&?ö¼FýÆùpÄž¢§3ÉêØ‡³{Bf\*BUï[©£ÝŒÉ´Žÿ™OÇRÎ3Žøl. ÊØŸéísˆq=¿'¸lur]ÛÁfsGþk+,6?„]?Îgë•ë(‹¦bjÑ‹þ-\ø7£ëh~£Ï·Á”Šÿ³;1z¸*î 28S¹{_J·™À¨˜,„ÕÂoÝ}¶ ‚ Â+#Ì„í܉±Îp¼KFP[Æ6ß¾”-“AtªK¯á:î-êŽ+@ùÊU©Ù¸5ï6.ŽÃáyŒ;Q9KºRH§psMo>š¶™ºÝUÿÞ/œbk~ Mn-Ñ뿠͆“¼[h1{Ë௡U±76ÃíýIl ~‡öym\r7-ú÷'ääPÌýÇñY! ¿Íð:õúáøqœæ/eQ…Œ‡ãÓdmHŸO~åÍï³1~hÑÔ•ÙvAAx\´/ÔÝšÃØµ#‚"Þqø_ÖS¨D4;¶·Ÿ”‘Îñ~}‹·îeýÜ/iU"ÝãÛÓ~êaüOœDS¾2>V ¡!kÅ×Èqæ(~FÕ¦­Aµä¸»c7oGã-Ü%R½Dðg\T‡i"(“ë\P¯£Í]‹†eïó¬¡ìßEî,‡X±þš*ƒ°]A^1 „ïfç âwÿÆÒ¥Ë9iÎAäÎmøe ‚ް÷ì-­#9Š×äÍÎÙ7¾5ñ[·qE£Ãd´™òÆ2Ž;Õ¾kô¤ÚyMR÷%— õ(ua=:t¢ÓWÈÕ0ofpƒ&­.ãëè-×qr&s) psÓTþÈÑŸE“ß#bÁ4þ Wî³ýyqQ\¿—N¸ü–2lÒn>Ì#£½@``àÝåZ(·3ÙýÂ<>~,{n>†\2ù³bød¶œ`õòÃDJ6A^r^ (³Bøî$¾=‚‘¼“TLâaô­Æ³íbOJ¿·ª@sˆY—9g4-}-ò€à —¹“»¥«9â4|'ãªQÉÙDàòÅíNdä¢suí2®5›ÂÂ^eq³{ØVÍ:òU«ŠÓÐŒ®sÿ©”ÈL_lGç9µÈîY >`ô܃Ôî}'Ãíu†Uçyž%×te ½;1}Y'ò)±„‡E‘h1°v¹püw.‹ëã#-­3YsfÁ°#Wø©B.9=ÌŽTþ 9ñÿl%P£MîVÅÉ¿ÏÓ`ÙzN_MdWøm:kGïzü6ªîÐÝÉ…=‡Èý^E®ü8€eῲ¤gi¥¼AÄÀ³ÖìÙMÕ~yî†3ì+ЬþÆo¿D÷âE±5 vÅ?crŸI û´9³Ür%áQµ0ú=òL䛿}Ñ®ù½â¥.£&ÔÆåFFb@CÖ¢…‰=œÎ;ÍÄÄ%`0;S¢íh&t*w_#lWºK†×q޾ŸˆáМˆþp:­] ]©Ö³/eÚLäÛH{â>œ‘fûd~yg½KÙ?§/ÎLà?ðj3Üêº)p1]:ýGµÖe±LbìZ¿&ì_ÉòCص2žž»Ôç«Ô–Á>øÆ6Zü3™Fzv®Yqòº@÷™®ŒšþyLG»gÞ¹’ÞºÙ€QÍÚT›Ÿúßü¸Y+‰Œ2bt¶õ΄¢±Ggˆ&Æ ÅN—F(˜1Y:}¸WeÀìŒ}ß[ù(ä슻£4Øáåã埵PI$:<’D<Ýì¹§@Ü-n%8á™Õ‰L‹xÓe~ì0Æ,âÓ‚I{)QéÿÁ¿¼½n,ub¶Ú‡ºÎÿ×ã>o³N0±ËêÌ~Ÿýgâýu9–Ïò`þ¶d³}Õ¸·ZBµ¿¦ÑDÕ5ÆShúµ³×õ¥Dr¢ö ¥á¢jlšß —¸µtóŸmÎkz#'¿oÏWëncŸ<õ°áæEüóR"Sº“)ÑHá.?ò•ý`qö ,õ[ÍØ¡§­‘$ñ¢Šs—ìsSßZ書²kyßåöñ#uÌIñRùàæMôyò`‰˜B ÍáM^]R€«\ïßø§÷ÝhDÈ/Ñ!lk–½Oøë[~~;#õv‰ÙïÂqÜ|ºäÓÿ¿` #/Âó|¥Ä•j~gÙÕ³œ»Î3µ¥¿·»$Þƒ0ßàÀ±D²Æ|K›ŸÝùz}²Äú¡/Ü’^½àdçdmLyW¸9àn1¬^íKŽ ñœ<¸˜•˲òíŽx…‘=ONktÅt•Èܯ㙉­NHL$ñÖU.øêS=y>+Þ…r’Rc`=ÆÖ7Ñhï0öy Åí6Áf1ðøRPz5¢oß¾¼ýöÛ’ ‚ bàÅO¦,>å¨î#)ñHhsÒ|èòÏìJâa4³ôÀˆÓ Qn²æËÎ\)•Ÿ#‡rÑ­ÂIæU¡jÐ*.ZFÓÝ“Yä§£þÀ.|Vw#‡—³zû‘qFníû†n‡t˜#/cŒ ä³6ó(Þ{ Cê8غöÜ ½A‚ßF~˜—œÅìÿ·M¢^rÕŽw“«WÑÚÅñ߯‹‰jÒ†9L88'¿O»ýã ¬»¼ÇÇÄÚ>|8C† ±þA "„WÓ7$úÈ4†mËC«¶³àï:t.­ Xê…uÙ)[£—‚ŠòFµ[ü~¶&å ç¬F_[ð=:7öãJš¬Z¡ÿZ¶ö·ÝfàÐ7ø)"M÷As0GN8Ñzät•KÎâqñY½½÷ì¦+Ô„O»Zn3 ûíúV:—²³ÞwTx)ï>LÜ[p–ùØ4nÜØú¿A1 ¼²$r%À•7;T¦LÙ2”,˜ß_Ä;gÁùvû6á†ÿUo¹HØõ¿Ù{ÃL]5KæªÖŒªŽ¿+Ì¡ìûíGNšt6÷Lf/2gÀp~kn7f|ÉÇÍÞܼÍkS~gcXCÞõ’Æk"AÄ€ <&”}§e­ú&çv.c÷?{Q }ŽÃÉl”«QŠà[…hU#ŽçëP‰6Ç&ppv>[qã¦b4*V’|fMoEýçÆ­Ki.i¼Â²±«ë*Êêå^oùspÝ¿ìÜ{÷w¿¥×‡óé>~+õ'7àÆŸßs¦x7Þ+í$¯õ1puuµöˆŽŽ–Ä«…™ÀM“™¼ò,ñžehðVoÆSíýâèOiqp°³N(åæb“Î6Æ[£u¡Æçs™Q{Ý[§ðkµ¨œÎ¸8´Ùæ§é:ÛFue¾S_–¿—;MÀ´Ã&xp3{Nøqþì þ ÑíÏ¿Èݰm†´§@õb'Ò¾CGºNs¦KØrVÜnÃ;ª&…Ƭ{öìÉ'Ÿ|" ""„W -Ù Õ¡í¨>TËgǵ??§ƒ¡ +Ú±ÝdDñù _¹â|q+áÿýɶ0Þµ6õ×S{Ü.j[ÏÑŠyÛ[¥÷ã£Ï±mó œMÀ±¶–„+›˜:èþ²ÿŒs?àîdމœ^4Œï·ŸàxΖ|¥½{o7oåHTšu™Ä 29qJ[ /JÇyßߣýߢÒH=Ra B@^F^þA‡^1ž»A‡îºíÄ\:Î׊”ñŠãôú-$Ö~‹JÖy Møm\È ¯–´®œ“‡ŠîOóë°E\)ÒŠ.ê‡ þÝB±F•ñ²»7"q|¯xPµamЏ?†_o ãðŠ?¹Y³ Í È„’ëÖ­ËgŸ}v_! ƒ ÂvËbÐ!"ቅ»ûý»gž?ž¼yóŠ„g(¤úS„'ƃ„€ ω`$xùïJA1 ‚ ‚ˆAž$z%φ‡êZhix&¼dԀв˜L¦ÔEž',y2¥Œ±äUÛÆƒRÅ%Ï‘^~BBB$„'Nîܹ%B "„½A^>¤ÍÀK†xT‚äiAD ‚ ‚ b@A A<aÑÖq13ÅäÇïC&²5\Q×/ðÛàÉlPîs€BTp7Rö1sëÌq®$<ÌýÄqjÕbö\—‚ ¼ZHBá bäüª ,=mÂ.¥Ú×psŒøT~“ÝŒŒÿ,þ«>§hfóÿ(1øx3˜¡½£éÙ¿%ù.Î Ô+9ï; =öz;ì,ûhìÐétèîc•Í7¶²%¨ ŸUˆàܹ`,mϼ?îGõ!?ñëîü´Ì¥±tfG—5?Er9£ÁÄåõsÙ–w4=ë•`V½{Ïg8<‹Ñ›Jó¦ˆAD Âcb dÇê j/nÂæÎ{iY8Åå'æô)B"n°ðû«¡Õ8•¤eÇFøD­áóV³Èá½Kà¥@:¿Ç*»®\ÃѲ®7{SK‹9ËéS:%ð]¶‚;í¦Rãö ~Ø€69$áÓBµò§·±õ´E1˜p.ÿ>…­b@•övîûâÓ«ÓÅ0´ä= ‚ b@þ' ÁœØsœàD ëtÊ Šù[ÿ‰áý/>§vVW²%l`àøó4UŦ8n;4fìòÁ”ç “ZŽ'ïÏ‹iëq’ïšM&¿e={4+;¿ÍùÄ»—¹sj_ÿ¨á¿ ãX 0Änæ¿ôõÿZ¯r4©–'ÙÓ× ·wÁ§F+Þª®O·oâîÓì»­G:· ‚ b@;‡•¡ëŒÜHPh<=ÅìOP¸˜œYÈo|ÀLíjú­kÅôâW)Ôq…uw™x¿e|Þíì ¥V#˜ÍFÌŠ­­%WÌMfl› šTñá»áæÓfØð#±º"ïQÏñ„øúcÊWŠ|®wKw%&ó·²PÜÇýá¼7ÃM.ž#GiÜÖÝ{œcžyr…r᪖üE²£V÷`¾Ææ Ø­K­oW"ޱî˜;mY:n…׳j&ÔâõÎd¾KÙDzÄpdçnÀ•è[DïÛÁç+ĆsDzîvß›æ¤wneÓ´¥hzL᳿æ¥\œÛWOsÒל&_¨g/àMãš°Oþm0è©Ø~£ëÙ§{„„_ÐÖß„ÈAD <˜¹°´?ù‰_:x'3WW~ÃtÇo™ób@‰9Â’i~´šß›J™=½ù ~û79ûõ¤¦ëCóÌ“çî=×p±ØáuŒžàÀøù“çY m>šöéDÂä_8­s¬-GÛ÷ÜùoV!†Û G‹Î Ž'À÷QJEuÚÑ¡†þnOk0bÐyàpOÎJäÄ¢¡|ýwúÈ€9ä^3ˆÊÚ ŽyçKúoäìíkÿ¶û·ûжØN†§£ gϤ~̺T˜*Þ­ã£ihug!ÝÆ]£¬g Ù\<@åÑ èUôž±…ºŸ©¾èÅpŠþ1—rk‰Þð%mÿ>M—×·³ÁØœ¹C:à­5ÓîèV ék õ¼ÝÊW¹ûòtEiÝ¿’﹕»uà>L·(2q6ïå‚°B½é´é4Êü ¥k>½w¦ËM­v“­i*©B*·îtj$èÏÑü‘»K;z° ÓH~«5‡võVC®$ÜÀïä uý×ïDa>{‚®¹…Ö²ž%ŽÀ¨ÿ­&?vß÷|·Ùƒ9}ìI°wÀÞriûÂ|4u&ŽÛT-¥(,`ô¬¥ì§#‹v¦¸½‚ ˆxÆ8R¹I ÆÌÝÆÕ°} 'z%y“®¥¨]ôO~ù;~á4Æ`‚o7"JqF›«& Ê8§;›&Óc2»¾™ “§ Ü|¬!d ž*‘cÎQüLYÑ©Nµä!a¸…¦X}Ü@Ç÷S¥|)JWi›tÿóy¦[W  ¯YSpÍ–Ó‚Μ£ÊÓ|eÚ|4î”ÏjüóTÜÆm§ÔôõäðO½÷waFÿR W{ =†T¢c·î$LžFÇœF QØõ÷zΫZ,ëëU1îÙ€EÆeož²žÈ…ëfŠÞ P0›L˜“Çʶ)½¹‘ͦÁiÈq+wQÿx†ùãvRuàß”ÑkÖ™¸sÇ2Ì¡GeÞyײs[V.Gùd1Ã7õfæ¦7ù¾•—t3|ÈÌ„‚ bàÑäÀk¯SóælþÙmdŸKC&%‡ÛÍ—ÓoèQ^Ÿð =ÊdÃ.x)]û%…Ä5NÎ8ePÖÜï˜L ¬N‡Év<\ƒ£]R#5ÞžTÇÑ:ЂƭýßD[ßãœ8yŒ?öbãÕù,ù´è=!ñG=ïCá`oÓPNcmH¯Ñ<«qô´hÂÏp ¢*Ã:eáðö†L]ø%Ý’^Œcéî,˜±_U¼¹×¢Çør”iZ‘ì™Þ®À&õ‰.h#¬4öä)S EŸô¼ùëwæëÊ}ieÓ_Ñèû ƒr¡Ó{òÁ¤…¸”Ê¢î©P£c¶ÍîÎ'¿(VQ¡XUX¸½Åç5óS£ÙzÞòBÏ IÍ0†_Cñî‹ÈžläWý¸â]f¥³©†ÓÀ¥mÛñ5Vºï©2=F5*úX¢cTÃEsAË[¥ N#vs*®*MîÝG”êiÓÌà Ñûf1ݯC:Ô¤Y©Ôp9Ï;‚1ª>­ýcŸ7#×Êæž3­ÛÖ’§|Ùgåû‘£Q?¾k”ô«Iµôw+Y'9jQ„úÍt>=ÞU¤y¼<´36õYË´éO™´¾Dk>-‘´ž¯tÑÔk»WêÄÄŸ:I‰ ‚ˆ^{½.ÚA4®›=5dk_µ í—§GσrŠÇ±\y*c¹£¸dz¦LѦNh÷ïËÙÆmÒÆ&ÁJwbx³þŒúäS¼³Çq:Œ_ —ë'34€nåRü‘´m—üÙŒ„ÞÌJ×oª“¶êùÑΛQÈÂæž}ÄÀº™ ´ÃûwâIDATxÚì˜GÇßœâî´¸»ŠC[¬Å¥PJi‹S(ŵÅZœÒ¢-Š·â·»»;w¸»\¾ý¿É„Í^rî÷þî™ç’Íîf³™Ì^™“Éd¢âA!б„dgP¡ˆ£ ‚«Ó#¢èì±ISAˆ!¢g±é”ÅÉ6§"éˆ0:ûo D$E A„è$Œ'ÿƒ#œÄÑ• º*"Š‚ BtI‹‹bFôp!ŒÆâæâ±Ñ¢A„è ŒFqôwñØ™Pj9êÅÐX\Y‘‚ ‚]ÄÑbDUH÷Ÿ³±C½0ºãÿºuër•/_~`¼xñ*šL¦ÄrïA„¡”Ëó7oÞlß±cÇÀêÕ«Ÿ×iž¿N÷,úÇ&Û8G“ kÂè¾qãÆÜUªTÙ¨í›Tn³ ‚CEòé–-[>Ö8§=5ÛŠ²&,Mgâh·mÿ=^¼x1;A‚µäÖ ‚ 1™W¯^­N”(Ñ—ÚC?8šiG‹‘¬nW³Ù|Y\©‚ B,°_º»»g±‰£Ÿ+ Ò˜­êÔµZh£ ‚Hh3þümçoÐ>Ž=‡eÌPu—{)‚ Ä"Ü)à CÑ-ËQ/’‚ ‚[rX¢3áqAâš8ØÁ(ŒÎDRAb Îô͘89w­ ‚ Bl²MÁµM¤ ‚ ÄFËÑ©õ˜[UAâ’`’+qA„8OPâ(nUA!6Z‰¦°ˆ£ ‚ ˆå(D“/FëÓxÉ·#‚%xĶ4÷cOšyÖLnøkÿô L4êCúf‹/ù89$öz§Bî4`Ÿù[?WåŒn4¸”ã-ݨ]Gñ4n”ÂÛqß¾ÚùvÜöwÃTñLôßkë›IåFC?ð Z«|(°·-–Ú<5ÝwÏz®N…<èÒSZsÍ_j· BLÇŸ{SÁùo#ô=’x™(¡§‰¼u3Âúj:¡„ÍÝàe.’ÊDɼMd¶8¾†ýqH­Ìn”5±U€ÀÁFÞNß·õV_ÚzËŸÊ/ó¡ŠܨKaª·ÖÇaŸŸxÑìófZuÕÌÏs$5Ѳ^ö×_úõÛëK#?ô$íZ°`ÊÁÆÖ÷[rÉL7^X¨gÑw_Ù}齄&j_Àê¬ñ¡ÄÚgo™ÇZn6KÍAËÑXoz î»ÿùÒv›•¶_7gîÊ£ME¯Ä¢·Oئ9Ý)­f=B•eùÑJº÷ÊÂÛëfu£O³¸Û…wCm/M˜M”Ø“hs/ܬíGÔ8‡;¥Ô,þÅ<è‡Âîôù_>–b¿½~Ú6ÚvÛL53»SÕ>´á3/j¶Ñ‡.>u´gŸ³ ß¶ºVQ]uÍLMrºQétnlmî½ëO'ZÂïfZ,ò+"“äû "Ž‘FMl”uæ Xt šÕµª–ýrÈ_²îŸ)‘‰VjžŽ=èôc }ò¯Ýò„õÛG¸?NùQaMŒ2&|÷ã†õ asf9þqÊÀrLêe=¶RF7ÚpÃLs´× ¤°Ð7yÝ)¾öÍüUÙÓ~|ýu¾”7™‰&U´nƒ¶°fõÎýØ›Þh§û½¼¿¿ÙzÕ´k¾ý2 Â&¢(Dªž‰H "Žï«›®S/ÂZ Kb/Çí·ZÙÏŸ^ûYsx!`~š5XF³º”8‹øÄpÙe3/ïIÇlVåéGÖ2ܧýKxÐ Íø›vÚLES[MÑš™ÝX8=5Ë1¾v];êy±›÷ú [’ɽMÔ¯¸u/âNS4±<øŸÕ-‘ƆiëÃçù2—õCAà° ïwðÖ>×)í¾ÞbݼÉÝØò„ -ëÉ‚?é¤ß×° ¢ˆ£™")Ö¤‡Ä1¢cŒßæõàx›‘5áBÑó§&bãûQûí¾,Œ­ó¹SΤ&ú|ƒÍÓ,ºDžU+çI3Îú±HžÑ¬F¸PaÁ!ÁgáE3¦½šxÕ¬¶ š…xðþ»Ä$Á¬¹æcînE<¨nVwJ©‰âŸ§ýèŸ fcÕdKbmV\1Ó”Jžìî…(÷µÅWÔôâçn¶¶Â[{ýµf¾µÅx-u|»X!ÂåÒÃ}ÊW»0Z\¼,b)„¦¨ê—ÉZE …¸l9†XI(zW÷â¸Ç)â™Øº«žÉ¯÷¡ËÏ,tæ‘?u.äÁîÍíšU¸é¦UÁšk\¢,N¥Òº±Õ§€0!&á&Ñ,ÖÚYÜ©™vìõç:©{ùejÝfw§¥š5ºþº?ÝÒ¹<×iÏÛç'j±É‡ÅyË-ëû#ÉFYŽÀK³HKjVæ![’ΈÃ~t?<,G> Yü|ÉÿíKí¿YüÍN¬IAw•´þss'“‡¹y'Ôþ{ZµRRq _³+”ÒÄ1¼+ÏÞ5î_h‚Wê~Û°‡û¯­Û;n¦ÙyÒ¨#~4ëÜ;QÅñ(FË1¹¦=52»Óî;þT+ó;˵QwÎ&=úÀŸÏµM¹jš÷ÕDµñz_ÎN…@v*èÁ–äFÛp“7š5˜Èë…h·Dm±Oµ‚¯Dg}oz£õ hÖîžÞìJ®˜‘èËÜîìî ¶¦Ù„Ñÿí+JfyAu ¦ l)ãQB/wùu‘ÆK3]~ô†–ŸzDỎ4‘L )ÄqŒŒ¡ÁaõU3Ï@ âz<¸BaºïÃVÛîúï¬+ˆ’dÊ¥w£¹ššƒ–ÆšÀíÔ„q‘&–=5+Tý|7ibwD;ÿ‚j^<þPw©Jò`V]éC>Ú›` ebO­ÿÔ›…Òø¾5W9ZŽôÎñÄ1Ì]wý©ÌëýÖ[Ž!³‰-Ƥþ/¨GÅ ÏSDQˆ|Ð+˜.!åLFn¿MÏü<Å‚Är oq½÷šØ2›zÚLÍ5KêÓ,n,Ž~qï•c²—JãFCúi¢ þÀƒ~Ö¿2h ,³oóºÛ-į6û²¨¹ïÏ¢ ¿µh…¨øÂ€ŸVk›|î4æ¨=zóNŸûZÝ¢ ê{n”ÈÓ*˜üåhÿþÖþìc =óywLBO«5 ÁM¨û?~Ÿì1X¸j{ìö Òbæ×Ï©~áß(ŒÒ& ‘ ê`ýü)hÚÑgä‘8…µŽŠ@ q]È’pŒ¤oý¡ý^Þ“ò$7iÖ¤?g vüŸ/ýVÞƒVÖôb±Tc#1©@×Âtì¡õùŒ³fEü^1 de-¯@¯£¼mhG«­¾.‡W`X b¡ˆQ"9§Å&_¶$[mñ¡¤šœ^{ý®& _r7º£=þd廡"!²u>W$Ú Æ˜=•w·® DÙSxÛâÞÚoÌÍMRq ÞjŠ”[I-^±í–™ºíòg¡QbÚR³›h–¡¯-«Y¬iâýl '\¯8¢úûn4 „'ÝÖŽ?÷Äù›Bp¾Ò¬×ŸöûÒ±®§t«‘Éþ:c¦ÌT7›;õÒ„c.ÝݬŸéß«þ<-ÞÆÚV!žxÂ/ŒwÊbÍ@µ`ú ?Jìí!¿!Z8ž×IUGM"Š‚ˆcØÁ”jAÄšùÌN- C.HnQ±?€¡l󟮽ÀÝÀ8¦–sö^Èf……¨¬Q«dYÇW¢8£È‚·Ü6ÎóÚkos¿¾³•0Z zè2ǹ@´×Ue4Šõ(ÄTq4Æ Ãú<¢0‡ptÂ[NÝ{ò¡ ®ŽÀttjH‡¿%øçr–‰êœyÆuqFûc›õ(.U!š©£µ@ õê()ˆå(DX»cy'‹µ‡.â(D³Jju©Ê„‚ˆ£Ñ£ kq˜GÄQˆ^ÕÕßîö·Nš£‹=Š` "ŽB¤õÐ¥­¢o%%W$D6’‡ç´Ðp‚q¸Um•!2K¿¯jÓŇ­•ÐßLÏ= ÏБ›iÅßi|ÿN´öŸiÇ\9}Œæ`ÛöŸ“Åì%ŸCJø—€ž½P ‚XŽB$áóÿnß ?Ÿ·´sí2š0¨;¹¹¹QÒä)éу{TµNJ˜(1eΞÛáÚ¼¼¼èß9RÃo:j¯'ámgì§wo“—‡TgAD…°Û‘ï\QäµÂûVªYW·›tãÒyªÕôÒé+jÛk}[ã*YácÞçÍëWäóö-¥L–$LL'ì¦üÅ> /ooºpòåÌWH⦱¹ŽJœQq¢J¤"‹?GþD+çNãÇýZ5¢Ò•«SÛÞƒ©ígå©Bº¼}ÿö ”$Y *Y®·‰ÿLCËfþa?ǰ®­ø½¯ÚÒ¹‡5+ô&m_»Üþú'õ›RçŸFÉ+B¨0™¬)`(îºâi+˜ñÚ;ÿ¼×åVÅô¸að?zäþf^šÊ÷á-ZØ"¤]Ê«Ïéí›7Ô¾~UêüãÚ¸ríÛ¶Áåþ­º  úš‚º%²Óðé‹)O¡¢üüÆå‹Ô¶n%ê5r*Q†&þÒ—'IÆÇ$LœD¾÷JãY§È3eF^ÊŠP´&Ê:•Y›+±"…0pªYüÚ¿·¶âk+f]±ˆå(Dºå˜(qb.îîîšu˜ŒŒýƒgD™3y,-˜6‘÷Iœ4u8ŠJ•¯¢µî×÷æåszýâÇ(7­XÀ۞ܿG)S§¦û·oQ©rU4a!ôˆ8 AˆcĪ涵+4ëïù¼}CkÏ¥>#&Фá?RŸÇÑÏÝÛS÷¡c©ü'Ÿ:Ó·m3þïîáA^^Þ”4y ºrþ ¿®+Wþ‚ÚçË"vx;!‹cˆW–¢a;c PÌf3—›7½È¬ÓBS ã›×iù¼ôìécÚ°|ùùúRšôiØ”ÙÖw5¹Q™ŠU©×/ãhô€ntâàêÔïgÞÏÇç-MY´Žž>yD½Z7£,ù QÛhxïÎ{„š5{®(ɾÂkyQÆŒÞä¡u€àa@ôÇÍæVÅc™Œ\“1ÐL,G!˜¸»EžÅ8ý·áôèÁ}­áó¤¡ã§Ñù3'háŒ?¨kˆü:²Rk•ÈI~~¾œZ­N#¶lŸ?}įÇOŸ?ð¥÷²d£ßg/寖çŒßGRùkR¼xÒ™!Œ*·@PÁ¡˜"®ô:†~›¹ˆ&JD^^žÔ¼õw”(q>y&M˜³ŒÒexÖ¾@û¦ôß§|…ŠðqO=àkM—.‹a¼xñùxwMÙ?¬ô1Ù·‹j5h¡×.%rŠ D5b9 Vq44#ªJ Y~ú·R.о¾fwÙ›7¯©V©¼ìBÍ_¨˜ýõ[W/S†÷2Q„ xòoooûkêZÓ¦K/.ÕX€¿ÜA,G!:A±²–Ÿ"LY¨6q1yMœ½˜Ò¦ÏHœ¡ïû äÔþ[×­¢ UãÇ/Ÿ?ÓD6!?Þ´j­Y¶€2gËAÃûuãá)2[ Ÿ>NÄr¢åH­ÈðäÍë×l")ÈÍ ‰Öí½”å¨½þII«åX p1~ýìÉã´cËzš:½~õ‚®]º@3e¦éÇÐŒI¿Q¿Ð‡«R‹:ŸP¶_ÑÀÑ¿S²ä)ä‹AÄQ/qŒX¿äéc‡©«&`ßÏLyòægK!Oþ‚Ô¼ÕDÊW°ˆ}¿}»¶ÓÉ£Ö‰ÉW,˜K_·ëDf?_ªZ,7Ï»Zº\E:°{ýs&•)_™ùkÁ Øó{Z8ó/j×¥§|±‚ „Š`Íãïï/3äÄpÊq“¿—+Z_?†q ªºë&×ê%[—HÌÑcöóãTÅ*ÄLžßòòò¢:ÐÕ«Wéÿû­_¿žE|üñÇÜQè(\»vj×®ÍB«\ñôóó£#§/„ýË09{*ª+„?a± BPÄè˜#,,¬DˆäëׯiÔ¨QìF„âuÄæš4iBC† ¡6mÚ°‹rìØ±äéééÔíª'¤û+ræÌI“'Ovp¯¸{aåBØ€²Úà¶Å63„¨Ê Aƒœûò¤Ûš%ü×_±Cø± åÍ›7”0aBºqãõíÛ—¯×2mÚ4úí·ß8‹s#nŠŽ:hgÂ\lR¨æÇ4ñI‘â""Ža"ðÉ'ŸP¢D‰8^ãÂ… éÅ‹ìj„ðœ={–ã„JŒ‹Lž<9[`]»våx߯¿þJóæÍcqEÌÿ»uëâýázÅ1Ÿ}ö»//\¸`ŸæÒ¥K|--[¶ä}°/„ª`Á‚\p½?¦ 2ÐÁƒ9Ž9räH~ QuEñâÅ)oÞ¼Ü)P=j$à@{÷îÍ®eë2{öì”-[6¾oס„å¨o˜B}JeË–å}`ñBlaݪa"p"Ñ.QÄኅ âüzŠ-Ê–qà.…›ôŸþaᆈCô ް˜q TŸ~ú)M˜0Z´hÁ÷DÑ¿þ, “®„Äb IÙ¸n-;r8TÇuíÜ1\­”+—.R÷.ø±­³à¬` »/?oDW¯\vz;þ×1tÿÞ=‡íoµÎÓOýúÐ[·Ä*ËQˆ!Äè˜ã† xˆ‚B%¤´nÝšE.IQ¦L™ì–#DK%¿ÀbJš4©}þF ÄbWdH÷ÿú믹d§"+qF€¸(†tÀíé ’Š8*T¨@={öäsàýsäÈaß÷È‘#|¸}Á{ï½Çˆ)q÷âª@׊„î¹¹±0"Úàó/\SD6RW._¢ÎÛQ­ÏjÓMð`íºbß¡£šl§Þ¿ÿŸ&NW‚um§OŸ¢O«ìôµ"E‹QÎ\¹¨Ö§µù^­]½ŠÆŽO³fL£!ƒ~rzLï¾ýiÏî]”Hëx8{wí~ž8~Œ®_¿Fc~ýݾ}Áüy´rùRêÚ½GœmøñÛñð]s#ñEA,Ç—*,¯9sæP²dÉø1 ;¼†aˆ=êÅîGXXˆ ¢AVà t°Ðô?àî¯@6é?üÀÖÞ¿aÆ|}ßÿ=çLáöÄ8ÄzõêÙ·C¸ –>å uDB 1„ÕìlÒm$þÀ‚Õ¿†ç'Ož ßÞ{0¬Íö¿£¥+Vi÷5mÛ¹‡ök¸pÉ2>|õºü\$+a‰«{wïГÇÉ_ë´à1Ê«W/©qƒº”-S‡‚÷€~òì5v%O‘‚ví=@:v¢c§ÎÒ¼‹è¬VW=zønqgíÿ7­ZÓ•·Jv­c2íïY”.}zþþñ½â}Ÿ>}¢5Üþ67 &r÷£¾ý¤U+WÐáÃù9®ûÏ)“¨U›v”$IûþqËEj¡ZÕªÒ¿+–…É­*"Ž!ÂòðáC¶ÔàªDìã‘D‘€Õ¥4lè…"‘nL•dóßÿ9M¸ éþGeQƒŽ=š…Ü®øWç±cÇìÖ%…ðpÍp}ÂRÅvX­HÐ8vïÞÇU\¼³gÏf bbçGòÍ·ß~ë°=„?HWWC·`ºÎ`Õwü®¥Iš3mOi" !ÊŸ???WÅC»‡°ØÊ”*NcGÔÄü?F™ª\;G ëÖæç8Ç]­“öë˜Qü|ýÚ5qÎEê¦UŠ>ýШÃ4 z™¸Uq«F4ˆΘ1ƒEI),Œsìׯ[jÞ·+âl¿üò '§`(UîÞ½ËîI¼†ò°8ËÓý# Éþ°Ì~ÿýwŽIb?½…ÑB̉<ß|ó »KqÝHÚÁðÄ7!n·‰'=Ô^W™©Ið¾Š5jð$!¡3pøðaN¼1‚ÄÜ+XÕ8?Ü\ Ü£ðï­[l&dÀWvíØÁ.ϯZ~M¿Ž£ ܇׳¼ŸÁáùw¿§î={ÑÕ›·į‘tF»÷Íø›Z|ÑŒ?3€U–^³ììÛû.[²„Îk•>}vofΜ…éZZGÄn1üÈø‘Åq—.ZWk{¡‰âÒÅ‹hÔ˜±üýש3Õ¨ö1*TØá3âÁµ«W©b¹éÀᣔÚ6ĦtÉâ﯎¦Tùè#þÿcÿ¾\×j×­'­¯ âQÀÒB2bnj­·^½zq‚ ÄnOX|°"7oÞÌ‚€„š¦M›²5 &Äc!^ÈäDRfÀp׆db…Ø®·èìfºv‹‰ýaÂ’Ág€k.ÀŸþÙ*+¶µÕ:vŠ—/_Rîܹy¼¢þ¼Üèüø#»TÑ9@¢½½×ŽÇ¾8:ÞD¡´iÓÚÇZc² ¯–ûݬ9§çCvñ¼¹shÆôi4Á"úæÛVôϼ¹4gö,Zº|%½ÕîuƒzuhÀ©B¥J,èê,÷´N :>xþRë@ÉÉ•«Ç³þžÁß{—ÎßQ†Œ)Gö”6]:úí×±.I¨]ßßwâÇuëYg,š«]îc¥ÊU¨G·®Ú=¬G·0¡‚ÖQÑ[;¹³gµ{4À‡”´×Mxâ²eTUH|öš@‚:¤d¦ "ŽaÀÙdàp_ꉱ~@Ycx îÊ•+Ù*ëÑ£‡}x…>Á§]»v!Ú‚cD½·ƒe”%‹ýq|'ëâýœÅ2áâÅxNg à ˆéîÝ»íÏÑ‘@ ׎¢,H“Ñâ TùB"”ÏËwíº ´X³Äp/Μ9ÃÖcÍ:DrN«ÖmhðП5+£-(¸„ÒÚ,/eMäqÆgÏŸYÅÑäèþÕ_æÏÆsCûäÉcš¤YîsæýÃë¾}{Œ[ü‡KtÂDǹp·nÝB…‹¡ŠšP“­Ñ~üø•)ó!%Ö„TÏ…KÖ‰09CÍrܳï€}r†`9šâ¶Û0QâDü›‚%.îS!:ë&,«Íh‰é3Gñ¬Á°ì{°8¹¯¡¶áê|èl4jÔ˜6nÜ@õëÖf+¢hÑb4ÎfÑÕ©S—5nBµ?­I Ì·wûÎm»eŽÙÃ3 ’©Î;ËÖ7&L(P° ÓýH95ëO_®\¾LSÿüƒÝìOŸ<áýÒ¤NCsÿ™ Ï€Î†Ÿmè‡ê©mÁ‚0¶‚ÎH·ºP»ö¨ù—-¤õÄrb@§"0 —€d@ òó&ØRC² bt4k lX¿ŽãtkV¯¢nÝ{Ø3„aÂrÌ‘3'?GrŒÞ­êŒZ5«Ûㆠonë±xOûçÖ]ÖÍbEÑÓ ~]jÚ´5ÔÄ׎;j¿ý Ì–%“ñ¨8cè oFAq¢™:º°$Ma8í»ó\¼t‘Ž>L»÷îåÉÝ¿ýúkú¢¹u¬åêU«(”)sfŽ1ZW±Ðé3§8ö›7Oò7ûqR’$‰uïe±¹qÉþÛ¶í¶ÿ[©ë?Ðá#Gíû׬YƒÏk<¦|¹²œÜ«¯ví:ç?|è?Þ¾mÑQäÉ›nܼe~õÚU*_¶,:r„­Ì ,óØ :5½{ö`aüòË/ãÜçD…¸ÑÔ¿ÐXCë×®c×&\œƒ¤ ÚÝÔe>üV®\Áã;Û¶iC]ºþÀI8›6l¤ÒeÊP’¤Ièì™3¼o]<ÒivˆÝ¡Céĉ“ì"ǰ 'ybs•êY´x1í߀³jo}Þrœtä¨Ñì~U1ÏÙ³fSß>½~ÎâºÌbEŸ>}©ÃwãN¿Ëd¢•Z‡'(+_D…XdX†.ËuݺµT½Zu¶wíÜI#FŒ ëׯókeË~Hýúöá‰Ò!ž+–-§FÑìÙ³4ÁlG¯_½¢}{÷ñ8Ó”)Rð1ƒþÄE½ºtÉR:¥ ÞCX:vè@ âÌb5AÆ€?A#Í*DRT]ݤ sgÏáXs£F iÍšÕô똱4p„½>}üñGŸŸ¥Aýú´vݺãa‘­×Ü«IEG!î£Q$MÁ:öÎÝ;£2eJSµêÕ9“XZÜÌÖ­ 1ÅãaŸjÚ]WUD Aq„H@HADHAGARAÄQÂ$šÏž=£.]ºÐƒBtÜÂ… ©wïÞÁÚwÀ€´aúÿ>½}û–Ž?NíÚµsº/Ö·,X° Ý»wÏaû?ü@ãÆ Öûá=\uÔü¡ú‚׌Û0®+p­UªTáÅ A?âÄ$G¥«W¯RݺuãÄ—ŠFwÆŒT«V­@gÁ~Ÿ}öuìØ‘räÈaß®ŸÐu`<õzpسg­X±‚† ¢ãÒ¦MKsæÌa‘Ë’%‹ËýnܸAÿý7}ñÅ4hÐ Jž<9 ÊöíÛî?oÞ<›J•*Ù·}õÕW|à?þ°o=z4={–ÆŽkß–;wnAÔ9gœ8q‚R¤HÁÇþþûïöíXÜw×®]”9sf‡ý»víJݺusz.___:wî\‹)R„;®H ]¸pÁþüرcT³fÍ ¿ƒeË–Q©R¥¤%ÄrŒnT¨P¾ýö[‡mh .L¿üò‹½ñÅ8´üõ×_T½zu‡Õ+~þùgúúë¯Ã|ýãǧB… 9-/^ Õ9a‰Áª:þ|ûâ^Eöª+¼¯*[¶láïëÅ‹ömÿý÷Ÿ½¼~ýšž?NwîÜq(ôøñã³@_Ã=PÌœ9“Ê–-Kyòä¡PÑ¢EµÄþüóO¾_~ù%•+WŽÎœ9ÃT±bE ð믿òvt@Ú´iC䎶ϟ?Ÿ÷Áuá|îîî´wï^ÞÇH³fÍxŸiÓ¦9lÇþØŽóë5«ÿœÊº5nÇ}3‚û€s‹º^=¸Wê  ,lAË1Ë ÞíÛ·)C† ¼mõêÕ®½öíÛs -Ÿþ9[pËÕ¨Qƒ­ŠåË—Ó¤I“Â|ý°H4hÀ[µjÅ L:uêP–®5<ïqx.´sçNþÜF\‰î3¬?W–åäÉ“¹èéܹ3õêÕ‹ž!œ§@T²dI¶j`-¬[·ŽHì׸qc¾®²£\nˆW!Ö…ó(Ð(£ð—ááÁ•ȃýû÷Ó˜1cXŠ/N}úôá×ñyp~¸ ÑøÃëÛ·/U­Z•V <,‰ÁƒógFC±Ë–-»ÁÉ“'ùš#J à!RꞬ\¹’Ö¯_Ï 7\àÛ¶mãøž‘ï¾ûÎn­íÛ·Ï¡óÁ€•‡ïQ/²#GŽäxñbvBlaõôë×ßKÏ'Ÿ|ÂVΜ9íÛp€›¨@¼׃ïÍÍ›7·?.]º´Ó}`µ)Ë VðáÇù1¾7EÞ¼yŽ+Vu¨ð¹±ï‘#G좌ïUïúUL™2…뺑;vÐ7ß|cáI ÷6a„Қ âVnÀÚB‹Fî/¸åŠ+æÒÊ€û [4Èh ˜H + 14TF÷¬ÓM›6qc¦,Ñ!C†p‰†Â…†×\ºt‰:tèÀ !,~Û¶mY®‚‹ -âiÎ’7~üñGJš4)_W½zõ(þü,ð £@¸²Û+W®pÇ­,šË—/³Uî : ú†r"®¦F¸@gÍše·Ä ¸—p¦L™’ÐÅcUônßž={r îmX¸6µ õ)µ?êÞ!Ô¯à¸UaÙ*צŠCâ½PŸJ”(Á±­[·ºŒ7FèèÃ[°¿ ˆå AÏ–¸¿`Y<|øÐé¾°Ñ!&ƒ,$4fCXPeÊ”±[ z`="kqX?¦U«Vqœ/_>Þ–ê:uê„ùsA„!ʪÃ{êEO×£,£xñâñçÀu c ·š!j‰ádz@DqͰv”+Ù<}ú”Ý“°ä`ñ…X9°ìñ=AP H¸Wè¨èY°`O5v5~úé§Ažu.T}’t2”åºdÉêÑ£?†Ë®O½kßÑmŠÎ”ñzΣΥ„  ã…Î\XpæÊV !G„²Lð\@áªÕ'o ‚XŽÑXD¸VјԮ]Ûå¾hP›6mÊV" ôÒ!4ÈîD#ŠÞ:Ü«Î,0·$¬HˆÑõë×y;ܳŠ÷ߟ·‡‡¥…InÄà:»víš}›rÂ¥«¬=x֔ƀû V“½¸En5Àu4lØ]Ìr|oøœ(ˆÂzB,^#p}æÊ•‹-/Üg¸G±¯±C‘úé§ŸøàÞAì ’èÁÕŠïXŸø£âˆHÀjÔ¨ /ꇱ YnW¸€ÑÉPI5¸~tŒ` +1‚޵Š$2$L)±EŒÎ¶Á;÷:>Ú?Ô x”Amsæ=tè_#Bèdá1~S§NåÇÊ«ïƒ}ŒçÃö¡C‡¨k‚ –c4 I“&M({öìÜx¹üÀZc†,S4h£FâØÖÚµkù¸DѵlÙ’:cc«¬5_QÉwïÞµ[kh¤ hñ^úÄ £õ¸Õø4ì ˆó‡XgˆK"±.b•Q \’°ÔÕÐÄÁ3Jˆ“Ê.vσ›<Žƒõ¹fÍ>Θlפg®v½Ö8dc¼ÀÓX ¦©:+ˆï¢sw¶þz`qb8¨ð1xO¸Ñ‘ …ï Ö¨>áîs=ƬV½u‡÷Fî¢E‹Ø•­:Wwtªp-ø<ècÏðD@TaIëë1¬L¸¾±=¬Ö¬ ˆ8F07Xh$\%“ÀÊ@Öâ|À¢4d(.]º”{úpQê]LãÑh!a¦ÿþÜÃF, 6€u†éôéÓ?DÌ C‚ *¸i+DÃŽP¸VѰ¬^Œi„°¨ ¨îi$.!V ÷*¬:å¢ÄµAƒÊøD&%î „÷I/<ÎÀ{ÀBR –w2,AWÀêS"\ƸGcf-¬]\À¨*n K uÀRÔ€• ÑB‚k3tâTÇÍYB’’ÐRÀm W-\Å΀§¿}g¢ÁF‡ÁèY@Ç1YÔyÜûdç ‚ˆc€žqP …F ®;4°ˆÙa09\_pu¡Q@\ B`…Á]k¢ŠÞ¾Š9¡7ŽÆç…+±2ôă Ä.:œ-<$à8d/ªç¸N¸Ë\}ƈÌTÕ[à¡8> ¾Gˆ Æ$Âú‚x8ªZ <ú¬U#ÿûßÿì‰~ž–£1Ù Ø Ä±9X…Fô2ÄJ‘¸0ÞSÿYá5ó ’•à5¢¦Â3ãˆ"£±Dt2ãFQSÏé]¬Hª‚;ŸYÄQqbHPBÆ&8`ñ ¶‡¸l`iý‘e5¢ñ…e…k ,Y ¢7%\âˆ1:J¡ÄkèÀ2Öïƒ&cãíååÅÖ›+ ¡u6Ü™®˜>PY{ú¤XZÊ¥êòGg³jñ]à== B¼×·<ÆÝÂr„õØÐ X”˜ËÕ•¥ŒXcH’fð™`åb˜@Lu®plÓÏšƒ˜»³É!6`2Y[>w]ñ´´(ÞšåqQnUÌEY:ø¯ b¬jê2¸U]ÅÖ‚Fg¯‡‡˜F7®u ‰ 5DÖ* ê„*RG„° uBÑã|k+¾¶bÖ‹,Y%„Z "JA¢q« ¡8AADD±AˆCˆ[U³ˆ†·0ŠÐ ‚ –£ç…QÄPG!Vˆ¢ˆ  "Ž‚ˆbÅN„QGADQAÄQˆí‚Q1!VŠcxLâ,DÍ0‰´ˆ¢@D»#3äQ… å·è"Œjª;g‹õb’q,åêX,ûuïÞ=‡í¯_¿¦¾}û:¬óè ¼Žy`±^§+p ˜'Åx}ªs‚ùc1a:öÅ5={öÌ^Ôꪃå·vìØ!•PD…Ø Š!Æ¡C‡òDáz0Y6vÖƒ%¶°N¢³‚ DZ´&êvZÉ5«K5aÕ=X‹\—‹r&|çÎc¡sÖñÄäç(X+s¨ëñÇcmOˆ2&Ç„åª`=P–(›5kíÞ½[*£ ˆ8 ÑAÃjñ…ôø£GÒãǶíß¿Ÿ—Ù2Š,8}ÁjXú ë"båˆ#–OªÊe + ¢„U.°LÓÁƒù9 Kaµk׎’$IbßÀÂÄ &ª(‹Ó¸keê=z4/_¥€`c… €%¨°°°X»~ø!•-[Öþ×úÃ?°ÈB¼Aˆ|$˜(„«À†–>Ò «*}úôÎפI^?îÉzõêÙßÛ°n%–nRÀ]Š¥š`µÁ%ªÐ‹5j,î‹u!–ŒÂZŽF°Ž¤ˆ³«Å¶ùÇe‹—cdúN>+:jg¬§ˆÏë‚Ú¶m[¶\±^¤ b9 1ÌÚ 0âÄñR¤Haß!€`Bõ! ˆâ¢E‹8¦1<þ<»2 .ìp–åBQ®JX¬j›³÷?~| ÇÀJ Ö®]K|ð/â QÄš•ýû÷çdåÊ•iðàÁ¼póˆ#¤Â ‚XŽBl³®M¸*õ‰.7 LÜíÔ©“ݺˆÍa`X‡]»ve¹yó&-ZÔáØ¬Y³òå>…©UíõÉ0¡áÕ«W,ê/^¼àsÁµ‹÷Qî]lw¬Eˆ9ÀÂÇ&L Õ«W;ìÓºukªP¡‚T}ÊV€àÍŸ??À{ë‡V¼—z®OÆQ<|ønܸÁnT€ÿj›ÞÚýñÇ©jÕªö„œAƒñ8½C‡±Œx¦+2eÊDŸ}ö[Àú¡¸&X ê9¬lAÄrb‰•ع6oÞLåË—§ž={²ÛÙ™«V­âçp/"Þ†LRðóÏ?sÑS·n]jÖ¬qÄqâš3gN§"¤'(kbŒ¢§f͚ϑ£xóæ gÌ*+âk´^]D¢Ÿ~ú)€ˆ¶iÓÆÁÂTV¥ b9 Q$Š=û,¡õë×óX{ô>{öldh"&8qâD‡cà… ÁjìÒ¥‹Ãk°ÒÀ¶mÛ¶çɓǞDã*¹Eeª ™Ü¬S¦L±Ç K–, 8«pknܸ‘Ý®Ê 28,@¬Òø¬U€s‡|+“èÅQY¹p‡&HÀžð¾úê+Jš4i€ó`ÇéÓ§©Aƒl)£S€c†¸äË—:wîl© ‚ â*ïÁŒ)®Ø°aC€iÀиb<ìnݺqÚ¼jŒ0T W¯^ì6Ó³råJjÞ¼¹Ô ˜Ø^¿~]¤Ó‡Aò¸ÿÈÔ„Ààþ¸[á2ÅØFˆ"2ḟYm`q"Æ×¨Q#¼®ö…E©/Ë–-ã×`µ_ƒ€…¶3víÚ5»%‰˜¤>™`ø‰³ \|OOOÚºu+íܹ“ݧzp?`¹Êl9‚¹Äø˜#â2pw!]n-̬‚˜ÜT*îƒé¹0“ @#—â[pÁJÀl'±*X¥K—¶Ÿ™‡8¿··7?ǘ4%¨8¿zk&(k#¶ cp9uê%Ožœg¸ÿ˜%߉šQ 2„ﳚø.Õ3fØû#æxøða¶à ˆtŽà"-S¦ Ú7º6•Ë3mÚ´ölÕ°‚áø<¸vÔ ðM|ø»¨\¹²å‹/¾°ôïßßá4«Ðòí·ß:=öæÍ›–J•*Y>|ì÷ ê˜)S¦X†nÑ:G–Š+ZªT©b™3gŽ%W®\M ¹i5‹&ê–Ï?ÿœ¯õÞ½{–,Y²XÞ¼yÃçÀ|Ý»wçãpõ~jŸ¸Ä™3gø~ Ž¢®¢Î¢î¢ž„¶Î ‚ºfÓ·Ô6½KhÓ?O›ZFjÅ]W!S…AäÔ€nŒw[³fý9^C‚Àp¬Ê¡X ±Ĩ0‡¥zŽÌAĶ zD|8DZ ;† ´oßž§kذ!ÇïÞ½klŽØ¦@öìJAÇhRß‘±sã!Žê9^s¶$â„j2j ÂVìÙ³‡§/s†J´ÀÀuµª¦êÃrUz°~#²ƒ#¬Ã‰…‘×øÄÂÉú%ȰԙZN«@ö1²z° ‹)«¥¥0ÉÄ€xÂ{$na‚ Abr „ .¬‰kbÅ{=°ÄŒ7À-‰…á,KøÏ?ÿä9qaÙÁŠ÷Á$õF0ï.&}@†2Öaļ¹ÎÀð ãÊFîß¿ÏÂŽ±·XÍ‹9#KÙÌ ¤¶mÛ²èc…AD…X ,"éJ a±¥H‘Âþ1<™Q± æ·U`Þ[X€<,SÖªU+"fNÂPå²íܹ3/–\©R%Žb&$Ä1DK•ÁMÖ%¦Ö®]ËB±°pÍb&¥þýûs û„ËøÚµkÔ«W/©X‚·ª" ‹»Õx<¬:,¦wi"ô‚ $HÀ→-[6Ú°aƒÝ’lܸ1/[–={vû>Lˆ&¢ÇÄý0.Þ cc‘Œƒ÷Çdj*@LD å!ЈEBÔ0w.Ä‚ÿÎb” Xž™3gæÇˆGbL,b*~‰‰) š*TÊ$"ŽBl¾ðJL¸09ü¥K—xÛ±cÇxÛñãÇ$ ©‚¸!\¯jrù p|él×*öGÜër"KÖe¼xñX•Û±FLˆkB6êÈ‘#Y,«U«ÆÙµkWkZÿX±³'AŒ!„?Š‚%Ò°Ü㼘xÂÕg“> a‚ â(DˆP†VXCr,ÄSðae ìèÑ£üÚæÍ›ksØvéÒÅ„•Ù¡Cžû¯;­èšðau•úõë³e©sBÕòeH Á ,*!Ë”A8‘åŠ÷Átƒ®@6ëgŸ}Æ™¶ú¡°8aªç®®QG!– dhŽÝ²e •/_žEíêÕ«4sæLvü‡ÏÛ·o_^sS?\´iÓ†ÿãXgï«“ÒݵH8êãX£3Q¢DüV#D[= ,d ¼yóÚ â¢HÆQÏÇ'LD…˜"†FQ‰H¬§õë×óЇ4iÒ°„B‡ùo'Mšäp-&L … ò zŒ[D¦)ÀÿÿþûÏ·)bjÀ>²F'„;blã³lÔ¨‘õ!f©¬J0a ?S¡B…Ø ‹IéáâÍ’% [Çp«"ƒ‰%Î\MŠ/Bô!XÙªA ²b†èjnU’~_cViD,A…ÁñYœ víÚ4eÊ*¬r(†BÔ¨Qƒ .̉eÇ:uêd·zaÃëÈPUb†Iå1t‹aC¬ªøâ‹/¨zõê<¯ìäÉ“ùšäqT.[¸C‘ ¤ƥΒ&Mà3ar¼/¬P,’ DZ+½`ûï¿ÿžþùç™4P'U»#s« ÑV…¸'¦Î2¼$,D¸!Äëa!‹¢¤^àn…À@ØànÅ0 ˆK‰%ØrT#’[\ƒØ¥q?<ÇùàÎTV @¬N4¼ÞÐI@¬–c¨EÆŒíï¡2PŽ¡Ÿ"NQ‡0nݺ•vîÜ nŠÏ†¡$˜P@M ‚ˆ£Ã2¼¬HÌsš>>²žc,9W1G ”ÎzŽF‘ ÝãD¸7;ˆ"PcXgÏBÆéÓ§Ùš—õ…ˆÀËË+ÈõÅrµ³Cãbu–ý9\‹FEAˆ»ÈP!€x6|#"†{ÈŒ(‚ ˆ8 1Ê’1AÄQ‹1”"(‚)BlBbŽB‘ N\1"&é„ z¢²qDø„#ŠR/ãvg(2¿GÁ%œïª2†×vA0.l­oe +!ªÚGÁeäo´‚+z¡­´"ž‚3‹A‰£«é …¸%‚ª.D†w+ÖŠ#¦þµ˜­¤T©Ra:&¨ÆŒ)˜³3<ÁtiX¥aüøñávV§X±bO´’™c‚ÓX'ö(.Y!<êŠZNL­°"ƒÿã¶Hb]U¬»ŠåãÔøãˆ¬ 1^1‰õðáÃéÈ‘#lé@À0w¦ ýœ˜¡ëñEĵ˜ÂìÑ£GázÜÅ‹yY'¬z¥’‚KÓõ/å(De$üõIÿ†×ßDV«¢ÕöºjÌ3zaö*Ìà T+ÞDÔwëÓoV€Ç²Xû‚%Š>øà^a!.‚õ7nܪcÏ¿L ¿@!J…‘ÿùùo*_Ê”)[ ‚ÐA‚ be»wï²õ‘dŒ爞%,G¬ç‡ ¥«V­Êkåai#ÅÁƒyé#Lt­wCbÙ víÚñv,‡„•·nÝ⥎ʔ)ÃK)½zõÊþ,H¸j+T¨@µjÕâ5áòÁñ˜\ZYtp}+VÌ~,Ä»U«VN­Ànݺñu`ÅÌ)©@èØ±#_GË–-y)%,b,û„ɯ±â•+Wx;–oÂuÀ×2c`Ü,… ³õŸeذaüš D½0Z‹ùõsÊž=»£àR$±jγgÏlU'b’¶b´8bi!ˆ°]¾|9›ÜÆÄêÕ«é»ï¾£°Uyþüy»ˆ|ôÑG4wî\>Gß¾}íqcªT©hΜ9,œz—ê!CèÌ™3¼0/Vt‡èaå¬ÚSÿСC¼¾E¬±A%Ò°hܼy“ó5kÿÇb½*΂sæÌI‹/æc±Ž ¬epöìY^×ÿX}ÞjÜ,É4mÚ4^Œ1‚?ËÀå'D¹Åhoè4ËѸܘ¸T=XÙmµ1q+<‰ñ1Çß~û­7X…£G¦~øMQ„«¢‚ÇG¬@…gq3aᇑÂEˆ]Þ»w…P£«¬-øº±V„LY§HÖÁb¼uêÔá•ß÷ïßÏ ÚÂ’Dü"‰íÇçk3’'OjÑ¢?FͼyóX`!¸,È‹ž¬J¬V4@ì‹õâóÁ:tEÏž=yX’ê –ƒŽ>g¥^’œ¥ imÜ,ZçÏßšoz#·D”‘ùü¸]N<:NŠ#\/p µ¸fÍ:t([È.U&¸ú˽ „K`=A b‰Ejõ+3(àÂXŸOç±?l¸?!Ô'Nœàí•+W¦?þøƒ]ŸÈ²Ò»{‘&Mî!ÉDø׬Þ6ö†a9¶ø®³{€îâ:á‘´$¡·•0Z‹Å摸xÕyèÔb /¡t‹Ù7ÇÂÂ*ïáAµk×f)\˜!Ë–2;ñXw*↰²Œ`}9€X –„_ÄñÒ¥KœkCHàÂܲe ?*†‚Ï‚kƒX§K—ŽE"+T¸oÔ)SòÿDÙ÷W.½}™Ûñž¼—ÈDS*z’g(k¦[¿‹IM4¡‚gû9£_q­ŽeqçkΜX\uá%Œ•õ(A«Ñ(Žáé^Ñâ‚;sþüùtêÔ)v"ÆW®\¹@{þü9'Ê@Œ®^½Ê+»+´&NœÈV$\¦J !œÕ«WçÕé!‚à˜eóæÍíV\”Øa„»Ö"b—ÎâÜöíÛ9¡‰>¿üùó³µ K±DX‘x?XÆá„1NX¶ÊŠŒlçp§lIEæÞ+ åKa¢Ê«fË<îtâso‡ò{yÏÛŽ5ñ¦ü)\ ×Ã7VQ.“6äU?g2½¯‰b&MÀgVõ¤\ÉD ƒK`{cÆ ›¿C R«79‹RŒv«~üñÇli!aeܸq,^È.­_¿¾=qÅØ1G¸U‘Ô£Q" ñK¼Ñ…Ð")F䕱cÇr|iÅÈ@Åû)sÖ#’ƒŠ/ÎÛJ—.M'Ožt)ŽY³f¥éÓ§s°D‰ü9”û DÉ® Ù±áU p­ÈvµØ…¤ÐºoÊR„•øÒ쯟Ò,Ä‚óß%*/ïIÞXhÐ×ÖÞ‰‡D;ï8÷:|¯ z<­ë8âÈ»ãŸùˆ•6Üðçö –\ôÓ £+ R‚×ñ×[Žáµ‚‹ˆ£V„5 §EnvþsÁLÕ2Y]”«¯´Âümõ¿d7z¢‰b†pqøÏŸ’y›è©M  ”Þ¸nXáv½ø4ðkƒ¸¾ôs~ŽËÏüÙõ{û¥4ÞaH4`K/‰KZaŒD…HgæY?Äe5Då–¾³0÷7ôæë12á„¥Š'I8aá™õ{IêÔÛµŽ´ LôCaw*šÊ¼´*rè? ývÜn¼°Pbízw×÷¶ï‹øôñ‡ú]{ýÜëu§‰oâºõñûntõ™…¾Þònˆêd÷"T#³;½Ö:_pÅ£¨O\3³u(`õLÌ>oÖ~#ÖNbz횺ö ÒiM„>ÛÊ+þ\Ͷs'3ÑO%=9°õ–™†ô 4n.)â(Dc`µÉïNϵ¶ãú «%˜Àã" uÙeë/¼Vf«!³ Çô3fÚqÇŸFèÁ–"@Žžƒ¼©Ý6_Úu÷{b‡¤ó_:ýøÝªJF7΄Õóéjvóv*è®gâ¸"ȞĤíkâ½ØŽ!§tZ7F3é¤Í8½Zp|·3?ò¢SüYð|´ªS#“»&<Ôjë;‘ƒøì»çω`Ÿiµ¿*{rL‚”ÔÛ'édØp{MøWïô?_N¯ÝˆîÖ[þT(¥ ùÀ“~ÚïÇ¢;B³¬c_wÝŸ:r×:ê²Ó¬‰7ñ~påÏÐÄ¿‡©•ñ[ñ§Gü©w1êYÔƒ†‹\ÄQˆ‘dHh¢&9Ý)¡‡5K™¨ <¬™Ÿ-“_Y}]¯ zÏ>¶võÒ3ǘ"ÀYÄóè­£|åNæÆçÝ«5l¯um,ÏW쯭Ï_ùY¯ Àû&òÔzóÚõ‹k5ôÂ8=š #êLßtâ¡?uÔÄKÕ½M7üí6Å}­®\}n-wµzQ3³eÔêÃe­.^Ð,ÈþûüèGí\Y C”Š¥6Ѧ›þtäµÃ¶W븕Òî ıIN7~¯UW­÷^•¦ÚïâØO;ŸÞR'«?H‰¬n3U×Ä¿—qÇüøw‚ÿ¸Ç¿jÿ_Ä¡y="Êzt“Ÿ­ÙTÏäÆÂè¬sf¶“‘TúÇ)3ý{Õ±QÅXH¸Zõ¥Xj7¶ï¾r<¾šöžÇ: #Hîm¢GÁœ© ׋„ |É­ ÆhzÉ/(èFF»]¿–‹žÂÐÙ«þoÍÓ ‘Åæå0ân²Žy…7žeP¾oá±µè\á~À‹qÌ&”RXë¦ókÛPËp=øxy•÷ܨH*7ZÝz‘ ×®Ew¬ÉlI¤RŠå(ÄH¶h=è«Ï}é·ý¹×]UûÑßÒ,±¤^&ZRÝ‹Ž=ì½z¶°å—”ŠÖÎêN8öÐj ,Ì':ËØ0»;8°¥K8~ï'2q£ˆ$ $åÀ €;VððÃâÆ 4ð5Vù8|'Ñ 5ÅeÛ¸WX:]½º¢û[9O‡c‘ùìŒ5EëTÎèEk{ÓÉGþìÙØ|Ó*ˆˆU>õy·/#F™T«·¸gˆaªq¿ð²l¼ñî¸Çº{úÆÏk‡û•J½qbpGLéFS+yRžänôÜ×B'µp™t&j°Î‡&V𤥶˜#¬A=_çqçAûag@ßÊj¢¥o¯Úpç,Ö5N2a!zGlÝÐSGãƒÙzÖ~êÅ1&X>«®úÓ¤ŠV×UBOж ~t#:ß'5{Jr)žÚêVTXæC~6×Ý@M wÝñgÏGq­“Ô§¸½Ôê/ÆÙF³\Vèè£~<ý ·›5¼pí¹%ÀÈ“½Sa}1vÄâaM~_È]ûý¸Ó_§ÍNG¼(kSqb H€©™Ùæ]0sŒgîÇZú†™œ5zþÔ…ñÇZjˆI"Q¡ê{î´Û–ˆc²½W“îôÍ_Ž!Â*… "k– ܰó/¼Ydÿ *åÉ¢ˆýj–"0PàREÃs\³N»ñàùUÑ“b6ÊbÄ$èDm¿íϱl$ÊÌýØÑR„¥v׃¾ôÌL…S™¨n6÷@Å"ˆ1²M6øÐÙÇ# é sõ¶ÙæK÷^[(™.¬€¼ÏmÖ$B8îìc3[”ßð iÚïÇ¥ÿîWŠ‡Û»˜¹ â(Ä0fž3s Ñb0ÄP¶Üò§Öù¬ü1Mð·ËïΙ×m1dŸ¾qáÁìZ؃­F$ÏtÚaÝ©bF7j¡‰# C÷ým½qëÔt¹mó¢žÑý 4|›ošé—CÎ\4;ig†öãâ;ˆ% 1d¢ÀºC0$ßh|­‡õ2ˆä¸h‘ý|é©Å^QçZåµzEàf-”JSµóÖŽ¼*HÂÞè€]ÓÅ4‘æîF|>x[>*ìfÏžÆqÒËO¥NŠ8 1}R ~ÆSNY…úë¬]åßm–¡q¦£qFï=¾Ôg¯mQÛ¶m·`ñùHÂi¼Þ‡‹Æ8& ñž©§ÍA6¦ ×ùÈK€XaˆÆ´*ž4Zë8¡³†lO$ŽYè{¤ð6qœqI¸ï/ïbsïcLb<¸äñßÄ«ð>œyìÏ6ŒsDÇÇ×ËêÎ*XpÁLWõâÎf{B¦ê ¾<ãÓ¢j^´D³4§‡Õøm^d±Z‡Öß0S·"îô½Ö1ܤ=†uŠÙ¦^J<\¹UãÑqnU!ÎWJrXÇ2äo¶Î­úðÌù^¤×GÌÍûƒ&4…R™8ãa'Ÿ4s¨qÐ¥§þœ}«:móøaµ ÕÀØZX€=Šzp<ã1L@Õ9«¡ 1’Ðàųlóõb~à6ù<¨ˆvMxuœêð!kvPIO>ÿ–[frÀ:F3.° Ð%^FK¢@ÊÔÚµAͯœ¹Uƒ%ŽZ#*â‹ÅñÖ­[Ô÷|G!N‹£³X\ô*O<qÔö Re@Œ ‚ Tn ‚ 8" 9³°f‡ç¡]î%<b/ÆUÜQÌf3—›7=©ß¹G‚ˆ£©¸‰ ‚ â(Ä)Q¼sçN„ˆŸª ·Ó¥Kg¯ÁYÅ]D…(%}úôá&hÒà ®Ä1¢­G!ÄbÑa"›5»FD–:ý9wNÄQˆ"*£žV£ ˆå(ÄIQaAÄQ1abA½b6ðJ¨:¡dADA,GA,AG,M°"" B„Pˆ6©×·ªé¨VqV|}}©Q£Ftùòå@Ï1fÌZ±b?ž9s&ýùçŸî?tèPºví?~ýú5 0€ž?¬ëÅduëÖ¥«W¯ÊAÕy3Ö·àÖ¿ öÓO< >{öL¾ðH®?"ŽB´F0mÚ4Ê”)“Ó2uêTÚµk%L˜0Ðs;vŒ®\¹ÂÏŸ?O§OŸv¹ï… hÊ”)?~|~/^<Ú¾};ýóÏ?ÁºÞ;vÐÅ‹yí8!öÔÓÐÔãN:Ñ·ß~êkªU«-Y²$Êîɽ{÷¨_¿~T¤HjРÃk{÷M›Rîܹ©zõêü\ÿZ† Êwß}gï<¶oßž ,H¥K—¦Y³fÅŠú#nU!R…´nÝš‹ž *Ð?þÈÖ\âĉY_¾|É–d’$Iìë´…4FåË—§)R°u š7oN7n¤o¾ùæ]OQ{õ>½zõ¢Ù³gó:qŠlÙ²ñLŽýå—_Òˆ#¤BD‚«1"„”,Y’|||bìý}ôèÿ®%J ‰ßD—.]¨OŸ>´lÙ2úꫯhçΔ:ujzüø1yzzÒªU«ì¿‘¤I“ÒÛ·oYd!Š3fÌ`ïÊ÷ßOï¿ÿ>U®\YÄQÑ )Mš4¡#GްÐÔ«WϾýðáÃ,¹rå²oëÛ·/÷Rñc;§›cÓ¦M4räHûó… òL{wèÐ!~ îÒ¥K¹G ËÔˆ~Û AƒDÛ•vïÞ]*L¥E‹1úúóæÍKãÆãμ!Šœ9sÒ–-[쿇,Y²Ð_ýE»wï¦:uê°8âwëÐÈüùóY ц”(Q‚=CëÖ­‹ñâ(nU!Êøã?¨GöçÅE‹ÑرcY á.Íœ93.\ؾÏ!Chß¾}T¶lYjÛ¶-?nذ!»«ðxôèÑïÞìÍ›7yÿÛ·oZŒÖì¼yó(GŽÊ‚ äË‹¢N[DLïރгgO x-ú¬Y³r¬îCµ/ÄîE¸è“†;²cÇŽlMé;pU«V¥„­»uëVv=8p€_GÌ+³6Ò»wovAþöÛo´fͶ¤ât-[¶¤Ï>ûŒë¬.œWóBha™Á…N`ýúõ9 ×<~ü8ï»mÛ6þk¸^ÔyXjs¸<—/_ÎnQý{„>î¿úí}øá‡ôùçŸÓôéÓ¹S‹×à¸û÷ï³ÀÃÍÓ·ªé š4i’Ã6¸t$P©R%{Ü =Uü(ñ‘à‚ V4'Nœàçè½ÃB .°%OÀ2€p QkE†èŒÁƒ7²dÉØB„«uõ"ñsê²XUÊúûý÷ß©F,X T©Rl*àÞ„ÅÙ¡Cûëû÷ï§É“'Ó¨Q£8Æ ‚hBay⚺uëÆ×„8=D¢¤„>ýôSû}ÂïGYªs¨ßèT¢Ž§M›–·+VŒ‹žŸþ™Ãúïa¸da ‹å(!dàÀì¦Òô–Ñ#}úô)÷˜¬@Õ WÀ­KOÅñ®S¸’ðXÂc ùP b9 Î@,-þü,@°Ì¼U±bE~|ëÖ-þÎaɹÞEÊ”)Y\âãè¹ç…›^/þp¯"9FY´¸¦S§NqnÓ¦ =z”Eïÿû‹ºá>úˆ]«°R‘í­ê/:œ(ÁíÌ¡c —)‰9ݳ/^8X©èL",Ñ×'²‰8 B0AÓïC¯?*d¬ªÆ ÑZÀ±H¶›«]»vü¸qãÆÜcÆcœCÐ{ï½g®,GgŘhÆ?v¸j•€â1 bŽ2Pd¢¾cBœIipé"d¡’du–-Äÿa½â÷÷)Æ?bB eùAáŽÅëp“b|'.\\“J¦C68~?HhÃçÀq {öììöq„±AŒn#Ü9pÍ ëîWüøõ=ذ ‰ zÖ®½_¼/ƳAl»víÊ=z4’8vذaÜ‹‡Ë •ó1ÃäÉ“³(Bt”!^Ú! ¨/¨GXÔ¥Úµk³¨)àE ñEdaCŒñ›PØ ,ˆ+®]»–ÿ«kB,]],·O>ù„&NœÈÖ,\„\ýfP—¯Tà¼ðk…0#¨çøÂ[AÄtL±„ýÕ«Wö'>‹>¦ŠìqxZD!„À:CÏT?ÎQ ¼‡Åwãèy£çŠ^/|8»Ûô@¸qMèi‡&%ÄLëRˆ[ˆ8 Q‚êaÃ¥ŠñSˆåaL#cÔœP2Q!Ž׈Dš5kº{æ.,9¼¬4€!W3f¤={öp³iÓ¦|Íx/¬”0$çá^⿲8Q°È7®«{÷îôüùs~íèÑ£T¬X1û±E‹åm1½-–£¸¼ì±Õ{w–,!–¢^ݪú5Ckõ…ÅZ„  4ˆÅb½uëVv=8p€>üðCÚ±c•-[–âÇïôøÞ½{³ âuˆg©R¥Ø%‰8]Ë–-YHpÙúõëíÇá¼ZXqÅ‹ç×ÇÛ¸q#_ÓO?ýDÇg±Ù¶mƒkƒÁ݉áW%J”`w(DlùòåtùòezðàA˜¿#>î)Þàú1Ì "ŒóÃ:xð`5jÇ1“%Kf?ÑA€µ 7«ˆ£ãÒ8öÌ8.RÂKuP £²#“*UªP=èÈ‘#ܰÃB¬W¯»•8Bì\1iÒ$»ˆÀªRÖ_jÔ¨Áq<Ñ„E¨€{g‡ì¯ïß¿Ÿ&OžÌ¢“-[6©Â… ³8ÂòÄ5!¡×T¡BŽB”ïܹÃ÷ðÿìÝylTUð·-¥"H¡l•–E ¢âB!P¥ˆ,¢?P )*‰¢Fi U » › ‹$  Q´J$€€„E6AÁBiIS;óõy¿9ãÛ;í´´Ðåù%'3sçvæ2æé{ιsè}ýPé™J¡hP!ØRRRdÔ¨QÒ¸qc݆@¶V‡‰‰‰’œœ,©©©þ»%ƒ+wÇ$»U©ÐÊÙNãllåÑJ²z{yT€±´èèh TfÝ»w—ØØX½~áÂí>E%ç¾aÊ÷~7,VªGwª?xܨ¨(ŸºW19ÆT´8¦ŒŒ }´»¡·wï^ uÂ}úôѪnРA’žž®Ûn>ú¨6\ôTºHLÌ)ê5»yó¦VظŽ*Ñ@—/ÛLØa8R•Hû¸ ?ÀÙʳ÷þ ôºÛ…pAW%¨W¯^Ò³gO9v옞ê€É)h%…YžW0ŽyúôiŸmèEÅhŽ cŒ8ía©aš––¦ãŒ8NÀ9“¨|8 áˆ D@a¬ôâÅ‹Úp=`D5ˆî]LƱž‹yüøqŸ}ñÚ 1ëU3žÛÀ1#+{o»Uɱ+5Ð76Ç"©,ªº’¾ïÊúƒU*0ThsæÌ‘ˆˆéСƒÌ;WÇôJ!…qCŒ "Ô¶mÛ¦UŸ1iÒ$Ù‰nS„É®]»´KÖtUâCŒ%¢ÛçLJY§§7nèã 6L»t1nêï\Q@X£²ExâÕ+Æ.Ñ}úî»ïêÌSt÷brݱ¸“†ÆŒ£.\0ƒÝИ4„®[ÌT5kV¥ï2ÉñC'ÐÐãX$•u×þÝ€êß\ƒPDè˜ :zô¨·B+)„* ‹s#¬¡f [c_œ1c††1*Ut­Æ1®¸cǽ4Ç´lÙ2ï1¡rëׯŸ,\¸P«;T¸+W®ôû <˜HƒñJÛ¿=V#˜1R@µŠqÐ 6h â]¦ØÇ|‘‚Š7))I+Ø*ðžÔw$Zˆ¥…zæñ†¹\®“üïKDeÁ~n£™©Š† $¨nL@ð2òcºos PIƯ öÅ`o®§åyZ¾¥¹Y9Q¥êÕ º8!‡ˆŒD G"""†#±j$*Ž9‘ˆ•#шˆˆáHDDÄp$""b81‰ˆˆŽDDD G"""†#Qõ‚EбŒ1‰ˆªŒ×^{Mý-­çž{N×l¼[._¾¬‹c Æ_|Ñç¾}ûöÉK/½$íÚµÓ5qÛz_³fÍ|Zbbb¡ÇÇz‘¸Ïº¨seů#" ГO>© WV­ììl]$Ùêĉºà11~çwdË–-òòË/Ë?ü 5’þùG_Þ¾}»®›õêÕóyŒ={öÈúõë«ÌïšáHD Ñ£GWêã衇dÞ¼yòÖ[oÉÉ“ÿ­aߦMùöÛo¥E‹z»eË–²|ùrùñÇeÈ!ŽM›6•Ž;:>îÍ›7åÍ7ß”gŸ}VvìØQ%~×ìV%¢j->>^›1yòd ‹¼¼<½½sçNiÕª•ܺuKÆïÝá‚.DTLÏ?ÿ¼vGNœ8Qrss½õõ×_KïÞ½¥}ûö2vìXù÷ß}žû›o¾‘¸¸8iÛ¶­vs>|X·üñÇòðÃK~~¾ÞF%‡ç:xð ÞÎÌÌ”æÍ›ËO?ý¤ã˜èÅ1ã¹6nÜXª×Á#„……é—¿ãÒTœh111z\o¼ñ†deey÷Ÿ9s¦V£ø7V G"ªÖ(è>DºÝnÙ½{·v=îß¿_ïÿþûï¥[·nR«V-ÇŸûí·µ ò£>’/¿üÒÛµˆqºW^yE $k֬Ѫ kàq´¨ÌÖ®]+:u’^xAN:¥Ç„}º÷ßùé§Ÿê¿ß„)ш¨’{æ™g´[ðСC:ö† qèСÚÍhB¬W¯^~~Ñ¢Eº?&± ª2Õßüùóµ›õÔSOIRR’Ï8º7QqN˜0Až~úiyï½÷´ÛsñâÅÒºukm!—˥ሪÌzL=zôÐPDhc¢ ö8p ¼úê«ÞjïÊ•+ÚJ2A•oJJŠŒ5J7n¬Ûüq C_÷îÝu2ÎÖ­[%''G'á¼þúë~»\ŽDD•ÆÒ¢££5€P™áÃ?66V¯_¸pA»OQÉùS³fMïõððp Wøý÷ßµ;Õ}´kUjzzºnG¸aV*®•3ºL˜˜SÔk†?(0óöÌ™3’ššªÝ¾gèСC©»w+ NÈ!¢jábº*QöìÙS«!|øcr ZIa–'ÂÕŒcž>}ÚgºTQ1šcZ¹r¥|ñÅÖ‘‘‘¦iii:ÎhªÙºuëêd˜I“&ɪU«4Q½b¬´$ŒÉÉÉòÕW_é'×8~ü¸·qìØ1 HóZ¿þú«žê‚Ç0ÿ†#Q%…* *´9sæHDD„V?sçÎÕSJ!5mÚ4D¨m۶ͧ{a†.PŒ5¢ºÛµk—†ª0èÒ¥‹Žá¡Ûãy€@Äñ¡{á„/Àã 6L»t1nŠƒ9ÝÂaÊ㙸DõŠ?Ð}ŠóW¯^­Ý½!!!€5jÔÐû1i¡‡À¾té’“p¬§…üõ×_z‰ÉBø9†#Q%†‰'÷ß¿†"BÇÑÑ£G‹o, BᅀŹ‘ƒÖP3Ð-ŠY©|ð̘1CÕª©Ð0žˆqEœKsLË–-ó‚©_¿~²páB­îPá¢Ú´V}VÄx¥ÇÅX)ŽÁ#5P­þüóϲaà D\bŒû˜±Íª*pYÐB,-ÔÓ0õ(Ìårä"* è¾3—¦a2 Nu@uƒÓ"ˆŠ‚1]„7ª\S-#ÎLóœãÏì‹ÁÞ\OËó´|KssB‘=@ù1‰ˆˆŽDDD G"""†#шˆˆáHDDÄp$""b81‰ˆˆŽDDD G"""†#ш¨ÒëÚµ«Ìš5ËgÛ™3g¤Y³fºèï‚ ôºSâÆÐ·oßB÷uîÜÙñùòóóuG¬éˆýì®^½*cÇŽ•öíÛë>›6mÒíXÒúøXrôèÑ’‘‘áýÙ©S§:'6¦Àq±c"¢bŒ1»Àðüùó5Œ–.]ª·­+Þ:T&L˜ðßl çX¬]yöìY©_¿~¡û°¦%‹¯ZµJ×-ܾ}»n3fΜ)ݺu“sçÎipâøöï߯ CëÖ­½Çg<ðÀüE2‰ˆÊN£F´AÆ 5„¢££ íî¸Ý.44TæÍ›'[·n•}ûöùÜ·yófÉÊÊ’Å‹ë~]ºtÑêкpoãÆ%**J[Ó¦MeË–-rþüyiÓ¦Þïïø(pìV%"ª@vïÞ-ýû÷×`ÌËËÓmN+Ú£Âüí·ßdíÚµÒ²eKyðÁùâ1‰ˆ*žåË—ûŒó>^Z´h¡÷­\¹R&Nœ(ÁÁÿ}œ£Û×z3¥’a·*Q·Ûísã‚%esD¸¡‹ôÖ­[Þmè–µ™Ýµk×tòÌŠ+¤cÇŽ’’’" ’žžîÝçÃ?”ØØXÉÎÎÖnÙ)S¦H:udÈ!z¿}Ì1""‚¿`†#QÉ <®_¿î³ Õ[IƒÅiÌqúôé²dÉïí'NøLâ±kÒ¤‰ >\'ÜÀÈ‘#eÍš5:Á 4æÍ›ëuLÜ9pà€¬_¿ÞŽs¼}ìV%¢j[>ìS=:tHÃAt;pjÅÅ‹½­¨`„N:és¨Màù“““£•#±r$"*3ãÆÓñ»iÓ¦I\\œžã8{ölIJJ*—çC×)Ú¥K—ô6ºQÑÕŠîPœßˆ.ÓÕ«WKLLŒv¯¢ŠDE‰.Zøûï¿å?þÐÛ{öì‘;wê~ºqq~¦*Íûl†#Q`p ĺuët|/--M»Re̘1åò|è&MMMõÞîÑ£‡Ô­[W !¶qãFGLNNÖû-Zä3cuòäÉz‰jݪ˖-“~ýúyï?uê”~y€ý9ûôéÃ_v€‚‚þÿŠ£…XZ¨§…¡¹\.~µ• Óu‰KÓ0ù §'\¸pAÚµkÇŠŠ„/GˆŒŒ”­ºÑg¦yÎñg ö*¸Èõ´c81‰ˆˆŽDDEêÚµ«Ìš5Ëgþ|ÉÈÈ¥K—êíÚµk{÷:t¨L˜0á¿ØÎ±X»òìÙ³R¿~ýB÷aMK<1^µj•®[¸}ûv݈÷ß_ºuëæ½E”‰áHDTæ5j¤ 6l(µjÕ’èèèBû…‡‡;n· •yóæÉÖ­[eß¾}>÷mÞ¼Y²²²dñâź_—.]dôèÑO0iÑ¢E@Ç@Ec·*Q²{÷néß¿¿c^^žnã _†#Q¥µ|ùrŸñ¾ƒ–ø1Î;'™™™2`ÀiÕª•ôîÝ[Ž9ðÏÇÇÇ{Ÿ?O¥ÃnU"¢n·Ûç6ÆKÊ>æˆpBé­[·¼ÛÐ-ì¿.¹víšœæH G"¢R‰ˆˆëׯûlCõfî ”Ó˜ãôéÓeÉ’%ÞÛ'Nœð™ÄcפI>|¸7àFŽ)kÖ¬Ñ <Öâp̱l°[•ˆª½¨¨(9|ø°OõxèÐ! » ÜÖcO:U.^¼èmE#têÔIŸÛÈÎÎÖKL"VŽDDw̸qãtloÚ´i§ç8Ξ=[’’’ÊåùÐuŠvéÒ%½nTtµ¶nÝZÏoŒ•Õ«WKLLŒv¯¢ŠDE‰.Z8þ¼ži­XÃÂÂï»çž{¤eË–ü%3‰ˆJ¦M›6²nÝ:ßKKKÓ®ÔÄÄD3fL¹<ºISSS½·{ôè¡ç#"Ôš7o.7n”)S¦Hrr²Þ·hÑ"Ÿ«¨F­âædû}<òˆã—PÑ‚‚þÿŠ£…XZ¨§áO‘0—Ëu’/•t_Ú¾5 •O»víø"Q‘ðå‘‘‘¢ Qf&:ázQ§¿ìUp‘ëiyž–oinŽ9Ù”/шˆªˆòúö †#шªS@|Ï0‰ˆˆŽDTÕþòÇ´|¬iHäÞöµ2˺Šd8Q…‚¥šrrrøB_xà}ÂÊ‘ˆªlÕhý‹×ëÔ©#—/_Ö/ ²ÃûâÏ?ÿÔï¨5'ûÛßCeQE2‰¨Â„%ZÍš5åÞ{ïÕÕ+°2†Yð—ª7¼ð~0«šà}RžøÝªDtW‚к†ý6>üðU`W®\‘ÜÜ\c2ë+š¯›sâo;UŽ^= x/`,_®^¯^=]¡Ä©bd8Q•úPD¨™;|"ñAˆIèF³ëÝ Ãê¾wú4{—;Þ¸nýU{³ö>0‰¨JTÖAlàõ>„¥5Y9V¯ÊÑüÑdoe† G"ª°ŠÖ•U£©$Mø9à EVŽwþý`¯M«5&æ0‰¨Ê|øZƒÑZ5ší¬«_åHõÈÊ‘ˆªä£µ Õ|Z¯3«w…j¯í]ªåѽZ\8º=ˆ¨Ü?rÖnT3öXÜ$†cÕ¯ íaèÂÆ¥Í6VŽDT!Ò„¢ý4†aõ K{÷ûœÃwUˆ€´9ÙÏ‹¤ê’娕êöŽn‡’“ݪDT!’ªwy›Áè/ãÜþ*G§rñWCDwóÃÐ~>$Uï÷E¼\ÅEu«zÈårÝ ®Ã_ ÝÉÂ’†"+˪ñÇÐíîWd*º\9ÅUTŽHWWVVVz½zõâø+$¢»ñ¡hè±²¬Þሂ<ûÞd[ •£[œ»T]Ÿ}öYj|||LAõX—¿&"ªÌŽT}T7g~ÂÑ'$C,oº mÛ¶m™áááß¶mÛ¶IXXX“‚Ÿ©É—™ˆˆ*I(fgff~·bÅŠ¤‰'þ^°éß‚–oi…‚2ÈŽ&ƒ=-ÄÓjxZ¨å2ÄÒÌþæç‰ˆˆî&ŸžO[æy‚Ñ\þk HoHÖðó n˃ZƒÏíŽA G""ª`áèvÇ|‡@twô7!Çœ¾äyqHâ`Kµi F†$ÝP´ç˜¿ ÒZ)º$€ 9N))\DÕÈp$"¢»ŽöîUkHºüTŽ…¾À-¾]§f—m›S(²K•ˆˆ*ZPº‹ I]ªn{åh IëŽ.[5iŸ€Ãp$"¢ŠŽb G§ën‡Ê³P·jmÇ Ë6sÝåŽDDD- ýU‘þ‚Ñïw«ºmaè”â'’DDTQBQü„Ÿ»ˆûÄ_8:UöíNAÈ`$"¢ŠþÐ]ÄþTÌ×2¸ˆˆ¨2¦¿m~+Ç€~ˆˆ¨’‡£_ÿ`Á ]Õ2‹IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/contorl.png000664 000000 000000 00000135144 13703317554 027004 0ustar00rootroot000000 000000 ‰PNG  IHDRâe"(KtEXtSoftwareAdobe ImageReadyqÉe<(iTXtXML:com.adobe.xmp \¡ò|¶ÒIDATxÚìÝtWà» ŠCq NÑâ®Å!—AŠ[âEKÐàn .Á-‚q_›f`cXiä~çÌÉÊØNfßÜyûæL&“á#}ôDDDDDß:A”bxN%o+?!t3ˆ}@àN-œ'Œ/{_O鱌ᜈˆˆˆ¾cB*Ï…TÆIÈ•ïá)ý•½#3ŒÑ÷Â…þ¦ÒeI_W~@×ÀNDDDDß{ R’†ðDa\™JO:ÈSyŒ$‰ˆˆˆˆ¾—ž4ˆSyœR(g¸yð– ‚`+þM+– ¯Q<)xLjCˆL&‹0{ )…pó ž´­·yWˆ!^JMÀS â@*UçDDDDDôIAü½5â©Ý]“ˆˆˆˆˆþYO–¹ßÕ4…ˆˆˆˆˆ>o0GjAœˆˆˆˆè»Ð½{wŒ1"Å÷ºví ww÷uùï â¬!'"""¢oR¯^½pðàÁda\ á×®]C·nÝþé"dÿ$ˆ}“Š/Ž¥K—& ã¯CøÆ‘+W®uù2IBZW˜ ª„A#‚ƒ8\࿊¾7pttä† ""úÆ]¾|ÙÔLÅÞÞŸ%„‹ûGqx!>Œ]Â`0ÖˆÑwMªwvvFPPJ•*õ¯×„¿Æ NDDDDß5©9ÊÇ1~üxœ9s&Õ 8?7%7=}Ï!ܼMx¶lÙÞ\¤9yòäuÙ¬'"""¢ï’››[² 3__ÀyèÐ!L˜0á_]>/Ö$J/Ö$""ú¶8qNNN)¶ —.àT*•(\¸ð§†ì÷^¬É¦)DDDDô]ª\¹rªïI5ãÿ66M!""""ú?`'""""b'""""b'"""""q"""""q"""""b'""""b'"""""q"""""q"""""b'""""b'""""b'¢þÊLÔ/ý 6F…JÕχ—»OÂOŸÒ˜*”ô8Šåàôî%²0 ͦ¹¡¼µø…UYáÑúÞ˜x0ÂÛ¯3¬-ÅÍ…u¡æ¿ˆˆèÿ²‡Ú—º„Á`6_MÓí©ßQi¤7\Üæce³LfUùBöLBí×QbÀ,lÖtVñ¡„°SÕg-®ï‚MƒJÃ2…q¢ÞÇ Ç<Èmññë-„øâäõ—Ð üoCú¼%PÜQÅ=øå:㶇*-®áç‘KP«Ÿ?îž„~SŽã•Q™\ëÂ=0{rSprB¦ô¹Q÷ÕŒ\ •5¬­å°Sù`ɉ( ÅþÝ­p¦MYLÍ´çÿÄNDDô•øÂƒ¸¾‡6bû]-t·OÃçÎ]¼ôÚˆ™v‰ÂvÔå3¸|ã1B·¯ÇÌÇÖP欄^u½Ã±óD‰?r‰Á‹°¬¢qùQÚî.ÿÇ• aÐáúù‡Íò¦1-Ãøt'Ú5ƒ3`÷ò(a¿^~K;#ÿ¨KКÏZU¿‰ë;Êåíi‚îòj4m»M Xú™Õ¨1}?tÈðQ'ô2ÜÂ’¶íq¶\Z\ýëPù'”=–-Zá麘¸(;N-ðú|SºÂ‹{´ÅbóÓ¶»Þ8ëŸnÈP¸~‰O$‰ˆˆˆAüèqcÛâùæç÷‡û–b辔Ǿ·k†ì,j¥C'1ˆÛd/‹.¬ðøÒ~l¿¡Ä ª£¸½N¹®Â½Å<Üh¿ ÷¾^ˆ>‘-Ýq¬Áί øšÜ±"z7ˇà g¢v{-v­úeì^§ k¬^?¦^]=‚½÷ß®í°­GE4;X[nOEcý^4uŽ“Íàɬ ÐïˆôÝs¯üÆùŸúkWF >1÷/Â_Üo4yZbÆðjvF—Θ<Ô½&D;yzŸ_Özôê:˜©'|ê´À¬UPþ§Šˆú} <ÇÉð0*º•ãɃøg£FÃù§aœÄ™j·¢Øo»p¬[–DMS^®ï §çP)iMrÁƘ=­&6tÙƒíþ•0|ö4¶§Ýúº òt¨é±;”}ÐdÃYœ~Üe *£2'ÚŽý #ò 8?ñ*ö§ĵ84¤*äC^?߃&N{Þ¾½®'4ëÞ~fú¶]Z5¯ªÄý§oŸ„ìËûcÀÖè[ocüê࠴ëeú ¿ü ieBCB§N ¥Z­ ÙNÅ4ñ$sï¥Ùè±ý”¥Ç Q7.ƒø¿E‡“£jC1*åО¢¸8y)ê"%PÚâ+K‹ªîKp»‡ 40¾:Û@ÈÖ•sH§Èdò7'†ØHÄ(l`£TÅ:`ÓúZ‰ÛˆGxctŸ?áS°Ö+»ÄÉ\ìX³ù ûiö9Ô¾=Õ[\C‡"¨[+/†ž*ŽÅ^®ðªãÕÔ}èp«šíʃ| Ó~ÿ¶/³r*tˆÓÉ`ii)îs¶(çú#,vCÞêÕàÄ>ˆˆˆÄÿ= h=ãª'¾ 3üÔRô\õ Å)´WŽc ź•Eæ *BO,…ÛÚ{¦K\MmË; Có«k0Äc¶>J‡FsÚ¢œ:>êLò´Á‰zyP-¥¾à„(<¾p ›ÿNeµåi ­Üm %?‰ÈÓf–µrBòÊn.,ˆA‡¹C~,kÌÀ™Ëf{z…ÁØèåŽ%rÁ.!Eǽ¸›AvÈ+î»Vãv¡¼^ •²"´JØ ãb¡U[@“0¾M˜¶«) øc ƒø?$ƒ}‰Æ;¼´Sõð?² ËÏ…Áþǟѯ𮾄‡ªœ¨Z%ä—¶cΡ§Ð䯅>?ç…Er–°G‘?"×Ú øF&žsÌì9xBc„|æ!Ûˆ°'wàíϤF¼)qu-¬ÙÖ×®†¾ó\œP¶Ò¤¡'еšVËjã—j¶)ÔJpý(¸®ÇGV9rüÉÓçG™ô‰_Ó8¸ ¸ÃÛ¯©*É7U¦±0u¯™ø\!œˆˆˆAü3qÛbõ1¢h$®¬ò@ãË¡e­‹¥ËÇ iúóè½f#vÚVÄ’~=ð£¶Ò´è‹§q<ì'ü9´òXÉ DuÆf÷XTu¿þÙÖJÿꢊv„GÝmh»jFÖ\‰9•ý“¦áÏ+T›ÜU­SŒ[ÈV³FÔ4¿+èÛ~{ë\̽È’ˆˆˆˆAüÿΈ—ç7aĘÅXs)ÊlÙ9`šÝýv”çËP*버O’~ŒÁ¹EPpkQôš:³~Ê—,Ÿ«ŽP@ðÅ•h8u?œçnÃlAØtÆó»»!¢¶€í›æÒpÌk—5ÕZɨ§·ð÷Ù')Ô– x¨ãÞHDDDÄ þ%ÃÆ&÷ïÅ O“QX;±^yÂ])¯ý°iÚFxkÊbЯ®È.U1+P«Õ\9]×hP©¤Yͳá¦Õ)iÒcU±^NAÐÁ{õ2Èí a¨, §Xàq'ûÁªMâÚf¨‰5s["ß;¶¨>&¯‚ )ñ°8{#ƒø—Á²@;¬ÝS öy²ÃVJ¯Z£–)ŸÅÍyqÆö´èÜ?š}Š|=g§³Y©×”úõQ1“øš" ŠÛ_ŒÃŽÞeßÖ^ïÛÌ Íßêž`ãÖKЊñY­*f®F¸‚…£7`æZo r(Œ¯¡gc7\éÙ mj—F±Ìšd;]¡ªèXß1Ŧ)××]Ã¥@îDDDD â_Èêe±þÕêáXJ-7Ì›¦¼&í~[vcN¹ø§2¥ì첡^Ÿ¡WTŠÝ‚ŽD qý´Ð'›¡/ǹó ŒO£aS¤-֯±ÍsgŒ‚ 6ή5¼~-Ž S¦`ìæ“˜1ôfŽp@Û¥aEÎ (Yk®½^×ïhëõ®Ï{ £«Åè7Ÿ7g!"""úRcëÖ­¦ÇMš4AºtéþÑüdé¯aÍU ÁA.ü¿>°qkWœÂ#ãN ·Eéf­P+ë§ôÅï%¿aÁ|è5µ*˜îµ# ìâ \É^ U2Êwq%º®†k£ºhR1Ò¾ÉÊF„=8­[vÁóIqÌ›Õ9£|qè¤/ÂŒû_±DžòQ,{„þ €£#{²!""¢x[¶lÁýû÷MóäɃ¦M›¾+dÿ(/L¦›jKƒÁl¾ø NÄ NDDD_‚Ù³g#..þžëýû÷ÿGAœ·p$""""ú¯CxÒÇŸŠAœˆˆˆˆèÿ€AœˆˆˆˆˆAœˆˆˆˆˆAœˆˆˆˆˆþ%ÔQõÍ`Þõ‘¾-hß<>P…Ûƒˆˆˆþ=¬'""""b'""""b'"""""q"""""q"""""b'""""úº(¹ ˆˆèsÐëõ8vì|||ñÎqmmmQ´hQ¸ººB©ä¡ˆˆĉˆˆ>™Ÿ?Ž®]»ÂÞÞþㆅ…ÁËËË4M5¸ñˆè»ôM7Mb˜sÚ€+Fñ±8DÄ x.àúK#>4`ùU=¦ß3Â¼Þæ‘Ÿc|^¿`4bå)Vsg!"z©&¼Aƒï áii\išf|†mšaÔÁp|ìíætÿ@G·µð5|ÄDÚƒR¾%–ÜOe"!›zVÇ/kÀð™Öǰ =kŒÂøX…à?ܹz§nÇšù“0¢wtšt!o6€74Gã>н™¹7F–¯o-wN"ñÿG# Vü{ôš}Oê0ë¶‹¯éq(R,[Å÷"å2(Ì&Éb/CH€w …a´€ÛZrÛrg!"z©9ʇ„pó0þ¾&,oËs# z½©ù‹Þ˜…òjá9w-îk^Ó`0ƧR!ô/ttv‚“ÓÛ!Gùñ8/&T!ø>.Þz8³o¸?õs™[y".é͇ðW!ˆ6MÐC§C\œ8„œÆÑ1Èêœú¸„×â´Ð%G>v}âCt8ž?~).ó6õªˆ2eë¡›Ç î3 koÉë¡öfÇ/%œ‹»àÅVO\LÈÝß³8œEPqç$úB}³MSÄì ƒ8He›2T-¢Dô=n8*Íß­ƒ 1÷d¨E+©&熓ŸâMíÊØCñ4EŽVÎÀS½óŽj1/á=KG%––ƒEÑC{hŠvÚŒ°Dõªäœð6ˆö݉£îÅ LÓ«}[$ž^ ¶Oüà½!ÏùÁJL±é²"£Xò­cÅ¥¹p=ïŽòÃõˆ‹ŽF”"aabàÖ‹'Ú˜(DÇYÃJ£€áÎ<Ô«= ×ufËhžË^?–Y á’ÛXTO ÙG®ƒ\<©0ˆk%®—à€– =Þ²¼÷FÞ°‰ˆ­W‘“ àçfÅ`'ÓáØàh·> ¹Mr.ÔU1| w#NÁ퇬p‹_)Ø6]‰kÔ‚š»ƒø¿é²¬§=‹Öw‹!Z.æjñ‰>TÓ¡>zS¡uÆ[‹¹U÷ƒ« ð¸( I%%J˜~+à}UUf%’ãåCÆF(ðG!†p"¢ÿš"Wox…’É `- (‰ñï˜Ö¸ýªyà´Ö(†[:º.‡`”£¤Ç xVO2²î$F•]Š[¡ÆD/ï­WË‚¬©&ZÓKî-Fý¤©VïƒÉÕ›ãÑ'­Ïaô½Ý6…šŽ_çóì†Rc …!Ú }pL è=ûˆA]¯j?`K¿íØ:ù"îvœ‹F­¢ÿéY¨¡‘_¡ØÑ« ,,‚Ïœx2¿1š\ëŠÓ³j0„}A¾Ù¦)% ©±¡’.J9ÔPc½8¬® D1U|M¹BüäÎb_\] ¹dPÈ•\ª/ÏNäñ•:1ˆq1BÅ7‚c€4V2Xɸãý×A ­Æ×MQ̃t9ÏëŒ[3k {–,Èb6d+·5=ÄÅÉa]u|ü.`rE 4HV¤«\1íÊM\¼tOŸ=Ã3¿%h`SCøãN¢ÚdF} ëc×GøÔõ±Eßoâñ™q(m+}¿§ðxwOA5{t⌕*{ÿu+|î߆W?¨TjhTJÈe ¨-Äyh4P‡ÁÎSˆñ÷ÇK¥Ñ97lU쵘èKòí÷š"8sÇ€°L2<»«G`&ª‡¡È¥À«{zÌ ¨>Ùe°I(‰½ÓÅ7°Óˆ[G/¦²hbá(þuʸM9ý'…9 ~‹Ð(×¢TgÎ}ãÿºüº÷ºÅðÊc`=ÿ F—Á êZ†{¯B IŸ^,óc XXZÄO±]œ·ÁÔ˜1{ODƒ“lñǾñ(—ÚO q»Ð3Ï®”ß“š¦à¬Äð»ÆŽÄËZ•á;iü‚¶g7BÕ»žNîÞvK0·k ¤IøWˆðDÇœžêجl,¡Ó‰§ ïÀ7ö¹æõpqÍË_s‰¾0ßì©q\¬€¿Ÿx!è3 XyI;i”–_[1t+,åèSTüøþ:Œ¼iDX|f‡Q-LjjôwÔb!Y¯¨µT®¾p+J†ì¹Óýç1\«…à2ûýÃßß?…Ꭰ/jª]’)UP<º CIT,싹?7ÂûÒ/Ÿz<ñŒY2C.Ä &F€ÆB_#nÛ+|ãÁÆŽpË`S­?ܲnÇøÅ7 K­k©iŠß3<{–dðß ·n}Ôˆ}zÛׯ£¸صzF·ïó%¦bõXW¤[Šm0gù/-k…ºCöá•t=”ÁCºÖX÷èÕÓ@“¡º-]ŠŽiÏãÄñÓ8sßåJØpG"úÂ|³5âgïêqPºˆF.îÒrD<2`ýS=F¾´ÒëWtð†€H™-³Éa'Õƒèůˆ¿x3Ü8çR¡MFàN°¿ß1@k#G{ î4DDÿ-#‚ƒ`´æ”ˉ=)w¨®6 —þl…t2#žx{ãyÉv(më›’Á³ëú»hpó¶ùkä†R¸‡è8+ØØ¤ò§<Zhƒ5mÆc]ý6©Ôøx¡{N¯”ß{S#¿þ¼>ÖØýÛ@¬·ƒ~=ÌñúÁKbâ†Á¨¿W…Ø K)ì"¢.amÊ!½x&¡ GŒ•l¡Å+­ÅÜ–bdMœ;%GÑS›¿7Æde³¢/Í7û­¬\D…ñ?Èá µý¶–£¦øÀÂBŽŸó)PD#CÁì ´¸•Z†¢vñm㣄[ÊÄihÅ ®VÄ¿ž×A‹8?dU #Û‡ýÇôð½ë‡´ùò"½2+~Ùú(I-ôx{”|ÛìÂø‡ößCñJyáÌ >!j<Ø¿7ŸžÆ©yP¼¥t£ ÄÄÙ"í;~åT銡] !^ŸÊõ0ÿöC<|˜d¸·½s›Õs}Ìú¤I‹f ObÇ”FÈ¡Aã\ëæ†SM¸¹wGe‡ ¨ðËH¸·+ Û %áZÔ^Åò&9°<…ñÔÕÚÆç`§RhÖ7J4¬‰2ù3@ƒ0\ß<C<ö ÒèZH‡(ß«¸#8¡^fd6È”¿;6í‹Jfe»>:¡ÑÈõ‘Ð 2È’älšò±ë#ô0‰¦ƒ®aïö»ˆ€pl^C›>þ½èËK±ø|´í}ÌUøÚÃ6|?&·‹5a-°æ`ìê↎nÀÜ)Q< «Æ‰Äÿe‘ÏõxK€uzrŠ…§\%Cþ¬Jtw‘#mBajˆ4bÕ3ÀZ||õ±vÎJy¥G÷»FXØÊ‘ùzqz¼rä·T’Jl»aÀR?9~Ë+c_¬DDf\]]qìØ1,[¶ì½wÌ”jÂ¥.Mó>/žE XÏ¡¨fŸÌÅС'3oÛ-àé¦>èrÑÆÔ«•Ü¡ú5ŸƒdO|Vmf_…ÚVá©Xòçí°å-ÅñsvªÉ—«=?u»lE„µ-2–ê·ìfËTÛÁ!W{ òפÃ}üÙoíã6·>B·õBe÷³°«4 …¤&’is£t«)˜6±!2´þÖzŒÞb;YN¬Þ‹ôƒ–¢Ê±.(:á2¬ ”G®Ùй‡ç°(h'CÙ 0gðH ›_;G–/w"ú2È$ˆÿ!La6¨ 7‚Œ¾ù-a 6yâ3½1¾¿ñ¤• ¦~ÈÙ<å›Ôò€öÍãU‚áèèÈBô'˜nz#ÿ'å®11:KXj¾”cÎg\:¥*³í£‹‹ƒB£I|!˜ ‡Î¨„Š}ð}²©S§&z>lذw…ìÅá…ø0NúZ& ³APr“&'ÿy@™Ê¯w áDDÿ¥ÂMeüÂ?÷ú¨ÔÉúWiR˜¹Œ!œè ŒŸDDDDDÄ NDDDDÄ NDDDDD âDDDDD âDDDDDÄ NDDDDÄ NDDDDDïòAýˆÿŽgÓ÷áZ«·}ïp{Ñ¿‡5âDDDDD âDDDDD âDDDDDÄ NDDDDÄ NDDDDD âDDô5 `÷DDôSrÑç ×ëqìØ1øøø """ÅqF¥2þÐãéé‰3f`Íš5È—/7 1ˆ} )„?þ]»v…½½}ŠãFÓß7n`Ú´i([¶,C8¥@€Ng€JŘBß¶o¾iŠöþvL[pA‚ù‘à%öL€yÁøæÅøîYƒ]÷âL€t°0 Éñu!ù¡/ÿþcæžÄK㮘þVvn€¡{ƒR˜Ñ×Gª oРAª!ÜtБË‚ÁƒÃÁÁ'NüøŸaÛ€fu0ü£ËOÝÅ?ÐÑm-| s 9ˆ!å[bÉý·ÅùîÁ¦“0~Ôz?ÇöÑnXv9ÆtÜðß2í'BÔû¦‹;…émûcýƒTVZˆBX¸þísƒ/4+‡¾;R?¾6¡gQ8¢ë¢à‡;WÏãÔÁíX3Fôî€N“Ž"äÍ ô¸¹ 9ÏðîÍÆôÆÈòàá­M<óè+X:ô7ìz¬{ªÃx ùð ðý³7ZÍ<ûv>)ˆ8>•«ŒÂ‰p!éÛöÍŸjªÒZâÕ¶©˜_´$FW°tPÃX»7µÛ¤1;‘Ax³ÜzQ\ëÙkŸ¦PĪ+bܹhh/Kt>c›1=^îŠîáS°Ì½ Ò'9Å1ÜX€öýþÂ3³rTŽè±PuªÙ¿A錎‹–¢sÎN¬‹Þž¯ÞQÐË`ßpŒ«5÷e"ú?“š£¼+„› Ñˆ#F 44«W¯†­­í‡Í\*G^W„d@¡¼ZŒ˜»«tG.y|y(C¾B.ƒú:•„#fùPîÔ žÇ=P4ø>.ÞÊŽ8³|g¸?jNOB–•çê‰mGF¢Ä›¢9á¯Bý&ëŠÁòÁ1Ìï7>s×c¬ÓÔ¯= ד$KU©18±­r$Œþ;°rãCÔî¬67ó9âÙÈ9ø«]ytÎþŽz1CCdÊ¡4æâl4éæÒî3àÞ¬lBÎÃûš5Šç³‡ù‘JÈd ¯èÂñüñKñ3=Ã&·zð8¨…cñÐÞô…]­Î(è¡yì¡0‹ ÎÅ]ðb'.ö+вj)ïŸÅùà|èñƒ*ñ YåCÅ‚й¥¢×ÎE‹Ü*è‚|ás7tâ:DÜÆÕÇaf' ZP 7…&;qhå²&QdùaÐ~ìT€?çƒø×À¨Aœey´o´n›¡[±Z°G8N.Û„j#PÏ!1Z ,Õ éè€Lµ†Á=l5®ù:aÀ®‹$p÷cçƒ,¨[«¬Ÿ­C×–g^Ï­¯sµÇŽÅŽ£“Ñ êb\4¤E©l£æÒ 9wäFïÇ0ªxü±2w¯íØ7´ nþÞ#´#±}ØP°¡Gsü]Ï üœ …Š!œÄ¿:œ™RnÛB q¨[qœÙûƒPÓK*K&á謟`qcZlGÙMË0 «üM­G´ÏfÌÝYekŠAÏn(5–Pb ½ÐǤ€Þ³Ôeðªö¶ôÛŽ­“/ânǹhÔê!úŸž…éðŠ½ªÀ¢Á"øÌ©'ó£Éµ®8=«FÂ/´V(ÚcŠ :Ķ„—uEµm•±gm;„Îi€OÁ{VMØX(Mÿ?Ó§P¨¡Ñ¨!×…#ÖˆA\Cd¢Å¿Ò{2~ˆAük¡By#¸èñ6¸JM=F ÇÑ)Õ“5åx]‘¡=35&mCP¢ò÷,~.9Ùk×Ä›]•%1lïE 3 ÆÞãÂXÅDìY&y vú*èÕÿoÜ›~7vÏFÿuç6©Í‰7‹‡ å~Bñ4,jˆèëæííòåË¿yîïïÑ£G£páÂ:tè'ÍSÄmÔC¯OúŽÆ7e¶·fÖAí™7‘h4UiŒ;ùóŽ·EÅýqfuUìnS ^ÉÃÊÓ®lE–`2g¶…L» = ÍE{Ñßň“ÃK£õš0~`S CàaŒs›ËqÙP¶TÌ}48á°q #Êö‡lîiLª z÷‡×ßÅÜ:Ù1×ì%MÍ9ðYÝv Ïåér!ÃñáXv½ºÏ.4——`ëþìh=¼>îœ:ÛZóPR-†Ýßoâñ€¥hRóº^[ŒúâQ÷ðOti8‡ƒXXØ£HÏUØ8¸$l^Ï[¥„\¦€ÚB1Cxq;OE &¯?^*•x€ŒÎ¹a«’!ôö œõ‹† S"kñj(œ)þW™B+k+ĪÅÇ* X[Yš+ x°¨1\V(`ÔŊѼ- lR˜ŽÎú¸X.•FÞÑÔ˜u‹Úð F â_#£Q0µ!|g|/3{N7=Žº0ûmF€KlXÚN/7¡—X˜}ê¦Î”ÃBd! <2æuÀüLS°¸]Îøvêú‹˜Úp(b‹8Ê9œˆ¾b^^^ððð0õžÒ§OÄÆÆbàÀP‹!Pê®ðu÷…Ãað[„F¹¥ZÆ:÷ÿëòë^ÜëvÃ+õüƒ]\ƒTÛª–áÞ«hÒ§‡,ѱ€…¥Eüä[ÐÅy›t¤€,{ODƒ“lñǾñ(§JRÉ3þo܇CƒÊÇc)P—n…Õ/× «J•5UÒÜX5g‹4CÅg?}£*r£ë†Íè[àm]¹L Ìæ-ì…?\õ“£h÷Ahå$CŒw mâtpí¾3ÚL/ M¢3„‡Ø5v$^Öª ßI“àÿÓ´=»ªÞ=ðtrô¶[‚¹]Å@/ßþB„':æô”b9¬l,¡Ó‰‰üáøÆ>‡ÿC=\\óŠ[GßÍÃÑu¡ 2{4_y3\åÐê¤öýèââ Õ‹ ZÄÆi!Sª RÀôëDžÞ;phxøüV½b§áï‰å¡2>ÅòfUq¤ùi¬mž5âÄ þµÐuGµA{•ìÚ–(³×ü¹Õ§Çô² ›x¯VËa|ys¦ì…ÜÉr¹*Z,,ä‰ á^ýQÓã·é‰Òžo ìRý°¨¥C¢îiâlÁ¢÷pÛz(Z{Iµ<¸´i KîDô ¨_¿¾©•eË–!,,Ìt§ŸŸ.\ˆL™2}Ò<­‚Ëìß;ä)_´hj_m:²© xt>†’ZØsÙï^\P'þ/1KfÈ…ÄÄÐXhâÃmS³6â2ØTë·Õ 0~qKìì“$«­`¥VÂBe åh¿þ8Æ'¤ö˜“ÓÑó#,Äã@ŽþÛ°Çø7†ƒ¸1Û•Æ@ó+I›çÀ*Ó!£$Fߎ^9Sh˜"›¬Òf·_j‡íX\šÓ}Ÿ ƉùeÄã‰?ƒîE Î>‹_·o„ “›Ž]1O/`ïúÃxwVßÀ®?·¢`Û©Xí‘êmDtŽ6˜³<¿öj…ºwæbçŒ:H#õ–®5Ö›ˆˆÞ1âFt× Ú1£pâøi<¿ï‚ò%lL!½p¿­8Ýþuø!×f f×E¸kúyâ8Ê;MXßîpÙ®B™ñ§°¥« zTj•©¼Bc…Èu]PøM{ TR1‚ƒøWE]q$v*†Ü„B<ìƶ›„“1Nh9g z|]/ ƒÊÚBºŽæmqæ·S‡LƹF`jñè¹;Å"vu§ãXu}B³ÎNi‚I lR*aÊŠÚ"q‘Æ@\¸OÓ9£hÅ–hQðüñ¥Ì„K¸CÑ×OºøRºqOš4i°|ùrÓk¿þú+J•*õ‰s4"80F[`N¹œØr7~êj³péÏVH'3≷7ž—l‡Ò¶.°)Œ1»n¡¿‹7oë‘¿Fn(…{ˆŽ³‚M*­±å9ÐzD¬i3ëê·ùO …J&>ˆkjŒÂƯWÌš×mÂåiÑ|å]4–.Ê×yctåÁÍJðbPVªŸ´…ô÷V`ÜZ9Zm¨;S÷`qäð}S3ž½{î¡O—øã’ŠÝ¿ Äêp{q%ëaŽ×Ï^²7 Fý½*ĆD]Ja§ui kSéÅùé#Ãce[hñJ«D1·¥YÓçNÉÑcôTÄæï1 ×W©í3#›uìÅQd8ŽùÆ~å01ójv/„[Ój¡åãá¸òG­„f¢áˆŒ4À>mq+Šóz7“¶^’N¤“ ~½èóíö#®²†½}Ó ½€›ëÖálÚ&ØÞ{ü…‡ ûø÷ÒØÃúõÏŽ‚Çg¢{§I¸Qx$ޝƒ,ïúÖ+Ô°´²‚U QŠçòJ ³×,M¯%Þâ™Pš'¶¯Š׿b€ûF„rE‘4rîDôMéÛ·¯©¿ðêÕ«£S§Nÿ`NzøÞõCÚ|y‘^™¿l}„gÏž™ OàíQòm{cãSÚÅ+å…ÿ1/ø„¨ñ`ÿ>Ü|z§äAñB–by‹˜8[¤}Go‹ê"]1´K!¤IÞ(=ÑIBdàKD É_yñ N?Ó¦ØÕ¦ ¥Ð®½ðRÛkéù§l_¬9/y w1iÙ/vÏÄŠgµ0kaDü9CVP–͞Ď)C\˜Æ¹.:ÖÍ §špsïŽÊPá—‘poW¶Jµ¨Ô¢€ˆ‡”=rÊc'5é‘~IP£DÃ:°z‰r­›À)•ØáÉ6¬9bšµ ¦\ûgÆË`%l/ŽA±<9-«rås‹K ¾–5g%xüÅ/}s¾ù6âBÄ-l™:³½3¡÷üAhëü êû½0 O,FŽï‹9-ÍÚœÅ!ðî dï¹Ûæ†\‹½ÔÁ“ìóµK3ãøŒN˜{p©5ë&;ãþŠÉ˜´¶œR(à7vC©©×ÀØ7äNLD_©Op©)Šy_âmÛ¶E›6)×(KãÚØ|À…wºk8v*¥†òøæ÷~iV]óõq:c~”*—yžÆÊÙr\Î[“³‰‰Q‚ ð4(”VßIÕ›öÏñ½³Ä±P{Ðh@» {S:¾F…Fk#J §µ’–ßG¦ ÏK ÎN« Õ¿¶Õ ðûs¦ß©„©ó*ÃN& üâ\ôáÂ#½Ð¼5lÔÆˆ¾«á¼¼òiL‡ŽäŸ%öü}-¬ÕŠÁÙ¾Ú°7ÝóBÆÑýWà\~ ÒÊÄ «„¥¥JºcÖÿa[vàa£ÎÈýúƒÆ† $Z¨‹XØë7Ür‰ßK¨L'UÉhïàæ£ÜøqöBñô^CÚbrPL™ÜEÃ`ÆÐ‰¸Pf†”·æ—ŒÄ¿º 8´y-þÜ|/r´Àø5}Q-›ô#˜3ZL_ëé#1¡uSlªÓ›5ElRádƒ¢Ý¦¡mV9ŒOþD·V‹ák‘…[GzƒZ^ºŒÇTÀú­ì„æs¯§P¤˜·7éÈ×sÖ÷È_öé¯ãÈ9”V¶ðÙ9¿î|=Þ\ j'šû'¢¯GÑ¢EMj&½»fJý„K!\Wšæ}^î^ŒÍ‘Õ0½¢5NHï5Éå)Œ§®Ö6¾Ôu*…f}ó DÚ(“?4ÃõÍ“1Äc*®…t1qˆò½Š;‚êeV@hƒLù»cÓdVØê£Cm€\ ­ C¢¡ ßG1xég@ÓY£=fb"£—P¹c ÃýÁÈV$»Ys #ž,mŒÛ/&¾«äë6âR'ˆcƒÓT4ç›üø’¤×éž¿ÿnìíÐãr£~ú\^3ƒ&‚}¯5˜×:‡©†½îĸѮ3š4òÁÀñîèP2­©ÿöD§ A×°wû]D‡F@8¶ /Œ!ˆMÿ^ôå¥X|¾Zv„>æ*üía¾“ÛÅš°Xs° vuqCG7`(ª?‰ íúâP†`9ÅA?4ÂÐ_ËÃJº÷†\ Û-Ñ9³÷®_F¬*+ò¿: ÖÅÑÖɈˆW1pjÜÕ§GÛ ³¡4p¬7¿5ÌC¬xÆdÉ_‰Aü+ Æw?¶žS ºûZ4¯švæß]‹Ü¨7z5JÖ݉õëOÁ7¢E² y¶öX~ªý›ßÕ½á¶9é*u@[²·]Œ£Í p{eä+SAl´È„<ÅÚaÀü¾(4Y}±uâjhÓÊßøœµû ¯¼02¥OŸB"#J´ï0FD_WWWS_áÒEšÒšï"ÕžK!\šæ}^<‹@±žCQÍ6 >™‹¡ÿBO ,¦HTæ?ÝÔ].Ú˜ÊZ¹CôOÔÆØ ²'>«6 ³¯Bí«ðÖÈÛaÊ[J7dë„U’/W{~2êvÙŠk[d,ÕnÙß.S¹ƒç™ÚaîìÑh’[‡³×ÿDŸ>Eà£7]›$“©`çÒ Ó=²Ç—ß²Ì(^§&lz ÇÜße©;dr•ü+ç§þƒŽ/JK;XX*Ð"³x¤òÿ ‹Ö=GÍ?ö``­ozH‘Ù—Áõ[{Ƹ& lG/¸ºŸ…]¥a(¤Z«äFéVS0mbC8$lô·ÖcôØÉÂpbõ^¤´UŽuAÑ —aU ÃôC˜4Ì•©oÈ¡Tó'/"¢/쟇/9Cø'S©“Õ@«4)lL™ñ¾|L—(?p|†púÓ'1ˆ1ˆƒ8ƒ81ˆ1ˆƒ8ƒ81ˆ1ˆ1ˆƒ8ƒ8Ñ?À@Dß-%7}z½ÇŽƒ"""RgÔ¨QP*ã=žžž˜1cÖ¬Yƒ|ùòqƒ8ѧBøóçÏѵkWØÛÛ§8ŽÑh4ý½qã¦M›†²eË2„Ñw‹MSˆˆè³jÂ4hj7tär„„„`ðàÁpppÀĉ?`Îè´qˆ‹{Ï ÕÁ ¤”þŸaÛ€fu0Bj‹Hé Cüo=Dî«&è¡7|ÀGøÔù›èp|TÔžt:îfD âDDDIIÍQÞÂM™ØhĈ#Š™3gÂÖÖöýöÕ&tÌ— ¹r½gÈÛK%¤bÁƒ^oj.£7f@¡¼ZxÎ]‹ûÚ„×Äôl0&¤c­f4©Þ‹¼ñBLºBÔ]œ:r Á¯vbH£¡ØùJœ×³ó8xî b¼ØÚµ»,ÅÕH!õð óמ_ˆ¾cwÀߟâãÂ^ 0<.a±þØ6º'fÿÅŽˆAœˆˆèÃÌ›7gÏž…»»»©IŠ ïF–¡ Öû=óg°¾M&äêå…GϤçOqkvMXŽãÅç¼Ð+§">È€B9²#{viȉ*. üâTÉùúµ\pâ½4²ºzLú¶Û»¡Nÿ¸¹}<ú,»ˆ˜ðpDÊìÖ:žîÝ0~ûh…ćЌU:¢Nø\tè³~úT>À'Ìßp ûOÜE„1¥³™Üÿû.?ÕCà.EÄ NDDô>Rò•+W¢yóæ¦&,’qãÆýkËSäê ¯GR`O:øaMK{ÈÞF}Øh©^G±«¿Kçú£Axþ/·L¬ÇM1ý2ìeI¢*`ðò¹¨uo<ú/¿”³ø§ÏŸˆĉˆˆ>Š··w¢çþþþ=z4 .Œ¡C‡~ò|?¤ýí¸F¯›¢˜ßÔ4ëá¿ý7¸/<‰§B&dÍ[ãwzb¸ËUÌž}¶9^bÉŒKÈ_¿:œ-R^ŽÌÖֈ…yÓ°ëeÒõûó7j…¨¨(ÄJMZt±ˆGEÇ@kä>Fô-`¯)DDôYyyyÁÃÃÃÔ{JŸ>}‹B­V›º+|Ý}ᇺ6­*ê;cVÛÜ9šqUœ¦˜i? Ú}ƒ H1¿Eh”kQª‡?ç¾ñ3+ «?û¡ÆÆê˜0½>"oŶíG\¸3ú·ª…"i¯cÉðn¨v¸!~›;r«Gí[‡pôyvvöÆÌyçPk\X™-çS篿; ]æ›-©# lxýXšÜÕˆĉˆˆÌÕ¯_ßԃʲeËfºˆÓÏÏ .D¦L™>z~ìÁí>FƬiÿÕ;€Õm2™š–„oíŽJ–ÀVÏžpVÈ P[˜lqZ-—Ø¿w ÈS®E—ÉZ”+sÖŨ¿Ê Á™89>ÂÊHG4˜¾m²lCÓŸæ Ûå˜é錅“Ï MÚ¤‡Í\Øâ…g¥zà Gz4›†õÿBׄ¶ê‹¿ñ.…ÜÃóа€FœƒÜŠ`˜õRœ›R RL»µË/ÞÄ+c9däoÛD_-~}‰ˆè³’Éd¦÷üòË/ؼy3öíÛ‡¾}û¢T©RŸv RYÂÊÚÖ ?Ü}d‹¼²ÁFznm+R Ô*X&<·PI‡5#‚ƒ`´õÅœr9.ÎL>8wØ„à×]aÍ%˜u³šæº€ß—ÿ°Ð„©¬`©ÔáîŸ1ÿº¬7â6<ÚˆY›´¨ß­²ÿÐk?ÂÂû”4ûÌüÏqbùïØr-6•‹1Ä^Û‚Y+N!MTˆĉˆˆ’’·Ô_xõêÕÑ©S§87¡G¶à0\Q«„ê=ãêá{×ióåEzeVü²õQ’‹5ŸÀÛ£$Ìç"„‚E`Ô_ÁâU~pmYJß»ˆ8‹CëçÃ}¥n3{¡ Úl"í}¬57Ë Æjöâ ˆ=ªÿÚ ¹Åø}/aü§ó'"q""¢!õ .5E1×¶m[LŸ>=Åñ¥qmll>,†‡ÅĉáØ®3*Z½gdÝ5;‡R‹|`ûKn¯œƒÃy{ {A%šÿ†•ü±rÕ8ºXa׬#(4éwtÍoÝõØ;¢Æß¯Œ)SšÁ1áhªÈÕ3F»àèÀ®øýâë}Âü‰ˆAœˆˆèC-ZÔt¡fÒ0.5UI)„KãJÓ¼áå Ljß;ÓôÂäÞ…ñîJc/w/ÆæÈjhTÑ2ãS,o’Y²d1²¡üø‹oîRi|º—†£iÿæÈb—%2߯¤&°%ÇX¬Ý¹³j‡aë”IXèu~a:DûîÄØ¦µÑçD^x¬šŽúŽ ³å+‘³õ,Ìm£Ã²–uá¶Õºœ<-ö/€¬¦õ͉N[ÂñbMKä0=ÏŠýŠcÑ׎kÑgáêêjê+\ºHSº@ó]¤Ús)„KÓ¼OÔýS¸jÛ«æ D ËD25ÒØYàmÖáųë9ÕlÃà“¹ú/ôÄÀbŠDaýé¦>èrÑÆ4Qî€â†¡Íϱªm[¬C4tû “ë»ÀNäšá…\Ûçã÷Å¿âÀµY˜Sê ü³öÂÆÝQ:½"ù Ë3ÀuôVì.2Û­ÒŠÏ?fþ³±Ñ½>ïhÿq`Zo±ƒŠýŽ}Õd²øª iP˜ ª„A#‚ƒ8\ঢïM@@¹!ˆ¾:Œ‚ r†T"ú̦Nšèù°aÃÞ²‡âÃ8S-Aü`06M!"¢o C8}ĉˆˆˆˆĉˆˆˆˆĉˆˆˆˆˆAœˆˆˆˆˆAœˆˆˆˆˆ¾í n„ÿ–qpmä†éW ‰ßÒƒGÓpºÏRíoÕŸ%¿¢|£)Ø*${ïÒ=P´ú(¬RœZ;>Ó°ìJ$„Tá‹E½»¢ÅÒÛÐsŸ""""¢ðUÜÐ'æÙxŸ @þ0)m›Ýâ®lÆ÷£I‚{(6OŒÍo¶J -Vå3„`÷æx¥Á‚¦%±rdÌž6Æ¿x…¨í1®ô^Œ^ÿ¦ ùÀÅhwLœÜ¥ÎW΋b¼o)}•AÜø ç_Ãíg±„ø­ÜõÐgV…˜µE97ÎŽÓãË3 ûÆX\E‰¿Wc„§/ž^ ƒÑp«=Æáb鮸¶½Î<•¦7àŽçLL:™íÆvCÍ´R¶i T@½‚ Ä^^ñ{‘³Zk4ί6½—¡B+ .v?—‡Gó¢@ùBXWÑëÇ.„÷Ñž˜~ï!.<ˆFÑ|V`¥8}}A<î2fö‚¿Ófƒ¸®{cÞ"' jÔc¤ þ Ç·ž‡ÚBh\-7ŒwNbǵ× ˆŸ¯\ZÓó(œÚ²´%PöÔoèäg¶ ¬åŽ5¦Ç °u Úâታ¸oW+çŽ@댯#µWîÂm~ +xzmÀ£×M×—aòÿØ» ø&ÎÇ㟤MK‘RÜ)Nîî.C‡M°áîÅ]†Ë †:Ã0ÜÝ]ZŠ—–ZšäŸ” ?`lØ€}ß{=#¹œõr×ûÞÓçž‹xñ37ߣ‰‚¸ˆˆˆˆ¼Â{}³¦ÕÏ—ë¡ÑHš86F£åÊd!lïâ¶Äì‰C˜=¶yí—Îi*2rÂ`†š¥‡:‘¼T JÞ¹JìàÈþK,V"*£œ"¸ùOçÆúÎe©4ÿÏw²âC»œÙi÷ôí¸z¤yô‡£÷ж„Éü‹ž|ñuu bý/˜½éÖðPÖ.¼FÌj#™žÞ̾kOnÖtq~rƒ¦ÉÕ•hfgŒö”7[Y¾ÈŸÛÕmŒ^rœ‡±göØï8š¿mÅwöºC8>Û›I‡"×'²×S®Nœ(ž…qùð‚¸‘$ykÒ7¯•³ßFqƒŠ”£nÂ'wG†ß<ÌÊ~ö8m$AÖ¢”Jã9­é2¸rbFoêO¾ú¤ùŠs jõìL÷šy8Þ¯ _¸YóÇþ}ù1rÚÌ‘C-W¶2fÌRnE´;qñ,Lº–©1sòYëØ’ã«vÕ©çwå£gs × ®î‰)A6©¸|ЬX­FŒÚEDDþ‹Aü% q¨Ðõ*D¼1³³_5{w¼¶ä^˜áßÕ'u”àœ°CÓÇ%ÞîA´\‘’ õJ“/þc.ÝI–½ Ö´Á8¨2%f%cü¾h›ô…ÔQ¼?¾¾½ÙÚ«"åÖ•bãÞž<4ŠL5æ1ô¼ØeâáöЀÍÉXý£Œ8;;aô¿Ë­0ˆíªL^ÅÆýÝ“è1-”¦ßv%_ÌÈÁ¡ûVw׫}ÃøÆYˆØ…¬~lÛñ»0²A<.l;ÀµÐ—<çÕ›Œ… :FÔ¾z‚9÷S/z¯MC·±mÈçÏ“µíÑFzVjÏþJ XÛ+'.ú²DDDÄŸ w·ðíò›ú3zçÞÎ7+fÐ÷ײ̭ÿYo%n9«á3œ§¢„óy½Çm$´¾1l”›5 ¸6Û“Kò?9:üwSTà‹Œ rÚ‰¼^Lì>™½O[ÊÜMËö=´”-LFWu^(¯¼ªÄ=‰Û;FÓsrYÖzg·^w×NgÁá{TíšêýϰŠ`ËÀ&ôIØCïvÌó³þï,M9èµy5mÓ9=wˆGiâîöÔÿì63¤DüçøyO_ מÁ Ë ó›T™T“¢Î* ­ÞJŸœ®íXÊŽk–×þ„N) Q³h*Lú²EDD>¢ n¾Î=G³ô^l*õnN¿¼iÙ¹a$ ½û’7õX:dv{å¤aÇ·²æ†•p¿M,:^Ò[Á“Ú]>§Xä#î]Òex~ÃØlØeXíZœL׃Iy`<}ßÇùÙpµ+I¬Çè^¬‹J~ÏÅay<äOX¹{x-[ÎE'»}_µd<“=+Ôp­Öó(Y%’Ý\ÃÒù©VÄdÍ!Ä,Ö‘Îuæq/z:¾Áû£ujŒŽÐm/V«=ÄÁ<ßÛ±<ôcÓù,4)ºƒÁSýˆÇs³:’ït :}剟[bÒ&r\ا·OkÀѨqyé^Ì¥•ƒè2ýú“ûXϨÎë£|¾Š¡VáZvåìAÜxs!­Ê|O¦¹ûYÌô,Ì?8ö ?.ÍKÅîö þÜì/°´_fÞüßëÇGÓqã“×N©[³²dVr$ÎIÑ,[Ù;®5KNÝ%E•¯ˆpsê ä͸„Ñ=³É+ Ù¾lJ…T¦ƒÙµôk’½xœYÎ3±rÆé‹y­êV¬°3 ¨Rü+ÚýâKü2Þü:éÓÈnHßp4kzä#ŒoY’£Ot~ù’ÛCÆ4lîqy°À›NHõÅ@v¯OÏ\9r&«ù] äÆÉñОÄÙ0&ÍG©>}ƒ›Íá›õAÄÎ^§×äîüŸ9êQé›W°¾wIâžYJ×Ö#™{ò:[‡ÕÇ%Ñ“é‹O¿Uû—¼”‰|÷rÝÇG¹y”‘Å]pöêÄÆk‘ÃìåòœÚ¸G™Ê¼…R$%iRGIIé1§0ûÍ¡Ž§'U¿‹¼)9bö²ÿú³ùøÜØÏà&LE†qèÆó¿¾³¹í¹ÞèfáþåË\¸ªƒf0(ã>Fõ̪{))ßù–ÍíJËi¶®ØÌ¹`›¾>‘·äƒ¨w—œO2º’*GYªWÞM¬dMù¶UEm kˆIþS9˜}= ¥e+/¢GFçvœ÷°O_ Uœâ‘Ïyªô+HÜ0xá*:^8ÎŽg9ï÷ˆ€`3›£&<Ū$‰¸J1f®I·vîdhýùbú“¢•‹5§vR7h7š#Mïqöì%.^½Éåë~Ü ¶`³O_¤j2=YSÞ*§´µ89A¶0.,ÆøM~Øb£ÝÏɼ•[ïþ­ùUg€÷ v÷ÚÊÂ>uY9üÛÚyøöÙX.”=Žú)ÞìÑY"""òQq#©>É‘Ï#ßæÿŽj¯×…”%¾f~‰§ïSSÏ»c”Ï‹0xd‘(ïMÄK—‹jöòêô“”/½D¾ñ H«DƒÁ-^9%¯ö&y#aëÚåëþOåò8ʦŒÚ Ã•Êßâ»l‘GBܬ”-–“Ûû1þ÷{MF,ÑRS¸jUòÜOÔ†PakZâÕ|!Ï-£¹’÷znÞÓ«ºEI3¦ÅÝÙ‡F«¥ÊÞîL14g|Ól7†_˜LÕÒ‰×5¶ùOq‘ì ËòCF&<2$[}Ö3nÂF|­.d¨Õf<"¯)²›·Y†íÛ&b¥±ÚáÉ=ÉN$ËõbÇ„VîíE÷q«8ö ¿¶`¶Ä¤T«šjf%""¢ .òá3&/Dú…ž¼ »È‚£¸mô$K†‡œÙuçŽßR7ÍgZ®8Âô#v ¯Îªp+Ü…S›{Ö’W/#Y~ªÕÌ™¯oòpÁ`~vÎN¥šµHüÊ6Sþœßw × H`ÊI‘gØàW‘–c1tš¾7q‘‚…‡Ç—2ª×P涯Ç,fÕ¸JÏíéZ½.'û¡sÍ,x<½Â‹¬åªâQ*+­ê¸slÇŸ{“z[\Iš¿ ^IÂXúó>‡Eƒ “lÝïIøKÆvô?ž7yßWÏ-©¾eq‘÷ˆïö)Œ™4U»®ì‘‹FÓ»VF¢“ƒñK ¸·ðffÇ ,•‹Jí¾axш$N¬¶S¼6ˆˆˆˆˆ‚¸ˆˆˆˆˆ‚¸ˆˆˆˆˆ(ˆ‹ˆˆˆˆ(ˆ‹ˆˆˆˆˆ‚¸ˆˆˆˆˆ‚¸ˆˆˆˆˆ(ˆ‹ˆˆˆˆ(ˆ‹ˆˆˆˆˆ‚¸ˆˆˆˆˆ‚¸ˆˆˆˆˆ‚¸ˆˆˆˆˆ(ˆ‹ˆˆˆˆ(ˆ‹ˆˆˆˆˆ‚¸ˆˆˆˆˆ‚¸ˆˆˆˆˆ(ˆ‹ˆˆˆˆ¼œµ DDäm e×®]œ={–û÷ïG ‹7.3f¤P¡B¸ººj#½g¬V+F£êçDÄEDäƒuùòe~þùgÒ¤IC•*UH AÄð;wîpèÐ!¦NJµjÕH:õ_›ñ£_é^c8»Ã^ñ¹Kº.Kµø†—|háü‚nŒzø“[çÆôÊ…X¸<«Þ÷¿fv{7÷XLŒ–ƒ¨“Þé/oÛÝÍŒr†ÂCÛP0†c€…Ð@>|Àýyðà.~×/séÒ%.]¼ÌåûIiôíhê¤zºvV®ÍnIÇ«u™Ö¯4?–ùS¾Jxß¹´ÏüÂOaÞÅÐ꓉?f.-¼¢®¯ ë{ùeéïØÊ·¡î'Ñ_²²·Yܨ ‹ .cy«ô8i7Q‘/„/[¶Œš5kFñ¨’'OQÁÓ1N­ZµþR·Y𽞈&[¢qÒçknm~s©[ôü-¯šÚÊ£‹{øýv{,}Ѓ̱ø=FâfÛÏáµ›ˆ]{À³ n³Ol°â°MÈÙd)¬V¬öaÏj’ÒR£A6îÄþ‚Ùµ/±ã×=¤К‚V?æÔ/€îĎíŽóc|'¢`Í*ú$‹×%C†ô¤N%\›O²hîBku#ÎÓk SZ²¦¾H‡¶Òh\YÜŸ[ù`î^÷Á)̆-Ø3÷²gï^öîü­nãž» õ3ß&ì“T¸–x.QF ;ÉôQëñl½”Äó>§ò…6üvm —†U¥ážj,ù.{Ö<¦J³²$6šù½GêÏõ{œ+§fZñ‘ìßÓ—ÖÓŒ­°‹sîî¯mnâêõ)•œšñyÍË|ÿsrjwQ‘Ç™3gøôÓOŸ½w„ðY³f={ÿôuûöí#þÍ•+WDHÓ nˆ–•Ï:Öär°/¾Á/~ššê‹“#f”öáæãlX°‘€ÌC_è"Ì™D lì:žuÕ¦òi\¶€ýŒj9ßîÙH mÌ-·ØÐ§9£nV`⪆¤3=™÷äŽã9lNDx£’Lð»…ß½@Ž ^@Ž"/_«ï|š×èÏo˜W$S?Æxyi1îg¾ÎäFœgM@B80¶#SO;ã¹®-OB½•pÙ5„.?ºÑrYK2{bé¢Þ M‘‹‰•âQô›Ãܼ™N¹‡èÇôÈöºÓ{8G‡—¡Ú”‹„[­Ø uI37r­Ç¨•a²ã•ý5ÔL3‹xõç²dqÔBEDA\DDÞSôˆyD³h &¯ÄÄY§¨ÐÅ‹+³úñC`%”Ýʦ¨#ÚØ3ü û¤¢çè˜02Ò;'!kùÚ4µ$Çéü&®VÊÀ:FØÊ€—·B7&®Ä E™ð½¸ŽéâJ¦¦ Ђ¢ÑwЫª7>MdZƒ ¸Ú#o<Ïœ”©ÎÝMË øtŸNà‹¶s¹lJÇo=«²òîmnùÞ&pðhjF1÷¨[ÁFHpNáþ\;Œ«aœú©/–]æÂ…+¸Ö™Ç’ž[¹ðÕbšVùŽô³ÖÑ>x"Þë2ÒµWUÒD#²iJt¦m@^%pqùröØÄnÏ/É?#=›äý3z2]jfx®-·!FF*Ôõ‰P®ZËÝ‚(ç%½¨8¥å󿥸¾ï÷li>‘²õ3·lzÌ3Š= â–wx`öçüƒRŒY6–Z©£´1ħtÇa”ÆÌÖ®ÓÙø(& æ Ë”ü\œ¼n½°<[ ç7.fÖœù,ß~·\ŸR9Ñ VoÇì÷¹þˆÃ}Ð#ájÆTH@êúßÐÓÒOwÖe|÷¼8>FÚâ¹û‹iê6&Κ9„ôžMšŸº±áp ÅŠ¹p÷ÜüBo²£uAf\ñ%Èf¿P‰·Ç6Ü3Ä"]ÑÚTl’¯Ì©1ø­¢}Íaø7øv9\‰ù¸2æ4£Fõ=ÔJµ•e{È_z©”DÄEDäý'Nœˆ. =£88Ú„GmšòtØSŽq}‹ÿ%!þÜòõÿPl¶PίÏjs9ZUJKøé•|² yë—Âóö¦-¥ò„ Ä{Yo†ˆS¦eû·á§÷)W3EØCuDh~ÌùUèÝw&ûBñÕ7QB¸-bRÛHûlXúèéU@%RN²ä^ƒÞÍ_¶¼Çìž5žç2waR§ŽÅãSkYñ¨,ÃÚW%G"âøÌ¥mÏ>¬Î5…‚g†ÒzÐV‚ܒбàRb5ZÄo}âòÅÆm©’—[ ûrØ’žÁ³Öb4†²¥k/ÀÉ›rmæ1¬b}É Žªdƒ+Ñ\íÓ߽ϣGnöÕxÀ…k¤*Û…µLüq‡Žåèñ{<Œ6Iw³‘-G)Rf¯@Zk>!XlO–g¹±’öµ»²ÿ“~ÌZ·Çñ lÖâ”Rƒ2Åø9­ê´Å¶ä[²nmM‹‘›¸æâEñŠ)â±ïoPozâüxz‡ªíÑy]ˆµjò'må ÿ{šw\û„›Ã7€³kôˆÑlÚeEÄEDäãáxR¦#`?}Ľ£‹Âqïâõ©šFûqJtbJ½Ä$Iš„è»zSeênÎìÏÒŠ_óÓά<Þ¹ˆi*0¹ö÷öÓ=énÏö€µ]KÒs7¸{¤¦ú lo~âsÎAÕÚÉhÝ.7™BÝü™ðÈü%*%Äx/ˆ · ”oöݲe%Cr÷?º÷³^cF²Œ8$Å:‘;–§Ø¥h=|>q ç'ÑÕÉT¯4K1’P¸}6"8oL@É ù±èR$3aÊR®³úQ"OJLÇFR½ùrøž.¹c'"gÑŒLïô Žh½ A«[S¤ëï˜Ò}ÆÏ(pJAáÊyXä ÏÖVœã¦÷O©ØÙ= Þ‹¨Ù¯’nÊ“q›¤cyÄ‹-äJ9}t¬új>{†Q÷…"ï€Áð¤zÀQœ¢SdqµÙl‰ìå€6•ü×øúú’$Im‘¿Áñ”MÇÃzΞ=û¬‹BÇ™Ž6áŽæ(éiš/a3æDŒè®8=W lÃf3`0ü­¹tû*· ‰H•Àí=Úšá˜ÍNQÚª‹È¿eĈϽ÷öö~]ÈÎc/~Ž_‰öbŽ,–(ŦqyëAÛñ ž¿ôÔÌ¿À`ŠŽûK«hÿn2mô„©HõÞmMg{×>%ò1ÒÍš""""" â""""" â"""""¢ .""""¢ .""""" â""""" â"""""¢ .""""¢ .""""" â""""" â""""" â"""""¢ .""""¢ .""""" â"""""gmyÛBCCÙµkgΜáÁƒÃâÆKÆŒ)T¨®®®áOmÃl¶`2½á©5<”0\qÑ™XDA\DDäm¸té«V­"Mš4|úé§$H bø;w8tèS§N¥Zµj¤Nú/Í×l÷F{€wú[kef[Ÿ2 ‹>Š_zåÃôâÇÖ[lš³…¸Õê’+îß[BÀ¶”ëi`ĺás7¼~d«?6¬Àâ?±¼×ÿ®Ï3Â@À£üïùpåÂyΟ?ǹ ÉØv ÆÂ ÝNDA\DDÂW¬XA5"‚xTÉ“'(/^dÙ²eÔªUëÍÃxÀoô®ÐsÏ…Œª’˜«“«RjÄILϪ“mö n¥ÜäSL¯ê1$lÿT:¯IJ÷~ÕHi´êïÇíðÐÈ |ý‡qµÂ:Ž¡÷¸¹{ m',¡îgñùåû_¹ý’Ö›VcVzn^MÛt6uÊAÃÅíK~^=¯¹Ïf?鲞uù®j9F Çjµb4Úçm³bÝZ†4# à öaN)š±t[?òÚ“¹åòwÔ(5˜CV7bºÇÂ=VlÜcÇ&~²Ô¤KŸ"Ÿe S›v:qù¯s4GqÔ„¿,„G•6mÚˆq~þùgZµjõfÍTb¥]g/ªwiÎÄ‹©fäRrçÔÆÝñ¹åSªUàp”I,¾‡X¿=VVþ÷Ž(kvnâDÖðˆ mpËLÃi(òëì½qŽ ;²f~I®ˆF¡bÑØ÷ë5²VgdñQfâDšV+Y×=3§ÆÕ¦gXoVzçÁdõea‹Ú쬼šo«ÇÅÉÉ„³“¶k.ÓæájZCòYè“Ë%b.á§ÇR±êoÔܰ’V©ÿ¨·Þ¿ÍÝhÕ™~x2£Ù/,Ž/fìžd|Ý´ T.òQÐÍš""òVìܹ3"d¿.„G ãŽñíÈߌ3)jŽaZçܘáÈÖaÛúR${v²;J®ªŒ?þ·×Ýz÷ Wü]I[©9õk5dP·ŒlîМ ‡cr¶pg]/êt˜¯©2]ÁAyìFˆlæ‚?ÆÙLس@káê†Ôyƒ¼M½éTöMíϪ8™Ó">§†QiÊ\,Më2ñ÷Ì,«lx6Ý¥ïjà5Ó «}¾a|A¦ÅŽ0m#<4Ë¡|¤ïëJ™±»ép¾åÇœâK…z¤žuE[’yUKû¿&²zoä×i¸|ú<ÆŒÕH¥3µˆ‚¸ˆˆÈëÜ¿Ÿ„ ¾ñøŽ›8Ÿö¨òzáœWáI5&äË{ha¶¥+ÙRu‹2ž9¯Ý „ôD{:å¹ÉTõšeœ†dZøôµ e#§KýùL6çZÉ„é'¹íZ”tÕǰâËR$<>„’ÍoÓïÈD};…X;<ˆ™ÃmV#éZÿ̦™8:¸$­BF²sh!LÖ›Ìø¬$[jïæÇúñžÜHi]Ïå6þ¼E·ƒÑ '˶o¿Àƒƒ_“neÔÏ×S<Å7Q~äT´X±þyLÚEÄEDDÞþ©*S—M\ëp’QåpçiŒ.5Šm­¯ÓgŽ;í–Åg\sºÏËÚ“©‘䇿`ÂæITÍähƒƆvÙðŽ1}ßè¥$ôô*f<Å]kA ÄòªN»¯àsðõ^A`¯(ñ=ÕÒ'/LYèža-½ÀnÁäbrDgœ\£8¿ Y—="EMQr;µíSªWdäqóKJ§¤X°mù#Z¾¤ ú°¥”Œ“‚8.ƈ0´¦#eægeþ_“úiëƒ3Ñ=ÂE>Tj#.""o…£ŸðÛ·o¿ñøŽî ãĉóÿX¢˜ÙkRÙ4úùKÓçBE¦¯™Ddƈî·ÏDzã!¯¨…¶r|cgîàöÓ&*áç™Û½ÓcŒàÔÕk\Ý5,²BΩ²àÄU®]ZK{/Gó“-ÄŽãáø”Ý7pêÌ™ˆ~ÓŸ”cL¯ë Ë 7(;ñ4W®\y®œŸ[÷ðð(ã;‘$kvÌ?µæ«oO-ABâÇvµçîÄoâØ„¯é¾ÚŸ8 âS9\DA\DDþÛë9|øðï×1Í_g´ŽÐzÿ+gÍc›s º7̄厭¿;‘Àß§3ÏÿSꉳ=”Ïì>;¹ “ܽ(Õ?ÙH¯aÛð7:=9qZîsç¾3±ö'G:O’'KAê ^xyEû°d©ŠÒoçã–ÊÆ®yÈœ9ós%G³%Ü{áŠÁ|aý¦= Xµ<×-¹!kÂgtFíÔŽ'¢ .""ÿu… Žè#ÜÑ—øŸy:žã)›o.œp«•ðÐKlÞtž£K™±3¯rU¨Ógã î¥S‹iœÿ;§Xo°têZ’7hHöG{˜Øè ¾wíȤöÙp5&¤R¿äÙÑ–Z–r!Ä>~ØYN]MCžNS9vfSë¤%IÖLÛ|ˆ½+¾¡v¦„dk1’n…b¼° WÊŽ>ÀÉ“'Ÿ+G¦×&^”°m 8ÀØvã¸]s ís»ýÏêÆÈÝ… mݘ×m {kßùP©¸ˆˆ¼Ž®ûªV­úÊú<õô¡?Žú¼ñ£îƒ/°¬Ogù;aèÕÿüõ> µ²Æ'š!ŒÇÈÔt0ÃNXñ¿xsZÇDal옉d£Î¨.žQž·ãì•%â߰ó˜y®ÞS-ÌnÖŠ_3 eå€J$=1$âs§ÄU³z5ÄȵŘp;bää‹Vî“¢FKJÄ…Çãl±‘¤rOWMŽ%Ä nQë¼BYß!+é:¿ðóYÂß ò™3Ó{3ǹ% û#–9‡A‚‚íW†§iÝ…L͆Ñ|MmF,hÈ’f©þæGEDA\DD> ŽðíáŽû8ú wtQøâ#îAü/=U+×– djp+~ÞSók˜;w ÚUdäý‡ÛpvôßíâèÃÛ´g°(c:¯9A›×ô¹°¡õ—¹ã¸§Ò”º{Å¢l¼´çn竱p³wñ q²ðˆžRL)ª0ò—’„¸¹pvÌâTëÈ™f…iw5©Óf [•!,™‹÷±yÃffô^ÀÙ‹HÛi)󛥷/':ž¹KÓ¹ÿwt,èòܺ„ŸžGÏ9&âEdv™ÚÎcK£x$v³vò{êTûž1ã“£aG’?MÜ.™i3o+M<*„‹|  ŽüQŠ)²¸Úl¶Dör@›Jþk|}}I’$‰6„Èßàxʦãa=ŽŸvQ踙ÓÑ&ÜÑåkŸ²9š¥8ãüÞ$ÎpÌáΘþ´:ËŠÕfĨ'aŠ|FŒñÜ{ooï×…ì<öâçø•ˆãO]OŠ%J±©F\DDÞ:GÐv<¨çÖó& ïSwx“î ."¯û !""""" â""""" â"""""¢ .""""¢ .""""" â""""" â"""""¢ .""""¢ .""""" â""""" â""""" â"""""¢ .òQ±aµ„n±Ú_ElÅŽÅj{ÅtöÏ-/ûÜJxXaaáöWƒÅlŸÖL¸Mߌˆˆˆ‚¸ÈÇ,lm½¥@.""ò®9kˆüÃBîsëÞãˆf ¶3¬œ¿‘[çÇ1}o¶À›öØlÃöÛ@*–‹Á>ºk‘^,P ·fcˆõ •6&³Å‘Êo±gÙ:ÎàE…ZHq‰íDšL1Ào=˶b}¼–6^Ii;¥*&Õº]Üü¤2íšFç̯ ˜´ö!9ó%àÈ}E""" â"!ó¾Tø|·#sä§Ã8žò§.DiSòè:§O=yéšÒßÑœ£“ÐmÉ.…Ûç±}(Ÿ6­EëÆñ¹¶û./kpbˆWˆrya{ÏÑlˆEº9I Œ +ѳ•?]Ý A«èØö!‘3Ø¿ç>Ž?”Í™¹ƒ®£KèËQùxݺÅÃ(wTÚÂ.­Þo\oËÆdo´sÕém~ˆòÕ¦póÉX<ö=Çéó·°Dõ3g®síøV,»lNpムl[qs`0VO7j´+M¢dñ1¹™H71 FâÌKŒ]½9iMÌçM»’üî%]ÂwüÉž'>Ç<$g.O}Q"""ï˜Úˆ‹üÃn\»ñ¬gcì´¤KhãÂÑ<ެ•~yÇ%& =ÀÕ=Ég×*ßqjq‚óR«Nê|VŠôÑí£EOO©šÅIëjŸÏ½Ìœw„¤ »S'ÁUvþº†5k~eˉ³lÙx³Á‰ËG6±aö&­»L¸õ>÷ÃlŒG¶)ôE‰ˆˆ¼cªù‡>~[¢ä$½“[¦ÌÔØ—ªeËân€°psD·³óëMëíC,›±é‹Ïðüm•§øevd›–àcü²î$}5bØÒA\(Ø¿«ØÒü,_Á~•m‹B(Ö¤}~Šh#ž·AsJ&OH¾„NoüólÚ´‰øñãë‹‘ÒÝ»w)S¦Œ‚¸ÈÇÀ)^}’”t{ìAÜ“ŒÎ[i^~pDw…¶Ç~ÛÀ°¡å÷†pÝžÊ-;óå8Of}faÛ’í\·:Ú™O£ßÍÆÌÚ5‰¸÷‚±YN0­YoÖP™¡Sò²µÙ6ÅiÉòù"n܌ڷ¸!~]æ^¨ÍjQxàu,w¸û( ›ýàñýÛÜŽæ“›ážwõËIDDäc§ .ò«1v#Õ‚×Ð6Û¦ˆ÷Ö@_.]¼HhÔ‘nq) òµ=(_¿ëÇ/=Zãý[hDÓC´D|’=97ç´ É÷£ÔН¦gíÕOœˆ¹sݸ‹ôÛKÄ­ “*á9#e*f!æ]G —·Ìf§_DËsŽ­šÉ1—xµþŠÜ1 ú²DDDÞ!µù7<§§‡žX5gqÙÇŸVÄCä5rÚÖ«¹âîsCË’#w.>ÉŸG«—2ùù‡¯Iöð!¦x¹h<¢åâ1Æ+GŸ9ó™?>óÆÖ'½³·”¹)U$#qŒb¤ÊKÉlÁì^¹„ÛoB²jLÙwãcJâ✆Ök®áseŸÇWQù¿°œ¥ûÃÀ5:Ñ-\^4‘7Ÿ6*q&Kçe¬ŸP‡TOZ«/—.="$0.ÙÊç"y4Ö{Òð ¾øÂ^N`¯Ù@ür}˜1¾™œœH\eSg¤f"cÄE€“Ó:¤Möü}’g¡óof}!"""¦ˆ¼BÏ1§ßŽ„9ãÕa&m.µ¦ýªÍ êôŸÌlEÖ˜ÿ[CmóßÇ®“áØÂϰkÏ]b:¢uÌL<Ð'Z’?w©måÁ–~TÝU€FŸ¦ÆyÚU’åªF­R÷¹qvKvðI¥äI“ÜÉt.""¢ .ò‘³Ü?ÌŒ^-ôûCŒ)¿¢_Ë¢¹ß•Ÿ¶öaûŽaÔ©}…ÞCºS7‡‡=}Ûž…ê«Ëñ»ãÎNÛ –¶ïJ û0c¼|4ì7˜¢®6,‹½˜±:›°= ÐþùýS‡NƒµÛ|#ú¿òóìlÔ‘zYްâP\Ê·D§ÌN,FDDDÞU{‰ü›Ìgùî«Zô[{K¬¼tý®/ÅÝ 8¥úб£k‘ÊdÃÿØb¦,:̥ŠÉThûÌFb?ZKßq{ 1e¦QïÆd‹Äã0{øöC½´ÉI–<)=ÓP ç6‚ìÿíž½Sá®xVlK‹Ì7Ø{.œ 5›óiªöüГß&4è8£Ëy’,YJ²¶X¥ïFDDäS¸È¿t lrqÁÅíö+Hpß T;–¯³Çˆü܉¤UF³Ø5!]&Ó¶_YÒÝ»C…ÜyàY„?Ã6÷Nî½éÓ&'.ŸÉÖ ;9uùׯûr/8®äªS˜˜¸‘«ÖgTvÊÉ %p> ÎtÝ/§¶´Ýº‰Ý§.Û§»ÉíG¡X쿲6P—„"""ïšÁÁñoÄ™ÿbŠ,®6›-‘½Ц’ÿ___’$Iò,ÉŠÅâ¸qòå=•Ø?ž¦"""òo1bÄsï½½½_²óØ‹Ÿý¥£‡bsd±D)6Õˆ‹üëŒöþÚ«em"‘2ˆˆˆˆˆˆ‚¸ˆˆˆˆˆ‚¸ˆˆˆˆˆ(ˆ‹ˆˆˆˆ(ˆ‹ˆˆˆˆˆ‚¸ˆˆˆˆˆ‚¸ˆˆˆˆˆ(ˆ‹ˆˆˆˆ(ˆ‹ˆˆˆˆˆ‚¸ˆˆˆˆÈ¿A¸‘ÿ—°°0‚‚‚ׯy߃Ÿ³3Ñ£GÇÅÅECA\DD>ôˆ»»{Ä ^DÞoŽ fbÅŠ¥0þPÓùÛ5á á"DZ;vìˆcWÄED俍]Sù𸚒½'ß…6ˆˆ¼m{¹õЂÏÃ0‚¬ïl9Ñ]Œ$õ0‘ØÃ§x=Þå²ÿlÞ"¢ .""òR~özí~˜=Lºâfzw| 6[¹z/4âu2çt=Þå²ÿlÞ"òqPÓù³Z­Úòœ›ß}wpÌ?yW|üÍÿøz¼ËeÿÙ¼EDA\DÞf˜õ]LË2}Øb?ïZ͹ï{…³Çö³cãJæNFÏÖ h4ì7ØžNΩ)µ©1ú(ÏNÕæ]ô.T˜~»ÂÞt©\™ÙJ}7ãÿt¾63ü.srÿf–MŽ÷ ¥\Š’¬W~ ~‰l|ôä}èÁ¡”-ÝŸ]õÊM1Þu*š}9A¡Öe=Þå²_7où8èï]"ï ó#n]¿CP¸‹ÛU¦ßÆ0’äô$ìÔEÜË5&óµcIF»ˆO Ī5‹ãß–#¢·Xëm6­>Dš†ãÈ^~}ªÐËÜ›žñf°%ã·Œ©•˜»óêQ4FfM«AŒ×óÞ¯L_f¦Æôà L{†ßOÞåùú:#±Òæ'š˜(ÃÈ«Xý±fæt¶¹NXÜÌú¬5µ Z9¼â$ñ+U ­ÛK¦¹±‘y3ÂižÇßÖ™Ëv—Mò#-ÛÿSâ^XŽñ:{_³Nûç¿6Ÿ>çrÓÙ£S f*ËgÍ“7‘NÉ" â"ò cs—4\ü0¢†yº58»ºád &ì@¶:zË6ö n`u©OXÖ~%ˇä\ÉT«w™Ž»ÇRÆÕ*òs«âDûô;ŽN(ÃÉ5¨y¼)»Ç–ÁåYîØÂ†³ù©_8&æ½}ñž…ÛÑ»Ð%ÔŸç’lè ér¨3ÙÓu&,8c´è¤k±˜uÝÒ°kô(6˜J3¿@4–ަù83Õ˦'Ú“xÁß—p³ÚjÖuɤ_.òráùyÈŽfëH× ™qõùu'| }Ä®å›ÉZ²¼=ôþ3—q¶{9pÞq¹º“#ªP*î Ë ;ÿîÖÉT–³ú“'üg–fâ”D¤P•º‚Q‘’ eÆâz§éÔ,{€¦Ç¿§Š=9›/Ï£IÕžl¾g#Z´Ødk9›E]s3r*£É£Á —h®¸ÚÇ·ùmaÕŽ‚Ó_㎳3¾×}I6 ±žµQµqï·õœÊW‹¢±ì9 gïíAb÷G,oSœïãõ¤S~—7ÏįÑ"¶õ¸E«œó(üÛO4Njåúò¶tþñ*ÖdöåEÎÑzï ;»y³‰à»fâé •WG_÷Ìg]hyº×/D2ÇÈ£:_f<Í⮃8‘ÖÕX_i8CsoÅ{Ú2'ºÊŸ‚thñö×Åÿà.gú’jæŸØwð%ËÆýãc‹}zŽn¾iù-w%hÀ3 ™²§Ç´ã*w¬@}Š(ˆ‹È¿Är™_ôæN¹b\6Œk»ñÅÞE˜Z·àæð´vŸÆÄ¦¹ð0> ¶€¥4LµÔˉÓ ³ÙžÈ/ŸåbÈ-®]Ç«Dzžµ·=dÛúãä®:X؃õOÞÔ¼•û–¸ŒÁs#›ÎœÜ|‡lã5Ú·ž -~'Γ¸\i\N? ñêÏçr}}eò—vp|Î_ ó¯^â»Ê®¸ÆÏF³éÓig?Û·ífÏ/ æŠùÇRmgý‘ì”/Û£$©:‚5»OsñâÆ–‹Aú:CÛ¦8 ÓÖäËÒî/´ñ6‘³ù ¾mš“ÁÂåï«âé™//¯ÿ)é<=)3æ4zf›¼jS†Ø…)[:±c¸½õ‡ÚØö³ïL|2gMJ’ÌÙq?³ƒ£þ¶n3˜w1¥Aš·öfUP9Úµ(Il5KùÏQ¸È¿žK²fpgæ<Š ®•™°º:÷§Meè®TYk"äA4ÉË*[\òáýyAâÙOØáŽîN,¸æLŽvÓé]6&ûviÑw![Ó?J[ÀöµÌZaqžœíc'&ÉÃÅ4HÝmöPÏúrdoÄn¡iîeöõ #(4?%MOÆwJœŠ¾Ï"qkÿÀ¾Ñ%x¾3»ze€¾Uy)'’¦M‹Ó‘‹øXŠ‘úÏÒµÑ §wNmÚÁé_Îô­ÉzûûðPû?¢pÂhS˜ ÑzÖ FÓ^!ò_¦q‘›!ŸMýŸ¿©†§=u¸¦­DÃJiˆ™¢,íz5§X¢øþº7½¾ÌM¬ø¹)‘ÝQ£m#àò%î¥LG*c!¡ÍÍÕ>Ü…\U+ýN ë×$ų#<€ë÷“©|Ɉÿ| (Àý7¸végΜáü…óÿžú­/ù\ þ'pÏ\¢º“ÍQ ž1-žÉR’&ƒ£F<Nå£Jޏúå"/ÛÙ‰YðsÊ:­cþ’ørÿÜ/Lõ#1p3óøq¡a/ù{Š}G|k™Üȱ½Ç‰óé(¾Ÿÿ3?Ì_J·rîœÝ³@þXŽ!ÚŸ¬“ˆˆ‚¸ÈG‘Oþ7+„ÜåÚÅëÜ ãþ‹\ôñÇòìÃûü¶þi å#ŽÁÄCœqs3AØŒ[НÑ̾e?sùéƒxïaÝž ”/ÿeÞψJùÉ—/ßs¥€=¤4¿ü×F¼"­˜¸r§íýôÞa‹žnNÚüiö®˜HûÒ‰ôËE^Δš}º“ùÚL†¶ú‚>“w­` RÆÎKùŠÎ¬ïù9äÅ]Ϙ<9bÚ÷ãm÷ùÿ6 ±=>Àþ“ñ(P4c䟅]ÈP´±NîàDœœ,Çíõë$"òÿ¥¦)"ï›%‹íùxa½wœµ+Ïô0ÛÖøYÙ%IÐáé|¿?õû&!<ø×nÇ&Ö£õ ÿjsýë0wc~~iÒŽ†í`â7 ñ:¸–ÝiÊáà%ñØ”ï_Ó ÑóÝê3‹:%6êË‘·Î)nnjt·—†òåx¦|ùô]v&Lr­ê^€Fã ¼ëÞ˜%é8·äó‡A¦VŒûñÉë"ã ¾bÞcÊ/¶Pûˆ(ˆ‹¼1œ‡?·¢X¯½¸õ&‹“£µJòÕû†‘C«’(2;‡Ÿ^@ße1q7ø³}ÎZâu™Nñ­MÈ>ä0Ñ3"õø~˜Kô`©w2»(°h ºöÆ{²Ýüw’²|'¿¬šÚ¼—Á%²0âÅϬ¡†å£æ+WÛEË2ð q²EÇÄêwMDDä/U 8ðäãNQŠ)²¸Úl¶Dör@›Jþk|}}I’$Éû¹ræ0ÌÎ.˜¢Tb›CCqru}¾Iˆ-sðú—ƒçÂe´HõBÚ¶<ä깇¸§KEÓ‹Ëxȵ+ÄN‚غd—W¸{÷.ñãÇÿŸáû¯“ÐÝ7Ó»o¤b¶âJ^O·|=Þå²_7o‘wuìÊë1â¹÷ÞÞÞ¯ ÙyìÅÏþ2ÔqV,–(ŦӫȇÈ䋹Ùäêú’ßΘ¢aØî"/Ÿ“ž™<^± R¦÷ж–¿%©‡‰«÷BIÇ•hï0Œ;Âêõ¡xÆuùÇ×ã].ûÏæ-"qyë{<9½øø‡j}gˉîjŒ«Iâ8ýãëñ.—ýgóq‘—rÄÇdö šÌÃù?»ïË6‘÷—z‘¿ÍÙÙ™ðpõ±-ò!q³ŽcWÄEDä=ztüýýÆE> þèÑ£ˆcWþ}º‘¿ÍÅÅ…X±b¨0.ò!?ggbÆŒq슂¸ˆˆ|a\'u‘¿NMSDDDDDÄEDDDDÄEDDDDäQqù #((H7kŠ|ÁÏÙ9¢ÇÝס .""Awô˜âîî®~‰E>Ž fG—£ŽÞŽÆÿ}jš"""›£&\!\äÃá8VcÇŽq슂¸ˆˆ|Àô„>‘3Œ«)Ù{ò]hˆˆÈÛf±—[-ø< #(ÌúΖÝÅHR‰=œqú‡×ãß\ö_YQ‘ÿ?{½v?Ì]q3½»?¾›­\½ñ:™‡ó?ºÿæ²ÿÊzˆÈûKMSDDä­»ùðÝPÇü“ÇqÅÇßü¯Ç¿¹ì¿²"¢ ."EèF}Ñ‘—,ou¶æ“Óhðù(F½G'ø£êÔdÈևشåå-q4Åx×ô©höå…Zÿ•õø7—ý¦ë!" â"òWXîqvß®¾hl³Z°„‡cHW‚"asè2f/ö÷áᡜž1ü²R*WLû8öñ¬Šãòþ±ùŸãÀž3<´}ËyÃ+r.¯DÏ–øfÕ%,Ú DÄEäCΉÑeH2%)S—`À®ûœ›Zƒ Ž÷)SSzØAÎOç3¯'ïËŒ>wÉêŒÕãÚÑ©auÚtêÍü7 ³^gï²u\ ~Å4762oÆzn¾Í4j»Ë¦•i4`5÷m/YΟ¬Óßþù¯Í§Wýìù“ƒvñó¢[äî2ŠÅàÀ;XQ‘wÊ™¬Ýãš>OË]ôÍíF®>;¹u¸Ï5~ëžUwqË;¼.¼ÈÏC†p0~}ºN˜ÃÀfy±Ýô%$ô<»–oærð?Wm{°—çÁp~'G¼d¹aÿü:=·~÷ñw'nÂøÄ‰vå_]yWghyOË9&VHÉÄ(ƒ\ËNàèœÚ¸ÿÙY¯M§fѰ1<x¤©†Gœò±ó0à÷å4K©ësygÑ’À=óYZžîõ ‘Ìqò¨Î—O³¸ë ‡p¤u5ÖWÎÐÜ[ñžv‡Ì‰®rÀ§ Z¼ýuñ?¸ƒË™¾¤šù'ö|@ɲqÿøØb_§žãŸ[§od~wÝÚ¸°f³WîãŽsj ~Y—Ø«çp!4„K­°ÍßKÿÔºˆˆ‚¸ÈžSš.\BÛLœn Ñb 3[»æâË÷øó[³ Ī5‹ãß–{r°»–b̾¹Ôõ0<ŸüìÊ,×6—wÌ‚Ïù „§,Aò¨g§LÔéÛŒ‹m·“oÒHÊÄ5`9¹ËÍãøWȉp»2ó-߇Ý{š$Y[“Dzƒ_öìÅ¿LEûñõêuz—(û¦0ù÷4±4a›™2h-i»4ü?öî<Š2ñãøovÓ{B(¡¤DQA9 6° EPQQDñî8•³œØ wŠb=Nš H/J¤E0BHÈfwç?›DHBèéù~žç}ØìÎû2»³ó›wßyWŸ]­.oüM]]ÿÕßJ¥-â¬ í¥€ðêªQãÄÝ´ãS³µdØ™Í`ÖwΡޒµXOwl¡ç ÇMÏŽ\¨žlu”¸3Za„^®žÝ(Ô[Å~¡¢yxµVm‰TÌÀÚŠÊn£YK´>õ]QF'(ÛV­PÒ_½5f±u?[éÉ~Š:ÔŠ· @PÞøGÖWƒÈsˆ?¾]4q%=â(+vÕnÔHöØíÚçꢆ§³Ë^"¿¦Ò^¢ø£‰Úòl?͵î;³L­Z—¦Ëk”Ñ>¨ÐÎOhòЋŽ˜Íý³4Ž7 @PId-Ö˜ËZi\ápãv(ÝC8J˜¡ NÕó«g5ã³Ö|]syï[¨Ï¿NÑUƒkËßÈÔ‘#eÙO<8†Š-“›éÚ°r£Â¯Ÿ¬IƒZZu97ý½´b•Òo8^áX M¾>%uÈôR£.Ý<ù-MŒQ—ÈTmÙœ¦5óý÷K­-JWeU‰o_¶Iqqqʦ…Ϫ£›¥À»©ú©˜]ïj·kÌkKäש«ê‡vP¯Þ^š;z žÿ$N…#ÒV·Ú­ÐœE‡Îû‡§Ì#k´:®š.íÜ,/ðû¨iç+·D›Â/:^ÿ©Ût^²—éõ»zkÐ-V¹õNýÇq›† Ó¢±5tÈÍ\ºC&r)ɶ(»î œn å\€ýgñÎ+¾¦iÖ´Ê6ªšÄÄDEEE•BMNÅNì¦^Ý~ów{©ÙðÙšS 9kÊñh¬)8'IIIŠŒ(Å ìwD+\‡û—l¶Ú4}ဢã}d½¶°?/ŠM€M™Ùnù{—ü7,G­z|meÒŽ²¬ûLÛ üb¯»ÚaÞÚ›œ•K:€î¶ê‰ ñ)õv”eÝgÓå=â€bW+,÷ð²/5KY%D=½ÀÑ>Š ·—z;ʲî³i‚8  ñDÂ:V­æUeÛQ^¶€ò‹¡)€sæåå%§ÓɆ*Ï>ëÙwAT`JMM%Œ(„§¥¥åì»({œΙ‚ƒƒ•žžN*BðóòRPPPξ ‚8 „qêpöšÄ‚8€ÂqÀyq8ÊÈÈàbM "?/¯œS¸®ƒ ¨!Ü3cJHHó€ç„Ù3å¨g¶#ÂxÙch àœyz á@ÅáÙWCCCsö]Ä¿ÐTÌ0ÎP²ròZ° ÅÍe•ßS\Ú—âP†Ã]bõøØT;Ì[µÂ¼d/åv”eÝÅÙNq@%²ß  »9¬è+ï’ûò53Û­ßfåÜ®æUªí(˺‹³ÊCSÅnoJéPÏúë†ûj_jv©·£,ë.Îv ˆ(ÙqÓu×ÀÉZ›ÿÌ5š|K?_˜"“M„bâŠQZÔϪ'#Ë]&í(˺‹«â@æRÂ+½]»¶jŸ¶DëÚ×¶çŒ==¦Û%—Ó)£qW]áø@OLY©të¾Ó™¥øwÆêíý­uU» ë1ÖãÜÄq”?fj‚֬آ³rÔS¤¬D%ÄïÕÑSÔm&Çié¢:Än T Êœ]îÿL±w:÷H»âõêMƒ”pïšv]P¾Çò 9Ë ®œÚôbO]ûò/:vü²ÕôüY«›š¿•ó‘ÐlølÍÙš”wêÍ~÷-ý»[Žˆ]vÓƒº¹“[뾌Sä_®Q#ÿ"ž³g¾>zÇ©ûÛ7W± s6“´`ì }¬¡šúÜõŠ0 ÕcÛ­•§hÓ9ÿÿwÍИÇ?Ô^o/köSD“+ÕȺ$å½ó¯lÝñâ0µö=És÷-ÔÌ­ö]ÞZù·ƒ»dÚ € Tþ(î¢ðüOg˜ü­´í®ˆˆàóÞÍ[üQ»Fæ?hïÔ}ºkvïúúÁ†Ì¤€ÒãÜ®¯Ç×ú ‡kÄ+1òÝ÷£ælJÔѬ4-ûâ{µîÖË ’F©4ÅL^©5[=§·K›|®Š(T¯ckɵɻ“†¾÷œ.qÐ/_Ž×Ô׿QãñC4éŸç¸¾’l+€ÃРÜr臱õÔÇk•T Ó½ºw½¥¾ÑuT·^=Ջ±­ÿ[5ðܯWWu¢ûê­]Œ!E‰F_¥¯˜¡9Y½tç€ËT',T‘-ûêŽþúîé—õsæz}ô`=ùaœq¯é±GŸ×ÛïÑÐaÓ•à.þ¶¤®]¢-îPŸÆ¿hÕÚä‚×H¸âõéè‚mrûö0d¨©¦6‘ÿ½:°ñ5=:øÅyöw+ ¯}o„t½îê×SwÜÖ_ã¾Ø¡œÍµMs&ÕCwô×èi ´?»4Ú € T)^jÕõBmŸÒ_¯®Ö%ç„•­…#Z«î)¯£fϳ"}ß«4eã.íÞ½»@Ùµf¢.ç—ŽQâ\Ú·u›œõ›¨nþïcí-t˳ƒÕ¯î|ýkM¾+&ç[×ÞJm÷œ&MºSŠûhe¦hýÊxEµ¾BíÛÔÖ¶+•jž¾MÅ}2à:ú»6­Ø¨¬è¦ª¯‚£«ÞÖÛ›/Ô£Ó¿ÔÔ!íÐt†ÝØ0ç m:2ÚåiMœ2Tµ7| ¹[›”B[”Ì‘@9eWÍ®Oé­çnÔ{Ï<¦n졹O½£·‡¶Uǧfkɰ3ë"4kÈ;çoÉZ¬§;¶Ðs…¿¹6=?8r¡z²ÑQâÎü*C#ôrõìÞ@¡Þ*ö^óðj­Ú©˜µ•ÝF!³–h}ê5º¢´6Cö2½~Wo½æt)¨Éº÷ñ KÚ~< ;³å6¼äm·ÉÛÛKvŸcl#¸µ:u¬¯P›©z¡)ú5)[ªÅ; ˆ(f†¼ªµ×à7æèÊoÞÔáõåJnDÖWƒÈsˆ?¾]4q出5¬`7÷[Ë®ø‚Í?¹¬Ý¨‘ì±ÛµÏÕE O×mk³Ë^"ÃM¥ÿ¼DñGµåÙ~škÝwf™Zµ.M—×(¥Má}™|o¤B?~PÓ~o¨F5¬ÃqÒñý> m7µ~oª&<ô?ù†µÑ€aÝb>!1džÿ S¨q%˜ÇÕ´Ïãjz¾ëÉZ¬1—µÒ¸ÂáÆíPº#†q”ø‰eP§êùÕ³šñYk ¾®¹¼÷-Ôç_§èªÁµåodêȇ²‚ì'œ¬ÄYl™ÜL׆•~ýdMÔҪˡ¸é÷襫”~Ãñz ¿Àmòõ)îCf€ZÜz¿Ú<ñO}ºâ2 9þçæeÚTçn¾¯"Ï`XNÉ·@I`Œ8P•øvÑøe›W lZø¬:2F¥Á»©ú©˜]ïj·kÌkKäש«ê‡vP¯Þ^š;z žÿ$N…ÒV·Ú­ÐœE‡Î»ÿ×<²F«ãªéÒÎÍò¿šv¾BÁqK´)ü¢ãõøŸºMÅrjÜI·h¢M½¯¸¬ãËíu¨Æ/oêÉÛ¯ÓÿÝ9POªÛ3O¾¢Rh+€ø ðÈé¦Pεï¼âkšfM«¬aS¡ªILLTTTTÙTîŒÓä«ûjó°uz¯_P±¬Ò3kJ¿ÎÏkÛVDÏ¢)·­½žÿé ®Ïù9Î\RR’"#O'µ(áˆZD–Z;âèʦeÒŽâ¯Û©­ïÖÛÞ£5áö¦òr%iñä!ú_ô?4a@£s¾ódíû.ÎܤI“ Ü5jÔ©Bv{«ì·nzN³³óŠ+_1ùî (—§È6ù‡„)¨8{©½‚T£á-z㛩º>¤Ðñ¤YvÓ\ñ‰”^ªÕÅü{ºÆ>–¬Ìl_Õ¼ø! ë׈ÙP€J··(ì-4ì«ÕźJ[íš¾p@ѹ?²¿^[ØŸíŽbàc³¤[þÞ%ÿ ËQ«ž_[™´£¤êö­µîzêêRi'€²Ã^ (vµÃ¼µ79+'–tßmÕâSêí(˺‹³Ê=â€bW+,÷ð²/5KY%D=½¼Ñ>Š ·—z;ʲîâl'‚8 ñD¾:V­æUeÛQ^¶€ò‹¡)€sæåå%§ÓɆ*Ï>ëÙwAT`JMM%Œ(„§¥¥åì»({œΙ‚ƒƒ•žžN*BðóòRPPPξ ‚8 „qêpöšÄ‚8€ÂqÀyq8ÊÈÈàbM "?/¯œS¸®ƒ ¨!Ü3cJHHó€ç„Ù3å¨g¶#ÂxÙch àœyz á@ÅáÙWCCCsö]Ä¿ÐTÌ0ÎP²ròZ° ÅÍe•ßS\Ú—âP†Ã]bõøØT;Ì[µÂ¼d/åv”Uݧ«AP…í·è®C+0úÊß»ä¾|ÍÌvë·ƒY9·ë„y•j;ʪîÓÕ  â`h P^9³äà›CTP{SJ>„{xÖ_7ÜWûR³K½eU÷éê@p>Üûôñ êÿÆôP›±Pnî£>}NRn™¬¥ùžìÚù©žü†Ö{½yH?N¼Wãæ'ËôT·ÿs=|ÃpÍÚå:IeÙZó÷¿¨Ç¸¥âÐ3áŠQÒ!üO~V=Yî2iGYÕ}ªzT|§”®­zõ†«5iƒSn·[6›uð6Ýr/ì¡ þaä,3¬eözƒõù¢¿ªƒ·õçAmÍPÛWÆëÚH£`Žß3K#GmS²y|™™±[ë×ìWŠg™¦œzôooªO×árüë- HOÕ=ùˆÓŒC‰:(¯Ê„™š µñn5îØ\aFů<èÊ{ ›½C»6¾®ë#›hÈ×Ûµ{Ï^íÝ»G;æ=¦–íôÌâúmY^?–¸SôË’ùš?¿`Y°l››'KiúlPc]1vµ2÷| [7×_eÊgà êÜìA}ç(êIneÉ”P ¯Λ;uƒ¾}éa=6¨¯zìÍXºW÷n­œ5GÛ3Oòœ=óõÑ;sµ·8ÏÍ$-xþZÝýü·:dQÏiÚtÎçÝÛßÕ“·OÔêìcÿ9};êM[Î÷M@UC8PŽa=5àêçôø§+ôd».ò•CëfÎÒî£t[ƒB½ÕöPÕo®ÕëWhyáž;Ó©êÍ.RHÎr—v|ü°†½½\;eëé¾uÔ¦f­Ú©úÕÔüÓ×äõPw­xsž|wä=ÝqX)éÙ:–åÍíMr*0ZJ9t(ßL †¼CâË9=Îs»¾?^ë/®¯ÄÈwßš³)QG³Ò´ì‹ïÕº[/5ò/®h3y¥Ölõ¼‹—*6ù:]Q¨^ÇÖRo‚8€ÒM&ŠŸrzMÙ¬ã×fÞ¦†åÌPÅ|3Ôú×[­GÍÕËþ/èþ÷wœf ÈÿôÔ•sÕøÞ÷õú_ÖX??=26Y÷'Ä%/þA. AoÐç_íà’MœOÌ<ãG¡—«g÷ ô/öžhóðj­Ú©˜ÖµÓF![–h}ªY:›À°N¨ lë¶éY–'°©Ú´®!_ÿújwQíݯ#&ï 2¢G(GÅ™m¨ç´x½uƒ¿d/©KF8uÂde†-ç§Š½l†l¶ÜÞrÏ}›ØmFÑ=x®ôƒ:tdކu~F?‡Ê×È­;+5Mm^X¥OÏÌÞ¬÷ß^©æ·ÎÖˆèlõxæeÍ0M½#øªgË®ÚÉ»]û\]Ôðté:çµdöµôŸ—(þh¢¶<ÛOs=û^–©UëÒtyR8ï Q€ûö¤kÏÔ,fšRÓtÂÅÊvp'@PJ²4D{ÅŒ.´Ø™¡Ã!·ÌàÁõ½AæÍÑë€}xW¦ÒíË57+ 7H×h­K#òºÃ©úuÓ¥š¯;ÿ¬»_ºËÚû[iÀøGuYNæO×â)O*¡ˆöly¬ÞϼUoßÑH~#5êß½õÂÄïuÉäªFÇY1Ôi z~õ¬f|ÖZƒ¯k.ï} õù×)ºjpmù™:rÄ¡¬ û‰'ÃP±½ÝÌtmX¹Qá×OÖ¤A-­ºŠ›~^Z±Jé7¯Çð ,Ð&_Ÿâ9dÕ;¨}ƒÿhÉü-jC´2VÏÖÏfGÝÓÈZ¿ç‚iëa÷ïGÕ<ä-^ž¤×^¬ ö5 Rbh P®øªç‹kW Ä¾us¡ÐëTüêMRx„""rK°¯Mvÿàc÷#"B´wk‚õH—¶¼v·îùĦ›&N×—ÎÕ¨‹¼%÷Šûq,ð”EŠ?X¸¿=[¿}ñ˜îžš¡;§>¡K<ŸutÓ U̇5hÒòÜ9ɳáÝTýÆŒTÌ®w5áÛ5æµ%òëÔUõC;¨Wo/Í=PÏwÂGÙê¶SÛ š³èÎ÷mgY£ÕqÕtiçfyßGM;_¡à¸%Ú~ÑñzüOݦs?òÖW¯aªþú‰zbÐmzáËlõþj÷wW¢–½:D=2U»Ú=©{»U9¨¤Ý9ÝÊ‚÷gñÎ+¾¦iÖ´Ê6ªšÄÄDEEE•^…®­švm½ø‹·| eïr(+ò.Í\6^òæÏLÚ¥ýéîc¡yõ?nÖKÁõá-õ&Ú‚jª^¤ÞxÔã‡r3éߺ½Ãņ…É/ohJfr².—;4Åy`¥>ÿ´¦Ì³Âû«34¶Ggí™qÓuÏ€IúµÕ½úë¸Gumã@‚B•””¤ÈÈÈ–/J8¢Q¥7ï||â]Ù4°LÚQœu{fMyüe§îãQÅx[½Àùì»8µI“&¸?jÔ¨S…ìöVÙ/Ï×ËÊ9—÷W¾b24(7§Åо¸»î_Þ©à“Îø4úoU³å†î•ã¯ÑÐÏ’N3®Ñê?'ÿ}›jÞö–fn¯ü¿$ïêjz齺ÿgÔ5§.M ÆÝ¯ŸjxåÖËÿ£Ù©½5mÞÃêYß÷„Zücî×Gs›ëõg_×ò™ú A€³?ôÓ#­Ô{Ä èd½j«wfªFˆ¯ü½K~äÑl·öÎR‡hÿRoGYÕ}ªzóÙwqjÅÝ#Îq@±«æ­½ÉY9±¤Cøn«ž¨ŸRoGYÕ}ºzT M»Za¹‡—}©YÊÈ*¹0àkSt„¢Âí¥Þ޲ªûtõ ˆª0OD¬cÑ:a^U¶åe(¿š8gžr:l ñ쳞}q@ ÔÔTÂ8PBxZZZξ‹²Çéàœùøø(88Xééé„q "?//åì» ˆ*Aç g¡)A ˆ(!Œœ‡Ã¡ŒŒ .Ö*BðóòÊ™1…ë:â€JÂ=3¦„„„0/1PxN˜=SŽzf;"Œ—=†¦Î™§'œTž}5444gßAPñ }@Å ã %+'¯›PÜ\Vù=Å¥})e8Ü%VO€MµÃ¼U+ÌKöRnGYÖ]í@Tû­ºëà ~¾ò÷.¹/_3³Ýúí`VÎí:a^¥Ú޲¬»$Ú  ô14(¯œYrðÍ!*¨½)¥@=ë¯î«}©Ù¥Þ޲¬»$Ú  ôqJ ”Gî}úxÐ5úôÒ™úâáæò.ê1 5aÐKZå8É:|¯ÐÈOêrëÉÙûÖª¤ tYL˜ŒBs%¼©;†ý$ßšþºdø‹zàâÐãù’}뿟Ôä”ÛõÚƒÝ ÿÛÓá.µêgÕ“‘å.“v”eÝÅÝ^q jrmÕ«7\­Iœr»Ý²Ù¬ƒ·é–{a]ð#g™a-³×¬ÏýU¢A$êxŸ˜i}S±wz¿M‡þ³IwŒnÇJŒ;uƒf¿û–~ˆÝ-GDŒ.»éAÝÜÉ­u_Æ)ò/ר‘ÏÙ3_½ãÔýí­€\\oN3I ÆÒǪ©Ï]¯£P=¶ÝZyŠ6óÿ× yüí¶yË?¼®]r“ì¡zþ$ ªaŒ8PŽa=5àê4}ùé å^Råк™³t û`ÝV¸—ÚªúÍÕº~…–/_^ ¬ˆ?¢êÍê)äÏ㺮÷Ü(ÿÕË´-Û¦fÃçiÇîÝÚí)›§éêànzqÃ.íÞó›ýÂÍTýðâpMù~¿ ~‘íÔöÏFêñ÷¶ˆ‘¦8kÎíúzüx­ ¯| ±ƒ;ÈÜ›¨£Y[µì‹ïµ#³ô¾s1“WjÍVk÷غT±ÉEÔë(Á6y_¦?üFÓ&W‡Ôš0é[ígÄPåÐé”}2Qü”kÔkÊf¿6ó65ü(ÿc†*曡ž£·Zš«—ý_ÐýïïÈ™íäþ§§®œ«Æ÷¾¯÷îm$ï‹GéÛÏ¥ÕϪԯP»wÿÈ}¾ám•úºäàFM½óÿøRµ´>²7jÞ¿çëpÌ„Bgì^ªYÝÔ’ /kNŸ7t}½x8ãè«ô34'«—F¸Lu1N?gUìƒ}4÷/Ó„‹jÔô?Só7­Ù×I)þ¶¤®]¢-îPŸì™Zµ6YÝzFÿ³ËjÓè— ´éïwÅó´vùUk¡n÷Ý¡uý[ ½V·6ÊÒo ^×;3—*Ѩ«7×]WÙõÝÈáÚÑç#=ÖÙ­Ÿ&Þ®FkÚc—éèܧ4bu7M¾q»Æ¾¶_­.HRìúý îð€†롚t·q§Þ [<6W;5Ï`üµ!Ãf·‚ñ‡ú¾Ë,Mxs™RÍ“¯7fàXý_ûÀ¼ðà-oïìœ:Ân|CËo‘»<{­^èþ¸þX÷ƒVºP£›ä~,doZ¨¥ôHÇ€œ“…ü‚:Ñ ºÑ´÷6ëš'b¸xgÈ¥}[·ÉY¿«êæ?úØ[è–gkû°ÅºäÕ¨‡urçŠ[(×ÞJí=E“­)ÿïsOÑú•ñŠjý Ú»–è¿+V*µGoŸ¢M%Ål ú´sw¦Žf¾¯i³ê÷ÂÔ^KõÖóã53jš.m¢ï7ý"gG§6'd)Ã7V;+}ó¯ªÛê«ÝÛå>´Oºý¯špç/úð™4wKWÝÕ’ÃÕ,³mbZU†SÛ–þ¤¬¶½Õ±–Ÿ|k]©®m3µjÉ6Õ½°µÜ õÛ¶õÚÝK—ûÅióo Ú²-DÍ[ÕÊ™éÈn­Në+´zSÕ MQRƒÇ‚8€3>;³ õœ¯;w([?¼E!N§NBjØr~ªØSl¶ÜÞòÜûvÙŒ‚úðStߨôsR†B"ÂäÓn”æ-›¨®~5T¿®”`ªßíå¹&Í<0[Ó¿ÈÒµw]£jEv ïq‹zÚækæüC̤‚3dWíFdß½]û\gz‚Z2ûZúÏK4Qsží§!ãþ«CY´j]Z™¼—ÍôÚ•\KÑõýs.œ6lùwqCnÓ-ïfíÔøà-YºI¾1×êÒfÉŠ[ø“1jm?aÿôìþ&{&@p6²4D{ÅÄÄ(m¦ƒ…Ž©Fp=ÅD;´aÞÍ™3Okve*ý×åš;Ǻ?w…Õh­Fy»¸{¯¾xk¾¼JÁIÁªW7H®u“Õ»ó-v ·‚y›º#&S)G2µòÕµ´Ùz¨KÐÉ›ÐI×\é­åó—ë/Έ¡ NÕÓ>G3>[£ýéé:”ð_MŸü±¶Ûåodêȇ²Šú%++Y[&7ÓµaåF…_?YoÎøZoÏø\O^¢_V¬RºŽ×cø¦MçÍ­¬”-úñíÚÖ¤¯®là«&—_.¯ØùÖ s¶²“–ë§Xµ¿¬…¼/T«ñš?7IZ6VÓÖMµcöWÚÓ¸­3ú ˆ(¾êùâÅÅÅ(±oÝ\¨gÚ©øÕ›¤ðEDä–`_›ìþÁÇîGD„hïÖ„œÑÝÙë?Ðû¿tÖ]Wý®µ¿µTûvÕU·×8-Ø´U›ß««?ß-WF†Rc_ÑÍOÌWË'gèÛRÃSŽðSÇAÓ¤:Z·€3äÝTýÆŒTÌ®w5áÛ5æµ%òëÔUõC;¨Wo/Í=PÏwÂŒ<¶ºíÔ6h…æ,:ÿo`Ì#k´:®š.íÜ,ïB)5í|…‚ã–hSøEÇëñ?u›ÎKörýëî>zxäKZz§ÆŒ¼N5¬#²ÿ…÷鑤oGߢ‡F*õ£Û. °Î ª©EëhÙüZªe#o´h«v»¶j­®—*n÷„GN7…r†àýY¼óНiš5­²†M…ª&11QQQQ¥W¡k«¦]ÛC/þâ-ŸÂØåPVä]š¹l¼:å]™™´KûÓÿ¬’­Õÿ¸Y/OÔ‡´>> Vzz:a¨ÁÏËKAAA9û.â€JÆ9¨ÀÙch @ââAA ˆ ˆqq€ ÄÄ‚8‚8@@ââA ˆ ˆqq€ € ÄÄ‚8@@ââAA ˆ ˆq€ € ÄÄ‚8‚8@Pˆ›@U°ñ€´~¿”pPªÂöP1ü–*]%Õ®¨Ïö ˆ@óò ©~¸Ô¯¹àÍöP±$eHëöKOÿ(MìÆö ˆ@áé Ï áÍØ*¦È©gC)È[Úü‡Ô²:Û¤²`Œ8€JÍ3åš Ø*¾65¥Ÿg;T&ôˆ¨Ô’Lù[Ÿt¦É¶P±y>Ë’<· 6F%A8€J­fà3 qq€ ÄÄ‚8‡)Í\jèÉ97seJ#æúòÈ韾çWCn–R‹©9?o44(Nrñ·í{¥¸"þpÀjC·ï¥­LÁ T:Ì#¨Ôv'IÂsƒ¸göeW†¡…Vème?ÍÒ”ÕÒ’ ¬çfKé'y˜a“=ërKOnè•ùW‡U¡U¡ÓWúz ©ÖãR¬DÿÝC# Sã[J®Ä àï-7ôq°©ÙÝ¥˜|GçÌ i½õ¼£þÄ ¢0ù5Ÿ*üâ+7½Z罹ÿȲr²tÀ ņ•”÷ê°BsxÞ‘ñûÕ6½&eǪ{ò*|ë™ÚÞËT5ÓS¡uL=%½"Ý•ièå$3ç=hæý=4ÐÔ/ë që¥:yÙÚ òÏöþgèúMýÐÝTt^èÎvçÞ0dòÃTàlŒ @Åá_[wþé§•6]·SZ±/§£;ÇOO 4ý»»õqCiÙZ›îØ*îëÖèȳËH^VøžuÀ Ї¥O\R˜Q°M^!¦^o,]oµ-¡¶©fy÷ 5õnOéåC¦jå{ŽËÔ}yE‚8‚Ûз›­°k…Ú+Lor™Zw¯©¤Õ6ÝpØÔÖî¦| ݳKšzÉñð›¶ËÐÀõRÇSß|cÓDO.¢Òmd[ݼÞð|Ë[Xá:ô°¡éÒ5­M­Ù,%¦J¿XëØåé‘w:aêãˤÀlO?þÜÀHSÏ þY®Ü îÇ+ Ĩ9ü¨´Û ˵ƒ$ÿZ¦"⥟¬eJ–¢k˜²Y7Í È æŒ\Ѿ ©F bé—ºšºªš¡¬ç<××­a'®ñ2›ú.´Ðsqè&ãØñ~6ä´î<óµ¡?Ž ƒ1Ô~kn²¿ê ·¦fÙÔaµäÉäž)FÞàÖØ|a<Íaý_¬çfò’q*‚#¤Ía¦npÚ`ê¹îRKoC=$µjdèÞÿHM›XØÛ”_š¡ëgKOÝjê:ëÈxã’+M9`NøÚ¦‹èwZáØ]'ß+DO¼ÙÓƒkS·dS¿u3 )ùh®M¦¶_m*´N"v·¶N"˜½ ˆP‘lÚlh–aêßVàîíVr†¡¾©Ò.ëoïßhê"ï‚wezn¡¯3­Ì½Ú¦àÕ…VhâAW»õF½Ü@íØoèÊï íË›ëÛð2Ôä#C©Né¹~n]ºÓPr-SïÔ4Ôߺý{3SQE„jϽ³ØP`Sµ~5t º©‡ZšZó•Æ™úk5^K€ ?èS•_üÜQœ)†Þ*]q©[Ý<ãµ­²Î ×Û£LõM3ôú^·Þ‰ÎûýËž=6 ùÉЖ@SMü¤K.15¥‰™3†û÷DCCÙ´× óc똹uX˽­ý÷F6}k=>Ù!µ²|x-éG§©¬eo—º\âÖ%µ µµiÚ·&ÖÈ×TO»ièÝïmr™z/]ú§õœË­ç4‘뙵ҽ=LÕ¦W¼ ãůLll@eg6õh·^j’{àKH°é¡í¦¶–½p¡©¹Ëmú4ßoØ'§IÍÜZr[óº›úãg›ÚüצæÙÕv¡º5÷RS5òe"Ϭ'_í“ÚW·‚üa)Ø Lž‹DSwú`ƒõ7o«¾†V[¬=Ìú÷½Õ†â\ÇŸŸ¸×Ð+ŒײÖÝÛ­´ 6}`ê™FVô²Ö3 ½[ ÷Ù4,Á:±à%âT†ÍTŸ¦êez}±MÝ–êØÉ­Ç«IÑMÝšl%ꇬ ý÷ßs¨§f=SÔ’o14q³¡ß¬ÀœœjhU²”é6´q—¡¿¯7ô±²0ôëQ)Þzì’ê¦ú‡J~VR®"ýjšºÏªãù†®ºÈ­Ëò”_cÝî”bÓ-Ë Ìkã/¤Ú-Ýú±›©ýVðh·©¡VÛç=Ç'ÂÔ+mL-_n×}ÛsggP±14P©Õ 3ÕØ?÷ }Ã[Ê2¥1½]\3ï h“^é’ÿ:›Ò­Çm^oSg+dW6u¦[Fš×Ú­+#¥ k%S ÍÛm…î$Cî4´í°Ôù —^‰6õv}Sµ¬unµ®îV€7Û@Åâé O:"ýs­]Ó¯£c¡,EDDè¾ûî+¶õÄTz»I›ÿ°é›m6%$™ªÂ6P1xÆ„{†£xz á•A@•вzn)øƒá”ƈq€ € ÄÄ‚8‚8Pñ‚¸É&Ήy>A@ °MjpÎÌ“q³Ðm“`œWð6‹ÈÙ'ñ¢ž@Î?ˆŸ«O54娓\.×¶#pz¦7¼¨ ^8¹»­â8xðàJ6)pz +<:/KŸQ¸YDq†qdüøñ¯»\®ÃlVàä233Oš4éuO†."ˆävëAÞ6NRÜ+W®<|èС¥íÛ·¯îççWÓf³y³™QÙ¥§§+88˜ Î$7dÄÅÅýôÄO<3sæÌÍVÆötb»ò•B¹‘Äÿ ݶ¼bÏ+^yżLÓ Ì»o°¹€c<áÚ™×î#ží¹ŸWò‡ñcÜ«ˆäîÊÒ3¬gå éö¼Ðž¿÷¨ ¡»pfÎ_ ‡ï"lj{dÅî¼ÛFÞ ò/ÿ³²?C¸­P' ²ð™¹pF.<%/¸NÄÍ“„q‘øm:yo8AU!ˆ›…‚xþ@žÿß"/ÖôÊ·"£ÐJ•/Œÿ¹¬¨Î°TÅPnž&ŸlXŠ™?ˆ«P ÏÿÀüaÜ](ˆ‹ €*ÄU(ˆu;ÿãŽñ:E7ó…ìü·ÝEq *†q©èÞñ“…p³¨ ^8ŒŸ,”ë$!œ@€ªÀu’ mžâo:Y—Šž’yQ¡›€ªÆO¶ÍS<^F¾_Ö,Šq†ËÂyá–“åm¯³]€"‚³ålÿÿ äÓÅÖž›(®IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/delete.png000664 000000 000000 00000064651 13703317554 026572 0ustar00rootroot000000 000000 ‰PNG  IHDRŽÈÿr¹tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp MÚdkfIDATxÚìxWFϬÄ$@pw/Å¥Ú⥸»S¼x‘Å ´ -´EJwwwII€xH²»3ÿìf#@‚ô¯½çy†,»#wgï|ï}¯J’$ñмò@ x­Q^egÝŸ !@ðÝKFz¯%!&@ðV‚báJ:ï¥+ ºçˆFz¥çˆ@ xsDCIçïˈÊ3‘‘Xd´ Á‚7W@” ¶§Eã ñÐe Ooš ^?íD@ðú‹ÆÓÂ!gð:=y®ãH+Oo¹@ ¼¡<%Éiþò<Çñt[EZÑКÿú Û”×!¥±½]U$ÉYÜ{@ xdD‰– ñ»ã.í{{J£+iô@N£ JÚ×’u‡”Ë0‹†ÖÄ/ù UûC Wq—à­ÈØó»jßš\ÿ²ú?“uKv!O8M:‡?]=¥µÏSîS!@ð£ÆxK¬·Ö2ñdÓĤׯñt5•Vccÿޏ«@ðv£ÆújÖ¸ŸÖa$kBJ‡&Ñx²ºJ´iÁÁu8>å8Òíõt×ZH§ªJÜM@ øÏð¼ª*‹^<Ïq¤@ ü7xá°‹ŒÇ…pŽtÇéiÒôD ÿ Ò‹ýÒó„Ò¯®ÁÇq-1)>Haçyûã“Jèåòh)k—zL¦ÌjM:Õ¤Œ8‘Õ ýÝU5þâã%ᤇOЫɗÕ3º©QyðÔRçš:rHIÂᥠKk/ %œ$²ÖQ摉•qºøjp‹J<Ž21çzÒÕ>’ uÑpZMãCo=S]d–Þ‡&9¶ŸV,}Ñt’¹OšÄ¡+ª™Òk™¦:+W_Ó¼U÷r[Ý¿²] ‰ÃÎ:f4Ñî´ŒQd@@ð†ó2KÇþß.Ä+³@-ýfPUUÆ_"ò¨‘½æb¼NàÜö¡ [oY­VÃÒ×Ô ®&çÝl°ä€‘ “Ž÷+ ¡vf-Õ#LœpÓ1ÓEáxšóß¿gbÖ}…>nöŸ1rÌdibzdq‚/O™%©bOo>ÀVÃGnjšOÇ&~ʶZ %*œ´‘ÈaÔ÷°Ìö…¿;8©wÒÅìZT7xßĪ›MU±Ò_7±ÁY¢¼—òj‹ú Á¿[Uõ§…ã•)šSKE‡´óïjÈ¡þÿÂõÔ¾a2߇AP¸Bp”ÂM5 ûæUÝÃ-ÇÕ€©¾j…³áqêKç¬Z«îäb =Åâbâeö¨“õz•‘Ø‘ áÆ5Æ,š÷Ѱˆ–Üæ× RŸäÐRN¯ðëM™àHhWL§î¦ŠÍÕ˜÷K”9«%«zwn$Èü®å‹ò’¥jjo°L|ã³ÈüñHuN’ج Ý …5m~ªëèîùUÁÐæÓáe+aÍ¿/Š.ÁßnDLá8þ$÷U8¤ÉäFgÉN¡j8¢¢<™Ç+–XöãѤ sCz¿œ _í6á[NKa5u»TáéQAKÂIAªvTÝÅö éOY§º¿üZ"ïY‘YÏlO™¶ªUN,7ž¶Vi$ªÕQú‘a­T°VuB'âSÓåè‰%Âo „1ªàTTÉ3ÚÄ”C&—ÓÐPuC&UtÖV{½ú:!ØÄúëIŽÂÉnYhvîúËF~tÖ1Ïë_ì×,CðOæ3! B8^•Ð9É%XÑ8¨NÁNKŸRÏYlnlN5¨·*«Åí¦ª“È©öîyµÔRÝþº±–®M ۯɴή¥º°•‚:r˜ÂÌ­âjð7ʪ`ÙIwxöô^™µô(ªÅ%ØÈ&­—#ƒi\AOóPÕUÜ1q*:uÿ8Õ %úÂRÕEÌÊw'µ³l»­¾ï-QÂzç¼]$ü<µ tVR˜* êÃãé£c +¸ªŽC8?sƒHÔ¿)B8ÿdÞ.DÇ_€¬–ØGŸ…EõlÈ'3_u ["Òä/5sÕ(¥§{&‰£j 6w¶ºySÆî]-¡û LMm¸sÛÈgw$>Pƒ²|ÁÈ÷j@Ï‘_Co-ƒœMô?¥ap ­¥ã¶9°gÑÒ« ê^L2_©®å÷H/ “Õcv«ncÜ™<Ù5¼_L‡¿êL¶¦$¨b–)m¾W —z]ƒ*LRbÒ[W ´¿Z'-cý%¢NiwÛò¥h¦Š›þ|’+úwDCÉàc!$‚¿²†JÊ@9¤¤¼(ÄCÇŸåÁ“¶›ðÕ1¸’ þù⑚§Ô`ü^Y=%®j©“·›X|UÃÐa Ó‰u¶Nاæ‚Y%¾Ùcd¸LTœD­"Is#+ì>e`|8”QL×ìIÙúL‚zlMùïhqFÛÖª*ë_ÕIäS÷\\Á¤þÑ$(ì} PÒ#ÉÝXÒ©þU£z^õ»´)©#³œtdÇákL:ÞðÈÄ¼Û òß.ªÐ È ±êßDÙ$ª¬ÿ„‚$ýÑhÕçÚ­£úWo˜[ˆ‡ŽÿƒkwŒt kô,RPGÓx#]NÉ8ªÎÀœÁTÐÆ_Cä-ßøèXT^ ìª;8›&ªn } Ã÷¹ŸKÃ!ÕM|ù(©´s6Ê[÷Kˆ”Ùf}}಑Ö×f‡0×KfÂ…tæ©y¼ZN‰ß.ÊRÿzºi(©“Ù‰ZÕudfÜxV£ÂªS&k—ÛÁqXECNˆÃ[Ë ª”õ±ÃÓA'rºàãAœ‘#AñL?øÐ'U@„xáxÕRˆe ÷“ƒóÔˆk­éáÌm­æ¶¨ššÊÅõh®™{ÈÀms2p?¯ŽÑµ5lÙg`¥uw¤*3U!8ªžÈO=¿^c]iD-õ×È©¥¬^áÜsJFï•ÐpY›O ¬0N4o[N)TDOÛ#jQN‡k¼B)osÿBŽbZÖ«"q ^Û]ËÐÂCOˆ‰ù{ëþ©gÅê&ÌNÃKÃO­ràb+f‹üó˜ *õó8QÙ×&kïfÔ çñ֙ˤ Jó¦M³é­›­y+´úñµ?}½Dí¬pèŽòÂöaW yeN¥SBWÝ/zÕ$¤sœ«‡êL2;#“2fíüô!2¿>ʸZÈÝA"6NI°dì=µ4טXšºôUrO&ÕAdµ1OG¢žWMË­…Xó>ê{%\àÊC…˜4µAæ¶šŽ‹÷ˆqEII¥1ú3«»Z\àßæ—«1 TL³GjIRˆÇkÍùìH µæÍ`ÝLi6åoÁ?ã4,íêkcDû:äÕS‚ׂ°X#UVÞEçê…¤ÑñxK„CÔe¼ê‘ÔSJ1÷G6 Ѽ6dvÔYòdJ¼ˆóÆ»dÑHÚY÷EðzeSsžLΫX͆hïx£Žã '^'»Žù‡·%ä©K+†hBo]䨮Í|·l='¢ž.q0<Ýþ“p‡Gn- §o“rXó¥òä#á@„pþ-ýHE‘ÿ‡Ñt‹~á¶ bÍ¦Ó‡íø¸sW:5«NýA+Ùqú:;ìžL9[P¯Ën¦ù•ôŸ¸•Â8½U…œW,Â!x ÜÆ3¥·ãáÔ¢³ÓYzU8–ý€úžZÊ ü‚ÏÛÿV7º•}Ä–ƒ1–^i©H¸ÕHùszÎ>a™ÀÒÜO;äÔi %»VüÌoOv•SªRŸ(ì¤äeÁ›†hãxKvÿ1[ù9[nqøæ]Â&ÎåQçToèJ³ÑË)Û\Ý%ö(s&Ÿ§þ´‘x[uÃtçWæ.?L´$¡¸e%â/™ëƒoV¸î>‡ó V,¹˜ô•L2Ù«Lý|zñû¾™”qºOÁ³öÿŸ®p¤XËþäO<Êgg÷P¯O-¬˜Â‚Ƕä1maü¢›\‰¿E´_*m˜ÎD%;uû¶£ŒwYZ´àðô6üRa5ké-Ó¢Hw2ô°'¥&–¥˜Ÿ‰£³;³³ÔB&xcüv9d!"B8ÿa$ôöNèuvè´:ìíóÐ`à(?ØÍ¸6‡0æôÃGöRå%Mût£hJU•9ü¹å¬I ’Ö–{›ÖrÉ^ÆÝ¡eË<æªÆ|*R ³¨·„pþ¦*€St8á÷ö°hf.ÚÖˆgÍØUH–0UšJÏðÌXÍ€>¦ØGŸÐºaü“„‘;V²üz$Ç7†Ð`ÙÖý†{N’PKáì|”* ²è[—GÅŒ¹o<¢@ðÄü6ª »Í§*t¬ÊW‹wq;ÖݵïùrëUnþ±‡ã±¼Ç­‹Ç¹—Dl)ÝncFu¥j=NÙóP½!%Ïodû®­ÊS‡wÜD€„pÞ¤L”í2µßô¥œ³„M±¾,_ÚÒ™ŠðþБ i^Ÿwº0|x*gÉF­½©ímÍrJ÷Â\È–å©,hS†6u®3ràJµm€—Ð àµCÔþåÀÝ× AO¼GÜi¾ÿ|&û®]!8bŸ´œ4Ñ$í¡±'8Tæþ϶_غ;aŒ7ào/šN‚7U8Î~`+îÔk„bív›v3™L–-0Ðæ_S1Þï?R[¯ràfú÷¶eé‘qiö‘ Üð ç+ö`šyT )¹3˜‘ _GóñBG†NÏÃÚîCðY6ƾ¢+î›Ì¦6øøØ ÓéÐjµ–5Ö ͯ%ÑÞñZ¡ùH8Áߌ~ƒSçq=Á{ËD#N³~îlŽÆg¢ q#óæÄr,ÈD£d³qn—ØÐå»ò˜öN¤ñèÜŠÉMÝÏš3ëHv}õ9äÑQÝn Ÿ|ô áË—Ð>¸ÙÁ›ä8‚ ÝOä¾YtÂÝGÏœ›LÞ”kÑ™=š'¹J‰àˆ×6ìì’J–6ÙÞaÀ—PÖGÝÁ­3—¾Ï•å#øFÛ–•[Þ§KÒ~>õ&±¾T(¦ÌB4‚׉—ZC–e±Ç묟[UH¾|ùÄM¼6\¾|QUõ† þ6b=@ üÅâ"n@ „p@‡@ „p@‡à¿‡BÌ­kÜ3¼ú‘¦ë9ñîÿ•«ý)¸¸ç8A/LO<áaÑžóùÕ—°ù–ñ‰ï~ü7öÞM?»à?Ç!ø?u$GuæÓ¨>|;§1 ?ŽeÞ8´‘—ØÓ‰r%³£W®lò¢ÎÐ!ÔËšZVQbnpø„;]^xÇô`î1}â]NÁ¯bA<52ƒ­¦¦^ò¤VÆk|7j…6-¥Ø¶©|{΄.¹·§!„‹WŒø–nD÷®F¦t¾ËÀõ½SÇ›<]ì>&t'ëú!”r0Ïéøc{OÅ}f%ªä³)„pÉêã—Ú»ów×ä³÷'0ç}ˆú©3µ÷~ÄŒ™Õyfø^ÜŽ¿CÜÝûÄÇÆpúà‚$ ™ò•Bþ} öG['à–p,ßIm QªÇVªrqNszùMeåÄʸ¤tÿ— 9°Ž£n i˜×[lt:ò5kOµ‡ë8­ ¹–¢e£`FöЦÇÀ†d¿6‡û™³ãáRzr¶žÅ„ï3óûXÕÚÄ÷C'r»Õ¦Tp¿»@Ç_‰èÛ§9qù²{%JäÂÍ|%%‚›§oþDÕ„-^ù ’ÝQ²–BïrþšŸ"¹p×¾Ä9“?ºÅ©ãW×ûP¤t!¼í’cJ87Nßÿ"äJ9a<÷/c í‹Ï-ÈÐnyz'—³T¥Õ—iqë'&ößG´Ä£“‡0ª¿Á€Þqp°A’1äkÃÔOJ¡‹â̾=Ü{x›Ø{ŽìÝEÄÎÕ$öÜÏGÇÿ ªÌ:&ÖÐcØ?ßCV…Ãb.-aìŽòLù¶1ëºÒéj–¬  ˆLÐŽE¬ÍU“y±¬õ`SfºËÎ ATþº6¿}¼—{ s§¤;æÜYî…‡²â‹{–úZɾ ;ÔÄÏœäÛ,jÞ”ïJ“Ó>7ŽÛ;Qršü ùÜCÖE_ÐÌ%ö9ç#Z_T…tÿärú®ÞÅ”5ã¨êߔџ7…èí z/‘IË»r¹ûTܦ-£½š¬æQŽÃ+`¼0ƒ=žôÒš«ùÆê2<³“#‡ ‰™Rá !;˜Ðo™Z'|çO\ ‘¸÷UoF•ÚÊœzîèõztºäü’6‰ÁœÞ{ŠàDULdYVPäGlû=†÷ûö¦²»™¶0dÊeêªÂ‘údÐjò":ûjPB¾¦MçÆ.êc©Ö2žœHÝâ×·Ô –á!ÿ±{øú‡Ìôßô9ï:›ßèÉÕCX¼+ˆŠ ÍW,@« 3hæšNP–ï³k¯Ž†سý<JOJàóÎY/¹£§àÄ5 +㤆­×÷¡Í§ßRjEüÍÚä[›jqË™¿·&㪺<9U÷óÎÝ<ûk×{@Q”×(56äë°ˆ%Êtvžø•H]U³áÐç³¹Ó|µ2å¡ú§åèØ ^sÇR/Ç“•VJ\ñvI“#¾ÈÙ\¹Ž}­÷(.gígÛÉ9iË–­gЬ¯9_«oúKWë ÓeÎ`BjÍÎB^›ÓäÎkçW°†–ÌÕlP÷ÆÌÎw‡\F‘;­Ã5^c툮Qw'áç¯Óõ,N’¹Yç!Î…„ßTóbÍš5éׯÍš5ÑTÇÿÖ;ÓU¤Z­ìØ©Á%O‡ÙL7–x鹇Ê!»Ø£Ô`äé;b;û§ˆîùçŒß½mnMXQÒÉ;´dkð¿˜Ï¶;mù$‹E9xo@n¦Ž[ÆÙrý)ªÉô ^ wü¿_Çó…¾.“;1úJ –¶ÚÃÇdòÒî,±¾íj³¬HcºîGíIÚªºŠ*8¼P8$<«tfxóA‰ùážó“Ï{8ªhÐëLœM#2m•ùmöFkSÄ_ ?ɦ“.4Eè0¼1™C/¨€†ÌÍgðÙ3O†p/üU$‰Ñ£G3bÄËÿ…xáøóØ¿CÏч9¹)ïLö§Xé²T¬Õ„÷jåÃÅR’;ËÊ~]Ùj ÞzŠvœN¯ –jª°]»0VMŽáTVF±ýR?ŠÖ>çœyˆ¾}£_-|Ò–õÙñ÷¾Ï ²XËÆ:пxkf~×”¯Ú¾dzEgå—$†»®réÆ{l´ïÌÂíÈóhqq4²‚k™,þ¹7Ïb—%ù‡2qçÊ-¼r¢}áùeB·ÏeƯ÷Ô`ÁÙ»W°4ŒóöªH8W ëðFÏ.¹®ÉNÝ>I˜±œsZ{dMQ>já±y¹=©1v–Z¬xn_ºB”R‚gj%…ãx)jÕªeùûÿˆ‡Ù¹ˆ‰ÿ롞2G|]k¡WOpxÿv6LiËOgò]s ?ïžD=—¤Iymí­±!ŒÝ;à ø Žë7õäÊÍÊí—é]¸ ¹cdç\Àì¬j‰P‘ŸŠ‰$l°µM“%GÊuïÂ÷ª›ØR·ÇË¥wP)ìEy ÝØÇ¶Øú|:k nñ[éÕq.ç; ‘bÙ5¼)G+vÅyá2Í\Cßd·§<àðáhŠõóy‰ê@ åÛ1¨˜‚N¹ÆÂÓáxôB«Ì &Ù7UyÎ †$Ç‘¢7aœÚ—@Õ55ØúánBê¸}ÚqÈ!XwÒ1Ùû_'‚ÿ¸p$çhdN*ôÀ+_E©[ÂÙÆÅ¥Ô‡Ò§Lžx>ÕÆ¡<ÜîP7<÷¬á[ËCïEÄ®í\íUœ÷3:çvÂ>̓㺳\3Õ¤µèªD^à\hÞÍýdYVÊT—~¬§×üýTT£KÖ¥·_)JŠv¿•‰Ü¹™ÂƒðÏjbMǯн·Žüº­ê w¢âX>ø8ƒåerßÏ(õÓ8*«ÁXܦÀ*ô+nV’'‡á%Æ<âÑ# 1 )" sTs&S(ö:Žnx8Gsëì¢íŠ“­Z'Þw{v©YåñU¶}§çêã§~Hù[ÿÐѽ»ŽÍƒ¨×F0å¿MêÏê›6ؘÕlËk¦~Òq$óÇšD|ZLcl#ïÿüHZ'''ËTéÑÑÑÂeáxu´1G˜7d- ÆÓÐ×\!@ð•›<ÎZ=©GSÁçáž]$6ÃØö9’ÂÄ£èOaûµt%ãsú”*M ûžÌÿ¡)³[ùc£Dqlé*îÖDMsýÃã'RGŽ÷P»uWVeèŸN¯ 5‡°ùû”B~áBÖÞŒo•­ur»âÓ»ò " ŒfZƒ¡l;M¥*|¹’˜f_RÖF±T[Å?N´§¾ÊÀ_5ÈÎñ8ཤÏ#B ºËÍ«û9z‰GŸàŒ{&r•¨AÂZ²TnMcKSÚŸ;+•Z·!S]Jj’U{.¥š,èÇñüµ#ßvpcIDZ¬©´€Ö9=¨;j%uŸÎO9Á“:tÈÒ@Þ£GÚµk'nˆŽ?qÂ|™Ñg:£>©ÇÏùG¸kKYs€×d§VÇì¡ÈVb;‡¶Ÿ%Jñàè²^Lþ%7ã—WÂÉF¢ûˆ’tèÚ„ŸÓ±¨Ë³®ÅhÄhÀ ˆ€ñÿІpoß €J"Ñ#H´uÃÃÙ†¿$«<÷œj©42œ8­ú™“Ž×"½£H¤]ýO¶ŒOÿ• aÙ{Y¢\åüÖÁp {¾`ò6¨Ö¶õó8<+6q÷ŒpÁ/›#’ù¾G™°wµn)æeŽáÈLÚN=C®Cõa!Ò8ÚÐí³ùü€5êdáìŽDêõjAg)åóè‹û¸äV2YŸM…~€åkb©Û­öS˜ø§òâ;ï¼CçΟ+iW4Wg™·ä•ÿ’S!&¯/³ X:ö |X3ó`¬   ±t¬à#** —çî#„ãíQ~š‰†à-q Á?á’B8@ „C !@ ø‹ã¢ÿ#Ü»wOÜÁßNÖ¬YÅMÂ!´@ <‰¨ª@ áÁk‚hãüÅÈ„ÞÍu·²”ós|©9¿äÀŒ]C»±ðÂE.yŽC6o’‹=q×Ù³/†‚µŠá™NQ(!"”Ç^¸Ù¤¦ñÁ™]Üñ®FÉM“}¿ž ÄôìGÚ¬ehPÑ7i²ÅÇê~œá¡u¬›&k)ê•qäòö½\‹MzS²ÏEÅZEÒM£y&‡[ëÇñµ¾+£?o™G×Np표ÁçvY P$‡Sš{o$.2šDI›ÁyL& ŽîÎbÁ¿¡Aü<®{[í¶ÇKÙÞÌùÈyûC:Žòæ§©5Éô<µI<ÂÌ–_RäÇÔ ÚÁU*T°ßÇ‚I·T=áCø¡g=¶”žDÇÂ:‹ÉΔ?€3“²µØšçN>ÀŽÜUòpýË•œŠ#ZqÄɳ"];D°`þEZMh†×í5 ]›•qêag#—ÊÔ° ‡s€Å«îÓmÌ»8ßßÀ¨oôÔ)éËÖ/%Ëèž”à‹ÇoħzF¡ðøÖŽÙµGypî›ö1óµÍ©”õÙ%\ù=ùæ²ct©ÔÙƒMl?’ŸC´èÒ»¶b )Kÿ¥})«YX „Cðw£DpãÄ5“˷¶²á|Õ2ßæÄñÛOí«í¼ÅñwyJlóÑaþlîôü™ƒ¡Õiø`8ùGò6b€g(›{åÄÇû¨XÎ[½ôl)þÞ–‰¬àcÚ¯aÔ¼‚L_ݹ¯Xo׋Éu£™Òk>Ãæ1°¼vîÞ”?•Æ{Ò'~8óZºBÈ×HN9(R¦,¾.{púÝReËâèr‡­iŸ$õúN>ä/T7§½8©é‘Ô¾ÖÎÿ‚…(D4îv·Ñg(ŠZó9´Ú¸4Ų@VÁzèXâÙÅA¢·\`ØÓÖÈŸV3¿¥•È­‚R8̳® ^“8ý‚ÙqÍS«ÿ³ãçwýÎ9£¹ÄÈÍßWò d+ä£ÛØöTÀ“M”ð,HÈ‚ û#A ö 1Qí]°·ÆÀƒík3-ò1'ì$ñr%ÆnO5K±>’ߣL‡!xÜ_Ç/§=ñù• ›Žs?*”?®çºF½ŽÖ—ÊK£Ù:œ> 0y~wʸ´ÄÙû1ÛÇÓþ;;úý0†"~Z–¯ñbhï9ì.·€–ÔÓ˜‚~gîØû8‡Ÿ è¢ “ÇœE~’{rکĽ)âñ &_G2ÅàÅ…#g\È–×ÀoS'²[ý.óÁѪ †(Õ÷þ9ÝS„"þÞnkºÑl«mÊ= ¿Lå…™\)Õ (r$GWMaÒ/ékà5Œå^¯uè3¶¾—gp|¦#Æ¿ã¥ÙœšžÆ/¸W£ÿŒjÉjJÈ7mhö]7¶¯Î‘Ž¿QfÞtgòq³­<ŒÔ·¶+˜¸2§ Ãl¿à‡nþÖ¶ˆx6v«Á¡g‡;ÕúÎfl¹gßÈõhq%Mоõ3“çì"ܬ_T(Q > G0 ffDáüý/°´çTÂ;¬¢¹µªI‰åF°çs‚žÂÕJqí‡D7ª‹Y:âOá¼OI†»?yTÜù%t¼‰Ûw!xÓ~ò¥ÿÝi¢Š‹[¿½A­­(–6Gk®±qåeê/îF”ZêÔhüt:Øñé v–+Ï£•ÓÙ¸ÿ$çäÑ íÈÄú /œÛÕx‹]ëöœüM•h¯8KÖ*·øQuYÝòéÀ)D6É…Ö)?u•äÏOF®¦Çô€-cZrVÂ¥k&| zqá"³'§|‹Ä4kßj½+к{!$]êï`8Æô¤ø7“¨mŸÆ<Ѹ» ÑáüõgQŸ3Œ™Çü³ §ŽñÐ$aº†!ú.çNÇÁðœ|)–Ïë‰%_mË5çIóø%¤­¼sð×=dzw%ùÓæL9˜_æmÆ{Øx– 6\C•Qch”ù!N““šÚRâËè5½)ߤ9==©Òw:åsšÛ8&0µ¥+JÐ ïüÊì±÷qͨªJëIŠ•É­Õ˜[É9¹`7kÎcÎGìš2Ž#Ÿ²ºmaœ$Õ iœ±äðœ8~Üz?îÇcs^}ï¡5x'r3üiÙ²¥L·ù|“«c—в{×·ãÔ'í¹?üGz:gÛ5¢eð0ë·½¹òz%9¶S~¦S{dÁEŸl›Å&—OèU-“ Á?„)”½Ó:Ó›ù¼ÕR­Î彿s"V-âß¿CLX»¶™°‘M(9ëSè)á@_‚öè¼ð0 z…²î`!>Y_ðÉŒ©ÉF‹…?óžñ¾Òà\° ÆÑ=i±X›Ô ®¦áâÇŒøè¤eùZóá™›Mg^Ûü4ý$¿%·¡h»ô*¦A9q»’¨è(Õ¼cúÚãÝŠ…¿¼›· Ò…Ôª*çØ[4¾n—´<­ä„·Ÿ–{'ÿà»E‹ÙíÙEC«‘U½TÎùËÉ£ŠêÈ1ÇhÙµ ˺[–Õ4Xôð[·yÝs×ï™ðIë¼öM¦ÿæ ,ùLÝ#^‡VoƒMJÄ—ÐÚ<ä×1#8>ûF•²Mó]ϳtÚ¢ÛwÀQºžòø»{ÄòSß>¸¬[AûÜ¢K•@‡ào'ž3³ÛÓç@ef¯ªÇ¶st~Ôí=‚º–‘x~‹,Hß¡ï?§jFCކónËþ|Ü͈±ÍBZ¤ÓÍsCjÊ!Yh:m=M“ OÄZ:¶¸AÿÕ߬ªJ‹ü€ƒ+gaô|²\íÕ ¢%À?K"nÝEïÈæ¯v,›Û_ŽpïòYfNºbi—ÐåmJñ¢Þ<ø¹Gnæn„žÜõ:Ò¡hû¨ÂR^âÈχò©Ky'Kû¼Ç\‡2ôûn>ï—Àêo\Èï›*Wæå¶m/F§´q¨.¡ý‡ÄdJýRÅ«0|2Ë.U§Ÿ«DZ› $\àËžã¹×f9ÓÒŠ†ú;ž7”UνY×"«zîë)BãZy4_öjÇݦR`ÃHÊ: ß!Â!ø[±£H÷5ìì军ö4’âû«#¹;WŸÿäL×aÙþ–Liîµ£±±ÅÎî)QŠ;ˉëUÉ–Gk©r»±'Ûÿ¸Æ•G³YmÓšŽ Šª®%ŠVƒé²Âž‡Ùù¸{cœ£Î sËA¦:ãÙT¬8}<¤÷¦d ÛÀÅ 5ŠéY±òíg¶"kžP~9Z†•«?&›Ö,‚Ù)àüÂTãê—×´o9U¢[Gg>X¼“NƒÒ~ÁÞ‰}ˆÊ÷k» U6¸ö]_züœ—Ië:‘Goµ;©–<æ0áDú)ËÆYuðÚ!Â!ø;‘TÑ0¿°öØ6Å…fsu¿1*“1–ðG’>–Mêþ¸;X‹ø¦(®í\Åì)K8Wp?~ÍÜþ éÐt£»Ô!Àù%gÄQxa¶¤õ¢B›>ôM[U…ÌÕy-øâJwZ„#Ž Nc÷Ñr~¯-5øfNÈhtµC§wÄÝÃãIe½ÉÞÿÜx9fÆÎ|Íïùàå…£ó¤szúk(IÛóÑàûÁdæ–pVÓ˜æ«Dp?ÓP¾[=ÍJ·¾íB»o²3zõXêeÉà~J^Ô›4CMG2÷PÆW°[ „Cð H4¸¿s!£÷ÜM™­ã!>q(9NãûÞ8º{þÎÜUÛ8¼g?×l+Òqø÷Lm`iŸøêç’¬š2–VÆ‘£Â;”)U›Öjá¯OR'C‚gFª$&b01ftÍc\B8´j.s¼4O(ÎÃÃaÈyS«À“ò©áê/,ùíÉ“{È!G¹q%_„XEEu%Zк’·£$îeùüœ¢,¿‹b2aÞÇ7ó ¸%œá¶\î¹êg4$bÔÒA%œ]sƱáVš æâTgtÃĤgypQ5#EŽòÅàc)÷:Gã‘ôo2“Mïy’É.ù4§Ù²q+稡Mkú*3úçÍÈÎB4B8ÿOJ7«CæÆíÐæùuÆ‹öØf«D§9c¨]!7.i˜Æ£$í¦mäÃ!9¸÷ç ¤TñKNøÊõdÕ¥Æ,µ›yf0•GR€÷)ÿkô£¡¯ö‰`u¾ç\´é?YJP·~Õ=%Ÿ†4î”VTåâf äŠ}~êu,Hóöåq‰>NæßtØÛ˜¨Ó¡3µ?~‡Ì‰gÈòc"7!hÉZ§½Tg”î×ܨÜc åéåz?™­‹ÎN"SÚÓØÆrûÔ›1˜j¶O¢wvùXðr5 RÒMÉ’sS7½u3g-ÛÄÄÄkâV½&ûŒ¦`Á‚âF ^Ο?:NŒ°±± ÀÜ8–´¬›)ͦüƒÓªËÜøãkvÜyvJ ùáyŽ\‰zñ@«?¹ÿÓU~Í€µwHw~Q%†Cs‡³èTŒåüòƒ£|¿t1‹§nKVí%H~ú°3lÞx–H%õ<§ú–÷3šÅ4¶qÁÒO_æáÑüz)úO~'@ øçøk«ª”p,›ÏŽUâfpÆÛ<—µjéµk’ã÷߉܆Ofº¸U7;R:¯sRPßô‡8GšL©Ë…1k¶S-~ƒIŒy7i*„WÝÿâ#œ‘s¢Hu_ŒC¶E3¨yˆõ§31~@…¤ñ¦s,¾‹Û­ªà“Fvc~Ë¢£õSG%›.óëòƒä©òQºq’ÕS6P`Y Ê÷ùcÉJîv¯Ë»"O ‚ÿ”pHîTüdå»|×kvÒ2«9r¸!Åídä·¹¨¢¿Op°Ydd4NÞdqÕû0™Ñ˜£àT½7UvÎ'ÊÉ=S >¬|‚/&5J꿯´¿ɾùñF4‘Ñx¸éH ¼ÈMã4†]°GV F’‘s4fD殺9•‹teJŸ¯Ø‹b+©éôÂ?gΤ9…ŒqÑJýΉÝæ÷õ(T¯#!·‚ñÈž ç[Ç8ipüõ;Ö¨#ÙääfåÉf›ØÃ¿r¦È{ôöÔ`¼ô#ÂŠÐÆp†£G“O¬Á5g1òzŠf(@ð6 ‡#·ÖÎ`wÉQÌÊyŽq]~ ÈŒ/h´“Óörïø•C¿¯æfhÒ°1ùo®àë¯p/Ûhz®K/ßçŸûâ†Y¬|éýÍÊáJåžÓ)súsÚNÕÓwn²ÿÒ—AÑCø¬éÆtÞK¯ÆRÕ)íA²Õþ³W0]’0ÞØÁŠe·“FøÊA\ˆ*ÉÆâæ|z—µ›’çÁN :D¡Y‹(ýË~2·êCõâöê17X7a Y©ÂaVŸ„ó¬\tƒÚãG㪲nîn²×k‰1ð.w-_3ßÿŽÏ¸ÕŒòtSA‚·Y8dîmŸÄÀ¯Â)Xo+ ¿ç€hV}:•›6ÛqìO£öM¸ps'Í;Ò¼ŠKô ÚéÇh›zñÇál<઎Í_eÿTl‹vf`‘Ìù¡1SÌóDÈØ3{Au&P!E4â¹stW¢5hm³Q¬BÒà+WAªT-ŸTU%?ÄCOšŽ8ºœ5èЩ–êH¢Ùtþ¨ê:¾gÞ¡âôX^šBæî&ÈdsĪ4÷øcÂP–]Éˤ¬&®¯Ë*çYÞ¹q?Oä{·>ôÍw˜à¸Jt¨(DC ¼õÂ!ᜯŸ-Ë„·ýeÖ~o¢ýÔž´û}"64ã=Ý9ÎǽÃýPr$7˜nq]Êû.£ÏÆÏk¯rU¿˜èàkHs7v;Žå[pÝ´…s­:STz•ý;‘õà2ï KÑœïßðÅkÜŽÍìPÈ]}=3&cAæY¹55õFŒ‰wØ8?¶ß¦œú$§Ì8ÜÚÃÌ-ø XyŸs Lü0ùò”ògÉòsÌèV»] cûÄîÌ{\ºþ÷PopäFAú®m©"‹xp›æY³½kÓ³ƒæÍ %‚óÛŽ ”©MaëÔ䆓K´¯0SzWà‰ÑŠƒQB§O»h‘‚l0"kõ©«Ô)‘\Þû2¥ñµMï’»˜=çÍF5Ç_û2‰|¹åYåÀƒüxàFEƒ{Á"¸^=ÉõxS~j6,IfMRz£®'(S) ¸™H4š¬ƒ÷$4zôÖ“ïdgxÕŠeFÌ%‘pèmmÔ:’аs>”HÑÚ>xæúˆÉãs mÂªí»‰6¡§u89ô¡ù‰¿yžœ5*Ò¨qÎiºXÚ,4}rtì=>¨{‚/ 0¯ü)ß{•ýÕ§·L+z•,#™-sÿìŸB—MˆwЯÛl>m˜%)€˜'á³qÆÅÞÜÆ“œ_µÅúäQt68gѰgXnžËªOöµ7\øÉ¢ÅÀíëžÔ1…î%ÃXÜióJ¯`p‰ä°ÌTê6¢™bY×a)’m~>›—;_w¡ƒq(c4ªÓ‘/ñå'ß’yüÞÏ®ysr’|ßfÍB™USë´}ϳç´×3=ÅäàMŒ´–Û’àÓ'‰õ+G^7õ}% M&ÍàÃ\Ú”Bņ±³ñ]óemcÔ}‚£dôÚ¤¼£„_ààî{ïTÛdáPLõdÏìŽð¾Üò¬ÆÓ_3q½ýüw1ëFc ü¼ïÁE88ý ¹ë% ‡‰Û?ÏfCååŒx<œj“R¾¨×wî ó˜ƒ,iꆤD±sVºÞíÅžï;ñ&ýœÁ?( ña×9{!MB0Ñ1.9ƒ‹Zs+êKµw+Òv>ñí¿ÆßúîÜææ• ¾×»ð®ZÊ66¡µ±&K-Å™4Ú'ƒô+sÁÍZä7ndìŠx>èP–]šwɳ}.KN§m>» «ÞBÎ^À>wÜ WgöüLŒíוÑqóW/{ÊÍÓåoÊ !ÕÕe [† &Ê?;NN¾tQƒ‘œ&¦xê5»l9°3]Jó….³qk"ïLôC»[ý¿>?Íšéè:õ'*ÍižÒ˜þ&d%N”&GIªZkÔ ÿôWÐø4cÊšfêw?ÎÄZcqÿb=s¥D~"NüÈNªÓ´¨V=§-¶¶’åý˜³?³dk Rò€¼Ä«Ü}Í‹¦N³aîÁW¤ #[H's¿äò¬’ûœ©[ì"ko™¿G6JÖ,ƹ'-‚qsÇV¢J×ÅFk£ž/é¼™kôeJë“t¸âGïIkZ$œ[ÂÜ 5éšÿ'Æ®­ÉÂý…ëáHÏq¸¬M‹‚æZ-{öÇS¿YCt7Nä`«Zy$“–LYœR\ÛrCYh3“¶ƒïQò›àX2Wp´|.? %ÒÕ ×4Où«îŸÌãëøtÄfrûœ†7G±;º8ÝÇÂèaƒùjàx:”p2À©%ׇ¾`éYh·È×ò™­_#&.°gbŸÞŒ0ÎaR£¤÷%[[lHTKé§°/ÖYÅ̱æ|÷ËÀÍu³9P¼‹séx°ÛVÉÒ`m~éÁÜíÕø¬¶ÇUe%=¹hßsç‘’ïŸàÄc_ZF_âüyó¼WÞät'üÐJVPŒÆE“ƦZ‡ˆáV©+£Š„©ŽU-Hæ<ö×ÒºO/ò'õ\P Ždr³·ü.zyVéùÕ]W7­áVîºTIûe•,Z‡óÇ_ST=)äwÕUí¦ê”µ ÌÅ]»ñqð &ö¨…Ÿ˜ÕC „ãIÞâú[\;³»±,žóˆœÊR)ï>¦úžlCúaúf «fÑ:Àüð&pûÐU ¼ÀÆ ãq ÷£^g™à‡ŠŒÄQÚšö ¯¶¿!Œãë>gêºêŽýœK¸q3é#}öFLžîœi›­)}ûµ£l¦(N}·ŽóñA¨ÊÓºQ-ÍjtÚ¬µ½Ðƒ½Î–^V–Ø(ILHP_'bx…%¿•„kªÌÈ>eq’d¤Éi>´?va&kä79!ž¸ »«÷$·öÙ|cÓfÂräÊÏë¹to?ë#Ú²}õGèllÐÓkã1ruãç¬8mJªzL¼ÁµhVLÅò©y@ñoÂÈî•S jyVéùÓzhÌ# ŸÚA‘C¹tÇýÝUÇ´”Á½–`꾂ᢾ|8s:îsÆñaµ¥´_ñ5] ؈è#‘\µº{K/ùR³NoVtÈ÷/qäuŒZx“"ýf3¤zV"4r$.³&Söò4>»PƒI3K³§{w¶¿ûŽç²òêyîV`à˜ü´æöÕÌuÖ&Bv¼ÊþF®¯ÍÌ+²´5¥3'…z“Éd™žÃr²Veಒ\;x;…›_g^D{f¬öãâŠÌïû!ßdñ!³‹ê&4jÀÐXªJ4vp hMQU4âÏo`Æ´£Ö6•Ó†Çà#lÚ¹ƒ“¨¤I½O&“Œ¬/@ë!Ì =ûùö Çá}½%héü«ÑØÿMÊJFŒñWزú0íFWÄEÂÀ`â®&r6Vާä0\ûšQó¯’kÌbFµòâÑšö캜×"÷Ó-è'g g³‘Œkf Ö‘ë¹wþ.]Fõ#í¤·JL4íÿDæ– Ü8 ËŽvŸag¯s+6ˆð°n¼ÁÝûáL›—ZFžmX×øÓ¦Oú,ú‰ˆ;;ñù¤ öç–3yï~;ãBͪþØç¯äGë,DC „#íÓCŽæc™•æAŒ1„ª  C¿CëluöùÛ2kiSpzÌéÝ9é=î}|Õg©Ùä•4öò"öT$ýW !§£רã|Wi(ÃÞu³ æ»}ÿöW¯•»ã—¬~ª:ͱØ{|˜èžfa g*•JzÝö kµ7Q©ëL*}Ãý[·~‹AI-JöYÉ㨾öªÌǃR§jNôªpÜÚ·‡ø4Ë“jì5$ÆeçƒI(™2YŸ…j–'sr°“lÑbðh0ŽvÕÞÐz 9Šˆ[Â~À˜²›ù¼®žGÉ‘%š=‡ãhZÛ!U471¤ãôMk8s,›«åño7)Û±h†mrÐoÌž¹RRÈ6ª‚üËQ™|¹ãéÒú.ïäNm§’eG*õOs^uyV Yj÷g‚|ŸÆ»3¦Ø·ô¸[†¼[/SkBU~juš¶ê“ðÙoi'4O©–³+Ùœ¢ó¾¥ÐÒoéjÕã…œŸéǸ©ïÿëŒ oyUÕÓBâä_ƒÖžýÄÖ:gÙÚ¤¼çèÅò×¥Du²&¿éQ•Ö9’ÿãúŠû§}ÞšOíaÔÿ;‘%wauË`ÿL%hP5ù?zü+×|R¦ÜKÓ²sé§nK6jvm™f'WJ´èJ‰78#)‘×¹¡iÄäÉqL=Ž-¾ùñ\%†ŽwçËŸwY«µú(ž+›&â½ÌïS‹úôéÑÇÈz̬hg)l¤›“|3jNÒ|. 770¤óyÞ[°’‰þëøpŠ'Cf}ˆÍéôYâÆ§Ëº‘OÍÙ†àW_žUgï‚›£*ä:;lµhtzÌ9ÂÖÞÆ'LéÔcY¤G@É·9ºwÛÖýN˜^MDÔEn_pdH¯ÝêÃfž:݇f‡S7³¡#Â!øO£u`׊5äú•˜v÷ ~ŸúÁMðnU®ÍÅêëué`Învê¶”åÖ#ËvïLîÊ3É4g!ÅõIç2&0ªòt£ºw‡=«f2yÁfnžÄ¡wÍ‹-µ§«Gkú÷ØÌÝs¶´ùüsòZsµîO.Ïjž‡F£ÏøÑjêžIœ¢žIÂÝ]½NøtZÛϸPÎãZÍòcʸÎç¦R1¨Sðæ#z– þŒ7ùnÅY*·¨†‹Æ•‘ì½S1Ý‹¢×ç§m§Ì¬¿–g&F6±ù³Å„¼?‹ñõ2Yª·r­i[.m/7™À ý¨Q¡ Ó.gÜÜ.iÛ]¨1´'ÞgÐ@ŸeR{¡IÎÙ)àû¢@´<«SJ^Ý ÃÍ+sÒõ•õN8¦$FK@ƒV”qöLñ»ùa†œ991c ²ŠŸBÌ•-ŒïÔ“¯¯D~áü׉ãÜ¢Á,wèNŸªznoÁG#ïÒzþ(ª¸$u§õl8‚®ò\ú-ïHiO³j$rÿàr†uìËš¨ºª iÊéþ­™ðËM5EÏñF/ZžUyľ½AdÏÁñK!(·/r9K¾‰ñ$H5%ZrÕjL —§åÈÀÛ;Œ¤ú…‰ ÛQމƒ*â %}'—òÃXÒ_Ëüž38+r@‡à?‹BÔѹŒøÉŸ²³¹W}šN‹¢ÃÊåt)˜¦‘_ëËG3ÆcÝ@f ãÜÊ^¼[oGËÎ`ÃÜäL§“‘!äÇær”-özó û|ΚԮ<~LÔéô_ ïÏšC»¼:œŠ÷båWíˆ_Ø’êÍF³%Дnz-˳3XžÕ¼VËî™,jHK‡ŸXvËŸ¬·ÎáSß… 'V§y,5XñÜ»p„#Wc±³•PŒFŒò¶ûŒ Œü²ECïec(pc3ë7Ÿ$ÂÖ¤ÃïƒY,R;ÝéS‚7 ±à›ª_»ëÔôQœúã8.•kË!ý= ññHvjð¹ÀESnŠdË8‚Ï.䓱‡ÈÒl0£Û¶¬GžrŨãl>èN­º¹x¦šÍ­“wq(Q/M:Âpz+Gµ•¨SØ5ý)I‚Žq6®eó8XÎuõÀeìË—À[‘Ð'O@¥º‹Ã3Û3ÿQ ÆŽmNŽSór¶Ó?.”¦ÑPááŽÙLÝcÏ»:Q#Çw̸XðÍâeVÂ!„C Â!x%áUU@ x%„p@‡@ þ>ÄÀ·÷6…‹› xmŸKÜ!‚7‚+±â&‚¿QU%øËÈï£!íláºLZ&Ô`÷2Ñ^CÿRZüŸÓ¹FÒIT÷‘ž9ŸÖCË„ ®£qÔÐ0§–&êVÝ]¢¤Ÿ–÷rkiæ«I]üIÅÙECsBõ=õ©0¯(hÞtiöÑªçªæ!‰Ò–@8Ž—ÚI'•×…çuǵ7­ößI˜$Q­éH"­AÛV¢‚‡òrs3i$ g–øýy—Ðkh™Î™ˆO{¨DY÷ô¯£SE¥¿¿Ââh 9«NÌOCØY…ÒE$nÊ<´ŽÌ® JÃû2³Õ¼þSQ‰cáàŸUÃÃS ¸4‰a•Â:f8šh¼ÓD°"òâËbΓæ"ºã Ç!<ƒI1ƒœVä°LøÌ|·jŒ°UsžyéðäM£îgT’rdÚ÷Ícî´iÎg”­çSMÓr:š9ayÔæ:O¯B˜-³ó‘bù\Qt6X&ÌøýTq(¤º$“l½¾Êƒ{F&ž—‰‹3±ôn’hغëèì&³2NÃàœÂu„ãþ:G”žSxêÿ¶^:VK›Jj¤÷ñȪ*DùFNE))" QÏøí#ÇtζX¦Éî"¡W-G&g)õäªÊÌ®¥¶¿–bÑFÚŸ–1>'MÉäòÕ’C–§W,“_Kìä¤j´ae%3° R¢mE=sŒL¾(h¿¹@‡@ð×ÙY5˜Û;HdQƒû­4Ñ;!ÄÈÇ!i„$“ŽÕU4Ø%À½D…µ üÿd ¯à«¡˜À½ì¡–\¸+[ˆ»»†Ö><<>0±ý¡B»‹YŠK’yfŠt³c pTØs^Á5“–O+hÑ^20'œTkôã‘…t,ª¯eí^_GˆßZ „C øSh5êåÒ°ö”LŒúOGÕ!¸j(¨7q+1£ƒ$:”Ðpñœ‰‡¹%ÖÞèZXþc2Q)‘_áà‡TA(ä +®ÈTÐRWuFo‰U"%ÓT óÓ¢X…#›¯Žy%<í´Œr—È¡×⦠Ÿê²ÙKô,¡e&ª4UH~¸ 09ŸW' ÷ÔkÇ»iéë­¡†*P{î)ÄG™øà7S¢øÝÿÁB¡¸‚¿µ˜îªWÈä¯cXö¤åu‹yJÇI”÷Ìø°²EõÔ22;()€ß0²ÞQÇH_é9™SŒ(™£1 \4±-\!½£ #Ÿ]Uˆ31Sµ?M&UM¢ŒŠ¥Aý±É²°Ÿ*0 &õ=E"Ö~ÉI²ºœ3±ųhx'§Os"ôê5Ý>­ ±´Ÿè4 [ŽÙ/~à•qöÒó‘‰ ÑŽZªÕâ}ÇÀÎû³ Žæ.j ?*ÕT*ªc¼ü :‚œÙµø©A9³*>ïøiÉ£îr貉wJêù⦑±—dB­ê¡qÒг´Äþ‹¦'"½¹;g‰<:äˆzJl9ãtk5–žÀéŠG„ê(\ 23Ž*Tq‡‰Z–R˜ :–ü GŸß~"¼­ˆª*Á_`7$šæ‘8tK&F-©_‰†òŽ23/™»çªâ ¼W\‹5@*¬g|f…1»ŒìMy“,Ýomõêkó„þÑ2C·9ꨡ‚“DÅü:æ¨%ý k&žPKùqOæbUwx¤ºœÓW º§az æÕ]ÝT!‰· ‰ypŸú".M´¿q×ÄÉÄgEÃN½n#o¸ E è’=U]]µ ¬¬§¥³øéÂqŠjPÿÈh¢“ê.²çø{çEµÅáoK6½@%„ „fèJ.("(„PDŠHñ)EQQP@P| XP± :Jï%…’B $$¤—Ýy³›6›Ý @Àûý~#ëdæÎìÌÙó¿çܦe~?ìÖ³/ß!'EXYÃwêIŒ:+súL.½O›µÓBä§LÎÚ:ú«øC†ëŽ]æËƒyáB‹ 2ŸÿiàDÎ ï^p˜!ÁȰk2—²@Ñ(t¾*%j‘IWê^IEL¼ŠÆž*T.j²$.)!†i€»©äÈØ¼òëX)‡_5êp{¼Áª"ñÞv‰,ç¼zVÚ¯œvà­µ„n3pÌ l@ „C (1n´Lñ—™Hæ±Ö:ž÷’Y¢ˆÆ÷–]T•(äÇšvt`LB.%*Î×:hQ|²Neß \°jþVÊŒÉTñl 9iyξ`E2??5I1FÜ«hæ¢D>5ÃÜe.;«PŸ‡a]5Tˆ2p>?…UÉKMSÈ5µÕäE/çΘ£„@ƒ›Áç{ „»)ˆ"HžÆ¼ñ!—.x5KEœÇ!Â!”ŽôDA[òÆB4ˆ4|@"ÒF \Rjú36ç"Ûq´²Af[”LR)®ýÇ!=é¾j*k 2 ¿h`}ŒL¦Vâí}GRaO$Ô¬¨&ûŠÄE„ íUý4´Ï5òAŠrŸ™° 9/š1ʬڟ÷eʹ+Q‹RÞ»'”È#?:'Z8ÿNJ´t¬$I¥^:VNæô9=UÖ¤\±Ó'I‹<ΑÐD¤rµhÚ´&^·[Î ‰œÞshuMZµ«‹W©§ÉQœRlç ~4ðwÏï…“Á¥³J•ÕÍ@2Öûãp®S ïà{ÝléØ˜˜¦„U³ã Ê ëš\T¢@?1WÕ=‚ò~îÖÒ±1?NaРÑ,?®/N]8²8ˆ¾¯¬bï™Óì]ó:Ï ü€=IÿDMNV©­ê­žã‹F2í·(’®^#ë–.¥Â!u;o˜ÍÖü{Mß¿€ÉŸ… J·µÿ,FÑ A Ü/âr{t#ž»µôìå®àÓØm;ÌØÅªï}˜¸bS&LdÚ‚Õ|Ü#–ŸwÄäw§4’}Š#ÇÂIÈÎ÷ðÆLRÒrôI\8qœs‰]bŒ©DŸ:ÊñðP~žÚŸÁsw’\H d$…ò×ahûŸÞôèö0UÔö®“w¬xBNG“a%0õ†0¹Ãi.=@Fö)¾ø$š^“§j íý…p‚û„Û’’.ï`—܉©Ï^eü”`ÎNlBC[WÒ8ád ç¯ý—èÐÅ'tÔ²€¹æ€á*»ÞÇ µhQ-‰35 \8§²¿à…·£iT>“loW¢FÒ|öŒõ?À»cÛ°•/mg³4„õ³;QÎ26ƱóóOÙqyåG‰I»²×ÖuT_3îX³q¦ÆPfM¯†k¡”› ÍFM ~ÿ÷y+Ý“„öSX^MSÌ~@ ¸OPå¡V6esR6WeóR6eóS¶¹Tåøµ#ä¡+¢d£þ¸<÷‰'åù' vŽÕËQ›ß‘u|XnÞñù…ÉïË_l‘SŒ²œ½o¶üسŸÊçͧJrÂú1r—ñ䄳‹äÞ-†ËßÄÍ%¤þ:Nî1{Ÿ³v˜Ü}ö~9Ç\ì)y~ï yÕ%cÑK.ÊŸ –W°Ýë$F|!?×¢¯¼ðhF±ßõÒWƒå¦-'É›ÓJ²ÿï#I’y3²Á`õz½œ““#geeÉiiirHHˆ,”%Ξ=k¶M“šlÕd³&Û5Ùp= Ê&ŸŸïû}òµÀ5_òµBõÏ'P¤vnO¦VµLÎ_t f½4¶‡b´ðTë6…U[÷°aé+ôª—î9ƒôÑAÎ?ªq3ü5ym åš>LÅÓG7(JíÖ´ÌÏý8yº“›’†£·7\‰çšr!95†Ø,\oÖàf$ÆÎu”먫4lœÍ¬™3Io[‹ YÄÝFÌ#£©_ÂoX¢ëà~™«Ê–“¿amÔÎF\%KåB“ΘTÍCLÆuG T._ÑâSɥЈR}øÞúÉ— ¯vä¦ý ©Ä_JF¯±(Aå€GÅÊxÚÈð–1dj"#—N¡]…Rv4žç»™ë)÷BWÒöåÒ©_ó[˜vF Âq_|OÿF´ò/õNcŒXÍKo8³`íPüä ®&¤’kʨi+ã´w)«Ú×á95*µ å*y¢ÿk3¿ ¿>á,9Ѭ_²·l%Z¥ÎŸã+•Cé¸ö'^ (š<ÔôaHŒ r`ùׯÑ£ž_ºFØîTéÛ”ˆÏ'³öêW¬S'ñ*‚›pîÑ[öáÓ>U”ÏÆèU zˆ–O5ÄÙ vh­ãÛ½qì\—͘ éòÐÞðßÄkOóø–ytv0¢u+‡³O£>vã­ýð5föîåT«œ'’>‹Õú¼é0ãKÞ]´Žk© .7„C–È*}éz5Z•¨s1*»Œ-˜üÉdf²$?jº¸áá$Fù B8·ýI¾ÛÀàO.³°ÿTªý·Zÿμ8~…†®è“þÇjóG•£žIDøRßÛ¯|_­¿ržœ–xš"‘ì.ÉUéaNS8õé^ý5C^˜¢O<ÇùܪÔóUäiû6>¾!Š.þ9¯ê–1ë—Ëh¬»g+ÑLx|(º¯pÐ1o×¢I{©þŸ÷˜öx%±,¦@ „CpûIþcámG2xûbÞ­ÙUÂXþ#³§ž2Gy½Àdd)• º*t0ûp#;w“\õRŽæˆS%êúAb"¾¾æÕùŒqÑÄW¬FUMž™6û5[ÆÞˆrâ¾|Ž „iüôZÃbŒø¾ècc·ñŸ<ó:Nï~Êp?!SO>So) dHWØw4—réïÐÿ þ»¡#žá8ô䥗:â¬u6À¿ŽÊ“èÏðã!Tl’͉ý«X·¶ïlŸ˜*øV2w‡6ÆDq­J7ÊÛñë9¹¹ä&Eâp=BP9”£ZÍJd­¤ø£l=žHá‰udtUÀÓ=…Ød „pÜzµA©tîÜ™ &ЧOñ@„p%@]‰S?¤úÇ/’;eÝM]§2U¨äD~zeÕ9| 2#›œ`YLsZÄœ¦éʵ<¶k+Ã5txm8#Úoâà·GÍQĵLIÎ`ä Òµ‹2¢ÑuÇ®fJ;GËÄø+ä„oâ³eù&lˆæ¯½5ùàÀ\Í·#g&…Z›É¡¯V‘Úu*qt®KuÿLvÏ„†â=Þ"¦±Ó§OgÊ”)æÿâ!„C (I“´Ãó™ìK¯Y¾±ÃêËȦA^š 4l] 1µy¢eßœiCcýY³@¨kôeX—p"¬L±É¤_Ø:ÉrŸž3:ó¿d«i"¥Xwæ©™ x½Q¾ gþ̈G÷:LS³+/¼hºÍtÛ6ß;ˆaZó}§^ ä]ÉìÝ1|çÖéÒ¥‹ù_!B8‚’KD¤O5£AÃsæ ¾¾¾B8ît:ÝM…C¤sÁ-s3ÑܧQ‰x÷>¢Ö&„p@‡@ ˆ¨X‡@ þ…ˆqÿâââÄCÜvªT©""!‚ÛZ n†HUÝcˆšš@Ø´@‡@ „p@‡@p d“œfž¯À.Æp¾™ò[¯ÊÊç0¾~cÛ’åbNI$1§à‰¤ÓLjÈ)Éýdrò‡Uì¾l¯F øhÿiGr£_ ~n++¤GšäI]’Í>ªOä\h&ëûãQÒôç­œs×ýj<¡ÑjÔöAw+çË)DNÄ¥N ¼ ÖÙN‹Qþ{§æª2úÃû¬9eD[ðÌõ—9fÀ¿Ù“Œi`Έh&ýð2µíÍ(§s~ÿQr æ›çü¾#ŠS)ž&ôáðÐ,îᡜŸÌá/Çñ¶4…uóºS©HUH"~ÿü¡Ø†áòv–-¿@³±2 ˜Rwr¯ß§®(jQÁ݉8$ÂÖLdê—,öE­›Á‚½È%õ‡é‡Y=ÿÎW1”"XÿöþL/Å9w«{–.ýÂ[ïmâŠt‹åé³|Ü‚Nzˆ1“zR->’x_*;ᬃ­é•Fƒ¦«”®l嘮<Ó$™³gC M Úóiò?¾ÚuÖ<kÈÙ³„ÇgæÛ›‘‹–œ@ýGG³hõ\‚Z=H½zõÌ[@Úf–ýƒ$|@p·"ZtmÅ;ÿÛÆ¥AAø›€Eð.Þ«”¯Réñç¹—‰£omjUrA-e“’¡Â]›LØEÕêu`Ò‡mqÖÞŸBçTTs-:”£Jí´FTµýýðñ²>ÇHjtç“ñ«€£RÃ4f’’©ÁÝ)“Èh¤*Šã¨_×—2ˆ #ÞPžu«ãewîïR–{] ³I²ºgïëp‹a‘è+ףޣÕutøÕ­…ÓMÂ(9ÃKÞbwÀ¨;kAÆh¶ÿCÛU]ÙÄÌ *>zþÏÿô:ÍÔ6Îyú:ßÄ™”KÄ~½]Ÿq ¨³ƒéçh®²{îD] yµdÎÒðÜü÷镵‚‘ï^¢aùLr¼]‰>I³YËy©v(K_žÃ‰­¨#‡ñÎÉŠŒþäM:ûXU}åR–ÛØbR)šÝß¾çgM‹fŸaåô£è½=¹´'„Fo¯`\ã ö(×Y]Ÿ¶µ³86'™®³çÑ?ÀÁn¤wyó»¼}¨5ãg7¸óV¤åøîcÄæªP™§x—‘¥$¶nIç?ã_¦m97¼s~ãµ9¡<¦‡Yh»0ûÛ7hÌiæöœCÕ/V1ÀëïuŸGuÓç i¬Ö‡P‹5dzN.῟«xbcNÐ/c3‡âІ˜jŸFtmé›_QQá sÅ¿u/z·*úürwâϱ€“@pW…CQº¶™Í§ÁÑ ZÈàÝ8ušƒI7äôkÈMàãgZàmÒ‘ÇÜüÞNâ6e]Žá¼d_4vô 7|u¦­s"i±$ˆð?¿ Î«oð”§ò³O¿q 9?ãýíùxå ÔÔÈ$þ2žçþAû`8w•Úß/¥_5i¿½Â€§Þm¿z°tJÕÔl%R_4±VÚrG6n~ãkjóÔ¤ Â,îÙ´<–12‰Ú.SÎSqµÖýv‚a9[˜sº‹¿‚i]¡¬æ³øÉfº}Ø“r6<\Nøjf}…sòeN^~‚ÞwÔ‚ðâÂÉ\ɑ鲠2utÇ ¨£æé|M?>VÿÈÄ_{± n5‡L#à×IÊ_ËË#¿$R[óz*K’ H² µå3‘% F©PZÔ¨UÈoŸ±ô¨ÚFÀNn+Yxà® N4ëÚš·—õ|G¶ív¦Ó>yµ?·@¥½ž¯f~CøU=*C,±)I•]PWnCÇ.EJSÙ=»µï˜'¡Ñdü5y5ÎòM¢â’#„Ë¡©ÕŠ–ù-¨NžîèSRQÕé@Ç¬É yö/š7¤¾5=ÙDó·Ë-IÞ\ó@ Î?ϽBy¥2žNÄác$%^àãÉ'ò½f4I4œ7ö¤™¶H®…¯æIôõÍwŽfì71ý±†wÆz”róÂåü•¦¹ÞX&'å×£èÕ òF/|®œQŒLÏÓóxïzËT!ˆäðŽí$IDZing»K‘WÉ2}vÏ"$QÊ‹¤x~Ÿ¿Õèñó²ëï#%ê'B$«hA)ýjtió@~‡½Þ¦ƒÞdÖ£E» älÏ€óF„twU8Çùp7Ú$~–]þtíÄÜü”ta§¡Ûû3ÝÀmì^œx-O œ]Š® }“sì:c£e×½ƒÖÁÜóG堻уI•·’žÊ½%“¾ù!Ç8~â(Û?‰MQŸ²ú…Ú…z”¶Üá¨ãF†]eö{*•†ŠÇñÞø†×_yµ4›Æ˜ÅÀ:®H•GÐôûyʾïŒõ¨ýxlÜPræ}É)3’ºúzphQM¦¿ÓK©B˜²XÙD†„)Bß”ò–ï77‰ˆ°r¸Lbv:†ðPBœãHÊÎ@6}vÉ!6C¦ªù:•éýÉž’£øìçßÛ¿Ý@‚Z;ÜèÑeÖ zŽ…$?—ã+§òßE  -EÓ¸@p×…CQº¶I`úœŸ¨;j%ò؆¨p"ª=J÷úÞŠ“Õs!x!†‡Š-Êî9*Åá:d–®xZOKÏ¡¦jóæ8¿¹‹“™-hêb$zÏŸ¤6NÍ W•Úî"„wdJPº¶¦µk(Oï‹Å@m‹n²¥-×vï¹7¦z«æðÞ.ÂÇ4¡“r3s_sÞ× ·"ºQƒÍ*(gIÈ®­èÿtù;kARÇöäðèרôÜN.wó(ôlS"”héDŠ•ôç ‹?©¼šòÌ‹£Ím鿜§jÐ(sǵ/RÝôÙÔÆqðWB¯Ÿ g!-6öó,; –z`4àÞa2³û»çïp ÕŒM,ßþ ñuž¦¥qs×93dBW*‹åÅ‚2$J}ïáníQoŠ¡Kû ×S ºý´f:£Ç짦s6NÓÄA–ìj·$»ç¨h×.7&MàL—Léoñ¥êez÷I¼5øªUÈTê´íxsÎ#¸^¶åàU¸7îDÝïg2` 7Õ½ Ä'–ãÅ­ŠŒ­(]¹¶‚ƒÂ÷üú£v¾s“‘Ìèö_Þ8ßÊj’2«ñÜŒ‡ŠŠ† Ñ©ØyÀ7"9+œ­ß8ž¥µ®Î³é-£GkÙðK =ž¯úöÿ–I8u–Jƒg–E£wîocèqäš9M¨Q®¿qþ×8AÚÚyìümZÖÇÿô †/ðáûIMPâ$’O ¾zKôMäA‰êÀª¼ÆTæØÿÆæ¿™"~ÇÜÜÜsÿÜ% d$%£wñÆËIý7Ï1~5™\G/ʹícÌL&)× o/ç8,}úU®å8QÎÛ­XE-]¹E¿Kq÷\Èïf_#E{áãLi0ëÍh4š·˜˜ïœI—غò Þ=@Äæ«4muŠ—?®Éº¥Opõ‡—säyÖÌðbùÐ…Tœ½„5×0¨Ï!z/¢Ätøjâ |Þ~‹înçX1î+*¿«|öÌ$øíidNÝ´¦ùoCŠäÓ~¯¢þè[FøØ2¾{ž³%Ãù}úÃäî™J÷Y^,ùmѺ±oÐVó±òµC¬ÖÒñéÆhö}ÆŒEkø‹!¬\1Œº:áþiΜ9ƒ¯¯/ZmÞ8“ËQ«ÕHLrXÆÐétµ”rò7}þf´Øä»0­º×ò>ÿÐ9Zܼ헥q)‡K‰5· øÜ¼Z_ÊrKwÏ…â'E\œÊ¸•©ýè2ÔÏlO¾MƒÙ|’T¹<ÿ7–w70ëËGpÓ©=å!†ŒEμù ©d@ŸÆÎU|F¹n-0ìþ S_º = >çvYR„¥b")â(å7Ièsã þp,W¼-f)ˆ;Fn³áÊOóé»;hñÚF8¨ˆÕÉÊ2˜ëC*¯f<ýŒéàTþX÷-òàULÿ},ÿþ$‹{ùˆ®¹·§†*‚HU EÓdª«§Ù—Ü‚iC=9¸­­è˃îyéþ(–/ÜCˆ— jG=§ kJ»!›žè®H«aÑ¡ÒáÛ Ù!Oè«wÆ›M —E_CÈϬˆ©ŒÆ¡<ýæ®À5ÐS9R¦õá2ŠÁ_ÊfÊ‹ÔrïÍËmªÓºûž/Q («©*ÁߥL¥ª‚›`JUU­Z5o:‘ª*ó”$U%æuA)ó ‚û%tA áÁmŽ2L9dƒÁ Ž L`²E“MZÚ«ˆŽ…pʦ¾òâAÊ&[4Ù¤àß%rþ&(£Ñ†eíÍôÙÍÍøøxs+ànb²A“-šlÒV”!zT•Ynê÷EÄq ‰iÓét899™WÂKNNF¯×‹‡#¸£˜lÎd{&4Ù¢É& ìSÅýÖ†Òî‘°œ}×úÿM˸šúÉ›j{999æ<³”?ܺ`܇Íj†,^¿àæQnq‘ƒÉîLmŽŽŽxxxàìì\âre> ±)²PE¤ªî²yjøü¯é‡k Ó×”[6¥ ¬ Þ-¡Âtwüí¼–eDaÚ¬û‰hãž [þ_¶qØ:I,VPÆ£ËÚžiŸékù7“XІˆ8ÿtÄa)&;,ØL¶XðÙR<„”i¤›Å¥ª®Ÿ¤8žtåÅ»‰çY¶È–S9˜0EH0؇;%B˜î¯ˆÃºc†¥ ZF–¢!Ú:ʸbHRæÍ¢’D&#eeeíõôô|L<Ö2SZD¦Í$Ö›u¤!"Áíˆ8ìEÂ!æ§*û¤¤¤ì.ðû%8dl§©¤uëÖ}0lذÖÊ‹÷¶ìý˜-ÓRÖ9å‚ô• Áë¨BˆÆ=m¤š|½á($ ù“ãšgÇU[lš|Q1mæ™r.\Xïù矟¬D(Fà*sÙ‹< À:ʸYƒ¸Á?!¶Ú/„hÜ‚‘¡D{W¯^=wüøñ!ܘ׿-ÄÄ,(–¡²kñ(ø×rúõ‚ã ÎA®cb‘M¢ðtéba-Fë(Dk§PÙ¢PKQm‡J‡@ ÜSÂ!Û£ ±°ÙÎa¯q¼  ®*¿l¨”Ú"J± ! @PöÃÚÇÛ‹<Ф¦¬ ÓÞ¤`[áMhØ‹6„pAÙ딕¥€Hv"Ž"e §£ ¬öÙ ‘¦‚{KD䛈½4•lqX ˆå’UbÝ.„C î=áÀJ8l}–mD,ERU*«Uû >K6„C ÷–xØ‹>쉆ݹªd+¡°%"Ø ! @pov„A.æoØ[‘‡õ~["!DC î=ñ°'r1Ç_9nU ÷ àþ{ûìF%:Q ÷µpØåÿ £ðû _8xIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/deletelist.png000664 000000 000000 00000036466 13703317554 027471 0ustar00rootroot000000 000000 ‰PNG  IHDRéïnóþtEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp ^g&9¦IDATxÚì]`ÕÖþ¦mɦ£”ŠJQ)*Š‚ˆbÁŠˆ€]> *Ï^@EÛ³bGQQyH±!ˆ©Ò¡¤gË´ÿÞÙÝd²ÙM#¤q>³;åÎìûÝïœÛŽ *‰J_@ JÀ¬ÌÉrI$%j¸rÈí³@Ä%ªD>3Ä3ʾ¨d•Ë h´¿Bd%¢± jFù[—"i,bÆÚˆœBÅÉjÆØ" Z‚¨r ‚FnbŒÏ‘ K J4’¤FŒÏÑ[¦’ÚI¹ÅRU¤f1ÃlQ–’Fú–v‚JüïÂ… ÛõîÝûa—Ëu¶  ”÷Bkšy>ŸoéòåË¾à‚ 6Ú¸gØøgÚ? ¡~R!†zr‚Jß~ûmûsÏ=÷[vne3P-dÍY¼xq† ì«ÚŒ(æoT’©g诜ŸŸ?;..î"ÊZ¡úPXX8?>>þ:öQ³‘T$j$IK(hÈ–u]ßJ&.PíjZ IRëIµXŠ*ÆðEK–J T?¯<6«5Zƒ¬¥[g#[t¥ÊÞ\Ó40ç˜×u-Sàr¹ Ë2•B]RÏ0ߌ.–ê'¥¦•'h]$C¸ò`~ B]AYÝš&bð°IÊ´.ª¦º¦î"i’–:!’ ÑÈJ ŽÃåŒIRÄ0y ‘SR¡¢J*”ATpä•4ªš–eî„Ú#n™æ.@¨C¨Èò)¤®L¨ÙÈU]HNrB÷ù¡Ã@ À ¸=p„ª}Éá†ÃÖÃnx³m$ ÕSN‘Ó ‘€ ³„t ¦3Éq¶kôÊœR¦aÀŸ—B)ñb!¼jégÖM’’ã*ßé_sæn•IJ ”*SŠ' ^?7 ;]P`ÄUàp»àBÄ1C3®tòòÙ¹Œpº™M€ 9áqiÈÉö³ÏÁþ{MˆC£d7DS‡fÊHNŒò"Ǧ^0¯h¶í…`x©Ä¤D¸ýìyÜI(5 Äô#'KE}í|#’*…@~6üJ"ÜnBL‹ˆ~Q†™}…²N‰8eDt+øß _tÄ8 ¹Y ';Gö %ÙÁRÇX­Á›Wµh:4#±äåª,=g¨êY%aæ0â3.¤K†.ÀœW=·‰¤„J«¥7;…"+üJâ|9¸á ‘“/À™¹hù‘F°äOEës¹œaDTF~ÆLI†;Þ Ä ùôBd1s7!É4w@ñe†Ñ•‚$‹•¼Y90ÌŠ9l|4Z~~>’’’¹Ì-ß/²g‹‹#’r³fÒ¤IhÒ¤ Ú´iƒ¶mÛ¢U«V4Ö¶.Ar!)•û¢ð‰ŒŒ^NXâu/Œ´‰î<¦f¹pĹár(ÂªÆØÂIZQFñV­ ¹HDj¼RߘïðÂkI`I(ýYRÐ[ÍÎÎFrrrQ9AùPR¾”4DRž)|Û²e ¾ùæ‹ ­[·.AÚp†jË-5hPýYð æ?*Psó¡Éqpò†9óYU™‘T ‘G3!¹+š¾§ËÅÙ /¤qñ1²¸SP^‚(±{ÛbÄJ˜¹œ”\EsrrŠˆZPPPDÐÚŠ:/QÜ Ù¼y³µ-\¸‡£ˆ´|ã¤ņޓÄÌ?U€¢Ô‘ßi0Š.¸DÓo@ *–Z€<öÙÁTÕp3ó·¨.e„Ö$(rÕœC˯c÷ÑŒrJ,#¦ì`e$¨¤ºà­Tc‘¨‡²D£¶ ÊQïJw€ù*7nÄ×_iÓ¦á?ÿùOíªÁ,˜27½¶Ášµ[´?ÿo|ðÂøÛ嚬¥xíùo°Ó¨ 'vÏÆÕ=Gâ½-ÊToÈ۽˿x“ïŽs»ÝˆOs«©Êð±åp¡Lmtæ6†ŠŸÀà-€®Hðçä#bˆ©úá—œEÝ3©òss‘ï/Î 9. Îò0¡æZ$ËÉÉe¤®B…"*'f] hƒh8â¦q­hÛÖ¹xèÁ—1ÿ·<œpñ-¸gDÞÑ“wu@ëDfêñ8ñÂ[pƒv/¶fz!…쯼Ïá±oú¢Çàö¬¶·—1bRs´L•±~ÖLYrÍ—Ó€´¯Þ5ß5Ö“ç@Büñ¸ü©I¸¨IØéÛƒ9ìø›y[‹™™}q[£}‡Ž8©ÿxyBg´K¬Û†™€Œ£É 5!.n¦˜~«€;˜âùQ(}S/s —á/ôCv§÷k†“bʛ嵊tkþ3— \qÄyø…ðVBG$W’صAƒƒ™ØªV% µ® Î‘”›®#GŽ,2q322êäô2c×2,oÁ’uÃb?>Í’Ñ÷á™xä”’Ùªnü¯Î^ËJ;ÑÈÄïýŽv—´Åû/O/©†ÆýïÆ¿¦¡ÃõSñ\Ò èÿÑyølæÕha™Žv¾{%.üê2,~ëJ[‚àØö»füÆŸÀîoæ`ÛÚ,¤tj¤jì‚0yà 3nùo Hd¦xÀë…ŸÕ62+Ü3sƒËx$Yu_ 7’ŒÔÞlÈÓ 0U”™ßŸä†“x05ÔP«/SÜø_áôÀcÏsÕÇ*?tÑ]Ü€dÿ᦮b3}%EaIûPÀjU ‡› ?ôcÍUN")¯Å:wîlm………V#R]$má¯o`쨯¿i-Z<üÎfêÝÏ ’V¤Œ†äBÜi£ðìiÁ¢”»dúþ~;^zäz¤‹ÅJ‰o„Fñ%çà§\òƽ>îœÝsG¦ÃÜ6w<+㯆•$h¨±Eb…Ôå %ªþˆÇ‡}ŠËÿ|Õø~”8$% ¶‘;‚5°@ñ$Â%ES·D¤:Ct'£±­åÇ~.Af~dîÍU˜ùÂIW1áØµNgì^^žDöÝNÔ׿Æ:oîò¾©HÒnݺµˆ´»wï®­ê }&àÍ×ÏÃ{ãUnïé{ðÍs÷à`âf|3/Ý/9íNĤK[XV—ypî¿õ= Ó0Ì|òñbró"üÔý}üúØiÍL,x|"æî’­î Sh‚m¯ß†1?7ƒºíWìnr"¾{ü6,áéé޽pÜ2dÕ ¶>>"æVûÏæ @%›5qž2óIª«‚pÃÙ§ÂÌã2»/™2»Ý¨×¨w>)'m§N¬cܸqµÕd5ãO,["cóŽB '/étï4¿ B¨KU>þ:¼óeW_|)þø-žë׈æI+޹sç– ¨å’ õ 1ï»ïrÑëÞ`ƒ¾g&ܽÃf<ƒT¡ìÆ&IŽC‡Awâ®ÅvqáG?ᣵÑN?çŽOžQRI¿5ëí´Ý³÷ uW|ŒOþÕ94t®¸?ÒÙ~4f°]uf,ú£Z‘GZ—ÍÛ:EÒ?þø£Ô¾FÕyÝ¿àA¼Px=朜‹U3Ã}SWá”g>ÆØŽ¡ìTPuÝZñ8òZÓðÂë Ó§ÎyŸÎY‡¸3K5æèê^,žv/îþ¤¤’ný]E›ïºùëÀ¸¯ðÙÐãÁ‹˜¾}Þúà]¬ÐÓ1*t©§ë½ølш-‰ õäµJRNHÞïiÇ€ʽÎj¬ÉÌD³fÍjá©söDÌ鞎V²w§xlá383ÍÖbä슑ÿj‡¦béìnwÅž.™Â§‰ø/bÖµm"H*¡ý`jûkзEI’þ³øKL›Ë ÚySlgˆñ #ø©˜øÎH7" HiÕŠ˜T!„"6 (Ò$!8Ço¼Zp†±¹2‰æåå!!¡üð1œ ü1öîÝk5õïß'tRÌóý~?Þ}÷]¬][Ò6œ:ujµ?”ðp¿W¢(¶ApT¥ß2‹‚›nÛÌZUR®„cÇŽ­ðùóæÍ+EІ?†p´£^•ðÕ«W—Ú—’’Bo‘P-ˆTÁÃý~T’455µÔ¾óÏ?ŸJ”´®`øðáhÙ²¥5Ç/-- ×_=zôèAo‘РQ« Gµj8"Ô)•¬@õºdî")@$%DR@$%ˆ¤HJ I BÃ')ÄÄc¸Ô5ÔÅg"ÊÙªær¹¬õ‹êÚÊó¼òp×÷EX DÒjIT–O¹K OJ I ‘”@ I ¦©CõC"4#jdoSWá÷«ÐËjÇ4 hç”uŒHJ ”E,FP/WªÀÁ㜪^øÔ¢²sŒ`šªÁˆÉOvŽ](}NYÇj ÕÒº[[Ѷ G9G5¼ª·›)E¨¼y>x,R+’€ ©¬*)#j€V‚ʨ¬ô;¡ˆ:ü^‚SÁÔV Ÿ¼Aìc•ÀáötT I©»…P e ŹávˆÁø6ŒDÉÁí†CØW?|²‰NÀ_¨ZçIÊMdLÅ .ÀžxäXƒÏ~Nè±Õ3%%ê ›™ë7!»d‹d%Ï‘ ØÂ’[«|™Ñ‹}Œ|R¡\6 ‚1ªÍd߃ÄÒ>kE/CõÃÏýI«ñ'Í0ëÝ/%’ê/Me¢^ÜêjêtæÊŒ¥¢â‚›ù’|ô›,qs˜í“$ˆ!i4tõ…¯dîê/IEN‡Ÿ× UàÔátJA‹W”Š&3µå㶃$ ™Â^L—.Qƒß¯Y"¹Úê>/3ŽE(N'»^yLë9Iùl“º:Àžþçµ+¡a˜¼¢ìBœŠÅ*Ñ$ 2\¹ä÷¢ÆN.·#ý²ŽÕs’r‚ÖE2„+jnh\tôò#"Ú\Aë¢ZñgªkêN Ô I ‘”@ ’")@ ’DR@$%ˆ¤HJ ˆ¤‘”@ I B)Ô™Qð^¯ .ÄŸþi-lÖ¸qcœqÆèÕ«—5{eÑ¢Eøí·ß””tëÖ çw$Iª½‡6 ±ã§/ðîÛï`ïbƈÝxnÜzô¹RÀÏÞóqÛ€°Ot2s~Æ{Ÿ ¸pÄéHµæ5æâ§™3‘×ïœß"J}XyïîEב}Ñ\ `ãÿ¾BN§ËнIìºÕûù¸|ëÝør|{H¹àÚ¡{ðŸÐN¢ÂN$=L‚¾ð ÈÌÌ,Ú·gÏÌ;ýõrss­ïaìß¿ ,ÀÖ­[qÓM7AkÖ P·|‰)SßÁ‚EËñÇrÚKxôÊVÍÕø}ùztÕ«îè‡aÛ>Ç7w„+t]î·ÓðØ’«qÙõ¡Úïøhòÿ¡ó…wF¿‘¾ïO]‰Æ×1’š›ðñÄçá˜})#©ùÙøå½·ñýÑ2‹´?VcÃY˜&6†à_¿¶fcÖ ÈÝR€Vmš QáyVã=µ‹HzÀÔNP;þþûï˜×mذ+V¬À™gžY³™–”ŽÓ.¹×=6ÓÏg]Ó­œì€_†âr ¥ËÌú¿4Lzl)6:¢³yÛþÙ„OÞüÝ®º»6lGãã[!iÃR|‘ðÑ˘Î&8OÄE£ÎCâ¯á}írÜÞKaéñå@®À/ÞÓp[Ü~ìÝ|Cg×6mŒÃoEÚšpwj‡ÄÍ'¢uN\Þ-B`Ú5ÿóì†oÛ_ðþ7t¥¨rDÒ*€›¸‡smÍ’Ô@Æ–m((ðëâØ”½ò—ŸCç9©þ‚¹[°ü‹Ï±›™—ÝÎkŒ=³q¢>CGoÁeCo@罟ã?WüÝ?ù}Þ_ˆ´ÛžÄ¥==L5×ãÕ[ÞCËçâ”??Ã'~f.÷²Ýó‹9X²c¤G86óGÌYÓCœ«ý7ú¥ìÄûãŸBÛ·ûcÞ¿£u¯Uø{aX­×áç98gp'ìÿt–¶¸g7&%’V‡³¸vAAAÍ»¢†M5­†iÂ`>³µh¤Æ¾ócü»\ýø¦ß9 ï¯Íƒ!µBk÷Vü½æÜzÕÛHŸpº‡¤4ðëë¸ã–[pË-ã1k]S ™>ïN_Ü„—æÅh¡â¡ |Ú߆מ†‹û%bé‚?±diÎèݺˆ¤Æö…xæîðüG¿`ŸÉª¹ N¾u>êõ?<¿8§¶ÿ·$}Î?‰–‡$s·j8çœsðã?"//¯R×µhÑ]ºt©a[7 ˧ŽÇÓŸo†Ô±¼Ž3ð¯éÏáb§EEôî¾—zW¼ò^ÔÔª¹z)§ŽÂ³/\ÊÌݼwÕ•Èj<’’Úâáé—aÄ'?"§gØš0á-ÌÆY£1`~.¶¨ýq÷סS—DÚ€kð¤y-æt-~ub«^hç› cÔØþd{ŒmXö☹-ƒïꈬ'á•]·áë3TâII«¾²àµ×^[©®~Íu×]g-ÓY£’ÐúŒ+ðè'‹1ï¥Q8-!tm?~~íVLXàEB‹}Aö~= 3VåYËM ¢b=³Ëå„bë³ôœù0>}n’„âWҤϿðÄôwðÕ¼‰èå´Ý;îDtŽÛ‹‚:¢‰½ßS߇ŒüTcäÃôx º:``ß&pt½7÷lŠdG!:\3-Öÿ–l P©'’V íÛ·Ç!C*t.Àpà 7àØc­•,kÑs º6V,Ô Y?<‹a§uÃÍË»à…åkñé%ËpÛØ/°ñ÷9˜µ4Ó"©i¨Ör¢<ަª—}‡¸®C1â¬æpÚëßf|xËP¼Õf*K˜ŒA£g`M®•2²–¼Š…Í Åòïáè~ú i…¿þlŠÓó'£Wóøè¤‘pÏ™Žï½„É €ÖK$s·Ê࣋æÍ›W&AGމvíÚÕê³VMÁÐÛÞÀÚÔaLÇ3Ñüí8»[ã`†Þÿ!½w(n˜²ížrCÐ5®zîúŽ`Ó: miiÛcöŸãû‚$ °W›ŒØja&V¾÷žš2»Î{_<{ZJƒpüä›pe×÷qÝ;sqwç›ñô…ïâßoœ†Ç?ëŒÓ=qÆÆ™¸áÊ9H»ï+ÌÛÞ¯îÀ¥7þ„FOÉ[ß A{‘o’mSB7¶œ†al®L¢Ü·LHH¨òC-_¾Ÿ}öY©5ry×'hÇŽ«œöá>[¼ظhÞ¦”ž¬?áïcúáÌæ4d»Î˜²¢Ø†¿ÊЦ†6ݶ™u’¤«V­Â‡~]Ú†n·cÆŒÁñÇXéVI „"im‘çè=fΜi5¸Ü|óÍHKK£·J( 8À#«ñ¸0 Y,Õ/mê*S§¥†‡D,ŽÌf™—’ÈdjÌýÒKúð‚‡C®Ñ±ÏuºÛ¬C‡¸í¶Û¬Ø-‡3àÐPa àõÃp8á`œÒü^øL7ÜŠX‚ÄFBM Å"©fBr(ÁˆkA'0¬sà“¬Â$5µT¡æ)Sçû¶[µjEe‘]D9iDâä`¸C#a¡—©¢â ô0¡LB µ1U¿Ê¥Š`2§O‚,KE!‹U“‘4ã]ïe†§Ë!Õø "€B¨Ç–®Îxä(&“ÔÝ$n­êL.Y@Ày1{jaf­ß«»ÊØÿd§ ÉNEÓ2‰E‡»Vú,‰¤„úKÒR{„bK•›¹~Š›û‘Ó"Wh¼¦ÉMZ™3d ¦ÆHgñØh¦¢ƒ©¨T;“¨-žPoÁG¨•ì¦ã¹Ë·4>«™ÔP–Oª›ÌÄe¦¯9À7Ù}UK –ŽÍ8Ö47³ÖÈB$%Ô[œ8zqˬ©©0$\ðÅ7#üÂgñ0Ãüs°qˆ‘Y×-"šº^¿V¬Ê†û¢‚øì5½ú™»„ÂRN‡Ÿ×k™¹ŒJp¸BÝ#–"ÚÔHÐÙ.)¤J¼UØ ¸â™¿ª@Ñ|(,T-›L‰—Ó¦^¦Ef¡§áI õÛä•]ˆ“ƒ@±'[HpzÜ%¾»â㋌IÙ™7$Ù}Z›±éˆóÔêo$’‚¤¾Ò B]œ|R¡®[ ”‘”@ I "i%}pÁZÖ²®¡.>PŽHë.ŸZÆ— ‰œ´]Ûà•Ÿ—J õ$•eÙš^F È'%ˆ¤HJ ˆ¤‘”@ !TKëîá„.$:·§£B$=é?>PÖÊçzB,:¼ñdîä“")@$%µ…#³|Š¡¡‰ì‡Sª[ìýº€}š“/ŒCožpt“”49Þe ´¯Kpó©jù>ì3ˆ¤„£ÜÜå Z×jÕHì™êšºä“DR@$%ˆ¤HJ ªê‹ Ôk˜¦]ÕÀ# <ΨAî·G&-qÜž†ÁÎÕ‚i õ[ÊIŸ””@¨C hþ Q¶ˆÅ¾  ¡0†¦ñ[´B†¶hñ^Lª- ÑTáWõ`e¦O$%*ÀQ š C‘Eˆ"S@E†ÉT/¸’¬ “Ç•D+¶¨ö°Hù¬€Â¦¥”%ÒµPìÒ2Ó's—@(¢Lu¶!ž‚Àã ›))P62²•4=¹z Á`ÂLõƒ*¨ZÄ£¨²¡«PU¦Œ Ej[Vúä“ )÷3™úfX uè’ ‰+§€? 5ò˜&ó3¹Ä0) #tû¬Ð(æpYé“’Öì?,Î Z?:{‰šœ W  -^`|ÝbTƒ;þM6Ð!]ˮٕ-à'Vî>P‹퟿èÝ H íûcPÐèI!m˜Ð1µT ü~hœ˜ìm8”P ó%%FTŸOc¦+o â&®ìZá G>?L§æcúTî{š,½H»8a¥²Ò?ZH:nܸJ?uêԘׅUkÓDÍx)ql; à­,cÛ1ò¬°)ÝÀM̀͛d¤›8•¿X–Ä¡Æìú¥÷]»›¸Ê+`ÚZ¶/ÍD 3ËŽ3qÅ1ì…˜(ªýó÷ x-ÓDß–¡}¬"X°A@Û¦&Ìz0™çÈ›…L%\¢Ì{‹åwº …2ªÄ³0Ó×úâDÑÇʤOJZ»¨H48‰)Yÿ6&öü(`óeÆwÆüÈˈøIp{—b_‚YL’MÜÌÎyÛkZeILÜÙ±X9‹eØ],béÔØ—¤z€„|`5;æÙ |tÉл5Ð\¨ÛùxÄÉZyªåÞµDÎ:AÒÃU¿êTO;1Ë#©ÁHóÜf*#‰É°€‘æiVÛ¶c¹ùį@–ÓÄ7L%0Bu<ÞÄÙ¦•¨¥~f(}þ™w˜6å CÏ0~5pnš6Lq_^t:ÝD×ío oj° ãÃß4mi"­µ,Ôt£KC)©”1ɱßð X#xûä`Îû™™ºmMLhTò²¿Ö ø„ÉfŸPcE¡¡ôØ¿Ü}À}¿0% 3µmÏÌ®„&&îe¨ob$3£ìÄyY2óMLËd ÍüÜŽR0c„Ð3›uމ1•&¢>iu”oš¦¢0?ª€¡ëe’–7úœ«/ýOÀA¦–«yZ2Sô¡Eó±óš2È 1²f24ÿ?ó33â˜:ž™³`¾ç„w±Ïœ2ÙùMìß4…ó øh+p«¦ÿdbRæI±G+diåìeiÕQ% “‘öQââã!Ë )*)iå êó"P˜‡6M“‘ìI“Ó,ý+y¯a¡¿çŸ\¼o]øCgà‚ˆó×õ,þ|;þt”4Ï;¹~ä³_Ó‘]àÇæ½‡àˆK€ËGD=Z|Òê0q¹‚r‚öhÓŠDÝÆG¼Òk’‡Ôx~Ù¼²¢¢VGe© +(ß rs-%‚yð<æyÍóÜþõØ' +­Î|ÄyóæaåÊ•‡]ó–(ì3÷A“=N* 5„ä8'ËóCÖNAk®›†HzdÁ ºlÙ²ê5uÍàÐ0MÓ*䃪ÉôU$+Ï­V^þˆœ Ã'å Zf.læ.¯Ñ 5ìn°<ç¿5J/´ŸÔ´û¤Ñ^^\ì±\eÔZ×8Œ ¬˜¿û"nmªyÈܶ«–|…ßú«s#ý5>S#b—Vÿòòê‘kÜnD}'„zJÒnݺUh_e|Ò°Ššµ1@ß‚y¯í:Pðó }õŒºñfŒÜÞ= ‹ÿØ‚ƒ¦ ®’OŽìùã1ð¦ð¨êÚY÷ø¨G•çDʆEÒK.¹}úô±Ô“oü3ßW-úŽrFQH]²5pÁÓã*\xŒ„î¦cêˆ.hÝïÜÒãæÿ”F v B@òù0Ò˜ŠÛ_X &aßï Ðéd¤×#·Ú›»á ²C2É'­£à‹H <ØÚªµF¯ñÚ<«fMÅüvcÅ?;±ÿñi8tãmè;( ƒšCØ)+ñâ“ëpáäÐ$ÄQ}ÇBL›±y|X]r3dûž(hŽ–ç^‰¤¥káJX™o¬þ&Ý@zßQ¸°½R?T•† 6 ’)R†‘jt¹bN ¬ÄSk–aà¿úáÀ̧ñŠ×‰¶ú|<úú?ØèÛ†¼VÑkîê”iÞrss±#ànèÖZFûöìÂE=N¤’Pƒ˜ÿËßhܬ9$Y¶ æEÏ- È£ª;¦ó1RöÇÚÔЦÛ6“|R¡Žãˆ”‡[à{ëø3y5zéòI±OcVr¾N©n´à­ Èz@wú) ž¤< •.)%"P3Bƒ?`"Cô@¬ÀGƒù†<6‡XÄ1uüd—2‚ß%‡\ªÃZ6>bP½©S)¨ÏàÁ—TÍ i(H2dÉP‰Ó™õ¤[Ñ‚%ÈrÙåÌŠOªñÀßr±‰iK¿"iÔª¹ÿÆ ª±Ë£êÓ¥­°tªâ4K¯ºWˆ²#J¯øâfÁ–O©¿à‘¼089e¦7šÍ(:¦xY•¬c2¸xh0Ê »ÊȨkÅá­JßL_á\¦ÊÊ­^ãËTXIà n"_3•UMB¨Æ²b6f‰Œ31x fØêQ‹jûº6Õa{?Cä½Ðêô𥤢À[Yå¢úYí*§LÕôx³ûþÉ@žÎ …Þü<äæd#;+ ‡Àþýû±/c72̳ðÐô1èã ûWâ›õqNŸV¨XÄ6.]­K?tLní…¦®A¸BeQTdøüìÝË+®¨ÆŠ7_ø, Ñ—.mœÀ–dB¶²‚Ç(UÙw’ak´à‘ÙœN+b8‡ÄTTðs’J5ê1Uœ¤¶O¢Ä#…i0%Ùú±æÚ¾Y)­šŽgd43Ûj¶7ÃO*+3üÄBÄ¢tì»U3 –ùR³Ð±yþt|¸Õ…äÔ$$'&!kñÁ`ø—ãŒÎqˆs»àŒk‚V±ÍÌÂÿžº ·,醗¼ŒKš”O:cÏ'xlüg8gι ˆ¤:{¯rq±y4oæŠñšÿUÊzÀoUà9êPJø¢Ã† •qHÔˆRÏ{†¸X•?K“‹TMç^|ÒPdd“ÕR2¬LÅ’>©Á2Ea?Fˆé‡ÆžšÄ3, ò¨ËrÉÌ`$5˜)Âr©”‘΃ɆË3ÏH^ã+H¦¢ì‹ˆE«cÖNÛ‘=«–â@˾è×ÒöÓr¶°ç/„êËGv€mÖÞøg£€¦§]ˆÓ[È%ÒØ÷õ$<¾iÞx¬¯Üü0<¯OÂyMÊx•æ!,š<ËÅæð<~+Ê8-݇»4m0ãCíÅŠ÷ƒ›Nœ¬R7 æbùUˆn·ë˜ˆ:Š+ÿ+#N®ŽFŒ†GÃ*³öÈxB%©åD³š œŽè’o-îe¯Ý¢‘œý`Q¢:î«­ŽÒ…Fd•B\·D£Pñ³Øu]r8ùäÿj¾±ß¡8„¦“ÕÎü÷1ÓÊ)–ÌË üØöÕøcº‚¿5ç7pZòTÜqýh¬{p2n=«IéX§ÌèÛ>çLüù\¼9ÿôpßAöÒI¸ò —>Ú¤ÞÔZ\;rÅEV KBȲâ¢BÍó]T«mÅž÷s}¸ß*h*wŽ‚«rÓWb¦¯hŲù͸ªI.–n$©¡˜¹ÉPa5SDH†Â‚übg;òŠ‹ýøX ©`¿—ZðA—™zšÁå*%n’è*ª6L½k8†ú]öþ Ü5÷÷L¬³¿s3š7·Z]ù"sœ”b‡šUú&‚MVù;! ác~vLÅE•™Ië²üNž§¾|/àŠ‡K.Ù^à/@ò¸CyÏDÇçCÀ¶i˜&«T”D¸”šµ=*DRÙ¹ì&hLý† —+¶©k-žågTÐ1—XÆ9ÙW¤ê+.Á—Ãüb«¿Ô,SyuÍ_ Å”ùоßðÞb1ßÞØ²+€WÏD/ 9k)w ™¡Z]ü>ï°¯þ÷]<½&¸ï¸ËÁ='ÿ‰—_]‚ÌÉ'4ꛟŽÖ…N¤2¼ßýÚs½n…~7\Œ™7| ç#³ðìå­Q?Ö,Ç6a–óŒX!DsÆ8&1~ÆG}/N»„åc•}DO¿n‘´¼Þ[^JN¸R™þ ±š.šV½m~,CE&ÖAÕ/{Ú"÷ kc"«D̦èrv_œ$sR øí÷œ~N_4chìÊÅÏ+ü–ÉÏóKHJCšº?ɃñíËààŒkpë–|i¿bþ޶øï” ç]ˆß° ™w^")3³Ú÷C?ž#ÿàÛ×þƒ‡¦/zÇ9Û>ÃKÏ…r ¥;®ÙǺoiµ­ôšGB!e„j7#ÔjÈšj*¡¬°×™ GL•ŠÓ^já¹¥v¸râµØÎü>ÄÙäè¡Ñ1'KÓ‹pÿM§ BóŽä¤6nŒÄÂ$¸„’¦[ÞŽÕXüù»xã½_­gã„{?ým©æ~ƒI—áìëêI G„¤„JãØ9ÿ5¼µè@q;¾o æðãÿ!45”‘v¼Ç<„!ÇIåµèE1è5l{g$†¾’Ó_‡ç= ÿ´ø ÕI8é¤b’šÙk/lª§êI$%9/ Í/¸“/‹ºÌÌÙqsî™rÚˆÅþ;JX'&+_Å­7~†Àö Ðà ²ÿú ^ŠäæÁÕØkm=|V\'…âTüÈ®÷eg #ÃFÒœløi")Áγƒøö鉸t§Ž¶Ló ;M¼0þ®’#b4Í.}6”~ƆGÄ…«=7Û@N¢ˆãd>‹ÏIJ†„?íoê7°‰OíŠ'4óEÂëBI,­ÞNß2A«•’OJ¨®š1U¸Ö\$ÜÒBÄà“E4× î,¢¥ÍÒKo%á²D@i*ãóþ èªàANLiY<¢°w'Ïž"RÈC")¡ZÁTПgà»C¦µ`‡i˜X³ÇÀþ:¶j&‚±µ+æ ¯3PX¨ãÍÁ•&œ)2nL60«PÄ¿È,"’ª™§1q|K ]KÍéÐýD uüÅÈ+ºEÜ×CÀ«4LgÛoé ¦u‘N£‡ˆ¤„#OR® †YŠ£hãa>ë>IÌL~î<¶hx/ˆM|ö‹Šoœ^¿PÁˆdÊßåQÔ,ÒZʘÐNÀ1. ¦h¡HHv3—©bš[Àí§JXÆ'~Gaõ'™x²½„¤xLQ}ÉÆ6qn*#o† _®Ž«¾1 (Ÿ‰¤„*cßn O Þmªã¹C&{ lI±lµ}ÌY«Ãq²ˆ´(×ú2S·£„ ß«x'Äb)YƉLL^¥#²—HJ8|è:«™àѼº5|Ú¶_gûLjt$¸Z‰? œÒTDŸã$ɪHO6ñŸ3E« Ff¦ïü_5|磼&’Ï'-# _15Ú²R|W63eUÏ®4Ñ;XðÆI&cJ|bœ‰_²šÇݰ@ Gµ€ä8¹>3© p°…6fmÝ©ã·@i‚º<".nl/:wPpOz1“=I&œ¥àŠÊ_")á0!àô&vûtI Ä‹8Ákb“NÞ뉻}5Ò2šÞL„¸IÃ÷Ì}¨™§Öð†È—©aü:`Ô™2N!ûˆHJ¨:RšIg`ž&âÚûâdìdäêÏ|Ìݶ„Ìà&É"NMz°û…G娼YÃÓ»€~-€7¿×°‰üâ’ôàÀ][5ܽÆÀ. ¹J>)¡êðæxìg«sï·Ç7áË4¹U‡fóS›§KèÃ:9‡©«dbcA(,#ä;+‚£tS˜Ëžü“)jÐÓÅšŒúá‘ÒL"i…¯4ü…ñië>£è³«×ªÅçÐñàÒieeèx$ƒò”Ì]@JJ T¦ÉÜ„€Ê¼EA"—Ž=kê*‚½•ØÁ¬°ž:¥øŠSU#$(Š ±­õ£VIÉ'ª;ï Êï‚Tõú¡‹  ì |ªQ’Tìœ#±¦j0bò“ãc×Jž#¢µšaxYZ¼2¨é¢sÔ+)Ïü&XËKŽ<4MömÕ3U‡+¤*(ˆS‚ñC'SC¯ Cv†ÔǨ ÀTìs­èÞVxo("'¨ Áé„싈ŠËIZÅœG ÷™2\N©ÆÃEUJû’V˜ySX£„nð¼æyM=+§¨Á@Ðö€[‚ÀWíçjZkY `*pJ¥¯ ý³ÌW‡Û ‡Xö½t¦Æ"3—ÅZ0ÀŽú†£øøxdffZ eŽ,xó¼Ž?r7lf®ßd~h”x¹Ü¯t…ãä–o¾r 2SÝÚq‘Ž ’FSÐð_‡Ã7«I7mÚ„ììl¨ªJlªfð<åyËó˜çµb MëÝT„Üg,¹$N$ðYKÁª~îkZ®ÐŒÊö#³4y|JI®µ¥G­#f/ Ç s°oß>øý~Ëo²‡¤(õÚÌš0P]÷©©F²H²…7îï;™Ï—””d‘Ô~ì°îÇÒ}¼eW‚ÌFët‰™·Ö-Ür±ªª‘7þX÷䦲aµªˆ8êº QP[MòÑHÎp,Ìp Ã0¬B”ššj™dü8ß&J,²ÔYëCEËráùÎgNÖðçh ZYÒò(ñN‡Ÿ× •“”†ÎpÃŽ=ª\è}I2…½>˜.\¢Æ*f륥¶ºÏ ¥£ð†$1x-Í Òwý)Pö`µ¼°ðï¼…×N8û9‘û‰¤e“4²[%LH« C‹þF#jUPQv!N ™b¨ Ãå‘K~/ò‹¸ÜJY5qžZÍgùh.TáZ=LÔp¡‰4u‰œ•Ë_û_»ÅbßìÇ›¬B홢DÒ(Lö{ÜÄ ‘HfîáU‚±ˆZ>éÑ‚£Ö' ›bœ˜v¿©<%žªÚ󺪾(‘ô(óOÃDfæ’rE$.HZ!¢†‰XV6"kåÈMU‰ DÒ*5²; !©Pq‰ G†¤&øâs•%*áð”•ZyŽÑÔ(…ÉnúŽŒšª®¤æÑ\ˆœµã³¢ªkT’šQ$Ø<šˆm”ÈYCæ®…ƒ1ÍÝÈ‹ *TƒQž(ŠeÈlÑE†aäS^ÕÌNÃ(,OE£‘QTÔÈËËû²”@¨^0^-s¬¢JjÆ0u9sæLf¬Ï¥l%ªMEs9¯b´Y%›ÿ%ÄÚ¾üòËìF-n×®]S§ÓÙ”]ã l&ªD΂ììì%o½õÖØÛo¿}ÛÅÃè¶­a…IÄC›ÚäЦØþJ¶-|~øzPÚ: «¥Œjˆ á¿ZQ‹È*—ãê4£T ’e’ÔŒBR= 1£ú¥±º` › ¬GìßL´©¯ DV‘³4Ÿb)ª]9 Di8’ËI8šlëQÌ\")›K‘f¯¬F,_4’¤f„I>ÁˆØœdê3yc‘5–©kF3wÃdµŸhD¨kdC‘”@(Ÿ¤‘i´Ïf%.eî ' ¶}áÏF’„òÍ_³œ шZ–’Æ",b”ÈJ ”í›F#,Ê"h4’Æ2y#ýÖHBA „ò‰‹ˆfçC(gƇPÁ}¡êĵ/¦’VèBP­$‰ÿ`Œoô""e"æIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/help.png000664 000000 000000 00000077351 13703317554 026261 0ustar00rootroot000000 000000 ‰PNG  IHDRj$ •abKGDÿÿÿ ½§“ IDATxœìÝwxSÕÿðϹ7«{O(-«ì!™eˆ(‚ T܊닊òs/œ¨€‚‚LDÙ£@)«ÐB …èžiš¤É½÷üþH©i-¥4Þ¯çÑ'½¹ã$-Éyß³çœþKmö€Æ‚1öŸû¨ìn­” nbv“«.TzP~7$€Æ¥|°=.ÛRõM…V…ò© ìÿU7Ò@ãQ) ”ý¿R~àœWØb·õ€Wƒ§ò ¡*ªÒÚPÚª`7!(ŠRé•kg€Æ¢|`Œ ‚PéAÙ³em ÿv@ª””Šª6/@cQ© A¸‚ˆlÿ§*}TTqBYNeYQ”ÂBýüwÞ9r$º¸¸Ø¯ꙋ‹KÏž=Þœ÷?www[°¥…²œ`{Àªv:²åY–õzýØq÷9ø¥@}sssÛøÇïnnn¢(Š¢hkd¨ÐòP~ïòýŽdY~{þ;È 7¥¢¢¢·ÞžoëLT6è üÆ*”ï}$ËrtôÑ/04¨¨#²,—5#Øâ@ÙX…ÒV»}0>à&f2™ÊZªNb$”ÿ¡R$Ç•‚ÝH¶Œ`§U¡,08®ÀÐjX¡ò°fD€[G¥¨Pþ©£BÕÕ´ŒÐà*Uþ˧û­ ¶†…-#ÔUh³ÍCEQ,¿QÅÍC›…4­á@»šmJ'K­Ú¤€V€ëªc‡v5<{:öLíO%Š‚³³só°Ð‹Iɶ ŠDQlªÓiFc V­ÿÛ«€lÐH%§\2›Kt:mó°PÛêËÍ›‡êtZ³¹$9åRíÏS>¨jØ®·ª­5·6Ø%ËòŤd[3Bó°Pb¤ÓjÍæ’²F†:°Ð  ªf!MÝÝÝjØA¯/JI½Š»øõ¨|Z ¢Zæ„jþ‚Ý­PŒ1G¡Þ @m9ªÅ 6ÊÆ1›Í%Ddë‰Tÿ aÔadBU¥ã˜¯ŒO ¢²q uN è€Ðè…6kZ~³mÜ‚mN¤Ðf5­«P´*8ÆU­œP3I’FcrÊ¥²[ZmÖT’Ð àVew…,Ë.&×ùœè€v\ÿVFõ;_/ý®£ë4NJëÿ6fµN©¯s Ĥîi§uŠ|óÌY p£¹¾QA头ì¯jgTõÖ`5 ¤±š˜“Õ(X‹Ô–R"rÎÐÔP®oTrñ’4Îusm—J£¸yjuþV¦(ÎVÙ·D²˜,*K¾F¶Š õâºU¸Uwnv£ü&‚ÂE­I£+æN&‹“Ùâa6ç‰ÖBbÅXm€kÕH'Kåœ3Å"’Ŋܘ(«]ôj¯µ³Ñìj2eêd3šnœóÜœl}‘^–$G—ÀD•ÊÝÍÝÇ×±F6Ô¶QFFL%0ɲÂeë=¨ØUãZ¨òÏu&cšF2¨¹ÒÈ~7¥Üœl£±ØÛËKÐò·"EQôz=察¿£ËrueT "Î9'Ƙ@$+\±ŠJ¡§P¢vrËBŠ —HÒ«9GZp°¢"½··7rܲDQôððÈËËktQ¡Qþ£•Å"I%«E’®0"1q.“ltV ´Î..M,¢³TÏk:ÀÕ“$ 9nq‚ H°^£lUˆDƸÀ…K’¢0E™Àˆ3’âf-ÏóÓùZe‹1MKDG—àVWCmÛS¥ýàFrEN¬–‹#0©E‰‚•.s…+²•ÆT¢À‰Ë q“ŽòœRå‹)SDZXÀ †16lذˆˆˆ   "ÊÈÈØ½{÷¶mÛjƒ©4*Åb­·nì»QZæä$„ äJµè3d•dƒ©Ä`²X%Y- ¢ ‘$+%‰1"E!ÉàLfO­W»ZëZ(Ñ;ÐOS׃íažíGLŸóȰà«~ÛUÁ½&Íšó@Oú =LíܶG—fNµ=@l1ò©—^˜Þ×·¦’3A¨uñïÛÆ=>kT+]Î ŠUäããóÆotëÖmåÊ•sæÌ™3gί¿þÚ¥K—yóæùúú²j©ý{Üq{ˆîß bðs?šÝ×M(·“4xÖS#[©¯ü,¸vœúÆ÷„kíœPÅj/&|åÓÇz91Ƙګeßáãÿù¬nêjvWwùŧv´û´.,âÁûûú–]KðôÈs“»û\)¶ºõøéç+0A­Õét:V-2uç?x.ÂG¨z:uèè¹¾tW˜¦Ú²ÃÈÑÿ ëâFiUpS…´q{$©x[®å€Ì5ïlµXŒÆbR´*•š+\™J`V…+œK²Â"â\!KŽ·:È ñ²Jµrõ bÈ„wÏô‰^¹ð«•‘iÏðÛ{4«¹VÊ F§˜j¸"ô|o„Q½ÿ³ãæ«)ŒBaC˜Ôa 1jÆâ„ÿ\ÑŽ‰'WWWWgWWW7¿ÀÀÀ€À à°°`w5ÉI+ç<òULm "v9îŽÌìß9˜Sº¥ùƒ?üühxù? .çÇüøÊ³ËâJˆHì~Wïfª o»R»sϹ"ND̯Ç=3¦©Vþ=*ËîÕÎnîîîîîžž¾ÁÁM‚›6 ö÷ЉŒ[ /Åy¤žüdë¥Æ×÷àÖÅ›={vLLÌÆË6ÆÆÆÆÆÆÞ}÷ݳgÏ^°`ý¶¦roÚã¾Éí¾ø!µï«sz2DJ{áTN\à›7×\Ô¸·h×Ôåââl6-ºV£žx¸››Ä&OJþfÕ±Ürß̳÷¬§z^XþãŽd³½Ë ¢Z£óìõðÜ)­óO% îZÏ{|7ÛKâW¾ñé^¯‰ó_îWá®×3ßô¿òPIÿë½·7$+Dd)49÷¸wÒ…¸EQzN¤j>phW—¨-…¥WC:wk’6xl W§!=C4T“Ö¶¥N#ö™¿pܹµo/Üç>öÍWï *­°×¿{屜´þí÷·d •êÙÔ‚Ssµàl*¸dÎsª©) 0?7õB‰Vëåáå­svA˜J`ŠÌ%E‰眓bE£›Ê¹Påf±h¯¶HræÞåË;Ι6ã£e#ö/ùèOÿgßšXã=pë鯦M¹Ì‰ˆŸ.w jåRy­9ÓÊÂG>úTÚö¤Jµ[9-jóÁ+óh;¨¸[ÅlôyÙ\Õ|äÃÓ³#s”JFo9–öï6—ïo|³Õæ®X Ùi)ÉIç#OlONJIJNJJ¶Tûj„€I_®|®«ºÜ&÷G—ïy”ˆˆ¤¸ï߈$R £–}ýwŠĻߌdžÅŸJ*±í+¶5ç…;]+¼ )þû“{mQQ RûŸiº~¯­ù`¤ç¿ïçŠd‘EÊš~|÷á‘›SSS“ãã“óJª~¶«¿»í!åÞ%oÓó÷|x¼ëKë?½Û§ü¯ÄzüÓ{Ÿ]›…V€5tèPI’6mÚTõ©M›6µoß~èС۷o·s$7'nüf©Ç ÷l÷Þúå+ÒýU‚Wç»FúÅoØqÎL%i1ñ¼ÕäyÏEx Ds>`ŒÛ)tíç÷˟ǹ ™õè«s»lÛðçî¸l‹m"Åâä˜Ë£¦>ýˆåƒoöfU¼§Ò¹¹ºêDR9¹¹{øù;Ç®þßÒÌ;_ïÔdË[KÎõxb~/"’/nxç¹ÍWšÔÅŽ,¸Oúé­ßΖž‰+Ö…ˆÔn>žšäÃÇM3õkžtÔ@.Ç p;óÇi‹Ÿ{a޾DÛn@/çôK²·ŸwÁ–ùó}~ÜëïïWÆó.xÇå YCz–^B:»æÃ_NV½ÅçÑgæ3ëúۨɑNðjî<Â(&-7ʉœ¬Õ­õ¬p«ÉT¨Ï+.Öø5uq÷E‘¸@œsÎ%™‹¬4-X ]U>Ejwk¢Y2-ŸwtÇ 'Þz¦ƒXdTˆ¬Ü=w³ÞN©Äö³ýnR¹ BÓA3Ÿ¿¯šh¡íxÏÓUþI[ö¿½ý`Š•Hð0ó¥-ìŽÆ8륕Üõú?å¢srÑ1’â×¾¿ìpžÁPd0 ƒ¡ØX"]E÷O%ßׯ¤ºÛ>œTí'Ï›Ù=Ë'_ü“¡‘Rt¹¨ç`"Sò‘¶ž´ŸœDi?ÿñD…!Ë®7G¼±³„ˆÄ¶/ûnÊ¿Ï0AYdû-$æc¿¼óÖA¯/,,Ôë‹ôz}±ÔêÑŸ¿{Àéàâÿûüx-ڤĭßoN°’{·IÓúýûËWÒ÷ý²æx!'±ÅˆY£[Ôþí€kR¾÷ÅÀׯ_OÕŒuÞ²eËøñãwìØQÍ™ô1¿¾wNURâÝÝÏ?@Ã\]ÕLëæ`QŒ­ $üöÖ÷. îÊýþ»%={jˆŸZçÑï‘ýˆˆ¸”ÚûŽÞ ‰›“m7¶¤ÌÃ˾›{ßÃÃ?ÞšVîKIl9þç"¼¢ûç¿gP·›ñqó¤KVÁeøóMo¢/œ"¦í>ó“Gº©+ïñOú”=¶ûáùEÑJ뱯<3ÐÖ…xü+òìý¯w!ë‰Å/|{¼U·†½ßü¸%]抪õ}oˆG6¶}å›çšŒ1šÚŠ¨Û¸.‘;ñƒÞdÔß5ɘg°rj¼]\àFv£D"bŒ\DßNxªCOæW PÈ`7-x4!¿vJÖY‹ÁP \V¨™‹›¹(0âÄ9WÎ9qNr‰JÍT¢ÖÊD^·ÁÍÖ´=_ÞäôÏï¼»1©J][ðôò”‚3{·ï.m›aîm#F vIÜ|$½öwÐ-qQ¥ÕÂP‰cjÌáClgš÷¸²£*tÂìqM²·¼òC´¡ÖYDⲬØ?À”µ=©Òµ.8)—¯[õIOé×´l³œ{ò¯Õ«.+¤ÐæAD‡ LJJªîÙ¤¤$Û@窺<üÅìÞ:FÖcK¿×™Ö× ¢FÚöÜš êåõݼÕ%-BMÅ®SçŽ]ýúg¯n—ÛK‚“—¯Î5tp7épJI¹s*9ùVM—ãzþö`AÙ·’œðÛ+Oî½ëµWÂþ™û]ÒÀ¹¯š~eiæðW^ Úúá;ñ½žú¿¾¥‡§oýðÃÍ—ÄÀ¾ÓfOj~yõg?Swh#ÆŸÊóÊ""é̯/?þ«mwU—‡?yÄiåË_*k-~ïAñ•׎&%ÿXTF{ßÕ=ù[W¯ í=:¼ð”¡¥ûá 1VɰeýÅŒŽÓßÞ¥|8áJÖîoÞ½ÞkïV&À5º¢‚…ë³å#:æßŧVp=žÿ]Žõ€Ì‹ª¦× ëON¾t9Z1æåd¥«5ZVGœ‘ÂI‘¹Àˆsâ Éf--*g«µ¨®C”­f —÷-ý"Mg ¼ë—gõÊþyßæƒ$8µé3é¾.óŸû~ç·ï]´œÍ¯îŸ©®å ‰÷¶Ù~té¿QÁ½í°‰ýuªþ½nR|†ÛœI³föݽà@qÙf!øŽñý<Ϭ9‘bïž¼àèÇ”ËåR™Oï©Ï>ôOÆ–«‰ ¤úî–ùƒÊ½ke¬‡Þ›øÕ•“;Ý6qbGMöÖƒg‹þëCJ™úîQmÿý«›µlϬ҇¼xëkwÍß_çAèp#+ÛsnMlwO•Je±Xì>¿îÝy}b¦‡¿jþ{'»„¹—k¾WòÎ=—Gþw´Ô¥žËnÒDçäÚbì³ÏÝ(ñ¢GÓZÒÅ#M;•Do<–û﷡جSOS¡¡íèQíN¬8S¾wcŒ˜G«#|ƒMGÚî‘=öu"’NÛîâsEpo3bÊ´Á.§V|µñ¼ï³æ}zqÂò<ÙÎ~VÚ•¨âV9eã‚ÿã¯=áºfÞÊx‰~i7õû›¤_Ö©Qe8»ûLr #Ó…Ã{ˆ(fN$©ýºŽšzß·¸U‹ÖŸÊ²Ú9+@=¸¢‚IνP¼ÑB9ºî!ÚQ½:‘_œc‰âT¹Sž¨&gòoG\¢Ä]²ÉPd(*ôP©ˆD‘8'Æ9+} 5‚³ :ÉÖ¢«) sé4r„kÌ_‡.Ù:)9ÇÿZsҳǟ<×W{fÉGËÏZˆ(qݼ—]?ütæ¼O-¯ÏþtKA媲ª÷«›jëVö96òÃ#+í2î³=㈈¤øï§ÏZžT¡&_rjëÎä‰ôÞÃõÀCéF—žSïë¬JùmÑÆ{Õ~Á?´™3³d\ξæø–èEO<º’©º>üñ=37Ìÿ¯tN¤.„Ò¡TÜtdáì¹æwß|óÇw?}æÍ?SÊUö5oï:ðvÙR|aÌK.°ˆiÛgíÿíï3F"§¶wÝßÏóßlNáÃÇõ¬ØŽÀ|;z0R·¹cê+½49yÏoûì¾pºtéRXXX~~¾ÝgCCCÓÒÒì>U¢ÏÉ68ËäAD.íFN¿S<›a!"æÒ¬kûì_Oœ+ðîÚ-Ì#¬å "šù²×9«!~Ç?ý#úVSm«ÞݼRÿùèÏG;xwü–ҽ̭yŸÁÃzø©<{eoZþɳ+‚ï|ù¹à-¯.9!qYâ)8yŠ—·}þ¶h´ªº>üñc½têð3>ûnÆ•ÇÖã?¾´µé«/ß =÷Õ€ì3ÿïí¬hüÃÛú»‹Îº–m5â彑I²›—›æÊiÄVã^z 4~Ý¢ßNåÊî>>ÄsQ~1î·A}»¢‚Ì-…–ä<ËñÓ)½KRkçi¡®#Œú”b)©êÎŒ‘μš“[<]–Š‹ô®îžR81NŒs…“ÀÉVQ`LÐ\Ý9‚O¿ûŸ|fË´˜ßúý–sNº°QsÿïÅá¹ÿüß¼eWî:ðâØŸ_{ÓïÛǽöZüìWÿ¼\îV>Éñkç/Õ Œ˜[ÝÓôäOïþv¦´$‚ßà§žáqdÉÿ­?')E)™œH=ðí¿ßîTñ®Àðw· ¯\Â)ßþSÖõŸ¶Îý®í†¼:¬e¨JNŠO,©|ÄUR{‡5ó*íÉܼøÃ¼}En#^vò÷c®£înâìæ¢ÉHĈ1ªp§_ðë?º¯Ó™ß_Šg[Ͻ>vlï¨E‡ò9 î-;·Ð–X¬±ë?[V<éý…}]J™ùÙ—Ä¥Ë[>~c²ÕŸóײµ}z÷ צFnû{×±t ñØcO5?ÿa†Dììú÷ßþ»ô‚®Ý¦>=º•X½âÛ͉¶™E¸¹À¢yÿ娑Ï?ìúÇû[½š{÷ IjÍæÃú¶£e}tf¶‘T&¿ýH÷ŠÃzL~¾ÇdÛC®ßÿå뿞Á„€PÏn ¨@DœH–­)-IÙ¦ütý/ƒíF"biÝÈ-ô—d‹Ù,ËŠ(râ\aŒˆ+\áŒ8gdTD‚êê:ð)9Ûþ7-}Üìçÿê·w~}æ§™æ½<Ü/å·^üto¦,4¹ó¹§‡h"¿ýà‹…‡¾|çç¶ gÌšÞ{÷û‘Wzë #.åÄGE^Pˆ˜ßDNYg8PZ!B[<ÄÉ9#öàèïÈç7õù)ñê¹59±4£ˆ!íÂ]¸þ|µΗÆ<>ûå =*T×Û=ðáW‘’÷×WT(BAB|†2 ex˜Hÿ^ZI;²qCé°æ€ ÷—n ÁÃÓ)ÆÂBÛ+W«5D«µô½S²×?=d}¥‰m_öÝNæÜ[í°f!°÷„m]TÍÛ xà¡`+së 2§ÖwL{°SP¸3ýzÜó VÏIm©!1°Ï¤é®EEq[ÊDÔh û÷ïïÙ³ç}÷Ý·zõj¹Ü‚ Üwß}aaagÏž­ù ‚[Û;¶TÉç7¼·po!'šÝýÆóD$uŸðàð¶ÁÞN”•äfbºn‚%¶êYÔA'lvyëûQœÓáM»¿8þÞÞç~8”«’¶ãû¯ÎŒ|åå0NRìª/ÿ |ºgÊÒ/ÖÅ›¼z<øüíîý)‘0hö³:xª—KÌ­My1bR‘¾ÈhÌ, ûÄ4ó?Gç–ff ž·èf<ñO\ÐÀ¡ýŸ^uº°ì«Çl2[.I"O‰Mvj’tçK/5‰¨Ý#/DX/~ñûèŸ~âÇ+û«:Ïøðë¯ý‡p×Õl8q³”ŸZ¼3P=@#z2&rn¢A$ ‘,K\‘9WdE±­áƹ­u¸íßxÕA9ïÔº³~bNçèÓzkÁòy¯§úœÞq²@!"æÒåö¾N+"…Ìg~ž÷ÒIál¹Q½LT‰D’T¡)PåÝ¢k7cé?jì\5(iQÖG]mYˈáw ñîÏvÞ]åI;ÝŸHÉ\÷ì¤OíÔ½yΆ§o "îZðÃkýùöÿM{÷• IhþàOsòÖ¦Ïú8K\¥ÓŠE1?n:U«Ï,Á/Ð_T²® ¨P«UŒ¬–km7ƒû=0k|éüÖa3‰¸òLÛ»f¶µ=rêsï#ÿÎMtû”™·+kbþ@T¸®*µ,^¼xÆŒo¼ñÆÖ­[/^¼HDÍ›71bDÓ¦MEQœ;wî|PXXhïD‚ÀTÆÏj•žfT‡L|ë“q¶9¸ÕZácŒ .Fm[þ—©ÃÃÓ÷n‹mյ箅ïlóüÓÍJ¯ÏJ[$DïnSfOIYÿùžLÎ#9uÛò¿Û=wÿ㋾Z§W®”™1F–”–ýúôÃO»ÏmÖÍ7vÙ—ó‰1Æóâ¶­.:Ö·_“¤M¿mòð+]N|·ÕyPãÁÝéM:;kÔŒYˆˆða÷O½+¼x×w+6¤ø—<ùä#Ï:ÿñëÚ=‰zåÊËœ;OÛñì¾SzbŠúþ™Ïò;>ôÃ’?ølW.¯üÚ~ÀœGpÝ݈Qˆ.­9VÅ@TSN‘I21&pNŠ¢"“@DŒl™1A¥pÎI©Û?¥’”퟽´ˆTMºvöÖ G…‘îÆHÝüöQw‡”Ř&ƒœ÷í/€@¥R·XËWœ™SïÇ?í]ñäVsaæÙºo×&Úÿ(µ’èdZ¹µä‹ÇŸi>9%¿ØdùwþT÷ÃGvrKÞûû¡´Jï'/:U㲺aϼûâ×´¿Þújoa•¦®?¸tAüñP§’ÜÔø“'³ÍN&w5ÆY""!¨µ£+¢˜KpSo&%¤ÙT0µF͸Õb¹Æ¹¬Ç>;àSÁoükžm¹õå±ï¶ Á÷ýË“M·<χ'û¿ý÷;ý£Œ}ùo‘zÀ¼MïIø ë*8BQQÑÂ… ûôé3hР)S¦X­Ö´´´­[·ÆÅŽøâ‹!!!Õ¥upǶ¾¬øÜß­SÆ¿lÞþöÂ}z¦R©šŽœûLqSjÌ1BÚ”Á˜ QñÁï^;ßdÌ+ˆ˜.¸×Ø& ðÏÜòÝâ=ée7ª¬©Û–®˜3íñ¹>«¾üñ¨ÉËÓYň¸ q÷ ÖäY;Ýv{ œw¦È%¸©ùr®IpónÚaøäèµ§2¸&L`\Ñ_8ÛnÊÃÏöŽÛ¼*ZbZ¿v}#† îÓÖ-çÐêO×¼dâtñïo¾2M}pìsóÄEGîÞ¶3Nïߦµ(Åý³!³ýä¶©YM&<ó„ßÖ„’ Iù\­Ñ $—Xl3ž«\¼½œÁMË8F&ÀõçØ¨À DŒˆU^@á–bå’E) ^MMŽ“ÕDE™D$¨5Zb¤pÎe™‘@Œˆ+¶þŒ‚(çŠTãâi5ѶèÒ"çTR‡{^xe`å9”zL}ñßN5$Ÿ_|v¼^&"]]/ÖÙ Ïs7<7hÃU\UÕbÌÜwÆûýG©­G>šøì†¼r5lóÁÏg¬¼›ÐüÁÛFtRŸÝüÝ—jÿ¹Â¼{Ïš÷⤞ָÕoÎûv_éÊoê~óþ|oXúϯÿžïš™›tè`â¡ê^E›±/¾R¶’$I9e¯®MK•œšX:UœZ£&n¶X9ó÷ÅÚJŸÊ›ðõž v6[c¾¸Î*ÛüNnînŒæë+þÝ0'WW‘,EúkÄqÚ IDATõåСC‡Uþùè£^zé¥#F¬^½ºÒ³²dÎ>¶bÙŠÈL×Á¥›Ôí'¿5ë6UaüŸ©ewïds‘^mûÊÓ´¿oö@—”ÍlàÓïðËú5‡´aMüŒ‡ðÇñìŠ_‹Jnô²s’ÇwÖRð=xÙQxÛ#ïN Ó§^ˆ?¹êƒÏ››ÜÖ¯wñ³ï6íZøõÉžm(ê‡ÿÛŸ×åñÿ½fÕ'îHÔ›Ò£×~làØˆn-O'Ç{¶îj>¶êãÝG“ôWn rSÒ®Åïnß?b`¸Îbä¤H–Œ?.Þîtï .—µ)#èö;"ºßäçÛgþP5åîúâ5çleõðØsƒ=ÍÅÇW_¶ßé þ80*"ùºªÂœU¾ —u¢—@jÛX`‰J²¬Ñ&9“W³›ÅH…©T”AuÎ.ÄWn›!•RãSIœsÅZǨ ø òÃÇé«Y/½:t[é¦À»?\ür_wˆ¸9vÑcO,¿P¹.¸¹» ܘWèÒ²[;¯—4”sòèƒ@$Å?cæÏIö¢sùþŸoô¬æœšð OÝí|rÆç«N`ª ì1zB÷‚õ?îH¯ñ#†çǣƕn[†¨IðhÝV<ôןDíÇŒoo{BÎ8ºå`j…w¢š%Ø„®}H8îRé NNNŒç›ˆˆã·._vºê[&øt¿{dU¶õQvÆa(qWz‰Þ¾Þ‚r9¯ÒĵÌË˃ñ‚üªM#pýÕ¾§LqqñÇ>vUÍ[5åäs•Ö±üš9SNrò®×n4Fˆ Œom›—®ªÀrÍ\áVIÑó ã˜í×ê R)í•‹³›§—ÎÅ8É’Ä9ÛD© D"ÔV&HЙթ’z÷ÔÏ‚nIWˆHðì:ýÝÓ[çlzõÝM¹ÇÏÙññ»íZ8þÝL¯ÏýáH~iá…¦­šëxæÅ$[§%}óÿ-_øÎŒ¿ð[øÁ¢¿âõê Þ“Ÿ}ááÛÏ®øßkKcMö §üùÁG[2ì¾ Î½]0­Må­‚wßgޚю–|¼<ÞnP "’Óþ^0¿õ¢'<ÿæ”ø9ËÏ[ˆˆ´-G>ùØpï„5_.9xͳ©\üÜEÛÞ3ÿ«émÚ„ù9‹Ä-…)9é),bæ]Árâ’5QW’‚àåíÉxQ¡¾>†«Â{u÷áéÛÎTlT`î]ºµM‡cѨÐàT*•,Ë¢Xc‡\€›š,Ë*Õ :ŸP ©UjJÇÊL°òâ|9Î$gp^‹†7®³‹““«»“«1&IWdQ¥æœË²Äl3"‘¢ñ0q™KEué}Ä<̘܎_ºâ «ýºM|úåYƒrv¾ÿò‘ùÊ•J:/Œúzî§~ _œúÁ·Áß-ø|í©|…˜WÇN¡¢qßéÄ+/FÉ=ðéc'<ûÆ“¯ü0àžè®ýôÑË^|ï§ÃÙÕ¿`nJ;süx5c«tÍb.g,˜?6D¿÷ýÿ-«>(ñ¢èEï­îöÕ”‡ÞxèèìïãL¤îvß“÷ôóz{^ØuxIâUÕÚ™ TÚ勈HÛÿ•uïpcÄÕ-[œ>¶qlj˜˜˜˜3ÉùBø´¿¼Kwé÷¯Wý[g‚üE9#­>¦+Uµ¼ýö`ÊZè\…HÀ\oëÝIk‰9x¼¦Wp}xxxæææúúú"-À­I–åÜÜ\OGäª9 *pRôÒÅlK”›ÐDÃ<‰ÈJú\ë‰óÆßÌr^uƒ˜ËÓèœ<}}IqT*â\–¬\QD•šqYVdIÕœH%­g±R,Xõuˆ ê¶“gDxìüä÷DIh6ù­žlo<ñëÜ·~<”£•ÿ¤³$o|ûYyî{ÏõXlÔ3«“Ï>ý;©ÍÇŸ4©œ¼š†µéx[×®*™ ž­»» *n(æ݆ UŽÅÄ'gê-öªÉ‚[ó^avkÐNí|*5å2ÛÆŽl#Ä/}Á–ËòEq^qMLó©%­ê»ðÞ;ÆôXuf_¡tfç¦ÝîôJø;òR-«ìÌsø;¿Íä.)E1ÇJ[G¬ ;^—u*æäé ÿNŸÊ\ÚLš÷á£Åó+ßÿþ˜AÔ¹hH²Z­ªvýzø’éxjnÕë2A`DœsÎUNÎZF²TS«ó4uL(¥®ØvúJß,QT1bwNèèVrjTÁ•?¯Ò3+Hן@`VVfZZzâíI¥Ryxzùû4ºŽˆ \É3Åžfßšxš—Ø‘ˆ ä3ÉÆ¿3ŠŽ+Õ,µV‰Z­Õh-f¦H²"K²,©5:NŒË²"I‚JEÄ8Wt~Å$‘µPS§ÞGjÁ\Txvû²}…œ(eÝ{¯¦»%ì;S`¿]rqó;³Îýš{4I&!dÄÝ=µÆÃ» C^ÿõ™!!žN"ãŠ97ñġ݋׈<’PìÛ¹ÿ!CF=v×jÆ‹!'íâîo^ýjAùª«<|Î;Ãk(d…± ¼`ÿû=ºŠ.œ/½s®nÿøÒo§6N‚ÈŒGÏ$W|{ͧ¿4cCAJš™QÁ¡EOM\TéÜp|åGlÍôÓ’™­TD\)HpnÖF“õ÷ª­YŠ6퇟f†3ÎDÑš—PÍoê‘$IMš4ň¸5qÎ%I²ZßZLQl«”²Z­V«µ¤¤¤¤¤dä]£¯ñ쮾Òè·.ùµ0W}J`¢(jDA$"Y–eŪԦëYçµg©¯ÅDœsF¤Òj1E±µ'¨A$Ô.V¯ÖyÖL9Ó‰Ëuš)•9ûxó¼\“ÝY„|{Þ3¾‹:vóªÈô*uMÁ£Ý]Ú%¯XZìpçèÖrjÒŤ¤”Œ‚’ª{j=ƒÃZ¶lѲE‹€ü?l8[öN‰­Æ½úhoÃÖÏî°ß/Çé¶i¯Nl™´áã¥G ÕÝÆ>tWkµd1䤯Þwì²_ÄUB‡Î¸³•>zíº£všj:0pн=³þü󌭼‚wÇ¡ý[»ŠLàÆ´˜C‡/Ø«´«Â"îÞRùl1ä¦]<}±Æ š°QÓº%,[ÎJ‚_—á½›‰}æùS1)ê>w·¿°a×e…ÿ^ㆇk-E9É1QÑ à–ö÷_jµZ­V«V«ÕjµxcÌaQ¡«nèrM­vÛ³Ä[‘´‚(Úæ5VY‘eAQŦÒIazfeætçºÍ}p+¨!*8º]§žâ‚¨Õ:®0®pNŠ"YYVi´¶YD­Õ%°XdŠ9ÛE1aø@]8:*Ô‘m®(#&ˆ¢¨Q“ qÑÉêlÔ¹XKÒ\$ƒšsô‰¨‹FdI²”˜9W ¢š1Æ#˜JÖ¸Hî!QL—\¥" Wê¨QF&ˆ¢¨æ²HŒ‘À™¨¨t²³_‰³·…4æ'¹X…œp-iT A͘ÂQQ9Ë.>%NžnV[3]$½F¶ˆ„Ym®M£Œ 7«G¨DEã,3Ij)ËE*VË&4&Ôë8§’U–¡žÅå$ËWÔ&JÅkÀ­‚l‹ˆP®oT()­õòhâ&ªë©K'‹IÈ>¯6g¨‹ HBݦ[€š]ߨ •°KG2â8«ÓrÉv)V’ÌL©íÊÎP×y¬'ÙB²]ƒ™ú»Û7D°Qì@T;ÀD°Qì@T;ÀD°Qì@T;ÀD°Qì@T;ÀD°Qì@T;ÀU Ï%ÄŸi°r@ÃKLL¬î)´*€ˆ `¢بv *€ˆ `¢بv *€ˆ `¢بv *€ˆ `¢بv *€ˆ `¢بv *€ˆ `¢بv *€ˆ `¢بv *€ˆ `¢بv *€ˆ `¢بv *€*G &V«5&&&--­°°P¯×k4WWצM›†‡‡ûûû;ºt73D¸A)вoß¾¨¨(“ÉTé©„„„;w¶jÕjäÈ‘^^^)ÀMQ¡Ñ“ey×®]111ƒ¡Á.6}úô»Ü‚$IZ·n]||| ûœ?~Ñ¢E&Lhݺuƒ àæpíõWW×Î;GDDˆ¢X¿eƒ¢B£·k×®ÈÈHG— žmß¾½æœ`c±XÖ¬Yóàƒ6iÒ¤JpíL&Óš5kÒÓÓkÞ1æææÖ¥K—¾}û2ƦlpK¹öúƒÁ`°aذaõT(¸á *4z111D4sæLT•঑‘‘qäÈ‘Jƒƒƒ½½½ CZZšÅb)Û.IÒ_ý5kÖ,T§àÆ———·bÅŠ¼¼¼Úìl6›·oßÎ9ïׯßõ.Ü‚lõ‡z9¢ÂM Q¡Ñ³µ"'ÀÍäĉœó²5Íý÷ßjûÑ`0¬[·.99¹l‡ôôôäää°°°.'ÀUIIIYµjUÕ±75;~ü8¢\õÕo¹!û?CÃCT¸uÍŸ?¿†gçÍ›×`%¨äüùóåwËP...S§N ”$iïÞ½‡’$©üÅÅÅ.\¸páÂŽ;úôé3hÐ • õÌFÚÀaRSS««åoܸ±RNhÒ¤É#uîÜ¹ØØØò[‚ƒƒ|ðÁJà NŸ>™™YõðÐÐÐþýû:´{÷îv‡2>|øÊPGîîî3fÌhß¾½£ Pªk×®áááÿ¹ÛèÑ£ýüüòòò–.]š››[›3çææ.Y²¤–;à CÐÐ8ç Û¶m«î†Ó*maŒ­[·®ÒƤ¤¤J[Ôjõ¤I“ZµjU¶eøðáëÖ­«Úå#66vÀ€u(<À5R«Õ'N<|øðöíÛeYvtqàÖ¥ÓéÆŽÛ¦M«ÕúÞ{ïÕ°gË–-;uêdµZW¯^}Uc¦‹‹‹W¯^=kÖ¬š'S‚¢4£Ñ¸{÷n‹Åb0ÒÓÓM&S {¦¦¦VÚXË…E\>'‘F£?~üçŸ^©ÇQVV–Á`ÀlHÐÀrrr|}}‰¨wïÞ¡¡¡¿üò‹Ñhtt¡àVÔ´iÓ &xxxÐMŠJDƒ "¢½{÷fee]í…²³³÷íÛ7dȺ• !˜Íæèè蘘˜ .Ôˆ(%%…s^‡K0ƺvíZu»N§³ÛßãYW n)ß~ûíO?ýtêÔ)Y–§NªÕj](¸åôíÛ÷¡‡²å„ÿÔ´iS£ÑU·ËEEE!7^ˆ @DÄ9¯a|@C*..®Û~~~NNNvŸòññ©º±æÄp¤¤¤üþûï‹/.(( 8p £K·''§É“'>\ìÔÙå7¶nÝšˆâââª.\SK‹åÌ™3u;€ˆhëÖ­EEE“&MrtAêj˜ÆÛnpww÷º] *µ•eddüðÃ=ôP="##ëügP{þþþS¦L±ûÑ7oÞ¼êŽjÞ¼9?þZ.}îܹîÝ»_ËÀQ€¢££m­Š{öì±õG¨wO=õT¥6l¸téR¥¬Í}VÎy¥ºW¥;aåUšwÕ¶³——×^ ~•ÿ£5™L›6mš1cF›6mŽ;æÀRÁ-¢{÷îu¸Ebë§”}-—¾ÆÃÁnu‰‰‰[¶l±=Þ³gŸŸfñƒëAEooïJ¯eNŒª­äÕÉÊÊJHH¨´±cÇŽeë=8Ê¥K—.^¼èïïïè‚À-!22²Y³fµÜßÖkÈ6ýÃ5y“à†‚¨pKËÉÉY»v­¢(e[þøãooo¬7Îù… 6mÚTþœˆc˜)niii5ô¨G………‹/1bDÕ¾@óçϯî(ۊ˯½öÚž¿†^LÐx!*ܺŒFãÊ•++­tkµZW­Z5kÖ,G• àéõúýû÷[,“É”žžn÷VÖøñãmV8\III-ÛÇ®$I›7oNJJ3fŒF£qtq @T¸u­^½ÚîX………«W¯nøòÔ £Ñ]ݳ>>>#GŽlÑ¢EC  ...UGì\W±±±ééé'N¬M'EQAxçwê6u™7ÞxÃî´KpƒÃïìÖ•’’RÝSUÀ¸9h4|WAÃÐjµÍ›7ïØ±cXXX ‹']ãÜ2u——·dÉ’£G‘ÙlvtqàÆ…V¸…¤§§/[¶¬k×®cÆŒA¯¸N\]] tÛm·•Ï¥ÕÝ‘MLL¬´”8@ðuF:{ölm¢cì[ ‘BT€[Ή't:ÝwÜáè‚ÀMÈÏÏªº`uÑtÿþý׿PÕJLLttà††¨7ŸiÓ¦•””˜Íæôôô¤¤$»óy:t¨mÛ¶Íš5kðÂÍL­VO™2¥ºUÃD¸©¨ÕjÛÚ¢DÔµkW"JHHذaCÕöÇ#*@ýjÛ¶­m½*»®qfz‡@¿£[†÷ÀM.<<|âĉU·Ÿ={}Ä¡~Õ<¹†/Cð-šP/àæ×¢E‹ªsrÎ R¸YÕðU\\¼sçΆ, ܲ:wî\ïçÄ<·,t@€ÆG’¤ª7hýüü|||ª;Äßß?##£ÒÆÂÂBÿú/ܪ:Ô¥KOOÏJÛóóóW¬XQ\\ìRÁ­&""‚ˆbbbì®A pU ñQ¥êB °}AÖž$IõW(*))Y¶lÙÀ;tè V«eYNOO‹‹;räˆ,ËŽ.Ü*DQ6lذaÃ]¸ *@ã£ÑhÔjµÕj-¿±æ[¶¹¹¹U7¢G/Ô»‚‚‚7nܸQ£Ñ(Š‚8 7­Vk4ë|¸J¥Âò—~mÐ(U­å_¸p¡ºKJJìN™ZÃd5×Èb± 'ÀMão¬¸¹¹ÕWI !*@£TužÓ‚‚‚sçÎÙÝy×®]U';òóósww¿.…¸¹øùù9ðpp Dh”Ú·o_uãÆÓÓÓËoáœ=z4**ªêÎíÚµ»^…¸¹´iÓæZ¯¯’@ÃXp˜æÍ›—oÔ ªý±-Z´puu­4¿Gqqñâŋ۶mªÓérss/\¸péÒ¥ª‡ëtº>}úÔ¹äpKqss»VOÃÐp ððp'''“ÉT‡c5 nÍ4^ˆ à0ýû÷¯ó±¢(Ž3fåÊ••¶+ŠWóáÆ Óétu¾:ÜRºvíºoß>G—âºL–PKfàÀ[·n­Ã±ýúõsrrª÷"AÃ@¤FÏ!÷™ps n­[·îÕ«WìÝ»w·nÝê½Ó¤6 ùùù*•J¥R‰¢(Š¢pcŒ)ŠÂ9—¯°Z­V«µ¤¤¤¤¤¤eË–Ž.9@m]ºtéìÙ³—/_ÎÎÎ.[*ÈÙÙÙÛÛ;,,¬uëÖ!!!Ž-!ÀM@Q”cÇŽíÙ³§º…/œœú÷ïß«W/Q¸lP7‰‰‰Z­V«ÕªÕjµZ-^¨7'ιÕjU«Õh@¸¬Vëùóçããã³³³mS„¹ººúúú¶iÓ¦uëÖÆÑ„«PCT@ï1¸ 1ÆðEpý¨ÕêvíÚaÔ›º›€ˆ `¢بv *€ˆ `¢بv *€ˆ `¢بv *€ˆ `¢بv *€ˆ `¢بv *€ˆ 7%ãÀòoמÐók9‰œ~⟢’M–¼Ì5.¹ æÚèÖ®©[Å# ®:îwç¸ÞAÚšUôI'£¶åd;=|Oóó+¾Ø|A¶·—ºÃ¤—'´k,ÜÔ”ôC«—©áN s¾mÊscZŠDdÎ:w>Ó\›ºÓúµ tª¼Ùzy߆ñi‚9¾oûÛý«ù:æù1û÷‘ÞÖ#Ìpô»º‚߀™EáÖß-ŒIY±·de»ÌßΕ¸¹ #='Ôʉ¨0æ¯M»/‡ŒîÚ½ÜîWûyËKòÓ’Ó¼-¶n^tbÝW[’Ëÿ%ªÚOš;±Òg§)áО¨´Žmúu$®Ýó÷?RDëöÁ.õó‚¡!*ÜܘGç»ïé®9ýçÞ]Fßnáæs;7ž÷qg§à@-óqÍýkízχîëá[¹†Ä´-†MœýëŽkÕÚy FÅg#Oä{:)ë?š_¡v¹äÝÈ+… ˆÇf ðc¤¤Gÿùû©ïú3ç®÷·iêVáïP1›K ç·-ÿÕtÿÔÁ!Õ§Á·ç¸Q——¬ÿ{ÓÑGô3¶Så 7œÛ·ë\í_ܼßþ3,ñ¢è_nÓŽ}ñÞŽ"RR·}õs̕ݸ>~׆]µ¹Ù/øõŸÙ*ЩB]¾$íàÚUûsý;w¦ø]¿ýá2ul;ßÈrÚ±£—4mÆwóHjÑü„Û87Äïþ'Á­Ï¨A)YÇÿŽ4Šbåì ·¥(#9ÛèѾ­÷ÅÓ{÷ÅhÚ¸òLƒB–üË/Äì=¯„ÜÞÉ=?é¢Ñ»IO Õõó¶üÓžÿßÞÆUqç‰þÿV‡}ßQ@ATEû£Æ-jŒÆ,jÌb'éžé¹·ûNß{ÿ¯é™'Ó3¯{g^s§»§»Ó[’΢fÓÄ}AÅ]qTeG@”眪ÿ~´#Fø¼ÌêÔ©*ÒÇC}NýªjÜ?ž£‹HcÖgÿ¹µÓ æ­³'rìSFǸ‰Q‘•Y  ˜—ÈûôID*ô. e¹…·nÜj6˯]Ϋi·Ð°è~¶Bw­Úæ×x᫽ž3G¸k^¡q ñÁšˆˆ4êùE¥|¶káÈÅ µeÕFË”«¸Ö0›o\Íõ JIéºÁ~£èv@l ït›³èèþKÎóžŸâUSsç}eVdn;x#fÚì” ;14Ï0¿¶?–è™?|kb°&"®‹ëÿ}ý­)?üÁäMDÄ(Û÷§÷Ov^‹4|ñ›ž^«¿:´~kت’|Õ‰ʯ—ÚçÍJÎßpêBóÛÓGtúûgVÖŸÚG*@DLWýíŠr7MDêk›MSj*ÊË­"bÜnhZØ”wþqJûeûÿüçC³~¼r¬—»D®ê+{¿Þpô†ßØ—^5ÐÌõXýÕ¦?)[¸xÆà€{ßš —32oZ4ÄËa·[ã’EœWrwha£G KÒÄå–³M\]SCïÖ”›¾vÓÕ;ßǜذæÄéç¶®9×òèöÁuùE˜öÎÛSÃZßšÝü¼5kŠ.U߬l6í7¯]ºäê?8ÚGDİ×UUUé"ÒÔà±vܨœƒG ݇.ª‰ýÊ‘“¥®fsó/ÿyó=3éÑ3~ôÖ¤`úá{Ž]¿^ÅU~jÓ—'kMÉܺ® $ÀU™÷þ¿KâèÚ[•^IžÎJJÒ?ú¼xäÊåcC\ù—sí#b4‘æÆ&§æááÁgsßæ6dñc_j®+ÿó˲‡Y²³ðè×ë/:ED²w¯ËIZú¿_""fMæºßfÞ]Ò=/jÎ?°ç|Wjj¢§¸J3ö]hŠzjNLÅތʘ)Ó“ÚŽ-h^‘>¼s¿ÿH…^Å7ï§ÿ4-sí¯¶ÔLüÁ;ãË¿üåþK^oË\÷åM£ª²Ê(uõš·ç=ÿ8Ýcf¬X!"òÿgá®?~|´Òkä¤e¯ÍˆõP¬ è‚£äð–Cűhºæ*Ùó‡·?oóî$Í3õ•ÿ±pPë®»«x÷ï~±»ÝrÒßûEúÝŸ4¯¨û¬Ïâi³fcNzzNâ¢Á†„·[BPÐÃü>èSº9IĬ¿²ïëN¸¶îÂ=,qsÿîµ1~Îê¼sÇ;s¥Â0ä™ås'ðm fè /¿ÝïÄ®mûö}vùXxBÊÈ1ãGÇ:Nì>Q1~NpÕÕC»OÜzz`î,Ï8t¡1jjjË© fC}ƒxDøð·®ëÛ~¹ºå»Â,‰Ïÿ÷QçïÞç­5yé?$E»Þû8wتw¦EµµÚþnˆˆ¦»{¸»šš\¦ˆH}m»—‡EÄž·wëñ›.ñ·X4WEÆŽ#åO½þìèæÕ…%Åi5O>^z£âF…˨9sìJjœˆîádór£¶üfSÀ`ßú‚FOï;»f®‹ëþí«l§HÛ3MDê²dÖXÜÄ´zÖX÷µ?§)à˜µ·®?Xêîëíl¸3IóOynáÈ`Í(;þÍ®’¸9ÏÑ̺ìîÝ¥Ò“g<裉ˆQrbËñºÁ3¦ nRdV_LßWp¿UÚó¯:5]«;¿7c\Â3‘¼_ñW0Õe…NMDn5™¦ëfaAUDŒòšÎç»%½ø¿_L’ìuÿ¶Áµàg/§¸‹E»Þûøúð·ßžÖ”õÙni¹6LsñéýÇ ½‡L}iÚXÿ‚};§LÔ:bÎQtbßYGʲŽºz<ãXÖµ›£§4fmÙ›ß씟þဈ5ú™·žò)?½iÝÞÒЩ¯?X_’ST§…W*$8%˜}¯>Ì:ÐúX»ÿG¡ÙTUZRb1nÖ9;?íôÜúk¾¾î"®‹ûΜ®ôzjò ß;Oºn]ËÊl ž8qüÈ™1#g˜¦¦IÕ¨)SxëÓ/yNž7ÎíäÚ?ï¹5~ɢɑV­©2ó›o.9t[èˆCÚ—Yû™Û_Ä•—)"š®ëz»·ÃÇz؈YsÛ½æa>oue×rkM-hâ[33òòºß!"¢ÇÎùñʱ>—Öýû6{E~©7cNà‰¹"nÞqÇÏJôq‰ˆY{iÏúK­ l÷%¾ÏH…^Ƭ¹~­Ì=(2¤*;»^üSæ/ìrŠ·µ± Âð(?´éœ×”…“c<,¾aÍ3&9EÄ¡_Ú~ºårÌöüý;3›??!úBæ)‡4jÁ¼ü÷¿Þ–>øù ŒCB·¸œôÜbG\ÜÍ w§ÝùšÖ(¯s™ÎÚòÂC3k«šÛ*7\.CÜÜâ#ɬ:wòŠÝgXjrRýä…Ý&ÍŽéx’ÐzÜÜŸüÓ\WÕå½6gÜ Ÿ±â• –ªsß|¼ñªgê¼Å³SBîÿÎråïýøý½­ Šè<ƒÍ÷N˜¦)"Ú}w‘4M‘€¡S¦Õ]ÞüQ¶sÈó/NŽ´:½g- ¬uiæ+97Dl©K^IÑôúzÓ1ß1*2Öü&£ãTKb§ùºÿykÚoå_¾púZëÖéÍßâcÞº3ˆTóNi´»\ù;~ý‹"¢yÏÄ™+ÞÔëöŸ[ô„—–µ[˜Â*") _ulübû†÷‹®N}fbê p/Õ»Ëmð í u±’ææfC³Ù¾ån5®ÚÜô/6dÞöŒÎüê½å·ìñS'TõåÚ3! ¼4FÑt›·ED¼C‚Ũ{¿!R¡WqŸ<]54±æb­[Xl?{†ˆh>±ƒ¶;V8rV@vV®]D}tÀlÈKÿl{–}À¼çFéÎ’Öéšoʌɧß?zæÚÓqCï¾(pzp|ÊÀâúQKæ ñªÊøè½}¾/üôŤŽÙiTWU›ÞñS¦ ÒEDŒ’“ÛNÖ'>35±uìì¥} ;/Ý^p ítuÀS džé"â;yJ¹Í¶Ÿ¼|L±€àºyag®”;ý¦ŽrõØÁã×ÇÇ&[EDš /\®HHöÊßûŹ}>Qƒ'Ξ?¾‡]ýo€ÔnM•啦5ÚÏ«Ëμý3JšÝ¼}uÝ·jÒ¤þý£­??ä7få›wçÍmÞÎøè½½]-}Aóù/ÿãëKÞu·ÖükÛÐbÑæþài-ï›ù¼õJZðã!¶ªø8×f³¸.~óë¯.´¿3sن߶sæ1ü•¿_”ØE´š­ƒ¢[¸{é.Bä~ß‘ ½‰Y]Pä2n˜wúÅZ1 Ó´g¬»”SèrUžÉì{<Ï32ÂZ%b6ÔÔ¸ûùÝó?¿f:%hô¢E£:î`é!c—¼“ìD'àah¶èøHû'[Öûx=ëžsC‹­ø2µ±¼¬ZŸ0fäq¹_Ýqʈ2bDëØÙÛ;¦‚ëÖ™ 뎖{ [:%öÎ25ßá3¦d~¸{Ï7"WLëÇ0t›Å/À¦¤Ì7)5Æ»boþ±ëVkûCÍ7aÆk/NË;&óº5*Ì&ÒáZ3ß:©…YwùÄ…*·˜©ý»%ç;îù¥#â}Û>©Í›Œ2ÂýèÁ#f?3È[DļuvçÞü°ÉóG…k"bÞ8¹ùHC»YèóÖêí#FÕ,±S—¿>Ú0Íú«û¶-l2EÄ-täÜÙ)ºhŸ°®÷û5ŸÄ§g$¶þ»Ò‹ô$ z-ø©¯6ØO¤‹ˆY{-·ÔUטß<á…·£Kggm=V3àÙ¹‡wØÅU˜þaö¿}aˆUÄU“_Pi˜®Z¯Åo¬òqÓŠ,~A~=þÛ ×°F?½ôùÚµ?ýÐ0lC– Sܪþêå3|J¬w÷—ꪾ¸ýóí9Žè©ËŸÒîTS=tü¢9l:øåמË‹ ÐMîÑS–¾"""fUAá- R\XÈ8`äô#•¯ïÖ$çÍS›·_¨7!éÛÞín¡ñCÄtÔ–]/((((((¬Šð@¿úÍ+x ½‹{H¨»Q$""¦³Ùå;xöË ÆF{jßÐ#Çsû?óÊ¿‡Å4]‡X,ºHcþþ/¾M‡¾Þu&ÿÆí&—fõ í7$ÖÏ•'ΪÂK—šZßÓõå¦ðU”ŒÚ’ÜâZÓ,­qÝ9W^âóöŽ[—ìÚu$§>dÜâY^V ›¾$üÔg;×}X3yÞ¼I þ 'ê}H…^K¹ô©š¦‰ØsÓÖ¸=`Áª§‚ݪœÇ¿øsîqsgêÎüý›V„?óæK“¢­5¹ÇÍÜóù-Ï™ÑüÇ®üqÿÀÿ5ðd3kò2¶Ÿ?w1÷F£w´oްž9vìÔöÕ‡·¹û…E„Gô6~XíS•>Ãf¦*þr9®mûýÚÓ5¦ˆhž ã‚uqÞ¸õôM¿¡s^˜?&Zy›Z¯„9+_õþæ›C¥7í]ïí5–^Ê)³‹.u%õ¦%„ľ­±øäîÎ7‡Mxy¡òÎß¸ŠŽ~½îÎããÖo{¢íVl–¸– ¦ÑTuÛ5ùÕ矎÷ûö|µ¸Y¬ ãSãââb£ƒ½,"bÞ<´ßl¸²wÝ•{æ´†wc;Ñ›iwOO§[Ç7¬¦—ŸÞ´£ÐÍÓ3xðØÁÁºˆ˜ÕgìóV¤¡üZaQ•CtóæÉÏ¿ÜS¥'Í^1lTýá"š5|ìÒn›¿Ú±ï³?ßxþݥùVuoÃßÅÞGó4ᙈHOM4iùk0uþâaáCý5‘Àq+~’x³Æô òÖ$pê¢WRB¢=DÄ?~â‚ø‰ó«nUÕ76569LÝbqkãáÄ—x𛧝¯ÅßÇRé õÜì‘I1þV xzqʤúŠ¢ü‚¢¢ÂÂÒF`ÿÀAÏ-²VÅ&¶?á^ï?qéËŽ ›ÿ¤^Lh¶yxxx†…úh"bí÷Ìò7ÖÅ…wq_Í;nêò&Uº‚ÝZ.è}î®ÂÃÛOÕ¹Û<<¼'Žá]Þ§Ù¼Ü ÷Øi¯Î—ÐþÏ£Å+$:Úô¶tزx„FFÍxkÖ}®3#b¿´íãNO‹&"šWÜ3¯ÿz>á¯üÃð{'éQ/î0››OHÔ ä¹/OŒl=­¹îâ®Íg½¸Rjgºè§Cïþ¨Ù‚ú ˆ ñÒ½ã_ù_©÷Ì©ùz°Ï[£øøæÃå>F JH)»= v쨄@«ˆYßúz÷ðQKÞŽI>_”t§4¯°ƒšÃÚŸ¹¯y…ÆÅ›Á6Þ«OÍ0 Ó4]­‡Ãá°Ûív»=>>þqo|LÃe˜šÅÂH$øn˜Î¦&‡nót烵ÈÍ͵Ùl6›ÍjµZ­VK+MÓ8ª ÷Ót ‡ à;¤¹yx²Ù‚H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*Pp{Üß.---##£Ãĉ'Μ9ó±l}G|ß™¦yáÂ…ÎÓÏŸ?ßó@ßA*ø¾ËËË«­­í<½¦¦&??¿ç·€>‚Tð}wöìÙû=•™™Ù“[@ŸB*ø^+--í"Ξ=[ZZÚ“Û@ßÁiÍO°>ø ¸¸¸ÃÄèèèU«V}ël߉¸¸¸•+W>Š%£ïhjjZ³f¯¯ïäÉ“£¢¢:<[[[»iÓ&Ó4ï÷rÓ47mÚ´lÙ2__ßO:t¨®®nùòåßý¦ÐÛ‘ O0etžøˆ:ADòòòÑ’ÑG455­^½º¤¤DD.]º4`À€ñãÇÇÇÇëºÞÜÜœ––ÖÔÔÔõBÊÊÊ~ÿûßÏš5+))ÉÝÝÝ0ŒÜÜÜŒŒŒëׯ·Ì°zõê+VP <(RÀãѾZ\¿~ýúõ뚦Ùl6»ÝÞÅÁ„΋ڴiÓæÍ›•/,))¡xœ«à1èÜ mLÓljjê~'tç…-µð­(@{¤€Ç`Íš5ÊNxtJJJÖ¬YÓ“kàIG*x :Ÿ…Ü[W À“‹TðLš4©çW:yòäž_)O.Rá ݉ÊÙ¾qqqhÉèõ¢££ Гk8p`狱€.p¤'X‡û'ü•³=lܸqm×3í™ÕõغèHG||¼¦iݼґ··wbbbxx¸ˆÔÕÕ•••åääÔ××wç庮ÇÇÇÿU› @ßC*x<,‹ÍfûÖ ˜†††NŸ>=11QÓ´O™¦™“““žž^QQÑõB<<>>‰‰‰·–ÄÄDooï.® jšfVVVVV–ŸŸß°aÃfΜùp+ /`ÒL'>¢N‘¼¼¼G´dô>GŽéN'ˆÈ AƒâB MÓº™555GŽy¸µÐG ¾_ÂÃÃÿš—‡……}W[@G*ø~i¹óCóõõý®¶€>ŽT @*ø~©««ûk^ÎÍø® ¾_ÊÊÊþš————W[@G*<Á”†ï<ñÑ]?>::ú-½Ïĉýüüº3gNNN×w]è‚iš999Ý™ÓÏϯë»;Í0 Ó4]­‡Ãá°Ûív»}àÀ}ÉBè,???33ó[oÁöòË/<ø!–9WzIDATùòå.nÁ&"š¦ ><55566ö!–@ï“››k³Ùl6›ÕjµZ­–Vš¦q 6='66666vìØ±›6mêb Qzzzbbâƒ~Uašfzzz3„‡‡/\¸022ò @ŸÅ$=-22rÙ²e÷›¡¢¢¢ë~¥={öTTTÜïYeË–Ñ t©à1ðõõ5kV3>|øôéÓÝ_àéÓ§»¾ûò¬Y³¸å¤«TàDNRRR×2[¶lÙ½{÷·žâlšæîÝ»·lÙÒÅ<š¦%%%=ÌVЇq®€ÇÃÝÝÝÓÓ³¡¡¡‹yŽ9råÊ•éÓ§+O]h¹ÞQzzzãŽZxzzº»»ÿµ[ @C*x< ÃhjjúÖÙ***¾øâ ooïÄÄݰ°–ADµµµååå999õõõÝYWSS“aºÎK©àñÈÍÍ5 £›3××ן9sæ¡×eFnnî Aƒz ôA¤Âì“O>ÉËËë01..nåÊ•ß:Ûw"::zÕªUbÉè 222zruÇŽ#x Ž‚) óÄGÔ "R\\üˆ–Œ^¯¸¸øúõë=¹Æk×®•””ôäxÒ‘ ƒÃ‡÷üJ:Ôó+àÉE*x jkkûÈJxr‘ ƒåË—GEEõ䣢¢–/_Þ“kàIG*x <<È4ìõÕÕ§ˆ3wë­=]gjº›»»îlrzE%Œö²úö ²¸D,­/±ZŠÏž2“GE ´¶L1ÊsÏœ»00ùÙ{]uìãßí,pIGšÿØ•7'¶¥ ÍÆÊÂü’P»)¢‰«¶¬¨²±Ýn}AAA¡-??Oo÷æÐÜ"£ÜEDÌÛ—OœÈ2m©#«tMDD³xxë×232o?•üTŒM»ó 7/·š‚KEµf»¥¸.~¶!³¡s¤èÑ3ôÖÄ`íÁþSâÉÖ|ójÖɽ…YE³^^<6Ò½ó Žª¢‚›M¦ˆHÓÕ çÎ鞃B-ó5]É>wN÷HsÚDD4[pÿþ­‹ÐtûìCçòô€×§FÝyÇÓv¯6`ÂSþ7 w '·³Þ]5ðÔŦ„§Gúe­ù¯t¿§—Ì÷ÙÿÇO»'OÖnF-dÈÐðŒ‹…ÆÀ(]DĬ½q£N аܳ@ÍkÀÄçŒ0]7Îì:Y3`êÔÁ~wv¾ÝC‹vývõ¥Ä;+ºÝ+ÌúK;WoÏë×~r°Ýzè”Uï>©‹8 Ož.qÆþ¿üfÿçBÆÍZÛl8|úë#­¯°ÄÌþÛ×GÝðÍegÛæÚ_ôð1 g òlÈÙ³ùrðÌù©ÁfIÆ×æðžpîÑ“_}Í}ýgi;×®“×^ÖáóȬ½˜öÙ®¢vG2Ö­Íh?DZõk‰ˆˆñÌ;oO kmMÏ„™ Ǭ>œv2ùõñÁšˆYµûp‰÷ð¥3½å¯@¯B*ô¨æ¢Ó/V6ݸe8ë3wï*Œ>-ÞYzjwIpÂs-s8 2Ïß ¹$ÖMD¤áÌÚ_n¾Ú¶_òþ¿ìѼG-{'æz©a‹­ÏÏÎnÝ9Ò<Ãã‡%¦†‰Y~ð„aë?b¨¡w¿©5 ³ Óìø}¾æ7fåÏÇ´›`Vÿä·»=ŸÿÙKÃßòÚóÒ·œ¨ {ú·F—¯o›}Ú»+F{íû䓊Щ«Þ˜¬úà£ÓA Þy1Å·e³^þ‡iÊúüÿmÕþýË)6WîæóšWh\|‚Oíí#Úõ€~ñ ѦyÁ"¤BßÐ\ž“]\ßþmhM>àÆÑÜÃ{Z†Ü©y÷KJ uׂ&¼õZ&ÕZýë–ùÿãÕž""R{êÓÿÚaL{}VŒæhm[^ýé5¿Ú’Ûú&íw¿Hk·²¬/þ#KôÉoýpz£/ø6¤Bj.ËÎ8z­e/æÒ± =²Ùßêéß|öhú©ˆÃé¸ràPvOŒe©”7é…%ë.îIÏ ™<;5´eçÆPx¬Àa6^Ù·þJÛ²õè?zkR°&bÖäÝ”ˆ‘Ñ­»O¦)Úý‡ö¸®mýõšSu÷FÄ×ÿ÷Ÿ¿n·è;£ƒ\µµN¿AÏÌœáf ™ôtÑ%O‡½øÄ¦£Õ13ߘmµÈ¤¹O×]4âkí¸š»ë»¾í—¿ØÖò8ïƒ9rgÝþˆ'˜YŸ{h뮢ÎCäD®ÜÚön¶ÄÌŽꮉÙP‘_z»ÉÞÜÜPã3 ÖQxdO¹£±®¦êvey™ËåØóáŸÅ0láÊE)ívý-Ñ_œ‘`³.{ç†3“^ž6ÀMDÄ(9º.ýö£þ5è%H…å3zÅÏG›5'>ýMºßÒŸ-ô9òé7‡®âïÝpþ@…!"'3,~~eY‡Ët¿áCûEÅ&e7ï-œ|ç\©?ûÅ•F-rú09TsånùÕg…#W½;=òΩµ—/:]Îí¿úÅö–ùuï”%?^èsŸ²DM|ùWk*Ô_ܾþ¤mò+Ó¶íík¶@MDÄ2lllÆÿôv·>u²eOÿVÚþõî—·gŽm°$,üé²TåP=jâÒ9C¼ê³·­»úÜâ1!fÑÁÏö4<øM?Xéf³Ùl6›»­©°AÝ;0$vØ ‘ÁAAAÁZM…„ùu8DàÒ?.ÎKDÌÛ7lšæç."ârÓ…T {H…ÇHšòúßN‘¦Âƒ_|qÐð±54Ø‚ëýG/^:1Úv.Û—/5j"šGOñÉ\»7‹J›$Ô£¶¢¢É-4"¸u_ɨÈÌ,Ðú[8®ŸUDŒŠ¬‡nûúY5Õu_Œºò›÷žel˜""¦iw_ÐXY”ßêÝr³mðÜמîßñõÙ[?;Ú²¬âÝ¿ÿË‘JCDä›ûç-É‹»‹f ˆŒîçS[꡹ù†F÷‹6½t!  …MYöŠ–vÖ2nþÄh«Hýùu¿ßÚ˜üüœ1-aQwî˯6–yù݃<î¾ÌuuÓüó¦v˹÷(YHm=O:Rá1qÝ<¿k}NØ„ÑÖÌ­Û3æ/íwvõ~¿¯ ¼°fãšoΘ7cd?ï¶½q³áÊÞ¯Z†g¸yyY­áÞ¥…¥®áÑÅEå™Ü6بþÒÁeÞ)¯>“ï."æ­£Ç춨~¡º”)6Þ»gõÆ+Šá Nkqºä.M¶Šæænó´ìù`ûuÕ(K¿ ¼<<¬MD6sQx]ÞÑí™ÚÈyããB¢ô,1o\¿æÙp³ÑtT—\¿f7oÔ©ˆæìÛœ»uÃÞ~ïÌŠ±z'¦ÞõyƉÂQ³b,"M×ì»b¾tFûNKÿ©Ëf'ÚDĬ=·å«“žO¯˜o1Š®M«|¿O R¡G9kŠrΟË:Sj8íç—ˆ–é8hÊ«/O _¸âëëá0ì…U¾‡7mØñ—÷.<ûúŠñaºˆá2´  oýͳQÅi¿û8Ë=0 zø Ó›¾yÿôå‚zÇ•{¼åT‘Çà:ÜnùÖ|t í ÐM¤BOÒÃG¿ðÖ„pŸ‹k“îžâVyâ¼uÚ›ó;/lZ}&xá²Iæõ]¦™ Ãb½ZöÌ›nß®×üýt§Ó!V«U×4ÑBG>5àÈ–ì|¯¤ÅÃZ÷á-þCf<+"#Þ|=tóú´MœzØ”l÷ݤæÛ¹YÇ2Že^»Õlê!“Ì⯋ô79>k˶zÔͳWeðÜ7æ?ÙqÅQÍêãßË-5Wæ_¯h4EĬ®´‹«¦øò%CÑ}£¢;žœŠ^È+uÙÏSÛ~êò´f£êÜö/”+*7cýç÷Ü_Aôà‰oþhf´.â=jùÏGÝ»ütïû\üt‰TèQÖ è(1k:LÕ,77±è"ºîææfêºÈÝ/]%…7Ì Ô0›ˆáp¸Äên½³Kåáᡉ+("ÌC:±EŽœöÔ…«»«‡ÍœiÑ|úívÏþXã¥m}uΘ0jÎв]GëôÖ[-ûxî¹k¬?}9è©WßšïùwQ6õUu– Ÿ¶ë'¹íb4]9¸ùü-q¿u¡ìî®_õÁuy-Ü¿ð÷/§Ü¿iÐéáÓ~øÓîüÐTrrë7».ÖˆæpºyØ–ˆ©/¾8¥5¨[4ܸ’ËqÏ£ú²Ó0Š/gë÷½Ò¬A±ƒ"¸]"?×õ´?þWË•F ÖýöŒˆˆXZŸmÌɼTï7"!T±7; ÍjµŠ˜ ×v}¶ñ‚+4Ì«dÿW;#^Ÿ›àÝ~—ɨÊÞúezqÀØe3î„„8ôé9CEÚgˆçÙË_ïÓ/Â˼ôõ©»³Aõe×®TÌ|aJõ—3wl [2ÿ©ˆN;ñ÷€$¢y\öÓñ‘ú+{6ì:}ýf£añ®¸é–2|ÔȤKZ¶Hè.Wmþ‰›Ó/Õ¦.z9èÄgû=g¼:øú†í«ÿp}ÌÌg'%Gy·¼‡ŒŠÌmëŽW+ÎF8öͺc÷LÐüÇ®ü»9±Æ +¤Âãg0ë †¸Îoøèdð¢•S¢ÌÜÚqgw¾1wï¾ËÎègF„:.gyY¥ø²Vœßµk×ñ|cÀ¬/Ž4N¬ý4ýËk&Ï;)Áß"bԜ޷kæ ÷¤…¯Ìˆ»÷ˆƒišš&-»RšˆˆgXŒ§ˆH³Ëe˜M%™»Öï̹Zx»ÙÚoƪ7§­x#`ó—Û¶½ýÔà‘ãÆŽëw÷ c‰Ÿÿ“壼;ü2Æ}úàdëOVg}çÀñóR†'%„y±[Öç5”\Ì)kj¿+oÖÕ›¦^xþŒÅãžcW’úyÔeŸ:~âôÅâzkĈoÎI «Ï8!"ÖБKÞ?¹}ÓÞïŸØ1(eäÈ‘ÃâCcçü÷šsÏ€À_TèYeW®WÖܨ7õ€¶ý¢ûU0J¦®šöâSfƇÿv ÜÍwP}Æêoòõ~c—,œžì&2éåe–-ߤï_·ÑóÝׯx^ÝúÁçg‚†N_>w|œÏ½{çfõÉO·=Ï)¢y‹ð¿û¤y;óT®ÓlÎ=}>"~èäEÉIƒcÝ5‘ÐÔVE 9~ðбãþ CÛ§‚+wËÿûç-ª_Rój½œ‘ûÐ…?Úö»g}öŸ/ÌZþù¿¶žÍªMxóožíGOôbFõ¥}[U(Î=8·k˹{&hþcWñ¯ÙñÅÆKŽ Ä ‹Ÿžᩉ˜õmsxDyáÝ”I:tüxZ¥3;Žl|—H…ž¥ß:¿sk¾»ü˜áý,"¢y÷‹›8î•™ w¿ò4JŽo>ætÑ#'-z1Æ–î®ù¼°<¦A¬¾áQµ—Úc†Ç´e€g¿ñKߎÍ)õLÔDâ'Ξ;(tÄ`kçµkþÃf-õ­µxyû‡„·§­ L>:1a숄PÏ{wÖ5°¤©K†Žo´[<ÛöÃ,Þ¡ýcý’§íßq×̬½z$£8Turƒ{Üä%/Ž¸ï…˜4÷à`:¡wÓ#§ÿè§?È+ž[î;Ù7&òîFÄêck y„%M]œ4þ™›M¾!ÊN°x…‡{z<ÀÙ6 •f†iš®V‡ÃápØív»Ýÿ¸7À#”››k³Ùl6›ÕjµZ­–Vš¦ñ5.R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H ¤R€©@T @*P ( H êTÐ4MÓ´Þ=¬‹=Ž*P¸› Fú¸öQ w˜¤µó6 @ê¼ÿßö@¿ß|ºÎØ$ —Óuý~G Úæ3 £G7@2 ã~‡ä~Gt]×u½±±±G·@jlllÙóïꨂv¯–TWWs`è• Ã¨®®î íƒAïp¸Aoe±X Ã(..®««#€^Ã0ŒºººââbÃ0,K[t8%Á­ýí)´¤‚Óé,//wµ2 Ã0 Ó4MÓ||¿€Ða?¿…ÕjmyÐùÀBË«Ü:¼¾e‹¥­4MkŸ f«Çó[x@võÛ¸¹¹µÕBçÓÜ:,¢å©¦iZ,i7$©å ƒiš-ÿ·e~‚ø>ëp®Açc ÊH-Ü”‹h{ÜV퇑 À¡óôvZ:¡ÃQ…{ išÖ6֨剖Zhù±C$0úxâ(/yÚþxB‡ËI‡sLÓ¼{i¤ÖZÐu½ý©Ì¤ðÄi+¶Tèð íÙ»/é0š¨}t& :žLíS¡³ö3Ü™¿ý®‡ZvÇ:tÁ<):Œ,jß 'Þ}U‡þÎ1Ðù` ï-ÐæaÔIDATxÚì|SÕ߯¿÷&én)eCËÞÈ^²d‹ ¸Pq€È "KöRAD *ˆ(²÷Þ{•ÒE[ Ý+ɽïI“ÒZÆÿUdœïçsiHnÎ=wä÷œçLEQî‘{þ‚D"‘HYô{ÙÙø?Œ‰D"‘üOBd¼ ±Éîµ"…H"‘H{1Ññ_Ïæ½lÅÇxÁÉî¯rñ‘Â#‘H$‡àèÙü½AºEtršœ6)6‰DòxŠžÃv³àdc‚só¦æðúf$‘H$’G[pn-‡×Ù Ðm޳Èܼåäz$‰Dò苎~“Ðdl8ýåvNçæ¶gÁ1Øþû`uYò ƨ&·Æ(Š·¼ö‰Dò¸K¯™S¶$Þ1&hR»³NZ¢9é‰îüZqŒÓQrp76Á1ñG9ÏJMþb“K^e‰D"‘Ü$>±‰'6·¼4±Íñ?«cËp?Yœ‘šÍ×o®R3¸—©û‘‰D"‘d‹Ð‡tpÔŒ‘µ)& ÙµéÜ\µfP]ÜŸ’WU"‘H$9!t¢‰C3œM†žÜhÓQsœ¬Ul² G"‘H$·w;ž79l;›ÝÜý²©^“WS"‘H$wÁíª×ÒµÆx§ã,>’G]—×@òo–‚å5x<¸Ý°šlÇé EGŠDò¯=gR|GÑÉBNƒCAü|L„FŠŽä~>{Òý<êž–ì›lrȾŠMòÈ ŽžÃÇR„$ÿ`ºEXœÆ Úž5)<¢ÓQîÖé(·É##8:ºÅŒ–š(þ¦¡kÖlÜDò«ýj@1º ºzŠ¿&G§ZbQ§“­Û¹]õÚÃ%¯&×€ÏvX ºËø©º«¼\þº q=» ÂñP˜»H¯rI#=œæHÔXoVh™[AsäIÕ4VŸÒvU¨K±·®‰ÏDeÖ¯Ö¹tþ¼¢c½Í¸M-#.˜YtÍvþ*m}tÖäô‡àh©IPÒØ:EÜÈëa”?É}ãj’…½¡)LÝMdª—)<‡‘“è<ÔärWÈï©`ÎðâTã’tâ´ì÷wËc k~+«/dÿ¹Ñ×@ÿ:=BíadñëóuSð.dä=w+1º]@ÌÉÖ‚F:ä‚&~œU+¯Ð9¦ó–ž3;5ÊÔ4R7ÜÌîhˆ4g'8¤;œüj¿v ÀÇUÖšJî?¶BN›2^4,êÁsË‚‰²˜¤ãy̸›åªÿ‘'áØ+®Tþ1õ_;‘ô¸*vÇr2ƒx’7°²#Åþ@×-c Ž[æwòä§fUéVE½QÓ¬‰ÿã9 »)’_ÁKüÞ©&.“¢"Rô}èåL·Ñ½¹‘Å.:ù…(uίRÝK¡àFj_³òM’J¢*¥}àí* ÉqVf_°-úšF¤Ê‘Çè&&ûh|už ÐÙpDGèFÅV%¡°û¬1Û—L¦G—«¨‘)„k û74b ±²ÇÛȬŠVÞ<¢a¹ÉáØ°&Ç3´i)8’ÿÛ38´^oŠÅèígF¥ð<*®FùÿˆÎC…5Qc®p!9T¯Õ.®»ÏÂ6›}0ª )¥à©³ö’#HT†ÕRð;/A\·g ÂV&Û¿_¬‚JË|šÆX9èkdºÎ§ô¯„[™qE§Ÿ¯ÊŽ£ö[m¿#+Sc  |qØJ$ö–6“í â‡÷š¯Èó¸måWq5P)Mç‹B€ \﯋IŸš•â¹ÁKÜ1›[.*䊕ï:¡3]°²Ò[áÉüzf§v[[Ž­JM"y¨]ØM<“Qèš& Vªétlª”0PßÃy‘•ñÿW+BÜMûÆDiü¡×uÂât…-+\Ë%+„ÄŠ÷"ÓEGçØu…$ñÒ»ö">Ÿªn¢jŠNBŠÆVq0ͤҷ¶ÂÆT•‹çÍX ª7\OÛÊJÙ^_ƒ•¼` ®IçÏ@°Xx³ªQì&„ê¬p%¶ýÒ4ö&($îÂÅT_¯øìI%½:m[˜FJA#c jü}M¸/•A•¶† ‘¼¨“*òVL¸^žP^ˆ¡œ‘ü® nñ7÷KÓí=Òt¡RšE¶áHòyÓŸÉŒgT‘b#Eçßäÿ[ÝvEÈn`3è7Æáp„N„SÔµ=ÇiÉzz¡ÿ—}öJ'[§ƒ%t¾Þb¥h]Oˆ«°YˆVïzR™ .§«p5ö˜ «dD;da¹p;Åʈ½baq>³òj¼!„¬¡“«XuÄQ©¥*4©b¤ÖU ƒ£: ÷±L8°ƒ)™ùòÌk/Ø­ ÑB¬ê 1ËoeÒn+C몴.Ì*ÄÄèèá`¯S쬸`w2^Å!(ÔÂ<›ÓÉ­`:cáo#ŸæwxÛŒžjé‚cßl%J‰äA"ý™ÌxV3LŽt;Rtþ Q¹‘1šÝ8P=„Cq3Я¦Âªc¾³5Ìgƒ„Nu øšÙ$L ! ½Êh!\‰é‚™11vw°á¼FgME°×+ °êDÙzá°ØLƒ›B5[“ÏŸÏ@ï*|Â,¬6¨øDXrÍÀÐz&žn沕Ãñ™û' –V¾îe†?\N¶·+­ïP¨î¸C|Šå50Ø[8³(!>⇚·ˆ‘Á¹ t.át„8³5Å‘¥çÆë ·s¿ÑÂÙ³6„â­kSÀ©)I7ÇÂåK8!•²/=O ç@cÆl6a29½•z™ƒG¬”©]o“Õ±o6‘qV)¹¬ðŠèÚI ? 1(¯Ò¨€!ÞVVZÝÞ¦d…‚úV®ÉªñµpKëbu|ò«LßÙ"\ÎÇ[5Êø«¼TÕHqáˆÖÞÈ4\B˜Çù÷%Ä£¤8®Yˆš’f+䬙·ÎƒÁËÀ˜â q‡-¼”~RtØtÂîÆ²üžõLáÑuí¿‹c½ÀªùxîéÚxíE¿ÙѽÜ!üGÝZðr£Bxz–&kK“NÌšA¼øs}|ù*%Âc>þ Ççañ/½ñ–ÓÐ>"¢ã¨Z“E¹nLW¯Z™°!÷.@».ôñsèä/ ·1ØÅʸszæbÞÉV¾ÿ¯ à—Ã3ïê¥2¤†"âóŠ…Ö Ùqɨ3Úžr1É:[›yy«•hávz çñJ>8š*¾ÛÜ…å•àLŸí~vr:ž¢t_NÙØÂ(nJªÎ¶«:6½±82j«…H¶g$6]œËë5Œ ­fdH5­„@µ¬d{-œø¿¢Î7V¿ã,ÿ.ŒnÆônæžu^¡pkµÆÌ7«R¼Å»¼[çkv%Ç;ë82ß§ÓE›IŸYÓÛØlêqøiOTÁ_ Î#¤9Úêß,¥.]"ÎTv¯œ¿l¡g¸8‚våŠF:¤XèqXÃS8[©ª´p¯W‰½då»"Fæ?)DAÊ1§Ó°uW~«²Êp!WJªì.æ‹kö~,žÌ¨ù‰ÕXïx½óŒ…!W8“9ù5ÆÌfЦˆ³MJ(üuJ£’ø›×W¥†Qcc(¤„Û1kL»˜)7~‹ï[Ý¢or:ÎUkÙ”(ï ìÿf&kCÙLÔø9\ëÞ›¦msÑqÔ"êeÙwý©ë­àRµ?‹¾êE­<•yéýö|EŠ<ÕƒáÃ{а`aZ z–yô£|(\ð¦ÇÓ¥6¯?}o¥æÏ’_jŽDòÐ!ë'$ÿ–ê»hQ0‡fy¤#ü4s:ÛÏŸ%,f13͆XyÎù«‰ÙZ‘ç‹ßÚ^ãšÛ KŠ•ÒÅÝe3³Dò8;‰än„HõªÊKÓ¿mY 7èÂÀAïÐ8ËÀ•ßq¢~žtŒµwº³ú燼=Ï“÷§Öâ^ÃXuÙ,/飀#ŽDòO ]¿Èáû¹ê†{z?s3i1GX1gûRòPѲŠOg'²?ÔJ» “s|>ƒ¸ÐãÇ'±nOûQ«¸”PŠVŸ<ÏŒ½þ ùz&¯”1ÒÔm4ï¼ö×-à­2.òbK$Rt$}6v/ßÍ?ɽFPÎö¤Y P÷ÅîTèýe2ÌÃÞüëqs³W–¹~ŠA_¼B"bßnLÿê%Î.Áw†7øfÍKTrÌÏV¤õVԌĚO ŽDòPÕw(öùÄm›Ái396WÛViIòyy©¦ª §Ù¥m]Q5kúKst(gU–×HòÀPvÆ1L~…Q ¢T¢ÒC‘}mìaIvŸ~¨8ñš{iì£Nl›Ù±Y6]¶éH$‰ä¾!EG"‘H$Rt$‰D"EG"‘H$):‰D"yð¹«.Ó¶e$ºcÝçÍjµ¦o!!÷»{±NÂ¥ Ä)M¡{\òÆzq9£—xñÞˆ6ü§ŠFú5Nm ħ^MŠÜ6?)\2ã•ÏSŸŸûå;ÎTïJÛâÆçzýÀ:ŽçoB£ù{¹[V?ëB‘"®F ƒ­;-ª£÷šíµ"{¯=\.æµHt$’ÿ-ÈDzo~w>ŠëdzۓúË>Ý™„!ö4;½¨[Ã_uÛò ùyúýa´.ä´ÞiÂEöÌM;Ä̹½™³_Ç”ÌÁ «_‘¼ª†Ù\ŒNSFÑ:c’6Ëy~9—J«¿¢êúÉüpÜš¹‘9‚Sg-­ÕŽ^=-LêÌàïeŽ'Ê‚câvÆõºN¡èéa›ßô/Ƽ7™ÜÓHÑ‘H¤èHþ_šŽ]Dä{ýø|Ks>yi³_‚¸_»ÓrÛkL›Þ”[¼WÒe¸LRðR8²k'¡ŠJžr5ÑÖfîŽxÇ$ø žO¾Ë„×+Q³÷¾âsjöóô-6™oÆ7ÄçFY#bçröù¶¥mY\]\p¥êrߢIôrÅë(¹jòr»0>ìOïÁmñ??›+ùü)ãR=&JtžÁ¸ƒ/1ý§×ø¾³•ŸÞOP§¹Lªç%ï»D"EGòØblâLÁÆtúb/^ú•ñ·ï¢píÐn,n0è½Uxx¸ hi˜Ë½ÎäwjbL åèö­„G‘ãÎÞm›‰Ù´„´>;xíÀßÄÕ^Îøf&Ì;Æñêžp4!:éFåôÆl|’I?Ô#ayOºëÂÂë ñÑÝ8Ÿe%›ólÙô:ûxCk0›V†ÒðÛ–üõö6ÂÛ–º‘ï„ãÇ¿ÉâÏÂÓ=÷ ´íÒœb6Ò‚˜ÿ|~òªE ÷RxnèF)fÊ׫@¾ãŸòÞ˧Ùí=ˆ= ;â)‰DŠŽä~aæÊ¡Eô_²™IK?¦qñŒšÙâ70ä…4&,êÉ™^“ñ²·Š;=†~õè:¼–“ÓØ’—¾Ã:s.fß9ÜG^\HËãq£Œ9b#ã,'ÏËù¾éWÎE(„ý#k®evëܘL&ŒFS†¦8e1Œ#Û–&„HÓÐ4]»Æúu ¼Ôÿ=æö"Oê†M:C+!:™¿šÒtš8ŸîEUôˆoy½{ cæ÷K¯Š³O«¹òîÛ°X,ém5‰GÕ[‹âYlÞ¼9  cÇŽòÇ)‘¢#¹xðD×(öçX>3UÂgb7F}‘¯:måí·w1ñ«^Ì1þo¶daåöô:€–öènŠn¦w…¼º3¼‘íK§Høy?y+–§\á¬l¤b2Z9æ$P麬…ð׬ìŠ7ÜpKúõC¬>äƒY­L—áíÉyRü8Tò=?OnùÕH§sÇ»¢(Œ5Š#F¤ÿ_ DŠŽä>‘ÀÎÍç8}ñV¹wgÞÜ7)sm>II*ª¦“«vo¾ü­#GCp+˜a'¬\>{‰¥K`¸cú‘æ0íÏpèb8|× pÂ]Œw=zo—µJ͆êO«~]I¶ˆãw4µ ¯½èÃþOK2jB{lËø˜ÃR:}–8½:~7 Ÿt:wE‹-Òÿþ„Çæ˜d·i):É=hÎvÖ'¶á£“ðMYKß®s>ÕUIdóðì«ßïy È3})ý3ÅèWÙ³'žªŠÜÅèe¿'ßdHU£~žyG®ã×gòéX5W|…j3›±XÌv§sC«¢8¼=•ÆK›±öÕ-D<íãꈽ̵£±Â uâYç”ÜÔíòO6{Žª>Ê-NG‹ØÉòCy‘ .üsÂ#‘¢#‘Üm9•ØM¿ñÄŠ²²´ë×_XNyãZ¼½¨ÿJ= =ÀÐ!e™Øÿjþú1 E ×BÖ°:¤ªÙT(ëê i ׸vÍsBê 1zú‘ßÖỦ»Ñˆ§¯~Þñ\:v–x·jnÒ—|o]ÞZO>ÇúMœK¾ég …³öo#½zù}U(­_â§_㯠Yè‚‹M ׬±ï{“ÓÉàï¥iyq cÚxì§ýðòòJð/ÝDŠŽä_D‹à÷Ÿ.Riˆ?DüÁÉBï1¶“?†PûÇnÕÞæ½†Óˆ­0Š)ϾÏú#ñ4h¤²ó‹oHèøu\l²b%%9Í„Ìþö}ÿ©¢]=NréìŸÇDL้<͵q4wJVoFÛŠ 6ìL{Û-Ny3¢Aç×ÉÓª85 Ñ2w|`%ô—±ü\¨+?tñeA×1,m0—Î%üh5òZÝ or:’¬ìÞ½;½3AïÞ½yóÍ7å‘HÑy佯Ø£Írf ßz‚áå¨.í™0Y#êðZ~Ýu€SSá Ð~ìTû΃çQÇ6•Ì–‘ŒÚZÖ”G½ò-Žæpv|2ÔòÆ2§Ð³40 …íæ÷ËE1êWYÒ¿=‹Ì iÞ¬)ï.]O­Ò~·L_“v‚÷r.Ñ•:6qPýiÑÕ?]d WßÀî LjÓýØ·°/ÿ(ÅØE ðrQè5¢]z¾Kê´™t­âs«[²X0§™1ëòYûÿ Žt8wµr¨¦ièÊ¡V⃎pðÌU´Ü¥©^½$¾6ÕcžÇVgÛ2æ\˸§RˆÄý»ãÊ¡¯èè üü]†oÊKãFÅÐ.íbGx->œ7”†^Úp<ÁO:Mì¨æ¡IŸ÷iW<}X9!ß¾E»©‘¼úÍï «aºsš~»ï3úŽÜH® (–v‚M‡sÑmÎT^()¾Ÿüý¼ÏþzcYùiG Øõ,s;ϦÐüÏèè“x›´•쇞“èØê…††ÞWÑ‘<ÞÄÅÅáããsÛ}¤è<~¢óðV¯%nåÛŸó1põLžñ¶½Ñ‡s‹‡ñåæPê·ÿ5V Ó¸itͫ̕]aó6#mÛ{°uà Õ¨f/Iß.ÍÖ!ÌµŽŠã—òAm/¡ÒV:¯èÇëý@ÍÅ](n»àE[Ò$iŸokÎÇoªŠ¹]ÚÏûË5&$wÉc*LmÎ n¸YϱkO)éo¸P¦Ë,¦ÞE×"6³UoÆ;¯4Ƹu§,wN3mïjÖû>Ç+5¼bb ð³¯P?äOÖ_¶:®fQ^ÔŠ3Ÿ.äXÊ?—_‰äQåÁšEC"Eçv¸?EŸQõ œØ§š½H÷aSX´î qí8–c|3 '=zô[>Û•”!9DmÞŒ¥Q*4£¡¾… §­wHS#:è2–b¥(âÜþcò§x+\Ílÿ¹³:ÇEcÿWßüôšÛzŸe±+^DËÎ=ù>¬ ïÿÏù½?„‡‡Ë_‚ä_§P¡Bò"H^Ñ1–ëδ~SùNk>õÎO®ÔkÄù6dèØ)¢nó¦<׌97j¾\h0b!57ÅSg`áL‹çRgš$3iãEÞíu›4]\é6u“‡÷¢ÃŠüø¥E’\¶ Ó?®G¶kEºT¢ËÀ§YÕ7ì.ò+ƒD"y³ŠÌmˆ‚2…J8~ºUgoy´PÜH'ÍÊŒË:·» ¹}TJ¸æüyŠÈשĬ×Þ]\rNWdŸ¤TÛ‰DŠŽäaBQh]ÝÈ“ÍBtîn$º–¢sÙËÈœš:oîÓ¸må ªÒ»©SÌlñP)™ª±ßªÒµªÂÜpË­]ä§]=-®ZXêHøz¬NŪFš_³ò{\ÆŽ:A:ÅËxBüblGEÚßžSè*ñ·ƒQ^*£K”£ÉB(?,«²-ÒŠmŤòf)X|X#ÁÝÀðR[®ê4éE¶p•7ª©„e—Ç aéWµZïx½êT6ÒMר›tëg.¹TêÅZè(òaqº­ªyÆ]ˆ¡žSИ¿ÝÊA9Y"EGò S,Š/ö’µâ¦ò¬¯ÎŽ…Êy”›â¿(åÇéß\œ‘ðÇ]üë©Ôvîá6îÃ$ŽU]X–y"ý§Ÿ4Rå\û„£ú€%›€ZÀß@'¬Ì³QQ瓃V,¹ ´Á}B(ô{ÒÀ•£fæ‰4RRu´ðgQ f†Ú”À€.>yU#Ĭ !Ò9¥‘˜&Ü–¿Óım —ž¿.•Y'Q³_‹8·àÓ¶Ù·­J¶y¼q4=GQÈrÅv&ÄÊ’è[?óP¨ssc¤®óë^3¿ÊGU"EGò(8›r…T*¨¤WÝ-lÀ/ÚŠšO¥ñÍ&EˆÎ±+ùÊ›UX!M|Ádƒ(’§8‚m­F.ôui™í]c\©ë,ìp”À–T9|>ëB ZøÁe7ÏŠ@[À¤Ð ˜Á>)«²{.khþF&Õ™¸ËÊ!³p É ž…|&ÜÊüN%@ÿÍ:£ë©eæ·JùᨺWWHpU(ä«0 †‚ÙE!¿¢eQ“©6ÇeDª%„³ºÈ_D,4­b¤¾8?w!¸æÄTÈÈúº*—2—×vsW ÀÄbÿLåñõRس3 ‘YE§z)#ý³eOc”|,%Rt$*"À¯;naÃåLõW˜»ÇÂo"èü Ì.©3jÿMUfÂYtÀ˜£Äçß¹ª”bT>#` 7¡¨T-j@u¬’}2HÃÓ_¥’ø{"›F k’Æ‚CVBr©ú„Î,á–s¨\Ùé2«5_¦å/-Ä£„•çjTo¤rh·…¿³¦›a¡Û.íF;J©ŠBŒ5 oŸÎl{iUß…ZÙ\ö'ÌLÉF\|Š›ø:—“Ð{© ¬¤’K¿sûš­×rx°•/Âtä):’Þñ¼^ßH®óf~wT)…b·vgÂ5JWñ NÄælüÊ'êÌIͺŸ{nSj‹à©‰pìa o1]¸+kSl=Ô 4/[­œp>˜°­J+¬ßaåœÓûÛ/ßÚnÒ°º‘†‘:¹Kx¦€BÅÈh£•OB¸ó8+qî „+èôV q܈E¸0ˆLSy¿Ž[³ÎÆËösýß/µB‹&*h e| $r æ&Ä1X|f ÍÜWKÖùù”5݆޸ªJŸ&*Ç·ZØâ4=“bs«©Rp$Rt$U*éGgÚNÂ~*¶Yƒ >JzõYù<*Iâÿª¸Çcuœ§¡KÒØ]Õ@ w_…XÕŽãZ¨™³zÖ Þ¢‚ÊÕ£þ(«âá »çrg¶í¢Æñе]xÙªqÌYÌDžjäÓ™¾ÉÊ!¹EÀÝ}ÒÂþ[›Ž…±b!š.ž*=«+ÄåT½&Žs6B#БçÊL ·0òÔ¯b¤zœ…wÏëéB£Š}2ªØTW[»—ŠÃpáï¡à!„¤Jå†Ó)–M/µC§Íô×8c4ðU}˜¸Q£r#ù…ƒüÚ¢ò”ŽmQÔë¶üXu‚%| ùÐOcÜ)ñu®Úªö ie¶²0\ŠDŠŽä!q8OV62®0œK±•¦JT©b{êÜ…)q. ˆš^…¤$X9KÑA8—/˜Y^åïSÐ!¿Îõ¬KFˆ ¾z§pP¢„>¸,$Ähkùºœ£ó€ÈCY/ø°‰)= ÛJìWƒ, þ‡z ]ãäy cÒéy5‰}4(û^cZ²•¡[‰‚¨ûfV¯%þòÉ(À éPÞ@ý CŽjDˆCí2s±¢‘5t~;ce]”žÞVe› DõPiY•æ› üt•–N®¤˜¸†Wœ_q­4í'½Qè(f'µ°ý¿™pAUö¤1óªó¹*t®¬â}Þ*òœéÝbEfÚÔ5¿É̲xù8K¤èHp*V21!¿Æ¨­µŸ2¤O˳I¸…M¶/¯‘¦.:_µw+Ή°@ ›š˜-JíÆ fV'å`\œDè}fþÈÐ=³›)ÌßlÉZ½FVWS«ŒãMîèj°F¤žýü¼l=Òž.£RЧ…€ȥЫª’îN,±VŽ_ƒ\E|WÓ€¿ †XùñšBüB”¢ zQñÝ$µBà:?iâ¡’_n6³êª•ž[tÎ;§±µéøkV¦;µéøœWðtÊsr´pTµŒ¼æ›Æ—7·?Þªg¤Ày3c¯fý¨’Hû%‹•w.ÙÒθ!§L|Yßȹšå3-ùÿ#­”ükœ:Æó›,ìtŒÔüŸªhÄ—…*Õ̇£²V¿ýSØò¥Û–¶¸i3 ÇRÅ;s¿bT^*¬Pª¨òØzÑ Á8keñi+ßê\×XrÚþÿ¥aö¼^µðúßâ!wÌÊÞD…˪xU^±µí¡Ø¦q=^ýµBp„¨êžœK¼óõŠ*Üù‚X4ŸÓi_NÍ: ­p{õª™x6ÖÂÐ3v7•A‰’&&ÕÒ{ñ]̦‡ÞÅs&ŪŒ«¡ÞÜ*‘H§#y ÑE@Œu8‰ô¶(mçqÁÚÖ‹ÌdéžËU±?„ éc^b,™î£D!=«(cå­ÍðN]æY˜qF”èï¶Ô­Ü¹±ßæÀö_°0?&ëû6wÑ-—•uqöÀ].¿JÊE3/G:nGnCš½ú*6UÏêÜ„xÅØjçĹÇ a3̉m‚ñ^¨¸I:·få.ÎÃFèE #rÙº”gÝ;_Š•¾‡²ö (eâóR:Ó·XØœ³$o8h¡fs#Ýó§19R>×):’1]„§Î'DdxAÇdØœ¶(ô¯©Þª!—,,NUé^J¥†p%4¥GÌŒ ¶a°^çE!B Ú Ô8,\ÂÏg5‚%tanµîâ “j¸œ"ºA¼f)#=oª^ËOA‰»¡L¬;–i+Œ>*oQnOuWÈç­ðFnRœÈß [ýœb#£òªø,Ñd«ŽÓÒß3z¨¼,Þ‹5¨(·îoT…8ë9+kƒJžõ"s*áÒJŠü ¬+Н8îu…nµ7„8첕/„€w¾¤sÝÑd¥ˆ@Ë•òíNÇÒÓ4f¬O»Ñ\"ù×EÇ6-¾ä!pwXÚÀzÓ¨üKãpF´-Ð]¸ý® S“4~Øca‹ØñNÁOKÕX¾Oã—c µ Ø^×2£ßÚ>$ÜÄ–K9Ïif#eaÿ½¬ Ù§³óÑEžüóÀ†½V¶ßô¨˜ÿ%Á±=“ñE.mð¸”Aïb=´´´óòR=ü¢ƨ …ä,Ó’†+Ÿ§H‘"r=G—;®§#;H$‰ä¾!EG"‘H$Rt$‰Dòè!{¯=f¬h—[^ÉÉòH§#‘H$‰ÉC‹É¿×q<&³Ã¯ùÐúº‹[Æ$êÌfëM]ƒm30›mîÞŠåÌöý\NÍé›™ùñJ.Ýu/q+—VŒfìªÐÛ.­…ìbÅòe,[öëŽfÏÊ¥,Y²„W$JËÌoܹýœ²õÓÖ,¤¥¥’šjÛÒ0;%n¹¼‹¿D!‡¿H'dõšäßG ç¯3Ðg4ç _ƒ=,GŸ`ë‘ü·Œ;ÑÂV3jÈ2‚3aG‘X¬.e}mcJ òÜ„i¼ZÒàЈK¬3‹¢K¿£s>KÜÂâ4L{÷ZýúIvm §Z·z¸2´ÀŠÅä‡>lF÷ë$_ÚË~··n;ýŒåÈ·Œ_QŒÅ73ãb{*ü¶‰C+³kêYJµ®A>Õ.`A¿ÍbeÃEŒHN“‰Ñ0N"‘¢#‘üCdã§Û·œ\…vå “‹òrüéôÆfÅ£¥KäæúîoXLUÚW±iv Ä·AOFVŽ"Þl°ÍÔû+ö‡Ð¹__ʧk–†Uõ$¯{ºÐ™7 ¢fÿýifd+%ü,Aê»t\ëz#“×Ãh8o˜2´é6X9·z)—Jµ¢‘óÉê 윿ï·¿¥ŠHƱN¸¹-4ž´ŒÁå/ðeÏwy;lã{·H_®@"‘¢ópÕåpñïï¹T®3ÍŠ²~}‚ýÑÔ.ësW“'Þëþ7W×\ûc4ãã»3­SÑ[ÏD ÚýéŽ<õ!=ªy¡_ÝÇŠ_eNëb‹ohóZ#ЍÎ_;Êš ÚU&—bOçÈo¿‘øä«Ô+].S ܽÄÒðA{pîRj I¡Á„Y¡”áÖà}qõïD•ªÈÙßVp:|+bÞ`Ã’×0º¸`´¨ÙÜ çVÍdñkúÒÔ¤]ä|D<‹§&’;ý:ièÅŸãÃ^ í×MàÚð~žÛÇ1ÏÎ~Ž\?ãçw‹;îW «ÞmÆî›”óvÏ‚jYÓºÉéËÅh60·pj_1´ï¬½3¼´™xKQ^>•ܳ?æÕ&_ñÖâoéYÁEF&‰ ý:;~ÎÆ’¢‰2{SÀ×Å^}R±9ëÖ‘0ôušÝÊN­äûÀ®Ô*ë-aƒV'ã‘äÉs“ZqrôRÂÜÒð~v£ŸÉ—Xîuÿ[H‰ázN³÷*^TnZ”¹#FSxþ4ÚÄîfÅ‘<ŒTÏ^Íb=ÎWÃ7Ô)«è$îúùûÚЬ}ÆIáÏE»(Óèµì“z˜eÓ~£Ìg ©­]ýn˜KÊYÖ,ÙÛ£êã£hD„„‘t.c‰Bt|²îm>ÿ-#??GÉÑ_2²S~®-}‹Ígʦ‹Ç•l F* IfJtü;:‘Ø„Ÿ¦ÇÈT08‹v<ÉîÞÿï²jãî%*ê »À¥ÄP®G%8ø"ÁW®3uLYZX²›t´8¯÷  ßü_‰¹¼‰"ïôÀýø"&n;Ê_G}hÞ¸8îe‡ñçßå1xKÁ‘HÑyëirSÿ‘Ôׂù±ï¸uÌË…<ðEIÚć?”¤‘é aaö®êU€‚¹Œ$F'àOKÜU¼š¾G£MŸgŽ%ÜZWä‹hsz•"þ½§ýõX¶ÏÏ/ã‰÷ÀÏ×HZÈ)-Søà¤»mLQÖÐÚ3â½ÆéK6{Vîɤ~_³92ÝUùÌOñ%ì%oK4>ÆÃ™çœCXhëVœ¤Rë®D\ ÃÏ¿0Þ—ösȬàùç,Ut—4êP—BLÜ·Žc•:Ð#JÌö¿á‰&ÿ­‰#&Á•¨Ÿ1ºÎïÌleâྠƳuOZfÎgYͰ®s1uhAÈô1üÞd ÉR§k•Û<´Ð¿˜5}=W{¸·„íå}åJ¥Ð£s0O•rËÜWó¤AŸ±žü>2I¤è<èX¸´l[jŒdF‰ã|Üãg*OûŒ¡›8â®RjãŸì^·„À ¯ð\Ûö”\Ì·¿œ%¼ð(ÞÛÓŠ¾EoŸö©•3øæ®÷·©N.ö™Jí#3yc²‰þszãÿG†Äã“gÝ}O=†ÆYV×R)ÜòlÅzZÁrq#‹ao‚åd4Ê(Ì.eÐGÁ4kÙ2W71wÈn*͘O­?v¯S?šVsG·^à§ñP¨­[$M=É÷ i>ê|ôP~únUÚýÆ4öÕvLœ˜ÄøQ³¦h}~9Þ€÷Çææ‹ß6ÛâYG•W gÿ˜æòy¿Šœ2=K¿ÞïáÛšéõÝ ‡êAµh{Fζ[¿ÔÀ• ë~‚æ~ÃøâËyuR^†Íx—Sé·À—¾K9ñÔ›Ãl=åö³vÍ5ýé¸~æ:ÑÆM¬1eT§Z¹n¥HÆÅÝ_OW F7<\ ¨F“ø®Ww7Œª ^>X•ì*Z†ÒÔbß¶•¬_¾Ž(“ÈDÜ)‚Nz2¬ïñCs:ŽN«|r‚K‰ ð üõu*¶^˼ïÀ»t<ß4™@—õDx¤Ý[Ïq2p~ÏwåùJ"¬TïM“#É:äçï=Â!(·¿,ž¿—ý3q­ÒÁ•»0ûçöL²൫l5ŸÐ§ÇQï†à¤pyßvÎÆ«\ Sµ^yrÙŽš¿"?i/ykÑø™â)âT5d,ÑŒ.ÝZ'Ïêû„Ûù‰OwW£÷¢ZTrµ/‚¶ÁeŸC¥ÂY?a8‹Î•fLA+Ë&²ÊóßÉ!nçVÎWmËSm0%ø3ÖMþŒ°çæòLcÎÏÉ’ ­èUÚö(ºQéݯXäøf^Ý)Õp:yfÏ£šÉž–%Í,ŠÚ-ô¤Ëlý~:çþNàØýLa\y‹ž~Øûw‚»òúÌ™”u<ñÆZƒXòå‹f ÌÙÙûrí˨m::±o½JB§Ÿ‰°¬ª)çŸf±8-w‘9Û’ ¹s‹káÕŽ¦”fÃQêúýL§Řôqiއ•¢Aåÿ¥íP"y¸xHG(x—ëÄ' §3ä:x¹ÕäÝÉ‹ùòõ4Ž;ò‚ñ8'’®éG@Fƒˆõ”2”¼zS¡(~[uŽsk¾äóçY3g%'‚6°hÍ9.ü±†ã–{Ý_#jÛ&L˜ÈÄOæ°!¥.~Çgœ'hÝ,fm¿++˜6Q|.öùrKf³EÐóü2ã'N[íç¤xåÃãÒVö%æ§TÙºtìÒ‚b9Ý!k?Oü—A,Xtœ,ëiQlׇϓ›ÐR$ ›ÙXž7»Õÿ i ?.>FÃ›à£æ¢BéX¶]nÂè^U0™ÊóF·|,»ŒË7â4‡òû'_ñÒ Æ¶ÎãÆ*¾u;óFÝÜN®FÈÊ4«÷SNUãã9=œ:&øÐìý>8z•g…põ®íw#¨+ÞþT(z§ ¯«XyŠxÝès͵ð(|óç³_O%Íä…çÌ(ýl'jg3ÓPJÈ~ÞªR" ƒŸbÌŸ¡d,âpv c»õáÛ r˜¨D:VtL®.è1±DFgÏî4ª´,BÞ’¯1qlÊïÃø~ÃâÍ•éãcZäq"ýÊ“x‚ÍêÓ®}Ž«=ÒÛhÔ~mÙ7&œWZä ˳U{Ï)[ yÇ$z¬¾JЇJ¹wgñQÛ‚ö@¥YÑ]¼ñq/F)Ë!N|¿Æœ-èF¼ ªlý ACç0¬qþ,¥óÉŸ™8n—mf‚.ä¥ùˆIôªÅ—Ý>æÓZ‹R-£(‘ú=fó„_"?½ýŠK9^Q‚ýs»AÃ_îã}Jâøü¡,òèÅòÆ&‚~Á;cƒé¼x1÷%oÛôüé%Ì«Ê}ŸÀÖcع›/‡æG¯|3¦‰½÷™ã¾ç®ù"/¦_¯°Ì*ÊF½øôÏIO~À‚ïðRŸiTZ1œZž20I¤ÓyÀÐI‰ºÀ±#G9v:Œø„pN=ÊÑ£' ŽS(ùLC"f~ε†-)î8Cóå Ïnâ§S>øæòÆÛÛ÷ØÍÌ\œÂ+]êPö•w)³a«ÂLéŸyçò‚c¸¥º0âØIÜK•Ä÷‰.Ìú¼3±³z2jmÎk¶Ëw`Ȱa ÖŸ6¥ÜÈWÜ/¯šôÑŒðÍG²¬<éV8€|ÎE ó96n5ß×{·o#~-ΈAþüÞ· ¦ÄÑå›Eô¨è4ÅP”צ&`ù`¦ï‹âø7}y¦õöÕ™ÆÊ9/R"›Î\æˆÓØ»‡3q®¸›l[.]pÒšœLÜΩ \/͛͘exUëË7_¿Iʼ—iÚqkB¬Ùæ×bNÚoÎquÎk[¦37´-/{üÊÂKÅ)té8EÚø0·íx¢žnF£½ê4üä^öžKÄÍUA…‰T‹JÙ7?aܳþX£òÞÂÑT¸ø;+~?DŒ«FÅH±Wf0XKŠºÊ $‘Nçt:¹*¶äÅŠ¶Fj[w¤Ð¦c[Œêá*J«.(Vy zݨ>q­û>ó\¦óÆÐpj\5ã–H¾zžéŸkÑ‘ÄæÊcüÆÿ²ÉVòшß)õÁLÚŽdK|5zQ åëÁcéR=wV¥×­\Ýý_ýR7çÛÇó¸kÇø¹îŒï÷#,³™ÐÎþ¾¢qquÅE”äMNºå^µ3ªÚÚtŽçp½„3Zù9‡*¼~_ï‘Oí÷ùõ/[¯½8wüg¦7£d66C-ø,ÓÖ5GqÂQ´73[–¢rᜣ¯¹‰O§ï¦`ï¡4¾i0¥±L>ø¬3-Z•Äù#÷Ò™ð[ º Æ£°!›T zz} ùs,‰¹—yžIŸV¢N!^ñœÛy÷'«Sàµ0™Ôé\^û|_fLy#JJI*µ?7¸V¢çÌ é}á<’1~øÓvç¥øQ½™ŸŒH):*©Ñ—¸pñçn'8$‘/g_£D…:4(»)#¢ð°X¿Í’Ò3è\ÚÀR Ú}Ž /”fÕ¸±ø\/FëîF¢u°»Q*ˆ§²Öù÷¶¿9ŠËg2yy ­ÆÌäíê>ÄÚ?2ù·câTfèÊ…;ÐÀ›ÔÉ#ñË9‘JèÎÆ¼2å]šdÖ#a(Ô‚QóüØâÞ»*}¿mòÈÔTñ: ³õžvÝáõy÷*÷½p ¦Çâ\T{ºÙm÷4¹9º5¨Hå;=´•{±xE¯ìèS“v­ròõÞ¯Y1ǼúUmC«Ûœ‹{‘ÚÔqJ«LÃZÙ u/¡nÆk¿ÇÌÚ·¦•§Ù@¦4“H"Eç!A#rËb¾:]”æO¿Çâ.…áÊiöþ½œ‘ó©<`Ú"­t,C>üŸ©sf ŸœlÆ„éµØÚ«žùÏUsøæÜ .‡Ôcðè‹üº4÷&¶É ­Dl¼—ý-\ø~ÓÏÖgØW©•Ï.¶*9‹Å^Af,Ô˜Á kp~×YÜüt¿Χ1o1mI1N-žÆçý_廂EÈçã&\Œ*Üš>˜êVŸÒ©"'åÄJ¦MÙçhÓ±ÒÐéŠXÃö²jã'{R_ͼNV«†f,O§¥ 9&Ÿx‰DòßÖSÙÀ>£”Ái396›EpMKK;ÿ ‹PÂ¥Íü¶9‘*íZSÙ©‹kj|“·\zZ"‘¢#y<Èi¹j×FÃù¹‘“œH›®a¤ø¦ˆO Þúbœ×›Ñ®°uÕ/ì8Ε+°æ3UÚ¶.J#úÄ|µnWŸbE­.´®™‡‘YUP.=-‘HÑ‘™·^9Á¬[h:±Iæ¼wjAžê6ˆFW—pä¼J¯n•Øúí§¬:„i[ïT)ƒ¯¥ cú´Ç²r5JºèÈ¥§%’ÿ Ù¦#¹¶Æi¹ê¿®¢ëñŽåªÓ—«Î=–“òKÙÑ o™;}Ù€€×ÆñZð8F¬Ž Çöz= S©æÔ/^š6}Þ¡M%¿lJVŽ¥§»Öįn7F¿T‰¢ÍÛQ;o ºŽ{*ùŸ¢× 6Ín^ÐŒ¥§Ï¦Ò§?ðñÛÝø`ò>ÐÿJ/ñ±x=±[|||ð”c%ét$÷Ÿ»_®:ã ׃{[2oyKò%|›þ¶b(ÎS°¿óÛ|ìõ5£›àf]PüªÓæ™Ü\^x‡_.=-‘HÑ‘<’’sËU ,lžÒƒAë ѹ‹?Ö® 0þ1±¬ÿe§°Ð¨ÇÓ¬ÿ¨#]ŽMajï†49Žty-S‡‡Ò´ïsN‡×ѵö-ÍÊ5'ÉÕÔ/ÓÞË¥§%’ûެ^“ü»ÜÓrÕ)™ù÷ÔaÆÒñ4ÏBbb"‰IiX53)¶×‰IèÅ_áó•Ó©ò'[ƒ.±eÞÞîý'o¾Ç qƒyºÓcmN#Íj"o‰2Ôìú9ó›n¢÷°5\ÓåÒÓÉëtŒFiˆ Oq› ?ÓèÁpŸstïËUW}o9[úûàckƒ®+¶¸õ¿VEÒöõ7©tãQ,@ï©õÒg;رï Þûb5üççT/f¬;Œ<(ZЛ âÿi¾ã”Vo®ñ›\zú?ÇöLÚ⋜ðSŠŽDòÿ•ÀÌåª'Û—«^p¢C¾YDç ·.W½ïåÁL¯»‚‘µ…àÜœRš™4Û`Ðì£øÒàÕ×nòï~-Éâ… q+i²W‰¥o©ýµ•¼O Ö±ôô(_ùܶôô•£X_kÉܶc‰znžÓÒÓíKO7WЯ;-=z‚ù8-=½Á¶ôt…Ì¥§ \¤ˆ\zZ"¹õ'{7Kˆ’²\Úà!w:¶Qü¡¡¡”+Wî¾ Íd¥/Wý÷|f¿\uºHII_®:»R½…KiÕ§wY!¬Ç_`ëú}„%kY *†¼TkÝ‚âñ8–d_zÍiéi]qZzÚÌžéoñùµ3æyʰc͘úv%§|êDoœÅä­î<Ó­ÍLòA¼NŸ>¿¿¿t:âþý3ëéHÑ‘¢#‘HÑ‘ü¢#;H$‰äþ “¼‰D"‘¢#‘H$):‰D"‘HÑ‘H$ɧ#!<<\^É¿N¡B…äEHÑ‘È` ‘Hî²zM"‘H$Rtî=!˜ã‡/rÝz§=­Äd˺ulÚw‘Ë}Èœå*'6¯åÏ­gˆÑÿ§³#)ìÇ.ÇgŽª× 9yŽËÙ½žh‹|¨%‰ Е#xã^,8b¾2qð³·xqзì8y‚?|À«§°ýšþäAÇbÉNñÌù´'#×\æZt ÉÿÓ¡Lq›×}<ëyMØ3‹¡_žFI¸õýa Na•ÞU"‘HÑù·4ç ›·iÛÞƒ­Nc!?q+ßþœ‹g1bÀ@FÎúž9­Ãøms¨cJ+qÁÇ9xøQ)u°&ŸŠf¾ÆÅ£G85ÍÉ4Å|üGÎá·;ñæÔ-\Ï"*¯a×høRZ?]ûlûÙ'Å~œä+œ>LâMâd*ß…¡MN0{Þ^SŽóõçÁ´܆"o}¿Ý 6äÐî¨GDDÒ-+}šÏýÀÈ©›¸z7bl‰ãÊ¥ ‚ƒƒ3·+Ħå°ûÙ/xý¥ñl»ªÝ{~­X>jaå²}ÿ£C•H$9ñPw$Ð"6³UoƇ¯DÓÄN ¬FåìÎÈà†›õ»ö„Ф…?n¸P¦Ë,¦¦Åh¶NîÇì‹¥©p½c tž=çR¾æqÁTñK"%'Áû‚¨=þkúÝËÄÞŸVùI †lâ/­ ¿ŒoFnç顬álùj>ë/E 3k›> nãɎ쎣,¥ß„0*¦ìçd‰®Œ€g–<¨õî*ušÌÇ ¹ˆzj  Ù¾ÿe€á»GÖKßÓg¸;³–tÅ_O$:*Ž4[ 7ÄmÇ<¾}ª,¯UQTrÈ…y×ü{çEÑÿáçîr—^ „–P”ŽôÞ|E¤‰tPÁWŠ(¯ V¤(þEQ± MQjADJBK¡„„@€Þïn÷{¹ —Ë%!É<ùÌç6{·»w³³óïogg^ÿ!2o€&Yr¡ù€ÞdmßIŒJ;1šIÈB §ËšL *ø›‚ú1¢Î& ײòÛ´ôº±»¤$"öýI•§šõÙtÖܸН'Ô7•@PÆEGâúž=:Ì¡ÚC‰´—g6…† T¼®™8ç ³æ?AÇù5hܼ%m»?Nÿîuq>¼‚ù!Xöõjjdâ7Nâ™÷·Ñqœ©Åyƒ:?e É¦¤n~‘¿„Ò¿æj~o8ÝäpZ¢3ôÂóéEl½ü$Cým,†¦N›Æ•ÐYHÓæ3º¦†ìCo9òàPÕx„7÷­¤ZåÜs-é³MÞRƒ:O[|é8‹j¯4Â)°c^Œ¯m–é¶ãë\!uöÂ;!Ѝªõ¨ïë…ådê¯#,»ÞÊÌŠå’ìOo]n(óä'#xùçdt–) ôñg9—ãσUMÒ¶{Ý”“¦õ/ëV0ï§«hœT‘qáèæ¾ÄaË|8K¦í§úÓ ˜ýh%ÑÝS («¢#ßØËžk>TØû-ߘ+àŠ$í &rR=´SìØ#N~€võÊS±n[3¥ž Ôô}-˜¨þŒ›NÊdaNZ”ºH¥u&OOT¹S¸7éD½÷?`üð xê¼h4íU«pëðZãø8Zå8®n.9&W´õ=~¬8/Çeì”÷ÙÞc1½LÚW`}÷E¦õ÷Ë0ð2‰;VÙ~,ÃvÌüšX]!‚o"×󿬓f§“;ƒŒ,¥p^W…Ϊ\Žúm‰þýI>~„£.•¨[/ÀôcãÑV­ŠÎ½Œ!®b5ü5¹E¸Ñ¤oÙ>馻º²ê†_ŸÍÆ ‹(àoñy?Gíƒó,íÿ_\æ¨!1e: 1ë° ”ˆŽÌ½{Èé÷¯¯–ÛúÌ9Œ¶ïB‚ÏNàÁºùUG“ö'Kf|OÒ²yô T¢óÙ\ޏ@f•.Ôoå‚ëœßÍhÅÃnFböî'¥Åhê:…8 Eÿ´†K½Þ勉 ñt*n¯! UK\g9:NÑSÉI{ø`µÏ-kG…òM˜Þeó–¢ý¤L‡ë;Ìn]„€ý›NôåP.í-~îÅ+›»à‰6¨'vÁÕÉÕ,¸7cˆÎx)§MšõëèØ$‹ÐC«Y»¦oí~ ¿ØëT¨ZÉìb±Ñ$UéIùB4!;'‡œ„h"´yÎD¥-Gµš•°FÚ¤¸cì ‰G¥Î_®tþ5ðöLær¢Btîü 55(ºuëÆ”)SèׯŸÈA 9‘}»Si9µêÍp‡® ½:g²p×yÆÕ­/ÄæTw4‹_XÄìç{³Ä³"ÞÙ ¤ø´gú¼§¨þ@s{Oáµ!#©î—Ayãíö¸_s$:*ÊÕ"}ÞžÛ#‘–‘^rãÁÁóx{d#Ü‹Êèú£Ç-µ(ÑIãÏeŸ’:躗WjKZM˜BƒïðV’ŽŒAÚ­—U§¿aâC÷Áì•êJôžõ.Õ?CÎÌÙôRÜ`† •ÏÆ—ž#ª^uŽüY™±MBYÛ‚–±§húåÙ»˜/#5tž1ŠÑ·pøûcf±OÊ0p`.cÿÔ %]ÀÃè+¨;ékfvpÎÊŒ»Fvä>]a)Þ†þØ_“wþ\D'KÖÈñD_ŒFí”Á__­&¥Ç8ºV4âìZ—êì=— ½D q‡(¯Í™3‡™3gšÿÂ#°- jSÒš’‹)¹›’)ù™R€)É¥)[N¹~UŽOÉ–%»· é7äk ²¡¨í çå•C†È+Ïßü””ü«<õ‘YòÞœâ}…bçNž$™“Ñh” ƒ¬×ëåììl933SNMM•ÃÂÂþÍÌ–SþZ(÷ëûª¼ê»Ïå¿DÊ9Q+䧆¾+¿ûÌyŶ·åÞ£×Ë×6•Y°]þlð@ùóØlùÊÁŸäÅ#ÚÈ“¶dËrúFytǹòŸó6G>ôZy̦Œü«QòŠ~Ýä!ú›ëLûy¾ùËòGû‘®É_ é%/:¥ÏûÞÉÇÈí^Ú)§Ë‚¿ËŽ;ä-ZÈëׯwøþ™3gÌeS)£JYUʬRv•2l-Ï‚’ƒ¢Ýð³èˆ»EW´Q•­€«J‡g…ŠŽ`nåñ»U\JãGÃÆYÌ{ýuÒÚ×¢‚6“Øc»ˆm7žúÅÌÉb§TCÔEÞœ ðЕPEn"ËÍ·ä+Ør„kç¢Y½ã,ׯþÊï×$“÷s¢r«^´Ü°¨¼0]¾ýŒP£Ææ&¾ŒQòÃÙÁs:úðulLî·î´h«ðìÒfï~Ç–ë]éï'¦Jþ;tïÞÝü* „ßÓ¹WxÐjúw¬‰>Í™¨dªÜhÒm0Óªy‰Œ,€3 ŸœHC³ÄsfÏönÿ¹ædœC}iÔ¦—jÒ·M[Â;ð0?Øl›Í¡¥ãýÃUŽëЭÎCH*l:>›þqÂ÷OU±ëÚlÿüR61‡¶±/$’ðÓ!üuE…ï†MTéÚ…3‡RÃÛt°¦ï0tøÆ¼ïƨëßóCò@ž4‰ŽèZp{Ûú‰„SljÊ.Î÷ÉàĺÕì»*Ü @p7 w áëÞæ›“Fœ¬ýUÎDlþãÇX8:†ië&S»°q4å4Î:FŽ}‘R9wð(†¢TJŠcÝ”~¹‡{{™§5?²êþ'Ídíâ^T*ÐÄ’ˆ;´žá®îfÅÊó4Ÿ$sÁG•×&ó¬ß“Ç›U­3@ˆŽà~/Zuû §ó8–*£ònÆ€Ç.3kR*¦õ!àì‡ÄùP©È›uè´N8)ŸQ9¡ÑhÐQûK×v²#¶£›$ræÌe”ÛÕžJë™ÿÇW{«Ó§²J¹q€¦\ujUvC…‘ ›—ì? dI§üûÓ^¼­õyLˆŽ@ DGP0ư{},íW÷`Ûsû¸Ò'ÈjaH;y‚+‰×øâã+æ ]åú}Ft#0e#“û.ábEtr:1çcp~î)Ö9¥}ñ.ʲV"=^ͣ˾煼yÂõ„­ùÌ!ïÑ&9„O·]Dm±XšÔäd0;O*ÊdÄ­ñÓ™EÇ$k:¸~æ ² ªŸñìuÔ8‹ó(Ñ”ô— ÙwœË9*Tæidd)ÛÓxúÅÉ´/çoö/ÌXÎ#&ÑÁ˜A²swÞüþUsŠE}âÿùjû„² ×bª+ËRYû\?Âsn&óÄ2^ùLÅ~ Â¥FÒ·ñו‚÷gÔ~èѪªÅ¹¨ÐêÜ lÓ—'ZœÉ'gïI$‹ÉÛ!:‚Rº0æÃé\Ë–éþAeêèBªã §¾à[ð‘z=SîËu£©9b6Aw8GZVä&]ÅE§šyá7I2 É*Ô¶Š!KŒR¾É«&‘ ûåS–S;0j‘ä´–Åy„èî{¤Klûp%¤jòî‡È‰Çøù˜zuCF¼Ú¿k§MPß“‹Y`ýŒ’2.rdÏn¸HTj©v³Û-Š‹é7ÈT–=3 ‹—rˆÇÖ÷¿A5þ]FoZa=8ÉÑ' “ì\Šiï5ªÑ½m t–ÿõz-M‡¾Æ¼Nº?!{Ë‹ >gDÈŽ@ DGp¿£à‘F’½x'5®HêF ~Ê‹¿–ÔdÎ[}qA‰¼eq1,‚¹)åmÕ!'¨ˆ0²¹J|V†ÈpÂ\¯•ެ,»es9]Æß|œÊ<±t3ËÑ|ºÉº †0¼öfÏ9³ÆÐk|°½K#‘CÈ—³xåׂNGº­$q.!:‚’áv®sü÷l:}Û•-ÏüÆÕž^ù\GrT ¡É&74ÿؼ¥òiJÿ1ãÍ÷tÒ~:‡ÿðqæ{:Ië/P]YVîéþ™ð¼ T¨òÙ›ÞaÅ1ÐÚj‰Ñ€gçé¼9ÐÓ²BKë¹[X¹û'âêO0äìkD††ÁÕÌbN+Ë‘\˲,‡œ$æož€ô³`›‘о:t:gtŠ6é‚xæ½UÔe²LÊ+™·`#Ç­Ê×SN ”9Ñ‘ˆøf*³Ö]B²Y½v.ìO/¶èÈiGøúýŸ8[ÔÈ'Rþ·Œi·±Í=Ïž(6¾µœ?,ßYŠÝÌüÅÛ¹ñoßžPÐ}d?šVmDÛ¦!Á'LbÄáÿ›Äók‚˜ýJ;™¿‡–3ÆÐ@«B£1’™™;è¤Ê§9OöoB9R9´ö{äa«™Sq=m½.:Ü%Ä že‹^s£eÖ¼õ»¸4t8ŠtJÑïÕÑyA%‹’J¤Åã• œ«Ö¦V%7ÔRÉé*<‰¸` Úƒ™ön{\n W¾m*ªIŠ çØÁ£<MíÀü|ì·1’ƹg ÂÏY•û¬I†O— .†Å Uy  –ÞQR:W""ˆ3”çºÕñÑöos¿y•o 1?xŒýb ¨Šõ=CÊ=kÛ¨nœâ`bKfôæð®®¼÷ÅS<ä™[Ù¸ÔÇÊ'ÌÇt޼Ú1~a#<Ò” …6‰ôÄôèLê67^T:ª6¨‡lÎOÕ;?Ç+ͧÐצ¶!l_ÄVF£-Ï€E_à^ÏÛôI™6&·¼tÃVÉfñÊÛˆäù“ÛV§M¯ÍüGÔÁ?ÕÈ073”¤±IZKR:ú8çä䜽ï¾yæ>æ>¾’>û‚&Õ‘¢>gÔBw,He.ñó¬|—ֵ݈tÄþ¾Œ§>â½æÁŒYÇCYq¦Æp^Ÿ¢â½Á'yvãi®v°Í“/ÑõÜ:¾þ9 Ÿ.éÒï×ÙÃÔA–m47Ø·h*KÎÑ¢Z"‡jxæý·é›ù)Cæ_¢aù ²}݉9|‘æóV2±v8Ë'/$ôÖÔ‘#Ø¢"ã—¾F7?»ÚU¾Íý6v½¹©!‚M‹—ò•ò;w Óãéニ‘oœÇßûKV}-J½à¾áôéÓøûûçqdJbjƒ’N§«ezɶ$½%m’\r;¸¶ GÛ7ù$8†a#«q1x.]b2'ÈiIÈOá£þ-ñ5ý/=âɰ¿×Ì”!Çq]¶šÏ»AÚæ›•u†£m.ÒrÙp"|N—_åqoÓvó+dþ”·C;òÑ—ÏSS#ÿÓ‹<ûá:Ž6µªÏÞ öËPEMê//1ø×“Œê¹‹_ ½Y>s8ÕÔCŽî䢾`Ðæv÷;¶q‹›–US›¾/ #üÀ*j¿ô y™~s„ò c"5^ø¯¸*¯Ý.4ïцÿ-&úÙ.ìÚçJ×würCkõh_{_½þ‘7ô¨ —¹œÜÙ uå¶tiàVÐòºMaÇ—ˆ =¦¨É é”oò0—%ÒXM­Ö´² kìâí‰>9UÎtɜΈAТq=ê·èÁcM4{¿·ºU£´5ͨ_A [)„èܹì4ëIÛø¥lßkà€{WYÂTÒùÕLu”žoÏe|_œ.Ø©I¹°«®{QÛ†0ÚŽµ¯×cpÊ} Q¥Õ‘w·Ee™ѳÓ¾ÛÊà°ã„„c÷gÙý _?_;_ŽÛÝo±p¶ÙN î%»éëÒŒm¯óý¸uíD‹˜¢#‰ªÖ‰^õ}M­ž¨à]„ÝbÆíB·QépÖ¦“š&È:ÿ-pýk/'2”ÿÄü~€”æm©ãðÁB™ÔK˜óÕy|êµ¥×  ÌÚ€«.cø[ûudmt¸˜¾sšÝwVÄLL=.¸_PÊ¢R&­nÜöU œÎ}Š3ÍzvD½%–î+ä³¥k9¡ßÌaü„CÔtÍÂ¥QcšÒÉ”Ý ÝS¡Û¨ƒèÐ!•W§Mát÷ÁÌh“yõG2§×4Þö<Õ*dp•¼¶°îWC)ž»R÷Ç×<Ä—ê¾ââË1fnëäööëÈ‚ÑÞôgÎx‰Ó]ñr{Ë~µN¤§§ãíí-J¾àž£”E''ñ|zY£äö^»u;Šô„Dôn¾ø¸¨ÿæ6Òn$’ãìC9‚CÝ3IÈqÁ×ǵÖQFŸvƒ¤lÊùz©ú··_ËÞ-á6YÖ“Ÿ@–Ö o7ù–ÌÌL’’’¨U«V^ S ¸MåñìÙ³øøøàêêj.J¯5%Y{­ ×Sò(NïµR,:e“›¢“û¼‰$IæWå"WÂ)))¤¥¥QµjU<<<Ðjµ"Óÿz½Þ\þ._¾l.^^^f·c[Á¢S:EGxÛÒg]óu.°ÿßÝÝÝ|qÇÅÅ‘m"E˜l…ª(1»ÛÎd$\'ÃÙ îÂÅÝ‹rWØzë{J¹SÄÅÙÙÙ,6ŠÃ)î~¥!:¥¼0÷š³\øÊE¯ŒrÑ+­KÅýÈyOàçœ[dþ‘ãUª*NüŠÃÝ<–½{±T¸!:‚Rävl[™Ê:åb·}Ï~³ Ë•L§#¸_Ž­ðXïÛX]ý}{w$({¢#[’ „W¶Ã‹((.Çê|¬¢âHXþ-±¢VºœŽíqlÅÄ*0V·ãè>ŽœÍ-5C82RÉØ Ž­Ë±®NGp7NanG„ׄÓ5K)«lCiö1tkÈMˆàß!{7c-‹b€Ï2á~ŠŽìÀ"‰ðZ)¹øñ° §Yïíܪó€Á?!:Žî×Á)µãH;äÂœŽ£$‘¥Kx¬bcßZˆŒàߟ„HPâ‘neZŠ ¯åmdj§™*+‘Ÿ¥Cxì/|ûçz‚»-@BpJ¡ÚHRÆ­\NqœŽ¢ZRjjê~ooïGD¶– áî¶ã‚Sú0éÄ>«f×éÈ8­IëÖ­{gĈmLnÇKdméºøíŸçþm·#(.'EщBD'ŸøhlN¼ª°´yóæ$__ß]µk×®ììì\Ù´˜š¥]øÅIÁ­ÊÔí”#Q¦Jؤ'%%íYµjÕ‹“'OóL-¶c­ ËxŸy£¶$ëÀŸN–¤µyµÔúyëö@ (ä‹€Ù‰‹Þ"8ÖWƒðä‰S!;•mvj+(²ÑQ Ñ‚2#:²Ñ1:‡÷u ëH`í&­²ì §¶qG¶‚#ÄG J—ØØëCaŽÇÖÙH£##áÁº©‹p9Bt ôŠŽ}˜ÍV|¤BœN‡Ceò‡Ð¬ìÖ9Z‚²#@ò-ħ°ÐšlïtlÅÇöƒ’û±ï8 DG Ê–è`':Ž–eN©@xMe÷A•Í:ë²ä@t@Pv„§0×S˜à:öšl'2ŽˆBGˆ@ ”~±¡Q‘‹xÂDÇ‘ã±_ïH`„àAٞ„E.âó¨nñd°ª˜ë@ „¨¨u…:bm(ÁíêÄÿ 0¯I*iÖIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/info.png000664 000000 000000 00000154152 13703317554 026257 0ustar00rootroot000000 000000 ‰PNG  IHDRRà÷×å‘tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp »è5ÔÚIDATxÚì½g°dçy&öœÐ9çî›ÓÜÉ È¥$Ф¸ÖÊâ®åP¶ö‡j«ì_þáÒO•ÿ»jke‰.—Š–M™â®¹(1‚ " Âä¹ssìœs÷I~ß¯ï ‡ †¸$ø=¨F÷ôí>çôé>Ï÷¼YQ?'~î7HHHHüšÁùy^¬ÿ¤)‰TBBB’ëäøŠTù)I®P‚tÞæyçÝU}»{å]U’©„„į3‰:osÿv$«¼õyýg Ñw»I•ø ªó··’è‘©þ$úÖ›úߪT%$$$~Iô­Dj¿Ãã·#ÕwU¤'ßÂtKÐ-püo ‰"˜8{t«Ñ­ýÐsïhÞëocž¿•D5ºe?ÿùÏ?ú§ú§²¸¸xÅëõä¹–ø b8övvv®þÙŸýÙ¿ÿÒ—¾ô=U| ™>L¢â±vµWÞA…2‰†ÿèþèÉ/|á ÿg.—[ÕuÝ-Oµ„„ÄÌq©Tjá3Ÿù̧ö÷÷¯Þ¸q£DOïöåmˆô>Þ¿Ÿ»}ûö¿;}úôÇä)–øMÂÝ»wŸ?{öì¿¥‡ût³ŽUéýû~Ó·ú:ߎPlÎËS*!!ñ›†………'0‰ Ý—oÍZPßD6ïU镸M„ð0âíS@"• o%Qy*%$$$~‚LL€¾›"U$‘JHHHü„è|[EúVH"•xw"ý‰?¾•DßJ¨¿éx;(~VE*‰TBBBâ§ð¢úSÔ¨$R ‰·çDåg1í%$$$$Þ™XßÕ´—øµÂ_üÅ_àoÿöoßöoþçޝ|å+ïëþ‘J…*!!ñ+Ï~ö³ø«¿ú«Ÿ S&Ñçž{ŸøÄ'ÞSúó©„„„į<¦¦¦ð…/|áÇÈô>‰þå_þ%b±Øûkçw-á›öÐÍu|óÐmƶí—äW%!!ñ«Ž|>?þã?Æòò2 …Â{B¢ªª>Ew‡taÒŠoÖC7G*R ‰”2}æ™gðƒüŸþô§ßw%*M{ ‰Øœ¿zõ*þú¯ÿZ˜Þ)õ^C—§^BBâƒB¢ûDÙgÊf>ãsŸûœT¤ï2½5°ôpêÙgŸ}_÷/ƒM¿öØÞÞúv>Q@©ªŠl6û‹©ÍŸ!Ø$M{ ‰_{,--½ãßX™¾ß¦½„„„„$R I¤’H%$$$$‘JHHHHH"•D*!!!!‰TBBBB©„„„„„$R I¤’H%$$$$‘JHHHHH"•D*!!!!‰TBBBB©„„„„„$R I¤’H%$$$$‘JHHHHH"•D*!!!!‰TBBBB©„„„„„$R I¤’H%$$$$‘JHHHHH"•D*!!!!‰TBBBB©„„„„„$R I¤’H%$$$$‘JHHHHH"•D*!!!!‰TBBBB©„„„„„$R I¤’H%$$$$‘JHHHH"•D*!!!!‰TBBBB©„„„Äo,ty ~u°]Ø—'Aâg‚¢(XÌÎÊ!©„„„„$R I¤’H%$$$$‘JHHHH"•D*!!!!!‰TBBBB©„„„„$R ‰÷ ÎñMBB©„Ä/ú#u˜HI¦’H%$~&éÉÿs¾¶â@1,(’I%$‘JHü0a: ÃFT›žLêÀ¦K_âW²û“Ä{¤$ï“áÏøw› ŽU&™í¬>û#8.V»§;€Aø¡Œ-è>ÏÁ*î”·ßÕÏ}|?íØ%$¤"•øå‘éOS‹oç圄‘˜Yu:ŠBÊs,HS_È@õ¸àÔº0€L{[9~eýLÿÎǧH¥+!©Äû§0n|ù6r~Ò_iÛP4îÈWÕ‡…§X­YqrMñÄ1!*CŽ—Èr0ÆdÎÓ¿UM…¯À xÀ[qB^h^7,MÒÀñè°y›ôº·Ûóº#v#v'Ó¶TgÂ÷BÍ*?¹<´=ñ~&wÞ¯”ªR‘J¼— S’sŸ;'“Aö€ÌrÇþqr¯uˆø&jóÇ­g&¶ ±ªdΣՇÕìÂ,·`˜&R¥&ÿ½ÑƒBÄ웂¤"[…HôÝOL‚BƒZ¶PºèŽ&j˜ŸÑûí‡_796VÅÎß™ó¢ ITB*R‰_øðXÂÝW¢LdüœêsCãI™…š (g% Ååˆè˜œ„"4-(º6Ù eOx‰ ˜;üºJ j<ïJ†¡£Y¬nÝ´rN,µ;†Jv½Uë@[ÊÂR߯µéLŽÕ“ª¥÷ŠçˆˆíöÊÈœ¤Ï%HÛ"ÂWHCðSª·¿T, i¡ˆ÷¢GtüÐ4ɧR‘Jü¼–½‹Ä~Ø g"1é"*«?"’™ø6ÍNzŸÈµ7$vŸDUŽ´³¹Îÿ¾ÏsLllÒ¹©´}u`@£M:·`“ÉÎÄ*bóÍ>‘hˆ¡ú½†´äkí•+–#T¥BUç§“(ªaNž#¥ŒFW(]¾çmØLðìz m¨&½Çv²ìAòÊýŃÏÁp5JD¨ë¿"©C›}™ E%ì‡NÇŠ¹UMG`¥ÃÐNÍA ø…ÒTŽMkô†?#«Òã4&¥;ÄèÖ.l";³Ýƒ9A== =„Nû–,v. «Ý…Ö³˜Åh«€@.)R£"F‡É|dM¢ÿ´7½_Waó±±”ïý>€¶­„BÕÒ““ÏE$ÏîvKÜwc8t5X…œVŸŽ{âFÐH*Ž FIHÓ^âbÓ‰ÒÓU ãf ðºÈ”‡ ß&3)<ú8™¨PƒLbÂô'"âZ%µ[½‰YMÙL¶KdÊ“ùϪTÉ×±7j"ÐëbØëcöÌ èþQöƒÂëåwC¡í¹W¦0úÁ-z_ˆwZCh·i_&‘«ß#Ô¨}ßÖw&jÓ ‘’ªœä§ZpŠD”lâûÜD¼.ᒰɆ×hŸ¬²µ€—L|RËôùD‹UUÞþ2y@“ŠTž‰wüqp¦Ñ©FªSDäI 2Á1y1ÉÚÖ$%Éá‘û79eI%R³ˆ@ÙÔ¿ï«DoóΔ\ úbŽ—È*—À|nIÕOÀ U%LÄÇ~L6©•°WDõá%³ŸîlfrÚ·¦W,.¡’ µY)š0_ߪRšdŽóO[ŸøD«Û{0»8n “xoŒg;\@Ç'rWIå*a"^"UlY´0h×DI?0ùý¬¼åODB©ÄODZªcuÆäÒM¢ôìW¬´fOøMRnªHmr¹ZL Ù()Eú›‹ ¸G*“^ ˆÀ§4±ËàpІ6€æ÷N"èDžÚÀDéúÚ$݉ޯ’Š´XqÕ¡}ÐÏÎaÿˆˆQc_««Ü†s}&ûQaªk•”Ý ÔfOø7«³¨›t2ÐR†Ø«æ¡Ó±äóGP‰mÓº/ÂY³Ewˆý] F#¡¾…Ö¹/Ö'äûv qí[K]%$‘Jü&Òèýª#&&Rš#Wqâ¼Ã¤È)Bƒ‘HšÕFL~ô:ö§ µêqÃ5—žøT§â€aÂÚ- §RÆÖñÚ³ßDcÜA¿Ö†Úè e¯\Ç`ý¤.|™™øW8Ñ~• 3ÑWoì¹vˆ@§’"pz !´­1=&½?„BÇ6>*#DÇÚíuÑkµáŽP¯•‘››Mïas^á÷zŽsZ‰p‡Ã‚ôÑ|ºK¤AÙÇ·Éba ‚ƒO™R.½Â$fsµ–õÿ€CúH%Þ"‡“|JV¥‚8É䑦¨'E©éo#S¨;•ëä‰@9 ^%û[¼†}šD¦½‘¦j  ¢ÝnàìW—A³Œ7Õ|ˆ]ZBp&3ñkºÝ0ˆŒ¡³ó°Iqšy"Pö’rt‚š~YÄb:WFiìºUQî¶ÅPÎçqtûÒ./ô™¢ñnïo 75UÕ±3 ž9ª ºÆ-"ÝÜ⬔Y¶5‰òkšXH&Üãlå8í Çnãûéªâ!‡ÊçìÁ*x }%¤"•ø Q¤Êäªg²`SVDä1Iab¿)<:Š…¢0ó±%*•\n"™ö@i"a‹£ÓîîvD€‰ôTRÕVÖk¿7‘jªÕmÀë!3ßãAµXž6m·¶WDçå;0_]‡C$j¯BåZ|VÇÍ!,R‘ ›ñýÉ}ÐKÄNä{ïÞ=˜[yœ¨ÛÈ”‰$;ŒÇ#$ã IQs hÔêÒ1ö…)ÏQ|.E­ÜÙBN À^/Âüþ-Œ¾s ö~­ë¨7êDŒ öŽ0¢Pª|Ï.V¬êq9ìqÉ«Së

5?ƒ„2ƒúÞ™óM žÄLnf*ŒÂÞ&B¤tqTEñ`¡D !"WÞ7ÜÎc¦LǺ¨¡¡ŽákwiÁp£UoѵÃ2ŠÅ*–V–ö­ÇPÙ5p|ê„ï”ó`MZHAZ\L¡b…Ë€ÎÕÏÕlEB©Ä¯>0æa–›pqJ“¨5QV"S”\Ú°úCìJ˜_Z@&“A³XAØãGk<@¢çÆ9¨¤L-‰ N¶Ïy›´]Eu)úèy/Ð7à!õyþq2ïË- ê›è@'ò=¹²Œv©Š¤“…YlŠ@Tî©G1*ÕQÓÆ(xêUD²)RÄM¡†-®ŒbeÈÕUº*]½nF:†Ù…eô] ¼£‘p©Ó²¯× ¨MKFe%—€ys^R³Õ—n!üä9h&<3Èœ·ã,×{0éøE!Ø™#Uœv5ðÔ"EÞ£íE|“Ó®èóªP~Ì—¦½ÄÊ„wÄM–ÈdÖ²Ñ ·’Ym‘)- U]Á&V‘áx ½Á…|‘Ôª ¥R…þ݇¡Øh“élõÈ”§íèìí‘ém"9_„XÖ`³‰Þ'S{« *œœFžÝBŽß)Q«MïåZûF mO|4ŠFÔ.p4`àpù'mÓ"²"¥ìŒÇЈĜ!)ÔÎnb»ˆ;‹ž¿±¿­Â!–bY„ !§æOÁïö‰ÏõCŒØŽëühï _¯ÂŽúEj–9£çHõr¥ÔA ]¤…1™r?+TpÆBtR´À©[9®ŠhP-!‰Tâ ¾¾Uë8ÁœÕaÞ;Â>ñ¼A$Õ®Õ1:ÍÞ$¥‰ƒK¤$Y>EÚÓA¿ÕA¯Ó€ž‰Ê¨q§?É1íE»É"Úžzb N„+ŽüÐâA›°¶‹D½Ð.-à¥W^‚êrÃöiè;ÃIý©iz­å#œ˜^‚o: _"2!y¯˜"Ó¼Ôwãú´R“ȺŠàеù·«ûH#˜_\ÄÈ’(b55 o ·¢COE…P,×ë˜zâR~¤–g¡®NAù&ÕZœüÏy­DøÂtg(+õãÒR>-"Å+"–7`³Jusvƒ%hÒ´—ø [ö¤Î>©A…Ínâ×Ù¹I †I‚ضYo ÑØG´Goèu`ºéu'ˆR(o´+ŽºprŽHv×ÉÔæ¨w#O&´ £Yâ2çI¥q4›í`-žø£‰,c.b¾Æ‹70õô%쯭!¸ºŒ­Û·$™ö…‚͆R(ŽÖ=dv{Ét‰¬«ÚN RÙ¯¡ïvÐ2HõÒ±gU7bóÓxõ{ÏãÌ£€t/ô~ãú)RØútíN‹‹«ð¸|Ôštž ˆˆmR›ôo.aåô.¸ÑÚtܺ[Ÿ‘x —Îrvg.ð‰íDv3°z–6½T¤dEz™·\DϤí7ûàdyVXÕ…¹d³t &¢8sîŠ!Ó€û–F¢PÝD˜öi ¼Îf„ŠnkºGG˜?qûDˆ‰©\‹Y¤GÌáÎ$-Éï†E³K«$š˜wv‰ä‡HF’ ù UUoó±u¡,gÄ©¶1DÏ#±:ƒÁ=èÀ3í§àå´}Þ\, {<-íéÄdrl±=I¢R‘Jü†÷¬œ@¦½õ‹Ô ÍQ ÞQ‡¸È\.–ŽÐ´Ñ‘%ó~xp„üî&nÜ}Ñt»×naÜn£¯‘iÛ'¶!•éãÀ ”wä g¡q·zRpœ5¤ZˆŠ…&iCçæDǧû š³3"sÀíóÀ õêÉ$‰à½PZ<É”«¥Àå™ähÖóRÉ.Â!\{ã*‚SQ4Æ=D|´‘:í§H$«6FÜ>¯7D{g×7×h&Ö6î¡R¯a¯×@ßãÂ>d¡x„k{÷°N¯1éx6_{=í“¶Õk÷Ñk¶àZ/ ²Y•V»H轚è‰J$Ú?˜ !©ÄoÄŠ:I'²è1¶ ìo®‹J$™Ñõ¯½ ß©)4-³ìû³mlllàüòIè>/ñY´IÕE¦Ò½¾͈ T¨ÃM kq„\‡k8†Þ%Òœædýã4¡°'©sûºÕiìcznY(E5Åh‘¨zÄ䦊z~U§¿Å#°Ié6Šðpê7—&ÅØi×á:ˆDÂxùùïàwÿà_t|\Ѥ:×À¬w;¸þÜ÷QO¸±¸0‡’3À|n[Cru¥Z zO E®RGÓ¯Á£»à=w©`D,•|žsF­£òÜrý©Dü&wèxIYk“4)ö£†ý•*Í|I¤X/é$o”ƒ'•6BÑ(ü#"‰VZÜ’¦á°š‡¯9ÀÐÆþ°s§Î b|TE9_¬;›m´4‹Q½ Çs¸tmîa‡”๠ÌE¡pÒ<Ïhâ†G5‘veúHÖ*hÕ«HÌN R/ïì`РSÀCÄ…D =X"^ †„; ji‚°ù–îÔ»m¸‡n<ùäÇárÜh‘bŒz}D øàF¡UCxd"ál|ZK±:F æM*ûne9=ZÚa7R©ÔŽ‚áÞ<3S0l:&"ÏÙž]§…aqJT,q3jm*ë°.òmQk‹^¨DSý%$‘J| {ˆFÉÚré~3‘Äñ ;‚§IÙm1,ÕP/”qéò£hçËøÚ×¾‚s§Ïá1ھɾHÞ¼#õ¦g¢È†HDB¸ñÚëÈÐöçV±OŠÓÖ Ü:ÜÀÅ ¡¸ÜPê}º÷ˆæ$¡… 6JyZU´ªU -q2í7Öá;¹ŒvñMˆL‘£P(ÀMj1̵þº>1ù¹³~Ð~·‡J±„ÁæÂ3i˜Ö¹ÇÎÂé¨må‘1\èªDäš½^ a¯®‹sÀÖ>KC¡cq6 pü~12E\T´ON{b©QjCc_†&‰TúH%>ðLZª‰( R’dj»€Ô…ðåð;*LØè.%P\°Ö€2¬¼Èuͧ„ï‡áY{ô<)L÷t ³O^Fí{¯Ã—¯â¿ùÔ OãÙ/}†‹}‰è¬Ü< cˆZ·‰™Æs©ªÕ:Ãì^±@'NžÆ˜;Pˆ±R>˜ƒjë{p“Ò7jعs ÿcÙU¤áÅ…P 1·Ýz ƒ~ù# Êu¤TlR¯.ÓF½ÝÂ(âéKQúL!"Mw$ŠÙ•e¤M:þrÍý¢0Û›šƒÑtz]8¦Ï‡é¥KgeªaCÙ«Š ‰{°êÜ[•Ç ¸4±ØðDpclE}¨ ”„$R‰_EËüÁ˜dÅù9®U¾²9ŸóxDG"™ÄÆ5|ç¾ÝÝ=(DîœC€ÌèsË«ªc(gf ÇI×qž%›åœÇIÊ2HʬE2Sø¹žHÑ*60ÏÀÕ£øÒ52É5üîïÿn>÷=”ïm¡IªÇÂ8¼~ Sñx¨§,‰?2¹¦]cÿãq;·û&û%ƒ¿e›õ>âpw.]C*›Áésgq÷æmCU‡ë¢èÇÙÛ@9=/Úç»À5›DñÚdGì¹4 fŸH#?©Í†ÕGYébñ±hîÐ6BAܹs~݃GŸþ(¾ú7_ÄÇ~÷÷a4ÚP{†hSçBô\ßBpu ==&¶´!íÛ©p Ý»ðAj´ÿ?‚º¿pf‘ˆôôD ó|¨€u§‹ðr©Ì~³ d‰83Qá³5šôJ%Œˆ_Ý_Ãâò ¬úç`òI¹qxs ;½:–>ôÜ>/ ÕA+_„2›€­ZÒ9VnlÃbŸ§ªÁKÛ1˜˜ÝÑ×T÷ù&½Y9G–ÈZZš¾à¸«>·ûãà”èoúðw+-©H%~Ö÷d _÷NwøàÚ³ˆÌã™ñL¶\¶ˆã¦$bTƃÙÅ“^£ü:Re"ŒåÕ˜?±ŒT")ªšâ±8¶6î¡P<À©Çµµu–‰½ƒæIÅÆIyº:=øf2H’9ïôl„蜌6Ѫ֑¿z‡ù<†!¿¨Õç*ÛE'v<„±WM©¹#•8ÏÅöäËá6„œ+[j‹nXÎÃߥ"ªT¤¿ æ„$(›†¦[1h9äÊ Àñçƒò z‡ìq‹ +Už§ަ3©ðåqW&…ËCuqñ÷Ú4ëuDHù忦al4QtE¤%÷ñæíÛxÌs z””æJí^ íR^˜ÀÞ˜‡Lp"è€×ï^ǰÚÀ X†¢N¦üÌ• È¿ð2dŠ÷§g°Oævf~¥—¯¡ sîúd^7:MQ¡4ôápÔq(‚ƒÍMÄ=>¸jz;y<–X E;€mš"vss—f—0.7QwD@*i뤴§¡tºpˆØÕÃ"7J˜òÇH‰ïŠB€E:m|DçHƒ?žÂ¸XÇ6$¾Ýô¾‘(õÕ€~ÈÓëÇ\.#&žvt.G‡ qVÑÙŠ;bY\@СãJ†…KBí’ ’Z-·a$´Hmàä…³ÂBàJ-ñ½²_UªSI¤ï£e¯ç û6ùß<Ó8ªBÍEé¢íÃòÉXLФ†îAmwa/ç ¹k˜“ÆÇŠ_½=E̵#Xæê™9hÜÙž6ŒEäÎKº K±EDZ%Ö¶¹´“T`6™BšTkþÖBç}¢‘r/îÃøö¦Ÿ¸„RážrW¤9ͤ§Q+T Z –H]bTwà §q°³ôLC"ÃÛõ¢A/Æ~ »¥C,â"µiHä=,W™ÎÂŽ"›Íbó»/`ÙD”Ÿtà›O‹Å[Ü)D¦IGC,›e¬_ÿê?à‰=Aªy :}N䉜‰¤ë{pµ‡¸tvN"‚­@åÄj=ô“!Ñ©_'¥™K΀h­auÝB¡WÀ¹™EZTÈ„ß+Šázñ¥,œ°Z‹>¶ PWfD%˜ªÇå·¿èÓIJ´HJvõÂiq¾E᪙48Ud}iÚK¼Ï>Rºù´8ÿ’MC—ÁC᪰ª-èÍ>†7¶¡ÜØ…²M$¹ye«0© g"¶&*•}œœ?éÄЦ“à"ì_uãtA;´-û T]DÄuþF&+ÙÚ¢:(¬y0¦ãPšL/ÍÁ?•„'GúÂ*"39ÄQôGCTIY6[mpRÐL,ƒüឨD:}æ üŠ*™ýæx„omÞˆ^·8¿ ܸÙxZŒÑIý©)o2ݵý"Î_¹ŒÃ€|g}R¥®L-ì>èÝÝG4'?†·®¡G‹ÇÔa:7”Γ9]ªâõ—^ ã7‰D`óç´øý¤„?ÊSËÐV§XžEyØE­Ò@‡>cÄÀr Gœtú÷h¿„1§i[O ûf‰ø5ÍY[´ˆù\PNä MX<áÔœôØ«•1}fuÒ²Ð<éÌs x„ôp4qÁH5*©ÄûgÚó¡t˜ìH­áÚ>œX6=¯'£0jðdb0è‚ÔÙGÇy‘&QbR¢dj"ì%ò늲L§{òp7/)¬ï¼ çìœè"ïïq`ðŒ¥ƪ†`2‚¤+ ˆ›ÛßqJO4“ÂÁá>ÈÒ…Ùn!;·81Sé?‡«zbadiws1¼ÜýáK8ŸšÇ©J¥ÞCåÞLR¡>CÅåÇ® P*¢qTAn@2¦ÏÇ¡{š‚”­‰ñ%®hˆÌj ífû06›‡è ÚÐ6™˜´ÎwÖî¢ìŒñÚ«¯ã㯠yò¬P†åu2Ôpúòeè±Ô›;PÉÌwÈÜW™èHÎiXœH×qr~ ¥[´]7 Ýg)ŒÙ2°à©›}Ñá_Ìk øÉª·Å¼(Õí&ò'}2Ÿ"⮣÷Êm¸]‚– ‰2ÖT(&šÜHšÓ£B¤f¹õO<Òw¦Óç’—¥T¤ï#™Nn"¾àu®òq,1åÓfµJ¤é×Ũ 3Hæ6¿~|¦©˜ÇÞÖ:Úõ¶¨57ÙL]H¡£Œ0ò‘ÙºyÒX™[€"‚hvàM„ „HÉÎ êó£qk ¿÷áO å bwkª×‹r½!ü†ÝrRqv¡!nµ{›˜sÅ¡m,¤—qp{j`â–Јð3Ë3¨ßz ôäÇqáÒet’<ÿæK¸íbîŸý¼¤¤zw± ÓâP UM$†*m¿Û›Ì|"9Ø8Brz Z8ßò´lÇïZDt]UTê‰i(Ñ 4g2AÀauO‹3 `k]‹rƒgú&h‘äi¡ëŽÐ-ÔIñ÷¡~‹/îÀó¬JѬ…*Ž4î¥"•x_ fÄóÏúÀ  ¯‹1™’îtc"'Îë­éHiŠÑÉ|qßËc¸[„7„3•€ýê=1²Ã!³[’Â2 ÓELæ)ER¢þ¾ƒæ :‘j”vÃdZ!U……8æ£SP RÄ[+1‹ýš»ëX¿u ¡ú>fχŸÈÅ àèî‚©œh-"»y÷:NåN@›IŠRTŽbû² Ñït»]ÀÀkbcë&f—–1Ö¸ÉdÏ*^x½A¡RmRÔƒB³¹9(DþnúüQÎå)ì'>;”>DáÆ5Ô5‡Å{¸ñÂ+øPö$>þ RÔ£I¦CˆT9/$Žš¤Xu ¯|—>£Ž 7€üþI5ªšj<.²D%P{€ Û‹g¯¾€gÿ¾ÿ7ÿ/2'qêñ§i[#àü"oj«N)àVwÙNZœ'/Mܤ•|*)JúˆH½DÔD’*=nØ+ oîç çC¿{‚ÈÜ'ÈNuWᬒZ&‚$åîO$P§õ&=½Œ¨'$ÊJ½Ü›ô°ÍpDî¬Â úœoJD.ȼÛf µÏ)Q?2C$¤"•xOÀÉ㬅2åj#ºÐ8ÈÂIÝ<3^=.¶wxnür­Få­]Ѧ.˜TëÌž#3x‡Hj> Ì~v¤˜,Rºç€rbøQ¡\ŠÌhâ¡;“@Žvf­$™ýŸ~šTÜÃr Îv )ÐÒ …†6D{Ø# aôB¯÷`‰[nÂÞ*¡çØôÍ9A\ÈÀrj']ID4"*R—GN¯|ëÑw Ñ1ÍÍŸ@ˆ”÷ÖÑ:â¹$f¦àeÓ›]¤T-RÑüÐáNûWNàëÅ;hTh“9>ú Î<öääd°ë#Df³‡>'"FŽ ‡ˆüRøè¼XtœN¥Ij˜T®¦ÃLÇÄùámsî­è°¿2=Qs)X¤€yüI2‘‹‰]%ò%R´´­… ö××YÈb{TC}ÜB˜žûÌÄ'ƒð蜙1Z –³Â OÑ"FÛäÎHñ±©†é¸i” %‘J¼×_›•<ò—cð\©ÃQz®›'ij9Ì,Æ“e5䇺SÑôn¾LDg£Ø¡ó7›Âp:Š£ZfÅ©ôT £‹¹ÕU xÛÅ*ŠÍ2îܽŠ|íG‡‡¸¶½…;¢)LïÞ7·a¼±)rkYuK%*}¤ïNZpKör*7§8ÇÐÙwz}ÎÊ,œ:“'›Ók*××` ˜OM‰9D-R¶[ÅVæ $ƒÐ+#D¦E©i ~ a’M £‡ÖQ Ÿ|J\䯎Äls½&âî JõšhÔÑÚσ­ëp©…1»0§ü3Ø-°Ib]ø{ C™4"RçÕI["#w‚”‘¦h:R&Õ:›Á¹Ä%¼ü߯‡?þq¤Ã1Ñe·]&%ZD‚È~!7ƒ,Ý,&~RâgWNˆ¾ ¶ßCdížôÝ–ŠTšö¿,ª?šBJÒáíGV€L 7 !“Öáüw\n EÅUEf½â›w±ÉÂð`§°‡qœHÁíèނÚí‰É¡»î>Z&FD:R´›×®ãÀ`Ç¢ibäFà͆uÔ‚ÜDÆ~Z6·?€qo÷k›°öÉÜ “ÉÍ®:>Û¥‹q$ ™±VÈ ý•¬¬ç§`y&Ãâ’ 2ã#^$ÔÎ7n¼„a¾DJ²ƒ;wD#e˶°±u§WW#QÈPØ—NFÑ*—DðFí…/™[Û2×s1¸"A‘k·Û¢´ÊÃîH½»ÏÎC£ãëô;¤PGÝÈ= G¬ß^C«ßÇ—^AéÕ7Ðß/â5:–ê'eÃ=z®ÒmÁè7‘ … g"¸~ó5”Jyœš_Åã¹8™žCÆKû7èóv÷„OƒÎ hâ^qœRŠJE*ñË"Q6å9ÀÁDJfG|D#º(=ÂLæ&Ç¢nÜÁ‰…Ÿ¥†ø²TÓÿäI((Iøp:âÆÕo<?½ïÜÅ‹D !Z^5Äô ÷6±¹y ¾<$z{}2…ƒnDl¯)¢¡úü!¬íî“ÒÊb…B'åZý¢tlí•ü«'DÓŽî›Ð‰T¹ƒ×ì'§E³iÃ`TkÂCªU´ãž?üdRwË[xê$™ú/¿„§?úI\«æñÈG? §5ÆÞ ¯#âU0wá´2‘_2 b0D.RÃuhª…‘²Ã¹²‰ )fž›p¹0|%•ct0IAê©:ã|=#ÅBsç7î^G—TéZå­žBœpí`®¾Ì…K0},rȦӨ“ú>CÊSó{áGEç-îb¥-pvX÷~øfLÚCÄÍ žRÀ<¾EŒ!Q&]Hפ©äRI¤ï9œs}Ä%¦ˆ¦¡ÐÉ”·‰ ¼9*RhÚÃÉ\ Z‡ÌÅ)AïÄ/Øé‹ù@\£ذŒ64Rlùƒ‚>âMb;é½µÛÈy£H_…[s!šË`æ‘ó¨¼z ÁTcÇÀL<­obXªÀ}n~»…呎J³…k½[8I£7ê õ±§põÍב¡ýp ’ÿÊ)”_ºŠ©g‹3¸[R¾ƒÈ*¦ÏA¯áÔ"Nß׸×Lè¤ìÜ©’Û´(4;xìSŸDþ•ë¨ÕʨX=4+æNŸ=‹ÏPâD÷òA•Ôê’É,–„âÓÎÎÁ,5Q¾±ÏB~Rí¸ßF™LWÏÀµµ¸wûM<}éi$ˆäÒ?ö™OÁÓ±E:”>›„AçV'åÊc\ "ÉB¡„B§FçÁù“«P9xFdkq?Æa}%çNãàÞP©`õÌòdÌh…SÕ蘭û†ü±K"•xÿˆT#äÒI… {÷ˆ(¸áò5(œ‡È&Rœbä/+Ðé3Bf©Mf3'Ü;7waÕ¡NÅáò‰"eê§÷Vî ×ÀR6ËÁ€Ôáí^ÂÔù³ˆq¤¦"®ûP7zˆ.­ˆ¦%F«%Ô䏨€·e"¸<…ÃB¥­¼T} Ïœ¹„í¿û{ BnìïÖQ™%5ë£QL››“ÐûésɤöÛª˜SÏíÿDj‘;9…©¸ÊÁ!r'Î"DJ×iu1sñ4"{üã¿ÿßðñìI„u2‰sô™ mغ v0„óçêõãöµWEžf•H5 07IšD^])¨± -0&v^½ŠÃý5|ô™ßCëκ2½òäd8ßtàèÿ!÷£êD9ÇIYHO¯N‰ŽþÚž§ç̘OSåV{nZâ„NžA-QúyT¶GÛúÈYá—UÄ€-ùK—>R‰÷‘FI0T oas÷{º@¹«JØj•óGÃ~2oCPùžý¡\-C·þÆôW6 5ºpsžäÈ„©“^oÂê¶EG|Åç•Ø-àóù±ÊMòX{ó–ç}æê!ÒnÅà!å÷àb’öëÈ“iïqùpæÉ§ð±O}á` cR—¢óð¥S¸xñ"†öyc€ÁÙ`&CDÁ.)¹æx‡L\WŒ=c‘‰¼ÍB«ç.bsý’3+Ø­”ÄLzÅnßoïÁ‹ ÝQL¨úÜT9$2VÑ'c=nÔk¸Hùª´í–ŽÄP¾6F(6ЏóÚqxó:\~? o\Ǩۂn‘ʾy ­ƒ<,ö9—;h’zÛë'@+]èýI£í6÷ ¸0ö0"²íÉt牣&݈„EúÕB ½FçE/Õh’H%~þPúOg¿™Æê…"6œdN,…“Í9XþÀùŒ˜¢iù½¢ÌÑæ&l3’åÚpŽJ‹ö¥)'"žʽMO-`,Zbª"ÏSÔ챞zô¢¶Žkß|F„³§/à ¾QÄ-\ Öa…¶©ÃÓ¡ª8öº'æ—1Šº‘‹¥ðƵ7póð.®o߃iŽqñ‰Ç±ß(áv}¯þày¤WæQ8Ø„ò`hZÑq/öº–rt,¸’ 2Ÿ÷Q#ÕüÆ‹/‹Nùk•}$sIø£¤Ê‡°ÓUŠŠT0EuDcd… æ6—œ’Ò«WwúØßÚÄwžû*â¹—¿‰;ùM|íË_‚×t#È!dèH©~Ì?ú–V½| ÁTù]ì4>· ,‹ëö«] ˆ@ëùZ?¸ s¿ˆƒµ´(ðÑyô‘É®µ;¢‰ ¸Ò‹§ °êdvˆTëLB4‹% R.¹•?wI¤ï—$UDò¸­>p”Š!vFÕs½9רWšP9yœÌm®A·Ó¢å•Dmw* “”«Ímï8݇s:ytñB—+ò…N*ì·ËÆ`ÐöBsi,ÌÍcï¹çÑk7°°z{×®‘S¡‘¢Qt|&tRYµV•£O8€åǯ ª ±túòÍ‘›_,Š{;›åkèÓç8õ¡'póöëØ¿yõJO,g:!z €ÌiN|_]>…kß}—?òžÿásuzØùî øíßþ4عÈ5ü¢½½Çöxarg*v#$ã1TŠEÑÑþðh;×_Å¿üôçqùéàCúmÜ»qÅ×¶6Ðɦp™;]?‡(½ÖAP©3ÉÔDk¯]G³^Ùiak} CcˆØêÜô·¤âü›Îyk ¬ G0¹ä–3¸™ û}‹Má϶_…§ïƒ«ÔŽàbÄŠìŒ/}¤ï›$=2ÝI¦ûý,lž•ÎÛKuàÞ!œ3s¼W8GS'žMÜÁ}¿¤#°9rl ’UwÊ“QÀ R¢ÛE(^lîµ™ŒÀÍÊ«IŠŠSŠNÀןý*:¤ð ã~ŸÌbŠå.ýÞÓ8Só\êéÅô£³Pë]ˆá¹EO?ýI\Õ¿Û7^Ç‘n4²x5ÑS@4_¦Eàô‡ŸÄ‹ÿ¨Ljú€o~ñÏÑ×p>>‹-Ç+ª•¸Ÿª2°E’ûÈ=Fek3î(‘þúÏÿwøuAR‚úÔg…ÊÝ¿v k?ø6ÊÅ>ôñ‚§.^RêŠyK­½…ðÒ4lÛ‚vbõ½Âé–΢c½¢=Ä¥ÅÓBmZÞü¤ZÅ”W¯Ñi"aRý<’DKÆàð|,kÂÍHhãÜ*‡Ñ\"ëB4pæž 8Ž#J_©$R‰_¯rjâ<ôo6c‰颵#aQómq…ÌVúò ?™êœ.åv‰@Jæ³AD¦s'÷&™ÅŠ6 `-fDk=ue©JVÀît>2CyàÞïì³¢¶}T®c÷Þl"‘n#ˆìÔ,‚¹ 4ÚÖhÔÃÞÝu̇S(lnâôé3xó_ÇG>÷‡¤5ѤD)¶&ÁÓÆ™•³P>Ãw¾ø‰Š¡à˜Ž•¶ƒ¹¾»?À¹ËPÚÙ@.Ä+wnáÂc—`GÃd∼¼âømÕB>¿»·1ìõ°>v‰fÉ>ŒðÉßú§(†(íã;_þ2‚p‹É§ÿýÿô/œ›ã©y¶Õ`<@ †Œ+ðœžA«Ý‚ÙnÂG ‹±UB@óàéÇž@mçņ‹ØÝ,VÑIòìw16Úˆ‡"І´@¹ ¸9g5ƒVëÒFÇà”Qb!;i“ÇOtud©$R‰_ªB}øŠ”êå Qùˆ‚Ùg3“„Eê‘»ÓÛÜ9ŸÌæîëD¨b–:וQpâºPB¤`‘‘²maddÒz'õût›{%¸O͸s€f·…SéY2UƒprBžS¸~õ{xÄý1DW—á%3a´„j½.‡ßB•Ë-‡†ð_ åÈ£L*3“v÷6h·:湈­uœYZµ÷< Åñ{„*\_Ä7®~Ó+§áÙ¼‡P*Ç…sÉ8n¾øy/çëh¶t.âøÄù‡èÝ^ÇÒ™3(nìÒë8û ó†í^ÉYúl¹t2ÅË•*÷é³Ë"µJÕà´+(a4ì#rq …k÷ˆ˜=è d|aDü!ú>ˆTçü¢Ñõ˜‰2à!V-VÜÖwÊŠTÌ´ç,E“èܨčӇAäY·{ §±pþ4¼ŽþÓçP-åa“òïk1+»Èl'õŽ\*)OnæÌ.n#‚\LøC¹×€3°ÈÜ÷Ȱ$R‰ÿì$z¬dîÿÿAì—+gX±²Éè9¦Æ‰dY —€2i¡r…ÍØÑr&VAÄÜAßãs„ÌJ‹éüϜǘ~ˆLM”QªD²qoç.>‰/ÿ_Àô|ñHŒHÇF¹¸‹ôL »Õ~ ™Ç…’$5&š!›¨ÞÚ@åú>üøÓhíÖ¡W hmӆɢx*™Ä<ÂcñücøOÏ~2½£ªz{ˆH<~±€gÿîËøøïü>ÿôˆQʆ5Æ×¿üEÔÊ»øÄïÿ–æWEÊÒÚÆæC4ZY¾xv.‚~µ…”gîâYd¦ †=¢Û=§,‰úíôDáD‚–!¦a¬Uó0ÆCø47TRæ±a®¥,ÆÉ”êv<Ó£¸g,gÜoB­M¾%1逫¬8%Â’H%~Å FùNÆûÞ·E“gR %.dí˜`•y „š%åG¶8ƒgR‚ªë0I½ºÜDZ+Ó°Eòœxx’ôÏ$Á„góXR¡¾`ÿõÿð'"ÓÒ‘ÚóÒW¿ ½ØA÷̪{dF‹ÌóDž'Ï!Ka{ý.žxô ÔB•rWΜ3ƒ fl wƒÂM˜‰ä/¬®âŤ!©T¥çñ'6Ü>ÿíŸüHg§…ïx{÷¾úſ¥§ŸÀçþÍÿ ¯æ‹…óã‘'8ï“»gÑ" »Üð):Ö¯ßDªÙ=W5Ú—{<… ñ®A…“Þt‹Ä|ÎÍ=yòºÅ¶{G¤Z5è´ßYRºNç.ë…:‰fÙª›•(/›»nk“4'ÑkT½Ÿ€!ý¢’H%~•êO{õ~#web²Š¨žèŠä™ÏÀâjîÌ߈´){d)'r± (¤¤ç¨N¿¦!,G›l/æFJ ÁŸI tb³gÏÀnн·ƒo|÷Ñ«•à7l\>yý  ·6·ñûW.A¥×p£'B*’ œþ‹%1çà|pV4‡Vûm”«M<ý[ŸDÒ]š^üþ·ñŸþúÿÆ¿þ“‹ —§ÕÀ ¬Y‚jÜáªÐ€?‚ €—ÖHF 34?…ìü´(!Õ¢aØ•6œlf«#òZÙ§ÌMRÄäóÀ¦Å&à¤ì™°SAZPLzm.R®<æ…#JÜ,Æ&óžSîY}ZdÊ«ÎCÌ) T©Ä"•Š+¥ªm¨<–™ýz•1cHô퉚ÜyŸ—™F|¢å÷ùD`‰LH‘ RjìVÐ]DDဦL…Ò°{¤î^º'†Ôyž:…ÐãgðWÎad pó[ÏáK_ÿ˜Kgpú驇Ýí ¿!çÇ:³DØl7)nîuÀÊ;<ÎçÅäüÅCÂSÍé]Ü(úGÞkI¢’H%>˜<ʦfÀ%è›4âàë?jípÊ™Ìl¦rÀŠ›nðì#V«ÜŒY¨X¿ =˜ðôˆø¸Ï¨WCãÿgï:£¨Öî™í›lz!¡÷^TzE ذ‹åÙžb{VÄÞ{»ˆ½€(Xh‚JiR!!!=›-3÷¿ß™-É¢ ?ê=¸f³;;m3gÎ×wå¡ ´®Ò*T俢¬¦NNÊìUOíØ‚oƒ›Ì\åíܸ#ú_E ^}ò)œ}ÁyHqqÅYéC°šoÓ41D[wærs™3–Fþ\Näͬúu9¼n/®¾ùVtèÒ]ø‚ýks¡‡ñ§Ÿ…œm[¸¹ÿ!zŒ];£¨:6n¦;ì8lt\6Á‚¢©Æo*ÿiw‰ž¥Œò^ƒÆ ‡NŠÏhôLc,¢N™‰!KæGÑ(kº[%Å µ®§£I•D*ñÏ5í•0¡=õC#€ÅNtJ…Á½e"§”jëi°›…“›·² Å»vûT4nÑ•./öhå¨^‡ô-ÐÆÈÕ'\gòU(·Q’ȰjýjÍýÃúDÒ€£P´j3Ž< vMA§fm±â˯کzd¶†£  ÁÖ™°æäsUZ… %Ý\VнÈâŸÙåT1洋ᦡsDäüFààûG7 ¾u8úhQÒúã÷_£q§.¨ÚWŒÖ: e¬Ô0¨{KÀö—‚e¥ÂNó°è,TÖ@Ý_ õ5p*z!53¸P©P@îÒ`z¹. ¬7%Ú¦¡>#«=™Èd*‰T⟩Hk?̪…ÍQ" êhOÝí4<.I·¤JŒ#irT'ì_³y;vpB±¢Y—v°Xí¢Ý+.õüh—f©‰¢ç¦…J%5›ÖyØ<çGü:o6Žmwìii¢]]¢ÏŽ¡©‘»¡?-ùÇ4ë€xR|Åå°:ìˆçÄ™Dfxu Ê,¼“·CÏ8ž&E7&“>Kâ&wŠ'tŒ?iß½vrÒ_±t úvè&z€"£†×j«hnž+v¨åe\”ÖÀʸ-Ùƒ 5Ãn™©§‹U¡4-N»á_Öÿ¯¹ºÌèäd¾.’ìM¦aŠ$UI¤ÿlˆÔ¦W;Qâ8™±ÍS„”q"+¯.GyÎvÑF/3)^®Ó<™Â%`õÄq^ ÀÚ8AN8Ôä˜ ¢õœJ¼^ÿߨySdŒ^•ý1ïË™h²m'’[7ƒ(Vu·Dk­²ó àݺCTŵj¶eŠÕ*”PK;N˜ù¥»`w:Ð¥ÇQPMŒ0¡æÖ”’EÛóðCûíE»—ÞH̡׸U²’EŽª¥i‚îÓl—!F 0_@d0X©7­£Ü«·*¤IFù*ýÓtÓ]¢•!ªâì*Ô$UI¨’H%ŽÓÚµêg\’¨°¢ö N=ÍÈ<7b$‹›û‰´OlÃ6D9-•Ã’)Nsìid³RUÍÉ2N¯{/,ã„îÐç^Ñû.&‚LD¨ * Í-o½‰S´ê<aJ•úÒòüýÈÓ|ìý-wPß©Åð Rþ£è>¥ }ØS^ˆÍ»¶£ÚªÀËT}P Yo@Dí©”J|jÇŸk…\™”û*`)õé~EÍz²Ò1`ØP,\ù*IùÒ>oɃfcÈèÑ Ç4ï€åV¡jO8%csI´¢¨ù%ÈhÕŒoWMœE’;ÕÃ;Æ1ëû,Š3ÉêŽçdî¶ÀêPôª¯T^µ@~N·Œf×s§.þ–ÖY@F”¦i¢‘4e(¢aªpPoQ“<5ãgísù{}ß3Î5kÀwÈd‹=©H%]iþ‘u„ÔÒT®æ"Ì¡îÙ#Úß5nÝ eå¨N¨Df|Šˆx1QY$5=®qÛôé 7ŒƒAn:§Šš} ‚ÊÂDM}SÜp4ÏÀ1YN¼÷Ú 8qøéh”•/O­þ2FBÖï,ÿÅÞjl¯)ÇœíëñŸ cD&hê6ÏÂ?Y­›ƒÕÈT0–û£è3ï $‘™N}AiV\œè7yæô¶wþÚ¨s©äk©ÐÚßCóÎþK2•ŠTâ/$цeƒ.\cÂ¥þg¢ >>éÙÙ‚ŒÊŠKÕ´1¬ÜôUš$rRõœTM…-Ñ-&e*-Ó –‚mÜVíå*“ü¨\½òeÅÿÝ–‘(JJÓZ´À©.ÆôOÞÀÏ– _­¯¤~þ^\ÏŽÈìÒ ®?W²A,Z8>NÂi²Et^ôd«WÉé%²ºåm¦$‚œäC§¹P`1sRe²”/y¾ “^¨ÈÈG UZûyLs>â!!‰TâÿÁ¬oèãPÜQÄ̃æ9¡Ê/Ló¦­Zè¦-©Õ j7¥-\ÍUsR-©ê¾OQtÆ?Ǫ¢·)£¡|{P:Ͳ§Úú¬¬l\6é,ÿõG¼óæË°¤&!g×ìÃá§¢¨°eû«°bñ"´ëÐ+eEdà Ç ö3ƹ!â ‘`„–é_ü}‹ÛE~ì`ßAÑág¨—Lõ†)Õ©$R‰?H”‡cõ]ß®Fæ²q“;lª âðq…YV£«8êsJýQ©Š³ºFt|²$qÓŸ3T°Ê'Ìhs3¦£sÔé>%£Æ]y3væîÁS>„ŒÆM»u+’›6E—^½AAó”d;Úuï"ú‘CqÖ§F#H.:Á3ôP¢Öƒ|ÍÕj‘c,õi’¨Æ¢·Uß¹=”ïV§$‘Jf²= L…ƺ c­‡"ñÔLFç"“|Èψx;é ûŠÇ.T*56Q©3uìׂPRâ %»`¡¼PEO`Z¿áǤçi™™¸öîÉðXýxé¾ÿñõTcëÚÕÈNÏâ¯y·µmß!LXÆ?-êg˜üBhšå1ÎO,’49UCls]?/ZýßA=Jô`¤z8¬ I¤’$pñD“œÖ (~C·Wß_ †Ñ?Ò6e¥I‰h¼A"ŠæÓl(n"«Æ{Ìmú†ý,JÆÇÇã” —¢š“·ÇªªJäïÞˆjDÝ~\BRMF„˜ôs´ðïu²þP¤; >½!7(s"}·‡ÓÄ—DzdAFí ˜~<³ZSAŒÔ31ÌduÞkh‹Œ†ä7Fo[©µ#RM>R»Þ •&–Š™QV‘Æ»bµÄNó ÑVtÔ›z‹¦6ÊD£ÆM±#g#¼š {·— ¼’«[›MôI¥êrÌ‘>OsÂù³õ¹>~/)¢FŸé£ #*”ŒgjHª„T¤1‰TÓš¡š s•iQJJ']-ZA±pbxló\«ó{í׬–˜d-êÌ4)¾?Aª†²(†"ÓÍlÍôjÛf‘¡#¢Î¢÷Åár£}ç®|*F‹§žŒ„'_yk­uŽ£a. ­ŽJÕB?µX 7ÃÍs«Å JÀä¯Ïeù]IHE*qÓ>Jù°¨£Ú DüZ[Å„+pj§ß(u.êÈÏÖwÑ '¿°Å :ñ\WsTóÎÀ¢”rh]Jxýõ¥…öϘ÷—”Üm{ðûÑ(3Z5W¤vЦ9±(¿K‘þ^ek;x M(`uÔeÄÎÔ­Žbae®ÔsL’D%‘Jü"=ëŠy‘F’‰qG7/QA6(•/£*áuŠÆ!ˆðw*ÑÎ ÆP¯™ó5Ò6 é6äçæ ¨Yá÷ÑÜ)qRÛžbˆÁUQîfÌ© e (;‡u×}P?ªY †Èm™7“¨DýÈÎùŒÕqƒ„ç’H"•¦½ÄM{ÃDmØz$=Æ{3ç£ÍÜhó[¸"_«õOŒŠ ILU@4"D˜ÇÑ>ÐXyœµ÷+f?¾Ž]‚ÅîÄê%?‰Û¾×ê³ÔÀWã ñµ~¢²™Œ×uY÷5óyìs¦ï_ÝÏhZØPïƒÖgf9ÔZ‡þ{ × ­Wìƒá ˆuî ¥V™ ©H%b) )=Ü€lI+haúVÍ÷tªûžö‘š/QçxR£†â‹¬ÃóW몼HÍàNJD›®½°ré/hѵ' ÷áv1øØœZ„€ÅV‡±dª©Â£D`Œ°^”—E=gõ˜ÚJ„ÊÏ…¤n™hø;©õm$-MB©ÄA jáSä…iÐ) Ò:µMNæúë^ÔJLr‹z±ëö™¦Eø7|M5Ø÷X—H 7Ò®[,?+çÍAË,7R’°‰±&Úo 8@E w Qb;ˆëá@éf!5ÄìMªÔ"OE©u~ÙA\1’H%fÚÿÞ H‰íÔpÖn⬄ÝqHŸRjû YLŸbTN%:X&skZL² «?E7ok©¾f­Ú##³)òwü&‚[ª¨*/GbJúAƒ1Q7¤ZA%RùDÖ÷ü`@í›™R‹ÌM¾W”Ú~ÙÈï„ÕúÆésš¼`$‘JÔ§fb¥ñÔ§0¦Fc)³P`H‰îæ}×Þ ©§ßçd¨M6ZL²ˆò"Fi%'Ž“&\‚^y’ŸŸö•«¢±ˆªª4{Eg­ÀYí O,Âm¸¢þeëh$yFÜèÃ~¿öú:oú:ë¿©IH"• Ó¾1Ô17~ ’ˆJF¡Æj»¢\ ¬¶ð=Ø•\ŸšC´  –úŒ•F*5#»1ú{V-˜‰ Ÿ6gœ˜é[¬}V„˜‹¸‘ˆ¡È1l?2;8™"œÒeèø°â7Jh#Ui\ŒŸ1•tÈ>¯r ž$R‰úˆÔ óH‘h*eíàŠy‘ÖCµk}³R‡¤ªCëQžˆís¬­LCÍFŒŒ}wb2¼ü¹âlb%¦´þ‹RGÍEùC•hBª7èÑÛ4*ðTË ¹œ™£‹ˆÀShŠrÀïä`û©ª%$‘JÔ&R#ý¥Þ‹„±Óµ“ñé ˜C•Pyb½¤z ù@wCÚöÅ4çkWùÀhbR‹\ƒvìõ!!^$;Ú™0¯»êøF£fÍG{êºÅ´ Øïs¯„~2]ÿ^"=`ƒh I¤:ô`ÓÕÞÁÌêÚ¾L½~F%qï*!–ÕÇñÇÉôw©RÑ‘É8æ¨òK¡ßaæ®ú¼h”hEzšL Š£‰}ªX­çµÍj£²^1_¬ÖyetYDú’|¬ˆÚž¹Èšþð¹4HäÎêÿ®%‘J"•¨—HunˆY­/¯ÕúÝ¢Ï%¹µRm"Rn„ZeWIõ–`´I}Dª!V€I'÷°"Õ¨ñ!.ΉäD'œ6f˜õ–˜ùŸºÉ„Õxt*Ríç ½!d©ˆóRû9)eK„Cµ²˜Š³ÎïÒG*‰Tâ ¦= _(Ô)–ñZ‡$";3)¬9~Bctp¨Æ^ » ¢¢É ÅP‡!Ÿ¢Ô”­hÂ}=£•]L"­Õ~.÷nÊzB   ÒjÝø™¦¡vj‹ ÆÔʾ5 ¦D¤„1XôlÉ“@ÍlƒP ©î¹¨›jF(ß 9j·ˆŠ¶2Y“(‰T"62R’õ‹N«ËœQ™uËa¢é5ÂB^4¢aœ‹œ#I8ƬghÐà!¥Ž[‘^°Ô9ý*ÝLšdcwn. ;~fGjR"lVØ•hôN×åHÅ Öº*/ô©(k?â@kÕÎGJøFËSó<ÖÍó=àyŒñýIH"•0àv0jß@¾:4(u5PC<‡¿sÕ ±Ä£×´)R=\™&Âa·!-1ñ°µï8\çô/ù~Bê_JRI¤ºBþô þŒòWl$&Ñ2ØN”””ÂPŸ”To5ÒÿëW÷ݘ„$R‰¿-Ì.ô³²¤,€'Þ„„Dyr$$‘JüY-ò)«$õç($¾NŠÖæí†ÊTXmVØmNx< òûD*ñ÷dR£ï¢”gÙìbZã­Æ¾‚Bx’E„¾¸¸ˆo†Áát‡Ó¸$$ŽHµDÃLl ÜgÍ7;¼9Fâ‘èþüB¤§g 55 Ÿn‡‰)©¡4# I¤32EÈ_i6n6»·C©K¼´ ±('P5T”•Ã則ÍnGyY©ÞÅÉbA\\µÖ×›¶ëÓCÅëœ'BÆ ”YCdjúz,ÆOªŽ×ô¼P߆µÌ—÷xÄrÌh ÂX~Nàþ@ l|ô²ÕjGJJö«…ƒ¿O2éy0ÆzH6•D*qh,j4"1'\ꯉ‘ÁƒÛˆ­8}B ª°:œB†ú’*%’¤é¡TOÏ9)Z¸"5‡¸[&.ÆT±lMU ÿœ›Û%rBÍîõú¸bN Þ1ÐårÂÅ— ø}pSß去ît¹8Áúu×”ˆùðFZVŒ —¢˜hcµX…O×T¦JvxŠT­’H%lé uHf9Í>ÒU#ÊÐiq@åäI¿«œì>®ƒÈ"Ì~†ƒR›Nˆ6‹ÞɈéj–^óûý‚H-|£î„„0»Ò6ø>øºéW+g5§ÃΕ­=ÔŒÚË•k (­ÓÎß#"õùt—ƒé« ‘(«}”Ô-*(0µÝs»Ýüs˜ QBݧB™˜¨a7»‚¢žþ-1O(ô œ³WiÌ1’H%þ6æ{ívn·acÔÏ“þiዟ– IDräÓLHNë bôýÐÈJþR‹>Í“ñG°JƒjU„””)©M ßápˆÈ;­J‹÷ÃÁÍv¦)œ\¬·[mpp’4¥9†ƒ j*45(:<…ú¥Zôl=_uÏΕ+ ôw5ƒLõ#Ôøç)`UUQ-‚Wn·Aá“õÁf³éþ]¦÷še…p°­7ץޮÕroD´3‘“é%‘Jü ÈS‰¸˜ëoÍïXÌà‘iò›f/Ñb!BuÀœ¨Aäcg6®:5£/±ÆÕª®íƒz Éè© ÀgBE’¿³ªª ñq ˆ×…©‘VE‹Z˜A[†ÛÁÏÍz |Y ÿ,½ç#•Ëן˜‚êªjT•”ˆ¸œnNÞá‡Õ‚z”߉ÝÁUkff&¤ŠýA8mv®€ƒâ}rcÐ1™î‹AæL {ÄmªÞˆæ×±T¥øŒ×Åa×Ý C«ÆH%âFÁ¤:•D*qä›ìFÓdÅHA"¡0»9 q6*RDØã:wÙ­Âw Äl¡™ë0XQ¤9ñuP RUe¸ÚùiýD A®L…r @åêÓ :ÅÅyïIDyY '/»NÞJxr’i›~Or9øÉ§@7Ç5ƒcƒœmVÜâ<ñpǹ99W¢&àE¼ÿÛß”ƒÈ˜ö™ÈÌÎU2Cä8&ˆ–Ô3Œ&Ú¤"‹‹‹…+!žo‡nüE$z<úÝI¨Ì0jä 5î°éÏIîûL>fQd`Ñ•¾"mü$deÓ?…AIU™dJéDäÏ´ëþOñ“ÞáªL˜ß ÷¸tÿ(=4= ƒÄ §vBáä㯮F€¢ìj@˜ÂDf•åe"’¯rRz}ÜÔ®¯¢Š“hPlÛév‰Æ"DZ.§K˜çVN.»Cø+•ƒ´ ¤òP37ÕΉל»DÛ'Ÿ+¥E™iW‰ ‰HINÕP•eðrb%—@˜£˜¸I(ÂÝ “7iEÚApœèˆH\5“¦¬€œm9ÈËËÃÿ»Ÿ> &ß~7 öäUl'4á”?jÄù¡,ƒ€ÈxVûÄï!•J7 ~nmŠœÓ µþ'±JHE*ñgó©` Ý\g† E©¹rT¹R´8m"ð£VÖ„üV·šU'‚?è)ª”„Šâ¦°? Ìe?'MO\<¬œ$é¹H‚ÏB)PÛ¤‡K˜àkPø29s ßä\^o¥&1c ¢è7_MµP•´-„^o•á„X7Eùéw ”Qî©ÊÿëÙœíN®šõmWTTp5ÊB *¹j¼^þ+6¬]´ŒtbOþ¬\±ÙYYX½z5²3¡ÒWƒjÊåê8À?Ó¤YsTóŸÞÊ*´lÞûöîCIy9âùMÄÁ÷ßê²c_É~ô8ê(¬Y³Fìo—î]¥&ýÁª„jÅßœù°"ÚÄÉ“'O”§êÏGIeÙ¡™Ę\Z(ŸScÑ(º*¥Ð’Í"ÌRâGæ° u)”+'A+ª '“²²2H¢7¥)9DI¦Ec5WŠd&;]nQ‰D$䈊×j”bÎRê–é¾VNdc[aZÇ‚ÕpÔ˜Š8¾~R†0ü˜Dnd^»ø>¹¨Ö^Õo´^ã7òÅù1b4}­ô;%ýS ŒŽ•Qª²‚“ªže ªA]åò÷éva·è¨ÎݺaÉO?#-%Uìs^Þ4iÙ?-Z„Ÿ—,EÛíñÈý‰›ÕZNº?-ZŒfœ@¼÷~ôØo¿õŠ …?vêoðÝe˜÷Ã\ìÞµÍ[´ÀË/¾„Ñ'Æ¡´¤ó—âI’Í_€)S¦¼Î”ƒjJôhÂãi™T¤ÿ˜þEúNúW*|™LOšgœx(Êíåd$LfR‘›øk’‰ÌIÆÂ‰µÆ_ƒ®Î¬DžVKh6‘¨ïj’èIñ‘¿R̹PfJ¨b«nƪAÝÔ'¢dR“áÚý0‰ª¸š#²õ¤$À[^)ŒÈ›ˆ5À?OÄš˜$ü6·-4p޵†+DZ?ù#(Zïç&º•©P8ôýF=¹/øó ù_iÛœûãâ=pqål!æÊ&òÏçnß6­[cㆠœüšãÇy ááD¾äç_pìqC—î/Erj2æ®X‰¶­Û M‹–øæ‹Y"ضfõ¯ÈÎÎ7"òf| æ/©\t3)**BZzzÄÈf©MÿÖ—`„"µF<ìÆƒÿ%¢)¿ø~–§êÏǶü7ß#ZÙ±Ÿh¤Ç”)©BòÙ _")Ä8'ü«%óUÕ«sã‰l}Ÿî“ä:©;"\òuÒ†‚ÜÔ&2¤×ü¾'P—XV$Õ* ?­M/¥rS‚Ëe˜Üª*¶kÖí‡HC%W‰´¼‡“4ÕÛñ¹¹Ò¥×5N ´ÊõPgüP89)œºÉDƒÚ)iRš”ÄE-ø(ÈEë¡âò¡z««QRR¢+^z(6qc°Ã"ÒªJª*°fÙJ|ôÁ‡¸âº«Ñ8-%\­Wy«––Ž}ûöÁ8ÎÆ»÷æãƒO?Á‰'ă°aÕddfÀÃIvY©È ‚€J¾Í/>þƒ‡ư†‡sUõ¾„¿[‘¶Êj&/š¿üï·?ÿ±›?Èù0jăIEzÄ:<• ÈjÏË4ÚÚ…®?#°AÁ""CJ>wĹ„J£ÀP€ÿ´s¦?W]Ôüdî«Ìè5Ât3\õ Óž‚/D€Aþ»ÝH¢(¶Å¢—nªFj¨Ã7L{"W"E»Ã®wjRŒ|Jkt£ó†@Š”+eTq¢q:Ý¢²‰ü»nnâ—–ìûàâÏÍdþHú –6¤1™Ó œ™€³*ð$&Š Wyy9'X§ìÓþ$'%ñcS…‰5ÀI’›øWÁ|9gœ[¤` <Û¶9³n~ìºðu7ÎlÄ•¼*Î_~Q!úô냑'(Ò¬zõî… 8­L©PÄœÀW.]ŽŽ;bØðãjYÑ_¬©´¥U*R‰CU¤,<Ž8rºž<®gùˆô"Ьsò$Ô«¸²r8õNº…rR%“—^#““|ˆVÃÌ5û‰r­)3~U¯s'åH댧©¦´}‹IZá?5U°HO"óá™îæ¾yê P”¨Þ¤áQÒšpÐr”fDêÙíŠÏMP$½´´D‹'>+ä¸PJ— b‹%Tê)ÜÃ|Ÿ)`f52s¢£ª&‹Ñ”E¬ßØ‹UVÑûÞò ~ãð¢Æ@FF#ø**àã䚘œ&·ÆÏ£ÕA™ ~Ý7«ê•YÂ'z X‚_Î/²"˜““§ªWp W‡ÑUKþk=3‚RÒÌïš…d³p‘@íOÄH*R©H%àêdŒÕ‘)D¤ÚÌr"¹PµuF"Sۈ΋Tž`@"]¤ Õ5k1òAa×IŽ–Z?' ;7W‰`(Ñ^obŠTDÀkè¢ÖÌòR³ö^±D'õG¦-EÅR¢db“¿PDË)±_ä{jÂÕ ºEq²¢÷iߢORdT]…S%”ÈQèoj5²ˆü)ðéQLÇ®áÓu'&Àêåæ?ßöþÒ"ðR¸ò.Ú_(¢ìäΈ§R_8‡ž#jœ"MoÀ'ü®¿¨ÕUâÎGî+%?ËÃ(d`¦%¯éªœ,ýÆ@?ÿŠ‘ßS™þ•3Ÿ% I¤G IO&¥®ÌôÈ»ž$áóJϦ“ «H(êÑç ]Ø”CÊé’ˆ‰ˆHJ|žŠGV]QZø}TDÆÉgÈ_°;!󜈘r@‰œ‚|_ˆ B>YSéñÏQDZ-ò ßÅcúwÅÀçj“Ô,¥ÑO®uá­ÑÓžˆÀ‰¸ü8É-“¸-ˆ®S€AòªPy.ª¡7;«pÑ{„¾sú>Î5)hâoÀTÞfm™ƒ*‰T"&4£Y]˜ÔwSÔ³‹` 5é Ò¤‹Ð'ü :¡ÑOi>t‹õpÒ¤¦Èô sV”=‰R^)™Ûü÷@PÕ}wD‚|D°D ¦©-*ørb»†oR1»â“*3 žXä…p©("5|t|”¯iQŒcäÄO9©D˜A‡Iäü†AýHi³D¨5AR¯5By›µõt|‹hHØ_T,ª DbƒÃ‰ýû÷‹ „u ‘ §¨rÒsëºõX¾t9Æ9ib…•••"˜ewÚEŽÒ¶ì.½G*Ud‘›Ânu")1;swâ·Å>z<ñ¸ûŽ»pù•— õ|tÏcô|Yñ}„§Wñé{CÇMik‚äÍÆÙÆôÈR` I¤µ@ŠÓb4ýp)¹‘ãÂ6kÞA¸”P—&«0Ãu³Xø6ãueEÊÉÁ/XÍlÂtUJ)>$&-PLË\ïæD5ƒ‚R6ºˆ5Åèÿ©é¨úçÌߣݷ׫}ƒàë¥mŒ‚X5¾j¡‚i>=oPeFn§Nf¤ŽM ÖîpÁæðñýˆãq¹­Æˆ‹ÑBÏb¨P%Ô`€™µþDÞÆ®ÅqÒÌHÏÀã=ÊÉÛFŸ$hóçÍǸ¿x?† ‚o¾ú\rÞxu*.ä?ß}û]d6j„%¿,AfV/Z„ü=ù8uÌ©øüÍÏйkW8]vlà„Û¤iS½2jËV\2ñá{¥WWº=ü(.»ârœuÖ8ìÞµ =ûôÁûïMã¤ëðáÃÄr9[¶à¸ŽÃ¢‹±‡ocÜÙãñõŒYB•Ó»7nŒääd¡r¥}„ùQå)8ràp;EI¤hw¡é .Ò·HóŒ‚FTžÊ1Éßf¥€S')¯6NH.‹M¨P"Y¡pâ®É.±f´Ì#“ØbÔ®û9Åú¨ÝÍ&:áSDžJ0I’Z¥‡Å¢„eŸÆB¥©JäO³ÔÔHЧt$z¸©TÔ¦§_‘¥T'2Ë#›‡ßk„/W1Hž—¢í¢n•ܤ°©áz}Å“b*e# c1júéX’““ž–&æî»0ãó/©%§¤`æ—3°zõTTTbÛÖs»”“çŽíÛ…9Nµ÷Üÿ ºpâüö›9ÈÛ'^ûpÚtìÍÛ Ÿ×‡÷ßyŸ›ó5ü½=üÆæY »vAßþý‘””„”Ôlݶ_ðíîÚ¹ë…Ú]*Ôÿ'~ŒD¾ÌߊÊr¡LCï+º™_»tÝŒè‹Ì¾ìã>†9sæàêë¯EBb¾™9Kø0W,[Òýz3•O¦„ŒŒtü¸ðGtéÞ:uDV£,ìÈÙ.öµpß>¾ürÎåAlX¿A˜øååâFБ“-¹ ÈOGÍTÈ?Ê¿£{î¼_Ïš…á'ž€eË–¡WïÞ¨ªªÆü¹ó0ô¸¡(,܇‚‚lËÙ&re‹öcÕªUâ`h?Frå¼/SXX(Žƒ¾wúC i$ŽŒkW¦?9ض{‡9 #T3Ry¦ Íß •>N…“ØDT^ñ饡‚˜¨"È¢“£bvbáÜMÍðÚ>WáRÔŒ@ w@RŒeÌnI¦ÿU5|©ÌP“"$ÚÎÝñlòg’¢%¥}fæq@ýJ‰¼„"µë*œiZÔù`®J;ªö{žPš”Jµÿ=šn¦„¡vr@d£P¦›ôf%Â)*­ô”¤õk×áù§žÅ‹S_6‚?ƶ5ƒÎmÖP ’éÇ6Ï5­±’ê÷âÃÙ B¦(â|YŒ^«t# ïÍ&|š¸ÑQ‚‹¯´~o»D4G³hFÐ1´^U/½mÙ´¥¼hþ µ)ÓŸþfÁ&1âȪ1ZØ9i!a¨«,ŒrK#@%Êܤ÷BJÒnt¾®C-tÛ4zo*B©*"˜£lJhy‹a‚I†Hˆ²¨“³†ûyF¦È›ÁEÏ ¨z‡}2w)"O GH1ÒçEB¼™êc©•sŠˆQÏü¿8w¼>¯Þ4:‘ ¢ú‰š£P`-º:(2wÕp(ºZ&ò¶Í#ß–F@ß~ÏFшu¹žæMÅ|R½Huûª¼Æ÷¢“ hÛçt„Y¢²‹kÂ-a¹¿Âg\­g.¨úÌaXŸÅÄhjÓïKd,n:Š4&$H"=’î|Šáº"03—™¾C£_ž¡¦„z48\Na–“@cFóf³ê'²& §A™}@Cy•üó&¹‘ÂL'ˆàE•MÕd®Ó´ð…_Ôªº úƒ¡Lú ­Û匊Õë­ ÕëëÞQcò¨ªG©5ã E¾¦¢wͧõxkª‘àHàJÒO‚5|=büˆËij©OÆ„TUo‚B7k­æÊDP ÔoTî ¥deafñ¥l©bΕè9À÷^HR­DØâ3ñ}Ú,e%8rV›‘uAþm‹%\p£?‚°.(íL^*’H%à'U"rÇE¥¡L…ïÔPUd2Rƒ Nln—;$½˜„0Ó”54–1˜Ž40ÌvAžF^£]äB"Š|ÅèÊñ´…GˆíiµKW™PÅ"Ç•² âµZô&*zED&m“òIíb¼r¸qtHññ£¥•lZ™ÊMáj±ï´r¹=b97'ÐÊê*8 õ¹?"Áßp(FÍSá0S¬,º¿™¾òwÓsê_ª—âªpóýÐŒ¡-tŽ «@™P®Te%!‰TâàÞkC1Ò…¤GáÍ|Nò}’™H¯‘0j¸I~š1“IW—%l¦’NSáÊ#’Ofs¤'À¬zR,uÕi$ךy¤Dä¿Sµ¯S…i«701Š8Q)[̦'}ýf·'l‚^úª«g½yŠpo(6ÄÅ'ðõúD:.PÎ'©jê+@.ƒ¸¸xþY}øž˜Íd³UE,ª\U4YtsZì‚liß}~ŸX†² Be› 3|®F§™MAŠ—n:Ô,Ûeíè$XÐǰˆ}Q&j •íŠóàt˜æxÝe7:÷ñûU½ØPú4€²3„"uXC? I¤ 3zj’9H©K0¢µªH–7GTÙc±E©X3ÝôÒNÊš‘ˆê%ÑAŸRŸl!Þæ¤RKÅ’W=¨§YÙŒâ€Úd¯[ž,¬š¨œ•È¢ó£ˆ@´µ³è%¬üxìf[;"oªÀ"5 F5)7*2„cQ©Nä×%rÖTQo ù?õ©•å"qßåt†óKcÔú â6‹4Ýä¦ê$k\œNâ4á”*­ŒsEòRœý¥»M/L¥³š¾sÌp›ØŒ‚â}£ØF®lHÝRŠ•ÉÓDÚ™A²^ ,Øé»¥•VTIEß§j•éO’H%J ¢º‡.*»Ý˜cÄD‚Ôœb},†úŠÏˆ¼ Â2ŽòN-¦ŸCøP]dšÛz†~xЧˆ”Së;òïQPˆ.jųG©aË…lÏýA½€@ì·á5Ó¨t¿«5ÜÉÊHî§ÏÒç`L …ð‡ê£EDðŒé£’™áñ ЈP ¼£"Ñ€n |?v—ð7RçzÓ/[ð‡Õix_8¨CÄé0Ò´ÌI¢&^Ì}²‡ˆPíäÃTÄÍ֤Є-|>5=€Î9)w"oÑD…ˆÝ(á¥~œ$ãìÝ*\zà‰n|BÝ™è+!‰Tâ 0Õ)5a[ô.õf;»ÈÔ PÊ”ÕTXºq..x" Ña—4ÅL^WBé4¦ª„Å qI¢èe£&©ê´PÓ›`µêý=ý5zjð ·ƒÙ¹ˆú‰Z6„Ë0™p b߉@œÆÌzê-ÀqNwˆpÍÞHT¹E Y< \•ê}Eá ‹1†Ä™ûÆÍ¨¦ªZ¼nFÓéóT.—jD£á‰Vƒ|ÿf¼PâÔF6¸¾ŸVK¨ðT‰p èÃ[#Êi5 f6°6Iªb¼ ­ƒêù¢³—jŒjQDΰ™A!!‰T"Zg7—'ABâoy[“D*!!!!‰TBBBB©„„„„$R I¤’H%$$$$‘JHHHH"•D*!!!!‰TBBBB©„„„Ä¿ ²i‰ÄA¡å¿‰s/Û‹ë^8ÍŒ[¯¦Z‘ܤ1’êiÔ^õÍÕ8næ(üðâhxb¼Xq?F½Ð¼~&Ò†} ^ÄS_ï„õ×ÙçM™€n6ê êE0ø+¿è+ yóô¢IªŠþÒ¸î†jÜýúd2ö8'j>»ç,;—µ^ˆ'gtÄ£ô…›ÿ+)*EÙ܇ñÀÞñxxB[P?,{vGØæ?Š6[a æb…vf>Ø{=ƒ«Ÿ²â¶—NÆÆÛ¯ÇâãžÇãgvF£DÙ™^B©Ä€Bmï —àƒW*‘`ôƒÓXcœ8éj M§~›XôÖ;X¼Ïì­¯aßÏ‹w2žd]h4‡5s0.¼h2»–,Cee)ž¿ï70--”ï°Àt¼|šÑ:OÝ‚gÏx¹'R¾½‚…¯bêâ-X–›ƒ¼ÇÁOG‹+›,ÆÓ_ü€MÛxñÑ]ˆk{:n›ÐCZéÝ£ÑÖÑóº‘ñãD\µõ \;t>þÊ‚‘w¶£‰žš °£ïÄÇÑ‹¶Yþ)þs·ŠÒ/'á?‹zaü>¼ôFG‡ÛïÇ%Ïþ_ÜÙ’J%$‘Jü!X[œ„ï¿-b9ƒ´"üüÑ$?~†Óü¹Ê¸÷ÝRTè‚ÓÆöщ§æÜsë/}'R¶3¾MÆu¯<†s‰ÔØöâ·˜µäc|ÛålôY+.ß:}#6‘=ìÜ9dÞ8Ãn¿ý©©Ò÷tLÄž¸á®‹ULîðÕ7ׇoOFËžÿÅY³ãТè+¬Ij…Þ%¹ØQ¢ ­çé8¥S”`rÖç¡¢rÊ´Ž°;Üh1äL¯âß–ÃW¸9yXô³ ²/½„$R‰ƒƒ•cÅG¯cA¾v W®Fîî ÞzÆ‹¤H&ᬕÒï<œß7ͺ¦íÚ¢­SÅŽ©w dìDôÝDj›¶\Y³GwÏG<7ãË羂öyÑ}ò°<3 ýqÈÁÛ“îGÉ9³p"Wš[ûîÅ“¯¿¯gNƒÿ‚çðxG}Ò £.Щ߼Š9Ûr <ûrñÈôi@#«±b-\Že»O©½r,y=ü ÊN¸c½ Q6ø¼Òc:¦\u.¦÷?gv'­² amÔ£N;ŽÅ¿aY%„[!ël[ñ<î˱#¹ßù8׿Bá¬Çpßo~Û´êS÷a[õ& üëD*q°´¾OÝœˆÏ>Ã_…›¦Ü€3:%†U«º³o¿ O®ò£ÿ9©°ÀжãÇÀ{«hôò'¸g`б¬-O¿÷Ÿ¶omÚ Ëu·ãüL ¹//ÂÜEbJÎé˜z÷&Üsï§èǹµ5Ý—ñè³cëx\uÏ[8¹cÊ/Åu/ÍÅñ÷‹Gß=¿yïÝ?9w>Š1¡{B62K±/"€Uæc˦M°çU@KÒ÷§ùÄwðÅÔoâæO t׳ø’VÂöãƒí»à¿á.®š¥Q/!‰Tâ0ü©dô>~6›f>ƒ{.;Û^ø7÷°ƒUmÄû7]Ž‚Wâá ßÇL“|Æu}„É_¯BQÿã#PåÛþ¦¼Àqøuî.\ö΃Ú­Oe/Ç×å ¢KÉìˆîúvÓðÓÔ×ñôl&çÁ1é«pïé7aýÐéøöÖëñ¨Á •«e¢rË/Ø dãKAöAhéÝq\¯æXº–Áîtr·ØÝˆãbYuóÿUþ‚©w}…B;Œ® )Ò$ÁµìG]„[Æ´œá)!‰TâCI@‡SïÄô‘>øÅXb/V=;>H» LªgßçŒT†ß¾yS?^äñ·ãòoÿ‡s®ÉÅc\ˆ£SL6e`5xù‰Îxîµ[ÐøƒO0xò›˜ÔƒÒŸÜ8z@;ühˆ@WÇáe|jÈåÿÃãypÇ[¸ä§sðÐ5Ýëþ!«yøöã|œrÕIøõÃP¸Ñ†%UC1r„Nßnlöœƒ»ÏiQ§"EI臉w™R‘JH"•8lÅÌz-2ÒâpÂ!ž¸qÌ-Ÿb†BÁ©VxË0ÿÞ‹¡]pn{îj´Šçtâhüúݸuôlœñú»¸²“þÉ”§áî+nÅ€d`W‹€ÌQ¸ÂýÑÇX\‘€£êã/-ïOž‰Îw¿‹¾ñµÞûš3&ß5_Š×:?„Oø¶ï¸þ~”¦7Ç/?ÚaµZñúû1á®ËÐ'ïùúi¸û±¯P5à„rU¡r šÃ¯%$êÑã¯Äñ°'4Õ4ígyªþ½`åk1k¾†Á§ôˆNŠªß~ÂÆ”ÞèÕ¨nں歆ßWÝ- tõL,q€;rEªnŬW~@`àxœÚ#µž:æ Šó‹‘ÝÈ ô0ª—¿éþ1¸d@¦)FóbßöíÈ+­¯Y\hÓ± <4Ú¾l –n±£Ó1-‘Ú`56Ξ‡à€Qè–(‰ôß ‹ÅÒŸÿØMž(PÔS¨&‰TBBBâ‰T6-‘8T²•§@BBBB©„„„„$R I¤’H%$$$$$‘JHHHH"•D*!!!!‰TBBBBB©„„„„$R I¤’H%$$$$$‘JHHHH"•D*!!!!‰TBBBBB©„„„Ä_‚Ã:E4??_žQ ‰¿²³³L"=œ;&!!!!M{ I¤’H%$$$$‘JHHHH"•D*!!!!!‰TBBBB©„„„„$R I¤’H%$$$$‘þÿƒýjôLCÐûÚÍï…Oý§žåüù·&ñ÷‚íßwÈ ¥;Ö"·¬ º¡]jÖ·A¿Ž(ué ;g>†ï[ÝŠK»®ÁçâÄ;Ï@‹¿üVÄêû†à‰£~Ä´±Î,_¹÷OÂö±/àÒNÖ:ïªÞëzâö üÇ íÁwÏ¿‚E{öbKA<Ú6ËBÏÑ=±{Ör;º"Ë–VaÝžI¨êê½dë2,Y½ûómX²4½Ò{ lÅrl-.[ö –69š'CQø&°o.é‹›o> ¿]t/vÜô ½0þ׿ÆSCã#ަÚòÿû=óð}Q9~þx½û nž}.-þKN‹+^+$‘JH"= ü •^n|*Œ+:zäcÍžÆè9Àø$à×ÏíÛ!½’+&Ï`Üxn{|õ¾kq1.ì´¯?¾'^r*²Ö¿gr½`¨K¤¬r#æÌÈE‹SOD'Ï¥Y þj/‚«áÐVá ZÜ¢ ºvuDlÌ‹jŸqJ ÊCpÛ+÷à([~¸îx,m×£'¿Šÿ¶âk®Æ=£ß€s£ºuÞÞÓ×ÛYüâ³K°õÙɸâß\ŽëßèŽKÍÕ—/Ãw?lÀ¶ÂBT”رå·ðõ;S‘Õ· ++¡mËÁ–=ù˜×®=zñu·-Ge¯ÓÐÅ‘†.¯Ì@ÿ…·`øô|tN~w~±K]×aÖÃC`Ýñ!nègø½Û?Ö‡¶ ß¼1¿mÜŠÕÓñFÙ&Ø.ùËnR’HÄ ^ío„¡Ç% ˆöÈvîÃV7¸‰; ;;œ‚Vf£`X?¤ö:=âñòeÔT× p(Q)­ß>z>ÝÅUžØ†ý«6býâëqͬs]S‘2âN<|VÜþjw¤ño6øÛ+xlë™xñª¥˜¶®håBá¢_~õuèc+ÆWNCúécðÆõS1fÊxtJÕ $Ä•}¿Å„ «0ê­ÿ!ùi($œØ—ÜÓ—ßx€´b,~èBÜÊjŠ»á‰¥¢[ß•«Ñ‚øV·+0æ›ÇðæìMpìõ¢`[œ6| ÊÚtDßN,ØT#‚u Q4ì!L=;‘Z^û¸κù2s=–]ƒ[NŸ…_ïÒþß{’Hëã&ÁêpÀj±À¢ °Ô‡¬Á£1¡c&ò? `ëˆáƒC2To˜…7¦.BÍîÝØ³‘›ö¿˜¦}!Ü%ÛQÓñ„Ø&xBwŒ™ØýÐvÖ’“ïy'‡žøuÊ`\¸: ½/ºʆ£ÖGš¶I|kñØUŸ¡×£ßc`ÃsÏþ€ÕeŸâ²ܸeÚ%ð ΖǡO#/¾T¡d vj%¨†Ý'ŒCÓÇßE£ [”K„H´&÷[oí›Á^éBV‚ñg¦íÁO¼·?YŠM_&õÄ«pvs/öÎxÏ®LÇ„çŸÅÅýz¡g›4$5ïÞÇ݈·>¾ÎÍBBB*Ò#á’…éE(Š|ÑŸƒÍè÷Ö_QÞ»'ÖCÜH ¹ÛˑتRì‡sï­Hï})ž™r!6ñn<}7ÿçãùQ)Pj¶àý«ÎÆÓÎ+quïåÆÁ6Á¹w\÷צּŦ„ˆÎÓ¤#:gìD²g/<{¾Â¬ÊfP¶¼‹÷úNÅ¢{F!ïÓÏð建Q]³k',#žÀ7“‹ñÑsÏà>.OýÛ`Ëãã1`ÇP¼õÙøú6Ýõ¿„ÿŸi(ݾ¾øxãnÍ ¢9Fþg"Ž]µ?~oûÒyFwf()ùßþò&»Vþ–úÛvìörEˆ§´Øz\ˆ»Îì(N’HQêÈB§6û¡x: }š‚=:‹"÷»¹ô½£Š>ÂŒÕ0áè$]àU!//Åå5¨*ÊãÏ‹Qí+GA^Ô¢jhõl‡•.ô'—£×}·aDÆŸ![ãÑ~̽˜9ò”0 vUañäËðFÓG1ã®V˜~òr W`úë/cfù±¸éÔ¸dL î{íŒlnæ r‚Ûü&Ïy=àÀý¯MÂ'ož)ò6³ÇǶÏßG!§Âì‘×à:ãWLd|´3¯<ÞëÎG{k¤†§@ÛB¼ò][\tÍz|ñî.”ÌÛŽ‰ÃF"+Ž«ÒÅ©¸òšAµT&'ö~—ã¡ôW}Ÿæb}Ñ­¸ïŠ,h’DzDÂÕÃO¢¸S.–/\€íUv¤|ö2ÖáLìž6Í_›ŠéÖËp¦[…·(ëÖVÂ’Ú­}±v#Юo:ö­_‹‚üýfÔCØ#pûË#ûî>#+›\)H1ˆuàÃsñb¢®Ceñ7¸ëòdÜ2å¼Ó'“Ùg£[«ÇqÃøS°ìù/qWo7? ©è4v nºo$2Ù·Öh`V$¿ñ4>Ø”Œ3ëÉ8¨øî^¼˜x'>žAvœ˜Õ4÷ÜþB3<{ÙKöÞç°¼|=îüًᾇƒKNÛ½ÃýôdœÄÏÝþ9÷bâ«û0à•0kªÊQA&I¤G¼8#«Öˆ‡ÝxliªiÚÏÿȣ׊°iy\í²¸rSмCfX%+QÁÍÊkŠk\HMtľ ý( Ä!9þ¯2:¹¼n.¶¤CŸÆrq·y’ÚµFd ŒíuŽG+ÄêÅEh9¨3’¶|ÿ%r²ŽÇˆ®©±é*Tjñð8£÷¯|ÅgX”4£ÚFŸæ/GaA j˜‹Õƒô&©Áþ’\l 4B›LWhŸ‚»—a©¿+´vË«Tâÿ× h±ôç?v“¡$.,ý¡F<Ø¿›H%$$$‘Ê f ‰C%[y $$$$$‘JHHHH"•D*!!!!‰TBBBBB©„„„„$R I¤’H%$$$$$‘JHHHH"•Dú¯‚_e%j4y&$$þÍøö#e(ݱ¹eµÆ©¹¡]jÖ·A¿ŽžP;7æÝй_üŒ¼€† Ÿú€úQUîƒbW¨©AÀÒ ']u6ŽöÈ®™’HÿE°»läíG ¬HHw`ÝŒÕhyî8°]+°º²'Ò𲊻%úŽHBÀ‡¸ø88ÙJ¼öø^Œ¾q4ÿUz¾z9Þ|~†Ýt*ZÒ69øâéïvéœzè®å~…g~n…kÏîò—üA°’ñâÃ_b»J q­p¥wĈ çapS;´‚ïñü'6œ{ÕP¤Ë{“„4íT(ˆs`ñ’"(¹?beuÝ ÈÌJ@ÉîbÊ6cÕÊ•X¹j3 ýú½Æá´B úQ]^Š’’*øƒÕ(/)áÏK°¿¸å¾?wX0«Y‡Ïßœ<Ñ¿¿Ü{ ž®:Ǥ¦Qóæãor þU6Aé |<£ÝO‡±gŒBoç\1z2–ø·cOFvvÒ¿w˜˜„T¤+?èE¥W劈©ôÈÇš=Ñs€ñIÀ¯Ÿ-Ú·C¦ƒaßšïðCNºíhû·¿ ¾öÆÞ3 h:øl kU÷T²Ê˜3#-N=‹éÏPðåqÝês0í³>ˆ×i…‹^ƃ¯.D>cØîÀå}«0ãá9h|Ãåèãæ»œ?¯þÔ—‘†Uo>„ggm†7±+θñ8»«Ç¥{1ïñ+0uqÚO¸÷Œk |Ø1û<óá2äUZÑdø5¸ë²l,|l.ZLºGÛ ðíÓ_!õ?—¢—ˇ•o½‹êc’±tC*Ú弇7—Ñí’)¸óÔV¨=ûO‰k‚î}ûá(:m½,˜ûòø­’¡7+G^žÞY_Ýú žYk]1޹:W1ö÷Š~HÊ©o=‡KŸé°ð‡?\üÏÉü‘ÁMù£û'A«f…9ëÙªeËØ²eËÙš Kا¯|ÀæÏ~…½8w[?ý ¶`ïöýÂ,ëóåìÕ‡¾byj6U¾†}þÚçlM¹vh»\ü&;¥ã lØè¬xvÔäUÌoîκGÙÐþ“Øû‚,¸ï6iÈXöÖî*6÷šcØŸ—ñ%T–óô8vÕו̿࿬ûi¯±\ŸÊ*Ö¿Ê®¸ü-¶‡ñ¬CËQì‘{™·h»¼û8ö^‘ÆÔÝï° Æ>ÂV”ò…j¶±WNÄîZQÊf^Ò—MZägÚþiìŒäìê¹5Œù°Ic`«çý—un9š=ðã^V™ÿ »ªç86­8úøÕmO±c۞ɞüôsöù§ÓØó7ÁN¾ùV¨éïwâ l7íׂØëŠ}Ìj=û¨w= q Á…7Æ\i7¸SùW*RMc°:°r‰iQ PXêCÖàјÐ1ù°uÄðÁ$7˱îë/±²D û@¸"Ý^X…™ÓJ„"Õ…"ƒ§óI8­gzÔ$%¡;ÆLì~xtõRWjÄó hy/¶åsÙžZk¦U°Å{÷­P`V— BÒjWuÖå¯ç˜KqÁ…±ö7d aû$!!Mû†Jp723‹ñá ;Ð*möõ<i‰´îЉŠ9e›±)Ç‹áiq|Ùx´8M`…%4•È®½vò hd°+ÓT0GâŸ:í’í/@‹ç?ÅuÃSqܯáœGaìÓýQQ^…”&­‘¥Oò̺þuœÒ!®¬ñ~ÃørþüÔf®ç&¾íè»ðí_ãÓóñÑ”qEáɘ¶ðaôçŸt$§7¬V~¯šóÆžñ)ºMº£‡¤£IÎt|ÔpüHd¿0ÓËK1à–K°íÆYøØù+Úž0™z\)Ép.xE "¬ëC¦‰¬ã.¿R7íÙ¹h|ú <½xžn½\Ýuiõ³VÏþÆ^“W¿„ 6ò'd¡Eº;šüü9ØŒŽpoýåâ:³ÂœŠ”ä$$%™7ìV7 š´ée˜Ò#F¶Æ“Û‡£³-­Nê[õ Œkø1¨[_ÅÙ½fÀÅ‚ðV2´8ó ¼Ý—ïgîAiãb³ÇSÏþÊë\⯈5á_:Ž™ys±|áÌ[gÇ1-öaNÀıàÑöbákÓ°{Àe8§{Ødì^ŠÙ‹~Â’ü£qÓõC|Ää92*Jàu¦"1BÕU|{-.Xq%>¹­ ÂÞ@Þ’bTÙS‘îiÀ}”Õ ´¨ŽÔTÄQ.ÅØÇ|äî¯ÄßÖz•sí­›–çÁÕ. BÍ;d"tM+QˆG‚[‰P˜[°dC²»vG‹Ä#Ø+¢nÅ;×\‹©;zàÎw™Ù.!!‰TBBBâH&RÙ´DBBBâPÉVž I¤’H%$$$$‘JHHHH"•D*!!!!‰TBBBB©„„„„$R I¤’H%$$$$‘þ¡ùá ÊÓ !!!‰ô#°a:z=êãRmïxkæ6½Û:+ÅŽ5«°’F6‹±Ík±³\¶–Dú/D°röî-Daá^løu’³=Ø_H¿¢€¿^N3í™ûr·aýâ•(±ø±sG>}',܃¤¬ldgg!>w!~Ê×þÄ=­Ä²×§àåUá—ÔmøòÙOð[@þKH ø—εg¨Ü¶ óÖ—ó;I96/ ¥Ï/˜7ÏP šŽ?ǤkTçcåo´?Eƒ·Ú•iP« ±c[ŽhÖZ]TÍ—ÿ3÷5í›ìÁùW?‰ž?Þ… {Þ¿ Ï—ÜŠ¯þ¿³k…XòáW¨pŽo!‰/þ…´  F1Óoe ñÜ~Løïñb4qx1 šb…µâG¼üaš±*´¹ôLt@ÊKªàYó ž$x\vØ,ÑèYåFÌ™‘‹§žˆNžCèR¯íÁ»ãŽÅô‘?`æ™ëqÕ˜Y7ãWø1ù¹n9¿+¿#Vá§—^BÅé“p|ågxfy*Ú弇7—Ñí’)¸ód f=<o¸}Ü|•ù³ñêOmqÙØfØ5û<óá2äUZÑdø5¸ëŠ~HÊù¤î:Nm»Z€_|/Ïß f­†ÚéÜsý(tJ‘]ø%þ¡f{;ÿû)+êϧcI‘~÷nF®Ò Ÿ¼–S›o‘pôé8E[‹ÊÔ®(Ûº»s6 tûb|¿¨]¶C_AMÎOXëê‹ã† Å€ÖñÑÃòX5Õ5ª ÕÒç<øL=õfܹ¢å—OÇñ‰@põb|c<ØñÑëXÛþ-(yaòÔ þûú4ãÊÅ«g]€§ûÌÃ]•±Öñ!Žÿú*\»úÌùðDT¼y.ÎÛœŒ6’D%¤iÿoÓàÉè9þ?è)~ `ÝÛ÷aA“Ü4 OJS<Ùh“íá¤Èà-‰SS‹°l ƒªZÑ´ç1hºd1TM·"ß‹šô:[×=•JBwŒ™Øýð|Q¯ÂC§MÅÈŸ'bù‹Ùnª}®Ôñ€-ïŶ|Æž97½4%'wãÜg\‹û|¼öÂj|?óU xÎLÔÆGž¢EpxC&ö˜…ß#F9vÈ#¼¨£Ò‹¾`Z÷›ÒýÃ(º.—>Ú‡›õ¾dS¿˜êùíæ=ôõs+@Ï••ÞXMØÍª.ö˜ÚÚb.ç˜$’¹*$ǰwÁZvX+JWº#Û—Äú± ªòPéý‘TÕİwŽ.nZn¾DX|4–Aw°RD$åawOmc§®-½ d{ŸLÄú²jÚYªþðÍòýýãˆê²Ý¨îDëÖ>¸Y—À½ªíK\~ •º¶Áv‡®U3”ݦq?šþö9U!ª nÅË–HÎú*òwáÚwh±Ô ½6½}]¾Xð+‹È$ò’±M&Ó1+‚—ŽßÖålºîD³~Ý©ïþ̤‘á>³|pÚ‘BZ ¶y,Ѩ2ÌИƒ³Øh÷ƒ½þWÏ$-ñÑ)X8Úò*FoüÞ‘ôõΆ¯ÊñDúD ±“0stÄêEz¨¿Â¤º_â¼u;ƒó«Ò-Ô ÍhXÈ1Åä¯;$ÿHä¬ý«>MÌ©úþXJÃ/)‡—BUÖxÔ­‚­…-VÙ-4kÏV42ý_Zc¦Ø:¾‚„êX>b$‹îTä›eÉVc•öù,^Á.JÓŽ0¢SGŽW,„eâ=n„eÐü"RD%Ò"ý·[¤’ÿЂ×&ÁÒ¼vRD%Ò"•Í$ùŸ¾¦6äu¶‘ !‘<[Ù‰D"…T"‘H¤J$‰R‰D"‘B*‘H$)¤‰D"…T"‘H¤J$‰R‰D"‘H!•H$)¤‰D"…ô!HKMC¼¡²õzƒ¼$É?\Hõ¡øLû?6ÞJz¡˜ê‚ްûrì“}ôþ;Xz(ŒçdRÄpiÿ BÒ”‰Ç™;ë±Ê—´ÁXwø^zH#†~l]»–µY—‰J}Dx¤RÝEVÎ;L”“D"…ômG]ˆVýª콉©¹ª-w|O¥±$ÂgóO%`HŽ$â‘îù]UÖ8èN°tÃ5RÔ¦˜j4¨Sn³}Í9lŠç¯Ó$_eZ7v",®:¸^€æ-Êãsœå[¯+G4šª}«›N{ïOMø˜Áý‡0vÚü“ä…/‘ü¼Åaôtø,bOȦö»T/™Çá'N¹5ºwÅ˘8õ&gî—¦^ÇX.lŽÂ¼þ=ÂâI Áß?U)Ç‚¼î…° ;ÎÖ3F+5?n)Ù±%’0=›GsQW„§¶°þ”†Âµ[âa¸GÔÃ(’R Ò“˜ÆÝ {¸Yj0×hÒk R½½éˆÅÃí|Ðn&®g2aàÜìa´ù@Ç©eY”%’¼j(Öd ÃŒ¹<ãŽ0ƒýWÃÒha]^Ê7Ç=ù~xUÌôTéy?R¹½s·ÝÐ9äOV˜V ¶>‚ðè$Òâ#¹_qÖ Ö˜,ˆC¡´s3Á$í.,å†keœí@üCò8¹Pº~Ê9ª*-×£ˆŽM@›¦"6FOš6è¨Xœâ%î¼H¸ÎžmÁiל26]µô7×1û¢¯,Çû¦#íǧ֭L^} û–_0q`el"ö0k· ϘMü~4âݾæÛe±²©ÆhïÕ”ñÈŸþ@2¦Kù¥Ûyîê!•Ñh%’¾ko¢1C£1Aíà‰GÚn¤¨0QjæLޒŰ4Q£15E­^Øá…¬8›‚98¼5ˆJ=ºÐ°^=Þ+ï‚]/ê)Ÿ4𢰥ÊòšÔÐc¬œ¹‚`¯¡ {/*³’´ûò;>¨¥ãào¿°Êï!Bm‰›guª¸Za]Ì‹ªUŠáh_„*ÕËãf®ˆª^ÿ%Õ’’”‚ö5ÇOõa²p’7É}æ²dŒ%sºv`vt7f/ýŒ< G2ß_ˆ=Ϻ “9à>šYÓ{‘úKO&žJ gÊy8~n/»6/å‡o÷QtToÊI•HþBúU^ªUÖrò¤"nú`ü®:PÃ+ïÓu"…x“Êôê^kžj`|FÙÿ$§®Gz)ýóÉÇ9‹!á»÷Eá9às†¼ç†™°¥G,Tf䝨ž¿èEE{³ôqR‘ˆÏ®pÊÕvÇD¯C¯ˆ§Q>Mœ[1¶³-¾G.®¶À,§jÛV ÃàT°}]Z±~+µ¥kIkì*7¤²¡z—ÃÖ¶<ïUJ"8$CÐMÊõä㎥p)Úœ‘½ìؽí2£Ãz…ÞàÚµ›Ü}¤%1<‚x99&‘ü\ûl’„}æ¸ÍÜÌ>­ÿÒ­ië¨ÊªX”ªW}ÀzŒ©¦òº¹ž¢ž*ôÑŠU§&€ÊRM´ÿ=t6iÙB€ñû©!ø]W“pùiƒ ÜIhBËBq84éG-75*Q“Á}޳|É)º¬‰©J‘¸RtíU [Õ›=sËǹ‘Ô¨­¬ÓSA§o1ƪfö¦ifýUØÚÙr79óísÊ´¥,ÊǤƒŒ¨4žåÝð±»|X"ù ©±¦îÔ÷Šç›u&ô˜R2=+_n¢cš·8žy3þÒé}±Ò§lÙBOÍo×6ô¨üXù D™CP¬ŠÚÒ êU‘<™›Œc *,Éã0;·gšp©ÁÜ „=;"ŸÔ!9,žÏç”ׯGž¢Ep0}óM¤»åÇÅ„4¶Màì©@ÊÔõ fC?ºíÍÖ™MÓ'—DbQ:¼,åL“Dò¯R]Ü|÷ldw€+={©95o1);Ñ ´#IŸϲ‹Dîñfí•2ôÞÍ™?X²"‰nÝkáböx7kŠÖhB!E&Ué_9A`(4lZ›ÌÜö˜˜‘“,‰X_VM;KÕ¾¢Y¾7/\&¶÷ðÐ……i÷4û˜%Ý ßd<Nóú³(R@q7• “çг€R‰äoóßÞtÌ‚˜ó›Y³ï‘”nØNÍîEòc­~~»!9аp-öîÎéÖ¡ˆº†o”Õ<있ˆˆ âzB~Êd9]$þ7’ÈëQ‡œTE÷ˆ;×±*W ³ˆ0éT/H!0É㌛ƒùÿLH A‹è?͉Y³:b/…R"‘B*‘H$ï’Êi[‰D"y]±•M ‘H$RH%‰D ©D"‘H!•H$)¤‰D"‘B*‘H$RH%‰D ©D"‘H!•H$‰R‰D"‘B*‘H$RHß‚´Ô4ÞL† º4Ý+—- : 2U‡D"yç„TŠÏ´ÿcã­¤ ž.è»/Ç>ÙGᅢ¥‡Œ©—_ô¥ó,™´™ ëTDÇ•åXyM'¯‰DòŽ ©º­úU'Ø{7RsU[îøž"JcI„Ï4æŸJÀIÄ#ÝK›Am®AýŠUјZ¢Ñü—ƒ~&â3ós†öÄ'SÖs%.‡Ç‰>-“?gìØ±™ËçLÝœþ0û‹¯X웘í+Úkkøö‹_ÙfwƒDòy‹SèðYÄž ‘Mí5v©^2ÃO~'jt1!QêMÎÜ/M½Ž±\Ø…yý{„Å“‚¿ªRŽyÝ á 1(â¢ÂäqÊc8VUöàÍB0ÙäñJm" zKl,TÆ´ûêIÔZamñ†EÕp—?útcKÍÉLçFĶqôêÏöÍ)œµqô7ع/‰ã:‘ID…M1§ôºb}Y³r‘w*ÒqMw2r&stÞÏ,Ú Põü˜f®rÈ\"ù‡ ©†bM2Lù¿*îó7XÑp5,švy)ß÷äûáU1Ó+’˜n¦r{çn» sÈŸ¬0­@m}áÑI¤ÅGrÿ¾^QkÌ Ä.ü Öž'ñIî¦8Bc þõ6v™Z" *J´I‡2Y¡’/®àÇËuøv@Ù'v9?÷â³aÕ±ËAKEÂuöl ¦H»æ”±ùëb«óËlÃHv}ÚŒüJ1åǬÀç}yŸÕ½´G$8yÑ¢I,b“ÐØçÁ<ËaÍju§Ù­UlïÆ eCÂAÖÝ©C§R2n·DòRÅáÖ˜eX£žx¤mãFJu¼¬aþÁä-ÙK5*£C®%ìðBVœMÁªÆo ¢R14,¨Fw9ß@/êÕË’E´Pc†müTð¢ðóW>jÿ1==rhEh/œŽ¤bó2Y²—ª°­Ö™†Çf²æl)†V³{>͈В’”‚öµ&¦ Ü?ã‡MÅêlÙ‘ —B‰ÒTaĬé (ôl5²‹O;n&AÂÝ»Ötµ”±µì3•´=ÛãÛ Á Y„8ŸõD6@½m'‰‘÷‚Dò׵ꨥ*/Õ*k9yò!BŒßUjxå}*\"…x“Êôê^kžj`|FÙÿ$§®Gz)ýóÉÇ9ûÌd• )ÀŸ´r…=qUqvŸSC.ofiVü‘5ÉOÃ^ x´e#—ŸWK•m: î@…×Jz/ˆ‹‹%hëN´C–³çèiö}ïÈïý&ã«}fWó’4jѯÖncÃÆ½[Y—Ýý”e? zt"yÍné²}S-:‘ïÀI$ÿ !U$Ó¾FsÜ.(‚¶ÏÿÒ­©å¨ÊªX”ªW‡bVÆ?LÉëæ†£]ììì°³6CcnñYYl-ŸCC$'ŽÆáÕ¥7uSö³?D—MÄý·òÛšxw¯™cR9ç†ô¨yŸ[o’ò†º(¿kD•® ©hkÙűv?Ú[œÅ÷Aö "•Sc>›Ø‹R™f³Yñ÷¨¦»Á,óKêRÝyß|=+v¯g«¡-丨DòoR£1åN}¯x¶lK¡nó’Y\ìçE×4oq<=ËQ¶lYÊvÀ*_ñôÏeËyRÆÍ&‹ ®ãþÁUœvmKCWGjv¬L÷fn>±.ÓˆƒêCSÛÉ$×Ñ‘B-Э‚ýó®½6†à[ÁÄh_ï!âÔ¬3UŽàŸYë»G8ž\Oã ©ˆÅÿä1®?TDÿà´»—èÌê§^ßÏIËJT´ÉÚãEèÒ=?+‡ÍÄ´c[òÉŒ£É¿CHuqw8¹~3NºÒ³—§ç-fßh^KŸD2Á‡°àbiút.“>‰eR !}'°v¦7g#¥›S¨~¹[¼8Ͳ©+å<Ÿwë˪i«ð}½·÷MÜú2cT"_7ªOû.­iÐ÷ æ|Ë{ÆjÏ1½k&KÃú½áôM›JÓ÷ÚеS3¢ß¢±TÔdïr׎=©bUn-‘:*‘ü >óÛ›ŽYs~3kö# Ò‚Ò ;Щ™'NŠ(袮°gãVN„jp-^™¦]šâa­Bk-snÔfD»§Kº‹Køév#¾êäþd]ZØIÖ/ßI`– ìY·l h öê6¯¾Š{ÿOé\Òâé&}8çöüÉÉS·(2ü+Úü·Ýb}1¶ŽÖ/œ%Ô'E+V°5NvæR(%’×µ6ßõ¼öºÈnÆçÁ½H~¬sx[ÞEX¸{wgŒo‰¨køF¹QÍãé ºˆ âzB~Ê´Î29•ÀƒHyó[çn’kÓHÓ˜a–íåÒÏœ'Ê©•J8b*¯1‰D éÛ.¤‰Dò.©œ²•H$’×[Ù‰D"…T"‘H¤J$‰R‰D"‘B*‘H$)¤‰D"…T"‘H¤J$‰R‰D"‘H!•H$)¤‰D"…ôG`Ðx6‚¨0èÐ Ù:‰D iúTHH_’IËš±CÈÆ©+¸š5ãîn™Äß´,ëÒ¸{À›7“ú*‘ü»ÑüOZwc ãצа†=Gná1z­]2Ÿ)* ¦æêçž0Ss4ê'ᢠ?¶§é]Ãò¿<Ù}–3–pä¾eÚ ãÃö¥°~\›ðãü1w5Çîêq©þ>Ã5¢pî¹XH<ÿS×™Ðõ‡>Tx|$â³`>›ÎGaåÑ‚Á#ºà™G†…–H¤EúÔ.•iÞ²>¥ìMH 9˾½{Ùk\ö"0:¿ý{9péU•ñ?£®¤Eà·~ /–bÈèN”¶ù/ˆMÚE~î<ŠÓå†0îÓö˜¯èIŸewÓë&ígLëOñ+Þ“1£»SêÆ8ZÝLdnfrâ ~œ°€+wrKÿX¥ïòGŸnü®mÂÈqchc¾Š^}–r× o‰DZ¤¯ÚE([°&FM4„ñÀïîå<)fm›ÅÚÔsÿär~ÚŒ]ƒ>ŒîR‚—i¨H¸ÎžmÁiל2¯!¸‰{f°Ôe gºUÆNù{ÄôloõgzýLÕ»è{ÍdF¿˜)ÛÊÿø ;Jm㌶#­Õ7ñ7ŸäÿÇÀôÄM Ÿ<•ø!ŸSçS狀ï\fF²ëÓfäWªY~Ì |ÞבWŽ K$RH_„>ä$×]!8Ú@yÓ8.Ä«smò¡ÅÆÜ'W\Õñ\ß¿«q*ý#¹s;Š’5j’?þ{7_z,—Dª¶«‹û³¹G„–”¤´¯5ˆªÃÿì%œ½¾Áö±áR•Êb#gî¨Y~8sÊ?Ý;å’þEËQÒ˜ç@èHŽ{DRf–À„c“˜ôp0+šÚ1ñé ÷ÏøaS±:[FvdÃ¥P¢4U1k: ÉD"‘Bú"×¾P-:¿_˜ý‹f(·š-ç+0¸r–T–¸U¨…"S¯Wu]αrS"Mú7ÄE)¤srhI•m: ®ðš5éblšÏ,KÁÖØZ¥”œ]¡Óîl`ä'§é8s'éu+ÇÀ¹K«(?LcÀÊ¶Š¥y4[ùqq±m݉véröT´&æÏq´ê7ÏS“©&SI$/E:oéÂdCÅ6µˆ?yŽXCöçLžün¸ººÏÆ K\˶¡oíhû&bïì‚‹b¹º¹9aõƆJ5.^ˆ!aOÆkÑGp?®E]ÔO†Â~OÇÞ©4wßÖ´yΪ½ðËHVël¸±h2“~\oô56þô{ïB~׈*]RÑ8”a‚cí~´·8‹ï9H*‘H!}©k¿‹KÑbaR )£?ª‡ÃK[DsÃ~4KÙÄü$¾Èmׯ|+˜ík©<Îm»QìÐJŽ<édô^oÎT{Ÿ&F__Dsò—÷é:ÇŠq[Wñ‘—]–l©±øŸ<Æõ‡&é5Ÿ5“zÒ¨AÔ«DAËü”{¯&%ìMpjÖ™ªGð‹Ï”Ý»G8ž\O9H*‘H×>×§‡} j4q¥KC'®ÚAXf$RMŸ•/PFm7à”¡}»G½u1Óg¢iÇT+bóÜSIÄú²jÚYªþðÍòýu“ÕÄ­/³¾<Ç€V-YPPEØ£ LZÖ'¥ÈÄÒâë£8WºÇ˜Ö3¾`Þ˜)û&ÓˆsLïÚ‰G¿E°ªC ê”||zÖY£tíª3¾&•§/3F¦_£úäQÎ#*†Nsæóž¹¼A$’W2wd:æ,—x›ãŽpôª}¾hO¡'ʨ'`í8f\p¦~»N´ªYët]4wûOvl»ˆmûá´-föf+¨K$:NÑ=Gë7óÔ'£X½¶oª|‰ä]4¼d^ûÿîÁ¬TJ8fŸeÑEÝ'ÆÆ…|ÒJ“H¤>#¤ÒðÈÖbù)[+Îc NŠˆÊ’H$9I‡l‰D"‘B*‘H$RH%‰D ©D"‘H!•H$‰R‰D"‘B*‘H$RH%‰D ©D"‘H¤J$‰R‰D"‘B*‘H$RHßVi©i2‡¼ä/cˆŽ ò¯ÙÖ¦"Hrá݉þ¤ÅgÚrÒ:¦³‡U®¹äuAGØ—P‘åíÓ÷Ñûï`yhú5t}òÔqAø]¾GŠQ•U–¬Pwëö¯ ¤l·¸šŸi-éyplŸôíF·¾£™ò!†Ö!•À­ß3 kw†MÙIpÚÓ>çrr^oßÃŒ¥{Ù?m8];ôæKïk$eŒÃ(ý—ñÍ€ L[sí“Ò©C_¾Û„6׺%xr>>û¸™¿-Õ¯Í'³wà³}6~ršª °ßGÙîÃÑ›2ÇÞU¨Ô&O†¯íáèÃ+÷GÊ¡_ùñáüÔÚªÐò‹|Yè »®ëžÃû'`=SV\Éô091ïö„^ÐÆ`V«;Ín­bsxæ5–puwêÐ)ÓzεLÃÙ%ŸÓ·sºøï+ m¥½•³S®ïèß¡-]?šÅ±g„ù¹kQ é[Z9 jO<Ò®p#Ee4& ó&oÉbXš¨Ñ˜š¢Vi ;¼gS0GíATêÑ…†õêñ^yìŠxQOùÜ …-•2 5eÐÀf¸jM©Ò¿?õ=jò~[\ŠÚpóx U¸c–Ù<öeëPAeáÆdZô¯J‘åü2ëm?¢Ÿbû¼…/ïäxN©‹…6='½öïÒQÎúßïÑþ/g‡J>¶•KÕ'²rQO¢~øŠõQÝÕ_éöÙmZO_÷ÄJ>ŒÕŠ£û“…“¼Iî3—%c,™Óµ³£»1{égäY8’ùþzå»Óèöy í¦­fõ´¶ø5œ÷ ¹ÖA{n =5ðÁ¢ÕLëÉÑ“©é7dnåä¶^ÄžgÝ„Épͬé½Hý¥'O)eÅ]bûΫéÙZ aÇXüÕ4.×ÿ‘ó{òpâ笹ÖMŒ×F¹FÜèðÓ<†”³@cY–A³~¤CAãµ¥l3Q!²$<4Ä\bçꕬ\¹Ší" =µ^ù¼2sY­¬‹z:á™íxz‚Μôö{”xläª\è»|c+d·ïrëƒâý¬?œáaˆdnølá|¬Èµ3”´=Û†ã½!Xy b}Ö٤˓:äZæŸß3h›“¼7±ô³"™½‘`£¾fiïäãßÒkŽ)Ãy3½Õ-¾þdÃS—?‡kñßÌ»1Ù¤ÊKµÊZV*ÖK• ø]u ÆÈ¼YÒ§oR™^Ý °7Ä ÏF5¸|†“!Æ´ËÄE^âäÉPL”;K¿^yγü„-õqÜ ÄÉ¥(¦—½™{Ì–Ü916¡^5©æUwÝY–-ÜÁ]«æôv²$EXP¢n ì"/s*2ãðÖëPÂéùg’ʶWøÛš!íü|6ʪ'³au…÷ü^,Tµ©[ü{î¥qsÛF ]VÒÄÙ 5ŠSw2¿ì‰¦K¨¤X%­±HkHeCz—ÃÖ"÷*%±%$•+GVq¯POB}¼ñVn?[?6í¥o?ÇôöÎ^×¶î$O÷­Tµ3ÁÄ®ÝjÍå¼qomNå<¤ÂíœËïUC½r=7¼Ϊ’Œì5•ŽÛ.3qÈ3Þdå|T·ÖÔ¦¶ûDÃŽêÚÇšâušS\<`ÏO“ØýÐ,ûÅ®MíÓ|R?KújÓš|:Ý”À¸Ì,Í1ؘan눹I2Ž˜*{Úd™™z¶-RSÒ°²Î}"ô±5zssÎýÓµXÎC\9·ñÓ[¸BN$^íá»)?Aq ^|KÙÚ£¹¼ŽYó­hT­>“óÀx ?}dj9¿y£f^hùóòÇažëµ(…ô]PRìk4Çmæföiõø—nM[GUÖ«‚Rõꤻ1Æœ}yÝ܈ OQ¬WúhåгÆÎÎ.]HU–Ê)‹TRR¬ÒM]j4¼7p6Ì€c™r„ÞIõ=:] i†T|ïP¢wgtŒêæôª‹!*íÕlÖ¶¢[+¥s,ß´w#¢Ø6÷&;ùË,íbfï™ÑTƒZ-0(ÖUbB–Žoh–f$'¦(²«ÂÜÒ"Ó Q£¶²æñ<™ÊDù®A—ˆƒ[1\œ3Þzpþd1mKe–õ\2ŽeUÜúi™jÅ=&·r,I8ŸKùÆùiæ©ÂÖΆ”»ÉϽîfá`E¦· RéÐêÄ ÚǨ¼±\ú3•f›gÑ*‹é”´¶'Ýn$§ éS(eŠÜc|×c 8¸ˆz7§³;Ÿ;aKûã;`3K{Å4×þPSØÃ‡;I¢ y2EðæöåܫܟO;2÷þQ©² ¨N÷¢6Î2[ª;ï›waÅî<Ü4´e®"nkž\"9•©4uåñìݲ‹Û³îû) {ІUG§R7k=ãS°´²xÒ6åªå{q[K×þ]|wê{ųe[ u›—Äü¢kš·8žžå([¶,e ;`•¯xúç²å<)ãfcÌAq}iì)T¦-‡|ưÚyp¨Ðжm[QÞ<Ë u)›×šÒ­»Ó°ÐÓ£iì\)V¬(E”mVy áîî®üí‚mN-©!øVpÆ×ëN1\_Ìëôv7yé³±TõŠ„;AúœþÇO©©ZÝù:[CÙZ^$F›Rµqš4©…ÍÍ£¤™æRåX^žžô%}Þ6Ñ—ŒïúæVŽå Ë×ÝòãbzA œ=H™Ê¥^ùIÿÂöQêµø‹±ŒûtùzååçÞv0Dìæ“îsqüí2HíÁÈ•SqœÞ™ÛßXlÏO…CË>4ÚÔŸ—኶Åó‘?×r48¹çR¾¿rÓÛÞÃ{@¦Ý#Ðìc–tSJºÿ7´•&O¥E‹4yý=zÆeyæ…lcL©¾Ù¬VÆ3xêäšhÁ´ 1ôm×›Y%}ø¤tRŽÇS9udÚüKôíUm.H}õ§,§K^¥ïã_Þ?jCwª;ѺµnÖ%p¯jkœþÊ¥³ÛC®{Råç½tki‚yú:’ºl.e–ñ ´OKÎñ  ¡ÜsÁ²J?„<í[×Þ?2°÷Pš·wÃ"2Žj“¼)lÇ®ÿàZü·ðçµÄœßÌš}爴 tÃtj打Ƙcþ {6nåD¨×â•iÚ¥)Š«¿µ–97j3¢]¡'Ö—îâ~ºÝˆ¯:¹g®3ºïW朴¡BeO*V«BigKìRžÌËSÅYÅÃK—±í1†¶n™¥$Ÿà·éÑtãEô¹@âUÏ<‰…Añ|ÊR½¤oÂÃ7ÜžEÏ_‹2N[ì_ùRc£H4sÄÑJý·½6>†dsGò˜½JtŠ•©¨RG¬5/.'·õúS©ÿE~¶lìi¢Šìb©þOûGK|t ޶Ï ¹µñ«[™z’c”:˜:’×F“ë˜nRL,z'lMÿêµøŽ»í¯×>CIU*e1U e±V{eɧ,•¥¦ø¡}à/®ÜŽ ºœ·ë“ŠÀû"Þñ·ááUqúf¬0dÙÇ(®†$d[—/R²®P¶&ß¿)îÄÒ?'†ÝYwH½+|Ýq†ÿE+¤Š³?Ó¯hÅÿŽ7_}àBÑgÄ&cø›ëfˆ7þôaúgŽvNœ NÉ¥Lƒˆ8µ^¬ÙŸSŸ¿ ýñϽÞFŒ˜©…ù2µÑ:S+M3µSõ[¤‰DònX¤r´X"‘H^WleH$‰R‰ä¿†!-™Tý?õì´¤ieÿ4² $’WEÇ…êók¥?YÕÙüöOâà¤1užÃ 2ÏOß믭dòy/¾îUæÅ7¢!Œ}¿ýα°pü#¬)QȯÖ^„î<ÄõÀ (ZG“t׋b—WñÛî;èQaY±Ÿ´-‘>題?~ð£Æø>”VgœKĵ³ÅeØSŽ%«RÊI‰ Ü?´ŠãiU‰E%Îóké<(ç­*c{¨_-W¯¤Ÿ‹ 5»ô¦Ð•E|¼¦ãûÔ%a'Òñý ¢s/Ú98QÄLðàÌîVœÍK˜[“å“vbvŸ;ÁçÙàcB+íMì™ÕTìIo—{„Ft–0§ÌƘ©(iXÆÇcTÔ ý ê˜û”á£V™büwÙ½÷þä…8u' û í6¼ %­¤JÞ´ð¤\aóÒKxŒ6 i§&d†úÿØéø÷(MF8>þ·„4ÖõŠÀ \4“TœžÇ°Öþ,;;…jéaÜÔoí…©21ù\êÖÍx#Ó 8:d ¥ö(_6úŽ âébhˆ8ÍÆË)Ô=„ÆñÞ.Áû&SGɾƒñ¸T÷áepÖð@S“‘?}'ÁøžIäJؘŒhe 1¾œ¾p—èûNŸ±§jÞŠ<ò;K@TÂ÷gܪP °½ò`2A­=ÍÒÓ5øì³JÜè?‘;c7PwNÒïbzƒ¬!ïÊSBù7ÍæûÆqrý5ê®8Åg>2(j7§ÛdøÔ« û…T<ÜÎífâ:q& ÎÍF›tœZÖ•RÉGR‰Øú1£.ô`Õ¦êdÜưtó™²à(÷q¥áãZ#‘mS÷à:z(Õ-•ú¾ N”`H''Î/ý‘Y;o‘œÇ“NŸ~IwÏÌß§d†ã[t<^˜Ð¥f¤rÇg3×úr/A[ãŒâÂÑÿ;H‘1¨lÁÞ;pü`U-R9·lIUì9sÍ‘’·W²ÔWGùßóM»¢ÏýMeåF…5©d¼«šppþ¯ÜHTKãö8ÜfžÍ©¬ιV^ÅAÍ¡¾Ãjbw;·r^j«“–”ŒÎD9™ 'Ug‚}‘rxzfù…H&)Õ+U qfõùê÷ Êy%r`TΔ,FëïðqQ¥Ý&´^Bª0žÛ*þ«Á'õjâ¬ô«µK ³¾cX[=¿|Ç'K*0èqñq¾ì;pÀˆ1ÅÿÆv-_„s2eíä›-×9c1ŠS룾³–¯Ú/Á©zu6t™Ò ‘vüSQʽ•øéH¸H~¸S ­ÐE¬|húÐå¢o矄_¬²SJ ø½}]1Þ/VlXCŒ9–& Ñ«D'û"⣃)B¤c:L},ʺ·“ÿ  ÷w‹½ºˆUQ†g^¾Ÿ.ê•x_LÛ¸YlÞ¸Jü6¶“hóÙnñÀ±­Qó9"ÔX¯#9—•ó9ës©¯6×r^þ+0±ý»¢ÿÀAbÐ ã2Pt¬â,<š Èü;sÐ_Œõ:Cœ ¸/’ŒýrýWѼå4qd^w1t[bz?Dš'foõñú‡bKÿ*¢óOEÛêƒÄâÝ>âÄíbDËoÄò uEÑ‚•ÅGûе=›‹Ùwõé?0<®®òÝc“Z‹:M[‰¶®·’¯WÚBÙéžr¼|ÂÄúG‹»½Å²¥KÄO㟶©!ÏY!–Oë#êó©ÊWRv~(y?ʼÈÂÅ‚^‰=ʆ” ½EÛù÷….b‘è>t‡xög ©Gˆ²å‰å·D쩯DõÒ ¯ˆ¸¸³b|:â§›J]®ÿ(j®'¾ÜxC„îŸT©(¾8ù¸$­¸ç·GìÜ´DLèÑLô]vKhßñò¥Eú®Ø¢Ig˜2â6mVÎäèßã=t#}] ¹„«Kaíûõ;χ˜6åYØ•NC­QÝÈ9tš6Çp|zL*ôaᜠìß¾€™N '<Èœ±-K0Õç2qÑG1iW‡{Αd½ÿrW}Õ CÝ=?L *<K•–x­bE%ů§gmÂçÊJË圡þrª¯ò½8üž1˜qÈõ»<2˜`W¸ …òdÚ`&.´™°„6Y&›.}ÿý.8S­ÿHÔuy.gÁâ¶z™ÿûpUÞO;ÁìY¸ðh#CæXòùªØ‹¹{#ªHf¿6‘˜èîbHœ ½ºPð—ȧÉ66küÙLJð^¦ÌéBÍèóe:˜®æÓCðþ9ƒš•$J¤ÿ´FàHó÷’ù8¤8U÷~Õ´uÔw˜ÛuêS?)µ·2Ç`o> ÕÜ—ÃG,qõt#5Ο«Wrï|bÑod•þÁÉ­rôŒ^ŽQéH·œÃ"NªYUqƒõ< ½ÁµkaÜ}¤%1<‚xQòvíå|Ü»"¤ÑŠ;½€Qû2¡ï}~þù‰ÙÂÕ9ãììFÝOóm#+,jv¥ñ­ul=¼–Å»P×òqè´‘xÄû±îûNTªñ%G2nÔçÃñ).Üí…tnö%ÇôîT­ß˜Ú%¬Ñë Ø6l˱íx+âUûó~”¹°“õ;/Q¢iÅô±¢\CÝe½ð½è2t8Ã?É—ÓÒãÁDfþÝ›çË2äzΆ\êËËê¤áøú5¬Y³ŽcÁ/É€¥Ø…+äÚw©Úq[ýŸñ{ÃØ6²;ÎÆ«¼êâÝh2Œî[k±hï\º3KIWwð ÚT.N^[WJW¬HùbN˜î³éÛµ]ÝcçqS›!x1W·1cd+ ؈ãç›Ùøm]'~ÂN÷OY±âSŠÿ‘î»3ëbÚáµò(„i‚ÎÃ’Â8±æþØp&=˃qÇæÒ½p2áÛ¦2ë\^zý6‹ŠÐywR(©ÖèS–Mm’Càæ—…c|üŸ ‹X€ü&ãùèÈpš×ŸE‘‚ˆ»©T˜<‡žÞñPRr²é1%Òâ¢Ä£ÔìkãöŒ¦\ÙƒgéDRt„ˆŒÅá}C²ˆy%uïÆ9¿Ùúj…ß75Eß-¹D2è3¢Œé.‹‰^ù„G‹QbÑéˆÌ‰”4ºoŠèZ½©˜x&s†(匘þÅ2qË8s˜ºG|Ðp¼ð3îlˆÇ«tÞÑ9OŠÅí)ZŒ="â²ÏŽ‰Ð¹ÅÐJý´×ÄÌþ#Å–;AbÛ—íE½úÍD›E§Î]Äû=¿»dD:‹ò™ :Öm'þïêÓKZÛC´œ*ô¯ÑRÆÉ¦:í‹Hm’ˆMÏž…>9F<ˆŒ©†·ÿî’ÑŸþ­èX>b$‹îTä›?Ò,¯Ìòø7Tså þŽ ©þÂ\EZîÝ Á®d1lžmz!ÒSŠ<×#†\8þ÷ºe±W¥â¿+·›ÐÌÓ1çñ7m" kl̳×/ÎoÇì:ЪDöÉ=å©ÃƒˆR„ µ yÝÓÓ„b‚ Ô xþ§ñ_u¡¾œIó¤v±¿žHÄ´ˆþÓœ˜5«ã;·ôU¢?I!•H$’×R9Ù$‘H$¯+¶² $‰D ©D"‘H!•H$)¤‰D"…T"‘H$RH%‰ä-R!›H"‘H^¬…Ò"•H$’¿Ù"•¨D"‘ü‡ªI.D–E"‘H¤p>¯‰âE®½B*‘H$¯®‹/ríŸ|)QA¶£D"ù·¡H_2Æ4/°F_Å"5rëÖ-_Ù¤‰äßÆÍ›7O“õÉðª©Èa1~9~Ê”)ó“’’d³J$’ FÍûñÇç50!Í&¨êŒp¤é¨rYôׯ_W–S%J”È—'Ožüfff¦²™%É?‘„„„¤Ë—/3fÌøM›6]QV="{üÑçD53®óÑ4É\xÖd.Fá´V[e1ËÜW"‘Hþ‰Å1-Ó5Î9ë2—¬búDP59Õ­×gYc)d¤oòŒõ*‘H$ïšh>«yYÝ ,Ñ'hr)ØÅÝ×?³þñÁL²X±YET ªD"yôYÍ{Vãô9X r˜lÒ¼¤àgU;«ˆæfJ!•H$g„4« r±HųB*²`Ö ϬËI@¥[/‘Hþ)î}n‚š›[/rrí jÖ ÏX©&ψ§R‰DòOÒg½ïœ>‹,ZTY^âq„Ü_‰Rå°¯D"‘¼ë®¾xÉBNbú¬æ&¦ä"žrlT"‘ü”\„R¼`/Ò dnV¨Q‰DòOÓÜÄR¼`ÿ\…ôE)ES"‘üÛÄ5·uéhþBa‰DòoÒ\ù#„èàᙊIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/main.png000664 000000 000000 00000336456 13703317554 026261 0ustar00rootroot000000 000000 ‰PNG  IHDR@º9&) tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp ÏùÇ2¹žIDATxÚìÝ|ÕÂð³5½7R!…t …€Hï½wDŠÝÏòQ±>‘§ÏÂÃÞ ‚Š"Ò›t j )¤BzÝ:ßÎ&MH \ÎÿçÈfwfwçN½gïÜ‘H$´P‹' """""""ºÁ„–Œ,¿Æë’f>GDDDDDDDt«5Š4€H®ñXr•ñ‰ˆˆˆˆˆˆˆn$¡‘¿% ž¯{®±ñ @$Wù·©×>&"""""""º„F›þÛœp䊤©Ð£©Át\"""""""¢¿KÃУáP÷š„ ¦ÈÕBiÑà1ÑÖ0ä} C®ÚÄ4ðh84Õ„ˆˆˆˆˆˆˆèFk¬Å‡Þd€É¿uã7Ú¤a_¦á‡LüwÌÈ'‚ßYøì«~~­zÊd2;–=Ý :®,--kÇc½ôê¦m?œÅå\£.1 ?Œ%u4ÖêC ?dcGÏ Yöëÿ6Æu`1Ñí@„’!ýgö߸õû3†?uµC]«z-F @.µú¨ýWžœœ¹8 À{(‹–ˆˆˆˆˆˆˆn'ÉÉikƒƒî5<ÔârR÷o“H½–¨¹DF®V«SyÙ Ýnt:]…R©lƒš¤.¹¢%ˆÔdš&/ƒaøADDDDDDD·#™LfƒËW²4v㣆·´®¼ó‹ŒÅIDDDDDDD·1Ó¤.ë¨cÌ=®ÖÄ4!"""""""º]5ÕúãR"od" DDt[¨®®FUU*++aiiÉ!¢f÷¶¶¶Ë寉ˆèŽÐXROÃäŠ&"MDDDôwËÏχB¡€££#œY DÔ"Z­ÈÈÈ€ŸŸ „ˆÈü5–aÔË3®ÕÄØ D%Ý4bË1ü`ðAD•ØúÃÁÁAìÏØŠÌÊÊŠ…BDdÞšìüÔt„:Mµþ` ""º©ÄæëbË"¢ëemmm U‰ˆÈì5•c4ÙÈ ;ôz½1iÿm ©TjÅÉɉ…ADtç¹æ%07äÄõ«,G(”-»tF£–`ŠS6ìííMŸÅ–DÂ(DDwvxJDܧÑv­ä/]#¶ühiø!§¹ÿ?8[ùaLÌ3;ÕxÀbBDDd~:„sçÎûûû£cÇŽÍŸX{ X®_>¸œåxfîjèb{ÁçÔ Xó‡> pއI]Ü!…y;¾À—; 162Ptb;Rœ{¢£g]«S=<Ïø{~"""¢¿Û5ó‹fã[Ú êõtšZß9Îyø¢ü ¬NøoMÙ G{g^CDDd&Ä»sLš4 eeeèÚµ«ñ¹_~ù˜?¾±óÊk“Æ“Ïrty)(¿û|òXúèY¸÷¿Ý޽‹Ùñ0±‹;tÅ™(të1cë¦Õ!M{Ú ‘mòYòËxÙò‡sÄNý‰ˆè¶û‘CSl”@“ãÌÐ<ôu>š~îέ‚™—_~xóÍ7/ÛÅÖ£sçÎ5#¿þúëU¦®ÀÑŸ?Ç–Ì‹8š•ŠŒ…!Ï_ƒ¢C?âýÅQ zèvO·C™ïp±Ú‹â?ÞÆüÝ1)Úºö=ÔÈTÄ"Ö6 ÉÉuï«GÎÖ=f)æõPr!Q=Wk¥(¶h¤kûòË/ý17îŠ×>ÿüs¸ººbìØ±ëw¸íØqª @W!‡&¾#„˜CxyÙ |0s?o_FDDô'ž$&''ã矮÷ÆøX Dl§éMDMœ(íq|pzîšý8¢¾5Gá_÷:`韇áÙûAÜã\„Ç÷×L!±rB`§Á>ØÝEXôo|}ÔÏ=6'–`“0S»Ú#¹p;V)Ùúƒˆˆ?~™£æ\~z£æ}èСxä‘GŒMC1üغu+>û쳿}~oI2ÐýGlÌŸÜèkgÂ/  eMgU‰¡Èv<€‰¿£Ìã½Ü‰ˆˆèŸ)-- ‘‘‘¶êŸ/‰ûiÎ ™ ÎÀö%« ok œ^Ž>”ádæØ|ü‹ÏAÞFñR`ç¡ÿÁ|¨‘wd9½ÿ5¸NÀsÿCÆ»30?Á£ç‡)ÚÎxOsÑæjG‹úçº///cÈa‚˜†7ãn]·$ ¶›„2m:ö¾h8áÐÕ{Í5&‰Û/"¬]'(”З+Q™ìƒŸíæ¡W»Ñ @ˆˆˆîdB)N¬ü?ïJÀñB7<<|0«Ó0g–!B|\ AÅ0X»µÆ¥³¡ ™Iù° Ö~ˆ§OÆbÐðøè§X$-ø/¾”¾€ãœÁ‹m‰ˆˆþ>¦!ÈîÝ»‘““sÓÂÑ-»Æßf8ÁX—'6}Ñ_~¾‡ø2%£uP¨ñ¹ª'„7všFDDDÿ\mÚ´Á_|aìó£a+ñ¹ÄÄD 2¤é7ØÂ®U&Îí×ç7ÁÙ^в”38´ñG,+éƒû&„äÀWxzq9¦÷Æ8ÔLV•„äô“زv/.8D¡{\+T¥ïÄÒ¡.­Bò+!wÎGx¹o+† DDt…›u©Hs[\ >ÿþ÷¿ÿ‘e)† =zôÀO?ý„Çü¦…¢[v˜ÿ…Q^›Ñºl Ò+××{Í;HÝZ Nl"¾Ti8)ÒÿfÞDDæûzó>´··7vxÚX'¨žžž×8ù“Â﮾€ö8¶ÿ–Á§Ó0Lއô…÷fÅž txþ=Œò®‹2T@Ò¦ÂÃì;û ôuØWÈ1÷™lýê(ÆLµEJ™‚ ÈŒ÷)ܯÑõ8xðàM9iÎçÜèó¥k½ÏÞŠ—½ˆóùÝwßý¶¶¶{ç§—Ï"n‘̪?R¾›(d±ÕGMBDDDæ@üÅG¼¤uâĉ˜7ožq4hRSSáëë‹øøø–¿©Ìq½±eîÓXn=÷vv59É‘À)¬l®Å §»Ð©m+8XÖ^#±ƒsÅJ<ÿŸÃpòw`ë""¢¿‘~lÛ¶ Ÿ~ú)ÂÃËAÈòåËoÊçßÔK`œáõúüØU0öò6WŒ—u°¶µƒ¶6ø[WA*•ó6¸DDDf@.—ã¿ÿý¯±©°Ø)ªHì^lù‘‘‘éÓ§cÁ‚ˆmtz}Q2âíÃÙjKtËÜ„­CBJäáÃðŠÇa}`1>~xA,--ç'‰Hü0öV7(j qP«ÕÉ-yÓÒÒR,)r©÷\GÇÐÅåuãcAÐã£ÔÆ;3ýè1 e›Þ­Ã W(ßÌ%2!wYãÓŽ …ˆˆÌ[aa!ÜÝÝYw(±Èœ9sŒ¿ùùù]€\Ü…¯¾8Û~÷`RŒ€¤ep „‹…é-lõP•”@kã¹yY%pöv3žÜ b?¾zg¼î}CëÎ+t¸˜uvÞ­Œ'?d^òóóáììÌ‚ ¢¿5$hÉå+w"ñ.oŽŽŽöù!v†*F­ZµúËï¯T*ƒ ÿ¨jMí 3„›€<â_…ÔÆø8©|6äMltڹцqku)üPØj0< Oô_ÄÛà1¡;(Ù±cfÏžÍÂ ëÆ„ˆÈü5'¹i—Àœ(ý ‘öá¢ú¶_x¼Éñœ[y_êÿCìjÅç®Lx;£gä(†DDDwñò—¦.!"""ú+nÚ]`vÌ2×¢ÕÖôû¡´Õ·GÜ|åxmüz1ÍaïÝDDDDô—ð<’ˆˆä·Û²pª‚Cër´Š*†·Sþ;é8Ú;³T"¢;Hee% ˆn˜ªªªF¯9'"¢;Ëm€DŒË†“¥/FGÏGÿ˜{ŒžÖtSBDDw ñ~ðâmÐÅ»…]q_"îSˆˆˆþ–3K±µ†F-BÙ²¦†â4_L;{{{( ãû0ü "ºóˆ}>•——{ '"º†ýÈ‘Ñ߀X[[cf«èõúM'ⴼ܅ˆèÎ&þZ›‘‘a<ˆy\ ¢–[~ˆáGff&üýýY DD„fÝ·ºº:™EEDD7›xݾ8¨T*ã%‘DDÍÝwˆá©ØòÃÆÆ†BDt0œ+Þ>·Á%""j)+++ã@DÔì𔈈Ã6ÅDDDDDDDdö€‘ÙcBDDDDDDDf™½fu‚*KŠˆˆˆˆˆˆˆþ±Ø„ˆˆˆˆˆˆˆÌ^³Z€”••±¤ˆˆˆˆˆˆˆè«Yˆ««+KŠˆˆˆˆˆˆˆþ±x ™= DDDDDDDdö€‘ÙcBDDDDDDDf™= DDDDDDDdö€‘ÙcBDDDDDDDf™= DDDDDDDdöä·ú Tj€¤"`×yàpWQó¼‡ ãt÷Ú:Ö .,"""""""úkni œr`ÙIàµ?l:äëHmjññ¦¬š×ÄqÄq¯F(Ú†÷>ÛjhPšw™iI8yx6¯\Š/¾ŠÙ=ŠÏ´õ¦ÑæžCF¥é3U8üãØž«oús*R°þûñÐgg`únBùiüøÞ8­jì»íÀg 7"SÏŽˆˆˆˆˆˆèV¸e-@Ä@ãÇD`Ož€  ­¨ËÄdF. 7¼¶:]@a•“#OÛ&ÞPu[w;ãáG¢pnÍkxc+:E•cõ·˜±ðÄÙ"*Pf2'¿½“?‰‹'ÀGü@í üúÖ ´éý z5x{]êoxù¥±öH‡?‚g§yaÃã±xû|ÚØ Pël:ä RŠaH.Ró« “JŒÓ–­ÿæoìN£C “˜¼© ‡ÔÁ~Î\‰ˆˆˆˆˆîB)â?xσ¯>é…¼U›‘¢*Æ®Ï&=ŒN†Š£_¯ èî[W‡pá‡i¸¿è¬x¢-dWy{Ýé¯ðàó»`Ü BÎYTõ~ŸÍ º4>í3LxÉ/ž±~ªW¡´,Û_ž‰¯üÿ‡çícI‚¡.nÚ\B(BZi/,üj&d @ZD¼ìec2°3G@™L $ ×c¢Ö1—J°Ë0®“…#›¸F*ƒ\&ƒˆìÙEŸ§£Ó;ƒpfmÚ)¶`ÖrO,šiú9 ´f1æŒùáóÁöÐgý‰ý]0ÙMrÅÛëÏïÄé#Ø~b<œŒ+‚ Ë‹äèýê·˜U¿5g×áÓʼn€Ì0¢>{–Eðˆ¶XúñGõçR¯‡{ÿ9xf°;c!"""""ºHìûäçxý§M¸X`#®ùñ_´CÏñÃÑÛÒX…VPC+ m%^w ²ÓN!]õ&f§ØAæÑOŽHÂc÷o‚c°dÕY8iõ6|;ŽU¹H­ê€Oßxxo(žÈ/‡Z­¢özH ­ÆPß6Ô£s¾Çýs$XøåÜ»NÐIï⣆Ubõz<9þ4Tÿð¢¿%HRðÛ%J:]Í"ÿs´ªµ†A|ΤÀU:…‚8 ã)A‡V¦)B¶ø¬:ˆÄCJÌy&½FÆ`|È×xóS(ŠOâãyih?ãH€UT´:ý)]°'ÿ<ÅÝ=¸|¦ÿ…ÑÑkq¢RŽ÷Ï€&ûŽWûcüK_áåN5ÁMü—ø×}kPž”ßW·¡§TèT¨®ÖÖ%ÐË,asÄÔÌWéö§ÐûècøpÞôšV&5k<¶.p±•sã'"""""ºƒxçA¬êðÌ›<E{ãÛ}…Ч¬ÇvçphgöÃ7“ÐËËP›ôì‰û'ÄÂÞ»7}¡ JVÏÂS%áå{Îbî½ÇQ0D¡ýCøâ‹Ñ°Lû^Ö‰Õê+iㇹ‹¨—ÖT³+’|R†WŸ>ç.ÿ‡y}”PÊ(ì¢ÐQóšñ <ìÄ1u(ɵÁ¸OßÁHó(û[Rß™f(s±8,m1”ZcxýBUmTP„ˆ™H•¤fÚzˆÄ ½žüzæ…´gœñö‹8t0¶}ïFö !Û0¡…ßX¼æR²rÔzÃLG?Š/Ńƒõ»_ãwÃëÎàns!íº _~Öio÷ÆÿY¾‹—8Õf1Øõx_}Þ /tǧbô¥ËÆÆÿ=‹ûdl\UЏQü^éklÑ!üç]DŽÇ·oüçòú—üöÆ-Eüü0!"""""ºsÄLŽ¥3žÄ×îïaTÔ4<Õ9¿ýßLš÷6žR~‰ÿgAóïGh]O {¸yØAo!…•½œ³¡”\ý3„ò Þ½BFï(Ìx}(Êàg+ ô_bÒKV˜ÿþTˆ?y õn±r. úB&\ÆþŠFXþ¼€¦?‰BЬù:uêÞ}÷],\¸¶¶õû®ŸwvvÆôéÓï¼äÐy*IM«K È0xÆàÖ@€=ð{ª€„‹5!‰P;bµašC票×<Ä„.c>Zí‹qù˜ûRz}öÊ?NÃÐ çðÉ÷ ˜ûßÇ`c2ö¾yr&vKKQÙ:Ñ£f¡ÏŽHÒuCFRÇ{˜\š"@“s ;·Ë‘,öœz·á)™†=÷^òÿSñòÇ/ ¬öz(¡hæ{«J0ìÞg17ærQW­ÎÀ¤lnøDDDDDDw¹÷üoeod¬øëf"ì×'ð×x1å{ìéò Þÿ*ž˜:ý!Ý¢ák'ÖJõ(),…·CóºOÐW£¼¤‚Jì\B‹SŸÜƒ9š7°zn4®~ƒUÎïùKË•†Çe8˜£CT3çËÏÏ*• ?ü0>ÿüóK!ˆ~¬X±Ÿ~úé-/û[ÒõDNIMà!Â¥BM⤔IÐÓ x6F‚ A€µiD#rK¼™P€½ŸÍÆÔû>Á1«öˆ«þ£†?‹Î±°?øŽ¤ìÆæ ?øg}ЇFLÂ;Gë®ZÒB+‰Âß}‹/is…1xú¹1ÙwVÛ‡ÍGÛ£'eýu¨ò"Ο?ü2­Øe+Ôj9”ʆs' ,ñ[Üßk*vû ú«±ñB,X°àÒðþš$h¹ÝÝ‘d–•Ø{è$ŽÎ›€çÓ&âýç;ãâÖß_$A«¯ã»wFÀúÄN$յР=M_«f½¿Ä>=†A϶v†j´a÷ÿ ak`YÖµnM*•‹|}}áëã'KI³çÉÆÆŸ|ò är¹1)++«~DDDÜòr¿%-@êº^„Ë×´ò˜æ5]ƒè±kzÏÕ38öÆÜ÷Bñïù®è4å¬õ| “N>†Wf¥ãÂxä•çPòܸLøÏÔuXªËG^•­ë-2ô›‰w¦=޲^ïc¾ãåï#TV@1÷Lí ùä)ÐéNâõ·|éÕ° \²öƒë‹›ðɄ֨þ-cÇ`\ôå¢VmMÄŸnôDDDDDDw"ý…-8â2c‡ûã¡²Õøqû]ˆV( Nø¯ˆC׌e(³÷úÕÖ7µgpètkD…þµ*¼Ä±?ž¸o=¾K,„>ìjcJáÚÝ»×\“þÕR´¤êZ‚üßÿýFFsÛ„·,ie+A²Ø©‡L¸”kÿÄ;¿Ø-`EŠx Œ ¹<‚V¼ ®äŠYé?BþWÆ¿d6¶°– ÈÝþ%ÞÖáHÚy,zKŠªC%pš`²ÂeÄQÇh<Ù ”Ñp¿ð=|ûÄÀÚ$)HË‚ck_ã­ƒ$2T~~#ñ„xIM¥é;X"ôþ…xÛøX ¹L‹¼Óñ8¤»”hR‹ ÷åFODDDDDtÆÈY¿²ÎïáîöÛñÔÄ$tYìé: ,ƒBQòü‡H2ëf¿Žv¿¾†nöh×b‡{oÜoxÜœDBŸóÞ{>8ž ¡·±¦Œ ™ïc¾øZÆÕ¦Ô á›Ùx|“XU!í´c[8wu!ÈsÏ=‡G}ô¶ ?nYÒÑ ÈH“B%ÕÕ{>¯øî”kRÅNP/Å"—ò ­ ›Häðêõ ž•ŽÌpßsÏ ¤pÖ]A…£‹~†rÔOð”ŠýŒÔ|†¾`^›ôdÏ=éÛ÷â]¿¥x*Ö¡Û¶•¢ës~Æk†tÙ«ðôœãÿÍ[p¾j‹ drk„ {³^¾V¦òç½ø9‘›=ÑG—Œå«Ä-²@á¾}PÞ?㽤Ø"Ö ízà‘û6b‰íxgâðÓþbtí§ÅÚ϶ tÊ ¸‰5äê*T£æŽ.šCã¾)¿@V•‰$«‡o/uŨºàžÇzCØâƒŸ—}_4Õ©© >#çá³{:¡C+1Qã|ü1è¥×˜®ñä£>ºíŠþ– =€õI€ÊP¦‚É’ø=Yù6¸uBmÀ 1æ¾{Qo-ÿÂk‹O£†F§ƒîŠo&^¾S…ªêº¥Ç~ùË9ë.ö·¦""""""ºeª,Æ/B,~°—ÂuÐ<¼£ÍÀîeK°9Y†ÚLy/Ç|¯Š­EV=ŽJ¦bQ?;-›Ž®ó΢݃ m[¼ðéDtïì Yyv%( 6‘úÆì'j?¬ÿ“˜eR?-ˆÿ Ë×lA¶í4XÕV­ZÄðIØuA‡Kã+áÛ‰+ñéú58aÓ Ž’vÙKD¨é|Cf2(jñÆ;z½>ùF~h¥øù€eIJ”z“6—¾Ö9¨¥˜ÐV‚‰%°nÐñ¨.ù'¼ôa2:=ö F[@—²¿^ˆÅ„»\kßɰÒìYƒô¶Ãp—»Be:R‹½襀¦¬åeðÞË»:k.&µ³¿ôéBe%ª­­aY‘ŒJ´v“ ÿàF¤x÷A/“/Qu«~/ÃÝ“î‚k½¯®ÇùKqÒg2ŠÅªCʪ÷ðÛ…(Œ»§/ü-¹ñÝI´¥™8•k‰ˆ`·šÅõyØýýr¤µ‚±½ÚàŠnNõå(­²½MMï™MݵYáËñ_ñÙn Û˜QèèQóƒ¾P¸_¯`ì}]áÔÈ[ëÒ·ã§=eé==·m¹J¥Ò ˆ—{Ô šÚAg2·$‰w‚Y²_À–,Å ]ýûÑHLJÝð’£FоÞÜÓYOn0DDDDDDDtYsù­úrb!.Ç_NÈP% ’ë!û Œ—¼Xèd°2|åñ jÇðƒˆˆˆˆˆˆˆþš[Ö¤Žx9Lr>°ó¬€øŒš–!"1ìˆñzKäŽ+.{!"""""""ÝÖ—ÀÝÍ @x#"""""""2{ @ˆˆˆˆˆˆˆÈì1!"""""""³Ç„ˆˆˆˆˆˆˆÌ"""""""2{ @ˆˆˆˆˆˆˆÈì1!"""""""³Ç„ˆˆˆˆˆˆˆÌ"""""""2{ @ˆˆˆˆˆˆˆÈì1!"""""""³Ç„ˆˆˆˆˆˆˆÌ"""""""2{ @ˆˆˆˆˆˆˆÈì1!"""""""³Ç„ˆˆˆˆˆˆˆÌ"""""""2{ @ˆˆˆˆˆˆˆÈì1!"""""""³Ç„ˆˆˆˆˆˆˆÌ"""""""2{ @ˆˆˆˆˆˆˆÈì1!"""""""³'7§™Ê3q"Yïvp’Õ>Wfxî¢"ü!¹ž7×"õtÜÃ}a+¹¡ße™'tA]ÿi¥;B"|`s#?Kœ‡ci¨rA¸·Iy(I;†”rg´ð…]SŸ©¹ˆ¤3ðˆh ûæ|/¡Y'Ï OÕày+O„ùK‘!…°;”܉ˆ¨öx¤Ó ʤ°0ˆèŸD¯F•Z +K9Ë‚è6fF[¨Y¿½€{ßÉÇäïÖàÙ…ñYíñ¯ñÔ¯waõÂA°¼ž·¯ÜƒwçôÕ/"®©RÓÃoó×Â}ÎãèfÛüï}áèz¬½;Ü®ûØ CqVàîGK›ˆþÚ~J•vÔaè¨AÒSÈ×è Õ¨P]U‰*•:µ *µ¶C0¶³Ç5šØ ÐÞC¡`PÒüÅ ƒFk¨¸*dc8þOX.A !`RSÙÎÅö]r a[N`vLTý™«ÌÁ©³° ƒ¯}mª ¯@ÎÙ3ÈÑ:Ã?¤ œ—OšJ3O!¹À¾¡Ap³l°–é*Q\!…½½eÍN]†"•a•,8ƒø½ñHÏ@pko¸ÛÊLÞK ŸÐ¶poø^!`ø3˜7¼vµ.ÙySÏbÆ'׆L¯«FI¥vò"œMÕÀ7Ü6’k|çºÞ¦+:¯ÅÚÔ©x$¨¦Ô ëpȳ3B*êŸ8–ç¦ 5»ÞÁhëa ©So<ónwXÉkÊ ¤R;Ë ¤Ê„Þ+ A® ÚrÈü0lî;fx¯ÄwGãUåÓxç±K%鳚q4EH=“M«P„¸[6(Óy?O{e)’Ï^€M@(¼l€ê¼³H.vD`°¬$hzz""ºýŽg*½é>Z ™R™éS‚ …ye°rw…U]­B“‚?~ÏC䨻ÑJÚt¢.8ŽMë·À&(ݺ†Ã­© DŸ‡‹6@9vº8¨P¡RÀÆJÆåCÔbZT¢BÛDõM/…«+lMOÒ…JägWÃÑËʺm_Ð"ïàfœvë‰þÖµ•^=ŠÓŽ#­Xhð®Xz#ÄÓêRåX_x‡ò]êŠknÉB Rr` weýÊfʼnõX_ˆ›,KÚÂ+Ðö°„•¥Ù»Wá Ç0LíæiU)Êåö°klS}kW–¡ÓøÎp“jP”—‹ì£{‘0ýÛÚÖ~g-Îm]‚miº+Î¥{L[Ú\Z@If2ª\‚ÐÊúœS«Oâ÷Ÿ Ñuj·š [›ŒõËò3©+<šØŸ • øå§rôŸÙ£Ñp\W’\¸ÃÛ¡UÛf-—ºH֥ɜÒmdM¯û÷2ÔåíÂO{]1zd8¬opõF¨ÊF¾#H/“Ã58q†mçÒW6Ô×’ãáTn%†õ ¦S8Ü-šþꜣØ}B‚ˆ>.-S]i:ŸÄùba{ ElÇ`¸Ü¢'Ì&ÑçmÇN¡^œT€½°§žŠB»Ú¹Óçÿ7ŸÛY+ qOú¾ý 8…ÿï $øwAˆpó{à±Ï^E?×"ì|ëI¼Ÿ„N¾…8ðª ÷¼¿cœMV¾äExðMG|ðõTxªzû<ŒÛ‡G­wãdÉyd/ýÊ1³05F…݆÷ú #݃«pä" xã]Ljª‰E¶¿ó&Nz ßEZЉ v52ýåxòõl„WÂIÿ™xí%kÄ/hä;·ndñ*"0¬ç|½æ˜iXªqhÝqD îSåÔÎ`&V=ÿ4–ª; K²v½ŒŠñŸàƒGñ”šV01)‹ðÀüL´w®Dµ‹ 2¦#î?‹ðD”U‹v<ß¾pGdî>…¯/Ƭ¨ŠÆçYg(ó·rÑÉPYäàÏcAxdšÛj`aÚÌÅw/t3”/³&Ëœˆˆnvê¬ý«±?[€öbrä«°ú¡ƒS:v­<‹È™Ã¨¬ËMªPz!©çZÃÂÛN–5+áÞ~0¦†—!û|läMUÈ4PUÈàáU…-k~Eж vÑC0,ª'"jX‹BÎÉxœ-­HWdžDIÄLÜ×Íõr+ ½E§Öa;0  w…¬ÄŸFë’¨kÔý–%èèõú+½PÿóôO#á|Gt mN%¢ÉGÎ!¸]ƒ‘ ïiÖw§äÃ.¨uÍ%âîÞ°Ó\@Âú 8ã:㻸C›wë~?«~Ó00ÐòŠ ‚ FiYõ¥–ÞêŒx$9ß>^Ö&ãÊáßg:ü¯U¼¥g°}Û)”MÍ‹2ô¾Ûÿº/ÙWX‰eEwážn.È>¸ç;Þ˜D*1¶b¸´ü%†=­º šzó¤GIÆ)dÖ­Gª,”U«‘r"y’šenã c Z€¦2Öm„E—QîÔ¬ nó–ËåãVeytרV7gþõl1{×%BÖÙ)ÉÆP«l… ÖŽ×_¡×åbÏÏëQÒqº·S!iër¬¨ž„ Q%8ºâœöé‹ÞÝíPqf+–ÿ¦Æ”IÑphluPgb÷vCYæ8 U¯šD¨<ƒµ?î‡]ïAè äX¥kôx`T¨ÉØ @ZàÂöíÐv¾aEè&¼„-§g¡]dÍ©‹þ‚|ú î¶Š7ÎÁ¸WcØIX­‚/_š _™Sã7#ݰå©|†7zâ“B€LÀÅßÇäw7¢÷k×ø oŒ|f&Rö|àg_ÄhÃQ½o!^Oì‹O¿»ÏØš£ªÓž5§ÇBQ*<ÛÂO)Ö­²¿}/Òõ6P£…9§°uçFÈ;ŽÂðvÎõ›‹-GÒÏâlZ>ª”u÷€õ'ïJNlÁ)z8»…Ãëb)"§Œ…oi R²mÑÖË’}‘µ„ÄAÝ#¨ÑÓõ ص¸í]êo«2G„ô›·óùPO"¥pë4SËàà‰Ë y¥p ˆ‚Ss¿JK6^Ó‘õUÈ;s»wŸ€>nÆFµ6 krðçÏ+pDëÅ!¬øj5Ê”þ¸{Ì ´sS6c¡„GÜ0 ÕÈ P\jî­Z­¾ñ:ŽVPÀÖªæ‡<‰µ7Úwv€¦ñÈéÛ ß­,ê†ì·d†:…N/½Tö²ëº,Q@Un’ó«!èsQb¨kœJ8ZÒè QX™¤ãÇP(•ÀÁ/­u8¿Ž8uG„³ÔXÏŠëbW£6ìûT¤ìÃ1u´qQæUKÏŽ5Å»7Fz@6hý­U©!±P^%Ônl¹´lþš» M&1Ì—Å)gPî ãwÖ¢8¯J7wXKë‡t'ÖmF^à]hkY…òr1ä;†­I^˜ô@?ø\çï¼êä}8b×Fz»Œè40g–@V»þðÊ9ˆBgÜÓ%°¦oÊ.£15B_ÓEÇ·‚6r¢Í1ÕÈØµªØ®ðݘxyóRzã®qcáæRÓ¥]lþü%%ëÈ?.`Ƕ"MªDÊ9BËðÝ–3x"2¼f&Ã:!¦¶gOû¨Žð{+©ƒÑ·òiL¿£ÃÑiFDYkŽAÒá9øÉjÒE§èX¸|guQ-Ò~è /¤à½§Õ숪ÒQ"GŠÎP—7œ… øïÂ,Œ~ï?U^kz/H=»¢O;kãxY }çXö­á@bøÛ6|p½ë¥­c¨ÇL¬:0 !•ë‘Ùù~„Ë÷›»ÂУíoøîå¥8[ D›¬â~(êrdm» ³{Í»Z:ØA]R×I3`ÿΈ«ÞÎÕÚŠr¤59Ïû#Àªf'åâê€Ö­C!–,œà¬,G¹ºeeNDD·ðÐ]t§s5¸°s3ÎøFˆ™'Π•HK)„Þ³æb}E䎔œÂú )ðî3c]Õˆÿi#,;÷CD\ Ö|»§ÛŽA¸xæ¦/Eúá½øópô¾¿Š#X¿Jƒq£tâ-c»AZ‰â ÙHÎMÄÚ¯¿‚½«?¢»zs!Ý@ªÔýHr댩—6B Îïø»´1¸W0œ}¼L6M[ø*‘}ì„Ðöð,ŽÇjù}…`RáTiêWj¥®ˆÚavW¯Q銓p²È‘þ¦—9è¡.ÎĉÓÇp&ßpÎÙqã@GEý0Aꉻ§>ŠØüãØöGì¢F`t¬*÷-ÃO§»`D·ÖßÀ@_€£7Ã#º;:´²4T²M+ÂåHÚ± œE^ËͲEïG&¢ƒ˜ÈmáÒ榄 xÙ©UH”ôÀøþ|5²üS6]Ð' ’ò$ìÜ‘¿ÞwÃßZÀÅc›qPÓýc[]® $M¦bKCqHëP™Šë ì<]|”W„LR©Ô0¥Ôð¯ r¹rc%ÚðŸD…᳤“þ-$J¸‡D#ÆWvE+ãbÊœêÔ+_té{Å÷¬ÎÚ‹åÊÐmú@\Ñ8þjËåŠY®Àé-«‘ÔwØ×SZ² 唈•«+Ð}|'XkÎbÍ~gLéi¨«éóÿÇ1øŒ€Ú®±U.¯Ý„Œ€¡åR»|4HÛÀ^wÃûº¹ëQ˜[ϰ¸Tô‚'N!«\»¬l(=¼qzýO8™WŠJÃ6Ðið D×…;*4µ³­Î؉•1cøò;ê%¶pwÑ£,'¹Å¥È:™ÇÎCà~‹ú4‹*¡P°ÛóáºóG,1. woß‚¤ÇÃhÜ~õ&sÞS¡„Òþ.<óëfL=uGcÛç`múxS&ƒNk’«kä (œ0IÄ ¿n‡^U…F[¢Idpï7 oÏnoRІ¿ávlXÙ×¾þ>ò'|„ÿ†(®9½õa#·®©ü‹ûâF¿³ÜüýálßʵÁ/XR/ôêE¿¯Ä*ítûWa#¾€èR¿Ã“sã1hÁkx¬aCË^ŒûŸ,¾rö¸tù—D,g¡EËM49bwi4†…Z߀Ö>‚¡ê¨…ÌÆ´< u4…ñêU5ŠÎœ…nähLm¥Duú,Y±îô…·ÌÑCGÖ¥†cy¢ÇÃZ’ÞhÐR]jX/”¡¤ZMyT‚Ë-ib÷ßP°s;Ô£_Á«¯¾Z3¼9ª¶cKrÍ•ZÚÄ=Øgì0I‹îAv‡8xï/~— Lj®2åq¼4½òÎå UçN°:¸Ç*kNÐ2wîAi\W„˜¬RÃI’sÞ9dˆ; ]¶l=^†H”°P”£¬Lü,ü»töíÀYÌXY¯<ôžþp?*¬ Ù+_ÃG%“ñê½A¸4=}e½éeðiô;÷ÃÀ^½Ð«WOtth°qHàÖw8"ö/ÄÇ%½0¨Ao>ºô³HkÝ ƒ#] «¿i›·à”nÂêØ¦YeÖ”æ–9ÝÒ#wù ìI÷FL€ìÛ@Ÿ6În;i\Z)<Ñ1¼ ;÷dÕ6óÖ£ààf¤·é‰öŽu§-*É“Œw›Ô—¡´Â ¶—.oQÂ#<úrøqéøl8™Ó68’IÝ7n&¦‚Ãáï郘ÎÎ8¾>:.'¢³ÁW ùȋ訆Á¢Ä >wÇx“ðCPåã蚟°µ¢#Æ kÐj«®˜ ‚œš[“ÑW sßr,^—Ðq30$Ì¡^%HbŠ>#û¡sèUÂ㩦-|cûaððQ?z0"-ËaסÚ·mþ÷ÌÀ0Ê51K t‹Äà{Æ ÂPQÌ©lÆYµî"â÷\Dx·¶WV¥6p±LÅš7àÀŸ¿áÇ= ô×¾MuL)±DPÿi˜|·§q¾%NQ5}„aŸ*1ž?{w›‚{û\j öå’‘¡…§ç•—j.ÄcÅšóîÙîŠ> ¤Î±˜2{Ƶ³mºb.ЫTP×Ífn6* u«úW(ÊÑvðTt÷”^bÝ‹dwÃ>þ*·÷TyHX»Ë1ðÞQèàÒTJÖ²å"³óG· SÐÓá²Kõ×± åðí3 5?™+ƒ\ Jq|1ÚÆx𬛠¸G÷A7“ðC_v6!zP4oHx …ƒ³*JÊ.×õ„r”«ìáh'…-àØVÆ&V¾Q‘g#»B¨WŸÍýsŽë•¸xxvî>†¬ª 8¹çR.uX#‡[HgÜÝ£FNèÛ#[‘P"Ü’]Ò?¿ˆP„]ÛÊÐé)¯Ë+‹2 ƒzUáÍ­©¸?Ê]LJaï ã7I5² 0ûݾð¶÷BȲ—1a’Ú¸h{Ñ ¼ÖÖÁñïÁ³ðÊ=3ÑÚ­¹èyouƒ Ö\ÞTœú`j·%xe²aK„DÝW±„,=z”âÙ§žÀ‰þSñÒâµsðÒ¤iðj%EA¥¦Î‹E½†kºóظl7òÏ%âþþßšoÝñòïÏ4:½ N×_ˆ÷7ñ›&qê‰áwÛ¡"z ¼ì[”'cÚâñàÃûd]‹QˆÖV ê&¬£Êè&ÊL}Óóôƒˆè69nW!yÛ> ãdxU­ÄI©œÕÛ±µ:“CØšP ûö}¹|9Öš„aЖÛ#$Ì ¡g7­EN ?Š$î‘êP”¸'¬#1ùj=þé QPeІwÓæáкȲñ‹ ¤ZñR˜†´joXU)‰ÈòŠ@o¥VaðJHC¶*¾bw$iÈÔº¡«¸¾ŽÉçó¡wñ…C»aP»®ès‘{¸î~>p6¼_ÅÉX–Þ“—‡ ®D¥^ Ï[”DHD¨i&3µƒZèõúäþXƒ²Â*(ì/_¶!ö\V€"µ%œ]lëídu•…(TYÁÙɪ‰ RêâbhmëßÊ Z”Bmá'ÛšëuÕÅ(ÑØÀÉNñ—N¤š;ýµ¿sKˆ·1+‚ÆÚŽ–7ÿú‘›UfDDt³+DÈ:ë6Z‚ÍVçIÂ;ÀO~+.D)]਩BµÔ –šüôI*bÿ5Árqò ìüõgüYì'%ä.áèÑ'ÞMžå ¨:½ߟ ÃŒ‘!—á)k±ô|GÜÓÓ£^ÅLPUC­´„ Dý\®,Ö¯G¢µ¡R78üòå ·PmrÎ$ààDºÅa@Ÿx_¥2¯ÎÝ‹_Ö¡ó”Ájb»×œú ŸìVÁ E¨vmn=:!Ø¥‰ûŠ·Á^¼“GÕöÃgRO¨ª‚ÞÂÆÛµãÌÖß±³< £†GÁM¡CÚ†Òî^ôõÊR¶cŦóð8=ì.·h©:ŠŸ–” Ï}=›¼Ík½O­ÎÃÑ k`Ûûú_£/ üÌj,9â‹ÉWôqôÊsغl+„¾÷¢¿Øû4Ô8ñËûØ”g [ï8 wÕåÓ‚ƒªÓÿÀÒÝŽ59Î×(}éYlúu$½&c@€é¥T©8qì8ŽŸÎÌ¿3zw‚·ÍÕß°EËE—‚Õ_œDøCÃ(»ÑËPüøUXs.£ÆD5QžÚ޵û*9t¢Ýoô}‘õ(9µ¿ÿYk{ú¬ò@QýTÓK­áµX±+ŽJT•+Öîòµ‚DwkßÿÕCæ`¬éµhº4¬ÿäZ?:áâÓºB$n\ƒ½yr8Ø%ZxÜ5Ú¹ÜðÖR©4Ș¬Õ šÚAg2wP· Ø]ùJ °s…{#cË 7ë«/,y^[—úï(³t4¦_Us§¿öwn 9lœÝnÙÒºYeFDD7™ÄÞaþÆ“Öb±)4¬áSÛѸV½V ^µbc¿×²`ôç‡Ú“NMy.²Õ!k8 nÆO{BE2¶ì,CÔØ¶õÂã‘ÜÕV;÷à Ow´kízézs‰…åãQ ª¶å‰X¹ä¬»ŽÅôvnh²º¦=-‹–#Ý-]†Î@˜ûÕGáñ5øý Fi2ü0žÅ¶îˆnÅ%ho»kTw¤nh£Àú¿ÇÚ>í½a?¤Óè3©7ü¥z\<¼§ûcjÃ~•Ȳ ›¢Í€‰èéo}Å¥ý¨ÌC®ˆÓGÀÓúVöðÐÂe¨½ˆ„u«/鈣Ú7R†å‘};¶Äyë( šÔ>K§R8„ Áô5ªT†ÕÞJiò£€øÚ`ÌÑ^ê¿&óÇÐÙs©ˆµÁà'Ú˜üíŒÈ!Ó¡­F¥ZK+ Èná wP """ºªH¨ÎJÄ9E˜¡ÒS[AJ‘•®†kk×&Z_¦É?‹t]{Z\³…ŸPu›Þtþm¿&]W–‰ã‡p&ý*Ôh]»`òÈv°cë¢ëÚ¾AÒ¬[ÑŠƒ¤™÷¬ÔUPɬ`yË;·×¡ å.Z ÈËöê¡€¶))jx{^ór AS‰*XÃZaî«G2ÎBÔml¯XèQžŽrÇÖhu#Ã,eÈJ*…}[ïkZ¶ ¨*«!·nºõ¾P‘s%hãecwþíšÓ„™ïy¶ÞP¹’2Í ""2wÍ @$‘ÙbøADDDu€‘ÙcBDDDDDDDf™= DDDDDDDdö€‘ÙcBDDDDDDDf™= DDDDDDDdö€‘ÙcBDDDDDDDfOÞœ‘´Z-KŠˆˆˆˆˆˆˆþ±Ø„ˆˆˆˆˆˆˆÌ"""""""2{ @ˆˆˆˆˆˆˆÈì1!"""""""³Ç„ˆˆˆˆˆˆˆÌ"""""""2{ @ˆˆˆˆˆˆˆÈì1!"""""""³Ç„ˆˆˆˆˆˆˆÌž™ :TWk¸t‰ˆˆˆˆˆˆÈÈ<Êx|0süY ኔŸ\Ÿö\„Þø§åÅÅ(¼s§`Ïæ•XúåB¼6缺:§f}ÎlK,¸ôwí³8¿ú-,:¢åšDDDDDDDt“›ÇlT!aÙÇØ”) 4éн"Ñ:"eÛ?ÇÜ/ö!Ï£ Ú¹JáÒu&¦ßíK[ vÎý7äˆqÞ±ë‹÷°GíŽV­\qqÛoÐŒ}Sÿo<<=j"%{aIùsèiøS[¾ß‚4Ptp'â]œ!6Œ)HàÙu†„YsÍ"""útZè¥rÈ$, ¢ëÞž*‹Q"s„£Ë‚ˆn‘ø¯a™ ŠÚAÜ]Y¨ÕêäÆìh‘òíÃx!ï,z.VY¿àÉgR1íËçÐÉÆt<=òÖÌÅ É“ñɬh\Þ'«ñÇó÷!iÆwx4Df2¾ »^€ÏUÝíÈCGàáPȤ}; KÚ.Ä‹]âY“á¤I {V!""j’&ï&[UJl[#:ÊÖ¨Æé ëP7]®'}ÐA¥2œ¼XHQ||â•ÝЧ­YY:xú:AÖÈúÌ?°èˆfŽDòʯý øñ`NôW¶¿ªÒ2¨j›LW¥íÀê£vè72Îu›µÂŽ6 TœÝŠ=êXôtʲ‘œUµªå¥Å(,*Fiyô­ûbbWoã’U©pÊ21^—¿ŠaÅAgŒ4œ—ËXøDw<¥Rd¬¼× šÚAg2ÿü B1üðväKjZkhawf>øßhÒ£Ð5 ;?ûvÇàÔyftw‡Ç°·ñµø\E<¿»i‚ÔX&YdzPòÅë¸è(1Žo; ³úæ`gV_ÌýìIDÖî]õÉßbÖ{çàË£ß`þÒsè0ïMŒöàŠGDDtÕ$ç$ò‡¢~#Vç;Ã;%zm¦ m›†s¥â1[…“|œ-;-(9‚ßVªÐïÞÎ(IKFyH_HÔYHÚ²;NÀÈHÇ+¯ÿ•Î!¤5µ3™La¸ŒˆþâÖÒÜLäW qo<»D¢K,P¸w96”‡ [˜dŽmà`£€okè–¬Å!ÏIˆ³S@ª—ÁÊÙn’,¤J{bÒWHL‚•¼äd”„µCuµºÂO/ƒP‹9yØ¿/R°ñ‹B;oK.¢–V©«rpüÀQ¤—ËáÚ6ƒ]Ððè«É=†='%ïÕîMýF +ÄéYpî|y¡,û¤¢Ü¤o ‰­?:u„Ý-hmùÏ@$Žètït‚©›¾Äº3~è]ûZpt1Ž£DÈ1 À°ôç±ã»ÏqF%Ì¿/¦õë€ñ³# 1¶uÕ`Û+g‘tï3x¨­Ôxò¥7L[²õ#üY®BÉóÿ†‹«?Ž1ŠJWJ`çîGhq¶¬ì „ˆˆ¨Y¤’";!GÇ¡@v²ŽžE‡°×ªÿŸ½ûëºï¼ÿŠÞ; ì `»D‰¢¨B«XÝ–íØ‘íÄ%.Ù8vâÍîf£M²‰c{_'¶eËV§:%Š’Ø{ ‚$ QˆÞ1˜rß;H‚@Q¢$ŠãßGÏ}ÎÜrn9÷œó¿çž¡¯¿Æd`ñr­>ê Šp蛣™â†F-¶Að–Þ{#Û÷×ÒaDui…ËbÁr¾©eÁ¢×_D>®Ž^‚ÓI'[õIJ|ÉLOocïPf.ŸÌè°`FG—È,–­è¦´ÏaatNL.ôºÌfW›ÇcþÛÀ°ØqX©j¶cÔåH„ñÓ™4¦œšºFœA‘ÄÄ&›–E’ÞBùð¼õìZ³ž¶¼,˜ìâĦWxµç^î™u!é®fÇÖƒœ¨‹$iñ‡ ¢tU±çwØs2†›g_˜Çâˆ"5c,?QbÐY¶ƒ£žÉ„\£²Ö@gŽÚ=Gþü?ñ`šƒÿúìXþüÅ+UÏük½kùwÞËÄ’ßðø‹Çy`y¡¡öó•»ÕŠÝá$(è\W“<÷R'ý¯û8þÏgxè?Bš¹o‰g|yùS̃èÁ·g§2ˆˆÈ2:khŒÊavdAö³=2¥9=ì=žÀ­ Ò?Ú(í¾&êºÂ°´¾Ë«…g9ÙédÌÆ×¨2˦×ʈÈYȲ‰1(Î!òqrÓZ[A]§¯oÂdÒܧ(=ѳàL)e6'N»Y‡NÈ&Ì„-y"“l6<µ‡Ø^ÜìN£õ Í]>¶ºCúó¨#e:ó¢Š8åË’´T¬F0±‘>*6í£aÚb–/ôÿÀÁ6 ì¬ÈT÷-‘sOîåPø¾<1¹hˆü›§Súì~j¦ÜȨþ¸ªí;p͘Oú»Ç†äMn:€{ÒML¯`Ã+‡‰YºˆñµG/Þ@p£³âi=ÄËûsYqsò5 DØéäùŸ&^·{”Ꜳ½Ä ÅZ·brn.aѱG]¨\¹ yùk)s›ËÕÒò»¦=ÚJ윇øò’1,º#‡5/­¥ðtOþ[a·ðø$ó–Ü×E[k+æm›.·A„òˆˆÈò÷°°DNeVï»nÊ õðaœywãÝKK[^ŸÃçŰÚé.Û̦’ŽËöÊ0|2k³G%0ã¶»™AËž§iI˜Ç©‘çÖàhâ":"Ÿˆ ’r¦‘d4°ýÙwéÎÊ&Ú[Ëá"˜45[ÇIÊì‹y`q V£…Òݨ­-¥"õn™;¥©kñžì£¡6Ÿe7œ{¦‹ÂWª‰OŠaë^˜;5=·»Û[i5[3ݽê†-òÑøh®©'|æäïÖ1ð·™ëíöüg‰!gÞ"²Jš©j¬Ç·×RÝÔ‹·¾î–jNêÀ–Șp&¤oo㬻—ÞÞVÚ:ãúnn—ùoô¹}:ì"µ íö` Ò{ÊâÄéðàöÇûªØ¶µƒiwæj©¸xAkÓo½ýB`ÁÖŸ-Gd´a_Ë8nM¿¶"&ânm í‘â¯j2k.àÀ‚Õ|n¼ÿLÜmNµ4ô¤“0ôe£®£üîßO1ë+£ÍDXDƒõwˆýý$ÃÅ©WŸà©Úd’zÐFòùÊ4²ÿ¥ß᜽’{æ&£j”ˆˆÈe˜E§5.Ë~SWLdÏúz²æ„Òx I tÍ#+Ü_Ç‘þaVÜéÍ[é˜nÖñâ¾X¦ÎŽáÀ‰¦Nˆöµ—žÆfìÑyÔÝÝ´¶X‰Œ V¹.rżx}6‚BBña3[!æßV·Ããí¯5[.¹ø|^:K6±³;Y£f°0Þ\KÇq¶êá‘Õ=u Ñgq²9–¤¤‚‚,tè@‹| üe\]­fNì1éë¤ÓɘpƒúÝoSèKÃyh;ÛVjzéÞ¹ ©ùdF}˜I ZKãμõÂ/B)ruµ(W]1 Û»Èz9}¶ƒºÒ z¢Y†ÏÁ˜…i >ƒ¾’rb¾ÿ fG­ç¹örölÜHù` Ç{¼f`¶!Ûð”¾ÀÓ3þ•ýúdBzøûýdÜ{?ÿ*Æ=Ƚ‡ÉѪ"‰ˆˆ\IÙíii¦Ç‘BkÁ6Jœ È·Vš-#;!Tðææ(RW3ÿþ0ÜÔí~…w»ò¸j$vË<–Ä®áå?öà˜p; †nÞ{–‚£rWù{†\ò誫„·ßòr냳ˆÒ€!"WÄç gÊ-Ëpù{_÷uQTj!95‡9¥;Ãð˜Ÿ;‡-·>Lìi¤ÇH²jsÝE{¨\õ9$[h·µRb$‘âÙÁËm£˜›ŸaÞOBüù°erÄTn™_ÇÏ>KA$t¸Yr{îÀˆØQ¤Çžkbû(²W—žBŒ¿höÖ±ç¥q­ø.w&çõGhñõÒØÙFõ ÏqØ–ÀÌÛn$ÇÿëOF7í]A„‡]ûjñc 'šmÈäœü-ù ¾¾¾}Ö{ËØ¸¹‡™·L%ú\‘ºýl¬Ë`Ùôø‹º½öüšx;”;¾p7sRƒ.ºáwßAaøfÒk"""#é>ô"oÛïäs“ô5ÖБJLÇqöîÛËñ ytY*¾ÆÓTÙÒsåÏjúšjiOÀW²‘…U4ôÅ2á†ÅÌI×Élß}”ªÞ4–=°‚±íxãuÿèõ+¸}þhÎ=¼ò4eÓ¶bšû|‰3W²l\˜NšÈ?ÚO¤°Þ=$ÈØFU-ŒJ‹ºPŸ6 :{ãl]õÔ{HŽ²Ð¼ë¬ëÍì´sr¶—îÆ0Z Ù~299ŠwmáPk:‹o½ŒpóžrfëÞ=IêòÕÌ¥‘"‰ÏMËlü‡8®Û×>Ng¶ù?×à䜼C&CùT¹ë‹9iÍ!7áBï£ë Ç«|¤d§u•ýS½4ù"ˆ z%Î0üµ,†‹®;a¡úÙL‘Ï‚¾¦ £I ŸxÛ¨i°‘’<ô•/õGvR>…é™Ñ }äht¥ÁH Q]¶Dþd)""""""""ïJ ±SDDDDDDDž """""""ð‘€§ˆˆˆˆˆˆˆˆ<@DDDDDDD$à)""""""""O x €ˆˆˆˆˆˆˆHÀSDDDDDDDDž """""""ð‘€g¿¢™ìv)¹n©ˆˆˆˆˆˆˆˆ<@DDDDDDD$à)""""""""O x €ˆˆˆˆˆˆˆHÀSDDDDDDDDž """""""ð‘€§ˆˆˆˆˆˆˆˆ<@DDDDDDD$à)""""""""Ï~ÝïÑÅ™¢ãÔ».ù<$… RÑ9¹Þ ws²\~Ÿ¯Å†Í¢£%"""Wæú€øš(xãY65xi;¾ƒc¶iÌÏŽÀžr3ßÊMaÔÕôqñžâåx“Äï}“áºXDDD>ž²»‘‚e$,˜KZð`ÃÛMceÅE…”4¥sÛC Iµ |e´•°ót,ó¦%v]5hÛÿ,ï†~ž{&;†ß†ÑKkcA±1„ØtÈEDD$ ¶Ñ¬úëÿÃ*¼û¿«ù{ç_ñ¾‘K]ÇÛK[‡…{ ¥'ݤçÆáî¶zZií褵é,µµíDLY@~Z(ê„"rQ梽l'ûÚǰ`fAÃdoÛ) QÝî#,)—™ù9Ä9>¹ôôž9Àæ½Uµ›§Æk ‘KsIO ‡wPÑa'>'Yããq^2O_í!¶Z˜´lI—ÉDÃÍçn>AAÁqjÚ½„$å—ŸK¼óÚ”žÿ½gžå/¿÷ÏüŸ?œ|±€úÒßògßZC½oðälþ)÷<±ww¿øÒù»ç7³iÍ?ò¥ûÂ{õlyöMŠÚªÙþÌS¬?ÞÓß!WDDD®®1âjiÃ>éZ5‘(³þãsAÆ÷rçMs™œ14øá¡¦`§{,X,-¥û)šÂËæ1&,‚È`ˆ¼€o\r>øatŸåÔ‰”•TÐì ãè6Ö¿öï·_\Ž{+ØöÚnjêí¡½¡’“§ÎÐÒë{_ºÛÊ÷±¿¸š,´WÔÐkw(ø!ò¾,ÞJÑî=lÝM¹k˜ïݧxçÙ 4$Ngá£ë¯=g¶¹³çsóŠ%L‹(åµ×ŽÒy×ö@?ŸîC‡ùÕÓü~z(Þã?vOÑ:Þð¬ä¿þö1Òm>>ð.¾lnúþc”îø 9?ø«£TŹz¾Áºö¹|~e.ü5$Õ7òÞ =mÝØ"Ãq¥“¿ ‹æòãtNOï@tœ.æ´/–¦M[9·ŒÛÇ7òîk±~5“ÃËiOí--¸šðÄç’8*“‰Sçb¿(Xat4Ñ•2ŽÑNÿ“¯3ؼË,ûÃ裋æÚb6n]=ÿ.nŸ;Ø`²‘œw·ûëŠg6P:f+“ý=H[8y¬ØÉD«e%‚ÑVÊ©E,½“’S.&Nº8Ñ^C­%‹•Gg晸wuª{ÿÐ?>:+ö±mßIÚ,±äÌ]ÄŒQ!ÍEì© !¶ù‡j|$ÎX¢Ül¾N*ömcÿév°ºñÅÏfIöÅÁ¢Mïr¤¡ƒÈ½;ˆž·”Œ®=ï[?­%ì=LôÙ”D.âö¼„ó׉wy³n·Ý0ЛÅè>Ɇu•äÞ±„ÄŠ‘¿KwèZëC߉ÝDÌãÏ&§lþ{ö-38þô^ÎLYNZÿ }TnÛŽ+ïÒ×’¿9ºq?žÉ73£¿Ûäðómõ48ÒYœC¨9[HÖÂ÷6÷@¯A;à‹jkÊ ,›zÙyl¹Ë¸±û×<|ïWùÁ?üŒ·Ó—¬×]DDD>~F-¼[2¼T9F]ÿ¢`Òó–qÓsIô8·l9Ë'Ƭ¥X,V¬ƒ$ mœ8tŒ3Þx’¼'Ø_ØJT‚‹Cë×÷¿ã_•%r ÓfÍbæèHbÇN =Ú ôõÿâµcmô yÚäëêÂ¥­˜u¯àÈ¿ƒ»W.$'&š±snâîcÛ¹™’ÞKÓßˉõdäg töÕqx…Yí‘×_NâÈ™ÈÄñ©TŸâÒN ÖèqŒwäù?®eËþ"*š-$d¦næwßÙ]¼øN3ãVÜÇÝK“9µv-G; ŒŽJ¾·‹³7²zÕº·¼KQA×±7YW7–[î½›¥™ÚÜÁĆ iQY£Èš=Qá)LY4,Ïîá×ßUÍÑM[85‡Å“b/j e-`fß^Þq†Þ®“lxy/!󿑿¸üw"×Í5õ„§$s.Ti‰H%…Î vÑè«ÜÊÖî™,Î ¾¤×£Ë…ûÜÛ#ÌgMžÁ¼˜c¼ðÌ:¶n]Ïš ‰]˜wÙ×h¹ –P.„?,æçzí¸z^k±DÌåûkÞå¹øK²lûÕŸóµ_—âUŽù$ gÒ'&ÐÞªƒ¥5†ÜË™7.Šàà ‚¢³˜=9[b‹&]x¯ßè©ãhñΖìdç¾mhJ ¦e'¯>·ŽÂÖÁZ€ÛƒÕÞ®·KuËJ¦%øÃ6lV³žàŸ%(Ñ1Mœmœß×C]Ñn6¾õ2ï•»h/=ȱòz::»ñ&$÷kDÿè ¬Ü謂3sI®.æô¥ÑA["óý÷ÍI³…løãÏùùsû8ëñÑXR„1q6™á6±“É]OayÏÀªS&3kt8ÎðtÒ£;héðá2ó_HRaV;QÉqx[Ûp_¼1‚BƒqX„„‡ÐQ:üú ó¿¾È ,˜‘Ft°í}÷«Œ¥«™Ûý.ÿùäœæßóSƒx—ûNäúÈ´xÌòÐfzÝ;q:<¸Ý†?ªÁ–ÍÌXšÃû†Ó²&2ã¶;™j½ü|^¶ðhÂí^z:[ii狼«Ï5ÚcûŸÒ鵚”ØúB*Íñ(G=6Åu?;þ)½‘¿}ìVNšÏ a%ܱû ^KAŽN::ŒYC‘Ëñ5•ÑîH òð!jëÛiðæPs/gÚi5?ë2ëSޏ1ÃŒ¿å¢æx «§SùÊi:ó/þÖÓPÀëOBBæB¦º×ѶøVM 3·¹‹çÖdÔýùDà£iß»ôÎ}ˆ‡Î¿»âÂeë¯ù:hï !Ü_“ë«aç+iÌÈ'ÝÛKÚM·“ÛACõaÞÞp”Jç4ÊÎŽaBb°>ò§Ý”ê,£¬¡ÏkÏRˆ—NOŧûÈ͹0œ¢Ñ×A§/œ”ܼþi±ç,[÷všN~ŸGÔ¹±u,Ø6Ü}Í${pð`ÃÅÒÿêœ×g!fÂ$,O>Ë35IÐîfâ²]&}î×oÁAØØè©çdƒ“Œ45§éKu~p×Ë}'r´‰Š¢«¥Ã,o£ò†ÑI§+’1P·ó-ŽúÒqÜÆV£•3= tíØKÐôYdoû.3_>‘G^e·s%_¼?Gÿê‹yíÉ7Ù?æ‹Ì‹ýô3ËŸTijŒ‡<ÍOxŒ1QÁäNŸK|«…ˆé7’û¹ïþ2âÜÔ5Æðçÿ}N,ZÔξó.˜¿ý³yDè†&""rµáKÍžJ‚=š˜ˆ.š â'…qÚDDt*iþ7ØI­á¦³µ“ž–JNY{ñæàÿ ªJNÓté“å¾ 6¾u’Ì;ïbBÍ«ð™A!ÁVâF%Ó^TEOþ$BÍFTeµ…Ôåá ÿ¨Øàì‘c8–<Ä݃±šyÚn¹|Co¤õôæ)øqšM¯ì!hÉÝ,KõrzÃ˼²s)«çÂÙ;òw ‚ÈuÒB&&–¢ƒ¹f?0@“¿ó:k†~2ú1þðìEüÍÞhmÅKø½ôß_掦þŸÅ ?`f~çE^}´™¾ ˜k2H‹ˆˆHÀñTsèt(æ‡ãjཱུ¥„/~QÉf|S/¼·ƒˆ{î`J„AwZâZŽ* O·b|L©üÐë)ýîFN«¤Ý¸vû"""""""r½ŒˆÑIÁ/ãþïý]EEì|æG<üè?³³ÙÀWý:?ýÇuœõ}´U{Ž=É_ýbÏG \íúFJ¿Ñy€?þß×9á½vû"""""""r½°Ä^tmç/%ð—¯ý3·„û?xœOý5ÿµ¥†ÙSçq·rª´wòxr‚?ôÑYWΩÚn‚RÇ‘:2z9[ZBc ÙmÈK{U åÍA¤Ï"!ÈCg« gt8NÿÚ\t["÷ÿƒ>:Û}„Fe2ºk))k&lìxÒ#m—¬ßIZn6 Á– \’~Kôþê_â?ƒÞnÚºmDwSQR…/eŽ~n±9 ‹Ãø‰cˆö'¾ïÌðËLðrt¸ãç®åðþÆÌÍ!Úÿ¹g„tŽxœuiÊUr;ïzþÐ ¼},Nǧ÷ÄÖhãÄ®ýœîÚ_ÚJÂäÅL 9ÉÞêhfMJøÌÍ{Ïo¢!q*7,˜ÉhÏ^~å­†“¸ˆNv­ÛM½w !Öqlûzbˆ¶4spͳloKfêœ|²­Gyù…=4úüÏê(:RÍ…¶“ASYå­æ—îÒÙÿyÑYãÈ›Jhó.žÿÃ&*ýš‘–éøyÌùUÐÑ_o9#g]šrµ-ßË\Ï–·”µ¿ßJ­ïSL¿%˜˜´ ÆŽMÁ[QLk„ÿï ’Â­f¶©àHyËgçUr3¼WDøÜ›Y2>f°ñn!<9›ÜÜÜþ)'#„†’ÜA¶O1]mÝu k´Ó¼FºÇr•ÇÓ¼·ž8Be§ñ1Æ2ŽTv^q:FJ·ÅLxxЇh\|ûpÕ¼õìZ³ž3 3X07û‘WxõpÛÅûè®fÇÖƒœ8VFÓI6ºªØýú+¬ßyÉ<æ5qäÕ—9èˬsg;Ê+¯¢ííz`ô YÈã³—ÿï»YúOc˜š7‹y7ÞÁêe9ø;„x+š÷/ÿ÷¥XhÊþ:¼y„?ÏŘùm~v÷lâÌ+ÕwKþãNÇ—ñ˶{øí/ï#Ùê£ê©Çøüa³®¶ï?ù§#‹øÙï¿B¦Í ñõoñðÏŽñÄ<ÿ²³Ú\_7»‹z¨.ßÉÙGÓpí( nîà Øò6F²ü?bž™¸Öw~Èý¿x“ó¿ —ñóß~‘ óÕ3ëðÐ/ÖsÓãçÿño]Rç9Ñĸ5ÿÏœÇJÇ›ßåÁ·ŽñhûÚa÷EDDä³ÈW³‡m­“¹ç®‰Äûkó ·²´ö×l;–Ï}ãÇÑûÞqZfÏ%Öü®³¬ _ö-DZʱأH;–Q—©yZÂ3f þfÀè°Fޝ/§9Ç Î’ÉŠñ©ÄšËÆÞp;‘§Úú+GA™ Ypð)6žÊýØv(”y÷%cœ^ÇÎîiÜã¤4&ÞFWÃZN4Î"Îùm«áÒÙåÿ<’3mýŸgdç{’·÷NâK3GX¦ãƒ¥çôžÓëù8ß?3‹.E¹šÂ×ócSZ9PDTC¥áÓÈîm!rÎLRíþW»Ë9XÃÌñ±ן¯ž‚õû¨nï¢çÍ f-[@V˜Agå~v8E›%†q³2#ÅÅñ]§‰š3d['÷”’7»—ºÃGp'SÓBlËQÕøHœ¾˜…9Ñ—i¤7:‹83c¶íu`•IVÚÀܾVú_»?½û- ªúˆ›¼ˆEbÍ{ŠAWÕv¬¤ÓlyŒÉ[ÀÌ´Ph*b_} G)l &gáBÒšö²ýXÁÙóY<=ÙÜÚðËZ.i(¿¿{(Þ¼£DìßeîÿR&Å Ì;ŠôXÿ_½œ|ûŒ9«É÷7vFJgk)ûÏ—ˆÜ6ÓÜûK·—|Åçßsæå1y|.Ô\¨ñ;°kÃO/­åûÙ[TCGŸ…ˆŒY,ÌEˆùyKé¶mÄ–<‘8ïåŽÏå¯ Ï„¤ ½_{š)Þ´×Âñ1Ý.::,ƒA•böÖwÝ´×8nyr/‡Âçðå‰Éým×ü›§Súì~j¦Ü8XöôQµ}®óI÷ØK³‰ÂMpOº‰éñlxå01K1¾öè%eûö³¸n&aþæÞŃ}„^£Â&@Aµ“¶ü‡<¹~3¯ýÇ·Y•ëbÛ_ä‹ÿvó[[Ælò’¬ýQшøX¼ÝÝ>‘ãªøãß—o~ã/øÖoSÓÖJéáb"§Mì²c%9;“‹3GÌ95Ѷèjìô™$¢{î<\»vQWµ‡’±_â>c»šjÙ±/Œ¹ùÃw€²ÏgF¸¥=‘ÓóH/;ÊÎ}‡hnÜÊϾÿ]¾ûÝïò£?¦¹è(åÞáÓiÀÌ–=—9I§38*·¹/G†ÛÌ""òYdÐV]£3úœ¤‰§®º’Ç3Îuœã-þ°“²2Ù9uÃÝÄé’bŠ‹‹)9QG÷eŸ*yi«©ÃEXL6¹ÎÖ<ûÛ”PÙl!al Et“–åáÞý›6î2+~ È 2h­©Åš6zHÙzçýÌìëkôÔPx`ûöù'³!Ð|áñõ•¥ÓNÊø,¼•=9>ܾ]8–#§ÓrÙãìÓ…(sýÜõÜÞUͱ-Û(4´“GÜyýå®ëµè Ž!Á7k"S—Î 5b,s—Ïe¬Ùjò5ìæå÷šÉ^~7Ÿ[œLÅ[or¬+kóAŽšLzOqpÛ6W›•gvãì­¢`ÓnÎŽYÆ]+'Ó³mE=粉ïC_RΦ.æ®Uþum¢¸g0]ZÈY¾šÕËshÞôGÍÌëë¨âàöBð˜uR|°ƒœ¼”þ`³%ú2÷ØާÑQÄÖSo¾‹»ïZB|ù{ì­3·[·Wwä­ZÍòÜn*ÏxûÛCåºr\|¿ì(/§oÒ­¬¾9‹æ op°õòçfØt»ÎRz¢·ÿ¾Ý9üu7Ò>\ãG4×Ôž’̹˜%<…dj©Üß¾ªílïžÁÂÌKí›×ƒÛåÂí¿(l£YòÀ]ä¥8ßWušå‘3ÉÉñ·_ä™§~ïÿøå.Û5 DDWymËü 1$äÎc•9-ŸdcõO7P²2 ‚œCzbXüçßɧøÎró?ýOŽÃ^ó4_ýN3›Ûsábôzðÿ ŒÍf3ÿòB‹ÛÇî hÜBæ´üеëí„Íý{nªÞÈ/ßz›>Ëlþv¤÷¹ ãÂÍÃü‡‡ÕFâÉ?~kÊù“b±X0NþzØô¿/Ún®Ã9ts½ëðû"""òYäv¹qšeÞÐÒÓn·áó˜•DkÆõñöñæL® ÌÈf…?ªßí¯¿¹ééê4«Þfè ¶¬óœÚÄ~¿Çœ×ü6,‹[nO°YNÎ}è+d”—RvªM»Þ¢#qŸÿ\> falËgYNÏœ™ÁWn ï¯(zÍ´8œ—y—Þ,»­«9 T,-C‹í+Hgÿ*œA8Ìz†Û_#¸Âe.­p^.—=κ åcváz6è‹Ìå†é£ðW‘Ã'Œá½åôŽK¤¸"œÜ™C¯W 6§ÝÌG6ó:¶÷?o8^Œ1á.2Ãmæ·“˜™¾]åîÊŠagùY\½•XrÒi:Y‹ÛYNsB.q–cI“ÉOÃAiQÛh5ó†·„7_ÚM‹-œ”i‹X0ÑÆ±õe¤®˜Gªuä|eIœÈôÑaþG¯¤Çl¥¹ÃCCñ1:"'Ó^~ skf㺎’S½LŠ4sSRbؽcH6Úɘ’€Óî%=ÉMi›¹låðËNr~›MÃî·‹ÉS‚±[퇇ò¾7\ºKÙ°±÷ÜÚß󢼉¢á·59~èyé8÷0)«â™·î %a3X}5aÄ{lܰÇÓ¼g&Ná¶[ë9Uz½].Ú<]t¶šÇªþAï#%È‚%h2Gí§nÄãóA×ÅEW(!™3˜–è}%‡™Y[Ùr²ƒôŽŽWìðéæ’vÿû¯;¯yl‡Û‡kÏß^´…Ú†fZœnOôƒm[;˜vg¡–Š‹4Ïïô[o¿PŽØú/µ÷·Õ]½´–žÀwû<˜ä §rϽ¶„/-½L~ûäD[Ç>~ñßžà­ó/º¨-=EorI#ì¡§²ŒÓé‹Y1)μ^ݜް‘•ÔY3éÛ»ƒSþX‡ÑÁ¾-é2üŸÏ"dÿVŽv÷goª¶ï¤=>9AãY˜_ÁSÏzÉÏ‹"ã†Ôþæ):òç‘0¶݅;ØÓÚ³¤i÷Nj§ÍfÑüY°{+en6›•î¿äû?ßëïû‘Oí˜ÙÃí‹ bùL6“ˆˆŽ «¥uH#ß µ¹¨¸³T³’8!YÙ­,-ƒq9ç{5Z‚’™7‹YfY?m Ã=°]Ê#_ø_|ìË|ñ¾%ýƒ©}tºÃHΙÉÂ[îæ þÓ»¶³§â\¿d;‰Éñ„&& 6j%26šîæ–!c|™eyÙ!Nþ.½%8… 3óÈËóO3ÉŒ¹P¸’tö×bÎÖÑÛ¿WºÌ¥u€‘ÓÉg‘×…ëÙ‚5,‚°ÁkØ–6±ÍE¯(¢:f£í—ê¹ûÜ8‚$v‡­¿áæÌÈ"¼ª”c'{I›7•x³¡\\v–رIý׳=$xðá¢?Cùðú ¼­Ä.|€G¸…잃¼þÜ;Ô$fŽ<°ã¹ Lpð`;׊Å:ðÓårMxx¸9E>g 3ó;lƒFóf¦Ýqîže1>`ÙÞï‘«ô]”¼»™ÎüÌŒ± i„ŽœÎ çeäíy>ð˜õPº¿‰Ì¼ô P_ö;üñ4Z XóôFªŒhRÆŒ%-ÆáH—Ýé¸p<­–þA_?êuqQùà8ÿø™  '^çòçu˜t¿¯Ìæº~®5³¼ˆ‰¢«½cH°Þa£ó˜gfˆq É‹NböÜQÃ\K(7Ü=•=?~œoýå—yü…xóÿˈ›þ5þîæ~òÐc|ó_ákÿ¯‰%wÌìÃä£rÎ~_DDD>‹B²§^½C̓ˆÞÓì/²1yrb™jMOŽç0ëd ¿êŠc_åž{½€æs‘£„ ‚ƒ,—McFÝžXÈè(aë¦StÛ?žj¬·ã[v4’3# çUË‘ÒùAÇYäãrÙëÙšÊÄÌV¶¯« ~B¶aš)VŸÙð6þŽKM¢½ªšÞþ º•ª3RRÍû@ÈX2‡ÙÑOF\:Y¥l) '3uäJ¯=m6ó3ƒÁIÆì[¹ï¡¹#?é#t·’–Œ»ÇÖ?VÏØ±i8›*iñÚ>¦e/³ß#Š: ׳Õ5›Ó£‡Ìs¥éy{Ž8fFã! Ó˜2äuœruŸ)§iÌ|OÍ"=9˜Î¦|þt¥$Ðz¦†þ±šÝ5TÕù{¬}×…yÌêê•îæL‡¤”¨«8¯#Ÿïá÷áÚ Ï™HtÅ1*ûôœ,¤&u"cƒ¬DM^Éê%“É3†1£“ˆ´‡‘žFLÿ¯•öÒ\]Ec÷”G™Hi© vp m_[Užx¯Ñ 1ª¿ÒM?ä·7~‡Ž¦6ú‚£ˆ ?×µó«<óÛ!AÅÿƒõ‹þþʽÄþ§#¡qD›Eþgúþ˜ÝÞL·#†è U_ýO^z¸…æ¾`â¢CÎW‚æÿë矻¶§ñW¯¿0bJs¿ÇŸëÿk5-=8¢#¸D0ã+¿dÍí´¹ÃˆŽp|`úÿmíª?r¿Îs¿²~Êúþ^0¾ˆˆˆ\KFÛ!^þUé`EÄÆ˜e_`eîn¾µ‘×_þ¥‘axÚÝ$-¸£ÿÃ@›Èø{Îä3dP+£ý¯ýæäùŸì³Æå±zõÌ!c\ /(ûFV4¬åå_$(2og!nåö´Ë”—!ãY¾ò,¯½úJÃÃñvÁèew0Á?ì×üŠÊ°é¼Ùrþs»ÏÛˆ"{á=,ãè uØenáø¾ÂtòÇYäjòöH×sÍû„IÇá,3˜˜2Lž³&36þ=Þ{e“ò—27g1 Ê^åÙgKˆòµá»‚;ûŸt†‘™ÃîÖ±$XDg'`ug’ö)ýêkÈ„e,<õ:Ï=WHŒ½‡žˆ™Üšg楶«Xvè}j¤ýn0£…c{KiïjäÅ_ï;u fÆjîÎa[=\Ùö.ËEùþFÏž{Q ë²÷Øêá×ä;•Ìýxqm2a 1ñxûÜ„LYL~Éë<ûâÂÍ;bPLhÿÏÍ]íua '{T'›_y½ÿ§ZÛ£—°:ÝFˆ1Âñ꺚keø}¸Ö,S¹e~o<û,‘ÐáJdÉí¹ô¿ˆu~P]äÂG‘½Š¸ôbü± o{^z׊ïrgòqÞY„_/mT¿ð‡m ̼íF³¼žÊͳÞáõ?¬!!绌¢|}t÷xqø·gýiìu÷w…¶[>ãÇr¤t~ÚÇYä}'×óZíLî¹!aø †›î®>l!aƒã\x{{è³…ò»h}}=¸Ít}”_œýàe?¾ý¾²t~¸í-ûxew4+oGðÇrõÐÛmÞ·Þwoòáîq™­ÓK×ó1óZëí³|ɹšó:Âa> ±›¤9>™Þ€þcÜ ÎOjý&§Ó™?"70¹'ïÉPDDDDDD>=F3GÞ^Ï¡Ö$ܹŒÌP’ë——Úë©·‚Ù êm.×– """""""ð®$¢0ˆˆˆˆˆˆˆ<@DDDDDDD$à)""""""""O x €ˆˆˆˆˆˆˆHÀSDDDDDDDDž """""""ð‘€§ˆˆˆˆˆˆˆˆ<@DDDDDDD$à)""""""""Ï~E3Ùí:R"""""""rÝR x €ˆˆˆˆˆˆˆHÀSDDDDDDDDž """""""ð‘€§ˆˆˆˆˆˆˆˆ<@DDDDDDD$à)""""""""O x €ˆˆˆˆˆˆˆHÀ³ÂN}Ýtº¼W4¯ÅJx°Mg^DDDDDDäOH@@zŠÞàWïVcµY.?£ÏKôÜ/ðʼnêú"""""òb˜uuÃbÃjѱ‘O†ÅÏÿs² ™ƒSòù|'®»fµ¥§ir}l O%'#60¢="""ÂW»WJ3Y½xV£—®^a!f5Ä褲¨ŽðÜlbí]§p ªw Qd–õgÏúˆKŠè¯°>;ÉSç0.Z-&‘ë+o_º”—oüŠ’‰_cUÖ¥½µu‘fµZ³Íÿ¹'÷àä20ðºýûSÌïþö? ºw9a;Ÿdcô#Ü›uŒ¶Måç?›EÉ–.¦Þ<ÝEDD> Å··g°Átv//¼Êêó‰ê*eû¶fOÈ¢·¹–{2™cϵ‘NqºÜÍÔ9Ÿ[Og ÎâCÕ¿SäúÈÛÙÃ.f³a·½¿ž¯û€È'œe{j8¼»€Š;ñ9yÌó\vk¯àðÁ"ª[Ý''/?‡8ÇÈëê«=ÄöB “–M#i0;º›OPPpœšv/!I9æ:r‰w^›Fy`Ü!¼üîK_gMƒ ¨q,ùÜç¸yró£‹8’ÏôXÅÆè…71!¨îŽN:;Úéêõö”ØÛÝF[›9ùˆŸ¸Œ›ÆéÀŠ\7yû\˨“ãÇZÈ™1ö|w{À#lÒäwof}Q'†î"Ÿd®¥¹¦žð”dÎåKD*)ÔpÆ¡°‡“Bgm9eÅlÙTNôœ©$Z–õ¸\¸ã}•[ÙÚ=“Å™Á"­É3˜sŒžYÇÖ­ëYób!± óοói ¬qA 7®öÓì~{aÇ›©;»ž·:ŽPïš„Ûpèúù °ÆŒcBº«—ºÓãY²dÔÀo'͆·n³Þb9W‹&ÂZO³á¥ñT7£2¡®Õ‚ÍfW7ÝfåË©×þE®³¼mÐ}b{˜Åýiþ>ÚCWZcÉ_™Gñs(˼ƒsÝD>‘4·[ØÐ÷$œ8Üý?,bétô¶7ÒÐÐA[¯wg.#Žk"3n»ó\ôƒ-›;˜ñ¹B-oÂëÃM¸ÇKOg;-í8ºzðÁµh¡Öm–˃óEò™pïOøÖM)$d¬äß^L¤úɈˆ|Fø¨?Z@•Y‘ê®8À¦mÅ4ùú¨ÙþåÙ÷q[L!»Nº†Ì^OÑi'“çÌeî¬8+,Lðÿ=g–òbôÒ¿Èu–· z*·ðüúnfß2…ˆaêéÖ¸Y¬˜ÒÈÆ-ý?ç û€È'ˆŠ¢«­ãÂø9F'®H¢#Î… ì$äÎaþ¢›¸ó¾E„läp›qQ¾¯ÛùG}Nncëö#œéi hÇ^ÊÛ|4ì~•ÝÎ%ý4"¡Ã•IJ»&êc3w1³N¯å¿ÛCTtµyHZvSÂÍï¼µì~ñyzW~»Ç§1:np…^…öJâÓS‰±›·…ù«˜¸n-O=Jt¸•žævœSofU̵yEÃbé=´?°j29'ÿX(A>ŸïÄuf]'ØðN3VÍ V¯Ãˆˆˆ\«Ýåëx±xwÍlgÛÆÃ4%’šGTxAN»»#˜¸´tbƒÌBÛSÄK¿.$~zºY1qÓÕé%$<«ÑCå1³lÿÒŒÓϼ‰\yûo%» 8r¤‚”{caÂ0½Btùdùúú{o…8ß7N†á饻ÏBpH¶Ø–î_‡ý¡ÁØ?¡ö¸Õjõ‡L]ƒ“{pò™Œ?ˆˆˆˆ|&xÚêis&×?¢A_ûYjë›éèîÅÕçÆíñàñF2nîd’ü}U}íTW{H{É€iZkšp¤$¦‡"×_Þ>ß2ꦺð8mQ™ä¦G ßE]÷ù €ˆˆˆˆˆˆˆHÀ»’ˆ~,JDDDDDDDž """""""ð‘€§ˆˆˆˆˆˆˆˆ<@DDDDDDD$à)""""""""OùÿÙ»ð(®sáãÿ™ÝUï]¨ ¢HLïÆØÆ½'ÎMìÄ7¹)Nâ”/Nqš“8‰oÚÄ)6M3½7I Šzï½­vgæ›Õ  a°ã`Ëïïy$íì™3å´wÎÌ !„B!„Þ@„B!„B1ìID!„B!„Þ@„B!„B1ìID!„B!„ÞõRJ}Þ.{J!„B!„[2D!„B!„Þ@„B!„B1ìID!„B!„Þ@„B!„B1ìID!„B!„Þ@„B!„B1ìID!„B!„Þ@„B!„B1ìID!„B!„Þ@„B!„B1ìY‡ãF©>~1þ°W£Ô¸ÄÏx«Ü:6ê4¶€Ea^œ¬4h¹„ôR­,ô½ÿw¥Sg«Cay°‚ÞŸ'U×y=G§ÜSaF ‚bþÍ0ßÌ«?»W¾®4x§Æ@jeŠÂêéV" ü½Éµý*k Þ¼Øg„B!„BˆOëpݰ@o…_Çé`ƒm]múàË{…ZøL„Æë…Cì¨ _ep¥;¤eá ± – /ÓÈ1×™Sê䔢òÅ*ûv;I7×ë0)o´ð³™ðØ3O®üyGZùr¸ÎÓí*_ˆ×yä°A7A^ þÑVþÇ[£Åp3Ý:Z”•µ + “»dW|zº•¼}:IӬ̪vp êr’ !„B!„W$râvORŸ·hé® ‡— ã,tôÿMÅ`{–ÆÞúfLÌJ²0ÓëìgBÃÐT>;ɵ¤›Þ­óü)Fóç˜?|nй˃ 3Å :ß,ë_ØLó¾¥Vâw$"ÊÂ]*i~ Q­ÌhÒøg—Êýñ*cà¿&)t·iüo¡{mM:u*f#mü"@ç¯5p}œÁ¶ E5–™EEU8ï$Ýõ!›…_N…Àx+¿ŒÔy½Ô\~žk…ÆA+'k|*CÇ)ç¹B!„BˆO¸a;DëÔùÓ1Š!n™‘ ÐzØÉn×´ «Ê7F+x×¼]Ò0°¨<4]!¤QX5þ²ÏɆn÷çGNPYnaq‹Æ± +¿08: ýšjßÔ|9Heo¦“#æz\s8~ÕQ~ðçt:Üa±¹>à©rg™ç (kÔx%*<-¤ô÷Pˆó€&óï›ÍÏŠBB0ø™G/À5‹D7—­Ñx¦Xam„Š­Pcƒ¿ÂìCÎq!„5³½«p(W§ÊÕP© Kƪ´™mjïO^õU¹;Ô`]ÙæVPÅCåv³_£Ð×îÚíûJÍmé2óâ¥rG¼ujˆ[l…F&&ZH2ûÆ›N…ÅI %:źì!>ªTs¼yí8 Ó½ ¨JãùJ× ýM¶ÙŽ]Ÿ¤2Õê›t^,Ô©¾Hyö¶ðÙxØœ©‘oœm÷ç¶°ÔÃö´ë¬7ÛÄ‚+t§Â°€Lea®gûV•8ó÷;’¡í¼e[êu^ª‡Êfƒª6ƒb³govº‚J4ŽúA«ù·º¾ƒdp¢YÁì»àmá:ódÈI³1¹Ç £Gg—¹2ݦò¥ ïÚUŠÌ#èŒRÏTökR-Œvýl6W¥Zù\œ…Y6ƒwÌÚ¿ª>5Ùj.fp4_ã k¹^C¢Í#Rd×y¥ÙÂf+}·¼ì®Ò鉲òH”Ζ&ÅOåÁ…]f¯ñí"»™·‘ñVð…ñþ –qV"<¼Ú‘ˆBˆÅ¢²t”Biž;2)ÅÊ=†“ÿîý÷¤ïz~Öµ#tžÿO@l +b`ã!ó÷ÐP ?X ð½ÍNNêõf/RfcŠO‚’n…ŸO³½MÃ,ÞDŒ´r§‡“/^éà‡ë¶ñxŸrœ„8·ÑTøÌ<+ÑNž,UXjãç,60ÌñîC -XÌ1ë?Ë!9ÑÂÿÍ„Ï"¨oŽÃ?7Qe~0äŸè€˜åïúÙ6–4:ùC¶AhŒ•_˜ãÜ/íѨ¾ƒÕDäƒÞSÓlpÀìŸ~¸¨âe°0 Òk jsê>z»¾[d6vwE\Lýê(ƒ§vjÄϲ0ÑÜ#;Ì÷ßs,Ø;¨Äo³\ÝЭq{™A‡YXž;®±h¡9.6ÛÎ,_µDãÅz_z*Ó,Ÿ×¨¤ª®  «'Yð4—ÛØÿ iÉfÙ.ÔHO;û¤LKˆ…;ruWóÈ©\_(ƒæ+t¥þ?ò5¸®Ç‡©®E'½A'³Ñý:aîÍ./•/O³0ËÓàTÿß3Ìer:ÌŠPn›i!¨Xc{Á®zó Žµð“…VF–;y¶ÅÌØfV®ž±û+,I¶òõ)úº“pš½ÝKaŠÏ…ùŠ0;3?\lã:»Æë½ µN¾‘ 7αñ“ ÓýÏ@uÕëôÚ þZdaî²²n÷sH¶–jlª?Û±‰ Piž¨_Ÿbå¾3a#ÜùZ¨°<ÅÊW•³_A#„B|Ùü-<2µI§²¿Í²Zxl²ÂŽã:®3r’•k½ÌN™·…Û£ÝËŒˆ³ä4Pí<cðû}Î1˜n¶áÑý‘¯p•±ß9¬d¶‹+<]) _L„×9øú~'Ef[zO9 óWY⺕Eá³}¾>ÔÕG0ÿ*7N6×WïJKw§å1H‡Ê¦03FeI¬Êf‡0®Rcw¯™¦Ua¡™)oÅ=,­A·Ù{ˆüŽWœÙ'}+SÃ{¼•/Ov„8Üç슈Ó_ 0*Ze¼Çç²mðòÎe–‡‘V¾¤ó˽þXæâ”÷Ê!â|#CT\ãçþßõnƒ³œ¦zÖ¢ñÓµ×Écf¾6µlÉrò+³µùB¶| ®Bˆ&W`à¾i*ûÍL…9PYííþ{R¼…ˆ.ƒHs´²:Z¡Ó©°Ôl`3Êt’âTÌö{E„ÁÖ:³ƒeöž´@•»Æ¨LóÐùÝQÍýL\6õõv»Î±…xoW§Nã‡GuÂb,Ü=Ve”E!ÎŽVCª¹.ßpÝL Ñœy«Ä·é˜M-j³ÆsfZÝ=:éfûç=ع¿.ÌKÁÇì]YÌÎï Ó0Kk¨m6†ÈïPéñQ µi<^©p{ ÎËÞûytƒË郔wý2˃Ÿ9xk5ûÅ®«ÌUæàËækÖäðq 8Ï4šã`ów/˹ËÙ|U¾“¦°Ísö@ ƒGœ<çšÖaUùüDxåÄ…·Æø™í}LŒë9•>¿­—ûNÀ-³­L¼B‘ëp>˜ ?ݦ1&ÞÊ7¯ò a/hrwºnšiã3ŠÆOYXq&Ú¥ñä)•oÅ)„˜•hã 5¶§ŸÊ7&(ìé†d³“òô.'{›uÚº–¥ºÏ’–nƒé1þŒ±>뎂eÚÍÏ.µ2¾ÆÁÍ™?*u§éÒÿ€Â8sÉgO‡:\W‹ì» ¦†¸g›ôåÓü¿Û|©fÇÏ0·åî©VÂu÷:Æ*XR¬Ä;ÝŸw4iü¾ÔÉ B!>Z…ª<ëj –¨ür‚Ê–c:>6hëv?7ÃÕ®5ä9ÙÑvs`s ÍÂbs04¥Cç³s¦5;¹ʲ*+ST~à¥ó­mN2ÌÏ9go©Ñ ÷ÕÏÂo穜ÊÓØUgPgþ¾Âl+;kuê“TVÛ2r4b§˜éé e5î ö^è=Ó-Tú¾•í|z¯Á–Í} ŒÙêÖÏ·qOx/¿8ïyƒ¥5Ô6+Cä—KÌ“WÊ©fƒV«q& y>‹rñ2ÑÛxayW/³êàù¦ Ó?ÞÊ5ŠN÷hsìk¦4Ñlãƒ'Xè(ÖÈ1Û7Å/¿ÜânãZÍ1úvÍÊDO8Ù=L ö×Ü^®‚2'Ÿ¯þ(@j²•µ=f§)]Ç7ÙÒwÇĪܠÒZ¢ñtŒ•'fküè˜Æ‰›áú ÚO›þ;{œÔ$ª8îàÏMîªöDÌ>]‘·êlíÿyŸÙ‰Ùwº²7+êßEèüx°™fE½h”¦óÿ° •©Vw+Í Ýl%:]È0œϤkýSˆnðW°e¹ŸS"„B|Té]:¯T»¯äkd,·p“ŸÎ ÞÑU«÷=È|R’•øNl]gS•_M72ô¾ÁN°Ù![c¶ŒÏd;yÙlËo_hc¦}Áx‡ª$Ôk|µXï{>Àþæ Ê5“Ä®³ßiãó_rÍúè¶ò½G²Í…¼3»1^îoi»EClséùâcWÞ/…óçFóÿYÁ{Ñ\XÞ}/³<Œ©Ò}ÒÁ·Ë œfG¹W¾@ˆA5TêTÌW™nÓ9è€À(•ÔF?ôß÷2y¼Ãt~»ÛAúyCü‘a*–vªR'߬í¿cÁügìhƒÂz23Ö¬Q*ÉæØÖõ˜L‹JšÅà©+.øHÎùÀÅY>gÖŽ~62œ™éàܨIæ˜7ņZàäw”º" •jÆZyx¹Ê›{ü³ÿ¡.­­:¿ÎsrØLh¤™¾Mud×,Œ%£,Ì´œ2O 7¥©äwp켞TÅýz󸓔T÷´8ù¯ •ïβØc0-Òõ€Wƒ¸ÉÖ§k3O$[°…oMTñ­sžqm·\Bñqb8tžÌ·ðDŠÊ뇜<iåO ,”› \`—Æ ÜËåšè›ú¯>¹¾¹-r¶§’ Ì~®)ò®‡ †¾ž®ZýIVŸ©Ódvê: lV÷U¯}5Ÿò5;lfç ²Ú@³è¤_Æ}¤?•_­ôÀÕ{ñ2ûUåNþ_£ù‹Ï{¶¥|ðmîr•_!>f³½Ñ°ñ§…*µNƒª¦÷þ¦ÂóËûÐåwpÍ0ÚìWÿ9Ñ0ûÇ ªYÏf‡¬ùŸ¨æoönfcÜc|ô·ù£œ_!.—¯‡ûv•K)ªC•÷K*fßüóˬ4ìv°¾Ì8?6×ü¹<¹5\ˆÁË9Ƶ™mY¾´)ý3ýÎ+}SÖÞcpß]/GÿKð2†å3@ ‡Áæ²K[¶«U'}ˆ÷ô!‚.­M:ÛϬÐ`KÎ{Ææ®Ákêîuó?àçÆvƒÆAbäF¯Á±† Ó:U!UºBˆ?×”õŽƒ™ë¦Y¹É×à‰^ìf›x9—MÚíƒmþäWˆËÕy)ßÂòåý’ʃÙ7ß_ßg#­Ù Çª0ÊÇ`Ãa ~1t¹1Ǹ½númob²Ê‘B!ÄG»SfðگɞBÊû%ÊÌqpG¹fRk-$ø!„øpnB!„B!„øO¹”[`TÙMB!„B!„î$"„B!„BˆaO B!„B!„ö$"„B!„BˆaO B!„B!„ö$"„B!„BˆaO B!„B!„ö$"„B!„BˆaO B!„B!„ö$"„B!„BˆaOqqýo¾,^¶þ—§ë¥ëzì*!„B!„B|©ª:ÆüÏÞÿrô¿´/Cf€!„B!„bØ“ˆB!„B!†= €!„B!„bØ“ˆB!„B!†= €!„B!„bØ“ˆB!„B!†= €!„B!„bØ“ˆB!„B!†= €!„B!„bØ“ˆB!„B!†= €!„B!„bسŸMÑh/ÍàX^zðÒÒ rmÑBqFÍúÀe=‰—L¬¯Ò÷›ÑQNVƒ˜ÔD‚-—æéwÛJH?šO³-†Ôé)Dzõ¿¡7S”Q ©$žI°‡š¼*<Æ$byï´…BˆO.Ã|)_D×Ð Eö–B!.Íð˜btpìŸææÿÅÞì,ö®û6wÜõKö4™(ÇþtÿƒüòëX·®ÿõÜ«¯?Ñ©Üð]î¹çþ’Ḵ4ÍŽYëáßsï-_ãï»39þÎc|ææ¯²¾¨ÿóöýüïgïážï½FíéÕheløÁ¯ÙÙa¼GÚB!Ä0§7p|ë~*z´{Z Åì~óYþò¯=TišäÖ\öfÔqöZ†ÙyŽYŽ‹ô zh©o¦[“Ý-„B·á1ç sÿz9œ¯½þ[Vù»þðENýã!žÜQÉÜ5®­œÀm?~Œ¹L¤×°c·•5×ù°k[NâÞ)Kóê ~÷ðf’òߞᇂÆ]ë¿ÌÝ?XÇ´ÜK‚¹´¿œE]ç»—ò£…ç^ǺXÚ7ÆÊ}IB!†75˜Q‘Õ¼ôj:·Ü:ûþgÙ˜c%zd£SVqO|^êÀXF-Å6fOŽ@«É`GVŽšfêm;y·NÅ0T"'-`bø€9‹Ø¶.‹q÷ßÌDŸAÚÃNSm;ÞaxŸþ˜£­¯Ô2ñ¦¹D]Ðët·4ÐÒÞAKcÕÕmø§Îcz¬2 Eˆÿ0g+ÅÇ“UÙ‰%$‘)3&íí*‰=•GÙq¨FÏgAh »\?Ç&d3iFƒVEÊVIâý¾eºK9êZfjžÊ¥æçƒ¹è:Mœ:v”Üê.¬!£™:Ó5ýr×iàìu¢xذ\â~x?Õ™dëã™ãqÁúÛNíãpÛHæM½pÿ †Ú¦¾}›á`ܬ1ø+î:¾.sõ#æ‘våGcF[Kü˜9)ꜱá‡uŒŒî*2§´ÝJØØiÌÆùG«·:=Y )K&9È.Ò;ÊH?|‚²Vÿ˜¦§"ÐXí…ì?PHÇ€kŠ_"³çœÞ÷ÿá.Ȱ¨-^xi§Ø°‚ž¾?xtïãüê‚ zívKøÜí ±îÚFŽó½Óì=ô:[ƒ®çö©~ý #®¹¹ï°µ¬ÿR“ÏM®$ï÷ãDÏ¿/¿B!ÄÇ›½¹kÊuܵ&×µ Ý Koáúe³™˜00øá¤ÊT”t+(ŠAsþ =SYºd#}ý ð‚‰óXºtÑ™à‡ÑUGqA§rKiò²Ñ~b7›^]Ï–œ6Ιg©•²ûÕT9ü©§›¶ú2ŠŠ+iîÑ/ÈwkáaŽäTÐn¶þm¥UôXmüâ??2ää«ëØÞÅ”¹s˜àsŠW×½Ky¯«cßÄÑÍYøÍ]Åâñ:ÇOÿ<.Ï¡ûÙfßÜïbï»ôT“•SƒýròsÑíè¤âÄqŠZŒË_§k;_\ÇîÖh¦Ì™É5“—Ÿ?@ýåÎxsæòÚS;¨Ö.c?\öñj%s_1– Û ïµ}à Çw ÐþáÝ&sßžÌ(§óÌî×iÀÿûÙZü,ÉÓg2wÙõÜ´l}…ûÿüêçy»¯ÜÙ˜ô™_ñ¥9>}'zýŽ8ç?LÜ„fæßc[îWIh¹HšI´—–Ṍ˜Ï ±Å’YCY¥yFD¹ÿä1á^¾6å.~ýüZžºçó+!„Ú“†¯óvÛln[=¥ïÆ;ÇÞekNwk–?lžqLŸ7š¦Â<:¦Äõ ÚKr(ÑChܾ‹¢Ð%\;¾-¯¿õ¶˜è×ß“rvÓÖÜŒ½©gØ8"bIž4—oë9Á £½‘Îè$â=\W¾*9ºc?¥º/½tÒTû»6a¾–kSCú;š¢¦]õ®¾bå6òG.`u”Íýܯ“­„LL HÚp!å›–‚Ã8YI{¯ŠâLNõ§lo6Óg3Ê5+ÂYÅñ㽌Ÿ^~„ÝGKiÇŸQÓ0-΋ÖÜÝdÛ¦3g´í§Rä7)ÑgÏZåv6§rë é‹{F\ÃÒª'Ø™™DZë>2ëÛ 8¸¥ƒb×χö”6ŠŽ6Ë™<6æìfwF5½þ£™½h&qŠö6eèm˜‹×PcÇ¡òsbwŽ®âp¥AuGÉ XÀµiÞ”ÞÍ‘’6Pèa3Y4Æ=øî,;_ø ½—Kö±»k w-;½ÎkéªS ³¼ÄŠH¯áèÛ‡(oí¤û Of.Ïuà~Ðé(=ÌîÃE´*!Œ½€´oŒ¦lVyÒ”Iz•NDÚ"Œ Æ2T^+s*x:·ø*ƒÄFò)6ÇE‹ã÷‘[l'y|7¹{ ñŸ=›«ž.àhyiQÕì+çªÉf}ÜkîÃ#Ø'Ì!±'›CµÞÔep¢Á›ñ Ûx€Ý'ñs‹Ó¢ñ0nÓ8ÍsÀ³1ë=×ç© þYoº©JßÃÁüFžL˜;‰f»4ĺΠ>T“q´™Ø™É„¼¯í¹¸Þ‚÷ŸÃ}£ûÎó™+ÓÈ[wˆÊÔåÄöØ^ÊvïÁ>í*â6p5pâÝ#8'®`²Ò„>i«¦Äö ‘Kg“ÿ‡<*õ Œõ c䘰þ˜×1^><žÕ«¢±]¡Zj˜4ÕVâV|—mÝÃÿ÷ ×·³ëÑ{¸ç7GÍSÍÕgÇMÿ”Ÿýìgæë>=Õ»ÿ Õ³s{3câº(,¶‘8¾íÛòú#mC¥yŒ^‹kº­~nTÌ<1ì<ÎÝR|™õÀý„­œ7ëŒKϯB1lÙˆ™++4Ê3ORÓw%É‹¸iKXfv˜"œ6’–,gù‚ñ›½EQQû›V…V ÒOR©…©p$«…Àp;é›6õÝãJJ Éä3˜@Ȩ Ää¿ö^=ÙJXïìĄҚÃÛ¯Ç6ý:nZ=Ÿ±ÁAŒšµŒ›î\ˆeßrÏŸÅIGkI˜žàžl"2Ž”Ò+VŒ¶,¶Ó™¼ê&n¹q1á›9PëƒWg:óºúúÎŽ’ãäôøb«ßÏK[š·ò&nZ9ŽÆmoaì£)ßú.§êN²íˆ“èˆÃ$ƒ¶òJ9Š3£OâF†SSÞŨ™Sˆñ‹&Õ˜^5¿ÿçsã]OÞ©ú¾rê(ÛΆC¦_w3«’ÙöN6]öÚ3ïº 5úP[jæM`ò²©Ä$2wå]Šû¡/O››HZu+7-Ž¢ø78Ñn`´—qlë~ê–rÚTºvn!»{ˆ¼dicüŒƒH\·¿a›LòøTäcWüðl?¡¾é -YǨµùA{9Y%-îç@N r©éq奔£»Nâ˜t ×ϱqèÅç9ÔÂÕ×ÏÅóØÛiÒÏÙ¦ rÐ]ÉÉÇ8tÈõ:©þ© C—²¾¡>«•íäÕ¼P–Ü|k¯ ¤ô`6­Æ%œoZ#Ç_ÛFMd‚û‹4.²=ïNSU-~ÑQg‚.Šÿ¢©¢²ÿž•Þ²]ìêšÊÂD¯óf=ê8ívfvÕÈé\3'öÌqvÖVÓAè9WºÉÛ‘NÀÜ„[®\=5, öÊ£ìÉnÂP½ˆ7—kÿëaþüèõôlÝê¾¥EñÀ/4Œ°0×+ÿþ …Ѹ‹uAôìzŽuë^ S eÇ6NiKsõ‰Iøæ àœ´es².‰‰£Ï=šJèJ¾z{ûã^ÚK̯B1œ)ÞÄ%‡ÓÖ —s!K fܼåÌI ÄËËÏ ÑÌœŒ%b RÂÎtjŒîNäTR—»}‡ws´1œàæ}¼òüÛdµôw,NTk3ûßÉ%fåj&‡»Â,ªîZÄ3–øàFêZû—×»©É>À»om`«Ù9oË?ÆÉÂZÚ;ºÐ£ú‚5B|â‹vÀd®[=šŽü£8”Eƒ£ƒ¦f…؉chÉΧÓpPš×ÆÈ Á4d =À¶‚“œ,hÅÓ£Šœ¢³R˜Äò©­¼õô1BÍ&Òrî ¹×îÀÃÓ㜘ÅjEwêxøxaSmxûùãïúg_<Ï”OšÜS¤Í$Öǃ€¤…\3;úœÁùàÛ0tdèü8ÝïL`^Z,A^ v³¾ðŽŒÄWµŠÖÒŠÃõì‰!öÅP!Í©aóâ<Ã5“®úÖþè­£“æ†FÚ{Ýùµ·5ÒÐbÖ[fiµYQ 6›í¼oÔÒiÈÍÆHžI¢Ÿù~ÈD¦Ç×’Uè¾TkDOdF¼~qĵÓÜ>xNµš#äúM#e°=íœ*´’4Ú¯ÄqDUäPÒk%.%ÁÜtë d•ø3!Áãâ']ÔXRB=ðŠN ÚdÔ¤<=#‰rÐÒú^·³(¨ªzö¥\Â9ðë곊‡jmœ¤´'%«§¤¼ÇºÌ}”÷Öóì´Íbqâ‡õ¼)§ÙZ¬K6'‡áŠ~°sG;i‹Ç^øÌ5‚´k®gæˆs@­%›·Þ©`üŠé„|žWK›Ç2-ÎvEë©aÑ\[:ñû‡åͲӗiìTåÓËгÀ wí ÷†ïóÃþÐýzô¬èÞÁ¶í¢iÆL»…›½ßà/—¸£oFGþú å+îfiÈùg†…¸[dyÞSl¬0>@~…BˆáCo|31®-tä—×/añâÅý¯•|oK%»··3sÞˆ³;Ác «u³ãÝ"”‹¥é1ŽÏþê!b^€µ·~š»o¸Gnå×ߘƒß`ôHáÞ¯­  [¿´ü !„Ã{˜DCn=>£¢ ‰#yÆD¼; ¢}QOüƒFCd‡Ù¡tÐÑÒAwsÅõ=ÖJyn çÏî-åÝ·ŠH\s=W¤£dï–ŽdÞß¾«%x4qÝe}üS<=qv0nB0ŠÑCþ¦õì,,¢Z‰ \ÕhÎÚE–ÏDÆš {[æn*Æ^ϵST*Z™•Þ÷l‘”™óHŽˆarªÌ—þÉæ¹F|²9* h9ESÆåMGCÿÇÕ(RÆv‘¹é(#Ç› •ðØ8ºUFô=1†Rš4£§í‡½¸úÎIÔnÝuÞÃD¼ÇL"®â ÇÝ!£»„ÃYRS#.a`£še7Œ†òª¾àÑvŒ_8BË¥lÃÁˆ÷Ìr¶Þ«Ë<‰mÑ]ܲz ·}úvæÇ»n)z_ µN¯1“I¨>Ì‘ZwÄhÏf§9~éºì§;ª¨ºç ‰¢­¬œ¾»[ôÊ*FÄø]z-ßpœ“¶´þÀËá:Ob[x7wßy'wÞy7w-AYN)½–RF7³ëÍ“cû-Š—7–Žv\ßœnt•P\«_™óø|¶³ø ™qL]°’µwÝÍ|ŸbŠ›õ‹®Ë2j>«&'1s¶/é{Šøpž«à76…à’LJú¾šÞ »ð$•#RHôPL]ÃÍKR•@ÂÈ(l¾DÄÇâzXˆÙv6–—QﺽÊè¦|ßK¼xÈÆ‚Ûobæˆóo—饪²•ˆ!W<1<‚Ú÷LïðÏå_§½±…^Ï BüOOE[ƯücËÿuÞlLûö[¼ÔÿÛÐiškŒ[Áÿ{f)=­ÍtYÌ÷üìJïÕüvÃêsRö›û}6»”ü !„ܳ‚ô&Ìõ#Ø^ÏÖ7òñ[x'1Q^„,käÅ­{ñ¿ù:Rý ºbèéŠdÎìhü{Cq˜íebAÑQwÚñVŠÏv<‹Ó©J˜Ç² ‹ÙI¢7¿–Äϯ:3×°7Рû“èšvfvàÚtÍðP¼Hš7ƒê—_ §%˜ö§ó°†&³æºÉ( v'^a*5Ð9amÿ”|3oÛ9bÆmS“ðš<‡Å&ÇV|¢yŒšBâ¡-¼ðj4¾šB@H8Zo¯YZ| O‡cß)Ư î›7à“¼ŒÅyöÙ,‚­]tLgÍtÅ› Ì¾™Ä8+^Iÿàí½UÜ»xÄ™A‹â;U×ÔóêË#/Àg[/‘ó×2ËõÕ¥ïù-( þ“–’¶áužy.k—Kn"ÌK؆!R¼X~*Ï]·O°õ;^à™t º¦axÅsÕµ+Ht_˜Ÿob>ãY¹¦–þBžŸZ'Œ\zÉ—û½¨–$†maóú7˜8c)³ƒÎ¾å5n1 òÖ³n]z+ZâjnpÝêPv) Û)8TEüì9 z‹ÑEA$®ö>3ÃÄgì"wçPæH"1e,ù)#Ü·e¨áIS_`ݳæ<„ Wæ<ö}ÿŸõJÛÆuüóP(´Ñæ?“ëÂU<|/r¾Y¬XÌ}cs)_ãPmó>„Mw݆sõ¼j^Y·Ž£ÐndÉÚ ø(æÑ %>´AM'ËZFXÜóLN°SRÖƒjï%ñ†[˜ລžã¯½B^âÍÜ:5Õ覦¬•Àø(\_LÑ[{ˆõ¯Õ0íîkë}î:¶\6¿¶‡jß4®¾v‘Vƒ¶üM¼¼GaÑí+Hô‘KBœ-0NzºX¼½±©ï]höœVo<-ïc=Ýæz¼.e=çÓqt÷ {ø ¾ÞËÚ†KÌ^Ç®§¶âwÇLíê4xšWëøôWPè}ì‹´N§á «ÃŽÅÇ×\¯rÁñqötá°xã}+0š²~kV{__uj/|‹UÓ¹uþÀY=ön'VoO,¹óøR?ë:ïºûö§‡úïY׿“ÞK·Ýü{{|loQUÕõ½Jöþ—£ÿ¥ xB!ĸ“ÕCGw/uÙÙcg0:ÐrA§ÛÞÞ~þx^¤ól´•“[c%nt4~}I8h-+ ¢7˜„Q®À†nv†º wðÚÞZBÒ–±(5l+’=uù”j Œö¼¤™Fw#Mz0¡¾rïªâRôR±÷eÞÊS‰ˆ Àæh§¡Í›´5k˜2œêª=oQ6öfG\ævéMd¼õÇZ¢XpãRFKpY\& €!„B!ÄG„¡õÒÝmǰzããe•[à…ø7º”ˆUv“B!„B|ø‹>~²#„¸BdÞ¦B!„B!†= €!„B!„bØ“ˆB!„B!†= €!„B!„bØ“ˆB!„B!†= €!„B!„bØ“ˆB!„B!†= €!„B!„bØ“ˆB!„B!†= €!„B!„bس^ÊBN§Sö”B!„B!>¶dˆB!„B!†= €!„B!„bØ“ˆB!„B!†= €!„B!„bØ“ˆB!„B!†= €!„B!„bØ“ˆB!„B!†= €!„B!„bØ“ˆB!„B!†= €!„B!„bØæ¢-ÿâÝ2íÂw³8”߆q©)]æòç2hzëa|¡ÌÌÑ`owpàwßá‰ô޾ôõ†Ã¼ô×'yòɳ¯¿<³›JýüeòÆk'h5Φ“ñÊ:öÕèCäÃNѾ­d7÷­…ÆÃ¯ñNnûûÜ&!„B!„âãÃú±ß£™}û#ïÖªÐÕH½ÃŸÈ s|¯aI^JÜæÍt|ón–œ÷1-gφécýÝÁ‰×»ñéòåúGW’ýýç¨òêÅÿšŸòýUá(ïcù ô´ÐÜ=Ä6(~¤.ŽçOßý>#žxŒÕ­XŸÊ#ÎÁÖ—Ù“üõ;;(½m>1BVû×ñÄáÕ,¹îôFåñÎß÷“4ÿÎÁ×c?γn`Âß–¬×°å/ÿ¤ü•¬’r „âc×þë訨ÊJ]õb‰=t÷zâí©ü{ÒâUN Ea8•£·“nÅÛ¥~¢—Ö€ ïKÚFO7vOo¼¤B ƒ‚™û¹ï1W/çù/}¯{¿Î­Ñ>ÄÅ¡tmçÿ­Kd¾­†ª*wgIõ‹$*ÐJgc!qáf×ÉÀÙÖ€ßâÿaþö?Òæh¥ZKãŽyÇøs££ov„bþ{YË­ìùÓOØXÔNk»!AVz+r(vþ’og{»;GŠÙq‹»ŽïþÏBBÌ Î7õó<úå§ØQ׉av²T¿FÂõÎF¬éêѪ*KÙ¼>›”«?CmI!±#ð/9Âq‡‚ï;ÏóœjæÃc n˜Íˆþ IçÁwÈL½‰ÿ SqændC}*w;29|øtÂ*£&36Ì*%C!ćF«Ïá`^£{V¤-ˆˆ`°Û/œh J`Bœ?ZwvÝÝÆzøhŽ<ìYyÕy5·Nñ¹ä`GÛñìö^Ã5ã=ú3’Çëë¹êž«0ØÐœº;?ZÕnžÛãÇê[¦õµ×ŠÅjÅbnS0ë²+ƒõÛ<¹þÚñ:Xf›nµÈ=ÇâÄI{Õ)²OœàdE ‹îY†ç †%ÑS iK§áqzÙNr¶n£Ò; óçº!ÑAX ;Í­̺zZÙÔèji¥§¿¸Mél=É’YÑf9ìïÅzäs¶äÙ‹ö°·w‹Çôz wòn×$V¦÷"ì´ÖµÐc¸Ë©W ’í»¨õ Æ£³ŽˆðuÒÚÈÌ53ˆTÝõH{æìô¿™kÇYp¶TPRß}f6µâNBlй,{‡ÖoÅ>÷VO|ºÀAÉŽgØrwÌ “zC € ]Ñ–¼ð;§~ߌ:Éî™ÔÇþÀÚÊídx«Œ~÷l~–â ·sýšë_üþµ1Ÿêó?Wò¥ø‹§³á7üó’—wÕ~Ìû⯘‘ñ[îù…¯ü}ë+|£ý!~¾6Ÿïß·›Oý…~?¤2bùçpÍÝÐrœEïò¿•º+u½’옺ãXüþ œ%Ë×’Ô°?}ã)¿y‚éoí%ü¶/³xŠ·ù™"^üñ›D_;›®FÆžÅ?Ÿ(bù#hTðâïv{õ­8+Ê)ïÛÌ 6?¹™˜=Ë÷ ³Bˆ-R›C¥Ï2Vîg}v£ãðò>{•X¯;ʶò8–ηšÓ(ßù*™ÁSHô1[Ë€ sTBUe#Íú!vW×P±’¦_Ðv9jN’«%uDÿhËi§WSÎi{-6ë™”{dÕÊÑ^¢! ä‘–6§¿^Щ-*Ä‘0÷l=a8èjmâÔ±tz'N'Å;€ö6Æ­\@äÉ—yKË‚”ö¼˜a¦fæ »•Ön®‡¥™¦&³»½ŸL®âª8³Ñ*Ø·¿ÈØ©øÜ)ž ,»m›_ÙInüu$Zh´×5c cÔ‚…œ|zGÇÜÉ ¯<6½Ù¤›f-Ññ!2º«9q(Ò+aIS™>6Ûmj&{³’¥¡^fÎf #·¦[èhÒ¦O ÜS ï“YAnû)_ª™ä«ßæÿžÿ1í<óƒ_P챕Z߯qí§¯'»x;!7~†SÌ *í¿Y”Ñem[ŽÀ_¹ø.špãå,? ¾›t_O½—ÿ}ù:u] ÒØõøT®ø1sÎ?z(;¼‡üv³æ9‚ÉsÆèZkD2óÎvŸ4z#!¶vbôЬ£–pïg—áA;¯g¦¶ä%~` ÿýw³÷ì«G õ8Ô_§V³åÇßâoùcùi´Fá3?äÿÿâï÷­ ëÕŸðRЗùʸƒTu]Žs%ø!„âç¨di!yÅ ¢½(*mÂa¶@¶à8FFúãÕI\¨·»AÃIw[ ­½àkóÁFh›'z!Þ5œª( 0n"c"¼Ï dœØ_ŒçÊdª¿Î¡*gc-5Ö×y¥.™´ð*²Kk)«ê ûfsÀb%fÆRRC-ŽœLÔÌ4¢•&¬+&`ÉUÌ:3ýà)ÐB§ëzG"ãc:È®±÷oT Qf¯Ðf9Ý`{’J¬oñÉ`‹›ÏŸ]Mxa¿?¾–ÓåÝ‚ÅâMô̹9¦/ëÙ~¼¡0ŠXC¥$·•8ógi,,?3³ÂÑÚD[¯»½g}6å>‰¤Yìæï§+ ÎŽzê<¢ w²÷pYE:á>Ûy·e" 'BQ¥F·s;›‹ ºš`ÂÚ•ŒKKOq)Ýc“ˆ¶ÖQÐ[MÖ¾}”Ô6Ò `_kå]窅:¨®m ?£‚ŽñÕT{lV µe”êj_?¿ƒ}U£%‹-ïæÓuúv8½‹&‡B×–WÈï¯Gt#š™×Ï&¶fIý±-TN½ùcYºÖ‡n?gyy=̒ιø0iµìy­ÓV1o¢‚íy¥ûnžxv\è¨`ï®cÔ¹0•ˆËIÃl3_Ù@^ìbÎó§3;_µsÛ-S¼çö0€(ø»Ÿÿ-”Hï<^xIãÓ¿ø"ŸÚüÜp7YO’Õµ€šºâN?@C+¡PIbUC¶èz^}á§lOÒ^U€ò» Ô—vñ÷7(ÔÞääm÷1I¹œå?Kôþ¿ñä®z×µ#²èiþPV@içã<^£¯ç±ŸõÕu„Í»‹¥6'ÎÞ2^ûã^<Ÿ˜Yæ6)~áø”ìb_øÍÜ>y cÆ^줭à埽LÒ´þò÷“<ö…‰f—ët»R϶Ÿ<Àﻳ2¡£·ˆCEÉ|å›Ëû¦ò¶4`¶(‘Ëù⽪?„BüG=UTÙÆ°8HA¯>Áž“>ÌN¨eO‰'q)ç7õÞDŽ™À„‹Õ‚æÔp¶yá©…îçƒgo0!¾ç^«rV¥0x7ú¨Xf\ËZ£‰ýÿÈ…éæÏÉ®eǸ™?e¶ž¶‚EQý}„î&ÚTíÛCnm6ÙêH&eïeÏyYò ê|c"±æe™ƒT|‰7›eM3Ûßn:¼â™&Áñ‰¡SyämŽ×+¨ö:êk=yç­ü¾[É;*êik~‡nWy0t¼Z¯bq²kÖ–1ã"(ÍÏ%Wo ¹½‹‚\¼×Íüú;¦ª§AÑ (íÛx³2‰Ó‚݃˜®RŽf9HY¾”ð¬6smM¥”Û®â³_‰BíJç¥Í ´{S‘p ·/r(zÈ|ù5º´AFѤÌKäÉ*ÕÙÌMiA¯Èè{Ï3|4ɶ&޵;hªï!lþDr37ƒ™£]3@ h¬ëî›ý¥¥°âÆYûQžßdã굓ÎöÑÏ’ÅOcfÎeñøDÆâƒFYA> 3¯È Q|r8Š‘î7‹Ï&GẎ>}ÅòŸ;BUêÒþçOöR¾g/ö´¹Äm99 !o$kûQ)ËHi:èê£6fpûìDú&@Í^ËÉ:>Wè¼›§FK+uõ'9x —IËcK¼“Ÿ=‡òÆC<³m'íŽT¾Ð? ®î$u!ãé)ÎbÔ’¹\{]'Õûûžé¡~y ‡XÍí+ñgç5L4÷^}9Ë›gÉŒÛøâ$³“ÖÑmÝû(÷¿Þ@Ù ÷…ÇùÁš(÷ÔX]Ãðð'À{$£ÇÉzæÍþ^›Ãê¿ÙÛõíû)ýæïxhaÄ9÷:²_æg?ÞoVâJ ÃXúÝGy`j=O~öGü~ú?øfZÿ‚j8W}á÷L íäÅ{ÿŠâ9ž;~8–²ÝϽÎoñ}Õìê¹üùsëä¹%Væ× !„ø´ÞÞ㙳•£•SX¨*XcHŒup¬q°h‰“ÎÆzêz|"ÂqfSQÙJ»žO®wÖ°‚}vi:È9ÖÎØÅgŸ`4ç‘Wã a÷6òV1ÖÇIyv>mtQZÔŒê¾àÏ´Eñf¯’OŸ$|d¾ziJà(¦Œ ?;­×è2ûv"c¢9g6oo+ÅÕòMkâD%fÆ5ĸŠEß 0V­Ó÷¬œò­Ï‘?~Kc»)1ùþcƒQŒ&¾´‰¦ñ¸”j˜ýbCGëi ºÃ‡ð |Þ~¾˜«n[H„½‘S{÷Sh 'Ü¿ûlùó$0ÔÀV²—my¡Lœ{I®rª¨¨ªë!É®)¹lÝÕA@šfã\7¥ÖIÉფWTâÜuÿ9±Z'ÕÕæ¸¢‡µ†êªÚ§Kq/e‡rñLŒ#ÜVÊÛ›ü¹&ÆN}Þa5ºg€Ô;bÞw™·ÆOcÌþídµÇ1Ù5ÝÜYAN¡/o— ”âC¤ÓTU‹_ôùû˜Ë¢D/3o×qת$3h:±‰ _á•WÌצ j«ñÖ+îß7nx›Œ†óB%JSçrr×)\_Ù•”Ò¸9L‘ð‡øp9N,–­•â‡Í‰£ï‘;åf›ÙÎä…c/œ±¡†3åêk™­^4 »Y¦Zò ÐÓ®çÎOýw-ðâØ«{®Ø¸sXÌ L^ÎÍÉ®Û}-ìÚÛÃêÖ`-Ê ÒÇÃð@Ñ,„Fù‰žzÎúÿçñkîùf5SxTu>Ç·ï}½±ŽÖÀˆs¦š]îògºm…øÁwß`ô·Ëšâï±³} üþö7yêëpoZð¹(³Òl8ðÿÙ»ð(®sáãÿmÒ®zG¡BBDï½ îŽqM»qÚuIò%qœê$Nâ”›8ÉM±¯Á666¶©¦w$„P/¨7Ôµj[盕d dDZ-Þßól‚WSÎ9sfÎ9}–¾ÊýÓó7÷¨5<õO}ó|ßþ?ü|Mï÷­7wµó§và ýêš)ùa~ç §9²)/%¯ÿ£S¾Îßcõ4èƒ…Þø-îÝöUþ¸g ¿\ ‘f!„sDAã„Ggê ¢«ô;[Û1{õÓ¸‰È© Ô7²Í:…™“VÍ‹FaÎÝöCu„/_ü´7ÈMK¡U~DG³3î|{Z›•Jq›Ú&;̘ ddÓám§¡\KXx §S)Póé>™é1ÞÒ¶ŠÎJCÁi²Šªhjo¢Õs·.IêyœÅLãα5`ëÖ&á§í]ô\ :kÈÏ©Ç= äEøûùqè)Ë Ýf"Ní§N˜‰·ÕFK^ V09DA=õ-Æúœ"£¨ä0÷~ïé7F ˜Àô¸õ<œOéæãTŽ_0ȇq³’év¨9ñ0`ÐúâëÄô%F|´Z”Ñ ¸)1·š.âŒêß ÚG/bùùAŸ+VxãÑ7> ˜t·NêûSß#07 úL/Ø…,(|“íÇÛpˇy·Æõ›±"ÄÇA‹¿/-fõ”ì{¤³v‹Q^ uÇwí[Æa+-Tw7Ðy4÷É3ˆ=?¾Ò6´xz{¢„N`ê¨Þù!¦ÈdÆëwRÝ¡î­ùr<XKÉIÝÏ»o¦¢òÿŸçØ^¤Å»û0¿þö&¿óÞ/ÿ}ð¦$ eÇ ™pÛhÞùÙOyåds’ô=ÓîªG3ižšþQÙa.o«çä†ïóÀc»‰ÿîïyxê…‹F¯á¿¹æ?>Ä}O¼@J½S­ -d¼ú:ÙÝÅì?êÉÝ¿þ>Kü/T]Ø žüë“Üé}a*¯ÓŽÕbéy”Í1Œþ¦¥ˆ£U x⛳Î?WÙ["¸õÿ=ÊÁ̡׶’r&“ÌÜ<ò+Ûh«Î'//¼3§È«ï½•¤4dmHf’Ÿæ|@¤èÀ ˜6“PW#ªõÁßrŠ–é,‰÷p½u 拉L<·“ù]xųtýz–õB«5âADÄÿžÁ\_‹Nhâ"¼½ñÒuÐnŒa|¨£¦„Ÿk¥t£„$KðC\#ô8ZÂg]Ϻ‰¸i\ïÿ¬"ãtíí&&¯˜Š_c>9u–žåýÂBðPG#ºàf%©Î*ÇjôÄ{L2ÉÑÑ,¼i^ïÏÏvd²õÝ4ÊÊJ()+äÀÛ{)mÎ`Çž<êªÊ)¯©#kÇN²:{Sâæ?šØ±c|áœõœÀÍë—y>H¢`ïh¤±­Ž¼£'(tÍ4«® ¢¢‚ʦN:+{þ]QÝŒëWº ¾zÚÊêqpŽã'Îbïª!mç ì~ä‹·‡ñ#®Ü33Û‘÷©ŽœM¼·\9ÄÇÏk|"~eY”õ •»ÎfSžHŒ»ߤ¸eIÑQQD…Þ“àÈÑø]u³›¦Ê :¯´ 0ÅN ¬¹Œš¾é“ÎÖ2*ìA„|B/¿sîÀ ü3o ËW}ƒ ‡Ú¿û³òÍ/s–ñóßÎààógõ/ñ|ç¼X˜Myå\ÿáYÞÞXƒi‰GÏÏïÕíÎòvŠ_y’ßÌã;ÿ\ÏŒàžwA÷<6c·÷NÐÕ‡-æñç¦Qt¬c€BÉKßãO-ðÌ¿¢È}áþüߟãåP×4]#ëùE-­­q>ãÖ3Ùi§;{3Ïü:µï úDzÕ)¼»o/é]^Ì×^('‡Ã‰Ó0õß™àz i[Þç`J3wz:fúè%Ü-!„ÿJ+ÙÇ«‰™³ O?3ü\_ú3=Am¢*/ PšOïát—IêÊ4ª“ܺQ¬_1%çuöÙÌ›Üÿ~ª…â´jÆÌšsþ9d×3Êã–³,Î Í)×[èPƳêú‰xk {—Ñú‘¼önÆkL¸ë½zÞaÐC£ÇèíƒÏ/÷°›.î8iý‰žd¤xg Ëîmvªé lÐsËLÂ*wóV•ÚŒó’ã-®ZB&Lïùu¥QAQ:);ú&ûÎXˆY²–/L>Éæ)Œ_Éq³?qÎ\NÖúsóØs”Õ¸379–™ ¥ìÏj l†7žšJöq²âº øê| °b3;pX;±º§zBýšél·cs˜érèðìë÷ºnR:Ξ™fýoìiú?>£4‘uô4Ú™ë¸9Ê·÷ÜH&Ü5¬S¯ åÚI$'¿’Е·Ÿ]%IÜ=MA«öÍM1,_ÓMZg¨žÒûØ[Àª;—®µª#M¿_Ðp¨—"-6«µ_€DM›Ö ^s´ç¯_ ¹GyÿH5akï%17¶$°hñ4bý R½ÄÇFã=™ëæÕòîÆ¤û€ÙÂ’5ñ½³"ˆ ø`8é$G_A`dþ®!®£–on²ú1ÖÅ_aêöWÍÜÅ;/¿„»¯]n$¬¾1ŸÐ3¢za[×ïcèû¸š|w«ÕZôY ˆ´—îgËþ&¯¹žIº*³¼œœÞø.¬^Ï,õ`vÔÕá ¡#ãÕAS‰ñÔãÛq’WO¸³tÍÂÝZIÎòƒüžqWÁX§s]’ßåwêÅ\§»0}×ÑNmi)ÕØz~ÿ¼÷ª1…1!)¦t¶gù±jqŒzlê÷ ÝS–‘Ð7¥CiNcÓyø.\ꄾŸ/rV³ç‡ ~àNzúŠjÇ3ýÍW9í>››n˜B<¤,„â?¤;ó ¶Ø¯ç®iž—ýÍR“Ejj*%Ak¸w^N×ï\º»÷µ‘:;õxxè°fmV·±š;¦\ø™¥9•·ŽûqÃõqL3WhMÝÈÓíÜúÁ Æ‘Ï;™¿~—5Îdlzå†;™ª&Si/#=-•ôæDî½%±§ƒdo-'óD5Á ˜ëWENÆÌ“Vàyl?–ø8|[ (ö^ÍÝseˆ¸ftåí`ãþ2¼gÝÁuá8Gãoèí£·äîäí]Ù(3×2¾$íª»™ÃQ6 díê±ç_nª´g²e“é‘äx®duD#¹%õ4WÓ‡Oe>ÖñSq˜éTîè¬ÎåL¹™ó«+TæRY>Ð÷E4Ú¥‚ !„øL¶èW_ÄéÀ¡HI !„bèFPÄIÕæïsß}óÓ¶+ô©Ú9õìÜþØKÉÉæÈ†ïò¹õ¿æpÓ¿£¥`·}±qúOÿŶ–ÓÔØBׇڕCÛ>~ö¥§ØÝ—ÖöàÛÏCÓ>Ð÷¹8d~BˆOe“Ý@úîcTv÷k4”œæÐÖñ—Sݯ9UZó8rúœÚÒ_ho[Ó6òVö•ÚûnZê›érHq !„¢—N£ê]÷C>øèú>z×çG?úÑ7?ý©Þùó~§98Q“ÈóCŽîtìæW?¨å¾×ÿÀC‹ç²hõZfwlæ_5“X1ÁG-m9d—´¢÷ ÀS¯é锵v8qÓ¶Q’]@£.€]_‡­ŠœJ[Û8ñ»¯òTZ0ËÄ`Ò|°C;Mùl}~?aŸœ;çŽ%ØÝ•²öÓ­îÇ›Ú1Ì/hÆì‹›¦ßÁ šHtå_øUê8ÖÎjáù'w3íÉG˜7nÒ€ßÏñ“ˆBˆO!;¦Ž4¶¶0vâ(Zmà•Ý…4;½O˜ÍÒ… øëú@²9”g$i|JíiöȦ¬¼‚ª¦Ìu¥œ=[F§÷B<û5šö¶>wí”DB š$šêZÀÃó¶³{s"ñºl']-õ4Ô×QY’Ï™ôLa„ûÐÈâ?ËÞJÉÉÃI=Cñ9^!!x÷œÈ ÝU'Ù½çE¶`Âí9ìqý»½›†* á~ x9h?KJFë ïY¦«Œ“™fÃ|Ñk†šžæŠû´5Q˜v˜£iYœ=gÇgT0^úáîSÁnµ£èt=㦡”Ça«É$«ÍŸPÝeûo+<ÊáR-a>è?†‹é`yê)Û“ xGà®é½ÆŸË|gJhTü òàÒ£e­ÉàÀ‰:<¢Ch#_N1sì`¹ÅÅ÷}ÎÖ)„Œþ ìÿ}~ò“Ÿü±g Ýûqö}”~Ÿ‘3ÄY·ŸƒÊ2¾x÷bô÷;Øã:#FG!ÇNTÒÝó…qþßÜ:­ÒÈÁ§ï硟mâýwÿÈWî~”ÍevEÏóŇÈÏÿϽµ‘Ÿ>øÊèBi:ÀÏ×§·ìåß=Îoîä¾» ÿþÒQÃþÝ¥u}ñwüc5ŽÁöSµ‘o~ë~ó•‡ùå¦tœ—&Þƒ_y„‰~¥Üß’¾èqîˆÔ]á{!„âÓFÁÒÜŠ~âͬ¿)_µÍtZ zù¬]1‡¤èŒç{'vªÓS)íÒ Ñ(4¤Qì>‰åËæåé’°|ù’‚{WR:ÏQRTDa^MFæ3‡Ø¹åMÞÏm»øÁG‡¶§º_ÁÑÝE[}9gKªhîv^–îÖâTÒr+1«ÝѶ²jºõüâ’µeûšC™2o.< Ù²a/V×€ ‰“»²ñš·š¥ NÒ?øw|0ÞÞîƒ|ÔñוþîÒ]Cvn-–á¤çŠùè òL:g¯ôlü`ûtåóõ j cÊÜYŒÓfòƫǩîŒ7{ï<¿ŸÇ0ÊaØÇ«•Ì£%èü ü­…œã'H?xœbËÇT_Ë“Z¶Y§+è8_üN ORÔòéx¶Ri/ãtA#ŽSW‡ËQˑ׶S<…óâÑg¾É[­·™Ö ï?Iaf!Î+lk å ¾DÄÄëúÄl«TÛ^OŒŸPª!áê÷ïǾðI"'4³@ù{òaRÒAÓ"¾öäqžøÅ:ý"šä³˜·b-·­ˆÇ=õùÅéÅüå•/«Shxûë|î÷;YôõúPØÈø·ÿÎ]aZÌïý7wmÍä¶Ø—8<éÛlybnöÕxßñvTßÊ}ýª¤.’œšÌ'p>þ ¾«Ãrâçîgñ£`ËÈÀô· ¼8ÅcÀœjü—ñÍû_fͳ<ýDÜù8Ø÷B!ħ‹†3ï²½mwݦç挅ÊS{Ù]䤫µ÷Hf,KSq>íS"{æÒ\J4î;ÈÙÀe¬IhàýwßC×-$}p;ÊÞE[s3–¦zìAñ„DÄ’8y>&ýÅwÑÌt„Å1ÆÍu竊“ûQæôÄJM5¹ì=¸ýŒu¬™Ð×ÑÔ:ýFÖ¸úŠU{(ˆZÄ ¡j‡ÞÙÌÙ¬V’¢‘‰—BØi)JåxVf«ïØY,žæMù‘ÜfÌ!Æ5EÚ^Mzº•„cpV¤qèdf¼‰™±ˆé‘FZó‘c˜Áܱ˜ OpÖk:SÂ. žUÇ9Ð<‰;oI¢'îr#Ë«ÿÆÌ8¦¶%³ÞŒÏ‰=´kÚ)qý;å~SchoÓOccî!®Áê=–9Kf©±`nÓ ž‡é£16v,=gfrÏØjR«Œø;IžÏ"ÖL5Q‘zˆ´Ò6ÐÚpÍbɸޱLGù¥eá1x)—åPçÖ¯ø`Ÿk謗†Ùâ…ÈYËÉí)T´vÐõž;³–/dœ¶98i/KåPêYZ5ŒŸ³ˆ©&”¦NT›hÊ$£ÚIÈÔ%,Š÷g°[¯öÊT ýgp‡§f€ØH%êØl阣ä•XHLè"ïp1Þs¦ap]§‹8YÀÔÐŽV3?9D½[Õ2LÃ2a.±Ý9¤Ô™ð9wš3 &/ftãqiÄ8n>K§†á¦ôÏÓG¨Çjpo̾êþÜ5¯k¢‹êŒÃœ(hÄæ„y H qSÛ¥AöuQP¡†Ó'›=+‘€•Ÿ+³'Ý{._J ë©ç³®›Jþ†ª&­dtϵR~è0–éó‰Ü™Õ¯5pfoö¤Uê1ÒºœÆDÔ¸ ¾˜×)ÞHMà†Õa>¡«ÔÈhªõØ×̸ÈNŠK Ä&˜Ù·'Ç 1ŸÈUßç¥Ý‡yï¯qs‚…ƒOßÇ}¿K¥øt&šäŒé9Ðü§N'$û…vµÛ7—Ù!½ÅeôõÆÚjÆ=0ÎÕÒâp«¨îòÀóªóxT ²Ÿu?Ú°ù,›äqŋձcm„ù¦ðú{•ž‡ì{!„âSÅ@ÄÂ;¹.ÚAEfµ= –‘ÈéËX±|!vqËV²rQþj³«ÑhÑö5­Z)ÊÈ¢ÊÄ(GiÙ-ø[ÈØ¹“ýÙ =mŸÆ'Šä™3™6Ƈ€˜ Dú)¼ó¶dµbíw;ËÙÑÞÏMk.ÛßIÇ0ãfn»a!ãýýˆ™½‚ÛîYŒîè~òº/M7E'눞[_û{:­ «X!Ôþp6ûN9I^}wܺ”à¢]¯óÀØ‘Á‰üΞ;ʶÒtr»=1ÔcÓûÍÄ_w·]Oãž÷8­ì|Ã|©Ø½—ÂsYìI³Ò˜¤ÐVQQ1œŸLmE'1³¦áÆ$u`:aß¿Íeœ©žüÂúžóÔV¾Í):fÜ|;«ãÙ³#‡NKÝù¿˜‡ÚÁzÖWHOy-öŽJÎì;@‘ïlO  +k+Ûkc¸îŽÛXk Õf$À¤Áyn ²l&‚“æªt‘Qö©ñ&ù–{˜7ªwZ•²ÝÙͽsÿÛ 9°õ%JϺ ™;Ù~RM›6„äÓˆð‰eÞus‰u(ú•COšv5·úNn[JÉ{ïqƬ ˜Ë9µû碗sËM“è<ð>9ƒ½àPi';­„™áH\¿œÅ0>‘Ä„p*sK°h¼p7§‘Ò3D¡EÕ¼À\AviKïøF±ÓP”Gm·+-eœ<˜…mò¬k åõWIéšÈõkçá~j;iM΋òtY ºªÈJM!%ÅõI£°oÊÂ`u`(ûl]Gù¶ä²ìö»X7ß—²9´*C¨oŽFÒßÙCí¨h\…x…ü|È4MÕux……žºh¼Ã £šªöÞãj-?ÈÁÎi,Ž5^2ëщÝbÁÖ—ÜÁ—;_àäïÏÀgÞL‚?Á‡FDDi<Èþs~tÜȆ ¯‘é ¡eÿ ˆ€XªNr8§ Ek$$~k>ÿ$ÿûôZºwï¡T£Ãaï÷B5õß6½¡çy4ÁýÂ3J®g™Ï)‹I,ø?ð}k+¡5AWÈiuïÇõ—ÆäÁàá…†¿ãÇyñ™ÛiþÇïÙÕ¨\á{!„âSHc"21˜¶Vzz¯ÅŸø+™ç‹Ñ¨¶Ë~c™•ä.d:‹&ïÔ(]µœÉ­â\ÞQަâdc0þÍGyûÕíd·ôõÔlv´úfŽíÈ#âºHv…3tè´ N×"î£ãßȹ־å]Ôægï¶ÍìV;çm§È*®ÃÜÞ‰#8´'X#Ä5jû$só ci/8Éñ”llí45k4Ž–œ:eùmDMð§!û f/ÚŠ²È*jÅÝ­šÜ³ÝêEa2+§µ²íåS,™Ã(ÝÅ}a«Å†›»ÛE,^ÓîÄÍÈAkÀäå·÷ÿöÄýüùé 6¯Ÿ©³íá†OÜbnœvÑà|à< <=öÞ¿ûL`ÁÔÑø5XÔë…iÔ(<µz|Cq´´bs½{b²¬7ï°;0¸ òžâšI×@}k_ôÖÖAsC#fkoz-m4´¨×-õŠ©7èѪãƒÁ€NsñÀ¶!/%q±^êß’˜1¦Žìâ®Þ]„%1sŒn^‘Dú™i6œRGmy^Ó™è=ЋWÌë‰kÂOhe.¥V=‘£Õò(¢ËÙ@v©7¢Ý®\éBÇ31Ð cX4aŠ/1“CpwŘP-­WiÐjµ>š!Ô«ìo°u5nF´uÙœHË¢¬;še7LÁOs•}©e”¿íUf³4ÖãczäRQ‡¢vµÎö? Üp3رÙWTƒûÍL]:žË^¢ aêk™®½òrì©å4'šÇ3=Òð‰^§F@s­Ðxp?Ö[~ÈüãÞÏÓßbU×~ö]ѵ§ð§ï<ÍÖònéX¨.(¡+,’‰³gaJ=@fgï²âàÚfÎ'^?p´¬üQ¹ú·¼ðÂó¼ðüÿðØÊÈ!LåÑ1zXûé_iöó‡—ô|þó šôy¾½4—?þõíƒ|ß!í°BˆO)gc!mwÊOg_×F}Ñi22²©R;îgÕï222È®h` ¶ÛùÍψ¤³°ŒöK°×§óö›Gi1˜ž¸É^ a‹¯gÑÂë¹m•ÛOõý½“ÆÔ÷)‹^ÌäóÏ®X°(î]í±ÓL[‡ /WOÎZÍÑMo’böÃßÑÍè71#:MÃiv¼¾Ÿ²Æ Ïu#·Ä5^7äµ—wSîô#<:–È7œN]øDÆ·ç’ß\Bž9Š„ ‹£?^^^êLJ1sÖ²8Æ5¨×`òõAoï £Ë~Éy¥ÁÛ߇ަ–~3½´4µâ0¤Õbïø÷nΓ×K0‡‡ÁÐWN:Àöô¦÷é-þ&¢9º‘m~“Wßo qNœºoå e1ð>}ýèljÆÖ?`‘ŸN‰kÖˆÆÈ¸•÷ó¹ya=å¡ñŸÂºnV¯sšžqHÄ‚{¸oyìÅX Àfµõ ²hÔ2Ó©ßõ¾4Io4ö=n¯éyŒÑ1P|Hé$?µ±3Ç 8>rÍL)¬o&sËF6¾•A‹½„ÜR+úщÄ6f“_šME@"c —ÁœÎ‹ƒMš¾a­ÆàvþÅ ®÷F)W¹(kLá$NŸÁŒ®Ï4ÆöM©¹R¸Úþ[W¶ˆûîžE ¥šì¯ñ¿ÿÜM™õÊûr§Q4f%ÓÚN’Õúqµ0Z||éh5_8×”vÚ->øyCíÑmœqºÑpêgRÕUOΑŠ/JsË)´äåaßo¶”@>dü£™CûÌÌZ~!3nSX½¤‹ý{Ï^öŒ>þK<óM6}ñz®»í.î¼é&ÞÉ·Ÿ¼¨I_àG×çóÃõñµ/ßÃãÇfó“Gà9ÈÅÇ?n,ï<Éç︙ë¯[ÅŠ•ëøúÿe^5ð Ÿ8ð~<®¸V;)ù;æ»eE€ëLóböW!éÀ¯ùùSàûgø¿™+„âS9L¢!¯˜0‚#"Iœ™„©C!(Ì­Æo¿pFGD0ÊÏMíPÚhoi§«¹œ’úîÞŽ¶£•мR/mæ¬eìÝv–Ø›Ö2¬/í¥Ù[Å‚ ž=VÿX"»Ê{^ø§qwÇÞîCü4J7;ßä@ñYj4!k4g$Û#‰ñ^ЖyˆÊñkY3EKek,³ƒ{Þ-2qÖC"Hžd sÓ‹ì*•vW\ÛlUE4F-`É”qŒ 5ÑÞÐ÷òam(Çw’¹ó$íQ êHKðèpl]ZÂ{^Ž8·†2šZ”îbö¥¹þžÉÔí>xÉËD5˜ÆM&²ò§{{ùJW)©Ù:&M ÂÀF«ž»A4TT÷”¶S¼þZ-CÉà 㫦Gsáºw.3 Ã’õÜqÃMÜõÀÝ,ãzT`ð²lŸÆqÉDפ’V×QÌ9PÇ=Ã~  ­Ó†}€ï#Bi+¯ çég å•Â#¼†~•oH'Ë0µ/ðrÙŽŽÂb ‹ïåÞ{îáž{îeý²pÊs˰ê"˜8¶™ƒ[K NÝhÑMèÚ͸~9]é,¥¤ÎùÉÔã°nGÉ 2;"™¶è:Ö­¿—…%”4;¯¸/]ÌBV'Ç1kŽ'‡Ïòñ¼'Vƒ×ø‰ø—fRÚÝûdAWqUá‰uÓà;é&n_6‰˜èh¢£Bñ1x2f4®—…¨mgcE9õWY®·¦ºª•ð€O<ñÙW¦&€[ž}é’/ Lÿî66 ’åÈUßãÅ•cnlÁêîG€÷ÓÖÜ™ö•çØrMþ¦Þ)qþ_gÓÿõÛú‚§Ø3·„>ðëþ¹™/ÆôNRÚ¶óø¯sêÞÉ,ì­ÔEó…W6ôK³÷ ûyˆ—7–Q/f#³/Êú*~ýþªŠdàï…BˆO{%¥L˜ç…¿¥žÝïàµø"B¬häõÝGð¾ýf&y+tŽ¢¶ssç„ám Äٱqø……âßaÁ¤)¹Ðñ,É :z+ütj'ÙkA±ÿµšÀ¾Þ–bi ÁéM¬kÚ±Ú1kÃ×5ÃCc$nÁLjÞxÜÌ/ç£L䦛“ñÑ(4X샴Ԟ8NÇ„u}SòÕ´í#M?»¦ÅaLž‡Mgc+®in1SˆMyŸ×¶„áéÐàŒÃjUÏO‚'Æc;ZHÂjÿžy‰+XTòÿúW6þúNº|fpÓ %»Ž£™s;±‘zŒq/°ýH5. ¿ðâÏ ¬¾±ž-o=¸î¦:ÞÚüò½¼pt@Ôò[HîÏ·ê‰ zŸ]o¾GÒÌåÌñ»ð'cüRå¿É† ¹ø:[qÄÞÀ-®Gʇ²a E)ÕŒ™3—`Q:)*‚ØLçg˜xŒŸÀ¨C¹”Ûâˆ8·…‰á½c,mpSµ¯±á_EêÀ:¿p·O¦{~øuMQ´½µSñ¡6ïYܬÅÍó õM§WLj ãæ3ñÄ;¤ÔE³àcȺë1œëÔðö† œô³eËÖMÀC£ÀÑŒ ì[Ðá$[_NPd¸ZOéùµÓã›^£û†oq[–ë;æmíF¼=?ùßNÓ¸ôÅ&uý>†¾kv”»Óé,’Kú¥Ú9ñ›ùiÖV.G¡‹ªô½œ z˜¿þ`)ò»xB!Ä@=_:³ßäùÂ$îŸÝÁÞ¹ø,^ÇÒX¯¾Ž°BwÅA^ÛÑμõ7w…½í\'ާ<ì6>7ËGñVþï„ÉÑJË»ÑZ¬ÄÞrÓ|\±Ô“þÎÛäÇÞÎÓüÑ*]Ô–·â;&×SXëRxóZ¦ß»†ñ¦‹÷©´å±ëÃÔxNåú5Ó¥Wh+ØÉ‡5,¹{±Òè qᄱÓÝiCg2aÐ^ýzà°tc×›p×}ˆýt©û1e?—rbëêÆéæ1ð~‡•‡!¦ÇyŽƒÏïÆësŸcZÏ ÐIóñ—Ù¢ÜÌs]A¡Q© >؆Îv :Ou¿šË޽»›Î„i;PšNðæ1?nº!þCýÔ©¥xoUÏàÎ…ýgõ8°tÙÑ›ÜÑ}êêñP×uÕ»®žòôpÓþ{öõïä´ÒeQÿ&·Ïìc"Z­Öõ»J–¾­ïãè÷Q$ò‘Øi-Ï!·´‘.ÁÑHˆô‘Ÿ B!®ØÉꦽËʹœ”ñ3ë«»¬Óm1·ƒ—7Wúq5¥­‚¼Z=‘cÃðêÙ„Mm—‹¨´úã l8ÕΆÎâý¼s¤Ž€©+X2)h€;’ Ýç (sD3>Ì}H/šSºirúè)o?B …•Ê#o°-_KÈ( 63 m&¦Þt“FÒuÄAõám”¿‘9!ÃÌ—³‰ÓÛ¶qª%”E·.g¬—…@„B!„â³IqXéê² èMxõÈ_ˆŸ¡@d²‚B!„Bühtnxx¹IAñ ‘y›B!„B!„ñ$"„B!„BˆO B!„B!„ñ$"„B!„BˆO B!„B!„ñ$"„B!„BˆO B!„B!„ñ$"„B!„BˆO B!„B!„ñ$"„B!„BˆO?”…ìv»””B!„B!>³dˆB!„B!F< €!„B!„bÄ“ˆB!„B!F< €!„B!„bÄ“ˆB!„B!F< €!„B!„bÄ“ˆB!„B!F< €!„B!„bÄ“ˆB!„B!F< €!„B!„bÄ“ˆB!„B!F¼é¦&/›Êvå¢o•ö òÊÛP†º[EYå´)ÃØõ‡Yç/®Zò ë±~Øõ•VʲŠi´_øÊÙZFVþ9,ÿé¼8›9›‘NzzïçtÎY껇~0”Ž*rúÖM?EQM;ŽÿT¹ºÒžS‰«Ú*æ ²K[†^Wû­+„B!„bhF@ÄIÁ†GyâÍJõ_¾+ßô#þp¤cȃJ¥ý$¯üþŠ®4v–òÖÏþÂÑöa¬ó‰ÏÅivV¾ÃO~¹sι=[ÿúo8ðAÔÇRÈK?ʆ2 †ÿtÞ:ð‡ÿú>Ù¼…-[¶°é¹sßš/ñBîÐB1ŽÂ|çѧyñ7yóµøõ×nåöî¤æC”ͰËUMû¿ó yjݱgýÿùÄЃ'ýÖB!„B14úÏ~<˜µr?n/•÷=ÀWHÇYΞƒn,ù娾“öÚbJj:qcÜ(´ÎnZ;4xë›)(±™°„Ç»Óù¹d--ù¤?ELy9qcFìwé:Ú*ò(nrgtÂX‚Ý5êW´vêð6vR–W3,±An}»è ¦ €Z{1ñQø Aæv? tÓtIšÏ2Z()(ÚÀø`÷KöãÆèøq5W.z¥”ÿù;&|Ÿ® ¼¬¯˜Ö™·ó5x"w>ùcVºõn«èoëùÚ›i¬ûÚdL~Þ¸÷dAÁbnOõ¿/ ùiÃWòÍŸ}‘X×÷–3üážïñòéå|gª~à¼ôl®‹º‚|j”0âãGaê_L¡\•Îò ›ðŒI ÒG÷ᎉB|V¨×ÒÚì“d–6a3†0~Útâ Ÿ`‚:)M͆ęD{ºÒg¦8õ,S“ s%Ki$÷d á Z ò´Lœ¥ö@†iV;7ƒ<ƒ,äÜ–s{Hm¥œ>•GU›QñL6ŽO´8‡R%¤å³,íͧŸ"¿¶ ,Sg&âþOù5{Vºj8“’AY»ž ¸iÌØ{s[i&ÿÈ)*Îϲ×à5ƒ¹q¾\:*q¶Wy2›ŠV'^á‰L›o߯i.çtz.U-vŒ£Æ3mZÜ'Võ#မf®dîSÿ`oå}<8F‹³|/‡Ü—òË­ëÖ<ï>ñ^µLfÎ87ªÿ˜ÎÛÿÈïfìáѧk™ÐFnôüø ¿»7‹{ßþ.3´¬sëc,+ÞNNk%Õ_Áí–orÏøý<ùÁ:ºFýæQþtv,3#›Iý©ŽÏýþWÜÜõÿõ‹J&tb ô¤"µŒ?ý_‹Ëç¯ßxšÌ˜9ŒW øù™þóY|Éé¦ s»É¦~µ°‚C¯^œæ»}Ôï»sxñÉtl¾TÎcòÏ^à›ÉV÷ólÅDÄu‘ñt3+Ÿz†»ÆV3Ônÿ)?<1Ÿgþ5/×0HYÿvâ»§urç‡ÏÛ€¬˜Í6Õã¾õ;÷SýÕ×ùöT5ýÖSüñ[‡XõçGH¾ÒÕÌ-œÑÁm¤4:Ô¼Ô˜—?Üìà­o?Î&¦’¤ÏáçŽ;øíona4Ã,×Q—æs{øõ÷÷¢S¿Ï>zŽeOÿ•/&m]!„øìéæìûÿb¿uKgÄ¡oÊåЦ·è¼û’}ÿ^¥ƒªœB¬£“‰¹êvÝpœKå´çd¢Õ^wg1)ûàœDXŒNí^áKìD¼ÔFïCu޼÷b%3¾°œ‰€9·åܾ[)»_Ûó¯cþd ¹ÙüV;·ß1¿Oñ=1Ö8¼²Tš8õÆ«œ ZÌòÙXаùu3·¯ŸMÐòZy­^£u{c'­ÓW³ ÉBѾ·x»ënOöEãl¤¨ÄFÔüx<ûꜛŸé²à–Þu?ÎY+˜ Ž3ö²që<î¿9ÎB¶½–‚÷’U,šµ©[yu»“Ï«3JäCG@X9ï)þ¶§‚ûФlÏ!ŒËžÆÿPÚ[P¦=Âo›E +r7÷ÿòµÓÕkÊé Ly‰ç“= ý½ ç`ç@ë”1ë/PxôyÆë{¬u]lÛûóÔ¿ó«ÌEüñÅ/«Shx翹÷ÞgÑ—À^ÔHÜåÎ0-æ­q϶,¾°j/[í×ó×ï?@¤ÖÉúS»)³]þÀÎp·û_É3/T]k€‚~iv©u¼¬‰¸ßþ¯ºžz!÷UîÛšÉç-»x:{Ï>ÿ Ñ:èšùëÿ¼“U¿½ ÿ.°–‚—øá 嘚ϑZå )V7H¹©e8pZ²ìþðy;ß0¤óÜ#_g‹Z†Ý %ÔÜËï?_¿Q|yG:ßœ: %m…“ná±j»Ò]GQN6]Xi8ý*¯”-äÓÝÍK¡G&Ïñ/ÿî&iãý|ÍgÖðM¯a–ëO.¹î4ø°òÏO0WÝNË®ÿÇÝÞÊêûs‡´®B|Ö( iì/‰bÕ§2Úuw(4„ØOn‹|Ýè¨8É‘Såj3ëEÔôLí¡v¶ÚËÓ8r²„V?q³25܈ÒR@Zµ;¾õéx/àÆ©&*ÒsªÌŒ¢±¡ÍdÑXWC¦ ²Ý ]¢ˆ¨v•×àHŒÆQYŽ5È“Š³µ8c"°V× ¨¥š1›5}}ö\RjL4Ÿ!£ÚIÈ”Å,ï§vú»©É8BŠÚ–ÙÝCH˜3‰Í¤ïL¥²­ƒ®­îÌ\¶€±žƒäiÐí !çöˆ<·•F²÷Ä6qSF]8Ós µšXV'„ ~0 >%­}ýáÁòí ¥8”œjÌV ÞÑ3Y8=Ó@ivëÙÎð®Cƒm碑ÂÊò{é Žv&s÷ò‰¹V ¹‘Žú÷(j˜IPˆf˜é³Ó”w„ÙµØ|b™µh‘êPo ²¢óJ ¼.í’ãxmœ·¶³)dxÍæ ‰¡¸&ÝÌX5…‚iTOZN„ÂÕÆØØ(ôÝ6´Fwtç+è…z;YÓ„2i«&Gôü=dÙl ÿR@µ#žqna̾uAž=ç¥÷ÔŽo®¥ÕñhØFH[jdÆÊ¹œÛ³‡r[{™X¶¤÷‘ W" â*xåÇñõ¯}ƒÿþõª[Ûz^\ª ÇÒ¤Ë'f]i9©Ê<“§3¦§Fh˜2ìS:@7n³û.fF_olê¶4ã—°´ë9¼û+|÷çϲ³!’¸PÝGÞîP^A¡‹žÅôžõÔ‹bPŽÎvJOfÐÔp?~û1{ì1žxù4M9g(è=ŽB^üÕ1æýìyž¾ËÎÆÿÝC³rår»<­-Tü;ò¦Oâ®?ÅSOýœ_þæ—<àõ6Oo,&`Ù*"îädw'v–3}UºêÆÓ¼ûÊ+lظ™Cõ“ùÎ?~ÈrÍ yi!/3°ÓzƒBVþüe™¢ÿÈåªO˜ÁÔži4|¦L'²ð GS‡qL„â3¤³¢sD aç/Ìü—27Êgýq6ïifüÊ[¸eåxšömãŒYéý~wãVÞÆ­‹C)Û¶•¬v¥³’¬‡(öQ;ùèÌÚÎκVª­Å±zZmîøt»ý¹ƒwU9N5åD/šŒWy ŠƒÚª.Â"¼Õ~ý9 Šêqݳp½p=}ßqÎE-cÝ ItÚCN—ëI܃¼[À’[î`Í\_ÊRóhÑ„0yéT½c˜³r1ž ž§A¶+„œÛ#ôÜVœØ,l—tv5~ãˆwKçÛ8t2ò& Á1a=3¯Ë·bÎá`º“É«ÖqÛº%ï&¥Ö9pÚ•á§u°í\Ô¿BYö[š–ê´ê1 8µòbòÚ»™¢vúìx;MÇô›naå¸FöíÊ¥}°²ê_Ç’âH¾ä8^œ4U×áŠÛù±p¡ÔPí:,Ýt·åñþë›ØòÞ›¼øÜ&ŽUv÷º õV2Õ³#ηìu54ù÷îÐ{`¢½ö,Eù§9tà,~³&ü E"ô#åЧ¯b^ßÙuÐÎQÏeü¦¯Dg_âÑ'N±êW?âá¤@ôÕøò£-½×äqñû>¨WXgР‚N‡ÃnëJ³a×ЫÛ×ÜÎW(WØKQ4Þ³yüÕÜ“—ÁéÌtöýókl/ÿ¯|1Ôp·;$în\x¤Îµ¢ú¿!Ë¿É/ÿ{ÒùJ¡ÑhÐ X1u$å)î÷Bñ0óîü/e/æ)7Í€iý·äMcÀËÏ?×Â~þÜöù%¼ñäNŠî½‡ëbŸgÇî÷±ÕÍæËã>ô«xô}ï¹jhRËD‹Ývá'p¬æì~½Ó·†S®Ûxå¢k¿r!ÀãÊ«šƒvˆë !ÄgŠ‚ÕbU/s†ž;AΚãlÚ™K§SÁ¿Š%ö,Ì>I´g‘¥.ën¨%¯D ´å¢LXG¬—N]o"Ó"s¬¸‹Ä`u{>ñÌŸF¡©£SHZ=¦Q8ζb'‚–œ¶ÛÍäÉ¯ÔøŒa´² sD/‹þÈvJZâ±7ù1Ú5µ´ý’ÜŒJbF¤'F3Ú÷-®Ÿèr3¢­Ï%õ”è°(–®èío¸éѪí‚ÁõÿjêóÉ“ÿ Û5É{ „œÛ#óÜfÊõkè¨3gý‰.. °$›}ǶaYÄ]·NÃ9h¾'qãõu”œ"¥ÃB«½ƒöµ—é7PÚ?DZ+ƒ+ÕŒ+^Ïu<àè©7Õ©Æa¥ÏAm~ÞÉá¡Æ.âz.µŽ°¬’‚ú×1uwŽþÇñÚáÛè<úÝ*Ö¨ã0ƒž!‡z¾ŒÈøIª‹8³ñ­£D}~áÚë­£%—»ªˆ¿îî~A-K[# õfÚ,N¬íX øD9ÇÖ8•óêyíé·ñX¶¸wú”뀖R¹˜ÕÕµÒ={ɳ_¥ ¶ŽZÜ ˜/ûýQ-3gbJ;șΞÃNÅᣴ͘ÇxÝÀ „ùèŸxòå³ø%ÎcõÝ_åû÷%QWRý#mw Á`i¾x?QsfÂñƒÚtètZ:Oþ…o?›BÇ€ñXfÏü`†Í|¾ü`0ïýù]*K‡SÖZÂ?jÞ.+ÖNЧÓB€ÖŸ…«Çsì™gi˜¿’¨aÖô뀖ÈYÉ49Bµ+Zá(çõG¿Ì?r¹\mÙG8Ñ>wÒxü(5ɳX4oÇD!>34xúù`knÆuI6‡»|ˆ»¦šhl³`±Ø0zûáåå¥~¼‰œ} £õج6 † d½A×ÓiSÔíi=½ûžMÖàŸˆæøk¼úöÛ¼¾§ ³âz‚Óo×pÙ`cLx eyEÔxŒ!LïOLT7%yÅÔ"à¶‘Þdì R»¢÷Nê`OºõwÌ$ÀRCΡMüãù½”[/ï ž§·+„œÛ×Ö¹­XÛi·y:~ ¯»¾rS:s¢Ì1h¾•ætÞØ°— ۨFû«ß šöá§uhepõ²ìß_ö 𣳩™ ·EÕþpa¥mÎa¦OX[íêò}TãAp¸?ÎAëHÿ:v­RËßß—Ž6ó…_OuªõÎ⃟kª‘)†¹‹{ƒ=Ã@õüq6Ò`xŒÛ^zM[òuý],Šèÿh”Ž ñ3™³`7ݶ¯Œýd¶|2íš~äA7¼í¬¸8Íß]жÜJºgLÀ¤´PQ¥!,Áë’±)ÔgecXô9ÖM0¢ssC×·@ð Û »¸Ñ$<*„m»Ó YüÚ&kIÓ–T|f|Óó×YšB–2™Y ☦æ-mã&JÕŽÞ˜@-Z§»ÒÛ~–'»Ô!çöµunwÓTY3 ’ ~Oç[Ëðê©0n½u®Q›FqÍ_Àè®4ßUÅ4FÍãŽÉQh•fRÍ8£K»†ÙÃLë eòᣦq“ˆ>”Æ©sqÌ Ñ«Õ&ƒûJˆ¿w aÃJŸZ.a4TÖ`OˆD×–Îæ] &¨eU|yY`\sá8^;¼Æ'â·)‹2K1êiÛu6›êðD–¸»Þû‡ÍE1ܼ"¶çøú>®Àª»Õj-úlV;®¨¢G ~C~ÓÊ`ëØiolÆê—á²7à::›i² ô3 aЭ`ko¤ÅbÄ?ÐëŠÑ¨ám÷ò¼\)Íý9»[hµyâç}ååþeýÑòv…¼T¿Æ#Ïxò··¬ùwæÅuÜš1ãC€×ÐbˆC+WíÍ]ü|ú~¾÷ßuL„âÓÇRu‚w·¥cö Àhµ`íG—]í ­ò'Û;¤˜½ñ׫$ïi\¿*_µ#ŸµõmRÚýðu¶bZÎÚ‘¸Uïå¹”p>¿Îõ®'…ö¬Í¼t O/N‡ÅɼW’àÓJÎ@۽䪴¦òÊÿf1îK2×5w×VÀ;ÏîÄýÖ¯r]”º‡–6lײöîxVìâ¹ÌX>Ó8ußV²Þ|…ƲÈó,{¶¤Æ-oµµ0“¹ñÆÉhÌdm~…J4g,eΘ®óT>ðv’×  9·Gä¹TÎög7aYýëâuF*½ÇŽÓ-¸û˜p´waš°‚5 £ñPZÎwg;6¦5(O»oC=µ·sç¸êÓNó°Ò:hô»< ¥,/½žu–dË®\¬^^8:`ÌÒ›Y>Îsxé[Ø@ÚÛ[Éqz£ï´¶ä–FY,+ïšþuŒž€ÝEÇ1Úxœµ ­y»x÷x>`¶„°`Í2Æö¼l¦…Ü÷ßãH­'íV_’W®bJˆAÄ•ž¯·7*[øÃæRì´¶Z´,ÝjºÆžw~”ôÙºÕúçf¢ò†TG.;Ž×Òik£Ë¢þM†ËnJ+}³6<>B¡(önº¬ZÜ=Üø¸ŠV âå ½® ³)œ0½‡B\3lT{“ZBFù¢·¶Ñh6‘|ýL à‚rn !F2 €!„âÚãº[ÚiE1ñp×ËãƒBȹ-„¸ %"·Ç…B1²hÝððr“rBÎm!„¸ø2"E „B!„Bˆ‘N B!„B!„ñ$"„B!„BˆO B!„B!„ñ$"„B!„BˆO B!„B!„ñ$"„B!„BˆO B!„B!„ñ$"„B!„BˆO B!„B!„ñôCZH¯—’B!„B!Äg–ÌB!„B!Ĉ'!„B!„BŒxB!„B!Ĉ'!„B!„BŒxB!„B!Ĉ'!„B!„BŒxB!„B!Ĉ'!„B!„BŒxB!„B!Ĉ'!„B!„BŒxB!„B!Ĉ7² ݵäçTÑ¡|ôM9ÚJ9¹o»gS×}Éí dïßÎŽƒù´\º/¥…’ÌbšR¹„Bˆ«Q6ìN׿œØm)!„Øéì´«MPœÒˆˆ«QGÅÛ<ù}¤àƒBkêŸxðŽGù¿C™¤ïx†‡n„7ÏÚúþnãôÿgï>Àã¸ÎCïÿ·bÑ{ï ÑX@°÷^D‰”HQ’%Ëvl'ñõý|}mÇqâ«ÄÎg;ql'Nâ’Ĺ.2)ªQb§Ø{I@t¢÷¾¶ïÜY"A”([²bèý=Ï>wwÎÌ™zÞwΜý·?ãÿ¨§»«ËøƒÌQÀÏþü‡œ£O!„xwnZϼÈJ§ÚÖ-gï¯OÓêžà[¥T›Ç4„]´\ØÇùfçmæ&n\ªs3ÄIã™79Yk‘äŠB|”J¦ÔüpgWGÓ^=XöP7«•Á2ýv/Å}{ævÓuá7ìºe÷v;·.UÒ×WÌ¡Õ8îÎÀÁ@G¥WOrðbݽ÷Ť§ŸÜÕs1ÐZMMó^±é¤Eú uYéÒà¯ï¡¢ÆA|V<¾š1“X.ó¯/!ë;;ùÆl?4jÏîúÏýífýú9Âûʹx }i3ë³C Ö¾¿åéo¸MU—ñSS 79è¶  À4ZŽs¨«>?ãÛß575“FöV!„“ŽNg@«õ\ã´hõº ï̸:*¨±$2K¢¥¢š›‚Ë:DÕÕ+ø%«×jÑéS÷Ò ˜(nð%s®Æë¨ìWËPéÇâJ E¯(ø§Î'/Þ„\Y…ø€Ù¹v¦”®1‰LmxËfÆ|ÀA‡‚ÓîDc4 óü¯·‚KAÌ͉¸ï¢ Ôp¥TKîì$|~ŸÞÑÌ+f’dô^å(}Tœ¿BíÐØÀ]KDî2¦{×L¸œ‘ àÎÕbÈžC²'pQú©º\ƒÏ¬ÄŽmâ×y~£•Ž˜GžfÁO~ʱÚeÄìúõß6”ßü® _ä«$ {¨½ª‹3ßÿÿR“Êœøn®|Kdz?þ ßýEÏîå»Ë|Ôï´óæ_|Ë_~䗾̿Ög³8ÝÂïõ°æ{ÿÌ3©¹° !„ø£çî.âÈ©j¬j;ÕÚ¦6dk÷²»¸Ÿú.+Ö==˜7¾™«X•饫‰Æ¦´Ý´´Q|µŽàñf¬à‘á–»‹úÓǨŒMÁo Y-«›1…Îæüs–]qŽâÉNõÌÙ‹¸¼y¤JêCˆ%ˆr´SVÒGê#³C5>|—sg{ÙȜϯ&Nmˆ»ÍµÜ¬LdöøÄ‚΄Ÿ¿æáç¯ ÒX\=~)c2ŠS­×6Bçeôž /Bâ“ÑÚ­Tž)³²JNW¶d&zõ<J­¿«±—v¯3œêTKÕE³0‹0Or]«Å“.Ñh4à ·;’YÖ’5.ÖùÐr°€óû8”éjåü+‡èËßÀâ\•'vñ¦õi¶Í„¡r켌ÿòu,› -j¬üÒ~7ŸÛ<ï±»ˆÒ9ܹ iñTüFß7ûŒ|d­áðޏç®a~¦›–ÇØ¾o!ŸÞœ‰ïGp9ž´ e¨wþWùéÖ¹„ª;°k½?Ï}ç$­ùà(,Äû?vð›>ã›dtÕÕãL\EìØ£ÑGRd+õ-±|î«_¥¥è›¸¿ú=>Ÿ¢{èå±]ùw¾ws)?Ûþ§¤è:wÿOžùñ ~¾.ÿzëƒËVàÝqŠSÎe|­ñç|¡x%?ÿÍŸ¬ÎÂ2çÛ<ýoo±öÇ"m6!„ì,´ùÌä¹u tŸÝÁåèÇØ˜TÅží­ÌÛ´”0µÑûR‹Mm¦úã² ÐÜ®þå{#WbÈMð¡ár š­YDô•Sßë¤ÛíG¤ÚØv ÑÕ܃O“ëNÿì“øT·ã¿ä²¼Üt^~‹êAE B|˜ AÄ&§ '&Få}”Ÿ½ˆ1ÉžˆÉÙÌv¦æ'àn(àìµ:Ì걞œ¿„YñjÛ¼·Œ+M&‚Ú¯Qæ?“4KóFjE ¾¯Õ» æ }ƒXö{1gåbR†ç3@í…}\¯w:m˲BЪÁ²¹äxww—r¹Ù›î" ›ÝDÌ\Æ’Œ`tîꮞ¥ ¶_ Þ¸Ãæ°,õÁÕ{`9w“&ÂS S—§ï²mÜRãG>uõN¼œ:5¬纸w¦Ò›Á[u͸²“q5Ôa 󥡺WJŽæfu>ÙÕrê®röj }šÒç-af¬÷ýë4` SîË&ÑSvŽÓE袳 ›h({5W›"Y°P‡ÒÞH=‰'V'¡]º|4©p/T¸ë(Î'OêiÎÚ™”ï¸BSîj⌱ÌÛº…ðPßáýÑV&^k¡O™Š·ÒÉ­8sÖ03ÄŠÝ;šÔ”$ôVZ“úÑMéîëÆ=mëfÄ oÿÈ•ó¨øI9MîLÒuøúNÚ-«ñÏdIÚüæ…—¨èr QO¶M½«0+¾h£²"×gÂé´:-Šâ÷œ°›Ãˆ—×ïÚ`rÑt³Íô¿$ax#kž9‹ˆŸÞ ó¯×3õ?ÞâÂÀ2¦:²ü¯±^îŽj~üÕ¢‘Ÿ¥Ž®j=Õ®G ÑËuU!ÄÇ…ÿ¨p¼üH `À˜EnÈY®×Ø}œß¼ò³é³‡1ÓW‹Ÿ’Ú +$}Z ­ qÄykÑf&ÒS^D‘§8ŸTRü%ù!ćMuqçv)ýž;èú`ÓÂ1 r±|I3|qÖÞà¶u¹Ù~t€¥Ïl!‘:޾ºŸ›O<É´ÁFnl"zÁJ–f…Ósâ(Wªsx|ª‘Þ’ë´…nbí*;µMÌZ;ŸOû¼G ãëËh›µ‰'f´pè7Ç(Iz’\[å•:²æ$a0×sýX7ÓžxŒÇóZ9úÒQJž$¥ò‡Z§óÜ“©Øoìâ.!Þ>O(('×ûáÎ--gÎÀE^›`]̸û<‹SB"þ—êèt'¨¡ÁÉK§Óx¶†.w4ƒ¢Õ^iWË9ÒÏâg¶‘h/fïkûÑb+9÷­Ó´–ê{QJËYv]„õê¼ÃÍ×x㪋Ðñ‘Lc]aÓî=ú¯3b2™ÞÙ ^qbÐjîÆ?Ýe'9xªŽÀ©SêºÁ±ghnpž‚^‰aúô(,×¹í»‚¼Ýð#.¼QÕ3üh¤2ØLWg{w—÷˜yfk¦…ŒéA£ÁèJ˜'QbÒcò!$X7œP¹¦2Í"‡ éçjq$©q`M\ËÒýR¼F“MZ‚âƒé(kÁ•îcqÀºénnÃ/zÉÝÞ@ÿ¢¹MÓ€B\ ¡nÌ-Õ´ööÓTZMÐÜ DxÖ¥º=œ6·§cŽ k%G^)îqÒ×g kýfÄ›ÐFæóHä˜c ­…î B?¢Ëñä §=#ÿêtè4ž.S¿áK߸ƺþ_Ì Eßü[>û¥Þ‘êíÃÒ„¥¥áûê-ª\+ÉÝ땾RŠÛÓX7åw? ´êr¹œc†×Qÿvè ƒ—±!ç§>[M×iXö·‘h_Ó±êËüãW¦Ù@µ ¹¦ !„˜ ¬5çÔF­/¶¶v:îìe÷­~ê;­Xöôàenž4wä›6µlŒaJ×-c­ž*F›²œÐ7A®>t!˜µ£?׿j¦ÞÍ G; E/½Œ-6f̳ÿVjN¼Èå¸Í<9+PÆâÃ8ºÝv,ƒ x0£ë‰ËI¥÷LƒÓsh-ï'qn0·naÈ¥¿ª˜b5ó26s»ÆJn¸‚= “E3ãðtÖòËNâHA–ôJjýɜ平¬G«Ña0FÚýê9E™M^‚ŸúY< !§èö Ìi·lÑ9ÌV¿c$žø Óô˜Ý؆ðŽŒÄW«Ç;*Wußð€˜ïÖì~g9ê¼*2Ñrºh/x]LŸqoœ M@"ñÊqÌ v…¼"ý¹ÔôNÅÙL\t^,EÉz‚?ÏxJ9ä'œåBµ…ìqëT±Ü ~;Ê*ñÊyš“i9ñWi·ÌC]Ý‚FÆrðÜ$¶7ròDíñØiQÏÍÙ£q•oP ‹?±œÄ€Ñµé¼Í›¯ô³lý\îvÄK˼»,v‡‚wê"6eè‡ç4x}¥'ÈÝðiÆ­S–ÞA´¾˜Õíà— ™ iUɹÃ51Ì[2¼l¡Ú:hé¶:ãÞó:ÚõÚÐÝ¥Ö$ïÉõØép¢;&„ºg Ne8õlk'fú¬nƒØ”P¼µÌ|dÓH)Cê>™šMÆâi„é=ã©\`û®s$}îþ'+\½¥|«‘©ëŸ~JC ¿çÆë«¬ ;f1žG^ê*¨M\ÆúœPu:¨9zœÛÎYï9¼!ïI¶z‘Ÿ¾¾™?•„Qé§à¿¶Ó°æk¬ >ÃþtÄ̓÷7OS44—< gÎÓ?ûódHÛ0ÿê»´…<Ê?‡ë ˜?¾{š ÇLrM æËÿÊ çð/ÏÇO®«B!þèi0¥,â±w}f´±ÔXK‡#žŠþº“T¨×ù¸²ãÔ¦?KBOí õt»}†ƒ wk5õV å­x§,'Yñ£gÀ¢6Ô<-~e¸ àÆ‰Ý)¿#ćvt›¢ÉÊŸsï˜lÒNQÞãK‹9‘ùj›zÀfÇŒŸßÈ€Ä~ó6‘®¥š Z_ÿ»cèã²H9|‘òÚB²˜ç‰Uï<§èLÞŒt”˜¸iÌÍ%”¤•ºwÔ‘€4¯N¥xgƒJN­‘ „ŒûŽpÑÁÒ±‘¸g¼OO”·cÿIOK`H ƒ=ž_Z½1  ¨Çg‰þÚ»)ƒðŒ¹êKýÓq‡ƒÿ~‚›9Ÿb^ÐØÇ•RX¸|Lô’HŒû,F nîœaÏÉNÒy†Ù1ƬÆü w3o|ã˼\ÕO»9Žç~´vdœŒ¹Ïðüo¿Éçÿì2©>¼¦Ï`¦s‹ò)}ŸýÁ×ùþ_}Í»"±·cIÿ4?úöûH>Ø/ò½u ùÁè>¡–ÿØñYþvý—ù›g?Cbø­,áÛß_„¯ç 6ÿw_§gë? wÒÌü·öküŸ§Ÿ'&JK×PÏ}{–$?„B|ìèS×ò˜å;NjX³|#[œTôUáïDð¬ÅÌìÕ™Ãw51Kxzù%Þ|¹ßG¼IΚA‚Ý…2xƒ×OûñøÆtµá3—Z½ôþâcE‘>ÄÁÃ×ðNRÛêj郣JKLr Þ;W.ДHãO],ÙSzxýÀY/ ^´hÝœ¿÷‚)´cXö,[²Lh½î[ð‡ @ð.bÆ…mžq@ö½NÔ²ÏbT§‹L‰§ûÍËÌ~NN«®ª(úK°ägã£ôRߨ!fõè;h&žwhL=uMاOÁho¦¡Õ5.±¡Á7Ð[× º¶FúDhŒ>LÑbÒÝ?#mp2Žtç=ŲÈêá Ë×çÒ²ïuó>1šü`x Ô¶.o‚G¦w¶\¡ÀžÅãËã¹õê1n¦=ÁŒ@ÏwÜ9ò"§,éÌÙò)¦FûªËá¢óÒNš§¬b¥q8Ö+:ph¼îuruÓ¥“æ“L²vbFy» f~qx}l.üÒ³ ~¥ˆZk,)&°TÓ“Ír£Â`én^­›ÆÓë¦ wrRìC ¹DwÒ±ÒÕØŽ;4žÀ¶cìªLaóê‘ï9;jhÔG‘ëYñŠ…†‹{9ÚÇê§·ïóÑ®Ü?þˆ6†'þþ×,ë¶áÌÝä¤Ïtþô—»y¶»‡OAž>3òÑow¾ÇJ‰_Ã7·¯ÄÚ×Ã.ˆ¿1«I—Äg·ïxðÄÆUü  pâÏþüÿ²çùnºmÞ„{ß;iø,ã»g®ŒÙýÉûÓÿàç{ésøìo†šBˆÉCQpõÐÑn¢wÀŽ¥·öŽ>,öAºÛÕÆT¯å^MµQoï"&3€ËÇ ±TQ¾’§Â´Tyž×ž2ƒ ÇUÞ<Á¦µ‰0Љ3-Ó¥7¹þóà (6ípwy½^ ¥%ć|x÷òæ/ªyû¡mèl¶n™ExvŽ •L]<ÜoÂ'kKî¼ÉK/•¬ÂÏÆ|5µ¼3HÊNÇX¡3ÚzÖÅv”#»ö“3{%sÛ'ØŽS¯°½P‡ÛåB1%°ðÑ5dýáúç?p]Œã•HµŸøÄ‘Rõ±Sˆu•ã?2&†)c9KÊw±cÇmÝ}¸R6ð¸§k|óƒƒ_Ÿ¬e̾½›í/â¯n5cˆÏÈ Ú±±Ql<Æ’f¬J&õìüpÀ¼= _²&³ãÀZžÂZsŠó¶él»·á<•ÖÀ“·¹œ·öß!eã' 6X°:ž×w¸iº] $¯ý,Éw§tÒ]|€Ý•Él|:j4¾éÁ1üðFw;Aqø.¬µº”žèiØ öpÑ•MxÍ1.¤naa¬§÷ð7·ã?‡ÓÈš€é¬_ÔÂî;¸f[$+6gâã6c)³k÷³ý×— TwŒÁ>'‘+!×óS/®.½ö Ö _cKZ>ÓËöòâ¯.ìëbÀÈŒÇÖ¥®w{鶯Ã/ÊÌá—nÃɬ|~åð~üÁ뫺×óÒyF_ž`^n·»JNçB!„ø ¸êð‹c6r¦†NøSîÎÛT?ƧÑSt€=e ¬šÖÊÁƒõD.~”õù±˜4nZÎìääP:›Oyý×yå—瘲’'7¦Ñ{d'·¦<ÃÆ”NŽÿb·íNôj= QóylýtBK9ôÆe Ëžfu²‚7ΰá2¼?†·Ÿ=ã÷ ïÆw\›§•!»“·ïv¸¹¬.Þ¦¦§¥V«õü†“môå}¹Æ¼I€!„âË1H¯ÍH ßz8ªŸ›&ü½]´Ü®B›’I¤Ö†UkÂ4¶Åí €úÌXÝZ¼ü}¬,e(!—$¿{M7ÅÒJe­ð) ¥?¥\Y77äzoKžXÉ”¼ë¼Æó¯s°\KDd‡™Î~ofnÜÈ´­¬ÿû6Å NÕı4/‡S‹É¨›8‰ãsdtpÚ÷›¸ñŒ‡âèi¡×E„Ïëßó…û~v×BW§“Àpÿ÷îs9qéôè]-½hƒ¼ÑØôûÜ òvìZ5èo»Ì™Ž –O ’Þ÷¤$"„B!„ïz»ìX,6½7>&#Hˆ?V“‘Ga…B!„[?£¬!>¤o—B!„B!&=I€!„B!„bÒ“ˆB!„B!&=I€!„B!„bÒ“ˆB!„B!&=I€!„B!„bÒ“ˆB!„B!&=I€!„B!„bÒ“ˆB!„B!&=I€!„B!„bÒÓ?Ì—œN§¬)!„B!„BüÑ’ B!„B!„˜ô$"„B!„BˆIO B!„B!„˜ô$"„B!„BˆIO B!„B!„˜ô$"„B!„BˆIO B!„B!„˜ô$"„B!„BˆIO B!„B!„˜ô$"„B!„BˆIO B!„B!„˜ôô“¢J/µEwèq}Ó‹ˆôLb}5W„¹Ò.²’‚Ðü.ËàlˆÌ8ü”1kd'B!>øk¿7Z´rB!ÄCš=@×øù¾Æ_ÜÉΣ¯—÷q£Syè"œÅ¿â«?½Œýw]†¡óüë×·Sæ÷·B!îçî¢ðÄešlcÞsY誽ÅùC/óËçisSCé«àbQ÷ÞRè/x…=¥Žw™‰¾Î^¬nYÝB!„¡Ÿ<5ÉdÛ·¾Ï¦Àq·‚\Cô éð7 QWÖ€;z*SÂŒ£í'+íe´I}`#ÍJß }wœÄgÆá«qÑßPFu·qS§î%·Ÿ„Bˆ‡¦ &)²•7öÞdËÖ\l—_aO™Žè„$’³ÖðlB÷]ZmmÔ6ë™3-w[§K»p´öÐa8Ë©-Š¢%"w1Ùac&rÞáÄÎR2>ûY>-„î63Þá¡x¿};ÈQɽíd?>ÈwÜ"rcíë¢×<@_W-­ýøç,dV¬·lO!î£Ð_}‰k} ,Ì‹ÅøaÏmð·µdç'âó~&t´p³ÀLâ¼t‚œcþÖü÷©›g~.»Ñ0|×ú}×ÕÕGík”¶ ¡ Nbú¬¢ò”¥ôUr¥1ˆÙÙá¿çóûë þ›µ–n])¤n@OXZù顯2­Eœ/Õµ,—ˆ 6¦{ ¢k%4ô¹ñ‹É"ofºÑÏÌõܼq›¦^'¦ÈtòòÒ1|DMɾ1]U¿æÏþç·ùû¯›_íy…ï|öOøéM‹ºšØÿçùòÿ=Æ©×þ‘oý¦ëFÜ/ó¿ÿòŸùÑÿ'ÿøú ºÜ]œýÇÏð¹ï¾Î±ý?ዟøoÖ;å¨B!’½·}æFž~d*žûn$.ßÊÆsÈN›üpÒr³€Z‹F¡·òÕ^¹,_>D?üÕ†|HöõÿKî%?†:¨­®¦º¬Ž“sÉ9Žî{“ãefî»Ì;ë¹°ï -c.á.›…þÎîÔ6Ók{g£ ¯ú×Êšè×hè¯oÁª×ËÆâ‘3e—¯Rxþ Õ¶v­ ??¯÷Ô8Û)+¬Ã¬Œûû¿QÝpU°ÿ7gîöˆ{_uUÌ”ì}™Ó½QLŸ7—©ÞÕì{ù$ÙÝ]1×QT݃ò×Aüw ˜Û¸øúašÂg²h^:ú¢7Ù}³ïþmïhäü™ëTWÒ5ÑNa»ÃÑ—ÑœÍܹلvdçr††¯Ë•|å,ý1y,Y6‡„ó¼|¨ëGTÝÉsåvÞâů~CÃ520íÓßçÌÉ:«ºH{ýçl‹Öb>ð>q°˜çû÷ó³¾­üògÛˆÒºixñ3†l±Ñtã$'ªÝXú‡ÐùûaðŠcÖºk*œ7<¥¹®œ:wݧÏq'd3º8và º­›Éöm´»,ô÷ö`ëîÄšNxL2™¹óð7éïãK1w1•J‚箥™kg.Q¯øªK7Hwk'ÏEŸ÷äZ"óÖñˆ§­Ø|’W±>Ò ÔÃ’~B² ”Û›B ôWrÇ{!Ëâ.S~ÇFf†•ò ÕøÏÍ#Fm§+Õ\o ff„t5…1?×ÓÃÀAãµkØ2æ2eÌzJW)WÛ¼ñï¸EI—‰ôÅ‹‰ëºÂ¹â.L© X:# /õüa6ï¶¡Ð[~Ž2CóR|0W]¥Æ/éQú¶nS½<‘Ýeç9WÔŠ# …9Kò‰WCúÎ_»CŸ&˜´9‹™cBé¾Í… ël£¥ð‚ëæä¹Të2xâ›ÿ?ßùÎwÔ×·øäÌ{‡.usGû²šýqôõRWt›€é3F»ïh‰JMÁÿ]Þ´Q Xžã3ÜHk*ºÓf‘0ÜGCÈŒ<"J®S!@„Bˆ‡` fÑV'ºh,*¡mø® ‰¸¼å¬X>‡‡Ôe+Y¹(ƒ §ç‡ç52¥†>ªo–ª ªP"\Õ\+í%0ÌNѱ#œ¹Ý5|·J㟠^¦ó™™@pÒTâ‚*÷ý’}¥}8ÆÜµR†Ñ¢é/ãðþ›g=Êãë‘DÒœ<þÔbô—NSñŽ»¼6ªo´©þ¤‘îÁîvŠ®Õc—§a…N<˜+ï`HË$3#ЦòZõØðÅkà:Ã]&zK é0øÃ@¥uoßevÐY]NÛ¸ãÍmnàú¹œ¹ëyt®‚×_ãª%‹uÍÇëÆa®w+(¶v*ª:î;¾=g‹ÀèNœ¢²£„“×D‡ë?øºyÒ §Ù] cÖÆÇYÚÅÉ#·è¸ÄǺI]½…'–FQwðÅê²> Îîú3ì«aÙãOòèü@ê®–Ñ«‰`Úò™Äø'3oõ<’}¹¯®Íwh̲ö56CB!wÏMFâÃhmlÅ5ÔHñé³TÌfqv®”ål¨ =f)›7æ`9{’ÛžNôžºï!}õã<¾:eV¾ãæ¹”37ÜL[³™-›—V}Œ+­Ò]äÇMws~ÑQwéÒøEE Í£]¢ì ç874“Å)^ã 7› ‡º¹´³X7w$ù1œžkk¡;(œO¬­÷#<ě֪Êoröt Asr ÿˆ2“'¢1âFX˜çŠÿ˜‡‡5ã½gôÔ·EA£Õàt8ïuíq9yPCãíƒ÷hq:Nýê˜Aלziø!„É›¸¬pÌýš÷×kBLúÂ̈Éä…WP ³³ƒÐ†ç±83ônÅÚFIY¹TpN ’ î¹ÄžWs»w¤a­¨m­¾—K‡Ë‰Y³ŽÜ0Ãp³H«uãö|Å+–ø nÚûF⊅¶²+œzëMNÔØé¯¼AIM;æA\aQK;@ˆá•wô¤¦ø`JÎ ²±œZ»žøÌDÚK«±º»¸]çGFâƒþ·ÑßÙAGG'ý¶‘@žÈt2C xE%¥’”ŽÑA|¤ƒ¾>÷§ÕLcÕŒ~Þz©à%s‰Ð½ßÊŒ[– ëæ¦µ¼ ÿéùÄú ˜²„õs¢è/¿’9›?úàlòâÛ)©¶¸n³“ŽÒbÌ~ôWS\Ý—¡•²;Ö÷Q‡±óÖ¢ñÏå‘õ) T\çÊÕRºœƒt÷ZÆíâÃ䉉=1îØ¸Úhpâpg?8{ÆÌô¥éøŒ¿ÎiÙ±þQfGß¿wºzosøH«òÆ$àlý]tvt©ÛÔ}`ðwÿñI€ünÕNœ“‡ýÊyîxrŠ™«§¯3¨¼÷t±³gã]p†[Ã)V ç.П¿€ty X!„xø8©«Š~ƒõEET´õÓY]ÄÍ¢Û4« ¤;E7¹y³ˆÒÆ ƒ’–ŠÂó⪬g`ܵÛÙy“}o^¢WïMXæ"r}¢¯eñµ<±:ˆÂ#7èSFc]ǨOZBÎÛ¨+6ìŠ “n$ØéòÆ×3Bª£…K¯ï¦ÀD°ËFìŠ ÌJ FÛUÄá]ghèn ªÃúû?+/Ä»*õXè¡xï˼¼ç&}®ZÊëèâ2Iî.Uÿ.¥18“„w´›Gî~JK())HÑsçRgÐñZ´†{7=ã)cº ¦5 w 2dùºj/oºٱÛ £Òø¤õ½{I½Z‡ûn¼Ž­³§fQ‹yöÉÙ„ØZ(=û¿øå êß5:T&˜oð˜AY5øù3ØÓ;æ¯Bow?¡žÇú4h}ýñÕ¼[Yêº7™FËT§Ð2¼¾m6&ÿ üüüÔ—?ñs7²8Éð>ê0vÞž§oðúŽ4(AD'&l@qß–âÃŒ‹‚ì3N–{€[A~ m—Þ¢Äm¤«ðçÎߢÙÚIÙ…«Ôô)î—µgxmO‘ëŸbIìØa‚u„¥ÏfÞ¢lܲ¿ÂSõ~4WÍɶ;.óÃ'Vóocºy-ü«×ù›¸‰¿nÌû<_Ÿþ%¾òÉë$)¥æŽ>Öò+,û3¼°î«|ûùÏ6D‹ù›Xˆ/äøB!.ýAgy'>Sr×ì7H×m7aY¾ÔkŒjÃ=†8Ïs©^FZÝNû±ôÔS«±âJ LÊëèÿ+¸ŽzN½UCòÆMLmÙËöʳœt%²lÓȘ`Úàâ-Ô2g‘¦–í mjÐð³ë•GÑš’L¯&œt­‹ÞÒ³”zg³Mmšoœ£1íQ¶d¶rèdæd†®U_1‘(-ÝÇ(Úµ†õŸbu¢A6¯øøæ?ªk0.~†ÇsG޹¡¢Wù•z¬:ÒRÈJéåC27-î&¯˜¼Ñ ôãéá7¨ßmn¢´ád/Yv·Ž`“gG³ÒÝØ;$ž0 —p¼1–•Û6ç}¯»ÈÐí½¼^ŸÃ¶µ)ê>ãÙè,n#^Ñ#“#b\É÷/^}À‡ÿƒ—ÿëÞÿ ¿Íá…#/ú‹ß2§¿›!C0AÞw†Ñ&|š_oó†ÆŸ™úŸìz®‡n»‰Ð ïÑn4ùñþ£{ј¿…Bq?g#7ë¼™:ß`['ÇVâ·ø)b#½ ^ÑÅ®ñb#Ùþn†âÂhŠ`îœ(ü¡8¼Ð$§IГæÎ½bïܤ%q!+ƒ´¸-Ø«ÚHùÜš‘g=ÔyuºýHVÛ\Ú PBLf‡ûôšH]˜Oë¯QÖŒù¥ ô!SÙðè44 ]6¦P mW/38õÑ»?ÿ7T}šë†Yl9Sî¼áGb…øø¤ºZ!ií½hõIÍ$â\9õŽT’³Ò0V*dv—ׄg3Có/ï¬Æß¢ÓäÊÚ¸sæ Ì}‚”8¦ÔßrøB Ÿ\ý;?®[÷ÊÌ8p€—^õG¯ž“¢—=NxB2‹ªv³sgî>œÉëØ£“ÊÄuö ¥ÏN~[‚?fÌþù<â¹TErØ1޽yˆìüåÌ º·Dþ¹ê|wß?ßÀ±ñ¤O&kÖw²÷_Sà‹³ßAä¢Ç˜£žËh¾¿v—u~Â5ṂÅwöòòË%ëÕ@Ö?õ³4x®sÆmfcò4R ŽóÚþ(|üƒÃpÙ=Ùm9Ÿþ¡hü§±vA+ûvîäF˜m,{4cd ÚXâCF¿èvSªo 4>š`OÓÕÊå]¯a[÷Q±óD=¾Qf޾\6š[Kbù³ËIJ_D~ý!^zñ*¾ ƒ}."–¯'Ç÷#ª¯Ã#c 'cß~F_ž‘N¼ìv{•ìB!„ø XJßä×ÕÙ<7{SGÊð_üK“}ï>«nm<ËëG™ÿÌ:¦¼ËO8;ʸrù2õQ›y*?WÍ!^¼êôDµõ6´v)›¶0ÃÓ›ÄÑIáþ½T&?ÎÖÁê¼,´Õ÷9ÜÈs´ðæþVf>³‘´qóTÌÛžVßé¬ÝG„^Á\u”7ÎkX²m5ÉòsB¼'{Íaö´ä±uaø˜q)ÜØ-NôÞÆ?òçòV+ŠÑ£öÞ{.«»Îïûît?¨Î Nëv­7>Æ1Ÿ(†íè¼}ñÒ=Ì|ÇÅ…ÍbGëíýc>DYcka·àPëvÿ2ý.u>›cr¨Ÿ{˸Š%·‹M þ½ Êñ¨8­XìZ¼|Œè>¤*ÆT<Б—côåóR$"„Bˆ?p#ËÆ ÚÊj¿]†’6‹”Àw6…lf3Þíž°bn¤¼MO|J¾Ú‘Ft_CÍö`’"ñÑŒ z>TsšÛ ž±‚¥Ù¡ÞW´uTPïJ"-êáîB+–nzÜÁ„øJk]ˆw?Xº)zë0…½‘,Ú´‚Y%Bˆ‡$@„B!„B1é=LD+«I!„B!„“$@„B!„B1éID!„B!„“ž$@„B!„B1éID!„B!„“ž$@„B!„B1éID!„B!„“ž$@„B!„B1éID!„B!„“ž$@„B!„B1éID!„B!„“žþ¡¾¤×ËšB!„B!Ä-é"„B!„BˆIO B!„B!„˜ô$"„B!„BˆIO B!„B!„˜ô$"„B!„BˆIO B!„B!„˜ô$"„B!„BˆIO B!„B!„˜ô$"„B!„BˆIO B!„B!„˜ô$"„B!„BˆIO?™*ãì©æFa5}Æ8ró³ˆôº÷™2Ð@I•ƒØÜ‚u£oºº©)ª¥WñüGƒÞ'Œ„”x‚Œ÷¦sõ×Rx­‚C¬Zf6‘¦· ìåέ.³§¢¿$.Ìu7¹^Þ‰;8•™3SÒËÎ&„B<eøºü®Ü.\:¬-!„B<œIÒÄMûÉïðôÖ¯òëÓ…\ÙýmžÝúMŽ´ºï~ÞôÆ_óÉO~_ÜtÜ›lèb\}w¸q­”Æ~7¾‘äå§ji«;íN4FºzáÝT^¿FYËú)äÍñôüÖ Xê¸Vª%7/¯è`Wj¸â)sv>ï£ÌcY„Ù·š¹yéuf=a鳘=5Œá#ØÝCÙ¹êïÞ°Ðà“8›…A¼öÙ[ 9W¢!{Åt"Õk©b®æâ¥jÆöÐø¥0o~*þÁ~<)âñ ‡8ùÛfún#éϼÀ_¯‰îEën;ÅeŸ{z)ú3ǹí|PIŒ&/»Á+û8´‰§óÞ.SGÌ#O³ ñ-ŽÕ¿Ëí$ “«’‹—±Ž.KÚ§Ì$ù!„B 0¶ž>ôÙñìÆ,Õ‹¬ÛI+ŸdÓªyä$M~8i¾q•Z‹F¡§¢€j¯\V®˜O¢¯?&ÉYÄÊ•Ëî&?”¡vîTUQYVG·É€ùÖYïÙÅÑÛýÜ×ÓUÇÙ=—hÓ&pY-ôwÔSs§‰«ûËÝW}•‚Û˜Õ–A]3V½A’BŒ=J¬ÍrþB–»œƒº«ç¹~³ˆúÁ‡èí¸Ã‘Ç鈘ÁâųHp^ãõ]7FYw–±÷—§hù {v¹»¹öêÎöE3cþRµE¼þò%:<ó±¶Pr»Û9?5^ðó÷zÿ±Á‡±,B¸Z9ÿÊ!šÂóX¼ }Ñ.Þ,ì¹f*TÔ8ˆš’Jjªç5…¤Ÿ—eoàÜ©kTUÒõöeÔHlr ))žW2áŽFõÚë‹é#º€N‚ .:šZ ñQbǤ‚5Ù¬X>|F£íÔ)œ‹_ >³‡EÊÿáxÙ—ÉÍý²«‘ó¯½B^ÁÑ[ʼnݬøú_¢­?ˆ3qÕ}ebˆ#)²•ú&ukÆ>`q¼—ðÅ.ñÍïmfÉ÷’˜ž?‡«6±eU’Bñ±ç¤óÖ>õÏã© h†l±ÑxýǪÜXú†ÐøaðŠ'Ѻ«Ë˜?œ€0×Þ¦ÖB×É3Ô„®àѩݷýS“ã7Ú’rZèïéÁÖÝ3,ƒˆØ²¦- À[_²B1w1F‚Ñs竉k§.RçöÅÎ Ý-·9qæ0úüÍ<š2¤èˆšõzšMÇ©H\†(Ãðݱšâ>Br’’ë¼èâs˜ÒUÄílò<·wíw(é'3¬Ñó<egkðŸ7‹Xƒç8¬âZCyY!w“îþfZ4SØK¨úfè¢MÞéE¯i×]¡¡oË~/æ¬\LšŸÂ@ÝUÎ^­¡OBú¼%ÌŒõ†Þ2®4™j¿F™ÿLÒ,=¾Ë<µ8;4ƒgWå0œKx”¡Ž}TvÎ%Ìxÿù«·ê*—Š›0Ûµø§Ìaé¬8¼±Ð\xŽË]8¼"È\°ˆœ#eâ÷==ÐÌýš»evÝ>ËÙ›-Øý§0oÙ|]ÎÇ$»—øØ«.qÃ>ŸÏ‰ÞÇæ¬IùŽ+4å®&ÎeÅîMjJz«­É ýÛ»®»“[' pæ¬aæp·I;õgÏa›µøÃÅ÷ârS‰©a#×ÞÞë¼~u*ÖEcøˆê; .Õ F#ŠÓÅ„9ew§Oö?Dõ)SÍœ<^ŽkLÅi·a³Y¨=û–­ÿ ËCÐé<]jÝãÊ´csñz×>gzâ×ü5/;ÇþŸ…ǦÚ8óŸä“ÿtM=5 !„wbocm’‹†¢bF†ë2?k«VÎ#Âi mÅjV/™J°ÚJÑh´h5o_ñû¨*,¦ÉF¤«Š‚’^Ãm><üXŒ§(M@"ÓgÏ&/!€äLâƒ*öþ‚=Å}ØÇ\Ô݃ƒèƒ‚ÐôÝæÐÞòcˆŤ‘±Ý…S”YÇ/¿•ªkm$å'vnåfAÚBBŒd@bÉÍ ¸ÔsYÁZUÊPJ!žãXã‹—¹€+Õž> ½%×i3øÝhƒÒ˜j¼Î+Û÷sº ”ºn á)1øé#˜¾*Ø€¬OНwûE^;ÒMÚºmlYÅýû¹eVç:ØÈ­“§© œËÒœX¼ßužnzšZÐÅ'òö›¦?þ DÞ*)ý%œ¼îfúº-<ùÄr«ŽpI=‰¹êO³§<”[ŸbóÂ@ê.—Ò§žoô>¶6Ê+;†ÏŽú“¼qEGþc[Y—ÖÅñ·J|À|„øà¹énnÃ/: ¯»» Ñ4Ó4 K6Öþ2޼ò »÷¾Ê¯~ñ2笣1²§ú¹ct״ןáÌPKSL÷ŽT,”Ÿ*$`ÁlÂu]'ADKdfþ•ÅTŒíÆÚ°‡¿ÿç“ttœáT{Ö3;Ù±ãŠÜôž:NåÛ]"KŸ}žçŸÿ _ûÿÖÑsà€ú™–°´4|ËoQuß l¥·§‘3åÁ[ÌÖts¥Ý(Z xôO^àßÿaÖcÇÞåÑ!„âcDãM|V8ý} ?óð—ü`2­f~Z &“^AS˜“Œ.bK²Ãî6jK+·n7Ñ^v WÏr­+œàž ì~ù%½£-5‡­¾‡‹o•»vÓÃ=é :­‚Ûó¯8‚»hïý¾ÛBké%N|ƒcj Õ_qâê6ÌC¸Â£†“5BˆÑ¶yN&ŽâbºÜC”ß¶“šùöxzⳓh/©Ââ֟Ì$ã¸J žÿ3¶ÍFý"Ç·ÿ„Ÿ¼|•v§½AV£Ã`0 Ó¸é,+EÉšCŠŸú^Hù m”T[†/ö€LÍŒ#H=W¼×<]Nã{?Ò¦ ˜Îc¦0PqKWJèt ÐÝãFc4¡m+árA1uÖ$Vl˜AZ؃Þ3gZË* ˜9‡8#iKyd^4zÿ‰ç#ÄOÁ©^uú±ñ­£Á‰Ã¡¨ÇcÉ©Ù,Úú Ûžú$òDUG*×F0ó‘M̉Ñz²œ>efæòôŽk£ôÞärO:³â ñj0ÎÚÆ“¾øÙëwFîÀ¸Ú9ùï¿ Ð;÷¹SØÿ¾õ­o¼þák¬±œâxÕ;4åoã1Ý^^½bÅ÷$[½÷óÓ×kGÊTú)ø¯í4¬yŽ•!>=ê®ðo_ÿÔ¿}ËÈFsÅ,ÑqDJãH!„É'tUÒoð¢þf!åmýtTݤ°°„¦¾NjÔ÷ )i˜ w§z]-ï!B|+~éÙ×Q;üK/ –êbšb²I1z†ð9ÊÎ#Õw5vvÔШ"ÒÓ‰J½vv5ÔÓ1¤!0w#[Wä’œ”DRb_"â¹;pæ¦>"bB>ò„~²l:CÂþfçZ¬½= ‚ñ©ZÊO^ÿMf}ã ¯ ÿÆO/?zßI(rÛrbÛèã×ðÍí+±ö©eêÔ2ýƬ.ã*~PP8ñ¬ù+~³ú«˜»z±{©Óùe”x!„âmÎÆÿÇÞ}FqÞifw¥Uï½¢Ž$šÑ{3`À€m\píÄN»är—ärw¹”K.år—Üçǽ`ÀÆ0¦0Ý4¨’P/H¨÷íóÍŒ *»Ò D[ž_"#ÍμSvæ-ÿyçœ-rCò4øê«±w{.¡!ðmÕÃU(¼Þ8)<‹Š3°ÀG ±Í†Ü*Ä~c±2¢Ò¨Ñ× Æâ‰X¹kºo€T1k‚·Ü2\0#W7mDvƒ/šßÏÆ?ËVŒ…— ¢Fo‚K€ •'Ž£5y%‚Õ²¶+û‘¡™€ÇÆ'Àeì4ÕNün‰:Už#G#ôh>F%¸JzÕ·CRáœ+"5LÝo9—ø…Xzm6½–­—+Ì-ípMyEÈó†!6`¾ød;F¥ÏÇÔ¤¹˜•ó ֭ˆ·¥æØ¥X%wǯè»=­SZ«ÛH<°¬ Ÿn~90·ÑóW!EÎz¼rÅ9fbOîÁÆ­¡p7 ðò „Ù`€k´?š>]‡wOúà Mhòœ„*¸µZŸŽÆÇiÌ|¤mþ ¬÷‚¦M°y#0PʧNõ_ƒ tK®V¯±X2ã*¶¬[‡Ó^@³>óV&w.£&bìåmxïíðu7£Eïq+w¼*Þ|Ç?ÞÝÒÂÃ##åß™ Ù‚KšD†Á·«ù,¶¡©Åžîw¾U,ÈÐ#U÷øqêü‘ÇBÑZ,–+<5ˆˆˆèæ‰h»ô ÞÊ…g&·âË]Ùðš½sc»^;/BWzwµ`ÚÚ¥Hp³]Y2^ˉcÇQú0ž˜ä sþçxû„ƎУ¨D•Þ€ØUb¼—üK52·mANì#X3Þ*±•%ðŽ «üqÕI|²­žZŽD×Þëåà¶ÁU÷4,Y>ÁM¹»±éˆ€9/B¬os …>>­˜ˆ53ƒlß ¶ÐÖn‚ÆÕ Î=ghkÑCíæ­ZPò “® Fµ+\T7·NÑ]»jWØLJž§MšÇµï<ÛÛ•ípëµÁ¶¦÷]V‹³›´Oƒ­‡è‘®¹v½ÔøwuîwXŒíЙàꢹ«oì«Tªxt„-åcç¹ÇÈÝæJ–-í\ËÊ‚˜˜Ž8ou¿ ‰¾¹ððÄ@/^›Jq¹RƒÈ¸Px(IÑXre_Œˆ‘©2$ -ÿ¶­‚_ÚÌg+Aݵ\›G 1TkWåNl¯EÅþîl™Ùí×áÜŽ8Ó‚Y«ç#îvïÄ:‰èŽ`„ˆˆˆˆˆˆˆž=Þ¶ """""""‡Ç9<@ˆˆˆˆˆˆˆÈá1BDDDDDDD"""""""rx €‘Ãc„ˆˆˆˆˆˆˆ DDDDDDDäð!"""""""‡Ç9<@ˆˆˆˆˆˆˆÈáiì™Éd2ñHÑ=‹=@ˆˆˆˆˆˆˆÈá1BDDDDDDD"""""""rx €‘Ãc„ˆˆˆˆˆˆˆ DDDDDDDäð!"""""""‡Ç9<@ˆˆˆˆˆˆˆÈá1BDDDDDDD"""""""rxŽQ|1µ&kQwùu–!$¨GUŽ´LMï- …È*kÈ󆈈ˆˆˆˆèžâãYüýÛ¿ÇÁ&°áÓ_þ_µt~f©Á¿~<2”À…í'þ/þx#Jºâ&–*|öóÃöJ5ž7DDDDDDD÷Cí¨C]i2ŸALI ¢"èá ?_oøúh¯.,­¸š›‹J“b’¢áãÔ7!5F<öxhËðêž%øí¾h>òWlty¯NpíœÇŒ¦ÒËȯÓ"bdµRêæ64´ªàååÒY2´ Á …‡Ï4""¢.ú2dfê;9Þ}ï*˜Q”yYWÛ ö±F!ĵ ŧ.À4râ<»¦É‡ËH?TÏFmŽžª€TÌÚ]Ék.áÐÙ«0J¿ jx‡'atb ´òꚊpîÌe”7™áœ„´ññðs2 âìq\ žŠq¡e¸XÜŒJøOH†¿¥ù™gSÙ.mc,ÒÒS$'¦+ÁéóF$¦Ç¡c3-¨¾øjB§#Ù³™G¬lgŠ:§ jg¸ûGcdŠT7‘7ÞPn}™d3.X;~Æ«8—ÑŒè)‰ð‘§›ll§ÍãÌS“nRßspÀz{#®Ë@Q[Ï[”*Žš1®8YæƒôÔÀ^wkÅÖBdd«:1nöltMfÍEƒ² ·ÄŽ(¯á¼,Âl0ApvR¶µï6ê*ÎàPF)3 Gû÷¿‘*mãyþ´h»'¶¡èÔ% %#ÜåD›‘ªnic¡dIb-²O7 |B¼ûŽCÿutåQ§Ð5 ñ^¼Å{?Û¯âÂɳ(nÑ a<&&ú£«ki.Á¹Ìl”7˜àœˆñã¤r²oõÈ9z¥º®ëY€[ôDLMðVÎùÒ¿Ýk K)o؉¬Æ2]ÿ¾Èm“²$7Œ^ø4æ$wâ¶³øëK/à›âÀ§¿Å‹k†}ÕVÑŽÆ×þaÎÿùudÔ_À;¯Wbù7ÀOèÈtÿîy¼ø«MØ»ýU|ëɧ%&˜¯¼ƒ—ÿñTu&g8ô <öß§” u2T!û\1ZúvÍ”*ù—¶mÀÁ†Œ2#]óñÙ†ý(3¸À©ùŽf5\ïÍÙ’‹“¹z¸X®árv¼câ×ñêÙ«‚c©ÏGf¥± ˆ‹òAÛ™MØx¬¢±{7îGuÐLŸ1Q¦ÓØüéY©±ä ÏÛyUæŽNóÅý8Õî+5êêpfÓzi Á˜É¯º€Í@E¾S‰¬óe¸ÞžQ›—‰üéC£íT¦7Ã'.ñ1ap«;†ïïG‰¶—±uüLÒüg‹Ñ,Omo§íãÌS“nRÏsp0‚ |#F &&æâl4xÊ¿@°‡J:E‹q>¿¾_ïmAå­Ý ùšÌÎÕ!()É#ã¦ÉÇŽ QaÆ}6çbû»‡pÕbe¥ë0so<¦,œ‘¾V{‘+ùÆåJzí¬3Ì×NáL±¾³ý’“ûàl™¹³­™‹ÌR=´‚ýÇ¡ÿ::ó¨+çQÒÂüïkæ*Û´åi˜1%šóŸb˹Ǝë¯-;6FSØxÌš3 Q-G±agtýÚᵸRhDHlWy‹è׎s~ ôïÇê¢NÀC?x¹_½…Äú<Ôy[$bÉZDtåËÙ»ñ¹i þú“g©²`홽(6Z;ü¼f~/oz¿|é$¼æþoEvd·úSÇoÏÏÂÿ½û"bÕ"j¶ýžúÓÌz‰×ѲTœÀá†Qxde ä"

êKÃB¬ËÆÉ«®ð«¿€³›™‰>=‚ZøGÅÁ_ºO:A‹¸ˆŽO- r-(:¾Cjèà?jf%ûIׯÍÍ]g¨WÏÅÉ+µ0iƒ0rÊ4¤Z¹<Ž`9é0E§£Æ ýê"¢µô4Žž)A <=aÆG¸Iç¿ ù8™UfƒÏé˜9!.Òþ|U€©£å^)F”> }Â49…²¦V´®Eú¼ˆSun£Xìûp¡¦žÇà52­½—OšŒXM´ðè |Qræ”0—•ÀàŽÒ‚JXbÂa¨¸ !"ÎR²¥$GO¢QðE¤™H sØ‹Œ -¼«3‘ë9K{­ÄŒúÜ£8r¡êø›y®ÞïŒ'qÖc2^H QzM\4¹ë3P1z>ÂC1yõJø¹+eƒgÚHß\‰FK\„Z\ÚÆÔ竇Á5q±ÑÐèŒP¹h•òvÐôï@wŒûî-0êÄ9˜Ûþ&ž{üeüøW¯bwM$BÔ6ŽN0–½üÔÕ±xúédtd©”Ÿ¿Œ™€(uG ÄoÜx]:ƒdµÛ¿¼©4×Âfcå2yÙýÈ––õ×{¥ò½KKÉ!|–ë‡9«Åò©Þ(>u¹óQ—>Ûa®¡\)ï¸|_žD}âÄ»HËWÇæ}õH\¸ «&¢nÿ\.:±9 ‡2-³h%^9ù{q²Ò¢ìOVq×]k#jòsPe ˜¹ióŒÁ”…SãÞcḉcîŠÑÓ§ NUÖy½íý×Jׯgy j-f\-iÈYcàQRˆZÑŒÊòv„†{B”÷aoâ>ŒÕ³CP¼ãs\l‘ö¡­ F¾W:f¦úõ jZ*`Ëq–­Â¤6””›ù‚‡ûšuUð AWøPðE®¢B.„4ôsEKe®äœÃáƒð™4Êó^õzå‚C¯ƒ®é2ö|ô1¶nÿï¾ù1Ž•éOÿÐÜo_±à9?ذ O^>‹sç3±ÿoagÉkøàÅ«Ñ •|\›àëz=ëP«Õ0›z<Øb4¤q‚“J計uNÖ·ëX‘ ""²“Qo„³Ö¹We]£QÃb’*èª`$'°+§“G#OŒÇby 6¹~eD{k äñÏg7X{)œ©p?Þ÷„4¯ô©{X2.R¹=eí‹‘Ÿ‹¼ÂKØlšƒfá±Õ(ÕTþ1/1–§áÅ%JEÎ,m‹“óO. T‚Júé¨X Âõz=Û©$ᬅ“T·0ÊÕ4;—éh;<Î< i8ƒ Á£01ÒNˆ@„÷a4ÈZ¸ vÃBP ÆE¹KWA"}¡®ÙôìàáìUu6NqˆÐhÌ]ìg=i‹í--Ð,¢tIé ·XМuÍ^£Ð”¥õi*q¹P‡1cFãÁ%U(Ì=ƒ“­z4šZÑ"?ÆfuÐjgt½«¥ëMÓ1ÈõVœÝ] QiàâámãÛ,^Qˆ÷£´¹mµ~17š£;QØS"‚Ôφ˜¼±òKR1>òŽå·#%P„Á+ ÓÇ…+c„ˆí×»Õ9W MYƒP­ÔnÑŽBJx*yªÞ×LFÔnêž…œL0š®_ú¦ZÔT7£I/]G-­0ÀO*C1nÉòŽYÚ¥s4.‰3FÁ_JÊ\{ë?ý Ñ_›qÐô¹É‡³”µ¢YÎ`û¬&¢ù«Wñ»¼¹øÉ³Ó°8e*¦ºç`õñ ©B‘g»V Bxz:\zÚ&!ÍÍŒÒ#_¡iâ H ¾¿ª,”ÈÝꜫ°ÿEX¼xQÙQ€ÃÓÇ­Å R™Ø98šˆ†º&xûûJ¥¯ Aɉ0íÌF‰s9°]ã¡ Ú$OH°+­&f.ž^5=û|І´ZÜ’8^ù™9¿GÞ_‡ÅiX§VªIA!p3wV)TðòóA[^=ŒéLЂڼóh‹hy[\B‘<~BGw{˜q¹ä8®Àþí”é¯U¢Õ'UÚ¿v»—é[Wh;ƒ<ÎDÃØÐpuéllH`Ù"vünG~ vq鬛« H'¦Ø':§ ™‰µ^Avn²ÅŽÖ¬|f¢úTè{_“£àñÑ;8Yš„d½.ž>ððpQ¶Ècò2$ø;A¬ÏĦ/#hÊ$ÄG»Á³þ²-}CƒXnê.§ËK˨°œ½|&·(LÖøÂ)Z‡Ã—ó¡q Ç8tÝŒpòºèÔ8©•Ƭ(í‘ÊÝîVµQZFãëÔù-H9kç \º_Iå…¯7Zš¥óÆ«ã\°´ Eï…h®3C€ÄtéG>аëõ8Ÿò&õéØ5Sg_ÿSí…PËQÔTˆ4ý۽ǎF‡™3›ñÁ¾‡Ÿ¼q¼ÏaRåjì<$û9ž\û2¾÷Ý—ðõZ|ý™)v?:3—Ôçñï‹sñóg^Äw^~ÿ|l~ú½éðð‡'gœÇÏžzßxé—È1 ¬IÙÅ5~4"ËNál]ç3¥º"dd©1jTRaQŽD¢évžŸàqÓ•vCÉAlØ–‰º®»P‚(߆Ë# ÊÛ8¢ò4Î\ëXHl¾ŒCû ѦžŠœ¹ù ­AbZÜê&CÙÎÁŽ3ѽ ­è$.´F`üŒ…Xñø“˜æV„¢†Aú0›ÐÐ*@­V!0"Ævµ2ÆNLLœkKPoVÃXžÚèi˜=&‘!.h©mVzt .®P·4AéLÑZ‚¢®·ÈA‹ ¦AVm{y›„E¡âx&)å*ÇD¢îä)èB#à*ý팦ҲŽ)Å”–  (o”– DCy”1(­dϯûGb |Š/¢kÌÝö‚K¨KAŒVºÎ²·á½Ý×=5¶£Ý"w8Ï2êÊJQÓ&ÇEöaãÞtu62×¢\Œ`çÓ¿£ˆólüê@WÈÉiÿ°›žª‡AëÓ?ò鞊§þç#<ÖR‹½ |ý=<ªð§ðö®¾9˜'Ò¾þw|"­£Îà×Î ƒ¦ÿh¶44Âäá  /("""kÄÆ³ØüZng¬Fô¼g±4)‹–Ô`ÛæwëåS“Á3V`’ga® ÂÈD'œ(OD¢çõ^l:­ot¿ROå?«Vï1Æ…uÚøùX\½›ß8­—+Ì-ípM^‚å„\GbáÒkغåMäzxÀÜ*µMæ­@²Ü=~·¨XÝÎEB÷tÅ£èø™`^´“2@ªÕeØ8~Qvn'9ÎD÷×4m]÷3üà‰f4{NăýÏa±þ 6¿)]+òxF>É ±"\×ðy˜Y¸ 6\‚¯FjÔyŽÇ’ œÇ 6c>Þw“Oߘ F©'|Œ ëóáéìŸÐÎ¥*1{±÷ÓH8“}l@l-?Po]"£:ž¿Q‡Ç Ü’+Mïx£Œ6q6fämÁúõ—ám‘Ú1‹ñP˜”U pÜ’gcâåmXÿñyxH9‹Ö×;W “Ã<Çài•ølýzdzÍú ÌYžåÍè‰30±d'>|ï¼ÝE´6š4w Fɯg6WâÄ'C¿ø±2aÆälǺwOÂ×Í‚ƒ7Æ.[ÔÑój ôïÄþÊÐÑMÝãÇ©óGŽËh ÞDDDt{¢#fèÛ P¹ºÂév´É-´µ›á$¯O5„mÔ•núá.?–¶¶óvg¢á?ÁaÒµÁ r…›³ê/ÿvÕ®Ðöz'‚ º6éºéwmX`h7AãêÜ»·”hD[«Ašß½O:ýÖf}ù›<f]; Ò>¸Ú}![`l×K­¼!äyäøä1§”Ó©ßù)šth7¨ usÆ@§¸ØÙCÄÍÚ…0@úÃÅÙÙ9^úGßùcìü1÷ø!""""""¢{š=ÆüˆˆˆˆˆˆˆÈá1BDDDDDDD"""""""rx €‘Ãc„ˆˆˆˆˆˆˆ DDDDDDDäð!"""""""‡Ç9<@ˆˆˆˆˆˆˆÈá1BDDDDDDD"""""""rx €‘ÃÓØ5“FÃ#EDDDDDDD÷,ö!"""""""‡Ç9<@ˆˆˆˆˆˆˆÈá1BDDDDDDD"""""""rx €‘Ãc„ˆˆˆˆˆˆˆ DDDDDDDäð!"""""""‡Ç9<@ˆˆˆˆˆˆˆÈáib/Ìu(8_„ö $¤„»Cèþ@DcÑyä·ø!!5ž¦äå´"85^ÂͬP‡ªœËhö…ø€ë‡Ð\_€Ë-H‰ôÄ '/¶¢<+Uú>Ó]C‘œ ס¤e´cu•È)Q!&1μˆˆèvM0˜8;©;þ¶a0«¥¿¾?#ZÌ5TÂpnŒ‹ ªVm‘æ‘fÚÝ#f£‚“ÆŽåD˜ Fi^g¨žtŸ\Û7t]ÝÇÈkÚŽâ/>‹g~´ e–ÓM—ðö?<‡ç¿ó6²LR^Üœ÷ÿ{+òÌ7»B'´ûžÿç (éJËR…mÿñ|V©ÁMÕY,µÈül=Ö­ûùé+øæÏÿ†֭ÆÏÏ£Î2IJgÀý•*Y&3Ì¥[ðÓ_í@Uß´Í…Øü³Wq¤… Ý–ºãX·5†®¢§d/>ØWŠ‹i3ò? ; lÌe¹† ‡/¡f2Sl+Ã…“ÇpdÿnlÛü16~¸ Ç*X³éN~ü1N\m‡A”–o8ƒÏö+Ûji½ŠÒjƒT²öL¿Õ-RåÃRƒ£ïmA¶q€ã`2AÙ\±§Öo¹6‘'Ý×ö¯+"¢›¥q˜1>ÇçOáåøŽh³áÜd„NFRkÇ<‚ï\üóÿ΄k×^[Zq57WM~ˆI_§A¦wS#æñªO¿?íYŠÿ^ì‹æÃÆz—çñ·‰®Ý´¦Òl\©Õ"rd<]iRZUðòréˆ<šQop¯G¨£°ìÇ¿Ç2iù‹ÿ» ?sþ~ÿ­$¨{Tü¬¥Ûئ†§K+вKa KF|€sÿý57¡4;uZ7½óïØèñ2þßßëQS cÈH$u¥98}ì4b‹KŽ 5¯""ºyb3rîÇåfCê*œ±k{‘R.Š-¥hhhÄŽí”»Â.±30”_¿»5j[Å’±Ù¹ ž®¬ u'7`K±Â<)ýJ4D,ÇcSü¡rõGx”QîØ»ÍKžL‡šq~ëVä9À]0¢±Æ “Ÿ˜–k8½}êÇ=€´’O±îÂT¬™h@sym;ŒüZW$ÎZ„ˆÀ®¾”\=þ ö{=Ž'Ç«¤í¨·Š9[_CÞØW°"N µZ#ý°ûÝ×v’ ™Cº®ˆè–]¾í8w<ÅÍ$N@úÈ€î§,-%8{êJEx†§bbZ ¼ûF,õ¸|$%º®¥·ètLOòéÕ9Àpõ,Ž\:o,‚ïPW ‡ €À)Ëfě۳ñâ÷FI;¦CÆŽ H]2 Ù¯^혧å üäÉóxæ³Eº!þæ¯q.f*’ÄüòB0¾õ·Ÿaû9ëÓû|C.cðâ÷§ááßÿ §&=ˆ¯^«ÄC¿]?ùkqè·ßÅŸ â1)²'¦ÆÚ?ý7Ò½…—~ãƒÿ{ó)„JÉüY‰]¿˜'»ÎLÛé¾øËRŒñkƒÎߥ§Š‘þŸoá;q{»÷wbÓAüú›¯¢bô„”íÇnËsøô?çÁçJ. ËÂ;?9£¿Jdcì/þÑ{>GVc*>|Ϋ¿‡§&x€Õ1""ºi‚'ç¬@¢\¬5^ÂÞ î˜‘Ô€#g€Ô!p®ŠÄ Áý»¨šÚÑfÖÂM+W«(…’¹í&¸j•ºú«¨®(E½Öº«å¨ñ Œ&Œ]ˆÅ‰˜ów`CEg×Á~!®RºÕRR÷©E3Ú›ÜüÄb¤¨jqtÝèE)Ýk•ЀOc>JFJÛ^Œ’6-DQ‹ðÉ«0+Ø×2Ï¢Ì0‘rÑX„̬vCà³r=ªj*¡ý|ò”Í´@ IDzÉá77ÌWQ|Õn)%((hCm{+œŠ PàÔÀýác_=èž¹¶¥ëªüÂЮ+"º5Ì•8ºq''.ÅÌÑzä}ù >Õ=Ž5ã¼¥vbv¯û–É‹05Ù‚«™{ñÁgÓñÜÊd¸÷lŠ5È-0bÄÌ‘ðèœîìëÖ{=†R9pyW½2‡a FÂÒÅpûî6d¾2 é¦cØ‘7>­E¶•¹MY;ñ™i)^ÿ·ç©¶à©Ó{PlmN·’ËÃkÖwðÍ×àç/œ„×¼_áÝÈŽÛQú“ïÏÍÆ_>ø:bÕ"j¶|OüïnÌzùæöp tMyµHÜòw<ªBóöÀcŸ_À+ßíÉáÚî÷pdô?cë¿N‚³i1<ý=vU¬Æ“ò9_T‹„?¾ŽÇCÔ~ü <¹³Ûÿåyä}‰?üW¬òf胈ˆnA{É;óÇdcû¦,xŽôÆ3QX¼4Øêó¹úÜxûÊX¼´"¦«¶…Ö¬íx77ϬNU*\f}J+¡ ˆ@þ¾­ÐÍzéRØ|5WTjX®6vvÁÑ”{G®´B¬ÏCÖ5ohvUCã'©È÷ìSÞ»„¸£~W´‰pÑ7£ðª bfG"Úí.ŸÚ\ÑbŠÂ¢±en}æ1TyOÏ †ÚR‹£ï‚߃+l¥Öe(¾„ò€XŒ×7¡I×ÉS“ô»ñEˆn°ˆïBc]ÛC½®ˆèV1\9ŽLÏ©xiT(\¤¿'=†œu'Q>z!Âë`³‹ÇE(AûàùSûjÊ-ÉHjpáË ˜F-BšŸ×PÄÇŽ€Fg„ÊE M¯rË€’ÃG Ÿ0‘»/ÞÑýÕ8Ò—§Š^‚ƒŸÇ¶“ßCRÛN”N~)šÖÃ%Ió0¿íxêÑc˜œ–‚ÔI‹°"M µ§õéÖWŒå¯¬ÂÛ/—àÙgS:» ™Q~î<„±?B”º#ƒ÷M›€ ?ŸAžÉ÷&önàtÕ S19¨£Xqñö„¡± ×VÁÍß8^‰©æØTŽŠv7DÉwÌÚ¤Oc&#½sYϘZÛ¤ª¡7s""º…LhÌ?†]‡*1bñ2Œh¹†Ø€RìÙð)‚GCj\ü=œ:Lb r.Ö#qjL»¸§ÎÇijë±;+«S=àñâÇ…A³'A¡R5§Üjó ^‰³°4ÑŒâ]¹8S錰‰ 11  '>(³ºµ¢Tõsrv–Ö¯Jai*A‰6 -‹A[ÉYdµÇÁGÞXs- ê¢1^pç㫘MæŽ FwbÒ4Q€Ú\‰ck‘úÐb©ò(-,6Á˜U ­´ÿc\x†ã_Ûv_WDt‹XPWQÐYÐv•žaE6Ê[DDO”Ú×=®îª«¨ó ‚¿Ð±¬I¯‡QjtŠÒ¿º¦<|±ñ2 ‚”4:!eÉJL‹tQâ÷†’C8Ô6«cµ8x‡÷Ø¡ P…aáƒ1xkËVl3UcÆ?ÄKÙªõˆà9ÿ¼ižÊÎDæ¹3ØÿÚËø¼ø ¬ÿº­é‰°QùøÁǵ ¾®×C\*µZªìôíLúݨq‚“Jî´+v&ôííCØÉVºrtMpÒB+t×ë Š½Sv7)ÿûG¼òì§ðtö˜ü –H3ÖK³k¥‚§{YyafDDtë*[ ¹‡°ïÈEÔxŒÅü•ËåÖŒS{ÏÀýá•X¹²Rù{øó‹±àAŒ—jYmWöK¥y:KâÃ(ªü0qédo؇¼ØHÔV¡¨>qÞ×pJŠdgym*x†Æ!>^³‹S=âíy8[®†·s+ÎoþÆå èh!•ßòÛ*¤ÿÉ6ùu1–«زî(ô^ ˜4Ã]iЙ+ Q®¯Eù®mÈ4Õ¢ ÐŒðøþõp,,AÎJ! ׸Iˆ)ý ±ó±¸¹…MRA”iƒSIŠäH4ŸK@4B<Ù$¼¶}ì¿®ˆèV¥&¥ j÷ž-]©mèd‚ÑØ»û¡¹! ;v•aä’µðW.Ì ¤=øPG*m~ˆ‰OEÒÌ1_’j®ù |r#^\€ps hFÚêD¸ Åw|+"}Aó—#õ?ÇŸã¿FH_d…õ/ºùèÿá7¹óñoÏOÇÒÔi˜î~+Ž—¡áèNüO¿éåRuËz¤?5"&O‚ë¿Äù¶ÉïfFé¡£hJ #C®Á¯êJ @¸Sö}yï'ìÜ7Ûé&iÎ ²¬ÅÛ>DÙâ?ào†gþH6Ç»œ¡ujAs³tâó""6*¸ûÇ"}E ê.䣸ÌQ”ªL¸ÚX §GQ¯9˜°|"¢Ý€ö’ƒØ¸» “ž–Ê/+Å‘Ê?‹G¿ƒO#*­WÚD„fç¡-r*|¤ùëDÊ2vaÇÄÆè#Ò;«­ÈÛûÌ'!ü¢€¹‹\‘w­DÁ#iS&ÁC_„¦¢"‚ jïÌ_5>NFäí;„¼™ó‘> +Â;›ƒµGñ¾Ù ËWŒDþæõhž·S|¯ï„)ú1„¸ ¨½”‹:³ ‚¨C›ÑM}êœ:nfxyE!„' 9ܵ-?³6„ëŠc€ݲëÖÛÏ­õÍÊÊe*¶ Eï…èîà»-…‡°u |éaý/HÁ-Óçöh¹úE#Ìr5F ÔÇwà‚%ÎgãØ€òöj´= í¸tÄÝv¦ÆÑ¾BÁw6–OóDkÚWÙ”xŽ›¤þkÄ#*k|ñò/¦Á?"ÈÊô©J¾«I}ÿ±ä{øéÚç؆JÌÂÏ;> xjÆ:üô iº· ’ÆMA@Ãͧë~íÜ '¶_BZñïøÚén“»*¹aä“¿ÀͰo‰Ç¬YMøá÷¿ƒK ŸÂ¿½4ÕjÅ“ˆˆh¨œü£%ý9±[6æ!eí\xT´Â-Í—·Uaìà $ÐX-bÔê•ãm«PW#xÚ ,,RA<k<‡í‚~Üd˜”"_ƒˆ‰‹±´{T¹r§GéÁ°ß2 kS,øâb+4£09 '2ª‘uäj„6”4‹RsM¦…·›Ò‹³:ó4Zc§!ÐÇãâðîÏ¥é˜Ý“0¯×H¥ÔåäÃ9våõšÝñ‹Ò3Eãé éO±Òþ*Ó›`¾\íØñ|†üÚ¾Ñ늈†¹õ ÄTøn<"]8b¥²§=ÿ"ÊÃR1W鉨ŽÒcÛ°§4 ‘n= 4Q‡Ú²k°øG»j/>É‹ÅÊ…qŒ0U L‚ÑμG/Ã#±·,•¨<Ó€ ¨øÝ¡rN¡£o‹ºÇSçü(Öb±\qÌ/\„±¹Vy­Ÿ¿Gh­éCcn«CÞ~¾®=zX kh€ÉÚáLw  ñƳÿüò]¼Ó±„Ø´?Xs«>ûOÌ´Y°˜ÐR[ƒÖWyU/ãDD4\Ì9ؽù+hf¯ÁÂ32>Ü ÷ÇV!²p>:$`öã ÞÝZÉcFÑÎwq9åY,ŽV÷+×u…»±î˜b‘‡ú±ObfÃV |+º éxbf ´þ:´Ke±—˜…Í[±@y n޽÷œV,ÃHM=Nm>ƒ°µ!I*¯ Y(pND‚S) ÚÂbDñÅ*ø¦F¢þàN\M^Š©!NÝe}Ká|r˜·v"¸ô‰Üäi¥ˆåÚ!l8Lj†( ×_‘+6#cýn8?üÆt=Œ-‹ ¨ Q±&Ç»¶‡v]Ñ­aAcö.lùªn^@³>³V.@¼‡CÖ&üá“x„ø¡{Äu æ?31(ÄçÚÝÒÂà ÍÈúb_u‚¯»-zoŒ{`1Æ÷éF`.Âοd ú•Gr ºb¨Tªxé}ç±óÇÜãG¼Ï ÷‹œøýsøÅÅd,œ§v”g~‰3¯à¯ÿ6·ãÕ½DDD·‰Øx[·#rÁTeÃÁc-˜ðü2Ä«E4çìÄŽòÑX=/²÷ë_͵¸|<çÏ#ô‘ç1³×+êMhÈÝ-û›0Ajlrn@QîYœÏ*B£6ARƒKl«ÆU“'caZHÇØú øø£6,zj2¼3Zëš¡òõ‘*zè[tPy¸ÁIlDƆm0,Z‹)ÂI¬ÛnÁÒ§& é‹ö(V†\†Ϛ1ëéE­?ƒ];¾B‰:<4 JÏ Ê¿|{š#%U(Õy¨MX‹GüÏaû骎ñ·l,n‰s±h´ÇB Ǻ¶‡p]Eó¢Û1 ]/5þ]o¸¼±Û¡3;ÁÕEsGnž3B½*†%YÈ.ªE»à†ÀÉéåxÏ@ѽÐLRz>£È×ȃ&& !Èuà “Ø†²K9hôŽER¤wŸ2̈êì‹h ƒ8oµý›bnDy¹AQ~°uŸYÔáX† iÓãá*èQv>š‘cl©@þ5/ÄE¹¡6s? Cç =Ø„æ&3ܼÝz÷Òõhªi@›Y”G.‡§¿?ÜYÓ}|méº QóÐ DDDDDDDDö@Ø›’ˆˆˆˆˆˆˆ DDDDDDDäð!"""""""‡Ç9<@ˆˆˆˆˆˆˆÈá1BDDDDDDD"""""""rx €‘Ãc„ˆˆˆˆˆˆˆ DDDDDDDäð!"""""""‡§±g¦ƒ'O+ÿ ‚ ýW”éþ¬kšÐ9­û¡G=>º:&‹¢¼4ú-&½¶Aèów±Ï¬BÏÉýI«•ò¯Ð5¯0øþ[]·(Ë`õxÙžkÀÝ»émò‡Ã¾¶›KU$yán¿…[³¹wÃ~‹÷Ð×pç¿ú{XÏ‹Pìúÿðæ_â­É E{>o6ëû a?E{Òmo‘(Še]éôÞ_ÑJy×=Mì½L¯Y»>³ñïõßÅþé‰)ö™·cöÞËôOÏJºv]‡B¿2¿ãwAù·ë§{z¿{.gë_kë¸^±6/¬Î3`ý¤o]ÌžÏÁŽ,J°;ß’çí“tÿÞ«¶'Ü|D¸­ù«p–¸= Ž[ k)0Xþ!ò Ý†ê‘poBwùæ©ùÚ³lµù}ˆT•º&½ëlOÏk®k]Ó„Îå…õ…¾ vïŸ]oŒâHw\Ò–g»Õ*Ü“[Mt—TU‡«Ä¿K÷óF?Ýõ„8¢8èn ˆVþ­Õ—¬Ôœº VRì^§h«þu}mâ¢VVB+A +õ>w6«pß›Fvݱ¿!+Ü‚2@°±ô]Q¨·¯Ìc!JtÏú”qw{í@¼£ ŠVŽßnÊ‹öç™öÝÀ¸ºÒ±möí †—Ý+¼<=!¢nÈß“›>píÀîÄ›8n‡8n]ÄÖW'!bÏ)0PXAè´úT­@èÍw3ÜÁÈ]ß»’"âåËÈg¾¡H›ö×u¬”ãvTóìÍží €¸ýi:s±R9?ÅúŸ^B¿ŠÅ‚DV*&¶ |»ºù så˜eã­Ñvw~#Â=•,Ážø]º½âÍUDQ¼©•Šƒ”Ÿ¢]{ºÌZù†úì»h­Æ$øD ÇFßGVºëtlDK nö=ÿÚ9ïÐ{‡Ü|ùÑg¿îH¼_î«ñFD7] Þo1Ù³¿Â`CJØ™RÇS)=Òú”Õ ©Úª_ˆ¶·{X  é]¶‹¶ ¢íÂÓZµ çC¡ƒEnz>gkûÁÓ € zú±ÄaEDDä(-Í»õ±¶¶‰ˆn.“ãH.w¤<¹Ãå‹fH[-ˆƒœ/Â`¿öN®ç‡=ÓìñA÷s·â›u‹¿$ÖîÃZo<Ýg¹MÿE¼ {…ôºé0ÀÀb¶—ïº#Ú¿k=o@ô]®Oz½6¯ßQîš§GÑÎz…Ð}¨ûÔ7zÝpé9°®Ðñ·²êžŽÞéÙC÷«ƒôÞ?›=?¬J„ê(ƒôü ¼ôý>†»ÀnWx+)¹ok,DDÖ_ °§êcÇ\B²ÕÎb{×!¬×D«µŒ¡åÄš»é+Øù,Ñ0× y3-z"bžO]®hîÈè9Ò:DDDÄ ÚßVɈˆÈÁÙéÛÙRp®>Ý`¡£[ŠÐãå4C*`­t±ôÑ—áéZÉz€ƒ>ÚDDCÊ2z6âÝö6™>¯d½‘í³þÈŠëìûtPŸGa†Xœ÷{úD´Õ½Vèÿ¸Œ ô(µÏÞб]ëéû:\냞Z?¬•<‚í_úoÚ°Ý0²²]ÃR>Þ,–õDD7w VêC(Z»KqaèËÚ¨2ÜÞÈP+ÊÿTV«DDDDt×Ôryˆˆèþa_¤× ±»›dÏwÞ }Þñ+Øˆ×Ø_Îö¹K"X¤K‡œº`uÚÐKÇzqÒ½[ûáTDt7ä”â]±}ýï—ˆƒežCî5b½·§8蜶æ¶Þ¥¤ß£žØ8°20ªhÿ>õü§Ï ªý_[kû•¹ý{~W«g˜ º¾¯Ênå1ôê‹s"bÛixkÂ0•- lž0Ø3" î—Êæ2nìðš!íxÇ(¥P©zV³8z ëîDD÷VVÈ–ìbç›an» j•º×i"ÜÅ;D÷FÍG¸·6—ˆÈ®lJ¼‡7âf·ÞcÃFºöÌÓ=kWæö)D´±PßqAÛ;% °7]«°ñN[Áê" +¬çGï%ÃPø YåݤBDt_·‰îå£%ÞLJÂ¥0`]ÅίSÅs‰ˆˆˆè>¨¹²~FDÄFë}N3ܧÈÿé÷wåŽþð{?æËåÎ]0b¿ñò­Ïå0YˆÈ|‹ˆî­ªÔé "ÏöصŒÍ™nôßΦ MÒk×;.[_cŸ ì/½¬ö”¬—ý‚0x¹$ iÃô¼¶0\¯=z:,–ïçÆ#& ‡hyÜ{v—îÛPË(›O…ˆ·æûµ3 Òðâ\@@_³o¾ý6ÚÛÛíZÆÇÇãÆÅÑ£_Áh4öû\«ÕbäÈ‘ÈÊʲúyߊÌÔ©SÞ=­¶¶õ Hˆ‹ïˆèõìÞ»N ¢£¢”åŒ&#®äçw¯CÞ®QÑ8wá‚ÍW&ªÕj<ñèež —.ÂÏ×WIïìùówßk ‰ˆˆneýZt€} ""bù£`ÄžïNàãí­Bô:]×DÔ××Û ^DEEabÚx>|ÄêçááaX8¾‘ÉÁ™Ó¦CP]?Sô:=6oÝ‚ææfœ:• .ñÂsÏa݆õhhlTî•–•áé'×âµ7ßP¶Å`0 u\&Ož„¢â"LNŸ„÷Ö­ƒÙl‚—§'R’S­2䟆Æ&$ÄÇ)FµF×ÞxY—³ñè#£µ­+\†òŠrä]¹‚–ÖVžDDD¬xÝûù$ïíÞw47{¦tuÑÎsG%'&5ÎÝ¥ÍkV™ïøA-x{{cé‹a2›”i³;wïBeU•ÒcbÖÌ™ î^&>¾# °æáGº§Õ76`ß—_*ŠØØXx{yá‰Ç“Ò•^E%ÅØ³w¯2¯““¾ù—áêâ¢@’“Gbâø ˆŽŽÆÊ)½:JJK1oÎDFEbÍê‡qµª»¿øBùŠJÊJá¬Õâˤe¢:2gÎfbÂøñسoTj•òÝ©¥¿Ü¿_ùñòòÆc<¢Ì3mòœÊÈÀ Ï>‡Ü+yðp÷Àc>ŠwÞ}Ïj/;–wÜÌh}DÃvR‘c~ýâ½qÖˆw`+Ä¡}àëë‹°°pÂÕÕUù‘µ·µ¡]׎kת•@{}}Ý Yw¿Ç\„SDó ¥hèûn[+¿½ÿc5ÁŽòg¸Š£~C÷+n…áÝ^rœ¶ã½ZÁbIOýsvÖ L®«NöoN3ì;{#§žE„Y#@eZ®Õ"@%5úÛÛ` ÷‡ªÇ8­J¯i_5Ò,·ùl­®®Æ»¼]WäHú„ صç ÔÖÖÁÝÝMyd¥²²‡Q‹››}øa>ÒÑ#dTJ*^ë-”””(/X0 ±ñÈ΃ŸŸÆŒÕ«7È¥KYÈË»|²y³òø‹|<äíúÚ³ÏâÔÞÝ•M/ào_ìFÚ>³Ùggg¨Tj%¸‚‚Â)Ûooå3£ÁˆKÙÙJ0%48‡¤mv–¦Ë DDd¯¨È(Œ’Ê3wwT×Ô(7 äž…ºö޲ÔÅE+•™îR™Œ””´¶´àÂÅ (î,iXZ¥Dĺ+Ñí zÜåå]îÁ´ºrŒžï¹ë¼Ý"÷'û² ‚“0[,¨Ê)€ç¨X¨ f8I ôà)Éw¸„z£õl!ô®Üã#àl––«ÕAôqƒ^4¢ýr ¼’¢avVÛY!àöEŸ Ó¦MEhHh÷ßn.® ÅCË—Ãd6÷:.òc!òc,re­¬´ uõõ˜;gróò R©p­ºZ LÈw» a––—w‘ÇÔxxå*455¡®¡ãQ9pòÜÓÏ(wÀÎ^8oe=ràâÁ¥Ká&¥QWW§ü.÷Ò{¥|õÕ1ÔJÓäÞrO’‡)Ë4·¶HÇ׬T:åmß~åe}g23«4ä JpP´-+•1?ŽûJ ˆŒ3^Ò|qʱ“§ÉËŠÝÿ»—ê^­-ù;3VP‰î‚úæ3ñÚñ–Žý“{ N™†Èp3‰U€¹¼A#c¡7Y LpÑhñ½_ýÿù×?˜] Ë‘Kðyf?<Œ&Wx/N‡§E 4¶C• Qj”[¤täž#í-­põp–í+))EMMMwýP8411—²³”F{žMJðbãÇ+Óüý1sút¼óþ{xpñReY½Té{þÙg•GOäÈÂyó°á£0~\öøEEÅX0¾ÒëBpt|Úx|°~=ÒÆŒSÒ”(ŸnÙ¢ü.÷ÐxhÅ % ‘%U*S’FbëgÛ” G¹‹±ÉdÂÙóç°|Ù2åQœ††¼þÖ›xfíS˜;{¶²ràDÙ?i—ór•Çsd'NP–•{€xzybï—û” LWfD÷YÝ€­#‚   LŸ:UUU8rätz]ËÉeåÅKq%ÿŠTNÀ¢…‹päè\»v•× ÑMUD6óOž@7vÁÙŠW}#òåî)«4CÚÉg¬_@yÕÔ&¦(_<²òlÚ´ úVjÝ´øéŸ~Ã;»áüâR¨]]±÷obå O¢ÕË¿{“_y:C;‚¡Â¹·7#l¦Ô(Ûü0™¡–{–Xí2À«cûDºÊÊË{Wæáéé¥ 6ºuÛg8~ê$,æþc“ÈA‚µO<©2JKËp¥ _è41!§3ÏàòåËJäT¡“‘{a,]¼DéY!)ª¤Jž¸ðôô@HHp¿ôðèêÕ((,TÈÍÍÃמ{EÅÅ8òÕW(ï±íò6L <|Húw êë”ÁS¿:~Lƒ¤kÌ’ÐŒ5þ¾~Ò6(—Ñ£F!( I‰IpqqQz—ÔÔÕÚõ ß}í%ñîKþŽd´¬!ó8Ý¢U¼•ÇW¼cßï]Yï† Úµ¼p“ë·¾|P`æÌš­ôè¸$ýtŒ5”nrt:=¾:v £RS0wÎ\ì?pÀþ Èͼ÷×Ê„^¿ =l×%ìyã®0H=dh›.Ü‚ü«OÊbŸÃ@ÄÀÑ=P¥¬÷ΰ§h˜O°£j%Þþ<ÁΧQn÷÷àÖdB›—&µt¶ebãûëðåþŽY?yfA„“—+Lß\ uGŽîǬï>³·'L¯ïFÜÂÊÓ7N' Pâ‰Ø'— ¬ Ò4“Å ·6# žÚ[R8WV^Åç;wbŲåx`Ñ"¬Ûð¡|è"?"²æ‘G”WßÊoP‘+}™™™øÉŒ>Ù„ãÇOtÏ›‘qZúì,¾þ‹ØùÅncÞܹJÂËË ë?ú«Z Cçf’““•¿U*oÞŒüü|$%%aþœyxoÝøŸ?ýIYïê•+±c×ÎîõÈ y;äÀLyPÕȈH%¸Ñ5x̃¥c}ÁÁÁJï•7lÀéÓ§•GxäàŠÜ¤°¨˜™«·1]6³î5òc/3¤2D~\¼té&ã<".\ìHcæŒJÄÞÃиNxUD÷h11Ø¢ {(w±!@ºzxØuÕžÑXõ^Nhüò,|O€nÑ8|ðÖÿ`^âdüéë?¿¾ò4Œ ƒñƒÐMÃ Ö ¿¥-ü¾³Au(Ùq9¹—šˆìŠJ”^+CzC;Bf¥¡ÉËeð-¸ÁÁ+ä›Xyùùøõï~‹ôñðÂsÏãÃqîÜ9e|§ž|~¾~ø|×Îîã$?b²oÿ~Œ=§OŸ±úÊ\9è0}ÊT4¶4!))yí5\’*ŽòݮŠ)óȯÛýxó&aö¬YH3V™.÷ùÉ~„¢"¼ýî»8yò”2]¤+m¹÷†ÑØñæyÌù2—sr‹Å¢T2å^)ò0‘£“ßL#÷H‘Hbb´Ròºäï·¤¬²ú&˜{­¼ÿ*r¬vнt®Ü| Ä!Îxq˜ÞDc#q˜¾ ¹L˜2e²òØË¥Î×»ÛLG´U/e)tO›:_ìÙ{{ z„}úJ C[0l›- |ü„á¹þÄõ;ÁÖwǨ±†AtKÈ7£å'r¤¶Û°^ v;DÛ×·`ßJgNŸÑkJqi)ŠKŠm'4ÐØ^¢Ð+Ñ9Áî§Qn{¹’ä;7 b»¹¯oÆÊÐpŸ7ߘ½·Š?Ù‹ ¹cpêèh ‡xM õZœq"ö<ˆQ©©ÊHü^^žÈrÓò¾enÆéÓÊxVQQ‘Ê]wÞÀçÓšGÖ`÷žÝhll¼#ëwŒ5KÇ&ú,÷ºîzÔ¼êZNŸ9ìË Ýä‘I˜0~‚ƒ‚•7PæäæàðÑ£ÊXI4¼X¸{öîUÚuw¹)—}ò“¿ùío‡/ï ~ôýw°Ì@°‘A ðøËŒÓqäÈÑ»î;× õ‹èŸ#Ú~àV-}æ¢Ò ÑÐÞÙ£ÊÉe2ñþko`æìh*©…w¨\Ü´Ð].EbJ´­æ'$À)¿õ¦f¸ú{a„_*ÚN•"ì±ÙÈþò&æÕCœì”êå®]ÐÐЈ??8©ÕÐYL†šs‹¶ÎA ôìábîq‘|öùçݿ˙Ø âÀ¡Cxãí·•.»òã1òÀ£?ùÑñÖ;o+c„ÈÏdÉc|ºe«òj@9}µF­L—{”LŸ6þþ~oéûl°T!”§<ªüê]ùÍ3=ÉiÉÇyë¶mX²d1Z[[±þ£ Ê&rÆ™6v¬òùêU«°yËåÍ2ááXóèš^Q9ùû–ƒ9ò«sY°ßìyÜýFefe—Õ]ÇZëÝõØÍ·^y¿ùÝï¬nžZ­ÂäIéHŸ˜.•n7¬n&a×[f:æ=z´Tq϶:àéÍ~¿rå?[*7ÇHëP^?”˜×ÞÀe­oÅÐÏ ùM6ááa8yò$ŽŸ<¡ô°´–ÜO~ü/øõoþkȹþÀ£Àˆ·ä\¶vWíúø #'ÌåiˆÁù¥¥e¥øp㥞.×ÃçÏ›'5iBºóùår[Aî=9=O¯]‹÷×­cd˜É7­å^üŸnÝ¢”7wEý^jË-yà¸uׄ~²|㥗ðÚë¯Ûw±÷ vtý-1ˆ}²öë^½j¥¸³EóòÓm[»«òØ—öý{¢0ì¹×-뢒¶±õ‹Ó¨–*C!¾^hš“ '¨Ø&¢ðÂe<÷ýoÀ¢3Á)Y@cSÜ]’ÿÝ´ys÷™‘Ñ݃BÏP¾,Š-OåüoÏÞ}Ê~Ü?þá‡^þŽˆÆ²ebSrêNš?o.üýý•·†þàûßïÕS#5%Ey3©\ö pØúÛžLú¬GF³¹óͤ÷²[ÑHyßEã¡zk7šbÃ_ÔŽšÂ"\]ŒS5%qH‡ðˆ¨]=á–š´jôðˆ ÁŸû‚qñ|&ÔnÞÊc-f•+BgMAuM…µxïïïà…ï¿­Ê ¿üâ-¬yñkˆÓ¨`Ê+G}~Š=ÄLq‡ikk“.ìSvÕ*«ªl~6P¥¸´¤×|ö<ë\o#8"¿"×j!)ŠÊóÙUÛ(öÙG¹‚Ùwþó.°¤"bõ™na DÌ“*;áØ»o/róòî©£!ß¹”ï·ò®¤œvuM5""Âï’ÈÀä ÖÆM!)!QéÂ,¿•mßþ}ÊÞ{)Áàse~ñqqØöÙgVó¹=ûövÿÞשSX±|ùm €¸ËoØ´1ýÕ¿ü¥#Øáé©  qrRn˽[Ö>þ¾<°¿»]1mêT<¸d‰ò¨ÿíÒ«—¥“â¢blßþù;'ž|â ¸º¸*¿«ÔR{ÖhRzõl;v>–/_¦ü;`f- s†ä`…ΰ“8@.ÝçÀèE3•†¥ãáܦGQ{=üF„@_x 1áð>Z·Y“ æUA¬ç®ÃØT‹­.æ]€J冹ß|³Žoß”ñPéë ­A€³¿/ž™3æH?x›´øÑ¯í™¨j+„›»3bƒýÑ:*íÐøº÷ÙÜ¡+ÂÝö­ ó=¬Ø8ÁÑÎñN®ú~ªz²š}˯­rSìCj|ÚxåÍ)r°ùõ7ß°«§aÿôÄáýÆEû=íØ=N•õu‰7u¸ºÈëð¾»rÐ÷-'/…E…Òw</½ð"9‚3™gú“"Úz½®`×÷)Øüo|VÁîsÉö1üQäa!–¹ím®{Ü_5Éáªøx{£ÞJnYÞ=éäeäeï]oå’ÿÝþùçxòñ'”ˆ„`“oüì?Ñée§!Ðâ sƒˆ¤¢à^Ö—ù‹P¢†ÊÃjiÆ=¸ž¢3T:#ªòKáYVƒÿÏÞ—€ÉQ\i¾W}èBêÖÕ-©Õº¹tBlÐpK\3œö˜aflÀÞÝov°ýyÇØëýfw¼öxÌ~ãÙµ?ü™_ø˜±ñØØ $`­!©u´ZR«¥¾«êmFÖÑyDDFfeÝý~‘TUvfdDddÄ{¾#¹ô|¨­­©^€ÔhHÞv üõ݇QãþòË_ƒéùÁ`0 &?*Ó§O·¯ ç©ÿÚÛÛ îSe*"nUWwWѯs®ëœ}­¡‘ÒþÅõ/ÂÖm[aÍêÕ°tÉRxnÝsE"eâRl<‹2üÏzò#ECWw· ûTHsáZr®««âú¥¯¿jjjìïs,E^Xx!âT*Ö®{¾8„GÐÄê9Þ>!ô$—•†A?ûÅÓ“`¼3c¸¦™];¥0rüs÷Ø`õª¡L-ÔÎo²ŠºÑc`ë[ïÁ7¿ô?áKÿð x a)´mÜéógÂq}°àâóaܼéЀÉéZ˜øÎqÀ¾^è?Ñ “º ÿÛÿ ]cÒ0ù¢ÙÐ5eœLwÁ×>ÿ%¨êè‡wõt¶û¿ßÇ¿úM˜4w¤³b¾v”ÝÀ¿™µ?»”oãeš1r¤Œ² 8ÃýŸ{ÎæÍx‹qÞ¾÷î{ ºº~þ‹_@{ûÉü5ȱefîìoÂÌK}ñ?ïbóÿ!\yÂrÁk½ H‰Þž>ïjé_7jDëouœ‰pôÇ­ãàæ’*üãG¸ ýûÓ?·ƒ˜ßwÏ}ùtó²1†!ƒ×R@ÿÙ£ˆ2›ó`Ù‹>;à}Ly6ÿ12a¬ ϶·^†çô#U<Á„ ÂU}éâ%¡Ï[¶t)¼ÿþûÕBÇ»ñúëa÷ÞŒÅÇ„º Jë–aÁpeóÎÂ$KAÚ³°¦5²†÷ï’có_)¢øâ+OöÏ{¾îy!³ “OPU#W=²ä$•Ñ„0 d'/IÀ@`Ô”zèïîƒF}ùKП€eß »^ÜÏ|û»pÅ=«áÙ'¾ ·~â?AõË ³½Î[¹ \sÔÏšý¿'àÁÿñ(|õ¯ÿ|åo¾ kŸý Ì|åc ‰±c`Õ…+aû¡w`ÜÅËáÌ;{¬s>I«RÃ}n&?Fò'ù}ƒ1ÒÇ›+F<ø§ù¸vÕ*øäCÁKë×öíÛ¹S†9–,^ ×_wìÞ½^zåeøÜg>Zñ"ƒ}`xŒ4 âp–xêcÄL„dHëðëµM›àãúg°gß^hmm5:gîœ9°xáBxòû߯ˆö硊엻÷ìÎÇ.L§ÒÃí&Ï+òœ0×6ñŠ$ÅñX`Ûxàþû¡¹¹Ù7±nÛ¶~õ›_‰[kD€¸½jÈÃúRŽõìSJ&²Œ ´ûÙW/ƒÞ š`BAoUZßÜ uõõÐT7êgOƒ»îÿ/Ðq^ œzu LºìB tžXÿP{¬ Þ}o,Z¹nžÒ }æ³ðÅï|z >õɇ౥·Ãïû`ÕÔEö(ºc9ô ¶½~C”­ún|¸1£ AªìåÍTé‡e9¼yáçUº8B – ÞÄlÉÈ,{冽æã¬EOo/<»nlÞºÖܼ–-]fGùoo?á>£ ñ=5;¶§§FícTHeý#VXšˆki ©À9bÊ”)pËê5P[[ ÿþóŸÁ‘#G¥Dƒo5÷¸4›¼Œ$#\CÁE~ÂKù$…qßïPåð %†[F«œé8cÇ͸çÎ;ágOÿšŽhŸ7wÜqûmvö³gK»h)&ž'¿÷=ÛŠí?úظñ5èÏÄ«è<Û ëêµI!ÊVï°d†é|A!Ëqþݩʑÿï”]šO,°=!å…þè)EÓ,£$åùH}“eÜ}“·ž4z%‚)hb°ÔéW\¹ÄG½ãGÃØŽhZtŒîNBuÝ8˜|2 '¶îƒ³oo…öi)˜>q"tUì8ºnZt \rå ø§'þþä??×$jàoùïðñ| ¾ñÈ`Ô´IpËÀhhkkƒ©çÏHÅòƒBý!L†ÒÒM*RDKzØ/Ð Ãü`” GŽ…'¿ÿ=X~Ù¥ðÀýƒÍ[6Ã!LF †Z&ôt÷À¸±Å¹%®Ñí"@*µ55v€ÛeË–Á«7ÀÛo¿£%•(„¤§n•¦ÔóTÅr$HæÿaÖÚ}û÷Ãož}î½ûnxù•W¬¹‹ô¸+W®„Ë—/·Ý%>\1mÎAÁCo½õøÁŸ²ç·½{÷ÃÂ…»¡ ŠÔ¿¯oÚdL¬—¹´¹F™c|fs΄øpÛ0ujþ»,jÄÉ(”ÉÚPxúíÁlªo'“ýÐ96˜®…¶7¶ÁøÕ—B{g´¼°æß~=,]2î¼ãVXûóßÀ⣧¡½¾žxâëðÙ{¯î‹ðé¿ú<ü•¿¾·v@ýœ™pôݨ¿rL2úÒÚ´·®‰)*Ûo cÑG7y ²Á(0IC¼þ#æö÷s)‡™üÑmÙ!ÖÐßÿþmØÙ² n¸þzøÔCŸ„ç_XOBY˜¯Î mím0½±vìØnÜ)A4€¬ÚÓ¦5 ;HEï”BcÊjÜA)CDÈAn…Â"Ürʂ뾚à@ÇýLƒ®Ë›4;ÀFtð(Ÿql”>ÆÊ~6yQ*’âÏ=uÝÝ»o/<õãÃ=wß³f5ók׿•^áZrÇm·Á¸qãà{?ütvvVT[rûE-¼V¬Xo¼ù¼·å=øó€yóçÁþýûm+‘UW_ UUU¦tE>§÷Ø×á Ÿ”V…2· 1 ʈüÀ¶òHX}•´ÆÁ~òèu¤C~&÷’/î)âcв‰d˯‡z'™tv!6wH«.ù“”&HXµKZUœ¶b ô´ž…ÚéaÅç„“ã¬îèOÀî~j­¿íè1xîÿ<>üiè™X ÿõ³›6.= ‹/„3 €ú9MP=†®D¦É Jä…5)³ÅƒÁˆ¼0J Ÿ2œÛßu~ù̯`öìY°æ¦ÕC¦=‡[[aáE aÔ¨QÐçÖâ„(»¡¡Þ}÷Ý!Ñ'7\{=üÚV|ðA$y” 2ž‚XŒÎ[„™^XDaŒ „q‹i?ÙÿúÝïÂê›o†OüÙŸÃOþí§HTÁÇþø£°gïÛí%•J•­-üÅ_¸~óñÇ}Ç<ÿ»ßÁƒÿìÙ³N>OYŠûu×^ ×|øÃ¶>¶sç.ØôæCõfF;V—NVò7Av8qÓ 7ÂGî»~üÓŸæ÷åb…=SÁq6V\¾.¿ì2;óm·ÞR±õŒ 2mBÚºé L@ߤѩ8×z ê§O‚qé$$G!ŒþämÐBø·ÖÁ«Û[àŸ{4óð'À:!U] ý£­B’i€)ãm2Ó™¸DƒŸ‘;Å*ñ¢E¶9š('‘HÀÒÅ‹aç®]ÐÛ_¸p'R_5Nm€½û÷•„ø‚ã%Ë–ÙAiE{z{{aß¾½v*-áS=wî\hii©H³4ƒÁäÇp÷$¤|pþùÉ…+W^1$Úsúôiè:wÎ_0ßÐvåç/Xç:ÏZÂõéŠï—_y^ã H(-_ý»¯å_Ö „O8‹\ϯðŒ"êÍfAR…Õ‡ˆ ²rÅðÀý˜@Û]ä2¾ßúöãFû…k¢X³rDˆÕôÛgŸ-kÝ3ÁÖZÒÀüïÎ9!\ ϱ¿{ñ¸uõÛEÊ‹rº£òÖCáêôç~d¯Õbü~êá‡Ã6½$KQµÙCŒRÚþOý–ù[:v‘!ùÅ=ûéÜ7@)¨I$ 1ctÀ$qa/Ž9™ìƒ‡·Ã÷Ÿþ¥«L;ñ–ø™Ù}(ÿ7Q¦]Ïtö;¢´ &Š‚0Óºð íàt¢.Ë/»ÌúLCo_o,>nôX;zîÞ}ûŒŸ p *dåFmí(˜={¶%”½j·µ±¡V[•`•Ói²'®|ú £h‚@!'Ç•àÜäúO¥¡ ’TP©IKÜðÚëE³9¸ªÜMf˶­¶ð.Ö5A²Ëý#‰ 7¸Oíú"LÁ^t1lzkYt'ÐWDYøP”™àfwmxí5åü‡^ù8{1òÉ,êû,%K4D J…MydUŠyDG V:ŒÌE†¹å 9íc aXåS–Q§xê\ØÂÀT½é—„ñC0wMó­·`⤉ö÷wß}¯ì©†»ÎuIuB±ß[·¾Þ¾@}«T0ŠåáhQ.È}¾æ$D¢<Ï&î2\¶X~³ö9¸óö?TŸüΡO\Ú•–ŽÙÝí:ý •¥VQ\#gW…>Ù‡BŽ;³,0N!F‘i5÷U¤¸õ¯Ë˜ßà&Dú (LB,!# éüMVÿäÓÐ?0U‰Á²„5†“L!B B®ªÊ“ˆá!œ3{6Lž<Ö=?è=½±.ºx¡ý]ø<·8—.»6oÝb³ŸcÇŽ…iÖ1ï8^pÌš5úûû`Ëæ-p*ËÖ‰ú]²t)46N³MÜögóz7Ïœ óçÏ·ój‹ÔXÂêdÙ’¥¶p)|ç–,ZÛ[vØ×¹è  ½ý$Ô××Ä `êÔ)°k×n©Ém2™‚ãmmvŸ8Ñ /¾Ø¾†MÈdƒ×ÕÕÕÁÔ)S¤eMŸfµù¢‹2mniãÇÛ2õm¶ê;wÔÔŠú–;3ç+Êa0¥%?ŒRàà¡CÖzw¡¬oãk¯ÅfQ(ÖJQfÇ™3pðà¡aÅ¿=EÉoÒn“4±?Ø…Q¢GG èÈ S’AEz€æ3ÌЛICÄRïò€FdµÈ¨‚ìÖ^¤Òä'±Žþò×Ï@‹¥ ¼þú&øè}÷Ú.0Â*TX2)ÉÃé 0tq0 9£Ê5Å·¯?é0T@B.2$wZ"±æÈ‘âãù'¿ ×þé-e?·ALÛ–"©ô a"ΖU©ŒËŠõ_ÞFüÖ±¾þ°®™­¾®V]³ ZZvØ–bßĉaå•WÁ³kŸ³½ùÆ›à…—^„ÑcÇBóÌYðþïÃüyóla­±±fϞϿð;› X²d1¼ºaƒý€‰`n‚HhÙµî¸ýh=Ò UÕÕ6ɰþ•—m‚Cøµµ‡ u`êäÉpÚ*sùe—ÀÉ“'àØñ6˜Ý<ËŠtÅŠËᥗ^‚VykÖ¬cGº‚戶×ÔTÜٳìŸÂäÀÐo3þ¼ñ0«¹¶oßcÇŒ––%•W¬„çÖ®µÏ¿éÆáEë‹,WD¯õ½ñ†ìú b%°NŒ¦”Ç4 î‹e©eÞ‘#ÝÇ=žúÂ\ C‰ AÄù Iw­Aù`“%èÜtóM°há"ضm»¦v’ gäÍE’ù‹pG/Ö®[7˜Æ>Âü‚ºÑ}”L\ðÉ ùƒPS®?€:†(!7Ç“_”DU' š+Ÿª7ê† -…Q$MŽ15AG‡ñ „T¾ QÞ£Ù ê_‹2ü {mÝ> ÿý1aé‚:t)’½ßFØôLÈÄ Ë^‚ÈÛoœ;[Â4·Œ+J饞¥,]±%FIãé ÅAo½ý{8Þv f̘¿þíoáà¡Ãƒë‘v ð§»UX3“Ç$‚€{ g´ùà²IdâPT9öçM@‘amÉdÒþý¡~ºz{lâ$G€TcÂë#•mmUÖ÷L!¹Ï Ñ>x°@éë¹±êêk eç.èêê‚óæÙìfÍœi'üöfÎh‚ýû÷ÙB߃`úô°ÝRüEìI“&Ú¦»m'Ú`ÃÆù¶žÓÙiGy>yê”u̘3kŒ3Ö®Ãø àÐáCÐlíe•qàƒƒ0sf³uݤí_%ÎV GeÒMµ&NAXxÉÑïã¬ýâòâ»([YYórmnδYD&žÙÔ»vï†V›±’«¯ z„ïŸI ÆÐ%?Ê)š0 V™ý(Ö Aò‹àwÛ·ïˆ<.ÅÚ½hÑ"k]]/®I8¶\Äž±ž[ˆc3¡eayݱ2…1¨ì ·ò:"C4&ça€¬Û–¼Ñ 6‡WÕWVo h£I›A£Ýo•Ÿ—nl›¸´`ˆç Ê QŸ ç}4ïH„0C‚ô[PVàr"” ú]nòþ9Kî¾~_¼§å‡P¾«}Ö!w–Œ%G’Ò¶HM¢Ê*/ a[wdËq ý‚8Iä,K’Öß­¦ 8ê’“ep¬CGÕŽ‚-[¶À‘ÃG`·í†²^{}“íê!ˆîžŒóÖmÛàLÇëw7|èª:hšÑg;;!JÛ„†xk%Üh–/¿ÆŽ¿zæ»#úûó¾(Ú`í«›P7ßtlÙºŽ;j»¤ˆHЭ‡ÛäJmm-¼·y \yåJH¦’vä}Ê’N®)4¾5¬··¶íhÉß“ÕÖu¦M›f •]ùµSU–h³˜ÚÕÝcïÚbµ¹Ãj³ gVgëÛzôˆÜ5—¦/¨NŒ2ÊÀCº'Xý•MXåâ>ÂÄ‹ûºC‚a(B Húƒ"Êä´&uWz¢í¼´~=\sõÕöööÛïäc‚èÓìî1?–/¿ ¦5N³­ E™…öéæÖ¼”¦Žë¡VlÉaðá÷möÅØ0‰õá¾òU 6#Q¦±‰ù=y”g§ ¥š :Weu`º)Ã:e[r-‚ °WñRøuátJ9AdŠIÂ’Aî¦÷” ‚ Ÿ¿b.\²ºKa®e—‰À$ÈY¶K.}`Ø&„ëô¬@HnGÌ4€A¼‰dBî A'B˜öVu,÷ƹMÓã»GV'Ì„LÖ˜RC‡l³°£Úßuç0aÇ;ŽÆ¬™ÍvncQ?‘ûZX8âæðáC¶Ð'ÞV Ìhša†wD #Ü ·¬Yã'ŒW^S¤ø;zô(ìÞ½ÛÎØRwE±~÷õ÷ÛV1Âý¦£ã4ôtwÃÜ9saóæ-0eêÔlX§†ÚuººªÊÎþ"\ˆÜy˜QZV›%| 7™|›-´ÛÜÐÐGËÖ¡þŠzû·ªÔJ,aVRÝŠæ{Ôk¢¼‡¿†ª‹JŠ21é£ í¯Pì a( #ÃÅð£1ôÊB—‘îúTô±Š0ôa±nÝópÕU+áöÛoƒ––°wïÞÀ@â"cÙ‚ ìU°víº’Z~@¹ÇN1é(oÒƒH ¯Må^UŽª£U gPð@ÔÔÛ䦢f20³.P‘8:å 8æDrÍDßב4ÿSPpH W¼ñµ¢”iȲÀîü»yTF‘gJâ»çúijÐÿƒ3â·œ!)bÀ‘¾–þs[÷ï‡4¥ yþù±Ê‰„fl9þõ÷÷Û–Ë/½ÔΤÒ4}¬Y½RÉtuƒ;vÚ'íÛÿ>Ìjž 'ŽŸ°wœê€ë¯»/ÌLíîê‚Ó'OCCcƒ_X°¶#‡[­cÁµ«þU ;¾Guu ÕG‡²-.DŸ`}î&9W!Ô×ÕÁ=Ùhû"FÇ~«O´µÙ1@‚ Žmjʶ9¶ÓîØÑb»Â,^´®ýƒl}ÏZõÍV5“²I#õ„UúeCÐw"nz\d©¸§Ó6‡9 î]Ø> ×:šš©šÿŸŠ¥h3•_E+I<Œ¨20•·uhØÊ «ŽBz-œ•J} qÍÜ|uÖZ'Ö­{fÍj†¥KÛĹÀ}üØq{ÝìÉZ…Œ=ÚvmœÖhÏ/ÞxãMø ðc¾/ ’ñè‘PY¬?ô‡ÁýÑÈNa*!ïÙae3 ÁŸáÀ“ÆyÀðåD}d)$±`ª¼GQ¢MË2 ¬äÂt^”©… 0‹©~3 Â(ž¡@Ù ¶\ôOçJê]UÑPã“]D'ùJ÷l×Ͱyˆ¹×óUŽ­&»ÛÝõ‘½î“<×vôÄßKŸz(‘­˜ˆÛQ•LVWAWG'Œ­Ÿ`»¾B$Q•‰Á!ÞÍž;?–ÛýW|^3ySèu@Âê#—óZ`æÌ™¶÷î{﹎oµÄ±"^ˆLC÷ ±Í…Éð ït“"j&Ùié2mN¹Ú,¯o…X²eвî~…´²  cåa˜Î§Â®e܇š~Rú ¸Øb!o-d¯I§%¨'À‚É…"±4šëƽ(–S°¥a{1³šP¼õ£°MÀ±á(XyšÚIë¡ifLÚ`ÜVˆ"f”HÅ.¬FZ·Ú±­‚¯IEèrÞ½BS`qaAMZËŠ™*T£fEŸ1¼´^†ñ²GÃ|(ˆ’”ðQÊ3;Ý„ñþD9‚ä™_þlˆD³™m »¥™ÅÉGÏ+•p;o"«(«ãd{;Lj˜ É*„䙳0nb 8×q&Lœmmm0wÎ| Ô€µ?cUÐyÆú[]ý]æ“#WÒ¨Êä1@ÐüÖfíp D×|øÃpÞøñ¶¿²÷†ûƒ’ç½³C¹³úGÄq_’”Ç0Š7(Þ* AàôI' !ÀÊC_S!ID™TÀcHfçP“ (ÔaûPSw [C7š@‚ îGn̤Æv¯ÃT൨À2KL~°¼UaQÚŒ"P˜–Eî#£¸!§NwäÉ £éIw…ït± ò¿’ìO\¼pœ@¥ô@ž¢MiIêÀa ¼0ö¹ÂÀy K3¢±¬;ƒÁ$Èc@†Õ(ðå£0–£¤•”ÍeõÑd´ä£Á=ÊY˜õXu,·@£çRBâ³ßú_u `ò”Hõ÷À‰'`ʸ‰y’@¸ˆL™Ö˜q@°‹¥ !\= âÿã'×õ­­­0­¹ ª,)Uö¾jëèKP©¶#¬`‰Ÿ‚W6l¥n¡6Z˜©ò¨:– ºEA!Š2•éq7! âìq­ëŠp-iDd˜’ A}dJr˜´• [ôj´Xs€iÈÿ".…,1år% F)Ÿc^ôñI®A’ú^QBˆå‰bê«vVÌZ~T!ŒDE•Èàb}ÖÖBCã èLf¬ „pCcc¦£)“¦4@«!%˜*áva{òx›í&Ó×ß©SganÓlÀî~8Ýz$ãbÒÖÉT*À|‰"lªá~³ßaÖ,Uú‰ŠßŽÍ蘒'áQ0!*åQÂý¥l]žCS‚… °ÜQ¬¢YÆD©£Ix{,Ñì—b¥½>1ùQªõS¹ø¾PÏnáO‘¿ÒþíUÄ&äbd™›=¨4]Uœe¤”á X¾‡¥ ÏdXÉÁºcdÝõÜër÷gî»é?“„RÁ³h¤yÖè l»%Ö)ú±/­‡áä_m~n$>oðŠ”LAUU•mÝ1uêT;lO_Ÿ½¯ª¶Nž< cÇŽ…êQµLÀÄúúŒµG6Mjuàô©s6!’®J@5& ¦¦ú¬c§Ln€T2 sæ-€tÿ¬}éy8s®&͘ 40µ“&Ø×±IA¾$p AT÷ Å¡ÐZ׎Ÿ0á­‹Aãür Å,‡@?Tâ¢^@P×ÄØ)’à4 A\<†ž£˜²Æ5¦˜Ú!ž‡“ì®|¡®*aȇ žŒÊSÐëæâ˜0¿Ã>ó!‰â{úe¡Láþwº¾Æ€)-ÎtóaB߯õ(âŸ*d­¤ —œI¦í(W{†ÅgÄ7`‘F[ #6‘4;4FÙ…:˜‡›hu뺼F$•Ý_HR …ÌÖTåᓽÕΑ$ÿí3_Ð,Ô!TÄð·(ªëK”óŒÃ̲ÂÀ`Œ y0à3q׊¢VÀœ‚²¥\¶ìÊ\Ädb†.g¦‰Û ‰ëY×CÕZè% º5zÊrY˜¸4ð€¾PˆE.E]Öv¿BÞlX²Û¥j9ÊC•*­äeÐ`lèòˆŠù¾ÁÀ;¡­”jÊýbâ+‡ª 5L”~Š£]8Lîöz_I3ŠýLxÌQ#„ ŸÇÈÕ•UšÜ†&AP1Z)¤¾{òÏ ùóŠÁléÎÇ.÷愼©âè]¡Ø  6x¾G xÒúäǤIœƒÍ? yÚc0FBƸ¡iøAš%˜ H"Ä{´.Å2(ýªLJ¤PÚUD‡†4^/·?mPG¹rOä,ÃPØ[–üõˆÛºƒ4䌇¼#wÝHy?½ûÒ®vEiÉÐÒ½3C=ùäëUÐRid%òZ‚øGcþ ŽrT# g"MÀž=?áû›¤ÉÄÍ0^…Ê6§T,{0$¨›èí2Q×J•­”c¤2É.ªè§c¨3 äY5u’€Þî4+kÐh3qàë §J¡h ¨jýY¼kµ4<ÅUS1·tçÅô_ßo቞?P”±é÷mr#éFA±4K¼ØÑ0YR#“£(ê2U”®2ĉ8«A%¹ÓAV-¨ d¿e I a•…„JLÀqÂó›œç{ß ¥=å¥Q“wG‹ˆaà#MTm@¥PçW˜U¤•„üP™¢ªs×÷´Ké—÷yˆ¡0÷!ØÄO” ¢A¦¡ÊIs×µOU¶»Óžît ÜQbóc<DlY`†ŠL¾®4¬ú‹<(*up½Fý t5%Lç€bD',þ¤fý ƒCƒ=>¼òpî%¹–÷p±&ª º‰Ü©áœ–´¹”3^Eµ÷¾!ó pþò Ll@JREŠ\c„L†OJ F)ïâ”eï4¢¡)2ì1¦ñP3Ûꬨˆ#(B[ȽŸ´bHÞß’XWd8[æ6CŽÒäK\iˆÌ92m/¼@ͪl’ÇÑp‘ $“üBŸ¯Eh zâ‘…UFMy¤»—Úp!Û\UøŠCgú*[ÜFéúší)Ã]6÷– ‚Ê#ƒkxI¹¹Èù1™—PîŠ !@<Ël6ú,i‚É]”›ÜbˆÉ^çöfQ—ßL4W‚&"a1Òª–Bd0X\aòc„Ë/Je¨™Úº4ĵ)žš‡·æÅ)¦yBO¾¨Å¯Ç‹®~h-<W1nÕ7÷‚É@2)š—L\c‡ùDÂàÕdÄJ;ÜÓXarXœÙ MIzu˜:„N<9èg’óŽ!… %Aa Š$˜ý¿Ã:#Ÿ-ûé¶ÂpZ„ ^@²WÝ@ë …a衤‡ß²øîUPœ:ÝM—Xtç]–•+ƒÁ“eoqEÛ¢rsªÌÇÖ§"rÁ…ù‡£ùˆa¤ç)ŽÞ!µ ë—P-æÙÿ_ó±:P—’äò‹.}½FÖ¡È…¡²Tðs>¦Z9žÅàˆm¼X2X cTZ‡±Â(NÛ(bÕø-]ýís[{ä÷8eÌt&ð¾[ÿ|A*Dæ²Jƒk:ºWõ¬”€DÔ#¥‹r§QÂ}º‹3P"$@<Õ#EGcÔ›" ®÷Zþxj…)Ò úè¾+‘²ÖHÖz‹tP\@ƒäF‰T}!Û§Š@¤j—i¿Ë®”ÌBw^P}(` >_ʱ”i 8þ#¶ÝdL™œkRg g*ââ{WX– ÃÃÉòƒå´ðÝ!‰=…,¯dVÆfÄE[(}i¡^|S™&”Šâ¹$Q¢’uÐX£âi]’ÑMÁw«¼ÏàH™°ŠCô ²‹Nů?¼&GXû°ÒîbYÈ—˜…Éû{Ô.Ò>£Ö´“# ¥#y6_‘ÕÙ$·¥çS”Õ’Š3éeÇ€òÉ%´¸2q›æÖÅæÃã.ˆP‘AdGP½Tý¤¨¢†8͹2ƒ…S£Pͺº¨ú×Ð)ÿÞ˜~¦9ªÔÙ)õ$ƒiÙA¤R©…Š1A†¤P˜ddöì%¼¬è0{ìöÂ`Ĵг2V©Š2c$*QŒŠxšÙ‹žGÁP\‚diØÌ›“Ö RDj20>W[“8/—®ÎÌéÖã²NhC×TYìUÀ±¼‚àÒd¼ipM:C¬™‹ lôx©ÞŠåÌ¡@Ê,e½å%|U#99 SÀU °NSÔEi ²tP¸ó#:BIeeFÙÄÂA—-’4ÇP„9(¨ÏtäST‚B•¯K×&É¢³x€zèúÀdœ(®Ëì6E_,Â-”³šC6jȈ{o”§>t-®QfÆŒr…™? Š´«á“Ñ“ì#ôSKîzäiÌR’ˤ pŠÁ·LYYga”ñƒ•ù3EÅÄ £Ñ„ÐM_ Š3:3;_\Ý #Ó,8(ÌH¸§WŠìeµ.ž½Iò>ç÷´ïxT—'Ù„'Ó]enZAËIT‘£ü£,Û8ê:A 0•¿Q¡z÷£¿?\ýìyÖòãå×wÉ“Þ>FuÛd×"U9ºöÜ/Y(jh9'õ¨B5™ õ>C÷ß½÷ħxê“´Ïw]ò+&ù)‡ÌÓ’S #ã…”üþÙÇæ^<öªššÄ›\pXyxcŽ 3P'¹ß=å„!ÞŒhipƒŸzi\"9ñ1ÑÄÿ“þÑ–’šÇÍä ž×€$ “¬:O Д¡š~d/÷e† AS“WÑSýšútAFAÓ”ÊKFИx„Ý7h‹Jì |Ž&µÑh–€ ¾7΢¤ƒúð4å ¡·ù8š~º¤ÁîCŒÙÄH™&Œ% Ñ\“ a‚ªÏ‰-t‘¯¨OU‹!Ó?‡ ]fÃW«$s+È Fe®l(YŸÈ„0%H!í¡æZA¯(„…Z…¤<‚Ò|;hi‚… `(d3D÷Tò,D˜– µMærÄB$‰Æ## Rûw|LA€¸îjº}N¤[{ÇžŽDÓ‹£ÇŽ™† šV]…µ¤•a–H@Ï®ÜBÈý“Y€híï1î¡–{‹šÁìÞüá@² qR4F‚B§0¡‚(Q•aJ%ç覭 ‡ rÀÌkB~AíMšr0` š^M¦_Uƒ<†T‚0ŒX 3Tý„Œ']È“1eZ_ð“Cü©ÜA¹ïñè¢Ö“ ¬“â|ŠXE‹ªZ@?`F¸BŒÔzÕ(¨/C+&òLy¨Œçlæ:Œ!ºLù’ë¤[•í»îÙya¬CtÒ ªþ:¦0¢ ´òƒiJÑ8–aÙk Ìëó˜÷øÈJòAoÞѯ¼P¾0ç9r Ø-Æ Þ¿¾¾d×ÙŽÔú–÷Ž~úxÇ»¬]IkK96‚˜¯½½%²[Uv«În5ŽÏ*Ç–;>®ä‡ ƒÁ`0 ƒÁ`0N¸¼TÀMt @†üÈ}:‰—UHµ¢Prêåe¼ ƒÁ`0 ƒÁ`0ŠWáܼ¤‡4ˆ*ª3îfʳ?w±ù‘ûÇ9 ƒÁ`0 ƒÁ`0…ÀëÔµ%ˆÓâ# AP½;;™¯ë  ƒÁ`0 ƒÁ`0â„,o‚“q!ÎOiÔjGAè)`Éí“ìþÂ`0 ƒÁ`0 £˜Pf®¿å‡×ýÅþ.‹â Áë$AÄwoÐS&@ ƒÁ`0 ƒÁ`NRÃI€È¾KSýx]`|ÙyÁŸá4 ê,£ ƒÁ`0 ƒÁ`0Å€—Qm ùÔZ€¨È9ùÁDƒÁ`0 ƒÁ`0Œ¸A’ï^24Ÿ6TY`¼n0Îý~²ƒÉƒÁ`0 ƒÁ`0Å)~“â_´ »îc0 ƒÁ`0 ƒÁ(%ÈpŸê…1 ƒÁ`0 ƒÁ`”¡8‹ÿ/ÀAù›XT>3°IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/main0.png000664 000000 000000 00000376527 13703317554 026344 0ustar00rootroot000000 000000 ‰PNG  IHDR@º9&) tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp ˆ’'ùÇIDATxÚìÝ`W?ðïl×îJÚUïÍj–,[¶Üã“ÞqB:¡„~8H¸?wá88¸PH%i¤§’ÞÇ]–­jõÞûÖ™ÿ̬VZ­V²Ë–-}?Éxµ»3[¦¾÷Ûß{OGèˆ """""""šcґ̬;ÌóÂ,#"""""""šoÓE¦ €‡ù[˜a~"""""""¢¹$…¸/=î,Ôü!  ·Ó=ü7Ñ\Büx;›àÈ”ÈtAé¦Ày‰ˆˆˆˆˆˆˆŽ•à GðäN@ˆ H`d¦ ‡fš¿ô7Ñ\ r(“8Íß¡‚!3f€<‚§é²AˆˆˆˆˆˆˆˆæZ¨Œ1`BÀ­þ Á}y?´Êíi›®\uÅg7ÿOX˜~…$I&®{"""""""š‚ 8FFœ{ÿúð‹?ød÷k»0×ðAƒêßZy!ÿPYJðC{ú©W­¹î†³_Òé48üйDDDDDDDDÇ’N¯×¦”¬)¸º½ÅýNKkMÛáЄx,¸Ù‹öò+Oÿ™$Ia\¿DDDDDDDt¢PbŸ»þ‚Ÿa¬õ &wÝ1I¨>@‚›¿h•f/¢(rÍÑ11¤µã€izuñ\DtLÙ=í(p|«·—+ƒˆåã^þà9èØ0›ÅðÅ/ûñÇ6Æû Ì™¶Œ(Šì󃈈Ž?ˆèxQÎ5Ê9‡ˆh>Ê<’$19$ä -:LÅeJ®N"":Ö…Å߯ÖseÑ1uån\‰hÞÊ<SJ싉XF`35æ1SH` „ˆˆˆˆˆˆˆèD5]öǤ ` €Ñ Ááp`tt###0™Ø“ˆfG9oX­Vèt:õ–ˆH’¤ù”þ.ÇFG¨ WÚÉ'Td’P þr!""¢c­££z½6› QQQ\!DtD<†‡‡ÑÐЀ´´4®¢“@¨ Å\½¦? 1é=Ä©BNj¡b“6àá2@üY DDDÇ­à£d~(Á>ˆèÓR²?"##¡ÕjÕ,²°°0®¢“¤0ׯ§Üj4šñ¿Ç½ê­×ë{N vø§P÷é„7mç§3øM—ýÁ­MDDÇ•’¾®d~-³Ù¬U‰hq ~(”,ÿ¤<¦ÞŠuR2Ƽ^ï¤É( ˜Ð oº8Æ´}€sµ³¹\.u§:JTÎ`00ÂFD´È)¿ÖFGGsEÑQSÊ—Ê9Ån·seàæ*ÐüðOʹ 8¨!zÝê|n·/ÛC™Ç?©•ã±ÇÆ+ˬ§žŒÛæ¨)Á÷{¿ ­îÈv`¯GÀZË/ÔŽî”tE¦-Nìð”ˆxN!Z|æ"üðÿíÏþðÈUàFK1zLYÐé"ÕçïüPÄò7ÎËpÃlШuQeò?Y8ùTM`”ëHƒ e™‡>¸CV¦ƒ‚´ujpîdDDD ÏŽ;P[[«þ™™‰Õ«WÏ~aÏÜõÅ—qÊýw`Mëßñ¯·ÿÞ’3r° æ‹2!6Q«>‹k6ÄAíï܇ûß토–a%ô–½š¨Ó±:Ñ_¨Ü+ðƒ« Í¯CDD4ëàÅѾF`³ðC bôè“Pm?NmÄxeWÑ8¨U§m­ÜX0ŠÂÏD…X®‹w¤J'¬ÃÆ/tÇkGœ-wCú-xÏù8ö5½‰+Ö޳ɈˆZ ”¶Ö×\s qÊ)§¨=õÔSX²d ~ò“Ÿ¨WžVžO£–r¼í5Úø¯øã×"ñׯV"îì/`Ó¾_㶸zC¼}è‰= W\é_Ö‹:O)<Ù—âò•ï%hÑ1$!ÉÊ2Çb8¿ð|C´ðÊÁ™}Æì¹\½nt•¿ªÜ…ÞC;ÕùíY%ȹø6 ~½Ë‚o¯BaŒ{Òë)!þÑbæ¢nÊsÐü8á~äðŽÑXxûíèMhÄ£ïÿ;>·á?n‰`„ˆˆhøÑ~„¬¬,üüç?O+V •·ß~»yúé§gXz{ž¸o4vaOó!4Üõ{´gºÑ»ãoøí#ÅÐH"¼ï?Œ»ß؇ÁÔ‹•"&úþù ü¤ìT\³Ò<ö.4êKPb­CuµÿuE´¾ù(Z®ø+~|š‰ˆhi’3üÁ¥CS·¤EµíL5øQñÜÏqàÉ;•™ÆçoÛµm»_BÁ–;‘wÙíxä ?Z;ëX J=tíÚµÓÖG•ŒF:¼÷ß_í˜zÕªUSž{÷ÝwaµZC>·  ¢²#ŠÊ¤·>RZžßù[\³ñµ9 ¼”Bbuu5žxâ‰Imª•¿•€Èù矯Î3}s Н¾ ÅžRü®ü%¬¿íX¹çxqõeø—"ñ×w!qó—p]T/¾ñ±o !ÌŽ%kÏÇÅçGBðvaûƒÿ?íIþ~–”=†×¤Ëqý)¨îy/øc ÑÉjR§£¾4YW©‹P3?‚ƒ «ÏEçoR3A^m0àòlÏxó™mÛ¶wº~˜ÿÙÏ~vØy~øÃÎÉ{áÑGUÿ t(ÁŠŠ \wÝuÇüûÎK¤ ü‹80ø@ÈçÚ[ ­Îìpµ$ ß\‡Êæ=XšV2©°DDDD'—ºº:,[¶,äõ\yLi£ô 2›þ@$WÞ~ìèrÌ@ùßñûÿÓâ@c,øö÷ÕB—¡”%D]ø_ø \hßýw<øÛ?a{Ìüà?–¢á×7ã'{ãpùíC‚97ÿßå&""ZÀ€HŸ)C½¯4{ÁLMOäç”ybò7¡´Ó€K³\ãMir“•™³ ÌVdd$®¿þúIAÀà‡’²  ñ¦5pˆ=84üÔNÇXÓÐ\1„Ää hu:H\vì0¾ˆÜäb@ˆˆˆu©veÏÿO¼·¥=±¸õâó±ÄQ‡ï}[€ u@ÚÙŽèó.ÀýE0ǦC;¾Ü «:`Í˶þ¾{ ç]|3~ÿx ª~õ߸_óC|iMXÊ "š?ïÄõ˜¾¾¿ÏÙÌÓáÐN ~øÿf× Ÿ^`DÉíïï?nÁż5‰1,‡Y‡ý÷*»ÒÄã9Ê¿"zë:— >çê7c(¡yÎÚ„ÑüÈÈÈÀ}÷Ý7žRHylÿþý¸à‚ ¦ÁŠð„B\}û©ˆ¹ã5DEh0XS¯þ Oö·\}.„í໠ᦇ~‡+|#ÂÑ\…êúxcëGèŒ,Æ©k0Zÿ.þú«OàEõ¿mßû=~tfƒ DD¤ lR³aÃßeh†àÇ\ô2ÛŒ‹å˗㢋.:)׫ÉÍÍÅ'Ÿ|‚Í›7·à‡Bw¬v”ézŶo#ÊPˆ×þIÏÙRÎò‘ñ€‡’"I" DD‹  1Û뜔¦-j‡§¡:AMLLø@ Æßȧ­Î\õ·q"Sš½(Mbo¾ùf<ûì³0ǼóÓ‰RÄ<éuD§s7"t™Óì¹òÿ×ÑÂðøã«…È«¯¾?þñÕé¼óÎáC‡ššŠ;wù‹jã°æ Þ¸ý»ø»ùRܰ.& #À¾´Ö=[Qf_µ9 ˆ45ŽÂ5ü<îø¯]°gF2ûƒˆh> u z„šüAˆà)xÿ­ÍQ«¾¼:ÔíLù9uÙ²(Ç”÷¥¹ ~(}~\{íµHJJR›Ã|ôÑGصk×qyÿãÚƬM„ÐçGÕÐSÓFO™¯¯0˜LðJ¾yu·¼Ãi¸Ó-:ÿýßÿ­¦ +¿).¼ðB5󣡡7Ýt~õ«_¡¤¤d|™À_ÕÄÞjìØû*FØXÿ*~ûç—°ïPtK/ÄÏ|æíà·^…6c®¼ã?qUzþüÕïãÍÜoã·‰¤¡R¼ôìÇh×½>güëýH~úGøÞ7ƒÈG¿‡Õ&n#"¢ù €søR¾à‡rýHÚ‹~û*µsSe¨Û#ÁÈó+Ï)óD½8;Õ!/¯›’}²ë¤sÙÑéL”@‡?øa±XÔÇûQF}UFŠYtóùȲ\6©ã»Õ)PWÐY!À Ñ+*?ÚÀ1 ‹>Jýµˆˆˆˆ%àÜÜ%--M ~|ï{ßÃC=¤f„–ÔÔfw v0ˆõßø–§H0_™Ïå/A´q¬`zémøõeœýýðZ墎n .øÏq}r,ÔF.ú´6&â†[Ï€¯ø†œÏþþ´¡á ~ÍcüׇØÌ$8è0› „RoïNA¾nè%/2º^EyÂUÈ»ìvu¨[e´‡§J³%óC ~(®ÎîC˜^˜”Y²qãÆñ÷ŸŽÒ§ÅÉæx6¹ÉÉÉQû.ñ?üüAãá¸@ü:]Ó§¶öÖ˜a‹Pw~egÕ¼0'buæM €-Jæ‡yê©§ðï|gj»qûÜòý ¾¿ådz—ÅBé@]'Ò”•E 6ùoeâ“c'ÞÀ²_¼s]pq1É \ùDDó™á©Ùeaø®Ò”æ0vW3ò[ŸBmÌ9j ÃìdÓ{pMv?–Ú½rÝS?)²mÛ¶IÍlèÈÅÄÄLûœYP–Ñ÷‘v†]®y†ëb1Sã¢|+Jê$zåÉÂÇGFœ5§¼Ü—·Ê…ZÒÉA£LJ)÷È_‹æ9‡ˆh¾Ê<ÍƺˆˆhÞåÀÂMK}#º(£½ŽÉëኣi+Ê9‡ˆh>Ê<Í/f€Ѽ³z{±zàE®ˆE.°ÙK`_ õÞµhµoT‡ºUF{™¶Að ‡+KüéƒÛ'õý8¤!Ë‹3@ˆˆˆè„8ô`ÒÀNÝýjç¦ÊP·!Û°È)Ï)ó(ó*ËpøB""" Ä """:¡( g¥Ê¤ƒé]¯¢"q ò.»]êVíÅßá©ÒìEÉüP‚Jnˆ2¯²Œ hCgHDDD‹Ó¬ ‡ƒkŠˆˆˆŽ©ÀÑZüÍ`üMaÂ5Èt=пċÔ@‡2Ó»úÜú¢4"4fóxßÁý¢‰ˆèøßC>üçü`‹E=oûÏÙÁžÇéÓb""":!ø›¾(”‚¯R(ö€ýàEÚÐ.Hƒ;±+âûêcEíOªóùÊëøÊßþ×ð¿-N €Ñ %¸Gàó¿gz„ñ…"""b„ˆˆˆNÁÀûà¬N7þ¼?$xò¿-^ €Ñ %TH¨ ˆŸ?ûÃÿ\`€„Á""šC;ÊÂÖ£WÏ•1 vo; G·Á*öÓ÷ÑpUщ&8pÜ´%0$ð±Àæ2 ~Ñ|aðãÈ(ëJYgÇ3@ˆˆˆè„ÜÆ/0øáŸo¦Ñˆˆˆæ£B¯xæWÆ,\ñ¸ë¸Œ!""¢–?€áoò* jHD>ˆˆˆ( DDDt›)£#8ãƒÁ""" …}€Ñ‚Ç-xóÞÆå:F€ª^ apù0i@Žˆ3-7}:óšÒïv´/ÖH8Ð J4ߤü} Ï÷œ22ïL¤‘ ¼ñn-ÜðÂ1ЋÞî´6ÔààÞíxïŸÿÀS>†w›ÄIˈ]èq>âFÃ'ï¡r@šþ}œØÿÚÃxôÝvˆ“oÃ'o|‚6O¨ÏV‰wÿY†^‰;Ñ|˜· % ñI3P=(Á¥¼àŒ@é¾L+HPFµÛ×-aÄ%`M2iœæ=í(¯¶à´ÓRÑUº/W[‘‘êÀ¾]ذe-2L#H‰ ìÍ‹–ÄÍŸÁ¿Ü²vå)±»^Ùè¼MÈ zy±k7^xîm”6:»ü4œ³>ûÿöS¼Ö›ˆè0 ш„e§£P«CÐ5è‚f¬6Çþ×±µ,Å ?‚2´_˜ QöEKDDDDD´(HØù»/âûû®À<í/¼ŽgÞ»÷)àš[qš\9•¼ÒÎØ‚SSýM!$t>z#¾Ðûïxö›9˜©„·ü|éŽ÷ž›©µ£›‰{>Ÿ=¾ŒXw¶ü?3þðȈWëÁN ¶âí}dþ/îˆxí•  L—zQ7pîzàóÈ:‰[gÌKÍ[iöRÖTöKpÊ+Õ#†Ø'”˜ÆX4D TÉóšõV'MÓFÐ@+O‚ü•’r’1ün72>» í¥HÖ–ãÉ]‘¸ic`ôA‹”snÁ9÷Þ‡­eËpý2“¼MkP«ËÂëÔÞã¥Þ*ìל†ïÞY³ú´»F4È»øf\œ:9‘ÆÛ^Šw¶µyFi57"nE¶¿ýÖä×”$D,=ç,³ýÕ-BJ¾u/~úøkèê6"ïœKQàþ;ï+ÂéW]ŒÍ&µ,ׇ]ð" ¨{?ýõh©;ˆzçÏq[M8´ñgá[—Táë_x ¶ÜXhÍ8öE¼ò—ÏÁ6Ú†C£+p÷ϾüæB|³c.—zÍØÐòPFL“o=n¸äz±®õa|á{îºÿW¸á%ù×ü¿® º^Æ·®*‡ó$_õóév·KÕÊ›5 øa–?[ôMÜ’’¯!/Ó&!-R@JD`a•omÅÞ¶4×ëðôß»‘»" %ñïã•w iÅÛÿèFÊÆ+1T×}j "ÛÞÁc¯•£µ¦Ú%9ˆÝõþ¼++SKÑâÒേÿo_š=1(¹àF\X`ömóú÷ðÄCûàìhýâï"WÐÈ_À ·[3¶‘= i§à³i¾ûŽÊ§ð¿›qÍÅ`ˆ“hVXŒìƒ–ˆˆˆˆˆh1ÙþË/á…ÿ…n z?zÙÖ±æe¼UÏçÏŸ ¯ÁIrm2ñt|aK "’7ã«?Ü€þ|ßéÿ:~t]%n¿¡Ýè!-ÿ2î»ïr˜êîÆ–y²×O)½ýAì5¾Þ‡«P}@‹;¿»Q¾†ƃN‚>¼«Ý_Ç—oþ3âÕ9½èo³à³wÿ—F.Œu?/ª.@éz#8ñcE4ÔHÔ¾n`Èß7ÇXäI™×%ø–ÌÈýÌUÈ|ÝO[påùI¨«ï1 úŸ{ }ò‚º¨U¸Äâ†Ó©Q›ÙhROÇ ·áÍßþ †-7b“²qÅv¼öËg d7\—‡îWïÂ_õ[Ôà‡?øeÊ97\¿MÏý︕ղןÁPXìu }E â—]€‹VØÕe¤ár<ûØÇ@R >|yëøG;âPúño—¦q"""""¢EdÕµã¯7 Šû .+¾ßY׎g¾ö®ùñ/ðÃýøÒÿqÞO¾€|÷úÄÆ‡C4j‹¨¨Ó„@jÀ®÷?€Ô0 )¹7ÿôB ÂŽ¨0bÃý¸æÿ…á'¿½J/Rûv¹®„N$8:}åÓøý%aòÝN;6d àÙçš{Ýp¾Ý¢Õ]x{[λü Äö!"¶àÃÇBµà€+:©Åg!¿²b6z:†[1é¼ýͨªÔ¢Sé95K~@cÃòó®ÆÑ;qs.üÜùH‹hH#5ØzÏß°×aFÑúsq^ÚD¨Ã½¯÷÷ñÀ'"""""ZltÉ—àŸßŒ†gïÅËöÏcéÓßÄCIßÄ¿Õ<Œ6| ?¿êN|óúïá¬[>‡ 6­Dj¸R—Ñß3€ðäÈÙýˆ.:0ÔßÉ©¤xpð×á{îŸá·¯„~ƽhúà üuH®œcŸ´zQ<Ëï•––§Ó‰[o½÷Þ{ïxD ~<û쳸ûî»ç}ÝÏKBÿ¨ÿ/)h’w€\pn°:6¨¿ z1i‡Þ} >ô6š ÉÈp¿…»ÿð ª,i«+Gcg5öD!¦ï<ú‡ûñZ£˜¢ŠÓ®»7œ…®á4œ}îùXc¯ÆÞæZlLAAÆäÎF$×z{{1àðª;†Ç«…vJ$-âáÿýª—ߌÏ.õ¢vÛëxýõ‰é}yÜ-JZÓ>Úq{~¼wÔ]ßÞ±]o>‡½Îý)úå%0—½‹½ãC‰ºQ_çDJjج^_ˆÈÅi^€ÓsÂÕ~2—~á_°të¯ðdóáj¢¢SššŠÔ”$ØM³ï­Òb±àü#t:œü(,,œ÷õ>/ þ®W$iâ¾45Ž0§˜/TæKlÎÛ’€lµ"cíµøFä“x u3.<³ƒuuò†?£Î:XWçø;,0à²"ÑøbF,ݘŒ×üyWã³üpB“TŒuër¡Y³’ØŠ—^µ#ÉCò ¯¶Öó¿kWG¡òQ#bÓWaU@G©žòfÔxyÐ-FbçØ} ®¼8_üþööz¬ÔëáÚ{/þ}ûœÒð$†®ønHûÅÝSåé(Ο}^t×k ÿy¾þù—ðpi<ù’úœ:ù節k N=Õצþ¿úZoaäk_û.»ì2¸Ýî&ø1o£€NIšëPòˆªû=ÒD˜ñ`ˆ2 npJƒø¥Ë! ¾ï»g4 ‘Ð_ù^õŽ ±»¼*À]? óꀡ¯æ4|&(ƒC›Šð¡`ÏKƒ!àw÷Á¥¦Ì-\5¡,j6+3¹_A„S®Â•cÁàÅ`[=êʼnˆ·k’=Ñ"  õåw ]÷l\þ6¾su6< ÍKLÙùè¿ãÿPÿ­¼tÛOQôôbS„\ŸÝ¿ïÄmÆä¿‘Pbë?ñ›;ZÒ6ˆgÈ÷EY7Þ…;•woÔÏ Š¢:âªRßVc%jPĽ¾ ßxM©(;QWî«Ûyä?ø¾úÕ¯ž0Áy €dD=Ý<ºÉ).à£6 ¥À`ˆª•·Nú¬ZØrOŹgv£·ª§œ{F‡+±üy?üºâ/!Rð÷3¢´¦©ÂÖû_…æÜó!¼ö Þˆú"ÎL7A†QQ1Š%çF©Ù*bß^<ýt3Jn¾–3‚h´$mÆ™…«Úµãv4ó°'"""""Zt¼Õøû Öþ)„Áœâƾþ}õ˜Vû6ÚPùsøÛ®•PÞŒjÅÉ#Û wD_ð#ß¬ËÆ†ˆˆh!ówÌø·ÿ¾(N¤‰¾{«¯ð×yïxaM)Öø§ÀûDDÄóúñôJÄÍêí3׎Ûú z(M\”iÄ%âåZövêÑ1â[wqf +bÝ8?Ó³A­V«NÊz÷OÁëþXºâq_Çšç üåS¿ÆW¾ò•l(Í.|“{lòL’n¾v%¡4¬Ív¶hàÒJðh$ßÀ¼ÊÁ :Q£6{)I “ü """""" Qû;‡ÊÂÐ혜ºÑ8(È“µèqS¡ËbÇ›c¨€j¡ýˆ ›Ï7W«3¤EUí@C€þ¡‰ç”ÇsâÄ…wj"""""""¿àlšààÇ];Íês]åï£êw¡÷ÐNõ¾=«9ßäoRç¹­dd<âz(! -2ïa%°‘bW&¦§©àìa§•YÔç*žû9ÿh/ÊëŽúâ ÿ{, €Ä‚ûQÁA %8â8ÌmàØì…}€Ñ #0øx?0 œÕ¡ÓéÆŸ×ÎÐ÷û!""""""¢F¨ PA?ö‡ÿ¹À 3@ˆˆˆˆˆˆˆè„ñg€ø)Í_Ù!þ¿ý¯x»Ð0BDDDDDD´7‡ñ †øç ÎYèÁ DDDDDDD „?€áoò* ð^n!c„ˆˆˆˆˆˆh™)£#8ãc1?îDDDDDDD´Ð1BDDDDDDóbºì¢c"""""""Zð!"""""¢cêÓt¸¹;é¤c‹""":i Ð,ÜçñÙŒFÂó<Í•5 ŒäìEk‡¶ä˜ÇB;’C~lȈÄ3Žê°‡ÑÕæBx¢Æ9=þ$8z[Ñ1è Ú2ሟë÷R¾Cs7\áñH´Ö‡„Ñîft:-ˆ“ßÓ4Ý{z‡ÐÑîDDbôôóLÞ èkmÇ@ÐWƒ>RÞzzDLJs("""¿‰¢RÒåš ¢“íôåÛ£^Ïß—gC hø‡hõߟi^¢¹²€êžúv?‹_ÄšÏç¦i}uþæ÷ñä®,|ýªBèæå]5øçÓMXÿ 1Ý1(va÷ÖR„Ÿ³ÙÆÙî¡ÆýØ[; qìgGª„M¸õ–s‘¿Ãë?‹C‰çàkŸß»ÿµÅV|øÄ_ðáh1®ÿöEÈÔNóIõØöZ;VÜø¤Ï*2Œ†}Ÿ bPÄh{5Z4©Xk„&²ŸYÑ^Òá³7oœøDD´˜j ­ß*Ãr,O+ŽˆmØ»mKÖg#¹ü8< —8Í¡&WÞŒV+Œ‡—äÂ`¿a‘ò1î?”å ï@ý´Ys‘c«ôJénF÷Hp T€>"ñ‘úñʱZ&´ -ÁzøöþÒ(ºšúaLL@¸nreÓÙR†²áX${1"Ä#26&è¡×‹è¯Þ‡ºˆ"¬ËŽ€àvÀ©1Éeó¯ïnEé^2J2.x120€¾ÆôÅaiœ?#[DWùǨè§”¥sÖ,Eܼ֨$ŒövÂm‰E„aÊÔžVìÝ9‚¬µK`‘_b'ìDªº~B?ÔuØŒ];]È߈AíÃ"` ;‚óö¬¶‹ÿ ºQ¾½±k—"Z3ý¾¬·¡8POY±rE" s\½‘<ýh®mBCƒðøt¤'†O$ÈõµŽúz´ ¸ •÷ƒ´Lùzª›þxúQÝ" )?e|{‰Žn45´¢wÄ+¯ HO‡EËÈÑm´JTIy8Í0žx®­g¥"Ùç<ˆWž)‡&h©@þ•×ãÔ˜6¼ýחгñR¶6GàŒë.ÆRëª^}otÅ!Ó>ŒÚh°îêÏb¥%`çëü¼bÆ57®C¤¼Q=•/âÞª œn¨Fëh/ú·oƒvå™X—æAµüZoö$!'Þ…Æ—GPpÙ¬‰›.Åb•¯½‚¶Â+ðù$½šAQbùÝ'xü¥>$¹ëѳ—\h@C¨ÏêÕ&ayn%Þ/mæ3“ä‹‚õû›‘¸,moõ}Á^ì}ö)l÷¦ +V‡¾êà*¹W4â¹|Y0iò:xxk/RÌ.¸­ôÖõ ãÒ›°9UD'ÀŸm€×jFou+R.»g¦¸BgIYçÈ—Ó÷£¦)§¯× ¢Þ Óà!4EŸ‡ÏŸŸ-_”B¯³i×9÷ R_í>ÔöIð  _»»‘Þ‡–îôô9áÞ?¥ÊcOÏG²¥5{Û‘¸~¢µþ‚šΡޯ>QhÖ!QVV›s!¢‡‘-=ò¶3‘œ¤Û¦&\{!–˜€‘²§qï›ûP´©ûÄ"ÜpÁFØ5ÖÕ@WÞùëÞÁËM¹¸ö–S#?>´çq<ðFò.9ÜÑlÊs7¢³æÄ{>VÊ{„ûÐëx¹%×Þ|ŠšÍáÎx÷¿U†‚-Ëa¦~‡áòWðZçr\ua’ºaܵo…\~éYòy¢±ú뿀ϧà©} …úÌWÁ<å}Ä-+„ችh8= ÞCØß‘Ž’õz´_»F!¥ŸkK2ÕÏ).3áÁ—*0P`ž|¬´!þk7`u¤Ç¾'pi3NO͘õA(v #nË X ï| ìkÂ&wYÈü{€Ìk.EŽÑ…òg~‡W›/ÃW.ˆÑyOý±õçd#«á­#XçDDtüi`Ë,ÆJi5ÈWžŒX•¤ba+Ã[M£°¦ /Ò—- ûzaìGCe-ºE½\Xv¿biËŠ’-A—U†{:ÐÑ3·\HL‡Á0µj2ÚRŽòN æðDD"yí*ØG• H#âlzvGBtDµ[â²—!.dq}UÛˆM±L>®4fÄ/]kït_Y5\®ˆet9`‰ ¨ 0Ǥ"m¶åˆÞ€™%7ÚêP]Ý)c V¥FkúQ³c7½ˆÑÖa÷ûýpêbµr’Ãu³8_葱E^ZíxT¢Ç¯ºŽ#BÉHóEƒ )™aòù/7º+ö Ñ‘:7gj¹N!JÂøú9ºfÜíèô@û1*×5Úš›`PWòµ`Ä5„ΖfŒ(oå[¢·î Í9H’ ð‚ÆŽŒ,ùA¥©‘8;kÑä‰F´E«|2è#ÓQ¼6ÕГ‡Ø Zµ²~¡ÓÍPG µ]ŽìûÍvØ HélƒÓ–»ú™EŒ C§\¯„ÉAº–ÒˆÍBœÞ§S ò5£¼#k6-…ý(çõtÉëÓ”‰S#å÷•³‚4´o¯C_Jlýu¨C&ÖfÅú‚jY+±.Iò}>iÍåõ“ ª¦zxÐS] OÚDh™8ºt6d•¬„Õâˬ1¦% f§¼ á躨XÔù„ZY!W¦W»ÐÙ¥El‚lÇæ¤DõimbÒÆzí “+èQ¯¶ +¶ù®§ñ§û!35IX!ŸQûäJô,…CšÑÄ/AæX®š>ÌϨ¯“Ù@„˜LdŒ-o´Z ÊGs÷tßY ƒ&*±ßnk±†!:*ê]½­Nï‘­s""šÇK÷HÚ¼¬<ˆöèBÄ%ô¶´É"º»†!EZ}ó9]rý(‚£ t–S„•vD¿ÿzR[…öøbõú)@¾–4BmC7D{ ÒånÂþ½^”¬N êÄ[¾f&be‚ #ƒ}èìoFéûïÃdAZ¶‰hyäJkGx&Ö„^ôVîDµ˜ŽÂÜxXìÇœ`„=V+—q›€„DŽÖc_y;œR`…Ó;¹R+X‘Z´‰‡é©_é@ëH$’b&àíEK[šÚå2g22J6!Ú¬Ô"±dÝéHlFÅÁ&˜RW`eº ®C;°£- ˳£Cg^È•üƲƒˆHËFJ„^®d>çD{Õ~4 …ª=;1ÐkDÞé«‘¢¼°ÆK„1d%ÛѺ-BJ–Ɔø 5‹£Õ…ü$³Òá ª*•—…¹0=ÔtuÞT¤GL¬OI‚ ÑL[áWbÁÍ%Wªö7B—Y„,»njIž_£Œø¢®UùoI.¿+a<*0¶$ ,±IH‰ þŒ#z†šà4OP z;rVا^úaW™Ù §6_™i»LùÊN´•ïÃ@\.2cL“ë;G² ÕõÔ‚½ûœÈ)É€ÁÛÒZ ÖæÊu5i ò~S² 1c«OòÈ•@OLŠS-cïëEwYbs—ÀvÔIîFû`ŒÈ ¦D¢}ògêë‡6†¶²OÐ:à€K>2—"50ð3–ãé©B•+ +cu¨œTi4"Ü"ï£ýq ¯µaò>>Ou³‘†ªP9`†µj;>VˆÀHe9:6'"¾´8)0Ü&ïݺ°,œsë·±®µM ¨xï1”ö\+äQéÌhâèó«ÑBt+ [þ×ô¸Ýð4_z®<+9à Q¢˜Á_`¥/¿‰ÁÕ×àòxía—GßG€ÁÃøl¡>³á11P~Ó[ƒbkòŽ[Pƒ÷ìÅ^qÙgÆÊ¯?»>ÂÏ4 ð³—àŒd ´}Ûðð£S¿ŸV7ÑVóSìÀ‚N°¼0ówî|{l½®!D$u–뜈ˆæ‘ˆþÆè¢íÇ*+»•ëFÀ6;ºГQ€hå—8¹d¥ÑŒ ö@;lK—#Yɹ•¯ë?ÒE™‡18*!1B£\\ ×G ½d)âÆ†„ä«xì¡ tyR‘xI”Q·»-n,ÖHØóäB]ÌKó‘ƨ9ÑÜE?zQUíDêÊè€Ê‡öœ•È>´ëÌX•>©YL_ínJÁªdùOÇŠ5é“*®5WÁ²º ³.ã)•áZìÙÓ SÞj$Mª¿¶£ºR‹¤Ä4¬Ø9m“9È•ÑÆûQÑ< S|<"ä×;0h„^0@;´-AÉŠX‚—,HJ³¢yÿ6´',ÊLûDf‹`BâÒÕH u¦ì=ˆm QˆÎ^“FÐÞÐsrÂuœ°«> «S§¾÷X0Ã5:„!ïXæœ×‰‘¡!˜•‘ <Ža y\?dʯépBgýû¼§¯;ªXQ’6¹„{}==ÐÅ{!Ù3b”~Zâ!¿²W‹ÎÆ~Ä&&úúñˆhk1"9!A ÜôWR a0h|™€“-Òºû̈Î9܆1ܲ»ª½È,YºïŽ™¶Ë”yˆËHÂ`Ù'ØÖžƒâ¥ 㣎é6 H·lGmw–Å-A–ò=•¯Ö߆![ òÆ/†Z[àN)Fq¬i|}zûkP=šŠ¢Ãd)JòeVT;˜ hµ¢Ú)¬ÇãÆH[¤â•X¡…§»ï®Bø¦|Ø4áH-Zá~ ªÒ!ãqrµ'ôñçÂà£nù=Nx$˼4YÕB ÃU•ð¬¼_|±oºül¸+PÞé G‰-58¤v˜$a¨¦ý)°Õ¾ç>ê‚9i –­=lHÆ@W?"23a¨«D“ËwàôVÕÀ‘±ñkJ°FÀ2Ð…å¤! ¼¼y,¢ƒNëO¾U•ªD»W£F8]õoáé·já úü}{¶â­Ñ5¸x}\@ e¶Ëk`ù™óQ›‹\yÊŒ :8Xó—#±öu¼=š‹eAg±»]ÑòãIJ‡s^t,G«Žù¶¦ýÎÎYîγ[gDD4¯Wng jzlH‹Õ!,¹yÑÚ+ê dd R‰´$'ªõ¥yË×ùúrôÈ×¥äñÒ¦Gþo¢åp`2c…d"SƃþŠ–N)̉AW2!«6bCIr2iGZ¦E. 7`Xäv"š£åeH*@jp`QÐþ¤DíKc¼Aˆg¥Ÿ Â™ŽUE‰™ÐáÀ dÑÔ{úÏÐ{h7¶•"aÕ,Kœ\6Œ È_±™ 3?Ô¢¦öô¥(\^Œ’âeHÖ;aJÉAJ\ ÖnDQŒGèvІ'aÙº•H’+Šý®Y”ªÅ!ÔW!);nj%Q®Œ[õ](ý¤ u5»±½F‹¼U9°O×1¥¼žã–®Çš%‘¾Ü s*Š7¬@Šº5°e¯Åúü˜‰³ªäFOˆÈȩͽƒõØSÚ‹øÜä)}@–t¬=ëL¬J6ÎP1— y=ãÍxÄþ>¸Â#§|ÇØ‚5ÈŽ ¨çw¹Ý~)ˆ¡í„’5ÑTº »Z,(\_ŒËôõH¶‹ÆƒìÕk‘6ˆ~ÇÑlC¹þ–·1rÍOcElœÉæÚÄ¥E¬;-ÂSó‘üm(;8‚Ôe©³ßÿSÿ2™ÃàuL:^œÌòÁg0ÈD¤Eè|Í¢R¯íCߤu%aàÐ~4‹: 5T£ªºI~~­Õuèï°Fé\5Kr–bÅê˜ËÑ8*ÍË)éäÏ‘FPUá@æY;‹.…¹n¼RÞ…SR XRCÏ=†Ý‚}C18kK>l&v<ûîG´Õ‹þ!3N¿$ †¸t\´ìI¼ð§‡îB?rpñÙ0¢tb71çc]öv¼ðÀCˆ Ó!!5Öe»Æ"'Ç¿?ù8Z Öá‚M§ã’§ñüý–O †]QXwqŒ“Â8°³ƒ]Íxè×l™\øµsB.oï­clwJ[òµô±‰°5v£ßãë‹KíF¯7K”ýM¾ž÷ B´Ø–\„U1cûФGÃ(£l°ègënììNÁšÂXu{H\¢‘ó4F… øÂi‚z$MLú±IÙ7÷ÜsOõÉöÂ1,WæÍ¦‰fJÊc#^=,JÁ'ps cØc€Å¬Ÿöäëh²EŠ}Ãytf˜¾vƒ¢{£^#Ì&í§*HÍvùÃæ#zWõ{x ˜ça(ÀãµÎˆˆèxWˆœèk„!!šúí8 /B†·HLA”¶{?FöšL˜ä’[ÐAëiÂÎw:‘|z”ÑÛ½£Ê¨0»Q;Ö‡Õ—,nú#ìFíX™28"±Û÷á£öDl\?©Ð,v–b{o:ÖåFLºVH7¼Z=t¼€}ú²œ£uûËÐlÈAɲD˜§‰It ¿­ õu-¶¦£ ? ¶*óžCØY:‚̵…ˆ›¦vë•+\oW{Ža¸­)ÈÎÍ@¼ešß}•a°·BÄšâ±~øê J3wÁw.GÐ^¾•ÎT/OE¸VDwÙÇèL^|àè¬Àž}°#7&à{w#v|<мSrCá:åã¸ÐTVŠFcÖäǦ/Á)Ÿß>nˆRG嘋:±äìBùÎ –FéÔ EËÎ7q`À£-E…é3nŸ·Jó}ww>©1¡¨$ æ±@Ë[±·ª·Ÿéºo"ˆ­TV]8¸«È[ƒ‚ƒÚ—ˆx†»ÐÒÔŒæ¶~hb2‘— Ûa†Á9¢í"vbß{­Hýñ$ö¢üƒ]豦!«hÂõ36nÞ‡=u2‹—MüPËÑéÈEdR"l¦ÃT±„p$§i±ÿ“m¨üG’ÒdN+×·ó£•0ÔP…6sÖ/µAzëÑØ§ŒX㫘bó±vM;š?mû9ùœ(W4÷T "<³kS#fq`Œ/¦X¥sÑ9Ùrp ÉÝ̕Ȋò¿»q9Er¥ÞŽÄhÓUXEŒvT`O¥é+sÕJ¿4íоnô7U¢¼a1KKc˜Ò´® H±(ذ‘†ùŒ\á6‡ÐTºõB:V§„%ÔÝ׈ʊ:ôRQ¸&l´˜9¿0ÔPˆõ ^x¼tz]@€I@Xâ2l”Ÿs{$õ¹ñO ‰AÑYç…:±lstÀ} ’–­G¢è†Ë#סÕןÇbÈâÉ!""¢¨Š$ìZÐ¥MDbøX‘Zr ¯Ç‹Ý"F&ÿj¥Ü*•×`z½Qˆ‰ÐâÝø¯ªÏÑqÏø/…š±Q ”[ÉÝ…òUrVci\è6颣Í hï‚Óã…hÍšÉ01ûƒè¨ŽoIšÝЩS:¹œi^úyïÅPÄpg †ô±ˆµg ˆÃèìôÀyØæ’×7 0hà˜™ :ÐÛÔol2¢ “3¦f€®þ8Íш4j&2B„£“›Ü?Ù0„ˆˆˆNPô¶äɽæ &Ø¢ý7ŒÂ&*HÂãôSa¨‚›z«ÁÒ 1ã¼P4&;RsíHå!šÓã{¶u§#©d©™a'Ä÷S†hMeV³Z?Ëï§åq!’ÆOìFØRR&îϸ `ˆT†Æ_cN*æG°]ÔkS¼élCaÚ‘vÆç0ÚÃÎ çøè%"""Z¨Õ0©DDDäÃfJÍe ƒˆèä*d6Ù!DŸ DDDDDDD´à1BDDDDDDD  DDDDDDD´à1BDDDDDDD  DDDDDDD´à1BDDDDDDD  DDDDDDD´à1BDDDDDDD  DDDDDDD´àéf3“(Š\SDDDt\HÿŸ½7Žäªò~ÿYû¾ªªT*Uioõ¢nµzïÆ¸½ xÁöx`àc›7ßÃcxÃÄ ÄÄ›7ð&b‚`À³ÀÀ÷´7l7< Øm¼µÝ«{×¾/%•T¥Rí[æË›R©S¥*µzÁ½Ÿ"CY™7o®÷æ¹ÿ<÷\A&ù|ñw9›D¾Œã¸ÅIþ› ‚ z®1]cò!‚ ‚ ‚ ↇ‚ ‚ ‚ ‚ nxH!‚ ‚ ‚ ↇ‚ ‚ ‚ ‚ nxH!‚ ‚ ‚ ↇ‚ ‚ ‚ ‚ nxH!‚ ‚ ‚ ↇ‚ ‚ ‚ ‚ nxH!‚ ‚ ‚ â†ç@xärº»AAAAHܘHv¯üøÇøM_²•ÒãÇq¸7^ú™G:™D"6‹éà0zϾ‹C¯ÿûŸ~/žˆÎ§á£Ãè‹/þ^XŠÈ‰_ãÍa[‚ ‚ ‚ âZFucœF#G^ÅÙˆ€ôä’¶8k\Hw½†g_@ÌÜŸ‰ƒ±yv7™ ÖÐóÜ P8>Ž­¶8z_½y3¬Vâ]ÇQè¸;÷n‡Åj^Pˆ¤úÞÄ;™{ÐâòÓ8÷v'fx 9؃!“Â0'®à`mÚŽ^ =YAq"𜠎®A\vyÊ&‘â 0¨éZÄÕ„ã8‚°lÙÍÈ "€hàßöAøQ@è­'ðÜÜ|o8°§Ý…©“o"¸ë& .¥üeSiäÚY¹™nœÑa]{Æb[K©…A«Df²}ù:¬óéô,¦fS(ä²È¤“H$SHe2k±­Ù.•ÛlhAu›rqoBbLJŒØ¼ÞE ‚¸I!‰wÞ@wŒ›¯ø Fè&à•ßv£0=Œ„É‹ž×~‹^)­CÃ.ìn±À²éa|†-Ë áíßÄŒ´5ÈØ,R¯ÿ q'¥×ÔíÂk£è™]‡{>y| µ+?õö½§Êõè[øå¡iÔÞÿ :,ôPAÄŠHtsúX+œÁ‰˜¶PB!ŒÁi Ú3ƒé”ç¡48`3\\³FHàݬÛÕ€Ôô2ÕkÁ¢˜ê<ƒÁºmh÷–7”8ö%l~V¡P‚#ÔÒô\±lcýQX}hªýÇp&Sf¯ ½z­Z»ü¡S²nC½N ¯€Âhƒ‰›Eˆ[ƒíí&p2aeN¬'RÕ>är<øDc3iù0âÑúcধú᳓» qóRêéQÎó£ì6¹9Œ"œUÂä ÞcZ&¢£èàà]ュҫ™O 80+¶¹Ï§Ò! L##O§­BCƒ º«ð¾½þ΀†]DƒX1†Î¾ÓAjý ë‚!˜œªuؽ®[?Pƒù¶€®&1%æ÷~7[ `â%Ju½Š¾t©ç^€Ñ¤ƒ«ívt(³Hf9èÌ6èÅ}OeÈP(‚ ‚X¥‘–Àè˜õ-@t³#“PÕ¶@WÈ#_4Ö.`´•±¼Bè€Y°¸6f©hݺ½CQdôܲƒdM-@âRà‘íe•Ù;¬àf§,ðÛRÒ °®í|ºt–‡^ãBë†,¦  Ã|.y%*€/,ÖœJÄI( DÇ0UÂ\]‹g³sq¨T:Œfí.X¨:ATBæ_«Ë—ŸÃÀñ³H6 É’Çt÷»8‘ÛŠ-~Ãù7c!‚Þža„æt°0¤Ì>…LgÏb`Ú€õ çÓpJ=lUU˜/Ñ,dEÆø¨¯Ò»öê¯! :0 õ¶‡°Ã.`ø·?Cïúã‡ð¡gq4*`½KL¦° ®}+¼Á7ðÓ£Aìj4EW:J…8)UP«‹®!>–ÆÎ·!ø›Yñÿ.Ø™Žä 2y¨÷‰•²XqôQI#‚ ˆÕ’‰"®÷ ^o‚ZÃØh-Z=9 Nš°¾ÉnÁH.FᓈæÄV¨ïŽÇ0QÁÙuQ™¢Ñub Zw3ÖÖA:A\I HEgÍŠE±oª½0É)@ïðÙIL)T¢­-6@ÌnhE{[añ«P€Ž w"9`'g‘È è.¨¥2ª´úѨŸÀ´² ­6«¸L £NÀL×bµ-X×,V'=V8Ñæ¢Ž0q!dÙ«sz£Ú¼¯Æ æ?e\_‹©#C˜õ­“Ú½,D¸·yìçÆdÍï8Æ»†Q¨Y ¿)ŒÎã£0´¶ ::¶tj.Óü&ÉOyÐ¶Þ åUº.7TÀ IŒœ>…^@$Çtç1™—ޤÀùŠ©”ÐŒPëÔç]`sã8öêILÄíÆ£Hü RzƆx_«kÚ=8zì$Æg2xëå4Î Ø[Þ… Rɤ˜lÐR9#‚ ˆÕ¡ó¡>w£q'l££PÕm†@"¥•º¿H§@fªÝÁ4$¯ÌRQÄ=ÿÿÔ©Ó°ú7 ÎnDíúvâ»ð0’æF4×ê¡X0ú8µ&’®=AüAPÃâñÃ"ÄÐ{ø².ô|£@Ï Ez“Ê5ؾFœ˜ìB4:…[v5úÑj[hŒ…N#­ÇÚæb˜ ÆG`²Ð=4ÖÚEË›“—l*…”X¤³9ž.?A¬B)A8Nº‘i­M‹Â§µÂ‚ID3ìb›8îEo6€Í.zÎÉ6ó,äs(°¬¬ÙQ%¶´gp¦â‘ä0Ù3 ]Ó˜®¢VyC ¼À£Œ#Á Heóȱy‡t¾E…z‘OÆBèÕã–ï„ã¶Û¥å…ÁßâçÃ1ìkcWûpO¾/L‡±çేhª|*ŒÉ ^xDÒª©|AÄ*QÀêÑa88%oB=èÊE‘š‹£»;§†­¶v‹õ:~QøÍšYì¾®.µ,VˆÆà$­pg ~x 23#ˆºv`WCÏ^ÌŸ†}!ˆ+V¶Yqø…ò*Ì7¾xqR(óå3ÂÓ´®`áäüV…T‘DÂ\ÙdÓÓip3œf@i¶‹ ¦b…r9 •}Mæ¥ÆÓ>ò.ûuJi½™Ð½ïbõÂGùQ` b[Y+û8À© RŠå‹õYɇÑÓ“Fm»ñ­»´¨›áok_ü©œ©Yù^'F1˜t£Í~u?DÜ0H!ƒ}×C¸gÞ’ÁXbÃÍè¨fwb‹8EËÚaÖÈ Of _žFý-éFkµ:èì§‚ZQÆ56éw_ÂÁ¨–ü(R°ÊÖÅ1tü TõmØÒh¥HÔA±¢Õ+ÚN&±3¤€oƒgçàjÐ >d‚לBÆî‡KÇ 6ÌÚó†0Ïl@M#SQÔz e»½äâ (õueÖe‘LpÐÕô^'ˆUÃ8¨4j¨y•X6Z ® œ÷ì–•5¶<ìB6€:›ÍbÕÀ§ƒèÉbWG > ±L'Œ°XLP©°4 "qÝ Ë„ÅWƒPq»åwâb„ò×L½Ql2-^ùI>ƒL^‡øîë?ƒ ÁÕh/z…$fsqdû¡ª­ƒK1÷@@rjWÛù¡H¹<+*77áñÔâï™XÑÉ g®° „£Åv^„|0ÃÝŸ@½þ ³è´]cÁLF‘/Ù?yïøÁßæƒ:× óÁATm݈ô'ÐéÞ»wmÏ@&AA¬†B"‰œÒŠÔH/‚Êf–ªÅÿ§z´°nôHý‘å†r¹/…çæ17xç2lóé T4`Ꮏ“‡ªfš´óÛ/1ù9ŒŒñðlbâH‰á âÌim;ê¡'[› V'ðZø6¬Ež} Îg1!b‹Í%l°«´óWrs9DW¯ ^5­Õ gae:áéùYµÞUA•JÔä’z’¢Ù¯tª¡V23ŸG2< Ê ]Gñ}®aác¥õòz½˜¾’бr£ž‹!ËÞ%ëu/ Ç&ÎÙáÒ°!§'0k­ÁæàkÃæªâ½Qan$³ÝƒjþƒC"ƒ`tÀtÁÄÌER°ø W½|ÞXÿaI/Y–Uê¡ÌÄ‹¿Ä±co"Õö>¬«o¦kîýÄ.ÔºÄZ3Y@¹æ­¸-ìënÃÞ=.ÄûÞÄg!lú0ÖhtÐßý)XNý/>ù¶~ô#h¯¢á·‚ ¢²AÆ ©F†2p˜‚8´aÝ;Té°dûê¼kP;ò."Uh±r hAwÉanà]œšv`ã6¯$X’„c9ñý®@~v3 =ªŒªE›R˜8s Ó®6l7λs ™tÙ¬üì2´d_Äj›¹È0!"¾`Uó1d²ÀÌ´bÑ‹Jç Àk™wgž±Hkvº¡Bf.„r!e6ެ`_’{zbáMh¶pH+’Ò(3V¾ÇSv4Ô;á0jHü¸… "+ Û+{~RùÚʯ/óž\&I°®/¬[š¦ëÎáäáC_ž™¼k6‰e’%2ÚÅrUl ˜P„atXa”º»D1pì(ò>€vkgÏŒ!)¾‹ã™"GcTaB`ã:xX L!‹tV í50RÓ €(`n܉½¥Ëo_ÙøÒ¸¨Yø¡®AÇûÅßkka(z€xuàæìç+QM=öÞä†ßÀ/{4ØòÈgÑ`+ Z¸6}Ÿt÷a\I A±²q&¾g9ê7n@.Ëgƒ!3‰þ¡ò*§Ø„2À·®NÒ–s™žŸŸ7è˜aÇqJè]-Øì7C˜8‹ãÁYÄ Fx›Ú±³Zlh}gÞÆÙœ k··¡*=Œ“'‡P¨iÖ¦b4zu õœÁ‰)ªªêþB«?RÓÃÎÛÏ‚ý|¡/6cS¡!¹zT›P8›±Ãn‚U4© ÝÛj¥ g…UÍÐ`Jc¢·£)Z6aÔµc‡a§ÏœBzÝf4Ù©Ä^«ÂG9Ácea{•ø’rÁûP9È|QÓyÖc§›G®ÀA­U•ï)œØp›Sö» mwÞ½ð£¶Õ¬Ðø6 a×-×Ä5QÑcÁÖ¶•Ü_k=ÖYË$ Ü‚ÊÞUh«›Ñ@W“ ‚ VDi­A §Œ1•ÉÎPà50Vµ`s‹£%ZcF'2Ñ£Ø(ZbË–±õJƒfä9kÑ 6¬Lz5”âo… €ÞU6q’,=Æ‹õ;j¡Õ,ù¥4û°~‹nA\4ôUuhªºˆ-´–ňzZO Z•ØŠýÍx ´fn±!ÆjÐà17Ú'ÅØá2,£©±7 c«1š6׺ø!¯Ç/,l/÷dËäbH9AÊ ÜF©‚F‰Þ‹Šj ‚ ‚ Þ[Äâ…§Ô0ÓØàñ ‚A„B!˜Y–G‰(ÆÒòó®¸d0Ä5Ð(19a“/Pèa[ö1RKm ,åoZKÙåÄÕ?V>V#lëf6Ϻk—K]7*ø¤:-~ÜLׂ ‚ ® ¹ÒÁææfÜrË-°ÛíeóÓ‰ËÙº@ €Ý»w#‰àÍ7ßDoooY#°h4“ÁLñÞÖí¥¿/Fخԃêt¬øž»R¼N7Ëõ"„ ‚ ˆ«n0—3Ž- >ô¡ÁëõJ˃Á ^yå¼öÚkEç¬NòÕ]kMÃï÷ãÖ[oÅí·ßŽêêjÜ{x˜˜À¯ýkɈ.5šËÌAÄNü a›¸ „ ‚ ˆ«b$¯$~ø|>Üwß}Ðét˜ššÂ÷¾÷=<ÿüóÈçÏRŸÐÖIÿÂCÄ믿Žo~ó›øèG?Š/|á ’pò'ò'Ø¿¿ô±œË´Ü@&c™ âÊÕóå™2aûž{î‘„j¶8°(l3O†ËåZ¶o»í¶Ea›¥gÂöÜÜÜ’z¼\N÷àâ·¹®ÇÍŸ%›”²I½0±Ak´ßÿþ÷{©(Aq¥rCõ1ñ㡇’ fõ«_E"‘X–WX3•Ü‘^b`3ŒF£$†0–ç³Ï>»D)¦•Ô“oOA\Z½^*~Èëv&b…íýו„m6ëJ(•J<ðÀ’°ÍºÌ¤Óée¶¼N/­Ëo–z½R7£Òu¿÷ü¹ôÿ¶©Ç+¾Kß× =öX³ø/³0如lhœ(‚ ‚ ®š‘,ÿÍ döuĘ̀}â‰'ð¥/}i™ø±hØ-ü•[Ç¥mY,/–'Ë›_jsµÇEA\^C\.l3ñƒ Û÷ß¿$L˽ú*Á––möey°¼Xžò:½Ôã„ ÊAAAï¹q,7VåF+s.ÈßúÖ·¿ –ûšUçvà“Ù‹¶¶¶e†/›gÛ²<Š3Ë»Ò~Éh&‚¸ôú¼\=º’°ÍDêJï‚J ÛWæ>Ýì×…b€AqÕ¯bP<·ƒ¹F³n/rñCÞÏûÁÄ®]»°{Ïûàªrâ§?ý)Nž<)¥‘›X4¾Y^Ì]šåÍöÁ‚è­÷ƒúA\Z¿a»RÃûÓŸþ´4 [ÿâ‹/âôéÓËâ4±:åÁ¼?XG–÷¾}û–åIñ@ˆJAAWÕX.~½Û³g´Œ½ªý°‰åÉòfû`ûZÍ1A—V¿W¶K… &`üó?ÿ³¸šyó}ík_Ãã?Žd2‰G}tq´˜ÒüIØ&.@‚ ‚¸jÆrqb_ð/¿üòbP¼• ØJ£ÉÈÝ®‹_ ¬; Ë›QüZHó‚ ®L]^®Î^°=>>ŽŸüä'ø«¿ú+|ãßÀsÏ=‡ï~÷»ÒÆ#sæŒ4o6›+¬&a›¸V•EÙ%‚ ‚¸Tƒ¸œq,÷Ô`F.ctt´ì¶¥íJó\)à]q]1o¶/¶ŒÙ7lbóòI¾AQ¾^—×Çlbõi±+ ›gJ¿ÿýï/:¿ß/ýŸ››[1˛Šaû*Öç7k½^*]H *¾‹×E~­J¯ÛM'€AA\)!¤Ü—<Öÿ›199¹lÔyZy·•ó.·_–·|_r#þB" Aqqõ½Éd’æGFF–Õ·ÅFv©R\ÖÚÚ*-cÁQWÚG1o¶/ª¿‰Õ@AAWÅ8.þ_ÍHåP ™eÛ¬Öø-î—D‚ ˆ+S——Ö×ra»8D¹|¨rù2y~=ôî¸ã©̉'VÜ? ÛÄÅB}[‚ ‚¸ê$ é? dWjH¯Æp­+D>ƒä÷EA\9V+lWŠéÁ`1š¾ò•¯HóO<ñÄEŸ‚‚ ‚ ®:lHCF±ßwÑe_‹C–„ºÔð]©ßs1ï⾂ ˆ?+ Ûòyy½Í†¶eéŸþy<óÌ3+ŠÚ$l— AA\uŠJ÷îÝ{Å¢ø—Ê,où¾‚ ˆ?å„myÝ,_ÆxüñDZaéëË_ÿõ_¯j$l AA¼ç”Fšïëë“~ßu×]‹# ”›þò/ÿ¿øÅ/¤éî»ï–¶aÿ‹Ë*mÇòdy3ؾJ£ÝAW–rÂv¥é?ø÷cpp=öØÓ“°M\*• ‚ ˆ÷„rAéŠ_ÿ¦¦¦‰DàõzñðÃcß¾}eó°X,ÒB9̺è] –'Ë›íƒíK>ô_¹ÿAÄ¥×ñEa{×®]’øüõ¯…BaÙ6løÚïÿû‹õ: jÊ~ËyàÊîO©T’°M\4$€AqÕf6½ù書÷Þ{ñå/û÷ï/Û§ûïÿþï¥éb`Ã#²<lr#™ ‚¸¼úûr„íÝ»w/µwîܹê}“°M\ Ô† ‚ ˆ?¸\é·|¾§§p»ÝøÎw¾³hÌ^ òd¾ýíoKy²¼Ù>.td0A\~½_¶L„6 ˺°<õÔShjjZq*×õ… {KÂ6q)BAÄU5ÙÄÄöÿW¿úÒé´äÖüµ¯}mñkbéTF>JLéh1lÛ¿û»¿“òby²¼åû"ƒ™ âÒëïJ¿IØ&®eH!‚ â=7šË¢lÙÜÜ^xáIÌøÜç>' Pî«¡Ü–Ï׳n/lÛÏ~ö³R^,O–w¥ý’qLqeêx¶‰k™ë_2˜ÆðpÉ4EŽî/AA\óBH©á:66ЧŸ~©TJ2r_~ùe|ìc“ÞÉ ÈÊ- ,/–öw¿û´-˃å566VÖ0'რâÊÕçåÖ‘°M\K(¹ù§‚[CŠ“rabARU÷Þ{ï_\»Èºßz'úGÑ{ì÷x«gÉHQ-jÝÐ]Î3ÏOãøþw¨o€ƒÂÅAÄeÈóïî8F:GÁÛlÐ?ÅðYÄÃAŒô s(Têî’ÜUWWKbÆ#<¿ß/Â<Ï šæaÐiP[[‹öövɰþÆ7¾|P2”ÇFǰïÙgž™.+´”~-$ƒ™ âòêyù(0r˜PÁ†ªmllDkk«À4‹¡³³s‰è±¤™·«»ÿøÿX*wÓ¦M’°Í†=/ Ûź].l—D½Ùëvù54n“þ7$.’¾ô÷õÆþýû¿+þ+,LüÂ$È&v^‹ˆR6©&-›üñÞkÿtyŒÿîxQõGøŸ·yæ][øRY:e“¡ìÕFÄßzZ:aäÓHÔ0h•’'ItrQÞˆ*E‰p7~ûĸ¹›œ6˜µÔcˆ ‚ .ßã‘;cãNtlñ!×'‚Ì6ªª\pØôPá¼Kt‹ß‚í{„×Sµªý°^m?žý¯ßÁ³»^­b¹÷‡h%ãh-f¨¹øBç‰|[š`Yf÷ È%ãHf2âvsˆFÓÐùšQg×€ä‚XZVÒSýL9аCU¦€ð©iŒ M ’Ä2èA Î£òw<¹Ùat„W Öך¨ÌþêõRoJÝ[Ìf3>ò‘Hâ6ƒÅðøÍo~ƒH^ül\†Ç#>n¿ýv|ðƒ\’þ—¿ü¥$ž°½ü^”»R™ãùÅt\Ÿ—þßú·ó1Y sE8­€ÙS‡:/{7.½fùèzÇ9Ô¬­-óŽ\9]!1…‘‘I̦x¨Å2_'–y“êÊß“G}´Yü—Y˜r SA6 7´_?{?ûÕ,jrC¯Úƒû¶…ñÌo øø§wÂ*^ï|÷~ü[ïfüÅ=Z¼þä¯0ZÕÄ/Ç,¸í;‘>t ©¢‡Þ†²ãNì¬ÓR…IA—Èü×Aùd ªšvìp¤ÆQ.ÏÁÙºëÜ¢‘̾Íð|±‰QŠäðóßöcïF'š:Þ‡–º´˜l)Ïd"!Ãìk`Ϲ“èꄟFJ£B68ˆ®x ×:´zuç¿òaô˜BÍžMp«çßî|.t,ŒÐ´*›5·¤• b(¡ƒÅ¬B:< e@IvA,k…¥0Þ?€áxÖ;¼ê’õ…iœ=Ü 4·¡ÅÄÇ{pôXÛ¶ùa¸œ%dŸBÁ^‹*yFBÃgÇ¡mÛ†z#•Ù?lý.,äK¬®~òÉ'ÑÒÒ‚÷¿ÿý’°ñ™Ï|FšVB¶_] x*=äû¯$~j4ÇÐä,ÒõÐì+ Ôuïæ·c[Àp¾¼ä#èíÆTTkë H™tBf'Àºq#Ö[HOuáĉ<¶m©…ö*Ü¢¾cGadêÿñàs~ øÉåïùÄiœä7âSÞ»BÀΡ³ó.¬»{¦úÞ„ûî¡COˆ ‚ ®€¥%6xNát²[ÛÜPp¢qÌå1;Ú®l2N§…ReCmƒ™ð4R^«hÈ*0|掎E ìÃŒ¡ëÝ tŸ‹ÀÝކꢕ ›N£JA0¹a¶;áõ7A§V@)sF&‰ŒÕ#uqr³éÀŒ AY$¢èì9eÝflò @,u±‰Ál'&kÐfQJ«é± >çå5Þâ†Ñ?&1£iA«£Á鼨À]ÚÜÒQDáÂF¯ F±Ì›Û¡ŸIbÞD@ff=Cb¹‡žÆ5ðÛÔ@bQ5Œ‰1ŒÌò0ZÑâ1@!d03؃¡™´XÄ2_5nùΘè:‹ÑXºÁ^[áÌ ,Ï?Äଆ؂ºlª3/6üòSçpj®›æ½Y„ì4:O‡Qݾæ™ÊëìÊ›ã~…Òùâo&V½Øo6Ï–õööJbÉ¥¹¹>ŸOòaÝñx|QØfi§¦¦–uw‘ïcµ£Òe4‹éŒêð>ñ]«¯•a}“‡1[»^lK)ïA>ÐÇÙqYùŠc¬s¼o=ü’"R!]j1¥-ƒ˜? v9¡LJ.Ú«p¾7¼¢°6c­O³rÁõ´bmöiüðßûÑà÷¢¦~=Ú @ AAWÖXVÁÖ´‚Ó˜›€ÁW-64T°ûÅw±=ƒÁc=з®ƒ‹c®»yÌq (•EƒWlìLL¬0Á‚0Ʀƒ‰ÇDwR?«Pè«à««¦bˆä¼°r?ý¢5ÛÑæ5H†d¤g3P« Hqöì4lk6b‹™ÇБ3P7¬mN¾Õ »£ä v¡¡98ņ”dD QŒ ÅÐìsÒÍ%©ûË4”îvÔ(fÐ'–ó¼·zIƒƒÓ»Q­z‡ßÉÀïuÁYU{•Mê¾.Äúqôl Í;¶Â™lj£'¡Ø±5é0†Ï%àëhÇæ@çÅ„c+ª&OáÌ\-vnu#?| Çjåž[œ®z?¦‚ãp¶4•Àá2ùû²ŒuÍÂÚ´-^ã/•«°˜w_+6ûóè}wšÖØ”bö+¬»¹ëùù+(áQAؼ¼{F(’Ä åW®«K1¿ë=nÅÕ.³©Ù9h--‹å”ÓY`Åf3ìzùpz²t¸Tè.Ù–ÏçQXè]S)gßÏÆÃ8z(ŸƒÃÜtÆæM0_¥[uãµÐhp^þ …,j|>—“æ9]#>øù/ãÞ¿­.Æ_ÿ)žxc<•‚ ‚øXÇjØ«MH±X§œ€CšŠQÉJGj9ÿÛØ@ipÄ×»ø~7¸Pï3@iñ£¹Æ,yxHÛ˜˜šC|jC#ýMX`Làä±3¦Šñ>1m }g‚°­kƒÏ¬’Ì"ûŠËŒ•C±Ô‚Õ ä07ÑÎÓÇq.”yÃÍ!ÎB0[Éûƒ ¤r’ÁTH·K •ËKd3ùÒÖ‡M»nŶ+GçÛpàð b¼€xpBM\Z”ÆÔ9æ0š×Q°Ö Þ¡…Jëe$Óò™,Ôf 4œz«|2%uò—7uTµX7(¡Ñjž,Ÿ?+åy½Í~; jŲúÊÙÚ†ìY¼þV/Tâ|£M5/’¬´î&<äó¥]Q–×çç=9V3­”G¹ý•;6¢¼R`^9Jùs¯‚RÉ£PT ôt§áouc™Kg†c;êmÜÊéIJ­Ð UðÈfRbÙÍ “Í]µ¶öM5¶ g  ¹q„ŊئœCgçý6¤û^Æo'×á#{šÐVÓˆ&mÿÚ?+Þ3TÊ42iqc=‚ ‚¸RÆ2 !£2!<:‚è\ a £É,¢©RãcÈŠF™Ò8ãCÁ ÛE¸€¹Pæ>DN…‘5pR÷˜ùÀ¦¢ÃéÎô˜]ÍðñçY³-5Z‰9;Û¶:è9±±5xù¦h6,ÎByA£ô):tV-³äò³è{· qg|öu›PgÌ ÅÑ–+k1s Ú¬¦øÄM®Lb*žDáÄaŒ‹–t†cb&ç|“CÈ‹¶µ …ÕS'MkÖÇÐóÖÛèŸö£._€R_tŸà$ï¯ÂÂçe¥Zókx±MÅÁà­÷Ö!ŠZ€TÞµÍ+6n +ä¯Ðh+Æ#rs˜Ž©à´ ˜‰£`µ-w]iÝÍ\ÇËãÈç‹Ý`¤k¾Ð¥Ü¸¥bŠüé/÷ã²ît=2)YƒWÈ “סJÌõŸÆo‡r¸=B³Ù²½ƒPùëàZ !¬˜N7ú.ú•mسÝ&•a!3oÂc7ïýýº¹ÃZìl>„þó'pèU¨ö7À”ozí:Tyÿþf8MDã콿*±lµ´¤ñ̾Ÿa|ýN|ø–ÆËV— ‚ ÉXJLÆ¡qù`RèaÐe`òêæ4¢1fƒ]#Âj¢( “Î"ŸŒˆë â– pBÑPÉBñ à‚8R£ëÜ4\›ÚQ=‰w¦úDCÌ5›µ’ˆ£ Î\æPƒJ!«‡§Ú æ˜Çä™SˆºªäÌðp<’ã=×Ô`‡H‹]ÄÓŽ­Þ(Nu¡Ák†Y!NV±ÑMÀ`WbôèA„7îÁ§Šn/qÓ–ëìTÊ–ØV«‘¼®3#Gðf0Œ¼Ç½ÐèwáÐ [·ÖÍ‹’w¶ j5£ÍŠôD¹ºhD8ÂÁêբĭcq±Ñ1(×ìD‡W …X¦ÜÊ ½JùÏ{sT?fÐu|ªÖ-hµò˜é<Žãý­èhsùÊën6¤\ürAQK…R¡¤œRIä¸ÐH/$†¬NѺ½0ÃLΗȅÆ1k«ÁZÖÍË·[ªŠžjD‡S0;l0ª¥ÂÄl ¼Ñ}Åtr^0‹>&œÚÈFº¿jÑ&n ·´5w}Ÿ—/qìÁŸþÙÍú<¾L‚×!Õv×ÇÅötB×hÔ.Þ À]ŸÇc»È« W%J-AAÜpðŒÌhàmÒÁ‹¡ëtº–í°[U0­‹ãȹ>è¶l‚OdífÌeÍhl´B›3׋V—Ë#6d,â¶yñ]>s¾¹h´EÍXgPŠv™…©ªnmƒI±8â‚Ò`ºF³h˜¥¡gƧ€»¹ÑcG0‘4 ýÎ$”F/6µ×J>âùÔ&sÈTo†y¡Ñ– uaHQ‡m7Ôþ&8%Ý[â&Ö?²`¡ª6=¡8h<^Xz'.¸áVÎ/S»Öccì޾6•NucñnD»M5ZÑ2y ï B/¤ ¸Ú°™ Ý.¿KA‹X÷¼3¢€ÀFR;мi=¼ú¤©«+ä­|Z…D ¦Öøº¶T­í72¤`ƒa…u–›°Ý°¤ôw9/‘•Dr‚‰(š²áp,]®­Áú¦9œ<|Ã: S°¢usµF;Æâ»[À¸2 “C|öÙ{¢ÿèäÚ>ˆ-Õ•Ó Má=} ßÑÀ ¾Tsb¹Q֮Ǧ«Ôw”ã¸b[É#¥8©&˜Uûøã÷Ò£CAÄ0Å?Ž7§j°»!ƒÎ3AèZÚ±¦ª8Ô¼€\¤GNgиcÜš¥†³ü!ÄàÀ"–l­­¶é3xkP¿3épŠ|®Ž­ð‹Wˆcä付tmÅV¿œC,’†Þa‹™˜ŸÄñQvm‚G]2Œ# ”z¢Qmíu°(¤'Ïâ¨hµn_* ÚqñUAÙ,…FSâ-!€ÏeQPh V®P¶„zÞ<íöíH_)$û߯»hÇîFà ÝÑV™?qY î•–-kWØ®’ r¡7«ø!.+Ÿ$M‚?qã€ëÿ”þßú÷%݉8/pP©U’×dqÝ;>>‡lPkÔðÖºt}ôÑfñ_faÊ-LÙ$Ÿ&AAï!4ÞØã, 61_Çv¸ôò~àÔölß.Ú.…U>Äâ’ÿ=LÕm¸ â·¹×c›j ³y#66X$OO–4êÆÉþŒþl®1Ìw‡á4°85‹ "Ó#°©nucZW ;«—œƒÖQÍÛ 0’øA—X¨ Ñ–¯#jí…GjËl•8}äÂ=”…4âiõˆÅ³Êü‰K¿µ%ž ¥Ëä"†\Ø^IÌX­Ðq3{~T–äëf–¤_¼fÜ|W´ÒôWêšr 5´Ú«H!‚ â=¶Ž™$Nõe Wfs©tºŠí¢Q¦³Ã«“o¯‚ÁYCÉî4®Vls­dÄqP›=ð\Ô)a¤;IWµcoÚ[òÈåòhÔ D|­Tóeâz”v…‘/[m#»Rº›]ø¨´¼l€Ù’ôò¼¹ÒBÈÕ¯9‚ ‚ ®qÃùr ]ê N7p}¡`ž$Ô¤¹ÞêóJì‹­¿Iø(¿l¥.G‚À—]~±¢Õõ ÕAA\Ó†ó… d2ˆ ‚ ®úœ„í+Ãjâ¬ã~”z‚¶^~‹¿K»(•{_Ïן‚ ‚ ®+𠂏1êq¶/a….,•‚Ÿ.ñö-+AбZØòùaæ¹²ž׳BAAAñžCÂÆÅQIü(>ä¿Ýn7áóù`6›ñ³MJ“Šý)âñ8ÆÆÆÐßßP(´Dì¸Ø!¯H!‚ ‚ ‚ ˆk˜ ‰ yPÙ––ìÞ½6›­l~:»vqòûýصkfggqðàAôöö–Ýß"‚BAAA× åÄâ<óò¸ûî»Q]=?|{0Äðúë¯cttSSS’hár¹$ñãýï?n»í6)ý‡>ô!)ýK/½„X,&m_Ú æzÂqóGÏ&¥lR/Ll¤^íã?ÞKAAAA¼·”Æù(þ—ϳ¸¬›Ë‡?üaèt:Ièøþ÷¿çŸ…BaÅü•J%xà<öØcR—™t:_ýêWR÷˜b,ñ ìÐÅ׊ òè£6‹ÿ2 Sna*È&AAAAAA\T?>úÑJâóø¸ÿþûñÌ3Ï ŸÏ/‰ RnbiXZ&‚°mY,/–'Ë»œèr½BAAAA\ƒ”óþÿf…Åb‘Š[o½u‰"ö–åÉF†a^ l_ÓÓÓKŽézìCAP ‚ ‚ ‚ â:@îÒÜÜ,-{ùå—Wêvbb¯¾úê!exxxY~ÅßEXž,oÛWiÚë@‚ ‚ ‚ âb5£®°@¥Œ¢¸q¡I¾-‹ Âxíµ×VLÏò–ïëB£Ò\ëP‚ ‚ ‚ ‚¸Ž`bƒÙl–æGGG—É»°”vQaO}>ŸÓƒuiyá…ð/ÿò/»°°˜żپ®ÇQ_J!„ ‚ ‚ ‚ ®AJ=7ä^,°)ƒÅ)·¾t‹÷±aÃi> alllÙ6¥°¼åû*¦—‹+ד0B]`‚ ‚ ‚ â§R0Ôâ² M>ø Ö¬Yƒo~ó›Ò°¹þçŽú§*›%Qd¥c¸ „ ‚ ‚ ‚ ®3‰„ôŸug¹~ô£á _ø‚äòÀÀëõVô )æ]Ü×õ AAAq‹Å¤ÿ@`U ò‰ua^ Œ]»vULÇò–ïëz‡‚ ‚ ‚ ‚¸Î((Ý»wïŠéüqlÞ¼yɲ;î¸c1H___Åm‹y÷u½CAP ‚ ‚ ‚ â§4ð(.؈.wÝu¾þõ¯£P(,IÏÒ<òÈ#¸óÎ;¥tÄøø8, >ðHižþy?~¼ìþ”J¥”7£(’ƒ^¯£ÁBAAA× åF[)Æé˜œœD$‘bx<üðÃøùϾlû§žzJJÏž2!¤H2™”į|å+÷Íòdy³}°})ŠÅc*÷ÿzà@x¤Ã£žŒCлà÷»`PŠ‹sQà TyÌ—t²B:Œ‰¸Þ*®Äm½èü*!Ž©`æôÜÕ9‚ ‚ ‚ ⽇‰lzã7pß}÷áË_þ2öïß/+- $E±äé§Ÿ–&Ö ¦¹¹YZÇ~¯„Éd’òd°}÷w½scÄÒ~õ'ø§ßFÿÄúý?ú¯ß /!€œÀþ_ŸFŒ¿´¬ù±·ðÔ«È_¡C½Øü*¿Â;¿;õÎ… ‚ ‚ ‚¸ò”Š òßrÏ‹îînLˆm`·Ûï|ç;‹^R›±dX[ÖÕ…y„½B*M,ßoûÛRž,o¶rÞ+ãµÊá’éÅÛÇ̸ã±?Â[°SŸÅëݳ¨÷-¤)$1=1ƒ‚¥³º(  a&š…ÊæË¢™W„„æ&ƒ˜S:à^*! "”PÁ^í‚Y-nŸÌAeÐI’Ï¥‘åtÐIW5tJ€F¯.¯2e£N& ©ª†C¯(É_)æïó—=@%ÇÏÖà4Cͼ\ø,RYZuá`‚µ.Ó­­x.Aq•ÈE0<’ƒ«Á½Ü‹‘Oazxâ»Yat¢6àƒU“ÅÌàøêz¸tÅ ÄeÃ!¨« ˜í"!È 0S ZüV(‹`|=#QH=£jèÅw¾Ïc†ZÚÝ4F‡ƒˆ¤Åw¶Åƒ@À £2Ù‘~Ä,Mð[r˜šƒ1à…Iœ #͉ÇX] ,,³\C£xê]˜?L±±~Ä­Mðêf1Ü[æ8½<ÆŠËJhÅs®ö:ç½Xó‘òÛT‹Û”»~…(FÓp6z``Ë ޳âu¦G“¸LäÏléó|Ñàó¼ØZQ¾w_l…¦ú1“]Ò¤ƒ©f j5! F ¨«1_3_s³Ãè UÍXç3‰G* >Þƒ‘haÉñ½-Ø”ïÙq¢c b=kSU¨cÙ¥ž¼ŒëÉêÖ!¤õpë/¯ÁÍÏa(í@½[¿*ùJÇ-d¦14Á¡¦Þ ÍøÊu?ažŸúÔ§¤x_ûÚ×ðo|<¿üKyišÅy¡€\&‹œ¸‰Z§Ç×ÿï¿“òJ§ÓRÞ,ÇÀ¤Þ5µ°**3Ÿ@p`†,ò ÄÞGÃâûh.¥Ñ%¾¼Xl’¿ÇÜ ¢1£¦Ð?AnA×qïþc<ÜaŸs8øÂ~<õ.^úÉñŠh4€àÄs?ÂO_:Ž®þN¼¹ï‡Øw,,>(œ|ö¿°ïÍsè>ú¼xp|>O!Žž—~Œÿý«£8wêþû‡OãøÌ,Þ}êã {¸ yù?ñ߇Ä<ؽŸ| O¿2„B¹ãuâ¥ç~‡c§âÙþ/¼1ž“òïó⥓èë9„ç~¼‡C [—;þÌ9<ÿ£“ðSoá‰ÿÞ_?³o½{¿üÉOp`$+cÙs!‚ ˆ«IaÁѤ…RË,ñ‡Ñ“² ¶±ÕêNîB$¯‚2=‚Þ‰$7I‹Fèdj>†àD ú*\®ù©Êª]bÈ ‰†£*T¹Ýp9ôÈѾ˜hïMãÜ‘.Ä̵hnÀQÂñã#H *uôŸîÇ?ßKwa0k€K`øØaô¦¬¨m¨ƒ›Ãñ£ˆóì›Ccde畘F(%.(T8Niyz—n§ šD?Ž¼Ý…0{aWܦÂõ“/*gåëL&q¹e{…çù¢[¦“8y°Qþ=<~Nƒ½ UUVð3Hêœâ¼-'u% %¯kÍÊø¹qhÖcMu±{;­ÕÇ3?9ÕˆgQP½‡_å…Æú§ÁTâóP©ŽÅe_ÏDháŒpùÇ›œÂh8ƒÕæTé¸9N ­NuQa.æVеÁ–ÍÍÍIñ<˜èñ¹Ï}NõÅ`0Hâ[Vôì(Š ‹ÅŒŸoǦIäÄ6µÓiÇþíøìg?+­cy²¼9>Šþ¾QLO„¬pLB&ŒþÇq¦‰’gbôÝãªP×Ü·B|AJ¸:EçÆðÑ4cï‡ðü¯ÿ ßyÉ_]=šÖ¶cs«Zvcgp?òIl³rˆ{?:5Š[] p'>ÖÑ“BL³A‡ÿúÿº1cšÂ«©-øÌ'¶Áªà>øôŽŠÅàëxit >ö¹[àRˆŸø9~øÊ8nRâ·}Üê΢"‹H¨±]6äû†aj܉rÂ×aÝŸ|M:±Ì}ÿñê)lØ5_¯ÅÇ?³Uâñdë~‰8ƒu{ËÿÞ;JÞ7SbšG?!¦Q }jþóô8v§O–=‚ ‚¸ágГ¬ÁÖÍ501{Ê܆Öèè¯Ã¶jrç&‘¬o„Q\—žšïZ§ÔÃꬂ}…Ï:œÖ,vNéËCÇäÙsœ ªm0Š+ŒÍíÐO§¤4êª4Dçh-¶{cèÑ q«ÂÌiôeÅekŽÑ²M±S˜Š×¡áVUÙã̰å:XÎùåbcË(¼…3ƒ^¼/Pa›ô*Ú¡3ÓP¨|·t'Œ¸< ¡Âó¼Ç—Âð¬ úø&µµpç’Ð5À„tH\g@ Ú8ÿüñs>3ˆH:‹Ü)5ê×6Ã¥¡oh)Îw} Ö<‚bc[ßàmÝ BSÐÄy%èÈ( V5¢q5 É1ŒÎ 0û× ÙcXá °&‡ &±`¦”àlUp->>%µð0Ó ÑL5-hñżdØq ‡Å¢©ƒ³®»ØÎˆcpN]| ãâ1xZšaO ¢w,µ»IòRSWØvi,wÞYLtwb,žn¨_<ÿVÔ˜ÎÀh‡ÃÈær> 4t Ž5v*grCÅû¢kÆÆ€q>|¶Õª/Ì!d¨C‡†i4ÑŠuìB‹¹Ìõä‘ ap|é³ÍuvhÄå‰É^éú),bÝůt}V~.xovy}ͼºÅû¤„=Ђ—®ò}­xÜ9¤Ó B@bƒÑrÏ]¥s¸ˆò% „ʺº½<Ø<¦–um¹ÿþû%ï—_~YêóÌ3Ï Ÿ¯¬p ¹ *>÷?þD ˆÊijx,ŽŸïÿ%fÇGżyÌö PÛ{÷Äyá Lt P³~S]ïŽÁÐÚ‚êèXÉ»]¼Ÿ¨ÇöF—Ô6Gãfìð Ð\¥—Íáña]>û¥¿Âc¿›} c5¸Ä0ÆfÅF`nÃbþ#žµ¸06•…Šu·ë@̱›Û|Èötb¢Ø½Eàq±íO>2‰9ÛlÞX#æÕ%å%WgîõèXïF¢K<.±ð iÖh¼¯ ›”:vƒY/6´7A5|Ã,Va…m—ì³ìyëáªóÁ®µÂ×Ü—a¹Ÿ u¢+Y‹ £Ôà«xœYÙ}ñ ”Û_ñ˜.xÍҧ᮳Jûäô+Ô±®§ž@Ï0ßúÍØ²y Lây FÅýF{ñn?P·±뫳‹÷\À%>Ê)BÞ»A¼..$:Ob8¹ò½){Üù&§b(°z;Sþ¹«t'3¬Ù±uVÕ²÷Q&…ʬÂäé£8tð ¼ñö9„òŠ«&DÜ ¬ÿÛPʉ&¯æê&l§u5 ü`ÿ97꥾ƒª¥÷BèmìûÅ0Ö?t/öúLP̾ƒ'ö%À‰wbÉøÉ#M+Á†º}íµ×ÐÓ}Ñ™I(jêÀfÑ×—Aí&7´\Dz§-ŽÙáok?ߤ•”¶åùæó9$™×æ¦vì°(‘ wáð‰^˜÷´®PÞHYEz¯>w©ß‹) ¢“ÓÈ[ÖÀ•÷-„§0c_ƒ 5&ñ"êìDÀV@áå>LjàV¤1Ø=Œ¬Ð,.¯‡ú…ŒeÐðˆôö!]w <êjðu3Øwȉ;?¯‡Ó@ô‰·¡zߟJ]kÊî{¢É h5ˆ•Z¢þv´4©pð×=˜*øáS HÀ‹õ¸·í’_7p°sùÝòs!‚ ˆk°™A‡ÌLR´ŸÌ ¤)èM¬»B´9=àOO ¬šNª<.h‡&1.6²ì~$ÏMaB1cU‹øœ8œ„Ú³~ÅÊuËKµ˜W±qW€Zg€V«–i6Ââ|&ÄôJÅblNúàYlÈÎ ­¸í*λ²X™Aðl2uÛµô+î+ÃÉîKåý]øše19”@UsËùÔ+Ô±mªò×SH ãèÑ , p95Ð%Ç1ÁÏ— <=%±ùÒž‹ÒÛ¬P*ï±J¥·ç+_¯tùã^V —yîÊŸÃê…ÒùâoyW˜âzö»§§GšXü(&†ÔÖÖÂl6KÃÛ2âñ8b±†ÎÁ/OÀ£ŸïžÄ‰mélA‡ø’ubvhÆÐ¢¹rýCPÕÖÁmP,9ŽJåF«Õ/–ù«¦±×£8‹Ù¬ÛUèžpC Êê÷ááÛ‹žø^Õ™¡Ë'Ñ7ã®û:`å–?ñ†mØuèy<ùäªÔ9¨kýð²(øß»k†§~4 ‡^€Á퓺½(jöà#žÂþý/ØMYÄЂ<ÔfÍ×Rí¸ b%£04£ÎÐu£­¼[§A³h€ <ÿS¼ËåITáŽ?j…ÉÒ€{×?‹~øcØ,Y¶ß€–¿ô ª@ùs!‚ ˆk {Oõ a$áB=ûl™›Áà„5 ÑöMÕpóÇpfȈ†ÚËn¬çÃ=82lEGG@•€©ÔP¯`i\>8{1<çF“E !DO×4<»ü¸ãÌóé)t÷ÅáYï´±K¿–+ç¯3A\!äϳ³%-D+j\);ƒ·½¹Ì³'6»\(`´Yšˆ Wï…FH!2ËÁºV¬4NT)»Ð«Å6£FÝ9œž´cc“˜c…ÏëJ{š¤95ªÚÄéÒ…[“x\…¶ª*1·"ƒ}Hè0_ƶV™˜Yñ¼‘,+¥ÇÏ ;߀m~¹ ©XåqVÞŸÒ¶ò5â#WÖ¢]ÖçRêØÂl g¶Ö:¡Œ§!ˆ £ÕŒddùZ±n,D™ã%o»Kz.J¯ÙÜ2‚ z.‹Ù(Kƒ&í¥Þ×Ê÷»ü9\bnÅÀ£eâHw’yõ-> …BÒTL¿L\IaòTº­káTsÈ…&1gõbF …oÚ] ^b 86š†Ùn‡A ¬›C"ƒ ^_³¶ò±ª]Õ°ŽÍ šwI±WøTÞ„¦«äÆ‚ÊÖ݃Ϭ½ éD y•^|È‹®·âÏdÞ>ª5Å—ÖÌÏßò©G±=‘DAc„ùŽíYHt÷Ÿ¢>•@Vi€As¾nýÝ•@"¯†Ñ Y¬¨ÕM÷áKMÅTþÿŸ½ûŽ$»ïÿÍÌò(Ø‚÷®n´žáp(‡CÑ )Š¢V+­´{{·ËÐêÜ÷ÏÅFlìÿ÷ÇÆVw±â®N”¸+Rô¤H‘"GãÛ[x4t¬‹õ¿² ýÁƒh‹™]ߣžÔW¥0}í†Ø§¢fëÃI “Vfe>ȹrð65àqo/ƒ‚ ÷öÙ ‚Üû˜Ì]i[›1Ô5Û×®aU”­™¼}à 0ëA‡5;ƒžŠ$Ö•m8`<ŽeÞo»¶ž·<-¾€kóVŒˆF³ñC¹Æêcå¸6©Ègr€áÞt>„ý£·”“`¼gÇ|ãZæ”Ù†#¬â=½7öÿ¬í½?q»Óä Ÿ¾-`ÑÇÈÊæÅ>0)bÝä»&»ã~D)ÿøËû8«g¥<²Þ†üǬwH—^ÙÒ+¿ï¥@DDDô4Ñö3™ßòdLæ÷³Žò3²/å§c?íµ˜±26†å„ =£ÎòH L–{G5ý®ùã$Lï»Q÷ày?¼í>Úz>ÌòTDÖ£¨noƒñC»Æ*…Fø ‰Æ³éÑìq®îq-³3ÊlÃVñ€ñ?µ°”Rc'8²¿·H¹à…d0Âb”î |ôïC?vöñSy!""""¢ÇG²£eøZ¸'*€ w÷ȾqKè‘f#AîýûÞGeJ³Üûrßô÷³‚""""""¢gÀAAÝN€cÿØ÷0ë²ÿ³Ãå>{V0BDDDDDDôŒ(ÌØ?Øé½½<¨ÈQÏrðCÇÑ3ä q=î}fÿgG \”›îY|ì`„ˆˆˆˆˆˆèt”Nú¾Ütûý³†""""""¢gX¹@Ƚß?lz•†""""""¢ pÔžš¯R1BDDDDDDT>*£’¹ ˆˆˆˆˆˆˆ¨Ò1BDDDDDDD"""""""ªx €QÅ;Ò ¨²Ì8 =»Ù """"""¢ŠÇU<@ˆˆˆˆˆˆˆ¨â1BDDDDDDD"""""""ªx €QÅc„ˆˆˆˆˆˆˆ* DDDDDDDTñ!""""""¢ŠÇUËæ´Ý¯D²-ÁKc9ÛÐÓÝyå*®/' yIËlàÖÅ$ÝíèïïBMzo®#[.£å¶1;½ÿª·Ý­¥×pãÒ<òuÝîG«e7n¬"ý„2ke@$Š¡ø’Òsxç'?Áëø®þ?þùMlÊâ;Y†$þåc0DDDOºÜv¢©¯½­8<¢RÕ× §lBcÑ™)Ì®åÐÔê.4†Œ¶*xÜÈ¢—eln'Ì&;œeﳪ*ØÍÇ÷"z†òön{iãÞÛDnßgißM¼}Ó·Û@âu€èÑÉmÎaÙÒ…&7ìŽtkCîÎBªÈÒ†*t>‰¾',V'êÛaކ‘,D6bXÃrd'’‘Cpv¹¶nxö÷IFU<¨÷Ø`2Zଫ9•@ú mo…ĤÂòÐÌ]xáóŸÇo ÖÀ{êsøÂ«ÇQÑ`""¢§„–ØÀ©iL/-Ü%^AD¯h9ÚÑmóaÕØŽÖÂóª2<½ƒh4ä‘I¥J%‘.ÜùÕÍ$‘LŠ—f†Ã;€Ázw,Ñ3“·wfHc}5†¶Ú»žË77  #31_ZÔáy z„¹‰Pf·k7J7Ü!¤G e3œvÒáMø}˘™Ú„µ³N©8¯šËí>î– Î`&Ó†¾:ãÝ-uw+ºì«¸rñ6ffÆpõÊì=m¥4¿ÊºJhydSÌݾ óF‘è8n§Ä…7Û„¼¦ðü&""z H¶z4V«ÈÊ*"[è×JÔ¿PÓˆ§D…KM"#þ4îVƬ°HÄ5±­ ªjpB|®†˜Ë #f1ð¶/Ñ3–·5d6§0œ­Òïɪû²£}¤ ¾K“ð×GƒQâu€è@òy²Y¾+D (ªø|ošl*†h,…dVLŸN#§Ùa”œh9±ýÀÌt ­'ëaBðîE¨šHß³XN&A"•†’ÉŠoÁ“h¡WÖ!r#Î}öyt¸\ðžþ>5膳vŸy¥O\0yz=-®Èê2‚¢"•ÑïÏøD£&‡ÐìmlÖŸÁˆ} w6÷uˆ×"ð4wv¡«ÃXP‚Wßé…´éCŒÝ<‰ž±¼-TÁ\Ë óXóõtÉÞcÍ1LM‹Çð:@ôH°Ú­H'Sû²q霶݌)ÃÙЉîÞAœ8Ó Ëò$–“ÚÝù~î6VUbK³˜™]A(…ov›bºèÜuÌ)}8wö8Ž ŸÁ‹/ô³·°ø„笠 9$#)(Î*TÝ÷]ÑHYžáDDDO }CÀ¤ÐëBbå:n…½8u¦¶X#æÇ–‘¨ëÜýå6-±‰Å¹-†H,#Þ«0Š4¶EåÊÎIôŒåíV䢚NŽ¢ÙZî.¥ W÷q níݯåu€èÀ˜š`»´Š@¶ µF‘ƒ7WªjB¿¢!í»Ž+œ=V£ÈªšÞÛJ5À­wÝвˆ‡¢PíÕ°6àTíΨ§F„—’pzª`7jÈæU(FãnÏ Éh‡Í€'6DE…@,híÄ™[¸Un’ü:B¹†ý눈ˆèIÐ’H¤“X™Y…©É -³‰¿ãm°ëm!GN ¥aÚ_E³Õ¡½«fÍ/*\qñ¾V$1¿=ÃýIôÌåmlíýp=(=Ù‰ºz^ˆiÄÒ‚áž0®_¼ˆE ʹÐ?Ú“þxYC:·ðÞ»ó°ŠB9“TáA³Y|§†1wå2²Ã¯âTc5<;QHUÚ„ÃS›,. Ý#ðÞ¾…w/˜ ½J²ñ$”–!·=™G4*#"™Ñtüch:lšœuž4l|†ˆˆèI¶Ùš‡ßv/ $135†‹·œp»ûV×ÕMÿõ6ÅØl0”êW[XœÏ‹ŠK&»¨\ÍÏAT£ä_¢g:o3xëóKX îöò•u^ˆIcVï0žoÌzoŒ†½_S’íh>oáçª%Åwòî“1µyå7ïON®Áð'köR7V£óäytèid£É¸— rKë1pœ§7Ñ“®hm8>è„Õ(áøsmÈ¥¢GâHgDå+£w¯ÍCU­°Ô”jH’¨< »àòØï0ME£'…77ˆžÍ¼½×B‚Ùê@Óñ4–ûi^ˆq6Àh,ó•,ò¨é&¯§a~ Â<ÒDDDô8ÉV×¾»µ¢Ñdq¡ÆrHgxÉ‚jÏ)ÁVåâ%zVóöî¤&T7µ¢úÐix ¢á:Å]@DDDDDDD•Ž"""""""ªx €QÅc„ˆˆˆˆˆˆˆ* DDDDDDDTñ!""""""¢ŠÇU<@ˆˆˆˆˆˆˆ¨â1BDDDDDDD"""""""ªx €QÅ3e¢)Ç=EDDDDDDDÏ,ö!""""""¢ŠÇU<@ˆˆˆˆˆˆˆ¨â1BDDDDDDD"""""""ªx €QÅc„ˆˆˆˆˆˆˆ* DDDDDDDTñ!""""""¢ŠÇU“"ã·Û«GLïÔpS¬Ëh 9¤a^¤õ5¯Šÿ,æe „ˆˆˆˆˆˆ>ê*¶ˆšÑðú’Ší2=>:j$$ò˜Ñ¿—e¼Z'ÁÕ0P‹IÆg:$Ø7‹cnà­9W3Åùk¼ 2ú“*–¬2~Ç ,îK?Vñ‹ˆ„—­XTõÀŒŠŸ'd¸ÌÀË*"(ö Q GBÆ9›†\‚1׫mñYSNÃ’"Á#&ŠÇUŒ' qÔÚ³˜Ùª÷"i‡"*.l£NʦŠkâË.—ç8=mDù5Ú aa]CH/¨DY6Ð #±%ÊÔáþˆl–ðœ]Ã…àãyT2H8Û(¡J*ބɉm¸#êK¢Î Åw¢L¿í/óˆ-QѯOˆzèÎÉ.òD½„€8ÿ·X)%zz‹ep\”ÃíF`+¤âRÈì|'ʱQ‘ÛL@4®á²h‡ÉÏ&›Œy€ñUÚ^¹ß#®úpÙ”†«âšàBwé+"ÒR+£{ßxzW‰jñ÷9¯Œä=Ó&£*®Ä€PBTºR⋚‘GT¬¢¢²hß‹"…44¬Æ¥Â·¸eœ'ƒ¯UAKVCZ¼¦Åçš"á“í2¦r¶6óP]ÊîÅ~¤YFþ^Ýâý‹Õ2:=À"–+–q¾E.ôæXÜP1¯O—S±–!…Íœ†ë ¿×äŠ̆UdEÚ¯¹€ ‘žd–ñJ0#NÌÛẩuóˆô?!Ö¿Ñ"V]œ¼NQ3¦˜™‰ˆèé#É¢T õˆ^Ž7)8<þúCê*‰ÊÚñ*àRP{<Qª®Ík@ïU*㋽2¾?®bMÓÍ‚½1é#! ê­¿%êÆ¾ "{ÃåQpÎÇ·žtðCÔ¹[<2L1si'¢{óÇ = Üþ<Þ JèmVð["ß~{«ØÞýLŸ Y´Yßݼ¢Ýýû*þb®LP_Lÿb³„°±*^¥ôG»ô‹ü÷ºOƒ½JÁWº4|kV=4RÑúHL$¡a.µopQ±U}n`9¢ƒ{ǹ¬>Ш¨¤,«Dú€©¯ÔjxgZ…§S†¨ƒ!&KøD—ŒÜrâ8ãc&çó‰/µe—ÅŽ¦H†óxÇ©àw¾zv$Ò¿±¢î.´¿EA»8àߎgœ¢B¶¤b)»·^fGñß[ba_h–Ñ-NGJÅÏæ€W;%ŒÔÉÐôÀFé,SÄû\HÅÕÍâ6[jD%Rüýz›e£Øä÷\ÌÏDDôtsTÉø¬MÃwg÷î6Ù2>^'ÊBQÊ-øEy'Ê¿¾FQQ¾­ªÅÁ¾O‰²÷jheäsn †¼†Éu·“{¥~G£>„@0׃ŠD•[Lï‘ ß³ˆDT¼±©¡]¤^/ŽáÕ-Þ'Å2×ÔbEÏ(êꢆ š%ŒŠòÚ¿)æ ÝÐÐÄôq­ÐèC\E§X¯Z±Œ5±.S±rPì™rpZ÷ms¬Ø{å¾õõkH’Ñ“”çè›uJaܼom‹út¨cψsYœ«yöí@ñ¼n­—aÞV1'p.‡Þ2ùÝõ0ùAÔÁÛÄrÎ:‹·KIQWóÝË$òÕhFÅy,%Ê KKúúD»8 ÊB‘¯$ñï϶ŠÃ*lˆLÙ;"¡Y*vÐoú‚¢íYú6¯ “ȃ+­{#eÊvçDºµ^ š¬çñWbY‰'},?ƒ«8%=²Ó°Rz­Š1JxY Ô Á_ú\ŸÆ—Þ×SD\ÏtJ°n©˜ÊÓQ ÃâBù%qÀk¶ó¸˜(3&DåÈP-£_T€ÄAý´8 }æbªø^Ëj5Ý¿^.Q™ùb¿‚97Åcêﬧº|¹IF‡¥ôøKIF¬_NÑð–8ÁœFq!׃5YQ¡'ÝXt¯¯Ó"Áã.®ÇÇ«ô4´BRÿû˜ëøŠ¨Dñ'`ˆˆèi¦Xd¼Ö!CN¨ÅGaôЉUÆW[€©¥<¾+*a5- Ž‹21-AgÝÅiÜ¢L®åª$ÊÙ×D9ø«;yü@”¯í 2Ü¥¡¼Œ qß[Paó*2ozüFpS¤ým1Ï–(KÏ‹rSåêq{ñQ–Ó^ш²£0è–Þ‹$£H8Ù"–ÓÓÒ`m*¦u/½Hg•„j çÄôÕ!³¹âç}b¥Lú8^¦ƒÓ:p›MeÖ×V>¢'Näã[«Œ ^n)6„æòÅsvÈ%í6gÓðs1í¯Ã(ô²æxˆˆîå±Kˆ‰öôÎMU´?×EC¹Y”½ª(Ÿº¾7¦¤Ñ*¡&…BoGAäWc©Ü5é|ƒŠ7øk§H?“Ô0Ð®àŸ (øWú ÿ'´—+õ@j) ?•§¸½_Æq[±ö?ôƒð q@Ùb¬ Ð/Øâoqaý[?vP TüÝŠŠ)q°'}*~¹,Þ‹/-.¯Š ëß,gZeìt¸Ð£Ó_÷÷½ÀÒrßÛÐ0މ´•¤ŠÍäqQÌ?".Ö£–}ë$V"&*\ö{ŽP­8ÑêL{ëÚÈã¿Ì«xCœy N )±~ߘUñ÷b½Æ’À„XÇŸ‹Òæ›>Æ@ˆˆè)%Kx±]ÂÜœŠmÑP.ÝH¨÷HpfŠeé°h$¥E i@°+A õÕRaì«!§†‰¨(ëÅwªøà¹z 튊_-îRTQÙº*¦Éêci‰2×cÒÇe°˜F¿ip¾AF­(c=¢^•µf·Þ#S‚.6ÎŒ¢~àI©…Jž$*€—DZQ)\ëVmÌã/WÓ]2š¥'´½•|0c1?Ô+2^íVP3—ǯõ14D¥äT‡‚$ ?ñ‹ ëÎ[\Xßô+øŒ¨ˆØcb\± âÀ¿Ú(~M¦ITRÞ›Éc6!.° ƒ¥£˜Ìh˜^Vñcñy‡¸@¼º8ïjN§d4Fòøĉó£RèÌ\Šx˜ÅU¾AœI÷…j¤0#V¤Í^üÉÜÂzŠ3¢r$ç‹ÈçĉèÔŠL½UÌã•áQ‹Až|\ů „ÑÓE\5¼˜Ç…0PðQ¶N,i0‰2:%1±l±\‹mˆ25dÅgó­2úEךÖpA-Þ™úæ¬(Ey|¬IÆŒ¾;©bEÌ—Ïë?)_*7Q¼ã#‹ZØ×z$ø7TÌD5DÌJ¡ŽhˆÖ˸ŸŠêV‘ž&!.ΛåíþÇÊ•6M,o|³8î.Ú«à¼#Ÿgîžî ´Êm³Tf}qÄu"zRüzÝXÖv’÷’'r±ûó»üù!´­APð{6‘¯LÀ¸¨{sø¢ûEDư"ö»JÀ)Ê¥Å}C68\2^mÝYQn_:`ðÆF#¢m­“ñ’ø»I”ñ6Ñ&Mo‰r1«)5\I—mô)UA“Q´3yÔ?sûÐá ¨ m‹-Óf¯‚ѬølYT´ôA?Äñ®¯–ñœþË0ªdüA§†-©XÝ·ú ¥Ï‹ÿ½Y‘ZsËyücéXâ®ÒtÙ¤†‰Òû;ë*îì\ìÅ…ûŸˆ ùOÊôÌè«gQsjª•á°mІ)ýFYB¨Xýbëþù4U Ë{Ý’NZ(¾â8%DDDO+ý§æ¯—ºÉê š•!§ÌyÜŒF7°Ñ ™·ÔËðˆ>˜èXøj»„ñyµÐر‹ Ùˆ(/øDÅj8Û§ ÃŒBä úc15¢âõ7ú³Ì¢L?§¯¥÷$ÉéÝô¼dÕ𭔆@VÆçª4üXÿ]{ûûØ8ýn—qïÆÅƒl•Ùæ@™õ%zæò»¨¨æ ,"ÇÇ:E¾Z?t†ûó»ù!óC¨×g×òøn°xw;Ç_¡!:P,¤a»GïI©a^¶Á-¡Y¿‰^j`¶6*xÅ¡á—3y,ßÓįùRåfX´¡ÿvwðM uÀfTEP¤‘eÛZ­„&‘þr¾øxg›¬áíì“ÙÞ§²È H¥;=w]H÷"Ã++y|£øZôŸäiU ùUüJ\`úånPðù!·fóx·4¨‹Þ¶ ×ÔBt¹+S€â ®²N§Ú$¬‹£¾”¿ï«Bpå֒ЦfçyüŶŒÏvʰŠ£Í©¯«†j±²W—ÕÂüŠMÆo6K0‹K»»ÎU¹Ï5Q…6Ž4¼¹üA“„ y¼éRðO{ (à¬?Ù,N·.>H»±Ò͇¤¨t¹:üQ}ñÜœ ?J–Zd"*æêe|­S4ÂD¹M‹ò´xwDçÍ6Å2CzÏIÃÊCtŸÔ8ýª¨7èu ý™èpPÅ÷õõ4=xÞÄöÁÛ\n}‘å9CÏý±˜kçxŸ‚¨ª!ð£1÷æ÷‡Í ñ}¨WÿAm±ž-‹ëÌÛ *ÆÙ „èîü)Êœ¿óéã`*8e©hÓþj^ƒÞ6yü~ KHxµ¯4z¥ÈÿšÒÉTÂù–Åþv[ÃRj¯q{L• Áým=£çUülCÆ—û¤Eú60±(ÚÄO(()éJmpeßËXzéC}š½ÿòÿšý Œú÷Co”Ø‚AqÁœ⾟Á½—Iì$_|^ð¾ÊŒ,v†zðuÕj—Ð&þT²¸÷†e(â¬_¤Ë՗좤ô{·ÌäqRRq1Z, öw@rX·¡ø‰>Â| Q›Dï:Ü*¾ó‹å¥ö< Õ䈇‚'"¢g˜Þ°1ªw—qf·¨@ÙT|ûžž”FQ&šÄtñ#–}ƒþˆŒ(ßµ§›Ÿæõ%zXfq.çrGü°\~?R~Uç—Äfò¸ZªÈW7*xM,ù/×ùh8Q¹|cÕ!Î=¢<ò¨Ó|þ'ú³¦K¯lé•ß÷Ò*r ½›ÝxðhÓê#Ò.—ùNï.Wîà$ã¦v(–ç{ðaŒ—y,%Sqaÿúï{K‰×1rMœ8K±ûÓÚØf툈ˆž}z'¿¯Òt¢MÁ)³†7æî/›³¹‡ë‘Ê=Ûü ¬/ÑÃJå\~@~?R~Õá¹mà³= Ú²²„Z“†k ~–o’¹g8ý#â¦ÑS_)»±˜Ç î "æ÷#ZñåñŸÖ‹Ýíõ¨G2Ïà=¢G`ˆˆˆˆˆˆˆˆ—£<Ãñ2‰ˆˆˆˆˆˆ¨â1BDDDDDDD"""""""ªx €QÅc„ˆˆˆˆˆˆˆ* DDDDDDDTñ!""""""¢ŠÇU<@ˆˆˆˆˆˆˆ¨â1BDDDDDDDÏp”‰þÝY÷=•¾þ瞆=@ˆˆˆˆˆˆˆ¨â1BDDDDDDD"""""""ªx €QÅc„ˆˆˆˆˆˆˆ* DDDDDDDTñ!""""""¢ŠÇU<@ˆˆˆˆˆˆˆ¨â1BDDDDDDD"""""""ªx†ÊÙ©À –6bÐlõhm«…Mïh l­l!¡Ý½ÙÎ/ªÍRá/-½ Ÿ?ªæÒ<JsçÛTË‹H(Uhno‚ËXú¢°ÌPÓŒÚݲˆl„¡ÔÕÂ.?8m""¢.½Ð–0‰*JR²Ä½EDDDG£HB©–!ï{)¥— 1|á _øŸžîzRK¯ÿ%¾ù†²)‡àì;øå»[¨è†G¾ƒ¿û³àv,†ÀÚ*VWÅË· cS7lR¡’ºü-ü¿ß¹Œ\÷Yô¸å§i’ ¯ã›õX× ÈnÜÀ?üjÆ®xõ(Fn ?ú¿ÿ¯û«02ìE!΢náÝÿúˆ†×9$mÖ䈈¨Òã1,O®@­ª‚U)•{j±€‹w&1>Ÿ„»©–ÒWZrsª]æRXDCrñn'½ð:ËÜ=вHÄҀхE+QÅûñüÄ?ùÒK-½´}¯ é’™Á{Wxåß| Ç,ú9øßù.Þœ¡{Dü)7âÌ—¾Š“Öj@ZÓ3 FN˜03¹†O·µŸ :,Íámüê‡ãð~é¿Çovè•1ç®þ7|ã‡ÐþÏ_@˜Zò ¡/ó^ŸÄû,wßÇ:,í“Õ`=ˆˆ*šdC+Œ+7Vpút rsq}]†ÛSƒº¦c8ï±Ã¸¿0ÌF°µ­ ³Å -²‚éµòá¢Ê4&#Å{8®æ^49÷ͤnaòâ?~ MÝ\ÐrˆGS09{ËÊobâzͧºáºo ÙD ‰t‰Xáp –æ´W›Xn=nj[K X e ÛkÑÚÑ·±xc3ZÂô|¨ëE¯#€ý}u-¬°¡¥½^Ò[XðIh.ó}ašlKk2šÛªaŽº>Ì¡ËÌÇá_ZÂzX_fÚ:¼p=ô25¨9Ñ>4(…öÏQöÃû‘¯À§5¢¥ÊpßòSþ9,$=è9h?å¶©°o—óhè¬/Û5DWf­êA“ãÉ_Õµ”ó[Qî¹î*cÕ1Ò²!¬Ì-#˜’áhhG{£ã¾@A.¼ŒÙ5 M-”‘úº±¼°Š`Rƒ¥ª ím"ßÉú¶lbn~é}OdHæZtvÕïÞèxœ*ã¡ Ùƒê;vYã:õ/| ¿}„`‚™ÆŒÖÏöAž™„O}pš¹ù›˜°žÀÙ¶;Q2ªFΠ{{ ÁR²§^9†_¿…Õ쇷¾DDDÏ6 ¹DJÓ <7â…~oBË5§qb° M5ûƒ*BË dÅ’†ÄÆ"6 Íèï‚Çl†ÅØ›{00зüÐ2Qlùýð¯7*H­ÎbìÆULøR¸ëiX-€Ùëså÷µa²Y¤¢Aln…Èj÷­wrs‹¾m¤Ei †U–ÛD¿eˆµë0•p£µ» ^“7.La;‡ÂcèKãk0w£¿QÃòî{,fCùü*êææÃ¾×eÃX[#÷0ësxËÛ«ËØJhïc™q,^¾ˆ™¤XfWê¥\½4¨ú°¤uÜxgaõ!öÃC¯$Vî [•¿[››ÇÒÌ<6sè|)·Mbß®®l#³ïó‹2æ°ãñ8¥‚XñÇ ¾Ÿsõa©ܹ4†³ =ÝW®âúròî23·Ùé%øWýˆkP¶0vaa[3ººšaMâ _1è¡XQUS‹ÚÚâË™ßFH5Ãø„ ÐÊèbìÃ'??ïÿÝÄÿñw5hiï@÷à(N 6 ÐÁB]Å»óW+ä;Í/ü6>Ùe*œèÑéiä{?7Ží˜\ÿš›äCÒ¬çcjÍ ªö‡”jÔ¸"†ÄQv—v®÷y|ªõÏñ‹K£ø£óG\_Ö¤ˆˆ¨¢©ˆ­ÞÄídÎŒ4ˆJœ^;Êa{i ~ÙdFT”-P Õhï©Cbs©–êb}0àC@³#>5MûN4Æ0~ó”3£h2ï=J“J$‹‹Š££ΪZx[ºa1ÊwßEKÅ‘v7Àc(ÞùZšši›Õáx؇ə1(í£8Þlß½ÙájÁq}¡Ilxú0ìRŠã~­&ak®e81#á_ÀüZ©œK]úÚ,Îú tt¢Voñ¨!,/åÑØîº½ˆÙÅR¢Æ^ÛÑ‹¶j#’ë3ð)íèª3!í cs;ZÝ{g54‡éD3NŸlB!îéÁ@è L¯Ö£5y+Q‘ÚüÒR[úû…YØZk‘JÉ»ë÷Í`f%Œœ¥]}¨–râ{ém¨.Ûh*¿>8WÂBÈ[të–^o3!¸0ƒÅ@ òÐ"íúbã;¼w_˜ÊïåÀÌfZpnpg™Ç‘‰Þ„?Ö §ëˆ"-‚ÅÛ &ÓÈÜ2 s uwí±NÌ,nA\áÐÐÕ‡Ö*#ÄÎÃ|Ø{|Ë!ζ~ô6ØÊÞUWC ðÛÚqÚ,ÿØ@ÀÔ‹~ϬoåàmÌ`}v–®vT)Å^KÛv´ºÂ¸³íDO‹S\Ey±°ˆ¬· uY±.¬Ñe¬ÆLhìëCul3«që»Ñßꆢíߦr‹s ¾öÀ夃ç5"‹ÐÊ,æ7bÈœðv÷ Éi(‹ñ¿þoø“ßETˆr˜ùÙ7ð_,{XÈ8õù/áË_þ²x½†çÛJ£•jQLOÅQ_Áæ–‚ºÆ¦&6J‘¶ri.!'‰êšvoè+\^ᮾ[ft~â%8®ýnEb}‰ˆˆ*–‚ªž38V«b{e ‘Ò¹Õ¢=(*LNUA}ÿ {Kiw SITÃýË«©¸T?Ö°:rX/<S:ÕRƒ–Ž´y,°×xQm6n¼‰kIäöÝZ: Ùf…”ôaìÆ”öã85Ü‹z»µƒ8u®Òi¬ßW0g±¹AM{M±‚ª…±,-yX"Ñ`]ÃÔ’†–c'qúT?þq̉£!³ŒùõL!æ·–áËš ˆ†ã•‰8ŽÂ©c ˆMÜÄJ °º­Øž˜‚?º†‰Ençþf’†Ôv¨©…}·Ê-®5N„ƒÔv´¢ÊìF³h˜v÷”Þ÷І²)Š ´80@p Wd´Ÿ8…áú8&Ç|Èä"»ß¼ åz¶>aä3ÛXš†ßÚ‰Þ&;2«·0©Å±Ó§Ð_« ™7ÂníŠèAû¢ü2ãÛaÈžš½eJ´œ<‡îBð#‡ÐÂmLˆëcaЃ´Ó·î`+S!¶2†Ûâ¦JN´¶¡ÚR‡î¡.ÔêÏSìßú:‹vÒ±Ó8ÕïÆÖÍ›X뤥‚Xš˜C¤f£Ç›‘™dz̺ji¬-¤ÐØá> Ñ©?þ²¥Þ‹¦Æ*l¯o‰6–†ô"æ ÝA4$×–QÌ;¾@q{ô°c›ëˆdQ\—™Uä[Fp¢KÁüåK˜Ï6ax´ †¥ÛXÔ{sìÛ¦ûdCX]XÀBéå/um(weyåæUƒÓ¸±nÇÀ©3í¶"0ïCR;Âù¦Æ±|saWMñ3Ûž÷—k‘E`v»vƒ.’Å 7B•žYÉg0“iC_ñ¾yÕ\yÑx–\íéªÞ=Îj4Œ„Õ‰»ž&Ҳؘ^†¥«Î'…¨ˆH.´ˆY_šd„³¡Ç?öyüþWN ;¹óH‹³Ý‡CÙa))´Ø ¦#6dg.âÂ…ËXÑ\HLO¯žf¬®æÕÂt{Ì5¬FÐ\wwDN²á•3i¼ýú,ÒG^_""¢ &Ê¿j¯ɤhì<Ô|64ö ¡«Þ £Ñ£­Í6ÈÎ6Ѹpìöð⬮‡]¿ƒ¹…,Åœ°ÅïàúåÛXÛéÞ,jl²œÀ±uT  Åi(T‹ô`Kᇡ[ Ѥ¶[q‹øæ0yû&Då<å_ÂÚf©”hÔ9ÝìýATh8µàÄHÒK˜›_C,ŸF/D?03Bk=î들ÑFN £êî5S>ܺ½Æ¡ö}A½½¼ŒùDƒ8—”'zªˆˆœ^À¯ÿög¸ܹM“Chc YwÊ÷ÓŸ™FîäðÅ/~±øú­Oc(;…ÉMõÐ4«ÚNã”ñ&^¿(>“'NÎÅ·.`{è9 Ø¥ûvqõéW0¸þ6®mk`}‰ˆˆ*‡ó#¥\YÆF$…Øæ –WÖ÷MñÙòò2Ö¶ÓÌ™efÎöjdüAÜ{“T.ãúÕ;H(F8šzÐlÜ}ÇÐÛ;ŒSC6,-¡X·ü… kúм½È"§‰Š­\,ÛSÌz/Â+W1Ÿ²Á®fQ=8‚ö;[ÁØ•ibAø£Yh<¬ôQÏ×ñE\~Oä+­øÌ¿G4õ^Ór•õiÖ[XOyÐ(²O6—ƒÁbƒÙ¢+¬ðt@om±Qo²Z «id²ùûò•ÅfA&žØ76‚†D< «Ã~¤b.§7öJ 0É g•ý®Ç ÊmC9‡­Oáç5Mæâ/Bе³y› Í]ÄÅkWqi<oW½X¶Vv_”cµ[‘I$öõ׳eléDɈúÁó8Ûí.ìÉÖŠÑçO ÅV0ºªçÎÔ>p„¼ØÙÙO"%E4õ†²NÑ]k÷êA»GË`c!†ºvÏ:hé øc ¬Ü¸„K×–‘Tðr«›P_ÃzÀ‡m»÷·•5¨ûnï5Ü%Hb}w×k'˜}cšÚÛÑ^xµ¡®ÔŽ;ìxÐòÊÍ+¹{qþl'ì¢qHš^üêgð³ïýþãU§8‘£È4¼€ßy­ æ÷r^xe7¾>Âú²ð$"¢Šo&!¶ƒ©¾Ù**YiÄÖ48šÌÀ(U¨Ö T£‚°¨â§idãAlɹbE[M"¸@ìÞ¤¹&oo¢îÄ(Ã×ñÞÆ ¦TúOšK :x2³kí°Š²\M[ÐàµAÒ»åŽßB¸® ɉý™špNï}-*~Û 'pÚÆ­+uèô:á”ÅËíÂqت¬\yÁ‘p¬ÆÀÃKYùÐ&â5=8ÓZYK`a" ­ðóˆn45dp{| Æš!ØDkÑX]…¼_*4úŒ’>®ÃÖ¸³›˜Z0bø\ fnÏ`ûù¡ÂX=;5c] ªgæ±yÑ.~ÍcÑ'£ù”>>Dð=g•±íò^äÔ®ÜÖ04t„m(“Þ¡ë“+L²{Ý‹®¬Bé{'½FÈâ$—~}ÄYn_H/Ó ®53 XŒÔ£Û¥@Kù0=¹‰Æç[¶IÍß?ЦX†½Ê”/ˆl{LH ¸-Áí5ã¨Ï^h±e¬*­=°{œ†ŒJïs8Ób*Œ•^¾Œ·×ƒÈ5ÔÁ[—ÀÕ[xG{Š¿Nc4BJ¥ ?icʈjp=‰óø̛ޚÇ*ZÐÙÛ€v-…… —HhpGË/K®íű–z±Ñ¸8»…¦‘ºG0n†sCl—VÈV¡Öd7WªjB¿X˜Ô<‚Sµ;=RŒ/%áôTÁ®? #ÊÎx( Õ^ §Qœ·s70¾]¡³'Q}ßOÔä ‰y[ìO|ðð )¥Kcj ~©xyƒ^™ÚéŠ6ˆßþßÿíÁ³ þ‹{>PÐþ›ÿ#þué¯òiŠ%VásÿݲÉ2² vó¾Î4Æa|íëÃw¥lîþþ—»w¢–6QES·±0ÁÛm†-Åä-?Ì}çPå2À>Ãå‰YXNŸ@³ȈÆJ$ãBW—–œª(/Q[›Û [&“´µW½ ¬ $*’ƒ6ÑÉØÛˆ ö¥c»w›´\ 1Í‚Zý»CTà’°ê•4ýŽiOÂW/×°!uaŠÝ‹ã'Z ƒ“Çry"óóH7Ž–ž]øÍ),Êí8ÓVck7ò’ÂcKiJm+jÆqù†fU‚Åîù.'r‹NoòwühRƒžG°éúc8Ã=a\¿x‹¢ÜMå\èmå«8:öjˆU/•ÝÖ” žªâx$jsW.#;ü*Žk·ðÞdW c}; œ@­\<æ©”ó“oñJºRlRÙ÷2–^úýóŸýÙŸÍò’NDDDœ†ÌÚ5¼íoÂóiLŽ­ÃÒ7ŠþÚŸ–×ÝžÁåÛit?7ŒúC*ôù¨óssºOál‡Úæ-¼=oBkM[Á,dQ‰¬=ymz#ÅòÍëX¯=3mÅ^‘`V«ðS|¹È®Ý£íüq4ÜóÛ|Zjã7f6µbøD;\²†ÔÆ8®ˆÚQÿÙ¡âàDTÊ0*²™»7æ¿þõ¯÷ˆÒ¥W¶ôÊï{i €Ñc®de‘•½¨o ZCê¬ò}•î\JÔ]Ì©…i©m¬‡exêÜ(vÄÌ#ôc;gGM­>РVx.;³9w"°·¢¯ÙqÀI Ù¨Aµõî£Uü´l UïÊà©Yí;Wq{]‚Óe…’O!–2¢uä8Zì•tQš½`úœ¹]Z+·nc)éBïÉÔ1¸L‰"""""¢§„¦æÍæ É&˜Œ2'ú%‘ºˆˆˆˆˆˆI6ÀdfŒèI‘¹ ˆˆˆˆˆˆˆ¨Ò1BDDDDDDD"""""""ªx €QÅc„ˆˆˆˆˆˆˆ* DDDDDDDTñ!""""""¢ŠÇU<@ˆˆˆˆˆˆˆ¨â1BDDDDDDDÏp”‰TUåž"""""""¢g{€QÅc„ˆˆˆˆˆˆˆ* DDDDDDDTñ!""""""¢ŠÇU<@ˆˆˆˆˆˆˆ¨â1BDDDDDDD"""""""ªx €QÅc„ˆˆˆˆˆˆˆ*^…@TlŽ¿‹É zÿ7±5Ìo$¡5¥‡œþnâ·~€¿¹„zà×)Ìýê{xc9UH_-àÊ[oà7ö^o¾7ƒmõÞÙVpóÆ*’Ú^:Ë×/àNX-³YlÞ™ÀZ¼°Änàözê}nѳÃðÌoÇ·_ÇdD2qÄò8­Šø\ƒì€g|©Ï<‡{g[¿† [/ ½ÁRN|ûf¦Œ'¾2ß/!lÈÁ<òe|aØ é}Lì!D¶Ì6H4÷{ðú÷~÷|#É9\]vàµOwAÑ¿WWñÖ÷¦<Û‹ê}³¥ç.à… œ(} n`ìí9Ô÷œ;x9Ùe\üÙ5xÿ°Mjo¾‹à'†0Ì|@DDÏ\ù¯B… Yú@‰@Uù°D´,29LFéÃIè#•O5h’„JÊZ.¬d†I9ê9$*,6Ó‘öƒ–Í g0ÁÈË ìè~ñóèVƒ¸ô_¿ãóŸÆ· դ̾±=J¡Pñ",Y\p[e¤c)Ø«¢ê$*+©Ìý/£wêu¤òI„ÕVœíYÂñ|¡w„$þÿPÓkI̾þ\ÛJ!™2ÁnSÛ^Ç–ús|ÏgÔW£¦æ9Ï~²vq37_yùLG3Ð ¢ °8QS[[<@ù,òʾëhBlOãW}hþ"[!±nU0±œi]ÂE‘¦d¨EïhªJý|ÒócXm>‰—2òë×p-ÖŒçò«XXØÝ™°Ö¶ Á¡0gÑ#£F}˜ßˆ{ *V8m¢hËPÄ[kàõX f’Èä´bk0Ã*Zٵ븡ãL«éÈÁŽäÒ5ÌšŽc¤±TýQ7póB =ç{àØ×ØPóy¨Z±¤šÁ¥Y3†O·ÊëâŠIeEÔ TäÕ}ý(3+¸:iÀèñÆ}]lE™®È|æ˜>BòH…üð­®buÛŠþóƒ0Ì]æ£Ù Ð:Ð ×n $ ßÄ$BFLâ}4’‡Ímƒ¢åHZÐ9Ü^Ê›*2‰$²¥ì¦Å—1áwa Ó½›·$£¶}Q‰ìæ,îä›Ñßh-r›Ó˜Ì4ãX³½ˆÈ"i–¦7ZlMÍ jËOGƒN³ŠdҊΑ¸äâu$µrÓ–Ó8Ñ(êÓ‰môºûÎ:˜Dý½Ú†»jÒÙæ¯N"×}Ã^ë®y¦.àŽý$Îv:xÝ b¤üÅbëò/0Ýö9üNí~üÍ+hþêïat{ +F u“c˜¿ˆ-ïYœ9ŽÆ­wñÞu?Âîâ[óCø¤§P?)›¶ïê/ñî‘§/ÔØÐóɯ¢}ù—øÏ?Wð©ò TÝúoøNú3ø­Ñ üð/g1ô‡_DŸeÿL2ª†^„ÞwC]¯ÍI¼óV xáÓBð¥ÞŠÙÖ%|ûGAôŽ¢>6…׿3‡¦¯ýÚoÏÂqöeôë•Am—r îã¥Hv ï¾¹‰Á×>«¶Ë¿šAÕ±ÓÈo,Öð0þæ8ª¿ø/ñ¹+t&"¢G‰ø2 bØ:‡«kVÔU[‘7î UD—0¹]Y”G*¶§o`ÅÞŠ:“ÞiÒŠH$€ðv m3á¢Î!œl·ßWvåëX×Ð\µðÈ!§îŸJ‚¬(wϧ%±tù ‚Uõ…†W&‚É^ƒù¹ÝI’-X†Î£ÏÀŠ/*j ; !W°´˜Þ—¦UÍ­ð˜yÜé#úNãòø$³†„ÔŠç^hƒUVÌe‘·Ô£Å~ ׯdpâL7Ü¥(A6)*¹LZ©D.‘ÑÐDÏ@ÕvêÜ*²ñÉ|¡n¾½´¥Ñ†í@ ”• °yLû YV7 ¶u•ò¢ŠÈæ&ò5Ý{ySË#“Œcciùæv4­H'Mhêƒkí nIÝèkJ`öòJ!H¢b“YµŒÍgˆ‹¼®mÎaÝèñˆÊ¶º;si¸ªÛî€k1x¦ã×§±î9¦¯*R‘d§µ}}X}o KõçÐaÜÀØ­ZNvÁÍh=BZ&ŒÕ…eÒ2õmèhp@¹¯L]Á¬O‚·¯¹|ˆ4òql.-a=’…b¯Ck»N# ï·…ðÄOñ·ãð߯?¾XêR¸ðßcË0ˆùþ|[S°Ÿ|§šÄÑjûúV2G]˜˜¯‚åÐÖ¾漢™~ßõ®åE|ºù¿à®œÀWôTj 3¿|¡¡×еüÈ"¸0‹”¨„ªÐÒÕ«qzÑÛWzF‹Ã®¤Pµo¹rí^xqPÀn¬- ºu¿žkÅ'þ¨C\À »e¡´‹ÂÿÉwñöF=¾äV±yáG¸`yôñ!dnüW¬/ãSógºñ|7ƒDDôHøð ÁmŠa3Í Š­5.3Œ ª¦b&¾É&Hæ“b‚lqÀn1BÑì°#ðoob³Úˆz—é®@ÆêÜ Ǽ-ÜÀBH¯E‘oàz´ ­Ž|Á‚á4²cq˜E‰[Ý1€f»kM ::Zá–☿°K:í{IÇ­2¢ý~G«ÒðEJÝW$+ÜNŠ,ï?ÜMͨ6ñpÓGƒRÝ‹s/ö‰L2‡Ës˜w»gÈe‘:OâtUÆÝÆ“öÿ³÷^Á‘\gžï¯¼G¡€‚÷¾í»ÙM'Š"%R¢,Å‘ÄI#7ºw4º{çÎ<ÜØ}Ü}؈û01¡Õ¹qFCQI‰IÑIm³Û¡ám¡ ”Ê»¼™Ót 4MKÍïȨBVæ9'Oæ1ß?¿sŽÚ©UËMµ¢gÁŸÄãõb%N<Zó¬È'ãjùÏ“ËåŠda³j@és—=ÇÔðóé‹7®B‘ñi|ó Nó%ô6Â|¤@¶p‰ Š6jžúƒ{¨¯«#»°@FýtëÕº$Å7:ÂÂbœ£Œ¨•N(Cqº~t1F`*Lº>JÔhÅ®všÓ‹!õ‹#Meñ奒ðqq @fu8\!C<™‹§™[¹î‚â¦ã@'žÏ’¥É DZo¢§¢ŽÝÍd,:òá9YÒ9ÞUsz‘Ñ“çI¶î¡»1GðÒiNgŽp¸¥Ä.̇š$¸h¥B@v†ÚOŸ>EÀÓGO·•Là§Îä8z¤Ûux¶oD‡¥þ(Ÿýªƒ S€ã' ÜúÀ‡¸å“üôÔAëgðezX\ràYU uuìùt/qæÍ9æ /ÝõtÏŸbi!Ã+gÕΘrßMwЬÛÉñ·ã}™—†––ãÊÕS1ÿ/„‚„ÒÏñ¬º»¦ï$Ï<¹ü³³ûfvòäs!μ8‚ñÿø,1/ 1â<ÌÑ–Zjë¶’ìœøõ jÛ¼üþ•>wgk‚š²ÄÅ_=Ä Ù>ú«£jzæ›oàî{û‹®¼ÉØóZëâÚ͇nÓ‹ø!‚ ¼7d#D µô©D!:ðÏLgõ"à Fª76õf*j¨·ª¶’AO!_ 2b*8qZÌóv–õïªò‘ ‚ö6™Uëýµ9Ã^ñC›ú½Q;¶í¿Nálé§oõõj&A*Ÿ&22Œq–Y]5ͳà oH’Å®Z^3–Ê ôY‹6¾ß‚Ë¥v3´‰@”,iS­"~ï+ŠðÄy¦Ô¾®.·ÄÒ¢‘ógÅ_Òá©Äy2æecߔ좯QóÚ2PYçb!àǯÄH¤2ý†b?ÖZãŲÒ1ÕÍØÝÕèRœØhl[f’Y`—§q÷.\V£Z?hâÃ!C·ß].3͉ jÜÆyÂÕû8Ú§ Y¦Oœ!SfÍÁMcg¾1]'] µ›½< Ý䪡Ág2'ËâìiÄêŸÆUßNGæ2Gül¶Ø—ÖÙé?\R‘¥&8~ÞÀރ͔ém ªÁÉèL„|Eæ f5?Cs!ÌÕí×ÅHÞ?äƒcLY:¸½Ñ]|>íýÍŽiÚ½"Ðå “kéÂsq¦Äá»4I¾qÉÍÃpG'§£5 :r¬AÁ|žëB1 je—dqi†±Ñ<Í»+qÖãþO{Ðý9¯ ª™&>´âºQXò±ä¨';ïû«‹ýj™ÑÝQœÓCw÷>Æåhÿ$¿+ìCë#¢;9^}JÚoâCͺ•‰Ù’ÃOñ¯oÅȪw¹îƒ_àSûÝËBƒR@1X±™«©ÉO2ûúÙ•§Pݯ7b­Ð1ô‹º÷Aîí­X70ï;Á¯ŸU÷åY:ÙußÜÙºÄKÿò+žoûm]ÍÝüSšÞüáïÕ;^ϱOÕzõÇü°ðQ>©)òŠŸßýëë¸>ý G<â_'‚ ¼˜êéö\d2ÒBNmËm•x=y&ãeŽUò¤cªA•Õav9)g ‡“¤”~s½Ó}’Â?™¢¶ïòüJÂO`1Olø"ï^êÌy³’dÍ«FŽÛ¹Ü6›«hë«Rû{a.½æÃUíÄ\"bèl^Zê]%®Á––rTTº×wªrIæ£i¹ÏÂû=žö}Eo ¥èâdϾÚâ\9¡‹Ç Ôïa·'ËütkgìÄyâ•UXµ—êqÚL?…lŒhÚŒËàüñyºnêÅ•‹372JPïÄeÍ^.&6F8hìê¦V+§ÚÄ«ú•I’Ó~.¥±¶ÐF.ç4óãªÑŽPœÀÚåAQ2Ä£Qµ¾È’Ó/¤H­ %ª8îÇè­ÂeXàÜy+û<9–üãŒÅ–=@–ò•×¼º¢¡ªÚÑKøRZ4›%f6h¡ñ¨K^P ï"õ™_Ââî^kÃt7øÕr¨à±éÈ…†δr°ÆÈÐÅÒ¶Y!¯ oS?7£€U-SFW%s'ð/©­®ÎMÛž~Z®[MõGBn)ÈÌô43þ(étÿÌ4ÓÓjç(¥Ã»§›Åg_$Þ½›ê•«Í‡˜\â„ßJc•ZÝô«îªÚ[%ÝzOˆ¯W+c»ÍŠÕjÅ”äÙW³½µº£¤vàyÎD Å߬6;6³þЇpqƇ©Æ‹­é6¾ðgÇH>÷Ÿ _c¬U’õ¹çÞ{¹÷Þ»Ù[cÂå­TÃlãÎûvœV;…%}ÌJ­¢.½ gÎåèé­^N·¡žC ¼öÔi"©A„÷ŽzÉÙÐC†ÐäþDŽÄÒ"ñDŒp0DÖ²2ÆêPÛ¿6š]¬[f¾Äon¥qm̪ڶN1VWªÆS‚¡Á Ùt€©EžZ¬ “„KY%bøôf3j[ꩯ_ÙjuÌO…Y7_«ÞCwáñ9{XSŒD<ô÷TÉ$†Âû׬ŠÍ2|iŒ` ,éTŽÅÑ3 ók/ :' ­Ôx«ñVW`5Yq˜²„çãØ›pòhë=%Ëè›ösdwí•CÑNšúq°¯™Jër‰Ë%ẪbdÔ[Ù»›ª… \ð¥Jê Þö^Z<•4ô¶Qe2`sÚЩ].¯¦-Ÿ%›+ ·˜1hFâÌyFè¢×kRÓv€›÷ÖbTm£ÅŽÝ®mŒª!XX±O´ãOž:ÍéÓêv~šEµ^:{zùÿS'Ï1ÛPóé´vÙð Í©5ŸZû&XðtÒìùCxwÉçó—mÛâ³hÄh(¨ûµÂbh(EsOW84ê]´ì=@»[·e9µL%ææ(´àØ­·s¬×Ää™áëfwÞ ¶Æ~Ž4jÃ}õ dÙ{p?†ùi"fõòº‚g…eM¤0u|Œ/~Ã÷¥5–ÇIãêZž‘H‰/‘´¹Ö¹šíôøµn[ð$¿üÅYj>ööÏ?Ê`º…;?ÿü^¾çÓÜÚêØÐ1*}‘ߟvsË—–;Múê|æ‹fžøÉOx4ÿ ÷¨Z¾½£É¤ÞÀ<†’¸Í-wòMN+ø6{Ä™ó9FZîâË^=±Áå<¬Øw7Ÿû7žèã³ýQšA„w¿·81gb¤U£!³0Ê…dš”¥ªä3U­=8 qÎæZhoR £j Å3d3FLyÚrzSI»•!0ÇÛÝsù-qj–‘P%­õ‹ÌšwѬO378®­ ×L––ú(Ã#ŽôV¨‡pvh‘ÊÝè?Áìø8IÚEGB©[kO£3ãEãNWÐÞǘ›ò‘±ªmyH‡»2I`zœ€zm†ÊfÚ¼Vi[…œ±À43sâé8IK;‡z›Šnî…J'ñóopÖÑÊÁMØ‹e,Ÿ¥Mœ˜]ÂèpªFVeQL¸µb’ÁÑ)Òyš‰³¡k.OÂÆÑ½›&—ƒZôs™,5¶I¦æ’4»%s‹”ØhŽzÚê<+»X85F¸®{“ ÉJmG3YÕ(Ë™Õðõ6lv'mª±fÕ ;O7û¢jMêï†O»ÖŒ>;»w[WŒDަ=nZ­ƒ–‡ÀìÛtÌ2†ªnº§87šÄ€®CµÈ(:áÝE¯>ç6Ò M\™óCI“ÎY©²(,ŽžgVQËÏô0ÃJ‚H6Ffdcs›ZötÛCÅ¢ÚÍ ´®,ÿdö4S§¿@$£PiÕ]‡+¾ÈÆæñ_â­ÄÃC¼ôüËœ›ÓaÉóôÏNàþ臱¼þ8oÌ­.t•ea,@Ãagžx‚×&«éÐ&GU DFÆÐ55­9¼¦ãóKL¼þ ~øðuûw¶^^îÅà9ÀýŸ;BâùñƒG_alI­e ¦ŽŸÀ— riÄÌÑDíÕ»wó‰/}‚}U—E yrÙ,ÙlŽüN|írsŒDºùøÝët½‡Cý]öÂ5»î ‚ ÂN(¨FR #‹‡fÕ¨ÙÓßKkµuÃA1¦fÚR ½y–1miÍY?pŠT4€ßïÇ?3‰iå½kl Ÿ¡™&»nM™ƒÖvÜÅÁù6ì¹IÆrmôÕ™‹Ž÷–¦>–ÎsΟÁ쬣ïæcìªQÛ\½ »»’ÊÊÕÍi­í4àn¨W;oÚDjGÏä¥Öm¡¢¾…ZÕØÓ–ê5(Y—ˆÂûÇ*tTvìáàîÚ‹:MüÈ„™šŠN›hÚÝ‚-îÇ·˜]6šÜ®¢@¢wÖÓÞ`"â ‘3Y°V5Ó\]M÷¾®åÕ&ÒÓœ}k‚ÐÂ<ó¡9†N°˜âü€ŸEmEÃè"¾ó˜É,§Äh÷à­©¡¦ÚyYp°4pàØ.ªÖ”Q¥8±i,¹„_íÏâY5¬Pˆp"C&.~EâämÅn=ÉÐ’6])ccóä3Q&. (Øq¹\¸œ6,fÓÛ4®LTµ7¹HÄÓA½UjáÝÇR×€=ä#´b*g‚>"îF¼&µŒ6íå`o#ÕUUTUU`3Xpy<ص­ÚÈqµüÅ2[…¡>Õ5õ¸ DWÜ' IµŒœT\§I@nˆU`–_å÷þ*v÷ßÍ×nsCÔÏØÅ<öÛyš>ò ÷õ¹ÉÕ&yäÑǰ~þ~:Ïð”o÷¾Á‡þ=ŸÅræy^›U+¹NîùÄ<§G1õš‹ãvr|žàkñ›¹.îýÊÍ´»–%nEs‰Ë/wÎ î^îùJ+s£L˜í<Ÿ¸•ÏýE5³¯>Ëÿñϼ¦v¸œš{¯^›KD§ fDgªÇZs3ÍJžìì)~óÌÄÊ JµìBdŒ·.]b2k¡ë²b¢¦A›s¤›?ÚPœ©wüôE†Æâ˜,/hðöqÀ+•€ ‚ð $ñFñvöc±h·k;´ÕW“\3PâÓ™ÎÚiT (sEÿbÇvWo‰ÅB]Í¥ïS³Ç£Tut^îà¨í¯¹f}µ˜ÔväH+µôïmĪ[ž –ƒGÑ|MkqŠOõ˜´!««Lë—Ô;ð6™ž÷Sß×KýÒiΫésÆôTlǹÈé°Úã«“Û-¼?І¶âêJL)Χ±0r’K39¼½¸½y’SçÆ©¨ 3–²S§ø™ŒÚ9P³ÄBÔHg‹—öúygb¸Û-Xta.(Xû°ém¸yò©…\F-ÅFµl§Â– “.WÒd ºµ’Z¿[)ŠËè–¾ØÓéK .%®ÖAÓèÛr Ú¶\¶-Tj5‰nŽ®‰–¦Ë¦RÆ?È…ùF޶ê1hýr³—]û³L,¦(TèY¾À¥yý7õáÖåÔž·®d ­®Z ¹\‰ª¦QgPëýZý›åÂH÷›i ðúézzz[©±äñÞ5tÖföt]àÌñ7˜´B:ç¢oÿʇ‡ªÕUÐÔ5«á¨rãÐÛB”±“'Èí¹‡ƒõ[„¡†ßß®þöÚ«mF²õ{öQu\1t,¯°m(ÙL+›6ÎÃòï|gøIIÍrf0Móþ½49/WÙ”6QaúøØssqI»ôâ"—‹ÌÔg ^‹[z’ãcFõ¦uRiL2¶“ã7ñkË.2˜kcO“ýÊ·@Z­MÔ´öŠèÂÑXfݼ:³›úÆ*ÌñIÎûìô÷zÕ›•g~x\ó®5•X‰sâ¤[ÏúëWÜ .þ~×­7Qì+ªÏɓǙ6v°_ N¤,‚ ¼Gd§Opº°W5$,Wþab|œyçnîr¢d³jdõ­j–ŒÚq2›õäfNrF ãH‹¹ÄžçÔ˜}{ëʸ™+$ÇsÑt˜Ã«FMÁÏ™7âtÝÜ…óŠÆ9ÃÔ‰·PöÞ„–L%µÀÔÄ8“‰n>ÔX ?Ÿ 136NÔÙM§=ÂìÔ ©¦Ý˜GÕv¹®[2@в‡£]NñÞ7düç8~)„µãýî §‡a¹ž˜½Àé >”öÔÍO ë¿‰NF9>êàÀžš5QIOsf@¡ÍÆgÙÍÞÊ8³óK$ÂAÎZ¬á€ZÆZ¨PûÌ™¥–,õT¦g¹öqÐ9Î˃9j4Ïéü"T·iZE 1SLΤi¹å õÆËbˆdšèJÇ»SË.5Ô­t .7ù‰ìÓœWÓ;h¢—÷ò$ËiçÇ,ìª_d²ÐLMbŠ­Ë½æš.:]q9fgæH9[ÙÝßIM 9O<0Æàð KÆ*:v÷ÓR!BˆðnšÑùâœ9F³áÚ=™¶ C{‰¯6醷þUøö·¿­ù¤W¶ìÊ–/Ù”PAá™ü¢Ÿ9ÅKƒûJGT%d:jÀ[W…m‹¾~!&ª¸ñØW»Q¢#ç Õî¡ÃU¾k•øX0ÔS¿ú»’"Êá(u“¿É訆ϲ-#8—Äæõâ\“³˜±Pá0’]š'œ³S]i"Nb®ª(ÎoÍÚp;ÄhÞOFTެ¢y6”7ÿóÉ(qK-WyÕ2¡WÒ„}jÙL®{í§–µVšVÞ,*©EÂY3n§uyî»l‚X"KÖ¨•/ó²1UH“HÕpc„Ò6ª+ÌZEAtIG…Ûº6/AØ¿@ÎYƒ×eÚ‘0YœäÑ yMg‰ÎÎ0Ÿ(M¯[M3¦f–BÊ?ÄÈ¢•ÚÆ¼Îri*‰'(XX¥*@AAAAx³D>‚ ‚ ‚ ‚pÃ#ˆ ‚ ‚ ‚ 7<"€‚ ‚ ‚ ‚pÃ#ˆ ‚ ‚ ‚ 7<"€‚ ‚ ‚ ‚pÃ#ˆ ‚ ‚ ‚ 7T<þ¾ûî+ÿôÓO³´´T<ã0=AAØ):ÝrïAÛ %›ie³hÛw¿ûÝaÉ*AAxSn.â‡æõÑÔÔÄÇ?þq¬VkQèøÎw¾Ãc=F>Ÿß2|ƒÁÀg>ó¾ýíoS[[K*•âÉ'Ÿdff¦è R:‘êÆUc6~AáýÅ·¾õ­nõ#½²eW¶|ɦÈò.‚ ‚ \›‰÷ßQüÐ<>>ýéOó³ŸýŒ\.·vüf›vŒv¬&‚hçjahaiaja—]AA¶‹ ‚ ‚ \•­VrY?***Šžš·ÆC=ÄßüÍß'9Ý)Ú°í\- -,-L-ìRd;éAA(EæAaÛlôÂ(õÆÐæüXõüøŸÿó‹Í¸óÎ;¹ýöÛ‹ßµ9Aþå_þeÝïÚp- mÕ˜»îº«öOúÓ+D™DA„í"ˆ ‚ [Rγb£çEWWWqSmÎÿüŸÿó:oR‘B;æïþîïèïï_Þ'?ùIþú¯ÿšÙÙÙµãµ0þËù/üò—¿,ž§Å122²&v”>D Aa3dŒ ‚ ;bã¼Ú§¶Ô­Æßÿý߇½l6aêªøñÆoð_ÿë-nÏ?ÿ<‡£ì¼ ±X¬¦†Giœ¥a ‚ ‚ \ ñAa[l&:hKÙz<žâÒµ¿øÅ/6%¾úÕ¯®‰_ûÚ×Öö?úè£444½?ÊÅ£…©­ £yhqÍÏϯK“ ƒAa;ÜP J:ŒojžDájGH-L2xá—Æ·sü;@!†oðç‡$®ée•B&2ËL(…rù‚ ÏΕß/È.‚ ¼Kmn‰—FgggqŸæÉ¡­ä²úûFŽ=ZüüÁ~pE>ŸïŠUeVÑÂÔÂÖÐâ*WÈ“/ˆ÷‡ ‚ Ûç@"§~Á÷¿ÿ/Mç·8,Íä ?ä~ú#³>FÞø9ÿü½§Ž+ïHÊOø–gúùóØÙñX¢¸ñÎÑaH]â‰}’•´¦Çžãg/ùÑ¥Ëï/È‹0Aáí¶lÛXuE[¦VãÅ_\·ãpmD"¡÷Iµ=üÌýŸåCúÐZšË¤HÄ Gâd•’ån žþÍs%q)$'OpÆŸßêï8L£¹Lƒ¨äˆ/¥0»œ˜Vιxz‘¦Ã]T\qŠB6#‘NEšh4…µ©›6iná=¦d~r_$ƒÞᥥ½w± «å42ÉàXjzèq.0¤}÷x±a§¹­š²ÕAzžñYM›ü^<&»À¤OOS«£n»éy›õëVqæãÌMNâjqÖÐÚÞ@ÅŽãT(ä ªEh(ÚMÛɇk!fV©§¹ÒxEü©¹QÆ“Ut—»Æw¢Ú䚊y;•§®£«n9-KÓÃ,UvÓè¼þµº’šclÞJGsź6æÝºGJ6Âôè¡”g]mõÎ+„‚\tŠaŸŽÆ]ÍeÚÈÍSRAFÇ‚¤KÞUè,^::Wóþ½å†ñQRúøÀÑ^ôCÌnöÆGoÄX˜SoBxÅÃHím_àO4ñC‰3ôÔøá'¸øÖó<ôO?åÔBBðeþåßçÉŸþ’ߟ~ƒ'~øC^˜Ê¢Äyò{?â©ÓœùÍOy:v®?´ 1ÊÐïÇÅùEF^}¶(´6‹'rœŸ<ò Ïüø!~}b’ØN)fÚîü0ƒOó«_ý†©ž{8âÑo±_AÞ9¡£Ü§†6©F Xó„,õˆ,ýÞÑÑQ?~þóŸWxùñ\œ×C›è´§«“Aë-Šçh[&™ £F¥Í/¢aw¹éíiÇc±`1©q7vÑÛ«vX]Ë"‹’Yb~nŽ9ÿq“ÔÌ0çÏœäâlÉPÑâ,0|z”H‰Óh!›%µ"8!‘U®è¨'ƒãL̆I«ÝÑT(BÖ`ñCÞ{Ëßé×¹”pÓÒÕIƒyŽ3¯_"¬¾SL^ðaéÚK_½ÂÔÚw'V‹qóòªÚ–­~×ÈFñù£äv’ž­-sÂ3SÌo56~Ó8ãL¼ùCI5ÎÎvjuÓœ<>ÆÒN=Þ ~μ2H´°ƒ|ØñýJ2=²€Þf(û›otŒÉ¡1‚¹wéyÙìšÔ¼™“)©ãcs C+S!¦çb®åYÝ)ÕN=~žˆ«•î®zôÓ'9=•\ßfæÂ N273Ç–'Êg°QYíÅë]Þ\ù0‘‚Óuj@o…¥ÁAò=Ÿ ª!N·òþÓÔXF0õr×'Æxô×ÿ›ÿï×Õ4·µÓµû ‡w×aÿ-¿žîå‹ß¸¯^-§Â??wžžªÏE FÝ·ÿœ›Üj§ç­ÿàŸÎNs¨æ5†›>Ê·?ÞŽ±°ë?<Ãùè!n©,¹›z{﹇èÌ£;¼zrcO–§÷ßšÂôå¿àë-æ²Wª³ïâî[_ãï_pðÀÇk׬Íö ‚ »)†lµDn¹á2ó×ÿ‰Çý.§¹8Á)…<_þÊWùÈG>ÂÿþÎwÔ¶SóêP;y6ùLÅjÂPÎø[§Xpö±¿!Á¥³ç0Üt€&ëjG.C:™$W;ŽÎ:\•^š»°šôëߢ¥â¤ÝuT—ß|M^eA1“W»Ãñè,Cç1´d“cå<=mûدE PÕËÞ CÑàšŸIboª^ÿDÞ—HÌ3æ‹Êé°Ö´ÓÛj%4<‹¡½oÑã9ÂÔdžú¶* á †'HaÅÛÞC«ÇDÒ?Ĭ¡Î3é9Õ0¶´Ñâ¾l<"£ &š8r¨qÙÛÙµ]‘ß18SKKr„é%5´±‹¤uiæµïãÃØ[¼¤Rúµ4Æg‡šŽ’³ÖÐÙÛŽG—S×mq žM¦ÍÓÓαšãö¥ üÖö·š 1±R;ïy§ví²-“mÌ óæ¹¼0Âp¦™c»WãÜOfé-æb¸*¶Y)‹Lœ'”L“9k¤cW75ëòAMÓÂ8Có¨5u½´TšP3±¨ G|†©HWk=uöMmBdœ9{G,º2úG€s}U#øçs4Ôgð±v¶QiXö‚˜ ;h©ˆ2vÑÝìRëãáñ ² ÔdÕ´,š±-M13SßÛ‹'6ÊÐLSm}-n Jé5½çX}⾫ÆgÔ•?×D–Èô0cªM™7ºhèÒ„{cqôÁUŸ·\”éÉžöì×t=[“ Ž2eíän5о§•ÀëãDšv³üN=§–áar­]T]ð•ÜÀ3šúÕ{¤Ûô8ÉIuí²§¨’˜ääD={÷¸1\§ZêÆ°“•%/Å©õdΨ©Oqéb€Â&—ì鿯ÿíÿËúÒG8PŸcè©ïóýߌœžæ6ªŠ¹¢S+ËV\¾IæÔ€ôu]t¬Œ)1Ù¬ä’)LÚ¯¥(É‚V€#D²f,Æ«¨È&ñ´xÜÝìj2oq­QFGS¸mã¼ùV¸dâÓMö ‚ »Œ¶ì­†æÉ±•ø¡ uÑŽ}ñw/a7)dSirêogÏž-þ® ‘Ñ+Z;kÃf5©ß/‡U[WSü …‰*\… “³I¬ÎÓ.2è‹Û>µš&5œÖ*+Žê.Np»JÍ$…T8Õ^k6 Oµ‹h(ƒ·½…J‹›&Õ0íê^ùÞ£Êæ%sKÅrš]â丞¶‡Ù[gàü,™ÜâÚïå¯a³žõV鉒τ™¹4Èœ­ƒžF™™³œ_ô²çÈaú¼’y“N5eÊåÅæqÆÃQôUÕ—ãÔYi>tŒ®#42~Ž‹¾D1¿•ôƒgG˜Ïÿ#6}žsjVйhÙÝŠÇZCW'^mhiº ÚW{Žp¸ÏÍü[o1£¦II…˜¼8Êbõ.îo"3xA½Ÿ›¤UIãOQßî.ctjÃ_æ1Ô6ÐX_IØ?ON½cz‚±¢;ˆBRµ ÔLfvaùz4ÁXÐÏb–å´ ÍoÞÇNcog,ÛÈÞƒ'Ï1¡ys”\Ód#ÌŒ3¾²Í­¸,lö l'¾ÍÎ-„9ãw°ëðMì²±06KRÙÆóVˆ3õÖÑŠjìZ&nu=×VjID±¸+ÖDÕÕ¶]³’ 1”i¥·ÆtŹ…\ŽüŠÑ½ùq«‡g NaílÇuUˆBQbC .ÚɽÁ믿ɴRAbp (\\¡pE&ž£èL¸êºØû'øÒÈ ° ip…R_ØÍ-½4^à¡þˆ=r÷=÷±cÆtúòñh^¿˜Í˜·x@cçŸå„ë¾þ¹Ã$~ÿ,âÊûAáÝ'‹?[ZZÖ Wu+Š$MMúâ*.:e¹[m犥BÅÊg{[kñs)•¡ÍkÃd2a´yio´£w¶ªÆ…sÍÃCÉ.2ã°äat|ˆÉ˜ {|„ÓožÃ·êÞ¬öØôú#çýTöï£Ùe,v‹´¹GŠñ=TÙc,%•µŽÛâì(çNqQ휧æ&ñI©éQ\nñþ„¢áÔÌ}5¤“ŒŽùˆåÓÄ:<µ$gçÈ(y)ªÄ|3¤­Vµ,Í03—ÄdŒâ× _[3»[“œ{mGo'¬•\.¯vË×Ðëõª]¬`4›0¨}j³ÅŠÕºúÝR2·DE[K;³kmû:×çå¯aó~õæéY6Dr¶º[<ØM:ré &Wf›ÛA!‘T Y…¥Íòb3‹@½VÃfCðÔ ,“ŒK®¨·ymÞ¢©ÜršKÅÕß2jNèÐ4o;}1,½nƒÍá÷¡4vPcQw4ÒVµÈlp9LÅÝH{•š¯–*<65üTùt5Ï—V­e'^a.¨§V5–5uT„gYÈé©j¨Vócެ÷`¥¡ú*o—+êht1¹«U£Ý†·Ù…ÑXAUEžDòêö6GÕòvÙKpËgà*ñmv®ÎhB·èclÂG(çe×Þ–b»±e\JŠÀ¹ã :èó¾[óM)äµöÐPZ Œê3QP÷U †S´ôÕ^i£j"Ú¾´k£¶:n5¦äc‰:õY2\×zê@âCƒä}’O}êSËÛgï¡?{‰à• ˆ>=Î ?{г¡ÕW:9"y²n ˜Ç™Î,Wá¡Rí]Ô—½GBgÞ ²çs|ík_ák_}ìölÕGg“xê®r7”Ä Ï½ªçö»ºp6Ýν}~žÿíéÍöK;,‚ ¼LOO?ï¼óÎ+V~)ÝÞ|óÍâqßüæ7‹›jð\:Í-·Ý^ÜæÌ[d 9²é©TŠ´¶„Ëʹ¾û®â1ÃããDƒ œ-•dƒ¡u“ª[Õ¥)Μ%a0álì¦ÉîÞ=ôôìåp¿©ó“+ËÑ«üñ‹„ª{iZS/²äµc«_îx¦2f,ZO.aäÄIÆRv…,žÝûh«v@lšó'Yˆ…˜[ÊŠ÷¥ð¾G‰Oðækj¹R–ÇüW©†¢V~õ• Ô¦gñ'æñ§ª¨W‹O6—Ãhµc±jb…ªÎôx—z³Íо&“Í_Q®¬v+™x¢ÄÓ[!Obs:¶e ærš±·Òc×YpU:Ö 7Øì6c«ôhU‰ÞlYYÔ@‡½¡Ýè¼qê$Ç/Ähè¬UãV6͋Ͱ9ld‰/µ> L1¯yèLÔî¾…£]îb~èì-¼õÍÅzNOe÷1nÙå½ê<yMØYÍ'm5JÕ@ί¼ê7˜.KÔ†p”]‘\ÉQÓVUÖ>RÒæb ¦Ïçø©)’…frè=ÔÄ}øf ;¸ÒVÖVÝ,±¬Ö w:5½kéÒ­ÓËbª¤±­­è}ØÖÖJÍŠKÍVÏÀÕâÛì\»‡[ŽvàPÛßàq~÷û‹¨—»e\…àsU»iMNàK¾[-Œ®ø<¥“©uâT:gE}´Y=ÇLÁHlr˜¡ái"™%f‡Ç ®K²ã’~?ùšºo©ëÃÿ J‚¡K):>â¾\é[ØÓ›å©y>X·~> }Ý|îî§yô_þެØrqRönîýôª«s|rïÃ<þ½QíÊ¥‡O=ÐyiºìÃb¯­!ýÄãühP!É’WÌÔû4ÜÖŒe+ ¤áöòñ¤‚[œ•fü·/‘:úvŸ Úħÿô O& dŽ>¸aÿoxåÐ_pWƒAAxG»K+«º¬¾9á–[n)ÎáñßÿûW;Éåsÿ×ÿú_|üãçË_þ2J!Ï[ç/°ï^>ûÙç§ü‡Ú®«aê ËolõÚk Eëfò±ÞS ãÔÀºBŠÈ\˜øÆ¤¹Î©9púÅ3¼âR¡Š¾C–C †ªÌ0Q¥ ›ÑH!m¥®ÁŽNs˽p–h—„ÎE6†Û7„ÏÜÈ1ÍûZíÐ…ëp¤!ÊÙ5t4¸péÕÍ]Ñ8vé¯Úw{ª¥ÝÞ¿ä#AâÕÝÜÔR^í£_L¢Tk…ÏMc]†s&1U÷cWë “§’üœ®hô™tÚ¼£$lÕ¸³A.›Ø{¬™¡sC„oí/ÎÕ³Úÿ6Õ4ãc2®–E‡¾¸šÇĬž¦ÃÚü¡«{®J'±p„|CúÔ$'Î)ô÷oã6 oËôäಢ­22ƒ¡÷f5˜Ð«u~eõ×fy¡+§±¶™ê¡q&kéª0 ¤fRkóï˜^­Oóe¦ Ðá¨t“š ‘mkÄL‚PX‡»A­·9öB‰M1chá`Y÷8…Ì\CÏÍÜÔ¬y6¨¶ÔÔ›¼ì‘««¡¡&Áɳv/¯Nc2¡K¥ŠË£›3 ,,)T\çømœ›žc†f:zêhSRŒ¿~œ…„‚{ió¸ôÞö4תàáy÷Õ¼ ófè°Ô5b?>ÃB¶¯ ²Á"•ô©‘éšöqØ»ê‘b":™ÄUU‰C墶ñȇÛVÇ-ç ‘ˆº¯ÙqÝ'ÿão¥uýÙ×7ì4Ðö±ÿ›¿Ü¤ çÙ}©x’¼Ñ†Ýºê¶f¤õƒ_áÛ·ÄÕN•‡Ý´,žØïâ/¿Zz÷gøÛÎy~ÿÃ×8øçßâÞe‰EIã‘<ÁäÍÍô”>újnÿÆ_”¤ÙºI<·ñonv¡:îû&ë.½Ÿ?ù›þ2YR~¿ ‚ ¼¢ÇÆençææ‡Ã444ð'ò'<üðÛ†£­óï|‡?ÿÊå†õܹs|ó/¿Ñ`FoËO¤Ð;íÅ%þ´7µŸûüŸÑØØÈ|0H*4£ºG…Ú±ÊåÕcBkF!4CÔÛÍnm tÖN.°ˆ÷ƒ{ÖÞ6)¹1ÅŠWûÇáT;fIlZ$ÚÓîv¢'ßd6a'õzƒ£ýš‹KôÅÔxLN‹cc¤ë®Œ]V;ðÁKLèÛ¸©µSKyAá}ÁÛ‚wüožqc)è°:\j¹ÓdL ®†:ò#sÔï±EMsÃ.zçOóÆ>ì† kûÛò,\ƒÎÃx=Lµ¯pn$Âm}•—'þ·Ô³gßgN¼LÀf!ŸÌQÑ}múUWAQÓÔ¼‹Ö“oñúq+úLŽÊ¾Ãؘ¾ê5lâV鉬?Öl·°4ø&¯O-‘QLUtïïWëÎry¡žŸÜ$Ns=ýjœ§O½„ßbÕæ~¦z×Avº.ªÎ×y j~4¶ï¦Ó~ù'S}=“¼þ†›¢å5{9¨)2¡íœcnùÉOÅÍdubÔò}ß8ý‡neÏ®n.^àÍ·Îc»û,õWUÜ¿I€”åŽ & ¦ îb<š—‰ÁÀ?|÷»EAevv–Ÿüä'EáC@´t”¹%Õµ•XôÚ[­]ž#’wRíÕ&TŠã²3ÁAÎŒ,âhÙMo“³ÌI…ìÒ¡B5µîíuü”lœDÁŽÃ"⇠Û2ë œäœ_‡«Â†!Ÿ"–2Ѳo?Í7Ô›Ó‘ás„êöÑéÚáu)q¦Ïžc2YAÏ¡]Ôˆ¸,ˆ"‚ ‚²ú©ˆËåâK_úV«•üàüÿñ?ÊŠ ‡Ð”«Yý]›|ï¿ý·ÿÆ×¾öµâ„¨=ôKKKkÞ«ŸE1d%œÒOA„?¸úT›è9›CÑ›1›ôHm%ïÛ@ÄYAA„m±•À í[\\äñÇ/Š_ÿú×ùîw¿‹Ýn¿bèLÑØ0´fõSÛœNgñ\MüÐÂÒÂÔÂÞ,ÞÍÒ$‚ðWêÅez-"~ÂuAAAvÖ/V=1V·™™yä’ÉdqèÊsÏ=ǃ>X²œâ•¬-/¨†¥« ¡ÑÎÕÂÐÂÒÂ,£ÔûC„AAvЇ‘!0‚ ‚ lÍFÏ^'FÕ†Ã|âŸ(Î ¢¡ÍáñÌ3Ïð /099I («£µµ•»îº‹{ï½wÝñO<ñDqØK9¡¥t[éЬûAáý…Ì"‚ Â;ÂVCVJ…ûzzz¸ãŽ;ðx<ÛŠG[N÷¥—^bhh¨¬è±qŸF©è!ˆ ‚ ¼?ÙŽb”lAáj”›´´ô7M˜XðTû_û®íÓ–­ÕÄ m[m©Ü¦¦¦¢wˆ6χF,+zyhÃ\´cµetK…ŽÒ NK‡¾”Æ]î» ‚ ÂFDAáš(]µeU ÈçóëÓÓÓkû_ö~µøýöù­ÍRn~Ò•^ÊíAAØ."€‚ ‚°-®¶tm9OÕÿW=9ÖŽ]ù_Û¿ÑË£ôÿrÃ]dè‹ ‚ ׂ ‚ ‚ \›‰ ¥"…&~¬þ_*žèôË^¥ž¥ó{”û3ñCAa;ˆ"‚ ¶)7ÿG©²ºoõs£çÇåc. úoó~lg¥CAAØ"€‚ ‚°#®&‚”û_C6Ö¼@ô—çýØliÛÒßKÿߘAA„í ˆ ‚ ;¦œ¢Q: fuÔUácÝP˜ ó~¬~ßè=²Õ?AAØ Û@V'3AA(¥TYýµßPºÌê¶ŠN·ÙÐݺp6ÎRzÜÆ}‚ ‚ [! ‚ ‚ \3¥‚ÅÆ}¥û¯ÊRÞë£4ŒrËׇ݊ ‚ ׊ ‚ ‚ ¼mÊ !¥ûW¿¯ý^FØØLôØŽ ‚ µ ˆ ‚ ï› !§ÌÒ¶[/‚ ‚ð6DA„wœÂÅž!è6=o«‰OAA®@AAx×¹ÂÓ£Œˆ‚ ‚ ¼›è% AAAA¸ÑDAAA„@AAAA¸áDAAA„@AAAA¸áDAAA„ž@Éõû§”u{•T(‰²Ý`ò1æfB$•D}-ç\÷ìŠâ,‘»Öó•$ 3AbùË» Éfü‹êx)Ä NM29¹¼Mù‚,e·3”tßʹ“S3ÌESÞ«|ÕÒî £=¶Ú³ê›OlÿY-9WAAAØ7€¢xýa=.1^ „Nü’g‡3Û6*•Ô¯?{†àVpažSO¼ÈHjç\o6¤¹>ïž:ÇÒµ¦9?ÅKÿþ4ƒ«Öw6Àk?}˜7B: ïõµeFxîÇòÛSg8sæ '^þ%ßÿûå•ÙíI1…¹ãüüá§xõäIN¾ù*OÿÛwù‡ÇϽ†¼Ùq¾ªiþç¯ãW/̼ÂO_Û¾xRr® ‚ ‚ ‚°=Œü—`¦}w'O¾|‰ÈÍ·R¥I:…Cú>ëZQx ¤¢A¢Œ•uÔT˜Ñ²$3`Ñ'˜›/à©ïåžÏwcZ³â7œãÒ‘ ˜¤úPˆÚªJ\ö+ÏI†üãF5¼\&º+£Æ£ÃbÊò‡QÜõÔ8W²½&: šw୯ƾ©‚°ÃpWQ²Ä7¤Ù±&d$˜Ÿ] _QOË´!ƒOír<[¡${þ1Î7ÜÇŸïÞ*¯·Jë5^Û*úFŽ|âSô—ÚûÝ÷ø÷“üP3&»•åKPȦÒ꣢þ¿AòÓUös÷§?@¶?;óßû¯Mï⣭†ò×R .Ãb@½o¸©««À\šMo'_3šI³·ž*›þÚî‰ ÂçÎQ0»¨mm¥Îq=»%æÇ}ÐЎעÕõ)‚ãAÌ­-¸µ&A‰1;‘¤²^GÀ¯£±½Zíì…B® ö¾ 2Y¸qQûIQß$3 qò&­l·©eÛ eû)$癞ô½ÝÍu´¶Ör]³s;¹‘žgbv‡y™_öìöG³è^ZÚ©0½ç)ßÖÑŠj‡ÌŒO±Öã¬m¥½Î¹ür[‰ã™$\ò~Ù\ÕNgVI!bfÒG(©`u7¨Ïª—U“Fûmzr–H²€©¢Vý­îº=ÇÆᆙÛwÓùäK Dnæ¶*=…Ð%†Œ}|Ö¥×^Ís江ñf¶™ŽZ‘á_‘9ü Ÿoà᧩ώ㯾•O}XÇo¾ïãæ¿úíº2çú»‚çð%ÃDŽ¿†ñÐÝ«ä±Õsô1†žy˜‚5´U%˜xBÏÑ/<ÀÌ+üø×ašr ¡ñÚ>ýçÜUà·ÿþÓÞê˜ãÉwþÙ'ØíÚPÜ”†ÛRRÍ(!†Ž¯OóQ«fèÏòêãSä6ÂÃ~š?ó5înN3¬Åj¤».ËÔS vßÿ9ŽÖ6­ ¢çžàñ±n>÷íXµ°Y^7¾U>­Í™k¿¶²äH¥ò8\:ÎþüDîü?—…ŒÜ$Ï?2DÿŸ}„–-Kƒ3Éx\sËX,{-_8PàôÏá„R£~–éÂ>ÿ¹CT²Ã|umˆ{i€§1€¾|#KìzàK| a›ç ‚ üÑq¹'U£G†d€Ñ“gÈ=L‹íz•4áÙ9òžf¼W ×€²4Δ¹ o£Úëλ4ˆÝÕ„Û«GI˜ ÛÔßXÔ¶ôšRYðÖ«aÚnßGá-ÛÁ‹o0˜k¥¯­}|–á§È="eûZÈÏsñÍKе‡îf±ÙANJsøH ö?àwb:igy©Ù“'3ãìeW‡ƒ\P½ÎiŽëÀù^Ö•ï×:Zµ{FOž'Ùª>g9‚—Ns:s„Ã-6tê½ Îç©êªÇ²rC 6Ó•÷6»ü¬*ª]ÞQ¯°85ÀgsÜz s&À¹7DZööÓ£c‹ãg9~Návõ7Óu¸ÜBÁÜNדüîb˜[n÷´ë4-AI% õÃN—ÚX$.üœzñ,{n™ÝÖ¹‚ l(±)¨[þ^]áB_Y!ü µ!TÛªth‚Ñ©°ÚÌZñ¶÷Ðê1«-…”ºdbž¤ÎN­¶¿ÒT4^&"Flj˜k7ûZL„'†™\H¡èò(Îvzk´†L)†;2*†[ÝÖ½îe#©²ÊÅ…P”B£—B8DÞi!Tÿ÷zÈG¢àiT;NqR)ÝJŸ}–ñ¨ {b†éˆ‚«¥—î:;zm~²©aÆÔ¶¬`tQßÙE£#Áäùq© Ù³&ÚwuScÙäš6 WþÐËöƒóÕô uÙ€t»ØË ³‰œZ¶›”A)Ûz%†ïÒ$ùÆ]´T\.éJ*Ê¢®†=õ•8ÔÝŽîØæ“+uÁf×] œ`Ü!•×a­n£»Íƒ¹\Ú]Æb8;«‡6 g½võ¼,éÎ/Œ1’iæè®FœÚiûèZ:Ë\¬ g…n‡éË÷0<%o­¡½·*ÕÔ+—W”>c–z*7ÞÇ÷G¹Íǘ²tp{£»(HØû› 'Ò´O!GÎ䦦¦ C6Îdº|ïJžÛ&µü(Mýô7{Š¿Wìê`îÅ‘B=µ7‡âtXŠåÒÚZÏè©E’êo¦ëа݈z«Úvw²ôÛB·ô10lf×Îå›cm »ö4¯ýê¸ZˆÔŽU!J4¹‹¤¢Vî.úš®ô*ÐmrÎæ“NˆÌÌ@ó½ËCpÔ[koiÅõâ$sµ ÖvбâÙa²YÉ'“jǯ¾ì#üðŸGhon¤±}7û›õo;ÜíÌy¢÷vжržÕéPý4 SÄcó<ÿÈôŠÂ&Ô,ì¿Ò=I™ãÕ§Ž~ö+tþ˜Ÿün€ƒôãØ"ß®Lk‚Ð;qm†&núä§è3*äS!.½ð$OoçËûû©zí“ÙFòçC´Ý\_¾ãŸæÌëi¬z=fg3ýóÃtŸr×҇ƻíÃ+ª»þû¿A¿v§ævš¯MëïI}­Öå†ÂÚÜJÕÓ3ŒŒÏlë\A„?62ª²¡åÅÖÐK§Níº/qúRš®#ñêB œ:ËÌÁÃ4fG9u1E÷‘ÃTåg9«î7Ütˆ†L˜™¡îŽ>zìd|§8¿ØÌ±C^rÓ§97bW{t…%õü4Ýê9Õ,pñär¸ÍÖËf’ÑS…e,D¬PE6”¡º§‰ÈðqÅM:’Åݤö†s~s:Úª1¤ÃL^ŠÓt`?›¹øæ³žÃ4Ć8prôð.L‰).Žù©ÜÛDs_+ á-ýT­¦©Ü5mn“Yžá¼l‡T³²·þrÙ¶7öÑ¥õ•–FÊ–A)ÛjÙÖú±¹,ù ]­–:Ãëœ8ž¦¹¾†jo•^w±O»Ùu71ËÐdöýq’Lž<ÃxåÍtçË¥½klgi-ŸÍëþdÅ-_ãáG'éà“ÜÙäDy?œX¾¹&sY·›­ÎÙTTÐé)äK\8ÔïÃòø1Á¸>£Mdéàžoþ?óO153É¥ßÿ;çB_â¨[g¨ï4ÜíÝuÕéQãqíº›Ï~¸i—…®ìƒ©§ùƒŸá–z+ºÊ;éúÇçxÍ×Ã]æã›ä›®lZß™k3`±Û±kÛ¾½—“]`îæcô×¼Âù‹ÕØÁ5åK˜6ÈGî_™äªÏ@\»5Í—gÍ¥Ìöå´î$_3çx}ñë.QÍÃvÏAø£B!—»\*‹ãœQ+As]?½Š”¥‘ôü,>õX£aÿ¼j ¤üP¯U¯ÖÄ ´z† fip©0k=]-ljç,žÎ`r¹0ë ˜*(óIòÚ|J³j¸ÖFRAߺp››/« :k.NÇÈÄT÷Õ 9Ç|¢ŽBÜŽGë[¤7\NE#mUí3ÛIµÃˆÚ†é—üŒO¨vWӷDZ<_”QM»N§VñZ[§°Øäš›„k–y „?ô²Wÿå^K!úÿ³÷ÐqÜ÷½ïwf{oX,°À¢7;ÕeÉ]¶dIîÏ%‰ûÜëȹqœ›Ä/NîÉÉ9ɳ“—Ä7ŽíØçÆNyr‰‹")²âY²¬FŠAè½î»‹íefÞÿ?‹²X,HP¤$ü}Îìbvæßæß~ßù—Qœ<7§–m+Ûírù2He›—m]ûËt¹mhºùx‚‹X Íb`ô,Ò¶V9XeÛx× »k¡ÅIŒeòHÉdø–•¦raaÝ. .ÆEë3²,«iW.O%.+|2V‚0n…KÏzåÞ6té³,Œ”M+¿µ8ñL[üo$fƒ‰ú¢ ÌÓÈPÍ4=+/^?|-5…QññQïç¶8ÅòùVNΡ¿?ßÞ£›fäÓ Äãi¤Y ŸÉ°òky]Òy÷<[]ö6Çpâ'=Ðw´†Oñ°¼ˆ%W:ýVfœJXºpá’»gl{Ë :Mé-CAD8 ›ÂL¶ ¤…‡YA«o†O,ß@¤G~ÇŽaò7£ëèÝxçÍ~¬„¢%Û°^®»å,üí¼é"¸€±!,J"DQ@vâüè™ñ-mAáò 46=ŒÍ¸ó6+zŸéEdérÒZ¸ò¸mIÖ,‚£Sˆ[¸ÚhFkg%F~ö4â-{VG™\†Z6p5Ö"12\Ø)F^Ɖï?Œ_ÍÉWœ®ÒÜ0Æ’JA…A4ÐˆÖæËx&A×  æqÅ‚½‡o¹‡kuH¤óÈ1Jg4C¯×Ã`0²z´­7¬Š:È¢FXÑìºÂÜdf_5„±x¹§'/ÄQÕP©¾ìȯºk0ŠÜÕl16ÜŽ–æÕ»áИQáÉ#4DTㄳLÿ\ÔéVEjfLÈŠÑÑŠ›×Ã’bnè$ž{á–ó[ûÛÇ©¼»qí—m#¤DBÝÙNt4áèm·ãh`sÙÞ\©l_¬l+yf,J8|u¬_{·¾á2¬Ï¸¬lo%1‰“Ç. ¬˜áðTÀefçdlöËëÎÒàÒiYlï-fdIl¼•_˜B(uùáSE8ÍjÇ_ÐÃæ4³tÜ.ç±&³ ™Tzãe¬’A&o„‰'Œ¾Ím5ë£5D3+?rqi74ˆ“gæaë:‚6—v“?V_šZ:°ïP Sƒ˜N¾>íšv÷<<êö¶Bè‹ £Õº>ïOÛx· ßùÎ*t9èjHYä°ý¤®íîÉ ^´´¦ñï?ü>æöÜ„wÙ¸Gã¿ ÷vþO|ë_á²fC+î}O3 +Óecm|'ÿßì·Àm‘±7ãÎû·<Ës·\žÞæ{Z·‰sà ¸oï#xü›ÿ §]@"ëÆÑûê`ÜA¡qî#öøw¼(Ü‹[”'·¦›R>­Å+›ª áɯþ~ΫÊ|wÞ|ß~ØEJK'bu{œ—­ôm—ÐôF¼uôøî?^€ ÈoÃûýÌõàå¦kQvУå`Æû6z„<‰ ¼é}í°Ú/}/AÄuˆÖ]2•OI#ZÌ:[V§Rµ-Ð 2"£H˜<ð²ó©¹0r ÕÐ+)„#†-¯Øì4­Gq JQ«…¸Ú!(vWǺÙáñÕ]Gi›æ±¡ïülm·±6Y„ÝãBòÌ8Œõ7íx±¶lh3¨Ac‹u,nã/ŸDˆuôÜVÖÙf–ˆ¼ê—e»8Ñ6çÄõZ¶=µ¨ÄX¸ íêù4‚Á­e»¸ RÙæðcP,nX‹¦ºå—‡pbÒƒë SÒ™‘¯°Ðê´Û§§%DÂӌõˆJãqfغ· »€ÆË ë¶i`å*‚Þ[ÏÐ8&W*Ñl×°l3¡|·ฬð °9¬ˆ‡£ªÜS“8ͺÍ-ÕåÓÊVæþçxã`ðUÃ|rË9³{ø:Á³ˆ8ühÓñuxÏãT°û÷xÕ}äx 5šÒ|›Exô,.„è8|®¢aAÙ¹38¹ìÇ‘No¡¬I9ä ´š×Gy8ÙLÐÖÝêÁkÃ×¾öµáëû±JÈpUQoyÇ+­lw„tœ×ša6j¶nÿ“M ‘×ÁbÖïÀèæëV$Ìka¶q±€.ÏÝ­q¹X˜7ù“K"%.yÝÕLë+‹ÛEܼŒïÿLƒ{ß6ájÆ…?·¤ºˆ’Ÿ³ý›v–®ì9%²Ð˜M(ÞíöÊŸ AÄk‡¢(êQü}í>Ìy_ú~«Ðñzò¿A/KÐ;MÈÉ58¼×Œ…sg1‘1Â,æ7Õ£koL¬#?s¶ã3ûž‚äéÀ74‘ x~܉ÛT©CÏÓ3§ñÒ`£XðOçFs÷TS˜í;ƒñtÁÝœ±®ànIŪ¤Æqì—3ðÞy[aM(igž>íÁ»Ñéá;FŒáXŸ€G ÷ãùé ܾ¯’ùÇÌ©cH´ÜŠV}Î !ªµ°–"´¶Ýݵ°iÌœ>†1Å};šÜÙòqZ.ïn›–A%®}rá1ôöM"m°@'åÕ²eeû+ÛóåÊ •m´Y—Ñ÷ôIä;ߊUâ&a$<Ò‹sÓ)hM:ÈétÕØßZ½’,o¾ãÆÉa¤¬vdFM QçañFʇ‰Ë ë¶iPì¤ei}– ¢§’Ñ9¸Û÷££ÒA¾¼ðµYâï9‹9…ÙVY ޶h÷ä˦•!ZœÇ bü¦çXq£,¢ 5ß3£ è@&oC˾xù::rsç{1²¢Y¯°ßL¨Ý³;³äÐz¾íFþëÔ ó† (V ýævT°<6{¾c+"Læ~J†­± {ýW ÌC=Ԃ„¶ [ÎåT#kãPn„¸¡#8ÿÌÓ89…ÿžãMu´jAĵ*€Ü1ýeÖã0@'òëuè2ïšÈù,dúMoˆȹò¢®äüÚÏ1 ¿pú#GQg(\Ÿ;†^Ö5»¹Ñ¢vv¸»’¨ VžW å˜_ «¶Ø2Íä!è «a¸DœâúìŒ!ŸÍCÑêղ͋¾¸:d£|¤²}ñäÌ#›“¡Ñé¡)]·®l¼%ä˜ñ/òë…„ý²Ãº;Wš´2r9©0µEÀ†/E£Gqðv”G¶<ǩز¸ç­~ë( ŸA!k¡¿‚DQøÈI`îk_µu8v"€hA» ÑŽÆ#wÁ«“†Òƒ âF÷Ô[Ý lÍ@R«rmiÇ}õÖ¡ßVÖÌðTçN@Øf‚FJ#ž6#Ðe^AÇÝ}mú´‹›aëèNAý¦Ñƒ—ˆA\Ÿ1fäè7òxQ¡+_©l_<9™áiØî§rñÖ@§×ì<ì—ÖíܹҤY¸Å²þ]~øô;L«K=ǩز¸ë·K–þW˜,‚FwÅn\ H!ve£k´»w°~ A±»ÐÀÕ|w4æ‘åoŸygKGÓ ‚Ê6AD@‚ ‚Ø]ð·¥Fêâ•m‚ ˆ’j„’€ ‚ ‚ ‚ ˆÝ AAAAìzH!‚ ‚ ‚ b×CAAAA»@‚ ‚ ‚ ‚ØõBAAAÄ®‡‚ ‚ ‚ ‚ v=$€AAA±ë!„ ‚ ‚ ‚ ˆ] AAAAìz´;¹HI'!‚ âÒ(Š¢Åß×þß®±ÖÏaý(þŸ ‚ âj@ÊAAAA»@‚ ‚ ‚ ‚ØõBAAAÄ®‡‚ ‚ ‚ ‚ v=$€AAA±ë!„ ‚ ‚ ‚ ˆ] AAAAìzH!‚ ‚ ‚ b×CAAAA»@‚ ‚ ‚ ‚ØõBAAAÄ®gw ¹,ÌEQ®Ü)9½„‰~œžÅJ®ôÇ8fûpnhÉR¿”$BÓA$dÊ\Aq)Y†¬¶¥ dI†BIBA@F6›¿¬6AQÖÚ‚Øž]%€Èá<ö£ã^QÆWÿüïã…¡iLû9þ…}?’V—0ý‹‡ñØÙe$âI”j#&ðËoÿ ƒ*}Aq)b#ÇÑ·(³F|g_ÂJ™æS‰Ïa"˜.êˈŽôb$RæmƒÁÔh¨èeˆŒðÐi ,åH\!‚¸š(ÌõŸÃ\zgµ«‰¾ù½¬V2óè{©³©ÖÜ #/âÔL¾ät 3£‹H¥fÑw!iý¼„Ll sãè]Ú8Oìz´»;z22+A#Yèœ>TÚõäRYFM A ®j BÑ-¹1üâñ~T?ðIÜÓ`€ÀܸéÔ¿á[CýÇn5µ€ÑI åMÐUm…Y¸¼ð¤ÃóXŒkáªò¦cáKä šÐ­º#gSȉ&´k×jص•ìZr+A±ëE µ‰!hØQ®õŒ- ˜s£NÉ"ºD,§@Ée±81CÜz8|¬]Õ PÒ˘ PÕ˜Gxr‹iæbšuÒÏŸ…\i…FQ`¨lBKjY â*“cbh‰"›U°ùÑp^å·® ä¼Ì,ê®’\ÀXÄŒF¿mS¹V2!ŒÏ ¨©÷@%^Š`j<O“ïÒ}%……‘q,e‹ w¶švÔê‚eù¡!41 T7 ‚.J‹cAèëpjøïqÌM$᪯„q+¹%LΊ¨©sA+lNרÌRîFTšJʯ`~Y_¥e=ìJ|ŠÅÇ€nƒ°£4>·I»Œ‘%öT”ÖÁ 2Ó§q|š¥ÕZ$ iLœ= ¾{Vë½Íècˆå…ÕûY{ sÀçeáDÖ¦[žÇÒBÖ*âI¨i7qâæôpÛpØ«Ðh³ªùHŽ/"¨TÀg»ñV‰PrLNa9-Âê«G}•u](à3#¦'çNJбôª¯÷Á¢)u ‰ùá ,ç”õ<¯÷Ô£ÙgVŸ“’YfehË)F§õu0½Nɼ{9Œ3ÿþ—jÑäÕ"2ü8²‡?Œ4œÇ÷žŒÀŸ›ÀlÅm¸ÿÞÍHn¬çMûñ±:Ãj¡áì>‚æ§ŸÁù¥v8O=‹ó¡(/þä®»ñÖn÷Î*t%¡Ÿ~O…*ÑèJ`ì?DÜüÁ·AzòŸ0}ó§ñ`›^U(OÿèQäÞþ <Ç¿_,ûÑêËbê?“Øûàp´RC +Aqýw´3€·ð}p>†D¸½s„ãyäΤ cZcÕtøÈ%"G2MIDcYÌŽ/ÁpÃTÕŽnµç.cyð<^3ÄBQ䵈G“0ú[á_Æ,Ü`N©Ýg]™Ž=AW§lK1ÌϦPÙ]uRoºúb£<3/DÐpǸDn\1mh(D- açþ+¬š]„äªEE‘Ò¡È,^“+°4î@aõŒÅå å±8ÐtM7ꬢ%µM8/… ƒ¼2Ži}~-”lc0Ùkà¬UhbÙoÃÝËE1;/ÂÇ"¾8ˆ…ד›+c#Xñî‡/½ˆ‘‘ ø˜¼ThiC5&ûÏ…ÕŠšöú‚0³îl çú«;ˆ£ÕyŒŸéÁ© í>Ó&;JÉç`ª=„µº‚¯¡^ürʇ[ø6®Sòˆ-% )Ì am @\Æ ‹¿NbE;„Á¸È•7ø[ªae)-<läE¶£¾»Õ%Fœ`Ö#zv–}M°ÞHÍ„¼‚‘—Ï!ÕÐ…––o/œBOî(X&È.àìñ1Û;Ñ¢ã½8Þ«àŽUØô~^‰«ƒ <­Uë"œ†¥gA\ áܱ P÷¢©ZAtò<ŽiÆ­ªaxÒy× J6¥þ­øðáFXXÂÊ]F|ëɬÔÒÔtý>ЗޅÄò2dÏ8‹ „Æ}ËQ'îxë[yò[Ä;—­òã¿ÄN·áÿy'*DV¹ô|ÿøÔ$>ÜY‰çúF‘ië€>>€A© o ÿß™íÀ‡?v;¸¹†'ðž>‡½اƅ ‚Øem–¢ìª¸¬Ågí{ñÿ…ÎP\«ÍiõY1áèFwE}/¯ a_l¡³xy%Ë®1@ʦY‘¡×ãܘ5.£3À¡*uTærRB\6ÀÎÚV)“A<’€ÎèÂDï¸o: ý⠭ݨֲ¶wì‚éx¯mš5ÞÄ „ÆÌŒò U˜(ø†F¡ihD·˜ø4µI Uõnf°N`xb‰ÓFT4´¢ÎÅúæÉyŒGt0Ç&0o¬Ce6SSÁ V˜ñ=¹Ìê‘Ð8–SdÏjÑØÑ‚ Õ£4B#½ìw ÖÚ6´U[ 0c9^'˜ÃXTKbS¶ºvVÿ˜!*,ab)Í «ÅÚ€¶Ê‹ÔqÛ¹S$VX=•°2wScZ./*WCN•§ÈG?,oM‹šC€ËmùådK·%ä­z„ƒQÈ.H‘ó§îÎÒ8†&BHÁ _SN]Iš¶¢Û»YÜHÎcp:ÑQ k¹u óAv¿Í-,±‚’÷x ¶µ—\˜ÅÔ©~Ää:ö¼VÓ=·‚ɾ>,::q0`QÓ©éÀ^Ì^èűjëjQå¶B·‘€±Ö CI€-lÕ°)+ˆ'પfiã@ZR–ƒHkPS™ÁdÏbÍ\)ä›QÖ~Xt1 Îè`T¢;y Óz Œì¡(^ÖÕ!ˆÔX‡1¾Ô€ÎŠgH>8Š)cîð;À¥§†Î:,G¤f\Z'š„ÕR`¨«ÂÈÉ(Ë_UÐ)qÌ\˜€\³s’ÞÊ –/òD­kƒq”TJm':.õùÛ;š°ðÌ"J5|$€\ÅΆ±ŠUF§ñâcDZX}A$¹iÖ™-è¨ÑoÛIÙÚ•—4Ðj_é’™fµÚ·Ã- ¶9PÛ3Sˆ¿£ UÏžÃh¦5CPÚßÜä)$bA<õÙB]B<("¨BAÈ.@”µ?ÀÚßµ$(\¿qÎ`·Bkp£ÂœAFS¿y“A 2=4Ä ­ó#•·‚¿Óг봊¾#¢a'¬''ú¶£‡àÁúOôbúÐaÔf؈ÀÑÜÖj’ý Öà`•©ÙI¬X sOKáêö6ÁÍûçIæíòšƒûq .ŠóÇû1ç>ŒŠ…³8·R‹›W"Ïúà§:f(o_f•mÜ©Ùátõ²áÌŒâd™´¬Ïg u»a[F\q#·”EE[-ÂC!$2áµ& ÆÜéO¡å¦Ãðägqæd/Ä›¡fSšZ ä‚VJt§F®£ÌÈMOâô„¬Š›,™HqkÍÆèQ N·u¼"C³^ßɬî@ßà2LU^˜S¸pv‘°›ÛQq¢¶ÖŽÜÂ$æ ¨³l0%<ŠÓÁDÁ&ËDˆ/áLÏBa…:¦ {k-›Ä!­ÑÂÂÌ*vûn1‹Ð‹Åva%šö¶Â®:’ÆøŒ^'3ü={ÑšaÏ_Ñ®º'ÀÄ›/K7†¢ YÁѺ. F˜C$£Àe2ÀfQޱ’L#2„©±¶ÂœÏC’ùÀœ“…Îfgõ3žÈÁ”º æÅºÝ[Ýa'u;36·†SAl®|ZÔ6ÖÉL¸” §ãÈ$,¨è¨„8|Ádä„.–nñÑY(þCðXúü¨wa4˜ƒ¿$M•ÜFxâó‹Ðú¡c¶†®5®qDKœ' 1›7Dœð.„ÊÔ¡¢¬nö¯Ú.³-7µÃc\MMy§_N£­³ë3+«×ýɳ„×W¶`¿O]Ù™Éã˜0¢¦k?*µÛ·'¹d–¥iö îr¢Õ"†ÏeX[á@ãoAè°j°˰ðæ`©Õ‰%¬mHÄYLnD’dˆq“D ÑÈìüÆ59–ïbñ4R¹Âh˼bN°!н¿pE–åIö,}­µ°Š|=•;5 Ï›gVÈÉ9œí £ªë¦×ížv7=¼ÔÂŽ68xE¸´€§ ]~ ‹¤„Ðù ˜“ê/¹¼¦î0龃gNÀŽx å åÔ7”YQÉb&2°î¿Ö^ÁêéYœï !/Šä"q } –ƼÐÂÓÔ¿¥.`Tën%jò˜œIÂ[oÞHEB:E"½„Hßy8]5hô§°µÀÓ!n‰#L•hÝëÅÌñdá†,j w{¡éíǨlG[ñPÞž(À¡’ 0YLȨ*ÞêÂ/J™¼žõH"l¾Fvp+„¾g/`Ê+šÌÅÓ•*Ð\4#J´xàT†XûU„=ßÐzâðuE½óõ“!®D‰àô#ßÇËÁ4bi'n~_gAMj¼ ·¾ô(þ¿oÁ«ÏA[@@Î w) AôáŽ÷½?ù÷oãNÙ`ÉÇõ݆÷ßâƒ4Šÿüò_ágkÂ}3>ú‰Ûq_×÷ñø7ÿ[Q´â]ïi)¸ÙÜúÿÉCïWÃ.îÂý?ÄcÿçŸàpHdݸù]u$~Ar] e®ÂÆœ—5KEY?¯¬_¢@¬èÀ¾ì9°§­ RAª­À03=$3ê÷TÁÈop´àHÛzND`èÒÁ]]W^†’›FÏû»*Y7®|Håš?A¼6–~_}ý“ÐyöÂÌŒLË iQ€ÓSGx|I“”ž¢ÕÞ$NÍ¢ú@˪ÑÍi镽—,©‹bÓ3д݌ƒÕºMë¼–¨m›´pn6RØï6ôžŸ„½ípÉÂ^áF¢g ¦ú›¡gi*:HÏ-#Wï‡I,‡8ªW7vÊûmqÚ\Š _ë…6A8*— &ò‰ Ö‡¹hõ0eÚ’ÌؤI$뎠ÍTG€´wÕ Ú{ ẛVŨSSV:X-«¢Kt’Û]˜9qÓ•P‡Hõ¿„Á\%ÝŠ*‡…CF|ôeD¼{С-Q¿‰Ý¡]¬ 'W,¨d{…Ћ×êÔ˜52iHnœ 8Ùóõùa~yK9'*Ø#ÎgqúÑ®Q™ëÁÉ¥Zíôªi¢ä³ÈÊZ8Ô݇rHDb-.˜V.àôbì)\'Ç‚ó5U´…ë£gÐvaïуpé_߼þÁ‰ƒïþÚyè-ætôµ¸ó7ÂM‰$½fþÃm…Ÿ~ó“—Ð@\{ñÎßì@.•DV4ÃR<$HôàößüÄERtÞûùÿUþ·7ü:º%D^‹¹hÞœ¾ þþÅɈº;?ŠOÝ’DJ2ÀlÔÐ0]‚ @®[díY.˜+Ь¬/‚Ïä‘M­ K"Ã:VñX J2»q/ëÔç’8ªL»0‰¬1ˆ9K;™ù‹=^ygúmèÞ゜ŠCòÖB;Úƒ1ËQ4ò±¸¹B'¯°@Áè¡ ñ*‘šBÏsÁ–z:T[µÒÈ"ª:ÍêØ}uÚB=8~|f 3ªŒõØWÏJht«æðû ]Pà_K/8PaíGÿ©^øö ñ 6JÔ› ˆ žÀ±)‘ÕM2-ûö¢ÚüÚõ¾·M‹R3Ãí)—†ÛSX Upzá”ç¡sÖÄÐUµ£u᎟‡Iá‹{vဣ\šn¤­¾º ÌÈ=öòŒì©i-[— ]nhæ"È)Vu—®MYóÂsŽEôf›z*ÄH®‡ŠæF(™ Bp£KÝÎ|}gCðvßÂÒCƒæ½.œìéƒv'{.TtÞ¾ºð­Ú² 1{=ÌøÞwÔ¾j_Få¨ãJ1dÌ®õIrÁ9$µÈOô`T®†-t#•‡Ðìä£o˜ÁÏ z½«á†²½c-ºZ¢è9~F>:ËŽöUª¨ËKgñÒ‹c0±Œ‘Mɰwt£†'’£=y¹®·áPe=jçÏàÅÆ`6Ȭ=7!Àž—òsìþ K0ÚÓ8w|n5SU ã–¼kÍ Bae.u–^Ñ¡[=ø Ã׿þõaªÍ ‚ âÕ!—ËÝPˆÀ¯ZÿJý^â­/ª |á»ø"B–NÜÜbAjözçÝh¯YAÖæ.tÖ9¡D‡O`(ë‚S !jïÆÃzG4Ù ·œB^o†>ÄäÔ$æò ¸©ÓóºÌéæ‹Q¶ÆPQ”E´)œù`NGêq¤Õ¶iD6“‡¨×ou°sïczþ< G¢ÎP˜†‘} =Ø[›Ì¯±¼³´Ø‘;¹,$QFØñ=ù\Ð2¿ËÝ¢d0Û{Rû~Ô¦/à¹QŽtzËŒÉ`ºgúÃGàÃòË;?ƒ«¯³é<´Ì²L%øB©Hz»ºØ¬¢èPÑÜ ËÌ1 èÚQ/Oah2gÇ!ì­2­‹Ö¹ÈÎô'8Òßê9¹€¡sƒXÔн¯NU<™Ä‰ç‡‘ñvàpw%’ý/cÆ{û¼q\øÕiÌI4|’½ ûºjaÍÌ¡ïô4íG±Ç“ÃÄéa˜º»áÓÝ€¯Ÿ•< Ù@»%ï+rÙ¼ÀÚ³‹’R¤r²†]'¾."Ò§>õ©ö‘Y=r«‡Tt($€AÄëL&“Ù•Héÿk¤ žõý–úõ ¡oAÅMä,2²F‚ØB‚×› uŸ7ŠŒ\:vm4 »8¬»î¢áµJ>†`(›×“æõéÐ 4‰• ^Y…’ÀôÙ>L¦ìh=ØïU:ŸGxäúæØì&h¤4âiÝûPK[/–<Š) „œh«3C’˜!\V¥á"«çW§½\á†7R2Š”Î[¹gÍ/(^£„OÁˆK0ٌۋÛòê&̸OD“ÌzöØE˜ÌEÛ ËyäfدŒa0æC{­™Fß_§ìDÑR2AñjŠ!¥‹ BÔ_tý^˜}*Â^UµzV»uÞ.ßµÁd^ß|A_åßAkCe= ‚¸.,¨Ýw3j_5´p5ß„;óÈåòPXÝ£Þ\_û"€ŽÕõ9Äm-H¾Èë+$¨Ú†Öâ„mÛKJžŒ ƒÅv‰v«;„²Æçê^¬[æø¬¶/ŽFt8èYïvH!‚ ‚ âÆ57YD7TÒ¯;]ÀNHS&‚¸QÚ…K­…ÁyÚûßoèÈ µ¿sÃÄùÁol™îSºþ AA¯~ÿƒxÛ«quv‚ ‚ ‚ âÕ‡ËäRÂÇv¿o't¬]OBAÄ‹”I”_ ´¨ ¡vâÚì\rÁWÆó5ÿƒ‹ ‚ ®H¹ŒNÎ圿Ôu¥YB‚ n`±ìtšqí÷ ¶,ðºM;OAÄë ;èÜ\ιKYû,¾®¸“DBAÄ ÕùAA¯:$€\„K‰å¶î+w3J’â·yü\¹!$‚AÜ‚¨NY›SÚNÐëéYÒs"‚ ˆk@¶¡Tĸ˜ð±Ý÷âs¥s¹×ÜXëÔ–ùA"AÄ c5o1¢IÙý‚ ‚ ®HÙAç¥tôF¹O¯×‹ÆÆFøý~X­VX,õ·D"x<ŽÙÙYŒ! nêà–N…)=H!‚Øýh ÝöLéyAÄ5 %\Lü(>ø ï---¸õÖ[át:˺ÇÏó£¶¶7Ýt"‘^|ñE oê\Üa"„ ↳–) ‚ ‚ ^eH¹Û‰ü°ÙlxûÛߎªª*õüüü<ž~úiüêW¿Âôô4UÑ‚ ¸óÎ;q÷Ýw«×¿ãïP¯ÿéOŠX,¶Ú÷Ý< †D‚ ˆF€ì¾GJÏ‹ ‚ ®5v$€ïe¿›)·–G©øÁÓ¢¦¦÷ÝwŒF£*t|õ«_Åc=I’¶¸É§¿ð©/Ï>û,¾øÅ/âÀ§?ýiUùà?ˆ'žx333êhrÝÒµC‚ ˆë§M)mKŠGn6–ÅmÖ&®Ïg\îY?w¹‚ âµG¤$ØyÇfMüxÏ{Þ£Š|ÄÇý÷ßGyù|þ’îq„_Ëïá÷r7¸[ÜMîv9Ñ… ‚ ‚ ‚ ˆ+‡U.¶“Ëšøa·ÛÕ‘|´ÆÃ?ŒÏ|æ3êro.vð{ø½Ü îw“»],‚ì$\AAAAì @JØNÌàÜsÏ=ë#?þò/ÿrÛ©Ak×ói.|´ŸöR*dð{¹k#A¸ÛÛùKÂAAAA\´*Ê ¥‚ßí¥ººZ]óãsŸûܦÑÛíÜòùÏozÓ›Ôÿ}ôÑuÁ„_Ç¿óOî_„»Íýà»Ã¬¹Sn!TZ• ‚ ‚ ‚ .R†Òu?øçm·Ý¦žûÊW¾²iÚKéõkõ±&~_Sz=w‹»Éá~ûYzAAAA¯ @ŠØNtà[Ùº\.uëZ¾ˆé¥Öøà|ö³ŸE0DÿEýáw“»Íýà~í$LAAAAì@¶¡XÐàSS8O=õTÙ­nKùã?þcUÈøá¸£íñ¸›Üm÷«ôZ‚ ‚ ‚ ‚ ®Œ^ÙÉ®+~¿_ý|æ™g.9ú£»»ùÈG0>>Ž/ùË[ÜÞnÄw»Ø¯KíJCAAAÄΡ —€‹ 6›Mý>==½~ní³tDÇŸþ韪ŸßøÆ76í³ÝŽ1k¿­¹Íý"ƒ ‚ ‚ ‚ ®.´ Ì*¥BF±a±XÔO¾NG¹ß×¾æ3ŸAgg'{ì1u]íü(w»Ø¯µë‹w˜¡`‚ ‚ ‚ â•AH.¶ðèv"Ÿºò¿ñH&“øÒ—¾TvÚJéö¶ÅÛè–ó‡D‚ b7µ«—‚Ú;‚ ¨n¼vëF /…w7´í»CQ’M‡T6GÍæ«†Ë°³WÒ˘‹ás·ü–H$àt:Õ…Mù÷r|ò“Ÿ„ÙlV¿¯­çQÌàà Î;‡w¿ûÝ[2 ÿ¾¶ûËvîAÄnëÔ_꾋vš2Dˆ¤™Au#…—ÂKáÝ!»C‘&ðËïü'"õpjÖNZÐzwÕŽyöEüðt>õî=Дü‹ÅT¤®®ccceïï;Ûƒþ§|ùëßAE¥MM<[2„…h&wQYÿTv¤ì½÷½ïEuu5Âá0TA¤œBbAq-‰;·]‡†‹±™³èO7àÐÞJèT±#‡å©œ*Ègr ht.Ô7{‘-"SëRûûéðÂ0#54‚¥ û| œ?ÛñÐøW—ðRäÒÉò‰8$‹VGªjaÔi6HJ:ŒÝ 7o̳L bY1@B‰•y Ÿ‡X·Ý5–Õ·E"ìu]èæ]ŽÈN¸[ÐiרÓyB³i˜«Ü0R3M¬l-"¤kF›k K9Tûò˜ ÂØX§NUWÒALFÌؘѱ¢©†Om“ž˜@Þ×oQARâ³_ÑßÁl\_k \‰q ÏÄ¡«lFkÀÁêVæÓ¥…OAr~óš:4yõH/Ž#h¨CÀ¡¹ºq«â#À$$æG˜…dô¢¾µnf‚¤—'12DJ0£²¾'«ís‰XÐPmeq–ždq®l`qæbïƃ ÈZ+|Mð[R˜ìC8Cî¬õíÍð Y¤Râz]š\Uý•M•ëþ®Ù rd CI?ðCÕ‡m]h>‡¡Ùz©ˆ²g …)>…c3º¦‚[S‘õ88¹#g=‹©°Ku ZªÌ,Ü 2,n£SËHÃw]‹›¢G„ÇÙ]ŠÎÆâÐÌâÄTÿ8‹C–ÅA‡†ŽTH ˜ŒjÙ3Æ"ó»»Î¢ŠË㳤%FO=Zê]ÛŽæyåmÏÖÑ¥_ðs¥›V”ºq¹öØõ^)8†)C#n÷; e÷Ôí©Å‰ Düp‰(´ÑÃÃÈÕ6Áy~†µ³| .µ€bnp Ru;ª‡RÝ¿Sm3mí X|va©•¢ û÷Ãj1°|žqÀ‡±ž¤äªMST_«Í?vÏчƒï|>ø ;Þ…[CRÅÊF4Ú QÕ™ŒRI,MÏàpZ„£ÒS™ç§{#žzáyõÿÏþþÿ «Û¥®¢>$šlYyUîPl|¿ÿþûÑÜܼm°­V+~÷wWýþÜsÏmÊÈAq=ˆÅ¸µ·AÅÿ¿%Rö¦ýèpIXžžE4ÏÏéà¬mE[k¬y­íhoª„iõU‚°Ú¨ J‹SsˆÈØä &æ’0Yó˜¾ÐÁ¹xáZ£µõ ¸°TTÁeV°Øû¸b¿5»ÞúözUÜs<®+È3»cÍß@÷æo ýsÈ®×Ï R‘àöMéÑÂå±b%eõ_3CCëTQCæn «n±80·2Ì)ÌÂgoÁ¾Î*d‡0ÇNJ+,n¨h߇}íH ô©q+ÄÁŒÖý×ã€þ¶Z8ô4ìi`q`í{îÓƒCª ÅýVRsbϧfï:ÐkðÆ‹‡‹\µ¶G¹è¹‹¹q)AãÕi+_«ðÊHDc08ìЬ +;lJÑtÁíüò0†³´x4ë/øU¿˜ßyuY‚5€=õuºÿ- a²ÂÌï`u€Õ¬E:²ˆ…¹I †`ª÷Ã"\Yú¾RvÑ6¸Z,VXMeD vsDYº "+Ô’TxB³'­*i(™?%êô8?8ˆ¹¹YTWûñ­¯ÿ=>ó;Ÿ†,I«Î …·Jªð¡n/þ¾f#Šø›¿ùTVV2·çÔbJG”~/÷?AA¼žâÇ¥>ùZXMMM¨©©Q…‹Å¢þ‰D‘ʤ0~¶ÏO&™±3U¸O½WXoC :ö)˜ákn‡/>‰åÂCÉ­`v>‚Xn£é 6T%GÑsðwîAµ™wX‡MLa´νûQ£öx¿@.øËÜv™±Â:öUü•’ÅÊ 3^B˜æá1OaÖæ€Ëœ…l±Œ …òq£W,.‰¨ìÖC‡*ذ”¯‚·Ú Aä*í˜_6 ªNDË9G*žF^ 5Zaà…ÊîC•EÉ »’‚§Æ­F†Ë.a!Å~7oˆ“Å÷šLµè¨Ã±ãS¹©ìš§Ä=m¹¸UB¿„1p+œ:'o+:õ9¤Fªý¨0òºÃ‡€s£Á|æµw¥…zÎ_WŽ;oÆÞÚ{ðAftº=nÕªH$HÄ㘙D4xŒ ÃRµ-¸­"!Êü5ÔÞ—žY9­èÒç×ßls÷¥œ­nóÔ ng(RÁÉX…¦ZL¬Î «q(¸¥T´`¯.ÇŒá0`­BKÏÜuÂi‚ËáÆ¡šj¼ù=ûQUá‚ÝnW§ÿGb)dãA^îÇàÔ$bY7Z÷XÔQ‚FT_(‹ëqU¿›Üo^×úÑÕ¹‚¥ÅIŒeØó—3ȤXÚk²i¯»ºmßu3ÎÓwf£££ƒ›ì¬b¿Öþ/¶¿v2Ráz /·‰E}Ñï‚V-cy‰·§KJ£f±¹´ºÊC!y+qÓ-oÞÞx ³‹èE™_ ¯‚|šÇ#ƒtž¹áeË ý+L_@.î†:Hÿ5‚ä‡WHc|p Y¥e‹ÈPøÔ¡ O<ñcüÚGþ/ÜûŽ·aþóŸÇþâÏYMC6ðé0òº¸²ž‘ù¨akFäß5 þäOþD]û#N3·ŸXýQ|AÄõ ~”væø[©ÖÖVÜvÛmêNjåðz+ÔϺÚÞÀ>y'é‡òwÑ;=… ë,k¬îõNÿúÚZJÑÅ$,ûkî #(éÈŧÐ׿Č=¬žÔH}H·t¡Õ¯‡œÉþ)8׫†UbâþqTû*ñ›Ÿ|Nþ&II–Íðk[]PU.ˆ$6› _úÒ—TñƒŸ{ì±ÇT··ËÀÅŸAq-‰!¥:~ð·‚÷ÜsªªªÔóóóóxúé§ñì³Ïª»q¡CJÆà¬m@s]o¸óv¼ñMoQ×Ãú­ÏþƧfðä<†h<‰˜$!“Ê ›\Ær*W “…e$¥’¶QZÆ`_ûö£*Ú‹—‡0 {о¿0›\4WÀAT©G¥N )cDe•™µõ9,ô÷aÅ[$3|‚ŒäÜ0æô~6(H³Ž_¸rU­ ï´UVØD+3lP¢ ˜œLŸ>Ž¥Î[Ðá¢öš¸qICжބƒ5…2—>ç– ù*à÷¦pª/‡êý-ª¡hu3iuÚ†1³ŒÐŠ ‡`ƒ¿Í¾Ñ‡]†çê½íÿ炚ÐbïÑ ŸÆò­{ྜY0âf÷ÒSåâF‹ÓŠx8Êâ膘šÄé~ ¥Ú†Ô|¹:t\Ô‰ö6ì.þü#CkK½êÆÜìþëégðü3?ÇÈÔ"b‘*ÙŒFÚ»ð¶»oÇ]w½ Õþj¼óïÄÜþNŒÿíÃV»…ùYõw =ç=‡ê` uÞËl›‘ L%¼h°°Ï-a|N„ÿ  B®¸.`[s«Ò¹uº_A[ƒo…üàQ½Z—Ïñºü¿~Š'þ+D– ."—J¢‚ÕåM5•¸ý®·à-o~#«ûýøƒÏ~ã3sxæ§ßfž°<°6²¯h•Du¤J$ˆ„§ ‡jø´Â$ÆãÌw[7¥}éšWÒöpøH ¾ÃçÞðÜ}÷Ýêõ<}ùõ?ùÉOT»l‹MXÆH-ÚÊ×"¼†Êj˜OÍa9ç‚G« œEÄîG+žü{Ñí.ذN‡ÿãӈ涖õðþâ©§ðË_=‡Ù™)ÌNŒ ‘ס±©u[ÃËóÏOyxCsÈÊ8Ä+OßW‚ ¬qPÅÁµC·zøñµ¯}mx—vßO%M0ëÅ-jÜÚÿÅs®øw®¾Ýÿ»`2™ÕEKÿöoÿ?úÑÏç/êõñ¾÷½¿÷{¿ŸÏ‡T*…Ç\Íàê°°ÕQkßÕºwSb‚ ˆkS (7··¸áüÒ÷[êç] ÿ°©Î/ x-Œ ÜI”Ç‹…½ï¾û`døÅÅE|õ«_U…~iuÚèªe‚x4ƒÃÊŒþ=ͼÿÝøô§Be¥ÉTOþøqô½ð‚²ƒu¼ì0Ê ÈŽJ ³P¼v¤C<¶eœp¤Åyá ^^iÄÍ­v(Ñr£Ö}¨õ`X¿‡ê oÉ2‹gqj¡‡:½Ð²>€´:Äûz}Æqed0uªÊÞè[]”Ùœ|auwvÓÄó= öÝÑÎ ^i$0yâ$& Z3Ìò Œ7¡¹h;k9tÏÏ1ÃºÛ Q¡ïù9ønï†W”ê{ó¾ÛÑi™À±>Ž6-DœC¨ÿ4¼Ñé| çÐ…[ÚX×@²SxùÅšïÜ w¾è»xyq ÜZ‡d_fe4Y öÖýhse1ÓwãiŒJ ’«ï¼³ Üw/«M˜çöÃß| üà{PL6˜…,â+ äº8ª,a³YXù®Y1¼ë}Æïÿ>³*+'ð?ùO,N]ÀTo?æa„6'ÃÁüm÷6Ù ÙÐ0z  ÓlÍû°§ÊDðü¸·í÷Ĩ|ãgú0·[s7îjÒàž÷ýwجfµ.ÿ»¿þñý'ÎÒ8‹L,†¤,B]BÃÂj5°çSˆƒ¢Õãƒï/~ïþ¾jï¤Ó)üËÿþ"ž˜‡¿® º1¼8éd~WAÃÙYÀ¹S#HÛ0ÈŒš¢ÎÃ8п mOyûì`mϧÕe ÖFæóé&Å6Yi}½]v}†WAj¾gFÐdò64w·¡Â ”„÷,¼æ¢ðþ‘Å0kìXAh% Q[´à¸ ‡ÝcÇûx>ýÐo£’å>•çKûw˜N‰Øë·òÀe„÷R<ôÐC-j-¹ÕC*:”\)¯Î•vVË-@û{ï½~¿¿ ˆÎÍág?û~ñ‹_`jjJUÄxÒò‚_WW‡7¾ñxÛÛÞ¦¾ÝâÌÎÎâÇ?þ±ªØ‹ÛMƒ¡‘ A$€\KÈvº÷¼ç=j<ø[¬?ú£?Rç.—¾Õ‘Ó+ˆd p˜d$âh,vXV_Dð9Ä_øþ\ÂÝ|ä‘G¶íØÉñŒ!ì8€# fÈÁ>¼4®G'¥å„|Þ‡àV‘gÆÂ,VÀ¡€…u|²XYNÃè¶«óÔ¥•qœ>»‚ÀÑ}ð•l? ¤p¾w+†övÕÁ®Q^úÑ^´nÜÎ~ ðRx¯çð^-DS$€ˆEÇšÂ{Ú{ï½÷wv{Ý|©]WJ_ûii §OŸVd2¹žY´Z­úÉ*Ÿ¿uŽUü|tßêvyyy]ìØnêËÕPÀ‚ ˆk¿Ó˜·£[Ún V‹aý¡ ðE­°ñsÂF»©±xà¯õÃkÓoû–Yc°ÂjÜù;hA£‡N³ûž1A\ýN¶öÊj*`ÑìÎ(^IÝÈçõa¡n,|F£ê´õºñùç/]7^bù•Öåœ.Vò“ŸÄwÜ¡î\ræÌ™-›>\Káýõ_ÿuuô>/_”“Oã¸ÖÂËý{ó›ß ½^¯.³Pº¦ÿýcû˜ºŽdcc#zzz®éð®¥/wƒ·óãããW%¼ãÇ?þñ—‹ÄyõPŠÐrå;EÖ(¸¨Qº&ÿäS`øZk¼àý˜úy[ðŸ7½íáó¶Ê‰ÛÍÙ"‚ ˆkE¬)wŽoiiQ§xò%Ú½Ö6–v‚þâ/þ¢¬ýýýxæ™gÖ¯_[<œ»Åç6s·¹ÃÃÃ[ÚæÒpQûIÄõT7nW/®ñùÏ>úè×—ŠÃåÔå¡Nó¿uùÕ /_®à›ßü&êëë×ïåaÿú×¿Ž¿ÿû¿_Íðz†÷ÁÄ-·Ü‚[o½U]ðôÛßþ6z{{7ÝÏgüõ_ÿ5Ìfó–4¿ÃÛÙÙ‰ûï¿_œxÚ¯µó×BÛ.RõµUð(UœÊ½­)7eeÓˆþ¹ú}í¼Xô97ÊùW.lAñzwú‹_ðíû8_ùÊW6½©,½žÃGEòÎRñÁ§†–»ž»ÅÝäp?Šý¼X'Ž âz©KëC~ðMÖêËcÇŽ½*uã+ ï]wÝ¥ |Ô7À÷îÝ«†™¹\yµêòWÞ/ùËjØxyXy˜yØ?õ©O©#®…ðò)!\,àbBñýÅÇoÿöo«âOg>³€Çëãÿø5^þ;Ï'ÅÂÓµÒ¶“²A¤œR*h”‚¨QrS\ÊM¹˜øAüÿì½yt#ÇuÿûíÆ¾o@€$¸/Ã!9œ}´G¶/R[^’ß‹Ûωm½Äùý|^Îy//9ÉIüOr’œ$çËÉÏþy‰÷Øq,K¶lK‘d%ÍÎÎÂᾃ ¸Ä¾u¿®@‚€Ã™¡4ÎýÌé!ºÑ]}»QuëÖ­[UAÄN2îKa e“³IÍ*M"ÎzŒŠýç?ÿy¹×³¸1µÜ}ØÆÒdi³{”[›ÉDq§èF¦‹:±ø·¸,êŸÿùŸËQæÛ©oUÞûî»O>ÿ;ßùŽÜëÏ`23§Â;ÞñŽm×å·"/{ÌéqòäIYFv¬¿¿_ž‡‚Q¬—n·¼O=õ”<,„97ʥŖ’eÏÁœì9XD[†Õ§ïÿûwœ¼Å<Ád.:ÅvRÝN NJNJ ×::òVÎ9²Õ_*ÉDA·Ûà/n,|•ñÒK/]wù>3x6¦Qn¦ü",M–6ƒÝkã¹A»A7uk”9rDŽaó.¼•ºñVäݘëÕ/·¸SäeÃ4l®ÆR™˜ã†Í=ÁÞóN}¿¥2N/¾øâ:Ø ¤,*„9Av’¼•î½Sêvr€Ü¤¤œSdc£Riu—ÍÒ$çA±SŒùJûÅÏÅåàÙØÞJNR£†ÉŸýìgåÉÔØdn×[~¾˜vé½ÊÉQiŸ b§ëÆR=Xœ[ƒ­¸±]ºqcÃòVäýÑ~$Ÿ÷‰O|ÝÝÝòçžžy·7ß|sÇÉ[éwbˆ2XtÅN‘·R>cse06¾ßâü“uuu;JÞ‘r–ÛY·“äœ ¥NŠÍ†¶È籉O+D‡lLccúäü ‚ î”F€Éd’? ±âg«Õ*fã‚?ó™ÏÈF>›íµ×^“Ç”W‚ .¦ÍîE‚ v“n,Õu?ü°ìH`CX”ÂfËn§n¼y™\Ï<óŒy:6füÿðåPïJ‡ÍïUL·tUZ† ˆ;Q7–{×»Þ%ÿesVle„­êÆí–—5XÙp—X,¶:ïsÚW€ÙIò²ˆ6Ù)sÖüìg?“£ ØÐ¶²ICCæïøvÈ[éúrçm<¶“äÝŠì·«n§-8A*Eƒl\¥eýÆ6îºç_ï~A±S þßUÚXÏÕÿñã?ø¼Ï™„ѬǓ9D6¦½¥ú(„ ˆ;]7–nE=ÈÆ›52·C7Þ¬¼ög&¯ò—ù—òÜ_øÂäÉ8™#äoþæovœ¼¬Þ)'br755ɲ?~\>¶¼¼¼cä­tÎfN‡›•á­”w+iÝκ ·à)çø(ù"¿]ïô¡Ér³H 6_ÅN‘·HÑYÓÖÖ&‡a²ïß¿_þŽE®ì4y72<<,ÿe²ÒüPœûƒ %ÙIòVrf씺 Û乿û¶åó ‚ â$‰È}>ß–{9K·bè+ë…«tK»ô^A»M7²ù?lhÆVõçvêÆ­È[\Ueppðš?6¼„ÁÎÙ)òVÚ˜“†E²•`vÒûÝè@(nÅk<¸îxMM|œu$ì$y·zÎíªÛÉr‹ŽŠ…7zAAÜI'1Ûl"SÆßþíߢ··wݱ§žzJîñdÃ`X/\%ŠiïE±[tc›Í&ÿe+em•íÔ[‘wddDþ[Œž(¥¸RIñœ /ƒÕ;ÅUFЇê¼úê«;êýV¢¸òΓO>¹zŒ=Ó£>*GÞëÏ"ïíÈ¿7–&A-®\B\†VºÍ …B±nå—rKàAwW}Q©®ÝiõE¥ñ¸löv&û;::Š{î¹<ò>ÿùÏ#—Ë]“Î?øA94ško¼ñü~¿<‰Ûgüã?þcÅwÃêQ–6ƒÝ«øžJWV+}o×ÔÇô±Cuc)]]]òß¡¡¡-Íp#º±7*ï¹sçä¨ =ñŸÿùŸxöÙg‡e]þÎw¾Sþ޳SäeüÅ_üñ‹_üBŽ4`Î&?[µæïÿþïoûûýÜç>·êp¹\òßÇ|ÕÉÄêNöN_zé%ù³ùLX¹ÿþû¡×ëñÕ¯~UÎ/;I^&'[îžQŒòd¿Ë3Œú§’—À½]u;­CAĦ”›‘½h ³pm6|…õþ±ˆ6ÓþF¾ÿýïË?úÑʆQùÁ&Ðûò—¿\ñÞ,M–6»»W%ƒˆœAÜiºñV¸ÝXÚY{«ò>ýôÓr#˜5t™#¡k ³¹6vš¼ÌIóGôG²¼[•õí”—-a[úlnŒso0yÙR¾G•7s†8;I^Í´ñæ¬)cßßκãò©²MQ²© ›†m_üâ‡IÅåÙ¬·§t­ã—Ÿ’ÿ>üêí!‚ ú⎬/6NXVº±g(þmiiÁOÇN–÷í®Û?ýéO·HR…-SØr%›Hc[‚ ‚(K¹¥ÚË}fá¸lX 3fXoÔfa¶Ì`cŽJÎRÃìïþîïä4YÚìדãít~Aºq;uãV.7£7kHÞŠ¼E]^Ρ°ÓäÝLÖú~ËÁ–gÏQœ7c§Ë»ëvr€AqÃÆq+öÖüä'?A2™”{‰þäOþ¤lÏÒÆÞ¥ÒÏ¥ç°kÿôOÿTN‹¥ÉÒ.×3DAºñæu#ÉKòÞu;9@‚ ‚Ø’aTúwãw+++òXkfð|üãÇ¿øEyÌo¹%ñ6†ÿ²…Ʋk?ö±Éi±4YÚ•î[I&‚ ÒÉKòî*y·EÉ |ÉVœ „M’ª|â‰'>Kêíú”þèã†Cò߯ø™kÆ÷Òx_‚ ª/îÔú¢t²´21c†…å655¡½½]žäŒÍº?00PqUƒbZ¬èÃþ0žyæôôô ‘HÈ3ƳpåÒ¢â_ÆÆIÓv’3„l‚¸û!;Y7’¼$ï,ïVëÇçž{6߇PØÄ’&A½ƒ†&<#‚ î¦úbcïN¹ð×ÒpW¶Äí{ßû^y†wçûóŸÿ/¿ü2&''äãn·>Ÿ?ü0{ì±uç?ÿüó²UiR´ïçv8?È& Òów’n$yIÞ;YÞ­°•IPÉBÆAAõÅ–ŒüJ†ÒÆq¾Åc­­­xàä%ï¶[ïµ×^“'E+g•'|;£?È& Òów’n$yIÞ;YÞír€(IuA±å–Í+ýŽ/Å?ÛgŸÙ1¶´3xØlïl9=¶.ëAbcÑhTî b¡°ì\¶ÔÞÆØÒ{luå‚ Òå?“¼$ïÝ^·“„ ‚ ˆ›2ü¥ã|s¹Üº^¤bïÑìììê’}lÿWU¿+¾oákP(e ¡Òž JÇ ‚ H7Þšn$yIÞ»­n'AA[2Š6ö•3”J{‹ŠûÅÞžÕs ûìøÆž rCDÊHýAéÆ×$/É{·×í»Ê"ă˜œ "¡´¡¦ÞsÉÓ‰©eøçs°ÖTA_ü­„fÏÏ ^m„½Ê}ÉuBrSÄV)M/LÅïĸtmºê*è®ùmÖÆýM.¢Îç\»'AAì"££¡TjÈ0©¸_j`q¼bÕHÚØTiÿI¤ÚV2ªÈ÷A鯛n0’¼$ï,ï]ì¹úS|ë'ã0·4Úþ^xÁ‰Ç?ú>tš9ùûйâÿ,‚Ãÿ<îËÿ8Hà_{‰¶:˜˜-•Á¿ Á§>‚jÕHŒ¿‚oÿhºæf8r§ðâ :Üû‘`¿ƒrxí[çÐøA¦T”¦^û.ðÔgäݱÓÏâÅÿòá]¿ùZ d¥Aw¾a_ÉP*5`JÇù¨µsòõðŠÀÁ®,ô!‡øò9Ì'lè:Ü _0°s]2¢©ÖžË×ë‰ÉÓPÄoSFÌ Í@eÐCEAÜAº±´Ç¼Ü¼ [Y)c+Kž’¼$ï(/9@Ø‹_Æ ?Cý‡>‰Çë5àÅ_~ßzé*šÞß­ÆàÝûԘţ¾:¬þlŠZûÀ‡Ð©Ì;Rb¾‹g^½„²â•g/Ãó¾Oâ] ,MGÎ~ÿûÇ'àû{à¨$Lz§úŒ°=•ß}쿃…“Ïâõ¡0š{m A±› ýrûE#hµ§¨ÐK4xy½½5ÈMœÃÅ »No'ì¨ù’ž¡l‹!%šêÌV¦1ä!Ž#¢ÂÀ '»OÌ5­ðšJjYa'gQýÀxÕej_1‹X$ µÉUñë\WúVPs æk.‘‰GO¥® NBãm†Ïª¢º Š¥$½ˆñ‘y(<­RÙXkf‘Y M'`ol‚S{ý#$05áÇrR„Æì†¯Þ ƒ"_…¬ µ`Øv¿f.†ùÉIÌ…Óà Nø<0KÊAÌ,br–GÏ%·=º‘½§ÉYÀS'¥YF7VZT–eN‰Úz»¤·*ØJãq;uùfK™–~Oòî\y‘ czt KI—õÕF(˜|H`nxK±0 †ƒÊ^‡z‡F®ûÊÉ+Dý ðð´ÕHu©t–”ßÇ&‘FIˆ¦ M.hßfç‡|ÿÝ lS#1bîÁ¡:Máµ*á:ü^¼»ÓÆô$Ä•A ‰í¸ÿpø¡ø…ŠYJ•JÊ9¤Æ/àŠnûŠiò°vBÓòe , ›¼Q%”B°ä€®cOá7öYÉ@"‚ vdãþÆÞ¡rá®ùÏòAy;´×½‚—¦³·õ¢»½s~ÏšžÀR–cU4âI•5hok„]£Vª² 5-èèh[u~ˆéæç1?·ˆ˜JäÌ0.?‹+þ$Äu-µE ÷"”+ite2HF–\!ž¯q€$‚ã˜ð/#% “\ !£PPÝN¥dB˜žÂÈÈ<ÖŠPKØœšÁRz+Žˆ\>5€ˆ¹­­>Øs“8sv*?d]˜Ãù×¶ÛsÃÄé“JXP×Ô7³§Æa÷É„1;Fvu#§PA+)0~Ã2 EÝXqiÐlsä6™8òF·¦Ë· ï&`’¼;H^a#§.!dò¡¹É ÅÌ9œŸN°‹¥:.†ùæ*'Ün7œÎ*8LêMåÁâÜ(È«ÔÃê®s8¤ë0åB‹¹®»yOÁ€h( 8z`-qçp:/:ÚóËÊà r­ï…ÝC‹ø# ̽5ÞÂÉâ2FΜF\!"b /€öÇ·ÔÁ±g]šPØà0¯`),i`kqT-xð]ã8WØýö^DsÇ>ôv¸ËÌBAw®¤´wkã±¢QTºŸÿ˶|å*ª•…@á™a .ŠÈ$ÒPèuPªl¨oq! Yk“¯K.ù±$êBÐÐ}ÕQ\¾ÐÅ¡^x5…JVH##‹B0ºa²VÁSÛ ­Š_笓1¤,nØ•l´L“WG±(ª¥¦Z±°C— ¨ïEOaµ#Ä\ßv‹Ðö6ì5+ ó‰% óÚ¡£lAàl5pƦáOyàcÑÙÌÆíð—¥Â–ÀÜPÚ¦zX¬ÎcrٟǰZ>Åda8Ñí±‚7´ìƒn1…¸‚‰‹ãXJ¤îW¢±£. ZÇÐkléánjCUÄç0RA™ÀœÖW:Ý&÷G0œ®Å‘=^yXÚ£r}»#>?ޱÙ’YZgÚ|6¨Ahzc(rJØ´N4w6¡J-Ùê‘Qœ¹,Ùù{â@» .`&)ôô2f®b^׈V¯ªMï)"¶ow`uº>N‹ÚýGмa,œ˜œÅÕIµ{÷ãàvç/ctE„°4ˆóst8„ÞfÇçdè—†p!`”ïkZ;ŽlDj—D!°öFhýS øº{Wuc&ÀÐ4P³gö÷¶ÁÀØŠ¸é| ·Òx¼9]έÊ{½¡$ïN–WD<´żÁë,° „pJ*ÁY©ý› `àìYœ¿po¼~c¡l¾¾•n!d³R»z½¼­Nµµ‰òJ­áù¡)h›`â·ïýÞ•“Ç íü,%ápÂòyüôÅ«ˆD†0¸¢Gfè$Nœ8iÑŒøàæ‹çrv´9†cÇîÅ£w!Þß/}')Z·šÀÌÚy,{$f1q¡¦ªò” Obd.¶ºßuìqüæûº‘¼ºÉЂ ‚Ø]ŽrÆ\Éò–JrrÔWÆPÚPÕçÿãô¨néD“K•J•Þ‰Æ=x“Ojä×z3+˜™ !ÂzULJ05AAß鋘¼ 9¶„_#—æ`íìF­¼Ì[~U¹ÿCiƒ]E$!ÅŠÏáŠÔJÎOb6¸‚d2ÑhÉ7î‚ÈÛæÞjäfgÓø³pzt…ò©€Ýã@d– ‘‰bvQ cC@:oBó±q¨ÑéD ¼ù2^>5ŽˆdŸóŠ|K¡PHeUDtn¢·NtÌàE½}þ`Fnœeu´ÔÙ W)¯{OQå4¯WŒ9m-öu;‘ LbtlÑ\ 1I§pJ¸•YŒMÌb)[…Ž®:Y'ðªüññI¿tܱz¼¨êØ0¿È|ÚZ¬jåªnT¨½èéªB:8ñ þ>‰ü»Ýlî‡Û¥Ë¯{É»ƒåeÁ‚\¶ÖPJåAªI6\Ë€*—ÍáСc¸·×à¥DD¶ê‹µ]=¨·0§Þòª¼ª|N½v›Ä ÆÕR9UÜÇÇ.r€H?Qý!ÔôãÕ3 ù( !‚«¯¾†iµâð ²ûŸÀ“O>™ßÞÿ(:3W1¼Ö¡ª?ˆîÖÜ;»Þûžz ?ýoâ gÐJ/¾‡ð{Lù~XÖ<ºÊ:ìmËà…;„YµG4@rrËî}8è £ÿŒL¼ F³ Ç ³*0söM,uÛ‚2Ap:x½¿0ûÞû¡.Î[áqÆq¶? OoˆÞXÙ¥«89aÅÁƒõ0ðùc¢¤Ø:¬ï–r…¡ì V ’þ%dê½Ò=âXZæ`ñhVƒÆ¶vOJW-Cã˜Xq¡Ù¬€˜ôcp ˆê{jQ2n¹P1G Õ9À‹qŒ_I@t©…1Ì ­nÔ‹IŒŸ8…Ÿc:¼¡ÕŸ¤·ÆOœÆròÜCÅ{­FÄÃ’¦«¶­êÆXxqGÔ8 @SWÙ}8¼ÝmÆ­êòÍäogC—ä½9ˆÆí…þÔ 3VTIå,œAÈêE»‚Másgì먒W¢‹ñfxÙòibZ>“Ó[¡óì]•×n·"2“†ÑfAY”7‡•P¦ZãmŸ<\¹[ô¬ÂÞ…'>Ù‰L<Ž´Bƒ&¯Úª~ëãÏDý»þŸ’?»ð[ÿoϺ `>ôÛøÜ¡¢C£ïùD2 )M>Ÿf~ÂöæöàýÿÏÿWØÏgÖüÒ@%s€|äcŸ†AGKäAw·Cäš°^f$™401\½„ºí¬f%ŒQœöà>Ôj9¤¥ÆÁJÚŒ¦& ´Y­dºT¹ ·X Og¡æÖ'‹ÓI“=z©¾Në‘ ¬ êÁ½«ãúÅlQQ‹*¶c0 J@Ç–ÈåTpµ4 |ö4üq=’'P<èÙW ÖqÍæ 2rXCªº·0vYD:x¼}.(k›¤&ž:B?8A°FUu ,#Ax]*yìéw¯Ê€¯•¿æ:•³Ý‘ó8óË (µjˆ©4Tžnì“ϵ Êx—Ï^€·ašªÛÑ8‹'ç ]èe=Žákå©|O65I5:»#è;÷æ4Z6—2½ð0ýP"º¢ªUã—qú¼ƒÖ`’ôФ‡ì$ûNà1#tH ¡mÄ>uªp|ÔP8Þ€n6Ëj¢¨ yh¼m¨í»ˆ3g5À»òÊÊXUÇÔUœ»(é=qí>;U—ß.É»M÷ÕÖ¢«%Œ¾“'1¡’Y3Ú{«!¯ o¯G­¿o¾1&Õ—9¤²:ÔöìÉO,®`¼ï,2ï@¯Û¶V·ÛŒ(–a´[¡W+à4’I´šÛÿ¾•»KÙòPéò¸£mMSwóiê5´DAA¬±æ ÐE§pa`ÚÖèp(åÞ#uU;íÆ™3— >Ö WS7ì«W–`kjÊ;<àÇØh¢%¿Ïñ€p΀ªjôŠ ñ¨:ôöõý;^¾Ò…ìÕ#9ü*N«îÁoÖ«ÙX"H,Í!SÀêrÀ¨âäûÇ“€V§ZM)‘¤{ÓH#‚ ‚Øë«Ðo<($°05‰¹p cj}5°¨ÓXŸPݧ¶X›KÇ&ƒPUëC¬¤—ƒ3zÑZgA±z£³š CŽëäUÐYݨq› ’o·€éÉ9,'E¨Ínø|.Y„¦F17£ÎRHEŒ!0±ƒÏ£ô9(Éè¥Á˜Œ˜˜E•]ÆäT®ú*¨óƒèì8àÎ'1=xqÉá¸ü3ð&INˆÙ‘€,?§PBcp ÚS°MXzÃež­ZÀÌTÎFt¥½2¹0¦Æ“p4¹¡gÇsy9çÂYκz/̪’÷<9˜=ƒ£ðž)O·ÈÆ<¸©ÝžÀüè8Ó¥9½m¨U1¾¬G½×´®·VL-`ÂÏÁÛàÀ–²kf ãÃ$Š¾Ú§·ömµÍEYAjU)dY7ʘ Mbp|¨jF‡×xíåR9Ÿ’ί®³– Ž…‰9pÕõ¨Ò²D“Ž/@í«ƒU)+5ø'°Ö;×ë€MÞätÏÕz…‹ÈÌö¸tÔÅ{7#¦Ã˜ŸÂbЇÑåCƒÛ¸Z‡ É%©žôc9žƒÊìD]ëÚ|'Õ‹E®^½*×sj)_5¹urœ¥?;1-§orׯKÿífwµÌÅe ºˆÙÄ2FN½‰ËóiI%©QÓy mžÂ+NOáÕû:ž;3ˆÁ¾Ÿáë_þ1®DÊ QÕà¾w6cú•×0›ÁÇÃèy¨.¯t†~þ5|󅳸ø ¾ûµ¢o)1ø&¾÷Ã>DK’ûÊM GeŠ ‚ ®u€l Í”ŒüÙó§1œ0£¶©Õª .œºŠå¬Šä†ýñµhÎdã TBsþtUN8ù­Ê¢Y­)Æ‚˜ +QårÁi×!=y§G"s ¸rú*"¦Z´´ø`ÏMàܹ)ÄE% ÚF/ŽbEÈ7p’³W1žÖKº&Ïž’d´ ¶±Nn}gÇäº_Ì„17»ŒtÉsÅ‚S«ŸsIèU¨ªª’åt˜%9sL~é¸Ó—à ul§ß¼Š¥ kLVx¶Ü 榯}¥ÇÅõrº$9ÏÉË™ϧ0tÍ{¦ˆþSC ÛøÌBÞDX(##+‡Wf¡iìD«[_^îŒôÎaäÖ½3ÄȦdEÀÚ/ Âôrþ&b<€©å ”ÜÖßÃìÜÆ{uÔ4–R4Àÿ®FXÁèÙKëÐÒè†bº}S‰|}›àâé!$-uhmk€-)ÕQ—È\“ÉÖÊ+«ãØf7ÊKÿÜe)ýÚkÓ¿ ì®Þ…ÞGïA`äWp?önô\S¶®£°õ²ÿú….ü·wß;/àÈä–Êz(8èZ~ ùžÿ·qhÛ¿kç¥WDfâ8~>݆ýâD/ü;¾úÊšï¥òCA7mƒ…Æ¥»z=0ñ8sÚÃÇ14[CÕnd®oh’;#’óóœÐrAp ,Ž*Ø6éÖá4&8¹çÇ®Ž"p9ˆ˜[Ä çÄÞj+ Ò†–}Ð-$äsTU­h™|Óµ8ì‰`hJ¦ƒˆ‹1’–ŽuxaÌ7ÑÔ…ÔJ?‚Qê¯cUq -Ì9Y¥óÇ-vì éÁ¤ A|—Æ=¸Ï‡òÏ–ÜB;tqlUN#3‡ÌÝhŽôc>Z}n Cq/ö¾3­½çÃ>- õ%¶1æÇxX}|Ó!¦º6´¸õ%½¯*íN‘BbLÎZg!£ ,dCLaq´“Ë9½­hõ¤k3H&‹94ƒðÔ0Ææc”&T75Ãk*SY¹³Ú`fI[8,NŽÊóZy©¥ ŒL.IEJ G} |6µ”ÿăŸ !™ã uÔ£¥Þ•ô<#!#šjXTJËȺH c9™F¦_…†Ž8¹‚Œb þÁÌDSÐLŒBë6#ž6¢Ñk”ïšGÆÕGùF ¬v#–W x« †– 5XZKzÏ.éʰÔÀñJ 9Iö  Hpz¸ZᳪdÉDH ]t m ºªÖiZÄÞ‰‚7K:@ ¼z·“ ŽaJÓˆû¼9BHßY‹À©q„jöÀ¦° q/ zµ\7hêª1Ö·‚¤à‚Š‹bnpYOjukt›Å^­^-ë¹à8¦Õ ¸×cZª÷ ¥é߆pŒ»nlïnG{æ8¾ú¥oà?~ò .Gmp™+¼ÞŒî‡zÁG«p옧à-’ÖÌ P[;_p”HŸþ)IAÄÍ6—‡$ËÉQ:¯”vXY–Œ}s5ÜÙæâ¢ì˜Ÿàrçëb.†Å9?ü~?ææÃë"0ʸY¤û¬ §ÕA£wÁ­˜Ä™Sýš˜ÃR 0VY ²á´ð´×#7zWF‘­“6*IF©áÁÙì%2jQÛ{[‚…ùú§&099‰‰‰I,Äׄsq,æ077‡@p¥‚œ Xª––ä^ô{¶’wYAÎ&3'}'½g{ù÷LýÀĶ•èÔ2&¯Ž!bï@oW ÒCð§·~½°Àе ½Ý^éÚ«òµb6‚À|DŽd–†p>`@ûþƒèiÖaq|ñ2XÌF±8ÏÊÝ Æ%yb®z¸¤VžŹ8\û±¿Ó…ØÕ~ÌH…NLú14) ¦³zÛ` `<,ÈÏã_,¦É!”äË™PÛîƒUS…ÆÎF84%2Bg} l jZšPÅ…0WzýÂ<"›D])­vhBKˆ ÂKiØ[¼ÐJz!&Jû¡ ,V Dö Wbpí9€ý­,],qÚœfŽßz=€J¾ N§‡N¥ƒ^½¦:xއ+ ‘> ¼ŠÂ˜^q]–"‚ b+ä29(UëÃÛyž‡(YW"oBµ+‹À\Bró¢ ®â| b™t ©T ÉT¶ìÐSaá*Þ|ã ¼þ«×q~ÞŒ½{ª¡’Òl:z?4X€è,®ž|¯žG¤o¬G‡;‚‰¨ m^y >©1¢Pl2r™EuæùçúX7çúrÊI(•PH¶Eî®ÙèÙLÎMß3eCb;1{Qo×Hm(+lº$[nðHç™<¨cתm°ˆ%7XÕ %øÈÆ'g±”q }omùyG¤2”N²2”‘j¢ÔPËHå#êŸER«A28‹Ù`JÅ æ2R[¡Ý]N¤æ'16îGTH!–¨$7^ÉËe•7~C3K©VÉí•F å ¶º8­ V©‘¸œŽa9f€£Ê ;·€…x á˜6‡X`¨n@•–‡ÂàÏ‘ž%#¿¿œ¶Íu6©ïk™DóPy|°¨$™^x¬óu××½R}ÃꀒJH*J›»ÙdÑh ɬ€¬TåçÔ2¡¦³ õ¬€7¬žÛÛ{G{lX¸<& cés×IÿíD¹ë~Aé…ªi$Y·Éµ³³ 9ò2~6ߎwßÓŒ.ošÕ<3–Ô{‹Þ Ö†¨žÆlºµ*¡‘Q$}÷ÂeZ>â_7¤† ‚ ‚ØR­^‹Ôb\ª“‹ŠHÄÐY&/µ‡Ü.Jõ¬2¸»PôpJ3ª} ›†ÒòUí8¶¿zý„ŠÙ$R¢·OÞZ;"~óÆ–|èq²30™PçÌ“‚‡Ö G:—Œ?Ëjdh40ƒ„©v&‹J’¥Î£Ü" °<Ž…UÅw]}ɘò²fWVÖ{¥çKoéÙÊÙ*¥rò%r&͵0—¼gÅ5ï™ ¶^¥*ä1æ !ˆ"°¥\ÆÉ×*W¯-“¶¥GÎcn~þ¡\L»Ð{¬ö ­NeÇWŸ/4§ßÀø²žl*­*Úߨ ·A16‰3gæ`nj„Ó¡†6> ÿ5=šÄ[2ò·p½Ô¸´[˜™›‡ ¶£Q¡‡Â‘Åð\Pj?…X±ã‚c*¨”›ËèX™ÀäJþ"1ÀÐà2Ší©ðYtËàHî:ç-õR]+熮. -É©vÕÀšÀT…÷Lwé…q̤mðµtbßá#hR/®rV–\ñ‹xâ`´š‘Ëð°Ê6Ú ˆ²á&s¯Í¯ö®Û¥÷×m//ç¼ô.™œöŽ}ðÈk‡zй7Šóç^—̭߳Ïq 2< oN EIM=ºËäaÑqîWðl¾‚œ½§=VjkZÏãÔ©Yèù 2Zºê9(•µ¨šÀ™ fhZƒQŽªàL^Ôá NŸ B#µ1ô–B3г Ê8€+ç.Â[ߎF}ˆÉƒZœÅ™Sìzt–ë7Ô6t™$l6u¡]â€U @eËGk©\­h ôáÔÉ9èÄrU{Ñ+=B›¨0Oæ¤ç>3¤A”z5hì»N[‹½Í—qþÔILj¥ª'kB{;Ÿ/Ü-¨_ìÇ©7Ç¡U‹H%ÛöÂËülBã}çÝó0zœuku{ߤs:Ôtí‰Eïn&ï½3_€F­¸V^)}–†J£|Ë¢ Ÿ~úéÈÝò–)l¹’MT’â¼%ïÑê_êÌ(w¬Ò>AA+X*ÉxzÛªL^ µæfdT­«ówî»ä7ùŽú~‰;ZYH 2ͦÑÜ×/þê21…¬ƒÊœ-5Ë”'Nµv+R°ëóíqßsÔÜXIæ¡ ²O\“-¤|\![p æ`Öò®JÉUN_qû眡¡ž·ªrÊ88*99ÈùAAAA·r€l¥Î Šú ‚ ‚ ‚ ˆ9@n‘Í[ùž ‚ ‚ ‚ ˆ·r€Ü$••†À#„ ‚ ‚ ‚ näÙ®7ûî2{?AAAAìVh˜›¤Ü2¸¥ËÉårò²E—½%‡AAAA¼}PÈ6Pt‚l6ôeÇ/“GAAA»r€Ü7ÅA‘AAAñöC[àf¢:(„ ‚ ‚ ‚ Þ~Èr ÜÈ|4÷AAAAÜ>ÈBAAAÄ®‡ · !‚ ‚ ‚ ˆ;ƒ--ƒË–q%ò—¾eCYJ—Â-ÝßøîJ‡¿·Ò}‚ b÷Ö¥Ÿ7s‚³ú¢XßÞ©õÅÝöÌwãoLÄî×$/É»›ë:òlAAA±ë!È6RÎFC^‚ ‚ ‚ âöC‚ ‚ ‚ ‚ v=ä!‚ ‚ ‚ b×C‚ ‚ ‚ ‚ v=ä!‚ ‚ ‚ b×C‚ ‚ ‚ ‚ v=ä!‚ ‚ ‚ b×C‚ ‚ ‚ ‚ v=ä!‚ ‚ ‚ b×C‚ ‚ ‚ ‚ v=Ê]ñB 3‹H›ÜðX5àV¿‘XœA0e€ËcƒVˆb>‚Ù〖»•f°˜CBï…Ó°–XD@ºWµU{óI‹)„ü¬d7WYàñX º‘´r[xÞÌ KnÓ.É Aă( ›“ŒE¡?FÌ!+(¤ýÍ+iQºŽõápܶ #¥Ëmž¦(#ÀÝ`º7r®À^ˆB ž£ìAÜáe[ØX¶ùòeû¦ÊAÄͱ;"@Ò#øÅ׿‚¯üÇY„Jí Á׿ûU|íÛ¿‚_RÂbroþü<â­ÞPôè‹ø·žÆ²PTÞ+¸øüq1¬¸5.Æ0yáNœ8Wžý&¾õÜ/åϧú§»A¹7^ÉÈË}xö'ýˆlô~ôä^Ç7®ÇG>zé¼ìàsø—‘ýøì¯·@±¥œÃÐϾƒ—\h´Å0öcG?òAìËþ _~µú42F5–Ç—Ðð¾ßÅÃÎ+«Ï[ŸÄO¿õ2Â5M0/_Å%ñ^|æ}Ðç%Aüxý‡“ÈõXö£öן„ýr?ü‰e„O¾ Åþwâh½†B ‚ ˆ[‡[&º·½C~d %0:ÅÁÓl…"bCg½< ‰/"d”PK– Wr,#S)åÊ™xÑÐ2âJ2á¢:3ËÁXÛ‰½nBð"N£<8 f•”FTJoµŸ™„ž#{ááb91 Öÿœ‰„‘5; O±¤¨†KXJ+¥vœ–†}h‘ÒY™šB8[ «Ðs‹˜žKC0ábXJûùÔûûûå!6œ¹]Ö|Ý/„±VCíYÂÂBÑtŠ¥,(òŽQa€Ý¦ßš@·¹l»ÛöIåƒ3ÍB5£A‹;ŽáIÀÓbb%_¶óåW*W¡™ŠåÊÚØ‹V©\E¤rÊÖÃF>‚xëV0rê ]h©Éb~à,ú2‡q°NdpéĈ{ÐT-"äECnçëqð˜ så~gÿE\ºñÑ÷Ü /âèÄe,åÄŠÇqM󟃶å!‹¥‘d}Ͱ_ñßÖçÝUã8GºÍWq~,äðE,5vÁSá 9w;:ÒÇñåý~ðüáRÔ—…¯x¼|"ft?Ø >Z…£G« ½3³þu†“¾¶Fÿæ…[y:¡é ¶v¾n¦ÙI9]ÞÝŒÆB”ŠJ§EV2ž„Ô #Á†#'BeÔÐÜ_\U#äk9hŒ©4·$‚ Þr’ #8Û燩Sª¯n4¹£¸rê†fIåÖê"1…¹™8ܾªu=7oÒƒ¸äOIçJu˜¹ Q g­E:Ï »¥RÜ­»]]ðÅ|sýtµºQisQ2™J%”J86icb KÊ:tuïE[­UÕUû ØÄì1;ÚL#«Lå/]/0¯F.ŒÑ¡(<{ZPWW‡ºZ/lZì5uù}¶¹ÍP’󃸣áÌÙY˜÷öÈe»¹:_¶§×—íJ媻§+_®ŠO>P鸻¬·ˆÓ S' WåÃoåcÇî 9äxIÁË3\‹k!“¹!GKWÒZŸ®"/—B¹f •©(4umð¼ø¾ùÕ>hZÔ>únô°œ—N—*µk©–!‚ ÞZc«È™) ½§vu SƒSÐôîC¯-à̆ûý¨êìϤƒW¥Ú¼‡åHˇg@}·þS˜wöÀ­\ÁbÜ §.‚qÉ&¨V@vŒh-N¸\<nã¡I2ó˜ñÐ)S˜>w¹ž=›ÊÍVŸäûK ó,¢dçOŽ £u¢¾9?T4YD(Ãòå~L q,.Jç$ŸÂçûaRä‡ö¨ p,÷cÑÑÎä"R¼<|7–aC`±¨Ì;JTFÌZª›‰;¤!ÂÀ𠢚ZtôöHe;‰‰I¨÷÷¢·7Ž d[÷ϱ§>]årÕwbY -4› Þêr›Ë à×Í÷¨„B!°¤ë›´q?.^Z†{ï¡‚cÒ„š½ÝùTÒ†Õóöï?,µ1ÇqªoU÷íU\ÂÐ`uû]Pc™ Ûì±£Gjè?‡W\ã÷Ò*ÿC'Gþ /öà½÷6£ËÛ„fÍþyt‰‘‹øÅ5ÇC’Zvo1\†‡µ¾¾4«`yd©ú{QmŽÁ°2‹¥,`U¬```¢~«ÏÆÃÖØõb:ÝŸZJwhɆû%oú:× X<¡½ÄÇ®¶ÄA#l’5”Š$Rl®:©‚ bûêê" Æ–§FâD1(ÆGg!³œ¾žzTi€ÌÒN_J£ñXMÙ%Ý9CöÖ¼¾Á%Øë1ŸañÏ#mk’ ´˜Ô¸Zž¸ˆ‹A^î]ÎZ u´˜Âü•õ°ÎíjÌGR:&Dpê Í."¹È&måÁK ´öÞ:è9†ljC•¥==WZc£8)hQœÎÓÖ…&C>*…9ADûAX%£3*ÉXŠY¤%‹“ÇcÎQ„Ng‡™š€ÄR¶5Æ*4ìs 6ÄÒä–¹¬lÈeÈ—m‡šY«\®:öûär5?0„ù–¸h‚xËʭΠC*^Òè“êÇTV Çj¥+"µ0$Õ³¸»¡Î¢D~lfI*jÇú–«Á‹8‚¨TÎùñK˜mPN`HŒ#”Ž =<e]=œ·aª…]§N8}ö5k‘öí…•«üCkk÷ úôð¯ÿˇd€…£z<ôëÍ0XÍeŽ7ÝЋ⫭~þ÷ï|+\ ÞóÍPëR8Ò| ?þò×a×)Q]×câÒõ܇'º¾‡g¿ü58Li„ÑŠ'?ÐudúºÛàr"õü³øÚ ”ÓäD5ªü:ÞßRéfN´¶&ñƒï}³Gñžû›@PAÄvâõ™ÑnÞÃmЮd ©Ócî jøò $䈈ðîïEME#‰‡¹¹{xpæížÆÅÓ—­k„ÜyÅñ°Õw¡kuTfËe±òiNÆÏ©`0h •ŽWÈ2Ö#ø?È{À„b8EÉ ÷ï~ßoÃhPçÓàth~×ïái6?‡Ö­bà ÷ :ï#ÿ>µîfZøü<},†XV ƒ^•OWÿ0>õ»%•OËûð? Ž ùy…?¾€Þ~÷WåŸFL^Ä÷ÿõ ¦Ž¾¿÷ñ’ ÑöømùϾG>…§ï‰!«Ô_»ÔAAÜ"Wú& i;§RÄ”\…× ³9Œ³g®€;Ô ·V s};Ì×Kˆ7ÁéÊ;2™¦F8CçÑ?{eýüœ”nÝ>Ñ Aé¼]‚”‚ŽZªù8„ÅÉBú64Ô$±áòøP“f“¥þÿì}œÅ•÷¿zf³6GiƒrÎYD#ÑdaÀؘäÃó%𿟿;Ûw¶áì;ûl¾³““É A ”¥UÎqµ+­¤Í;3õuÕ„éé8awv÷ýW­™éPý*t½Wÿ~õÊ‹ô1bdZvnřЩ+ý/Å8:vaëÉŒžž‰õZþ£yÖ,ÂôñE`\ ›} ÑÊ»^® CS=A¡)ª„^_ë l[¿c¦£L}¶H¶J}¶·âË/¶ê³]&“çjä¨Bÿs5°„^Àɦ@Ôçsˆ3ذf ¨ÃØ6OFO©€à*=Ç6ã³í ÈÌköµÇ$ù¥£fŽB1Î`ßúuè7SJ«Cé­_¿Þ,TM‡\Aîç¢È4DÕyÀ1×i (*@vE#íçe ®Ìȵ½ß9d¹5 CZvN\i*é9ÈMwrA.*«:ñÎÛo£}D¸:Ñxh;‡ƒLž‚Œœ\Õ8$!ñÈ;5ù MÇ÷¡¡SAµðÐ,i|¶îkDÉØ¢Èå_}Í8¾ï 7ùƒµ£"ZNìÀ†í2c*¹«Ñpb?ö6xÑzFM¯žw4ÁÓ¹Û Ÿê<ÀSO$•|ËBå¤ñP²2ÆÒ1|ZŽp ÑÃqd×xÆU€ùÎboíäÌ Þ¸µ|&ÊÅ®M;‘7s r[aÛÖ½8ÅÊ1vÒH„YZ'vïDg¦_ÓI ¬¾Sû°åàYõ•aÉ‘®æxËÔ£‹I/q•94†òà­‡±ic ÇÏBMpîØ^ÔwºPx¶§ó­Ø¢>ÛÅc á2y®¶ñé˜"Ÿ«ÈŸ=Å4†@Hê˜8kàœWáA§p§¹CúÆ=p®¼šû‰¼?xðw ÆÏ½,pfW\‡ §#=Ý­¯³”bL˜[Ò£¹¥î¤_ Cç߇{Oű†ft"ÕcgáòÂ̾µ @ zªó\rÐïJÏFÕ¤a( ¬r–Y>3*X´ñÄÒ‘5ƒ& AE®ö(‡×7#gŽÌ)ÎAIõu³B)ÂðQ>ø½òñŸ2Ýþ· ÜÓOá0Ôd ÏÍŒ®:¯×âQãá=Ë äÅøš¨oõ¡pÀ@Œš\®^ëŽÒ±S†Ru°H£™2àv ÇÔ"?yyzû0*«“gW¼š¸|¶«' {¶'`F9,Ÿ+ß9ÿs5Aç‘ÅJ $ÿv#-ÓRÒÜJJöD€ô(È*ªÂ°"* @ ¤”Å…ìâJä0fm0±tªF¡îArV;÷ÞT²P`¡YZ1†è2 «ªü8^€²"ÿ[±U£‘#ߊ©ƒ¼,T-2ä"+äíA5Oè›ÏsWÛfÈ)©BŽÃç Ï•ÿÛ€ê18<¨Q1@ @ B @ @ ú<ˆ!@ ÐçA@ @ „>"@@ @ ôyB @ ¡Ïƒ@ @ }D€@ @èó „@ @ BŸ‡›Š ~pÎ#>µÇ´ûcTh@ @ t#È$hÉào»ûÐ?¡G„÷ur¼¿å¹?Ö1@èû}ÉKòöv]gËdçþþÌ@d†‹\…gQî f”…ïÖ+¤ðÿä¥\ÿdf§ ¹æTæ ’˜ÝK"²+‰ A`ø8ü_}~BCóùà åþC'ŽË{Š$˜¢@ –SdºŠ¢Ø–#2× l¸Ýû˜ôàšò*°w‰K èöNÌ´§â‰¸ERzÂÄ•€V_¿óà>Ÿÿ»Ô%â[©ÿüƒ'Žùõ,óë[ùǺt•±AÁMŠÆ¼œ8·“޾w£ž >_Ùïó“ý>UO" #C×ò¼kÿ^™/±OêÊ@>ƒÉGêßàmü_‚çðpùx¸|1¶‘°›†Û Œí À9,ò²6eëÔO0¿öEäÓo °Ðs£(,J 03mÕ&˜±þ`vÓˆO} yµ=ÓK1JŽ%ì¤^fD°>““ÔÖh |YÞ7ð@ßÜÇö©§˜}Ð×äeäÕÑ·<\ß"LÞãá(ë§±®þ=&y¹ý‡«ÇäåN3ä‡/P÷LWÞ@{ÓíŽëâ‚2ëèVí#þÌu¬ÿS÷¹ ò 6óg‹yád%õ‚ì“ÿ¸ÿ?u—'`ù¤a+~œ7Ùús‡ óá¯7æ ØL®€ïúŸÂHÙDņ'ûv©Ég%RÀˆÖþ:á_åçÒ÷Þ× ºê>°á1æÇ\nÜôngþÛÿ9b†ÿ×òeDŽÁ¹†xà¦TOÔ9<ê·_Fº¤þË-)‘_üÝum0¿.]¸•¢á ¾‰CmĬj˜ÁÕ)¡»Hz'©¢ý=, –èèÛ}Ék"ïÿ èÛEˆ~©Ÿºò.yï½Ä”/ïd3ÂBÊ;)`Ï,Z(ÞH²ÛH^;/p¸¥¨Ìv)H,!YtÖ+°É·[¾Èé.>/˜"Ž ²Ã'+‡3Aœ&ŒËO0”a?FffFßf,¨ ɲ0RÆàŠv,##=ô=ä4âÌ£ÜxÌyŽÌ«/¸/,ÁÌŒŒP÷'¼$¡ñüà¦ÕÉmçØ¬ XÒ :®­Ú]Òƒ%ø¶Ê$.XF(¿Læ7ä_¢$jFrb½9ú‚~b)Ÿ ¡¿ fú ÓL¼‰Ñ·¼É›žÑåËMwEx‚D•oFdù²Xç’Ú- [Húò_ˤõ¦šØ)wnC‡8<2ãé,¶Þ—Ä`ë5X%=¥Þü±óàmo‘û¦L¿ gj—ãäÊ'àëh‰ª|šlmýĺ"=g&ÏÀ1Ë>®­]W/„;<^a9«L¸Ñ`bÈémmmþ),ò˜Â‹º1ð=‰òZq’_ëé#FÓQd>™¦xuæñˆ:f:Æ“bB€Äb'į–4SqzDÏ‘r¥é»H"ôɯ¼ÜQ_Ü£ò¶·ucù¿è’ÓgQ¾mþâ Ê'ßõó.y Þýs{…[JÍl›8¶¼ü<-íaÃrÔ›ÇjRÎÜêf­bôÌä14Tmcͬ™Ž²+ÿÒòFœŸ=h¬ÜJg܈‹~†öƒ_F̉""„@ úÑìï}xÚsÂãah÷÷æ<Ë9Ê2×!Mxp®O¯Î3×Ä4ß|\Ÿ2bœ§~~É,!H¼Ý.¯ˆ—Jʯ3z•¼“—iäíaýbs ³Í½X|>›E“ Ñ^î¿öã˜&Üð»»v‘ƒ¾ö;É<Õo_‰]oÿ§÷~)Ï+6#¯ý{”Œ¹PžsôÅï…HÞjÔö Pµôìæês`,¿3£,x^ø~½PÉ܉€¡¹%<¦2aQ‘öÓ#?¸VB¦[ÌŸ/¦5&xצ„EÊ™¨h‘ÌâÅKDÌ [03i ü†{ƒˆcAP“5ÅŽíÆzâA#sпÈxõÉ¿¼]1›RG^©4ò£vGùšú»äe]S]äE˜¼ÜÓJÞÈÙ!Zû‚i䊘j.Ö~\ Û\M$îòŠF Åì—ž]Ä"XøòŒŸÀfý¼çP¦eaÐÂßÀ•™‹oü_>v7šŽí„·­InMÇváà'Ï@q¹Q2æ"dWOÃÙMo{;#"âB @è›Æn¸‘®;òg߉âK¾´¼2¹?kØùpå¡ýøöÑÛ¼CF°&ÏŠ; s¾’yªyö/•–5ü¸sJÐ~ÌŸçP„û0»§Gólƒ1ªc%-['¿ç«ù-Vó[«É¯þÊ3=B€°n,X2¤RVôyÛRTÞ)ïƒò ÝÑòšMõ4•w®FÞlUÞáòÆ;ûÙ’ùÄñc¿U?¼ÍØxØ&îb\a[Z`W2&N™º;Àõ$† _27že{D€ØõkÑ›§UpÁ=(ºà>éù±â'—¿USóyÑ—IOS«þ„ÆUŽ"?ˆ!‹†@ ¤¢Õ»q„/l ØŒêi([ðÏpçWÈ}ŠÛ<ÎçéºÂ{ö8N¼ÿsé-œ/kf4ðîŠVF±@Âóì Ësfõt”_ù#¤äÙ£æùø{?Cë/yæÁ_õW…1 ÒKöôÈ[Åþ_&Ð×ï$sp0¿Mòûïh åÄcö˜ˆ„ ÝëƒBÿ#?ºC¼Îä}qÝûÿ¶‘7S•·tÁ¿˜êÊdËÛÐÛŽ¼SQz……¼‹~×Yˆè¸aÖ âšMÖP¿¶¶ÎÀæ Û¸-dR€qTxLS̆Kˆ]4Ážv‚´j‰àVõ­g‘Q6«½Ç×½kzŸŠiWã¼z í'vâðSwF±wD€•B ú¢%Í…Ñ!¦L.üüݰcv¿óœÞ·Nþ.: #®ù$ÊÅÀúØK¢ýÐ:Ûd¹#"„'fY•l—aÄyά™ª¯ý­<yá»ÒP‚fºODž¹qÅ$:†­aXTíL¢°:Î"òû;[ù=úÂ÷d~YÈ0T ë8áÎ,щ§¦’%ÕOH%¤»ôÉëTÞ‡å•!þ¶ÇåÕ#üƒñ¬¸O#ï­öÛC›NLSy¹Ö¶I$½dJæ?„̪Éý ãòÉùMâ“{=ðy;%»•ž["+ï½£½ñ¸i¸êÿ½ã\½dÉW˜Ëí7zÄ’xLéóeÙ~d–=ŠÎú½d„~A€ÝD«îzîüØñæ/QûÊO¢‰UŸŒ»åÇuýá9s ‡Ÿü:xg«-²<Õ_ Ï5w?/=!ìä¹óÌQ|ü6ø‚yî%ˆŽs ¿÷Šü²™ßc8¤æ—{‚uÜKpºD€=®H^gòvJyïèayŸu +“'¯’÷[Ï8“÷ ‡ò&‘Qb,¹õò#Úhä 2³épÞ¯Š0£rŠ/û§ÄY6v7@èc7ˆü™·Á]0õ;Vé ³M=Ö°}•DçϺÍ4M­ÑÂf€e·Ç˜ý)¨6º`=ùÄþÂYw ÍAžÓó+Q0ûë‘ò3 ¹•¹®'¢»,?ã(føy2èi0¦™=­ ÒA~¡`Ρ;FÌ«N´ ÅWKT‰•%i#ú£> yÉ›.å½Ý¼±÷Jþ$»>Å–?óv‡ºÒž¼,†?½òeÁ1p ¢nc“7Z×Y#¢ÔØîAEb ·£0–”ÀgˆüxíëQ·dFKâÚ–Žÿbád„³„cµ÷Â+JÎ}o¹¼ê¶àÕÂ"W{±š#Αiœ>eÉCP\Šd¾Eéái0Ý{OßõOK„@ ú‹ñ+¶œ‘—Èß»ßù/sâ[=¶K=G¸ŽæŒ¸§Wþ¹õC|y0Êyž¨åtjÅCꉥø06ìUü厎5¿wo3@ > y#ûb)ïã="ï€þ ïÈðöPž=¤‹l ŠÓi=˜¡n±‚ÙÔï‘5p‘KÝ_ÿžiTqŽ$Ž®éò@í„j¡/"­d˜ôfÓº†S&ËÁüé½ë,Ó–K©«ú!½l$ªxÇ֔ɮé…{’–g1õµèò‡Y99iyÎ(…Áß{ßVžÛoÀÉÅ¿DÇÉ= ƒÅå¥Ù¥tÒK‡£tÁÃȬš’Ä:…šï¾g3¿qjé#è°;…”±éÔ„¯7C >è}°—äu oõïÚë‹UyO©òõÅRWªòf¦ˆ¼)S¾ßyÇfùªºn‰~ùš-ÓkWÉ$'àDÔpºóqÕ}¾íoƒ7Ÿ”ÌÖ¸…ÿj`l0yL‚QÏ×¥G „Þ=cAc9 bÊd\ÓN¬§L&tz¡ôȞ̳ &A‘,è‘=›ßɲb¶ÍÈÌ H¼ñ÷Ū,E&òê‘T¾NÊWèºäÙ3îD'øŸ¿y4%;¦‡~ðPBÓ^1>îƒâi‡çóÇàž÷cŒ¾þ‡(s!v½ýk?Ûÿ´áùŒ‚+Î×0E‘iXÍ»Òo6v–#îþ¸"I³«xOÜ”@ Ì4\oÜ©±xhZ„˜2©%ß S&}×?eÀ°k„ùñÚí‘ ‡t“o‹ÔO¯üª_u”gßéýð¾ûwàj^y ¿b㚥qÅ÷­¯NrÎL ÏK g²P>C9PÏb\~õ¯ÁŠœç‹þQ¾ m]ëáF^tÓsöb¯±X¦'FÉ’Z&ôg} è褈>è{ò2y½1ËËTyY f&òòž1%8‚ÇØëwê þO¡+e )¡3UyY¬å«Ø(ßl–ïëíAüˆ£|±ø¡€Žƒ¹®»ñÙ€®s¨Ql;n견QRR‚[o¹~òI´¶¶†ÙLV¯ÛŠÎþ i³¿#‰±EÕGS:? ìä6ù@efd`ÌØ±Ø±};<¢!™Ú1 ç7Uƒ*Cûpº±#‡"ííX¼l)ÒÜn ®©‘×uz:±{ÏtvvÊs 0¤f06nÞlxÆårá¶[Ês6oÝ‚¢ÂB™Þ†M›’¼ˆ@ ú*äÀ=8¬wN™Œ)Ó¡¼y}¥p¨£<{}ÖkÑ5¿éEÎòë;¼Æ˜¸HH}ÐsH >èOò²˜ä×DŒñºK^qoU(NË·§äM@ù¢‡í…º#{^Ÿ/‰²ÒR”‰Ï²2¤§§‡ÞL b£sÑ?À³ùeðÓûÁ|pÃ+ßìˆ}â˜$?çª„ËæÍ 5€1cÆàÞoÝûï½7´}óëw"77W6¶µk¿À¢Å‹1hà@|øñGødÕJlÚ²ËÕïU•Ux÷ý÷±hÉb´µµaÔˆ‘¸ø¢‹P]]…ÛÞŠÁ5ƒ1tÈLž8WÎ_€+ÔmÒ„ r«©®Á¥sçâoî½ßû›ð·ßûÒÒÒ°m{-n¹ù& :߸ãë1|8r²³©1‚ ¡·¯/O™ÔÊÃû¼ÛÞ”/lçY=W\ƒ°eòR1Ïz²Å“ßð%–_šòB >è·ò¾ãLÞ¦(ߦÞ$o å[ûvrt] Hˆ‹3ÜX+ã÷FŽ*Þ9ÅÛã—pQžW-¸BzTBÂëñbÑâ÷qüÄ éq1gΔÃçëP¯ÀàÒÁp«û÷4íÆ Œ¸g›ÎaÅÊ•ðz½>|¸$U¾¶pa( êC±tÙ2yOAB|çÛƒ¬ÌLœ;wcÇŽÁŒiÓ1xð`\ÿÕë¤WÇÁC‡0ï’KP]S…7Þ„c'Žcñ’%2­ƒ‡!=#Ë?úH½¦ãnjú ë1}Ú4,ýà¿;šúçR?—ø¡ÜòòòqëÍ7ËsΟ=k¿ø÷|ó.ìܽ rH/˜§þò´®±åÄ_9=s[B_y9Qõ'ö²à[æiGçç¿GÚ¼ÿkkʤ8W\…™<•Ê)0·7°z ÷¶£}õÿ ãòŸØÊsÛêßÞ¶P@4¦Óus½ÎÜpÆK >3¶u"N‘Ž.þ½R«"sUö65¿™6óÛ±úw`j±-KÜõº5Aéú$jdоM”ôëƒÇT}ðc›úà±€>ŒLÔ‚Ï}MÞ ¾ms,¯"ûb{! ¸-i¬W1 …TðÊ÷ÒÛ·Ôkô^$›Ð‹¥|;Tyýº=]Çc*Û¤ ñaÌÇáu3(> ©®%Š:èom§²J˜“ŠœS¬æÕ­þçëf-|òäI<ýܳ¡)0A@T¤;- 3±°üœ:uYY™˜={êêêðÅ:äÛììlÜpÝuX»v-:=L7Oüå/8tèLç²Ë.Ũá#±sð.Iï ¦terëÖmصk7 €¿¾öšœþ"drÝýÍoâù—^DGGGèü¼”––à—,…Ûå‚×ë“+Šâ’äJEyöîÛ‹ýû÷Ë)/UUUÈÏ/Ç:;:±µ¶V’)ËËñÉÊ•H—yœNCE@p`(D|äÀ”I·É”I_SŒ…“[Cs÷ޒgÎ8ª+«1jd9šÏ¾‡­™æ9­ã Æ·­DθrìH;ƒÃGŽ„ ¥Tγ?6‰ß–F¡ø}| Ú–üç}ß´Žù[ä¼m$²Ž‰¥ z>Pêƒmݪú¼u=,/œÊ»5%Ê·Ã"„/BʦÓ{Úž±G€h߬èŒzW&Œ[7e Ò|"¦Ž'vìEî„apux‘¦ÐË›ÔÛUå s`>š7ìC{CΈ*¤{ÕëÚÀ ²ÑÎ;Ѻý òF†7Ýe·æŒ GÃù矇C¿³3³0pà@\wíµ’¼'@víÞmÛ¶áè±c8~ì8N>‹.¼Pzg£FüÄDvV> Ÿz˜î2dð`Ütý Ò»ãTãixÔtsr²q×ßÀéÓ§°aó&äÈ{ââê«®’iœ:uJ~^ùùùøôÓÕhP÷ ï îãøhÅ'òšsÍMjùz1 'u'OJ¢ã{<€³gÏbÝúõ>|˜$4©R^V¦Êr½Œù±rõ§’™2iò ž*¢ìÄ>q-ý%Âöê.ú„%÷¶,†¬’J ô xÏ$˜ŒŸTœEe̵pWÍr+üéœ;&çK·Ö€W€©‘`#&“±£Frû_á58cú IÚoß±{÷®D›ç¸Æ]‡´ê9`¹~ë;wTÆÍhÙú&¾ts 6L^7zôhé…ØÜÜÝqmnìË#ƒ¯ÈŸ¡zRÔ:>±ío?×øëàŽÈï1ENóQëØ¬c…ů’8å…TøÁ¤_ø§ÐûõÁ,>Xk_¼±Ëëi È.&R¹p“}~Éð8 ’yOµÆj샳Çd 9$ÙåkhsømZnžùIU^—Z¾®êÙª®‹”×WÝ̲üÌCœÛ+ ‚êá>t*"J=ÊÆ C»ÇÖáA¦;?ø÷ÃÏþߣ³ö|+·¢àópæù8[œ…ü+f"×—œiUÆ`puPîÓ}@kS3²ä$D¾ƒ¡¾¾>dŠé/£FÄÖÚm2ÐhuØØxF’¯½ñ†ÜWZR‚‹/¼Ï<ÿ®¸| ÑÑÞŽoÜy§œf""è^>o^~õULŸ: Ë?þû÷Àe—^*½.DÀÑiêþg_xS'ù£Ï åu5}á¡qÝW¿* mªQ9nô¼ùö[’äBÄ)2mØ´×^sœŠÓØØˆ?=ñgÏcîW¾‚’âbIœÈü©÷ܾk'>X¾\þž1cº¼Vx€äæåbÙò$ ô!¯Y`A€pbÜ¿BJø–Wѱå•_ZaP(aÑçõÞGD0Ï"FÖy³ÏÃñãDZzõj´¶µúËBLÝü2¼›^ìÊ2GÈ(êìdرs:ˆ©S¦áòË.ǧ«?•žŽ©˜g~#½@Â*ðu¨yUó»ñ¥®ü†¿KdÓ3H ôb}ЮêƒWú k™QéÐú ßÉ 2òúöÁæW¢®K™òåþé;r*¨*¯O•×./ È‹°Õt8RÆž±G€p;§Xù„ëbpy8<5…¸ùú›ñꫯ¢½¹ ÙøñoAÇS‹‘~ïUpeeaÙ¯þŒëï¹Íy™øâ‘ßaöƒ¶ŽV”«EºñÉ×0è"uP>m˜Ÿüðxáž%º^!&³µ4…/\oÃ!…ÜÜ<Üyûxó­·ñÙÚ5ð‰åý¦Á’àö¯Ý†»váèÑcØð.¿ôRŒ1ë7nÀNu¿ˆÿ±âÓU˜8~‚ô¸Êu¥ô¬$ʼnº:I\äæ@EEy”˜#GŽÄ-7Þˆ½ûöIÂcï޽عsî¾ë.ì?p+?ýGÂd?tè°j„¯øDýœƒÓ§Ñxæ >ýl5† †Š2ÿ=VT`Ò„‰(.,Ân5MA¸Lœ0e%¥=j4233¥wIý©[5œz O½ä{¤ÈB¦rJRCåÉ,_Þ'ÚŒ_Oð®Má¡iY˜Qý†‡i<7˜A‰™Å á jçú×—•–ã+_,=#·ª› ýýó¿¹pð•ÓXƒq3‚Õ|óÌ·xÑðùš5˜0~æ^2}ü±$A‰ÅãÉ Ó?)üÍ Ó‰H"ƒ€ø‰YÌÜ¿t¯4Ãì ¿QˆHW`E‰¼µ£—d,iýõ†BrÍÈ7}@ò&N^D =./"WˆÑžç¨|µÞ‹ÖÂDš_¡9ž9”€þÆÁréÈá+â¿&åË`3v»HöYZòÜð¸ÔBxk=^zæ9,ÿÕqñ¿</ãHËË‚ç;WÁUß•«>ÄÅÞo~.<ZŒá—_&§´5{±·"Ãn¿‡÷îG‰ºÏãó"»¥¹IQØÇû‹á«×\‹óç㹟—䔘"²ðæ›1mÚTìxi§Ü¿qãFüð¡‡ðêë¯áóÏ»–þY·n½zlî¿ç^¹rË0oî\IBäååá…—_Æ×]ŽÀÒµcÇŽ•¿…á•×^Þ={¤{ð¥—Ì“qI~ý›ß`ʔɸñúëñÞû‹B÷D†M3Aˆ ªÕUÕ’Ü6Ka\®\µ ååå¸è‚ ðü‹/âË/¿”L¤ W„ȾýHcD~tcº½èþÖ$üíIð·Þ pãFkðJ©1íåBU‡ÔÖÖJòC›g_`JDs E‡”Ï–­þ•ÓÄ´Ò%K—¢©©)µëXSO~¯Áƒ°ã’%´Ž‰¢ H¼ñÉ‹ß'Ë71g£ä ¼P˜"–¢îÏ#åÕ.‰œú1@l—‘uFÚóÒpfù^1mó§àÙ'~y£fã7÷?Œ=ð}4N„Îg?BÛyÃqÛe ±§é8š| о=ÊNÁÁ÷Va2~jÇ¡ºÃ˜ÙØŠŠ‹§âl^¦µ1¯u»kÏüÇ#¿ÄÌiÓqÏ]ßÂó/½$IàôŽÛnCQa‘$4‚éˆø}ò ¦LšŒõë7 3@h„CÌ9gšÎbôèQxìÀÖ­[eÕ+.Ÿ/Ï9­¦óÊk¯bß¾ýòÍÚT5=á9ò/?Œ}û÷ãÉ¿ükÖ¬•ûE|`ÚÂ{£³Ójh"æÈö;PQQ!ßÌÉm¼^¹ Â$''·Ýz«ôH5j42Ô4ĽDý<|}ü‰îJ0„þ: %¨½Ú1rôŽùõ 2BB˜ŠËXˆ«Ï¶kDMΜÙRwm«­Õ5nü L¾1 É£óÉCoªºâalÝV‹‚‚BœÞ,Yº,Á•ãÜèòäé:7 Œ¾ `\ëX‰®ã°¨øö똙WKìSH4 ú@gÉ›y‘²òŠÏ#F`×®]=P¾<ò ”_0Þïûë–¯úýÂóÎðvíùy8ð×e(›; kW­CÆ-•àuè¨kÀšµŸc|Õ0d¶tbÜä‰XÝÖ€ ÃÆ¡ú¢ÉÈ

ņÜ#GŒ@eå ¬Y³Ÿ¯]#=,õòöϪMðó_þ"Â$1Vj<¹ Ɇ+›üÐáCxñ•—¥.ìpñµ"° åˆáÃñáGɱ‚ðΞ=s&î¼ã<ûüóÒ–ï)ýO_žªòN:ÅEÅxã­7¥¾IyE\¨+æÏWë~€G²@ÀÑpráÛ÷݇?>þ¸ãq­–ÔнFNßÔש"䂈©}ùü½}ûv¼ùÎÛÒ„cRû2º˜-¡y8Ñ’@Ïà¤y€(ªŒÍK¾ÄIÕª(ÌÃÙKÆ# J[8ömÞŽ»þîÛðµy6–áÌÙä*nd¥àTË9üÇc?Ç7¯»ãÔÎàÄguÅàí Íõؽb†_6 ÇÕÎ m÷ð|냟9‡‚…JÒ¥ÍÓ‰,õ[ó%$/çššðÁòu§°hñéêÕ2žFøª,ÂøY¶|9>^±"d‰ÏW_{-tή»ePEƒyþÅ—¢È Ä9b%±º‹‚PéTË@4Ä÷ÞëŠ ò¯?ý©ŒÎ/‚¬ŠFÙÙÙ3gÎÈæÔ Þç-µ±Šé4Á,H’ÕŸZ-†@ ñ:ásbà ˆÁ5Õ˜¯<¢_æÙçðíûïïy«‰%×wïÞcjܽþÊ«¡<ßpóÍþ}ª ¿áæ› ï!–œÞŒâ^§NN…š44ÆD~þòÌÓ˜éå˜8qÞ_ü~ÔË…ð¶àìž=“S8œ7gŽ8†ÅK—†ö ûûÈóÏ㞻ÿüÔSrjº€Ð âÜ«¯ºçÍž-_²v¾ÿïJïvmßõ½¾êËy#Èï5_|Òg"ž¡ð`Þ+‚$ýßÒe„ò“lˆø‹Zýª÷;¼ÿâÒysQRR‚_~ÿƒ„V‰ÿÆ‹­j™“ƒi[ +:1cA—ºÐ)ßž ,Ûcˆ[ÌΟå‰Å8;lFìoEý¾ý8vÙX¬­?ˆ!Ÿ´¡²ª ®¬\ «*FS}#šÝí0´Ýõ] *+Å–MëáÊΗÓZ¼J^<'Ë2pv_žþãS¸çï@†’†Ÿ.y ï½ÃÝ <»Žàôž80€aèœIà ˜ÓÒÒ¢>ØkmYÇOœ0øð9XÐk©JAùA $»㭷ߎÚ/±ð@ð»k×~!û“î"@rÄ ›:;¿{ì1?Ù‘›+C¤¥§ËÀb:Ï_» Ë?ú¯í~Cžsþyçáê+¯48'¿xäG„ÉýðÎ;ïöX›¸ý¶Û•™å׋.u<ÛéÁó/½z).ôÅø±ã°µv®ýêµ’1í¬Ùys{éEy¬Æ»¬ç À›n¿`Ú¹Lñ¡ãªiHoiÇþÖÓ(Rö}uZZ‰üU{‘}ñ,ð]'оú$6Ö@çÙ”d`Ë®ÍjegcîwîD‡7 Ÿ½³ã¦MÇñÂ|dt0¤â—\ouò=xø¿¼wÖãDË>dç¤cXy1š' Eë™3pæhDuî>ÃRÍHPcb}$„~4žìû7'ôµ†Ì š÷Çs¼ÅÊ)‚lþÓŸ·åi7ÿozº§tSZRŠS¥ÿ$ñ¸Š+qÀ;u†ùÌ2o;víľýûÔ:¾÷Ýs/V¬\)çùs£:c ²bõ–;fÝS*„þ„þÖJcäçã´Ž·À.O:q¸6\•K|¾óýk·Idº:^Û±s‡ºí +ö‹(Së7¬—*2H¢Ç&Úee ’¯©©ÁO>Q×Z{àÚk¯‘HRMÕ`S“ÇüænÄÈ‘# “øâ‹/°ôƒeöú ®ÿ“éŒÁí-k¯þ’æâSÉjó"§©Ž~¾5w\‡rOÿן¡±º×NE©/ÞÆ6°!ßQƒœÃȼt>NU¸  È‚KÍÏ”«¯@.O‡ÒÖ‰{!÷p=<“F"== '½m€7ž«§àÇ7Þ…Œàû?ù9ùZ£È@ RÄ‚ËçK繞G}}½ ƒ;5"nUsKsò îæ&y¯Þ±¤ýò–có–͸bÁLÓb–¼ŸÒK"?³'#¾ÑgsK rsse >'SKšš›S®TÚ;:––&¿QòÂûC ï$U±xÉÒžéX5„Hxø„xÓJfçÿêë¯Áœ•H,;ã,köî­$.1!ž‹3td¥#}x¥|(ò3³°yíüöGÿ?ú¯_ãëe“P·j|#«°?§#ÆŽDΰhñv¢Ø—ŽÂu'ÀÚÛÐqò,ŠZ8~ÿ?Es–Åc£¹$ ¾füü¡ÁÕØõo½³µGñòÿ¿ÿ÷ߢhè øbH:ؽÙË`ãè¹-îæC ô2£ÇnÞ×7Bµ³Ã~ûæo‚Û†¿¾þ:êëBuÃÃ6Òß<°ÊˆøO»Å%{üé R¢­µ=ª(¢ô¦n¡Yi©®[Õ{]„m×IÒëžumÏWôs'¦ ½òÚ_eó[nº%´Ü|Ä›%l©yÞÕŠ¸ /fjÉõ£>˜i6ÐFºÄþ˜Ç)ÄTõI&:¾nò¤IØ·o_J•„ã]6ovîö{|äåçz·ôJÝžÌá³qoŸF±úLl íq_´. ]ÂõMKó…k‡ÅzÚëÍžÿÙ]WFgFEÈÁÀ ’â™Üë_ï¾S2J ÐÑÒŽrdàžŸüžNL¾÷fìX¾ o?öfÝ´‹þø®úÖ·á¾l2ÎÖ7bÀì‹q÷7  &üæ¸ûÿ<Œÿñ¿âgÿö,^ô"†æŽÂÏnû>”ì,\ÿœAö,<£8·,JfG­óȲ‰dìU¼;éÝ‚ªPΚ‚`,ã¶ÜLd7¶¢rü(d¶xàÎÏAqƒ'7ïÁ¹/7£¾Â‹……hvsl;¶—¿SæÌÄŸþø¿¸ãoîÆEJþãÁÁ] oïü!2*Špeg&êêêP:rÒàIŠçwt€;è4¹ÁµÌ”1%=äÃ@ š@ ù‘ê8zìž|ú/˜>m*¾~ûmظi#V c2–`¨=„Ö–Väd'?æ–¸GK’ÚHOK“n'OžŒ«VâË/u‚ŸÚxB“Í3ÔÝŽ={÷âÝEïãæoÄÇŸ|¢öý›tÏ›3{6fLŸ.§K>|8eäAÁC¯ºêJ¹t»èßvïÞ‹qãÆF b,(–þ]ýÙg¦}`O!¸l®­•cÌH«8œzÄGعe¥¥¡ïzAPcìÜ :P‘ˆ“¶ìñtàl¶‚¶Ütܼ9cªPïjGíaÀ…“1醛pÃ÷ïFiY& õéøï?þ÷ßüMüîþ­GëqïÏþ Þvr†Tádíœ)q£t\Úy§)ù1ˈ;Ù`Ì&êN‹d67X ×/1›pnçœß"k„¶$oQóû“”n26ª?¤H¡~K9îÉL›sX»;À}>|ñÅ—xüÏO /7÷ßsFáX&Cm3¾‡“ÃÃtj]}–—O*6ˆ÷aóC¯ ¨¨(ÇI$Nçj»Í<ÞGÂÆähñ¿ˆÿ}÷#//_Nwõaøsn‡£k_°,ü…Á’ÖΙ?Œ =ò êhëï:–ÛüÛ½g7ž{áÌž=Kzx¸ÓÜ¡c™¸ù¦1zô(üåÙgdQîàϪµÚ‘Õèxø~‘±ì÷Ì™3åï ›6Èé:Æ“™ÈÓÜK¾‚œœlø¸/©òF¦e¿î~ñÈ/¯Ñ*"f¡@˜NÁ5é±ðtüÛÁƒdÛu×}U¾ÉÈHHéíDL/Ñ-®k3è—–6VYtL šê*Ì™5 5UU÷Œ¬Oÿ5¡?κfiX¾àú ’-æîv½áãPTù<ª3'¢õÈ9¤,Ä̸ 9jæ;¾õoâÅ—_‚¢¸pÛ×nŮݻä´¯×Ûcyyð»ßøýÛßÿ>ꜥ˖á…]»váÔéSxîÅ1÷’KpÑÈñØöí;ðÙšÏ{ke&î\­÷GžWË,—_zÞr ^xé¥Ð¾`¬°·S8ÎÆÌÓ1cÚ4¹œóÕW]™²r&œ±rm‚O­t…)h/ʼih:r ‹ãóÀ“ÁyßÕhñ2¼±v Vl­Å·þáaÿï@½–Áëv£#SMÄãJr%™Â|þ¸œw}Æ\(júÆ—îh"EQ0iÂlß±mñwbé«òÒ2ìÞ»§[ˆa8N™‹AË¿ÿâç¡—5 É_pÀ–ÁNfÀG‹¬l 1ÕAÄ™=s¾~û` “ÓEÖõ0áû?ýÞÖ~15Qè¬ Q#b5½·hQÊþǶu^—÷¬cf؉©waXÚË–€«\!§Hi$BN7¦ž>Sž}îy©«Eû½ÿÞ{f=•«u¯»T·Ïç‹ CBÊ=𾯓{‘¦(På¡Pq¡^/Îið´cÛá­xúµ7#Ò”n2â§W¬îÃCÇDš2X¨/ð]C 0“¢ÕvN.— £G–Áé„,Ó§MS?}hkoKH¡çdfËè¹»÷ì±ýLDT3 ¬ôô ¨ûÕàX3$ý^}¯ôñ†ÅE1’ÇfWyTCrå§«m&ÄËÃã•SsM[6Kã]è5A²‡_<ó:C®k7]¬20nÌX|¶ö3زSM0Ëâë:Sg²w`×ÊO?5ÔtLs·à‹e³X”¹VHÇ^ ú‘UÝW°þÞ 1Ê`¿¬ô°a³CuaÍÚµ(,*”ßׯß`:vqÖ«™Ik|FsS³îùb¿öºö¶vËô’-o©ñˆ£ú ÆùáÃãçᄈæÎ-Îáz×1ë´…nxwñû¸þš¯6ŸÿýÃnÏp§ÏµiˆJuŒÙÒq‹Î¨î$¦{ _•Þ3å¬Ý¹Õ8ƒÇÄ·Qu $Ħ ’i‡Ìçsá/Té ãWO¾†ŽÎN¸Â"•oŒp2…sF‚pø\®Ð9J:æ!ƒ£¸¸K–. íX^Ž1cÇÉïÛ¶mEÝÉ“˜:y 6nÞ$ÙÏììlT¨çìÛ¿£GBMÍ`tt´cÓÆM8`ë„|S&MByy…tqÛX×»ºª Ç—ëj‹¥±„×É䉓¤q)æÎM?[k·ÉûŒ= õõ (((@^^JKK°cÇN]—[Ç‹uu²ÌNž¬Ç¸±cå=$!^—ŸŸÒ’Ý´V¨y3ÆŸçÚZœ8Qç—·Z•wè0¤¥ y¢vûvÿõé¡ïáà¡Cª¾-ƒõ­úôÓ„y ])Òl´iÓd ›ìœlI2¬Zý)>øp¹ô)*,@^~J‹‹‘ž–ŽéÓ¦ ¢¬.EÁàꤧ§aÖÌ8vôV|²Ó¦NEfzº&ð–æÆÁ5:d0f͘Žýû÷£C-3‘fXËY=/;+S7­¢‚ÌVó)µØf͘‰5¿b£¼Ÿ®^åË?”äMqQ¡a:ÑAø(hmN‚‹Q°PkeÙ½±dYoÜË­¢­ÜxSÕüñàf'OLcXèÉm£mQç†Çl‹Ò›ëÔcŸ©†NYY9Æï· ó©s¯€ ¡=GLG/V«ú¶«L›ƒ:0-céÂÓ·{­ÿ˜¶^ºœ3£MS&,,OÜN›‹ŠÄË¢·,E]aŒÏ1Ù!ôÅŠØouŽÑqsM›‡“ÇÖÉõ±òLÜáo­Ÿˆá^†ûtEÚQ<ÜA°u§×ó÷s‡Aàl‡`þ}a[ø’æѲ›Îù³gDÞÂt²2º{K yaã8ì­ç ¡Ž×çEíŽZGpµ!a¹-í¯ÓqÙ2™#w¬ýò ¼ûÞ{hj:‡wÔÏ5_|ѥìj­vQ<<ä:Âbëp}ùmšñ -?#ÂDñÇ¡p…í¹€ªŸ>uˆÀù·þšÛZ¥gGpꌛ)Q±>¼ÜºsÏÄ–à§ŸEu4 ›ì¸vÆ«ÌIb=8”ÙlÜâ\¦sŽUÚÌB&ã Ì ]}—«ëôö[¥kU&VËcµ#wx#yõäæy´“gÀØEɪ¾æy™µC³òä®Ó¶i§-Äúlp‡Ï/CiIT }–›ÝiM=[HÐ~ zdEM7‹wÜÒÞïCሠ,"6HȈÏ÷AÌjIS\jz(a†¸^ ¤¼‡€ N”`ìO§z\ÍZg˜,ÁYMÜF5¨§f¤g`Ó¦M8zø(vÊi(ñéêÏäTA„´´úç8oÞ²gϨ¿[pþyù¨T)™[Ÿ×' ÅK–Èi4Ó§Ï@vVÞzûmY¡¹L.‰ÄŸ—ù—_ŽM›7ãèñcrJŠˆ}äðaI®¤§§cÃÆM˜3g6<^Œ¼Ï¤SD•(,J‡µµµc˶ÚP,PïSQQ¡•ÍÜ^Z"Ï"`jsK«ÜµIÍs£šgAÎ,È{äØQÜUÖ¥ ™¨ÛïY˜@äGw ¢y’îÛ+†$ä€ëþˆ­wåñˆÇõ×88Yw~ô.ºðB©Ã¾ür](&×1¸©ˆù1}ú4T”W`ù‡Ê4ã-=nÖ·†¬´Ì5Þå4å¶¶Ômh—X6Ë¥€é7nÂæhï¬nÅt°NŠÔj0l6ØÖ¹—éÜ|£°vàm5à7 ï`6(ç6H+2ÅŽ NÉ3ÂÊI}2 ÅŠ`b6H¢d+.=Y­ˆ%½>ÚŒá ÉÖh<Îã)¥:“,olѳ¬bjÄ*1KBãwZÀÎJ$ÜkR6}éÛრîPÇ åvâè8,æ„{€ ­˜@£ž£ þUcº‚ä8tè°ü.¢ÚßpýõÈÛ¶MÆÑ¨©ªÆÑ£G¥|ãÇ•‚¸9|ø4úÄÛ*A•ƒdcX'±¸òŠ+›—kxO±Äß±cǰsçN¹bKþ¬|U‹i>Â+¦°°§ÑÚÒ‚¡C†bãÆM()- ¹Ïv`ÌTO»].¹ú‹W•™…9ÚL7­:ÕøÓdBy?NæY¸:;~< /CÁ¬ùÛ(h}f·ãg°€×ù÷XïkGÆc¼—YŒ¬(;óÁyŠ–OwSB½‹š£Å›R×z‹¶}yj·Õ%'‹%K–â¼ófãšk®FmívìÞ½Û2¸X±lĈ2FUcc#/^Ò­žNÇH½,¶7é°„jÑÜdpo”ŽQA 8­‚šEÓ³S©Fçrƒ¼]²‚[ ®sO +f921/ë˜fÿ³Û1gÉÛ¾W,iZÉj÷b[íÍ~Ô¸ÆÑ†ÇYÊuW=%/ã±Ô‹óxß4ƒôøpÖm$ÁˆÖ$<§<Æ)–¯åJôµGöî…{Q=|dB ;Îì±Yá³§:::¤§Çô©SåJ*•አàõxÑÜÜ„mÛ¶Ë‹öì݇šêÁ8yâ¤üÝxªóæÎÅ„qþ€©-ÍÍ8Ýpeåeº¡ Ž>¢ž;—\ü(.gÏž…Û®–Ñ¡C‡¤Ç… ¨ßÅt“àT!;(ÈÏÇMhû"øé^µ|OÖÕ!w@®åµâÜÊÊ@ž}>¹Üá¶mµr*Ì„ñãpÉWòžSå VÝÚvîM_yØùn6·{^"È€DòÝFÖ–ÝôyêÎi™9+?né‡ë0'ñ]tâ†XyNò#¥ùÞ³÷a6•¶=¯'F3;.ýw^ÌäùΩzbÉ’PSSI'Hâ\à>qü„Ô›­¯¬ÌL9´¼¢\Ï/>ÿ| „ž²W¬qÙ„;€0Cû‡&Ë£ìsëçÛÌvН'b±%âdÊm6]%æ<Ø«3bÁîà=–A´Ý´˜ Y¬¦pX]_×BHÊÈŸÞh’mÇØè½` Îù`ºÖ@ô2V!ˆ¢=õFvnŠzîV=Ä J@0·Ãåñ¹]h>}Ùyrê‹ D0däpùÆ(±‹½Æ ÞR½ôòËÇÅj/Û¶ù}²b…$„×GpÍë !·gÏn¹d®$^ȳ7”ç––V¼ù¦ž¼¤ã¿O”L]–ŸeØÏôÊfÖŒC/ nuŽAzÌ.iv=ç±ÝË6©`’žáô8•-cv»7£á"™¹¶9]ÕÀ.¹`®=>bÂÖ>GÿÅ“¸^%±(ÝžmžØÂà)TÖb屉€Þ•U•’èÈÎ,½DÌ(±»ðÙ°nƒŒmÕëÆ,Él ¬¯·~–"! ô ©Ô¡BTOsl9wo§Íâî·ÝvoñXr3lÄÖpq¬Ž†úz••Âãbðœ9‡œÂ|ƒ) šÏ ¯0uuu:d8¸·SÝï÷*8{F=–Ÿ/¿ëM‹ ’+>ÝušÍb€0ûú1pjGggØ8ᢠ.À€Ü\9_Y[<ÑÁ?¹æ½s×'HO$ò–Üa>ð¶Ê‘¸Ø'œè ¦B^aÀF¿Ie@¬ÙÏí vŽs-Ýâîä!ó^¶ólRNqMô7»u"½^x‚Ï7<ÎsyâË;ÙƒXRúq> ÝS€¶hÀŸÍØbkØó(9uº±‹ÜàNîÉÜV£D…Ñ­ëÀA…Z\Ãl™.iÉ?è™+FÚŸõÄsÍ’Ý¢S!’j%¡òî’}C^§é[§¼ñæ–9}ùÆÃGÜŠr°'Ÿ‰g+·• ³Q¦Î 'ÆÄ„1¤„ $Äg‡úŸÛ —”ÁÛÑŠ“'O¢$§0Dˆ)"%åUˆ„Yå…"¦z@ø?·8êŽ9‚ŠêJ¸|€×Íä>·zv§jµ¸e„•î壄¬Ÿ¬\i»!wEÄ0ŠfQ¨–1ÌÞ¨ÇBoÚõª ‹|ô{‚ž3¡g; ’@ tÛsLJŸ¿ÙÁúBFµüD2 r¹ª x~¸2Qá+¸¨Ÿéé(+„³¿W˜\V^î/hîEQIæ†W¼Ó.ÔkNÔÉi2í­ðž:‡¡•ƒÁZ:púÈQÿ“ºFx¼^‹e÷bYˆÙ¨98ßä› ˜`¬ûÉ ~‡m¶* Ö߸¥šyzF $¼c';(E+ƒ÷lõ÷@ÛÆÈ²wïÀI½¹ wgx ¸Úëþ›RßD ôß·¤Z¾.ü ~·ûØYPŠtìÖ£çøíÖ@¾83˜MÂl© §æ˜Ûî£g>4›ÂáñÂårIïŽÒÒR¹lk{»ÜçJOGCÃidggѧ…~oÀ2©n8}ªI">—7S––ŽvõÜ’â2x= 6¾ŽN,þp)Î45¢hP)xg'Ò‹òä}$É È…u‘!Œ—‹…{sæ¯k¯ÙñĈ·ÓMÞõd/â6¾ „lm‡7"³j2pó³)Ó ™_Z<*Ï®…/¤L h;¼öW[åOc'°TÍïF;ÖJ÷·?ê“{çØ:îúJ°»ùÐ?¯íÈ&dVN¿ñéÔé+T™ÌŽùå}†ä¹/ÞdØfı̪IÀMÏÆÜµ)‹[ÞQËòr›ö ë.(¤ë4ShôfÔ„9±)¨;qðßñðCã,i&ÖšÊȘsÍëÔ—X®³;§+%uY)!†£ÞÚ‘zºžjç¿õîã4ž‘v¿“©‡ÑiœZúŸ(ºüŸüFNŠ Œ–>©Ó8OñDý’GP2ÿ!¿¡”"y>¹ø—:mÇAPcf¬¬S1¿ j»ƒÅ›=¥§Ê`¹tÝqç‹õ‘º`qwj‰Ðÿ˜Bú`“ª£5ìüO-y4ÅôWï”×ÈúÇRÍ>åka;KySG×Õ/yÔÔxaÚa˜ýç˜1t.±¹Â¶´À–!¶ÉS¦ïÖë/‡=´Êÿû•;C7 z\0qE×6]>åˆÅá“%ä”îTÑTPï&0‚ìíþÿ¼€Æ„o„ž'@Ìz1«øE° F¢ nHjè-ÄÆ ÇÜ&1b÷z=™|°^š™G‘÷ä<ÑsÄ­H'ãgÇÚV¸ eD–1‹sŒFÚ:3Ž4jT;Q–—=Î-j]Ϻ³6§È=ž@ ©­^çXù>Y0ºÖL»uQ8 Sέ«ÑLæ³p;Ñ¿Õs6oZ?BýÖØ:›7lãîÄ4r¼ ÚáBFÉǵëÓóXÚfôܦ0b$®@‰NVÛL"ña,;„Þd·TÞ=\QçÉ®i«ØK̂܀ÁÀ7|¹d«ûZ ܹÅ@ߨĸÎ'×ÜǧIÏg’3REs_yו'Ñ-Ä„Øáñ´-í²àÌ žYXù9©C£eÓõV(³žWÏ“ô ÚXøÛŸƒ@õûtˆ"?!ö‹Ò´fVB2Ö§äÉÍ`7Zö±„Xå–s5QÝÝ"—ù5œj« ø¢D©q_µ²{‰#¸*¿:©ÿ#RPU±„¥Å{$¼¯<àÔO¥XÄAxô¨Wù Ì!á —Nˆ=XBO6ÈfÌtEâ·®-ê’z/±K©¯ 舡ÜXªÕbw?Ù Ï"ˆ©Ý¤„=ãz<†N’nƒkÃ7ŸiùDøÒ7Cé˜aÈDd€wE+‰H.ºRÄ avÎe6 ÜöeGpæ^_zä‡Â,ˆ½ïfÙ0Z0·™Lf‹5}Z ­"«ß öôÚÇlÔ‹‘ç´g¶F¸Þ=æuc%` s«2‚EÙè•¿òròØF]Ë¿8h2Õ¦•×GoµSú–}ÅûLañ4‰‚'ljM,¯6£§ç²‚—šÂcá ¸~¸{kMsgeÑ]¬¿„žSÓshÕQYY¤ñïN}«cyóÄÊ–÷&<öjx;•M!þ¦‡þô_Óiå§Šñ¢¢ ËrÔÈôXM™õ¤\'Óv¹ͪ÷’…s-ñÁ"pfÌb g4¸ep¾ÈaøµziqdQë¥aD"hÓÖkÌycT¾ÜäÞf$3 žŒêÏŽ‡©·<´ÑáÌ„Ü2òXàݘY™s“óìA0‘ˈxqj[•©^;6L§½Ý )/½ÌZŒkÇ»±]Ù¹%K®¬Ü,5Ã=õ¼£ºsàÎÌ/qš‹¹8㓳[@èMšÝXú5f³tS¡ƒåq¥ç”Ü`šA·šö`õÛàŃ‘­ãóñÖ†ãÞŸ Ã#‹\ä^wk ”zë„iIDATxÚì}œlE±~uŸ™ÝÈ9HPAœ• bD…'ˆ˜D1'T‚úAAÅ÷|ˆ  ‚Š"PðO ‚‚Q¢äDÒ ;sºþ]ÕU}úLØÙÝ»{ïéû›»Μ9¡««¾ _c ô9úþB5ª1Mö³qm‚P G5–©õ ž›J`ª1Ã&=Ê<Åïu’Ú(‚Ñé¯EH*©Æt ìð·ÁiŽnÑíQ E5f‚`—G«`”¤ÖE0Z¶ËóVRjL'Áh×åy'AUs¤ÂÐúè¦EªQé&Ø"ú€ä/Œ¦9Z±C*ý=üð¯¾èÅ/ÞäKõzí•þõÒú{ÆZúŸ·FD~dþÙ‘wc¶ ?ƒÖ„÷M8C‡ÅÏÚú·}7³²¯ôtÐï9+¿å¿€´/äF6'wµÃv§§sŽ?çã÷ß³ÖÆË@¯é³p¦r}ésÿKû”wù*Ó{t-ø´lü :~ÕœÏY÷é0ü¶š±þˆüAç9]W ÇÆ· Èõ ßA½Ñ>ÁÊ~Â1Ι¶¥=ä®IwÏ+ü~8~]éô~”–PþWZ\É@n6ïßòµ3|oÃùÐu7 Äíéþ­¿®H:ïî?çs>2>tÅ´4ñhå˜]œ¨N~—®=}FWBï§¿–Ï4Ko¹ù_úê~[2瓈§ÏÏ3¹è¦‹¶ +‘}éKGm¸Éæ[]hkÙfþ†ÛІ “LOTožˆd(huòËá‹ ,:a¬ÍÂ1ú×|Ól+ûÕ›­·Ëš 4ñ"ø‹R˲pv†&ŽõÃÅc*ÅuD˜­ “ËftaDVNÓò54րʴ“óÓýfY&ç_¼ne1‘iQH1H ¿±Å6té÷øz Ÿ,&µœkz.4!è;YfâuÍãâáÚðĤ]Z]1d±Âxâ5â#Á²Å¼A4ñcr¯Á¡Š?^?ùMz-=’ ÷KÅåØdßñ+¼‘û"×€\?'d1 ‹K.+ Š²@9²ñÜå܆ýó­¾úïØp£ÏûÓ/þ÷XªÇvñV¥&T¶þúá`Y½À'Ârã¼WßpcHØÃ*ª7j íâ°tÓâ“vð+\®0ûàɢ«¥þèÄ,„.šÇúãl¢Kö‡%íCçR«Õ@ÕL³&†s´ ÊÜ¢kšaÕ’ˆÉÊÖ™´róé8¼Îi3aZÝèøøZÉõáÕÚ¡\ºnŽ5'M¡)vžYI;%²-+%=Éùs”óåk!7³™7x7tn9è„Êñ FÆûãÅÊ"X±B¢V3Yœ¼¼˜‘–åݸ°8’à³ömúý À“—î§ Ú€¾žû÷ ÿn3‡ÀFíH^ è~ŠUš¬ó,_ß,7dr6œRºðMº ¶N†¦§ÜOçÁK­)¢*Ö¨[¸ŽÕ–’›Ç‰oä»(æGدƒx¯1Ü8ÚgÓƒ;6©²ï#šr—ƒ—§ð€°[”W*Œ'–·Ú*ÛÉ!«í„"„j?Z£þ²ùƙ»Á“Ñ_Øæ(æ }'^4Á-(^2f2´$}¯në jM\*La2‰ù‰âíCÈ8Ñå8xe-f™^8T÷«œƒX× –B&‚ÆŠ4›Íâµfg“Ï—A³Gæ·É]"²IŽ­™'$5>qÒ¸pü™,¢„%¬"š\\éÛ[‘ïwî¢3DMUÚwVÈyÉ11$ÐI8ÆämB‚„œ¸ÎXíû×dϱ2x«¼¡ÂR«»É^‘x[ `U¤š<2d[‡ ”±™U`7os³½ïø&ëÊßvÔC Ä_túíÌØ¨‚ãÍÏÈCÕ”ÈÄŒ¶l¼HXØ™¬FjkóêÅ^3µ³]˜2bgƒ˜;yÜœdóZu¡‚~,¡>xάh —ØÊÖêj Il"˜Ät}Øù@€“VF^t2Õty\…%¼ΩLGgâÚáïeóUã> ˆÁŠg©ˆÓdjÊbì´mæ?£ßÎy…Æ ÄêbÀ—†PŠÕ ©…s97ÁƒÜú q$D=~ê°p5Ë‚;™KiÂšà‘²ú£vî}F£ˆA[ø¢c~àXšƒïkÀãÚVFñ`éÜàø€eµ52ùLTÛ0µ»”ÖX6¯W89„n1\YM¦¢‰^ “xaJªÝûLá$®J•Ÿ°Ú š2€ñØ­hæ ì˜|h8_#ûº5ù$µ–¤ äºb¶‘\D´‚æ‰)åÄ–¶.ÙŒâêͲâ¦Ì \!.Ñ M’³!/vÛÝVs´2ùcÌcâÁ0MbS;Wݦbnaš»%fŠ=ìòàq¢å+Äklt?kT8âÅ*6±Ëe5e3I´1§Ú@¸ái’ £-âNÑÝn°šBët­$}DÜ߀… Q<]1ìP­ØEc:¹-är¶¨yt¢)D󸶻ø^ËŠnóR<1ázйæ¢q(wK;šz Mb.![5jÓñ½•øÆ9‡=•Zô¤9L²”TʇÊ%£µ&¹=´[590äê„yÝŒAµ€G?8ö£"{¿ÂjèDd¢ŠSÆ^±s9:Í^‰pØÌ›1ùϤë™à#«Mô6¨“sŽj²Û”%qQ£øš³SZh“DK›zJÈⴒµKï…N4ƒAw«FãÃ5Î%ß)ñx™" ƒM?Yy‰¡ƒ•˜„+‚Í®ôÅÌQ låxÙKß«eت‹$Þ;>ûfðqÂŽA°Á\Dµå~ÔÄU²ª]’…@®Ì&ßk-Lç¬îb=O”ŸæyÞØ[Åó& †œ’§æLá,!Ï(åQ¸`J© ÐÀuÌпpˆÙÄ•Ùâk×t’9ªN ¹ .Z ¢,û¬Mb¯¯*FÓŠW-‡QG³÷Ƙ’¾ÖlËE…hÅÅÔB…÷¢¾À˜ÝSøÂm ÂY>6'¦ƒ³’çé°”ú^à÷"FñX’š‘®Ô*Ì. d‘Ïùd&MeË®JYMAŒ½¸BªYë‚j5µàðÐ(:@85H§øKÍE];Ù¬Â"ý'bÔíÇŒh$¹À¢dµ‡T“j’¥dجðÚÎIâdÍmZ_±P=oâ³ê†ƒ¤ˆ*Ô4 ŒŠRÒ‹èóš\ͪˆp$ fq.õþ ”­~4 õ•;¹p9DƒLRxB[SS@Rš£ÊN\±¼Tš ëØeà’´gukª€85 u¥Of­¦4=%”r±!L>ÍŠ­"éNM‘˜uL«§¤ªK5™œ‚ âÄ “£SÀåXš@V„¯&Zã¼­­* ™Š™NlÎÁ©çLjéhÃj…"$(‰Œ.ÉcSÀ_ä$ ÖImy¢)gˆÙÄÆ”ÒQT£@šI‘¦Í[›ÔÌHkÄbN†˜à/]$9¨ZDömêþw08áÐ8‡+Å UC¬IŽš¸õ’à˜${B0™˜¤.›9›Wìk§"k“šˆbÖ‹™ËÅ(çq¹’‹ÔiÎ 4f|T ²Ñ5:­ ƒR›Á1t…Šƒ"_„"Ñ/w.&Q–e1Y/˜Ô„p¼kK,tI¡þÍ“tÔ¼Ô éõ×sî$CÏ`‰‡ÈŒjÊõ*c3¹V3@@¿/EëÛ`Œ¡K"ûy…ÕIî™MŠº2—¯q\£fŒEl¦ é5΢‰ÉqAJEI4JØÀ¦`4s½™iƒv3˜àS04«4·HìT—šFØ’™3m±%æ"ž›Ô@$Ó‚dM"1$AP'¯I4¦Å 1ïË–ò¾èuÄLB!L½XT«ð1ˆR-"wÇ$v|Wš¨YÍE/’‹Â”E'I&•œÀò’‹©-QóxBšâ‡q!MÁw)m^4"Ǽ4–”0aÀb ±õç2ÄÁRK䬌5Œ+9&,:M4•:õ,(è+×6c‘ùcãz³›Eµ—4¯kŠc\pŸ¢h‡%&&¶FWåsWbûÐãÌ\­â R?Î1‰„‰%i’V`có˜+¦Þš`’`’çiJ%¬%¦”DË: 7[—àM¡qØÎ+#)ÙÍp¡Cr ™ØI'½¶E &K”1jŒ‰¨èDɘ¶²ãZSàCvp±/ÇÙµVp˜Ã¤¦ŸÎņìæ\˜Ç¦iqq›”&Öˆ©FÊ(QÓÚd’CÛaêN…˜“¥©£&É ÀȨ2 áxüñ'$=‹2Q•vPêy(™V1ÐW6¥"ˆì@7ëvôP@Ìè5i  Z¼²Ì6%O)]¡tEg¯VžGUcLQÆŠ-½ü«_#´©) )ÐMÀ¸®|)¶¢Ï›Íf ÈÅaSvuš$K»È¨0I~“)b*BoÃ1¢LXRÈ%Á¾ûÛ8) ³µ PrÚ#FêˆWy‘''«Õ`öì9Œ?Òpsæ„z Ö˜„zˆMV*œÁ+ÑÍÝbrÇÀ™.’ZõWðhDÜŠF1š™œ0Ãh+à°ÂÉ10áøà÷®(ªQ² ž{n\tñ¥ðܳóaÖ¬Y‰ïX«ØRåfQÅ…R® ÅüÏA‰GÔé¢)-Y)"Ö†8t $µ$JZE^\ˆ„&—Wй’½ù«lu««Ñï ÉµÔRsá¿v}Ì;‡Í0 ZZ­nÓܳÄ*B£¤ƒRߢÌwVñ—‹˜Îh94™hF‹Å„ÐÁ¥Æ ZBâ'“1:½£‰%ìZ G5&m¼æ5;Â3󞓈<† ‰Hnã*VðŒ$æEª@$3ˆk¶8e^– æÛeÁÛè’T ˆk"`“^¹x7sún.xÉYÐ2î"ª>À "V³ Çœ9³ýDlÆØ‘±E¬ƒãE&VyIT„é0“@ƒ“%þ©bÎIœ,©HŒÞN©X R†ŠÇ˜çšàˆùc¦çÄÃJsTcÂ&eB³;;š1.d[ Щ‰SfmQJ#Àšv£ù{ˆEÍòIÈ$rg‡f$ÁØÂ#–¦µ„¡ÇY_ G5 !Ñã&‹üç<¡7‚´ø,©¿g#Ê™ ùWVË 4í^ÈöBr@!šÓfU$¦FMz…ðÝ>,¡Zug«1q÷•d,KzŽÍŠL…‚Õ= Î&¥‡´MÂrˆ" `l’Ž£ ^¸b¾}ÁñÂ+™žî´,/$eöÞ1£Žj D845ÜdEq“M)S\+/—‘t~¥WRÂ8h)à´Òï3[¤‰xÅD”–·q b)’Í$Û™Þ§2«ª1‰f•>q¥:Ê@HLo¨UÃC#÷ÖFdM…מ ÄÊCœX¨HC¢í™hª(åîÅ‚"´8G孪ƄgÕBQÓ“R®reh29Sa±‘c·hK‘Öäh%_A»Ò|"g§ä­iY-ÅK”Ì …{¹D>§µï˜N8ªQÑOyä¡x­5%£Ù…±—”1eëMA&‘–c‰}ª¥”„.°ÅI±i ´–M¸Èo%µHI‚h%Õ˜" «s-+÷ð’+ÊDŸ$€2£‰ÖX!‰.µõÀHÄÉ“Vc6_+ÝR´p ´‘q(þoëìU G5¦FuEi±=]lå°ÔÛ‚É,åв„bb›Øœ¨h”$‚å0©±/W^Fª Ô’_©8-èb Wù¨y5&<´}Z ŠuQ`´›®êJ·xÁò"ÇI¾g±Èƒ |¼y©BëPbã Íd¶6f)#“UgÒOÐpŽKé^ –J*@^IVê¿­)J–¹gˆÆ&„¤ŽëR¨R/¦›‹ìd6ðiE.ûÈ”>TRQ´Á¦` .AP¼¡ý=¼`8açª@Ig]¤„ÓY¬ÆTiéZUôc)ˆ!LÒD§),%±ÅsdZ‘þ}Ú# vÍ æM „(˜:ÒNÂÁ[–Iû5‡*˜iÍ´if.ÚÅC8¶Ùf›®Ÿ]sÍ5ÕÌìaœtÒI°üòËÃ{ìÑöÙ‰'ž+­´¼ímo›æÐvYº{бÕZÒƒ0RI'«È™TY†8…‰IˆX"¸®¢Ç ‹¶tE™´‰’D#…Pê^v‹‡p,®0šÐúÜßüæ7ÃÈÏS!Á¸øâ‹á{ßûÞ„=U¡IŒv rEµ¨±BÌê:¬Öé+Ù›ÖÙÇz)\Ê]B‡R‰êb¢–,ƒ°µ(º2÷•Ëqµl¤GN·Ê¬š®‚ß‹ðô:ÖXc €T@RÁ ­2‘á\Ñ®:Ð}f¡c“°Y0åþrmeÓFócM9¤æ™Kx“nÆÖ$]½N³ÄÛ¥i+]”¦®TÂQ.rùå—ÃC=4ÁP»ÊÈ’¬ì1µZVâ ÈRÊWHj-ÊØ4pg9QjÔÓfšÊ&•öµ×ý¤Ü»Ìa%&•& ÚAÇ9¥·ê%/yɘÛüõ¯’ß¡ñ–·¼Ž8∜ÛX×uÐ×}õÕW‡vØÎ<óL8øàƒa¹å–Èo„II$.f¡G.ea6$þ)+±+Þ%N©e ×L“’7‚ÒÏ‘3j3c#&1—¢wL¨Xãqa¹ŸŒ¶´ÀA Ç¢ƒ˜øÓéwå SŠL¹ýèGpÈ!‡ÀRK-51 ®f•‚\´%V%ÎæNÔY ŒcÚWí3²Ò«‹Ö¨Ÿ+)õÐT”LÛß m ã« ÉÃȤ¢vžBßËÃe¯ÒQ™UKÈ Á¸ä’Kà„N`SŠ^ðƒäÏ&* š¶¡q6§ò¦7‰êIƒLWTþAÑX&e1j6¥m&b ЦjD&»¢û”|ßalðÚ)š¤qg%Ó~ôjÊMtœvÚi%ÁP‹„0QëGkÜfièy Û ÿkãOKš£#ß6ΖÑ(QCa$ÂÖ~kÄÔn ЦùÌLÑã%¦ºKóÈЧô[®ÈÊ]\ùTaŽÅÕ\¤A8c—]viß$ ÊûIÆë‚Çã$äRפ“¹IP» XÈX„ÊÅeºò£x¼˜èG* A"îÊîÈ?››̇Ý\Zwçdb뉢¶|1ÉÊ]°Àdç?ÿù£‚ô‰ŽKËãÀº(í“MaÂjÕ_=äX¹‚¹?Æ.x?Ú¼4Ñr#ÄlܹXºÈrc zOˆ¼6P¥}Õ¨”¶H£µËLð½òVU¹UÕ€Û "³=5±ÔXDV·I'ájžCjf–ŸÈy©æ¤¥AV³ÑV øYã­ ZˆWþ䄘ã7 “%ÄzÍÅ Z“z:s³®Ì*ÌQ©^´­`Ñ‹{Ê4ÃñvY3f©éÐ(ívÅnáòE鹉¨ Ć¢YÒÄb=v®Ea€ÑFN2z{åÊ­RÖ«1áÐPrÿ±ëM+yO–£àŽKS˜Û@ˆ`qkj ¥AÄ6Ð#âçu̽ý²±»r3ü– @¿¸ˆ´ÀB••[©bKƒ¯°Â~ï`„ÚN˜,z‹8‘°÷.¬Ç¦›ÚÄjŸ@ÐP°¤KÿgK¦•Õ&o&öfm !-•Mà-´@ìn[ G5&}pݸ¦(ý¦‰]]XT3¸@7–à”vIÇÒ^ƒÖ±B*ÕÌ}+í¬æ¬h¼¡­­E«'®Ôp´äÕ˜táÐøH€M¢å(MÈ›5œ/µ¥È+¥µ¹‚–¢x oP<£L±€¬¶`¡Ië:¤Ù§)jØSaH…¤â­ªÆ” Î{r‰:wé6R‹‘ù‰Üž?]ÈMjCg´¥›+ÚÔI7Yf[wX-Îe µLZ¢‰K7—Œ©­j´›.VDÒÕ˜:Õ¡ y‘1‹.¶C‹ÁjmÕ¬do’;‚J†&fi ’¡«[3o€‡–E·œ-Ñ’çý0LKÌQ™q3ÌYå¤ Oò2b;lÀØö8ZD $l‘¨-Þô¢E™´Ë™·¶`JtL„Æš¢¥€’1hÚºæmaËç}ø¦—PT‚1CÛWm§æ‘Ë“¬Û¤ë-Š)¥DpÍ<öä6g¦èI|¹ùФDØFHsÇ’f°ÚÖYjH"HWά|†”ɶڈ՘‚ØÖl&²†ÄÂ¥¼äIŠÍG5שÔ5Š©¶H œp®-?Ê$ ;mBkD@H¤®¼W ²H½U)épe^Íd­‘”§bÁ®žöž×ÒîÌDÓ àÂÔj1=½ß±w“’JKáïÈJ\CÍ5cc ´t?ì ð[6—ƒWRòéçPØh4à¹çžƒ‘‘‘´*¡˜qã©§þÃ)–«õlÁOk³¶ÃŠÍ$<±'»M&¿b ¡¡a˜5{–ß_Æ-ªkY-t'é왦úšØ_½hÛ¬¼WYà @ܬ­AšUÏ<ó̤Æüùó¹Ts•UV)•7N°ïE±›qÝíó~=c½cÆÚ¾÷óëôºÕ¬MWݴ혚NéC?ûÔ§?•¼¥¦3žkýwü›\Èâ}€'Ÿ|n¿ýv”ÜGó ´År{ìBç÷êu-‹¹f$^£AOXÒË.», WKo5:ª?YýõáÎ;7¿@ÝÂB("îåXFêP©QºJb•ØW´)õV¥«ÎÓO?=í[_¤«ì´Fg̓ý¼œv£÷¦b½ Èr0oÞ<é±…j!®?GˆùYÔÕF¹ªbkfç¢×ŠÉzœõµ©Œô9iŽ©ú½~?o ÀQ>{ºj™¶öÉ> t{i/•‹påé|¥ÄoŘC –j²žÛ´Â\î%'4r¿-º*ú¨[8’9L7@®O’L'<­£å ö.ý͈–‚æòK,õ´K…Çü *µ×4L’°˜ÙÆ>.‘^ rÔh¼# Ð>6¸Ñ¯Xax(ˆÞ„§­—|âá Í©T@fŒ`àè“Ç9iÚ¿mº¼Äòwp,x>=Œ/ÓYNû>ÜÒ¼a |Ú`¼É¹]E_eNLc+A`ÌôIéä™,á´`à(šb¢ÓG”ÎæT÷½˜ÑQ öyP8‰‚2ûÊs'T+q G<1?ÙkBV­Û™ä»ÆD2Q)í˜fÅNé ª7ajMºÞ'G«{±£y5N°l&€9Ðt“ìaúMO(©§z<_8Í]úpHô±;WÔr´â‰øžC)ÄšfÅN£iE¡5ROŽ1:M\ìs–Þwÿ}ðÀƒt˜ïÅ÷Çñ I?×£†ÄþLÃñ(“>v‚¹‹çš1qBHQqÚ×CXÛ˜Lš(‚¤_GѸSkC$]~I+vÂ}„]t¼óï„ÿüç?q P@òÒK/…o|ýpØa‡ÁãO<ÞÑv¢?=ø ìùö=àž»ï.íý?ül¸áð¢­_zÐo}ý˜càçgžÙñ¨ôû{ÿþûÃm·Ýñ¹gŸƒtœsÎ9=i‚nçÞ=¡³ Ž“& ÷Ô¾çLòªŒ4Á‘>5"!Q)w´W æi5íÅ0mËd'Ccô"çž{.§"¼ÿýüå/°ùæ›ÃF/~1ì»ï>°Ýv¯€oûÛ°`ÁxãßË,½ œþ˜)pµ×†M6Ù?ü0Øfë­üço€¿ýío°ë®»ÀV[m Ÿù̧yÛ¿ýáæ[n[o»gœñØx“Màøã‡G} ^ð‚ÄÒÐô¬ºêª^ˆ^_þò—aÞsÏò6¿þõ¯àŽ;¿üåÐc¨²lÙá®ó„â9ƒµäB·ÚÔí€±Ï =”MDø¬Ëõâ=(¨C§·j‘z¡ ôÕxüñÇáÆo„£>>þñûI¿)4š ¦ÄüêQG%5oðBð¯;ï„ï~÷»pó?ÿé5Êá~î¿ÿ~¨ïÿ$¸òÊ+áϾ’oÖ|/XŸùô§àïÿ;ç‘ÑÝ|ø‘‡áÎ;ÿŸüä'ùA7hŸ}ö…/úEøãÿûèGÙÌ[¸p!l½õÖü9e*Óxõ«_ÍDÏýØÇº¬©Ý¼/8u3w°¹4.HŽÖEmrÓ5}„3q] vˤEš¦ÊcKýHZG¾Ø›UcÛÛ剰Ùf›yóåvø×¿þ·ß~ì°ã…@tpEÝwï}pá0ó+^ñ ÿýMaçßwÝukŽ#üo¸À~¼×:¤Ê){ùßø¼Øk$Jçñç+ÿì5Ð à;ßùøíoÏ…×½îu°¶×Fš GÚìšk®õÇt'¼ç={Á[ßúV¸íöÛá–[o…7¼á 0"‚2:éÃ[6Yr“fwq:<‡7Èm+´£F{ t“2š×eBbaJª ‚›éLWî"r9uÇw3ŠÓ MZ„Vë·í¾;Ìž=þýïÃé§ŸWúü¸o~ÓOèïÀ 7Ü÷Üs|ñ‹‡òÅý÷“ÿ†“O: ö}ßûXÈæÏ›óZhÁü0oÞ|øÈG>ÂZd÷ÝvóXæ)øå/Ï‚=öx;œ}ö/aÛm_Æšgã7ŽÇuÓM7ÁöÛoÇÏ)…Ÿ~ã¼ó΋¯øÀJ GÕ 8ÐkÖ7ÀÆþöhF9òô=íÿÁÕ…µšT„$gáÔ}²r©†“Hx¨H4 ƒûEÍ3ö-ùÔ§>ŵ—]vc‰+®¸nõ«ó~+¼ó]¹µí¶ÛÂ7¿ù-ø–×”1|ì±ÇÂ=P§z ·y,q§7µh5'í±â +ÀN¯y ¯V>ú(|òSŸôß=ž…~ƒ‘´i Fº¹/}éKá…ë½0:ž6ñ¸äò˯ð8æ:Øk¯÷r#z~͵×›Þô¦©™èÓÔÓûÓHŽ 5E=pUÅEŒC„â½²RuÈBë5{ Bj‰E³¤hìÉ|ø¿ÿû??ñ¿“wÜqGÆk¬¹&ì¸ÃŽ044ij^¯óã±ÇƒoùíwÜñ•¬]þéqÇy¿ÿ=›OÏ=û,üñ’Kxûµ×^vÚi'Æ^xA¤EÈ ¦nOxíD€ÿ‹‡Öñè±[ Ç€3QÆRr-Ÿ[ikæüLÏÈeËX.”¾Ò„wÄš+ý\àºñl±CË…ÞƒÜ ±Dã³ GïÀ󠃂uÖYxà8ãŒÓáõ¯½7Ÿv³Î: VXaù§±ÔÜ¥àÞûüô'¬ó“úˆÃà˜ÅûöÝNüþ÷Ù¥¦Ä;Þñ¸ï¾{á¯AÈFÞbË-àW¿ú•ÿÇÀsóžƒGyăõ¡éµNÍ ŸvS½åæ›aK¿- µ‹éIM¼}è ±ñ÷4]õ)†´âg¶Øïp›K* +k"xÝjµ;”<ÇŽ'`¿®J2q~ñ‹Ÿ³GˆòþŸxâ 8í´ñê¾É¦›´mOÚâÍÞ¬¡Î±4A_÷º×26¡ L`›0ó&ù›Dž§×¾öµpÕÕW³K—\±$„zœ×_w=?'³ŒðË ×[ßå+_ 7Þø÷;ê«_…yóçÁ‘ÿ}dÁõÄ6tΧÒ=Çjz F/Øb4ab”¦žK=ººrtEÁt¸6«]¬ÝˆmФ¶}±Åcgß¶¿wÕUWÃ>/{ÙËØcAö<áê®JñŽN g­µÖ &ÖãÁyçŸó“üÜßýÖ]w]8ûœsàºë6Øm·Ýù7x}ì±ß€ë¯¿>îêégžfMuÀÀvÛmÇI¦ÙN=•ƒ„믿¬ï1=N9å‡pæÏ~Æï­÷ÂÆ ÍL%0=¾7ÚP’8&ÁœM¨Ü„VjŠÌ$ÿñ^ùëToVÆm\GÖÃÅRsô.åíhµ÷»ß +¯¼2¿^wÝç38¾ûî»aíuÖiÛϳWœtòÉ ˜/¹øbÞnŸ}ö5V_ƒ…c¨>¼"ºRy#ð…/|Á›oëÀ?ÿñO¸âòËÙµKq‹·¿}OxÔã˜~à8眳aoš‘ÇK“æè¼Hž›7Ïÿ=ªìQ1ÐÕ?µ8nÚ#”ÁR×§ ôf²Ìøy©46væNPÌQZ<‡½«WKéE+áÆÐ±ó›v†G¼Ý¿×^{Áê«­æ…d%Øõ¿þ‹ë“—^jiËΩ77ýÎÏü þŒ7¹¾ûÝÿã•‹Ò?N=åTxøá‡x?;î¸CLj#¡9ô°ÃáÄ¿Ï7è§?ý)œòò<æ1È‘~Ò/³ì2ü8äÏ{à~!ìâñÎð¬YS|ýf¨ÐX+À;` ë ý·EN«¤ÒD¥&ìëÚ\9¢9Ûã²bLŒ¦p¢>êò „a¯šîïdn}IAò÷o°ÁÅ8JÊC{bvü@ã†á8›PjIÄ&[ñA`þ³%P.À)TJYG­¿aÆgž´Eã5År-v¤Ý‘ìW”Æ•%O™†§´$T*![§çéoÄ{њʖ\܋λVòŸ‚}<¹ œ“SC®mš.é\0÷fV[<ë½MâAÛ«ßüšõŠÊ£!À«g:,±‚LtÙ‚¤¢•\'²u-Š¡˜xÔhV"ö,ÓsLŽ``—ÕJ:šB+[†é®=„§T´¦Á _‡M8!¯ÙX1TH Šve' Æ.¡[„B'ûÎ4Wî„5ÆÔMÊÖ•¿W"33ÊݵÆô÷0™ÜVkÒ´Q -jE†®°Ú¸ƒ5Kˆyd Ù¹Núyhù­ãˆy¯qŽEª9µï¾«­;&¸hIª.ZoO@RM_ß[Üܸ½EÅsÇi#®èi?î;(Ó&@iþDºÊ†öÌÚn9Y«VË“,IdÜ»îÌmºìØLÇ¥Ãçýº™®uHŽƒdRQð/³EÒ!3ú÷†¨c-ƒuÒ ;Û2>‘ÖNÔü"ÏÊñmÌèàyP>¤~÷`¦ÿ%—fu’Zé.Ë w–mí¬©"®ÉBÄmÓÀlÞ Qr1¿LÓr1ª!Ç©¹éEaÎèBifŒ`Œ $q{öB‡‰P¸D%%“lϧ¯kÅ1B>UZ)šÉ“N£ÕÄšð:;Š3™wjM±~3vI(Bì‰÷©¨øc"ñ VÒb Õ+iíÚD33,¦)ëSe®urõŽ% ƒROfÒc†“/t45&FÄ5k™j9\èâ$@ú™)Ê'C[³øö!Ÿ8£ö·ZwøÜ ÚÎ1£ ÆÌtKá@…E5…¶OÖVËŽ É,ý¬ö-‡2àŽÝ¤ŒÔ–÷q<µ™r¡¾oçrùŸ¼=Sf æî´$(_[õUY)RÒKÂ~]#¹ZÅ*Ÿv©-¥âH_'\W½¶ZžòÎNm+y‡G9Yq0‚AûúÝï~ÿøÇ?b$•Ëò#oÆçÚ´S¿ó¥/} þû+_‰µÊ©ˆŒÅ©”ö½ï}/œõ‹_Œz\TlõùCáúöG}„I¾öµ£àšk¯S>¾ÿýïç?ýéÞ뻑^cK¢ßX™Ï‹Èbà¬[l7ä\AV¶u-õœ¡+™ºXôœ‘fÕd]|šø?ü0“ºQ]Çzë­Çå¯/ÐÇ Âƒ˜AˆJ {:ÏÉHc„+ éÑiH°üo©¥–æJÂþð‡Ì®hºü»öÚk¹hŠKÞý®wÁMÿ¸‰ °¨¬v¬[HéöofŠ=š¡ƒhô†=¸%°í=kætkJYÌ6iž©Ì†J{ÄeM¸wÚï<‹Y¼ÓÔ¬êJS9‰¿I}ûï¿?ì¾ûî¼:¯±Æü—Þ£×÷í·_iBPÅßG>8jZ¥©ãG>úQøê‘GÆ÷—^ziøùÏ]|1|ó¸ã:®â[l¾y‚- ¼ýío‡¯=AQåß«^õ*žäDø°Âò+D>ڞȈ6”8­HÀ[_é &¤¿þõ¯C}ûx!@O´ô–›±4‡5¥Òaࢦě¨ô=bZ©y¥U„Áä.«™æ­šluM¹Ä3µÛn»Ág>óøÓŸþ?£rYª“wÏ=¹*ïºë¯‡C¿øEž|Ä0B,‰´òlºé¦púgÀ“ÿ~öÞû½ü½~ðƒ\ôtÎÙg3Ç-ÑóÌ™3—?[°`>|èCbêŸü ñ¾ä’‹Ys×Õoû[®1ßi§WówˆrT'ûoÏ=—iIÿûß3mèÎ;¿ ¶ß~{øÖ·¾É,)GùU®'ª¡/úã¥ï êjÒ;Ø ·]u#®djs5  NÜÐ>YA¹lµJ`LtZ5¼U8ù‹N¼ÁDùI“‹Ì*"kûóUW± uˆ·÷‰v‡4 qF&9úkGój=wÎnìI¥µ´ªÓÃJëV¿m¿Ì2Ë0« i"kÓê¿Ûï¸îàf;¡×³fÍ‚Ûn½ ¾êöOÄ DíC„7ß|3l³Í6p 'À½÷ÞËô¢ë®³ -µ¼&ÖF„a/`¤]H›5› ÆSÄH¯;5„ì7‘Õ*ÖÁ‘ç$¨Ц¤a¦â41~a99‘L-É·ò÷½ÉüÄ;Ë[bÍfƒŽ\øHïT˜pDÑI¥¯Gs Oò£¿ö5&n#þ\Z½ Ø’`|ûÛÇ{sg„oK.L#Ë.·›8ÌkU«·Î”ŸÒƒ„ÌŸüàð¬’ÿ½ÓücØaû˜…]Ûn]~ùe¬Ih2Óq|âŸà×c 2‰@Ž*)騉pŽH² ?‘y6ùZzðËÙXF—Æú =ä5EF¹U4ÅóP.«µáÖÕX4œ#ÊPË..ã·âzsËH¦&õåM×ÛÜ[¬[MšÜÔ:€¼C4Ù:ê(&Š~衇ØL!­râ‰'zý$sÌ×ybÓª¾†ŸðQ8êõQo*]|òR‘& }¯¾ú¬ ~ô£Ó8Z·!¬s÷=÷0±•ã…6]0”ë¶T÷NDDÞ ÛÉ4 Ò:~ùË_òö$èdªuÖ“±ôO®þg–u¿PåL…T“Þ5” ÛL(¬1NBµhbݷ𫇲Y±Ç2°K®pt³“i2’@Ðä%íE¸€þRoòPÑsZ™iâÒD&Á ÐLÚàŸ~‚ÏñfV­Vså#mp衇ò~èû_óZjÝu×é(H4^çM±½÷Þ››£mè;Ý lñJaúwÚ.v”+å"¹[ˆmd¬!X“è4&¬‘QAS²r•‘s¯r®ç çÆ.Né#‰lŒ×yB““É„¢Š‚pÔ˜†Vfj%@­•aà¾Å[Ä8  'Ÿ|2sRѾò“Ÿx¾!¶é¦›ð„&ÍDž¨ýöÛ^óš×ôuü$ ĽKZ‚\ËäÍ"ï jÕö­o} Þ¶ÇÛ¸} a”QµFáÁÁ-÷3ØÐ‰ïy c¯ñR>5ÖTvCÝÀÊkÅÓ}à#;m…b€‚¡8€&%MXš\$Ԇܬm´·[uµÕ` ?±7Û|s8ÿüó9FBâ×%—*a2uvÞyg4͌Ɍ!POš‡„" DîFÚƒb™ê©§ù÷‰:f5ÿ› Ôõ&“›ÕBøF©}îsŸcOØšk®?#^_¨$Í¢<½ÓyÕ3}K`J'ò„&LJœË¯BfAk7È\ân³ò@àZ)ˆ–œºBM…½y«z"uóæÃý/y—>4¤Ov8E|7ìBê6”?y…È›Õ#+!N3¦SÛ˜x£CŸøÖÞñ‘Ô  …àMñ ´½†©›\-,“¹¥ï·^Õ‹Î;VYy%c³À¶Nî]ZTb7^Á{¼þ¦ÃPA¨{v|ýg©Ût±Š™Å"ËzÞ¾½¼Ã,2™hT{1“•ÚÓQÔ3„+jH“’6g¡h›ƒ”u]’¿‰ÀR”Þ[Vn­ŒÁé c¼Ç0®ïaï·2‚Ö7W²iI0l M¬‘ÍØo4s7©ÉŒô¤&´#4=½×ØJ0&[bÌTJÆbrÑZ "Ôa¬¡æ˜ãÜ),ÚW'—Zù{éýÈrÛô”⿨5GWß.Á2ƒ!30]ö=é彭Ø΂Åx8Žp¡C,™¿¼¼;ι2ÖHº:÷4)çdÜI^ÖL2«™`DgJû(Kâd È”MìÉ©éës”ðR@(ÀÇž*;›†tbO''Õ€é>CD=“[<‹•`t™dƒÞ¿™ «‡Ú œác$U„¢ÜNXDœºc[HÚZ¡èiÓ\„I XÀyðà]Áü^¯>WžöøÅuÏð©üûn¸ûžëá×?½lÌ |`&ÿ'ÍÚÒcIìDýoßùx\îD±l"Ú Sé«´~<ž†¨ylš)¯»:-&"øÌ]põ¹§Ã©¿¾ëir{U耳µ ³OÝ\ò$¬±Üíð§žœ~ÜLÚ¤(>?Á©Nãý>4.Ï¡\âÒ‹ÜH5`«æàø‡ÐøèÍtX€ðNõ.³ÌÆð_ûìë?yœöãÿ·=•"þ…p×_®…‡ší“@|øù;«×˜»Í»á­[,?}g”‚; 3õ²89‚Ñw‡é ÊS®*¥úT–‘²å„À­hdDPt.N o•]f=xí^{Ãk×ÍIÇÈ}—ÃWÜ=Ûú£9Ü}Ù/áwWþxfÖÛþÕ°ÑÊs`Vm Æ ÿù±|TcEî±!é9] ÛÕÆ˜Œ]%àëp­Õ)Øj*™c"®oÌ×ÿ4­¯ ›ï´ra>õO8ï77Â2¯Ü¶X®7V~ÁóaøËáç—ýæ®»l¾Ùf°á:Ë Ì®äZ75¢2裞l ƒ“¶ç~v­˜Â$‰†úõL¹ÿ¢ ÔŸú^ÁeUîÇ89‘ŒÆã7Âïq<ò‚]à][.ßA ˜³Æ–ðÚÍ^;>y7Üxí_áoWÞ+¯µý4˜j‹’¤yæHÛ,Æñð"Lt36˜E¤œ¶ÎÉ ÔKͧNBÐFö6H³ª°£þ w\yüðÔK`Þæï€½w~,mºK<+œåÖ-_½;¼oïWÁÙà§šéaå!‚J7gOu‹¥ZvyŒFêö"uëÓ§>æïyÏ{˜¶g4á$R·C„ÔjÃÌŸÏÕŠZ&; ÅC̵A¦–Œ}ï vÚ SÖµ·é„o~§‚ÒÖèKsäóŸ€î¹î¾ëN¸íÖ;áé¥_ ¯xÛûà%Ï_²Á^‹IJêvä‘GrÊúUW]ÅïµJ??å”S8ÏÛ K­V+Ý(ÊÖÕ£e¬­jEÞüæ7sz9URÊ|'!! "š£‚(ª%§÷R®«é) É›m8£—ˆ|Zƒó£¸£¬ãÀ ‰KîAzMSaÐV×\G&Òü T8Þ{œ{Áã°ÒzëÃÖ»ì½`EU›0ÒDž€=ˈ™˜Pf¬0©Û~Ôê´×\cM˜¿  uÛOIÝd£ÇÁ ©/ÐÿèG?Ê–’ºuÖY\exì±ÇvÌÛ¡jÂôFS1Ò7¾HÝ~ÖJê¶BAêF ¤n£MœÑnöTp8YßH{–'ÜĶʉ¹„…€°i¤šF\¹8DÒs6ØÚ Ÿ™º"I£ÒY%u³BêFMO>ù$“5ÐPR·³Ï>›Tx¤µÜT0uàÂ˶Ý>tÐA<Ùéw.¾8º‘ÀQM8Õ¬+«HJêF‚JSãE'8Òs̈ÄÍšX¨k„„Ã\ÒÓ5"^ü׃UèäaŽånÎr+À²³ì(Ù$„Ì£{öœ1µUßÚ£íZöš‚Ý­©‰HI['γT“GHs¸Ð0œ‹Kò¨”Ø>'’7Þ¦".±Í² ã°±Æ+(JêFéFêöàƒÔ£à!yÅŽ;î8øÁ~ðvR·¶‰;EQ{3 ?€™C: ¶o3š‹•Êc]4¥,³r¡¬Ä1b7§Ðg@Hˆ–'ç‡ÃFè¬I!~_ÔÉkFšUo"ŽëãÒ ¬A¶?1ÀÞj«­"!y(¦A…b&éM®Ê{w´ù% ¿Ï±òtÁ 1«n{nN5ת1úȾ@«=M÷‰Ç cya¢¼.1å ôÃ?R™UÕ˜öcáÈ¡ø´œxHÉ…\´¤ŒëbŠ•Úžax‡÷F p=lué«1ÝGsa…#4¤ÌU{C©9fý"1Fb$ÙÐV£SiUQõÞ‚…€ ¢pÍٕ욢ÝTHH0BY€”±Žj,V£–ÕcP~N´ItÁ”"`®näÈ‚˜ÔŸLR‹Ýd›ùtòÏTc GÝ25!³Èãë¼Ñ„f#ÔcÚÚ¬%Jž1G®Ü;M_ï‘/9Âá/ÌŽëg°Ùpÿ_Z.ƒSßTƒW õ.,«¬^ƒ#7·°J÷Ž,ð®‡à÷o)?ÚÄV’N—ʆÌpàÄÃf©?‡VjБ¿dzåoJ¼úŽ%ç^ø ¼ú*³±…sîxý†Vît#ü…<þüøÁÓú={mSƒ-—Øj÷Ÿÿ—kGà€Û±+ÒÓóV~~NjÀ~×8x¼Ã Yv6ÀÕ׌À—Ødó!øöªüdý:¬åuVݯ~qløï=ò¯ìq½ƒæ*¤kàË7URÔDžøoé© .ZÂ.6¬q!½„…Å?'Bòb«b§T‡pæ#põó2Øz®ÆS9¼ëRÏ[ á¯~rnõ<7ßpð.åKò¢ j°=‡½ÎjÂ?r€åžW‡Ÿ¿àÿ=Ø.ä@©éâôL‡\ðíêpÄ#ðé{Š@UÓiѦ7¼t¶ñûö7ðž&¼û¢à 58k{€oü® Wæ•æà4ó,éZ-ãÆ™y£ ¶˜¦­CËЇtö~²–á°³ <ϯ4wߟÃ=~">þ¬¶­Áëþã' Ÿè+>¯'¯™Ã ×4áïóÂwV]«ßÞÔÀånÂ?ó0û÷ÞÔ³w6à·~›ÌD–IŽÔ~ö-uxw§˜¦€k^žºy9ìn®‘€ÕþRhŽãüÝxóöÃpتÏúß;j×aX&sð™³p‘[reƒ4ƒ%}aC)¬VCçÙÐG«Ö@ ú ®¦h¸Ù+ÖYR.ðZkÖàû~¢_k¾w¿×Öà#9|ø„­pᕠȶ¯Ã«5á}þóµÖ­ÃI/µ°¦_”ÖÚnÞ”îl™:\-Ä)7\?{ßR©¿ö›…ðµd³í^2_Á&¼Ñ›Uÿ™»ùmþ o=~·ÿÏ›ZW^Û€?­æM¸»vyEå3±õzÀŽØW®ì°pÁB¨{Ɇfó*E ¼Q+S+„^0È%lªyë¸ÇÛío{ÜÂ60°’¿ˆwÝÛ„}îpð˜7a~µÀq¿jÂÏ®j³~Õ^è¯^cƒóÿްíÆ~ö›üz`ÝÁÏVhÂ+¯pÌç²ëðç¸M„3.3ZÞ~Óöa¥{ኹ ¡&‰›Q™5æL¾y€ž # y¯ŒY«ÿ¸‡gr/DuRêÒl(M-©„£4ž}ÊÁÉ·XmÅüÏÖæn]|ö?{ Øö‚ó¿OÀ‰çð§38Ù a 2¡´»4áŠf‡ìÎe<¿d[ e6Ý:üm=hòm:ß]/¤B,U§ dðý„¿‡÷>°´¿3·ŒT‚AcÁ3ÏÂü9³ –y`N5°ÉÄ"×.“.€Þdò/<µ,ÁÙp83—·ËúÊš^²<‡Ôµé%uXû#°Ý™~bÎÍà»o¨ÁËÉ3äü_Є«FZ®Ÿ¿¨_~ë0|9™ìW½£øø†GÕÝ Øþ¾ÂÍû²­‡àPoV½õo…§)0~ÓßGàúìáM»•½œô›&\æHs ÛæZXwÂO›•`ð5‹EYœ é¶(àšèÃsoÚR›‚¦× Ç„ ¦FØdaà «‘6Á"¥½Žò˜ëíø·98äÁýE~ÏK2Xñq®pí,|a3 {ýÕÁ“é—¼*?ôWÁ¬j[nPƒüûËø›õqÌO&ôBq³Ó{8ÖWœk î…‡jpÌ®zÉù¥7õì:–ö¶ÝÛø÷CX­+ë¤˜ÊøkãÍ)N<ä6+‘սɅ$ ® 6÷Cbܲ£ÙÊ@ ¶G·DwÙÐÂCwäðº…v¨Ã>^ þŸ#~V_x]nX­§l›Áó{,O¸Îƒû ¼MtæVêã8žµçl½v«zíñ¹ßŒÀî—;0k<a‡\Ö„£½Zo /³d GsAš , ®x§{ +ä¡ õ $ aCÑã”FCjɽ†©›Ø/m§]i?†VÌàÝË"üÏ•ïܾ¯ýOö¾ÎÁÃˇKàæ;8üâ|qÇü<Çq ªÝŽ\º~û{³°e'â6+xÐ/íky°þËÍM‡ ZÆ4n½iÞu…—{-ö›‡ ì±¶—=ÏB6Çœ‡šðž»¼ö¢šž6àCÏeðb³hx­¦Ë¨{¼‘ÕëÐ4Úà ?Ùý•Æ/³¥É‹ˆ í”]#cx‘S&¯›Cn²¦eááÖh®ŽÒh<ãà§7 \êgx~éüÜOüþý̯F>gøyó9_¹`†›2ýŠ~Ú;øÊa8pØß¤îr„{iÂáw!ÜÀÿê-‹îÍÆ›zpyg¾uÂ÷fðN¯®XÞÀjC¼uËrmÝíÿtð{o·-©„Xè‡g ±I•…zÀ`¯’˜è™b4þÁo·ðä&ü¶)n™ë¶h?©B;Q&ܸ¥Þ€~£¸fÝûüñ"ÿ_†BËãBÎÅ3d[ $$h¼}• qfr”Pñpö!7,çβ•æ˜ö‚½Eö°¿Íûù¹Û"” Y–¿ï\Ú5ê›8šA¸ƒÀuݸÁÜl:©7Iÿ@亓›*+w1•½ä?ÄÑå¤ôY÷ ­dצ5ãZC®­ÐÂ×ÃÄ7òœò¯¸w‡æbQëù4*áXÒå çÉ;˜Ý˼•¢£âÓöêÕòg¹ü Ë?å€# í”O|éËáM?"X`–ܦ )Ò>­Ç–€½ õ ïûFч¼×ä¯J0‘°Lcü¨(­\¨{±Q!…ž”îðåvËšXÈdÓZô„Îpó‚ÿÚ/V/Ž€jZ.z¡ÀÅSÌF›ï?êâbÕsl™º!ÄJÑYÆŸ+6ÔìbFö`–e^Ë ™zðzU‰‡3Œ/’ÎS¢Æ´Èhc;ã¹1ÐÖá*BÒ 5“ÐzÚRÛdËÄ 9{¯B½  mË!0"„äÃ&6+áhO?ý4<÷Üs¥îQ! e…²âGïÿ÷W¾\xá¨û\guà„N€e–Yfð‚Ѳ \dpr%¤WÁéLZ‰(M¤^Â`Ô¾›´@÷6¶e#-B&¡‘‹þã+:жñ›ßüÞõ®wÁ-·Ü¯¯½öZØpà y‚Óão|# b¥ÇŸxÞûÞ÷Ây¿ÿ=Oþo~ó›pÊ)§À¬Y³à¬³Î‚£>}ôÑžëÆ+ã2½°Ç×]ßÇže¡Ë©÷m?(ô±¶½!¦‘+£=“ö+ä>³†c#ÄBB.ßùÉOÂ{ÞóžÔ×\s kŒ¹sç&­yƒIµpáBøèG? ùÈGÄcâXxÖ]w]þ~ßïÐAÂM„°L¡C ÷îXÈN¨ XÂ$Ï"(gHNiéâ­™ZÐ ”ÖαàtC´>Y­Žtyä‘ð½ï} ‰¿þõ¯Ã}÷ÝǦázoíµ×fØ|óÍáÃþ0ì´ÓNpì±ÇÆ‹Mÿþ÷¿Ãã?·Ýv[ÜïÐP>ñ‰OÀ–[n5p°Œßã`g¼Id¹Å·QL‘|iÔp‹hŽsÔ;éH÷-«Õ£y„ââ%®a^J溢÷r¨yi|îsŸƒ<Þÿþ÷óÅ{ðÁá«_ý*l²É&wYmµÕàW¿úU,Ô§AæÔqÇ7ß|34¤XöìÙŒ9h9äCâëANበX`ú·Š°$ &`ÁnÚLºÊº’ô6£¸l”T"ãlŠ5ƒk þ±J8“jΜ9<ñi2¯ºêª°Ï>û”\tÁ·ÞzkøÉO~¦i‹ë¯¿–Yzi¯¶„—¾ô¥qÛýë_ð׿þ•…¦á˜ZÁ¼vémžã¸öÕ-îò#:gÀM5Ö@ʪÇýÉy;[BôþñÃwÞ [l±k”yóæÁÛn»- F:H Èôj}o2Æ`c:{GûF&?çK™@IFlNãÄw¥YÀd:ùçu!q3& ÑrŠqT Ýi‹'Ÿ|>øÁ2@'ÓŠ´ÀüùóÙuÛ걺ýŽ;àégž)½ÿÄOôìõ˜L1õ²€£þ`Ì>éâ¸K[tÒL,dÊO¾ãƒˆ$lb™<âm…f¸òùs™Ù-‡xXÕw„/„ž ˜ Èþûï+¬°œvÚi°üòË·}‡ü¿ê*+·kÔ\©¬ÄSÅiè Yºä¹rÁeKq4¦ó!Í“…"6Ë¥¶¡ø©™ÏÐzŽ”ü`zÌý‰æ¹Nr°K™v”Va(l¥Ö ´p߆¯¹èŠÁN‘r B«€`q~1{6=Ìöãÿ[a0̰Dá£D ¼½4ò7·á¾ñTÅÍ4QºÈ&j@¨r«–h·Z·B£~¼Såm±öhMVÄÎßDZÁ‹I§õ3ƒ^G˜FÒ(;;£¸Ç²Ÿ–0H v#oUÎ^*.#·Éá•pT2‚ÁŽ@xtvPlÚizH:ñ˘£páb9E “Ï”\âm•Ù'uéPÂŒE "²pÖu¼Én_êòÔ x¥/å8f¾\%=O¸‰Òb–§Ûhœ°ãû¹Ñué°­=°_è"w"H3uËæ]«Ö1m–m¨ê# ž‹¶È„\A…œJŸ•ÏQCúV“c!yÀkz@^ ¤ ×*ᘨ€´Þ¸¾°È¢ñí{€®Û§š$jÛw þ%)ñjNaà¥Òf4F.iÚC­¤™çªê6šnrâf¦ï±`齌ʕ;éìÖÝñÙ^ÇÜþ¹é{z÷þ©éyÛQØàJ¦T8ĈCŠ|XÚ·ÁdÉïšÒ~ áпZ}©L# Òý£¹p/ˆ™£Šè’ˆí4÷òà>‚ýeYWÂ1dÑV09„dÂw0»ÒÍ vÞ%­Éví&2ª=JÚչذ†4¥‹d„M¸R0‡‘FF6yšg™a’ ®–­0Ç¢Á}c1,ü¾M¬Qާ'rµQ„{0­:o‡Î¡À6üQºTp wˆ-ÈÛbí>óãæÜ³V«óµjzA"ÊÏ ùˆcOVîy£I 4¹ «ÎN•€Œq|í®Zlñ"ŠÓË«}Ò[0Fq0ÑzJ„()f2­Nà–“¥: 2”]]M¬ºÇ¹ÿ[3KpsíìT÷BÐôÝ ß|Á‚&4Gr˜?ÄoW«RÖ» "F b;ì¸Fö0 Ï<óL&{CÄ ˜@c™d¦ônߤç{«Ï(»ˆGOJ4yÜOªeRS bµ`YX12+j®UÍkŽº*›54 C5Ë%ÎbèèÍ«áYþóYC^cÔâ>¹J°á*áHÇe—]ÆTŸDÚvÁÀ¾ðØtÓMáío;l¼ñÆLJ6Ú(Òô©Âšk®ÉµÖZ N=åÞ×<Àt¢ãŸ½ ÈD÷?%ؽ°)Ì€»ÁÖÉß®eL‹–J¹I&ÎaÑN™ã7`R‡ÎùTyšÍhºt˜yµQ¶0w©Y°Ì²KÁÒKÏea±¶Â¥AŒ"7ÜpkŽýöÛÞò–·p;b$!zžßýîw̨Nt;ÄnHL†CCCLßC„ ÄŸ[Ü,×'gÕ"´àÆgqµH™ ¡óç-f“b qÁš¤Ýr¹i vŽs$Z™ø ¹6Ã$ÖtoÖ0h…*4÷ïÕ_P}N®Ü™cþV Í XcáüFÏ6jOÂÑkФ“yÒ‰`Æd1vD½CìèÔJàÙgŸeí@¬é{î¹'NBrÕUW±F¡ó%á Ä­«çñÇ?þ=ì°xnd^‘ä;ßùìºë.3F@zµ¨ÊÀ¹ƒP!vèØ ã´¤ˆ$‰U%i@¢×ñS•°…&6rÓ¡°T…žä\/ž ƒzÐO™­±6¡þ\ÅA«¥ê~Ñ«0GiQôE]ÄB±Í6Û0íÎ7Þ…ƒXO=õTƤahæ8ùä“™wçw†Ï~æ3pÇwÀ;ßùNîÕA¬ë[mµ / b&C":¸f»ð2€n˜ô/¦¦YjN•Í2ƒL+X saKW÷nØÆI‰dßÚ`vÑk‡Mޤ+«דs¬¤Š—Ɖ'žÈ$l¤ èAÍjˆÄm•UVajÐ]wÝ•Y IHè½n”4ÞþóÞŽ„‡Ò£ûeYŸv{‘ìàªML¤.…P­•¥}aª-Zð –õJ‡eÔœ*(’ µ{,•m%œV9cÊÍjr)-§ T5äåAÀ›Ì)juFìê¯{Ýëàüóχ[o½•Í)2ˆy]r¢|àRIæà/9c–Ç{ŒAºrp¥Â1Q·ëXnÝA˜Xí&Ž²î” m‚iL£ÐíqŽˆ``›7ýÍЖ+Ap„t“ *(GXƒÒEPëÇ1ð®'ÑvJÉjBç3݅Ø© .™V—_~9\zé¥mŸ“yDÇCnÞ#Ž8‚oi†“¾ÿ}ä ÷ŸßÿýðÔSOÁ‹^ô"^™Š¦E@úHÕ38å2:/¦sç²vWn)ÀשX©%·Ê@¹¾C5vËÑ"'åKÙPîJ<‹Nz^—ß0Ðô‹6rþ]n\ã°V¯IFåXU˜£|¢þB’;–&5a{ï½—Á6ÑÞsÏ=ü ç¥.ƒ4™^Dúãÿ˜]¾k¬± ÝìN˜£oÁ3sdìÜ©‰4ª“@¡£‹¶íŽIËø#Á("0Ë1 ­/âÔïÏ›S ôš{>,ÑçTÑljˆ"dœÔŽ¡ÿGÿêŠaŒP†ÚR7ªJ8FÁœ”æ/½®qgqÛ¯¾új¸ûî»áSŸþ4¼Ì›S¤1–Zj)8çœsØD#­B==H8¨)Î@4ãdpàÛVþ4—Ax«`W@¯qÓâ©*„"ˆ"î‘ãˆÇ !oΓ^Fš#\»A˜"ç¬ÜF è lU\HÝ9šNq‰ša Í+áèiP,ƒšØüéOŠæut"._bcÿã%—À¯õ+X°`“NSÌ„ž“¶!¡"¡¯ghО¦~vcú“Õ’ì´GÁÛ7.‚†ØÁkDM¢B£Šh7Cí†ɽi€kB$K ÀmÅ]KüV-çj^S¯sY,aJmçߨºÉ¶šØdÑJO°âŠ+òsb]§À`:¨ó“®¤¾õío³–¡Æ›×]w Œ¿ÿýûÃrË-7sc =ZYk´cI{´c ¥‰Mšs•àŒ–ºöT0ÑOtñZ¡Îy! ƒ*ds®”V5Jò@9T¹°º‘`# Y[µ¬ŽNæTÐ<øàƒ{v|üc í}½)F^-jg0˜I¼šÃLÌc—ï`[мä©Jò¦LÊ^IÒ"v6ëÔzmóNeÜ.نƙ”±kšÜH¼i~*\Jg¯ ×B÷Z¦®ª4ÇÀýäNÓ©Œ‰ OšöÑê¹ê(lÑX±|S-’Ô'¨¹>2jY³æøIžQ™÷ç ìÀDm^0jC”dRóڜ̮¦é¡^Ä´N‚Ä/©ë ™«âÕ˜°µ%tÛW» ¤Z!‰}´¡¬ERsKß«/˜Ï,êý¦y]—B'dÊOåMiXÆäÊê³¼ ÕdBS“ß7”4M¯õ ¯„º2bÂ¥Ù¸ØyrfV‹§ SàeðŽ(ŸÕðš£Ù€¦×èys¡óÏ›lnÑd¯ y!ñïs<ãÜ©¬fCMJ+ÉêP÷Ú†²FBÝù %u«ÆtÐ.=5ºi«!O‚ŸI—¨rÄJÄq€-¸£3c†#0wÞ£0»1š³—ƒÆrËøÉ?;nϵK‘ö7ÄH­~Û37™ˆ¸+TU XQ'æWC"´Ðêô(\1ÎL,ˆ.ÜÖ(yæwÍå`ÏÀZøŸñϽÙ42w.J%ÉÇ6˜Ì¼V$ Æ Ñ›áæ5”™KÍn;ÕîWÂQñp++q ClÏÚm)™íèÆM~·F5â<ÁCxʼ©U6ö<£Ÿå¦5¦fB+f"£6y`\¡A Ml°òVUc2;¶ðΤñŒ`6A©–Ã`k|£ ,i\u†Ü GÝã…¯5¨ý™™ÿo0 êà–] „Â:νªQÑ)xSj(Kªo‘Ù×-TfU5&MvºsYìHìRïÛ.· a N;çNM~Â{ÓÉQo?\ÚmP™F=o+ù-õZrizŒí¡‡©ˆ¤«15¸¥Ë{(O´M IYJ:bÉX7P³ Àl˜)Õ3JQ'^Üá×s° p*{(jbÒ7“qÉ,uw¢Øùp}\Í›WÍÞˆ¤+Wn5¤Q:©ŒNB‚-ž®v“5¶4aˆwî\¦Þjᣚ3gvÌQ¶/ps ˆ¹Ï£­Êµ‡½ Žc¿Òáõµ T#â®õB{ñGè3+!PË8%¤æœ,ýe,+Ôz+jžò ¯MêVX–]vY柢՟\±dB‘—Š>£mH0Æ;±§…`ôè‰Â÷ƒæ0âøŽû9]sì3­;ö¿›qáÒéʳª{ÓÊ[œ/å8(˜cƒ¿H¬êdB1 »!N«¦P÷TqŽŽãé§Ÿ†Ã?œÛüö®&D’jKßs#"³ªº[ß{.æ­ÄÅØºq#*Š ³u!‚.f! èÚAqçB|Kßlt50ø@]‰AtäMÓ (ntPfãï8Έ­mwUeFÄû}çFfDdDdT½¬ª,;®„U•Yu¿8ç;?ß!ì±ÇÌÕW_m~øaª¦«oà y#»¥8Ó1§ñqrTXå&ä*"3ñ.ÕÔ»³Èq°¹i:!/Á¾gu.2ãyªr%Ô\ÙùÏ8æë‡~ W¸ãŽ;ð‡Ûn»áY€äæ›oæ8‚G}”j‡…ûÒ9P¢.Ï¥;hç D~–†ö’z?ß ØÒ7÷÷{³ë1õ{ê‰xæ±»u…Ù9õ;ã’‘60Q¾G§Zo*ëÀ¡šãÚbˆŽ·"ÙP[UY(¢!†ÓÜsÏ=× Á8‚{ï½×¼øâ‹B¸[˜ê}]ˆ·a.ÇAÞq|~ûFw¤Ûíáýœ™ËÍ7»š Úî-o#:ÞpرىO™©Ä,_·àAzÇ@ÕÐjrÒ.• ¡[Jó@ãÍzmå.r¸R­[à˜ˆ£J·Ìk¯½vxAŠCÆA¤&\Mƒ½ë½öNËTN =tNNü–uUˆÈrjSʯ<÷°›Q¨Ç’0¿Ã2œ ñiˆÀÁöÃZ¥‹Õš YŒ,¥â3™7WÕÇP¦2áHÊa1¶Lº9¦K…Þ $‘!ç´eí:Ñ)y‹¥º!™G- d}VhÂîùï˜ ˆëÓy†u@h¾Ë÷ z5Yˆ2\Ëu]“ÛÖ·m]F~ã'¬‹Úo˜4ñîÊÓGr#“@ÂÏ»ÊÓm3ÙÙ5£“[tÅ6RKŠú$2U9Ñtp«†uÈnë‚)¢YM¨|VÉj̰¹™xp¸d‹½àùÅŸYh˜žÈCõ- ‹ÿšMÕŠ\¸È6YTïî²æ*6Q’Ð÷rY0À1¬î»w¿M_²m—]ÛÀdW{¼ê.•¯äZ]7Pб™ .*ç»ÞZ\4™ç)À1Ìèø›D  ª‡QÜIÊ„ß4Û11¬Lä-FâIz¾†–c^))¿šíVu%øõûL¼µ¾_/nQßÔuÑÎE\(]g„ªz~ ëëLXä»S„iÝÄäç.š©Õ)OO8%É>¨•dÛþçm$ ÅXr–m“޼õQ·ã ·G`´Ìðnòñ]K‘ër•ºü"án«@oäN @rÅ¢á6ÑÛ²þû Þ•šðF«%SÞ•ý޶äèÿHÎÝ W³#ÿzÏ[¦»ÃðšõÂAcŸ¢óyé‚`'±w—ʔȺ©÷ŽÆ0Wz&ù§5EŒNí’[ˆ¨p4µ-„?9(ÊñdPw3”$IÃóéÄóؘaÁ¥ŒV£ò³kéÒ߸…l×ùI+¨Úg>ÍÍ[`>ø [eM»é¦›x÷ÿøã ”Ûo¿½ñu/^¤kP¡Ü?ãà€”½ýK6;líÉ×j{ϲå‘E‹ÒV’⨠÷«é½‘³@Ÿx¦2AÌ-ƒD ³7¯²±ªŒx±S 1¦zèÜL w!2êI½d,ÇóÏ?ïùÃÓüàž}öY>vöìYsúôéÒO̵×^K—) YT¸\eë‚U¨±£‰ÿ®»þþÀ€qb‚+ÁN%ºT¶"ÕÂÄ*0\õ1)6²ãÀJ1—çPl=Ó ¬Iš‘wتŒ› Ê*]ŽV6½œbÂ,À’X’û¾­€Gj9ÊP}@]äóÏ?7·Þzëìýo¹å¶ÎÞwß}æÝwß%'ÁÆÇySo!~üñGóÆo˜¯¿þÚ|õÕW”ñ¹ÿþûÍ—_~ÉÇðšMïë–Ǭ«VÙìYà íä[QS¶µtFþ–ÖÙŽ z&Àbƒ{ «ìèó/šììxÞ½Ã~rƒhz:œS=ihl޽æA3Þ4ÉÖIûcp«z¬k®¹†c î¼óNóÑG™W^y…Ö.Ô«¯¾j>üðÃÖת@gw{{{¥ÀXµIpûi¤áû:h Ì÷muâó°n¨zhW˜ùF…m M*át@f½€ñ„cGkš™lâMÞåt¯`E(^ƒ¾r§¸¹„ o:a4 Ã4…z%înÒ(5É86JMÒÝ~Ÿ HdfÏTq$á€Ìøx2™üת¢Qðõq|óÍ7$¾‡;˜!5ýéðò>q·ÿÞð…ž'·ð”«ÿ\Ñëæßçð««~Õïó™‹Âóò¼ùyt9ž[\gáÚÅïY’rªÿCþü§5sÙe~ÃsP2ñ‰ºO(*D¢Ïlúcªp0‘ŒçÖwÍó“Ô»Y›[L‚ÒÿÝ?üãßúKï†cެt¸KÆr–Æí*Œ‡ìYþ¿zÕî÷èkÚΫVÙ6Wú–¸„›[›…{EÍx9W{¢gгÔi¹”¥`4 sÏ)„"ìŽúTN9xë\¹ ¸y"‰*°ïîø_g^³Ö¦¥1{mÉ­¢JÚ¼›=yo=¹H%‘׌‚Z¤«òH‰—T®UÙ,ÊÔˆ*‘pšìdjd) 2 ߢÄI?ËîÀ$úpíl äÇ ¦yŸø›vnî¢=ëÓPpº‰N>Ï\ˆ›éÛ†¹d•ëÀuÃ\?¥â(È’ahH6¡Z ÍN,V‡Û…²“ OâmÈš{þ[Û›×z(wè\p•¿.(+ûx­¬ \®‹ªÔH•ªn¥¡°–'iª`kÀAÕœÕTèŸúÿÐÓ¡Æ*š²WCtFš*K#õ ³þñ ‡ ã¦f·gIÜ`9ÛFô¾{»}p’¯î/ÕÎíúÝf~šéŽ‚ñ®ïªA+)¹43s¸( ç*æ²$ûcƒŠ~ŽËD,'̪ÀçýÙù~ŒÈrˆHckÇ#Õ©²ç·AÊ)QË 7YȺ0wÜ_)t® 8ê\ƒx¶á N¥ç(ÛXÆ`9ŽÇÊÑÜkß¶„qÆ9€ ”Ññ·ÅÍ/®"²uæ«S•íD%޳üb*x°ùÍoÆ <˜$QmÉ<@¡$Ýoø±'ãi*{ L{AWtV ÊMõ«2Z¢•c‘¥úl@_ËVc™KuX ,ÇÞ,Lj.OÄ;=½}ÑÊYg3Âý•ŽI.>Ý"l¡…„F•%j!’Xh°?016†¥×ö×AÎCôŽÀ¤às#7nÔ}ËÔ,„oáa9ÖiI¶Â™«þÐ땱…Õ(,ÇñZø³Å¦à1}~üMøS$ÇŒ©:zšªHEBdƒ®˜ËuöFø…e#“ð9Dœ „ïB6œ‡®áˆzU³A6„ Ç3§@––ÅÚ¢RzïŸø0Qv¡ ÞQþ~Å1µ4Ör³Rw|ÑïE5Hš„Ps¿¡SÏ9<ˆ²IJŠ&è,?lk˨< ‚ ó6à¶ |FIŒÊð˜ -ìÄ{“W ù)däç)•вŽIÀ21/9VÁ=–‘ðë¹b«n op¡còÞÖa @ʧB€‚ÔCèŽmYMM„¾¸Fp¹˜Ì Ü# ÄÛ­C‡V.åwDóEñ!ŸÏUu$s£Kø;åÊÒWŽ•«ÄÔR€¢©ÄdÃññ«„‡ºVQK©˜³ 8f­Á1eBÀäY¬!ÞLX1Äeƒ;%aì€nAêºpm¶¹RHA·(]8¸±*$ÍZ¬ #ø‡)ï«¥{ûHj8ê¡Ý&×k?ÄpXG„ „c­ª ÚÙ]YfJ眪äƒÎm4²ÌY@1RÀ@¤áöˆ ¹ÞÝb”–UƒN‰…6’£Ø"ÿ#Šϲs¡%H¢·OúßïãK±VÖq0V€a·j¾Csên…P*z-,{Ìžo´³ïfqæ¹gèå°&HwB-]Ë ñ Eé¹Ñ ÏäbÑBO+)jÆ„³wëh½R-ÎwACÀE&̮ɗ.·jö¢<ÏñfòäAßuúnúÁ²¬›ÕˆtDÕ>T(jN–õ~n9gÃ*m@ÙÃ÷c Ërž_DD³>™Š¶Ð9DásÚ ¢+L«-\pŽ\£ZšÏ9‹Ã†Î@*ª^ïÅeV£å dÖùóçÏ\~ùåw¶iÖq‡—3ãzhÆ\d®ƒ‹$Ÿ+p0: ¸]ä ®›’î(zZ †bÃ`ñ ÈsµGÞ™ ?ç¼Ñlâ,„õùå—í¿˜¹V\«å°îÔ ¯¿þú3Þzü}ú÷ãñø÷þ5£aK «Xœý6­¡œœååÁH Ï»¼–‡R>¦!Wä?ð«uy¥,$õòÙ†ŒŒvïqø%òá6S‡ÊÌæÿ±#”0ßÜ:«2oøöÂÏç/üû¿ýùzæÙùŒ¡«ªˆÛP‚àá 6…òaޤôµ¬ŒXœß"3<¬aQŒ äùÔ@0 À(¾¦5€Ì@/áYmã»pÈŽa­)8\8²@4òŽ6Bž—\­¬öxñf¶dmV¡|4¬a­õ}ÜfAÊ–"7KB¹® ¦…¶Ãj àÖº€£î^•A’·q:8\Íu*NÈk5bp©†µî®UHÚ\*×äV5i¦ä5kR'à8†µÎà¨{>Mß7M„^p«¤v¢˜ª P‘Ÿ¯ƒcXÃZg7Ë-9L@º,GPL 0 k]¹GPL0šÀÑæZÕyI0†µÎi€ë8ßÈ’z&éùذ†uÓöX«åèõÂa ëWŽÖõÿ äÿ©XÐàëˆIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/musicinfo.png000664 000000 000000 00000043544 13703317554 027322 0ustar00rootroot000000 000000 ‰PNG  IHDR¿NB†tEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp DU¤‚CÔIDATxÚì|G‡Ÿ³¸‘„àÁݵ‚»[‘RÜ­¸»»·X)Þâ/Á-¸  qâvwûÝ]ì Ò¯ø<¿nÙ»ìÍÝîÎûŸ÷yG&“Éø@>øà‹Aúƒ•ÿB „@߉h(ßCRÚ— Ѿ:×âmUJá½…BùqHé_Ù[„Bˆ„@ðeŠƒ”¿ï#oDj¢Ú&„A ø:„BJeK.¯‰„2qH¾ÉSÙOîY‚/K’ „6•ý”Äâ­„± $ßRó&Á—'R2QHØ0ú—·yÉûŒÅA¡ÿwÿþýy*T¨0ÞÌ̬’L&³×^ øÊÔB’B£¢¢ŽŸzôh wu/5ñ›6…#EHôâÿU†……­³°°¨'.­@ðm±×Êʪ­nWm$šä"‘\ ^óâC¥F£y( à›ò" E¶xP§æI(Sé{xM,ŠlŠâ |[XÆ;Úx;×&³C_DòG–ðæ“ …¸–Á7‰‚7ŸN¾æ0ÈßâA …@ øöxç°…”Œ_„@ðý Ä$‡”„B |{ÈRébà}=™ð ‚oÚƒ½¯!{‹H‚oÛƒHÑ‹x[ˆ!¾OÑxkˆ!ï%"ľýã_ „@ øŽQ~ '¡îeõžg"i L#n¼@ðÝ„¹½‚®™eHïJè­s¦^ùhXóBz-K†@ ø†"Â_Ã\ÿ¸ý v2ì“NÚX¸*¦¬ ‚ïL ôÈ ¢ §]1µ„§SP9ZöÍ3Hô=¥%oF¸ñD╸ïÁûÙÕ7q2ª¨øÑbb$Üj8(ñÌWÃß$^jtï+ä4É+ÇA<“¾?"F«Û4º0B%§CI%ѺP£€Zɘ 2rIbu×jeÿm˜!I¢ ¾øÆSD¼­JÈPê”`õ%5AyUôW3ÉGÁüR2üWÆ,%[ZDJqW ø<‚ìEB#&{ãß—@$`b"ã‡,r"tDzsuT2œªÿ\¤øÿ$áM¾ –2ÉkÿÏð¾ôÁ"ñm „¤eãepÒ÷¬xª¹Åf_—ù¿„&ˆC’0ô \.*¤à‹f±}×$¡d,ߎ@èÎ9…ŒØH‰g)ü9­îof²ÿO’tB2ˆ‘ž^}ú‰Z(ø2Åá·†z*Éä:]½¾¸Þw%:÷þÊC-.éåÔIí…œŒrí¿<á$uHR¾ÛÐç£5ˆDbàñþ*ñÍx·k¸ý¶Z¼ÂdJÿ—>Ä÷†&yŸô^cÁ& zô(AŒÁ‘‘„úòìÉc¼<ïáááCÞÞ¿Ò½hÒmU¿ôâ¹Mvœ-Þ‰äò†u„TéBåôb*η/ I«ãEὈ阮h$Ž>ÒôÄRÂz":>‡}£§¼Ñ÷Ú3‘ÁW±ïÔ&¦L8‚I‰Š”.SŠ9“Çr{u[êtÝÌÓ=SßbëŒíÜ“t¿"¾A3®¿€hBþ•7ñy<ä ” …R¨Ra‚nÆPæçÚäI›‹Âª#,Þö¥¹±á«(2dƒ#f2é@ˆáí³3œ7uÁ%­ˆïǃþõ#x¥¸‚ÏIFªüÉb Ü~Ì.›Üt7aðÇTnT‚æyW0}‰-ªW·Y4áE:Ì"àÂ5Ì‹%½ÇzÎ>Êí3WP•«HÎmýi¿µMŠïåV„’Ù;ûü:7¢²Ó|ôŒ©™FøßhÕ×W™,¾ÎÊdB >žç\,>²4Tî;‡J¾ðhˆ=3GÄý¢7VÕÊñ|äo<×€©s3&:D¦0Œ*UïÉòuõXX»7óVÐÅIW14w™å:yù],_Z…G3«ÐËl£…8|ãZ²zü7[„ÿæ‚Æ'ïýü¶;„|Y|ټ䕗Πa±ž,ìÎúµ×Pä-NK£¨o±ªoG:´nJ‹Ñ£nÜŸªÞ¸¯‰Åó~9ó¥•@ÔY!ߥø˜_ÀÙ¥iÓi1×Í‹P:êW7Ê û’Ø\<ÌÏSòv&û³%tkØŠYW£Ôµ¬Ý—®fy¬x–`аQü”å4»®ŸãÐÕ"Ô(c"n¥¨§"Äøª‘ÙbŸ³ ÃççcÜ$GÊ´^ÌÞ hu»7cû?ÆïÂzŒFð° 8´ØÊbñ·Uã‹OdZ XfIõ…˜Õ®¡•0ÉN!_ýmÊ[£’ï†W K+,ä/Ý–336ˆ+ž²r†œH÷`Ò´Hú”öùE®Ú§o²»l’³8N~kÉRµââ Dˆñ-zJ2VîÊÐ!-)ž­† ¡M)[£þ§h®®Ü„IãúdÇÅ¡†1u'™ØjŠa#Ïl˼K!bª@x_;êW9úÏ9|Í~Œ §ŽæÉñÌ•Û`W$š=óæòTgì6-ââNÿ££è}¨2ó;rnBUº®ºƒ¦ \¯ã8d3+;åGªaNÇvM™þÇ.F”¾„@Ä×ë0„{pìz6 ª‚¾[QS £Ç”¤EYÇx¯AË —ü<ηܢCÙ_øskFrZ¨ˆ¸…S]/0ÌIòM_B«Â6qŸ)Ô•§~&ÊBˆƒ@ÄW"W+¦-0z³-s¾-f(ß ‚b‘U'qû*kÒX×aŠ7§²Étâ`..¯@ôA‚âAÜheúÝ^ „IYZ­Ö°¯Ñh ›Z­àϵ¢ ¾lÎ63E©T¢P( ›L&C—EkáAb!@„@ !¾pÄ8ˆ¯)÷mnXÔkD³p^Ü÷&X›l¢•V™ó’ÙZ–øÆ‹5mé4Šíýó£H½p‚<¯à*½Å´(óP(‹UÜÀ*)„ók6Ó 3eÍC‰ÒÊ_O- ;^fjEø­Óät%¿M Áb®± ïv OGUû¸¿«ï¯gÆñüôïRKq§…@þê» iµ>€mëkñâÜ îFrxîZdRÝA†¤‘‘½Vn@$I<:ˆ€Èw•¬ÅïÎ)Ž?Ðt|‹ýj2üÇ<(õ‚S<‚®mÙ@x¥ö¤?½œm·cæÕ™U´îÀȽϟÁÓ‰åS“¼TÉy‚ÝÿâЦ6dÑxð[Ï)ÜîvX Ø!ø×Èl);r3¿­Ü…¯Ÿ´¤H¬çæ• FûæÔ6‹3tµF?GÓs#Ã&þÃSÏxF¢Ó]”ë3¢Å~nº ûéPDzsÝ¢î»:“§~_ò„`ð¶‚L]3—á*„>ñµæÖBZ®ÊÅÊYePª”¨” r×.‚ß‚å¨ó©¹Ÿv ª¹ñ,ó ~Ìÿi~ΔH)c¶ö)'×à®+¹¯ÍcÜÜ ÜZÄŒÀ² ÞËê-EhðcDºLÑ!ø "85öGú|çä~¸…Å¿ýÆü“8àhÊ?ŠÑ`ØB~Ó½·dÇuÂt-¿"K†LŸÉøæÈQ³¦TäÕ¾Ëø«ÕH%°eÏv.kG­&>oGÆLÄï—%tÉ€ÛÔü4÷úÔ3RŒ?ŸGÄ…(‰K„á¯t¡wÇÂh‚¢âr&ëùžÂ=Àã†3|X/¸tc{H‚ t5³¡ÍW“a+çRîÚBÜòÍcûÂŽüë;flÓ/ˆ&xOzõêEXX˜ð ”íÒ‚?µga†UüTºc*¼à¯ÖGé8o)cLÐ|¼)ô¥Y‚+oKº 6hÍä˜Û¥ÃÑñ ¦²ÔC ¯U]è±;†¯zâ:WK¡\Q¬èÊÔÊÇ£’£”ëû¤¤©áòL”Èz˜µä-â„6(–˜˜n®ÞÓ¨‘½ïGÕúèëŸ*ÖFÝ^œ=°o¹–^¯x{ˆý¡:éÑxò,ÖYÜêÀËËË +V¬@¥R}”ïÄ× :·`Å©mÔ¿ºœí/ý85©-K2 ÖÝ¥KÓŸÅíîÑ·nWæn?Ç£m¢áùcë`÷Ž-'{§mÜp‚3à`SƒÑó–±}ÓjdHÖ†’J(>>>tîÜÙ0ü_xoECèãk\¾ë6M.ŠÏþì¤Wx]{HÐkËX˜â”·™-eñÞòn=ˆ%Sá¤Q¼^f˜÷5.yø¡±ËIÑ¢Ù°þŒñ±Â<Œãg¯sáŸj,±Êö¸Öi,× õ¢V£ßØ]è®=„{±Òd³Ñ"†‡žQd­ø®gA7pô~òÐ+øøÆp`çNuᇣµôÚq†Wò¬ÔÜ›´»Ïó\’c–½ ŽwaCµ¥Ì©¨kÉbO ~þë|¸Ú'óUϲjêdöÊ%ü.<ã¶çt&ŸÓÉ—ö W# ‹ÿøúú2tèPæÌ™#"åúÆåE=qÌ‘J²¢}ô3g—bÔ’!¸Z¹³¸Ûdž”-I¦/Lî@åÞùt¡0´²ÏþIÛY¾ü´fCK¨Þ(³¢«³¡ÌY³K2la~°•¹¼LïÇÒÓÔ¾ü‡ Ž-hÛ<7ƒ7³â`EʨLˆqŸCÿÓå©òp ¡?/§{öx•SßâÌ”.ôîÛ,S¨P)ÕÈ” dºpB?ÁG©3~¥BŸ._M¬Za –½ˆ=Ïo3ÏÐrP4Ó—›2ÝÁ¨°Èç<½yœcw5¸2R\yJ·ìOåq­É¥Pã>úË\æñ[=SÝo½Êï=p>í¿k…ñÂO°vkZìžGmC¼Û›û«‡ò»Û3ÊÕןe~ZNšM[YJV‡ÛI%õZpâÈ-–(wQËœK-+ýlÎ^ÜÓ•¹üÄsJW÷féä£dl\ûSÊOwDQq5•K c *íI‹|› ó|… ê=‡#‹²­ópŠO5_seÓצ¯ÞÇy«<`W  è;_òûšªÕ«O–_úE€c~¬žÁÐñš.Gàý$†)™7rè²v¸·ñQ“]0“üØ3n›Ÿša¢÷Þ' Çù»{qçÊ/ôؤ —:íÇ®ÎdfµÊ&âß÷ÄÁÁ3fHÝ÷6ÃLsŸ³çŸR¹zftÕÜæ3Ëàe{¼Ýì|Ü8!UeT«ú<ÂÅ(¬4.ó•ªeÒ•¨"wû¹LÓ)u¸ÛRÜlëÒšO¸üžÆƒ?7I”ßn†ÿ‰˜þ2öYäìÕ›·mu÷ÙÉrë~,ï0”•§©ZOͶÙ{)ÔåéôæA$q›bÏΤIíµ("qÇb !”Š |Á“Ç^Üw?‹÷ÝûŒí÷›Œ”h܉¥2¼‹¾£kž‹Ú­«“µ˜†™Q\—‡ #Œ_fJÇM£‰Õ‰©g×1Á%-õ'þIý×NHÍÅ‘XRn Ô7Vþˆƒ¾“ÒÔÔTDª˜W¤÷˜sŒšÚ˜ŠS³Q´TÊUoD³êy1„âê¬éß}†èAE‘޳èãbah•ýÜÜPWC–üA¸J£9âÑŸÂz·Ø¨ÌJº2‹”,MÙªõiT9ÁÞOPg©¨û¼ç';ÅÈSËX+¹ð§Æóø]íÅÑ5ËÙ㡤 •’œ]–1]`5ÌÕ{›Ú0õUw¶×·%`MCò ºE‰þkÉŸÓši:R½B6¡w8ì®ÂVzɺ Ùb^“ºuÚ²ÑÝ…üi_¯pRð]Nžtã´·•õë* óó Âº?øc¶}ÛÝ_‘y-}'mÃqÂj§±… Ý9Ø´ã&m`BeÇd :IÄÆD+Œüß’)S&fÏž™ÙGìÝ•Å!×m*Ýf¦Û,u›nK«Û2ë¶œÒׂ&Ròñ8-íZ1QêP¥´Ôp–»}H\¶“´ÖÓWòóóÓmþRH”6þø—Ò¦®?JSŽxH÷îÝ–¶ ª,5œKR©Õ•ùòÎ)iÇò R»Ê¥¤úÓNK·V´–ÊôÛ%-úuþ';µØW^Ò¥[/%Mâ¹>—/š!-Û_ OñZ„H¯Bµ gñÿÿ€ðãÒÌöݤÑë®J!¯&¹¯›.-Üæ.]Ý»ZÚîöÚÇÔ¾·¤Û>š”~ ôôØjéŸ{jIðqÐ×Ïàà`)<<\ŠŠŠ’bcc%µZ-iµZæ·íxOoó–ñ Š×„8ˆ[­Oa´©â7}3bª+ìÁ—¬¤ÑÏ.q18;å Ø'¶RѦÐp¬’i—dCõm”Û·ø>Éo ½»ıX¦¸x7äǼ\Y¶õ²¿Œ+³\þ¸u+õ¥¢ÎO¥ñx9cFÄ0n¶9Íë˜Ó«O?Ñ” ¾Hÿ¶€6í:¦žQJ¡‹1Œ…Óo±ñ›Æh“¾‰~ EØ~:½ÞQ òÀó{^DfÈLºTÏP"à„1MÆ2~üø¸mú`jFºqä&±Ìž$,cÃóûº2Óg"cñ&46Û/j à›ç›èƒPæíÊ쾳ݥ¿Z;aHˆ+C&þH&ùIÃ#¹™ª²0Ñ0¡üÈ”<J™“zËMŠQ»r$Ó>¤GÏ×Ë´‰ Ķ<Ç6%£‰’¶“ú³ñècQƒß4ßDˆ‘äÄðŠS;ì­Mþ“%í%­¾Ì ¢Ml±³T¢MLZ«æÏµ«Dˆ!ø¦CŒok.†ÌkG§ÿ¸L•¡LËø¬Ö1ÿšS§N‰‹ ø,¸ºº øo’@ð¹£Y@ B ü‡ˆ>ˆ¯•(wVÏ}„ËÉûÎdBjnÍjÈí$6+‰ÕÛöàða5¥ë"nài—VÎãI•¡4Ξ»3ªÌb|I9žs$"Ÿñôi ÁQ‘ðü)OMˆ42hIK°×ŽöÇûÁ+Ô•õ¹k¢yyý(‡­4\÷‰%|ã¯yt”uG¢Nø¼æÁ÷Q¬úƒ—‰¿]A–Š?Q+ÑìGM÷.œCžÌ9’^="D*ñú›ª¼4è›W„‚/³"´5­‰éù~:þ#«÷M¢¬i÷N{`Vº Φ:ÃUÇ ´Upð oit&á;߯»k#r)2‘Çä!›Föäd¦ÞtüÁR'Yq,'Zï?™u©:“¦Â±û÷yDŸæ{y~Ñ“ —-ñ°“ˆ‰-Lßõã(xþ£¶2¨´=òZ;Ø|›%Íò¬î>ªØÙ¡è»‘M9Öp=@6)U3-/.ïcaÜô{å=˜(¯òL”¸VY°'³z½$Zgô…» 'úÏ_ØÕj<ÝÃöòPªJƒ©“ÉŸMO}i9Sö•dz›\qÙ·5>˜+ͰutÄQ÷}Ï·ãWY}jê"I73P¼fm*%ó ´/‚ÙwßX u"å©‹„Þ>h5Èl2ÉÎD„à"³À!£.ŽxÀº™q¾“º™‘k^°xÚR2ï­C ǤÊkßh£é÷‚É~³1žM†0¼€Ît´žÌÝ» EϱŒ¨i”ó!âó:å ÕF¡‰k(õ¶$ErV…[0j|IŽÍXËm……¡2%ôÆFÛR©Og,—ud¿Ò’ìe«SáÊ1‚¨NÉÌ&„k¢¹µy"£oFáþàf“G㡼Ëõ˜âq†rž5 òTozR—ÖoâU•ŽìjSŠ Þ%h[ß›5:B2)D«AùW óevä«ÜŒ¢›aòG[~Ͱ„YÎwÙu©:–Eq$+¦‰ÞL{æ-oçùœßÏã,Õȹ¯9žþãY<Ð’Û÷Í)TÀomÍ!_O'«;ÑtÚUÈÛ‹ó³h>ý ZU÷îÝ¢ýìT¨‰Mßœ¿þL6£–5Mýî”\8}WQjÛFž4Km[ccÏDƒY©iqŒn=å¸ôíÊÙ~Ýøi•Ü`OÏ=$Èïg¤‘²Ö:ÖÈ‚ö?±r…^³ŽâvBN§½Ã)–X›t^GÛº\êÆà‘QÒð^n²:XcŸ%™lUÈ̆õ©›Ç‡…î/°=™6–×È»Èý’2›è0ú4A×Ù4agš­eÛ¤JØK}¨?½³ž80lL'\3肭g[ÒèF|k.rÛë)ç×gqüµxóAIŠ~'ÿ!¼é Ú³ânf[Òf-J¡4YÈì_"®yhv°#v–dqc£lX¡G™Ôv$ÎÓ7Á»ðü›þ ÿ¡Éî]ôÉo"Bð©‰àÒÌz4û+/sÖ `ñt&.CزKï9ßaj¥Ñ8¯ÙJÛT>náÊÞKhöË@2=H˨]’ÝÅ‹ˆµsV¬ãõ"mmƬ®‰\©ôÍöö•¸Òo K( 1¶Z¦zm!`­¯‹ÆŽ6ʽ!ñJVŒÊ)> $:Z§›Z~c7[oøsÍç)–;·bf!a^ 2]hòÏ,ØÍ‰‹Aì>•q?:¦Å4ÄÛºÃxm#SªåãYæzŒX¶€Å:ñëÚb4wqŠó¬bÓ¯Ì:jíø#>ÄÐý¦ËÛ9mnoì2l,}XÑ÷WÊŸ©LnÈæoò<^ß•nÇ˰n¸qª¼PNNÄÑÊÓ8SÂÍÕx#Êׇu3Ü©úÓ0 ¸Í¥ªÝwö˜S?µù{F?‹S¿é³JiŒ¦{:,(úó"öwËOž ,–ñ®¬œ´â<¨=çëïä÷ôåJL;4(ôS„JôaCH“üx•-³e#‹q±:FûÔmF½ÁFòòÆYŽ^½Í‘[°ÿ¹'r§%C]@"éÄÉÄ ›téI¯ïp´´B©3V‡bÍéÛê1íŠÒ»¼%7vgm‹´=ÔÅ΃h=;éjÓ{Ýx*:)PÈkÒ2ç[ã ìJ4¥žÑ;¦¥ú3ȹ óöõÄøiqä•Y´?`Ï´=#(™¸¤HwWv¢ç¹&¬ÚWÇàåø]ߌͳòRe:þò7Ç×4#ýÒ‘POê°~ª·¾ÇeyÄ·£ä™ OßþÅm¸¿¾2rM±1„úãkè%s{­ân­á͉u35û<…fìfìÑQTkq)ÓúP;—Õ3ˬráZ¯E”2CÅÓ×=õʼn´Ý–Ÿ&et¡}É‘?÷"뼕ƒUœãWñÎŒkVý ys9#öe]q5ö€2¢TNìr¹R¯~ rÇ*ôNÓâtKó{+Å¥Û‚ª”Êl‘T‰u-pÁVÓÙÙr,Ï®åâ;2™ÇÿÍ$5ªÉ“­¦¤hÛÁdÈ’J3­ÈAƒ£(Ò¾™‘‚SÝ'} LAŽÚ½PÍè­㌭W÷;¬ãúr5aøØ¼üX!!•rsÕÁ”fÓ¯)®é‚©˜û:iS«ÁÊbôZâˆSJã½eNÔóu>ðÚÛ…+r5ªêóXÒ1Ók3eºÉâªoï•r.&&æÁ÷l”©õAl\¿N¤œ|±èSεjÝöµ”sú>ˆ¸0P†‰‰É÷‘ÕZ |$U\@ B B @ B |‘|S¥¤°§ÜöŒ%SáìØ½Uú´„z_ãÊ=´v9)V,Gü¹¯à_`Ñâ  oDVý9ª/2±ær íü¦F£{¥O.\}N¬q‚ý0lÇ‚”ÏŸ0-9÷u^»+•Ò&u¥æú¬&üQ`3 뙿û‡½3¤„ÿÑyLúû!Ej×JÃÁÝ—‰ÁŠò}¦Ó¶ ÒpLè… ¶iI£4·8~Ã×ð0¹*'£~dNìuÖͺI‰­)h& XÄ{£åùŽÑt˜ãGË•;\\•šŠpeIoF»9PÑ5+šG+™=·$#D9û¯`^ämöl{Nù¡ñ!© ñ &6yÊ´ð§Üp¿DhôeVÍBå¡MÈ!Ó È— @—¢¸±m=þe;âʼn5l½NÜ<-OÝäܽeüæ¥L¼ÆR†JtjVË7®ë»r@J„\ÝͽÜóiv¢ç.:sʪSbF²ý‰V'qGEÝØÍþôͨ6•!‡«2ô‡+ÌœkÂlw½@Høý=•Óïòs•ÆÌp±,â}õá%n§”Ô«oΩc·é_¼hÊ'~ŠuÛÒÒwçlj†Ì÷äÁÚá,?þœ²MôÃf5„<ñÀ3ДÌùr’ÖTŸ^9‚àp9–&a<ºý˜X§\8Û~¦è,~V¥2iì´atœ"™@Èu†Üe`%Ô—F³îD†ìNÆøÏh½×Ðy†%3~­®ûœ•2n0­•s1ʘéDÄpjîß°åfž([V•èh,Ò†Øþ›2™•U¬Mâ~ˆÂÌ +™AåÛ3„ÉÊ S™ê~“Ìý¦-Vƒ|~›É:x -ôIl0nA,äÌè_ظl1­r˜ +ñúàs‚“RF¶ `À˜£xô-J¡”ÎNaйöçÎ?£rµL˜bB®vs™a0€NÎÀ¯sR:K'*øiÞ D¬¦ÇÔ§JNT ¼ÝQläB¾ŒùzZ´šH""7lEÃÃ#GxüØ–!mO"Ó¹ê5GÎ¥Ù+¼Ÿ¨“ÍGÔç„HOð¶y|¡5­ßMùlfc|>6™µ ÝF—1ÌÕˆþ79 ßâ ÉBŸñLùúRèì/Á ™Àï8㚀fÄv:üžŸEѳ]5öÔíÇÀ.)á¤Ö,"u#ñ;që(]«Dyi,Gïö¥PAÅ›‡šW çÈ Œ™ÞŒ*3²R¤di\ª5¤IÕ<˜ºÿÎŒëY¸¦ 9º˜yW?Ú,8D….ºˆüA¹6ýFS'‰W{‡Ðáà-š¤ÿš '< •(¬OL¢ Äß÷&×nÅBù×D <À¬•֌߳…ŽéXÛª>†Ù6 CòÕ7ìUž–ríQ …Á“º=ë4Ñ…†0¼Ž‰A04ZìI‚òþ9 %B]âò£^Y^á~@Ïž®¹É­˜0|ï\å±µÎJóZ~n°(Aõ‚×xpq {Îá~†ìÝ;ž^{ãþ®,Z“¦Þ<—¥>«S ­?'Ü‚ÈÕ"‚‡TdÏʺ£÷è]0?ŠN9sa¬ªÖ¿ûW8ö(;fv`çõ…L±¹E†à¬ˆ3ûb%pZ|™û;¹~ Œ>e’.Ö6³±"6$ >ƒ@Há„éB„Þýêrnu=¯q+ʳSžhÊçK:ßè»,ïØŸcj5÷v<¡{×;œñ-EÏlº#^¾Y®æÖ*úÍF«óÚÖ<ÐysæP-"–tl Ÿ‚Ã×e¥ N¥t¹ŒI'cR”š#9~Ìë #PæíÌÌ>vlë^z-ZóSãFô9˜…£šâ\¨#cjßcB».üÒ£-CΖalÿòo>Òã=n‹È³¬ÜjM³ÆÎ˜ú‰Uë0‰Ö™ì¨Õ¯6—ÇÎçjtü±fzqÐýv™ [}©¿`>­âS¨É, Ó N>ÌŒ²F=ÜÜ—jKÓód>út.…­¥>ÉŒ.Ìj0‘ná+8\v‡ç5Ä9¾IQä¬IËqHåúr@æ7Kê'ò ÅÞÑÚ°2Xtd4¦æ‰WQ™«:ÕrÊßÿÏ£œqÂ)ú “µcÅ}M\i~{T½s®E‹CxoAfOã«’½©¢ÄÐÝlLå”3WÆÊj &ÆÌ{+“øJfJñn¿³­M1f8Ø™ @²íņå ct¥»Œf{ɇlÜøô“ áñ±8Vm.Ò{³ý—按ÁÞþ…âÉ-Ô—)?T¢Ë¨òžU}ÿeäƒíŒê0 f²¹eæDc–9U§/ýÞ«¿Š,eÚ0qÿtÊe3ãᜭüùˆƒsó§º K—®ãNÓÞtX¸ßz¹¤šÅé­a—ö1n§•dt¹Ìí—î†yãÜ.=±ÏՆǚæe:ÓQ'A·ŒÊÓ¼dÿŠ‹¸ŽÄýám¹Øtûó+XªoÙœ~dñ¢sTm?„¢Ç~¥¦½ áAü§Âb‚µcZÅÁ( ±HCÚxqHýÊ9|Ò0*ðø4¦ÜkÍœzWéåR•銑ìYýYÕ × Ëi~u8ãŽ>ã¼Ɣª·Óaÿ°}@‰7WôÀ©=sò‘)–2TÙÊP>›…¡uÅ¡)C8–cˆ–Ç®<ãv® ö­”+Õ–U±)üÄ·ä€Ôy(ÞF²Ö±3.7ÿàNz'¼•¤ŽOO:¯HCà68Ü9ÆÎ³>˜šËÐê³vii:ýwzÙ¹q8í$6 ´àÈï«póµÀJ%Ç®ÊT6þÚŠ|VB>š™ˆ”sïaž_Rʹ/Üo˜R¤dFRѬՠ•+¼ya–…Ì–©OìE~í±œ—•z2¬mqlŒ‹ºw–›ve(å¤xC¨Â¼ŸÙ‡äê©õãú±§8U)žbÊwuà}ir’K¿VžÚ—{UäΙÆHœ%öOaÔé| ó#Y®,cÑ«F ¬•>I¨5÷Ù1w'¡ÚðSÙô"¡ê;ø/RÎ øÚB ø„!ºèƒB @ B B ÁÇDŸ“ò·©;yœ0ÉDŸ“²j7þ}×'Õ\˜P•^»#S=B㱞™[ÆåLüئÖìžBùú“sé×§}úÍ`Ï?¿Ó·gzô̺[êÄcB/¬g»‡­ÏuŽ>Ìaývô ÏcêsLN]Ï­(qo…@þ 9)/˜ ©ä¤LAZІ›ú-×ú_Æíz`\¦©˜`|"uû)•Ÿc²+ÅžîàÜÅ#œ²jN#““œ|’4EÎcÒSM”ÛT†lzHà£m ﳚ{±qeÄ嘜ÅÚ+âÞ~ˆÑª_2òönÖž|ŸßÑ`þ<ºÌÈUü¨L 5E›µäG™~.6ÊøéØ±î“¨:¯$ç7äO,_|ŸS*\Èfn+rL |ñ¤œ“RnfKZGµÎæeƒ >6¹û½ÑšÏ ÃøÙ´Í­ˆKQ?dëè9ñ8ÏÍÇžôô«I×¶¦˜™˜ ÔDyå³êÅ}®8ŽÃss6Ìã´)UDŽÉïH ô-ÖwóÇOaÖÏÃHÃnœèä3ü ÷ÊIiš£"Ms$¸5]NZP¬ŒÏ•X\7#Ñiœ¼˜Fg†Ñì`K-€ßÎ^Ÿ™A³¦Öxd¡×ŒÍt ˜B¹éñ} "Çä×aàJeâ\ ½'˜° â[¬÷ÍI™ø`Žý…cµæ1-¦+ÊŒ`ÄæôÛPžõ­³¤Ð ¥åÉú!ŒØqM™Álþ+3\f’6­ $»È1)<ÁÈûå¤L š;¿·£÷õ6lÙ]š°qz#u ÎôI®×ž ÎÛïš&™AÊqnó+åËÝ_{K‘!'o®aÜô{ØÉtaÆ?ú¬ZNoAæÚŸø“oþÁ_ú“730,>Çäâ±ÉrL¶’¡ LÊ1©¹½Œ!ÉrLvJÌ1鎙È1)âkäó=Þ”a_y&õý1^X/o–rNJ‹ ;xÚ“òÍ_ª kƒ!´É x¿oÌÐ?ÿÎÇ™;Äe«–«Dw×dQOfkM}ŽÉö44Ê1Ù¦O’ iŸáœNDº¨P\©F]‡¸þUîÌŸ€!Ǥ&Ì–æËgRß°P·y*ºŠŠöÕß÷ÊI©Õj¿Ûœ”Æã ôûÆ9)ÿ\»Jä¤|±èsR¶i×ñµœ”zsO¡{-rR ‚@ð} „Öçkÿ<ïû,Ÿ©¹Ëš¾Ø(!íedÇ%ÜÔ¼Q"~‡°âb´¨1!_y¯A'ÿbõµ`Ìßëìb zú’pCPKpP)-óü÷ƒôŇrcçï,_¾\ÔÁ7ÏgyŠQ¼xq®\¹ò‘ô!˜3'ãÒÔë÷¼ …\?Ó™LBžò\™\Æ+__¢eéÉU¡1i5röïÞþÆq§NµJðYpuuý6â¿„WœY>—}Ïåq•$?.ŸÓà`=“ñnÉ#-ö•zѧZúp¢95{$gâ¹¾o0¿æZF'åYvŸóA¥”}’›$|WÄŠÌ‚<Õ[`¥óäºðâà.ÖìÇà6¹t‚¡ÅwÏx¦½jÇlÝk¹FÒÑîÃâªèK¹`I¾êf”ïX“ÈÓû9iùœÈhI'f¢ „@|Ù!‡ Ž9 áhð|Ø47†šýêP0ŸÞŸãÉÊPŠÔª¢{mù¯J×úø¢¬^ŸRf˹äÔœ1U¨ý®sè”Ïý_ˆ$ø¦‘*øh<·³íiaÊd‹-(ùe·Giê•}‹8H„G™cišò(3¹scFu+eœ¬ í‹clpÿÆ¡FG% ñ !Y¥néLhú3£Wîc˼U„4ë@ù·èƒæù5nYç!WJÎ"ïrò„á)J”çñO~W9|чמÞjñ{ëæ,¼ù®´Ðþ—w²aÃF6nŒß6máôM ÇÆrej~èº oõù[<_ÛŽ‹ÜØ8|[«…… ø‚⥠.t˜°†Ýþ‚ÃÁ1LØ…“šÈÔZB)„³+waÖ .ÙR˜¢ yt_7]%&¥ï²Ëú©åW‡f1÷T¨a?Ð} ¿/]ÊÒß÷lñ‚õ3ç²Dÿzù>îFKøí›@»Õ)Q¬:­Ú·£í€¿ð2µEÖŽ8:Úá½~î§$*Š_Aß¡4{†É7­ õáE˜#% >fL“ḽnˆèƒøOûþ?b}.²iþLö›weåÆ<\˜ßf»k0tBoªe1 ´Á\[9˜éOš²`Tæ8¥TªPFùñÜ7ˆLfvÃhçò†d*áÆ_"“¡0Õ»%Ÿp1É—Ýÿ¨øyºœó'î#s[ıLK˜TIçúT¯A“¸˜ŠM=gp¶Ym:ÔÇJûa”˜’E«;â`È]ÀÍ‘Ãx2ù ­ …ðl±ƒ.„RZþ'nkØ{OƒÒ¨ÉPUkEµÀ«¬ÿãvÒÏÐh°.Þ„ŠQ{Øt)„×çÿH„œy‹èì­R˜J9n±ù|—oC»riEž!ŸG`¤Ð»Ø´· ç8{[Cñ¶CY3Ñ•ô:ÛùaY)ªmšÀŸ[svübFVM‡úѦXȧ6L›ß†œ á…YyÚ·tcÁà^¬ÔèZ>™å»å0<>Õê C?aK?—MÒ¨‰µÊ¬ÛÿtsØ4÷ÿâ@ú̽6“&;ê13“–È`üýb#)°)ÑÝvÞÓ’?c›˜ùÞŸ grfÕç°÷ÆëeF e”ŽU˜X`i©E¥Ï‚­’Ó–A÷ÔÊŸ,3µ:s–)¡ EÉ|Ð0ÿl,DÉR™)]ª’Vƒisai^½z1sæL¬¬¬¾/øPdÖy([ª ¡Î5è]¾Y,寤@«Yl(|{Gƒ§`â\Ž6ãK3,oº×:õÇm?•í Â0›SÂ2wJ[Ç•+ÏXõlyvë „äÃö‰«xbþœ^ÓB轡6v«fð’/”†ß§ÿ™úßZjÀJé]íCþÞzëùtÿ)jÌâ÷6Ïy›‘²z{U{óX“…º&q‘fÆr-i[.©_ãå»P5jI«Ì©E¡TÊ™Bߌ¯3¦×òQε˜È%ð‘ñòò2ˆÄŠ+P©TB Þ"Ø«Oó·üݦ`eÊ$ö¼Ø“#Ÿ¦\{~ŒŸî-w(D[5ÞúT§gOÍùnú»SÊMã§LrîÈTd°xÄ®}8Ä`ZÀž÷dd4%º˜ °øb:_YÎNT¾Š6òÏü=9´ä7n„æbp,Ù—,Á§zGä7{-ü ¸Ê–Ö5ÙŸtB«ÍÄÏ¿¯¤s®¸õ4‚÷¥ý’[(•ÁxÞ #}ÁL˜h йG´½u¾…ˆO;wfÕªU†éÜB ¾KTX†îbúÉøetw}2Z}Bãm]žB7w’aT ®ŽPQÓqwC¹{CCÖܯß^™yM¦mÊG¨á1HY\jJ¼ØØ—ßÏüH}@ÈC¶›ÜRvfÍÑ©”6ñеMkâ™ø8G†míI쨭ÛÞN[׋ôÛ4•Rúc_mä¯Ñ§¹Û²bí›O‚¯¯/C‡eΜ9ÿyÙå)Fòþƒÿ÷µ œÓ[Nb‘%’«×”QQ2ÌÍeDzßà~ 7Ïxà{‡›Ïcuí»9%™B»\I-Š6à'ÏÞÅ/"J÷Ù¸-"< [‹d‡¾»·ñ°b]Šþ›æÃ¶Msaý)±Öæ§DïÙŠã»Å’ŠCWRQ¿ëÏÍ#›ù묌ìí”\¿­@©_#ÓT…\¡Deìej¼Ø:¢·ƒÏ™µÄ€"I´Zs¬“Í`—‚1eA0í7º¼™Òî-DûÝá˜Û~޾(H·uY0l!×Ë %½ûfÎ¥i@Öâ6~$˜1c†ˆï¸}Àk×TfnóDJ_„ªUd<Ò¸òs¶Pö9e'³ÿ2͉»ƒŠ¼Ž¹ÈMrÒ|òJúßíBµKiÓ¹x²®åÑ‚?X—ð2ò6Ë;öåöÏ™•ûmñl$NïÃíòmn^9Á­’• ÓR½Vú7ˇƒ‰+ «Õ¥cg¦ç^ÊLEqêÈ‹BÜÈ"úNJSSS!ß/rr× ÇœMóœMí›cÚ}…d3‰Ö:Ñ|Î,¬/°óÉN6>VRÍV9ÚÒfKühϼ«8Õ0Y‘Z_ÎmÚÊ~·—˜·2%òÖZúw˜ÄÝ:Ëù{@¡Ä§;ÚÇ›4`GoeehºWà{ù0·4Uh:¦3²['3~ JÜÂìñ-è4ã:ÎMň@¦L™˜={6ffoÒ HZû¾¼¤µZ‚?Eî쌵ße{g¤z)ýôu‰Ð[‡9S”šÅÞCù#p_3‡c²ªüüSy2ÊŸqõ(‘éõÐ"úg=Ʀ¤ Óš|àoåÅ™=xdl@•l¢-úÔüIkÅ]û ½‰4YãvJP3qñ ÖkP÷½ËѵòíÇP*©=¢XJKj›fÃ¥v¶ù[Ud(ׄ â¦}ŵM „@!@„@ øøˆNÊÿ‘ÕZð¹Y­¿Ó›$â+d§ ¬Bð…bC!Ÿ‹ÌùÄE|‘D<õø¿Ë”@ÄW ªXê6 ãÍD¹ìlÈþ–QÐ §L,®á€~>eºB¹™]Ô,õ/SQ8—-™ã}K•=u…¿«¢(Ó81¤œ-¶âV}[õN\‚¯ÓQÍ!iÊ“uF'\b|YqÁ©dFœN‡à“z;`g&3¤Ë×*”ؼå®Ë,íéQÞŒe^Á;5-´X;Ù’-6SIñßiîÏô3¯7P„àc"áý(œ4%Ò¡ ”áùœ™Þ68…¾àp€)ÌcðOö•)…3™0–Ûšan!£L6;Ì”XË­qÉf¦ÏdI€_0w>›.—=fO `V¥Á`ìá!rÊ—tÆ4—Ö VQ/_²ôn”Npä¤w’qþOö&Ë+!3wbnMᢠ|¤Ñ†òÇM%à ȑEÉ )çe60W’¦œ3¥dJrf†[âfáÀ€ »J´µ•’ ¶¦˜™É1“›ÑVAÚÈvûCïÆ-Å#3³£K! ›·…qG…§,.._"Ñ™A.iãïѢƂú³SX›¼f™“Cò5L|t'"†;!¶4Î'ã±,2S*…œ\…Òtî÷Ò(¹øÐŒ¡æÑ\Ô‡úElBØ}͗д&4´`ûµ¬¤4¸(ýÙv-†œi霨?f4ª•“†&þìÔyj•%m*§ÅYz=¨E±ôt añ¯5šhÎ_‰[2%™9­¸„FÜ9!‚ÝaJ…’öØGjÐ/ffëÈ6ZTš¬ôQ½bÞ%Mò™qíæ+Ÿ2ÄüäÚËL¨V#­£9*H±á¾¬ó’gzQÇ(%¹*…ÎkÉbKTr%P™c§ˆ6T°hq…@>¦÷ÍI÷—å´"­Þà‚Ãx•;µ½2÷©ÎZå6(¬Lqˆ‰äŠÑb_J§ôLn”µ©9Yìì˜ÑÈ•¹å9˜“EÂÒÞ”à3qÞÉ™3w¸iAïæ6ñ… y2Yc/IF“21aøÆÆ-G¨‹qô+q©5Z¢“/Ã)—ÐÊe¢‚ |äV´*mÍw9ŠhYi|MHçhC){Wü“ÌYíû’Ñ;õ!FÖ”‰`Ø^]ˆQ$S•^ º¬ 1\ %†‘!ÑD*,ŒDI_¬»d®ˆ:B“ôTBŠåàÑÇdTì…s2úrÅÐ:œq¢CÁWZíÄ%øŠÐ¹óé­•$_nÂ&«-Ò­²æ³Âä?ú*™Ò’ZY%NßòeWü¶ç©œ*y,âZ]ØãZÔž4rÊ—±Ã$ œ{!&4v±Ç$(œ»¾áxÆ(É$VÝ!øaFg<‚yàûŠƒÞÑ$<4™ÙÒ£¨ÄÎsO9d–‰.q bõO8LLÈådI{ff¦äÑíçÒ Œ¹•y,Èf){2Yÿ°|Bã7÷Ði“=3ýs(ˆÔHÄÄêŸfH¼¼çÅØ+1X˜É[ÚÒ¹Jnæ7ÌLA±€Ž1mÿ¸GnYtn{ª¦×zXZ†–uàÕ™{œÑ÷žöÁ¥Q^zž¾Ç²¦VVTÌ%#BgÖ‡_((ŸË^¿ðgÔVTÊö:1y’¬ÅÇ·ºSGÖ°$1š1µ £ô\çÉXÑ®œ>ä¥ÖLŠ˜*°Ð©Ç³‡þŸè;#õ‘ “ ¯¶øF/B©Tæ'®ƒR¿©6m‚x¼Ëƒ0zÚÖÖ¶–¸ ²×6ýÅ6ƒäâ „Bð)Cãzi,)y:›>i,©yÊ·„‰±eË–™:urÑ}¡Í÷jßã¿é_ë= ! ‚Ï) ¢’H$§«§!z›NE ^ŠøãµC¿)ŒÂ ؈ äkÓ¦Í'Q^÷¥–ß[ˆ‘<Ô09ŒC !‚/ÉÃ5 ]Ý  9ý×_ÍêׯŸ¾ó,aìCBh¡1 ƒp „,™@$‰„T%Ÿðy@ð…´kÆQ¯€J…äâ IîU(ßÑÿ IfüR !!|±!¥ šD!Å~ˆÔ:)' Æ@ j$7ò:ŒÅA…@ðy…!¹-§æI¼R$/LùŽ‚SrW4)„B ‚/S ’‡ÆB¡MŃxc ””,ŒH8@›ì½”„A„Á—f¤&©…RJ!F‚P¨MæU$ï”!|Ù‘< Hi_JÁy#Ä%;Pfô^¾6_vÈ!½c#%‘x›‘šXŠ8¡¾Ü¾ˆ”Ä‚·‰CJ‘Z˜‘¼Ÿ"¹q¾l‘HM¤·Ÿ8’25dïùž@ ø:E#µ÷Rõ Þëƒà›ˆTùŸ,ì >Ò°àJ IDATxÚì]¼ÕÕ?gß‚t°ì5ņ"Æ^°b¢‰&EŸ½¥¨hÅ^°D£5Å‚ŠJ±V°€ Ç·çÛ™·;sïsïÜ™}ìƒ{ø owvæÎ[ÏÿÔ<"BBJ|ƒ#GŽ9räÈ‘#GŽ–9Q’‹ó)@ Ž9räÈ‘#GŽ-çà!o¸ÏèÀƒ#GŽ9räÈ‘#G-P‰g'æ òÀýE`p`Á‘#GŽ9räÈ‘£Ú Äüµ  ºÃGŽ9räÈ‘#GŽj0æPA‚ò 9ÍgP>;räÈ‘#GŽ9rä¨6@‚  šÏh0jD` :í‚#GŽ9räÈ‘#GŽj(Ê# A ª¯꼿#FŒØ|=ö¸ªM›6½±£k{GŽ9räÈ‘#GŽZj š¿hÑ¢WG}Õð±Àÿ @âg,åQàLÊ ¡näÈ‘[ì½÷Þ#‹×vvÍìÈ‘#GŽ9räÈQ‹ ó^~ùå}‹ôQñkcé(k$ -Béo¾¾¾þ¡víÚìšÖ‘#GŽ9räÈ‘£–M ÿíСÃñÅK Ð¨‚ÎGA umÛ¶ÝÓ5©#GŽ9räÈ‘#G-ŸŠ¼ý^%>_Ô ”1@à£Ó€ÉüÈù$8räÈ‘#GŽ9r´|P‘·o¡¨( jÔ"5ÒQkNGŽ9räÈ‘#GŽ–+ªƒhTS I£ GŽ9räÈ‘#GŽ-?›ö ÏÜ Û ýÙø”ïÒôˆù•"9¢ùë´WÇÞ-#šØ! KnX$&1RVóÆž0ÿ˜ìþø{¢¿¡¶ØR°éfŒ-ŸDµ<á{{Ëß1¸¥g`Óµ¥óÚë‚ï¥2ƒª SgäëïÝDbU™>°hs›)N¦µƒÔñZúDâg × ×…ò3ˆ@ºÖªV#Ò46„Ö/ýW¾,è9”ÛSÌKŠ­uÒÙI‘â¸uŸtý41I}×÷q5Gnà ã¥ö”Z¿4„>AdDzø d.È1Í™ó€ö'eg+³"2ι¶ŽÌ)æ…0—ˆÂy¤ö©÷Ê}OM׊sФç‰ý_¾Vžà$}ŸÅÏ{«ñC†Aº1G¶,Ù|£lf¦£ÔFM•§]ßµ›*Æ—ƒbÊ4(H”7<Á:™Új«®š!“_y©Êw”~-@¡Ì*PÕ€BÜB  $†CFDfnPbäEF3$>£LޏÖþ}1Å1Muþ7Í6L28™Š€‘ \%b,F(ò«n©…Qù/êíˆ6l|¤!©šKÇ ‚ÜAL[:bĬ7ž2§B-Í £Üæ9ažT&J] ÷!Ó/ÆA#îJÜðã—8f–xÐMê*€h $(åSˆ‚ïDò“æ (€(p{» Ž¬ØšZ ˜]iˆž†“X |ûíW¯&  _«ðáï:ƒiª`Ù‚)©¦ fÁ‡÷1Ù]˜jꘘ7ŠLº»™+ˆò<”çrY²I/^¢‰åç•æ*ÒÊP«PþL¾à é:¯ž9`ø¬òg‰¹"‰3Ecq€-¦³i#ß:£ 16¯IŸÍiD¦Ä«X7d×÷p,EÀjF'Æð—I—Lªp§"~]%†ã#àûŠ®ºås¹3¯ŒÅ2ã/¼g…Yhä„P†nÈw$k³k¤‘qc íûƒ 4)ˆ„%…S'P ùwÔj(R/ H`ÆiÇšªM #Ð$–J´ Ùb± tËŠ4ÖWR•rÐ ˜ïˆh%¢Öäˆ :mæryEAÊ¢ìmG+"lA‹‰Š 4>ƒøC¤0åÍ Åy‰>þ ¦üŠþú@$pûMž ü ; vš€Œ÷C6B‘È”?†kZoy” ÄI‰cLEe H4s x€`…TMáI4ßòú Œü®$°R ûÚ© ‚²Ù,Aé¥Ó‘v·äšPsIiÈ1ÿ‚kK ©ojäϸ/Í;¢4Bà@#TØFÙ\ #ïÀÊ]K˜u&Ýn5cTk^$‚åò«Ùm ß䎹Oxïh9÷9j¶–G›Î1jò6½‰âòFe‰)³½ f&åwäHÝD°YïOsIŒƒÌ’d¿L’€¾Ä¸œ# @>ó2ŽáfLÁµeF?M÷ ÀôbP ý 0ü^*YeÀ~§A%’93 ;pRL{Q©'ÄJP“€•á³a²MÖªP§Ü~’€;ì{˜X"QcP (¯Ä¨{PPx~Ø>ÒhwTái]JT³òœR-|H å1«‚q~4Í…’&AÀ <÷¨s@jƒÀ¯GÔ8ƃá,Àƒ ‚•ú ÿ)xHÒ(è4r¤€ó@K ëŽ8±?c’FQ3RëAÖíF¶[eýÖLÉ‘£ŒAZ /¥“G4BEëÈ‘£Mäv3GŽ–ß鎕ÜìÈ‘£å‰ò‰— BÖÖÖñ Ž5©Ÿ$j LOX6y µ e韯=¤ª’žP4'"USB¼4”8©oÔÞu–»&‰½•Y°ÎÞØlãLcCúºPÒNš‚P6*/¯b±¬oÅâ¶#±m\ÚŸùàÎ阴¦¬‰¦ªIÜAÃÊHf{’EÉíL(ìkåyCMó‰3¥ •w±ÌsÔ4/9ëmtQÐ¡Š´97ï)~ áG5ZQ¹€Òﲯ)Òw“A8rÔœò[Ñ@¾’Ò«ûÝ0"a<§‘àYZÆÃQÍ0ÇZ>Á°* t¤@‹grŒêÊãí—Ib’QãSPb14W"Ñ©¸d»Ž‚¹Dè^ –-šQÉ?$WëÀÔ¨l_6/B…™«‹GA4™AÁŽŠ¦ A²¥'¿± Ëw2Aé$ÖÊáXˆ]"P ï ðì$!ز¢TЏý²¬·ðMÕ)³él¡4NÊ\rAmZòÆIÏ"+Ñ”ÚÆÒ9 }kB’̽‚¡ü±ÜôUÒåæ$yïb£d©aŒ9æ]^XùŸSüzPö‘lÞƒ‘1CÊ8’}äq&90CÔ´/R&|jD¡úºX†ÓÕ]\‘s¥ŽÏŽjŸ•n¦ò°Fß'9PЬÓYkÜôr´¢ dND"¶ˆŸö(OWrfF,€à¨\â6QdÖí ˜%§g±ãd%¦JÕ;çuâPÕÉšczxO‘NËá8eÐ0®$¼9qu“™rŠ]ˆ1"– Èu=Î%×XE'ƒ:Ž-6 µÝâ{˜¶ ®UÀ@î,ãžGÊïºè Eê(EF^’*˜$5QCA:™?gLºFù"0*†Òí¥:ÍB0ÇixTÿŽù')d*òc¨ Xí‚ã ­X …2./=¥Ð( àÙÖ 25´’лÅÀQ’1‚‰îˆÑ,°ê”c5 Ân„,{$}ðG§Yhº€à;´×(º MUšBJ`A<‡þÓFaAŠ0VE ³œI¤ 2±Ä1pšN#“¦Hã¨Ì•'IrQa:TÓÀ1X6U•¢ùJ¤*˜|!‹(žsÈ,›» ToñE§t¹.•ÆGÍF£ KILOR4BUš=AÝ…Lm\n[,i D-N¸Õ•4q˜!•2þÕ¡Š ök}ä4ªÚʉҸæó¤rÉÍdЦÂDRêDÃI×RôZbŸ­Ñ<€& c?Q°‹I@L"Çû8Šªh·† ±œä):ó¿K†K˜˜$Çù=8rlÙD%ˆ‚$FÑ!ÓS Š€$ÓNr:f˜Ô¤UËØ[1Oæ$ Êí¸lTóQ%Q³3‡$!VâÐ%Å ^ïǽƦm¨Y†.÷Môedü’²RrÎõVÞTK™ Ò€A-ë‚+>"Œb!2µRµúÃÞ‡'2ÏàFBÆ4b#!…¿±IÕXàa(Ž¡vähYP¾9ñ;BÄ¡SYø*¨žŒ¤fIp—ógXv|t¸¹"˜ÔþvN Š]³=‘šhL§YP)™E]"i C¡`9„)Ú=R4ᵂ«¦¨Y€Ð— )F?*¶ï²…XîFHMBÇlïIÂÄS<#N ÀŸ\JãhÙ†eíèÖEÐâV5éºGÍ89µ ªŒURCd€GÔä+ðÇ‘œ…Hj_Ñ!HºQ- ØÌÛ‘D˜Í^bÈÑFdÙ,溪ɑÔÔè†ÌËåg5 LˆÖ¸¤j: ]_ô«|e“Ç…Cm9„˼|k^SÖ»BÉ»P¨f~à à 9Øš+ƒaÏ©Ål‹˜Á5X…¾Nx x¿qßÒ0.¤!ã/j"¥¡Ì¡IŒ gê¢%^dŠ´H?ÂRD;Ro6&všþØHN<£‘d÷—sMð~Ä$^¤µï–…)Ã3A0ysÌ„XK£Ùa_— vÄ$Ò, Ê†ã: ßOÍCÔ©Æ×Ä8 ËV°Î¡áâ¢qóŸ[BFfá?"^;dʼ¬Âf;§bÇ];jÙ°„šå&fÁt…æíŸ…Š´ÂðŠÂ¹¥?×dçÙ¥«x*MÖüðhEŽw-û`V÷S”_@u³#)ÉŠä0£QF)d€Bí€àÔ<_NUÖ,”vÅ焚 üÊZ -㱑‡UÄC2vä‘ÕüH&ÕB‚HŒ¹ƒú}IŠŸÇhzoE£€¼TYŠx…Qæ [sþÑ2Gš&p Ð_‹|߈I}V£€i権EPÁù„+Z¶ˆI’ Ô4¾"dÚ÷-'VÔ1úŸ4Ž,@·ÉßDŠT¤AÒƒÒU“@\Â:ØÑ\l B*ÚÂYv 8¦™Uå­¬MéÑBjX “É}–¬Ðœ^ñ´Î:ëÀéýO‡¶mÛÆ^ë]sëm·ÂݺÁZk­C†ÕV[-rÝ~ûïx t®}ûöpó̓`5ÖhAØØQeí§fNÙIyb“Êe‘àÙSŽclÞ!OÂß2X(;†öÃM‚€ð·ð(_|„0Ì¡þZå°ùg(/0a Š?@xgáW§À>šy/‘! ~ ¯“žz°í’¤U=/÷Y¹ÝÀpð÷Ëõ¨Î?ý¸‰>4m ¹Ïöˆic`ÚX4— ÏkÞ…™Ʊªé30Í õa‘~·©»Ò¾ !(2\›H:Êë !oËk¼ö•¿a••óî¨ÆËáû,k ßÑ¢Á£11‹…8#blZ>ÑÃVP°¼{Ïž°ß~ûÁý÷ÝßLEÔÖµkWÈçóþ»Ê*«hÀÇÚPWW¹\úö=ºE«V­ wïÞðóÏ?C}}=,Y²þõ¯᫯¾r<õ Ô™m’è~ÓI âÊwäÈ‘#'r}騹Z½%ô‚=P =c¬ÆÇ^žÈcæ÷Þ»7 þ´Ï¸Ç6S±-¡P(ø‡÷™S Tkùí7rä‹ðÊ+£ M›6>`¸ÿþàÛo¿õÃwß}çfV‚áiòT?´“$c‹3Aò?F|ze$ñ·8¤¦S˜ 5™…‰ÕD3Ž0!„¡K’A)ƒ³’™9ôÑä^BŽïNˆ†ÆŒ¾‹­„ÇÆ‘•,~ä3)óæDqŽÏâµYZiü !+QÈÆ,Ö¥ìÌ\¨Ý„òœ5×Z 6ßtsXoýõ¡C‡ŽÅ£ƒÿÈúùõP_?fΜü1Ìž5‹ßݘq˜úU—¡9³6f2ƒ‡Q„Ã6–̽gç W‰!›6jÞ­™R–ï®my3ȹþ`£ƒ1QÊm!™à/¥3õS}¸:˜Ì ¡“£*9!»èMË”/¨]Ô„gFË«ÐX>¦æÝPŠÒ™g Ûl³¿yÌú~ûí ;w†ÝvÛUºÎÓx þÐ!CŒ „ þïØd“Mà°ÃúÀÔ©SáóÏ?‡<Жwþøã ,ðÏ?òÈ×!n±‹ðf(úˆ‰cË{p ðW(ƒ1N<ÉÚ  s£ŒfüUÀ€t&Â5e³¸[ ƒX'Zæ7@°aZÓE;ÓûÆNèxdîô‚™n[n ½öÜ º¬Ü¥f´âZ3oÞ\XP¿Àÿ½}‡öÅ5¯ l´ÑF°ë®»ÃܹsáÕ×FÁ‡Åõ*¶MÈÜy¤K ‹´0j« ø2K>7Qf¹”ÿ„Íz­ÎKMè!ƒ®1ªf¼€Äa w-&˰ïdò鉂1¯ÙVÙqÔŽ-SJ8‡æ7ŸY)¨¼;ñ<¼þú¾F`ÿý÷ó%ýÿû?ü…¯OŸC}©ÿ 7üÝßX~øá{¹-qJNuêÔ©8vƒ·ß~î»ï~èÑ£¬¿þú¾oƒ–.] +­´’¯‰Ø²¸™ÿú׿†ÿ ª¯¿Xw5^A4b•p?ÑŠ¾G.­fÓ”†¤l‹J~â¥ñ‘Щf!A9‚ƒ³W~®$%’£#J±’Xmš´JJ ™_²Ä•°‚ná@€áz­£­1¼À©×‘£JéÇNP™Ö%¦ 9W–Œ£µpªK‘ùïsØá°Úê«Ã›ãÆÁ„‰`aÃíõ¯mÛµƒî;t‡ƒ:zìԆʉß:Q«ÊÚZ•Ø›Û8¬Ÿ¤ÅPcFGbÆ£FãÆ&N³ i+e>Ï'X&ÀãAwÔ˜œ$ ÉpNæP¸¤j7dX*@Sæå$ñ½÷T7g;cšZ#ÖX U(ð¡0ÅèͯG2wÊ<?öÙgþGq?ûì?ƒ>ï¼óޝA8é¤áÅ_ô¿Ëýˆ†Æ@|µÊª«Â¸â={ölÿÏÌhÕâ¹}÷Ý×§I“šÊõ@Š&¾øâ ˆEìÙ±Òê¨¡ä… ˜Gäˆa4J‰–=}AÕÄa˜ åG pY/{TñæJ1À!†Ñ K¦5bXvØLÏJD# a\X2ì ´þúÀ‘G Ó§=ö(4‚H `̘Ñ0qâDØÿ€à¤~§ÀÇ3¦Ç¾AÉFC“ƒÅ+Ã4mÌÈTB jÇpœÆÍÄhU⃌&(Ó5?“”Mˆ”É%Y‘ASGN“àÈQU@J³ä ]ʘjSZç °¸PÝ•dÓM7…­¶ÚÊ7òÈ‹bä™$ÝtÓ }ÍŠ`ÂÓ,\¸åa¿Yù< þŒ.™ôïë õSywÎ…›<‚`6Qf*EÍŠYgIÎò œ9’\CŠäYÓዪu@‹ýŸœœè"Òtž”ä‰ ‰¯"åÛ8\$ ŠÌXå™Ù¦>R€Ƈùõ@ÂoŽ=^},Œ-2ý9ìÕðuR@B ÓVÌ–B h*Rô¹!y-“òÚ‰s¢®1h36 —`‚ÌêzýsºeËQuj5ÃWIP[öR?óÏDæÐšeË7WGäsu°5Âç˜cCà%anO9¦õË%pà%ÏVu°ýôÓOðÖ[oÁóÏ(nŠMaNG 3fÌÐÞ³öÚMÑŒæÌ™­[·–~ówÙe5jTä¾Í6Û Î<óA»l¿ýö0tèlùÑàÆK1úkØ¡}ùЫ„L –vSÑg€ñ[ ™1 ¤ÒVY0+ôÚ.9›r S$^£tëŒMB.õmæYŽÁÈÚTQÅR ``›ŸLmŒÐ¥K8ò¨£|3¢Ñ£_«lM/>«\ÆQÅ2ï¿ï^ß )‰_ Ù0q•¶5EжuË©”œ!¼:ûA&³½*r– ²“”|Q`§ËqcQe³)É{z‰í'ŠjÔI6+(kuÛ hDêR^È&º½z2Ò"J 2RÝ‚«{fÌïqu1þŽ dÞÔìždyÞ¶B_ Á5¤Žé;Ðô銃ÑJÙ’JÕ5kÊ'é] S31¸Ü¬Y(äFàÊðàš­àª®«A«ñŸÀ¦›lŸ|òI<|ã7†õÖ[Ï7»ØPéÇ„qãÞ [Ï©e²°-@Ì€ö™ü¢åØû<°IÙ4Q”Ôˆ7l¼Â¨®©~ ( I**ÎfERŠL’£¨*ÊlGL*È~lP‚>L2e åž‘*ÚIÝV;uy¼ Ïdk|i;üp˜þÅ0fÌVžf =Æ÷sèsØð¯°–€E ‚ñe*d¥“¶±4ó°ñbÆ*ÀáV=€f´‘Yû(hΰ˜LšÂ*&å)H«V™Ñ#I£@Q‡gžAá3‚˜ Á³ ¤U Eç  2Ó.>K±#“pAYûÃÒså6H6(£ ¸ f à…H©ƒáwÐèkJ»úrÌ™0—™4°åEŽ0Ák¢äD/qðx°wÙÆŽ}=1o˜¥Ð4-wì±Ò÷÷?øÞÿ Äæ`³Õ&$àÙ쮓So‹Xh„”‡[¿ù–Nø¾Xfc°ðî¸ãŽð@q³ñ@ÂÞ{ïí›Ûüîw¿ƒ‹/¾/^ ¿øÅ/|“ž\ñ!·ž´Ôµï #¿[¯YLï=pÙe—úþ ûï ì¾ûnðÜsÿƒm·Ý6ú÷?vØa¸ë®»ýsžC²g>äåUð´Þ{|ÿý÷þ;©—;Áû­|xQZª´ÛQsc “‰ääkÁùÒ5eÇæ á Øä`â8•’3i˜A9‰“! –z†É «b–+ù^æj}}ÿ¡•W›€Ù—<æØ[—²ê;õP_"R%IW Ø~ݺmY\{V‡çF<ï‡d6ñ<‰ê^ úà C¼  æ÷ ÛH}_å¤MÛ¤l㋊ý¶š(¼aÚXN§OÆÇÕKŸ8ÌIçÔR«eøNq ú‚6 ²¹bT­¼n„‰ÖÄu¥ô;¢¼æ åËkb˜5V<ÙtxÉHû|2 ¾÷xdȸæÚk`·Ý{–®ÿó5×\ Z¼æ^8ù”~оê7ò|æYüyá7¥îì=€ægRó²Ï¢ø;„¿«åHõ€hÝ…5?܇…rѤ ¹g©u—ëtÆïÏ€º|^>J˯ë Ñ:«}dx‡\‘;ïüóà /l±ûùoŽýu,‡•†ËÂJ„s¶Uê#E? ž]®½ÎºÐõëY°æšk†EŽ¿sCg$xN»^äŸ~ýúù`à–[nñ7ž{î¹6Ø`Ÿ©nbJr0âÎóá˜g;B¾#@ÇŽK Çv‹“¾H¥YÐJ‹ä…B=ñÄaŸ}~Ûm·bŽ8âH? Úo¼áƒ˜aÇ?ÿù/ðÐCù!Mo½õŸÙ?õÔÓ|³#<•ü!CýlËž’÷®·Ýv»ÿ>°ð¿Š“Î+Û3sòÚä€ðµ*IPqÍà„Ôû¥‹dÄkìʉ^è‘ çZàBcjs-P(ws-Ÿb ü—r0P$&¿ÁÔÅ ©×j* %udÓœFé¶÷ýλGÅj¼9Ú§O8äÐC¡SÇN©4iÚŒU&ï†b2cZÛzíµŒ÷4(‚Ê <Ÿ…7ƽ{îÕ ¦L» ™L¸åÅHÙÆÝ»ï›m¾9<ûÌ3ðôÓOCãÒ¥l?öØãpÌÑG‡¡…•)æ^RŸaüvLÄ×Ï4?’w`f€¿Áž®Ñ€œ>è9¯BÙ„Hp'É<’¢š—r„f’#µmÛ®x-|ðÁd¸ü²+`î¼¹°Åæ[÷ÚS`“7ö¯é±óÎ0xð½ðÑGú‘½¼Ðã×^w-\ôÁ‚… Š‚i°DJ©t¥”º$ ôU¥£‘ò,n!C™dèp] JÔìß1î†^(wOø9pàõ>ß) ™2ÕvBÍs¸R¡3÷ysïÌ3Ïô£JêÖ»î¾úŸ~F³k .¾øBØu×]µ¿{&7ÜðÏàû#C†¦×x ÎO-öjS±À´:áhU:VòŽVùŸF<àœá–,]¨W_är¥yVü›ó’’q‹U¾X©Æ@Õ±Möé¾!œqÈvк]Žß–ïÏ-!ø¿Ü½°ý/»ÁíÏL‚çÞø ú­Ëµ2ÌÑèLò|ú¨Ij§Ñáùž={úíá™)•µ žï‚ׇrˆ’uøðáíC q· }¦º+a9çh´¸ÝपNruÎ>ÊI¥D”  ÑrPû*h^Pš˜e{| ¶úÅÖÅ ¦?Ìš5Ë7‡¼ýö;à裎ª PÐ14Ž!nCñ‚/œÔ¯ܵ /öïþðû"ƒy*¬µæZp÷=wÁä"ó©¶ñc7Ù×cç¦HždsKs $”™øE˜6Š0p$id$FºlQR É‚†Ä„k¨¨”žþÝñÇû»[o¹U`fÉÏõqã7ú× 8÷ܦ ‚ÃÏ> æÌ™ ýûßñ-¨XóÇ´ ïË1÷÷ß?ô;±ŸÔ ÞOsçΉ†%fü²!mu•FƒP@õïÁtóÃâöØxÁ²r¼sbLðD©»ê^R.¨ q<#è­ ’l’s?ÂN;íÿøÇ&Ø3Ͻûî{ük|S]eïyæ™g}S”(˜k®Al%ð¥ó+¯¼2‹î¼óýN:ÙÿºÚj«Âi§Ÿæ›$:Ô;×\ó7?§Òµ×^ç_Ó·o_ä\?ðó"¯“ÚsÒwÔ¼WéÚ€Žk“"yyTÞ{ï½"H»IÿlÓ¥ÖϤ9Ñh*þö·¿BÇŽ›DËù¼oÍqÙ¥—âE‹"á¼óÎõÿ®8»JÁ©òv"IEWoë`ø“#` ÇýæxaÜ(~Ñ%ðñó·Ã)¼v=òCXyýõàÉÏá uï…6kœ­f¿=½Þùóõ°Å“áÏ{‡¿ülûÃWpa¯Ó ®u°U–æò°íœ»àå÷¤h0~ö«ÏÓjmd“èB« M#žÇ”÷­8Ì4·é'cÉÊÑü(*äP38³…!WMD¦¨²°)"UÙ‰Šû¸Rž ‰ ŠjfŒeš0ãÜIÀ€°1¿Èå`¿ý÷‡cŽ9^yùe8çì³¥ ˆ… )BwòfY¼I rI±Õ‚ Ö/®¥Ó¦}ž(ŠTBœà“÷Œ6Þ( 2“øVdÊe ððÈ}³Ó÷è¾ðÿ >úùü M¬²Ï6 4ͱî¨wlVhû¨GÉœü´ ÉÑÏ‚„c_P˜Ë²Ä_õ‘-ÿWP¤ñ¢QÙÿ\ÅB"žÄ}õ5`öìYáð‚žèœe¿™5 ÖXc QZ °mD¼T¾ehUü÷ãœý“Þ_Áþë_ÿâ…ƒ:ÆŽ o¼þFpûÐ!Ca«­·ŠÖÁ^ÃÀ± œI©X©b€‘Öà’K.†]vÙYûûÓO?ƒßgÉ—&cùјß+c Àñ¼iÇ+Q#týþYXÚ‰`ðÃ×ï‚{¿˜{.þ6ê¶1Ütë“põ   °R˜¿áÒßn óÞk„±ÿzÚ·]úr,η‚%K¿v†¥“?‚Vkmû|õgxâƒE0>óLØâLXf„ùÒÜW%@á´ 5#_C§J'Ð"§)ö»š°ÊȰ`ü褌‡%YdfÖe©ÝdÓMáôþý}`pÅåWÀÌ™3!óxéÀ’HoÃŽšÎSãÎuèÐæÎ—04-ÙÈóÅêè9Ž¥^m¨ZË•a)\¸p<øÐC0êÕQpÚi§ÃÞ½wß}§2‘H“?ÁBãfªD ´p‰šM—‹Ï‘ (L2ñÚGUÎ@qf&s­<Þ¼¹~@/ !ËðjšÑ3é-û ²Œ)æ$w]Ü9³ÙMéœgضMÿó¶Ûnã']U¯Ÿ2eŠù¹ºú&á ãÎkÞåÎ;ï²gu(þ:R‚Z„7{9©Œadk„<'ûeÇãeC9ûjEG¤9ÁC”~Æ:èõ‡» ý¼YÐöçoaí5sðä­¿‡vùü¶ïþpÑ…§ÀìO?ƒ;.8Žï»-t?ñvhÓê{XºZ[˜Ù~. ñ|×y*Ìįà‹EÓ`õͺÁù?ßæƒ¢ì &8Z&aõ.’E„åhÑ‚Ÿ”ƒúr"÷0÷EË%^òoPH)¤òäE¬RšÅa<†¨éˆ2áoÈjäUúGÑ”#rñŸôVŸ#½__yïR©^dO•}ýuáË"H@Ý{eëÁJì?9È ãÑJ‘(M ¿4ÂÆËÛ² ~>Ä„¹©xYP_Hu4¯ÆEµbC"©QœÒDüQ+À4œ–{àÀë U¾\xÑÅЪuëH´©ð{tìjǾiD®î§l÷u S×õ¹BL¢ ‚yCr²3,ÿ&rBc€cIbóÄg…kIa™Ë¿¿ûλ°÷^{ùQuþ‡ó9Ê>í»Ï>0iâ$`âE¿‹Áu"GX÷H?‘Þg{N›•V‚SN9Å…î}÷4ßΞ­å)tç@ÝžbîËë"¦¸Çp?h™!_)ʰ‡8—uošBs ‹†Uu>‹çµ1‰™)N.+¹ædK_~æIX§ugø*· tÞú xá¡ÿÁ’Žáž›Ãj4&L˜[ì7ZA;ê¿Û;òâG0qÚ´kç^z|ëÃìNGCûž×Á îxõ›ª€GŽ–'CAa˜HÃuªÚè`£÷5þMÌ—§™(”ø‚6ô)¥6#‘ùD>Ø£™¡äCª6èæµøwÀÙàéÂM7‚={õ23èJ|u!YUÀ@†¢ÉÛ–7Œ$‹{¸2âêAj(^ÝÀƒÊâêÊáÚ¸W±Ÿo4¦N ÎK„êÚ*¿ïA|t|3ïˆ &5Åóxþºˆ¹Ò_ŒümÞ'¤‹/¾ÔâŽfîh¾Ž@“d “kò•5% 'üý¥â­u0ðѱ°ßF£à‚5Ö‡«ÇŒ…«ý,Ç¥˜f·ýÏ‘&Ü[÷<zvì WL«î´!¬½ÖêðöÀ¹•àï¿8ê4Àö®¯¼;Û 9Šî´Ú,%)ô;ˆ çüe˜¦‚nµìAšÍŒ‹Ôd &,ýõ7ðsK %UÈ ÕÑ& èGOQœš$mƒEըѿú…Ï¿„ç¡ Ù¬VÛádøô‘ßÂV7®Ÿ, «þð!¼4èm¨+"Å+NØ¿È-];t_%a+ê0 âE;uu¹¦øÇ© q:tŸíð©l^öC6û³ýÑòR&Ü¥MñÖHˆR ½–>F’ß©’kŠI$«â&EþÄ%”]ydVädÀP’ΡS ñXÖá¹ÿýÞxãu8ñ¤“àÆAƒàÞÁƒ³ËnÌ4`$|¦ÚOשaè§OŸ^ÜL7‚±cÆT¸ã›_vã7‚3¦[#6²‰ðCÙÎñrÃîØc'8õ”SáÃ?„ó ]Km¬Ó8áƒQª^‹¨áê–Iz‡à* e7 Ý⮀hhWRÒ f{ “³RiïGE܈BÁê.þ:ÓsÉ¢Õª2Ž·ˆ­aîmÅ&¦èq©uåƒÅojÛV TvŽý©¹¨SO9Í8Þÿà8ÿ¼ó}i`K Y³¾)‚Ÿ9°C÷î0fôèª<Ã+{Î?úϪuzä‘!ðôðá°déãZuô‘GW·"ˈgÁådÊzæ7ß| ô9¬üõoñnÆ=ϱLëUNªwþ§Ÿ~‚眚ùóçÁëmPy¨õôä9×&!5{ð²¦{ß gõ‡"€¸8ò[0|óÍ7Pk¹¦Ž>ú(߇á›"`|nÄópûí·XöyÊú§4ðÈ']jšS UF¥DkY'ÊùáÇùv†Ï¦f´‚†­×»÷Þ°ÁëÚk® K–,®]×ñ‘ÿæ›oæ«ò=îXŸñå•Q0«8ø¥ ÕmÛ¶…µ×^þtÁŸ`áÂ…M‚¦â¢7qâĘD!”Å¥d”â>JP8é¾ô?NÎ'ûC ‘% ˆÊê8€ˆYêòÝ{wç”{Jåbx-Ÿ‰K”š’²ù0*ß‹˜¸`ô=£ÑJ¢×ÆÌ,Fe\dS¢!ÁkþRú¼dñøÇKn0‹WÑ[J 3=éÕQ£ààCõÃDŠjy‘Ú·myî\ä¾öía×]wƒÿú™ä©2Æ2MÍŒiذaRá\†qµÊá|ÐgRF[ón4;E«ïžl>˜.h(0™És‡2—´—’æÃÔDÞ©áßöµ÷AB¢Üˆ”ºœ²‚ü;y™9‘þ™_¿ fà[­1ý©ÖËâØ¹í¶;àüóÏÕ^Ó¿ÿ4¾êBë$~óæýf펾ިF–¼¥(Ù»ÙefFeSÍŒñÄeh^yåŸaÿӟ·׊htü„ þyOr¶Ë.»À˜Ñc`†Ÿˆ©©qvÛ}w_óðÙ§ŸÁwÜ û°?<û̳pØá‡ÁóE€à¥k÷˜5OÝýÁûïû·yç<;OCáIî¸ýŽ@$ÛÈz ŒÞg2iJS_\ÆšÞè¬uÚ‡¤ÉêâÞÛÆhÓÈ&HÓ+Ó»jKֆͶ.ÜFncž”ÍÆPÙf_-y‘åÈÁdÝ€)¯™2e*ôØygMzò‰'¡‘ÆÉ[ϼ2¿ýî[˜ûîëkæÌ™ Ÿ•¢ìؽ»¯%ð¤užƒÜi§ŸÓ¦}õEæßs&ì{L_øþû`úŒA’\Tüö·ÇÁäÉS|­Â´iÓ`Ã6 ÊLr­ÒQA2÷+3œ•¡iÊ6ÅÜ!K€×NzíAd\ C´þÙ)Ú›?!÷D¥~ÄT‡—4›6TÓ^‹ØHbG5–ñ¨` gy{©e"¦)MÝʉ¦ÔDB–Óȶ¼u¨wïÞ¾0£Éé¸rÚcž°õÖ[ÃÐ!C`Ñ¢…vÝÄm#s4Vc]߮ʜBûg"¦;ÍÄü&mkJ>—²Ô$ˆ´paƒØÌ²Z&˜¤XM¿æ¨öÈ·l)Ž¥™3¿Lð/Mì!syöôñÇŸÀ´Ï?‡víÛÁÿþ7ÆŽyڭ㟇ÚÍ=ªq(ñì´øæâŸÆÒ¤IŽ ®i²Á%¥w_{^~4|ùÌýè™à|ã·¯A!Jk–~ý|÷Ùó0òñÀÓ÷^QõA·ó.»øñš½¨|0tìØÖ[o]?møf›mêûxŒW›"£ÿÀýøtÏ=÷ôú<3$ÏgÁž™‚g‹XfÒ¿ð °C÷`•UVñÛyGzïÝÆçÿ¾e·npñÅù Ï^Ö;תU+ßàá‡úúpåUWºë®+ç•=Àòz0¤(Ç &%’Ý$+S0t×sà‰¬Yc™iµÝ}£D³™–%T&§pRê îî¥$E¤c\øû½ñ¦ÍbndøÉ‘L¯dB²7·©™q¹‹LYj£MMÒaº¸2¦M¨_ð<ǽwÁ ¾˜>£¸Æ< ;õèGy$´kß>ˆ#/ÂQ{8âˆ#ý2þ÷Ã~™Üu‰º5¸O×ÖY±™\kæËkæ€"eÆ!©ÓŽïkjËmm¬¸!Û´z­©¾åP͉²¥k²t$æß"°•\ÀnÌÉÃU‰ÿJû/Ûú@žÅh«D†Í—¨u4ªO°–L-O¶ä$R[ÐÏ‹àÛOfÀ:w…:Ç[øÝû_x{üø 'ÅC>ä›xZ‡Ï§Mƒ±cÇúQšg†V,˜lÉË´IdŸ4ÚZ?3›­u,zmŒ\w"¬`Þ*š ŒšyŠOÖ™z•%¶åäq鎄û¸°¨š.Äi†Èr¡Ò9—Û(5h¬j£˜^dìï»÷>8üˆÃàÌ3ÿã^ãÇOàC§ ¯ï­ƒž‰å.»í ß}û­_§IXθ%l­F8⼌¼ô-…§xUXÿÈ2oáñ¢˜•u&r-• ¼Æ*”™T Z)/ÿ<¬FxÔ áZ9M LBÄãÙ’ ›z~d¡]y—S ‡Á¢uý=ÿõ«‹w,->1_AgÅ×qÊäÉðÞ{ïûv¸XJý=tÈЀá÷®=ø¯çcô‚GݶìæG3úé§ù¾f¡Ü“&½Î=>ýô3Øa‡íý0o&N„sÎ9Û÷æEEò¢8¼üòË+ÄæÛR–ÝÈTLáÌoð…4”C,#w?&)—×#‚)d˜ƒ„H(3ҨĥÞU!Þ)°ü[ôù/ Z¶„TPC¦N#¦MÄëÕØå\>Yæ>Œ|bÁ–üW]¸ÃöÌ ë° h˜¢y þý÷=[m¹ôêÝ zî¹Ìœ1>Ÿö9Ì;êëëýë¼PÏ»tö“©­·þúþ}Ï>ý,L —“oNfæsEm½@–À¡-M1Kš‡‡vW‰51ÚîÇ?» ^Êİ S¼2ä^°ò)°ÝD¶ ºœZft-;æ#­#’¹Ž‰œ–É´ÈX_¨(p „F­ÐIZˆü¶j„ÆÈ^½´ôqi}‡¦Ì'OKà–\®)ÊØ×›«Èô·j•÷ÏyÑŠ`S¼ÎÓ ôî½tß±»ïLsó [ SçNpÄG@çâßÇ{Ü aÞ¼y0qÒ$è×ï$7îM˜üÁdØeçýHIç 8&ŒŸÐ,ZrŠÔ–'+¢jl!;,3Ü(^ã|ø6R2À].î™q+,iÁˆ] Xž,$&!iÞ™÷ÁÇðO™:ÖZkmØb‹Ía£" èб£ï‹å‘‰Í È0cÆL9ò¥RžaËrƨЖšÃÉßÜ(8¨°)ÑrÚhƒ_Ç1Ë„IÙoGŽQ_#!Þº¦k´²ªà´·¦„Qê„£UéXÉ;VjÝùSyí$­Dnñ’ù59Lóù6‰ïñ"y> ^2Œ²¤iÓÍ6…O?ùTjÏ4i«­¶ô5^>/÷‚H¾‚—SaÝ®~Ó¿˜îÿÝx“aÚgÓ|glx&^:o/Ã÷L úå…Ù]–¼d €åÙ^¦ÅTŒÉæ{1éb|¬Ö©p ÙD0¢de#´Hµ%—Ù¼1Vmf—K.7C`m®6Fêšir[ÌnmÒô‘µß*˜ VE6’¾ Äd6±vYh¨æ˜ÞæbÈ«ñn#X©Í¶Ô} ¤Ë]€`Z »$Äû0„e-YúÓ¦Å?—Ž%¥£Q8(; Pú»xñò\–[j(8窄“(8 Ð@!É]¡ƒÂ ÍÔÆÆ 3(F¥PU `ë:cÙÚéBX VSmt¬5 à¨öNåÄ.X@ûwFÀÊÖK €Âúhì®IYgy'Ár ÛÚ†š„k¦¤¿˜À,­‘#Žâ†G3Ž‘¬s)&)¯9ŠÀq9k>Y,EÚ]HnÌðÙÇy´ë+w¤,:‰2¼ y+±ÌN>@ƒ[h–å,Ow?bõI%£0 íø±Ó$ľòÞ¶¾ IXÖ|šÎ š›­_2†lj ÔØêë|(uïšZ‹ÕyQ]à\ö ¥¥/ÃZûb´gßXæA¹”ˆ´">ÕAÙèà¬qnæ‡/i‡†•¶n&°•B’ZM0oÒf(’p;ÓuâþÔÀæ¤ûʓʰÏI¿ö ².ù¬;9)QBré*HšNÄf˜-—kJ·Bë´qY'SK§ d#d!’üyÒŽZ¦Ú¬csfÖÎ*È€!ÅxÉ ”†¬$ ¨(¡0%oÙ“>!…A”ÀBøÒ­[uÔŒK’¤BÖÃ9Ñ&m¿%¡ÂÄ•Ï<£©°…o6 ¾é¼)ùqäêÁPCyØ‘BVL5Ù5Ý TÒÒ¡}y¨t+·®2Þ“I;1Å{× kÖg;‰d- ›~ã{i´˜”|p&qÁ†#5?ìCD¯XTIb*laïç(«6‘‰Û:%cʺ á\%¨KJ«š&e5à*Bö‚ (˜øÏþkÍ€¸u›®¶3k ˵ªÛðßœ€5`C*£‘¯ør‰'ú]€cümÀC ¨TcB±ãÓ ÿdÁÄ7Çr’…fAýÅÿ\ pªÅÈ„8e9•LªUÍ‚* $A*ag®Ó6 +ä¨&§—(tbÒ+)‹rRÚÆk;SÓt-TÍmØ>7‹º§2ñA^®/m¾T¡Æ-ÅK‘ŽW êõ+%pV ‹ùS}MB×G+ ß=`ÀD~f‰. 2 ¡”hHT¢äût>Iíâ$e M(D$DúdÚò1>¬©º`Çá5ÑÜ"Ž¿ÅD¬Ÿý³uÚŒ“Çð :-Hœ”X R’¬¦:@'v6K­B­ÈI*,eMU°¡é‚wŠÝEU~ÿjô‡ÛÈÕ:óÑ\,tBaGŽÁ¯é:£ÂgP’^èM¶S-Dî3‚ÌW0ïhHïõiЇgà´ d»b¦¶%Öá0Šem…ú6QÒÁÀ‡›"ÔÛšÄDÁ}|®`°ŸéÝï´œøŒ‰mˆ:@eÑëå0ƒI©rÖÍÜýZÅNäñ‰¯lÌ.(ÕâXé`HaéM”M9‘‹)öu­ÚØèÏPëñì“;MPÆs2Ñ($1Û:3cÛ ¤½CéZ‹b ¬4™Æ^l§IˆŸxNᨺ+!¨æá( áõuFÍYŒçóS…Ù¤º`|Æ )ò;kޤâ;ó¤Ô¢ªL­×0ãŸP˜Ì¤Lî¶ kµ,2u‡S@8‚šŽæhYm2µðŒ¬×0FòQ)zÁeß­n¥qä¨zŽ‹¾D¶ñT‘qZB“w®lgåô*qf&û†%ü¦²"!–)"Ž5Ö¿LjgÁ&LÕlœìVÇôcµÐÅp°ñcN’ÇÖ€¬p¬¶IÅÆú[Œ ½O½ŸÐÐOªèÏÀ,QųR7cˆ,ý³š#l¥Æ¹+zÔöôhV.–Û‹5Y’ÕùPÆ ™ùOUz¹ ²’HUÉr$ž–UއÃ_ Bb¶S¦‹fD:“mƒ‰‘}Jl=õ¿“(¨>’ÁѤ-ÙB”¢«É\ ¯qP˜Õ\‰ /Œ<7eÎ`G¢kd§Ì~ØëÀ&ü\:àWÀ5,ŠUz@EUKªºÂDÇ•´„Ii¿ôc ™ n®:ZAgsÍ:ï`¤Ž$ t`À:++Fyª˜µ«Ih,¿Ïq§y ë*‰_g+Iw,ñ·ß:AÀrÉG’Ûꪳ<ƒ´›–ãóª:^0¶oÈu‚#GŽª-¢ð£¹P»²¸’  S0€(°Z…º\ëúÆÂâ’dßÏ­ &p"ed@€É‰9šN£•ÐäfˆtB¢=grlËT›A52i–žÙè+:Hs'ÆŸ1e´ ßj|†îDÄ3­Ú"ñÊ–šg«,yWš— ¸:Û†¤Ó,{dÙdµÚªši;A®ĘƔNcLØÚlLóª×‡T¥&÷^6!P“7‰“ÏÔšLeù‹zdž6Md$Ô²“rHóÞœÃÖ £Mà€@T›PhÛfå±õ ³÷—MB&KY‰4©]ØÈH橜™2±@)᪑XÔØh‰ E­ÊrºzGF:%Õü‹Ÿ»¹98Ôeôœæ¨3fÿ:¸Bµ{ÌâŽÍÔèÍò¦è”޵¦¿~R äOi뉜#OÁHxÔÖ­»Œ^´xv¢ZÐÞì¨Ð©Ãz×7,úq×Bã’Nì¢-š«®³X*À`jŠE’¹’úzÚ}%IL ê ŽjRK,+BÔ#iÈ2¥«^B™&¹›Ñ9º| S,ÆÐ•,ÂÕ‹_˜ÆQ¹ú!;Åü37aUš¦ù&CªKÈrI‘èŽÌs!þ2÷kíƒ9{sôQIÊ*Õ$¤º²5ŽV$ÉDóð{J²4¢ºc&¿£.û³ ?|tÝOíÚ¬sýOõq@Aâ¨C;¡œpÔ•@„w´òŽ »îÝmÁÂY,\4g÷ÆÂâöA†JiS§`m$0hbP¶áD""Ž+ãX¹ŸÍ¹{® ´\ûˆa’/œ˜hÅ´—V®lr@¡z[fK•6W50 Z7 ¦¸3ëT´bVh (ý† Ž2fÞ«µª³!-1OŒR²ÝxËéšÒ͹\ë­óǶm³Æ ³óañÔ’Ò±´t4–€C D € PPÁBùop”¯GpÊRGŽ9räÈ‘#GŽj$ë (ep ‚(ø÷ç5…’P¨ˆ 耂#GŽ9räÈ‘#G5ˆ 8`ýtÎÌ…Òg, *)ƒ„¬à9µ9räÈ‘#GŽ9ª€ òô:ÍBÄÔH-,S°ŠJD Ó&8 àÈ‘#GŽ9räÈѲ ª ’Ä¿¬3s^(•BA ås@pfGŽ9räÈ‘#GŽÕh À 3;"(€Ä E°P€¨ó² Ž9räÈ‘#GŽÕ&P(pŸÅëÊ@‚˜Uü\`€‚#GŽ9räÈ‘#GŽj,ðÚH (¨`A@`päÈ‘#GŽ9rä¨vh€~PàÍÄó(p Á‘#GŽ9räÈ‘£Ú :0@†ëY  ^ˆLqyŒ9räÈ‘#GŽ9rTûàL|}>EaŽ9räÈ‘#GŽ9Z>€‚–þ_€•ê­ä¹”‡IEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/remove.png000664 000000 000000 00000064404 13703317554 026621 0ustar00rootroot000000 000000 ‰PNG  IHDRˆÆÈfŽtEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp ŸHéZetIDATxÚìxÕׇߙÝMO!$½÷.QP¤+MzÞ¤KAEš "Hï½÷H!…„’„’ìîÌ7›MH à÷· Þ÷y†,»3wîÌÜ9¿{Îm’$IüAþð@ x%PÿÈÎúÿ‡‚ÿ€hè_B2û, Ñ‚•áWSlµšÉw™ …þ9âÙ_é9B!DB ^=qP3ùû2âñŒ@d% YmBàÕ 5‹íiqÈ ú,ÄáéMÎâóÓž…@ ^qxZ ”,>g&Ïõ Ò ÂÓ[VÞ„@ ^-PŸ…Ôtyžñt[BzqÐYþæ±¥ˆC±šãeƒ]$ÉYÜ{@ ø7É…£öÇ_;<>pZ‹éì¾’Îö«é?K)ã ¤,¼‹8è|FýVÔ±dÝš0dwY þÕBwy_£€©Í®kÿ3§l©^ECÎäð§ÃJ:ûÂUÇ q‚×Í–'Ûô”è›2YÄÓá%lcÿ†¸«@ðz Ùôº)ö=½ÇjûŸ´AÈYˆCÆ0“hs‚×É‹p|ʃȴÓÑÓ]V!““¸›@ðÚñ¼S².<σH/@ x½xá°…¬¦ÚøW„ì czøò°™À—œ£P¶—y/7ü~K!2SM•¨• .…¨D½Dz¥ ê©ã®ŸXœÂ.£D£ìJJždEaËU…;¶•³IÖ Ÿöãõ{iç°ä«i6•íwÕä.Y¸…4«¤Çó–‘å-×/ÓÜEeëóŽyª*^Á_Ê÷àß%Èj üKÁe³—ðp”0¦c-·âU)™ïo—CGW3[neþ»ÞUÇ€*=B¬&7G.½¼¥Œq6ͨþxÆÌUíœWMÜÔ±OÞ9rÐÄ9í¼Fm—;tL­³™¹¯åÉ’?{O=ýs*|#Ó+ŸÂÄ“*Qqµ“pöÒÓÏÞL”j5öÆÇ æ\zZeÓÄG{ÉÊHf><­r%T¥³&×(®¨§j˜‘c Â(„Að ’Z΄P¼’òMæM ¼¬!ý/ÄÅö¶”^›ø×–=͸¶.ª#ö‰$ªì½læp‚µPV-¬£Š]Ú19rj—d–é^F~ÒT¯hÆxíMÍÎ’ÇCÂÉ•Ón¤¬¥èªYßaAi5¢èÉ+YÂC2å$r•ÒSù¡™•ñ2=òÉøº@·2™™wËz¶"\dÎky|ài`º‹Â²»ðv^•ÝçÕä Ÿ^²ÿ$ŽÝÐÇrAÇ ÍSÊ–OÏ OÍ Ôö¯¥Gl渳ž¹%Ìt:¯`úC¢ Bðw …ð*^QBzYBzŽH¼²˜ãiµùà,ì]e‰è“&Zªåz™¡…$ì#T¶¤TÌðJn~šñÖ.õÍܰôˆ‰­Çç/.Ó(§ŽzQfθê™í¢r:]úwÃÌ̹«ÒßUæð§Ì–wÁÌÌ(Èå_3‘ò$ –le>pÕò|‚˜ùÙ‚mu”LR9k#‘×jßïˆJƈOvpÒž’‹Å Ѽ“à»fVùK´ÒDÉpËÌFg‰jê‹Í½ª>WTáQþÔÈ’”…BHÖ²(DâUó 2õ"žbzå(S@G ‡ô…ÈäÕþÿ~ xôÔ¾Q÷~¼!‘*¡Tü5ïˆæ ˜9­îhí»ˆdP¹)¯}töÒÑRó6®–7P6A%6Aá€v2Å Ó·²ÄžD™Û~FL¹ä'5¡æ¥u²|~5Këù(¯Žª•íþ ¡ÑЩ¬^ÛM•Zmß²_’‰8^Ú¿¨ðs¤Ž/«IÉ!¥ƒ¡ ¹ôLÌ¥°ó¡æM8É .)q T´Û*‰ZÞòk^DoG(¦ ƒ®¨[ »˜øªµ›³j2¢$Æi“P³5 þ¥°þ‘uHzd[Gí¯!¥×½‰WT4žbúËø_CNw5cL3†©¿’J\p.\%\ÍX&“«É¶oÓIkàÅÒ =°€Ê·ûÍ䫪£”våû4éS]GâY#!Ú}éªy » -©G9kb½æEä/¦#ú®‰9 ÌuW訉N­t†wóù”ÀŽ,Q·ŒžJ÷M ¹'ÑN«Õ¯Ó<›3 iùrt·V¤¶ÃXMXjhÂãcfÚ13êÊ4×¼³føõ)­çísb¨™ ·¬‚“†˜Xlñ ²K®›Øä¬gÇs”=E”Äx<å8†Öq£J;ÜôâUümÜ7q"$™G‘è¤ …ƒ‰/³äèK?Á¿ºÍ!"J±ÖúShZÍßNGÿŠ›/šXjiôÍ,Ò¦ì*:\ýìÕ<ƒšï]DGC­¶o¸ed|”ÕÞí§ÐÁ[G=Í0«%ôä5«Ü³´NkFÞ¤hÂd'QÎáÙä=rêèSF‡K¨‰-:—pCêVÝ@›ÍK2s.&mÿxÍ»IÊË4¯`Ž7=¶¶ƒì Ô¾÷”(ŸòT<]$ò»ëâ¬y<÷4¡ÐŒ½{=C²o6̓Є,¿¥ÁâÑóÃJÏÁCŽåçvyq±½–?– I³ÂNÔÊçÀÛëîpÏdžÄ«bú Ä+¢ÕÀÇ\„·ÊØXTa¡Vóß•.䢾ú ôÎ!qR3È–ÎMþþ voêˆ8ldfDZü>(ÐÄçAí5ã«\1ñ£f¸ó“©í©c¨³™Açd†•×%·AZ x.}KhÞˆYá[Í Ù­ââ!3U;f¿æ=L8 PØ[æÝ²z|4OcÛ“Lk5*M´r¤4š¡/¨×¨ ”dý*ø†‘Î~ sÒ1ÞGâÑ9­Ïµµ&b†ËV/çyžƒóã†ÕË!ÄAðc)ƒÃªç`ÈÞhôÎnÖ2*Dâ_ëAü;Ü×ûf¦ì6ã›Oϰš6øMâˇZ™ÓŒî;U t•ÌLº©£qª}~læë›2Ÿæ•p»§ò “0¼­“ÌÐâ‡4\ÂKâû&G*<Š—hXÚÚé5ê±ÊþsF&FBeÍ#éém-ëµcè)v×HÛ šP¦„˜ÜRþjžAQmÏÕ©â­ý‘UÞW©àfõV’ó©ýÕ d“–®v-VГS±ž#ÕƒÈg²o|hfA UÓ·+XŸ-m–°’@ð*P9·V&ï¡j\’e!¯«@üÕ!¥?Š_‰žÁ`“b`K—ÐÓ*ÁDs ŽZMßR}µý‡>2Ñf¾Ï£gI5Í€kµý‹é.ÃÒÅ´si™‘‡LÜ-(sLó¾zh C]Œ€j)û%F+ìJù|争#)Ÿ-5þù “®d2€M{êøýªBIí¯»«L½ÂžHÒi^„QaVЧ“Á!0©¬:gNéÊú„¥QÚ"ª%6fm‚W†œŽúä2™ZF%! ƒøKFJøœq›fS"4\¸`¤cJ ¥Œv¥µÊýLÌ?f$ÐR>CŒÜ-¢gL#™­‡Œ¬LÖ­þÙšÁ?©%”_Kß §Lq¨ÕâëÐQÅ r)Ë-%ãaÊ –ëÖKY‡–¬â`Ý,55àU"¹L¦–ÕTçAxB þÔB–¤°î&D>§§fêO~þ&z_W8÷8£1=wÝH{?͛Ӿû-e 7³Éœ’ŽöW§WÙt\áxV6W;~çiqñÏþdŠU8*[st频XÇL Úi&‡æxÙX¦áмí<)#£Mq ¿iÞÆé½ •ó·Í虋C†Ï©^Ä߯ñmÁø4­Œgº¦Õý`‚náw+‘"ï¶¡‚Kz£`Äh4`0¤û*1ˆ3çÍ®\ga?^…°nAH¯B$„@üię²#èåö×¼‚sYÙ2Í gåÇD?TØ›Þø_}ñ¬G‘ñ™+Öãûf~ÈD¼,<ˆQyÉh5IåÌýgÓºœµÑ2èÍâ=¨Ê?3ÖÁ|‹ÍKvóvãÊ8˜KÿygPì!ì4ìò^m/}±{JΣ¶¦íO5XúõûH 㥕 šœƒ›úà,æ~M"%¼$ͽ҈n-¯Ñ —QrÔŽžþkÑ¡·Ó'‡ÿ«´§™»ŽÊC¾ä‹NeñiØ‹^U²õhl²ç”†„kã!tQ¾à“¹g°:a áçΓTª ÞB^£âª< f¨Ô<)Ë‚½ñtûÁÿúÁ_WSûûˆåÔÊ/ØêÂqÿ;Ü›<Ÿ‡÷¡^ól´³œ*m´]âN2oêešÍø Ï}0mgþòãÄhµIÕÕ‹¨_1%.ùê·#ÛþKØ9ŸaÅÒ«ÖK2+x×ëF³¢ñ|_BÊ+>‰ƒÁë¢곓òý­áHÙ÷Q,é$Ÿ_<@Óþ ¹¿b‹ÛRؼ•‰Kü¹‘@LþÒÔÜ8“ɪ7Mt¢²gÚvöåøÌù­újÖ 5$O"=Þ˧ÇÝ©8¹ eó›99÷cöV\Ì$7áü¾^¯ !‚ÿ{' z;ô:=öö…ykÈhZÞßÏ„a*Ÿ<Ї&#EiÕ¿ež„˜ÜÈëãL€³üÄÍX$&ÚR©ÓhÆŽîI\œ¼‹à[¯9.of÷¾m+ܘ7\…!„@þ}H9¨Òcë¾@Ug ›²X¾¬7•r”æÝO?cx›äy£#Gö V®Ü4ÜF©%Ô(Âî¹;×SÅÒ¦26¾ÅgCP±ã[x}þ„¯.ø³‚ìùò1$ÃwÄŸçÇ/fsÈï¡Q+øÂ¨ãL°™·Ów†“!%hãólû‚mv'L f|}ìE¦@ <Áë$²SYÞ4„Í‹»f þˆ:6(oüžË5ZQ-eôœµó•‰íŸÑm±#ŸÎ¬Äo½‡³9È(néë€ï <Á%ò6ç.ŸâV¢öÉ3(IŠ:φùs9™ƒ¦Í,˜Ç©3-R‡KK²Ô†k«a>8™–c6[ˆ&Ÿ·aÎ o†~ûí ë©g7–>øˆÈåKé\ØFÜl@„à_U1Œ>Á÷K®Pª÷(ŠZJ˜Ù“ªm?¦xŸ·)œê4¨QœðØ…5`d“û Õž*y´\»3{Ù»ÜX>ŠïuY¹õ]J¦Ì×”§é6TŒÀœSˆƒ@ð—ûþ’u®]˦K·R6[ËVrõc?q«þ îzºY\-Ýsò`3ãƒn .-î‘à•¡Èœ‹Ür#é´„¬K6AÖµ!°š#Ñåõ/çòö¾X§¡³lƔ͜nS_ʃ°LË-xÕõA}f3›ÍÉ[p°¨m ^-¶¼eCž<¶èõzt:]òšrŠ@X>‹5"þzä^bq›@ B B @ B B ÿTbüûŒg3ß^Ïg“ãJªú«N[–  DÞ‹ÁøœßonZʯ¦ ×yúwÞk›^?Ä8Á_ Ñœ\ò1ãõç‡y-IÜ4žGâÑE_ã°¿U+xcH^{ۃƟ§©WZ=E½Íñ3Ùéñ“9½¨óO©’îpæt,ùk”À]V0óÓnÆš¦NÚdòcíèE”ܲŒ²»¦óÃ%3úÔN2Æp®Þ0‘¯R z÷41íã; ÙÐ/m¼Ftèã1©w$^†SÑÁ27áïŒï7ì³kR;¯èí'!<É•z—ѯ? ÷7àów'1ï]xôóÇ4:ø³f×㙎·ñAœ>Dü»$ÄÅrþèB$™E+¢ìË¢Ã1)CK8VëÅ”KR±ÏRVjBqu^úæŸÎÊɵpyÒ;R!üÈzNº6§ylml°Ñë)Úº3u¬çlŒŠ”­"ïµå³¾1ôÒo¿yÜÍég–KM(Ða“μËì?`U3?~:™Àv‹˜VÝI8½“G•×3¹¾ãáI¼< EˆdàÚRÆï©Æ´ª»¾'Ýová›ÏªkB¡²g ë 6à­"$¼JîZo¾ÃÞ!Ôú®¿w;HXóBOò{é"a‘¬ø2,9ö*Ù§y—䷆Ȓ6­øÑ©ì ḻ;f)V½89/- ß{×8æ<˜ãß´ÆQ óÐÏݳ˰zÓÖL ŽO+Æ|Ñ bv3ô$¦,ïÉõÞÓqñ }Ò?·êtYÓ•Yv§ïðÜŒÚÌ÷)^ƒƒ»7yóÚ”ÃáIÙ1|“®'Ç{#‰Üû37Ã%¾íÇèŠÛ˜×4;ƒ½ÞjÿÓe1”óÏ𤉆¢ (*ªò];byw@?jew"GâV†O»NM ÒÞ_ÚM]ÂÇùdÔðïøðã(Æ/韎2L“Eâé[0™LÉàB ¯Bý•šÓ†¢]–°TÉÞ3Û‰ÖW¦E]Ž}1— 6sh˜£0õÆU¥ë ±xÌOÓ¼ƒMj|< vÖIþ^ä©Ü¸…}Ãw(']fÝç»)0eß|³¡s¾ãrÙ/m¬/EyÈHTi87ElÎS¨ˆ=\^ÁÞc¾¼‘A[Z2·h»Œ¦Púp“Éu£zrBÛÄ .ß22¶çEœ$K³Ë5ÂKв¨•Å 0pà@Z·n-^N!ÁÓ8Pªë8òoŸÈ—†’¸LíΘmYÖîݺeê²Þ,µ˜ñMé–ô6Fy­–Ø|/BójãðBp¯ý1#k[ºJìO§p/QŒ¢ž#ÙX[Æ 7s1˜$k¨Ìïs—r4F÷Ä Q#Ï²å¬ F¹4]F¶$gÄí¥ÉÙfŸ?ó¶â…OE’3f £FJþ¿ !3fbÏsæú}”ì¾”/_WËU¨QøŸ¿Md†î‘¶x-·£ÕÚ¨±w¸ìg$Oé‚d×½Dš©¿> àÜéDòPºRIhë©3¥%vÉѧ¯Ýà‘Z·§EJx/EÆ “ÿþ/"añDÄ|LB þ`©‰åÌÂ^ŒÜëNÚùQ–1cV%>[<ŒZN§XÔc2wªU$!Õ ä î'Å4Hne$dã(:ÎŒàý•¿2¼‚áÅiºAôÉ/é;zÙjÖ$ÒæLËF÷ù3y§ v|âQæuÿ”SÕ'²qAk’WÎ4±qÜ<¼–|Ik—¸ç¤ýšþØCìŠkƸ9ÓpMØFß®ó9ÓYŠcßÈVœ¬ÑçÅKÉ1{ RŸ—zŸãÇc(;0ÏK Бq«Ö‰¡eUôª‹ÏGâöÉpÚåT1+¶¸jü¢ÑˆÉd´zOtåç%RgM}¶½¿ŸðÆ.ÃVwxx!Zó2ÚñVúŸ¤ìTí2Žjõߦ¬‹ôŒ¡„aýYwÄ´ˆžH„@ü1âðÝO9´å Þt¶|ñ 7W çë}!Ôhn¹šâ´›4‹ÖÙ21¾Ê]öÔÓ¼¥v_fp…rÖ‹^šMƒ™?f%&¯aDe'$­†ÛaC>÷WtÁÇb¦ò5¢nürlÀ„:.ÃÞÏK»÷ká.VDÃKæ÷uF ç×oSr¨7„ÿƯ~Llç.e™j»rÝèWkÑÅÇ0ã­OÙu>†šµeŽ|µ’ØÖ_QÅFM7%}úЩS'qC„@ü Ø¿Á'cŽñÙÔV¼1Õ‡²•ªP£áÛ¼Ó°(ÉÑÓEVìɶd#m L×™ô­î^º·o¦ÚcÈ[<’Zêhv_HéRºç¤Y˜˜À Lù’'½0xããy— rY¿²)Þ…Aå:0{m+¾íø’ùý‹«—ÿdÏ&ÓõÕ|µ#‹é‘mZ2eºvÿÏmã磧 7ÔÓjâž´œ˜"“CSÅ2]ÅþÑŒ9Pq[‹!ßýŽvµÆrγŸ³§˜çDæ{½Eͼ:”Ðcü”½zŸÕZ²ÜX‹õëÑkÍ.*ùºax*/C/sùö nÆÙRÅòeovõN„Üåwsl÷E©nœü¦/S+ÄÄå5q²‘è=ª]zö"qÖt-ãò¬b2aL2bË*ÿÏâ <!Zvó6Åw qó Çïfã´Žü|a1kû[j‡EygÌšºXɳu¶O©ÑÞcÿÞH|ÛÇsËß@Áb1¬Ü}~¥JX&OÈ"ÍEÌõ’µÂ«<ÕÖ™D¢Ñ[ÛtZr¤jïü¨y[›ôy¹ü­ˆýë`roÊð/$*= ÈKùq,¬$ŸŽnñlã¯ö»så¾,_çB~íÙIÎï³ìô{Øg³·Pï–©ZŒœ»-s[?wXq‚_`XôÁÛ™õÅ N­ 3aÈH.s,² £»fãäžúÌYÑ–âÎÖôìJöbé¼C\suÈ´·¬äPŒ7[Æ‘MÌföŒ±6l˜ð„@üý$†œædtj–pãh Zh[ãR2-ÇîâjŸŠÚ[kƒSwÜŸjƒP`_„+îÖðC²`xµo77û– ÀݬÒÜͽq…q\?sJ¦xjô.EæÍBã RŽ& l¿¾ SCS¯åw`E*èÿžöïÆ³8õsf×7ú1ãçD/|Rw·Á9Û‹Ïó2µNC•!¬ÝéÑx4Äç)ãàUÍD´Š×¦rVçÎ^ƒn}„Éì™lݺq3^þUõ]ì  ŸÆÖ „TÉ ô†?½¼­=ˆ27‘<8°¤Öc?~¼u›6”Æ÷±ÛÏüÜ4óT|—¶ö¿²ð§Ío°$õˆSËVq§ñ‡4x¦¬#ﻃitý[6«ÿC~‚7B„ñÏd¶èÇÌê?“Ñ5e³ÙòȵÃ&¶%|ŒÇ™ñv}æ?±Ý6Ôõ ÷ÆPePî45´)Ç›u3mÏmzõ~Nš6¶tŸ9œé#{ÓjƒnI<.Ò…Ùª“éÔl6%é2¨1›û†¾D~EáüwyµFÿ žãJÖ€=Éc“R7CÊf‰ÚÚ*Šâ÷j•®$bD‘d늛³ Ò_ž¦™„èHâuÚoNúW#¿™¼l–¿©›’<Ç’ˆ_œõKɾ 5–Î4–®è&ð¡'£[>o …‡~gð{¨dñ»„WqJçuJwïMÄGÇ$é²HWÅl–qÌî,Ö¸!ü•úÂ/úr°Ýþdx)×6gQ ¾O×Ñžü<½9ž§*I'˜ýÞW”Þ´‚†!{¸éV›êö‡X4%¡õ2%œŸ>iÊÖJSèZJŸìHç(æË…)CØVv8m ¥`G¡Ú…¹õÕJÎÅÅ£:âä^ƒž]¢X´ð*í&µÆ#p Ÿ®óbˆºØ­ç³e õSB=Â׫îÒkì›8ßÝÈèï 4®m_m'טO(Ï%¾ž¸™<õ²•Ç'8e×õyhF7êÚPÓëÙ„oü΢óÙ3¦bÚl·æ`¶LüŒ_Âuè3;·jÆ(WaвT1ˆ",B ø³P£¸}ÆÈÔúêÃml¼ìKÝœœ9øÔ¾šq.R—§À¶(]Î%è“_8QæÏ©ÕÏîäD‘ và×~Ÿr¦Û!jTµÃÖ G/=[+Û:™tcˆýF/(Áä‰ÍÐ_ú– v}™Ú$†i}דgĆTsÃ.»'•&N§åæOèŸ0’ïeƒðïœòRºrò¹ÀiG~*V©‚£Ë¶¥»´ó;å¡XÉ’¸:ÄIË¤ÕØuvnø”(IIbÈnˆ!Kñ“ÐYÒÐé^àu©É 1•hÚ…®åŸ]œ"fëß{ÚÕñ¡Ýìh'J«@„àïõîsyß.™,á þ;Vr¿B;”“»Øõ”aSÌ”w/Aø¢¶ŒØ™¨ucì#Lö.اغ£1#ú1²“ v’‘¥&ã·M¤nr5=š=kOQ¹ËpÜî®ç·óîø„ogã–ÓÜ}ÁÞM¸%kçÑå£VËJÈÛFÒsq¦.ìMe—÷pö}2ûµky\¸4)K¦cÜ;˜ŠNáS ûAH»A Ü‹ÖÛlŸÜ³HÿPj->ÊÔšiU{U‰æäªiLù- öÃTUKÁ«€Î—CFÑÂb¸"~¡÷ÖÚ ;‘÷4/Àta!Ý×äç‹©Í3® 1b {G$›3NOnÁ7edQ g«ñ»¿†km¦ÙæÕtÈ)e˜èƒ3˜²¯(¦ÛpcáÜkК¶v&LñfëœTfí³¢ýUµÿkråÙàcz<8Ä¥M+H]KN5äÇËtŽÓ›W¢¤¬ZºUeb·ÿÊùV-(ëúlý]—§1ýÇ÷!ßõYœžŸQßÅñÚ\Î¥[.PÊ^—A³ê¦ª&áßHëµ½Ø=²'ºþNå3iéñ´­5‚Ÿ5K‰û›¹1ïmFØ~ÉO½|RÚ ØÜ«>Çžñ ²SwÀ\ÆW}ö•ŽÞж7Ò‰[À/L·HËüG/r…<ÍG1¸ANÄÌHB ‚?Ó–}2È.«h“"R"¸êþcc TÝŠøýt„˜M°HDÂÙ\ÎS‘Ù3y)½‡m!ÊöMÝÈŒŸó1è§Þ¼­‰ˆÛ~¸Möí(›¾”Ë~l^yf_÷¢ø“hL=ê·|:‰ì7”½U«ñpåL6>Ë%e ŸÆuer3•ÎEj `ßúĦ^©ÃññªÀ&­–ïåz”qC¦ývAtNÅhÒ¢ÿÿI²µü˜ï³uì{\4„sÍÏL¾nD]¹ÊãÜå( ”nÍTgu:ô.‰d£O{ÆSÌ|徟B£t+Y)¦$äì®B„@"ê#NÏÁìS>Œ]”ƒàs§x`–0ß¼‡1æ—ΜÆÁbØœòQ¶¨G†¥Bm«¶á) ø-¼1í<stûr¼¹’béK«Êo ~ÅsÄD|¿9B\¤LíÑci‘ó¦L.@ƒ÷m)W 7†6å;û¦THïÊ(Á?‘1kúQíí6êÌÝ‘›øÄñ4»üˆQÀÍ¢Óö,âaõÀöLcä…ºLï“ ƒùóÀ®9lqùˆ¾usañA“IÜ©WÙ¿`ºo³Ùü÷fÈÁÁ3h—E=µZªÉõƒ;8§UÙï{/ž}»ÌØ(fÔÍ(ù”@`(OçöF>^|œ·úF°þhI>ÚP"ca•sÓvñ/¼c:ŤoeœKÔÆ4æÚ~­³6Lky¸ô˜QœÅÒoʲ†tÎÖ3Yб­>*–lhO'ØP¦SúO×°›´àý'IRõTlÓ5sñlÇâßÞÅÕÓéJZˆÉ9.€–·ìH^OrÂ3¿Ž°³;Y»äkö»dɧuñÒNU`ár kâùÙØS¼×³Í«dOžWߘ¬{§Ø¶õ!ºˆ¼Éý^¶R×Å6s+ÌLžôžÔ¡© úµ:K?×öHУ3Ø`óIJKèl°}ì(NÏýÑÓ­»št™e3ÖÓ¹ ŽÒ­'&!»[?èËút.ô×ta²”ÉT»"¦û„à?Cæv¦ÿ‘ZÌ]Õ”#ç!éóÓ¤ß(š$G2ø=º>}÷9!™¼íGòæ{ƒèÖË„éÃŴͤû&còä\´š±V©¢µŽ®mo3hõÈŒ!¦ô(÷9ºr&÷Œ†Èã­ɆüY’¸pƒs0¿~»‡PÅÒ>r‚°ë™=åFr»¾H+Ê•ñäþ/iùٯ܉2P¨iWº”‰âðM@ªIœøå!yšð¶²—eýßa¾Ce®]È»•³ú{ŠåKƒóNhÛ—1OÚ ´Zç÷‰Í‘vQåêá;r*ß\«Ç@Ër»é.GM¼ÂWŸL$ìÃåÌH/Ús:¿àSV9÷c}[/-í[O%[­1|Õ·í{M§øÆÏ¨â, µàOÁŽÒ½×°·¯+®ºó±Úñ?ŽäB¡‚ñ|ñ³3=GäþK ª¥†*ÛØbg÷”øÄ_äÌ­:ä.¬K•Ý>¼—Ý;ý¸ñp.«m:Ðõ­2šRU'c¾®rà7Ýz·ÄYÕ<6½–È~ŽÆÙR¶ý? ßðV丷‘á_«Ô/k`ÅJ?:Ïn‡Wá~;Y™•«»‘[g;oŠ;¿0×dË_Œ Kv;Õ¤WWgÚ½—îCÓÿÅÁÉýyTôsÖõ(Nš<$â·v}~)”õÝ)lHq_Ò\8 w™Ç¤3o3pl6ÏiŒ»Ð!ÁŸbx4q°|H‰Lšã#¹gK8Þô(³)ŽÈ‡­?+fm7²;¤TÙÍðÛ»Š¹Ó–r©Ä6­aþ æti5Š1=ãëü’³Ã¨¼°!YÒyPýÃþ HbBáæ‚¶|y£7Í“"ž+GÎc÷ÁrvTÏfdsZü™²Ù¡78’ÝÍ-£GdŸ 7{’½;>…|ñp̉]Š‘µ|—Ï×—||ì“_7céï·IÔB ?Aøm?–~ž"Z ¿|[:ÔôÔl±‰¤àƒ,_‹SÌ)B•7QÍfŒ¡‡ø~¡×Ä *UŸ«r&c&1s±S#Ù7oÒMª¯y:·ÍLr‘ûW5ç¢ôI¾vêɽÎÛò3½=›-︓Ã.5™ólݼK‰Ô×¥wâj1æ—_Qœ…8þldw*µnLΖüáóc¦«öØæ®I÷yciT½.é •ìVN36óþð«=xŒKF7ž„à%'ò—,˜1ä’é*L£ÖîYLaa5äyªµ§ký4ϧË`”].Ë%]æ/L®ò4iV\ó†R¯§9-»§×Í#rqM6ت}1šv-A›ÎÕp‰9MÎßõØÛ˜iÜåcu{ƒœIȵ)‰¬Cü:¼¤¯æédz’+µúL£š*½\o#‹+¢·EÖKäHŸŒmç é¬aÔµÍxˆÁÙY”ãÿr4@²v’KcÚfHÙ,ÅÅ6))ÉOܪW¸¢þ‚^L¡¡¡”(QBÜ(Á+ÃåË—É“'z½^ôbú‡°±±ñÅÒ eÝŒ)›9ݦŠé¾@y@Ü@ ÁK#©ÿ#¼³%RÜÁ+ÃÄ‚âøÛP¸½sE;P?_ÆÞ'ʃ˜z—ÊE\^n%³?¸FTþ6–É13«]¾gÝ35–c ¦pþÏèQÎ õþI6ü|–Èt IÅiöAmòÈé»ÀÖ=µ[”Æ2PÖ’Îù_~!®ÚûÔÈ´{"þG_´…¢.î‡܈s%^ ¼†¡Frä›…ì × büîñ´¬©˜Ñ•h@Þ;ˆö!õŸ:Ì|u#«ü»R©ˆ³f¼Ç0xËcây{Z®Œ]C¨]ÎoMaì›ÖéŒÿèþÏEäã,®Ar¢t½|,5–ÜKfÑ,úÎç`âàêÖ¹ˆÌ—X6rí2 DÜÑXr²YÚŒ£æël_~”µ?Èü<‰çX;ógŠ~õ…•p¯ß]:ü#­˜v!Ò=…«I).‡Ž ž*“®($<µ¯Á2NÉ8ÀMÖ¾“´/Ìé¾ôõ”y|_!$“)¦$™%aÛ9… õåò˜×GO;­ÍÑÈjÑNÙQ¦™‡”ÜÅïQ”B´‹LííQŒ*î(O–u־ϕ¨pS»^Ë|H©qÌZ©c2tZZµmU=T³œ „@üHÙ©ñÑhj(wXÛwv]†ðž—yóº"Åïå³ RÛp—ÐP‹˜(ÈNžäʦ'îA,nysjµyíe|t§zý¨½w!ŒÑ„™Ëó~­3|õÀ:IÒþýCû«ÑZ4™M·cˆŽqÀÍUORðUüM3qÅE3 ²¤ ämɨ~u’×?p,Ý“iý¿e_Dª­¤åÓŸ¬óÿ›à¢?—vÍIQ„†²cÃJ6íJx@(nÞ¹q8ÅY£„ãöµ¬±‰Á‡7ZWÃ+ÅÅø‹¥ZÓ;‡ŒéÊv>,Â?Ò›]³ŽuKê‘N$=Y»æênê3â*;ÈŒ¨¢Ã[»±¹Üdân%ZîŸÊöÓ&6Ƥ¥ùVy!û~²ŒÎÖ¬p.Cšñ•´ÿWÎ%qÙA%1@è•°„ÌGWÛ;É”}Á„†z7ƒ|T¾Ž‘ù@»™7òËÜ»¨R©´D@pš@xç×Ñü®Â\½žŸËHœŠ/™çh=íRzf9ši¹×L¨*Œ@ÄŸ„‰€u³Ø_a4s \bBŸ(=ëKZ…ìå¼½L¡=Û9¶c5þÅÛóvó–ó_Áw›n–{ ýŽ7¡o¾ç§}uãV¾ôþk”ZŸÌ¤òù/è8ÝÀ€ù}ðþmCc†óy«Œýø ¿O§ ¦Ü>ÂR÷7_“0ÝÞÊo­³w*!\‰Õ Hª£à¿†ÁãîP¿Q+ ßßË¢¡Ç(9g •~;LÎvý©WÎ^;æ6ë'ý†W M ,nHâ¾_êOƒ±#qQCX¿øžoÔ%þzbf˸ŒtÕrË E噚º¯0iŸ’ì2 ~¢Žù6&í÷lšØÕÔŽÚöÐZOLIÀÉU¦£·”føe‰<¶Ð¢¨Ž‡éÓÔ<•ÌdÀ¬eÈü"C­ýž£°÷¡D+'KDåb¨BþVW/¿&NŒé<…ûa&&ß’™ŸMeÙ«8Øf×ó±«ÂÊh™a†Ý^„@ÄŸ€BØî) ù6’M·±ø{Í÷aÕ¸éøÛì"Üq-:¿Íÿ½¸µéJ›’šÉ-߇ºç£kåÁÎã¹yþ¤”zŠ·ù#û§a[æc†”Z2ÍæWîs`îBO¢úqH èä!nh5PmnÊV·N¸¦÷(Aí:Õ¬!&ån†ò¤kFѨO—î 5#†-—Oj^Ä,8VŽ>Ë+QÒ2ŒQ³xn6'R,]»¦ŒàÛ…™˜ËÌí5“Yç܉qïcöí0:˜™¶fʱ—(£]ÿ/‰bÙ-ÓtƒŒŠkNí-ÞÄÃ4¡±aæ‹()yÙÎä¯ld|Ü%~ºbÆ/eYÛ92É*J/=»ªÊŦ-úc§U.òjO`…wZN]$ŽIbJÄó¯#•‚ùtäÕäØSTåb:ân¹bÑ>{‹—$q䔑EÑk˜ï`bêU…`³0F!ÿK¼ç¢íøü›xÚ_gÝf:Oÿ„N;&3xckÞÑ_ârüÜp#ojßÀ-©0oÞ¿®†{ü²î&7 _ê‡4#÷ãY¾õ>·Ì[¹ÔîcÊHdÿîxý†¯ܳƙ‹âyû{¾ ò#0n.s5ÃR¨ÞfMµZ÷Zh`0aJ bóÂÃØ®CUíš$§œ8àHζ´/ë‹o‘çUǃùiêO®èÃÒå—˜Õ«vOôó{&÷áËÇui솚äÏ)ÿâôPlIa¯ÌS”uö¹´{‰ÅÍŸO&‡&…4ƒëë ÓÂÆL›}æäš¹9‹NÙóêhçfõLÐÒ/¨‰LûÒšxXã†HšáþâšÂ£”ýÃMt?ªõ¢P cÝ®¥µA4©aC¥—º4/$åüõ_G•—UÍÒ1®ºÝ5#ó4ÏÈIVÙtÂHtI=KšéXwÐÈwQ „@ü¿Â`kƒMĽK?–D™Fyp/øS'æEúu8«vï'ÆXšO\¬õS%ânÅHð¿Lú5hѲ0—äÉm rÿæœFû&gøÊô¥, ŽadÍZUnÇ'e¤äYJ“çé?<[î“ ¶¢½æ2®y.kO&ËÂ86θØç§é,—WmM‰j™Põ68ç’90¢Ãæ3¼NÆywŒW~bꤣè0xË£¦Ñ»Â=¾î>•V0¬|ªåÍIžó)åÇÝ–!Ùå½Ñ…ø¾#î€M¹<ÿÈSÓÉ2M ʬ;§«ýßÝÑ2Ñ©L ƒ™€¤Œû\tŒ,&p.)9äZÐ@Íl*»é‘y‘ÀQ{n&f¦|e£ÃÓUâûó&n¤ï¦¹hv&øÿTÔsçÓ3¤ˆ„»ŽÑÙ%òt¸Úkb¦y¹51ú¤¼Žò³a3‹¢ütEejQÙœdÂn˜IpÕ1ÀS¦¾›&a* Ì´ÿ]Áœ$Œ‘@Äÿ¨H¸w‹‹WbC‰‰5ríÂ\TÍ”ÉGÝ7kÞq! ¿Ã'Ńñ¿ÂÞì"c>nFg“rÉ&³V#Õe4ÆpÙÎ×”*¼)x3ãW$оKöÉoRx÷|6W˜IÇ¢vY†ÌÂ/^Á¾ÐÛ¸–ªÇÜ…9?°'câ0¡©÷“£/ÖŠ¡ÃëaÐÌëÖáÃxäã“S>zªÏg;Ï[.mš:»Üy±5]KwA7غ#‰Ê=ópÞøOhºD6ƒJ½&RFÆ«”u—‡jîð[hº‚è(3®¶S™<šZ7ºkÂ.ÄÙ›J–1zKÃvÏÒ2n)5w½öÿ†Zº~Z }vG¥Ué-së¸jÂ"Í–†òÒ9ä'K xkƒ"Q&‡ôÄÈçO7i]xˆ‰Ï5…Y•ËÌì‡:f8*ÜòÖDýŒBÓz?^2cSF&w&yLx`æJ ×iBJâ:W=ÅJ©Ì8e&FØ ˆ?ǃÈV¢mKhR­ÕØ'Ьusô·Ïâ`‹ªÚ ™uäÈåô$¾m[õSÛ̦ã°0*hÊ&4ŽœÕ“WDÍÃ:®àÿ¹*omdܨ_)4â šûfL9z‡1#†ñí‰t)Ÿ=ã˜ÕÌýc_²lS.:-±Ž—°Í߂ɋì™Ü¿£Ló˜ÒÂú½$ë±±µÅ†$ éÚ&ìËöfNYKlãr÷ËHÀ†/9^¦'#óê8ÿ´AXzù¨ SNÃà :Ū4Ë®0ÿ tÉ'ãšöñÕòè`âÓ+ …>¯®'ÞFalDÖé+q sŽY­®­³ÌØš2[Ž™+³¤ |yÂL’‡^«Á«Ì:hm“08X…¥AÞ´p’«¦±nªL£t]lókÂÝÔð‘æv<2©É]pkŸ-½Ó4ŸD³ö*gÌ|J‚䢢U`.ÄI”Ó¼Ä7 èpOn‘ðvUW]N?½¬²õ´‰½  „@ü¿I|À­Ûø]8Äà8¾ž÷Å«P³È!fŒþ‘ÜÃbþ~,«}çÐÁ×RL$ðØMŠ¿ãËæIq‰ÌOÓõ<ÐŒVè‘cH¥?ÃQÚ–þ lã=N¯ÿ‚éë£h2þ º•w!Ê?%\âÝ‚©3]˜7ª+s·bÀÀNTÉñˆsk×s9!„#uh?£u³§)ŽÎ«!c»q0Ø9¹W“ÅX©Š‰¤ÄDísÆ?Qoq,´ÃzWÄñað?ò¼œ=d <4sDóbuÔ-£Ã3ÈÈ^Íò(¡§‹ÂŠ…¸vÍHÿ”ãÎ^3ãÿ–ŽÈc&.¥XqË ]&â,é%ªÒ1°¸Ž|‘&šjçJÔLÿÊD“4œ;;lÐ<Á[)–ßtßLÏý*~qib`iƒðV4ï ]„‹Ÿ„ãS[UžJ³z)™‰DT’–žQaÖI•ÚZ~Î$éXZRe’æsP9ùâÅ!ÏE!bÿ –]ËGƒÆýXÑEsèï^ãÄÎõŒ^ìOés^Ï‹$ßh†~ö.s¦Råú >¿RŸ)³+q wov¿ù9Ž›ç³òæe‚‚«3dìm~^†}]íE6¾çìoâÖª1̾QƒáË:P)§Õ¤§_Œ]ïU‡!ßTÀïè ìÜTü¿É‚¨ÎÌZŸ«+f±pÀû|Ÿ+9]ì4ï@Ö Œ¬y ²]q\|;PF‡„Ë™5ãdJ„™Zéîˆ9ô[öîáÜcGjÊi÷ÉlVP Åh?¸¦¤0vìÞ >=þöðR«ÂÇ4@s¸# (|~LMnpþñ¬,§c§V³É02N¢‘&$þ&F§õ4о¯ð# iîüz–—yffú13à §…#^0Ѩž+Ç’øö~:#oT¹ùá¶GZ¦¥û¿«ƒÄ£„Ѭ¾æÜŸ.3·ïh^aÒ³â`ç(ÓÂnAéâ†ëM´Oñæ³éRUbÃ>#ëD¬I âA&o›ñÌI'±ÆîR™O¿Ké”dì‹udβVàô˜óû Ðo»ä³ÖSWÒÒøsÑ Z1œŽz²ÅfmÍOñ¦kò ·À»`KͳëW¬~Ê$8–}‡÷“²§uã”ñ­YÑú¹ã—|­Ó%{5{ΦæG±Ü  ôAF•'KOJö^vÔ>{Ô¢Û°æ4®Sƒ%dtè niÕTK·É¤xoÚMnN}Šõ”²Q¢~Ur¤†£$[dcÜßþ´ŠÓóÉLwÍ[ðΫç‹rš!tUYtÄÈOOuã´ܤzzœHb›«I%$B5c:þšÂÃLb.{‰Î2]ªÈlÝfdWº›^;çÏueâCÌL>cæB¢õ{;™ÁUôÔQf3±3­,VÚ†1f#¯d>ÕFv/=ß–Fó¡[>‰-²æÍE×Q"ÈÄÇç­=´<]eêjß¹_3²Ô^Ï*O…4¡3é$:UÒ~ÙÄY[™¹uôp2óÎQM,´W¯´—DØ]…ûÿ¡8ÓÚÒ~bÁ ˜—Y0HÌæ*øÓ‰½o¢ó븀R&vŸP̤v¬hµðq¿'YÚì!ÎĘP5ÙÈ2ȨyÝKÉÜ»jâÈSí1æG óš9¢f˜ã)Aû~êî$VižW|i[z)-SÕ,ÛG+L:¦pæ „‚2  ·ÍÉ ×©äñÖñF’™ÑZ^uª&È)išU¾;n½Ù5/D¯åé‚’âѨ\ -áAþ#„@ <ˆ×à   S„@@„@ ^ÑHýaC‹ìâ&^._÷@x@ !<ƒÅå;¸•ÖÓxv)ÍrÐZz”ðmLùl·ž3ň{•ßw^{&=Ó…o”Åy”à£lX¿Žuë~dÇÅk߸†Õ«W³vóî=鶪òèæ)®ZdX¦;IJ$1Ѳ%%rž £ì<£xÚ!Á@ ã÷9sø=,Í¢ª.sà|ÄËÍ=d åܱÛÉSud-ÇùnÕégöQ£®qøBæç1ÿŽÉüI8ó s~ÝÃÚ ²õcÍÌÍ<#3¿Ìeý Æý#¨ûV/FŽÌ{ÕËÒ{s”5]õ{çô¡çÄÍ„+âq „@=z½›t-]’eÎ)ôlÁ3IL2&ÛHÝ̲¬¯íi6¥ûވѲ_êÔZúú”éKP‚X7hk-V^§;ÝyÔô«ùH2öjФœ§uÆ\]n*4(‹§lÿ=¿rþ‘ªocIƲ9ë`Ú€J8æéJ¿·¬S­$^ZÊü+ è™çgƯ ^„à5|ƒ‚¿˜ ãTëötÍ>ñÈ,:Ì>ª“S]‚Î_"ä1ª¼J…ÝRŒ½e]ébtÿj ÕãïòèÁÇÉÞºÑÃÌ=¿[i«%Þçâ¶¥üúãFNšÀ¦ÏªX—v}îø+37·¬! Pj§Ï¸–Ÿ#KÖãÜí;Êh‰˜Ãw0fè~êL[Çb·øºg/º…erŸ†ÉS… B ‚?ˆ’˜@|ÈB5#^(Ýú¶µGòSít‚qf*ͺ†’à–›<.èüÕbZåLg°•»ؼ‰Sá—¸{¶n2R¦ysÍ;Qxpù7–í8ÎýsWÙP© M+æ`ODFÅzžFȖѽOí *\ ÊOýAÙ‰:³Œa}—b‘¾FbLùxöL²Ï›Àûu—ÑyÅwô,n#¶à¿!–áð‚W—çMµaA§ÓýC93aJ¸ÁÖÕÇé4¦.’Bxp(ñ7“¸§ „K‡%^fñ¸m”úa«Ó¹ýeæÎÙO½©uÓl’sñF÷ÁÔ¾¿šó~2½»—äÀw Ø|3ÃÁP>*SWS3ÆÒÓÆ-HÉ¡¼y“¾9Á½{wqñq!DÞ‹ÅÈmîÜdæø"44e{•}ø°^ú/ù™¨ ½äù¨ö—–3õà~¿àBƒ:>ØÎöÅÐ9 qx–2i±+bªWÑ!ø Ý…GDÅÚrï§ÁŒýý¾&\1œ9LÞ\þ8žÅÌyj4‡§ bS‘±ŒldY‰OGÞ&ñÁIŒÚN–mÁj†B ¨áãK³O>¢YI·Lj?2¹ bR׊¸UíÎØwK’¯A *»W ë¤)ãñ½7#_fzªi°]…6”¹~Ž’ ~`B·îŒ˜>ƒÏ6Ä»ä»LÐ>Oí^…]ˆ“@ðÏ&ú·åLÏä1Øš¯›.ÕäÓ‰Ùùê—½D7|+ã®j,÷`ЉF,^߈œ±ßYk’::ÎÈ©ݘàô-cë{ò´ —ÜÊÓìÍì}ó‚oï‚«£-:½¶:d½K·­½zÙ'ÌR¦ú U{}©7“7²kýî´×çÑU¯82¼ï~íeR1óÐzòHšä*!!d%<:r¿²Íy£YMfÜù’Ó¿$ôíE¼YÇ¿ù£Y}« ½}SŠ )œ}3z0x‡ºxskÛücÎÍ®M¸Š‰Ú=³k\kº\œÁÌ>µÈeH9SÐ6fŽ ¡^ß·Ó^EUb9¹|,·^![=·4wYQ Y}ÅdByº=y:p‰ìÙµërjÁ¸¾ì¾àBU·Ÿh7'?Ó&ør)´5K» ¤Aðº BL‚¿“?kW\¤VÛº¸ÈÙ(îÍÁ ºŒí]ƒ¡»çdõÄu%÷8Jàüt¼ sÖL¦Aöââ∋O¬I°|Ž‹Gõiϳ©¼ì_<Šn}¶“·S?OBc¯tÅÙ˜D’Ù€{ÂTìº%õöÒgøVª Ãîáê‘ÓZøÕD’ N8>9T‡ï[í¨œÉÌ$ Áûùé€L¼IœY8˜ñÛCRzc©ÄÞØÊÄîŸðÝ-ÑÙU <à9ÄsiÉ0–;ôf}¿Žâ£‰wè°bµ]¬õk÷æ£èùã» \\–ú–¢l¿õìà‚‹¥}÷í®”³˜Ýp•ßÿ½ó€¯ñzãø÷ŽìIÄLì½)b×.­Rª(µ«µK•¿*­*-¥µW•¢5ZUm©QbS£F¬,4C²d'w¼ÿûÞ 7ɽ„‰žïçs>yï›wÝsÏûüÎóœõûmº¾5ZÙ%µ£æ53ŽÒ>~¦6cW~Fâ™'“ØÚk2ÛjØS¶¤5 ŸÓ½¿ÇW_'bøíhmâ8ëw )Òÿ’^”MO%M¡4¶yTìÐMV8ƒ×bІûÑþˆ¶Wg1ô€³¶6Ç>â/ä~³ÎM§°zÂÛ¼1z>µ¶}H#Q B ‚¼¡¥3‹™úky¦Îõ`瘗Y}¥¬ÿŽþ5L¨ÊÒoþÇœé=‘¯¼¶1­±Ar_)]Cº<0ÎÜm®´x³_.¸(eKßfÝš5ØV´Ê SÁ{P¬ÓxîþŠåa]™nÿ+Ë‚ÊS*ò"º~YÞu&wº¯ Š:㉸zŽÓIضW ÅjIÓ*©:ð >K»Âª)JÆ®ù˜7v²Íûá,—’kѤŠáô žðÇ®iJH ¬¬”ÙÞ©¯±,¦3fôÄóÂ&_jǼ¡µLžS"úÀBæ±£ó°a´ó´ñ!ðóóÃÃÃCts}†òü+Ê !!–ÁCˆˆÈ@ Áó-Rb(—/Ü V÷ #u$ŸãðŸrðÌ â´Oáá´Q\9´›=Gü‰“éÛ‘îË¥„{¬R7¯r3ÄÜþkDkEAB '\ ûe*Œdµæ~*¹¥ƒèõþŽ_½ÂñSx³ÿ—‹‘Ã3HhµæÔIƒÏ’w™öG1Ñq¤<Ò­XÅä³á³ØŸù¬‰§2é?‰æöû¢~ @ x¾qúHUÓµ›=G¼¯ð~Ãúæ¿DÒ6üì΄ èì$ïMàºÉ|s(Œæ== ʨ#>Ô—kÑ6xV¯Œ»­Âàp$s7Y…“mA¾¡èK× r±Ì™9uñ„ú^'ÆÆž uÓùÑq˦´£HvG -I1þüuZŽ{.µÜ(’¹MÞû¤î£ÀIKÀ ž5=sLðfU}0“ÚôæÓ§i>ѵËBéöùÊx¦™Ý_ü"""B¼‚'N©R¥D&xJúpëG¤v|Ô7š÷¦zã;¡>uÌ} •-¶º@þ:u“6<°Åš*ƒ2ÏèDsdî8ݨLÏNÏPÑÑ|º§®åíÏB©[4™T7BÏÓxÖZÆ”=Í磖^§)%od¯~0Ûg™Šƒ¬þvûƒn!­ÿÝË£™ø²ÇÍÝG±™q³Ã©™ú7W+ aætƒ@ä˜}ΞF#ÆS«Ï\>MtáN멬öTYÞ/IâÅEJC²2$[Cr0$WCr7$Cª$tRä¦áÒu!’Nã#Í{åUiÁ%­…c5RÈÞÙÒ€¶/HÛ¾.½=i®´v¯ŸtW'I©'gI/õ]%]7žª—îl%uxo§tÇw‰ôZ“aÒ–pñ ñ;ÆI]f”Â6 •:Ï:%¥/{YZðÚ iÃM]Þ[jÿ‘¾íßOú&ãÂï´Vz³I/iÑù¤û~כߔxM”ö&Ü¿^¯7&N'iµZI£ÑHiiiRJJŠ” ùùùIAAÂ×××X6å2*—U¹ÌÊeW.ÃYåYðd‘m{¦wÏ´ù™`•© ŠÂ½ÖßáðÁX*{&sý+*VOà ·?: Αg§©lØŒ+Þ§[õ4ŽÌÀ€¯ÏpÝç"Šz2çýWP¤Á ¿rŽ@­Áñ¨Ò ¯Ì˜­‹éw°qsƒÛ‘ÄéäuêÃO±ÇÁæAƒxt„Y¸O€¼ M©´«cßPÚ_ÅSÊå4?í¼yoKûà1S¨BŠ>¡ۮ¤ÙÌÆ?rQ_œ¸CÞšQˆ´°³»ƒ¤´¥xµæ¼:t:+çt'u¿7A :­I·<ßÚ µÁæ+¬lȶýŠŒÑÉõ_¤fÀFÂþ äÄyµØƒGy*Uæïc%ßÇÎËò µçk~.>‘õó{»zFK÷Ù/ÿiˆ>rˆô3cÆŒŒ4ç:¥ÂûZ^…P%žfÉä9ü’š%„üCJ)Ojy5ÁîÌa.&gÔôC'¾q ª™m‘Ñòû&nvþŠuëÖ²ní"ÞïèɃgÞQáñP÷1ù¦q‡X¸AÍб-(Vg(“Úú²xÅ)-ìO*?W<·n%çñp4™6ï QùÑ5m<‘AÁ„††ÞK7#¹›náð€•¼õÆ,ŽF=‚_¥»ÎOÓç³/؇_~<óˆ]”‚ç‹ÂÓH-Årô`M&”¾§jÖõéÜ&…9n0¢Z•«Œ©« gþ¸yL{» KœŠã’C¼kK&ÍìE¹ é|Òe<÷B9÷d"iͧs[âpÛÇÌ©R‰¤™ÓzHObr½=ÕûÍdîºÜoVgu­afïcŸp¿©­9½üú.¤CQÙKqÄkÔxj÷ù’ÙqÖ$÷]”kÿ|¾ë±‘15 Ö:Ⱥ ý¡ 7 ÁCJ"úN<é²ÑU—Äöø 6´®Ê›e•(”ö)á‚æ¯•Ìø)0{òIoK£Þ]Hýs?¡ eÆ"<ѹ¸ËŸ¶›~et¥¼ë‚ª+õ`pÕþŒdÅêÍ“iâüsùèã8zšR½ôí$6EÏ£ja+l„à?Ìó?YŸ”NBté6®u²Î±Ú—.9†˜4;бCeÑÒý÷ƒ¦Ãgëy»‚*³r¼›‰½ÓcÇ,ZåcÏ|Ýçß|Å7YŸž Uƒ™[|K»U¼>äo¼º×Á.ÇaޚʨÃÑ3ÿ˜¨ÝL~Å›—ÿœO{+jÇ"دeÄbG>]؛Һ³Ì겚º¿­¤›A™õš4´†U*r^sï’­XõK»’ “<Ò!)¬QiHÔ(Q«r‰‡î"ó»/ ÔÚ5ôÕìdÖ²dú}Ò‹ŠöŽ8Ûª„¥ẍÉú @ø(“õ=ÿëAŒ‚S±âæƒ@öEq·P¤È:õR™9c‰-+SÌ*…°ók1Òd›\"?÷yžÐ\â§ã•¸ì‹ú|„çÿê¢.ÛžwÞ뇛é;¯9Kâ¾2~&g\b‚*]“ZnθfÚdÍíëø¥yá"{©aÜ”ÊÐÅè,i¹l¡vÜÅ:sšnMÔ5®§—¡ziƒ <Àb“ð¤.]K¥aßòõJfþ~ •Z‘'$éõ'ïs&s=‡%Sî/˜ör 1'@„˜æpÄkÒ6…\Å7(š…=õÛ÷c¢§³È<óþ ±û6Øò]\Êç{³¡XaÖG—D†Ç#¯Ï ëR´1ÚjA‡[æuî^8Ë9ÛT«éQQX•.¬ ºˆP"‹{RF•QtëŽÙÌŸcîy-߽ɠ;Óøurûü6³YÛÜ›wƒe¯OÁöóU órðo½VÙ3øÏd“KÙº4-+râÁÑ¥Ûœ<ŸN‘ÄÙôYëÌÿv¶Å%)«J]=º-vj;c/®{ž βÁ×\å—_ü(^?•‹§6°uSfü÷°;+]šӅ…WªE-Øï´ôtÒcBð³Ê®ñ+¬ŠàY±ö™÷ÔGžg¿O9;xKX—)‹Ó]Âcõ âÑ«ñoß¾=ãǧG"C„@&(KÐ壯(·øÒ§N£³Ü8YBŠâ×÷‡T³gO—äÝúYÖ˜&aWh°~/™Ïú@m&cxëÝœùñ¼Ñ+ˆKÖsâÞ=­B÷Ú¤P†÷YIµ1?0µ•éÚž:¢"o“¸›oVfkm(¯È—§çñbf[‘”EHpJu2¿øŽ#hW\‡]5Ê•MæÈõd¨ã,~ÇGDn7˜>}:S§N5~"!B ÈQO8»€iÞ¥éÖo«wµbh- InˆT£N³êÜ«Â+^1l¹Úœz_£(+ôbh‡@‚rÏúgÿDÓ}NÒž5±¹º²êÃ9ëcG÷ ™R7³X'ÿÆðå8LU±#o¿#?æ¬ì"òµA ­©6>w|tM>’›¿å¢NeÒ@,¡Ó»ccf„Æ¿ÞíÀœZ¤8µíÁ _ma÷v¼î.zБ›Ñ}W1bÎ~ÚÌoËííK¹Rí]zÕ²?ë#àèèh쾚 2C„@`¬úºg>ó·^%µhmÚ¾ÖÛ¨T¼Þ¨†Õ%%66jãL»N֨휰71è ¥ÍÆ®`QË=ŒèzJ/´ Qƒ¯áô^“º[xú«ìÆóc¯R¹º£æF詽õ ÄÿªG(pÛþ¥Úµ¥ÏÔ”w1ܬÁ— 4˜wØ3ìÎüt·= !š­Ž“'OªGÅÀE†d”¸UlE¿OÇá塿æö± Òôg]5tZ¤²}™û#ö×öý÷v¼ï8𺱋‘-??LKã5º±ò@·¼õý_¼÷úpòj¶-•¤íáë)Ÿð›õpV¯ègöx¶t.¯ŸÆÒ>\(Ñ•”÷ž-êÂ~ÎÆ7¦ó°yL©]»Ü‘$«* ^¹”Ô‘#™x&††3¬Á&!ÿUžÿ‘Ôÿ ÞHêìê=‰7.䨀ÚîÉ\Þ¹ô–¯Ñи†ŽÀÝëðqïJ÷F%ÈWdH{™ï§­'¨r7† jEiÂ8~ ‚ªíá®Îé9Ä^ØÁî Wš´kIeçG¨ÿkïpæ§íD5F—òb$õÔÅÖ­[3|øðûŠƒI]ªrùI-B„@ðX‰ÇÙùþ]…ýýý)S¦Œˆ."´*+A!‘Ï'¢&„@à‰¯^Lr[Pp1×!'N—‚‚„\&³ìŠJ¥2¶—‰6áAàyò Ï'"OœR¥Jåë8á1ÂW ü7!¦çQóˆ2-!!@ !øO‘Jìã˜~‹èÙ2õKöGK†í68Ÿ±Ò}Nˆ&*-ë=1W.”–ŸçIæÒ¶ ½%º ¹Ô‚ÇŒÿmsÙxY‡:+Œ¬¹…o€–²^eä»Zæ eâ¶±T±4ž”ÈõSçI—»Éë¸~òÚû)Š>’mã{pvÈ!–vq6œËÙïÆñ™~*[çw¦DžjžÈS¿°Ï?í­ƒ¬\}ƒFc$þqUd×›œju¢û ÅE J B xœEªZA´‰þ‰ó  —èýj8I`ÔÄ®x\[D¤»%î;Aª5ÖVjÔò1 µq •ê>–Z{?ûÂ:2¼~,¾¾áÈ훞oM éÔ5|¤]K*äQ„¨Š”£rI{èøgç ¼ËÌdÔ‹ÕYòbÎëiÎ,aæžZ¼*B B xÌèB9øK-7tdïУDt­”åxù±·Y·4Âh|v5è:¸=eãel·%wÅZJ"ôF(6C{±MHHðMlåm+=IQJ^^þ#ãje] ~›~"¥ÿ×4»ëÃ7{ƒQfº.e_6XþËÞì¿,«ˆûzoPÉ( ²†;¾'9‘šW©t×î ¬`#~G‘‚'‚&Ÿ£OW 0N=.!écØÿg"o¼7––EqKûƒÉsüyÉ è’¹kÓY?~H=®0¯ëʬÝ@?׋|Ñy>åäíb lÚ“5©S.-çß*xeW%lËW¢wÒ^þŽÈÛž t¯KG¯Ò™+kÊ6ëÆkMó®D‘~ä2'‚‚B$©Dø]GçQG“UŠCñq¡ZYçü½Ðš(®ù'S¼VYœókåœgž]·Ï EžA©ªÍ;‹&q;M¢ÃÂ’Tµö¡RU;¸²ŽÍôf±ò&ìèÆÂj!TǤ:ƒ ùýñ +Î+Í8@¤7•„u(<ª'`ãÖV^Ãwƒ<3k‚zB¶~ÂBÛÙ,ϧ@H‰gùaA ÝV¡¡¥o¯bûì]”˜0ŠæŽù<ç™gO¿ž¹ø{#hê`ø¶ƒÙó¬ùliß§ü7Ù»h5%¨²ã÷RìyvœwF£¬Ãà»á~ûª¡à)qï9Ÿ/²ƒO†”ÌÙC‰!˜ „Nä }ÁIѤÈÛN)øEé3~g}${lD1ò+†ÿ¶2»ŒÜ ¹ÌE?}®²`¸zyO:4/uægÆŠ>fæ‹Öy¾BÚî÷èw]‡ˆBƒ=M:6eöšÜ0ˆ²²õчà}Äš6_”ÈŒÄÈëü‘ŒMé*T.aRŸÊÝ$NêXþÑâY½ ¿j‰úžðä8§¸’¸PΟsùž!Tò(CÑlïç.7ýý¨Y³æÓù™”¼4nió¿ã²Ê½².ýz9ó÷’ŠLŸÝ [cô)Õð]ˆ—PÔÔ’§ÇàG·ˆJMDèŸ]1©IHò¶}áIeŒ÷)ÉkËvÒ] á›ß². ¢l«þ jfu¯•1´hT®Øä¨n¤ã³þ#þ·+¯¡ð/½°!…éaíw¤Ù¬Õ¸9€Á…Їà¨M[¾0u¹æºã£ÉlI«KÓÊÖ„›Ar¯Å|ÝÈ› s"©‘ú7¾å1c¼‚¯ßºÌ[¿N¡‘ÒÌ9=ß§ÝõÝ\½{“ðÍ?`ÝcýªbzÖ9ªhŽÎ›À’•hìË™™*Þ\0—n)ëx÷ó›Ô)šLš›¡g‚i4s5£«ø³bì.VhJU)€Ù—Š3rÙÇ´wÏe˜¤‡¼n=;‹ÊÑ-{¸oxæ-±ê>†ÞNr Æ—Ÿ'Æ`-;õèù½ˆ;\8–Æ‹›Û±ûÍÃÜê䜣67(”˜‹w ^F^1ù—µ¯¿3ÒØ‘øûuÊ alƒˆûåÊÉÛrÄ™øgŸ @‘£š¯%à·/Yy¬L³W§Å©Í$fõqÊÜaEÓOv³úàïDV퉗n'ó¶Ú1x|GJŠå§‚Â)… cóY¬òeàO‚½bÛn²>H‰qH dzøõ&¸Ézñ’¿8Lä †«Ïì–o`m={HÜyÏT%›;'˜&Ëxb-U?øî.†ªh¢IøáÌ7ؚ̽Åëߦ¢J"ê÷÷xkÑ>Z7˜§kÑTùy½K)Iøã}úíºÌ°NøCÛ…Sá©ÔÓÿÜ~‚5yƒ{Ýwë5¾÷㩪Ð}â@ Ï\åý)¼ê,÷Ä1¤X*¾Ð`ßúO%¥²‹)êÜÕsvïS3r¤š¿‡Ñå­2±+©Ä˾”¸‡™&Ï錢˹8dŸ@e¸ÿ®›±é?œ„Mó99°;ͽjQöʆ-tçç‰õ1ø=Ä^:Md9/j8‹¦jˆB‚-:6ã³Þ„¼Õ–Gíh÷¥{†q¬IË*Ûù~Æ£5(´á„ßmO¼d²dsÚÖ¶Ïs5…Ås,V »x êN¢¬±¦© hý†_~Ž@]T•›â•9*ËÖÅ ÍÝxUÛÐ6eƒûþEãz5©eð‚^­¯ú××ÍODU® dõŒxÊFNUŠýßÂí¥ò44x\¥T—³ChaÛgòs©!lìÊê!3ØÜb9ý+X»”v›À‹>†íÜJ1|Ç«>ø8^ãvj8ž}[D¸é{ưxÏ«,íæ.º¼>ÄŒ­B ž„Bбù¦Ïù•j#ÖS,³ŒiC ò|‘뵆 FQà ïøiÞ÷RÏQXcc•DB¢Á»˜b%e7Æîã#\JnB{¡ÇNo0>UU͆<N,aa`[¦jNçšÍhæàOÏ“áh fÎú‘¯kîm3yæQ¢ˆ¾ÂÉØ&Lâ™íøz]/j8e<Ÿm­¬^t ?Wƒ—çÜ‚‘sêRû¥³sÒÚ± T9¾wéÚ5‘¬2Ô³\›¡ü¯Ñxº™ôÕúýƺ°’¨¬ŠÒ{Þ:jºŽ”h6xÞËF0ð;É(4KµÄÆé5Æ6/G³Î;yE؈„ /tjrwZË®ÙY7éÀÓ9êíR±­[úÚ$R$‹W²x޲­Z%ðáÄñ\íЩ}L2¬Ö¦wžÈ§߯³X2·hÅÇsZàpËœ!WàT¯Õ~žA¿þn”sÓU„w>iš§fÿp×5çÚT¢¥á™§NzŸ«íû2©U¨#R¼ý¾hŸñ©£—™ü©ÑŠÆÆíÊ´éò ëYáÙ¤m. *M÷Ïfe Rí>©;o«wçíêÛµªdßÛ¹á¾\3DXÀ²—gôóä¤2IV™Iîh“žž~­p|-I1±hìÝpµUþËs´$FÇ’nãJǼ£juɱĤÛâæj—FV Mb4qi¶qs¼¯*?ÜuM#-ríWCBT iÖ.¸:¨¡yqø°°°§×ÍU ÈW¯^¥L™2ól’l†”JevèI„Ÿž<ÖÖÖ• Ò2“&3éL’ôœMµ¡Æ¡¨ûc:G£›åk©ì‹ànŸÿš´•c1Üóá<ÔuÍ?³Cf¸D¼dàß &«ˆÿæ¼Ù…×jµ"s¹,ÊeÒ´¼ oW„à¡V«IJJ!(ÈeQ.“!‚gà=˜ÖÆämGGG"## ÖÁ³D.ƒrY”ˤ9¯A4P 2“ ¾°¦#Tedï!Ë£Ès"ð´„AÐóåAäî aZM½SqmÏŒÚwáA<çÁTL½‡¬ýƒ œxu:ÏIDATxÚì|ÕöÇÓ¶dÓ*½ˆÒT, <Qì"E±=Àg×§bAPA¬ü-€]QTAE¤< E‘Jè’žÝò¿wv7Ù$»)$$›p~~Fvggf7wî÷žsî½s *¡JL"‘"ʬèr%$HI¤WcI…*¼&‘HeÃWÙ×¥ "@(„ùŒ@%‘Ž ÐÐÍrŽ)i8ËÚN©ò°šål¥@•#¸º¡0Š%þ%XI¤êÓù7ôx!Ô’Ê帷b„-¨$)2¨%á4ì5€mÁ*—aEƒ@JË—/oÛ»wï˜kœ@åM"Uµ¦™ýÓO?õëÛ·ïæÝF8kŒI#YO‰oùùùï9ÎT´$RõÉívír¹n`/õÀf„l…–·$¤¥å.±®ëéì¸8*V©Z­i¾$IÍÙK­,PårbQ T”Dª~1®\ÆJƬB¨»+£tçO8P+%MÓàñxxKm…‡ÃY–©†¢ERÀjŠ(êL e1ìL•!å€F# ÁÆ#66–ª)š ÕQzÔ¤PbIj#XÓÊúÚQi­øoŠ6ëN:áUrX³b–4T‰tü 4I(,¤á\^š¬@"? e¹ºe¹»Í("‘j R!Ý]€žp!‘jÒ²ø£x“DŠvÉ œ,))D&|ùYÈñ9˜`‡îñB‡5ß 8]°š}Éæ„-dðÎpg"ˈC²«œ*§ +G… ³ éL{<cBÎÑóq4G@bRLÀ˜0 ÞÜ,Hñˆ àö•þͺiCBbLåÇkÎÝ=fHI¤RuJq% Îíc²Ý*WÍé€]€c&Îèäæ±cpº™‡lM€ ÙárhÈÎò²×þ1|MˆAJ¢¢©C3e$ÆÇyÿ Ûð_+øÜsp:ÛÉ^³kn5Ÿ§—ýgJ=bz‘éC]|#HI•’š—¯8§†Z€Õ´@ôŠ2̬#(°3seŠ D§ÿgƒáɆn¸£!'Sƒaç“R]HJt@°¬c$íÁ[_áS™ b ÈÍñA°±ëÙM‡È 3›Ïb¸€]2tÎÄx8ê¸/H’*%n-ÝYÙ(YåWbk3àÉVጋ‡K(@vž{\ äÂ.A#XæOEëu¹Ì0}ªÊàgdJ2œ±v8 úáÓ ÉÜݸ§ßÝ5Ô¢Ó ¢# ÿcšîÌlfÅ6>-// (¹îß/²ßCr·æÑGE£FЪU+´nÝ-Z´ ¹¶Ñ$É„d‹æÃ#2ÝXbu7Tm¼3—Y³ØbœpØHA«ÆháVT†Qô ´–Ÿ‰Ä#9V)‡7{ªn¸M?¤*»„RÑ?KòG«YYYHLL,•ʧ’ò}dIòBáÛöíÛñí·ßZ€¶lÙ²´Á%ÕVXjBU5ø¼™p .?*ðåäA“c`ç=² ‹Y}2ƒT À£™œ½¾»ÃÁ鄇WÒ˜XÈG,Î$”w A”ØwúûbÄJ¸¹JnE³³³ AÍÏÏ/´6 EÔ›(î†lÛ¶ÍÚ-Z›ÍV-ß8´¢XßG’˜ûç (Qòw @ѧM‚hzàV¿Åòå#—½¶1«j8™û[Ø–2 5 Š|lÁ¡ׯ°ïÑŒrj,S¶±:â·¤ºà®TgQ(¨GµŒFmÊUçj·Êb•-[¶à›o¾ÁŒ3ðßÿþ·v­þv,œ:·¾¾Ùzr·pÞßøpú‡øÛæœÌexý…o±Ç¨ ïâÚ^#ðþvµ2Ír36`Å—ocÊ=7à‚î·à³œjj2<ì²ÙaS fmt6ª€Á]‘àÍ΃ Äôyá•ì…Ã3iòrrç-* 9&qöò.`ÂWcA–à>†!*3­GÜ5®Û¶cyø,ø=§^6÷o‚EwtÔ½íÑ2ž¹ƒz,Ú]2ÿ²q``Ç!7¤€ÿ•»ðyLúö|ôÜ–µö¡uÌ€˜ÐÍ“elš3S—ª9à°6áµÆ©²smˆ‹=W>ó(.m úöa.ûüÍ-¼¯EÌܾ˜Ô–hÛ¾:^x^™Ømâ«Å·a. c4Q€áS!ÄÄÁÉ,¦×ªà6fñ¼(ü±©›…Œex ¼ÉEãšÁK1Ë›•é¶:Štëùgn6lpÄØãâ'æÃ] ;"9âÀÎõ;ÌÅöiÇd†‚ F‹¢R1¢ÐÅÝ¿T>^fì]ŽEâX,Ý8 IVEðâ³Lç?6Ÿ^¼X}[¾Ákïn`µˆhÂOïÿ6ƒZãƒW^.n ©Þƒÿ\Üíoš†çFâÂûáóÙ×"Ír ìyïj\òõXòÖÕhX ð|¤ÿáÅ€Yßa©ìûÍl¤oÈDR§–H¨Æ!“wÌ0ç–ÿÍ¢=ñÌWÝnxYk#³Ê-17׿ŒG‚õ¯îÉF¾áD¢AíΑ\ ³Š2‹cœ°ó¦Õèõe76À+ì.¸BËÜça „ºè,ê@2‹þá®®âúJŠÂ.íA>kU4Ö€Tµ:äÅŸ×Ø RÞŠuîÜÙÚ¸ ¬N¤h„¶à·7p÷¨¯‘·uÒûç2ëÝË*’Vh ɘ®£ð\WUÊY:çÿq;^zü&4‹*”›‚”Øâ«Ù$ z ã?¸w¾ÛóF4ƒ™> w<'㡯‡4ÐÙ"±Jêp.êûOû W®Ûªñþ(1HˆBfîÖÄŇκÅ#ÙЙˆÔž{ðw 2‹#+ðÝÜ ³X8Áå(Žk·GeáõId÷ ÞiG]ínŒzw—M•„vÇŽ…ÐfddÔVs‚¸¾ñæÌ~X÷`¼Æý=}¾}þ^ü¿ ßÎÏAA§£ÍÅâÑËÓ,¯Ëüg1¸í} Ó0Ì~úÉ"rÛbüÒãü6©+dó>ù æí•­á Sh„ô™ãpó¯'Á—þ2µÃOŽÃR~=]CÃKŃ›¼:!dŒÏÆ ‹«ýÏæ@Å»5l1®2ËIª«pÂUrL…¹Çe_2Ëìt¢N«ÎŤÚN:Y×øñãk«Ë¾ýë±|©Œm» €^¼B4ÃÀûfàá“çâê ;ðÈ+¢½ì,ú “†Þ‰ù9Ix㽸¿kQÑ»¿Úkökb*.~„Y¿cè´Û·á­—aÍj°qû¬<Ó„¢ÛÝjøKxáª4z²¢TSî/ͨJ\Zp{÷îÅ!g™`q•Îm3‘»aî¾þqìþ!žûó<ûî xnI&Ú֭к–<χeÏÆ»»á´”PSd`ïªÍ8ç%¸¿Sˆ'¶Äí ·bä¦ÿacÊÙ葸 wôž‡+挆g]ôkYá}RíÆ Q izz:>lÍ4ª+2 ò!wŒëo8òµ×A×ÿÂSÏ6C§&%#/2V®Gƒ‡¾Ã«WµÀÒ[cqj·!zFQÑ{—lÀÏažÜðyè=þeLí¥»Þ¼ÎÃz½t\nìû c/®?¡û}G6àÝÛ&cÞäExcHh¹»•ŸÍ1{öllÞ\´Ò~ݘMdâŸô $¶ðWzARàýù|ÛürÜÉó‚Ðch7úL±^«% ÿþ kô¢¿Ó·#FZ¸¯9Œï'ÁÍ©¡Î©Ž]«½è]òУËðÐ{qðö/ðÅ¿’!†TåSnÄ;_©¸ö²ËñŸøïñ|ÿzö ­¸æÍ›W P+$ê@bñÞ?æ ÷}þ}ß|L¼çO ›õ,’…²;›$9íÞ‰(ò‹ >þowx\0áE<}VqKú卨Ší¾E¸Øl¼ê|zWçÀÔ¹¢ñH{ÛÑx÷Ãøôš‘˜µø ŒjAi4»·QéºuëJíKII‰z+zxáØ^pæž–ƒ5³&áþikpú³Ÿàîâô©ð麵˜jÉsMà ·'ˆO>ÖÏ‰ÏænDÌÙñ¥:stß,™qîù´¸%Ýñ‡=Cb×mß,Æχž^Åô]‹ñÖ‡ïa¥Þ £§ººÝ‡Ïï†Øœ­k×*¤H>{žÕYsèN:é¤ZøÕœû æöh†²g§˜´èYœÝ$¤ÇÈÞ #îjƒÆbéânsÕC¸¡™\è »ì&b/~s®oUR m¯zÓÚ^‡óÓŠCºsÉWø§YÐ]VÐöæ15ä1Va€Ÿß¢NdI-ZIuPB c“€¢MüOøð7 vÃ0¶U梹¹¹ˆ‹+?} ô“O>Á¬N£ /¼;vŒx¼×ëÅ{g Šû†Ó¦M«ößF"KXÕ÷‘(Š­àŸUéµÜ"ÿ¦‡lf­ZRn ï¾ûî ?þüR€Öÿ'`H'ºêT _»vm©}IIItIÕ¢’V°ªïOHH“““Kí»è¢‹¨v‘È’F‹n¸á4oÞÜzƯI“&¸é¦›Ð³gOº‹¤z­Zí8ª QÇ)ª¬d:ލׅD"w—D"¤$AJ"‘R‰D’H)‰D"HI$‚”D"ÕHù$&žÃ%Ú¿‰D*OÇåQ5‡Ãa­_m+ÏóÆÃY×a%¤ÕrQYFll,•.‰D1)‰D’H$‚”D"¤¤z+ÓÔáóúS"ªš6³·©ûàõú —ÕiÐÔÇ”õAJ"•ÔÍó•*°ñ<§>7<¾ ²cT˜æÓ`Dä“ãa窥)볚RµôîÖV¶mÒ Î¨æÛ'Áéd–ÎJ…;וç"µ2 ˜Ð™•õI À@U°Šà·Œ>UeµßEÔáuû ØÌÚú‚Çø¿ òg•PUG:ªRn!Õ¢ @RŒN›èÏoà ²I^N'l¢ÀÞzᑈ·ÞŸu¬Rî"Û`*vpìŠåIŽ5xB |GäÏê˜%%‘¢FBˆ›ë5!;d ²âÇHPBÒ’[«|™á/ù3ŠII¤ri±Ä¬6“½÷ƒ¥«kE/Ãç…—Ç“Vç Í0ëÜ_J’ê.¦² Q/êu5u :‹?eF©¨8àd±$Ÿý&KÜfû$ bÀ4ºŽºÂ+¹»¤º ©(ÃnÓáq»á8z"ìvÉïñŠRQÂdfmù¼m?¤WØíépÁ!jðz5+Q$·¶ºÇÍœcŠÝÎÎ÷EüLë8¤üi“h`Ï'ÿóÖ•T?\^Qv F äb„ð ’—\ü}ag§‡S‰pý²>«ãr@£†`ãA½ÑõU¡^g/?.F›[Ðh´Vü7E›u'‘jR‰D’H)‰D"HI$AJ"¤$‰ %‘R‰D’H$‚”D"HI$AJ"‘J)jfÁ»Ýn,Z´ëׯ·6KMMÅYg…Þ½{[O¯,^¼¿ÿþ;²²²””„îÝ»£_¿~$©ö~´Y€Ý¿|‰÷Þ~›Ïz ³†gàùñ›Ð÷j¿º/¸i}ÐÉÌþï!à’ág"Ùz®1¿ÌžÜþwࢴ0í¥º óß;€n#ÎGSQÅ–¾Fv§+УQä¶ÕýÅ-¸rÇ=øjB[H9âú¡ûðß…ÑF¢ÊNVÐéÓ§ãСC…ûöíÛ‡yóæá¯¿þBNNŽõ>¨Ã‡cá…رcn½õVˆbÍ:¾í_aê´w°pñ ¬ËhŒ«g¼„'®nÑ\‹?VlB—Qí±æŽþ–þ9>ÓŽÀy9ßÏÀ¤¥×⊛;´?ðñ”ïÐù’;Ñþ'>˜¶©72HÍ­øäÁ`{÷ri(ùYXõþÛøßÑr‹´uk±ùÈÌS!x×â¯Y˜3=9ÛóÑ¢U#¤ô¼#ÎI­×v¤ÇAÜ‚†ª¿ÿþ;ây›7oÆÊ•+qöÙg×l¡%4C×AàÆIãñòEoàœëú …}à•¡8lHêr3æ|×NZ†­jt6 }çV|úæoè~ͽػyROi„ÍËð?UDÜǯàeF˜`o‡KGõCüO¯ãíJÜÞ[a×ãË0ÿY‰Uî®sø‡¡³s§¢ç ·¡ÉŸ{àìÔñÛÚ¡evO\Ù=‚ºmš~†ù 3àIÿ žÑß`d7Ê*Gƒ¸‹[•skRû·§#?_ÀoK¶`kÖnÈ_}—¤ovçlÇŠ/¿@s/»÷Kž-Yh§¿Œ¡£·ãŠ¡#ÑùÀøïU? Ç§ß¢ï‹ÐdÜÓ¸¼—‹YÍMxmìûh>üœ¾þs|êeîrïïür.–îÞé  ýŒ¹¦bÈ€‹píÿAÿ¤=ø`Â3hýö…˜×´ì½/ Zëøue6ÎÜ ‡?›ƒeicpn*ÙQ‚´’ªÊâÚùùù5Š4Ÿi¥80L‹™­E#5öžÆß›þÕσ®®Òn0þsÿØ‘…wV/EÆ–™xxqo<¾ü\tç± 4v,_DQ˜õÔ¥Ð÷WL{yš\Œ1/¿Ž ƲyCñÚ«Ãf1Ì,¸¸?}¶ÆwƹG6bK¼ŒŒœæèÕ¿;Úÿ¢àîñ½±uSô!@뜢¢w7%%å˜ÏMNN®ñ"kzö•¸úª¡:ä|´Mj^W\̬y?\y%{ß g ŠËÚg`Îk‘Ô*±tü§ïÀÌ;þöö[ðÔ”U((³Eðàç'âËnSñX÷ÝØ°Ë‡ýÛv¡q»ÖE m‰Í1zÎ[¸½×©HÝØ³qtß.l8‹ö­C’Dd-|}¹¿ÖR%ê8¤§Ÿ~z­œ[U·7?c;2þù/ßù(>Ø Cj–ÎøûÏOqÛ5o£ÙÄqè0¥êo3qÇØ±;vællŒ!/ÏÇ{3& ý—·âáe¹z¨xj¤¶ãðúÓÃpYÿx,[¸K—eâ¬>- !5v-³÷<„>^…ƒ&käF8í¶Yø¸÷xa‰ »vß-ݾu¤å!ÉÝ=6wÞyøù矑››[©óÒÒÒÐ¥K—öu3±bÚLþb¤íá¶…»^~—Ù-ѧÇ6\>p2®zõk¼4°±Õ r륜1 ÏM¿œ¹»Ùxÿš«‘Ùö$$´Æc/_áŸþŒì^Ao„» ›çŒÆ€9Øî»÷\u#ºó;uÅ4pž6¯ÇÜnE·NlÑm<³aŒúv=Í~F:–¿x'f§7Ãàw@æGâÕ½ãðÍY6ªñdIM|eÁ믿¾RC)üœo¼ÑZ¦³F%$ åYWá‰O—`þK£Ð5.ðýÚaüúúm˜¸Ð¸´‹1ú_Mpà›˜µ&×ZnRë7;v(!c–®³ÃgÏ@‚PtKõ½ O½ü¾žÿ zÛC¾;¦:Ç@þ©Ð(tÜS?ˆýyÉh`äÁt¹ :ÚãâóÁÖívŒéÕ‰¶´¿nÒ6}‡¥é*Õz‚ôØÔ¶m[ 2¤BÇò #GŽDÆ k¥ÈÒz]Œn©Še#uÃDæOÏaX×î³¢ ¦¯Ø€Ï-Ǹ»¿Ä–?æbβC¤¦á³–åy4}zÙßÓm(†ŸÓöÐödz Š·ZMä¸)8zþ̱®ŒÌ¥¯aÑI¶â°õ8}‡´À_ëã̼)èÝ´'>î8ι/ãÇÅ/aÊÂ# õÉÝ=fñÙEªªbþüùe:bÄ´iÓ¦V«ºf*†Ž{’ïÂÍÎFÓ·‡ãÜî©þ}à#½†ÁŽÕü×@ ë·(”s}²¤$RE5 yU¢lÅÞ@ÕŒ@CÓÊø-Z©[¸|/¦_È5DÓ¯O÷_£Ìë¤$RÕ  2Y„(2 ¨È0™Õó¯$kÂäyF%ÑÊ-j¥=,4 >+¡°iYJȶb×µ@îÒ2¯Oî.‰T¢ÌêB¦x Ï?ªB7y¦R‹2f%¹Udÿ$;ƒQB®ÀÎØÄâî³!r‹[Îõk0a)AJª_ ²#ˆ–唸eäÉ æÆz}6ö^dÆÓÖ2ûT’Ínc”u}²¤$Rhd°w=¹õüÉ„™ÕSB8ô[AŸžÆ*º>³ ÐBk[Öõ)&%‘*€)3™õ3Ì %Ô¡K2$n9u^U/ìä1Mg2¸Ä ”†8½ö©P5J w¸¬ë“%­:|X’ã÷~tv5Ãÿ(\¾8Rlwúšè¡4ØçßfíãØ¹ìœ½Y~aµážS%X±Øþû€>-€„À¾ué@~# ¥´a†ŽYKÅ€êõBã`²»aSC$,–”¨Æ\WÞAÄ]\Å?´Â;Ž<^˜v'l,Æôøxìi²ëè…¶‹+•uýÒñãÇWêøiÓ¦E‰ÉZá‚=&³×meOýdÚ™+Ë,ëBT‡SMœ[É=WÀxv~MM´öxe%Ðé,ݘENe×» Å߇ñÑïNja¤õ\dIR¯€?%³ºø pþ/¶´añdJñãþúKÀ\"BšÃÜÙûV1Kª›˜µmÇ€kdâþD¶/ÎÄȶ`1“‰ù™2+:ã³Ðìb%?¤ ¨Û Ö˜´¶%²øñŠ$àmfÉ1kùë?À)»˜ÝSü8wsEE¾NòÙÓoûŒd±í3™Í-iv‰sÙwµnÌܼÀÜfÕ]‚”T¤À•ÍÙ‹æ&öíð·ÓÄä¶~À! d±È=’]ùïð1ëùÔïþkîÊúŸab³Ô¯/0£‰{Ð} Hë@Lz×™ŸÏŠß½½BÏ«]Ö/”¿&PëyLÊ-èñpÉ4æ›äåÁçSaèz¥,êÉ ¤ì<æ’2Ïa 6åÁ#ƒIÀls«ì- &2”8‘3°%Ð}ÝáÀg‹m¯üïyüa°s‡6f1nª?&ÝË\^O³à4°¦ê¿î%i@Ú!¶? ­&~SQlˆ‰…,+dQë»% wsc"Ï媠wÔ‚\´jœˆDWì²TékõërlÏÀ0û”xa9×èß-ºï™WÓ‘•ïŶGa‹‰ƒÃC Ö玣îÝ»Wh_E]\nA9 =[5F£„˜c”T¶x™ò²åeÌËš—9u*ÕcK:hÐ ëß5kÖÜWY Ê·üœ´fT‘¨sûx‹—1÷V¶ÌABrJ±X•T å‹H <ØÚªÒI|ÍcÐD—î~ )1ÆÎÊü¨µ*Ÿ Šj}tw«CA+ÊöÕ4\Üšt}É*sÓ4rwë§%­8‹m†Aw¾¦ï+ó`ù[Ï]ö“5=Á-ihGE(¤Fm@jìÇÊ«q°ÄW›¾\Jß„5K¿ÆGo}†µ9%- _{§Ä.ïn¬]µ¹uÈ(ù—+1ÂÞ¹»Å*¯,fmŒþëÛ1æ7Ø¥ù¿NÇèk‡cÔ-c0zðù¸äž9X²n;þ1%žn1‘µ`.¾õCì Õ·aÆ?¹GêC`fm”iX+Ϊּ$ÈÙš«ëêy .i ¡ÇÄ—1mx´ì?c{Å‚_òêþ H¼h"FÓpûôµÖ\ >éàë v: ÍêPXmÝÝ`yŒS2)&=Q⣭yX3gìÌÀÊ{pøÉ8zË8œ?0ƒ™…žCØ!ù«ñâÓqÉ”‡ 'æë»aƬ•ÈåÓêOBÖ÷¯ã©ü¦h~ÁÕHX¶ޏµ˜ýÆ&ÿߣhvþ(\ÒV©3åO±(AZ¦E­ÙFº\5íÔÕxæÏ司®þ82{2^uÛÑZ_€'fîÄO:r[tFïySñ¤Ù îŽzbèM­°rê øæìðñ=夤àþ÷­l€nOöD—:VO¿?v{ “’Åh¿aG–  Pœ±PddI†ÓÙ—N|ƒŽ,Ãã7ü íähj¤2”Û⊻Æâ´Bw7i-ãW´„¤ Ù±ÿ«ñ·Ó@RLgôìáÆV1mÏî…ö iH‰ %7·jýF¹™ÈÜ¿3Ÿ?7^àÁ‡½aôxVx·g>ˆé­>À„ëF¡Ëu7ãúg£e\Ð2jرdfmÏÆoóâÒ·^Ä'§½‹ ˇ·¿‰?w´E·örݺYPê8ŠªZyß>|9Þö¶ÄöÁÈ‹áíÿ[Š]ù.ÈÛæâõ…[±óû×0{¥öìýHßô¶ž ¯×ŽîÃÆ£Á¹Ä6kƒVçD×óñÃÒ…øµõEè›H• %UÁÛMAÏ[_ÂÇïÞ3™+kër7f½yº§tưû½C: iß[ñÀ·âœÆMи°Q඘YØ8M—¸M¶¸á¢íxhârt»ñR¤£äîVV<Ý‚SÓ ËÑå†ñ©in­æcÒ¤æÍ_F±}(X‡¹ÓžÇÿ¶mÁ¾¬Ù˜æ“°v¯ŽËCOÍ_‹Õ0¤eéxÓž Í££UK'ˆQ‚´Ò:¨Ù<æ¾Iµ†›èö8¢GÃÄzbl ?ݘ»ûóΧo®z<ä{罋½Æa Ÿá ;¥5d,z£^sᾩ­ññm÷¢é[S0¨yô¿Ðxh BʳPé’R,UÑÐàUMì]+0#Æ0t+7‡XæÀÔ¡z È‚¦•YÉ&[ïuþ]¢^ã…ldîÀ×`»×§5qÕ5k>›1«=)è ÍÇK/æcM†ŽË‚FtÃLL|Æ[?: úŠ'1è‘ùHÏ;ž‚V5Ã=oOÃ5­eœïx7_w32g½›ZÛNÀ˜ß€æÓ¬µ I†,…$TbŸéÌ{Ò­lÁóìÊ®gV~R'þ–‹âÀëWäµ )Oÿf%Ve€jìOy*sñØrdð´tª!i¼ì„­:þp!ÌŽ0­wMÏÝ5³WáÝ™¡Óm¢-/q½Îz Ú»­ƒž,‹?W¥.†Ãáÿ#lMúbÂë× gSv@âh<ÿæ0l™õ Þ•nÄœÃÐ1Þ\Ó‹ŸÂgÝAox žÉ[…©Ø¬uŸªi‡]¶¡¦²º%2câÿÐ2v»¾#†gg0ê,Tãza£ïñYkä(¼î³ºêeo6©FC Að÷ƒóM Ù”ÀÆ}C{û÷ÝÛ>` ü0žpÕdŠ¿Å²r6fñ‚ó™•Ð?„AÍ ®°pxJ:©ƒAª«©£XJôÊ7¦ÁßÀ[=ûnÿà9Û¯ÖJÕ–eµ Õ°/};s:ùQ5¨«þFêIM!ɲ•RW;þli Óp oì=ºTáƒÇkÂæ´1#ÂSŠ”ÁzË8dß)¶L¦µˆ¹U§Ð³Ä`û%§=°Ô*Ÿë +c8J^¿šÊ¥s©ïÆ l¾À¦‡lf…-©OI¼UÑ`Jþåî"Í$ yç6©*ÍO ¥cô‡u³­›l©à_¼Î þbÿû¢ŸD]-õÂÓÕuv_墻)òlÞªrþ?æžêª×jÀ žsÔ¦s  3ø|ì›$ÀW²ï@ôƒ‡K욢¢ÔøÈ1ĤÌÈŒoÖHY…$ŠÅcRƒŠÂþ!by ›˜êãY—K¸% RCã1¥Rjàˆ'“ z¼ %7X–S`-&šÇ¡¼°u¡Ôò“¤ú£Ð[ËW€4í6ØY0™eõ2_U´¬ Ï]j+jüU‚[c#B‡—aÕÙе‘…¨…Ô ¢YKÅÑac@{!ë ’©ÃëaHë¬îVâçÆ¸b?¤¿]Î\X‘ÁiW¬Vª”’ãüü©n¸ b,)ÿ#Ý,>¶;è~û¦¹x ç:Øõmá¯,ý~š^vM‡Ž1­t|Û >̶äÇ=5¤Îm\hÚ4Öšà–ãPŠU…4pŸ=ªéïs€5þöÂÜ9†æeŸéUôeæÒ:¬¸“ÃèÉsŽX8ŠÀêg¾ Éå €ÁzªìÓ` ŒouxF]L*;b —=ÀYD/ï±uDvu­G­lÁ‚òæ+8;ûã©ú¼|~sÜ^óV´vÖa(¥Ô8®@JD'sõã˜Ç`hRÆhÄ*Å ¿èØá‹ç'šøé€ O¿÷ÔÆ,þ:j`³Z?áebd¬XtQ¶GøLb|†³nÌj2@C®à¯ûýè‚´¼Ñ[Þ*2·Òi—Êìù$ÖÒ•Š+dTï\^ "3Ö@£d’KË4 ƒ™Ã‘͉Öòç±_7ødàÓu:~Ë4áÖLæZ{"þ^}N“ñÜI&îÿ·oݨÀ1&öñÓõÒ`ÙDæG¨†~B¡Vûåê*$1j–ÈdÖYQ¢*ogã"Rò ,Ï ù•6æ~³ßÊ‹-µl v-h/àà?Öæ¿FCù„Ö#zÉ(øYà wÙåpng g²†ª “‚Î!k{÷èx5í™X7D}×€xcá3P A‡5öÆB&k»­Ò“¤ÒÒdLn¼ò? ?ë¼ì}íÖi˜uÅõa¾³ÙÉ2L50þ; ¿¾8¾‘Œ7OýN€¤¤bâ–ñ né#ã4üñ$‹Á°x´osyþð©:Æ­54¢—ˆ«;Ëlßiàä–nîõ‡“Û)˜ÛÎÀ—ì³ïöØ µQ33:䋸¯«„;VêØÍâÙÿvñÃJ˼tOÒZ·\Ñø´…€DæâÎûEÃJ>Æ!aúÙ^Z­!ÝÅ˘Ù…V1íT³OðÇf ÚˆµëØ›Y’R%\Ù\D«ƒ~HO>YÁKÌ·ýd…ïf x¦‚×ΰÑÉZ>¼x(:Ò™’È’F¥tIÄÐ.2úpJd-]Fž.[‹\ 6 ¬1;¿öîÑpS–ˆ‘í$Ü•äß·{—†—Ž ÝŽèÈ0=æ¬Ñ±/pâ£:¦,cño¶õ)–o5pMÞß}x,Ý<ÆñgAz‚ÈÎÌ߯þæP*":%›X»Ÿ¹ÂÜÛЭ¡ÿ†ðŽXS5q€¹ÈÝ Ã~1ÔZÁ”8æ%ˆèkâžU dæÂ2l2 !ug3@¹¥eÀyídÜßžYÐC:~Ž•ps'ÿ1†jàsïÁ(2©´æA½G_¬Ó‘&Á?Ø.úÇÝøä-™ÃâÖñâf)aîòQ‰ýà!oçj˜w4d'ƒ{P+‡ˆS‚”t|d0pßÚZ±cwìÒ°£äNæoÏß„Rÿy74SDR‡ÎHØú;¶{Lˆ±íÐo`W4 ,Òœ³õ7d¤tCûDª¦&7[á uÚî_ðcf+œ×¥!*Z²¤¤ê‘¶î<ùÙNxÖ¾…¾^‚¦ÌÃnû6|8u>Ò ÓÓèØõåt|²EƒoÙý8ïÒ±xàÁ ¸êì.¸m~–F¡™ƒ_‡1OÌÇAzr› %Ug ,Âyr/ 8½‘Uè‚Ô]ûu?©ŽK¾Æº²dƒ•€YφÜÉww‡«éHÜyi¢µjƒwØñW?Œiúû8=#HIÕiYêØúÕ‡XÉ'‡v ˜yøyæ'ˆ5§1¿V?ø¹gÎ< ÷N~=¾‹QÏ/Æ.7/AJªHËÎ@'Êr©”z¦qïn ú$!kí›3ø¾áYŒnåC®Ö×>?—}מw fnR©Œë©¨ãè¸ËÀÞù“0é­U8|øîÿs;Òó3y8;'îÀž™˜úXô×´˜bKÜpWîšù²vÿˆ¦7ß ç†YxzÅz|»>ýÎm g›{±èûvâ(uAJ:fg¥ñ…ã1É8€AËáÑ.ïcÜžh³p3úO:_\½7N¸Þg¾ÅÞ’§š€£ëœöÒûèøæûàPûë9l|¾vâ©€ RR5²3‰.;$¾Ú:_@\VÀóÀÙÈ¢ ±ñ1ÐÃ%Mçÿ“Z¡kÚ.¬^1‹?ù‡vËr6a×_.Ü{Ç2kuuÍ׃Ÿ|Ò„‚”T¯—ç¶Œ\Ü<ß«Qr’T ñqR’‰œØËðß)­ðssÏLþW¿Ð“o… ûNEïÎñ”qµ^ûb¤‰Kî?ŒÄÔ†þ7½P•X¸ K_B«K¯F03={—áÓå"NNS±ö• xlQF`y[à‰Ñ·ãí'î@ Ïæîózàñ°2ÕŒ°Ë•šºÏÊMª—5SÔÊgTü+§×ËÎ ÙÔ0)AZjÒQüoEš¥dá·¿Âܵ ›·BsžäJà)m%œÒΈ/i}ؽd1Œáü¿žÄýKÎÄ“÷ôBŒu˜€ø³îÇã%¼rûsX“"–+Ôí….*°Ù$V\nx|%@eǨ >ͧE\µŸ'S=ì\µø1»7<\pÙµt³æó¤ǿ&áè²çñjÆ@\óÞJo‰“Ò7 é%ñxuà“8|ÑhmyÁìÿkVm͇Ã.Àdî¯WÑfø3˜t©†oˆ¸ó­GÑ~Ç×øìëß‘e,ÈhqÍ ˜yï…hn?õÁ'(°+ žøË®ÀT}!–΄®ª0•)5yvof}}Ülšš•¶¢”‰E”2HeÙŸ®Qd±¿)Ã!y6Ťu\ÎÖC0ù¥ŽèÙ:çÎÅÖŸ7ÃyÖhtÝ•P s]Jؽðeüxk'C𜂎Í]þ aïˆ1Óž²*Ý?Û·á·‚>xò‹`­/&$㌠’ëD9Tï“.þ¤Ð­oPÝâeÊË–—1/knIË»7$ŠI‹U—ËeÓx>‰D*í­e(Œ¾ Áµ Â*—ê%4Ã@*¤$R™ša ÕÀ6.Ôqd„¸Àz‰ýÁ/C¬o( +‰à,ÍS$‹j9 ”3cFaZ± +J’ÒÈÖÔ(«)- ©YÂ¥ `”ØNruI¤Š¹¼‘`äêšáÜÝ ¬¡%¬kÉŽ"‚”D*Ò’i¸×fK ¡D¹æß²6roI¤Š»¿f9Â*„ÇÊ%XI¤²cÓpÀ¢,@#AZ|‘¬'J"•j$Í2ŽiYð$Rõ‚iŸ%ù.F"‘ªÒˆú“[ÖŒŒBIEND®B`‚deepin-music-6.0.1.54/src/music-player/dman/deepin-music/zh_CN/png/searchmusic.png000664 000000 000000 00000011117 13703317554 027623 0ustar00rootroot000000 000000 ‰PNG  IHDR AqOStEXtSoftwareAdobe ImageReadyqÉe<&iTXtXML:com.adobe.xmp ‰e½˜¿IDATxÚìÝ tTõÇñßLf$<l  /ñX\*²²TÆÊÃB«.v۪݆S Ò\—ÓZJ‹´Uë‘ãVÝŠDº­-¸UÂÃä &ò$Ècfç™Ä›É<€$3É÷sÎß{3sï ùÇÜ{ó\ËåR35{mÎßœ=—  @;ž&§uሚàÞ³û^s žB‚ÓÒÕ@` ,‘ü˦„ˆzA!\8W@d˜ê„O˜ZÜaÖ² 2BBhPð…Yw ¶(؃Ah ׺ r‚‚?$ÔÙ–õB‚=(„Ž5°‡„³Ü¸qãÀ‰'>Ö¹sç›].WWꈒÔà÷—^¸paÛ–-[~|ûí·çÛîÿ}¶ à·¯»‚ÏQpêjTb6oÞ<ø–[nÙØ6‘j¢60œÉËË›ðqàËê`©ie¨Óáj[‚KOYYÙ qqqÓ¨Z º?þ„„„{«U¶ PœÆ(„†˜Î;¤jˆr{û Áû|{ BM¨½éw‡ uº1&h÷öñú²‘ÓDEµA!t֢ЙŽb¨N ]‰QýYMíyÀÕP‹‚=0h?}ìÇa'‚€]¸pAåååf0”éçH…hsÞHHHÇã±–".(ÔîkSà ¸¸X^¯WIIIJII¡B4KUU•Î;§‚‚eddP!@Ûqº×w5Bw²Z˜ñ€aZLH ¸\¦5!11Q111V«d—.]¨ m„ÄlßÀ)A4¸€ŽÉt0- p¥ââ⬴™p÷ûaÇ(\•Pàóù¬O ̲Y±Æí¶Nf ò˜¿ëîÝ»S®˜¹Ö›sJrr2•DVxP¸ pÕn&ÖK’7¶y]–*+\úvògêÖ­›Õ½ÁœD‚Oޏ €s Ðq4.«ë‘iIhnH0Ì>ßýM†Rºdhƨ…úzÖÝÖI„°­g×®]:r䈵ž™™©Ñ£G7}çª=úÙ÷ÞÒ¸5‹5æø-\´IÕYtÍÿPÜm™ò“RFÍÒœ{Ê-ŸŠ¶åjÍ{'ƒ“uûuúÀVJ¹Y£{Õ´,û¤A3ôð×µÌ'[Ðq5zŸß¤óns3_ÉàçòÝ7êxJ‘rËæiÓÞ•úoç)©[ Ý‘ …™ÙhæÌ™£ÒÒR7Îzmýúõ0`€–-[f Bm\L`;·uå©.:¤²¿_¨_ÿK¢^úÁ'ê9é»úÚ‡?×üÝ_hv (T—êTñš1³fßj­Ú§ªßÐô‘¶ïåŠQq™_½øÐ¨=b rEÜ4•%ñÒ™þª<ž®Â!{uß3ƒµjî>õLI#,@ Z²d‰ú÷ï¯Ç¼ö|kZˆ-Zdˆ×^{­½ÏiϺ§µ¥ð„ö;¬‚Ÿ­RQf¥NïzY¿xa„Ü~Ÿªw<¯Õ[>TiŸls{¨’wžÐ²7iÎȸà1*TèÍRVÂQåç××§ãy¿Óg3^Ò£ãcù%Q¢¡–HÓj‰Æ­Y³ÆÃ3kÖ¬zï=ýôÓJMMÕÌ™3;VP¨6 ý~UŸó¨r÷hùGíÒ’W'kåwÞg 5h!æÂ¸;_·n]e̺ S¦L±¶ ñ׈Ùó5¢jŸVþíMŸ£‘{žÐ¾C?º'Q/ýï_Ô뾯»RN+çýK{¸º$kÀ S”=%Q®êÚùìR=³'Cÿp²xQoû§ëîqÝ”j«6ÆÒšDÛ9¥£ «ý³O›6M<ð€µn &$äååé©§žjñŸ·M‚­=_ÖŠ¿åøÞÇû÷(£ÿ@yc/ p:·ˆ>KÚ©mûÿK“F}Óšwpu=zTÇwl¹5¯™®HfÜBS.’þŠm}q£<ׯIÛ U¿ŒÑG…+þW+µ¿äˆ<ý¼&&(eÚO´L*úë=û‹g´3õ›zxéPüü^-ÛÛSÓeË/·®½÷I=į@„ féjDïÞ½­0` öÐ3†µIPÔuŽJ«>ÕŸNý[à"P]ç½ÔQEÚ¿õ„†^C ,t’¯,Vçó¯Ñº®jÂõÓ ‰üguà÷¿Õºí{µïTÝŸ=E.Õ‚]rù‹åß]¤î“§êFïmŠëÑWµgr© +að é_ꡲ49û^­z%KW,×÷#úþ˜Ññ@Gd ;vìÐñãÇ[-$´YP02㳕ä¤7‹LSÊ—Ï[Èoþ[­Â]ùê;pˆõZùñd²Ïh¸úúõë§ÜÜ\kLBh«‚ymÿþýš:ujø¸Ô5í:Í^t“R¿­”nn•úX»þð²^=s‹þyö­rí\«‡^(ÓÜçVjFâ¥Ý.;¨üO?Ò–7þ¤/Gè¦1i*ÿô=½´âUœ-WþïÓç ViÉÄ4ÂEZ«‹NS?ÁÏÎÎÖÒ¥K£6,Œ?^¯¼òŠrrrZõÙ#m6ëÑ{'~¤;zoVßÒ[õéù·ê¼—>R:œW¢êjÓÚà’ïllàBUe}Íì@Ûáï¯}_ÔÍ3lÌÀe§Á̽zõjä‚ìVÆØ‰RÕ>m±¾ŽÑ57ܦo&÷#OêhÜ@yÿX ¯,~Rw¤×ÜòûU~ò¤\ý¾¢aC»)kþ¹ÐY_+|[+Ÿ}S{É3ì6=òzŽâv¾ _ݧ>ï4X3?¦;ûÔo~ð¯Êô ~=¢z—íÓ›¯¿¯"Ïy½iš°pÒ_[¢óžTâïh4ñÆŒÓ*ßçù矯 5ÝLë® fÌ‚y(±9G·$—ëÒcM‰±o°t2¥¢¢"¿9={ö¬^<ݽÎk£“ÑÝj­ûý>­:ì<(yÕ¥CﺕÞw¨<ÞXë_Ö}øç<6N«¿·‡Ç½mèÔ©SêÙ³'ÑA™… XŸfeddÔ '¶kmî.%üã]š3ʯƒJ•:d€ºw²OmêÓÅ3gTŸ¬xO…ŠŽQJzë‚£sïkíþY½ï¹_SÔœë«uâØêšžf]о+%%…Šè 7ÓÍé6Ô™™æ’’’Ç$˜AÍæ>--í²;0°¸,•ÁRm+þV d–É뎷Ö–½ªÿ)ší¸ï¢‘ é‘V¼ •êŸ}Pó&=Ëô¨A¶mÛ¦ùóçS (Q¬)A¡Õº8»Vûݧjë9a·KIK¯Ÿ`†‚\3¶PéɃtóð; ÐÆL·£p]íK«Íz´ýäƒViLUÕ¥q ± Uê3þ¸zôñè±;ß2©‡™hg¸¶QZS§är%ö-SÚˆ¥'Öò9ï(©[ ™pþüy*ÀUS^^Þªsˆò pݬϔܹ¦\¦I£î²/_F ­™¹›Í”Åfv¸æ\bÎ):XP0ŸþWV¸äm^s¢Ù'÷ŸŽXýñz½Öq @ä0ã„ÊÊʬYàJTVV2öèˆA!..NßI;i=ѳ¹ÃìK7# 2™OÿÌ|úæoÔ¬ó·  ¹LK‚ ………ÊÌ̤B€h ÍhdZâãã/ûÅÀ& r™'ôš~ÅfZË/òlMfÎæCӒЯ_?®÷@{ `×¥K«@s0pˆ.ô@P@P@Pp5´È¬G¢[c- þ`Ð~4zŸß¤…ÒÒRªè@<É¢žÔÔTj hßêdw˜7ü!@û N÷û~§ n'õ´+>5Ò8àv õƒÏç+£.€v|¾ój¤5Á)(Hõ[|¥¥¥¤J€è¸·ß^sŸ¯&¶(øåÜíÈ·~ýú'Éã,Õ D/sOoîíÃ…:!ÆårÕ¬»Â•M›6•$%%½3xðà^:uJ ìK5QΕ””lÍÍÍ—““óI४@©¶•z¡Á 5¡À,1Áâ ¯mc+5Û×ì mÕé*ƒ!¡fYjƒ'ÌAý¶ƒÚC€ß!(¸ @Ä¿CP¨vŽã‡  ò‚äܺ.$ø‚BhX&$€È  ü ¼§pAArî~dÝ)€È ဿ탂}C—ÜB€è jè¾>&ødf/(„õÿ VB~‰OmìIEND®B`‚deepin-music-6.0.1.54/src/music-player/icons/000775 000000 000000 00000000000 13703317554 020633 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/icons/actions/000775 000000 000000 00000000000 13703317554 022273 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/icons/actions/add_normal.svg000664 000000 000000 00000005310 13703317554 025113 0ustar00rootroot000000 000000 add_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/album_normal.svg000664 000000 000000 00000002656 13703317554 025475 0ustar00rootroot000000 000000 album_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/all_music_normal.svg000664 000000 000000 00000004424 13703317554 026340 0ustar00rootroot000000 000000 all music_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/back_normal.svg000664 000000 000000 00000002120 13703317554 025257 0ustar00rootroot000000 000000 back_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/clear_list_normal.svg000664 000000 000000 00000002666 13703317554 026517 0ustar00rootroot000000 000000 clear list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/close_round normal.svg000664 000000 000000 00000003076 13703317554 026607 0ustar00rootroot000000 000000 titlebutton/close_round normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/collection_normal.svg000664 000000 000000 00000002206 13703317554 026517 0ustar00rootroot000000 000000 collection_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/cross_cycling_normal.svg000664 000000 000000 00000003316 13703317554 027230 0ustar00rootroot000000 000000 cross-cycling_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/famous_ballad_normal.svg000664 000000 000000 00000003366 13703317554 027165 0ustar00rootroot000000 000000 famous ballad_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/last_normal.svg000664 000000 000000 00000003352 13703317554 025332 0ustar00rootroot000000 000000 last_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/lyric_normal.svg000664 000000 000000 00000004322 13703317554 025507 0ustar00rootroot000000 000000 lyric_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/mute_normal.svg000664 000000 000000 00000004600 13703317554 025336 0ustar00rootroot000000 000000 mute_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/my_collection_normal.svg000664 000000 000000 00000002521 13703317554 027224 0ustar00rootroot000000 000000 my collection_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/next_normal.svg000664 000000 000000 00000003234 13703317554 025344 0ustar00rootroot000000 000000 next_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/picture_list_normal.svg000664 000000 000000 00000002106 13703317554 027071 0ustar00rootroot000000 000000 picture list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/picture_list_normal_36px.svg000664 000000 000000 00000002106 13703317554 027751 0ustar00rootroot000000 000000 picture list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/play_all_normal.svg000664 000000 000000 00000001711 13703317554 026161 0ustar00rootroot000000 000000 play all_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/play_normal.svg000664 000000 000000 00000002225 13703317554 025332 0ustar00rootroot000000 000000 play_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/playlist_normal.svg000664 000000 000000 00000002403 13703317554 026224 0ustar00rootroot000000 000000 playlist_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/random_play_normal.svg000664 000000 000000 00000002761 13703317554 026677 0ustar00rootroot000000 000000 random play_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/search_normal.svg000664 000000 000000 00000001764 13703317554 025641 0ustar00rootroot000000 000000 search_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/sequential_loop_normal.svg000664 000000 000000 00000004062 13703317554 027571 0ustar00rootroot000000 000000 sequential loop_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/singer_normal.svg000664 000000 000000 00000005337 13703317554 025663 0ustar00rootroot000000 000000 singer_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/single_tune_circulation_normal.svg000664 000000 000000 00000004666 13703317554 031310 0ustar00rootroot000000 000000 single tune circulation_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/suspend_normal.svg000664 000000 000000 00000001703 13703317554 026046 0ustar00rootroot000000 000000 suspend_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/text_list_normal.svg000664 000000 000000 00000001770 13703317554 026410 0ustar00rootroot000000 000000 text list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/text_list_normal_36px.svg000664 000000 000000 00000001770 13703317554 027270 0ustar00rootroot000000 000000 text list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/volume_add_normal.svg000664 000000 000000 00000002307 13703317554 026505 0ustar00rootroot000000 000000 volume add_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/volume_lessen_normal.svg000664 000000 000000 00000003365 13703317554 027253 0ustar00rootroot000000 000000 volume lessen_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/volume_low_normal.svg000775 000000 000000 00000002522 13703317554 026560 0ustar00rootroot000000 000000 volume_normal 1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/volume_mid_normal.svg000775 000000 000000 00000003047 13703317554 026533 0ustar00rootroot000000 000000 volume_normal 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/actions/volume_normal.svg000664 000000 000000 00000003552 13703317554 025700 0ustar00rootroot000000 000000 volume_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/dark/000775 000000 000000 00000000000 13703317554 021554 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/icons/dark/actions/000775 000000 000000 00000000000 13703317554 023214 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/icons/dark/actions/music_album_24px.svg000664 000000 000000 00000002670 13703317554 027117 0ustar00rootroot000000 000000 album_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/dark/actions/music_allmusic_24px.svg000664 000000 000000 00000004436 13703317554 027632 0ustar00rootroot000000 000000 all music_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/dark/actions/music_famousballad_24px.svg000664 000000 000000 00000003400 13703317554 030441 0ustar00rootroot000000 000000 famous ballad_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/dark/actions/music_mycollection_24px.svg000664 000000 000000 00000002533 13703317554 030516 0ustar00rootroot000000 000000 my collection_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/dark/actions/music_singer_24px.svg000664 000000 000000 00000005347 13703317554 027312 0ustar00rootroot000000 000000 singer_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/icons.qrc000664 000000 000000 00000001407 13703317554 022457 0ustar00rootroot000000 000000 texts/picture_list_texts_36px.svg texts/text_list_texts_36px.svg dark/actions/music_album_24px.svg light/actions/music_album_24px.svg dark/actions/music_singer_24px.svg dark/actions/music_allmusic_24px.svg dark/actions/music_famousballad_24px.svg dark/actions/music_mycollection_24px.svg light/actions/music_singer_24px.svg light/actions/music_allmusic_24px.svg light/actions/music_famousballad_24px.svg light/actions/music_mycollection_24px.svg deepin-music-6.0.1.54/src/music-player/icons/light/000775 000000 000000 00000000000 13703317554 021742 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/icons/light/actions/000775 000000 000000 00000000000 13703317554 023402 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/icons/light/actions/music_album_24px.svg000664 000000 000000 00000002656 13703317554 027311 0ustar00rootroot000000 000000 album_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/light/actions/music_allmusic_24px.svg000664 000000 000000 00000004424 13703317554 030015 0ustar00rootroot000000 000000 all music_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/light/actions/music_famousballad_24px.svg000664 000000 000000 00000003366 13703317554 030642 0ustar00rootroot000000 000000 famous ballad_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/light/actions/music_mycollection_24px.svg000664 000000 000000 00000002521 13703317554 030701 0ustar00rootroot000000 000000 my collection_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/light/actions/music_singer_24px.svg000664 000000 000000 00000005337 13703317554 027477 0ustar00rootroot000000 000000 singer_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/texts/000775 000000 000000 00000000000 13703317554 022002 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/icons/texts/picture_list_texts_36px.svg000664 000000 000000 00000002106 13703317554 027337 0ustar00rootroot000000 000000 picture list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/icons/texts/text_list_texts_36px.svg000664 000000 000000 00000001770 13703317554 026656 0ustar00rootroot000000 000000 text list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/install.pri000664 000000 000000 00000001363 13703317554 021705 0ustar00rootroot000000 000000 isEmpty(PREFIX){ PREFIX = /usr } target.path = $${PREFIX}/bin/ desktop_files.path = $${PREFIX}/share/applications/ desktop_files.files = $$PWD/data/*.desktop #services.path = $${PREFIX}/share/dbus-1/services #services.files = $$PWD/data/*.service dman.path = $${PREFIX}/share/dman/ dman.files = $$PWD/dman/* translations.path = $${PREFIX}/share/$${TARGET}/translations translations.files = $$PWD/translations/*.qm \ $$PWD/translations/desktop/*.qm hicolor.path = $${PREFIX}/share/icons/hicolor/scalable/apps hicolor.files = $$PWD/resource/theme/common/image/deepin-music.svg INSTALLS += target translations desktop_files dman hicolor GitVersion = $$system(git rev-parse HEAD) DEFINES += GIT_VERSION=\\\"$$GitVersion\\\" deepin-music-6.0.1.54/src/music-player/main.cpp000775 000000 000000 00000014712 13703317554 021160 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "view/mainframe.h" #include "core/mediadatabase.h" #include "core/medialibrary.h" #include "core/metasearchservice.h" #include "core/player.h" #include "core/pluginmanager.h" #include "core/musicsettings.h" #include "core/util/threadpool.h" #include "core/util/global.h" #include "musicapp.h" #include "speech/exportedinterface.h" using namespace Dtk::Core; using namespace Dtk::Widget; void createSpeechDbus() { QDBusConnection::sessionBus().registerService("com.deepin.musicSpeech"); ExportedInterface *mSpeech = new ExportedInterface(nullptr); mSpeech->registerAction("1", "playmusic"); mSpeech->registerAction("2", "play artist"); mSpeech->registerAction("3", "play artist song"); mSpeech->registerAction("4", "play faverite"); mSpeech->registerAction("5", "play custom "); mSpeech->registerAction("6", "play radom"); mSpeech->registerAction("11", "pause"); mSpeech->registerAction("12", "stop"); mSpeech->registerAction("13", "resume"); mSpeech->registerAction("14", "previous"); mSpeech->registerAction("15", "next"); mSpeech->registerAction("21", "faverite"); mSpeech->registerAction("22", "unfaverite"); mSpeech->registerAction("23", "set play mode"); } int main(int argc, char *argv[]) { // DApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #ifdef SNAP_APP DStandardPaths::setMode(DStandardPaths::Snap); #endif #if defined(STATIC_LIB) DWIDGET_INIT_RESOURCE(); QCoreApplication::addLibraryPath("."); #endif DApplication::loadDXcbPlugin(); DApplication app(argc, argv); app.setAttribute(Qt::AA_UseHighDpiPixmaps); // app.setAttribute(Qt::AA_EnableHighDpiScaling); app.setOrganizationName("deepin"); app.setApplicationName("deepin-music"); //app.setApplicationVersion(DApplication::buildVersion("3.1")); const QDate buildDate = QLocale( QLocale::English ).toDate( QString(__DATE__).replace(" ", " 0"), "MMM dd yyyy"); QString t_date = buildDate.toString("MMdd"); // Version Time app.setApplicationVersion(DApplication::buildVersion(t_date)); //app.setStyle("chameleon"); DLogManager::registerConsoleAppender(); DLogManager::registerFileAppender(); QCommandLineParser parser; parser.setApplicationDescription("Deepin music player."); parser.addHelpOption(); parser.addVersionOption(); parser.addPositionalArgument("file", "Music file path"); parser.process(app); createSpeechDbus();//创建语音dbus // handle open file QString toOpenFile; if (parser.positionalArguments().length() > 0) { toOpenFile = parser.positionalArguments().first(); } app.loadTranslator(); /* MUST setApplicationDisplayName before DMainWindow create app.setApplicationDisplayName(QObject::tr("Music")); app.setWindowIcon(QIcon(":/common/image/deepin-music.svg")); */ QIcon icon = QIcon::fromTheme("deepin-music"); app.setProductIcon(icon); QString userName = QDir::homePath().section("/", -1, -1); auto *sharedMemory = new QSharedMemory(userName + QString("-deepinmusicsingle")); volatile int i = 2; while (i--) { if (sharedMemory->attach(QSharedMemory::ReadOnly)) { sharedMemory->detach(); } } if (!app.setSingleInstance("deepinmusic") || !sharedMemory->create(1)) { qDebug() << "another deepin music has started"; for (auto curStr : parser.positionalArguments()) { if (!curStr.isEmpty()) { QFileInfo fi(curStr); QUrl url = QUrl::fromLocalFile(fi.absoluteFilePath()); while (true) { QDBusInterface iface("org.mpris.MediaPlayer2.DeepinMusic", "/org/mpris/MediaPlayer2", "org.mpris.MediaPlayer2.Player", QDBusConnection::sessionBus()); if (iface.isValid()) { iface.asyncCall("OpenUri", url.toString()); break; } } } } /*-----show deepin-music----*/ QDBusInterface iface("org.mpris.MediaPlayer2.DeepinMusic", "/org/mpris/MediaPlayer2", "org.mpris.MediaPlayer2", QDBusConnection::sessionBus()); iface.asyncCall("Raise"); exit(0); } MusicSettings::init(); DApplicationSettings saveTheme; /*-DMainWindow must create on main function, so it can deconstruction before QApplication-*/ MainFrame mainframe; MusicApp *music = new MusicApp(&mainframe); music->initUI(); /*---Player instance init---*/ music->initConnection(); if (!toOpenFile.isEmpty()) { auto fi = QFileInfo(toOpenFile); auto url = QUrl::fromLocalFile(fi.absoluteFilePath()); MusicSettings::setOption("base.play.to_open_uri", url.toString()); } app.connect(&app, &QApplication::lastWindowClosed, &mainframe, [ & ]() { auto quit = MusicSettings::value("base.close.close_action").toInt(); if (quit == 1) { music->quit(); } }); app.setQuitOnLastWindowClosed(false); QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, &mainframe, &MainFrame::slotTheme); return app.exec(); } deepin-music-6.0.1.54/src/music-player/music-player.pro000775 000000 000000 00000016465 13703317554 022673 0ustar00rootroot000000 000000 include($$PWD/../config.pri) include($$PWD/build.pri) include($$PWD/../interface/interface.pri) load(dtk_translation) QT += core gui widgets svg multimedia multimediawidgets xml network sql dbus greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TEMPLATE = app TARGET = $$APP_TARGET CONFIG += c++11 link_pkgconfig DESTDIR = $$BUILD_DIST/bin #unix{ DEFINES += SUPPORT_INOTIFY QT += x11extras PKGCONFIG += icu-uc icu-i18n PKGCONFIG += x11 xext QT += dtkwidget CONFIG(ENABLE_LIBAV) { PKGCONFIG += libavutil libavformat libavcodec } else { DEFINES += DISABLE_LIBAV } #} LIBS += -L$$BUILD_DIST/lib -lvlc LIBS += -L$$BUILD_DIST/lib -lvlccore INCLUDEPATH += /usr/include/vlc INCLUDEPATH += /usr/include/vlc/plugins INCLUDEPATH += $$PWD/view/helper INCLUDEPATH += $$PWD/core SOURCES += \ core/util/lyric.cpp \ core/mediadatabase.cpp \ core/mediadatabasewriter.cpp \ core/playlist.cpp \ core/playlistmanager.cpp \ presenter/presenter.cpp \ view/helper/widgethellper.cpp \ view/widget/cover.cpp \ view/widget/infodialog.cpp \ view/widget/modebuttom.cpp \ view/widget/pushbutton.cpp \ view/widget/searchedit.cpp \ view/widget/searchresult.cpp \ view/widget/slider.cpp \ view/widget/label.cpp \ view/widget/soundvolume.cpp \ view/widget/filter.cpp \ core/player.cpp \ view/widget/titlebarwidget.cpp \ view/widget/ddropdown.cpp \ view/widget/searchmetalist.cpp \ view/widget/searchmetaitem.cpp \ core/medialibrary.cpp \ core/util/global.cpp \ core/metasearchservice.cpp \ core/pluginmanager.cpp \ view/widget/listview.cpp \ view/mainframe.cpp \ view/importwidget.cpp \ musicapp.cpp \ main.cpp \ view/widget/delegate/lyriclinedelegate.cpp \ view/lyricwidget.cpp \ view/widget/lyricview.cpp \ view/widget/settingsdialog.cpp \ core/util/threadpool.cpp \ view/footerwidget.cpp \ view/loadwidget.cpp \ view/widget/closeconfirmdialog.cpp \ core/musicsettings.cpp \ view/playlistwidget.cpp \ view/widget/playlistview.cpp \ view/widget/delegate/playitemdelegate.cpp \ view/widget/model/playlistmodel.cpp \ view/musiclistwidget.cpp \ view/widget/musiclistview.cpp \ view/widget/musiclistitem.cpp \ view/musiclistdatawidget.cpp \ view/widget/musiclistdataview.cpp \ view/widget/model/musiclistdatamodel.cpp \ view/widget/delegate/musiclistdatadelegate.cpp \ view/widget/musicimagebutton.cpp \ view/widget/musicpixmapbutton.cpp \ view/widget/musiclistviewitem.cpp \ view/widget/waveform.cpp \ core/util/musiclyric.cpp \ view/widget/lyriclabel.cpp \ view/musiclyricwidget.cpp \ view/widget/searchlyricswidget.cpp \ view/widget/waveformscale.cpp \ view/widget/musiclistinfoview.cpp \ view/widget/musiclistdialog.cpp \ view/widget/model/musiclistinfomodel.cpp \ view/widget/delegate/musicinfoitemdelegate.cpp \ core/util/fft.cpp \ view/widget/musictitleimage.cpp \ view/widget/musiciconbutton.cpp \ core/metabufferdetector.cpp \ view/widget/musicboxbutton.cpp \ view/widget/model/musiclistmodel.cpp \ view/shortcut.cpp \ core/util/dbusutils.cpp \ view/widget/tooltips.cpp \ core/util/inotifyfiles.cpp \ view/musiclistscrollarea.cpp \ core/volumemonitoring.cpp \ view/widget/musicsearchlistview.cpp \ view/widget/model/musicsearchlistmodel.cpp \ view/widget/delegate/musicsearchlistdelegate.cpp \ core/AudioBufferDevice.cpp \ core/AudioPlayer.cpp \ speech/exportedinterface.cpp \ speech/speechCenter.cpp \ core/vlc/Audio.cpp \ core/vlc/Common.cpp \ core/vlc/Enums.cpp \ core/vlc/Error.cpp \ core/vlc/Instance.cpp \ core/vlc/Media.cpp \ core/vlc/MediaPlayer.cpp \ core/vlc/Equalizer.cpp \ view/widget/dequalizerdialog.cpp HEADERS += \ musicapp.h \ core/util/lyric.h \ core/mediadatabase.h \ core/mediadatabasewriter.h \ core/music.h \ core/playlist.h \ core/playlistmanager.h \ presenter/presenter.h \ view/helper/widgethellper.h \ view/widget/cover.h \ view/widget/infodialog.h \ view/widget/modebuttom.h \ view/widget/pushbutton.h \ view/widget/searchedit.h \ view/widget/searchresult.h \ view/widget/slider.h \ view/widget/label.h \ view/importwidget.h \ view/widget/soundvolume.h \ view/widget/filter.h \ core/player.h \ presenter/presenter_p.h \ view/widget/titlebarwidget.h \ view/widget/ddropdown.h \ view/widget/searchmetalist.h \ view/widget/searchmetaitem.h \ core/medialibrary.h \ core/util/global.h \ core/metasearchservice.h \ core/pluginmanager.h \ view/mainframe.h \ view/widget/listview.h \ view/widget/delegate/lyriclinedelegate.h \ view/lyricwidget.h \ view/widget/lyricview.h \ core/util/threadpool.h \ view/footerwidget.h \ view/loadwidget.h \ view/widget/closeconfirmdialog.h \ core/musicsettings.h \ view/playlistwidget.h \ view/widget/delegate/playitemdelegate.h \ view/widget/model/playlistmodel.h \ view/widget/playlistview.h \ view/widget/delegate/playitemdelegate_p.h \ view/musiclistwidget.h \ view/widget/musiclistview.h \ view/widget/musiclistitem.h \ view/musiclistdatawidget.h \ view/widget/musiclistdataview.h \ view/widget/model/musiclistdatamodel.h \ view/widget/delegate/musiclistdatadelegate.h \ view/widget/musicimagebutton.h \ view/widget/musicpixmapbutton.h \ view/widget/musiclistviewitem.h \ view/widget/waveform.h \ core/util/musiclyric.h \ view/widget/lyriclabel.h \ view/musiclyricwidget.h \ view/widget/searchlyricswidget.h \ view/widget/waveformscale.h \ view/widget/musiclistdialog.h \ view/widget/musiclistinfoview.h \ view/widget/model/musiclistinfomodel.h \ view/widget/delegate/musicinfoitemdelegate.h \ view/widget/delegate/musicinfoitemdelegate_p.h \ core/util/fft.h \ view/widget/musictitleimage.h \ view/widget/musiciconbutton.h \ core/metabufferdetector.h \ view/widget/musicboxbutton.h \ view/widget/model/musiclistmodel.h \ view/shortcut.h \ core/util/dbusutils.h \ view/widget/tooltips.h \ core/util/inotifyfiles.h \ view/musiclistscrollarea.h \ core/volumemonitoring.h \ view/widget/musicsearchlistview.h \ view/widget/model/musicsearchlistmodel.h \ view/widget/delegate/musicsearchlistdelegate.h \ core/AudioBufferDevice.h \ core/AudioPlayer.h \ speech/exportedinterface.h \ speech/speechCenter.h \ core/vlc/Audio.h \ core/vlc/Common.h \ core/vlc/Enums.h \ core/vlc/Error.h \ core/vlc/Instance.h \ core/vlc/Media.h \ core/vlc/MediaPlayer.h \ core/vlc/Equalizer.h \ view/widget/dequalizerdialog.h RESOURCES += \ resource/theme/theme.qrc \ config.qrc \ resource/resource.qrc \ icons/icons.qrc unix{ SOURCES += \ core/util/inotifyengine.cpp HEADERS += \ core/util/inotifyengine.h } TRANSLATIONS += $$PWD/translations/$${TARGET}.ts \ $$PWD/translations/$${TARGET}_zh_CN.ts \ $$PWD/translations/$${TARGET}_en_US.ts \ $$PWD/translations/desktop/desktop_zh_CN.ts \ $$PWD/translations/desktop/desktop_en_US.ts include($$PWD/install.pri) deepin-music-6.0.1.54/src/music-player/musicapp.cpp000664 000000 000000 00000016430 13703317554 022051 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musicapp.h" #ifdef Q_OS_LINUX #include #endif #include #include #include #include #include #include "core/player.h" #include "core/musicsettings.h" #include "core/util/threadpool.h" #include "presenter/presenter.h" #include "view/mainframe.h" using namespace Dtk::Widget; class MusicAppPrivate { public: MusicAppPrivate(MusicApp *parent) : q_ptr(parent) {} void initMpris(const QString &serviceName); void triggerShortcutAction(const QString &optKey); void onDataPrepared(); void onQuit(); void onRaise(); Presenter *presenter = nullptr; MainFrame *playerFrame = nullptr; MusicApp *q_ptr; Q_DECLARE_PUBLIC(MusicApp) }; void MusicAppPrivate::initMpris(const QString &serviceName) { Q_Q(MusicApp); auto mprisPlayer = new MprisPlayer(); mprisPlayer->setServiceName(serviceName); mprisPlayer->setSupportedMimeTypes(Player::instance()->supportedMimeTypes()); mprisPlayer->setSupportedUriSchemes(QStringList() << "file"); mprisPlayer->setCanQuit(true); mprisPlayer->setCanRaise(true); mprisPlayer->setCanSetFullscreen(false); mprisPlayer->setHasTrackList(false); // setDesktopEntry: see https://specifications.freedesktop.org/mpris-spec/latest/Media_Player.html#Property:DesktopEntry for more mprisPlayer->setDesktopEntry("deepin-music"); mprisPlayer->setIdentity("Deepin Music Player"); mprisPlayer->setCanControl(true); mprisPlayer->setCanPlay(true); mprisPlayer->setCanGoNext(true); mprisPlayer->setCanGoPrevious(true); mprisPlayer->setCanPause(true); q->connect(mprisPlayer, &MprisPlayer::quitRequested, q, [ = ]() { // onQuit(); }); q->connect(mprisPlayer, &MprisPlayer::raiseRequested, q, [ = ]() { onRaise(); }); presenter->initMpris(mprisPlayer); } void MusicAppPrivate::triggerShortcutAction(const QString &optKey) { if (optKey == "shortcuts.all.volume_up") { presenter->volumeUp(); } if (optKey == "shortcuts.all.volume_down") { presenter->volumeDown(); } if (optKey == "shortcuts.all.next") { presenter->next(); } if (optKey == "shortcuts.all.play_pause") { presenter->togglePaly(); } if (optKey == "shortcuts.all.previous") { presenter->prev(); } } void MusicAppPrivate::onDataPrepared() { Q_Q(MusicApp); qDebug() << "TRACE:" << "data prepared"; playerFrame->postInitUI(); playerFrame->binding(presenter); qApp->installEventFilter(playerFrame); playerFrame->connect(playerFrame, &MainFrame::triggerShortcutAction, q, [ = ](const QString & optKey) { this->triggerShortcutAction(optKey); }); initMpris("DeepinMusic"); presenter->postAction(); } void MusicAppPrivate::onQuit() { presenter->deleteLater(); playerFrame->deleteLater(); // this->deleteLater(); } void MusicAppPrivate::onRaise() { // blumia: call show() will not bring it up (at least it's not working under dde-kwin), // so we need call showNormal() here. // playerFrame->show(); playerFrame->showNormal(); playerFrame->raise(); playerFrame->activateWindow(); } MusicApp::MusicApp(MainFrame *frame, QObject *parent) : QObject(parent), d_ptr(new MusicAppPrivate(this)) { Q_D(MusicApp); d->playerFrame = frame; connect(d->playerFrame, &MainFrame::requitQuit, this, &MusicApp::quit); } MusicApp::~MusicApp() { } void dumpGeometry(const QByteArray &geometry) { if (geometry.size() < 4) { return; } QDataStream stream(geometry); stream.setVersion(QDataStream::Qt_4_0); const quint32 magicNumber = 0x1D9D0CB; quint32 storedMagicNumber; stream >> storedMagicNumber; if (storedMagicNumber != magicNumber) { return; } const quint16 currentMajorVersion = 2; quint16 majorVersion = 0; quint16 minorVersion = 0; stream >> majorVersion >> minorVersion; if (majorVersion > currentMajorVersion) { return; } // (Allow all minor versions.) QRect restoredFrameGeometry; QRect restoredNormalGeometry; qint32 restoredScreenNumber; quint8 maximized; quint8 fullScreen; qint32 restoredScreenWidth = 0; stream >> restoredFrameGeometry >> restoredNormalGeometry >> restoredScreenNumber >> maximized >> fullScreen; qDebug() << "restore geometry:" << restoredFrameGeometry << restoredNormalGeometry << restoredScreenNumber << maximized << fullScreen; if (majorVersion > 1) { stream >> restoredScreenWidth; } } void MusicApp::show() { Q_D(MusicApp); auto geometry = MusicSettings::value("base.play.geometry").toByteArray(); auto state = MusicSettings::value("base.play.state").toInt(); qDebug() << "restore state:" << state; dumpGeometry(geometry); d->playerFrame->resize(QSize(1070, 680)); d->playerFrame->show(); Dtk::Widget::moveToCenter(d->playerFrame); // if (geometry.isEmpty()) { // d->playerFrame->resize(QSize(1070, 680)); // d->playerFrame->show(); // Dtk::Widget::moveToCenter(d->playerFrame); // } else { // d->playerFrame->restoreGeometry(geometry); // d->playerFrame->setWindowState(static_cast(state)); // } d->playerFrame->show(); d->playerFrame->setFocus(); } void MusicApp::quit() { //Q_D(MusicApp); // d->presenter->handleQuit(); qDebug() << "sync config start"; // MusicSettings::sync(); #ifdef Q_OS_LINUX sync(); #endif qDebug() << "sync config finish, app exit"; qApp->quit(); } void MusicApp::initUI() { Q_D(MusicApp); /* *auto mediaCount = AppSettings::instance()->value("base.play.media_count").toInt(); *auto mediaCount = 1; *d->playerFrame->initUI(0 != mediaCount); */ d->playerFrame->initUI(true); qDebug() << "TRACE:" << "create MainFrame"; show(); } void MusicApp::initConnection() { Q_D(MusicApp); qDebug() << "TRACE:" << "create Presenter"; d->presenter = new Presenter; auto presenterWork = ThreadPool::instance()->newThread(); d->presenter->moveToThread(presenterWork); connect(presenterWork, &QThread::started, d->presenter, &Presenter::prepareData); connect(d->presenter, &Presenter::dataLoaded, this, [ = ]() { d->onDataPrepared(); Player::instance()->init(); }); presenterWork->start(); qDebug() << "TRACE:" << "start prepare data"; } deepin-music-6.0.1.54/src/music-player/musicapp.h000664 000000 000000 00000002350 13703317554 021512 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include class MprisPlayer; class MusicAppPrivate; class MainFrame; class MusicApp : public QObject { Q_OBJECT public: MusicApp(MainFrame *frame, QObject *parent = nullptr); ~MusicApp(); void initUI(); void initConnection(); void show(); void quit(); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicApp) }; deepin-music-6.0.1.54/src/music-player/presenter/000775 000000 000000 00000000000 13703317554 021527 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/presenter/presenter.cpp000664 000000 000000 00000227524 13703317554 024256 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "presenter.h" #include "presenter_p.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "../musicapp.h" #include "util/pinyinsearch.h" #include "../core/player.h" #include "../core/playlist.h" #include "../core/playlistmanager.h" #include "../core/metasearchservice.h" #include "../core/mediadatabase.h" #include "../core/musicsettings.h" #include "../core/medialibrary.h" #include "../core/pluginmanager.h" #include "../core/util/threadpool.h" #include "../core/metabufferdetector.h" using namespace DMusic; Transfer::Transfer(QObject *parent): QObject(parent) { } Transfer::~Transfer() { } void Transfer::onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist) { int length = metalist.length(); MetaPtrList slice; for (int i = 0; i < length; i++) { auto meta = metalist.at(i); slice << meta; if (i % 30 == 0) { Q_EMIT musicListAdded(playlist, slice); slice.clear(); QThread::msleep(50); } } if (slice.length() > 0) { Q_EMIT musicListAdded(playlist, slice); slice.clear(); } } PresenterPrivate::PresenterPrivate(Presenter *parent) : QObject(parent), q_ptr(parent) { } void PresenterPrivate::initBackend() { Q_Q(Presenter); MetaDetector::init(); auto pm = PluginManager::instance(); connect(this, &PresenterPrivate::requestInitPlugin, pm, &PluginManager::init); ThreadPool::instance()->moveToNewThread(pm); MediaDatabase::instance()->init(); ThreadPool::instance()->moveToNewThread(MediaDatabase::instance()); qDebug() << "TRACE:" << "database init finished"; player = Player::instance(); qDebug() << "TRACE:" << "player init finished"; connect(player, &Player::audioBufferProbed, q, [ = ](const QAudioBuffer & buffer) { Q_EMIT q->audioBufferProbed(buffer); }); metaBufferDetector = new MetaBufferDetector(this); connect(metaBufferDetector, &MetaBufferDetector::metaBuffer, q, [ = ](const QVector &buffer, const QString & hash) { Q_EMIT q->metaBuffer(buffer, hash); }, Qt::QueuedConnection); settings = MusicSettings::instance(); library = MediaLibrary::instance(); library->init(); ThreadPool::instance()->moveToNewThread(MediaLibrary::instance()); qDebug() << "TRACE:" << "library init finished"; playlistMgr = new PlaylistManager; playlistMgr->load(); qDebug() << "TRACE:" << "playlistMgr init finished"; currentPlaylist = playlistMgr->playlist(AllMusicListID); PlaylistPtr albumPlaylist = playlistMgr->playlist(AlbumMusicListID); albumPlaylist->metaListToPlayMusicTypePtrList(Playlist::SortByAblum, currentPlaylist->allmusic()); PlaylistPtr artistPlaylist = playlistMgr->playlist(ArtistMusicListID); artistPlaylist->metaListToPlayMusicTypePtrList(Playlist::SortByArtist, currentPlaylist->allmusic()); player->setCurPlaylist(playlistMgr->playlist(PlayMusicListID)); connect(this, &PresenterPrivate::play, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { auto curPlaylist = player->curPlaylist(); if (curPlaylist->id() != playlist->id()) { auto curAllMetas = playlist->allmusic(); for (int i = curAllMetas.size() - 1; i >= 0; i--) { if (meta == curAllMetas[i]) continue; if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) curAllMetas.removeAt(i); else { curAllMetas[i]->invalid = false; } } auto allMsics = curPlaylist->allmusic(); bool same = true; if (allMsics.size() != curAllMetas.size()) { same = false; } else if (!curAllMetas.isEmpty() && allMsics.size() == curAllMetas.size()) { if (allMsics.first()->hash != curAllMetas.first()->hash || allMsics.last()->hash != curAllMetas.last()->hash) { same = false; } else { for (int i = 1; i < allMsics.size() - 1; ++i) { if (allMsics[i]->hash != curAllMetas[i]->hash) { same = false; break; } } } } if (!same) { curPlaylist->removeMusicList(curPlaylist->allmusic()); this->thread()->msleep(50); curPlaylist->appendMusicList(curAllMetas); } } else { auto curPlaylist = player->curPlaylist(); auto curAllMetas = curPlaylist->allmusic(); MetaPtrList curRemoveMetas; for (int i = curAllMetas.size() - 1; i >= 0; i--) { if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) curRemoveMetas.append(curAllMetas[i]); else { curAllMetas[i]->invalid = false; } } if (!curRemoveMetas.isEmpty()) { curPlaylist->removeMusicList(curRemoveMetas); } } player->playMeta(playlist, meta); }); connect(this, &PresenterPrivate::resume, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { auto curPlaylist = player->curPlaylist(); if (curPlaylist->id() != playlist->id()) { auto curAllMetas = playlist->allmusic(); for (int i = curAllMetas.size() - 1; i >= 0; i--) { if (meta == curAllMetas[i]) continue; if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) curAllMetas.removeAt(i); else { curAllMetas[i]->invalid = false; } } auto allMsics = curPlaylist->allmusic(); bool same = true; if (allMsics.size() != curAllMetas.size()) { same = false; } else if (!curAllMetas.isEmpty() && allMsics.size() == curAllMetas.size()) { if (allMsics.first()->hash != curAllMetas.first()->hash || allMsics.last()->hash != curAllMetas.last()->hash) { same = false; } else { for (int i = 1; i < allMsics.size() - 1; ++i) { if (allMsics[i]->hash != curAllMetas[i]->hash) { same = false; break; } } } } if (!same) { curPlaylist->removeMusicList(curPlaylist->allmusic()); curPlaylist->appendMusicList(curAllMetas); } } else { auto curPlaylist = player->curPlaylist(); auto curAllMetas = curPlaylist->allmusic(); MetaPtrList curRemoveMetas; for (int i = curAllMetas.size() - 1; i >= 0; i--) { if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) curRemoveMetas.append(curAllMetas[i]); else { curAllMetas[i]->invalid = false; } } if (!curRemoveMetas.isEmpty()) { curPlaylist->removeMusicList(curRemoveMetas); } } player->resume(playlist, meta); }); connect(this, &PresenterPrivate::playNext, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { auto curPlaylist = player->curPlaylist(); if (curPlaylist->id() != playlist->id()) { auto curAllMetas = playlist->allmusic(); for (int i = curAllMetas.size() - 1; i >= 0; i--) { if (meta == curAllMetas[i]) continue; if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) curAllMetas.removeAt(i); else { curAllMetas[i]->invalid = false; } } auto allMsics = curPlaylist->allmusic(); bool same = true; if (allMsics.size() != curAllMetas.size()) { same = false; } else if (!curAllMetas.isEmpty() && allMsics.size() == curAllMetas.size()) { if (allMsics.first()->hash != curAllMetas.first()->hash || allMsics.last()->hash != curAllMetas.last()->hash) { same = false; } else { for (int i = 1; i < allMsics.size() - 1; ++i) { if (allMsics[i]->hash != curAllMetas[i]->hash) { same = false; break; } } } } if (!same) { curPlaylist->removeMusicList(curPlaylist->allmusic()); curPlaylist->appendMusicList(curAllMetas); } } else { auto curPlaylist = player->curPlaylist(); auto curAllMetas = curPlaylist->allmusic(); MetaPtrList curRemoveMetas; for (int i = curAllMetas.size() - 1; i >= 0; i--) { if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) curRemoveMetas.append(curAllMetas[i]); else { curAllMetas[i]->invalid = false; } } if (!curRemoveMetas.isEmpty()) { curPlaylist->removeMusicList(curRemoveMetas); } } player->playNextMeta(playlist, meta); }); connect(this, &PresenterPrivate::playPrev, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { auto curPlaylist = player->curPlaylist(); if (curPlaylist->id() != playlist->id()) { auto curAllMetas = playlist->allmusic(); for (int i = curAllMetas.size() - 1; i >= 0; i--) { if (meta == curAllMetas[i]) continue; if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) curAllMetas.removeAt(i); else { curAllMetas[i]->invalid = false; } } auto allMsics = curPlaylist->allmusic(); bool same = true; if (allMsics.size() != curAllMetas.size()) { same = false; } else if (!curAllMetas.isEmpty() && allMsics.size() == curAllMetas.size()) { if (allMsics.first()->hash != curAllMetas.first()->hash || allMsics.last()->hash != curAllMetas.last()->hash) { same = false; } else { for (int i = 1; i < allMsics.size() - 1; ++i) { if (allMsics[i]->hash != curAllMetas[i]->hash) { same = false; break; } } } } if (!same) { curPlaylist->removeMusicList(curPlaylist->allmusic()); curPlaylist->appendMusicList(curAllMetas); } } else { auto curPlaylist = player->curPlaylist(); auto curAllMetas = curPlaylist->allmusic(); MetaPtrList curRemoveMetas; for (int i = curAllMetas.size() - 1; i >= 0; i--) { if (curAllMetas[i]->invalid && !QFile::exists(curAllMetas[i]->localPath)) curRemoveMetas.append(curAllMetas[i]); else { curAllMetas[i]->invalid = false; } } if (!curRemoveMetas.isEmpty()) { curPlaylist->removeMusicList(curRemoveMetas); } } player->playPrevMusic(playlist, meta); }); connect(this, &PresenterPrivate::pause, player, &Player::pause); connect(this, &PresenterPrivate::stop, player, &Player::stop); connect(pm, &PluginManager::onPluginLoaded, this, [ = ](const QString & objectName, DMusic::Plugin::PluginInterface * instance) { if (instance && instance->pluginType() == DMusic::Plugin::PluginType::TypeMetaSearchEngine) { qDebug() << "load plugins" << objectName; lyricService = MetaSearchService::instance(); qDebug() << "TRACE:" << "lyricService init finished"; lyricService->init(); connect(lyricService, &MetaSearchService::coverSearchFinished, this, [ = ](const MetaPtr meta, const DMusic::SearchMeta & search, const QByteArray & coverData) { if (search.id != meta->searchID) { meta->searchID = search.id; meta->updateSearchIndex(); Q_EMIT MediaDatabase::instance()->updateMediaMeta(meta); } meta->coverUrl = MetaSearchService::coverUrl(meta); Q_EMIT q->coverSearchFinished(meta, search, coverData); }); connect(this, &PresenterPrivate::requestMetaSearch, lyricService, &MetaSearchService::searchMeta); connect(this, &PresenterPrivate::requestChangeMetaCache, lyricService, &MetaSearchService::onChangeMetaCache); connect(lyricService, &MetaSearchService::lyricSearchFinished, q, &Presenter::lyricSearchFinished); connect(lyricService, &MetaSearchService::contextSearchFinished, q, &Presenter::contextSearchFinished); connect(q, &Presenter::requestContextSearch, lyricService, &MetaSearchService::searchContext); ThreadPool::instance()->moveToNewThread(MetaSearchService::instance()); auto activeMeta = Player::instance()->activeMeta(); if (activeMeta) { Q_EMIT requestMetaSearch(activeMeta); } } }); } void PresenterPrivate::notifyMusicPlayed(PlaylistPtr playlist, const MetaPtr meta) { Q_Q(Presenter); if (playlist.isNull() || meta.isNull()) return; MetaPtr favInfo(meta); favInfo->favourite = playlistMgr->playlist(FavMusicListID)->contains(meta); // qDebug() << FavMusicListID << meta->title << favInfo->favourite; Q_EMIT q->musicPlayed(playlist, favInfo); } bool Presenter::containsStr(QString searchText, QString text) { //filter text = QString(text).remove("\r").remove("\n"); bool chineseFlag = false; for (auto ch : searchText) { if (DMusic::PinyinSearch::isChinese(ch)) { chineseFlag = true; break; } } if (chineseFlag) { return text.contains(searchText); } else { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(text); QString curTextListStr = ""; if (!curTextList.isEmpty()) { for (auto mText : curTextList) { if (mText.contains(searchText, Qt::CaseInsensitive)) { return true; } curTextListStr += mText; } // curTextListStr = QString(curTextListStr.remove(" ")); if (curTextListStr.contains(searchText, Qt::CaseInsensitive)) { return true; } } return text.contains(searchText, Qt::CaseInsensitive); } } Presenter::Presenter(QObject *parent) : QObject(parent), d_ptr(new PresenterPrivate(this)) { qRegisterMetaType(); qRegisterMetaTypeStreamOperators(); qRegisterMetaType(); qRegisterMetaType>(); qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType>(); qRegisterMetaType>(); qRegisterMetaType(); } Presenter::~Presenter() { qDebug() << "Presenter destroyed"; } void Presenter::handleQuit() { Q_D(Presenter); d->settings->setOption("base.play.last_position", d->lastPlayPosition); d->player->stop(); } void Presenter::prepareData() { Q_D(Presenter); // QThread::sleep(10); d->initBackend(); qDebug() << "TRACE:" << "initBackend finished"; d->transfer = new Transfer(); ThreadPool::instance()->moveToNewThread(d->transfer); connect(d->library, &MediaLibrary::meidaFileImported, this, [ = ](const QString & playlistId, MetaPtrList metalist) { auto playlist = d->playlistMgr->playlist(playlistId); if (playlist.isNull()) { qCritical() << "invalid playlist id:" << playlistId; return; } if (playlist->id() != AllMusicListID) { PlaylistPtr allplaylist = d->playlistMgr->playlist(AllMusicListID); allplaylist->appendMusicList(metalist); } auto allMetas = playlist->allmusic(); int count = 0; for (auto meta : metalist) { for (auto curMeta : allMetas) { if (curMeta->hash == meta->hash) { count++; break; } } } Q_EMIT notifyAddToPlaylist(playlist, metalist, count); playlist->appendMusicList(metalist); PlaylistPtr allplaylist = d->playlistMgr->playlist(AllMusicListID); if (!allplaylist.isNull()) { PlaylistPtr albumPlaylist = d->playlistMgr->playlist(AlbumMusicListID); PlaylistPtr artistPlaylist = d->playlistMgr->playlist(ArtistMusicListID); if (albumPlaylist) { albumPlaylist->metaListToPlayMusicTypePtrList(Playlist::SortByAblum, allplaylist->allmusic()); } if (artistPlaylist) { artistPlaylist->metaListToPlayMusicTypePtrList(Playlist::SortByArtist, allplaylist->allmusic()); } } Q_EMIT meidaFilesImported(playlist, metalist); }); connect(d->library, &MediaLibrary::scanFinished, this, [ = ](const QString & playlistId, int mediaCount) { qDebug() << "scanFinished"; if (d->playlistMgr->playlist(AllMusicListID)->isEmpty()) { qDebug() << "scanFinished: meta library clean"; Q_EMIT metaLibraryClean(); } if (0 == mediaCount) { Q_EMIT scanFinished(playlistId, mediaCount); } }); connect(d->playlistMgr, &PlaylistManager::musiclistAdded, d->transfer, &Transfer::onMusicListAdded, Qt::UniqueConnection); connect(d->transfer, &Transfer::musicListAdded, this, &Presenter::musicListAdded, Qt::UniqueConnection); connect(d->playlistMgr, &PlaylistManager::musiclistRemoved, this, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { //qDebug() << playlist << playlist->id(); Q_EMIT musicListRemoved(playlist, metalist); }); connect(d->player, &Player::positionChanged, this, [ = ](qint64 position, qint64 duration, qint64 coefficient) { d->lastPlayPosition = position; Q_EMIT progrossChanged(position, duration, coefficient); }); connect(d->player, &Player::volumeChanged, this, &Presenter::volumeChanged); connect(d->player, &Player::mutedChanged, this, &Presenter::mutedChanged); // connect(d->player, &Player::localMutedChanged, // this, &Presenter::localMutedChanged); connect(this, &Presenter::musicFileMiss, d->player, &Player::musicFileMiss); connect(d->player, &Player::mediaPlayed, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { if (!meta.isNull()) { d->settings->setOption("base.play.last_meta", meta->hash); if (!playlist.isNull() || playlist->id() != PlayMusicListID) d->settings->setOption("base.play.last_playlist", playlist->id()); d->notifyMusicPlayed(playlist, meta); d->requestMetaSearch(meta); d->metaBufferDetector->onBufferDetector(meta->localPath, meta->hash); } }); connect(d->player, &Player::mediaError, this, [ = ](PlaylistPtr playlist, const MetaPtr meta, Player::Error error) { Q_D(Presenter); Q_ASSERT(!playlist.isNull()); Q_EMIT musicError(playlist, meta, error); if (error == Player::NoError) { d->syncPlayerResult = false; if (meta->invalid) { meta->invalid = false; Q_EMIT musicMetaUpdate(playlist, meta); } d->continueErrorCount = 0; return; } if (meta != nullptr) { if (!meta->invalid) { meta->invalid = true; Q_EMIT musicMetaUpdate(playlist, meta); } } if (d->syncPlayerResult) { d->syncPlayerResult = false; Q_EMIT notifyMusciError(playlist, meta, error); } else { Q_EMIT notifyMusciError(playlist, meta, error); } }); connect(this, &Presenter::musicMetaUpdate, this, [ = ](PlaylistPtr /*playlist*/, MetaPtr meta) { qDebug() << "update" << meta->invalid << meta->length; for (auto playlist : allplaylist()) { playlist->updateMeta(meta); } // update database meta->updateSearchIndex(); Q_EMIT MediaDatabase::instance()->updateMediaMeta(meta); }); connect(this, &Presenter::playNext, this, &Presenter::onMusicNext); Q_EMIT dataLoaded(); } void Presenter::postAction() { Q_D(Presenter); Q_EMIT d->requestInitPlugin(); int volume = d->settings->value("base.play.volume").toInt(); d->player->setVolume(volume); Q_EMIT this->volumeChanged(volume); auto mute = d->settings->value("base.play.mute").toBool(); d->player->setMuted(mute); Q_EMIT this->mutedChanged(mute); auto playmode = d->settings->value("base.play.playmode").toInt(); d->player->setMode(static_cast(playmode)); Q_EMIT this->modeChanged(playmode); setEqualizerEnable(true); //读å–å‡è¡¡å™¨ä½¿èƒ½å¼€å…³é…ç½® auto eqSwitch = d->settings->value("equalizer.all.switch").toBool(); //自定义频率 QList allBauds; allBauds.clear(); allBauds.append(d->settings->value("equalizer.all.baud_pre").toInt()); allBauds.append(d->settings->value("equalizer.all.baud_60").toInt()); allBauds.append(d->settings->value("equalizer.all.baud_170").toInt()); allBauds.append(d->settings->value("equalizer.all.baud_310").toInt()); allBauds.append(d->settings->value("equalizer.all.baud_600").toInt()); allBauds.append(d->settings->value("equalizer.all.baud_1K").toInt()); allBauds.append(d->settings->value("equalizer.all.baud_3K").toInt()); allBauds.append(d->settings->value("equalizer.all.baud_6K").toInt()); allBauds.append(d->settings->value("equalizer.all.baud_12K").toInt()); allBauds.append(d->settings->value("equalizer.all.baud_14K").toInt()); allBauds.append(d->settings->value("equalizer.all.baud_16K").toInt()); //载入当å‰è®¾ç½®éŸ³æ•ˆ auto eqCurEffect = d->settings->value("equalizer.all.curEffect").toInt(); if (eqSwitch) { setEqualizer(eqSwitch, eqCurEffect, allBauds); } auto allplaylist = d->playlistMgr->playlist(AllMusicListID); auto lastPlaylist = allplaylist; if (lastPlaylist.isNull()) { lastPlaylist = allplaylist; } auto lastMeta = lastPlaylist->first(); auto position = 0; auto isMetaLibClear = MediaLibrary::instance()->isEmpty(); isMetaLibClear |= allplaylist->isEmpty(); if (/*d->settings->value("base.play.remember_progress").toBool() && */!isMetaLibClear) { d->syncPlayerResult = true; auto lastPlaylistId = d->settings->value("base.play.last_playlist").toString(); if (!d->playlistMgr->playlist(lastPlaylistId).isNull()) { lastPlaylist = d->playlistMgr->playlist(lastPlaylistId); } Q_ASSERT(!lastPlaylist.isNull()); if (lastPlaylist->id() == SearchMusicListID) { lastPlaylist = allplaylist; } auto lastMetaId = d->settings->value("base.play.last_meta").toString(); lastMeta = MediaLibrary::instance()->meta(lastMetaId); if (lastPlaylist->contains(lastMeta)) { lastMeta = lastPlaylist->music(lastMetaId); } else { lastMeta = lastPlaylist->first(); } if (!lastMeta.isNull()) { position = 0; if (d->settings->value("base.play.remember_progress").toBool()) { position = d->settings->value("base.play.last_position").toInt(); } d->lastPlayPosition = position; if (d->settings->value("base.play.remember_progress").toBool()) onCurrentPlaylistChanged(lastPlaylist); Q_EMIT locateMusic(lastPlaylist, lastMeta); d->notifyMusicPlayed(lastPlaylist, lastMeta); d->player->setPlayOnLoaded(false); d->player->setFadeInOut(false); d->player->loadMedia(lastPlaylist, lastMeta); d->metaBufferDetector->onBufferDetector(lastMeta->localPath, lastMeta->hash); // d->player->pause(); QTimer::singleShot(150, [ = ]() {//延迟150msæ˜¯ä¸ºäº†åœ¨åŠ è½½çš„æ—¶å€™ï¼ŒéŸ³ä¹æ’­æ”¾100msåŽå†è®¾ç½®è¿›åº¦ d->player->setPosition(position); }); Q_EMIT musicPaused(lastPlaylist, lastMeta); if (d->lyricService) { Q_EMIT d->requestMetaSearch(lastMeta); } } } auto curPlaylist = d->playlistMgr->playlist(PlayMusicListID); QString toOpenUri = d->settings->value("base.play.to_open_uri").toString(); if (!toOpenUri.isEmpty()) { MusicSettings::setOption("base.play.to_open_uri", ""); MusicSettings::sync(); openUri(QUrl(toOpenUri)); } else { if (d->settings->value("base.play.auto_play").toBool() && !curPlaylist->isEmpty() && !lastPlaylist->isEmpty() && !isMetaLibClear) { qDebug() << lastPlaylist->id() << lastPlaylist->displayName(); if (d->settings->value("base.play.remember_progress").toBool() && !isMetaLibClear) { onCurrentPlaylistChanged(lastPlaylist); // d->player->setPosition(position); QTimer::singleShot(200, [ = ]() {//200ms播放是为了在加载播放的100ms结æŸï¼Œ150ms设置播放进度åŽå†æ’­æ”¾ã€‚ onMusicResume(lastPlaylist, lastMeta); }); } else { d->lastPlayPosition = 0; onCurrentPlaylistChanged(lastPlaylist); Q_EMIT locateMusic(lastPlaylist, lastMeta); d->notifyMusicPlayed(lastPlaylist, lastMeta); d->player->setPlayOnLoaded(false); d->player->setFadeInOut(false); d->player->loadMedia(lastPlaylist, lastMeta); QTimer::singleShot(200, [ = ]() {//200ms播放是为了在加载播放的100ms结æŸï¼Œ150ms设置播放进度åŽå†æ’­æ”¾ã€‚ onMusicResume(lastPlaylist, lastMeta); }); } } } auto fadeInOut = d->settings->value("base.play.fade_in_out").toBool(); d->player->setFadeInOut(fadeInOut); if (!isMetaLibClear) { Q_EMIT showMusicList(allplaylist); } // Add playlist for (auto playlist : d->playlistMgr->allplaylist()) { Q_EMIT playlistAdded(playlist); } Q_EMIT currentMusicListChanged(lastPlaylist); } void Presenter::openUri(const QUrl &uri) { Q_D(Presenter); auto localfile = uri.toLocalFile(); // open url qDebug() << "open url" << localfile; auto metas = MediaLibrary::instance()->importFile(localfile); if (0 == metas.length()) { qCritical() << "openUriRequested" << uri; return; } auto list = d->playlistMgr->playlist(AllMusicListID); onAddMetaToPlaylist(list, metas); Q_EMIT MediaLibrary::instance()->meidaFileImported(AllMusicListID, metas); onSyncMusicPlay(list, metas.first()); onCurrentPlaylistChanged(list); } void Presenter::onSyncMusicPlay(PlaylistPtr playlist, const MetaPtr meta) { Q_D(Presenter); d->syncPlayerResult = true; d->continueErrorCount = 0; d->syncPlayerMeta = meta; onMusicPlay(playlist, meta); } void Presenter::onSyncMusicResume(PlaylistPtr playlist, const MetaPtr meta) { Q_D(Presenter); d->syncPlayerResult = true; d->continueErrorCount = 0; d->syncPlayerMeta = meta; onMusicResume(playlist, meta); } void Presenter::onSyncMusicPrev(PlaylistPtr playlist, const MetaPtr meta) { Q_D(Presenter); d->syncPlayerResult = true; d->continueErrorCount = 0; d->syncPlayerMeta = meta; onMusicPrev(playlist, meta); } void Presenter::onSyncMusicNext(PlaylistPtr playlist, const MetaPtr meta) { Q_D(Presenter); d->syncPlayerResult = true; d->continueErrorCount = 0; d->syncPlayerMeta = meta; onMusicNext(playlist, meta); } QList Presenter::allplaylist() { Q_D(Presenter); return d->playlistMgr->allplaylist(); } PlaylistPtr Presenter::playlist(const QString &id) { Q_D(Presenter); return d->playlistMgr->playlist(id); } void Presenter::volumeUp() { Q_D(Presenter); onVolumeChanged(d->player->volume() + Player::VolumeStep); Q_EMIT volumeChanged(d->player->volume()); } void Presenter::volumeDown() { Q_D(Presenter); onVolumeChanged(d->player->volume() - Player::VolumeStep); Q_EMIT volumeChanged(d->player->volume()); } void Presenter::togglePaly() { Q_D(Presenter); auto alllist = d->playlistMgr->playlist(AllMusicListID); auto activeList = d->player->activePlaylist(); auto activeMeta = d->player->activeMeta(); if (activeList.isNull()) { onPlayall(alllist); return; } qDebug() << d->player->status(); switch (d->player->status()) { case Player::Stopped: onMusicPlay(activeList, activeMeta); break; case Player::Playing: onMusicPauseNow(activeList, activeMeta); break; case Player::Paused: onMusicResume(activeList, activeMeta); break; case Player::InvalidPlaybackStatus: break; } } void Presenter::pause() { Q_D(Presenter); auto activeList = d->player->activePlaylist(); auto activeMeta = d->player->activeMeta(); if (activeList && activeMeta) { onMusicPause(activeList, activeMeta); } } void Presenter::next() { Q_D(Presenter); if (d->player->curPlaylist().isNull() || d->player->curPlaylist()->isEmpty()) return; auto alllist = d->playlistMgr->playlist(AllMusicListID); auto activeList = d->player->activePlaylist(); auto activeMeta = d->player->activeMeta(); if (activeList.isNull()) { onPlayall(alllist); return; } onMusicNext(activeList, activeMeta); Q_EMIT hidewaveformScale(); } void Presenter::prev() { Q_D(Presenter); if (d->player->curPlaylist().isNull() || d->player->curPlaylist()->isEmpty()) return; auto alllist = d->playlistMgr->playlist(AllMusicListID); auto activeList = d->player->activePlaylist(); auto activeMeta = d->player->activeMeta(); if (activeList.isNull()) { onPlayall(alllist); return; } onMusicPrev(activeList, activeMeta); Q_EMIT hidewaveformScale(); } void Presenter::onHandleQuit() { handleQuit(); } void Presenter::requestImportPaths(PlaylistPtr playlist, const QStringList &filelist) { Q_D(Presenter); Q_ASSERT(!playlist.isNull()); d->library->importMedias(playlist->id(), filelist); } void Presenter::onMusiclistRemove(PlaylistPtr playlist, const MetaPtrList metalist) { Q_D(Presenter); if (playlist == nullptr) return; auto playinglist = d->player->curPlaylist(); MetaPtr next; bool t_isLastMeta = false; //æ£€æŸ¥å½“å‰æ’­æ”¾çš„æ˜¯å¦åŒ…嫿œ€åŽä¸€é¦– if (playinglist != nullptr) { for (auto meta : metalist) { if (!d->player->activeMeta().isNull() && meta->hash == d->player->activeMeta()->hash && playlist->isLast(meta)) { t_isLastMeta = true; } } } // TODO: do better; if (playlist->id() == AllMusicListID || playlist->id() == "musicResult") { for (auto &playlist : allplaylist()) { auto meta = playlist->removeMusicList(metalist); if (playlist == playinglist) { next = meta; } } /*-----Import song interface----*/ if (playlist->isEmpty() && playinglist->allmusic().isEmpty()) { qDebug() << "meta library clean"; onMusicStop(playlist, next); if (d->playlistMgr->playlist(AllMusicListID)->isEmpty()) { qDebug() << "Presenter::onMusiclistRemove Q_EMIT 1"; Q_EMIT metaLibraryClean(); } } MediaDatabase::instance()->removeMediaMetaList(metalist); d->library->removeMediaMetaList(metalist); } else if (playlist->id() == AlbumMusicListID || playlist->id() == ArtistMusicListID) { auto curPlaylist = d->playlistMgr->playlist(AllMusicListID); for (auto &autoPlaylist : allplaylist()) { auto meta = autoPlaylist->removeMusicList(metalist); if (autoPlaylist == playinglist) { next = meta; } } if (curPlaylist->isEmpty()) { qDebug() << "meta library clean"; onMusicStop(playlist, next); if (d->playlistMgr->playlist(AllMusicListID)->isEmpty()) { qDebug() << "Presenter::onMusiclistRemove Q_EMIT 2"; Q_EMIT metaLibraryClean(); } } MediaDatabase::instance()->removeMediaMetaList(metalist); d->library->removeMediaMetaList(metalist); } else if (playlist->id() == PlayMusicListID) { next = playlist->removeMusicList(metalist); if (playlist->isEmpty()) { qDebug() << "meta library clean"; onMusicStop(playlist, next); if (!d->player->activePlaylist().isNull()) d->player->activePlaylist()->play(nullptr); } } else { next = playlist->removeMusicList(metalist); } /*-----Judge the condition to remove the song playback switch -----*/ for (auto &meta : metalist) { if (d->player->isActiveMeta(meta) && (playinglist == playlist || playlist->id() == AllMusicListID)) { if (playinglist->isEmpty() || t_isLastMeta || next.isNull()) { /*æ–°å»ºæ­Œå•æ¸…ç©ºæ—¶åœæ­¢æ’­æ”¾*/ onMusicStop(playinglist, next); } else { onMusicPlay(playinglist, next); } } } if (playlist->allmusic().size() == 0 && playlist->id() != "play") { qDebug() << "Presenter::onMusiclistRemove Q_EMIT 3"; Q_EMIT musicListClear(); } } void Presenter::onMusiclistDelete(PlaylistPtr playlist, const MetaPtrList metalist) { Q_D(Presenter); // find next music MetaPtr next; bool t_isLastMeta = false; auto playinglist = d->player->curPlaylist(); //æ£€æŸ¥å½“å‰æ’­æ”¾çš„æ˜¯å¦åŒ…嫿œ€åŽä¸€é¦– for (auto meta : metalist) { if (!d->player->activeMeta().isNull() && meta->hash == d->player->activeMeta()->hash && playlist->isLast(meta)) { t_isLastMeta = true; } } for (auto &playlist : allplaylist()) { auto meta = playlist->removeMusicList(metalist); if (playlist == playinglist) { next = meta; } } if (playinglist->isEmpty()) { playinglist->play(nullptr); } auto allMusicList = d->playlistMgr->playlist(AllMusicListID); if (allMusicList->isEmpty()) { qDebug() << "meta library clean"; onMusicStop(playlist, MetaPtr()); Q_EMIT metaLibraryClean(); } MediaDatabase::instance()->removeMediaMetaList(metalist); QMap trashFiles; for (auto &meta : metalist) { if (d->player->activeMeta() && (meta->hash == d->player->activeMeta()->hash)) { if (playinglist->isEmpty() || t_isLastMeta) { onMusicStop(playinglist, next); } else { onMusicPlay(playinglist, next); } } trashFiles.insert(meta->localPath, ""); if (!meta->cuePath.isEmpty()) { trashFiles.insert(meta->cuePath, ""); } } for (auto file : trashFiles.keys()) { // FIXME: Q_EMIT d->moniter->fileRemoved(file); } if (!qEnvironmentVariableIsEmpty("FLATPAK_APPID")) { Dtk::Widget::DDesktopServices::trash(trashFiles.keys()); } else { QProcess::startDetached("gvfs-trash", trashFiles.keys()); } d->library->removeMediaMetaList(metalist); } void Presenter::onAddToPlaylist(PlaylistPtr playlist, const MetaPtrList metalist) { Q_D(Presenter); if (!playlist.isNull() && playlist->id() == FavMusicListID) { onAddMetasFavourite(metalist); return; } PlaylistPtr modifiedPlaylist = playlist; if (playlist.isNull()) { Q_EMIT showPlaylist(true); PlaylistMeta info; info.editmode = true; info.readonly = false; info.uuid = d->playlistMgr->newID(); info.displayName = d->playlistMgr->newDisplayName(); modifiedPlaylist = d->playlistMgr->addPlaylist(info); Q_EMIT playlistAdded(d->playlistMgr->playlist(info.uuid), true); } else { //bool existFlag = true; auto allMetas = modifiedPlaylist->allmusic(); int count = 0; for (auto meta : metalist) { //bool curExistFlag = false; for (auto curMeta : allMetas) { if (curMeta->hash == meta->hash) { count++; break; } } } Q_EMIT notifyAddToPlaylist(modifiedPlaylist, metalist, count); } if (d->playlistMgr->playlist(modifiedPlaylist->id()).isNull()) { qCritical() << "no list" << modifiedPlaylist->id(); return; } modifiedPlaylist->appendMusicList(metalist); } void Presenter::onAddMetaToPlaylist(PlaylistPtr playlist, const MetaPtrList metalist) { Q_D(Presenter); PlaylistPtr modifiedPlaylist = playlist; if (playlist.isNull()) { Q_EMIT showPlaylist(true); PlaylistMeta info; info.editmode = true; info.readonly = false; info.uuid = d->playlistMgr->newID(); info.displayName = d->playlistMgr->newDisplayName(); modifiedPlaylist = d->playlistMgr->addPlaylist(info); Q_EMIT playlistAdded(d->playlistMgr->playlist(info.uuid)); } else { //Q_EMIT notifyAddToPlaylist(modifiedPlaylist, metalist); } if (d->playlistMgr->playlist(modifiedPlaylist->id()).isNull()) { qCritical() << "no list" << modifiedPlaylist->id(); return; } modifiedPlaylist->appendMusicList(metalist); } void Presenter::onCurrentPlaylistChanged(PlaylistPtr playlist) { Q_D(Presenter); Q_ASSERT(!playlist.isNull()); d->currentPlaylist = playlist; Q_EMIT currentMusicListChanged(d->currentPlaylist); } void Presenter::onCustomResort(const QStringList &uuids) { Q_D(Presenter); d->playlistMgr->onCustomResort(uuids); } void Presenter::onRequestMusiclistMenu(const QPoint &pos, char type) { Q_D(Presenter); QList newlists = d->playlistMgr->allplaylist(); // remove all and fav and search newlists.removeAll(d->playlistMgr->playlist(AlbumMusicListID)); newlists.removeAll(d->playlistMgr->playlist(ArtistMusicListID)); newlists.removeAll(d->playlistMgr->playlist(AllMusicListID)); newlists.removeAll(d->playlistMgr->playlist(FavMusicListID)); newlists.removeAll(d->playlistMgr->playlist(SearchMusicListID)); newlists.removeAll(d->playlistMgr->playlist(AlbumCandListID)); newlists.removeAll(d->playlistMgr->playlist(MusicCandListID)); newlists.removeAll(d->playlistMgr->playlist(ArtistCandListID)); newlists.removeAll(d->playlistMgr->playlist(AlbumResultListID)); newlists.removeAll(d->playlistMgr->playlist(MusicResultListID)); newlists.removeAll(d->playlistMgr->playlist(ArtistResultListID)); auto selectedlist = d->currentPlaylist; auto favlist = d->playlistMgr->playlist(FavMusicListID); Q_EMIT this->requestMusicListMenu(pos, selectedlist, favlist, newlists, type); } void Presenter::removeListSame(QStringList *list) { for (int i = 0; i < list->count(); i++) { for (int k = i + 1; k < list->count(); k++) { if (list->at(i) == list->at(k)) { list->removeAt(k); k--; } } } } void Presenter::onSearchText(const QString &id, const QString &text) { Q_D(Presenter); QList resultlist; resultlist.clear(); if (id == "") {//æœç´¢æ enter按键 //æœç´¢æ­Œæ›²å€™é€‰:<=5个 auto musicList = d->playlistMgr->playlist(AllMusicListID);; auto searchList = d->playlistMgr->playlist(MusicResultListID); MetaPtrList musicMetaDataList; for (auto &metaData : musicList->allmusic()) { if (containsStr(text, metaData->title)) { musicMetaDataList.append(metaData); } } searchList->reset(musicMetaDataList); // Q_EMIT searchResult(text, searchList); resultlist.push_back(searchList); //æœç´¢æ¼”唱者候选:<=3 PlaylistPtr artistList = d->playlistMgr->playlist(ArtistMusicListID); auto searchArtistList = d->playlistMgr->playlist(ArtistResultListID); MetaPtrList artistMetaDataList; searchArtistList->clearTypePtr(); for (auto &metaData : artistList->playMusicTypePtrList()) { if (containsStr(text, metaData->name)) { searchArtistList->appendMusicTypePtrListData(metaData); } } // Q_EMIT searchResult(text, searchArtistList); resultlist.push_back(searchArtistList); //æœç´¢ä¸“辑候选:<=3 PlaylistPtr albumList = d->playlistMgr->playlist(AlbumMusicListID); auto searchAlbumList = d->playlistMgr->playlist(AlbumResultListID); MetaPtrList albumMetaDataList; searchAlbumList->clearTypePtr(); for (auto &metaData : albumList->playMusicTypePtrList()) { if (containsStr(text, metaData->name)) { searchAlbumList->appendMusicTypePtrListData(metaData); } } resultlist.push_back(searchAlbumList); Q_EMIT searchResult(text, resultlist, ""); return; } if (id == MusicResultListID) { //点击歌曲 resultlist.clear(); //æœç´¢æ­Œæ›² auto musicList = d->playlistMgr->playlist(AllMusicListID);; auto searchList = d->playlistMgr->playlist(MusicResultListID); MetaPtrList musicMetaDataList; //该音ä¹çš„æ­Œæ‰‹åˆ—表 QStringList artist, album; artist.clear(); album.clear(); for (auto &metaData : musicList->allmusic()) { if (containsStr(text, metaData->title)) { musicMetaDataList.append(metaData); if (metaData->album == "") { album.append("未知专辑"); } else { album.append(metaData->album); } if (metaData->artist == "") { album.append("未知歌手"); } else { artist.append(metaData->artist); } } } searchList->reset(musicMetaDataList); // Q_EMIT searchResult(text, searchList); resultlist.push_back(searchList); removeListSame(&artist); removeListSame(&album); //æœç´¢è¯¥éŸ³ä¹çš„专辑 PlaylistPtr albumList = d->playlistMgr->playlist(AlbumMusicListID); auto searchAlbumList = d->playlistMgr->playlist(AlbumResultListID); MetaPtrList albumMetaDataList; searchAlbumList->clearTypePtr(); for (auto &metaData : albumList->playMusicTypePtrList()) { for (int i = 0; i < album.length(); i++) { if (metaData->name.contains(album.at(i))) { searchAlbumList->appendMusicTypePtrListData(metaData); } } } resultlist.push_back(searchAlbumList); //æœç´¢è¯¥éŸ³ä¹çš„æ­Œæ‰‹ PlaylistPtr artistList = d->playlistMgr->playlist(ArtistMusicListID); auto searchArtistList = d->playlistMgr->playlist(ArtistResultListID); MetaPtrList artistMetaDataList; searchArtistList->clearTypePtr(); for (auto &metaData : artistList->playMusicTypePtrList()) { for (int i = 0; i < artist.length(); i++) { if (metaData->name.contains(artist.at(i))) { searchArtistList->appendMusicTypePtrListData(metaData); } } } resultlist.push_back(searchArtistList); Q_EMIT searchResult(text, resultlist, MusicResultListID); return; } if (id == ArtistResultListID) { resultlist.clear(); //æœç´¢è¯¥æ­Œæ‰‹ PlaylistPtr artistList = d->playlistMgr->playlist(ArtistMusicListID); auto searchArtistList = d->playlistMgr->playlist(ArtistResultListID); MetaPtrList artistMetaDataList; searchArtistList->clearTypePtr(); for (auto &metaData : artistList->playMusicTypePtrList()) { if (containsStr(text, metaData->name)) { searchArtistList->appendMusicTypePtrListData(metaData); } } resultlist.push_back(searchArtistList); //æœç´¢è¯¥æ­Œæ‰‹çš„éŸ³ä¹ auto musicList = d->playlistMgr->playlist(AllMusicListID);; auto searchList = d->playlistMgr->playlist(MusicResultListID); MetaPtrList musicMetaDataList; //该歌手的专辑列表 QStringList albumlist; albumlist.clear(); for (auto &metaData : musicList->allmusic()) { if (metaData->artist == "") { metaData->artist = "未知歌手"; } if (containsStr(text, metaData->artist)) { musicMetaDataList.append(metaData); if (metaData->album == "") { albumlist.append("未知专辑"); } else { albumlist.append(metaData->album); } } } searchList->reset(musicMetaDataList); resultlist.push_back(searchList); //去除相åŒçš„专辑 removeListSame(&albumlist); //该歌手的专辑 PlaylistPtr albumList = d->playlistMgr->playlist(AlbumMusicListID); auto searchAlbumList = d->playlistMgr->playlist(AlbumResultListID); MetaPtrList albumMetaDataList; searchAlbumList->clearTypePtr(); for (auto &metaData : albumList->playMusicTypePtrList()) { for (int i = 0; i < albumlist.length(); i++) { if (metaData->name.contains(albumlist.at(i))) { searchAlbumList->appendMusicTypePtrListData(metaData); } } } resultlist.push_back(searchAlbumList); Q_EMIT searchResult(text, resultlist, ArtistResultListID); return; } if (id == AlbumResultListID) { resultlist.clear(); //æœç´¢è¯¥ä¸“辑 PlaylistPtr albumList = d->playlistMgr->playlist(AlbumMusicListID); auto searchAlbumList = d->playlistMgr->playlist(AlbumResultListID); MetaPtrList albumMetaDataList; searchAlbumList->clearTypePtr(); for (auto &metaData : albumList->playMusicTypePtrList()) { if (containsStr(text, metaData->name)) { searchAlbumList->appendMusicTypePtrListData(metaData); } } resultlist.push_back(searchAlbumList); //æœç´¢è¯¥ä¸“è¾‘çš„éŸ³ä¹ auto musicList = d->playlistMgr->playlist(AllMusicListID);; auto searchList = d->playlistMgr->playlist(MusicResultListID); MetaPtrList musicMetaDataList; //该专辑的歌手列表 QStringList artist; artist.clear(); for (auto &metaData : musicList->allmusic()) { if (metaData->album == "") { metaData->album = "未知专辑"; } if (containsStr(text, metaData->album)) { musicMetaDataList.append(metaData); if (metaData->artist == "") { artist.append("未知歌手"); } else { artist.append(metaData->artist); } } } searchList->reset(musicMetaDataList); resultlist.push_back(searchList); //去除相åŒçš„æ­Œæ‰‹ removeListSame(&artist); //æœç´¢è¯¥ä¸“辑的歌手 auto artistList = d->playlistMgr->playlist(ArtistMusicListID); auto searchArtistList = d->playlistMgr->playlist(ArtistResultListID); MetaPtrList artistMetaDataList; searchArtistList->clearTypePtr(); for (auto &metaData : artistList->playMusicTypePtrList()) { for (int i = 0; i < artist.length(); i++) { if (metaData->name.contains(artist.at(i))) { searchArtistList->appendMusicTypePtrListData(metaData); } } } resultlist.push_back(searchArtistList); Q_EMIT searchResult(text, resultlist, AlbumResultListID); return; } } void Presenter::onSearchCand(const QString text) { Q_D(Presenter); //æœç´¢æ­Œæ›²å€™é€‰:<=5个 auto musicList = d->playlistMgr->playlist(AllMusicListID); PlaylistPtr musicListResult = nullptr; int count = 0; MetaPtrList musicMetaDataList; for (auto &metaData : musicList->allmusic()) { if (containsStr(text, metaData->title)) { musicMetaDataList.append(metaData); count ++; } if (count >= 5) { count = 0; break; } } auto searchList = d->playlistMgr->playlist(MusicCandListID); searchList->reset(musicMetaDataList); Q_EMIT searchCand(text, searchList); //æœç´¢æ¼”唱者候选:<=3 count = 0; MetaPtrList artistMetaDataList; PlaylistPtr artistList = d->playlistMgr->playlist(ArtistMusicListID); auto searchArtistList = d->playlistMgr->playlist(ArtistCandListID); searchArtistList->clearTypePtr(); for (auto &metaData : artistList->playMusicTypePtrList()) { if (containsStr(text, metaData->name)) { searchArtistList->appendMusicTypePtrListData(metaData); count ++; } if (count >= 3) { break; } } Q_EMIT searchCand(text, searchArtistList); //æœç´¢ä¸“辑候选:<=3 count = 0; MetaPtrList albumMetaDataList; PlaylistPtr albumList = d->playlistMgr->playlist(AlbumMusicListID); auto searchAlbumList = d->playlistMgr->playlist(AlbumCandListID); searchAlbumList->clearTypePtr(); for (auto &metaData : albumList->playMusicTypePtrList()) { if (containsStr(text, metaData->name)) { searchAlbumList->appendMusicTypePtrListData(metaData); count ++; } if (count >= 3) { break; } } Q_EMIT searchCand(text, searchAlbumList); } void Presenter::onExitSearch() { qDebug() << "exit search"; Q_D(Presenter); qDebug() << d->playlistBeforeSearch; if (!d->playlistBeforeSearch.isNull()) { d->currentPlaylist = d->playlistBeforeSearch; Q_EMIT this->currentMusicListChanged(d->playlistBeforeSearch); } } void Presenter::onLocateMusicAtAll(const QString &hash) { Q_D(Presenter); auto allList = d->playlistMgr->playlist(AllMusicListID); d->currentPlaylist = allList; Q_EMIT locateMusic(allList, allList->music(hash)); // onMusicPlay(allList, allList->music(hash)); } void Presenter::onChangeSearchMetaCache(const MetaPtr meta, const DMusic::SearchMeta &search) { Q_D(Presenter); if (meta->searchID != search.id) { qDebug() << "update search id " << search.id; meta->searchID = search.id; meta->updateSearchIndex(); Q_EMIT MediaDatabase::instance()->updateMediaMeta(meta); } Q_EMIT d->requestChangeMetaCache(meta, search); } void Presenter::onPlaylistAdd(bool edit) { Q_D(Presenter); PlaylistMeta info; info.editmode = edit; info.readonly = false; info.uuid = d->playlistMgr->newID(); info.displayName = d->playlistMgr->newDisplayName(); d->playlistMgr->addPlaylist(info); Q_EMIT playlistAdded(d->playlistMgr->playlist(info.uuid), edit); } void Presenter::onMusicPlay(PlaylistPtr playlist, const MetaPtr meta) { Q_D(Presenter); /**************************************************************** * deal with cd ejecting while Optical drive is still connecting. * **************************************************************/ if (!meta.isNull() && QFileInfo(meta->localPath).dir().isEmpty()) { Q_EMIT d->player->mediaError(playlist, meta, Player::ResourceError); return ; } auto toPlayMeta = meta; if (playlist.isNull()) { //ä¸ºç©ºåˆ™æ’­æ”¾æ‰€æœ‰éŸ³ä¹ playlist = d->playlistMgr->playlist(AllMusicListID); } d->player->setPlayOnLoaded(true); if (0 == d->playlistMgr->playlist(AllMusicListID)->length()) { //所有音ä¹ä¸ºç©ºåˆ™å¯¼å…¥éŸ³ä¹ Q_EMIT requestImportFiles(); return; } auto oldPlayinglist = d->player->activePlaylist(); if (!oldPlayinglist.isNull() && oldPlayinglist != playlist) { qDebug() << "stop old list" << oldPlayinglist->id() << playlist->id(); oldPlayinglist->play(MetaPtr()); } if (0 == playlist->length()) { qCritical() << "empty playlist" << playlist->displayName(); return; } if (toPlayMeta.isNull()) { toPlayMeta = playlist->first(); } if (!playlist->contains(toPlayMeta)) { toPlayMeta = playlist->next(meta); } Q_ASSERT(!toPlayMeta.isNull()); Q_ASSERT(!playlist.isNull()); qDebug() << "play" << playlist->displayName() << "( count:" << playlist->length() << ")" << toPlayMeta->title << toPlayMeta->hash; auto alllists = d->playlistMgr->allplaylist(); for (auto curList : alllists) { if (!curList.isNull()) curList->setPlayingStatus(true); } Q_EMIT d->play(playlist, toPlayMeta); } void Presenter::onMusicPause(PlaylistPtr playlist, const MetaPtr info) { Q_D(Presenter); auto alllists = d->playlistMgr->allplaylist(); for (auto curList : alllists) { if (!curList.isNull()) curList->setPlayingStatus(false); } Q_EMIT d->pause(); Q_EMIT musicPaused(playlist, info); } void Presenter::onMusicPauseNow(PlaylistPtr playlist, const MetaPtr meta) { Q_D(Presenter); d->player->pauseNow(); auto alllists = d->playlistMgr->allplaylist(); for (auto curList : alllists) { if (!curList.isNull()) curList->setPlayingStatus(false); } Q_EMIT musicPaused(playlist, meta); } void Presenter::onMusicResume(PlaylistPtr playlist, const MetaPtr info) { Q_D(Presenter); /**************************************************************** * deal with cd ejecting while Optical drive is still connecting. * **************************************************************/ if (!info.isNull() && QFileInfo(info->localPath).dir().isEmpty()) { Q_EMIT d->player->mediaError(playlist, info, Player::ResourceError); return ; } auto alllists = d->playlistMgr->allplaylist(); for (auto curList : alllists) { if (!curList.isNull()) curList->setPlayingStatus(true); } Q_EMIT d->resume(playlist, info); d->notifyMusicPlayed(playlist, info); } void Presenter::onMusicStop(PlaylistPtr playlist, const MetaPtr meta) { Q_D(Presenter); Q_EMIT coverSearchFinished(meta, SearchMeta(), ""); Q_EMIT lyricSearchFinished(meta, SearchMeta(), ""); d->player->stop(); d->metaBufferDetector->onClearBufferDetector(); auto alllists = d->playlistMgr->allplaylist(); for (auto curList : alllists) { if (!curList.isNull()) curList->setPlayingStatus(false); } Q_EMIT this->musicStoped(playlist, meta); } void Presenter::onMusicPrev(PlaylistPtr playlist, const MetaPtr meta) { Q_D(Presenter); if (playlist.isNull()) { return; } MetaPtr curMeta = meta; if (curMeta == nullptr) curMeta = playlist->first(); if (playlist->isEmpty()) { Q_EMIT coverSearchFinished(curMeta, SearchMeta(), ""); Q_EMIT lyricSearchFinished(curMeta, SearchMeta(), ""); d->player->stop(); Q_EMIT this->musicStoped(playlist, curMeta); return; } Q_EMIT d->playPrev(playlist, curMeta); } void Presenter::onMusicNext(PlaylistPtr playlist, const MetaPtr meta) { Q_D(Presenter); if (playlist.isNull()) { return; } MetaPtr curMeta = meta; if (curMeta == nullptr) curMeta = playlist->first(); if (playlist->isEmpty()) { Q_EMIT coverSearchFinished(curMeta, SearchMeta(), ""); Q_EMIT lyricSearchFinished(curMeta, SearchMeta(), ""); d->player->stop(); Q_EMIT this->musicStoped(playlist, curMeta); return; } Q_EMIT d->playNext(playlist, curMeta); } void Presenter::onToggleFavourite(const MetaPtr meta) { Q_D(Presenter); if (d->playlistMgr->playlist(FavMusicListID)->contains(meta)) { d->playlistMgr->playlist(FavMusicListID)->removeMusicList(MetaPtrList() << meta); } else { Q_EMIT notifyAddToPlaylist(d->playlistMgr->playlist(FavMusicListID), MetaPtrList() << meta, 0); d->playlistMgr->playlist(FavMusicListID)->appendMusicList(MetaPtrList() << meta); } } void Presenter::onAddMetasFavourite(const MetaPtrList metalist) { Q_D(Presenter); auto favMusicList = d->playlistMgr->playlist(FavMusicListID); auto favAllMetas = favMusicList->allmusic(); int count = 0; for (auto meta : metalist) { for (auto fMeta : favAllMetas) { if (meta->hash == fMeta->hash) { count++; break; } } } d->playlistMgr->playlist(FavMusicListID)->appendMusicList(metalist); Q_EMIT notifyAddToPlaylist(d->playlistMgr->playlist(FavMusicListID), metalist, count); } void Presenter::onRemoveMetasFavourite(const MetaPtrList metalist) { Q_D(Presenter); d->playlistMgr->playlist(FavMusicListID)->removeMusicList(metalist); } void Presenter::onChangeProgress(qint64 value, qint64 range) { Q_D(Presenter); /*-----setIOPosition------*/ //qDebug() << value << "-" << range; // d->player->setIOPosition(value, range); auto position = value * d->player->duration() / range; d->player->setPosition(position); } void Presenter::onVolumeChanged(int volume) { Q_D(Presenter); d->player->setVolume(volume); Q_EMIT d->updateMprisVolume(volume); } void Presenter::onPlayModeChanged(int mode) { Q_D(Presenter); d->player->setMode(static_cast(mode)); d->settings->setOption("base.play.playmode", mode); d->settings->sync(); Q_EMIT this->modeChanged(mode); } void Presenter::onToggleMute() { Q_D(Presenter); if (d->player->status() == Player::Paused || d->player->status() == Player::Playing) { if (d->player->isValidDbusMute()) d->player->setMuted(!d->player->muted()); if (d->player->muted()) { Q_EMIT d->updateMprisVolume(0); } else { Q_EMIT d->updateMprisVolume(d->player->volume()); } } else { //local toggle Q_EMIT localMutedChanged(0); } } void Presenter::onLocalToggleMute() { Q_D(Presenter); if (d->player->isValidDbusMute()) { d->player->setMuted(!d->player->muted()); } else { Q_EMIT localMutedChanged(1); } } void Presenter::onFadeInOut() { Q_D(Presenter); auto fadeInOut = d->settings->value("base.play.fade_in_out").toBool(); d->player->setFadeInOut(fadeInOut); } void Presenter::onUpdateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta) { Q_D(Presenter); if (meta.isNull() || (preTitle == meta->title && preArtist == meta->artist && preAlbum == meta->album)) return; Q_EMIT musicMetaUpdate(d->player->activePlaylist(), meta); if ((!preArtist.isEmpty() && preArtist != meta->artist) || (!preAlbum.isEmpty() && preAlbum != meta->album)) { auto artistPlaylist = d->playlistMgr->playlist(ArtistMusicListID); auto artistTypePtrList = artistPlaylist->playMusicTypePtrList(); for (auto curType : artistTypePtrList) { if (curType->name == preArtist) { curType->name = meta->artist; break; } } auto albumPlaylist = d->playlistMgr->playlist(AlbumMusicListID); auto albumTypePtrList = albumPlaylist->playMusicTypePtrList(); for (auto curType : albumTypePtrList) { if (curType->name == preAlbum) { curType->name = meta->album; curType->extraName = meta->artist; break; } } } } void Presenter::onPlayall(PlaylistPtr playlist) { Q_D(Presenter); if (playlist->id() == AlbumMusicListID || playlist->id() == ArtistMusicListID) { PlaylistPtr curPlaylist = playlist; auto playMusicTypePtrList = curPlaylist->playMusicTypePtrList(); auto PlayMusicTypePtr = playMusicTypePtrList[0]; QString name = PlayMusicTypePtr->name; if (curPlaylist.isNull()) { qWarning() << "can not player emptry playlist"; return; } MetaPtr curMeta; for (auto TypePtr : curPlaylist->playMusicTypePtrList()) { if (TypePtr->name == name) { auto metaHash = TypePtr->playlistMeta.sortMetas.at(0); if (TypePtr->playlistMeta.metas.contains(metaHash)) { curMeta = TypePtr->playlistMeta.metas[metaHash]; } } } onMusicPlay(playlist, curMeta); } else { int size = playlist->length(); if (size < 1) return; MetaPtr meta = playlist->playing(); if (meta == nullptr) meta = playlist->first(); if (d->player->mode() == Player::Shuffle) { int n = qrand() % size; meta = playlist->allmusic()[n]; } onMusicPlay(playlist, meta); } } void Presenter::onResort(PlaylistPtr playlist, int sortType) { playlist->sortBy(static_cast(sortType)); if (playlist->sortType() != Playlist::SortByCustom) { Q_EMIT this->musicListResorted(playlist); } } void Presenter::onImportFiles(const QStringList &filelist, PlaylistPtr playlist) { Q_D(Presenter); //PlaylistPtr playlist = d->currentPlaylist; PlaylistPtr curPlaylist = playlist; //bool flag = false; if (playlist == nullptr) { curPlaylist = d->playlistMgr->playlist(AllMusicListID); //flag = true; } requestImportPaths(curPlaylist, filelist); auto curPlayerlist = d->player->curPlaylist(); if (curPlayerlist->isEmpty()/* && flag*/) { d->player->setActivePlaylist(curPlaylist); } curPlayerlist->appendMusicList(curPlaylist->allmusic()); return; } void Presenter::onSpeechPlayMusic(const QString music) { Q_D(Presenter); PlaylistPtr musicList = d->playlistMgr->playlist(AllMusicListID); PlaylistPtr curPlayList = d->playlistMgr->playlist(PlayMusicListID); bool find = false; MetaPtrList musicMetaDataList; MetaPtr playMetaData; for (auto &metaData : musicList->allmusic()) { if (containsStr(music, metaData->title)) { musicMetaDataList.append(metaData); playMetaData = metaData; find = true; } } if (find) { curPlayList->reset(musicMetaDataList); // d->player->setActivePlaylist(curPlayList); onSyncMusicPlay(curPlayList, playMetaData); Q_EMIT sigSpeedResult(1, true); } else { Q_EMIT sigSpeedResult(1, false); } } void Presenter::onSpeechPlayArtist(const QString artist) { Q_D(Presenter); MetaPtrList artistMetaDataList; PlaylistPtr musicList = d->playlistMgr->playlist(AllMusicListID); PlaylistPtr curPlayList = d->playlistMgr->playlist(PlayMusicListID); bool find = false; MetaPtrList musicMetaDataList; MetaPtr playMetaData; for (auto &metaData : musicList->allmusic()) { if (containsStr(artist, metaData->artist)) { musicMetaDataList.append(metaData); find = true; } } if (find) { playMetaData = musicMetaDataList.first(); curPlayList->reset(musicMetaDataList); d->player->setActivePlaylist(curPlayList); onSyncMusicPlay(curPlayList, playMetaData); Q_EMIT sigSpeedResult(2, true); } else { Q_EMIT sigSpeedResult(2, false); } } void Presenter::onSpeechPlayArtistMusic(const QString artist, const QString music) { Q_D(Presenter); MetaPtrList artistMetaDataList; PlaylistPtr musicList = d->playlistMgr->playlist(AllMusicListID); PlaylistPtr curPlayList = d->playlistMgr->playlist(PlayMusicListID); bool find = false; MetaPtrList musicMetaDataList; MetaPtr playMetaData; for (auto &metaData : musicList->allmusic()) { if (containsStr(artist, metaData->artist)) { if (containsStr(music, metaData->title)) { musicMetaDataList.append(metaData); } find = true; } } if (find) { playMetaData = musicMetaDataList.first(); curPlayList->reset(musicMetaDataList); // d->player->setActivePlaylist(curPlayList); onSyncMusicPlay(curPlayList, playMetaData); Q_EMIT sigSpeedResult(3, true); } else { Q_EMIT sigSpeedResult(3, false); } } void Presenter::onSpeechPlayFaverite() { Q_D(Presenter); MetaPtrList artistMetaDataList; PlaylistPtr musicList = d->playlistMgr->playlist(FavMusicListID); PlaylistPtr curPlayList = d->playlistMgr->playlist(PlayMusicListID); MetaPtrList musicMetaDataList; MetaPtr playMetaData; if (musicList->allmusic().size() == 0) { Q_EMIT sigSpeedResult(4, false); } else { playMetaData = musicList->allmusic().first(); curPlayList->reset(musicList->allmusic()); d->player->setActivePlaylist(curPlayList); onSyncMusicPlay(curPlayList, playMetaData); Q_EMIT sigSpeedResult(4, true); } } void Presenter::onSpeechPlayCustom(const QString listName) { Q_D(Presenter); MetaPtrList artistMetaDataList; PlaylistPtr musicList ; PlaylistPtr curPlayList = d->playlistMgr->playlist(PlayMusicListID); bool find = false; for (auto mList : d->playlistMgr->allplaylist()) { if (containsStr(mList->displayName(), listName)) { musicList = mList; find = true; } } if (find) { MetaPtrList musicMetaDataList; MetaPtr playMetaData; playMetaData = musicList->allmusic().first(); curPlayList->reset(musicList->allmusic()); d->player->setActivePlaylist(curPlayList); onSyncMusicPlay(curPlayList, playMetaData); Q_EMIT sigSpeedResult(5, true); } else { Q_EMIT sigSpeedResult(5, false); } } void Presenter::onSpeechPlayRadom() { Q_D(Presenter); PlaylistPtr musicList = d->playlistMgr->playlist(AllMusicListID); PlaylistPtr curPlayList = d->playlistMgr->playlist(PlayMusicListID); MetaPtrList musicMetaDataList; MetaPtr playMetaData; int count = musicList->allmusic().size(); if (count == 0) { Q_EMIT sigSpeedResult(6, false); } else { int index = qrand() % count; playMetaData = musicList->allmusic().at(index); musicMetaDataList.append(playMetaData); curPlayList->reset(musicMetaDataList); onSyncMusicPlay(curPlayList, playMetaData); Q_EMIT sigSpeedResult(6, true); } } void Presenter::onSpeechPause() { Q_D(Presenter); onMusicPause(d->currentPlaylist, nullptr); } void Presenter::onSpeechStop() { Q_D(Presenter); onMusicStop(d->currentPlaylist, d->currentPlaylist->playing()); } void Presenter::onSpeechResume() { Q_D(Presenter); onSyncMusicResume(d->currentPlaylist, d->currentPlaylist->playing()); } void Presenter::onSpeechPrevious() { Q_D(Presenter); onSyncMusicPrev(d->currentPlaylist, d->currentPlaylist->playing()); } void Presenter::onSpeechNext() { Q_D(Presenter); onSyncMusicNext(d->currentPlaylist, d->currentPlaylist->playing()); } void Presenter::onSpeechFavorite() { Q_D(Presenter); onToggleFavourite(d->currentPlaylist->playing()); } void Presenter::onSpeechunFaverite() { Q_D(Presenter); onToggleFavourite(d->currentPlaylist->playing()); } void Presenter::onSpeechsetMode(const int mode) { //Q_D(Presenter); onPlayModeChanged(mode); } //设置å‡è¡¡å™¨(é…置文件) void Presenter::setEqualizer(bool enabled, int curIndex, QList indexbaud) { Q_D(Presenter); // qDebug() << "read equalizer config:" << enabled << "curIndex:" << curIndex << "indexbaud:" << indexbaud; d->player->setEqualizer(enabled, curIndex, indexbaud); } //使能 void Presenter::setEqualizerEnable(bool enabled) { Q_D(Presenter); d->player->setEqualizerEnable(enabled); } //滑动滑调(å‰ç½®æ”¾å¤§ï¼‰ void Presenter::setEqualizerpre(int val) { Q_D(Presenter); d->player->setEqualizerpre(val); } //滑动滑调(其他) void Presenter::setEqualizerbauds(int index, int val) { Q_D(Presenter); d->player->setEqualizerbauds(index, val); } //è®¾ç½®å½“å‰æ¨¡å¼ void Presenter::setEqualizerCurMode(int curIndex) { Q_D(Presenter); d->player->setEqualizerCurMode(curIndex); } void Presenter::localMuteChanged(bool mute) { Q_D(Presenter); d->player->setLocalMuted(mute); } void Presenter::onScanMusicDirectory() { auto musicDir = QStandardPaths::standardLocations(QStandardPaths::MusicLocation); qWarning() << "scan" << musicDir; PlaylistPtr playlist = nullptr; onImportFiles(musicDir, playlist); Q_D(Presenter); auto curPlaylist = d->playlistMgr->playlist(AllMusicListID); d->player->setActivePlaylist(curPlaylist); auto curPlayerlist = d->player->curPlaylist(); curPlayerlist->appendMusicList(curPlaylist->allmusic()); } void Presenter::initMpris(MprisPlayer *mprisPlayer) { if (!mprisPlayer) { return; } Q_D(Presenter); auto player = Player::instance(); connect(player, &Player::playbackStatusChanged, this, [ = ](Player::PlaybackStatus playbackStatus) { switch (playbackStatus) { case Player::InvalidPlaybackStatus: case Player::Stopped: mprisPlayer->setPlaybackStatus(Mpris::Stopped); break; case Player::Playing: mprisPlayer->setPlaybackStatus(Mpris::Playing); break; case Player::Paused: mprisPlayer->setPlaybackStatus(Mpris::Paused); break; } }); connect(this, &Presenter::musicPlayed, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { if (meta.isNull()) { return; } // TODO: support mpris playlist Q_UNUSED(playlist); QVariantMap metadata; metadata.insert(Mpris::metadataToString(Mpris::Title), meta->title); metadata.insert(Mpris::metadataToString(Mpris::Artist), meta->artist); metadata.insert(Mpris::metadataToString(Mpris::Album), meta->album); metadata.insert(Mpris::metadataToString(Mpris::Length), meta->length / 1000); metadata.insert(Mpris::metadataToString(Mpris::ArtUrl), meta->coverUrl); //mprisPlayer->setCanSeek(true); mprisPlayer->setMetadata(metadata); mprisPlayer->setLoopStatus(Mpris::Playlist); mprisPlayer->setPlaybackStatus(Mpris::Stopped); mprisPlayer->setVolume(double(player->volume()) / 100.0); }); connect(mprisPlayer, &MprisPlayer::playPauseRequested, this, [ = ]() { qCritical() << "it seems not call playbackStatusChanged"; switch (d->player->status()) { case Player::InvalidPlaybackStatus: case Player::Stopped: onMusicPlay(player->activePlaylist(), player->activeMeta()); mprisPlayer->setPlaybackStatus(Mpris::Playing); break; case Player::Playing: onMusicPause(player->activePlaylist(), player->activeMeta()); mprisPlayer->setPlaybackStatus(Mpris::Paused); break; case Player::Paused: onMusicResume(player->activePlaylist(), player->activeMeta()); mprisPlayer->setPlaybackStatus(Mpris::Playing); break; } }); connect(mprisPlayer, &MprisPlayer::stopRequested, this, [ = ]() { onMusicStop(player->activePlaylist(), player->activeMeta()); mprisPlayer->setPlaybackStatus(Mpris::Stopped); mprisPlayer->setMetadata(QVariantMap()); }); connect(mprisPlayer, &MprisPlayer::openUriRequested, this, [ = ](const QUrl & uri) { openUri(uri); }); connect(mprisPlayer, &MprisPlayer::playRequested, this, [ = ]() { if (d->player->activePlaylist().isNull()) { return; } if (d->player->status() == Player::Paused) { onMusicResume(player->activePlaylist(), player->activeMeta()); } else { onMusicPlay(player->activePlaylist(), player->activeMeta()); } mprisPlayer->setPlaybackStatus(Mpris::Playing); }); connect(mprisPlayer, &MprisPlayer::pauseRequested, this, [ = ]() { if (d->player->activePlaylist().isNull() && d->player != nullptr) { d->player->pauseNow(); return; } onMusicPauseNow(player->activePlaylist(), player->activeMeta()); mprisPlayer->setPlaybackStatus(Mpris::Paused); }); connect(mprisPlayer, &MprisPlayer::nextRequested, this, [ = ]() { if (d->player->activePlaylist().isNull()) { return; } onMusicNext(player->activePlaylist(), player->activeMeta()); mprisPlayer->setPlaybackStatus(Mpris::Playing); }); connect(mprisPlayer, &MprisPlayer::previousRequested, this, [ = ]() { if (d->player->activePlaylist().isNull()) { return; } onMusicPrev(player->activePlaylist(), player->activeMeta()); mprisPlayer->setPlaybackStatus(Mpris::Playing); }); connect(mprisPlayer, &MprisPlayer::volumeRequested, this, [ = ](double volume) { Q_UNUSED(volume) // onVolumeChanged(volume * 100); // Q_EMIT this->volumeChanged(volume * 100); }); connect(d, &PresenterPrivate::updateMprisVolume, this, [ = ](int volume) { mprisPlayer->setVolume((static_cast(volume)) / 100.0); }); connect(this, &Presenter::progrossChanged, this, [ = ](qint64 pos, qint64) { mprisPlayer->setPosition(pos); }); connect(this, &Presenter::coverSearchFinished, this, [ = ](const MetaPtr meta, const DMusic::SearchMeta &, const QByteArray &) { if (!meta) { return; } meta->coverUrl = MetaSearchService::coverUrl(meta); if (player->activeMeta().isNull() || meta.isNull()) { return; } if (player->activeMeta()->hash != meta->hash) { return; } QVariantMap metadata = mprisPlayer->metadata(); metadata.insert(Mpris::metadataToString(Mpris::ArtUrl), meta->coverUrl); mprisPlayer->setMetadata(metadata); }); } deepin-music-6.0.1.54/src/music-player/presenter/presenter.h000664 000000 000000 00000020577 13703317554 023722 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include "../core/playlist.h" #include #include #include #include class QAudioBuffer; class Playlist; class PresenterPrivate; class Transfer: public QObject { Q_OBJECT public: explicit Transfer(QObject *parent = 0); ~Transfer(); public slots: void onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); signals: void musicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); }; class Presenter : public QObject { Q_OBJECT public: explicit Presenter(QObject *parent = nullptr); ~Presenter(); void initMpris(MprisPlayer *mprisPlayer); void prepareData(); void postAction(); void handleQuit(); void openUri(const QUrl &uri); void removeListSame(QStringList *list); QList allplaylist(); PlaylistPtr playlist(const QString &id); public slots: void volumeUp(); void volumeDown(); void togglePaly(); void pause(); void next(); void prev(); void onHandleQuit(); void requestImportPaths(PlaylistPtr playlist, const QStringList &filelist); signals: void dataLoaded(); //æŽ§åˆ¶è¿›åº¦æ¡æ»‘å— void hidewaveformScale(); signals: //! player void audioBufferProbed(const QAudioBuffer &buffer); void metaBuffer(const QVector &buffer, const QString &hash); //! ui: request import dialog void meidaFilesImported(PlaylistPtr playlist, MetaPtrList metalist); //! ui: control // TODO: need path void requestImportFiles(); void showPlaylist(bool visible); void showMusicList(PlaylistPtr playlist); //! from playlist manager void playlistAdded(PlaylistPtr, bool newflag = false); void playlistRemove(PlaylistPtr); void activePlaylistChanged(PlaylistPtr); //! from music manager void playNext(PlaylistPtr playlist, const MetaPtr meta); void locateMusic(PlaylistPtr, const MetaPtr); void currentMusicListChanged(PlaylistPtr); void musicListResorted(PlaylistPtr); void musicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); void musicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist); void requestMusicListMenu(const QPoint &pos, PlaylistPtr selectedlist, PlaylistPtr favlist, QListnewlists, char type); void musicListClear(); //! from control void musicPlayed(PlaylistPtr playlist, const MetaPtr meta); void musicError(PlaylistPtr playlist, const MetaPtr meta, int error); void musicPaused(PlaylistPtr playlist, const MetaPtr meta); void musicStoped(PlaylistPtr playlist, const MetaPtr meta); void musicMetaUpdate(PlaylistPtr playlist, const MetaPtr meta); void progrossChanged(qint64 pos, qint64 length, qint64 coefficient); void volumeChanged(int volume); void mutedChanged(bool muted); /********************************************** * local mute operation,type: 0 volume , 1:mute * *******************************************/ void localMutedChanged(int type); void modeChanged(int); //! from lyricservice void requestContextSearch(const QString &context); void lyricSearchFinished(const MetaPtr, const DMusic::SearchMeta &song, const QByteArray &lyricData); void coverSearchFinished(const MetaPtr, const DMusic::SearchMeta &song, const QByteArray &coverData); void contextSearchFinished(const QString &context, const QList &metalist); //! meta info void metaLibraryClean(); void scanFinished(const QString &jobid, int mediaCount); void notifyMusciError(PlaylistPtr playlist, const MetaPtr meta, int error); void notifyAddToPlaylist(PlaylistPtr playlist, const MetaPtrList metalist, int count); //! search void searchCand(QString searchText, PlaylistPtr playlist); void searchResult(QString searchText, QList resultlist, QString id); void musicFileMiss(); //语音控制 void sigSpeedResult(int action, bool result); public slots: //! music control interface void onSyncMusicPlay(PlaylistPtr playlist, const MetaPtr meta); void onSyncMusicResume(PlaylistPtr playlist, const MetaPtr meta); void onSyncMusicPrev(PlaylistPtr playlist, const MetaPtr meta); void onSyncMusicNext(PlaylistPtr playlist, const MetaPtr meta); void onMusicPlay(PlaylistPtr playlist, const MetaPtr meta); void onMusicPause(PlaylistPtr playlist, const MetaPtr meta); void onMusicPauseNow(PlaylistPtr playlist, const MetaPtr meta); void onMusicResume(PlaylistPtr playlist, const MetaPtr meta); void onMusicStop(PlaylistPtr playlist, const MetaPtr meta); void onMusicPrev(PlaylistPtr playlist, const MetaPtr meta); void onMusicNext(PlaylistPtr playlist, const MetaPtr meta); void onToggleFavourite(const MetaPtr meta); void onAddMetasFavourite(const MetaPtrList metalist); void onRemoveMetasFavourite(const MetaPtrList metalist); void onChangeProgress(qint64 value, qint64 range); void onVolumeChanged(int volume); void onPlayModeChanged(int mode); void onToggleMute(); /****************************** *local toggle * *****************************/ void onLocalToggleMute(); void onFadeInOut(); void onUpdateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta); //! music list void onPlayall(PlaylistPtr playlist); void onResort(PlaylistPtr playlist, int sortType); //! ui: playlist manager interface void onMusiclistRemove(PlaylistPtr playlist, const MetaPtrList metalist); void onMusiclistDelete(PlaylistPtr playlist, const MetaPtrList metalist); void onAddToPlaylist(PlaylistPtr playlist, const MetaPtrList metalist); void onAddMetaToPlaylist(PlaylistPtr playlist, const MetaPtrList metalist); void onPlaylistAdd(bool edit); void onCurrentPlaylistChanged(PlaylistPtr playlist); void onCustomResort(const QStringList &uuids); //! ui: menu interface void onRequestMusiclistMenu(const QPoint &pos, char type); void onSearchText(const QString &id, const QString &text); void onSearchCand(const QString text);//查询候选项 void onExitSearch(); void onLocateMusicAtAll(const QString &hash); void onChangeSearchMetaCache(const MetaPtr meta, const DMusic::SearchMeta &search); void onScanMusicDirectory(); void onImportFiles(const QStringList &filelist, PlaylistPtr playlist); //语音控制槽函数 void onSpeechPlayMusic(const QString music); void onSpeechPlayArtist(const QString artist); void onSpeechPlayArtistMusic(const QString artist, const QString music); void onSpeechPlayFaverite(); void onSpeechPlayCustom(const QString listName); void onSpeechPlayRadom(); void onSpeechPause(); void onSpeechStop(); void onSpeechResume(); void onSpeechPrevious(); void onSpeechNext(); void onSpeechFavorite(); void onSpeechunFaverite(); void onSpeechsetMode(const int mode); //å‡è¡¡å™¨ void setEqualizer(bool enabled, int curIndex, QList indexbaud); void setEqualizerEnable(bool enabled); void setEqualizerpre(int val); void setEqualizerbauds(int index, int val); void setEqualizerCurMode(int curIndex); /************************************************** * local mute operation to player * ***********************************************/ void localMuteChanged(bool mute); private: bool containsStr(QString searchText, QString text); QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), Presenter) }; deepin-music-6.0.1.54/src/music-player/presenter/presenter_p.h000664 000000 000000 00000004571 13703317554 024235 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include "../core/playlist.h" #include "../core/musicsettings.h" #include "searchmeta.h" class Presenter; class MetaSearchService; class PlaylistManager; class Player; class MediaLibrary; class MetaBufferDetector; class Transfer; class PresenterPrivate: public QObject { Q_OBJECT public: PresenterPrivate(Presenter *parent = nullptr); void initBackend(); void notifyMusicPlayed(PlaylistPtr playlist, const MetaPtr meta); PlaylistPtr playlistBeforeSearch; PlaylistPtr currentPlaylist; bool syncPlayerResult = false; int continueErrorCount = 0; qint64 lastPlayPosition = 0; MetaPtr syncPlayerMeta; MetaSearchService *lyricService = nullptr; PlaylistManager *playlistMgr = nullptr; Player *player = nullptr; MediaLibrary *library = nullptr; MusicSettings *settings = nullptr; Transfer *transfer = nullptr; MetaBufferDetector *metaBufferDetector = nullptr; Presenter *q_ptr; Q_DECLARE_PUBLIC(Presenter) signals: void requestInitPlugin(); void requestMetaSearch(const MetaPtr); void requestChangeMetaCache(const MetaPtr meta, const DMusic::SearchMeta &search); void updateMprisVolume(int volume); void play(PlaylistPtr playlist, const MetaPtr info); void resume(PlaylistPtr playlist, const MetaPtr meta); void playNext(PlaylistPtr playlist, const MetaPtr info); void playPrev(PlaylistPtr playlist, const MetaPtr info); void stop(); void pause(); }; deepin-music-6.0.1.54/src/music-player/resource/000775 000000 000000 00000000000 13703317554 021347 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/000775 000000 000000 00000000000 13703317554 022766 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/000775 000000 000000 00000000000 13703317554 023707 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/Bullet window warning.svg000775 000000 000000 00000006234 13703317554 030605 0ustar00rootroot000000 000000 Bullet window warning Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/Bullet_window_warning.svg000775 000000 000000 00000006516 13703317554 031006 0ustar00rootroot000000 000000 Bullet window warning Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/Musical Interval.svg000775 000000 000000 00000003341 13703317554 027576 0ustar00rootroot000000 000000 Musical Interval Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/Musical_Interval.svg000775 000000 000000 00000003341 13703317554 027675 0ustar00rootroot000000 000000 Musical Interval Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/active/000775 000000 000000 00000000000 13703317554 025162 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/active/album_active.svg000664 000000 000000 00000002670 13703317554 030343 0ustar00rootroot000000 000000 album_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/active/all_music_active.svg000664 000000 000000 00000004436 13703317554 031215 0ustar00rootroot000000 000000 all music_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/active/famous_ballad_active.svg000664 000000 000000 00000003400 13703317554 032024 0ustar00rootroot000000 000000 famous ballad_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/active/my_collection_active.svg000664 000000 000000 00000002533 13703317554 032101 0ustar00rootroot000000 000000 my collection_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/active/picture_list_active.svg000664 000000 000000 00000003466 13703317554 031755 0ustar00rootroot000000 000000 picture list_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/active/singer_active.svg000664 000000 000000 00000005347 13703317554 030536 0ustar00rootroot000000 000000 singer_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/active/text_list_active.svg000664 000000 000000 00000003347 13703317554 031264 0ustar00rootroot000000 000000 text list_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/checked/000775 000000 000000 00000000000 13703317554 025275 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/checked/collection1_checked.svg000775 000000 000000 00000002164 13703317554 031706 0ustar00rootroot000000 000000 collection1_checked Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/checked/lyric_checked.svg000775 000000 000000 00000004307 13703317554 030615 0ustar00rootroot000000 000000 lyric_checked Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/checked/mute_checked.svg000775 000000 000000 00000004563 13703317554 030451 0ustar00rootroot000000 000000 mute_checked Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/checked/playlist_checked.svg000775 000000 000000 00000002366 13703317554 031337 0ustar00rootroot000000 000000 playlist_checked Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/checked/volume_checked.svg000775 000000 000000 00000003535 13703317554 031004 0ustar00rootroot000000 000000 volume_checked Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/checked/volume_low_checked.svg000775 000000 000000 00000002475 13703317554 031667 0ustar00rootroot000000 000000 volume_hover 1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/checked/volume_mid_checked.svg000775 000000 000000 00000003022 13703317554 031624 0ustar00rootroot000000 000000 volume_hover 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/close_round/000775 000000 000000 00000000000 13703317554 026223 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/close_round/close_hover_dark.svg000775 000000 000000 00000002421 13703317554 032257 0ustar00rootroot000000 000000 close-hover_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/close_round/close_normal_dark.svg000775 000000 000000 00000002417 13703317554 032431 0ustar00rootroot000000 000000 close-normal_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/close_round/close_press.svg000775 000000 000000 00000002424 13703317554 031272 0ustar00rootroot000000 000000 close-press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/disabled/000775 000000 000000 00000000000 13703317554 025456 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/disabled/last_disabled.svg000775 000000 000000 00000003344 13703317554 031000 0ustar00rootroot000000 000000 last_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/disabled/next_disabled.svg000775 000000 000000 00000003227 13703317554 031013 0ustar00rootroot000000 000000 next_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/disabled/play_disabled.svg000775 000000 000000 00000002217 13703317554 031000 0ustar00rootroot000000 000000 play_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/disabled/suspend_disabled.svg000775 000000 000000 00000001677 13703317554 031525 0ustar00rootroot000000 000000 suspend_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/focus/000775 000000 000000 00000000000 13703317554 025026 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/focus/add_focus.svg000775 000000 000000 00000007514 13703317554 027510 0ustar00rootroot000000 000000 add_focus Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/focus/back_focus.svg000775 000000 000000 00000004337 13703317554 027660 0ustar00rootroot000000 000000 back_focus Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/focus/search_focus.svg000775 000000 000000 00000004205 13703317554 030217 0ustar00rootroot000000 000000 search_focus Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/000775 000000 000000 00000000000 13703317554 025032 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/.DS_Store000775 000000 000000 00000014006 13703317554 026521 0ustar00rootroot000000 000000 Bud1  r list clear list_normal.svgIlocblob˜ÿÿÿÿÿÿclose_round hover.svgIlocblob~ÿÿÿÿÿÿlast_hover.svgIlocblob;(ÿÿÿÿÿÿlyric_hover.svgIlocblob©(ÿÿÿÿÿÿnext_hover.svgIlocblob(ÿÿÿÿÿÿplay_hover.svgIlocblob…(ÿÿÿÿÿÿsuspend_hover.svgIlocblobó(ÿÿÿÿÿÿvolume add_hover.svgIlocblob;˜ÿÿÿÿÿÿvolume lessen_hover.svgIlocblob©˜ÿÿÿÿÿÿ  @€ @€ @€ @ E DSDB `€ @€ @€ @deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/add_hover.svg000664 000000 000000 00000005313 13703317554 027510 0ustar00rootroot000000 000000 add_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/back_hover.svg000664 000000 000000 00000002106 13703317554 027655 0ustar00rootroot000000 000000 back_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/clear_list_normal.svg000664 000000 000000 00000002666 13703317554 031256 0ustar00rootroot000000 000000 clear list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/close_round_hover.svg000664 000000 000000 00000003073 13703317554 031275 0ustar00rootroot000000 000000 titlebutton/close_round hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/collection_hover.svg000664 000000 000000 00000002157 13703317554 031116 0ustar00rootroot000000 000000 collection_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/cross_cycling_hover.svg000664 000000 000000 00000003473 13703317554 031626 0ustar00rootroot000000 000000 cross-cycling_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/last_hover.svg000664 000000 000000 00000003333 13703317554 027723 0ustar00rootroot000000 000000 last_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/lyric_hover.svg000664 000000 000000 00000004305 13703317554 030102 0ustar00rootroot000000 000000 lyric_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/mute_hover.svg000664 000000 000000 00000004474 13703317554 027741 0ustar00rootroot000000 000000 mute_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/next_hover.svg000664 000000 000000 00000003215 13703317554 027735 0ustar00rootroot000000 000000 next_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/picture_list_hover.svg000664 000000 000000 00000001525 13703317554 031467 0ustar00rootroot000000 000000 picture list_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/play_hover.svg000664 000000 000000 00000002206 13703317554 027723 0ustar00rootroot000000 000000 play_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/playlist_hover.svg000664 000000 000000 00000002335 13703317554 030622 0ustar00rootroot000000 000000 playlist_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/search_hover.svg000664 000000 000000 00000002003 13703317554 030216 0ustar00rootroot000000 000000 search_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/sequential_loop_hover.svg000664 000000 000000 00000003771 13703317554 032171 0ustar00rootroot000000 000000 sequential loop_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/single_tune_circulation_hover.svg000664 000000 000000 00000004551 13703317554 033673 0ustar00rootroot000000 000000 single tune circulation_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/suspend_hover.svg000664 000000 000000 00000001656 13703317554 030447 0ustar00rootroot000000 000000 suspend_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/text_list_hover.svg000664 000000 000000 00000001517 13703317554 031001 0ustar00rootroot000000 000000 text list_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/volume_add_hover.svg000664 000000 000000 00000002262 13703317554 031077 0ustar00rootroot000000 000000 volume add_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/volume_hover.svg000664 000000 000000 00000003517 13703317554 030273 0ustar00rootroot000000 000000 volume_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/volume_lessen_hover.svg000664 000000 000000 00000003340 13703317554 031636 0ustar00rootroot000000 000000 volume lessen_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/volume_low_hover.svg000775 000000 000000 00000002475 13703317554 031161 0ustar00rootroot000000 000000 volume_hover 1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/hover/volume_mid_hover.svg000775 000000 000000 00000003022 13703317554 031116 0ustar00rootroot000000 000000 volume_hover 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/icon_import_music.svg000775 000000 000000 00000012750 13703317554 030162 0ustar00rootroot000000 000000 icon_import_music Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/import_music.svg000775 000000 000000 00000012750 13703317554 027152 0ustar00rootroot000000 000000 icon_import_music Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music-blue/000775 000000 000000 00000000000 13703317554 025754 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music-blue/music1.svg000775 000000 000000 00000001754 13703317554 027710 0ustar00rootroot000000 000000 music1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music-blue/music2.svg000775 000000 000000 00000001755 13703317554 027712 0ustar00rootroot000000 000000 music2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music-blue/music3.svg000775 000000 000000 00000002030 13703317554 027676 0ustar00rootroot000000 000000 music3 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music-blue/music4.svg000775 000000 000000 00000001754 13703317554 027713 0ustar00rootroot000000 000000 music4 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music-white/000775 000000 000000 00000000000 13703317554 026145 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music-white/.DS_Store000775 000000 000000 00000014014 13703317554 027633 0ustar00rootroot000000 000000 Bud1 c-whitmusic-white-album coverbwspblobÉbplist00×  ]ShowStatusBar[ShowPathbar[ShowToolbar[ShowTabView_ContainerShowSidebar\WindowBounds[ShowSidebar  _{{149, 200}, {770, 436}} %1=I`myz{|}~™šmusic-white-album coverlg1Scompmusic-white-album covermoDDblob¥ ­EÁÁAmusic-white-album covermodDblob¥ ­EÁÁAmusic-white-album coverph1Scompmusic-white-album covervSrnlongmusic-withe-sidebarbwspblobÉbplist00×  ]ShowStatusBar[ShowPathbar[ShowToolbar[ShowTabView_ContainerShowSidebar\WindowBounds[ShowSidebar  _{{149, 200}, {770, 436}} %1=I`myz{|}~™šmusic-withe-sidebarvSrnlong  @€ @€ @€ @ E DSDB `€ @€ @€ @deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music-white/music-white-album cover/000775 000000 000000 00000000000 13703317554 032600 5ustar00rootroot000000 000000 src/music-player/resource/mpimage/dark/music-white/music-white-album cover/1.svg000775 000000 000000 00000001540 13703317554 033405 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 1 Created with Sketch. src/music-player/resource/mpimage/dark/music-white/music-white-album cover/2.svg000775 000000 000000 00000001543 13703317554 033411 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 2 Created with Sketch. src/music-player/resource/mpimage/dark/music-white/music-white-album cover/3.svg000775 000000 000000 00000001550 13703317554 033410 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 3 Created with Sketch. src/music-player/resource/mpimage/dark/music-white/music-white-album cover/4.svg000775 000000 000000 00000001545 13703317554 033415 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 4 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/000775 000000 000000 00000000000 13703317554 032012 5ustar00rootroot000000 000000 src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music1.svg000775 000000 000000 00000001754 13703317554 033667 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 music1 Created with Sketch. src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music2.svg000775 000000 000000 00000001753 13703317554 033667 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 music2 Created with Sketch. src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music3.svg000775 000000 000000 00000002026 13703317554 033662 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 music3 Created with Sketch. src/music-player/resource/mpimage/dark/music-white/music-withe-sidebar/music4.svg000775 000000 000000 00000001752 13703317554 033670 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 music4 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music1.svg000775 000000 000000 00000001754 13703317554 025643 0ustar00rootroot000000 000000 music1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music2.svg000775 000000 000000 00000001755 13703317554 025645 0ustar00rootroot000000 000000 music2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music3.svg000775 000000 000000 00000002030 13703317554 025631 0ustar00rootroot000000 000000 music3 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/music4.svg000775 000000 000000 00000001754 13703317554 025646 0ustar00rootroot000000 000000 music4 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/000775 000000 000000 00000000000 13703317554 025177 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/.DS_Store000775 000000 000000 00000014010 13703317554 026661 0ustar00rootroot000000 000000 Bud1  r list clear list_normal.svgIlocblob;(ÿÿÿÿÿÿclose_round normal.svgIlocblob;ÿÿÿÿÿÿlast_normal.svgIlocblob(ÿÿÿÿÿÿlyric_normal.svgIlocblob…(ÿÿÿÿÿÿnext_normal.svgIlocblobó(ÿÿÿÿÿÿplay_normal.svgIlocblob;˜ÿÿÿÿÿÿsinger_normal.svgIlocblob©˜ÿÿÿÿÿÿsuspend_normal.svgIlocblob˜ÿÿÿÿÿÿvolume add_normal.svgIlocblob…˜ÿÿÿÿÿÿvolume lessen_normal.svgIlocblobó˜ÿÿÿÿÿÿ  @€ @€ @€ @ E DSDB `€ @€ @€ @deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/add_normal.svg000664 000000 000000 00000005306 13703317554 030024 0ustar00rootroot000000 000000 add_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/album_normal.svg000664 000000 000000 00000002656 13703317554 030401 0ustar00rootroot000000 000000 album_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/all_music_normal.svg000664 000000 000000 00000004424 13703317554 031244 0ustar00rootroot000000 000000 all music_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/clear_list_normal.svg000664 000000 000000 00000002666 13703317554 031423 0ustar00rootroot000000 000000 clear list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/close_round normal.svg000664 000000 000000 00000003076 13703317554 031513 0ustar00rootroot000000 000000 titlebutton/close_round normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/collection_normal.svg000664 000000 000000 00000002152 13703317554 031423 0ustar00rootroot000000 000000 collection_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/cross_cycling_normal.svg000664 000000 000000 00000003466 13703317554 032142 0ustar00rootroot000000 000000 cross-cycling_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/famous_ballad_normal.svg000664 000000 000000 00000003366 13703317554 032071 0ustar00rootroot000000 000000 famous ballad_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/last_normal.svg000664 000000 000000 00000003326 13703317554 030237 0ustar00rootroot000000 000000 last_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/lyric_normal.svg000664 000000 000000 00000004276 13703317554 030423 0ustar00rootroot000000 000000 lyric_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/mute_normal.svg000664 000000 000000 00000004467 13703317554 030255 0ustar00rootroot000000 000000 mute_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/my_collection_normal.svg000664 000000 000000 00000002521 13703317554 032130 0ustar00rootroot000000 000000 my collection_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/next_normal.svg000664 000000 000000 00000003210 13703317554 030242 0ustar00rootroot000000 000000 next_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/picture_list_normal.svg000664 000000 000000 00000001520 13703317554 031774 0ustar00rootroot000000 000000 picture list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/play_all_normal.svg000664 000000 000000 00000001706 13703317554 031071 0ustar00rootroot000000 000000 play all_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/play_normal.svg000664 000000 000000 00000002201 13703317554 030230 0ustar00rootroot000000 000000 play_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/playlist_normal.svg000664 000000 000000 00000002330 13703317554 031127 0ustar00rootroot000000 000000 playlist_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/random_play_normal.svg000664 000000 000000 00000003211 13703317554 031572 0ustar00rootroot000000 000000 random play_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/search_normal.svg000664 000000 000000 00000002010 13703317554 030526 0ustar00rootroot000000 000000 search_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/sequential_loop_normal.svg000664 000000 000000 00000004060 13703317554 032473 0ustar00rootroot000000 000000 sequential loop_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/singer_normal.svg000664 000000 000000 00000005337 13703317554 030567 0ustar00rootroot000000 000000 singer_normal Created with Sketch. src/music-player/resource/mpimage/dark/normal/single_tune_circulation_normal.svg000664 000000 000000 00000004664 13703317554 034133 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 single tune circulation_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/suspend_normal.svg000664 000000 000000 00000001657 13703317554 030762 0ustar00rootroot000000 000000 suspend_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/text_list_normal.svg000664 000000 000000 00000001512 13703317554 031306 0ustar00rootroot000000 000000 text list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/volume_add_normal.svg000664 000000 000000 00000002263 13703317554 031412 0ustar00rootroot000000 000000 volume add_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/volume_lessen_normal.svg000664 000000 000000 00000003341 13703317554 032151 0ustar00rootroot000000 000000 volume lessen_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/volume_low_normal.svg000775 000000 000000 00000002476 13703317554 031474 0ustar00rootroot000000 000000 volume_normal 1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/volume_mid_normal.svg000775 000000 000000 00000003023 13703317554 031431 0ustar00rootroot000000 000000 volume_normal 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/normal/volume_normal.svg000664 000000 000000 00000003512 13703317554 030600 0ustar00rootroot000000 000000 volume_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/000775 000000 000000 00000000000 13703317554 025043 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/.DS_Store000775 000000 000000 00000014006 13703317554 026532 0ustar00rootroot000000 000000 Bud1  r list clear list_press.svgIlocblob;(ÿÿÿÿÿÿclose_round press.svgIlocblobó˜ÿÿÿÿÿÿlast_press.svgIlocblob©(ÿÿÿÿÿÿlyric_press.svgIlocblob(ÿÿÿÿÿÿnext_press.svgIlocblob…(ÿÿÿÿÿÿplay_press.svgIlocblobó(ÿÿÿÿÿÿsuspend_press.svgIlocblob;˜ÿÿÿÿÿÿvolume add_press.svgIlocblob©˜ÿÿÿÿÿÿvolume lessen_press.svgIlocblob˜ÿÿÿÿÿÿ  @€ @€ @€ @ E DSDB `€ @€ @€ @deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/add_press.svg000664 000000 000000 00000005142 13703317554 027532 0ustar00rootroot000000 000000 add_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/back_press.svg000664 000000 000000 00000002155 13703317554 027703 0ustar00rootroot000000 000000 back_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/clear_list_press.svg000664 000000 000000 00000002703 13703317554 031123 0ustar00rootroot000000 000000 clear list_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/close_round_press.svg000664 000000 000000 00000003051 13703317554 031313 0ustar00rootroot000000 000000 titlebutton/close_round press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/collection1_press.svg000664 000000 000000 00000002164 13703317554 031217 0ustar00rootroot000000 000000 collection1_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/collection_press.svg000664 000000 000000 00000002215 13703317554 031133 0ustar00rootroot000000 000000 collection_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/cross_cycling_press.svg000664 000000 000000 00000003301 13703317554 031636 0ustar00rootroot000000 000000 cross-cycling_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/last_press.svg000664 000000 000000 00000003335 13703317554 027747 0ustar00rootroot000000 000000 last_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/lyric_press.svg000664 000000 000000 00000004305 13703317554 030124 0ustar00rootroot000000 000000 lyric_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/mute_press.svg000664 000000 000000 00000004563 13703317554 027762 0ustar00rootroot000000 000000 mute_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/next_press.svg000664 000000 000000 00000003217 13703317554 027761 0ustar00rootroot000000 000000 next_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/picture_list_press.svg000664 000000 000000 00000002071 13703317554 031506 0ustar00rootroot000000 000000 picture list_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/play_all_press.svg000664 000000 000000 00000001731 13703317554 030577 0ustar00rootroot000000 000000 play all_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/play_press.svg000664 000000 000000 00000002210 13703317554 027740 0ustar00rootroot000000 000000 play_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/playlist_press.svg000664 000000 000000 00000002366 13703317554 030650 0ustar00rootroot000000 000000 playlist_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/random_play_press.svg000664 000000 000000 00000003030 13703317554 031301 0ustar00rootroot000000 000000 random play_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/search_press.svg000664 000000 000000 00000002016 13703317554 030244 0ustar00rootroot000000 000000 search_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/sequential_loop_press.svg000664 000000 000000 00000003453 13703317554 032210 0ustar00rootroot000000 000000 sequential loop_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/single_tune_circulation_press.svg000664 000000 000000 00000004557 13703317554 033723 0ustar00rootroot000000 000000 single tune circulation_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/suspend_press.svg000664 000000 000000 00000001666 13703317554 030472 0ustar00rootroot000000 000000 suspend_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/text_list_press.svg000664 000000 000000 00000001753 13703317554 031025 0ustar00rootroot000000 000000 text list_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/volume_add_press.svg000664 000000 000000 00000002272 13703317554 031122 0ustar00rootroot000000 000000 volume add_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/volume_lessen_press.svg000664 000000 000000 00000003350 13703317554 031661 0ustar00rootroot000000 000000 volume lessen_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/press/volume_press.svg000664 000000 000000 00000003535 13703317554 030315 0ustar00rootroot000000 000000 volume_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/select 2.svg000775 000000 000000 00000003731 13703317554 026040 0ustar00rootroot000000 000000 select 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/select.svg000775 000000 000000 00000003731 13703317554 025716 0ustar00rootroot000000 000000 select 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/select_2.svg000775 000000 000000 00000003731 13703317554 026137 0ustar00rootroot000000 000000 select 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/dark/warning.svg000775 000000 000000 00000002110 13703317554 026072 0ustar00rootroot000000 000000 warning Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/000775 000000 000000 00000000000 13703317554 024075 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/Bullet window warning.svg000775 000000 000000 00000006234 13703317554 030773 0ustar00rootroot000000 000000 Bullet window warning Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/Bullet_window_warning.svg000775 000000 000000 00000006516 13703317554 031174 0ustar00rootroot000000 000000 Bullet window warning Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/Musical Interval.svg000775 000000 000000 00000003343 13703317554 027766 0ustar00rootroot000000 000000 Musical Interval Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/Musical_Interval.svg000775 000000 000000 00000003343 13703317554 030065 0ustar00rootroot000000 000000 Musical Interval Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/active/000775 000000 000000 00000000000 13703317554 025350 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/active/album_active.svg000664 000000 000000 00000002670 13703317554 030531 0ustar00rootroot000000 000000 album_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/active/all_music_active.svg000664 000000 000000 00000004436 13703317554 031403 0ustar00rootroot000000 000000 all music_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/active/famous_ballad_active.svg000664 000000 000000 00000003400 13703317554 032212 0ustar00rootroot000000 000000 famous ballad_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/active/my_collection_active.svg000664 000000 000000 00000002533 13703317554 032267 0ustar00rootroot000000 000000 my collection_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/active/picture_list_active.svg000664 000000 000000 00000003466 13703317554 032143 0ustar00rootroot000000 000000 picture list_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/active/singer_active.svg000664 000000 000000 00000005347 13703317554 030724 0ustar00rootroot000000 000000 singer_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/active/text_list_active.svg000664 000000 000000 00000003347 13703317554 031452 0ustar00rootroot000000 000000 text list_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/checked/000775 000000 000000 00000000000 13703317554 025463 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/checked/collection1_checked.svg000775 000000 000000 00000002164 13703317554 032074 0ustar00rootroot000000 000000 collection1_checked Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/checked/cross_cycling_checked.svg000775 000000 000000 00000003303 13703317554 032515 0ustar00rootroot000000 000000 cross-cycling_checked Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/checked/lyric_checked.svg000775 000000 000000 00000004307 13703317554 031003 0ustar00rootroot000000 000000 lyric_checked Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/checked/mute_checked.svg000775 000000 000000 00000004563 13703317554 030637 0ustar00rootroot000000 000000 mute_checked Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/checked/playlist_checked.svg000775 000000 000000 00000002366 13703317554 031525 0ustar00rootroot000000 000000 playlist_checked Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/checked/sequential_loop_checked.svg000775 000000 000000 00000003453 13703317554 033065 0ustar00rootroot000000 000000 sequential loop_checked Created with Sketch. src/music-player/resource/mpimage/light/checked/single_tune_circulation_checked.svg000775 000000 000000 00000004557 13703317554 034521 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 single tune circulation_checked Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/checked/volume_checked.svg000775 000000 000000 00000003535 13703317554 031172 0ustar00rootroot000000 000000 volume_checked Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/checked/volume_low_checked.svg000775 000000 000000 00000002521 13703317554 032045 0ustar00rootroot000000 000000 volume_checked 1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/checked/volume_mid_checked.svg000775 000000 000000 00000003046 13703317554 032020 0ustar00rootroot000000 000000 volume_checked 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/close-round/000775 000000 000000 00000000000 13703317554 026327 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/close-round/close_round hover.svg000775 000000 000000 00000003054 13703317554 032475 0ustar00rootroot000000 000000 titlebutton/close_round hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/close-round/close_round normal.svg000775 000000 000000 00000003076 13703317554 032646 0ustar00rootroot000000 000000 titlebutton/close_round normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/close-round/close_round press.svg000775 000000 000000 00000003051 13703317554 032503 0ustar00rootroot000000 000000 titlebutton/close_round press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD000775 000000 000000 00000003051 13703317554 033323 0ustar00rootroot000000 000000 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_0000775 000000 000000 00000003051 13703317554 033463 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_1000775 000000 000000 00000003051 13703317554 033464 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_2000775 000000 000000 00000003051 13703317554 033465 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_3000775 000000 000000 00000003051 13703317554 033466 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_4000775 000000 000000 00000003051 13703317554 033467 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~HEAD_5000775 000000 000000 00000003051 13703317554 033470 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739000775 000000 000000 00000003051 13703317554 034562 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_0000775 000000 000000 00000003051 13703317554 035001 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_1000775 000000 000000 00000003051 13703317554 035002 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_2000775 000000 000000 00000003051 13703317554 035003 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_3000775 000000 000000 00000003051 13703317554 035004 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_4000775 000000 000000 00000003051 13703317554 035005 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. src/music-player/resource/mpimage/light/close-round/close_round press.svg~fix:fix #2739_5000775 000000 000000 00000003051 13703317554 035006 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 titlebutton/close_round press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/deepin_music_player.svg000775 000000 000000 00000011251 13703317554 030641 0ustar00rootroot000000 000000 deepin-music-player Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/disabled/000775 000000 000000 00000000000 13703317554 025644 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/disabled/close_disabled.svg000664 000000 000000 00000002437 13703317554 031327 0ustar00rootroot000000 000000 close_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/disabled/last_disabled.svg000775 000000 000000 00000003376 13703317554 031173 0ustar00rootroot000000 000000 last_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/disabled/next_disabled.svg000775 000000 000000 00000003261 13703317554 031177 0ustar00rootroot000000 000000 next_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/disabled/play_disabled.svg000775 000000 000000 00000002251 13703317554 031164 0ustar00rootroot000000 000000 play_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/disabled/suspend_disabled.svg000775 000000 000000 00000001733 13703317554 031704 0ustar00rootroot000000 000000 suspend_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/focus/000775 000000 000000 00000000000 13703317554 025214 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/focus/add_focus.svg000775 000000 000000 00000007504 13703317554 027675 0ustar00rootroot000000 000000 add_focus Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/focus/back_focus.svg000775 000000 000000 00000004301 13703317554 030035 0ustar00rootroot000000 000000 back_focus Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/focus/search_focus.svg000775 000000 000000 00000004147 13703317554 030412 0ustar00rootroot000000 000000 search_focus Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/000775 000000 000000 00000000000 13703317554 025220 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/.DS_Store000775 000000 000000 00000020004 13703317554 026702 0ustar00rootroot000000 000000 Bud1 _hover  @€ @€ @€ @back_hover.svgIlocblob;(ÿÿÿÿÿÿclear list_normal.svgIlocblob©(ÿÿÿÿÿÿcollection_hover.svgIlocblob(ÿÿÿÿÿÿcross-cycling_hover.svgIlocblob…(ÿÿÿÿÿÿlast_hover.svgIlocblobó(ÿÿÿÿÿÿlyric_hover.svgIlocblob;˜ÿÿÿÿÿÿmute_hover.svgIlocblob©˜ÿÿÿÿÿÿnext_hover.svgIlocblob˜ÿÿÿÿÿÿplay_hover.svgIlocblob…˜ÿÿÿÿÿÿplaylist_hover.svgIlocblobó˜ÿÿÿÿÿÿsearch_hover.svgIlocblob;ÿÿÿÿÿÿsequential loop_hover.svgIlocblob©ÿÿÿÿÿÿ!single tune circulation_hover.svgIlocblobÿÿÿÿÿÿsuspend_hover.svgIlocblob…ÿÿÿÿÿÿvolume add_hover.svgIlocblobóÿÿÿÿÿÿvolume lessen_hover.svgIlocblob;xÿÿÿÿÿÿvolume_hover.svgIlocblob©xÿÿÿÿÿÿ@€ @ E DSDB `€ @€ @€ @deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/add_hover.svg000664 000000 000000 00000005137 13703317554 027702 0ustar00rootroot000000 000000 add_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/back_hover.svg000664 000000 000000 00000002124 13703317554 030043 0ustar00rootroot000000 000000 back_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/clear_list_normal.svg000664 000000 000000 00000002666 13703317554 031444 0ustar00rootroot000000 000000 clear list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/close_round hover.svg000664 000000 000000 00000003054 13703317554 031363 0ustar00rootroot000000 000000 titlebutton/close_round hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/collection_hover.svg000664 000000 000000 00000002213 13703317554 031275 0ustar00rootroot000000 000000 collection_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/cross_cycling_hover.svg000664 000000 000000 00000003475 13703317554 032016 0ustar00rootroot000000 000000 cross-cycling_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/last_hover.svg000664 000000 000000 00000003335 13703317554 030113 0ustar00rootroot000000 000000 last_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/lyric_hover.svg000664 000000 000000 00000004303 13703317554 030266 0ustar00rootroot000000 000000 lyric_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/mute_hover.svg000664 000000 000000 00000004476 13703317554 030131 0ustar00rootroot000000 000000 mute_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/next_hover.svg000664 000000 000000 00000003217 13703317554 030125 0ustar00rootroot000000 000000 next_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/picture_list_hover.svg000664 000000 000000 00000002067 13703317554 031657 0ustar00rootroot000000 000000 picture list_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/play_hover.svg000664 000000 000000 00000002210 13703317554 030104 0ustar00rootroot000000 000000 play_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/playlist_hover.svg000664 000000 000000 00000002337 13703317554 031012 0ustar00rootroot000000 000000 playlist_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/search_hover.svg000664 000000 000000 00000002014 13703317554 030406 0ustar00rootroot000000 000000 search_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/sequential_loop_hover.svg000664 000000 000000 00000004137 13703317554 032354 0ustar00rootroot000000 000000 sequential loop_hover Created with Sketch. src/music-player/resource/mpimage/light/hover/single_tune_circulation_hover.svg000664 000000 000000 00000004736 13703317554 034007 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 single tune circulation_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/suspend_hover.svg000664 000000 000000 00000001666 13703317554 030636 0ustar00rootroot000000 000000 suspend_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/text_list_hover.svg000664 000000 000000 00000001751 13703317554 031167 0ustar00rootroot000000 000000 text list_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/volume_add_hover.svg000664 000000 000000 00000002270 13703317554 031264 0ustar00rootroot000000 000000 volume add_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/volume_hover.svg000664 000000 000000 00000003521 13703317554 030454 0ustar00rootroot000000 000000 volume_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/volume_lessen_hover.svg000664 000000 000000 00000003346 13703317554 032032 0ustar00rootroot000000 000000 volume lessen_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/volume_low_hover.svg000775 000000 000000 00000002475 13703317554 031347 0ustar00rootroot000000 000000 volume_hover 1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/hover/volume_mid_hover.svg000775 000000 000000 00000003022 13703317554 031304 0ustar00rootroot000000 000000 volume_hover 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/import_music.svg000775 000000 000000 00000012611 13703317554 027334 0ustar00rootroot000000 000000 icon_import_music Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music-blue/000775 000000 000000 00000000000 13703317554 026142 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music-blue/.DS_Store000775 000000 000000 00000014004 13703317554 027627 0ustar00rootroot000000 000000 Bud1%  @€ @€ @€ @ E%DSDB`€ @€ @€ @deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music-blue/music1.svg000775 000000 000000 00000001754 13703317554 030076 0ustar00rootroot000000 000000 music1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music-blue/music2.svg000775 000000 000000 00000001755 13703317554 030100 0ustar00rootroot000000 000000 music2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music-blue/music3.svg000775 000000 000000 00000002030 13703317554 030064 0ustar00rootroot000000 000000 music3 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music-blue/music4.svg000775 000000 000000 00000001754 13703317554 030101 0ustar00rootroot000000 000000 music4 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music-white/000775 000000 000000 00000000000 13703317554 026333 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music-white/.DS_Store000775 000000 000000 00000014014 13703317554 030021 0ustar00rootroot000000 000000 Bud1 c-whitmusic-white-album coverbwspblobÉbplist00×  ]ShowStatusBar[ShowPathbar[ShowToolbar[ShowTabView_ContainerShowSidebar\WindowBounds[ShowSidebar  _{{149, 200}, {770, 436}} %1=I`myz{|}~™šmusic-white-album coverlg1Scompmusic-white-album covermoDDblob¥ ­EÁÁAmusic-white-album covermodDblob¥ ­EÁÁAmusic-white-album coverph1Scompmusic-white-album covervSrnlongmusic-withe-sidebarbwspblobÉbplist00×  ]ShowStatusBar[ShowPathbar[ShowToolbar[ShowTabView_ContainerShowSidebar\WindowBounds[ShowSidebar  _{{149, 200}, {770, 436}} %1=I`myz{|}~™šmusic-withe-sidebarvSrnlong  @€ @€ @€ @ E DSDB `€ @€ @€ @deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music-white/music-white-album cover/000775 000000 000000 00000000000 13703317554 032766 5ustar00rootroot000000 000000 src/music-player/resource/mpimage/light/music-white/music-white-album cover/1.svg000775 000000 000000 00000001540 13703317554 033573 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 1 Created with Sketch. src/music-player/resource/mpimage/light/music-white/music-white-album cover/2.svg000775 000000 000000 00000001543 13703317554 033577 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 2 Created with Sketch. src/music-player/resource/mpimage/light/music-white/music-white-album cover/3.svg000775 000000 000000 00000001550 13703317554 033576 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 3 Created with Sketch. src/music-player/resource/mpimage/light/music-white/music-white-album cover/4.svg000775 000000 000000 00000001545 13703317554 033603 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 4 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/000775 000000 000000 00000000000 13703317554 032200 5ustar00rootroot000000 000000 src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music1.svg000775 000000 000000 00000001754 13703317554 034055 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 music1 Created with Sketch. src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music2.svg000775 000000 000000 00000001753 13703317554 034055 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 music2 Created with Sketch. src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music3.svg000775 000000 000000 00000002026 13703317554 034050 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 music3 Created with Sketch. src/music-player/resource/mpimage/light/music-white/music-withe-sidebar/music4.svg000775 000000 000000 00000001752 13703317554 034056 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 music4 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music1.svg000775 000000 000000 00000001754 13703317554 026031 0ustar00rootroot000000 000000 music1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music2.svg000775 000000 000000 00000001755 13703317554 026033 0ustar00rootroot000000 000000 music2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music3.svg000775 000000 000000 00000002030 13703317554 026017 0ustar00rootroot000000 000000 music3 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music4.svg000775 000000 000000 00000001754 13703317554 026034 0ustar00rootroot000000 000000 music4 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music_white_album_cover/000775 000000 000000 00000000000 13703317554 030773 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music_white_album_cover/music1.svg000775 000000 000000 00000001540 13703317554 032720 0ustar00rootroot000000 000000 1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music_white_album_cover/music2.svg000775 000000 000000 00000001543 13703317554 032724 0ustar00rootroot000000 000000 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music_white_album_cover/music3.svg000775 000000 000000 00000001550 13703317554 032723 0ustar00rootroot000000 000000 3 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music_white_album_cover/music4.svg000775 000000 000000 00000001545 13703317554 032730 0ustar00rootroot000000 000000 4 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music_withe_sidebar/000775 000000 000000 00000000000 13703317554 030106 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music_withe_sidebar/music1.svg000775 000000 000000 00000001754 13703317554 032042 0ustar00rootroot000000 000000 music1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music_withe_sidebar/music2.svg000775 000000 000000 00000001753 13703317554 032042 0ustar00rootroot000000 000000 music2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music_withe_sidebar/music3.svg000775 000000 000000 00000002026 13703317554 032035 0ustar00rootroot000000 000000 music3 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/music_withe_sidebar/music4.svg000775 000000 000000 00000001752 13703317554 032043 0ustar00rootroot000000 000000 music4 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/000775 000000 000000 00000000000 13703317554 025365 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/.DS_Store000775 000000 000000 00000020004 13703317554 027047 0ustar00rootroot000000 000000 Bud1 normal  @€ @€ @€ @add_normal.svgIlocblob;(ÿÿÿÿÿÿalbum_normal.svgIlocblob©(ÿÿÿÿÿÿall music_normal.svgIlocblob(ÿÿÿÿÿÿback_normal.svgIlocblob…(ÿÿÿÿÿÿclear list_normal.svgIlocblobó(ÿÿÿÿÿÿcollection_normal.svgIlocblob©˜ÿÿÿÿÿÿcross-cycling_normal.svgIlocblob˜ÿÿÿÿÿÿfamous ballad_normal.svgIlocblob…˜ÿÿÿÿÿÿlast_normal.svgIlocblobó˜ÿÿÿÿÿÿlyric_normal.svgIlocblob;ÿÿÿÿÿÿmute_normal.svgIlocblob©ÿÿÿÿÿÿmy collection_normal.svgIlocblobÿÿÿÿÿÿnext_normal.svgIlocblob…ÿÿÿÿÿÿpicture list_normal.svgIlocblobóÿÿÿÿÿÿplay all_normal.svgIlocblob;xÿÿÿÿÿÿplay_normal.svgIlocblob©xÿÿÿÿÿÿplaylist_normal.svgIlocblobxÿÿÿÿÿÿrandom play_normal.svgIlocblob…xÿÿÿÿÿÿsearch_normal.svgIlocblobóxÿÿÿÿÿÿsequential loop_normal.svgIlocblob;èÿÿÿÿÿÿsinger_normal.svgIlocblob©èÿÿÿÿÿÿ"single tune circulation_normal.svgIlocblobèÿÿÿÿÿÿsuspend_normal.svgIlocblob…èÿÿÿÿÿÿtext list_normal.svgIlocblobóèÿÿÿÿÿÿvolume add_normal.svgIlocblob;Xÿÿÿÿÿÿvolume lessen_normal.svgIlocblob©Xÿÿÿÿÿÿvolume_normal.svgIlocblobXÿÿÿÿÿÿ E DSDB `€ @€ @€ @ch_normal.svgIlocblobóxÿÿÿÿÿÿsequential loop_normal.svgIlocblob;èÿÿÿÿÿÿsinger_normal.svgIlocblob©èÿÿÿÿÿÿ"single tune circulation_normal.svgIlocblobèÿÿÿÿÿÿsuspend_normal.svgIlocblob…èÿÿÿÿÿÿtext list_normal.svgIlocblobóèÿÿÿÿÿÿvolume add_normal.svgIlocblob;Xÿÿÿÿÿÿvolume lessen_normal.svgIlocblob©Xÿÿÿÿÿÿvolume_normal.svgIlocblobXÿÿÿÿÿÿdeepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/add_normal.svg000664 000000 000000 00000005310 13703317554 030205 0ustar00rootroot000000 000000 add_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/album_normal.svg000664 000000 000000 00000002656 13703317554 030567 0ustar00rootroot000000 000000 album_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/all_music_normal.svg000664 000000 000000 00000004424 13703317554 031432 0ustar00rootroot000000 000000 all music_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/back_normal.svg000664 000000 000000 00000002120 13703317554 030351 0ustar00rootroot000000 000000 back_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/clear_list_normal.svg000664 000000 000000 00000002666 13703317554 031611 0ustar00rootroot000000 000000 clear list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/close_round normal.svg000664 000000 000000 00000003076 13703317554 031701 0ustar00rootroot000000 000000 titlebutton/close_round normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/collection_normal.svg000664 000000 000000 00000002206 13703317554 031611 0ustar00rootroot000000 000000 collection_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/cross_cycling_normal.svg000664 000000 000000 00000003316 13703317554 032322 0ustar00rootroot000000 000000 cross-cycling_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/famous_ballad_normal.svg000664 000000 000000 00000003366 13703317554 032257 0ustar00rootroot000000 000000 famous ballad_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/last_normal.svg000664 000000 000000 00000003352 13703317554 030424 0ustar00rootroot000000 000000 last_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/lyric_normal.svg000664 000000 000000 00000004322 13703317554 030601 0ustar00rootroot000000 000000 lyric_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/mute_normal.svg000664 000000 000000 00000004600 13703317554 030430 0ustar00rootroot000000 000000 mute_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/my_collection_normal.svg000664 000000 000000 00000002521 13703317554 032316 0ustar00rootroot000000 000000 my collection_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/next_normal.svg000664 000000 000000 00000003234 13703317554 030436 0ustar00rootroot000000 000000 next_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/picture_list_normal.svg000664 000000 000000 00000002106 13703317554 032163 0ustar00rootroot000000 000000 picture list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/play_all_normal.svg000664 000000 000000 00000001711 13703317554 031253 0ustar00rootroot000000 000000 play all_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/play_normal.svg000664 000000 000000 00000002225 13703317554 030424 0ustar00rootroot000000 000000 play_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/playlist_normal.svg000664 000000 000000 00000002403 13703317554 031316 0ustar00rootroot000000 000000 playlist_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/random_play_normal.svg000664 000000 000000 00000002761 13703317554 031771 0ustar00rootroot000000 000000 random play_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/search_normal.svg000664 000000 000000 00000001764 13703317554 030733 0ustar00rootroot000000 000000 search_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/sequential_loop_normal.svg000664 000000 000000 00000004062 13703317554 032663 0ustar00rootroot000000 000000 sequential loop_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/singer_normal.svg000664 000000 000000 00000005337 13703317554 030755 0ustar00rootroot000000 000000 singer_normal Created with Sketch. src/music-player/resource/mpimage/light/normal/single_tune_circulation_normal.svg000664 000000 000000 00000004666 13703317554 034323 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 single tune circulation_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/suspend_normal.svg000664 000000 000000 00000001703 13703317554 031140 0ustar00rootroot000000 000000 suspend_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/text_list_normal.svg000664 000000 000000 00000001770 13703317554 031502 0ustar00rootroot000000 000000 text list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/volume_add_normal.svg000664 000000 000000 00000002307 13703317554 031577 0ustar00rootroot000000 000000 volume add_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/volume_lessen_normal.svg000664 000000 000000 00000003365 13703317554 032345 0ustar00rootroot000000 000000 volume lessen_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/volume_low_normal.svg000775 000000 000000 00000002522 13703317554 031652 0ustar00rootroot000000 000000 volume_normal 1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/volume_mid_normal.svg000775 000000 000000 00000003047 13703317554 031625 0ustar00rootroot000000 000000 volume_normal 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/normal/volume_normal.svg000664 000000 000000 00000003552 13703317554 030772 0ustar00rootroot000000 000000 volume_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/000775 000000 000000 00000000000 13703317554 025231 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/add_press.svg000664 000000 000000 00000005142 13703317554 027720 0ustar00rootroot000000 000000 add_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/back_press.svg000664 000000 000000 00000002155 13703317554 030071 0ustar00rootroot000000 000000 back_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/clear_list_press.svg000664 000000 000000 00000002703 13703317554 031311 0ustar00rootroot000000 000000 clear list_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/close_round press.svg000664 000000 000000 00000003051 13703317554 031402 0ustar00rootroot000000 000000 titlebutton/close_round press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/collection1_press.svg000664 000000 000000 00000002164 13703317554 031405 0ustar00rootroot000000 000000 collection1_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/collection_press.svg000664 000000 000000 00000002215 13703317554 031321 0ustar00rootroot000000 000000 collection_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/cross_cycling_press.svg000664 000000 000000 00000003301 13703317554 032024 0ustar00rootroot000000 000000 cross-cycling_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/last_press.svg000664 000000 000000 00000003335 13703317554 030135 0ustar00rootroot000000 000000 last_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/lyric_press.svg000664 000000 000000 00000004305 13703317554 030312 0ustar00rootroot000000 000000 lyric_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/mute_press.svg000664 000000 000000 00000004563 13703317554 030150 0ustar00rootroot000000 000000 mute_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/next_press.svg000664 000000 000000 00000003217 13703317554 030147 0ustar00rootroot000000 000000 next_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/picture_list_press.svg000664 000000 000000 00000002071 13703317554 031674 0ustar00rootroot000000 000000 picture list_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/play_all_press.svg000664 000000 000000 00000001731 13703317554 030765 0ustar00rootroot000000 000000 play all_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/play_press.svg000664 000000 000000 00000002210 13703317554 030126 0ustar00rootroot000000 000000 play_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/playlist_press.svg000664 000000 000000 00000002366 13703317554 031036 0ustar00rootroot000000 000000 playlist_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/random_play_press.svg000664 000000 000000 00000003030 13703317554 031467 0ustar00rootroot000000 000000 random play_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/search_press.svg000664 000000 000000 00000002016 13703317554 030432 0ustar00rootroot000000 000000 search_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/sequential_loop_press.svg000664 000000 000000 00000003453 13703317554 032376 0ustar00rootroot000000 000000 sequential loop_press Created with Sketch. src/music-player/resource/mpimage/light/press/single_tune_circulation_press.svg000664 000000 000000 00000004557 13703317554 034032 0ustar00rootroot000000 000000 deepin-music-6.0.1.54 single tune circulation_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/suspend_press.svg000664 000000 000000 00000001666 13703317554 030660 0ustar00rootroot000000 000000 suspend_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/text_list_press.svg000664 000000 000000 00000001753 13703317554 031213 0ustar00rootroot000000 000000 text list_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/volume_add_press.svg000664 000000 000000 00000002272 13703317554 031310 0ustar00rootroot000000 000000 volume add_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/volume_lessen_press.svg000664 000000 000000 00000003350 13703317554 032047 0ustar00rootroot000000 000000 volume lessen_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/volume_low_press.svg000775 000000 000000 00000002475 13703317554 031371 0ustar00rootroot000000 000000 volume_press 1 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/volume_mid_press.svg000775 000000 000000 00000003022 13703317554 031326 0ustar00rootroot000000 000000 volume_press 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/press/volume_press.svg000664 000000 000000 00000003535 13703317554 030503 0ustar00rootroot000000 000000 volume_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/select .svg000775 000000 000000 00000004367 13703317554 026152 0ustar00rootroot000000 000000 select 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/select.svg000775 000000 000000 00000004367 13703317554 026112 0ustar00rootroot000000 000000 select 2 Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/shadow.svg000664 000000 000000 00000002571 13703317554 026110 0ustar00rootroot000000 000000 shadow Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/mpimage/light/warning.svg000775 000000 000000 00000002110 13703317554 026260 0ustar00rootroot000000 000000 warning Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/resource.qrc000775 000000 000000 00000032150 13703317554 023711 0ustar00rootroot000000 000000 mpimage/light/import_music.svg mpimage/light/music1.svg mpimage/light/Musical_Interval.svg mpimage/light/music4.svg mpimage/light/select.svg mpimage/light/deepin_music_player.svg mpimage/light/music2.svg mpimage/light/warning.svg mpimage/light/music3.svg mpimage/light/Bullet_window_warning.svg mpimage/light/active/all_music_active.svg mpimage/light/active/picture_list_active.svg mpimage/light/active/text_list_active.svg mpimage/light/active/singer_active.svg mpimage/light/active/my_collection_active.svg mpimage/light/active/album_active.svg mpimage/light/active/famous_ballad_active.svg mpimage/light/checked/collection1_checked.svg mpimage/light/checked/single_tune_circulation_checked.svg mpimage/light/checked/cross_cycling_checked.svg mpimage/light/checked/volume_checked.svg mpimage/light/checked/sequential_loop_checked.svg mpimage/light/checked/mute_checked.svg mpimage/light/checked/playlist_checked.svg mpimage/light/checked/lyric_checked.svg mpimage/light/disabled/last_disabled.svg mpimage/light/disabled/suspend_disabled.svg mpimage/light/disabled/next_disabled.svg mpimage/light/disabled/play_disabled.svg mpimage/light/disabled/close_disabled.svg mpimage/light/focus/back_focus.svg mpimage/light/focus/add_focus.svg mpimage/light/focus/search_focus.svg mpimage/light/hover/volume_add_hover.svg mpimage/light/hover/text_list_hover.svg mpimage/light/hover/back_hover.svg mpimage/light/hover/add_hover.svg mpimage/light/hover/picture_list_hover.svg mpimage/light/hover/search_hover.svg mpimage/light/hover/volume_lessen_hover.svg mpimage/light/normal/album_normal.svg mpimage/light/normal/singer_normal.svg mpimage/light/normal/volume_lessen_normal.svg mpimage/light/normal/lyric_normal.svg mpimage/light/normal/last_normal.svg mpimage/light/normal/playlist_normal.svg mpimage/light/normal/text_list_normal.svg mpimage/light/normal/collection_normal.svg mpimage/light/normal/next_normal.svg mpimage/light/normal/clear_list_normal.svg mpimage/light/normal/suspend_normal.svg mpimage/light/normal/random_play_normal.svg mpimage/light/normal/volume_add_normal.svg mpimage/light/normal/back_normal.svg mpimage/light/normal/search_normal.svg mpimage/light/normal/cross_cycling_normal.svg mpimage/light/normal/play_all_normal.svg mpimage/light/normal/volume_normal.svg mpimage/light/normal/add_normal.svg mpimage/light/normal/mute_normal.svg mpimage/light/normal/famous_ballad_normal.svg mpimage/light/normal/sequential_loop_normal.svg mpimage/light/normal/all_music_normal.svg mpimage/light/normal/picture_list_normal.svg mpimage/light/normal/play_normal.svg mpimage/light/normal/single_tune_circulation_normal.svg mpimage/light/press/volume_add_press.svg mpimage/light/press/mute_press.svg mpimage/light/press/text_list_press.svg mpimage/light/press/volume_lessen_press.svg mpimage/light/press/random_play_press.svg mpimage/light/press/sequential_loop_press.svg mpimage/light/press/collection_press.svg mpimage/light/press/single_tune_circulation_press.svg mpimage/light/press/picture_list_press.svg mpimage/light/press/collection1_press.svg mpimage/light/press/next_press.svg mpimage/light/press/volume_press.svg mpimage/light/press/add_press.svg mpimage/light/press/back_press.svg mpimage/light/press/lyric_press.svg mpimage/light/press/play_all_press.svg mpimage/light/press/play_press.svg mpimage/light/press/playlist_press.svg mpimage/light/press/last_press.svg mpimage/light/press/clear_list_press.svg mpimage/light/press/cross_cycling_press.svg mpimage/light/press/suspend_press.svg mpimage/light/press/search_press.svg mpimage/dark/active/text_list_active.svg mpimage/dark/active/album_active.svg mpimage/dark/active/singer_active.svg mpimage/dark/active/picture_list_active.svg mpimage/dark/active/all_music_active.svg mpimage/dark/active/my_collection_active.svg mpimage/dark/active/famous_ballad_active.svg mpimage/dark/checked/mute_checked.svg mpimage/dark/checked/playlist_checked.svg mpimage/dark/checked/volume_checked.svg mpimage/dark/checked/collection1_checked.svg mpimage/dark/checked/lyric_checked.svg mpimage/dark/disabled/last_disabled.svg mpimage/dark/disabled/play_disabled.svg mpimage/dark/disabled/next_disabled.svg mpimage/dark/disabled/suspend_disabled.svg mpimage/dark/focus/search_focus.svg mpimage/dark/focus/add_focus.svg mpimage/dark/focus/back_focus.svg mpimage/dark/hover/back_hover.svg mpimage/dark/hover/picture_list_hover.svg mpimage/dark/hover/mute_hover.svg mpimage/dark/hover/playlist_hover.svg mpimage/dark/hover/last_hover.svg mpimage/dark/hover/volume_add_hover.svg mpimage/dark/hover/next_hover.svg mpimage/dark/hover/single_tune_circulation_hover.svg mpimage/dark/hover/volume_lessen_hover.svg mpimage/dark/hover/volume_hover.svg mpimage/dark/hover/cross_cycling_hover.svg mpimage/dark/hover/collection_hover.svg mpimage/dark/hover/add_hover.svg mpimage/dark/hover/suspend_hover.svg mpimage/dark/hover/search_hover.svg mpimage/dark/hover/text_list_hover.svg mpimage/dark/hover/play_hover.svg mpimage/dark/hover/lyric_hover.svg mpimage/dark/hover/sequential_loop_hover.svg mpimage/dark/normal/clear_list_normal.svg mpimage/dark/normal/last_normal.svg mpimage/dark/normal/famous_ballad_normal.svg mpimage/dark/normal/play_normal.svg mpimage/dark/normal/play_all_normal.svg mpimage/dark/normal/all_music_normal.svg mpimage/dark/normal/cross_cycling_normal.svg mpimage/dark/normal/next_normal.svg mpimage/dark/normal/playlist_normal.svg mpimage/dark/normal/single_tune_circulation_normal.svg mpimage/dark/normal/lyric_normal.svg mpimage/dark/normal/sequential_loop_normal.svg mpimage/dark/normal/text_list_normal.svg mpimage/dark/normal/add_normal.svg mpimage/dark/normal/album_normal.svg mpimage/dark/normal/search_normal.svg mpimage/dark/normal/volume_normal.svg mpimage/dark/normal/volume_lessen_normal.svg mpimage/dark/normal/singer_normal.svg mpimage/dark/normal/my_collection_normal.svg mpimage/dark/normal/collection_normal.svg mpimage/dark/normal/picture_list_normal.svg mpimage/dark/normal/random_play_normal.svg mpimage/dark/normal/mute_normal.svg mpimage/dark/normal/suspend_normal.svg mpimage/dark/normal/volume_add_normal.svg mpimage/dark/press/clear_list_press.svg mpimage/dark/press/play_press.svg mpimage/dark/press/collection1_press.svg mpimage/dark/press/mute_press.svg mpimage/dark/press/back_press.svg mpimage/dark/press/random_play_press.svg mpimage/dark/press/collection_press.svg mpimage/dark/press/single_tune_circulation_press.svg mpimage/dark/press/cross_cycling_press.svg mpimage/dark/press/last_press.svg mpimage/dark/press/volume_lessen_press.svg mpimage/dark/press/picture_list_press.svg mpimage/dark/press/text_list_press.svg mpimage/dark/press/play_all_press.svg mpimage/dark/press/next_press.svg mpimage/dark/press/volume_press.svg mpimage/dark/press/add_press.svg mpimage/dark/press/sequential_loop_press.svg mpimage/dark/press/playlist_press.svg mpimage/dark/press/suspend_press.svg mpimage/dark/press/search_press.svg mpimage/dark/press/volume_add_press.svg mpimage/dark/press/lyric_press.svg mpimage/dark/music1.svg mpimage/dark/Musical_Interval.svg mpimage/dark/warning.svg mpimage/dark/music2.svg mpimage/dark/import_music.svg mpimage/dark/music3.svg mpimage/dark/music4.svg mpimage/dark/select_2.svg mpimage/dark/Bullet_window_warning.svg mpimage/light/music_withe_sidebar/music2.svg mpimage/light/music_withe_sidebar/music3.svg mpimage/light/music_withe_sidebar/music4.svg mpimage/light/music_withe_sidebar/music1.svg mpimage/light/hover/close_round hover.svg mpimage/light/normal/close_round normal.svg mpimage/light/press/close_round press.svg mpimage/light/music_white_album_cover/music4.svg mpimage/light/music_white_album_cover/music1.svg mpimage/light/music_white_album_cover/music2.svg mpimage/light/music_white_album_cover/music3.svg mpimage/dark/icon_import_music.svg mpimage/dark/select.svg mpimage/dark/close_round/close_hover_dark.svg mpimage/dark/close_round/close_normal_dark.svg mpimage/dark/close_round/close_press.svg mpimage/light/close-round/close_round hover.svg mpimage/light/close-round/close_round normal.svg mpimage/light/close-round/close_round press.svg mpimage/light/normal/my_collection_normal.svg mpimage/dark/hover/volume_low_hover.svg mpimage/dark/normal/volume_mid_normal.svg mpimage/dark/normal/volume_low_normal.svg mpimage/light/checked/volume_mid_checked.svg mpimage/light/checked/volume_low_checked.svg mpimage/light/hover/volume_mid_hover.svg mpimage/light/hover/volume_low_hover.svg mpimage/light/normal/volume_mid_normal.svg mpimage/light/normal/volume_low_normal.svg mpimage/light/press/volume_mid_press.svg mpimage/light/press/volume_low_press.svg mpimage/dark/hover/volume_mid_hover.svg mpimage/dark/checked/volume_mid_checked.svg mpimage/dark/checked/volume_low_checked.svg mpimage/light/shadow.svg deepin-music-6.0.1.54/src/music-player/resource/theme/000775 000000 000000 00000000000 13703317554 022451 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/theme/common/000775 000000 000000 00000000000 13703317554 023741 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/000775 000000 000000 00000000000 13703317554 025023 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/app_icon.svg000664 000000 000000 00000033072 13703317554 027341 0ustar00rootroot000000 000000 app_icon Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/cover_max.svg000664 000000 000000 00000014100 13703317554 027523 0ustar00rootroot000000 000000 cover_max Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/cover_min.svg000664 000000 000000 00000011063 13703317554 027526 0ustar00rootroot000000 000000 cover_min Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/cover_welcome.svg000664 000000 000000 00000004506 13703317554 030402 0ustar00rootroot000000 000000 cover_welcome Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/deepin-music.svg000664 000000 000000 00000017262 13703317554 030136 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/del_notify.svg000664 000000 000000 00000007170 13703317554 027705 0ustar00rootroot000000 000000 del_notify Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/dialog_warning.svg000664 000000 000000 00000002310 13703317554 030524 0ustar00rootroot000000 000000 warning Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/fav_hover.svg000664 000000 000000 00000003752 13703317554 027532 0ustar00rootroot000000 000000 fav_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/fav_normal.svg000664 000000 000000 00000003777 13703317554 027706 0ustar00rootroot000000 000000 fav_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/fav_press.svg000664 000000 000000 00000003752 13703317554 027543 0ustar00rootroot000000 000000 fav_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/hide_lyc.svg000664 000000 000000 00000002642 13703317554 027330 0ustar00rootroot000000 000000 hide_lyc Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/hide_lyc_press.svg000664 000000 000000 00000002474 13703317554 030547 0ustar00rootroot000000 000000 hide_lyc_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/info_cover.svg000664 000000 000000 00000012333 13703317554 027677 0ustar00rootroot000000 000000 info_cover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/input_clear_hover.svg000664 000000 000000 00000002651 13703317554 031260 0ustar00rootroot000000 000000 input_clear_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/input_clear_normal.svg000664 000000 000000 00000002615 13703317554 031425 0ustar00rootroot000000 000000 input_clear_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/input_clear_press.svg000664 000000 000000 00000002626 13703317554 031273 0ustar00rootroot000000 000000 input_clear_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/jumpto_playing_hover.svg000664 000000 000000 00000001376 13703317554 032017 0ustar00rootroot000000 000000 jumpto_playing_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/jumpto_playing_normal.svg000664 000000 000000 00000001423 13703317554 032155 0ustar00rootroot000000 000000 jumpto_playing_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/jumpto_playing_press.svg000664 000000 000000 00000001376 13703317554 032030 0ustar00rootroot000000 000000 jumpto_playing_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/lrc_hover.svg000664 000000 000000 00000002423 13703317554 027530 0ustar00rootroot000000 000000 lrc_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/lrc_normal.svg000664 000000 000000 00000002450 13703317554 027675 0ustar00rootroot000000 000000 lrc_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/lrc_press.svg000664 000000 000000 00000002423 13703317554 027541 0ustar00rootroot000000 000000 lrc_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/lrc_search_hover.svg000664 000000 000000 00000002320 13703317554 031051 0ustar00rootroot000000 000000 lrc_search_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/lrc_search_normal.svg000664 000000 000000 00000002317 13703317554 031224 0ustar00rootroot000000 000000 lrc_search_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/lrc_search_press.svg000664 000000 000000 00000002337 13703317554 031072 0ustar00rootroot000000 000000 lrc_search_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/next_hover.svg000664 000000 000000 00000002126 13703317554 027726 0ustar00rootroot000000 000000 next_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/next_normal.svg000664 000000 000000 00000002153 13703317554 030073 0ustar00rootroot000000 000000 next_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/next_press.svg000664 000000 000000 00000002126 13703317554 027737 0ustar00rootroot000000 000000 next_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/notify_fail.svg000664 000000 000000 00000001526 13703317554 030053 0ustar00rootroot000000 000000 notify_fail Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/notify_fail_new.svg000664 000000 000000 00000002371 13703317554 030723 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/notify_success.svg000664 000000 000000 00000001444 13703317554 030607 0ustar00rootroot000000 000000 notify_success Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/notify_success_new.svg000664 000000 000000 00000002106 13703317554 031454 0ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/pause_hover.svg000664 000000 000000 00000002613 13703317554 030066 0ustar00rootroot000000 000000 pause_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/pause_normal.svg000664 000000 000000 00000002224 13703317554 030231 0ustar00rootroot000000 000000 pause_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/pause_press.svg000664 000000 000000 00000002075 13703317554 030101 0ustar00rootroot000000 000000 pause_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/picturelist_hover.svg000775 000000 000000 00000002067 13703317554 031326 0ustar00rootroot000000 000000 picture list_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/picturelist_normal.svg000775 000000 000000 00000002106 13703317554 031465 0ustar00rootroot000000 000000 picture list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/picturelist_press.svg000775 000000 000000 00000002071 13703317554 031332 0ustar00rootroot000000 000000 picture list_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/play_all.svg000664 000000 000000 00000003646 13703317554 027352 0ustar00rootroot000000 000000 play_all Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/playing_active.svg000664 000000 000000 00000001362 13703317554 030544 0ustar00rootroot000000 000000 playing_active Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/playing_normal.svg000664 000000 000000 00000001362 13703317554 030561 0ustar00rootroot000000 000000 playing_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/previous_hover.svg000664 000000 000000 00000002164 13703317554 030626 0ustar00rootroot000000 000000 previous_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/previous_normal.svg000664 000000 000000 00000002211 13703317554 030764 0ustar00rootroot000000 000000 previous_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/previous_press.svg000664 000000 000000 00000002164 13703317554 030637 0ustar00rootroot000000 000000 previous_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/repeat_all_hover.svg000664 000000 000000 00000001435 13703317554 031062 0ustar00rootroot000000 000000 repeat_all_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/repeat_all_normal.svg000664 000000 000000 00000001462 13703317554 031227 0ustar00rootroot000000 000000 repeat_all_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/repeat_all_press.svg000664 000000 000000 00000001435 13703317554 031073 0ustar00rootroot000000 000000 repeat_all_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/repeat_single_hover.svg000664 000000 000000 00000001361 13703317554 031571 0ustar00rootroot000000 000000 repeat_single_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/repeat_single_normal.svg000664 000000 000000 00000001406 13703317554 031736 0ustar00rootroot000000 000000 repeat_single_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/repeat_single_press.svg000664 000000 000000 00000001361 13703317554 031602 0ustar00rootroot000000 000000 repeat_single_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/sequence_hover.svg000664 000000 000000 00000001230 13703317554 030553 0ustar00rootroot000000 000000 sequence_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/sequence_normal.svg000664 000000 000000 00000001255 13703317554 030727 0ustar00rootroot000000 000000 sequence_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/sequence_press.svg000664 000000 000000 00000001230 13703317554 030564 0ustar00rootroot000000 000000 sequence_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/show_lyc.svg000664 000000 000000 00000002611 13703317554 027373 0ustar00rootroot000000 000000 show_lyc Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/show_lyc_hover.svg000664 000000 000000 00000002633 13703317554 030602 0ustar00rootroot000000 000000 show_lyc_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/show_lyc_press.svg000664 000000 000000 00000002633 13703317554 030613 0ustar00rootroot000000 000000 show_lyc_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/show_playlist_hover.svg000664 000000 000000 00000002456 13703317554 031657 0ustar00rootroot000000 000000 show_playlist_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/show_playlist_normal.svg000664 000000 000000 00000002503 13703317554 032015 0ustar00rootroot000000 000000 show_playlist_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/show_playlist_press.svg000664 000000 000000 00000002456 13703317554 031670 0ustar00rootroot000000 000000 show_playlist_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/shuffle_hover.svg000664 000000 000000 00000002403 13703317554 030402 0ustar00rootroot000000 000000 shuffle_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/shuffle_normal.svg000664 000000 000000 00000002430 13703317554 030547 0ustar00rootroot000000 000000 shuffle_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/shuffle_press.svg000664 000000 000000 00000002403 13703317554 030413 0ustar00rootroot000000 000000 shuffle_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/slider_handle.svg000664 000000 000000 00000006440 13703317554 030345 0ustar00rootroot000000 000000 slider_handle_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/start_hover.svg000664 000000 000000 00000003006 13703317554 030103 0ustar00rootroot000000 000000 start_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/start_normal.svg000664 000000 000000 00000002416 13703317554 030254 0ustar00rootroot000000 000000 start_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/start_press.svg000664 000000 000000 00000002270 13703317554 030116 0ustar00rootroot000000 000000 start_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/textlist_hover.svg000775 000000 000000 00000001751 13703317554 030636 0ustar00rootroot000000 000000 text list_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/textlist_normal.svg000775 000000 000000 00000001770 13703317554 031004 0ustar00rootroot000000 000000 text list_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/textlist_press.svg000775 000000 000000 00000001753 13703317554 030651 0ustar00rootroot000000 000000 text list_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/unfav_hover.svg000664 000000 000000 00000001477 13703317554 030077 0ustar00rootroot000000 000000 unfav_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/unfav_normal.svg000664 000000 000000 00000001501 13703317554 030230 0ustar00rootroot000000 000000 unfav_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/unfav_press.svg000664 000000 000000 00000001477 13703317554 030110 0ustar00rootroot000000 000000 unfav_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/volume_high_hover.svg000664 000000 000000 00000003434 13703317554 031261 0ustar00rootroot000000 000000 volumehigh_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/volume_high_normal.svg000664 000000 000000 00000003461 13703317554 031426 0ustar00rootroot000000 000000 volumehigh_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/volume_high_press.svg000664 000000 000000 00000003434 13703317554 031272 0ustar00rootroot000000 000000 volumehigh_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/volume_low_hover.svg000664 000000 000000 00000002702 13703317554 031140 0ustar00rootroot000000 000000 volume_low_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/volume_low_normal.svg000664 000000 000000 00000002727 13703317554 031314 0ustar00rootroot000000 000000 volume_low_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/volume_low_press.svg000664 000000 000000 00000002702 13703317554 031151 0ustar00rootroot000000 000000 volume_low_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/volume_mid_hover.svg000664 000000 000000 00000003156 13703317554 031114 0ustar00rootroot000000 000000 volumemid_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/volume_mid_normal.svg000664 000000 000000 00000003203 13703317554 031252 0ustar00rootroot000000 000000 volumemid_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/volume_mid_press.svg000664 000000 000000 00000003156 13703317554 031125 0ustar00rootroot000000 000000 volumemid_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/volume_mute_hover.svg000664 000000 000000 00000003566 13703317554 031322 0ustar00rootroot000000 000000 volume_mute_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/volume_mute_normal.svg000664 000000 000000 00000003613 13703317554 031460 0ustar00rootroot000000 000000 volume_mute_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/volume_mute_press.svg000664 000000 000000 00000003566 13703317554 031333 0ustar00rootroot000000 000000 volume_mute_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/common/image/warning.svg000664 000000 000000 00000002310 13703317554 027205 0ustar00rootroot000000 000000 warning Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/000775 000000 000000 00000000000 13703317554 023372 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/theme/dark/CloseConfirmDialog.theme000664 000000 000000 00000000442 13703317554 030121 0ustar00rootroot000000 000000 #CloseConfirmDialogLabel { margin-left: 2px; font-size: 13px; font-weight: 500; color: black; border: none; } QGroupBox { color: black; border: none; } QRadioButton { font-size: 12px; color: black; } QCheckBox { margin-left: 2px; font-size: 12px; color: black; } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/DDropdown.theme000664 000000 000000 00000000317 13703317554 026317 0ustar00rootroot000000 000000 #MusicListSort { border: none; } #MusicListSort[status="hover"] { border-radius: 4.0px; } #DDropdownText { font-size: 12px; } #DDropdownIcon { border-image: url(:/dark/image/dropdown_arrow.svg); }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/DSettingsDialog.theme000664 000000 000000 00000004027 13703317554 027445 0ustar00rootroot000000 000000 #DSettingsDialog { qproperty-backgroundColor: white; qproperty-borderColor: rgba(0, 0, 0, 0.2); } #Navigation { border: none; border-right: 1px solid rgba(0, 0, 0, 0.1); } #NavigationBar { border: none; } #ButtonGroupSingle { border: 1px solid rgba(0, 0, 0, 0.08); border-radius: 4.0px; } #ButtonGroupBegin { border: 1px solid rgba(0, 0, 0, 0.08); border-top-left-radius: 4.0px; border-bottom-left-radius: 4.0px; } #ButtonGroupBegin:checked { background-color: #2ca7f8; border: solid 1px rgba(0, 90, 224, 0.22); } #ButtonGroupMiddle { border-top: 1px solid rgba(0, 0, 0, 0.08); border-bottom: 1px solid rgba(0, 0, 0, 0.08); border-right: 1px solid rgba(0, 0, 0, 0.08); } #ButtonGroupMiddle:checked { background-color: #2ca7f8; border: solid 1px rgba(0, 90, 224, 0.22); } #ButtonGroupEnd { border: 1px solid rgba(0, 0, 0, 0.08); border-left: none; border-top-right-radius: 4.0px; border-bottom-right-radius: 4.0px; } #ButtonGroupEnd:checked { background-color: #2ca7f8; border: solid 1px rgba(0, 90, 224, 0.22); } #SettingsContentReset { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #FFFFFF, stop: 1 #FBFBFB); border-color: rgba(0, 131, 255, 0.4); border-radius: 4; border-style: solid; border-width: 1; outline: none; padding: 3px 24px 4px 24px; color: #0699ff; font-size: 14px; } #SettingsContentReset:hover { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #8ccfff, stop: 1 #4bb8ff); color: #FFFFFF; border-color: rgba(0, 117, 243, 0.2); } #SettingsContentReset:pressed { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #0b8cff, stop: 1 #0aa1ff); color: #FFFFFF; border-color: rgba(29, 129, 255, 0.3); } Dtk--Widget--DWindowCloseButton { border-image: url(:/images/light/images/window_close_normal.svg); } Dtk--Widget--DWindowCloseButton:hover { border-image: url(:/images/light/images/window_close_hover.svg); } Dtk--Widget--DWindowCloseButton:pressed { border-image: url(:/images/light/images/window_close_press.svg); }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/Footer.theme000664 000000 000000 00000012376 13703317554 025665 0ustar00rootroot000000 000000 #Footer { border-radius: 0; qproperty-defaultCover: ":/common/image/cover_welcome.svg"; background-color: rgba(0, 0, 0, 0%); } #FooterControlFrame { border: 0px solid blue; background-color: rgba(0, 0, 0, 0.8); } #FooterCover { qproperty-radius: 0; qproperty-borderColor: rgba(0, 0, 0, 0%); qproperty-shadowColor: rgba(0, 0, 0, 0%); } #FooterCoverHover { border: none; background-color: rgba(0, 0, 0, 0%); } #FooterCoverHover:hover { background-color: rgba(0, 0, 0, 30%); border-image: url(:/common/image/show_lyc_hover.svg); } #FooterCoverHover:pressed { background-color: rgba(0, 0, 0, 30%); border-image: url(:/common/image/show_lyc_press.svg); } #FooterCoverHover[viewname="lyric"] { border: none; background-color: rgba(0, 0, 0, 0%); } #FooterCoverHover[viewname="lyric"]:hover { background-color: rgba(0, 0, 0, 30%); border-image: url(:/common/image/hide_lyc.svg); } #FooterCoverHover[viewname="lyric"]:pressed { background-color: rgba(0, 0, 0, 30%); border-image: url(:/common/image/hide_lyc_press.svg); } #FooterTitle { font-size: 12px; color: #ffffff; } #FooterArtist { font-size: 11px; color: rgba(255, 255, 255, 0.6); } #FooterActionPrev { border-image: url(:/common/image/previous_normal.svg); } #FooterActionPrev:hover { border-image: url(:/common/image/previous_hover.svg); } #FooterActionPrev:pressed { border-image: url(:/common/image/previous_press.svg); } #FooterActionPlay { border-image: url(:/common/image/start_normal.svg); } #FooterActionPlay:hover { border-image: url(:/common/image/start_hover.svg); } #FooterActionPlay:pressed { border-image: url(:/common/image/start_press.svg); } #FooterActionPlay[playstatus=playing] { border-image: url(:/common/image/pause_normal.svg); } #FooterActionPlay:hover[playstatus=playing] { border-image: url(:/common/image/pause_hover.svg); } #FooterActionPlay:pressed[playstatus=playing] { border-image: url(:/common/image/pause_press.svg); } #FooterActionNext { border-image: url(:/common/image/next_normal.svg); } #FooterActionNext:hover { border-image: url(:/common/image/next_hover.svg); } #FooterActionNext:pressed { border-image: url(:/common/image/next_press.svg); } #FooterActionFavorite { border-image: url(:/common/image/fav_normal.svg); } #FooterActionFavorite:hover { border-image: url(:/common/image/fav_hover.svg); } #FooterActionFavorite:pressed { border-image: url(:/common/image/fav_press.svg); } #FooterActionFavorite[fav=true] { border-image: url(:/common/image/unfav_normal.svg); } #FooterActionFavorite:hover[fav=true] { border-image: url(:/common/image/unfav_hover.svg); } #FooterActionFavorite:pressed[fav=true] { border-image: url(:/common/image/unfav_press.svg); } #FooterActionLyric { border-image: url(:/common/image/lrc_normal.svg); } #FooterActionLyric:hover { border-image: url(:/common/image/lrc_hover.svg); } #FooterActionLyric:pressed { border-image: url(:/common/image/lrc_press.svg); } #FooterActionPlayMode { border-image: url(:/common/image/repeat_all_normal.svg); } #FooterActionPlayMode:hover { border-image: url(:/common/image/repeat_all_hover.svg); } #FooterActionPlayMode:pressed { border-image: url(:/common/image/repeat_all_press.svg); } #FooterActionPlayMode[mode="1"] { border-image: url(:/common/image/repeat_single_normal.svg); } #FooterActionPlayMode:hover[mode="1"] { border-image: url(:/common/image/repeat_single_hover.svg); } #FooterActionPlayMode:pressed[mode="1"] { border-image: url(:/common/image/repeat_single_press.svg); } #FooterActionPlayMode[mode="2"] { border-image: url(:/common/image/shuffle_normal.svg); } #FooterActionPlayMode:hover[mode="2"] { border-image: url(:/common/image/shuffle_hover.svg); } #FooterActionPlayMode:pressed[mode="2"] { border-image: url(:/common/image/shuffle_press.svg); } #FooterActionSound[volume="high"] { border-image: url(:/common/image/volume_high_normal.svg); } #FooterActionSound:hover[volume="high"] { border-image: url(:/common/image/volume_high_hover.svg); } #FooterActionSound:pressed[volume="high"] { border-image: url(:/common/image/volume_high_press.svg); } #FooterActionSound[volume="mid"] { border-image: url(:/common/image/volume_mid_normal.svg); } #FooterActionSound:hover[volume="mid"] { border-image: url(:/common/image/volume_mid_hover.svg); } #FooterActionSound:pressed[volume="mid"] { border-image: url(:/common/image/volume_mid_press.svg); } #FooterActionSound[volume="low"] { border-image: url(:/common/image/volume_low_normal.svg); } #FooterActionSound:hover[volume="low"] { border-image: url(:/common/image/volume_low_hover.svg); } #FooterActionSound:pressed[volume="low"] { border-image: url(:/common/image/volume_mid_press.svg); } #FooterActionSound[volume="mute"] { border-image: url(:/common/image/volume_mute_normal.svg); } #FooterActionSound:hover[volume="mute"] { border-image: url(:/common/image/volume_mute_hover.svg); } #FooterActionSound:pressed[volume="mute"] { border-image: url(:/common/image/volume_mute_press.svg); } #FooterActionPlayList { border-image: url(:/common/image/show_playlist_normal.svg); } #FooterActionPlayList:hover { border-image: url(:/common/image/show_playlist_hover.svg); } #FooterActionPlayList:pressed { border-image: url(:/common/image/show_playlist_press.svg); } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/ImportWidget.theme000664 000000 000000 00000001200 13703317554 027025 0ustar00rootroot000000 000000 #ImportWidget { background-color: rgba(32, 32, 32, 1); border-radius: 4px; } #ImportViewLogo { image: url(:/common/image/deepin-music.svg); } #ImportViewText { font-size: 12px; line-height: 1.5; text-align: center; color: #979797; } #ImportViewImportButton { font-family: SourceHanSansSC-Medium; font-size: 14px; color: #0599FF; border-image: url(:/dark/image/suggest_button_normal.svg); } #ImportViewImportButton:hover { color: white; border-image: url(:/dark/image/suggest_button_hover.svg); } #ImportViewImportButton:pressed { color: #2ca7f8; border-image: url(:/dark/image/suggest_button_press.svg); }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/InfoDialog.theme000664 000000 000000 00000001412 13703317554 026427 0ustar00rootroot000000 000000 #InfoDialog { qproperty-backgroundColor: white; qproperty-borderColor: rgba(0, 0, 0, 0.2); } #InfoClose { qproperty-normalPic: url(:/images/light/images/window/close_normal.svg); qproperty-hoverPic: url(:/images/light/images/window/close_hover.svg); qproperty-pressPic: url(:/images/light/images/window/close_press.svg); } #InfoCover { background: transparent; border: none; } #InfoTitle { font-size: 12px; qproperty-alignment: AlignCenter; color: black; } #InfoSplit { border-top: 1px solid rgba(0, 0, 0, 10%); } #InfoKey { border: 1px solid transparent; qproperty-alignment: AlignRight; font-size: 11px; color: #606060; } #InfoValue { border: 1px solid transparent; qproperty-alignment: AlignLeft; font-size: 11px; color: #000000; }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/LoadWidget.theme000664 000000 000000 00000000234 13703317554 026440 0ustar00rootroot000000 000000 LoadWidget { background-color: rgba(32, 32, 32, 1); } #LoadWidgetLabel { font-size: 12px; line-height: 1.5; text-align: center; color: #979797; }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/LyricView.theme000664 000000 000000 00000000366 13703317554 026340 0ustar00rootroot000000 000000 LyricView { color: rgba(255, 255, 255, 50%); font-size: 16px; background-color: transparent; border: none; } LyricView::item { height: 40px; } LyricView::item:selected { color: white; background-color: rgba(44, 167, 248, 100%); } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/LyricWidget.theme000664 000000 000000 00000004241 13703317554 026645 0ustar00rootroot000000 000000 #LyricWidget { qproperty-backgroundColor: rgba(0, 0, 0, 50%); qproperty-defaultCover: ":/common/image/cover_max.svg"; background-color: rgba(0, 0, 0, 50%); } #LyricCover { qproperty-radius: 4.0px; qproperty-borderColor: rgba(255, 255, 255, 20%); qproperty-shadowColor: rgba(0, 0, 0, 10%); } #SearchMetaFrame { border: 0px solid rgba(29, 129, 255, 0.5); } #SearchMetaHeader { color: white; font-size: 18px; qproperty-alignment: AlignCenter; } #SearchMetaTitle { padding-left: 7px; color: white; font-size: 12px; background-color: rgba(255, 255, 255, 0.1); border-radius: 4.0px; } #SearchMetaArtist { padding-left: 7px; color: white; font-size: 12px; background-color: rgba(255, 255, 255, 0.1); border-radius: 4.0px; } #SearchMetaButton { outline: none; font-size: 12px; border-radius: 4px; color: white; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.20), stop: 1.0000 rgba(255, 255, 255, 0.20)); border: 0px solid rgba(29, 129, 255, 0.5); } #SearchMetaButton:hover { color: white; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.30), stop: 1.0000 rgba(255, 255, 255, 0.30)); border: 0px solid rgba(29, 129, 255, 0.3); } #SearchMetaButton:pressed { color: #2ca7f8; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.10), stop: 1.0000 rgba(255, 255, 255, 0.10)); border: 0px solid rgba(0, 0, 0, 0.08); } #SearchMetaButton:disabled { color: rgba(255, 255, 255, 40%); background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.08), stop: 1.0000 rgba(255, 255, 255, 0.08)); border: 0px solid rgba(29, 129, 255, 0.5); } #ShowSearch { border-image: url(:/common/image/lrc_search_hover.svg); } #ShowSearch:hover { border-image: url(:/common/image/lrc_search_hover.svg); } #ShowSearch:pressed { border-image: url(:/common/image/lrc_search_press.svg); } #ExitSearch { color: rgba(255, 255, 255, 0.8); font-size: 12px; background-color: transparent; border: none; } #ExitSearch:hover { color: white; } #ExitSearch:pressed { color: #0082fa; } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/MainFrame.theme000664 000000 000000 00000000261 13703317554 026254 0ustar00rootroot000000 000000 #MainFrame { qproperty-borderColor: rgba(16, 16, 16, 80%); background-color: transparent; } #MainFrame[viewname="lyric"] { qproperty-borderColor: rgba(16, 16, 16, 70%); }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/MusicItemStyleProxy.theme000664 000000 000000 00000000607 13703317554 030403 0ustar00rootroot000000 000000 #MusicItemStyleProxy { qproperty-textColor: rgba(255, 255, 255, 70%); qproperty-titleColor: white; qproperty-highlightText: white; qproperty-background: #1c1c1c; qproperty-alternateBackground: #202020; qproperty-highlightedBackground: #2ca7f8; qproperty-playingIcon: ":/common/image/playing_active.svg"; qproperty-highlightPlayingIcon: ":/common/image/playing_active.svg"; } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/MusicListItem.theme000664 000000 000000 00000001646 13703317554 027160 0ustar00rootroot000000 000000 #MusicListItem { qproperty-playingIcon: ":/common/animation/playing/blue"; qproperty-highlightPlayingIcon: ":/common/animation/playing/blue"; } #MusicListIcon { image: url(:/dark/image/playlist.svg); } #MusicListIcon[iconName="album"] { image: url(:/dark/image/album_normal.svg); } #MusicListIcon[iconName="artist"] { image: url(:/dark/image/singer_normal.svg); } #MusicListIcon[iconName="all"] { image: url(:/dark/image/playlist_allmusic.svg); } #MusicListIcon[iconName="fav"] { image: url(:/dark/image/playlist_fav.svg); } #MusicListInterFrame { border: none; border-bottom: 1px solid rgba(0, 0, 0, 0.05); } #MusicListTitle { qproperty-alignment: AlignLeft; font-size: 12px; border: none; color: #afafaf; background: transparent; } #MusicListTitle[status="active"] { color: #009aff; } #MusicListTitle:focus[status="active"] { background: rgba(255, 255, 255, 0.15); border-radius: 4.0px; } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/MusicListSort.theme000664 000000 000000 00000007145 13703317554 027211 0ustar00rootroot000000 000000 Dtk--Widget--DComboBox { border: 1px solid; border-color: black; border-radius: 4px; padding: 1px 1px 1px 4px; color: #b4b4b4; font-size: 12px; qproperty-insensitiveTickImg: url(:/images/dark/images/tick_insensitive.svg); qproperty-hoverTickImg: url(:/images/dark/images/tick_hover.svg); qproperty-normalTickImg: url(:/images/dark/images/tick_hover.svg); background-color: rgba(255, 255, 255, 26); /*use as outside border*/ } Dtk--Widget--DComboBox:!editable, DComboBox::drop-down:editable { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #272727, stop: 1.0 #191919); /*combobox-popup: 0;*/ } /* DComboBox gets the "on" state when the popup is open */ Dtk--Widget--DComboBox:!editable:on, DComboBox::drop-down:editable:on { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #181818, stop: 1.0 #282828); } QAbstractItemView#DComboBoxItemView { selection-background-color: rgba(0, 0, 0, 0.4); background: transparent; margin: 0; font-size: 12px; } QComboBoxPrivateContainer { border: 1px solid black; background-color: #191919; } QAbstractItemView#DComboBoxItemView::item { min-height: 24; color: #b4b4b4; } Dtk--Widget--DComboBox::drop-down { subcontrol-origin: padding; subcontrol-position: center right; width: 16px; margin-right: 3; border-top-right-radius: 4px; /* same radius as the DComboBox */ border-bottom-right-radius: 4px; } Dtk--Widget--DComboBox::down-arrow { image: url(:/images/dark/images/arrow_down_normal.svg); } Dtk--Widget--DComboBox::down-arrow:hover { image: url(:/images/dark/images/arrow_down_hover.svg); } QAbstractItemView Dtk--Widget--DComboBoxItem { color: #b4b4b4; font-size: 12px; margin-left: 24; margin-bottom: 3; } QAbstractItemView Dtk--Widget--DComboBoxItem[hovered="true"] { color: white; } QAbstractItemView Dtk--Widget--DComboBoxItem[checked="true"] { color: #01BDFF; } #DComboBoxTitleMask { color: #b4b4b4; padding-left: 10px; } QFrame#DComboxInsideFrame { background-color: transparent; /* border-top-width: 1px; border-style: solid; border-radius: 3; border-top-color: rgba(255, 255, 255, 26); */ border: 1px solid; border-radius: 4px; border-top-color: rgba(255, 255, 255, 26); border-left-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(255, 255, 255, 26), stop: 1.0 rgba(255, 255, 255, 5)); border-right-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(255, 255, 255, 26), stop: 1.0 rgba(255, 255, 255, 5)); border-bottom-color: rgba(255, 255, 255, 5); } QFrame#ComboboxPopupTopEnd { border-bottom: 1px solid #222; border-top-left-radius: 4; border-top-right-radius: 4; background: transparent url(:/images/dark/images/combobox_up_arrow.svg); background-repeat: no-repeat; background-position: center; } QFrame#ComboboxPopupBottomEnd { border-top: 1px solid #222; border-bottom-left-radius: 4; border-bottom-right-radius: 4; background: transparent url(:/images/dark/images/combobox_down_arrow.svg); background-repeat: no-repeat; background-position: center; } Dtk--Widget--DComboBox:editable { border: 2px solid transparent; border-bottom: 1px solid #15FFFFFF; padding: 0px 0px 1px 0px; min-height: 21px; background-color: rgba(255, 255, 255, 26); } QLineEdit { background: transparent; border-right: 1px solid rgba(255, 255, 255, 50); margin-right: 4px; } Dtk--Widget--DComboBox[editable="true"] QFrame#DComboxInsideFrame { /*outside frame*/ background-color: rgba(0, 0, 0, 50); border: 1px solid black; } Dtk--Widget--DComboBox[alert="true"] QFrame#DComboxInsideFrame { border-color: #FF8F00; }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/MusicListView.theme000664 000000 000000 00000001331 13703317554 027163 0ustar00rootroot000000 000000 #MusicListView { color: #009aff; background-color: rgba(255, 255, 255, 0.0); show-decoration-selected: 1; selection-color: red; selection-background-color: rgba(42, 166, 248, 0.2); outline: none; } #MusicListView::item { color: #009aff; height: 56; } #MusicListView::item:selected:!active { color: white; background-color: qlineargradient(x1: 0 y1: 0, x2: 1 y2: 0, stop: 0 #2aa6f8, stop: 0.015 #2aa6f8, stop: 0.0155 rgba(42, 166, 248, 20%), stop: 1 rgba(42, 166, 248, 20%)); } #MusicListView::item:selected:active { color: white; background-color: qlineargradient(x1: 0 y1: 0, x2: 1 y2: 0, stop: 0 #2aa6f8, stop: 0.015 #2aa6f8, stop: 0.0155 rgba(42, 166, 248, 20%), stop: 1 rgba(42, 166, 248, 20%)); } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/MusicListWidget.theme000664 000000 000000 00000002326 13703317554 027501 0ustar00rootroot000000 000000 #MusicListWidget { border: 1px solid rgba(0, 0, 0, 10%); border-top: none; background-color: rgba(37, 37, 37, 0.9); } #MusicListWidgetAddFrame { border-radius: 5px; border-bottom: 1px solid rgba(0, 0, 0, 0.02); } #MusicListWidgetAdd { outline: none; font-size: 12px; border-radius: 4px; color: white; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.20), stop: 1.0000 rgba(255, 255, 255, 0.20)); border: 0px solid rgba(29, 129, 255, 0.5); } #MusicListWidgetAdd:hover { color: white; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.30), stop: 1.0000 rgba(255, 255, 255, 0.30)); border: 0px solid rgba(29, 129, 255, 0.3); } #MusicListWidgetAdd:pressed { color: #2ca7f8; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.10), stop: 1.0000 rgba(255, 255, 255, 0.10)); border: 0px solid rgba(0, 0, 0, 0.08); } #MusicListWidgetAdd:disabled { color: rgba(255, 255, 255, 40%); background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.08), stop: 1.0000 rgba(255, 255, 255, 0.08)); border: 0px solid rgba(29, 129, 255, 0.5); } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/PlayItemStyleProxy.theme000664 000000 000000 00000000606 13703317554 030227 0ustar00rootroot000000 000000 #PlayItemStyleProxy { qproperty-textColor: rgba(255, 255, 255, 70%); qproperty-titleColor: white; qproperty-highlightText: white; qproperty-background: #1c1c1c; qproperty-alternateBackground: #202020; qproperty-highlightedBackground: #2ca7f8; qproperty-playingIcon: ":/common/image/playing_active.svg"; qproperty-highlightPlayingIcon: ":/common/image/playing_active.svg"; } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/PlayListItem.theme000664 000000 000000 00000001365 13703317554 027003 0ustar00rootroot000000 000000 #PlayListItem { qproperty-playingIcon: ":/common/animation/playing/blue"; qproperty-highlightPlayingIcon: ":/common/animation/playing/blue"; } #PlayListIcon { image: url(:/dark/image/playlist.svg); } #PlayListIcon[iconName="all"] { image: url(:/dark/image/playlist_allmusic.svg); } #PlayListIcon[iconName="fav"] { image: url(:/dark/image/playlist_fav.svg); } #PlayListInterFrame { border: none; border-bottom: 1px solid rgba(0, 0, 0, 0.05); } #PlayListTitle { qproperty-alignment: AlignLeft; font-size: 12px; border: none; color: #afafaf; background: transparent; } #PlayListTitle[status="active"] { color: #009aff; } #PlayListTitle:focus[status="active"] { background: rgba(255, 255, 255, 0.15); border-radius: 4.0px; }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/PlayListSort.theme000664 000000 000000 00000007145 13703317554 027036 0ustar00rootroot000000 000000 Dtk--Widget--DComboBox { border: 1px solid; border-color: black; border-radius: 4px; padding: 1px 1px 1px 4px; color: #b4b4b4; font-size: 12px; qproperty-insensitiveTickImg: url(:/images/dark/images/tick_insensitive.svg); qproperty-hoverTickImg: url(:/images/dark/images/tick_hover.svg); qproperty-normalTickImg: url(:/images/dark/images/tick_hover.svg); background-color: rgba(255, 255, 255, 26); /*use as outside border*/ } Dtk--Widget--DComboBox:!editable, DComboBox::drop-down:editable { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #272727, stop: 1.0 #191919); /*combobox-popup: 0;*/ } /* DComboBox gets the "on" state when the popup is open */ Dtk--Widget--DComboBox:!editable:on, DComboBox::drop-down:editable:on { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #181818, stop: 1.0 #282828); } QAbstractItemView#DComboBoxItemView { selection-background-color: rgba(0, 0, 0, 0.4); background: transparent; margin: 0; font-size: 12px; } QComboBoxPrivateContainer { border: 1px solid black; background-color: #191919; } QAbstractItemView#DComboBoxItemView::item { min-height: 24; color: #b4b4b4; } Dtk--Widget--DComboBox::drop-down { subcontrol-origin: padding; subcontrol-position: center right; width: 16px; margin-right: 3; border-top-right-radius: 4px; /* same radius as the DComboBox */ border-bottom-right-radius: 4px; } Dtk--Widget--DComboBox::down-arrow { image: url(:/images/dark/images/arrow_down_normal.svg); } Dtk--Widget--DComboBox::down-arrow:hover { image: url(:/images/dark/images/arrow_down_hover.svg); } QAbstractItemView Dtk--Widget--DComboBoxItem { color: #b4b4b4; font-size: 12px; margin-left: 24; margin-bottom: 3; } QAbstractItemView Dtk--Widget--DComboBoxItem[hovered="true"] { color: white; } QAbstractItemView Dtk--Widget--DComboBoxItem[checked="true"] { color: #01BDFF; } #DComboBoxTitleMask { color: #b4b4b4; padding-left: 10px; } QFrame#DComboxInsideFrame { background-color: transparent; /* border-top-width: 1px; border-style: solid; border-radius: 3; border-top-color: rgba(255, 255, 255, 26); */ border: 1px solid; border-radius: 4px; border-top-color: rgba(255, 255, 255, 26); border-left-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(255, 255, 255, 26), stop: 1.0 rgba(255, 255, 255, 5)); border-right-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgba(255, 255, 255, 26), stop: 1.0 rgba(255, 255, 255, 5)); border-bottom-color: rgba(255, 255, 255, 5); } QFrame#ComboboxPopupTopEnd { border-bottom: 1px solid #222; border-top-left-radius: 4; border-top-right-radius: 4; background: transparent url(:/images/dark/images/combobox_up_arrow.svg); background-repeat: no-repeat; background-position: center; } QFrame#ComboboxPopupBottomEnd { border-top: 1px solid #222; border-bottom-left-radius: 4; border-bottom-right-radius: 4; background: transparent url(:/images/dark/images/combobox_down_arrow.svg); background-repeat: no-repeat; background-position: center; } Dtk--Widget--DComboBox:editable { border: 2px solid transparent; border-bottom: 1px solid #15FFFFFF; padding: 0px 0px 1px 0px; min-height: 21px; background-color: rgba(255, 255, 255, 26); } QLineEdit { background: transparent; border-right: 1px solid rgba(255, 255, 255, 50); margin-right: 4px; } Dtk--Widget--DComboBox[editable="true"] QFrame#DComboxInsideFrame { /*outside frame*/ background-color: rgba(0, 0, 0, 50); border: 1px solid black; } Dtk--Widget--DComboBox[alert="true"] QFrame#DComboxInsideFrame { border-color: #FF8F00; }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/PlayListView.theme000664 000000 000000 00000000325 13703317554 027012 0ustar00rootroot000000 000000 /* !!!! WARNING !!!!*/ /* modify MusicItem.theme for color */ #PlayListView { border: 0px solid red; margin: 0 0 0 0; outline: none; background: #202020; } /* #PlayListView::item { height: 36px; }*/ deepin-music-6.0.1.54/src/music-player/resource/theme/dark/PlayListWidget.theme000664 000000 000000 00000001541 13703317554 027324 0ustar00rootroot000000 000000 #PlayListWidget { border-radius: 4px; background-color: rgba(32, 32, 32, 0); } #PlayListActionBar { background-color: rgba(32, 32, 32, 1); } #PlayListEmptyHits { font-size: 24px; color: #d0d0d0; qproperty-alignment: AlignCenter; background-color: rgba(32, 32, 32, 1); } #PlayListPlayAll { font-size: 12px; padding: 0 10 0 10; border: none; border-radius: 3.0px; qproperty-icon: url(:/common/image/play_all.svg); } #PlayListPlayAll:hover { border: 0px solid rgba(0, 0, 0, 0.2); background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 20%), stop: 1 rgba(255, 255, 255, 20%)); } #PlayListPlayAll:pressed { color: #2ca7f8; border: 0px solid rgba(255, 255, 255, 0.2); background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 10%), stop: 1 rgba(255, 255, 255, 10%)); } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/PlaylistWidget.theme000664 000000 000000 00000002317 13703317554 027366 0ustar00rootroot000000 000000 #PlaylistWidget { border: 1px solid rgba(0, 0, 0, 10%); border-top: none; background-color: rgba(37, 37, 37, 0.9); } #PlaylistWidgetAddFrame { border-radius: 5px; border-bottom: 1px solid rgba(0, 0, 0, 0.02); } #PlaylistWidgetAdd { outline: none; font-size: 12px; border-radius: 4px; color: white; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.20), stop: 1.0000 rgba(255, 255, 255, 0.20)); border: 0px solid rgba(29, 129, 255, 0.5); } #PlaylistWidgetAdd:hover { color: white; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.30), stop: 1.0000 rgba(255, 255, 255, 0.30)); border: 0px solid rgba(29, 129, 255, 0.3); } #PlaylistWidgetAdd:pressed { color: #2ca7f8; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.10), stop: 1.0000 rgba(255, 255, 255, 0.10)); border: 0px solid rgba(0, 0, 0, 0.08); } #PlaylistWidgetAdd:disabled { color: rgba(255, 255, 255, 40%); background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.08), stop: 1.0000 rgba(255, 255, 255, 0.08)); border: 0px solid rgba(29, 129, 255, 0.5); }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/SearchEdit.theme000664 000000 000000 00000003773 13703317554 026443 0ustar00rootroot000000 000000 Dtk--Widget--DSearchEdit { border-radius: 4.0px; } Dtk--Widget--DSearchEdit #SearchIcon { margin: 2 -1 2 4 px; background-color: transparent; border-image: url(:/dark/image/search.svg); } Dtk--Widget--DSearchEdit #ClearIcon { background-color: transparent; qproperty-normalPic: url(:/dark/image/input_clear_normal.svg); qproperty-hoverPic: url(:/dark/image/input_clear_hover.svg); qproperty-pressPic: url(:/dark/image/input_clear_press.svg); } Dtk--Widget--DSearchEdit #Edit { color: white; font-size: 12px; border-radius: 0; padding-right: 15px; border: 5px solid; border-color: transparent; background-color: transparent; } Dtk--Widget--DSearchEdit QFrame#DEditInsideFrame { border: 0px solid; border-radius: 4px; border-color: rgba(0, 0, 0, 0.08); background-color: rgba(255, 255, 255, 15%); } Dtk--Widget--DSearchEdit #PlaceHolder { font-size: 12px; color: white; margin: 0 0 0 3px; } /*-----------------------------------*/ Dtk--Widget--DSearchEdit[viewname="lyric"] { border-radius: 4.0px; background-color: transparent; } Dtk--Widget--DSearchEdit[viewname="lyric"] #SearchIcon { margin: 2 -1 2 4 px; background-color: transparent; border-image: url(:/dark/image/search.svg); } Dtk--Widget--DSearchEdit[viewname="lyric"] #ClearIcon { background-color: transparent; qproperty-normalPic: url(:/dark/image/input_clear_normal.svg); qproperty-hoverPic: url(:/dark/image/input_clear_hover.svg); qproperty-pressPic: url(:/dark/image/input_clear_press.svg); } Dtk--Widget--DSearchEdit[viewname="lyric"] #Edit { font-size: 12px; color: white; padding-right: 15px; border: 5px solid; border-color: transparent; background-color: transparent; } Dtk--Widget--DSearchEdit[viewname="lyric"] QFrame#DEditInsideFrame { background-color: rgba(255, 255, 255, 0.15); border-radius: 4.0px; border-color: rgba(255, 255, 255, 0.05); border: none; } Dtk--Widget--DSearchEdit[viewname="lyric"] #PlaceHolder { color: white; margin: 0 0 0 3px; font-size: 12px; }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/SearchMetaItem.theme000664 000000 000000 00000001150 13703317554 027246 0ustar00rootroot000000 000000 SearchMetaItem { border-radius: 4.0px; border: none; border: 0px solid rgba(0, 0, 0, 0.5); } #SearchMetaItemInterFrame { border: none; border-bottom: 1px solid rgba(255, 255, 255, 0.05); } #SearchMetaItemTitle { font-size: 12px; color: #ffffff; } #SearchMetaItemArtist { font-size: 10px; color: rgba(255, 255, 255, 0.8); } #SearchMetaItemCheck { background-color: transparent; border-image: url(:/common/image/none.svg); } #SearchMetaItemCheck[active=true] { border-image: url(:/common/image/select.svg); } #SearchMetaItemLength { font-size: 11px; color: rgba(255, 255, 255, 0.8); }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/SearchMetaList.theme000664 000000 000000 00000000532 13703317554 027266 0ustar00rootroot000000 000000 SearchMetaList { color: #009aff; border-radius: 4.0px; background-color: rgba(255, 255, 255, 0.1); outline: none; border: none; } SearchMetaList::item { border: none; color: #009aff; background-color: transparent; height: 52px; } SearchMetaList::item:selected { color: white; background-color: rgba(255, 255, 255, 0.15); }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/SearchResult.theme000664 000000 000000 00000001405 13703317554 027022 0ustar00rootroot000000 000000 SearchResult { border: 0px solid rgba(0, 0, 0, 0.5); border-radius: 4.0px; background-color: rgba(255, 255, 255, 1); } #SearchResultList { color: black; font-size: 12px; margin: 0; border: none; border-bottom: 1px solid rgba(0, 0, 0, 0.05); background-color: rgba(255, 255, 255, 1.0); } #SearchResultList::item { background-color: rgba(255, 255, 255, 1.0); height: 25px; padding-left: 7px; } #SearchResultList::item:selected { color: white; border: none; background-color: #2ca7f8; } #SearchResultAction { color: black; font-size: 12px; padding-left: 9px; text-align: left; border: none; background-color: rgba(255, 255, 255, 1.0); } #SearchResultAction:checked { color: white; border: none; background-color: #2ca7f8; }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/Slider.theme000664 000000 000000 00000003146 13703317554 025644 0ustar00rootroot000000 000000 /* config backgroud %1: margin start %2: real background start */ Slider::groove:horizontal { background: transparent; position: absolute; left: 0px; right: 0px; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(0, 0, 0, 0), stop: %1 rgba(0, 0, 0, 0), stop: %2 rgba(0, 0, 0, 0.8), stop: 1 rgba(0, 0, 0, 0.8) ); } Slider::groove:horizontal[viewname="lyric"] { background: transparent; position: absolute; left: 0px; right: 0px; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(0, 0, 0, 0.0), stop: %1 rgba(0, 0, 0, 0.0), stop: %2 rgba(0, 0, 0, 0.8), stop: 1 rgba(0, 0, 0, 0.8) ); } /* config used %3: progress used end; %4: bottom start, always 1px; */ Slider::sub-page:horizontal { background: #2ca7f8; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(0, 0, 0, 0.0), stop: %1 rgba(0, 0, 0, 0.0), stop: %2 #2ca7f8, stop: %3 #2ca7f8, stop: %4 rgba(0, 0, 0, 0.3), stop: 1 rgba(0, 0, 0, 0.3) ); } /* config remind %5: top end, always 1px; %6: remind center start; %7: remind center end; */ Slider::add-page:horizontal { background: transparent; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(0, 0, 0, 0.0), stop: %1 rgba(0, 0, 0, 0.0), stop: %2 rgba(0, 0, 0, 0.3), stop: %5 rgba(0, 0, 0, 0.3), stop: %6 rgba(255, 255, 255, 0.1), stop: %7 rgba(255, 255, 255, 0.1), stop: %4 rgba(0, 0, 0, 0), stop: 1 rgba(0, 0, 0, 0) ); } Slider::handle:horizontal { background: transparent; margin: 5px -5px; } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/SoundVolume.theme000664 000000 000000 00000000206 13703317554 026674 0ustar00rootroot000000 000000 #SoundVolume { qproperty-background: rgba(49, 49, 49, 100%); qproperty-borderColor: rgba(0, 0, 0, 10%); qproperty-radius: 4.0; }deepin-music-6.0.1.54/src/music-player/resource/theme/dark/Titlebar.theme000664 000000 000000 00000006543 13703317554 026174 0ustar00rootroot000000 000000 Dtk--Widget--DTitlebar { background: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(0, 0, 0, 85%), stop: 1 rgba(0, 0, 0, 85%)); border-top: 1px solid rgba(255, 255, 255, 5%); border-bottom: 1px solid rgba(0, 0, 0, 30%); } Dtk--Widget--DTitlebar[viewname="lyric"] { background: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(0, 0, 0, 20%), stop: 1 rgba(0, 0, 0, 20%)); border-top: 1px solid rgba(255, 255, 255, 5%); border-bottom: 1px solid rgba(0, 0, 0, 20%); } /* ------ #DTitlebarDWindowOptionButton ------ */ #DTitlebarDWindowOptionButton { qproperty-normalPic: url(:/images/dark/images/window/menu_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/menu_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/menu_press.svg); } #DTitlebarDWindowOptionButton[viewname="lyric"] { qproperty-normalPic: url(:/images/dark/images/window/menu_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/menu_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/menu_press.svg); } /* ------ #DTitlebarDWindowMinButton ------ */ #DTitlebarDWindowMinButton { qproperty-normalPic: url(:/images/dark/images/window/minimize_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/minimize_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/minimize_press.svg); } #DTitlebarDWindowMinButton[viewname="lyric"] { qproperty-normalPic: url(:/images/dark/images/window/minimize_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/minimize_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/minimize_press.svg); } /* ------ #DTitlebarDWindowMaxButton ------ */ #DTitlebarDWindowMaxButton[isMaximized=true] { qproperty-normalPic: url(:/images/dark/images/window/unmaximize_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/unmaximize_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/unmaximize_press.svg); } #DTitlebarDWindowMaxButton[isMaximized=false] { qproperty-normalPic: url(:/images/dark/images/window/maximize_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/maximize_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/maximize_press.svg); } #DTitlebarDWindowMaxButton[isMaximized=true][viewname="lyric"] { qproperty-normalPic: url(:/images/dark/images/window/unmaximize_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/unmaximize_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/unmaximize_press.svg); } #DTitlebarDWindowMaxButton[isMaximized=false][viewname="lyric"] { qproperty-normalPic: url(:/images/dark/images/window/maximize_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/maximize_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/maximize_press.svg); } /* ------ #DTitlebarDWindowCloseButton ------ */ #DTitlebarDWindowCloseButton { qproperty-normalPic: url(:/images/dark/images/window/close_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/close_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/close_press.svg); } #DTitlebarDWindowCloseButton[viewname="lyric"] { qproperty-normalPic: url(:/images/dark/images/window/close_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/close_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/close_press.svg); } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/TitlebarWidget.theme000664 000000 000000 00000000324 13703317554 027327 0ustar00rootroot000000 000000 #TitleBack { border-image: url(:/dark/image/back_normal.svg); } #TitleBack:hover { border-image: url(:/dark/image/back_hover.svg); } #TitleBack:pressed { border-image: url(:/dark/image/back_press.svg); } deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/000775 000000 000000 00000000000 13703317554 024454 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/album_normal.svg000664 000000 000000 00000002660 13703317554 027651 0ustar00rootroot000000 000000 album_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/back_hover.svg000664 000000 000000 00000002115 13703317554 027277 0ustar00rootroot000000 000000 back_hover_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/back_normal.svg000664 000000 000000 00000002145 13703317554 027447 0ustar00rootroot000000 000000 back_normal_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/back_press.svg000664 000000 000000 00000002115 13703317554 027310 0ustar00rootroot000000 000000 back_press_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/dropdown_arrow.svg000664 000000 000000 00000001430 13703317554 030241 0ustar00rootroot000000 000000 dropdown_arrow Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/input_clear_hover.svg000664 000000 000000 00000002660 13703317554 030711 0ustar00rootroot000000 000000 input_clear_dark_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/input_clear_normal.svg000664 000000 000000 00000002657 13703317554 031064 0ustar00rootroot000000 000000 input_clear_dark_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/input_clear_press.svg000664 000000 000000 00000002551 13703317554 030721 0ustar00rootroot000000 000000 input_clear_dark_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/playlist.svg000664 000000 000000 00000004545 13703317554 027046 0ustar00rootroot000000 000000 playlist_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/playlist_allmusic.svg000664 000000 000000 00000005635 13703317554 030740 0ustar00rootroot000000 000000 playlist_allmusic_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/playlist_fav.svg000664 000000 000000 00000003104 13703317554 027670 0ustar00rootroot000000 000000 playlist_fav_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/plus.svg000664 000000 000000 00000001250 13703317554 026156 0ustar00rootroot000000 000000 + Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/search.svg000664 000000 000000 00000001436 13703317554 026446 0ustar00rootroot000000 000000 search Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/singer_normal.svg000664 000000 000000 00000005500 13703317554 030034 0ustar00rootroot000000 000000 singer_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/suggest_button_hover.svg000664 000000 000000 00000001164 13703317554 031456 0ustar00rootroot000000 000000 suggest_button_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/suggest_button_normal.svg000664 000000 000000 00000001557 13703317554 031631 0ustar00rootroot000000 000000 suggest_button_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/suggest_button_press.svg000664 000000 000000 00000002644 13703317554 031473 0ustar00rootroot000000 000000 suggest_button_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/000775 000000 000000 00000000000 13703317554 025763 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/close_disabled.svg000664 000000 000000 00000002436 13703317554 031445 0ustar00rootroot000000 000000 close-disabled-dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/close_hover.svg000664 000000 000000 00000002615 13703317554 031020 0ustar00rootroot000000 000000 close_hover_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/close_normal.svg000664 000000 000000 00000002500 13703317554 031156 0ustar00rootroot000000 000000 close_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/close_press.svg000664 000000 000000 00000002615 13703317554 031031 0ustar00rootroot000000 000000 close_press_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/maximize_disabled.svg000664 000000 000000 00000002003 13703317554 032151 0ustar00rootroot000000 000000 maximize-disabled-dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/maximize_hover.svg000664 000000 000000 00000002161 13703317554 031532 0ustar00rootroot000000 000000 maximize_hover_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/maximize_normal.svg000664 000000 000000 00000002045 13703317554 031700 0ustar00rootroot000000 000000 maximize_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/maximize_press.svg000664 000000 000000 00000002162 13703317554 031544 0ustar00rootroot000000 000000 maximize_active_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/menu_disabled.svg000664 000000 000000 00000002354 13703317554 031303 0ustar00rootroot000000 000000 menu_disabled_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/menu_hover.svg000664 000000 000000 00000002403 13703317554 030652 0ustar00rootroot000000 000000 menu_hover_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/menu_normal.svg000664 000000 000000 00000002433 13703317554 031022 0ustar00rootroot000000 000000 menu_normal_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/menu_press.svg000664 000000 000000 00000002402 13703317554 030662 0ustar00rootroot000000 000000 menu_press_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/minimise_disabled.svg000664 000000 000000 00000001711 13703317554 032145 0ustar00rootroot000000 000000 minimize-disabled-dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/minimise_hover.svg000664 000000 000000 00000002067 13703317554 031526 0ustar00rootroot000000 000000 minimize_hover_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/minimise_normal.svg000664 000000 000000 00000001753 13703317554 031674 0ustar00rootroot000000 000000 minimize_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/minimise_press.svg000664 000000 000000 00000002070 13703317554 031531 0ustar00rootroot000000 000000 minimize_active_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/unmaximize_disabled.svg000664 000000 000000 00000002053 13703317554 032521 0ustar00rootroot000000 000000 unmaximize-disabled-dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/unmaximize_hover.svg000664 000000 000000 00000002222 13703317554 032073 0ustar00rootroot000000 000000 unmaximize_hover_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/unmaximize_normal.svg000664 000000 000000 00000002124 13703317554 032241 0ustar00rootroot000000 000000 unmaximize_normal_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/dark/image/window/unmaximize_press.svg000664 000000 000000 00000002221 13703317554 032103 0ustar00rootroot000000 000000 unmaximize_press_dark Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/000775 000000 000000 00000000000 13703317554 023560 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/theme/light/CloseConfirmDialog.theme000664 000000 000000 00000000442 13703317554 030307 0ustar00rootroot000000 000000 #CloseConfirmDialogLabel { margin-left: 2px; font-size: 13px; font-weight: 500; color: black; border: none; } QGroupBox { color: black; border: none; } QRadioButton { font-size: 12px; color: black; } QCheckBox { margin-left: 2px; font-size: 12px; color: black; } deepin-music-6.0.1.54/src/music-player/resource/theme/light/DDropdown.theme000664 000000 000000 00000000320 13703317554 026477 0ustar00rootroot000000 000000 #MusicListSort { border: none; } #MusicListSort[status="hover"] { border-radius: 4.0px; } #DDropdownText { font-size: 12px; } #DDropdownIcon { border-image: url(:/light/image/dropdown_arrow.svg); }deepin-music-6.0.1.54/src/music-player/resource/theme/light/Footer.theme000664 000000 000000 00000012303 13703317554 026041 0ustar00rootroot000000 000000 #Footer { qproperty-defaultCover: ":/common/image/cover_welcome.svg"; } #FooterControlFrame { border: 0px solid blue; background-color: rgba(0, 0, 0, 0.6); } #FooterCover { qproperty-radius: 0; qproperty-borderColor: rgba(0, 0, 0, 0%); qproperty-shadowColor: rgba(0, 0, 0, 0%); } #FooterCoverHover { border: none; background-color: rgba(0, 0, 0, 0%); } #FooterCoverHover:hover { background-color: rgba(0, 0, 0, 30%); border-image: url(:/common/image/show_lyc_hover.svg); } #FooterCoverHover:pressed { background-color: rgba(0, 0, 0, 30%); border-image: url(:/common/image/show_lyc_press.svg); } #FooterCoverHover[viewname="lyric"] { border: none; background-color: rgba(0, 0, 0, 0%); } #FooterCoverHover[viewname="lyric"]:hover { background-color: rgba(0, 0, 0, 30%); border-image: url(:/common/image/hide_lyc.svg); } #FooterCoverHover[viewname="lyric"]:pressed { background-color: rgba(0, 0, 0, 30%); border-image: url(:/common/image/hide_lyc_press.svg); } #FooterTitle { font-size: 12px; color: #ffffff; } #FooterArtist { font-size: 11px; color: rgba(255, 255, 255, 0.6); } #FooterActionPrev { border-image: url(:/common/image/previous_normal.svg); } #FooterActionPrev:hover { border-image: url(:/common/image/previous_hover.svg); } #FooterActionPrev:pressed { border-image: url(:/common/image/previous_press.svg); } #FooterActionPlay { border-image: url(:/common/image/start_normal.svg); } #FooterActionPlay:hover { border-image: url(:/common/image/start_hover.svg); } #FooterActionPlay:pressed { border-image: url(:/common/image/start_press.svg); } #FooterActionPlay[playstatus=playing] { border-image: url(:/common/image/pause_normal.svg); } #FooterActionPlay:hover[playstatus=playing] { border-image: url(:/common/image/pause_hover.svg); } #FooterActionPlay:pressed[playstatus=playing] { border-image: url(:/common/image/pause_press.svg); } #FooterActionNext { border-image: url(:/common/image/next_normal.svg); } #FooterActionNext:hover { border-image: url(:/common/image/next_hover.svg); } #FooterActionNext:pressed { border-image: url(:/common/image/next_press.svg); } #FooterActionFavorite { border-image: url(:/common/image/fav_normal.svg); } #FooterActionFavorite:hover { border-image: url(:/common/image/fav_hover.svg); } #FooterActionFavorite:pressed { border-image: url(:/common/image/fav_press.svg); } #FooterActionFavorite[fav=true] { border-image: url(:/common/image/unfav_normal.svg); } #FooterActionFavorite:hover[fav=true] { border-image: url(:/common/image/unfav_hover.svg); } #FooterActionFavorite:pressed[fav=true] { border-image: url(:/common/image/unfav_press.svg); } #FooterActionLyric { border-image: url(:/common/image/lrc_normal.svg); } #FooterActionLyric:hover { border-image: url(:/common/image/lrc_hover.svg); } #FooterActionLyric:pressed { border-image: url(:/common/image/lrc_press.svg); } #FooterActionPlayMode { border-image: url(:/common/image/repeat_all_normal.svg); } #FooterActionPlayMode:hover { border-image: url(:/common/image/repeat_all_hover.svg); } #FooterActionPlayMode:pressed { border-image: url(:/common/image/repeat_all_press.svg); } #FooterActionPlayMode[mode="1"] { border-image: url(:/common/image/repeat_single_normal.svg); } #FooterActionPlayMode:hover[mode="1"] { border-image: url(:/common/image/repeat_single_hover.svg); } #FooterActionPlayMode:pressed[mode="1"] { border-image: url(:/common/image/repeat_single_press.svg); } #FooterActionPlayMode[mode="2"] { border-image: url(:/common/image/shuffle_normal.svg); } #FooterActionPlayMode:hover[mode="2"] { border-image: url(:/common/image/shuffle_hover.svg); } #FooterActionPlayMode:pressed[mode="2"] { border-image: url(:/common/image/shuffle_press.svg); } #FooterActionSound[volume="high"] { border-image: url(:/common/image/volume_high_normal.svg); } #FooterActionSound:hover[volume="high"] { border-image: url(:/common/image/volume_high_hover.svg); } #FooterActionSound:pressed[volume="high"] { border-image: url(:/common/image/volume_high_press.svg); } #FooterActionSound[volume="mid"] { border-image: url(:/common/image/volume_mid_normal.svg); } #FooterActionSound:hover[volume="mid"] { border-image: url(:/common/image/volume_mid_hover.svg); } #FooterActionSound:pressed[volume="mid"] { border-image: url(:/common/image/volume_mid_press.svg); } #FooterActionSound[volume="low"] { border-image: url(:/common/image/volume_low_normal.svg); } #FooterActionSound:hover[volume="low"] { border-image: url(:/common/image/volume_low_hover.svg); } #FooterActionSound:pressed[volume="low"] { border-image: url(:/common/image/volume_mid_press.svg); } #FooterActionSound[volume="mute"] { border-image: url(:/common/image/volume_mute_normal.svg); } #FooterActionSound:hover[volume="mute"] { border-image: url(:/common/image/volume_mute_hover.svg); } #FooterActionSound:pressed[volume="mute"] { border-image: url(:/common/image/volume_mute_press.svg); } #FooterActionPlayList { border-image: url(:/common/image/show_playlist_normal.svg); } #FooterActionPlayList:hover { border-image: url(:/common/image/show_playlist_hover.svg); } #FooterActionPlayList:pressed { border-image: url(:/common/image/show_playlist_press.svg); } deepin-music-6.0.1.54/src/music-player/resource/theme/light/ImportWidget.theme000664 000000 000000 00000001206 13703317554 027221 0ustar00rootroot000000 000000 #ImportWidget { background-color: rgba(255, 255, 255, 1); border-radius: 4px; } #ImportViewLogo { image: url(:/common/image/deepin-music.svg); } #ImportViewText { font-size: 12px; line-height: 1.5; text-align: center; color: #979797; } #ImportViewImportButton { font-family: SourceHanSansSC-Medium; font-size: 14px; color: #0599FF; border-image: url(:/light/image/suggest_button_normal.svg); } #ImportViewImportButton:hover { color: white; border-image: url(:/light/image/suggest_button_hover.svg); } #ImportViewImportButton:pressed { color: #2ca7f8; border-image: url(:/light/image/suggest_button_press.svg); }deepin-music-6.0.1.54/src/music-player/resource/theme/light/InfoDialog.theme000664 000000 000000 00000001372 13703317554 026622 0ustar00rootroot000000 000000 #InfoDialog { qproperty-backgroundColor: white; qproperty-borderColor: rgba(0, 0, 0, 0.2); } #InfoClose { qproperty-normalPic: url(:/images/light/images/window/close_normal.svg); qproperty-hoverPic: url(:/images/light/images/window/close_hover.svg); qproperty-pressPic: url(:/images/light/images/window/close_press.svg); } #InfoCover { background: transparent; border: none; } #InfoTitle { font-size: 12px; qproperty-alignment: AlignCenter; } #InfoSplit { border-top: 1px solid rgba(0, 0, 0, 10%); } #InfoKey { border: 1px solid transparent; qproperty-alignment: AlignRight; font-size: 11px; color: #606060; } #InfoValue { border: 1px solid transparent; qproperty-alignment: AlignLeft; font-size: 11px; color: #000000; }deepin-music-6.0.1.54/src/music-player/resource/theme/light/LoadWidget.theme000664 000000 000000 00000000237 13703317554 026631 0ustar00rootroot000000 000000 LoadWidget { background-color: rgba(255, 255, 255, 1); } #LoadWidgetLabel { font-size: 12px; line-height: 1.5; text-align: center; color: #979797; }deepin-music-6.0.1.54/src/music-player/resource/theme/light/LyricView.theme000664 000000 000000 00000000376 13703317554 026527 0ustar00rootroot000000 000000 LyricView { color: rgba(255, 255, 255, 50%); font-size: 16px; background-color: transparent; border: 0px solid red; } LyricView::item { height: 40px; } LyricView::item:selected { color: white; background-color: rgba(44, 167, 248, 100%); }deepin-music-6.0.1.54/src/music-player/resource/theme/light/LyricWidget.theme000664 000000 000000 00000004241 13703317554 027033 0ustar00rootroot000000 000000 #LyricWidget { qproperty-backgroundColor: rgba(0, 0, 0, 30%); qproperty-defaultCover: ":/common/image/cover_max.svg"; background-color: rgba(0, 0, 0, 30%); } #LyricCover { qproperty-radius: 4.0px; qproperty-borderColor: rgba(255, 255, 255, 20%); qproperty-shadowColor: rgba(0, 0, 0, 10%); } #SearchMetaFrame { border: 0px solid rgba(29, 129, 255, 0.5); } #SearchMetaHeader { color: white; font-size: 18px; qproperty-alignment: AlignCenter; } #SearchMetaTitle { padding-left: 7px; color: white; font-size: 12px; background-color: rgba(255, 255, 255, 0.1); border-radius: 4.0px; } #SearchMetaArtist { padding-left: 7px; color: white; font-size: 12px; background-color: rgba(255, 255, 255, 0.1); border-radius: 4.0px; } #SearchMetaButton { outline: none; font-size: 12px; border-radius: 4px; color: white; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.20), stop: 1.0000 rgba(255, 255, 255, 0.20)); border: 0px solid rgba(29, 129, 255, 0.5); } #SearchMetaButton:hover { color: white; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.30), stop: 1.0000 rgba(255, 255, 255, 0.30)); border: 0px solid rgba(29, 129, 255, 0.3); } #SearchMetaButton:pressed { color: #2ca7f8; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.10), stop: 1.0000 rgba(255, 255, 255, 0.10)); border: 0px solid rgba(0, 0, 0, 0.08); } #SearchMetaButton:disabled { color: rgba(255, 255, 255, 40%); background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0.0000 rgba(255, 255, 255, 0.08), stop: 1.0000 rgba(255, 255, 255, 0.08)); border: 0px solid rgba(29, 129, 255, 0.5); } #ShowSearch { border-image: url(:/common/image/lrc_search_hover.svg); } #ShowSearch:hover { border-image: url(:/common/image/lrc_search_hover.svg); } #ShowSearch:pressed { border-image: url(:/common/image/lrc_search_press.svg); } #ExitSearch { color: rgba(255, 255, 255, 0.8); font-size: 12px; background-color: transparent; border: none; } #ExitSearch:hover { color: white; } #ExitSearch:pressed { color: #0082fa; } deepin-music-6.0.1.54/src/music-player/resource/theme/light/MainFrame.theme000664 000000 000000 00000000253 13703317554 026443 0ustar00rootroot000000 000000 #MainFrame { qproperty-borderColor: rgba(0, 0, 0, 10%); background-color: transparent; } #MainFrame[viewname="lyric"] { qproperty-borderColor: rgba(0, 0, 0, 30%); }deepin-music-6.0.1.54/src/music-player/resource/theme/light/MusicItemStyleProxy.theme000664 000000 000000 00000000631 13703317554 030566 0ustar00rootroot000000 000000 #MusicItemStyleProxy { qproperty-textColor: rgba(127, 127, 127, 100%); qproperty-titleColor: rgba(41, 41, 41, 100%); qproperty-highlightText: white; qproperty-background: #fbfbfb; qproperty-alternateBackground: #ffffff; qproperty-highlightedBackground: #2ca7f8; qproperty-playingIcon: ":/common/image/playing_normal.svg"; qproperty-highlightPlayingIcon: ":/common/image/playing_active.svg"; } deepin-music-6.0.1.54/src/music-player/resource/theme/light/MusicListItem.theme000664 000000 000000 00000001722 13703317554 027341 0ustar00rootroot000000 000000 #MusicListItem { qproperty-playingIcon: ":/common/animation/playing/blue"; qproperty-highlightPlayingIcon: ":/common/animation/playing/blue"; } #MusicListIcon { image: url(:/light/image/playlist.svg); } #MusicListIcon[iconName="album"] { image: url(:/light/image/album_hover.svg); } #MusicListIcon[iconName="artist"] { image: url(:/light/image/singer_hover.svg); } #MusicListIcon[iconName="all"] { image: url(:/light/image/playlist_allmusic.svg); } #MusicListIcon[iconName="fav"] { image: url(:/light/image/playlist_fav.svg); } #MusicListInterFrame { border: none; border-bottom: 1px solid rgba(0, 0, 0, 0.05); } #MusicListTitle { color: black; font-size: 12px; background: transparent; border: none; qproperty-alignment: AlignLeft; } #MusicListTitle[status="active"] { color: #009aff; } #MusicListTitle:focus[status="active"] { color: black; background-color: white; border-radius: 4.0px; border: 1px solid rgba(0, 0, 0, 0.08); } deepin-music-6.0.1.54/src/music-player/resource/theme/light/MusicListView.theme000664 000000 000000 00000001227 13703317554 027355 0ustar00rootroot000000 000000 #MusicListView { color: #009aff; border: 0px solid rgba(255, 0, 0, 0.7); background-color: rgba(255, 255, 255, 0.0); outline: none; } #MusicListView::item { color: #009aff; height: 56px; } #MusicListView::item:selected:!active { color: white; background-color: qlineargradient(x1: 0 y1: 0, x2: 1 y2: 0, stop: 0 #2aa6f8, stop: 0.015 #2aa6f8, stop: 0.0155 rgba(42, 166, 248, 20%), stop: 1 rgba(42, 166, 248, 20%)); } #MusicListView::item:selected:active { color: white; background-color: qlineargradient(x1: 0 y1: 0, x2: 1 y2: 0, stop: 0 #2aa6f8, stop: 0.015 #2aa6f8, stop: 0.0155 rgba(42, 166, 248, 20%), stop: 1 rgba(42, 166, 248, 20%)); } deepin-music-6.0.1.54/src/music-player/resource/theme/light/MusicListWidget.theme000664 000000 000000 00000002147 13703317554 027670 0ustar00rootroot000000 000000 #MusicListWidget { border: 1px solid rgba(0, 0, 0, 10%); border-top: none; background-color: rgba(255, 255, 255, 0.9); } #MusicListWidgetAddFrame { border-radius: 5px; border-bottom: 1px solid rgba(0, 0, 0, 0.02); } #MusicListWidgetAdd { color: black; font-size: 12px; border-radius: 4px; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 0.6), stop: 0.05556 rgba(255, 255, 255, 0.6), stop: 0.05600 rgba(255, 255, 255, 1), stop: 1 rgba(253, 253, 253, 1)); border: 1px solid rgba(0, 0, 0, 0.08); } #MusicListWidgetAdd:hover { color: white; background-color: qlineargradient( x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 #6ec9ff, stop: 1 #2da9f6); border: 1px solid rgba(29, 129, 255, 0.5); } #MusicListWidgetAdd:pressed { color: white; background-color: qlineargradient( x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 #0b8cff, stop: 1 #0aa1ff); border: 1px solid rgba(29, 129, 255, 0.3); } #MusicListWidgetAdd:disabled { color: grey; background-color: qlineargradient( x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 #ffffff, stop: 1 #fdfdfd); border: 1px solid rgba(0, 0, 0, 0.08); } deepin-music-6.0.1.54/src/music-player/resource/theme/light/PlayItemStyleProxy.theme000664 000000 000000 00000000630 13703317554 030412 0ustar00rootroot000000 000000 #PlayItemStyleProxy { qproperty-textColor: rgba(127, 127, 127, 100%); qproperty-titleColor: rgba(41, 41, 41, 100%); qproperty-highlightText: white; qproperty-background: #fbfbfb; qproperty-alternateBackground: #ffffff; qproperty-highlightedBackground: #2ca7f8; qproperty-playingIcon: ":/common/image/playing_normal.svg"; qproperty-highlightPlayingIcon: ":/common/image/playing_active.svg"; } deepin-music-6.0.1.54/src/music-player/resource/theme/light/PlayListItem.theme000664 000000 000000 00000001441 13703317554 027164 0ustar00rootroot000000 000000 #PlayListItem { qproperty-playingIcon: ":/common/animation/playing/blue"; qproperty-highlightPlayingIcon: ":/common/animation/playing/blue"; } #PlayListIcon { image: url(:/light/image/playlist.svg); } #PlayListIcon[iconName="all"] { image: url(:/light/image/playlist_allmusic.svg); } #PlayListIcon[iconName="fav"] { image: url(:/light/image/playlist_fav.svg); } #PlayListInterFrame { border: none; border-bottom: 1px solid rgba(0, 0, 0, 0.05); } #PlayListTitle { color: black; font-size: 12px; background: transparent; border: none; qproperty-alignment: AlignLeft; } #PlayListTitle[status="active"] { color: #009aff; } #PlayListTitle:focus[status="active"] { color: black; background-color: white; border-radius: 4.0px; border: 1px solid rgba(0, 0, 0, 0.08); }deepin-music-6.0.1.54/src/music-player/resource/theme/light/PlayListView.theme000664 000000 000000 00000000246 13703317554 027202 0ustar00rootroot000000 000000 PlayListView { border: 0px solid red; margin: 0 0 0 0; outline: none; background-color: rgba(255, 255, 255, 1); } /*PlayListView::item { height: 36px; }*/ deepin-music-6.0.1.54/src/music-player/resource/theme/light/PlayListWidget.theme000664 000000 000000 00000001530 13703317554 027510 0ustar00rootroot000000 000000 #PlayListWidget { border-radius: 4px; background-color: rgba(255, 255, 255, 0); } #PlayListActionBar { background-color: rgba(255, 255, 255, 1); } #PlayListEmptyHits { font-size: 24px; color: #d0d0d0; qproperty-alignment: AlignCenter; background-color: rgba(255, 255, 255, 1); } #PlayListPlayAll { font-size: 12px; padding: 0 10 0 10; border: none; border-radius: 4.0px; qproperty-icon: url(:/common/image/play_all.svg); } #PlayListPlayAll:hover { border: 1px solid rgba(0, 0, 0, 0.08); background: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 40%), stop: 1 rgba(255, 255, 255, 20%)); } #PlayListPlayAll:pressed { color: #2ca7f8; border: 1px solid rgba(0, 0, 0, 8%); background: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 80%), stop: 1 rgba(255, 255, 255, 60%)); } deepin-music-6.0.1.54/src/music-player/resource/theme/light/PlaylistWidget.theme000664 000000 000000 00000002140 13703317554 027546 0ustar00rootroot000000 000000 #PlaylistWidget { border: 1px solid rgba(0, 0, 0, 10%); border-top: none; background-color: rgba(255, 255, 255, 0.9); } #PlaylistWidgetAddFrame { border-radius: 5px; border-bottom: 1px solid rgba(0, 0, 0, 0.02); } #PlaylistWidgetAdd { color: black; font-size: 12px; border-radius: 4px; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(255, 255, 255, 0.6), stop: 0.05556 rgba(255, 255, 255, 0.6), stop: 0.05600 rgba(255, 255, 255, 1), stop: 1 rgba(253, 253, 253, 1)); border: 1px solid rgba(0, 0, 0, 0.08); } #PlaylistWidgetAdd:hover { color: white; background-color: qlineargradient( x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 #6ec9ff, stop: 1 #2da9f6); border: 1px solid rgba(29, 129, 255, 0.5); } #PlaylistWidgetAdd:pressed { color: white; background-color: qlineargradient( x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 #0b8cff, stop: 1 #0aa1ff); border: 1px solid rgba(29, 129, 255, 0.3); } #PlaylistWidgetAdd:disabled { color: grey; background-color: qlineargradient( x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 #ffffff, stop: 1 #fdfdfd); border: 1px solid rgba(0, 0, 0, 0.08); }deepin-music-6.0.1.54/src/music-player/resource/theme/light/SearchEdit.theme000664 000000 000000 00000003763 13703317554 026630 0ustar00rootroot000000 000000 Dtk--Widget--DSearchEdit { border-radius: 4.0px; padding: 1px; padding-bottom: 0px; background: rgba(0, 0, 0, 10%); } Dtk--Widget--DSearchEdit #SearchIcon { margin: 2 -1 2 4 px; background-color: transparent; border-image: url(:/light/image/search.svg); } Dtk--Widget--DSearchEdit #ClearIcon { background-color: transparent; qproperty-normalPic: url(:/light/image/input_clear_normal.svg); qproperty-hoverPic: url(:/light/image/input_clear_hover.svg); qproperty-pressPic: url(:/light/image/input_clear_press.svg); } Dtk--Widget--DSearchEdit #Edit { color: #303030; font-size: 12px; padding-right: 15px; border: none; background-color: transparent; } Dtk--Widget--DSearchEdit QFrame#DEditInsideFrame { border: 0px solid rgba(0, 0, 255, 0.0); border-radius: 3px; background-color: white; } Dtk--Widget--DSearchEdit #PlaceHolder { font-size: 12px; color: #303030; margin: 0 0 0 3px; } /*-----------------------------------*/ Dtk--Widget--DSearchEdit[viewname="lyric"] { border-radius: 4.0px; background-color: transparent; } Dtk--Widget--DSearchEdit[viewname="lyric"] #SearchIcon { margin: 2 -1 2 4 px; background-color: transparent; border-image: url(:/dark/image/search.svg); } Dtk--Widget--DSearchEdit[viewname="lyric"] #ClearIcon { background-color: transparent; qproperty-normalPic: url(:/dark/image/input_clear_normal.svg); qproperty-hoverPic: url(:/dark/image/input_clear_hover.svg); qproperty-pressPic: url(:/dark/image/input_clear_press.svg); } Dtk--Widget--DSearchEdit[viewname="lyric"] #Edit { font-size: 12px; color: white; padding-right: 15px; border: 5px solid; border-color: transparent; background-color: transparent; } Dtk--Widget--DSearchEdit[viewname="lyric"] QFrame#DEditInsideFrame { background-color: rgba(255, 255, 255, 0.15); border-radius: 4.0px; border-color: rgba(255, 255, 255, 0.05); border: none; } Dtk--Widget--DSearchEdit[viewname="lyric"] #PlaceHolder { color: white; margin: 0 0 0 3px; font-size: 12px; }deepin-music-6.0.1.54/src/music-player/resource/theme/light/SearchMetaItem.theme000664 000000 000000 00000001150 13703317554 027434 0ustar00rootroot000000 000000 SearchMetaItem { border-radius: 4.0px; border: none; border: 0px solid rgba(0, 0, 0, 0.5); } #SearchMetaItemInterFrame { border: none; border-bottom: 1px solid rgba(255, 255, 255, 0.05); } #SearchMetaItemTitle { font-size: 12px; color: #ffffff; } #SearchMetaItemArtist { font-size: 10px; color: rgba(255, 255, 255, 0.8); } #SearchMetaItemCheck { background-color: transparent; border-image: url(:/common/image/none.svg); } #SearchMetaItemCheck[active=true] { border-image: url(:/common/image/select.svg); } #SearchMetaItemLength { font-size: 11px; color: rgba(255, 255, 255, 0.8); }deepin-music-6.0.1.54/src/music-player/resource/theme/light/SearchMetaList.theme000664 000000 000000 00000000532 13703317554 027454 0ustar00rootroot000000 000000 SearchMetaList { color: #009aff; border-radius: 4.0px; background-color: rgba(255, 255, 255, 0.1); outline: none; border: none; } SearchMetaList::item { border: none; color: #009aff; background-color: transparent; height: 52px; } SearchMetaList::item:selected { color: white; background-color: rgba(255, 255, 255, 0.15); }deepin-music-6.0.1.54/src/music-player/resource/theme/light/SearchResult.theme000664 000000 000000 00000001265 13703317554 027214 0ustar00rootroot000000 000000 SearchResult { border: 1px solid rgba(0, 0, 0, 10%); border-radius: 4px; background-color: rgba(255, 255, 255, 1); } #SearchResultList { color: black; font-size: 12px; margin: 0; border: none; border-bottom: 1px solid rgba(0, 0, 0, 0.04); } #SearchResultList::item { background-color: rgba(255, 255, 255, 1.0); height: 25px; padding-left: 7px; } #SearchResultList::item:selected { color: white; background-color: #2ca7f8; } #SearchResultAction { color: black; font-size: 12px; padding-left: 9px; text-align: left; border: none; background-color: rgba(255, 255, 255, 1.0); } #SearchResultAction:checked { color: white; background-color: #2ca7f8; }deepin-music-6.0.1.54/src/music-player/resource/theme/light/Slider.theme000664 000000 000000 00000003146 13703317554 026032 0ustar00rootroot000000 000000 /* config backgroud %1: margin start %2: real background start */ Slider::groove:horizontal { background: transparent; position: absolute; left: 0px; right: 0px; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(0, 0, 0, 0), stop: %1 rgba(0, 0, 0, 0), stop: %2 rgba(0, 0, 0, 0.6), stop: 1 rgba(0, 0, 0, 0.6) ); } Slider::groove:horizontal[viewname="lyric"] { background: transparent; position: absolute; left: 0px; right: 0px; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(0, 0, 0, 0.0), stop: %1 rgba(0, 0, 0, 0.0), stop: %2 rgba(0, 0, 0, 0.6), stop: 1 rgba(0, 0, 0, 0.6) ); } /* config used %3: progress used end; %4: bottom start, always 1px; */ Slider::sub-page:horizontal { background: #2ca7f8; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(0, 0, 0, 0.0), stop: %1 rgba(0, 0, 0, 0.0), stop: %2 #2ca7f8, stop: %3 #2ca7f8, stop: %4 rgba(0, 0, 0, 0.3), stop: 1 rgba(0, 0, 0, 0.3) ); } /* config remind %5: top end, always 1px; %6: remind center start; %7: remind center end; */ Slider::add-page:horizontal { background: transparent; background-color: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(0, 0, 0, 0.0), stop: %1 rgba(0, 0, 0, 0.0), stop: %2 rgba(0, 0, 0, 0.3), stop: %5 rgba(0, 0, 0, 0.3), stop: %6 rgba(255, 255, 255, 0.1), stop: %7 rgba(255, 255, 255, 0.1), stop: %4 rgba(0, 0, 0, 0), stop: 1 rgba(0, 0, 0, 0) ); } Slider::handle:horizontal { background: transparent; margin: 5px -5px; } deepin-music-6.0.1.54/src/music-player/resource/theme/light/SoundVolume.theme000664 000000 000000 00000000211 13703317554 027056 0ustar00rootroot000000 000000 #SoundVolume { qproperty-background: rgba(255, 255, 255, 100%); qproperty-borderColor: rgba(0, 0, 0, 20%); qproperty-radius: 4.0; }deepin-music-6.0.1.54/src/music-player/resource/theme/light/Titlebar.theme000664 000000 000000 00000006521 13703317554 026356 0ustar00rootroot000000 000000 Dtk--Widget--DTitlebar { background: qlineargradient(x1: 1, y1: 0, x2: 1, y2: 1, stop: 0 rgba(255, 255, 255, 100%), stop: 1 rgba(248, 248, 248, 100%)); border-bottom: 1px solid rgba(0, 0, 0, 10%); } Dtk--Widget--DTitlebar[viewname="lyric"] { background: qlineargradient(x1: 0 y1: 0, x2: 0 y2: 1, stop: 0 rgba(0, 0, 0, 20%), stop: 1 rgba(0, 0, 0, 20%)); border-top: 1px solid rgba(255, 255, 255, 5%); border-bottom: 1px solid rgba(0, 0, 0, 10%); } /* ------ #DTitlebarDWindowOptionButton ------ */ #DTitlebarDWindowOptionButton { qproperty-normalPic: url(:/images/light/images/window/menu_normal.svg); qproperty-hoverPic: url(:/images/light/images/window/menu_hover.svg); qproperty-pressPic: url(:/images/light/images/window/menu_press.svg); } #DTitlebarDWindowOptionButton[viewname="lyric"] { qproperty-normalPic: url(:/images/dark/images/window/menu_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/menu_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/menu_press.svg); } /* ------ #DTitlebarDWindowMinButton ------ */ #DTitlebarDWindowMinButton { qproperty-normalPic: url(:/images/light/images/window/minimize_normal.svg); qproperty-hoverPic: url(:/images/light/images/window/minimize_hover.svg); qproperty-pressPic: url(:/images/light/images/window/minimize_press.svg); } #DTitlebarDWindowMinButton[viewname="lyric"] { qproperty-normalPic: url(:/images/dark/images/window/minimize_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/minimize_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/minimize_press.svg); } /* ------ #DTitlebarDWindowMaxButton ------ */ #DTitlebarDWindowMaxButton[isMaximized=true] { qproperty-normalPic: url(:/images/light/images/window/unmaximize_normal.svg); qproperty-hoverPic: url(:/images/light/images/window/unmaximize_hover.svg); qproperty-pressPic: url(:/images/light/images/window/unmaximize_press.svg); } #DTitlebarDWindowMaxButton[isMaximized=false] { qproperty-normalPic: url(:/images/light/images/window/maximize_normal.svg); qproperty-hoverPic: url(:/images/light/images/window/maximize_hover.svg); qproperty-pressPic: url(:/images/light/images/window/maximize_press.svg); } #DTitlebarDWindowMaxButton[isMaximized=true][viewname="lyric"] { qproperty-normalPic: url(:/images/dark/images/window/unmaximize_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/unmaximize_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/unmaximize_press.svg); } #DTitlebarDWindowMaxButton[isMaximized=false][viewname="lyric"] { qproperty-normalPic: url(:/images/dark/images/window/maximize_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/maximize_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/maximize_press.svg); } /* ------ #DTitlebarDWindowCloseButton ------ */ #DTitlebarDWindowCloseButton { qproperty-normalPic: url(:/images/light/images/window/close_normal.svg); qproperty-hoverPic: url(:/images/light/images/window/close_hover.svg); qproperty-pressPic: url(:/images/light/images/window/close_press.svg); } #DTitlebarDWindowCloseButton[viewname="lyric"] { qproperty-normalPic: url(:/images/dark/images/window/close_normal.svg); qproperty-hoverPic: url(:/images/dark/images/window/close_hover.svg); qproperty-pressPic: url(:/images/dark/images/window/close_press.svg); } deepin-music-6.0.1.54/src/music-player/resource/theme/light/TitlebarWidget.theme000664 000000 000000 00000000426 13703317554 027520 0ustar00rootroot000000 000000 TitlebarWidget { border: none; background: transparent; } #TitleBack { border-image: url(:/light/image/back_normal.svg); } #TitleBack:hover { border-image: url(:/light/image/back_hover.svg); } #TitleBack:pressed { border-image: url(:/light/image/back_press.svg); } deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/000775 000000 000000 00000000000 13703317554 024642 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/album_hover.svg000664 000000 000000 00000002665 13703317554 027677 0ustar00rootroot000000 000000 album_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/back_hover.svg000664 000000 000000 00000002103 13703317554 027462 0ustar00rootroot000000 000000 back_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/back_normal.svg000664 000000 000000 00000002235 13703317554 027635 0ustar00rootroot000000 000000 back_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/back_press.svg000664 000000 000000 00000002103 13703317554 027473 0ustar00rootroot000000 000000 back_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/dropdown_arrow.svg000664 000000 000000 00000001430 13703317554 030427 0ustar00rootroot000000 000000 dropdown_arrow Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/input_clear_hover.svg000664 000000 000000 00000002651 13703317554 031077 0ustar00rootroot000000 000000 input_clear_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/input_clear_normal.svg000664 000000 000000 00000002615 13703317554 031244 0ustar00rootroot000000 000000 input_clear_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/input_clear_press.svg000664 000000 000000 00000002626 13703317554 031112 0ustar00rootroot000000 000000 input_clear_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/playlist.svg000664 000000 000000 00000004533 13703317554 027231 0ustar00rootroot000000 000000 playlist Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/playlist_allmusic.svg000664 000000 000000 00000005623 13703317554 031123 0ustar00rootroot000000 000000 playlist_allmusic Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/playlist_fav.svg000664 000000 000000 00000003072 13703317554 030062 0ustar00rootroot000000 000000 playlist_fav Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/plus.svg000664 000000 000000 00000001250 13703317554 026344 0ustar00rootroot000000 000000 + Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/search.svg000664 000000 000000 00000002207 13703317554 026631 0ustar00rootroot000000 000000 search Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/singer_hover.svg000664 000000 000000 00000005461 13703317554 030063 0ustar00rootroot000000 000000 singer_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/suggest_button_hover.svg000664 000000 000000 00000003413 13703317554 031643 0ustar00rootroot000000 000000 suggest_button_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/suggest_button_normal.svg000664 000000 000000 00000005730 13703317554 032014 0ustar00rootroot000000 000000 suggest_button_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/suggest_button_press.svg000664 000000 000000 00000003404 13703317554 031654 0ustar00rootroot000000 000000 suggest_button_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/000775 000000 000000 00000000000 13703317554 026151 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/close_disabled.svg000664 000000 000000 00000002437 13703317554 031634 0ustar00rootroot000000 000000 close_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/close_hover.svg000664 000000 000000 00000002674 13703317554 031213 0ustar00rootroot000000 000000 close_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/close_normal.svg000664 000000 000000 00000002421 13703317554 031346 0ustar00rootroot000000 000000 close_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/close_press.svg000664 000000 000000 00000002674 13703317554 031224 0ustar00rootroot000000 000000 close_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/maximize_disabled.svg000664 000000 000000 00000002004 13703317554 032340 0ustar00rootroot000000 000000 maximize_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/maximize_hover.svg000664 000000 000000 00000002154 13703317554 031722 0ustar00rootroot000000 000000 maximize_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/maximize_normal.svg000664 000000 000000 00000001733 13703317554 032071 0ustar00rootroot000000 000000 maximize_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/maximize_press.svg000664 000000 000000 00000002154 13703317554 031733 0ustar00rootroot000000 000000 maximize_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/menu_disabled.svg000664 000000 000000 00000002351 13703317554 031466 0ustar00rootroot000000 000000 menu_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/menu_hover.svg000664 000000 000000 00000002453 13703317554 031045 0ustar00rootroot000000 000000 menu_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/menu_normal.svg000664 000000 000000 00000002477 13703317554 031220 0ustar00rootroot000000 000000 menu_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/menu_press.svg000664 000000 000000 00000002453 13703317554 031056 0ustar00rootroot000000 000000 menu_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/minimise_hover.svg000664 000000 000000 00000002132 13703317554 031705 0ustar00rootroot000000 000000 minimise_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/minimise_normal.svg000664 000000 000000 00000001712 13703317554 032055 0ustar00rootroot000000 000000 minimise_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/minimise_press.svg000664 000000 000000 00000002132 13703317554 031716 0ustar00rootroot000000 000000 minimise_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/minimize_disabled.svg000664 000000 000000 00000001712 13703317554 032343 0ustar00rootroot000000 000000 minimize_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/unmaximize_disabled.svg000664 000000 000000 00000002045 13703317554 032710 0ustar00rootroot000000 000000 unmaximize_disabled Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/unmaximize_hover.svg000664 000000 000000 00000002215 13703317554 032263 0ustar00rootroot000000 000000 unmaximize_hover Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/unmaximize_normal.svg000664 000000 000000 00000001772 13703317554 032437 0ustar00rootroot000000 000000 unmaximize_normal Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/light/image/window/unmaximize_press.svg000664 000000 000000 00000002215 13703317554 032274 0ustar00rootroot000000 000000 unmaximize_press Created with Sketch. deepin-music-6.0.1.54/src/music-player/resource/theme/theme.qrc000664 000000 000000 00000020701 13703317554 024262 0ustar00rootroot000000 000000 common/image/app_icon.svg common/image/cover_max.svg common/image/cover_min.svg common/image/cover_welcome.svg common/image/deepin-music.svg common/image/del_notify.svg common/image/dialog_warning.svg common/image/fav_hover.svg common/image/fav_normal.svg common/image/fav_press.svg common/image/hide_lyc.svg common/image/hide_lyc_press.svg common/image/info_cover.svg common/image/input_clear_hover.svg common/image/input_clear_normal.svg common/image/input_clear_press.svg common/image/jumpto_playing_hover.svg common/image/jumpto_playing_normal.svg common/image/jumpto_playing_press.svg common/image/lrc_hover.svg common/image/lrc_normal.svg common/image/lrc_press.svg common/image/lrc_search_hover.svg common/image/lrc_search_normal.svg common/image/lrc_search_press.svg common/image/next_hover.svg common/image/next_normal.svg common/image/next_press.svg common/image/notify_fail.svg common/image/notify_success.svg common/image/pause_hover.svg common/image/pause_normal.svg common/image/pause_press.svg common/image/play_all.svg common/image/playing_active.svg common/image/playing_normal.svg common/image/previous_hover.svg common/image/previous_normal.svg common/image/previous_press.svg common/image/repeat_all_hover.svg common/image/repeat_all_normal.svg common/image/repeat_all_press.svg common/image/repeat_single_hover.svg common/image/repeat_single_normal.svg common/image/repeat_single_press.svg common/image/sequence_hover.svg common/image/sequence_normal.svg common/image/sequence_press.svg common/image/show_lyc.svg common/image/show_lyc_hover.svg common/image/show_lyc_press.svg common/image/show_playlist_hover.svg common/image/show_playlist_normal.svg common/image/show_playlist_press.svg common/image/shuffle_hover.svg common/image/shuffle_normal.svg common/image/shuffle_press.svg common/image/slider_handle.svg common/image/start_hover.svg common/image/start_normal.svg common/image/start_press.svg common/image/unfav_hover.svg common/image/unfav_normal.svg common/image/unfav_press.svg common/image/volume_high_hover.svg common/image/volume_high_normal.svg common/image/volume_high_press.svg common/image/volume_low_hover.svg common/image/volume_low_normal.svg common/image/volume_low_press.svg common/image/volume_mid_hover.svg common/image/volume_mid_normal.svg common/image/volume_mid_press.svg common/image/volume_mute_hover.svg common/image/volume_mute_normal.svg common/image/volume_mute_press.svg common/image/warning.svg light/image/window/close_disabled.svg light/image/window/close_hover.svg light/image/window/close_normal.svg light/image/window/close_press.svg light/image/window/maximize_disabled.svg light/image/window/maximize_hover.svg light/image/window/maximize_normal.svg light/image/window/maximize_press.svg light/image/window/menu_disabled.svg light/image/window/menu_hover.svg light/image/window/menu_normal.svg light/image/window/menu_press.svg light/image/window/minimise_hover.svg light/image/window/minimise_normal.svg light/image/window/minimise_press.svg light/image/window/minimize_disabled.svg light/image/window/unmaximize_disabled.svg light/image/window/unmaximize_hover.svg light/image/window/unmaximize_normal.svg light/image/window/unmaximize_press.svg dark/image/window/close_disabled.svg dark/image/window/close_hover.svg dark/image/window/close_normal.svg dark/image/window/close_press.svg dark/image/window/maximize_disabled.svg dark/image/window/maximize_hover.svg dark/image/window/maximize_normal.svg dark/image/window/maximize_press.svg dark/image/window/menu_disabled.svg dark/image/window/menu_hover.svg dark/image/window/menu_normal.svg dark/image/window/menu_press.svg dark/image/window/minimise_disabled.svg dark/image/window/minimise_hover.svg dark/image/window/minimise_normal.svg dark/image/window/minimise_press.svg dark/image/window/unmaximize_disabled.svg dark/image/window/unmaximize_hover.svg dark/image/window/unmaximize_normal.svg dark/image/window/unmaximize_press.svg dark/image/back_hover.svg dark/image/back_normal.svg dark/image/back_press.svg dark/image/dropdown_arrow.svg dark/image/input_clear_hover.svg dark/image/input_clear_normal.svg dark/image/input_clear_press.svg dark/image/playlist.svg dark/image/playlist_allmusic.svg dark/image/playlist_fav.svg dark/image/plus.svg dark/image/search.svg dark/image/suggest_button_hover.svg dark/image/suggest_button_normal.svg dark/image/suggest_button_press.svg light/image/back_hover.svg light/image/back_normal.svg light/image/back_press.svg light/image/dropdown_arrow.svg light/image/input_clear_hover.svg light/image/input_clear_normal.svg light/image/input_clear_press.svg light/image/playlist.svg light/image/playlist_allmusic.svg light/image/playlist_fav.svg light/image/plus.svg light/image/search.svg light/image/suggest_button_hover.svg light/image/suggest_button_normal.svg light/image/suggest_button_press.svg dark/image/singer_normal.svg dark/image/album_normal.svg light/image/singer_hover.svg light/image/album_hover.svg common/image/picturelist_hover.svg common/image/textlist_press.svg common/image/textlist_hover.svg common/image/picturelist_press.svg common/image/textlist_normal.svg common/image/picturelist_normal.svg common/image/notify_fail_new.svg common/image/notify_success_new.svg deepin-music-6.0.1.54/src/music-player/speech/000775 000000 000000 00000000000 13703317554 020767 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/speech/exportedinterface.cpp000775 000000 000000 00000004621 13703317554 025214 0ustar00rootroot000000 000000 #include "exportedinterface.h" #include #include #include #include #include #include #include "../mainframe.h" #include "speechCenter.h" ExportedInterface::ExportedInterface(QObject *parent): Dtk::Core::DUtil::DExportedInterface(parent) { m_object = parent; m_SpeechCenter = SpeechCenter::getInstance(); } QVariant ExportedInterface::invoke(const QString &action, const QString ¶meters)const { //è§£æžå‚æ•° ACTION actionInt = ACTION(action.toInt()); QString param1; QString param2; QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(parameters.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { return false; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("param1")) { param1 = rootObj.value("param1").toString(); } if (rootObj.contains("param2")) { param2 = rootObj.value("param2").toString(); } qDebug() << "-----get ExportedInterface::invoke param1:" << param1; qDebug() << "-----get ExportedInterface::invoke param2:" << param2; //分å‘è¯­éŸ³ä¿¡å· switch (actionInt) { case ACTION::playMusic: return QVariant(m_SpeechCenter->playMusic(param1)); case ACTION::playArtist: return QVariant(m_SpeechCenter->playArtist(param1)); case ACTION::playArtistMusic: return QVariant(m_SpeechCenter->playArtistMusic(param1, param2)); case ACTION::playFaverite: return QVariant(m_SpeechCenter->playFaverite()); case ACTION::playCustom: return QVariant(m_SpeechCenter->playCustom(param1)); case ACTION::playRadom: return QVariant(m_SpeechCenter->playRadom()); case ACTION::pause: return QVariant(m_SpeechCenter->pause()); case ACTION::stop: return QVariant(m_SpeechCenter->stop()); case ACTION::resume: return QVariant(m_SpeechCenter->resume()); case ACTION::previous: return QVariant(m_SpeechCenter->previous()); case ACTION::next: return QVariant(m_SpeechCenter->next()); case ACTION::favorite: return QVariant(m_SpeechCenter->favorite()); case ACTION::unFavorite: return QVariant(m_SpeechCenter->unFaverite()); case ACTION::setMode: return QVariant(m_SpeechCenter->setMode(param1.toInt())); } return QVariant(true); } deepin-music-6.0.1.54/src/music-player/speech/exportedinterface.h000775 000000 000000 00000002154 13703317554 024660 0ustar00rootroot000000 000000 #ifndef EXPORTEDINTERFACE_H #define EXPORTEDINTERFACE_H #include #include DCORE_USE_NAMESPACE //定义action enum class ACTION { playMusic = 1, //播放歌曲å playArtist = 2, //播放歌手列表 playArtistMusic = 3, //播放歌手歌曲å playFaverite = 4, //æ’­æ”¾æˆ‘çš„æ”¶è— playCustom = 5, //æ’­æ”¾æ­Œå• playRadom = 6, //éšæœºæ’­æ”¾ pause = 11, //æš‚åœ stop = 12, //åœæ­¢ resume = 13, //继续播放 previous = 14, //上一首 next = 15, //下一首 favorite = 21, //æ”¶è— unFavorite = 22, //å–æ¶ˆæ”¶è— setMode = 23 //æ’­æ”¾æ¨¡å¼ }; class SpeechCenter; class ExportedInterface : public Dtk::Core::DUtil::DExportedInterface { // Q_Ob public: explicit ExportedInterface(QObject *parent = nullptr); QVariant invoke(const QString &action, const QString ¶meters) const; private: QObject *m_object; SpeechCenter *m_SpeechCenter; }; #endif // EXPORTEDINTERFACE_H deepin-music-6.0.1.54/src/music-player/speech/speechCenter.cpp000664 000000 000000 00000005671 13703317554 024114 0ustar00rootroot000000 000000 #include "speechCenter.h" #include "exportedinterface.h" #include //播放模å¼å®šä¹‰ enum class PLAYMODE { loop = 1, //循环播放 single = 2, //啿›²å¾ªçޝ radom = 3 //éšæœºæ’­æ”¾ }; SpeechCenter *SpeechCenter::getInstance() { static SpeechCenter mInstance; return &mInstance; } SpeechCenter::SpeechCenter(QObject *parent) : QObject(parent) { } bool SpeechCenter::playMusic(QString music) { qDebug() << "-----playMusic:" << music; Q_EMIT sigPlayMusic(music); return playMusicResult; } bool SpeechCenter::playArtist(QString artist) { qDebug() << "-----playArtist:" << artist; Q_EMIT sigPlayArtist(artist); return playArtistResult; } bool SpeechCenter::playArtistMusic(QString artist, QString music) { qDebug() << "-----playArtistMusic artist:" << artist << "Music:" << music; Q_EMIT sigPlayArtistMusic(artist, music); return playArtistMusicResult; } bool SpeechCenter::playFaverite() { qDebug() << "-----playFaverite"; Q_EMIT sigPlayFaverite(); return playFaveriteResult; } bool SpeechCenter::playCustom(QString listName) { qDebug() << "-----playCustom:" << listName; Q_EMIT sigPlayCustom(listName); return playCustomResult; } bool SpeechCenter::playRadom() { qDebug() << "-----playRadom:"; Q_EMIT sigPlayRadom(); return playRadomResult; } bool SpeechCenter::pause() { qDebug() << "-----pause:"; Q_EMIT sigPause(); return true; } bool SpeechCenter::stop() { qDebug() << "-----stop:"; Q_EMIT sigStop(); return true; } bool SpeechCenter::resume() { qDebug() << "-----resume:"; Q_EMIT sigResume(); return true; } bool SpeechCenter::previous() { qDebug() << "-----previous:"; Q_EMIT sigPrevious(); return true; } bool SpeechCenter::next() { qDebug() << "-----next:"; Q_EMIT sigNext(); return true; } bool SpeechCenter::favorite() { qDebug() << "-----set favorite:"; Q_EMIT sigFavorite(); return true; } bool SpeechCenter::unFaverite() { qDebug() << "-----set unFaverite:"; Q_EMIT unFaverite(); return true; } bool SpeechCenter::setMode(int mode) { qDebug() << "-----setMode:" << mode; Q_EMIT sigSetMode(mode); return true; } void SpeechCenter::onSpeedResult(int action, bool result) { qDebug() << "-----onSpeedResult action" << action << "result" << result; ACTION mAction = ACTION(action); switch (mAction) { case ACTION::playMusic: playMusicResult = result; break; case ACTION::playArtist: playArtistResult = result; break; case ACTION::playArtistMusic: playArtistMusicResult = result; break; case ACTION::playFaverite: playFaveriteResult = result; break; case ACTION::playCustom: playCustomResult = result; break; case ACTION::playRadom: playRadomResult = result; break; default: break; } } deepin-music-6.0.1.54/src/music-player/speech/speechCenter.h000664 000000 000000 00000002550 13703317554 023552 0ustar00rootroot000000 000000 #ifndef SPEECHCENTER_H #define SPEECHCENTER_H #include class SpeechCenter : public QObject { Q_OBJECT public: static SpeechCenter *getInstance(); public: bool playMusic(QString music); bool playArtist(QString artist); bool playArtistMusic(QString artist, QString music); bool playFaverite(); bool playCustom(QString listName); bool playRadom(); bool pause(); bool stop(); bool resume(); bool previous(); bool next(); bool favorite(); bool unFaverite(); bool setMode(int mode); signals: void sigPlayMusic(QString music); void sigPlayArtist(QString artist); void sigPlayArtistMusic(QString artist, QString music); void sigPlayFaverite(); void sigPlayCustom(QString listName); void sigPlayRadom(); void sigPause(); void sigStop(); void sigResume(); void sigPrevious(); void sigNext(); void sigFavorite(); void sigUnFaverite(); void sigSetMode(int mode); public slots: void onSpeedResult(int action, bool result); private: SpeechCenter(QObject *parent = nullptr); private: bool playMusicResult = true; bool playArtistResult = true; bool playArtistMusicResult = true; bool playFaveriteResult = true; bool playCustomResult = true; bool playRadomResult = true; }; #endif // SPEECHCENTER_H deepin-music-6.0.1.54/src/music-player/translations/000775 000000 000000 00000000000 13703317554 022241 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/translations/deepin-music.ts000664 000000 000000 00000142440 13703317554 025200 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Minimize to system tray Do not ask again Cancel Confirm DequalizerDialog Custom Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous Next Play/Pause Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Artist: Album: Type: Path: Unknown artist Unknown album Size: Basic info Duration: LoadWidget Loading... LyricWidget Find lyrics Title Artist Search Back MUsicLyricWidget No lyrics yet MainFrame Settings Exit Dark theme Equalizer Play/Pause Previous All music OK Add playlist Add music Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Delete MusicListScrollArea Library Playlists MusicListView Play Are you sure you want to delete this playlist? My Favorites Cancel Delete Pause Rename PlayListView Play queue My favorites Add to new playlist Pause Play musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Delete Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Music QApplication Music QObject Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Shortcuts Restore Defaults Next Play/Pause Previous Volume down Volume up SearchLyricsWidget Find Lyrics Title Artist Search SearchResult Music Artists Albums Shortcut Play Songs Playlists Settings Play/Pause Previous Next Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search deepin-music-6.0.1.54/src/music-player/translations/deepin-music_af.ts000664 000000 000000 00000143447 13703317554 025656 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Minimize to system tray Do not ask again Cancel Kanselleer Confirm OK OK DequalizerDialog Custom Verspersoonlik Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous Vorige Next Volgende Play/Pause Speel/Pouse Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Artist: Album: Type: Tipe: Path: Unknown artist Unknown album Size: Groote: Basic info Duration: LoadWidget Loading... LyricWidget Find lyrics Title Artist Search Back MUsicLyricWidget No lyrics yet MainFrame Settings Exit Dark theme Equalizer Play/Pause Speel/Pouse Previous Vorige All music OK OK Add playlist Add music Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Volgende MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom Verspersoonlik Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel Kanselleer Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Verwyder Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Kanselleer Delete Verwyder MusicListScrollArea Library Playlists MusicListView Play Are you sure you want to delete this playlist? My Favorites Cancel Kanselleer Delete Verwyder Pause Rename MusicListWidget Custom Verspersoonlik PlayListItem Delete Verwyder Cancel Kanselleer PlayListView Play queue My favorites Add to new playlist Pause Play musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel Kanselleer Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Delete Verwyder Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Music QApplication Music QObject Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Shortcuts Restore Defaults Next Volgende Play/Pause Speel/Pouse Previous Vorige Volume down Volume af Volume up Volume op SearchLyricsWidget Find Lyrics Title Artist Search SearchResult Music Artists Albums Shortcut Play Songs Playlists Settings Play/Pause Speel/Pouse Previous Vorige Next Volgende Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ar.ts000664 000000 000000 00000146442 13703317554 025670 0ustar00rootroot000000 000000 CloseConfirmDialog Exit خروج Minimize to system tray تصغير إلى منطقة اﻹعلام Do not ask again عدم العرض مرة أخرى Please select your operation الرجاء تحديد العملية Cancel إلغاء Confirm تأكيد DequalizerDialog Custom مخصص Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults استعادة Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠØ§Øª Footer Unknown Title العنوان غير معرو٠Unknown artist Ùنان غير معرو٠Previous السابق Next التالي Play/Pause تشغيل/إيقا٠مؤقت Favorite Ø§Ù„Ù…ÙØ¶Ù„Ø© Lyrics كلمات Play Mode وضع التشغيل Play Queue تشغيل المقاطع بالترتيب List Loop تكرار القائمة Single Loop تكرار Ù…ÙØ±Ø¯ Shuffle خلط ImportWidget Open Folder Add Music Ø¥Ø¶Ø§ÙØ© موسيقى Scan ÙØ­Øµ %1 music directory or drag music files here %1 دليل للمقاطع الصوتية أو قم بسحب وإسقاط Ù…Ù„Ù Ù„Ø¥Ø¶Ø§ÙØªÙ‡ إلى تطبيق الموسيقى Loading music, please wait... تحميل الموسيقى ØŒ يرجى الانتظار ... InfoDialog Basic info معلومات أساسية Title: العنوان: Artist: الÙنان: Album: الألبوم: Type: النوع: Size: الحجم: Duration: المدة: Path: المسار: Unknown artist Ùنان غير معرو٠Unknown album ألبوم غير معرو٠LoadWidget Loading... يتم التحميل... LyricWidget Find lyrics اعثر على الكلمات Title عنوان Artist Ùنان Search بحث Back العودة MUsicLyricWidget No lyrics yet MainFrame Add playlist أض٠قائمة تشغيل Add music Ø¥Ø¶Ø§ÙØ© مقاطع صوتية Equalizer Settings إعدادات Dark theme سمة داكنة Exit خروج Music is a local music player with beautiful design and simple functions. موسيقى: هو مشغّل مقاطع صوتية محلي مع تصميم جميل ووظائ٠بسيطة. Music موسيقى Play/Pause تشغيل/إيقا٠مؤقت Previous السابق Next التالي Successfully added to "%1" تمت Ø§Ù„Ø§Ø¶Ø§ÙØ© بنجاح الى "%1" Already added to the playlist تم Ø¥Ø¶Ø§ÙØªØ© مسبقاً إلى قائمة التشغيل 1 song added تم Ø¥Ø¶Ø§ÙØ© 1 مقطع صوتي %1 songs added تم Ø¥Ø¶Ø§ÙØ© %1 مقاطع صوتية File is invalid or does not exist, load failed ÙØ´Ù„ التحميل، المل٠غير صالح أو غير موجود OK مواÙÙ‚ Import failed, no valid music file found ÙØ´Ù„ الاستيراد، لم يتم إيجاد مقطع صوتي صالح All music ÙƒØ§ÙØ© الموسيقى MusicListDataDelegate No songs لا يوجد أي مقاطع صوتية 1 song 1 مقطع صوتي %1 songs %1 مقاطع صوتية MusicListDataWidget No songs لا يوجد أي مقاطع صوتية 1 album - 1 song 1 إلبوم - 1 مقطع صوتي %1 album - %2 songs %1 إلبوم - %2 مقاطع صوتية %1 albums - %2 songs %1 إلبومات - %2 مقاطع صوتية 1 artist - 1 song 1 Ùنّان - 1 مقطع صوتي %1 artist - %2 songs %1 Ùنّان - %2 مقاطع صوتية %1 artists - %2 songs %1 Ùنّانين - %2 مقاطع صوتية 1 song 1 مقطع صوتي %1 songs %1 مقاطع صوتية No search results لا توجد نتائج للبحث All Music كل المقاطع الصوتية Time added وقت Ø§Ù„Ø§Ø¶Ø§ÙØ© Album الألبوم Artist Ùنان Title عنوان Play All تشغيل الكل Artists الÙنّانين Albums الإلبومات Custom مخصص Search Results Songs المقاطع الصوتية No result found لم يتم العثور على نتيجة MusicListDialog Play All تشغيل الكل Shuffle خلط MusicListInfoView Play queue تشغيل المقاطع بالترتيب Add to new playlist Ø¥Ø¶Ø§ÙØ© إلى قائمة تشغيل جديدة Pause إيقا٠مؤقت Play تشغيل Add to playlist Ø¥Ø¶Ø§ÙØ© إلى قائمة التشغيل Display in file manager عرض ÙÙŠ مدير Ø§Ù„Ù…Ù„ÙØ§Øª Remove from playlist إزالة من قائمة التشغيل Delete from local disk حذ٠من القرص المحلي Song info معلومات الاغنية Cancel إلغاء Remove إزالة Are you sure you want to remove %1? هل أنت متأكد من حذ٠%1ØŸ Are you sure you want to remove the selected %1 songs? هل أنت متأكد من حذ٠المقاطع الصوتية الـ %1 المحددة؟ Delete حذ٠Are you sure you want to delete %1? هل أنت متأكد من حذ٠%1ØŸ Are you sure you want to delete the selected %1 songs? هل أنت متأكد من حذ٠الأغاني %1 المختارة؟ The song files contained will also be deleted سيتم أيضًا حذ٠المقاطع الصوتية الموجودة MusicListItem Are you sure you want to delete this playlist? هل أنت متأكد من حذ٠هذه القائمة؟ Cancel إلغاء Delete حذ٠MusicListScrollArea Library المكتبة Playlists قوائم التشغيل MusicListView My Favorites Are you sure you want to delete this playlist? هل أنت متأكد من حذ٠هذه القائمة؟ Cancel إلغاء Delete حذ٠Pause إيقا٠مؤقت Play تشغيل Rename إعادة تسمية PlayListView Unknown artist Ùنان غير معرو٠Unknown album ألبوم غير معرو٠Play queue تشغيل المقاطع بالترتيب musicResult My favorites Ù…ÙØ¶Ù„تي Add to new playlist Ø¥Ø¶Ø§ÙØ© إلى قائمة تشغيل جديدة Pause إيقا٠مؤقت Play تشغيل Add to playlist Ø¥Ø¶Ø§ÙØ© إلى قائمة التشغيل Display in file manager عرض ÙÙŠ مدير Ø§Ù„Ù…Ù„ÙØ§Øª Remove from playlist إزالة من قائمة التشغيل Remove from play queue Delete from local disk حذ٠من القرص المحلي Encoding الترميز Song info معلومات الاغنية Cancel إلغاء Remove إزالة Are you sure you want to remove %1? هل أنت متأكد من حذ٠%1ØŸ Are you sure you want to remove the selected %1 songs? هل أنت متأكد من حذ٠المقاطع الصوتية الـ %1 المحددة؟ Delete حذ٠Are you sure you want to delete %1? هل أنت متأكد من حذ٠%1ØŸ Are you sure you want to delete the selected %1 songs? هل أنت متأكد من حذ٠الأغاني %1 المختارة؟ The song files contained will also be deleted سيتم أيضًا حذ٠المقاطع الصوتية الموجودة PlayListWidget No songs لا يوجد أي مقاطع صوتية No search results لا توجد نتائج للبحث Play Queue تشغيل المقاطع بالترتيب Empty ÙØ§Ø±Øº 1 song 1 مقطع صوتي %1 songs %1 مقاطع صوتية Playlist Unknown album ألبوم غير معرو٠Unknown artist Ùنان غير معرو٠PlaylistManager New playlist قائمة تشغيل جديدة Albums الإلبومات Artists الÙنّانين All Music كل الموسيقى My favorites Ù…ÙØ¶Ù„تي Search result نتائج البحث Play تشغيل Music موسيقى QApplication Music موسيقى QObject Minimize to system tray تصغير إلى منطقة اﻹعلام Exit Music الخروج من تطبيق الموسيقى Autoplay تشغيل تلقائي Enable fade in/out ØªÙØ¹ÙŠÙ„ تأثير دخول/خروج Remember playback position تذكر وضع التشغيل Close Main Window إغلاق Ø§Ù„Ù†Ø§ÙØ°Ø© الرئيسية Basic أساسي Play تشغيل Shortcuts الإختصارات Restore Defaults استعادة Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠØ§Øª Next التالي Play/Pause تشغيل / إيقا٠Previous السابق Volume down Ø®ÙØ¶ الصوت Volume up Ø±ÙØ¹ الصوت SearchLyricsWidget Find Lyrics اعثر على كلمات الأغاني Title عنوان Artist Ùنان Search بحث SearchResult Music موسيقى Artists الÙنّانين Albums الإلبومات Shortcut Play تشغيل Songs المقاطع الصوتية Playlists قوائم التشغيل Settings الإعدادات Play/Pause تشغيل/إيقا٠مؤقت Previous السابق Next التالي Volume Up Ø±ÙØ¹ الصوت Volume Down Ø®ÙØ¶ الصوت Mute صامت Favorite Ø§Ù„Ù…ÙØ¶Ù„Ø© Unfavorite غير Ø§Ù„Ù…ÙØ¶Ù„Ø© Song info معلومات الاغنية New playlist قائمة تشغيل جديدة Add music Ø¥Ø¶Ø§ÙØ© مقاطع صوتية Rename playlist إعادة تسمية قائمة التشغيل Remove from playlist إزالة من قائمة التشغيل Help مساعدة Display shortcuts عرض الإختصارات TitlebarWidget Search بحث deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ast.ts000664 000000 000000 00000156376 13703317554 026064 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Esbilla la to operación, por favor Exit Colar Minimize to system tray Minimizar a la bandexa'l sistema Do not ask again Cancel Encaboxar Confirm OK Aceutar DequalizerDialog Custom Personalizáu Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Reafitar valores Footer Previous Previo Next Siguiente Play/Pause Reproducir/Posar Favorite Lyrics Lletres Play Queue Unknown Title Títulu desconocíu Unknown artist Artista desconocíu Play Mode Mou de reproducción Playlist Llista de reproducción List Loop Repitición del llistáu Single Loop Una repitición Shuffle Al debalu ImportWidget Add folder Amestar carpeta Open Folder Add Music Scan Escaniar %1 music directory or drag music files here Loading music, please wait... Cargando música. Espera, por favor... InfoDialog Title: Títulu: Artist: Artista: Album: Ãlbum: Type: Triba: Path: Camín: Unknown artist Artista desconocíu Unknown album Ãlbum desconocíu Size: Tamañu: Basic info Duration: Duración LoadWidget Loading... Cargando... LyricWidget Find lyrics Title Títulu Artist Artista Search Guetar Back Atrás MUsicLyricWidget No lyrics yet MainFrame New playlist Llista nueva de reproducción Settings Axustes Exit Colar Add folder Amestar carpeta Add file Amestar ficheru Dark theme Tema prietu Play/Pause Reproducir/Posar Previous Previo Invalid or non-existent file Ficheru non válidu o inesistente Failed to import, no vaild music file found! Fallu al importar. ¡Nun s'alcontraron ficheros válidos! All music Tola música OK Aceutar Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Amestóse con ésitu a «%1» Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Siguiente MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Tola música Time added Data d'amiestu Album Artist Artista Title Títulu Play All Reproducir too Artists Albums Custom Personalizáu Search Results Songs No result found Nun s'alcontraron resultaos MusicListDialog Play All Reproducir too Shuffle Al debalu MusicListInfoView New playlist Llista nueva de reproducción Play queue Add to new playlist Pause Play Reproducir Add to playlist Amestar a la llista Display in file manager Amosar nel xestor de ficheros Remove from playlist Desaniciar del llistáu de reproducción Delete from local disk Desaniciar del discu llocal Song info Informaciónd de canción Cancel Encaboxar Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Desaniciar Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Encaboxar Delete Desaniciar MusicListScrollArea Library Playlists MusicListView New playlist Llista nueva de reproducción Play Reproducir Add to playlist Amestar a la llista Display in file manager Amosar nel xestor de ficheros Song info Informaciónd de canción Remove from playlist Desaniciar del llistáu de reproducción Delete from local disk Desaniciar del discu llocal Encoding Codificación My Favorites Are you sure you want to delete this playlist? Cancel Encaboxar Delete Desaniciar Pause Rename Renomar Deleting the current song will also delete the song files contained Desaniciar la canción actual tamién desaniciará los ficheros venceyaos Unknown artist Artista desconocíu Unknown album Ãlbum desconocíu MusicListWidget No Music Nun hai música No result found Nun s'alcontraron resultaos Play All Reproducir too Time added Data d'amiestu Title Títulu Artist Artista Album name Nome d'álbum Custom Personalizáu PlayListItem Delete Desaniciar Cancel Encaboxar PlayListView New playlist Llista nueva de reproducción Play queue musicResult My favorites Los mios favoritos Add to new playlist Pause Play Reproducir Add to playlist Amestar a la llista Display in file manager Amosar nel xestor de ficheros Remove from playlist Desaniciar del llistáu de reproducción Remove from play queue Delete from local disk Desaniciar del discu llocal Encoding Codificación Song info Informaciónd de canción Cancel Encaboxar Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename Renomar Delete Desaniciar Unknown artist Artista desconocíu Unknown album Ãlbum desconocíu PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Ãlbum desconocíu Unknown artist Artista desconocíu PlaylistManager New playlist Llista nueva de reproducción Artist Artista Albums Artists All Music Tola música My favorites Los mios favoritos Search result Resultaos de gueta Play Reproducir Music PlaylistWidget New playlist Llista nueva de reproducción QApplication Deepin Music Música Deepin Music QObject Deepin Music Música Deepin Minimize to system tray Minimizar a la bandexa'l sistema Exit Deepin Music Colar de Deepin Music Exit Music Autoplay Auto-reproducción Enable fade in/out Remember playback position Recordar posición de reproducción Close Main Window Zarrar ventana principal Basic Básicu Play Reproducir Shortcuts Atayos Restore Defaults Reafitar valores Next Siguiente Play/Pause Reproducir/Posar Previous Previo Volume down Baxar volume Volume up Xubir volume SearchLyricsWidget Find Lyrics Title Títulu Artist Artista Search Guetar SearchResult Search "%1" in Deepin Music Guetar «%1» en Deepin Music Music Artists Albums Shortcut Play Reproducir Songs Playlists Settings Axustes Play/Pause Reproducir/Posar Previous Previo Next Siguiente Volume Up Volume Down Mute Favorite Unfavorite Song info Informaciónd de canción New playlist Llista nueva de reproducción Add music Rename playlist Remove from playlist Desaniciar del llistáu de reproducción Help Display shortcuts TitlebarWidget Search Guetar deepin-music-6.0.1.54/src/music-player/translations/deepin-music_az.ts000664 000000 000000 00000146761 13703317554 025704 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Çıxış Minimize to system tray Do not ask again Cancel İmtina Confirm OK OK DequalizerDialog Custom Şəxsi Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous ÆvvÉ™lki Next Sonrakı Play/Pause Oxut/FasilÉ™ Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode Playlist Oxunma siyahısı List Loop Single Loop Shuffle ImportWidget Add folder Qovluq É™lavÉ™ et Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: BaÅŸlıq: Artist: İfaçı Album: Type: Növ: Path: Unknown artist Unknown album Size: Ölçü: Basic info Duration: LoadWidget Loading... LyricWidget Find lyrics Title BaÅŸlıq Artist İfaçı Search Axtar Back MUsicLyricWidget No lyrics yet MainFrame Settings TÉ™nzimlÉ™mÉ™lÉ™r Exit Çıxış Add folder Qovluq É™lavÉ™ et Add file Fayl É™lavÉ™ et Dark theme Play/Pause Oxut/FasilÉ™ Previous ÆvvÉ™lki All music OK OK Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Sonrakı MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist İfaçı Title BaÅŸlıq Play All Hamısını Oxut Artists Albums Custom Şəxsi Search Results Songs No result found MusicListDialog Play All Hamısını Oxut Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Oxut Add to playlist Display in file manager Remove from playlist Oynatma siyahısından çıxart Delete from local disk Song info Cancel İmtina Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Sil Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel İmtina Delete Sil MusicListScrollArea Library Playlists MusicListView Play Oxut Remove from playlist Oynatma siyahısından çıxart My Favorites Are you sure you want to delete this playlist? Cancel İmtina Delete Sil Pause Rename YenidÉ™n adlandır MusicListWidget Play All Hamısını Oxut Title BaÅŸlıq Artist İfaçı Custom Şəxsi PlayListItem Delete Sil Cancel İmtina PlayListView Play queue musicResult My favorites Add to new playlist Pause Play Oxut Add to playlist Display in file manager Remove from playlist Oynatma siyahısından çıxart Remove from play queue Delete from local disk Encoding Song info Cancel İmtina Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename YenidÉ™n adlandır Delete Sil Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Artist İfaçı Albums Artists All Music My favorites Search result Play Oxut Music QApplication Deepin Music Deepin Musiqi Music QObject Deepin Music Deepin Musiqi Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Oxut Shortcuts Qısayollar Restore Defaults Next Sonrakı Play/Pause Oxut/FasilÉ™ Previous ÆvvÉ™lki Volume down SÉ™si azalt Volume up SÉ™si çoxalt SearchLyricsWidget Find Lyrics Title BaÅŸlıq Artist İfaçı Search Axtar SearchResult Music Artists Albums Shortcut Play Oxut Songs Playlists Settings TÉ™nzimlÉ™mÉ™lÉ™r Play/Pause Oxut/FasilÉ™ Previous ÆvvÉ™lki Next Sonrakı Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Oynatma siyahısından çıxart Help Display shortcuts TitlebarWidget Search Axtar deepin-music-6.0.1.54/src/music-player/translations/deepin-music_bg.ts000664 000000 000000 00000162064 13703317554 025654 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation МолÑ, изберете Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Exit Изход Minimize to system tray Минимизирай в зоната за уведомÑване Do not ask again Cancel Отказ Confirm OK Да DequalizerDialog Custom ПотребителÑки Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults ВъзÑтанови Ñтандартните наÑтройки Footer Previous Предишно Next Следващ Play/Pause ПуÑкане/Задържане Favorite Любими Lyrics ТекÑтове на пеÑни Play Queue Unknown Title Ðепознато заглавие Unknown artist ÐеизвеÑтен изпълнител Play Mode Режим на възпроизвеждане Playlist СпиÑък List Loop Повторение на ÑпиÑъка Single Loop Еднократно повторение Shuffle Разбъркано ImportWidget Add folder ДобавÑне на папка Open Folder Add Music Scan Сканирай %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 папка c музика или влачете и пуÑнете файл, за да добавите музика Loading music, please wait... Зареждане Ñ Ð¼ÑƒÐ·Ð¸ÐºÐ°, почакайте… InfoDialog Title: Ðазвание: Artist: Изпълнител: Album: Ðлбум: Type: Тип: Path: Път: Unknown artist ÐеизвеÑтен изпълнител Unknown album ÐеизвеÑтен албум Size: Размер: Basic info Duration: Времетраене: LoadWidget Loading... Зареждане… LyricWidget Find lyrics Title Заглавие Artist Изпълнител Search ТърÑене Back Ðазад MUsicLyricWidget No lyrics yet MainFrame New playlist Ðов ÑпиÑък Settings ÐаÑтройки Exit Изход Add folder ДобавÑне на папка Add file ДобавÑне на файл Dark theme Тъмна тема Play/Pause Изпълнение/Пауза Previous Предишно Invalid or non-existent file Ðевалиден или неÑъщеÑтвуващ файл Failed to import, no vaild music file found! ÐеуÑпешно внаÑÑне, нÑма открит файл Ñ Ð¼ÑƒÐ·Ð¸ÐºÐ°! All music ЦÑлата музика OK Да Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" УÑпешно добавено към "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Следващ MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music ЦÑлата музика Time added Добавено на Album Artist Изпълнител Title Заглавие Play All Изпълни вÑички Artists Albums Custom ПотребителÑки Search Results Songs No result found ÐÑма открит резултат MusicListDialog Play All Изпълни вÑички Shuffle Разбъркано MusicListInfoView New playlist Ðов ÑпиÑък Play queue Add to new playlist Pause Play Изпълнение Add to playlist ДобавÑне към ÑпиÑъка Display in file manager Покажи във Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¸Ñ Ð¼ÐµÐ½Ð¸Ð´Ð¶ÑŠÑ€ Remove from playlist Премахване от ÑпиÑъка Delete from local disk Изтриване от диÑка Song info Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° пеÑента Cancel Отказ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Изтриване Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Отказ Delete Изтриване MusicListScrollArea Library Playlists MusicListView New playlist Ðов ÑпиÑък Play Изпълнение Add to playlist ДобавÑне към ÑпиÑъка Display in file manager Покажи във Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¸Ñ Ð¼ÐµÐ½Ð¸Ð´Ð¶ÑŠÑ€ Song info Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° пеÑента Remove from playlist Премахване от ÑпиÑъка Delete from local disk Изтриване от диÑка Encoding Кодировка My Favorites Are you sure you want to delete this playlist? Cancel Отказ Delete Изтриване Pause Rename Преименуване Deleting the current song will also delete the song files contained Изтриването на текущата пеÑен ще изтрие и ÑамиÑÑ‚ файл Unknown artist ÐеизвеÑтен изпълнител Unknown album ÐеизвеÑтен албум MusicListWidget No Music ÐÑма музика No result found ÐÑма открит резултат Play All Изпълни вÑички Time added Добавено на Title Заглавие Artist Изпълнител Album name Име на албум Custom ПотребителÑки PlayListItem Delete Изтриване Cancel Отказ PlayListView New playlist Ðов ÑпиÑък Play queue musicResult My favorites Любимите ми Add to new playlist Pause Play Изпълнение Add to playlist ДобавÑне към ÑпиÑъка Display in file manager Покажи във Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¸Ñ Ð¼ÐµÐ½Ð¸Ð´Ð¶ÑŠÑ€ Remove from playlist Премахване от ÑпиÑъка Remove from play queue Delete from local disk Изтриване от диÑка Encoding Кодировка Song info Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° пеÑента Cancel Отказ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename Преименуване Delete Изтриване Unknown artist ÐеизвеÑтен изпълнител Unknown album ÐеизвеÑтен албум PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album ÐеизвеÑтен албум Unknown artist ÐеизвеÑтен изпълнител PlaylistManager New playlist Ðов ÑпиÑък Artist Изпълнител Albums Artists All Music ЦÑлата музика My favorites Любимите ми Search result Резултати от търÑенето Play Изпълнение Music PlaylistWidget New playlist Ðов ÑпиÑък QApplication Deepin Music Deepin Музика Music QObject Deepin Music Deepin Музика Minimize to system tray Минимизирай в зоната за уведомÑване Exit Deepin Music Излизане от Deepin Музика Exit Music Autoplay Ðвтоматично изпълнение Enable fade in/out Remember playback position Запомни меÑтоположението на запиÑа Close Main Window Затвори оÑÐ½Ð¾Ð²Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ† Basic ОÑновен Play Изпълнение Shortcuts Бързи клавиши Restore Defaults ВъзÑтанови Ñтандартните наÑтройки Next Следващ Play/Pause Изпълнение/Пауза Previous Предишно Volume down ÐамалÑване Volume up Увеличаване SearchLyricsWidget Find Lyrics Title Заглавие Artist Изпълнител Search ТърÑене SearchResult Search "%1" in Deepin Music ТърÑи "%1" в Deepin Music Music Artists Albums Shortcut Play Изпълнение Songs Playlists Settings ÐаÑтройки Play/Pause Previous Предишно Next Следващ Volume Up Volume Down Mute Favorite Любими Unfavorite Song info Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° пеÑента New playlist Ðов ÑпиÑък Add music Rename playlist Remove from playlist Премахване от ÑпиÑъка Help Display shortcuts TitlebarWidget Search ТърÑене deepin-music-6.0.1.54/src/music-player/translations/deepin-music_bn.ts000664 000000 000000 00000146707 13703317554 025671 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit বের হয়ে যান Minimize to system tray Do not ask again Cancel বাতিল Confirm OK ঠিক আছে DequalizerDialog Custom পà§à¦°à¦¥à¦¾ Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤ জিনিসে ফিরে যান Footer Previous পূরà§à¦¬à¦¬à¦°à§à¦¤à§€à¦Ÿà¦¿ Next পরবরà§à¦¤à§€ Play/Pause চালান/থামà§à¦¨ Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode চালানোর ধরণ Playlist চালানোর তালিকা List Loop সমà§à¦ªà§‚রà§à¦£ তালিকা ঘà§à§œà§à¦¨ Single Loop à¦à¦•বার ঘà§à§œà¦¬à§‡à¦¨ Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Artist: Album: Type: ধরণ: Path: Unknown artist Unknown album Size: আকার: Basic info Duration: সময়কালঃ LoadWidget Loading... লোড হচà§à¦›à§‡... LyricWidget Find lyrics Title Artist Search খà§à¦à¦œà§à¦¨ Back ফিরে যান MUsicLyricWidget No lyrics yet MainFrame Settings সেটিংস Exit বের হয়ে যান Dark theme Equalizer Play/Pause চালান/থামà§à¦¨ Previous পূরà§à¦¬à¦¬à¦°à§à¦¤à§€à¦Ÿà¦¿ All music OK ঠিক আছে Add playlist Add music Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next পরবরà§à¦¤à§€ MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom পà§à¦°à¦¥à¦¾ Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play চালৠকরà§à¦¨ Add to playlist Display in file manager ফাইল মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦° দেখান Remove from playlist Delete from local disk Song info Cancel বাতিল Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete মà§à¦›à§‡ ফেলà§à¦¨ Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel বাতিল Delete মà§à¦›à§‡ ফেলà§à¦¨ MusicListScrollArea Library Playlists MusicListView Play চালৠকরà§à¦¨ Display in file manager ফাইল মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦° দেখান My Favorites Are you sure you want to delete this playlist? Cancel বাতিল Delete মà§à¦›à§‡ ফেলà§à¦¨ Pause Rename MusicListWidget Custom পà§à¦°à¦¥à¦¾ PlayListItem Delete মà§à¦›à§‡ ফেলà§à¦¨ Cancel বাতিল PlayListView Play queue My favorites Add to new playlist Pause Play চালৠকরà§à¦¨ musicResult Add to playlist Display in file manager ফাইল মà§à¦¯à¦¾à¦¨à§‡à¦œà¦¾à¦° দেখান Remove from play queue Delete from local disk Encoding Song info Cancel বাতিল Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Delete মà§à¦›à§‡ ফেলà§à¦¨ Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play চালৠকরà§à¦¨ Music QApplication Deepin Music ডিপিন মিউজিক Music QObject Deepin Music ডিপিন মিউজিক Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position সরà§à¦¬à¦¶à§‡à¦· চালানো অবসà§à¦¥à¦¾ মনে রাখà§à¦¨ Close Main Window Basic পà§à¦°à¦¾à¦¥à¦®à¦¿à¦• Play চালৠকরà§à¦¨ Shortcuts শরà§à¦Ÿà¦•াট Restore Defaults পূরà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤ জিনিসে ফিরে যান Next পরবরà§à¦¤à§€ Play/Pause চালান/থামà§à¦¨ Previous পূরà§à¦¬à¦¬à¦°à§à¦¤à§€à¦Ÿà¦¿ Volume down শবà§à¦¦ কমান Volume up শবà§à¦¦ বাড়ান SearchLyricsWidget Find Lyrics Title Artist Search খà§à¦à¦œà§à¦¨ SearchResult Music Artists Albums Shortcut Play চালৠকরà§à¦¨ Songs Playlists Settings সেটিংস Play/Pause চালান/থামà§à¦¨ Previous পূরà§à¦¬à¦¬à¦°à§à¦¤à§€à¦Ÿà¦¿ Next পরবরà§à¦¤à§€ Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search খà§à¦à¦œà§à¦¨ deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ca.ts000664 000000 000000 00000143171 13703317554 025645 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Surt Minimize to system tray Minimitza a la safata del sistema Do not ask again No ho tornis a preguntar. Please select your operation Seleccioneu l'operació Cancel Cancel·la Confirm Confirmeu-ho DequalizerDialog Custom Personalitzat Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Restaura els valors per defecte Footer Unknown Title Títol desconegut Unknown artist Artista desconegut Previous Anterior Next Següent Play/Pause Reprodueix / Pausa Favorite Favorit Lyrics Lletres Play Mode Mode de reproducció Play Queue Cua de reproducció List Loop Repetició de la llista Single Loop Repetició simple Shuffle Aleatòria ImportWidget Open Folder Obre una carpeta Add Music Afegiu música Scan Explora %1 music directory or drag music files here %1 directori de música o arrossegueu fitxers de música aquí. Loading music, please wait... Carregant música; espereu, si us plau... InfoDialog Basic info Informació bàsica Title: Títol: Artist: Artista: Album: Àlbum: Type: Tipus: Size: Mida: Duration: Durada: Path: Camí: Unknown artist Artista desconegut Unknown album Àlbum desconegut LoadWidget Loading... Carregant... LyricWidget Find lyrics Troba'n la lletra Title Títol Artist Artista Search Cerca Back Enrere MUsicLyricWidget No lyrics yet MainFrame Add playlist Afegiu una llista de reproducció Add music Afegiu música Equalizer Settings Configuració Dark theme Tema fosc Exit Surt Music is a local music player with beautiful design and simple functions. La Música és un reproductor de música local amb un disseny bonic i funcions senzilles. Music Música Play/Pause Reprodueix / Pausa Previous Anterior Next Següent Successfully added to "%1" S'ha afegit correctament a %1 Already added to the playlist Ja s'ha afegit a la llista de reproducció. 1 song added S'ha afegit 1 cançó. %1 songs added S'han afegit %1 cançons. File is invalid or does not exist, load failed El fitxer no és vàlid o no existeix. La càrrega ha fallat! OK D'acord Import failed, no valid music file found Ha fallat la importació. No s'ha trobat cap fitxer de música vàlid! All music Tota la música MusicListDataDelegate No songs Sense cançons 1 song 1 cançó %1 songs %1 cançons MusicListDataWidget No songs Sense cançons 1 album - 1 song 1 àlbum - 1 cançó %1 album - %2 songs %1 àlbum - %2 cançons %1 albums - %2 songs %1 àlbums - %2 cançons 1 artist - 1 song 1 artista - 1 cançó %1 artist - %2 songs %1 artistes - %2 cançons %1 artists - %2 songs %1 artistes - %2 cançons 1 song 1 cançó %1 songs %1 cançons No search results No hi ha resultats de la cerca. All Music Tota la música Time added Temps afegit Album Disc Artist Artista Title Títol Play All Reprodueix-ho tot Artists Artistes Albums Àlbums Custom Personalitzat Search Results Resultats de la cerca Songs Cançons No result found No s'ha trobat cap resultat. MusicListDialog Play All Reprodueix-ho tot Shuffle Aleatòria MusicListInfoView Play queue Reprodueix la cua Add to new playlist Afegeix a una llista de reproducció nova Pause Pausa Play Reprodueix Add to playlist Afegeix a la llista de reproducció Display in file manager Mostra al gestor de fitxers Remove from playlist Elimina de la llista de reproducció Delete from local disk Elimina del disc local Song info Informació de la cançó Cancel Cancel·la Remove Elimina Are you sure you want to remove %1? Segur que voleu eliminar %1? Are you sure you want to remove the selected %1 songs? Segur que voleu eliminar les %1 cançons seleccionades? Delete Elimina Are you sure you want to delete %1? Segur que voleu eliminar %1? Are you sure you want to delete the selected %1 songs? Segur que voleu eliminar les %1 cançons seleccionades? The song files contained will also be deleted Els fitxers de cançons continguts també s'eliminaran. MusicListItem Are you sure you want to delete this playlist? Segur que voleu eliminar aquesta llista de reproducció? Cancel Cancel·la Delete Elimina MusicListScrollArea Library Biblioteca Playlists Llistes de reproducció MusicListView My Favorites Els favorits Are you sure you want to delete this playlist? Segur que voleu eliminar aquesta llista de reproducció? Cancel Cancel·la Delete Elimina Pause Pausa Play Reprodueix Rename Canvia'n el nom PlayListView Unknown artist Artista desconegut Unknown album Àlbum desconegut Play queue Reprodueix la cua musicResult My favorites Els favorits Add to new playlist Afegeix a una llista de reproducció nova Pause Pausa Play Reprodueix Add to playlist Afegeix a la llista de reproducció Display in file manager Mostra al gestor de fitxers Remove from playlist Elimina de la llista de reproducció Remove from play queue Delete from local disk Elimina del disc local Encoding Codificació Song info Informació de la cançó Cancel Cancel·la Remove Elimina Are you sure you want to remove %1? Segur que voleu eliminar %1? Are you sure you want to remove the selected %1 songs? Segur que voleu eliminar les %1 cançons seleccionades? Delete Elimina Are you sure you want to delete %1? Segur que voleu eliminar %1? Are you sure you want to delete the selected %1 songs? Segur que voleu eliminar les %1 cançons seleccionades? The song files contained will also be deleted Els fitxers de cançons continguts també s'eliminaran. PlayListWidget No songs Sense cançons No search results No hi ha resultats de la cerca. Play Queue Cua de reproducció Empty Buit 1 song 1 cançó %1 songs %1 cançons Playlist Unknown album Àlbum desconegut Unknown artist Artista desconegut PlaylistManager New playlist Llista de reproducció nova Albums Àlbums Artists Artistes All Music Tota la música My favorites Els favorits Search result Resultat de la cerca Play Reprodueix Music Música QApplication Music Música QObject Minimize to system tray Minimitza a la safata del sistema Exit Music Surt de la Música Autoplay Reprodueix automàticament Enable fade in/out Habilita l'esvaïment Remember playback position Recorda el punt de reproducció Close Main Window Tanca la finestra principal Basic Bàsic Play Reprodueix Shortcuts Dreceres Restore Defaults Restaura els valors per defecte Next Següent Play/Pause Reprodueix / Pausa Previous Anterior Volume down Volum avall Volume up Volum amunt SearchLyricsWidget Find Lyrics Troba'n la lletra Title Títol Artist Artista Search Cerca SearchResult Music Música Artists Artistes Albums Àlbums Shortcut Play Reprodueix Songs Cançons Playlists Llistes de reproducció Settings Configuració Play/Pause Reprodueix / Pausa Previous Anterior Next Següent Volume Up Volum amunt Volume Down Volum avall Mute Silencia Favorite Favorit Unfavorite Elimina dels favorits Song info Informació de la cançó New playlist Llista de reproducció nova Add music Afegiu música Rename playlist Reanomena la llista de reproducció Remove from playlist Elimina de la llista de reproducció Help Ajuda Display shortcuts Mostra les dreceres TitlebarWidget Search Cerca deepin-music-6.0.1.54/src/music-player/translations/deepin-music_cs.ts000664 000000 000000 00000161235 13703317554 025670 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Vyberte, prosím, Äinnost Exit UkonÄit Minimize to system tray ZmenÅ¡it do oznamovací oblasti panelu Do not ask again Znovu se neptat Cancel ZruÅ¡it Confirm OK OK DequalizerDialog Custom Vlastní Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Obnovit výchozí Footer Previous PÅ™edchozí Next Další Play/Pause PÅ™ehrát/Pozastavit Favorite Oblíbené Lyrics Text písnÄ› Play Queue Unknown Title Neznámý název Unknown artist Neznámý umÄ›lec Play Mode Režim pÅ™ehrávání Playlist Seznam skladeb List Loop SmyÄka seznamu Single Loop Jednoduchá smyÄka Shuffle Zamíchat ImportWidget Add folder PÅ™idat složku Open Folder Add Music Scan Prohledat %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 adresář s hudbou nebo táhnÄ›te a upusÅ¥te hudební soubor pro pÅ™idání hudby Loading music, please wait... Nahrává se hudba. PoÄkejte, prosím... InfoDialog Title: Název: Artist: UmÄ›lec: Album: Album: Type: Typ: Path: Cesta: Unknown artist Neznámý umÄ›lec Unknown album Neznámé album Size: Velikost: Basic info Duration: Doba trvání: LoadWidget Loading... Nahrává se... LyricWidget Find lyrics Najít text písnÄ› Title Název Artist UmÄ›lec Search Hledat Back ZpÄ›t MUsicLyricWidget No lyrics yet MainFrame New playlist Nový seznam skladeb Settings Nastavení Exit UkonÄit Add folder PÅ™idat složku Add file PÅ™idat soubor Dark theme Tmavý vzhled Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. Hudební pÅ™ehrávaÄ je jednoduchý a krásný pÅ™ehrávaÄ, který pÅ™ehrává místní hudební soubory. Podporuje zobrazení slov písní bÄ›hem pÅ™ehrávání, pÅ™ehrávání bezztrátových formátů hudby a pÅ™izpůsobení si seznamů skladeb a tak dále. Play/Pause PÅ™ehrát/Pozastavit Previous PÅ™edchozí Invalid or non-existent file Neplatný nebo nejsoucí soubor Failed to import, no vaild music file found! NepodaÅ™ilo se zavést. Nenalezen žádný platný hudební soubor! All music VÅ¡echna hudba OK OK Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" ÚspěšnÄ› pÅ™idáno do "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Další MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music VÅ¡echna hudba Time added ÄŒas pÅ™idání Album Artist UmÄ›lec Title Název Play All PÅ™ehrát vÅ¡e Artists Albums Custom Vlastní Search Results Songs No result found Nenalezen žádný výsledek MusicListDialog Play All PÅ™ehrát vÅ¡e Shuffle Zamíchat MusicListInfoView New playlist Nový seznam skladeb Play queue Add to new playlist Pause Play PÅ™ehrát Add to playlist PÅ™idat do seznamu skladeb Display in file manager Zobrazit ve správci souborů Remove from playlist Odstranit ze seznamu skladeb Delete from local disk Smazat z místního disku Song info Údaje o písni Cancel ZruÅ¡it Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Smazat Are you sure you want to delete %1? Opravdu je chcete smazat %1? Are you sure you want to delete the selected %1 songs? Opravdu chcete smazat vybraných %1 písní? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Opravdu chcete smazat tento seznam skladeb? Cancel ZruÅ¡it Delete Smazat MusicListScrollArea Library Playlists MusicListView New playlist Nový seznam skladeb Play PÅ™ehrát Add to playlist PÅ™idat do seznamu skladeb Display in file manager Zobrazit ve správci souborů Song info Údaje o písni Are you sure you want to delete %1? Opravdu je chcete smazat %1? Are you sure you want to delete the selected %1 songs? Opravdu chcete smazat vybraných %1 písní? Remove from playlist Odstranit ze seznamu skladeb Delete from local disk Smazat z místního disku Encoding Kódování My Favorites Are you sure you want to delete this playlist? Opravdu chcete smazat tento seznam skladeb? Cancel ZruÅ¡it Delete Smazat Pause Rename PÅ™ejmenovat Deleting the current song will also delete the song files contained Smazáním nynÄ›jší písnÄ› budou rovněž smazány obsažené písňové soubory Unknown artist Neznámý umÄ›lec Unknown album Neznámé album MusicListWidget No Music Žádná hudba No result found Nenalezen žádný výsledek Play All PÅ™ehrát vÅ¡e Time added ÄŒas pÅ™idání Title Název Artist UmÄ›lec Album name Název alba Custom Vlastní PlayListItem Are you sure you want to delete this playlist? Opravdu chcete smazat tento seznam skladeb? Delete Smazat Cancel ZruÅ¡it PlayListView New playlist Nový seznam skladeb Play queue musicResult My favorites Moje oblíbené Add to new playlist Pause Play PÅ™ehrát Add to playlist PÅ™idat do seznamu skladeb Display in file manager Zobrazit ve správci souborů Remove from playlist Odstranit ze seznamu skladeb Remove from play queue Delete from local disk Smazat z místního disku Encoding Kódování Song info Údaje o písni Cancel ZruÅ¡it Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Opravdu je chcete smazat %1? Are you sure you want to delete the selected %1 songs? Opravdu chcete smazat vybraných %1 písní? The song files contained will also be deleted Rename PÅ™ejmenovat Delete Smazat Unknown artist Neznámý umÄ›lec Unknown album Neznámé album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Neznámé album Unknown artist Neznámý umÄ›lec PlaylistManager New playlist Nový seznam skladeb Artist UmÄ›lec Albums Artists All Music VÅ¡echna hudba My favorites Moje oblíbené Search result Výsledek hledání Play PÅ™ehrát Music PlaylistWidget New playlist Nový seznam skladeb QApplication Deepin Music PÅ™ehrávání hudby Music QObject Deepin Music Deepin Hudba Minimize to system tray ZmenÅ¡it do oznamovací oblasti panelu Exit Deepin Music UkonÄit Exit Music Autoplay Automatické pÅ™ehrávání Enable fade in/out Povolit postupné zesílení/zeslabení Remember playback position Zapamatovat si polohu pÅ™ehrávání Close Main Window Zavřít hlavní okno Basic Základní Play PÅ™ehrát Shortcuts Klávesové zkratky Restore Defaults Obnovit výchozí Next Další Play/Pause PÅ™ehrát/Pozastavit Previous PÅ™edchozí Volume down TiÅ¡eji Volume up HlasitÄ›ji SearchLyricsWidget Find Lyrics Title Název Artist UmÄ›lec Search Hledat SearchResult Search "%1" in Deepin Music Hledat "%1" v Hudba Music Artists Albums Shortcut Play PÅ™ehrát Songs Playlists Settings Nastavení Play/Pause PÅ™ehrát/Pozastavit Previous PÅ™edchozí Next Další Volume Up Volume Down Mute Favorite Oblíbené Unfavorite Song info Údaje o písni New playlist Nový seznam skladeb Add music Rename playlist Remove from playlist Odstranit ze seznamu skladeb Help Display shortcuts TitlebarWidget Search Hledat deepin-music-6.0.1.54/src/music-player/translations/deepin-music_da.ts000664 000000 000000 00000141540 13703317554 025644 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Afslut Minimize to system tray Minimer til systembakke Do not ask again Spørg ikke igen Please select your operation Vælg venligst din handling Cancel Annuller Confirm Bekræft DequalizerDialog Custom Brugerdefineret Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Gendan standarder Footer Unknown Title Ukendt titel Unknown artist Ukendt kunstner Previous Forrige Next Næste Play/Pause Afspil/pause Favorite Favorit Lyrics Sangtekster Play Mode Afspilningstilstand Play Queue Afspilningskø List Loop Listeløkke Single Loop Enkel løkke Shuffle Bland ImportWidget Open Folder Ã…bn mappe Add Music Tilføj musik Scan Scan %1 music directory or drag music files here %1 musikmappe eller træk musikfiler hertil Loading music, please wait... Indlæser musik, vent venligst... InfoDialog Basic info Grundlæggende information Title: Titel: Artist: Kunstner: Album: Album: Type: Type: Size: Størrelse: Duration: Varighed: Path: Sti: Unknown artist Ukendt kunstner Unknown album Ukendt album LoadWidget Loading... Indlæser... LyricWidget Find lyrics Find sangtekster Title Titel Artist Kunstner Search Søg Back Tilbage MUsicLyricWidget No lyrics yet MainFrame Add playlist Tilføj afspilningsliste Add music Tilføj musik Equalizer Settings Indstillinger Dark theme Mørkt tema Exit Afslut Music is a local music player with beautiful design and simple functions. Musik er en lokal musikafspiller med smukt design og simple funktioner. Music Musik Play/Pause Afspil/pause Previous Forrige Next Næste Successfully added to "%1" Tilføjet til "%1" Already added to the playlist 1 song added 1 sang tilføjet %1 songs added %1 sange tilføjet File is invalid or does not exist, load failed Filen er ugyldig eller findes ikke - indlæsning mislykkedes OK OK Import failed, no valid music file found Import mislykkedes - der blev ikke fundet nogen gyldig musikfil All music Alt musik MusicListDataDelegate No songs Ingen sange 1 song 1 sang %1 songs %1 sange MusicListDataWidget No songs Ingen sange 1 album - 1 song 1 album - 1 sang %1 album - %2 songs %1 album - %2 sange %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song 1 sang %1 songs %1 sange No search results Ingen søgeresultater All Music Alt musik Time added Tilføjelsestidspunkt Album Album Artist Kunstner Title Titel Play All Afspil alle Artists Kunstnere Albums Custom Brugerdefineret Search Results Songs Sange No result found Ingen resultater fundet MusicListDialog Play All Afspil alle Shuffle Bland MusicListInfoView Play queue Afspilningskø Add to new playlist Tilføj til ny afspilningsliste Pause Pause Play Afspil Add to playlist Tilføj til afspilningsliste Display in file manager Vis i filhÃ¥ndtering Remove from playlist Fjern fra afspilningsliste Delete from local disk Slet fra lokal disk Song info Sanginfo Cancel Annuller Remove Fjern Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Slet Are you sure you want to delete %1? Er du sikker pÃ¥, at du vil slette %1? Are you sure you want to delete the selected %1 songs? Er du sikker pÃ¥, at du vil slette de %1 valgte sange? The song files contained will also be deleted De sangfiler som er i slettes ogsÃ¥ MusicListItem Are you sure you want to delete this playlist? Er du sikker pÃ¥, at du vil slette afspilningslisten? Cancel Annuller Delete Slet MusicListScrollArea Library Bibliotek Playlists Afspilningsliste MusicListView My Favorites Mine favoritter Are you sure you want to delete this playlist? Er du sikker pÃ¥, at du vil slette afspilningslisten? Cancel Annuller Delete Slet Pause Pause Play Afspil Rename Omdøb PlayListView Unknown artist Ukendt kunstner Unknown album Ukendt album Play queue Afspilningskø musicResult My favorites Mine favoritter Add to new playlist Tilføj til ny afspilningsliste Pause Pause Play Afspil Add to playlist Tilføj til afspilningsliste Display in file manager Vis i filhÃ¥ndtering Remove from playlist Fjern fra afspilningsliste Remove from play queue Delete from local disk Slet fra lokal disk Encoding Kodning Song info Sanginfo Cancel Annuller Remove Fjern Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Slet Are you sure you want to delete %1? Er du sikker pÃ¥, at du vil slette %1? Are you sure you want to delete the selected %1 songs? Er du sikker pÃ¥, at du vil slette de %1 valgte sange? The song files contained will also be deleted De sangfiler som er i slettes ogsÃ¥De sangfiler som er i slettes ogsÃ¥ PlayListWidget No songs Ingen sange No search results Ingen søgeresultater Play Queue Afspilningskø Empty Tomt 1 song 1 sang %1 songs %1 sange Playlist Unknown album Ukendt album Unknown artist Ukendt kunstner PlaylistManager New playlist Ny afspilningsliste Albums Artists Kunstnere All Music Alt musik My favorites Mine favoritter Search result Søgresultat Play Afspil Music Musik QApplication Music Musik QObject Minimize to system tray Minimer til systembakke Exit Music Afslut Musik Autoplay Automatisk afspilning Enable fade in/out Aktivér fade ind/ud Remember playback position Husk afspilningsposition Close Main Window Luk hovedvindue Basic Grundlæggende Play Afspil Shortcuts Genveje Restore Defaults Gendan standarder Next Næste Play/Pause Afspil/pause Previous Forrige Volume down Lavere Volume up Højere SearchLyricsWidget Find Lyrics Title Titel Artist Kunstner Search Søg SearchResult Music Musik Artists Kunstnere Albums Shortcut Play Afspil Songs Sange Playlists Afspilningsliste Settings Indstillinger Play/Pause Afspil/pause Previous Forrige Next Næste Volume Up Højere Volume Down Lavere Mute Lydløs Favorite Favorit Unfavorite Fjern fra favorit Song info Sanginfo New playlist Ny afspilningsliste Add music Tilføj musik Rename playlist Omdøb afspilningsliste Remove from playlist Fjern fra afspilningsliste Help Hjælp Display shortcuts Vis genveje TitlebarWidget Search Søg deepin-music-6.0.1.54/src/music-player/translations/deepin-music_de.ts000664 000000 000000 00000143124 13703317554 025650 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Beenden Minimize to system tray In die Statusleiste minimieren Do not ask again Nicht erneut nachfragen Please select your operation Bitte wählen Sie eine Aktion aus Cancel Abbrechen Confirm Bestätigen DequalizerDialog Custom Angepasst Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Standardeinstellungen wiederherstellen Footer Unknown Title Unbekannter Titel Unknown artist Unbekannter Künstler Previous Zurück Next Weiter Play/Pause Abspielen/Pausieren Favorite Favorit Lyrics Liedtexte Play Mode Wiedergabemodus Play Queue Wiedergabeliste abspielen List Loop Liste wiederholen Single Loop Einzelne Schleife Shuffle Zufallswiedergabe ImportWidget Open Folder Ordner öffnen Add Music Musik hinzufügen Scan Musik erkennen %1 music directory or drag music files here %1 Musikverzeichnis oder Musikdateien hierher ziehen Loading music, please wait... Musik wird geladen, bitte warten... InfoDialog Basic info Basisinformationen Title: Titel: Artist: Künstler: Album: Album: Type: Typ: Size: Größe: Duration: Dauer: Path: Pfad: Unknown artist Unbekannter Künstler Unknown album Unbekanntes Album LoadWidget Loading... Ladevorgang... LyricWidget Find lyrics Liedtexte suchen Title Titel Artist Künstler Search Suchen Back Zurück MUsicLyricWidget No lyrics yet MainFrame Add playlist Wiedergabeliste hinzufügen Add music Musik hinzufügen Equalizer Settings Einstellungen Dark theme Dunkles Thema Exit Beenden Music is a local music player with beautiful design and simple functions. Musik ist ein lokaler Musikplayer mit schönem Design und einfachen Funktionen. Music Musik Play/Pause Wiedergeben/Pausieren Previous Vorherige Next Next Successfully added to "%1" Erfolgreich zu "%1" hinzugefügt Already added to the playlist Bereits zur Wiedergabeliste hinzugefügt 1 song added 1 Lied hinzugefügt %1 songs added %1 Lieder hinzugefügt File is invalid or does not exist, load failed Datei ist ungültig oder existiert nicht, Laden fehlgeschlagen OK OK Import failed, no valid music file found Import fehlgeschlagen, keine gültige Musikdatei gefunden All music Gesamte Musik MusicListDataDelegate No songs Keine Lieder 1 song 1 Lied %1 songs %1 Lieder MusicListDataWidget No songs Keine Lieder 1 album - 1 song 1 Album - 1 Lied %1 album - %2 songs %1 Album - %2 Lieder %1 albums - %2 songs %1 Alben - %2 Lieder 1 artist - 1 song 1 Künstler-1 Lied %1 artist - %2 songs %1 Künstler - %2 Lieder %1 artists - %2 songs %1 Künstler - %2 Lieder 1 song 1 Lied %1 songs %1 Lieder No search results Keine Suchergebnisse All Music Gesamte Musik Time added Zeit hinzugefügt Album Album Artist Künstler Title Titel Play All Alle Abspielen Artists Künstler Albums Alben Custom Angepasst Search Results Suchergebnisse Songs Lieder No result found Kein Ergebnis gefunden MusicListDialog Play All Alle Abspielen Shuffle Zufallswiedergabe MusicListInfoView Play queue Wiedergabeliste abspielen Add to new playlist Zu neuer Wiedergabeliste hinzufügen Pause Pausieren Play Wiedergeben Add to playlist Zur Wiedergabeliste hinzufügen Display in file manager In Dateiverwaltung anzeigen Remove from playlist Aus Wiedergabeliste entfernen Delete from local disk Von lokalem Datenträger löschen Song info Songinfo Cancel Abbrechen Remove Entfernen Are you sure you want to remove %1? Sind Sie sicher, dass Sie %1 entfernen möchten? Are you sure you want to remove the selected %1 songs? Sind Sie sicher, dass Sie die ausgewählten %1 Lieder entfernen möchten? Delete Löschen Are you sure you want to delete %1? Sind Sie sicher, dass Sie %1 löschen möchten? Are you sure you want to delete the selected %1 songs? Sind Sie sicher, dass Sie die ausgewählten %1 Lieder löschen möchten? The song files contained will also be deleted Die enthaltenen Lieder werden ebenfalls gelöscht MusicListItem Are you sure you want to delete this playlist? Sind Sie sicher, dass Sie diese Wiedergabeliste löschen möchten? Cancel Abbrechen Delete Löschen MusicListScrollArea Library Bibliothek Playlists Wiedergabelisten MusicListView My Favorites Meine Favoriten Are you sure you want to delete this playlist? Sind Sie sicher, dass Sie diese Wiedergabeliste löschen möchten? Cancel Abbrechen Delete Löschen Pause Pausieren Play Wiedergeben Rename Umbenennen PlayListView Unknown artist Unbekannter Künstler Unknown album Unbekanntes Album Play queue Wiedergabeliste abspielen musicResult My favorites Meine Favoriten Add to new playlist Zu neuer Wiedergabeliste hinzufügen Pause Pausieren Play Wiedergeben Add to playlist Zur Wiedergabeliste hinzufügen Display in file manager In Dateiverwaltung anzeigen Remove from playlist Aus Wiedergabeliste entfernen Remove from play queue Delete from local disk Von lokalem Datenträger löschen Encoding Kodierung Song info Songinfo Cancel Abbrechen Remove Entfernen Are you sure you want to remove %1? Sind Sie sicher, dass Sie %1 entfernen möchten? Are you sure you want to remove the selected %1 songs? Sind Sie sicher, dass Sie die ausgewählten %1 Lieder entfernen möchten? Delete Löschen Are you sure you want to delete %1? Sind Sie sicher, dass Sie %1 löschen möchten? Are you sure you want to delete the selected %1 songs? Sind Sie sicher, dass Sie die ausgewählten %1 Lieder löschen möchten? The song files contained will also be deleted Die enthaltenen Lieder werden ebenfalls gelöscht PlayListWidget No songs Keine Lieder No search results Keine Suchergebnisse Play Queue Wiedergabeliste abspielen Empty Leeren 1 song 1 Lied %1 songs %1 Lieder Playlist Unknown album Unbekanntes Album Unknown artist Unbekannter Künstler PlaylistManager New playlist Neue Wiedergabeliste Albums Alben Artists Künstler All Music Gesamte Musik My favorites Meine Favoriten Search result Suchergebnis Play Wiedergeben Music Musik QApplication Music Musik QObject Minimize to system tray In die Statusleiste minimieren Exit Music Musik beenden Autoplay Automatische Wiedergabe Enable fade in/out Ein-/Ausblenden aktivieren Remember playback position Wiedergabeposition merken Close Main Window Hauptfenster schließen Basic Basis Play Wiedergeben Shortcuts Tastenkürzel Restore Defaults Standardeinstellungen wiederherstellen Next Nächste Play/Pause Wiedergeben/Pausieren Previous Vorherige Volume down Lautstärke verringern Volume up Lautstärke erhöhen SearchLyricsWidget Find Lyrics Liedtexte suchen Title Titel Artist Künstler Search Suchen SearchResult Music Musik Artists Künstler Albums Alben Shortcut Play Wiedergeben Songs Lieder Playlists Wiedergabelisten Settings Einstellungen Play/Pause Abspielen/Pausieren Previous Zurück Next Weiter Volume Up Lautstärke erhöhen Volume Down Lautstärke verringern Mute Stummschalten Favorite Favorit Unfavorite Entfavorisieren Song info Songinfo New playlist Neue Wiedergabeliste Add music Musik hinzufügen Rename playlist Wiedergabeliste umbenennen Remove from playlist Aus Wiedergabeliste entfernen Help Hilfe Display shortcuts Tastenkürzel anzeigen TitlebarWidget Search Suchen deepin-music-6.0.1.54/src/music-player/translations/deepin-music_el.ts000664 000000 000000 00000163061 13703317554 025662 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation ΠαÏακαλώ επιλέξτε την ενέÏγειά σας Exit Έξοδος Minimize to system tray Ελαχιστοποίηση στη γÏαμμή εÏγασιών Do not ask again Μην εÏωτήσεις ξανά Cancel ΑκÏÏωση Confirm OK OK DequalizerDialog Custom ΠÏοσαÏμογή Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Ανάκτηση ΠÏοεπιλογών Footer Previous ΠÏοηγοÏμενο Next Επόμενο Play/Pause ΑναπαÏαγωγή/ΠαÏση Favorite Αγαπημένα Lyrics Στίχοι Play Queue Unknown Title Άγνωστος Τίτλος Unknown artist Άγνωστος καλλιτέχνης Play Mode ΛειτουÏγία αναπαÏαγωγής Playlist Λίστα αναπαÏαγωγής List Loop Single Loop Shuffle ImportWidget Add folder ΠÏοσθήκη φακέλου Open Folder Add Music Scan ΣάÏωση %1 music directory or drag music files here Loading music, please wait... ΦόÏτωση μουσικής, παÏακαλώ πεÏιμένετε... InfoDialog Title: Τίτλος: Artist: Καλλιτέχνης: Album: Άλμπουμ: Type: ΤÏπος: Path: ΔιαδÏομή: Unknown artist Άγνωστος καλλιτέχνης Unknown album Άγνωστο άλμπουμ Size: Μέγεθος: Basic info Duration: ΔιάÏκεια: LoadWidget Loading... ΦόÏτωση... LyricWidget Find lyrics Αναζήτηση στίχων Title Τίτλος Artist Καλλιτέχνης Search Αναζήτηση Back Πίσω MUsicLyricWidget No lyrics yet MainFrame New playlist Îέα λίστα αναπαÏαγωγής Settings Ρυθμίσεις Exit Έξοδος Add folder ΠÏοσθήκη φακέλου Add file ΠÏοσθήκη αÏχείου Dark theme ΣκοÏÏο θέμα Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. Η Μουσική Deepin είναι ένα όμοÏφο και εÏκολο Ï€ÏόγÏαμμα αναπαÏαγωγής μουσικής όπου παίζει τοπικά αÏχεία ήχου. ΥποστηÏίζει Ï€Ïοβολή στίχων κατά τη διάÏκεια αναπαÏαγωγής, χωÏίς απώλειες ήχου και Ï€ÏοσαÏμοσμένη λίστα αναπαÏαγωγής κτλ. Play/Pause ΑναπαÏαγωγή/ΠαÏση Previous ΠÏοηγοÏμενο Invalid or non-existent file ΆκυÏο ή μη-υπάÏχων αÏχείο Failed to import, no vaild music file found! Αποτυχία εισαγωγής, δεν βÏέθηκε έγκυÏο αÏχείο μουσικής! All music Όλη η μουσική OK OK Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" ΠÏοστέθηκε με επιτυχία στο "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Επόμενο MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Όλη η μουσική Time added Album Artist Καλλιτέχνης Title Τίτλος Play All ΑναπαÏαγωγή Όλων Artists Albums Custom ΠÏοσαÏμογή Search Results Songs No result found MusicListDialog Play All ΑναπαÏαγωγή Όλων Shuffle MusicListInfoView New playlist Îέα λίστα αναπαÏαγωγής Play queue Add to new playlist Pause Play ΑναπαÏαγωγή Add to playlist ΠÏοσθήκη σε λίστα αναπαÏαγωγής Display in file manager ΠÏοβολή στη διαχείÏιση αÏχείων Remove from playlist ΑφαίÏεση από τη λίστα αναπαÏαγωγής Delete from local disk ΔιαγÏαφή από τον τοπικό δίσκο Song info ΠληÏοφοÏίες Ï„ÏÎ±Î³Î¿Ï…Î´Î¹Î¿Ï Cancel ΑκÏÏωση Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete ΔιαγÏαφή Are you sure you want to delete %1? Είστε βέβαιος ότι θέλετε να διαγÏάψετε %1; Are you sure you want to delete the selected %1 songs? Είστε βέβαιοι ότι θέλετε να διαγÏάψετε αυτό το %1 Ï„Ïαγουδιών; The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel ΑκÏÏωση Delete ΔιαγÏαφή MusicListScrollArea Library Playlists MusicListView New playlist Îέα λίστα αναπαÏαγωγής Play ΑναπαÏαγωγή Add to playlist ΠÏοσθήκη σε λίστα αναπαÏαγωγής Display in file manager ΠÏοβολή στη διαχείÏιση αÏχείων Song info ΠληÏοφοÏίες Ï„ÏÎ±Î³Î¿Ï…Î´Î¹Î¿Ï Are you sure you want to delete %1? Είστε βέβαιος ότι θέλετε να διαγÏάψετε %1; Are you sure you want to delete the selected %1 songs? Είστε βέβαιοι ότι θέλετε να διαγÏάψετε αυτό το %1 Ï„Ïαγουδιών; Remove from playlist ΑφαίÏεση από τη λίστα αναπαÏαγωγής Delete from local disk ΔιαγÏαφή από τον τοπικό δίσκο Encoding Κωδικοποίηση My Favorites Are you sure you want to delete this playlist? Cancel ΑκÏÏωση Delete ΔιαγÏαφή Pause Rename Μετονομασία Unknown artist Άγνωστος καλλιτέχνης Unknown album Άγνωστο άλμπουμ MusicListWidget Play All ΑναπαÏαγωγή Όλων Title Τίτλος Artist Καλλιτέχνης Custom ΠÏοσαÏμογή PlayListItem Delete ΔιαγÏαφή Cancel ΑκÏÏωση PlayListView New playlist Îέα λίστα αναπαÏαγωγής Play queue musicResult My favorites Add to new playlist Pause Play ΑναπαÏαγωγή Add to playlist ΠÏοσθήκη σε λίστα αναπαÏαγωγής Display in file manager ΠÏοβολή στη διαχείÏιση αÏχείων Remove from playlist ΑφαίÏεση από τη λίστα αναπαÏαγωγής Remove from play queue Delete from local disk ΔιαγÏαφή από τον τοπικό δίσκο Encoding Κωδικοποίηση Song info ΠληÏοφοÏίες Ï„ÏÎ±Î³Î¿Ï…Î´Î¹Î¿Ï Cancel ΑκÏÏωση Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Είστε βέβαιος ότι θέλετε να διαγÏάψετε %1; Are you sure you want to delete the selected %1 songs? Είστε βέβαιοι ότι θέλετε να διαγÏάψετε αυτό το %1 Ï„Ïαγουδιών; The song files contained will also be deleted Rename Μετονομασία Delete ΔιαγÏαφή Unknown artist Άγνωστος καλλιτέχνης Unknown album Άγνωστο άλμπουμ PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Άγνωστο άλμπουμ Unknown artist Άγνωστος καλλιτέχνης PlaylistManager New playlist Îέα λίστα αναπαÏαγωγής Artist Καλλιτέχνης Albums Artists All Music Όλη η μουσική My favorites Search result Play ΑναπαÏαγωγή Music PlaylistWidget New playlist Îέα λίστα αναπαÏαγωγής QApplication Deepin Music Deepin Mουσική Music QObject Deepin Music Deepin Mουσική Minimize to system tray Ελαχιστοποίηση στη γÏαμμή εÏγασιών Exit Deepin Music Έξοδος Μουσικής Deepin Exit Music Autoplay Αυτόματη αναπαÏαγωγή Enable fade in/out Remember playback position Close Main Window Basic Βασικές Play ΑναπαÏαγωγή Shortcuts ΣυντομεÏσεις Restore Defaults Ανάκτηση ΠÏοεπιλογών Next Επόμενο Play/Pause ΑναπαÏαγωγή/ΠαÏση Previous ΠÏοηγοÏμενο Volume down Μείωση έντασης Volume up ΑÏξηση έντασης SearchLyricsWidget Find Lyrics Title Τίτλος Artist Καλλιτέχνης Search Αναζήτηση SearchResult Music Artists Albums Shortcut Play ΑναπαÏαγωγή Songs Playlists Settings Ρυθμίσεις Play/Pause ΑναπαÏαγωγή/ΠαÏση Previous ΠÏοηγοÏμενο Next Επόμενο Volume Up Volume Down Mute Favorite Αγαπημένα Unfavorite Song info ΠληÏοφοÏίες Ï„ÏÎ±Î³Î¿Ï…Î´Î¹Î¿Ï New playlist Îέα λίστα αναπαÏαγωγής Add music Rename playlist Remove from playlist ΑφαίÏεση από τη λίστα αναπαÏαγωγής Help Display shortcuts TitlebarWidget Search Αναζήτηση deepin-music-6.0.1.54/src/music-player/translations/deepin-music_en_AU.ts000664 000000 000000 00000143662 13703317554 026256 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Exit Minimize to system tray Do not ask again Cancel Cancel Confirm OK OK DequalizerDialog Custom Custom Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous Previous Next Next Play/Pause Play/Pause Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Artist: Album: Type: Type: Path: Unknown artist Unknown album Size: Size: Basic info Duration: LoadWidget Loading... Loading... LyricWidget Find lyrics Title Artist Search Search Back MUsicLyricWidget No lyrics yet MainFrame Settings Settings Exit Exit Dark theme Equalizer Play/Pause Play/Pause Previous Previous All music OK OK Add playlist Add music Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Next MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom Custom Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Delete Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Cancel Delete Delete MusicListScrollArea Library Playlists MusicListView Play Are you sure you want to delete this playlist? My Favorites Cancel Cancel Delete Delete Pause Rename MusicListWidget Custom Custom PlayListItem Delete Delete Cancel Cancel PlayListView Play queue My favorites Add to new playlist Pause Play musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Delete Delete Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Music QApplication Deepin Music Deepin Music Music QObject Deepin Music Deepin Music Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Shortcuts Restore Defaults Next Next Play/Pause Play/Pause Previous Previous Volume down Volume down Volume up Volume up SearchLyricsWidget Find Lyrics Title Artist Search Search SearchResult Music Artists Albums Shortcut Play Songs Playlists Settings Settings Play/Pause Play/Pause Previous Previous Next Next Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search Search deepin-music-6.0.1.54/src/music-player/translations/deepin-music_en_US.ts000664 000000 000000 00000141044 13703317554 026270 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Exit Minimize to system tray Minimize to system tray Do not ask again Do not ask again Please select your operation Please select your operation Cancel Cancel Confirm Confirm DequalizerDialog Custom Custom Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Restore Defaults Footer Unknown Title Unknown Title Unknown artist Unknown artist Previous Previous Next Next Play/Pause Play/Pause Favorite Favorite Lyrics Lyrics Play Mode Play Mode Play Queue Play Queue List Loop List Loop Single Loop Single Loop Shuffle Shuffle ImportWidget Open Folder Open Folder Add Music Add Music Scan Scan %1 music directory or drag music files here %1 music directory or drag music files here Loading music, please wait... Loading music, please wait... InfoDialog Basic info Basic info Title: Title: Artist: Artist: Album: Album: Type: Type: Size: Size: Duration: Duration: Path: Path: Unknown artist Unknown artist Unknown album Unknown album LoadWidget Loading... Loading... LyricWidget Find lyrics Find lyrics Title Title Artist Artist Search Search Back Back MUsicLyricWidget No lyrics yet MainFrame Add playlist Add playlist Add music Add music Equalizer Settings Settings Dark theme Dark theme Exit Exit Music is a local music player with beautiful design and simple functions. Music is a local music player with beautiful design and simple functions. Music Music Play/Pause Play/Pause Previous Previous Next Next Successfully added to "%1" Successfully added to "%1" Already added to the playlist Already added to the playlist 1 song added 1 song added %1 songs added %1 songs added File is invalid or does not exist, load failed File is invalid or does not exist, load failed OK OK Import failed, no valid music file found Import failed, no valid music file found All music All music MusicListDataDelegate No songs No songs 1 song 1 song %1 songs %1 songs MusicListDataWidget No songs No songs 1 album - 1 song 1 album - 1 song %1 album - %2 songs %1 album - %2 songs %1 albums - %2 songs %1 albums - %2 songs 1 artist - 1 song 1 artist - 1 song %1 artist - %2 songs %1 artist - %2 songs %1 artists - %2 songs %1 artists - %2 songs 1 song 1 song %1 songs %1 songs No search results No search results All Music All Music Time added Time added Album Album Artist Artist Title Title Play All Play All Artists Artists Albums Albums Custom Custom Search Results Search Results Songs Songs No result found No result found MusicListDialog Play All Play All Shuffle Shuffle MusicListInfoView Play queue Play queue Add to new playlist Add to new playlist Pause Pause Play Play Add to playlist Add to playlist Display in file manager Display in file manager Remove from playlist Remove from playlist Delete from local disk Delete from local disk Song info Song info Cancel Cancel Remove Remove Are you sure you want to remove %1? Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to remove the selected %1 songs? Delete Delete Are you sure you want to delete %1? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Are you sure you want to delete this playlist? Cancel Cancel Delete Delete MusicListScrollArea Library Library Playlists Playlists MusicListView My Favorites My Favorites Are you sure you want to delete this playlist? Are you sure you want to delete this playlist? Cancel Cancel Delete Delete Pause Pause Play Play Rename Rename PlayListView Unknown artist Unknown artist Unknown album Unknown album Play queue Play queue musicResult My favorites My favorites Add to new playlist Add to new playlist Pause Pause Play Play Add to playlist Add to playlist Display in file manager Display in file manager Remove from playlist Remove from playlist Remove from play queue Delete from local disk Delete from local disk Encoding Encoding Song info Song info Cancel Cancel Remove Remove Are you sure you want to remove %1? Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to remove the selected %1 songs? Delete Delete Are you sure you want to delete %1? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted The song files contained will also be deleted PlayListWidget No songs No songs No search results No search results Play Queue Play Queue Empty Empty 1 song 1 song %1 songs %1 songs Playlist Unknown album Unknown album Unknown artist Unknown artist PlaylistManager New playlist New playlist Albums Albums Artists Artists All Music All Music My favorites My favorites Search result Search result Play Play Music Music QApplication Music Music QObject Minimize to system tray Minimize to system tray Exit Music Exit Music Autoplay Autoplay Enable fade in/out Enable fade in/out Remember playback position Remember playback position Close Main Window Close Main Window Basic Basic Play Play Shortcuts Shortcuts Restore Defaults Restore Defaults Next Next Play/Pause Play/Pause Previous Previous Volume down Volume down Volume up Volume up SearchLyricsWidget Find Lyrics Find Lyrics Title Title Artist Artist Search Search SearchResult Music Music Artists Artists Albums Albums Shortcut Play Play Songs Songs Playlists Playlists Settings Settings Play/Pause Play/Pause Previous Previous Next Next Volume Up Volume Up Volume Down Volume Down Mute Mute Favorite Favorite Unfavorite Unfavorite Song info Song info New playlist New playlist Add music Add music Rename playlist Rename playlist Remove from playlist Remove from playlist Help Help Display shortcuts Display shortcuts TitlebarWidget Search Search deepin-music-6.0.1.54/src/music-player/translations/deepin-music_eo.ts000664 000000 000000 00000144703 13703317554 025667 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Eliri Minimize to system tray Do not ask again Cancel Nuligi Confirm OK OK DequalizerDialog Custom Personigo Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous AntaÅ­a Next Sekva Play/Pause Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode Playlist Ludilisto List Loop Single Loop Shuffle ImportWidget Add folder Aldoni dosierujon Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Artist: Album: Type: Tipo: Path: Unknown artist Unknown album Size: Dimensio: Basic info Duration: LoadWidget Loading... Åœargante... LyricWidget Find lyrics Title Artist Search Serĉi Back MUsicLyricWidget No lyrics yet MainFrame Settings Agordoj Exit Eliri Add folder Aldoni dosierujon Add file Aldoni dosieron Dark theme Play/Pause Previous AntaÅ­a All music OK OK Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Sekva MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom Personigo Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Ludi Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel Nuligi Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Forigi Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Nuligi Delete Forigi MusicListScrollArea Library Playlists MusicListView Play Ludi Are you sure you want to delete this playlist? My Favorites Cancel Nuligi Delete Forigi Pause Rename MusicListWidget Custom Personigo PlayListItem Delete Forigi Cancel Nuligi PlayListView Play queue My favorites Add to new playlist Pause Play Ludi musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel Nuligi Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Delete Forigi Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Ludi Music QApplication Deepin Music Deepin Muziko Music QObject Deepin Music Deepin Muziko Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Ludi Shortcuts Fulmoklavoj Restore Defaults Next Sekva Play/Pause Previous AntaÅ­a Volume down Volume up SearchLyricsWidget Find Lyrics Title Artist Search Serĉi SearchResult Music Artists Albums Shortcut Play Ludi Songs Playlists Settings Agordoj Play/Pause Previous AntaÅ­a Next Sekva Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search Serĉi deepin-music-6.0.1.54/src/music-player/translations/deepin-music_es.ts000664 000000 000000 00000143165 13703317554 025674 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Salir Minimize to system tray Minimizar a bandeja de sistema Do not ask again No preguntar de nuevo Please select your operation Por favor, seleccione su operación Cancel Cancelar Confirm Confirmar DequalizerDialog Custom Personailzar Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Restaurar los valores predeterminados Footer Unknown Title Título desconocido Unknown artist Artista desconocido Previous Anterior Next Siguiente Play/Pause Reproducir/Pausar Favorite Favorito Lyrics Letras Play Mode Modo reproducción Play Queue Cola de reproducción List Loop Lista en bucle Single Loop Un solo bucle Shuffle Aleatorio ImportWidget Open Folder Abrir carpeta Add Music Añadir música Scan Escanear %1 music directory or drag music files here %1 carpeta de música o arrastre archivos de música aquí Loading music, please wait... Cargando música, por favor espere... InfoDialog Basic info Información básica Title: Título: Artist: Artista: Album: Ãlbum: Type: Tipo: Size: Tamaño: Duration: Duración: Path: Ruta de acceso: Unknown artist Artista desconocido Unknown album Ãlbum desconocido LoadWidget Loading... Cargando... LyricWidget Find lyrics Buscar letras Title Título Artist Artista Search Buscar Back Atrás MUsicLyricWidget No lyrics yet MainFrame Add playlist Añadir lista de reproducción Add music Añadir música Equalizer Settings Ajustes Dark theme Tema oscuro Exit Salir Music is a local music player with beautiful design and simple functions. Música es un reproductor de música local con diseño hermoso y funciones simples. Music Música Play/Pause Reproducir/Pausar Previous Anterior Next Siguiente Successfully added to "%1" Se añadió correctamente a "%1" Already added to the playlist Ya se ha añadido a la lista de reproducción 1 song added 1 canción añadida %1 songs added %1 canciones añadidas File is invalid or does not exist, load failed El archivo es inválido o no existe, la carga falló OK Aceptar Import failed, no valid music file found La importación falló, no se encontró ningún archivo de música válido All music Toda la música MusicListDataDelegate No songs No hay canciones 1 song 1 canción %1 songs %1 canciones MusicListDataWidget No songs No hay canciones 1 album - 1 song 1 álbum - 1 canción %1 album - %2 songs %1 álbum - %2 canciones %1 albums - %2 songs %1 álbumes - %2 canciones 1 artist - 1 song 1 artista - 1 canción %1 artist - %2 songs %1 artista - %2 canciones %1 artists - %2 songs %1 artistas - %2 canciones 1 song 1 canción %1 songs %1 canciones No search results Sin resultados All Music Toda la música Time added Fecha de adición Album Ãlbum Artist Artista Title Título Play All Reproducir todo Artists Artistas Albums Ãlbumes Custom Personailzar Search Results Buscar resultado Songs Canciones No result found No se ha encontrado resultado MusicListDialog Play All Reproducir todo Shuffle Aleatorio MusicListInfoView Play queue Cola de reproducción Add to new playlist Añadir a nueva lista de reproducción Pause Pausar Play Reproducir Add to playlist Añadir a la lista de reproducción Display in file manager Mostrar en administrador de archivos Remove from playlist Quitar de la lista de reproducción Delete from local disk Borrar del disco local Song info Información de canción Cancel Cancelar Remove Quitar Are you sure you want to remove %1? ¿Está seguro que quiere quitar %1? Are you sure you want to remove the selected %1 songs? ¿Está seguro de que quiere quitar las %1 canciones seleccionadas? Delete Borrar Are you sure you want to delete %1? ¿Está seguro que quiere borrarlo %1? Are you sure you want to delete the selected %1 songs? ¿Está seguro de borrar las %1 canciones seleccionadas? The song files contained will also be deleted Los archivos de canciones contenidas también serán borrados MusicListItem Are you sure you want to delete this playlist? ¿Esta seguro de borrar esta lista de reproducción? Cancel Cancelar Delete Borrar MusicListScrollArea Library Libreria Playlists Listas de reproducción MusicListView My Favorites Mis favoritos Are you sure you want to delete this playlist? ¿Esta seguro de borrar esta lista de reproducción? Cancel Cancelar Delete Borrar Pause Pausar Play Reproducir Rename Renombrar PlayListView Unknown artist Artista desconocido Unknown album Ãlbum desconocido Play queue Cola de reproducción musicResult My favorites Mis favoritos Add to new playlist Añadir a nueva lista de reproducción Pause Pausar Play Reproducir Add to playlist Añadir a la lista de reproducción Display in file manager Mostrar en administrador de archivos Remove from playlist Quitar de la lista de reproducción Remove from play queue Delete from local disk Borrar del disco local Encoding Codificación Song info Información de canción Cancel Cancelar Remove Quitar Are you sure you want to remove %1? ¿Está seguro que quiere quitar %1? Are you sure you want to remove the selected %1 songs? ¿Está seguro de que quiere quitar las %1 canciones seleccionadas? Delete Borrar Are you sure you want to delete %1? ¿Está seguro que quiere borrarlo %1? Are you sure you want to delete the selected %1 songs? ¿Está seguro de borrar las %1 canciones seleccionadas? The song files contained will also be deleted Los archivos de canciones contenidos también serán borrados PlayListWidget No songs No hay canciones No search results Sin resultados Play Queue Cola de reproducción Empty Vaciar 1 song 1 canción %1 songs %1 canciones Playlist Unknown album Ãlbum desconocido Unknown artist Artista desconocido PlaylistManager New playlist Nueva lista de reproducción Albums Ãlbumes Artists Artistas All Music Toda la música My favorites Mis favoritos Search result Buscar resultado Play Reproducir Music Música QApplication Music Música QObject Minimize to system tray Minimizar a bandeja de sistema Exit Music Salir de Música Autoplay Reproducción automática Enable fade in/out Habilitar desvanecimiento Remember playback position Recuerde la posición de reproducción Close Main Window Cerrar ventana principal Basic Básico Play Reproducir Shortcuts Atajos de teclado Restore Defaults Restaurar los valores predeterminados Next Siguiente Play/Pause Reproducir/Pausar Previous Anterior Volume down Bajar volumen Volume up Subir volumen SearchLyricsWidget Find Lyrics Buscar letras Title Título Artist Artista Search Buscar SearchResult Music Música Artists Artistas Albums Ãlbumes Shortcut Play Reproducir Songs Canciones Playlists Listas de reproducción Settings Ajustes Play/Pause Reproducir/Pausar Previous Anterior Next Siguiente Volume Up Subir volumen Volume Down Bajar volumen Mute Silenciar Favorite Favorito Unfavorite Quitar favorito Song info Información de canción New playlist Nueva lista de reproducción Add music Añadir música Rename playlist Renombrar lista de reproducción Remove from playlist Quitar de la lista de reproducción Help Ayuda Display shortcuts Atajos de pantalla TitlebarWidget Search Buscar deepin-music-6.0.1.54/src/music-player/translations/deepin-music_fa.ts000664 000000 000000 00000163121 13703317554 025645 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Ù…ÛŒ خواهید Ú†Ù‡ کاری انجام دهید؟ Exit خروج Minimize to system tray Ú©ÙˆÚ†Ú© نمایی Do not ask again دوباره نپرس Cancel انصرا٠Confirm OK تایید DequalizerDialog Custom شخصی Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults بازگرداندن پیش ÙØ±Ø¶ ها Footer Previous قبلی Next بعدی Play/Pause پخش/Ù…Ú©Ø« Favorite مورد علاقه Lyrics متن Play Queue Unknown Title عنوان نام مشخص Unknown artist هنرمند ناشناخته Play Mode حالت پخش Playlist لیست پخش List Loop تکرار لیست Single Loop تکرار یک مورد Shuffle تصادÙÛŒ ImportWidget Add folder پوشه جدید Open Folder Add Music Scan بررسی %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 پوشه آهنگ Ùˆ یا با Ø§Ø³ØªÙØ§Ø¯Ù‡ از درگ Ùˆ دراپ ÙØ§ÛŒÙ„ موسیقی را اضاÙÙ‡ نمایید Loading music, please wait... بارگذاری موسیقی ØŒ Ù„Ø·ÙØ§ صبر کنید ... InfoDialog Title: عنوان: Artist: هنرمند: Album: آلبوم: Type: نوع: Path: آدرس: Unknown artist هنرمند ناشناخته Unknown album آلبوم نامشخص Size: حجم: Basic info Duration: مدت: LoadWidget Loading... در حال اجرا... LyricWidget Find lyrics ÛŒØ§ÙØªÙ† متن شعر Title عنوان Artist هنرمند Search جستجو Back بازگشت MUsicLyricWidget No lyrics yet MainFrame New playlist لیست پخش جدید Settings تنظیمات Exit خروج Add folder پوشه جدید Add file اضاÙÙ‡ کردن ÙØ§ÛŒÙ„ Dark theme تم مشکی Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. دیپین موزیک یک موزیک پلیر زیبا Ùˆ ساده است Ú©Ù‡ موسیقی های محلی شما را اجرا Ù…ÛŒ کند این برنامه Ù…ÛŒ تواند در هنگام گوش دادن به موسیقی متن شعر را برای شما نمایش دهد Play/Pause پخش/Ù…Ú©Ø« Previous پیشین Invalid or non-existent file ÙØ§ÛŒÙ„ وجود ندارد یا نامعتبر است Failed to import, no vaild music file found! اضاÙÙ‡ کردن ناموÙÙ‚ ØŒ ÙØ§ÛŒÙ„ صوتی وجود ندارد! All music تمام آهنگ ها OK تایید Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" با موÙقیت به "1%" Ø§ÙØ²ÙˆØ¯Ù‡ شد. Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next بعدی MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music تمام آهنگ ها Time added زمان Ø§ÙØ²ÙˆØ¯Ù‡ شد Album Artist هنرمند Title عنوان Play All پخش همه Artists Albums Custom شخصی Search Results Songs No result found نتیجه ای ÛŒØ§ÙØª نشد MusicListDialog Play All پخش همه Shuffle تصادÙÛŒ MusicListInfoView New playlist لیست پخش جدید Play queue Add to new playlist Pause Play پخش Add to playlist اضاÙÙ‡ کردن به لیست پخش Display in file manager نمایش درمدیریت ÙØ§ÛŒÙ„ Remove from playlist حذ٠از لیست پخش Delete from local disk حذ٠از دیسک محلی Song info اطلاعات صدا Cancel انصرا٠Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete حذ٠Are you sure you want to delete %1? آیا شما Û±Ùª از حذ٠اطمینان دارید؟ Are you sure you want to delete the selected %1 songs? آیا شما Û± Ùª از حذ٠این آهنگ اطمینان دارید؟ The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? آیا شما از حذ٠این پلی لیست اطمینان دارید؟ Cancel انصرا٠Delete حذ٠MusicListScrollArea Library Playlists MusicListView New playlist لیست پخش جدید Play پخش Add to playlist اضاÙÙ‡ کردن به لیست پخش Display in file manager نمایش درمدیریت ÙØ§ÛŒÙ„ Song info اطلاعات صدا Are you sure you want to delete %1? آیا شما Û±Ùª از حذ٠اطمینان دارید؟ Are you sure you want to delete the selected %1 songs? آیا شما Û± Ùª از حذ٠این آهنگ اطمینان دارید؟ Remove from playlist حذ٠از لیست پخش Delete from local disk حذ٠از دیسک محلی Encoding کدگذاری My Favorites Are you sure you want to delete this playlist? آیا شما از حذ٠این پلی لیست اطمینان دارید؟ Cancel انصرا٠Delete حذ٠Pause Rename تغییر نام Deleting the current song will also delete the song files contained حذ٠آهنگ ÙØ¹Ù„ÛŒ سبب Ø­Ø°Ù ÙØ§ÛŒÙ„ های آهنگ موجود خواهد شد. Unknown artist هنرمند ناشناخته Unknown album آلبوم نامشخص MusicListWidget No Music بدون موسیقی No result found نتیجه ای ÛŒØ§ÙØª نشد Play All پخش همه Time added زمان Ø§ÙØ²ÙˆØ¯Ù‡ شد Title عنوان Artist هنرمند Album name نام آلبوم Custom شخصی PlayListItem Are you sure you want to delete this playlist? آیا شما از حذ٠این پلی لیست اطمینان دارید؟ Delete حذ٠Cancel انصرا٠PlayListView New playlist لیست پخش جدید Play queue musicResult My favorites مورد علاقه Add to new playlist Pause Play پخش Add to playlist اضاÙÙ‡ کردن به لیست پخش Display in file manager نمایش درمدیریت ÙØ§ÛŒÙ„ Remove from playlist حذ٠از لیست پخش Remove from play queue Delete from local disk حذ٠از دیسک محلی Encoding کدگذاری Song info اطلاعات صدا Cancel انصرا٠Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? آیا شما Û±Ùª از حذ٠اطمینان دارید؟ Are you sure you want to delete the selected %1 songs? آیا شما Û± Ùª از حذ٠این آهنگ اطمینان دارید؟ The song files contained will also be deleted Rename تغییر نام Delete حذ٠Unknown artist هنرمند ناشناخته Unknown album آلبوم نامشخص PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album آلبوم نامشخص Unknown artist هنرمند ناشناخته PlaylistManager New playlist لیست پخش جدید Artist هنرمند Albums Artists All Music تمام آهنگ ها My favorites مورد علاقه Search result نتایج جستجو Play پخش Music PlaylistWidget New playlist لیست پخش جدید QApplication Deepin Music دیپین موزیک Music QObject Deepin Music دیپین موزیک Minimize to system tray Ú©ÙˆÚ†Ú© نمایی Exit Deepin Music خروج Exit Music Autoplay پخش حودکار Enable fade in/out ÙØ¹Ø§Ù„ کردن محو شدن/نشدن Remember playback position بازیابی موقعیت پخش Close Main Window بستن پنجره اصلی Basic پایه ای Play پخش Shortcuts میانبر Restore Defaults بازگرداندن پیش ÙØ±Ø¶ ها Next بعدی Play/Pause پخش/Ù…Ú©Ø« Previous پیشین Volume down کاهش صدا Volume up Ø§ÙØ²Ø§ÛŒØ´ صدا SearchLyricsWidget Find Lyrics Title عنوان Artist هنرمند Search جستجو SearchResult Search "%1" in Deepin Music جستجوی "1%" در موسیقی دیپین Music Artists Albums Shortcut Play پخش Songs Playlists Settings تنظیمات Play/Pause پخش/Ù…Ú©Ø« Previous Next بعدی Volume Up Volume Down Mute Favorite مورد علاقه Unfavorite Song info اطلاعات صدا New playlist لیست پخش جدید Add music Rename playlist Remove from playlist حذ٠از لیست پخش Help Display shortcuts TitlebarWidget Search جستجو deepin-music-6.0.1.54/src/music-player/translations/deepin-music_fi.ts000664 000000 000000 00000142015 13703317554 025654 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Poistu Minimize to system tray Minimoi valikkoon Do not ask again Älä kysy uudestaan Please select your operation Valitse toiminto Cancel Peruuta Confirm Vahvista DequalizerDialog Custom Kustomoitu Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Palauta oletukset Footer Unknown Title Tuntematon nimi Unknown artist Tuntematon artisti Previous Edellinen Next Seuraava Play/Pause Toista/keskeytä Favorite Suosikki Lyrics Sanat Play Mode Toistotila Play Queue Toista jono List Loop Listan silmukka Single Loop Silmukka Shuffle Sekoitta ImportWidget Open Folder Avaa kansio Add Music Lisää musiikkia Scan Skannaa %1 music directory or drag music files here %1 musiikkikansio tai vedä musiikkitiedostot tähän Loading music, please wait... Lataa musiikkia, odota ... InfoDialog Basic info Perustiedot Title: Otsikko: Artist: Artisti: Album: Albumi: Type: Tyyppi: Size: Koko: Duration: Kesto: Path: Polku: Unknown artist Tuntematon artisti Unknown album Tuntematon albumi LoadWidget Loading... Lataa... LyricWidget Find lyrics Etsi sanoitukset Title Nimi Artist Esittäjä Search Etsi Back Takaisin MUsicLyricWidget No lyrics yet MainFrame Add playlist Lisää soittolistaan Add music Lisää musiikkia Equalizer Settings Asetukset Dark theme Tumma Exit Poistu Music is a local music player with beautiful design and simple functions. Musiikki on paikallinen musiikkisoitin, jossa on kaunis muotoilu ja yksinkertaiset toiminnot. Music Musiikki Play/Pause Toista/keskeytä Previous Edellinen Next Seuraava Successfully added to "%1" Lisätty onnistuneesti osoitteeseen "%1" Already added to the playlist On jo lisätty soittolistaan 1 song added 1 kappale lisätty %1 songs added %1 kappaletta lisätty File is invalid or does not exist, load failed Tiedosto virheellinen tai sitä ei ole, lataus epäonnistui OK OK Import failed, no valid music file found Tuonti epäonnistui, musiikkitiedostoa ei löytynyt All music Kaikki musiikki MusicListDataDelegate No songs Ei kappaleita 1 song 1 kappale %1 songs %1 kappaletta MusicListDataWidget No songs Ei kappaleita 1 album - 1 song 1 albumi - 1 kappale %1 album - %2 songs %1 albumi - %2 kappaletta %1 albums - %2 songs %1 albumia - %2 kappaletta 1 artist - 1 song 1 artisti - 1 kappale %1 artist - %2 songs %1 artisti - %2 kappaletta %1 artists - %2 songs %1 artistia - %2 kappaletta 1 song 1 kappale %1 songs %1 kappaletta No search results Ei hakutuloksia All Music Kaikki musiikki Time added Aikaväli Album Albumi Artist Esittäjä Title Nimi Play All Toista kaikki Artists Artistit Albums Albumit Custom Kustomoitu Search Results Hakutulokset Songs Kappaletta No result found Tuloksia ei löytynyt MusicListDialog Play All Toista kaikki Shuffle Sekoitta MusicListInfoView Play queue Toista jono Add to new playlist Lisää uuteen soittolistaan Pause Pysäytä Play Toista Add to playlist Lisää soittolistaan Display in file manager Näytä tiedostonhallinnassa Remove from playlist Poista soittolistalta Delete from local disk Poista paikalliselta levyltä Song info Kappaleen tiedot Cancel Peruuta Remove Poista Are you sure you want to remove %1? Haluatko varmasti poistaa %1? Are you sure you want to remove the selected %1 songs? Haluatko varmasti poistaa valitut %1 kappaleet? Delete Poista Are you sure you want to delete %1? Haluatko varmasti poistaa %1? Are you sure you want to delete the selected %1 songs? Haluatko varmasti poistaa valitut %1 kappaleet? The song files contained will also be deleted Sisältämät musiikkitiedostot poistetaan myös MusicListItem Are you sure you want to delete this playlist? Haluatko varmasti poistaa tämän soittolistan? Cancel Peruuta Delete Poista MusicListScrollArea Library Kirjasto Playlists Soittolistat MusicListView My Favorites Minun suosikit Are you sure you want to delete this playlist? Haluatko varmasti poistaa tämän soittolistan? Cancel Peruuta Delete Poista Pause Pysäytä Play Toista Rename Nimeä uudelleen PlayListView Unknown artist Tuntematon artisti Unknown album Tuntematon albumi Play queue Toista jono musicResult My favorites Minun suosikit Add to new playlist Lisää uuteen soittolistaan Pause Pysäytä Play Toista Add to playlist Lisää soittolistaan Display in file manager Näytä tiedostonhallinnassa Remove from playlist Poista soittolistalta Remove from play queue Delete from local disk Poista paikalliselta levyltä Encoding Koodaus Song info Kappaleen tiedot Cancel Peruuta Remove Poista Are you sure you want to remove %1? Haluatko varmasti poistaa %1? Are you sure you want to remove the selected %1 songs? Haluatko varmasti poistaa valitut %1 kappaleet? Delete Poista Are you sure you want to delete %1? Haluatko varmasti poistaa %1? Are you sure you want to delete the selected %1 songs? Haluatko varmasti poistaa valitut %1 kappaleet? The song files contained will also be deleted Sisältämät musiikkitiedostot poistetaan myös PlayListWidget No songs Ei kappaleita No search results Ei hakutuloksia Play Queue Toista jono Empty Tyhjennä 1 song 1 kappale %1 songs %1 kappaletta Playlist Unknown album Tuntematon albumi Unknown artist Tuntematon artisti PlaylistManager New playlist Uusi soittolista Albums Albumit Artists Artistit All Music Kaikki musiikki My favorites Minun suosikit Search result Hakutulokset Play Toista Music Musiikki QApplication Music Musiikki QObject Minimize to system tray Minimoi valikkoon Exit Music Poistu musiikista Autoplay Automaattitoisto Enable fade in/out Salli häivytys Remember playback position Muista toiston sijainti Close Main Window Sulje pääikkuna Basic Perusasetukset Play Toista Shortcuts Pikanäppäimet Restore Defaults Palauta oletukset Next Seuraava Play/Pause Toista/keskeytä Previous Edellinen Volume down Volyymi alas Volume up Volyymi ylös SearchLyricsWidget Find Lyrics Etsi sanoitukset Title Nimi Artist Esittäjä Search Etsi SearchResult Music Musiikki Artists Artistit Albums Albumit Shortcut Play Toista Songs Kappaletta Playlists Soittolistat Settings Asetukset Play/Pause Toista/keskeytä Previous Edellinen Next Seuraava Volume Up Äänitaso ylös Volume Down Äänitaso alas Mute Vaienna Favorite Suosikki Unfavorite Inhokki Song info Kappaleen tiedot New playlist Uusi soittolista Add music Lisää musiikkia Rename playlist Nimeä soittolista Remove from playlist Poista soittolistalta Help Ohje Display shortcuts Näytä pikanäppäimet TitlebarWidget Search Etsi deepin-music-6.0.1.54/src/music-player/translations/deepin-music_fil.ts000664 000000 000000 00000143065 13703317554 026036 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Minimize to system tray Do not ask again Cancel Confirm DequalizerDialog Custom Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous Next Play/Pause Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Artist: Album: Type: Path: Unknown artist Unknown album Size: Basic info Duration: LoadWidget Loading... LyricWidget Find lyrics Title Artist Search Back MUsicLyricWidget No lyrics yet MainFrame Settings Exit Dark theme Equalizer Play/Pause Previous All music OK Add playlist Add music Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Delete MusicListScrollArea Library Playlists MusicListView Play Are you sure you want to delete this playlist? My Favorites Cancel Delete Pause Rename PlayListView Play queue My favorites Add to new playlist Pause Play musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Delete Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Music QApplication Deepin Music Deepin Music Music QObject Deepin Music Deepin Music Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Shortcuts Restore Defaults Next Play/Pause Previous Volume down Volume up SearchLyricsWidget Find Lyrics Title Artist Search SearchResult Music Artists Albums Shortcut Play Songs Playlists Settings Play/Pause Previous Next Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search deepin-music-6.0.1.54/src/music-player/translations/deepin-music_fr.ts000664 000000 000000 00000143510 13703317554 025666 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Quitter Minimize to system tray Réduire dans la barre d'état système Do not ask again Ne plus demander Please select your operation Veuillez sélectionner votre opération Cancel Annuler Confirm Confirmer DequalizerDialog Custom Personnalisé Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Restaurer les valeurs par défaut Footer Unknown Title Titre inconnu Unknown artist Artiste inconnu Previous Précédent Next Suivant Play/Pause Lecture/Pause Favorite Favoris Lyrics Paroles Play Mode Mode de lecture Play Queue Lire la file d'attente List Loop Répéter la liste Single Loop Répéter le morceau Shuffle Lecture aléatoire ImportWidget Open Folder Add Music Ajouter Musique Scan Numériser %1 music directory or drag music files here %1 répertoire musical ou faites glisser les fichiers musicaux ici Loading music, please wait... Chargement de la musique, veuillez patienter... InfoDialog Basic info Informations de base Title: Titre : Artist: Artiste: Album: Album : Type: Type : Size: Taille : Duration: Durée : Path: Chemin : Unknown artist Artiste inconnu Unknown album Album inconnu LoadWidget Loading... Chargement... LyricWidget Find lyrics Rechercher des paroles Title Titre Artist Artiste Search Rechercher Back Retour MUsicLyricWidget No lyrics yet MainFrame Add playlist Ajouter à la liste de lecture Add music Ajouter une musique Equalizer Settings Paramètres Dark theme Thème sombre Exit Quitter Music is a local music player with beautiful design and simple functions. Musique est un lecteur de musique local avec un beau design et des fonctions simples. Music Musique Play/Pause Lecture/Pause Previous Précédent Next Suivant Successfully added to "%1" Ajouté avec succès à '%1' Already added to the playlist Déjà ajouté à la liste de lecture 1 song added 1 chanson ajoutée %1 songs added %1 chansons ajoutées File is invalid or does not exist, load failed Le fichier n'est pas valide ou n'existe pas, le chargement a échoué OK OK Import failed, no valid music file found Échec de l'importation, aucun fichier de musique valide n'a été trouvé All music Toute la musique MusicListDataDelegate No songs Aucune chanson 1 song 1 chanson %1 songs %1 chansons MusicListDataWidget No songs Aucune chanson 1 album - 1 song 1 album - 1 chanson %1 album - %2 songs %1 album - %2 chansons %1 albums - %2 songs %1 albums - %2 chansons 1 artist - 1 song 1 artiste - 1 chanson %1 artist - %2 songs %1 artiste - %2 chansons %1 artists - %2 songs %1 artistes - %2 chansons 1 song 1 chanson %1 songs %1 chansons No search results Aucun résultat de recherche All Music Toute la musique Time added Temps ajouté Album Album Artist Artiste Title Titre Play All Tout jouer Artists Artistes Albums Albums Custom Personnalisé Search Results Songs Chansons No result found Aucun résultat trouvé MusicListDialog Play All Tout jouer Shuffle Lecture aléatoire MusicListInfoView Play queue Lire la file d'attente Add to new playlist Ajouter à une nouvelle liste de lecture Pause Pause Play Jouer Add to playlist Ajouter à la liste de lecture Display in file manager Afficher dans le gestionnaire de fichiers Remove from playlist Supprimer de la liste de lecture Delete from local disk Supprimer du disque local Song info Informations sur la chanson Cancel Annuler Remove Retirer Are you sure you want to remove %1? Voulez-vous vraiment supprimer %1 ? Are you sure you want to remove the selected %1 songs? Voulez-vous vraiment supprimer les chansons %1 sélectionnées ? Delete Supprimer Are you sure you want to delete %1? Voulez-vous vraiment supprimer %1 ? Are you sure you want to delete the selected %1 songs? Voulez-vous vraiment supprimer les %1 chansons sélectionnées ? The song files contained will also be deleted Les fichiers de chansons contenus seront également supprimés MusicListItem Are you sure you want to delete this playlist? Voulez-vous vraiment supprimer cette liste de lecture ? Cancel Annuler Delete Supprimer MusicListScrollArea Library Bibliothèque Playlists Listes de lecture MusicListView My Favorites Are you sure you want to delete this playlist? Voulez-vous vraiment supprimer cette liste de lecture ? Cancel Annuler Delete Supprimer Pause Pause Play Jouer Rename Renommer PlayListView Unknown artist Artiste inconnu Unknown album Album inconnu Play queue Lire la file d'attente musicResult My favorites Mes favoris Add to new playlist Ajouter à une nouvelle liste de lecture Pause Pause Play Jouer Add to playlist Ajouter à la liste de lecture Display in file manager Afficher dans le gestionnaire de fichiers Remove from playlist Supprimer de la liste de lecture Remove from play queue Delete from local disk Supprimer du disque local Encoding Encodage Song info Informations sur la chanson Cancel Annuler Remove Retirer Are you sure you want to remove %1? Voulez-vous vraiment supprimer %1 ? Are you sure you want to remove the selected %1 songs? Voulez-vous vraiment supprimer les chansons %1 sélectionnées ? Delete Supprimer Are you sure you want to delete %1? Voulez-vous vraiment supprimer %1 ? Are you sure you want to delete the selected %1 songs? Voulez-vous vraiment supprimer les %1 chansons sélectionnées ? The song files contained will also be deleted Les fichiers de chansons contenus seront également supprimés PlayListWidget No songs Aucune chanson No search results Aucun résultat de recherche Play Queue Lire la file d'attente Empty Vide 1 song 1 chanson %1 songs %1 chansons Playlist Unknown album Album inconnu Unknown artist Artiste inconnu PlaylistManager New playlist Nouvelle liste de lecture Albums Albums Artists Artistes All Music Toute la musique My favorites Mes favoris Search result Résultat de la recherche Play Jouer Music Musique QApplication Music Musique QObject Minimize to system tray Réduire dans la barre d'état système Exit Music Quitter Musique Autoplay Lecture automatique Enable fade in/out Activer le fondu entrant/sortant Remember playback position Mémoriser la position de lecture Close Main Window Fermer la fenêtre principale Basic Basique Play Jouer Shortcuts Raccourcis Restore Defaults Restaurer les valeurs par défaut Next Suivant Play/Pause Lecture/Pause Previous Précédent Volume down Réduction du volume Volume up Augmenter le volume SearchLyricsWidget Find Lyrics Trouver des paroles Title Titre Artist Artiste Search Rechercher SearchResult Music Musique Artists Artistes Albums Albums Shortcut Play Jouer Songs Chansons Playlists Listes de lecture Settings Paramètres Play/Pause Lecture/Pause Previous Précédent Next Suivant Volume Up Augmenter le volume Volume Down Réduction du volume Mute Muet Favorite Favoris Unfavorite Défavoris Song info Informations sur la chanson New playlist Nouvelle liste de lecture Add music Ajouter une musique Rename playlist Renommer la liste de lecture Remove from playlist Supprimer de la liste de lecture Help Aide Display shortcuts Afficher les raccourcis TitlebarWidget Search Rechercher deepin-music-6.0.1.54/src/music-player/translations/deepin-music_gl_ES.ts000664 000000 000000 00000156636 13703317554 026265 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Por favor, selecciona a túa operación Exit Saír Minimize to system tray Minimizar na bandexa Do not ask again Cancel Cancelar Confirm OK Aceptar DequalizerDialog Custom Personalizado Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Restablecer o predefinido Footer Previous Anterior Next Seguinte Play/Pause Rep./Pausar Favorite Favorito Lyrics Letras Play Queue Unknown Title Título descoñecido Unknown artist Artista descoñecido Play Mode Modo de reprodución Playlist Lista de reprodución List Loop Lista en bucle Single Loop Un só bucle Shuffle Modo aleatorio ImportWidget Add folder Engadir cartafol Open Folder Add Music Scan Comprobar %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 directorio de música ou arrastra e solta o ficheiro musical para engadir música Loading music, please wait... Cargando música, por favor agarda... InfoDialog Title: Título: Artist: Artista: Album: Ãlbum: Type: Tipo: Path: Ruta: Unknown artist Artista descoñecido Unknown album Ãlbum descoñecido Size: Tamaño: Basic info Duration: Duración: LoadWidget Loading... Cargando... LyricWidget Find lyrics Title Título Artist Artista Search Buscar Back Volver MUsicLyricWidget No lyrics yet MainFrame New playlist Nova lista de reprodución Settings Axustes Exit Saír Add folder Engadir cartafol Add file Engadir ficheiro Dark theme Tema Escuro Play/Pause Rep./Pausar Previous Anterior Invalid or non-existent file O ficheiro non é válido ou non existe Failed to import, no vaild music file found! Fallo na importación, non se atopou un ficheiro de música válido! All music Toda a música OK Aceptar Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Engadida con éxito "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Seguinte MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Toda a música Time added Tempo engadido Album Artist Artista Title Título Play All Reproducir todo Artists Albums Custom Personalizado Search Results Songs No result found Non se atoparon resultados MusicListDialog Play All Reproducir todo Shuffle Modo aleatorio MusicListInfoView New playlist Nova lista de reprodución Play queue Add to new playlist Pause Play Reproducir Add to playlist Engadir á lista de reprodución Display in file manager Amosar no xestor de ficheiros Remove from playlist Eliminar da lista de reprodución Delete from local disk Eliminar do disco local Song info Información da canción Cancel Cancelar Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Eliminar Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Cancelar Delete Eliminar MusicListScrollArea Library Playlists MusicListView New playlist Nova lista de reprodución Play Reproducir Add to playlist Engadir á lista de reprodución Display in file manager Amosar no xestor de ficheiros Song info Información da canción Remove from playlist Eliminar da lista de reprodución Delete from local disk Eliminar do disco local Encoding Codificación My Favorites Are you sure you want to delete this playlist? Cancel Cancelar Delete Eliminar Pause Rename Renomear Deleting the current song will also delete the song files contained Ao eliminar a canción actual eliminarase tamén o ficheiro Unknown artist Artista descoñecido Unknown album Ãlbum descoñecido MusicListWidget No Music Sen música No result found Non se atoparon resultados Play All Reproducir todo Time added Tempo engadido Title Título Artist Artista Album name Nome do álbum Custom Personalizado PlayListItem Delete Eliminar Cancel Cancelar PlayListView New playlist Nova lista de reprodución Play queue musicResult My favorites Os meus favoritos Add to new playlist Pause Play Reproducir Add to playlist Engadir á lista de reprodución Display in file manager Amosar no xestor de ficheiros Remove from playlist Eliminar da lista de reprodución Remove from play queue Delete from local disk Eliminar do disco local Encoding Codificación Song info Información da canción Cancel Cancelar Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename Renomear Delete Eliminar Unknown artist Artista descoñecido Unknown album Ãlbum descoñecido PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Ãlbum descoñecido Unknown artist Artista descoñecido PlaylistManager New playlist Nova lista de reprodución Artist Artista Albums Artists All Music Toda a música My favorites Os meus favoritos Search result Resultados da busca Play Reproducir Music PlaylistWidget New playlist Nova lista de reprodución QApplication Deepin Music Música Music QObject Deepin Music Música Minimize to system tray Minimizar na bandexa Exit Deepin Music Saír de Música Exit Music Autoplay Reproducir Auto. Enable fade in/out Remember playback position Recordar a posición de reprodución Close Main Window Pechar a Xanela Principal Basic Básico Play Reproducir Shortcuts Atallos Restore Defaults Restablecer o predefinido Next Seguinte Play/Pause Rep./Pausar Previous Anterior Volume down Baixar o volume Volume up Subir o volume SearchLyricsWidget Find Lyrics Title Título Artist Artista Search Buscar SearchResult Search "%1" in Deepin Music Buscar "%1" en Música Music Artists Albums Shortcut Play Reproducir Songs Playlists Settings Axustes Play/Pause Rep./Pausar Previous Anterior Next Seguinte Volume Up Volume Down Mute Favorite Favorito Unfavorite Song info Información da canción New playlist Nova lista de reprodución Add music Rename playlist Remove from playlist Eliminar da lista de reprodución Help Display shortcuts TitlebarWidget Search Buscar deepin-music-6.0.1.54/src/music-player/translations/deepin-music_he.ts000664 000000 000000 00000156753 13703317554 025670 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit יצי××” Minimize to system tray Do not ask again Cancel ביטול Confirm OK ×ישור DequalizerDialog Custom בהת×מה ×ישית Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous ×”×§×•×“× Next ×”×‘× Play/Pause × ×’×™× ×”/השהיה Favorite הוספה ×œ×ž×•×¢×“×¤×™× Lyrics ×ž×™×œ×™× Play Queue Unknown Title ×ין כותרת Unknown artist ×מן ×œ× ×™×“×•×¢ Play Mode מצב × ×’×™× ×” Playlist רשימת × ×’×™× ×” List Loop Single Loop Shuffle ערבול ImportWidget Add folder הוסף תיקייה Open Folder Add Music Scan סריקה %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 תיקיית מוזיקה ×ו שניתן לגרור ולשחרר קובץ מוזיקה כדי להוסיף מוזיקה Loading music, please wait... המוזיקה נטענת, × × ×œ×”×ž×ª×™×Ÿâ€¦ InfoDialog Title: ש×: Artist: ×מן: Album: ×לבו×: Type: סוג Path: נתיב: Unknown artist ×מן ×œ× ×™×“×•×¢ Unknown album ××œ×‘×•× ×œ× ×™×“×•×¢ Size: גודל: Basic info Duration: משך: LoadWidget Loading... טוען... LyricWidget Find lyrics Title ×©× Artist ×מן Search חיפוש Back חזרה MUsicLyricWidget No lyrics yet MainFrame New playlist רשימת × ×’×™× ×” חדשה Settings הגדרות Exit יצי××” Add folder הוסף תיקייה Add file הוסף קובץ Dark theme Play/Pause × ×’×™× ×”/השהיה Previous ×”×§×•×“× Failed to import, no vaild music file found! ×™×‘×•× ×”×§×•×‘×¥ נכשל, ×œ× × ×ž×¦× ×§×•×‘×¥ מוזיקה תקין! All music OK ×ישור Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" נוסף בהצלחה ×ל „%1“ Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next ×”×‘× MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music כל המוזיקה Time added מועד ההוספה Album Artist ×מן Title ×©× Play All לנגן הכול Artists Albums Custom בהת×מה ×ישית Search Results Songs No result found ×œ× × ×ž×¦×ו תוצ×ות MusicListDialog Play All לנגן הכול Shuffle ערבול MusicListInfoView New playlist רשימת × ×’×™× ×” חדשה Play queue Add to new playlist Pause Play × ×’×™× ×” Add to playlist הוספה לרשימת × ×’×™× ×” Display in file manager הצגה במנהל ×”×§×‘×¦×™× Remove from playlist הסרה מרשימת × ×’×™× ×” Delete from local disk מחיקה מהכונן המקומי Song info פרטי השיר Cancel ביטול Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete מחיקה Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel ביטול Delete מחיקה MusicListScrollArea Library Playlists MusicListView New playlist רשימת × ×’×™× ×” חדשה Play × ×’×™× ×” Add to playlist הוספה לרשימת × ×’×™× ×” Display in file manager הצגה במנהל ×”×§×‘×¦×™× Song info פרטי השיר Remove from playlist הסרה מרשימת × ×’×™× ×” Delete from local disk מחיקה מהכונן המקומי Encoding קידוד My Favorites Are you sure you want to delete this playlist? Cancel ביטול Delete מחיקה Pause Rename שינוי ×©× Deleting the current song will also delete the song files contained מחיקת השיר הנוכחי תמחוק ×’× ×ת קובצי ×”×©×™×¨×™× ×©×‘×ª×•×›×• Unknown artist ×מן ×œ× ×™×“×•×¢ Unknown album ××œ×‘×•× ×œ× ×™×“×•×¢ MusicListWidget No Music ×ין מוזיקה No result found ×œ× × ×ž×¦×ו תוצ×ות Play All לנגן הכול Time added מועד ההוספה Title ×©× Artist ×מן Album name ×©× ×”××œ×‘×•× Custom בהת×מה ×ישית PlayListItem Delete מחיקה Cancel ביטול PlayListView New playlist רשימת × ×’×™× ×” חדשה Play queue musicResult My favorites ×”×ž×•×¢×“×¤×™× ×©×œ×™ Add to new playlist Pause Play × ×’×™× ×” Add to playlist הוספה לרשימת × ×’×™× ×” Display in file manager הצגה במנהל ×”×§×‘×¦×™× Remove from playlist הסרה מרשימת × ×’×™× ×” Remove from play queue Delete from local disk מחיקה מהכונן המקומי Encoding קידוד Song info פרטי השיר Cancel ביטול Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename שינוי ×©× Delete מחיקה Unknown artist ×מן ×œ× ×™×“×•×¢ Unknown album ××œ×‘×•× ×œ× ×™×“×•×¢ PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album ××œ×‘×•× ×œ× ×™×“×•×¢ Unknown artist ×מן ×œ× ×™×“×•×¢ PlaylistManager New playlist רשימת × ×’×™× ×” חדשה Artist ×מן Albums Artists All Music כל המוזיקה My favorites ×”×ž×•×¢×“×¤×™× ×©×œ×™ Search result תוצ×ות חיפוש Play × ×’×™× ×” Music PlaylistWidget New playlist רשימת × ×’×™× ×” חדשה QApplication Deepin Music נגן מוסיקה Deepin Music QObject Deepin Music Deepin מוזיקה Minimize to system tray Exit Music Autoplay × ×’×™× ×” ×וטומטית Enable fade in/out Remember playback position Close Main Window Basic בסיסי Play × ×’×™× ×” Shortcuts קיצורי ×ž×§×©×™× Restore Defaults Next ×”×‘× Play/Pause × ×’×™× ×”/השהיה Previous ×”×§×•×“× Volume down הנמכה Volume up הגברה SearchLyricsWidget Find Lyrics Title ×©× Artist ×מן Search חיפוש SearchResult Search "%1" in Deepin Music חיפוש ×חר „%1“ ב־Deepin מוזיקה Music Artists Albums Shortcut Play × ×’×™× ×” Songs Playlists Settings הגדרות Play/Pause × ×’×™× ×”/השהיה Previous ×”×§×•×“× Next ×”×‘× Volume Up Volume Down Mute Favorite הוספה ×œ×ž×•×¢×“×¤×™× Unfavorite Song info פרטי השיר New playlist רשימת × ×’×™× ×” חדשה Add music Rename playlist Remove from playlist הסרה מרשימת × ×’×™× ×” Help Display shortcuts TitlebarWidget Search חיפוש deepin-music-6.0.1.54/src/music-player/translations/deepin-music_hi_IN.ts000664 000000 000000 00000170250 13703317554 026246 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation कृपया कारà¥à¤¯ चà¥à¤¨à¥‡ Exit बाहर Minimize to system tray सिसà¥à¤Ÿà¤® टà¥à¤°à¥‡ में छोटा करें Do not ask again दोबारा मत पूछें Cancel रदà¥à¤¦ करो Confirm OK ठीक DequalizerDialog Custom सà¥à¤µà¤¯à¤‚ के दà¥à¤µà¤¾à¤°à¤¾ Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults डिफॉलà¥à¤Ÿà¥à¤¸ पà¥à¤¨à¤ƒà¤¸à¥à¤¥à¤¾à¤ªà¤¿à¤¤ करें Footer Previous पिछला Next आगे Play/Pause बजाà¤à¤‚/रोकें Favorite पà¥à¤°à¤¿à¤¯ Lyrics गीत के बोल Play Queue Unknown Title अजà¥à¤žà¤¾à¤¤ गीत Unknown artist अजà¥à¤žà¤¾à¤¤ कलाकार Play Mode पà¥à¤²à¥‡ मोड Playlist पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ List Loop लिसà¥à¤Ÿ लूप Single Loop सिंगल लूप Shuffle फेर बदलें ImportWidget Add folder फोंलà¥à¤¡à¤° जोड़ें Open Folder Add Music Scan सà¥à¤•ैन %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 संगीत निरà¥à¤¦à¥‡à¤¶à¤¿à¤•ा या संगीत जोड़ने के लिठसंगीत फ़ाइल खींचें और छोड़ें Loading music, please wait... संगीत लोड हो रहा है, कृपया पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करें... InfoDialog Title: टाइटलà¥à¤¸: Artist: कलाकार: Album: à¤à¤²à¥à¤¬à¤®: Type: पà¥à¤°à¤•ार: Path: रासà¥à¤¤à¤¾: Unknown artist अजà¥à¤žà¤¾à¤¤ कलाकार Unknown album अजà¥à¤žà¤¾à¤¤ à¤à¤²à¥à¤¬à¤® Size: आकार: Basic info Duration: अवधि: LoadWidget Loading... लोड हो रहा है... LyricWidget Find lyrics बोल ढूà¤à¤¢à¥‡à¤‚ Title टाइटल Artist कलाकार Search खोजें Back वापस MUsicLyricWidget No lyrics yet MainFrame New playlist नई पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ Settings सेटिंगà¥à¤¸ Exit बाहर Add folder फोंलà¥à¤¡à¤° जोड़ें Add file फ़ाइल जोड़ें Dark theme डारà¥à¤• थीम Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. दीपिन संगीत à¤à¤• सà¥à¤‚दर और सरल संगीत चालक है जो सà¥à¤¥à¤¾à¤¨à¥€à¤¯ ऑडियो चलता है। यह पà¥à¤²à¥‡à¤¬à¥ˆà¤• के दौरान गीत के बोल देखने, दोषरहित ऑडियो चलाने और पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ अनà¥à¤•ूलन आदि का समरà¥à¤¥à¤¨ करता है। Play/Pause बजाà¤à¤‚/रोकें Previous पिछला Invalid or non-existent file अमानà¥à¤¯ या गैर-मौजूद फ़ाइल Failed to import, no vaild music file found! आयात करने में विफल, कोई मानà¥à¤¯ संगीत फ़ाइल नहीं मिली! All music सारे गाने OK ठीक Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" सफलतापूरà¥à¤µà¤• "%1" में जोड़ दिया गया Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next आगे MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music सारे गाने Time added जोड़ का समय Album Artist कलाकार Title टाइटल Play All सभी को पà¥à¤²à¥‡ करें Artists Albums Custom सà¥à¤µà¤¯à¤‚ के दà¥à¤µà¤¾à¤°à¤¾ Search Results Songs No result found कोई परिणाम नहीं मिला MusicListDialog Play All सभी को पà¥à¤²à¥‡ करें Shuffle फेर बदलें MusicListInfoView New playlist नई पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ Play queue Add to new playlist Pause Play चलायें Add to playlist पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ में जोड़ें Display in file manager फ़ाइल मैनेजर में पà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ करें Remove from playlist पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ से हटाà¤à¤ Delete from local disk सà¥à¤¥à¤¾à¤¨à¥€à¤¯ डिसà¥à¤• से हटाà¤à¤‚ Song info गाने की जानकारी Cancel रदà¥à¤¦ करो Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete हटाà¤à¤ Are you sure you want to delete %1? कà¥à¤¯à¤¾ आप सà¥à¤ªà¤·à¥à¤Ÿ होकर %1 को हटाना चाहते हैं ? Are you sure you want to delete the selected %1 songs? कà¥à¤¯à¤¾ आप सà¥à¤ªà¤·à¥à¤Ÿ होकर चयनित %1 गाने हटाना चाहते हैं ? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? कà¥à¤¯à¤¾ आप सà¥à¤ªà¤·à¥à¤Ÿ होकर यह पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ हटाना चाहते हैं ? Cancel रदà¥à¤¦ करो Delete हटाà¤à¤ MusicListScrollArea Library Playlists MusicListView New playlist नई पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ Play चलायें Add to playlist पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ में जोड़ें Display in file manager फ़ाइल मैनेजर में पà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ करें Song info गाने की जानकारी Are you sure you want to delete %1? कà¥à¤¯à¤¾ आप सà¥à¤ªà¤·à¥à¤Ÿ होकर %1 को हटाना चाहते हैं ? Are you sure you want to delete the selected %1 songs? कà¥à¤¯à¤¾ आप सà¥à¤ªà¤·à¥à¤Ÿ होकर चयनित %1 गाने हटाना चाहते हैं ? Remove from playlist पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ से हटाà¤à¤ Delete from local disk सà¥à¤¥à¤¾à¤¨à¥€à¤¯ डिसà¥à¤• से हटाà¤à¤‚ Encoding à¤à¤¨à¥à¤•ोडिंग My Favorites Are you sure you want to delete this playlist? कà¥à¤¯à¤¾ आप सà¥à¤ªà¤·à¥à¤Ÿ होकर यह पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ हटाना चाहते हैं ? Cancel रदà¥à¤¦ करो Delete हटाà¤à¤ Pause Rename रीनैम Deleting the current song will also delete the song files contained वरà¥à¤¤à¤®à¤¾à¤¨ गीत को हटाने से निहित गीत फ़ाइलें भी हट जाà¤à¤à¤—ी Unknown artist जà¥à¤žà¤¾à¤¤ कलाकार Unknown album जà¥à¤žà¤¾à¤¤ à¤à¤²à¥à¤¬à¤® MusicListWidget No Music कोई संगीत नहीं है No result found कोई परिणाम नहीं मिला Play All सभी को पà¥à¤²à¥‡ करें Time added जोड़ का समय Title टाइटल Artist कलाकार Album name à¤à¤²à¥à¤¬à¤® का नाम Custom सà¥à¤µà¤¯à¤‚ के दà¥à¤µà¤¾à¤°à¤¾ PlayListItem Are you sure you want to delete this playlist? कà¥à¤¯à¤¾ आप सà¥à¤ªà¤·à¥à¤Ÿ होकर यह पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ हटाना चाहते हैं ? Delete हटाà¤à¤ Cancel रदà¥à¤¦ करो PlayListView New playlist नई पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ Play queue musicResult My favorites मेरे पसंदीदा Add to new playlist Pause Play चलायें Add to playlist पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ में जोड़ें Display in file manager फ़ाइल मैनेजर में पà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ करें Remove from playlist पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ से हटाà¤à¤ Remove from play queue Delete from local disk सà¥à¤¥à¤¾à¤¨à¥€à¤¯ डिसà¥à¤• से हटाà¤à¤‚ Encoding à¤à¤¨à¥à¤•ोडिंग Song info गाने की जानकारी Cancel रदà¥à¤¦ करो Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? कà¥à¤¯à¤¾ आप सà¥à¤ªà¤·à¥à¤Ÿ होकर %1 को हटाना चाहते हैं ? Are you sure you want to delete the selected %1 songs? कà¥à¤¯à¤¾ आप सà¥à¤ªà¤·à¥à¤Ÿ होकर चयनित %1 गाने हटाना चाहते हैं ? The song files contained will also be deleted Rename रीनैम Delete हटाà¤à¤ Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist नई पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ Artist कलाकार Albums Artists All Music सारे गाने My favorites मेरे पसंदीदा Search result परिणाम खोजें Play चलायें Music PlaylistWidget New playlist नई पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ QApplication Deepin Music डीपइन संगीत Music QObject Deepin Music डीपइन संगीत Minimize to system tray सिसà¥à¤Ÿà¤® टà¥à¤°à¥‡ में छोटा करें Exit Deepin Music डीपइन संगीत से बाहर आà¤à¤‚ Exit Music Autoplay ऑटो पà¥à¤²à¥‡ Enable fade in/out फ़ेड इन/आउट सकà¥à¤·à¤® करें Remember playback position पà¥à¤²à¥‡à¤¬à¥ˆà¤• सà¥à¤¥à¤¿à¤¤à¤¿ याद रखें Close Main Window मà¥à¤–à¥à¤¯ विंडो बंद करें Basic मौलिक Play चलायें Shortcuts शॉरà¥à¤Ÿà¤•ट Restore Defaults डिफॉलà¥à¤Ÿà¥à¤¸ पà¥à¤¨à¤ƒà¤¸à¥à¤¥à¤¾à¤ªà¤¿à¤¤ करें Next आगे Play/Pause बजाà¤à¤‚/रोकें Previous पिछला Volume down आवाज घटाà¤à¤ Volume up आवाज बà¥à¤¾à¤à¤ SearchLyricsWidget Find Lyrics Title टाइटल Artist कलाकार Search SearchResult Search "%1" in Deepin Music डीपइन संगीत में "%1" ढूंढें Music Artists Albums Shortcut Play चलायें Songs Playlists Settings सेटिंगà¥à¤¸ Play/Pause बजाà¤à¤‚/रोकें Previous पिछला Next आगे Volume Up Volume Down Mute Favorite पà¥à¤°à¤¿à¤¯ Unfavorite Song info गाने की जानकारी New playlist नई पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ Add music Rename playlist Remove from playlist पà¥à¤²à¥‡à¤²à¤¿à¤¸à¥à¤Ÿ से हटाà¤à¤ Help Display shortcuts TitlebarWidget Search खोज deepin-music-6.0.1.54/src/music-player/translations/deepin-music_hr.ts000664 000000 000000 00000156506 13703317554 025701 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Molim izaberite vaÅ¡u operaciju Exit IzaÄ‘i Minimize to system tray Do not ask again Cancel Otkaži Confirm OK U redu DequalizerDialog Custom PrilagoÄ‘eno Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Obnovi zadano Footer Previous PrijaÅ¡nje Next Slijedeće Play/Pause Reprodukcija/Pauza Favorite Omiljeni Lyrics Stihovi Play Queue Unknown Title Nepoznati naslov Unknown artist Nepoznati umjetnik Play Mode NaÄin reprodukcije Playlist Popis izvoÄ‘enja List Loop Single Loop Shuffle IzmjeÅ¡aj ImportWidget Add folder Dodaj mapu Open Folder Add Music Scan Sken %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 mapu sa glazbom ili povucite i spustite glazbene datoteke kako biste dodali glazbu Loading music, please wait... UÄitavam glazbu, molim priÄekajte... InfoDialog Title: Naslov: Artist: Umjetnik: Album: Album: Type: Vrsta: Path: Putanja: Unknown artist Nepoznati umjetnik Unknown album Nepoznati album Size: VeliÄina: Basic info Duration: Trajanje: LoadWidget Loading... UÄitavanje... LyricWidget Find lyrics Title Naslov Artist Umjetnik Search Traži Back Natrag MUsicLyricWidget No lyrics yet MainFrame New playlist Nova lista izvoÄ‘enja Settings Postavke Exit IzaÄ‘i Add folder Dodaj mapu Add file Dodaj datoteku Dark theme Tamna tema Play/Pause Reprodukcija/Pauza Previous PrijaÅ¡nje Invalid or non-existent file Neispravna ili nepostojeća datoteka Failed to import, no vaild music file found! PogreÅ¡ka prilikom uvoza, nisu pronaÄ‘ene ispravne glazbene datoteke! All music Sva glazba OK U redu Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" UspjeÅ¡no dodano u "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Slijedeće MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Sva glazba Time added Vrijeme dodavanja Album Artist Umjetnik Title Naslov Play All Reproduciraj sve Artists Albums Custom PrilagoÄ‘eno Search Results Songs No result found Nisu pronaÄ‘eni rezultati MusicListDialog Play All Reproduciraj sve Shuffle IzmjeÅ¡aj MusicListInfoView New playlist Nova lista izvoÄ‘enja Play queue Add to new playlist Pause Play Reprodukcija Add to playlist Dodaj na list uizvoÄ‘enja Display in file manager Prikaži u upravitelju datotekama Remove from playlist Ukloni sa liste izvoÄ‘enja Delete from local disk IzbriÅ¡i sa lokalnog diska Song info Informacije o pjesmi Cancel Otkaži Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete ObriÅ¡i Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Otkaži Delete ObriÅ¡i MusicListScrollArea Library Playlists MusicListView New playlist Nova lista izvoÄ‘enja Play Reprodukcija Add to playlist Dodaj na list uizvoÄ‘enja Display in file manager Prikaži u upravitelju datotekama Song info Informacije o pjesmi Remove from playlist Ukloni sa liste izvoÄ‘enja Delete from local disk IzbriÅ¡i sa lokalnog diska Encoding Enkodiranje My Favorites Are you sure you want to delete this playlist? Cancel Otkaži Delete ObriÅ¡i Pause Rename Preimenuj Deleting the current song will also delete the song files contained Brisanje trenutne pjesme će takoÄ‘er izbrisati i glazbenu datoteku pjesme. Unknown artist Nepoznati umjetnik Unknown album Nepoznati album MusicListWidget No Music Nema glazbe No result found Nisu pronaÄ‘eni rezultati Play All Reproduciraj sve Time added Vrijeme dodavanja Title Naslov Artist Umjetnik Album name Ime albuma Custom PrilagoÄ‘eno PlayListItem Delete ObriÅ¡i Cancel Otkaži PlayListView New playlist Nova lista izvoÄ‘enja Play queue musicResult My favorites Moji omiljeni Add to new playlist Pause Play Reprodukcija Add to playlist Dodaj na list uizvoÄ‘enja Display in file manager Prikaži u upravitelju datotekama Remove from playlist Ukloni sa liste izvoÄ‘enja Remove from play queue Delete from local disk IzbriÅ¡i sa lokalnog diska Encoding Enkodiranje Song info Informacije o pjesmi Cancel Otkaži Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename Preimenuj Delete ObriÅ¡i Unknown artist Nepoznati umjetnik Unknown album Nepoznati album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Nepoznati album Unknown artist Nepoznati umjetnik PlaylistManager New playlist Nova lista izvoÄ‘enja Artist Umjetnik Albums Artists All Music Sva glazba My favorites Moji omiljeni Search result Rezultat pretrage Play Reprodukcija Music PlaylistWidget New playlist Nova lista izvoÄ‘enja QApplication Deepin Music Deepin glazba Music QObject Deepin Music Deepin glazba Minimize to system tray Exit Deepin Music IzaÄ‘i iz Deepin glazbe Exit Music Autoplay Automatska reprodukcija Enable fade in/out Remember playback position Zapamti poziciju reprodukcije Close Main Window Zatvori glavni prozor Basic Osnovno Play Reprodukcija Shortcuts PreÄaci Restore Defaults Obnovi zadano Next Slijedeće Play/Pause Reprodukcija/Pauza Previous PrijaÅ¡nje Volume down Smanji glasnoću zvuka Volume up PojaÄaj glasnoću zvuka SearchLyricsWidget Find Lyrics Title Naslov Artist Umjetnik Search Traži SearchResult Search "%1" in Deepin Music Traži "%1" u Deepin glazbi Music Artists Albums Shortcut Play Reprodukcija Songs Playlists Settings Postavke Play/Pause Reprodukcija/Pauza Previous PrijaÅ¡nje Next Slijedeće Volume Up Volume Down Mute Favorite Omiljeni Unfavorite Song info Informacije o pjesmi New playlist Nova lista izvoÄ‘enja Add music Rename playlist Remove from playlist Ukloni sa liste izvoÄ‘enja Help Display shortcuts TitlebarWidget Search Traži deepin-music-6.0.1.54/src/music-player/translations/deepin-music_hu.ts000664 000000 000000 00000161030 13703317554 025670 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Válasszon műveletet Exit Kilépés Minimize to system tray Tálcára Do not ask again Ne kérdezzen rá megint. Cancel Mégse Confirm OK OK DequalizerDialog Custom Egyéni Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Alaphelyzetbe állítás Footer Previous ElÅ‘zÅ‘ Next KövetkezÅ‘ Play/Pause Lejátszás/Szünet Favorite Kedvencek Lyrics Zeneszöveg Play Queue Unknown Title Ismeretlen zene-cím Unknown artist Ismeretlen elÅ‘adó Play Mode Lejátszási mód Playlist Lejátszási lista List Loop Újrajátszás listáról Single Loop Újra játszás Shuffle Keverés ImportWidget Add folder Mappa hozzáadása Open Folder Add Music Scan Keresés %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 zene mappa vagy fogd és vidd a zene fájl hozzáadásához Loading music, please wait... Zene betöltés, várjunk.... InfoDialog Title: Cím: Artist: ElÅ‘adó: Album: Album: Type: Típus: Path: Elérési útvonal: Unknown artist Ismeretlen elÅ‘adó Unknown album Ismeretlen album Size: Méret: Basic info Duration: IdÅ‘tartam: LoadWidget Loading... Betöltés LyricWidget Find lyrics Dalszöveg keresése Title Cím Artist ElÅ‘adó Search Keresés Back Vissza MUsicLyricWidget No lyrics yet MainFrame New playlist Új lejátszólista Settings Beállítások Exit Kilépés Add folder Mappa hozzáadása Add file Fájl hozzáadása Dark theme Sötét téma Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. A Deepin Zene egy egyszerű zenelejátszó, amellyel a helyi könyvtáradban levÅ‘ zenéidet tudod lejátszani. Támogatja a dalszövegek megjelenítését, a lejátszó listákat. Ezeket tetszésed szerint szerkesztheted is. Play/Pause Lejátszás/Szünet Previous ElÅ‘zÅ‘ Invalid or non-existent file Érvénytelen, vagy nem létezÅ‘ fájl. Failed to import, no vaild music file found! Fájl érvénytelen vagy nem létezik, nem sikerült importálni! All music Összes zene OK OK Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Sikeres hozzáadás ehhez: "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next KövetkezÅ‘ MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Összes zeneszám Time added IdÅ‘ hozzáadva Album Artist ElÅ‘adó Title Cím Play All Összes lejátszása Artists Albums Custom Egyéni Search Results Songs No result found Nincs találat MusicListDialog Play All Összes lejátszása Shuffle Keverés MusicListInfoView Play queue Add to new playlist Pause Play Lejátszás Add to playlist Hozzáadás a lejátszólistához Display in file manager Megjelenítés fájlkezelÅ‘ben Remove from playlist Éltávoltás a lejátszási listából Delete from local disk Törlés a helyi lemezrÅ‘l Song info Zeneszám információ Cancel Mégse Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Törlés Are you sure you want to delete %1? Biztos, hogy törölni akarod %1 ? Are you sure you want to delete the selected %1 songs? Biztos, hogy törölni akarod a kiválasztott %1 zenét? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Biztos, hogy tötölni akarod ezt a lejátszási listát? Cancel Mégse Delete Törlés MusicListScrollArea Library Playlists MusicListView New playlist Új lejátszási lista Play Lejátszás Add to playlist Hozzáadás a lejátszólistához Display in file manager Megjelenítés fájlkezelÅ‘ben Song info Zeneszám információ Are you sure you want to delete %1? Biztos, hogy törölni akarod %1 ? Are you sure you want to delete the selected %1 songs? Biztos, hogy törölni akarod a kiválasztott %1 zenét? Remove from playlist Éltávoltás a lejátszási listából Delete from local disk Törlés a helyi lemezrÅ‘l Encoding Kódolás My Favorites Are you sure you want to delete this playlist? Biztos, hogy tötölni akarod ezt a lejátszási listát? Cancel Mégse Delete Törlés Pause Rename Ãtnevezés Deleting the current song will also delete the song files contained Az aktuális zeneszám törlésével törlésre kerül a zene fájl Unknown artist Ismeretlen elÅ‘adó Unknown album Ismeretlen album MusicListWidget No Music Nincs zeneszám No result found Nincs találat Play All Összes lejátszása Time added IdÅ‘ hozzáadva Title Cím Artist ElÅ‘adó Album name Album címe Custom Egyéni PlayListItem Are you sure you want to delete this playlist? Biztos, hogy tötölni akarod ezt a lejátszási listát? Delete Törlés Cancel Mégse PlayListView Play queue musicResult My favorites Kedvenceim Add to new playlist Pause Play Lejátszás Add to playlist Hozzáadás a lejátszólistához Display in file manager Megjelenítés fájlkezelÅ‘ben Remove from playlist Éltávoltás a lejátszási listából Remove from play queue Delete from local disk Törlés a helyi lemezrÅ‘l Encoding Kódolás Song info Zeneszám információ Cancel Mégse Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Biztos, hogy törölni akarod %1 ? Are you sure you want to delete the selected %1 songs? Biztos, hogy törölni akarod a kiválasztott %1 zenét? The song files contained will also be deleted Rename Ãtnevezés Delete Törlés Unknown artist Ismeretlen elÅ‘adó Unknown album Ismeretlen album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Ismeretlen album Unknown artist Ismeretlen elÅ‘adó PlaylistManager New playlist Új lejátszási lista Artist ElÅ‘adó Albums Artists All Music Összes zeneszám My favorites Kedvenceim Search result Keresési eredmény Play Lejátszás Music PlaylistWidget New playlist Új lejátszási lista QApplication Deepin Music Deepin zenelejátszó Music QObject Deepin Music Deepin Zene Minimize to system tray Tálcára Exit Deepin Music Kilépés a Deepin ZenébÅ‘l Exit Music Autoplay Automatikus lejátszás Enable fade in/out Halkítás engedélyezése Remember playback position Lejátszási pozíció megjegyzése Close Main Window Programablak bezárása Basic Alap Play Lejátszás Shortcuts Gyorsbillentyűk Restore Defaults Alaphelyzetbe állítás Next KövetkezÅ‘ Play/Pause Lejátszás/Szünet Previous ElÅ‘zÅ‘ Volume down HangerÅ‘ csökkentése Volume up HangerÅ‘ növelése SearchLyricsWidget Find Lyrics Title Cím Artist ElÅ‘adó Search Keresés SearchResult Search "%1" in Deepin Music Keresés: "%1" a Deepin Zenelejátszóban Music Artists Albums Shortcut Play Lejátszás Songs Playlists Settings Beállítások Play/Pause Lejátszás/Szünet Previous ElÅ‘zÅ‘ Next KövetkezÅ‘ Volume Up Volume Down Mute Favorite Kedvencek Unfavorite Song info Zeneszám információ New playlist Add music Rename playlist Remove from playlist Éltávoltás a lejátszási listából Help Display shortcuts TitlebarWidget Search Keresés deepin-music-6.0.1.54/src/music-player/translations/deepin-music_hy.ts000664 000000 000000 00000147215 13703317554 025705 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Minimize to system tray Do not ask again Cancel Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬ Confirm OK Ô¼Õ¡Õ¾ DequalizerDialog Custom Ô¸Õ¶Õ¿Ö€Õ¸Õ¾Õ« Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous Õ†Õ¡Õ­Õ¸Ö€Õ¤ Next Õ€Õ¡Õ»Õ¸Ö€Õ¤ Play/Pause Õ‡Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¥Õ¬/Ô¸Õ¶Õ¤Õ°Õ¡Õ¿Õ¥Õ¬ Favorite Lyrics Ô²Õ¡Õ¼Õ¥Ö€ Play Queue Unknown Title Unknown artist Ô±Õ¶Õ°Õ¡ÕµÕ¿ Õ¯Õ¡Õ¿Õ¡Ö€Õ¸Õ² Play Mode Playlist Õ‘Õ¡Õ¶Õ¯ List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan Ô¾Ö€Õ¸Ö‚Õ´ %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Ô±Õ¶Õ¾Õ¡Õ¶Õ¸Ö‚Õ´` Artist: Ô¿Õ¡Õ¿Õ¡Ö€Õ¸Õ²` Album: Type: Path: Unknown artist Ô±Õ¶Õ°Õ¡ÕµÕ¿ Õ¯Õ¡Õ¿Õ¡Ö€Õ¸Õ² Unknown album Ô±Õ¶Õ°Õ¡ÕµÕ¿ Õ¡Õ¬Õ¢Õ¸Õ´ Size: Basic info Duration: LoadWidget Loading... LyricWidget Find lyrics Title Ô±Õ¶Õ¾Õ¡Õ¶Õ¸Ö‚Õ´ Artist Ô¿Õ¡Õ¿Õ¡Ö€Õ¸Õ² Search Õ“Õ¶Õ¿Ö€Õ¥Õ¬ Back MUsicLyricWidget No lyrics yet MainFrame Settings Ô¿Õ¡Ö€Õ£Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ´Õ¶Õ¥Ö€ Exit Dark theme Equalizer Play/Pause Õ‡Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¥Õ¬/Ô¸Õ¶Õ¤Õ°Õ¡Õ¿Õ¥Õ¬ Previous Õ†Õ¡Õ­Õ¸Ö€Õ¤ All music OK Ô¼Õ¡Õ¾ Add playlist Add music Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Õ€Õ¡Õ»Õ¸Ö€Õ¤ MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Ô¿Õ¡Õ¿Õ¡Ö€Õ¸Õ² Title Ô±Õ¶Õ¾Õ¡Õ¶Õ¸Ö‚Õ´ Play All Õ†Õ¾Õ¡Õ£Õ¡Ö€Õ¯Õ¥Õ¬ Õ¢Õ¸Õ¬Õ¸Ö€Õ¨ Artists Albums Custom Ô¸Õ¶Õ¿Ö€Õ¸Õ¾Õ« Search Results Songs No result found MusicListDialog Play All Õ†Õ¾Õ¡Õ£Õ¡Ö€Õ¯Õ¥Õ¬ Õ¢Õ¸Õ¬Õ¸Ö€Õ¨ Shuffle MusicListInfoView Play queue Add to new playlist Pause Play ÕÕ¯Õ½Õ¥Õ¬ Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Õ‹Õ¶Õ»Õ¥Õ¬ Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬ Delete Õ‹Õ¶Õ»Õ¥Õ¬ MusicListScrollArea Library Playlists MusicListView Play ÕÕ¯Õ½Õ¥Õ¬ Are you sure you want to delete this playlist? My Favorites Cancel Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬ Delete Õ‹Õ¶Õ»Õ¥Õ¬ Pause Rename ÕŽÕ¥Ö€Õ¡Õ¶Õ¾Õ¡Õ¶Õ¥Õ¬ Unknown artist Ô±Õ¶Õ°Õ¡ÕµÕ¿ Õ¯Õ¡Õ¿Õ¡Ö€Õ¸Õ² Unknown album Ô±Õ¶Õ°Õ¡ÕµÕ¿ Õ¡Õ¬Õ¢Õ¸Õ´ MusicListWidget Play All Õ†Õ¾Õ¡Õ£Õ¡Ö€Õ¯Õ¥Õ¬ Õ¢Õ¸Õ¬Õ¸Ö€Õ¨ Title Ô±Õ¶Õ¾Õ¡Õ¶Õ¸Ö‚Õ´ Artist Ô¿Õ¡Õ¿Õ¡Ö€Õ¸Õ² Custom Ô¸Õ¶Õ¿Ö€Õ¸Õ¾Õ« PlayListItem Delete Õ‹Õ¶Õ»Õ¥Õ¬ Cancel Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬ PlayListView Play queue My favorites Add to new playlist Pause Play ÕÕ¯Õ½Õ¥Õ¬ musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename ÕŽÕ¥Ö€Õ¡Õ¶Õ¾Õ¡Õ¶Õ¥Õ¬ Delete Õ‹Õ¶Õ»Õ¥Õ¬ Unknown artist Ô±Õ¶Õ°Õ¡ÕµÕ¿ Õ¯Õ¡Õ¿Õ¡Ö€Õ¸Õ² Unknown album Ô±Õ¶Õ°Õ¡ÕµÕ¿ Õ¡Õ¬Õ¢Õ¸Õ´ PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Ô±Õ¶Õ°Õ¡ÕµÕ¿ Õ¡Õ¬Õ¢Õ¸Õ´ Unknown artist Ô±Õ¶Õ°Õ¡ÕµÕ¿ Õ¯Õ¡Õ¿Õ¡Ö€Õ¸Õ² PlaylistManager New playlist Artist Ô¿Õ¡Õ¿Õ¡Ö€Õ¸Õ² Albums Artists All Music My favorites Search result Play ÕÕ¯Õ½Õ¥Õ¬ Music QApplication Deepin Music Deepin ÔµÖ€Õ¡ÕªÕ·Õ¿Õ¡Õ¯Õ¡Õ¶ Õ†Õ¾Õ¡Õ£Õ¡Ö€Õ¯Õ«Õ¹ Music QObject Deepin Music Deepin Music Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play ÕÕ¯Õ½Õ¥Õ¬ Shortcuts Restore Defaults Next Õ€Õ¡Õ»Õ¸Ö€Õ¤ Play/Pause Õ‡Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¥Õ¬/Ô¸Õ¶Õ¤Õ°Õ¡Õ¿Õ¥Õ¬ Previous Õ†Õ¡Õ­Õ¸Ö€Õ¤ Volume down Volume up SearchLyricsWidget Find Lyrics Title Ô±Õ¶Õ¾Õ¡Õ¶Õ¸Ö‚Õ´ Artist Ô¿Õ¡Õ¿Õ¡Ö€Õ¸Õ² Search Õ“Õ¶Õ¿Ö€Õ¥Õ¬ SearchResult Music Artists Albums Shortcut Play ÕÕ¯Õ½Õ¥Õ¬ Songs Playlists Settings Ô¿Õ¡Ö€Õ£Õ¡Õ¾Õ¸Ö€Õ¸Ö‚Õ´Õ¶Õ¥Ö€ Play/Pause Õ‡Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¥Õ¬/Ô¸Õ¶Õ¤Õ°Õ¡Õ¿Õ¥Õ¬ Previous Õ†Õ¡Õ­Õ¸Ö€Õ¤ Next Õ€Õ¡Õ»Õ¸Ö€Õ¤ Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search Õ“Õ¶Õ¿Ö€Õ¥Õ¬ deepin-music-6.0.1.54/src/music-player/translations/deepin-music_id.ts000664 000000 000000 00000155745 13703317554 025670 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Mohon pilih operasi anda Exit Keluar Minimize to system tray Kecilkan ke baki sistem Do not ask again Cancel Batal Confirm OK OK DequalizerDialog Custom Kustom Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Pulihkan baku Footer Previous Sebelumnya Next Selanjutnya Play/Pause Mainkan/Jeda Favorite Favorit Lyrics Lirik Play Queue Unknown Title Judul tidak diketahui Unknown artist Artis tidak diketahui Play Mode Mode main Playlist Daftar Putar List Loop Daftar putar Single Loop Putar sekali Shuffle Acak ImportWidget Add folder Tambah folder Open Folder Add Music Scan Pindai %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 direktori musik atau seret dan lepas berkas musik untuk menambah musik Loading music, please wait... Memuat musik, mohon menunggu... InfoDialog Title: Judul: Artist: Artis: Album: Album: Type: Tipe: Path: Jejak: Unknown artist Artis tidak diketahui Unknown album Album tidak diketahui Size: Ukuran: Basic info Duration: Durasi: LoadWidget Loading... Memuat... LyricWidget Find lyrics Title Judul Artist Artis Search Cari Back Kembali MUsicLyricWidget No lyrics yet MainFrame New playlist Daftar putar baru Settings Pengaturan Exit Keluar Add folder Tambah folder Add file Tambah berkas Dark theme Tema gelap Play/Pause Mainkan/Jeda Previous Sebelumnya Invalid or non-existent file Tidak valid dan berkas tidak ada Failed to import, no vaild music file found! Gagal mengimpor, tidak ada berkas musik valid ditemukan! All music Semua musik OK OK Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Berhasil menambahkan ke "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Selanjutnya MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Semua musik Time added Waktu ditambahkan Album Artist Artis Title Judul Play All Mainkan semua Artists Albums Custom Kustom Search Results Songs No result found Tidak ada hasil ditemukan MusicListDialog Play All Mainkan semua Shuffle Acak MusicListInfoView New playlist Daftar putar baru Play queue Add to new playlist Pause Play Putar Add to playlist Tambahkan ke daftar putar Display in file manager Tampilkan dalam manajer berkas Remove from playlist Hapus dari daftar putar Delete from local disk Hapus dari disk lokal Song info Info lagu Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Hapus Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Delete Hapus MusicListScrollArea Library Playlists MusicListView New playlist Daftar putar baru Play Putar Add to playlist Tambahkan ke daftar putar Display in file manager Tampilkan dalam manajer berkas Song info Info lagu Remove from playlist Hapus dari daftar putar Delete from local disk Hapus dari disk lokal Encoding Menyandi My Favorites Are you sure you want to delete this playlist? Cancel Batalkan Delete Hapus Pause Rename Rename Deleting the current song will also delete the song files contained Menghapus lagu saat ini juga akan menghapus berkas lagu Unknown artist Artis tidak diketahui Unknown album Album tidak diketahui MusicListWidget No Music Tidak ada musik No result found Tidak ada hasil ditemukan Play All Mainkan semua Time added Waktu ditambahkan Title Judul Artist Artis Album name Nama album Custom Kustom PlayListItem Delete Hapus Cancel Batalkan PlayListView New playlist Daftar putar baru Play queue musicResult My favorites Favorit saya Add to new playlist Pause Play Putar Add to playlist Tambahkan ke daftar putar Display in file manager Tampilkan dalam manajer berkas Remove from playlist Hapus dari daftar putar Remove from play queue Delete from local disk Hapus dari disk lokal Encoding Menyandi Song info Info lagu Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename Rename Delete Hapus Unknown artist Artis tidak diketahui Unknown album Album tidak diketahui PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Album tidak diketahui Unknown artist Artis tidak diketahui PlaylistManager New playlist Daftar putar baru Artist Artis Albums Artists All Music Semua musik My favorites Favorit saya Search result Hasil pencarian Play Putar Music PlaylistWidget New playlist Daftar putar baru QApplication Deepin Music Musik Deepin Music QObject Deepin Music Musik Deepin Minimize to system tray Kecilkan ke baki sistem Exit Deepin Music Keluar Deepin Musik Exit Music Autoplay Mainkan otomatis Enable fade in/out Remember playback position Mengingat posisi playback Close Main Window Tutup Jendela Utama Basic Dasar Play Putar Shortcuts Jalan pintas Restore Defaults Pulihkan baku Next Selanjutnya Play/Pause Mainkan/Jeda Previous Sebelumnya Volume down Turunkan Volume Volume up Naikkan Volume SearchLyricsWidget Find Lyrics Title Judul Artist Artis Search Cari SearchResult Search "%1" in Deepin Music Cari "%1" dalam Musik Deepin Music Artists Albums Shortcut Play Putar Songs Playlists Settings Pengaturan Play/Pause Mainkan/Jeda Previous Sebelumnya Next Selanjutnya Volume Up Volume Down Mute Favorite Favorit Unfavorite Song info Info lagu New playlist Daftar putar baru Add music Rename playlist Remove from playlist Hapus dari daftar putar Help Display shortcuts TitlebarWidget Search Cari deepin-music-6.0.1.54/src/music-player/translations/deepin-music_it.ts000664 000000 000000 00000142061 13703317554 025673 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Esci Minimize to system tray Minimizza nella tray di Sistema Do not ask again Non chiedere nuovamente Please select your operation Seleziona l'operazione Cancel Annulla Confirm Conferma DequalizerDialog Custom Personalizza Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Ripristina i valori di default Footer Unknown Title Titolo sconosciuto Unknown artist Artista sconosciuto Previous Precedente Next Avanti Play/Pause Play/Pausa Favorite Preferiti Lyrics Lyrics Play Mode Modalità di riproduzione Play Queue Esegui sequenza List Loop Ripetizione di Gruppo Single Loop Ripetizione singola Shuffle Shuffle ImportWidget Open Folder Apri cartella Add Music Aggiungi musica Scan Ricerca %1 music directory or drag music files here Directory musicale %1 o trascina i file musicali Loading music, please wait... Caricamento brani, attendere... InfoDialog Basic info Info base Title: Titolo: Artist: Artista: Album: Album: Type: Tipo: Size: Dimensioni: Duration: Durata: Path: Percorso: Unknown artist Artista sconosciuto Unknown album Album sconosciuto LoadWidget Loading... Caricamento... LyricWidget Find lyrics Trova testi Title Titolo Artist Artista Search Cerca Back Indietro MUsicLyricWidget No lyrics yet MainFrame Add playlist Aggiungi alla Playlist Add music Aggiungi brani Equalizer Settings Impostazioni Dark theme Tema scuro Exit Esci Music is a local music player with beautiful design and simple functions. Music è un riproduttore musicale con design all'avanguardia e funzionalità semplificate. Localizzazione italiana a cura di Massimo A. Carofano Music Musica Play/Pause Play/Pausa Previous Precedente Next Avanti Successfully added to "%1" Aggiunto con successo a "%1" Already added to the playlist Già aggiunto alla Playlist 1 song added 1 brano aggiunto %1 songs added %1 brani aggiunti File is invalid or does not exist, load failed File non valido o non esistente, caricamento fallito OK OK Import failed, no valid music file found Importazione fallita, non è stato trovato un file valido All music Tutti i brani MusicListDataDelegate No songs Nessun brano 1 song 1 brano %1 songs %1 brani MusicListDataWidget No songs Nessun brano 1 album - 1 song 1 album - 1 brano %1 album - %2 songs %1 album - %2 brani %1 albums - %2 songs %1 album - %2 brani 1 artist - 1 song 1 artista - 1 brano %1 artist - %2 songs %1 artisti - %2 brani %1 artists - %2 songs %1 artisti - %2 brani 1 song 1 brano %1 songs %1 brani No search results Nessun risultato disponibile All Music Tutta la musica Time added Durata aggiunta Album Album Artist Artista Title Titolo Play All Avvia tutti Artists Artisti Albums Album Custom Personalizza Search Results Risultati di ricerca Songs Brani No result found Nessun risultato trovato MusicListDialog Play All Avvia tutti Shuffle Shuffle MusicListInfoView Play queue Esegui sequenza Add to new playlist Aggiungi ad una nuova Playlist Pause Pausa Play Play Add to playlist Aggiungi alla Playlist Display in file manager Visualizza nel file manager Remove from playlist Rimuovi dalla playlist Delete from local disk Elimina dal disco locale Song info Info brano Cancel Annulla Remove Rimuovi Are you sure you want to remove %1? Sicuro di voler eliminare %1? Are you sure you want to remove the selected %1 songs? Sicuro di voler eliminare le %1 canzoni selezionate? Delete Elimina Are you sure you want to delete %1? Sicuro di voler eliminare %1? Are you sure you want to delete the selected %1 songs? Sicuro di voler eliminare le %1 canzoni selezionate? The song files contained will also be deleted Il file del brano sarà rimosso MusicListItem Are you sure you want to delete this playlist? Sicuro di voler eliminare questa playlist? Cancel Annulla Delete Elimina MusicListScrollArea Library Libreria Playlists Playlists MusicListView My Favorites I miei Preferiti Are you sure you want to delete this playlist? Sicuro di voler eliminare questa playlist? Cancel Cancella Delete Elimina Pause Pausa Play Play Rename Rinomina PlayListView Unknown artist Artista sconosciuto Unknown album Album sconosciuto Play queue Esegui sequenza musicResult My favorites I miei preferiti Add to new playlist Aggiungi ad una nuova Playlist Pause Pausa Play Play Add to playlist Aggiungi alla Playlist Display in file manager Visualizza nel file manager Remove from playlist Rimuovi dalla playlist Remove from play queue Delete from local disk Elimina dal disco locale Encoding Encoding Song info Info brano Cancel Annulla Remove Rimuovi Are you sure you want to remove %1? Sicuro di voler eliminare %1? Are you sure you want to remove the selected %1 songs? Sicuro di voler eliminare le %1 canzoni selezionate? Delete Elimina Are you sure you want to delete %1? Sicuro di voler eliminare %1? Are you sure you want to delete the selected %1 songs? Sicuro di voler eliminare le %1 canzoni selezionate? The song files contained will also be deleted Il file del brano sarà rimosso PlayListWidget No songs Nessun brano No search results Nessun risultato disponibile Play Queue Esegui sequenza Empty Svuota 1 song 1 brano %1 songs %1 brani Playlist Unknown album Album sconosciuto Unknown artist Artista sconosciuto PlaylistManager New playlist Nuova playlist Albums Album Artists Artisti All Music Tutta la musica My favorites Preferiti Search result Risultati di ricerca Play Play Music Musica QApplication Music Musica QObject Minimize to system tray Minimizza nella tray di Sistema Exit Music Esci da Music Autoplay Autoplay Enable fade in/out Abilita dissolvenza iniziale/finale Remember playback position Ricorda l'avanzamento della riproduzione Close Main Window Chiudi la finestra principale Basic Base Play Play Shortcuts Scorciatoie Restore Defaults Ripristina i valori di default Next Avanti Play/Pause Play/Pausa Previous Precedente Volume down Volume meno Volume up Volume più SearchLyricsWidget Find Lyrics Trova testi Title Titolo Artist Artista Search Cerca SearchResult Music Musica Artists Artisti Albums Album Shortcut Play Play Songs Brani Playlists Playlists Settings Impostazioni Play/Pause Play/Pausa Previous Precedente Next Avanti Volume Up Volume Più Volume Down Volume Meno Mute Muto Favorite Preferiti Unfavorite Rimuovi dai preferiti Song info Info brano New playlist Nuova playlist Add music Aggiungi brani Rename playlist Rinomina playlist Remove from playlist Rimuovi dalla playlist Help Aiuto Display shortcuts Visualizza scorciatoie TitlebarWidget Search Cerca deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ja.ts000664 000000 000000 00000151060 13703317554 025650 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit 終了 Minimize to system tray Do not ask again Cancel キャンセル Confirm OK OK DequalizerDialog Custom カスタム Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous å‰ã¸ Next 次㸠Play/Pause å†ç”Ÿãƒ»ä¸€æ™‚åœæ­¢ Favorite ãŠæ°—ã«å…¥ã‚Š Lyrics 歌詞 Play Queue Unknown Title 䏿˜Žãªã‚¿ã‚¤ãƒˆãƒ« Unknown artist 䏿˜Žã®ã‚¢ãƒ¼ãƒã‚¹ãƒˆ Play Mode Playlist プレイリスト List Loop Single Loop Shuffle シャッフル ImportWidget Add folder フォルダーを追加 Open Folder Add Music Scan 検索 %1 music directory or drag music files here Loading music, please wait... 音楽を読ã¿è¾¼ã‚“ã§ã„ã¾ã™ã€ãŠå¾…ã¡ä¸‹ã•ã„... InfoDialog Title: タイトル Artist: アーティスト: Album: アルãƒãƒ  Type: 種類: Path: パス: Unknown artist 䏿˜Žã®ã‚¢ãƒ¼ãƒã‚¹ãƒˆ Unknown album 䏿˜Žã®ã‚¢ãƒ«ãƒãƒ  Size: サイズ: Basic info Duration: LoadWidget Loading... LyricWidget Find lyrics Title タイトル Artist アーティスト Search 検索 Back 戻る MUsicLyricWidget No lyrics yet MainFrame Settings 設定 Exit 終了 Add folder フォルダーを追加 Add file ファイルã®è¿½åŠ  Dark theme Play/Pause å†ç”Ÿãƒ»ä¸€æ™‚åœæ­¢ Previous å‰ã¸ All music OK OK Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next 次㸠MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music å…¨ã¦ã®éŸ³æ¥½ Time added Album Artist アーティスト Title タイトル Play All ã™ã¹ã¦å†ç”Ÿ Artists Albums Custom カスタム Search Results Songs No result found MusicListDialog Play All ã™ã¹ã¦å†ç”Ÿ Shuffle シャッフル MusicListInfoView Play queue Add to new playlist Pause Play å†ç”Ÿ Add to playlist Display in file manager Remove from playlist プレイリストã‹ã‚‰å‰Šé™¤ Delete from local disk Song info 音楽情報 Cancel キャンセル Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete 削除 Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel キャンセル Delete 削除 MusicListScrollArea Library Playlists MusicListView Play å†ç”Ÿ Song info 音楽情報 Remove from playlist プレイリストã‹ã‚‰å‰Šé™¤ Encoding エンコーディング My Favorites Are you sure you want to delete this playlist? Cancel キャンセル Delete 削除 Pause Rename åå‰ã®å¤‰æ›´ Unknown artist 䏿˜Žã®ã‚¢ãƒ¼ãƒã‚¹ãƒˆ Unknown album 䏿˜Žã®ã‚¢ãƒ«ãƒãƒ  MusicListWidget No Music éŸ³æ¥½ã¯æœ‰ã‚Šã¾ã›ã‚“ Play All ã™ã¹ã¦å†ç”Ÿ Title タイトル Artist アーティスト Custom カスタム PlayListItem Delete 削除 Cancel キャンセル PlayListView Play queue musicResult My favorites Add to new playlist Pause Play å†ç”Ÿ Add to playlist Display in file manager Remove from playlist プレイリストã‹ã‚‰å‰Šé™¤ Remove from play queue Delete from local disk Encoding エンコーディング Song info 音楽情報 Cancel キャンセル Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename åå‰ã®å¤‰æ›´ Delete 削除 Unknown artist 䏿˜Žã®ã‚¢ãƒ¼ãƒã‚¹ãƒˆ Unknown album 䏿˜Žã®ã‚¢ãƒ«ãƒãƒ  PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album 䏿˜Žã®ã‚¢ãƒ«ãƒãƒ  Unknown artist 䏿˜Žã®ã‚¢ãƒ¼ãƒã‚¹ãƒˆ PlaylistManager New playlist Artist アーティスト Albums Artists All Music å…¨ã¦ã®éŸ³æ¥½ My favorites Search result Play å†ç”Ÿ Music QApplication Deepin Music Deepin音楽プレイヤー Music QObject Deepin Music Deepin Music Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic ベーシック Play å†ç”Ÿ Shortcuts ショートカット Restore Defaults Next 次㸠Play/Pause å†ç”Ÿãƒ»ä¸€æ™‚åœæ­¢ Previous å‰ã¸ Volume down 音é‡ã‚’下ã’ã‚‹ Volume up 音é‡ã‚’上ã’ã‚‹ SearchLyricsWidget Find Lyrics Title タイトル Artist アーティスト Search 検索 SearchResult Music Artists Albums Shortcut Play å†ç”Ÿ Songs Playlists Settings 設定 Play/Pause å†ç”Ÿãƒ»ä¸€æ™‚åœæ­¢ Previous å‰ã¸ Next 次㸠Volume Up Volume Down Mute Favorite ãŠæ°—ã«å…¥ã‚Š Unfavorite Song info 音楽情報 New playlist Add music Rename playlist Remove from playlist プレイリストã‹ã‚‰å‰Šé™¤ Help Display shortcuts TitlebarWidget Search 検索 deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ko.ts000664 000000 000000 00000143036 13703317554 025673 0ustar00rootroot000000 000000 CloseConfirmDialog Exit 종료 Minimize to system tray 시스템 트레ì´ë¡œ 최소화 Do not ask again 다시 묻지 않기 Please select your operation ìž‘ì—…ì„ ì„ íƒí•˜ì‹­ì‹œì˜¤ Cancel 취소 Confirm 확정 DequalizerDialog Custom ì‚¬ìš©ìž ì§€ì • Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults 기본값 ë³µì› Footer Unknown Title 알 수 없는 제목 Unknown artist 알 수 없는 아티스트 Previous ì´ì „ Next ë‹¤ìŒ Play/Pause 재ìƒ/ì¼ì‹œì •ì§€ Favorite ì¦ê²¨ì°¾ê¸° Lyrics 가사 Play Mode ìž¬ìƒ ëª¨ë“œ Play Queue ìž¬ìƒ ëŒ€ê¸°ì—´ List Loop ëª©ë¡ ë°˜ë³µ Single Loop 한곡 반복 Shuffle 섞기 ImportWidget Open Folder Add Music Scan 스캔 %1 music directory or drag music files here %1 ìŒì•… 디렉토리 ë˜ëŠ” ìŒì•… 파ì¼ì„ 여기로 ëŒì–´ë‹¤ 놓습니다 Loading music, please wait... ìŒì•…ì„ ë¡œë“œí•˜ëŠ” 중, 잠시 기다리십시오... InfoDialog Basic info 기본 ì •ë³´ Title: 제목: Artist: 아티스트: Album: 앨범: Type: 종류: Size: í¬ê¸°: Duration: ìž¬ìƒ ì‹œê°„: Path: 경로: Unknown artist 알 수 없는 아티스트 Unknown album 알 수 없는 앨범 LoadWidget Loading... 불러오는 중... LyricWidget Find lyrics 가사 찾기 Title 제목 Artist 아티스트 Search 검색 Back 뒤로 MUsicLyricWidget No lyrics yet MainFrame Add playlist 재ìƒëª©ë¡ 추가 Add music ìŒì•… 추가 Equalizer Settings 설정 Dark theme ì–´ë‘ìš´ ìƒ‰ìƒ í…Œë§ˆ Exit 종료 Music is a local music player with beautiful design and simple functions. ìŒì•…ì€ ì•„ë¦„ë‹¤ìš´ ë””ìžì¸ê³¼ 간단한 ê¸°ëŠ¥ì„ ê°–ì¶˜ 로컬 ìŒì•… 플레ì´ì–´ìž…니다. Music ìŒì•… Play/Pause 재ìƒ/ì¼ì‹œì •ì§€ Previous ì´ì „ Next ë‹¤ìŒ Successfully added to "%1" %1ì— ì„±ê³µì ìœ¼ë¡œ ì¶”ê°€ë¨ Already added to the playlist 재ìƒëª©ë¡ì— ì´ë¯¸ ì¶”ê°€ë¨ 1 song added 노래 1곡 ì¶”ê°€ë¨ %1 songs added 노래 %1곡 ì¶”ê°€ë¨ File is invalid or does not exist, load failed 파ì¼ì´ 잘못ë˜ì—ˆê±°ë‚˜ 존재하지 않습니다. 불러오기 실패 OK í™•ì¸ Import failed, no valid music file found 가져오기 실패, 올바른 ìŒì•… 파ì¼ì„ ì°¾ì„ ìˆ˜ 없습니다 All music 모든 ìŒì•… MusicListDataDelegate No songs 노래 ì—†ìŒ 1 song 노래 1곡 %1 songs 노래 %1곡 MusicListDataWidget No songs 노래 ì—†ìŒ 1 album - 1 song 앨범 1장 - 노래 1곡 %1 album - %2 songs 앨범 %1장 - 노래 %2곡 %1 albums - %2 songs 앨범 %1장 - 노래 %2곡 1 artist - 1 song 아티스트 1명 - 노래 1곡 %1 artist - %2 songs 아티스트 %1명 - 노래 %2곡 %1 artists - %2 songs 아티스트 %1명 - 노래 %2곡 1 song 노래 1곡 %1 songs 노래 %1곡 No search results 검색결과가 없습니다. All Music 모든 ìŒì•… Time added ì¶”ê°€ëœ ì‹œê°„ Album 앨범 Artist 아티스트 Title 제목 Play All ëª¨ë‘ ìž¬ìƒ Artists 아티스트 Albums 앨범 Custom ì‚¬ìš©ìž ì§€ì • Search Results Songs 노래 No result found 결과를 ì°¾ì„ ìˆ˜ ì—†ìŒ MusicListDialog Play All ëª¨ë‘ ìž¬ìƒ Shuffle 섞기 MusicListInfoView Play queue ìž¬ìƒ ëŒ€ê¸°ì—´ Add to new playlist 새 ìž¬ìƒ ëª©ë¡ì— 추가 Pause ì¼ì‹œì •ì§€ Play ìž¬ìƒ Add to playlist ìž¬ìƒ ëª©ë¡ì— 추가 Display in file manager íŒŒì¼ ê´€ë¦¬ìžì— 표시 Remove from playlist ìž¬ìƒ ëª©ë¡ì—서 제거 Delete from local disk 로컬 디스í¬ì—서 ì‚­ì œ Song info 노래 ì •ë³´ Cancel 취소 Remove 제거 Are you sure you want to remove %1? %1ì„(를) 제거 하시겠습니까? Are you sure you want to remove the selected %1 songs? ì„ íƒí•œ %1 ê³¡ì„ ì‚­ì œ 하시겠습니까? Delete ì‚­ì œ Are you sure you want to delete %1? %1ì„(를) 삭제하시겠습니까? Are you sure you want to delete the selected %1 songs? ì„ íƒí•œ %1 노래를 삭제하시겠습니까? The song files contained will also be deleted í¬í•¨ëœ 노래 파ì¼ë„ ì‚­ì œë©ë‹ˆë‹¤ MusicListItem Are you sure you want to delete this playlist? ì´ ìž¬ìƒ ëª©ë¡ì„ 삭제하시겠습니까? Cancel 취소 Delete ì‚­ì œ MusicListScrollArea Library ë¼ì´ë¸ŒëŸ¬ë¦¬ Playlists 재ìƒëª©ë¡ MusicListView My Favorites Are you sure you want to delete this playlist? ì´ ìž¬ìƒ ëª©ë¡ì„ 삭제하시겠습니까? Cancel 취소 Delete ì‚­ì œ Pause ì¼ì‹œì •ì§€ Play ìž¬ìƒ Rename ì´ë¦„ 변경 PlayListView Unknown artist 알 수 없는 아티스트 Unknown album 알 수없는 앨범 Play queue ìž¬ìƒ ëŒ€ê¸°ì—´ musicResult My favorites ë‚´ ì¦ê²¨ì°¾ê¸° Add to new playlist 새 ìž¬ìƒ ëª©ë¡ì— 추가 Pause ì¼ì‹œì •ì§€ Play ìž¬ìƒ Add to playlist ìž¬ìƒ ëª©ë¡ì— 추가 Display in file manager íŒŒì¼ ê´€ë¦¬ìžì— 표시 Remove from playlist ìž¬ìƒ ëª©ë¡ì—서 제거 Remove from play queue Delete from local disk 로컬 디스í¬ì—서 ì‚­ì œ Encoding ì¸ì½”딩 Song info 노래 ì •ë³´ Cancel 취소 Remove 제거 Are you sure you want to remove %1? %1ì„(를) 제거 하시겠습니까? Are you sure you want to remove the selected %1 songs? ì„ íƒí•œ %1 ê³¡ì„ ì‚­ì œ 하시겠습니까? Delete ì‚­ì œ Are you sure you want to delete %1? %1ì„(를) 삭제하시겠습니까? Are you sure you want to delete the selected %1 songs? ì„ íƒí•œ %1 노래를 삭제하시겠습니까? The song files contained will also be deleted í¬í•¨ëœ 노래 파ì¼ë„ ì‚­ì œë©ë‹ˆë‹¤ PlayListWidget No songs 노래 ì—†ìŒ No search results 검색결과가 없습니다. Play Queue ìž¬ìƒ ëŒ€ê¸°ì—´ Empty 비우기 1 song 노래 1곡 %1 songs 노래 %1곡 Playlist Unknown album 알 수없는 앨범 Unknown artist 알 수 없는 아티스트 PlaylistManager New playlist 새 재ìƒëª©ë¡ Albums 앨범 Artists 아티스트 All Music 모든 ìŒì•… My favorites ë‚´ ì¦ê²¨ì°¾ê¸° Search result 검색 ê²°ê³¼ Play ìž¬ìƒ Music ìŒì•… QApplication Music ìŒì•… QObject Minimize to system tray 시스템 트레ì´ë¡œ 최소화 Exit Music ìŒì•… 종료 Autoplay ìžë™ ìž¬ìƒ Enable fade in/out 페ì´ë“œ ì¸/아웃 활성화 Remember playback position ìž¬ìƒ ìœ„ì¹˜ 기억 Close Main Window 기본 ì°½ 닫기 Basic 기본 Play ìž¬ìƒ Shortcuts 단축키 Restore Defaults 기본값 ë³µì› Next ë‹¤ìŒ Play/Pause 재ìƒ/ì¼ì‹œì •ì§€ Previous ì´ì „ Volume down ìŒëŸ‰ 줄ì´ê¸° Volume up ìŒëŸ‰ 키우기 SearchLyricsWidget Find Lyrics 가사 찾기 Title 제목 Artist 아티스트 Search 검색 SearchResult Music ìŒì•… Artists 아티스트 Albums 앨범 Shortcut Play ìž¬ìƒ Songs 노래 Playlists 재ìƒëª©ë¡ Settings 설정 Play/Pause 재ìƒ/ì¼ì‹œì •ì§€ Previous ì´ì „ Next ë‹¤ìŒ Volume Up ìŒëŸ‰ 높ì´ê¸° Volume Down 볼륨 내리기 Mute ìŒì†Œê±° Favorite ì¦ê²¨ì°¾ê¸° Unfavorite ì¦ê²¨ì°¾ì§€ ì•ŠìŒ Song info 노래 ì •ë³´ New playlist 새 재ìƒëª©ë¡ Add music ìŒì•… 추가 Rename playlist 재ìƒëª©ë¡ ì´ë¦„변경 Remove from playlist ìž¬ìƒ ëª©ë¡ì—서 제거 Help ë„ì›€ë§ Display shortcuts 단축키 표시 TitlebarWidget Search 검색 deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ku_IQ.ts000664 000000 000000 00000156546 13703317554 026304 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Ji kerema xwe çalakiya ku tu dixwazî hilbijêre Exit Derkeve Minimize to system tray Li sêniya pergalê biçûk bike Do not ask again Cancel Jê bibe Confirm OK BaÅŸ e DequalizerDialog Custom Taybet Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Mîhengên Destpêkê Dîsa Bîne Footer Previous PaÅŸve Next Pêşve Play/Pause Lêde/Bisekinîne Favorite Bijare Lyrics Peyvên stranê Play Queue Unknown Title Sernivîs Nayê Zanîn Unknown artist Hunermend Nayê Zanîn Play Mode Moda Lêdanê Playlist Lîsteya Lêdanê List Loop Çerxa Lîsteyê Single Loop Çerxa Stranê Shuffle Li hev bide ImportWidget Add folder Peldankek tevlî bike Open Folder Add Music Scan Åžeh bike %1 music directory or drag music files here %1 music directory or drag & drop music file to add music Ji bo tevlîkirina peldanka mûzîkê %1 an jî pela stranê bigirin û bikişînin vir Loading music, please wait... Mûzîk tê barkîrîn, ji kerema xwe bisekine... InfoDialog Title: Sernivîs: Artist: Hunermend: Album: Album: Type: Cûre: Path: Rê: Unknown artist Hunermend nayê zanîn Unknown album Album nayê zanîn Size: Hecîm: Basic info Duration: Dirîjahî: LoadWidget Loading... Tê barkirin... LyricWidget Find lyrics Title Sernivîs Artist Hunermend Search Lê bigere Back PaÅŸve MUsicLyricWidget No lyrics yet MainFrame New playlist Lîsteya lêdanê ya nû Settings Mîheng Exit Derkeve Add folder Peldankek tevlî bike Add file Pelek tevlî bike Dark theme Temaya tarî Play/Pause Lêxe/Bisekinîne Previous PaÅŸve Invalid or non-existent file Dosye ya nederbasdar e yan jî nehat dîtin! Failed to import, no vaild music file found! Nebû bê navanîn, dosyeke derbasdar nehat dîtin! All music Hemû mûzîk OK BaÅŸ e Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" "%1" ser wê hat tevlîkirin Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Pêşve MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Hemû Mûzîk Time added Dem hat tevlîkirin Album Artist Hunermend Title Sernivîs Play All Hemû Lê de Artists Albums Custom Taybet Search Results Songs No result found Tu encam nehat dîtin MusicListDialog Play All Hemû Lê de Shuffle Li hev bide MusicListInfoView New playlist Lîsteya lêdanê ya nû Play queue Add to new playlist Pause Play Lêde Add to playlist Tevlî lîsteya lêdanê bike Display in file manager Di rêvebira dosyeyê de rê bide Remove from playlist Ji lîsteya lêdanê rake Delete from local disk Ji dîska xwecihî bibe Song info Agahiya stranê Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Jê bibe Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Delete Jê bibe MusicListScrollArea Library Playlists MusicListView New playlist Lîsteya lêdanê ya nû Play Lêde Add to playlist Tevlî lîsteya lêdanê bike Display in file manager Di rêvebira dosyeyê de rê bide Song info Agahiya stranê Remove from playlist Ji lîsteya lêdanê rake Delete from local disk Ji dîska xwecihî bibe Encoding Kodkirin My Favorites Are you sure you want to delete this playlist? Cancel Betal bike Delete Jê bibe Pause Rename Dîsa nav lê bide Deleting the current song will also delete the song files contained Jêbirina strana derbasdar dê pelên naveroka stranê jî jê bibe. Unknown artist Hunermend Nayê Zanîn Unknown album Album nayê zanîn MusicListWidget No Music Mûzîk tune ye No result found Tu encam nehat dîtin Play All Hemû Lê de Time added Dem hat tevlîkirin Title Sernivîs Artist Hunermend Album name Navê albûm Custom Taybet PlayListItem Delete Jê bibe Cancel Betal bike PlayListView New playlist Lîsteya lêdanê ya nû Play queue musicResult My favorites Bijareyên min Add to new playlist Pause Play Lêde Add to playlist Tevlî lîsteya lêdanê bike Display in file manager Di rêvebira dosyeyê de rê bide Remove from playlist Ji lîsteya lêdanê rake Remove from play queue Delete from local disk Ji dîska xwecihî bibe Encoding Kodkirin Song info Agahiya stranê Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename Dîsa nav lê bide Delete Jê bibe Unknown artist Unknown album Album nayê zanîn PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Album nayê zanîn Unknown artist PlaylistManager New playlist Lîsteya lêdanê ya nû Artist Hunermend Albums Artists All Music Hemû Mûzîk My favorites Bijareyên min Search result Encamên lêgerînê Play Lêde Music PlaylistWidget New playlist Lîsteya lêdanê ya nû QApplication Deepin Music Deepin Mûzîk Music QObject Deepin Music Deepin Mûzîk Minimize to system tray Li sêniya pergalê biçûk bike Exit Deepin Music Ji Deepin Mûzîkê derkeve Exit Music Autoplay Jixweberî lê de Enable fade in/out Remember playback position Cihê lêdanê bi bîr bîne Close Main Window Paceya Bingehîn Bigire Basic Bingehîn Play Lêde Shortcuts Kurtebirî Restore Defaults Mîhengên Destpêkê Dîsa Bîne Next Pêşve Play/Pause Lêxe/Bisekinîne Previous PaÅŸve Volume down Deng dîne Volume up Deng rake SearchLyricsWidget Find Lyrics Title Sernivîs Artist Hunermend Search Lê bigere SearchResult Search "%1" in Deepin Music  "%1" li ser Deepin Mûzîkê bigere Music Artists Albums Shortcut Play Lêde Songs Playlists Settings Mîheng Play/Pause Previous PaÅŸve Next Pêşve Volume Up Volume Down Mute Favorite Bijare Unfavorite Song info Agahiya stranê New playlist Lîsteya lêdanê ya nû Add music Rename playlist Remove from playlist Ji lîsteya lêdanê rake Help Display shortcuts TitlebarWidget Search Lê bigere deepin-music-6.0.1.54/src/music-player/translations/deepin-music_lt.ts000664 000000 000000 00000161314 13703317554 025700 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Pasirinkite operacijÄ… Exit IÅ¡eiti Minimize to system tray Suskleisti į sistemos dÄ—klÄ… Do not ask again Daugiau nebeklausti Cancel Atsisakyti Confirm OK Gerai DequalizerDialog Custom Pasirinktinai Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Atkurti numatytuosius Footer Previous Ankstesnis Next Kitas Play/Pause Groti/Pristabdyti Favorite MÄ—gstama Lyrics Dainų žodžiai Play Queue Unknown Title Nežinomas pavadinimas Unknown artist Nežinomas atlikÄ—jas Play Mode AtkÅ«rimo veiksena Playlist GrojaraÅ¡tis List Loop SÄ…raÅ¡o kartojimas Single Loop Pavienio kartojimas Shuffle MaiÅ¡yti ImportWidget Add folder PridÄ—ti aplankÄ… Open Folder Add Music Scan PeržiÅ«rÄ—kite %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 muzikos katalogÄ… arba vilkite muzikinius failus, norÄ—dami pridÄ—ti muzikÄ… Loading music, please wait... Muzika įkeliama, praÅ¡ome palaukti... InfoDialog Title: Pavadinimas: Artist: AtlikÄ—jas: Album: Albumas: Type: Tipas: Path: Kelias: Unknown artist Nežinomas atlikÄ—jas Unknown album Nežinomas albumas Size: Dydis: Basic info Duration: TrukmÄ—: LoadWidget Loading... Ä®keliama... LyricWidget Find lyrics Rasti dainos žodžius Title Pavadinimas Artist AtlikÄ—jas Search IeÅ¡koti Back Atgal MUsicLyricWidget No lyrics yet MainFrame New playlist Naujas grojaraÅ¡tis Settings Nustatymai Exit IÅ¡eiti Add folder PridÄ—ti aplankÄ… Add file PridÄ—ti failÄ… Dark theme Tamsi tema Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. Deepin muzikos grotuvas yra patrauklus ir paprastas muzikos grotuvas, atkuriantis vietinius garso įraÅ¡us. Jis palaiko dainos žodžių peržiÅ«rÄ… atkÅ«rimo metu, nenuostolingųjų garso įrašų atkÅ«rimÄ… bei grojaraÅ¡Äio tinkinimÄ… ir t.t. Play/Pause Groti/Pristabdyti Previous Ankstesnis Invalid or non-existent file Failas yra neteisingas arba jo nÄ—ra Failed to import, no vaild music file found! Nepavyko importuoti, nÄ—rasta jokio teisingo muzikinio failo! All music Visa muzika OK Gerai Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" SÄ—kmingai pridÄ—ta į "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Kitas MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Visa muzika Time added PridÄ—jimo laikas Album Artist AtlikÄ—jas Title Pavadinimas Play All Groti visus Artists Albums Custom Pasirinktinai Search Results Songs No result found Rezultatų nerasta MusicListDialog Play All Groti visus Shuffle MaiÅ¡yti MusicListInfoView New playlist Naujas grojaraÅ¡tis Play queue Add to new playlist Pause Play Groti Add to playlist PridÄ—ti į grojaraÅ¡tį Display in file manager Rodyti failų tvarkytuvÄ—je Remove from playlist Å alinti iÅ¡ grojaraÅ¡Äio Delete from local disk IÅ¡trinti iÅ¡ vietinio disko Song info Dainos informacija Cancel Atsisakyti Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete IÅ¡trinti Are you sure you want to delete %1? Ar tikrai norite iÅ¡trinti %1? Are you sure you want to delete the selected %1 songs? Ar tikrai norite iÅ¡trinti %1 pasirinktas dainas? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Ar tikrai norite iÅ¡trinti šį grojaraÅ¡tį? Cancel Atsisakyti Delete IÅ¡trinti MusicListScrollArea Library Playlists MusicListView New playlist Naujas grojaraÅ¡tis Play Groti Add to playlist PridÄ—ti į grojaraÅ¡tį Display in file manager Rodyti failų tvarkytuvÄ—je Song info Dainos informacija Are you sure you want to delete %1? Ar tikrai norite iÅ¡trinti %1? Are you sure you want to delete the selected %1 songs? Ar tikrai norite iÅ¡trinti %1 pasirinktas dainas? Remove from playlist Å alinti iÅ¡ grojaraÅ¡Äio Delete from local disk IÅ¡trinti iÅ¡ vietinio disko Encoding KoduotÄ— My Favorites Are you sure you want to delete this playlist? Ar tikrai norite iÅ¡trinti šį grojaraÅ¡tį? Cancel Atsisakyti Delete IÅ¡trinti Pause Rename Pervadinti Deleting the current song will also delete the song files contained IÅ¡trinus esamÄ… dainÄ…, taip pat bus iÅ¡trinti turimi dainos failai Unknown artist Nežinomas atlikÄ—jas Unknown album Nežinomas albumas MusicListWidget No Music NÄ—ra muzikos No result found Rezultatų nerasta Play All Groti visus Time added PridÄ—jimo laikas Title Pavadinimas Artist AtlikÄ—jas Album name Albumo pavadinimas Custom Pasirinktinai PlayListItem Are you sure you want to delete this playlist? Ar tikrai norite iÅ¡trinti šį grojaraÅ¡tį? Delete IÅ¡trinti Cancel Atsisakyti PlayListView New playlist Naujas grojaraÅ¡tis Play queue musicResult My favorites Mano mÄ—gstamos Add to new playlist Pause Play Groti Add to playlist PridÄ—ti į grojaraÅ¡tį Display in file manager Rodyti failų tvarkytuvÄ—je Remove from playlist Å alinti iÅ¡ grojaraÅ¡Äio Remove from play queue Delete from local disk IÅ¡trinti iÅ¡ vietinio disko Encoding KoduotÄ— Song info Dainos informacija Cancel Atsisakyti Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Ar tikrai norite iÅ¡trinti %1? Are you sure you want to delete the selected %1 songs? Ar tikrai norite iÅ¡trinti %1 pasirinktas dainas? The song files contained will also be deleted Rename Pervadinti Delete IÅ¡trinti Unknown artist Nežinomas atlikÄ—jas Unknown album Nežinomas albumas PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Nežinomas albumas Unknown artist Nežinomas atlikÄ—jas PlaylistManager New playlist Naujas grojaraÅ¡tis Artist AtlikÄ—jas Albums Artists All Music Visa muzika My favorites Mano mÄ—gstamos Search result PaieÅ¡kos rezultatai Play Groti Music PlaylistWidget New playlist Naujas grojaraÅ¡tis QApplication Deepin Music Deepin muzika Music QObject Deepin Music Deepin muzika Minimize to system tray Suskleisti į sistemos dÄ—klÄ… Exit Deepin Music IÅ¡eiti iÅ¡ Deepin muzikos Exit Music Autoplay Automatinis atkÅ«rimas Enable fade in/out Ä®jungti laipsniÅ¡kÄ… stiprÄ—jimÄ…/iÅ¡nykimÄ… Remember playback position Prisiminti atkÅ«rimo vietÄ… Close Main Window Užverti pagrindinį langÄ… Basic Pagrindiniai Play Groti Shortcuts Trumpiniai Restore Defaults Atkurti numatytuosius Next Kitas Play/Pause Groti/Pristabdyti Previous Ankstesnis Volume down Tildyti Volume up Garsinti SearchLyricsWidget Find Lyrics Title Pavadinimas Artist AtlikÄ—jas Search IeÅ¡koti SearchResult Search "%1" in Deepin Music IeÅ¡koti "%1" programoje Deepin muzika Music Artists Albums Shortcut Play Groti Songs Playlists Settings Nustatymai Play/Pause Groti/Pristabdyti Previous Ankstesnis Next Kitas Volume Up Volume Down Mute Favorite MÄ—gstama Unfavorite Song info Dainos informacija New playlist Naujas grojaraÅ¡tis Add music Rename playlist Remove from playlist Å alinti iÅ¡ grojaraÅ¡Äio Help Display shortcuts TitlebarWidget Search IeÅ¡koti deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ml.ts000664 000000 000000 00000144343 13703317554 025674 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit à´ªàµà´±à´¤àµà´¤àµ‡à´•àµà´•ൠകടകàµà´•àµà´• Minimize to system tray Do not ask again Cancel റദàµà´¦à´¾à´•àµà´•àµà´• Confirm DequalizerDialog Custom à´•à´¸àµà´±àµà´±à´‚ Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous Next à´…à´Ÿàµà´¤àµà´¤à´¤àµ Play/Pause Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Artist: Album: Type: Path: Unknown artist Unknown album Size: Basic info Duration: LoadWidget Loading... LyricWidget Find lyrics Title Artist Search തിരയàµà´• Back MUsicLyricWidget No lyrics yet MainFrame Settings Exit à´ªàµà´±à´¤àµà´¤àµ‡à´•àµà´•ൠകടകàµà´•àµà´• Dark theme Equalizer Play/Pause Previous All music OK Add playlist Add music Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next à´…à´Ÿàµà´¤àµà´¤à´¤àµ MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom à´•à´¸àµà´±àµà´±à´‚ Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel റദàµà´¦à´¾à´•àµà´•àµà´• Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete നീകàµà´•à´‚ ചെയàµà´¯àµà´• Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel റദàµà´¦à´¾à´•àµà´•àµà´• Delete നീകàµà´•à´‚ ചെയàµà´¯àµà´• MusicListScrollArea Library Playlists MusicListView Play Are you sure you want to delete this playlist? My Favorites Cancel റദàµà´¦à´¾à´•àµà´•àµà´• Delete നീകàµà´•à´‚ ചെയàµà´¯àµà´• Pause Rename MusicListWidget Custom à´•à´¸àµà´±àµà´±à´‚ PlayListItem Delete നീകàµà´•à´‚ ചെയàµà´¯àµà´• Cancel റദàµà´¦à´¾à´•àµà´•àµà´• PlayListView Play queue My favorites Add to new playlist Pause Play musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel റദàµà´¦à´¾à´•àµà´•àµà´• Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Delete നീകàµà´•à´‚ ചെയàµà´¯àµà´• Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Music QApplication Music QObject Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Shortcuts Restore Defaults Next à´…à´Ÿàµà´¤àµà´¤à´¤àµ Play/Pause Previous Volume down Volume up SearchLyricsWidget Find Lyrics Title Artist Search തിരയàµà´• SearchResult Music Artists Albums Shortcut Play Songs Playlists Settings Play/Pause Previous Next à´…à´Ÿàµà´¤àµà´¤à´¤àµ Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search തിരയàµà´• deepin-music-6.0.1.54/src/music-player/translations/deepin-music_mn.ts000664 000000 000000 00000160750 13703317554 025676 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation ҮйлдлÑÑ Ñонгоно уу Exit Гарах Minimize to system tray СиÑтем мѳрѳнд шилжүүлÑÑ… Do not ask again Cancel Цуцлах Confirm OK ЗРDequalizerDialog Custom Дурын Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Ðнхдагч утга ÑÑргÑÑÑ… Footer Previous Ѳмнѳх Next Дараах Play/Pause Тоглуулах/ЗогÑоох Favorite Дуртай Lyrics Дууны үг Play Queue Unknown Title Тодорхойгүй нÑÑ€ Unknown artist Тодорхойгүй уран бүтÑÑлч Play Mode Тоглох горим Playlist ЖагÑаалт List Loop Давтах жагÑаалт Single Loop ÐÑгийг давт Shuffle Холих ImportWidget Add folder Ð¥Ð°Ð²Ñ‚Ð°Ñ Ð½ÑмÑÑ… Open Folder Add Music Scan Шүүх %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 Ñ…Ð°Ð²Ñ‚Ð°Ñ ÑÑвÑл дуугаа чирч оруулна уу Loading music, please wait... Уншиж байна, түр хүлÑÑÐ½Ñ Ò¯Ò¯... InfoDialog Title: Гарчиг: Artist: Уран бүтÑÑлч: Album: Цомог: Type: Тѳрѳл: Path: Зам: Unknown artist Тодорхойгүй уран бүтÑÑлч Unknown album Тодорхойгүй цомог Size: Ð¥ÑмжÑÑ: Basic info Duration: ҮргÑлжлÑÑ… хугацаа: LoadWidget Loading... Уншиж байна... LyricWidget Find lyrics Title Гарчиг Artist Уран бүтÑÑлч Search Хайх Back Буцах MUsicLyricWidget No lyrics yet MainFrame New playlist Ð¨Ð¸Ð½Ñ Ð¶Ð°Ð³Ñаалт Settings Тохиргоо Exit Гарах Add folder Ð¥Ð°Ð²Ñ‚Ð°Ñ Ð½ÑмÑÑ… Add file Файл нÑмÑÑ… Dark theme Бараан загвар Play/Pause Тоглуулах/ЗогÑоох Previous Ѳмнѳх Invalid or non-existent file Ðлдаатай ÑÑвÑл байхгүй файл Failed to import, no vaild music file found! Импортолж чадÑангүй, хөгжмийн файл олдÑонгүй! All music Бүх хѳгжим OK ЗРAdd playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" "%1" амжилттай нÑмлÑÑ Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Дараах MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Бүх хѳгжим Time added ÐÑмÑÑн огноо Album Artist Уран бүтÑÑлч Title Гарчиг Play All Бүгдийг тоглуул Artists Albums Custom Дурын Search Results Songs No result found Үр дүн олдÑонгүй MusicListDialog Play All Бүгдийг тоглуул Shuffle Холих MusicListInfoView New playlist Ð¨Ð¸Ð½Ñ Ð¶Ð°Ð³Ñаалт Play queue Add to new playlist Pause Play Тоглуулах Add to playlist ЖагÑаалтад нÑмÑÑ… Display in file manager Файл менежерт харах Remove from playlist ЖагÑÐ°Ð°Ð»Ñ‚Ð°Ð°Ñ Ñ…Ð°Ñах Delete from local disk Ѳѳр дÑÑÑ€ÑÑÑ ÑƒÑтгах Song info Дууны мÑдÑÑлÑл Cancel Цуцлах Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete УÑтгах Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Цуцлах Delete УÑтгах MusicListScrollArea Library Playlists MusicListView New playlist Ð¨Ð¸Ð½Ñ Ð¶Ð°Ð³Ñаалт Play Тоглуулах Add to playlist ЖагÑаалтад нÑмÑÑ… Display in file manager Файл менежерт харах Song info Дууны мÑдÑÑлÑл Remove from playlist ЖагÑÐ°Ð°Ð»Ñ‚Ð°Ð°Ñ Ñ…Ð°Ñах Delete from local disk Ѳѳр дÑÑÑ€ÑÑÑ ÑƒÑтгах Encoding Энкод My Favorites Are you sure you want to delete this playlist? Cancel Цуцлах Delete УÑтгах Pause Rename Дахин нÑрлÑÑ… Deleting the current song will also delete the song files contained Ð­Ð½Ñ Ð´ÑƒÑƒÐ³ уÑтгаÑнаар хадгалагдаж буй файл уÑтгагдана Unknown artist Тодорхойгүй уран бүтÑÑлч Unknown album Тодорхойгүй цомог MusicListWidget No Music Дуу алга No result found Үр дүн олдÑонгүй Play All Бүгдийг тоглуул Time added ÐÑмÑÑн огноо Title Гарчиг Artist Уран бүтÑÑлч Album name Цомгийн нÑÑ€ Custom Дурын PlayListItem Delete УÑтгах Cancel Цуцлах PlayListView New playlist Ð¨Ð¸Ð½Ñ Ð¶Ð°Ð³Ñаалт Play queue musicResult My favorites Дуртай Add to new playlist Pause Play Тоглуулах Add to playlist ЖагÑаалтад нÑмÑÑ… Display in file manager Файл менежерт харах Remove from playlist ЖагÑÐ°Ð°Ð»Ñ‚Ð°Ð°Ñ Ñ…Ð°Ñах Remove from play queue Delete from local disk Ѳѳр дÑÑÑ€ÑÑÑ ÑƒÑтгах Encoding Энкод Song info Дууны мÑдÑÑлÑл Cancel Цуцлах Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename Дахин нÑрлÑÑ… Delete УÑтгах Unknown artist Тодорхойгүй уран бүтÑÑлч Unknown album Тодорхойгүй цомог PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Тодорхойгүй цомог Unknown artist Тодорхойгүй уран бүтÑÑлч PlaylistManager New playlist Ð¨Ð¸Ð½Ñ Ð¶Ð°Ð³Ñаалт Artist Уран бүтÑÑлч Albums Artists All Music Бүх хѳгжим My favorites Дуртай Search result Хайлтын үр дүн Play Тоглуулах Music PlaylistWidget New playlist Ð¨Ð¸Ð½Ñ Ð¶Ð°Ð³Ñаалт QApplication Deepin Music ДÑÑпин хөгжим Music QObject Deepin Music ДÑÑпин Хѳгжи Minimize to system tray СиÑтем мѳрѳнд шилжүүлÑÑ… Exit Deepin Music ДÑÑпин хѳгжим гаргах Exit Music Autoplay Тоглуул Enable fade in/out Remember playback position Тоглуулах байрлалыг Ñанах Close Main Window ҮндÑÑн цонхыг хаах Basic Энгийн Play Тоглуулах Shortcuts Товчнууд Restore Defaults Ðнхдагч утга ÑÑргÑÑÑ… Next Дараах Play/Pause Тоглуулах/ЗогÑоох Previous Ѳмнѳх Volume down Дуу намÑгах Volume up Дуу чангалах SearchLyricsWidget Find Lyrics Title Гарчиг Artist Уран бүтÑÑлч Search Хайх SearchResult Search "%1" in Deepin Music Деепин Ñ…Ó©Ð³Ð¶Ð¸Ð¼Ó©Ó©Ñ "%1" хайх Music Artists Albums Shortcut Play Тоглуулах Songs Playlists Settings Тохиргоо Play/Pause Тоглуулах/ЗогÑоох Previous Ѳмнѳх Next Дараах Volume Up Volume Down Mute Favorite Дуртай Unfavorite Song info Дууны мÑдÑÑлÑл New playlist Ð¨Ð¸Ð½Ñ Ð¶Ð°Ð³Ñаалт Add music Rename playlist Remove from playlist ЖагÑÐ°Ð°Ð»Ñ‚Ð°Ð°Ñ Ñ…Ð°Ñах Help Display shortcuts TitlebarWidget Search Хайх deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ms.ts000664 000000 000000 00000141722 13703317554 025701 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Keluar Minimize to system tray Minimumkan ke dalam talam sistem Do not ask again Jangan tanya lagi Please select your operation Sila pilih operasi anda Cancel Batal Confirm Sahkan DequalizerDialog Custom Suai Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Pulih ke Lalai Footer Unknown Title Tajuk Tidak Diketahui Unknown artist Artis tidak diketahui Previous Terdahulu Next Berikutnya Play/Pause Main/Jeda Favorite Kegemaran Lyrics Lirik Play Mode Mod Main Play Queue Main Baris Gilir List Loop Ulang Senarai Single Loop Ulang Tunggal Shuffle Kocok ImportWidget Open Folder Add Music Tambah Muzik Scan Imbas %1 music directory or drag music files here %1 direktori muzik atau seret fail-fail muzik di sini Loading music, please wait... Memuatkan muzik, tunggu sebentar... InfoDialog Basic info Maklumat asas Title: Tajuk: Artist: Artis Album: Album: Type: Jenis: Size: Saiz: Duration: Tempoh: Path: Laluan: Unknown artist Artis tidak diketahui Unknown album Album tidak diketahui LoadWidget Loading... Memuat.... LyricWidget Find lyrics Cari lirik Title Tajuk Artist Artis Search Gelintar Back Undur MUsicLyricWidget No lyrics yet MainFrame Add playlist Tambah senarai main Add music Tambah muzik Equalizer Settings Tetapan Dark theme Tema gelap Exit Keluar Music is a local music player with beautiful design and simple functions. Muzik ialah sebuah pemain muzik setempat dengan reka bentuk cantik dan fungsi-fungsi yang ringkas. Music Muzik Play/Pause Main/Jeda Previous Terdahulu Next Berikutnya Successfully added to "%1" Berjaya ditambah kepada "%1" Already added to the playlist Sudah ditambah ke dalam senarai main 1 song added 1 lagu ditambah %1 songs added %1 lagu ditambah File is invalid or does not exist, load failed Fail tidak sah atau tidak wujud, proses muat gagal OK OK Import failed, no valid music file found Import gagal, tiada fail muzik yang sah ditemui All music Semua muzik MusicListDataDelegate No songs Tiada lagu 1 song 1 lagu %1 songs %1 lagu MusicListDataWidget No songs Tiada lagu 1 album - 1 song 1 album - 1 lagu %1 album - %2 songs %1 album - %2 lagu %1 albums - %2 songs %1 album - %2 lagu 1 artist - 1 song 1 artis - 1 lagu %1 artist - %2 songs %1 artist - %2 lagu %1 artists - %2 songs %1 artis - %2 lagu 1 song 1 lagu %1 songs %1 lagu No search results Tiada keputusan gelintar All Music Semua Muzik Time added Masa ditambah Album Album Artist Artis Title Tajuk Play All Main Semua Artists Artis Albums Album Custom Suai Search Results Songs Lagu No result found Tiada keputusan ditemui MusicListDialog Play All Main Semua Shuffle Kocok MusicListInfoView Play queue Main baris gilir Add to new playlist Tambah ke senarai main baharu Pause Jeda Play Main Add to playlist Tambah ke senarai main Display in file manager Papar dalam pengurus fail Remove from playlist Buang dari senarai main Delete from local disk Padam dari cakera setempat Song info Maklumat lagu Cancel Batal Remove Buang Are you sure you want to remove %1? Anda pasti mahu membuang %1? Are you sure you want to remove the selected %1 songs? Anda pasti mahu membuang %1 lagu terpilih ini? Delete Padam Are you sure you want to delete %1? Anda pasti mahu memadam %1? Are you sure you want to delete the selected %1 songs? Anda pasti mahu memadam %1 lagu terpilih ini? The song files contained will also be deleted Fail lagu yang terkandung juga akan dipadamkan MusicListItem Are you sure you want to delete this playlist? Anda pasti mahu memadam senarai main ini? Cancel Batal Delete Padam MusicListScrollArea Library Pustaka Playlists Senarai main MusicListView My Favorites Are you sure you want to delete this playlist? Anda pasti mahu memadam senarai main ini? Cancel Batal Delete Padam Pause Jeda Play Main Rename Nama Semula PlayListView Unknown artist Artis tidak diketahui Unknown album Album tidak diketahui Play queue Main baris gilir musicResult My favorites Kegemaran saya Add to new playlist Tambah ke senarai main baharu Pause Jeda Play Main Add to playlist Tambah ke senarai main Display in file manager Papar dalam pengurus fail Remove from playlist Buang dari senarai main Remove from play queue Delete from local disk Padam dari cakera setempat Encoding Pengekodan Song info Maklumat lagu Cancel Batal Remove Buang Are you sure you want to remove %1? Anda pasti mahu membuang %1? Are you sure you want to remove the selected %1 songs? Anda pasti mahu membuang %1 lagu terpilih ini? Delete Padam Are you sure you want to delete %1? Anda pasti mahu memadam %1? Are you sure you want to delete the selected %1 songs? Anda pasti mahu memadam %1 lagu terpilih ini? The song files contained will also be deleted Fail lagu yang terkandung juga akan dipadamkan PlayListWidget No songs Tiada lagu No search results Tiada keputusan gelintar Play Queue Main Baris Gilir Empty Kosong 1 song 1 lagu %1 songs %1 lagu Playlist Unknown album Album tidak diketahui Unknown artist Artis tidak diketahui PlaylistManager New playlist Senarai main baharu Albums Album Artists Artis All Music Semua Muzik My favorites Kegemaran saya Search result Hasil gelintar Play Main Music Muzik QApplication Music Muzik QObject Minimize to system tray Minimumkan ke dalam talam sistem Exit Music Keluar dari Muzik Autoplay Automain Enable fade in/out Benarkan resap jelma/lenyap Remember playback position Ingat kedudukan main balik Close Main Window Tutup Tetingkap Utama Basic Asas Play Main Shortcuts Pintasan Restore Defaults Pulih ke Lalai Next Berikutnya Play/Pause Main/Jeda Previous Terdahulu Volume down Volum turun Volume up Volum naik SearchLyricsWidget Find Lyrics Cari Lirik Title Tajuk Artist Artis Search Gelintar SearchResult Music Muzik Artists Artis Albums Album Shortcut Play Main Songs Lagu Playlists Senarai main Settings Tetapan Play/Pause Main/Jeda Previous Terdahulu Next Berikutnya Volume Up Volum Naik Volume Down Volum Turun Mute Senyap Favorite Kegemaran Unfavorite Nyahgemar Song info Maklumat lagu New playlist Senarai main baharu Add music Tambah muzik Rename playlist Nama semula senarai main Remove from playlist Buang dari senarai main Help Bantuan Display shortcuts Papar pintasan TitlebarWidget Search Gelintar deepin-music-6.0.1.54/src/music-player/translations/deepin-music_nb.ts000664 000000 000000 00000152705 13703317554 025664 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Lukk Minimize to system tray Minimer til systemfeltet Do not ask again Cancel Avbryt Confirm OK OK DequalizerDialog Custom Egendefinert Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Gjenopprett Standard Footer Previous Forrige Next Neste Play/Pause Spill/Pause Favorite Favoritt Lyrics Lyrikk Play Queue Unknown Title Ukjent Tittel Unknown artist Ukjent artist Play Mode Avspillingsmodus Playlist Spilleliste List Loop Single Loop Shuffle Tilfeldig rekkefølge ImportWidget Add folder Legg til mappe Open Folder Add Music Scan Skann %1 music directory or drag music files here Loading music, please wait... Laster musikk, vennligst vent... InfoDialog Title: Tittel: Artist: Artist: Album: Album: Type: Type: Path: Sti: Unknown artist Ukjent artist Unknown album Ukjent albu Size: Størrelse: Basic info Duration: Lengde: LoadWidget Loading... Laster... LyricWidget Find lyrics Title Tittel Artist Artist Search Søk Back Tilbake MUsicLyricWidget No lyrics yet MainFrame New playlist Ny spilleliste Settings Instillinger Exit Lukk Add folder Legg til mappe Add file Legg til fil Dark theme Mørkt tema Play/Pause Spill/Pause Previous Forrige Invalid or non-existent file Ugyldig eller ikke-eksisterende fil All music All musikk OK OK Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Neste MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music All musikk Time added Album Artist Artist Title Tittel Play All Spill alle Artists Albums Custom Egendefinert Search Results Songs No result found MusicListDialog Play All Spill alle Shuffle Tilfeldig rekkefølge MusicListInfoView New playlist Ny spilleliste Play queue Add to new playlist Pause Play Spill av Add to playlist Legg til i spilleliste Display in file manager Vis i filutforsker Remove from playlist Fjern fra spilleliste Delete from local disk Slett fra lokal disk Song info Cancel Avbryt Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Slett Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Avbryt Delete Slett MusicListScrollArea Library Playlists MusicListView New playlist Ny spilleliste Play Spill av Add to playlist Legg til i spilleliste Display in file manager Vis i filutforsker Remove from playlist Fjern fra spilleliste Delete from local disk Slett fra lokal disk Encoding Enkoding My Favorites Are you sure you want to delete this playlist? Cancel Avbryt Delete Slett Pause Rename Omdøp Unknown artist Ukjent artist Unknown album Ukjent albu MusicListWidget Play All Spill alle Title Tittel Artist Artist Album name Albumnavn Custom Egendefinert PlayListItem Delete Slett Cancel Avbryt PlayListView New playlist Ny spilleliste Play queue musicResult My favorites Mine favoritter Add to new playlist Pause Play Spill av Add to playlist Legg til i spilleliste Display in file manager Vis i filutforsker Remove from playlist Fjern fra spilleliste Remove from play queue Delete from local disk Slett fra lokal disk Encoding Enkoding Song info Cancel Avbryt Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename Omdøp Delete Slett Unknown artist Ukjent artist Unknown album Ukjent albu PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Ukjent albu Unknown artist Ukjent artist PlaylistManager New playlist Ny spilleliste Artist Artist Albums Artists All Music All musikk My favorites Mine favoritter Search result Søkeresultat Play Spill av Music PlaylistWidget New playlist Ny spilleliste QApplication Deepin Music Deepin Musikk Music QObject Deepin Music Deepin musik Minimize to system tray Minimer til oppgavelinje Exit Deepin Music Avslutt Deepin Musikk Exit Music Autoplay Autoavspilling Enable fade in/out Remember playback position Husk avspillingsposisjon Close Main Window Basic Grunnleggende Play Spill av Shortcuts Hurtigtaster Restore Defaults Gjenopprett Standard Next Neste Play/Pause Spill/Pause Previous Forrige Volume down Lyd ned Volume up Lyd opp SearchLyricsWidget Find Lyrics Title Tittel Artist Artist Search Søk SearchResult Music Artists Albums Shortcut Play Spill av Songs Playlists Settings Instillinger Play/Pause Spill/Pause Previous Forrige Next Neste Volume Up Volume Down Mute Favorite Favoritt Unfavorite Song info New playlist Ny spilleliste Add music Rename playlist Remove from playlist Fjern fra spilleliste Help Display shortcuts TitlebarWidget Search Søk deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ne.ts000664 000000 000000 00000144206 13703317554 025664 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Minimize to system tray Do not ask again Cancel रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ Confirm OK ठिक छ DequalizerDialog Custom Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous Next अरà¥à¤•ो Play/Pause Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Artist: Album: Type: पà¥à¤°à¤•ार Path: Unknown artist Unknown album Size: Basic info Duration: LoadWidget Loading... LyricWidget Find lyrics Title Artist Search खोजी गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ Back MUsicLyricWidget No lyrics yet MainFrame Settings सेटिंगà¥à¤¸ Exit Dark theme Equalizer Play/Pause Previous All music OK ठिक छ Add playlist Add music Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next अरà¥à¤•ो MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete मेटाउनà¥à¤¹à¥‹à¤¸à¥ Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ Delete मेटाउनà¥à¤¹à¥‹à¤¸à¥ MusicListScrollArea Library Playlists MusicListView Play Are you sure you want to delete this playlist? My Favorites Cancel रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ Delete मेटाउनà¥à¤¹à¥‹à¤¸à¥ Pause Rename PlayListItem Delete मेटाउनà¥à¤¹à¥‹à¤¸à¥ Cancel रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ PlayListView Play queue My favorites Add to new playlist Pause Play musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Delete मेटाउनà¥à¤¹à¥‹à¤¸à¥ Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Music QApplication Music QObject Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Shortcuts सरà¥à¤Ÿà¤•टहरू Restore Defaults Next अरà¥à¤•ो Play/Pause Previous Volume down Volume up SearchLyricsWidget Find Lyrics Title Artist Search खोजी गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ SearchResult Music Artists Albums Shortcut Play Songs Playlists Settings सेटिंगà¥à¤¸ Play/Pause Previous Next अरà¥à¤•ो Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search खोजी गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ deepin-music-6.0.1.54/src/music-player/translations/deepin-music_nl.ts000664 000000 000000 00000142513 13703317554 025672 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Afsluiten Minimize to system tray Minimaliseren naar systeemvak Do not ask again Nooit meer vragen Please select your operation Kies een handeling Cancel Annuleren Confirm Bevestigen DequalizerDialog Custom Aangepast Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Standaardwaarden herstellen Footer Unknown Title Onbekende titel Unknown artist Onbekende artiest Previous Vorige Next Volgende Play/Pause Afspelen/pauzeren Favorite Toevoegen aan favorieten Lyrics Songtekst Play Mode Afspeelmodus Play Queue Wachtrij afspelen List Loop Lijst herhalen Single Loop Enkele herhaling Shuffle Willekeurig ImportWidget Open Folder Map openen Add Music Muziek toevoegen Scan Scannen %1 music directory or drag music files here %1-muziekmap of sleep muziekbestanden hierheen Loading music, please wait... Bezig met laden van muziek... InfoDialog Basic info Eigenschappen Title: Titel: Artist: Artiest: Album: Album: Type: Type: Size: Grootte: Duration: Duur: Path: Pad: Unknown artist Onbekende artiest Unknown album Onbekend album LoadWidget Loading... Bezig met laden... LyricWidget Find lyrics Songtekst zoeken Title Titel Artist Artiest Search Zoeken Back Terug MUsicLyricWidget No lyrics yet MainFrame Add playlist Afspeellijst toevoegen Add music Muziek toevoegen Equalizer Settings Instellingen Dark theme Donker thema Exit Afsluiten Music is a local music player with beautiful design and simple functions. Met Muziek kun je je lokale muziekverzameling afspelen in een mooi jasje voorzien van alle basisfuncties. Music Muziek Play/Pause Afspelen/Pauzeren Previous Vorige Next Volgende Successfully added to "%1" Toegevoegd aan '%1' Already added to the playlist Reeds toegevoegd aan afspeellijst 1 song added 1 nummer toegevoegd %1 songs added %1 nummers toegevoegd File is invalid or does not exist, load failed Het laden is mislukt: bestand is ongeldig of bestaat niet. OK Oké Import failed, no valid music file found Het importeren is mislukt: geen geldig muziekbestand aangetroffen! All music Alle muziek MusicListDataDelegate No songs Geen nummers 1 song 1 nummer %1 songs %1 nummers MusicListDataWidget No songs Geen nummers 1 album - 1 song 1 album - 1 nummer %1 album - %2 songs %1 album - %2 nummers %1 albums - %2 songs %1 albums - %2 nummers 1 artist - 1 song 1 artiest - 1 nummer %1 artist - %2 songs %1 artiest - %2 nummers %1 artists - %2 songs %1 artiest - %2 nummers 1 song 1 nummer %1 songs %1 nummers No search results Geen zoekresultaten All Music Alle muziek Time added Datum Album Album Artist Artiest Title Titel Play All Alles afspelen Artists Artiesten Albums Albums Custom Aangepast Search Results Zoekresultaat Songs Nummers No result found Geen resultaat gevonden MusicListDialog Play All Alles afspelen Shuffle Willekeurig MusicListInfoView Play queue Wachtrij afspelen Add to new playlist Toevoegen aan afspeellijst Pause Pauzeren Play Afspelen Add to playlist Toevoegen aan afspeellijst Display in file manager Tonen in bestandsbeheerder Remove from playlist Verwijderen van afspeellijst Delete from local disk Verwijderen van lokale schijf Song info Nummerinformatie Cancel Annuleren Remove Verwijderen Are you sure you want to remove %1? Weet je zeker dat je %1 wilt verwijderen? Are you sure you want to remove the selected %1 songs? Weet je zeker dat je de %1 geselecteerde nummers wilt verwijderen? Delete Verwijderen Are you sure you want to delete %1? Weet je zeker dat je %1 wilt verwijderen? Are you sure you want to delete the selected %1 songs? Weet je zeker dat je de %1 geselecteerde nummers wilt verwijderen? The song files contained will also be deleted De bijbehorende muziekbestanden worden eveneens verwijderd MusicListItem Are you sure you want to delete this playlist? Weet je zeker dat je deze afspeellijst wilt verwijderen? Cancel Annuleren Delete Verwijderen MusicListScrollArea Library Bibliotheek Playlists Afspeellijsten MusicListView My Favorites Mijn favorieten Are you sure you want to delete this playlist? Weet je zeker dat je deze afspeellijst wilt verwijderen? Cancel Annuleren Delete Verwijderen Pause Pauzeren Play Afspelen Rename Naam wijzigen PlayListView Unknown artist Onbekende artiest Unknown album Onbekend album Play queue Wachtrij afspelen musicResult My favorites Mijn favorieten Add to new playlist Toevoegen aan afspeellijst Pause Pauzeren Play Afspelen Add to playlist Toevoegen aan afspeellijst Display in file manager Tonen in bestandsbeheerder Remove from playlist Verwijderen van afspeellijst Remove from play queue Delete from local disk Verwijderen van lokale schijf Encoding Versleuteling Song info Nummerinformatie Cancel Annuleren Remove Verwijderen Are you sure you want to remove %1? Weet je zeker dat je %1 wilt verwijderen? Are you sure you want to remove the selected %1 songs? Weet je zeker dat je de %1 geselecteerde nummers wilt verwijderen? Delete Verwijderen Are you sure you want to delete %1? Weet je zeker dat je %1 wilt verwijderen? Are you sure you want to delete the selected %1 songs? Weet je zeker dat je de %1 geselecteerde nummers wilt verwijderen? The song files contained will also be deleted De bijbehorende muziekbestanden worden eveneens verwijderd PlayListWidget No songs Geen nummers No search results Geen zoekresultaten Play Queue Wachtrij afspelen Empty Leeg 1 song 1 nummer %1 songs %1 nummers Playlist Unknown album Onbekend album Unknown artist Onbekende artiest PlaylistManager New playlist Nieuwe afspeellijst Albums Albums Artists Artiesten All Music Alle muziek My favorites Mijn favorieten Search result Zoekresultaat Play Afspelen Music Muziek QApplication Music Muziek QObject Minimize to system tray Minimaliseren naar systeemvak Exit Music Muziek afsluiten Autoplay Automatisch afspelen Enable fade in/out Vervagen inschakelen Remember playback position Afspeelpositie onthouden Close Main Window Hoofdvenster sluiten Basic Basis Play Afspelen Shortcuts Sneltoetsen Restore Defaults Standaardwaarden herstellen Next Volgende Play/Pause Afspelen/Pauzeren Previous Vorige Volume down Volume omlaag Volume up Volume omhoog SearchLyricsWidget Find Lyrics Songtekst zoeken Title Titel Artist Artiest Search Zoeken SearchResult Music Muziek Artists Artiesten Albums Albums Shortcut Play Afspelen Songs Nummers Playlists Afspeellijsten Settings Instellingen Play/Pause Afspelen/Pauzeren Previous Vorige Next Volgende Volume Up Volume omhoog Volume Down Volume omlaag Mute Dempen Favorite Toevoegen aan favorieten Unfavorite Verwijderen uit favorieten Song info Nummerinformatie New playlist Nieuwe afspeellijst Add music Muziek toevoegen Rename playlist Naam wijzigen Remove from playlist Verwijderen van afspeellijst Help Hulp Display shortcuts Sneltoetsen tonen TitlebarWidget Search Zoeken deepin-music-6.0.1.54/src/music-player/translations/deepin-music_pam.ts000664 000000 000000 00000143515 13703317554 026041 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Minimize to system tray Do not ask again Cancel I-cancel Confirm OK OK DequalizerDialog Custom Custom Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous Next Play/Pause Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Artist: Album: Type: Path: Unknown artist Unknown album Size: Basic info Duration: LoadWidget Loading... Mag load ne... LyricWidget Find lyrics Title Artist Search Manintun Back MUsicLyricWidget No lyrics yet MainFrame Settings Exit Dark theme Equalizer Play/Pause Previous All music OK OK Add playlist Add music Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom Custom Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel I-cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Buran Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel I-cancel Delete Buran MusicListScrollArea Library Playlists MusicListView Play Are you sure you want to delete this playlist? My Favorites Cancel I-cancel Delete Buran Pause Rename MusicListWidget Custom Custom PlayListItem Delete Buran Cancel I-cancel PlayListView Play queue My favorites Add to new playlist Pause Play musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel I-cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Delete Buran Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Music QApplication Music QObject Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Shortcuts Restore Defaults Next Play/Pause Previous Volume down Volume up SearchLyricsWidget Find Lyrics Title Artist Search Manintun SearchResult Music Artists Albums Shortcut Play Songs Playlists Settings Play/Pause Previous Next Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search Manintun deepin-music-6.0.1.54/src/music-player/translations/deepin-music_pl.ts000664 000000 000000 00000161120 13703317554 025667 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Prosimy wybrać swoje dziaÅ‚anie Exit Wyjdź Minimize to system tray Minimalizuj do tacki systemowej Do not ask again Nie pytaj ponownie Cancel Anuluj Confirm OK OK DequalizerDialog Custom WÅ‚asne Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Przywróć domyÅ›lne Footer Previous Poprzedni Next NastÄ™pny Play/Pause Odtwórz/Wstrzymaj Favorite Ulubione Lyrics Tekst piosenki Play Queue Unknown Title Nieznany tytuÅ‚ Unknown artist Nieznany wykonawca Play Mode Tryb odtwarzania Playlist Lista odtwarzania List Loop PÄ™tla listy Single Loop Pojedyncza pÄ™tla Shuffle Przetasuj ImportWidget Add folder Dodaj katalog Open Folder Add Music Scan Skanowanie %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 katalog z muzykÄ… lub przeciÄ…gnij i upuść plik z muzykÄ…, aby jÄ… dodać Loading music, please wait... Wczytywanie muzyki, prosimy czekać InfoDialog Title: TytuÅ‚: Artist: Wykonawca: Album: Album: Type: Rodzaj: Path: Åšcieżka: Unknown artist Nieznany wykonawca Unknown album Nieznany album Size: Rozmiar: Basic info Duration: Czas trwania: LoadWidget Loading... Wczytywanie... LyricWidget Find lyrics Znajdź tekst Title TytuÅ‚ Artist Wykonawca Search Szukaj Back Wstecz MUsicLyricWidget No lyrics yet MainFrame New playlist Nowa lista odtwarzania Settings Ustawienia Exit Wyjdź Add folder Dodaj katalog Add file Dodaj plik Dark theme Ciemny motyw Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. Deepin Music to piÄ™kny i prosty odtwarzacz muzyki, który odtwarza lokalne audio. ObsÅ‚uguje wyÅ›wietlanie tekstów podczas odtwarzania, odtwarzanie bezstratnego dostosowywania dźwiÄ™ku i listy odtwarzania itp. Play/Pause Odtwórz/Wstrzymaj Previous Poprzedni Invalid or non-existent file NieprawidÅ‚owy lub nieistniejÄ…cy plik Failed to import, no vaild music file found! Błąd importu, nie odnaleziono poprawnego pliku muzycznego! All music CaÅ‚a muzyka OK OK Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" PomyÅ›lnie dodano do "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next NastÄ™pny MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music CaÅ‚a muzyka Time added Dodany czas Album Artist Wykonawca Title TytuÅ‚ Play All Odtwórz wszystko Artists Albums Custom WÅ‚asne Search Results Songs No result found Brak wyników wyszukiwania MusicListDialog Play All Odtwórz wszystko Shuffle Przetasuj MusicListInfoView New playlist Nowa lista odtwarzania Play queue Add to new playlist Pause Play Odtwórz Add to playlist Dodaj do listy odtwarzania Display in file manager WyÅ›wietl w menedżerze plików Remove from playlist UsuÅ„ z listy odtwarzania Delete from local disk UsuÅ„ z dysku lokalnego Song info Informacje o utworze Cancel Anuluj Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete UsuÅ„ Are you sure you want to delete %1? Czy na pewno chcesz usunąć %1? Are you sure you want to delete the selected %1 songs? Czy na pewno chcesz usunąć wybrane utwory %1? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Czy na pewno chcesz usunąć tÄ™ listÄ™ odtwarzania? Cancel Anuluj Delete UsuÅ„ MusicListScrollArea Library Playlists MusicListView New playlist Nowa lista odtwarzania Play Odtwórz Add to playlist Dodaj do listy odtwarzania Display in file manager WyÅ›wietl w menedżerze plików Song info Informacje o utworze Are you sure you want to delete %1? Czy na pewno chcesz usunąć %1? Are you sure you want to delete the selected %1 songs? Czy na pewno chcesz usunąć wybrane utwory %1? Remove from playlist UsuÅ„ z listy odtwarzania Delete from local disk UsuÅ„ z dysku lokalnego Encoding Kodowanie My Favorites Are you sure you want to delete this playlist? Czy na pewno chcesz usunąć tÄ™ listÄ™ odtwarzania? Cancel Anuluj Delete UsuÅ„ Pause Rename ZmieÅ„ nazwÄ™ Deleting the current song will also delete the song files contained Usuwanie bieżącego utworu usunie także powiÄ…zany z nim plik utworu Unknown artist Nieznany wykonawca Unknown album Nieznany album MusicListWidget No Music Brak muzyki No result found Brak wyników wyszukiwania Play All Odtwórz wszystko Time added Dodany czas Title TytuÅ‚ Artist Wykonawca Album name Nazwa albumu Custom WÅ‚asne PlayListItem Are you sure you want to delete this playlist? Czy na pewno chcesz usunąć tÄ™ listÄ™ odtwarzania? Delete UsuÅ„ Cancel Anuluj PlayListView New playlist Nowa lista odtwarzania Play queue musicResult My favorites Moje ulubione Add to new playlist Pause Play Odtwórz Add to playlist Dodaj do listy odtwarzania Display in file manager WyÅ›wietl w menedżerze plików Remove from playlist UsuÅ„ z listy odtwarzania Remove from play queue Delete from local disk UsuÅ„ z dysku lokalnego Encoding Kodowanie Song info Informacje o utworze Cancel Anuluj Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Czy na pewno chcesz usunąć %1? Are you sure you want to delete the selected %1 songs? Czy na pewno chcesz usunąć wybrane utwory %1? The song files contained will also be deleted Rename ZmieÅ„ nazwÄ™ Delete UsuÅ„ Unknown artist Nieznany wykonawca Unknown album Nieznany album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Nieznany album Unknown artist Nieznany wykonawca PlaylistManager New playlist Nowa lista odtwarzania Artist Wykonawca Albums Artists All Music CaÅ‚a muzyka My favorites Moje ulubione Search result Wyniki wyszukiwania Play Odtwórz Music PlaylistWidget New playlist Nowa lista odtwarzania QApplication Deepin Music Muzyka Deepin Music QObject Deepin Music Muzyka Deepin Minimize to system tray Minimalizuj do tacki systemowej Exit Deepin Music ZakoÅ„cz MuzykÄ™ Deepin Exit Music Autoplay Automatyczne odtwarzanie Enable fade in/out Włącz wejÅ›cie/wyjÅ›cie Remember playback position ZapamiÄ™taj pozycjÄ™ odtwarzania Close Main Window Zamknij okno główne Basic Podstawowe Play Odtwórz Shortcuts Skróty Restore Defaults Przywróć domyÅ›lne Next NastÄ™pny Play/Pause Odtwórz/Wstrzymaj Previous Poprzedni Volume down Przycisz Volume up PogÅ‚oÅ›nij SearchLyricsWidget Find Lyrics Title TytuÅ‚ Artist Wykonawca Search Szukaj SearchResult Search "%1" in Deepin Music Szukaj "%1" w Muzyce Deepin Music Artists Albums Shortcut Play Odtwórz Songs Playlists Settings Ustawienia Play/Pause Odtwórz/Wstrzymaj Previous Poprzedni Next NastÄ™pny Volume Up Volume Down Mute Favorite Ulubione Unfavorite Song info Informacje o utworze New playlist Nowa lista odtwarzania Add music Rename playlist Remove from playlist UsuÅ„ z listy odtwarzania Help Display shortcuts TitlebarWidget Search Szukaj deepin-music-6.0.1.54/src/music-player/translations/deepin-music_pt.ts000664 000000 000000 00000143230 13703317554 025701 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Sair Minimize to system tray Minimizar para a área de notificação Do not ask again Não voltar a perguntar Please select your operation Selecione a operação Cancel Cancelar Confirm Confirmar DequalizerDialog Custom Personalizado Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Restaurar Predefinições Footer Unknown Title Título desconhecido Unknown artist Artista desconhecido Previous Anterior Next Seguinte Play/Pause Reproduzir/Pausa Favorite Adicionar às favoritas Lyrics Letras Play Mode Modo de reprodução Play Queue Reproduzir lista em espera List Loop Repetição de lista Single Loop Repetição única Shuffle Aleatório ImportWidget Open Folder Abrir Pasta Add Music Adicionar Música Scan Pesquisar %1 music directory or drag music files here %1 diretório de música ou arraste ficheiros de música aqui Loading music, please wait... A carregar música, aguarde... InfoDialog Basic info Informação Básica Title: Título: Artist: Artista: Album: Ãlbum: Type: Tipo: Size: Tamanho: Duration: Duração: Path: Caminho: Unknown artist Artista desconhecido Unknown album Ãlbum desconhecido LoadWidget Loading... A carregar... LyricWidget Find lyrics Encontrar letras Title Título Artist Artista Search Pesquisar Back Voltar MUsicLyricWidget No lyrics yet MainFrame Add playlist Adicionar lista de reprodução Add music Adicionar música Equalizer Settings Definições Dark theme Tema Escuro Exit Sair Music is a local music player with beautiful design and simple functions. Música é um reprodutor de música local com um estilo elegante e funções simples. Music Música Play/Pause Reproduzir/Pausa Previous Anterior Next Seguinte Successfully added to "%1" Adicionada com sucesso a "%1" Already added to the playlist Já adicionada à lista de reprodução 1 song added 1 música adicionada %1 songs added %1 músicas adicionadas File is invalid or does not exist, load failed O ficheiro é inválido ou não existe, falha ao carregar OK OK Import failed, no valid music file found A importação falhou, não foi encontrado nenhum ficheiro de música válido All music Toda a música MusicListDataDelegate No songs Sem músicas 1 song 1 música %1 songs %1 músicas MusicListDataWidget No songs Sem músicas 1 album - 1 song 1 álbum - 1 música %1 album - %2 songs %1 álbum - %2 músicas %1 albums - %2 songs %1 álbuns - %2 músicas 1 artist - 1 song 1 artista - 1 música %1 artist - %2 songs %1 artista - %2 músicas %1 artists - %2 songs %1 artistas - %2 músicas 1 song 1 música %1 songs %1 músicas No search results Sem resultados All Music Toda a música Time added Adicionada em Album Ãlbum Artist Artista Title Título Play All Reproduzir Tudo Artists Artistas Albums Ãlbuns Custom Personalizado Search Results Resultados da pesquisa Songs Músicas No result found Nenhum resultado encontrado MusicListDialog Play All Reproduzir Tudo Shuffle Aleatório MusicListInfoView Play queue Reproduzir lista em espera Add to new playlist Adicionar à nova lista de reprodução Pause Pausa Play Reproduzir Add to playlist Adicionar à lista de reprodução Display in file manager Mostrar no gestor de ficheiros Remove from playlist Remover da lista de reprodução Delete from local disk Eliminar do disco local Song info Informação da música Cancel Cancelar Remove Remover Are you sure you want to remove %1? Tem a certeza que deseja remover %1? Are you sure you want to remove the selected %1 songs? Tem a certeza que deseja remover as %1 músicas selecionadas? Delete Eliminar Are you sure you want to delete %1? Tem a certeza que deseja eliminar %1? Are you sure you want to delete the selected %1 songs? Tem a certeza que deseja eliminar as %1 músicas selecionadas? The song files contained will also be deleted Os ficheiros de música contidos também serão eliminados MusicListItem Are you sure you want to delete this playlist? Tem a certeza que deseja eliminar esta lista de reprodução? Cancel Cancelar Delete Eliminar MusicListScrollArea Library Biblioteca Playlists Listas de reprodução MusicListView My Favorites Minhas Favoritas Are you sure you want to delete this playlist? Tem a certeza que deseja eliminar esta lista de reprodução? Cancel Cancelar Delete Eliminar Pause Pausa Play Reproduzir Rename Renomear PlayListView Unknown artist Artista desconhecido Unknown album Ãlbum desconhecido Play queue Reproduzir lista em espera musicResult My favorites Minhas favoritas Add to new playlist Adicionar à nova lista de reprodução Pause Pausa Play Reproduzir Add to playlist Adicionar à lista de reprodução Display in file manager Mostrar no gestor de ficheiros Remove from playlist Remover da lista de reprodução Remove from play queue Delete from local disk Eliminar do disco local Encoding Codificação Song info Informação da música Cancel Cancelar Remove Remover Are you sure you want to remove %1? Tem a certeza que deseja remover %1? Are you sure you want to remove the selected %1 songs? Tem a certeza que deseja remover as %1 músicas selecionadas? Delete Eliminar Are you sure you want to delete %1? Tem a certeza que deseja eliminar %1? Are you sure you want to delete the selected %1 songs? Tem a certeza que deseja eliminar as %1 músicas selecionadas? The song files contained will also be deleted Os ficheiros de música contidos também serão eliminados PlayListWidget No songs Sem músicas No search results Sem resultados Play Queue Reproduzir lista em espera Empty Esvaziar 1 song 1 música %1 songs %1 músicas Playlist Unknown album Ãlbum desconhecido Unknown artist Artista desconhecido PlaylistManager New playlist Nova lista de reprodução Albums Ãlbuns Artists Artistas All Music Toda a música My favorites Minhas favoritas Search result Resultado da pesquisa Play Reproduzir Music Música QApplication Music Música QObject Minimize to system tray Minimizar para a área de notificação Exit Music Sair do programa Autoplay Reprodução automática Enable fade in/out Ativar desvanecimento Remember playback position Retomar a reprodução a partir da última posição Close Main Window Fechar Janela Principal Basic Básico Play Reproduzir Shortcuts Atalhos Restore Defaults Restaurar Predefinições Next Seguinte Play/Pause Reproduzir/Pausa Previous Anterior Volume down Diminuir volume Volume up Aumentar volume SearchLyricsWidget Find Lyrics Encontrar Letras Title Título Artist Artista Search Pesquisar SearchResult Music Música Artists Artistas Albums Ãlbuns Shortcut Play Reproduzir Songs Músicas Playlists Listas de Reprodução Settings Definições Play/Pause Reproduzir/Pausa Previous Anterior Next Seguinte Volume Up Aumentar Volume Volume Down Diminuir Volume Mute Silenciar Favorite Adicionar às favoritas Unfavorite Remover das favoritas Song info Informação da música New playlist Nova lista de reprodução Add music Adicionar música Rename playlist Renomear lista de reprodução Remove from playlist Remover da lista de reprodução Help Ajuda Display shortcuts Mostrar atalhos TitlebarWidget Search Pesquisar deepin-music-6.0.1.54/src/music-player/translations/deepin-music_pt_BR.ts000664 000000 000000 00000142453 13703317554 026272 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Sair Minimize to system tray Minimizar para a Bandeja do Sistema Do not ask again Não Perguntar Novamente Please select your operation Selecione a operação Cancel Cancelar Confirm Confirmar DequalizerDialog Custom Personalizado Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Restaurar Padrões Footer Unknown Title Título Desconhecido Unknown artist Artista desconhecido Previous Anterior Next Próximo Play/Pause Reproduzir/Pausar Favorite Favorito Lyrics Letra da Música Play Mode Modo de Reprodução Play Queue Fila de Reprodução List Loop Repetir Lista Single Loop Repetir Uma Vez Shuffle Aleatório ImportWidget Open Folder Abrir Pasta Add Music Adicionar Música Scan Verificar %1 music directory or drag music files here %1 o diretório de músicas ou arraste as músicas até aqui Loading music, please wait... Carregando... InfoDialog Basic info Informação básica Title: Título: Artist: Artista: Album: Ãlbum: Type: Tipo: Size: Tamanho: Duration: Duração: Path: Caminho: Unknown artist Artista desconhecido Unknown album Ãlbum desconhecido LoadWidget Loading... Carregando... LyricWidget Find lyrics Encontrar Letras Title Título Artist Artista Search Pesquisar Back Voltar MUsicLyricWidget No lyrics yet MainFrame Add playlist Adicionar lista de reprodução Add music Adicionar música Equalizer Settings Configurações Dark theme Tema Escuro Exit Sair Music is a local music player with beautiful design and simple functions. O Música é um player de música local com um design bonito e funções simples. Music Música Play/Pause Reproduzir/Pausar Previous Anterior Next Próximo Successfully added to "%1" Adicionado a "%1" Already added to the playlist Já adicionado à lista de reprodução 1 song added 1 música adicionada %1 songs added %1 músicas adicionadas File is invalid or does not exist, load failed Falha ao carregar, o arquivo é inválido ou não existe OK Ok Import failed, no valid music file found Falha na importação, nenhum arquivo de música válido encontrado All music Todas as Músicas MusicListDataDelegate No songs Nenhuma música 1 song 1 música %1 songs %1 músicas MusicListDataWidget No songs Nenhuma música 1 album - 1 song 1 álbum - 1 música %1 album - %2 songs %1 álbum - %2 músicas %1 albums - %2 songs %1 álbuns - %2 músicas 1 artist - 1 song 1 artista - 1 música %1 artist - %2 songs %1 artista - %2 músicas %1 artists - %2 songs %1 artistas - %2 músicas 1 song 1 música %1 songs %1 músicas No search results Nenhum resultado encontrado All Music Todas as Músicas Time added Recente Album Ãlbum Artist Artista Title Titulo Play All Reproduzir Tudo Artists Artistas Albums Ãlbuns Custom Personalizado Search Results Resultados da Pesquisa Songs Músicas No result found Nenhum resultado encontrado MusicListDialog Play All Reproduzir Tudo Shuffle Aleatório MusicListInfoView Play queue Fila de reprodução Add to new playlist Adicionar à uma nova lista de reprodução Pause Pausar Play Reproduzir Add to playlist Adicionar à lista de reprodução Display in file manager Exibir no Gerenciador de Arquivos Remove from playlist Remover da lista de reprodução Delete from local disk Excluir do disco Song info Informação da Música Cancel Cancelar Remove Remover Are you sure you want to remove %1? Remover %1? Are you sure you want to remove the selected %1 songs? Remover as %1 músicas selecionadas? Delete Excluir Are you sure you want to delete %1? Excluir %1? Are you sure you want to delete the selected %1 songs? Excluir as %1 músicas selecionadas? The song files contained will also be deleted Os arquivos de música contidos também serão excluídos MusicListItem Are you sure you want to delete this playlist? Excluir esta lista de reprodução? Cancel Cancelar Delete Excluir MusicListScrollArea Library Biblioteca Playlists Listas de Reprodução MusicListView My Favorites Favoritos Are you sure you want to delete this playlist? Excluir esta lista de reprodução? Cancel Cancelar Delete Excluir Pause Pausar Play Reproduzir Rename Renomear PlayListView Unknown artist Artista desconhecido Unknown album Ãlbum desconhecido Play queue Fila de reprodução musicResult My favorites Favoritos Add to new playlist Adicionar à uma nova lista de reprodução Pause Pausar Play Reproduzir Add to playlist Adicionar à lista de reprodução Display in file manager Exibir no Gerenciador de Arquivos Remove from playlist Remover da lista de reprodução Remove from play queue Delete from local disk Excluir do disco Encoding Codificação Song info Informação da Música Cancel Cancelar Remove Remover Are you sure you want to remove %1? Remover %1? Are you sure you want to remove the selected %1 songs? Remover as %1 músicas selecionadas? Delete Excluir Are you sure you want to delete %1? Excluir %1? Are you sure you want to delete the selected %1 songs? Excluir as %1 músicas selecionadas? The song files contained will also be deleted Os arquivos de música contidos também serão excluídos PlayListWidget No songs Nenhuma música No search results Nenhum resultado encontrado Play Queue Fila de Reprodução Empty Vazio 1 song 1 música %1 songs %1 músicas Playlist Unknown album Ãlbum desconhecido Unknown artist Artista desconhecido PlaylistManager New playlist Nova lista de reprodução Albums Ãlbuns Artists Artistas All Music Todas as Músicas My favorites Favoritos Search result Resultado da pesquisa Play Reproduzir Music Música QApplication Music Música QObject Minimize to system tray Minimizar para a Bandeja do Sistema Exit Music Sair do Música Autoplay Reprodução automática Enable fade in/out Transição Gradual Remember playback position Lembrar a posição da última reprodução Close Main Window Fechar a Janela Principal Basic Básico Play Reproduzir Shortcuts Atalhos Restore Defaults Restaurar Padrões Next Próximo Play/Pause Reproduzir/Pausar Previous Anterior Volume down Reduzir volume Volume up Aumentar volume SearchLyricsWidget Find Lyrics Encontrar Letras Title Título Artist Artista Search Pesquisar SearchResult Music Música Artists Artistas Albums Ãlbuns Shortcut Play Reproduzir Songs Músicas Playlists Listas de Reprodução Settings Configurações Play/Pause Reproduzir/Pausar Previous Anterior Next Próximo Volume Up Aumentar Volume Volume Down Reduzir Volume Mute Sem Ãudio Favorite Favorito Unfavorite Remover dos Favoritos Song info Informação da Música New playlist Nova lista de reprodução Add music Adicionar música Rename playlist Renomear lista de reprodução Remove from playlist Remover da lista de reprodução Help Ajuda Display shortcuts Exibir atalhos TitlebarWidget Search Pesquisar deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ro.ts000664 000000 000000 00000142364 13703317554 025705 0ustar00rootroot000000 000000 CloseConfirmDialog Exit IeÅŸire Minimize to system tray Minimalizare Do not ask again Nu întreba din nou Please select your operation Selectare operaÈ›iune Cancel Anulare Confirm Confirm DequalizerDialog Custom Personalizat Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Restaurare setări implicite Footer Unknown Title Titlu necunoscut Unknown artist Artist Necunoscut Previous Precedent Next Următorul Play/Pause Redare/Pauză Favorite Favorite Lyrics Versuri Play Mode Mod redare Play Queue Coadă de Redare List Loop Redare lista fără pauză Single Loop Redare melodia fără pauză Shuffle Amestecare ImportWidget Open Folder Add Music Adaugă muzică Scan Scanare %1 music directory or drag music files here %1 director cu muzică sau trage fiÈ™ierele aici Loading music, please wait... Se încarcă muzica, aÈ™teptaÈ›i... InfoDialog Basic info InformaÈ›ii Uzuale Title: Titlu: Artist: Artist: Album: Album: Type: Tip: Size: Mărime: Duration: Durată: Path: Cale fiÈ™ier: Unknown artist Artist necunoscut Unknown album Album necunoscut LoadWidget Loading... Se încarcă... LyricWidget Find lyrics Caută versuri Title Titlu Artist Artist Search Căutare Back ÃŽnapoi MUsicLyricWidget No lyrics yet MainFrame Add playlist Adaugă listă de redare Add music Adaugă muzică Equalizer Settings Setări Dark theme Fundal întunecat Exit IeÅŸire Music is a local music player with beautiful design and simple functions. Music este un music player local cu o interfață aspectuoasă È™i funcÈ›ii simple. Music Muzică Play/Pause Redare/Pauză Previous Precedent Next Următorul Successfully added to "%1" %1 adăugat cu succes Already added to the playlist Deja adăugat în lista de redare 1 song added 1 cântec adăugat %1 songs added %1 cântece adăugate File is invalid or does not exist, load failed FiÈ™ier invalid sau inexistent, încărcare eÈ™uată OK Ok Import failed, no valid music file found Importare eÈ™uată, niciun fiÈ™ier audio valid găsit All music Toate melodiile MusicListDataDelegate No songs Niciun cântec 1 song 1 cântec %1 songs %1 cântece MusicListDataWidget No songs Niciun cântec 1 album - 1 song 1 album - 1 piesă %1 album - %2 songs %1 album - %2 piese %1 albums - %2 songs %1 albume - %2 piese 1 artist - 1 song 1 artist - 1 piesă %1 artist - %2 songs %1 artist - %2 piese %1 artists - %2 songs %1 artiÈ™ti - %2 piese 1 song 1 cântec %1 songs %1 cântece No search results Niciun rezultat la căutare All Music Toate melodiile Time added Timp adăugat Album Album Artist Artist Title Titlu Play All Redare toate Artists ArtiÈ™ti Albums Albume Custom Personalizat Search Results Songs Cântece No result found Nu s-a găsit un rezultat MusicListDialog Play All Redare toate Shuffle Amestecare MusicListInfoView Play queue Add to new playlist Pause Pauză Play Redare Add to playlist Adăugare la lista de redare Display in file manager Deschidere în managerul de fiÈ™iere Remove from playlist Scoatere din lista de redare Delete from local disk Ștergere de pe discul local Song info InformaÈ›ie melodie Cancel Anulare Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete ȘtergeÈ›i Are you sure you want to delete %1? Sigur doriÈ›i să È™tergeÈ›i% 1? Are you sure you want to delete the selected %1 songs? Sigur doriÈ›i să È™tergeÈ›i melodiile %1 selectate? The song files contained will also be deleted FiÈ™ierele vor fi deasemenea È™terse MusicListItem Are you sure you want to delete this playlist? Sigur doriÈ›i să È™tergeÈ›i această listă de redare? Cancel Anulare Delete ȘtergeÈ›i MusicListScrollArea Library Biblioteca Playlists Liste de redare MusicListView My Favorites Are you sure you want to delete this playlist? Sigur doriÈ›i să È™tergeÈ›i această listă de redare? Cancel Anulare Delete Ștergere Pause Pauză Play Redare Rename Redenumire PlayListView Unknown artist Artist necunoscut Unknown album Album necunoscut Play queue musicResult My favorites Favoritele mele Add to new playlist Pause Pauză Play Redare Add to playlist Adăugare la lista de redare Display in file manager Deschidere în managerul de fiÈ™iere Remove from playlist Scoatere din lista de redare Remove from play queue Delete from local disk Ștergere de pe disk-ul local Encoding Compresie Song info InformaÈ›ie melodie Cancel Anulare Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Ștergere Are you sure you want to delete %1? Sigur doriÈ›i să È™tergeÈ›i% 1? Are you sure you want to delete the selected %1 songs? Sigur doriÈ›i să È™tergeÈ›i melodiile %1 selectate? The song files contained will also be deleted FiÈ™ierele vor fi deasemenea È™terse PlayListWidget No songs Niciun cântec No search results Niciun rezultat la căutare Play Queue Coadă de Redare Empty Gol 1 song 1 cântec %1 songs %1 cântece Playlist Unknown album Album necunoscut Unknown artist Artist necunoscut PlaylistManager New playlist Lista de redare nouă Albums Albume Artists ArtiÈ™ti All Music Toate melodiile My favorites Favoritele mele Search result Rezultat căutare Play Redare Music Muzică QApplication Music Muzică QObject Minimize to system tray Minimalizare Exit Music IeÈ™ire Autoplay Auto-redare Enable fade in/out ActivaÈ›i fade in/out Remember playback position Memorare poziÈ›ie redare Close Main Window ÃŽnchidere fereastră principală Basic Simplu Play Redare Shortcuts Scurtături Restore Defaults Restaurare setări implicite Next Următorul Play/Pause Redare/Pauză Previous Precedent Volume down Scade volumul Volume up CreÈ™te volumul SearchLyricsWidget Find Lyrics GăseÈ™te Versuri Title Titlu Artist Artist Search Căutare SearchResult Music Muzică Artists ArtiÈ™ti Albums Albume Shortcut Play Redare Songs Cântece Playlists Liste de redare Settings Setări Play/Pause Redare/Pauză Previous Precedent Next Următorul Volume Up Mărirea Volumului Volume Down MicÈ™orarea Volumului Mute Mute Favorite Favorite Unfavorite Nefavorit Song info InformaÈ›ie melodie New playlist Lista de redare nouă Add music Adaugă muzică Rename playlist RedenumeÈ™te lista de redare Remove from playlist Scoatere din lista de redare Help Ajutor Display shortcuts AfiÈ™ează scurtături TitlebarWidget Search Căutare deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ru.ts000664 000000 000000 00000150065 13703317554 025710 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Выход Minimize to system tray Минимизировать в трей Do not ask again Ðе Ñпрашивать больше Please select your operation ПожалуйÑта выберите дейÑтвие Cancel Отмена Confirm Подтвердить DequalizerDialog Custom ПользовательÑкий Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults ВоÑÑтановить Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию Footer Unknown Title ÐеизвеÑтное Ðазвание Unknown artist ÐеизвеÑтный иÑполнитель Previous Предыдущий Next Следующий Play/Pause ВоÑпроизведение / Пауза Favorite Избранное Lyrics ТекÑÑ‚ пеÑни Play Mode Режим ВоÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Play Queue List Loop Ðепрерывно Single Loop Одиночный цикл Shuffle Перемешать ImportWidget Open Folder Add Music Добавить музыку Scan Сканируйте %1 music directory or drag music files here %1 музыкальный каталог или перетащите музыкальный файл, чтобы добавить музыку Loading music, please wait... Загрузка музыки, пожалуйÑта ждите... InfoDialog Basic info ОÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Title: Ðазвание Artist: ИÑполнитель Album: Ðльбом: Type: Тип: Size: Размер: Duration: ПродолжительноÑть: Path: Путь: Unknown artist ÐеизвеÑтный иÑполнитель Unknown album ÐеизвеÑтный альбом LoadWidget Loading... Загрузка... LyricWidget Find lyrics Ðайти текÑÑ‚ пеÑни Title Ðазвание Artist ИÑполнитель Search ПоиÑк Back Ðазад MUsicLyricWidget No lyrics yet MainFrame Add playlist Ðовый ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Add music Добавить музыку Equalizer Settings ÐаÑтройки Dark theme Ð¢ÐµÐ¼Ð½Ð°Ñ Ñ‚ÐµÐ¼Ð° Exit Выход Music is a local music player with beautiful design and simple functions. Плеер - Ñто локальный музыкальный плеер Ñ ÐºÑ€Ð°Ñивым дизайном и проÑтыми функциÑми. Music Музыка Play/Pause ВоÑпроизведение / Пауза Previous Предыдущий Next Следующий Successfully added to "%1" УÑпешно добавлено "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Файл недейÑтвителен или не ÑущеÑтвует, не удалоÑÑŒ загрузить OK OK Import failed, no valid music file found Ðе удалоÑÑŒ импортировать, не найден дейÑтвительный музыкальный файл All music Ð’ÑÑ Ð¼ÑƒÐ·Ñ‹ÐºÐ° MusicListDataDelegate No songs Ðет пеÑен 1 song 1 пеÑÐ½Ñ %1 songs %1 пеÑни MusicListDataWidget No songs Ðет пеÑен 1 album - 1 song 1 альбом - 1 пеÑÐ½Ñ %1 album - %2 songs %1 альбом - %2 пеÑни %1 albums - %2 songs %1 альбом - %2 пеÑни 1 artist - 1 song 1 артиÑÑ‚ - 1 пеÑÐ½Ñ %1 artist - %2 songs %1 артиÑÑ‚ - %2 пеÑни %1 artists - %2 songs %1 артиÑты - %2 пеÑни 1 song 1 пеÑÐ½Ñ %1 songs %1 пеÑни No search results Ðичего не найдено All Music Ð’ÑÑ ÐœÑƒÐ·Ñ‹ÐºÐ° Time added Ð’Ñ€ÐµÐ¼Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Album Ðльбом Artist ИÑполнитель Title Ðазвание Play All ВоÑпроизвеÑти Ð’ÑÑ‘ Artists ИÑполнитель Albums Ðльбом Custom ПользовательÑкий Search Results Songs ПеÑни No result found Ðичего не найдено MusicListDialog Play All ВоÑпроизвеÑти Ð’ÑÑ‘ Shuffle Перемешать MusicListInfoView Play queue Add to new playlist Pause Пауза Play ВоÑпроизведение Add to playlist Добавить ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Display in file manager Отобразить в менеджере файлов Remove from playlist Удалить из ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Delete from local disk Удалить Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ диÑка Song info Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ пеÑне Cancel Отмена Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Удалить Are you sure you want to delete %1? Ð’Ñ‹ уверены, что хотите удалить %1? Are you sure you want to delete the selected %1 songs? Ð’Ñ‹ уверены, что хотите удалить выбранные %1 пеÑни? The song files contained will also be deleted Файлы, Ñодержащую пеÑню будут также удалены MusicListItem Are you sure you want to delete this playlist? Ð’Ñ‹ дейÑтвительно хотите удалить Ñтот ÑпиÑок воÑпроизведениÑ? Cancel Отмена Delete Удалить MusicListScrollArea Library Библиотека Playlists СпиÑки воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ MusicListView My Favorites Are you sure you want to delete this playlist? Ð’Ñ‹ дейÑтвительно хотите удалить Ñтот ÑпиÑок воÑпроизведениÑ? Cancel Отмена Delete Удалить Pause Пауза Play ВоÑпроизведение Rename Переименовать PlayListView Unknown artist ÐеизвеÑтный иÑполнитель Unknown album ÐеизвеÑтный альбом Play queue musicResult My favorites Избранное Add to new playlist Pause Пауза Play ВоÑпроизведение Add to playlist Добавить ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Display in file manager Отобразить в менеджере файлов Remove from playlist Удалить из ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Remove from play queue Delete from local disk Удалить Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ диÑка Encoding Кодировка Song info Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ пеÑне Cancel Отмена Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Удалить Are you sure you want to delete %1? Ð’Ñ‹ уверены, что хотите удалить %1? Are you sure you want to delete the selected %1 songs? Ð’Ñ‹ уверены, что хотите удалить выбранные %1 пеÑни? The song files contained will also be deleted Файлы, Ñодержащую пеÑню будут также удалены PlayListWidget No songs Ðет пеÑен No search results Ðичего не найдено Play Queue Empty ОчиÑтить 1 song 1 пеÑÐ½Ñ %1 songs %1 пеÑни Playlist Unknown album ÐеизвеÑтный альбом Unknown artist ÐеизвеÑтный иÑполнитель PlaylistManager New playlist Ðовый ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Albums Ðльбом Artists ИÑполнитель All Music Ð’ÑÑ ÐœÑƒÐ·Ñ‹ÐºÐ° My favorites Избранное Search result Результат поиÑка Play ВоÑпроизведение Music Музыка QApplication Music Музыка QObject Minimize to system tray Минимизировать в трей Exit Music Выйти из Плеера Autoplay ÐвтовоÑпроизведение Enable fade in/out Включить замирание вход/выход Remember playback position Запомнить воÑпроизводимую позицию Close Main Window Закрыть Главное Окно Basic ОÑÐ½Ð¾Ð²Ð½Ð°Ñ Play ВоÑпроизведение Shortcuts ГорÑчие клавиши Restore Defaults ВоÑÑтановить Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию Next Следующий Play/Pause ВоÑпроизведение / Пауза Previous Предыдущий Volume down Тише Volume up Громче SearchLyricsWidget Find Lyrics Ðайти текÑÑ‚ пеÑни Title Ðазвание Artist ИÑполнитель Search ПоиÑк SearchResult Music Музыка Artists ИÑполнитель Albums Ðльбом Shortcut Play ВоÑпроизведение Songs ПеÑни Playlists СпиÑки воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Settings ÐаÑтройки Play/Pause ВоÑпроизведение / Пауза Previous Предыдущий Next Далее Volume Up Громче Volume Down Тише Mute Приглушить Favorite Избранное Unfavorite Удалить из избранного Song info Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ пеÑне New playlist Ðовый ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Add music Добавить музыку Rename playlist Переименовать ÑпиÑок воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Remove from playlist Удалить из ÑпиÑка воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Help Помощь Display shortcuts ГорÑчие клавиши TitlebarWidget Search ПоиÑк deepin-music-6.0.1.54/src/music-player/translations/deepin-music_sk.ts000664 000000 000000 00000161274 13703317554 025703 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Vyberte svoju operáciu Exit UkonÄiÅ¥ Minimize to system tray MinimalizovaÅ¥ na systémový panel Do not ask again NepýtaÅ¥ sa znovu Cancel ZruÅ¡iÅ¥ Confirm OK OK DequalizerDialog Custom Vlastný Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults ObnoviÅ¥ predvolené nastavenia Footer Previous Predchádzajúce Next ÄŽalÅ¡ie Play/Pause PrehraÅ¥/pozastaviÅ¥ Favorite Obľúbené Lyrics Text piesne Play Queue Unknown Title Neznámy názov Unknown artist Neznámy autor Play Mode Režim prehrávania Playlist Zoznam skladieb List Loop Zoznam sluÄiek Single Loop Jedna sluÄka Shuffle MieÅ¡anie ImportWidget Add folder PridaÅ¥ adresár Open Folder Add Music Scan SkenovaÅ¥ %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 adresár hudby alebo chyÅ¥te, potiahnite a puste hudobný súbor pre pridanie hudby Loading music, please wait... Nahrávanie hudby, prosím Äakajte... InfoDialog Title: Názov: Artist: Umelec: Album: Album: Type: Typ: Path: Cesta: Unknown artist Neznámy autor Unknown album Neznámy album Size: VeľkosÅ¥: Basic info Duration: Doba trvania: LoadWidget Loading... NaÄítavanie... LyricWidget Find lyrics NájsÅ¥ texty piesní Title Názov Artist Umelca Search HľadaÅ¥ Back Späť MUsicLyricWidget No lyrics yet MainFrame New playlist Nový zoznam skladieb Settings Nastavenia Exit UkonÄiÅ¥ Add folder PridaÅ¥ adresár Add file PridaÅ¥ súbor Dark theme Tmavá téma Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. Deepin Hudobný prehrávaÄ je miestny hudobný prehrávaÄ s krásnym dizajnom a jednoduchými funkciami. Podporuje prezeranie textov pri prehrávaní, prehrávanie bezstratovej hudby a upravovanie zoznamu skladieb, atÄ. Play/Pause PrehraÅ¥/pozastaviÅ¥ Previous Predchádzajúce Invalid or non-existent file Neplatný alebo neexistujúci súbor Failed to import, no vaild music file found! Nepodarilo sa importovaÅ¥, hudobný súbor je neplatný! All music VÅ¡etká hudba OK OK Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" ÚspeÅ¡ne pridané do "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next ÄŽalÅ¡ie MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music VÅ¡etká hudba Time added ÄŒas pridaný Album Artist Umelca Title Názov Play All PrehraÅ¥ vÅ¡etko Artists Albums Custom Vlastný Search Results Songs No result found Nenájdený žiaden výsledok MusicListDialog Play All PrehraÅ¥ vÅ¡etko Shuffle MieÅ¡anie MusicListInfoView New playlist Nový zoznam skladieb Play queue Add to new playlist Pause Play SpustiÅ¥ Add to playlist PridaÅ¥ do zoznamu skladieb Display in file manager ZobraziÅ¥ v správcovi súborov Remove from playlist OdstrániÅ¥ zo zoznamu skladieb Delete from local disk OdstrániÅ¥ z lokálneho disku Song info Info o piesni Cancel ZruÅ¡iÅ¥ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete VymazaÅ¥ Are you sure you want to delete %1? Naozaj chcete vymazaÅ¥ %1? Are you sure you want to delete the selected %1 songs? Naozaj chcete vymazaÅ¥ vybrané %1 piesne? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Naozaj chcete vymazaÅ¥ tento zoznam prehrávania? Cancel ZruÅ¡iÅ¥ Delete VymazaÅ¥ MusicListScrollArea Library Playlists MusicListView New playlist Nový zoznam skladieb Play SpustiÅ¥ Add to playlist PridaÅ¥ do zoznamu skladieb Display in file manager ZobraziÅ¥ v správcovi súborov Song info Info o piesni Are you sure you want to delete %1? Naozaj chcete vymazaÅ¥ %1? Are you sure you want to delete the selected %1 songs? Naozaj chcete vymazaÅ¥ vybrané %1 piesne? Remove from playlist OdstrániÅ¥ zo zoznamu skladieb Delete from local disk OdstrániÅ¥ z lokálneho disku Encoding Kódovanie My Favorites Are you sure you want to delete this playlist? Naozaj chcete vymazaÅ¥ tento zoznam prehrávania? Cancel ZruÅ¡iÅ¥ Delete VymazaÅ¥ Pause Rename PremenovaÅ¥ Deleting the current song will also delete the song files contained Vymazanie aktuálnej skladby tiež odstráni súbory obsiahnutých piesní Unknown artist Neznámy autor Unknown album Neznámy album MusicListWidget No Music Žiadna hudba No result found Nenájdený žiaden výsledok Play All PrehraÅ¥ vÅ¡etko Time added ÄŒas pridaný Title Názov Artist Umelca Album name Názov albumu Custom Vlastný PlayListItem Are you sure you want to delete this playlist? Naozaj chcete vymazaÅ¥ tento zoznam prehrávania? Delete VymazaÅ¥ Cancel ZruÅ¡iÅ¥ PlayListView New playlist Nový zoznam skladieb Play queue musicResult My favorites Moje obľúbené Add to new playlist Pause Play SpustiÅ¥ Add to playlist PridaÅ¥ do zoznamu skladieb Display in file manager ZobraziÅ¥ v správcovi súborov Remove from playlist OdstrániÅ¥ zo zoznamu skladieb Remove from play queue Delete from local disk OdstrániÅ¥ z lokálneho disku Encoding Kódovanie Song info Info o piesni Cancel ZruÅ¡iÅ¥ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Naozaj chcete vymazaÅ¥ %1? Are you sure you want to delete the selected %1 songs? Naozaj chcete vymazaÅ¥ vybrané %1 piesne? The song files contained will also be deleted Rename PremenovaÅ¥ Delete VymazaÅ¥ Unknown artist Neznámy autor Unknown album Neznámy album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Neznámy album Unknown artist Neznámy autor PlaylistManager New playlist Nový zoznam skladieb Artist Umelca Albums Artists All Music VÅ¡etká hudba My favorites Moje obľúbené Search result Výsledky vyhľadávania Play SpustiÅ¥ Music PlaylistWidget New playlist Nový zoznam skladieb QApplication Deepin Music Deepin Hudobný prehrávaÄ Music QObject Deepin Music Deepin Hudobný prehrávaÄ Minimize to system tray MinimalizovaÅ¥ na systémový panel Exit Deepin Music UkonÄiÅ¥ Deepin Hudba Exit Music Autoplay Automaticky prehraÅ¥ Enable fade in/out PovoliÅ¥ zblednutie Remember playback position ZapamätaÅ¥ pozíciu prehrávania Close Main Window ZatvoriÅ¥ hlavné okno Basic Základ Play SpustiÅ¥ Shortcuts Odkazy Restore Defaults ObnoviÅ¥ predvolené nastavenia Next ÄŽalÅ¡ie Play/Pause PrehraÅ¥/pozastaviÅ¥ Previous Predchádzajúce Volume down TichÅ¡ie Volume up HlasnejÅ¡ie SearchLyricsWidget Find Lyrics Title Názov Artist Umelca Search HľadaÅ¥ SearchResult Search "%1" in Deepin Music VyhľadaÅ¥ "%1" v Deepin Hudba Music Artists Albums Shortcut Play SpustiÅ¥ Songs Playlists Settings Nastavenia Play/Pause PrehraÅ¥/pozastaviÅ¥ Previous Predchádzajúce Next ÄŽalÅ¡ie Volume Up Volume Down Mute Favorite Obľúbené Unfavorite Song info Info o piesni New playlist Nový zoznam skladieb Add music Rename playlist Remove from playlist OdstrániÅ¥ zo zoznamu skladieb Help Display shortcuts TitlebarWidget Search HľadaÅ¥ deepin-music-6.0.1.54/src/music-player/translations/deepin-music_sl.ts000664 000000 000000 00000156352 13703317554 025705 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Prosim, izberite vaÅ¡o operacijo Exit Izhod Minimize to system tray PomanjÅ¡aj v statusno vrstico Do not ask again Cancel PrekliÄi Confirm OK V redu DequalizerDialog Custom Po meri Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Obnovi privzeto Footer Previous Predhodni Next Naslednji Play/Pause Predvajaj/premor Favorite Priljubljena Lyrics Besedila pesmi Play Queue Unknown Title Neznan naslov Unknown artist Neznan izvajalec Play Mode NaÄin predvajanja Playlist Seznam predvajanja List Loop Zanka seznamov Single Loop Enojna zanka Shuffle MeÅ¡anje ImportWidget Add folder Dodaj mapo Open Folder Add Music Scan Pregled %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 glasbeni direktorij ali povlecite in spustite glasbeno datoteko, da dodate glasbo Loading music, please wait... Nalagam glasbo, prosim poÄakajte ... InfoDialog Title: Naslov: Artist: Izvajalec: Album: Album: Type: Vrsta: Path: Pot: Unknown artist Neznan izvajalec Unknown album Neznan album Size: Velikost: Basic info Duration: ÄŒas trajanja: LoadWidget Loading... Nalagam... LyricWidget Find lyrics Title Naslov Artist Izvajalec Search IÅ¡Äi Back Nazaj MUsicLyricWidget No lyrics yet MainFrame New playlist Nov seznam predvajanja Settings Nastavitve Exit Izhod Add folder Dodaj mapo Add file Dodaj datoteko Dark theme Temna tema Play/Pause Predvajaj/premor Previous Predhodni Invalid or non-existent file Neveljavna ali neobstojeÄa datoteka Failed to import, no vaild music file found! Uvoz ni uspel, ni veljavne glasbene datoteke! All music Vsa glasba OK V redu Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" UspeÅ¡no dodano v "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Naslednji MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Vsa glasba Time added Dodan Äas Album Artist Izvajalec Title Naslov Play All Predvajaj vse Artists Albums Custom Po meri Search Results Songs No result found Ni rezultatov iskanja MusicListDialog Play All Predvajaj vse Shuffle MeÅ¡anje MusicListInfoView New playlist Nov seznam predvajanja Play queue Add to new playlist Pause Play Predvajaj Add to playlist Dodaj na seznam predvajanja Display in file manager Prikaži v upravitelju datotek Remove from playlist Odstrani s seznama predvajanja Delete from local disk IzbriÅ¡i z lokalnega diska Song info Informacije o pesmi Cancel PrekliÄi Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete IzbriÅ¡i Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel PrekliÄi Delete IzbriÅ¡i MusicListScrollArea Library Playlists MusicListView New playlist Nov seznam predvajanja Play Predvajaj Add to playlist Dodaj na seznam predvajanja Display in file manager Prikaži v upravitelju datotek Song info Informacije o pesmi Remove from playlist Odstrani s seznama predvajanja Delete from local disk IzbriÅ¡i z lokalnega diska Encoding Encoding My Favorites Are you sure you want to delete this playlist? Cancel PrekliÄi Delete IzbriÅ¡i Pause Rename Preimenuj Deleting the current song will also delete the song files contained Izbris te pesmi bo povzroÄil tudi izbris vseh datotek, ki jih vsebuje Unknown artist Neznan izvajalec Unknown album Neznan album MusicListWidget No Music Ni glasbe No result found Ni rezultatov iskanja Play All Predvajaj vse Time added Dodan Äas Title Naslov Artist Izvajalec Album name Ime albuma Custom Po meri PlayListItem Delete IzbriÅ¡i Cancel PrekliÄi PlayListView New playlist Nov seznam predvajanja Play queue musicResult My favorites Priljubljene Add to new playlist Pause Play Predvajaj Add to playlist Dodaj na seznam predvajanja Display in file manager Prikaži v upravitelju datotek Remove from playlist Odstrani s seznama predvajanja Remove from play queue Delete from local disk IzbriÅ¡i z lokalnega diska Encoding Encoding Song info Informacije o pesmi Cancel PrekliÄi Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename Preimenuj Delete IzbriÅ¡i Unknown artist Neznan izvajalec Unknown album Neznan album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Neznan album Unknown artist Neznan izvajalec PlaylistManager New playlist Nov seznam predvajanja Artist Izvajalec Albums Artists All Music Vsa glasba My favorites Priljubljene Search result Rezultati iskanja Play Predvajaj Music PlaylistWidget New playlist Nov seznam predvajanja QApplication Deepin Music Deepin glasbeni predvajalnik Music QObject Deepin Music Glasba Deepin Minimize to system tray PomanjÅ¡aj v statusno vrstico Exit Deepin Music Izhod iz Glasbe Deepin Exit Music Autoplay Samodejno predvajanje Enable fade in/out Remember playback position Zapomni si položaj predvajane vsebine Close Main Window Zapri glavno okno Basic Osnove Play Predvajaj Shortcuts Bližnjice Restore Defaults Obnovi privzeto Next Naslednji Play/Pause Predvajaj/premor Previous Predhodni Volume down TiÅ¡je Volume up Glasneje SearchLyricsWidget Find Lyrics Title Naslov Artist Izvajalec Search IÅ¡Äi SearchResult Search "%1" in Deepin Music IÅ¡Äi "%1" v Glasbi Deepin Music Artists Albums Shortcut Play Predvajaj Songs Playlists Settings Nastavitve Play/Pause Predvajaj/premor Previous Predhodni Next Naslednji Volume Up Volume Down Mute Favorite Priljubljena Unfavorite Song info Informacije o pesmi New playlist Nov seznam predvajanja Add music Rename playlist Remove from playlist Odstrani s seznama predvajanja Help Display shortcuts TitlebarWidget Search IÅ¡Äi deepin-music-6.0.1.54/src/music-player/translations/deepin-music_sq.ts000664 000000 000000 00000142676 13703317554 025716 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Dalje Minimize to system tray Do not ask again Cancel Anuloje Confirm DequalizerDialog Custom Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous Next Play/Pause Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Artist: Album: Type: Path: Unknown artist Unknown album Size: Basic info Duration: LoadWidget Loading... LyricWidget Find lyrics Title Artist Search Back MUsicLyricWidget No lyrics yet MainFrame Settings Exit Dalje Dark theme Equalizer Play/Pause Previous All music OK Add playlist Add music Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel Anuloje Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Anuloje Delete MusicListScrollArea Library Playlists MusicListView Play Are you sure you want to delete this playlist? My Favorites Cancel Anuloje Delete Pause Rename PlayListItem Cancel Anuloje PlayListView Play queue My favorites Add to new playlist Pause Play musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel Anuloje Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Delete Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Music QApplication Music QObject Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Shortcuts Restore Defaults Next Play/Pause Previous Volume down Volume up SearchLyricsWidget Find Lyrics Title Artist Search SearchResult Music Artists Albums Shortcut Play Songs Playlists Settings Play/Pause Previous Next Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search deepin-music-6.0.1.54/src/music-player/translations/deepin-music_sr.ts000664 000000 000000 00000146665 13703317554 025721 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Изађи Minimize to system tray СпуÑти у ÑиÑтемÑку каÑету Do not ask again Ðе питај ме поново Please select your operation Молимо изаберите операцију Cancel Откажи Confirm Потврди DequalizerDialog Custom Прилагођено Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Врати Подразумевано Footer Unknown Title Ðепознат наÑлов Unknown artist Ðепознат извођач Previous Претходно Next Следеће Play/Pause ПуÑти/Паузирај Favorite Омиљено Lyrics ТекÑÑ‚ Play Mode Режим пуштања Play Queue РедоÑлед пуштања List Loop Понављање лиÑте Single Loop Понављање нумере Shuffle ÐаÑумично ImportWidget Open Folder Отвори фаÑциклу Add Music Додај музику Scan Учитај %1 music directory or drag music files here %1 музички директоријум или превуци музичке датотеке овде Loading music, please wait... Учитавање музике, молимо Ñачекајте... InfoDialog Basic info ОÑновни подаци Title: ÐаÑлов: Artist: Извођач: Album: Ðлбум: Type: Ð’Ñ€Ñта: Size: Величина: Duration: Трајање: Path: Путања: Unknown artist Ðепознат извођач Unknown album Ðепознат албум LoadWidget Loading... Учитавање... LyricWidget Find lyrics Пронађи текÑÑ‚ Title ÐаÑлов Artist Извођач Search Претражи Back Ðазад MUsicLyricWidget No lyrics yet MainFrame Add playlist Додај лиÑту пуштања Add music Додај музику Equalizer Settings Подешавања Dark theme Тамна тема Exit Изађи Music is a local music player with beautiful design and simple functions. Музика је локални пуштач музике лепог дизајна Ñа једноÑтавним функцијама. Music Музика Play/Pause ПуÑти/Паузирај Previous Претходно Next Следеће Successfully added to "%1" УÑпешно додато у "%1" Already added to the playlist Већ додато лиÑти пуштања 1 song added 1 нумера додато %1 songs added %1 нумера/е додато File is invalid or does not exist, load failed Датотека је неважећа или не поÑтоји, учитавање неуÑпешно OK У реду Import failed, no valid music file found ÐеуÑпешан увоз, ниÑу пронађене регуларне музичке датотеке All music Сва музика MusicListDataDelegate No songs Ðема нумера 1 song 1 нумера %1 songs %1 нумера/е MusicListDataWidget No songs Ðема нумера 1 album - 1 song 1 албум - 1 нумера %1 album - %2 songs %1 албум - %2 нумера/е %1 albums - %2 songs %1 албума - %2 нумера/е 1 artist - 1 song 1 извођач - 1 нумера %1 artist - %2 songs %1 извођач - %2 нумера/е %1 artists - %2 songs %1 извођача - %2 нумера/е 1 song 1 нумера %1 songs %1 нумера/е No search results Ðема резултата претраге All Music Сва музика Time added Време додавања Album Ðлбум Artist Извођач Title ÐаÑлов Play All ПуÑти Ñве Artists Извођачи Albums Ðлбуми Custom Прилагођено Search Results Резултати претраге Songs Ðумере No result found Ðије пронађен ниједан резултат MusicListDialog Play All ПуÑти Ñве Shuffle ÐаÑумично MusicListInfoView Play queue РедоÑлед пуштања Add to new playlist Додај у нову лиÑту Pause Паузирај Play ПуÑти Add to playlist Додај у лиÑту пуштања Display in file manager Прикажи у управнику података Remove from playlist Уклони из лиÑте пуштања Delete from local disk Обриши Ñа диÑка Song info Информације о нумери Cancel Откажи Remove Уклони Are you sure you want to remove %1? ЗаиÑта желите да уклоните %1? Are you sure you want to remove the selected %1 songs? ЗаиÑта желите да уклоните %1 изабране/их нумере/а? Delete Обриши Are you sure you want to delete %1? ЗаиÑта желите да обришете %1? Are you sure you want to delete the selected %1 songs? ЗаиÑта желите да обришете %1 нумере/а? The song files contained will also be deleted Припадајуће датотеке нумера ће такође бити обриÑане MusicListItem Are you sure you want to delete this playlist? ЗаиÑта желите да обришете лиÑту пуштања? Cancel Откажи Delete Обриши MusicListScrollArea Library Библиотека Playlists ЛиÑта пуштања MusicListView My Favorites Моје омиљено Are you sure you want to delete this playlist? ЗаиÑта желите да обришете лиÑту пуштања? Cancel Откажи Delete Обриши Pause Паузирај Play ПуÑти Rename Преименуј PlayListView Unknown artist Ðепознат извођач Unknown album Ðепознат албум Play queue РедоÑлед пуштања musicResult My favorites Моје омиљено Add to new playlist Додај у нову лиÑту Pause Паузирај Play ПуÑти Add to playlist Додај у лиÑту пуштања Display in file manager Прикажи у управнику података Remove from playlist Уклони из лиÑте пуштања Remove from play queue Delete from local disk Обриши Ñа диÑка Encoding Кодирање Song info Информације о нумери Cancel Откажи Remove Уклони Are you sure you want to remove %1? ЗаиÑта желите да уклоните %1? Are you sure you want to remove the selected %1 songs? ЗаиÑта желите да уклоните %1 изабране/их нумере/а? Delete Обриши Are you sure you want to delete %1? ЗаиÑта желите да обришете %1? Are you sure you want to delete the selected %1 songs? ЗаиÑта желите да обришете %1 нумере/а? The song files contained will also be deleted Припадајуће датотеке нумера ће такође бити обриÑане PlayListWidget No songs Ðема нумера No search results Ðема резултата претраге Play Queue РедоÑлед пуштања Empty Празно 1 song 1 нумера %1 songs %1 нумера/е Playlist Unknown album Ðепознат албум Unknown artist Ðепознат извођач PlaylistManager New playlist Ðова лиÑта пуштања Albums Ðлбуми Artists Извођачи All Music Сва музика My favorites Моје омиљено Search result Резултати претраге Play ПуÑти Music Музика QApplication Music Музика QObject Minimize to system tray СпуÑти у ÑиÑтемÑку каÑету Exit Music Изађи из Музике Autoplay ÐутоматÑки пуштај Enable fade in/out Прелазно утишавање Remember playback position Запамти позицију репродукције Close Main Window Затварање главног прозора Basic ОÑновно Play ПуÑти Shortcuts Пречице Restore Defaults Врати Подразумевано Next Следеће Play/Pause ПуÑти/Паузирај Previous Претходно Volume down Утишај Volume up Појачај SearchLyricsWidget Find Lyrics Пронађи текÑÑ‚ Title ÐаÑлов Artist Извођач Search Претражи SearchResult Music Музика Artists Извођачи Albums Ðлбуми Shortcut Play ПуÑти Songs Ðумере Playlists ЛиÑта пуштања Settings Подeшавања Play/Pause ПуÑти/Паузирај Previous Претходно Next Следеће Volume Up Појачај звук Volume Down Утишај звук Mute Ућуткај Favorite Омиљено Unfavorite Уклони из омиљеног Song info Информације о нумери New playlist Ðова лиÑта пуштања Add music Додај музику Rename playlist Преименуј лиÑту пуштања Remove from playlist Уклони из лиÑте пуштања Help Помоћ Display shortcuts Прикажи пречице TitlebarWidget Search Претражи deepin-music-6.0.1.54/src/music-player/translations/deepin-music_sv.ts000664 000000 000000 00000147201 13703317554 025710 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Avsluta Minimize to system tray Do not ask again Cancel Avbryt Confirm OK Okej DequalizerDialog Custom Egen Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous FöregÃ¥ende Next Nästa Play/Pause Spela/Pausa Favorite Lyrics LÃ¥ttexter Play Queue Unknown Title Unknown artist Okänd artist Play Mode Playlist Spellista List Loop Single Loop Shuffle ImportWidget Add folder Lägg till mapp Open Folder Add Music Scan Skanna %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Titel: Artist: Artist: Album: Type: Typ: Path: Unknown artist Okänd artist Unknown album Okänt album Size: Storlek: Basic info Duration: LoadWidget Loading... Laddar... LyricWidget Find lyrics Title Titel Artist Artist Search Sök Back MUsicLyricWidget No lyrics yet MainFrame Settings Inställningar Exit Avsluta Add folder Lägg till mapp Add file Lägg till fil Dark theme Play/Pause Spela/Pausa Previous FöregÃ¥ende All music OK Okej Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Nästa MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Artist Title Titel Play All Spela Alla Artists Albums Custom Egen Search Results Songs No result found MusicListDialog Play All Spela Alla Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Spela Add to playlist Display in file manager Remove from playlist Ta bort fÃ¥n spellista Delete from local disk Song info Cancel Avbryt Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Radera Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Avbryt Delete Radera MusicListScrollArea Library Playlists MusicListView Play Spela Remove from playlist Ta bort fÃ¥n spellista My Favorites Are you sure you want to delete this playlist? Cancel Avbryt Delete Radera Pause Rename Byt namn Unknown artist Okänd artist Unknown album Okänt album MusicListWidget Play All Spela Alla Title Titel Artist Artist Custom Egen PlayListItem Delete Radera Cancel Avbryt PlayListView Play queue musicResult My favorites Add to new playlist Pause Play Spela Add to playlist Display in file manager Remove from playlist Ta bort fÃ¥n spellista Remove from play queue Delete from local disk Encoding Song info Cancel Avbryt Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename Byt namn Delete Radera Unknown artist Okänd artist Unknown album Okänt album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Okänt album Unknown artist Okänd artist PlaylistManager New playlist Artist Artist Albums Artists All Music My favorites Search result Play Spela Music QApplication Deepin Music Deepin-musik Music QObject Deepin Music Deepin-musik Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Spela Shortcuts Genvägar Restore Defaults Next Nästa Play/Pause Spela/Pausa Previous FöregÃ¥ende Volume down Volym ner Volume up Volym upp SearchLyricsWidget Find Lyrics Title Titel Artist Artist Search Sök SearchResult Music Artists Albums Shortcut Play Spela Songs Playlists Settings Inställningar Play/Pause Spela/Pausa Previous FöregÃ¥ende Next Nästa Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Ta bort fÃ¥n spellista Help Display shortcuts TitlebarWidget Search Sök deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ta.ts000664 000000 000000 00000145157 13703317554 025674 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit வெளியேறà¯à®• Minimize to system tray Do not ask again Cancel நிறà¯à®¤à¯à®¤à¯ Confirm OK சரி DequalizerDialog Custom விரà¯à®ªà¯à®ªà®®à¯ Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous à®®à¯à®¨à¯à®¤à¯ˆà®¯ Next அடà¯à®¤à¯à®¤à¯ Play/Pause இயகà¯à®•à¯/இடைநிறà¯à®¤à¯à®¤à¯ Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Artist: Album: Type: Path: Unknown artist Unknown album Size: Basic info Duration: LoadWidget Loading... LyricWidget Find lyrics Title Artist Search Back MUsicLyricWidget No lyrics yet MainFrame Settings அமைவà¯à®•ள௠Exit வெளியேறà¯à®• Dark theme Equalizer Play/Pause இயகà¯à®•à¯/இடைநிறà¯à®¤à¯à®¤à¯ Previous à®®à¯à®¨à¯à®¤à¯ˆà®¯ All music OK சரி Add playlist Add music Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next அடà¯à®¤à¯à®¤à¯ MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom விரà¯à®ªà¯à®ªà®®à¯ Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel நிறà¯à®¤à¯à®¤à¯ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete அழி Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel நிறà¯à®¤à¯à®¤à¯ Delete அழி MusicListScrollArea Library Playlists MusicListView Play Are you sure you want to delete this playlist? My Favorites Cancel நிறà¯à®¤à¯à®¤à¯ Delete அழி Pause Rename MusicListWidget Custom விரà¯à®ªà¯à®ªà®®à¯ PlayListItem Delete அழி Cancel நிறà¯à®¤à¯à®¤à¯ PlayListView Play queue My favorites Add to new playlist Pause Play musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel நிறà¯à®¤à¯à®¤à¯ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Delete அழி Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Music QApplication Deepin Music டீபà¯à®‡à®©à¯ இசை Music QObject Deepin Music டீபà¯à®‡à®©à¯ இசை Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Shortcuts Restore Defaults Next அடà¯à®¤à¯à®¤à¯ Play/Pause இயகà¯à®•à¯/இடைநிறà¯à®¤à¯à®¤à¯ Previous à®®à¯à®¨à¯à®¤à¯ˆà®¯ Volume down ஒலி கà¯à®±à¯ˆà®•à¯à®• Volume up ஒலி அதிகரிகà¯à®• SearchLyricsWidget Find Lyrics Title Artist Search SearchResult Music Artists Albums Shortcut Play Songs Playlists Settings அமைவà¯à®•ள௠Play/Pause இயகà¯à®•à¯/இடைநிறà¯à®¤à¯à®¤à¯ Previous à®®à¯à®¨à¯à®¤à¯ˆà®¯ Next அடà¯à®¤à¯à®¤à¯ Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search deepin-music-6.0.1.54/src/music-player/translations/deepin-music_tr.ts000664 000000 000000 00000142422 13703317554 025705 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Çıkış Minimize to system tray Sistem tepsisine küçült Do not ask again Bir daha sorma Please select your operation Lütfen yapmak istediÄŸiniz iÅŸlemi seçin Cancel İptal Confirm Onayla DequalizerDialog Custom Özel Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Varsayılanları Geri Yükle Footer Unknown Title Bilinmeyen BaÅŸlık Unknown artist Bilinmeyen sanatçı Previous Önceki Next Sonraki Play/Pause Oynat/Duraklat Favorite Sık kullanılanlara ekle Lyrics Sözler Play Mode Oynatma Kipi Play Queue Oynatma Sırası List Loop Liste Döngüsü Single Loop Parça Döngüsü Shuffle Karıştır ImportWidget Open Folder Klasör Aç Add Music Müzik Ekle Scan Tara %1 music directory or drag music files here %1 müzik dizini veya müzik dosyalarını buraya sürükleyin Loading music, please wait... Müzikler yükleniyor, lütfen bekleyin... InfoDialog Basic info Temel bilgi Title: BaÅŸlık: Artist: Sanatçı: Album: Albüm: Type: Tür: Size: Boyut: Duration: Süre: Path: Yol: Unknown artist Bilinmeyen sanatçı Unknown album Bilinmeyen albüm LoadWidget Loading... Yükleniyor... LyricWidget Find lyrics Sözleri Bul Title BaÅŸlık Artist Sanatçı Search Ara Back Geri MUsicLyricWidget No lyrics yet MainFrame Add playlist Oynatma listesi ekle Add music Müzik ekle Equalizer Settings Ayarlar Dark theme Koyu tema Exit Çıkış Music is a local music player with beautiful design and simple functions. Müzik, hoÅŸ tasarımı ve basit iÅŸlevleri olan sade bir müzik çalardır. Music Müzik Play/Pause Oynat/Duraklat Previous Önceki Next Sonraki Successfully added to "%1" "%1" üzerine eklendi Already added to the playlist Oynatma listesine zaten eklenmiÅŸ 1 song added 1 parça eklendi %1 songs added %1 parça eklendi File is invalid or does not exist, load failed Dosya geçersiz veya mevcut deÄŸil, yükleme baÅŸarısız OK Tamam Import failed, no valid music file found İçe aktarılamadı, geçerli müzik dosyası bulunamadı All music Tüm müzikler MusicListDataDelegate No songs Parça yok 1 song 1 parça %1 songs %1 parça MusicListDataWidget No songs Parça yok 1 album - 1 song 1 albüm - 1 parça %1 album - %2 songs %1 albüm - %2 parça %1 albums - %2 songs %1 albüm - %2 parça 1 artist - 1 song 1 sanatçı - 1 parça %1 artist - %2 songs %1 sanatçı - %2 parça %1 artists - %2 songs %1 sanatçı - %2 parça 1 song 1 parça %1 songs %1 parça No search results Arama sonucu bulunamadı All Music Tüm Müzikler Time added Zaman eklendi Album Albüm Artist Sanatçı Title BaÅŸlık Play All Tümünü Oynat Artists Sanatçılar Albums Albümler Custom Özel Search Results Arama Sonuçları Songs Parçalar No result found Sonuç bulunamadı MusicListDialog Play All Tümünü Oynat Shuffle Karıştır MusicListInfoView Play queue Oynatma sırası Add to new playlist Yeni oynatma listesine ekle Pause Duraklat Play Oynat Add to playlist Oynatma listesine ekle Display in file manager Dosya yöneticisinde görüntüle Remove from playlist Oynatma listesinden kaldır Delete from local disk Yerel diskten sil Song info Parça bilgileri Cancel İptal Remove Kaldır Are you sure you want to remove %1? Kaldırmak istediÄŸinizden emin misiniz %1? Are you sure you want to remove the selected %1 songs? Seçilen %1 parçayı kaldırmak istediÄŸinizden emin misiniz? Delete Sil Are you sure you want to delete %1? %1 ögesini silmek istediÄŸinize emin misiniz? Are you sure you want to delete the selected %1 songs? %1 seçili parçayı silmek istediÄŸinize emin misiniz? The song files contained will also be deleted Parça dosyalarının içeriÄŸi de silinecek MusicListItem Are you sure you want to delete this playlist? Bu oynatma listesini silmek istediÄŸinize emin misiniz? Cancel İptal Delete Sil MusicListScrollArea Library Kütüphane Playlists Oynatma listesi MusicListView My Favorites Sık Kullandıklarım Are you sure you want to delete this playlist? Bu oynatma listesini silmek istediÄŸinize emin misiniz? Cancel İptal Delete Sil Pause Duraklat Play Oynat Rename Yeniden adlandır PlayListView Unknown artist Bilinmeyen sanatçı Unknown album Bilinmeyen albüm Play queue Oynatma sırası musicResult My favorites Sık kullandıklarım Add to new playlist Yeni oynatma listesine ekle Pause Duraklat Play Oynat Add to playlist Oynatma listesine ekle Display in file manager Dosya yöneticisinde görüntüle Remove from playlist Oynatma listesinden kaldır Remove from play queue Delete from local disk Yerel diskten sil Encoding Kodlama Song info Parça bilgileri Cancel İptal Remove Kaldır Are you sure you want to remove %1? Kaldırmak istediÄŸinizden emin misiniz %1? Are you sure you want to remove the selected %1 songs? Seçilen %1 parçayı kaldırmak istediÄŸinizden emin misiniz? Delete Sil Are you sure you want to delete %1? %1 ögesini silmek istediÄŸinize emin misiniz? Are you sure you want to delete the selected %1 songs? %1 seçili parçayı silmek istediÄŸinize emin misiniz? The song files contained will also be deleted Parça dosyalarının içeriÄŸi de silinecek PlayListWidget No songs Parça yok No search results Arama sonucu bulunamadı Play Queue Oynatma Sırası Empty BoÅŸalt 1 song 1 parça %1 songs %1 parça Playlist Unknown album Bilinmeyen albüm Unknown artist Bilinmeyen sanatçı PlaylistManager New playlist Yeni oynatma listesi Albums Albümler Artists Sanatçılar All Music Tüm Müzikler My favorites Sık kullandıklarım Search result Arama sonuçları Play Oynat Music Müzik QApplication Music Müzik QObject Minimize to system tray Sistem tepsisine küçült Exit Music Müzik'den Çık Autoplay Otomatik oynat Enable fade in/out GeçiÅŸlerde açma/kısma kullan Remember playback position Oynatma konumu hatırla Close Main Window Ana Pencereyi Kapat Basic Temel Play Oynat Shortcuts Kısayollar Restore Defaults Varsayılanları Geri Yükle Next Sonraki Play/Pause Oynat/Duraklat Previous Önceki Volume down Sesi azalt Volume up Sesi yükselt SearchLyricsWidget Find Lyrics Åžarkı Sözlerini Bul Title BaÅŸlık Artist Sanatçı Search Ara SearchResult Music Müzik Artists Sanatçılar Albums Albümler Shortcut Play Oynat Songs Parçalar Playlists Oynatma listesi Settings Ayarlar Play/Pause Oynat/Duraklat Previous Önceki Next Sonraki Volume Up Sesi Yükselt Volume Down Sesi Azalt Mute Sesi kapat Favorite Sık kullanılanlara ekle Unfavorite Favoriden çıkar Song info Parça bilgileri New playlist Yeni oynatma listesi Add music Müzik ekle Rename playlist Çalma listesini yeniden adlandır Remove from playlist Oynatma listesinden kaldır Help Yardım Display shortcuts Kısayolları görüntüle TitlebarWidget Search Ara deepin-music-6.0.1.54/src/music-player/translations/deepin-music_ug.ts000664 000000 000000 00000147136 13703317554 025702 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Ú†Ûكىنىش Minimize to system tray سىستÛما تەخسىگە كىچىكلىتىش Do not ask again خاتالىق كۆرۈلدى Please select your operation مەشغۇلاتىڭىزنى تاللاڭ Cancel بىكار قىلىش Confirm جەزملەشتۈرۈش DequalizerDialog Custom ئادەت Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults سۈكۈتتىكى ھالىتىگە قايتۇرۇش Footer Unknown Title تÛمىسى نامەلۇم Unknown artist نامەلۇم سەنئەتچى Previous ئالدىنقى Next ÙƒÛيىنكى Play/Pause قويۇش\توختۇتۇش Favorite ياقتۇرغانلىرىم Lyrics ناخشا تÛكىستى Play Mode قويۇش ھالىتى Play Queue قويۇش تەرتىپى List Loop ھالقىسىمان تىزىملىك Single Loop تاق تىزىملىك Shuffle ئۆزگەرتىش ImportWidget Open Folder Add Music Scan سايىلەش %1 music directory or drag music files here % 1 مۇزىكا مۇندەرىجىسى ياكى مۇزىكا ھۆججەتلىرىنى بۇ يەرگە سۆرەپ كىرىۋاتىدۇ Loading music, please wait... مۇزىكا قۇشۇلىۋاتىدۇ،سەل ساقلاڭ... InfoDialog Basic info ئاساسىي ئۇچۇرلىرى Title: تÛما : Artist: ناخشىچى : Album: ئالبوم : Type: تىپى: Size: چوڭلىقى : Duration: داۋاملاشتۇرۇش ۋاقتى Path: غول مۇندەرىجە: Unknown artist نامەلۇم سەنئەتچى Unknown album نامەلۇم ئالبۇم LoadWidget Loading... قوشۇۋاتىدۇ... LyricWidget Find lyrics تÛكىستنى تÛپىش Title تÛما Artist سەنئەتكار Search ئىزدەش Back قايتىش MUsicLyricWidget No lyrics yet MainFrame Add playlist قويۇش تىزىملىكىگە قوشۇش Add music مۇزىكا قوشۇش Equalizer Settings تەڭشەك Dark theme قاراڭغۇ تÛما Exit Ú†Ûكىنىش Music is a local music player with beautiful design and simple functions. مۇزىكا گۈزەل لايىھىلەش Û‹Û• ئاددىي ئىقتىدارغا ئىگە يەرلىك مۇزىكا قويغۇچ. Music مۇزىكا Play/Pause قويۇش\توختۇتۇش Previous ئالدىنقى Next ÙƒÛيىنكى Successfully added to "%1" مۇۋەپپەقىيەتلىك ھالدا "% 1" Ú¯Û• قوشۇلدى Already added to the playlist قويۇش تىزىملىكىگە بۇرۇنلا قوشۇلغان 1 song added 1 ناخشا قوشۇلدى %1 songs added % 1 ناخشا قوشۇلدى File is invalid or does not exist, load failed ھۆججەت ئىناۋەتسىز ياكى مەۋجۇت ئەمەس ،قوشۇش مەغلۇپ بولدى OK تامام Import failed, no valid music file found ئەكىرىش مەغلۇپ بولدى ØŒ ئۈنۈملۈك مۇزىكا ھۆججىتى تÛپىلمىدى All music ھەممە ناخشىلار MusicListDataDelegate No songs ناخشا يوق 1 song 1 ناخشا %1 songs % 1 ناخشا MusicListDataWidget No songs ناخشا يوق 1 album - 1 song 1 پىلاستىنكا - 1 ناخشا %1 album - %2 songs % 1 پىلاستىنكا -% 2 ناخشا %1 albums - %2 songs % 1 پىلاستىنكا -% 2 ناخشا 1 artist - 1 song 1 سەنئەتكار - 1 ناخشا %1 artist - %2 songs % 1 سەنئەتكار -% 2 ناخشا %1 artists - %2 songs % 1 سەنئەتكار -% 2 ناخشا 1 song 1 ناخشا %1 songs % 1 ناخشا No search results Ú¾Ûچقانداق ئىزدەش نەتىجىسى تىپىلمىدى All Music ھەممە ناخشىلار Time added ۋاقىت قوشۇش Album پىلاستىنكا Artist سەنئەتكار Title تÛما Play All ھەممىسىنى قويۇش Artists سەنئەتكار Albums پىلاستىنكا Custom ئادەت Search Results Songs ناخشا No result found Ú¾Ûچقانداق نەتىجە تÛپىلمىدى MusicListDialog Play All ھەممىسىنى قويۇش Shuffle ئۆزگەرتىش MusicListInfoView Play queue Add to new playlist Pause تورمۇزلاش Play قويۇش Add to playlist قويۇش تىزىملىكىگە قوشۇڭ Display in file manager ھۆججەت باشقۇرغۇچتا كۆرسىتىلىدۇ Remove from playlist قويۇش تىزىملىكىدىن ئۆچۈرۈڭ Delete from local disk يەرلىك دىسكىدىن ئۆچۈرۈڭ Song info ناخشا ئۇچۇرى Cancel بىكار قىلىش Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete ئۆچۈرۈش Are you sure you want to delete %1? % 1 نى ئۆچۈرمەكچىمۇ؟ Are you sure you want to delete the selected %1 songs? تاللانغان% 1 ناخشىنى ئۆچۈرمەكچىمۇ؟ The song files contained will also be deleted مەزمۇندىكى ناخشا ھۆججەتلىرىمۇ ئۆچۈرۈلىدۇ MusicListItem Are you sure you want to delete this playlist? بۇ تىزىملىكنى ئۆچۈرمەكچىمۇ؟ Cancel بىكار قىلىش Delete ئۆچۈرۈش MusicListScrollArea Library كۈتۈپخانا Playlists قويۇش تىزىملىكى MusicListView My Favorites Are you sure you want to delete this playlist? بۇ تىزىملىكنى ئۆچۈرمەكچىمۇ؟ Cancel بىكار قىلىش Delete ئۆچۈرۈش Pause تورمۇزلاش Play قويۇش Rename قايتا ئىسىم قويۇش PlayListView Unknown artist نامەلۇم سەنئەتچى Unknown album نامەلۇم ئالبۇم Play queue musicResult My favorites مىنىڭ ياقتۇرغانلىرىم Add to new playlist Pause تورمۇزلاش Play قويۇش Add to playlist قويۇش تىزىملىكىگە قوشۇڭ Display in file manager ھۆججەت باشقۇرغۇچتا كۆرسىتىلىدۇ Remove from playlist قويۇش تىزىملىكىدىن ئۆچۈرۈڭ Remove from play queue Delete from local disk يەرلىك دىسكىدىن ئۆچۈرۈڭ Encoding كودلاش Song info ناخشا ئۇچۇرى Cancel بىكار قىلىش Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete ئۆچۈرۈش Are you sure you want to delete %1? % 1 نى ئۆچۈرمەكچىمۇ؟ Are you sure you want to delete the selected %1 songs? تاللانغان% 1 ناخشىنى ئۆچۈرمەكچىمۇ؟ The song files contained will also be deleted مەزمۇندىكى ناخشا ھۆججەتلىرىمۇ ئۆچۈرۈلىدۇ PlayListWidget No songs ناخشا يوق No search results Ú¾Ûچقانداق ئىزدەش نەتىجىسى تىپىلمىدى Play Queue قويۇش تەرتىپى Empty قۇرۇق 1 song 1 ناخشا %1 songs % 1 ناخشا Playlist Unknown album نامەلۇم ئالبۇم Unknown artist نامەلۇم سەنئەتچى PlaylistManager New playlist ÙŠÛÚ­Ù‰ قويۇش تىزىملىكى Albums پىلاستىنكا Artists سەنئەتكار All Music ھەممە ناخشىلار My favorites مىنىڭ ياقتۇرغانلىرىم Search result ئىزدەش نەتىجىسى Play قويۇش Music مۇزىكا QApplication Music مۇزىكا QObject Minimize to system tray سىستÛما تەخسىگە كىچىكلىتىش Exit Music مۇزىكىدىن Ú†Ûكىنىش Autoplay ئاپتۇماتىك قويۇش Enable fade in/out ئاقما ئÛقىم قوزغۇتۇش Remember playback position قويۇش ئورنىنى ئەستە تۇتۇش Close Main Window نۆۋەتتىكى كۆزنەكنى تاقاش Basic ئاساسىي ئۇچۇر Play قويۇش Shortcuts تىزلەتمە كۇنۇپكىلار Restore Defaults سۈكۈتتىكى ھالىتىگە قايتۇرۇش Next ÙƒÛيىنكى Play/Pause قويۇش\توختۇتۇش Previous ئالدىنقى Volume down تۆۋەن ئاۋاز Volume up يۇقىرى ئاۋاز SearchLyricsWidget Find Lyrics ناخشا تÛكىستى ئىزدەش Title تÛما Artist سەنئەتكار Search ئىزدەش SearchResult Music مۇزىكا Artists سەنئەتكار Albums پىلاستىنكا Shortcut Play قويۇش Songs ناخشا Playlists قويۇش تىزىملىكى Settings تەڭشەك Play/Pause قويۇش\توختۇتۇش Previous ئالدىنقى Next ÙƒÛيىنكى Volume Up يۇقىرى ئاۋاز Volume Down تۆۋەن ئاۋاز Mute ئاۋازسىز Favorite ياقتۇرغانلىرىم Unfavorite ياقتۇرمىغانلار Song info ناخشا ئۇچۇرى New playlist ÙŠÛÚ­Ù‰ قويۇش تىزىملىكى Add music مۇزىكا قوشۇش Rename playlist قويۇش تىزىملىكىنىڭ نامىنى ئۆزگەرتىش Remove from playlist قويۇش تىزىملىكىدىن ئۆچۈرۈڭ Help ياردەم Display shortcuts ØªÛØ²Ù„ەتمە كۆرسىتىش TitlebarWidget Search ئىزدەش deepin-music-6.0.1.54/src/music-player/translations/deepin-music_uk.ts000664 000000 000000 00000150354 13703317554 025702 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Вихід Minimize to system tray Згорнути до лотка Do not ask again Ðе запитуй знову Please select your operation Будь лаÑка, оберіть дію Cancel СкаÑувати Confirm Підтвердити DequalizerDialog Custom КориÑтувацький Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Відновити за замовчуваннÑм Footer Unknown Title Ðевідома назва Unknown artist Ðевідомий виконавець Previous Попередній Next ÐаÑтупний Play/Pause ВідтвореннÑ/Пауза Favorite Улюблені Lyrics ТекÑÑ‚ піÑні Play Mode Режим Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Play Queue Відтворити чергу List Loop Зациклити ÑпиÑок Single Loop Зациклити Shuffle Перемішати ImportWidget Open Folder Add Music Додати музику Scan Сканувати %1 music directory or drag music files here %1 каталог звукових файлів або Ñкиньте Ñюди звукові файли Loading music, please wait... Музика завантажуєтьÑÑ, зачекайте... InfoDialog Basic info Базові дані Title: Ðазва: Artist: Виконавець: Album: Ðльбом: Type: Тип: Size: Розмір: Duration: ТриваліÑть: Path: ШлÑÑ…: Unknown artist Ðевідомий виконавець Unknown album Ðевідомий альбом LoadWidget Loading... ЗавантаженнÑ... LyricWidget Find lyrics Знайти текÑÑ‚ Title Ðазва Artist Виконавець Search Пошук Back Ðазад MUsicLyricWidget No lyrics yet MainFrame Add playlist Додати ÑпиÑок Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Add music Додати музику Equalizer Settings ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Dark theme Темна тема Exit Вихід Music is a local music player with beautiful design and simple functions. «Музика» — програма-програвач Ð´Ð»Ñ Ð¼ÑƒÐ·Ð¸Ñ‡Ð½Ð¸Ñ… файлів на вашому комп'ютері. Має чудовий та зручний дизайн. Music Музика Play/Pause ВідтвореннÑ/Пауза Previous Попередній Next ÐаÑтупний Successfully added to "%1" УÑпішно додано до "%1" Already added to the playlist Вже додано до ÑпиÑку Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ 1 song added Додано 1 композицію %1 songs added Додано %1 композицій File is invalid or does not exist, load failed Файл Ñ” некоректним або файла не Ñ–Ñнує. Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸. OK Гаразд Import failed, no valid music file found Ðе вдалоÑÑ Ñ–Ð¼Ð¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸. Ðе знайдено коректного файла звукових даних. All music УÑÑ Ð¼ÑƒÐ·Ð¸ÐºÐ° MusicListDataDelegate No songs Ðемає піÑень 1 song 1 пііÑÐ½Ñ %1 songs %1 піÑні MusicListDataWidget No songs Ðемає піÑень 1 album - 1 song 1 альбом — 1 ÐºÐ¾Ð¼Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ %1 album - %2 songs %1 альбом — %2 композиції %1 albums - %2 songs %1 альбомів — %2 композицій 1 artist - 1 song 1 виконавець — 1 ÐºÐ¾Ð¼Ð¿Ð¾Ð·Ð¸Ñ†Ñ–Ñ %1 artist - %2 songs %1 виконавець — %2 композицій %1 artists - %2 songs %1 виконавців — %2 композицій 1 song 1 пііÑÐ½Ñ %1 songs %1 піÑні No search results Ðемає результатів пошуку All Music УÑÑ Ð¼ÑƒÐ·Ð¸ÐºÐ° Time added Ð§Ð°Ñ Ð´Ð¾Ð´Ð°Ð½Ð¾ Album Ðльбом Artist Виконавець Title Ðазва Play All Відтворити вÑÑ– Artists Виконавці Albums Ðльбоми Custom КориÑтувацький Search Results Songs ПіÑні No result found Ðічого не знайдено MusicListDialog Play All Відтворити вÑÑ– Shuffle Перемішати MusicListInfoView Play queue Відтворити чергу Add to new playlist Додати у новий ÑпиÑок Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Pause Пауза Play Відтворити Add to playlist Додати у плейлиÑÑ‚ Display in file manager Відобразити у файловому менеджері Remove from playlist Видалити з плейлиÑту Delete from local disk Видалити з локального диÑку Song info Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ піÑню Cancel СкаÑувати Remove Видалити Are you sure you want to remove %1? Ви впевнені, що хочете видалити %1? Are you sure you want to remove the selected %1 songs? Ви впевнені, що хочете видалити вибрані %1 піÑні? Delete Вилучити Are you sure you want to delete %1? Ви впевнені, що хочете видалити %1? Are you sure you want to delete the selected %1 songs? Ви впевнені, що хочете видалити вибрані %1 піÑні? The song files contained will also be deleted Файли піÑень, Ñкі там зберігаютьÑÑ, також буде вилучено. MusicListItem Are you sure you want to delete this playlist? Ви впевнені, що хочете видалити цей плейлиÑÑ‚? Cancel СкаÑувати Delete Вилучити MusicListScrollArea Library Бібліотека Playlists СпиÑки Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ MusicListView My Favorites Are you sure you want to delete this playlist? Ви впевнені, що хочете видалити цей плейлиÑÑ‚? Cancel Відмінити Delete Видалити Pause Пауза Play Відтворити Rename Перейменувати PlayListView Unknown artist Ðевідомий виконавець Unknown album Ðевідомий альбом Play queue Відтворити чергу musicResult My favorites Мої улюблені Add to new playlist Додати у новий ÑпиÑок Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Pause Пауза Play Відтворити Add to playlist Додати у плейлиÑÑ‚ Display in file manager Відобразити у файловому менеджері Remove from playlist Видалити з плейлиÑту Remove from play queue Delete from local disk Видалити з локального диÑку Encoding ÐšÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Song info Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ піÑню Cancel СкаÑувати Remove Видалити Are you sure you want to remove %1? Ви впевнені, що хочете видалити %1? Are you sure you want to remove the selected %1 songs? Ви впевнені, що хочете видалити вибрані %1 піÑні? Delete Видалити Are you sure you want to delete %1? Ви впевнені, що хочете видалити %1? Are you sure you want to delete the selected %1 songs? Ви впевнені, що хочете видалити вибрані %1 піÑні? The song files contained will also be deleted Файли піÑень, Ñкі там зберігаютьÑÑ, також буде вилучено. PlayListWidget No songs Ðемає піÑень No search results Ðемає результатів пошуку Play Queue Відтворити чергу Empty ПуÑто 1 song 1 пііÑÐ½Ñ %1 songs %1 піÑні Playlist Unknown album Ðевідомий альбом Unknown artist Ðевідомий виконавець PlaylistManager New playlist Ðовий плейлиÑÑ‚ Albums Ðльбоми Artists Виконавці All Music УÑÑ Ð¼ÑƒÐ·Ð¸ÐºÐ° My favorites Мої улюблені Search result Результати пошуку Play Відтворити Music Музика QApplication Music Музика QObject Minimize to system tray Згорнути до лотка Exit Music Вийти з «Музики» Autoplay ÐÐ²Ñ‚Ð¾Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Enable fade in/out Увімкнути згаÑÐ°Ð½Ð½Ñ Ð²Ñ…Ñ–Ð´/вихід Remember playback position Запам'Ñтати позицію Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Close Main Window Закрити головне вікно Basic ОÑновний Play Відтворити Shortcuts ГарÑчі клавіші Restore Defaults Відновити за замовчуваннÑм Next ÐаÑтупний Play/Pause ВідтвореннÑ/Пауза Previous Попередній Volume down Зменшити гучніÑть Volume up Збільшити гучніÑть SearchLyricsWidget Find Lyrics Знайти текÑÑ‚ Title Ðазва Artist Виконавець Search Пошук SearchResult Music Музика Artists Виконавці Albums Ðльбоми Shortcut Play Відтворити Songs ПіÑні Playlists СпиÑки Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Settings ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Play/Pause ВідтвореннÑ/Пауза Previous Ðазад Next Далі Volume Up Збільшити гучніÑть Volume Down Зменшити гучніÑть Mute Вимкнути звук Favorite Улюблені Unfavorite Вилучити з вибраних Song info Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ піÑню New playlist Ðовий плейлиÑÑ‚ Add music Додати музику Rename playlist Перейменувати ÑпиÑок Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Remove from playlist Видалити з плейлиÑту Help Допомога Display shortcuts Показати Ñрлики TitlebarWidget Search Пошук deepin-music-6.0.1.54/src/music-player/translations/deepin-music_vi.ts000664 000000 000000 00000144066 13703317554 025704 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit Thoát Minimize to system tray Do not ask again Cancel Há»§y Confirm OK OK DequalizerDialog Custom Tùy biến Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Previous Trước Next Kế tiếp Play/Pause Chạy/Tạm dừng Favorite Lyrics Play Queue Unknown Title Unknown artist Play Mode List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Title: Artist: Album: Type: Loại: Path: Unknown artist Unknown album Size: Basic info Duration: LoadWidget Loading... Äang tải... LyricWidget Find lyrics Title Artist Search Tìm kiếm Back Trở lại MUsicLyricWidget No lyrics yet MainFrame Settings Cài đặt Exit Thoát Dark theme Equalizer Play/Pause Chạy/Tạm dừng Previous Trước All music OK OK Add playlist Add music Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next Kế tiếp MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom Tùy biến Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel Há»§y Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Xóa Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Há»§y Delete Xóa MusicListScrollArea Library Playlists MusicListView Play Are you sure you want to delete this playlist? My Favorites Cancel Há»§y Delete Xóa Pause Rename MusicListWidget Custom Tùy biến PlayListItem Delete Xóa Cancel Há»§y PlayListView Play queue My favorites Add to new playlist Pause Play musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel Há»§y Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Delete Xóa Unknown artist Unknown album PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Music QApplication Deepin Music Trình nghe nhạc Deepin Music QObject Deepin Music Trình nghe nhạc Deepin Minimize to system tray Exit Music Autoplay Tá»± động chÆ¡i Enable fade in/out Remember playback position Close Main Window Basic Play Shortcuts Các Phím tắt Restore Defaults Next Kế tiếp Play/Pause Chạy/Tạm dừng Previous Trước Volume down Giảm âm thanh Volume up Tăng âm thanh SearchLyricsWidget Find Lyrics Title Artist Search Tìm kiếm SearchResult Music Artists Albums Shortcut Play Songs Playlists Settings Cài đặt Play/Pause Chạy/Tạm dừng Previous Trước Next Kế tiếp Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search Tìm kiếm deepin-music-6.0.1.54/src/music-player/translations/deepin-music_zh_CN.ts000664 000000 000000 00000142667 13703317554 026274 0ustar00rootroot000000 000000 CloseConfirmDialog Exit 退出 Minimize to system tray 最å°åŒ–到系统托盘 Do not ask again ä¸å†è¯¢é—® Please select your operation 请选择您的æ“作 Cancel å–æ¶ˆ Confirm 确定 DequalizerDialog Custom 自定义 Flat å•è°ƒ Classical å¤å…¸ Club 俱ä¹éƒ¨ Dance 舞曲 Full bass 全低音 Full bass and treble 全低音和高音 Full treble 全高音 Headphones 耳机 Large Hall 大厅 Monophony å•è°ƒ Full Bass 全低音 Full Bass and Treble 全低音和高音 Full Treble 全高音 Hall 大厅 Live 实况 Party èšä¼š Pop æµè¡Œ Reggae é›·ç›– Rock 摇滚 Ska æ–¯å¡ Soft 柔和 Soft Rock 慢摇 ON å¼€ OFF å…³ Sound Effects Saved 音效已ä¿å­˜ Soft rock 慢摇 Techno 电å­ä¹ Equalizer å‡è¡¡å™¨ Open å¼€ Close å…³ Save ä¿å­˜ Preamplifier å‰ç½®æ”¾å¤§ Restore Defaults æ¢å¤é»˜è®¤ Footer Unknown Title 未知åç§° Unknown artist 未知歌手 Previous 上一首 Next 下一首 Play/Pause 播放/æš‚åœ Favorite æ”¶è— Lyrics æ­Œè¯ Play Mode æ’­æ”¾æ¨¡å¼ Play Queue 播放队列 List Loop 列表循环 Single Loop 啿›²å¾ªçޝ Shuffle éšæœºæ’­æ”¾ ImportWidget Open Folder 添加歌曲路径 Add Music 添加歌曲文件 Scan 扫æ %1 music directory or drag music files here %1音ä¹ç›®å½•æˆ–æ‹–æ‹½éŸ³ä¹æ–‡ä»¶æ¥æ·»åŠ éŸ³ä¹ Loading music, please wait... 正在加载音ä¹ï¼Œè¯·ç¨å€™â€¦â€¦ InfoDialog Basic info åŸºæœ¬ä¿¡æ¯ Title: 歌曲: Artist: 歌手: Album: 专辑: Type: 文件类型: Size: 文件大å°ï¼š Duration: 时长: Path: 文件路径: Unknown artist 未知歌手 Unknown album 未知专辑 LoadWidget Loading... 加载中...... LyricWidget Find lyrics æœç´¢æ­Œè¯ Title 歌曲åç§° Artist 歌手åç§° Search æœç´¢ Back 返回 MUsicLyricWidget No lyrics yet 还没有歌è¯å“¦ MainFrame Add playlist æ·»åŠ æ–°æ­Œå• Add music æ·»åŠ éŸ³ä¹ Equalizer å‡è¡¡å™¨ Settings 设置 Dark theme 深色主题 Exit 退出 Music is a local music player with beautiful design and simple functions. éŸ³ä¹æ˜¯ä¸€æ¬¾è®¾è®¡ç¾Žè§‚,功能简æ´çš„æœ¬åœ°éŸ³ä¹æ’­æ”¾å™¨ã€‚ Music éŸ³ä¹ Play/Pause 播放/æš‚åœ Previous 上一首 Next 下一首 Successfully added to "%1" æˆåŠŸæ·»åŠ åˆ°â€œ%1†Already added to the playlist å·²æ·»åŠ æ­¤éŸ³ä¹ 1 song added æˆåŠŸæ·»åŠ 1é¦–éŸ³ä¹ %1 songs added æˆåŠŸæ·»åŠ %1é¦–éŸ³ä¹ File is invalid or does not exist, load failed 文件无效或ä¸å­˜åœ¨ï¼ŒåŠ è½½å¤±è´¥ OK 确定 Import failed, no valid music file found å¯¼å…¥å¤±è´¥ï¼Œæœªæ‰¾åˆ°æœ‰æ•ˆçš„éŸ³ä¹æ–‡ä»¶ All music æ‰€æœ‰éŸ³ä¹ MusicListDataDelegate No songs 无歌曲 1 song 1首歌曲 %1 songs %1首歌曲 MusicListDataWidget No songs 无歌曲 1 album - 1 song 1部专辑 - 1首歌曲 %1 album - %2 songs %1部专辑 - %2首歌曲 %1 albums - %2 songs %1部专辑 - %2首歌曲 1 artist - 1 song 1使¼”唱者 - 1首歌曲 %1 artist - %2 songs %1使¼”唱者 - %2首歌曲 %1 artists - %2 songs %1使¼”唱者 - %2首歌曲 1 song 1首歌曲 %1 songs %1首歌曲 No search results æ— æœç´¢ç»“æžœ All Music æ‰€æœ‰éŸ³ä¹ Time added 添加时间 Album 专辑åç§° Artist 歌手åç§° Title 歌曲åç§° Play All 播放所有 Artists 演唱者 Albums 专辑 Custom 自定义 Search Results æœç´¢ç»“æžœ Songs 歌曲 No result found æ— æœç´¢ç»“æžœ MusicListDialog Play All 播放所有 Shuffle éšæœºæ’­æ”¾ MusicListInfoView Play queue 播放队列 Add to new playlist æ·»åŠ åˆ°æ–°æ­Œå• Pause æš‚åœ Play 播放 Add to playlist æ·»åŠ åˆ°æ­Œå• Display in file manager 在文件管ç†å™¨ä¸­æ˜¾ç¤º Remove from playlist 从歌å•中删除 Delete from local disk 从本地删除 Song info æ­Œæ›²ä¿¡æ¯ Cancel å–æ¶ˆ Remove 移除 Are you sure you want to remove %1? 您确定è¦ç§»é™¤%1å—? Are you sure you want to remove the selected %1 songs? 您确定è¦ç§»é™¤é€‰ä¸­çš„%1首歌曲å—? Delete 删除 Are you sure you want to delete %1? 您确定è¦åˆ é™¤ %1 å—? Are you sure you want to delete the selected %1 songs? 您确定è¦åˆ é™¤é€‰ä¸­çš„%1首歌曲å—? The song files contained will also be deleted 这些歌曲所包å«çš„æ­Œæ›²æ–‡ä»¶ä¹Ÿå°†è¢«åˆ é™¤ MusicListItem Are you sure you want to delete this playlist? 您确定è¦åˆ é™¤æ­¤æ­Œå•å—? Cancel å–æ¶ˆ Delete 删除 MusicListScrollArea Library 音ä¹åº“ Playlists æˆ‘çš„æ­Œå• MusicListView My Favorites æˆ‘çš„æ”¶è— Are you sure you want to delete this playlist? 您确定è¦åˆ é™¤æ­¤æ­Œå•å—? Cancel å–æ¶ˆ Delete 删除 Pause æš‚åœ Play 播放 Rename é‡å‘½å PlayListView Unknown artist 未知歌手 Unknown album 未知专辑 Play queue 播放队列 musicResult My favorites æˆ‘çš„æ”¶è— Add to new playlist æ·»åŠ åˆ°æ–°æ­Œå• Pause æš‚åœ Play 播放 Add to playlist æ·»åŠ åˆ°æ­Œå• Display in file manager 在文件管ç†å™¨ä¸­æ˜¾ç¤º Remove from playlist 从歌å•中删除 Remove from play queue 从播放队列中删除 Delete from local disk 从本地删除 Encoding ç¼–ç æ–¹å¼ Song info æ­Œæ›²ä¿¡æ¯ Cancel å–æ¶ˆ Remove 移除 Are you sure you want to remove %1? 您确定è¦ç§»é™¤%1å—? Are you sure you want to remove the selected %1 songs? 您确定è¦ç§»é™¤é€‰ä¸­çš„%1首歌曲å—? Delete 删除 Are you sure you want to delete %1? 您确定è¦åˆ é™¤ %1 å—? Are you sure you want to delete the selected %1 songs? 您确定è¦åˆ é™¤é€‰ä¸­çš„%1首歌曲å—? The song files contained will also be deleted 这些歌曲所包å«çš„æ­Œæ›²æ–‡ä»¶ä¹Ÿå°†è¢«åˆ é™¤ PlayListWidget No songs 无歌曲 No search results æ— æœç´¢ç»“æžœ Play Queue 播放队列 Empty 清空列表 1 song 1首歌曲 %1 songs %1首歌曲 Playlist Unknown album 未知专辑 Unknown artist 未知歌手 PlaylistManager New playlist æ–°å»ºæ­Œå• Albums 专辑 Artists 演唱者 All Music æ‰€æœ‰éŸ³ä¹ My favorites æˆ‘çš„æ”¶è— Search result æœç´¢ç»“æžœ Play 播放 Music 歌曲 QApplication Music éŸ³ä¹ QObject Minimize to system tray 最å°åŒ–到系统托盘 Exit Music é€€å‡ºéŸ³ä¹ Autoplay å¯åŠ¨æ—¶è‡ªåŠ¨æ’­æ”¾ Enable fade in/out 开坿·¡å…¥æ·¡å‡º Remember playback position å¯åŠ¨æ—¶è®°ä½ä¸Šæ¬¡æ’­æ”¾è¿›åº¦ Close Main Window å…³é—­ä¸»çª—å£ Basic 基础设置 Play 播放 Shortcuts å¿«æ·é”® Restore Defaults æ¢å¤é»˜è®¤ Next 下一首 Play/Pause 播放/æš‚åœ Previous 上一首 Volume down 音é‡å‡å° Volume up 音é‡å¢žå¤§ SearchLyricsWidget Find Lyrics æœç´¢æ­Œè¯ Title 歌曲åç§° Artist 歌手åç§° Search æœç´¢ SearchResult Music 歌曲 Artists 演唱者 Albums 专辑 Shortcut Play 播放 Songs 歌曲 Playlists æ­Œå• Settings 设置 Play/Pause 播放/æš‚åœ Previous 上一首 Next 下一首 Volume Up 音é‡å¢žå¤§ Volume Down 音é‡å‡å° Mute é™éŸ³ Favorite æ”¶è— Unfavorite å–æ¶ˆæ”¶è— Song info æ­Œæ›²ä¿¡æ¯ New playlist æ–°å»ºæ­Œå• Add music æ·»åŠ éŸ³ä¹ Rename playlist é‡å‘½åæ­Œå• Remove from playlist 从歌å•中删除 Help 帮助 Display shortcuts 显示快æ·é”® TitlebarWidget Search æœç´¢ deepin-music-6.0.1.54/src/music-player/translations/deepin-music_zh_HK.ts000664 000000 000000 00000155175 13703317554 026274 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation Exit 離開 Minimize to system tray Do not ask again Cancel å–æ¶ˆ Confirm OK 確定 DequalizerDialog Custom 自訂 Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults æ¢å¾©é è¨­å€¼ Footer Previous 上一首 Next 下一步 Play/Pause æš«åœ/繼續 Favorite 最愛 Lyrics 歌詞設置 Play Queue Unknown Title 未知標題 Unknown artist 未知è—è¡“å®¶ Play Mode æ’­æ”¾æ¨¡å¼ Playlist 播放清單 List Loop Single Loop Shuffle ImportWidget Add folder 新增資料夾 Open Folder Add Music Scan 掃æ %1 music directory or drag music files here Loading music, please wait... 載入音樂中,請ç¨å€™â€¦ InfoDialog Title: 標題: Artist: è—人: Album: 專輯: Type: 類型: Path: 路徑: Unknown artist 未知è—è¡“å®¶ Unknown album 未知專輯 Size: 大å°ï¼š Basic info Duration: 長度: LoadWidget Loading... 載入中… LyricWidget Find lyrics Title 標題 Artist è—è¡“å®¶ Search æœå°‹ Back 返回 MUsicLyricWidget No lyrics yet MainFrame New playlist 新增播放清單 Add music Equalizer Settings 設置 Exit 離開 Add folder 新增資料夾 Add file 新增檔案 Dark theme 深色主題 Play/Pause æš«åœ/繼續 Previous 上一首 Invalid or non-existent file 無效或ä¸å­˜åœ¨çš„æª”案 All music 所有音樂 OK 確定 Add playlist Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" æˆåŠŸæ–°å¢žåˆ°ã€Œ%1〠Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next 下一步 MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No Music 沒有音樂 No result found 沒有æœå°‹çµæžœ All Music 所有音樂 No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results Time added Album Artist è—è¡“å®¶ Songs Search Results Album name 專輯å稱 Title 標題 Play All 播放全部 Artists Albums Custom 自訂 MusicListDialog Play All 播放全部 Shuffle MusicListInfoView New playlist 新增播放清單 Play queue Add to new playlist Pause Play 播放 Add to playlist 加到播放清單 Display in file manager 於檔案管ç†å“¡é¡¯ç¤º Remove from playlist 從播放清單中移除 Delete from local disk 從本機儲存刪除 Song info 歌曲資訊 Cancel å–æ¶ˆ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete 刪除 Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel å–æ¶ˆ Delete 刪除 MusicListScrollArea Library Playlists MusicListView New playlist 新增播放清單 My Favorites Pause Play 播放 Rename 釿–°å‘½å Are you sure you want to delete this playlist? Add to playlist 加到播放清單 Display in file manager 於檔案管ç†å“¡é¡¯ç¤º Song info 歌曲資訊 Remove from playlist 從播放清單中移除 Delete from local disk 從本機儲存刪除 Encoding 編碼 Cancel å–æ¶ˆ Delete 刪除 Unknown artist 未知è—è¡“å®¶ Unknown album 未知專輯 MusicListWidget No Music 沒有音樂 No result found 沒有æœå°‹çµæžœ Play All 播放全部 Title 標題 Artist è—è¡“å®¶ Album name 專輯å稱 Custom 自訂 PlayListItem Delete 刪除 Cancel å–æ¶ˆ PlayListView New playlist 新增播放清單 Play queue musicResult My favorites 我的最愛 Add to new playlist Pause Play 播放 Add to playlist 加到播放清單 Display in file manager 於檔案管ç†å“¡é¡¯ç¤º Remove from playlist 從播放清單中移除 Remove from play queue Delete from local disk 從本機儲存刪除 Encoding 編碼 Song info 歌曲資訊 Cancel å–æ¶ˆ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted Rename 釿–°å‘½å Delete 刪除 Unknown artist 未知è—è¡“å®¶ Unknown album 未知專輯 PlayListWidget No Music 沒有音樂 No result found 沒有æœå°‹çµæžœ No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album 未知專輯 Unknown artist 未知è—è¡“å®¶ PlaylistManager New playlist 新增播放清單 Artist è—è¡“å®¶ Albums Artists All Music 所有音樂 My favorites 我的最愛 Search result æœå°‹çµæžœ Play 播放 Music PlaylistWidget New playlist 新增播放清單 QApplication Deepin Music Deepin 音樂 Music QObject Deepin Music Deepin 音樂 Minimize to system tray Exit Deepin Music 退出 Deepin 音樂 Exit Music Autoplay 自動播放 Enable fade in/out Remember playback position 記錄播放時間 Close Main Window 關閉主視窗 Basic 基本 Play 播放 Shortcuts æ·å¾‘ Restore Defaults æ¢å¾©é è¨­å€¼ Next 下一步 Play/Pause æš«åœ/繼續 Previous 上一首 Volume down èª¿ä½ŽéŸ³é‡ Volume up èª¿é«˜éŸ³é‡ SearchLyricsWidget Find Lyrics Title 標題 Artist è—è¡“å®¶ Search æœå°‹ SearchResult Search "%1" in Deepin Music æ–¼ Deepin 音樂æœå°‹ã€Œ%1〠Music Artists Albums Shortcut Play 播放 Songs Playlists Settings 設置 Play/Pause æš«åœ/繼續 Previous 上一首 Next 下一步 Volume Up Volume Down Mute Favorite 最愛 Unfavorite Song info 歌曲資訊 New playlist 新增播放清單 Add music Rename playlist Remove from playlist 從播放清單中移除 Help Display shortcuts TitlebarWidget Search æœå°‹ deepin-music-6.0.1.54/src/music-player/translations/deepin-music_zh_TW.ts000664 000000 000000 00000157452 13703317554 026324 0ustar00rootroot000000 000000 CloseConfirmDialog Please select your operation è«‹é¸æ“‡å‹•作 Exit é€€å‡ºç¨‹å¼ Minimize to system tray 最å°åŒ–到系統匣 Do not ask again è«‹å‹¿å†æ¬¡è©¢å• Cancel å–æ¶ˆ Confirm OK 確定 DequalizerDialog Custom 自訂 Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults 還原é è¨­å€¼ Footer Previous 上一曲 Next 下一曲 Play/Pause æ’­æ”¾ï¼æš«åœ Favorite 我的最愛 Lyrics 顯示歌詞 Play Queue Unknown Title 未知標題 Unknown artist 未知作家 Play Mode æ’­æ”¾æ¨¡å¼ Playlist 播放列表 List Loop 列表循環 Single Loop 單曲循環 Shuffle 隨機播放 ImportWidget Add folder 加入資料夾 Open Folder Add Music Scan 掃æ %1 music directory or drag music files here %1 music directory or drag & drop music file to add music %1 音樂資料夾或拖拽音樂檔案到此加入音樂 Loading music, please wait... 正在載入音樂,請ç¨å€™ InfoDialog Title: 歌曲標題: Artist: 作家å稱: Album: 專輯å稱: Type: 類型: Path: ä½ç½®ï¼š Unknown artist 未知作家 Unknown album 未知專輯 Size: 檔案大å°ï¼š Basic info Duration: 歌曲長度: LoadWidget Loading... 正在載入 LyricWidget Find lyrics æœå°‹æ­Œè©ž Title 歌曲標題 Artist 作家å稱 Search æœå°‹ Back 返回 MUsicLyricWidget No lyrics yet MainFrame New playlist 新增播放列表 Settings 設定 Exit 離開 Add folder 加入資料夾 Add file 加入檔案 Dark theme æ·±è‰²æ¨¡å¼ Deepin Music is a beautiful and simple music player that plays local audios. It supports viewing lyrics during playback, playing lossless audio and playlist customization, etc. Deepin éŸ³æ¨‚æ˜¯å€‹æ¼‚äº®ä¸”ç°¡å–®ï¼Œç”¨ä¾†æ’­æ”¾æœ¬æ©ŸéŸ³æ¨‚çš„éŸ³æ¨‚æ’­æ”¾å™¨ã€‚å…¶æ”¯æ´æ’­æ”¾æ™‚é¡¯ç¤ºæ­Œè©žã€æ’­æ”¾ç„¡æéŸ³æ¨‚和自訂播放列表等等。 Play/Pause æ’­æ”¾ï¼æš«åœ Previous 上一曲 Invalid or non-existent file 檔案格å¼éŒ¯èª¤æˆ–éºå¤± Failed to import, no vaild music file found! 無法匯入,找ä¸åˆ°æœ‰æ•ˆçš„éŸ³æ¨‚æª”æ¡ˆï¼ All music 所有音樂 OK 確定 Add playlist Add music Equalizer Music is a local music player with beautiful design and simple functions. Music Successfully added to "%1" æˆåŠŸåŠ å…¥è‡³ã€Œ%1〠Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed Import failed, no valid music file found Next 下一曲 MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music 所有音樂 Time added 加入時間 Album Artist 作家å稱 Title 歌曲標題 Play All 全部播放 Artists Albums Custom 自訂 Search Results Songs No result found 找ä¸åˆ°çµæžœ MusicListDialog Play All 全部播放 Shuffle 隨機播放 MusicListInfoView Play queue Add to new playlist Pause Play 播放 Add to playlist 加入播放列表 Display in file manager 在檔案管ç†å™¨ä¸­é¡¯ç¤º Remove from playlist 從播放列表移除 Delete from local disk 從本機硬碟中移除 Song info 歌曲資訊 Cancel å–æ¶ˆ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete 刪除 Are you sure you want to delete %1? 確定刪除 %1? Are you sure you want to delete the selected %1 songs? 確定刪除 %1 首é¸å–音樂? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? 確定刪除此播放列表? Cancel å–æ¶ˆ Delete 刪除 MusicListScrollArea Library Playlists MusicListView New playlist 新增播放列表 Play 播放 Add to playlist 加入播放列表 Display in file manager 在檔案管ç†å™¨ä¸­é¡¯ç¤º Song info 歌曲資訊 Are you sure you want to delete %1? 確定刪除 %1? Are you sure you want to delete the selected %1 songs? 確定刪除 %1 首é¸å–音樂? Remove from playlist 從播放列表移除 Delete from local disk 從本機硬碟中移除 Encoding 編碼 My Favorites Are you sure you want to delete this playlist? 確定刪除此播放列表? Cancel å–æ¶ˆ Delete 刪除 Pause Rename 釿–°å‘½å Deleting the current song will also delete the song files contained 刪除歌曲也會刪除電腦中的檔案 Unknown artist 未知作家 Unknown album 未知專輯 MusicListWidget No Music 沒有音樂 No result found 找ä¸åˆ°çµæžœ Play All 全部播放 Time added 加入時間 Title 歌曲標題 Artist 作家å稱 Album name 專輯å稱 Custom 自訂 PlayListItem Are you sure you want to delete this playlist? 確定刪除此播放列表? Delete 刪除 Cancel å–æ¶ˆ PlayListView Play queue musicResult My favorites 我的最愛 Add to new playlist Pause Play 播放 Add to playlist 加入播放列表 Display in file manager 在檔案管ç†å™¨ä¸­é¡¯ç¤º Remove from playlist 從播放列表移除 Remove from play queue Delete from local disk 從本機硬碟中移除 Encoding 編碼 Song info 歌曲資訊 Cancel å–æ¶ˆ Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Are you sure you want to delete %1? 確定刪除 %1? Are you sure you want to delete the selected %1 songs? 確定刪除 %1 首é¸å–音樂? The song files contained will also be deleted Rename 釿–°å‘½å Delete 刪除 Unknown artist 未知作家 Unknown album 未知專輯 PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album 未知專輯 Unknown artist 未知作家 PlaylistManager New playlist 新播放列表 Artist 作家å稱 Albums Artists All Music 所有音樂 My favorites 我的最愛 Search result æœå°‹çµæžœ Play 播放 Music PlaylistWidget New playlist 新增播放列表 QApplication Deepin Music Deepin 音樂 Music QObject Deepin Music Deepin 音樂 Minimize to system tray 最å°åŒ–到系統匣 Exit Deepin Music 關閉 Deepin 音樂 Exit Music Autoplay 啟動時自動播放 Enable fade in/out 開啟淡入淡出 Remember playback position è¨˜ä½æ’­æ”¾ä½ç½® Close Main Window 關閉主視窗 Basic 基本設定 Play 播放 Shortcuts å¿«é€Ÿéµ Restore Defaults 還原é è¨­å€¼ Next 下一曲 Play/Pause æ’­æ”¾ï¼æš«åœ Previous 上一曲 Volume down éŸ³é‡æ¸› Volume up 音é‡å¢ž SearchLyricsWidget Find Lyrics Title 歌曲標題 Artist 作家å稱 Search æœå°‹ SearchResult Search "%1" in Deepin Music 在 Deepin 音樂中æœå°‹ã€Œ%1〠Music Artists Albums Shortcut Play 播放 Songs Playlists Settings 設定 Play/Pause æ’­æ”¾ï¼æš«åœ Previous 上一曲 Next 下一曲 Volume Up Volume Down Mute Favorite 我的最愛 Unfavorite Song info 歌曲資訊 New playlist Add music Rename playlist Remove from playlist 從播放列表移除 Help Display shortcuts TitlebarWidget Search æœå°‹ deepin-music-6.0.1.54/src/music-player/translations/desktop/000775 000000 000000 00000000000 13703317554 023712 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/translations/desktop/desktop.ts000664 000000 000000 00000001666 13703317554 025744 0ustar00rootroot000000 000000 desktopDeepin MusicMusicNext trackPlay your music collectionPlay/Pause trackPrevious track deepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_af.ts000664 000000 000000 00000001662 13703317554 026406 0ustar00rootroot000000 000000 desktopDeepin MusicMusicMusiekNext trackPlay your music collectionPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ar.ts000664 000000 000000 00000002107 13703317554 026415 0ustar00rootroot000000 000000 desktopDeepin Musicموسيقى دييبن MusicموسيقىNext trackالمسار التاليPlay your music collectionتشغيل مجموعة الصوتيات الخاصة بكPlay/Pause trackتشغيل / إيقا٠المسارPrevious trackالمسار السابقdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ast.ts000664 000000 000000 00000001776 13703317554 026615 0ustar00rootroot000000 000000 desktopDeepin MusicMúsica DeepinMusicMúsicaNext trackPista siguientePlay your music collectionReproduz la to coleición de músicaPlay/Pause trackReproducir/posar pistaPrevious trackPista previadeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_az.ts000664 000000 000000 00000001716 13703317554 026432 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MusiqiMusicMusiqiNext trackPlay your music collectionMusiqi kolleksiyavı oxutPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_bg.ts000664 000000 000000 00000002143 13703317554 026403 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin МузикаMusicМузикаNext trackСледваща пеÑенPlay your music collectionИзпълнение на Вашата музикална колекциÑPlay/Pause trackИзпълнение/Пауза на запиÑаPrevious trackПредишна пеÑенdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_bn.ts000664 000000 000000 00000001733 13703317554 026416 0ustar00rootroot000000 000000 desktopDeepin Musicডিপিন মিউজিকMusicমিউজিকNext trackPlay your music collectionPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ca.ts000664 000000 000000 00000002010 13703317554 026367 0ustar00rootroot000000 000000 desktopDeepin MusicMúsica del DeepinMusicMúsicaNext trackPista següentPlay your music collectionReproduïu la col·lecció de músicaPlay/Pause trackReprodueix / pausa la pistaPrevious trackPista anteriordeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_cs.ts000664 000000 000000 00000002032 13703317554 026415 0ustar00rootroot000000 000000 desktopDeepin MusicPÅ™ehrávání hudbyMusicHudbaNext trackDalší skladbaPlay your music collectionPÅ™ehrávejte svoji sbírku zvukových záznamůPlay/Pause trackPÅ™ehrát/Pozastavit skladbuPrevious trackPÅ™edchozí skladbadeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_da.ts000664 000000 000000 00000001743 13703317554 026404 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin musikMusicMusikNext trackNæste sporPlay your music collectionAfspil din musiksamlingPlay/Pause trackAfspil/pause sporPrevious trackForrige spordeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_de.ts000664 000000 000000 00000001771 13703317554 026411 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MusikMusicMusikNext trackNächster TitelPlay your music collectionMusik verwalten und abspielenPlay/Pause trackTitel abspielen/pausierenPrevious trackVorheriger Titeldeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_el.ts000664 000000 000000 00000002160 13703317554 026412 0ustar00rootroot000000 000000 desktopDeepin MusicΜουσική DeepinMusicΜουσικήNext trackΕπόμενο κομμάτιPlay your music collectionΑναπαÏαγάγετε τη μουσική σας συλλογήPlay/Pause trackΑναπαÏαγωγή/ΠαÏση κομματιοÏPrevious trackΠÏοηγοÏμενο κομμάτιdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_en_AU.ts000664 000000 000000 00000001705 13703317554 027005 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MusicMusicMusicNext trackPlay your music collectionPlay your musicPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_en_US.ts000664 000000 000000 00000144276 13703317554 027042 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Minimize to system tray Do not ask again Please select your operation Cancel Confirm DequalizerDialog Custom Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Unknown Title Unknown artist Previous Next Play/Pause Favorite Lyrics Play Mode Play Queue List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Basic info Title: Artist: Album: Type: Size: Duration: Path: Unknown artist Unknown album LoadWidget Loading... LyricWidget Find lyrics Title Artist Search Back MUsicLyricWidget No lyrics yet MainFrame Add playlist Add music Equalizer Settings Dark theme Exit Music is a local music player with beautiful design and simple functions. Music Play/Pause Previous Next Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed OK Import failed, no valid music file found All music MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Artists Albums Custom Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Delete MusicListScrollArea Library Playlists MusicListView My Favorites Are you sure you want to delete this playlist? Cancel Delete Pause Play Rename PlayListView Unknown artist Unknown album Play queue My favorites Add to new playlist Pause Play musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Music QApplication Music QObject Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Shortcuts Restore Defaults Next Play/Pause Previous Volume down Volume up SearchLyricsWidget Find Lyrics Title Artist Search SearchResult Music Artists Albums Shortcut Play Songs Playlists Settings Play/Pause Previous Next Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search deepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_eo.ts000664 000000 000000 00000001720 13703317554 026416 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MuzikoMusicMuzikoNext trackPlay your music collectionLudi vian muzikojn kolektonPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_es.ts000664 000000 000000 00000001777 13703317554 026436 0ustar00rootroot000000 000000 desktopDeepin MusicReproductor DeepinMusicMúsicaNext trackSiguiente pistaPlay your music collectionReproduce tu colección musicalPlay/Pause trackReproducir/Pausar pistaPrevious trackPista anteriordeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_fa.ts000664 000000 000000 00000002034 13703317554 026400 0ustar00rootroot000000 000000 desktopDeepin Musicدیپین موزیکMusicموسیقیNext trackقطعه بعدیPlay your music collectionپخش کردن موسیقی های منتخبPlay/Pause trackپخش/توق٠قطعهPrevious trackقطعه قبلیdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_fi.ts000664 000000 000000 00000001764 13703317554 026421 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MusiikkiMusicMusiikkiNext trackSeuraava raitaPlay your music collectionToista musiikkikokoelmaPlay/Pause trackToista/Pysäytä raitaPrevious trackEdellinen raitadeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_fil.ts000664 000000 000000 00000001710 13703317554 026564 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MusicMusicMusikaNext trackPlay your music collectionMagtugtog ng musikaPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_fr.ts000664 000000 000000 00000002005 13703317554 026417 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MusicMusicMusiqueNext trackPiste suivantePlay your music collectionLire votre collection de musiquePlay/Pause trackLire / Mettre en pause la pistePrevious trackPiste précédentedeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_gl_ES.ts000664 000000 000000 00000001775 13703317554 027016 0ustar00rootroot000000 000000 desktopDeepin MusicMúsicaMusicMúsicaNext trackSeguinte pistaPlay your music collectionReproduce a túa colección de músicaPlay/Pause trackReproducir/Pausar pistaPrevious trackPista anteriordeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_he.ts000664 000000 000000 00000002033 13703317554 026405 0ustar00rootroot000000 000000 desktopDeepin Musicנגן מוסיקה DeepinMusicמוזיקהNext trackהקטע הב×Play your music collectionנגן ×ת ×וסף המוסיקה שלךPlay/Pause trackנגן/הפסק קטעPrevious trackהקטע הקוד×deepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_hi_IN.ts000664 000000 000000 00000002136 13703317554 027003 0ustar00rootroot000000 000000 desktopDeepin Musicडीपइन संगीतMusicसंगीतNext trackअगला गानाPlay your music collectionसंगीत संगà¥à¤°à¤¹ चलायेंPlay/Pause trackगाना पà¥à¤²à¥‡/पौज़ करेंPrevious trackपिछला गानाdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_hr.ts000664 000000 000000 00000001762 13703317554 026432 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin glazbaMusicGlazbaNext trackSlijedeći zapisPlay your music collectionSluÅ¡ajte svoju fonotekuPlay/Pause trackIzvodi/pauziraj zapisPrevious trackPrethodni zapisdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_hu.ts000664 000000 000000 00000002012 13703317554 026422 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin zenelejátszóMusicZeneNext trackKövetkezÅ‘ számPlay your music collectionZenegyűjtemény lejátszásaPlay/Pause trackSzám lejátszása/SzüneteltetésePrevious trackElÅ‘zÅ‘ számdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_hy.ts000664 000000 000000 00000002104 13703317554 026430 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin ÔµÖ€Õ¡ÕªÕ·Õ¿Õ¡Õ¯Õ¡Õ¶ Õ†Õ¾Õ¡Õ£Õ¡Ö€Õ¯Õ«Õ¹MusicNext trackÕ€Õ¡Õ»Õ¸Ö€Õ¤Õ¨Play your music collectionÕ†Õ¾Õ¡Õ£Õ¥Õ¬ Õ±Õ¥Ö€ Õ¥Ö€Õ¡Õ®Õ·Õ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ°Õ¡Õ¾Õ¡Ö„Õ¡Õ®Õ¸Ö‚Õ¶Play/Pause trackÕ†Õ¾Õ¡Õ£Õ¥Õ¬/Õ¯Õ¡Õ¶Õ£Õ¶Õ¥ÖÕ¶Õ¥Õ¬Previous trackÕ†Õ¡Õ­Õ¸Ö€Õ¤Õ¨deepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_id.ts000664 000000 000000 00000001760 13703317554 026413 0ustar00rootroot000000 000000 desktopDeepin MusicMusik DeepinMusicMusikNext trackLajur selanjutnyaPlay your music collectionMainkan koleksi musikPlay/Pause trackMainkan/hentikan lajurPrevious trackLajur sebelumnyadeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_it.ts000664 000000 000000 00000001761 13703317554 026434 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MusicMusicMusicNext trackTraccia successivaPlay your music collectionEsegui la tua raccolta musicalePlay/Pause trackPlay/PausaPrevious trackTraccia precedentedeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ja.ts000664 000000 000000 00000002000 13703317554 026375 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin音楽プレイヤーMusicミュージックNext track次ã¸Play your music collection音楽コレクションã®å†ç”ŸPlay/Pause trackå†ç”Ÿ/ä¸€æ™‚åœæ­¢Previous trackå‰ã¸deepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ko.ts000664 000000 000000 00000001761 13703317554 026431 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin ìŒì•…MusicìŒì•…Next trackë‹¤ìŒ íŠ¸ëž™Play your music collectionìŒì•… 컬렉션 재ìƒPlay/Pause track트랙 재ìƒ/ì¼ì‹œì •ì§€Previous trackì´ì „ 트랙deepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ku_IQ.ts000664 000000 000000 00000002016 13703317554 027022 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MûzîkMusicMûzîkNext trackStrana pêşvePlay your music collectionLi koleksiyona xwe ya mûzîkê bixe Play/Pause trackLi stranê bixe/Stranê BisekinînePrevious trackStrana paÅŸvedeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_lt.ts000664 000000 000000 00000001775 13703317554 026444 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin muzikaMusicMuzikaNext trackKitas takelisPlay your music collectionGroti savo muzikinÄ™ kolekcijÄ…Play/Pause trackGroti/Pristabdyti takelįPrevious trackAnkstesnis takelisdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ml.ts000664 000000 000000 00000001676 13703317554 026435 0ustar00rootroot000000 000000 desktopDeepin MusicMusicസംഗീതംNext trackPlay your music collectionPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_mn.ts000664 000000 000000 00000002103 13703317554 026421 0ustar00rootroot000000 000000 desktopDeepin MusicДÑÑпин ХѳгжиMusicХөгжимNext trackДараагийн дууPlay your music collectionХөгжмийн цуглуулгаа тоглуулPlay/Pause trackДуу Тоглуулах/Түр ЗогÑоохPrevious trackӨмнөх дууdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ms.ts000664 000000 000000 00000001756 13703317554 026443 0ustar00rootroot000000 000000 desktopDeepin MusicPemain Muzik DeepinMusicMuzikNext tracktrek seterusnyaPlay your music collectionMain koleksi muzik andaPlay/Pause trackMain/Jeda trekPrevious tracktrek sebelumnyadeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_nb.ts000664 000000 000000 00000001717 13703317554 026420 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MusikkMusicMusikkNext trackPlay your music collectionSpill av din musikksamlingPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ne.ts000664 000000 000000 00000001673 13703317554 026424 0ustar00rootroot000000 000000 desktopDeepin MusicMusicसंगीतNext trackPlay your music collectionPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_nl.ts000664 000000 000000 00000001766 13703317554 026436 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MuziekMusicMuziekNext trackVolgende nummerPlay your music collectionSpeel je muziekverzameling afPlay/Pause trackNummer afspelen/pauzerenPrevious trackVorig nummerdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_pam.ts000664 000000 000000 00000001663 13703317554 026576 0ustar00rootroot000000 000000 desktopDeepin MusicMusicMusikaNext trackPlay your music collectionPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_pl.ts000664 000000 000000 00000002013 13703317554 026422 0ustar00rootroot000000 000000 desktopDeepin MusicMuzyka DeepinMusicMuzykaNext trackNastÄ™pna Å›cieżkaPlay your music collectionOdtwarzaj swojÄ… kolekcjÄ™ muzykiPlay/Pause trackOdtwórz/Wstrzymaj Å›cieżkÄ™Previous trackPoprzednia Å›cieżkadeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_pt.ts000664 000000 000000 00000001776 13703317554 026451 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MusicMusicMúsicaNext trackFaixa seguintePlay your music collectionReproduzir a sua coleção de músicaPlay/Pause trackReproduzir/Pausar faixaPrevious trackFaixa anteriordeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_pt_BR.ts000664 000000 000000 00000001744 13703317554 027027 0ustar00rootroot000000 000000 desktopDeepin MusicMúsica DeepinMusicMúsicaNext trackPróximaPlay your music collectionReproduza sua coleção musicalPlay/Pause trackPlay/PausePrevious trackAnteriordeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ro.ts000664 000000 000000 00000002012 13703317554 026426 0ustar00rootroot000000 000000 desktopDeepin Music Player-ul muzical DeepinMusicMuzicăNext trackMelodia următoarePlay your music collectionRedă colecÈ›ia ta de muzicăPlay/Pause trackRedare/Pauză melodiaPrevious trackMelodia anterioarădeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ru.ts000664 000000 000000 00000002233 13703317554 026441 0ustar00rootroot000000 000000 desktopDeepin MusicМузыкальный проигрыватель DeepinMusicМузыкаNext trackÐ¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°Play your music collectionВоÑпроизведение музыкальной коллекцииPlay/Pause trackВоÑпроизведение/Пауза дорожкиPrevious trackÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð´Ð¾Ñ€Ð¾Ð¶ÐºÐ°deepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_sk.ts000664 000000 000000 00000002045 13703317554 026431 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin Hudobný prehrávaÄMusicHudbaNext trackÄŽalÅ¡ia stopaPlay your music collectionPrehrávajte svoju zbierku zvukových záznamovPlay/Pause trackPrehrávaÅ¥/PozastaviÅ¥ skladbuPrevious trackPredchádzajúca stopadeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_sl.ts000664 000000 000000 00000002020 13703317554 026423 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin glasbeni predvajalnikMusicGlasbaNext trackNaslednja skladbaPlay your music collectionPredvajaj svojo glasbeno zbirkoPlay/Pause trackPredvajaj/Zaustavi skladboPrevious trackPrejÅ¡nja skladbadeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_sr.ts000664 000000 000000 00000002123 13703317554 026435 0ustar00rootroot000000 000000 desktopDeepin MusicДипин МузикаMusicМузикаNext trackСледећа нумераPlay your music collectionСлушајте вашу музичку колекцијуPlay/Pause trackПуÑти/Паузирај нумеруPrevious trackПретходна нумераdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_sv.ts000664 000000 000000 00000001711 13703317554 026443 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin-musikMusicMusikNext trackPlay your music collectionSpela din musiksamlingPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ta.ts000664 000000 000000 00000002041 13703317554 026414 0ustar00rootroot000000 000000 desktopDeepin Musicடீபà¯à®‡à®©à¯ இசைMusicஇசைNext trackPlay your music collectionஉஙà¯à®•ள௠இசைத௠தொகà¯à®ªà¯à®ªà¯ˆ இயகà¯à®•வà¯à®®à¯Play/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_tr.ts000664 000000 000000 00000001771 13703317554 026446 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin MüzikMusicMüzikNext trackSonraki parçaPlay your music collectionMüzik koleksiyonunuzu oynatınPlay/Pause trackParçayı oynat/duraklatPrevious trackÖnceki parçadeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_ug.ts000664 000000 000000 00000001723 13703317554 026431 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin ناخشى قويغۇچىMusicمۇزىكاNext trackPlay your music collectionPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_uk.ts000664 000000 000000 00000002146 13703317554 026435 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin МузикаMusicМузикаNext trackÐаÑтупний трекPlay your music collectionВідтворіть твори вашої музичної збіркиPlay/Pause trackВідтворити/Призупинити трекPrevious trackПопередній трекdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_vi.ts000664 000000 000000 00000001712 13703317554 026432 0ustar00rootroot000000 000000 desktopDeepin MusicTrình nghe nhạc DeepinMusicÂm nhạcNext trackPlay your music collectionPlay/Pause trackPrevious trackdeepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_zh_CN.ts000664 000000 000000 00000146236 13703317554 027030 0ustar00rootroot000000 000000 CloseConfirmDialog Exit Minimize to system tray Do not ask again Please select your operation Cancel Confirm DequalizerDialog Custom Classical Club Dance Headphones Monophony Full Bass Full Bass and Treble Full Treble Hall Live Party Pop Reggae Rock Ska Soft Soft Rock ON OFF Sound Effects Saved Techno Equalizer Save Preamplifier Restore Defaults Footer Unknown Title Unknown artist Previous Next Play/Pause Favorite Lyrics Play Mode Play Queue List Loop Single Loop Shuffle ImportWidget Open Folder Add Music Scan %1 music directory or drag music files here Loading music, please wait... InfoDialog Basic info Title: Artist: Album: Type: Size: Duration: Path: Unknown artist Unknown album LoadWidget Loading... LyricWidget Find lyrics Title Artist Search Back MUsicLyricWidget No lyrics yet MainFrame Add playlist Add music Equalizer Settings Dark theme Exit Music is a local music player with beautiful design and simple functions. Music éŸ³ä¹ Play/Pause Previous Next Successfully added to "%1" Already added to the playlist 1 song added %1 songs added File is invalid or does not exist, load failed OK Import failed, no valid music file found All music MusicListDataDelegate No songs 1 song %1 songs MusicListDataWidget No songs 1 album - 1 song %1 album - %2 songs %1 albums - %2 songs 1 artist - 1 song %1 artist - %2 songs %1 artists - %2 songs 1 song %1 songs No search results All Music Time added Album Artist Title Play All Music éŸ³ä¹ Artists Albums Custom Search Results Songs No result found MusicListDialog Play All Shuffle MusicListInfoView Play queue Add to new playlist Pause Play Add to playlist Display in file manager Remove from playlist Delete from local disk Song info Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted MusicListItem Are you sure you want to delete this playlist? Cancel Delete MusicListScrollArea Library Playlists MusicListView My Favorites Are you sure you want to delete this playlist? Cancel Delete Pause Play Rename PlayListView Unknown artist Unknown album Play queue My favorites Add to new playlist Pause Play musicResult Add to playlist Display in file manager Remove from play queue Delete from local disk Encoding Song info Cancel Remove Are you sure you want to remove %1? Are you sure you want to remove the selected %1 songs? Delete Are you sure you want to delete %1? Are you sure you want to delete the selected %1 songs? The song files contained will also be deleted PlayListWidget No songs No search results Play Queue Empty 1 song %1 songs Playlist Unknown album Unknown artist PlaylistManager New playlist Albums Artists All Music My favorites Search result Play Music éŸ³ä¹ QApplication Music éŸ³ä¹ QObject Minimize to system tray Exit Music Autoplay Enable fade in/out Remember playback position Close Main Window Basic Play Shortcuts Restore Defaults Next Play/Pause Previous Volume down Volume up SearchLyricsWidget Find Lyrics Title Artist Search SearchResult Music éŸ³ä¹ Artists Albums Shortcut Play Songs Playlists Settings Play/Pause Previous Next Volume Up Volume Down Mute Favorite Unfavorite Song info New playlist Add music Rename playlist Remove from playlist Help Display shortcuts TitlebarWidget Search desktop Deepin Music éŸ³ä¹ Music éŸ³ä¹ Next track 下一首 Play your music collection 为您播放本地åŠç½‘ç»œéŸ³é¢‘æµ Play/Pause track æš‚åœ/ç»§ç»­ Previous track 上一首 deepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_zh_HK.ts000664 000000 000000 00000001764 13703317554 027026 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin 音樂Music音樂Next track下一首歌曲Play your music collection播放你收è—的音樂Play/Pause trackæ’­æ”¾ï¼æš«åœæ›²ç›®Previous track上一首歌曲deepin-music-6.0.1.54/src/music-player/translations/desktop/desktop_zh_TW.ts000664 000000 000000 00000001745 13703317554 027055 0ustar00rootroot000000 000000 desktopDeepin MusicDeepin 音樂Music音樂Next track下一曲Play your music collection播放存於電腦的音樂Play/Pause trackæ’­æ”¾ï¼æš«åœPrevious track上一曲deepin-music-6.0.1.54/src/music-player/view/000775 000000 000000 00000000000 13703317554 020472 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/view/footerwidget.cpp000664 000000 000000 00000152602 13703317554 023706 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "footerwidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../musicapp.h" #include "../core/playlistmanager.h" #include "../core/player.h" #include "../core/metasearchservice.h" #include "../core/musicsettings.h" #include "../core/volumemonitoring.h" #include "../core/util/threadpool.h" #include "widget/filter.h" #include "widget/modebuttom.h" #include "widget/label.h" #include "widget/cover.h" #include "widget/soundvolume.h" #include "widget/musicimagebutton.h" #include "widget/musiciconbutton.h" #include "widget/musicpixmapbutton.h" #include "widget/waveform.h" #include "playlistwidget.h" #include "widget/musicboxbutton.h" #include "widget/tooltips.h" static const char *sPropertyFavourite = "fav"; static const char *sPropertyPlayStatus = "playstatus"; static const QString sPlayStatusValuePlaying = "playing"; static const QString sPlayStatusValuePause = "pause"; static const QString sPlayStatusValueStop = "stop"; DGUI_USE_NAMESPACE class FooterPrivate { public: FooterPrivate(Footer *parent) : q_ptr(parent) { hintFilter = new HintFilter; } void updateQssProperty(QWidget *w, const char *name, const QVariant &value); void installTipHint(QWidget *w, const QString &hintstr); void installHint(QWidget *w, QWidget *hint); void initConnection(); DBlurEffectWidget *forwardWidget = nullptr; Label *title = nullptr; Label *artist = nullptr; MusicPixmapButton *btCover = nullptr; MusicBoxButton *btPlay = nullptr; MusicBoxButton *btPrev = nullptr; MusicBoxButton *btNext = nullptr; MusicIconButton *btFavorite = nullptr; MusicIconButton *btLyric = nullptr; MusicIconButton *btPlayList = nullptr; ModeButton *btPlayMode = nullptr; MusicIconButton *btSound = nullptr; SoundVolume *volSlider = nullptr; DButtonBox *ctlWidget = nullptr; Waveform *waveform = nullptr; PlayListWidget *playListWidget = nullptr; bool showPlaylistFlag = false; HintFilter *hintFilter = nullptr; HoverShadowFilter *hoverShadowFilter = nullptr; PlaylistPtr activingPlaylist = nullptr; MetaPtr activingMeta = nullptr; QString defaultCover = ":/common/image/info_cover.svg"; int mode = -1; bool enableMove = false; int m_type = 1; bool btPlayingStatus = false; VolumeMonitoring volumeMonitoring; int m_Volume = 0; int m_Mute = 0; Footer *q_ptr; Q_DECLARE_PUBLIC(Footer) }; void FooterPrivate::updateQssProperty(QWidget *w, const char *name, const QVariant &value) { //Q_Q(Footer); w->setProperty(name, value); w->update(); } void FooterPrivate::installTipHint(QWidget *w, const QString &hintstr) { Q_Q(Footer); // TODO: parent must be mainframe auto hintWidget = new ToolTips("", q->parentWidget()); hintWidget->hide(); hintWidget->setText(hintstr); hintWidget->setFixedHeight(32); // hintWidget->setForegroundRole(DPalette::TextTitle); installHint(w, hintWidget); } void FooterPrivate::installHint(QWidget *w, QWidget *hint) { w->setProperty("HintWidget", QVariant::fromValue(hint)); w->installEventFilter(hintFilter); } void FooterPrivate::initConnection() { Q_Q(Footer); q->connect(btPlayMode, &ModeButton::modeChanged, q, [ = ](int mode) { Q_EMIT q->modeChanged(mode); auto hintWidget = btPlayMode->property("HintWidget").value(); hintFilter->showHitsFor(btPlayMode, hintWidget); }); // q->connect(progress, &Slider::valueAccpet, q, [ = ](int value) { // auto range = progress->maximum() - progress->minimum(); // Q_ASSERT(range != 0); // Q_EMIT q->changeProgress(value, range); // }); q->connect(waveform, &Waveform::valueAccpet, q, [ = ](int value) { auto range = waveform->maximum() - waveform->minimum(); Q_ASSERT(range != 0); Q_EMIT q->changeProgress(value, range); }); q->connect(btPlay, &DPushButton::released, q, [ = ]() { q->onTogglePlayButton(); }); q->connect(btPrev, &DPushButton::released, q, [ = ]() { Q_EMIT q->prev(activingPlaylist, activingMeta); }); q->connect(btNext, &DPushButton::released, q, [ = ]() { Q_EMIT q->next(activingPlaylist, activingMeta); }); q->connect(btFavorite, &DPushButton::released, q, [ = ]() { if (activingMeta != nullptr) Q_EMIT q->toggleFavourite(activingMeta); }); q->connect(title, &Label::clicked, q, [ = ](bool) { Q_EMIT q->locateMusic(activingPlaylist, activingMeta); }); q->connect(btLyric, &DPushButton::released, q, [ = ]() { Q_EMIT q->toggleLyricView(); }); q->connect(btPlayList, &DPushButton::released, q, [ = ]() { Q_EMIT q->togglePlaylist(); }); q->connect(btSound, &DPushButton::pressed, q, [ = ]() { Q_EMIT q->localToggleMute(); }); q->connect(volSlider, &SoundVolume::volumeChanged, q, [ = ](int vol) { q->onVolumeChanged(vol); if (m_Mute) { m_Mute = false; Q_EMIT q->toggleMute(); } m_Volume = vol; Q_EMIT q->volumeChanged(vol); }); q->connect(q, &Footer::mouseMoving, q, [ = ](Qt::MouseButton) { hintFilter->hideAll(); }); q->connect(q, &Footer::audioBufferProbed, waveform, &Waveform::onAudioBufferProbed); q->connect(q, &Footer::metaBuffer, waveform, &Waveform::onAudioBuffer); q->connect(&volumeMonitoring, &VolumeMonitoring::volumeChanged, q, [ = ](int vol) { q->onVolumeChanged(vol); }); q->connect(&volumeMonitoring, &VolumeMonitoring::muteChanged, q, [ = ](bool mute) { q->onMutedChanged(mute); }); } Footer::Footer(QWidget *parent) : DFloatingWidget(parent), d_ptr(new FooterPrivate(this)) { Q_D(Footer); //setFixedHeight(70); setFocusPolicy(Qt::ClickFocus); setObjectName("Footer"); this->setBlurBackgroundEnabled(true); // this->blurBackground()->setBlurRectXRadius(18); // this->blurBackground()->setBlurRectYRadius(18); this->blurBackground()->setRadius(30); this->blurBackground()->setBlurEnabled(true); this->blurBackground()->setMode(DBlurEffectWidget::GaussianBlur); QColor backMaskColor(255, 255, 255, 140); this->blurBackground()->setMaskColor(backMaskColor); d->forwardWidget = new DBlurEffectWidget(this); // d->forwardWidget->setBlurBackgroundEnabled(true); d->forwardWidget->setBlurRectXRadius(18); d->forwardWidget->setBlurRectYRadius(18); d->forwardWidget->setRadius(30); d->forwardWidget->setBlurEnabled(true); d->forwardWidget->setMode(DBlurEffectWidget::GaussianBlur); QColor maskColor(255, 255, 255, 76); d->forwardWidget->setMaskColor(maskColor); auto backLayout = new QVBoxLayout(this); backLayout->setSpacing(0); backLayout->setContentsMargins(0, 0, 0, 0); backLayout->addWidget(d->forwardWidget); auto mainVBoxlayout = new QVBoxLayout(d->forwardWidget); mainVBoxlayout->setSpacing(0); mainVBoxlayout->setContentsMargins(10, 0, 0, 10); auto downWidget = new DWidget(); auto layout = new QHBoxLayout(downWidget); layout->setContentsMargins(0, 0, 10, 0); // layout->setSpacing(10); d->btCover = new MusicPixmapButton(); d->btCover->setObjectName("FooterCoverHover"); d->btCover->setFixedSize(50, 50); d->btCover->setIconSize(QSize(50, 50)); d->title = new Label; auto titleFont = d->title->font(); titleFont.setFamily("SourceHanSansSC"); titleFont.setWeight(QFont::Normal); titleFont.setPixelSize(12); d->title->setFont(titleFont); d->title->setObjectName("FooterTitle"); d->title->setMaximumWidth(140); d->title->setText(tr("Unknown Title")); // d->title->installEventFilter(hoverFilter); // auto titlePl = d->title->palette(); // titlePl.setColor(DPalette::WindowText, QColor("#000000")); // d->title->setPalette(titlePl); d->title->setForegroundRole(DPalette::BrightText); d->artist = new Label; auto artistFont = d->artist->font(); artistFont.setFamily("SourceHanSansSC"); artistFont.setWeight(QFont::Normal); artistFont.setPixelSize(11); d->artist->setFont(titleFont); d->artist->setObjectName("FooterArtist"); d->artist->setMaximumWidth(140); d->artist->setText(tr("Unknown artist")); auto artistPl = d->title->palette(); QColor artistColor = artistPl.color(DPalette::BrightText); artistColor.setAlphaF(0.6); artistPl.setColor(DPalette::WindowText, artistColor); d->artist->setPalette(artistPl); d->artist->setForegroundRole(DPalette::WindowText); // d->artist->setForegroundRole(DPalette::BrightText); d->btPlay = new MusicBoxButton("", ":/mpimage/light/normal/play_normal.svg", ":/mpimage/light/normal/play_normal.svg", ":/mpimage/light/press/play_press.svg"); //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/play_normal.svg")); d->btPlay->setIconSize(QSize(36, 36)); d->btPlay->setFixedSize(40, 50); d->btPrev = new MusicBoxButton("", ":/mpimage/light/normal/last_normal.svg", ":/mpimage/light/normal/last_normal.svg", ":/mpimage/light/press/last_press.svg"); //d->btPrev->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/last_normal.svg")); d->btPrev->setIconSize(QSize(36, 36)); d->btPrev->setObjectName("FooterActionPrev"); d->btPrev->setFixedSize(40, 50); d->btNext = new MusicBoxButton("", ":/mpimage/light/normal/next_normal.svg", ":/mpimage/light/normal/next_normal.svg", ":/mpimage/light/press/next_press.svg"); //d->btNext->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/next_normal.svg")); d->btNext->setIconSize(QSize(36, 36)); d->btNext->setObjectName("FooterActionNext"); d->btNext->setFixedSize(40, 50); d->btFavorite = new MusicIconButton(":/mpimage/light/normal/collection_normal.svg", ":/mpimage/light/normal/collection_normal.svg", ":/mpimage/light/press/collection_press.svg"); d->btFavorite->setPropertyPic(sPropertyFavourite, QVariant(true), ":/mpimage/light/checked/collection1_checked.svg", ":/mpimage/light/checked/collection1_checked.svg", ":/mpimage/light/press/collection_press.svg"); d->btFavorite->setObjectName("FooterActionFavorite"); d->btFavorite->setFixedSize(50, 50); d->btFavorite->setTransparent(false); d->btLyric = new MusicIconButton(":/mpimage/light/normal/lyric_normal.svg", ":/mpimage/light/hover/lyric_hover.svg", ":/mpimage/light/press/lyric_press.svg", ":/mpimage/light/checked/lyric_checked.svg"); d->btLyric->setObjectName("FooterActionLyric"); d->btLyric->setFixedSize(50, 50); d->btLyric->setTransparent(false); d->btLyric->setCheckable(true); QStringList modes; modes << ":/mpimage/light/normal/sequential_loop_normal.svg" << ":/mpimage/light/normal/single_tune_circulation_normal.svg" << ":/mpimage/light/normal/cross_cycling_normal.svg"; QStringList pressModes; pressModes << ":/mpimage/light/press/sequential_loop_press.svg" << ":/mpimage/light/press/single_tune_circulation_press.svg" << ":/mpimage/light/press/cross_cycling_press.svg"; d->btPlayMode = new ModeButton; d->btPlayMode->setObjectName("FooterActionPlayMode"); d->btPlayMode->setFixedSize(50, 50); d->btPlayMode->setModeIcons(modes, pressModes); d->btPlayMode->setTransparent(false); d->btSound = new MusicIconButton(":/mpimage/light/normal/volume_normal.svg", ":/mpimage/light/hover/volume_hover.svg", ":/mpimage/light/press/volume_press.svg", ":/mpimage/light/checked/volume_checked.svg"); d->btSound->setPropertyPic("volume", QVariant("mid"), ":/mpimage/light/normal/volume_mid_normal.svg", ":/mpimage/light/hover/volume_mid_hover.svg", ":/mpimage/light/press/volume_mid_press.svg", ":/mpimage/light/checked/volume_mid_checked.svg"); d->btSound->setPropertyPic("volume", QVariant("low"), ":/mpimage/light/normal/volume_low_normal.svg", ":/mpimage/light/hover/volume_low_hover.svg", ":/mpimage/light/press/volume_low_press.svg", ":/mpimage/light/checked/volume_low_checked.svg"); d->btSound->setPropertyPic("volume", QVariant("mute"), ":/mpimage/light/normal/mute_normal.svg", ":/mpimage/light/normal/mute_normal.svg", ":/mpimage/light/press/mute_press.svg", ":/mpimage/light/checked/mute_checked.svg"); d->btSound->setObjectName("FooterActionSound"); d->btSound->setFixedSize(50, 50); d->btSound->setTransparent(false); d->btSound->setProperty("volume", "mid"); d->btSound->setCheckable(true); d->btSound->setAutoChecked(true); d->btPlayList = new MusicIconButton(":/mpimage/light/normal/playlist_normal.svg", ":/mpimage/light/hover/playlist_hover.svg", ":/mpimage/light/press/playlist_press.svg", ":/mpimage/checked/press/playlist_checked.svg"); d->btPlayList->setObjectName("FooterActionPlayList"); d->btPlayList->setFixedSize(50, 50); d->btPlayList->setTransparent(false); d->btPlayList->setCheckable(true); // d->btPlayList->hide(); d->hoverShadowFilter = new HoverShadowFilter; d->title->installEventFilter(d->hoverShadowFilter); d->btSound->installEventFilter(this); d->installTipHint(d->btPrev, tr("Previous")); d->installTipHint(d->btNext, tr("Next")); d->installTipHint(d->btPlay, tr("Play/Pause")); d->installTipHint(d->btFavorite, tr("Favorite")); d->installTipHint(d->btLyric, tr("Lyrics")); d->installTipHint(d->btPlayMode, tr("Play Mode")); d->installTipHint(d->btPlayList, tr("Play Queue")); // d->btPrev->setToolTip(tr("Previous")); // d->btNext->setToolTip(tr("Next")); // d->btPlay->setToolTip(tr("Play/Pause")); // d->btFavorite->setToolTip(tr("Favorite")); // d->btLyric->setToolTip(tr("Lyrics")); // d->btPlayMode->setToolTip(tr("Play Mode")); // d->btPlayList->setToolTip(tr("Playlist")); d->volSlider = new SoundVolume(this->parentWidget()); d->volSlider->hide(); d->volSlider->setProperty("DelayHide", true); d->volSlider->setProperty("NoDelayShow", true); d->installHint(d->btSound, d->volSlider); auto musicMetaLayout = new QVBoxLayout; musicMetaLayout->setContentsMargins(0, 0, 0, 0); musicMetaLayout->setSpacing(0); musicMetaLayout->addStretch(100); musicMetaLayout->addWidget(d->title); musicMetaLayout->addWidget(d->artist); musicMetaLayout->addStretch(100); auto metaLayout = new QHBoxLayout(); metaLayout->setContentsMargins(0, 0, 0, 0); // metaLayout->setSpacing(10); metaLayout->addWidget(d->btCover); metaLayout->addLayout(musicMetaLayout); d->ctlWidget = new DButtonBox(this); d->ctlWidget->setFixedHeight(50); QList allCtlButtons; allCtlButtons.append(d->btPrev); allCtlButtons.append(d->btPlay); allCtlButtons.append(d->btNext); d->ctlWidget->setButtonList(allCtlButtons, false); d->waveform = new Waveform(Qt::Horizontal, static_cast(parent), this); d->waveform->setMinimum(0); d->waveform->setMaximum(1000); d->waveform->setValue(0); d->waveform->adjustSize(); auto actWidget = new QWidget; auto actLayout = new QHBoxLayout(actWidget); actLayout->setMargin(0); // actLayout->setSpacing(10); actLayout->addWidget(d->btFavorite, 0, Qt::AlignRight | Qt::AlignVCenter); actLayout->addWidget(d->btLyric, 0, Qt::AlignRight | Qt::AlignVCenter); actLayout->addWidget(d->btPlayMode, 0, Qt::AlignRight | Qt::AlignVCenter); actLayout->addWidget(d->btSound, 0, Qt::AlignRight | Qt::AlignVCenter); actLayout->addWidget(d->btPlayList, 0, Qt::AlignRight | Qt::AlignVCenter); // QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::Preferred); // sp.setHorizontalStretch(33); // metaWidget->setSizePolicy(sp); // actWidget->setSizePolicy(sp); layout->addWidget(d->ctlWidget, 0); layout->addLayout(metaLayout); layout->addWidget(d->waveform, 100); layout->addWidget(actWidget, 0, Qt::AlignRight | Qt::AlignVCenter); d->playListWidget = new PlayListWidget(d->forwardWidget); // d->playListWidget->setContentsMargins(0, 0, 0, 0); d->playListWidget->hide(); // mainVBoxlayout->addWidget(d->playListWidget); mainVBoxlayout->addStretch(); mainVBoxlayout->addWidget(downWidget, 0, Qt::AlignBottom); d->title->hide(); d->artist->hide(); // d->btPrev->hide(); // d->btNext->hide(); d->btFavorite->hide(); d->btLyric->hide(); d->btPrev->setFocusPolicy(Qt::NoFocus); d->btPlay->setFocusPolicy(Qt::NoFocus); d->btNext->setFocusPolicy(Qt::NoFocus); d->btFavorite->setFocusPolicy(Qt::NoFocus); d->btLyric->setFocusPolicy(Qt::NoFocus); d->btPlayMode ->setFocusPolicy(Qt::NoFocus); d->btSound->setFocusPolicy(Qt::NoFocus); d->btPlayList->setFocusPolicy(Qt::NoFocus); d->btPrev->setDisabled(true); d->btNext->setDisabled(true); d->btPlay->setDisabled(true); d->initConnection(); connect(d->btCover, &DPushButton::clicked, this, [ = ](bool) { Q_EMIT toggleLyricView(); if (d->btCover->property("viewname").toString() != "lyric") { d->updateQssProperty(d->btCover, "viewname", "lyric"); } else { d->updateQssProperty(d->btCover, "viewname", "musiclist"); } }); if (d->m_type == 1) { d->btPlay->setPropertyPic(":/mpimage/light/normal/play_normal.svg", ":/mpimage/light/normal/play_normal.svg", ":/mpimage/light/press/play_press.svg"); //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/play_press.svg")); } else { d->btPlay->setPropertyPic(":/mpimage/dark/normal/play_normal.svg", ":/mpimage/dark/normal/play_normal.svg", ":/mpimage/dark/press/play_press.svg"); //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/dark/normal/play_press.svg")); } d->btCover->setIcon(Dtk::Widget::DHiDPIHelper::loadNxPixmap(d->defaultCover)); int themeType = DGuiApplicationHelper::instance()->themeType(); slotTheme(themeType); d->m_Mute = MusicSettings::value("base.play.mute").toBool(); d->m_Volume = MusicSettings::value("base.play.volume").toInt(); onMutedChanged(d->m_Mute); onVolumeChanged(d->m_Volume); ThreadPool::instance()->moveToNewThread(&d->volumeMonitoring); d->volumeMonitoring.start(); } Footer::~Footer() { } void Footer::setCurPlaylist(PlaylistPtr playlist) { Q_D(Footer); d->activingPlaylist = playlist; if (d->activingPlaylist != nullptr) { if (d->activingPlaylist->allmusic().isEmpty()) { d->btPlay->setDisabled(true); d->btPrev->setDisabled(true); d->btNext->setDisabled(true); } else if (d->activingPlaylist->allmusic().size() == 1) { d->btPrev->setDisabled(true); d->btNext->setDisabled(true); d->btPlay->setDisabled(false); } else { d->btPrev->setDisabled(false); d->btNext->setDisabled(false); d->btPlay->setDisabled(false); } } } void Footer::enableControl(bool enable) { Q_D(Footer); d->btCover->setEnabled(enable); // d->btPrev->setEnabled(enable); // d->btNext->setEnabled(enable); d->btFavorite->setEnabled(enable); d->btLyric->setEnabled(enable); d->btPlayList->setEnabled(enable); d->btPlayMode->setEnabled(enable); d->btSound->setEnabled(enable); d->waveform->setEnabled(enable); d->btCover->blockSignals(!enable); d->title->blockSignals(!enable); d->artist->blockSignals(!enable); } //void Footer::initData(PlaylistPtr current, int mode) //{ // Q_D(Footer); // d->mode = mode; // d->activingPlaylist = current; // d->btPlayMode->setMode(mode); //} void Footer::setViewname(const QString &viewname) { Q_D(Footer); setProperty("viewname", viewname); d->waveform->setProperty("viewname", viewname); } QString Footer::defaultCover() const { Q_D(const Footer); return d->defaultCover; } void Footer::setLyricButtonChecked(bool flag) { Q_D(const Footer); if (d->btLyric->isChecked() != flag) { d->btLyric->blockSignals(true); d->btLyric->setChecked(flag); d->btLyric->blockSignals(false); } } void Footer::setPlaylistButtonChecked(bool flag) { Q_D(const Footer); if (d->btPlayList->isChecked() != flag) { d->btPlayList->blockSignals(true); d->btPlayList->setChecked(flag); d->btPlayList->blockSignals(false); } } PlayListWidget *Footer::getPlayListWidget() { Q_D(const Footer); return d->playListWidget; } void Footer::showPlayListWidget(int width, int height, bool changFlag) { Q_D(Footer); if (changFlag) { if (d->showPlaylistFlag) { d->playListWidget->hide(); setGeometry(5, height - 86, width - 10, 80); d->playListWidget->setGeometry(0, 0, width - 10, 0); } else { d->playListWidget->show(); setGeometry(5, height - 429, width - 10, 423); d->playListWidget->setGeometry(0, 0, width - 10, 314); } d->showPlaylistFlag = (!d->showPlaylistFlag); } else { if (d->showPlaylistFlag) { setGeometry(5, height - 429, width - 10, 423); d->playListWidget->setGeometry(0, 0, width - 10, 314); } else { setGeometry(5, height - 86, width - 10, 80); d->playListWidget->setGeometry(0, 0, width - 10, 0); } } } void Footer::setSize(int width, int height, bool changFlag) { Q_D(Footer); if (changFlag) { if (d->showPlaylistFlag) { d->playListWidget->hide(); setFixedSize(width - 10, 80); move(5, height - 86); resize(width - 10, 80); } else { d->playListWidget->show(); setFixedSize(width - 10, 423); move(5, height - 429); resize(width - 10, 423); } d->showPlaylistFlag = (!d->showPlaylistFlag); } else { if (d->showPlaylistFlag) { setFixedSize(width - 10, 423); move(5, height - 429); resize(width - 10, 423); } else { setFixedSize(width - 10, 80); move(5, height - 86); resize(width - 10, 80); } } } bool Footer::getShowPlayListFlag() { Q_D(const Footer); return d->showPlaylistFlag; } void Footer::refreshBackground() { Q_D(const Footer); QImage cover(d->defaultCover); if (d->activingMeta != nullptr) { auto coverData = MetaSearchService::coverData(d->activingMeta); if (coverData.length() > 0) { cover = QImage::fromData(coverData); } } //cut image double windowScale = (width() * 1.0) / height(); int imageWidth = static_cast(cover.height() * windowScale); QImage coverImage; if (d->playListWidget->isVisible()) { coverImage.fill(QColor(255, 255, 255)); } else { if (imageWidth > cover.width()) { int imageheight = static_cast(cover.width() / windowScale); coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); } else { int imageheight = cover.height(); coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); } } d->forwardWidget->setSourceImage(coverImage); } void Footer::hidewaveform() { Q_D(Footer); d->waveform->hidewaveformScale(); } void Footer::mousePressEvent(QMouseEvent *event) { Q_D(Footer); DWidget::mousePressEvent(event); auto subCtlPos = d->waveform->mapFromParent(event->pos()); if (d->waveform->rect().contains(subCtlPos) /*|| !this->rect().contains(event->pos())*/) { d->enableMove = false; } else { d->enableMove = true; } } void Footer::mouseReleaseEvent(QMouseEvent *event) { Q_D(Footer); DWidget::mouseReleaseEvent(event); d->enableMove = false; } void Footer::mouseMoveEvent(QMouseEvent *event) { Q_D(Footer); Qt::MouseButton button = event->buttons() & Qt::LeftButton ? Qt::LeftButton : Qt::NoButton; if (d->enableMove && d->enableMove && event->buttons() == Qt::LeftButton) { Q_EMIT mouseMoving(button); DWidget::mouseMoveEvent(event); } } bool Footer::eventFilter(QObject *obj, QEvent *event) { Q_D(Footer); switch (event->type()) { case QEvent::Wheel: { if (obj != d->btSound) { return QObject::eventFilter(obj, event); } auto we = dynamic_cast(event); if (we->angleDelta().y() > 0) { auto vol = d->volSlider->volume() + Player::VolumeStep; if (vol > 100) { vol = 100; } onVolumeChanged(vol); Q_EMIT this->volumeChanged(d->volSlider->volume()); } else { auto vol = d->volSlider->volume() - Player::VolumeStep; if (vol < 0) { vol = 0; } onVolumeChanged(vol); Q_EMIT this->volumeChanged(d->volSlider->volume()); } return true; } default: return QObject::eventFilter(obj, event); } } void Footer::onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist) { Q_UNUSED(metalist) Q_D(Footer); if (playlist != nullptr && playlist->id() == FavMusicListID && d->activingMeta != nullptr && playlist->contains(d->activingMeta)) d->updateQssProperty(d->btFavorite, sPropertyFavourite, true); else { if (d->activingMeta != nullptr) { d->updateQssProperty(d->btFavorite, sPropertyFavourite, d->activingMeta->favourite); } else { d->updateQssProperty(d->btFavorite, sPropertyFavourite, false); } } if (d->activingPlaylist != nullptr) { if (d->activingPlaylist->allmusic().isEmpty()) { d->btPlay->setDisabled(true); d->btPrev->setDisabled(true); d->btNext->setDisabled(true); } else if (d->activingPlaylist->allmusic().size() == 1) { d->btPrev->setDisabled(true); d->btNext->setDisabled(true); d->btPlay->setDisabled(false); } else { d->btPrev->setDisabled(false); d->btNext->setDisabled(false); d->btPlay->setDisabled(false); } } } void Footer::onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist) { Q_UNUSED(metalist) Q_D(Footer); if (playlist != nullptr && playlist->id() == FavMusicListID && d->activingMeta != nullptr && playlist->contains(d->activingMeta)) d->updateQssProperty(d->btFavorite, sPropertyFavourite, true); else { d->updateQssProperty(d->btFavorite, sPropertyFavourite, false); } if (d->activingPlaylist != nullptr) { if (d->activingPlaylist->allmusic().isEmpty()) { d->btPlay->setDisabled(true); d->btPrev->setDisabled(true); d->btNext->setDisabled(true); } else if (d->activingPlaylist->allmusic().size() == 1) { d->btPrev->setDisabled(true); d->btNext->setDisabled(true); d->btPlay->setDisabled(false); } else { d->btPrev->setDisabled(false); d->btNext->setDisabled(false); d->btPlay->setDisabled(false); } } } void Footer::onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta) { Q_UNUSED(playlist) Q_D(Footer); if (!d->activingPlaylist->contains(meta)) return; QFontMetrics fm(d->title->font()); auto text = fm.elidedText(meta->title, Qt::ElideMiddle, d->title->maximumWidth()); d->title->setText(text); if (!meta->artist.isEmpty()) { d->artist->setText(meta->artist); } else { d->artist->setText(tr("Unknown artist")); } QImage cover(d->defaultCover); auto coverData = MetaSearchService::coverData(meta); if (coverData.length() > 0) { cover = QImage::fromData(coverData); } d->btCover->setIcon(QPixmap::fromImage(cover)); d->btCover->update(); d->waveform->clearBufferAudio(meta->hash); //cut image double windowScale = (width() * 1.0) / height(); int imageWidth = static_cast(cover.height() * windowScale); QImage coverImage; if (imageWidth > cover.width()) { int imageheight = static_cast(cover.width() / windowScale); coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); } else { int imageheight = cover.height(); coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); } refreshBackground(); // d->forwardWidget->setSourceImage(coverImage); // blurBackground()->setSourceImage(coverImage); //d->waveform->onAudioBuffer(MetaDetector::getMetaData(meta->localPath)); this->enableControl(true); d->title->show(); d->artist->show(); d->btPrev->show(); d->btNext->show(); d->btFavorite->show(); d->btLyric->show(); //d->activingPlaylist = playlist; d->activingMeta = meta; if (d->activingPlaylist != nullptr) { if (d->activingPlaylist->allmusic().isEmpty()) { d->btPlay->setDisabled(true); d->btPrev->setDisabled(true); d->btNext->setDisabled(true); } else if (d->activingPlaylist->allmusic().size() == 1) { d->btPrev->setDisabled(true); d->btNext->setDisabled(true); d->btPlay->setDisabled(false); } else { d->btPrev->setDisabled(false); d->btNext->setDisabled(false); d->btPlay->setDisabled(false); } } d->updateQssProperty(d->btFavorite, sPropertyFavourite, meta->favourite); if (!meta->invalid || true) { d->updateQssProperty(d->btPlay, sPropertyPlayStatus, sPlayStatusValuePlaying); d->updateQssProperty(this, sPropertyPlayStatus, sPlayStatusValuePlaying); if (d->m_type == 1) { d->btPlay->setPropertyPic(":/mpimage/light/normal/suspend_normal.svg", ":/mpimage/light/normal/suspend_normal.svg", ":/mpimage/light/press/suspend_press.svg"); //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/suspend_normal.svg")); } else { //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/dark/normal/suspend_normal.svg")); d->btPlay->setPropertyPic(":/mpimage/dark/normal/suspend_normal.svg", ":/mpimage/dark/normal/suspend_normal.svg", ":/mpimage/dark/press/suspend_press.svg"); } d->btPlayingStatus = true; } else { if (d->m_type == 1) { d->btPlay->setPropertyPic(":/mpimage/light/normal/play_normal.svg", ":/mpimage/light/normal/play_normal.svg", ":/mpimage/light/press/play_press.svg"); //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/play_normal.svg")); } else { d->btPlay->setPropertyPic(":/mpimage/dark/normal/play_normal.svg", ":/mpimage/dark/normal/play_normal.svg", ":/mpimage/dark/press/play_press.svg"); //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/dark/normal/play_normal.svg")); } d->btPlayingStatus = false; } } void Footer::onMusicError(PlaylistPtr playlist, const MetaPtr meta, int error) { Q_UNUSED(playlist) Q_UNUSED(meta) Q_D(Footer); //d->waveform->clearBufferAudio(); // if (d->activingMeta && d->activingPlaylist) { // if (meta != d->activingMeta || playlist != d->activingPlaylist) { // return; // } // } if (0 == error) { return; } auto status = sPlayStatusValuePause; d->updateQssProperty(d->btPlay, sPropertyPlayStatus, status); if (d->m_type == 1) { d->btPlay->setPropertyPic(":/mpimage/light/normal/play_normal.svg", ":/mpimage/light/normal/play_normal.svg", ":/mpimage/light/press/play_press.svg"); // d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/play_normal.svg")); } else { d->btPlay->setPropertyPic(":/mpimage/dark/normal/play_normal.svg", ":/mpimage/dark/normal/play_normal.svg", ":/mpimage/dark/press/play_press.svg"); //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/dark/normal/play_normal.svg")); } d->btPlayingStatus = false; } void Footer::onMusicPause(PlaylistPtr playlist, const MetaPtr meta) { Q_UNUSED(playlist) Q_UNUSED(meta) Q_D(Footer); auto status = sPlayStatusValuePause; d->updateQssProperty(d->btPlay, sPropertyPlayStatus, status); if (d->m_type == 1) { d->btPlay->setPropertyPic(":/mpimage/light/normal/play_normal.svg", ":/mpimage/light/normal/play_normal.svg", ":/mpimage/light/press/play_press.svg"); // d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/play_normal.svg")); } else { // d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/dark/normal/play_normal.svg")); d->btPlay->setPropertyPic(":/mpimage/dark/normal/play_normal.svg", ":/mpimage/dark/normal/play_normal.svg", ":/mpimage/dark/press/play_press.svg"); } d->btPlayingStatus = false; if (d->activingPlaylist != nullptr) { if (d->activingPlaylist->allmusic().isEmpty()) { d->btPlay->setDisabled(true); d->btPrev->setDisabled(true); d->btNext->setDisabled(true); } else if (d->activingPlaylist->allmusic().size() == 1) { d->btPrev->setDisabled(true); d->btNext->setDisabled(true); d->btPlay->setDisabled(false); } else { d->btPrev->setDisabled(false); d->btNext->setDisabled(false); d->btPlay->setDisabled(false); } } } void Footer::onMusicStoped(PlaylistPtr playlist, const MetaPtr meta) { Q_D(Footer); Q_UNUSED(playlist); Q_UNUSED(meta); onProgressChanged(0, 1, 1); d->title->hide(); d->artist->hide(); //d->btFavorite->hide(); d->activingMeta = MetaPtr(); d->waveform->clearBufferAudio(QString()); d->btCover->setIcon(Dtk::Widget::DHiDPIHelper::loadNxPixmap(d->defaultCover)); d->btCover->update(); d->updateQssProperty(d->btPlay, sPropertyPlayStatus, sPlayStatusValueStop); d->updateQssProperty(this, sPropertyPlayStatus, sPlayStatusValueStop); if (d->m_type == 1) { d->btPlay->setPropertyPic(":/mpimage/light/normal/play_normal.svg", ":/mpimage/light/normal/play_normal.svg", ":/mpimage/light/press/play_press.svg"); //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/play_normal.svg")); } else { //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/dark/normal/play_normal.svg")); d->btPlay->setPropertyPic(":/mpimage/dark/normal/play_normal.svg", ":/mpimage/dark/normal/play_normal.svg", ":/mpimage/dark/press/play_press.svg"); } d->btPlayingStatus = false; if (d->activingPlaylist != nullptr) { if (d->activingPlaylist->allmusic().isEmpty()) { d->btPlay->setDisabled(true); d->btPrev->setDisabled(true); d->btNext->setDisabled(true); } else if (d->activingPlaylist->allmusic().size() == 1) { d->btPrev->setDisabled(true); d->btNext->setDisabled(true); d->btPlay->setDisabled(false); } else { d->btPrev->setDisabled(false); d->btNext->setDisabled(false); d->btPlay->setDisabled(false); } } } void Footer::onMediaLibraryClean() { //Q_D(Footer); /*---enableControl----*/ enableControl(false); } void Footer::slotTheme(int type) { Q_D(Footer); QString rStr; if (type == 1) { QColor backMaskColor(255, 255, 255, 140); this->blurBackground()->setMaskColor(backMaskColor); QColor maskColor(255, 255, 255, 76); d->forwardWidget->setMaskColor(maskColor); rStr = "light"; /* auto titlePl = d->title->palette(); QColor titleColor("#000000"); titlePl.setColor(DPalette::WindowText, titleColor); d->title->setPalette(titlePl); */ auto artistPl = d->artist->palette(); QColor artistColor = artistPl.color(DPalette::BrightText); artistColor.setAlphaF(0.4); artistPl.setColor(DPalette::WindowText, artistColor); d->artist->setPalette(artistPl); DPalette pa; pa = d->ctlWidget->palette(); pa.setColor(DPalette::Light, QColor("#FFFFFF")); pa.setColor(DPalette::Dark, QColor("#FFFFFF")); pa.setColor(DPalette::Button, QColor("#FFFFFF")); d->ctlWidget->setPalette(pa); pa = d->btFavorite->palette(); pa.setColor(DPalette::Light, QColor("#FFFFFF")); pa.setColor(DPalette::Dark, QColor("#FFFFFF")); d->btFavorite->setPalette(pa); pa = d->btLyric->palette(); pa.setColor(DPalette::Light, QColor("#FFFFFF")); pa.setColor(DPalette::Dark, QColor("#FFFFFF")); d->btLyric->setPalette(pa); pa = d->btPlayList->palette(); pa.setColor(DPalette::Light, QColor("#FFFFFF")); pa.setColor(DPalette::Dark, QColor("#FFFFFF")); d->btPlayList->setPalette(pa); pa = d->btPlayMode->palette(); pa.setColor(DPalette::Light, QColor("#FFFFFF")); pa.setColor(DPalette::Dark, QColor("#FFFFFF")); d->btPlayMode->setPalette(pa); pa = d->btSound->palette(); pa.setColor(DPalette::Light, QColor("#FFFFFF")); pa.setColor(DPalette::Dark, QColor("#FFFFFF")); d->btSound->setPalette(pa); } else { QColor backMaskColor(37, 37, 37, 140); blurBackground()->setMaskColor(backMaskColor); QColor maskColor(37, 37, 37, 76); d->forwardWidget->setMaskColor(maskColor); rStr = "dark"; /* auto titlePl = d->title->palette(); QColor titleColor("#FFFFFF"); titlePl.setColor(DPalette::WindowText, titleColor); d->title->setPalette(titlePl); */ auto artistPl = d->artist->palette(); QColor artistColor = artistPl.color(DPalette::BrightText); artistColor.setAlphaF(0.6); artistPl.setColor(DPalette::WindowText, artistColor); d->artist->setPalette(artistPl); DPalette pa; pa = d->ctlWidget->palette(); pa.setColor(DPalette::Light, QColor("#444444")); pa.setColor(DPalette::Dark, QColor("#444444")); pa.setColor(DPalette::Button, QColor("#444444")); d->ctlWidget->setPalette(pa); pa = d->btFavorite->palette(); pa.setColor(DPalette::Light, QColor("#444444")); pa.setColor(DPalette::Dark, QColor("#444444")); d->btFavorite->setPalette(pa); pa = d->btLyric->palette(); pa.setColor(DPalette::Light, QColor("#444444")); pa.setColor(DPalette::Dark, QColor("#444444")); d->btLyric->setPalette(pa); pa = d->btPlayList->palette(); pa.setColor(DPalette::Light, QColor("#444444")); pa.setColor(DPalette::Dark, QColor("#444444")); d->btPlayList->setPalette(pa); pa = d->btPlayMode->palette(); pa.setColor(DPalette::Light, QColor("#444444")); pa.setColor(DPalette::Dark, QColor("#444444")); d->btPlayMode->setPalette(pa); pa = d->btSound->palette(); pa.setColor(DPalette::Light, QColor("#444444")); pa.setColor(DPalette::Dark, QColor("#444444")); d->btSound->setPalette(pa); } d->m_type = type; //d->btPlay->setIcon(DHiDPIHelper::loadNxPixmap(QString(":/mpimage/%1/normal/play_normal.svg").arg(rStr))); //d->btPrev->setIcon(DHiDPIHelper::loadNxPixmap(QString(":/mpimage/%1/normal/last_normal.svg").arg(rStr))); //d->btNext->setIcon(DHiDPIHelper::loadNxPixmap(QString(":/mpimage/%1/normal/next_normal.svg").arg(rStr))); if (d->btPlayingStatus) { d->btPlay->setPropertyPic(QString(":/mpimage/%1/normal/suspend_normal.svg").arg(rStr), QString(":/mpimage/%1/normal/suspend_normal.svg").arg(rStr), QString(":/mpimage/%1/press/suspend_press.svg").arg(rStr)); } else { d->btPlay->setPropertyPic(QString(":/mpimage/%1/normal/play_normal.svg").arg(rStr), QString(":/mpimage/%1/normal/play_normal.svg").arg(rStr), QString(":/mpimage/%1/press/play_press.svg").arg(rStr)); } d->btPrev->setPropertyPic(QString(":/mpimage/%1/normal/last_normal.svg").arg(rStr), QString(":/mpimage/%1/normal/last_normal.svg").arg(rStr), QString(":/mpimage/%1/press/last_press.svg").arg(rStr)); d->btNext->setPropertyPic(QString(":/mpimage/%1/normal/next_normal.svg").arg(rStr), QString(":/mpimage/%1/normal/next_normal.svg").arg(rStr), QString(":/mpimage/%1/press/next_press.svg").arg(rStr)); d->btFavorite->setPropertyPic(QString(":/mpimage/%1/normal/collection_normal.svg").arg(rStr), QString(":/mpimage/%1/normal/collection_normal.svg").arg(rStr), QString(":/mpimage/%1/press/collection_press.svg").arg(rStr)); d->btFavorite->setPropertyPic(sPropertyFavourite, QVariant(true), QString(":/mpimage/%1/checked/collection1_checked.svg").arg(rStr), QString(":/mpimage/%1/checked/collection1_checked.svg").arg(rStr), QString(":/mpimage/%1/press/collection1_press.svg").arg(rStr), QString(":/mpimage/%1/checked/collection1_checked.svg").arg(rStr)); d->btLyric->setPropertyPic(QString(":/mpimage/%1/normal/lyric_normal.svg").arg(rStr), QString(":/mpimage/%1/normal/lyric_normal.svg").arg(rStr), QString(":/mpimage/%1/press/lyric_press.svg").arg(rStr), QString(":/mpimage/%1/checked/lyric_checked.svg").arg(rStr)); QStringList modes; modes << QString(":/mpimage/%1/normal/sequential_loop_normal.svg").arg(rStr) << QString(":/mpimage/%1/normal/single_tune_circulation_normal.svg").arg(rStr) << QString(":/mpimage/%1/normal/cross_cycling_normal.svg").arg(rStr); QStringList pressModes; pressModes << QString(":/mpimage/%1/press/sequential_loop_press.svg").arg(rStr) << QString(":/mpimage/%1/press/single_tune_circulation_press.svg").arg(rStr) << QString(":/mpimage/%1/press/cross_cycling_press.svg").arg(rStr); d->btSound->setPropertyPic(QString(":/mpimage/%1/normal/volume_normal.svg").arg(rStr), QString(":/mpimage/%1/hover/volume_hover.svg").arg(rStr), QString(":/mpimage/%1/press/volume_press.svg").arg(rStr), QString(":/mpimage/%1/checked/volume_checked.svg").arg(rStr)); d->btSound->setPropertyPic("volume", QVariant("mid"), QString(":/mpimage/%1/normal/volume_mid_normal.svg").arg(rStr), QString(":/mpimage/%1/hover/volume_mid_hover.svg").arg(rStr), QString(":/mpimage/%1/press/volume_mid_press.svg").arg(rStr), QString(":/mpimage/%1/checked/volume_mid_checked.svg").arg(rStr)); d->btSound->setPropertyPic("volume", QVariant("low"), QString(":/mpimage/%1/normal/volume_low_normal.svg").arg(rStr), QString(":/mpimage/%1/hover/volume_low_hover.svg").arg(rStr), QString(":/mpimage/%1/press/volume_low_press.svg").arg(rStr), QString(":/mpimage/%1/checked/volume_low_checked.svg").arg(rStr)); d->btSound->setPropertyPic("volume", QVariant("mute"), QString(":/mpimage/%1/normal/mute_normal.svg").arg(rStr), QString(":/mpimage/%1/normal/mute_normal.svg").arg(rStr), QString(":/mpimage/%1/press/mute_press.svg").arg(rStr), QString(":/mpimage/%1/checked/mute_checked.svg").arg(rStr)); d->btPlayList->setPropertyPic(QString(":/mpimage/%1/normal/playlist_normal.svg").arg(rStr), QString(":/mpimage/%1/normal/playlist_normal.svg").arg(rStr), QString(":/mpimage/%1/press/playlist_press.svg").arg(rStr), QString(":/mpimage/%1/checked/playlist_checked.svg").arg(rStr)); d->btPlayMode->setModeIcons(modes, pressModes); d->waveform->setThemeType(type); d->volSlider->slotTheme(type); d->playListWidget->slotTheme(type); } void Footer::onTogglePlayButton() { Q_D(Footer); auto status = d->btPlay->property(sPropertyPlayStatus).toString(); if (d->activingMeta == nullptr) { if (d->activingPlaylist->isEmpty()) return; d->activingMeta = d->activingPlaylist->first(); status = ""; } if (status == sPlayStatusValuePlaying) { Q_EMIT pause(d->activingPlaylist, d->activingMeta); } else if (status == sPlayStatusValuePause) { Q_EMIT resume(d->activingPlaylist, d->activingMeta); } else { Q_EMIT play(d->activingPlaylist, d->activingMeta); } } void Footer::onProgressChanged(qint64 value, qint64 duration, qint64 coefficient) { Q_D(Footer); d->waveform->onProgressChanged(value, duration, coefficient); } void Footer::onCoverChanged(const MetaPtr meta, const DMusic::SearchMeta &, const QByteArray &coverData) { Q_D(Footer); if (meta != d->activingMeta) { return; } QPixmap coverPixmap = coverData.length() > 1024 ? QPixmap::fromImage(QImage::fromData(coverData)) : Dtk::Widget::DHiDPIHelper::loadNxPixmap(d->defaultCover); d->btCover->setIcon(coverPixmap); d->btCover->update(); } void Footer::onVolumeChanged(int volume) { Q_D(Footer); QString status = "mid"; if (volume > 77) { status = "high"; } else if (volume > 33) { status = "mid"; } else { status = "low"; } if (d->m_Mute) { d->updateQssProperty(d->btSound, "volume", "mute"); } else { d->updateQssProperty(d->btSound, "volume", status); } d->m_Volume = volume; MusicSettings::setOption("base.play.volume", d->m_Volume); MusicSettings::setOption("base.play.mute", d->m_Mute); d->volSlider->onVolumeChanged(volume); } void Footer::onMutedChanged(bool muted) { Q_D(Footer); if(d->volumeMonitoring.needSyncLocalFlag()) { d->volumeMonitoring.stop(); d->volumeMonitoring.timeoutSlot(); d->volumeMonitoring.start(); return ; } d->m_Mute = muted; if (muted) { d->updateQssProperty(d->btSound, "volume", "mute"); } else { QString status = "mid"; if (d->m_Volume > 77) { status = "high"; } else if (d->m_Volume > 33) { status = "mid"; } else { status = "low"; } d->updateQssProperty(d->btSound, "volume", status); d->volSlider->onVolumeChanged(d->m_Volume); } MusicSettings::setOption("base.play.volume", d->m_Volume); MusicSettings::setOption("base.play.mute", d->m_Mute); } void Footer::onLocalMutedChanged(int type) { Q_D(Footer); if(type) d->m_Mute = !d->m_Mute; else d->m_Mute = false; if (d->m_Mute) { d->updateQssProperty(d->btSound, "volume", "mute"); } else { QString status = "mid"; if (d->m_Volume > 77) { status = "high"; } else if (d->m_Volume > 33) { status = "mid"; } else { status = "low"; } d->updateQssProperty(d->btSound, "volume", status); d->volSlider->onVolumeChanged(d->m_Volume); } MusicSettings::setOption("base.play.volume", d->m_Volume); MusicSettings::setOption("base.play.mute", d->m_Mute); d->volumeMonitoring.syncLocalFlag(); //emit mute state Q_EMIT localMuteStat(d->m_Mute); } void Footer::onModeChange(int mode) { Q_D(Footer); qDebug() << "change play mode to" << mode; if (d->mode == mode) { return; } d->btPlayMode->blockSignals(true); d->btPlayMode->setMode(mode); d->btPlayMode->blockSignals(false); d->mode = mode; auto hintWidget = d->btPlayMode->property("HintWidget").value(); if (hintWidget != nullptr) { auto hintToolTips = static_cast(hintWidget); QString playmode; switch (mode) { default: case 0: playmode = Footer::tr("List Loop"); break; case 1: playmode = Footer::tr("Single Loop"); break; case 2: playmode = Footer::tr("Shuffle"); break; } if (hintToolTips != nullptr) { hintToolTips->setText(playmode); } } } void Footer::onUpdateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta) { Q_UNUSED(preTitle) Q_UNUSED(preArtist) Q_UNUSED(preAlbum) Q_D(Footer); if (d->activingMeta && d->activingMeta == meta) { d->title->setText(meta->title); if (!meta->artist.isEmpty()) { d->artist->setText(meta->artist); } else { d->artist->setText(tr("Unknown artist")); } } } void Footer::setDefaultCover(QString defaultCover) { Q_D(Footer); d->defaultCover = defaultCover; } void Footer::resizeEvent(QResizeEvent *event) { Q_D(Footer); DWidget::resizeEvent(event); //auto fix = progressExtentHeight(); //auto center = rect().marginsRemoved(QMargins(0, fix, 0, 0)).center() - d->ctlWidget->rect().center(); //d->ctlWidget->move(center); //d->ctlWidget->raise(); QImage cover(d->defaultCover); if (d->activingMeta != nullptr) { auto coverData = MetaSearchService::coverData(d->activingMeta); if (coverData.length() > 0) { cover = QImage::fromData(coverData); } } //cut image double windowScale = (width() * 1.0) / height(); int imageWidth = static_cast(cover.height() * windowScale); QImage coverImage; if (imageWidth > cover.width()) { int imageheight = static_cast(cover.width() / windowScale); coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); } else { int imageheight = cover.height(); coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); } if (d->playListWidget->isVisible()) { coverImage.fill(QColor(255, 255, 255)); } d->forwardWidget->setSourceImage(coverImage); // blurBackground()->setSourceImage(coverImage); } deepin-music-6.0.1.54/src/music-player/view/footerwidget.h000664 000000 000000 00000010537 13703317554 023353 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include "../core/playlist.h" #include class QAudioBuffer; DWIDGET_USE_NAMESPACE class PlayListWidget; class FooterPrivate; class Footer : public DFloatingWidget { Q_OBJECT Q_PROPERTY(QString defaultCover READ defaultCover WRITE setDefaultCover) public: explicit Footer(QWidget *parent = nullptr); ~Footer() override; public: void setCurPlaylist(PlaylistPtr playlist); void enableControl(bool enable = true); void setViewname(const QString &viewname); QString defaultCover() const; void setLyricButtonChecked(bool flag); void setPlaylistButtonChecked(bool flag); PlayListWidget *getPlayListWidget(); void showPlayListWidget(int width, int height, bool changFlag = false); void setSize(int width, int height, bool changFlag = false); bool getShowPlayListFlag(); void refreshBackground(); void hidewaveform(); signals: void toggleLyricView(); void locateMusic(PlaylistPtr playlist, const MetaPtr meta); void play(PlaylistPtr playlist, const MetaPtr meta); void resume(PlaylistPtr playlist, const MetaPtr meta); void pause(PlaylistPtr playlist, const MetaPtr meta); void next(PlaylistPtr playlist, const MetaPtr meta); void prev(PlaylistPtr playlist, const MetaPtr meta); void changeProgress(qint64 value, qint64 duration); void volumeChanged(int volume); void toggleMute(); void localToggleMute(); void togglePlaylist(); void modeChanged(int); void toggleFavourite(const MetaPtr meta); void progressRealHeightChanged(qreal height); void mouseMoving(Qt::MouseButton button); void audioBufferProbed(const QAudioBuffer &buffer); void metaBuffer(const QVector &buffer, const QString &hash); /***************************************** * emit local changed mute state * ****************************************/ void localMuteStat(bool mute); public slots: void onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); void onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist); void onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta); void onMusicError(PlaylistPtr playlist, const MetaPtr meta, int error); void onMusicPause(PlaylistPtr playlist, const MetaPtr meta); void onMusicStoped(PlaylistPtr playlist, const MetaPtr meta); void onProgressChanged(qint64 value, qint64 duration, qint64 coefficient); void onCoverChanged(const MetaPtr meta, const DMusic::SearchMeta &, const QByteArray &coverData); void onVolumeChanged(int volume); void onMutedChanged(bool muted); /************************************** * slots local mute ,type: 0 volume,1 mute * ************************************/ void onLocalMutedChanged(int type); void onModeChange(int mode); void onUpdateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta); void setDefaultCover(QString defaultCover); void onMediaLibraryClean(); void slotTheme(int type); void onTogglePlayButton(); protected: virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; virtual void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; virtual bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), Footer) }; deepin-music-6.0.1.54/src/music-player/view/helper/000775 000000 000000 00000000000 13703317554 021751 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/view/helper/widgethellper.cpp000664 000000 000000 00000026460 13703317554 025324 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "widgethellper.h" #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE extern Q_WIDGETS_EXPORT void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0); QT_END_NAMESPACE namespace WidgetHelper { QImage applyEffectToImage(const QImage src, QGraphicsEffect *effect, int extent = 0) { if (src.isNull()) { return QImage(); } if (!effect) { return src; } QGraphicsScene scene; QGraphicsPixmapItem item; item.setPixmap(QPixmap::fromImage(src)); item.setGraphicsEffect(effect); scene.addItem(&item); QImage res(src.size() + QSize(extent * 2, extent * 2), QImage::Format_ARGB32); res.fill(Qt::transparent); QPainter ptr(&res); scene.render(&ptr, QRectF(), QRectF(-extent, -extent, src.width() + extent * 2, src.height() + extent * 2)); return res; } QPixmap blurImage(const QImage &image, int radius) { QGraphicsBlurEffect *blur = new QGraphicsBlurEffect; blur->setBlurRadius(radius); QImage result = applyEffectToImage(image, blur); auto cropFactor = 0.9; QRect rect((1 - cropFactor) / 2 * result.width(), (1 - cropFactor) / 2 * result.height(), result.width() *cropFactor, result.height() *cropFactor); QImage cropped = result.copy(rect); return QPixmap::fromImage(cropped).scaled(image.size()); } QImage cropRect(const QImage &image, QSize sz) { QImage newImage = image.scaled(sz, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); auto center = QRectF(newImage.rect()).center(); auto topLeft = QPointF(center.x() - sz.width() / 2.0, center.y() - sz.height() / 2.0); if (topLeft.x() < 0) { topLeft.setX(0); } if (topLeft.y() < 0) { topLeft.setY(0); } QRect crop(topLeft.toPoint(), sz); return newImage.copy(crop); } void slideRight2LeftWidget(QWidget *left, QWidget *right, int delay) { right->show(); left->show(); right->resize(left->size()); QRect leftStart = QRect(0, 0, left->width(), left->height()); QRect leftEnd = leftStart; leftEnd.moveLeft(-left->width()); QPropertyAnimation *animation = new QPropertyAnimation(left, "geometry"); animation->setDuration(delay); animation->setEasingCurve(QEasingCurve::InOutCubic); animation->setStartValue(leftStart); animation->setEndValue(leftEnd); animation->start(); QRect rightStart = QRect(left->width(), 0, right->width(), right->height()); QRect rightEnd = rightStart; rightEnd.moveRight(left->width() - 1); QPropertyAnimation *animation2 = new QPropertyAnimation(right, "geometry"); animation2->setEasingCurve(QEasingCurve::InOutCubic); animation2->setDuration(delay); animation2->setStartValue(rightStart); animation2->setEndValue(rightEnd); animation2->start(); animation->connect(animation, &QPropertyAnimation::finished, animation, &QPropertyAnimation::deleteLater); animation2->connect(animation2, &QPropertyAnimation::finished, animation2, &QPropertyAnimation::deleteLater); animation2->connect(animation2, &QPropertyAnimation::finished, left, &QWidget::hide); } void slideBottom2TopWidget(QWidget *top, QWidget *bottom, int delay) { bottom->show(); top->show(); QRect topStart = QRect(0, 0, top->width(), top->height()); QRect topEnd = topStart; topEnd.moveTop(-top->height()); QPropertyAnimation *animation = new QPropertyAnimation(top, "geometry"); animation->setDuration(delay); animation->setEasingCurve(QEasingCurve::InOutCubic); animation->setStartValue(topStart); animation->setEndValue(topEnd); animation->start(); animation->connect(animation, &QPropertyAnimation::finished, animation, &QPropertyAnimation::deleteLater); animation->connect(animation, &QPropertyAnimation::finished, top, &QWidget::hide); QRect bottomStart = QRect(0, top->height(), bottom->width(), bottom->height()); QRect bottomEnd = bottomStart; bottomEnd.moveTo(0, 0); QPropertyAnimation *animation2 = new QPropertyAnimation(bottom, "geometry"); animation2->setEasingCurve(QEasingCurve::InOutCubic); animation2->setDuration(delay); animation2->setStartValue(bottomStart); animation2->setEndValue(bottomEnd); animation2->start(); animation2->connect(animation2, &QPropertyAnimation::finished, animation2, &QPropertyAnimation::deleteLater); auto bottomOpacity = new QGraphicsOpacityEffect(bottom); bottom->setGraphicsEffect(bottomOpacity); bottomOpacity->setOpacity(0); QPropertyAnimation *animation3 = new QPropertyAnimation(bottomOpacity, "opacity"); animation3->setEasingCurve(QEasingCurve::InCubic); animation3->setDuration(delay); animation3->setStartValue(0.0); animation3->setEndValue(1.0); animation3->start(); animation3->connect(animation3, &QPropertyAnimation::finished, animation3, &QPropertyAnimation::deleteLater); animation3->connect(animation3, &QPropertyAnimation::finished, bottom, [ = ]() { bottom->setGraphicsEffect(nullptr); }); auto topOpacity = new QGraphicsOpacityEffect(); top->setGraphicsEffect(topOpacity); topOpacity->setOpacity(1); QPropertyAnimation *animation4 = new QPropertyAnimation(topOpacity, "opacity"); animation4->setEasingCurve(QEasingCurve::InCubic); animation4->setDuration(delay); animation4->setStartValue(1.0); animation4->setEndValue(0.0); animation4->start(); animation4->connect(animation4, &QPropertyAnimation::finished, animation4, &QPropertyAnimation::deleteLater); animation4->connect(animation4, &QPropertyAnimation::finished, top, [ = ]() { top->setGraphicsEffect(nullptr); }); } void slideTop2BottomWidget(QWidget *top, QWidget *bottom, int delay) { bottom->show(); top->show(); bottom->resize(top->size()); QRect topStart = QRect(0, 0, top->width(), top->height()); QRect topEnd = topStart; topEnd.moveTo(0, top->height()); QPropertyAnimation *animation = new QPropertyAnimation(top, "geometry"); animation->setDuration(delay); animation->setEasingCurve(QEasingCurve::InOutCubic); animation->setStartValue(topStart); animation->setEndValue(topEnd); animation->start(); animation->connect(animation, &QPropertyAnimation::finished, animation, &QPropertyAnimation::deleteLater); animation->connect(animation, &QPropertyAnimation::finished, top, &QWidget::hide); QRect bottomStart = QRect(0, -top->height(), bottom->width(), bottom->height()); QRect bottomEnd = bottomStart; bottomEnd.moveBottom(top->height() - 1); QPropertyAnimation *animation2 = new QPropertyAnimation(bottom, "geometry"); animation2->setEasingCurve(QEasingCurve::InOutCubic); animation2->setDuration(delay); animation2->setStartValue(bottomStart); animation2->setEndValue(bottomEnd); animation2->start(); animation2->connect(animation2, &QPropertyAnimation::finished, animation2, &QPropertyAnimation::deleteLater); auto bottomOpacity = new QGraphicsOpacityEffect(bottom); bottom->setGraphicsEffect(bottomOpacity); bottomOpacity->setOpacity(0); QPropertyAnimation *animation3 = new QPropertyAnimation(bottomOpacity, "opacity"); animation3->setEasingCurve(QEasingCurve::InCubic); animation3->setDuration(delay); animation3->setStartValue(0.0); animation3->setEndValue(1.0); animation3->start(); animation3->connect(animation3, &QPropertyAnimation::finished, animation3, &QPropertyAnimation::deleteLater); animation3->connect(animation3, &QPropertyAnimation::finished, bottom, [ = ]() { bottom->setGraphicsEffect(nullptr); }); auto topOpacity = new QGraphicsOpacityEffect(top); top->setGraphicsEffect(topOpacity); topOpacity->setOpacity(0.99); QPropertyAnimation *animation4 = new QPropertyAnimation(topOpacity, "opacity"); animation4->setEasingCurve(QEasingCurve::InCubic); animation4->setDuration(delay); animation4->setStartValue(1.0); animation4->setEndValue(0.0); animation4->start(); animation4->connect(animation4, &QPropertyAnimation::finished, animation4, &QPropertyAnimation::deleteLater); animation4->connect(animation4, &QPropertyAnimation::finished, bottom, [ = ]() { top->setGraphicsEffect(nullptr); }); } void slideEdgeWidget(QWidget *widget, QWidget *child, QRect start, QRect end, int delay, bool visible) { Q_UNUSED(child) Q_UNUSED(visible) QPropertyAnimation *animation2 = new QPropertyAnimation(widget, "geometry"); animation2->setEasingCurve(QEasingCurve::InCurve); animation2->setDuration(delay); animation2->setStartValue(start); animation2->setEndValue(end); animation2->start(); animation2->connect(animation2, &QPropertyAnimation::finished, animation2, &QPropertyAnimation::deleteLater); animation2->connect(animation2, &QPropertyAnimation::finished, widget, [ = ]() { }); } void slideEdgeWidget2(QWidget *widget, QRect start, QRect end, int delay, bool visible) { QPropertyAnimation *animation2 = new QPropertyAnimation(widget, "geometry"); animation2->setEasingCurve(QEasingCurve::InCurve); animation2->setDuration(delay); animation2->setStartValue(start); animation2->setEndValue(end); animation2->start(); if (visible) { widget->show(); } animation2->connect(animation2, &QPropertyAnimation::finished, animation2, &QPropertyAnimation::deleteLater); animation2->connect(animation2, &QPropertyAnimation::finished, widget, [ = ]() { if (!visible) { widget->hide(); } }); } QPixmap coverPixmap(const QString &coverPath, QSize sz) { return QPixmap::fromImage(cropRect(QImage(coverPath), sz)); } void workaround_updateStyle(QWidget *parent, const QString &theme) { for (auto obj : parent->children()) { auto w = qobject_cast(obj); if (!w) { continue; } // qDebug() << "update widget style" << w << theme; workaround_updateStyle(w, theme); } } } deepin-music-6.0.1.54/src/music-player/view/helper/widgethellper.h000664 000000 000000 00000002741 13703317554 024765 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include namespace WidgetHelper { QPixmap blurImage(const QImage &image, int radius); QImage cropRect(const QImage &image, QSize sz); QPixmap coverPixmap(const QString &coverPath, QSize sz); void slideRight2LeftWidget(QWidget *left, QWidget *right, int delay); void slideBottom2TopWidget(QWidget *top, QWidget *bottom, int delay); void slideTop2BottomWidget(QWidget *top, QWidget *bottom, int delay); void slideEdgeWidget(QWidget *widget, QWidget *child, QRect start, QRect end, int delay, bool hide = false); void slideEdgeWidget2(QWidget *widget, QRect start, QRect end, int delay, bool hide = false); void workaround_updateStyle(QWidget *parent, const QString &theme); } deepin-music-6.0.1.54/src/music-player/view/importwidget.cpp000664 000000 000000 00000016713 13703317554 023724 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "importwidget.h" #include #include #include #include #include #include #include #include #include #include #include "musicsettings.h" DGUI_USE_NAMESPACE const QString linkTemplate = "%2"; class ImportWidgetPrivate { public: ImportWidgetPrivate(ImportWidget *parent) : q_ptr(parent) {} QLabel *text = nullptr; DPushButton *importButton = nullptr; DPushButton *addMusicButton = nullptr; QLabel *logo; ImportWidget *q_ptr; Q_DECLARE_PUBLIC(ImportWidget) }; ImportWidget::ImportWidget(QWidget *parent) : DFrame(parent), d_ptr(new ImportWidgetPrivate(this)) { Q_D(ImportWidget); setObjectName("ImportWidget"); setAcceptDrops(true); setAutoFillBackground(true); auto layout = new QVBoxLayout(this); layout->setMargin(0); d->logo = new QLabel; d->logo->setFixedSize(128, 128); d->logo->setObjectName("ImportViewLogo"); d->logo->setPixmap(DHiDPIHelper::loadNxPixmap(":/mpimage/light/import_music.svg")); d->importButton = new DPushButton; auto importButtonFont = d->importButton->font(); importButtonFont.setFamily("SourceHanSansSC"); importButtonFont.setWeight(QFont::Normal); importButtonFont.setPixelSize(14); d->importButton->setFont(importButtonFont); auto pl = d->importButton->palette(); pl.setColor(DPalette::Dark, QColor("#0098FF")); pl.setColor(DPalette::Light, QColor("#25B7FF")); pl.setColor(DPalette::ButtonText, QColor("#FFFFFF")); QColor sbcolor("#000000"); sbcolor.setAlphaF(0); pl.setColor(DPalette::Shadow, sbcolor); // d->importButton->setPalette(pl); d->importButton->setObjectName("ImportViewImportButton"); d->importButton->setFixedSize(302, 36); d->importButton->setText(tr("Open Folder")); d->importButton->setFocusPolicy(Qt::NoFocus); d->addMusicButton = new DPushButton; d->addMusicButton->setFont(importButtonFont); // d->addMusicButton->setPalette(pl); d->addMusicButton->setObjectName("ImportViewImportButton"); d->addMusicButton->setFixedSize(302, 36); d->addMusicButton->setText(tr("Add Music")); d->addMusicButton->setFocusPolicy(Qt::NoFocus); d->text = new QLabel; d->text->setObjectName("ImportViewText"); auto textFont = d->text->font(); textFont.setFamily("SourceHanSansSC"); textFont.setWeight(QFont::Normal); textFont.setPixelSize(12); d->text->setFont(textFont); d->text->setFixedHeight(18); QString linkText = QString(linkTemplate).arg(tr("Scan")).arg(tr("Scan")); d->text->setText(tr("%1 music directory or drag music files here").arg(linkText)); layout->setSpacing(0); layout->addStretch(); layout->addWidget(d->logo, 0, Qt::AlignCenter); layout->addSpacing(20); layout->addWidget(d->addMusicButton, 0, Qt::AlignCenter); layout->addSpacing(10); layout->addWidget(d->importButton, 0, Qt::AlignCenter); layout->addSpacing(10); layout->addWidget(d->text, 0, Qt::AlignCenter); layout->addStretch(); connect(d->importButton, &DPushButton::clicked, this, [ = ] { Q_EMIT this->selectImportDirectory(); }); connect(d->addMusicButton, &DPushButton::clicked, this, [ = ] { Q_EMIT this->importFiles(); }); connect(d->text, &DLabel::linkActivated, this, [ = ](const QString & /*link*/) { showWaitHint(); Q_EMIT this->scanMusicDirectory(); }); // bool themeFlag = false; // int themeType = MusicSettings::value("base.play.theme").toInt(&themeFlag); // if (!themeFlag) // themeType = 1; int themeType = DGuiApplicationHelper::instance()->themeType(); slotTheme(themeType); } ImportWidget::~ImportWidget() { } void ImportWidget::showWaitHint() { Q_D(ImportWidget); d->importButton->setDisabled(true); d->importButton->hide(); d->addMusicButton->hide(); d->text->setText(tr("Loading music, please wait...")); } void ImportWidget::showImportHint() { Q_D(ImportWidget); d->importButton->setDisabled(false); d->importButton->show(); d->addMusicButton->show(); QString linkText = QString(linkTemplate).arg(tr("Scan")).arg(tr("Scan")); d->text->setText(tr("%1 music directory or drag music files here").arg(linkText)); } void ImportWidget::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasFormat("text/uri-list")) { event->setDropAction(Qt::CopyAction); event->acceptProposedAction(); return; } DFrame::dragEnterEvent(event); } void ImportWidget::dragMoveEvent(QDragMoveEvent *) { } void ImportWidget::dragLeaveEvent(QDragLeaveEvent *) { } void ImportWidget::dropEvent(QDropEvent *event) { if (!event->mimeData()->hasFormat("text/uri-list")) { return; } auto urls = event->mimeData()->urls(); QStringList localpaths; for (auto &url : urls) { localpaths << url.toLocalFile(); } if (!localpaths.isEmpty()) { Q_EMIT importSelectFiles(localpaths); } } void ImportWidget::slotTheme(int type) { Q_D(ImportWidget); QString rStr; if (type == 1) { rStr = "light"; auto pl = d->importButton->palette(); pl.setColor(DPalette::Dark, QColor("#0098FF")); pl.setColor(DPalette::Light, QColor("#25B7FF")); pl.setColor(DPalette::ButtonText, QColor("#FFFFFF")); QColor sbcolor("#000000"); sbcolor.setAlphaF(0); pl.setColor(DPalette::Shadow, sbcolor); // d->importButton->setPalette(pl); // d->addMusicButton->setPalette(pl); QPalette pa = d->text->palette(); pa.setColor(QPalette::WindowText, "#777777"); // d->text->setPalette(pa); d->text->setForegroundRole(QPalette::WindowText); // d->text->setForegroundRole(DPalette::TextTips); } else { rStr = "dark"; auto pl = d->importButton->palette(); pl.setColor(DPalette::Dark, QColor("#0056C1")); pl.setColor(DPalette::Light, QColor("#004C9C")); pl.setColor(DPalette::ButtonText, QColor("#B8D3FF")); QColor sbcolor("#0091FF"); sbcolor.setAlphaF(0.1); pl.setColor(DPalette::Shadow, sbcolor); // d->importButton->setPalette(pl); // d->addMusicButton->setPalette(pl); QPalette pa = d->text->palette(); pa.setColor(QPalette::WindowText, "#798190"); // d->text->setPalette(pa); d->text->setForegroundRole(QPalette::WindowText); // d->text->setForegroundRole(DPalette::TextTips); } d->logo->setPixmap(DHiDPIHelper::loadNxPixmap(QString(":/mpimage/%1/import_music.svg").arg(rStr))); } deepin-music-6.0.1.54/src/music-player/view/importwidget.h000664 000000 000000 00000003247 13703317554 023367 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include DWIDGET_USE_NAMESPACE class ImportWidgetPrivate; class ImportWidget : public DFrame { Q_OBJECT public: explicit ImportWidget(QWidget *parent = Q_NULLPTR); ~ImportWidget() override; signals: void scanMusicDirectory(); void importFiles(); void selectImportDirectory(); void importSelectFiles(const QStringList &urllist); public slots: void showWaitHint(); void showImportHint(); void slotTheme(int type); protected: virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; virtual void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE; virtual void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE; virtual void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), ImportWidget) }; deepin-music-6.0.1.54/src/music-player/view/loadwidget.cpp000664 000000 000000 00000002727 13703317554 023331 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "loadwidget.h" #include #include #include DWIDGET_USE_NAMESPACE LoadWidget::LoadWidget(QWidget *parent) : DFrame(parent) { setAutoFillBackground(true); auto water = new DWaterProgress(this); water->setValue(50); water->setTextVisible(false); water->start(); auto label = new DLabel(tr("Loading...")); label->setObjectName("LoadWidgetLabel"); label->setForegroundRole(DPalette::TextTitle); auto vbox = new QVBoxLayout; setLayout(vbox); vbox->addStretch(); vbox->addWidget(water, 0, Qt::AlignCenter); vbox->addSpacing(10); vbox->addWidget(label, 0, Qt::AlignCenter); vbox->addStretch(); } deepin-music-6.0.1.54/src/music-player/view/loadwidget.h000664 000000 000000 00000001673 13703317554 022775 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include DWIDGET_USE_NAMESPACE class LoadWidget : public DFrame { Q_OBJECT public: explicit LoadWidget(QWidget *parent = Q_NULLPTR); }; deepin-music-6.0.1.54/src/music-player/view/lyricwidget.cpp000664 000000 000000 00000037413 13703317554 023534 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "lyricwidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../core/util/lyric.h" #include "../core/metasearchservice.h" #include "widget/cover.h" #include "widget/searchmetalist.h" #include "widget/searchmetaitem.h" #include "widget/lyricview.h" #include "widget/musicimagebutton.h" DWIDGET_USE_NAMESPACE static const int LyricLineHeight = 40; static const QString defaultLyric = "No Lyric"; class LyricWidgetPrivate { public: LyricWidgetPrivate(LyricWidget *parent): q_ptr(parent) {} bool checkSearchMeta(); void adjustLyric(); void setLyricLines(QString lines); void showCover(); void showSearch(); MetaPtr activingMeta; DMusic::SearchMeta searchMeta; int emptyLineOffset = 0; int m_currentline = 0; Lyric m_lyriclist; SearchMetaList *searchMetaList = nullptr; MusicImageButton *m_showSearch = nullptr; DPushButton *m_exitSearch = nullptr; DFrame *searchMetaFrame = nullptr; Cover *m_cover = nullptr; LyricView *lyricview = nullptr; QStringListModel *m_model = nullptr; QString defaultCover = ":/common/image/cover_max.svg"; QColor backgroundColor; LyricWidget *q_ptr; Q_DECLARE_PUBLIC(LyricWidget) }; bool LyricWidgetPrivate::checkSearchMeta() { return true; } void LyricWidgetPrivate::adjustLyric() { Q_Q(LyricWidget); auto itemHeight = LyricLineHeight; auto contentHeight = q->rect().marginsRemoved(q->contentsMargins()).height(); auto maxHeight = contentHeight * 92 / 100; auto maxRow = maxHeight / itemHeight; if (0 == maxRow % 2) { --maxRow; } lyricview->setFixedHeight(maxRow * itemHeight); } void LyricWidgetPrivate::setLyricLines(QString str) { m_lyriclist = parseLrc(str); QStringList lines; if (!m_lyriclist.hasTime) { lines = str.split('\n'); } else { for (auto &ele : m_lyriclist.m_lyricElements) { lines << ele.content; } } if (lines.length() <= 0) { lines << defaultLyric; } m_currentline = 0; auto itemHeight = LyricLineHeight; auto height = lyricview->height() ; emptyLineOffset = height / itemHeight / 2 + 1; QStringList lyric; for (int i = 0; i < emptyLineOffset; ++i) { lyric << QString(" "); } for (auto line : lines) { lyric << line; } for (int i = 0; i < emptyLineOffset; ++i) { lyric << QString(" "); } m_model->setStringList(lyric); lyricview->setModel(m_model); QModelIndex index = m_model->index(emptyLineOffset, 0, lyricview->rootIndex()); lyricview->selectionModel()->clearSelection(); lyricview->selectionModel()->select(index, QItemSelectionModel::Select); lyricview->scrollTo(index, QListView::PositionAtCenter); } LyricWidget::LyricWidget(QWidget *parent) : DFrame(parent), d_ptr(new LyricWidgetPrivate(this)) { Q_D(LyricWidget); setObjectName("LyricWidget"); auto layout = new QHBoxLayout(this); layout->setContentsMargins(20, 20, 20, 20); d->searchMetaFrame = new DFrame; d->searchMetaFrame->setObjectName("SearchMetaFrame"); d->searchMetaFrame->setFixedWidth(300); auto searchMetaLayout = new QVBoxLayout(d->searchMetaFrame); searchMetaLayout->setSpacing(20); auto searchMetaHeader = new DLabel; searchMetaHeader->setObjectName("SearchMetaHeader"); searchMetaHeader->setText(tr("Find lyrics")); auto searchMetaTitle = new DLineEdit; searchMetaTitle->setObjectName("SearchMetaTitle"); searchMetaTitle->lineEdit()->setPlaceholderText(tr("Title")); searchMetaTitle->setFixedHeight(34); auto searchMetaArtist = new DLineEdit; searchMetaArtist->setObjectName("SearchMetaArtist"); searchMetaArtist->lineEdit()->setPlaceholderText(tr("Artist")); searchMetaArtist->setFixedHeight(34); auto searchMetaButton = new DPushButton; searchMetaButton->setObjectName("SearchMetaButton"); searchMetaButton->setText(tr("Search")); searchMetaButton->setFixedHeight(34); d->searchMetaList = new SearchMetaList; QSizePolicy spmetalist(QSizePolicy::Expanding, QSizePolicy::Expanding); spmetalist.setHorizontalStretch(1000); spmetalist.setVerticalStretch(1000); d->searchMetaList->setSizePolicy(spmetalist); searchMetaLayout->addWidget(searchMetaHeader); searchMetaLayout->addWidget(searchMetaTitle); searchMetaLayout->addWidget(searchMetaArtist); searchMetaLayout->addWidget(searchMetaButton); searchMetaLayout->addWidget(d->searchMetaList); layout->addWidget(d->searchMetaFrame, 0, Qt::AlignTop | Qt::AlignHCenter); d->m_cover = new Cover; d->m_cover->setFixedSize(200, 200); d->m_cover->setObjectName("LyricCover"); d->lyricview = new LyricView(); d->m_model = new QStringListModel; d->setLyricLines(""); d->lyricview->setModel(d->m_model); d->m_showSearch = new MusicImageButton(":/common/image/lrc_search_hover.svg", ":/common/image/lrc_search_hover.svg", ":/common/image/lrc_search_hover.svg"); d->m_showSearch->setObjectName("ShowSearch"); d->m_exitSearch = new DPushButton; d->m_exitSearch->setObjectName("ExitSearch"); d->m_exitSearch->setText(tr("Back")); auto btFrame = new DFrame; btFrame->setFixedWidth(50); auto btLayout = new QVBoxLayout(btFrame); btLayout->addWidget(d->m_showSearch, 0, Qt::AlignRight | Qt::AlignTop); btLayout->addWidget(d->m_exitSearch, 0, Qt::AlignRight | Qt::AlignTop); btLayout->addStretch(); QSizePolicy spCover(QSizePolicy::Preferred, QSizePolicy::Preferred); spCover.setHorizontalStretch(80); d->m_cover->setSizePolicy(spCover); spCover.setVerticalStretch(1000); d->searchMetaFrame->setSizePolicy(spCover); layout->addWidget(d->m_cover, 0, Qt::AlignCenter); QSizePolicy spText(QSizePolicy::Preferred, QSizePolicy::Preferred); spText.setHorizontalStretch(20); spText.setVerticalStretch(100); d->lyricview->setSizePolicy(spText); layout->addWidget(d->lyricview, 0, Qt::AlignVCenter); QSizePolicy spBack(QSizePolicy::Preferred, QSizePolicy::Preferred); spBack.setHorizontalStretch(20); d->m_showSearch->setSizePolicy(spBack); d->m_showSearch->setFixedSize(24, 24); d->m_cover->show(); d->searchMetaFrame->hide(); d->m_showSearch->setDisabled(true); d->m_showSearch->show(); d->m_exitSearch->hide(); layout->addWidget(btFrame); connect(d->m_showSearch, &DPushButton::clicked, this, [ = ](bool) { Q_ASSERT(!d->activingMeta.isNull()); searchMetaTitle->setText(d->activingMeta->title); searchMetaArtist->setText(d->activingMeta->artist); d->searchMetaList->clear(); d-> m_cover->hide(); d->searchMetaFrame->show(); d->m_showSearch->hide(); d->m_exitSearch->show(); }); connect(d->m_exitSearch, &DPushButton::clicked, this, [ = ](bool) { d->searchMetaFrame->hide(); d->m_cover->show(); d->m_showSearch->show(); d->m_exitSearch->hide(); }); connect(searchMetaButton, &DPushButton::clicked, this, [ = ](bool) { auto context = searchMetaTitle->text() + " " + searchMetaArtist->text(); Q_EMIT requestContextSearch(context); }); connect(d->searchMetaList, &SearchMetaList::itemClicked, this, [ = ](QListWidgetItem * item) { auto searchItem = qobject_cast(d->searchMetaList->itemWidget(item)); if (!searchItem) { qCritical() << "SearchMetaItem is empty" << item << searchItem; return; } // fixme: auto search = searchItem->property("musicMeta").value(); Q_EMIT changeMetaCache(d->activingMeta, search); }); connect(d->searchMetaList, &SearchMetaList::currentItemChanged, this, [ = ](QListWidgetItem * current, QListWidgetItem * previous) { auto itemWidget = qobject_cast(d->searchMetaList->itemWidget(previous)); if (itemWidget) { itemWidget->setChecked(false); } itemWidget = qobject_cast(d->searchMetaList->itemWidget(current)); if (itemWidget) { itemWidget->setChecked(true); } }); } LyricWidget::~LyricWidget() { } void LyricWidget::updateUI() { Q_D(LyricWidget); d->m_cover->setCoverPixmap(QPixmap(d->defaultCover)); } QString LyricWidget::defaultCover() const { Q_D(const LyricWidget); return d->defaultCover; } void LyricWidget::checkHiddenSearch(QPoint mousePos) { Q_D(LyricWidget); if (!this->isVisible() || !d->searchMetaFrame->isVisible()) { return; } auto geometry = d->searchMetaFrame->geometry().marginsAdded(QMargins(0, 0, 40, 40)); auto btGeometry = d->m_exitSearch->rect(); auto btPos = d->m_exitSearch->mapFromGlobal(QCursor::pos()); qDebug() << btGeometry << btPos; if (!geometry.contains(mousePos) && !btGeometry.contains(btPos)) { d->searchMetaFrame->hide(); d->m_cover->show(); d->m_exitSearch->hide(); d->m_showSearch->show(); } } QColor LyricWidget::backgroundColor() const { Q_D(const LyricWidget); return d->backgroundColor; } void LyricWidget::paintEvent(QPaintEvent *e) { Q_D(LyricWidget); DFrame::paintEvent(e); if (!d->lyricview->viewMode()) { return; } QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::HighQualityAntialiasing); // auto optical = d->lyricview->optical(); QBrush brush(QColor(255, 255, 255, 25)); // brush = QBrush(QColor(255, 255, 25, 255)); auto hcenter = d->lyricview->y() + d->lyricview->height() / 2; auto xstart = d->lyricview->x(); auto xend = d->lyricview->x() + d->lyricview->width(); QPainterPath path; path.moveTo(xstart, hcenter - 4); path.lineTo(xstart, hcenter + 5); path.lineTo(xstart + 9, hcenter); path.lineTo(xstart, hcenter - 4); path.moveTo(xstart + 20, hcenter); path.lineTo(xend - 20, hcenter); path.lineTo(xend - 20, hcenter + 1); path.lineTo(xstart + 20, hcenter + 1); path.lineTo(xstart + 20, hcenter); path.moveTo(xend, hcenter - 4); path.lineTo(xend, hcenter + 5); path.lineTo(xend - 9, hcenter); path.lineTo(xend, hcenter - 4); painter.fillPath(path, brush); } void LyricWidget::resizeEvent(QResizeEvent *event) { Q_D(LyricWidget); QWidget::resizeEvent(event); d->lyricview->setFixedWidth(event->size().width() * 45 / 100); d->adjustLyric(); auto contentHeight = rect().marginsRemoved(contentsMargins()).height(); auto maxHeight = contentHeight * 90 / 100; d->searchMetaFrame->setFixedHeight(maxHeight); } void LyricWidget::onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta) { Q_D(LyricWidget); Q_UNUSED(playlist); d->activingMeta = meta; d->m_showSearch->setDisabled(false); QImage cover(d->defaultCover); auto coverData = MetaSearchService::coverData(meta); if (coverData.length() > 0) { cover = QImage::fromData(coverData); } d->m_cover->setCoverPixmap(QPixmap::fromImage(cover)); d->m_cover->update(); } void LyricWidget::onMusicStop(PlaylistPtr playlist, const MetaPtr meta) { Q_UNUSED(playlist) Q_D(LyricWidget); auto lyricStr = QString::fromUtf8(""); d->setLyricLines(lyricStr); QImage cover(d->defaultCover); auto coverData = MetaSearchService::coverData(meta); if (coverData.length() > 0) { cover = QImage::fromData(coverData); } d->m_cover->setCoverPixmap(QPixmap::fromImage(cover)); d->m_cover->update(); d->m_showSearch->setDisabled(true); } void LyricWidget::onProgressChanged(qint64 value, qint64 /*length*/) { Q_D(LyricWidget); DPalette p = palette(); p.setColor(DPalette::Background, d->backgroundColor); setPalette(p); auto len = d->m_lyriclist.m_lyricElements.length(); if (!d->m_lyriclist.hasTime) { return; } if (len <= 2) { return; } int i = 0; for (i = 0; i < len; ++i) { auto curEle = d->m_lyriclist.m_lyricElements.at(i); if (value < curEle.start) { break; } } QModelIndex index = d->m_model->index(d->emptyLineOffset + i - 1, 0, d->lyricview->rootIndex()); d->lyricview->selectionModel()->clearSelection(); d->lyricview->selectionModel()->select(index, QItemSelectionModel::Select); if (!d->lyricview->viewMode()) { d->lyricview->scrollTo(index, QListView::PositionAtCenter); } } void LyricWidget::onLyricChanged(const MetaPtr meta, const DMusic::SearchMeta &search, const QByteArray &lyricData) { Q_D(LyricWidget); if (d->activingMeta != meta) { return; } d->searchMeta = search; auto lyricStr = QString::fromUtf8(lyricData); d->setLyricLines(lyricStr); } void LyricWidget::onCoverChanged(const MetaPtr meta, const DMusic::SearchMeta &search, const QByteArray &coverData) { Q_D(LyricWidget); if (d->activingMeta != meta) { return; } d->searchMeta = search; QImage cover(d->defaultCover); if (coverData.length() > 0) { cover = QImage::fromData(coverData); } d->m_cover->setCoverPixmap(QPixmap::fromImage(cover)); d->m_cover->update(); } void LyricWidget::setDefaultCover(QString defaultCover) { Q_D(LyricWidget); // qDebug() << "set" << defaultCover; d->defaultCover = defaultCover; } void LyricWidget::onUpdateMetaCodec(const MetaPtr /*meta*/) { // Q_D(LyricWidget); // if (d->m_playingMusic == meta) { // d->m_playingMusic.title = meta.title; // d->m_playingMusic.artist = meta.artist; // d->m_playingMusic.album = meta.album; // } } //void LyricWidget::slotTheme(int type) //{ // Q_D(LyricWidget); //} void LyricWidget::setBackgroundColor(QColor backgroundColor) { Q_D(LyricWidget); d->backgroundColor = backgroundColor; } void LyricWidget::onContextSearchFinished(const QString &context, const QList &metalist) { Q_D(LyricWidget); d->searchMetaList->clear(); //TODO: check context Q_UNUSED(context); QListWidgetItem *current = nullptr; for (auto &meta : metalist) { auto item = new QListWidgetItem; auto itemWidget = new SearchMetaItem; itemWidget->initUI(meta); if (d->searchMeta.id == meta.id) { current = item; } itemWidget->setProperty("musicMeta", QVariant::fromValue(meta)); d->searchMetaList->addItem(item); d->searchMetaList->setItemWidget(item, itemWidget); } if (current) { d->searchMetaList->setCurrentItem(current); } } deepin-music-6.0.1.54/src/music-player/view/lyricwidget.h000664 000000 000000 00000005060 13703317554 023172 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include "core/playlist.h" DWIDGET_USE_NAMESPACE class LyricWidgetPrivate; class LyricWidget : public DFrame { Q_OBJECT Q_PROPERTY(QString defaultCover READ defaultCover WRITE setDefaultCover) Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor) public: explicit LyricWidget(QWidget *parent = Q_NULLPTR); ~LyricWidget() override; void updateUI(); QString defaultCover() const; QColor backgroundColor() const; void checkHiddenSearch(QPoint mousePos); signals: void toggleLyricView(); void requestContextSearch(const QString &context); void changeMetaCache(const MetaPtr meta, const DMusic::SearchMeta &search); public slots: void onProgressChanged(qint64 value, qint64 length); void onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta); void onMusicStop(PlaylistPtr, const MetaPtr); void onLyricChanged(const MetaPtr meta, const DMusic::SearchMeta &search, const QByteArray &lyricData); void onCoverChanged(const MetaPtr meta, const DMusic::SearchMeta &search, const QByteArray &coverData); void onContextSearchFinished(const QString &context, const QList &metalist); void setDefaultCover(QString defaultCover); void setBackgroundColor(QColor backgroundColor); void onUpdateMetaCodec(const MetaPtr meta); // void slotTheme(int type); protected: virtual void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE; virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), LyricWidget) }; deepin-music-6.0.1.54/src/music-player/view/mainframe.cpp000664 000000 000000 00000167052 13703317554 023150 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "mainframe.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../speech/speechCenter.h" #include "../presenter/presenter.h" #include "../core/metasearchservice.h" #include "../core/musicsettings.h" #include "../core/player.h" #include "../core/util/global.h" #include "../musicapp.h" #include "widget/titlebarwidget.h" #include "widget/infodialog.h" #include "widget/searchresult.h" #include "widget/closeconfirmdialog.h" #include "helper/widgethellper.h" #include "widget/dequalizerdialog.h" #include "importwidget.h" #include "playlistwidget.h" #include "musiclyricwidget.h" #include "footerwidget.h" #include "loadwidget.h" #include "musiclistwidget.h" #include "shortcut.h" #include #include #include DWIDGET_USE_NAMESPACE const QString s_PropertyViewname = "viewname"; const QString s_PropertyViewnameLyric = "lyric"; const QString s_PropertyViewnamePlay = "playList"; static const int FooterHeight = 70; static const int AnimationDelay = 400; //ms static const int BlurRadius = 25; using namespace Dtk::Widget; class MainFramePrivate { public: MainFramePrivate(MainFrame *parent) : q_ptr(parent) {} void initUI(bool showLoading); void postInitUI(); void initMenu(); void setTheme(int type); void setPlayListVisible(bool visible); void toggleLyricView(); void togglePlaylist(); void slideToImportView(); void showLyricView(); void hideLyricView(); void showPlaylistView(); void hidePlaylistView(); void resiveistView(); void slideToMusicListView(bool keepPlaylist); void disableControl(int delay = 350); void updateSize(QSize newSize); void updateViewname(const QString &vm); void updateTitlebarViewname(const QString &vm); void overrideTitlebarStyle(); const QString getLastImportPath() const; void startTimer(); //! ui: show info dialog void showInfoDialog(const MetaPtr meta); VlcMediaPlayer *m_VlcMediaPlayer = nullptr; DequalizerDialog *equalizerDialog = nullptr; SpeechCenter *m_SpeechCenter = nullptr; DWidget *centralWidget = nullptr; QStackedLayout *contentLayout = nullptr; DTitlebar *titlebar = nullptr; SearchResult *searchResult = nullptr; TitlebarWidget *titlebarwidget = nullptr; ImportWidget *importWidget = nullptr; LoadWidget *loadWidget = nullptr; PlayListWidget *playListWidget = nullptr; MUsicLyricWidget *lyricWidget = nullptr; Footer *footer = nullptr; MusicListWidget *musicListWidget = nullptr; DWidget *currentWidget = nullptr; InfoDialog *infoDialog = nullptr; // DSettingsDialog *configDialog = nullptr; QAction *newSonglistAction = nullptr; QAction *colorModeAction = nullptr; QString coverBackground = ":/common/image/cover_max.svg"; QImage originCoverImage; QImage currentCoverImage; QString viewname = ""; QPoint m_LastMousePos; QTimer *timer = nullptr; int playingCount = 0; QShortcut *volumeUpShortcut = nullptr; QShortcut *volumeDownShortcut = nullptr; QShortcut *nextShortcut = nullptr; QShortcut *playPauseShortcut = nullptr; QShortcut *previousShortcut = nullptr; int width = 0; int height = 0; bool first = true; MainFrame *q_ptr; Q_DECLARE_PUBLIC(MainFrame) }; void MainFramePrivate::setTheme(int type) { //Q_Q(MainFrame); if (type == 0) { type = DGuiApplicationHelper::instance()->themeType(); } if (musicListWidget != nullptr) musicListWidget->slotTheme(type); if (playListWidget != nullptr) playListWidget->slotTheme(type); if (footer != nullptr) footer->slotTheme(type); if (lyricWidget != nullptr) lyricWidget->slotTheme(type); if (infoDialog != nullptr) infoDialog->setThemeType(type); if (importWidget != nullptr) importWidget->slotTheme(type); if (searchResult != nullptr) { searchResult->slotTheme(type); } } void MainFramePrivate::initMenu() { Q_Q(MainFrame); newSonglistAction = new QAction(MainFrame::tr("Add playlist"), q); newSonglistAction->setEnabled(false); q->connect(newSonglistAction, &QAction::triggered, q, [ = ](bool) { Q_EMIT q->addPlaylist(true); }); // auto addmusic = new QAction(MainFrame::tr("Add folder"), q); // q->connect(addmusic, &QAction::triggered, q, [ = ](bool) { // q->onSelectImportDirectory(); // }); auto addmusicfiles = new QAction(MainFrame::tr("Add music"), q); q->connect(addmusicfiles, &QAction::triggered, q, [ = ](bool) { q->onSelectImportFiles(); }); auto equalizer = new QAction(MainFrame::tr("Equalizer"), q); equalizerDialog = new DequalizerDialog(q); q->connect(equalizer, &QAction::triggered, q, [ = ](bool) { Dtk::Widget::moveToCenter(equalizerDialog); equalizerDialog->exec(); MusicSettings::sync(); }); auto settings = new QAction(MainFrame::tr("Settings"), q); q->connect(settings, &QAction::triggered, q, [ = ](bool) { DSettingsDialog *configDialog = new DSettingsDialog(q); // configDialog->setProperty("_d_QSSThemename", "dark"); configDialog->updateSettings(MusicSettings::settings()); Dtk::Widget::moveToCenter(configDialog); auto curAskCloseAction = MusicSettings::value("base.close.ask_close_action").toBool(); auto curLastPlaylist = MusicSettings::value("base.play.last_playlist").toString(); auto curLastMeta = MusicSettings::value("base.play.last_meta").toString(); auto curLastPosition = MusicSettings::value("base.play.last_position").toInt(); configDialog->exec(); delete configDialog; MusicSettings::sync(); MusicSettings::setOption("base.close.ask_close_action", curAskCloseAction); MusicSettings::setOption("base.play.last_playlist", curLastPlaylist); MusicSettings::setOption("base.play.last_meta", curLastMeta); MusicSettings::setOption("base.play.last_position", curLastPosition); auto play_pauseStr = MusicSettings::value("shortcuts.all.play_pause").toString(); if (play_pauseStr.isEmpty()) playPauseShortcut->setEnabled(false); else { playPauseShortcut->setEnabled(true); playPauseShortcut->setKey(QKeySequence(play_pauseStr)); } auto volume_upStr = MusicSettings::value("shortcuts.all.volume_up").toString(); if (volume_upStr.isEmpty()) volumeUpShortcut->setEnabled(false); else { volumeUpShortcut->setEnabled(true); volumeUpShortcut->setKey(QKeySequence(volume_upStr)); } auto volume_downStr = MusicSettings::value("shortcuts.all.volume_down").toString(); if (volume_downStr.isEmpty()) volumeDownShortcut->setEnabled(false); else { volumeDownShortcut->setEnabled(true); volumeDownShortcut->setKey(QKeySequence(volume_downStr)); } auto nextStr = MusicSettings::value("shortcuts.all.next").toString(); if (nextStr.isEmpty()) nextShortcut->setEnabled(false); else { nextShortcut->setEnabled(true); nextShortcut->setKey(QKeySequence(nextStr)); } auto previousStr = MusicSettings::value("shortcuts.all.previous").toString(); if (previousStr.isEmpty()) previousShortcut->setEnabled(false); else { previousShortcut->setEnabled(true); previousShortcut->setKey(QKeySequence(previousStr)); } Q_EMIT q->fadeInOut(); }); int themeType = DGuiApplicationHelper::instance()->themeType(); colorModeAction = new QAction(MainFrame::tr("Dark theme"), q); colorModeAction->setCheckable(true); colorModeAction->setChecked(themeType == 2); q->connect(colorModeAction, &QAction::triggered, q, [ = ](bool) { //MusicSettings::setOption("base.play.theme", DThemeManager::instance()->theme()); }); QAction *m_close = new QAction(MainFrame::tr("Exit"), q); q->connect(m_close, &QAction::triggered, q, [ = ](bool) { // d->presenter->handleQuit(); Q_EMIT q->exit(); qDebug() << "sync config start"; // MusicSettings::sync(); q->close(); }); auto titleMenu = new DMenu(q); titleMenu->addAction(newSonglistAction); titleMenu->addAction(addmusicfiles); titleMenu->addSeparator(); titleMenu->addAction(equalizer); titleMenu->addAction(settings); titleMenu->addSeparator(); titlebar->setMenu(titleMenu); //add shortcut playPauseShortcut = new QShortcut(q); playPauseShortcut->setKey(QKeySequence(MusicSettings::value("shortcuts.all.play_pause").toString())); q->connect(playPauseShortcut, &QShortcut::activated, q, [ = ]() { //Q_EMIT q->triggerShortcutAction("shortcuts.all.play_pause"); footer->onTogglePlayButton(); }); volumeUpShortcut = new QShortcut(q); volumeUpShortcut->setKey(QKeySequence(MusicSettings::value("shortcuts.all.volume_up").toString())); q->connect(volumeUpShortcut, &QShortcut::activated, q, [ = ]() { Q_EMIT q->triggerShortcutAction("shortcuts.all.volume_up"); }); volumeDownShortcut = new QShortcut(q); volumeDownShortcut->setKey(QKeySequence(MusicSettings::value("shortcuts.all.volume_down").toString())); q->connect(volumeDownShortcut, &QShortcut::activated, q, [ = ]() { Q_EMIT q->triggerShortcutAction("shortcuts.all.volume_down"); }); nextShortcut = new QShortcut(q); nextShortcut->setKey(QKeySequence(MusicSettings::value("shortcuts.all.next").toString())); q->connect(nextShortcut, &QShortcut::activated, q, [ = ]() { Q_EMIT q->triggerShortcutAction("shortcuts.all.next"); }); previousShortcut = new QShortcut(q); previousShortcut->setKey(QKeySequence(MusicSettings::value("shortcuts.all.previous").toString())); q->connect(previousShortcut, &QShortcut::activated, q, [ = ]() { Q_EMIT q->triggerShortcutAction("shortcuts.all.previous"); }); QShortcut *addmusicfilesShortcut = new QShortcut(q); addmusicfilesShortcut->setKey(QKeySequence(QLatin1String("Ctrl+I"))); q->connect(addmusicfilesShortcut, &QShortcut::activated, q, [ = ]() { q->onSelectImportFiles(); }); QShortcut *newSonglistShortcut = new QShortcut(q); newSonglistShortcut->setKey(QKeySequence(QLatin1String("Ctrl+Shift+N"))); q->connect(newSonglistShortcut, &QShortcut::activated, q, [ = ]() { if (newSonglistAction->isEnabled()) Q_EMIT q->addPlaylist(true); }); } void MainFramePrivate::initUI(bool showLoading) { showLoading = true; Q_Q(MainFrame); q->setMinimumSize(QSize(900, 600)); q->setFocusPolicy(Qt::ClickFocus); //titlebar->setBackgroundTransparent(true); //overrideTitlebarStyle(); centralWidget = new QWidget(q); contentLayout = new QStackedLayout(centralWidget); contentLayout->setContentsMargins(20, 20, 20, 0); contentLayout->setMargin(0); contentLayout->setSpacing(0); q->setCentralWidget(centralWidget); loadWidget = new LoadWidget(q); importWidget = new ImportWidget(q); footer = new Footer(q); footer->enableControl(false); contentLayout->addWidget(titlebar); contentLayout->addWidget(loadWidget); contentLayout->addWidget(importWidget); contentLayout->addWidget(footer); if (showLoading) { loadWidget->show(); importWidget->hide(); } else { loadWidget->hide(); importWidget->show(); } footer->hide(); infoDialog = new InfoDialog(q); int themeType = DGuiApplicationHelper::instance()->themeType(); infoDialog->setThemeType(themeType); infoDialog->hide(); m_SpeechCenter = SpeechCenter::getInstance(); m_VlcMediaPlayer = Player::instance()->core(); #if 0 footer->show(); #endif } void MainFramePrivate::postInitUI() { Q_Q(MainFrame); loadWidget->hide(); newSonglistAction->setDisabled(true); playListWidget = footer->getPlayListWidget(); lyricWidget = new MUsicLyricWidget; lyricWidget->setContentsMargins(0, titlebar->height(), 0, FooterHeight + 10); musicListWidget = new MusicListWidget; musicListWidget->setContentsMargins(0, titlebar->height(), 0, FooterHeight + 10); contentLayout->setContentsMargins(0, 0, 0, 0); contentLayout->addWidget(importWidget); contentLayout->addWidget(lyricWidget); contentLayout->addWidget(musicListWidget); timer = new QTimer(q); q->connect(timer, SIGNAL(timeout()), q, SLOT(changePicture())); titlebarwidget->setSearchEnable(false); importWidget->show(); footer->hide(); footer->setFocus(); updateSize(q->size()); infoDialog->move(q->pos().x() + q->size().width() / 2 - infoDialog->width() / 2, q->pos().y() + titlebar->height()); } void MainFramePrivate::showLyricView() { footer->setPlaylistButtonChecked(false); hidePlaylistView(); auto current = currentWidget ? currentWidget : playListWidget; lyricWidget->setFixedSize(current->size()); WidgetHelper::slideBottom2TopWidget( current, lyricWidget, AnimationDelay); currentWidget = lyricWidget; titlebar->raise(); footer->setLyricButtonChecked(true); footer->raise(); updateViewname(s_PropertyViewnameLyric); } void MainFramePrivate::hideLyricView() { footer->setPlaylistButtonChecked(false); auto current = currentWidget ? currentWidget : playListWidget; lyricWidget->setFixedSize(current->size()); WidgetHelper::slideTop2BottomWidget( current, musicListWidget, AnimationDelay); titlebar->raise(); footer->setLyricButtonChecked(false); footer->raise(); currentWidget = musicListWidget; updateViewname(s_PropertyViewnameLyric); } void MainFramePrivate::showPlaylistView() { if (footer->height() > 80) { return; } QRect start(5, height - 86, width - 10, 80); QRect end(5, height - 429, width - 10, 423); QRect start1(0, 0, width - 10, 0); QRect end1(0, 0, width - 10, 349); WidgetHelper::slideEdgeWidget2( playListWidget, start1, end1, AnimationDelay, true); WidgetHelper::slideEdgeWidget( footer, playListWidget, start, end, AnimationDelay, true); titlebar->raise(); footer->raise(); footer->setPlaylistButtonChecked(true); } void MainFramePrivate::hidePlaylistView() { if (footer->height() <= 80) { return; } QRect start(5, height - 429, width - 10, 423); QRect end(5, height - 86, width - 10, 80); QRect start1(0, 0, width - 10, 349); QRect end1(0, 0, width - 10, 0); WidgetHelper::slideEdgeWidget2( playListWidget, start1, end1, AnimationDelay, false); WidgetHelper::slideEdgeWidget( footer, playListWidget, start, end, AnimationDelay, false); titlebar->raise(); footer->setPlaylistButtonChecked(false); footer->raise(); } void MainFramePrivate::resiveistView() { if (first) { first = false; return ; } if (playListWidget->isVisible()) { QRect start1(0, 0, width - 10, 349); QRect end1(0, 0, width - 10, 349); WidgetHelper::slideEdgeWidget2( playListWidget, start1, end1, AnimationDelay, true); QRect rect(5, height - 429, width - 10, 423); WidgetHelper::slideEdgeWidget( footer, playListWidget, rect, rect, 10, true); } else { QRect start1(0, 0, width - 10, 0); QRect end1(0, 0, width - 10, 0); WidgetHelper::slideEdgeWidget2( playListWidget, start1, end1, AnimationDelay, false); QRect rect(5, height - 86, width - 10, 80); WidgetHelper::slideEdgeWidget( footer, playListWidget, rect, rect, 10, false); } } void MainFramePrivate:: slideToImportView() { //Q_Q(MainFrame); titlebarwidget->setSearchEnable(false); newSonglistAction->setDisabled(true); footer->setLyricButtonChecked(false); footer->setPlaylistButtonChecked(false); if (importWidget->isVisible()) { importWidget->showImportHint(); footer->enableControl(false); return; } //setPlayListVisible(false); playListWidget->hide(); auto current = currentWidget ? currentWidget : playListWidget; importWidget->showImportHint(); footer->enableControl(false); importWidget->setFixedSize(current->size()); qDebug() << "show importWidget" << current << importWidget; WidgetHelper::slideRight2LeftWidget( current, importWidget, AnimationDelay); footer->enableControl(false); currentWidget = importWidget; titlebar->raise(); footer->hide(); updateViewname(""); } void MainFramePrivate:: slideToMusicListView(bool keepPlaylist) { Q_UNUSED(keepPlaylist) Q_Q(MainFrame); titlebarwidget->setSearchEnable(true); newSonglistAction->setDisabled(false); footer->setLyricButtonChecked(false); footer->setPlaylistButtonChecked(false); auto current = currentWidget ? currentWidget : importWidget; if (musicListWidget->isVisible()) { musicListWidget->raise(); titlebar->raise(); footer->raise(); return; } musicListWidget->setFixedSize(current->size()); WidgetHelper::slideTop2BottomWidget( current, musicListWidget, AnimationDelay); q->update(); //disableControl(AnimationDelay); currentWidget = musicListWidget; titlebar->raise(); footer->show(); footer->raise(); footer->setFocus(); updateViewname(""); } void MainFramePrivate::toggleLyricView() { musicListWidget->hide(); if (lyricWidget->isVisible()) { hideLyricView(); titlebarwidget->setSearchEnable(true); } else { titlebarwidget->setSearchEnable(false); showLyricView(); } } void MainFramePrivate::togglePlaylist() { importWidget->hide(); if (playListWidget->isVisible()) { hidePlaylistView(); titlebarwidget->setSearchEnable(true); } else { showPlaylistView(); titlebarwidget->setSearchEnable(true); } } void MainFramePrivate::setPlayListVisible(bool visible) { Q_Q(MainFrame); footer->setPlaylistButtonChecked(visible); if (footer->getShowPlayListFlag() == visible) { return; } footer->showPlayListWidget(q->width(), q->height(), false); titlebar->raise(); footer->raise(); } void MainFramePrivate::disableControl(int delay) { Q_Q(MainFrame); footer->enableControl(false); QTimer::singleShot(delay, q, [ = ]() { footer->show(); footer->enableControl(true); playListWidget->setEnabled(true); }); } void MainFramePrivate::updateSize(QSize newSize) { if (loadWidget) { loadWidget->setFixedSize(newSize); loadWidget->raise(); } if (searchResult) { searchResult->hide(); } auto titleBarHeight = titlebar->height(); titlebar->raise(); titlebar->resize(newSize.width(), titleBarHeight); importWidget->setFixedSize(newSize); if (lyricWidget) { lyricWidget->setFixedSize(newSize); musicListWidget->setFixedSize(newSize); } footer->raise(); width = newSize.width(); height = newSize.height(); footer->showPlayListWidget(newSize.width(), newSize.height()); if (playListWidget != nullptr) { resiveistView(); } } void MainFramePrivate::updateViewname(const QString &vm) { Q_Q(MainFrame); if (vm == "lyric") { footer->setViewname(vm); } DUtil::TimerSingleShot(AnimationDelay / 2, [this, vm]() { updateTitlebarViewname(vm); }); DUtil::TimerSingleShot(AnimationDelay * (q->height() - footer->height() + 24) / q->height(), [this, vm]() { footer->setViewname(vm); }); } void MainFramePrivate::updateTitlebarViewname(const QString &vm) { Q_Q(MainFrame); q->setProperty("viewname", vm); titlebar->setProperty("viewname", vm); titlebarwidget->setViewname(vm); QStringList objNames; objNames << "DTitlebarDWindowMinButton" << "DTitlebarDWindowMaxButton" << "DTitlebarDWindowCloseButton" << "DTitlebarDWindowOptionButton"; for (auto &objname : objNames) { auto titlebarBt = q->titlebar()->findChild(objname); if (!titlebarBt) { continue; } titlebarBt->setProperty("viewname", vm); } } void MainFramePrivate::overrideTitlebarStyle() { titlebar->setObjectName("Titlebar"); QStringList objNames; objNames << "DTitlebarDWindowMinButton" << "DTitlebarDWindowMaxButton" << "DTitlebarDWindowCloseButton" << "DTitlebarDWindowOptionButton"; for (auto &objname : objNames) { auto titlebarBt = titlebar->findChild(objname); if (!titlebarBt) { continue; } } } const QString MainFramePrivate::getLastImportPath() const { QString lastImportPath = MusicSettings::value("base.play.last_import_path").toString(); QDir lastImportDir = QDir(lastImportPath); if (!lastImportDir.exists() || lastImportPath.isEmpty()) { lastImportPath = QStandardPaths::standardLocations(QStandardPaths::MusicLocation).first(); } else { // blumia: always use the path from QDir, QDir also accept relative path string and it will pass // the `QDir::exists()` checking lastImportPath = lastImportDir.absolutePath(); } return lastImportPath; } void MainFramePrivate::startTimer() { timer->start(250); } void MainFramePrivate::showInfoDialog(const MetaPtr meta) { infoDialog->show(); infoDialog->updateInfo(meta); } MainFrame::MainFrame(QWidget *parent) : DMainWindow(parent), dd_ptr(new MainFramePrivate(this)) { setObjectName("MainFrame"); Global::setAppName(tr("Music")); QString descriptionText = MainFrame::tr("Music is a local music player with beautiful design and simple functions."); QString acknowledgementLink = "https://www.deepin.org/acknowledgments/deepin-music#thanks"; qApp->setProductName(QApplication::tr("Music")); qApp->setApplicationAcknowledgementPage(acknowledgementLink); qApp->setProductIcon(QIcon::fromTheme("deepin-music")); qApp->setApplicationDescription(descriptionText); this->setWindowTitle(tr("Music")); Q_D(MainFrame); d->titlebarwidget = new TitlebarWidget(this); d->searchResult = new SearchResult(this); // d->searchResult->show(); d->titlebarwidget->setResultWidget(d->searchResult); d->titlebarwidget->setEnabled(false); d->titlebarwidget->show(); d->titlebar = titlebar(); d->titlebar->setFixedHeight(50); d->titlebar->setTitle(tr("Music")); d->titlebar->setIcon(QIcon::fromTheme("deepin-music")); //titlebar->setCustomWidget(titlebarwidget, Qt::AlignLeft, false); d->titlebar->setCustomWidget(d->titlebarwidget); d->titlebar->layout()->setAlignment(d->titlebarwidget, Qt::AlignCenter); d->titlebar->resize(width(), 50); QShortcut *viewshortcut = new QShortcut(this); viewshortcut->setKey(QKeySequence(QLatin1String("Ctrl+Shift+/"))); connect(viewshortcut, SIGNAL(activated()), this, SLOT(onViewShortcut())); QShortcut *searchShortcut = new QShortcut(this); searchShortcut->setKey(QKeySequence(QLatin1String("Ctrl+F"))); connect(searchShortcut, &QShortcut::activated, this, [ = ]() { d->titlebarwidget->setEditStatus(); }); QShortcut *windowShortcut = new QShortcut(this); windowShortcut->setKey(QKeySequence(QLatin1String("Ctrl+Alt+F"))); connect(windowShortcut, &QShortcut::activated, this, [ = ]() { if (windowState() == Qt::WindowMaximized) { showNormal(); } else { showMaximized(); } }); } MainFrame::~MainFrame() { Q_D(MainFrame); Q_EMIT exit(); MusicSettings::sync(); MusicSettings::setOption("base.play.state", int(windowState())); MusicSettings::setOption("base.play.geometry", saveGeometry()); delete d->equalizerDialog; } void MainFrame::initUI(bool showLoading) { Q_D(MainFrame); d->initUI(showLoading); d->initMenu(); } void MainFrame::postInitUI() { Q_D(MainFrame); d->postInitUI(); updateUI(); focusPlayList(); auto playAction = new QAction(tr("Play/Pause"), this); auto prevAction = new QAction(tr("Previous"), this); auto nextAction = new QAction(tr("Next"), this); auto quitAction = new QAction(tr("Exit"), this); auto trayIconMenu = new DMenu(this); trayIconMenu->addAction(playAction); trayIconMenu->addAction(prevAction); trayIconMenu->addAction(nextAction); trayIconMenu->addSeparator(); trayIconMenu->addAction(quitAction); auto trayIcon = new QSystemTrayIcon(this); trayIcon->setIcon(QIcon::fromTheme("deepin-music")); trayIcon->setToolTip(tr("Music")); trayIcon->setContextMenu(trayIconMenu); trayIcon->show(); connect(playAction, &QAction::triggered, this, [ = ]() { Q_EMIT triggerShortcutAction("shortcuts.all.play_pause"); }); connect(prevAction, &QAction::triggered, this, [ = ]() { Q_EMIT triggerShortcutAction("shortcuts.all.previous"); }); connect(nextAction, &QAction::triggered, this, [ = ]() { Q_EMIT triggerShortcutAction("shortcuts.all.next"); }); connect(quitAction, &QAction::triggered, this, [ = ]() { Q_EMIT requitQuit(); }); connect(trayIcon, &QSystemTrayIcon::activated, this, [ = ](QSystemTrayIcon::ActivationReason reason) { if (QSystemTrayIcon::Trigger == reason) { if (isVisible()) { if (isMinimized()) { showNormal(); // when window flags changed, should call hide and show hide(); show(); } else { showMinimized(); } } else { showNormal(); } } }); } void MainFrame::binding(Presenter *presenter) { Q_D(MainFrame); d->playListWidget->setCurPlaylist(presenter->playlist(PlayMusicListID)); d->footer->setCurPlaylist(presenter->playlist(PlayMusicListID)); connect(this, &MainFrame::exit, presenter, &Presenter::onHandleQuit, Qt::DirectConnection); connect(this, &MainFrame::importSelectFiles, presenter, &Presenter::onImportFiles); connect(this, &MainFrame::addPlaylist, presenter, &Presenter::onPlaylistAdd); connect(this, &MainFrame::fadeInOut, presenter, &Presenter::onFadeInOut); connect(presenter, &Presenter::searchResult, d->musicListWidget, [ = ](QString searchText, QList resultlist) { Q_EMIT d->musicListWidget->seaResult(searchText, resultlist); }); #ifdef Q_OS_WIN connect(d->titlebar, &Titlebar::mousePosMoving, this, [ = ](Qt::MouseButton /*button*/, QPoint pos) { move(pos - d->m_LastMousePos); }); connect(d->titlebar, &Titlebar::mousePosPressed, this, [ = ](Qt::MouseButtons /*button*/, QPoint pos) { // TODO: fix margin pos.setY(pos.y() - 10); d->m_LastMousePos = pos - this->mapToParent(this->pos()); }); #endif connect(d->titlebarwidget, &TitlebarWidget::searchExited, presenter, &Presenter::onExitSearch); connect(d->titlebarwidget, &TitlebarWidget::searchText, presenter, &Presenter::onSearchText); connect(d->titlebarwidget, &TitlebarWidget::searchExited, presenter, [ = ]() { Q_EMIT d->musicListWidget->closeSearch(); }); connect(d->importWidget, &ImportWidget::scanMusicDirectory, presenter, &Presenter::onScanMusicDirectory); connect(d->importWidget, &ImportWidget::selectImportDirectory, this, &MainFrame::onSelectImportDirectory); connect(d->importWidget, &ImportWidget::importFiles, this, &MainFrame::onSelectImportFiles); connect(d->importWidget, &ImportWidget::importSelectFiles, this, [ = ](const QStringList & urllist) { d->importWidget->showWaitHint(); Q_EMIT importSelectFiles(urllist, nullptr); }); connect(presenter, &Presenter::notifyAddToPlaylist, this, [ = ](PlaylistPtr playlist, const MetaPtrList metaPtrList, int count) { auto icon = QIcon(":/common/image/notify_success_new.svg"); QFontMetrics fm(font()); auto displayName = fm.elidedText(playlist->displayName(), Qt::ElideMiddle, 300); auto text = tr("Successfully added to \"%1\"").arg(displayName); int curCount = metaPtrList.size() - count; if (count > 0) { if (metaPtrList.size() == 1 || curCount == 0) text = tr("Already added to the playlist"); else { if (curCount == 1) text = tr("1 song added"); else text = tr("%1 songs added").arg(curCount); } } if (playlist->id() != AlbumMusicListID && playlist->id() != ArtistMusicListID && playlist->id() != PlayMusicListID) this->sendMessage(icon, text); QWidget *content = this->findChild("_d_message_manager_content"); if (nullptr != content) content->setContentsMargins(0, 0, 0, 90); }); connect(presenter, &Presenter::showMusicList, this, [ = ](PlaylistPtr playlist) { auto current = d->currentWidget ? d->currentWidget : d->importWidget; d->musicListWidget->resize(current->size()); d->musicListWidget->show(); d->currentWidget = d->musicListWidget; d->importWidget->hide(); d->playListWidget->onMusiclistChanged(playlist); d->musicListWidget->onMusiclistChanged(playlist); d->disableControl(false); d->titlebarwidget->setSearchEnable(true); d->newSonglistAction->setEnabled(true); }); connect(presenter, &Presenter::coverSearchFinished, this, [ = ](const MetaPtr, const DMusic::SearchMeta &, const QByteArray & coverData) { if (coverData.length() < 32) { setCoverBackground(coverBackground()); this->update(); return; } QImage image = QImage::fromData(coverData); if (image.isNull()) { setCoverBackground(coverBackground()); this->update(); return; } d->originCoverImage = WidgetHelper::blurImage(image, BlurRadius).toImage(); d->currentCoverImage = WidgetHelper::cropRect(d->originCoverImage, size()); update(); }); connect(presenter, &Presenter::musicStoped, this, [ = ](PlaylistPtr, const MetaPtr) { setCoverBackground(coverBackground()); d->timer->stop(); }); /************************************************ * handl the case where file does not exsit * ***********************************************/ connect(d->playListWidget, &PlayListWidget::fileRemoved, presenter, &Presenter::notifyMusciError); connect(presenter, &Presenter::notifyMusciError, this, [ = ](PlaylistPtr playlist, const MetaPtr meta, int /*error*/) { Q_UNUSED(playlist) QList ql = this->findChildren("uniqueinvaliddailog"); if (ql.size() > 0) { if (!ql.first()->isHidden()) return ; } Dtk::Widget::DDialog warnDlg(this); warnDlg.setObjectName("uniqueinvaliddailog"); warnDlg.setIcon(QIcon::fromTheme("deepin-music")); warnDlg.setTextFormat(Qt::RichText); warnDlg.setTitle(tr("File is invalid or does not exist, load failed")); warnDlg.addButtons(QStringList() << tr("OK")); warnDlg.setDefaultButton(0); if (0 == warnDlg.exec()) { auto curPlaylist = d->playListWidget->curPlaylist(); if (curPlaylist->canNext()) { bool existFlag = false; for (auto curMeta : curPlaylist->allmusic()) { if (!curMeta->invalid || access(curMeta->localPath.toStdString().c_str(), F_OK) == 0) { if (QFileInfo(curMeta->localPath).dir().isEmpty()) { continue; } Q_EMIT presenter->playNext(curPlaylist, meta); existFlag = true; break; } } if (!existFlag) { d->timer->stop(); } } else { d->timer->stop(); } } else { d->timer->stop(); } }); connect(presenter, &Presenter::metaLibraryClean, this, [ = ]() { d->slideToImportView(); d->titlebarwidget->clearSearch(); d->footer->onMediaLibraryClean(); }); connect(presenter, &Presenter::scanFinished, this, [ = ](const QString & /*jobid*/, int mediaCount) { if (0 == mediaCount) { QList ql = this->findChildren("uniquewarndailog"); if (ql.size() > 0) { if (!ql.first()->isHidden()) return ; } QString message = QString(tr("Import failed, no valid music file found")); Dtk::Widget::DDialog warnDlg(this); warnDlg.setObjectName("uniquewarndailog"); warnDlg.setIcon(QIcon::fromTheme("deepin-music")); warnDlg.setTextFormat(Qt::AutoText); warnDlg.setTitle(message); warnDlg.addButtons(QStringList() << tr("OK")); warnDlg.setDefaultButton(0); if (0 == warnDlg.exec()) { return; } } }); connect(presenter, &Presenter::musicPlayed, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { Q_ASSERT(!playlist.isNull()); Q_ASSERT(!meta.isNull()); qApp->setApplicationDisplayName(playlist->displayName()); this->setWindowTitle(meta->title); d->startTimer(); }); connect(presenter, &Presenter::musicPaused, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { Q_UNUSED(playlist) Q_UNUSED(meta) d->timer->stop(); }); connect(presenter, &Presenter::meidaFilesImported, this, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { d->setPlayListVisible(false); d->playListWidget->onMusiclistChanged(playlist); d->musicListWidget->onMusicListAdded(playlist, metalist); d->disableControl(true); d->slideToMusicListView(true); }); connect(presenter, &Presenter::requestImportFiles, this, [ = ]() { onSelectImportDirectory(); }); connect(presenter, &Presenter::currentMusicListChanged, this, [ = ](PlaylistPtr playlist) { if (playlist && playlist->id() != SearchMusicListID) { d->titlebarwidget->exitSearch(); } if (d->lyricWidget->isVisible()) { d->setPlayListVisible(true); } }); connect(presenter, &Presenter::requestMusicListMenu, this, [ = ](const QPoint & pos, PlaylistPtr selectedlist, PlaylistPtr favlist, QListnewlists, char type) { if (type > 0) { d->musicListWidget->onCustomContextMenuRequest(pos, selectedlist, favlist, newlists, type); } else { d->playListWidget->onCustomContextMenuRequest(pos, selectedlist, favlist, newlists); } }); connect(d->footer, &Footer::locateMusic, this, [ = ](PlaylistPtr playlist, const MetaPtr) { if (playlist && playlist->id() != SearchMusicListID) { d->titlebarwidget->exitSearch(); } if (d->lyricWidget->isVisible()) { d->setPlayListVisible(true); } }); // The search box connect(d->titlebarwidget, &TitlebarWidget::searchCand, presenter, &Presenter::onSearchCand); connect(presenter, &Presenter::searchCand, d->searchResult, &SearchResult::onSearchCand, Qt::QueuedConnection); // PlayList connect(d->playListWidget, &PlayListWidget::showInfoDialog, this, [ = ](const MetaPtr meta) { d->showInfoDialog(meta); }); connect(d->playListWidget, &PlayListWidget::playall, presenter, &Presenter::onPlayall); connect(d->playListWidget, &PlayListWidget::resort, presenter, &Presenter::onResort); connect(d->playListWidget, &PlayListWidget::playMedia, presenter, &Presenter::onSyncMusicPlay); connect(d->playListWidget, &PlayListWidget::resume, presenter, &Presenter::onSyncMusicResume); connect(d->playListWidget, &PlayListWidget::updateMetaCodec, presenter, &Presenter::onUpdateMetaCodec); connect(d->playListWidget, &PlayListWidget::requestCustomContextMenu, presenter, &Presenter::onRequestMusiclistMenu); connect(d->playListWidget, &PlayListWidget::addToPlaylist, presenter, &Presenter::onAddToPlaylist); connect(d->playListWidget, &PlayListWidget::musiclistRemove, presenter, &Presenter::onMusiclistRemove); connect(d->playListWidget, &PlayListWidget::musiclistDelete, presenter, &Presenter::onMusiclistDelete); connect(d->playListWidget, &PlayListWidget::addMetasFavourite, presenter, &Presenter::onAddMetasFavourite); connect(d->playListWidget, &PlayListWidget::removeMetasFavourite, presenter, &Presenter::onRemoveMetasFavourite); connect(d->playListWidget, &PlayListWidget::pause, presenter, &Presenter::onMusicPause); connect(d->playListWidget, &PlayListWidget::musicFileMiss, presenter, &Presenter::musicFileMiss); connect(d->playListWidget, &PlayListWidget::importSelectFiles, this, [ = ](PlaylistPtr playlist, QStringList urllist) { presenter->requestImportPaths(playlist, urllist); }); connect(d->playListWidget, &PlayListWidget::updateMetaCodec, d->footer, &Footer::onUpdateMetaCodec); connect(presenter, &Presenter::musicListResorted, d->playListWidget, &PlayListWidget::onMusiclistChanged); connect(presenter, &Presenter::currentMusicListChanged, d->playListWidget, &PlayListWidget::onMusiclistChanged); connect(presenter, &Presenter::musicPlayed, d->playListWidget, &PlayListWidget::onMusicPlayed); connect(presenter, &Presenter::musicError, d->playListWidget, &PlayListWidget::onMusicError); connect(presenter, &Presenter::musicListAdded, d->playListWidget, &PlayListWidget::onMusicListAdded); connect(presenter, &Presenter::musicListRemoved, d->playListWidget, &PlayListWidget::onMusicListRemoved); connect(presenter, &Presenter::locateMusic, d->playListWidget, &PlayListWidget::onLocate); connect(presenter, &Presenter::progrossChanged, d->lyricWidget, &MUsicLyricWidget::onProgressChanged); connect(presenter, &Presenter::musicPlayed, d->lyricWidget, &MUsicLyricWidget::onMusicPlayed); connect(presenter, &Presenter::coverSearchFinished, d->lyricWidget, &MUsicLyricWidget::onCoverChanged); connect(presenter, &Presenter::lyricSearchFinished, d->lyricWidget, &MUsicLyricWidget::onLyricChanged); connect(presenter, &Presenter::contextSearchFinished, d->lyricWidget, &MUsicLyricWidget::onContextSearchFinished); connect(presenter, &Presenter::musicStoped, d->lyricWidget, &MUsicLyricWidget::onMusicStop); connect(d->lyricWidget, &MUsicLyricWidget::requestContextSearch, presenter, &Presenter::requestContextSearch); connect(d->lyricWidget, &MUsicLyricWidget::changeMetaCache, presenter, &Presenter::onChangeSearchMetaCache); // footer connect(d->footer, &Footer::toggleLyricView, this, [ = ]() { d->toggleLyricView(); }); connect(d->footer, &Footer::togglePlaylist, this, [ = ]() { d->togglePlaylist(); }); connect(d->footer, &Footer::locateMusic, d->playListWidget, &PlayListWidget::onLocate); connect(d->footer, &Footer::play, presenter, &Presenter::onSyncMusicPlay); connect(d->footer, &Footer::resume, presenter, &Presenter::onSyncMusicResume); connect(d->footer, &Footer::pause, presenter, &Presenter::onMusicPause); connect(d->footer, &Footer::next, presenter, &Presenter::onSyncMusicNext); connect(d->footer, &Footer::prev, presenter, &Presenter::onSyncMusicPrev); connect(d->footer, &Footer::changeProgress, presenter, &Presenter::onChangeProgress); connect(d->footer, &Footer::volumeChanged, presenter, &Presenter::onVolumeChanged); connect(d->footer, &Footer::toggleMute, presenter, &Presenter::onToggleMute); /*************************************** * local toggle * *************************************/ connect(d->footer, &Footer::localToggleMute, presenter, &Presenter::onLocalToggleMute); connect(d->footer, &Footer::modeChanged, presenter, &Presenter::onPlayModeChanged); connect(d->footer, &Footer::toggleFavourite, presenter, &Presenter::onToggleFavourite); connect(d->footer, &Footer::pause, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { Q_UNUSED(playlist) Q_UNUSED(meta) d->timer->stop(); }); connect(d->footer, &Footer::progressRealHeightChanged, this, [ = ](qreal realHeight) { int margin = FooterHeight + static_cast(realHeight); d->playListWidget->setContentsMargins(0, 0, 0, margin); }); connect(presenter, &Presenter::modeChanged, d->footer, &Footer::onModeChange); connect(presenter, &Presenter::musicListAdded, d->footer, &Footer::onMusicListAdded); connect(presenter, &Presenter::musicListRemoved, d->footer, &Footer::onMusicListRemoved); connect(presenter, &Presenter::musicPlayed, d->footer, &Footer::onMusicPlayed); connect(presenter, &Presenter::musicPaused, d->footer, &Footer::onMusicPause); connect(presenter, &Presenter::musicStoped, d->footer, &Footer::onMusicStoped); connect(presenter, &Presenter::progrossChanged, d->footer, &Footer::onProgressChanged); connect(presenter, &Presenter::coverSearchFinished, d->footer, &Footer::onCoverChanged); connect(presenter, &Presenter::volumeChanged, d->footer, &Footer::onVolumeChanged); connect(presenter, &Presenter::mutedChanged, d->footer, &Footer::onMutedChanged); connect(presenter, &Presenter::localMutedChanged, d->footer, &Footer::onLocalMutedChanged); connect(presenter, &Presenter::musicError, d->footer, &Footer::onMusicError); connect(presenter, &Presenter::audioBufferProbed, d->footer, &Footer::audioBufferProbed); connect(presenter, &Presenter::metaBuffer, d->footer, &Footer::metaBuffer); connect(d->footer, &Footer::localMuteStat, presenter, &Presenter::localMuteChanged); // musiclist connect(presenter, &Presenter::playlistAdded, d->musicListWidget, &MusicListWidget::onPlaylistAdded); connect(presenter, &Presenter::musicPlayed, d->musicListWidget, &MusicListWidget::onMusicPlayed); connect(presenter, &Presenter::currentMusicListChanged, d->musicListWidget, &MusicListWidget::onCurrentChanged); connect(presenter, &Presenter::musicListResorted, d->musicListWidget, &MusicListWidget::onMusiclistChanged); connect(presenter, &Presenter::musicListAdded, d->musicListWidget, &MusicListWidget::onMusicListAdded); connect(presenter, &Presenter::musicListRemoved, d->musicListWidget, &MusicListWidget::onMusicListRemoved); connect(d->musicListWidget, &MusicListWidget::requestCustomContextMenu, presenter, &Presenter::onRequestMusiclistMenu); connect(d->musicListWidget, &MusicListWidget::showInfoDialog, this, [ = ](const MetaPtr meta) { d->showInfoDialog(meta); }); connect(d->musicListWidget, &MusicListWidget::modeChanged, presenter, &Presenter::onPlayModeChanged); connect(d->musicListWidget, &MusicListWidget::resort, presenter, &Presenter::onResort); connect(d->musicListWidget, &MusicListWidget::addPlaylist, presenter, &Presenter::onPlaylistAdd); connect(d->musicListWidget, &MusicListWidget::selectPlaylist, presenter, &Presenter::onCurrentPlaylistChanged); connect(d->musicListWidget, &MusicListWidget::playall, presenter, &Presenter::onPlayall); connect(d->musicListWidget, &MusicListWidget::customResort, presenter, &Presenter::onCustomResort); connect(d->musicListWidget, &MusicListWidget::playMedia, presenter, &Presenter::onSyncMusicPlay); connect(d->musicListWidget, &MusicListWidget::resume, presenter, &Presenter::onSyncMusicResume); connect(d->musicListWidget, &MusicListWidget::pause, presenter, &Presenter::onMusicPause); connect(d->musicListWidget, &MusicListWidget::updateMetaCodec, presenter, &Presenter::onUpdateMetaCodec); connect(d->musicListWidget, &MusicListWidget::addToPlaylist, presenter, &Presenter::onAddToPlaylist); connect(d->musicListWidget, &MusicListWidget::musiclistRemove, presenter, &Presenter::onMusiclistRemove); connect(d->musicListWidget, &MusicListWidget::musiclistDelete, presenter, &Presenter::onMusiclistDelete); connect(presenter, &Presenter::musicListClear, this, [ = ]() { qApp->setApplicationDisplayName(""); this->setWindowTitle(tr("Music")); }); connect(d->musicListWidget, &MusicListWidget::importSelectFiles, this, [ = ](PlaylistPtr playlist, QStringList urllist) { presenter->requestImportPaths(playlist, urllist); }); connect(d->musicListWidget, &MusicListWidget::addMetasFavourite, presenter, &Presenter::onAddMetasFavourite); connect(d->musicListWidget, &MusicListWidget::removeMetasFavourite, presenter, &Presenter::onRemoveMetasFavourite); connect(d->musicListWidget, &MusicListWidget::selectedPlaylistChange, d->searchResult, &SearchResult::selectPlaylist); connect(d->musicListWidget, &MusicListWidget::selectedPlaylistChange, d->titlebarwidget, &TitlebarWidget::selectPlaylist); //add Shortcut QShortcut *muteShortcut = new QShortcut(this); muteShortcut->setKey(QKeySequence(QLatin1String("M"))); connect(muteShortcut, &QShortcut::activated, presenter, &Presenter::onToggleMute); connect(presenter, &Presenter::hidewaveformScale, d->footer, &Footer::hidewaveform); bindSpeechConnect(presenter); bindEqualizerConnect(presenter); } //绑定语音处ç†ä¿¡å· void MainFrame::bindSpeechConnect(Presenter *presenter) { Q_D(const MainFrame); connect(d->m_SpeechCenter, &SpeechCenter::sigPlayMusic, presenter, &Presenter::onSpeechPlayMusic); connect(d->m_SpeechCenter, &SpeechCenter::sigPlayArtist, presenter, &Presenter::onSpeechPlayArtist); connect(d->m_SpeechCenter, &SpeechCenter::sigPlayArtistMusic, presenter, &Presenter::onSpeechPlayArtistMusic); connect(d->m_SpeechCenter, &SpeechCenter::sigPlayFaverite, presenter, &Presenter::onSpeechPlayFaverite); connect(d->m_SpeechCenter, &SpeechCenter::sigPlayCustom, presenter, &Presenter::onSpeechPlayCustom); connect(d->m_SpeechCenter, &SpeechCenter::sigPlayRadom, presenter, &Presenter::onSpeechPlayRadom); connect(d->m_SpeechCenter, &SpeechCenter::sigPause, presenter, &Presenter::onSpeechPause); connect(d->m_SpeechCenter, &SpeechCenter::sigStop, presenter, &Presenter::onSpeechStop); connect(d->m_SpeechCenter, &SpeechCenter::sigResume, presenter, &Presenter::onSpeechResume); connect(d->m_SpeechCenter, &SpeechCenter::sigPrevious, presenter, &Presenter::onSpeechPrevious); connect(d->m_SpeechCenter, &SpeechCenter::sigNext, presenter, &Presenter::onSpeechNext); connect(d->m_SpeechCenter, &SpeechCenter::sigFavorite, presenter, &Presenter::onSpeechFavorite); connect(d->m_SpeechCenter, &SpeechCenter::sigUnFaverite, presenter, &Presenter::onSpeechunFaverite); connect(d->m_SpeechCenter, &SpeechCenter::sigSetMode, presenter, &Presenter::onSpeechsetMode); //è¯­éŸ³è¿”å›žä¿¡å· connect(presenter, &Presenter::sigSpeedResult, d->m_SpeechCenter, &SpeechCenter::onSpeedResult); } //绑定å‡è¡¡å™¨å¤„ç†ä¿¡å· void MainFrame::bindEqualizerConnect(Presenter *presenter) { Q_D(const MainFrame); connect(d->equalizerDialog, &DequalizerDialog::setEqualizerEnable, presenter, &Presenter::setEqualizerEnable); connect(d->equalizerDialog, &DequalizerDialog::setEqualizerpre, presenter, &Presenter::setEqualizerpre); connect(d->equalizerDialog, &DequalizerDialog::setEqualizerbauds, presenter, &Presenter::setEqualizerbauds); connect(d->equalizerDialog, &DequalizerDialog::setEqualizerIndex, presenter, &Presenter::setEqualizerCurMode); } void MainFrame::focusPlayList() { Q_D(const MainFrame); d->playListWidget->setFocus(); } QString MainFrame::coverBackground() const { Q_D(const MainFrame); return d->coverBackground; } void MainFrame::updateUI() { Q_D(MainFrame); setCoverBackground(coverBackground()); d->lyricWidget->updateUI(); d->titlebarwidget->setEnabled(true); d->titlebarwidget->show(); } void MainFrame::setCoverBackground(QString coverBackground) { Q_D(MainFrame); d->coverBackground = coverBackground; QImage image = QImage(coverBackground); d->originCoverImage = WidgetHelper::blurImage(image, BlurRadius).toImage(); d->currentCoverImage = WidgetHelper::cropRect(d->originCoverImage, size()); d->lyricWidget->updateUI(); } void MainFrame::onSelectImportDirectory() { Q_D(const MainFrame); DFileDialog fileDlg(this); QString lastImportPath = d->getLastImportPath(); fileDlg.setDirectory(lastImportPath); fileDlg.setViewMode(DFileDialog::Detail); fileDlg.setFileMode(DFileDialog::Directory); if (DFileDialog::Accepted == fileDlg.exec()) { d->importWidget->showWaitHint(); MusicSettings::setOption("base.play.last_import_path", fileDlg.directory().path()); Q_EMIT importSelectFiles(fileDlg.selectedFiles(), nullptr); } } void MainFrame::onSelectImportFiles() { Q_D(const MainFrame); DFileDialog fileDlg(this); QString lastImportPath = d->getLastImportPath(); fileDlg.setDirectory(lastImportPath); QString selfilter = tr("All music") + (" (%1)"); selfilter = selfilter.arg(Player::instance()->supportedSuffixList().join(" ")); fileDlg.setViewMode(DFileDialog::Detail); fileDlg.setFileMode(DFileDialog::ExistingFiles); fileDlg.setOption(DFileDialog::HideNameFilterDetails); fileDlg.setNameFilter(selfilter); fileDlg.selectNameFilter(selfilter); if (DFileDialog::Accepted == fileDlg.exec()) { d->importWidget->showWaitHint(); MusicSettings::setOption("base.play.last_import_path", fileDlg.directory().path()); Q_EMIT importSelectFiles(fileDlg.selectedFiles(), d->musicListWidget->curPlaylist()); } } void MainFrame::slotTheme(int type) { Q_D(MainFrame); d->setTheme(type); } void MainFrame::changePicture() { Q_D(MainFrame); int curCount = d->playingCount % 4; d->playingCount = curCount + 1; QPixmap pixmap, albumPixmap, sidebarPixmap; switch (curCount) { case 0: pixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music1.svg"); albumPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_white_album_cover/music1.svg"); sidebarPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); break; case 1: pixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music2.svg"); albumPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_white_album_cover/music2.svg"); sidebarPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_withe_sidebar/music2.svg"); break; case 2: pixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music3.svg"); albumPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_white_album_cover/music3.svg"); sidebarPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_withe_sidebar/music3.svg"); break; case 3: pixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music4.svg"); albumPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_white_album_cover/music4.svg"); sidebarPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_withe_sidebar/music4.svg"); break; default: pixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music1.svg"); albumPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_white_album_cover/music1.svg"); sidebarPixmap = DHiDPIHelper::loadNxPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); break; } d->musicListWidget->changePicture(pixmap, albumPixmap, sidebarPixmap); d->playListWidget->changePicture(pixmap, sidebarPixmap, albumPixmap); } void MainFrame::onViewShortcut() { QRect rect = window()->geometry(); QPoint pos(rect.x() + rect.width() / 2, rect.y() + rect.height() / 2); Shortcut sc; QStringList shortcutString; QString param1 = "-j=" + sc.toStr(); QString param2 = "-p=" + QString::number(pos.x()) + "," + QString::number(pos.y()); shortcutString << "-b" << param1 << param2; QProcess *shortcutViewProc = new QProcess(this); shortcutViewProc->startDetached("killall deepin-shortcut-viewer"); shortcutViewProc->startDetached("deepin-shortcut-viewer", shortcutString); connect(shortcutViewProc, SIGNAL(finished(int)), shortcutViewProc, SLOT(deleteLater())); } bool MainFrame::eventFilter(QObject *obj, QEvent *e) { Q_D(const MainFrame); if (e->type() == QEvent::KeyPress) { QKeyEvent *ke = static_cast(e); auto keyModifiers = ke->modifiers(); auto key = static_cast(ke->key()); QStringList sclist; sclist << "shortcuts.all.next" << "shortcuts.all.play_pause" << "shortcuts.all.previous" << "shortcuts.all.volume_down" << "shortcuts.all.volume_up"; for (auto optkey : sclist) { auto shortcut = MusicSettings::value(optkey).toStringList(); auto modifiersstr = shortcut.value(0); auto scmodifiers = static_cast(modifiersstr.toInt()); auto keystr = shortcut.value(1); auto sckey = static_cast(keystr.toInt()); if (scmodifiers != Qt::NoModifier && scmodifiers == keyModifiers && key == sckey && !ke->isAutoRepeat()) { //qDebug() << "match " << optkey << ke->count() << ke->isAutoRepeat(); Q_EMIT triggerShortcutAction(optkey); return true; } } } if (e->type() == QEvent::MouseButtonPress) { QMouseEvent *me = static_cast(e); if (obj->objectName() == this->objectName() || this->objectName() + "Window" == obj->objectName()) { QPoint mousePos = me->pos(); auto geometry = d->footer->geometry().marginsAdded(QMargins(0, 0, 40, 40)); if (!geometry.contains(mousePos)) { DUtil::TimerSingleShot(50, [this]() { //this->d_func()->setPlayListVisible(false); this->d_func()->hidePlaylistView(); }); } } } if (e->type() == QEvent::MouseButtonPress) { QMouseEvent *me = static_cast(e); if (obj->objectName() == this->objectName() || this->objectName() + "Window" == obj->objectName()) { QPoint mousePos = me->pos(); // qDebug() << "lyricView checkHiddenSearch" << me->pos() << QCursor::pos() << obj; d->lyricWidget->checkHiddenSearch(mousePos); } } return qApp->eventFilter(obj, e); } void MainFrame::enterEvent(QEvent *e) { DMainWindow::enterEvent(e); } void MainFrame::resizeEvent(QResizeEvent *e) { Q_D(MainFrame); DMainWindow::resizeEvent(e); QSize newSize = DMainWindow::size(); d->updateSize(newSize); if (!d->originCoverImage.isNull()) { d->currentCoverImage = WidgetHelper::cropRect(d->originCoverImage, size()); } } void MainFrame::closeEvent(QCloseEvent *event) { Q_D(const MainFrame); auto askCloseAction = MusicSettings::value("base.close.ask_close_action").toBool(); if (askCloseAction) { CloseConfirmDialog ccd(this); // fix close style auto titlebarBt = titlebar()->findChild("DTitlebarDWindowCloseButton"); auto closeBt = qobject_cast(titlebarBt); if (closeBt) { closeBt->setState(DImageButton::Normal); } auto clickedButtonIndex = ccd.exec(); qDebug() << "clickedButtonIndex:" << clickedButtonIndex; // 1 is confirm button if (1 != clickedButtonIndex) { // fix button style event->ignore(); return; } MusicSettings::setOption("base.close.ask_close_action", !ccd.isRemember()); MusicSettings::setOption("base.close.close_action", ccd.closeAction()); } auto closeAction = MusicSettings::value("base.close.close_action").toInt(); if (CloseConfirmDialog::QuitOnClose == closeAction) { MusicSettings::setOption("base.play.state", int(windowState())); MusicSettings::setOption("base.play.geometry", saveGeometry()); DMainWindow::closeEvent(event); } DMainWindow::closeEvent(event); } void MainFrame::paintEvent(QPaintEvent *e) { //Q_D(MainFrame); QPainter p(this); DMainWindow::paintEvent(e); } deepin-music-6.0.1.54/src/music-player/view/mainframe.h000664 000000 000000 00000004515 13703317554 022607 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "DMainWindow" #include "core/playlist.h" class Presenter; class MainFramePrivate; class MainFrame : public Dtk::Widget::DMainWindow { Q_OBJECT public: explicit MainFrame(QWidget *parent = Q_NULLPTR); ~MainFrame() Q_DECL_OVERRIDE; void initUI(bool showLoading); void postInitUI(); void binding(Presenter *presenter); void bindSpeechConnect(Presenter *presenter); void bindEqualizerConnect(Presenter *presenter); void focusPlayList(); QString coverBackground() const; signals: void requitQuit(); void addPlaylist(bool); void importSelectFiles(const QStringList &filelist, PlaylistPtr playlist); void triggerShortcutAction(const QString &optKey); void fadeInOut(); void exit(); void savePosition(); public slots: void updateUI(); void setCoverBackground(QString coverBackground); void onSelectImportDirectory(); void onSelectImportFiles(); void slotTheme(int type); void changePicture(); void onViewShortcut(); protected: virtual void enterEvent(QEvent *event) Q_DECL_OVERRIDE; virtual bool eventFilter(QObject *obj, QEvent *e) Q_DECL_OVERRIDE; virtual void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE; virtual void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE; virtual void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE; private: QScopedPointer dd_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(dd_ptr), MainFrame) }; extern const QString s_PropertyViewname; extern const QString s_PropertyViewnameLyric; deepin-music-6.0.1.54/src/music-player/view/mainwindow.cpp000664 000000 000000 00000054662 13703317554 023367 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "mainwindow.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "titlebar.h" #include "footer.h" #include "importwidget.h" #include "lyricview.h" #include "playlistwidget.h" #include "musiclistwidget.h" #include "widget/tip.h" #include "widget/titlebarwidget.h" #include "widget/dsettingdialog.h" #include "core/settings.h" #include "../core/playlist.h" #include "../musicapp.h" #include "../presenter/presenter.h" #include "helper/widgethellper.h" DWIDGET_USE_NAMESPACE static const int s_AnimationDelay = 350 * 1; static QColor s_lyricTitleTop = QColor(0, 0, 0, 94); static QColor s_lyriclTitleBottom = QColor(0, 0, 0, 102); static const int titleBarHeight = 40; static const int footerHeight = 60; class MainWindowPrivate { public: MainWindowPrivate() {} Titlebar *titlebar = nullptr; TitleBarWidget *titlebarwidget = nullptr; Footer *footer = nullptr; PlaylistWidget *playlist = nullptr; ImportWidget *importWidget = nullptr; MusicListWidget *musicList = nullptr; LyricView *lyricView = nullptr; Tip *tips = nullptr; QWidget *currentWidget = nullptr; QAction *newSonglistAction = nullptr; QAction *colorModeAction = nullptr; QString coverBackground = ":/common/image/cover_max.png"; QString viewname = ""; }; MainWindow::MainWindow(QWidget *parent) : ThinWindow(parent), d(new MainWindowPrivate) { auto contentLayout = new QStackedLayout(); setContentLayout(contentLayout); contentLayout->setContentsMargins(20, 20, 20, 20); contentLayout->setMargin(0); contentLayout->setSpacing(0); // connect(d->title, &DTitlebar::optionClicked, this, &MainWindow::optionClicked); d->importWidget = new ImportWidget; d->musicList = new MusicListWidget; d->lyricView = new LyricView; d->playlist = new PlaylistWidget; d->playlist->setFixedWidth(220); d->footer = new Footer; d->footer->setFixedHeight(footerHeight); d->musicList->setContentsMargins(0, titleBarHeight - 1, 0, footerHeight); d->lyricView->setContentsMargins(0, titleBarHeight - 1, 0, footerHeight); contentLayout->addWidget(d->titlebar); // contentLayout->addWidget(d->titlebar); contentLayout->addWidget(d->importWidget); contentLayout->addWidget(d->musicList); contentLayout->addWidget(d->lyricView); contentLayout->addWidget(d->playlist); contentLayout->addWidget(d->footer); // auto *bodyShadow = new QGraphicsDropShadowEffect; // bodyShadow->setBlurRadius(20.0); // bodyShadow->setColor(QColor(0, 0, 0, 0.10 * 255)); // bodyShadow->setOffset(0, 5.0); // this->setGraphicsEffect(bodyShadow); d->footer->setFocus(); setMinimumSize(840, 640); resize(QSize(840, 640)); } MainWindow::~MainWindow() { } void MainWindow::initUI() { d->lyricView->initUI(); } void MainWindow::initMusiclist(PlaylistPtr allmusic, PlaylistPtr last) { initMenu(); if (allmusic.isNull() || 0 == allmusic->length()) { d->newSonglistAction->setDisabled(true); d->importWidget->show(); d->titlebarwidget->setSearchEnable(false); d->footer->enableControl(false); d->musicList->hide(); qWarning() << "no music in all music list" << allmusic; d->musicList->initData(allmusic); return; } if (last.isNull() || 0 == last->length()) { qDebug() << "init music with empty playlist:" << last; } d->importWidget->hide(); d->titlebarwidget->setSearchEnable(true); d->newSonglistAction->setDisabled(false); d->musicList->raise(); d->musicList->show(); d->musicList->initData(last); d->musicList->onMusiclistChanged(last); } void MainWindow::initPlaylist(QList playlists, PlaylistPtr last) { d->playlist->initData(playlists, last); } void MainWindow::initFooter(PlaylistPtr current, int mode) { emit d->footer->initData(current, mode); // d->musicList->hide(); // d->lyric->hide(); } void MainWindow::binding(Presenter *presenter) { connect(d->footer, &Footer::toggleLyricView, this, &MainWindow::toggleLyricView); connect(d->footer, &Footer::togglePlaylist, this, &MainWindow::togglePlaylist); connect(d->footer, &Footer::changeProgress, presenter, &Presenter::onChangeProgress); connect(d->footer, &Footer::locateMusic, presenter, &Presenter::locateMusic); connect(d->footer, &Footer::play, presenter, &Presenter::onSyncMusicPlay); connect(d->footer, &Footer::resume, presenter, &Presenter::onMusicResume); connect(d->footer, &Footer::pause, presenter, &Presenter::onMusicPause); connect(d->footer, &Footer::next, presenter, &Presenter::onMusicNext); connect(d->footer, &Footer::prev, presenter, &Presenter::onMusicPrev); connect(d->footer, &Footer::toggleFavourite, presenter, &Presenter::onToggleFavourite); connect(d->footer, &Footer::modeChanged, presenter, &Presenter::onPlayModeChanged); connect(d->footer, &Footer::volumeChanged, presenter, &Presenter::onVolumeChanged); connect(d->footer, &Footer::toggleMute, presenter, &Presenter::onToggleMute); connect(presenter, &Presenter::coverSearchFinished, d->footer, &Footer::onCoverChanged); connect(presenter, &Presenter::musicPlayed, d->footer, &Footer::onMusicPlayed); connect(presenter, &Presenter::musicPaused, d->footer, &Footer::onMusicPause); connect(presenter, &Presenter::musicStoped, d->footer, &Footer::onMusicStoped); connect(presenter, &Presenter::musicAdded, d->footer, &Footer::onMusicAdded); connect(presenter, &Presenter::musicListAdded, d->footer, &Footer::onMusicListAdded); connect(presenter, &Presenter::musicRemoved, d->footer, &Footer::onMusicRemoved); connect(presenter, &Presenter::progrossChanged, d->footer, &Footer::onProgressChanged); connect(presenter, &Presenter::volumeChanged, d->footer, &Footer::onVolumeChanged); connect(presenter, &Presenter::mutedChanged, d->footer, &Footer::onMutedChanged); connect(d->musicList, &MusicListWidget::updateMetaCodec, d->footer, &Footer::onUpdateMetaCodec); connect(d->musicList, &MusicListWidget::updateMetaCodec, d->lyricView, &LyricView::onUpdateMetaCodec); connect(presenter, &Presenter::musicListResorted, d->musicList, &MusicListWidget::onMusiclistChanged); connect(presenter, &Presenter::currentMusicListChanged, d->musicList, &MusicListWidget::onMusiclistChanged); connect(presenter, &Presenter::musicRemoved, d->musicList, &MusicListWidget::onMusicRemoved); connect(presenter, &Presenter::musicListAdded, d->musicList, &MusicListWidget::onMusicListAdded); connect(presenter, &Presenter::musicPlayed, d->musicList, &MusicListWidget::onMusicPlayed); connect(presenter, &Presenter::musicPaused, d->musicList, &MusicListWidget::onMusicPause); connect(presenter, &Presenter::musicStoped, d->musicList, &MusicListWidget::onMusicPause); connect(presenter, &Presenter::requestMusicListMenu, d->musicList, &MusicListWidget::onCustomContextMenuRequest); connect(d->musicList, &MusicListWidget::updateMetaCodec, presenter, &Presenter::onUpdateMetaCodec); connect(d->musicList, &MusicListWidget::playall, presenter, &Presenter::onPlayall); connect(d->musicList, &MusicListWidget::resort, presenter, &Presenter::onResort); connect(d->musicList, &MusicListWidget::playMedia, presenter, &Presenter::onSyncMusicPlay); connect(d->musicList, &MusicListWidget::requestCustomContextMenu, presenter, &Presenter::onRequestMusiclistMenu); connect(d->musicList, &MusicListWidget::addToPlaylist, presenter, &Presenter::onAddToPlaylist); connect(d->musicList, &MusicListWidget::musiclistRemove, presenter, &Presenter::onMusiclistRemove); connect(d->musicList, &MusicListWidget::musiclistDelete, presenter, &Presenter::onMusiclistDelete); connect(d->musicList, &MusicListWidget::importSelectFiles, presenter, &Presenter::requestImportPaths); connect(d->playlist, &PlaylistWidget::addPlaylist, presenter, &Presenter::onPlaylistAdd); connect(d->playlist, &PlaylistWidget::selectPlaylist, presenter, &Presenter::onCurrentPlaylistChanged); connect(d->playlist, &PlaylistWidget::playall, presenter, &Presenter::onPlayall); connect(presenter, &Presenter::currentMusicListChanged, d->playlist, &PlaylistWidget::onCurrentChanged); connect(presenter, &Presenter::playlistAdded, d->playlist, &PlaylistWidget::onPlaylistAdded); connect(presenter, &Presenter::musicPlayed, d->playlist, &PlaylistWidget::onMusicPlayed); connect(d->lyricView, &LyricView::toggleLyricView, this, &MainWindow::toggleLyricView); connect(d->lyricView, &LyricView::requestContextSearch, presenter, &Presenter::requestContextSearch); connect(d->lyricView, &LyricView::changeMetaCache, presenter, &Presenter::onChangeSearchMetaCache); connect(presenter, &Presenter::contextSearchFinished, d->lyricView, &LyricView::contextSearchFinished); connect(presenter, &Presenter::progrossChanged, d->lyricView, &LyricView::onProgressChanged); connect(presenter, &Presenter::musicPlayed, d->lyricView, &LyricView::onMusicPlayed); connect(presenter, &Presenter::lyricSearchFinished, d->lyricView, &LyricView::onLyricChanged); connect(presenter, &Presenter::coverSearchFinished, d->lyricView, &LyricView::onCoverChanged); connect(presenter, &Presenter::musicStoped, d->lyricView, &LyricView::onMusicStop); connect(d->playlist, &PlaylistWidget::hidePlaylist, this, [ = ]() { setPlaylistVisible(false); }); connect(presenter, &Presenter::notifyMusciError, this, [ = ](PlaylistPtr playlist, const MusicMeta & meta, int error) { DDialog warnDlg(this); warnDlg.setIcon(QIcon(":/common/image/dialog_warning.png")); warnDlg.setTextFormat(Qt::RichText); warnDlg.setTitle(tr("File invalid or does not exist, load failed!")); warnDlg.addButtons(QStringList() << tr("I got it")); if (0 == warnDlg.exec()) { emit d->footer->play(playlist, meta); } }); connect(presenter, &Presenter::musicError, this, [ = ](PlaylistPtr playlist, const MusicMeta & meta, int error) { d->musicList->onMusicError(playlist, meta, error); }); connect(presenter, &Presenter::locateMusic, this, [ = ](PlaylistPtr playlist, const MusicMeta & info) { d->musicList->onLocate(playlist, info); d->playlist->onCurrentChanged(playlist); showMusicListView(); }); connect(presenter, &Presenter::notifyAddToPlaylist, this, [ = ](PlaylistPtr playlist, const MusicMetaList & /*metalist*/) { auto icon = QPixmap(":/common/image/notify_success.png"); QFont font(this->font()); QFontMetrics fm(font); auto displayName = fm.elidedText(playlist->displayName(), Qt::ElideMiddle, 300); auto text = tr("Successfully added to \"%1\"").arg(displayName); showTips(icon, text); }); connect(presenter, &Presenter::currentMusicListChanged, this, [ = ](PlaylistPtr playlist) { d->musicList->onMusiclistChanged(playlist); d->playlist->onCurrentChanged(playlist); showMusicListView(); }); connect(presenter, &Presenter::playlistAdded, this, [ = ](PlaylistPtr playlist) { qDebug() << playlist->id(); setPlaylistVisible(true); }); connect(presenter, &Presenter::coverSearchFinished, this, [ = ](const MusicMeta &, const QByteArray & coverData) { if (coverData.length() < 32) { setCoverBackground(coverBackground()); this->update(); return; } QImage image = QImage::fromData(coverData); if (image.isNull()) { setCoverBackground(coverBackground()); this->update(); return; } image = WidgetHelper::cropRect(image, this->size()); setBackgroundImage(WidgetHelper::blurImage(image, 50)); this->update(); }); connect(presenter, &Presenter::musicStoped, this, [ = ](PlaylistPtr, const MusicMeta &) { setCoverBackground(coverBackground()); }); connect(presenter, &Presenter::currentMusicListChanged, this, [ = ]() { changeToMusicListView(false); }); connect(presenter, &Presenter::requestImportFiles, this, &MainWindow::onSelectImportFiles); connect(presenter, &Presenter::meidaFilesImported, this, [ = ](PlaylistPtr playlist, MusicMetaList metalist) { DUtil::TimerSingleShot(1 * 800, [this, playlist, metalist ]() { this->showMusicListView(); }); }); connect(presenter, &Presenter::metaLibraryClean, this, [ = ]() { showImportView(); }); connect(this, &MainWindow::importSelectFiles, presenter, &Presenter::onImportFiles); connect(this, &MainWindow::addPlaylist, presenter, &Presenter::onPlaylistAdd); } QString MainWindow::viewname() const { return d->viewname; } void MainWindow::mousePressEvent(QMouseEvent *event) { ThinWindow::mousePressEvent(event); } bool MainWindow::eventFilter(QObject *obj, QEvent *e) { if (e->type() == QEvent::KeyPress) { QKeyEvent *ke = static_cast(e); auto keyModifiers = ke->modifiers(); auto key = static_cast(ke->key()); QStringList sclist; sclist << "shortcuts.all.next" << "shortcuts.all.play_pause" << "shortcuts.all.previous" << "shortcuts.all.volume_down" << "shortcuts.all.volume_up"; for (auto optkey : sclist) { auto shortcut = DSettings::instance()->option(optkey).toStringList(); auto modifiersstr = shortcut.value(0); auto scmodifiers = static_cast(modifiersstr.toInt()); auto keystr = shortcut.value(1); auto sckey = static_cast(keystr.toInt()); if (scmodifiers == keyModifiers && key == sckey && !ke->isAutoRepeat()) { qDebug() << "match " << optkey << ke->count() << ke->isAutoRepeat(); MusicApp::instance()->triggerShortcutAction(optkey); return true; } } } if (e->type() == QEvent::MouseButtonPress) { QMouseEvent *me = static_cast(e); // qDebug() << obj << me->pos(); if (obj->objectName() == this->objectName() || this->objectName() + "Window" == obj->objectName()) { // qDebug() << me->pos() << QCursor::pos(); QPoint mousePos = me->pos(); auto geometry = d->playlist->geometry().marginsAdded(QMargins(0, 0, 40, 40)); // qDebug() << geometry << mousePos; if (!geometry.contains(mousePos)) { qDebug() << "hide playlist" << me->pos() << QCursor::pos() << obj; DUtil::TimerSingleShot(50, [this]() { setPlaylistVisible(false); }); } } } if (e->type() == QEvent::MouseButtonPress) { QMouseEvent *me = static_cast(e); // qDebug() << obj << me->pos(); if (obj->objectName() == this->objectName() || this->objectName() + "Window" == obj->objectName()) { QPoint mousePos = me->pos(); qDebug() << "lyricView checkHiddenSearch" << me->pos() << QCursor::pos() << obj; d->lyricView->checkHiddenSearch(mousePos); } } if (e->type() == QEvent::Close) { if (obj->objectName() == this->objectName()) { exit(0); } } return qApp->eventFilter(obj, e); } void MainWindow::resizeEvent(QResizeEvent *e) { ThinWindow::resizeEvent(e); QSize newSize = ThinWindow::size(); d->titlebar->raise(); d->titlebar->move(0, 1); d->titlebarwidget->setFixedSize(newSize.width() - d->titlebar->buttonAreaWidth() - 10, titleBarHeight); d->lyricView->resize(newSize); d->musicList->setFixedSize(newSize); d->importWidget->setFixedSize(newSize); d->playlist->setFixedSize(220, newSize.height() - footerHeight - titleBarHeight); d->footer->resize(newSize.width(), footerHeight); d->footer->raise(); d->footer->show(); d->footer->move(0, newSize.height() - footerHeight); if (d->tips) { d->tips->hide(); } } void MainWindow::paintEvent(QPaintEvent *e) { // d->titlebar->hide(); ThinWindow::paintEvent(e); } void MainWindow::onCurrentPlaylistChanged(PlaylistPtr playlist) { if (playlist->id() != SearchMusicListID) { d->titlebarwidget->exitSearch(); } } void MainWindow::toggleLyricView() { if (d->lyricView->isVisible()) { showMusicListView(); } else { showLyricView(); } } void MainWindow::togglePlaylist() { setPlaylistVisible(!d->playlist->isVisible()); } void MainWindow::showLyricView() { auto current = d->currentWidget ? d->currentWidget : d->musicList; // d->lyricView->resize(current->size()); WidgetHelper::slideBottom2TopWidget( current, d->lyricView, s_AnimationDelay); this->disableControl(); setPlaylistVisible(false); d->currentWidget = d->lyricView; d->titlebar->raise(); d->footer->raise(); updateViewname(s_PropertyViewnameLyric); } void MainWindow::showMusicListView() { changeToMusicListView(false); updateViewname(""); } void MainWindow::showImportView() { if (d->importWidget->isVisible()) { d->importWidget->showImportHint(); return; } setPlaylistVisible(false); auto current = d->currentWidget ? d->currentWidget : d->musicList; d->importWidget->showImportHint(); d->importWidget->setFixedSize(current->size()); qDebug() << "showImportView" << current << d->importWidget; WidgetHelper::slideRight2LeftWidget( current, d->importWidget, s_AnimationDelay); d->footer->enableControl(false); d->currentWidget = d->importWidget; d->titlebar->raise(); d->footer->raise(); d->titlebarwidget->setSearchEnable(false); d->newSonglistAction->setDisabled(true); updateViewname(""); } void MainWindow::showTips(QPixmap icon, QString text) { if (d->tips) { d->tips->hide(); d->tips->deleteLater(); } d->tips = new Tip(icon, text, this); auto center = mapToGlobal(QPoint(QWidget::rect().center())); center.setY(center.y() + height() / 2 - d->footer->height() - 40 - 36); center = d->tips->mapFromGlobal(center); center = d->tips->mapToParent(center); d->tips->pop(center); } void MainWindow::setPlaylistVisible(bool visible) { if (d->playlist->isVisible() == visible) { if (visible) { d->playlist->setFocus(); d->playlist->show(); d->playlist->raise(); } return; } double factor = 0.6; QRect start(this->width(), titleBarHeight, d->playlist->width(), d->playlist->height()); QRect end(this->width() - d->playlist->width() - this->shadowWidth() * 2, titleBarHeight, d->playlist->width(), d->playlist->height()); if (!visible) { WidgetHelper::slideEdgeWidget(d->playlist, end, start, s_AnimationDelay * factor, true); d->footer->setFocus(); } else { d->playlist->setFocus(); WidgetHelper::slideEdgeWidget(d->playlist, start, end, s_AnimationDelay * factor); d->playlist->raise(); } this->disableControl(s_AnimationDelay * factor); d->titlebar->raise(); d->footer->raise(); } void MainWindow::setViewname(QString viewname) { if (d->viewname == viewname) { return; } d->viewname = viewname; emit viewnameChanged(viewname); } void MainWindow::changeToMusicListView(bool keepPlaylist) { auto current = d->currentWidget ? d->currentWidget : d->importWidget; qDebug() << "changeToMusicListView" << current << d->musicList << keepPlaylist; if (d->musicList->isVisible()) { d->musicList->raise(); d->titlebar->raise(); d->footer->raise(); setPlaylistVisible(keepPlaylist); return; } d->musicList->setFixedSize(current->size()); WidgetHelper::slideTop2BottomWidget( current, d->musicList, s_AnimationDelay); this->update(); this->disableControl(); d->currentWidget = d->musicList; setPlaylistVisible(keepPlaylist); d->titlebar->raise(); d->footer->raise(); d->titlebarwidget->setSearchEnable(true); d->newSonglistAction->setDisabled(false); } void MainWindow::initMenu() { } void MainWindow::disableControl(int delay) { d->footer->enableControl(false); QTimer::singleShot(s_AnimationDelay, this, [ = ]() { d->footer->enableControl(true); }); } void MainWindow::updateViewname(const QString &vm) { DUtil::TimerSingleShot(s_AnimationDelay / 2, [this, vm]() { this->setViewname(vm); d->titlebar->setViewname(vm); d->titlebarwidget->setViewname(vm); }); } deepin-music-6.0.1.54/src/music-player/view/mainwindow.h000664 000000 000000 00000004757 13703317554 023034 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include "../core/playlist.h" #include "widget/thinwindow.h" class Presenter; class MusicListWidget; class MainWindowPrivate; class MainWindow : public ThinWindow { Q_OBJECT Q_PROPERTY(QString coverBackground READ coverBackground WRITE setCoverBackground) Q_PROPERTY(QString viewname READ viewname WRITE setViewname NOTIFY viewnameChanged) public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void initUI(); void initMusiclist(PlaylistPtr allmusic, PlaylistPtr last); void initPlaylist(QList playlists, PlaylistPtr last); void initFooter(PlaylistPtr current, int mode); void binding(Presenter *presenter); QString viewname() const; signals: void addPlaylist(bool editmode); void importSelectFiles(const QStringList &filelist); void viewnameChanged(QString viewname); public slots: void onSelectImportFiles(); void onCurrentPlaylistChanged(PlaylistPtr playlist); void toggleLyricView(); void togglePlaylist(); void showLyricView(); void showMusicListView(); void showImportView(); void showTips(QPixmap icon, QString text); void setPlaylistVisible(bool visible); void setViewname(QString viewname); protected: virtual bool eventFilter(QObject *obj, QEvent *e) Q_DECL_OVERRIDE; virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; virtual void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE; virtual void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE; private: void changeToMusicListView(bool keepPlaylist); void disableControl(int delay = 350); void updateViewname(const QString &vm); QScopedPointer d; }; deepin-music-6.0.1.54/src/music-player/view/musiclistdatawidget.cpp000664 000000 000000 00000226004 13703317554 025254 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistdatawidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "util/pinyinsearch.h" #include "widget/playlistview.h" #include "widget/musiclistdataview.h" #include "widget/ddropdown.h" #include "widget/musicimagebutton.h" #include "util/pinyinsearch.h" #include "widget/playlistview.h" #include "widget/musiclistdataview.h" #include "widget/ddropdown.h" #include "widget/musicimagebutton.h" #include DWIDGET_USE_NAMESPACE class MusicListDataWidgetPrivate { public: MusicListDataWidgetPrivate(MusicListDataWidget *parent) : q_ptr(parent) {} void initData(PlaylistPtr playlist, bool selectFlag = false, QString searchStr = ""); int updateInfo(); void initConntion(); void showEmptyHits(); DLabel *emptyHits = nullptr; DLabel *emptySearchHits = nullptr; ActionBar *actionBar = nullptr; DLabel *titleLabel = nullptr; DDropdown *albumDropdown = nullptr; DDropdown *artistDropdown = nullptr; DDropdown *musicDropdown = nullptr; DDropdown *albumSearchDropdown = nullptr; DDropdown *artistSearchDropdown = nullptr; DDropdown *musicSearchDropdown = nullptr; DPushButton *btPlayAll = nullptr; DLabel *infoLabel = nullptr; DToolButton *btIconMode = nullptr; DToolButton *btlistMode = nullptr; MusicListDataView *albumListView = nullptr; MusicListDataView *artistListView = nullptr; PlayListView *musicListView = nullptr; PlayListView *songListView = nullptr; MusicListDataView *singerListView = nullptr; MusicListDataView *albListView = nullptr; DTabWidget *tabWidget = nullptr; QAction *customAction = nullptr; PlaylistPtr curPlaylist = nullptr; PlaylistPtr selectPlaylist = nullptr; bool updateFlag = false; MusicListDataWidget *q_ptr; Q_DECLARE_PUBLIC(MusicListDataWidget) }; int MusicListDataWidgetPrivate::updateInfo() { if (updateFlag == false) { if (curPlaylist == nullptr) return 0; PlaylistPtr playlist = curPlaylist; QString searchStr = playlist->searchStr(); bool chineseFlag = false; for (auto ch : searchStr) { if (DMusic::PinyinSearch::isChinese(ch)) { chineseFlag = true; break; } } int allCount = 0; QFontMetrics titleFm(titleLabel->font()); auto text = titleFm.elidedText(playlist->displayName(), Qt::ElideRight, 300); titleLabel->setText(text); titleLabel->setToolTip(playlist->displayName()); if (playlist->id() == AlbumMusicListID) { PlayMusicTypePtrList playMusicTypePtrList = playlist->playMusicTypePtrList(); int musicCount = 0; int musicListCount = 0; for (auto action : playMusicTypePtrList) { if (searchStr.isEmpty()) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } else { if (chineseFlag) { if (action->name.contains(searchStr, Qt::CaseInsensitive)) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } } else { if (searchStr.size() == 1) { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } } else { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } } } } } QString infoStr; if (musicCount == 0) { infoStr = QString(" ") + MusicListDataWidget::tr("No songs"); } else if (musicCount == 1) { infoStr = QString(" ") + MusicListDataWidget::tr("1 album - 1 song"); } else { infoStr = QString(" ") + MusicListDataWidget::tr("%1 album - %2 songs").arg(musicListCount).arg(musicCount); if (musicListCount == 1) { infoStr = QString(" ") + MusicListDataWidget::tr("%1 album - %2 songs").arg(musicListCount).arg(musicCount); } else { infoStr = QString(" ") + MusicListDataWidget::tr("%1 albums - %2 songs").arg(musicListCount).arg(musicCount); } } allCount = musicListCount; infoLabel->setText(infoStr); } else if (playlist->id() == ArtistMusicListID) { PlayMusicTypePtrList playMusicTypePtrList = playlist->playMusicTypePtrList(); int musicCount = 0; int musicListCount = 0; for (auto action : playMusicTypePtrList) { if (searchStr.isEmpty()) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } else { if (chineseFlag) { if (action->name.contains(searchStr, Qt::CaseInsensitive)) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } } else { if (searchStr.size() == 1) { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } } else { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } } } } } QString infoStr; if (musicCount == 0) { infoStr = QString(" ") + MusicListDataWidget::tr("No songs"); } else if (musicCount == 1) { infoStr = QString(" ") + MusicListDataWidget::tr("1 artist - 1 song"); } else { if (musicListCount == 1) { infoStr = QString(" ") + MusicListDataWidget::tr("%1 artist - %2 songs").arg(musicListCount).arg(musicCount); } else { infoStr = QString(" ") + MusicListDataWidget::tr("%1 artists - %2 songs").arg(musicListCount).arg(musicCount); } } allCount = musicListCount; infoLabel->setText(infoStr); } else { QString infoStr; int musicCount = 0; for (auto action : playlist->allmusic()) { if (searchStr.isEmpty()) { musicCount ++; } else { if (chineseFlag) { if (action->title.contains(searchStr, Qt::CaseInsensitive)) { musicCount++; } } else { if (searchStr.size() == 1) { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->title); if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { musicCount++; } } else { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->title); if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { musicCount++; } } } } } if (musicCount == 0) { infoStr = QString(" ") + MusicListDataWidget::tr("No songs"); } else if (musicCount == 1) { infoStr = QString(" ") + MusicListDataWidget::tr("1 song"); } else { infoStr = QString(" ") + MusicListDataWidget::tr("%1 songs").arg(musicCount); } allCount = musicCount; infoLabel->setText(infoStr); } return allCount; } return 0; } void MusicListDataWidgetPrivate::initData(PlaylistPtr playlist, bool selectFlag, QString searchStr) { //Q_Q(MusicListDataWidget); if (searchStr == "noSearchResults") { actionBar->hide(); albumListView->hide(); artistListView->hide(); musicListView->hide(); tabWidget->hide(); emptyHits->show(); return; } else { emptyHits->hide(); actionBar->show(); } PlaylistPtr updatePlaylist = nullptr; if (playlist == nullptr) { return; } curPlaylist = playlist; if (updateFlag == true) { updatePlaylist = playlist; } auto preSearchStr = playlist->searchStr(); playlist->setSearchStr(searchStr); int allCount = updateInfo(); //DDropdown *t_curDropdown = nullptr; if (playlist->id() == AlbumMusicListID) { updateFlag = false; artistListView->clearSelection(); musicListView->clearSelection(); selectPlaylist = playlist; albumDropdown->show(); artistDropdown->hide(); musicDropdown->hide(); albumSearchDropdown->hide(); artistSearchDropdown->hide(); musicSearchDropdown->hide(); albumListView->show(); artistListView->hide(); musicListView->hide(); tabWidget->hide(); //t_curDropdown = albumDropdown; if (albumListView->viewMode() == QListView::IconMode) { btIconMode->setChecked(true); btlistMode->setChecked(false); } else { btIconMode->setChecked(false); btlistMode->setChecked(true); } if (!selectFlag || albumListView->listSize() != allCount || preSearchStr != searchStr) albumListView->onMusiclistChanged(playlist); } else if (playlist->id() == ArtistMusicListID) { updateFlag = false; albumListView->clearSelection(); musicListView->clearSelection(); selectPlaylist = playlist; albumDropdown->hide(); artistDropdown->show(); musicDropdown->hide(); albumSearchDropdown->hide(); artistSearchDropdown->hide(); musicSearchDropdown->hide(); albumListView->hide(); artistListView->show(); musicListView->hide(); tabWidget->hide(); //t_curDropdown = artistDropdown; if (artistListView->viewMode() == QListView::IconMode) { btIconMode->setChecked(true); btlistMode->setChecked(false); } else { btIconMode->setChecked(false); btlistMode->setChecked(true); } if (!selectFlag || artistListView->listSize() != allCount || preSearchStr != searchStr) { artistListView->onMusiclistChanged(playlist); } } else if (playlist->id() == MusicResultListID || playlist->id() == ArtistResultListID || playlist->id() == AlbumResultListID) { albumDropdown->hide(); artistDropdown->hide(); musicDropdown->hide(); musicSearchDropdown->show(); albumListView->hide(); artistListView->hide(); musicListView->hide(); tabWidget->show(); if (updateFlag == true) { if (playlist->id() == ArtistResultListID || playlist->id() == AlbumResultListID) { musicSearchDropdown->hide(); } if (updatePlaylist->id() == MusicResultListID) { if (songListView->viewMode() == QListView::IconMode) { btIconMode->setChecked(true); btlistMode->setChecked(false); } else { btIconMode->setChecked(false); btlistMode->setChecked(true); } songListView->onMusiclistChanged(updatePlaylist); } else if (updatePlaylist->id() == ArtistResultListID) { if (singerListView->viewMode() == QListView::IconMode) { btIconMode->setChecked(true); btlistMode->setChecked(false); } else { btIconMode->setChecked(false); btlistMode->setChecked(true); } singerListView->onMusiclistChanged(updatePlaylist); } else if (updatePlaylist->id() == AlbumResultListID) { if (albListView->viewMode() == QListView::IconMode) { btIconMode->setChecked(true); btlistMode->setChecked(false); } else { btIconMode->setChecked(false); btlistMode->setChecked(true); } albListView->onMusiclistChanged(updatePlaylist); } } titleLabel->setText(MusicListDataWidget::tr("Search Results")); } else { updateFlag = false; albumListView->clearSelection(); artistListView->clearSelection(); selectPlaylist = playlist; albumDropdown->hide(); artistDropdown->hide(); musicDropdown->show(); albumSearchDropdown->hide(); artistSearchDropdown->hide(); musicSearchDropdown->hide(); albumListView->hide(); artistListView->hide(); musicListView->show(); tabWidget->hide(); //t_curDropdown = musicDropdown; if (musicListView->viewMode() != (playlist->viewMode())) { musicListView->setViewModeFlag(static_cast(playlist->viewMode())); } if (musicListView->viewMode() == QListView::IconMode) { btIconMode->setChecked(true); btlistMode->setChecked(false); } else { btIconMode->setChecked(false); btlistMode->setChecked(true); } musicListView->onMusiclistChanged(playlist); } } void MusicListDataWidgetPrivate::initConntion() { Q_Q(MusicListDataWidget); q->connect(albumDropdown, &DDropdown::triggered, q, [ = ](QAction * action) { albumDropdown->setCurrentAction(action); int t_sortType = action->data().toInt() == 0 ? 1 : 0; albumListView->playlist()->changePlayMusicTypeOrderType(); albumListView->playlist()->sortPlayMusicTypePtrListData(t_sortType); Q_EMIT q->resort(albumListView->playlist(), action->data().value()); }); q->connect(artistDropdown, &DDropdown::triggered, q, [ = ](QAction * action) { artistDropdown->setCurrentAction(action); int t_sortType = action->data().toInt() == 0 ? 1 : 0; artistListView->playlist()->changePlayMusicTypeOrderType(); artistListView->playlist()->sortPlayMusicTypePtrListData(t_sortType); Q_EMIT q->resort(artistListView->playlist(), action->data().value()); }); q->connect(musicDropdown, &DDropdown::triggered, q, [ = ](QAction * action) { musicDropdown->setCurrentAction(action); Q_EMIT q->resort(musicListView->playlist(), action->data().value()); }); /*----------------albumSearchDropdown----------------*/ q->connect(albumSearchDropdown, &DDropdown::triggered, q, [ = ](QAction * action) { albumSearchDropdown->setCurrentAction(action); int t_sortType = action->data().toInt() == 0 ? 1 : 0; albListView->playlist()->changePlayMusicTypeOrderType(); albListView->playlist()->sortPlayMusicTypePtrListData(t_sortType); Q_EMIT q->resort(albListView->playlist(), action->data().value()); }); q->connect(artistSearchDropdown, &DDropdown::triggered, q, [ = ](QAction * action) { artistSearchDropdown->setCurrentAction(action); int t_sortType = action->data().toInt() == 0 ? 1 : 0; singerListView->playlist()->changePlayMusicTypeOrderType(); singerListView->playlist()->sortPlayMusicTypePtrListData(t_sortType); Q_EMIT q->resort(singerListView->playlist(), action->data().value()); }); q->connect(musicSearchDropdown, &DDropdown::triggered, q, [ = ](QAction * action) { musicSearchDropdown->setCurrentAction(action); Q_EMIT q->resort(songListView->playlist(), action->data().value()); }); /*-------------btPlayAll--------------------*/ q->connect(btPlayAll, &DPushButton::clicked, q, [ = ](bool) { if (albumListView->isVisible()) { PlaylistPtr curPlayList = albumListView->playlist(); if (curPlayList) { curPlayList->playMusicTypeToMeta(); curPlayList->play(curPlayList->first()); Q_EMIT q->playall(curPlayList); } } else if (artistListView->isVisible()) { PlaylistPtr curPlayList = artistListView->playlist(); if (curPlayList) { curPlayList->playMusicTypeToMeta(); curPlayList->play(curPlayList->first()); Q_EMIT q->playall(curPlayList); } } else if (songListView->isVisible()) { if (songListView->playlist()) { PlaylistPtr curPlayList = songListView->playlist(); curPlayList->play(curPlayList->first()); Q_EMIT q->playall(curPlayList); } } else if (singerListView->isVisible()) { if (singerListView->playlist()) { PlaylistPtr curPlayList = singerListView->playlist(); curPlayList->playMusicTypeToMeta(); curPlayList->play(curPlayList->first()); Q_EMIT q->playall(curPlayList); } } else if (albListView->isVisible()) { if (albListView->playlist()) { PlaylistPtr curPlayList = albListView->playlist(); curPlayList->playMusicTypeToMeta(); curPlayList->play(curPlayList->first()); Q_EMIT q->playall(curPlayList); } } else { if (musicListView->playlist()) { PlaylistPtr curPlayList = musicListView->playlist(); curPlayList->play(curPlayList->first()); Q_EMIT q->playall(curPlayList); } } }); /*-----------------albumListView-----------------------*/ q->connect(albumListView, &MusicListDataView::requestCustomContextMenu, q, [ = ](const QPoint & pos) { Q_EMIT q->requestCustomContextMenu(pos, 2); }); q->connect(albumListView, &MusicListDataView::playMedia, q, [ = ](const MetaPtr meta) { PlaylistPtr curPlayList = albumListView->playlist(); curPlayList->play(meta); Q_EMIT q->playMedia(albumListView->playlist(), meta); }); q->connect(albumListView, &MusicListDataView::resume, q, [ = ](const MetaPtr meta) { PlaylistPtr curPlayList = albumListView->playlist(); Q_EMIT q->resume(albumListView->playlist(), meta); }); q->connect(albumListView, &MusicListDataView::pause, q, [ = ](PlaylistPtr playlist, const MetaPtr meta) { Q_EMIT q->pause(playlist, meta); }); q->connect(albumListView, &MusicListDataView::addToPlaylist, q, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { Q_EMIT q->addToPlaylist(playlist, metalist); }); q->connect(albumListView, &MusicListDataView::musiclistRemove, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistRemove(albumListView->playlist(), metalist); }); q->connect(albumListView, &MusicListDataView::musiclistDelete, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistDelete(albumListView->playlist(), metalist); }); q->connect(albumListView, &MusicListDataView::modeChanged, q, [ = ](int mode) { Q_EMIT q->modeChanged(mode); }); q->connect(albumListView, &MusicListDataView::addMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->addMetasFavourite(metalist); }); q->connect(albumListView, &MusicListDataView::removeMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->removeMetasFavourite(metalist); }); /*-----------------albListView-----------------------*/ q->connect(albListView, &MusicListDataView::requestCustomContextMenu, q, [ = ](const QPoint & pos) { Q_EMIT q->requestCustomContextMenu(pos, 5); }); q->connect(albListView, &MusicListDataView::playMedia, q, [ = ](const MetaPtr meta) { PlaylistPtr curPlayList = albListView->playlist(); curPlayList->play(meta); Q_EMIT q->playMedia(albListView->playlist(), meta); }); q->connect(albListView, &MusicListDataView::resume, q, [ = ](const MetaPtr meta) { PlaylistPtr curPlayList = albListView->playlist(); Q_EMIT q->resume(albListView->playlist(), meta); }); q->connect(albListView, &MusicListDataView::pause, q, [ = ](PlaylistPtr playlist, const MetaPtr meta) { Q_EMIT q->pause(playlist, meta); }); q->connect(albListView, &MusicListDataView::addToPlaylist, q, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { Q_EMIT q->addToPlaylist(playlist, metalist); }); q->connect(albListView, &MusicListDataView::musiclistRemove, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistRemove(albListView->playlist(), metalist); }); q->connect(albListView, &MusicListDataView::musiclistDelete, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistDelete(albListView->playlist(), metalist); }); q->connect(albListView, &MusicListDataView::modeChanged, q, [ = ](int mode) { Q_EMIT q->modeChanged(mode); }); q->connect(albListView, &MusicListDataView::addMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->addMetasFavourite(metalist); }); q->connect(albListView, &MusicListDataView::removeMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->removeMetasFavourite(metalist); }); /*------------------artistListView---------------------------*/ q->connect(artistListView, &MusicListDataView::requestCustomContextMenu, q, [ = ](const QPoint & pos) { Q_EMIT q->requestCustomContextMenu(pos, 3); }); q->connect(artistListView, &MusicListDataView::playMedia, q, [ = ](const MetaPtr meta) { PlaylistPtr curPlayList = artistListView->playlist(); curPlayList->play(meta); Q_EMIT q->playMedia(artistListView->playlist(), meta); }); q->connect(artistListView, &MusicListDataView::resume, q, [ = ](const MetaPtr meta) { PlaylistPtr curPlayList = artistListView->playlist(); Q_EMIT q->resume(artistListView->playlist(), meta); }); q->connect(artistListView, &MusicListDataView::pause, q, [ = ](PlaylistPtr playlist, const MetaPtr meta) { Q_EMIT q->pause(playlist, meta); }); q->connect(artistListView, &MusicListDataView::addToPlaylist, q, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { Q_EMIT q->addToPlaylist(playlist, metalist); }); q->connect(artistListView, &MusicListDataView::musiclistRemove, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistRemove(artistListView->playlist(), metalist); }); q->connect(artistListView, &MusicListDataView::musiclistDelete, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistDelete(artistListView->playlist(), metalist); }); q->connect(artistListView, &MusicListDataView::modeChanged, q, [ = ](int mode) { Q_EMIT q->modeChanged(mode); }); q->connect(artistListView, &MusicListDataView::addMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->addMetasFavourite(metalist); }); q->connect(artistListView, &MusicListDataView::removeMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->removeMetasFavourite(metalist); }); /*------------------singerListView---------------------------*/ q->connect(singerListView, &MusicListDataView::requestCustomContextMenu, q, [ = ](const QPoint & pos) { Q_EMIT q->requestCustomContextMenu(pos, 6); }); q->connect(singerListView, &MusicListDataView::playMedia, q, [ = ](const MetaPtr meta) { PlaylistPtr curPlayList = singerListView->playlist(); curPlayList->play(meta); Q_EMIT q->playMedia(singerListView->playlist(), meta); }); q->connect(singerListView, &MusicListDataView::resume, q, [ = ](const MetaPtr meta) { PlaylistPtr curPlayList = singerListView->playlist(); Q_EMIT q->resume(singerListView->playlist(), meta); }); q->connect(singerListView, &MusicListDataView::pause, q, [ = ](PlaylistPtr playlist, const MetaPtr meta) { Q_EMIT q->pause(playlist, meta); }); q->connect(singerListView, &MusicListDataView::addToPlaylist, q, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { Q_EMIT q->addToPlaylist(playlist, metalist); }); q->connect(singerListView, &MusicListDataView::musiclistRemove, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistRemove(singerListView->playlist(), metalist); }); q->connect(singerListView, &MusicListDataView::musiclistDelete, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistDelete(singerListView->playlist(), metalist); }); q->connect(singerListView, &MusicListDataView::modeChanged, q, [ = ](int mode) { Q_EMIT q->modeChanged(mode); }); q->connect(singerListView, &MusicListDataView::addMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->addMetasFavourite(metalist); }); q->connect(singerListView, &MusicListDataView::removeMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->removeMetasFavourite(metalist); }); /*-----------sing tabBarClicked--------------*/ q->connect(tabWidget, &DTabWidget::tabBarClicked, q, &MusicListDataWidget::resultTabwidget); q->connect(musicListView, &PlayListView::pause, q, [ = ](const MetaPtr meta) { Q_EMIT q->pause(musicListView->playlist(), meta); }); q->connect(songListView, &PlayListView::pause, q, [ = ](const MetaPtr meta) { Q_EMIT q->pause(songListView->playlist(), meta); }); /*-----------musicListView right click menu------*/ q->connect(musicListView, &PlayListView::playMedia, q, [ = ](const MetaPtr meta) { PlaylistPtr curPlayList = musicListView->playlist(); curPlayList->play(meta); Q_EMIT q->playMedia(musicListView->playlist(), meta); }); q->connect(musicListView, &PlayListView::resume, q, [ = ](const MetaPtr meta) { PlaylistPtr curPlayList = musicListView->playlist(); Q_EMIT q->resume(musicListView->playlist(), meta); }); q->connect(musicListView, &PlayListView::pause, q, [ = ](const MetaPtr meta) { Q_EMIT q->pause(musicListView->playlist(), meta); }); q->connect(musicListView, &PlayListView::requestCustomContextMenu, q, [ = ](const QPoint & pos) { Q_EMIT q->requestCustomContextMenu(pos, 1); }); q->connect(musicListView, &PlayListView::addToPlaylist, q, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { Q_EMIT q->addToPlaylist(playlist, metalist); }); q->connect(musicListView, &PlayListView::removeMusicList, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistRemove(musicListView->playlist(), metalist); }); q->connect(musicListView, &PlayListView::deleteMusicList, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistDelete(musicListView->playlist(), metalist); }); q->connect(musicListView, &PlayListView::showInfoDialog, q, [ = ](const MetaPtr meta) { Q_EMIT q->showInfoDialog(meta); }); q->connect(musicListView, &PlayListView::updateMetaCodec, q, [ = ](const QString & preTitle, const QString & preArtist, const QString & preAlbum, const MetaPtr meta) { Q_EMIT q->updateMetaCodec(preTitle, preArtist, preAlbum, meta); }); q->connect(musicListView, &PlayListView::addMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->addMetasFavourite(metalist); }); q->connect(musicListView, &PlayListView::removeMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->removeMetasFavourite(metalist); }); q->connect(btIconMode, &DToolButton::clicked, q, [ = ](bool) { if (albumListView->isVisible()) { albumListView->setViewModeFlag(QListView::IconMode); } else if (artistListView->isVisible()) { artistListView->setViewModeFlag(QListView::IconMode); } else if (albListView->isVisible()) { albListView->setViewModeFlag(QListView::IconMode); } else if (singerListView->isVisible()) { singerListView->setViewModeFlag(QListView::IconMode); } else if (songListView->isVisible()) { songListView->setViewModeFlag(QListView::IconMode); } else { musicListView->playlist()->setViewMode(1); musicListView->setViewModeFlag(QListView::IconMode); } btIconMode->setChecked(true); btlistMode->setChecked(false); }); q->connect(btlistMode, &DToolButton::clicked, q, [ = ](bool) { if (albumListView->isVisible()) { albumListView->setViewModeFlag(QListView::ListMode); } else if (artistListView->isVisible()) { artistListView->setViewModeFlag(QListView::ListMode); } else { musicListView->playlist()->setViewMode(0); musicListView->setViewModeFlag(QListView::ListMode); } if (albListView->isVisible()) { albListView->setViewModeFlag(QListView::ListMode); } else if (singerListView->isVisible()) { singerListView->setViewModeFlag(QListView::ListMode); } else if (songListView->isVisible()) { songListView->setViewModeFlag(QListView::ListMode); } btIconMode->setChecked(false); btlistMode->setChecked(true); }); /*-----------songListView right click menu------*/ q->connect(songListView, &PlayListView::playMedia, q, [ = ](const MetaPtr meta) { PlaylistPtr curPlayList = songListView->playlist(); curPlayList->play(meta); Q_EMIT q->playMedia(songListView->playlist(), meta); }); q->connect(songListView, &PlayListView::resume, q, [ = ](const MetaPtr meta) { PlaylistPtr curPlayList = songListView->playlist(); Q_EMIT q->resume(songListView->playlist(), meta); }); q->connect(songListView, &PlayListView::pause, q, [ = ](const MetaPtr meta) { Q_EMIT q->pause(songListView->playlist(), meta); }); q->connect(songListView, &PlayListView::requestCustomContextMenu, q, [ = ](const QPoint & pos) { Q_EMIT q->requestCustomContextMenu(pos, 4); }); q->connect(songListView, &PlayListView::addToPlaylist, q, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { Q_EMIT q->addToPlaylist(playlist, metalist); }); q->connect(songListView, &PlayListView::removeMusicList, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistRemove(songListView->playlist(), metalist); }); q->connect(songListView, &PlayListView::deleteMusicList, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistDelete(songListView->playlist(), metalist); }); q->connect(songListView, &PlayListView::showInfoDialog, q, [ = ](const MetaPtr meta) { Q_EMIT q->showInfoDialog(meta); }); q->connect(songListView, &PlayListView::updateMetaCodec, q, [ = ](const QString & preTitle, const QString & preArtist, const QString & preAlbum, const MetaPtr meta) { Q_EMIT q->updateMetaCodec(preTitle, preArtist, preAlbum, meta); }); q->connect(songListView, &PlayListView::addMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->addMetasFavourite(metalist); }); q->connect(songListView, &PlayListView::removeMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->removeMetasFavourite(metalist); }); q->connect(btIconMode, &DToolButton::clicked, q, [ = ](bool) { if (albumListView->isVisible()) { albumListView->setViewModeFlag(QListView::IconMode); } else if (artistListView->isVisible()) { artistListView->setViewModeFlag(QListView::IconMode); } else { if (songListView->playlist() == nullptr) { return; } songListView->playlist()->setViewMode(1); songListView->setViewModeFlag(QListView::IconMode); } btIconMode->setChecked(true); btlistMode->setChecked(false); }); q->connect(btlistMode, &DToolButton::clicked, q, [ = ](bool) { if (albumListView->isVisible()) { albumListView->setViewModeFlag(QListView::ListMode); } else if (artistListView->isVisible()) { artistListView->setViewModeFlag(QListView::ListMode); } else { if (songListView->playlist() == nullptr) { return; } songListView->playlist()->setViewMode(0); songListView->setViewModeFlag(QListView::ListMode); } btIconMode->setChecked(false); btlistMode->setChecked(true); }); } void MusicListDataWidgetPrivate::showEmptyHits() { if (curPlaylist.isNull() || curPlaylist->searchStr().isEmpty()) { actionBar->setVisible(true); emptyHits->setVisible(false); emptySearchHits->setVisible(false); return; } if (!curPlaylist.isNull() && curPlaylist->id() == AlbumMusicListID) { auto t_rowCount = albumListView->rowCount(); auto playlist = albumListView->playlist(); if (playlist->searchStr().isEmpty()) { emptyHits->setText(MusicListDataWidget::tr("No songs")); } else { emptyHits->setText(MusicListDataWidget::tr("No search results")); } bool empty = t_rowCount == 0 ? true : false; actionBar->setVisible(!empty); albumListView->setVisible(!empty); artistListView->setVisible(false); musicListView->setVisible(false); emptyHits->setVisible(empty); emptySearchHits->setVisible(empty && !playlist->searchStr().isEmpty()); } else if (!curPlaylist.isNull() && curPlaylist->id() == ArtistMusicListID) { auto t_rowCount = artistListView->rowCount(); auto playlist = artistListView->playlist(); if (playlist->searchStr().isEmpty()) { emptyHits->setText(MusicListDataWidget::tr("No songs")); } else { emptyHits->setText(MusicListDataWidget::tr("No search results")); } bool empty = t_rowCount == 0 ? true : false; actionBar->setVisible(!empty); artistListView->setVisible(!empty); albumListView->setVisible(false); musicListView->setVisible(false); emptyHits->setVisible(empty); emptySearchHits->setVisible(empty && !playlist->searchStr().isEmpty()); } else { auto t_rowCount = musicListView->rowCount(); auto playlist = musicListView->playlist(); if (playlist->searchStr().isEmpty()) { emptyHits->setText(MusicListDataWidget::tr("No songs")); } else { emptyHits->setText(MusicListDataWidget::tr("No search results")); } bool empty = t_rowCount == 0 ? true : false; actionBar->setVisible(!empty); artistListView->setVisible(false); musicListView->setVisible(!empty); emptyHits->setVisible(empty); } } MusicListDataWidget::MusicListDataWidget(QWidget *parent) : DWidget(parent), d_ptr(new MusicListDataWidgetPrivate(this)) { Q_D(MusicListDataWidget); setObjectName("MusicListDataWidget"); setAcceptDrops(true); setAutoFillBackground(true); auto palette = this->palette(); QColor background("#FFFFFF"); background.setAlphaF(0.1); palette.setColor(DPalette::Background, background); setPalette(palette); auto layout = new QVBoxLayout(this); layout->setContentsMargins(0, 0, 8, 0); layout->setSpacing(0); d->actionBar = new ActionBar; d->actionBar->setFixedHeight(80); d->actionBar->setObjectName("MusicListDataActionBar"); auto actionBarLayout = new QVBoxLayout(d->actionBar); actionBarLayout->setContentsMargins(10, 3, 8, 0); actionBarLayout->setSpacing(0); auto actionTileBarLayout = new QHBoxLayout(); actionTileBarLayout->setContentsMargins(10, 3, 8, 0); actionTileBarLayout->setSpacing(0); d->titleLabel = new DLabel; auto titleFont = d->titleLabel->font(); titleFont.setFamily("SourceHanSansSC"); titleFont.setWeight(QFont::Medium); titleFont.setPixelSize(24); d->titleLabel->setFont(titleFont); d->titleLabel->setFixedHeight(36); d->titleLabel->setFixedWidth(300); d->titleLabel->setObjectName("MusicListDataTitle"); d->titleLabel->setText(tr("All Music")); d->titleLabel->setForegroundRole(DPalette::BrightText); d->albumDropdown = new DDropdown; d->albumDropdown->setFixedHeight(28); d->albumDropdown->setMinimumWidth(130); d->albumDropdown->setObjectName("MusicListAlbumDataSort"); d->albumDropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); d->albumDropdown->addAction(tr("Album"), QVariant::fromValue(Playlist::SortByTitle)); d->albumDropdown->setCurrentAction(); d->albumDropdown->hide(); d->artistDropdown = new DDropdown; d->artistDropdown->setFixedHeight(28); d->artistDropdown->setMinimumWidth(130); d->artistDropdown->setObjectName("MusicListArtistDataSort"); d->artistDropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); d->artistDropdown->addAction(tr("Artist"), QVariant::fromValue(Playlist::SortByArtist)); d->artistDropdown->setCurrentAction(); d->artistDropdown->hide(); d->musicDropdown = new DDropdown; d->musicDropdown->setFixedHeight(28); d->musicDropdown->setMinimumWidth(130); d->musicDropdown->setObjectName("MusicListMusicDataSort"); d->musicDropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); d->musicDropdown->addAction(tr("Title"), QVariant::fromValue(Playlist::SortByTitle)); d->musicDropdown->addAction(tr("Artist"), QVariant::fromValue(Playlist::SortByArtist)); d->musicDropdown->addAction(tr("Album"), QVariant::fromValue(Playlist::SortByAblum)); d->musicDropdown->setCurrentAction(); /*-------New sorting function-----------*/ d->albumSearchDropdown = new DDropdown; d->albumSearchDropdown->setFixedHeight(28); d->albumSearchDropdown->setMinimumWidth(130); d->albumSearchDropdown->setObjectName("MusicListAlbumDataSort"); d->albumSearchDropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); d->albumSearchDropdown->addAction(tr("Album"), QVariant::fromValue(Playlist::SortByTitle)); d->albumSearchDropdown->setCurrentAction(); d->albumSearchDropdown->hide(); d->artistSearchDropdown = new DDropdown; d->artistSearchDropdown->setFixedHeight(28); d->artistSearchDropdown->setMinimumWidth(130); d->artistSearchDropdown->setObjectName("MusicListArtistDataSort"); d->artistSearchDropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); d->artistSearchDropdown->addAction(tr("Artist"), QVariant::fromValue(Playlist::SortByArtist)); d->artistSearchDropdown->setCurrentAction(); d->artistSearchDropdown->hide(); d->musicSearchDropdown = new DDropdown; d->musicSearchDropdown->setFixedHeight(28); d->musicSearchDropdown->setMinimumWidth(130); d->musicSearchDropdown->setObjectName("MusicListMusicDataSort"); d->musicSearchDropdown->addAction(tr("Time added"), QVariant::fromValue(Playlist::SortByAddTime)); d->musicSearchDropdown->addAction(tr("Title"), QVariant::fromValue(Playlist::SortByTitle)); d->musicSearchDropdown->addAction(tr("Artist"), QVariant::fromValue(Playlist::SortByArtist)); d->musicSearchDropdown->addAction(tr("Album"), QVariant::fromValue(Playlist::SortByAblum)); d->musicSearchDropdown->setCurrentAction(); d->musicSearchDropdown->hide(); actionTileBarLayout->addWidget(d->titleLabel, 0, Qt::AlignLeft | Qt::AlignBottom); actionTileBarLayout->addStretch(); actionTileBarLayout->addWidget(d->albumDropdown, 0, Qt::AlignRight | Qt::AlignBottom); actionTileBarLayout->addWidget(d->artistDropdown, 0, Qt::AlignRight | Qt::AlignBottom); actionTileBarLayout->addWidget(d->musicDropdown, 0, Qt::AlignRight | Qt::AlignBottom); actionTileBarLayout->addWidget(d->albumSearchDropdown, 0, Qt::AlignRight | Qt::AlignBottom); actionTileBarLayout->addWidget(d->artistSearchDropdown, 0, Qt::AlignRight | Qt::AlignBottom); actionTileBarLayout->addWidget(d->musicSearchDropdown, 0, Qt::AlignRight | Qt::AlignBottom); auto actionInfoBarLayout = new QHBoxLayout(); actionInfoBarLayout->setContentsMargins(10, 3, 8, 0); actionInfoBarLayout->setSpacing(0); d->btPlayAll = new DPushButton; auto playAllPalette = d->btPlayAll->palette(); playAllPalette.setColor(DPalette::ButtonText, Qt::white); playAllPalette.setColor(DPalette::Dark, QColor("#FD5E5E")); playAllPalette.setColor(DPalette::Light, QColor("#ED5656")); d->btPlayAll->setPalette(playAllPalette); d->btPlayAll->setIcon(QIcon(":/mpimage/light/normal/play_all_normal.svg")); d->btPlayAll->setObjectName("MusicListDataPlayAll"); d->btPlayAll->setText(tr("Play All")); // d->btPlayAll->setFixedWidth(93); d->btPlayAll->setFixedHeight(30); d->btPlayAll->setFocusPolicy(Qt::NoFocus); d->btPlayAll->setIconSize(QSize(18, 18)); auto btPlayAllFont = d->btPlayAll->font(); btPlayAllFont.setFamily("SourceHanSansSC"); btPlayAllFont.setWeight(QFont::Medium); // btPlayAllFont.setPixelSize(13); DFontSizeManager::instance()->bind(d->btPlayAll, DFontSizeManager::T8); d->btPlayAll->setFont(btPlayAllFont); d->infoLabel = new DLabel; d->infoLabel->setObjectName("MusicListDataTitle"); d->infoLabel->setText(tr("All Music")); d->infoLabel->setMinimumWidth(200); d->infoLabel->setWordWrap(true); d->infoLabel->setFont(btPlayAllFont); auto infoLabelPalette = d->infoLabel->palette(); QColor infoLabelColor = infoLabelPalette.color(DPalette::BrightText); infoLabelColor.setAlphaF(0.7); infoLabelPalette.setColor(DPalette::ButtonText, infoLabelColor); d->infoLabel->setPalette(infoLabelPalette); d->infoLabel->setForegroundRole(DPalette::ButtonText); // d->btIconMode = new MusicImageButton(":/mpimage/light/normal/picture_list_normal.svg", // ":/mpimage/light/hover/picture_list_hover.svg", // ":/mpimage/light/press/picture_list_press.svg", // ":/mpimage/light/active/picture_list_active.svg"); d->btIconMode = new DToolButton; d->btIconMode->setFixedSize(36, 36); d->btIconMode->setObjectName("MusicListDataWidgetIconMode"); d->btIconMode->setCheckable(true); d->btIconMode->setChecked(false); // d->btlistMode = new MusicImageButton(":/mpimage/light/normal/text_list_normal.svg", // ":/mpimage/light/hover/text_list_hover.svg", // ":/mpimage/light/press/text_list_press.svg", // ":/mpimage/light/active/text_list_active.svg"); d->btlistMode = new DToolButton; d->btlistMode->setFixedSize(36, 36); d->btlistMode->setObjectName("MusicListDataWidgetListMode"); d->btlistMode->setCheckable(true); d->btlistMode->setChecked(false); // auto framelayout = new QHBoxLayout(this); // DFrame *t_frame = new DFrame(this); // framelayout->addWidget(d->btIconMode, 0, Qt::AlignCenter); // framelayout->addWidget(d->btlistMode, 0, Qt::AlignCenter); // t_frame->setLayout(framelayout); actionInfoBarLayout->addWidget(d->btPlayAll, 0, Qt::AlignVCenter); actionInfoBarLayout->addWidget(d->infoLabel, 100, Qt::AlignLeft | Qt::AlignVCenter); actionInfoBarLayout->addStretch(); actionInfoBarLayout->addWidget(d->btIconMode, 0, Qt::AlignCenter); actionInfoBarLayout->addWidget(d->btlistMode, 0, Qt::AlignCenter); /*----------------fix bug----------------------*/ actionBarLayout->addLayout(actionTileBarLayout); actionBarLayout->addLayout(actionInfoBarLayout); d->emptyHits = new DLabel(); d->emptyHits->setObjectName("MusicListDataEmptyHits"); d->emptyHits->hide(); auto emptyHitsFont = d->emptyHits->font(); emptyHitsFont.setFamily("SourceHanSansSC"); emptyHitsFont.setPixelSize(20); d->emptyHits->setFont(emptyHitsFont); d->emptyHits->setText(MusicListDataWidget::tr("No songs")); d->emptyHits->setText(MusicListDataWidget::tr("No search results")); d->emptySearchHits = new DLabel(); d->emptySearchHits->hide(); auto emptySearchHitsFont = d->emptySearchHits->font(); emptySearchHitsFont.setFamily("SourceHanSansSC"); emptySearchHitsFont.setPixelSize(14); d->emptySearchHits->setFont(emptySearchHitsFont); auto emptyLayout = new QVBoxLayout(); emptyLayout->setContentsMargins(0, 0, 0, 0); emptyLayout->setSpacing(10); emptyLayout->addStretch(100); emptyLayout->addWidget(d->emptyHits, 0, Qt::AlignCenter); emptyLayout->addWidget(d->emptySearchHits, 0, Qt::AlignCenter); emptyLayout->addStretch(100); d->albumListView = new MusicListDataView; d->artistListView = new MusicListDataView; d->musicListView = new PlayListView(true); d->musicListView->hide(); layout->setContentsMargins(0, 1, 0, 0); /*---------------tabWidget----------------*/ d->tabWidget = new DTabWidget(); d->songListView = new PlayListView(true); d->singerListView = new MusicListDataView(); d->albListView = new MusicListDataView(); d->tabWidget->addTab(d->songListView, QString(tr("Songs"))); d->tabWidget->addTab(d->singerListView, QString(tr("Artists"))); d->tabWidget->addTab(d->albListView, QString(tr("Albums"))); d->tabWidget->setDocumentMode(true); d->tabWidget->hide(); d->songListView->hide(); d->singerListView->hide(); d->albListView->hide(); layout->addWidget(d->actionBar, 0, Qt::AlignTop); layout->addLayout(emptyLayout, 0); layout->addSpacing(8); layout->addWidget(d->albumListView, 100); layout->addWidget(d->artistListView, 100); layout->addWidget(d->musicListView, 100); layout->addWidget(d->tabWidget, 100); d->initConntion(); } MusicListDataWidget::~MusicListDataWidget() { } void MusicListDataWidget::setCustomSortType(PlaylistPtr playlist) { Q_D(MusicListDataWidget); DDropdown *t_curDropdown = nullptr; if (playlist->id() == AlbumMusicListID) { t_curDropdown = d->albumDropdown; } else if (playlist->id() == ArtistMusicListID) { t_curDropdown = d->artistDropdown; } else { t_curDropdown = d->musicDropdown; } t_curDropdown->setCurrentAction(nullptr); t_curDropdown->setText(tr("Custom")); } void MusicListDataWidget::resultTabwidget(int index) { Q_D(MusicListDataWidget); d->tabWidget->setCurrentIndex(index); if (index == 0) { d->albumSearchDropdown->hide(); d->artistSearchDropdown->hide(); d->musicSearchDropdown->show(); if (d->songListView->viewMode() == QListView::IconMode) { d->btIconMode->setChecked(true); d->btlistMode->setChecked(false); } else { d->btIconMode->setChecked(false); d->btlistMode->setChecked(true); } tabwidgetInfo(MusicPlaylists); d->singerListView->clearSelection(); d->albListView->clearSelection(); } else if (index == 1) { d->albumSearchDropdown->hide(); d->artistSearchDropdown->show(); d->musicSearchDropdown->hide(); if (d->singerListView->viewMode() == QListView::IconMode) { d->btIconMode->setChecked(true); d->btlistMode->setChecked(false); } else { d->btIconMode->setChecked(false); d->btlistMode->setChecked(true); } tabwidgetInfo(ArtistPlaylists); d->songListView->clearSelection(); d->albListView->clearSelection(); } else if (index == 2) { d->albumSearchDropdown->show(); d->artistSearchDropdown->hide(); d->musicSearchDropdown->hide(); if (d->albListView->viewMode() == QListView::IconMode) { d->btIconMode->setChecked(true); d->btlistMode->setChecked(false); } else { d->btIconMode->setChecked(false); d->btlistMode->setChecked(true); } tabwidgetInfo(AlbumPlaylists); d->songListView->clearSelection(); d->singerListView->clearSelection(); } } void MusicListDataWidget::tabwidgetInfo(PlaylistPtr infoPlaylist) { Q_D(MusicListDataWidget); if (infoPlaylist == nullptr) { return ; } PlaylistPtr playlist = infoPlaylist; QString searchStr = playlist->searchStr(); bool chineseFlag = false; for (auto ch : searchStr) { if (DMusic::PinyinSearch::isChinese(ch)) { chineseFlag = true; break; } } //int allCount = 0; QFontMetrics titleFm(d->titleLabel->font()); auto text = titleFm.elidedText(playlist->displayName(), Qt::ElideRight, 300); d->titleLabel->setText(tr("Search Results")); d->titleLabel->setToolTip(playlist->displayName()); //DDropdown *t_curDropdown = nullptr; if (playlist->id() == AlbumResultListID) { PlayMusicTypePtrList playMusicTypePtrList = playlist->playMusicTypePtrList(); int musicCount = 0; int musicListCount = 0; for (auto action : playMusicTypePtrList) { if (searchStr.isEmpty()) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } else { if (chineseFlag) { if (action->name.contains(searchStr, Qt::CaseInsensitive)) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } } else { if (searchStr.size() == 1) { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } } else { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } } } } } QString infoStr; if (musicCount == 0) { infoStr = QString(" ") + MusicListDataWidget::tr("No songs"); } else if (musicCount == 1) { infoStr = QString(" ") + MusicListDataWidget::tr("1 album - 1 song"); } else { infoStr = QString(" ") + MusicListDataWidget::tr("%1 album - %2 songs").arg(musicListCount).arg(musicCount); if (musicListCount == 1) { infoStr = QString(" ") + MusicListDataWidget::tr("%1 album - %2 songs").arg(musicListCount).arg(musicCount); } else { infoStr = QString(" ") + MusicListDataWidget::tr("%1 albums - %2 songs").arg(musicListCount).arg(musicCount); } } //allCount = musicListCount; d->infoLabel->setText(infoStr); } else if (playlist->id() == ArtistResultListID) { PlayMusicTypePtrList playMusicTypePtrList = playlist->playMusicTypePtrList(); int musicCount = 0; int musicListCount = 0; for (auto action : playMusicTypePtrList) { if (searchStr.isEmpty()) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } else { if (chineseFlag) { if (action->name.contains(searchStr, Qt::CaseInsensitive)) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } } else { if (searchStr.size() == 1) { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } } else { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->name); if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { musicCount += action->playlistMeta.sortMetas.size(); musicListCount++; } } } } } QString infoStr; if (musicCount == 0) { infoStr = QString(" ") + MusicListDataWidget::tr("No songs"); } else if (musicCount == 1) { infoStr = QString(" ") + MusicListDataWidget::tr("1 artist - 1 song"); } else { if (musicListCount == 1) { infoStr = QString(" ") + MusicListDataWidget::tr("%1 artist - %2 songs").arg(musicListCount).arg(musicCount); } else { infoStr = QString(" ") + MusicListDataWidget::tr("%1 artists - %2 songs").arg(musicListCount).arg(musicCount); } } //allCount = musicListCount; d->infoLabel->setText(infoStr); } else if (playlist->id() == MusicResultListID) { QString infoStr; int musicCount = 0; for (auto action : playlist->allmusic()) { if (searchStr.isEmpty()) { musicCount ++; } else { if (chineseFlag) { if (action->title.contains(searchStr, Qt::CaseInsensitive)) { musicCount++; } } else { if (searchStr.size() == 1) { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->title); if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { musicCount++; } } else { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(action->title); if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { musicCount++; } } } } } if (musicCount == 0) { infoStr = QString(" ") + MusicListDataWidget::tr("No songs"); } else if (musicCount == 1) { infoStr = QString(" ") + MusicListDataWidget::tr("1 song"); } else { infoStr = QString(" ") + MusicListDataWidget::tr("%1 songs").arg(musicCount); } //allCount = musicCount; d->infoLabel->setText(infoStr); } } PlaylistPtr MusicListDataWidget::curPlaylist() { Q_D(MusicListDataWidget); return d->curPlaylist; } void MusicListDataWidget::onSearchText(QString str) { Q_D(MusicListDataWidget); if (d->curPlaylist.isNull()) { qWarning() << "can not change to emptry playlist"; return; } d->initData(d->curPlaylist, false, str); } void MusicListDataWidget::selectMusiclistChanged(PlaylistPtr playlist) { if (playlist.isNull()) { qWarning() << "can not change to emptry playlist"; return; } Q_D(MusicListDataWidget); playlist->setSearchStr(""); d->initData(playlist, true, ""); } void MusicListDataWidget::onMusiclistChanged(PlaylistPtr playlist) { if (playlist.isNull()) { qWarning() << "can not change to emptry playlist"; return; } Q_D(MusicListDataWidget); playlist->setSearchStr(""); d->initData(playlist); } void MusicListDataWidget::onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist) { Q_D(MusicListDataWidget); auto curPlayList = d->curPlaylist; if (curPlayList == nullptr) { d->initData(playlist); } else { if (curPlayList->id() == AlbumMusicListID || curPlayList->id() == ArtistMusicListID) { d->initData(d->curPlaylist); } else if (curPlayList->id() == playlist->id()) { d->musicListView->onMusicListAdded(metalist); d->updateInfo(); } } } void MusicListDataWidget::onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist) { Q_D(MusicListDataWidget); if (playlist->id() == "musicResult") { d->songListView->onMusicListRemoved(metalist); QString infoStr; if (d->titleLabel->text() == MusicListDataWidget::tr("All Music")) { infoStr = QString(" ") + MusicListDataWidget::tr("%1 songs").arg(d->musicListView->rowCount()); d->infoLabel->setText(infoStr); return; } infoStr = QString(" ") + MusicListDataWidget::tr("%1 songs").arg(d->songListView->rowCount()); d->infoLabel->setText(infoStr); d->titleLabel->setText(MusicListDataWidget::tr("Search Results")); } if (playlist != d->curPlaylist) { if (playlist->id() == PlayMusicListID && playlist->allmusic().isEmpty()) { d->albumListView->setPlaying(nullptr); d->artistListView->setPlaying(nullptr); d->musicListView->setPlaying(nullptr); } return; } if (d->curPlaylist->id() == playlist->id()) { if (playlist->id() != AlbumMusicListID && playlist->id() != ArtistMusicListID && playlist->id() != AllMusicListID) { d->updateInfo(); if (playlist->id() == d->musicListView->playlist()->id()) d->musicListView->onMusicListRemoved(metalist); } else { d->updateInfo(); d->albumListView->updateList(); d->artistListView->updateList(); if (playlist->id() == d->musicListView->playlist()->id()) { d->musicListView->onMusicListRemoved(metalist); } } } malloc_trim(0); } void MusicListDataWidget::onMusiclistUpdate() { Q_D(MusicListDataWidget); d->initData(d->curPlaylist); int t_count = 0; if (d->curPlaylist->id() == AlbumMusicListID) { t_count = d->albumListView->playMusicTypePtrList().size(); } else if (d->curPlaylist->id() == ArtistMusicListID) { t_count = d->artistListView->playMusicTypePtrList().size(); } else { t_count = d->musicListView->playMetaPtrList().size(); } if (t_count == 0 && !d->curPlaylist->searchStr().isEmpty()) { d->emptyHits->setText(tr("No result found")); d->albumListView->setVisible(false); d->artistListView->setVisible(false); d->musicListView->setVisible(false); d->emptyHits->setVisible(true); } else { d->emptyHits->setText(""); d->emptyHits->hide(); } } void MusicListDataWidget::onMusicPlayed(PlaylistPtr playlist, const MetaPtr Meta) { Q_UNUSED(playlist) Q_D(MusicListDataWidget); d->albumListView->setPlaying(Meta); d->artistListView->setPlaying(Meta); d->musicListView->setPlaying(Meta); d->albumListView->update(); d->artistListView->update(); d->musicListView->update(); d->songListView->setPlaying(Meta); d->singerListView->setPlaying(Meta); d->albListView->setPlaying(Meta); d->songListView->update(); d->singerListView->update(); d->albListView->update(); } void MusicListDataWidget::slotTheme(int type) { Q_D(MusicListDataWidget); QString rStr; if (type == 1) { rStr = "light"; } else { rStr = "dark"; } if (type == 1) { auto palette = this->palette(); QColor background("#FFFFFF"); background.setAlphaF(0.1); palette.setColor(DPalette::Background, background); setPalette(palette); auto emptyHitsPalette = d->emptyHits->palette(); QColor titleLabelPaletteColor("#000000"); titleLabelPaletteColor.setAlphaF(0.3); emptyHitsPalette.setColor(QPalette::WindowText, titleLabelPaletteColor); d->emptyHits->setPalette(emptyHitsPalette); d->emptyHits->setForegroundRole(QPalette::WindowText); d->emptySearchHits->setPalette(emptyHitsPalette); d->emptySearchHits->setForegroundRole(QPalette::WindowText); // auto titleLabelPalette = d->infoLabel->palette(); // titleLabelPalette.setColor(QPalette::WindowText, QColor("#000000")); // d->titleLabel->setPalette(titleLabelPalette); // d->titleLabel->setForegroundRole(QPalette::WindowText); auto playAllPalette = d->btPlayAll->palette(); playAllPalette.setColor(DPalette::ButtonText, Qt::white); playAllPalette.setColor(DPalette::Light, QColor("#FD5E5E")); playAllPalette.setColor(DPalette::Dark, QColor("#ED5656")); d->btPlayAll->setPalette(playAllPalette); auto infoLabelPalette = d->infoLabel->palette(); QColor infoLabelColor = infoLabelPalette.color(DPalette::BrightText); infoLabelColor.setAlphaF(0.7); infoLabelPalette.setColor(DPalette::ButtonText, infoLabelColor); d->infoLabel->setPalette(infoLabelPalette); // auto playAllPalette = d->btPlayAll->palette(); // playAllPalette.setColor(DPalette::Dark, QColor("#FD5E5E")); // playAllPalette.setColor(DPalette::Light, QColor("#ED5656")); // d->btPlayAll->setPalette(palette); } else { auto palette = this->palette(); QColor background("#252525"); palette.setColor(DPalette::Background, background); setPalette(palette); auto emptyHitsPalette = d->emptyHits->palette(); QColor titleLabelPaletteColor("#C0C6D4"); titleLabelPaletteColor.setAlphaF(0.4); emptyHitsPalette.setColor(QPalette::WindowText, titleLabelPaletteColor); d->emptyHits->setPalette(emptyHitsPalette); d->emptyHits->setForegroundRole(QPalette::WindowText); d->emptySearchHits->setPalette(emptyHitsPalette); d->emptySearchHits->setForegroundRole(QPalette::WindowText); // auto titleLabelPalette = d->infoLabel->palette(); // titleLabelPalette.setColor(DPalette::WindowText, QColor("#FFFFFF")); // d->titleLabel->setPalette(titleLabelPalette); // d->titleLabel->setForegroundRole(DPalette::WindowText); auto playAllPalette = d->btPlayAll->palette(); playAllPalette.setColor(DPalette::ButtonText, "#FFFFFF"); playAllPalette.setColor(DPalette::Light, QColor("#DA2D2D")); playAllPalette.setColor(DPalette::Dark, QColor("#A51B1B")); d->btPlayAll->setPalette(playAllPalette); auto infoLabelPalette = d->infoLabel->palette(); QColor infoLabelColor = infoLabelPalette.color(DPalette::BrightText); infoLabelColor.setAlphaF(0.7); infoLabelPalette.setColor(DPalette::ButtonText, infoLabelColor); d->infoLabel->setPalette(infoLabelPalette); // auto playAllPalette = d->btPlayAll->palette(); // playAllPalette.setColor(DPalette::Dark, QColor("#DA2D2D")); // playAllPalette.setColor(DPalette::Light, QColor("#A51B1B")); // d->btPlayAll->setPalette(palette); } // d->btIconMode->setPropertyPic(QString(":/mpimage/%1/normal/picture_list_normal.svg").arg(rStr), // QString(":/mpimage/%1/hover/picture_list_hover.svg").arg(rStr), // QString(":/mpimage/%1/press/picture_list_press.svg").arg(rStr), // QString(":/mpimage/%1/active/picture_list_active.svg").arg(rStr)); // d->btlistMode->setPropertyPic(QString(":/mpimage/%1/normal/text_list_normal.svg").arg(rStr), // QString(":/mpimage/%1/hover/text_list_hover.svg").arg(rStr), // QString(":/mpimage/%1/press/text_list_press.svg").arg(rStr), // QString(":/mpimage/%1/active/text_list_active.svg").arg(rStr)); // d->btIconMode->setIcon(QIcon(QString(":/mpimage/light/normal/picture_list_normal.svg"))); d->btIconMode->setIcon(QIcon::fromTheme("picture_list_texts")); d->btIconMode->setIconSize(QSize(36, 36)); // d->btlistMode->setIcon(QIcon(QString(":/mpimage/light/normal/text_list_normal.svg"))); d->btlistMode->setIcon(QIcon::fromTheme("text_list_texts")); d->btlistMode->setIconSize(QSize(36, 36)); d->albumListView->setThemeType(type); d->artistListView->setThemeType(type); d->musicListView->setThemeType(type); /*----------tabwidget-------------*/ d->songListView->setThemeType(type); d->singerListView->setThemeType(type); d->albListView->setThemeType(type); } void MusicListDataWidget::changePicture(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap) { Q_D(MusicListDataWidget); if (d->albumListView->isVisible()) { d->albumListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); } else if (d->artistListView->isVisible()) { d->artistListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); } else if (d->albListView->isVisible()) { d->albListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); } else if (d->singerListView->isVisible()) { d->singerListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); } else if (d->songListView->isVisible()) { d->songListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); } else { d->musicListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); } } void MusicListDataWidget::retResult(QString searchText, QList resultlist) { Q_D(MusicListDataWidget); PlaylistPtr retdata; QString search = ""; int CurIndex = 0; bool flagMus = false; bool flagArt = false; bool flagAlb = false; if (searchText.isEmpty()) { d->initData(d->selectPlaylist, false, ""); } else { for (int i = 0; i < resultlist.size(); ++i) { if (resultlist.at(i)->id() == MusicResultListID) { retdata = resultlist.at(i); MusicPlaylists = resultlist.at(i); flagMus = true; if (d->songListView->viewMode() != (resultlist.at(i)->viewMode())) { d->songListView->setViewModeFlag(static_cast(resultlist.at(i)->viewMode())); } if (d->songListView->viewMode() == QListView::IconMode) { d->btIconMode->setChecked(true); d->btlistMode->setChecked(false); } else { d->btIconMode->setChecked(false); d->btlistMode->setChecked(true); } d->songListView->onMusiclistChanged(resultlist.at(i)); } else if (resultlist.at(i)->id() == ArtistResultListID) { ArtistPlaylists = resultlist.at(i); retdata = resultlist.at(i); flagArt = true; if (d->singerListView->viewMode() != (resultlist.at(i)->viewMode())) { d->singerListView->setViewModeFlag(static_cast(resultlist.at(i)->viewMode())); } if (d->singerListView->viewMode() == QListView::IconMode) { d->btIconMode->setChecked(true); d->btlistMode->setChecked(false); } else { d->btIconMode->setChecked(false); d->btlistMode->setChecked(true); } d->singerListView->onMusiclistChanged(resultlist.at(i)); } else if (resultlist.at(i)->id() == AlbumResultListID) { AlbumPlaylists = resultlist.at(i); retdata = resultlist.at(i); flagAlb = true; if (d->albListView->viewMode() != (resultlist.at(i)->viewMode())) { d->albListView->setViewModeFlag(static_cast(resultlist.at(i)->viewMode())); } if (d->albListView->viewMode() == QListView::IconMode) { d->btIconMode->setChecked(true); d->btlistMode->setChecked(false); } else { d->btIconMode->setChecked(false); d->btlistMode->setChecked(true); } d->albListView->onMusiclistChanged(resultlist.at(i)); } } /*-------Circulation refresh--------*/ for (int j = 0; j < 3; j++) { d->tabWidget->setCurrentIndex(j); } if (resultlist.first()->id() == MusicResultListID) { CurIndex = 0; } else if (resultlist.first()->id() == ArtistResultListID) { CurIndex = 1; } else if (resultlist.first()->id() == AlbumResultListID) { CurIndex = 2; } if (flagMus & flagArt & flagAlb) { d->tabWidget->setCurrentIndex(0); } /*---------Search without result------*/ if (d->songListView->rowCount() == 0 && d->singerListView->rowCount() == 0 && d->albListView->rowCount() == 0) { d->initData(retdata, false, "noSearchResults"); return; } d->updateFlag = true; if (CurIndex == 0) { d->initData(MusicPlaylists, false, search); tabwidgetInfo(MusicPlaylists); } if (CurIndex == 1) { d->initData(ArtistPlaylists, false, search); tabwidgetInfo(ArtistPlaylists); } if (CurIndex == 2) { d->initData(AlbumPlaylists, false, search); tabwidgetInfo(AlbumPlaylists); } d->tabWidget->setCurrentIndex(CurIndex); } } void MusicListDataWidget::CloseSearch() { Q_D(MusicListDataWidget); d->updateFlag = false; d->initData(d->selectPlaylist, false, ""); } void MusicListDataWidget::onCustomContextMenuRequest(const QPoint &pos, PlaylistPtr selectedlist, PlaylistPtr favlist, QList newlists, char type) { Q_UNUSED(selectedlist) Q_D(MusicListDataWidget); if (type == 2) { d->albumListView->showContextMenu(pos, d->musicListView->playlist(), favlist, newlists); } else if (type == 3) { d->artistListView->showContextMenu(pos, d->musicListView->playlist(), favlist, newlists); } else if (type == 4) { d->songListView->showContextMenu(pos, d->musicListView->playlist(), favlist, newlists); } else if (type == 5) { d->albListView->showContextMenu(pos, d->musicListView->playlist(), favlist, newlists); } else if (type == 6) { d->singerListView->showContextMenu(pos, d->musicListView->playlist(), favlist, newlists); } else { d->musicListView->showContextMenu(pos, d->musicListView->playlist(), favlist, newlists); } } void MusicListDataWidget::dragEnterEvent(QDragEnterEvent *event) { DWidget::dragEnterEvent(event); if (event->mimeData()->hasFormat("text/uri-list")) { qDebug() << "acceptProposedAction" << event; event->setDropAction(Qt::CopyAction); event->acceptProposedAction(); return; } } void MusicListDataWidget::dropEvent(QDropEvent *event) { DWidget::dropEvent(event); Q_D(MusicListDataWidget); if (!event->mimeData()->hasFormat("text/uri-list")) { return; } auto urls = event->mimeData()->urls(); QStringList localpaths; for (auto &url : urls) { localpaths << url.toLocalFile(); } if (!localpaths.isEmpty() && !d->curPlaylist.isNull()) { Q_EMIT importSelectFiles(d->curPlaylist, localpaths); } } ActionBar::ActionBar(QWidget *parent) { Q_UNUSED(parent) MoveFlag = false; } void ActionBar::mouseReleaseEvent(QMouseEvent *event) { MoveFlag = true; DWidget::mouseReleaseEvent(event); } void ActionBar::mousePressEvent(QMouseEvent *event) { MoveFlag = false; DWidget::mousePressEvent(event); } void ActionBar::mouseMoveEvent(QMouseEvent *event) { if (MoveFlag) DWidget::mousePressEvent(event); } deepin-music-6.0.1.54/src/music-player/view/musiclistdatawidget.h000664 000000 000000 00000007453 13703317554 024726 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "../core/playlist.h" DWIDGET_USE_NAMESPACE class ActionBar; class MusicListDataWidgetPrivate; class MusicListDataWidget : public DWidget { Q_OBJECT public: explicit MusicListDataWidget(QWidget *parent = Q_NULLPTR); ~MusicListDataWidget() override; void setCustomSortType(PlaylistPtr playlist); void tabwidgetInfo(PlaylistPtr infoPlaylist); PlaylistPtr curPlaylist(); public slots: void onSearchText(QString str); void selectMusiclistChanged(PlaylistPtr playlist); void onMusiclistChanged(PlaylistPtr playlist); void onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); void onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist); void onMusiclistUpdate(); void onMusicPlayed(PlaylistPtr playlist, const MetaPtr); void slotTheme(int type); void changePicture(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap); void retResult(QString searchText, QList resultlist); void resultTabwidget(int index); void CloseSearch(); void onCustomContextMenuRequest(const QPoint &pos, PlaylistPtr selectedlist, PlaylistPtr favlist, QListnewlists, char type); signals: void playall(PlaylistPtr playlist); void resort(PlaylistPtr playlist, int sortType); void playMedia(PlaylistPtr playlist, const MetaPtr meta); void resume(PlaylistPtr playlist, const MetaPtr meta); void pause(PlaylistPtr playlist, const MetaPtr meta); void modeChanged(int); void importSelectFiles(PlaylistPtr playlist, QStringList urllist); void requestCustomContextMenu(const QPoint &pos, char type); void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); void musiclistRemove(PlaylistPtr playlist, const MetaPtrList &metalist); void musiclistDelete(PlaylistPtr playlist, const MetaPtrList &metalist); void showInfoDialog(const MetaPtr meta); void updateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta); void addMetasFavourite(const MetaPtrList &metalist); void removeMetasFavourite(const MetaPtrList &metalist); protected: virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; virtual void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; private: PlaylistPtr MusicPlaylists; PlaylistPtr ArtistPlaylists; PlaylistPtr AlbumPlaylists; QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListDataWidget) }; class ActionBar : public DWidget { Q_OBJECT public: explicit ActionBar(QWidget *parent = Q_NULLPTR); ~ActionBar() {} private: bool MoveFlag = false; protected: //Filter the mousemoveevent virtual void mouseReleaseEvent(QMouseEvent *event); virtual void mousePressEvent(QMouseEvent *event); virtual void mouseMoveEvent(QMouseEvent *event); }; deepin-music-6.0.1.54/src/music-player/view/musiclistscrollarea.cpp000664 000000 000000 00000014456 13703317554 025274 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistscrollarea.h" #include #include #include #include #include #include #include #include #include #include #include "../core/playlist.h" #include "../core/musicsettings.h" #include "widget/musiclistview.h" #include "widget/musiclistviewitem.h" #include "musiclistdatawidget.h" #include "widget/musicimagebutton.h" #include MusicListScrollArea::MusicListScrollArea(QWidget *parent) : DScrollArea(parent) { setFrameShape(QFrame::NoFrame); setFixedWidth(220); setWidgetResizable(true); setAutoFillBackground(true); auto leftFramePalette = palette(); leftFramePalette.setColor(DPalette::Background, QColor("#FFFFFF")); setPalette(leftFramePalette); QWidget *widget = new QWidget(this); setWidget(widget); auto musicLayout = new QVBoxLayout(widget); musicLayout->setContentsMargins(10, 5, 10, 5); musicLayout->setSpacing(0); dataBaseLabel = new DLabel; dataBaseLabel->setFixedHeight(40); dataBaseLabel->setText(tr("Library")); dataBaseLabel->setObjectName("MusicListScrollAreaDataBase"); dataBaseLabel->setMargin(10); auto dataBaseLabelFont = dataBaseLabel->font(); dataBaseLabelFont.setFamily("SourceHanSansSC"); dataBaseLabelFont.setWeight(QFont::Medium); dataBaseLabelFont.setPixelSize(14); dataBaseLabel->setFont(dataBaseLabelFont); customizeLabel = new DLabel; customizeLabel->setFixedHeight(40); customizeLabel->setText(tr("Playlists")); customizeLabel->setObjectName("MusicListScrollAreaCustomizeLabel"); customizeLabel->setMargin(10); customizeLabel->setFont(dataBaseLabelFont); m_addListBtn = new MusicImageButton(":/mpimage/light/normal/add_normal.svg", ":/mpimage/light/hover/add_hover.svg", ":/mpimage/light/press/add_press.svg"); m_addListBtn->setFixedSize(37, 37); m_addListBtn->setFocusPolicy(Qt::NoFocus); auto customizeLayout = new QHBoxLayout(widget); customizeLayout->setContentsMargins(0, 0, 5, 0); customizeLayout->addWidget(customizeLabel, 100, Qt::AlignLeft); customizeLayout->addStretch(); customizeLayout->addWidget(m_addListBtn, 0, Qt::AlignBottom); m_dataBaseListview = new MusicListView; m_dataBaseListview->setEditTriggers(QAbstractItemView::NoEditTriggers); m_dataBaseListview->setFixedHeight(162); m_customizeListview = new MusicListView; musicLayout->setContentsMargins(0, 0, 0, 0); musicLayout->addWidget(dataBaseLabel, 0, Qt::AlignVCenter); musicLayout->addWidget(m_dataBaseListview, 0, Qt::AlignTop); musicLayout->addLayout(customizeLayout); musicLayout->addWidget(m_customizeListview); int themeType = DGuiApplicationHelper::instance()->themeType(); slotTheme(themeType); connect(verticalScrollBar(), &QScrollBar::rangeChanged, this, [=]() { if (m_customizeListview->getSizeChangedFlag()) { this->verticalScrollBar()->setValue(this->verticalScrollBar()->maximum()); m_customizeListview->setSizeChangedFlag(false); } }); } MusicListView *MusicListScrollArea::getDBMusicListView() { return m_dataBaseListview; } MusicListView *MusicListScrollArea::getCustomMusicListView() { return m_customizeListview; } MusicImageButton *MusicListScrollArea::getAddButton() { return m_addListBtn; } void MusicListScrollArea::slotTheme(int type) { if (type == 0) type = DGuiApplicationHelper::instance()->themeType(); if (type == 1) { DPalette leftFramePalette = palette(); leftFramePalette.setColor(DPalette::Background, QColor("#FFFFFF")); setPalette(leftFramePalette); DPalette dataBaseLabelPalette = dataBaseLabel->palette(); QColor WindowTextColor("#757F92"); WindowTextColor.setAlphaF(0.8); dataBaseLabelPalette.setColor(DPalette::WindowText, WindowTextColor); dataBaseLabel->setPalette(dataBaseLabelPalette); customizeLabel->setPalette(dataBaseLabelPalette); m_addListBtn->setPropertyPic(":/mpimage/light/normal/add_normal.svg", ":/mpimage/light/hover/add_hover.svg", ":/mpimage/light/press/add_press.svg"); } else { auto leftFramePalette = palette(); leftFramePalette.setColor(DPalette::Background, QColor("#232323")); setPalette(leftFramePalette); DPalette dataBaseLabelPalette = dataBaseLabel->palette(); QColor WindowTextColor("#C0C6D4"); WindowTextColor.setAlphaF(0.8); dataBaseLabelPalette.setColor(DPalette::WindowText, WindowTextColor); dataBaseLabel->setPalette(dataBaseLabelPalette); customizeLabel->setPalette(dataBaseLabelPalette); m_addListBtn->setPropertyPic(":/mpimage/dark/normal/add_normal.svg", ":/mpimage/dark/hover/add_hover.svg", ":/mpimage/dark/press/add_press.svg"); } m_dataBaseListview->slotTheme(type); m_customizeListview->slotTheme(type); } void MusicListScrollArea::changePicture(QPixmap pixmap, QPixmap albumPixmap, QPixmap sidebarPixmap) { Q_UNUSED(albumPixmap) m_dataBaseListview->changePicture(pixmap, sidebarPixmap); m_customizeListview->changePicture(pixmap, sidebarPixmap); } void MusicListScrollArea::resizeEvent(QResizeEvent *event) { m_customizeListview->adjustHeight(); DScrollArea::resizeEvent(event); sizeHint(); } deepin-music-6.0.1.54/src/music-player/view/musiclistscrollarea.h000664 000000 000000 00000003146 13703317554 024733 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include DWIDGET_USE_NAMESPACE class MusicListView; class MusicListDataWidget; class MusicImageButton; class MusicListScrollArea : public DScrollArea { Q_OBJECT public: explicit MusicListScrollArea(QWidget *parent = Q_NULLPTR); MusicListView *getDBMusicListView(); MusicListView *getCustomMusicListView(); MusicImageButton *getAddButton(); public slots: void slotTheme(int type); void changePicture(QPixmap pixmap, QPixmap albumPixmap, QPixmap sidebarPixmap); protected: virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; private: MusicListView *m_dataBaseListview; MusicListView *m_customizeListview; MusicImageButton *m_addListBtn; DLabel *dataBaseLabel; DLabel *customizeLabel; }; deepin-music-6.0.1.54/src/music-player/view/musiclistwidget.cpp000664 000000 000000 00000040136 13703317554 024422 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistwidget.h" #include #include #include #include #include #include #include #include #include #include #include "../core/playlist.h" #include "../core/musicsettings.h" #include "widget/musiclistview.h" #include "widget/musiclistviewitem.h" #include "musiclistdatawidget.h" #include "widget/musicimagebutton.h" #include "musiclistscrollarea.h" MusicListWidget::MusicListWidget(QWidget *parent) : DWidget(parent) { setObjectName("MusicListWidget"); setAutoFillBackground(true); auto palette = this->palette(); palette.setColor(DPalette::Background, QColor("#F8F8F8")); setPalette(palette); auto layout = new QHBoxLayout(this); setFocusPolicy(Qt::ClickFocus); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); leftFrame = new MusicListScrollArea; leftFrame->setFixedWidth(220); leftFrame->setAutoFillBackground(true); auto leftFramePalette = leftFrame->palette(); leftFramePalette.setColor(DPalette::Background, QColor("#FFFFFF")); leftFrame->setPalette(leftFramePalette); m_addListBtn = leftFrame->getAddButton(); m_dataBaseListview = leftFrame->getDBMusicListView(); m_customizeListview = leftFrame->getCustomMusicListView(); m_dataListView = new MusicListDataWidget; layout->addWidget(leftFrame, 0); layout->addWidget(m_dataListView, 100); int themeType = DGuiApplicationHelper::instance()->themeType(); slotTheme(themeType); connect(this, &MusicListWidget::seaResult, m_dataListView, &MusicListDataWidget::retResult); connect(this, &MusicListWidget::seaResult, this, [ = ]() { m_customizeListview->clearSelected(); m_customizeListview->closeAllPersistentEditor(); m_dataBaseListview->clearSelected(); m_dataBaseListview->closeAllPersistentEditor(); }); connect(this, &MusicListWidget::closeSearch, m_dataListView, &MusicListDataWidget::CloseSearch); connect(m_addListBtn, &DPushButton::clicked, this, [ = ](bool /*checked*/) { qDebug() << "addPlaylist(true);"; addFlag = true; Q_EMIT this->addPlaylist(true); }); connect(m_dataBaseListview, &MusicListView::pressed, this, [ = ](const QModelIndex & index) { auto curPtr = m_dataBaseListview->playlistPtr(index); if (curPtr != nullptr) { m_customizeListview->clearSelected(); m_customizeListview->closeAllPersistentEditor(); m_dataListView->selectMusiclistChanged(curPtr); curPtr->setSearchStr(""); Q_EMIT selectedPlaylistChange(curPtr); } m_dataBaseListview->setFocus(); }); connect(m_dataBaseListview, &MusicListView::currentChanged, this, [ = ](const QModelIndex & current, const QModelIndex & previous) { Q_UNUSED(previous) auto curPtr = m_dataBaseListview->playlistPtr(current); if (curPtr != nullptr) { m_customizeListview->clearSelected(); m_customizeListview->closeAllPersistentEditor(); m_dataListView->selectMusiclistChanged(curPtr); curPtr->setSearchStr(""); Q_EMIT selectedPlaylistChange(curPtr); } m_dataBaseListview->setFocus(); }); connect(m_dataBaseListview, &MusicListView::customResort, this, [ = ](const QStringList & uuids) { Q_EMIT this->customResort(uuids); }); connect(m_dataBaseListview, &MusicListView::playall, this, [ = ](PlaylistPtr playlist) { if (playlist->playing() == nullptr) { if (playlist->id() == AlbumMusicListID || playlist->id() == ArtistMusicListID) { playlist->playMusicTypeToMeta(); playlist->play(playlist->first()); } Q_EMIT this->playall(playlist); } else { Q_EMIT this->resume(playlist, playlist->playing()); } }); connect(m_dataBaseListview, &MusicListView::pause, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { Q_EMIT this->pause(playlist, meta); }); connect(m_dataBaseListview, &MusicListView::importSelectFiles, this, [ = ](PlaylistPtr playlist, QStringList urllist) { Q_EMIT this->importSelectFiles(playlist, urllist); }); connect(m_dataBaseListview, &MusicListView::addToPlaylist, this, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { Q_EMIT this->addToPlaylist(playlist, metalist); }); connect(m_customizeListview, &MusicListView::pressed, this, [ = ](const QModelIndex & index) { auto curPtr = m_customizeListview->playlistPtr(index); if (curPtr != nullptr) { m_dataBaseListview->clearSelected(); m_dataBaseListview->closeAllPersistentEditor(); m_dataListView->selectMusiclistChanged(curPtr); curPtr->setSearchStr(""); Q_EMIT selectedPlaylistChange(curPtr); } m_customizeListview->setFocus(); }); connect(m_customizeListview, &MusicListView::currentChanged, this, [ = ](const QModelIndex & current, const QModelIndex & previous) { Q_UNUSED(previous) auto curPtr = m_customizeListview->playlistPtr(current); if (curPtr != nullptr) { m_dataBaseListview->clearSelected(); m_dataBaseListview->closeAllPersistentEditor(); m_dataListView->selectMusiclistChanged(curPtr); curPtr->setSearchStr(""); Q_EMIT selectedPlaylistChange(curPtr); } m_customizeListview->setFocus(); }); connect(m_customizeListview, &MusicListView::removeAllList, this, [ = ](const MetaPtr meta) { Q_UNUSED(meta) auto current = m_dataBaseListview->item(2); auto curPtr = m_dataBaseListview->playlistPtr(current); Q_EMIT this->playall(curPtr); }); connect(m_customizeListview, &MusicListView::customResort, this, [ = ](const QStringList & uuids) { Q_EMIT this->customResort(uuids); }); connect(m_customizeListview, &MusicListView::playall, this, [ = ](PlaylistPtr playlist) { if (playlist->playing() == nullptr) { Q_EMIT this->playall(playlist); } else { Q_EMIT this->resume(playlist, playlist->playing()); } }); connect(m_customizeListview, &MusicListView::displayNameChanged, this, [ = ]() { m_dataListView->onMusiclistUpdate(); }); connect(m_customizeListview, &MusicListView::pause, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { Q_EMIT this->pause(playlist, meta); }); connect(m_customizeListview, &MusicListView::importSelectFiles, this, [ = ](PlaylistPtr playlist, QStringList urllist) { Q_EMIT this->importSelectFiles(playlist, urllist); }); connect(m_customizeListview, &MusicListView::addToPlaylist, this, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { Q_EMIT this->addToPlaylist(playlist, metalist); }); //musiclistdatawidget connect(m_dataListView, &MusicListDataWidget::playall, this, [ = ](PlaylistPtr playlist) { // Q_EMIT this->selectPlaylist(playlist); Q_EMIT this->playall(playlist); }); connect(m_dataListView, &MusicListDataWidget::playMedia, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { Q_EMIT this->playMedia(playlist, meta); }); connect(m_dataListView, &MusicListDataWidget::resume, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { Q_EMIT this->resume(playlist, meta); }); connect(m_dataListView, &MusicListDataWidget::pause, this, [ = ](PlaylistPtr playlist, const MetaPtr meta) { Q_EMIT this->pause(playlist, meta); }); connect(m_dataListView, &MusicListDataWidget::resort, this, [ = ](PlaylistPtr playlist, int sortType) { Q_EMIT this->resort(playlist, sortType); }); connect(m_dataListView, &MusicListDataWidget::requestCustomContextMenu, this, [ = ](const QPoint & pos, char type) { Q_EMIT this->requestCustomContextMenu(pos, type); }); connect(m_dataListView, &MusicListDataWidget::addToPlaylist, this, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { Q_EMIT this->addToPlaylist(playlist, metalist); }); connect(m_dataListView, &MusicListDataWidget::musiclistRemove, this, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { Q_EMIT this->musiclistRemove(playlist, metalist); }); connect(m_dataListView, &MusicListDataWidget::musiclistDelete, this, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { Q_EMIT this->musiclistDelete(playlist, metalist); }); connect(m_dataListView, &MusicListDataWidget::showInfoDialog, this, [ = ](const MetaPtr meta) { Q_EMIT this->showInfoDialog(meta); }); connect(m_dataListView, &MusicListDataWidget::updateMetaCodec, this, [ = ](const QString & preTitle, const QString & preArtist, const QString & preAlbum, const MetaPtr meta) { Q_EMIT this->updateMetaCodec(preTitle, preArtist, preAlbum, meta); }); connect(m_dataListView, &MusicListDataWidget::modeChanged, this, [ = ](int mode) { Q_EMIT this->modeChanged(mode); }); connect(m_dataListView, &MusicListDataWidget::importSelectFiles, this, [ = ](PlaylistPtr playlist, QStringList urllist) { Q_EMIT this->importSelectFiles(playlist, urllist); }); connect(m_dataListView, &MusicListDataWidget::addMetasFavourite, this, [ = ](const MetaPtrList & metalist) { Q_EMIT addMetasFavourite(metalist); }); connect(m_dataListView, &MusicListDataWidget::removeMetasFavourite, this, [ = ](const MetaPtrList & metalist) { Q_EMIT removeMetasFavourite(metalist); }); } PlaylistPtr MusicListWidget::curPlaylist() { PlaylistPtr curPlaylist = nullptr; if (m_dataListView != nullptr) curPlaylist = m_dataListView->curPlaylist(); return curPlaylist; } void MusicListWidget::onSearchText(QString str) { m_dataListView->onSearchText(str); } void MusicListWidget::onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta) { m_dataListView->onMusicPlayed(playlist, meta); onCurrentChanged(playlist); } void MusicListWidget::focusOutEvent(QFocusEvent *event) { // TODO: monitor mouse position QPoint mousePos = mapToParent(mapFromGlobal(QCursor::pos())); if (!this->geometry().contains(mousePos)) { if (event && event->reason() == Qt::MouseFocusReason) { DUtil::TimerSingleShot(50, [this]() { qDebug() << "self lost focus hide"; Q_EMIT this->hidePlaylist(); }); } } DWidget::focusOutEvent(event); } void MusicListWidget::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Escape) { m_dataBaseListview->closeAllPersistentEditor(); m_dataBaseListview->clearSelection(); m_dataBaseListview->setCurrentItem(nullptr); m_customizeListview->closeAllPersistentEditor(); m_customizeListview->clearSelection(); m_customizeListview->setCurrentItem(nullptr); } DWidget::keyPressEvent(event); } void MusicListWidget::onPlaylistAdded(PlaylistPtr playlist, bool newflag) { if (playlist == nullptr) { return; } if (playlist->hide()) { return; } if (playlist->id() == AlbumMusicListID || playlist->id() == ArtistMusicListID || playlist->id() == AllMusicListID || playlist->id() == FavMusicListID ) { m_dataBaseListview->addMusicList(playlist); } else { m_customizeListview->closeAllPersistentEditor(); m_customizeListview->addMusicList(playlist, newflag); addFlag = false; } // auto item = new MusicListViewItem(playlist); // if (playlist->id() == AlbumMusicListID || playlist->id() == ArtistMusicListID || // playlist->id() == AllMusicListID || playlist->id() == FavMusicListID ) { // m_dataBaseListview->addItem(item); // } else { // m_customizeListview->addItem(item); // if (addFlag) { // m_customizeListview->clearSelection(); // m_customizeListview->openPersistentEditor(item); // } // addFlag = false; // } if (playlist->playing()) m_dataListView->onMusiclistChanged(playlist); } void MusicListWidget::onCurrentChanged(PlaylistPtr playlist) { if (playlist->id() != SearchMusicListID) { if (playlist) { // m_dataBaseListview->clearSelection(); // m_customizeListview->clearSelection(); } for (int i = 0; i < m_dataBaseListview->count(); ++i) { auto *item = m_dataBaseListview->item(i); auto curPlaylist = m_dataBaseListview->playlistPtr(item); if (playlist == curPlaylist) { Q_EMIT selectedPlaylistChange(curPlaylist); m_dataBaseListview->setCurPlaylist(item); m_customizeListview->setCurPlaylist(nullptr); } } for (int i = 0; i < m_customizeListview->count(); ++i) { auto *item = m_customizeListview->item(i); auto curPlaylist = m_customizeListview->playlistPtr(item); if (playlist == curPlaylist) { Q_EMIT selectedPlaylistChange(curPlaylist); m_customizeListview->setCurPlaylist(item); m_dataBaseListview->setCurPlaylist(nullptr); } } } else { onMusiclistUpdate(); } } void MusicListWidget::onMusiclistChanged(PlaylistPtr playlist) { m_dataListView->onMusiclistChanged(playlist); } void MusicListWidget::onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist) { Q_UNUSED(playlist) Q_UNUSED(metalist) m_dataListView->onMusicListAdded(playlist, metalist); } void MusicListWidget::onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist) { Q_UNUSED(playlist) Q_UNUSED(metalist) m_dataListView->onMusicListRemoved(playlist, metalist); if (playlist->id() == PlayMusicListID && playlist->allmusic().isEmpty()) { // m_dataBaseListview->setCurPlaylist(nullptr); // m_customizeListview->setCurPlaylist(nullptr); } // m_dataBaseListview->setCurPlaylist(nullptr); // m_customizeListview->setCurPlaylist(nullptr); } void MusicListWidget::onMusiclistUpdate() { m_dataListView->onMusiclistUpdate(); } void MusicListWidget::slotTheme(int type) { if (type == 0) type = DGuiApplicationHelper::instance()->themeType(); if (type == 1) { auto palette = this->palette(); palette.setColor(DPalette::Background, QColor("#F8F8F8")); setPalette(palette); } else { auto palette = this->palette(); palette.setColor(DPalette::Background, QColor("#252525")); setPalette(palette); } leftFrame->slotTheme(type); m_dataListView->slotTheme(type); m_dataBaseListview->slotTheme(type); m_customizeListview->slotTheme(type); } void MusicListWidget::changePicture(QPixmap pixmap, QPixmap albumPixmap, QPixmap sidebarPixmap) { leftFrame->changePicture(pixmap, albumPixmap, sidebarPixmap); m_dataListView->changePicture(pixmap, sidebarPixmap, albumPixmap); } void MusicListWidget::onCustomContextMenuRequest(const QPoint &pos, PlaylistPtr selectedlist, PlaylistPtr favlist, QList newlists, char type) { m_dataListView->onCustomContextMenuRequest(pos, selectedlist, favlist, newlists, type); } deepin-music-6.0.1.54/src/music-player/view/musiclistwidget.h000664 000000 000000 00000007271 13703317554 024072 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include "../core/playlist.h" DWIDGET_USE_NAMESPACE class MusicListView; class MusicListDataWidget; class MusicImageButton; class MusicListScrollArea; class MusicListWidget : public DWidget { Q_OBJECT public: explicit MusicListWidget(QWidget *parent = Q_NULLPTR); //void initData(QList playlists, PlaylistPtr last); PlaylistPtr curPlaylist(); signals: void addPlaylist(bool editmode); void selectPlaylist(PlaylistPtr playlist); void hidePlaylist(); void playall(PlaylistPtr playlist); void customResort(const QStringList &uuids); void playMedia(PlaylistPtr playlist, const MetaPtr meta); void resume(PlaylistPtr playlist, const MetaPtr meta); void pause(PlaylistPtr playlist, const MetaPtr meta); void resort(PlaylistPtr playlist, int sortType); void selectedPlaylistChange(PlaylistPtr playlist); void importSelectFiles(PlaylistPtr playlist, QStringList urllist); void requestCustomContextMenu(const QPoint &pos, char type); void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); void musiclistRemove(PlaylistPtr playlist, const MetaPtrList &metalist); void musiclistDelete(PlaylistPtr playlist, const MetaPtrList &metalist); void showInfoDialog(const MetaPtr meta); void updateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta); void modeChanged(int); void addMetasFavourite(const MetaPtrList &metalist); void removeMetasFavourite(const MetaPtrList &metalist); void seaResult(QString searchText, QList resultlist); void closeSearch(); public slots: void onSearchText(QString str); void onMusicPlayed(PlaylistPtr playlist, const MetaPtr); void onPlaylistAdded(PlaylistPtr, bool newflag = false); void onCurrentChanged(PlaylistPtr playlist); void onMusiclistChanged(PlaylistPtr playlist); void onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); void onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist); void onMusiclistUpdate(); void slotTheme(int type); void changePicture(QPixmap pixmap, QPixmap albumPixmap, QPixmap sidebarPixmap); void onCustomContextMenuRequest(const QPoint &pos, PlaylistPtr selectedlist, PlaylistPtr favlist, QListnewlists, char type); protected: virtual void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE; virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; private: MusicListView *m_dataBaseListview; MusicListView *m_customizeListview; MusicListDataWidget *m_dataListView; MusicImageButton *m_addListBtn; MusicListScrollArea *leftFrame; bool addFlag = false; }; deepin-music-6.0.1.54/src/music-player/view/musiclyricwidget.cpp000664 000000 000000 00000034023 13703317554 024567 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclyricwidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../core/util/lyric.h" #include "../core/musicsettings.h" #include "../core/metasearchservice.h" #include "widget/cover.h" #include "widget/searchmetalist.h" #include "widget/searchmetaitem.h" #include "widget/searchlyricswidget.h" #include "widget/lyriclabel.h" #include "widget/musicimagebutton.h" #include "musicsettings.h" #include #include DGUI_USE_NAMESPACE //static const int LyricLineHeight = 40; static const QString defaultLyric = "No Lyric"; class MUsicLyricWidgetPrivate { public: MUsicLyricWidgetPrivate(MUsicLyricWidget *parent): q_ptr(parent) {} MetaPtr activingMeta; Cover *m_cover = nullptr; SearchLyricsWidget *searchLyricsWidget = nullptr; LyricLabel *lyricview = nullptr; DLabel *nolyric = nullptr; MusicImageButton *serachbt = nullptr; QString defaultCover = ":/common/image/cover_max.svg"; bool serachflag = false; QImage backgroundimage; DBlurEffectWidget *backgroundW; MUsicLyricWidget *q_ptr; Q_DECLARE_PUBLIC(MUsicLyricWidget) }; MUsicLyricWidget::MUsicLyricWidget(QWidget *parent) : DWidget(parent), d_ptr(new MUsicLyricWidgetPrivate(this)) { Q_D(MUsicLyricWidget); setAutoFillBackground(true); auto palette = this->palette(); palette.setColor(DPalette::Background, QColor("#F8F8F8")); setPalette(palette); d->backgroundW = new DBlurEffectWidget(this); // d->backgroundW->setBlurEnabled(true); // d->backgroundW->setMode(DBlurEffectWidget::GaussianBlur); auto mainlayout = new QHBoxLayout(this); mainlayout->setMargin(0); mainlayout->setSpacing(0); auto layout = new QHBoxLayout(); layout->setContentsMargins(20, 20, 20, 20); auto musicDir = QStandardPaths::standardLocations(QStandardPaths::MusicLocation); d->searchLyricsWidget = new SearchLyricsWidget(musicDir.first()); d->searchLyricsWidget->hide(); d->m_cover = new Cover; d->m_cover->setFixedSize(200, 200); d->m_cover->setObjectName("LyricCover"); m_leftLayout = new QHBoxLayout(); m_leftLayout->setContentsMargins(120, 0, 140, 0); m_leftLayout->addWidget(d->m_cover, Qt::AlignLeft | Qt::AlignVCenter); m_leftLayout->addWidget(d->searchLyricsWidget); d->lyricview = new LyricLabel(false); d->nolyric = new DLabel(); d->nolyric->setAlignment(Qt::AlignCenter); d->nolyric->setText(tr("No lyrics yet")); QPalette nolyr = d->nolyric->palette(); nolyr.setColor(QPalette::WindowText, QColor(85, 85, 85, 102)); d->nolyric->setPalette(nolyr); auto searchlayout = new QVBoxLayout(); d->serachbt = new MusicImageButton(":/mpimage/light/normal/search_normal.svg", ":/mpimage/light/normal/search_normal.svg", ":/mpimage/light/normal/search_normal.svg"); d->serachbt->setProperty("typeName", true); d->serachbt->setPropertyPic("typeName", false, ":/mpimage/light/normal/back_normal.svg", ":/mpimage/light/normal/back_normal.svg", ":/mpimage/light/normal/back_normal.svg"); d->serachbt->setFixedSize(48, 48); d->serachbt->hide(); searchlayout->addWidget(d->serachbt); searchlayout->addStretch(); searchlayout->setContentsMargins(58, 18, 34, 484); layout->addLayout(m_leftLayout, 0); layout->addWidget(d->lyricview, 10); layout->addWidget(d->nolyric, 10); d->nolyric->hide(); layout->addLayout(searchlayout, 0); d->backgroundW->setLayout(layout); mainlayout->addWidget(d->backgroundW); // bool themeFlag = false; // int themeType = MusicSettings::value("base.play.theme").toInt(&themeFlag); // if (!themeFlag) // themeType = 1; int themeType = DGuiApplicationHelper::instance()->themeType(); slotTheme(themeType); connect(d->serachbt, &DPushButton::clicked, this, &MUsicLyricWidget::onsearchBt); connect(d->searchLyricsWidget, &SearchLyricsWidget::lyricPath, this, &MUsicLyricWidget::slotonsearchresult); } MUsicLyricWidget::~MUsicLyricWidget() { } void MUsicLyricWidget::updateUI() { Q_D(MUsicLyricWidget); d->m_cover->setCoverPixmap(QPixmap(d->defaultCover)); QImage cover(d->defaultCover); //cut image double windowScale = (width() * 1.0) / height(); int imageWidth = static_cast(cover.height() * windowScale) ; QImage coverImage; if (imageWidth > cover.width()) { int imageheight = static_cast(cover.width() / windowScale); coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); } else { int imageheight = cover.height(); coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); } d->backgroundW->setSourceImage(coverImage); d->backgroundimage = cover; } QString MUsicLyricWidget::defaultCover() const { Q_D(const MUsicLyricWidget); return d->defaultCover; } void MUsicLyricWidget::checkHiddenSearch(QPoint mousePos) { Q_UNUSED(mousePos) //Q_D(MUsicLyricWidget); } void MUsicLyricWidget::resizeEvent(QResizeEvent *event) { Q_D(MUsicLyricWidget); QImage cover(d->backgroundimage); //cut image double windowScale = (width() * 1.0) / height(); int imageWidth = static_cast(cover.height() * windowScale); QImage coverImage; if (imageWidth > cover.width()) { int imageheight = static_cast(cover.width() / windowScale); coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); } else { int imageheight = cover.height(); coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); } d->backgroundW->setSourceImage(coverImage); d->backgroundW->update(); QWidget::resizeEvent(event); } void MUsicLyricWidget::mousePressEvent(QMouseEvent *event) { Q_D(MUsicLyricWidget); if (d->serachflag && !d->searchLyricsWidget->rect().contains(event->pos())) { onsearchBt(); } QWidget::mousePressEvent(event); } void MUsicLyricWidget::onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta) { Q_D(MUsicLyricWidget); Q_UNUSED(playlist); d->activingMeta = meta; QFileInfo fileInfo(meta->localPath); QString lrcPath = fileInfo.dir().path() + QDir::separator() + fileInfo.completeBaseName() + ".lrc"; QFile file(lrcPath); if (!file.exists()) { d->nolyric->show(); d->lyricview->hide(); } else { d->nolyric->hide(); d->lyricview->show(); } d->lyricview->getFromFile(lrcPath); d->searchLyricsWidget->setSearchDir(fileInfo.dir().path() + QDir::separator()); QImage cover(d->defaultCover); auto coverData = MetaSearchService::coverData(meta); if (coverData.length() > 0) { cover = QImage::fromData(coverData); } d->m_cover->setCoverPixmap(QPixmap::fromImage(cover)); d->m_cover->update(); d->backgroundimage = cover; //cut image double windowScale = (width() * 1.0) / height(); int imageWidth = static_cast(cover.height() * windowScale); QImage coverImage; if (imageWidth > cover.width()) { int imageheight = static_cast(cover.width() / windowScale); coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); } else { int imageheight = cover.height(); coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); } d->backgroundW->setSourceImage(coverImage); d->backgroundW->update(); } void MUsicLyricWidget::onMusicStop(PlaylistPtr playlist, const MetaPtr meta) { Q_UNUSED(playlist) Q_D(MUsicLyricWidget); QImage cover(d->defaultCover); auto coverData = MetaSearchService::coverData(meta); if (coverData.length() > 0) { cover = QImage::fromData(coverData); } d->m_cover->setCoverPixmap(QPixmap::fromImage(cover)); d->m_cover->update(); d->backgroundimage = cover; //cut image double windowScale = (width() * 1.0) / height(); int imageWidth = static_cast(cover.height() * windowScale); QImage coverImage; if (imageWidth > cover.width()) { int imageheight = static_cast(cover.width() / windowScale); coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); } else { int imageheight = cover.height(); coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); } d->backgroundW->setSourceImage(coverImage); d->backgroundW->update(); } void MUsicLyricWidget::onProgressChanged(qint64 value, qint64 /*length*/) { Q_D(MUsicLyricWidget); d->lyricview->postionChanged(value); } void MUsicLyricWidget::onLyricChanged(const MetaPtr meta, const DMusic::SearchMeta &search, const QByteArray &lyricData) { Q_UNUSED(search) Q_UNUSED(lyricData) Q_D(MUsicLyricWidget); if (d->activingMeta != meta) { return; } } void MUsicLyricWidget::onCoverChanged(const MetaPtr meta, const DMusic::SearchMeta &search, const QByteArray &coverData) { Q_UNUSED(search) Q_D(MUsicLyricWidget); if (d->activingMeta != meta) { return; } QImage cover(d->defaultCover); if (coverData.length() > 0) { cover = QImage::fromData(coverData); } d->backgroundimage = cover; d->m_cover->setCoverPixmap(QPixmap::fromImage(cover)); d->m_cover->update(); //cut image double windowScale = (width() * 1.0) / height(); int imageWidth = static_cast(cover.height() * windowScale); QImage coverImage; if (imageWidth > cover.width()) { int imageheight = static_cast(cover.width() / windowScale); coverImage = cover.copy(0, (cover.height() - imageheight) / 2, cover.width(), imageheight); } else { int imageheight = cover.height(); coverImage = cover.copy((cover.width() - imageWidth) / 2, 0, imageWidth, imageheight); } d->backgroundW->setSourceImage(coverImage); d->backgroundW->update(); } void MUsicLyricWidget::setDefaultCover(QString defaultCover) { Q_D(MUsicLyricWidget); d->defaultCover = defaultCover; } void MUsicLyricWidget::onUpdateMetaCodec(const MetaPtr /*meta*/) { //Q_D(MUsicLyricWidget); // if (d->m_playingMusic == meta) { // d->m_playingMusic.title = meta.title; // d->m_playingMusic.artist = meta.artist; // d->m_playingMusic.album = meta.album; // } } void MUsicLyricWidget::onsearchBt() { Q_D(MUsicLyricWidget); d->serachflag = !d->serachflag; if (d->serachflag) { d->serachbt->setProperty("typeName", false); d->m_cover->hide(); d->searchLyricsWidget->show(); if (d->activingMeta != nullptr) { d->searchLyricsWidget->setDefault(d->activingMeta->title, d->activingMeta->artist); } else { d->searchLyricsWidget->setDefault("", ""); } m_leftLayout->setContentsMargins(51, 21, 51, 19); } else { d->serachbt->setProperty("typeName", true); d->m_cover->show(); d->searchLyricsWidget->hide(); m_leftLayout->setContentsMargins(120, 190, 140, 160); } d->serachbt->update(); } void MUsicLyricWidget::slotonsearchresult(QString path) { Q_D(MUsicLyricWidget); d->lyricview->getFromFile(path); } void MUsicLyricWidget::slotTheme(int type) { Q_D(MUsicLyricWidget); if (type == 0) type = DGuiApplicationHelper::instance()->themeType(); QString rStr; if (type == 1) { rStr = "light"; } else { rStr = "dark"; } if (type == 1) { auto palette = this->palette(); palette.setColor(DPalette::Background, QColor("#F8F8F8")); setPalette(palette); QColor backMaskColor(255, 255, 255, 140); d->backgroundW->setMaskColor(backMaskColor); } else { auto palette = this->palette(); palette.setColor(DPalette::Background, QColor("#252525")); setPalette(palette); QColor backMaskColor(37, 37, 37, 140); d->backgroundW->setMaskColor(backMaskColor); } d->serachbt->setPropertyPic(QString(":/mpimage/%1/normal/search_normal.svg").arg(rStr), QString(":/mpimage/%1/normal/search_normal.svg").arg(rStr), QString(":/mpimage/%1/normal/search_normal.svg").arg(rStr)); d->serachbt->setPropertyPic("typeName", false, QString(":/mpimage/%1/normal/back_normal.svg").arg(rStr), QString(":/mpimage/%1/normal/back_normal.svg").arg(rStr), QString(":/mpimage/%1/normal/back_normal.svg").arg(rStr)); d->searchLyricsWidget->setThemeType(type); d->lyricview->slotTheme(type); } void MUsicLyricWidget::onContextSearchFinished(const QString &context, const QList &metalist) { //Q_D(MUsicLyricWidget); //TODO: check context Q_UNUSED(context); Q_UNUSED(metalist) } deepin-music-6.0.1.54/src/music-player/view/musiclyricwidget.h000664 000000 000000 00000005045 13703317554 024236 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include "core/playlist.h" DWIDGET_USE_NAMESPACE class MUsicLyricWidgetPrivate; class MUsicLyricWidget : public DWidget { Q_OBJECT Q_PROPERTY(QString defaultCover READ defaultCover WRITE setDefaultCover) public: explicit MUsicLyricWidget(QWidget *parent = Q_NULLPTR); ~MUsicLyricWidget() override; void updateUI(); QString defaultCover() const; void checkHiddenSearch(QPoint mousePos); signals: void toggleLyricView(); void requestContextSearch(const QString &context); void changeMetaCache(const MetaPtr meta, const DMusic::SearchMeta &search); public slots: void onProgressChanged(qint64 value, qint64 length); void onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta); void onMusicStop(PlaylistPtr, const MetaPtr); void onLyricChanged(const MetaPtr meta, const DMusic::SearchMeta &search, const QByteArray &lyricData); void onCoverChanged(const MetaPtr meta, const DMusic::SearchMeta &search, const QByteArray &coverData); void onContextSearchFinished(const QString &context, const QList &metalist); void setDefaultCover(QString defaultCover); void onUpdateMetaCodec(const MetaPtr meta); void onsearchBt(); void slotonsearchresult(QString path); void slotTheme(int type); protected: virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; private: QHBoxLayout *m_leftLayout; QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MUsicLyricWidget) }; deepin-music-6.0.1.54/src/music-player/view/playlistwidget.cpp000664 000000 000000 00000042776 13703317554 024263 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "playlistwidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "../core/music.h" #include "../core/playlist.h" #include "../core/musicsettings.h" #include "../core/util/inotifyfiles.h" #include "../core/util/threadpool.h" #include "widget/playlistview.h" #include "widget/ddropdown.h" DWIDGET_USE_NAMESPACE DGUI_USE_NAMESPACE class PlayListWidgetPrivate { public: PlayListWidgetPrivate(PlayListWidget *parent) : q_ptr(parent) {} void initData(PlaylistPtr playlist); void initConntion(); void showEmptyHits(bool empty); DLabel *titleLabel = nullptr; DLabel *infoLabel = nullptr; DLabel *emptyHits = nullptr; DWidget *actionBar = nullptr; DPushButton *btClearAll = nullptr; PlayListView *playListView = nullptr; QAction *customAction = nullptr; InotifyFiles inotifyFiles; PlayListWidget *q_ptr; Q_DECLARE_PUBLIC(PlayListWidget) }; void PlayListWidgetPrivate::initData(PlaylistPtr playlist) { Q_Q(PlayListWidget); if (playlist->id() != PlayMusicListID) return; q->updateInfo(playlist); playListView->onMusiclistChanged(playlist); showEmptyHits(playListView->model()->rowCount() == 0); } void PlayListWidgetPrivate::initConntion() { Q_Q(PlayListWidget); q->connect(btClearAll, &DPushButton::clicked, q, [ = ](bool) { if (playListView->playlist()) { Q_EMIT q->musiclistRemove(playListView->playlist(), playListView->playlist()->allmusic()); } }); q->connect(playListView, &PlayListView::requestCustomContextMenu, q, [ = ](const QPoint & pos) { Q_EMIT q->requestCustomContextMenu(pos, 0); }); q->connect(playListView, &PlayListView::removeMusicList, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistRemove(playListView->playlist(), metalist); q->updateInfo(playListView->playlist()); }); q->connect(playListView, &PlayListView::deleteMusicList, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->musiclistDelete(playListView->playlist(), metalist); q->updateInfo(playListView->playlist()); }); q->connect(playListView, &PlayListView::addToPlaylist, q, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { Q_EMIT q->addToPlaylist(playlist, metalist); q->updateInfo(playListView->playlist()); }); q->connect(playListView, &PlayListView::playMedia, q, [ = ](const MetaPtr meta) { Q_EMIT q->playMedia(playListView->playlist(), meta); }); q->connect(playListView, &PlayListView::resume, q, [ = ](const MetaPtr meta) { Q_EMIT q->resume(playListView->playlist(), meta); }); q->connect(playListView, &PlayListView::pause, q, [ = ](const MetaPtr meta) { Q_EMIT q->pause(playListView->playlist(), meta); }); q->connect(playListView, &PlayListView::showInfoDialog, q, [ = ](const MetaPtr meta) { Q_EMIT q->showInfoDialog(meta); }); q->connect(playListView, &PlayListView::updateMetaCodec, q, [ = ](const QString & preTitle, const QString & preArtist, const QString & preAlbum, const MetaPtr meta) { Q_EMIT q->updateMetaCodec(preTitle, preArtist, preAlbum, meta); }); q->connect(playListView, &PlayListView::addMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->addMetasFavourite(metalist); }); q->connect(playListView, &PlayListView::removeMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->removeMetasFavourite(metalist); }); q->connect(&inotifyFiles, &InotifyFiles::fileChanged, q, [ = ](const QStringList & files) { auto allMetas = playListView->playlist()->allmusic(); int allCount = allMetas.size(); int missCount = 0; if (!allMetas.isEmpty()) { MetaPtrList metalist; for (auto file : files) { for (int i = 0; i < allMetas.size(); i++) { if (file == allMetas[i]->localPath) { metalist.append(allMetas[i]); missCount++; allMetas.removeAt(i); //break; } } } if (allCount == missCount) { if(allCount == 1) Q_EMIT q->fileRemoved(playListView->playlist() ,metalist.at(0), 1); else{ for(MetaPtr meta : metalist) { if(meta == playListView->activingMeta()) { Q_EMIT q->fileRemoved(playListView->playlist() ,metalist.at(0), 1); } } } Q_EMIT q->musiclistRemove(playListView->playlist(), playListView->playlist()->allmusic()); }else if (missCount > 0){ /*************************************************************** * stop current music * *************************************************************/ Q_EMIT q->musiclistRemove(playListView->playlist(), metalist); /**************************************************************** * emit file not found * 1 = Player::ResourceError * ***************************************************************/ for(MetaPtr meta : metalist) { if(meta == playListView->activingMeta()) { Q_EMIT q->fileRemoved(playListView->playlist() ,metalist.at(0), 1); } } } if (!metalist.isEmpty()) { playListView->playlist()->removeMusicList(metalist); } } Q_EMIT q->musicFileMiss(); }); } void PlayListWidgetPrivate::showEmptyHits(bool empty) { auto playlist = playListView->playlist(); if (playlist.isNull() || playlist->id() != SearchMusicListID) { emptyHits->setText(PlayListWidget::tr("No songs")); } else { emptyHits->setText(PlayListWidget::tr("No search results")); } playListView->setVisible(!empty); emptyHits->setVisible(empty); } PlayListWidget::PlayListWidget(QWidget *parent) : DWidget(parent), d_ptr(new PlayListWidgetPrivate(this)) { Q_D(PlayListWidget); // setFixedHeight(314); setAcceptDrops(true); auto layout = new QHBoxLayout(this); layout->setContentsMargins(0, 30, 0, 0); layout->setSpacing(0); d->actionBar = new DWidget; d->actionBar->setFixedWidth(200); d->actionBar->setObjectName("PlayListActionBar"); auto actionBarLayout = new QVBoxLayout(d->actionBar); actionBarLayout->setContentsMargins(36, 0, 8, 0); actionBarLayout->setSpacing(0); d->titleLabel = new DLabel(); //d->titleLabel->setFixedHeight(36); auto titleFont = d->titleLabel->font(); titleFont.setFamily("SourceHanSansSC"); titleFont.setWeight(QFont::Medium); titleFont.setPixelSize(24); d->titleLabel->setFont(titleFont); d->titleLabel->setMargin(4); d->titleLabel->setText(tr("Play Queue")); d->titleLabel->setForegroundRole(DPalette::BrightText); d->infoLabel = new DLabel(); //d->infoLabel->setFixedHeight(25); auto infoFont = d->infoLabel->font(); infoFont.setFamily("SourceHanSansSC"); infoFont.setWeight(QFont::Medium); infoFont.setPixelSize(14); d->infoLabel->setFont(infoFont); d->infoLabel->setMargin(4); auto infoLabelPalette = d->infoLabel->palette(); QColor infoLabelColor = infoLabelPalette.color(DPalette::BrightText); infoLabelColor.setAlphaF(0.5); infoLabelPalette.setColor(DPalette::ButtonText, infoLabelColor); d->infoLabel->setPalette(infoLabelPalette); d->infoLabel->setForegroundRole(DPalette::ButtonText); d->btClearAll = new DPushButton; d->btClearAll->setIcon(QIcon(":/mpimage/light/normal/clear_list_normal.svg")); d->btClearAll->setFont(infoFont); auto playAllPalette = d->btClearAll->palette(); playAllPalette.setColor(DPalette::ButtonText, Qt::white); playAllPalette.setColor(DPalette::Dark, QColor(Qt::darkGray)); playAllPalette.setColor(DPalette::Light, QColor(Qt::darkGray)); d->btClearAll->setPalette(playAllPalette); d->btClearAll->setObjectName("PlayListPlayAll"); d->btClearAll->setText(tr("Empty")); d->btClearAll->setFocusPolicy(Qt::NoFocus); d->btClearAll->setFixedHeight(30); d->emptyHits = new DLabel(this); d->emptyHits->setObjectName("PlayListEmptyHits"); d->emptyHits->hide(); actionBarLayout->addWidget(d->titleLabel); actionBarLayout->addWidget(d->infoLabel); actionBarLayout->addWidget(d->btClearAll, 0, Qt::AlignLeft); actionBarLayout->addStretch(); d->playListView = new PlayListView(false); d->playListView->hide(); layout->addWidget(d->actionBar); layout->addWidget(d->playListView); layout->addWidget(d->emptyHits, 0, Qt::AlignCenter); d->initConntion(); int themeType = DGuiApplicationHelper::instance()->themeType(); slotTheme(themeType); d->inotifyFiles.start(); ThreadPool::instance()->moveToNewThread(&d->inotifyFiles); } PlayListWidget::~PlayListWidget() { } void PlayListWidget::updateInfo(PlaylistPtr playlist) { Q_D(PlayListWidget); QString infoStr; int sortMetasSize = playlist->allmusic().size(); //int sortMetasSize = d->playListView->rowCount(); if (sortMetasSize == 0) { infoStr = tr("No songs"); } else if (sortMetasSize == 1) { infoStr = tr("1 song"); } else { infoStr = tr("%1 songs").arg(sortMetasSize); } d->infoLabel->setText(infoStr); if (playlist.isNull() || playlist->id() != PlayMusicListID || playlist->allmusic().isEmpty()) return; d->inotifyFiles.clear(); for (auto curMeta : playlist->allmusic()) { d->inotifyFiles.addPath(curMeta->localPath); } } void PlayListWidget::setCurPlaylist(PlaylistPtr playlist) { Q_D(PlayListWidget); d->initData(playlist); } PlaylistPtr PlayListWidget::curPlaylist() { Q_D(PlayListWidget); return d->playListView->playlist(); } void PlayListWidget::dragEnterEvent(QDragEnterEvent *event) { DWidget::dragEnterEvent(event); if (event->mimeData()->hasFormat("text/uri-list")) { qDebug() << "acceptProposedAction" << event; event->setDropAction(Qt::CopyAction); event->acceptProposedAction(); return; } } void PlayListWidget::dropEvent(QDropEvent *event) { DWidget::dropEvent(event); Q_D(PlayListWidget); if (!event->mimeData()->hasFormat("text/uri-list")) { return; } auto urls = event->mimeData()->urls(); QStringList localpaths; for (auto &url : urls) { localpaths << url.toLocalFile(); } if (!localpaths.isEmpty() && !d->playListView->playlist().isNull()) { Q_EMIT importSelectFiles(d->playListView->playlist(), localpaths); } } void PlayListWidget::resizeEvent(QResizeEvent *event) { //Q_D(PlayListWidget); DWidget::resizeEvent(event); } void PlayListWidget::onMusicPlayed(PlaylistPtr playlist, const MetaPtr meta) { Q_D(PlayListWidget); if (d->playListView->rowCount() == 0 || playlist != d->playListView->playlist() || playlist->allmusic().size() != d->playListView->rowCount() || playlist->first()->hash != d->playListView->firstHash()) d->initData(playlist); if (playlist != d->playListView->playlist() || meta.isNull()) { return; } QModelIndex index = d->playListView->findIndex(meta); if (!index.isValid()) { return; } auto selectedIndexes = d->playListView->selectionModel()->selectedIndexes(); if (selectedIndexes.size() > 1) { d->playListView->update(); return; } d->playListView->clearSelection(); d->playListView->setCurrentIndex(index); d->playListView->scrollTo(index); d->playListView->update(); } void PlayListWidget::onMusicPause(PlaylistPtr playlist, const MetaPtr meta) { Q_D(PlayListWidget); if (playlist != d->playListView->playlist() || meta.isNull()) { return; } d->playListView->update(); } void PlayListWidget::onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist) { Q_D(PlayListWidget); if (playlist.isNull()) return; if (playlist != d->playListView->playlist() && d->playListView->rowCount() != playlist->allmusic().size()) { return; } d->playListView->onMusicListRemoved(metalist); d->showEmptyHits(d->playListView->model()->rowCount() == 0); updateInfo(playlist); } void PlayListWidget::onMusicError(PlaylistPtr playlist, const MetaPtr meta, int error) { Q_D(PlayListWidget); Q_UNUSED(playlist); d->playListView->onMusicError(meta, error); } void PlayListWidget::onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist) { Q_D(PlayListWidget); if (playlist->id() != PlayMusicListID) { return; } if (playlist != d->playListView->playlist() && d->playListView->rowCount() != playlist->allmusic().size()) { return; } // MetaPtrList curMetalist; // for (auto curMeta : metalist) { // if (!playlist->contains(curMeta)) // curMetalist.append(curMeta); // } // if (curMetalist.isEmpty()) // return; d->playListView->onMusicListAdded(metalist); d->showEmptyHits(metalist.length() == 0); updateInfo(playlist); } void PlayListWidget::onLocate(PlaylistPtr playlist, const MetaPtr meta) { Q_D(PlayListWidget); if (d->playListView->playlist() != playlist) { d->initData(playlist); } d->playListView->onLocate(meta); } void PlayListWidget::onMusiclistChanged(PlaylistPtr playlist) { if (playlist.isNull()) { qWarning() << "can not change to emptry playlist"; return; } Q_D(PlayListWidget); d->initData(playlist); } void PlayListWidget::onCustomContextMenuRequest(const QPoint &pos, PlaylistPtr selectedlist, PlaylistPtr favlist, QList newlists) { Q_D(PlayListWidget); d->playListView->showContextMenu(pos, selectedlist, favlist, newlists); } void PlayListWidget::slotTheme(int type) { Q_D(PlayListWidget); if (type == 0) type = DGuiApplicationHelper::instance()->themeType(); if (type == 1) { // auto titleLabelPalette = d->infoLabel->palette(); // titleLabelPalette.setColor(DPalette::ButtonText, ("#000000")); // d->titleLabel->setPalette(titleLabelPalette); // d->titleLabel->setForegroundRole(DPalette::ButtonText); auto infoLabelPalette = d->infoLabel->palette(); QColor infoLabelColor = infoLabelPalette.color(DPalette::BrightText); infoLabelColor.setAlphaF(0.5); infoLabelPalette.setColor(DPalette::ButtonText, infoLabelColor); d->infoLabel->setPalette(infoLabelPalette); DPalette pl = d->btClearAll ->palette(); pl.setColor(DPalette::ButtonText, QColor("#FFFFFF")); pl.setColor(DPalette::Light, QColor("#646464")); pl.setColor(DPalette::Dark, QColor("#5C5C5C")); QColor sbcolor("#000000"); sbcolor.setAlphaF(0.08); pl.setColor(DPalette::Shadow, sbcolor); d->btClearAll->setPalette(pl); } else { // auto titleLabelPalette = d->infoLabel->palette(); // titleLabelPalette.setColor(DPalette::ButtonText, ("#FFFFFF")); // d->titleLabel->setPalette(titleLabelPalette); // d->titleLabel->setForegroundRole(DPalette::ButtonText); auto infoLabelPalette = d->infoLabel->palette(); QColor infoLabelColor = infoLabelPalette.color(DPalette::BrightText); infoLabelColor.setAlphaF(0.5); infoLabelPalette.setColor(DPalette::ButtonText, infoLabelColor); d->infoLabel->setPalette(infoLabelPalette); DPalette pl = d->btClearAll->palette(); pl.setColor(DPalette::ButtonText, QColor("#FFFFFF")); pl.setColor(DPalette::Light, QColor("#555454")); pl.setColor(DPalette::Dark, QColor("#414141")); QColor sbcolor("#000000"); sbcolor.setAlphaF(0.08); pl.setColor(DPalette::Shadow, sbcolor); d->btClearAll->setPalette(pl); } d->playListView->setThemeType(type); } void PlayListWidget::changePicture(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap) { Q_D(PlayListWidget); d->playListView->setPlayPixmap(pixmap, sidebarPixmap, albumPixmap); } deepin-music-6.0.1.54/src/music-player/view/playlistwidget.h000664 000000 000000 00000007460 13703317554 023717 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "../core/playlist.h" DWIDGET_USE_NAMESPACE class PlayListWidgetPrivate; class PlayListWidget : public DWidget { Q_OBJECT public: explicit PlayListWidget(QWidget *parent = Q_NULLPTR); ~PlayListWidget() override; void updateInfo(PlaylistPtr playlist); void setCurPlaylist(PlaylistPtr playlist); PlaylistPtr curPlaylist(); public slots: void onMusiclistChanged(PlaylistPtr playlist); void onMusicPlayed(PlaylistPtr playlist, const MetaPtr info); void onMusicPause(PlaylistPtr playlist, const MetaPtr meta); void onMusicError(PlaylistPtr playlist, const MetaPtr meta, int error); void onMusicListAdded(PlaylistPtr playlist, const MetaPtrList metalist); void onMusicListRemoved(PlaylistPtr playlist, const MetaPtrList metalist); void onLocate(PlaylistPtr playlist, const MetaPtr meta); void onCustomContextMenuRequest(const QPoint &pos, PlaylistPtr selectedlist, PlaylistPtr favlist, QListnewlists); void slotTheme(int type); void changePicture(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap); signals: void playall(PlaylistPtr playlist); void resort(PlaylistPtr playlist, int sortType); void playMedia(PlaylistPtr playlist, const MetaPtr meta); void resume(PlaylistPtr playlist, const MetaPtr meta); void pause(PlaylistPtr playlist, const MetaPtr meta); void showInfoDialog(const MetaPtr meta); void updateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta); void requestCustomContextMenu(const QPoint &pos, char type); void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); void musiclistRemove(PlaylistPtr playlist, const MetaPtrList &metalist); void musiclistDelete(PlaylistPtr playlist, const MetaPtrList &metalist); void importSelectFiles(PlaylistPtr playlist, QStringList urllist); void addMetasFavourite(const MetaPtrList &metalist); void removeMetasFavourite(const MetaPtrList &metalist); void musicFileMiss(); void fileRemoved(PlaylistPtr playlist ,const MetaPtr meta ,int ); protected: virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; // virtual void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE; // virtual void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE; virtual void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), PlayListWidget) }; extern const QString AlbumMusicListID; extern const QString ArtistMusicListID; extern const QString AllMusicListID; extern const QString FavMusicListID; extern const QString SearchMusicListID; extern const QString PlayMusicListID; extern const QString AlbumCandListID; extern const QString MusicCandListID; extern const QString ArtistCandListID; deepin-music-6.0.1.54/src/music-player/view/shortcut.cpp000664 000000 000000 00000007131 13703317554 023053 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Maintainer: Peng Hui * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "shortcut.h" #include "./core/musicsettings.h" #include Shortcut::Shortcut(QObject *parent) : QObject(parent) { ShortcutGroup group1; ShortcutGroup group2; ShortcutGroup group3; ShortcutGroup group4; group1.groupName = tr("Play"); group2.groupName = tr("Songs"); group3.groupName = tr("Playlists"); group4.groupName = tr("Settings"); auto strPlayPause = MusicSettings::value("shortcuts.all.play_pause").toString(); auto strPrevious = MusicSettings::value("shortcuts.all.previous").toString(); auto strNext = MusicSettings::value("shortcuts.all.next").toString(); auto strVolUP = MusicSettings::value("shortcuts.all.volume_up").toString(); auto strVolDown = MusicSettings::value("shortcuts.all.volume_down").toString(); group1.groupItems << ShortcutItem(tr("Play/Pause"), strPlayPause.toUpper().compare("RETURN")==0?"Enter":strPlayPause) << ShortcutItem(tr("Previous"), strPrevious.toUpper().compare("RETURN")==0?"Enter":strPrevious) << ShortcutItem(tr("Next"), strNext.toUpper().compare("RETURN")==0?"Enter":strNext) << ShortcutItem(tr("Volume Up"), strVolUP.toUpper().compare("RETURN")==0?"Enter":strVolUP) << ShortcutItem(tr("Volume Down"), strVolDown.toUpper().compare("RETURN")==0?"Enter":strVolDown) << ShortcutItem(tr("Mute"), "M"); group2.groupItems << ShortcutItem(tr("Favorite"), "Ctrl+K") << ShortcutItem(tr("Unfavorite"), "Ctrl+Shift+K") << ShortcutItem(tr("Song info"), "Alt+Enter"); group3.groupItems << ShortcutItem(tr("New playlist"), "Ctrl+Shift+N") << ShortcutItem(tr("Add music"), "Ctrl+I") << ShortcutItem(tr("Rename playlist"), "F2") << ShortcutItem(tr("Remove from playlist"), "Delete"); group4.groupItems << ShortcutItem(tr("Help"), "F1") << ShortcutItem(tr("Display shortcuts"), "Ctrl+Shift+?"); m_shortcutGroups << group1 << group2 << group3 << group4; //convert to json object QJsonArray jsonGroups; for (auto scg : m_shortcutGroups) { QJsonObject jsonGroup; jsonGroup.insert("groupName", scg.groupName); QJsonArray jsonGroupItems; for (auto sci : scg.groupItems) { QJsonObject jsonItem; jsonItem.insert("name", sci.name); jsonItem.insert("value", sci.value); jsonGroupItems.append(jsonItem); } jsonGroup.insert("groupItems", jsonGroupItems); jsonGroups.append(jsonGroup); } m_shortcutObj.insert("shortcut", jsonGroups); } QString Shortcut::toStr() { QJsonDocument doc(m_shortcutObj); return doc.toJson().data(); } deepin-music-6.0.1.54/src/music-player/view/shortcut.h000664 000000 000000 00000002446 13703317554 022524 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Deepin Technology Co., Ltd. * * Maintainer: Peng Hui * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef SHORTCUT_H #define SHORTCUT_H #include #include #include #include struct ShortcutItem { QString name; QString value; ShortcutItem(QString n, QString v): name(n), value(v) {} }; struct ShortcutGroup { QString groupName; QList groupItems; }; class Shortcut : public QObject { Q_OBJECT public: explicit Shortcut(QObject *parent = nullptr); QString toStr(); private: QJsonObject m_shortcutObj; QList m_shortcutGroups; }; #endif // SHORTCUT_H deepin-music-6.0.1.54/src/music-player/view/widget/000775 000000 000000 00000000000 13703317554 021755 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/view/widget/closeconfirmdialog.cpp000664 000000 000000 00000010150 13703317554 026321 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "closeconfirmdialog.h" #include #include #include #include #include #include #include #include "core/musicsettings.h" DWIDGET_USE_NAMESPACE class CloseConfirmDialogPrivate { public: CloseConfirmDialogPrivate(CloseConfirmDialog *parent) : q_ptr(parent) {} DRadioButton *exitBt = Q_NULLPTR; DCheckBox *remember = Q_NULLPTR; CloseConfirmDialog *q_ptr; Q_DECLARE_PUBLIC(CloseConfirmDialog) }; CloseConfirmDialog::CloseConfirmDialog(QWidget *parent) : Dtk::Widget::DDialog(parent), d_ptr(new CloseConfirmDialogPrivate(this)) { Q_D(CloseConfirmDialog); auto contentFrame = new DWidget; auto contentLayout = new QVBoxLayout(contentFrame); contentLayout->setSpacing(0); contentLayout->setContentsMargins(0, 0, 0, 0); // auto groupLabel = new DLabel(tr("Please select your operation")); // groupLabel->setObjectName("CloseConfirmDialogLabel"); // auto groupLabelFont = groupLabel->font(); // groupLabelFont.setFamily("SourceHanSansSC"); // groupLabelFont.setWeight(QFont::Medium); // groupLabelFont.setPixelSize(14); // groupLabel->setFont(groupLabelFont); auto actionSelectionGroup = new QGroupBox(); actionSelectionGroup->setContentsMargins(0, 0, 4, 0); actionSelectionGroup->setObjectName("CloseConfirmDialogSelectionGroup"); d->exitBt = new DRadioButton(tr("Exit")); d->exitBt->setObjectName("CloseConfirmDialogExit"); auto miniBt = new DRadioButton(tr("Minimize to system tray")); miniBt->setObjectName("CloseConfirmDialogMini"); auto vbox = new QHBoxLayout; vbox->setContentsMargins(0, 0, 0, 0); vbox->addWidget(d->exitBt); vbox->addWidget(miniBt); actionSelectionGroup->setLayout(vbox); d->remember = new DCheckBox(tr("Do not ask again")); auto font = d->exitBt->font(); font.setFamily("SourceHanSansSC"); font.setWeight(QFont::Medium); font.setPixelSize(14); d->exitBt->setFont(font); miniBt->setFont(font); d->remember->setFont(font); // contentLayout->addWidget(groupLabel, 0, Qt::AlignLeft); // contentLayout->addSpacing(4); // contentLayout->addWidget(actionSelectionGroup, 0, Qt::AlignLeft); // contentLayout->addSpacing(6); // contentLayout->addWidget(d->remember, 0, Qt::AlignLeft); // this->addContent(groupLabel, Qt::AlignLeft); this->setTitle(tr("Please select your operation")); this->addContent(d->exitBt, Qt::AlignLeft); this->addContent(miniBt, Qt::AlignLeft); this->addContent(d->remember, Qt::AlignLeft); setIcon(QIcon::fromTheme("deepin-music")); addContent(contentFrame); addButton(tr("Cancel"), false, ButtonNormal); addButton(tr("Confirm"), true, ButtonRecommend); d->remember->setChecked(!MusicSettings::value("base.close.ask_close_action").toBool()); if (QuitOnClose == MusicSettings::value("base.close.close_action").toInt()) { d->exitBt->setChecked(true); } else { miniBt->setChecked(true); } style()->polish(this); } CloseConfirmDialog::~CloseConfirmDialog() { } bool CloseConfirmDialog::isRemember() const { Q_D(const CloseConfirmDialog); return d->remember->isChecked(); } int CloseConfirmDialog::closeAction() const { Q_D(const CloseConfirmDialog); return d->exitBt->isChecked() ? QuitOnClose : MiniOnClose; } deepin-music-6.0.1.54/src/music-player/view/widget/closeconfirmdialog.h000664 000000 000000 00000002525 13703317554 025775 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include class CloseConfirmDialogPrivate; class CloseConfirmDialog : public Dtk::Widget::DDialog { Q_OBJECT public: enum CloseAction { MiniOnClose = 0, QuitOnClose = 1, }; explicit CloseConfirmDialog(QWidget *parent = Q_NULLPTR); ~CloseConfirmDialog(); bool isRemember() const; int closeAction() const; public Q_SLOTS: private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), CloseConfirmDialog) }; deepin-music-6.0.1.54/src/music-player/view/widget/cover.cpp000664 000000 000000 00000014033 13703317554 023600 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "cover.h" #include #include #include static auto borderPenWidth = 1.0; class CoverPrivate { public: CoverPrivate(Cover *parent): q_ptr(parent) {} int m_radius = 8; QColor m_borderColor; QColor m_shadowColor; QPixmap m_Background; QMarginsF outterMargins = QMarginsF(borderPenWidth, borderPenWidth, borderPenWidth, borderPenWidth); Cover *q_ptr; Q_DECLARE_PUBLIC(Cover) }; Cover::Cover(QWidget *parent) : Label("", parent), d_ptr(new CoverPrivate(this)) { Q_D(Cover); QWidget::setAttribute(Qt::WA_TranslucentBackground, true); d->m_borderColor = QColor(0, 0, 0); d->m_borderColor.setAlphaF(0.08); d->m_shadowColor = QColor(0, 255, 0, 126); // QGraphicsDropShadowEffect *bodyShadow = new QGraphicsDropShadowEffect; // bodyShadow->setBlurRadius(4.0); // bodyShadow->setColor(d->m_shadowColor); // bodyShadow->setOffset(2.0, 4.0); // this->setGraphicsEffect(bodyShadow); // connect(this, &Cover::shadowColorChanged, this, [ = ](QColor shadowColor) { // bodyShadow->setColor(shadowColor); // }); } Cover::~Cover() { } int Cover::radius() const { Q_D(const Cover); return d->m_radius ; } QColor Cover::borderColor() const { Q_D(const Cover); return d->m_borderColor ; } QColor Cover::shadowColor() const { Q_D(const Cover); return d->m_shadowColor ; } void Cover::paintEvent(QPaintEvent *) { Q_D(const Cover); QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing | QPainter::SmoothPixmapTransform); auto radius = d->m_radius; auto innerBorderColor = d->m_borderColor; //auto outerBorderColor = d->m_shadowColor; auto backgroundColor = QColor(255, 255, 255, 255); //auto penWidthf = borderPenWidth; // draw background //auto backgroundRect = QRectF(rect()).marginsRemoved(d->outterMargins); auto backgroundRect = rect(); QPainterPath backgroundPath; backgroundPath.addRoundedRect(backgroundRect, radius, radius); painter.setClipPath(backgroundPath); painter.setPen(Qt::NoPen); if (d->m_Background.isNull()) { painter.fillPath(backgroundPath, backgroundColor); } else { painter.drawPixmap(backgroundRect, d->m_Background); } painter.setBrush(Qt::NoBrush); QPen BorderPen(innerBorderColor); BorderPen.setWidthF(2); painter.setPen(BorderPen); painter.drawRoundedRect(backgroundRect, radius, radius); //画矩形 return; // draw border // QPainterPath innerBorderPath; // QRectF borderRect = QRectF(rect()).marginsRemoved(d->outterMargins); // auto borderRadius = radius; // QMarginsF borderMargin(penWidthf / 2, penWidthf / 2, penWidthf / 2, penWidthf / 2); // borderRadius -= penWidthf / 2; // borderRect = borderRect.marginsRemoved(borderMargin); // innerBorderPath.addRoundedRect(borderRect, borderRadius, borderRadius); // QPen innerBorderPen(innerBorderColor); // innerBorderPen.setWidthF(penWidthf / 2); // painter.strokePath(innerBorderPath, innerBorderPen); // QPainterPath outerBorderPath; // borderRect = QRectF(rect()).marginsRemoved(d->outterMargins); // borderRadius = radius; // borderRadius += penWidthf / 2; // borderRect = borderRect.marginsAdded(borderMargin); // outerBorderPath.addRoundedRect(borderRect, borderRadius, borderRadius); // QPen outerBorderPen(outerBorderColor); // outerBorderPen.setWidthF(penWidthf / 2); // painter.strokePath(outerBorderPath, outerBorderPen); } void Cover::setCoverPixmap(const QPixmap &pixmap) { Q_D(Cover); int radius = d->m_radius; auto ratio = this->devicePixelRatioF(); auto coverRect = QRectF(rect()).marginsRemoved(d->outterMargins); auto sz = coverRect.size().toSize() * ratio; QPixmap backgroundPixmap = pixmap.scaled(sz, Qt::KeepAspectRatioByExpanding); // TODO: fix ratio by Dtk::Widget::DHiDPIHelper backgroundPixmap.setDevicePixelRatio(1); QPixmap maskPixmap(sz); maskPixmap.fill(Qt::transparent); QPainterPath path; path.addRoundedRect(QRectF(0, 0, sz.width(), sz.height()), double(radius), double(radius)); QPainter bkPainter(&maskPixmap); bkPainter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing); bkPainter.fillPath(path, QBrush(Qt::red)); QPainter::CompositionMode mode = QPainter::CompositionMode_SourceIn; QImage resultImage = QImage(sz, QImage::Format_ARGB32_Premultiplied); QPainter painter(&resultImage); painter.setCompositionMode(QPainter::CompositionMode_Source); painter.fillRect(resultImage.rect(), Qt::transparent); painter.setCompositionMode(QPainter::CompositionMode_SourceOver); painter.drawImage(0, 0, maskPixmap.toImage()); painter.setCompositionMode(mode); painter.drawImage(0, 0, backgroundPixmap.toImage()); painter.setCompositionMode(QPainter::CompositionMode_DestinationOver); painter.end(); d->m_Background = QPixmap::fromImage(resultImage); } void Cover::setRadius(int radius) { Q_D(Cover); d->m_radius = radius; } void Cover::setBorderColor(QColor borderColor) { Q_D(Cover); d->m_borderColor = borderColor; } void Cover::setShadowColor(QColor shadowColor) { Q_D(Cover); d->m_shadowColor = shadowColor; } deepin-music-6.0.1.54/src/music-player/view/widget/cover.h000664 000000 000000 00000003246 13703317554 023251 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include "label.h" class CoverPrivate; class Cover : public Label { Q_OBJECT Q_PROPERTY(int radius READ radius WRITE setRadius) Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor) Q_PROPERTY(QColor shadowColor READ shadowColor WRITE setShadowColor NOTIFY shadowColorChanged) public: explicit Cover(QWidget *parent = Q_NULLPTR); ~Cover() override; int radius() const; QColor borderColor() const; QColor shadowColor() const; public slots: void setCoverPixmap(const QPixmap &pixmap); void setRadius(int radius); void setBorderColor(QColor borderColor); void setShadowColor(QColor shadowColor); signals: void shadowColorChanged(QColor shadowColor); protected: virtual void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), Cover) }; deepin-music-6.0.1.54/src/music-player/view/widget/ddropdown.cpp000664 000000 000000 00000011277 13703317554 024471 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "ddropdown.h" #include #include #include #include #include #include class DDropdownPrivate { public: DDropdownPrivate(DDropdown *parent) : q_ptr(parent) {} DMenu *menu = nullptr; DLabel *text = nullptr; DIconButton *dropdown = nullptr; QString status; DDropdown *q_ptr; Q_DECLARE_PUBLIC(DDropdown) }; DDropdown::DDropdown(QWidget *parent) : DWidget(parent), d_ptr(new DDropdownPrivate(this)) { Q_D(DDropdown); setObjectName("DDropdown"); auto layout = new QHBoxLayout(this); layout->setContentsMargins(15, 0, 15, 0); d->menu = new DMenu; d->text = new DLabel("undefined"); auto font = d->text->font(); font.setFamily("SourceHanSansSC"); font.setWeight(QFont::Normal); font.setPixelSize(11); d->text->setFont(font); d->text->setObjectName("DDropdownText"); d->text->setForegroundRole(DPalette::BrightText); d->dropdown = new DIconButton(DStyle::SP_ArrowDown, this); d->dropdown->setIconSize(QSize(9, 9)); d->dropdown->setObjectName("DDropdownIcon"); d->dropdown->setFixedSize(9, 9); d->dropdown->setWindowModality(Qt::WindowModal); DPalette pl = d->dropdown->palette(); pl.setColor(DPalette::Light, QColor(Qt::transparent)); pl.setColor(DPalette::Dark, QColor(Qt::transparent)); QColor sbcolor("#000000"); sbcolor.setAlphaF(0); pl.setColor(DPalette::Shadow, sbcolor); d->dropdown->setPalette(pl); layout->addStretch(); layout->addStretch(); layout->addWidget(d->text, 0, Qt::AlignCenter); layout->addWidget(d->dropdown, 0, Qt::AlignCenter); connect(d->menu, &DMenu::triggered, this, [ = ](QAction * action) { d->text->setText(action->text()); Q_EMIT this->triggered(action); }); connect(this, &DDropdown::requestContextMenu, this, [ = ]() { auto center = this->mapToGlobal(this->rect().topLeft()); center.setY(center.y() + this->height() + 5); d->menu->move(center); d->menu->exec(); }); connect(d->dropdown, &DIconButton::clicked, this, [ = ](bool checked) { Q_UNUSED(checked) Q_EMIT requestContextMenu(); }); } DDropdown::~DDropdown() { } QString DDropdown::status() const { Q_D(const DDropdown); return d->status; } QList DDropdown::actions() const { Q_D(const DDropdown); return d->menu->actions(); } void DDropdown::setText(const QString &text) { Q_D(DDropdown); d->text->setText(text); } void DDropdown::setCurrentAction(QAction *action) { Q_D(DDropdown); if (action) { for (auto action : d->menu->actions()) { action->setChecked(false); } d->text->setText(action->text()); action->setChecked(true); } else { for (auto action : d->menu->actions()) { action->setChecked(false); } } } void DDropdown::setCurrentAction(int index) { Q_UNUSED(index) Q_D(DDropdown); if (!d->menu->actions().isEmpty()) { setCurrentAction(d->menu->actions().first()); } } QAction *DDropdown::addAction(const QString &item, const QVariant &var) { Q_D(DDropdown); auto action = d->menu->addAction(item); auto font = action->font(); font.setFamily("SourceHanSansSC"); font.setWeight(QFont::Medium); action->setData(var); action->setCheckable(true); return action; } void DDropdown::setStatus(QString status) { Q_D(DDropdown); d->status = status; } void DDropdown::enterEvent(QEvent *event) { setStatus("hover"); DWidget::enterEvent(event); update(); } void DDropdown::leaveEvent(QEvent *event) { setStatus(""); DWidget::leaveEvent(event); update(); } void DDropdown::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { Q_EMIT requestContextMenu(); } DWidget::mouseReleaseEvent(event); } deepin-music-6.0.1.54/src/music-player/view/widget/ddropdown.h000664 000000 000000 00000003405 13703317554 024130 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include DWIDGET_USE_NAMESPACE class DDropdownPrivate; class DDropdown : public DWidget { Q_OBJECT Q_PROPERTY(QString status READ status WRITE setStatus NOTIFY statusChanged) public: explicit DDropdown(QWidget *parent = Q_NULLPTR); ~DDropdown(); QString status() const; QList actions() const; signals: void statusChanged(QString status); void requestContextMenu(); void triggered(QAction *action); public slots: void setText(const QString &text); void setCurrentAction(QAction *action); void setCurrentAction(int index = 0); QAction *addAction(const QString &item, const QVariant &var); void setStatus(QString status); protected: virtual void enterEvent(QEvent *event); virtual void leaveEvent(QEvent *event); virtual void mouseReleaseEvent(QMouseEvent *event); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), DDropdown) }; deepin-music-6.0.1.54/src/music-player/view/widget/delegate/000775 000000 000000 00000000000 13703317554 023527 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/view/widget/delegate/lyriclinedelegate.cpp000664 000000 000000 00000007100 13703317554 027716 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "lyriclinedelegate.h" #include #include class LyricLineDelegatePrivate { public: explicit LyricLineDelegatePrivate(LyricLineDelegate *parent): q_ptr(parent) {} QWidget *parentWidget; LyricLineDelegate *q_ptr; Q_DECLARE_PUBLIC(LyricLineDelegate) }; void LyricLineDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { painter->save(); painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::HighQualityAntialiasing); // painter->fillRect(option.rect, option.palette.background()); // painter->setBrush(option.palette.foreground()); // painter->setPen(Qt::blue); // painter->drawRect(option.rect); if (option.state & QStyle::State_Selected) { painter->setPen(option.palette.highlightedText().color()); // painter->setPen(Qt::blue); } else { painter->setPen(option.palette.foreground().color()); } painter->drawText(option.rect, Qt::AlignCenter | Qt::TextWordWrap, index.data().toString()); painter->restore(); } QSize LyricLineDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { auto sh = QStyledItemDelegate::sizeHint(option, index); QFontMetrics fm(option.font); auto textWidth = fm.width(index.data().toString()); auto widgetWidth = option.widget->width(); auto row = textWidth / widgetWidth; if (textWidth > row * widgetWidth) { row += 1; } auto height = row * 16 + sh.height() - 16; sh.setHeight(height); return sh; } QWidget *LyricLineDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { return QStyledItemDelegate::createEditor(parent, option, index); } void LyricLineDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QStyledItemDelegate::setEditorData(editor, index); } void LyricLineDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QStyledItemDelegate::setModelData(editor, model, index); } LyricLineDelegate::LyricLineDelegate(QWidget *parent): QStyledItemDelegate(parent), d_ptr(new LyricLineDelegatePrivate(this)) { Q_D(LyricLineDelegate); d->parentWidget = parent; } LyricLineDelegate::~LyricLineDelegate() { } void LyricLineDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const { QStyledItemDelegate::initStyleOption(option, index); option->state = option->state /*& ~QStyle::State_HasFocus*/; } deepin-music-6.0.1.54/src/music-player/view/widget/delegate/lyriclinedelegate.h000664 000000 000000 00000003513 13703317554 027367 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include class LyricLineDelegatePrivate; class LyricLineDelegate : public QStyledItemDelegate { Q_OBJECT public: LyricLineDelegate(QWidget *parent = Q_NULLPTR); ~LyricLineDelegate(); virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const; void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; void setEditorData(QWidget *editor, const QModelIndex &index) const; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), LyricLineDelegate) }; deepin-music-6.0.1.54/src/music-player/view/widget/delegate/musicinfoitemdelegate.cpp000664 000000 000000 00000034320 13703317554 030603 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musicinfoitemdelegate.h" #include "musicinfoitemdelegate_p.h" #include #include #include #include #include #include "../musiclistinfoview.h" #include "core/medialibrary.h" DWIDGET_USE_NAMESPACE const int PlayItemLeftMargin = 15; const int PlayItemRightMargin = 20; const int PlayItemNumberMargin = 10; static inline int pixel2point(int pixel) { return pixel * 96 / 72; } inline int headerPointWidth(const QStyleOptionViewItem &option, const QModelIndex &index) { QFont measuringFont(option.font); QFontMetrics fm(measuringFont); auto headerWith = fm.width(QString("%1").arg(index.row())); return pixel2point(headerWith) + PlayItemLeftMargin + PlayItemNumberMargin; } inline int tailPointWidth(const QStyleOptionViewItem &option) { QFont measuringFont(option.font); QFontMetrics fm(measuringFont); return pixel2point(fm.width("00:00")) + PlayItemRightMargin; } MusicInfoItemDelegatePrivate::MusicInfoItemDelegatePrivate(MusicInfoItemDelegate *parent): QWidget(nullptr), q_ptr(parent) { } QColor MusicInfoItemDelegatePrivate::textColor() const { return m_textColor; } QColor MusicInfoItemDelegatePrivate::titleColor() const { return m_numberColor; } QColor MusicInfoItemDelegatePrivate::highlightText() const { return m_highlightText; } QColor MusicInfoItemDelegatePrivate::background() const { return m_background; } QColor MusicInfoItemDelegatePrivate::alternateBackground() const { return m_alternateBackground; } QColor MusicInfoItemDelegatePrivate::highlightedBackground() const { return m_highlightedBackground; } QString MusicInfoItemDelegatePrivate::playingIcon() const { return m_aimationPrefix; } QString MusicInfoItemDelegatePrivate::highlightPlayingIcon() const { return m_highlightPlayingIcon; } void MusicInfoItemDelegatePrivate::setTextColor(QColor textColor) { m_textColor = textColor; } void MusicInfoItemDelegatePrivate::setTitleColor(QColor numberColor) { m_numberColor = numberColor; } void MusicInfoItemDelegatePrivate::setHighlightText(QColor highlightText) { m_highlightText = highlightText; } void MusicInfoItemDelegatePrivate::setBackground(QColor background) { m_background = background; } void MusicInfoItemDelegatePrivate::setAlternateBackground(QColor alternateBackground) { m_alternateBackground = alternateBackground; } void MusicInfoItemDelegatePrivate::setHighlightedBackground(QColor highlightedBackground) { m_highlightedBackground = highlightedBackground; } void MusicInfoItemDelegatePrivate::setPlayingIcon(QString playingIcon) { m_aimationPrefix = playingIcon; } void MusicInfoItemDelegatePrivate::setHighlightPlayingIcon(QString highlightPlayingIcon) { m_highlightPlayingIcon = highlightPlayingIcon; } QColor MusicInfoItemDelegatePrivate::foreground(int col, const QStyleOptionViewItem &option) const { if (option.state & QStyle::State_Selected) { return highlightText(); } auto emCol = static_cast(col); switch (emCol) { case MusicInfoItemDelegate::Number: case MusicInfoItemDelegate::Length: return textColor(); case MusicInfoItemDelegate::Title: return titleColor(); default: break; } return textColor(); } inline int MusicInfoItemDelegatePrivate::timePropertyWidth(const QStyleOptionViewItem &option) const { static auto width = tailPointWidth(option); return width; } static inline QFlags alignmentFlag(int col) { auto emCol = static_cast(col); switch (emCol) { case MusicInfoItemDelegate::Number: return Qt::AlignCenter; case MusicInfoItemDelegate::Title: return (Qt::AlignLeft | Qt::AlignVCenter); case MusicInfoItemDelegate::Length: return (Qt::AlignRight | Qt::AlignVCenter); default: break; } return (Qt::AlignLeft | Qt::AlignVCenter);; } static inline QRect colRect(int col, const QStyleOptionViewItem &option) { static auto tailwidth = tailPointWidth(option) + 20; auto w = option.rect.width() - 0 - tailwidth; auto emCol = static_cast(col); switch (emCol) { case MusicInfoItemDelegate::Number: return QRect(10, option.rect.y(), 40, option.rect.height()); case MusicInfoItemDelegate::Title: return QRect(50, option.rect.y(), w / 2 - 20, option.rect.height()); case MusicInfoItemDelegate::Length: return QRect(w, option.rect.y(), tailwidth - 20, option.rect.height()); default: break; } return option.rect.marginsRemoved(QMargins(0, 0, 0, 0)); } void MusicInfoItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { auto listview = qobject_cast(option.widget); //Q_D(const MusicInfoItemDelegate); painter->save(); QFont font11 = option.font; font11.setFamily("SourceHanSansSC"); font11.setWeight(QFont::Normal); font11.setPixelSize(11); QFont font14 = option.font; font14.setFamily("SourceHanSansSC"); font14.setWeight(QFont::Normal); font14.setPixelSize(14); painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::HighQualityAntialiasing); QColor baseColor("#FFFFFF"); baseColor.setAlphaF(0.1); QColor alternateBaseColor("#000000"); alternateBaseColor.setAlphaF(0.02); QColor selecteColor("#000000"); selecteColor.setAlphaF(0.20); if (listview->getThemeType() == 2) { baseColor = QColor("#000000"); baseColor.setAlphaF(0.05); alternateBaseColor = QColor("#FFFFFF"); alternateBaseColor.setAlphaF(0.05); selecteColor = QColor("#FFFFFF"); selecteColor.setAlphaF(0.20); } auto hash = index.data().toString(); auto meta = MediaLibrary::instance()->meta(hash); if (meta.isNull()) { QString msg = "can not find " + hash; qWarning() << msg; return; } QColor nameColor("#090909"), otherColor("#797979"); if (listview->getThemeType() == 2) { nameColor = QColor("#C0C6D4"); otherColor = QColor("#C0C6D4"); } auto activeMeta = listview->playing(); if (activeMeta == meta) { nameColor = QColor("#2CA7F8"); otherColor = QColor("#2CA7F8"); otherColor.setAlphaF(0.5); font14.setFamily("SourceHanSansSC"); font14.setWeight(QFont::Medium); } auto background = (index.row() % 2) == 1 ? baseColor : alternateBaseColor; //auto background = baseColor; int lrWidth = 10; if (!(option.state & QStyle::State_Selected) && !(option.state & QStyle::State_MouseOver) ) { painter->save(); painter->setPen(Qt::NoPen); painter->setBrush(background); //painter->drawRect(option.rect); QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); } if (option.state & QStyle::State_Selected) { painter->save(); painter->setPen(Qt::NoPen); // QColor selectColor("#000000"); // if (listview->getThemeType() == 2) { // selectColor = QColor("#FFFFFF"); // } // selectColor.setAlphaF(0.2); QColor selectColor(option.palette.highlight().color()); painter->setBrush(selectColor); QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); nameColor = option.palette.highlightedText().color(); otherColor = option.palette.highlightedText().color(); }/* else if ((index.row() % 2) == 0) { painter->save(); painter->setPen(Qt::NoPen); painter->setBrush(alternateBaseColor); QRect selecteColorRect = option.rect.adjusted(5, 0, -5, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); }*/ if (option.state & QStyle::State_MouseOver) { painter->save(); painter->setPen(Qt::NoPen); QColor hovertColor(option.palette.shadow().color()); if (option.state & QStyle::State_Selected) hovertColor.setAlphaF(0.2); painter->setBrush(hovertColor); QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); } //painter->fillRect(option.rect, background); int rowCount = listview->model()->rowCount(); auto rowCountSize = QString::number(rowCount).size(); rowCountSize = qMax(rowCountSize, 2); for (int col = 0; col < 3; ++col) { QColor brightTextColor(option.palette.highlight().color()); auto flag = alignmentFlag(col); auto rect = colRect(col, option); switch (col) { case Number: { // Fixme: painter->setPen(otherColor); if (!meta.isNull() && meta->invalid) { auto sz = QSizeF(15, 15); auto icon = QIcon(":/mpimage/light/warning.svg").pixmap(sz.toSize()); auto centerF = QRectF(rect).center(); auto iconRect = QRectF(centerF.x() - sz.width() / 2, centerF.y() - sz.height() / 2, sz.width(), sz.height()); painter->drawPixmap(iconRect, icon, QRectF()); break; } if (activeMeta == meta) { auto icon = listview->getPlayPixmap(); if (option.state & QStyle::State_Selected) { icon = listview->getSidebarPixmap(); } qreal t_ratio = icon.devicePixelRatioF(); QRect t_ratioRect; t_ratioRect.setX(0); t_ratioRect.setY(0); t_ratioRect.setWidth(static_cast(icon.width() / t_ratio)); t_ratioRect.setHeight(static_cast(icon.height() / t_ratio)); auto centerF = QRectF(rect).center(); auto iconRect = QRectF(centerF.x() - t_ratioRect.width() / 2, centerF.y() - t_ratioRect.height() / 2, t_ratioRect.width(), t_ratioRect.height()); painter->drawPixmap(iconRect.toRect(), icon); } else { painter->setFont(font11); auto str = QString("%1").arg(index.row() + 1, rowCountSize, 10, QLatin1Char('0')); QFont font(font11); QFontMetrics fm(font); auto text = fm.elidedText(str, Qt::ElideMiddle, rect.width()); painter->drawText(rect, static_cast(flag), text); } break; } case Title: { painter->setPen(nameColor); painter->setFont(font14); QFont font(font14); QFontMetrics fm(font); auto text = fm.elidedText(meta->title, Qt::ElideMiddle, rect.width()); painter->drawText(rect, static_cast(flag), text); break; } case Length: painter->setPen(otherColor); painter->setFont(font11); painter->drawText(rect, static_cast(flag), DMusic::lengthString(meta->length)); break; default: break; } } painter->restore(); } QSize MusicInfoItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { // Q_D(const MusicInfoItemDelegate); auto baseSize = QStyledItemDelegate::sizeHint(option, index); return QSize(baseSize.width() / 5, baseSize.height()); // auto headerWidth = headerPointWidth(option, index); // auto headerWidth = 17 + 10 + 10 + 4; // auto tialWidth = d->timePropertyWidth(option); // auto w = option.widget->width() - headerWidth - tialWidth; // Q_ASSERT(w > 0); // switch (index.column()) { // case 0: // return QSize(headerWidth, baseSize.height()); // case 1: // return QSize(w / 2, baseSize.height()); // case 2: // case 3: // return QSize(w / 4, baseSize.height()); // case 4: // return QSize(tialWidth, baseSize.height()); // } // return baseSize; } QWidget *MusicInfoItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { return QStyledItemDelegate::createEditor(parent, option, index); } void MusicInfoItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QStyledItemDelegate::setEditorData(editor, index); } void MusicInfoItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QStyledItemDelegate::setModelData(editor, model, index); } MusicInfoItemDelegate::MusicInfoItemDelegate(QWidget *parent) : QStyledItemDelegate(parent), d_ptr(new MusicInfoItemDelegatePrivate(this)) { } MusicInfoItemDelegate::~MusicInfoItemDelegate() { } void MusicInfoItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const { // Q_D(const MusicInfoItemDelegate); QStyledItemDelegate::initStyleOption(option, index); option->state = option->state & ~QStyle::State_HasFocus; } deepin-music-6.0.1.54/src/music-player/view/widget/delegate/musicinfoitemdelegate.h000664 000000 000000 00000004050 13703317554 030245 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include DWIDGET_USE_NAMESPACE class MusicInfoItemDelegatePrivate; class MusicInfoItemDelegate : public QStyledItemDelegate { Q_OBJECT public: enum MusicColumn { Number = 0, Title, Length, }; Q_ENUM(MusicColumn) enum MusicItemDataRole { PlayStatusRole = Qt::UserRole + 100, }; Q_ENUM(MusicItemDataRole) enum PlayStatus { Playing = 0x0098, Strop, }; Q_ENUM(PlayStatus) MusicInfoItemDelegate(QWidget *parent = Q_NULLPTR); ~MusicInfoItemDelegate(); public: virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const; void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; void setEditorData(QWidget *editor, const QModelIndex &index) const; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicInfoItemDelegate) }; deepin-music-6.0.1.54/src/music-player/view/widget/delegate/musicinfoitemdelegate_p.h000664 000000 000000 00000005772 13703317554 030600 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include class PictureSequenceView; class QStyleOptionViewItem; class MusicInfoItemDelegate; class MusicInfoItemDelegatePrivate : public QWidget { Q_OBJECT Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor) Q_PROPERTY(QColor titleColor READ titleColor WRITE setTitleColor) Q_PROPERTY(QColor highlightText READ highlightText WRITE setHighlightText) Q_PROPERTY(QColor background READ background WRITE setBackground) Q_PROPERTY(QColor alternateBackground READ alternateBackground WRITE setAlternateBackground) Q_PROPERTY(QColor highlightedBackground READ highlightedBackground WRITE setHighlightedBackground) Q_PROPERTY(QString playingIcon READ playingIcon WRITE setPlayingIcon) Q_PROPERTY(QString highlightPlayingIcon READ highlightPlayingIcon WRITE setHighlightPlayingIcon) public: int tialWidth = -1; explicit MusicInfoItemDelegatePrivate(MusicInfoItemDelegate *parent = nullptr); inline QColor foreground(int col, const QStyleOptionViewItem &option) const; inline int timePropertyWidth(const QStyleOptionViewItem &option) const; QColor textColor() const; QColor titleColor() const; QColor highlightText() const; QColor background() const; QColor alternateBackground() const; QColor highlightedBackground() const; QString playingIcon() const; QString highlightPlayingIcon() const; public slots: void setTextColor(QColor textColor); void setTitleColor(QColor titleColor); void setHighlightText(QColor highlightText); void setBackground(QColor background); void setAlternateBackground(QColor alternateBackground); void setHighlightedBackground(QColor highlightedBackground); void setPlayingIcon(QString playingIcon); void setHighlightPlayingIcon(QString highlightPlayingIcon); private: QColor m_textColor; QColor m_numberColor; QColor m_highlightText; QColor m_background; QColor m_alternateBackground; QColor m_highlightedBackground; QString m_aimationPrefix = ":/mpimage/light/music1.svg"; QString m_highlightPlayingIcon = ":/mpimage/light/music1.svg"; MusicInfoItemDelegate *q_ptr; Q_DECLARE_PUBLIC(MusicInfoItemDelegate) }; deepin-music-6.0.1.54/src/music-player/view/widget/delegate/musicitemdelegate.cpp000664 000000 000000 00000030112 13703317554 027722 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musicitemdelegate.h" #include "musicitemdelegate_p.h" #include #include #include #include #include #include #include "../musiclistview.h" #include "core/medialibrary.h" DWIDGET_USE_NAMESPACE const int MusicItemLeftMargin = 15; const int MusicItemRightMargin = 20; const int MusicItemNumberMargin = 10; //static inline QString numberString(int row, const QStyleOptionViewItem &option) //{ // auto listview = qobject_cast(option.widget); // auto itemCount = listview->model()->rowCount(); // auto itemCountString = QString("%1").arg(itemCount); // return QString("%1").arg(int(row), itemCountString.length(), 10, QChar('0')); //} static inline int pixel2point(int pixel) { return pixel * 96 / 72; } inline int headerPointWidth(const QStyleOptionViewItem &option, const QModelIndex &index) { QFont measuringFont(option.font); QFontMetrics fm(measuringFont); auto headerWith = fm.width(QString("%1").arg(index.row())); return pixel2point(headerWith) + MusicItemLeftMargin + MusicItemNumberMargin; } inline int tailPointWidth(const QStyleOptionViewItem &option) { QFont measuringFont(option.font); QFontMetrics fm(measuringFont); return pixel2point(fm.width("00:00")) + MusicItemRightMargin; } MusicItemDelegatePrivate::MusicItemDelegatePrivate(MusicItemDelegate *parent): QWidget(nullptr), q_ptr(parent) { setObjectName("MusicItemStyleProxy"); DThemeManager::instance()->registerWidget(this, "MusicItemStyleProxy"); } QColor MusicItemDelegatePrivate::textColor() const { return m_textColor; } QColor MusicItemDelegatePrivate::titleColor() const { return m_numberColor; } QColor MusicItemDelegatePrivate::highlightText() const { return m_highlightText; } QColor MusicItemDelegatePrivate::background() const { return m_background; } QColor MusicItemDelegatePrivate::alternateBackground() const { return m_alternateBackground; } QColor MusicItemDelegatePrivate::highlightedBackground() const { return m_highlightedBackground; } QString MusicItemDelegatePrivate::playingIcon() const { return m_aimationPrefix; } QString MusicItemDelegatePrivate::highlightPlayingIcon() const { return m_highlightPlayingIcon; } void MusicItemDelegatePrivate::setTextColor(QColor textColor) { m_textColor = textColor; } void MusicItemDelegatePrivate::setTitleColor(QColor numberColor) { m_numberColor = numberColor; } void MusicItemDelegatePrivate::setHighlightText(QColor highlightText) { m_highlightText = highlightText; } void MusicItemDelegatePrivate::setBackground(QColor background) { m_background = background; } void MusicItemDelegatePrivate::setAlternateBackground(QColor alternateBackground) { m_alternateBackground = alternateBackground; } void MusicItemDelegatePrivate::setHighlightedBackground(QColor highlightedBackground) { m_highlightedBackground = highlightedBackground; } void MusicItemDelegatePrivate::setPlayingIcon(QString playingIcon) { m_aimationPrefix = playingIcon; } void MusicItemDelegatePrivate::setHighlightPlayingIcon(QString highlightPlayingIcon) { m_highlightPlayingIcon = highlightPlayingIcon; } QColor MusicItemDelegatePrivate::foreground(int col, const QStyleOptionViewItem &option) const { if (option.state & QStyle::State_Selected) { return highlightText(); } auto emCol = static_cast(col); switch (emCol) { case MusicItemDelegate::Number: case MusicItemDelegate::Artist: case MusicItemDelegate::Album: case MusicItemDelegate::Length: return textColor(); case MusicItemDelegate::Title: return titleColor(); case MusicItemDelegate::ColumnButt: break; } return textColor(); } inline int MusicItemDelegatePrivate::timePropertyWidth(const QStyleOptionViewItem &option) const { static auto width = tailPointWidth(option); return width; } static inline QFlags alignmentFlag(int col) { auto emCol = static_cast(col); switch (emCol) { case MusicItemDelegate::Number: case MusicItemDelegate::Title: case MusicItemDelegate::Artist: case MusicItemDelegate::Album: return (Qt::AlignLeft | Qt::AlignVCenter); case MusicItemDelegate::Length: return (Qt::AlignRight | Qt::AlignVCenter); case MusicItemDelegate::ColumnButt: break; } return (Qt::AlignLeft | Qt::AlignVCenter);; } static inline QRect colRect(int col, const QStyleOptionViewItem &option) { static auto tailwidth = tailPointWidth(option) + 20; auto w = option.rect.width() - 0 - tailwidth; auto emCol = static_cast(col); switch (emCol) { case MusicItemDelegate::Number: return QRect(0, option.rect.y(), 40, option.rect.height()); case MusicItemDelegate::Title: return QRect(40, option.rect.y(), w / 2 - 20, option.rect.height()); case MusicItemDelegate::Artist: return QRect(40 + w / 2, option.rect.y(), w / 4 - 20, option.rect.height()); case MusicItemDelegate::Album: return QRect(40 + w / 2 + w / 4, option.rect.y(), w / 4 - 20, option.rect.height()); case MusicItemDelegate::Length: return QRect(w, option.rect.y(), tailwidth - 20, option.rect.height()); case MusicItemDelegate::ColumnButt: break; } return option.rect.marginsRemoved(QMargins(0, 0, 0, 0)); } void MusicItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_D(const MusicItemDelegate); painter->save(); QFont font11 = option.font; font11.setPixelSize(11); QFont font12 = option.font; font12.setPixelSize(12); painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::HighQualityAntialiasing); auto background = (index.row() % 2) == 0 ? d->background() : d->alternateBackground(); if (option.state & QStyle::State_Selected) { background = d->highlightedBackground(); } if (option.state & QStyle::State_HasFocus) { // background = Qt::red; } painter->fillRect(option.rect, background); // painter->setPen(Qt::red); // painter->drawRect(option.rect); auto hash = index.data().toString(); auto meta = MediaLibrary::instance()->meta(hash); if (meta.isNull()) { QString msg = "can not find " + hash; qWarning() << msg; return; // qFatal(msg.toStdString().c_str()); } for (int col = 0; col < ColumnButt; ++col) { auto textColor = d->foreground(col, option); auto flag = alignmentFlag(col); auto rect = colRect(col, option); painter->setPen(textColor); switch (col) { case Number: { auto *listview = qobject_cast(const_cast(option.widget)); // Fixme: auto activeMeta = listview->activingMeta(); if (!meta.isNull() && meta->invalid) { auto sz = QSizeF(15, 15); auto icon = QIcon(":/common/image/warning.svg").pixmap(sz.toSize()); auto centerF = QRectF(rect).center(); auto iconRect = QRectF(centerF.x() - sz.width() / 2, centerF.y() - sz.height() / 2, sz.width(), sz.height()); painter->drawPixmap(iconRect, icon, QRectF()); break; } if (activeMeta == meta) { auto playingIcon = d->playingIcon(); if (option.state & QStyle::State_Selected) { playingIcon = d->highlightPlayingIcon(); } auto icon = QPixmap(playingIcon); auto centerF = QRectF(rect).center(); auto iconRect = QRectF(centerF.x() - icon.width() / 2, centerF.y() - icon.height() / 2, icon.width(), icon.height()); painter->drawPixmap(iconRect.toRect(), icon); } break; } case Title: { painter->setFont(font12); QFont font(font12); QFontMetrics fm(font); auto text = fm.elidedText(meta->title, Qt::ElideMiddle, rect.width()); painter->drawText(rect, flag, text); break; } case Artist: { painter->setFont(font11); auto str = meta->artist.isEmpty() ? MusicListView::tr("Unknown artist") : meta->artist; QFont font(font11); QFontMetrics fm(font); auto text = fm.elidedText(str, Qt::ElideMiddle, rect.width()); painter->drawText(rect, flag, text); break; } case Album: { painter->setFont(font11); auto str = meta->album.isEmpty() ? MusicListView::tr("Unknown album") : meta->album; QFont font(font11); QFontMetrics fm(font); auto text = fm.elidedText(str, Qt::ElideMiddle, rect.width()); painter->drawText(rect, flag, text); break; } case Length: painter->setFont(font11); painter->drawText(rect, flag, DMusic::lengthString(meta->length)); break; default: break; } } painter->restore(); } QSize MusicItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_D(const MusicItemDelegate); auto baseSize = QStyledItemDelegate::sizeHint(option, index); return QSize(baseSize.width() / 5, baseSize.height()); // auto headerWidth = headerPointWidth(option, index); auto headerWidth = 17 + 10 + 10 + 4; auto tialWidth = d->timePropertyWidth(option); auto w = option.widget->width() - headerWidth - tialWidth; Q_ASSERT(w > 0); switch (index.column()) { case 0: return QSize(headerWidth, baseSize.height()); case 1: return QSize(w / 2, baseSize.height()); case 2: case 3: return QSize(w / 4, baseSize.height()); case 4: return QSize(tialWidth, baseSize.height()); } return baseSize; } QWidget *MusicItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { return QStyledItemDelegate::createEditor(parent, option, index); } void MusicItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QStyledItemDelegate::setEditorData(editor, index); } void MusicItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QStyledItemDelegate::setModelData(editor, model, index); } MusicItemDelegate::MusicItemDelegate(QWidget *parent) : QStyledItemDelegate(parent), d_ptr(new MusicItemDelegatePrivate(this)) { } MusicItemDelegate::~MusicItemDelegate() { } void MusicItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const { // Q_D(const MusicItemDelegate); QStyledItemDelegate::initStyleOption(option, index); option->state = option->state & ~QStyle::State_HasFocus; } deepin-music-6.0.1.54/src/music-player/view/widget/delegate/musicitemdelegate.h000664 000000 000000 00000004055 13703317554 027376 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include class MusicItemDelegatePrivate; class MusicItemDelegate : public QStyledItemDelegate { Q_OBJECT public: enum MusicColumn { Number = 0, Title, Artist, Album, Length, ColumnButt, }; Q_ENUM(MusicColumn) enum MusicItemDataRole { PlayStatusRole = Qt::UserRole + 100, }; Q_ENUM(MusicItemDataRole) enum PlayStatus { Playing = 0x0098, Strop, }; Q_ENUM(PlayStatus) MusicItemDelegate(QWidget *parent = Q_NULLPTR); ~MusicItemDelegate(); public: virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const; void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; void setEditorData(QWidget *editor, const QModelIndex &index) const; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicItemDelegate) }; deepin-music-6.0.1.54/src/music-player/view/widget/delegate/musicitemdelegate_p.h000664 000000 000000 00000005636 13703317554 027723 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include class PictureSequenceView; class QStyleOptionViewItem; class MusicItemDelegate; class MusicItemDelegatePrivate : public QWidget { Q_OBJECT Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor) Q_PROPERTY(QColor titleColor READ titleColor WRITE setTitleColor) Q_PROPERTY(QColor highlightText READ highlightText WRITE setHighlightText) Q_PROPERTY(QColor background READ background WRITE setBackground) Q_PROPERTY(QColor alternateBackground READ alternateBackground WRITE setAlternateBackground) Q_PROPERTY(QColor highlightedBackground READ highlightedBackground WRITE setHighlightedBackground) Q_PROPERTY(QString playingIcon READ playingIcon WRITE setPlayingIcon) Q_PROPERTY(QString highlightPlayingIcon READ highlightPlayingIcon WRITE setHighlightPlayingIcon) public: int tialWidth = -1; explicit MusicItemDelegatePrivate(MusicItemDelegate *parent = 0); inline QColor foreground(int col, const QStyleOptionViewItem &option) const; inline int timePropertyWidth(const QStyleOptionViewItem &option) const; QColor textColor() const; QColor titleColor() const; QColor highlightText() const; QColor background() const; QColor alternateBackground() const; QColor highlightedBackground() const; QString playingIcon() const; QString highlightPlayingIcon() const; public slots: void setTextColor(QColor textColor); void setTitleColor(QColor titleColor); void setHighlightText(QColor highlightText); void setBackground(QColor background); void setAlternateBackground(QColor alternateBackground); void setHighlightedBackground(QColor highlightedBackground); void setPlayingIcon(QString playingIcon); void setHighlightPlayingIcon(QString highlightPlayingIcon); private: QColor m_textColor; QColor m_numberColor; QColor m_highlightText; QColor m_background; QColor m_alternateBackground; QColor m_highlightedBackground; QString m_aimationPrefix; QString m_highlightPlayingIcon; MusicItemDelegate *q_ptr; Q_DECLARE_PUBLIC(MusicItemDelegate) }; deepin-music-6.0.1.54/src/music-player/view/widget/delegate/musiclistdatadelegate.cpp000664 000000 000000 00000073640 13703317554 030606 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistdatadelegate.h" #include #include #include #include #include #include #include "../musiclistdataview.h" QT_BEGIN_NAMESPACE extern Q_WIDGETS_EXPORT void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0); QT_END_NAMESPACE const int PlayItemRightMargin = 20; static inline int pixel2point(int pixel) { return pixel * 96 / 72; } class MusicListDataDelegatePrivate { public: explicit MusicListDataDelegatePrivate(MusicListDataDelegate *parent): q_ptr(parent) { shadowImg = shadowImg.copy(5, 5, shadowImg.width() - 10, shadowImg.height() - 10); } QWidget *parentWidget; QPixmap playing = DHiDPIHelper::loadNxPixmap(":/common/image/jumpto_playing_normal.svg"); // QString playingIcon = ":/mpimage/light/music1.svg"; // QString highlightPlayingIcon = ":/mpimage/light/music1.svg"; QPixmap hoverPlayImg = DHiDPIHelper::loadNxPixmap(":/mpimage/dark/hover/play_hover.svg"); QPixmap hoverSuspendImg = DHiDPIHelper::loadNxPixmap(":/mpimage/dark/hover/suspend_hover.svg"); QPixmap shadowImg = DHiDPIHelper::loadNxPixmap(":/mpimage/light/shadow.svg"); MusicListDataDelegate *q_ptr; bool containsMusic(QString uuid, MetaPtr playing, PlayMusicTypePtr currentList)const; Q_DECLARE_PUBLIC(MusicListDataDelegate) }; bool MusicListDataDelegatePrivate::containsMusic(QString uuid, MetaPtr playing, PlayMusicTypePtr currentList)const { if (uuid == AlbumResultListID || uuid == AlbumMusicListID) { if (playing->album == currentList->playlistMeta.metas.first()->album) { return true; } } if (uuid == ArtistResultListID || uuid == ArtistMusicListID) { if (playing->artist == currentList->playlistMeta.metas.first()->artist) { return true; } } return false; } void MusicListDataDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_D(const MusicListDataDelegate); //QStyledItemDelegate::paint(painter, option, index); auto listview = qobject_cast(option.widget); PlaylistPtr playlistPtr = listview->playlist(); auto playMusicTypePtrList = listview->playMusicTypePtrList(); if (index.row() >= playMusicTypePtrList.size()) { return; } auto PlayMusicTypePtr = playMusicTypePtrList[index.row()]; // if (listview->playing() != nullptr && listview->playing()->album != PlayMusicTypePtr->name){ // return // } if (listview->viewMode() == QListView::IconMode) { //QStyledItemDelegate::paint(painter, option, index); painter->save(); painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::HighQualityAntialiasing); painter->setRenderHint(QPainter::SmoothPixmapTransform); auto background = option.palette.background(); if (option.state & QStyle::State_Selected) { // background = option.palette.highlight(); } painter->fillRect(option.rect, background); //draw shadow // int shadowBorderWidth = 10; // QRect shadowRect = option.rect.adjusted(shadowBorderWidth, shadowBorderWidth, -shadowBorderWidth, -shadowBorderWidth);; // QPainterPath roundRectShadowPath; // roundRectShadowPath.addRoundRect(shadowRect, 10, 10); // painter->save(); // painter->setClipPath(roundRectShadowPath); // painter->drawPixmap(shadowRect, d->shadowImg); // painter->restore(); //绘制阴影 QRect shadowRect(option.rect.x() - 10, option.rect.y(), 158, 158); QPainterPath roundRectShadowPath; roundRectShadowPath.addRoundRect(shadowRect, 8, 8); painter->save(); painter->setClipPath(roundRectShadowPath); painter->drawPixmap(shadowRect, d_ptr->shadowImg); painter->restore(); int borderWidth = 0; QRect rect = option.rect.adjusted(borderWidth, borderWidth, -borderWidth, -borderWidth); QPainterPath roundRectPath; roundRectPath.addRoundRect(rect, 10, 10); painter->setClipPath(roundRectPath); auto icon = option.icon; auto value = index.data(Qt::DecorationRole); if (value.type() == QVariant::Icon) { icon = qvariant_cast(value); } painter->drawPixmap(rect, icon.pixmap(rect.width(), rect.width())); //draw border painter->save(); QColor borderPenColor("#000000"); borderPenColor.setAlphaF(0.05); QPen borderPen(borderPenColor); borderPen.setWidthF(2); painter->setPen(borderPen); painter->drawRoundRect(rect/*.adjusted(1, 1, -1, 1)*/, 10, 10); painter->restore(); bool playFlag = false; if (PlayMusicTypePtr->extraName.isEmpty()) { QColor fillColor(0, 0, 0); fillColor.setAlphaF(0.3); if (listview->getThemeType() == 2) { fillColor = "#000000"; fillColor.setAlphaF(0.3); } if (listview->playing() != nullptr && listview->playingState() && d->containsMusic(listview->playlist()->id(), listview->playing(), PlayMusicTypePtr)) { playFlag = true; } QRect fillBlurRect(rect.x(), rect.y() + rect.height() - 36, rect.width(), 36); int curFillSize = 36; if (playFlag) { fillBlurRect = QRect(rect.x(), rect.y() + rect.height() - 64, rect.width(), 70); curFillSize = 64; } //设置模糊 QImage t_image = icon.pixmap(rect.width(), rect.height()).toImage(); qreal t_ratio = t_image.devicePixelRatioF(); curFillSize = static_cast( curFillSize * t_ratio); t_image = t_image.copy(0, rect.height() - curFillSize, t_image.width(), curFillSize); QTransform old_transform = painter->transform(); painter->translate(fillBlurRect.topLeft()); qt_blurImage(painter, t_image, 35, false, false); painter->setTransform(old_transform); //设置模糊 painter->fillRect(fillBlurRect, fillColor); //draw playing if (playFlag) { if (option.state & QStyle::State_MouseOver) { painter->drawPixmap(QRect(rect.x() + 60, rect.y() + 88, 40, 40), d->hoverSuspendImg); } else { painter->drawPixmap(QRect(rect.x() + 64, rect.y() + 96, 22, 18), listview->getAlbumPixmap()); } } QRect fillRect(rect.x(), rect.y() + rect.height() - 36, rect.width(), 36); QFont font = option.font; font.setFamily("SourceHanSansSC"); font.setWeight(QFont::Normal); font.setPixelSize(14); painter->setFont(font); QFontMetrics fm(font); fillRect.adjust(8, 0, -7, 0); auto text = fm.elidedText(PlayMusicTypePtr->name, Qt::ElideMiddle, fillRect.width()); painter->setPen(Qt::white); painter->drawText(fillRect, Qt::AlignLeft | Qt::AlignVCenter, text); } else { QColor fillColor(0, 0, 0); fillColor.setAlphaF(0.3); if (listview->getThemeType() == 2) { fillColor = "#000000"; fillColor.setAlphaF(0.3); } int startHeight = rect.y() + rect.height() - 46; int fillAllHeight = 46; int curFillSize = fillAllHeight; QRect fillBlurRect(rect.x(), rect.y() + rect.height() - fillAllHeight, rect.width(), fillAllHeight); if (listview->playing() != nullptr && listview->playingState() && d->containsMusic(listview->playlist()->id(), listview->playing(), PlayMusicTypePtr)) { playFlag = true; } if (playFlag) { fillBlurRect = QRect(rect.x(), rect.y() + rect.height() - 80, rect.width(), 86); curFillSize = 80; } //设置模糊 QImage t_image = icon.pixmap(rect.width(), rect.height()).toImage(); qreal t_ratio = t_image.devicePixelRatioF(); curFillSize = static_cast( curFillSize * t_ratio); t_image = t_image.copy(0, rect.height() - curFillSize, t_image.width(), curFillSize); QTransform old_transform = painter->transform(); painter->translate(fillBlurRect.topLeft()); qt_blurImage(painter, t_image, 35, false, false); painter->setTransform(old_transform); //设置模糊 painter->fillRect(fillBlurRect, fillColor); //draw playing if (playFlag) { if (option.state & QStyle::State_MouseOver) { painter->drawPixmap(QRect(rect.x() + 60, rect.y() + 88, 40, 40), d->hoverSuspendImg); } else { painter->drawPixmap(QRect(rect.x() + 64, rect.y() + 96, 22, 18), listview->getAlbumPixmap()); } } QRect fillRect(rect.x(), startHeight, rect.width(), fillAllHeight); QFont font = option.font; font.setPixelSize(14); painter->setFont(font); QFontMetrics fm(font); QRect nameFillRect(rect.x(), startHeight + 2, rect.width(), fillAllHeight / 2); nameFillRect.adjust(8, 0, -7, 0); auto nameText = fm.elidedText(PlayMusicTypePtr->name, Qt::ElideMiddle, nameFillRect.width()); painter->setPen(Qt::white); painter->drawText(nameFillRect, Qt::AlignLeft | Qt::AlignTop, nameText); font.setPixelSize(10); QFontMetrics extraNameFm(font); painter->setFont(font); QRect extraNameFillRect(rect.x(), startHeight + fillAllHeight / 2 + 1, rect.width(), fillAllHeight / 2); extraNameFillRect.adjust(8, 0, -7, 0); auto extraNameText = extraNameFm.elidedText(PlayMusicTypePtr->extraName, Qt::ElideMiddle, extraNameFillRect.width()); painter->setPen(Qt::white); painter->drawText(extraNameFillRect, Qt::AlignLeft | Qt::AlignTop, extraNameText); } QBrush t_fillBrush(QColor(128, 128, 128, 0)); QColor fillColor(0, 0, 0); fillColor.setAlphaF(0.3); if (listview->getThemeType() == 2) { fillColor = "#000000"; fillColor.setAlphaF(0.3); } if (option.state & QStyle::State_Selected) { t_fillBrush = QBrush(QColor(128, 128, 128, 90)); } if ((option.state & QStyle::State_MouseOver) && !playFlag) { if (!playlistPtr->playingStatus() || !playFlag ) { QImage t_image = icon.pixmap(rect.width(), rect.height()).toImage(); int t_ratio = static_cast(t_image.devicePixelRatioF()); QRect t_imageRect(rect.width() / 2 - 25, rect.height() / 2 - 25, 50 * t_ratio, 50 * t_ratio); t_image = t_image.copy(t_imageRect); QRect t_hoverRect(rect.x() + 50, rect.y() + 36, 50 * t_ratio, 50 * t_ratio); QTransform old_transform = painter->transform(); painter->translate(t_hoverRect.topLeft()); QPainterPath t_imageClipPath; t_imageClipPath.addEllipse(QRect(0, 0, 50, 50)); painter->setClipPath(t_imageClipPath); qt_blurImage(painter, t_image, 30, false, false); painter->setTransform(old_transform); painter->fillRect(t_hoverRect, fillColor); QPixmap t_hoverPlayImg(d->hoverPlayImg); t_hoverPlayImg.setDevicePixelRatio(option.widget->devicePixelRatioF()); // t_hoverRect.adjust(0, 0, -7 * t_ratio, -7 * t_ratio); QRect t_pixMapRect(rect.x() + 53, rect.y() + 40, 43, 43); QIcon icon(t_hoverPlayImg); painter->drawPixmap(t_pixMapRect, t_hoverPlayImg); } /*else { QPixmap t_hoverPlayImg(d->hoverSuspendImg); t_hoverPlayImg.setDevicePixelRatio(option.widget->devicePixelRatioF()); // t_hoverRect.adjust(0, 0, -7 * t_ratio, -7 * t_ratio); QRect t_pixMapRect(rect.x() + 53, rect.y() + 40, 43, 43); QIcon icon(t_hoverPlayImg); painter->drawPixmap(t_pixMapRect, t_hoverPlayImg); }*/ } painter->fillRect(option.rect, t_fillBrush); painter->restore(); } else { painter->save(); painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::HighQualityAntialiasing); QColor baseColor("#FFFFFF"); baseColor.setAlphaF(0.1); QColor alternateBaseColor("#000000"); alternateBaseColor.setAlphaF(0.02); QColor selecteColor("#000000"); selecteColor.setAlphaF(0.10); if (listview->getThemeType() == 2) { baseColor.setAlphaF(0.05); alternateBaseColor.setAlphaF(0.05); selecteColor = QColor("#FFFFFF"); selecteColor.setAlphaF(0.20); } auto background = (index.row() % 2) == 1 ? baseColor : alternateBaseColor; //auto background = baseColor; int lrWidth = 10; if (!(option.state & QStyle::State_Selected) && !(option.state & QStyle::State_MouseOver) ) { painter->save(); painter->setPen(Qt::NoPen); painter->setBrush(background); //painter->drawRect(option.rect); QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); //painter->fillRect(option.rect, background); } if (option.state & QStyle::State_Selected) { painter->save(); painter->setPen(Qt::NoPen); // QColor selectColor("#000000"); // if (listview->getThemeType() == 2) { // selectColor = QColor("#FFFFFF"); // } // selectColor.setAlphaF(0.2); QColor selectColor(option.palette.highlight().color()); painter->setBrush(selectColor); QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); }/* else if ((index.row() % 2) == 0) { painter->save(); painter->setPen(Qt::NoPen); painter->setBrush(alternateBaseColor); QRect selecteColorRect = option.rect.adjusted(5, 0, -5, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); }*/ if (option.state & QStyle::State_MouseOver) { painter->save(); painter->setPen(Qt::NoPen); QColor hovertColor(option.palette.shadow().color()); if (option.state & QStyle::State_Selected) hovertColor.setAlphaF(0.2); painter->setBrush(hovertColor); QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); } QColor nameColor("#090909"), otherColor("#797979"); otherColor.setAlphaF(0.5); if (listview->getThemeType() == 2) { nameColor = QColor("#C0C6D4"); otherColor = QColor("#C0C6D4"); otherColor.setAlphaF(0.5); } if (PlayMusicTypePtr->extraName.isEmpty()) { //QStyledItemDelegate::paint(painter, option, index); QFont font11 = option.font; font11.setFamily("SourceHanSansSC"); font11.setWeight(QFont::Normal); font11.setPixelSize(11); QFont font14 = option.font; font14.setFamily("SourceHanSansSC"); font14.setWeight(QFont::Normal); font14.setPixelSize(14); QFontMetrics songsFm(font14); auto tailwidth = pixel2point(songsFm.width("0000-00-00")) + PlayItemRightMargin + 20; auto w = option.rect.width() - 0 - tailwidth; bool playingFlag = false; if (listview->playing() != nullptr && (listview->playing()->artist == PlayMusicTypePtr->name || (listview->playing()->artist.isEmpty() && !PlayMusicTypePtr->playlistMeta.metas.isEmpty() && PlayMusicTypePtr->playlistMeta.metas.begin().value()->artist.isEmpty()))) { if (option.state & QStyle::State_Selected) { nameColor = option.palette.highlightedText().color(); otherColor = option.palette.highlightedText().color(); } else { nameColor = QColor("#2CA7F8"); otherColor = QColor("#2CA7F8"); } font14.setFamily("SourceHanSansSC"); font14.setWeight(QFont::Medium); playingFlag = true; } else { if (option.state & QStyle::State_Selected) { nameColor = option.palette.highlightedText().color(); otherColor = option.palette.highlightedText().color(); } } //icon if (playlistPtr->searchStr().isEmpty()) { if (!playingFlag) { QRect numRect(lrWidth + 10, option.rect.y() + 3, 32, 32); auto icon = option.icon; auto value = index.data(Qt::DecorationRole); if (value.type() == QVariant::Icon) { icon = qvariant_cast(value); } painter->save(); QPainterPath clipPath; clipPath.addEllipse(numRect.adjusted(4, 4, -4, -4)); painter->setClipPath(clipPath); painter->drawPixmap(numRect, icon.pixmap(numRect.width(), numRect.width())); painter->restore(); } else { QRect numRect(lrWidth + 10, option.rect.y(), 40, option.rect.height()); auto icon = listview->getPlayPixmap(); if (option.state & QStyle::State_Selected) { icon = listview->getSidebarPixmap(); } qreal t_ratio = icon.devicePixelRatioF(); auto centerF = numRect.center(); QRect t_ratioRect; t_ratioRect.setX(0); t_ratioRect.setY(0); t_ratioRect.setWidth(static_cast(icon.width() / t_ratio)); t_ratioRect.setHeight(static_cast(icon.height() / t_ratio)); auto iconRect = QRectF(centerF.x() - t_ratioRect.width() / 2, centerF.y() - t_ratioRect.height() / 2, t_ratioRect.width(), t_ratioRect.height()); painter->drawPixmap(iconRect.toRect(), icon); } } else { int rowCount = listview->model()->rowCount(); auto rowCountSize = QString::number(rowCount).size(); rowCountSize = qMax(rowCountSize, 2); QFont measuringFont(font11); painter->setPen(otherColor); QRect numRect(lrWidth + 10, option.rect.y(), 40, option.rect.height()); painter->setFont(font11); auto str = QString("%1").arg(index.row() + 1, rowCountSize, 10, QLatin1Char('0')); QFont font(font11); QFontMetrics fm(font); auto text = fm.elidedText(str, Qt::ElideMiddle, numRect.width()); painter->drawText(numRect, Qt::AlignCenter, text); } painter->setPen(nameColor); //name QRect nameRect(59, option.rect.y(), w / 2 - 20, option.rect.height()); painter->setFont(font14); auto nameText = songsFm.elidedText(PlayMusicTypePtr->name, Qt::ElideMiddle, nameRect.width()); painter->drawText(nameRect, Qt::AlignLeft | Qt::AlignVCenter, nameText); int sortMetasSize = PlayMusicTypePtr->playlistMeta.sortMetas.size(); QString infoStr; if (sortMetasSize == 0) { infoStr = QString(" ") + tr("No songs"); } else if (sortMetasSize == 1) { infoStr = QString(" ") + tr("1 song"); } else { infoStr = QString(" ") + tr("%1 songs").arg(sortMetasSize); } painter->setPen(otherColor); painter->setFont(font11); QRect rect(w, option.rect.y(), tailwidth - 20, option.rect.height()); painter->drawText(rect, Qt::AlignRight | Qt::AlignVCenter, infoStr); } else { QFont font11 = option.font; font11.setFamily("SourceHanSansSC"); font11.setWeight(QFont::Normal); font11.setPixelSize(11); QFont font14 = option.font; font14.setFamily("SourceHanSansSC"); font14.setWeight(QFont::Normal); font14.setPixelSize(14); int rowCount = listview->model()->rowCount(); auto rowCountSize = QString::number(rowCount).size(); rowCountSize = qMax(rowCountSize, 2); QFontMetrics songsFm(font11); auto tailwidth = pixel2point(songsFm.width("0000-00-00")) + PlayItemRightMargin + 20; auto w = option.rect.width() - 0 - tailwidth; //num if (listview->playing() != nullptr && listview->playingState() && (listview->playing()->album == PlayMusicTypePtr->name || (listview->playing()->album.isEmpty() && !PlayMusicTypePtr->playlistMeta.metas.isEmpty() && PlayMusicTypePtr->playlistMeta.metas.begin().value()->album.isEmpty()))) { if (option.state & QStyle::State_Selected) { nameColor = option.palette.highlightedText().color(); otherColor = option.palette.highlightedText().color(); } else { nameColor = QColor("#2CA7F8"); otherColor = QColor("#2CA7F8"); } font14.setFamily("SourceHanSansSC"); font14.setWeight(QFont::Medium); QRect numRect(lrWidth, option.rect.y(), 40, option.rect.height()); auto icon = listview->getPlayPixmap(); if (option.state & QStyle::State_Selected) { icon = listview->getSidebarPixmap(); } qreal t_ratio = icon.devicePixelRatioF(); auto centerF = numRect.center(); QRect t_ratioRect; t_ratioRect.setX(0); t_ratioRect.setY(0); t_ratioRect.setWidth(static_cast(icon.width() / t_ratio)); t_ratioRect.setHeight(static_cast(icon.height() / t_ratio)); auto iconRect = QRectF(centerF.x() - t_ratioRect.width() / 2, centerF.y() - t_ratioRect.height() / 2, t_ratioRect.width(), t_ratioRect.height()); painter->drawPixmap(iconRect.toRect(), icon); } else { if (option.state & QStyle::State_Selected) { nameColor = option.palette.highlightedText().color(); otherColor = option.palette.highlightedText().color(); } painter->setPen(otherColor); QRect numRect(lrWidth, option.rect.y(), 40, option.rect.height()); painter->setFont(font11); auto str = QString("%1").arg(index.row() + 1, rowCountSize, 10, QLatin1Char('0')); QFont font(font11); QFontMetrics fm(font); auto text = fm.elidedText(str, Qt::ElideMiddle, numRect.width()); painter->drawText(numRect, Qt::AlignCenter, text); } //name painter->setPen(nameColor); QRect nameRect(50, option.rect.y(), w / 2 - 20, option.rect.height()); painter->setFont(font14); auto nameText = songsFm.elidedText(PlayMusicTypePtr->name, Qt::ElideMiddle, nameRect.width()); painter->drawText(nameRect, Qt::AlignLeft | Qt::AlignVCenter, nameText); painter->setPen(otherColor); //extraname QRect extraRect(50 + w / 2, option.rect.y(), w / 4 - 20, option.rect.height()); painter->setFont(font11); auto extraText = songsFm.elidedText(PlayMusicTypePtr->extraName, Qt::ElideMiddle, extraRect.width()); painter->drawText(extraRect, Qt::AlignLeft | Qt::AlignVCenter, extraText); //songs int sortMetasSize = PlayMusicTypePtr->playlistMeta.sortMetas.size(); QString infoStr; if (sortMetasSize == 0) { infoStr = QString(" ") + tr("No songs"); } else if (sortMetasSize == 1) { infoStr = QString(" ") + tr("1 song"); } else { infoStr = QString(" ") + tr("%1 songs").arg(sortMetasSize); } painter->save(); QFont measuringFont(font11); QRect songsRect(50 + w / 2 + w / 4, option.rect.y(), w / 4 - 20, option.rect.height()); painter->drawText(songsRect, Qt::AlignLeft | Qt::AlignVCenter, infoStr); painter->restore(); //day QRect dayRect(w, option.rect.y(), tailwidth - 20, option.rect.height()); painter->setFont(font11); QString dayStr = QDateTime::fromMSecsSinceEpoch(PlayMusicTypePtr->timestamp / static_cast(1000)).toString("yyyy-MM-dd"); painter->drawText(dayRect, Qt::AlignRight | Qt::AlignVCenter, dayStr); } painter->restore(); } } QSize MusicListDataDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { auto listview = qobject_cast(option.widget); if (listview->viewMode() == QListView::IconMode) { return QSize(150, 150); } return QStyledItemDelegate::sizeHint(option, index); } QWidget *MusicListDataDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { return QStyledItemDelegate::createEditor(parent, option, index); } void MusicListDataDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QStyledItemDelegate::setEditorData(editor, index); } void MusicListDataDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QStyledItemDelegate::setModelData(editor, model, index); } bool MusicListDataDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { auto listview = qobject_cast(option.widget); int borderWidth = 10; QRect rect = option.rect.adjusted(borderWidth, borderWidth, -borderWidth, -borderWidth); if (index.isValid() && listview->viewMode() == QListView::IconMode && event->type() == QEvent::MouseButtonPress) { if (!listview->playingState()) { QRect t_hoverRect(rect.x() + 50, rect.y() + 36, 50, 50); QPainterPath t_imageClipPath; t_imageClipPath.addEllipse(QRect(rect.x() + 50, rect.y() + 36, 50, 50)); t_imageClipPath.closeSubpath(); auto fillPolygon = t_imageClipPath.toFillPolygon(); QMouseEvent *pressEvent = static_cast(event); QPointF pressPos = pressEvent->pos(); if (fillPolygon.containsPoint(pressPos, Qt::OddEvenFill)) Q_EMIT hoverPress(index); } else { QRect t_hoverRect (rect.x() + 64, rect.y() + 96, 22, 18); QPainterPath t_imageClipPath; t_imageClipPath.addEllipse(QRect(rect.x() + 64, rect.y() + 96, 25, 25)); t_imageClipPath.closeSubpath(); auto fillPolygon = t_imageClipPath.toFillPolygon(); //QMouseEvent *pressEvent = static_cast(event); //QPointF pressPos = pressEvent->pos(); Q_EMIT hoverPress(index); } return false; } return QStyledItemDelegate::editorEvent(event, model, option, index); } MusicListDataDelegate::MusicListDataDelegate(QWidget *parent): QStyledItemDelegate(parent), d_ptr(new MusicListDataDelegatePrivate(this)) { Q_D(MusicListDataDelegate); d->parentWidget = parent; d->playing = d->playing.scaled(22, 18); } MusicListDataDelegate::~MusicListDataDelegate() { } void MusicListDataDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const { QStyledItemDelegate::initStyleOption(option, index); } deepin-music-6.0.1.54/src/music-player/view/widget/delegate/musiclistdatadelegate.h000664 000000 000000 00000004156 13703317554 030247 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include class MusicListDataDelegatePrivate; class MusicListDataDelegate : public QStyledItemDelegate { Q_OBJECT public: MusicListDataDelegate(QWidget *parent = Q_NULLPTR); ~MusicListDataDelegate() override; virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override; void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; void setEditorData(QWidget *editor, const QModelIndex &index) const override; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; signals: void hoverPress(const QModelIndex &index); protected: bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListDataDelegate) }; deepin-music-6.0.1.54/src/music-player/view/widget/delegate/musicsearchlistdelegate.cpp000775 000000 000000 00000026604 13703317554 031143 0ustar00rootroot000000 000000 /* * Copyright (C) 2020 chengdu Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musicsearchlistdelegate.h" #include "../musicsearchlistview.h" #include "util/pinyinsearch.h" #include #include #include #include #include #include #include #include #include using namespace DMusic; using namespace DMusic; QT_BEGIN_NAMESPACE extern Q_WIDGETS_EXPORT void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0); QT_END_NAMESPACE //static inline int pixel2point(int pixel) //{ // return pixel * 96 / 72; //} //const int PlayItemRightMargin = 20; class MusicSearchListDelegatePrivate { public: explicit MusicSearchListDelegatePrivate(MusicSearchListDelegate *parent) : q_ptr(parent) { } QString playingIcon = ":/images/logo.svg"; QString highlightPlayingIcon = ":/images/logo.svg"; QPixmap shadowImg = DHiDPIHelper::loadNxPixmap(":/mpimage/light/shadow.svg"); MusicSearchListDelegate *q_ptr; Q_DECLARE_PUBLIC(MusicSearchListDelegate) }; MusicSearchListDelegate::MusicSearchListDelegate(QWidget *parent) : QStyledItemDelegate(parent) , d_ptr(new MusicSearchListDelegatePrivate(this)) { } MusicSearchListDelegate::~MusicSearchListDelegate() { } void MusicSearchListDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const { QStyledItemDelegate::initStyleOption(option, index); } bool MusicSearchListDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) { Q_UNUSED(event) Q_UNUSED(model) Q_UNUSED(option) Q_UNUSED(index) return true; } void MusicSearchListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { //Q_D(const MusicSearchListDelegate); /********************设置基础颜色***************************/ QColor backColor("#FFFFFF"); backColor.setAlphaF(0.2); //获å–当å‰è¡Œä¿¡æ¯ auto listview = qobject_cast(option.widget); PlaylistPtr playlistPtr = listview->playlist(); QString searchText = listview->getSearchText(); if (playlistPtr == nullptr) { return; } auto playMusicTypePtrList = listview->playMusicTypePtrList(); auto metaPtrList = listview->playMetaList(); if (playlistPtr->id() == MusicCandListID) { if (index.row() >= metaPtrList.size()) { return; } } else { if (index.row() >= playMusicTypePtrList.size()) { return; } } QColor textColor; QColor lightColor; //主题改å˜éœ€è¦ä¿®æ”¹color if (listview->getThemeType() == 2) { textColor = QColor("#F8F8F8"); } else { textColor = QColor("#000000"); } lightColor = QColor("#0082FF"); //ç»˜åˆ¶é€‰ä¸­çŠ¶æ€ if (option.state & QStyle::State_MouseOver) { // Q_EMIT this->SearchClear(); painter->save(); painter->setPen(Qt::NoPen); QColor hovertColor(option.palette.highlight().color()); textColor = QColor("#F8F8F8"); lightColor = QColor("#F8F8F8"); if (option.state & QStyle::State_Selected) hovertColor.setAlphaF(0.2); painter->setBrush(hovertColor); QRect selecteColorRect = option.rect.adjusted(0, 0, 0, 0); painter->drawRoundedRect(selecteColorRect, 0, 0); painter->restore(); emit SearchClear(); } //绘制上下键选中 if (index.row() == listview->getIndexInt() && listview->getIndexInt() >= 0) { painter->save(); painter->setPen(Qt::NoPen); QColor hovertColor(option.palette.highlight().color()); // lightColor = option.palette.highlightedText().color(); textColor = QColor("#F8F8F8"); lightColor = QColor("#F8F8F8"); if (option.state & QStyle::State_Selected) hovertColor.setAlphaF(0.2); painter->setBrush(hovertColor); QRect selecteColorRect = option.rect.adjusted(0, 0, 0, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); } painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::HighQualityAntialiasing); /***********************设置字体***************************/ QFont textFont = option.font; textFont.setFamily("SourceHanSansSC"); textFont.setWeight(QFont::Normal); textFont.setPixelSize(14); if (playlistPtr->id() == MusicCandListID) { auto metaPtr = metaPtrList[index.row()]; /***********************绘制文字***************************/ QString mtext; if (metaPtr->artist.size() == 0) { mtext = metaPtr->title; } else { mtext = metaPtr->title + " - " + metaPtr->artist; } QFontMetricsF fontWidth(textFont); mtext = fontWidth.elidedText(mtext, Qt::ElideMiddle, 280); QStyleOptionViewItem viewOption(option); initStyleOption(&viewOption, index); if (option.state.testFlag(QStyle::State_HasFocus)) viewOption.state = viewOption.state ^ QStyle::State_HasFocus; QStyle *pStyle = viewOption.widget ? viewOption.widget->style() : QApplication::style(); viewOption.text = ""; pStyle->drawControl(QStyle::CE_ItemViewItem, &viewOption, painter, viewOption.widget); QTextDocument document; document.setPlainText(mtext); bool found = false; QTextCursor highlight_cursor(&document); QTextCursor cursor(&document); cursor.beginEditBlock(); QTextCharFormat color_format(highlight_cursor.charFormat()); color_format.setForeground(lightColor); /*-------------LineUnderCursor-------------*/ QTextCursor testcursor(&document); testcursor.select(QTextCursor::LineUnderCursor); QTextCharFormat fmt; fmt.setForeground(textColor); testcursor.mergeCharFormat(fmt); testcursor.clearSelection(); testcursor.movePosition(QTextCursor::EndOfLine); while (!highlight_cursor.isNull() && !highlight_cursor.atEnd()) { highlight_cursor = document.find(searchText, highlight_cursor); if (!highlight_cursor.isNull()) { if (!found) found = true; highlight_cursor.mergeCharFormat(color_format); } } cursor.endEditBlock(); QAbstractTextDocumentLayout::PaintContext paintContext; QRect textRect(32, option.rect.y(), 287, 24); painter->save(); painter->translate(textRect.topLeft()); painter->setClipRect(textRect.translated(-textRect.topLeft())); document.documentLayout()->draw(painter, paintContext); painter->restore(); } else { auto playMusicTypePtr = playMusicTypePtrList[index.row()]; /***********************绘制图片***************************/ QPixmap image; image.loadFromData(playMusicTypePtr->icon); painter->save(); QRect imageRect(32, index.row() * 35 + 4, 24, 24); if (playlistPtr->id() == ArtistCandListID) { QPainterPath clipPath; clipPath.addEllipse(imageRect.adjusted(0, 0, 0, 0)); painter->setClipPath(clipPath); } else { QPainterPath clipPath; clipPath.addRoundedRect(imageRect, 4, 4); painter->setClipPath(clipPath); } painter->drawPixmap(imageRect, image); painter->restore(); QString mtext = playMusicTypePtr->name; QFontMetricsF fontWidth(textFont); mtext = fontWidth.elidedText(mtext, Qt::ElideMiddle, 251); QStyleOptionViewItem viewOption(option); initStyleOption(&viewOption, index); if (option.state.testFlag(QStyle::State_HasFocus)) viewOption.state = viewOption.state ^ QStyle::State_HasFocus; QStyle *pStyle = viewOption.widget ? viewOption.widget->style() : QApplication::style(); viewOption.text = ""; pStyle->drawControl(QStyle::CE_ItemViewItem, &viewOption, painter, viewOption.widget); QTextDocument document; document.setPlainText(mtext); bool found = false; QTextCursor highlight_cursor(&document); QTextCursor cursor(&document); cursor.beginEditBlock(); QTextCharFormat color_format(highlight_cursor.charFormat()); color_format.setForeground(lightColor); /*-------------LineUnderCursor-------------*/ QTextCursor testcursor(&document); testcursor.select(QTextCursor::LineUnderCursor); QTextCharFormat fmt; fmt.setForeground(textColor); testcursor.mergeCharFormat(fmt); testcursor.clearSelection(); testcursor.movePosition(QTextCursor::EndOfLine); while (!highlight_cursor.isNull() && !highlight_cursor.atEnd()) { highlight_cursor = document.find(searchText, highlight_cursor); if (!highlight_cursor.isNull()) { if (!found) found = true; highlight_cursor.mergeCharFormat(color_format); } } cursor.endEditBlock(); QAbstractTextDocumentLayout::PaintContext paintContext; QRect textRect(61, option.rect.y(), 251, 24); painter->save(); painter->translate(textRect.topLeft()); painter->setClipRect(textRect.translated(-textRect.topLeft())); document.documentLayout()->draw(painter, paintContext); painter->restore(); } } QSize MusicSearchListDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { Q_UNUSED(option) Q_UNUSED(index) return QSize(350, 34); } QWidget *MusicSearchListDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { return QStyledItemDelegate::createEditor(parent, option, index); } void MusicSearchListDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QStyledItemDelegate::setEditorData(editor, index); } void MusicSearchListDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QStyledItemDelegate::setModelData(editor, model, index); } QString MusicSearchListDelegate::getElidedText(QFont font, QString str, int MaxWidth) { if (str.isEmpty()) { return ""; } QFontMetrics fontWidth(font); int width = fontWidth.width(str); if (width >= MaxWidth) { //å³éƒ¨æ˜¾ç¤ºçœç•¥å· str = fontWidth.elidedText(str, Qt::ElideRight, MaxWidth); } //返回处ç†åŽçš„字符串 return str; } deepin-music-6.0.1.54/src/music-player/view/widget/delegate/musicsearchlistdelegate.h000664 000000 000000 00000004121 13703317554 030573 0ustar00rootroot000000 000000 /* * Copyright (C) 2020 chengdu Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include class MusicSearchListDelegatePrivate; class MusicSearchListDelegate : public QStyledItemDelegate { Q_OBJECT public: MusicSearchListDelegate(QWidget *parent = Q_NULLPTR); ~MusicSearchListDelegate() override; signals: void SearchClear() const; protected: virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override; bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override; void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; void setEditorData(QWidget *editor, const QModelIndex &index) const override; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; private: QString getElidedText(QFont font, QString str, int MaxWidth); QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicSearchListDelegate) }; deepin-music-6.0.1.54/src/music-player/view/widget/delegate/playitemdelegate.cpp000664 000000 000000 00000052106 13703317554 027556 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "playitemdelegate.h" #include "playitemdelegate_p.h" #include #include #include #include #include #include #include "../playlistview.h" #include "core/medialibrary.h" DWIDGET_USE_NAMESPACE const int PlayItemLeftMargin = 15; const int PlayItemRightMargin = 20; const int PlayItemNumberMargin = 10; //static inline QString numberString(int row, const QStyleOptionViewItem &option) //{ // auto listview = qobject_cast(option.widget); // auto itemCount = listview->model()->rowCount(); // auto itemCountString = QString("%1").arg(itemCount); // return QString("%1").arg(int(row), itemCountString.length(), 10, QChar('0')); //} static inline int pixel2point(int pixel) { return pixel * 96 / 72; } inline int headerPointWidth(const QStyleOptionViewItem &option, const QModelIndex &index) { QFont measuringFont(option.font); QFontMetrics fm(measuringFont); auto headerWith = fm.width(QString("%1").arg(index.row())); return pixel2point(headerWith) + PlayItemLeftMargin + PlayItemNumberMargin; } inline int tailPointWidth(const QStyleOptionViewItem &option) { QFont measuringFont(option.font); QFontMetrics fm(measuringFont); return pixel2point(fm.width("00:00")) + PlayItemRightMargin; } PlayItemDelegatePrivate::PlayItemDelegatePrivate(PlayItemDelegate *parent): QWidget(nullptr), q_ptr(parent) { setObjectName("PlayItemStyleProxy"); shadowImg = DHiDPIHelper::loadNxPixmap(":/mpimage/light/shadow.svg"); shadowImg = shadowImg.copy(5, 5, shadowImg.width() - 10, shadowImg.height() - 10); } QColor PlayItemDelegatePrivate::textColor() const { return m_textColor; } QColor PlayItemDelegatePrivate::titleColor() const { return m_numberColor; } QColor PlayItemDelegatePrivate::highlightText() const { return m_highlightText; } QColor PlayItemDelegatePrivate::background() const { return m_background; } QColor PlayItemDelegatePrivate::alternateBackground() const { return m_alternateBackground; } QColor PlayItemDelegatePrivate::highlightedBackground() const { return m_highlightedBackground; } QString PlayItemDelegatePrivate::playingIcon() const { return m_aimationPrefix; } QString PlayItemDelegatePrivate::highlightPlayingIcon() const { return m_highlightPlayingIcon; } void PlayItemDelegatePrivate::setTextColor(QColor textColor) { m_textColor = textColor; } void PlayItemDelegatePrivate::setTitleColor(QColor numberColor) { m_numberColor = numberColor; } void PlayItemDelegatePrivate::setHighlightText(QColor highlightText) { m_highlightText = highlightText; } void PlayItemDelegatePrivate::setBackground(QColor background) { m_background = background; } void PlayItemDelegatePrivate::setAlternateBackground(QColor alternateBackground) { m_alternateBackground = alternateBackground; } void PlayItemDelegatePrivate::setHighlightedBackground(QColor highlightedBackground) { m_highlightedBackground = highlightedBackground; } void PlayItemDelegatePrivate::setPlayingIcon(QString playingIcon) { m_aimationPrefix = playingIcon; } void PlayItemDelegatePrivate::setHighlightPlayingIcon(QString highlightPlayingIcon) { m_highlightPlayingIcon = highlightPlayingIcon; } QColor PlayItemDelegatePrivate::foreground(int col, const QStyleOptionViewItem &option) const { if (option.state & QStyle::State_Selected) { return highlightText(); } auto emCol = static_cast(col); switch (emCol) { case PlayItemDelegate::Number: case PlayItemDelegate::Artist: case PlayItemDelegate::Album: case PlayItemDelegate::Length: return textColor(); case PlayItemDelegate::Title: return titleColor(); case PlayItemDelegate::ColumnButt: break; } return textColor(); } inline int PlayItemDelegatePrivate::timePropertyWidth(const QStyleOptionViewItem &option) const { static auto width = tailPointWidth(option); return width; } static inline QFlags alignmentFlag(int col) { auto emCol = static_cast(col); switch (emCol) { case PlayItemDelegate::Number: return Qt::AlignCenter; case PlayItemDelegate::Title: case PlayItemDelegate::Artist: case PlayItemDelegate::Album: return (Qt::AlignLeft | Qt::AlignVCenter); case PlayItemDelegate::Length: return (Qt::AlignRight | Qt::AlignVCenter); case PlayItemDelegate::ColumnButt: break; } return (Qt::AlignLeft | Qt::AlignVCenter);; } static inline QRect colRect(int col, const QStyleOptionViewItem &option) { static auto tailwidth = tailPointWidth(option) + 20; auto w = option.rect.width() - 0 - tailwidth; auto emCol = static_cast(col); switch (emCol) { case PlayItemDelegate::Number: return QRect(10, option.rect.y(), 40, option.rect.height()); case PlayItemDelegate::Title: return QRect(50, option.rect.y(), w / 2 - 20, option.rect.height()); case PlayItemDelegate::Artist: return QRect(50 + w / 2, option.rect.y(), w / 4 - 20, option.rect.height()); case PlayItemDelegate::Album: return QRect(50 + w / 2 + w / 4, option.rect.y(), w / 4 - 20, option.rect.height()); case PlayItemDelegate::Length: return QRect(w, option.rect.y(), tailwidth - 20, option.rect.height()); case PlayItemDelegate::ColumnButt: break; } return option.rect.marginsRemoved(QMargins(0, 0, 0, 0)); } void PlayItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { auto listview = qobject_cast(option.widget); if (listview->viewMode() == QListView::IconMode) { //QStyledItemDelegate::paint(painter, option, index); auto hash = index.data().toString(); auto meta = MediaLibrary::instance()->meta(hash); if(meta.isNull()) return; painter->save(); painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::HighQualityAntialiasing); painter->setRenderHint(QPainter::SmoothPixmapTransform); auto background = option.palette.background(); if (option.state & QStyle::State_Selected) { // background = option.palette.highlight(); } painter->fillRect(option.rect, background); //绘制阴影 QRect shadowRect(option.rect.x() - 10, option.rect.y(), 168, 158); QPainterPath roundRectShadowPath; roundRectShadowPath.addRoundRect(shadowRect, 8, 8); painter->save(); painter->setClipPath(roundRectShadowPath); painter->drawPixmap(shadowRect, d_ptr->shadowImg); painter->restore(); //绘制圆角框 QRect rect(option.rect.x(), option.rect.y(), 150, 200); QPainterPath roundRectPath; roundRectPath.addRoundRect(rect, 10, 10); painter->setClipPath(roundRectPath); //绘制专辑图片 auto icon = option.icon; auto value = index.data(Qt::DecorationRole); if (value.type() == QVariant::Icon) { icon = qvariant_cast(value); } QRect pixmapRect(option.rect.x(), option.rect.y(), 150, 150); painter->save(); QPainterPath roundPixmapRectPath; roundPixmapRectPath.addRoundRect(pixmapRect, 10, 10); painter->setClipPath(roundPixmapRectPath); painter->drawPixmap(pixmapRect, icon.pixmap(option.rect.width(), option.rect.width())); //绘制图片上添加æè¾¹ painter->save(); QColor borderPenColor("#000000"); borderPenColor.setAlphaF(0.05); QPen borderPen(borderPenColor); borderPen.setWidthF(2); painter->setPen(borderPen); painter->drawRoundRect(pixmapRect/*.adjusted(1, 1, -1, 1)*/, 10, 10); painter->restore(); painter->restore(); int startHeight = option.rect.y() + 159; int fillAllHeight = 34; //设置信æ¯å­—ä½“å¤§å° QFont font = option.font; font.setFamily("SourceHanSansSC"); font.setWeight(QFont::Normal); font.setPixelSize(13); painter->setFont(font); QFontMetrics fm(font); QColor nameColor = "#000000"; if (listview->getThemeType() == 2) { nameColor = "#C0C6D4"; } painter->setPen(nameColor); QRect nameFillRect(option.rect.x(), startHeight - 5, option.rect.width(), fm.height()); nameFillRect.adjust(8, 0, -7, 0); auto nameText = fm.elidedText(meta->title, Qt::ElideRight, 125); painter->drawText(nameFillRect, Qt::AlignLeft | Qt::AlignTop, nameText); font.setPixelSize(11); QFontMetrics extraNameFm(font); painter->setFont(font); nameColor.setAlphaF(0.6); painter->setPen(nameColor); QRect extraNameFillRect(option.rect.x(), startHeight + fillAllHeight / 2, 99, fm.height()); extraNameFillRect.adjust(8, 0, -7, 0); auto extraNameText = extraNameFm.elidedText(meta->artist, Qt::ElideRight, 84); painter->drawText(extraNameFillRect, Qt::AlignLeft | Qt::AlignTop, extraNameText); //draw time QRect timeFillRect(option.rect.x() + 102, startHeight + 17, 38, 16); painter->save(); QColor timeFillColor("#232323"); timeFillColor.setAlphaF(0.3); if (listview->getThemeType() == 2) { timeFillColor = "#DCDCDC"; timeFillColor.setAlphaF(0.3); } painter->setPen(Qt::NoPen); painter->setBrush(timeFillColor); painter->drawRoundedRect(timeFillRect, 8, 8); painter->restore(); font.setPixelSize(10); painter->setFont(font); QColor timedColor = Qt::white; if (listview->getThemeType() == 2) { timedColor = "#C0C6D4"; } painter->setPen(timedColor); auto timeText = fm.elidedText(DMusic::lengthString(meta->length), Qt::ElideRight, 38); painter->drawText(timeFillRect, Qt::AlignHCenter | Qt::AlignTop, timeText); QBrush t_fillBrush(QColor(128, 128, 128, 0)); if (option.state & QStyle::State_Selected) { t_fillBrush = QBrush(QColor(128, 128, 128, 90)); } painter->save(); painter->setClipPath(roundPixmapRectPath); painter->fillRect(pixmapRect, t_fillBrush); painter->restore(); painter->restore(); return; } //Q_D(const PlayItemDelegate); painter->save(); QFont font11 = option.font; font11.setFamily("SourceHanSansSC"); font11.setWeight(QFont::Normal); font11.setPixelSize(11); QFont font14 = option.font; font14.setFamily("SourceHanSansSC"); font14.setWeight(QFont::Normal); font14.setPixelSize(14); painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::HighQualityAntialiasing); painter->setRenderHint(QPainter::SmoothPixmapTransform); QColor baseColor("#FFFFFF"); baseColor.setAlphaF(0.1); QColor alternateBaseColor("#000000"); alternateBaseColor.setAlphaF(0.02); QColor selecteColor("#000000"); selecteColor.setAlphaF(0.20); if (listview->getThemeType() == 2) { baseColor.setAlphaF(0.05); alternateBaseColor.setAlphaF(0.05); selecteColor = QColor("#FFFFFF"); selecteColor.setAlphaF(0.20); } auto background = (index.row() % 2) == 1 ? baseColor : alternateBaseColor; //auto background = baseColor; int lrWidth = 10; if (!(option.state & QStyle::State_Selected) && !(option.state & QStyle::State_MouseOver) ) { painter->save(); painter->setPen(Qt::NoPen); painter->setBrush(background); //painter->drawRect(option.rect); QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); } QColor nameColor("#090909"), otherColor("#000000"); otherColor.setAlphaF(0.5); if (listview->getThemeType() == 2) { nameColor = QColor("#C0C6D4"); otherColor = QColor("#C0C6D4"); otherColor.setAlphaF(0.6); } auto hash = index.data().toString(); auto meta = MediaLibrary::instance()->meta(hash); if (meta.isNull()) { QString msg = "can not find " + hash; qWarning() << msg; return; // qFatal(msg.toStdString().c_str()); } auto activeMeta = listview->activingMeta(); if (activeMeta == meta) { nameColor = QColor("#2CA7F8"); otherColor = QColor("#2CA7F8"); font14.setFamily("SourceHanSansSC"); font14.setWeight(QFont::Medium); } if (option.state & QStyle::State_Selected) { painter->save(); painter->setPen(Qt::NoPen); // QColor selectColor("#000000"); // if (listview->getThemeType() == 2) { // selectColor = QColor("#FFFFFF"); // } // selectColor.setAlphaF(0.2); QColor selectColor(option.palette.highlight().color()); painter->setBrush(selectColor); QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); nameColor = option.palette.highlightedText().color(); otherColor = option.palette.highlightedText().color(); }/* else if ((index.row() % 2) == 0) { painter->save(); painter->setPen(Qt::NoPen); painter->setBrush(alternateBaseColor); QRect selecteColorRect = option.rect.adjusted(5, 0, -5, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); }*/ if (option.state & QStyle::State_MouseOver) { painter->save(); painter->setPen(Qt::NoPen); QColor hovertColor(option.palette.shadow().color()); if (option.state & QStyle::State_Selected) hovertColor.setAlphaF(0.2); painter->setBrush(hovertColor); QRect selecteColorRect = option.rect.adjusted(lrWidth, 0, -lrWidth, 0); painter->drawRoundedRect(selecteColorRect, 8, 8); painter->restore(); } int rowCount = listview->model()->rowCount(); auto rowCountSize = QString::number(rowCount).size(); rowCountSize = qMax(rowCountSize, 2); for (int col = 0; col < ColumnButt; ++col) { auto flag = alignmentFlag(col); auto rect = colRect(col, option); switch (col) { case Number: { painter->setPen(otherColor); auto *listview = qobject_cast(const_cast(option.widget)); // Fixme: if (!meta.isNull() && meta->invalid) { auto sz = QSizeF(15, 15); auto icon = QIcon(":/mpimage/light/warning.svg").pixmap(sz.toSize()); auto centerF = QRectF(rect).center(); auto iconRect = QRectF(centerF.x() - sz.width() / 2, centerF.y() - sz.height() / 2, sz.width(), sz.height()); painter->drawPixmap(iconRect, icon, QRectF()); break; } if (activeMeta == meta) { auto icon = listview->getPlayPixmap(); if (option.state & QStyle::State_Selected) { icon = listview->getAlbumPixmap(); } auto centerF = QRectF(rect).center(); qreal t_ratio = icon.devicePixelRatioF(); QRect t_ratioRect; t_ratioRect.setX(0); t_ratioRect.setY(0); t_ratioRect.setWidth(static_cast(icon.width() / t_ratio)); t_ratioRect.setHeight(static_cast(icon.height() / t_ratio)); auto iconRect = QRectF(centerF.x() - t_ratioRect.width() / 2, centerF.y() - t_ratioRect.height() / 2, t_ratioRect.width(), t_ratioRect.height()); painter->drawPixmap(iconRect.toRect(), icon); } else { painter->setFont(font11); auto str = QString("%1").arg(index.row() + 1, rowCountSize, 10, QLatin1Char('0')); QFont font(font11); QFontMetrics fm(font); auto text = fm.elidedText(str, Qt::ElideMiddle, rect.width()); painter->drawText(rect, static_cast(flag), text); } break; } case Title: { painter->setPen(nameColor); painter->setFont(font14); QFont font(font14); QFontMetrics fm(font); auto text = fm.elidedText(meta->title, Qt::ElideMiddle, rect.width()); painter->drawText(rect, static_cast(flag), text); break; } case Artist: { painter->setPen(otherColor); painter->setFont(font11); auto str = meta->artist.isEmpty() ? PlayListView::tr("Unknown artist") : meta->artist; QFont font(font11); QFontMetrics fm(font); auto text = fm.elidedText(str, Qt::ElideMiddle, rect.width()); painter->drawText(rect, static_cast(flag), text); break; } case Album: { painter->setPen(otherColor); painter->setFont(font11); auto str = meta->album.isEmpty() ? PlayListView::tr("Unknown album") : meta->album; QFont font(font11); QFontMetrics fm(font); auto text = fm.elidedText(str, Qt::ElideMiddle, rect.width()); painter->drawText(rect, static_cast(flag), text); break; } case Length: painter->setPen(otherColor); painter->setFont(font11); painter->drawText(rect, static_cast(flag), DMusic::lengthString(meta->length)); break; default: break; } } painter->restore(); } QSize PlayItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { //Q_D(const PlayItemDelegate); auto listview = qobject_cast(option.widget); if (listview->viewMode() == QListView::IconMode) { return QSize(150, 200); } return QStyledItemDelegate::sizeHint(option, index); // auto listview = qobject_cast(option.widget); // if (listview->viewMode() == QListView::IconMode) { // return QStyledItemDelegate::sizeHint(option, index); // } // auto baseSize = QStyledItemDelegate::sizeHint(option, index); // return QSize(baseSize.width() / 5, baseSize.height()); //// auto headerWidth = headerPointWidth(option, index); // auto headerWidth = 17 + 10 + 10 + 4; // auto tialWidth = d->timePropertyWidth(option); // auto w = option.widget->width() - headerWidth - tialWidth; // Q_ASSERT(w > 0); // switch (index.column()) { // case 0: // return QSize(headerWidth, baseSize.height()); // case 1: // return QSize(w / 2, baseSize.height()); // case 2: // case 3: // return QSize(w / 4, baseSize.height()); // case 4: // return QSize(tialWidth, baseSize.height()); // } // return baseSize; } QWidget *PlayItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const { return QStyledItemDelegate::createEditor(parent, option, index); } void PlayItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { QStyledItemDelegate::setEditorData(editor, index); } void PlayItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QStyledItemDelegate::setModelData(editor, model, index); } PlayItemDelegate::PlayItemDelegate(QWidget *parent) : QStyledItemDelegate(parent), d_ptr(new PlayItemDelegatePrivate(this)) { } PlayItemDelegate::~PlayItemDelegate() { } void PlayItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const { // Q_D(const PlayItemDelegate); QStyledItemDelegate::initStyleOption(option, index); option->state = option->state & ~QStyle::State_HasFocus; } deepin-music-6.0.1.54/src/music-player/view/widget/delegate/playitemdelegate.h000664 000000 000000 00000004076 13703317554 027226 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include DWIDGET_USE_NAMESPACE class PlayItemDelegatePrivate; class PlayItemDelegate : public QStyledItemDelegate { Q_OBJECT public: enum MusicColumn { Number = 0, Title, Artist, Album, Length, ColumnButt, }; Q_ENUM(MusicColumn) enum MusicItemDataRole { PlayStatusRole = Qt::UserRole + 100, }; Q_ENUM(MusicItemDataRole) enum PlayStatus { Playing = 0x0098, Strop, }; Q_ENUM(PlayStatus) PlayItemDelegate(QWidget *parent = Q_NULLPTR); ~PlayItemDelegate(); public: virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const; void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; void setEditorData(QWidget *editor, const QModelIndex &index) const; void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), PlayItemDelegate) }; deepin-music-6.0.1.54/src/music-player/view/widget/delegate/playitemdelegate_p.h000664 000000 000000 00000005763 13703317554 027551 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include class PictureSequenceView; class QStyleOptionViewItem; class PlayItemDelegate; class PlayItemDelegatePrivate : public QWidget { Q_OBJECT Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor) Q_PROPERTY(QColor titleColor READ titleColor WRITE setTitleColor) Q_PROPERTY(QColor highlightText READ highlightText WRITE setHighlightText) Q_PROPERTY(QColor background READ background WRITE setBackground) Q_PROPERTY(QColor alternateBackground READ alternateBackground WRITE setAlternateBackground) Q_PROPERTY(QColor highlightedBackground READ highlightedBackground WRITE setHighlightedBackground) Q_PROPERTY(QString playingIcon READ playingIcon WRITE setPlayingIcon) Q_PROPERTY(QString highlightPlayingIcon READ highlightPlayingIcon WRITE setHighlightPlayingIcon) public: int tialWidth = -1; explicit PlayItemDelegatePrivate(PlayItemDelegate *parent = nullptr); inline QColor foreground(int col, const QStyleOptionViewItem &option) const; inline int timePropertyWidth(const QStyleOptionViewItem &option) const; QColor textColor() const; QColor titleColor() const; QColor highlightText() const; QColor background() const; QColor alternateBackground() const; QColor highlightedBackground() const; QString playingIcon() const; QString highlightPlayingIcon() const; public slots: void setTextColor(QColor textColor); void setTitleColor(QColor titleColor); void setHighlightText(QColor highlightText); void setBackground(QColor background); void setAlternateBackground(QColor alternateBackground); void setHighlightedBackground(QColor highlightedBackground); void setPlayingIcon(QString playingIcon); void setHighlightPlayingIcon(QString highlightPlayingIcon); private: QColor m_textColor; QColor m_numberColor; QColor m_highlightText; QColor m_background; QColor m_alternateBackground; QColor m_highlightedBackground; QString m_aimationPrefix = ":/mpimage/light/music1.svg"; QString m_highlightPlayingIcon = ":/mpimage/light/music1.svg"; QPixmap shadowImg; PlayItemDelegate *q_ptr; Q_DECLARE_PUBLIC(PlayItemDelegate) }; deepin-music-6.0.1.54/src/music-player/view/widget/dequalizerdialog.cpp000664 000000 000000 00000060672 13703317554 026021 0ustar00rootroot000000 000000 #include "dequalizerdialog.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class CustomTabStyle : public QProxyStyle { public: QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const { QSize s = QProxyStyle::sizeFromContents(type, option, size, widget); if (type == QStyle::CT_TabBarTab) { s.transpose(); s.rwidth() = 144; // 设置æ¯ä¸ªtabBar中itemçš„å¤§å° s.rheight() = 30; } return s; } void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { if (element == CE_TabBarTabLabel) { if (const QStyleOptionTab *tab = qstyleoption_cast(option)) { if (tab->state & QStyle::State_Selected) { painter->save(); painter->setPen(0x89cfff); painter->setBrush(QBrush(0x89cfff)); painter->restore(); } QTextOption option; option.setAlignment(Qt::AlignCenter); if (tab->state & QStyle::State_Selected) { painter->setPen(0xf8fcff); } else { painter->setPen(0x5d5d5d); } painter->drawText(tab->rect, tab->text, option); return; } } if (element == CE_TabBarTab) { QProxyStyle::drawControl(element, option, painter, widget); } } }; DWIDGET_USE_NAMESPACE class DequalizerDialogPrivate { public: DequalizerDialogPrivate(DequalizerDialog *parent) : q_ptr(parent) {} void readConfig(); void initUI(); void SliderOneEntry(DSlider *slider, int value); private: DTitlebar *mtitlebar = nullptr; DSwitchButton *mswitchBtn = nullptr; DComboBox *mcombox = nullptr; DPushButton *saveBtn = nullptr; DLabel *mtitleLabel = nullptr; DLabel *mswitchLabel = nullptr; DLabel *lb_baud_pre = nullptr; DLabel *lb_baud_60 = nullptr; DLabel *lb_baud_170 = nullptr; DLabel *lb_baud_310 = nullptr; DLabel *lb_baud_600 = nullptr; DLabel *lb_baud_1K = nullptr; DLabel *lb_baud_3K = nullptr; DLabel *lb_baud_6K = nullptr; DLabel *lb_baud_12K = nullptr; DLabel *lb_baud_14K = nullptr; DLabel *lb_baud_16K = nullptr; DSlider *slider_pre = nullptr; DSlider *slider_60 = nullptr; DSlider *slider_170 = nullptr; DSlider *slider_310 = nullptr; DSlider *slider_600 = nullptr; DSlider *slider_1K = nullptr; DSlider *slider_3K = nullptr; DSlider *slider_6K = nullptr; DSlider *slider_12K = nullptr; DSlider *slider_14K = nullptr; DSlider *slider_16K = nullptr; DPushButton *btn_default = nullptr; DFloatingMessage *saveMessage = nullptr; QStringList effect_type = { DequalizerDialog::tr("Custom") , DequalizerDialog::tr("Monophony") , DequalizerDialog::tr("Classical") , DequalizerDialog::tr("Club") , DequalizerDialog::tr("Dance") , DequalizerDialog::tr("Full Bass") , DequalizerDialog::tr("Full Bass and Treble") , DequalizerDialog::tr("Full Treble") , DequalizerDialog::tr("Headphones") , DequalizerDialog::tr("Hall") , DequalizerDialog::tr("Live") , DequalizerDialog::tr("Party") , DequalizerDialog::tr("Pop") , DequalizerDialog::tr("Reggae") , DequalizerDialog::tr("Rock") , DequalizerDialog::tr("Ska") , DequalizerDialog::tr("Soft") , DequalizerDialog::tr("Soft Rock") , DequalizerDialog::tr("Techno") }; QList BaudList; MusicSettings *settings = nullptr; bool switchflag = false; bool changeflag = false; int curEffect = 0; int flat_bauds[11] = {12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; int Classical_bauds[11] = {12, 0, 0, 0, 0, 0, 0, -7, -7, -7, -9}; int Club_bauds[11] = {6, 0, 0, 8, 5, 5, 5, 3, 0, 0, 0}; int Dance_bauds[11] = {5, 9, 7, 2, 0, 0, -5, -7, -7, 0, 0}; int Full_bass_bauds[11] = {5, -8, 9, 9, 5, 1, -4, -8, -10, -11, -11}; int Full_bass_and_treble_bauds[11] = {4, 7, 5, 0, -7, -4, 1, 8, 11, 12, 12}; int Full_treble_bauds[11] = {3, -9, -9, -9, -4, 2, 11, 16, 16, 16, 16}; int Headphones_bauds[11] = {4, 4, 11, 5, -3, -2, 1, 4, 9, 12, 14}; int Large_Hall_bauds[11] = {5, 10, 10, 5, 5, 0, -4, -4, -4, 0, 0}; int Live_bauds[11] = {7, -4, 0, 4, 5, 5, 5, 4, 2, 2, 2}; int Party_bauds[11] = {6, 7, 7, 0, 0, 0, 0, 0, 0, 7, 7}; int Pop_bauds[11] = {6, -1, 4, 7, 8, 5, 0, -2, -2, -1, -1}; int Reggae_bauds[11] = {8, 0, 0, 0, -5, 0, 6, 6, 0, 0, 0}; int Rock_bauds[11] = {5, 8, 4, -5, -8, -3, 4, 8, 11, 11, 11}; int Ska_bauds[11] = {6, -2, -4, -4, 0, 4, 5, 8, 9, 11, 9}; int Soft_bauds[11] = {5, 4, 1, 0, -2, 0, 4, 8, 9, 11, 12}; int Soft_rock_bauds[11] = {7, 4, 4, 2, 0, -4, -5, -3, 0, 2, 8}; int Techno_bauds[11] = {5, 8, 5, 0, -5, -4, 0, 8, 9, 9, 8}; QList AllbaudTypes; //slidergroup DBlurEffectWidget *slWidget = nullptr; DequalizerDialog *q_ptr; Q_DECLARE_PUBLIC(DequalizerDialog) }; //开机åŽé»˜è®¤å‚数设置 void DequalizerDialogPrivate::readConfig() { // Q_Q(DequalizerDialog); switchflag = settings->value("equalizer.all.switch").toBool(); curEffect = settings->value("equalizer.all.curEffect").toInt(); } void DequalizerDialogPrivate::initUI() { Q_Q(DequalizerDialog); q->resize(720, 463); QFont font; font.setFamily("SourceHanSansSC"); font.setWeight(QFont::Normal); font.setPixelSize(17); mtitleLabel = new DLabel(DequalizerDialog::tr("Equalizer")); mtitleLabel->resize(51, 25); mtitleLabel->setFont(font); mswitchLabel = new DLabel; mswitchLabel->resize(14, 20); if (switchflag) { mswitchLabel->setText(DequalizerDialog::tr("ON")); } else { mswitchLabel->setText(DequalizerDialog::tr("OFF")); } mswitchBtn = new DSwitchButton(q); mswitchBtn->resize(50, 20); // //设置底色 // DPalette sw; // sw.setColor(DPalette::Button,QColor("#000000")); // mswitchBtn->setPalette(sw); mcombox = new DComboBox(q); mcombox->setMinimumSize(240, 36); mcombox->addItems(effect_type); saveBtn = new DPushButton(q); saveBtn->setMinimumSize(110, 36); saveBtn->setText(DequalizerDialog::tr("Save")); lb_baud_pre = new DLabel(q); lb_baud_pre->setMaximumWidth(20); lb_baud_pre->setMinimumHeight(22); lb_baud_pre->setAlignment(Qt::AlignCenter); slider_pre = new DSlider(Qt::Vertical); slider_pre->setObjectName("baud_pre"); slider_pre->setMinimum(-20); slider_pre->setMaximum(20); slider_pre->setPageStep(1); auto lb_preamplifier = new DLabel(DequalizerDialog::tr("Preamplifier")); lb_preamplifier->setAlignment(Qt::AlignCenter); lb_baud_60 = new DLabel(q); lb_baud_60->setMaximumWidth(20); lb_baud_60->setMinimumHeight(22); lb_baud_60->setAlignment(Qt::AlignCenter); slider_60 = new DSlider(Qt::Vertical); slider_60->setObjectName("baud_60"); slider_60->setMinimum(-20); slider_60->setMaximum(20); slider_60->setPageStep(1); auto lb_60 = new DLabel("60"); lb_baud_170 = new DLabel(q); lb_baud_170->setMaximumWidth(20); lb_baud_170->setMinimumHeight(22); lb_baud_170->setAlignment(Qt::AlignCenter); slider_170 = new DSlider(Qt::Vertical); slider_170->setObjectName("baud_170"); slider_170->setMinimum(-20); slider_170->setMaximum(20); slider_170->setPageStep(1); auto lb_170 = new DLabel("170"); lb_baud_310 = new DLabel(q); lb_baud_310->setMaximumWidth(20); lb_baud_310->setMinimumHeight(22); lb_baud_310->setAlignment(Qt::AlignCenter); slider_310 = new DSlider(Qt::Vertical); slider_310->setObjectName("baud_310"); slider_310->setMinimum(-20); slider_310->setMaximum(20); slider_310->setPageStep(1); auto lb_310 = new DLabel("310"); lb_baud_600 = new DLabel(q); lb_baud_600->setMaximumWidth(20); lb_baud_600->setMinimumHeight(22); lb_baud_600->setAlignment(Qt::AlignCenter); slider_600 = new DSlider(Qt::Vertical); slider_600->setObjectName("baud_600"); slider_600->setMinimum(-20); slider_600->setMaximum(20); slider_600->setPageStep(1); auto lb_600 = new DLabel("600"); lb_baud_1K = new DLabel(q); lb_baud_1K->setMaximumWidth(20); lb_baud_1K->setMinimumHeight(22); lb_baud_1K->setAlignment(Qt::AlignCenter); slider_1K = new DSlider(Qt::Vertical); slider_1K->setObjectName("baud_1K"); slider_1K->setMinimum(-20); slider_1K->setMaximum(20); slider_1K->setPageStep(1); auto lb_1K = new DLabel("1K"); lb_baud_3K = new DLabel(q); lb_baud_3K->setMaximumWidth(20); lb_baud_3K->setMinimumHeight(22); lb_baud_3K->setAlignment(Qt::AlignCenter); slider_3K = new DSlider(Qt::Vertical); slider_3K->setObjectName("baud_3K"); slider_3K->setMinimum(-20); slider_3K->setMaximum(20); slider_3K->setPageStep(1); auto lb_3K = new DLabel("3K"); lb_baud_6K = new DLabel(q); lb_baud_6K->setMaximumWidth(20); lb_baud_6K->setMinimumHeight(22); lb_baud_6K->setAlignment(Qt::AlignCenter); slider_6K = new DSlider(Qt::Vertical); slider_6K->setObjectName("baud_6K"); slider_6K->setMinimum(-20); slider_6K->setMaximum(20); slider_6K->setPageStep(1); auto lb_6K = new DLabel("6K"); lb_baud_12K = new DLabel(q); lb_baud_12K->setMaximumWidth(20); lb_baud_12K->setMinimumHeight(22); lb_baud_12K->setAlignment(Qt::AlignCenter); slider_12K = new DSlider(Qt::Vertical); slider_12K->setObjectName("baud_12K"); slider_12K->setMinimum(-20); slider_12K->setMaximum(20); slider_12K->setPageStep(1); auto lb_12K = new DLabel("12K"); lb_baud_14K = new DLabel(q); lb_baud_14K->setMaximumWidth(20); lb_baud_14K->setMinimumHeight(22); lb_baud_14K->setAlignment(Qt::AlignCenter); slider_14K = new DSlider(Qt::Vertical); slider_14K->setObjectName("baud_14K"); slider_14K->setMinimum(-20); slider_14K->setMaximum(20); slider_14K->setPageStep(1); auto lb_14K = new DLabel("14K"); lb_baud_16K = new DLabel(q); lb_baud_16K->setMaximumWidth(20); lb_baud_16K->setMinimumHeight(22); lb_baud_16K->setAlignment(Qt::AlignCenter); slider_16K = new DSlider(Qt::Vertical); slider_16K->setObjectName("baud_16K"); slider_16K->setMinimum(-20); slider_16K->setMaximum(20); slider_16K->setPageStep(1); auto lb_16K = new DLabel("16K"); btn_default = new DPushButton(DequalizerDialog::tr("Restore Defaults")); btn_default->setMinimumSize(240, 36); auto vlayout0 = new QVBoxLayout; auto vlayout1 = new QVBoxLayout; auto vlayout2 = new QVBoxLayout; auto vlayout3 = new QVBoxLayout; auto vlayout4 = new QVBoxLayout; auto vlayout5 = new QVBoxLayout; auto vlayout6 = new QVBoxLayout; auto vlayout7 = new QVBoxLayout; auto vlayout8 = new QVBoxLayout; auto vlayout9 = new QVBoxLayout; auto vlayout10 = new QVBoxLayout; vlayout0->addWidget(lb_baud_pre); vlayout0->addWidget(slider_pre); vlayout0->addWidget(lb_preamplifier); vlayout1->addWidget(lb_baud_60); vlayout1->addWidget(slider_60); vlayout1->addWidget(lb_60); vlayout2->addWidget(lb_baud_170); vlayout2->addWidget(slider_170); vlayout2->addWidget(lb_170); vlayout3->addWidget(lb_baud_310); vlayout3->addWidget(slider_310); vlayout3->addWidget(lb_310); vlayout4->addWidget(lb_baud_600); vlayout4->addWidget(slider_600); vlayout4->addWidget(lb_600); vlayout5->addWidget(lb_baud_1K); vlayout5->addWidget(slider_1K); vlayout5->addWidget(lb_1K); vlayout6->addWidget(lb_baud_3K); vlayout6->addWidget(slider_3K); vlayout6->addWidget(lb_3K); vlayout7->addWidget(lb_baud_6K); vlayout7->addWidget(slider_6K); vlayout7->addWidget(lb_6K); vlayout8->addWidget(lb_baud_12K); vlayout8->addWidget(slider_12K); vlayout8->addWidget(lb_12K); vlayout9->addWidget(lb_baud_14K); vlayout9->addWidget(slider_14K); vlayout9->addWidget(lb_14K); vlayout10->addWidget(lb_baud_16K); vlayout10->addWidget(slider_16K); vlayout10->addWidget(lb_16K); auto hlayout = new QHBoxLayout; hlayout->addLayout(vlayout0); hlayout->addLayout(vlayout1); hlayout->addLayout(vlayout2); hlayout->addLayout(vlayout3); hlayout->addLayout(vlayout4); hlayout->addLayout(vlayout5); hlayout->addLayout(vlayout6); hlayout->addLayout(vlayout7); hlayout->addLayout(vlayout8); hlayout->addLayout(vlayout9); hlayout->addLayout(vlayout10); hlayout->setSpacing(5); slWidget = new DBlurEffectWidget; slWidget->setBlurRectXRadius(8); slWidget->setBlurRectYRadius(8); slWidget->setRadius(8); slWidget->setBlurEnabled(true); slWidget->setMode(DBlurEffectWidget::GaussianBlur); slWidget->setMinimumWidth(517); slWidget->setMinimumHeight(264); slWidget->setLayout(hlayout); slWidget->setContentsMargins(10, 10, 9, 20); auto vlay = new QVBoxLayout; //第一行 vlay->addWidget(mtitleLabel); //第二行 auto hlay = new QHBoxLayout; hlay->addWidget(mswitchLabel, Qt::AlignLeft); hlay->addWidget(mswitchBtn, Qt::AlignLeft); hlay->addWidget(mcombox, 20, Qt::AlignCenter); hlay->addWidget(saveBtn, Qt::AlignRight); //第三行 vlay->addLayout(hlay); vlay->addStretch(2); vlay->addWidget(slWidget); vlay->addWidget(btn_default, 0, Qt::AlignCenter); vlay->setContentsMargins(20, 10, 20, 20); //å‡è¡¡å™¨é¡µé¢ auto mequalizer = new DWidget(q); mequalizer->resize(537, 393); mequalizer->setLayout(vlay); auto mtabwidget = new DTabWidget; mtabwidget->setTabPosition(QTabWidget::West); mtabwidget->setAutoFillBackground(true); mtabwidget->setDocumentMode(true); mtabwidget->resize(720, 463); mtabwidget->addTab(mequalizer, DequalizerDialog::tr("Equalizer")); mtabwidget->tabBar()->setStyle(new CustomTabStyle); mtabwidget->tabBar()->setContentsMargins(10, 0, 10, 0); auto mTitlebar = new DTitlebar(q); mTitlebar->setTitle(""); mTitlebar->resize(720, 50); //垂直布局TabWidgetå’ŒTitleBar auto mlayout = new QVBoxLayout; mlayout->addWidget(mTitlebar); mlayout->addWidget(mtabwidget); mlayout->setSpacing(0); mlayout->setMargin(0); q->setLayout(mlayout); AllbaudTypes.append(flat_bauds); AllbaudTypes.append(Classical_bauds); AllbaudTypes.append(Club_bauds); AllbaudTypes.append(Dance_bauds); AllbaudTypes.append(Full_bass_bauds); AllbaudTypes.append(Full_bass_and_treble_bauds); AllbaudTypes.append(Full_treble_bauds); AllbaudTypes.append(Headphones_bauds); AllbaudTypes.append(Large_Hall_bauds); AllbaudTypes.append(Live_bauds); AllbaudTypes.append(Party_bauds); AllbaudTypes.append(Pop_bauds); AllbaudTypes.append(Reggae_bauds); AllbaudTypes.append(Rock_bauds); AllbaudTypes.append(Ska_bauds); AllbaudTypes.append(Soft_bauds); AllbaudTypes.append(Soft_rock_bauds); AllbaudTypes.append(Techno_bauds); mswitchBtn->setChecked(switchflag); mcombox->setEnabled(switchflag); saveBtn->setEnabled(switchflag); for (DSlider *slider : q->findChildren()) { slider->setAttribute(Qt::WA_Hover, true); //开坿‚¬åœäº‹ä»¶ slider->installEventFilter(q); //安装事件过滤器 slider->setEnabled(switchflag); } if (curEffect != 0) { q->showCurMode(AllbaudTypes.at(curEffect - 1)); mcombox->setCurrentIndex(curEffect); } else { q->showCustom(); } } void DequalizerDialogPrivate::SliderOneEntry(DSlider *slider, int value) { Q_Q(DequalizerDialog); q->selectSlider(slider, QString::number(value)); if (slider == slider_pre) { Q_EMIT q->setEqualizerpre(value); } else { int bandIndex = -1; if (slider == slider_60) { bandIndex = 0; } else if (slider == slider_170) { bandIndex = 1; } else if (slider == slider_310) { bandIndex = 2; } else if (slider == slider_600) { bandIndex = 3; } else if (slider == slider_1K) { bandIndex = 4; } else if (slider == slider_3K) { bandIndex = 5; } else if (slider == slider_6K) { bandIndex = 6; } else if (slider == slider_12K) { bandIndex = 7; } else if (slider == slider_14K) { bandIndex = 8; } else if (slider == slider_16K) { bandIndex = 9; } if (bandIndex == -1) { return; } Q_EMIT q->setEqualizerbauds(bandIndex, value); } } DequalizerDialog::DequalizerDialog(QWidget *parent): DAbstractDialog(parent), d_ptr(new DequalizerDialogPrivate(this)) { Q_D(DequalizerDialog); d->readConfig(); d->initUI(); initConnection(); QFont font; font.setPixelSize(13); QFontMetrics fm(font); d->saveMessage = new DFloatingMessage(DFloatingMessage::TransientType, this); d->saveMessage->setFont(font); d->saveMessage->setIcon(QIcon(":/common/image/notify_success_new.svg")); d->saveMessage->setMessage(tr("Sound Effects Saved")); int Minwid = fm.width(tr("Sound Effects Saved")) + 70; d->saveMessage->setMinimumSize(Minwid, 60); d->saveMessage->setDuration(2000); d->saveMessage->move(width() / 2 - 80, height() - 70); d->saveMessage->hide(); } DequalizerDialog::~DequalizerDialog() { Q_D(DequalizerDialog); delete d->saveMessage; } void DequalizerDialog::initConnection() { Q_D(DequalizerDialog); connect(d->mswitchBtn, &DSwitchButton::checkedChanged, this, &DequalizerDialog::checkedChanged); for (DSlider *slider : findChildren()) { connect(slider, &DSlider::sliderReleased, [ = ]() { d->changeflag = true; if (d->mcombox->currentIndex() != 0) { d->mcombox->setCurrentIndex(0); } int value = slider->value(); d->SliderOneEntry(slider, value); }); connect(slider, &DSlider::valueChanged, [ = ](int value) { d->saveBtn->setEnabled(true); selectSlider(slider, QString::number(value)); if (!d->changeflag) { return ; } d->SliderOneEntry(slider, value); }); } connect(d->saveBtn, &DPushButton::clicked, [ = ]() { for (DSlider *slider : findChildren()) { d->settings->setOption("equalizer.all." + slider->objectName(), slider->value()); } d->settings->setOption("equalizer.all.curEffect", 0); d->saveMessage->show(); }); connect(d->mcombox, QOverload::of(&DComboBox::currentIndexChanged), this, [ = ](int index) { if (index == 0) { showCustom(); } else { d->changeflag = false; showCurMode(d->AllbaudTypes.at(index - 1)); Q_EMIT setEqualizerIndex(index); d->settings->setOption("equalizer.all.curEffect", index); } }); connect(d->btn_default, &DPushButton::clicked, this, &DequalizerDialog::setDefaultClicked); } //æ˜¾ç¤ºè‡ªå®šä¹‰æ¨¡å¼ void DequalizerDialog::showCustom() { Q_D(DequalizerDialog); if (d->changeflag) { return; } for (DSlider *slider : findChildren()) { int indexbaud = d->settings->value("equalizer.all." + slider->objectName()).toInt(); slider->setValue(indexbaud); selectSlider(slider, ""); } d->settings->setOption("equalizer.all.curEffect", 0); } //显示éžè‡ªå®šä¹‰æ¨¡å¼ void DequalizerDialog::showCurMode(int *Allbauds) { Q_D(DequalizerDialog); if (Allbauds == nullptr) { return; } int i = 0; for (DSlider *slider : findChildren()) { if (d->mswitchBtn->isChecked()) { slider->setEnabled(true); } slider->setValue(Allbauds[i]); selectSlider(slider, ""); i++; } d->saveBtn->setEnabled(false); } //开关 void DequalizerDialog::checkedChanged(bool checked) { Q_D(DequalizerDialog); for (DSlider *slider : findChildren()) { slider->setEnabled(checked); } d->mswitchLabel->setText(tr("OFF")); if (checked) { d->mswitchLabel->setText(tr("ON")); //flat; showCurMode(d->flat_bauds); d->mcombox->setCurrentIndex(1); Q_EMIT setEqualizerIndex(1); d->settings->setOption("equalizer.all.curEffect", 1); } else { Q_EMIT setEqualizerIndex(1); d->settings->setOption("equalizer.all.curEffect", 1); } d->mcombox->setEnabled(checked); d->saveBtn->setEnabled(false); // Q_EMIT setEqualizerEnable(checked); d->settings->setOption("equalizer.all.switch", checked); } //æ¢å¤é»˜è®¤ void DequalizerDialog::setDefaultClicked() { Q_D(DequalizerDialog); if (d->mswitchBtn->isChecked()) { showCurMode(d->flat_bauds); d->mswitchBtn->setChecked(false); d->mcombox->setCurrentIndex(1); // Q_EMIT setEqualizerEnable(false); d->settings->setOption("equalizer.all.curEffect", 1); for (DSlider *slider : findChildren()) { if (slider == d->slider_pre) { d->settings->setOption("equalizer.all." + slider->objectName(), 12); } else { d->settings->setOption("equalizer.all." + slider->objectName(), 0); } } } } void DequalizerDialog::selectSlider(QObject *obj, QString SliderVal) { Q_D(DequalizerDialog); if (obj == d->slider_pre) { d->lb_baud_pre->setText(SliderVal); } else if (obj == d->slider_60) { d->lb_baud_60->setText(SliderVal); } else if (obj == d->slider_170) { d->lb_baud_170->setText(SliderVal); } else if (obj == d->slider_310) { d->lb_baud_310->setText(SliderVal); } else if (obj == d->slider_600) { d->lb_baud_600->setText(SliderVal); } else if (obj == d->slider_1K) { d->lb_baud_1K->setText(SliderVal); } else if (obj == d->slider_3K) { d->lb_baud_3K->setText(SliderVal); } else if (obj == d->slider_6K) { d->lb_baud_6K->setText(SliderVal); } else if (obj == d->slider_12K) { d->lb_baud_12K->setText(SliderVal); } else if (obj == d->slider_14K) { d->lb_baud_14K->setText(SliderVal); } else if (obj == d->slider_16K) { d->lb_baud_16K->setText(SliderVal); } } bool DequalizerDialog::eventFilter(QObject *obj, QEvent *event) { Q_D(DequalizerDialog); for (DSlider *slider : findChildren()) { if (obj == slider) { if (event->type() == QEvent::HoverEnter) { selectSlider(slider, QString::number(slider->value())); return true; } if (event->type() == QEvent::HoverLeave) { selectSlider(slider, ""); return true; } } } return QWidget::eventFilter(obj, event); } deepin-music-6.0.1.54/src/music-player/view/widget/dequalizerdialog.h000664 000000 000000 00000001716 13703317554 025460 0ustar00rootroot000000 000000 #ifndef DEQUALIZERDIALOG_H #define DEQUALIZERDIALOG_H #include #include #include "../core/musicsettings.h" #include "vlc/Equalizer.h" class DequalizerDialogPrivate; class DequalizerDialog: public Dtk::Widget::DAbstractDialog { Q_OBJECT public: explicit DequalizerDialog(QWidget *parent = Q_NULLPTR); ~DequalizerDialog(); void initConnection(); void showCustom(); void showCurMode(int *Allbauds); signals: void setEqualizerEnable(bool enabled); void setEqualizerIndex(int curIndex); void setEqualizerpre(int val); void setEqualizerbauds(int index, int val); public Q_SLOTS: void checkedChanged(bool checked); void setDefaultClicked(); private: void selectSlider(QObject *obj, QString val); bool eventFilter(QObject *obj, QEvent *event); QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), DequalizerDialog) }; #endif // DEQUALIZERDIALOG_H deepin-music-6.0.1.54/src/music-player/view/widget/filter.cpp000664 000000 000000 00000014377 13703317554 023762 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "filter.h" #include #include #include #include #include #include #include #include #include HoverFilter::HoverFilter(QObject *parent) : QObject(parent) { } bool HoverFilter::eventFilter(QObject *obj, QEvent *event) { switch (event->type()) { case QEvent::Enter: { auto w = qobject_cast(obj); w->setCursor(QCursor(Qt::PointingHandCursor)); // qDebug() << "set cursor" << w << w->cursor(); // QApplication::setOverrideCursor(Qt::PointingHandCursor); return QObject::eventFilter(obj, event); } case QEvent::Leave: { auto w = qobject_cast(obj); // qDebug() << "unset cursor" << w; w->unsetCursor(); QApplication::restoreOverrideCursor(); return QObject::eventFilter(obj, event); } default: return QObject::eventFilter(obj, event); } } class HintFilterPrivate { public: HintFilterPrivate(HintFilter *parent) : q_ptr(parent) {} void showHint(QWidget *hint); QTimer *delayShowTimer = nullptr; QWidget *parentWidget = nullptr; QWidget *hintWidget = nullptr; HintFilter *q_ptr; Q_DECLARE_PUBLIC(HintFilter) }; void HintFilterPrivate::showHint(QWidget *hint) { if (!parentWidget) { return; } auto w = parentWidget; if (hintWidget && hintWidget != hint) { hintWidget->hide(); } hintWidget = hint; if (!hintWidget) { return; } DUtil::TimerSingleShot(10, [w, this]() { auto centerPos = w->mapToGlobal(w->rect().center()); hintWidget->show(); hintWidget->adjustSize(); auto sz = hintWidget->size(); centerPos.setX(centerPos.x() - sz.width() / 2); centerPos.setY(centerPos.y() - 32 - sz.height()); centerPos = hintWidget->mapFromGlobal(centerPos); centerPos = hintWidget->mapToParent(centerPos); hintWidget->move(centerPos); hintWidget->raise(); }); } HintFilter::HintFilter(QObject *parent) : QObject(parent), d_ptr(new HintFilterPrivate(this)) { Q_D(HintFilter); d->delayShowTimer = new QTimer; d->delayShowTimer->setInterval(1000); connect(d->delayShowTimer, &QTimer::timeout, this, [ = ]() { if (d->parentWidget) { auto hint = d->parentWidget->property("HintWidget").value(); d->showHint(hint); } d->delayShowTimer->stop(); }); } HintFilter::~HintFilter() { } void HintFilter::hideAll() { Q_D(HintFilter); if (d->hintWidget) { d->hintWidget->hide(); d->delayShowTimer->stop(); } } bool HintFilter::eventFilter(QObject *obj, QEvent *event) { Q_D(HintFilter); switch (event->type()) { case QEvent::Enter: { if (d->hintWidget) { d->hintWidget->hide(); } auto w = qobject_cast(obj); d->parentWidget = w; if (!w) { break; } d->hintWidget = w->property("HintWidget").value(); if (!d->hintWidget) { break; } d->delayShowTimer->stop(); bool nodelayshow = d->hintWidget->property("NoDelayShow").toBool(); if (nodelayshow) { d->showHint(d->hintWidget); } else { d->delayShowTimer->start(); } d->parentWidget->setCursor(QCursor(Qt::PointingHandCursor)); break; } case QEvent::Leave: { if (d->hintWidget) { if (!d->hintWidget->property("DelayHide").toBool()) { d->hintWidget->hide(); d->delayShowTimer->stop(); } else { QMetaObject::invokeMethod(d->hintWidget, "deleyHide", Qt::DirectConnection); } } auto w = qobject_cast(obj); if (w) { w->unsetCursor(); } break; } case QEvent::MouseButtonPress: if (d->hintWidget) { if (!d->hintWidget->property("_dm_keep_on_click").toBool()) { d->hintWidget->hide(); } d->delayShowTimer->stop(); } break; default: break; } return QObject::eventFilter(obj, event); } void HintFilter::showHitsFor(QWidget *w, QWidget *hint) { Q_D(HintFilter); if (d->hintWidget) { d->hintWidget->hide(); } d->parentWidget = w; if (!w) { return; } d->hintWidget = hint; if (!d->hintWidget) { return; } d->delayShowTimer->stop(); d->showHint(hint); d->hintWidget->setCursor(QCursor(Qt::PointingHandCursor)); } HoverShadowFilter::HoverShadowFilter(QObject *parent): QObject(parent) { } bool HoverShadowFilter::eventFilter(QObject *obj, QEvent *event) { switch (event->type()) { case QEvent::Enter: { auto w = qobject_cast(obj); auto shadow = new QGraphicsDropShadowEffect(w); shadow->setBlurRadius(8); shadow->setOffset(0, 0); shadow->setColor(Qt::white); w->setGraphicsEffect(shadow); w->setCursor(QCursor(Qt::PointingHandCursor)); return QObject::eventFilter(obj, event); } case QEvent::Leave: { auto w = qobject_cast(obj); w->graphicsEffect()->deleteLater(); w->setGraphicsEffect(nullptr); w->unsetCursor(); return QObject::eventFilter(obj, event); } default: return QObject::eventFilter(obj, event); } } deepin-music-6.0.1.54/src/music-player/view/widget/filter.h000664 000000 000000 00000003041 13703317554 023411 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include class HoverFilter : public QObject { Q_OBJECT public: explicit HoverFilter(QObject *parent = nullptr); bool eventFilter(QObject *obj, QEvent *event); }; class HoverShadowFilter : public QObject { Q_OBJECT public: explicit HoverShadowFilter(QObject *parent = nullptr); bool eventFilter(QObject *obj, QEvent *event); }; class HintFilterPrivate; class HintFilter: public QObject { Q_OBJECT public: HintFilter(QObject *parent = nullptr); ~HintFilter(); void hideAll(); bool eventFilter(QObject *obj, QEvent *event); void showHitsFor(QWidget *w, QWidget *hint); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), HintFilter) }; deepin-music-6.0.1.54/src/music-player/view/widget/infodialog.cpp000664 000000 000000 00000030542 13703317554 024600 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "infodialog.h" #include #include #include #include #include #include #include #include "dplatformwindowhandle.h" #include "dblureffectwidget.h" #include #include #include #include #include #include #include #include #include "../../core/metasearchservice.h" #include "../helper/widgethellper.h" #include "cover.h" #include "musicimagebutton.h" DWIDGET_USE_NAMESPACE static const int CoverSize = 142; class InfoDialogPrivate { public: InfoDialogPrivate(InfoDialog *parent) : q_ptr(parent) {} void initUI(); void initConnection(); void updateLabelSize(); // DBlurEffectWidget *bgBlurWidget = nullptr; DFrame *infoGridFrame = nullptr; Cover *cover = nullptr; DLabel *title = nullptr; DWindowCloseButton *closeBt = nullptr; DLabel *basicinfo = nullptr; QList valueList; QList keyList; int frameHeight = 0; InfoDialog *q_ptr; MetaPtr meta = nullptr; bool DoubleElements = false; bool isExPand = true; Q_DECLARE_PUBLIC(InfoDialog) }; void InfoDialogPrivate::initUI() { Q_Q(InfoDialog); meta = MetaPtr(new MediaMeta); q->setObjectName("InfoDialog"); q->setFixedSize(320, 500); q->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); auto layout = new QVBoxLayout(q); layout->setSpacing(0); layout->setContentsMargins(10, 50, 10, 10); closeBt = new DWindowCloseButton( q); closeBt->setFocusPolicy(Qt::NoFocus); closeBt->setFixedSize(50, 50); closeBt->setIconSize(QSize(50, 50)); closeBt->move(q->width() - 50, 0); cover = new Cover(q); cover->setContentsMargins(0, 0, 0, 0); cover->setObjectName("InfoCover"); cover->setFixedSize(CoverSize, CoverSize); cover->move(89, 60); title = new DLabel(q); title->setObjectName("InfoTitle"); title->setFixedWidth(290); title->setAlignment(Qt::AlignCenter); title->setWordWrap(true); title->setForegroundRole(DPalette::BrightText); title->move(10, 212); infoGridFrame = new DFrame(q); infoGridFrame->setFocusPolicy(Qt::NoFocus); infoGridFrame->setLineWidth(0); infoGridFrame->setFrameRounded(true); infoGridFrame->setMaximumWidth(300); infoGridFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); DPalette pl = infoGridFrame->palette(); QColor windowColor("#FFFFFF"); windowColor.setAlphaF(0.7); pl.setColor(DPalette::Window, windowColor); QColor sbcolor("#000000"); sbcolor.setAlphaF(0.05); pl.setColor(DPalette::Shadow, sbcolor); infoGridFrame->setPalette(pl); layout->addSpacing(10); layout->addWidget(cover, 0, Qt::AlignCenter); layout->addSpacing(10); layout->addWidget(title, 0, Qt::AlignCenter); layout->addSpacing(10); layout->addWidget(infoGridFrame); basicinfo = new DLabel(" " + InfoDialog::tr("Basic info"),q); basicinfo->setForegroundRole(DPalette::Text); basicinfo->setFixedWidth(300); auto infoLayout = new QVBoxLayout(infoGridFrame); infoLayout->setSpacing(0); infoLayout->setMargin(0); auto infogridLayout = new QGridLayout(infoGridFrame); infogridLayout->setMargin(10); infogridLayout->setHorizontalSpacing(10); infogridLayout->setVerticalSpacing(5); infogridLayout->setColumnStretch(0, 60); infogridLayout->setColumnStretch(1, 260); QStringList infoKeys; infoKeys << InfoDialog::tr("Title:") << InfoDialog::tr("Artist:") << InfoDialog::tr("Album:") << InfoDialog::tr("Type:") << InfoDialog::tr("Size:") << InfoDialog::tr("Duration:") << InfoDialog::tr("Path:"); for (int i = 0; i < infoKeys.length(); ++i) { auto infoKey = new DLabel(infoKeys.value(i)); // auto infoFont = infoKey->font(); // infoFont.setPointSize(8); // infoKey->setFont(infoFont); infoKey->setObjectName("InfoKey"); // infoKey->setMinimumHeight(18); infoKey->setForegroundRole(DPalette::WindowText); infoKey->setAlignment(Qt::AlignLeft | Qt::AlignTop); DFontSizeManager::instance()->bind(infoKey, DFontSizeManager::T8); keyList << infoKey; auto infoValue = new DLabel(q); // infoValue->setFont(infoFont); infoValue->setWordWrap(true); infoValue->setObjectName("InfoValue"); // infoValue->setMinimumHeight(28); infoValue->setMinimumWidth(200); infoValue->setMaximumWidth(260); infoValue->setAlignment(Qt::AlignLeft | Qt::AlignTop); infoValue->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); infoValue->setForegroundRole(DPalette::WindowText); DFontSizeManager::instance()->bind(infoValue, DFontSizeManager::T8); valueList << infoValue; infogridLayout->addWidget(infoKey); infogridLayout->addWidget(infoValue); } infoLayout->addWidget(basicinfo); infoLayout->addLayout(infogridLayout); q->connect(closeBt, &MusicImageButton::clicked, q, &DAbstractDialog::hide); q->connect(qApp, &QGuiApplication::fontChanged, q, [ = ](const QFont &font) { QFontMetrics fm(font); for (int i = 0; i < keyList.size();i++) { int w = keyList.at(0)->width(); int value_w = 300 - w; valueList.at(i)->setFixedWidth(value_w - 20); } if ( meta->size > 1.0){ q->updateInfo(meta); } }); q->updateInfo(meta); } void InfoDialogPrivate::updateLabelSize() { Q_Q(InfoDialog); title->adjustSize(); auto h = 0; for (auto label : valueList) { // label->adjustSize(); h += label->size().height() + 6 + 6; } infoGridFrame->setFixedHeight(h); infoGridFrame->adjustSize(); q->adjustSize(); } InfoDialog::InfoDialog(QWidget *parent) : DAbstractDialog(parent), d_ptr(new InfoDialogPrivate(this)) { Q_D(InfoDialog); d->initUI(); } InfoDialog::~InfoDialog() { } void InfoDialog::resizeEvent(QResizeEvent *event) { //Q_D(InfoDialog); Dtk::Widget::DAbstractDialog::resizeEvent(event); } void InfoDialog::updateInfo(const MetaPtr meta) { Q_D(InfoDialog); d->meta = meta; QString artist = meta->artist.isEmpty() ? tr("Unknown artist") : meta->artist; QString album = meta->album.isEmpty() ? tr("Unknown album") : meta->album; QStringList infoValues; infoValues << meta->title << artist << album << meta->filetype << DMusic::sizeString(meta->size) << DMusic::lengthString(meta->length) << meta->localPath; for (int i = 0; i < d->valueList.length(); ++i) { if (i != d->valueList.length() - 1) { QString str = geteElidedText(d->valueList.value(i)->font(), infoValues.value(i), d->valueList.value(i)->width()); d->valueList.value(i)->setText(str); QFontMetrics fontWidth(d->valueList.value(i)->font()); QRect rec = fontWidth.boundingRect( d->valueList.value(i)->text()); d->valueList.value(i)->setFixedHeight(rec.height()); } else { QFontMetrics fontWidth(d->valueList.value(i)->font()); int width = fontWidth.width(infoValues.value(i)); //计算字符串宽度 if (width >= d->valueList.value(i)->width()) { //å½“å­—ç¬¦ä¸²å®½åº¦å¤§äºŽæœ€å¤§å®½åº¦æ—¶è¿›è¡Œè½¬æ¢ //两行 d->DoubleElements = true; QString str = geteElidedText(d->valueList.value(i)->font(), infoValues.value(i), d->valueList.value(i)->width() * 3 / 2); d->valueList.value(i)->setText(str); QRect rec = fontWidth.boundingRect( d->valueList.value(i)->text()); d->valueList.value(i)->setFixedHeight(2 * rec.height()); } else { d->DoubleElements = false; //QString str = geteElidedText(d->valueList.value(i)->font(), infoValues.value(i), d->valueList.value(i)->width() / 2); d->valueList.value(i)->setText(infoValues.value(i)); QRect rec = fontWidth.boundingRect( d->valueList.value(i)->text()); d->valueList.value(i)->setFixedHeight( rec.height()); } } QFileInfo fileInfo(meta->localPath); QString titleStr(meta->title + "-" + meta->artist + "." + fileInfo.suffix()); titleStr = geteElidedText(d->title->font(), titleStr, d->title->width()); d->title->setText(titleStr); auto pixmapSize = static_cast(CoverSize * d->cover->devicePixelRatioF()); auto coverPixmap = QIcon(":/common/image/info_cover.svg").pixmap(QSize(pixmapSize, pixmapSize)); QImage cover = coverPixmap.toImage(); auto coverData = MetaSearchService::coverData(meta); if (coverData.length() > 0) { cover = QImage::fromData(coverData); } coverPixmap = QPixmap::fromImage(WidgetHelper::cropRect(cover, QSize(pixmapSize, pixmapSize))); coverPixmap.setDevicePixelRatio(d->cover->devicePixelRatioF()); d->cover->setCoverPixmap(coverPixmap); d->cover->update(); d->updateLabelSize(); d->title->setFocus(); } int h = 0;//one Label Height for (int i = 0;i < d->valueList.size(); i++) { h = d->valueList.value(i)->height(); if(h != 0) break; } int title_height = d->title->height(); int grideframe_height = d->infoGridFrame->height(); int total = title_height + grideframe_height + 192 + 70; if (d->DoubleElements) { setFixedHeight(total + h); } else { setFixedHeight(total + 22); } } void InfoDialog::setThemeType(int type) { Q_D(InfoDialog); QString rStr; if (type == 1) { rStr = "light"; DPalette framePl = this->palette(); QColor frameColor("#F7F7F7"); frameColor.setAlphaF(0.8); framePl.setColor(DPalette::Window, frameColor); this->setBackgroundRole(DPalette::Window); DPalette pl = d->infoGridFrame->palette(); QColor windowColor("#FFFFFF"); windowColor.setAlphaF(0.7); pl.setColor(DPalette::Window, windowColor); QColor sbcolor("#000000"); sbcolor.setAlphaF(0.05); pl.setColor(DPalette::Shadow, sbcolor); d->infoGridFrame->setPalette(pl); d->infoGridFrame->setBackgroundRole(DPalette::Window); } else { rStr = "dark"; DPalette framePl = this->palette(); QColor frameColor("#191919"); frameColor.setAlphaF(0.8); framePl.setColor(DPalette::Window, frameColor); this->setBackgroundRole(DPalette::Window); DPalette pl = d->infoGridFrame->palette(); QColor windowColor("#282828"); //windowColor.setAlphaF(0.05); pl.setColor(DPalette::Window, windowColor); QColor sbcolor("#FFFFFF"); sbcolor.setAlphaF(0.1); pl.setColor(DPalette::Shadow, sbcolor); d->infoGridFrame->setPalette(pl); d->infoGridFrame->setBackgroundRole(DPalette::Window); } } QString InfoDialog::geteElidedText(QFont font, QString str, int MaxWidth) { QFontMetrics fontWidth(font); int width = fontWidth.width(str) + 10; //计算字符串宽度,+10æå‰è¿›å…¥çœç•¥ï¼Œé¿å…å³è¾¹é®æŒ¡ if (width >= MaxWidth) { //å½“å­—ç¬¦ä¸²å®½åº¦å¤§äºŽæœ€å¤§å®½åº¦æ—¶è¿›è¡Œè½¬æ¢ str = fontWidth.elidedText(str, Qt::ElideMiddle, MaxWidth); //中间显示çœç•¥å· } return str; } deepin-music-6.0.1.54/src/music-player/view/widget/infodialog.h000664 000000 000000 00000002552 13703317554 024245 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include class InfoDialogPrivate; class InfoDialog : public Dtk::Widget::DAbstractDialog { Q_OBJECT public: explicit InfoDialog(QWidget *parent = Q_NULLPTR); ~InfoDialog() override; void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; void updateInfo(const MetaPtr meta); void setThemeType(int type); void expand(bool expand); private: QString geteElidedText(QFont font, QString str, int MaxWidth); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), InfoDialog) }; deepin-music-6.0.1.54/src/music-player/view/widget/label.cpp000664 000000 000000 00000002034 13703317554 023537 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "label.h" Label::Label(QWidget *parent) : DLabel("", parent) { } Label::Label(const QString &text, QWidget *parent): DLabel(text, parent) { } Label::~Label() { } void Label::mousePressEvent(QMouseEvent * /*event*/) { Q_EMIT clicked(false); } deepin-music-6.0.1.54/src/music-player/view/widget/label.h000664 000000 000000 00000002201 13703317554 023200 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include DWIDGET_USE_NAMESPACE class Label : public DLabel { Q_OBJECT public: explicit Label(QWidget *parent = Q_NULLPTR); explicit Label(const QString &text, QWidget *parent = Q_NULLPTR); ~Label() override; signals: void clicked(bool); protected: virtual void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; }; deepin-music-6.0.1.54/src/music-player/view/widget/listview.cpp000664 000000 000000 00000004760 13703317554 024336 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "listview.h" #include class ListViewPrivate { public: ListViewPrivate(ListView *parent) : q_ptr(parent) {} void checkScrollbarSize(); DScrollBar *vscrollBar = nullptr; ListView *q_ptr; Q_DECLARE_PUBLIC(ListView) }; void ListViewPrivate::checkScrollbarSize() { Q_Q(ListView); auto itemCount = q->model()->rowCount(); auto size = q->size(); auto scrollBarWidth = 8; vscrollBar->resize(scrollBarWidth, size.height() - 2); vscrollBar->move(size.width() - scrollBarWidth - 2, 0); vscrollBar->setSingleStep(1); vscrollBar->setPageStep(size.height() / 36); vscrollBar->setMinimum(0); if (itemCount > size.height() / 36) { vscrollBar->show(); vscrollBar->setMaximum(itemCount - size.height() / 36); } else { vscrollBar->hide(); vscrollBar->setMaximum(0); } } ListView::ListView(QWidget *parent) : DListView(parent), d_ptr(new ListViewPrivate(this)) { Q_D(ListView); d->vscrollBar = new DScrollBar(this); d->vscrollBar->setObjectName("MusicListViewScrollBar"); d->vscrollBar->setOrientation(Qt::Vertical); d->vscrollBar->raise(); connect(d->vscrollBar, &DScrollBar::valueChanged, this, [ = ](int value) { verticalScrollBar()->setValue(value); }); } ListView::~ListView() { } void ListView::updateScrollbar() { Q_D(ListView); d->checkScrollbarSize(); } void ListView::wheelEvent(QWheelEvent *event) { Q_D(ListView); QListView::wheelEvent(event); d->vscrollBar->setSliderPosition(verticalScrollBar()->sliderPosition()); } void ListView::resizeEvent(QResizeEvent *event) { Q_D(ListView); QListView::resizeEvent(event); d->checkScrollbarSize(); } deepin-music-6.0.1.54/src/music-player/view/widget/listview.h000664 000000 000000 00000002442 13703317554 023776 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include DWIDGET_USE_NAMESPACE class ListViewPrivate; class ListView : public DListView { Q_OBJECT public: explicit ListView(QWidget *parent = Q_NULLPTR); ~ListView() override; protected: void updateScrollbar(); virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE; virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), ListView) }; deepin-music-6.0.1.54/src/music-player/view/widget/lyriclabel.cpp000775 000000 000000 00000033045 13703317554 024613 0ustar00rootroot000000 000000 #include "lyriclabel.h" #include #include #include #include #include #include #include #include #include #include "../../core/util/musiclyric.h" #include "../../core/musicsettings.h" #include "musicsettings.h" #define WHEEL_SCROLL_OFFSET 50000.0 #include DGUI_USE_NAMESPACE LyricLabel::LyricLabel(bool touch, QWidget *parent) : AbstractWheelWidget(touch, parent) { lyric = new MusicLyric(); lyricFont = new QFont(); lyricFont->setFamily("SourceHanSansSC"); lyricFont->setWeight(QFont::Normal); lyricFont->setPixelSize(14); lyricNormal = new QColor("#526A7F"); lyricHighlight = new QColor("#000000"); connect(this, SIGNAL(changeTo(int)), this, SLOT(changeToEvent(int))); m_FadeFlag = MusicSettings::value("base.play.fade_in_out").toBool(); /* MyMenu *menu = new MyMenu(this); QAction *selectLyric = new QAction("å…³è”æœ¬åœ°æ­Œè¯", menu); QAction *fontSelect = new QAction("字体设置", menu); connect(fontSelect, SIGNAL(triggered(bool)), this, SLOT(changeFont())); // QAction *colorNormal = new QAction("普通颜色", menu); QAction *colorNormal = new QAction("pp", menu); connect(colorNormal, SIGNAL(triggered(bool)), this, SLOT(changeNormalColor())); QAction *colorHighLight = new QAction("高亮颜色", menu); connect(colorHighLight, SIGNAL(triggered(bool)), this, SLOT(changeHightLightColor())); menu->addAction(selectLyric); menu->addSeparator(); menu->addAction(fontSelect); menu->addAction(colorNormal); menu->addAction(colorHighLight); connect(this, SIGNAL(rightClicked()), menu, SLOT(menuVisiable()));*/ //setMinimumWidth(600); } void LyricLabel::getFromFile(QString dir) { lyric->getFromFile(dir); this->update(); } void LyricLabel::paintItem(QPainter *painter, int index, const QRect &rect) { if (index == this->m_currentItem) { painter->setPen(*lyricHighlight); QFont font(*lyricFont); font.setPixelSize(font.pixelSize() + 1); painter->setFont(font); QPoint leftpos = rect.bottomLeft(); leftpos.setY(static_cast( leftpos.y() + rect.height() / 2.0 + 5)); QPoint rightpos = rect.bottomRight(); rightpos.setY(leftpos.y()); rightpos.setX(rightpos.x() - 3); leftpos.setY(leftpos.y() - 3); rightpos.setY(rightpos.y() - 3); //leftpos.setY(leftpos.y() - rect.height() / 2); //rightpos.setY(rightpos.y() - rect.height() / 2); painter->save(); QPointF triangle1[3] = {QPointF(leftpos.x(), leftpos.y() * 1.0 + 4.5), QPointF(leftpos.x(), leftpos.y() * 1.0 - 4.5), QPointF(leftpos.x() + 9, leftpos.y())}; //1 QPointF triangle2[3] = {QPointF(rightpos.x(), rightpos.y() * 1.0 + 4.5), QPointF(rightpos.x(), rightpos.y() * 1.0 - 4.5), QPointF(rightpos.x() - 9, rightpos.y())}; //1 painter->setRenderHint(QPainter::Antialiasing, true); QColor normalcolor = *lyricHighlight; normalcolor.setAlphaF(0.5); QPen pen(normalcolor, 1, Qt::SolidLine, Qt::SquareCap, Qt::RoundJoin); painter->setBrush(normalcolor); painter->setPen(pen); painter->drawPolygon(triangle1, 3); //2 painter->drawPolygon(triangle2, 3); //2 painter->drawLine(leftpos.x() + 23, leftpos.y(), rightpos.x() - 23, rightpos.y()); painter->restore(); } else { QPen pen = painter->pen(); QColor color = pen.color(); color.setRed(lyricNormal->red()); color.setGreen(lyricNormal->green()); color.setBlue(lyricNormal->blue()); painter->setPen(color); painter->setFont(*lyricFont); } QFontMetrics fm(*lyricFont); QString lricstr = lyric->getLineAt(index); QPoint tleftpos = rect.topLeft(); if (fm.width(lricstr) > rect.width() - 100) { QString str1, str2; for (int i = 0; i < lricstr.count(); i++) { str1.append(lricstr.at(i)); if (fm.width(str1) > rect.width() - 100) { str1.chop(1); break; } } str2 = lricstr.remove(str1); painter->drawText(QRect(tleftpos.x(), tleftpos.y(), rect.width(), rect.height() / 2), Qt::AlignCenter, str1); painter->drawText(QRect(tleftpos.x(), tleftpos.y() + rect.height() / 2, rect.width(), rect.height() / 2), Qt::AlignCenter, str2); } else { painter->drawText(QRect(tleftpos.x(), tleftpos.y(), rect.width(), rect.height() / 2), Qt::AlignCenter, lyric->getLineAt(index)); } } int LyricLabel::itemHeight() const { QFontMetrics fm(*lyricFont); //qDebug() << "itemheight" << fm.height()*2.8; //return fm.height() * 1.4; return static_cast( fm.height() * 2.8); //return 45; } int LyricLabel::itemCount() const { return lyric->getCount(); } void LyricLabel::postionChanged(qint64 pos) { if (this->isScrolled) return; pos = pos + 500; //æ­Œè¯æ»šåŠ¨éœ€è¦500ms int index = lyric->getIndex(pos); if (index != m_currentItem) this->scrollTo(index); } void LyricLabel::setPostion(qint64 pos) { int index = lyric->getIndex(pos); this->setCurrentIndex(index); } void LyricLabel::slotTheme(int type) { m_themetype = type; if (type == 1) { QColor normalcolor = "#000000"; normalcolor.setAlphaF(0.5); *lyricNormal = normalcolor; *lyricHighlight = QColor("#000000"); } else { *lyricNormal = QColor("#C0C6D4"); *lyricHighlight = QColor("#FFFFFF"); } update(); } void LyricLabel::changeToEvent(int index) { emit changeTo(lyric->getPostion(index)); } void LyricLabel::changeFont() { bool flag; *lyricFont = QFontDialog::getFont(&flag, *lyricFont, this); if (flag) { // the user clicked OK and font is set to the font the user selected } else { // the user canceled the dialog; font is set to the initial value lyricFont = new QFont("宋体", 12, QFont::Bold); } } void LyricLabel::changeNormalColor() { *lyricNormal = QColorDialog::getColor(*lyricNormal, this); } void LyricLabel::changeHightLightColor() { *lyricHighlight = QColorDialog::getColor(*lyricHighlight, this); } void LyricLabel::contextMenuEvent(QContextMenuEvent *event) { Q_UNUSED(event) emit rightClicked(); } void LyricLabel::enterEvent(QEvent *e) { Q_UNUSED(e) emit mouseEnter(); } AbstractWheelWidget::AbstractWheelWidget(bool touch, QWidget *parent) : QWidget(parent), m_currentItem(0), m_itemOffset(0) { // ![0] QScroller::grabGesture(this, touch ? QScroller::TouchGesture : QScroller::LeftMouseButtonGesture); // ![0] this->isScrolled = false; this->dosignal = true; } AbstractWheelWidget::~AbstractWheelWidget() { } int AbstractWheelWidget::currentIndex() const { return m_currentItem; } void AbstractWheelWidget::setCurrentIndex(int index) { if (index >= 0 && index < itemCount()) { m_currentItem = index; m_itemOffset = 0; update(); } } bool AbstractWheelWidget::event(QEvent *e) { switch (e->type()) { // ![1] case QEvent::ScrollPrepare: { // We set the snap positions as late as possible so that we are sure // we get the correct itemHeight QScroller *scroller = QScroller::scroller(this); scroller->setSnapPositionsY( WHEEL_SCROLL_OFFSET, itemHeight() ); QScrollPrepareEvent *se = static_cast(e); se->setViewportSize(QSizeF(size())); // we claim a huge scrolling area and a huge content position and // hope that the user doesn't notice that the scroll area is restricted se->setContentPosRange(QRectF(0.0, 0.0, 0.0, WHEEL_SCROLL_OFFSET * 2)); se->setContentPos(QPointF(0.0, WHEEL_SCROLL_OFFSET + m_currentItem * itemHeight() + m_itemOffset)); se->accept(); return true; } // ![1] // ![2] case QEvent::Scroll: { QScrollEvent *se = static_cast(e); if (dosignal) { if (se->scrollState() == QScrollEvent::ScrollStarted) { qDebug() << "start scroll lyric" << endl; this->isScrolled = true; } } if (se->scrollState() == QScrollEvent::ScrollFinished) { if (dosignal) { qDebug() << "滚动到第" << m_currentItem << endl; emit changeTo(this->m_currentItem); } this->isScrolled = false; dosignal = true; } qreal y = se->contentPos().y(); int iy = static_cast(y - WHEEL_SCROLL_OFFSET); int ih = itemHeight(); // ![2] // ![3] // -- calculate the current item position and offset and redraw the widget int ic = itemCount(); if (ic > 0) { m_currentItem = iy / ih; //m_currentItem = iy / ih % ic; m_itemOffset = iy % ih; // take care when scrolling backwards. Modulo returns negative numbers /* if (m_itemOffset < 0) { m_itemOffset += ih; m_currentItem--; } */ //if (m_currentItem < 0) //m_currentItem += ic; //m_currentItem = 0; if (m_currentItem >= ic) m_currentItem = ic - 1; } // -- repaint update(); se->accept(); return true; // ![3] } case QEvent::MouseButtonPress: return true; default: return QWidget::event(e); } // return true; } void AbstractWheelWidget::paintEvent(QPaintEvent *event) { Q_UNUSED( event ); // -- first calculate size and position. int w = width(); int h = height(); QPainter painter(this); DPalette palette = this->palette(); DPalette::ColorGroup colorGroup = isEnabled() ? DPalette::Active : DPalette::Disabled; // linear gradient brush QLinearGradient grad(0.5, 0, 0.5, 1.0); grad.setColorAt(0, palette.color(colorGroup, DPalette::ButtonText)); grad.setColorAt(0.2, palette.color(colorGroup, DPalette::Button)); grad.setColorAt(0.8, palette.color(colorGroup, DPalette::Button)); grad.setColorAt(1.0, palette.color(colorGroup, DPalette::ButtonText)); grad.setCoordinateMode( QGradient::ObjectBoundingMode ); QBrush gBrush( grad ); /* // paint a border and background painter.setPen(palette.color(colorGroup, QPalette::ButtonText)); painter.setBrush(gBrush); // painter.setBrushOrigin( QPointF( 0.0, 0.0 ) ); //painter.drawRect( 0, 0, w-1, h-1 ); // paint inner border painter.setPen(palette.color(colorGroup, QPalette::Button)); painter.setBrush(Qt::NoBrush); //painter.drawRect( 1, 1, w-3, h-3 ); */ // paint the items painter.setClipRect( QRect( 3, 3, w - 6, h - 6 ) ); painter.setPen(palette.color(colorGroup, QPalette::ButtonText)); int iH = itemHeight(); int iC = itemCount(); if (iC > 0) { m_itemOffset = m_itemOffset % iH; for (int i = -h / 2 / iH; i <= h / 2 / iH + 1; i++) { int itemNum = m_currentItem + i; /* while (itemNum < 0) itemNum += iC; while (itemNum >= iC) itemNum -= iC; */ if (itemNum >= 0 && itemNum < iC) { int len = h / 2 / iH; /*线性衰å‡çš„æ–¹æ³• int t = len-abs(i); t = (t+8)*255/(len+8); */ //抛物线衰å‡çš„æ–¹æ³• int t = abs(i); t = 255 - t * t * 220 / len / len - 35; //220是255-y得到,yä¸ºè¾¹ç•Œé€æ˜Žåº¦ if (t < 0) t = 0; //qDebug() << "a值:" << t << endl; if (m_themetype == 1) { if (m_FadeFlag) { painter.setPen(QColor(255, 255, 255, t)); } else { painter.setPen(QColor(255, 255, 255, 255)); } } else { if (m_FadeFlag) { painter.setPen(QColor(0, 0, 0, t)); } else { painter.setPen(QColor("#FFFFFF")); } } paintItem(&painter, itemNum, QRect(6, h / 2 + i * iH - m_itemOffset - iH / 2, w - 6, iH )); } } } /* // draw a transparent bar over the center QColor highlight = palette.color(colorGroup, QPalette::Highlight); highlight.setAlpha(150); QLinearGradient grad2(0.5, 0, 0.5, 1.0); grad2.setColorAt(0, highlight); grad2.setColorAt(1.0, highlight.lighter()); grad2.setCoordinateMode( QGradient::ObjectBoundingMode ); QBrush gBrush2( grad2 ); QLinearGradient grad3(0.5, 0, 0.5, 1.0); grad3.setColorAt(0, highlight); grad3.setColorAt(1.0, highlight.darker()); grad3.setCoordinateMode( QGradient::ObjectBoundingMode ); QBrush gBrush3( grad3 ); painter.fillRect( QRect( 0, h/2 - iH/2, w, iH/2 ), gBrush2 ); painter.fillRect( QRect( 0, h/2, w, iH/2 ), gBrush3 ); */ } /*! Rotates the wheel widget to a given index. You can also give an index greater than itemCount or less than zero in which case the wheel widget will scroll in the given direction and end up with (index % itemCount) */ void AbstractWheelWidget::scrollTo(int index) { this->dosignal = false; setCurrentIndex(index); // QScroller *scroller = QScroller::scroller(this); // scroller->scrollTo(QPointF(0, WHEEL_SCROLL_OFFSET + index * itemHeight()), 500); } deepin-music-6.0.1.54/src/music-player/view/widget/lyriclabel.h000775 000000 000000 00000003331 13703317554 024253 0ustar00rootroot000000 000000 #ifndef LYRICLABEL_H #define LYRICLABEL_H #include DWIDGET_USE_NAMESPACE class AbstractWheelWidget : public DWidget { Q_OBJECT public: AbstractWheelWidget(bool touch, QWidget *parent = nullptr); virtual ~AbstractWheelWidget(); int currentIndex() const; void setCurrentIndex(int index); bool event(QEvent *); void paintEvent(QPaintEvent *e); virtual void paintItem(QPainter *painter, int index, const QRect &rect) = 0; virtual int itemHeight() const = 0; virtual int itemCount() const = 0; public slots: void scrollTo(int index); signals: void stopped(int index); void changeTo(int index); protected: int m_currentItem; int m_itemOffset; qreal m_lastY; bool isScrolled; bool dosignal; bool m_FadeFlag = false; int m_themetype = 1; }; class MusicLyric; class QFont; class LyricLabel : public AbstractWheelWidget { Q_OBJECT public: LyricLabel(bool touch, QWidget *parent = nullptr); void getFromFile(QString dir); void paintItem(QPainter *painter, int index, const QRect &rect); int itemHeight() const; int itemCount() const; signals: void changeTo(qint64 pos); void rightClicked(); void mouseEnter(); public slots: void postionChanged(qint64 pos); void setPostion(qint64 pos); void slotTheme(int type); protected slots: void changeToEvent(int index); void changeFont(); void changeNormalColor(); void changeHightLightColor(); protected: void contextMenuEvent(QContextMenuEvent *event);//å³å‡»äº‹ä»¶ void enterEvent(QEvent *e); protected: MusicLyric *lyric; QFont *lyricFont; QColor *lyricNormal; QColor *lyricHighlight; }; #endif // LYRICLABEL_H deepin-music-6.0.1.54/src/music-player/view/widget/lyricview.cpp000664 000000 000000 00000004536 13703317554 024506 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "lyricview.h" #include #include #include #include #include #include #include "delegate/lyriclinedelegate.h" DWIDGET_USE_NAMESPACE class LyricViewPrivate { public: LyricViewPrivate(LyricView *parent) : q_ptr(parent) {} LyricLineDelegate *delegate = nullptr; bool viewMode = false; QTimer *viewTimer = nullptr; LyricView *q_ptr; Q_DECLARE_PUBLIC(LyricView) }; LyricView::LyricView(QWidget *parent) : DListView(parent), d_ptr(new LyricViewPrivate(this)) { Q_D(LyricView); d->delegate = new LyricLineDelegate(this); setItemDelegate(d->delegate); d->viewTimer = new QTimer; d->viewTimer->setInterval(5 * 1000); setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); setSelectionMode(QListView::NoSelection); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setEditTriggers(QAbstractItemView::NoEditTriggers); //setFlow(QListView::TopToBottom); connect(d->viewTimer, &QTimer::timeout, this, [ = ]() { d->viewMode = false; update(); }); } LyricView::~LyricView() { } bool LyricView::viewMode() const { Q_D(const LyricView); return d->viewMode; } int LyricView::optical() const { return this->property("id_optical").toInt(); } void LyricView::wheelEvent(QWheelEvent *event) { Q_D(LyricView); QListView::wheelEvent(event); d->viewTimer->stop(); d->viewTimer->start(); d->viewMode = true; } deepin-music-6.0.1.54/src/music-player/view/widget/lyricview.h000664 000000 000000 00000002362 13703317554 024146 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include DWIDGET_USE_NAMESPACE class LyricViewPrivate; class LyricView : public DListView { Q_OBJECT public: explicit LyricView(QWidget *parent = Q_NULLPTR); ~LyricView() override; bool viewMode() const; int optical() const; virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), LyricView) }; deepin-music-6.0.1.54/src/music-player/view/widget/modebuttom.cpp000664 000000 000000 00000007764 13703317554 024656 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "modebuttom.h" #include #include #include #include DGUI_USE_NAMESPACE ModeButton::ModeButton(QWidget *parent) : DPushButton(parent) { m_mode = 0; connect(this, &ModeButton::clicked, this, [ = ]() { if (0 == m_modeIcons.length()) { return; } setMode((m_mode + 1) % m_modeIcons.length()); this->update(); }); auto pl = this->palette(); QColor sbcolor("#000000"); sbcolor.setAlphaF(0.05); pl.setColor(DPalette::Shadow, sbcolor); setPalette(pl); } void ModeButton::setModeIcons(const QStringList &modeIcons, const QStringList &pressIcons) { m_modeIcons = modeIcons; m_pressIcons = pressIcons; m_mode = 0; this->update(); } int ModeButton::mode() const { return m_mode; } void ModeButton::setTransparent(bool flag) { transparent = flag; } void ModeButton::setMode(int mode) { if (m_mode == mode) { return; } m_mode = mode; this->update(); Q_EMIT modeChanged(mode); } void ModeButton::paintEvent(QPaintEvent *event) { if (!transparent) { DPushButton::paintEvent(event); } QString curPicPath = m_modeIcons[m_mode]; if (status == 1 && m_mode >= 0 && m_mode <= m_pressIcons.size()) { curPicPath = m_pressIcons[m_mode]; } // QPixmap pixmap = DHiDPIHelper::loadNxPixmap(curPicPath); //// pixmap.setDevicePixelRatio(devicePixelRatioF()); // QPainter painter(this); // painter.save(); // painter.setRenderHint(QPainter::Antialiasing); // painter.setRenderHint(QPainter::HighQualityAntialiasing); // painter.setRenderHint(QPainter::SmoothPixmapTransform); // int pixmapWidth = pixmap.rect().width(); // int pixmapHeight = pixmap.rect().height(); // QRect pixmapRect((rect().width() - pixmapWidth) / 2, (rect().height() - pixmapHeight) / 2, pixmapWidth, pixmapHeight); // pixmapRect = pixmapRect.intersected(rect()); // painter.drawPixmap(pixmapRect, pixmap, QRect(0, 0, pixmapWidth, pixmapHeight)); // painter.restore(); // QIcon icon; // icon.addFile(curPicPath); // this->setIconSize(QSize(36, 36)); // this->setIcon(icon); DPushButton::paintEvent(event); QPixmap pixmap = DHiDPIHelper::loadNxPixmap(curPicPath); QPainter painter(this); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::HighQualityAntialiasing); painter.setRenderHint(QPainter::SmoothPixmapTransform); int pixmapWidth = static_cast( pixmap.rect().width() / devicePixelRatioF()); int pixmapHeight = static_cast(pixmap.rect().height() / devicePixelRatioF()); QRect pixmapRect((rect().width() - pixmapWidth) / 2, (rect().height() - pixmapHeight) / 2, pixmapWidth, pixmapHeight); pixmapRect = pixmapRect.intersected(rect()); // painter.drawPixmap(pixmapRect, pixmap, QRect(0, 0, pixmapWidth, pixmapHeight)); QIcon icon; icon.addFile(curPicPath); icon.paint(&painter, pixmapRect); painter.restore(); } void ModeButton::mousePressEvent(QMouseEvent *event) { status = 1; DPushButton::mousePressEvent(event); } void ModeButton::mouseReleaseEvent(QMouseEvent *event) { status = 0; DPushButton::mouseReleaseEvent(event); } deepin-music-6.0.1.54/src/music-player/view/widget/modebuttom.h000664 000000 000000 00000003222 13703317554 024304 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef MODEBUTTOM_H #define MODEBUTTOM_H #include DWIDGET_USE_NAMESPACE class ModeButton : public DPushButton { Q_OBJECT Q_PROPERTY(int mode READ mode WRITE setMode NOTIFY modeChanged) public: explicit ModeButton(QWidget *parent = Q_NULLPTR); void setModeIcons(const QStringList &modeIcons, const QStringList &pressIcons = QStringList()); int mode() const; void setTransparent(bool flag); signals: void modeChanged(int mode); public slots: void setMode(int mode); protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; private: char status = 0; int m_mode; bool transparent = true; QStringList m_modeIcons; QStringList m_pressIcons; }; #endif // MODEBUTTOM_H deepin-music-6.0.1.54/src/music-player/view/widget/model/000775 000000 000000 00000000000 13703317554 023055 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/music-player/view/widget/model/musiclistdatamodel.cpp000664 000000 000000 00000004316 13703317554 027454 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistdatamodel.h" #include #include "core/medialibrary.h" class MusicListDataModelPrivate { public: MusicListDataModelPrivate(MusicListDataModel *parent) : q_ptr(parent) {} PlaylistPtr playlist; MusicListDataModel *q_ptr; Q_DECLARE_PUBLIC(MusicListDataModel) }; MusicListDataModel::MusicListDataModel(QObject *parent) : QStandardItemModel(parent), d_ptr(new MusicListDataModelPrivate(this)) { } MusicListDataModel::MusicListDataModel(int rows, int columns, QObject *parent): QStandardItemModel(rows, columns, parent), d_ptr(new MusicListDataModelPrivate(this)) { } MusicListDataModel::~MusicListDataModel() { } PlaylistPtr MusicListDataModel::playlist() const { Q_D(const MusicListDataModel); return d->playlist; } void MusicListDataModel::setPlaylist(PlaylistPtr playlist) { Q_D(MusicListDataModel); d->playlist = playlist; } bool MusicListDataModel::setData(const QModelIndex &index, const QVariant &value, int role) { return QStandardItemModel::setData(index, value, role); } Qt::DropActions MusicListDataModel::supportedDropActions() const { return Qt::CopyAction | Qt::MoveAction; } Qt::ItemFlags MusicListDataModel::flags(const QModelIndex &index) const { Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index); if (index.isValid()) { return Qt::ItemIsDragEnabled | defaultFlags; } else { return Qt::ItemIsDropEnabled | defaultFlags; } } deepin-music-6.0.1.54/src/music-player/view/widget/model/musiclistdatamodel.h000664 000000 000000 00000003210 13703317554 027111 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include "core/playlist.h" class MusicListDataModelPrivate; class MusicListDataModel : public QStandardItemModel { Q_OBJECT public: explicit MusicListDataModel(QObject *parent = nullptr); MusicListDataModel(int rows, int columns, QObject *parent = Q_NULLPTR); ~MusicListDataModel() override; PlaylistPtr playlist() const; void setPlaylist(PlaylistPtr playlist); virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; virtual Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; virtual Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListDataModel) }; deepin-music-6.0.1.54/src/music-player/view/widget/model/musiclistinfomodel.cpp000664 000000 000000 00000007273 13703317554 027503 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistinfomodel.h" #include #include "core/medialibrary.h" class MusiclistInfomodelPrivate { public: MusiclistInfomodelPrivate(MusiclistInfomodel *parent) : q_ptr(parent) {} PlaylistPtr playlist; MusiclistInfomodel *q_ptr; Q_DECLARE_PUBLIC(MusiclistInfomodel) }; MusiclistInfomodel::MusiclistInfomodel(QObject *parent) : QStandardItemModel(parent), d_ptr(new MusiclistInfomodelPrivate(this)) { } MusiclistInfomodel::MusiclistInfomodel(int rows, int columns, QObject *parent): QStandardItemModel(rows, columns, parent), d_ptr(new MusiclistInfomodelPrivate(this)) { } MusiclistInfomodel::~MusiclistInfomodel() { } PlaylistPtr MusiclistInfomodel::playlist() const { Q_D(const MusiclistInfomodel); return d->playlist; } void MusiclistInfomodel::setPlaylist(PlaylistPtr playlist) { Q_D(MusiclistInfomodel); d->playlist = playlist; } QModelIndex MusiclistInfomodel::findIndex(const MetaPtr meta) { if (meta.isNull()) return QModelIndex(); Q_ASSERT(!meta.isNull()); Q_D(MusiclistInfomodel); if (!d->playlist.isNull()) { auto row = d->playlist->index(meta->hash); auto itemIndex = this->index(row, 0); auto itemHash = data(itemIndex).toString(); if (itemHash == meta->hash) { return itemIndex; } // qCritical() << "search index failed" << meta->hash << itemHash; for (int i = 0; i < rowCount(); ++i) { itemIndex = index(i, 0); auto itemHash = data(itemIndex).toString(); if (itemHash == meta->hash) { return itemIndex; } } } return QModelIndex(); } bool MusiclistInfomodel::setData(const QModelIndex &index, const QVariant &value, int role) { return QStandardItemModel::setData(index, value, role); } MetaPtr MusiclistInfomodel::meta(const QModelIndex &index, int role) const { auto hash = this->data(index, role).toString(); return MediaLibrary::instance()->meta(hash); } //#include //bool MusiclistInfomodel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) //{ // if (action == Qt::IgnoreAction) // return true; // if (!data->hasFormat("text/uri-list")) // return false; // if (column > 0) // return false; // int beginRow; // if (row != -1) // beginRow = row; // else if (parent.isValid()) // beginRow = parent.row(); //} Qt::DropActions MusiclistInfomodel::supportedDropActions() const { // return QAbstractItemModel::supportedDropActions(); return /*Qt::CopyAction | */Qt::MoveAction; } Qt::ItemFlags MusiclistInfomodel::flags(const QModelIndex &index) const { Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index); if (index.isValid()) { return Qt::ItemIsDragEnabled | defaultFlags; } else { return Qt::ItemIsDropEnabled | defaultFlags; } } deepin-music-6.0.1.54/src/music-player/view/widget/model/musiclistinfomodel.h000664 000000 000000 00000003453 13703317554 027144 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include "core/playlist.h" class MusiclistInfomodelPrivate; class MusiclistInfomodel : public QStandardItemModel { Q_OBJECT public: explicit MusiclistInfomodel(QObject *parent = nullptr); MusiclistInfomodel(int rows, int columns, QObject *parent = Q_NULLPTR); ~MusiclistInfomodel() override; PlaylistPtr playlist() const; void setPlaylist(PlaylistPtr playlist); MetaPtr meta(const QModelIndex &index, int role = Qt::DisplayRole) const; QMap hashIndexs(); QModelIndex findIndex(const MetaPtr meta); virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; virtual Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; virtual Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusiclistInfomodel) }; deepin-music-6.0.1.54/src/music-player/view/widget/model/musiclistmodel.cpp000664 000000 000000 00000003217 13703317554 026621 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistmodel.h" #include class MusiclistModelPrivate { public: MusiclistModelPrivate(MusiclistModel *parent) : q_ptr(parent) {} MusiclistModel *q_ptr; Q_DECLARE_PUBLIC(MusiclistModel) }; MusiclistModel::MusiclistModel(QObject *parent) : QStandardItemModel(parent), d_ptr(new MusiclistModelPrivate(this)) { } MusiclistModel::~MusiclistModel() { } bool MusiclistModel::setData(const QModelIndex &index, const QVariant &value, int role) { return QStandardItemModel::setData(index, value, role); } Qt::DropActions MusiclistModel::supportedDropActions() const { return Qt::CopyAction; } Qt::ItemFlags MusiclistModel::flags(const QModelIndex &index) const { Qt::ItemFlags defaultFlags = QStandardItemModel::flags(index); if (index.isValid()) return Qt::ItemIsDropEnabled | defaultFlags; else return defaultFlags; } deepin-music-6.0.1.54/src/music-player/view/widget/model/musiclistmodel.h000664 000000 000000 00000002642 13703317554 026267 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include class MusiclistModelPrivate; class MusiclistModel : public QStandardItemModel { Q_OBJECT public: explicit MusiclistModel(QObject *parent = nullptr); ~MusiclistModel() override; virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; virtual Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; virtual Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusiclistModel) }; deepin-music-6.0.1.54/src/music-player/view/widget/model/musicsearchlistmodel.cpp000775 000000 000000 00000004714 13703317554 030015 0ustar00rootroot000000 000000 /* * Copyright (C) 2020 chengdu Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musicsearchlistmodel.h" #include class MusicSearchListModelPrivate { public: MusicSearchListModelPrivate(MusicSearchListModel *parent) : q_ptr(parent) {} PlaylistPtr playlist; MusicSearchListModel *q_ptr; Q_DECLARE_PUBLIC(MusicSearchListModel) }; MusicSearchListModel::MusicSearchListModel(QObject *parent) : QStandardItemModel(parent), d_ptr(new MusicSearchListModelPrivate(this)) { } MusicSearchListModel::MusicSearchListModel(int rows, int columns, QObject *parent): QStandardItemModel(rows, columns, parent), d_ptr(new MusicSearchListModelPrivate(this)) { } MusicSearchListModel::~MusicSearchListModel() { } PlaylistPtr MusicSearchListModel::playlist() const { Q_D(const MusicSearchListModel); return d->playlist; } void MusicSearchListModel::setPlaylist(PlaylistPtr playlist) { // qDebug()<<"set playlist:"; Q_D(MusicSearchListModel); d->playlist = playlist; // qDebug() << "playlist size:" << playlist->playMusicTypePtrList().size(); for (auto meta : playlist->playMusicTypePtrList()) { // qDebug() << "playlist:" << meta->name; } } bool MusicSearchListModel::setData(const QModelIndex &index, const QVariant &value, int role) { return QStandardItemModel::setData(index, value, role); } Qt::DropActions MusicSearchListModel::supportedDropActions() const { return Qt::CopyAction | Qt::MoveAction; } Qt::ItemFlags MusicSearchListModel::flags(const QModelIndex &index) const { Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index); if (index.isValid()) { return Qt::ItemIsDragEnabled | defaultFlags; } else { return Qt::ItemIsDropEnabled | defaultFlags; } } deepin-music-6.0.1.54/src/music-player/view/widget/model/musicsearchlistmodel.h000664 000000 000000 00000003223 13703317554 027451 0ustar00rootroot000000 000000 /* * Copyright (C) 2020 chengdu Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include "core/playlist.h" #include #include class MusicSearchListModelPrivate; class MusicSearchListModel : public QStandardItemModel { Q_OBJECT public: explicit MusicSearchListModel(QObject *parent = nullptr); MusicSearchListModel(int rows, int columns, QObject *parent = Q_NULLPTR); ~MusicSearchListModel() override; PlaylistPtr playlist() const; void setPlaylist(PlaylistPtr playlist); virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; virtual Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; virtual Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicSearchListModel) }; deepin-music-6.0.1.54/src/music-player/view/widget/model/playlistmodel.cpp000664 000000 000000 00000006144 13703317554 026450 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "playlistmodel.h" #include #include "core/medialibrary.h" class PlaylistModelPrivate { public: PlaylistModelPrivate(PlaylistModel *parent) : q_ptr(parent) {} PlaylistPtr playlist; PlaylistModel *q_ptr; Q_DECLARE_PUBLIC(PlaylistModel) }; PlaylistModel::PlaylistModel(QObject *parent) : QStandardItemModel(parent), d_ptr(new PlaylistModelPrivate(this)) { } PlaylistModel::PlaylistModel(int rows, int columns, QObject *parent): QStandardItemModel(rows, columns, parent), d_ptr(new PlaylistModelPrivate(this)) { } PlaylistModel::~PlaylistModel() { } PlaylistPtr PlaylistModel::playlist() const { Q_D(const PlaylistModel); return d->playlist; } void PlaylistModel::setPlaylist(PlaylistPtr playlist) { Q_D(PlaylistModel); d->playlist = playlist; } QModelIndex PlaylistModel::findIndex(const MetaPtr meta) { Q_ASSERT(!meta.isNull()); Q_D(PlaylistModel); if (!d->playlist.isNull()) { auto row = d->playlist->index(meta->hash); auto itemIndex = this->index(row, 0); auto itemHash = data(itemIndex).toString(); if (itemHash == meta->hash) { return itemIndex; } qCritical() << "search index failed" << meta->hash << itemHash; for (int i = 0; i < rowCount(); ++i) { itemIndex = index(i, 0); auto itemHash = data(itemIndex).toString(); if (itemHash == meta->hash) { return itemIndex; } } } return QModelIndex(); } bool PlaylistModel::setData(const QModelIndex &index, const QVariant &value, int role) { return QStandardItemModel::setData(index, value, role); } MetaPtr PlaylistModel::meta(const QModelIndex &index, int role) const { auto hash = this->data(index, role).toString(); return MediaLibrary::instance()->meta(hash); } Qt::DropActions PlaylistModel::supportedDropActions() const { // return QAbstractItemModel::supportedDropActions(); return /*Qt::CopyAction | */Qt::IgnoreAction; } Qt::ItemFlags PlaylistModel::flags(const QModelIndex &index) const { Qt::ItemFlags defaultFlags = QAbstractItemModel::flags(index); return Qt::ItemIsDragEnabled | defaultFlags; // if (index.isValid()) { // return Qt::ItemIsDragEnabled | defaultFlags; // } else { // return Qt::ItemIsDropEnabled | defaultFlags; // } } deepin-music-6.0.1.54/src/music-player/view/widget/model/playlistmodel.h000664 000000 000000 00000004745 13703317554 026122 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include "core/playlist.h" class PlaylistModelPrivate; class PlaylistModel : public QStandardItemModel { Q_OBJECT public: explicit PlaylistModel(QObject *parent = nullptr); PlaylistModel(int rows, int columns, QObject *parent = Q_NULLPTR); ~PlaylistModel() override; PlaylistPtr playlist() const; void setPlaylist(PlaylistPtr playlist); MetaPtr meta(const QModelIndex &index, int role = Qt::DisplayRole) const; QMap hashIndexs(); QModelIndex findIndex(const MetaPtr meta); // Q_INVOKABLE virtual QModelIndex index(int row, int column, // const QModelIndex &parent = QModelIndex()) const = 0; // Q_INVOKABLE virtual QModelIndex parent(const QModelIndex &child) const = 0; // Q_INVOKABLE virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const; // Q_INVOKABLE virtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0; // Q_INVOKABLE virtual int columnCount(const QModelIndex &parent = QModelIndex()) const = 0; // Q_INVOKABLE virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; // bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent); virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE; virtual Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; virtual Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), PlaylistModel) }; deepin-music-6.0.1.54/src/music-player/view/widget/musicboxbutton.cpp000664 000000 000000 00000025506 13703317554 025556 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: yub.wang * * Maintainer: yub.wang * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musicboxbutton.h" #include #include #include #include DGUI_USE_NAMESPACE MusicBoxButton::MusicBoxButton(const QString &text, QWidget *parent) : DButtonBoxButton(text, parent) { } MusicBoxButton::MusicBoxButton(const QString &text, const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic, QWidget *parent) : DButtonBoxButton (text, parent) { defaultPicPath.normalPicPath = normalPic; defaultPicPath.hoverPicPath = hoverPic; defaultPicPath.pressPicPath = pressPic; defaultPicPath.checkedPicPath = checkedPic; auto pl = this->palette(); QColor sbcolor("#000000"); sbcolor.setAlphaF(0.05); pl.setColor(DPalette::Shadow, sbcolor); setPalette(pl); QIcon icon; icon.addFile(normalPic); this->setIconSize(QSize(36, 36)); this->setIcon(icon); } void MusicBoxButton::setPropertyPic(QString propertyName, const QVariant &value, const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic) { MusicPicPathInfo curPicPath; curPicPath.normalPicPath = normalPic; curPicPath.hoverPicPath = hoverPic; curPicPath.pressPicPath = pressPic; curPicPath.checkedPicPath = checkedPic; if (propertyPicPaths.first == propertyName && propertyPicPaths.second.contains(value)) { propertyPicPaths.second[value] = curPicPath; } else { QMap curPicPathInfo; curPicPathInfo.insert(value, curPicPath); propertyPicPaths.first = propertyName; propertyPicPaths.second = curPicPathInfo; } QIcon icon; icon.addFile(normalPic); this->setIconSize(QSize(36, 36)); this->setIcon(icon); } void MusicBoxButton::setPropertyPic(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic) { defaultPicPath.normalPicPath = normalPic; defaultPicPath.hoverPicPath = hoverPic; defaultPicPath.pressPicPath = pressPic; defaultPicPath.checkedPicPath = checkedPic; QIcon icon; icon.addFile(normalPic); this->setIconSize(QSize(36, 36)); this->setIcon(icon); } void MusicBoxButton::setTransparent(bool flag) { transparent = flag; } void MusicBoxButton::setAutoChecked(bool flag) { autoChecked = flag; } void MusicBoxButton::enterEvent(QEvent *event) { status = 1; QString curPicPath = defaultPicPath.normalPicPath; if (propertyPicPaths.first.isEmpty() || !propertyPicPaths.second.contains(property(propertyPicPaths.first.toStdString().data()))) { QString curPropertyPicPathStr; if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.checkedPicPath; } else { if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.hoverPicPath; } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.pressPicPath; } } if (!curPropertyPicPathStr.isEmpty()) { curPicPath = curPropertyPicPathStr; } } else { QVariant value = property(propertyPicPaths.first.toStdString().data()); MusicPicPathInfo curPropertyPicPath = propertyPicPaths.second[value]; QString curPropertyPicPathStr; if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.checkedPicPath; } else { if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.hoverPicPath; } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.pressPicPath; } else { curPropertyPicPathStr = curPropertyPicPath.normalPicPath; } } if (!curPropertyPicPathStr.isEmpty()) { curPicPath = curPropertyPicPathStr; } } QIcon icon; icon.addFile(curPicPath); this->setIconSize(QSize(36, 36)); this->setIcon(icon); DButtonBoxButton::enterEvent(event); if (autoChecked) { setChecked(true); } } void MusicBoxButton::leaveEvent(QEvent *event) { status = 0; QString curPicPath = defaultPicPath.normalPicPath; if (propertyPicPaths.first.isEmpty() || !propertyPicPaths.second.contains(property(propertyPicPaths.first.toStdString().data()))) { QString curPropertyPicPathStr; if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.checkedPicPath; } else { if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.hoverPicPath; } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.pressPicPath; } } if (!curPropertyPicPathStr.isEmpty()) { curPicPath = curPropertyPicPathStr; } } else { QVariant value = property(propertyPicPaths.first.toStdString().data()); MusicPicPathInfo curPropertyPicPath = propertyPicPaths.second[value]; QString curPropertyPicPathStr; if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.checkedPicPath; } else { if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.hoverPicPath; } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.pressPicPath; } else { curPropertyPicPathStr = curPropertyPicPath.normalPicPath; } } if (!curPropertyPicPathStr.isEmpty()) { curPicPath = curPropertyPicPathStr; } } QIcon icon; icon.addFile(curPicPath); this->setIconSize(QSize(36, 36)); this->setIcon(icon); DButtonBoxButton::leaveEvent(event); if (autoChecked) { setChecked(false); } } void MusicBoxButton::mousePressEvent(QMouseEvent *event) { status = 2; QString curPicPath = defaultPicPath.normalPicPath; if (propertyPicPaths.first.isEmpty() || !propertyPicPaths.second.contains(property(propertyPicPaths.first.toStdString().data()))) { QString curPropertyPicPathStr; if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.checkedPicPath; } else { if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.hoverPicPath; } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.pressPicPath; } } if (!curPropertyPicPathStr.isEmpty()) { curPicPath = curPropertyPicPathStr; } } else { QVariant value = property(propertyPicPaths.first.toStdString().data()); MusicPicPathInfo curPropertyPicPath = propertyPicPaths.second[value]; QString curPropertyPicPathStr; if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.checkedPicPath; } else { if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.hoverPicPath; } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.pressPicPath; } else { curPropertyPicPathStr = curPropertyPicPath.normalPicPath; } } if (!curPropertyPicPathStr.isEmpty()) { curPicPath = curPropertyPicPathStr; } } QIcon icon; icon.addFile(curPicPath); this->setIconSize(QSize(36, 36)); this->setIcon(icon); DButtonBoxButton::mousePressEvent(event); } void MusicBoxButton::mouseReleaseEvent(QMouseEvent *event) { status = 0; QString curPicPath = defaultPicPath.normalPicPath; if (propertyPicPaths.first.isEmpty() || !propertyPicPaths.second.contains(property(propertyPicPaths.first.toStdString().data()))) { QString curPropertyPicPathStr; if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.checkedPicPath; } else { if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.hoverPicPath; } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.pressPicPath; } } if (!curPropertyPicPathStr.isEmpty()) { curPicPath = curPropertyPicPathStr; } } else { QVariant value = property(propertyPicPaths.first.toStdString().data()); MusicPicPathInfo curPropertyPicPath = propertyPicPaths.second[value]; QString curPropertyPicPathStr; if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.checkedPicPath; } else { if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.hoverPicPath; } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.pressPicPath; } else { curPropertyPicPathStr = curPropertyPicPath.normalPicPath; } } if (!curPropertyPicPathStr.isEmpty()) { curPicPath = curPropertyPicPathStr; } } QIcon icon; icon.addFile(curPicPath); this->setIconSize(QSize(36, 36)); this->setIcon(icon); DButtonBoxButton::mouseReleaseEvent(event); } deepin-music-6.0.1.54/src/music-player/view/widget/musicboxbutton.h000664 000000 000000 00000005224 13703317554 025216 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: yub.wang * * Maintainer: yub.wang * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef MUSICBOXBUTTON_H #define MUSICBOXBUTTON_H #pragma once #include #include #include #include #include DWIDGET_USE_NAMESPACE class MusicBoxButton : public DButtonBoxButton { struct MusicPicPathInfo { QString normalPicPath; QString hoverPicPath; QString pressPicPath; QString checkedPicPath; }; Q_OBJECT public: explicit MusicBoxButton(const QString &text, QWidget *parent = Q_NULLPTR); MusicBoxButton(const QString &text, const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic = QString(), QWidget *parent = nullptr); void setPropertyPic(QString propertyName, const QVariant &value, const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic = QString()); void setPropertyPic(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic = QString()); void setTransparent(bool flag); void setAutoChecked(bool flag); protected: //void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; void enterEvent(QEvent *event) Q_DECL_OVERRIDE; void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; private: char status = 0; bool autoChecked = false; MusicPicPathInfo defaultPicPath; bool transparent = true; QPair > propertyPicPaths; }; #endif // MUSICBOXBUTTON_H deepin-music-6.0.1.54/src/music-player/view/widget/musiciconbutton.cpp000664 000000 000000 00000014307 13703317554 025713 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: yub.wang * * Maintainer: yub.wang * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiciconbutton.h" #include #include #include #include DGUI_USE_NAMESPACE MusicIconButton::MusicIconButton(QWidget *parent) : DPushButton(parent) { } MusicIconButton::MusicIconButton(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic, QWidget *parent) : DPushButton (parent) { defaultPicPath.normalPicPath = normalPic; defaultPicPath.hoverPicPath = hoverPic; defaultPicPath.pressPicPath = pressPic; defaultPicPath.checkedPicPath = checkedPic; auto pl = this->palette(); QColor sbcolor("#000000"); sbcolor.setAlphaF(0.05); pl.setColor(DPalette::Shadow, sbcolor); setPalette(pl); } void MusicIconButton::setPropertyPic(QString propertyName, const QVariant &value, const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic) { MusicPicPathInfo curPicPath; curPicPath.normalPicPath = normalPic; curPicPath.hoverPicPath = hoverPic; curPicPath.pressPicPath = pressPic; curPicPath.checkedPicPath = checkedPic; if (propertyPicPaths.first == propertyName) { propertyPicPaths.second[value] = curPicPath; } else { QMap curPicPathInfo; curPicPathInfo.insert(value, curPicPath); propertyPicPaths.first = propertyName; propertyPicPaths.second = curPicPathInfo; } } void MusicIconButton::setPropertyPic(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic) { defaultPicPath.normalPicPath = normalPic; defaultPicPath.hoverPicPath = hoverPic; defaultPicPath.pressPicPath = pressPic; defaultPicPath.checkedPicPath = checkedPic; } void MusicIconButton::setTransparent(bool flag) { transparent = flag; } void MusicIconButton::setAutoChecked(bool flag) { autoChecked = flag; } void MusicIconButton::paintEvent(QPaintEvent *event) { if (!transparent) { DPushButton::paintEvent(event); } QString curPicPath = defaultPicPath.normalPicPath; if (propertyPicPaths.first.isEmpty() || !propertyPicPaths.second.contains(property(propertyPicPaths.first.toStdString().data()))) { QString curPropertyPicPathStr; if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.checkedPicPath; } else { if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.hoverPicPath; } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.pressPicPath; } } if (!curPropertyPicPathStr.isEmpty()) { curPicPath = curPropertyPicPathStr; } } else { QVariant value = property(propertyPicPaths.first.toStdString().data()); MusicPicPathInfo curPropertyPicPath = propertyPicPaths.second[value]; QString curPropertyPicPathStr; if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.checkedPicPath; } else { if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.hoverPicPath; } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.pressPicPath; } else { curPropertyPicPathStr = curPropertyPicPath.normalPicPath; } } if (!curPropertyPicPathStr.isEmpty()) { curPicPath = curPropertyPicPathStr; } } // QIcon icon; // icon.addFile(curPicPath); // this->setIconSize(QSize(36, 36)); // this->setIcon(icon); DPushButton::paintEvent(event); QPixmap pixmap = DHiDPIHelper::loadNxPixmap(curPicPath); if (pixmap.isNull()) { pixmap = DHiDPIHelper::loadNxPixmap(defaultPicPath.normalPicPath); curPicPath = defaultPicPath.normalPicPath; } QPainter painter(this); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::HighQualityAntialiasing); painter.setRenderHint(QPainter::SmoothPixmapTransform); int pixmapWidth = static_cast(pixmap.rect().width() / devicePixelRatioF()); int pixmapHeight = static_cast(pixmap.rect().height() / devicePixelRatioF()); QRect pixmapRect((rect().width() - pixmapWidth) / 2, (rect().height() - pixmapHeight) / 2, pixmapWidth, pixmapHeight); pixmapRect = pixmapRect.intersected(rect()); // painter.drawPixmap(pixmapRect, pixmap, QRect(0, 0, pixmapWidth, pixmapHeight)); QIcon icon; icon.addFile(curPicPath); icon.paint(&painter, pixmapRect); painter.restore(); } void MusicIconButton::enterEvent(QEvent *event) { status = 1; DPushButton::enterEvent(event); if (autoChecked) { setChecked(true); } } void MusicIconButton::leaveEvent(QEvent *event) { status = 0; DPushButton::leaveEvent(event); if (autoChecked) { setChecked(false); } } void MusicIconButton::mousePressEvent(QMouseEvent *event) { status = 2; DPushButton::mousePressEvent(event); } void MusicIconButton::mouseReleaseEvent(QMouseEvent *event) { status = 0; DPushButton::mouseReleaseEvent(event); } deepin-music-6.0.1.54/src/music-player/view/widget/musiciconbutton.h000664 000000 000000 00000005117 13703317554 025357 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: yub.wang * * Maintainer: yub.wang * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef MUSICICONBUTTON_H #define MUSICICONBUTTON_H #pragma once #include #include #include #include DWIDGET_USE_NAMESPACE class MusicIconButton : public DPushButton { struct MusicPicPathInfo { QString normalPicPath; QString hoverPicPath; QString pressPicPath; QString checkedPicPath; }; Q_OBJECT public: explicit MusicIconButton(QWidget *parent = Q_NULLPTR); MusicIconButton(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic = QString(), QWidget *parent = nullptr); void setPropertyPic(QString propertyName, const QVariant &value, const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic = QString()); void setPropertyPic(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic = QString()); void setTransparent(bool flag); void setAutoChecked(bool flag); protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; void enterEvent(QEvent *event) Q_DECL_OVERRIDE; void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; private: char status = 0; bool autoChecked = false; MusicPicPathInfo defaultPicPath; bool transparent = true; QPair > propertyPicPaths; }; #endif // MUSICICONBUTTON_H deepin-music-6.0.1.54/src/music-player/view/widget/musicimagebutton.cpp000664 000000 000000 00000013626 13703317554 026050 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: yub.wang * * Maintainer: yub.wang * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musicimagebutton.h" #include #include #include #include DGUI_USE_NAMESPACE MusicImageButton::MusicImageButton(QWidget *parent) : DPushButton(parent) { } MusicImageButton::MusicImageButton(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic, QWidget *parent) : DPushButton (parent) { defaultPicPath.normalPicPath = normalPic; defaultPicPath.hoverPicPath = hoverPic; defaultPicPath.pressPicPath = pressPic; defaultPicPath.checkedPicPath = checkedPic; auto pl = this->palette(); QColor sbcolor("#000000"); sbcolor.setAlphaF(0.05); pl.setColor(DPalette::Shadow, sbcolor); setPalette(pl); } void MusicImageButton::setPropertyPic(QString propertyName, const QVariant &value, const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic) { MusicPicPathInfo curPicPath; curPicPath.normalPicPath = normalPic; curPicPath.hoverPicPath = hoverPic; curPicPath.pressPicPath = pressPic; curPicPath.checkedPicPath = checkedPic; if (propertyPicPaths.first == propertyName) { propertyPicPaths.second[value] = curPicPath; } else { QMap curPicPathInfo; curPicPathInfo.insert(value, curPicPath); propertyPicPaths.first = propertyName; propertyPicPaths.second = curPicPathInfo; } } void MusicImageButton::setPropertyPic(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic) { defaultPicPath.normalPicPath = normalPic; defaultPicPath.hoverPicPath = hoverPic; defaultPicPath.pressPicPath = pressPic; defaultPicPath.checkedPicPath = checkedPic; } void MusicImageButton::setTransparent(bool flag) { transparent = flag; } void MusicImageButton::setAutoChecked(bool flag) { autoChecked = flag; } void MusicImageButton::paintEvent(QPaintEvent *event) { if (!transparent) { DPushButton::paintEvent(event); } QString curPicPath = defaultPicPath.normalPicPath; if (propertyPicPaths.first.isEmpty() || !propertyPicPaths.second.contains(property(propertyPicPaths.first.toStdString().data()))) { QString curPropertyPicPathStr; if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.checkedPicPath; } else { if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.hoverPicPath; } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { curPropertyPicPathStr = defaultPicPath.pressPicPath; } } if (!curPropertyPicPathStr.isEmpty()) { curPicPath = curPropertyPicPathStr; } } else { QVariant value = property(propertyPicPaths.first.toStdString().data()); MusicPicPathInfo curPropertyPicPath = propertyPicPaths.second[value]; QString curPropertyPicPathStr; if (isChecked() && !defaultPicPath.checkedPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.checkedPicPath; } else { if (status == 1 && !defaultPicPath.hoverPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.hoverPicPath; } else if (status == 2 && !defaultPicPath.pressPicPath.isEmpty()) { curPropertyPicPathStr = curPropertyPicPath.pressPicPath; } else { curPropertyPicPathStr = curPropertyPicPath.normalPicPath; } } if (!curPropertyPicPathStr.isEmpty()) { curPicPath = curPropertyPicPathStr; } } QPixmap pixmap = DHiDPIHelper::loadNxPixmap(curPicPath); if (pixmap.isNull()) { pixmap = DHiDPIHelper::loadNxPixmap(defaultPicPath.normalPicPath); } pixmap.setDevicePixelRatio(devicePixelRatioF()); QPainter painter(this); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::HighQualityAntialiasing); painter.setRenderHint(QPainter::SmoothPixmapTransform); int pixmapWidth = pixmap.rect().width(); int pixmapHeight = pixmap.rect().height(); QRect pixmapRect((rect().width() - pixmapWidth) / 2, (rect().height() - pixmapHeight) / 2, pixmapWidth, pixmapHeight); pixmapRect = pixmapRect.intersected(rect()); painter.drawPixmap(pixmapRect, pixmap, QRect(0, 0, pixmapWidth, pixmapHeight)); painter.restore(); } void MusicImageButton::enterEvent(QEvent *event) { status = 1; DPushButton::enterEvent(event); if (autoChecked) { setChecked(true); } } void MusicImageButton::leaveEvent(QEvent *event) { status = 0; DPushButton::leaveEvent(event); if (autoChecked) { setChecked(false); } } void MusicImageButton::mousePressEvent(QMouseEvent *event) { status = 2; DPushButton::mousePressEvent(event); } void MusicImageButton::mouseReleaseEvent(QMouseEvent *event) { status = 0; DPushButton::mouseReleaseEvent(event); } deepin-music-6.0.1.54/src/music-player/view/widget/musicimagebutton.h000664 000000 000000 00000004777 13703317554 025524 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: yub.wang * * Maintainer: yub.wang * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include DWIDGET_USE_NAMESPACE class MusicImageButton : public DPushButton { struct MusicPicPathInfo { QString normalPicPath; QString hoverPicPath; QString pressPicPath; QString checkedPicPath; }; Q_OBJECT public: explicit MusicImageButton(QWidget *parent = Q_NULLPTR); MusicImageButton(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic = QString(), QWidget *parent = nullptr); void setPropertyPic(QString propertyName, const QVariant &value, const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic = QString()); void setPropertyPic(const QString &normalPic, const QString &hoverPic, const QString &pressPic, const QString &checkedPic = QString()); void setTransparent(bool flag); void setAutoChecked(bool flag); protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; void enterEvent(QEvent *event) Q_DECL_OVERRIDE; void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; private: char status = 0; bool autoChecked = false; MusicPicPathInfo defaultPicPath; bool transparent = true; QPair > propertyPicPaths; }; deepin-music-6.0.1.54/src/music-player/view/widget/musiclistdataview.cpp000664 000000 000000 00000032362 13703317554 026230 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistdataview.h" #include #include #include #include #include #include #include #include #include #include #include "util/pinyinsearch.h" #include "../../core/metasearchservice.h" #include "../helper/widgethellper.h" #include "delegate/musiclistdatadelegate.h" #include "model/musiclistdatamodel.h" #include "musiclistdialog.h" DWIDGET_USE_NAMESPACE class MusicListDataViewPrivate { public: MusicListDataViewPrivate(MusicListDataView *parent): q_ptr(parent) {} void addPlayMusicTypePtr(const PlayMusicTypePtr TypePtr); MusicListDataModel *model = nullptr; MusicListDataDelegate *delegate = nullptr; QString defaultCover = ":/common/image/cover_max.svg"; MetaPtr playing = nullptr; MetaPtr hoverin = nullptr; int themeType = 1; MusicListDialog *musciListDialog = nullptr; PlayMusicTypePtrList curPlayMusicTypePtrList; QPixmap playingPixmap = QPixmap(":/mpimage/light/music1.svg"); QPixmap sidebarPixmap = QPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); QPixmap albumPixmap = QPixmap(":/mpimage/light/music_white_album_cover/music1.svg"); MusicListDataView *q_ptr; Q_DECLARE_PUBLIC(MusicListDataView) }; void MusicListDataViewPrivate::addPlayMusicTypePtr(const PlayMusicTypePtr TypePtr) { QStandardItem *newItem = new QStandardItem; QIcon icon(defaultCover); if (!TypePtr->icon.isEmpty()) { icon = QIcon(QPixmap::fromImage(QImage::fromData(TypePtr->icon).scaled(170, 170, Qt::IgnoreAspectRatio, Qt::SmoothTransformation))); } newItem->setIcon(icon); model->appendRow(newItem); auto row = model->rowCount() - 1; QModelIndex index = model->index(row, 0, QModelIndex()); model->setData(index, TypePtr->name); } MusicListDataView::MusicListDataView(QWidget *parent) : DListView(parent), d_ptr(new MusicListDataViewPrivate(this)) { Q_D(MusicListDataView); setObjectName("MusicListDataView"); d->model = new MusicListDataModel(0, 1, this); setModel(d->model); d->delegate = new MusicListDataDelegate; setItemDelegate(d->delegate); setViewportMargins(0, 0, 8, 0); setUniformItemSizes(true); setViewModeFlag(QListView::ListMode); setResizeMode(QListView::Adjust); setMovement(QListView::Static); setLayoutMode(QListView::Batched); setBatchSize(2000); //setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); d->musciListDialog = new MusicListDialog(this); connect(this, &MusicListDataView::doubleClicked, this, [ = ](const QModelIndex & index) { PlaylistPtr curPlaylist = d->model->playlist(); auto playMusicTypePtrList = curPlaylist->playMusicTypePtrList(); if (index.row() >= playMusicTypePtrList.size()) { return; } auto PlayMusicTypePtr = playMusicTypePtrList[index.row()]; d->musciListDialog->setPlayMusicData(curPlaylist, PlayMusicTypePtr); d->musciListDialog->setPlaying(playing()); d->musciListDialog->exec(); }); connect(d->delegate, &MusicListDataDelegate::hoverPress, this, [ = ](const QModelIndex & index) { PlaylistPtr curPlaylist = d->model->playlist(); auto playMusicTypePtrList = curPlaylist->playMusicTypePtrList(); if (index.row() >= playMusicTypePtrList.size()) { return; } auto PlayMusicTypePtr = playMusicTypePtrList[index.row()]; playlist()->playMusicTypeToMeta(PlayMusicTypePtr->name); if (curPlaylist->id() == ArtistResultListID || curPlaylist->id() == ArtistMusicListID) { if (this->playing() == nullptr || this->playing()->artist != PlayMusicTypePtr->playlistMeta.metas.first()->artist) { auto curtMeta = playlist()->first(); Q_EMIT playMedia(curtMeta); setPlaying(curtMeta); } else { auto curtMeta = playlist()->playing(); if (curtMeta.isNull() && !playlist()->isEmpty()) { curtMeta = playlist()->first(); setPlaying(curtMeta); } if (!playlist()->playingStatus()) { Q_EMIT resume(curtMeta); } else { Q_EMIT pause(curPlaylist, curtMeta); } } } if (curPlaylist->id() == AlbumMusicListID || curPlaylist->id() == AlbumResultListID) { if (this->playing() == nullptr || this->playing()->album != PlayMusicTypePtr->playlistMeta.metas.first()->album) { auto curtMeta = playlist()->first(); Q_EMIT playMedia(curtMeta); setPlaying(curtMeta); } else { auto curtMeta = playlist()->playing(); if (curtMeta.isNull() && !playlist()->isEmpty()) { curtMeta = playlist()->first(); setPlaying(curtMeta); } if (!playlist()->playingStatus()) { Q_EMIT resume(curtMeta); } else { Q_EMIT pause(curPlaylist, curtMeta); } } } }); connect(d->musciListDialog, &MusicListDialog::requestCustomContextMenu, this, [ = ](const QPoint & pos) { Q_EMIT requestCustomContextMenu(pos); }); connect(d->musciListDialog, &MusicListDialog::playMedia, this, [ = ](const MetaPtr meta) { Q_EMIT playMedia(meta); }); connect(d->musciListDialog, &MusicListDialog::resume, this, [ = ](const MetaPtr meta) { Q_EMIT resume(meta); }); connect(d->musciListDialog, &MusicListDialog::addToPlaylist, this, [ = ](PlaylistPtr playlist, const MetaPtrList & metalist) { Q_EMIT addToPlaylist(playlist, metalist); }); connect(d->musciListDialog, &MusicListDialog::musiclistRemove, this, [ = ](const MetaPtrList & metalist) { Q_EMIT musiclistRemove(metalist); }); connect(d->musciListDialog, &MusicListDialog::musiclistDelete, this, [ = ](const MetaPtrList & metalist) { Q_EMIT musiclistDelete(metalist); }); connect(d->musciListDialog, &MusicListDialog::modeChanged, this, [ = ](int mode) { Q_EMIT modeChanged(mode); }); connect(d->musciListDialog, &MusicListDialog::pause, this, [ = ](const MetaPtr meta) { Q_EMIT pause(playlist(), meta); }); connect(d->musciListDialog, &MusicListDialog::addMetasFavourite, this, [ = ](const MetaPtrList & metalist) { Q_EMIT addMetasFavourite(metalist); }); connect(d->musciListDialog, &MusicListDialog::removeMetasFavourite, this, [ = ](const MetaPtrList & metalist) { Q_EMIT removeMetasFavourite(metalist); }); setSelectionMode(QListView::ExtendedSelection); setSelectionBehavior(QAbstractItemView::SelectRows); } MusicListDataView::~MusicListDataView() { } PlaylistPtr MusicListDataView::playlist() const { Q_D(const MusicListDataView); return d->model->playlist(); } int MusicListDataView::rowCount() { Q_D(const MusicListDataView); return d->model->rowCount(); } int MusicListDataView::listSize() { Q_D(MusicListDataView); return d->curPlayMusicTypePtrList.size(); } void MusicListDataView::setViewModeFlag(QListView::ViewMode mode) { if (mode == QListView::IconMode) { setIconSize(QSize(150, 150)); setGridSize(QSize(-1, -1)); setViewportMargins(-10, -13, -35, 10); setSpacing(20); } else { setIconSize(QSize(36, 36)); setGridSize(QSize(-1, -1)); setViewportMargins(0, 0, 8, 0); setSpacing(0); } setViewMode(mode); } void MusicListDataView::setPlaying(const MetaPtr meta) { Q_D(MusicListDataView); d->playing = meta; d->musciListDialog->setPlaying(playing()); } MetaPtr MusicListDataView::playing() const { Q_D(const MusicListDataView); return d->playing; } MetaPtr MusicListDataView::hoverin() const { Q_D(const MusicListDataView); return d->hoverin; } bool MusicListDataView::playingState() const { return playlist()->playingStatus(); } void MusicListDataView::showContextMenu(const QPoint &pos, PlaylistPtr selectedPlaylist, PlaylistPtr favPlaylist, QList newPlaylists) { Q_D(const MusicListDataView); d->musciListDialog->showContextMenu(pos, selectedPlaylist, favPlaylist, newPlaylists); } PlayMusicTypePtrList MusicListDataView::playMusicTypePtrList() const { Q_D(const MusicListDataView); return d->curPlayMusicTypePtrList; } void MusicListDataView::setThemeType(int type) { Q_D(MusicListDataView); d->themeType = type; d->musciListDialog->setThemeType(type); } int MusicListDataView::getThemeType() const { Q_D(const MusicListDataView); return d->themeType; } void MusicListDataView::setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap) { Q_D(MusicListDataView); d->playingPixmap = pixmap; d->sidebarPixmap = sidebarPixmap; d->albumPixmap = albumPixmap; if (d->musciListDialog->isVisible()) d->musciListDialog->setPlayPixmap(pixmap, sidebarPixmap); update(); } QPixmap MusicListDataView::getPlayPixmap() const { Q_D(const MusicListDataView); return d->playingPixmap; } QPixmap MusicListDataView::getSidebarPixmap() const { Q_D(const MusicListDataView); return d->sidebarPixmap; } QPixmap MusicListDataView::getAlbumPixmap() const { Q_D(const MusicListDataView); return d->albumPixmap; } void MusicListDataView::updateList() { Q_D(MusicListDataView); PlaylistPtr playlist = d->model->playlist(); if (playlist.isNull()) { qWarning() << "can not change to emptry playlist"; return; } QVector allStr; for (auto meta : playlist->playMusicTypePtrList()) { allStr.append(meta->name); } for (int i = d->model->rowCount() - 1; i >= 0; --i) { auto index = d->model->index(i, 0); auto itemName = d->model->data(index).toString(); if (!allStr.contains(itemName)) { d->curPlayMusicTypePtrList.removeAt(i); d->model->removeRow(i); } } } void MusicListDataView::mouseMoveEvent(QMouseEvent *event) { Q_UNUSED(event) } void MusicListDataView::onMusiclistChanged(PlaylistPtr playlist) { Q_D(MusicListDataView); if (playlist.isNull()) { qWarning() << "can not change to emptry playlist"; d->model->removeRows(0, d->model->rowCount()); d->model->setPlaylist(nullptr); d->curPlayMusicTypePtrList.clear(); return; } setUpdatesEnabled(false); d->model->removeRows(0, d->model->rowCount()); QString searchStr = playlist->searchStr(); bool chineseFlag = false; for (auto ch : searchStr) { if (DMusic::PinyinSearch::isChinese(ch)) { chineseFlag = true; break; } } d->curPlayMusicTypePtrList.clear(); for (auto meta : playlist->playMusicTypePtrList()) { if (searchStr.isEmpty()) { d->addPlayMusicTypePtr(meta); d->curPlayMusicTypePtrList.append(meta); } else { if (chineseFlag) { if (meta->name.contains(searchStr, Qt::CaseInsensitive)) { d->addPlayMusicTypePtr(meta); d->curPlayMusicTypePtrList.append(meta); } } else { if (playlist->searchStr().size() == 1) { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(meta->name); if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { d->addPlayMusicTypePtr(meta); d->curPlayMusicTypePtrList.append(meta); } } else { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(meta->name); if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { d->addPlayMusicTypePtr(meta); d->curPlayMusicTypePtrList.append(meta); } } } } } d->model->setPlaylist(playlist); setUpdatesEnabled(true); //updateScrollbar(); } deepin-music-6.0.1.54/src/music-player/view/widget/musiclistdataview.h000664 000000 000000 00000005167 13703317554 025700 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "../../core/playlist.h" DWIDGET_USE_NAMESPACE class MusicListDataViewPrivate; class MusicListDataView : public DListView { Q_OBJECT public: explicit MusicListDataView(QWidget *parent = Q_NULLPTR); ~MusicListDataView() override; PlaylistPtr playlist() const; int rowCount(); int listSize(); void setViewModeFlag(QListView::ViewMode mode); void setPlaying(const MetaPtr); MetaPtr playing() const; MetaPtr hoverin() const; bool playingState()const; void showContextMenu(const QPoint &pos, PlaylistPtr selectedPlaylist, PlaylistPtr favPlaylist, QList newPlaylists); PlayMusicTypePtrList playMusicTypePtrList() const; void setThemeType(int type); int getThemeType() const; void setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap); QPixmap getPlayPixmap() const; QPixmap getSidebarPixmap() const; QPixmap getAlbumPixmap() const; void updateList(); signals: void requestCustomContextMenu(const QPoint &pos); void playMedia(const MetaPtr meta); void resume(const MetaPtr meta); void pause(PlaylistPtr playlist, const MetaPtr meta); void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); void musiclistRemove(const MetaPtrList &metalist); void musiclistDelete(const MetaPtrList &metalist); void modeChanged(int); void addMetasFavourite(const MetaPtrList &metalist); void removeMetasFavourite(const MetaPtrList &metalist); protected: virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; public: void onMusiclistChanged(PlaylistPtr playlist); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListDataView) }; deepin-music-6.0.1.54/src/music-player/view/widget/musiclistdialog.cpp000664 000000 000000 00000042176 13703317554 025667 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistdialog.h" #include #include #include #include #include #include #include #include #include #include #include #include "musiclistinfoview.h" #include "musicimagebutton.h" #include "infodialog.h" #include "musictitleimage.h" DWIDGET_USE_NAMESPACE class MusicListDialogPrivate { public: MusicListDialogPrivate(MusicListDialog *parent) : q_ptr(parent) {} void initUI(); void initConnection(); MusicTitleImageWidget *titleFrame = nullptr; DLabel *titleLabel = nullptr; DLabel *infoLabel = nullptr; DPushButton *btPlayAll = nullptr; DPushButton *btRandomPlay = nullptr; InfoDialog *infoDialog = nullptr; MusicImageButton *closeBt = nullptr; MusicListInfoView *musicListInfoView = nullptr; MusicListDialog *q_ptr; Q_DECLARE_PUBLIC(MusicListDialog) }; void MusicListDialogPrivate::initUI() { Q_Q(MusicListDialog); q->setAutoFillBackground(true); auto palette = q->palette(); QColor BackgroundColor("#F8F8F8"); palette.setColor(DPalette::Window, BackgroundColor); q->setPalette(palette); auto layout = new QVBoxLayout(q); layout->setSpacing(0); layout->setContentsMargins(0, 10, 0, 0); titleFrame = new MusicTitleImageWidget; titleFrame->setFixedSize(480, 130); QPixmap pixmap = DHiDPIHelper::loadNxPixmap(":/common/image/cover_max.svg"); pixmap = pixmap.scaled(480, 130, Qt::KeepAspectRatioByExpanding); titleFrame->setPixmap(pixmap); auto closeLayout = new QHBoxLayout(titleFrame); closeLayout->setSpacing(0); closeLayout->setContentsMargins(0, 5, 5, 0); auto titleLayout = new QVBoxLayout(titleFrame); titleLayout->setSpacing(0); titleLayout->setContentsMargins(28, 10, 0, 18); closeBt = new MusicImageButton(":/mpimage/light/normal/close_round normal.svg", ":/mpimage/light/hover/close_round hover.svg", ":/mpimage/light/press/close_round press.svg"); closeBt->setFixedSize(24, 24); closeBt->setFocusPolicy(Qt::NoFocus); // closeBt = new DImageButton; // closeBt->setNormalPic(":/mpimage/light/normal/close_round normal.svg"); // closeBt->setHoverPic(":/mpimage/light/hover/close_round hover.svg"); // closeBt->setPressPic(":/mpimage/light/press/close_round press.svg"); // closeBt->setObjectName("InfoClose"); // closeBt->setBaseSize(24, 24); titleLabel = new DLabel(); titleLabel->setForegroundRole(DPalette::BrightText); infoLabel = new DLabel(); infoLabel->setForegroundRole(DPalette::BrightText); auto btLayout = new QHBoxLayout(titleFrame); btLayout->setSpacing(0); btLayout->setContentsMargins(0, 0, 0, 0); btPlayAll = new DPushButton; auto btPlayAllFont = btPlayAll->font(); btPlayAllFont.setPixelSize(14); btPlayAll->setFont(btPlayAllFont); auto playAllPalette = btPlayAll->palette(); playAllPalette.setColor(DPalette::ButtonText, Qt::white); playAllPalette.setColor(DPalette::Dark, QColor(Qt::red)); playAllPalette.setColor(DPalette::Light, QColor(Qt::red)); btPlayAll->setPalette(playAllPalette); btPlayAll->setIcon(QIcon(":/mpimage/light/normal/play_all_normal.svg")); btPlayAll->setText(MusicListDialog::tr("Play All")); btPlayAll->setFixedHeight(30); btPlayAll->setFocusPolicy(Qt::NoFocus); btPlayAll->setIconSize(QSize(18, 18)); btRandomPlay = new DPushButton; btRandomPlay->setFont(btPlayAllFont); auto randomPlayPalette = btRandomPlay->palette(); randomPlayPalette.setColor(DPalette::ButtonText, Qt::white); randomPlayPalette.setColor(DPalette::Dark, QColor(Qt::darkGray)); randomPlayPalette.setColor(DPalette::Light, QColor(Qt::darkGray)); btRandomPlay->setPalette(randomPlayPalette); btRandomPlay->setIcon(QIcon(":/mpimage/light/normal/random_play_normal.svg")); btRandomPlay->setText(MusicListDialog::tr("Shuffle")); btRandomPlay->setFixedHeight(30); btRandomPlay->setFocusPolicy(Qt::NoFocus); btRandomPlay->setIconSize(QSize(18, 18)); btLayout->addWidget(btPlayAll); btLayout->addSpacing(10); btLayout->addWidget(btRandomPlay); btLayout->addStretch(100); // titleLayout->addWidget(closeBt, 0, Qt::AlignTop | Qt::AlignRight); titleLayout->addWidget(titleLabel, 0, Qt::AlignTop); titleLayout->addWidget(infoLabel, 0, Qt::AlignTop); titleLayout->addLayout(btLayout, Qt::AlignTop); closeLayout->addLayout(titleLayout); closeLayout->addWidget(closeBt, 0, Qt::AlignTop | Qt::AlignRight); musicListInfoView = new MusicListInfoView; // DPalette pa = musicListInfoView->palette(); // pa.setColor(DPalette::Base, pa.window().color()); // musicListInfoView->setFrameShape(QFrame::NoFrame); // musicListInfoView->setPalette(pa); // musicListInfoView->setAutoFillBackground(true); //musicListInfoView->setFixedWidth(479); layout->addWidget(titleFrame, 0, Qt::AlignTop | Qt::AlignCenter); layout->addWidget(musicListInfoView); infoDialog = new InfoDialog(q); infoDialog->hide(); q->connect(closeBt, &MusicImageButton::pressed, q, &DAbstractDialog::close); } void MusicListDialogPrivate::initConnection() { Q_Q(MusicListDialog); q->connect(musicListInfoView, &MusicListInfoView::requestCustomContextMenu, q, [ = ](const QPoint & pos) { Q_EMIT q->requestCustomContextMenu(pos); }); q->connect(btPlayAll, &DPushButton::clicked, q, [ = ]() { musicListInfoView->playlist()->playMusicTypeToMeta(musicListInfoView->curName(), musicListInfoView->allMetaNames()); auto curtMeta = musicListInfoView->firstMeta(); if (curtMeta != nullptr) { Q_EMIT q->playMedia(curtMeta); Q_EMIT q->modeChanged(0); } }); q->connect(btRandomPlay, &DPushButton::clicked, q, [ = ]() { musicListInfoView->playlist()->playMusicTypeToMeta(musicListInfoView->curName()); if (musicListInfoView->playlist()->first() != nullptr) { auto curPlayList = musicListInfoView->playlist(); bool invalidFlag = true; for (auto curMata : curPlayList->allmusic()) { if (!curMata->invalid) { invalidFlag = false; break; } else { if (QFile::exists(curMata->localPath)) { invalidFlag = false; break; } } } if (!invalidFlag) { auto cutMeta = musicListInfoView->playlist()->playing(); if (cutMeta == nullptr) { cutMeta = musicListInfoView->playlist()->first(); } while (true) { cutMeta = musicListInfoView->playlist()->shuffleNext(cutMeta); if (!cutMeta->invalid) break; else { if (QFile::exists(cutMeta->localPath)) { break; } } } Q_EMIT q->playMedia(cutMeta); Q_EMIT q->modeChanged(2); } } }); q->connect(musicListInfoView, &MusicListInfoView::resume, q, [ = ](const MetaPtr meta) { Q_EMIT q->resume(meta); }); q->connect(musicListInfoView, &MusicListInfoView::playMedia, q, [ = ](const MetaPtr meta) { musicListInfoView->playlist()->playMusicTypeToMeta(musicListInfoView->curName()); Q_EMIT q->playMedia(meta); musicListInfoView->update(); }); q->connect(musicListInfoView, &MusicListInfoView::removeMusicList, q, [ = ](const MetaPtrList & metalist) { QString name = musicListInfoView->curName(); auto playlist = musicListInfoView->playlist(); for (auto meta : metalist) { for (auto TypePtr : playlist->playMusicTypePtrList()) { if (TypePtr->name == name) { if (TypePtr->playlistMeta.metas.contains(meta->hash)) { TypePtr->playlistMeta.metas.remove(meta->hash); } } } } musicListInfoView->onMusiclistChanged(playlist, name); Q_EMIT q->musiclistRemove(metalist); }); q->connect(musicListInfoView, &MusicListInfoView::deleteMusicList, q, [ = ](const MetaPtrList & metalist) { QString name = musicListInfoView->curName(); auto playlist = musicListInfoView->playlist(); for (auto meta : metalist) { for (auto TypePtr : playlist->playMusicTypePtrList()) { if (TypePtr->name == name) { if (TypePtr->playlistMeta.metas.contains(meta->hash)) { TypePtr->playlistMeta.metas.remove(meta->hash); } } } } musicListInfoView->onMusiclistChanged(playlist, name); Q_EMIT q->musiclistDelete(metalist); }); q->connect(musicListInfoView, &MusicListInfoView::addToPlaylist, q, [ = ](PlaylistPtr playlist, const MetaPtrList metalist) { Q_EMIT q->addToPlaylist(playlist, metalist); }); q->connect(musicListInfoView, &MusicListInfoView::showInfoDialog, q, [ = ](const MetaPtr meta) { infoDialog->show(); infoDialog->updateInfo(meta); }); q->connect(musicListInfoView, &MusicListInfoView::pause, q, [ = ](const MetaPtr meta) { Q_EMIT q->pause(meta); }); q->connect(musicListInfoView, &MusicListInfoView::addMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->addMetasFavourite(metalist); }); q->connect(musicListInfoView, &MusicListInfoView::removeMetasFavourite, q, [ = ](const MetaPtrList & metalist) { Q_EMIT q->removeMetasFavourite(metalist); }); } MusicListDialog::MusicListDialog(QWidget *parent) : DAbstractDialog(parent), d_ptr(new MusicListDialogPrivate(this)) { Q_D(MusicListDialog); resize(500, 500); d->initUI(); d->initConnection(); } MusicListDialog::~MusicListDialog() { } void MusicListDialog::setPlayMusicData(PlaylistPtr playlist, PlayMusicTypePtr playMusicType) { Q_D(MusicListDialog); d->titleLabel->setText(playMusicType->name); auto titleFont = d->titleLabel->font(); auto infoFont = d->infoLabel->font(); if (!playMusicType->extraName.isEmpty()) { titleFont.setPixelSize(24); infoFont.setPixelSize(18); d->infoLabel->setText(playMusicType->extraName); } else { titleFont.setPixelSize(36); d->infoLabel->hide(); } d->titleLabel->setFont(titleFont); d->infoLabel->setFont(infoFont); QString name = playMusicType->name; for (auto meta : playlist->playMusicTypePtrList()) { if (meta->name == name) { if (!meta->icon.isEmpty()) { QPixmap pixmap = QPixmap::fromImage(QImage::fromData(meta->icon)); pixmap = pixmap.scaled(480, 130, Qt::KeepAspectRatioByExpanding); d->titleFrame->setPixmap(pixmap); } else { QPixmap pixmap = DHiDPIHelper::loadNxPixmap(":/common/image/cover_max.svg"); pixmap = pixmap.scaled(480, 130, Qt::KeepAspectRatioByExpanding); d->titleFrame->setPixmap(pixmap); } break; } } d->musicListInfoView->onMusiclistChanged(playlist, name); } void MusicListDialog::setPlaying(const MetaPtr Meta) { Q_D(MusicListDialog); d->musicListInfoView->setPlaying(Meta); } void MusicListDialog::showContextMenu(const QPoint &pos, PlaylistPtr selectedPlaylist, PlaylistPtr favPlaylist, QList newPlaylists) { Q_D(MusicListDialog); d->musicListInfoView->showContextMenu(pos, selectedPlaylist, favPlaylist, newPlaylists); } void MusicListDialog::setThemeType(int type) { Q_D(MusicListDialog); if (type == 1) { auto palette = this->palette(); QColor BackgroundColor("#F8F8F8"); palette.setColor(DPalette::Background, BackgroundColor); setPalette(palette); // d->closeBt->setNormalPic(":/mpimage/light/normal/close_round normal.svg"); // d->closeBt->setHoverPic(":/mpimage/light/hover/close_round hover.svg"); // d->closeBt->setPressPic(":/mpimage/light/press/close_round press.svg"); // auto titleLabelPl = d->titleLabel->palette(); // titleLabelPl.setColor(DPalette::WindowText, Qt::black); // d->titleLabel->setPalette(titleLabelPl); // auto infoLabelPl = d->infoLabel->palette(); // infoLabelPl.setColor(DPalette::WindowText, Qt::black); // d->infoLabel->setPalette(infoLabelPl); auto playAllPalette = d->btPlayAll->palette(); playAllPalette.setColor(DPalette::ButtonText, Qt::white); playAllPalette.setColor(DPalette::Dark, QColor("#FD5E5E")); playAllPalette.setColor(DPalette::Light, QColor("#FD5E5E")); QColor sbcolor("#F82C47"); sbcolor.setAlphaF(0.4); playAllPalette.setColor(DPalette::Shadow, sbcolor); d->btPlayAll->setPalette(playAllPalette); auto randomPlayPalette = d->btRandomPlay->palette(); randomPlayPalette.setColor(DPalette::ButtonText, Qt::white); randomPlayPalette.setColor(DPalette::Dark, QColor("#646464")); randomPlayPalette.setColor(DPalette::Light, QColor("#5C5C5C")); QColor randombcolor("#000000"); randombcolor.setAlphaF(0.2); randomPlayPalette.setColor(DPalette::Shadow, randombcolor); d->btRandomPlay->setPalette(randomPlayPalette); } else { auto palette = this->palette(); QColor BackgroundColor("#252525"); palette.setColor(DPalette::Background, BackgroundColor); setPalette(palette); // d->closeBt->setNormalPic(":/mpimage/dark/close_round/close_normal_dark.svg"); // d->closeBt->setHoverPic(":/mpimage/dark/close_round/close_hover_dark.svg"); // d->closeBt->setPressPic(":/mpimage/dark/close_round/close_press.svg"); // auto titleLabelPl = d->titleLabel->palette(); // titleLabelPl.setColor(DPalette::WindowText, Qt::white); // d->titleLabel->setPalette(titleLabelPl); // auto infoLabelPl = d->infoLabel->palette(); // infoLabelPl.setColor(DPalette::WindowText, Qt::white); // d->infoLabel->setPalette(infoLabelPl); auto playAllPalette = d->btPlayAll->palette(); playAllPalette.setColor(DPalette::ButtonText, "#FFFFFF"); playAllPalette.setColor(DPalette::Dark, QColor("#DA2D2D")); playAllPalette.setColor(DPalette::Light, QColor("#A51B1B")); QColor sbcolor("#C10A0A"); sbcolor.setAlphaF(0.5); playAllPalette.setColor(DPalette::Shadow, sbcolor); d->btPlayAll->setPalette(playAllPalette); auto randomPlayPalette = d->btRandomPlay->palette(); randomPlayPalette.setColor(DPalette::ButtonText, "#FFFFFF"); randomPlayPalette.setColor(DPalette::Dark, QColor("#555454")); randomPlayPalette.setColor(DPalette::Light, QColor("#414141")); // QColor randombcolor("#FFFFFF"); // randombcolor.setAlphaF(0.08); // randomPlayPalette.setColor(DPalette::Shadow, randombcolor); d->btRandomPlay->setPalette(randomPlayPalette); } QString rStr; if (type == 1) { rStr = "light"; } else { rStr = "dark"; } // d->closeBt->setPixmap(QPixmap(QString(":/mpimage/light/normal/close_round normal.svg").arg(rStr))); // d->closeBt->setNormalPic(":/mpimage/light/normal/close_round normal.svg"); // d->closeBt->setHoverPic(":/mpimage/light/hover/close_round hover.svg"); // d->closeBt->setPressPic(":/mpimage/light/press/close_round press.svg"); d->btPlayAll->setIcon(QIcon(QString(":/mpimage/light/normal/play_all_normal.svg").arg(rStr))); d->btRandomPlay->setIcon(QIcon(QString(":/mpimage/light/normal/random_play_normal.svg").arg(rStr))); d->titleFrame->setThemeType(type); d->musicListInfoView->setThemeType(type); d->infoDialog->setThemeType(type); } void MusicListDialog::setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap) { Q_D(MusicListDialog); d->musicListInfoView->setPlayPixmap(pixmap, sidebarPixmap); update(); } deepin-music-6.0.1.54/src/music-player/view/widget/musiclistdialog.h000664 000000 000000 00000004137 13703317554 025327 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include "../core/playlist.h" DWIDGET_USE_NAMESPACE class MusicListDialogPrivate; class MusicListDialog : public DAbstractDialog { Q_OBJECT public: explicit MusicListDialog(QWidget *parent = Q_NULLPTR); ~MusicListDialog(); void setPlayMusicData(PlaylistPtr playlist, PlayMusicTypePtr playMusicType); void setPlaying(const MetaPtr); void showContextMenu(const QPoint &pos, PlaylistPtr selectedPlaylist, PlaylistPtr favPlaylist, QList newPlaylists); void setThemeType(int type); void setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap); signals: void requestCustomContextMenu(const QPoint &pos); void playMedia(const MetaPtr meta); void resume(const MetaPtr meta); void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); void musiclistRemove(const MetaPtrList &metalist); void musiclistDelete(const MetaPtrList &metalist); void modeChanged(int); void pause(const MetaPtr meta); void addMetasFavourite(const MetaPtrList &metalist); void removeMetasFavourite(const MetaPtrList &metalist); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListDialog) }; deepin-music-6.0.1.54/src/music-player/view/widget/musiclistinfoview.cpp000664 000000 000000 00000055214 13703317554 026253 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistinfoview.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../../core/metasearchservice.h" #include "../helper/widgethellper.h" #include "delegate/musicinfoitemdelegate.h" #include "model/musiclistinfomodel.h" DWIDGET_USE_NAMESPACE class MusicListInfoViewPrivate { public: MusicListInfoViewPrivate(MusicListInfoView *parent): q_ptr(parent) {} void addMedia(const MetaPtr meta); void removeSelection(QItemSelectionModel *selection); MusiclistInfomodel *model = nullptr; MusicInfoItemDelegate *delegate = nullptr; int themeType = 1; QString curName = ""; MetaPtr playing = nullptr; QPixmap playingPixmap = QPixmap(":/mpimage/light/music1.svg"); QPixmap sidebarPixmap = QPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); MusicListInfoView *q_ptr; Q_DECLARE_PUBLIC(MusicListInfoView) }; MusicListInfoView::MusicListInfoView(QWidget *parent) : QListView(parent), d_ptr(new MusicListInfoViewPrivate(this)) { Q_D(MusicListInfoView); setFrameShape(QFrame::NoFrame); setAutoFillBackground(true); auto palette = this->palette(); QColor BackgroundColor("#FFFFFF"); palette.setColor(DPalette::Background, BackgroundColor); setPalette(palette); setIconSize(QSize(36, 36)); // setGridSize( QSize(36, 36) ); d->model = new MusiclistInfomodel(0, 1, this); setModel(d->model); d->delegate = new MusicInfoItemDelegate; setItemDelegate(d->delegate); setDragEnabled(true); viewport()->setAcceptDrops(true); setDropIndicatorShown(true); setDragDropOverwriteMode(false); //setVerticalScrollMode(QAbstractItemView::ScrollPerItem); //setHorizontalScrollMode(QAbstractItemView::ScrollPerItem); setDefaultDropAction(Qt::MoveAction); setDragDropMode(QAbstractItemView::NoDragDrop); setResizeMode(QListView::Adjust); setMovement(QListView::Free); setLayoutMode(QListView::Batched); setSelectionMode(QListView::ExtendedSelection); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setEditTriggers(QAbstractItemView::NoEditTriggers); setSelectionBehavior(QAbstractItemView::SelectRows); setContextMenuPolicy(Qt::CustomContextMenu); connect(this, &MusicListInfoView::customContextMenuRequested, this, &MusicListInfoView::requestCustomContextMenu); connect(this, &MusicListInfoView::doubleClicked, this, [ = ](const QModelIndex & index) { MetaPtr meta = d->model->meta(index); if (meta == playlist()->playing()) { Q_EMIT resume(meta); } else { Q_EMIT playMedia(meta); } }); } MusicListInfoView::~MusicListInfoView() { } MetaPtr MusicListInfoView::activingMeta() const { Q_D(const MusicListInfoView); if (d->model->playlist().isNull()) { return MetaPtr(); } return d->model->playlist()->playing(); } MetaPtr MusicListInfoView::firstMeta() const { Q_D(const MusicListInfoView); MetaPtr curMeta = nullptr; for (int i = 0; i < d->model->rowCount(); ++i) { auto index = d->model->index(i, 0); MetaPtr meta = d->model->meta(index); if (!meta->invalid) { curMeta = meta; break; } else { if (QFile::exists(meta->localPath)) { curMeta = meta; break; } } } return curMeta; } PlaylistPtr MusicListInfoView::playlist() const { Q_D(const MusicListInfoView); return d->model->playlist(); } QModelIndex MusicListInfoView::findIndex(const MetaPtr meta) { Q_ASSERT(!meta.isNull()); Q_D(MusicListInfoView); return d->model->findIndex(meta); } QString MusicListInfoView::curName() const { Q_D(const MusicListInfoView); return d->curName; } void MusicListInfoView::setPlaying(const MetaPtr meta) { Q_D(MusicListInfoView); d->playing = meta; update(); } MetaPtr MusicListInfoView::playing() const { Q_D(const MusicListInfoView); return d->playing; } void MusicListInfoView::setThemeType(int type) { Q_D(MusicListInfoView); d->themeType = type; } int MusicListInfoView::getThemeType() const { Q_D(const MusicListInfoView); return d->themeType; } void MusicListInfoView::setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap) { Q_D(MusicListInfoView); d->playingPixmap = pixmap; d->sidebarPixmap = sidebarPixmap; auto index = d->model->findIndex(d->playing); if (index.isValid()) update(index); viewport()->update(); } QPixmap MusicListInfoView::getPlayPixmap() const { Q_D(const MusicListInfoView); return d->playingPixmap; } QPixmap MusicListInfoView::getSidebarPixmap() const { Q_D(const MusicListInfoView); return d->sidebarPixmap; } QStringList MusicListInfoView::allMetaNames() const { Q_D(const MusicListInfoView); QStringList allMetaNames; for (int i = 0; i < d->model->rowCount(); ++i) { auto index = d->model->index(i, 0); auto hash = d->model->data(index).toString(); if (!hash.isEmpty()) { allMetaNames.append(hash); } } return allMetaNames; } void MusicListInfoView::onMusicListRemoved(const MetaPtrList metalist) { Q_D(MusicListInfoView); setAutoScroll(false); for (auto meta : metalist) { if (meta.isNull()) { continue; } for (int i = 0; i < d->model->rowCount(); ++i) { auto index = d->model->index(i, 0); auto itemHash = d->model->data(index).toString(); if (itemHash == meta->hash) { d->model->removeRow(i); } } } //updateScrollbar(); setAutoScroll(true); } void MusicListInfoView::onMusicError(const MetaPtr meta, int /*error*/) { Q_ASSERT(!meta.isNull()); // Q_D(MusicListInfoView); // qDebug() << error; // QModelIndex index = findIndex(meta); // auto indexData = index.data().value(); // indexData.invalid = (error != 0); // d->m_model->setData(index, QVariant::fromValue(indexData)); update(); } void MusicListInfoView::onMusicListAdded(const MetaPtrList metalist) { Q_D(MusicListInfoView); for (auto meta : metalist) { d->addMedia(meta); } } void MusicListInfoView::onLocate(const MetaPtr meta) { QModelIndex index = findIndex(meta); if (!index.isValid()) { return; } clearSelection(); auto viewRect = QRect(QPoint(0, 0), size()); if (!viewRect.intersects(visualRect(index))) { scrollTo(index, MusicListInfoView::PositionAtCenter); } setCurrentIndex(index); } void MusicListInfoView::onMusiclistChanged(PlaylistPtr playlist, const QString name) { Q_D(MusicListInfoView); if (playlist.isNull()) { qWarning() << "can not change to emptry playlist"; return; } d->curName = name; d->model->removeRows(0, d->model->rowCount()); for (auto TypePtr : playlist->playMusicTypePtrList()) { if (TypePtr->name == name) { for (auto metaHash : TypePtr->playlistMeta.sortMetas) { if (TypePtr->playlistMeta.metas.contains(metaHash)) d->addMedia(TypePtr->playlistMeta.metas[metaHash]); } } } d->model->setPlaylist(playlist); //updateScrollbar(); } void MusicListInfoView::keyPressEvent(QKeyEvent *event) { Q_D(MusicListInfoView); switch (event->modifiers()) { case Qt::NoModifier: switch (event->key()) { case Qt::Key_Delete: QItemSelectionModel *selection = this->selectionModel(); d->removeSelection(selection); break; } break; case Qt::ShiftModifier: switch (event->key()) { case Qt::Key_Delete: break; } break; case Qt::AltModifier: switch (event->key()) { case Qt::Key_Return: QItemSelectionModel *selection = this->selectionModel(); if (selection->selectedRows().length() <= 0) { return; } auto index = selection->selectedRows().first(); auto meta = d->model->meta(index); Q_EMIT showInfoDialog(meta); break; } break; case Qt::ControlModifier: switch (event->key()) { case Qt::Key_K: QItemSelectionModel *selection = this->selectionModel(); if (selection->selectedRows().length() > 0) { MetaPtrList metalist; for (auto index : selection->selectedRows()) { auto meta = d->model->meta(index); metalist << meta; } if (!metalist.isEmpty()) Q_EMIT addMetasFavourite(metalist); } break; } break; case Qt::ControlModifier | Qt::ShiftModifier: switch (event->key()) { case Qt::Key_K: QItemSelectionModel *selection = this->selectionModel(); if (selection->selectedRows().length() > 0) { MetaPtrList metalist; for (auto index : selection->selectedRows()) { auto meta = d->model->meta(index); metalist << meta; } if (!metalist.isEmpty()) Q_EMIT removeMetasFavourite(metalist); } break; } break; default: break; } QAbstractItemView::keyPressEvent(event); } void MusicListInfoView::keyboardSearch(const QString &search) { Q_UNUSED(search); // Disable keyborad serach // qDebug() << search; // QAbstractItemView::keyboardSearch(search); } void MusicListInfoViewPrivate::addMedia(const MetaPtr meta) { if (meta == nullptr) { return; } QStandardItem *newItem = new QStandardItem; QPixmap cover(":/common/image/cover_max.svg"); auto coverData = MetaSearchService::coverData(meta); if (coverData.length() > 0) { cover = QPixmap::fromImage(QImage::fromData(coverData)); } QIcon icon = QIcon(cover); newItem->setIcon(icon); model->appendRow(newItem); auto row = model->rowCount() - 1; QModelIndex index = model->index(row, 0, QModelIndex()); model->setData(index, meta->hash); } void MusicListInfoViewPrivate::removeSelection(QItemSelectionModel *selection) { Q_ASSERT(selection != nullptr); Q_Q(MusicListInfoView); MetaPtrList metalist; for (auto index : selection->selectedRows()) { auto meta = model->meta(index); metalist << meta; } Q_EMIT q->removeMusicList(metalist); } void MusicListInfoView::showContextMenu(const QPoint &pos, PlaylistPtr selectedPlaylist, PlaylistPtr favPlaylist, QList newPlaylists) { Q_D(MusicListInfoView); QItemSelectionModel *selection = this->selectionModel(); if (selection->selectedRows().length() <= 0) { return; } QPoint globalPos = this->mapToGlobal(pos); DMenu playlistMenu; auto newvar = QVariant::fromValue(PlaylistPtr()); PlaylistPtr curPlaylist = nullptr; for (auto playlist : newPlaylists) { if (playlist->id() == PlayMusicListID) { curPlaylist = playlist; auto act = playlistMenu.addAction(tr("Play queue")); act->setData(QVariant::fromValue(curPlaylist)); playlistMenu.addSeparator(); break; } } if (selectedPlaylist != favPlaylist) { auto act = playlistMenu.addAction(favPlaylist->displayName()); act->setData(QVariant::fromValue(favPlaylist)); bool flag = true; for (auto &index : selection->selectedRows()) { auto meta = d->model->meta(index); if (!favPlaylist->contains(meta)) { flag = false; } } if (flag == true) { act->setEnabled(false); } else { act->setEnabled(true); } playlistMenu.addSeparator(); } auto createPlaylist = playlistMenu.addAction(tr("Add to new playlist")); // auto font = createPlaylist->font(); // font.setWeight(QFont::DemiBold); // createPlaylist->setFont(font); createPlaylist->setData(newvar); playlistMenu.addSeparator(); for (auto playlist : newPlaylists) { if (playlist == nullptr) continue; if (playlist->id() == PlayMusicListID) { curPlaylist = playlist; continue; } QFont font(playlistMenu.font()); QFontMetrics fm(font); auto text = fm.elidedText(QString(playlist->displayName().replace("&", "&&")), Qt::ElideMiddle, 160); auto act = playlistMenu.addAction(text); act->setData(QVariant::fromValue(playlist)); } playlistMenu.addSeparator(); connect(&playlistMenu, &DMenu::triggered, this, [ = ](QAction * action) { auto playlist = action->data().value(); qDebug() << playlist; MetaPtrList metalist; for (auto &index : selection->selectedRows()) { auto meta = d->model->meta(index); if (!meta.isNull()) { metalist << meta; } } Q_EMIT addToPlaylist(playlist, metalist); }); bool singleSelect = (1 == selection->selectedRows().length()); DMenu myMenu; QAction *playAction = nullptr; QAction *pauseAction = nullptr; if (singleSelect) { auto meta = d->model->meta(selection->selectedRows().first()); if (d->model->playlist()->playingStatus() && d->playing == meta) { pauseAction = myMenu.addAction(tr("Pause")); } else { playAction = myMenu.addAction(tr("Play")); } } myMenu.addAction(tr("Add to playlist"))->setMenu(&playlistMenu); myMenu.addSeparator(); QAction *displayAction = nullptr; if (singleSelect) { displayAction = myMenu.addAction(tr("Display in file manager")); } auto removeAction = myMenu.addAction(tr("Remove from playlist")); auto deleteAction = myMenu.addAction(tr("Delete from local disk")); QAction *songAction = nullptr; DMenu textCodecMenu; if (singleSelect) { auto index = selection->selectedRows().first(); auto meta = d->model->meta(index); QList codecList = DMusic::detectMetaEncodings(meta); // codecList << "utf-8" ; for (auto codec : codecList) { auto act = textCodecMenu.addAction(codec); act->setData(QVariant::fromValue(codec)); } // if (codecList.length() > 1) { // myMenu.addSeparator(); // myMenu.addAction(tr("Encoding"))->setMenu(&textCodecMenu); // } myMenu.addSeparator(); songAction = myMenu.addAction(tr("Song info")); connect(&textCodecMenu, &DMenu::triggered, this, [ = ](QAction * action) { auto codec = action->data().toByteArray(); meta->updateCodec(codec); Q_EMIT updateMetaCodec(meta); }); } if (playAction) { connect(playAction, &QAction::triggered, this, [ = ](bool) { auto index = selection->selectedRows().first(); if (d->model->meta(index) == playlist()->playing()) { Q_EMIT resume(d->model->meta(index)); } else { Q_EMIT playMedia(d->model->meta(index)); } }); } if (pauseAction) { connect(pauseAction, &QAction::triggered, this, [ = ](bool) { auto index = selection->selectedRows().first(); Q_EMIT pause(d->model->meta(index)); }); } if (displayAction) { connect(displayAction, &QAction::triggered, this, [ = ](bool) { auto index = selection->selectedRows().first(); auto meta = d->model->meta(index); auto dirUrl = QUrl::fromLocalFile(meta->localPath); Dtk::Widget::DDesktopServices::showFileItem(dirUrl); }); } if (removeAction) { connect(removeAction, &QAction::triggered, this, [ = ](bool) { MetaPtrList metalist; for (auto index : selection->selectedRows()) { auto meta = d->model->meta(index); metalist << meta; } if (metalist.isEmpty()) return ; Dtk::Widget::DDialog warnDlg(this); warnDlg.setTextFormat(Qt::RichText); warnDlg.addButton(tr("Cancel"), true, Dtk::Widget::DDialog::ButtonNormal); int deleteFlag = warnDlg.addButton(tr("Remove"), false, Dtk::Widget::DDialog::ButtonWarning); if (1 == metalist.length()) { auto meta = metalist.first(); warnDlg.setMessage(QString(tr("Are you sure you want to remove %1?")).arg(meta->title)); } else { warnDlg.setMessage(QString(tr("Are you sure you want to remove the selected %1 songs?").arg(metalist.length()))); } warnDlg.setIcon(QIcon::fromTheme("deepin-music")); if (deleteFlag == warnDlg.exec()) { d->removeSelection(selection); } }); } if (deleteAction) { connect(deleteAction, &QAction::triggered, this, [ = ](bool) { //bool containsCue = false; MetaPtrList metalist; for (auto index : selection->selectedRows()) { auto meta = d->model->meta(index); if (!meta->cuePath.isEmpty()) { //containsCue = true; } metalist << meta; } Dtk::Widget::DDialog warnDlg(this); warnDlg.setTextFormat(Qt::RichText); warnDlg.addButton(tr("Cancel"), true, Dtk::Widget::DDialog::ButtonWarning); warnDlg.addButton(tr("Delete"), false, Dtk::Widget::DDialog::ButtonNormal); auto cover = QImage(QString(":/common/image/del_notify.svg")); if (1 == metalist.length()) { auto meta = metalist.first(); auto coverData = MetaSearchService::coverData(meta); if (coverData.length() > 0) { cover = QImage::fromData(coverData); } warnDlg.setMessage(QString(tr("Are you sure you want to delete %1?")).arg(meta->title)); } else { // warnDlg.setTitle(QString(tr("Are you sure you want to delete the selected %1 songs?")).arg(metalist.length())); DLabel *t_titleLabel = new DLabel(this); t_titleLabel->setForegroundRole(DPalette::TextTitle); DLabel *t_infoLabel = new DLabel(this); t_infoLabel->setForegroundRole(DPalette::TextTips); t_titleLabel->setText(tr("Are you sure you want to delete the selected %1 songs?").arg(metalist.length())); t_infoLabel->setText(tr("The song files contained will also be deleted")); warnDlg.addContent(t_titleLabel, Qt::AlignHCenter); warnDlg.addContent(t_infoLabel, Qt::AlignHCenter); warnDlg.addSpacing(20); } #if 0 if (containsCue && false) { // warnDlg.setTitle(tr("Are you sure you want to delete the selected %1 songs?").arg(metalist.length())); // warnDlg.setMessage(tr("The song files contained will also be deleted")); DLabel *t_titleLabel = new DLabel(this); t_titleLabel->setForegroundRole(DPalette::TextTitle); DLabel *t_infoLabel = new DLabel(this); t_infoLabel->setForegroundRole(DPalette::TextTips); t_titleLabel->setText(tr("Are you sure you want to delete the selected %1 songs?").arg(metalist.length())); t_infoLabel->setText(tr("The song files contained will also be deleted")); warnDlg.addContent(t_titleLabel, Qt::AlignHCenter); warnDlg.addContent(t_infoLabel, Qt::AlignHCenter); warnDlg.addSpacing(20); } #endif auto coverPixmap = QPixmap::fromImage(WidgetHelper::cropRect(cover, QSize(64, 64))); warnDlg.setIcon(QIcon::fromTheme("deepin-music")); if (1 == warnDlg.exec()) { Q_EMIT deleteMusicList(metalist); } }); } if (songAction) { connect(songAction, &QAction::triggered, this, [ = ](bool) { auto index = selection->selectedRows().first(); auto meta = d->model->meta(index); Q_EMIT showInfoDialog(meta); }); } myMenu.exec(globalPos); } void MusicListInfoView::dragEnterEvent(QDragEnterEvent *event) { QListView::dragEnterEvent(event); } void MusicListInfoView::startDrag(Qt::DropActions supportedActions) { Q_D(MusicListInfoView); MetaPtrList list; for (auto index : selectionModel()->selectedIndexes()) { list << d->model->meta(index); } setAutoScroll(false); QListView::startDrag(supportedActions); setAutoScroll(true); QMap hashIndexs; for (int i = 0; i < d->model->rowCount(); ++i) { auto index = d->model->index(i, 0); auto hash = d->model->data(index).toString(); Q_ASSERT(!hash.isEmpty()); hashIndexs.insert(hash, i); } d->model->playlist()->saveSort(hashIndexs); Q_EMIT customSort(); QItemSelection selection; for (auto meta : list) { if (!meta.isNull()) { auto index = this->findIndex(meta); selection.append(QItemSelectionRange(index)); } } if (!selection.isEmpty()) { selectionModel()->select(selection, QItemSelectionModel::Select); } } deepin-music-6.0.1.54/src/music-player/view/widget/musiclistinfoview.h000664 000000 000000 00000006011 13703317554 025707 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "../../core/playlist.h" DWIDGET_USE_NAMESPACE class MusicListInfoViewPrivate; class MusicListInfoView : public QListView { Q_OBJECT public: explicit MusicListInfoView(QWidget *parent = Q_NULLPTR); ~MusicListInfoView() override; MetaPtr activingMeta() const; MetaPtr firstMeta() const; PlaylistPtr playlist() const; QModelIndex findIndex(const MetaPtr meta); QString curName() const; void setPlaying(const MetaPtr meta); MetaPtr playing() const; void setThemeType(int type); int getThemeType() const; void setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap); QPixmap getPlayPixmap() const; QPixmap getSidebarPixmap() const; QStringList allMetaNames() const; signals: void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); void removeMusicList(const MetaPtrList &metalist); void deleteMusicList(const MetaPtrList &metalist); void playMedia(const MetaPtr meta); void resume(const MetaPtr meta); void updateMetaCodec(const MetaPtr meta); void showInfoDialog(const MetaPtr meta); void requestCustomContextMenu(const QPoint &pos); void customSort(); void pause(const MetaPtr meta); void addMetasFavourite(const MetaPtrList &metalist); void removeMetasFavourite(const MetaPtrList &metalist); public: void onMusiclistChanged(PlaylistPtr playlist, const QString name); void onMusicListAdded(const MetaPtrList metalist); void onMusicListRemoved(const MetaPtrList metalist); void onMusicError(const MetaPtr meta, int error); void onLocate(const MetaPtr meta); void showContextMenu(const QPoint &pos, PlaylistPtr selectedPlaylist, PlaylistPtr favPlaylist, QList newPlaylists); protected: virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; virtual void startDrag(Qt::DropActions supportedActions) Q_DECL_OVERRIDE; virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; virtual void keyboardSearch(const QString &search) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicListInfoView) }; deepin-music-6.0.1.54/src/music-player/view/widget/musiclistitem.cpp000664 000000 000000 00000013363 13703317554 025362 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistitem.h" #include #include #include #include #include #include #include #include #include #include "core/playlist.h" static int LineEditWidth = 105; MusicListItem::MusicListItem(PlaylistPtr playlist, QWidget *parent) : DFrame(parent) { m_data = playlist; Q_ASSERT(playlist); setObjectName("MusicListItem"); auto layout = new QHBoxLayout(this); layout->setContentsMargins(10, 0, 10, 0); layout->setSpacing(0); auto interFrame = new DFrame; interFrame->setObjectName("MusicListInterFrame"); auto interLayout = new QHBoxLayout(interFrame); interLayout->setContentsMargins(0, 0, 0, 0); interLayout->setSpacing(0); auto icon = new DLabel; icon->setObjectName("MusicListIcon"); icon->setFixedSize(24, 24); icon->setProperty("iconName", playlist->icon()); m_titleedit = new DLineEdit; m_titleedit->setObjectName("MusicListTitle"); m_titleedit->setFixedHeight(24); m_titleedit->setMaximumWidth(160); m_titleedit->lineEdit()->setMaxLength(255); m_titleedit->lineEdit()->setMaxLength(40); m_titleedit->setProperty("EditValue", playlist->displayName()); m_titleedit->setDisabled(true); if (playlist->readonly()) { m_titleedit->lineEdit()->setReadOnly(true); } if (playlist->editmode()) { m_titleedit->setEnabled(true); QTimer::singleShot(200, this, [ = ] { m_titleedit->setFocus(); m_titleedit->lineEdit()->setCursorPosition(0); m_titleedit->lineEdit()->setSelection(0, m_titleedit->text().length()); }); } interLayout->addWidget(icon, 0, Qt::AlignCenter); interLayout->addSpacing(10); interLayout->addWidget(m_titleedit, 0, Qt::AlignRight); interLayout->addStretch(); layout->addWidget(interFrame); setFixedHeight(56); setFixedWidth(220); interLayout->addSpacing(5); // TODO: wtf QFont font(m_titleedit->font()); font.setPixelSize(12); QFontMetrics fm(font); m_titleedit->setText(fm.elidedText(QString(playlist->displayName()), Qt::ElideMiddle, LineEditWidth)); connect(m_titleedit, &DLineEdit::editingFinished, this, [ = ] { if (m_titleedit->text().isEmpty()) { m_titleedit->setText(m_titleedit->property("EditValue").toString()); } else { Q_EMIT this->rename(m_titleedit->text()); m_titleedit->setProperty("EditValue", m_titleedit->text()); } QFont font(m_titleedit->font()); font.setPixelSize(12); QFontMetrics fm(font); m_titleedit->setText(fm.elidedText(QString(m_titleedit->text()), Qt::ElideMiddle, LineEditWidth)); m_titleedit->setEnabled(false); }); connect(m_titleedit, &DLineEdit::returnPressed, this, [ = ] { m_titleedit->blockSignals(true); this->setFocus(); m_titleedit->blockSignals(false); }); connect(this, &MusicListItem::rename, m_data.data(), &Playlist::setDisplayName); connect(this, &MusicListItem::remove, m_data.data(), &Playlist::removed); } void MusicListItem::setActive(bool active) { QString prefix; if (active) { m_titleedit->setProperty("status", "active"); } else { m_titleedit->setProperty("status", ""); } this->update(); } void MusicListItem::setPlay(bool isPaly) { if (isPaly) { } else { } } void MusicListItem::mouseDoubleClickEvent(QMouseEvent *event) { // DFrame::mouseDoubleClickEvent(event); auto lineeditMousePos = m_titleedit->mapFromParent(event->pos()); if (!m_titleedit->rect().contains(lineeditMousePos)) { return; } if (m_titleedit->lineEdit()->isReadOnly()) { return; } QTimer::singleShot(0, this, [ = ] { // m_titleedit->setEnabled(true); // m_titleedit->setFocus(); // m_titleedit->setCursorPosition(m_titleedit->text().length()); }); } void MusicListItem::onDelete() { QString message = QString(tr("Are you sure you want to delete this playlist?")); DDialog warnDlg(this); warnDlg.setIcon(QIcon::fromTheme("deepin-music")); warnDlg.setTextFormat(Qt::AutoText); warnDlg.setTitle(message); warnDlg.addButton(tr("Cancel"), false, Dtk::Widget::DDialog::ButtonNormal); warnDlg.addButton(tr("Delete"), true, Dtk::Widget::DDialog::ButtonWarning); if (0 == warnDlg.exec()) { return; } Q_EMIT this->remove(); } void MusicListItem::onRename() { QTimer::singleShot(1, this, [ = ] { auto value = m_titleedit->property("EditValue").toString(); qDebug() << value; m_titleedit->setText(value); m_titleedit->setEnabled(true); m_titleedit->setFocus(); m_titleedit->lineEdit()->setCursorPosition(0); m_titleedit->lineEdit()->setSelection(0, m_titleedit->text().length()); }); } deepin-music-6.0.1.54/src/music-player/view/widget/musiclistitem.h000664 000000 000000 00000004243 13703317554 025024 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include "../../core/playlist.h" DWIDGET_USE_NAMESPACE class MusicListItem : public DFrame { Q_OBJECT Q_PROPERTY(QString playingIcon READ playingIcon WRITE setPlayingIcon) Q_PROPERTY(QString highlightPlayingIcon READ highlightPlayingIcon WRITE setHighlightPlayingIcon) public: explicit MusicListItem(PlaylistPtr playlist, QWidget *parent = Q_NULLPTR); inline PlaylistPtr data() { return m_data; } void setActive(bool active); void setPlay(bool isPaly); void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE; QString playingIcon() const { return m_playingIcon; } QString highlightPlayingIcon() const { return m_highlightPlayingIcon; } signals: void rename(const QString &newNameA); void remove(); void playall(PlaylistPtr playlist); public slots: void onDelete(); void onRename(); void setPlayingIcon(QString playingIcon) { m_playingIcon = playingIcon; } void setHighlightPlayingIcon(QString highlightPlayingIcon) { m_highlightPlayingIcon = highlightPlayingIcon; } private: // Dtk::Widget::DPictureSequenceView *playingAnimation; DLineEdit *m_titleedit = nullptr; PlaylistPtr m_data; QString m_playingIcon; QString m_highlightPlayingIcon; }; deepin-music-6.0.1.54/src/music-player/view/widget/musiclistview.cpp000664 000000 000000 00000063172 13703317554 025401 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistview.h" #include #include #include #include #include #include #include #include #include "musiclistviewitem.h" #include "./model/musiclistmodel.h" #include "playlistview.h" DGUI_USE_NAMESPACE MusicListView::MusicListView(QWidget *parent) : DListView(parent) { model = new MusiclistModel(this); setModel(model); delegate = new DStyledItemDelegate(this); //delegate->setBackgroundType(DStyledItemDelegate::NoBackground); auto delegateMargins = delegate->margins(); delegateMargins.setLeft(18); delegate->setMargins(delegateMargins); setItemDelegate(delegate); setViewportMargins(8, 0, 8, 0); playingPixmap = QPixmap(":/mpimage/light/music1.svg"); albumPixmap = QPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); defaultPixmap = QPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); auto font = this->font(); font.setFamily("SourceHanSansSC"); font.setWeight(QFont::Medium); font.setPixelSize(14); setFont(font); setIconSize( QSize(20, 20) ); setItemSize(QSize(40, 40)); setFrameShape(QFrame::NoFrame); DPalette pa = DApplicationHelper::instance()->palette(this); pa.setColor(DPalette::ItemBackground, Qt::transparent); DApplicationHelper::instance()->setPalette(this, pa); setAcceptDrops(true); setDropIndicatorShown(true); setSelectionMode(QListView::SingleSelection); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setContextMenuPolicy(Qt::CustomContextMenu); connect(this, &MusicListView::customContextMenuRequested, this, &MusicListView::showContextMenu); connect(this, &MusicListView::pressed, this, [ = ]() { closeAllPersistentEditor(); }); connect(model, &QStandardItemModel::itemChanged, this, &MusicListView::onRename); connect(this, &MusicListView::currentChanged, this, [ = ](const QModelIndex & current, const QModelIndex & previous) { Q_UNUSED(previous) if (current.row() < 0 || current.row() >= allPlaylists.size()) { this->clearSelected(); return ; } if (state() != EditingState) { auto curStandardItem = dynamic_cast(model->itemFromIndex(current)); curStandardItem->setIcon(QIcon::fromTheme("music_famousballad")); } auto playlistPtr = allPlaylists[current.row()]; QString rStr; if (m_type == 1) { rStr = "light"; } else { rStr = "dark"; } for (int i = 0; i < model->rowCount(); i++) { auto curIndex = model->index(i, 0); auto curStandardItem = dynamic_cast(model->itemFromIndex(curIndex)); auto curItemRow = curStandardItem->row(); if (curItemRow < 0 || curItemRow >= allPlaylists.size()) continue; auto playlist = allPlaylists[curItemRow]; if (!playlist->playing().isNull()) { auto curItem = dynamic_cast(curStandardItem); //delete QIcon playingIcon(playingPixmap); playingIcon.actualSize(QSize(20, 20)); DViewItemActionList actionList = curItem->actionList(Qt::RightEdge); if (!actionList.isEmpty()) { actionList.first()->setIcon(playingIcon); } else { DViewItemActionList actionList; auto viewItemAction = new DViewItemAction(Qt::AlignCenter); viewItemAction->setIcon(playingIcon); actionList.append(viewItemAction); curItem->setActionList(Qt::RightEdge, actionList); } } QString typeStr; if (current == curIndex) { typeStr = "active"; } else { typeStr = "normal"; } QIcon icon = QIcon(QString(":/mpimage/%1/normal/music_famousballad.svg").arg(rStr)); if (playlist->id() == AlbumMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/album_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_album"); } else if (playlist->id() == ArtistMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/singer_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_singer"); } else if (playlist->id() == AllMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/all_music_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_allmusic"); } else if (playlist->id() == FavMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/my_collection_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_mycollection"); } else { // icon = QIcon(QString(":/mpimage/%1/normal/famous_ballad_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_famousballad"); } curStandardItem->setIcon(icon); } #if 1 /*------Refresh play state--------*/ changePicture(defaultPixmap, defaultPixmap); #endif }); connect(this, &MusicListView::triggerEdit, this, [ = ](const QModelIndex & index) { if (DGuiApplicationHelper::instance()->themeType() == 1) { auto curStandardItem = dynamic_cast(model->itemFromIndex(index)); curStandardItem->setIcon(QIcon(QString(":/mpimage/light/normal/famous_ballad_normal.svg"))); } }); } MusicListView::~MusicListView() { } void MusicListView::addMusicList(PlaylistPtr playlist, bool addFlag) { if (playlist == nullptr) return; QString rStr; if (m_type == 1) { rStr = "light"; } else { rStr = "dark"; } QIcon icon = QIcon(QString(":/mpimage/%1/normal/music_famousballad.svg").arg(rStr)); if (playlist->id() == AlbumMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/album_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_album"); } else if (playlist->id() == ArtistMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/singer_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_singer"); } else if (playlist->id() == AllMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/all_music_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_allmusic"); } else if (playlist->id() == FavMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/my_collection_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_mycollection"); } else { // icon = QIcon(QString(":/mpimage/%1/normal/famous_ballad_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_famousballad"); } allPlaylists.append(playlist); QString displayName; if (playlist->id() == FavMusicListID) { displayName = tr("My Favorites"); } else { displayName = playlist->displayName(); } auto item = new DStandardItem(icon, displayName); auto itemFont = item->font(); itemFont.setPixelSize(14); item->setFont(itemFont); if (m_type == 1) { item->setForeground(QColor("#414D68")); } else { item->setForeground(QColor("#C0C6D4")); } model->appendRow(item); adjustHeight(); if (addFlag) { setCurrentItem(item); edit(model->index(item->row(), 0)); scrollToBottom(); m_sizeChangedFlag = true; } } QStandardItem *MusicListView::item(int row, int column) const { return model->item(row, column); } void MusicListView::setCurrentItem(QStandardItem *item) { setCurrentIndex(model->indexFromItem(item)); } PlaylistPtr MusicListView::playlistPtr(const QModelIndex &index) { PlaylistPtr ptr = nullptr; if (index.row() >= 0 && index.row() < allPlaylists.size()) ptr = allPlaylists[index.row()]; return ptr; } PlaylistPtr MusicListView::playlistPtr(QStandardItem *item) { PlaylistPtr ptr = nullptr; if (item->row() < allPlaylists.size()) ptr = allPlaylists[item->row()]; return ptr; } void MusicListView::setCurPlaylist(QStandardItem *item) { auto curItem = dynamic_cast(item); playingItem = curItem; if (curItem) { QIcon playingIcon(playingPixmap); playingIcon.actualSize(QSize(20, 20)); DViewItemActionList itemActionList = curItem->actionList(Qt::RightEdge); if (!itemActionList.isEmpty()) { itemActionList.first()->setIcon(playingIcon); } else { DViewItemActionList actionList; /*----------delegate QSize-----------*/ auto viewItemAction = new DViewItemAction(Qt::AlignCenter, QSize(20, 20)); viewItemAction->setIcon(playingIcon); actionList.append(viewItemAction); curItem->setActionList(Qt::RightEdge, actionList); } } DViewItemActionList clearActionList; QIcon playingIcon; playingIcon.actualSize(QSize(20, 20)); auto viewItemAction = new DViewItemAction(Qt::AlignCenter); viewItemAction->setIcon(playingIcon); clearActionList.append(viewItemAction); for (int i = 0; i < model->rowCount(); i++) { auto curStandardItem = dynamic_cast(model->itemFromIndex(model->index(i, 0))); if (curStandardItem != nullptr && curStandardItem != curItem) { DViewItemActionList actionList = curStandardItem->actionList(Qt::RightEdge); if (!actionList.isEmpty()) { actionList.first()->setIcon(playingIcon); } } } //setCurrentItem(item); update(); } void MusicListView::closeAllPersistentEditor() { for (int i = 0; i < model->rowCount(); i++) { auto item = model->index(i, 0); if (this->isPersistentEditorOpen(item)) closePersistentEditor(item); } } void MusicListView::clearSelected() { clearSelection(); setCurrentItem(nullptr); QString rStr; if (m_type == 1) { rStr = "light"; } else { rStr = "dark"; } QString typeStr = "normal"; for (int i = 0; i < model->rowCount(); i++) { auto curIndex = model->index(i, 0); auto curStandardItem = dynamic_cast(model->itemFromIndex(curIndex)); auto curItemRow = curStandardItem->row(); if (curItemRow < 0 || curItemRow >= allPlaylists.size()) continue; auto playlist = allPlaylists[curItemRow]; QIcon icon = QIcon(QString(":/mpimage/%1/normal/music_famousballad.svg").arg(rStr)); if (playlist->id() == AlbumMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/album_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_album"); } else if (playlist->id() == ArtistMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/singer_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_singer"); } else if (playlist->id() == AllMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/all_music_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_allmusic"); } else if (playlist->id() == FavMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/my_collection_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_mycollection"); } else { // icon = QIcon(QString(":/mpimage/%1/normal/famous_ballad_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_famousballad"); } curStandardItem->setIcon(icon); } if (playingItem != nullptr && playingItem->rowCount() > 0) { auto curItem = dynamic_cast(playingItem); if (curItem != nullptr) { //delete QIcon playingIcon(playingPixmap); playingIcon.actualSize(QSize(20, 20)); DViewItemActionList actionList = curItem->actionList(Qt::RightEdge); if (!actionList.isEmpty()) { actionList.first()->setIcon(playingIcon); } else { DViewItemActionList actionList; auto viewItemAction = new DViewItemAction(Qt::AlignCenter); viewItemAction->setIcon(playingIcon); actionList.append(viewItemAction); curItem->setActionList(Qt::RightEdge, actionList); } } } } void MusicListView::changePicture(QPixmap pixmap, QPixmap albumPixmap) { this->playingPixmap = pixmap; this->albumPixmap = albumPixmap; QPixmap curPixmap = pixmap; auto indexes = this->selectedIndexes(); if (!indexes.isEmpty() && playingItem != nullptr) { if (indexes[0].row() >= 0 && indexes[0].row() < allPlaylists.count()) { auto mdata = allPlaylists.at(indexes[0].row()); if (mdata->playing() != nullptr) curPixmap = albumPixmap; } } if (playingItem != nullptr ) { auto curItem = dynamic_cast(playingItem); //delete QIcon playingIcon(curPixmap); playingIcon.actualSize(QSize(20, 20)); DViewItemActionList actionList = curItem->actionList(Qt::RightEdge); if (!actionList.isEmpty()) { actionList.first()->setIcon(playingIcon); } else { DViewItemActionList actionList; auto viewItemAction = new DViewItemAction(Qt::AlignCenter); viewItemAction->setIcon(playingIcon); actionList.append(viewItemAction); curItem->setActionList(Qt::RightEdge, actionList); } update(); } } void MusicListView::adjustHeight() { setMinimumHeight(model->rowCount() * 40); } void MusicListView::setSizeChangedFlag(bool flag) { m_sizeChangedFlag = flag; } bool MusicListView::getSizeChangedFlag() { return m_sizeChangedFlag; } //void MusicListView::startDrag(Qt::DropActions supportedActions) //{ // DListWidget::startDrag(supportedActions); // qDebug() << "drag end"; // QStringList uuids; // for (int i = 0; i < this->count(); ++i) { // QListWidgetItem *item = this->item(i); // MusicListViewItem *playlistItem = dynamic_cast(item); // uuids << playlistItem->data()->id(); // } // Q_EMIT customResort(uuids); //} void MusicListView::mousePressEvent(QMouseEvent *event) { // for (int i = 0; i < count(); i++) { // auto itemIndex = model->index(i, 0); // if (this->isPersistentEditorOpen(itemIndex)) { // auto item = model->itemFromIndex(itemIndex); // onRename(item); // closePersistentEditor(itemIndex); // } // } DListView::mousePressEvent(event); } void MusicListView::keyPressEvent(QKeyEvent *event) { DListView::keyPressEvent(event); if (event->key() == Qt::Key_Delete) { auto indexes = this->selectedIndexes(); if (indexes.size() != 1) { return; } auto item = model->itemFromIndex(indexes.first()); if (!item) { return; } auto m_data = allPlaylists[item->row()]; if (!m_data) { return; } if (m_data->id() != AllMusicListID && m_data->id() != AlbumMusicListID && m_data->id() != ArtistMusicListID && m_data->id() != FavMusicListID) { QString message = QString(tr("Are you sure you want to delete this playlist?")); DDialog warnDlg(this); warnDlg.setIcon(QIcon::fromTheme("deepin-music")); warnDlg.setTextFormat(Qt::AutoText); warnDlg.setTitle(message); warnDlg.addSpacing(20); warnDlg.addButton(tr("Cancel"), false, Dtk::Widget::DDialog::ButtonNormal); warnDlg.addButton(tr("Delete"), true, Dtk::Widget::DDialog::ButtonWarning); if (1 == warnDlg.exec()) { int t_index = item->row(); model->removeRow(item->row()); allPlaylists.removeAt(t_index); if (item == playingItem) playingItem = nullptr; //delete model->takeItem(item->row()); Q_EMIT m_data->removed(); if (m_data->playing() != nullptr || allPlaylists.isEmpty()) Q_EMIT removeAllList(m_data->playing()); adjustHeight(); } } } else if (event->key() == Qt::Key_Up || event->key() == Qt::Key_Down) { auto indexes = this->selectedIndexes(); if (indexes.size() != 1) { return; } scrollTo(indexes.first()); } } void MusicListView::dragEnterEvent(QDragEnterEvent *event) { auto t_formats = event->mimeData()->formats(); qDebug() << t_formats; if (event->mimeData()->hasFormat("text/uri-list") || event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) { qDebug() << "acceptProposedAction" << event; event->setDropAction(Qt::CopyAction); event->acceptProposedAction(); } } void MusicListView::dragMoveEvent(QDragMoveEvent *event) { auto index = indexAt(event->pos()); if (index.isValid() && (event->mimeData()->hasFormat("text/uri-list") || event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist"))) { qDebug() << "acceptProposedAction" << event; event->setDropAction(Qt::CopyAction); event->acceptProposedAction(); } else { DListView::dragMoveEvent(event); } } void MusicListView::dropEvent(QDropEvent *event) { auto index = indexAt(event->pos()); if (!index.isValid()) return; auto t_playlistPtr = playlistPtr(index); if (t_playlistPtr == nullptr || (!event->mimeData()->hasFormat("text/uri-list") && !event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist"))) { return; } if (event->mimeData()->hasFormat("text/uri-list")) { auto urls = event->mimeData()->urls(); QStringList localpaths; for (auto &url : urls) { localpaths << url.toLocalFile(); } if (!localpaths.isEmpty()) { Q_EMIT importSelectFiles(t_playlistPtr, localpaths); } } else { auto *source = qobject_cast(event->source()); if (source != nullptr) { MetaPtrList metalist; for (auto index : source->selectionModel()->selectedIndexes()) { if (index.row() >= 0 && index.row() < source->playMetaPtrList().size()) { auto meta = source->playMetaPtrList()[index.row()]; metalist.append(meta); } } if (!metalist.isEmpty()) Q_EMIT addToPlaylist(t_playlistPtr, metalist); } } DListView::dropEvent(event); } void MusicListView::showContextMenu(const QPoint &pos) { auto index = indexAt(pos); if (!index.isValid()) return; auto item = model->itemFromIndex(index); if (!item) { return; } auto m_data = allPlaylists[item->row()]; if (!m_data) { return; } QPoint globalPos = this->mapToGlobal(pos); DMenu *menu = new DMenu(this) ; QAction *playact = nullptr; QAction *pauseact = nullptr; if (m_data->playingStatus() && m_data->playing() != nullptr) { pauseact = menu->addAction(tr("Pause")); pauseact->setDisabled(0 == m_data->length()); } else { playact = menu->addAction(tr("Play")); playact->setDisabled(0 == m_data->length()); } if (m_data->id() != AllMusicListID && m_data->id() != AlbumMusicListID && m_data->id() != ArtistMusicListID && m_data->id() != FavMusicListID) { menu->addAction(tr("Rename")); menu->addAction(tr("Delete")); } if (m_data->id() == AlbumMusicListID || m_data->id() == ArtistMusicListID) { if (playact != nullptr) playact->setDisabled(m_data->playMusicTypePtrList().size() == 0); if (pauseact != nullptr) pauseact->setDisabled(m_data->playMusicTypePtrList().size() == 0); } connect(menu, &DMenu::triggered, this, [ = ](QAction * action) { if (action->text() == tr("Play")) { Q_EMIT playall(m_data); } if (action->text() == tr("Pause")) { Q_EMIT pause(m_data, m_data->playing()); } if (action->text() == tr("Rename")) { edit(index); } if (action->text() == tr("Delete")) { QString message = QString(tr("Are you sure you want to delete this playlist?")); DDialog warnDlg(this); warnDlg.setIcon(QIcon::fromTheme("deepin-music")); warnDlg.setTextFormat(Qt::AutoText); warnDlg.setTitle(message); warnDlg.addSpacing(20); warnDlg.addButton(tr("Cancel"), false, Dtk::Widget::DDialog::ButtonNormal); warnDlg.addButton(tr("Delete"), true, Dtk::Widget::DDialog::ButtonWarning); if (1 == warnDlg.exec()) { int t_index = item->row(); model->removeRow(item->row()); allPlaylists.removeAt(t_index); if (item == playingItem) playingItem = nullptr; //delete model->takeItem(item->row()); Q_EMIT m_data->removed(); if (m_data->playing() != nullptr || allPlaylists.isEmpty()) Q_EMIT removeAllList(m_data->playing()); adjustHeight(); } } }); menu->exec(globalPos); } void MusicListView::slotTheme(int type) { m_type = type; QString rStr; if (type == 1) { rStr = "light"; } else { rStr = "dark"; } for (int i = 0; i < model->rowCount(); i++) { for (int i = 0; i < model->rowCount(); i++) { auto curIndex = model->index(i, 0); auto curStandardItem = dynamic_cast(model->itemFromIndex(curIndex)); auto curItemRow = curStandardItem->row(); if (curItemRow < 0 || curItemRow >= allPlaylists.size()) continue; auto playlist = allPlaylists[curStandardItem->row()]; QIcon icon = QIcon(QString(":/mpimage/%1/normal/music_famousballad.svg").arg(rStr)); if (playlist->id() == AlbumMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/album_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_album"); } else if (playlist->id() == ArtistMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/singer_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_singer"); } else if (playlist->id() == AllMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/all_music_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_allmusic"); } else if (playlist->id() == FavMusicListID) { // icon = QIcon(QString(":/mpimage/%1/normal/my_collection_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_mycollection"); } else { // icon = QIcon(QString(":/mpimage/%1/normal/famous_ballad_normal.svg").arg(rStr)); icon = QIcon::fromTheme("music_famousballad"); } curStandardItem->setIcon(icon); if (m_type == 1) { curStandardItem->setForeground(QColor("#414D68")); } else { curStandardItem->setForeground(QColor("#C0C6D4")); } } } } void MusicListView::onRename(QStandardItem *item) { auto curItemRow = item->row(); if (curItemRow < 0 || curItemRow >= allPlaylists.size()) return; auto playlistPtr = allPlaylists[item->row()]; if (playlistPtr->displayName() != item->text()) { if (item->text().isEmpty()) { item->setText(playlistPtr->displayName()); } else { bool existFlag = false; for (int i = 0; i < count(); i++) { auto curItem = model->itemFromIndex(model->index(i, 0)); if (curItem == item) continue; if (item->text() == curItem->text()) { existFlag = true; } } if (existFlag) { item->setText(playlistPtr->displayName()); } else { playlistPtr->setDisplayName(item->text()); Q_EMIT playlistPtr->displayNameChanged(item->text()); Q_EMIT displayNameChanged(); } } } } void MusicListView::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint) { DListView::closeEditor(editor, hint); auto current = currentIndex(); if (current.row() < 0 || current.row() >= allPlaylists.size()) { this->clearSelected(); return ; } auto curStandardItem = dynamic_cast(model->itemFromIndex(current)); curStandardItem->setIcon(QIcon::fromTheme("music_famousballad")); } deepin-music-6.0.1.54/src/music-player/view/widget/musiclistview.h000664 000000 000000 00000006075 13703317554 025045 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "../../core/playlist.h" DWIDGET_USE_NAMESPACE class MusicListView : public DListView { Q_OBJECT public: explicit MusicListView(QWidget *parent = Q_NULLPTR); ~MusicListView() override; void showContextMenu(const QPoint &pos); void addMusicList(PlaylistPtr playlist, bool addFlag = false); QStandardItem *item(int row, int column = 0) const; void setCurrentItem ( QStandardItem *item ); PlaylistPtr playlistPtr(const QModelIndex &index); PlaylistPtr playlistPtr(QStandardItem *item); void setCurPlaylist(QStandardItem *item); void closeAllPersistentEditor(); void clearSelected(); void changePicture(QPixmap pixmap, QPixmap albumPixmap); void adjustHeight(); void setSizeChangedFlag(bool flag); bool getSizeChangedFlag(); public slots: void slotTheme(int type); void onRename(QStandardItem *item); void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint) Q_DECL_OVERRIDE; signals: void playall(PlaylistPtr playlist); void customResort(const QStringList &uuids); void displayNameChanged(); void pause(PlaylistPtr playlist, const MetaPtr meta); void removeAllList(const MetaPtr meta); void importSelectFiles(PlaylistPtr playlist, QStringList urllist); void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); void currentChanged(const QModelIndex ¤t, const QModelIndex &previous) Q_DECL_OVERRIDE; protected: // virtual void startDrag(Qt::DropActions supportedActions) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE; void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; private: QList allPlaylists; QStandardItemModel *model = nullptr; DStyledItemDelegate *delegate = nullptr; QStandardItem *playingItem = nullptr; //QStandardItem *m_currentitem = nullptr; QPixmap playingPixmap; QPixmap albumPixmap; QPixmap defaultPixmap; int m_type = 1; bool m_sizeChangedFlag = false; }; deepin-music-6.0.1.54/src/music-player/view/widget/musiclistviewitem.cpp000664 000000 000000 00000003530 13703317554 026250 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musiclistviewitem.h" #include #include #include #include #include #include #include #include #include #include "core/playlist.h" MusicListViewItem::MusicListViewItem(PlaylistPtr playlist, QListWidget *parent) : QListWidgetItem(parent) { m_data = playlist; Q_ASSERT(playlist); QIcon icon(":/mpimage/light/normal/famous_ballad_normal.svg"); if (playlist->id() == AlbumMusicListID) { icon = QIcon(":/mpimage/light/normal/album_normal.svg"); } else if (playlist->id() == ArtistMusicListID) { icon = QIcon(":/mpimage/light/normal/singer_normal.svg"); } else if (playlist->id() == AllMusicListID) { icon = QIcon(":/mpimage/light/normal/all_music_normal.svg"); } else if (playlist->id() == FavMusicListID) { icon = QIcon(":/mpimage/light/normal/my_collection_normal.svg"); } else { icon = QIcon(":/mpimage/light/normal/famous_ballad_normal.svg"); } setIcon(icon); setText(playlist->displayName()); } deepin-music-6.0.1.54/src/music-player/view/widget/musiclistviewitem.h000664 000000 000000 00000002130 13703317554 025710 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "../../core/playlist.h" class MusicListViewItem : public QListWidgetItem { public: explicit MusicListViewItem(PlaylistPtr playlist, QListWidget *parent = Q_NULLPTR); inline PlaylistPtr data() { return m_data; } private: PlaylistPtr m_data; }; deepin-music-6.0.1.54/src/music-player/view/widget/musicpixmapbutton.cpp000664 000000 000000 00000003454 13703317554 026262 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: yub.wang * * Maintainer: yub.wang * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musicpixmapbutton.h" #include #include #include MusicPixmapButton::MusicPixmapButton(QWidget *parent) : DPushButton(parent) { } void MusicPixmapButton::paintEvent(QPaintEvent *event) { Q_UNUSED(event) QPainter painter(this); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::HighQualityAntialiasing); painter.setRenderHint(QPainter::SmoothPixmapTransform); QPixmap pixmap = icon().pixmap(rect().width(), rect().height()); //pixmap.setDevicePixelRatio(devicePixelRatioF()); QPainterPath backgroundPath; backgroundPath.addRoundedRect(rect(), 8, 8); painter.setClipPath(backgroundPath); painter.drawPixmap(rect(), pixmap); painter.setBrush(Qt::NoBrush); QColor BorderColor("000000"); BorderColor.setAlphaF(0.08); QPen BorderPen(BorderColor); BorderPen.setWidthF(2); painter.setPen(BorderPen); painter.drawRoundedRect(rect(), 8, 8); //画矩形 painter.restore(); } deepin-music-6.0.1.54/src/music-player/view/widget/musicpixmapbutton.h000664 000000 000000 00000002046 13703317554 025723 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: yub.wang * * Maintainer: yub.wang * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include DWIDGET_USE_NAMESPACE class MusicPixmapButton : public DPushButton { Q_OBJECT public: explicit MusicPixmapButton(QWidget *parent = Q_NULLPTR); protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; }; deepin-music-6.0.1.54/src/music-player/view/widget/musicsearchlistview.cpp000775 000000 000000 00000020655 13703317554 026571 0ustar00rootroot000000 000000 /* * Copyright (C) 2020 chengdu Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musicsearchlistview.h" #include "model/musicsearchlistmodel.h" #include "delegate/musicsearchlistdelegate.h" #include #include "util/pinyinsearch.h" DWIDGET_USE_NAMESPACE class MusicSearchListviewPrivate { public: MusicSearchListviewPrivate(MusicSearchListview *parent): q_ptr(parent) {} void addItem(const QString str); MusicSearchListModel *model = nullptr; MusicSearchListDelegate *delegate = nullptr; PlaylistPtr playList = nullptr; QString searchText = ""; PlayMusicTypePtrList searchMusicTypePtrList; MetaPtrList searchMetaPtrPtrList; int themeType = 1; int m_CurrentIndex = 0; QString defaultCover = ":/images/logo.svg"; QPixmap playingPixmap = QPixmap(":/images/logo.svg"); QPixmap sidebarPixmap = QPixmap(":/images/logo.svg"); QPixmap albumPixmap = QPixmap(":/images/logo.svg"); MusicSearchListview *q_ptr; Q_DECLARE_PUBLIC(MusicSearchListview) }; void MusicSearchListviewPrivate::addItem(const QString str) { QStandardItem *newItem = new QStandardItem; model->appendRow(newItem); auto row = model->rowCount() - 1; QModelIndex index = model->index(row, 0, QModelIndex()); model->setData(index, str); } MusicSearchListview::MusicSearchListview(QWidget *parent) : DListView(parent), d_ptr(new MusicSearchListviewPrivate(this)) { Q_D(MusicSearchListview); d->model = new MusicSearchListModel (3, 3, this); setModel(d->model); d->delegate = new MusicSearchListDelegate; setItemDelegate(d->delegate); setViewportMargins(0, 0, 8, 0); setUniformItemSizes(true); setViewModeFlag(QListView::ListMode); setResizeMode( QListView::Adjust ); setMovement( QListView::Static ); setLayoutMode(QListView::Batched); setBatchSize(2000); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); connect(d->delegate, &MusicSearchListDelegate::SearchClear, this, &MusicSearchListview::SearchClear); } MusicSearchListview::~MusicSearchListview() { } PlaylistPtr MusicSearchListview::playlist() const { Q_D(const MusicSearchListview); return d->model->playlist(); } int MusicSearchListview::rowCount() { Q_D(const MusicSearchListview); return d->model->rowCount(); } int MusicSearchListview::listSize() { Q_D(MusicSearchListview); return d->searchMusicTypePtrList.size(); } int MusicSearchListview::getIndexInt()const { Q_D(const MusicSearchListview); return d->m_CurrentIndex; } void MusicSearchListview::onMusiclistChanged(QString text, PlaylistPtr playlist) { Q_D(MusicSearchListview); if (playlist.isNull()) { qWarning() << "can not change to emptry playlist"; return; } d->searchText = text; setUpdatesEnabled(false); d->model->removeRows(0, d->model->rowCount()); QString searchStr = playlist->searchStr(); bool chineseFlag = false; for (auto ch : searchStr) { if (DMusic::PinyinSearch::isChinese(ch)) { chineseFlag = true; break; } } if (playlist->id() == MusicCandListID) { d->searchMetaPtrPtrList.clear(); for (auto meta : playlist->allmusic()) { d->addItem(meta->title + "-" + meta->artist); d->searchMetaPtrPtrList.append(meta); } } else { d->searchMusicTypePtrList.clear(); for (auto meta : playlist->playMusicTypePtrList()) { if (searchStr.isEmpty()) { d->addItem(meta->name); d->searchMusicTypePtrList.append(meta); } else { if (chineseFlag) { if (meta->name.contains(searchStr, Qt::CaseInsensitive)) { d->addItem(meta->name); d->searchMusicTypePtrList.append(meta); } } else { if (playlist->searchStr().size() == 1) { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(meta->name); if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { d->addItem(meta->name); d->searchMusicTypePtrList.append(meta); } } else { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(meta->name); if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { d->addItem(meta->name); d->searchMusicTypePtrList.append(meta); } } } } } } d->model->setPlaylist(playlist); setUpdatesEnabled(true); } MetaPtrList MusicSearchListview::playMetaList() const { Q_D(const MusicSearchListview); return d->searchMetaPtrPtrList; } PlayMusicTypePtrList MusicSearchListview::playMusicTypePtrList() const { Q_D(const MusicSearchListview); return d->searchMusicTypePtrList; } void MusicSearchListview::setThemeType(int type) { Q_D(MusicSearchListview); d->themeType = type; } int MusicSearchListview::getThemeType() const { Q_D(const MusicSearchListview); return d->themeType; } QString MusicSearchListview::getSearchText()const { Q_D(const MusicSearchListview); return d->searchText; } void MusicSearchListview::setCurrentIndexInt(int row) { Q_D(MusicSearchListview); d->m_CurrentIndex = row; } void MusicSearchListview::setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap) { Q_D(MusicSearchListview); d->playingPixmap = pixmap; d->sidebarPixmap = sidebarPixmap; d->albumPixmap = albumPixmap; update(); } QPixmap MusicSearchListview::getPlayPixmap() const { Q_D(const MusicSearchListview); return d->playingPixmap; } QPixmap MusicSearchListview::getSidebarPixmap() const { Q_D(const MusicSearchListview); return d->sidebarPixmap; } QPixmap MusicSearchListview::getAlbumPixmap() const { Q_D(const MusicSearchListview); return d->albumPixmap; } void MusicSearchListview::updateList() { //æ›´æ–°modelæ•°æ® Q_D(MusicSearchListview); PlaylistPtr playlist = d->model->playlist(); if (playlist.isNull()) { qWarning() << "can not change to emptry playlist"; return; } QVector allStr; for (auto meta : playlist->playMusicTypePtrList()) { allStr.append(meta->name); } for (int i = d->model->rowCount() - 1; i >= 0; --i) { auto index = d->model->index(i, 0); auto itemName = d->model->data(index).toString(); if (!allStr.contains(itemName)) { d->searchMusicTypePtrList.removeAt(i); d->model->removeRow(i); } } } void MusicSearchListview::keyChoice() { Q_D(MusicSearchListview); qDebug() << "cle down" << endl; QModelIndex indexFromList = d->model->index(1, 0);//å–model this->setCurrentIndex(indexFromList); } void MusicSearchListview::setViewModeFlag(QListView::ViewMode mode) { if (mode == QListView::IconMode) { setIconSize( QSize(170, 170) ); setGridSize( QSize(170, 170) ); } else { setIconSize( QSize(36, 36) ); setGridSize( QSize(-1, -1) ); } setViewMode(mode); } void MusicSearchListview::SearchClear() { Q_EMIT this->sigSearchClear(); } void MusicSearchListview::mouseMoveEvent(QMouseEvent *event) { Q_UNUSED(event) qDebug() << "MusicSearchListview::mouseMoveEvent"; } deepin-music-6.0.1.54/src/music-player/view/widget/musicsearchlistview.h000775 000000 000000 00000004044 13703317554 026230 0ustar00rootroot000000 000000 /* * Copyright (C) 2020 chengdu Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include "../../core/playlist.h" #include DWIDGET_USE_NAMESPACE class MusicSearchListviewPrivate; class MusicSearchListview: public DListView { Q_OBJECT public: explicit MusicSearchListview(QWidget *parent = Q_NULLPTR); ~MusicSearchListview() override; PlaylistPtr playlist() const; int rowCount(); int listSize(); int getIndexInt()const; void onMusiclistChanged(QString text, PlaylistPtr playlist); MetaPtrList playMetaList() const; PlayMusicTypePtrList playMusicTypePtrList() const; void setThemeType(int type); int getThemeType() const; QString getSearchText()const; void setCurrentIndexInt(int row); void setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap); QPixmap getPlayPixmap() const; QPixmap getSidebarPixmap() const; QPixmap getAlbumPixmap() const; void updateList(); void keyChoice(); void setViewModeFlag(QListView::ViewMode mode); signals: void sigSearchClear(); public slots: void SearchClear(); protected: virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), MusicSearchListview) }; deepin-music-6.0.1.54/src/music-player/view/widget/musictitleimage.cpp000664 000000 000000 00000005561 13703317554 025655 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "musictitleimage.h" #include MusicTitleImageWidget::MusicTitleImageWidget(QWidget *parent) : DWidget( parent) { } MusicTitleImageWidget::~MusicTitleImageWidget() { } void MusicTitleImageWidget::setPixmap(QPixmap pixmap) { image = pixmap; } void MusicTitleImageWidget::setThemeType(int type) { this->type = type; } void MusicTitleImageWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event) QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing | QPainter::SmoothPixmapTransform); QRect rect = this->rect(); QPainterPath path; int cornerSize = 20; int arcR = cornerSize / 2; path.moveTo(rect.left() + arcR, rect.top()); path.arcTo(rect.left(), rect.top(), cornerSize, cornerSize, 90.0, 90.0); path.lineTo(rect.left(), rect.bottom()); path.lineTo(rect.right(), rect.bottom()); path.lineTo(rect.right(), rect.top() + arcR); path.arcTo(rect.right() - cornerSize, rect.top(), cornerSize, cornerSize, 0.0, 90.0); path.lineTo(rect.top(), rect.left()); // QPainterPath path; // path.addRoundRect(rect, 10, 10); painter.save(); painter.setClipPath(path); double windowScale = (width() * 1.0) / height(); int imageWidth = static_cast(image.height() * windowScale); QPixmap coverImage; if (imageWidth > image.width()) { int imageheight = static_cast(image.width() / windowScale); coverImage = image.copy(0, (image.height() - imageheight) / 2, image.width(), imageheight); } else { int imageheight = image.height(); coverImage = image.copy((image.width() - imageWidth) / 2, 0, imageWidth, imageheight); } painter.drawPixmap(rect, coverImage); QColor fillColor("#FFFFFF"); if (type != 1) { fillColor = QColor("#000000"); } fillColor.setAlphaF(0.6); painter.setBrush(fillColor); QColor penColor("#000000"); penColor.setAlphaF(0.08); QPen pen(penColor, 2); painter.setPen(pen); // painter.drawRoundRect(rect, 10, 10); painter.drawPath(path); painter.restore(); } deepin-music-6.0.1.54/src/music-player/view/widget/musictitleimage.h000664 000000 000000 00000002316 13703317554 025315 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include DWIDGET_USE_NAMESPACE class MusicTitleImageWidget : public DWidget { Q_OBJECT public: explicit MusicTitleImageWidget(QWidget *parent = Q_NULLPTR); ~MusicTitleImageWidget() override; void setPixmap(QPixmap pixmap); public slots: void setThemeType(int type); protected: virtual void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; private: QPixmap image; int type = 1; }; deepin-music-6.0.1.54/src/music-player/view/widget/playlistitem.cpp000664 000000 000000 00000013602 13703317554 025203 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "playlistitem.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "core/playlist.h" static int LineEditWidth = 105; DWIDGET_USE_NAMESPACE PlayListItem::PlayListItem(PlaylistPtr playlist, QWidget *parent) : QFrame(parent) { m_data = playlist; Q_ASSERT(playlist); DThemeManager::instance()->registerWidget(this); setObjectName("PlayListItem"); auto layout = new QHBoxLayout(this); layout->setContentsMargins(10, 0, 10, 0); layout->setSpacing(0); auto interFrame = new QFrame; interFrame->setObjectName("PlayListInterFrame"); auto interLayout = new QHBoxLayout(interFrame); interLayout->setContentsMargins(0, 0, 0, 0); interLayout->setSpacing(0); auto icon = new QLabel; icon->setObjectName("PlayListIcon"); icon->setFixedSize(48, 48); icon->setProperty("iconName", playlist->icon()); m_titleedit = new QLineEdit; m_titleedit->setObjectName("PlayListTitle"); m_titleedit->setFixedHeight(24); m_titleedit->setMaximumWidth(160); m_titleedit->setMaxLength(255); m_titleedit->setMaxLength(40); m_titleedit->setProperty("EditValue", playlist->displayName()); m_titleedit->setDisabled(true); if (playlist->readonly()) { m_titleedit->setReadOnly(true); } if (playlist->editmode()) { m_titleedit->setEnabled(true); QTimer::singleShot(200, this, [ = ] { m_titleedit->setFocus(); m_titleedit->setCursorPosition(0); m_titleedit->setSelection(0, m_titleedit->text().length()); }); } interLayout->addWidget(icon, 0, Qt::AlignCenter); interLayout->addSpacing(10); interLayout->addWidget(m_titleedit, 0, Qt::AlignRight); interLayout->addStretch(); layout->addWidget(interFrame); setFixedHeight(56); setFixedWidth(220); interLayout->addSpacing(5); // TODO: wtf QFont font(m_titleedit->font()); font.setPixelSize(12); QFontMetrics fm(font); m_titleedit->setText(fm.elidedText(QString(playlist->displayName()), Qt::ElideMiddle, LineEditWidth)); connect(m_titleedit, &QLineEdit::editingFinished, this, [ = ] { if (m_titleedit->text().isEmpty()) { m_titleedit->setText(m_titleedit->property("EditValue").toString()); } else { Q_EMIT this->rename(m_titleedit->text()); m_titleedit->setProperty("EditValue", m_titleedit->text()); } QFont font(m_titleedit->font()); font.setPixelSize(12); QFontMetrics fm(font); m_titleedit->setText(fm.elidedText(QString(m_titleedit->text()), Qt::ElideMiddle, LineEditWidth)); m_titleedit->setEnabled(false); }); connect(m_titleedit, &QLineEdit::returnPressed, this, [ = ] { m_titleedit->blockSignals(true); this->setFocus(); m_titleedit->blockSignals(false); }); connect(this, &PlayListItem::rename, m_data.data(), &Playlist::setDisplayName); connect(this, &PlayListItem::remove, m_data.data(), &Playlist::removed); } void PlayListItem::setActive(bool active) { QString prefix; if (active) { m_titleedit->setProperty("status", "active"); } else { m_titleedit->setProperty("status", ""); } this->style()->unpolish(m_titleedit); this->style()->polish(m_titleedit); this->update(); } void PlayListItem::setPlay(bool isPaly) { if (isPaly) { } else { } } void PlayListItem::mouseDoubleClickEvent(QMouseEvent *event) { // QFrame::mouseDoubleClickEvent(event); auto lineeditMousePos = m_titleedit->mapFromParent(event->pos()); if (!m_titleedit->rect().contains(lineeditMousePos)) { return; } if (m_titleedit->isReadOnly()) { return; } QTimer::singleShot(0, this, [ = ] { // m_titleedit->setEnabled(true); // m_titleedit->setFocus(); // m_titleedit->setCursorPosition(m_titleedit->text().length()); }); } void PlayListItem::onDelete() { QString message = QString(tr("Are you sure you want to delete this playlist?")); DDialog warnDlg(this); warnDlg.setIcon(QIcon(":/common/image/del_notify.svg")); warnDlg.setTextFormat(Qt::AutoText); warnDlg.setTitle(message); warnDlg.addButton(tr("Cancel"), false, Dtk::Widget::DDialog::ButtonNormal); warnDlg.addButton(tr("Delete"), true, Dtk::Widget::DDialog::ButtonWarning); if (0 == warnDlg.exec()) { return; } Q_EMIT this->remove(); } void PlayListItem::onRename() { QTimer::singleShot(1, this, [ = ] { auto value = m_titleedit->property("EditValue").toString(); qDebug() << value; m_titleedit->setText(value); m_titleedit->setEnabled(true); m_titleedit->setFocus(); m_titleedit->setCursorPosition(0); m_titleedit->setSelection(0, m_titleedit->text().length()); }); } deepin-music-6.0.1.54/src/music-player/view/widget/playlistitem.h000664 000000 000000 00000004300 13703317554 024643 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef PLAYLISTITEM_H #define PLAYLISTITEM_H #include #include "../../core/playlist.h" #include class QLineEdit; class PlayListItem : public QFrame { Q_OBJECT Q_PROPERTY(QString playingIcon READ playingIcon WRITE setPlayingIcon) Q_PROPERTY(QString highlightPlayingIcon READ highlightPlayingIcon WRITE setHighlightPlayingIcon) public: explicit PlayListItem(PlaylistPtr playlist, QWidget *parent = Q_NULLPTR); inline PlaylistPtr data() { return m_data; } void setActive(bool active); void setPlay(bool isPaly); void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE; QString playingIcon() const { return m_playingIcon; } QString highlightPlayingIcon() const { return m_highlightPlayingIcon; } signals: void rename(const QString &newNameA); void remove(); void playall(PlaylistPtr playlist); public slots: void onDelete(); void onRename(); void setPlayingIcon(QString playingIcon) { m_playingIcon = playingIcon; } void setHighlightPlayingIcon(QString highlightPlayingIcon) { m_highlightPlayingIcon = highlightPlayingIcon; } private: // Dtk::Widget::DPictureSequenceView *playingAnimation; QLineEdit *m_titleedit = nullptr; PlaylistPtr m_data; QString m_playingIcon; QString m_highlightPlayingIcon; }; #endif // PLAYLISTITEM_H deepin-music-6.0.1.54/src/music-player/view/widget/playlistview.cpp000775 000000 000000 00000064267 13703317554 025237 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "playlistview.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "util/pinyinsearch.h" #include "../../core/metasearchservice.h" #include "../helper/widgethellper.h" #include "delegate/playitemdelegate.h" #include "model/playlistmodel.h" DWIDGET_USE_NAMESPACE class PlayListViewPrivate { public: PlayListViewPrivate(PlayListView *parent): q_ptr(parent) {} void addMedia(const MetaPtr meta); void removeSelection(QItemSelectionModel *selection); PlaylistModel *model = nullptr; PlayItemDelegate *delegate = nullptr; int themeType = 1; MetaPtr playing = nullptr; bool searchFlag = true; MetaPtrList playMetaPtrList; QPixmap playingPixmap = QPixmap(":/mpimage/light/music1.svg"); QPixmap sidebarPixmap = QPixmap(":/mpimage/light/music_withe_sidebar/music1.svg"); QPixmap albumPixmap = QPixmap(":/mpimage/light/music_white_album_cover/music1.svg"); PlayListView *q_ptr; Q_DECLARE_PUBLIC(PlayListView) }; PlayListView::PlayListView(bool searchFlag, QWidget *parent) : DListView(parent), d_ptr(new PlayListViewPrivate(this)) { Q_D(PlayListView); setObjectName("PlayListView"); d->searchFlag = searchFlag; d->model = new PlaylistModel(0, 1, this); setModel(d->model); d->delegate = new PlayItemDelegate; setItemDelegate(d->delegate); setUniformItemSizes(true); setDragEnabled(true); //viewport()->setAcceptDrops(true); setDropIndicatorShown(true); setDragDropOverwriteMode(false); //setVerticalScrollMode(QAbstractItemView::ScrollPerItem); //setHorizontalScrollMode(QAbstractItemView::ScrollPerItem); setDefaultDropAction(Qt::MoveAction); setDragDropMode(QAbstractItemView::DragOnly); setDragEnabled(true); setMovement(QListView::Free); setViewModeFlag(QListView::ListMode); setResizeMode(QListView::Adjust); setLayoutMode(QListView::Batched); setBatchSize(2000); setSelectionMode(QListView::ExtendedSelection); //setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setEditTriggers(QAbstractItemView::NoEditTriggers); setSelectionBehavior(QAbstractItemView::SelectRows); setContextMenuPolicy(Qt::CustomContextMenu); connect(this, &PlayListView::customContextMenuRequested, this, &PlayListView::requestCustomContextMenu); connect(this, &PlayListView::doubleClicked, this, [ = ](const QModelIndex & index) { MetaPtr meta = d->model->meta(index); if (meta == playlist()->playing()) { Q_EMIT resume(meta); } else { Q_EMIT playMedia(meta); } }); } PlayListView::~PlayListView() { } MetaPtr PlayListView::activingMeta() const { Q_D(const PlayListView); if (d->model->playlist().isNull()) { return MetaPtr(); } if (d->playing == nullptr) { return d->model->playlist()->playing(); } else { return d->playing; } } PlaylistPtr PlayListView::playlist() const { Q_D(const PlayListView); return d->model->playlist(); } QModelIndex PlayListView::findIndex(const MetaPtr meta) { Q_ASSERT(!meta.isNull()); Q_D(PlayListView); return d->model->findIndex(meta); } void PlayListView::setPlaying(const MetaPtr meta) { Q_D(PlayListView); d->playing = meta; } void PlayListView::setViewModeFlag(QListView::ViewMode mode) { if (mode == QListView::IconMode) { setIconSize(QSize(150, 150)); setGridSize(QSize(-1, -1)); setSpacing(20); setViewportMargins(-10, -10, -35, 10); } else { setIconSize(QSize(36, 36)); setGridSize(QSize(-1, -1)); setSpacing(0); setViewportMargins(0, 0, 8, 0); } setViewMode(mode); } MetaPtrList PlayListView::playMetaPtrList() const { Q_D(const PlayListView); return d->playMetaPtrList; } void PlayListView::setThemeType(int type) { Q_D(PlayListView); d->themeType = type; } int PlayListView::getThemeType() const { Q_D(const PlayListView); return d->themeType; } void PlayListView::setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap) { Q_D(PlayListView); d->playingPixmap = pixmap; d->sidebarPixmap = sidebarPixmap; d->albumPixmap = albumPixmap; update(); } QPixmap PlayListView::getPlayPixmap() const { Q_D(const PlayListView); return d->playingPixmap; } QPixmap PlayListView::getSidebarPixmap() const { Q_D(const PlayListView); return d->sidebarPixmap; } QPixmap PlayListView::getAlbumPixmap() const { Q_D(const PlayListView); return d->sidebarPixmap; } int PlayListView::rowCount() { Q_D(const PlayListView); return d->model->rowCount(); } QString PlayListView::firstHash() { Q_D(const PlayListView); QString hashStr; if (d->model->rowCount() > 0) { auto index = d->model->index(0, 0); hashStr = d->model->data(index).toString(); } return hashStr; } void PlayListView::onMusicListRemoved(const MetaPtrList metalist) { Q_D(PlayListView); setAutoScroll(false); //d->model->blockSignals(true); for (auto meta : metalist) { if (meta.isNull()) { continue; } for (int i = 0; i < d->model->rowCount(); ++i) { auto index = d->model->index(i, 0); auto itemHash = d->model->data(index).toString(); if (itemHash == meta->hash) { d->model->removeRow(i); } } } //d->model->blockSignals(false); //updateScrollbar(); setAutoScroll(true); } void PlayListView::onMusicError(const MetaPtr meta, int /*error*/) { if (meta == nullptr) { return ; } update(); } void PlayListView::onMusicListAdded(const MetaPtrList metalist) { Q_D(PlayListView); setUpdatesEnabled(false); setAutoScroll(false); for (auto meta : metalist) { d->addMedia(meta); } setAutoScroll(true); setUpdatesEnabled(true); //updateScrollbar(); } void PlayListView::onLocate(const MetaPtr meta) { if (meta == nullptr) return; QModelIndex index = findIndex(meta); if (!index.isValid()) { return; } clearSelection(); auto viewRect = QRect(QPoint(0, 0), size()); if (!viewRect.intersects(visualRect(index))) { scrollTo(index, PlayListView::PositionAtCenter); } setCurrentIndex(index); } void PlayListView::onMusiclistChanged(PlaylistPtr playlist) { Q_D(PlayListView); if (playlist.isNull()) { qWarning() << "can not change to emptry playlist"; d->model->removeRows(0, d->model->rowCount()); d->playMetaPtrList.clear(); d->model->setPlaylist(nullptr); return; } if (playlist->searchStr().isEmpty() && playlist == d->model->playlist() && playlist->allmusic().size() == rowCount()) { bool flag = true; auto allMusic = playlist->allmusic(); for (int i = 0; i < allMusic.size(); ++i) { auto curIndex = d->model->index(i, 0); if (!curIndex.isValid() || allMusic[i]->hash != d->model->data(d->model->index(i, 0)).toString()) { flag = false; break; } } if (flag) return; } setUpdatesEnabled(false); setModel(nullptr); d->model->removeRows(0, d->model->rowCount()); d->playMetaPtrList.clear(); QString searchStr = playlist->searchStr(); if (!d->searchFlag) searchStr.clear(); bool chineseFlag = false; for (auto ch : searchStr) { if (DMusic::PinyinSearch::isChinese(ch)) { chineseFlag = true; break; } } for (auto meta : playlist->allmusic()) { if (searchStr.isEmpty()) { d->addMedia(meta); d->playMetaPtrList.append(meta); } else { if (chineseFlag) { if (meta->title.contains(searchStr, Qt::CaseInsensitive)) { d->addMedia(meta); d->playMetaPtrList.append(meta); } } else { if (playlist->searchStr().size() == 1) { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(meta->title); if (!curTextList.isEmpty() && curTextList.first().contains(searchStr, Qt::CaseInsensitive)) { d->addMedia(meta); d->playMetaPtrList.append(meta); } } else { auto curTextList = DMusic::PinyinSearch::simpleChineseSplit(meta->title); if (!curTextList.isEmpty() && curTextList.join("").contains(searchStr, Qt::CaseInsensitive)) { d->addMedia(meta); d->playMetaPtrList.append(meta); } } } } } setUpdatesEnabled(true); setModel(d->model); d->model->setPlaylist(playlist); //updateScrollbar(); } void PlayListView::keyPressEvent(QKeyEvent *event) { Q_D(PlayListView); switch (event->modifiers()) { case Qt::NoModifier: switch (event->key()) { case Qt::Key_Delete: { QItemSelectionModel *selection = this->selectionModel(); d->removeSelection(selection); } break; case Qt::Key_Return: { QItemSelectionModel *selection = this->selectionModel(); if (!selection->selectedRows().isEmpty()) { auto index = selection->selectedRows().first(); if (d->model->meta(index) == playlist()->playing()) { Q_EMIT resume(d->model->meta(index)); } else { Q_EMIT playMedia(d->model->meta(index)); } } } break; } break; case Qt::ShiftModifier: switch (event->key()) { case Qt::Key_Delete: break; } break; case Qt::AltModifier: switch (event->key()) { case Qt::Key_Return: QItemSelectionModel *selection = this->selectionModel(); if (selection->selectedRows().length() <= 0) { return; } auto index = selection->selectedRows().first(); auto meta = d->model->meta(index); Q_EMIT showInfoDialog(meta); break; } break; case Qt::ControlModifier: switch (event->key()) { case Qt::Key_K: QItemSelectionModel *selection = this->selectionModel(); if (selection->selectedRows().length() > 0) { MetaPtrList metalist; for (auto index : selection->selectedRows()) { auto meta = d->model->meta(index); metalist << meta; } if (!metalist.isEmpty()) Q_EMIT addMetasFavourite(metalist); } break; } break; case Qt::ControlModifier | Qt::ShiftModifier: switch (event->key()) { case Qt::Key_K: QItemSelectionModel *selection = this->selectionModel(); if (selection->selectedRows().length() > 0) { MetaPtrList metalist; for (auto index : selection->selectedRows()) { auto meta = d->model->meta(index); metalist << meta; } if (!metalist.isEmpty()) Q_EMIT removeMetasFavourite(metalist); } break; } break; default: break; } QAbstractItemView::keyPressEvent(event); } void PlayListView::keyboardSearch(const QString &search) { Q_UNUSED(search); // Disable keyborad serach // qDebug() << search; // QAbstractItemView::keyboardSearch(search); } void PlayListViewPrivate::addMedia(const MetaPtr meta) { for (int i = 0; i < model->rowCount(); ++i) { auto hash = model->data(model->index(i, 0)).toString(); if (hash == meta->hash) return; } QStandardItem *newItem = new QStandardItem; QPixmap cover(":/common/image/cover_max.svg"); auto coverData = MetaSearchService::coverData(meta); if (coverData.length() > 0) { cover = QPixmap::fromImage(QImage::fromData(coverData)); } if (cover.width() > 160 || cover.height() > 160) cover = cover.scaled(QSize(160, 160)); QIcon icon = QIcon(cover); newItem->setIcon(icon); model->appendRow(newItem); auto row = model->rowCount() - 1; QModelIndex index = model->index(row, 0, QModelIndex()); model->setData(index, meta->hash); } void PlayListViewPrivate::removeSelection(QItemSelectionModel *selection) { Q_ASSERT(selection != nullptr); Q_Q(PlayListView); MetaPtrList metalist; for (auto index : selection->selectedRows()) { auto meta = model->meta(index); metalist << meta; } Q_EMIT q->removeMusicList(metalist); } void PlayListView::showContextMenu(const QPoint &pos, PlaylistPtr selectedPlaylist, PlaylistPtr favPlaylist, QList newPlaylists) { Q_D(PlayListView); QItemSelectionModel *selection = this->selectionModel(); if (selection->selectedRows().length() <= 0) { return; } QPoint globalPos = this->mapToGlobal(pos); DMenu playlistMenu; auto newvar = QVariant::fromValue(PlaylistPtr()); PlaylistPtr curPlaylist = nullptr; for (auto playlist : newPlaylists) { if (playlist->id() == PlayMusicListID) { curPlaylist = playlist; auto act = playlistMenu.addAction(tr("Play queue")); act->setData(QVariant::fromValue(curPlaylist)); playlistMenu.addSeparator(); break; } } if (selectedPlaylist != favPlaylist || this->playlist()->id() == tr("musicResult")) { // auto act = playlistMenu.addAction(favPlaylist->displayName()); auto act = playlistMenu.addAction(tr("My favorites")); bool flag = true; for (auto &index : selection->selectedRows()) { auto meta = d->model->meta(index); if (!favPlaylist->contains(meta)) { flag = false; } } if (flag == true) { act->setEnabled(false); } else { act->setEnabled(true); } act->setData(QVariant::fromValue(favPlaylist)); playlistMenu.addSeparator(); } auto createPlaylist = playlistMenu.addAction(tr("Add to new playlist")); // auto font = createPlaylist->font(); // font.setWeight(QFont::DemiBold); // createPlaylist->setFont(font); createPlaylist->setData(newvar); playlistMenu.addSeparator(); for (auto playlist : newPlaylists) { if (playlist == nullptr) { continue; } if (playlist->id() == PlayMusicListID) { curPlaylist = playlist; continue; } QFont font(playlistMenu.font()); QFontMetrics fm(font); auto text = fm.elidedText(QString(playlist->displayName().replace("&", "&&")), Qt::ElideMiddle, 160); auto act = playlistMenu.addAction(text); act->setData(QVariant::fromValue(playlist)); } playlistMenu.addSeparator(); connect(&playlistMenu, &DMenu::triggered, this, [ = ](QAction * action) { auto playlist = action->data().value(); qDebug() << playlist; MetaPtrList metalist; for (auto &index : selection->selectedRows()) { auto meta = d->model->meta(index); if (!meta.isNull()) { metalist << meta; } } Q_EMIT addToPlaylist(playlist, metalist); }); bool singleSelect = (1 == selection->selectedRows().length()); DMenu myMenu; QAction *playAction = nullptr; QAction *pauseAction = nullptr; if (singleSelect) { auto activeMeta = activingMeta(); auto meta = d->model->meta(selection->selectedRows().first()); if (d->model->playlist()->playingStatus() && activeMeta == meta) { if (rowCount() == 1 && meta->invalid) { playAction = myMenu.addAction(tr("Play")); if (meta->invalid) playAction->setEnabled(false); } else { pauseAction = myMenu.addAction(tr("Pause")); if (meta->invalid) pauseAction->setEnabled(false); } } else { playAction = myMenu.addAction(tr("Play")); if (meta->invalid) playAction->setEnabled(false); } } myMenu.addAction(tr("Add to playlist"))->setMenu(&playlistMenu); myMenu.addSeparator(); QAction *displayAction = nullptr; if (singleSelect) { displayAction = myMenu.addAction(tr("Display in file manager")); } auto removeAction = myMenu.addAction(tr("Remove from play queue")); auto deleteAction = myMenu.addAction(tr("Delete from local disk")); QAction *songAction = nullptr; DMenu textCodecMenu; if (singleSelect) { auto index = selection->selectedRows().first(); auto meta = d->model->meta(index); QList codecList = DMusic::detectMetaEncodings(meta); if (!codecList.contains("UTF-8")) { codecList.push_front("UTF-8"); } if (QLocale::system().name() == "zh_CN") { if (codecList.contains("GB18030")) { codecList.removeAll("GB18030"); } if (!codecList.isEmpty()) { codecList.push_front("GB18030"); } } for (auto codec : codecList) { auto act = textCodecMenu.addAction(codec); act->setCheckable(true); if (codec == meta->codec) { act->setChecked(true); } act->setData(QVariant::fromValue(codec)); } if (codecList.length() > 1) { myMenu.addSeparator(); myMenu.addAction(tr("Encoding"))->setMenu(&textCodecMenu); } myMenu.addSeparator(); songAction = myMenu.addAction(tr("Song info")); connect(&textCodecMenu, &DMenu::triggered, this, [ = ](QAction * action) { auto codec = action->data().toByteArray(); auto preTitle = meta->title; auto preArtist = meta->artist; auto preAlbum = meta->album; meta->updateCodec(codec); meta->codec = codec; if (preTitle != meta->title || preArtist != meta->artist || preAlbum != meta->album) Q_EMIT updateMetaCodec(preTitle, preArtist, preAlbum, meta); }); } if (playAction) { connect(playAction, &QAction::triggered, this, [ = ](bool) { auto index = selection->selectedRows().first(); if (d->model->meta(index) == playlist()->playing()) { Q_EMIT resume(d->model->meta(index)); } else { Q_EMIT playMedia(d->model->meta(index)); } }); } if (pauseAction) { connect(pauseAction, &QAction::triggered, this, [ = ](bool) { auto index = selection->selectedRows().first(); Q_EMIT pause(d->model->meta(index)); }); } if (displayAction) { connect(displayAction, &QAction::triggered, this, [ = ](bool) { auto index = selection->selectedRows().first(); auto meta = d->model->meta(index); auto dirUrl = QUrl::fromLocalFile(meta->localPath); Dtk::Widget::DDesktopServices::showFileItem(dirUrl); }); } if (removeAction) { connect(removeAction, &QAction::triggered, this, [ = ](bool) { MetaPtrList metalist; for (auto index : selection->selectedRows()) { auto meta = d->model->meta(index); metalist << meta; } if (metalist.isEmpty()) return ; Dtk::Widget::DDialog warnDlg(this); warnDlg.setTextFormat(Qt::RichText); warnDlg.addButton(tr("Cancel"), true, Dtk::Widget::DDialog::ButtonNormal); int deleteFlag = warnDlg.addButton(tr("Remove"), false, Dtk::Widget::DDialog::ButtonWarning); if (1 == metalist.length()) { auto meta = metalist.first(); warnDlg.setMessage(QString(tr("Are you sure you want to remove %1?")).arg(meta->title)); } else { warnDlg.setMessage(QString(tr("Are you sure you want to remove the selected %1 songs?").arg(metalist.length()))); } warnDlg.setIcon(QIcon::fromTheme("deepin-music")); if (deleteFlag == warnDlg.exec()) { d->removeSelection(selection); } }); } if (deleteAction) { connect(deleteAction, &QAction::triggered, this, [ = ](bool) { bool containsCue = false; MetaPtrList metalist; for (auto index : selection->selectedRows()) { auto meta = d->model->meta(index); if (!meta->cuePath.isEmpty()) { containsCue = true; } metalist << meta; } Dtk::Widget::DDialog warnDlg(this); warnDlg.setTextFormat(Qt::RichText); warnDlg.addButton(tr("Cancel"), true, Dtk::Widget::DDialog::ButtonNormal); int deleteFlag = warnDlg.addButton(tr("Delete"), false, Dtk::Widget::DDialog::ButtonWarning); auto cover = QImage(QString(":/common/image/del_notify.svg")); if (1 == metalist.length()) { auto meta = metalist.first(); auto coverData = MetaSearchService::coverData(meta); if (coverData.length() > 0) { cover = QImage::fromData(coverData); } warnDlg.setMessage(QString(tr("Are you sure you want to delete %1?")).arg(meta->title)); } else { // warnDlg.setTitle(QString(tr("Are you sure you want to delete the selected %1 songs?")).arg(metalist.length())); DLabel *t_titleLabel = new DLabel(this); t_titleLabel->setForegroundRole(DPalette::TextTitle); DLabel *t_infoLabel = new DLabel(this); t_infoLabel->setForegroundRole(DPalette::TextTips); t_titleLabel->setText(tr("Are you sure you want to delete the selected %1 songs?").arg(metalist.length())); t_infoLabel->setText(tr("The song files contained will also be deleted")); warnDlg.addContent(t_titleLabel, Qt::AlignHCenter); warnDlg.addContent(t_infoLabel, Qt::AlignHCenter); warnDlg.addSpacing(20); } if (containsCue && false) { DLabel *t_titleLabel = new DLabel(this); t_titleLabel->setForegroundRole(DPalette::TextTitle); DLabel *t_infoLabel = new DLabel(this); t_infoLabel->setForegroundRole(DPalette::TextTips); t_titleLabel->setText(tr("Are you sure you want to delete the selected %1 songs?").arg(metalist.length())); t_infoLabel->setText(tr("The song files contained will also be deleted")); warnDlg.addContent(t_titleLabel, Qt::AlignHCenter); warnDlg.addContent(t_infoLabel, Qt::AlignHCenter); warnDlg.addSpacing(20); } auto coverPixmap = QPixmap::fromImage(WidgetHelper::cropRect(cover, QSize(64, 64))); warnDlg.setIcon(QIcon::fromTheme("deepin-music")); if (deleteFlag == warnDlg.exec()) { Q_EMIT deleteMusicList(metalist); } }); } if (songAction) { connect(songAction, &QAction::triggered, this, [ = ](bool) { auto index = selection->selectedRows().first(); auto meta = d->model->meta(index); Q_EMIT showInfoDialog(meta); }); } myMenu.exec(globalPos); } void PlayListView::mouseMoveEvent(QMouseEvent *event) { DListView::mouseMoveEvent(event); } void PlayListView::dragEnterEvent(QDragEnterEvent *event) { DListView::dragEnterEvent(event); } void PlayListView::startDrag(Qt::DropActions supportedActions) { Q_D(PlayListView); MetaPtrList list; for (auto index : selectionModel()->selectedIndexes()) { list << d->model->meta(index); } if (!selectionModel()->selectedIndexes().isEmpty()) scrollTo(selectionModel()->selectedIndexes().first()); setAutoScroll(false); DListView::startDrag(supportedActions); setAutoScroll(true); QMap hashIndexs; for (int i = 0; i < d->model->rowCount(); ++i) { auto index = d->model->index(i, 0); auto hash = d->model->data(index).toString(); Q_ASSERT(!hash.isEmpty()); hashIndexs.insert(hash, i); } d->model->playlist()->saveSort(hashIndexs); Q_EMIT customSort(); QItemSelection selection; for (auto meta : list) { if (!meta.isNull()) { auto index = this->findIndex(meta); selection.append(QItemSelectionRange(index)); } } if (!selection.isEmpty()) { selectionModel()->select(selection, QItemSelectionModel::Select); } } deepin-music-6.0.1.54/src/music-player/view/widget/playlistview.h000664 000000 000000 00000006300 13703317554 024661 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "../../core/playlist.h" DWIDGET_USE_NAMESPACE class PlayListViewPrivate; class PlayListView : public DListView { Q_OBJECT public: explicit PlayListView(bool searchFlag, QWidget *parent = Q_NULLPTR); ~PlayListView() override; MetaPtr activingMeta() const; PlaylistPtr playlist() const; QModelIndex findIndex(const MetaPtr meta); void setPlaying(const MetaPtr meta); void setViewModeFlag(QListView::ViewMode mode); MetaPtrList playMetaPtrList() const; void setThemeType(int type); int getThemeType() const; void setPlayPixmap(QPixmap pixmap, QPixmap sidebarPixmap, QPixmap albumPixmap); QPixmap getPlayPixmap() const; QPixmap getSidebarPixmap() const; QPixmap getAlbumPixmap() const; int rowCount(); QString firstHash(); signals: void addToPlaylist(PlaylistPtr playlist, const MetaPtrList &metalist); void removeMusicList(const MetaPtrList &metalist); void deleteMusicList(const MetaPtrList &metalist); void playMedia(const MetaPtr meta); void resume(const MetaPtr meta); void pause(const MetaPtr meta); void updateMetaCodec(const QString &preTitle, const QString &preArtist, const QString &preAlbum, const MetaPtr meta); void showInfoDialog(const MetaPtr meta); void requestCustomContextMenu(const QPoint &pos); void customSort(); void addMetasFavourite(const MetaPtrList &metalist); void removeMetasFavourite(const MetaPtrList &metalist); public: void onMusiclistChanged(PlaylistPtr playlist); void onMusicListAdded(const MetaPtrList metalist); void onMusicListRemoved(const MetaPtrList metalist); void onMusicError(const MetaPtr meta, int error); void onLocate(const MetaPtr meta); void showContextMenu(const QPoint &pos, PlaylistPtr selectedPlaylist, PlaylistPtr favPlaylist, QList newPlaylists); protected: virtual void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE; virtual void startDrag(Qt::DropActions supportedActions) Q_DECL_OVERRIDE; virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; virtual void keyboardSearch(const QString &search) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), PlayListView) }; deepin-music-6.0.1.54/src/music-player/view/widget/pushbutton.cpp000664 000000 000000 00000001752 13703317554 024701 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "pushbutton.h" #include PushButton::PushButton(QWidget *parent) : DPushButton(parent) { } void PushButton::enterEvent(QEvent *event) { DPushButton::enterEvent(event); Q_EMIT entered(); } deepin-music-6.0.1.54/src/music-player/view/widget/pushbutton.h000664 000000 000000 00000002142 13703317554 024340 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef PUSHBUTTON_H #define PUSHBUTTON_H #include DWIDGET_USE_NAMESPACE class PushButton : public DPushButton { Q_OBJECT public: explicit PushButton(QWidget *parent = Q_NULLPTR); virtual void enterEvent(QEvent *event) Q_DECL_OVERRIDE; signals: void entered(); public slots: }; #endif // PUSHBUTTON_H deepin-music-6.0.1.54/src/music-player/view/widget/searchedit.cpp000775 000000 000000 00000011670 13703317554 024604 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "searchedit.h" #include #include #include #include "util/pinyinsearch.h" #include "../../core/mediadatabase.h" #include "../../core/music.h" #include "searchresult.h" DWIDGET_USE_NAMESPACE SearchEdit::SearchEdit(QWidget *parent) : DSearchEdit(parent) { auto textFont = font(); textFont.setPixelSize(14); setFont(textFont); lineEdit()->setFocusPolicy(Qt::ClickFocus); connect(this, &SearchEdit::textChanged, this, &SearchEdit::onTextChanged); connect(this, &SearchEdit::returnPressed, this, &SearchEdit::onReturnPressed); connect(this, &SearchEdit::focusChanged, this, [ = ](bool onFocus) { if (!onFocus) { m_result->hide(); } else { onTextChanged(); } }); connect(this, &SearchEdit::cursorPositionChanged, this, [ = ](int index1, int index2) { if (index1 > 0 && index2 == 0) { // clearEdit(); Q_EMIT searchAborted(); } }); } void SearchEdit::setResultWidget(SearchResult *result) { m_result = result; m_result->hide(); m_result->move(this->x(), this->y() + 50); connect(m_result, &SearchResult::searchText, this, [ = ](const QString & id, const QString & text) { onFocusOut(); setText(text); onFocusOut(); Q_EMIT this->searchText(id, text); }); connect(m_result, &SearchResult::searchText2, this, [ = ](const QString & id, const QString & text) { searchText2(id, text); }); connect(m_result, &SearchResult::searchText3, this, [ = ](const QString & id, const QString & text) { searchText3(id, text); }); } void SearchEdit::keyPressEvent(QKeyEvent *event) { //输入框中上下按键æ“作 if (event->key() == Qt::Key_Up) { m_result->selectUp(); } if (event->key() == Qt::Key_Down) { m_result->selectDown(); } DSearchEdit::keyPressEvent(event); } void SearchEdit::searchText2(QString id, QString text) { m_CurrentId = id; m_Text = text; setText(m_Text); Q_EMIT this->searchText(m_CurrentId, QString(m_Text).remove("\r").remove("\n")); } void SearchEdit::searchText3(QString id, QString text) { m_CurrentId = id; m_Text = text; setText(m_Text); } void SearchEdit::onFocusIn() { setText(""); m_CurrentId = ""; m_result->adjustSize(); auto pos = this->mapToGlobal(QPoint(0, this->height() + 2)); m_result->show(); m_result->move(pos); } void SearchEdit::onFocusOut() { DUtil::TimerSingleShot(50, [ this ]() { m_result->hide(); m_result->close(); }); } void SearchEdit::onTextChanged() { auto text = QString(this->text()).remove("\r").remove("\n"); if (this->text().size() == 0) { m_result->hide(); m_LastText = ""; return; } if (m_Text == this->text()) { return; } m_CurrentId = ""; if (m_LastText == text) { return; } m_LastText = text; if (text.length() >= 1) { m_result->setSearchString(text); m_result->show(); // parent is MainFrame QRect rect = this->rect(); QPoint bottomLeft = rect.bottomLeft(); bottomLeft = mapTo(parentWidget()->parentWidget(), bottomLeft); m_result->setFixedWidth(width()); m_result->move(bottomLeft.x(), bottomLeft.y() + 5); m_result->setFocusPolicy(Qt::StrongFocus); m_result->raise(); } else { onFocusOut(); } if (text.size() != 0) { Q_EMIT this->searchCand(text); } } void SearchEdit::onReturnPressed() { if (!m_result->currentStr().isEmpty()) setText(m_result->currentStr()); auto text = QString(this->text()).remove("\r").remove("\n"); if (text.length() == 0) return; int i = text.size(); for (; i > 0; i--) { QChar index = text.back(); if (index == ' ') { text.remove(text.size() - 1, 1); } else { break; } } onFocusOut(); if (m_CurrentId.size() == 0) { Q_EMIT this->searchText("", text); } else { Q_EMIT this->searchText(m_CurrentId, QString(m_Text).remove("\r").remove("\n")); } } deepin-music-6.0.1.54/src/music-player/view/widget/searchedit.h000775 000000 000000 00000003335 13703317554 024250 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "../core/playlist.h" class SearchResult; class SearchEdit : public Dtk::Widget::DSearchEdit { Q_OBJECT public: explicit SearchEdit(QWidget *parent = Q_NULLPTR); PlaylistPtr curPlaylistPtr() { return playlist; } public: void setResultWidget(SearchResult *); signals: void searchText(const QString &id, const QString &text); void searchCand (const QString &text); void locateMusic(const QString &hash); public slots: void onFocusIn(); void onFocusOut(); void onTextChanged(); void onReturnPressed(); protected: virtual void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE; private: void searchText2(QString id, QString text); void searchText3(QString id, QString text); SearchResult *m_result = nullptr; PlaylistPtr playlist = nullptr; QString m_CurrentId; QString m_Text; QString m_LastText; }; deepin-music-6.0.1.54/src/music-player/view/widget/searchlyricswidget.cpp000775 000000 000000 00000031421 13703317554 026364 0ustar00rootroot000000 000000 #include "searchlyricswidget.h" #include #include #include #include #include #include #include "util/musiclyric.h" #include #include "musicsettings.h" DGUI_USE_NAMESPACE SearchLyricsWidget::SearchLyricsWidget(QString path, QWidget *parent) : DFloatingWidget(parent), m_search(new DPushButton), m_listWidget(new DListWidget), m_keyWord(new DLineEdit), m_singer(new DLineEdit), m_path(path), m_group(new QButtonGroup) { initUI(); initConnection(); } void SearchLyricsWidget::setDefault(QString song, QString singer) { m_keyWord->lineEdit()->setText(song); m_singer->lineEdit()->setText(singer); } void SearchLyricsWidget::setThemeType(int type) { if (type == 1) { DPalette WidgetPl = palette(); WidgetPl.setColor(DPalette::Background, QColor("#FFFFFF")); setPalette(WidgetPl); setBackgroundRole(DPalette::Background); DPalette pl = m_search->palette(); pl.setColor(DPalette::ButtonText, QColor("#414D68")); pl.setColor(DPalette::Light, QColor("#E6E6E6")); pl.setColor(DPalette::Dark, QColor("#E3E3E3")); QColor sbcolor("#000000"); sbcolor.setAlphaF(0.08); pl.setColor(DPalette::Shadow, sbcolor); m_search->setPalette(pl); DPalette pa = m_title->palette(); pa.setColor(DPalette::WindowText, "#001A2E"); m_title->setPalette(pa); m_title->setForegroundRole(DPalette::WindowText); DPalette listWidgetPl = m_listWidget->palette(); listWidgetPl.setColor(DPalette::Background, QColor("#FFFFFF")); m_listWidget->setPalette(listWidgetPl); } else { DPalette WidgetPl = palette(); QColor tcolor = "#FFFFFF"; tcolor.setAlphaF(0.05); WidgetPl.setColor(DPalette::Background, tcolor); setPalette(WidgetPl); setBackgroundRole(DPalette::Background); DPalette pl = m_search->palette(); pl.setColor(DPalette::ButtonText, QColor("#C0C6D4")); pl.setColor(DPalette::Light, QColor("#484848")); pl.setColor(DPalette::Dark, QColor("#414141")); QColor sbcolor("#000000"); sbcolor.setAlphaF(0.08); pl.setColor(DPalette::Shadow, sbcolor); m_search->setPalette(pl); DPalette pa = m_title->palette(); pa.setColor(DPalette::WindowText, "#FFFFFF"); m_title->setPalette(pa); m_title->setForegroundRole(DPalette::WindowText); DPalette listWidgetPl = m_listWidget->palette(); listWidgetPl.setColor(DPalette::Background, tcolor); m_listWidget->setPalette(listWidgetPl); } searchLyrics(); } void SearchLyricsWidget::initUI() { setFixedWidth(370); DPalette WidgetPl = palette(); WidgetPl.setColor(DPalette::Background, QColor("#FFFFFF")); setPalette(WidgetPl); auto layout = new QVBoxLayout(this); layout->setSpacing(0); layout->setMargin(0); layout->setContentsMargins(10, 10, 10, 6); m_title = new DLabel; QFont font; font.setFamily("SourceHanSansSC-Bold"); font.setPixelSize(17); m_title->setFont(font); m_title->setText(tr("Find Lyrics")); m_title->setAlignment(Qt::AlignCenter | Qt::AlignVCenter); m_title->setFixedHeight(30); DPalette pa = m_title->palette(); pa.setColor(DPalette::WindowText, "#001A2E"); m_title->setPalette(pa); m_title->setForegroundRole(DPalette::WindowText); m_keyWord->setClearButtonEnabled(false); m_singer->setClearButtonEnabled(false); m_keyWord->lineEdit()->setPlaceholderText(tr("Title")); m_singer->lineEdit()->setPlaceholderText(tr("Artist")); m_keyWord->setFixedHeight(36); m_singer->setFixedHeight(36); m_search->setText(tr("Search")); m_search->setFixedHeight(36); DPalette pl = m_search->palette(); pl.setColor(DPalette::ButtonText, QColor("#414D68")); pl.setColor(DPalette::Light, QColor("#E6E6E6")); pl.setColor(DPalette::Dark, QColor("#E3E3E3")); QColor sbcolor("#000000"); sbcolor.setAlphaF(0.08); pl.setColor(DPalette::Shadow, sbcolor); m_search->setPalette(pl); // m_search->setFlat(true); connect(m_search, &DPushButton::clicked, this, &SearchLyricsWidget::searchLyrics); layout->addWidget(m_title); layout->addSpacing(10); layout->addWidget(m_keyWord); layout->addSpacing(10); layout->addWidget(m_singer); layout->addSpacing(20); layout->addWidget(m_search); layout->addSpacing(30); layout->addWidget(m_listWidget); m_listWidget->setFrameShape(QListWidget::NoFrame); m_listWidget->setContentsMargins(0, 0, 0, 0); setLayout(layout); connect(m_listWidget, &DListWidget::clicked, this, &SearchLyricsWidget::mySelection); connect(m_group, static_cast(&QButtonGroup::buttonClicked), [ = ](int id) { mySelectionIndex(id); }); } void SearchLyricsWidget::initConnection() { connect(m_keyWord, &DLineEdit::textChanged, this, &SearchLyricsWidget::slottextChanged); connect(m_singer, &DLineEdit::textChanged, this, &SearchLyricsWidget::slottextChanged); slottextChanged(""); } void SearchLyricsWidget::createList() { for (int i = 0; i < m_lyricList.size(); ++i) { QListWidgetItem *listItem = new QListWidgetItem; listItem->setSizeHint(QSize(330, 64)); m_listWidget->addItem(listItem); DWidget *frame = new DWidget; frame->setFixedSize(330, 64); // DPalette framepl = frame->palette(); //framepl.setColor(DPalette::Window, DPalette::Window); //frame->setPalette(framepl); DLabel *lyricNmae = new DLabel(frame); DLabel *singerName = new DLabel(frame); DLabel *duration = new DLabel(frame); // bool themeFlag = false; // int themeType = MusicSettings::value("base.play.theme").toInt(&themeFlag); // if (!themeFlag) // themeType = 1; int themeType = DGuiApplicationHelper::instance()->themeType(); if (themeType == 1) { DPalette lyricNamepl = lyricNmae->palette(); lyricNamepl.setColor(DPalette::WindowText, QColor("#414D68")); lyricNmae->setPalette(lyricNamepl); lyricNmae->setForegroundRole(DPalette::WindowText); DPalette singerNamepl = singerName->palette(); singerNamepl.setColor(DPalette::WindowText, QColor("#526A7F")); singerName->setPalette(singerNamepl); singerName->setForegroundRole(DPalette::WindowText); duration->setPalette(singerNamepl); duration->setForegroundRole(DPalette::WindowText); } else { DPalette lyricNamepl = lyricNmae->palette(); lyricNamepl.setColor(DPalette::WindowText, QColor("#C0C6D4")); lyricNmae->setPalette(lyricNamepl); lyricNmae->setForegroundRole(DPalette::WindowText); DPalette singerNamepl = singerName->palette(); singerNamepl.setColor(DPalette::WindowText, QColor("#6D7C88")); singerName->setPalette(singerNamepl); singerName->setForegroundRole(DPalette::WindowText); duration->setPalette(singerNamepl); duration->setForegroundRole(DPalette::WindowText); } lyricNmae->setText(m_lyricList[i].lyricsName); QFont font; font.setFamily("SourceHanSansSC"); font.setWeight(QFont::Medium); font.setPixelSize(14); lyricNmae->setFont(font); singerName->setText(m_lyricList[i].singerName); QFont font2; font2.setFamily("SourceHanSansSC"); font2.setWeight(QFont::Medium); font2.setPixelSize(12); singerName->setFont(font2); duration->setText(m_lyricList[i].duration); QFont font1; font1.setFamily("SourceHanSansSC"); font1.setWeight(QFont::Medium); font1.setPixelSize(12); duration->setFont(font1); lyricNmae->move(15, 11); singerName->move(15, 35); duration->move(269, 23); DPalette pl = frame->palette(); pl.setColor(DPalette::Background, QColor(0, 0, 0, 7/*0.03 * 255*/)); frame->setPalette(pl); DCheckBox *checkBox = new DCheckBox(frame); checkBox->setText(""); checkBox->setFixedSize(16, 16); checkBox->move(300, 24); m_group->addButton(checkBox, i); m_listWidget->setItemWidget(listItem, frame); } } void SearchLyricsWidget::searchLyrics() { if (m_singer->text().isEmpty() && m_keyWord->text().isEmpty()) return; m_lyricList.clear(); m_listWidget->clear(); QList buttonList = m_group->buttons(); for (int i = 0; i < buttonList.size(); ++i) m_group->removeButton(buttonList.at(i)); QDir dir(m_path); if (!dir.exists()) return; //查看路径中åŽç¼€ä¸º.lrcæ ¼å¼çš„æ–‡ä»¶ QStringList filters; filters << QString("*.lrc"); dir.setFilter(QDir::Files | QDir::NoSymLinks); //设置类型过滤器,åªä¸ºæ–‡ä»¶æ ¼å¼ dir.setNameFilters(filters); //设置文件å称过滤器,åªä¸ºfiltersæ ¼å¼ //统计lrcæ ¼å¼çš„æ–‡ä»¶ä¸ªæ•° int dir_count = static_cast(dir.count()); if (dir_count <= 0) return; for (int i = 0; i < dir_count; ++i) { MusicLyric lyc; bool right = false; int singerIndex = -1; if (!lyc.getHeadFromFile(m_path + dir[i])) continue; if (m_keyWord->text() != "") { QString ti = lyc.getLineAt(0); if (ti.indexOf(m_keyWord->text()) != -1) { if (m_singer->text() != "") { QString ar; for (int i = 0; i < 5; ++i) { ar = lyc.getLineAt(i); if (ar.indexOf(m_singer->text()) != -1) { right = true; singerIndex = i; } } } else { right = true; } } } else { if (m_singer->text() != "") { QString ar; for (int i = 0; i < 5; ++i) { ar = lyc.getLineAt(i); if (ar.indexOf(m_singer->text()) != -1) { right = true; singerIndex = i; } } } } if (right) { lyric lycr; QString nameLine = lyc.getLineAt(0); if (nameLine.indexOf("[") != -1 && nameLine.indexOf("]") != -1 && nameLine.indexOf("ti") != -1) { QString name = nameLine.split(":").last(); name.chop(2); lycr.lyricsName = name; } else { lycr.lyricsName = nameLine; } if (singerIndex != -1) { QString singerLine = lyc.getLineAt(singerIndex); if (singerLine.indexOf("[") != -1 && singerLine.indexOf("]") != -1 && singerLine.indexOf("ar") != -1) { QString name = singerLine.split(":").last(); name.chop(2); lycr.singerName = name; } else { lycr.singerName = singerLine; } } else { for (int i = 0; i < 5; ++i) { QString singerLine = lyc.getLineAt(i); if (singerLine.indexOf("[ar:") != -1) { QString name = singerLine.split(":").last(); name.chop(2); lycr.singerName = name; } } } lycr.path = m_path + QDir::separator() + dir[i]; bool endTime = true; int lineCount = lyc.getCount() - 1; while (endTime) { QString timeLine = lyc.getLineAt(lineCount); if (timeLine.indexOf("[") == -1 || timeLine.indexOf("]") == -1) { --lineCount; continue; } QString time = timeLine.mid(timeLine.lastIndexOf("[") + 1, timeLine.lastIndexOf("]") - timeLine.lastIndexOf("[") - 1); time = time.left(5); lycr.duration = time; endTime = false; } m_lyricList.push_back(lycr); } } createList(); } void SearchLyricsWidget::mySelection(QModelIndex index) { QString path = m_lyricList[index.row()].path; emit lyricPath(path); } void SearchLyricsWidget::mySelectionIndex(int index) { QString path = m_lyricList[index].path; emit lyricPath(path); } void SearchLyricsWidget::slottextChanged(const QString &str) { Q_UNUSED(str) if (m_keyWord->lineEdit()->text().isEmpty() && m_singer->lineEdit()->text().isEmpty()) { m_search->setEnabled(false); } else { m_search->setEnabled(true); } } deepin-music-6.0.1.54/src/music-player/view/widget/searchlyricswidget.h000775 000000 000000 00000003104 13703317554 026026 0ustar00rootroot000000 000000 #ifndef SEARCHLYRICSWIDGET_H #define SEARCHLYRICSWIDGET_H #include #include #include #include #include #include #include #include #include #include "mediameta.h" DGUI_USE_NAMESPACE DWIDGET_USE_NAMESPACE struct lyric { QString lyricsName; QString singerName; QString duration; QString path; lyric() { lyricsName = "null"; singerName = "null"; duration = "null"; } }; class SearchLyricsWidget : public DFloatingWidget { Q_OBJECT public: SearchLyricsWidget(QString path, QWidget *parent = nullptr); void setSearchDir(QString dir) { m_path = dir; } void setDefault(QString song, QString singer); void setThemeType(int type); public slots: void searchLyrics(); private slots: void mySelection(QModelIndex index); void mySelectionIndex(int index); void slottextChanged(const QString &str); signals: //点击歌è¯åˆ—表item传出歌è¯è·¯å¾„ void lyricPath(QString path); void checkBoxClicked(int index); private: //第一个linedit歌曲å,第二个歌手å void initUI(); void initConnection(); void createList(); DLabel *m_title; DPushButton *m_search; DListWidget *m_listWidget; DLineEdit *m_keyWord; DLineEdit *m_singer; QString m_path; QButtonGroup *m_group; QVector m_lyricList; }; #endif // SEARCHLYRICSWIDGET_H deepin-music-6.0.1.54/src/music-player/view/widget/searchmetaitem.cpp000664 000000 000000 00000005610 13703317554 025456 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "searchmetaitem.h" #include #include #include #include #include class SearchMetaItemPrivate { public: SearchMetaItemPrivate(SearchMetaItem *parent) : q_ptr(parent) {} DLabel *metaTitle = nullptr; DLabel *metaArtist = nullptr; DLabel *metaLength = nullptr; DLabel *checkedBt = nullptr; SearchMetaItem *q_ptr; Q_DECLARE_PUBLIC(SearchMetaItem) }; SearchMetaItem::SearchMetaItem(QWidget *parent) : DFrame(parent), d_ptr(new SearchMetaItemPrivate(this)) { Q_D(SearchMetaItem); setObjectName("SearchMetaItem"); auto layout = new QHBoxLayout(this); layout->setContentsMargins(10, 0, 10, 0); auto interFrame = new DFrame(); interFrame->setObjectName("SearchMetaItemInterFrame"); auto interLayout = new QHBoxLayout(interFrame); interLayout->setMargin(0); auto metaInfoLayout = new QVBoxLayout; metaInfoLayout->setContentsMargins(10, 10, 10, 10); metaInfoLayout->setSpacing(5); d->metaTitle = new DLabel; d->metaTitle->setObjectName("SearchMetaItemTitle"); d->metaArtist = new DLabel; d->metaArtist->setObjectName("SearchMetaItemArtist"); metaInfoLayout->addWidget(d->metaTitle); metaInfoLayout->addWidget(d->metaArtist); d->checkedBt = new DLabel; d->checkedBt->setObjectName("SearchMetaItemCheck"); d->checkedBt->setFixedSize(16, 16); d->metaLength = new DLabel; d->metaLength->setObjectName("SearchMetaItemLength"); interLayout->addLayout(metaInfoLayout); interLayout->addStretch(); interLayout->addWidget(d->checkedBt); interLayout->addWidget(d->metaLength); layout->addWidget(interFrame); } SearchMetaItem::~SearchMetaItem() { } void SearchMetaItem::initUI(const DMusic::SearchMeta &meta) { Q_D(SearchMetaItem); d->metaTitle->setText(meta.name); d->metaArtist->setText(meta.artists.first().name); d->metaLength->setText(DMusic::lengthString(meta.length)); } void SearchMetaItem::setChecked(bool check) { Q_D(SearchMetaItem); d->checkedBt->setProperty("active", check); d->checkedBt->update(); } deepin-music-6.0.1.54/src/music-player/view/widget/searchmetaitem.h000664 000000 000000 00000002461 13703317554 025124 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include "../../core/playlist.h" DWIDGET_USE_NAMESPACE class SearchMetaItemPrivate; class SearchMetaItem : public DFrame { Q_OBJECT public: explicit SearchMetaItem(QWidget *parent = Q_NULLPTR); ~SearchMetaItem(); void initUI(const DMusic::SearchMeta &meta); void setChecked(bool check); signals: public slots: private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), SearchMetaItem) }; deepin-music-6.0.1.54/src/music-player/view/widget/searchmetalist.cpp000664 000000 000000 00000002501 13703317554 025467 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "searchmetalist.h" class SearchMetaListPrivate { public: SearchMetaListPrivate(SearchMetaList *parent) : q_ptr(parent) {} SearchMetaList *q_ptr; Q_DECLARE_PUBLIC(SearchMetaList) }; SearchMetaList::SearchMetaList(QWidget *parent) : DListWidget(parent), d_ptr(new SearchMetaListPrivate(this)) { setObjectName("SearchMetaList"); setSelectionMode(QListView::SingleSelection); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); } SearchMetaList::~SearchMetaList() { } deepin-music-6.0.1.54/src/music-player/view/widget/searchmetalist.h000664 000000 000000 00000002255 13703317554 025142 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include DWIDGET_USE_NAMESPACE class SearchMetaListPrivate; class SearchMetaList : public DListWidget { Q_OBJECT public: explicit SearchMetaList(QWidget *parent = Q_NULLPTR); ~SearchMetaList(); signals: public slots: private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), SearchMetaList) }; deepin-music-6.0.1.54/src/music-player/view/widget/searchresult.cpp000664 000000 000000 00000031413 13703317554 025167 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "searchresult.h" #include "musicsearchlistview.h" #include #include #include #include #include #include "pushbutton.h" SearchResult::SearchResult(QWidget *parent) : DBlurEffectWidget(parent) { QFont labelFont("SourceHanSansSC"); labelFont.setPointSize(DFontSizeManager::T9); QPalette labelPalette; labelPalette.setColor(QPalette::WindowText, QColor("#414D68 ")); //设置圆角 setBlurRectXRadius(18); setBlurRectYRadius(18); setRadius(30); setBlurEnabled(true); setMode(DBlurEffectWidget::GaussianBlur); vlayout1 = new QVBoxLayout(); vlayout2 = new QVBoxLayout(); vlayout3 = new QVBoxLayout(); vlayout = new QVBoxLayout(); vlayout->setContentsMargins(0, 0, 0, 0); vlayout1->setSpacing(2); vlayout2->setSpacing(2); vlayout3->setSpacing(2); vlayout->setSpacing(0); setLayout(vlayout); //éŸ³ä¹ m_MusicLabel = new DLabel(tr("Music"), this); m_MusicLabel->setFont(labelFont); m_MusicLabel->setPalette(labelPalette); m_MusicLabel->setContentsMargins(32, 8, 0, 4); m_MusicLabel->adjustSize(); m_MusicView = new MusicSearchListview(this); m_MusicView->setObjectName("SearchMusicView"); m_MusicView->setMinimumWidth(380); //分割线1 s_ArtistLine = new DHorizontalLine; s_ArtistLine->setFixedSize(380, 20); s_ArtistLine->setContentsMargins(-32, 0, 0, 0); s_ArtistLine->setLineWidth(2); //演唱者 m_ArtistLabel = new DLabel(tr("Artists"), this); m_ArtistLabel->setFont(labelFont); m_ArtistLabel->setPalette(labelPalette); m_ArtistLabel->setContentsMargins(32, 0, 0, 8); m_ArtistLabel->adjustSize(); m_ArtistView = new MusicSearchListview(this); m_ArtistView->setObjectName("SearchArtistView"); m_ArtistView->setMinimumWidth(380); //分割线2 s_AblumLine = new DHorizontalLine; s_AblumLine->setFixedSize(380, 20); s_AblumLine->setLineWidth(2); //专辑 m_AblumLabel = new DLabel(tr("Albums"), this); m_AblumLabel->setFont(labelFont); m_AblumLabel->setPalette(labelPalette); m_AblumLabel->setContentsMargins(32, 0, 0, 8); m_AblumLabel->adjustSize(); m_AlbumView = new MusicSearchListview(this); m_AlbumView->setObjectName("SearchAlbumView"); m_AlbumView->setMinimumWidth(380); vlayout1->addWidget(m_MusicLabel); vlayout1->addWidget(m_MusicView); vlayout2->addWidget(m_ArtistLabel); vlayout2->addWidget(m_ArtistView); vlayout3->addWidget(m_AblumLabel); vlayout3->addWidget(m_AlbumView); vlayout->addLayout(vlayout1); vlayout->addWidget(s_ArtistLine); vlayout->addLayout(vlayout2); vlayout->addWidget(s_AblumLine); vlayout->addLayout(vlayout3); int themeType = DGuiApplicationHelper::instance()->themeType(); slotTheme(themeType); connect(m_MusicView, &MusicSearchListview::clicked, this, &SearchResult::itemClicked); connect(m_ArtistView, &MusicSearchListview::clicked, this, &SearchResult::itemClicked); connect(m_AlbumView, &MusicSearchListview::clicked, this, &SearchResult::itemClicked); connect(m_MusicView, &MusicSearchListview::sigSearchClear, this, &SearchResult::clearKeyState); connect(m_ArtistView, &MusicSearchListview::sigSearchClear, this, &SearchResult::clearKeyState); connect(m_AlbumView, &MusicSearchListview::sigSearchClear, this, &SearchResult::clearKeyState); } void SearchResult::autoResize() { int rowCount = m_MusicView->rowCount(); int musicHeight = 0; int artistHeight = 0; int ablumHeight = 0; m_MusicView->setFixedHeight(rowCount * 34); m_MusicView->adjustSize(); m_MusicView->raise(); musicHeight = (rowCount == 0 ? 0 : (rowCount + 1) * 34); rowCount = m_ArtistView->rowCount(); m_ArtistView->setFixedHeight(rowCount * 34); m_ArtistView->adjustSize(); m_ArtistView->raise(); artistHeight = (rowCount == 0 ? 0 : (rowCount + 1) * 34); rowCount = m_AlbumView->rowCount(); m_AlbumView->setFixedHeight(rowCount * 34); m_AlbumView->adjustSize(); m_AlbumView->raise(); ablumHeight = (rowCount == 0 ? 0 : (rowCount + 1) * 34); if (m_MusicView->rowCount() == 0) { m_MusicLabel->hide(); m_MusicView->hide(); s_ArtistLine->hide(); s_AblumLine->hide(); } else { m_MusicLabel->show(); m_MusicView->show(); s_ArtistLine->show(); s_AblumLine->show(); } if (m_ArtistView->rowCount() == 0) { m_ArtistLabel->hide(); m_ArtistView->hide(); s_ArtistLine->hide(); } else { m_ArtistLabel->show(); m_ArtistView->show(); s_AblumLine->show(); } if (m_AlbumView->rowCount() == 0) { m_AblumLabel->hide(); m_AlbumView->hide(); s_AblumLine->hide(); } else { m_AblumLabel->show(); m_AlbumView->show(); } if (m_MusicView->rowCount() == 0 && m_ArtistView->rowCount() == 0 && m_AlbumView->rowCount() == 0) { hide(); } setFixedHeight(musicHeight + artistHeight + ablumHeight + 10 ); } void SearchResult::setSearchString(const QString &str) { m_MusicView->setProperty("searchString", str); } void SearchResult::selectUp() { if (m_Count == 0) { return; } if (m_CurrentIndex < 0) { return; } m_CurrentIndex --; if (m_CurrentIndex < m_MusicView->rowCount()) { m_MusicView->setCurrentIndexInt(m_CurrentIndex); m_ArtistView->setCurrentIndexInt(-1); m_AlbumView->setCurrentIndexInt(-1); } else if (m_CurrentIndex >= m_MusicView->rowCount() - 1 && m_CurrentIndex < (m_MusicView->rowCount() + m_ArtistView->rowCount())) { m_ArtistView->setCurrentIndexInt(m_CurrentIndex - m_MusicView->rowCount()); m_MusicView->setCurrentIndexInt(-1); m_AlbumView->setCurrentIndexInt(-1); } else { m_AlbumView->setCurrentIndexInt(m_CurrentIndex - m_MusicView->rowCount() - m_ArtistView->rowCount()); m_MusicView->setCurrentIndexInt(-1); m_ArtistView->setCurrentIndexInt(-1); } m_MusicView->update(); m_ArtistView->update(); m_AlbumView->update(); getSearchStr(); } void SearchResult::selectDown() { if (m_Count == 0) { return; } if (m_CurrentIndex >= m_Count - 1) { return; } m_CurrentIndex ++; if (m_CurrentIndex < m_MusicView->rowCount()) { m_MusicView->setCurrentIndexInt(m_CurrentIndex); m_ArtistView->setCurrentIndexInt(-1); m_AlbumView->setCurrentIndexInt(-1); } else if (m_CurrentIndex >= m_MusicView->rowCount() - 1 && m_CurrentIndex < (m_MusicView->rowCount() + m_ArtistView->rowCount())) { m_ArtistView->setCurrentIndexInt(m_CurrentIndex - m_MusicView->rowCount()); m_MusicView->setCurrentIndexInt(-1); m_AlbumView->setCurrentIndexInt(-1); } else { m_AlbumView->setCurrentIndexInt(m_CurrentIndex - m_MusicView->rowCount() - m_ArtistView->rowCount()); m_MusicView->setCurrentIndexInt(-1); m_ArtistView->setCurrentIndexInt(-1); m_MusicView->clearSelection(); m_ArtistView->clearSelection(); } m_MusicView->update(); m_ArtistView->update(); m_AlbumView->update(); getSearchStr(); } QString SearchResult::currentStr() { QString str; return str; } void SearchResult::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // å锯齿; if (m_Theme == 2) { painter.setBrush(QColor("#252525")); painter.setPen(QPen(QColor("#454545"), 1)); } else { painter.setBrush(QColor("#f8f8f8")); painter.setPen(QPen(QColor("#E3E3E3"), 1)); } QRect rect = this->rect(); rect.setWidth(rect.width()); rect.setHeight(rect.height()); painter.drawRoundedRect(rect, 18, 18); QWidget::paintEvent(event); } void SearchResult::leaveEvent(QEvent *event) { m_MusicView->setCurrentIndexInt(-1); DBlurEffectWidget::leaveEvent(event); } void SearchResult::onReturnPressed() { // auto hashlist = m_MusicModel->property("hashlist").toStringList(); // auto selectedRow = m_MusicView->currentIndex().row(); // Q_EMIT locateMusic(hashlist.value(selectedRow)); } void SearchResult::selectPlaylist(PlaylistPtr playlistPtr) { playlist = playlistPtr; } void SearchResult::onSearchCand(QString text, PlaylistPtr playlistPtr) { m_CurrentIndex = -1; if (playlistPtr->id() == MusicCandListID) { m_MusicView->onMusiclistChanged(text, playlistPtr); } if (playlistPtr->id() == AlbumCandListID) { m_AlbumView->onMusiclistChanged(text, playlistPtr); } if (playlistPtr->id() == ArtistCandListID) { m_ArtistView->onMusiclistChanged(text, playlistPtr); } m_MusicView->setCurrentIndexInt(-1); m_AlbumView->setCurrentIndexInt(-1); m_ArtistView->setCurrentIndexInt(-1); m_Count = m_MusicView->rowCount() + m_AlbumView->rowCount() + m_ArtistView->rowCount(); autoResize(); } void SearchResult::slotTheme(int type) { QPalette labelPalette; if (type == 2) { labelPalette.setColor(QPalette::Text, QColor("#FFF0F5 ")); } else { labelPalette.setColor(QPalette::Text, QColor("#414D68 ")); } m_Theme = type; m_MusicLabel->setPalette(labelPalette); m_ArtistLabel->setPalette(labelPalette); m_AblumLabel->setPalette(labelPalette); m_MusicView->setThemeType(type); m_AlbumView->setThemeType(type); m_ArtistView->setThemeType(type); } void SearchResult::itemClicked(QModelIndex index) { PlaylistPtr playList = dynamic_cast(index.model()->parent())->playlist(); QString currentId = playList->id(); int row = index.row(); qDebug() << "鼠标选中行:" << row; if (currentId == MusicCandListID) { Q_EMIT this->searchText2(MusicResultListID, playList->allmusic().at(row)->title); } if (currentId == AlbumCandListID) { Q_EMIT this->searchText2(AlbumResultListID, playList->playMusicTypePtrList().at(row)->name); } if (currentId == ArtistCandListID) { Q_EMIT this->searchText2(ArtistResultListID, playList->playMusicTypePtrList().at(row)->name); } } //键盘上下选择结果 void SearchResult::getSearchStr() { if (m_CurrentIndex < 0) { return; } QString text; QString id; if (m_CurrentIndex < m_MusicView->rowCount()) { text = m_MusicView->playlist()->allmusic().at(m_CurrentIndex)->title; qDebug() << "当å‰é€‰ä¸­æ­Œæ›²:" << text; id = MusicResultListID; } else if (m_CurrentIndex >= m_MusicView->rowCount() - 1 && m_CurrentIndex < (m_MusicView->rowCount() + m_ArtistView->rowCount())) { text = m_ArtistView->playlist()->playMusicTypePtrList().at(m_CurrentIndex - m_MusicView->rowCount())->name; qDebug() << "当å‰é€‰ä¸­æ­Œæ‰‹:" << text; id = ArtistResultListID; } else if (m_CurrentIndex >= m_MusicView->rowCount() + m_ArtistView->rowCount() - 1 && m_CurrentIndex < (m_MusicView->rowCount() + m_ArtistView->rowCount() + m_AlbumView->rowCount())) { text = m_AlbumView->playlist()->playMusicTypePtrList().at(m_CurrentIndex - m_MusicView->rowCount() - m_ArtistView->rowCount())->name; qDebug() << "当å‰é€‰ä¸­ä¸“辑:" << text; id = AlbumResultListID; } else { Q_EMIT this->searchText3("", ""); return; } Q_EMIT this->searchText3(id, text); } void SearchResult::clearKeyState() { m_MusicView->setCurrentIndexInt(-1); m_AlbumView->setCurrentIndexInt(-1); m_ArtistView->setCurrentIndexInt(-1); m_MusicView->update(); m_ArtistView->update(); m_AlbumView->update(); } deepin-music-6.0.1.54/src/music-player/view/widget/searchresult.h000664 000000 000000 00000006100 13703317554 024627 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef SEARCHRESULTLIST_H #define SEARCHRESULTLIST_H #include DWIDGET_USE_NAMESPACE #include #include #include #include #include #include #include #include "../core/playlist.h" class PushButton; class QStringListModel; class MusicSearchListview; class SearchResult : public DBlurEffectWidget { Q_OBJECT public: explicit SearchResult(QWidget *parent = Q_NULLPTR); void autoResize(); void setSearchString(const QString &str); void selectUp(); void selectDown(); QString currentStr(); public: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; virtual void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; signals: void locateMusic(const QString &hash); void searchText(const QString id, const QString &text); void searchText2(const QString id, const QString &text); void searchText3(const QString id, const QString &text); public slots: void onReturnPressed(); void selectPlaylist(PlaylistPtr playlistPtr); void onSearchCand(QString text, PlaylistPtr playlistPtr); void slotTheme(int type); void itemClicked(QModelIndex); void getSearchStr(); void clearKeyState(); private: DLabel *m_MusicLabel; DLabel *m_ArtistLabel; DLabel *m_AblumLabel; DHorizontalLine *s_ArtistLine; DHorizontalLine *s_AblumLine; PlaylistPtr playlist = nullptr; MusicSearchListview *m_MusicView = nullptr; MusicSearchListview *m_ArtistView = nullptr; MusicSearchListview *m_AlbumView = nullptr; int m_CurrentIndex = -1; int m_Count = 0; int m_Theme = 0; QVBoxLayout *vlayout = nullptr; QVBoxLayout *vlayout1 = nullptr; QVBoxLayout *vlayout2 = nullptr; QVBoxLayout *vlayout3 = nullptr; }; extern const QString AlbumMusicListID; extern const QString ArtistMusicListID; extern const QString AllMusicListID; extern const QString FavMusicListID; extern const QString SearchMusicListID; extern const QString PlayMusicListID; extern const QString AlbumCandListID; extern const QString MusicCandListID; extern const QString ArtistCandListID; #endif // SEARCHRESULTLIST_H deepin-music-6.0.1.54/src/music-player/view/widget/settingsdialog.cpp000664 000000 000000 00000003440 13703317554 025502 0ustar00rootroot000000 000000 /* * Copyright (C) 2017 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include void GenerateSettingTranslate() { auto base_close_quit_action_text0 = QObject::tr("Minimize to system tray"); auto base_close_quit_action_text1 = QObject::tr("Exit Music"); auto base_play_auto_play_text = QObject::tr("Autoplay"); auto base_play_fade_in_out_text = QObject::tr("Enable fade in/out"); auto base_play_remember_progress_text = QObject::tr("Remember playback position"); auto group_base_close_name = QObject::tr("Close Main Window"); auto group_base_name = QObject::tr("Basic"); auto group_base_play_name = QObject::tr("Play"); auto group_shortcuts_name = QObject::tr("Shortcuts"); auto reset_button_name = QObject::tr("Restore Defaults"); auto shortcuts_all_next_name = QObject::tr("Next"); auto shortcuts_all_play_pause_name = QObject::tr("Play/Pause"); auto shortcuts_all_previous_name = QObject::tr("Previous"); auto shortcuts_all_volume_down_name = QObject::tr("Volume down"); auto shortcuts_all_volume_up_name = QObject::tr("Volume up"); } deepin-music-6.0.1.54/src/music-player/view/widget/slider.cpp000664 000000 000000 00000010055 13703317554 023744 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "slider.h" #include #include #include class SliderPrivate { public: SliderPrivate(Slider *parent) : q_ptr(parent) {} QVariantAnimation *currentAnimation = Q_NULLPTR; QString themeTemplate; QString updateQSS(qreal value); Slider *q_ptr; Q_DECLARE_PUBLIC(Slider) }; Slider::Slider(Qt::Orientation orientation, QWidget *parent) : DSlider(orientation, parent), dd_ptr(new SliderPrivate(this)) { Q_D(Slider); connect(this, &Slider::hoverd, this, [ = ](bool hovered) { if (d->currentAnimation) { d->currentAnimation->stop(); d->currentAnimation->deleteLater(); d->currentAnimation = Q_NULLPTR; } d->currentAnimation = new QVariantAnimation; d->currentAnimation->setStartValue(hovered ? 0.0 : 1.0); d->currentAnimation->setEndValue(hovered ? 1.0 : 0.0); d->currentAnimation->setDuration(150); connect(d->currentAnimation, &QVariantAnimation::valueChanged, this, [ = ](const QVariant & value) { //setStyleSheet(d->updateQSS(value.toReal())); d->updateQSS(value.toReal()); }); d->currentAnimation->start(); }); } Slider::~Slider() { } void Slider::resizeEvent(QResizeEvent *event) { Q_D(Slider); DSlider::resizeEvent(event); if (!d->currentAnimation) { //setStyleSheet(d->updateQSS(0)); d->updateQSS(0); } } void Slider::mouseReleaseEvent(QMouseEvent *event) { this->blockSignals(false); DSlider::mouseReleaseEvent(event); Q_EMIT valueAccpet(value()); } void Slider::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton || event->button() == Qt::MiddleButton || event->button() == Qt::RightButton) { if (orientation() == Qt::Vertical) { setValue(minimum() + ((maximum() - minimum()) * (height() - event->y())) / height()) ; } else { setValue(minimum() + ((maximum() - minimum()) * (event->x())) / (width())); } } this->blockSignals(true); } void Slider::mouseMoveEvent(QMouseEvent *event) { auto valueRange = this->maximum() - this->minimum(); auto viewRange = this->width(); if (0 == viewRange) { return; } auto value = (event->x() - this->x()) * valueRange / this->width(); setValue(value); } void Slider::enterEvent(QEvent *event) { setProperty("hover", true); Q_EMIT hoverd(true); DSlider::enterEvent(event); } void Slider::leaveEvent(QEvent *event) { setProperty("hover", false); Q_EMIT hoverd(false); DSlider::leaveEvent(event); } void Slider::wheelEvent(QWheelEvent *e) { e->accept(); } QString SliderPrivate::updateQSS(qreal value) { Q_Q(Slider); auto delta = 0.00001; qreal h = q->height(); qreal realH = h * (1.0 + value) / 2.0 ; Q_EMIT q->realHeightChanged(realH); auto v2 = (h - realH) / h; auto v1 = v2 - delta; v1 = (v1 < 0) ? 0 : v1; auto v4 = (h - 1.0) / h; auto v3 = v4 - delta; auto v6 = (h - realH + 1.0) / h; auto v5 = v6 - delta; auto v7 = v4 - delta; // qDebug() << themeTemplate.arg(v1).arg(v2).arg(v3).arg(v4).arg(v5).arg(v6).arg(v7); return themeTemplate.arg(v1).arg(v2).arg(v3).arg(v4).arg(v5).arg(v6).arg(v7); } deepin-music-6.0.1.54/src/music-player/view/widget/slider.h000664 000000 000000 00000003221 13703317554 023406 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include DWIDGET_USE_NAMESPACE class SliderPrivate; class Slider : public DSlider { Q_OBJECT public: explicit Slider(Qt::Orientation orientation, QWidget *parent = Q_NULLPTR); ~Slider() Q_DECL_OVERRIDE; Q_SIGNALS: void hoverd(bool); void realHeightChanged(qreal); void valueAccpet(int value); protected: void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void enterEvent(QEvent *event) Q_DECL_OVERRIDE; void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE; private: QScopedPointer dd_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(dd_ptr), Slider) }; deepin-music-6.0.1.54/src/music-player/view/widget/soundvolume.cpp000664 000000 000000 00000016432 13703317554 025047 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "soundvolume.h" #include #include #include #include #include #include #include #include #include #include #include "core/player.h" using namespace Dtk::Widget; class SoundVolumePrivate { public: SoundVolumePrivate(SoundVolume *parent) : q_ptr(parent) {} SoundVolume *q_ptr; DLabel *lblPersent; DSlider *volSlider = nullptr; QBrush background; QColor borderColor = QColor(0, 0, 0, 255 * 2 / 10); int radius = 20; bool mouseIn = false; int sThemeType = 0; Q_DECLARE_PUBLIC(SoundVolume) }; SoundVolume::SoundVolume(QWidget *parent) : QWidget(parent), d_ptr(new SoundVolumePrivate(this)) { Q_D(SoundVolume); setObjectName("SoundVolume"); setProperty("_dm_keep_on_click", true); setFixedSize(62, 201); auto layout = new QVBoxLayout(this); layout->setContentsMargins(2, 16, 0, 31); layout->setSpacing(0); d->lblPersent = new DLabel(this); auto titleFont = d->lblPersent->font(); titleFont.setFamily("SourceHanSansSC"); titleFont.setWeight(QFont::Medium); titleFont.setPixelSize(14); d->lblPersent->setFont(titleFont); d->lblPersent->setText("100%"); d->volSlider = new DSlider(Qt::Vertical); d->volSlider->setMinimum(0); d->volSlider->setMaximum(100); d->volSlider->slider()->setSingleStep(Player::VolumeStep); d->volSlider->setValue(50); d->volSlider->slider()->setFixedHeight(126); d->volSlider->setFixedWidth(24); d->volSlider->setIconSize(QSize(15, 15)); d->volSlider->setMouseWheelEnabled(true); // d->volSlider->setRightIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/volume_add_normal.svg")); // d->volSlider->setLeftIcon(DHiDPIHelper::loadNxPixmap(":/mpimage/light/normal/volume_lessen_normal.svg")); layout->addStretch(); layout->addWidget(d->lblPersent, 0, Qt::AlignTop | Qt::AlignHCenter); layout->addWidget(d->volSlider, 1, Qt::AlignCenter); layout->addStretch(); setFixedSize(62, 201); auto *bodyShadow = new QGraphicsDropShadowEffect; bodyShadow->setBlurRadius(10.0); bodyShadow->setColor(QColor(0, 0, 0, 255 / 10)); bodyShadow->setOffset(0, 2.0); this->setGraphicsEffect(bodyShadow); connect(d->volSlider, &DSlider::valueChanged, this, &SoundVolume::volumeChanged); } SoundVolume::~SoundVolume() { } int SoundVolume::volume() const { Q_D(const SoundVolume); return d->volSlider->value(); } QBrush SoundVolume::background() const { Q_D(const SoundVolume); return d->background; } int SoundVolume::radius() const { Q_D(const SoundVolume); return d->radius; } QColor SoundVolume::borderColor() const { Q_D(const SoundVolume); return d->borderColor; } void SoundVolume::setBackground(QBrush background) { Q_D(SoundVolume); d->background = background; } void SoundVolume::setRadius(int radius) { Q_D(SoundVolume); d->radius = radius; } void SoundVolume::setBorderColor(QColor borderColor) { Q_D(SoundVolume); d->borderColor = borderColor; } void SoundVolume::deleyHide() { Q_D(SoundVolume); d->mouseIn = false; DUtil::TimerSingleShot(1000, [this]() { Q_D(SoundVolume); if (!d->mouseIn) { hide(); } }); } void SoundVolume::onVolumeChanged(int volume) { Q_D(SoundVolume); d->lblPersent->setText(QString::number(volume) + QString("%")); d->volSlider->blockSignals(true); d->volSlider->setValue(volume); d->volSlider->blockSignals(false); } void SoundVolume::showEvent(QShowEvent *event) { Q_D(SoundVolume); d->mouseIn = true; QWidget::showEvent(event); } void SoundVolume::enterEvent(QEvent *event) { Q_D(SoundVolume); d->mouseIn = true; QWidget::enterEvent(event); } void SoundVolume::leaveEvent(QEvent *event) { Q_D(SoundVolume); d->mouseIn = false; deleyHide(); QWidget::leaveEvent(event); } void SoundVolume::wheelEvent(QWheelEvent *event) { QWidget::wheelEvent(event); /* Q_D(SoundVolume); if (event->angleDelta().y() > 0) { d->volSlider->setValue(d->volSlider->value() + 5); } else { d->volSlider->setValue(d->volSlider->value() - 5); } */ } void SoundVolume::paintEvent(QPaintEvent * /*event*/) { Q_D(const SoundVolume); QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing); QPainterPath path; auto palette = this->palette(); auto penWidthf = 1.0; auto background = palette.background(); auto borderColor = d->borderColor; const qreal radius = d->radius;; const qreal triHeight = 12; const qreal triWidth = 16; const qreal height = this->height() - triHeight; const qreal width = this->width(); QRectF topRightRect(QPointF(0, 0), QPointF(2 * radius, 2 * radius)); QRectF bottomRightRect(QPointF(0, height - 2 * radius), QPointF(2 * radius, height)); QRectF topLeftRect(QPointF(width, 0), QPointF(width - 2 * radius, 2 * radius)); QRectF bottomLeftRect(QPointF(width, height), QPointF(width - 2 * radius, height - 2 * radius)); path.moveTo(radius, 0.0); path.lineTo(width - radius, 0.0); path.arcTo(topLeftRect, 90.0, 90.0); path.lineTo(width, height - radius); path.arcTo(bottomLeftRect, 180.0, -90.0); path.lineTo(width / 2 + triWidth / 2, height); path.lineTo(width / 2, height + triHeight); path.lineTo(width / 2 - triWidth / 2, height); path.lineTo(radius, height); path.arcTo(bottomRightRect, 270.0, -90.0); path.lineTo(0.0, radius); path.arcTo(topRightRect, 180.0, -90.0); path.lineTo(radius, 0.0); /* FIXME: light: white painter.fillPath(path, QColor(49, 49, 49)); FIXME: light: QColor(0, 0, 0, 51) QPen pen(QColor(0, 0, 0, 0.1 * 255)); */ if (d->sThemeType == 2) { painter.fillPath(path, QColor(43, 43, 43)); } else { painter.fillPath(path, background); } QPen pen(borderColor); pen.setWidth(penWidthf); //painter.strokePath(path, pen); } void SoundVolume::slotTheme(int type) { Q_D(SoundVolume); d->sThemeType = type; QString rStr; if (type == 1) { rStr = "light"; } else { rStr = "dark"; } // d->volSlider->setRightIcon(DHiDPIHelper::loadNxPixmap(QString(":/mpimage/%1/normal/volume_add_normal.svg").arg(rStr))); } deepin-music-6.0.1.54/src/music-player/view/widget/soundvolume.h000664 000000 000000 00000003763 13703317554 024517 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include class SoundVolumePrivate; class SoundVolume : public QWidget { Q_OBJECT Q_PROPERTY(int radius READ radius WRITE setRadius) Q_PROPERTY(QBrush background READ background WRITE setBackground) Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor) public: explicit SoundVolume(QWidget *parent = nullptr); ~SoundVolume() override; int volume() const; int radius() const; QColor borderColor() const; QBrush background() const; signals: void volumeChanged(int volume); public slots: void deleyHide(); void onVolumeChanged(int volume); void setBackground(QBrush background); void setRadius(int radius); void setBorderColor(QColor borderColor); void slotTheme(int type); protected: virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE; virtual void enterEvent(QEvent *event) Q_DECL_OVERRIDE; virtual void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; virtual void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE; virtual void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), SoundVolume) }; deepin-music-6.0.1.54/src/music-player/view/widget/titlebarwidget.cpp000775 000000 000000 00000011465 13703317554 025505 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "titlebarwidget.h" #include #include #include #include #include #include #include #include #include #include #include "searchedit.h" DWIDGET_USE_NAMESPACE class TitlebarWidgetPrivate { public: TitlebarWidgetPrivate(TitlebarWidget *parent) : q_ptr(parent) {} void fixSearchPosition(); SearchEdit *search = nullptr; TitlebarWidget *q_ptr; Q_DECLARE_PUBLIC(TitlebarWidget) }; TitlebarWidget::TitlebarWidget(QWidget *parent) : DWidget(parent), d_ptr(new TitlebarWidgetPrivate(this)) { Q_D(TitlebarWidget); setFocusPolicy(Qt::NoFocus); setObjectName("TitlebarWidget"); auto layout = new QHBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); //auto leftWidget = new DWidget; // leftWidget->setObjectName("TitleLeft"); // leftWidget->setFixedWidth(100); //auto leftLayout = new QHBoxLayout(leftWidget); //leftLayout->setSpacing(10); //leftLayout->setMargin(0); //auto iconLabel = new DLabel; //iconLabel->setObjectName("TitleIcon"); //iconLabel->setFixedSize(32, 32); //leftLayout->addWidget(iconLabel, 0, Qt::AlignCenter); //leftLayout->addStretch(); d->search = new SearchEdit(this); d->search->setObjectName("TitleSearch"); // d->search->setFixedSize(354, 40); d->search->setFixedWidth(354); d->search->setPlaceHolder(tr("Search")); d->search->clear(); //auto rightWidget = new DWidget; // rightWidget->setObjectName("TitleLeft"); //rightWidget->setFixedWidth(1); //layout->addWidget(leftWidget, 0, Qt::AlignCenter); //layout->addStretch(); layout->addWidget(d->search, Qt::AlignCenter); setLayout(layout); //layout->addStretch(); //layout->addWidget(rightWidget, 0, Qt::AlignCenter); connect(d->search, &SearchEdit::locateMusic, this, &TitlebarWidget::locateMusicInAllMusiclist); connect(d->search, &SearchEdit::searchText, this, &TitlebarWidget::searchText); connect(d->search, &SearchEdit::searchCand, this, &TitlebarWidget::searchCand); // connect(d->search, &SearchEdit::searchAborted, this, &TitlebarWidget::searchExited); connect(d->search, &SearchEdit::searchAborted, this, &TitlebarWidget::onSearchAborted); } TitlebarWidget::~TitlebarWidget() { } void TitlebarWidget::exitSearch() { //Q_D(TitlebarWidget); clearSearch(); } void TitlebarWidget::clearSearch() { Q_D(TitlebarWidget); d->search->clear(); auto edit = d->search->findChild("Edit"); if (edit) { QApplication::postEvent(edit, new QFocusEvent(QEvent::FocusOut, Qt::MouseFocusReason)); } } void TitlebarWidget::setSearchEnable(bool enable) { Q_D(TitlebarWidget); d->search->setEnabled(enable); } void TitlebarWidget::setResultWidget(SearchResult *r) { Q_D(TitlebarWidget); d->search->setResultWidget(r); } void TitlebarWidget::setViewname(const QString &viewname) { Q_D(TitlebarWidget); d->search->setProperty("viewname", viewname); } void TitlebarWidget::setEditStatus() { Q_D(TitlebarWidget); d->search->lineEdit()->setFocus(); } void TitlebarWidget::selectPlaylist(PlaylistPtr playlistPtr) { Q_D(TitlebarWidget); if (playlistPtr != d->search->curPlaylistPtr()) { // d->search->selectPlaylist(playlistPtr); // d->search->clear(); d->search->clearEdit(); } } void TitlebarWidget::onSearchAborted() { Q_D(TitlebarWidget); if (d->search->text().size() == 0) { emit searchExited(); } } void TitlebarWidget::resizeEvent(QResizeEvent *event) { // Q_D(TitlebarWidget); DWidget::resizeEvent(event); } void TitlebarWidgetPrivate::fixSearchPosition() { //Q_Q(TitlebarWidget); //auto fixSize = QPoint(search->width() / 2, search->height() / 2); // auto fixPos = q->geometry().center() - fixSize; // search->setGeometry(fixPos.x(), fixPos.y(), // search->width(), search->height()); //qDebug() << fixPos << search->size() << search->parent(); } deepin-music-6.0.1.54/src/music-player/view/widget/titlebarwidget.h000775 000000 000000 00000003373 13703317554 025151 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include "../core/playlist.h" DWIDGET_USE_NAMESPACE class SearchResult; class TitlebarWidgetPrivate; class TitlebarWidget : public DWidget { Q_OBJECT public: explicit TitlebarWidget(QWidget *parent = Q_NULLPTR); ~TitlebarWidget() override; void exitSearch(); void clearSearch(); void setSearchEnable(bool enable = true); void setResultWidget(SearchResult *); void setViewname(const QString &viewname); void setEditStatus(); public slots: void selectPlaylist(PlaylistPtr playlistPtr); void onSearchAborted(); signals: void searchExited(); void searchText(const QString &id, const QString &text); void searchCand(const QString &text);//查询候选 void locateMusicInAllMusiclist(const QString &hash); protected: virtual void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), TitlebarWidget) }; deepin-music-6.0.1.54/src/music-player/view/widget/tooltips.cpp000664 000000 000000 00000024456 13703317554 024351 0ustar00rootroot000000 000000 /* * (c) 2017, Deepin Technology Co., Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * is provided AS IS, WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, and * NON-INFRINGEMENT. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * In addition, as a special exception, the copyright holders give * permission to link the code of portions of this program with the * OpenSSL library under certain conditions as described in each * individual source file, and distribute linked combinations * including the two. * You must obey the GNU General Public License in all respects * for all of the code used other than OpenSSL. If you modify * file(s) with this exception, you may extend this exception to your * version of the file(s), but you are not obligated to do so. If you * do not wish to do so, delete this exception statement from your * version. If you delete this exception statement from all source * files in the program, then also delete it here. */ #include "tooltips.h" #include #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class ToolTipsPrivate { public: ToolTipsPrivate(ToolTips *parent) : q_ptr(parent) {} void setBackgroundImage(const QPixmap &srcPixmap); QBrush background; int radius = 8; int shadowWidth = 20; QMargins shadowMargins = QMargins(20, 20, 20, 20); QColor borderColor = QColor(0, 0, 0, 51/*0.2 * 255*/); DLabel *textLable = nullptr; QFrame *m_interFrame = nullptr; ToolTips *q_ptr; Q_DECLARE_PUBLIC(ToolTips) }; ToolTips::ToolTips(const QString &text, QWidget *parent) : QFrame(parent), d_ptr(new ToolTipsPrivate(this)) { DThemeManager::instance()->registerWidget(this); Q_D(ToolTips); setAttribute(Qt::WA_DeleteOnClose); // setWindowFlags(Qt::ToolTip | Qt::CustomizeWindowHint); setAttribute(Qt::WA_TranslucentBackground); // setMaximumWidth(_fontMinWidth); setObjectName("ToolTips"); setContentsMargins(0, 0, 0, 0); auto layout = new QHBoxLayout(this); layout->setContentsMargins(7, 4, 7, 4); layout->setSpacing(0); d->m_interFrame = new QFrame(this); d->m_interFrame->setContentsMargins(0, 0, 0, 0); auto interlayout = new QHBoxLayout(d->m_interFrame); interlayout->setContentsMargins(0, 0, 0, 0); interlayout->setSpacing(5); // auto iconLabel = new QLabel; // iconLabel->setObjectName("TipIcon"); // iconLabel->setFixedSize(icon.size()); // if (icon.isNull()) { // iconLabel->hide(); // } else { // iconLabel->setPixmap(icon); // } d->textLable = new DLabel(text); d->textLable->setObjectName("TipText"); d->textLable->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); // d->textLable->setMaximumWidth(this->width()); d->textLable->setWordWrap(false); DFontSizeManager::instance()->bind(d->textLable, DFontSizeManager::T8); d->textLable->setForegroundRole(DPalette::ToolTipText); // DPalette pa_name = DApplicationHelper::instance()->palette(d->textLable); // pa_name.setBrush(DPalette::Text, pa_name.color(DPalette::ToolTipText)); // pa_name.setBrush(DPalette::ToolTipText, pa_name.color(DPalette::ToolTipText)); // d->textLable->setForegroundRole(DPalette::Text); // d->textLable->setForegroundRole(DPalette::ToolTipText); // d->textLable->setPalette(pa_name); // interlayout->addWidget(iconLabel, 0, Qt::AlignVCenter); interlayout->addWidget(d->textLable, 0, Qt::AlignVCenter); layout->addWidget(d->m_interFrame, 0, Qt::AlignVCenter); adjustSize(); auto *bodyShadow = new QGraphicsDropShadowEffect; bodyShadow->setBlurRadius(10.0); bodyShadow->setColor(QColor(0, 0, 0, 25/*0.1 * 255*/)); bodyShadow->setOffset(0, 2.0); // this->setGraphicsEffect(bodyShadow); hide(); // d->textLable->hide(); //setFixedHeight(32); } ToolTips::~ToolTips() { } void ToolTips::enterEvent(QEvent *e) { Q_UNUSED(e) hide(); } QBrush ToolTips::background() const { Q_D(const ToolTips); return d->background; } void ToolTips::setText(const QString text) { Q_D(const ToolTips); d->textLable->setText(text); m_strText = text; update(); } int ToolTips::radius() const { Q_D(const ToolTips); return d->radius; } QColor ToolTips::borderColor() const { Q_D(const ToolTips); return d->borderColor; } void ToolTips::setBackground(QBrush background) { Q_D(ToolTips); d->background = background; } void ToolTips::setRadius(int radius) { Q_D(ToolTips); d->radius = radius; } void ToolTips::setBorderColor(QColor borderColor) { Q_D(ToolTips); d->borderColor = borderColor; } void ToolTips::pop(QPoint center) { //Q_D(ToolTips); this->show(); center = center - QPoint(width() / 2, height() / 2); this->move(center); // auto topOpacity = new QGraphicsOpacityEffect(d->m_interFrame); // topOpacity->setOpacity(1); // d->m_interFrame->setGraphicsEffect(topOpacity); // QPropertyAnimation *animation4 = new QPropertyAnimation(topOpacity, "opacity"); //// animation4->setEasingCurve(QEasingCurve::InCubic); // animation4->setDuration(2000); // animation4->setStartValue(0); // animation4->setKeyValueAt(0.25, 1); // animation4->setKeyValueAt(0.5, 1); // animation4->setKeyValueAt(0.75, 1); // animation4->setEndValue(0); // animation4->start(); // animation4->connect(animation4, &QPropertyAnimation::finished, // animation4, &QPropertyAnimation::deleteLater); // animation4->connect(animation4, &QPropertyAnimation::finished, // this, [ = ]() { // d->m_interFrame->setGraphicsEffect(nullptr); // this->hide(); // }); } #ifdef _OLD void ToolTips::paintEvent(QPaintEvent *) { Q_D(ToolTips); // QFrame::paintEvent(e); // return; bool outer = true; QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing | QPainter::HighQualityAntialiasing); auto radius = d->radius; auto penWidthf = 1.0; // auto background = d->background; const QPalette pal = QGuiApplication::palette();//this->palette(); QColor background = pal.color(QPalette::ToolTipBase); DPalette pa_name = DApplicationHelper::instance()->palette(d->textLable); pa_name.setBrush(DPalette::Text, pa_name.color(DPalette::ToolTipText)); pa_name.setBrush(DPalette::ToolTipText, pa_name.color(DPalette::ToolTipText)); d->textLable->setForegroundRole(DPalette::Text); d->textLable->setForegroundRole(DPalette::ToolTipText); d->textLable->setPalette(pa_name); auto borderColor = d->borderColor; auto margin = 2.0; auto shadowMargins = QMarginsF(margin, margin, margin, margin); // QPainterPath frame; // frame.addRect(rect().marginsRemoved(QMargins(1, 1, 1, 1))); // painter.strokePath(frame, QPen(Qt::red)); // draw background auto backgroundRect = QRectF(rect()).marginsRemoved(shadowMargins); QPainterPath backgroundPath; backgroundPath.addRoundedRect(backgroundRect, radius, radius); painter.fillPath(backgroundPath, background); // draw border QPainterPath borderPath; QRectF borderRect = QRectF(rect()); auto borderRadius = radius; QMarginsF borderMargin(penWidthf / 2, penWidthf / 2, penWidthf / 2, penWidthf / 2); if (outer) { borderRadius += penWidthf / 2; borderRect = borderRect.marginsAdded(borderMargin).marginsRemoved(shadowMargins); } else { borderRadius -= penWidthf / 2; borderRect = borderRect.marginsRemoved(borderMargin).marginsRemoved(shadowMargins); } borderPath.addRoundedRect(borderRect, borderRadius, borderRadius); QPen borderPen(borderColor); borderPen.setWidthF(penWidthf); painter.strokePath(borderPath, borderPen); } } #else void ToolTips::paintEvent(QPaintEvent *) { Q_D(ToolTips); QPainter pt(this); pt.setRenderHint(QPainter::Antialiasing); // connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [=]{ // DPalette pa_name = DApplicationHelper::instance()->palette(d->textLable); // pa_name.setBrush(DPalette::Text, pa_name.color(DPalette::ToolTipText)); // pa_name.setBrush(DPalette::ToolTipText, pa_name.color(DPalette::ToolTipText)); // d->textLable->setForegroundRole(DPalette::Text); // d->textLable->setForegroundRole(DPalette::ToolTipText); // d->textLable->setPalette(pa_name); // }); if (DGuiApplicationHelper::LightType == DGuiApplicationHelper::instance()->themeType()) { pt.setPen(QColor(0, 0, 0, 10)); pt.setBrush(QBrush(QColor(247, 247, 247, 220))); } else if (DGuiApplicationHelper::DarkType == DGuiApplicationHelper::instance()->themeType()) { pt.setPen(QColor(255, 255, 255, 10)); pt.setBrush(QBrush(QColor(42, 42, 42, 220))); } else { pt.setPen(QColor(0, 0, 0, 10)); pt.setBrush(QBrush(QColor(247, 247, 247, 220))); } QRect rect = this->rect(); rect.setWidth(rect.width() - 1); rect.setHeight(rect.height() - 1); QPainterPath painterPath; painterPath.addRoundedRect(rect, d->radius, d->radius); pt.drawPath(painterPath); } #endif void ToolTips::resizeEvent(QResizeEvent *ev) { // resetSize(); // update(); return QWidget::resizeEvent(ev); } void ToolTips::resetSize(const int maxWidth) { Q_D(ToolTips); QFont font = DFontSizeManager::instance()->get(DFontSizeManager::T8); QFontMetrics fm(font); auto w = fm.boundingRect(d->textLable->text()).width(); if (w >= maxWidth - 14) { d->textLable->setWordWrap(true); this->setFixedWidth(maxWidth); d->textLable->setFixedWidth(maxWidth - 14); } } deepin-music-6.0.1.54/src/music-player/view/widget/tooltips.h000664 000000 000000 00000002401 13703317554 024000 0ustar00rootroot000000 000000 #ifndef TOOLTIPS_H #define TOOLTIPS_H #include #include #include #include #include #include #include class ToolTipsPrivate; class ToolTips : public QFrame { Q_OBJECT Q_PROPERTY(int radius READ radius WRITE setRadius) Q_PROPERTY(QBrush background READ background WRITE setBackground) Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor) public: explicit ToolTips(const QString &text, QWidget *parent = nullptr); ~ToolTips() override; void pop(QPoint center); int radius() const; QColor borderColor() const; QBrush background() const; public slots: void setText(const QString text); void setBackground(QBrush background); void setRadius(int radius); void setBorderColor(QColor borderColor); protected: virtual void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE; void enterEvent(QEvent *e) override; virtual void resizeEvent(QResizeEvent *ev) Q_DECL_OVERRIDE; public: void resetSize(const int maxWidth); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), ToolTips) QString m_strText; }; #endif // TOOLTIPS_H deepin-music-6.0.1.54/src/music-player/view/widget/waveform.cpp000664 000000 000000 00000042242 13703317554 024313 0ustar00rootroot000000 000000 /* -*- Mode: C++; indent-tabs-mode: nil; tab-width: 4 -*- * -*- coding: utf-8 -*- * * Copyright (C) 2011 ~ 2018 Deepin, Inc. * 2011 ~ 2018 Wang Yong * * Author: Wang Yong * Maintainer: Wang Yong * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "waveform.h" #include "waveformscale.h" #include "core/util/fft.h" const int Waveform::SAMPLE_DURATION = 30; const int Waveform::WAVE_WIDTH = 2; const int Waveform::WAVE_DURATION = 4; Waveform::Waveform(Qt::Orientation orientation, QWidget *widget, QWidget *parent) : DSlider(orientation, parent), mainWindow(widget) { QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::Preferred); setSizePolicy(sp); setFixedHeight(40); maxSampleNum = 16; slider()->hide(); waveformScale = new WaveformScale(mainWindow); waveformScale->setAttribute(Qt::WA_TransparentForMouseEvents, true); waveformScale->hide(); } void Waveform::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); painter.save(); painter.setPen(Qt::NoPen); qreal devicePixelRatio = qApp->devicePixelRatio(); if (devicePixelRatio > 1.0) { painter.setClipRect(QRect(rect().x(), rect().y(), rect().width() - 1, rect().height())); } else { painter.setClipRect(QRect(rect().x(), rect().y(), rect().width(), rect().height())); } int volume = 0; double curWidth = rect().width() * (value() * 1.0) / (maximum() - minimum()); //draw left QColor fillColor(Qt::black); if (themeType == 2) fillColor = QColor("#FFFFFF"); painter.save(); if (devicePixelRatio > 1.0) { painter.setClipRect(QRect(rect().x(), rect().y(), static_cast(curWidth - 1), rect().height())); } else { painter.setClipRect(QRect(rect().x(), rect().y(), static_cast(curWidth), rect().height())); } for (int i = 0; i < sampleList.size(); i++) { volume = static_cast(sampleList[i] * rect().height()); // if (volume == 0) { // QPainterPath path; // path.addRect(QRectF(rect().x() + i * WAVE_DURATION, rect().y() + (rect().height() - 1), WAVE_DURATION, 1)); // painter.fillPath(path, fillColor); // } else { if (volume == 0) { volume = 1; } QRect sampleRect(rect().x() + i * WAVE_DURATION, rect().y() + (rect().height() - 1), WAVE_WIDTH, -qAbs(volume)); painter.fillRect(sampleRect, fillColor); // } } if (sampleList.size() < curWidth / WAVE_DURATION) { QPainterPath path; path.addRect(QRectF(rect().x() + sampleList.size() * WAVE_DURATION, rect().y() + (rect().height() - 1), curWidth - (sampleList.size() * WAVE_DURATION), 1)); painter.fillPath(path, fillColor); } painter.restore(); //draw right fillColor = QColor("#000000"); if (themeType == 2) fillColor = QColor("#FFFFFF"); fillColor.setAlphaF(0.2); painter.save(); if (devicePixelRatio > 1.0) { painter.setClipRect(QRect(rect().x() + static_cast(curWidth - 1), rect().y(), rect().width() - static_cast(curWidth - 1), rect().height())); } else { painter.setClipRect(QRect(rect().x() + static_cast(curWidth), rect().y(), rect().width() - static_cast(curWidth), rect().height())); } for (int i = 0; i < sampleList.size(); i++) { volume = static_cast(sampleList[i] * rect().height()); // if (volume == 0) { // QPainterPath path; // path.addRect(QRectF(rect().x() + i * WAVE_DURATION, rect().y() + (rect().height() - 1), WAVE_DURATION, 1)); // painter.fillPath(path, fillColor); // } else { if (volume == 0) { volume = 1; } QRect sampleRect(rect().x() + i * WAVE_DURATION, rect().y() + (rect().height() - 1), WAVE_WIDTH, -qAbs(volume)); painter.fillRect(sampleRect, fillColor); // } } if (sampleList.size() < rect().width() / WAVE_DURATION) { fillColor = Qt::darkGray; QPainterPath path; path.addRect(QRectF(rect().x() + sampleList.size() * WAVE_DURATION, rect().y() + (rect().height() - 1), rect().width() - (sampleList.size() * WAVE_DURATION), 1)); painter.fillPath(path, fillColor); } painter.restore(); painter.restore(); } void Waveform::clearWave() { sampleList.clear(); } void Waveform::onAudioBuffer(const QVector &allData, const QString &hash) { metaHash = hash; QVector t_allData; if (!allData.isEmpty()) { float max = allData.first(); for (auto data : allData) { if (max < data) max = data; } for (int i = 0; i < allData.size(); ++i) { t_allData.append(qAbs(allData[i] / max)); } } reciveSampleList = t_allData; spectrumFlag = false; updateAudioBuffer(); } void Waveform::onAudioBufferProbed(const QAudioBuffer &buffer) { spectrumFlag = true; for (auto value : getBufferLevels(buffer)) { reciveSampleList.push_front(static_cast(value)); break; } if (reciveSampleList.size() > maxSampleNum) reciveSampleList.pop_back(); powerSpectrum(); update(); // if (width() > maxSampleNum) // maxSampleNum = width(); // if (reciveSampleList.size() == maxSampleNum) { // sampleList = reciveSampleList; // reciveSampleList.clear(); // } // updateScaleSize(); // update(); } // returns the audio level for each channel QVector Waveform::getBufferLevels(const QAudioBuffer &buffer) { QVector values; if (!buffer.format().isValid() || buffer.format().byteOrder() != QAudioFormat::LittleEndian) return values; if (buffer.format().codec() != "audio/pcm") return values; int channelCount = buffer.format().channelCount(); values.fill(0, channelCount); qreal peak_value = Waveform::getPeakValue(buffer.format()); if (qFuzzyCompare(peak_value, qreal(0))) return values; switch (buffer.format().sampleType()) { case QAudioFormat::Unknown: case QAudioFormat::UnSignedInt: if (buffer.format().sampleSize() == 32) values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); if (buffer.format().sampleSize() == 16) values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); if (buffer.format().sampleSize() == 8) values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); for (int i = 0; i < values.size(); ++i) values[i] = qAbs(values.at(i) - peak_value / 2) / (peak_value / 2); break; case QAudioFormat::Float: if (buffer.format().sampleSize() == 32) { values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); for (int i = 0; i < values.size(); ++i) values[i] /= peak_value; } break; case QAudioFormat::SignedInt: if (buffer.format().sampleSize() == 32) values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); if (buffer.format().sampleSize() == 16) values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); if (buffer.format().sampleSize() == 8) values = Waveform::getBufferLevels(buffer.constData(), buffer.frameCount(), channelCount); for (int i = 0; i < values.size(); ++i) values[i] /= peak_value; break; } return values; } template QVector Waveform::getBufferLevels(const T *buffer, int frames, int channels) { QVector max_values; max_values.fill(0, channels); for (int i = 0; i < frames; ++i) { for (int j = 0; j < channels; ++j) { qreal value = qAbs(qreal(buffer[i * channels + j])); if (value > max_values.at(j)) max_values.replace(j, value); } } return max_values; } // This function returns the maximum possible sample value for a given audio format qreal Waveform::getPeakValue(const QAudioFormat &format) { // Note: Only the most common sample formats are supported if (!format.isValid()) return qreal(0); if (format.codec() != "audio/pcm") return qreal(0); switch (format.sampleType()) { case QAudioFormat::Unknown: break; case QAudioFormat::Float: if (format.sampleSize() != 32) // other sample formats are not supported return qreal(0); return qreal(1.00003); case QAudioFormat::SignedInt: if (format.sampleSize() == 32) return qreal(INT_MAX); if (format.sampleSize() == 16) return qreal(SHRT_MAX); if (format.sampleSize() == 8) return qreal(CHAR_MAX); break; case QAudioFormat::UnSignedInt: if (format.sampleSize() == 32) return qreal(UINT_MAX); if (format.sampleSize() == 16) return qreal(USHRT_MAX); if (format.sampleSize() == 8) return qreal(UCHAR_MAX); break; } return qreal(0); } void Waveform::mouseReleaseEvent(QMouseEvent *event) { this->blockSignals(false); DSlider::mouseReleaseEvent(event); Q_EMIT valueAccpet(value()); updateScaleSize(); } void Waveform::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton || event->button() == Qt::MiddleButton || event->button() == Qt::RightButton) { if (orientation() == Qt::Vertical) { setValue(minimum() + ((maximum() - minimum()) * (height() - event->y())) / height()) ; } else { setValue(minimum() + ((maximum() - minimum()) * (event->x())) / (width())); } } updateScaleSize(); this->blockSignals(true); } void Waveform::mouseMoveEvent(QMouseEvent *event) { auto viewRange = this->width(); if (0 == viewRange) { return; } auto value = minimum() + ((maximum() - minimum()) * (event->x())) / (width()); setValue(value); updateScaleSize(); } void Waveform::onProgressChanged(qint64 value, qint64 duration, qint64 coefficient) { if (IsShowwaveformScale) waveformScale->show(); auto length = maximum() - minimum(); Q_ASSERT(length != 0); /*------curCoefficient-------*/ curCoefficient = coefficient; auto progress = 0; if (0 != duration) { progress = static_cast(length * value / duration); } if (signalsBlocked()) { return; } curValue = value; allDuration = duration; blockSignals(true); setValue(progress); blockSignals(false); update(); updateScaleSize(); } void Waveform::updateScaleSize() { auto waveScaleWidth = waveformScale->width(); double curWidth = rect().width() * (value() * 1.0) / (maximum() - minimum()); curValue = static_cast(allDuration * (value() * 1.0) / (maximum() - minimum())); auto wavePos = mapToParent(QPoint(static_cast(curWidth - waveScaleWidth / 2), 0)); wavePos.ry() = -35; wavePos = (static_cast(parent())->mapToGlobal(wavePos)); wavePos = mainWindow->mapFromGlobal(wavePos); waveformScale->move(wavePos.x(), wavePos.y()); waveformScale->setValue(curValue * curCoefficient); waveformScale->update(); } void Waveform::setThemeType(int type) { themeType = type; } void Waveform::clearBufferAudio(const QString &hash) { if (hash.isEmpty() || hash != metaHash) { reciveSampleList.clear(); sampleList.clear(); metaHash.clear(); } } void Waveform::hidewaveformScale() { waveformScale->hide(); } void Waveform::enterEvent(QEvent *event) { IsShowwaveformScale = true; updateScaleSize(); waveformScale->show(); waveformScale->raise(); DSlider::enterEvent(event); } void Waveform::leaveEvent(QEvent *event) { IsShowwaveformScale = false; waveformScale->hide(); DSlider::leaveEvent(event); } void Waveform::resizeEvent(QResizeEvent *event) { DSlider::resizeEvent(event); if (!spectrumFlag) updateAudioBuffer(); else powerSpectrum(); } void Waveform::updateAudioBuffer() { if (reciveSampleList.isEmpty()) { sampleList.clear(); return; } QVector curSampleListX; float singleWidth = width() / float(reciveSampleList.size() - 1); for (int i = 0; i < reciveSampleList.size(); i++) { curSampleListX.append(i * singleWidth); } QVector endSampleListX, endSampleListY; spline(curSampleListX, reciveSampleList, endSampleListX, sampleList, width() / WAVE_DURATION + 1); update(); } bool Waveform::powerSpectrum() { sampleList.clear(); if (reciveSampleList.size() != maxSampleNum) return false; complex *sample; sample = new complex[maxSampleNum]; for (int i = 0; i < maxSampleNum; i++) sample[i] = complex(reciveSampleList[i]/* / 32768.0*/, 0); int log2N = static_cast(log2(maxSampleNum - 1) + 1); int sign = -1; CFFT::process(sample, log2N, sign); QVector curSampleListX, curSampleListY; for (int i = 0; i < maxSampleNum; i++) { curSampleListY.append(abs(sample[i]) / static_cast(sqrt(2)) / 2); if (curSampleListY[i] < 0 || curSampleListY[i] > 1) curSampleListY[i] = 0; } curSampleListY = curSampleListY.mid(curSampleListY.size() / 2 - 3, 7); int singleWidth = width() / (curSampleListY.size() - 1); for (int i = 0; i < curSampleListY.size(); i++) { curSampleListX.append(i * singleWidth); } QVector endSampleListX, endSampleListY; spline(curSampleListX, curSampleListY, endSampleListX, sampleList, width() / WAVE_DURATION + 1); delete [] sample; return true; } void Waveform::spline(QVector &x, QVector &y, QVector &vx, QVector &vy, int pnt) { vx.clear(); vy.clear(); QVector tx = x; QVector ty = y; for (int i = 1; i < x.size();) { if (fabs(x[i] - x[i - 1]) < 0.01f) { x.erase(x.begin() + i); y.erase(y.begin() + i); continue; } i ++; } int N = x.size(); if (N != y.size()) return; if (N == 1) { vx = x; vy = y; return; } if (N == 2) { x.insert(x.begin() + 1, (x[0] + x[1]) / 2); y.insert(y.begin() + 1, (y[0] + y[1]) / 2); } QVector h; h.resize(N - 1); for (int i = 0; i < N - 1; i ++) h[i] = x[i + 1] - x[i]; QVector M; M.resize(N); M[0] = 0; M[N - 1] = 0; for (int i = 1; i < N - 1; i ++) M[i] = 6 * ((y[i + 1] - y[i]) / h[i] - (y[i] - y[ i - 1]) / h[i - 1]); QVector > A; A.resize(N); for (int i = 0; i < N; i ++) A[i].resize(3); A[0][0] = 1; A[N - 1][2] = 1; for (int i = 1; i < N - 1; i ++) { A[i][0] = h[i - 1]; A[i][1] = 2 * (h[i - 1] + h[i]); A[i][2] = h[i]; } QVector C; C.resize(N); C[0] = A[0][1] / A[0][0]; for (int i = 1; i < N; i ++) C[i] = A[i][2] / (A[i][1] - C[i - 1] * A[i][0]); QVector D; D.resize(N); D[0] = M[0] / A[0][0]; for (int i = 1; i < N; i ++) D[i] = (M[i] - D[i - 1] * A[i][0]) / (A[i][1] - C[i - 1] * A[i][0]); QVector m; m.resize(N); m[N - 1] = 0; for (int i = N - 2; i >= 0; i --) m[i] = D[i] - C[i] * m[i + 1]; QVector a, b, c, d; a.resize(N - 1); b.resize(N - 1); c.resize(N - 1); d.resize(N - 1); for (int i = 0; i < N - 1; i ++) { a[i] = y[i]; b[i] = (y[ i + 1] - y[i]) / h[i] - h[i] * m[i] / 2 - h[i] * (m[i + 1] - m[i]) / 6; c[i] = m[i] / 2; d[i] = (m[i + 1] - m[i]) / (6 * h[i]); } vx.resize(pnt); vy.resize(pnt); int index = 0; for (int i = 0; i < (pnt - 1); i ++) { vx[i] = i * (x[N - 1] - x[0]) / (pnt - 1) + x[0]; while (vx[i] > x[index + 1]) { index ++; } float fx = vx[i] - x[index]; vy[i] = a[index] + b[index] * fx + c[index] * fx * fx + d[index] * fx * fx * fx; } x = tx; y = ty; } deepin-music-6.0.1.54/src/music-player/view/widget/waveform.h000664 000000 000000 00000005660 13703317554 023763 0ustar00rootroot000000 000000 /* -*- Mode: C++; indent-tabs-mode: nil; tab-width: 4 -*- * -*- coding: utf-8 -*- * * Copyright (C) 2011 ~ 2018 Deepin, Inc. * 2011 ~ 2018 Wang Yong * * Author: Wang Yong * Maintainer: Wang Yong * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef WAVEFORM_H #define WAVEFORM_H #include DWIDGET_USE_NAMESPACE class QAudioBuffer; class QAudioFormat; class WaveformScale; class Waveform : public DSlider { Q_OBJECT static const int SAMPLE_DURATION; static const int WAVE_WIDTH; static const int WAVE_DURATION; public: Waveform(Qt::Orientation orientation, QWidget *widget, QWidget *parent = nullptr); static qreal getPeakValue(const QAudioFormat &format); static QVector getBufferLevels(const QAudioBuffer &buffer); template static QVector getBufferLevels(const T *buffer, int frames, int channels); void clearWave(); void updateScaleSize(); void setThemeType(int type); void clearBufferAudio(const QString &hash); void hidewaveformScale(); Q_SIGNALS: void valueAccpet(int value); public slots: void onAudioBufferProbed(const QAudioBuffer &buffer); void onProgressChanged(qint64 value, qint64 duration, qint64 coefficient); void onAudioBuffer(const QVector &allData, const QString &hash); protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; void enterEvent(QEvent *event) Q_DECL_OVERRIDE; void leaveEvent(QEvent *event) Q_DECL_OVERRIDE; void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; private: void updateAudioBuffer(); bool powerSpectrum(); void spline(QVector &x, QVector &y, QVector &vx, QVector &vy, int pnt); private: QWidget *mainWindow; QVector sampleList; QVector reciveSampleList; int maxSampleNum; qint64 curValue = 0; qint64 allDuration = 1; qint64 curCoefficient = 1; int themeType = 1; WaveformScale *waveformScale; bool spectrumFlag = true; QString metaHash; bool IsShowwaveformScale = false; }; #endif deepin-music-6.0.1.54/src/music-player/view/widget/waveformscale.cpp000775 000000 000000 00000005575 13703317554 025336 0ustar00rootroot000000 000000 /* -*- Mode: C++; indent-tabs-mode: nil; tab-width: 4 -*- * -*- coding: utf-8 -*- * * Copyright (C) 2011 ~ 2018 Deepin, Inc. * 2011 ~ 2018 Wang Yong * * Author: Wang Yong * Maintainer: Wang Yong * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "waveformscale.h" #include #include #include #include #include const int WaveformScale::WAVE_WIDTH = 2; const int WaveformScale::WAVE_TEXTHEIGHT = 25; const int WaveformScale::WAVE_TEXTWIDTH = 38; WaveformScale::WaveformScale(QWidget *parent) : DFrame(parent) { setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); setFixedSize(56, 105); setObjectName("WaveformScale"); } void WaveformScale::setValue(qint64 value) { curValue = value; update(); } void WaveformScale::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); painter.setPen(Qt::NoPen); //draw line painter.setBrush(QColor("#FF8A00")); QRectF lineRect(rect().center().x() - WAVE_WIDTH / 2, WAVE_TEXTHEIGHT, WAVE_WIDTH, rect().height() - WAVE_TEXTHEIGHT - 20); painter.drawRect(lineRect); painter.setBrush(QColor("#0081FF")); //draw top int t_textWidth = WAVE_TEXTWIDTH; QRect t_textRect(rect().center().x() - t_textWidth / 2, 0, t_textWidth, 20); QPainterPath painterPath; painterPath.addRoundRect(t_textRect, 40, 80); QPolygonF topPoly; topPoly.append(QPointF(rect().center().x() - 5, 20)); topPoly.append(QPointF(rect().center().x() + 5, 20)); topPoly.append(QPointF(rect().center().x(), 25)); painterPath.addPolygon(topPoly); painter.drawPath(painterPath); //draw bottom QPolygonF bottomPoly; bottomPoly.append(QPointF(rect().center().x(), rect().height() - 20)); bottomPoly.append(QPointF(rect().center().x() - 5, rect().height() - 10)); bottomPoly.append(QPointF(rect().center().x() + 5, rect().height() - 10)); painter.drawPolygon(bottomPoly); painter.setPen(Qt::white); auto font = painter.font(); font.setFamily("SourceHanSansSC"); font.setWeight(QFont::Normal); font.setPixelSize(12); painter.setFont(font); painter.drawText(t_textRect, Qt::AlignCenter, DMusic::lengthString(curValue)); } deepin-music-6.0.1.54/src/music-player/view/widget/waveformscale.h000775 000000 000000 00000002502 13703317554 024766 0ustar00rootroot000000 000000 /* -*- Mode: C++; indent-tabs-mode: nil; tab-width: 4 -*- * -*- coding: utf-8 -*- * * Copyright (C) 2011 ~ 2018 Deepin, Inc. * 2011 ~ 2018 Wang Yong * * Author: Wang Yong * Maintainer: Wang Yong * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include DWIDGET_USE_NAMESPACE class WaveformScale : public DFrame { Q_OBJECT static const int WAVE_WIDTH; static const int WAVE_TEXTHEIGHT; static const int WAVE_TEXTWIDTH; public: WaveformScale(QWidget *parent = nullptr); void setValue(qint64 value); protected: void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE; private: QString timeStr; qint64 curValue = 0; }; deepin-music-6.0.1.54/src/plugin/000775 000000 000000 00000000000 13703317554 016404 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/plugin/netease-meta-search/000775 000000 000000 00000000000 13703317554 022217 5ustar00rootroot000000 000000 deepin-music-6.0.1.54/src/plugin/netease-meta-search/NeteaseMetaSearchEngine.json000664 000000 000000 00000000125 13703317554 027557 0ustar00rootroot000000 000000 { "id": "netease-meta-search-engine", "name": "Netease Meta Search Engine" } deepin-music-6.0.1.54/src/plugin/netease-meta-search/metaanalyzer.cpp000664 000000 000000 00000012431 13703317554 025420 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include "metaanalyzer.h" static bool similarString(QString dest, QString orig) { auto len = dest.length(); if (len <= 2) { return true; } auto count = 0; for (auto c : orig) { auto index = dest.indexOf(c); if (dest.length() > index && index > 0) { dest.remove(index, 1); count ++; } } // qDebug() << count * 100/ len; if (2 * count > len) { return true; } else { return false; } } MetaAnalyzer::MetaAnalyzer(const MetaPtr meta, DMusic::Net::Geese *geese, QObject *parent) : QObject(parent) { m_geese = geese; m_meta = meta; m_delayTimer.setInterval(500); } void MetaAnalyzer::onGetTitleResult(QList songlist) { m_titleResult = songlist; m_titleResultGet = true; analyzerResults(); } void MetaAnalyzer::onGetAblumResult(QList songlist) { m_ablumResult = songlist; m_ablumResultGet = true; analyzerResults(); } void MetaAnalyzer::analyzerResults() { // qDebug() << "***********************" << m_titleResultGet << m_ablumResultGet; if (!m_titleResultGet || !m_ablumResultGet) { return; } bool find = false; DMusic::SearchMeta result; for (auto &titleResult : m_titleResult) { for (auto &albumResult : m_ablumResult) { if (titleResult.album.name == albumResult.album.name && titleResult.name == albumResult.name) { // qDebug() << "check" << m_meta.title << titleResult.name << // similarString(m_meta.title, titleResult.name); if (!m_meta.isNull() && similarString(m_meta->title, titleResult.name)) { result = titleResult; find = true; break; } } } if (find) { break; } } if (!find) { m_titleResult = m_titleResult + m_ablumResult; for (auto &titleResult : m_titleResult) { // qDebug() << "similarString" << m_meta.title << titleResult.name; if (!m_meta.isNull() && similarString(m_meta->title, titleResult.name)) { result = titleResult; find = true; break; } } } if (!find && m_titleResult.length()) { result = m_titleResult.first(); find = true; } // qDebug() << "find" << result.name << result.album.name; // qDebug() << "fetch cover url:" << result.album.coverUrl << result.name << m_meta; // connect(m_geese->getGoose(result.album.coverUrl), &DMusic::Net::Goose::arrive, // this, [ = ](int errCode, const QByteArray & data) { // qDebug() << "NeteaseMetaSearchEngine received: " << errCode << data.length(); // Q_EMIT this->coverLoaded(m_meta, data); // }); Q_EMIT searchFinished(m_meta, result); // qDebug() << "delete analyzer" ; // this->deleteLater(); } //if (m_titleResult.isEmpty() && !m_ablumResult.isEmpty()) { // qDebug() << "get m_titleResult"; // auto song = m_ablumResult.first(); // qDebug() << "fetch cover url:" << song.album.coverUrl; // connect(m_geese->getGoose(song.album.coverUrl), &DMusic::Net::Goose::arrive, // this, [ = ](int errCode, const QByteArray & data) { // qDebug() << "NeteaseMetaSearchEngine received: " << errCode << data.length(); // Q_EMIT this->coverLoaded(m_meta, data); // }); //} //if (!m_titleResult.isEmpty() && m_ablumResult.isEmpty()) { // qDebug() << "get m_ablumResult"; // for (auto &song : m_titleResult) { // if (song.album.name == m_meta.album) { // qDebug() << "fetch cover url:" << song.album.coverUrl; // connect(m_geese->getGoose(song.album.coverUrl), &DMusic::Net::Goose::arrive, // this, [ = ](int errCode, const QByteArray & data) { // qDebug() << "NeteaseMetaSearchEngine received: " << errCode << data.length(); // Q_EMIT this->coverLoaded(m_meta, data); // }); // return; // } // } // auto song = m_titleResult.first(); // qDebug() << "fetch cover url:" << song.album.coverUrl; // connect(m_geese->getGoose(song.album.coverUrl), &DMusic::Net::Goose::arrive, // this, [ = ](int errCode, const QByteArray & data) { // qDebug() << "NeteaseMetaSearchEngine received: " << errCode << data.length(); // Q_EMIT this->coverLoaded(m_meta, data); // }); // return; //} //qDebug() << "get all"; deepin-music-6.0.1.54/src/plugin/netease-meta-search/metaanalyzer.h000664 000000 000000 00000003145 13703317554 025067 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include #include #include class MetaAnalyzer : public QObject { Q_OBJECT public: explicit MetaAnalyzer(const MetaPtr meta, DMusic::Net::Geese *geese, QObject *parent = 0); signals: void searchFinished(const MetaPtr meta, DMusic::SearchMeta song); public slots: void onGetTitleResult(QList songlist); void onGetAblumResult(QList songlist); private: void analyzerResults(); DMusic::Net::Geese *m_geese = nullptr; MetaPtr m_meta; bool m_titleResultGet = false; QList m_titleResult; bool m_ablumResultGet = false; QList m_ablumResult; QTimer m_delayTimer; }; deepin-music-6.0.1.54/src/plugin/netease-meta-search/netease-meta-search.pro000664 000000 000000 00000002660 13703317554 026560 0ustar00rootroot000000 000000 #------------------------------------------------- # # Project created by QtCreator 2016-12-15T14:39:39 # #------------------------------------------------- include($$PWD/../../config.pri) include($$PWD/../../interface/interface.pri) QT += network QT -= gui TARGET = netease-meta-search TEMPLATE = lib CONFIG += c++11 link_pkgconfig DESTDIR = $$BUILD_DIST/lib/$$APP_TARGET/plugins DEFINES += NETEASEMETASEARCH_LIBRARY # The following define makes your compiler Q_EMIT warnings if you use # any feature of Qt which as been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += neteasemetasearch.cpp \ metaanalyzer.cpp HEADERS += neteasemetasearch.h \ neteasemetasearch_global.h \ metaanalyzer.h target.path = $${PREFIX}/lib/deepin-music/plugins INSTALLS += target DISTFILES += \ NeteaseMetaSearchEngine.json LIBS += -L$$BUILD_DIST/lib/ -ldmusic INCLUDEPATH += $$PWD/../../libdmusic DEPENDPATH += $$PWD/../../libdmusic deepin-music-6.0.1.54/src/plugin/netease-meta-search/neteasemetasearch.cpp000664 000000 000000 00000020613 13703317554 026406 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "neteasemetasearch.h" #include #include #include #include #include #include #include #include #include #include #include "../../music-player/core/music.h" #include #include "metaanalyzer.h" using namespace DMusic; using namespace DMusic::Plugin; static int doSyncGet(const QString &rootUrl, QByteArray &result) { QNetworkRequest url; url.setUrl(rootUrl); QScopedPointer connection(new QNetworkAccessManager); QScopedPointer reply(connection->get(url)); qDebug() << "doSyncGet" << rootUrl; QEventLoop waitLoop; QObject::connect(reply.data(), SIGNAL(finished()), &waitLoop, SLOT(quit())); waitLoop.exec(); int errorCode = reply->error(); if (errorCode != 0) { qWarning() << "get" << url.url() << reply->errorString(); return errorCode; } result = reply->readAll(); return errorCode; } int downloadFile(const QString &rootUrl, const QString &filepath) { QByteArray result; auto ret = doSyncGet(rootUrl, result); if (QNetworkReply::NoError != ret) { return ret; } qDebug() << "save" << filepath; QFile file(filepath); file.open(QIODevice::WriteOnly); file.write(result); file.close(); return ret; } NeteaseMetaSearchEngine::NeteaseMetaSearchEngine(QObject *parent): MetaSearchEngine(parent) { qRegisterMetaType >(); qRegisterMetaType >(); qRegisterMetaType(); qRegisterMetaType>(); m_geese = new DMusic::Net::Geese(this); m_geese->setRawHeader("Content-Type", "application/x-www-form-urlencoded"); m_geese->setRawHeader("Cookie", "appver=1.5.0.75771;"); m_geese->setRawHeader("Referer", "http://music.163.com/"); // qDebug() << "-------------------------------------------------------"; // connect(this, &MetaSearchEngine::doSearchMeta, // this, &NeteaseMetaSearchEngine::searchMeta); connect(getObject(), SIGNAL(doSearchMeta(const MetaPtr)), this, SLOT(searchMeta(const MetaPtr))); connect(getObject(), SIGNAL(doSearchContext(const QString &)), this, SLOT(searchContext(const QString &))); // qDebug() << "-------------------------------------------------------"; } QString NeteaseMetaSearchEngine::pluginId() const { return "Netease-Meta-Search"; } QObject *NeteaseMetaSearchEngine::getObject() { return this; } DMusic::Plugin::PluginType NeteaseMetaSearchEngine::pluginType() const { return DMusic::Plugin::PluginType::TypeMetaSearchEngine; } static QList toSongList(const QByteArray &data) { QList SearchMetas; auto document = QJsonDocument::fromJson(data); auto searchResult = document.object().value("result").toObject(); auto songs = searchResult.value("songs").toArray(); // auto songCount = searchResult.value("songCount").toInt(); // qDebug() << "--------\n Find " << songCount << "result"; for (auto songJson : songs) { SearchMeta searchMeta; auto song = songJson.toObject(); auto length = song.value("bMusic").toObject().value("playTime").toInt(); searchMeta.id = QString("netease_%1").arg(song.value("id").toInt()); searchMeta.name = song.value("name").toString(); searchMeta.length = length; auto album = song.value("album").toObject(); searchMeta.album.name = album.value("name").toString(); searchMeta.album.coverUrl = album.value("blurPicUrl").toString(); auto artists = song.value("artists").toArray(); for (auto artistJson : artists) { auto artist = artistJson.toObject(); SearchArtist neArtist; neArtist.name = artist.value("name").toString(); searchMeta.artists << neArtist; } // qDebug() << ">>>> Find song:"; // qDebug() << SearchMeta.id << SearchMeta.name // << SearchMeta.artists.first().name // << SearchMeta.album.name; // for (auto artist : SearchMeta.artists) { // qDebug() << artist.name; // } // qDebug() << "<<<<"; SearchMetas << searchMeta; } // qDebug() << "--------"; return SearchMetas; } static QByteArray toLyric(const QByteArray &data) { auto document = QJsonDocument::fromJson(data); auto lrc = document.object().value("lrc").toObject(); return lrc.value("lyric").toString().toUtf8(); } void NeteaseMetaSearchEngine::searchMeta(const MetaPtr meta) { if (meta.isNull()) { return; } QString queryUrl = QLatin1String("http://music.163.com/api/search/pc"); QString queryTemplate = QLatin1String("s=%1&offset=0&limit=5&type=1"); QUrl params = QUrl(queryTemplate.arg(meta->title)); auto anlyzer = QSharedPointer(new MetaAnalyzer(meta, m_geese)); connect(anlyzer.data(), &MetaAnalyzer::searchFinished, this, [ = ](const MetaPtr meta, SearchMeta song) { qDebug() << "GTE" << song.id << "cover:" << song.album.coverUrl ; connect(m_geese->getGoose(song.album.coverUrl), &DMusic::Net::Goose::arrive, this, [ = ](int errCode, const QByteArray & data) { qDebug() << "netease cover respone:" << errCode << "with body size:" << data.length(); Q_EMIT this->coverLoaded(meta, song, data); }); QString lyricUrl = QLatin1String("http://music.163.com/api/song/lyric?os=pc&id=%1&lv=-1&kv=-1&tv=-1"); lyricUrl = lyricUrl.arg(QString(song.id).remove("netease_")); qDebug() << "GTE" << song.id << "lyric:" << lyricUrl; connect(m_geese->getGoose(lyricUrl), &DMusic::Net::Goose::arrive, this, [ = ](int errCode, const QByteArray & data) { qDebug() << "netease lyric respone:" << errCode << "with body size:" << data.length(); Q_EMIT this->lyricLoaded(meta, song, toLyric(data)); }); }); auto goose = m_geese->postGoose(queryUrl, params.toEncoded()); connect(goose, &DMusic::Net::Goose::arrive, this, [ = ](int errCode, const QByteArray & data) { if (errCode != QNetworkReply::NoError || anlyzer.isNull()) { return; } auto searchMetas = toSongList(data); anlyzer->onGetAblumResult(searchMetas); goose->deleteLater(); }); queryTemplate = QLatin1String("s=%1&offset=0&limit=5&type=1"); params = QUrl(queryTemplate.arg(meta->title + meta->album)); goose = m_geese->postGoose(queryUrl, params.toEncoded()); connect(goose, &DMusic::Net::Goose::arrive, this, [ = ](int errCode, const QByteArray & data) { if (errCode != QNetworkReply::NoError || anlyzer.isNull()) { return; } auto searchMetas = toSongList(data); anlyzer->onGetTitleResult(searchMetas); goose->deleteLater(); }); } void NeteaseMetaSearchEngine::searchContext(const QString &context) { QString queryUrl = QLatin1String("http://music.163.com/api/search/pc"); QString queryTemplate = QLatin1String("s=%1&offset=0&limit=10&type=1"); QUrl params = QUrl(queryTemplate.arg(context)); auto goose = m_geese->postGoose(queryUrl, params.toEncoded()); connect(goose, &DMusic::Net::Goose::arrive, this, [ = ](int errCode, const QByteArray & data) { qDebug() << "NeteaseMetaSearchEngine errcode: " << errCode; auto searchMetas = toSongList(data); qDebug() << "contextSearchFinished with " << searchMetas.length() << "result"; Q_EMIT this->contextSearchFinished(context, searchMetas); goose->deleteLater(); }); } deepin-music-6.0.1.54/src/plugin/netease-meta-search/neteasemetasearch.h000664 000000 000000 00000003114 13703317554 026050 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include "neteasemetasearch_global.h" #include #include #include class NETEASEMETASEARCHSHARED_EXPORT NeteaseMetaSearchEngine: public DMusic::Plugin::MetaSearchEngine { Q_OBJECT Q_PLUGIN_METADATA(IID "org.deepin.Music.Plugin" FILE "NeteaseMetaSearchEngine.json") Q_INTERFACES(DMusic::Plugin::PluginInterface) public: NeteaseMetaSearchEngine(QObject *parent = 0); virtual DMusic::Plugin::PluginType pluginType() const Q_DECL_OVERRIDE; virtual QString pluginId() const Q_DECL_OVERRIDE; public slots: virtual QObject *getObject() Q_DECL_OVERRIDE; virtual void searchMeta(const MetaPtr meta) Q_DECL_OVERRIDE; virtual void searchContext(const QString &context); private: DMusic::Net::Geese *m_geese = nullptr; }; deepin-music-6.0.1.54/src/plugin/netease-meta-search/neteasemetasearch_global.h000664 000000 000000 00000001737 13703317554 027401 0ustar00rootroot000000 000000 /* * Copyright (C) 2016 ~ 2018 Wuhan Deepin Technology Co., Ltd. * * Author: Iceyer * * Maintainer: Iceyer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #if defined(NETEASEMETASEARCH_LIBRARY) # define NETEASEMETASEARCHSHARED_EXPORT Q_DECL_EXPORT #else # define NETEASEMETASEARCHSHARED_EXPORT Q_DECL_IMPORT #endif deepin-music-6.0.1.54/src/plugin/plugin.pro000664 000000 000000 00000000072 13703317554 020423 0ustar00rootroot000000 000000 TEMPLATE = subdirs #SUBDIRS += netease-meta-search deepin-music-6.0.1.54/src/src.pro000664 000000 000000 00000000246 13703317554 016421 0ustar00rootroot000000 000000 TEMPLATE = subdirs CONFIG = ordered isEmpty(PREFIX){ PREFIX = /usr } SUBDIRS += vendor SUBDIRS += libdmusic \ music-player \ plugin \